REDROOM
PHP 8.2.31
Path:
Logout
Edit File
Size: 22.70 MB
Close
/opt/cpanel/ea-wappspector/vendor/phpstan/phpstan/phpstan.phar
Text
Base64
IyEvdXNyL2Jpbi9lbnYgcGhwCjw/cGhwCgpQaGFyOjptYXBQaGFyKCdwaHBzdGFuLnBoYXInKTsKCnJlcXVpcmUgJ3BoYXI6Ly9waHBzdGFuLnBoYXIvYmluL3BocHN0YW4nOwoKX19IQUxUX0NPTVBJTEVSKCk7ID8+DQq3ywcAghcAABEAAAABAAAAAAAAAAAACwAAAHByZWxvYWQucGhwE/ABAOtPo2kT8AEAdKbDFqQBAAAAAAAAGQAAAGNvbmYvY29uZmlnLmxldmVsbWF4Lm5lb24hAAAA60+jaSEAAAAYyR5opAEAAAAAAAAXAAAAY29uZi9jb25maWcubGV2ZWw1Lm5lb25CBwAA60+jaUIHAACJlE8npAEAAAAAAAAXAAAAY29uZi9jb25maWcubGV2ZWwyLm5lb26OGgAA60+jaY4aAAANseQ8pAEAAAAAAAAXAAAAY29uZi9jb25maWcubGV2ZWw5Lm5lb25IAAAA60+jaUgAAAAfwnX7pAEAAAAAAAAXAAAAY29uZi9jb25maWcubGV2ZWw4Lm5lb25EAAAA60+jaUQAAABz40pjpAEAAAAAAAAXAAAAY29uZi9jb25maWcubGV2ZWw2Lm5lb26+AwAA60+jab4DAAA/hs5+pAEAAAAAAAAXAAAAY29uZi9jb25maWcubGV2ZWwzLm5lb25GDAAA60+jaUYMAACt4UR+pAEAAAAAAAAXAAAAY29uZi9jb25maWcubGV2ZWw3Lm5lb25ZAAAA60+jaVkAAABeYr5apAEAAAAAAAAXAAAAY29uZi9jb25maWcubGV2ZWwwLm5lb25wKwAA60+jaXArAABVrmYopAEAAAAAAAAWAAAAY29uZi9ibGVlZGluZ0VkZ2UubmVvbsAHAADrT6NpwAcAAKDkokSkAQAAAAAAABcAAABjb25mL2NvbmZpZy5sZXZlbDQubmVvbvctAADrT6Np9y0AACfPnxykAQAAAAAAAB4AAABjb25mL2NvbmZpZy5zdHViVmFsaWRhdG9yLm5lb24tBAAA60+jaS0EAAAY1dZrpAEAAAAAAAAaAAAAY29uZi9wYXJhbWV0ZXJzU2NoZW1hLm5lb24ZHQAA60+jaRkdAACUj3gVpAEAAAAAAAAQAAAAY29uZi9jb25maWcubmVvbrL4AADrT6NpsvgAAERM9hKkAQAAAAAAABcAAABjb25mL2NvbmZpZy5sZXZlbDEubmVvbrQBAADrT6NptAEAAP8/3iSkAQAAAAAAABgAAABzdHVicy9zb2NrZXRfc2VsZWN0LnN0dWLSAQAA60+jadIBAABmL5XupAEAAAAAAAAUAAAAc3R1YnMvQ291bnRhYmxlLnN0dWJkAAAA60+jaWQAAADd9eSepAEAAAAAAAAOAAAAc3R1YnMvZG9tLnN0dWJNCAAA60+jaU0IAAAATQ09pAEAAAAAAAAbAAAAc3R1YnMvUmVmbGVjdGlvbk1ldGhvZC5zdHViiAAAAOtPo2mIAAAA6BPDpKQBAAAAAAAAEQAAAHN0dWJzL2V4dC1kcy5zdHVidzgAAOtPo2l3OAAADSbM/KQBAAAAAAAAHgAAAHN0dWJzL1JlZmxlY3Rpb25QYXJhbWV0ZXIuc3R1YroAAADrT6NpugAAANg1ss6kAQAAAAAAABgAAABzdHVicy9XZWFrUmVmZXJlbmNlLnN0dWJgAgAA60+jaWACAAAR02C6pAEAAAAAAAAPAAAAc3R1YnMvZGF0ZS5zdHViGwIAAOtPo2kbAgAA4LhmYaQBAAAAAAAAHQAAAHN0dWJzL1JlZmxlY3Rpb25Qcm9wZXJ0eS5zdHViuQAAAOtPo2m5AAAAWNqb2qQBAAAAAAAAHgAAAHN0dWJzL1JlZmxlY3Rpb25BdHRyaWJ1dGUuc3R1YgsBAADrT6NpCwEAAHGViv6kAQAAAAAAABgAAABzdHVicy9qc29uX3ZhbGlkYXRlLnN0dWLlAAAA60+jaeUAAADUdtpSpAEAAAAAAAASAAAAc3R1YnMvaWJtX2RiMi5zdHViDwEAAOtPo2kPAQAAlmP40qQBAAAAAAAAFgAAAHN0dWJzL0FycmF5T2JqZWN0LnN0dWIYCAAA60+jaRgIAAD8yGpNpAEAAAAAAAAXAAAAc3R1YnMvSW1hZ2lja1BpeGVsLnN0dWJwAQAA60+jaXABAAAr/brjpAEAAAAAAAAbAAAAc3R1YnMvU3BsT2JqZWN0U3RvcmFnZS5zdHVipQUAAOtPo2mlBQAAuCuGcaQBAAAAAAAAEwAAAHN0dWJzL2l0ZXJhYmxlLnN0dWLeIwAA60+jad4jAADhKWsfpAEAAAAAAAARAAAAc3R1YnMvbXlzcWxpLnN0dWJYBQAA60+jaVgFAACYDEZWpAEAAAAAAAAdAAAAc3R1YnMvc29ja2V0X3NlbGVjdF9waHA4LnN0dWK8AQAA60+jabwBAADAEs3ZpAEAAAAAAAAaAAAAc3R1YnMvUmVmbGVjdGlvbkNsYXNzLnN0dWICAwAA60+jaQIDAACU8bXapAEAAAAAAAAXAAAAc3R1YnMvUERPU3RhdGVtZW50LnN0dWLJAgAA60+jackCAACT9ZwPpAEAAAAAAAAZAAAAc3R1YnMvYXJyYXlGdW5jdGlvbnMuc3R1YjUQAADrT6NpNRAAAKjJ0S6kAQAAAAAAACIAAABzdHVicy9SZWZsZWN0aW9uQ2xhc3NDb25zdGFudC5zdHVivgAAAOtPo2m+AAAARMl4ZKQBAAAAAAAADgAAAHN0dWJzL3ppcC5zdHViNAEAAOtPo2k0AQAABo+gI6QBAAAAAAAADwAAAHN0dWJzL2NvcmUuc3R1YpgiAADrT6NpmCIAAD6Q8+GkAQAAAAAAACEAAABzdHVicy9ibGVlZGluZ0VkZ2UvQ291bnRhYmxlLnN0dWJvAAAA60+jaW8AAAAKjlXmpAEAAAAAAAAcAAAAc3R1YnMvYmxlZWRpbmdFZGdlL1J1bGUuc3R1YpIBAADrT6NpkgEAAN+kDH+kAQAAAAAAABkAAABzdHVicy9SZWZsZWN0aW9uRW51bS5zdHViaAIAAOtPo2loAgAA3aBG36QBAAAAAAAAFAAAAHN0dWJzL0V4Y2VwdGlvbi5zdHViLQkAAOtPo2ktCQAAV6kcbaQBAAAAAAAAGwAAAHN0dWJzL3J1bnRpbWUvQXR0cmlidXRlLnBocDkHAADrT6NpOQcAAFHbipSkAQAAAAAAAB8AAABzdHVicy9ydW50aW1lL0VudW0vVW5pdEVudW0ucGhwywAAAOtPo2nLAAAA9JwAH6QBAAAAAAAALwAAAHN0dWJzL3J1bnRpbWUvRW51bS9SZWZsZWN0aW9uRW51bUJhY2tlZENhc2UucGhw6wAAAOtPo2nrAAAAOzd5BqQBAAAAAAAALQAAAHN0dWJzL3J1bnRpbWUvRW51bS9SZWZsZWN0aW9uRW51bVVuaXRDYXNlLnBocIsBAADrT6NpiwEAAOz4xPKkAQAAAAAAACEAAABzdHVicy9ydW50aW1lL0VudW0vQmFja2VkRW51bS5waHAKAQAA60+jaQoBAACWsk0bpAEAAAAAAAAlAAAAc3R1YnMvcnVudGltZS9FbnVtL1JlZmxlY3Rpb25FbnVtLnBocO0BAADrT6Np7QEAAP3BbUekAQAAAAAAACUAAABzdHVicy9ydW50aW1lL1JlZmxlY3Rpb25VbmlvblR5cGUucGhw+AAAAOtPo2n4AAAA4plEPaQBAAAAAAAAJQAAAHN0dWJzL3J1bnRpbWUvUmVmbGVjdGlvbkF0dHJpYnV0ZS5waHDmAQAA60+jaeYBAAAR4z0ipAEAAAAAAAAsAAAAc3R1YnMvcnVudGltZS9SZWZsZWN0aW9uSW50ZXJzZWN0aW9uVHlwZS5waHAGAQAA60+jaQYBAAD49bA7pAEAAAAAAAAgAAAAc3R1YnMvdHlwZUNoZWNraW5nRnVuY3Rpb25zLnN0dWJeBgAA60+jaV4GAABVNQzCpAEAAAAAAAAOAAAAc3R1YnMvc3BsLnN0dWIvBwAA60+jaS8HAAAKjPDtpAEAAAAAAAAlAAAAc3R1YnMvUmVmbGVjdGlvbkZ1bmN0aW9uQWJzdHJhY3Quc3R1YhIBAADrT6NpEgEAAFbJY8ikAQAAAAAAACIAAAB2ZW5kb3IvZXZlbmVtZW50L2V2ZW5lbWVudC9MSUNFTlNFIAQAAOtPo2kgBAAAyHtJPaQBAAAAAAAANAAAAHZlbmRvci9ldmVuZW1lbnQvZXZlbmVtZW50L3NyYy9FdmVudEVtaXR0ZXJUcmFpdC5waHBZEAAA60+jaVkQAADkyS2GpAEAAAAAAAAvAAAAdmVuZG9yL2V2ZW5lbWVudC9ldmVuZW1lbnQvc3JjL0V2ZW50RW1pdHRlci5waHByAQAA60+jaXIBAACLbKqYpAEAAAAAAAA4AAAAdmVuZG9yL2V2ZW5lbWVudC9ldmVuZW1lbnQvc3JjL0V2ZW50RW1pdHRlckludGVyZmFjZS5waHCLAgAA60+jaYsCAABuQuTMpAEAAAAAAAAjAAAAdmVuZG9yL2NvbXBvc2VyL2F1dG9sb2FkX3N0YXRpYy5waHABTgUA60+jaQFOBQC7Ig0apAEAAAAAAAAhAAAAdmVuZG9yL2NvbXBvc2VyL2F1dG9sb2FkX3JlYWwucGhwhwYAAOtPo2mHBgAA80Q1uKQBAAAAAAAAHQAAAHZlbmRvci9jb21wb3Nlci9pbnN0YWxsZWQucGhwkZYAAOtPo2mRlgAAKJ57ZaQBAAAAAAAAJgAAAHZlbmRvci9jb21wb3Nlci94ZGVidWctaGFuZGxlci9MSUNFTlNFKQQAAOtPo2kpBAAAI9Q7XqQBAAAAAAAAMAAAAHZlbmRvci9jb21wb3Nlci94ZGVidWctaGFuZGxlci9zcmMvUGhwQ29uZmlnLnBocJkIAADrT6NpmQgAAE1BDKekAQAAAAAAADQAAAB2ZW5kb3IvY29tcG9zZXIveGRlYnVnLWhhbmRsZXIvc3JjL1hkZWJ1Z0hhbmRsZXIucGhwfVQAAOtPo2l9VAAA9Z1GhqQBAAAAAAAALgAAAHZlbmRvci9jb21wb3Nlci94ZGVidWctaGFuZGxlci9zcmMvUHJvY2Vzcy5waHBuDAAA60+jaW4MAAAKGO8apAEAAAAAAAAtAAAAdmVuZG9yL2NvbXBvc2VyL3hkZWJ1Zy1oYW5kbGVyL3NyYy9TdGF0dXMucGhwZRcAAOtPo2llFwAAKgqY0aQBAAAAAAAAHwAAAHZlbmRvci9jb21wb3Nlci9DbGFzc0xvYWRlci5waHD6PwAA60+jafo/AAAyQBx1pAEAAAAAAAAXAAAAdmVuZG9yL2NvbXBvc2VyL0xJQ0VOU0UuBAAA60+jaS4EAAAg1QgDpAEAAAAAAAAjAAAAdmVuZG9yL2NvbXBvc2VyL3BjcmUvZXh0ZW5zaW9uLm5lb25GAgAA60+jaUYCAACAqq0opAEAAAAAAAAcAAAAdmVuZG9yL2NvbXBvc2VyL3BjcmUvTElDRU5TRRwEAADrT6NpHAQAAGhn1F6kAQAAAAAAACoAAAB2ZW5kb3IvY29tcG9zZXIvcGNyZS9zcmMvUmVwbGFjZVJlc3VsdC5waHD1AgAA60+jafUCAAA6iwMTpAEAAAAAAAA2AAAAdmVuZG9yL2NvbXBvc2VyL3BjcmUvc3JjL01hdGNoQWxsV2l0aE9mZnNldHNSZXN1bHQucGhwqAQAAOtPo2moBAAAhyogWaQBAAAAAAAANwAAAHZlbmRvci9jb21wb3Nlci9wY3JlL3NyYy9NYXRjaEFsbFN0cmljdEdyb3Vwc1Jlc3VsdC5waHCKAwAA60+jaYoDAACYT3PgpAEAAAAAAAA0AAAAdmVuZG9yL2NvbXBvc2VyL3BjcmUvc3JjL01hdGNoU3RyaWN0R3JvdXBzUmVzdWx0LnBocAQDAADrT6NpBAMAAO8GjeGkAQAAAAAAADMAAAB2ZW5kb3IvY29tcG9zZXIvcGNyZS9zcmMvTWF0Y2hXaXRoT2Zmc2V0c1Jlc3VsdC5waHDuAwAA60+jae4DAADFQJ5ppAEAAAAAAAAqAAAAdmVuZG9yL2NvbXBvc2VyL3BjcmUvc3JjL1BjcmVFeGNlcHRpb24ucGhwCAYAAOtPo2kIBgAAI9H7BqQBAAAAAAAAKwAAAHZlbmRvci9jb21wb3Nlci9wY3JlL3NyYy9NYXRjaEFsbFJlc3VsdC5waHCUAwAA60+jaZQDAADIQLIDpAEAAAAAAAAzAAAAdmVuZG9yL2NvbXBvc2VyL3BjcmUvc3JjL1BIUFN0YW4vUHJlZ01hdGNoRmxhZ3MucGhwZAgAAOtPo2lkCAAAr0k7G6QBAAAAAAAARwAAAHZlbmRvci9jb21wb3Nlci9wY3JlL3NyYy9QSFBTdGFuL1ByZWdNYXRjaFBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24ucGhwPwgAAOtPo2k/CAAAd1AB8KQBAAAAAAAAPAAAAHZlbmRvci9jb21wb3Nlci9wY3JlL3NyYy9QSFBTdGFuL0ludmFsaWRSZWdleFBhdHRlcm5SdWxlLnBocD0QAADrT6NpPRAAAC8jqoekAQAAAAAAAD8AAAB2ZW5kb3IvY29tcG9zZXIvcGNyZS9zcmMvUEhQU3Rhbi9VbnNhZmVTdHJpY3RHcm91cHNDYWxsUnVsZS5waHBhDQAA60+jaWENAABht/HmpAEAAAAAAABMAAAAdmVuZG9yL2NvbXBvc2VyL3BjcmUvc3JjL1BIUFN0YW4vUHJlZ1JlcGxhY2VDYWxsYmFja0Nsb3N1cmVUeXBlRXh0ZW5zaW9uLnBocMMMAADrT6NpwwwAAJ6HXU2kAQAAAAAAAEUAAAB2ZW5kb3IvY29tcG9zZXIvcGNyZS9zcmMvUEhQU3Rhbi9QcmVnTWF0Y2hUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHCzDAAA60+jabMMAACOCMH2pAEAAAAAAAAoAAAAdmVuZG9yL2NvbXBvc2VyL3BjcmUvc3JjL01hdGNoUmVzdWx0LnBocAIDAADrT6NpAgMAAC1gAM+kAQAAAAAAACIAAAB2ZW5kb3IvY29tcG9zZXIvcGNyZS9zcmMvUmVnZXgucGhwzRwAAOtPo2nNHAAA+usZkqQBAAAAAAAAIQAAAHZlbmRvci9jb21wb3Nlci9wY3JlL3NyYy9QcmVnLnBocFVFAADrT6NpVUUAALA9ge6kAQAAAAAAADkAAAB2ZW5kb3IvY29tcG9zZXIvcGNyZS9zcmMvVW5leHBlY3RlZE51bGxNYXRjaEV4Y2VwdGlvbi5waHAXAgAA60+jaRcCAAC86unTpAEAAAAAAAAhAAAAdmVuZG9yL2NvbXBvc2VyL2F1dG9sb2FkX3BzcjQucGhwqhAAAOtPo2mqEAAAMPRfpKQBAAAAAAAAJQAAAHZlbmRvci9jb21wb3Nlci9hdXRvbG9hZF9jbGFzc21hcC5waHDtrQQA60+jae2tBAA/1lHApAEAAAAAAAAlAAAAdmVuZG9yL2NvbXBvc2VyL0luc3RhbGxlZFZlcnNpb25zLnBocPNDAADrT6Np80MAAA88bnekAQAAAAAAACIAAAB2ZW5kb3IvY29tcG9zZXIvYXV0b2xvYWRfZmlsZXMucGhwdwcAAOtPo2l3BwAADCm9G6QBAAAAAAAAHgAAAHZlbmRvci9jb21wb3Nlci9zZW12ZXIvTElDRU5TRRwEAADrT6NpHAQAAAZCaO2kAQAAAAAAACcAAAB2ZW5kb3IvY29tcG9zZXIvc2VtdmVyL3NyYy9JbnRlcnZhbC5waHCbBwAA60+jaZsHAABt1Ul1pAEAAAAAAAA0AAAAdmVuZG9yL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29uc3RyYWludC9Db25zdHJhaW50LnBocPswAADrT6Np+zAAAPf95ZCkAQAAAAAAAC8AAAB2ZW5kb3IvY29tcG9zZXIvc2VtdmVyL3NyYy9Db25zdHJhaW50L0JvdW5kLnBocEUKAADrT6NpRQoAAKoyhHikAQAAAAAAAD0AAAB2ZW5kb3IvY29tcG9zZXIvc2VtdmVyL3NyYy9Db25zdHJhaW50L0NvbnN0cmFpbnRJbnRlcmZhY2UucGhwwgcAAOtPo2nCBwAA4gazkqQBAAAAAAAAPQAAAHZlbmRvci9jb21wb3Nlci9zZW12ZXIvc3JjL0NvbnN0cmFpbnQvTWF0Y2hOb25lQ29uc3RyYWludC5waHDLBQAA60+jacsFAACEYTd8pAEAAAAAAAA8AAAAdmVuZG9yL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29uc3RyYWludC9NYXRjaEFsbENvbnN0cmFpbnQucGhwzwUAAOtPo2nPBQAACXvYkaQBAAAAAAAAOQAAAHZlbmRvci9jb21wb3Nlci9zZW12ZXIvc3JjL0NvbnN0cmFpbnQvTXVsdGlDb25zdHJhaW50LnBocEAjAADrT6NpQCMAADL8EkCkAQAAAAAAAC8AAAB2ZW5kb3IvY29tcG9zZXIvc2VtdmVyL3NyYy9Db21waWxpbmdNYXRjaGVyLnBocCkLAADrT6NpKQsAAHCUBEWkAQAAAAAAACkAAAB2ZW5kb3IvY29tcG9zZXIvc2VtdmVyL3NyYy9Db21wYXJhdG9yLnBocGIKAADrT6NpYgoAAI/5oh6kAQAAAAAAACwAAAB2ZW5kb3IvY29tcG9zZXIvc2VtdmVyL3NyYy9WZXJzaW9uUGFyc2VyLnBocIBUAADrT6NpgFQAAEWzWXKkAQAAAAAAACUAAAB2ZW5kb3IvY29tcG9zZXIvc2VtdmVyL3NyYy9TZW12ZXIucGhwVA0AAOtPo2lUDQAAx70SAaQBAAAAAAAAKAAAAHZlbmRvci9jb21wb3Nlci9zZW12ZXIvc3JjL0ludGVydmFscy5waHDATgAA60+jacBOAABt/EjDpAEAAAAAAAAnAAAAdmVuZG9yL2NvbXBvc2VyL2F1dG9sb2FkX25hbWVzcGFjZXMucGhwiwAAAOtPo2mLAAAAii8RdKQBAAAAAAAAKAAAAHZlbmRvci9jb21wb3Nlci9jYS1idW5kbGUvcmVzL2NhY2VydC5wZW16hQMA60+jaXqFAwAl7k/qpAEAAAAAAAAhAAAAdmVuZG9yL2NvbXBvc2VyL2NhLWJ1bmRsZS9MSUNFTlNFHAQAAOtPo2kcBAAAKiFeYKQBAAAAAAAAJQAAAHZlbmRvci9jb21wb3Nlci9jYS1idW5kbGUvUEFUQ0hFUy50eHS1AAAA60+jabUAAAByYm1XpAEAAAAAAAAqAAAAdmVuZG9yL2NvbXBvc2VyL2NhLWJ1bmRsZS9zcmMvQ2FCdW5kbGUucGhw/ysAAOtPo2n/KwAANGRkV6QBAAAAAAAAMQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3ZtL1NWTU1vZGVsLnN0dWKQEgAA60+jaZASAAANh6FwpAEAAAAAAAAsAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdm0vU1ZNLnN0dWK9GQAA60+jab0ZAACEF8hnpAEAAAAAAAAuAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9hbXFwL2FtcXAuc3R1YjPdAADrT6NpM90AAAN75P2kAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2VuY2hhbnQvZW5jaGFudC5zdHVirikAAOtPo2muKQAAxBpSrqQBAAAAAAAALwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvSW5zcGVjdGlvbnMueG1sxhYAAOtPo2nGFgAAdwZsFKQBAAAAAAAALAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbHVhL2x1YS5zdHViPAkAAOtPo2k8CQAAlAvCgKQBAAAAAAAAOQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc25hcHB5L3NuYXBweS9zbmFwcHkuc3R1YhkCAADrT6NpGQIAABgTIKykAQAAAAAAADIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3Bnc3FsL3Bnc3FsX2Muc3R1YpcCAADrT6NplwIAAJfN3rKkAQAAAAAAADAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3Bnc3FsL3Bnc3FsLnN0dWICcwEA60+jaQJzAQCkDFRqpAEAAAAAAAAsAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy96bXEvem1xLnN0dWJ6dQAA60+jaXp1AAAD/6JapAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy93aW5iaW5kZXIvd2luYmluZGVyLnN0dWJ4ywAA60+jaXjLAADnOrbvpAEAAAAAAAAwAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wY250bC9wY250bC5zdHViWVgAAOtPo2lZWAAA25Y8yKQBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGNudGwvcGNudGxfYy5zdHVi7wAAAOtPo2nvAAAAeghFaKQBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcHNwZWxsL3BzcGVsbF9jLnN0dWISAQAA60+jaRIBAABSrqogpAEAAAAAAAAyAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wc3BlbGwvcHNwZWxsLnN0dWJxLgAA60+jaXEuAAC7MFzmpAEAAAAAAAAvAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9yZWdleC9lcmVnLnN0dWJ6IAAA60+jaXogAAA9Y8ZQpAEAAAAAAAAyAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9TYXhvbkMvU2F4b25DLnN0dWJsjAAA60+jaWyMAADXIyCfpAEAAAAAAAA2AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy93aW5jYWNoZS93aW5jYWNoZS5zdHVif2EAAOtPo2l/YQAAstCDDKQBAAAAAAAAQAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvb3BlbnRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LnN0dWJQAwAA60+jaVADAAD4lhmzpAEAAAAAAAAwAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdG9tcC9zdG9tcC5zdHViQSIAAOtPo2lBIgAAIUvP96QBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvYXBjdS9hcGN1LnN0dWJbbgAA60+jaVtuAABGG7aYpAEAAAAAAAAsAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdm4vc3ZuLnN0dWJsmQAA60+jaWyZAACVCVIWpAEAAAAAAAAuAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9leGlmL2V4aWYuc3R1YrwTAADrT6NpvBMAAAkwCdGkAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3V2L3V2X2Z1bmN0aW9ucy5zdHVixGYAAOtPo2nEZgAAm4t0oaQBAAAAAAAAKgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvdXYvVVYuc3R1YgwcAADrT6NpDBwAALloPACkAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2p1ZHkvanVkeS5zdHViRiIAAOtPo2lGIgAAcZzEM6QBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvaW5vdGlmeS9pbm90aWZ5LnN0dWJOFAAA60+jaU4UAABuoBj6pAEAAAAAAAAuAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy95YW1sL3lhbWwuc3R1YmgZAADrT6NpaBkAAMB7/8ikAQAAAAAAACwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1BETy9QRE8uc3R1YmNHAQDrT6NpY0cBAEsmc8qkAQAAAAAAACwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1NQTC9TUEwuc3R1Yr0UAQDrT6NpvRQBAAZo/AykAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1NQTC9TUExfZi5zdHVibRsAAOtPo2ltGwAA4k86w6QBAAAAAAAALwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvU1BML1NQTF9jMS5zdHViDT8BAOtPo2kNPwEATNwU86QBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGNvdi9wY292LnN0dWIaBwAA60+jaRoHAABcwFiFpAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9yZWRpcy9SZWRpc1NlbnRpbmVsLnN0dWKtHwAA60+jaa0fAAB6DP5BpAEAAAAAAAA3AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9yZWRpcy9SZWRpc0NsdXN0ZXIuc3R1YizjAQDrT6NpLOMBAKKeSVWkAQAAAAAAADUAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3JlZGlzL1JlZGlzQXJyYXkuc3R1YkwXAADrT6NpTBcAAB9mwkykAQAAAAAAADAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3JlZGlzL1JlZGlzLnN0dWKrmQIA60+jaauZAgAqo5dZpAEAAAAAAAAwAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9Db3JlL0NvcmVfYy5zdHVi1IsAAOtPo2nUiwAAgDa5FKQBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvQ29yZS9Db3JlX2Quc3R1Yg0kAADrT6NpDSQAAFp59BqkAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL0NvcmUvQ29yZS5zdHViX4QAAOtPo2lfhAAAUr2ns6QBAAAAAAAANgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmVhZGxpbmUvcmVhZGxpbmUuc3R1YkMUAADrT6NpQxQAAGPnj8GkAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1plbmRVdGlscy9aZW5kVXRpbHMuc3R1YjgBAADrT6NpOAEAAPCh3IykAQAAAAAAADAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2ljb252L2ljb252LnN0dWLjNQAA60+jaeM1AAAxkStHpAEAAAAAAAA2AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9saWJldmVudC9saWJldmVudC5zdHViIlkAAOtPo2kiWQAABMEw6qQBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZmZtcGVnL2ZmbXBlZy5zdHViyBwAAOtPo2nIHAAAD2cl7qQBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvaWJtX2RiMi9pYm1fZGIyLnN0dWK09gAA60+jabT2AAC0zK/opAEAAAAAAAAyAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9hcGFjaGUvYXBhY2hlLnN0dWItFgAA60+jaS0WAADG70yApAEAAAAAAAAyAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9pbnRsL0ludGxDaGFyLnN0dWJMLwEA60+jaUwvAQCWjV10pAEAAAAAAAAuAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9pbnRsL2ludGwuc3R1Yi59BADrT6NpLn0EAPRQn6GkAQAAAAAAAEIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2ludGwvSW50bERhdGVQYXR0ZXJuR2VuZXJhdG9yLnN0dWIbAQAA60+jaRsBAAAkg4tKpAEAAAAAAAA0AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9pbWFnaWNrL2ltYWdpY2suc3R1Ym3pAwDrT6NpbekDAJV+/AKkAQAAAAAAADIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2RvY2tlci1jb21wb3NlLnltbFoBAADrT6NpWgEAAHpO6XGkAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2dldHRleHQvZ2V0dGV4dC5zdHViXBAAAOtPo2lcEAAAZu6NB6QBAAAAAAAAOgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWJmLwAA60+jaWYvAACdEGIbpAEAAAAAAAA2AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wdGhyZWFkcy9wdGhyZWFkcy5zdHVil0gAAOtPo2mXSAAA/T45t6QBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvb3BlbnNzbC9vcGVuc3NsLnN0dWKL4gAA60+jaYviAACuxMnQpAEAAAAAAAA6AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9MdWFTYW5kYm94L0x1YVNhbmRib3guc3R1Yg5FAADrT6NpDkUAAOL4oLakAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3RpZHkvdGlkeS5zdHViTJUAAOtPo2lMlQAAhNeTTqQBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvUGhwU3Rvcm1TdHVic01hcC5waHAi0goA60+jaSLSCgDdX7CWpAEAAAAAAAAqAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wcS9wcS5zdHVirysBAOtPo2mvKwEAuxii5KQBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvY3R5cGUvY3R5cGUuc3R1YlITAADrT6NpUhMAAAZQo7KkAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YvDHAQDrT6Np8McBAHu6fEukAQAAAAAAADkAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1plbmQgT1BjYWNoZS9PUGNhY2hlLnN0dWJtDQAA60+jaW0NAACTScptpAEAAAAAAAAsAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9mcG0vZnBtLnN0dWLrAQAA60+jaesBAADuAUKxpAEAAAAAAAA6AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9jb3VjaGJhc2VfdjIvdG9wbGV2ZWwuc3R1YlcZAADrT6NpVxkAAGEELT6kAQAAAAAAADsAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2NvdWNoYmFzZV92Mi9jb3VjaGJhc2Uuc3R1YsDRAQDrT6NpwNEBAGSoegqkAQAAAAAAAD4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1plbmREZWJ1Z2dlci9aZW5kRGVidWdnZXIuc3R1YhQBAADrT6NpFAEAAHfpIQSkAQAAAAAAAFMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3NpbXBsZV9rYWZrYV9jbGllbnQvU2ltcGxlS2Fma2FDbGllbnQvQ29uc3VtZXIuc3R1YlcHAADrT6NpVwcAAJeXnPukAQAAAAAAAF0AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3NpbXBsZV9rYWZrYV9jbGllbnQvU2ltcGxlS2Fma2FDbGllbnQvTWV0YWRhdGEvUGFydGl0aW9uLnN0dWLxAQAA60+jafEBAAASqxlnpAEAAAAAAABeAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zaW1wbGVfa2Fma2FfY2xpZW50L1NpbXBsZUthZmthQ2xpZW50L01ldGFkYXRhL0NvbGxlY3Rpb24uc3R1YgkCAADrT6NpCQIAAK6fpuCkAQAAAAAAAFoAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3NpbXBsZV9rYWZrYV9jbGllbnQvU2ltcGxlS2Fma2FDbGllbnQvTWV0YWRhdGEvQnJva2VyLnN0dWI5AQAA60+jaTkBAACndW9gpAEAAAAAAABZAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zaW1wbGVfa2Fma2FfY2xpZW50L1NpbXBsZUthZmthQ2xpZW50L01ldGFkYXRhL1RvcGljLnN0dWJTAQAA60+jaVMBAABc5bXzpAEAAAAAAABTAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zaW1wbGVfa2Fma2FfY2xpZW50L1NpbXBsZUthZmthQ2xpZW50L01ldGFkYXRhLnN0dWI5AgAA60+jaTkCAAAh2Q9hpAEAAAAAAABSAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zaW1wbGVfa2Fma2FfY2xpZW50L1NpbXBsZUthZmthQ2xpZW50L01lc3NhZ2Uuc3R1YrwBAADrT6NpvAEAAGv0t6CkAQAAAAAAAFgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3NpbXBsZV9rYWZrYV9jbGllbnQvU2ltcGxlS2Fma2FDbGllbnQvQ29uZmlndXJhdGlvbi5zdHVieAQAAOtPo2l4BAAA1bx2+6QBAAAAAAAAUwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc2ltcGxlX2thZmthX2NsaWVudC9TaW1wbGVLYWZrYUNsaWVudC9Qcm9kdWNlci5zdHViqQQAAOtPo2mpBAAA0JjyEKQBAAAAAAAAXgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc2ltcGxlX2thZmthX2NsaWVudC9TaW1wbGVLYWZrYUNsaWVudC9LYWZrYUVycm9yRXhjZXB0aW9uLnN0dWLzAgAA60+jafMCAADDaScspAEAAAAAAABQAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zaW1wbGVfa2Fma2FfY2xpZW50L1NpbXBsZUthZmthQ2xpZW50L1RvcGljLnN0dWL2AwAA60+jafYDAACwALEMpAEAAAAAAABUAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zaW1wbGVfa2Fma2FfY2xpZW50L1NpbXBsZUthZmthQ2xpZW50L0V4Y2VwdGlvbi5zdHViZAAAAOtPo2lkAAAAl1midqQBAAAAAAAAWQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc2ltcGxlX2thZmthX2NsaWVudC9TaW1wbGVLYWZrYUNsaWVudC9Ub3BpY1BhcnRpdGlvbi5zdHViJgQAAOtPo2kmBAAA3z7wfqQBAAAAAAAASgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc2ltcGxlX2thZmthX2NsaWVudC9TaW1wbGVLYWZrYUNsaWVudC5zdHVikQYAAOtPo2mRBgAA+iGokqQBAAAAAAAAQgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc2ltcGxlX2thZmthX2NsaWVudC9mdW5jdGlvbnMuc3R1YvoCAADrT6Np+gIAAELIUZCkAQAAAAAAAD8AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21ldGEvYXR0cmlidXRlcy9BcnJheVNoYXBlLnN0dWJWAwAA60+jaVYDAAATTzejpAEAAAAAAAA9AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tZXRhL2F0dHJpYnV0ZXMvTm9SZXR1cm4uc3R1YuICAADrT6Np4gIAAMU0/b2kAQAAAAAAAEAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21ldGEvYXR0cmlidXRlcy9PYmplY3RTaGFwZS5zdHVi1gIAAOtPo2nWAgAAhGsLcKQBAAAAAAAAQwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbWV0YS9hdHRyaWJ1dGVzL0V4cGVjdGVkVmFsdWVzLnN0dWLHCAAA60+jaccIAADRkn65pAEAAAAAAABLAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tZXRhL2F0dHJpYnV0ZXMvaW50ZXJuYWwvVGVudGF0aXZlVHlwZS5zdHViwgAAAOtPo2nCAAAAKCmjG6QBAAAAAAAAUAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbWV0YS9hdHRyaWJ1dGVzL2ludGVybmFsL1JldHVyblR5cGVDb250cmFjdC5zdHViaAEAAOtPo2loAQAAxzwNeKQBAAAAAAAAVAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbWV0YS9hdHRyaWJ1dGVzL2ludGVybmFsL0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUuc3R1Ym8BAADrT6NpbwEAAJ3FJb+kAQAAAAAAAFsAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21ldGEvYXR0cmlidXRlcy9pbnRlcm5hbC9QaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZS5zdHVi+AEAAOtPo2n4AQAAGWUzA6QBAAAAAAAAPwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbWV0YS9hdHRyaWJ1dGVzL0RlcHJlY2F0ZWQuc3R1YvMHAADrT6Np8wcAAJGra16kAQAAAAAAAD4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21ldGEvYXR0cmlidXRlcy9JbW11dGFibGUuc3R1YuQEAADrT6Np5AQAANBhJ6ekAQAAAAAAAD0AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21ldGEvYXR0cmlidXRlcy9MYW5ndWFnZS5zdHVi5wEAAOtPo2nnAQAAlk1K/aQBAAAAAAAAOQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbWV0YS9hdHRyaWJ1dGVzL1B1cmUuc3R1YosCAADrT6NpiwIAADvFmrGkAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1Yu7eAADrT6Np7t4AAJ2l7BWkAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N5c3ZzaG0vc3lzdnNobS5zdHViPg8AAOtPo2k+DwAA18wL8aQBAAAAAAAAOQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvUGFybGUvTGV4ZXJFeGNlcHRpb24uc3R1YncAAADrT6NpdwAAAF5VdKmkAQAAAAAAADEAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1BhcmxlL1BhcnNlci5zdHViLBcAAOtPo2ksFwAA8+/x4KQBAAAAAAAAMQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvUGFybGUvUkxleGVyLnN0dWLzGgAA60+jafMaAAAMd5CFpAEAAAAAAAAwAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9QYXJsZS9Ub2tlbi5zdHVihAEAAOtPo2mEAQAATvuI/aQBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvUGFybGUvU3RhY2suc3R1YkEDAADrT6NpQQMAAC4+b1+kAQAAAAAAADIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1BhcmxlL1JQYXJzZXIuc3R1YooXAADrT6NpihcAAKrJpdCkAQAAAAAAADAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1BhcmxlL0xleGVyLnN0dWIqDwAA60+jaSoPAAA72iCvpAEAAAAAAAA6AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9QYXJsZS9QYXJzZXJFeGNlcHRpb24uc3R1YngAAADrT6NpeAAAAEwXlA+kAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1BhcmxlL0Vycm9ySW5mby5zdHViQQEAAOtPo2lBAQAAsgLv96QBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvb2F1dGgvb2F1dGguc3R1YmIgAADrT6NpYiAAALuZYnCkAQAAAAAAACwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3hzbC94c2wuc3R1YjseAADrT6NpOx4AACSI0sikAQAAAAAAADAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2V2ZW50L2V2ZW50LnN0dWL7zQAA60+jafvNAADunXpJpAEAAAAAAAA2AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9maWxlaW5mby9maWxlaW5mby5zdHViciEAAOtPo2lyIQAAV1kxEKQBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29ja2V0cy9zb2NrZXRzLnN0dWI9AAEA60+jaT0AAQBgcAKXpAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy96b29rZWVwZXIvem9va2VlcGVyLnN0dWIiKQAA60+jaSIpAAAJHd6bpAEAAAAAAAAwAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9teXNxbC9teXNxbC5zdHVifH8AAOtPo2l8fwAA1TADe6QBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3NoMi9zc2gyLnN0dWKzWgAA60+jabNaAACSBrxvpAEAAAAAAAA8AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9lbGFzdGljX2FwbS9lbGFzdGljX2FwbS5zdHVi4n4AAOtPo2nifgAAB4L+o6QBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvYmNtYXRoL2JjbWF0aC5zdHVi8SMAAOtPo2nxIwAAq+iMYqQBAAAAAAAAOAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMveGxzd3JpdGVyL3hsc3dyaXRlci5zdHViJz4AAOtPo2knPgAAsYNAsaQBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZ21hZ2ljay9nbWFnaWNrLnN0dWKoagEA60+jaahqAQBZXJ4LpAEAAAAAAAAwAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9yZWxheS9SZWxheS5zdHViO38BAOtPo2k7fwEABe2R6aQBAAAAAAAAMwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmVsYXkvU2VudGluZWwuc3R1Yu0RAADrT6Np7REAAJsmdlmkAQAAAAAAADIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3JlbGF5L0NsdXN0ZXIuc3R1YvM/AQDrT6Np8z8BAO3hX3CkAQAAAAAAADAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3JlbGF5L1RhYmxlLnN0dWJyBwAA60+jaXIHAAASR6PNpAEAAAAAAAAxAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9yZWxheS9FdmVudHMuc3R1YsABAADrT6NpwAEAAOYb8SmkAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3JlbGF5L0V4Y2VwdGlvbi5zdHViYwAAAOtPo2ljAAAAcs/GIaQBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmVsYXkvRXZlbnQuc3R1YvEDAADrT6Np8QMAAJksN0GkAQAAAAAAADIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3JlbGF5L0tleVR5cGUuc3R1YrACAADrT6NpsAIAAMnbvLukAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2Flcm9zcGlrZS9hZXJvc3Bpa2Uuc3R1YjI0AwDrT6NpMjQDABXZuGWkAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2Flcm9zcGlrZS9CeXRlcy5zdHViGQsAAOtPo2kZCwAA3uPKjaQBAAAAAAAAJwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvTElDRU5TRVcsAADrT6NpVywAAE38t8ykAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1Yu/IAQDrT6Np78gBAP5DHMakAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21lbWNhY2hlZC9tZW1jYWNoZWQuc3R1YuXpAADrT6Np5ekAAEhAGL6kAQAAAAAAAEAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vc3F1aXR0by1waHAvbW9zcXVpdHRvLXBocC5zdHVicTUAAOtPo2lxNQAASPRe9aQBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbGRhcC9sZGFwLnN0dWKL9wAA60+jaYv3AAD1AqPlpAEAAAAAAAAwAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9sZGFwL1Jlc3VsdC5zdHViRAAAAOtPo2lEAAAAo5Z2WqQBAAAAAAAANQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbGRhcC9SZXN1bHRFbnRyeS5zdHViSQAAAOtPo2lJAAAAUHjwX6QBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbGRhcC9Db25uZWN0aW9uLnN0dWJIAAAA60+jaUgAAAAQH7oepAEAAAAAAAAwAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy94ZGlmZi94ZGlmZi5zdHViIigAAOtPo2kiKAAAp6Tc46QBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMveGNhY2hlL3hjYWNoZS5zdHVihQ4AAOtPo2mFDgAA8171KaQBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvU1FMaXRlL1NRTGl0ZS5zdHVibN8AAOtPo2ls3wAADQgWTKQBAAAAAAAAOAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvU2ltcGxlWE1ML1NpbXBsZVhNTC5zdHViUUwAAOtPo2lRTAAAqU/k86QBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmVjb2RlL3JlY29kZS5zdHVioAQAAOtPo2mgBAAA85YVT6QBAAAAAAAANgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMveWFmL3lhZl9uYW1lc3BhY2Uuc3R1Yl5bAQDrT6NpXlsBAH92nkSkAQAAAAAAACwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3lhZi95YWYuc3R1YuZgAQDrT6Np5mABAJnya5KkAQAAAAAAAEAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHVihs8AAOtPo2mGzwAAXu/zsKQBAAAAAAAALAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMveWFyL3lhci5zdHViGxkAAOtPo2kbGQAA487J26QBAAAAAAAANgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbmV3cmVsaWMvbmV3cmVsaWMuc3R1Yrx/AADrT6NpvH8AAIPqz6SkAQAAAAAAADIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2xpYnhtbC9saWJ4bWwuc3R1YsckAADrT6NpxyQAAKZWOa2kAQAAAAAAACoAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL0V2L0V2LnN0dWKW/gAA60+jaZb+AAC+/uVypAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9ibGFja2ZpcmUvYmxhY2tmaXJlLnN0dWJIEAAA60+jaUgQAABaf7w0pAEAAAAAAAA/AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdXBlcmdsb2JhbHMvX3N1cGVyZ2xvYmFscy5zdHViGhwAAOtPo2kaHAAARmWGvqQBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZmFubi9mYW5uLnN0dWJoiAAA60+jaWiIAADP9GEqpAEAAAAAAAAuAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy91b3B6L3VvcHouc3R1YtYmAADrT6Np1iYAAC0WI6ikAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BjcmUvcGNyZS5zdHVielAAAOtPo2l6UAAA9cxZvqQBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvb2NpOC9vY2k4LnN0dWLbbwEA60+jadtvAQBoIXCRpAEAAAAAAAAwAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9vY2k4L29jaTh2My5zdHViRTkAAOtPo2lFOQAAwxsf7KQBAAAAAAAALAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbHpmL2x6Zi5zdHVirwMAAOtPo2mvAwAArqDGxqQBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZXhwZWN0L2V4cGVjdC5zdHVitgwAAOtPo2m2DAAASYYuyKQBAAAAAAAAKwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcW9kYW5hLnlhbWwgDQAA60+jaSANAAAnSlg7pAEAAAAAAAA1AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zeWJhc2Uvc3liYXNlX2N0LnN0dWI3GgAA60+jaTcaAAAjn6EhpAEAAAAAAAAuAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9kaW8vZGlvX2Quc3R1YqQPAADrT6NppA8AAA8aQx+kAQAAAAAAACwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2Rpby9kaW8uc3R1YqAlAADrT6NpoCUAAMUnoSakAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2ltYXAvaW1hcC5zdHViO/4AAOtPo2k7/gAAw9CVlqQBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvaW1hcC9Db25uZWN0aW9uLnN0dWJIAAAA60+jaUgAAABGhD+4pAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tYWlscGFyc2UvbWFpbHBhcnNlLnN0dWJ3HwAA60+jaXcfAACJchXlpAEAAAAAAAAwAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wb3NpeC9wb3NpeC5zdHViVGsAAOtPo2lUawAAZIsgtqQBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3lzdm1zZy9zeXN2bXNnLnN0dWLFJgAA60+jacUmAACHiWrOpAEAAAAAAAAsAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9ycmQvcnJkLnN0dWIAMAAA60+jaQAwAACy5AbOpAEAAAAAAAAuAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy93ZGR4L3dkZHguc3R1YscJAADrT6NpxwkAAAAKW0ykAQAAAAAAADIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3hkZWJ1Zy94ZGVidWcuc3R1YqwzAADrT6NprDMAABBeD8ikAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2xldmVsZGIvTGV2ZWxEQi5zdHVi8hAAAOtPo2nyEAAAOwOKsqQBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGRmbGliL1BERmxpYi5zdHViL1QBAOtPo2kvVAEANSUMS6QBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvenN0ZC96c3RkLnN0dWIdFAAA60+jaR0UAAD/TJxWpAEAAAAAAAA6AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9saWJzb2RpdW0vbGlic29kaXVtX2Yuc3R1YpMDAADrT6NpkwMAANrakyukAQAAAAAAADoAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2xpYnNvZGl1bS9saWJzb2RpdW1fZC5zdHViQAIAAOtPo2lAAgAA7iuexqQBAAAAAAAAOAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbGlic29kaXVtL2xpYnNvZGl1bS5zdHViZTwAAOtPo2llPAAAD6RgLaQBAAAAAAAAOAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvWmVuZENhY2hlL1plbmRDYWNoZS5zdHViAgwAAOtPo2kCDAAArBdhYqQBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbWNyeXB0L21jcnlwdC5zdHVi7l8AAOtPo2nuXwAAaVhWhqQBAAAAAAAAOAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMveG1scmVhZGVyL3htbHJlYWRlci5zdHVic0QAAOtPo2lzRAAAEyt7y6QBAAAAAAAALAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvemlwL3ppcC5zdHViC88AAOtPo2kLzwAA/0M5laQBAAAAAAAALAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvYXN0L2FzdC5zdHViIFsAAOtPo2kgWwAAgKduzqQBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGhwZGJnL3BocGRiZy5zdHViZwIAAOtPo2lnAgAAQci+T6QBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29kaXVtL3NvZGl1bS5zdHViqZAAAOtPo2mpkAAAzQ26RKQBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvdjhqcy92OGpzLnN0dWJ/FwAA60+jaX8XAADeVaU5pAEAAAAAAAA2AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tcXNlcmllcy9tcXNlcmllcy5zdHVipf8AAOtPo2ml/wAAGR0xJaQBAAAAAAAAOgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZnJhbmtlbnBocC9mcmFua2VucGhwLnN0dWKnBwAA60+jaacHAAB4uL6VpAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy94bWx3cml0ZXIveG1sd3JpdGVyLnN0dWKF6AAA60+jaYXoAABP2DwLpAEAAAAAAAA0AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdWhvc2luL3N1aG9zaW4uc3R1YoQCAADrT6NphAIAAPwcwFGkAQAAAAAAACwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2RvbS9kb20uc3R1YnkWAADrT6NpeRYAAM454wSkAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2RvbS9kb21fYy5zdHVi7l8BAOtPo2nuXwEA4coCgaQBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZG9tL2RvbV9uLnN0dWKUCwAA60+jaZQLAADk9tB+pAEAAAAAAAA2AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wYXJhbGxlbC9wYXJhbGxlbC5zdHViHgYAAOtPo2keBgAA3R0aeqQBAAAAAAAAPgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvUnVudGltZS5zdHViuRUAAOtPo2m5FQAAMIjdy6QBAAAAAAAATQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvRXZlbnRzL0Vycm9yL0V4aXN0ZW5jZS5zdHViZgAAAOtPo2lmAAAAjVLrYqQBAAAAAAAASwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvRXZlbnRzL0Vycm9yL1RpbWVvdXQuc3R1YmQAAADrT6NpZAAAAKNKoTakAQAAAAAAAEgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL0V2ZW50cy9FdmVudC9UeXBlLnN0dWIuAgAA60+jaS4CAADPnlo+pAEAAAAAAABJAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wYXJhbGxlbC9wYXJhbGxlbC9FdmVudHMvRXZlbnQvRXJyb3Iuc3R1YlAAAADrT6NpUAAAAIvbUvakAQAAAAAAAFMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL0V2ZW50cy9JbnB1dC9FcnJvci9FeGlzdGVuY2Uuc3R1YnIAAADrT6NpcgAAAIa9N2+kAQAAAAAAAFYAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL0V2ZW50cy9JbnB1dC9FcnJvci9JbGxlZ2FsVmFsdWUuc3R1YnUAAADrT6NpdQAAAGmts6ukAQAAAAAAAEkAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL0V2ZW50cy9JbnB1dC9FcnJvci5zdHViUAAAAOtPo2lQAAAAP/bX7qQBAAAAAAAAQwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvRXZlbnRzL0Vycm9yLnN0dWJKAAAA60+jaUoAAADXxb6CpAEAAAAAAABDAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wYXJhbGxlbC9wYXJhbGxlbC9FdmVudHMvSW5wdXQuc3R1YjAFAADrT6NpMAUAAPM+F5WkAQAAAAAAAEMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL0V2ZW50cy9FdmVudC5zdHVijwIAAOtPo2mPAgAAzIC7OKQBAAAAAAAAPQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvRnV0dXJlLnN0dWJgBgAA60+jaWAGAAAuP0TDpAEAAAAAAABOAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wYXJhbGxlbC9wYXJhbGxlbC9TeW5jL0Vycm9yL0lsbGVnYWxWYWx1ZS5zdHViZQAAAOtPo2llAAAAPgx3AaQBAAAAAAAAQQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvU3luYy9FcnJvci5zdHViSAAAAOtPo2lIAAAAiaJiA6QBAAAAAAAATwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvUnVudGltZS9UeXBlL1VuYXZhaWxhYmxlLnN0dWI+AAAA60+jaT4AAADmXqT8pAEAAAAAAABUAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wYXJhbGxlbC9wYXJhbGxlbC9SdW50aW1lL0Vycm9yL0lsbGVnYWxGdW5jdGlvbi5zdHVibgAAAOtPo2luAAAAj4Egm6QBAAAAAAAATgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvUnVudGltZS9FcnJvci9Cb290c3RyYXAuc3R1YmgAAADrT6NpaAAAAFU8SPikAQAAAAAAAFUAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL1J1bnRpbWUvRXJyb3IvSWxsZWdhbFBhcmFtZXRlci5zdHVibwAAAOtPo2lvAAAAI6+PGqQBAAAAAAAASwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvUnVudGltZS9FcnJvci9DbG9zZWQuc3R1YmUAAADrT6NpZQAAAMFwcOakAQAAAAAAAEsAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL1J1bnRpbWUvRXJyb3IvS2lsbGVkLnN0dWJlAAAA60+jaWUAAAC6N9uRpAEAAAAAAABXAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wYXJhbGxlbC9wYXJhbGxlbC9SdW50aW1lL0Vycm9yL0lsbGVnYWxJbnN0cnVjdGlvbi5zdHVicQAAAOtPo2lxAAAAWrRHv6QBAAAAAAAAVAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvUnVudGltZS9FcnJvci9JbGxlZ2FsVmFyaWFibGUuc3R1Ym4AAADrT6NpbgAAAIMaWwKkAQAAAAAAAFIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL1J1bnRpbWUvRXJyb3IvSWxsZWdhbFJldHVybi5zdHVibAAAAOtPo2lsAAAAJPP2jaQBAAAAAAAAUQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvUnVudGltZS9PYmplY3QvVW5hdmFpbGFibGUuc3R1YkAAAADrT6NpQAAAADqsx6akAQAAAAAAAEQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL1J1bnRpbWUvRXJyb3Iuc3R1YksAAADrT6NpSwAAAKOQ+PikAQAAAAAAAD4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL0NoYW5uZWwuc3R1YigPAADrT6NpKA8AAL4PqCakAQAAAAAAAE4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL0NoYW5uZWwvRXJyb3IvRXhpc3RlbmNlLnN0dWJoAAAA60+jaWgAAAD3tnnDpAEAAAAAAABRAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wYXJhbGxlbC9wYXJhbGxlbC9DaGFubmVsL0Vycm9yL0lsbGVnYWxWYWx1ZS5zdHViawAAAOtPo2lrAAAA/hoQjKQBAAAAAAAASwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvQ2hhbm5lbC9FcnJvci9DbG9zZWQuc3R1YmUAAADrT6NpZQAAALm7egykAQAAAAAAAEQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL0NoYW5uZWwvRXJyb3Iuc3R1YksAAADrT6NpSwAAAI3gECWkAQAAAAAAAD0AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL0V2ZW50cy5zdHVi5A0AAOtPo2nkDQAA2/C23KQBAAAAAAAASwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvRnV0dXJlL0Vycm9yL0ZvcmVpZ24uc3R1Yl0AAADrT6NpXQAAAH0EAPGkAQAAAAAAAEoAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL0Z1dHVyZS9FcnJvci9LaWxsZWQuc3R1YlwAAADrT6NpXAAAANs8CgCkAQAAAAAAAE0AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL0Z1dHVyZS9FcnJvci9DYW5jZWxsZWQuc3R1Yl8AAADrT6NpXwAAAMjOHpykAQAAAAAAAEMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL0Z1dHVyZS9FcnJvci5zdHViSgAAAOtPo2lKAAAA5oFilKQBAAAAAAAAPAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcGFyYWxsZWwvcGFyYWxsZWwvRXJyb3Iuc3R1YjoAAADrT6NpOgAAAHuLoRSkAQAAAAAAADsAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3BhcmFsbGVsL3BhcmFsbGVsL1N5bmMuc3R1YqkGAADrT6NpqQYAADS3UqqkAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2dlb3MvZ2Vvcy5zdHViw0EAAOtPo2nDQQAAnx/KVaQBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvaGFzaC9oYXNoLnN0dWLDRQAA60+jacNFAADazKCmpAEAAAAAAAA0AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zZXNzaW9uL3Nlc3Npb24uc3R1YmlHAADrT6NpaUcAAJr1k96kAQAAAAAAADsAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3Nlc3Npb24vU2Vzc2lvbkhhbmRsZXIuc3R1YlsoAADrT6NpWygAAG32Zh6kAQAAAAAAADIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2N1YnJpZC9jdWJyaWQuc3R1YnTzAADrT6NpdPMAAMfICn6kAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YqOiAADrT6Npo6IAAGLdD1GkAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YvKLAADrT6Np8osAABYu0sWkAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N0YW5kYXJkL190eXBlcy5zdHVi4kgAAOtPo2niSAAAmPwdV6QBAAAAAAAAOQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3RhbmRhcmQvc3RhbmRhcmRfMTAuc3R1YvkDAADrT6Np+QMAAECkRwKkAQAAAAAAAD4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N0YW5kYXJkL19zdGFuZGFyZF9tYW51YWwuc3R1YikGAADrT6NpKQYAAOrYu0SkAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YsOEAADrT6Npw4QAAB+0DTSkAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1Ynl5AADrT6NpeXkAAG4QyU6kAQAAAAAAADYAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N0YW5kYXJkL3Bhc3N3b3JkLnN0dWInHgAA60+jaSceAAC3T6B1pAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdGFuZGFyZC9zdGFuZGFyZF8wLnN0dWIkogAA60+jaSSiAACtjD63pAEAAAAAAAA+AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWIJlQAA60+jaQmVAAB+nNuepAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWJsmwAA60+jaWybAAD8mBxPpAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdGFuZGFyZC9zdGFuZGFyZF84LnN0dWIPkwAA60+jaQ+TAACCPU6vpAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdGFuZGFyZC9zdGFuZGFyZF85LnN0dWKzqQAA60+jabOpAAAvYzsvpAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdGFuZGFyZC9zdGFuZGFyZF80LnN0dWL3pQAA60+jafelAABn6FKjpAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWIigwAA60+jaSKDAAAt8VHKpAEAAAAAAAAzAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zdGFuZGFyZC9iYXNpYy5zdHVi2CwAAOtPo2nYLAAATkQQFqQBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3lzdnNlbS9zeXN2c2VtLnN0dWKMCgAA60+jaYwKAAABf3pYpAEAAAAAAAAyAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zcWxzcnYvc3Fsc3J2LnN0dWJ+gwEA60+jaX6DAQCxDqRppAEAAAAAAAA8AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0N1cnNvckludGVyZmFjZS5zdHVimwgAAOtPo2mbCAAAt9YGDaQBAAAAAAAAQQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL01heEtleUludGVyZmFjZS5zdHViBwEAAOtPo2kHAQAA1ubgI6QBAAAAAAAAOwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL1VuZGVmaW5lZC5zdHViTwcAAOtPo2lPBwAAVfydiqQBAAAAAAAAOgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL0RvY3VtZW50LnN0dWL1BQAA60+jafUFAABoYotUpAEAAAAAAAA6AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0JTT04vSXRlcmF0b3Iuc3R1Yu8BAADrT6Np7wEAAA2cCAKkAQAAAAAAADoAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvQlNPTi9PYmplY3RJZC5zdHVinAcAAOtPo2mcBwAAh3RsP6QBAAAAAAAANgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL1R5cGUuc3R1YosAAADrT6NpiwAAACdK7C2kAQAAAAAAADsAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvQlNPTi9mdW5jdGlvbnMuc3R1Yl4NAADrT6NpXg0AADnhEQWkAQAAAAAAAEYAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvQlNPTi9VVENEYXRlVGltZUludGVyZmFjZS5zdHViKwMAAOtPo2krAwAAMiz1FKQBAAAAAAAAQQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL01pbktleUludGVyZmFjZS5zdHViBwEAAOtPo2kHAQAAR651sqQBAAAAAAAAOwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL0RCUG9pbnRlci5zdHVikAcAAOtPo2mQBwAA4Oi+N6QBAAAAAAAANwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL1JlZ2V4LnN0dWJWCAAA60+jaVYIAAB1mhFrpAEAAAAAAABFAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0JTT04vRGVjaW1hbDEyOEludGVyZmFjZS5zdHViOAIAAOtPo2k4AgAAgkw9cKQBAAAAAAAAQAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL1JlZ2V4SW50ZXJmYWNlLnN0dWJlAwAA60+jaWUDAACDsaVtpAEAAAAAAAA7AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0JTT04vVGltZXN0YW1wLnN0dWJxCQAA60+jaXEJAAANZ5pIpAEAAAAAAAA8AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0JTT04vSmF2YXNjcmlwdC5zdHViuggAAOtPo2m6CAAAI6I80aQBAAAAAAAAPQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL1BlcnNpc3RhYmxlLnN0dWKQAQAA60+jaZABAAAhdOTspAEAAAAAAABAAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0JTT04vVW5zZXJpYWxpemFibGUuc3R1YuECAADrT6Np4QIAACJ0g1+kAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvQlNPTi9CaW5hcnkuc3R1YsMJAADrT6NpwwkAAD+T+xSkAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvQlNPTi9TeW1ib2wuc3R1Yi8HAADrT6NpLwcAAFL4naukAQAAAAAAAEMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvQlNPTi9PYmplY3RJZEludGVyZmFjZS5zdHVi+QIAAOtPo2n5AgAAQ18Em6QBAAAAAAAARQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL0phdmFzY3JpcHRJbnRlcmZhY2Uuc3R1YpADAADrT6NpkAMAAF1P2IekAQAAAAAAAD0AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvQlNPTi9VVENEYXRlVGltZS5zdHViTgkAAOtPo2lOCQAAZOrWHKQBAAAAAAAAPQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL1BhY2tlZEFycmF5LnN0dWLuBAAA60+jae4EAACQtKLXpAEAAAAAAAA8AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0JTT04vRGVjaW1hbDEyOC5zdHViDggAAOtPo2kOCAAAolfRz6QBAAAAAAAAOAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL01pbktleS5zdHViggUAAOtPo2mCBQAAHg24jKQBAAAAAAAANwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9CU09OL0ludDY0LnN0dWJPBgAA60+jaU8GAACa/u8kpAEAAAAAAABEAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0JTT04vVGltZXN0YW1wSW50ZXJmYWNlLnN0dWLFAwAA60+jacUDAABFC9pwpAEAAAAAAAA+AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0JTT04vU2VyaWFsaXphYmxlLnN0dWLgAwAA60+jaeADAABAfYe6pAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0JTT04vTWF4S2V5LnN0dWKCBQAA60+jaYIFAADvvtJXpAEAAAAAAABBAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0JTT04vQmluYXJ5SW50ZXJmYWNlLnN0dWKNAwAA60+jaY0DAAD2MD5GpAEAAAAAAAA0AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL01hbmFnZXIuc3R1Yu0qAADrT6Np7SoAAN5ka/+kAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvU2Vzc2lvbi5zdHViVBoAAOtPo2lUGgAA2rg3nKQBAAAAAAAAUAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9FeGNlcHRpb24vRXhlY3V0aW9uVGltZW91dEV4Y2VwdGlvbi5zdHViSAEAAOtPo2lIAQAAQaAc7KQBAAAAAAAARQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9FeGNlcHRpb24vTG9naWNFeGNlcHRpb24uc3R1YhcBAADrT6NpFwEAAFp/r8WkAQAAAAAAAEwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvRXhjZXB0aW9uL1dyaXRlQ29uY2VybkV4Y2VwdGlvbi5zdHVieQAAAOtPo2l5AAAAwab66KQBAAAAAAAAUQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9FeGNlcHRpb24vQ29ubmVjdGlvblRpbWVvdXRFeGNlcHRpb24uc3R1YmQBAADrT6NpZAEAAMMMLTukAQAAAAAAAEkAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvRXhjZXB0aW9uL0J1bGtXcml0ZUV4Y2VwdGlvbi5zdHViEgEAAOtPo2kSAQAAtLqEf6QBAAAAAAAARQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9FeGNlcHRpb24vV3JpdGVFeGNlcHRpb24uc3R1YpcCAADrT6NplwIAAEefkGekAQAAAAAAAE4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvRXhjZXB0aW9uL0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLnN0dWI1AQAA60+jaTUBAAADS6gbpAEAAAAAAABKAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0V4Y2VwdGlvbi9FbmNyeXB0aW9uRXhjZXB0aW9uLnN0dWIsAQAA60+jaSwBAAANhTWrpAEAAAAAAABNAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0V4Y2VwdGlvbi9TU0xDb25uZWN0aW9uRXhjZXB0aW9uLnN0dWIyAQAA60+jaTIBAADO6YvopAEAAAAAAABPAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0V4Y2VwdGlvbi9VbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24uc3R1YmoBAADrT6NpagEAAKlNbfSkAQAAAAAAAE8AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvRXhjZXB0aW9uL0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbi5zdHViUwEAAOtPo2lTAQAANWuQOqQBAAAAAAAARwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9FeGNlcHRpb24vQ29tbWFuZEV4Y2VwdGlvbi5zdHViCwIAAOtPo2kLAgAAS/r4KqQBAAAAAAAASgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9FeGNlcHRpb24vQ29ubmVjdGlvbkV4Y2VwdGlvbi5zdHViRwEAAOtPo2lHAQAAQWwbqKQBAAAAAAAAQAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9FeGNlcHRpb24vRXhjZXB0aW9uLnN0dWI6AQAA60+jaToBAABNEB+3pAEAAAAAAABHAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0V4Y2VwdGlvbi9SdW50aW1lRXhjZXB0aW9uLnN0dWJGAgAA60+jaUYCAACsRYiypAEAAAAAAABGAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0V4Y2VwdGlvbi9TZXJ2ZXJFeGNlcHRpb24uc3R1YosBAADrT6NpiwEAAKPmYOWkAQAAAAAAADMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvU2VydmVyLnN0dWKOJwAA60+jaY4nAAACO6xkpAEAAAAAAAA0AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL21vbmdvZGIuc3R1YkYEAADrT6NpRgQAAPcutoKkAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvV3JpdGVSZXN1bHQuc3R1YmQKAADrT6NpZAoAAN2asRakAQAAAAAAADsAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvUmVhZFByZWZlcmVuY2Uuc3R1YkQOAADrT6NpRA4AAM+jwZ6kAQAAAAAAAD0AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvQ2xpZW50RW5jcnlwdGlvbi5zdHViZhwAAOtPo2lmHAAAOMexOaQBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9RdWVyeS5zdHViqwIAAOtPo2mrAgAAmdS2x6QBAAAAAAAANQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9DdXJzb3JJZC5zdHVidwYAAOtPo2l3BgAAEaA6P6QBAAAAAAAAOAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9SZWFkQ29uY2Vybi5zdHViDAoAAOtPo2kMCgAAd7WMnaQBAAAAAAAAPgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9TZXJ2ZXJEZXNjcmlwdGlvbi5zdHViqwcAAOtPo2mrBwAALpmIu6QBAAAAAAAAPgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9Xcml0ZUNvbmNlcm5FcnJvci5zdHViAQQAAOtPo2kBBAAAvVbVWqQBAAAAAAAAOQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9Xcml0ZUNvbmNlcm4uc3R1YkULAADrT6NpRQsAAFPrq+CkAQAAAAAAADYAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvU2VydmVyQXBpLnN0dWLzAQAA60+jafMBAADq3ebWpAEAAAAAAABAAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL1RvcG9sb2d5RGVzY3JpcHRpb24uc3R1Yq4FAADrT6NprgUAAJUsARykAQAAAAAAADMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvQ3Vyc29yLnN0dWL7DwAA60+jafsPAAADA+dIpAEAAAAAAABGAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL01vbml0b3JpbmcvU0RBTVN1YnNjcmliZXIuc3R1YrIJAADrT6NpsgkAAA/GkO6kAQAAAAAAAEsAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvTW9uaXRvcmluZy9Db21tYW5kU3RhcnRlZEV2ZW50LnN0dWIaDwAA60+jaRoPAABUlcsWpAEAAAAAAABBAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL01vbml0b3JpbmcvZnVuY3Rpb25zLnN0dWJ1BAAA60+jaXUEAAAGxr1npAEAAAAAAABFAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL01vbml0b3JpbmcvTG9nU3Vic2NyaWJlci5zdHVivAIAAOtPo2m8AgAAf27MhaQBAAAAAAAAUgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9Nb25pdG9yaW5nL1NlcnZlckhlYXJ0YmVhdEZhaWxlZEV2ZW50LnN0dWJdBQAA60+jaV0FAADwNaXApAEAAAAAAABKAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL01vbml0b3JpbmcvU2VydmVyQ2hhbmdlZEV2ZW50LnN0dWKVBQAA60+jaZUFAADdcBTlpAEAAAAAAABKAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL01vbml0b3JpbmcvU2VydmVyT3BlbmluZ0V2ZW50LnN0dWJ2AwAA60+jaXYDAAD5NooypAEAAAAAAABJAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL01vbml0b3JpbmcvQ29tbWFuZFN1YnNjcmliZXIuc3R1YuIIAADrT6Np4ggAADtP3hukAQAAAAAAAEkAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvTW9uaXRvcmluZy9TZXJ2ZXJDbG9zZWRFdmVudC5zdHVicgMAAOtPo2lyAwAAOoymU6QBAAAAAAAAQgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9Nb25pdG9yaW5nL1N1YnNjcmliZXIuc3R1Yu0BAADrT6Np7QEAABiMBfCkAQAAAAAAAEoAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvTW9uaXRvcmluZy9Db21tYW5kRmFpbGVkRXZlbnQuc3R1Yu4QAADrT6Np7hAAAGPrkJKkAQAAAAAAAFMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvTW9uaXRvcmluZy9TZXJ2ZXJIZWFydGJlYXRTdGFydGVkRXZlbnQuc3R1YngDAADrT6NpeAMAAKV4jxikAQAAAAAAAEwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21vbmdvZGIvTW9uaXRvcmluZy9Ub3BvbG9neU9wZW5pbmdFdmVudC5zdHVitQEAAOtPo2m1AQAAWfJXdaQBAAAAAAAAVQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9Nb25pdG9yaW5nL1NlcnZlckhlYXJ0YmVhdFN1Y2NlZWRlZEV2ZW50LnN0dWJVBQAA60+jaVUFAACcMnl7pAEAAAAAAABNAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL01vbml0b3JpbmcvQ29tbWFuZFN1Y2NlZWRlZEV2ZW50LnN0dWKuDwAA60+jaa4PAACtFZl1pAEAAAAAAABLAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL01vbml0b3JpbmcvVG9wb2xvZ3lDbG9zZWRFdmVudC5zdHViswEAAOtPo2mzAQAA+Tg5+aQBAAAAAAAATAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9Nb25pdG9yaW5nL1RvcG9sb2d5Q2hhbmdlZEV2ZW50LnN0dWLiAwAA60+jaeIDAABlNLK6pAEAAAAAAAA2AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0J1bGtXcml0ZS5zdHVisgsAAOtPo2myCwAAnZEjWqQBAAAAAAAANwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbW9uZ29kYi9Xcml0ZUVycm9yLnN0dWJgBAAA60+jaWAEAABfX0ukpAEAAAAAAAA0AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nb2RiL0NvbW1hbmQuc3R1YrgDAADrT6NpuAMAAN6+iWSkAQAAAAAAACwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2dtcC9nbXAuc3R1Yv11AADrT6Np/XUAAJdPHAGkAQAAAAAAACsAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1BBVENIRVMudHh0RQEAAOtPo2lFAQAA6dtazqQBAAAAAAAALAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZWlvL2Vpby5zdHViZnkAAOtPo2lmeQAAAAH89KQBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZmlsdGVyL2ZpbHRlci5zdHVirzsAAOtPo2mvOwAAdjLWrKQBAAAAAAAAPQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmRrYWZrYS9SZEthZmthL0NvbnN1bWVyLnN0dWK0AQAA60+jabQBAACUVLFZpAEAAAAAAAA+AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9yZGthZmthL1JkS2Fma2EvVG9waWNDb25mLnN0dWIMAgAA60+jaQwCAAAT5HiupAEAAAAAAAA5AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9yZGthZmthL1JkS2Fma2EvQ29uZi5zdHVicQUAAOtPo2lxBQAAk+TQOKQBAAAAAAAARwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmRrYWZrYS9SZEthZmthL01ldGFkYXRhL1BhcnRpdGlvbi5zdHVimwEAAOtPo2mbAQAAHBijF6QBAAAAAAAASAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmRrYWZrYS9SZEthZmthL01ldGFkYXRhL0NvbGxlY3Rpb24uc3R1YvIBAADrT6Np8gEAALFMFPWkAQAAAAAAAEQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3Jka2Fma2EvUmRLYWZrYS9NZXRhZGF0YS9Ccm9rZXIuc3R1YpgAAADrT6NpmAAAAElRdVKkAQAAAAAAAEMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3Jka2Fma2EvUmRLYWZrYS9NZXRhZGF0YS9Ub3BpYy5zdHViFQEAAOtPo2kVAQAA/MkXY6QBAAAAAAAAPQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmRrYWZrYS9SZEthZmthL01ldGFkYXRhLnN0dWKvAQAA60+jaa8BAACFuc+OpAEAAAAAAABHAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9yZGthZmthL1JkS2Fma2EvS2Fma2FDb25zdW1lclRvcGljLnN0dWIHAQAA60+jaQcBAAD7Q/rZpAEAAAAAAAA8AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9yZGthZmthL1JkS2Fma2EvTWVzc2FnZS5zdHVicgIAAOtPo2lyAgAAYoWJV6QBAAAAAAAAQgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmRrYWZrYS9SZEthZmthL1Byb2R1Y2VyVG9waWMuc3R1YmEDAADrT6NpYQMAAO65xACkAQAAAAAAADoAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3Jka2Fma2EvUmRLYWZrYS9RdWV1ZS5zdHVizwAAAOtPo2nPAAAAjddoaKQBAAAAAAAAQgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmRrYWZrYS9SZEthZmthL0thZmthQ29uc3VtZXIuc3R1YnEKAADrT6NpcQoAAAdGqiGkAQAAAAAAAD0AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3Jka2Fma2EvUmRLYWZrYS9Qcm9kdWNlci5zdHViOQMAAOtPo2k5AwAAgd+yAKQBAAAAAAAASAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmRrYWZrYS9SZEthZmthL0thZmthRXJyb3JFeGNlcHRpb24uc3R1YskCAADrT6NpyQIAAFHY4RKkAQAAAAAAAEIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3Jka2Fma2EvUmRLYWZrYS9Db25zdW1lclRvcGljLnN0dWIcBAAA60+jaRwEAAD0Hc0+pAEAAAAAAAA6AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9yZGthZmthL1JkS2Fma2EvVG9waWMuc3R1YnsAAADrT6NpewAAAPl0ez2kAQAAAAAAAD4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3Jka2Fma2EvUmRLYWZrYS9FeGNlcHRpb24uc3R1YkEAAADrT6NpQQAAAEQvUa6kAQAAAAAAAEMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3Jka2Fma2EvUmRLYWZrYS9Ub3BpY1BhcnRpdGlvbi5zdHViIQMAAOtPo2khAwAAz8A5PKQBAAAAAAAANgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmRrYWZrYS9mdW5jdGlvbnMuc3R1YhQDAADrT6NpFAMAAO3qnA6kAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3Jka2Fma2EvUmRLYWZrYS5zdHVicQcAAOtPo2lxBwAArTvw0qQBAAAAAAAANgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvcmRrYWZrYS9jb25zdGFudHMuc3R1Yp0jAADrT6NpnSMAAJoMjpGkAQAAAAAAACwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3Jhci9yYXIuc3R1YtJfAADrT6Np0l8AABlFUWCkAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL29kYmMvb2RiYy5zdHVioHkAAOtPo2mgeQAAi6cFoqQBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZGVjaW1hbC9kZWNpbWFsLnN0dWI8PAAA60+jaTw8AAAIesN5pAEAAAAAAAA8AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9saWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHVihzkBAOtPo2mHOQEAjfU6YKQBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvemxpYi96bGliLnN0dWKpSwAA60+jaalLAADgWrLUpAEAAAAAAAAyAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy94bWxycGMveG1scnBjLnN0dWKoEQAA60+jaagRAADvAraYpAEAAAAAAAA0AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tZW1pbmZvL21lbWluZm8uc3R1Yp8AAADrT6NpnwAAAKlyYsmkAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2dycGMvZ3JwYy5zdHVi5lkAAOtPo2nmWQAAWK5L2aQBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbmN1cnNlcy9uY3Vyc2VzLnN0dWLqpwAA60+jaeqnAAAqo9appAEAAAAAAAAwAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9tb25nby9tb25nby5zdHVimMgBAOtPo2mYyAEAO26u6qQBAAAAAAAANgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbWJzdHJpbmcvbWJzdHJpbmcuc3R1YuO2AADrT6Np47YAAEsMmU2kAQAAAAAAAEoAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkludGVyc2VjdGlvblR5cGUuc3R1YtAAAADrT6Np0AAAADaPYzikAQAAAAAAAEMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1JlZmxlY3Rpb24vUmVmbGVjdGlvblJlZmVyZW5jZS5zdHVi1AUAAOtPo2nUBQAA2Ia1NaQBAAAAAAAAQwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uTmFtZWRUeXBlLnN0dWJwAwAA60+jaXADAAAnH9ofpAEAAAAAAABAAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25NZXRob2Quc3R1YlUqAADrT6NpVSoAAI68s56kAQAAAAAAAEMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1JlZmxlY3Rpb24vUmVmbGVjdGlvblBhcmFtZXRlci5zdHVi2ScAAOtPo2nZJwAA2EWQT6QBAAAAAAAAQAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvUmVmbGVjdGlvbi9Qcm9wZXJ0eUhvb2tUeXBlLnN0dWIzAQAA60+jaTMBAAC0BZpGpAEAAAAAAABCAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25GdW5jdGlvbi5zdHVipQ4AAOtPo2mlDgAAF2KpgKQBAAAAAAAAQgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uQ29uc3RhbnQuc3R1Yq8BAADrT6NprwEAAKug93ykAQAAAAAAAEMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1JlZmxlY3Rpb24vUmVmbGVjdGlvblVuaW9uVHlwZS5zdHViCgIAAOtPo2kKAgAAzejLnKQBAAAAAAAAQgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvcGVydHkuc3R1YmEuAADrT6NpYS4AAPEgLf+kAQAAAAAAAEMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkF0dHJpYnV0ZS5zdHVikwYAAOtPo2mTBgAA15bzEaQBAAAAAAAAPgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uVHlwZS5zdHVizQYAAOtPo2nNBgAAnRylUqQBAAAAAAAAQAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uT2JqZWN0LnN0dWKrBAAA60+jaasEAAAcMJOspAEAAAAAAAA6AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9SZWZsZWN0aW9uL1JlZmxlY3Rpb24uc3R1YuUEAADrT6Np5QQAALVD8JmkAQAAAAAAAEMAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkdlbmVyYXRvci5zdHViTAwAAOtPo2lMDAAAK+pL9qQBAAAAAAAAOQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvUmVmbGVjdGlvbi9SZWZsZWN0b3Iuc3R1YqsCAADrT6NpqwIAAMZUqe+kAQAAAAAAAD8AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkNsYXNzLnN0dWLvXAAA60+jae9cAADbho8kpAEAAAAAAABDAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25FeGNlcHRpb24uc3R1YqQAAADrT6NppAAAAIwjNZCkAQAAAAAAAD8AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkZpYmVyLnN0dWKEAQAA60+jaYQBAAAqFGGGpAEAAAAAAABDAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25FeHRlbnNpb24uc3R1YjIYAADrT6NpMhgAABbDfhOkAQAAAAAAAEgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkVudW1CYWNrZWRDYXNlLnN0dWJQAQAA60+jaVABAADOZ8PrpAEAAAAAAABHAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25DbGFzc0NvbnN0YW50LnN0dWI0GAAA60+jaTQYAADBoux8pAEAAAAAAABGAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25FbnVtVW5pdENhc2Uuc3R1YrABAADrT6NpsAEAAEU7AZ+kAQAAAAAAAD4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkVudW0uc3R1YvoDAADrT6Np+gMAAKXNTumkAQAAAAAAAEcAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1JlZmxlY3Rpb24vUmVmbGVjdGlvblplbmRFeHRlbnNpb24uc3R1Yp8NAADrT6Npnw0AABpie2CkAQAAAAAAAEoAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkZ1bmN0aW9uQWJzdHJhY3Quc3R1YmgoAADrT6NpaCgAAIv/IwKkAQAAAAAAACwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL0ZGSS9GRkkuc3R1YulNAADrT6Np6U0AAK10oRqkAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3NxbGl0ZTMvc3FsaXRlMy5zdHVi2WYAAOtPo2nZZgAA+qrUvaQBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbWluZy9taW5nLnN0dWJyIgAA60+jaXIiAAAyhTogpAEAAAAAAAAsAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9kYmEvZGJhLnN0dWJFMAAA60+jaUUwAADeTtSjpAEAAAAAAAAzAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9kYmEvQ29ubmVjdGlvbi5zdHViRwAAAOtPo2lHAAAAb/BAM6QBAAAAAAAANgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbWVtY2FjaGUvbWVtY2FjaGUuc3R1YiRSAADrT6NpJFIAAFWa2CqkAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3NubXAvc25tcC5zdHVi66QAAOtPo2nrpAAA0hr5i6QBAAAAAAAAOAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViEwkEAOtPo2kTCQQAM//b1KQBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMveGhwcm9mL3hocHJvZi5zdHVi+QgAAOtPo2n5CAAA1Gci1aQBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29hcC9zb2FwX24uc3R1Yo8AAADrT6NpjwAAAAIUdbekAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3NvYXAvc29hcC5zdHViR5oAAOtPo2lHmgAAxtxa8KQBAAAAAAAALAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZnRwL2Z0cC5zdHVihWkAAOtPo2mFaQAA03koIqQBAAAAAAAAMwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZnRwL0Nvbm5lY3Rpb24uc3R1YkcAAADrT6NpRwAAAIumGiGkAQAAAAAAAD4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YkVjAADrT6NpRWMAAL5Ss9ukAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL21zZ3BhY2svbXNncGFjay5zdHViWAYAAOtPo2lYBgAAMmRcgKQBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc2htb3Avc2htb3Auc3R1YrIOAADrT6Npsg4AABv2MsmkAQAAAAAAADQAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3JwbWluZm8vcnBtaW5mby5zdHViGS0AAOtPo2kZLQAAvf+U6qQBAAAAAAAAMgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvY3J5cHRvL2NyeXB0by5zdHViMT8AAOtPo2kxPwAAG9qr16QBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZ2Vhcm1hbi9nZWFybWFuLnN0dWIB6gAA60+jaQHqAADgrImbpAEAAAAAAABFAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zb2xyL0RvY3VtZW50cy9Tb2xyRG9jdW1lbnRGaWVsZC5zdHViGwQAAOtPo2kbBAAAHgoKXKQBAAAAAAAAQAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29sci9Eb2N1bWVudHMvU29sckRvY3VtZW50LnN0dWLILwAA60+jacgvAADwRiaVpAEAAAAAAABFAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zb2xyL0RvY3VtZW50cy9Tb2xySW5wdXREb2N1bWVudC5zdHViriYAAOtPo2muJgAAP0oLtaQBAAAAAAAAOgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29sci9VdGlscy9Tb2xyT2JqZWN0LnN0dWIYCgAA60+jaRgKAAD4dAr6pAEAAAAAAAA5AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zb2xyL1V0aWxzL1NvbHJVdGlscy5zdHVizwkAAOtPo2nPCQAAhs5PE6QBAAAAAAAANAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29sci9Tb2xyQ2xpZW50LnN0dWKTTQAA60+jaZNNAABDfK3BpAEAAAAAAAAzAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zb2xyL2Z1bmN0aW9ucy5zdHVi1wEAAOtPo2nXAQAAQRn6QaQBAAAAAAAAQQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29sci9RdWVyaWVzL1NvbHJEaXNNYXhRdWVyeS5zdHViFy0AAOtPo2kXLQAACEkhnqQBAAAAAAAARgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29sci9RdWVyaWVzL1NvbHJDb2xsYXBzZUZ1bmN0aW9uLnN0dWK2EQAA60+jabYRAABFDQPzpAEAAAAAAAA8AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zb2xyL1F1ZXJpZXMvU29sclBhcmFtcy5zdHVirhIAAOtPo2muEgAAKH/URKQBAAAAAAAARgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29sci9RdWVyaWVzL1NvbHJNb2RpZmlhYmxlUGFyYW1zLnN0dWJrAwAA60+jaWsDAAAl3dF/pAEAAAAAAAA7AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zb2xyL1F1ZXJpZXMvU29sclF1ZXJ5LnN0dWJzPgEA60+jaXM+AQAGgPAYpAEAAAAAAABbAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zb2xyL0V4Y2VwdGlvbnMvU29sck1pc3NpbmdNYW5kYXRvcnlQYXJhbWV0ZXJFeGNlcHRpb24uc3R1YqcBAADrT6NppwEAAL+DboSkAQAAAAAAAFIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3NvbHIvRXhjZXB0aW9ucy9Tb2xySWxsZWdhbE9wZXJhdGlvbkV4Y2VwdGlvbi5zdHVilAMAAOtPo2mUAwAALU4l9aQBAAAAAAAASAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29sci9FeGNlcHRpb25zL1NvbHJDbGllbnRFeGNlcHRpb24uc3R1YnMDAADrT6NpcwMAAPhHUB2kAQAAAAAAAFEAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3NvbHIvRXhjZXB0aW9ucy9Tb2xySWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLnN0dWKHAwAA60+jaYcDAAAp8jThpAEAAAAAAABCAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zb2xyL0V4Y2VwdGlvbnMvU29sckV4Y2VwdGlvbi5zdHVigAQAAOtPo2mABAAAGwImHKQBAAAAAAAASAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29sci9FeGNlcHRpb25zL1NvbHJTZXJ2ZXJFeGNlcHRpb24uc3R1YnkDAADrT6NpeQMAAEONJI+kAQAAAAAAAEAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3NvbHIvUmVzcG9uc2VzL1NvbHJSZXNwb25zZS5zdHVigxQAAOtPo2mDFAAAL0nzJaQBAAAAAAAARgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29sci9SZXNwb25zZXMvU29sclVwZGF0ZVJlc3BvbnNlLnN0dWIlAwAA60+jaSUDAAA+SIrZpAEAAAAAAABFAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zb2xyL1Jlc3BvbnNlcy9Tb2xyUXVlcnlSZXNwb25zZS5zdHViHQMAAOtPo2kdAwAAmg4OyaQBAAAAAAAARAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29sci9SZXNwb25zZXMvU29sclBpbmdSZXNwb25zZS5zdHViogQAAOtPo2miBAAA3qGM3qQBAAAAAAAARwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29sci9SZXNwb25zZXMvU29sckdlbmVyaWNSZXNwb25zZS5zdHViKwMAAOtPo2krAwAAp5v+maQBAAAAAAAAMwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc29sci9jb25zdGFudHMuc3R1YkQCAADrT6NpRAIAALegC2OkAQAAAAAAADYAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3NpbWRqc29uL3NpbWRqc29uLnN0dWIvEAAA60+jaS8QAADD9VBepAEAAAAAAAAvAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9odHRwL2h0dHAzLnN0dWJdtQEA60+jaV21AQC2wbM8pAEAAAAAAAAuAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9odHRwL2h0dHAuc3R1Yp6BAQDrT6NpnoEBABetq4ekAQAAAAAAADAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N0YXRzL3N0YXRzLnN0dWIiSAAA60+jaSJIAACk/mUYpAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy90b2tlbml6ZXIvdG9rZW5pemVyLnN0dWLAFgAA60+jacAWAAAW7iYQpAEAAAAAAAA3AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy90b2tlbml6ZXIvUGhwVG9rZW4uc3R1Yv0GAADrT6Np/QYAACbmFoikAQAAAAAAADAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2dudXBnL2dudXBnLnN0dWJaSQAA60+jaVpJAADw8QozpAEAAAAAAAA0AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9TcGxUeXBlL1NwbFR5cGUuc3R1YqoKAADrT6NpqgoAANdvsp2kAQAAAAAAADIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL215c3FsaS9teXNxbGkuc3R1YjLeAQDrT6NpMt4BAD+BH52kAQAAAAAAADYAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2NhbGVuZGFyL2NhbGVuZGFyLnN0dWK6JgAA60+jabomAAD/ZnjdpAEAAAAAAAAyAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9yYWRpdXMvcmFkaXVzLnN0dWKvRwAA60+jaa9HAADxNGerpAEAAAAAAAAsAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy94bWwveG1sLnN0dWKeWgAA60+jaZ5aAACT6F0hpAEAAAAAAAA2AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9pZ2JpbmFyeS9pZ2JpbmFyeS5zdHVivAgAAOtPo2m8CAAAbxQvhqQBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvdXVpZC91dWlkX2Muc3R1YpQMAADrT6NplAwAAH2blmqkAQAAAAAAADIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3JhbmRvbS9yYW5kb20uc3R1YowdAADrT6NpjB0AAF7JNeCkAQAAAAAAACsAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3J1blRlc3RzLnNoYAQAAOtPo2lgBAAA21J6MaQBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZGF0ZS9kYXRlX2Muc3R1YsKaAADrT6NpwpoAAD9Bb5OkAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2RhdGUvZGF0ZS5zdHViK8wAAOtPo2krzAAA5RhzlKQBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZGF0ZS9kYXRlX2Quc3R1YiIFAADrT6NpIgUAAIShZYykAQAAAAAAACoAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2dkL2dkLnN0dWIbiwEA60+jaRuLAQAWn5LzpAEAAAAAAAAuAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9nZC9HZEZvbnQuc3R1YjMAAADrT6NpMwAAAGATST2kAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2pzb24vanNvbi5zdHVi3zQAAOtPo2nfNAAAGop0QaQBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvUGhhci9QaGFyLnN0dWIoxwAA60+jaSjHAADeyjZLpAEAAAAAAABCAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy91cGxvYWRwcm9ncmVzcy91cGxvYWRwcm9ncmVzcy5zdHViDAIAAOtPo2kMAgAAxnLdi6QBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvbXNzcWwvbXNzcWwuc3R1YjZNAADrT6NpNk0AANZXy5+kAQAAAAAAADUAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9mdW5jdGlvbnMuc3R1YjgiAADrT6NpOCIAADZ89AOkAQAAAAAAAEAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9Td29vbGUvRXhpdEV4Y2VwdGlvbi5zdHViIAEAAOtPo2kgAQAAj4ccX6QBAAAAAAAAPgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9IdHRwL1NlcnZlci5zdHViYAAAAOtPo2lgAAAAHFn54aQBAAAAAAAAPwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9IdHRwL1JlcXVlc3Quc3R1YrsFAADrT6NpuwUAALfwXSykAQAAAAAAAEAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9Td29vbGUvSHR0cC9SZXNwb25zZS5zdHVi3w8AAOtPo2nfDwAAt61jk6QBAAAAAAAAOQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9TZXJ2ZXIuc3R1YnEmAADrT6NpcSYAAILXRcSkAQAAAAAAADoAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9Td29vbGUvUnVudGltZS5zdHViCAUAAOtPo2kIBQAABdN/mqQBAAAAAAAAOgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9Qcm9jZXNzLnN0dWKeDgAA60+jaZ4OAAA4PNqLpAEAAAAAAAA+AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0F0b21pYy9Mb25nLnN0dWLvAQAA60+jae8BAADLHImkpAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL1RpbWVyLnN0dWJ7AwAA60+jaXsDAACy5lWdpAEAAAAAAABCAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL1dlYlNvY2tldC9GcmFtZS5zdHViHwIAAOtPo2kfAgAARBebHqQBAAAAAAAARwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9XZWJTb2NrZXQvQ2xvc2VGcmFtZS5zdHViqwAAAOtPo2mrAAAAmCWapKQBAAAAAAAAQwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9XZWJTb2NrZXQvU2VydmVyLnN0dWKrAwAA60+jaasDAADuIUFmpAEAAAAAAAA/AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL1Byb2Nlc3MvUG9vbC5zdHVipwQAAOtPo2mnBAAATDQhEqQBAAAAAAAARAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9TZXJ2ZXIvU3RhdHVzSW5mby5zdHVi0gAAAOtPo2nSAAAAqC6MraQBAAAAAAAAQAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9TZXJ2ZXIvUGFja2V0LnN0dWLSAAAA60+jadIAAAAr/B6WpAEAAAAAAABFAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL1NlcnZlci9QaXBlTWVzc2FnZS5zdHVipAAAAOtPo2mkAAAABXbsRKQBAAAAAAAAPgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9TZXJ2ZXIvUG9ydC5zdHViuQMAAOtPo2m5AwAAX3vq56QBAAAAAAAARAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9TZXJ2ZXIvVGFza1Jlc3VsdC5zdHViugAAAOtPo2m6AAAAA0u+/KQBAAAAAAAAPgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9TZXJ2ZXIvVGFzay5zdHVikgEAAOtPo2mSAQAAZVo8daQBAAAAAAAAPwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9TZXJ2ZXIvRXZlbnQuc3R1YqwAAADrT6NprAAAAP0RzTSkAQAAAAAAAEIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9Td29vbGUvQ29yb3V0aW5lL015U1FMLnN0dWI8BwAA60+jaTwHAACsJo0MpAEAAAAAAABIAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0Nvcm91dGluZS9IdHRwL1NlcnZlci5zdHViGQMAAOtPo2kZAwAA5Xn7KqQBAAAAAAAASAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvSHR0cC9DbGllbnQuc3R1YikOAADrT6NpKQ4AAAtnJuWkAQAAAAAAAFIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9Td29vbGUvQ29yb3V0aW5lL0h0dHAvQ2xpZW50L0V4Y2VwdGlvbi5zdHVidwAAAOtPo2l3AAAAHx22k6QBAAAAAAAARgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvU2NoZWR1bGVyLnN0dWLJBQAA60+jackFAADNOZq3pAEAAAAAAABFAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0Nvcm91dGluZS9JdGVyYXRvci5zdHVisQAAAOtPo2mxAAAANBMTO6QBAAAAAAAARAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvQ29udGV4dC5zdHVirgAAAOtPo2muAAAAssrb9aQBAAAAAAAAQwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvU3lzdGVtLnN0dWK9CgAA60+jab0KAABT8EHbpAEAAAAAAABLAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0Nvcm91dGluZS9DdXJsL0V4Y2VwdGlvbi5zdHVicAAAAOtPo2lwAAAAe4Nf1KQBAAAAAAAATAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvTXlTUUwvU3RhdGVtZW50LnN0dWKiAwAA60+jaaIDAADkETWWpAEAAAAAAABMAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0Nvcm91dGluZS9NeVNRTC9FeGNlcHRpb24uc3R1YnEAAADrT6NpcQAAAFGjw6+kAQAAAAAAAEkAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9Td29vbGUvQ29yb3V0aW5lL0h0dHAyL0NsaWVudC5zdHVibwYAAOtPo2lvBgAAuqRHPqQBAAAAAAAAUwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvSHR0cDIvQ2xpZW50L0V4Y2VwdGlvbi5zdHVieAAAAOtPo2l4AAAAUA3x+KQBAAAAAAAARAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvQ2hhbm5lbC5zdHViHAMAAOtPo2kcAwAAyE/taKQBAAAAAAAATQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvU29ja2V0L0V4Y2VwdGlvbi5zdHVicgAAAOtPo2lyAAAALXwgq6QBAAAAAAAAQwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvU29ja2V0LnN0dWJhEgAA60+jaWESAADJTaihpAEAAAAAAABDAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0Nvcm91dGluZS9DbGllbnQuc3R1YvcIAADrT6Np9wgAAHDg1a6kAQAAAAAAAEIAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9Td29vbGUvQ29yb3V0aW5lL1JlZGlzLnN0dWL3bQAA60+jafdtAAD0JVSOpAEAAAAAAAA3AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0xvY2suc3R1Yh8DAADrT6NpHwMAAPcuk26kAQAAAAAAAD8AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9Td29vbGUvUmVkaXMvU2VydmVyLnN0dWKnCQAA60+jaacJAACNFD+DpAEAAAAAAAA5AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0F0b21pYy5zdHVilAIAAOtPo2mUAgAAqGVLzaQBAAAAAAAAQAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL1N3b29sZS9IdHRwMi9SZXF1ZXN0LnN0dWLfAAAA60+jad8AAADD8UgxpAEAAAAAAABBAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0h0dHAyL1Jlc3BvbnNlLnN0dWIWAQAA60+jaRYBAABpGxoTpAEAAAAAAABGAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0Nvbm5lY3Rpb24vSXRlcmF0b3Iuc3R1YuQCAADrT6Np5AIAAGZvxcakAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9Td29vbGUvVGFibGUuc3R1YvQRAADrT6Np9BEAAMaCd9WkAQAAAAAAADkAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9Td29vbGUvQ2xpZW50LnN0dWIFCQAA60+jaQUJAADe8PTRpAEAAAAAAABBAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL1RpbWVyL0l0ZXJhdG9yLnN0dWKVAAAA60+jaZUAAABnOAUnpAEAAAAAAABDAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0NsaWVudC9FeGNlcHRpb24uc3R1YmgAAADrT6NpaAAAAI2+8zukAQAAAAAAADgAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9Td29vbGUvRXJyb3Iuc3R1YlIAAADrT6NpUgAAAODsl1SkAQAAAAAAADwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3N3b29sZS9Td29vbGUvRXhjZXB0aW9uLnN0dWJaAAAA60+jaVoAAACXpA68pAEAAAAAAAA4AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0V2ZW50LnN0dWKVBQAA60+jaZUFAADTd5yhpAEAAAAAAAA8AAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zd29vbGUvU3dvb2xlL0Nvcm91dGluZS5zdHVirxcAAOtPo2mvFwAAFU6dy6QBAAAAAAAANQAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL2NvbnN0YW50cy5zdHVizEEAAOtPo2nMQQAAQNB5mqQBAAAAAAAAMwAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvc3dvb2xlL2FsaWFzZXMuc3R1YlgMAADrT6NpWAwAAIej4ZWkAQAAAAAAACwAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2J6Mi9iejIuc3R1YnEWAADrT6NpcRYAAIY0C5+kAQAAAAAAAC4AAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL2N1cmwvY3VybC5zdHViE3MBAOtPo2kTcwEA2Pz5gKQBAAAAAAAAOAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvY3VybC9DVVJMU3RyaW5nRmlsZS5zdHVi9AAAAOtPo2n0AAAAGUAaYqQBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvY3VybC9jdXJsX2Quc3R1Yn9OAgDrT6Npf04CAHIuVz+kAQAAAAAAADAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3h4dGVhL3h4dGVhLnN0dWLEAwAA60+jacQDAACwJG7apAEAAAAAAAAsAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9wYW0vcGFtLnN0dWIUBgAA60+jaRQGAABzXTcCpAEAAAAAAAAyAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9icm90bGkvYnJvdGxpLnN0dWLTHQAA60+jadMdAABwPDXKpAEAAAAAAAAuAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9zeW5jL3N5bmMuc3R1Ymk3AADrT6NpaTcAAFZCmemkAQAAAAAAADAAAAB2ZW5kb3IvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL3plbmQvemVuZF9mLnN0dWIuDwAA60+jaS4PAAA20/R4pAEAAAAAAAAwAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy96ZW5kL3plbmRfZC5zdHViAwYAAOtPo2kDBgAAxi18aqQBAAAAAAAALgAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvemVuZC96ZW5kLnN0dWL0WAAA60+jafRYAADYzEINpAEAAAAAAAAqAAAAdmVuZG9yL2pldGJyYWlucy9waHBzdG9ybS1zdHVicy9kcy9kcy5zdHViGaIBAOtPo2kZogEA4lLARaQBAAAAAAAAMAAAAHZlbmRvci9qZXRicmFpbnMvcGhwc3Rvcm0tc3R1YnMvZ2VvaXAvZ2VvaXAuc3R1YhkkAADrT6NpGSQAADYeug+kAQAAAAAAADsAAAB2ZW5kb3IvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvUGFyYWxsZWxpc2F0aW9uUmVzdWx0LnBocKcHAADrT6NppwcAAOzMam6kAQAAAAAAAC8AAAB2ZW5kb3IvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRGlhZ25vc2VyLnBocHsHAADrT6NpewcAAC8PVYGkAQAAAAAAADQAAAB2ZW5kb3IvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvQ3B1Q29yZUNvdW50ZXIucGhwhiEAAOtPo2mGIQAAqrchy6QBAAAAAAAAOgAAAHZlbmRvci9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvQ3B1Q29yZUZpbmRlci5waHAMBAAA60+jaQwEAAAr0ThOpAEAAAAAAAA/AAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9Mc2NwdUxvZ2ljYWxGaW5kZXIucGhwTQQAAOtPo2lNBAAA8KRHE6QBAAAAAAAARAAAAHZlbmRvci9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvQ21pQ21kbGV0UGh5c2ljYWxGaW5kZXIucGhw9wQAAOtPo2n3BAAAXiPPOaQBAAAAAAAAPgAAAHZlbmRvci9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvRW52VmFyaWFibGVGaW5kZXIucGhwwgUAAOtPo2nCBQAAR/D4MqQBAAAAAAAAPQAAAHZlbmRvci9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvTlByb2Nlc3NvckZpbmRlci5waHD/AgAA60+jaf8CAABvi99DpAEAAAAAAAA6AAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9DcHVJbmZvRmluZGVyLnBocB4JAADrT6NpHgkAAKXtZxWkAQAAAAAAADwAAAB2ZW5kb3IvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0h3TG9naWNhbEZpbmRlci5waHB2AwAA60+jaXYDAACk+SsxpAEAAAAAAAA+AAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9fTlByb2Nlc3NvckZpbmRlci5waHD3AgAA60+jafcCAACP2AzFpAEAAAAAAABBAAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9Ta2lwT25PU0ZhbWlseUZpbmRlci5waHCuCAAA60+jaa4IAAABUprMpAEAAAAAAAA/AAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9EdW1teUNwdUNvcmVGaW5kZXIucGhwQQQAAOtPo2lBBAAAzRoqwaQBAAAAAAAASQAAAHZlbmRvci9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvV2luZG93c1JlZ2lzdHJ5TG9naWNhbEZpbmRlci5waHB4BAAA60+jaXgEAAC5lk/3pAEAAAAAAAA/AAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9XbWljUGh5c2ljYWxGaW5kZXIucGhwqwQAAOtPo2mrBAAA/BwN0KQBAAAAAAAAPgAAAHZlbmRvci9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvV21pY0xvZ2ljYWxGaW5kZXIucGhwwAQAAOtPo2nABAAAjddi86QBAAAAAAAAQAAAAHZlbmRvci9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvUHJvY09wZW5CYXNlZEZpbmRlci5waHCBCQAA60+jaYEJAACHyQ3XpAEAAAAAAAA+AAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9OdWxsQ3B1Q29yZUZpbmRlci5waHDZAgAA60+jadkCAAAW8IrspAEAAAAAAAA7AAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9GaW5kZXJSZWdpc3RyeS5waHD9BwAA60+jaf0HAABaqBnxpAEAAAAAAABAAAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9Mc2NwdVBoeXNpY2FsRmluZGVyLnBocHgFAADrT6NpeAUAAMGbPeWkAQAAAAAAAEEAAAB2ZW5kb3IvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL09ubHlPbk9TRmFtaWx5RmluZGVyLnBocLAIAADrT6NpsAgAAJPChsSkAQAAAAAAAEMAAAB2ZW5kb3IvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL09ubHlJblBvd2VyU2hlbGxGaW5kZXIucGhw7AQAAOtPo2nsBAAAq+DJvKQBAAAAAAAAOAAAAHZlbmRvci9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvTlByb2NGaW5kZXIucGhwEQYAAOtPo2kRBgAADfk/baQBAAAAAAAAPQAAAHZlbmRvci9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvSHdQaHlzaWNhbEZpbmRlci5waHB6AwAA60+jaXoDAACZssxopAEAAAAAAABDAAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9DbWlDbWRsZXRMb2dpY2FsRmluZGVyLnBocPAEAADrT6Np8AQAAHqgkgSkAQAAAAAAAD8AAAB2ZW5kb3IvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRXhlY3V0b3IvUHJvY09wZW5FeGVjdXRvci5waHCXBAAA60+jaZcEAAD+GeRrpAEAAAAAAAA+AAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0V4ZWN1dG9yL1Byb2Nlc3NFeGVjdXRvci5waHD2AQAA60+jafYBAAAYaOLzpAEAAAAAAAA9AAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL051bWJlck9mQ3B1Q29yZU5vdEZvdW5kLnBocCQCAADrT6NpJAIAALfQMaekAQAAAAAAAC0AAAB2ZW5kb3IvZmlkcnkvY3B1LWNvcmUtY291bnRlci9iaW4vZXhlY3V0ZS5waHBrAgAA60+jaWsCAACzxgn1pAEAAAAAAAArAAAAdmVuZG9yL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvYmluL3RyYWNlLnBocEIEAADrT6NpQgQAAGV+myikAQAAAAAAAC4AAAB2ZW5kb3IvZmlkcnkvY3B1LWNvcmUtY291bnRlci9iaW4vZGlhZ25vc2UucGhwhgMAAOtPo2mGAwAAi9Y9xaQBAAAAAAAAOAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyQWJzdHJhY3QucGhw6Z4AAOtPo2npngAAhaXBC6QBAAAAAAAANQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvSnNvbkRlY29kZXIucGhwRA0AAOtPo2lEDQAAj0O5RKQBAAAAAAAANQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQ29tbWVudC9Eb2MucGhwaAAAAOtPo2loAAAAkXmnpaQBAAAAAAAASwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZVZpc2l0b3IvTm9kZUNvbm5lY3RpbmdWaXNpdG9yLnBocHQFAADrT6NpdAUAANZrkdqkAQAAAAAAAE0AAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGVWaXNpdG9yL1BhcmVudENvbm5lY3RpbmdWaXNpdG9yLnBocF0DAADrT6NpXQMAAJXwCwCkAQAAAAAAAEIAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGVWaXNpdG9yL05hbWVSZXNvbHZlci5waHCsJgAA60+jaawmAADDNoeNpAEAAAAAAABEAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9DbG9uaW5nVmlzaXRvci5waHD6AQAA60+jafoBAAC/iCFGpAEAAAAAAABEAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9GaW5kaW5nVmlzaXRvci5waHBsBAAA60+jaWwEAADLPSqepAEAAAAAAABJAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9GaXJzdEZpbmRpbmdWaXNpdG9yLnBocNwEAADrT6Np3AQAANnGKwKkAQAAAAAAAC8AAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyLnBocCZbAADrT6NpJlsAAME95SWkAQAAAAAAADkAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL0VtdWxhdGl2ZS5waHDZIgAA60+jadkiAABMUaljpAEAAAAAAABdAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL051bWVyaWNMaXRlcmFsU2VwYXJhdG9yRW11bGF0b3IucGhwZQ4AAOtPo2llDgAATmUXVqQBAAAAAAAAUwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9SZWFkb25seVRva2VuRW11bGF0b3IucGhwWwMAAOtPo2lbAwAAlV8nnqQBAAAAAAAATQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9GblRva2VuRW11bGF0b3IucGhwvAEAAOtPo2m8AQAA+piwS6QBAAAAAAAATwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9BdHRyaWJ1dGVFbXVsYXRvci5waHD2BQAA60+jafYFAAAqtjMQpAEAAAAAAABNAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL1JldmVyc2VFbXVsYXRvci5waHAeBAAA60+jaR4EAACtcLJMpAEAAAAAAABPAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL0VudW1Ub2tlbkVtdWxhdG9yLnBocLoCAADrT6NpugIAACWZZBakAQAAAAAAAFcAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvQ29hbGVzZUVxdWFsVG9rZW5FbXVsYXRvci5waHAaBQAA60+jaRoFAADlViZ6pAEAAAAAAABbAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL1JlYWRvbmx5RnVuY3Rpb25Ub2tlbkVtdWxhdG9yLnBocPMDAADrT6Np8wMAAOJwWJ6kAQAAAAAAAFAAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvTWF0Y2hUb2tlbkVtdWxhdG9yLnBocMUBAADrT6NpxQEAALs2fiWkAQAAAAAAAEsAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvVG9rZW5FbXVsYXRvci5waHBtAgAA60+jaW0CAABtrnpHpAEAAAAAAABTAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL0V4cGxpY2l0T2N0YWxFbXVsYXRvci5waHCwBQAA60+jabAFAACzPGZCpAEAAAAAAABXAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL0ZsZXhpYmxlRG9jU3RyaW5nRW11bGF0b3IucGhwfQkAAOtPo2l9CQAAj06hCaQBAAAAAAAATQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9LZXl3b3JkRW11bGF0b3IucGhw6gYAAOtPo2nqBgAA5Y9JAqQBAAAAAAAAUwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9OdWxsc2FmZVRva2VuRW11bGF0b3IucGhw4gcAAOtPo2niBwAAeJcs9aQBAAAAAAAANAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZUZpbmRlci5waHC1CQAA60+jabUJAAD3dr6apAEAAAAAAABAAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9QcmV0dHlQcmludGVyL1N0YW5kYXJkLnBocNOkAADrT6Np06QAAHe38RakAQAAAAAAADkAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL1BhcnNlci9NdWx0aXBsZS5waHCHBgAA60+jaYcGAAD76EZSpAEAAAAAAAA1AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9QYXJzZXIvUGhwNS5waHC4KwIA60+jabgrAgBQ/6LEpAEAAAAAAAA1AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9QYXJzZXIvUGhwNy5waHDOVAIA60+jac5UAgC8lb5IpAEAAAAAAAA3AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9QYXJzZXIvVG9rZW5zLnBocB4QAADrT6NpHhAAAHnGzlykAQAAAAAAAEYAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0NvbnN0RXhwckV2YWx1YXRpb25FeGNlcHRpb24ucGhwVwAAAOtPo2lXAAAAC8siBqQBAAAAAAAAOgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9Db21wbGV4VHlwZS5waHBDAQAA60+jaUMBAACNC6p5pAEAAAAAAAA5AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTGlzdF8ucGhw1gIAAOtPo2nWAgAAKgaMSaQBAAAAAAAAPgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Nsb3N1cmVVc2UucGhwdwMAAOtPo2l3AwAAcMPfD6QBAAAAAAAAPAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1ZhcmlhYmxlLnBocIUCAADrT6NphQIAACU2YLykAQAAAAAAAEYAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9OdWxsc2FmZU1ldGhvZENhbGwucGhwUwUAAOtPo2lTBQAA5DOKzaQBAAAAAAAAPgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Jvb2xlYW5Ob3QucGhwlwIAAOtPo2mXAgAAwiSTFKQBAAAAAAAAPAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wLnBocNMCAADrT6Np0wIAAECM7sukAQAAAAAAADoAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9QcmVJbmMucGhwewIAAOtPo2l7AgAAwg+pE6QBAAAAAAAAOgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1ByaW50Xy5waHB+AgAA60+jaX4CAAADiD8opAEAAAAAAAA5AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvRXZhbF8ucGhwewIAAOtPo2l7AgAAfv7F5qQBAAAAAAAARwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1N0YXRpY1Byb3BlcnR5RmV0Y2gucGhwBgQAAOtPo2kGBAAAno5NC6QBAAAAAAAAOgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0FycmF5Xy5waHAoAwAA60+jaSgDAAA5M7QnpAEAAAAAAAA6AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvUHJlRGVjLnBocHsCAADrT6NpewIAAEx5MLekAQAAAAAAADsAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Qb3N0RGVjLnBocH4CAADrT6NpfgIAAJDl5UqkAQAAAAAAAD0AAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9ZaWVsZEZyb20ucGhwmAIAAOtPo2mYAgAAaSS0t6QBAAAAAAAAPQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1VuYXJ5UGx1cy5waHCUAgAA60+jaZQCAADVJygepAEAAAAAAAA6AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvWWllbGRfLnBocE4DAADrT6NpTgMAAK6Xb1CkAQAAAAAAADoAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DbG9uZV8ucGhwewIAAOtPo2l7AgAAyQVZh6QBAAAAAAAAOwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1Bvc3RJbmMucGhwfgIAAOtPo2l+AgAA8zT3UaQBAAAAAAAAPAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0luY2x1ZGVfLnBocJIDAADrT6NpkgMAAE/xSqmkAQAAAAAAADgAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DYXN0LnBocDECAADrT6NpMQIAAMHuv2ukAQAAAAAAADsAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DbG9zdXJlLnBocIQKAADrT6NphAoAADynLzWkAQAAAAAAAEEAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9BcnJvd0Z1bmN0aW9uLnBocGgJAADrT6NpaAkAAExsXsWkAQAAAAAAADoAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Jc3NldF8ucGhwfwIAAOtPo2l/AgAA1WnMeKQBAAAAAAAAPQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1NoZWxsRXhlYy5waHCvAgAA60+jaa8CAADBmK5npAEAAAAAAAA+AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTWV0aG9kQ2FsbC5waHA8BQAA60+jaTwFAAA4oP/opAEAAAAAAAA+AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvU3RhdGljQ2FsbC5waHBKBQAA60+jaUoFAACFFPsepAEAAAAAAAA/AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvSW5zdGFuY2VvZl8ucGhwSQMAAOtPo2lJAwAAmz5s16QBAAAAAAAAOgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1Rocm93Xy5waHCYAgAA60+jaZgCAAD81bPFpAEAAAAAAAA6AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTWF0Y2hfLnBocJICAADrT6NpkgIAAHgg1CykAQAAAAAAAD0AAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25SZWYucGhwOAMAAOtPo2k4AwAAkZopHaQBAAAAAAAAPAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wLnBocF8EAADrT6NpXwQAALYTNEGkAQAAAAAAAEMAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DbGFzc0NvbnN0RmV0Y2gucGhw6AMAAOtPo2noAwAAQRl/yqQBAAAAAAAAOgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbi5waHAHAwAA60+jaQcDAAD7Cz0XpAEAAAAAAAA7AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvVGVybmFyeS5waHDeAwAA60+jad4DAADx6pRIpAEAAAAAAABBAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvRXJyb3JTdXBwcmVzcy5waHCUAgAA60+jaZQCAABq+zc3pAEAAAAAAAA+AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvVW5hcnlNaW51cy5waHCKAgAA60+jaYoCAAA5jvmGpAEAAAAAAAA+AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQml0d2lzZU5vdC5waHCKAgAA60+jaYoCAAArMrY4pAEAAAAAAAA4AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTmV3Xy5waHB4BAAA60+jaXgEAABQ7I4HpAEAAAAAAAA8AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvRnVuY0NhbGwucGhwMAQAAOtPo2kwBAAALGZT5KQBAAAAAAAAPgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0NvbnN0RmV0Y2gucGhwqQIAAOtPo2mpAgAAC4dsCqQBAAAAAAAAPQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0FycmF5SXRlbS5waHBpBAAA60+jaWkEAACsAW5UpAEAAAAAAAA8AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2FsbExpa2UucGhwBgQAAOtPo2kGBAAA5HAM0KQBAAAAAAAAOQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Vycm9yLnBocPICAADrT6Np8gIAAIwRyDKkAQAAAAAAAD8AAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DYXN0L0RvdWJsZS5waHCLAQAA60+jaYsBAABrTyPNpAEAAAAAAABAAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2FzdC9TdHJpbmdfLnBocNkAAADrT6Np2QAAAG2jlTOkAQAAAAAAAD8AAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DYXN0L0FycmF5Xy5waHDXAAAA60+jadcAAAA4KUpdpAEAAAAAAAA9AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2FzdC9JbnRfLnBocNMAAADrT6Np0wAAAKnWbz2kAQAAAAAAAEAAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DYXN0L09iamVjdF8ucGhw2QAAAOtPo2nZAAAAYL7DzKQBAAAAAAAAPgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Nhc3QvQm9vbF8ucGhw1QAAAOtPo2nVAAAAZAO9tqQBAAAAAAAAPwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Nhc3QvVW5zZXRfLnBocNcAAADrT6Np1wAAAECXvBikAQAAAAAAADoAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9FbXB0eV8ucGhwfgIAAOtPo2l+AgAA27XW+6QBAAAAAAAAQAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1Bvdy5waHAzAQAA60+jaTMBAACCObRWpAEAAAAAAABEAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvR3JlYXRlci5waHA6AQAA60+jaToBAAD/kL/5pAEAAAAAAABCAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvRXF1YWwucGhwNwEAAOtPo2k3AQAAKKWllKQBAAAAAAAARQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0NvYWxlc2NlLnBocD0BAADrT6NpPQEAAI06/rWkAQAAAAAAAEsAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9HcmVhdGVyT3JFcXVhbC5waHBJAQAA60+jaUkBAACb/pdLpAEAAAAAAABAAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvRGl2LnBocDIBAADrT6NpMgEAAMySq1+kAQAAAAAAAEcAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Cb29sZWFuQW5kLnBocEEBAADrT6NpQQEAAKTrKOqkAQAAAAAAAEcAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Mb2dpY2FsQW5kLnBocEIBAADrT6NpQgEAAP7Yp7mkAQAAAAAAAEYAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Cb29sZWFuT3IucGhwPwEAAOtPo2k/AQAAuyA3MqQBAAAAAAAASQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL05vdElkZW50aWNhbC5waHBGAQAA60+jaUYBAACD2esxpAEAAAAAAABGAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvSWRlbnRpY2FsLnBocEABAADrT6NpQAEAALYZLj+kAQAAAAAAAEcAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9CaXR3aXNlQW5kLnBocEABAADrT6NpQAEAAKJMSwqkAQAAAAAAAEQAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9TbWFsbGVyLnBocDoBAADrT6NpOgEAAEsbr7ukAQAAAAAAAEcAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9CaXR3aXNlWG9yLnBocEABAADrT6NpQAEAAOrdnvqkAQAAAAAAAEIAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9NaW51cy5waHA2AQAA60+jaTYBAACg34kDpAEAAAAAAABLAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvU21hbGxlck9yRXF1YWwucGhwSQEAAOtPo2lJAQAAI66tdKQBAAAAAAAARgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0xvZ2ljYWxPci5waHA/AQAA60+jaT8BAABk+Dt4pAEAAAAAAABBAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvUGx1cy5waHA0AQAA60+jaTQBAAB+aQ8xpAEAAAAAAABAAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvTXVsLnBocDIBAADrT6NpMgEAANlpnmGkAQAAAAAAAEMAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Db25jYXQucGhwOAEAAOtPo2k4AQAAIhzJvKQBAAAAAAAARgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1NoaWZ0TGVmdC5waHA/AQAA60+jaT8BAADRjbWppAEAAAAAAABFAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvTm90RXF1YWwucGhwPQEAAOtPo2k9AQAANXDNNqQBAAAAAAAARgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0JpdHdpc2VPci5waHA+AQAA60+jaT4BAADOl/AwpAEAAAAAAABHAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvU2hpZnRSaWdodC5waHBBAQAA60+jaUEBAADZckwwpAEAAAAAAABHAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvTG9naWNhbFhvci5waHBCAQAA60+jaUIBAACfR7VwpAEAAAAAAABGAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvU3BhY2VzaGlwLnBocEABAADrT6NpQAEAANzGABKkAQAAAAAAAEAAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Nb2QucGhwMgEAAOtPo2kyAQAAMfq0BKQBAAAAAAAAQAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wL1Bvdy5waHDiAAAA60+jaeIAAAAE2nywpAEAAAAAAABFAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvQ29hbGVzY2UucGhw7AAAAOtPo2nsAAAABgdRHaQBAAAAAAAAQAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wL0Rpdi5waHDiAAAA60+jaeIAAABj+r/spAEAAAAAAABHAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvQml0d2lzZUFuZC5waHDwAAAA60+jafAAAACxeAQZpAEAAAAAAABHAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvQml0d2lzZVhvci5waHDwAAAA60+jafAAAAAoIGb2pAEAAAAAAABCAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvTWludXMucGhw5gAAAOtPo2nmAAAAVbqlA6QBAAAAAAAAQQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wL1BsdXMucGhw5AAAAOtPo2nkAAAACwqeQqQBAAAAAAAAQAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wL011bC5waHDiAAAA60+jaeIAAABVI2DJpAEAAAAAAABDAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvQ29uY2F0LnBocOgAAADrT6Np6AAAAJmet7mkAQAAAAAAAEYAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9TaGlmdExlZnQucGhw7gAAAOtPo2nuAAAAd8O66aQBAAAAAAAARgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wL0JpdHdpc2VPci5waHDuAAAA60+jae4AAAAuwInspAEAAAAAAABHAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvU2hpZnRSaWdodC5waHDwAAAA60+jafAAAAA3RoPqpAEAAAAAAABAAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvTW9kLnBocOIAAADrT6Np4gAAAMeS37+kAQAAAAAAAEEAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Qcm9wZXJ0eUZldGNoLnBocL8DAADrT6NpvwMAABLaREekAQAAAAAAAEEAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9BcnJheURpbUZldGNoLnBocD4DAADrT6NpPgMAAAAaAzCkAQAAAAAAADkAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9FeGl0Xy5waHD2AgAA60+jafYCAACByhXopAEAAAAAAABJAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTnVsbHNhZmVQcm9wZXJ0eUZldGNoLnBocNkDAADrT6Np2QMAALQb98SkAQAAAAAAADMAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci5waHCFAAAA60+jaYUAAAA6+aOcpAEAAAAAAAA7AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL051bGxhYmxlVHlwZS5waHDvAgAA60+jae8CAACle9zjpAEAAAAAAAA4AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0F0dHJpYnV0ZS5waHBAAwAA60+jaUADAAAGE7RgpAEAAAAAAAA3AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL01hdGNoQXJtLnBocJYCAADrT6NplgIAAGoscfKkAQAAAAAAAD0AAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL1N0cmluZ18ucGhwWREAAOtPo2lZEQAAsfsyOKQBAAAAAAAARAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvTWFnaWNDb25zdC9EaXIucGhwPQEAAOtPo2k9AQAAKZBH+qQBAAAAAAAARwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvTWFnaWNDb25zdC9NZXRob2QucGhwRgEAAOtPo2lGAQAAEp//M6QBAAAAAAAARQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvTWFnaWNDb25zdC9GaWxlLnBocEABAADrT6NpQAEAANsaZ8KkAQAAAAAAAEoAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvRnVuY3Rpb25fLnBocE0BAADrT6NpTQEAAI5mQaikAQAAAAAAAEUAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvTGluZS5waHBAAQAA60+jaUABAAC1JlEmpAEAAAAAAABHAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9NYWdpY0NvbnN0L0NsYXNzXy5waHBEAQAA60+jaUQBAAArMA2CpAEAAAAAAABHAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9NYWdpY0NvbnN0L1RyYWl0Xy5waHBEAQAA60+jaUQBAABDj4i+pAEAAAAAAABLAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9NYWdpY0NvbnN0L05hbWVzcGFjZV8ucGhwUAEAAOtPo2lQAQAA7gh0GaQBAAAAAAAAPQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvTE51bWJlci5waHBpCgAA60+jaWkKAACk9zH7pAEAAAAAAABIAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9FbmNhcHNlZFN0cmluZ1BhcnQucGhw1gIAAOtPo2nWAgAAF73VnaQBAAAAAAAAPgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvRW5jYXBzZWQucGhwwQIAAOtPo2nBAgAArmQRB6QBAAAAAAAAQAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvTWFnaWNDb25zdC5waHBTAgAA60+jaVMCAAABaQV4pAEAAAAAAAA9AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9ETnVtYmVyLnBocB4IAADrT6NpHggAANle0VSkAQAAAAAAAEIAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvTmFtZS9GdWxseVF1YWxpZmllZC5waHCwBAAA60+jabAEAAAhvtMfpAEAAAAAAAA8AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL05hbWUvUmVsYXRpdmUucGhwrQQAAOtPo2mtBAAAxKeYSqQBAAAAAAAAQAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9WYXJMaWtlSWRlbnRpZmllci5waHAMAgAA60+jaQwCAABU8fwupAEAAAAAAAA7AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0Z1bmN0aW9uTGlrZS5waHDtAgAA60+jae0CAADBLE8ZpAEAAAAAAAA0AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1BhcmFtLnBocHMIAADrT6NpcwgAAGKbkU6kAQAAAAAAADUAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvQ29uc3RfLnBocPQDAADrT6Np9AMAAJvCPNGkAQAAAAAAAD8AAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvSW50ZXJzZWN0aW9uVHlwZS5waHDPAgAA60+jac8CAABhD0StpAEAAAAAAAA9AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0F0dHJpYnV0ZUdyb3VwLnBocJECAADrT6NpkQIAAFVQy1KkAQAAAAAAADgAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvVW5pb25UeXBlLnBocL8CAADrT6NpvwIAANrN6BGkAQAAAAAAADMAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC5waHCFAAAA60+jaYUAAADtRXQxpAEAAAAAAAAyAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0FyZy5waHA5BQAA60+jaTkFAACcW7WBpAEAAAAAAAA7AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvUmV0dXJuXy5waHCnAgAA60+jaacCAACsBDrrpAEAAAAAAAA5AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvQ2FzZV8ucGhwXAMAAOtPo2lcAwAAjVhFdaQBAAAAAAAARgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1RyYWl0VXNlQWRhcHRhdGlvbi5waHAKAQAA60+jaQoBAAAhPKkPpAEAAAAAAAA+AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvSW5saW5lSFRNTC5waHCOAgAA60+jaY4CAACJD2mgpAEAAAAAAAA5AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRW51bV8ucGhwQgYAAOtPo2lCBgAA637wyKQBAAAAAAAAOgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1VzZVVzZS5waHBhBgAA60+jaWEGAAA5Gsk1pAEAAAAAAAA4AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRm9yXy5waHAuBQAA60+jaS4FAABjoBlXpAEAAAAAAAA6AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvQ2F0Y2hfLnBocGUEAADrT6NpZQQAALYjPpqkAQAAAAAAAEAAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9IYWx0Q29tcGlsZXIucGhw9wIAAOtPo2n3AgAAzSApEKQBAAAAAAAAPAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0VudW1DYXNlLnBocJwEAADrT6NpnAQAAIZfOsekAQAAAAAAAEIAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9EZWNsYXJlRGVjbGFyZS5waHCGAwAA60+jaYYDAACf16UxpAEAAAAAAAA7AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvR2xvYmFsXy5waHCoAgAA60+jaagCAACmkhbCpAEAAAAAAAA/AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvQ2xhc3NNZXRob2QucGhweBIAAOtPo2l4EgAApAT7NaQBAAAAAAAAOwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1N3aXRjaF8ucGhwJQMAAOtPo2klAwAA36kSJ6QBAAAAAAAAPQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1N0YXRpY1Zhci5waHCAAwAA60+jaYADAAAk7VVxpAEAAAAAAAA5AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRWxzZV8ucGhwlwIAAOtPo2mXAgAAd0Pe+KQBAAAAAAAAOQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0xhYmVsLnBocNICAADrT6Np0gIAAMrgeWikAQAAAAAAADwAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Qcm9wZXJ0eS5waHClCgAA60+jaaUKAAATwy8MpAEAAAAAAAA4AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvVXNlXy5waHBcBQAA60+jaVwFAAC0fyyupAEAAAAAAAA6AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvV2hpbGVfLnBocDUDAADrT6NpNQMAAN1eP/ekAQAAAAAAADkAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9FY2hvXy5waHCUAgAA60+jaZQCAADIK8/9pAEAAAAAAAA8AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvR3JvdXBVc2UucGhwBwQAAOtPo2kHBAAAv93RIaQBAAAAAAAAOwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0Vsc2VJZl8ucGhwOQMAAOtPo2k5AwAAjnTv8aQBAAAAAAAANwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L05vcC5waHAwAQAA60+jaTABAABjTCDApAEAAAAAAAA6AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvVGhyb3dfLnBocJ4CAADrT6NpngIAAAHnxeSkAQAAAAAAAFEAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9UcmFpdFVzZUFkYXB0YXRpb24vUHJlY2VkZW5jZS5waHBKBAAA60+jaUoEAAA6YKfopAEAAAAAAABMAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvVHJhaXRVc2VBZGFwdGF0aW9uL0FsaWFzLnBocDEFAADrT6NpMQUAAM5RORmkAQAAAAAAAEQAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Qcm9wZXJ0eVByb3BlcnR5LnBocM4DAADrT6NpzgMAALZuv56kAQAAAAAAADcAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9JZl8ucGhwKgUAAOtPo2kqBQAA5H/v/aQBAAAAAAAAPQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NvbnRpbnVlXy5waHDKAgAA60+jacoCAACtVYkRpAEAAAAAAAA7AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvU3RhdGljXy5waHC1AgAA60+jabUCAACF9Ep9pAEAAAAAAAA8AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvVHJ5Q2F0Y2gucGhwKgQAAOtPo2kqBAAAvwqM8qQBAAAAAAAAPQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0Z1bmN0aW9uXy5waHAUCgAA60+jaRQKAADchP5opAEAAAAAAAA6AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvQ29uc3RfLnBocLoCAADrT6NpugIAAEY9ZUykAQAAAAAAADoAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9VbnNldF8ucGhwoAIAAOtPo2mgAgAA62Ml4qQBAAAAAAAAOgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0JyZWFrXy5waHC7AgAA60+jabsCAACIC78gpAEAAAAAAAA5AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvR290b18ucGhw+AIAAOtPo2n4AgAAY2m3iKQBAAAAAAAAPAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0ZpbmFsbHlfLnBocJ8CAADrT6NpnwIAABafWcakAQAAAAAAADwAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9UcmFpdFVzZS5waHCHAwAA60+jaYcDAADCE1FNpAEAAAAAAAA6AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvQ2xhc3NfLnBocHIRAADrT6NpchEAAMKK7gakAQAAAAAAAD0AAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9DbGFzc0xpa2UucGhwHwwAAOtPo2kfDAAAPsH1N6QBAAAAAAAAPAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0ZvcmVhY2hfLnBocF8GAADrT6NpXwYAANsSaICkAQAAAAAAAD4AAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9JbnRlcmZhY2VfLnBocOsEAADrT6Np6wQAAHjAUuCkAQAAAAAAADoAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9UcmFpdF8ucGhwCAQAAOtPo2kIBAAA2HDZL6QBAAAAAAAANwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0RvXy5waHAyAwAA60+jaTIDAACc7T+rpAEAAAAAAAA+AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvTmFtZXNwYWNlXy5waHCwAwAA60+jabADAABGSG9kpAEAAAAAAAA+AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRXhwcmVzc2lvbi5waHDSAgAA60+jadICAAArG1ucpAEAAAAAAAA8AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRGVjbGFyZV8ucGhwdwMAAOtPo2l3AwAAG8YJLKQBAAAAAAAAPgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NsYXNzQ29uc3QucGhw1QkAAOtPo2nVCQAArtVHVaQBAAAAAAAAMwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9OYW1lLnBocBEfAADrT6NpER8AAFbBNbykAQAAAAAAADUAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyLnBocHMAAADrT6NpcwAAAH91UYakAQAAAAAAADkAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvSWRlbnRpZmllci5waHDdBgAA60+jad0GAADCbZB7pAEAAAAAAABCAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1ZhcmlhZGljUGxhY2Vob2xkZXIucGhwigIAAOtPo2mKAgAA0clFDaQBAAAAAAAAOAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlckhlbHBlcnMucGhw+yUAAOtPo2n7JQAAreWLd6QBAAAAAAAAPQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZVZpc2l0b3JBYnN0cmFjdC5waHDlAQAA60+jaeUBAAA4tujzpAEAAAAAAAAxAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Db21tZW50LnBocLcdAADrT6Nptx0AAJ1prvKkAQAAAAAAAEAAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGVUcmF2ZXJzZXJJbnRlcmZhY2UucGhwigIAAOtPo2mKAgAASs/jGKQBAAAAAAAANwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZVRyYXZlcnNlci5waHD6JwAA60+jafonAAD/t4ZrpAEAAAAAAAA/AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9FcnJvckhhbmRsZXIvVGhyb3dpbmcucGhwbgEAAOtPo2luAQAAuFpBTaQBAAAAAAAAQQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvRXJyb3JIYW5kbGVyL0NvbGxlY3RpbmcucGhwfAMAAOtPo2l8AwAA/xCBq6QBAAAAAAAALgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS5waHCDDwAA60+jaYMPAABlyIrUpAEAAAAAAAA2AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9FcnJvckhhbmRsZXIucGhwMgEAAOtPo2kyAQAAF0wQ5aQBAAAAAAAAPgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvSW50ZXJuYWwvVG9rZW5TdHJlYW0ucGhw9SMAAOtPo2n1IwAAKnRZCqQBAAAAAAAAOwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvSW50ZXJuYWwvRGlmZkVsZW0ucGhwLwIAAOtPo2kvAgAAn6vJ86QBAAAAAAAATAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvSW50ZXJuYWwvUHJpbnRhYmxlTmV3QW5vbkNsYXNzTm9kZS5waHB6CAAA60+jaXoIAAA1GzZapAEAAAAAAAA5AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9JbnRlcm5hbC9EaWZmZXIucGhwARMAAOtPo2kBEwAA3yc+O6QBAAAAAAAANwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyRmFjdG9yeS5waHBECwAA60+jaUQLAACWCFOZpAEAAAAAAAAxAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyLnBocNcAAADrT6Np1wAAAAapAxekAQAAAAAAADwAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0NvbnN0RXhwckV2YWx1YXRvci5waHB2JQAA60+jaXYlAACb3MEZpAEAAAAAAAA0AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlRHVtcGVyLnBocFYaAADrT6NpVhoAAOsY4hWkAQAAAAAAAD8AAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL1ByZXR0eVByaW50ZXJBYnN0cmFjdC5waHAQ6QAA60+jaRDpAADCCsQHpAEAAAAAAAAvAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9FcnJvci5waHCwEwAA60+jabATAAAlE2ImpAEAAAAAAAA2AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlQWJzdHJhY3QucGhwfhQAAOtPo2l+FAAAW69Xe6QBAAAAAAAAOAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlckZhY3RvcnkucGhw6SwAAOtPo2npLAAArNRPgqQBAAAAAAAARAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9UcmFpdFVzZUFkYXB0YXRpb24ucGhwYhAAAOtPo2liEAAA6GG7taQBAAAAAAAANwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9FbnVtXy5waHBnCwAA60+jaWcLAAAMa2/DpAEAAAAAAAA6AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL0VudW1DYXNlLnBocC4HAADrT6NpLgcAANYopMCkAQAAAAAAADoAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvUHJvcGVydHkucGhwPA8AAOtPo2k8DwAATBsEtqQBAAAAAAAANgAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9Vc2VfLnBocLcEAADrT6NptwQAAAZpeEykAQAAAAAAADgAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvTWV0aG9kLnBocHsOAADrT6Npew4AAGEsOyOkAQAAAAAAAD4AAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvRnVuY3Rpb25MaWtlLnBocOQGAADrT6Np5AYAAPC+zhSkAQAAAAAAADcAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvUGFyYW0ucGhwWxAAAOtPo2lbEAAAXPpQNaQBAAAAAAAAOwAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9GdW5jdGlvbl8ucGhwMQYAAOtPo2kxBgAAKNJqTKQBAAAAAAAAPQAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9EZWNsYXJhdGlvbi5waHDFAwAA60+jacUDAAA/GHt/pAEAAAAAAAA6AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL1RyYWl0VXNlLnBocC8GAADrT6NpLwYAAEeciuOkAQAAAAAAADgAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvQ2xhc3NfLnBocIoOAADrT6Npig4AANzq8aekAQAAAAAAADwAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvSW50ZXJmYWNlXy5waHCrCQAA60+jaasJAAB32+YepAEAAAAAAAA4AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL1RyYWl0Xy5waHDBBwAA60+jacEHAACP2zbbpAEAAAAAAAA8AAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL05hbWVzcGFjZV8ucGhwJQQAAOtPo2klBAAAl4a7tKQBAAAAAAAAPAAAAHZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9DbGFzc0NvbnN0LnBocLUOAADrT6NptQ4AAMW8jDCkAQAAAAAAADUAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGVWaXNpdG9yLnBocP4HAADrT6Np/gcAAFnAz/SkAQAAAAAAADUAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05hbWVDb250ZXh0LnBocPElAADrT6Np8SUAAHxtHKWkAQAAAAAAADAAAAB2ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL1BhcnNlci5waHCBAgAA60+jaYECAAC6QzLTpAEAAAAAAAAfAAAAdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvTElDRU5TRfAFAADrT6Np8AUAAKXklCqkAQAAAAAAAB4AAAB2ZW5kb3IvaG9hL3VzdHJpbmcvVXN0cmluZy5waHDQZQAA60+jadBlAAAL95KapAEAAAAAAAAhAAAAdmVuZG9yL2hvYS91c3RyaW5nL0Jpbi9Ub2NvZGUucGhw8QwAAOtPo2nxDAAAwbWv5KQBAAAAAAAAIwAAAHZlbmRvci9ob2EvdXN0cmluZy9CaW4vRnJvbWNvZGUucGhw3QwAAOtPo2ndDAAAO65tGaQBAAAAAAAALQAAAHZlbmRvci9ob2EvdXN0cmluZy9Eb2N1bWVudGF0aW9uL0ZyL0luZGV4Lnh5bEVuAADrT6NpRW4AABX5RnCkAQAAAAAAAC0AAAB2ZW5kb3IvaG9hL3VzdHJpbmcvRG9jdW1lbnRhdGlvbi9Fbi9JbmRleC54eWweaAAA60+jaR5oAAC/uXYPpAEAAAAAAAAdAAAAdmVuZG9yL2hvYS91c3RyaW5nL1NlYXJjaC5waHAMDgAA60+jaQwOAADj6R4MpAEAAAAAAAAgAAAAdmVuZG9yL2hvYS91c3RyaW5nL0V4Y2VwdGlvbi5waHCIBwAA60+jaYgHAABQgaRSpAEAAAAAAAAbAAAAdmVuZG9yL2hvYS9yZWdleC9HcmFtbWFyLnBwCRoAAOtPo2kJGgAAQQBMsqQBAAAAAAAAHgAAAHZlbmRvci9ob2EvcmVnZXgvRXhjZXB0aW9uLnBocIQHAADrT6NphAcAABogpYWkAQAAAAAAACYAAAB2ZW5kb3IvaG9hL3JlZ2V4L1Zpc2l0b3IvSXNvdHJvcGljLnBocD4kAADrT6NpPiQAAENJZDukAQAAAAAAAB4AAAB2ZW5kb3IvaG9hL2V4Y2VwdGlvbi9Hcm91cC5waHBaGgAA60+jaVoaAACuZr4kpAEAAAAAAAAgAAAAdmVuZG9yL2hvYS9leGNlcHRpb24vUEFUQ0hFUy50eHSsAAAA60+jaawAAAD8YG9upAEAAAAAAAAiAAAAdmVuZG9yL2hvYS9leGNlcHRpb24vRXhjZXB0aW9uLnBocE8MAADrT6NpTwwAAO3+ER6kAQAAAAAAAB0AAAB2ZW5kb3IvaG9hL2V4Y2VwdGlvbi9JZGxlLnBocOseAADrT6Np6x4AAMCyPeykAQAAAAAAAB4AAAB2ZW5kb3IvaG9hL2V4Y2VwdGlvbi9FcnJvci5waHBIDAAA60+jaUgMAAAqYvMmpAEAAAAAAAAcAAAAdmVuZG9yL2hvYS92aXNpdG9yL1Zpc2l0LnBocKoIAADrT6NpqggAAPrlsjWkAQAAAAAAAB4AAAB2ZW5kb3IvaG9hL3Zpc2l0b3IvRWxlbWVudC5waHCnCAAA60+jaacIAACfZcxipAEAAAAAAAAdAAAAdmVuZG9yL2hvYS9maWxlL0xpbmsvTGluay5waHBSEwAA60+jaVITAACfTfLtpAEAAAAAAAAeAAAAdmVuZG9yL2hvYS9maWxlL0xpbmsvV3JpdGUucGhwtxgAAOtPo2m3GAAA8xJHAKQBAAAAAAAAIgAAAHZlbmRvci9ob2EvZmlsZS9MaW5rL1JlYWRXcml0ZS5waHDYIgAA60+jadgiAAD4w/XNpAEAAAAAAAAdAAAAdmVuZG9yL2hvYS9maWxlL0xpbmsvUmVhZC5waHBQFwAA60+jaVAXAACpWDw2pAEAAAAAAAAnAAAAdmVuZG9yL2hvYS9maWxlL0V4Y2VwdGlvbi9FeGNlcHRpb24ucGhw9QcAAOtPo2n1BwAAVeWilaQBAAAAAAAALgAAAHZlbmRvci9ob2EvZmlsZS9FeGNlcHRpb24vRmlsZURvZXNOb3RFeGlzdC5waHCNBwAA60+jaY0HAABLwmmGpAEAAAAAAAAdAAAAdmVuZG9yL2hvYS9maWxlL0RpcmVjdG9yeS5waHDpHQAA60+jaekdAAC+VpodpAEAAAAAAAAbAAAAdmVuZG9yL2hvYS9maWxlL0dlbmVyaWMucGhwNDQAAOtPo2k0NAAAVwNcL6QBAAAAAAAAGQAAAHZlbmRvci9ob2EvZmlsZS9Xcml0ZS5waHAOGQAA60+jaQ4ZAAD2kzBNpAEAAAAAAAAaAAAAdmVuZG9yL2hvYS9maWxlL0ZpbmRlci5waHAlRAAA60+jaSVEAADBxt6QpAEAAAAAAAAdAAAAdmVuZG9yL2hvYS9maWxlL1JlYWRXcml0ZS5waHDNIgAA60+jac0iAACh67vzpAEAAAAAAAAYAAAAdmVuZG9yL2hvYS9maWxlL0ZpbGUucGhwtCUAAOtPo2m0JQAAEVcdDaQBAAAAAAAAGwAAAHZlbmRvci9ob2EvZmlsZS9QQVRDSEVTLnR4dMsAAADrT6NpywAAAJGknimkAQAAAAAAABsAAAB2ZW5kb3IvaG9hL2ZpbGUvV2F0Y2hlci5waHCKEAAA60+jaYoQAADEi3aSpAEAAAAAAAAfAAAAdmVuZG9yL2hvYS9maWxlL1NwbEZpbGVJbmZvLnBocAIMAADrT6NpAgwAAOdSS/GkAQAAAAAAABgAAAB2ZW5kb3IvaG9hL2ZpbGUvUmVhZC5waHBBFwAA60+jaUEXAADQDpckpAEAAAAAAAAjAAAAdmVuZG9yL2hvYS9maWxlL1RlbXBvcmFyeS9Xcml0ZS5waHAOGQAA60+jaQ4ZAABGNv6LpAEAAAAAAAAnAAAAdmVuZG9yL2hvYS9maWxlL1RlbXBvcmFyeS9SZWFkV3JpdGUucGhw+yIAAOtPo2n7IgAAn4Lr9KQBAAAAAAAAJwAAAHZlbmRvci9ob2EvZmlsZS9UZW1wb3JhcnkvVGVtcG9yYXJ5LnBocPMRAADrT6Np8xEAADCwOQSkAQAAAAAAACIAAAB2ZW5kb3IvaG9hL2ZpbGUvVGVtcG9yYXJ5L1JlYWQucGhwbRcAAOtPo2ltFwAA9t0zEqQBAAAAAAAAGwAAAHZlbmRvci9ob2EvZXZlbnQvQnVja2V0LnBocEQNAADrT6NpRA0AADR14SqkAQAAAAAAAB8AAAB2ZW5kb3IvaG9hL2V2ZW50L0xpc3RlbmFibGUucGhwhwgAAOtPo2mHCAAA85NHT6QBAAAAAAAAHAAAAHZlbmRvci9ob2EvZXZlbnQvTGlzdGVucy5waHDOCwAA60+jac4LAADQIxd2pAEAAAAAAAAaAAAAdmVuZG9yL2hvYS9ldmVudC9FdmVudC5waHADHAAA60+jaQMcAABHznXMpAEAAAAAAAAeAAAAdmVuZG9yL2hvYS9ldmVudC9FeGNlcHRpb24ucGhwhAcAAOtPo2mEBwAA2B3NPaQBAAAAAAAAGwAAAHZlbmRvci9ob2EvZXZlbnQvU291cmNlLnBocF8HAADrT6NpXwcAANXxmvikAQAAAAAAAB0AAAB2ZW5kb3IvaG9hL2V2ZW50L0xpc3RlbmVyLnBocNQTAADrT6Np1BMAAIn2nt2kAQAAAAAAACIAAAB2ZW5kb3IvaG9hL2NvbnNpc3RlbmN5L1ByZWx1ZGUucGhwGw8AAOtPo2kbDwAAWWDxaaQBAAAAAAAAJQAAAHZlbmRvci9ob2EvY29uc2lzdGVuY3kvQXV0b2xvYWRlci5waHBhHQAA60+jaWEdAADB3xT0pAEAAAAAAAAmAAAAdmVuZG9yL2hvYS9jb25zaXN0ZW5jeS9Db25zaXN0ZW5jeS5waHB+IAAA60+jaX4gAACBGZNKpAEAAAAAAAAkAAAAdmVuZG9yL2hvYS9jb25zaXN0ZW5jeS9YY2FsbGFibGUucGhwdCAAAOtPo2l0IAAAdKXg96QBAAAAAAAAIgAAAHZlbmRvci9ob2EvY29uc2lzdGVuY3kvUEFUQ0hFUy50eHSzAAAA60+jabMAAAAab1Y/pAEAAAAAAAAkAAAAdmVuZG9yL2hvYS9jb25zaXN0ZW5jeS9FeGNlcHRpb24ucGhwkAcAAOtPo2mQBwAA4m3ZWKQBAAAAAAAALgAAAHZlbmRvci9ob2EvY29tcGlsZXIvRXhjZXB0aW9uL0lsbGVnYWxUb2tlbi5waHCICgAA60+jaYgKAABFVyCepAEAAAAAAAAnAAAAdmVuZG9yL2hvYS9jb21waWxlci9FeGNlcHRpb24vTGV4ZXIucGhwhwcAAOtPo2mHBwAAssn6jKQBAAAAAAAAPQAAAHZlbmRvci9ob2EvY29tcGlsZXIvRXhjZXB0aW9uL0ZpbmFsU3RhdGVIYXNOb3RCZWVuUmVhY2hlZC5waHCzBwAA60+jabMHAAD1YnPPpAEAAAAAAAArAAAAdmVuZG9yL2hvYS9jb21waWxlci9FeGNlcHRpb24vRXhjZXB0aW9uLnBocAsIAADrT6NpCwgAAOw/sJ+kAQAAAAAAADEAAAB2ZW5kb3IvaG9hL2NvbXBpbGVyL0V4Y2VwdGlvbi9VbmV4cGVjdGVkVG9rZW4ucGhwtQcAAOtPo2m1BwAA+qkvpKQBAAAAAAAAMwAAAHZlbmRvci9ob2EvY29tcGlsZXIvRXhjZXB0aW9uL1VucmVjb2duaXplZFRva2VuLnBocJIKAADrT6NpkgoAAHcVCNikAQAAAAAAACYAAAB2ZW5kb3IvaG9hL2NvbXBpbGVyL0V4Y2VwdGlvbi9SdWxlLnBocJwHAADrT6NpnAcAADWGPECkAQAAAAAAAB4AAAB2ZW5kb3IvaG9hL2NvbXBpbGVyL0Jpbi9QcC5waHC+GwAA60+jab4bAAASJaXrpAEAAAAAAAAuAAAAdmVuZG9yL2hvYS9jb21waWxlci9Eb2N1bWVudGF0aW9uL0ZyL0luZGV4Lnh5bHT5AADrT6NpdPkAAJlFFAakAQAAAAAAAC4AAAB2ZW5kb3IvaG9hL2NvbXBpbGVyL0RvY3VtZW50YXRpb24vRW4vSW5kZXgueHls/OcAAOtPo2n85wAABoxkL6QBAAAAAAAAHwAAAHZlbmRvci9ob2EvY29tcGlsZXIvUEFUQ0hFUy50eHQ7AQAA60+jaTsBAADFVHOapAEAAAAAAAAhAAAAdmVuZG9yL2hvYS9jb21waWxlci9MbGsvTGV4ZXIucGhwyB4AAOtPo2nIHgAAfAOeT6QBAAAAAAAAHgAAAHZlbmRvci9ob2EvY29tcGlsZXIvTGxrL0xsay5wcNELAADrT6Np0QsAABJHcr6kAQAAAAAAACQAAAB2ZW5kb3IvaG9hL2NvbXBpbGVyL0xsay9UcmVlTm9kZS5waHB/HAAA60+jaX8cAABJQ1zbpAEAAAAAAAA1AAAAdmVuZG9yL2hvYS9jb21waWxlci9MbGsvU2FtcGxlci9Cb3VuZGVkRXhoYXVzdGl2ZS5waHCwJgAA60+jabAmAABV7wZvpAEAAAAAAAArAAAAdmVuZG9yL2hvYS9jb21waWxlci9MbGsvU2FtcGxlci9Vbmlmb3JtLnBocLUiAADrT6NptSIAABTd/7ukAQAAAAAAACsAAAB2ZW5kb3IvaG9hL2NvbXBpbGVyL0xsay9TYW1wbGVyL1NhbXBsZXIucGhw3hcAAOtPo2neFwAAa808KqQBAAAAAAAALAAAAHZlbmRvci9ob2EvY29tcGlsZXIvTGxrL1NhbXBsZXIvQ292ZXJhZ2UucGhwe0YAAOtPo2l7RgAAgxxDQ6QBAAAAAAAALQAAAHZlbmRvci9ob2EvY29tcGlsZXIvTGxrL1NhbXBsZXIvRXhjZXB0aW9uLnBocJYHAADrT6NplgcAAKkEgWukAQAAAAAAACcAAAB2ZW5kb3IvaG9hL2NvbXBpbGVyL0xsay9SdWxlL0Nob2ljZS5waHBlBwAA60+jaWUHAAC9T+GZpAEAAAAAAAAmAAAAdmVuZG9yL2hvYS9jb21waWxlci9MbGsvUnVsZS9Fa3ppdC5waHBvBwAA60+jaW8HAABW4hZ8pAEAAAAAAAArAAAAdmVuZG9yL2hvYS9jb21waWxlci9MbGsvUnVsZS9SZXBldGl0aW9uLnBocOEMAADrT6Np4QwAABRUMSakAQAAAAAAACYAAAB2ZW5kb3IvaG9hL2NvbXBpbGVyL0xsay9SdWxlL0VudHJ5LnBocGgHAADrT6NpaAcAAM7aK82kAQAAAAAAAC4AAAB2ZW5kb3IvaG9hL2NvbXBpbGVyL0xsay9SdWxlL0NvbmNhdGVuYXRpb24ucGhwegcAAOtPo2l6BwAAFV9vUKQBAAAAAAAAJgAAAHZlbmRvci9ob2EvY29tcGlsZXIvTGxrL1J1bGUvVG9rZW4ucGhwPRcAAOtPo2k9FwAAtWnLL6QBAAAAAAAAKQAAAHZlbmRvci9ob2EvY29tcGlsZXIvTGxrL1J1bGUvQW5hbHl6ZXIucGhwIjQAAOtPo2kiNAAA//R4RqQBAAAAAAAAJQAAAHZlbmRvci9ob2EvY29tcGlsZXIvTGxrL1J1bGUvUnVsZS5waHAiGQAA60+jaSIZAADXaGc3pAEAAAAAAAArAAAAdmVuZG9yL2hvYS9jb21waWxlci9MbGsvUnVsZS9JbnZvY2F0aW9uLnBocEwPAADrT6NpTA8AAMvG4ZmkAQAAAAAAAB8AAAB2ZW5kb3IvaG9hL2NvbXBpbGVyL0xsay9MbGsucGhwhS4AAOtPo2mFLgAAmCaSAqQBAAAAAAAAIgAAAHZlbmRvci9ob2EvY29tcGlsZXIvTGxrL1BhcnNlci5waHAKUQAA60+jaQpRAAC0SoAopAEAAAAAAAAkAAAAdmVuZG9yL2hvYS9jb21waWxlci9WaXNpdG9yL0R1bXAucGhwPw0AAOtPo2k/DQAATL7miqQBAAAAAAAAGwAAAHZlbmRvci9ob2EvY29tcGlsZXIvTGwxLnBocGBrAADrT6NpYGsAAAToMZOkAQAAAAAAAB8AAAB2ZW5kb3IvaG9hL3Byb3RvY29sL1dyYXBwZXIucGhwJkYAAOtPo2kmRgAAWw1aQ6QBAAAAAAAAIwAAAHZlbmRvci9ob2EvcHJvdG9jb2wvQmluL1Jlc29sdmUucGhwoxIAAOtPo2mjEgAAQaOpTaQBAAAAAAAAIQAAAHZlbmRvci9ob2EvcHJvdG9jb2wvTm9kZS9Ob2RlLnBocNImAADrT6Np0iYAAAfm4HqkAQAAAAAAACQAAAB2ZW5kb3IvaG9hL3Byb3RvY29sL05vZGUvTGlicmFyeS5waHCtDAAA60+jaa0MAADBvDcZpAEAAAAAAAAgAAAAdmVuZG9yL2hvYS9wcm90b2NvbC9Qcm90b2NvbC5waHAcGAAA60+jaRwYAACdSNoRpAEAAAAAAAAfAAAAdmVuZG9yL2hvYS9wcm90b2NvbC9QQVRDSEVTLnR4dM4AAADrT6NpzgAAAL+16lCkAQAAAAAAACEAAAB2ZW5kb3IvaG9hL3Byb3RvY29sL0V4Y2VwdGlvbi5waHCKBwAA60+jaYoHAAA2mM5cpAEAAAAAAAAmAAAAdmVuZG9yL2hvYS96Zm9ybWF0L1BhcmFtZXRlcml6YWJsZS5waHDoBwAA60+jaegHAADqS27hpAEAAAAAAAAgAAAAdmVuZG9yL2hvYS96Zm9ybWF0L1BhcmFtZXRlci5waHAaRwAA60+jaRpHAAD9nD/3pAEAAAAAAAAgAAAAdmVuZG9yL2hvYS96Zm9ybWF0L0V4Y2VwdGlvbi5waHCIBwAA60+jaYgHAAASTqRmpAEAAAAAAAAiAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9Mb29rYmVoaW5kLnBocDQQAADrT6NpNBAAAOyNKjSkAQAAAAAAAB4AAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL0FwcGVuZC5waHBeBwAA60+jaV4HAADD2XtGpAEAAAAAAAArAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9SZWN1cnNpdmUvRGlyZWN0b3J5LnBocMkRAADrT6NpyREAADaBRlmkAQAAAAAAACsAAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL1JlY3Vyc2l2ZS9SZWN1cnNpdmUucGhw6QcAAOtPo2npBwAAWnIKuaQBAAAAAAAAKAAAAHZlbmRvci9ob2EvaXRlcmF0b3IvUmVjdXJzaXZlL0ZpbHRlci5waHCNBwAA60+jaY0HAAC489KFpAEAAAAAAAAwAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9SZWN1cnNpdmUvQ2FsbGJhY2tGaWx0ZXIucGhwpAcAAOtPo2mkBwAAnfgfnKQBAAAAAAAAJgAAAHZlbmRvci9ob2EvaXRlcmF0b3IvUmVjdXJzaXZlL01vY2sucGhwbw4AAOtPo2lvDgAAsZ7Ld6QBAAAAAAAAKgAAAHZlbmRvci9ob2EvaXRlcmF0b3IvUmVjdXJzaXZlL0l0ZXJhdG9yLnBocIwHAADrT6NpjAcAAKqQ2nOkAQAAAAAAADMAAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL1JlY3Vyc2l2ZS9SZWd1bGFyRXhwcmVzc2lvbi5waHDuDwAA60+jae4PAAB/bNaypAEAAAAAAAAlAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9SZWN1cnNpdmUvTWFwLnBocHwHAADrT6NpfAcAAFAXWDqkAQAAAAAAACEAAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL0RpcmVjdG9yeS5waHAQDgAA60+jaRAOAAAGoPB+pAEAAAAAAAAhAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9BZ2dyZWdhdGUucGhwdgcAAOtPo2l2BwAAFNfny6QBAAAAAAAAIAAAAHZlbmRvci9ob2EvaXRlcmF0b3IvTm9SZXdpbmQucGhwZgcAAOtPo2lmBwAAN1ovfaQBAAAAAAAAIAAAAHZlbmRvci9ob2EvaXRlcmF0b3IvTXVsdGlwbGUucGhwvwsAAOtPo2m/CwAAAfrSIKQBAAAAAAAAIgAAAHZlbmRvci9ob2EvaXRlcmF0b3IvRmlsZVN5c3RlbS5waHDrCwAA60+jaesLAADrs+8QpAEAAAAAAAAfAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9Db3VudGVyLnBocKIOAADrT6Npog4AAN421Z+kAQAAAAAAAB4AAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL0J1ZmZlci5waHDYFQAA60+jadgVAADQTXTKpAEAAAAAAAAcAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9HbG9iLnBocFYHAADrT6NpVgcAALPHu5ukAQAAAAAAAB4AAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL0ZpbHRlci5waHBnBwAA60+jaWcHAABpENK7pAEAAAAAAAAmAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9DYWxsYmFja0ZpbHRlci5waHB+BwAA60+jaX4HAACxTByRpAEAAAAAAAAcAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9Nb2NrLnBocFgHAADrT6NpWAcAABZ/fCGkAQAAAAAAACEAAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL0xvb2thaGVhZC5waHBxEQAA60+jaXERAADOzV+rpAEAAAAAAAAfAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9QQVRDSEVTLnR4dNIAAADrT6Np0gAAALyAyzKkAQAAAAAAACEAAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL0V4Y2VwdGlvbi5waHCKBwAA60+jaYoHAACyPtdUpAEAAAAAAAAgAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9SZXBlYXRlci5waHA1EAAA60+jaTUQAADScc3lpAEAAAAAAAApAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9DYWxsYmFja0dlbmVyYXRvci5waHDcDAAA60+jadwMAAA2SKI5pAEAAAAAAAAlAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9EZW11bHRpcGxleGVyLnBocOcOAADrT6Np5w4AADogyyukAQAAAAAAACAAAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL0l0ZXJhdG9yLnBocLoHAADrT6NpugcAAJMiBcCkAQAAAAAAACAAAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL0luZmluaXRlLnBocGYHAADrT6NpZgcAAMcdqiqkAQAAAAAAACAAAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL1NlZWthYmxlLnBocHEHAADrT6NpcQcAAID34NekAQAAAAAAAB0AAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL0xpbWl0LnBocFoHAADrT6NpWgcAAJYheCOkAQAAAAAAACMAAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL1NwbEZpbGVJbmZvLnBocGgOAADrT6NpaA4AAKBv/mykAQAAAAAAACkAAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL1JlZ3VsYXJFeHByZXNzaW9uLnBocNwhAADrT6Np3CEAAF5JdZykAQAAAAAAAB0AAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL091dGVyLnBocGYHAADrT6NpZgcAAIvxvbKkAQAAAAAAABsAAAB2ZW5kb3IvaG9hL2l0ZXJhdG9yL01hcC5waHBWBwAA60+jaVYHAACVj+p3pAEAAAAAAAAoAAAAdmVuZG9yL2hvYS9pdGVyYXRvci9JdGVyYXRvckl0ZXJhdG9yLnBocHYHAADrT6NpdgcAAGnDgyOkAQAAAAAAABwAAAB2ZW5kb3IvaG9hL3N0cmVhbS9CdWNrZXQucGhwgBgAAOtPo2mAGAAAZRbP7aQBAAAAAAAAJQAAAHZlbmRvci9ob2Evc3RyZWFtL1dyYXBwZXIvV3JhcHBlci5waHDqEAAA60+jaeoQAACtTJxRpAEAAAAAAAAvAAAAdmVuZG9yL2hvYS9zdHJlYW0vV3JhcHBlci9JV3JhcHBlci9JV3JhcHBlci5waHDXCAAA60+jadcIAAChP7cbpAEAAAAAAAArAAAAdmVuZG9yL2hvYS9zdHJlYW0vV3JhcHBlci9JV3JhcHBlci9GaWxlLnBocO8WAADrT6Np7xYAAN2JPbOkAQAAAAAAAC0AAAB2ZW5kb3IvaG9hL3N0cmVhbS9XcmFwcGVyL0lXcmFwcGVyL1N0cmVhbS5waHAwKAAA60+jaTAoAABf2c9TpAEAAAAAAAAnAAAAdmVuZG9yL2hvYS9zdHJlYW0vV3JhcHBlci9FeGNlcHRpb24ucGhwhAcAAOtPo2mEBwAAEQFYZaQBAAAAAAAAHwAAAHZlbmRvci9ob2Evc3RyZWFtL0NvbXBvc2l0ZS5waHCqCwAA60+jaaoLAAC5wq9+pAEAAAAAAAAdAAAAdmVuZG9yL2hvYS9zdHJlYW0vQ29udGV4dC5waHBlEAAA60+jaWUQAAAdbHDhpAEAAAAAAAAmAAAAdmVuZG9yL2hvYS9zdHJlYW0vSVN0cmVhbS9Mb2NrYWJsZS5waHBoCgAA60+jaWgKAADnwZqspAEAAAAAAAAhAAAAdmVuZG9yL2hvYS9zdHJlYW0vSVN0cmVhbS9PdXQucGhwuw0AAOtPo2m7DQAAp8efzqQBAAAAAAAAKAAAAHZlbmRvci9ob2Evc3RyZWFtL0lTdHJlYW0vU3RydWN0dXJhbC5waHARDgAA60+jaREOAACxuXF+pAEAAAAAAAAnAAAAdmVuZG9yL2hvYS9zdHJlYW0vSVN0cmVhbS9Ub3VjaGFibGUucGhwpxEAAOtPo2mnEQAAEi02taQBAAAAAAAAJgAAAHZlbmRvci9ob2Evc3RyZWFtL0lTdHJlYW0vUGF0aGFibGUucGhwcwgAAOtPo2lzCAAASRw376QBAAAAAAAAIAAAAHZlbmRvci9ob2Evc3RyZWFtL0lTdHJlYW0vSW4ucGhwbg4AAOtPo2luDgAAFtlUCqQBAAAAAAAAKAAAAHZlbmRvci9ob2Evc3RyZWFtL0lTdHJlYW0vQnVmZmVyYWJsZS5waHDmCgAA60+jaeYKAABZE9lxpAEAAAAAAAAkAAAAdmVuZG9yL2hvYS9zdHJlYW0vSVN0cmVhbS9TdHJlYW0ucGhwvQcAAOtPo2m9BwAAZxTUFKQBAAAAAAAAJwAAAHZlbmRvci9ob2Evc3RyZWFtL0lTdHJlYW0vUG9pbnRhYmxlLnBocA8LAADrT6NpDwsAAL4EZ3GkAQAAAAAAACYAAAB2ZW5kb3IvaG9hL3N0cmVhbS9JU3RyZWFtL1N0YXRhYmxlLnBocJENAADrT6NpkQ0AAGnj28CkAQAAAAAAABwAAAB2ZW5kb3IvaG9hL3N0cmVhbS9TdHJlYW0ucGhw20EAAOtPo2nbQQAAXRKi+KQBAAAAAAAAHQAAAHZlbmRvci9ob2Evc3RyZWFtL1BBVENIRVMudHh0rgAAAOtPo2muAAAAkhphUaQBAAAAAAAAHwAAAHZlbmRvci9ob2Evc3RyZWFtL0V4Y2VwdGlvbi5waHCGBwAA60+jaYYHAABlM52YpAEAAAAAAAApAAAAdmVuZG9yL2hvYS9zdHJlYW0vRmlsdGVyL0xhdGVDb21wdXRlZC5waHBjEAAA60+jaWMQAAA05UcCpAEAAAAAAAAiAAAAdmVuZG9yL2hvYS9zdHJlYW0vRmlsdGVyL0Jhc2ljLnBocLoXAADrT6NpuhcAABu5snikAQAAAAAAACMAAAB2ZW5kb3IvaG9hL3N0cmVhbS9GaWx0ZXIvRmlsdGVyLnBocMcbAADrT6NpxxsAAFkmyDqkAQAAAAAAACYAAAB2ZW5kb3IvaG9hL3N0cmVhbS9GaWx0ZXIvRXhjZXB0aW9uLnBocIIHAADrT6NpggcAAMcdCPSkAQAAAAAAAC0AAAB2ZW5kb3IvaG9hL21hdGgvRXhjZXB0aW9uL1Vua25vd25Db25zdGFudC5waHCLBwAA60+jaYsHAADbcfijpAEAAAAAAAAtAAAAdmVuZG9yL2hvYS9tYXRoL0V4Y2VwdGlvbi9Vbmtub3duRnVuY3Rpb24ucGhwiwcAAOtPo2mLBwAAArnkkqQBAAAAAAAAJwAAAHZlbmRvci9ob2EvbWF0aC9FeGNlcHRpb24vRXhjZXB0aW9uLnBocPUHAADrT6Np9QcAANENvr+kAQAAAAAAAC0AAAB2ZW5kb3IvaG9hL21hdGgvRXhjZXB0aW9uL1Vua25vd25WYXJpYWJsZS5waHCLBwAA60+jaYsHAAC9FMIqpAEAAAAAAAA0AAAAdmVuZG9yL2hvYS9tYXRoL0V4Y2VwdGlvbi9BbHJlYWR5RGVmaW5lZENvbnN0YW50LnBocJIHAADrT6NpkgcAAITHPZqkAQAAAAAAAB0AAAB2ZW5kb3IvaG9hL21hdGgvQXJpdGhtZXRpYy5wcJYKAADrT6NplgoAAA+mndmkAQAAAAAAABsAAAB2ZW5kb3IvaG9hL21hdGgvQ29udGV4dC5waHAOIAAA60+jaQ4gAABKL5mHpAEAAAAAAAAcAAAAdmVuZG9yL2hvYS9tYXRoL0Jpbi9DYWxjLnBocLYVAADrT6NpthUAAK8mg36kAQAAAAAAACIAAAB2ZW5kb3IvaG9hL21hdGgvU2FtcGxlci9SYW5kb20ucGhw9gsAAOtPo2n2CwAAUOgcJaQBAAAAAAAAIwAAAHZlbmRvci9ob2EvbWF0aC9TYW1wbGVyL1NhbXBsZXIucGhwIRkAAOtPo2khGQAAHotNrqQBAAAAAAAAMwAAAHZlbmRvci9ob2EvbWF0aC9Db21iaW5hdG9yaWNzL0NvbWJpbmF0aW9uL0dhbW1hLnBocD8SAADrT6NpPxIAAK3T8sqkAQAAAAAAAD4AAAB2ZW5kb3IvaG9hL21hdGgvQ29tYmluYXRvcmljcy9Db21iaW5hdGlvbi9DYXJ0ZXNpYW5Qcm9kdWN0LnBocIITAADrT6NpghMAAOqs6Q+kAQAAAAAAADkAAAB2ZW5kb3IvaG9hL21hdGgvQ29tYmluYXRvcmljcy9Db21iaW5hdGlvbi9Db21iaW5hdGlvbi5waHCiDAAA60+jaaIMAAAICbdLpAEAAAAAAAAtAAAAdmVuZG9yL2hvYS9tYXRoL0NvbWJpbmF0b3JpY3MvQXJyYW5nZW1lbnQucGhwCAAAAOtPo2kIAAAAc1mZN6QBAAAAAAAAKgAAAHZlbmRvci9ob2EvbWF0aC9Db21iaW5hdG9yaWNzL0NvdW50aW5nLnBocAgAAADrT6NpCAAAAHNZmTekAQAAAAAAACsAAAB2ZW5kb3IvaG9hL21hdGgvQ29tYmluYXRvcmljcy9GaW5pdGVTZXQucGhwCAAAAOtPo2kIAAAAc1mZN6QBAAAAAAAALQAAAHZlbmRvci9ob2EvbWF0aC9Db21iaW5hdG9yaWNzL1Blcm11dGF0aW9uLnBocAgAAADrT6NpCAAAAHNZmTekAQAAAAAAACYAAAB2ZW5kb3IvaG9hL21hdGgvVmlzaXRvci9Bcml0aG1ldGljLnBocEcnAADrT6NpRycAAC3dfdqkAQAAAAAAABgAAAB2ZW5kb3IvaG9hL21hdGgvVXRpbC5waHBZCAAA60+jaVkIAADaY10NpAEAAAAAAAAiAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvTElDRU5TRS8EAADrT6NpLwQAABYj9cikAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZW5jaGFudC9lbmNoYW50X2RpY3RfZ2V0X2Vycm9yLnN0dWJZAAAA60+jaVkAAAAZaUoSpAEAAAAAAABNAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2VuY2hhbnQvZW5jaGFudF9icm9rZXJfc2V0X29yZGVyaW5nLnN0dWJtAAAA60+jaW0AAACn8gXqpAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2VuY2hhbnQvZW5jaGFudF9icm9rZXJfbGlzdF9kaWN0cy5zdHViZAAAAOtPo2lkAAAAbJFT1KQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9lbmNoYW50L0VuY2hhbnREaWN0aW9uYXJ5LnN0dWIpAAAA60+jaSkAAAB1Lj1epAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2VuY2hhbnQvZW5jaGFudF9icm9rZXJfZnJlZV9kaWN0LnN0dWJmAAAA60+jaWYAAAC0H7UgpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2VuY2hhbnQvZW5jaGFudF9icm9rZXJfZnJlZS5zdHViWQAAAOtPo2lZAAAAjvZ97aQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9lbmNoYW50L2VuY2hhbnRfYnJva2VyX2Rlc2NyaWJlLnN0dWJiAAAA60+jaWIAAADPHhyRpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2VuY2hhbnQvZW5jaGFudF9icm9rZXJfaW5pdC5zdHViQAAAAOtPo2lAAAAAD4bvOqQBAAAAAAAATgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9lbmNoYW50L2VuY2hhbnRfYnJva2VyX3NldF9kaWN0X3BhdGguc3R1YnsAAADrT6NpewAAAObR8U+kAQAAAAAAAFAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZW5jaGFudC9lbmNoYW50X2RpY3Rfc3RvcmVfcmVwbGFjZW1lbnQuc3R1Yn4AAADrT6NpfgAAAEVKdlWkAQAAAAAAAEwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZW5jaGFudC9lbmNoYW50X2Jyb2tlcl9kaWN0X2V4aXN0cy5zdHViWgAAAOtPo2laAAAABkc716QBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9lbmNoYW50L2VuY2hhbnRfZGljdF9pc19hZGRlZC5zdHViXgAAAOtPo2leAAAABjiFPKQBAAAAAAAATQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9lbmNoYW50L2VuY2hhbnRfYnJva2VyX3JlcXVlc3RfZGljdC5zdHVibwAAAOtPo2lvAAAA6yRfCqQBAAAAAAAAUQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9lbmNoYW50L2VuY2hhbnRfYnJva2VyX3JlcXVlc3RfcHdsX2RpY3Quc3R1YngAAADrT6NpeAAAAHsqTjekAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZW5jaGFudC9lbmNoYW50X2RpY3RfcXVpY2tfY2hlY2suc3R1YpgAAADrT6NpmAAAAHIDQbukAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZW5jaGFudC9lbmNoYW50X2RpY3Rfc3VnZ2VzdC5zdHVidQAAAOtPo2l1AAAArfv5NKQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9lbmNoYW50L2VuY2hhbnRfZGljdF9jaGVjay5zdHViWwAAAOtPo2lbAAAAgbOSdaQBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9lbmNoYW50L2VuY2hhbnRfZGljdF9pc19pbl9zZXNzaW9uLnN0dWKXAAAA60+jaZcAAACp081UpAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2VuY2hhbnQvZW5jaGFudF9icm9rZXJfZ2V0X2Vycm9yLnN0dWJTAAAA60+jaVMAAACbO+fTpAEAAAAAAABNAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2VuY2hhbnQvZW5jaGFudF9kaWN0X2FkZF90b19zZXNzaW9uLnN0dWJkAAAA60+jaWQAAACD/sZZpAEAAAAAAABOAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2VuY2hhbnQvZW5jaGFudF9icm9rZXJfZ2V0X2RpY3RfcGF0aC5zdHVidQAAAOtPo2l1AAAAeNQJa6QBAAAAAAAATgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9lbmNoYW50L2VuY2hhbnRfZGljdF9hZGRfdG9fcGVyc29uYWwuc3R1YpQAAADrT6NplAAAAPyJyrmkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZW5jaGFudC9FbmNoYW50QnJva2VyLnN0dWJHAAAA60+jaUcAAAAhoK65pAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2VuY2hhbnQvZW5jaGFudF9kaWN0X2Rlc2NyaWJlLnN0dWJoAAAA60+jaWgAAACnFGp9pAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2VuY2hhbnQvZW5jaGFudF9kaWN0X2FkZC5zdHViWQAAAOtPo2lZAAAAGydXXKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19sb3dyaXRlLnN0dWI+AQAA60+jaT4BAABJVGUDpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX251bV9maWVsZHMuc3R1YqgAAADrT6NpqAAAAAuMGK2kAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZmllbGRfdHlwZV9vaWQuc3R1YukAAADrT6Np6QAAAG0HUmukAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfY2xpZW50ZW5jb2Rpbmcuc3R1Yj4BAADrT6NpPgEAAJJiqxqkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZXhlY3V0ZS5zdHVitwEAAOtPo2m3AQAAXnf19KQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19lcnJvcm1lc3NhZ2Uuc3R1YjABAADrT6NpMAEAAP1686KkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfY29ubmVjdC5zdHViCAEAAOtPo2kIAQAADxexrqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19sb29wZW4uc3R1Yr8BAADrT6NpvwEAAIZvrzykAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfbGFzdF9ub3RpY2Uuc3R1YhQBAADrT6NpFAEAAIJXblikAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfaW5zZXJ0LnN0dWJ4AQAA60+jaXgBAAC5MZYopAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2xvX3JlYWRfYWxsLnN0dWKeAAAA60+jaZ4AAABwSLlApAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX3VuZXNjYXBlX2J5dGVhLnN0dWI+AAAA60+jaT4AAADjfQxUpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2ZldGNoX2FycmF5LnN0dWJZAQAA60+jaVkBAADnbXnGpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX3F1ZXJ5LnN0dWJDAQAA60+jaUMBAAA+f9FbpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX3VudHJhY2Uuc3R1Yi8BAADrT6NpLwEAABkWHx6kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfbG9fY3JlYXRlLnN0dWJoAQAA60+jaWgBAAA4A5kupAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2NoYW5nZV9wYXNzd29yZC5zdHVimwAAAOtPo2mbAAAALTmOW6QBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19udW1yb3dzLnN0dWL4AAAA60+jafgAAADo5Rp4pAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2ZldGNoX3Jvdy5zdHViUwEAAOtPo2lTAQAAVuduoaQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19jbGllbnRfZW5jb2Rpbmcuc3R1YtwAAADrT6Np3AAAADnmmAqkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZXNjYXBlX3N0cmluZy5zdHViMgEAAOtPo2kyAQAAphlJB6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19maWVsZF9wcnRsZW4uc3R1YuEBAADrT6Np4QEAAO0nNPWkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZmV0Y2hfYWxsLnN0dWIQAQAA60+jaRABAACOMTS5pAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2ZldGNoX2Fzc29jLnN0dWIpAQAA60+jaSkBAABEbOeBpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2ZpZWxkX3R5cGUuc3R1YsYAAADrT6NpxgAAAEQx4B2kAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfbGFzdF9vaWQuc3R1YtEAAADrT6Np0QAAAFOdzGKkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfbG9faW1wb3J0LnN0dWLkAQAA60+jaeQBAAATzK6PpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2ZpZWxkX25hbWUuc3R1YtkAAADrT6Np2QAAAJAQ1GGkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfcHV0X2xpbmUuc3R1Yg8BAADrT6NpDwEAAMgFDsakAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfaG9zdC5zdHVi2QAAAOtPo2nZAAAA3aRwbaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19jb252ZXJ0LnN0dWJlAQAA60+jaWUBAAAly68dpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX3NvY2tldF9wb2xsLnN0dWKPAAAA60+jaY8AAABAvnu3pAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2Nvbm5lY3Rpb25fcmVzZXQuc3R1YsYAAADrT6NpxgAAAL5Nu1ekAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZW5kX2NvcHkuc3R1YsoAAADrT6NpygAAAG5nm/KkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfdXBkYXRlLnN0dWJ5AQAA60+jaXkBAACppPy1pAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2ZpZWxkbmFtZS5zdHViHgEAAOtPo2keAQAA9t7rdKQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19udW1fcm93cy5zdHVipAAAAOtPo2mkAAAAfbpoN6QBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ190dHkuc3R1YtcAAADrT6Np1wAAAE0MiN2kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfbWV0YV9kYXRhLnN0dWJbAQAA60+jaVsBAADI9barpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2ZsdXNoLnN0dWK4AAAA60+jabgAAAAnWxrxpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX3NlbmRfZXhlY3V0ZS5zdHViFAEAAOtPo2kUAQAAnvVS5qQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19zZXRfY2h1bmtlZF9yb3dzX3NpemUuc3R1YpMAAADrT6NpkwAAAGov9L2kAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZXhlYy5zdHViWAEAAOtPo2lYAQAAjrqOUqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19sb3JlYWQuc3R1YiIBAADrT6NpIgEAAELjHHCkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfcmVzdWx0X3N0YXR1cy5zdHViDQEAAOtPo2kNAQAANEoDCKQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19yZXN1bHRfbWVtb3J5X3NpemUuc3R1YnkAAADrT6NpeQAAANv28tqkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfc2VuZF9xdWVyeV9wYXJhbXMuc3R1YgwBAADrT6NpDAEAADeiL4OkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfc2V0X2Vycm9yX3ZlcmJvc2l0eS5zdHViKwEAAOtPo2krAQAA3COdmqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19zZWxlY3Quc3R1YtgCAADrT6Np2AIAAF1LShikAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZmllbGRzaXplLnN0dWIYAQAA60+jaRgBAAA4iWJ4pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2dldF9waWQuc3R1YrIAAADrT6NpsgAAAGcIcg2kAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZmllbGRpc251bGwuc3R1YpABAADrT6NpkAEAAOJ5nwmkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZmllbGRwcnRsZW4uc3R1Yo4BAADrT6NpjgEAAMgIDMqkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfbG9fb3Blbi5zdHViiAEAAOtPo2mIAQAAD0i1VKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19yZXN1bHQuc3R1YpQBAADrT6NplAEAAOZcAp+kAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfbG9fdGVsbC5zdHVilgAAAOtPo2mWAAAA0U61pqQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19sb2ltcG9ydC5zdHViHwIAAOtPo2kfAgAAYAj4DaQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19jbWR0dXBsZXMuc3R1YgYBAADrT6NpBgEAADukCwGkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZmllbGR0eXBlLnN0dWIeAQAA60+jaR4BAAD/13b7pAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2dldF9ub3RpZnkuc3R1YjoBAADrT6NpOgEAAJIljoikAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfY29ubmVjdGlvbl9idXN5LnN0dWLEAAAA60+jacQAAAC/Ua78pAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2xvdW5saW5rLnN0dWJ3AQAA60+jaXcBAAAN/Qp/pAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX3Bpbmcuc3R1YsIAAADrT6NpwgAAAMsSB0ekAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfcGNvbm5lY3Quc3R1YugAAADrT6Np6AAAAEK0uMSkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZXNjYXBlX2lkZW50aWZpZXIuc3R1YkYBAADrT6NpRgEAADuUbF6kAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfdHJhY2Uuc3R1YrABAADrT6NpsAEAAMwlmbqkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfbG9jcmVhdGUuc3R1YqMBAADrT6NpowEAAMThOiKkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfc2VuZF9wcmVwYXJlLnN0dWIUAQAA60+jaRQBAABcKo6jpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX3B1dF9jb3B5X2RhdGEuc3R1YmcAAADrT6NpZwAAAGeakPCkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfcHJlcGFyZS5zdHVidwEAAOtPo2l3AQAA5P+NdKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19sb3JlYWRhbGwuc3R1YvYAAADrT6Np9gAAAGWLpjSkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfYWZmZWN0ZWRfcm93cy5zdHVirgAAAOtPo2muAAAA8mgRK6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19wdXRfY29weV9lbmQuc3R1YnAAAADrT6NpcAAAAI/cs9ekAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZmllbGRfaXNfbnVsbC5zdHVi5AEAAOtPo2nkAQAA2jaBnaQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9QZ1NxbC9SZXN1bHQuc3R1YnQAAADrT6NpdAAAAEscfcGkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvUGdTcWwvQ29ubmVjdGlvbi5zdHVieAAAAOtPo2l4AAAAWkAJMaQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9QZ1NxbC9Mb2Iuc3R1YnEAAADrT6NpcQAAAA+mBp6kAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfdHJhbnNhY3Rpb25fc3RhdHVzLnN0dWLIAAAA60+jacgAAAAzr+oLpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2ZpZWxkX3NpemUuc3R1YsAAAADrT6NpwAAAAIq7EsKkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfcmVzdWx0X3NlZWsuc3R1YsAAAADrT6NpwAAAAMa8zkmkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfc2V0X2NsaWVudF9lbmNvZGluZy5zdHViKQEAAOtPo2kpAQAAqkiEKaQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19zZW5kX3F1ZXJ5LnN0dWLgAAAA60+jaeAAAACO/GtspAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2NvcHlfdG8uc3R1Yo8BAADrT6NpjwEAAJ1A8e+kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfY29weV9mcm9tLnN0dWJkAQAA60+jaWQBAABkhlNmpAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX3BvcnQuc3R1YtkAAADrT6Np2QAAAMbPHsakAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZmllbGRudW0uc3R1YhoBAADrT6NpGgEAAIxvZ8ekAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfaml0LnN0dWKXAAAA60+jaZcAAABmBsTipAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2ZldGNoX3Jlc3VsdC5zdHViHwIAAOtPo2kfAgAA7Y3lLqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19sb2Nsb3NlLnN0dWLuAAAA60+jae4AAAAFxJnopAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2NvbnN1bWVfaW5wdXQuc3R1YsAAAADrT6NpwAAAAMEBRWWkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfbG9fcmVhZC5zdHVi4wAAAOtPo2njAAAAZE8NlKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19kZWxldGUuc3R1YlsBAADrT6NpWwEAAEi0XyWkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZXNjYXBlX2J5dGVhLnN0dWIwAQAA60+jaTABAABXbclJpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2xvZXhwb3J0LnN0dWIPAgAA60+jaQ8CAAA8otY/pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2Nvbm5lY3RfcG9sbC5zdHVivAAAAOtPo2m8AAAACDM0rKQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19yZXN1bHRfZXJyb3Iuc3R1YtEAAADrT6Np0QAAAJhh8yakAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfc2V0Y2xpZW50ZW5jb2Rpbmcuc3R1Yo0BAADrT6NpjQEAABp8vaqkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfbGFzdF9lcnJvci5zdHVi0gAAAOtPo2nSAAAA7UHhRKQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19maWVsZF90YWJsZS5zdHViDAEAAOtPo2kMAQAAAvPYRqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19vcHRpb25zLnN0dWLfAAAA60+jad8AAAAQd2ZTpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2xvX3dyaXRlLnN0dWLqAAAA60+jaeoAAAAg3hx1pAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX3Jlc3VsdF9lcnJvcl9maWVsZC5zdHViCQEAAOtPo2kJAQAA2n5akaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19sb19zZWVrLnN0dWLiAAAA60+jaeIAAABX4bbzpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2RibmFtZS5zdHVi3QAAAOtPo2ndAAAA3CleNqQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19jYW5jZWxfcXVlcnkuc3R1Yr4AAADrT6NpvgAAACnIMlSkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfbG9fdHJ1bmNhdGUuc3R1YrYAAADrT6NptgAAAMVASZ2kAQAAAAAAAE8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfc2V0X2Vycm9yX2NvbnRleHRfdmlzaWJpbGl0eS5zdHVinAAAAOtPo2mcAAAAeo7rh6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19mcmVlcmVzdWx0LnN0dWIGAQAA60+jaQYBAACQ16IFpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX3BhcmFtZXRlcl9zdGF0dXMuc3R1YkABAADrT6NpQAEAAM+nod2kAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfY2xvc2Uuc3R1YikBAADrT6NpKQEAAGoBSeqkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZmV0Y2hfYWxsX2NvbHVtbnMuc3R1YhQBAADrT6NpFAEAAMz1y0WkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfcXVlcnlfcGFyYW1zLnN0dWKdAQAA60+jaZ0BAAAOvZ1GpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2xvX2Nsb3NlLnN0dWKaAAAA60+jaZoAAACTWSUkpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX2dldGxhc3RvaWQuc3R1YhgBAADrT6NpGAEAAHsJ78GkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfc29ja2V0LnN0dWL1AAAA60+jafUAAADJ0JOTpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bnc3FsL3BnX251bWZpZWxkcy5zdHViAAEAAOtPo2kAAQAAm6FYBaQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19jb25uZWN0aW9uX3N0YXR1cy5zdHVixgAAAOtPo2nGAAAAj3miO6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19sb191bmxpbmsuc3R1Yi0BAADrT6NpLQEAAFtWTmekAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZ2V0X3Jlc3VsdC5zdHVi9AAAAOtPo2n0AAAAPIVZ8aQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19mcmVlX3Jlc3VsdC5zdHVirAAAAOtPo2msAAAAvIVE4KQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19mZXRjaF9vYmplY3Quc3R1YmkBAADrT6NpaQEAAHDTLNikAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfdmVyc2lvbi5zdHViCwEAAOtPo2kLAQAAgAkhtaQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZ3NxbC9wZ19sb19leHBvcnQuc3R1YsUBAADrT6NpxQEAAAe6+YCkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZXNjYXBlX2xpdGVyYWwuc3R1YkABAADrT6NpQAEAAJ7lecikAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGdzcWwvcGdfZmllbGRfbnVtLnN0dWLEAAAA60+jacQAAADWHzgspAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX3NpZ25hbF9kaXNwYXRjaC5zdHViMgAAAOtPo2kyAAAAOiIblKQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY250bC9wY250bF9zaWd3YWl0aW5mby5zdHViyAAAAOtPo2nIAAAA8CIfT6QBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY250bC9wY250bF93aWZzdG9wcGVkLnN0dWI4AAAA60+jaTgAAABw/o9/pAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX2dldGNwdWFmZmluaXR5LnN0dWKFAAAA60+jaYUAAADXSR1upAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX3dzdG9wc2lnLnN0dWI7AAAA60+jaTsAAAALzXR1pAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX2FzeW5jX3NpZ25hbHMuc3R1YkQAAADrT6NpRAAAAMY+/DikAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGNudGwvcGNudGxfd2V4aXRzdGF0dXMuc3R1Yj4AAADrT6NpPgAAANOQCSGkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGNudGwvcGNudGxfcmZvcmsuc3R1YmwAAADrT6NpbAAAAAz7CZmkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGNudGwvcGNudGxfc2lndGltZWR3YWl0LnN0dWKRAAAA60+jaZEAAABpAxfopAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX3NldHByaW9yaXR5LnN0dWKNAAAA60+jaY0AAAC/Ofe2pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX2V4ZWMuc3R1YlsAAADrT6NpWwAAAL+u6sqkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGNudGwvcGNudGxfZ2V0cHJpb3JpdHkuc3R1YnwAAADrT6NpfAAAAMXkm3+kAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGNudGwvcGNudGxfc2V0bnMuc3R1YooAAADrT6NpigAAAOMfGkekAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGNudGwvcGNudGxfYWxhcm0uc3R1YjMAAADrT6NpMwAAAHXkzz6kAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGNudGwvcGNudGxfd2lmc2lnbmFsZWQuc3R1YkAAAADrT6NpQAAAAIQSHumkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGNudGwvcGNudGxfc2V0cW9zX2NsYXNzLnN0dWJ0AAAA60+jaXQAAAB/RGK5pAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX2dldHFvc19jbGFzcy5zdHVifAAAAOtPo2l8AAAAu5/oJaQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY250bC9wY250bF9mb3JreC5zdHViWwAAAOtPo2lbAAAAMZf736QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY250bC9QY250bC9Rb3NDbGFzcy5zdHVipwAAAOtPo2mnAAAAadl0VqQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY250bC9wY250bF93dGVybXNpZy5zdHViOwAAAOtPo2k7AAAATPwCUaQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY250bC9wY250bF91bnNoYXJlLnN0dWJIAAAA60+jaUgAAACbuGs1pAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX3N0cmVycm9yLnN0dWJDAAAA60+jaUMAAABm11agpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX3NldGNwdWFmZmluaXR5LnN0dWJuAAAA60+jaW4AAACtfj3GpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX3dpZmNvbnRpbnVlZC5zdHViUQAAAOtPo2lRAAAAaJyDvqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY250bC9wY250bF93YWl0LnN0dWKTAAAA60+jaZMAAAB0g6JNpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX3dpZmV4aXRlZC5zdHViRQAAAOtPo2lFAAAAnjQJNaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY250bC9wY250bF9mb3JrLnN0dWJIAAAA60+jaUgAAACdisnSpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX2Vycm5vLnN0dWJKAAAA60+jaUoAAAA23sR+pAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX2dldF9sYXN0X2Vycm9yLnN0dWIwAAAA60+jaTAAAAD3aDHopAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX3NpZ25hbC5zdHVigQAAAOtPo2mBAAAAg7ICf6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY250bC9wY250bF9nZXRjcHUuc3R1YlkAAADrT6NpWQAAADLH+fikAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGNudGwvcGNudGxfc2lnbmFsX2dldF9oYW5kbGVyLnN0dWJWAAAA60+jaVYAAACKo6klpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX3NpZ3Byb2NtYXNrLnN0dWKWAAAA60+jaZYAAAAVdof+pAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjbnRsL3BjbnRsX3dhaXRpZC5zdHViDgEAAOtPo2kOAQAA3LjrCaQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY250bC9wY250bF93YWl0cGlkLnN0dWKnAAAA60+jaacAAABBAvfvpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BzcGVsbC9wc3BlbGxfY29uZmlnX3BlcnNvbmFsLnN0dWLGAAAA60+jacYAAADYMAvbpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BzcGVsbC9wc3BlbGxfY2xlYXJfc2Vzc2lvbi5zdHViqgAAAOtPo2mqAAAAb3+CzqQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wc3BlbGwvcHNwZWxsX2NvbmZpZ19yZXBsLnN0dWK+AAAA60+jab4AAAAL61MspAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BzcGVsbC9wc3BlbGxfbmV3X3BlcnNvbmFsLnN0dWJ8AQAA60+jaXwBAACGj3B8pAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BzcGVsbC9QU3BlbGwvRGljdGlvbmFyeS5zdHVieQAAAOtPo2l5AAAAux9T66QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wc3BlbGwvUFNwZWxsL0NvbmZpZy5zdHVidQAAAOtPo2l1AAAARqoHRqQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wc3BlbGwvcHNwZWxsX2FkZF90b19wZXJzb25hbC5zdHViygAAAOtPo2nKAAAAeibdeaQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wc3BlbGwvcHNwZWxsX3N1Z2dlc3Quc3R1YgMBAADrT6NpAwEAAHzaEKekAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcHNwZWxsL3BzcGVsbF9jaGVjay5zdHVitgAAAOtPo2m2AAAAnvY4z6QBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wc3BlbGwvcHNwZWxsX2NvbmZpZ19kYXRhX2Rpci5zdHViyAAAAOtPo2nIAAAApmo8X6QBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wc3BlbGwvcHNwZWxsX2NvbmZpZ19kaWN0X2Rpci5zdHViyAAAAOtPo2nIAAAA2HRYiaQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wc3BlbGwvcHNwZWxsX2FkZF90b19zZXNzaW9uLnN0dWLIAAAA60+jacgAAAAdGaUopAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BzcGVsbC9wc3BlbGxfc2F2ZV93b3JkbGlzdC5zdHViqgAAAOtPo2mqAAAAW1dPkaQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wc3BlbGwvcHNwZWxsX2NvbmZpZ19jcmVhdGUuc3R1YiwBAADrT6NpLAEAAIaqKBCkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcHNwZWxsL3BzcGVsbF9jb25maWdfc2F2ZV9yZXBsLnN0dWK8AAAA60+jabwAAADCGEbmpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BzcGVsbC9wc3BlbGxfc3RvcmVfcmVwbGFjZW1lbnQuc3R1YvwAAADrT6Np/AAAAAaHkICkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcHNwZWxsL3BzcGVsbF9uZXcuc3R1YmgBAADrT6NpaAEAAIMdoj+kAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcHNwZWxsL3BzcGVsbF9jb25maWdfbW9kZS5zdHVisAAAAOtPo2mwAAAAnUEyYaQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wc3BlbGwvcHNwZWxsX25ld19jb25maWcuc3R1YrEAAADrT6NpsQAAAJiylQakAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcHNwZWxsL3BzcGVsbF9jb25maWdfcnVudG9nZXRoZXIuc3R1YsIAAADrT6NpwgAAAHe5BKakAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcHNwZWxsL3BzcGVsbF9jb25maWdfaWdub3JlLnN0dWLAAAAA60+jacAAAABgyVMMpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bkb19maXJlYmlyZC9QZG8vRmlyZWJpcmQuc3R1YrEDAADrT6NpsQMAAIBBX2ekAQAAAAAAADEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZmZpL0ZGSS5zdHVimgsAAOtPo2maCwAA8rNDZ6QBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mZmkvRkZJL1BhcnNlckV4Y2VwdGlvbi5zdHViTgAAAOtPo2lOAAAAMnEJMKQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mZmkvRkZJL0NEYXRhLnN0dWItAAAA60+jaS0AAADA7fQapAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ZmaS9GRkkvRXhjZXB0aW9uLnN0dWI6AAAA60+jaToAAADap6uxpAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ZmaS9GRkkvQ1R5cGUuc3R1YkYrAADrT6NpRisAAO0B8HikAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGRvX3Bnc3FsL1BET19QR1NxbF9FeHQuc3R1YmcHAADrT6NpZwcAAOsHm7ykAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGRvX3Bnc3FsL1Bkby9QZ3NxbC5zdHViWwgAAOtPo2lbCAAAfR8zJKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9leGlmL2V4aWZfcmVhZF9kYXRhLnN0dWLMAAAA60+jacwAAAClfvEmpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2V4aWYvZXhpZl90aHVtYm5haWwuc3R1YtsAAADrT6Np2wAAAPYtGymkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZXhpZi9leGlmX3RhZ25hbWUuc3R1Yl0AAADrT6NpXQAAAEriKWakAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZXhpZi9leGlmX2ltYWdldHlwZS5zdHViQAAAAOtPo2lAAAAArHZZA6QBAAAAAAAAUwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWFkbGluZS9yZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX3JlbW92ZS5zdHViPQAAAOtPo2k9AAAAp7OdeaQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWFkbGluZS9yZWFkbGluZV9jbGVhcl9oaXN0b3J5LnN0dWIzAAAA60+jaTMAAAAk5O+BpAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JlYWRsaW5lL3JlYWRsaW5lX3JlYWRfaGlzdG9yeS5zdHViUQAAAOtPo2lRAAAAJDf40KQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWFkbGluZS9yZWFkbGluZV9hZGRfaGlzdG9yeS5zdHViPwAAAOtPo2k/AAAAZtWBk6QBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWFkbGluZS9yZWFkbGluZS5zdHViZQAAAOtPo2llAAAAJZ+o2KQBAAAAAAAATgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWFkbGluZS9yZWFkbGluZV9jYWxsYmFja19yZWFkX2NoYXIuc3R1YjgAAADrT6NpOAAAAH5xZe+kAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmVhZGxpbmUvcmVhZGxpbmVfd3JpdGVfaGlzdG9yeS5zdHViSwAAAOtPo2lLAAAAQL5iUqQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWFkbGluZS9yZWFkbGluZV9yZWRpc3BsYXkuc3R1Yi8AAADrT6NpLwAAALKEJyekAQAAAAAAAE8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmVhZGxpbmUvcmVhZGxpbmVfY29tcGxldGlvbl9mdW5jdGlvbi5zdHViSwAAAOtPo2lLAAAAcVICn6QBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWFkbGluZS9yZWFkbGluZV9pbmZvLnN0dWKmAAAA60+jaaYAAABHvaQTpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JlYWRsaW5lL3JlYWRsaW5lX29uX25ld19saW5lLnN0dWJJAAAA60+jaUkAAAB0usi4pAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JlYWRsaW5lL3JlYWRsaW5lX2xpc3RfaGlzdG9yeS5zdHViYwAAAOtPo2ljAAAAGocUJaQBAAAAAAAAVAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWFkbGluZS9yZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwuc3R1Yn8AAADrT6NpfwAAAMjDNyOkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaWNvbnYvaWNvbnZfc3RybGVuLnN0dWJ4AAAA60+jaXgAAAASuISlpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ljb252L2ljb252X3NldF9lbmNvZGluZy5zdHViTQAAAOtPo2lNAAAA0dux+6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pY29udi9pY29udl9zdHJycG9zLnN0dWJpAAAA60+jaWkAAABhMhUOpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ljb252L2ljb252LnN0dWJkAAAA60+jaWQAAADWet6xpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ljb252L2ljb252X3N1YnN0ci5zdHViewAAAOtPo2l7AAAAJ6/INqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pY29udi9pY29udl9nZXRfZW5jb2Rpbmcuc3R1YmgAAADrT6NpaAAAAKiut1ekAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaWNvbnYvaWNvbnZfc3RycG9zLnN0dWJ5AAAA60+jaXkAAADnMmgqpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ljb252L2ljb252X21pbWVfZW5jb2RlLnN0dWJyAAAA60+jaXIAAAB44iCKpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ljb252L2ljb252X21pbWVfZGVjb2RlX2hlYWRlcnMuc3R1YowAAADrT6NpjAAAAHpc66+kAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaWNvbnYvaWNvbnZfbWltZV9kZWNvZGUuc3R1Ym0AAADrT6NpbQAAAOKL2DqkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsX2lzX2ZhaWx1cmUuc3R1YjoAAADrT6NpOgAAAHt5memkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9yZXNvdXJjZWJ1bmRsZV9jcmVhdGUuc3R1YpIAAADrT6NpkgAAABhr7OSkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2lzX2xlbmllbnQuc3R1YkYAAADrT6NpRgAAAHNGTHGkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9sb2NhbGVfZ2V0X2Rpc3BsYXlfc2NyaXB0LnN0dWJrAAAA60+jaWsAAADtxGRrpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZ3JhcGhlbWVfc3RyX3NwbGl0LnN0dWJmAAAA60+jaWYAAAC1LXNxpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9pc193ZWVrZW5kLnN0dWJgAAAA60+jaWAAAAC4iGMppAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZGF0ZWZtdF9nZXRfdGltZXpvbmVfaWQuc3R1YlkAAADrT6NpWQAAAJRrvvOkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9jb21tb24vSW50bEl0ZXJhdG9yLnN0dWJpAgAA60+jaWkCAACZWJxBpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbXNnZm9ybWF0L01lc3NhZ2VGb3JtYXR0ZXIuc3R1YvYGAADrT6Np9gYAAK5MhYukAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfZ2V0X2lhbmFfaWQuc3R1YnwAAADrT6NpfAAAAPWxYBikAQAAAAAAAFMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX3NldF9za2lwcGVkX3dhbGxfdGltZV9vcHRpb24uc3R1YuUAAADrT6Np5QAAAPdKm5ikAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pZG5fdG9fdXRmOC5zdHVitAAAAOtPo2m0AAAAj0p1EaQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2NvbGxhdG9yL0NvbGxhdG9yLnN0dWJGIAAA60+jaUYgAACLQ1R7pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbnVtZm10X2dldF9zeW1ib2wuc3R1Yl4AAADrT6NpXgAAAKuPQaSkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9kYXRlZm10X2dldF9jYWxlbmRhci5zdHViUwAAAOtPo2lTAAAAe9GNkKQBAAAAAAAASwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGx0el9nZXRfaWRfZm9yX3dpbmRvd3NfaWQuc3R1YmsAAADrT6NpawAAAFItpY+kAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9kYXRlZm10X2dldF9sb2NhbGUuc3R1YnQAAADrT6NpdAAAAKU6TNSkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9tc2dmbXRfY3JlYXRlLnN0dWJnAAAA60+jaWcAAAD25LxipAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bF9lcnJvcl9uYW1lLnN0dWI8AAAA60+jaTwAAAB2ejHjpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZGF0ZWZtdF9pc19sZW5pZW50LnN0dWJMAAAA60+jaUwAAABH/pzUpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbG9jYWxlL0xvY2FsZS5zdHVibxcAAOtPo2lvFwAAE8KNgaQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL21zZ2ZtdF9nZXRfcGF0dGVybi5zdHViUwAAAOtPo2lTAAAAAXWUjqQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2RhdGVmbXRfbG9jYWx0aW1lLnN0dWKgAAAA60+jaaAAAACWj2XGpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbXNnZm10X3BhcnNlLnN0dWJzAAAA60+jaXMAAACK2K4wpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZGF0ZWZtdF9nZXRfZGF0ZXR5cGUuc3R1YlMAAADrT6NpUwAAAPh5HhOkAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2dldF9kYXlfb2Zfd2Vla190eXBlLnN0dWJlAAAA60+jaWUAAAAyo6ITpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZ3JhcGhlbWVfc3RyaXN0ci5zdHVicQAAAOtPo2lxAAAA1LoYVaQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfZ2V0X2Vycm9yX21lc3NhZ2Uuc3R1YlUAAADrT6NpVQAAAH8fGIekAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2NyZWF0ZV9pbnN0YW5jZS5zdHViswAAAOtPo2mzAAAAH9U8fKQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2NvbGxhdG9yX2dldF9zb3J0X2tleS5zdHViWwAAAOtPo2lbAAAAgkuyFKQBAAAAAAAAVAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfc2V0X3JlcGVhdGVkX3dhbGxfdGltZV9vcHRpb24uc3R1YucAAADrT6Np5wAAAF5gbBakAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2VxdWFscy5zdHViWAAAAOtPo2lYAAAA6mWNV6QBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL21zZ2ZtdF9mb3JtYXRfbWVzc2FnZS5zdHViaAAAAOtPo2loAAAAEowU+aQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2RhdGVmbXRfc2V0X2NhbGVuZGFyLnN0dWJwAAAA60+jaXAAAABXKc9gpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bF9nZXRfZXJyb3JfbWVzc2FnZS5zdHViNQAAAOtPo2k1AAAA1UM7JKQBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL3RyYW5zbGl0ZXJhdG9yX2dldF9lcnJvcl9jb2RlLnN0dWJeAAAA60+jaV4AAAAQnypgpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvY29sbGF0b3JfY29tcGFyZS5zdHViZQAAAOtPo2llAAAAPD1S8qQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGx0el9nZXRfd2luZG93c19pZC5zdHVibgAAAOtPo2luAAAAeyTFi6QBAAAAAAAASwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL3RyYW5zbGl0ZXJhdG9yX3RyYW5zbGl0ZXJhdGUuc3R1YpYAAADrT6NplgAAACFuqXKkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9ub3JtYWxpemVyX25vcm1hbGl6ZS5zdHVieAAAAOtPo2l4AAAA7ycW/KQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2xvY2FsZV9nZXRfZGlzcGxheV9uYW1lLnN0dWJpAAAA60+jaWkAAACTzTjVpAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvY29sbGF0b3JfZ2V0X2Vycm9yX2NvZGUuc3R1YkoAAADrT6NpSgAAAMouvMikAQAAAAAAAFMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2dldF9za2lwcGVkX3dhbGxfdGltZV9vcHRpb24uc3R1YlcAAADrT6NpVwAAAMPVeRikAQAAAAAAAE0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2dldF93ZWVrZW5kX3RyYW5zaXRpb24uc3R1YmcAAADrT6NpZwAAAMV363KkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9kYXRlZm10X2Zvcm1hdC5zdHViqQAAAOtPo2mpAAAAv6U0uKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL251bWZtdF9jcmVhdGUuc3R1YnoAAADrT6NpegAAADXaiHSkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsZ3JlZ2NhbF9pc19sZWFwX3llYXIuc3R1YmAAAADrT6NpYAAAAKqOzumkAQAAAAAAAFUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2dldF9taW5pbWFsX2RheXNfaW5fZmlyc3Rfd2Vlay5zdHViXwAAAOtPo2lfAAAAG0ZAoaQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL251bWZtdF9nZXRfZXJyb3JfbWVzc2FnZS5zdHViUgAAAOtPo2lSAAAA2BmdkqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfZ2V0LnN0dWJQAAAA60+jaVAAAABARLMNpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9nZXRfbWF4aW11bS5zdHViWAAAAOtPo2lYAAAAF/l7EaQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfc2V0X3RpbWVfem9uZS5zdHVikgAAAOtPo2mSAAAAjgn5f6QBAAAAAAAASwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfZ2V0X2dyZWF0ZXN0X21pbmltdW0uc3R1YmEAAADrT6NpYQAAALCdMXqkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9ub3JtYWxpemVyX2lzX25vcm1hbGl6ZWQuc3R1YmMAAADrT6NpYwAAABF8mZekAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9sb2NhbGVfcGFyc2Uuc3R1YjkAAADrT6NpOQAAAHCru42kAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9ncmFwaGVtZV9zdHJyaXBvcy5zdHViZAAAAOtPo2lkAAAAPeYVJ6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfZ2V0X3R5cGUuc3R1YkYAAADrT6NpRgAAAAN8//+kAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9sb2NhbGVfYWNjZXB0X2Zyb21faHR0cC5zdHViSgAAAOtPo2lKAAAAZ/7XvaQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL3Jlc291cmNlYnVuZGxlX2dldC5zdHViMgEAAOtPo2kyAQAAT9k+H6QBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL3Jlc291cmNlYnVuZGxlX2xvY2FsZXMuc3R1Yl8AAADrT6NpXwAAAE9ffZ2kAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfZ2V0X2Vycm9yX21lc3NhZ2Uuc3R1YlQAAADrT6NpVAAAAHmfFuWkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9udW1mbXRfZ2V0X2F0dHJpYnV0ZS5zdHViZwAAAOtPo2lnAAAAmHuC46QBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL3Jlc291cmNlYnVuZGxlX2NvdW50LnN0dWJHAAAA60+jaUcAAAD8GvmqpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9nZXRfbWluaW11bS5zdHViWAAAAOtPo2lYAAAAFULyKKQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2RhdGVmbXRfZ2V0X2Vycm9yX21lc3NhZ2Uuc3R1YlUAAADrT6NpVQAAAIPzRG+kAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2dldF9hY3R1YWxfbWF4aW11bS5zdHViXwAAAOtPo2lfAAAAJ/l6eaQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL251bWZtdF9zZXRfdGV4dF9hdHRyaWJ1dGUuc3R1YnAAAADrT6NpcAAAANNhA+akAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2Zyb21fZGF0ZV90aW1lLnN0dWJvAAAA60+jaW8AAAD0StNLpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bHR6X3RvX2RhdGVfdGltZV96b25lLnN0dWJbAAAA60+jaVsAAAC8fRlLpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvY29sbGF0b3JfZ2V0X3N0cmVuZ3RoLnN0dWJCAAAA60+jaUIAAADBhDRbpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbG9jYWxlX2dldF9kaXNwbGF5X3ZhcmlhbnQuc3R1YmwAAADrT6NpbAAAADKeVFukAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfY3JlYXRlX2VudW1lcmF0aW9uLnN0dWKkAAAA60+jaaQAAACE9o41pAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbG9jYWxlX2dldF9kaXNwbGF5X2xhbmd1YWdlLnN0dWJtAAAA60+jaW0AAACD16sPpAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvdHJhbnNsaXRlcmF0b3JfbGlzdF9pZHMuc3R1YlIAAADrT6NpUgAAAC4iOeWkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfaGFzX3NhbWVfcnVsZXMuc3R1YmYAAADrT6NpZgAAANfG2QqkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9kYXRlZm10X2dldF90aW1ldHlwZS5zdHViUwAAAOtPo2lTAAAAYKNQ8qQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL3Nwb29mY2hlY2tlci9TcG9vZmNoZWNrZXIuc3R1Yo8WAADrT6NpjxYAAJpknWGkAQAAAAAAAE8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC90cmFuc2xpdGVyYXRvcl9jcmVhdGVfZnJvbV9ydWxlcy5zdHVigAAAAOtPo2mAAAAAd6vHNKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2RhdGVmbXRfY3JlYXRlLnN0dWJjAgAA60+jaWMCAAAvpBp1pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9zZXQuc3R1YoMBAADrT6NpgwEAACbKtUOkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9udW1mbXRfZ2V0X3RleHRfYXR0cmlidXRlLnN0dWJpAAAA60+jaWkAAAAZ1hKDpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bHR6X2dldF9vZmZzZXQuc3R1YrgAAADrT6NpuAAAAHFzKMmkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9ncmFwaGVtZV9leHRyYWN0LnN0dWKpAAAA60+jaakAAAAOm+aBpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bHR6X2dldF9yZWdpb24uc3R1YkgAAADrT6NpSAAAAFcZX8ykAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pZG5fdG9fYXNjaWkuc3R1Yr8AAADrT6NpvwAAAA4zSL+kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfZ2V0X2lkLnN0dWJJAAAA60+jaUkAAAAIzEEFpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZGF0ZWZtdF9zZXRfbGVuaWVudC5zdHViXAAAAOtPo2lcAAAAbhoqd6QBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL251bWZtdF9zZXRfc3ltYm9sLnN0dWJlAAAA60+jaWUAAAAKSejZpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbm9ybWFsaXplci9Ob3JtYWxpemVyLnN0dWKADAAA60+jaYAMAACg4WivpAEAAAAAAABPAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGdyZWdjYWxfc2V0X2dyZWdvcmlhbl9jaGFuZ2Uuc3R1Ym8AAADrT6NpbwAAABU8mH2kAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9sb2NhbGVfZ2V0X3ByaW1hcnlfbGFuZ3VhZ2Uuc3R1YkkAAADrT6NpSQAAABVAfrCkAQAAAAAAAFUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfY3JlYXRlX3RpbWVfem9uZV9pZF9lbnVtZXJhdGlvbi5zdHViiwAAAOtPo2mLAAAA7oI646QBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL251bWZtdF9wYXJzZS5zdHVitAAAAOtPo2m0AAAA+wWX0qQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL21zZ2ZtdF9nZXRfZXJyb3JfY29kZS5zdHViTQAAAOtPo2lNAAAAd8+FkqQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2xvY2FsZV9nZXRfcmVnaW9uLnN0dWI/AAAA60+jaT8AAADw0gcepAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bHR6X2dldF9lcXVpdmFsZW50X2lkLnN0dWJcAAAA60+jaVwAAAAcp5k1pAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvY29sbGF0b3Jfc2V0X2F0dHJpYnV0ZS5zdHViYAAAAOtPo2lgAAAAl7nr4qQBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL3RyYW5zbGl0ZXJhdG9yL1RyYW5zbGl0ZXJhdG9yLnN0dWKcBwAA60+jaZwHAADi2PDApAEAAAAAAABPAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvdHJhbnNsaXRlcmF0b3JfZ2V0X2Vycm9yX21lc3NhZ2Uuc3R1YmQAAADrT6NpZAAAACJLArWkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9tc2dmbXRfZ2V0X2xvY2FsZS5zdHViTAAAAOtPo2lMAAAAKwuTsKQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2dyYXBoZW1lX3N0cnBvcy5zdHViYgAAAOtPo2liAAAAOWjik6QBAAAAAAAATwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL25vcm1hbGl6ZXJfZ2V0X3Jhd19kZWNvbXBvc2l0aW9uLnN0dWKQAAAA60+jaZAAAACVwr2rpAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9nZXRfYXZhaWxhYmxlX2xvY2FsZXMuc3R1YlIAAADrT6NpUgAAACrQZT+kAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX3RvX2RhdGVfdGltZS5zdHViUwAAAOtPo2lTAAAAIT1y4qQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfc2V0X3RpbWUuc3R1YlYAAADrT6NpVgAAABlzkLSkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfZ2V0X2RzdF9zYXZpbmdzLnN0dWJJAAAA60+jaUkAAABDyuCypAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9jbGVhci5zdHVixQAAAOtPo2nFAAAAiFbDyqQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL251bWZtdF9nZXRfcGF0dGVybi5zdHViUgAAAOtPo2lSAAAAS93B/6QBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2xvY2FsZV9nZXRfZGlzcGxheV9yZWdpb24uc3R1YmsAAADrT6NpawAAAIjnK1+kAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9kYXRlZm10X3NldF90aW1lem9uZS5zdHViSgEAAOtPo2lKAQAAqOjdhqQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2xvY2FsZV9nZXRfZGVmYXVsdC5zdHViPgAAAOtPo2k+AAAARpZQuaQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL251bWZtdF9mb3JtYXRfY3VycmVuY3kuc3R1YncAAADrT6NpdwAAANBNv2SkAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfZ2V0X3R6X2RhdGFfdmVyc2lvbi5zdHViPwAAAOtPo2k/AAAAS1VePqQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2xvY2FsZV9nZXRfc2NyaXB0LnN0dWI/AAAA60+jaT8AAAC9Rsq/pAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZ3JhcGhlbWVfc3Vic3RyLnN0dWJkAAAA60+jaWQAAACJqv6KpAEAAAAAAABUAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9nZXRfa2V5d29yZF92YWx1ZXNfZm9yX2xvY2FsZS5zdHViggAAAOtPo2mCAAAAjqYd56QBAAAAAAAATwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxncmVnY2FsX2dldF9ncmVnb3JpYW5fY2hhbmdlLnN0dWJeAAAA60+jaV4AAAC+42TGpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZ3JhcGhlbWVfc3RyaXBvcy5zdHViYwAAAOtPo2ljAAAAFdXgCaQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2NvbGxhdG9yX3NldF9zdHJlbmd0aC5zdHVivwAAAOtPo2m/AAAArtCGcKQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfZ2V0X2FjdHVhbF9taW5pbXVtLnN0dWJfAAAA60+jaV8AAAAlQvNApAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvY29udmVydGVyL1VDb252ZXJ0ZXIuc3R1YigxAADrT6NpKDEAAJPfDvikAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9tc2dmbXRfc2V0X3BhdHRlcm4uc3R1YlwAAADrT6NpXAAAAKjI/x2kAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9sb2NhbGVfY2Fub25pY2FsaXplLnN0dWJBAAAA60+jaUEAAACQH5I6pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9hZGQuc3R1YlcAAADrT6NpVwAAAHmpO3qkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9kYXRlZm10X2dldF90aW1lem9uZS5zdHViXQAAAOtPo2ldAAAAXts9p6QBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxncmVnY2FsX2NyZWF0ZV9pbnN0YW5jZS5zdHVijQEAAOtPo2mNAQAAaehvTaQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2xvY2FsZV9zZXRfZGVmYXVsdC5zdHVilQAAAOtPo2mVAAAAPWSmG6QBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL251bWZtdF9nZXRfZXJyb3JfY29kZS5zdHViTAAAAOtPo2lMAAAAgv2fJKQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfaW5fZGF5bGlnaHRfdGltZS5zdHViTAAAAOtPo2lMAAAAiILr8KQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2xvY2FsZV9nZXRfa2V5d29yZHMuc3R1YmEAAADrT6NpYQAAAM+51G6kAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfZ2V0X2Vycm9yX2NvZGUuc3R1Yk4AAADrT6NpTgAAAB21VR2kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9JbnRsRXhjZXB0aW9uLnN0dWJUAAAA60+jaVQAAABj57MXpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9yb2xsLnN0dWJyAAAA60+jaXIAAADAuEZlpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bHR6X3VzZV9kYXlsaWdodF90aW1lLnN0dWJMAAAA60+jaUwAAACG6K/SpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvY29sbGF0b3JfY3JlYXRlLnN0dWJPAAAA60+jaU8AAAAJHc9gpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9iZWZvcmUuc3R1YlgAAADrT6NpWAAAAL8z9lSkAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9kYXRlZm9ybWF0L0ludGxEYXRlRm9ybWF0dGVyLnN0dWKUHgAA60+jaZQeAAD8fmE0pAEAAAAAAABSAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZGF0ZWZvcm1hdC9JbnRsRGF0ZVBhdHRlcm5HZW5lcmF0b3Iuc3R1Yk4BAADrT6NpTgEAAN6S/iGkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2lzX2VxdWl2YWxlbnRfdG8uc3R1YmIAAADrT6NpYgAAAIFxcvWkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9ncmFwaGVtZV9zdHJycG9zLnN0dWJjAAAA60+jaWMAAABEwdzSpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvdGltZXpvbmUvSW50bFRpbWVab25lLnN0dWIHHwAA60+jaQcfAACeV5iHpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9pc19zZXQuc3R1Yk4AAADrT6NpTgAAAGmtzT2kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9sb2NhbGVfbG9va3VwLnN0dWKKAAAA60+jaYoAAABycekSpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbG9jYWxlX2ZpbHRlcl9tYXRjaGVzLnN0dWJyAAAA60+jaXIAAAAQxOcApAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZGF0ZWZtdF9wYXJzZS5zdHVijQAAAOtPo2mNAAAA/qvmN6QBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfZ2V0X2ZpcnN0X2RheV9vZl93ZWVrLnN0dWJWAAAA60+jaVYAAAD4UEPMpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bHR6X2Zyb21fZGF0ZV90aW1lX3pvbmUuc3R1YlgAAADrT6NpWAAAAIF0wEWkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9udW1mbXRfc2V0X3BhdHRlcm4uc3R1YlsAAADrT6NpWwAAAL6tJNWkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9udW1mbXRfZm9ybWF0LnN0dWKIAAAA60+jaYgAAAD9Q7papAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbXNnZm10X3BhcnNlX21lc3NhZ2Uuc3R1Yn8AAADrT6NpfwAAAAVBiLGkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2dldF9sZWFzdF9tYXhpbXVtLnN0dWJeAAAA60+jaV4AAADOUrN2pAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZ3JhcGhlbWVfc3Ryc3RyLnN0dWJwAAAA60+jaXAAAAAozDWFpAEAAAAAAABUAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9nZXRfcmVwZWF0ZWRfd2FsbF90aW1lX29wdGlvbi5zdHViWAAAAOtPo2lYAAAAt+Syf6QBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxfZ2V0X2Vycm9yX2NvZGUuc3R1YjwAAADrT6NpPAAAAFGSLwWkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9ncmFwaGVtZV9zdHJsZW4uc3R1YlMAAADrT6NpUwAAAIUHDDSkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfZ2V0X2dtdC5zdHViNAAAAOtPo2k0AAAAF6XvE6QBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGx0el9nZXRfcmF3X29mZnNldC5zdHViSAAAAOtPo2lIAAAAl/FE+qQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2Zvcm1hdHRlci9OdW1iZXJGb3JtYXR0ZXIuc3R1YudcAADrT6Np51wAAO3vv9KkAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9kYXRlZm10X2dldF9jYWxlbmRhcl9vYmplY3Quc3R1YmkAAADrT6NpaQAAAFYqK32kAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfZ2V0X2Nhbm9uaWNhbF9pZC5zdHViggAAAOtPo2mCAAAAhJE3uqQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL251bWZtdF9nZXRfbG9jYWxlLnN0dWJxAAAA60+jaXEAAABK9oeIpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9nZXRfbm93LnN0dWItAAAA60+jaS0AAAD7Wv4ypAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbXNnZm10X2Zvcm1hdC5zdHViXQAAAOtPo2ldAAAAWC9ftaQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2NvbGxhdG9yX2Fzb3J0LnN0dWJwAAAA60+jaXAAAADvXopSpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbnVtZm10X3BhcnNlX2N1cnJlbmN5LnN0dWK6AAAA60+jaboAAACWp/PLpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bHR6X2dldF91bmtub3duLnN0dWI4AAAA60+jaTgAAAD83wYIpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9maWVsZF9kaWZmZXJlbmNlLnN0dWJvAAAA60+jaW8AAAA/qRDppAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZGF0ZWZtdF9nZXRfcGF0dGVybi5zdHViVQAAAOtPo2lVAAAAw1OkWKQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfZ2V0X3RpbWUuc3R1YksAAADrT6NpSwAAAOsAXQCkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfY3JlYXRlX2RlZmF1bHQuc3R1YjsAAADrT6NpOwAAAKk5Qh+kAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9jb2xsYXRvcl9nZXRfYXR0cmlidXRlLnN0dWJZAAAA60+jaVkAAAAnQwkkpAEAAAAAAABNAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvY2FsZW5kYXIvSW50bEdyZWdvcmlhbkNhbGVuZGFyLnN0dWLwBAAA60+jafAEAACCYKtUpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvY2FsZW5kYXIvSW50bENhbGVuZGFyLnN0dWLvRgAA60+jae9GAAA4K4StpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvdHJhbnNsaXRlcmF0b3JfY3JlYXRlLnN0dWKHAAAA60+jaYcAAAB3Jf7rpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvZGF0ZWZtdF9zZXRfcGF0dGVybi5zdHViXgAAAOtPo2leAAAAQy3yraQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGx0el9nZXRfZGlzcGxheV9uYW1lLnN0dWKnAAAA60+jaacAAADXaFf3pAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbXNnZm10X2dldF9lcnJvcl9tZXNzYWdlLnN0dWJTAAAA60+jaVMAAABWBVngpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9nZXRfZXJyb3JfY29kZS5zdHViTwAAAOtPo2lPAAAALCXlrqQBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL3Jlc291cmNlYnVuZGxlL1Jlc291cmNlQnVuZGxlLnN0dWJoBQAA60+jaWgFAACPK8ITpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9nZXRfbG9jYWxlLnN0dWJZAAAA60+jaVkAAACsvcAJpAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bHR6X2NvdW50X2VxdWl2YWxlbnRfaWRzLnN0dWJeAAAA60+jaV4AAAAkJwbypAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvY29sbGF0b3JfZ2V0X2Vycm9yX21lc3NhZ2Uuc3R1YlAAAADrT6NpUAAAAPNdhSOkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC91Y2hhci9JbnRsQ2hhci5zdHViSvYCAOtPo2lK9gIARNML66QBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL3Jlc291cmNlYnVuZGxlX2dldF9lcnJvcl9jb2RlLnN0dWJQAAAA60+jaVAAAADCOc1lpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvY29sbGF0b3Jfc29ydC5zdHVibwAAAOtPo2lvAAAAx42wkaQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2xvY2FsZV9nZXRfYWxsX3ZhcmlhbnRzLnN0dWJEAAAA60+jaUQAAAAeowJspAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvY29sbGF0b3Jfc29ydF93aXRoX3NvcnRfa2V5cy5zdHViWQAAAOtPo2lZAAAAJIdyX6QBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfc2V0X2ZpcnN0X2RheV9vZl93ZWVrLnN0dWLdAAAA60+jad0AAACHdIEUpAEAAAAAAABVAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvaW50bGNhbF9zZXRfbWluaW1hbF9kYXlzX2luX2ZpcnN0X3dlZWsuc3R1YuUAAADrT6Np5QAAAE0IPbCkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9jb2xsYXRvcl9nZXRfbG9jYWxlLnN0dWJUAAAA60+jaVQAAAARLzyApAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbnVtZm10X3NldF9hdHRyaWJ1dGUuc3R1Ym4AAADrT6NpbgAAAA8KWFKkAQAAAAAAAE8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9yZXNvdXJjZWJ1bmRsZV9nZXRfZXJyb3JfbWVzc2FnZS5zdHViVgAAAOtPo2lWAAAA9wbtNqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2ludGxjYWxfc2V0X2xlbmllbnQuc3R1YscAAADrT6NpxwAAAPm0XLykAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9kYXRlZm10X2Zvcm1hdF9vYmplY3Quc3R1Ys4AAADrT6NpzgAAABrKMnekAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsdHpfY3JlYXRlX3RpbWVfem9uZS5zdHViUAAAAOtPo2lQAAAAewj30KQBAAAAAAAAVwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2JyZWFraXRlcmF0b3IvSW50bENvZGVQb2ludEJyZWFrSXRlcmF0b3Iuc3R1YrsAAADrT6NpuwAAAD+N5fqkAQAAAAAAAE4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9icmVha2l0ZXJhdG9yL0ludGxCcmVha0l0ZXJhdG9yLnN0dWJMHgAA60+jaUweAABwDVdxpAEAAAAAAABXAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvYnJlYWtpdGVyYXRvci9JbnRsUnVsZUJhc2VkQnJlYWtJdGVyYXRvci5zdHVigwIAAOtPo2mDAgAAZpsZLKQBAAAAAAAATgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbnRsL2JyZWFraXRlcmF0b3IvSW50bFBhcnRzSXRlcmF0b3Iuc3R1YkAEAADrT6NpQAQAAH+mbTakAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2dldF90aW1lX3pvbmUuc3R1YlgAAADrT6NpWAAAANVDkMGkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9pbnRsY2FsX2FmdGVyLnN0dWJXAAAA60+jaVcAAADkosdVpAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvdHJhbnNsaXRlcmF0b3JfY3JlYXRlX2ludmVyc2Uuc3R1YmUAAADrT6NpZQAAAH6VMUukAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW50bC9kYXRlZm10X2dldF9lcnJvcl9jb2RlLnN0dWJPAAAA60+jaU8AAAA0rS73pAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ludGwvbG9jYWxlX2NvbXBvc2Uuc3R1YkEAAADrT6NpQQAAAH5gy9CkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2V0dGV4dC9kY2dldHRleHQuc3R1YlYAAADrT6NpVgAAAHItrFSkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2V0dGV4dC9kbmdldHRleHQuc3R1YoEAAADrT6NpgQAAAK9PjO6kAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2V0dGV4dC9nZXR0ZXh0LnN0dWI1AAAA60+jaTUAAABSOdeSpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dldHRleHQvZGdldHRleHQuc3R1YkYAAADrT6NpRgAAAB/rO42kAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2V0dGV4dC9uZ2V0dGV4dC5zdHViaAAAAOtPo2loAAAAnubZtaQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZXR0ZXh0L2RjbmdldHRleHQuc3R1YpIAAADrT6NpkgAAAJWMg5OkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2V0dGV4dC9iaW5kdGV4dGRvbWFpbi5zdHVi3wAAAOtPo2nfAAAAx8hok6QBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZXR0ZXh0L2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0LnN0dWJDAQAA60+jaUMBAABF896JpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dldHRleHQvdGV4dGRvbWFpbi5zdHVi5gAAAOtPo2nmAAAAgceV46QBAAAAAAAAMwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZXR0ZXh0L18uc3R1YkUAAADrT6NpRQAAAGjvs4CkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC92YXJpYW50X2ZpeC5zdHViOAAAAOtPo2k4AAAA3O1GiqQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jb21fZG90bmV0L3ZhcmlhbnRfb3Iuc3R1YkQAAADrT6NpRAAAAN/2U4WkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC92YXJpYW50X3JvdW5kLnN0dWJKAAAA60+jaUoAAAC7Dy6FpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvY29tX2V2ZW50X3Npbmsuc3R1YnsAAADrT6NpewAAAEIw1IWkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC9jb21fbG9hZF90eXBlbGliLnN0dWJbAAAA60+jaVsAAABnrPn/pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvdmFyaWFudF9jbXAuc3R1YngAAADrT6NpeAAAAPwYP4KkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC92YXJpYW50X2Nhc3Quc3R1YkkAAADrT6NpSQAAABEqBhCkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC92YXJpYW50X3NldF90eXBlLnN0dWJJAAAA60+jaUkAAABram+ipAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvY29tX21lc3NhZ2VfcHVtcC5zdHViSgAAAOtPo2lKAAAAj7IY/qQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jb21fZG90bmV0L3ZhcmlhbnRfZXF2LnN0dWJFAAAA60+jaUUAAACN8fo9pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvdmFyaWFudF9pbnQuc3R1YjgAAADrT6NpOAAAACg/XpmkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC9jb21fc2FmZWFycmF5X3Byb3h5LnN0dWJDAAAA60+jaUMAAAC83WoBpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvdmFyaWFudC5zdHViiAAAAOtPo2mIAAAANGJAcKQBAAAAAAAATgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jb21fZG90bmV0L3ZhcmlhbnRfZGF0ZV90b190aW1lc3RhbXAuc3R1YkcAAADrT6NpRwAAALcH676kAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC92YXJpYW50X2NhdC5zdHViRQAAAOtPo2lFAAAAahUR8qQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jb21fZG90bmV0L3ZhcmlhbnRfaW1wLnN0dWJFAAAA60+jaUUAAAAy2TZXpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvdmFyaWFudF9tb2Quc3R1YkUAAADrT6NpRQAAAFml8oukAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC9jb21fZXhjZXB0aW9uLnN0dWI/AAAA60+jaT8AAABQ5mYQpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvY29tLnN0dWKrAAAA60+jaasAAABLjc+vpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvdmFyaWFudF9hYnMuc3R1YjgAAADrT6NpOAAAADzi8tWkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC92YXJpYW50X211bC5zdHViRQAAAOtPo2lFAAAANbtb86QBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jb21fZG90bmV0L3ZhcmlhbnRfbmVnLnN0dWI4AAAA60+jaTgAAABveP7upAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvZG90bmV0LnN0dWKdAAAA60+jaZ0AAAD++GAqpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvY29tX3ByaW50X3R5cGVpbmZvLnN0dWKHAAAA60+jaYcAAACeFj9vpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvQ09NUGVyc2lzdEhlbHBlci5zdHVipwIAAOtPo2mnAgAA9qvssKQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jb21fZG90bmV0L3ZhcmlhbnRfbm90LnN0dWI4AAAA60+jaTgAAAAXRomNpAEAAAAAAABQAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvdmFyaWFudF9kYXRlX2Zyb21fdGltZXN0YW1wLnN0dWJKAAAA60+jaUoAAADkeuoTpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvdmFyaWFudF9wb3cuc3R1YkUAAADrT6NpRQAAABzXV2ekAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC9jb21fY3JlYXRlX2d1aWQuc3R1YjQAAADrT6NpNAAAAOlcQiOkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC92YXJpYW50X2dldF90eXBlLnN0dWI9AAAA60+jaT0AAADrTrJEpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvdmFyaWFudF94b3Iuc3R1YkUAAADrT6NpRQAAANiPK6WkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC92YXJpYW50X3N1Yi5zdHViRQAAAOtPo2lFAAAAmkFnM6QBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jb21fZG90bmV0L3ZhcmlhbnRfZGl2LnN0dWJFAAAA60+jaUUAAADCDsfopAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvdmFyaWFudF9pZGl2LnN0dWJGAAAA60+jaUYAAAAaaNnspAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NvbV9kb3RuZXQvdmFyaWFudF9zZXQuc3R1YmkAAADrT6NpaQAAANAJ8qikAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY29tX2RvdG5ldC92YXJpYW50X2FuZC5zdHViRQAAAOtPo2lFAAAAe3dx7qQBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jb21fZG90bmV0L2NvbV9nZXRfYWN0aXZlX29iamVjdC5zdHViXAAAAOtPo2lcAAAA8ykey6QBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jb21fZG90bmV0L3ZhcmlhbnRfYWRkLnN0dWJFAAAA60+jaUUAAACWJ1o1pAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9jc3JfbmV3LnN0dWL8AQAA60+jafwBAABhXkH9pAEAAAAAAABSAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvT3BlblNTTENlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3Quc3R1YjgAAADrT6NpOAAAAHffbVekAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX2Nzcl9zaWduLnN0dWK2AgAA60+jabYCAACe29PDpAEAAAAAAABPAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9wa2NzMTJfZXhwb3J0X3RvX2ZpbGUuc3R1YgEBAADrT6NpAQEAADT7YoKkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX3BrY3M3X3ZlcmlmeS5zdHViBgEAAOtPo2kGAQAA5n/L1aQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfcGtleV9uZXcuc3R1YloAAADrT6NpWgAAAE7onH+kAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX2RoX2NvbXB1dGVfa2V5LnN0dWJxAAAA60+jaXEAAAALNhC2pAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9zcGtpX3ZlcmlmeS5zdHViPAAAAOtPo2k8AAAAB++5TqQBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfeDUwOV9maW5nZXJwcmludC5zdHVimAAAAOtPo2mYAAAAQQicBKQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfb3Blbi5zdHVi+gAAAOtPo2n6AAAAMcy9dKQBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aC5zdHViTQAAAOtPo2lNAAAAHH7wu6QBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfcGtleV9nZXRfZGV0YWlscy5zdHVibQAAAOtPo2ltAAAARKvDB6QBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfY3NyX2V4cG9ydF90b19maWxlLnN0dWKTAAAA60+jaZMAAAA7/iFzpAEAAAAAAABNAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzLnN0dWJ/AAAA60+jaX8AAAAlS3AlpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9jbXNfcmVhZC5zdHVidQAAAOtPo2l1AAAAKPegb6QBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfY21zX3ZlcmlmeS5zdHViKAEAAOtPo2koAQAAia3h26QBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfZW5jcnlwdC5zdHVi3AAAAOtPo2ncAAAAbN9TOKQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfdmVyaWZ5LnN0dWLWAAAA60+jadYAAAA4BG8OpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9zZWFsLnN0dWLrAAAA60+jaesAAACUxEuVpAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9wa2V5X2dldF9wcml2YXRlLnN0dWLEAAAA60+jacQAAADF2SpvpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9jbXNfZW5jcnlwdC5zdHViVgIAAOtPo2lWAgAAsfAwzqQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfZ2V0X3ByaXZhdGVrZXkuc3R1YukAAADrT6Np6QAAAE5kt8GkAQAAAAAAAFAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX3g1MDlfY2hlY2tfcHJpdmF0ZV9rZXkuc3R1YsAAAADrT6NpwAAAAAxM8ROkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX2dldF9tZF9tZXRob2RzLnN0dWJgAAAA60+jaWAAAAANSaqdpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9wa2NzMTJfcmVhZC5zdHVihAAAAOtPo2mEAAAAon+XFaQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0LnN0dWL7AAAA60+jafsAAADEe7zopAEAAAAAAABNAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF94NTA5X2V4cG9ydF90b19maWxlLnN0dWKOAAAA60+jaY4AAABDCgltpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9zaWduLnN0dWLrAAAA60+jaesAAACWwLHIpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9wa2NzN19lbmNyeXB0LnN0dWIKAgAA60+jaQoCAABoKwkhpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9kaWdlc3Quc3R1YnEAAADrT6NpcQAAAH7Vko6kAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX2Ntc19zaWduLnN0dWJdAQAA60+jaV0BAABZqGg4pAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF94NTA5X3JlYWQuc3R1YmoAAADrT6NpagAAAGIoe2WkAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX3Bhc3N3b3JkX3ZlcmlmeS5zdHViiAAAAOtPo2mIAAAAQjuAKKQBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfZ2V0X2NpcGhlcl9tZXRob2RzLnN0dWJkAAAA60+jaWQAAACr4JIkpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9zcGtpX2V4cG9ydC5zdHViRAAAAOtPo2lEAAAAXf/6yKQBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfY3NyX2dldF9wdWJsaWNfa2V5LnN0dWKVAAAA60+jaZUAAABPlVjPpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF94NTA5X3BhcnNlLnN0dWKOAAAA60+jaY4AAADrJZ4cpAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9jaXBoZXJfa2V5X2xlbmd0aC5zdHViXwAAAOtPo2lfAAAAE0j0BqQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL09wZW5TU0xBc3ltbWV0cmljS2V5LnN0dWIsAAAA60+jaSwAAAB71ZSwpAEAAAAAAABNAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlLnN0dWLRAAAA60+jadEAAACcd7QjpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9wa2V5X2ZyZWUuc3R1YlsAAADrT6NpWwAAAFtqwLakAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX3Bhc3N3b3JkX2hhc2guc3R1YrAAAADrT6NpsAAAAI9sejOkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX2Vycm9yX3N0cmluZy5zdHViOQAAAOtPo2k5AAAAN69HMaQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfZ2V0X2N1cnZlX25hbWVzLnN0dWJqAAAA60+jaWoAAADoguKhpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9wa2V5X2Rlcml2ZS5zdHViBQEAAOtPo2kFAQAAf0mWR6QBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfY3NyX2dldF9zdWJqZWN0LnN0dWKZAAAA60+jaZkAAAArp3MBpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF94NTA5X2V4cG9ydC5zdHVilAAAAOtPo2mUAAAAW+ez4KQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfcGtjczdfc2lnbi5zdHViRAEAAOtPo2lEAQAA4IslmqQBAAAAAAAASwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfeDUwOV9jaGVja3B1cnBvc2Uuc3R1YrEAAADrT6NpsQAAAIL1lo6kAQAAAAAAAEwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX2dldF9jZXJ0X2xvY2F0aW9ucy5zdHViTwAAAOtPo2lPAAAA8gQ/6aQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfZ2V0X3B1YmxpY2tleS5zdHViyQAAAOtPo2nJAAAApslV86QBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfY3NyX2V4cG9ydC5zdHVimQAAAOtPo2mZAAAA2mmzgqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfZnJlZV9rZXkuc3R1YnoAAADrT6NpegAAAFwY0oWkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX3g1MDlfZnJlZS5zdHViYQAAAOtPo2lhAAAALk1J1KQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfcGtjczdfcmVhZC5zdHVibQAAAOtPo2ltAAAAEZ2heqQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfcGtjczEyX2V4cG9ydC5zdHViBwEAAOtPo2kHAQAAPUmrV6QBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfcGtleV9nZXRfcHVibGljLnN0dWKlAAAA60+jaaUAAAC61whgpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9wYmtkZjIuc3R1YpEAAADrT6NpkQAAAHOq8KikAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX3B1YmxpY19kZWNyeXB0LnN0dWL4AAAA60+jafgAAACNn3+1pAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9zcGtpX25ldy5zdHVijwAAAOtPo2mPAAAAGF0ugaQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfZGVjcnlwdC5zdHVifgEAAOtPo2l+AQAAOBsBH6QBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL09wZW5TU0xDZXJ0aWZpY2F0ZS5zdHViTAAAAOtPo2lMAAAATFlanaQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfcHVibGljX2VuY3J5cHQuc3R1YvgAAADrT6Np+AAAAP6oqiekAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BlbnNzbC9vcGVuc3NsX3g1MDlfdmVyaWZ5LnN0dWKyAAAA60+jabIAAAAFa00bpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9wa2V5X2V4cG9ydC5zdHVi1wAAAOtPo2nXAAAA2U9reaQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfcHJpdmF0ZV9lbmNyeXB0LnN0dWL7AAAA60+jafsAAAAMBZpapAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9wa2NzN19kZWNyeXB0LnN0dWIOAQAA60+jaQ4BAAAu6a3NpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wZW5zc2wvb3BlbnNzbF9jbXNfZGVjcnlwdC5zdHViNAEAAOtPo2k0AQAAikN6BaQBAAAAAAAATwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGVuc3NsL29wZW5zc2xfc3BraV9leHBvcnRfY2hhbGxlbmdlLnN0dWJOAAAA60+jaU4AAAC8v+DjpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3RpZHkvdGlkeV9yZXBhaXJfc3RyaW5nLnN0dWKBAAAA60+jaYEAAACWY7AMpAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3RpZHkvdGlkeU5vZGUuc3R1Yq8CAADrT6NprwIAAN7Rst6kAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvdGlkeS90aWR5X2dldF9zdGF0dXMuc3R1YjYAAADrT6NpNgAAADf8MzGkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvdGlkeS90aWR5X3BhcnNlX3N0cmluZy5zdHVioQAAAOtPo2mhAAAAZuEqSKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC90aWR5L3RpZHlfaXNfeGh0bWwuc3R1YjUAAADrT6NpNQAAANQ+BDCkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvdGlkeS90aWR5X2dldF9ib2R5LnN0dWI7AAAA60+jaTsAAAAp5LDupAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3RpZHkvdGlkeV9wYXJzZV9maWxlLnN0dWKdAAAA60+jaZ0AAACnX3hOpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3RpZHkvdGlkeV9nZXRfb3V0cHV0LnN0dWI5AAAA60+jaTkAAACdi0oWpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3RpZHkvdGlkeV9kaWFnbm9zZS5zdHViNQAAAOtPo2k1AAAA2d7uwqQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC90aWR5L3RpZHlfZ2V0X2h0bWxfdmVyLnN0dWI4AAAA60+jaTgAAACqtaEEpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3RpZHkvdGlkeV9yZXBhaXJfZmlsZS5zdHVinwAAAOtPo2mfAAAA57Wyp6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC90aWR5L3RpZHlfZ2V0X29wdF9kb2Muc3R1YmoAAADrT6NpagAAALgtsBSkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvdGlkeS90aWR5X2FjY2Vzc19jb3VudC5zdHViOAAAAOtPo2k4AAAAhed/+KQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC90aWR5L3RpZHlfZ2V0X2h0bWwuc3R1YjsAAADrT6NpOwAAAGfrNRykAQAAAAAAADMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvdGlkeS90aWR5LnN0dWJZDAAA60+jaVkMAABxkZ6MpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3RpZHkvdGlkeV9nZXRfcmVsZWFzZS5zdHViLwAAAOtPo2kvAAAAW5w2R6QBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC90aWR5L3RpZHlfd2FybmluZ19jb3VudC5zdHViOQAAAOtPo2k5AAAAgaMRf6QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC90aWR5L3RpZHlfZ2V0X2NvbmZpZy5zdHViPwAAAOtPo2k/AAAAudQQPaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC90aWR5L3RpZHlfaXNfeG1sLnN0dWIzAAAA60+jaTMAAAD5ke/VpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3RpZHkvdGlkeV9jb25maWdfY291bnQuc3R1YjgAAADrT6NpOAAAAJyexZekAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvdGlkeS90aWR5X2dldF9yb290LnN0dWI7AAAA60+jaTsAAABJ6fmmpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3RpZHkvdGlkeV9jbGVhbl9yZXBhaXIuc3R1YjkAAADrT6NpOQAAAGOQXf2kAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvdGlkeS90aWR5X2dldG9wdC5zdHViTgAAAOtPo2lOAAAAklxULaQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC90aWR5L3RpZHlfZXJyb3JfY291bnQuc3R1YjcAAADrT6NpNwAAAMOFnECkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvdGlkeS90aWR5X2dldF9lcnJvcl9idWZmZXIuc3R1YkUAAADrT6NpRQAAACbZK3+kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvdGlkeS90aWR5X2dldF9oZWFkLnN0dWI7AAAA60+jaTsAAADpe2CEpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N0eXBlL2N0eXBlX3B1bmN0LnN0dWIzAAAA60+jaTMAAAAh/4FepAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N0eXBlL2N0eXBlX3ByaW50LnN0dWIzAAAA60+jaTMAAADDi6ompAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N0eXBlL2N0eXBlX3NwYWNlLnN0dWIzAAAA60+jaTMAAACCxDYgpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N0eXBlL2N0eXBlX2FscGhhLnN0dWIzAAAA60+jaTMAAACmvxr4pAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N0eXBlL2N0eXBlX2NudHJsLnN0dWIzAAAA60+jaTMAAACCsKnSpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N0eXBlL2N0eXBlX2RpZ2l0LnN0dWIzAAAA60+jaTMAAADe8uewpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N0eXBlL2N0eXBlX3hkaWdpdC5zdHViNAAAAOtPo2k0AAAAGYt1p6QBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdHlwZS9jdHlwZV9sb3dlci5zdHViMwAAAOtPo2kzAAAAlZfIzKQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdHlwZS9jdHlwZV9ncmFwaC5zdHViMwAAAOtPo2kzAAAAX4Fyt6QBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdHlwZS9jdHlwZV91cHBlci5zdHViMwAAAOtPo2kzAAAAzxNtTaQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdHlwZS9jdHlwZV9hbG51bS5zdHViVQAAAOtPo2lVAAAAPTRjN6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zeXN2c2htL3NobV9wdXRfdmFyLnN0dWJWAAAA60+jaVYAAADCvtYfpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N5c3ZzaG0vc2htX2hhc192YXIuc3R1YkgAAADrT6NpSAAAADmKlL+kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3lzdnNobS9zaG1fYXR0YWNoLnN0dWJuAAAA60+jaW4AAAAJSSHqpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N5c3ZzaG0vU3lzdlNoYXJlZE1lbW9yeS5zdHViSgAAAOtPo2lKAAAASfZfK6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zeXN2c2htL3NobV9yZW1vdmUuc3R1Yj0AAADrT6NpPQAAAEIeRQakAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3lzdnNobS9zaG1fZGV0YWNoLnN0dWI9AAAA60+jaT0AAAA6UMSBpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N5c3ZzaG0vc2htX2dldF92YXIuc3R1YkkAAADrT6NpSQAAAMC1nnWkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3lzdnNobS9zaG1fcmVtb3ZlX3Zhci5zdHViSwAAAOtPo2lLAAAA2ilxBqQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZG9fc3FsaXRlL1Bkby9TcWxpdGUuc3R1Ym0GAADrT6NpbQYAAJ+ODLCkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGRvX3NxbGl0ZS9QRE9fU1FMaXRlX0V4dC5zdHVilwIAAOtPo2mXAgAA91cfGaQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94c2wvWFNMVFByb2Nlc3Nvci5zdHVirwgAAOtPo2mvCAAAX1nE/qQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9maWxlaW5mby9maW5mb19zZXRfZmxhZ3Muc3R1YiABAADrT6NpIAEAACuFNiWkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZmlsZWluZm8vZmluZm9fYnVmZmVyLnN0dWKFAQAA60+jaYUBAAA2C3JIpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ZpbGVpbmZvL2ZpbmZvLnN0dWI+AwAA60+jaT4DAAAJtosQpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ZpbGVpbmZvL2ZpbmZvX29wZW4uc3R1YhABAADrT6NpEAEAADwqAqWkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZmlsZWluZm8vbWltZV9jb250ZW50X3R5cGUuc3R1YmsAAADrT6NpawAAAAWofS6kAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZmlsZWluZm8vZmluZm9fZmlsZS5zdHViowEAAOtPo2mjAQAAuHZ6m6QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9maWxlaW5mby9maW5mb19jbG9zZS5zdHVioAAAAOtPo2mgAAAA3qDZOKQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZG9fb2RiYy9QZG8vT2RiYy5zdHViQgIAAOtPo2lCAgAArh1qkaQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL3NvY2tldF9zZWxlY3Quc3R1YoMAAADrT6NpgwAAABhaT96kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfc2V0b3B0LnN0dWKgAAAA60+jaaAAAADEiQQKpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvY2tldHMvc29ja2V0X3JlY3Ztc2cuc3R1YmAAAADrT6NpYAAAANuTifmkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfcmVjdi5zdHVifQAAAOtPo2l9AAAAG7k+9KQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL3NvY2tldF9zZXRfYmxvY2suc3R1YjwAAADrT6NpPAAAABXXPCGkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfc2V0X29wdGlvbi5zdHVihAAAAOtPo2mEAAAA4v28BKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL3NvY2tldF9iaW5kLnN0dWJXAAAA60+jaVcAAAAAJY7upAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvY2tldHMvc29ja2V0X2NyZWF0ZS5zdHViWAAAAOtPo2lYAAAAUgCWT6QBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL3NvY2tldF9zdHJlcnJvci5zdHViPQAAAOtPo2k9AAAAJ5jQiqQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL3NvY2tldF9hY2NlcHQuc3R1YkIAAADrT6NpQgAAAGoPttWkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfbGlzdGVuLnN0dWJLAAAA60+jaUsAAADaJWyEpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvY2tldHMvc29ja2V0X3JlY3Zmcm9tLnN0dWLIAAAA60+jacgAAADNNCHLpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvY2tldHMvc29ja2V0X2Ntc2dfc3BhY2Uuc3R1YlEAAADrT6NpUQAAAFynBdWkAQAAAAAAAFAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19leHBvcnQuc3R1YnQAAADrT6NpdAAAAKBQdqekAQAAAAAAAFEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19yZWxlYXNlLnN0dWJLAAAA60+jaUsAAACI5pSYpAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvY2tldHMvc29ja2V0X2V4cG9ydF9zdHJlYW0uc3R1YlgAAADrT6NpWAAAAJykaFCkAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfYWRkcmluZm9fY29ubmVjdC5zdHViUgAAAOtPo2lSAAAAfkhHt6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL3NvY2tldF9hdG1hcmsuc3R1YmgAAADrT6NpaAAAAMQlDnykAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfZ2V0b3B0LnN0dWKBAAAA60+jaYEAAAB09HpWpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvY2tldHMvc29ja2V0X2dldF9vcHRpb24uc3R1YngAAADrT6NpeAAAAF3OSZmkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfc2V0X25vbmJsb2NrLnN0dWI/AAAA60+jaT8AAADcnzBIpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvY2tldHMvc29ja2V0X2Nvbm5lY3Quc3R1Yl4AAADrT6NpXgAAAFuXhmCkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9BZGRyZXNzSW5mby5zdHViIwAAAOtPo2kjAAAAHkFBHKQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL3NvY2tldF9nZXRzb2NrbmFtZS5zdHVijgAAAOtPo2mOAAAAglBJMqQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL3NvY2tldF9zZW5kbXNnLnN0dWJfAAAA60+jaV8AAADWcXAKpAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvY2tldHMvc29ja2V0X2FkZHJpbmZvX2JpbmQuc3R1Yk8AAADrT6NpTwAAAIpJhhCkAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfYWRkcmluZm9fZXhwbGFpbi5zdHViYQAAAOtPo2lhAAAASvkMTqQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL3NvY2tldF93cml0ZS5zdHViYAAAAOtPo2lgAAAAnCmVkqQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL3NvY2tldF9jbG9zZS5zdHViOAAAAOtPo2k4AAAAvQOmraQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL1NvY2tldC5zdHViQAAAAOtPo2lAAAAAUppvBKQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL3NvY2tldF9zZW5kdG8uc3R1YokAAADrT6NpiQAAADaS8XGkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfY3JlYXRlX3BhaXIuc3R1Yo0AAADrT6NpjQAAAIEglWykAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfYWRkcmluZm9fbG9va3VwLnN0dWKJAAAA60+jaYkAAACCXHVypAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvY2tldHMvc29ja2V0X2NsZWFyX2Vycm9yLnN0dWJGAAAA60+jaUYAAABf/3tapAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvY2tldHMvc29ja2V0X2xhc3RfZXJyb3Iuc3R1YksAAADrT6NpSwAAAPSs/gakAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfc2h1dGRvd24uc3R1YmYAAADrT6NpZgAAAJGirYikAQAAAAAAAFAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19pbXBvcnQuc3R1YlMAAADrT6NpUwAAAP0cCJqkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfZ2V0cGVlcm5hbWUuc3R1Yo4AAADrT6NpjgAAALh4ArCkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfc2VuZC5zdHViYwAAAOtPo2ljAAAATi5bNKQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2NrZXRzL3NvY2tldF9jcmVhdGVfbGlzdGVuLnN0dWLPAAAA60+jac8AAAD9ATeJpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvY2tldHMvc29ja2V0X3JlYWQuc3R1YmkAAADrT6NpaQAAAMFxE2KkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29ja2V0cy9zb2NrZXRfaW1wb3J0X3N0cmVhbS5zdHViYAAAAOtPo2lgAAAAoFI3xaQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9iY21hdGgvYmNzcXJ0LnN0dWJEAAAA60+jaUQAAADrPctNpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2JjbWF0aC9iY3N1Yi5zdHViUgAAAOtPo2lSAAAAcmpE4aQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9iY21hdGgvQmNNYXRoL051bWJlci5zdHViNgYAAOtPo2k2BgAAtrxdlqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9iY21hdGgvYmNwb3dtb2Quc3R1YmkAAADrT6NpaQAAACL4PzWkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvYmNtYXRoL2JjZmxvb3Iuc3R1YlUAAADrT6NpVQAAAI6P6vykAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvYmNtYXRoL2Jjcm91bmQuc3R1Yp8AAADrT6NpnwAAABeglJ6kAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvYmNtYXRoL2JjYWRkLnN0dWJ0AAAA60+jaXQAAADLr9AdpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2JjbWF0aC9iY3NjYWxlLnN0dWI1AAAA60+jaTUAAACFnzwWpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2JjbWF0aC9iY211bC5zdHViUgAAAOtPo2lSAAAAZj2htaQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9iY21hdGgvYmNjZWlsLnN0dWJUAAAA60+jaVQAAACk9Y8epAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2JjbWF0aC9iY2Rpdm1vZC5zdHVikAAAAOtPo2mQAAAA72M3OKQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9iY21hdGgvYmNwb3cuc3R1YlUAAADrT6NpVQAAAHrv9cOkAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvYmNtYXRoL2JjZGl2LnN0dWJSAAAA60+jaVIAAADigw2gpAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2JjbWF0aC9iY2NvbXAuc3R1YlAAAADrT6NpUAAAAHTT1A2kAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvYmNtYXRoL2JjbW9kLnN0dWJSAAAA60+jaVIAAAA1qIZQpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9zdGFydF90bHMuc3R1YvEAAADrT6Np8QAAAB3wZwikAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX2dldF92YWx1ZXNfbGVuLnN0dWJtAQAA60+jaW0BAAAuKfTNpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9yZW5hbWUuc3R1YtEBAADrT6Np0QEAAKLoOxOkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX25leHRfZW50cnkuc3R1YhIBAADrT6NpEgEAACSdOZmkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX21vZF9yZXBsYWNlLnN0dWITAQAA60+jaRMBAAA9ceOnpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9kZWxldGUuc3R1Yu0AAADrT6Np7QAAAHAcUamkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX2V4b3BfcmVmcmVzaC5zdHViKQEAAOtPo2kpAQAA/LG2wKQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfbW9kX3JlcGxhY2VfZXh0LnN0dWJBAQAA60+jaUEBAACVBS8fpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvTERBUC9SZXN1bHQuc3R1YnMAAADrT6NpcwAAAMBBNz2kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9MREFQL1Jlc3VsdEVudHJ5LnN0dWJ4AAAA60+jaXgAAABvcaIopAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvTERBUC9Db25uZWN0aW9uLnN0dWJ3AAAA60+jaXcAAAA71ajRpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9hZGRfZXh0LnN0dWIxAQAA60+jaTEBAAApubRmpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9jbG9zZS5zdHVi1QAAAOtPo2nVAAAA4TZqBaQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfY291bnRfZW50cmllcy5zdHVi7QAAAOtPo2ntAAAAhDdEnaQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfcGFyc2VfcmVzdWx0LnN0dWIbAwAA60+jaRsDAABY9UPBpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9maXJzdF9hdHRyaWJ1dGUuc3R1YgUBAADrT6NpBQEAAN7LNgukAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX2dldF9hdHRyaWJ1dGVzLnN0dWI7AQAA60+jaTsBAABcNPx5pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF90NjFfdG9fODg1OS5zdHViWQAAAOtPo2lZAAAAHA7PDKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfc2VhcmNoLnN0dWJwAgAA60+jaXACAABaW0jVpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9zZXRfcmViaW5kX3Byb2Muc3R1YpUBAADrT6NplQEAAOTeZhykAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX3JlYWQuc3R1YnoCAADrT6NpegIAAAjLfjOkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX2RuMnVmbi5zdHViOgAAAOtPo2k6AAAAYrKSxaQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfZGVsZXRlX2V4dC5zdHViGwEAAOtPo2kbAQAAw36Wd6QBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfY29tcGFyZS5zdHViOwEAAOtPo2k7AQAAhHw/2aQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfZXhvcF9wYXNzd2Quc3R1YvEBAADrT6Np8QEAAIvFJTCkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX2JpbmRfZXh0LnN0dWJbAQAA60+jaVsBAACxzJaypAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9wYXJzZV9yZWZlcmVuY2Uuc3R1YosBAADrT6NpiwEAAEjvoc6kAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX2V4b3Auc3R1YvUDAADrT6Np9QMAAJbSnVSkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX21vZGlmeS5zdHViRwEAAOtPo2lHAQAA0pk4sKQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfbW9kX2RlbF9leHQuc3R1YjkBAADrT6NpOQEAAJoH/aekAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX3JlbmFtZV9leHQuc3R1YpEBAADrT6NpkQEAADRsZaukAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX21vZF9kZWwuc3R1YgsBAADrT6NpCwEAAKM2iEykAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX2ZyZWVfcmVzdWx0LnN0dWKrAAAA60+jaasAAADrTbFbpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9lc2NhcGUuc3R1YmMAAADrT6NpYwAAAERbR3SkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX3NldF9vcHRpb24uc3R1YjEBAADrT6NpMQEAAGg2TZ2kAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX2ZpcnN0X3JlZmVyZW5jZS5zdHViGgEAAOtPo2kaAQAA8TM+rKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfZ2V0X2RuLnN0dWLzAAAA60+jafMAAADRfeIwpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9maXJzdF9lbnRyeS5zdHViEgEAAOtPo2kSAQAA41OxHKQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfbW9kaWZ5X2JhdGNoLnN0dWIvAQAA60+jaS8BAAATZx1/pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9leG9wX3dob2FtaS5zdHVi/wAAAOtPo2n/AAAABCqWhKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfZXJyb3Iuc3R1YqUAAADrT6NppQAAAAZsTYqkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX21vZF9hZGQuc3R1YgsBAADrT6NpCwEAAG9RdgCkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX2Nvbm5lY3Quc3R1YtsBAADrT6Np2wEAAOPjmMWkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX2Nvbm5lY3Rfd2FsbGV0LnN0dWLlAAAA60+jaeUAAADswDVEpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9uZXh0X3JlZmVyZW5jZS5zdHViGgEAAOtPo2kaAQAAnW15f6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfZXhvcF9zeW5jLnN0dWJMAgAA60+jaUwCAAApoS8NpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9nZXRfdmFsdWVzLnN0dWKhAQAA60+jaaEBAAADROxgpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9leHBsb2RlX2RuLnN0dWJmAAAA60+jaWYAAADwJiIapAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9wYXJzZV9leG9wLnN0dWIpAgAA60+jaSkCAABhIq/kpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9nZXRfb3B0aW9uLnN0dWIxAQAA60+jaTEBAACzC5cwpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9jb3VudF9yZWZlcmVuY2VzLnN0dWLzAAAA60+jafMAAABSF38npAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9lcnIyc3RyLnN0dWI1AAAA60+jaTUAAAA6M96QpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9zYXNsX2JpbmQuc3R1YiECAADrT6NpIQIAAN/QueukAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX21vZF9hZGRfZXh0LnN0dWI5AQAA60+jaTkBAADQ/wh9pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9saXN0LnN0dWJsAgAA60+jaWwCAABlryWbpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9iaW5kLnN0dWL7AAAA60+jafsAAAAUyrjtpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9uZXh0X2F0dHJpYnV0ZS5zdHViAwEAAOtPo2kDAQAANzVcPKQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfYWRkLnN0dWIDAQAA60+jaQMBAADTYupTpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF91bmJpbmQuc3R1YrEAAADrT6NpsQAAAHPku8mkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGRhcC9sZGFwX2Vycm5vLnN0dWKfAAAA60+jaZ8AAADt0uw7pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xkYXAvbGRhcF9nZXRfZW50cmllcy5zdHViPgEAAOtPo2k+AQAADLYofKQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9sZGFwL2xkYXBfODg1OV90b190NjEuc3R1YkIAAADrT6NpQgAAALQtQQOkAQAAAAAAAFIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGlieG1sL2xpYnhtbF9zZXRfZXh0ZXJuYWxfZW50aXR5X2xvYWRlci5zdHViWgAAAOtPo2laAAAAZp9ybKQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9saWJ4bWwvbGlieG1sX2dldF9sYXN0X2Vycm9yLnN0dWJAAAAA60+jaUAAAACMtSnzpAEAAAAAAABSAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xpYnhtbC9saWJ4bWxfZ2V0X2V4dGVybmFsX2VudGl0eV9sb2FkZXIuc3R1YlQAAADrT6NpVAAAAGGHAkGkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGlieG1sL2xpYnhtbF9nZXRfZXJyb3JzLnN0dWIvAAAA60+jaS8AAADcHvDrpAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xpYnhtbC9saWJ4bWxfdXNlX2ludGVybmFsX2Vycm9ycy5zdHViTwAAAOtPo2lPAAAAbqF1OKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9saWJ4bWwvTGliWE1MRXJyb3Iuc3R1Yj8AAADrT6NpPwAAALeXDg+kAQAAAAAAAE0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGlieG1sL2xpYnhtbF9kaXNhYmxlX2VudGl0eV9sb2FkZXIuc3R1YmAAAADrT6NpYAAAAMHEzvykAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbGlieG1sL2xpYnhtbF9zZXRfc3RyZWFtc19jb250ZXh0LnN0dWJfAAAA60+jaV8AAABw4XUrpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2xpYnhtbC9saWJ4bWxfY2xlYXJfZXJyb3JzLnN0dWIwAAAA60+jaTAAAAAnkqi8pAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wY2FjaGUvb3BjYWNoZV9jb21waWxlX2ZpbGUuc3R1YkEAAADrT6NpQQAAADrDkdKkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BjYWNoZS9vcGNhY2hlX2ppdF9ibGFja2xpc3Quc3R1YlQAAADrT6NpVAAAAO2H1rmkAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb3BjYWNoZS9vcGNhY2hlX2dldF9jb25maWd1cmF0aW9uLnN0dWJUAAAA60+jaVQAAAB6+N0DpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29wY2FjaGUvb3BjYWNoZV9yZXNldC5zdHViTAAAAOtPo2lMAAAAdYuJ9qQBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGNhY2hlL29wY2FjaGVfaXNfc2NyaXB0X2NhY2hlZC5zdHViRQAAAOtPo2lFAAAAZMv2JaQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGNhY2hlL29wY2FjaGVfaW52YWxpZGF0ZS5zdHViVAAAAOtPo2lUAAAA8rq3MaQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vcGNhY2hlL29wY2FjaGVfZ2V0X3N0YXR1cy5zdHViaQAAAOtPo2lpAAAAWvhIIqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY3JlL3ByZWdfbWF0Y2guc3R1Yr4AAADrT6NpvgAAAK0MtCukAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGNyZS9wcmVnX3NwbGl0LnN0dWKGAAAA60+jaYYAAAB97ZhYpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjcmUvcHJlZ19sYXN0X2Vycm9yX21zZy5zdHViMgAAAOtPo2kyAAAAtHTuS6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY3JlL3ByZWdfbWF0Y2hfYWxsLnN0dWKgAAAA60+jaaAAAADneLJepAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjcmUvcHJlZ19yZXBsYWNlX2NhbGxiYWNrLnN0dWLNAAAA60+jac0AAADPjPLRpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjcmUvcHJlZ19xdW90ZS5zdHViTwAAAOtPo2lPAAAAqqktrKQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY3JlL3ByZWdfZ3JlcC5zdHViWgAAAOtPo2laAAAArY/oB6QBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY3JlL3ByZWdfcmVwbGFjZV9jYWxsYmFja19hcnJheS5zdHVitAAAAOtPo2m0AAAAkhc/M6QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY3JlL3ByZWdfbGFzdF9lcnJvci5zdHViKwAAAOtPo2krAAAAOXtqDKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wY3JlL3ByZWdfZmlsdGVyLnN0dWK6AAAA60+jaboAAABgRtNIpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BjcmUvcHJlZ19yZXBsYWNlLnN0dWLfAAAA60+jad8AAACb+zwBpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bkby9QRE9FeGNlcHRpb24uc3R1YloAAADrT6NpWgAAALfyszSkAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGRvL1BET1Jvdy5zdHViHgAAAOtPo2keAAAA06ohMqQBAAAAAAAAMQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZG8vUERPLnN0dWJiWgAA60+jaWJaAAAtHjCFpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bkby9wZG9fZHJpdmVycy5zdHViQAAAAOtPo2lAAAAAxUMWtKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZG8vUERPU3RhdGVtZW50LnN0dWJLCwAA60+jaUsLAACYBHjSpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpbG9nb2ZmLnN0dWJ8AAAA60+jaXwAAADErDB5pAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX3NldF9jbGllbnRfaWRlbnRpZmllci5zdHVidwAAAOtPo2l3AAAA9XOek6QBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9jb2xsZWN0aW9uX3NpemUuc3R1Yk8AAADrT6NpTwAAAFipqJCkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfc2V0X2VkaXRpb24uc3R1YjsAAADrT6NpOwAAAD9yq6KkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lsb2dvbi5zdHVi4wAAAOtPo2njAAAAe/FjMqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9maWVsZF90eXBlLnN0dWJ3AAAA60+jaXcAAACQ00cfpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX3NlcnZlcl92ZXJzaW9uLnN0dWJlAAAA60+jaWUAAACIjLispAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2ZyZWVfZGVzY3JpcHRvci5zdHViPAAAAOtPo2k8AAAAIyAPn6QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaWRlZmluZWJ5bmFtZS5zdHVitAAAAOtPo2m0AAAAD5aai6QBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaWNvbGxhc3NpZ25lbGVtLnN0dWKiAAAA60+jaaIAAAAKS1YXpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2ZyZWVfc3RhdGVtZW50LnN0dWJbAAAA60+jaVsAAAArnjYrpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpY2FuY2VsLnN0dWJ6AAAA60+jaXoAAABWX6+dpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2xvYl9zYXZlLnN0dWJUAAAA60+jaVQAAAC3eUQqpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2xvYl9jb3B5LnN0dWJYAAAA60+jaVgAAADbhdGapAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpbG9hZGxvYi5zdHViaQAAAOtPo2lpAAAAI2WYPaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaXJvd2NvdW50LnN0dWKDAAAA60+jaYMAAADUp7OWpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2Npc2F2ZWxvYi5zdHVigAAAAOtPo2mAAAAAJXk876QBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaXdyaXRlbG9idG9maWxlLnN0dWKmAAAA60+jaaYAAACW0a8HpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpcmVzdWx0LnN0dWKPAAAA60+jaY8AAACvTdg7pAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX3Jlc3VsdC5zdHViaAAAAOtPo2loAAAAR/4lyKQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9mZXRjaF9vYmplY3Quc3R1Yo4AAADrT6NpjgAAAFZMV82kAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfZnJlZV9jdXJzb3Iuc3R1YnkAAADrT6NpeQAAAHPa61GkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfZmllbGRfc2NhbGUuc3R1YnEAAADrT6NpcQAAAKSg0vukAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lyb2xsYmFjay5zdHVigAAAAOtPo2mAAAAAox6HuKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9jb21taXQuc3R1YlUAAADrT6NpVQAAAKLuJtCkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lubG9nb24uc3R1YugAAADrT6Np6AAAAGQLC1ykAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfZnJlZV9jb2xsZWN0aW9uLnN0dWJKAAAA60+jaUoAAAC+TXx5pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2Nsb3NlLnN0dWJVAAAA60+jaVUAAAAnXk7rpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2xvYl9lcmFzZS5zdHViZQAAAOtPo2llAAAAhcLu96QBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaWZldGNoLnN0dWJ4AAAA60+jaXgAAAAd0hzppAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX3JlZ2lzdGVyX3RhZl9jYWxsYmFjay5zdHVieQAAAOtPo2l5AAAAmU4KpaQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9iaW5kX2FycmF5X2J5X25hbWUuc3R1YtYAAADrT6Np1gAAANleJAekAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfbG9iX2xvYWQuc3R1Yj0AAADrT6NpPQAAAOYWhq+kAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2ljb2x1bW5wcmVjaXNpb24uc3R1YqUAAADrT6NppQAAAAPHL22kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfbG9iX3RydW5jYXRlLnN0dWJKAAAA60+jaUoAAADVFH8TpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2Nvbm5lY3Quc3R1YsEAAADrT6NpwQAAAGJdbfKkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2ljb2xsbWF4LnN0dWJ6AAAA60+jaXoAAACq8uwspAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpZnJlZXN0YXRlbWVudC5zdHViiQAAAOtPo2mJAAAAZbYMv6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9mZXRjaF9hbGwuc3R1YtQAAADrT6Np1AAAACiYPzGkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lzdGF0ZW1lbnR0eXBlLnN0dWKRAAAA60+jaZEAAABhvsOFpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX3NldF9jbGllbnRfaW5mby5zdHVidwAAAOtPo2l3AAAA8dFKOKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9sb2JfcmV3aW5kLnN0dWI3AAAA60+jaTcAAABUNlKppAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX25ld19jdXJzb3Iuc3R1YnEAAADrT6NpcQAAAMoN5sqkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfZmllbGRfdHlwZV9yYXcuc3R1YnQAAADrT6NpdAAAACvAl2ukAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfbG9iX2lzX2VxdWFsLnN0dWJJAAAA60+jaUkAAABTxlngpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2RlZmluZV9ieV9uYW1lLnN0dWKpAAAA60+jaakAAABeuNmspAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX3NldF9hY3Rpb24uc3R1YmkAAADrT6NpaQAAAETDoNakAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2ljb2xsc2l6ZS5zdHVifAAAAOtPo2l8AAAA2Qe+waQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9sb2JfdGVsbC5zdHViOgAAAOtPo2k6AAAAec1L5KQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9maWVsZF9wcmVjaXNpb24uc3R1YnUAAADrT6NpdQAAAIwf2pmkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lnZXRidWZmZXJpbmdsb2Iuc3R1YjsAAADrT6NpOwAAAP1kp8ikAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfZmV0Y2hfcm93LnN0dWJdAAAA60+jaV0AAADSuvfepAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2Npc2V0YnVmZmVyaW5nbG9iLnN0dWJHAAAA60+jaUcAAABQRDDQpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpY29sdW1uaXNudWxsLnN0dWKbAAAA60+jaZsAAADKDteEpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX3N0YXRlbWVudF90eXBlLnN0dWJjAAAA60+jaWMAAABphiVIpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX25ld19jb2xsZWN0aW9uLnN0dWKYAAAA60+jaZgAAADtNOQNpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX25ld19jb25uZWN0LnN0dWLBAAAA60+jacEAAADhcUi4pAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2ZldGNoX2Fzc29jLnN0dWJfAAAA60+jaV8AAACuymm9pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2Npc2VydmVydmVyc2lvbi5zdHVikwAAAOtPo2mTAAAA8MkUaKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9sb2JfaW1wb3J0LnN0dWJJAAAA60+jaUkAAAA5NerWpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpbmV3Y3Vyc29yLnN0dWKXAAAA60+jaZcAAAB0m9WjpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2Npc2F2ZWxvYmZpbGUuc3R1YnkAAADrT6NpeQAAAFPzunCkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2liaW5kYnluYW1lLnN0dWLFAAAA60+jacUAAACv3Lh0pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpY29sbHRyaW0uc3R1YoEAAADrT6NpgQAAAJS8AaekAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfZmllbGRfaXNfbnVsbC5zdHVibgAAAOtPo2luAAAA/uVK96QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaWNvbHVtbnR5cGUuc3R1YqIAAADrT6NpogAAAL9GDYGkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lmZXRjaGludG8uc3R1YqQAAADrT6NppAAAACWx7hOkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfZXJyb3Iuc3R1YpgAAADrT6NpmAAAAMBZicCkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfY29sbGVjdGlvbl9hcHBlbmQuc3R1YlsAAADrT6NpWwAAAK+Gle2kAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfc2V0X21vZHVsZV9uYW1lLnN0dWJsAAAA60+jaWwAAACUz29npAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2xvYl9yZWFkLnN0dWJKAAAA60+jaUoAAACdwBmJpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2ZpZWxkX25hbWUuc3R1YnMAAADrT6NpcwAAAKmdJcmkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfbnVtX3Jvd3Muc3R1YloAAADrT6NpWgAAAKcVC8akAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lmcmVlY29sbGVjdGlvbi5zdHVifQAAAOtPo2l9AAAABX6AYaQBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9jb2xsZWN0aW9uX2VsZW1lbnRfYXNzaWduLnN0dWJvAAAA60+jaW8AAADSQcOApAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpZmV0Y2hzdGF0ZW1lbnQuc3R1Yv8AAADrT6Np/wAAAAvFZXikAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9PQ0lMb2Iuc3R1YjwNAADrT6NpPA0AAPvqB8SkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfc2V0X2NhbGxfdGltZW91dC5zdHVibQAAAOtPo2ltAAAAEvevMqQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaW5ld2NvbGxlY3Rpb24uc3R1YsYAAADrT6NpxgAAAKWrhxGkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfbnVtX2ZpZWxkcy5zdHViVgAAAOtPo2lWAAAAq1R3+KQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9mZXRjaC5zdHViUgAAAOtPo2lSAAAA9Sb31aQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9zZXRfcHJlZmV0Y2guc3R1YmQAAADrT6NpZAAAANenGeWkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2ljb2xsZ2V0ZWxlbS5zdHVioAAAAOtPo2mgAAAAkSL/GqQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9wYXJzZS5zdHVieQAAAOtPo2l5AAAAsKTcw6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9maWVsZF9zaXplLnN0dWJwAAAA60+jaXAAAABIM+jOpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX25ld19kZXNjcmlwdG9yLnN0dWJ8AAAA60+jaXwAAAAQQyLspAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpZnJlZWN1cnNvci5zdHVihgAAAOtPo2mGAAAAYFnLJ6QBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV91bnJlZ2lzdGVyX3RhZl9jYWxsYmFjay5zdHViZgAAAOtPo2lmAAAAGrrtxqQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaXBhcnNlLnN0dWKbAAAA60+jaZsAAACIuFdbpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpY29sdW1uc2NhbGUuc3R1Yp0AAADrT6NpnQAAAEXnRvekAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2llcnJvci5zdHViqwAAAOtPo2mrAAAAgs1fX6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaWNvbHVtbnR5cGVyYXcuc3R1YqIAAADrT6NpogAAAK1IdcOkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfbG9iX3NpemUuc3R1YjoAAADrT6NpOgAAACETMDqkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2ludW1jb2xzLnN0dWJ+AAAA60+jaX4AAABOWaO7pAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX3Bjb25uZWN0LnN0dWK+AAAA60+jab4AAACG4yt2pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2V4ZWN1dGUuc3R1YncAAADrT6NpdwAAAKxIar2kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2ljb2x1bW5uYW1lLnN0dWKeAAAA60+jaZ4AAACrtL46pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2xvYl9lb2Yuc3R1YjQAAADrT6NpNAAAAEQsqG6kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2ljb2xsYXBwZW5kLnN0dWKKAAAA60+jaYoAAAAxNfyhpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpcGFzc3dvcmRjaGFuZ2Uuc3R1YuUAAADrT6Np5QAAAI7jpBakAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfbG9iX2ZsdXNoLnN0dWJFAAAA60+jaUUAAAChgsWjpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2xvYl93cml0ZS5zdHViXgAAAOtPo2leAAAAFjhr/aQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9jb2xsZWN0aW9uX2Fzc2lnbi5zdHViWgAAAOtPo2laAAAArPYakKQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9nZXRfaW1wbGljaXRfcmVzdWx0c2V0LnN0dWJ7AAAA60+jaXsAAAACos4cpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2NhbmNlbC5zdHViUwAAAOtPo2lTAAAAkITD4qQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaXBsb2dvbi5zdHVi5QAAAOtPo2nlAAAA/KbDPKQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9zZXRfZGJfb3BlcmF0aW9uLnN0dWJvAAAA60+jaW8AAAAsfQVipAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpbmV3ZGVzY3JpcHRvci5zdHViqgAAAOtPo2mqAAAA4MqGSKQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9jbGllbnRfdmVyc2lvbi5zdHViMQAAAOtPo2kxAAAAERWd56QBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9zZXRfcHJlZmV0Y2hfbG9iLnN0dWKGAAAA60+jaYYAAACC8Ak8pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2JpbmRfYnlfbmFtZS5zdHVimgAAAOtPo2maAAAAzlr0+aQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9sb2JfZXhwb3J0LnN0dWJzAAAA60+jaXMAAAC7SD6qpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpY29tbWl0LnN0dWJ8AAAA60+jaXwAAACL1s3SpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvT0NJQ29sbGVjdGlvbi5zdHViDwUAAOtPo2kPBQAA4XFYXaQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9sb2Jfc2Vlay5zdHViXgAAAOtPo2leAAAA6RM13aQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9mZXRjaF9hcnJheS5zdHViiAAAAOtPo2mIAAAAilEHiqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaV9jb2xsZWN0aW9uX3RyaW0uc3R1YlQAAADrT6NpVAAAACsTlVOkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lzZXRwcmVmZXRjaC5zdHVikAAAAOtPo2mQAAAAvTmrFqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaWZyZWVkZXNjLnN0dWJpAAAA60+jaWkAAAB0RA4opAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2NvbGxlY3Rpb25fbWF4LnN0dWJOAAAA60+jaU4AAABwnOhvpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX3JvbGxiYWNrLnN0dWJXAAAA60+jaVcAAABVRNpdpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX2xvYl9hcHBlbmQuc3R1YkUAAADrT6NpRQAAALXSkjykAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lleGVjdXRlLnN0dWKfAAAA60+jaZ8AAAAYBHXqpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29jaTgvb2NpX3Bhc3N3b3JkX2NoYW5nZS5zdHViugAAAOtPo2m6AAAAy1DuqqQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vY2k4L29jaWNvbHVtbnNpemUuc3R1YpsAAADrT6NpmwAAADACD7qkAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2NpOC9vY2lfY29sbGVjdGlvbl9lbGVtZW50X2dldC5zdHVicAAAAOtPo2lwAAAA694M7aQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfbnVtX3JlY2VudC5zdHViqQAAAOtPo2mpAAAARf82N6QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfc2Nhbi5zdHViTwEAAOtPo2lPAQAAXkJlTaQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfZmV0Y2h0ZXh0LnN0dWItAQAA60+jaS0BAACqZXKLpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9zZWFyY2guc3R1Yi0BAADrT6NpLQEAAFItPGqkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX3V0Zjguc3R1YkEAAADrT6NpQQAAAO6CC3SkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2xpc3Quc3R1YvUAAADrT6Np9QAAAFIZRcikAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2lzX29wZW4uc3R1YlAAAADrT6NpUAAAAI+oG3qkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9JTUFQL0Nvbm5lY3Rpb24uc3R1YncAAADrT6NpdwAAAMyRXmakAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX3FwcmludC5zdHViPgAAAOtPo2k+AAAAuQSc/aQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfY2xvc2Uuc3R1Yi0BAADrT6NpLQEAAEqI3l2kAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2RlbGV0ZW1haWxib3guc3R1YtMAAADrT6Np0wAAAKUqyaekAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2ZldGNoYm9keS5zdHViHwEAAOtPo2kfAQAA7bskDqQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfdWlkLnN0dWLLAAAA60+jacsAAACCFSq9pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9sc3ViLnN0dWL1AAAA60+jafUAAACoHAndpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9nZXRfcXVvdGFyb290LnN0dWLhAAAA60+jaeEAAACExb7mpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9oZWFkZXJpbmZvLnN0dWJDAQAA60+jaUMBAAB9VvZApAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9iaW5hcnkuc3R1Yj4AAADrT6NpPgAAAL9zFuakAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2hlYWRlcnMuc3R1YrMAAADrT6NpswAAAGEM4xCkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX3N0YXR1cy5zdHViAAEAAOtPo2kAAQAAKCUy9qQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfc2Nhbm1haWxib3guc3R1Yl0BAADrT6NpXQEAAD+k0eykAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX3RpbWVvdXQuc3R1YlEAAADrT6NpUQAAAM+UbtCkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX21pbWVfaGVhZGVyX2RlY29kZS5zdHViUAAAAOtPo2lQAAAAHnBscqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfbWFpbF9jb3B5LnN0dWIXAQAA60+jaRcBAADW/XT2pAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9jbGVhcmZsYWdfZnVsbC5zdHViqgEAAOtPo2mqAQAAxvdj2qQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfbXNnbm8uc3R1YsMAAADrT6NpwwAAABxeNy6kAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX3RocmVhZC5zdHVi3QAAAOtPo2ndAAAAdryHV6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfdXRmN19kZWNvZGUuc3R1YkMAAADrT6NpQwAAAPDZYjWkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2xpc3RzdWJzY3JpYmVkLnN0dWI5AQAA60+jaTkBAAC9Pzk6pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9yZW5hbWUuc3R1YhkBAADrT6NpGQEAAIEeWNakAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2ZldGNobWltZS5zdHViHwEAAOtPo2kfAQAA3CKPraQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfZ2V0YWNsLnN0dWLTAAAA60+jadMAAAC/BqdrpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9saXN0bWFpbGJveC5zdHViMwEAAOtPo2kzAQAAaLPIa6QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfb3Blbi5zdHVigwEAAOtPo2mDAQAAB9tE/aQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfbGlzdHNjYW4uc3R1Yh8BAADrT6NpHwEAACFJ4NukAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX3NvcnQuc3R1Yn0BAADrT6NpfQEAAK0tP9ykAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2RlbGV0ZS5zdHVicgEAAOtPo2lyAQAAF8eWe6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfbWFpbF9tb3ZlLnN0dWIXAQAA60+jaRcBAAAHiCnUpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9zZXRmbGFnX2Z1bGwuc3R1YqQBAADrT6NppAEAAHH3aEGkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2ZldGNoX292ZXJ2aWV3LnN0dWIFAQAA60+jaQUBAACVBiuHpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9nZXRfcXVvdGEuc3R1YkkBAADrT6NpSQEAAARSzDykAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2JvZHkuc3R1YvMAAADrT6Np8wAAAPi8FoCkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2dldG1haWxib3hlcy5zdHViBQEAAOtPo2kFAQAA8OoZ06QBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfcmVuYW1lbWFpbGJveC5zdHVi5QAAAOtPo2nlAAAAoP04UKQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfbWFpbC5zdHViwwAAAOtPo2nDAAAAY45wfKQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfY3JlYXRlbWFpbGJveC5zdHVi0wAAAOtPo2nTAAAAIx6nJaQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfcmZjODIyX3BhcnNlX2Fkcmxpc3Quc3R1Yl8AAADrT6NpXwAAAIrp/GOkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX21haWxfY29tcG9zZS5zdHViVAAAAOtPo2lUAAAA6f4woqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfcmVvcGVuLnN0dWINAQAA60+jaQ0BAAA3Om+cpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF84Yml0LnN0dWI8AAAA60+jaTwAAADbwKVXpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9zZXRfcXVvdGEuc3R1YvcAAADrT6Np9wAAANPDHpOkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX21haWxib3htc2dpbmZvLnN0dWK9AAAA60+jab0AAAAyOObipAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF91bnN1YnNjcmliZS5zdHVizwAAAOtPo2nPAAAAJ4x7SqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfY2hlY2suc3R1YrcAAADrT6NptwAAALoTPzikAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX3JmYzgyMl9wYXJzZV9oZWFkZXJzLnN0dWJwAAAA60+jaXAAAAD5EMOzpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9sYXN0X2Vycm9yLnN0dWI0AAAA60+jaTQAAADhGusGpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9zYXZlYm9keS5zdHVidQEAAOtPo2l1AQAAUYafcKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfdW5kZWxldGUuc3R1YngBAADrT6NpeAEAAKaKPiSkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2Vycm9ycy5zdHViLwAAAOtPo2kvAAAAnXKnnaQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfcGluZy5zdHVinwAAAOtPo2mfAAAASUD5QKQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfZmV0Y2hoZWFkZXIuc3R1YgEBAADrT6NpAQEAAB//o/CkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2JvZHlzdHJ1Y3Quc3R1YhQBAADrT6NpFAEAAPoKWvukAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX3NldGFjbC5zdHViBwEAAOtPo2kHAQAAxxE5dqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfYmFzZTY0LnN0dWI+AAAA60+jaT4AAAC+VBsnpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9hcHBlbmQuc3R1YlUBAADrT6NpVQEAALPvKF6kAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2FsZXJ0cy5zdHViLwAAAOtPo2kvAAAAEKmKoaQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfbnVtX21zZy5zdHVirwAAAOtPo2mvAAAAYpkx5qQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfZ2Muc3R1YhgBAADrT6NpGAEAACHXsOikAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX211dGY3X3RvX3V0Zjguc3R1YkUAAADrT6NpRQAAAKsaOtykAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX3V0ZjhfdG9fbXV0Zjcuc3R1YlwAAADrT6NpXAAAAMXMDmikAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2V4cHVuZ2Uuc3R1YgMBAADrT6NpAwEAABHOoaWkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX2dldHN1YnNjcmliZWQuc3R1YgcBAADrT6NpBwEAAB7/75akAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaW1hcC9pbWFwX3V0ZjdfZW5jb2RlLnN0dWI9AAAA60+jaT0AAABOiSARpAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9yZmM4MjJfd3JpdGVfYWRkcmVzcy5zdHVicQAAAOtPo2lxAAAAiQ7ZuaQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfc3Vic2NyaWJlLnN0dWLLAAAA60+jacsAAAAtlWaPpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ltYXAvaW1hcF9mZXRjaHN0cnVjdHVyZS5zdHViDQEAAOtPo2kNAQAAtdJg66QBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9pbWFwL2ltYXBfY3JlYXRlLnN0dWIHAQAA60+jaQcBAACzZTbppAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X2FjY2Vzcy5zdHViUAAAAOtPo2lQAAAAaQAZjKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wb3NpeC9wb3NpeF9zeXNjb25mLnN0dWJNAAAA60+jaU0AAADb8YhYpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X2dldGxvZ2luLnN0dWJPAAAA60+jaU8AAABeZBdIpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X2dldHB3bmFtLnN0dWJZAAAA60+jaVkAAABrONVQpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X2dldHBnaWQuc3R1YlIAAADrT6NpUgAAAAyHNGWkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfaW5pdGdyb3Vwcy5zdHViYwAAAOtPo2ljAAAAmVlX+6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wb3NpeC9wb3NpeF9nZXRwaWQuc3R1YigAAADrT6NpKAAAALeJkyGkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfc2V0cGdpZC5zdHViVwAAAOtPo2lXAAAA788lTqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wb3NpeC9wb3NpeF9lYWNjZXNzLnN0dWJvAAAA60+jaW8AAABU5GsnpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X3NldHNpZC5zdHViOwAAAOtPo2k7AAAAuoQ6fKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wb3NpeC9wb3NpeF9nZXRjd2Quc3R1YjEAAADrT6NpMQAAAL/eSVukAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfZnBhdGhjb25mLnN0dWKmAAAA60+jaaYAAACxPNAmpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X2dldHJsaW1pdC5zdHViHwEAAOtPo2kfAQAAKwUH+aQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wb3NpeC9wb3NpeF9wYXRoY29uZi5zdHVibQAAAOtPo2ltAAAA8UxiK6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wb3NpeC9wb3NpeF9nZXRzaWQuc3R1YlcAAADrT6NpVwAAAIR4j3ikAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfdW5hbWUuc3R1Yk0AAADrT6NpTQAAACJocpKkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfc2V0cmxpbWl0LnN0dWJ4AAAA60+jaXgAAABoEXAMpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X3R0eW5hbWUuc3R1YnUAAADrT6NpdQAAALmf8VGkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfa2lsbC5zdHViZQAAAOtPo2llAAAAmu5uMaQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wb3NpeC9wb3NpeF9nZXRwcGlkLnN0dWIpAAAA60+jaSkAAAD5kd7WpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X2dldGV1aWQuc3R1YikAAADrT6NpKQAAAFDemCWkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfZXJybm8uc3R1YkoAAADrT6NpSgAAAJirvsekAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfc3RyZXJyb3Iuc3R1YjwAAADrT6NpPAAAAPj3LqWkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfZ2V0dWlkLnN0dWIoAAAA60+jaSgAAADa5zClpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X2dldGdyZ2lkLnN0dWJWAAAA60+jaVYAAAD+3im0pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X2dldGdyb3Vwcy5zdHViZwAAAOtPo2lnAAAAku9mS6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wb3NpeC9wb3NpeF9jdGVybWlkLnN0dWJGAAAA60+jaUYAAABRb00CpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X3NldGVnaWQuc3R1YksAAADrT6NpSwAAAJWXckukAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfc2V0ZXVpZC5zdHViSgAAAOtPo2lKAAAAd3CFcKQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wb3NpeC9wb3NpeF9nZXRfbGFzdF9lcnJvci5zdHViNwAAAOtPo2k3AAAAQ8DGN6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wb3NpeC9wb3NpeF9pc2F0dHkuc3R1YmUAAADrT6NpZQAAANNO3PqkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfbWtub2Quc3R1Yn0AAADrT6NpfQAAAAM0HAakAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfZ2V0cHd1aWQuc3R1YlUAAADrT6NpVQAAAPo735akAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfc2V0Z2lkLnN0dWI2AAAA60+jaTYAAABo2nTBpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X2dldGdybmFtLnN0dWJVAAAA60+jaVUAAACl7SJ5pAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X2dldGVnaWQuc3R1YikAAADrT6NpKQAAAJEmRKKkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfbWtmaWZvLnN0dWJeAAAA60+jaV4AAAB5rKwbpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X2dldHBncnAuc3R1YjAAAADrT6NpMAAAAHiJoqekAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfdGltZXMuc3R1YkYAAADrT6NpRgAAAOVf+3akAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcG9zaXgvcG9zaXhfc2V0dWlkLnN0dWI1AAAA60+jaTUAAACS5j7upAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Bvc2l4L3Bvc2l4X2dldGdpZC5zdHViLwAAAOtPo2kvAAAAZkmgRaQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zeXN2bXNnL21zZ19zZXRfcXVldWUuc3R1Yk8AAADrT6NpTwAAAN6Vgj6kAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3lzdm1zZy9tc2dfcmVjZWl2ZS5zdHViIgEAAOtPo2kiAQAAcxAtH6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zeXN2bXNnL21zZ19nZXRfcXVldWUuc3R1Yl4AAADrT6NpXgAAAIUrdS6kAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3lzdm1zZy9tc2dfc2VuZC5zdHVi6QAAAOtPo2npAAAALJ2inaQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zeXN2bXNnL21zZ19xdWV1ZV9leGlzdHMuc3R1YjUAAADrT6NpNQAAAB96vWykAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3lzdm1zZy9tc2dfc3RhdF9xdWV1ZS5zdHViSgAAAOtPo2lKAAAAuMd+iaQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zeXN2bXNnL21zZ19yZW1vdmVfcXVldWUuc3R1YkUAAADrT6NpRQAAABy/n7GkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3lzdm1zZy9TeXN2TWVzc2FnZVF1ZXVlLnN0dWJKAAAA60+jaUoAAABb3TZNpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9EaXJlY3RvcnlJdGVyYXRvci5zdHViIQUAAOtPo2khBQAAadtFQ6QBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvc3BsX2F1dG9sb2FkLnN0dWJXAAAA60+jaVcAAAA1rbI9pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9jbGFzc191c2VzLnN0dWKZAAAA60+jaZkAAABD/8sPpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9QYXJlbnRJdGVyYXRvci5zdHViNwEAAOtPo2k3AQAApMNtbKQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvQXJyYXlJdGVyYXRvci5zdHVitBIAAOtPo2m0EgAAdeIOUKQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvUmVjdXJzaXZlQ2FjaGluZ0l0ZXJhdG9yLnN0dWLUAQAA60+jadQBAADmyCmZpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9HbG9iSXRlcmF0b3Iuc3R1YmMBAADrT6NpYwEAAA2huaOkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL1NwbEZpeGVkQXJyYXkuc3R1YugGAADrT6Np6AYAAH0xgm2kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL1JlY3Vyc2l2ZUl0ZXJhdG9yLnN0dWIZAQAA60+jaRkBAACWtIzbpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9Mb2dpY0V4Y2VwdGlvbi5zdHViYwAAAOtPo2ljAAAAVdD6O6QBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvU3BsU3RhY2suc3R1YjcAAADrT6NpNwAAAD7J2AGkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL1NwbERvdWJseUxpbmtlZExpc3Quc3R1YnIQAADrT6NpchAAAL8YELqkAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL1NwbFF1ZXVlLnN0dWKLAQAA60+jaYsBAAB001a+pAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9zcGxfYXV0b2xvYWRfdW5yZWdpc3Rlci5zdHViRgAAAOtPo2lGAAAAhLrAV6QBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvY2xhc3NfcGFyZW50cy5zdHVinAAAAOtPo2mcAAAAl0x3SKQBAAAAAAAATQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvUmVjdXJzaXZlQ2FsbGJhY2tGaWx0ZXJJdGVyYXRvci5zdHViCQIAAOtPo2kJAgAAOmlyJqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvU3BsRmlsZUluZm8uc3R1YvgOAADrT6Np+A4AAKHAklmkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL1NwbFRlbXBGaWxlT2JqZWN0LnN0dWKIAAAA60+jaYgAAACdomh2pAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9TZWVrYWJsZUl0ZXJhdG9yLnN0dWKhAAAA60+jaaEAAAAXsBfWpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9TcGxTdWJqZWN0LnN0dWJqAQAA60+jaWoBAACTcoTPpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9pdGVyYXRvcl90b19hcnJheS5zdHVi2QAAAOtPo2nZAAAAOjZZ2KQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvT3V0T2ZCb3VuZHNFeGNlcHRpb24uc3R1YlEAAADrT6NpUQAAACQdxSKkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL0RvbWFpbkV4Y2VwdGlvbi5zdHViSgAAAOtPo2lKAAAArnxIUqQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvRW1wdHlJdGVyYXRvci5zdHViagIAAOtPo2lqAgAAR9qB3aQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvc3BsX29iamVjdF9oYXNoLnN0dWI8AAAA60+jaTwAAAB4frmJpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9TcGxIZWFwLnN0dWJaBgAA60+jaVoGAAA0WWCEpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9BcHBlbmRJdGVyYXRvci5zdHViiwMAAOtPo2mLAwAAWVT3gqQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvTXVsdGlwbGVJdGVyYXRvci5zdHViaQoAAOtPo2lpCgAAY1jkjKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvQXJyYXlPYmplY3Quc3R1Yl0OAADrT6NpXQ4AAKLaX4OkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL0l0ZXJhdG9ySXRlcmF0b3Iuc3R1YiwDAADrT6NpLAMAAMZo57WkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL1NwbE9iamVjdFN0b3JhZ2Uuc3R1YlgNAADrT6NpWA0AAPDipcmkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL05vUmV3aW5kSXRlcmF0b3Iuc3R1YpACAADrT6NpkAIAALZLbZCkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL0NhY2hpbmdJdGVyYXRvci5zdHVizwwAAOtPo2nPDAAAzH/PBqQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvUmVjdXJzaXZlRmlsdGVySXRlcmF0b3Iuc3R1Yq0BAADrT6NprQEAAAagHg6kAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL0xpbWl0SXRlcmF0b3Iuc3R1YrsCAADrT6NpuwIAAKzI8OOkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL1NwbFByaW9yaXR5UXVldWUuc3R1YvkLAADrT6Np+QsAAHi/0V6kAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL0xlbmd0aEV4Y2VwdGlvbi5zdHViSgAAAOtPo2lKAAAAMveMP6QBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3Iuc3R1YvUCAADrT6Np9QIAAPQadDakAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL1VuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbi5zdHViVQAAAOtPo2lVAAAAmBymaKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvU3BsT2JzZXJ2ZXIuc3R1YrYAAADrT6NptgAAALpNxrWkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL092ZXJmbG93RXhjZXB0aW9uLnN0dWJOAAAA60+jaU4AAAD7gt7GpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9zcGxfYXV0b2xvYWRfY2FsbC5zdHViOwAAAOtPo2k7AAAAe8WEIqQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvT3V0ZXJJdGVyYXRvci5zdHVirAAAAOtPo2msAAAAPR49GaQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvU3BsTWluSGVhcC5zdHVitwAAAOtPo2m3AAAAiF0cr6QBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvc3BsX29iamVjdF9pZC5zdHViNwAAAOtPo2k3AAAAWw0zD6QBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvRmlsZXN5c3RlbUl0ZXJhdG9yLnN0dWJJEAAA60+jaUkQAADgrSQQpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9DYWxsYmFja0ZpbHRlckl0ZXJhdG9yLnN0dWL/AAAA60+jaf8AAACTCdgDpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9CYWRNZXRob2RDYWxsRXhjZXB0aW9uLnN0dWJbAAAA60+jaVsAAACSgNsmpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9zcGxfYXV0b2xvYWRfcmVnaXN0ZXIuc3R1YncAAADrT6NpdwAAAL9unXukAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL1NwbE1heEhlYXAuc3R1YrcAAADrT6NptwAAAEPlgDCkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbi5zdHViUwAAAOtPo2lTAAAA6VfN6qQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvUmFuZ2VFeGNlcHRpb24uc3R1YksAAADrT6NpSwAAAOs3Z82kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL2l0ZXJhdG9yX2FwcGx5LnN0dWJpAAAA60+jaWkAAACJw8H4pAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9TcGxGaWxlT2JqZWN0LnN0dWKVFQAA60+jaZUVAACX+QB6pAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9SZWN1cnNpdmVSZWdleEl0ZXJhdG9yLnN0dWKlAgAA60+jaaUCAAC2Nu0mpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9SZWN1cnNpdmVUcmVlSXRlcmF0b3Iuc3R1YlYKAADrT6NpVgoAADQxyj+kAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL3NwbF9hdXRvbG9hZF9leHRlbnNpb25zLnN0dWJVAAAA60+jaVUAAABjComQpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9SZWdleEl0ZXJhdG9yLnN0dWL/CgAA60+jaf8KAAAevzGipAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9jbGFzc19pbXBsZW1lbnRzLnN0dWLBAAAA60+jacEAAABxTmxApAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9SZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yLnN0dWKBDAAA60+jaYEMAABfVPpxpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9PdXRPZlJhbmdlRXhjZXB0aW9uLnN0dWJOAAAA60+jaU4AAACEIuI4pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9VbmRlcmZsb3dFeGNlcHRpb24uc3R1Yk8AAADrT6NpTwAAAJfXQYGkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3BsL0ZpbHRlckl0ZXJhdG9yLnN0dWLAAQAA60+jacABAACki8W5pAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9SdW50aW1lRXhjZXB0aW9uLnN0dWJGAAAA60+jaUYAAACDR4YbpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9zcGxfYXV0b2xvYWRfZnVuY3Rpb25zLnN0dWI0AAAA60+jaTQAAABtcIRppAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9zcGxfY2xhc3Nlcy5zdHViQAAAAOtPo2lAAAAA0m4PO6QBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvUmVjdXJzaXZlQXJyYXlJdGVyYXRvci5zdHVicQIAAOtPo2lxAgAAWikj3qQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcGwvQmFkRnVuY3Rpb25DYWxsRXhjZXB0aW9uLnN0dWJTAAAA60+jaVMAAAA3f33SpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9JbmZpbml0ZUl0ZXJhdG9yLnN0dWLlAAAA60+jaeUAAAAzVkjxpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NwbC9pdGVyYXRvcl9jb3VudC5zdHVilwAAAOtPo2mXAAAAUzQDqqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWxyZWFkZXIvWE1MUmVhZGVyLnN0dWLfJwAA60+jad8nAAB0zT15pAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3ppcC96aXBfb3Blbi5zdHVihgAAAOtPo2mGAAAA4EPuPqQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96aXAvemlwX3JlYWQuc3R1YmwAAADrT6NpbAAAAOf3SqqkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvemlwL3ppcF9lbnRyeV9jbG9zZS5zdHViawAAAOtPo2lrAAAAasD3NaQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96aXAvemlwX2VudHJ5X3JlYWQuc3R1YoMAAADrT6NpgwAAAL0vqfWkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvemlwL1ppcEFyY2hpdmUuc3R1YuSeAADrT6Np5J4AAJTukZykAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvemlwL3ppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZS5zdHVieQAAAOtPo2l5AAAACPFO8aQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96aXAvemlwX2VudHJ5X29wZW4uc3R1YqMAAADrT6NpowAAAKpTA3mkAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvemlwL3ppcF9lbnRyeV9jb21wcmVzc2lvbm1ldGhvZC5zdHVifwAAAOtPo2l/AAAAfKbkhqQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96aXAvemlwX2VudHJ5X2ZpbGVzaXplLnN0dWJzAAAA60+jaXMAAAAJecBypAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3ppcC96aXBfZW50cnlfbmFtZS5zdHVicgAAAOtPo2lyAAAAueRFU6QBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96aXAvemlwX2Nsb3NlLnN0dWJZAAAA60+jaVkAAABitJMkpAEAAAAAAABcAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0LnN0dWKeAAAA60+jaZ4AAAB53SdvpAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3NpZ25fa2V5cGFpci5zdHViOQAAAOtPo2k5AAAA7e/bpaQBAAAAAAAAXgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyLnN0dWJ6AAAA60+jaXoAAABnqaK4pAEAAAAAAABVAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2FlYWRfYWVnaXMxMjhsX2VuY3J5cHQuc3R1YsYAAADrT6NpxgAAALzagRmkAQAAAAAAAFYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fc3RyZWFtX3hjaGFjaGEyMF94b3JfaWMuc3R1YrwAAADrT6NpvAAAAKGEOjikAQAAAAAAAFUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYWVhZF9hZXMyNTZnY21fZGVjcnlwdC5zdHViowAAAOtPo2mjAAAAoxvgvaQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX3BhZC5zdHViSAAAAOtPo2lIAAAAu1pPW6QBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19rZGZfa2V5Z2VuLnN0dWI3AAAA60+jaTcAAACDwUnHpAEAAAAAAABWAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3B3aGFzaF9zdHJfbmVlZHNfcmVoYXNoLnN0dWLoAAAA60+jaegAAABxe1dEpAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3N0cmVhbV9rZXlnZW4uc3R1YjoAAADrT6NpOgAAAC9zzNekAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9hZGQuc3R1YkgAAADrT6NpSAAAAITB4UWkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV91bnBhZC5zdHViSgAAAOtPo2lKAAAAAPeMEqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2JpbjJiYXNlNjQuc3R1Ym0AAADrT6NpbQAAAGae1d+kAQAAAAAAAFQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYWVhZF9hZWdpczI1Nl9kZWNyeXB0LnN0dWLjAAAA60+jaeMAAADz2cf1pAEAAAAAAABaAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2lzX2F2YWlsYWJsZS5zdHViaAAAAOtPo2loAAAAEzzu76QBAAAAAAAAYgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19hZWFkX3hjaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdC5zdHVi0QAAAOtPo2nRAAAAGWhcTKQBAAAAAAAAVQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19reF9jbGllbnRfc2Vzc2lvbl9rZXlzLnN0dWJtAAAA60+jaW0AAACRIyzppAEAAAAAAABbAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X3NjYWxhcl9zdWIuc3R1Ym4AAADrT6NpbgAAAEuGxm2kAQAAAAAAAFsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYm94X3B1YmxpY2tleV9mcm9tX3NlY3JldGtleS5zdHViWwAAAOtPo2lbAAAAYKPIp6QBAAAAAAAAVQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19reF9zZXJ2ZXJfc2Vzc2lvbl9rZXlzLnN0dWJ4AAAA60+jaXgAAAAlHRJkpAEAAAAAAABcAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3NpZ25fcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5LnN0dWJcAAAA60+jaVwAAAAohREOpAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2t4X3B1YmxpY2tleS5zdHViSQAAAOtPo2lJAAAA5jdNW6QBAAAAAAAAVAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9zdWIuc3R1YmcAAADrT6NpZwAAAMJvOuikAQAAAAAAAFsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fc2NhbGFybXVsdF9yaXN0cmV0dG8yNTVfYmFzZS5zdHViYwAAAOtPo2ljAAAALdmPfqQBAAAAAAAAWwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfa2V5Z2VuLnN0dWJJAAAA60+jaUkAAAA8ekqKpAEAAAAAAABQAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3NpZ25fc2VlZF9rZXlwYWlyLnN0dWJKAAAA60+jaUoAAAD7eUCcpAEAAAAAAABUAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X2FkZC5zdHVikQAAAOtPo2mRAAAAXM9n26QBAAAAAAAAXAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19zaWduX2VkMjU1MTlfc2tfdG9fY3VydmUyNTUxOS5zdHViXAAAAOtPo2lcAAAAwvQhLKQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX21lbXplcm8uc3R1YjoAAADrT6NpOgAAAOYeHPekAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYm94X2tleXBhaXIuc3R1YjgAAADrT6NpOAAAAMtk2omkAQAAAAAAAGcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X2luaXRfcHVsbC5zdHVicAAAAOtPo2lwAAAAHyL0bqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19ib3guc3R1YmAAAADrT6NpYAAAAOTGEiGkAQAAAAAAAE8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fc2VjcmV0Ym94X2tleWdlbi5zdHViPQAAAOtPo2k9AAAAALsTb6QBAAAAAAAAVAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19hZWFkX2FlZ2lzMTI4bF9rZXlnZW4uc3R1YlMAAADrT6NpUwAAAE3vHZukAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fc3RyZWFtLnN0dWJaAAAA60+jaVoAAADxBionpAEAAAAAAABQAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3B3aGFzaF9zdHJfdmVyaWZ5LnN0dWJaAAAA60+jaVoAAACdFzmupAEAAAAAAABoAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3NpZ25fa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5LnN0dWJ8AAAA60+jaXwAAAD5pTLapAEAAAAAAABNAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3NpZ25fcHVibGlja2V5LnN0dWJLAAAA60+jaUsAAAB8T8sMpAEAAAAAAABkAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9rZXlnZW4uc3R1YoYAAADrT6NphgAAANsSkOSkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYm94X3NlYWwuc3R1YlgAAADrT6NpWAAAADFICMukAQAAAAAAAFQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYWVhZF9hZXMyNTZnY21fa2V5Z2VuLnN0dWJCAAAA60+jaUIAAABUqUUlpAEAAAAAAABTAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2FlYWRfYWVnaXMyNTZfa2V5Z2VuLnN0dWJSAAAA60+jaVIAAAAnMFibpAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2F1dGhfa2V5Z2VuLnN0dWI4AAAA60+jaTgAAABgQBpRpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1faW5jcmVtZW50LnN0dWI8AAAA60+jaTwAAADbPETepAEAAAAAAABQAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2dlbmVyaWNoYXNoX2ZpbmFsLnN0dWJ7AAAA60+jaXsAAAA70u3+pAEAAAAAAABbAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X3NjYWxhcl9hZGQuc3R1Ym4AAADrT6NpbgAAADM+jW2kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jb21wYXJlLnN0dWJKAAAA60+jaUoAAAAoxGdJpAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2JveF9zZWFsX29wZW4uc3R1YmQAAADrT6NpZAAAAK37ZwGkAQAAAAAAAFUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYWVhZF9hZXMyNTZnY21fZW5jcnlwdC5zdHVihwAAAOtPo2mHAAAA03Lvo6QBAAAAAAAAXgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9zY2FsYXJfcmFuZG9tLnN0dWJdAAAA60+jaV0AAABmegCjpAEAAAAAAABOAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3NjYWxhcm11bHRfYmFzZS5zdHVijgAAAOtPo2mOAAAAWUyuIaQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2JpbjJoZXguc3R1YjsAAADrT6NpOwAAABhbLPOkAQAAAAAAAGcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X2luaXRfcHVzaC5zdHViXwAAAOtPo2lfAAAANyRtJaQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2Jhc2U2NDJiaW4uc3R1YlwAAADrT6NpXAAAAP1HzpKkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYm94X29wZW4uc3R1Ym4AAADrT6NpbgAAAHsSQf6kAQAAAAAAAF4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fY29yZV9yaXN0cmV0dG8yNTVfc2NhbGFyX2ludmVydC5zdHViZgAAAOtPo2lmAAAAH+N3tqQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19zdHJlYW1feG9yLnN0dWJiAAAA60+jaWIAAABbpaQdpAEAAAAAAABRAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2dlbmVyaWNoYXNoX3VwZGF0ZS5zdHVi0wAAAOtPo2nTAAAAkVbwy6QBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19zaG9ydGhhc2guc3R1YlkAAADrT6NpWQAAAHjLgROkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fc2lnbl9vcGVuLnN0dWJmAAAA60+jaWYAAACYkllcpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1faGV4MmJpbi5zdHViUAAAAOtPo2lQAAAAJL41NKQBAAAAAAAATQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19zZWNyZXRib3hfb3Blbi5zdHVibwAAAOtPo2lvAAAAMI03KKQBAAAAAAAAVAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19hZWFkX2FlZ2lzMjU2X2VuY3J5cHQuc3R1YsUAAADrT6NpxQAAAG3nkeikAQAAAAAAAFIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fa2RmX2Rlcml2ZV9mcm9tX2tleS5zdHVigAAAAOtPo2mAAAAAImG9zqQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX21lbWNtcC5zdHViSQAAAOtPo2lJAAAAK0gYDKQBAAAAAAAAVgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19zY2FsYXJtdWx0X3Jpc3RyZXR0bzI1NS5zdHVikwAAAOtPo2mTAAAAV2gf8aQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19wd2hhc2guc3R1YskAAADrT6NpyQAAABiCL5ukAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fa3hfa2V5cGFpci5zdHViNwAAAOtPo2k3AAAAOyb5lKQBAAAAAAAAYQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19hZWFkX3hjaGFjaGEyMHBvbHkxMzA1X2lldGZfa2V5Z2VuLnN0dWJPAAAA60+jaU8AAADNBvk2pAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3NlY3JldGJveC5zdHViYQAAAOtPo2lhAAAAIItuwKQBAAAAAAAAVgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19zdHJlYW1feGNoYWNoYTIwX2tleWdlbi5zdHViVQAAAOtPo2lVAAAAGcOr8qQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19zaWduLnN0dWJUAAAA60+jaVQAAACnoDu8pAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2t4X3NlY3JldGtleS5zdHViSQAAAOtPo2lJAAAAZ7dTfaQBAAAAAAAAYQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9kZWNyeXB0LnN0dWKcAAAA60+jaZwAAABUw23TpAEAAAAAAABaAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X2Zyb21faGFzaC5zdHViYgAAAOtPo2liAAAAgQTguKQBAAAAAAAATwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19ib3hfc2VlZF9rZXlwYWlyLnN0dWJJAAAA60+jaUkAAABdCJtNpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3B3aGFzaF9zdHIuc3R1YmUAAADrT6NpZQAAAHO2DSCkAQAAAAAAAFEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fZ2VuZXJpY2hhc2hfa2V5Z2VuLnN0dWI/AAAA60+jaT8AAADB7TxupAEAAAAAAABeAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X3NjYWxhcl9yZWR1Y2Uuc3R1YmYAAADrT6NpZgAAAM5E9h6kAQAAAAAAAEwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fc2lnbl9kZXRhY2hlZC5zdHViXQAAAOtPo2ldAAAA1glV8KQBAAAAAAAAVQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19hZWFkX2FlZ2lzMTI4bF9kZWNyeXB0LnN0dWLlAAAA60+jaeUAAACaWOGnpAEAAAAAAABnAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2JveF9rZXlwYWlyX2Zyb21fc2VjcmV0a2V5X2FuZF9wdWJsaWNrZXkuc3R1YnsAAADrT6NpewAAAD3ifsakAQAAAAAAAGIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X3B1bGwuc3R1YpUAAADrT6NplQAAAO++bAekAQAAAAAAAGUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cl92ZXJpZnkuc3R1Ym8AAADrT6NpbwAAAKwwX4mkAQAAAAAAAFcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fY29yZV9yaXN0cmV0dG8yNTVfcmFuZG9tLnN0dWJWAAAA60+jaVYAAACo+4R6pAEAAAAAAABiAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9wdXNoLnN0dWLSAAAA60+jadIAAADPYYx1pAEAAAAAAABOAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2t4X3NlZWRfa2V5cGFpci5zdHViSAAAAOtPo2lIAAAAj8aNcqQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19zY2FsYXJtdWx0LnN0dWJSAAAA60+jaVIAAAAYK/AopAEAAAAAAABhAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHQuc3R1YpMAAADrT6NpkwAAAITMSrukAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYXV0aC5zdHViVAAAAOtPo2lUAAAAulbIrqQBAAAAAAAAWwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9zY2FsYXJfbXVsLnN0dWJuAAAA60+jaW4AAAA+0gxhpAEAAAAAAABPAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2dlbmVyaWNoYXNoX2luaXQuc3R1YnwAAADrT6NpfAAAAFVEOHOkAQAAAAAAAEwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYm94X3NlY3JldGtleS5zdHViSgAAAOtPo2lKAAAAURKxFaQBAAAAAAAAWgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTYuc3R1YswAAADrT6NpzAAAAMcYb42kAQAAAAAAAGAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfa2V5Z2VuLnN0dWJOAAAA60+jaU4AAAB1s/a4pAEAAAAAAABTAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3N0cmVhbV94Y2hhY2hhMjBfeG9yLnN0dWJ9AAAA60+jaX0AAADZa1WrpAEAAAAAAABiAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X3NjYWxhcl9jb21wbGVtZW50LnN0dWJqAAAA60+jaWoAAAB5th1GpAEAAAAAAABNAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3NpZ25fc2VjcmV0a2V5LnN0dWJLAAAA60+jaUsAAAD9z9UqpAEAAAAAAABPAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3N0cmVhbV94Y2hhY2hhMjAuc3R1YqMAAADrT6NpowAAAPbUFHqkAQAAAAAAAF8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fY29yZV9yaXN0cmV0dG8yNTVfaXNfdmFsaWRfcG9pbnQuc3R1YmUAAADrT6NpZQAAAH8xOKykAQAAAAAAAFMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQuc3R1YnUAAADrT6NpdQAAACKTf1KkAQAAAAAAAFwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fc2lnbl9lZDI1NTE5X3BrX3RvX2N1cnZlMjU1MTkuc3R1YlwAAADrT6NpXAAAAB2XQfykAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fZ2VuZXJpY2hhc2guc3R1YogAAADrT6NpiAAAAKivqdekAQAAAAAAAEwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYm94X3B1YmxpY2tleS5zdHViSgAAAOtPo2lKAAAA0JKvM6QBAAAAAAAAXAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfZW5jcnlwdC5zdHVijgAAAOtPo2mOAAAABycWdqQBAAAAAAAAYwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfcmVrZXkuc3R1Yl0AAADrT6NpXQAAAAwDOY+kAQAAAAAAAGIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHQuc3R1YpQAAADrT6NplAAAAMB/c+CkAQAAAAAAAF4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29kaXVtL3NvZGl1bV9jcnlwdG9fY29yZV9yaXN0cmV0dG8yNTVfc2NhbGFyX25lZ2F0ZS5zdHViZgAAAOtPo2lmAAAAG1WZxKQBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vc29kaXVtX2NyeXB0b19hdXRoX3ZlcmlmeS5zdHViXwAAAOtPo2lfAAAA+1eXI6QBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2RpdW0vU29kaXVtRXhjZXB0aW9uLnN0dWI0AAAA60+jaTQAAAC4nOBcpAEAAAAAAABPAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvZGl1bS9zb2RpdW1fY3J5cHRvX3Nob3J0aGFzaF9rZXlnZW4uc3R1Yj0AAADrT6NpPQAAAJZdTsykAQAAAAAAADMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGhhci9QaGFyLnN0dWJlKwAA60+jaWUrAABWj/LXpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BoYXIvUGhhckV4Y2VwdGlvbi5zdHViVAAAAOtPo2lUAAAA+3bJT6QBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9waGFyL1BoYXJEYXRhLnN0dWIuKAAA60+jaS4oAAAy8lQvpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3BoYXIvUGhhckZpbGVJbmZvLnN0dWKoBgAA60+jaagGAAAIIXlppAEAAAAAAABPAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JlZmxlY3Rpb24vUmVmbGVjdGlvbkludGVyc2VjdGlvblR5cGUuc3R1YocAAADrT6NphwAAAPRvsVGkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmVmbGVjdGlvbi9SZWZsZWN0aW9uUmVmZXJlbmNlLnN0dWJiAQAA60+jaWIBAABeiv84pAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JlZmxlY3Rpb24vUmVmbGVjdGlvbk5hbWVkVHlwZS5zdHViGQEAAOtPo2kZAQAATKTUUaQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWZsZWN0aW9uL1JlZmxlY3Rpb25NZXRob2Quc3R1YuMNAADrT6Np4w0AANE2/IikAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmVmbGVjdGlvbi9SZWZsZWN0aW9uUGFyYW1ldGVyLnN0dWIXCwAA60+jaRcLAAC9USo2pAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JlZmxlY3Rpb24vUHJvcGVydHlIb29rVHlwZS5zdHViZwAAAOtPo2lnAAAAmw9g16QBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWZsZWN0aW9uL1JlZmxlY3Rpb25GdW5jdGlvbi5zdHVi4wMAAOtPo2njAwAARIDKbqQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWZsZWN0aW9uL1JlZmxlY3Rpb25Db25zdGFudC5zdHViFwIAAOtPo2kXAgAA5IkkS6QBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWZsZWN0aW9uL1JlZmxlY3Rpb25VbmlvblR5cGUuc3R1Ym8AAADrT6NpbwAAAIL92OGkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvcGVydHkuc3R1YiIWAADrT6NpIhYAAANHjwakAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmVmbGVjdGlvbi9SZWZsZWN0aW9uQXR0cmlidXRlLnN0dWLwAgAA60+jafACAAA61fCrpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JlZmxlY3Rpb24vUmVmbGVjdGlvblR5cGUuc3R1YuoBAADrT6Np6gEAADkCAvOkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmVmbGVjdGlvbi9SZWZsZWN0aW9uT2JqZWN0LnN0dWJ3AAAA60+jaXcAAAC5kIIQpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JlZmxlY3Rpb24vUmVmbGVjdGlvbi5zdHViqgAAAOtPo2mqAAAAgcGpmaQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWZsZWN0aW9uL1JlZmxlY3Rpb25HZW5lcmF0b3Iuc3R1YrUDAADrT6NptQMAAFGVFPqkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmVmbGVjdGlvbi9SZWZsZWN0b3Iuc3R1YjMAAADrT6NpMwAAAIKLmrGkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmVmbGVjdGlvbi9SZWZsZWN0aW9uQ2xhc3Muc3R1YkckAADrT6NpRyQAAMTSuNWkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmVmbGVjdGlvbi9SZWZsZWN0aW9uRXhjZXB0aW9uLnN0dWJaAAAA60+jaVoAAADGJoKepAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JlZmxlY3Rpb24vUmVmbGVjdGlvbkZpYmVyLnN0dWLJAQAA60+jackBAACSFgSgpAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JlZmxlY3Rpb24vUmVmbGVjdGlvbkV4dGVuc2lvbi5zdHVirwYAAOtPo2mvBgAAVDGgoaQBAAAAAAAATQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWZsZWN0aW9uL1JlZmxlY3Rpb25FbnVtQmFja2VkQ2FzZS5zdHVi7QAAAOtPo2ntAAAAXpW3aKQBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWZsZWN0aW9uL1JlZmxlY3Rpb25DbGFzc0NvbnN0YW50LnN0dWIuCwAA60+jaS4LAABJCpgcpAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JlZmxlY3Rpb24vUmVmbGVjdGlvbkVudW1Vbml0Q2FzZS5zdHVifgEAAOtPo2l+AQAA6ETMJaQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yZWZsZWN0aW9uL1JlZmxlY3Rpb25FbnVtLnN0dWI0AgAA60+jaTQCAABxNtfPpAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JlZmxlY3Rpb24vUmVmbGVjdGlvblplbmRFeHRlbnNpb24uc3R1YuMDAADrT6Np4wMAAMfZ/e2kAQAAAAAAAE8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmVmbGVjdGlvbi9SZWZsZWN0aW9uRnVuY3Rpb25BYnN0cmFjdC5zdHVinQ8AAOtPo2mdDwAA/Kx80qQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX3dyaXRlX2R0ZC5zdHVinQAAAOtPo2mdAAAAibxv6aQBAAAAAAAAUAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX3N0YXJ0X2F0dHJpYnV0ZV9ucy5zdHVifgAAAOtPo2l+AAAAj5SLeqQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX3dyaXRlX3BpLnN0dWJiAAAA60+jaWIAAAAZ3VaxpAEAAAAAAABPAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfd3JpdGVfZHRkX2F0dGxpc3Quc3R1YmkAAADrT6NpaQAAACJol/WkAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL3htbHdyaXRlcl93cml0ZV9lbGVtZW50LnN0dWJtAAAA60+jaW0AAAAYpxUepAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfZW5kX2R0ZF9lbnRpdHkuc3R1YkcAAADrT6NpRwAAACZtJR+kAQAAAAAAAE0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL3htbHdyaXRlcl93cml0ZV9hdHRyaWJ1dGUuc3R1YmUAAADrT6NpZQAAALHAsM+kAQAAAAAAAE8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL3htbHdyaXRlcl93cml0ZV9kdGRfZWxlbWVudC5zdHViaQAAAOtPo2lpAAAAn4oL56QBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX2VuZF9kb2N1bWVudC5zdHViRQAAAOtPo2lFAAAARmt15qQBAAAAAAAATgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX3N0YXJ0X2R0ZF9lbnRpdHkuc3R1YmYAAADrT6NpZgAAAJmXZLmkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL1hNTFdyaXRlci5zdHViOh4AAOtPo2k6HgAAVFggF6QBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX2ZsdXNoLnN0dWJYAAAA60+jaVgAAAAbbqjFpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfd3JpdGVfcmF3LnN0dWJTAAAA60+jaVMAAACaa7jLpAEAAAAAAABOAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfd3JpdGVfZHRkX2VudGl0eS5zdHVi0QAAAOtPo2nRAAAAdGQryqQBAAAAAAAATQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX3N0YXJ0X2F0dHJpYnV0ZS5zdHViVgAAAOtPo2lWAAAAK+kkVaQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX3RleHQuc3R1Yk4AAADrT6NpTgAAAFI9a96kAQAAAAAAAFAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL3htbHdyaXRlcl93cml0ZV9hdHRyaWJ1dGVfbnMuc3R1Yo0AAADrT6NpjQAAAMHG61akAQAAAAAAAE8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL3htbHdyaXRlcl9zZXRfaW5kZW50X3N0cmluZy5zdHViXwAAAOtPo2lfAAAAX5Vw+qQBAAAAAAAATwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX3N0YXJ0X2R0ZF9lbGVtZW50LnN0dWJhAAAA60+jaWEAAACOJmh0pAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfZW5kX2F0dHJpYnV0ZS5zdHViRgAAAOtPo2lGAAAAHqLnDaQBAAAAAAAASwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX3N0YXJ0X2VsZW1lbnQuc3R1YlQAAADrT6NpVAAAAKss+mSkAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL3htbHdyaXRlcl9lbmRfZWxlbWVudC5zdHViRAAAAOtPo2lEAAAAxvKJr6QBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX3N0YXJ0X2RvY3VtZW50LnN0dWKXAAAA60+jaZcAAAATLnfTpAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfb3V0cHV0X21lbW9yeS5zdHViXAAAAOtPo2lcAAAAvjwtNaQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX3N0YXJ0X2R0ZC5zdHVijQAAAOtPo2mNAAAAqHhOYKQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX3dyaXRlX2NkYXRhLnN0dWJVAAAA60+jaVUAAACahB3hpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfc3RhcnRfY2RhdGEuc3R1YkQAAADrT6NpRAAAAFHcizKkAQAAAAAAAE8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL3htbHdyaXRlcl9zdGFydF9kdGRfYXR0bGlzdC5zdHViWAAAAOtPo2lYAAAAHbUIk6QBAAAAAAAASwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX3N0YXJ0X2NvbW1lbnQuc3R1YkYAAADrT6NpRgAAAGKTfm+kAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL3htbHdyaXRlcl9zZXRfaW5kZW50LnN0dWJRAAAA60+jaVEAAACcCmJIpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfZW5kX2NvbW1lbnQuc3R1YkQAAADrT6NpRAAAAP1W7rWkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL3htbHdyaXRlcl9zdGFydF9waS5zdHViUQAAAOtPo2lRAAAAl0PB+6QBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWx3cml0ZXIveG1sd3JpdGVyX2VuZF9kdGQuc3R1YkAAAADrT6NpQAAAAFXe1XykAQAAAAAAAE4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL3htbHdyaXRlcl9mdWxsX2VuZF9lbGVtZW50LnN0dWJJAAAA60+jaUkAAADuDGBcpAEAAAAAAABNAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfZW5kX2R0ZF9lbGVtZW50LnN0dWJIAAAA60+jaUgAAAAJSkh6pAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfb3Blbl9tZW1vcnkuc3R1Yj4AAADrT6NpPgAAANu9HpSkAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL3htbHdyaXRlcl93cml0ZV9jb21tZW50LnN0dWJXAAAA60+jaVcAAABkhhQepAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfb3Blbl91cmkuc3R1YmgAAADrT6NpaAAAAJJz5e6kAQAAAAAAAE4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sd3JpdGVyL3htbHdyaXRlcl9zdGFydF9lbGVtZW50X25zLnN0dWJ8AAAA60+jaXwAAACrx5o+pAEAAAAAAABNAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfZW5kX2R0ZF9hdHRsaXN0LnN0dWJIAAAA60+jaUgAAABZSi7opAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfZW5kX2NkYXRhLnN0dWJCAAAA60+jaUIAAADB81dApAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfZW5kX3BpLnN0dWI/AAAA60+jaT8AAABDuPswpAEAAAAAAABOAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbHdyaXRlci94bWx3cml0ZXJfd3JpdGVfZWxlbWVudF9ucy5zdHVilQAAAOtPo2mVAAAA6+sjGKQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRE9NWFBhdGguc3R1YhsEAADrT6NpGwQAAIQTg0mkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RPTU5hbWVkTm9kZU1hcC5zdHViqwIAAOtPo2mrAgAAi4f9FqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRE9NQ2hpbGROb2RlLnN0dWJJAQAA60+jaUkBAABoEmVMpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9ET01FeGNlcHRpb24uc3R1YjcAAADrT6NpNwAAAAJ3SKGkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RPTUVudGl0eVJlZmVyZW5jZS5zdHVibwAAAOtPo2lvAAAAKp7q5aQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRE9NTm90YXRpb24uc3R1Yi4AAADrT6NpLgAAAI0HG2OkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5zdHViiQAAAOtPo2mJAAAA1ULiyKQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRE9NTm9kZS5zdHVivQwAAOtPo2m9DAAAceL5J6QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRG9tL0RvY3VtZW50VHlwZS5zdHViKAQAAOtPo2koBAAAgdsoeaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRG9tL0RvY3VtZW50LnN0dWKkEAAA60+jaaQQAAAJPXuLpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9Eb20vRW50aXR5LnN0dWI8AQAA60+jaTwBAAB9Xa9spAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9Eb20vaW1wb3J0X3NpbXBsZXhtbC5zdHViaQAAAOtPo2lpAAAAKgJF4aQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRG9tL0ltcGxlbWVudGF0aW9uLnN0dWLOAQAA60+jac4BAACpwIiXpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9Eb20vQ2hpbGROb2RlLnN0dWITAQAA60+jaRMBAAAJqJrFpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9Eb20vQ2hhcmFjdGVyRGF0YS5zdHViKwUAAOtPo2krBQAAof2coaQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRG9tL0R0ZE5hbWVkTm9kZU1hcC5zdHViVQMAAOtPo2lVAwAAtmTcIKQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRG9tL1RleHQuc3R1YoABAADrT6NpgAEAAEH0hpWkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RvbS9DREFUQVNlY3Rpb24uc3R1YlEAAADrT6NpUQAAAADUZsakAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RvbS9Db21tZW50LnN0dWLDAAAA60+jacMAAAAH05wYpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9Eb20vTmFtZWROb2RlTWFwLnN0dWIlAwAA60+jaSUDAABDDSgDpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9Eb20vRW50aXR5UmVmZXJlbmNlLnN0dWJUAAAA60+jaVQAAAD3bt2BpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9Eb20vQXR0ci5zdHViPQMAAOtPo2k9AwAAB8GAZaQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRG9tL0hUTUxDb2xsZWN0aW9uLnN0dWI3AgAA60+jaTcCAABoxitapAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9Eb20vTmFtZXNwYWNlSW5mby5zdHViQwEAAOtPo2lDAQAAiFwqeKQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRG9tL0FkamFjZW50UG9zaXRpb24uc3R1YtcAAADrT6Np1wAAANCxK/+kAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RvbS9Ob2RlTGlzdC5zdHVi7QEAAOtPo2ntAQAABSkK/qQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRG9tL0hUTUxEb2N1bWVudC5zdHVi1gMAAOtPo2nWAwAAvBBxhqQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRG9tL1hQYXRoLnN0dWLOBAAA60+jac4EAAAAtB7opAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9Eb20vVG9rZW5MaXN0LnN0dWK9AwAA60+jab0DAADNtcnIpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9Eb20vRG9jdW1lbnRGcmFnbWVudC5zdHVigwQAAOtPo2mDBAAAXCtAbaQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRG9tL0VsZW1lbnQuc3R1YrEVAADrT6NpsRUAACXey9ykAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RvbS9Ob2RlLnN0dWInDgAA60+jaScOAABIUnbXpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9Eb20vUGFyZW50Tm9kZS5zdHVieQEAAOtPo2l5AQAA5/FjcaQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5zdHVirwAAAOtPo2mvAAAATZ1pSKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRG9tL05vdGF0aW9uLnN0dWLpAAAA60+jaekAAABng9hMpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9Eb20vSFRNTEVsZW1lbnQuc3R1YlMAAADrT6NpUwAAAL1kN3qkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RvbS9YTUxEb2N1bWVudC5zdHVi8wQAAOtPo2nzBAAA71KHH6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRE9NSW1wbGVtZW50YXRpb24uc3R1Yi4CAADrT6NpLgIAAAza2FqkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RPTU5hbWVTcGFjZU5vZGUuc3R1YhMBAADrT6NpEwEAAFDUSNukAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RPTU5vZGVMaXN0LnN0dWJDAQAA60+jaUMBAADqR1HipAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9ET01Db21tZW50LnN0dWJ1AAAA60+jaXUAAABwPTGQpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9ET01UZXh0LnN0dWL+AQAA60+jaf4BAAA46JGwpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RvbS9ET01DZGF0YVNlY3Rpb24uc3R1YmwAAADrT6NpbAAAAA6zvCCkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RPTURvY3VtZW50VHlwZS5zdHViVAAAAOtPo2lUAAAAb1cPPaQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRE9NRG9jdW1lbnQuc3R1YoUTAADrT6NphRMAAOOWkRSkAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RPTUF0dHIuc3R1YuEAAADrT6Np4QAAAJiUo7ukAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RPTURvY3VtZW50RnJhZ21lbnQuc3R1YjcCAADrT6NpNwIAACC4mM6kAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RPTUVudGl0eS5zdHViLAAAAOtPo2ksAAAAtHaJ/KQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRE9NRWxlbWVudC5zdHViyg4AAOtPo2nKDgAAvptzuaQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vRE9NQ2hhcmFjdGVyRGF0YS5zdHViJAQAAOtPo2kkBAAACCH8MqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kb20vZG9tX2ltcG9ydF9zaW1wbGV4bWwuc3R1YksAAADrT6NpSwAAAOCbRfWkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZG9tL0RPTVBhcmVudE5vZGUuc3R1YkEBAADrT6NpQQEAAMXyixSkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaGFzaC9oYXNoX2VxdWFscy5zdHViUQAAAOtPo2lRAAAA3Y0YiKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9oYXNoL2hhc2hfZmluYWwuc3R1YlQAAADrT6NpVAAAACupaaukAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaGFzaC9taGFzaC5zdHViVgAAAOtPo2lWAAAAmQ1gBKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9oYXNoL2hhc2hfYWxnb3Muc3R1YlUAAADrT6NpVQAAAIGixjekAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaGFzaC9oYXNoX2NvcHkuc3R1YkMAAADrT6NpQwAAALbeahGkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaGFzaC9oYXNoX3VwZGF0ZV9zdHJlYW0uc3R1Yn0AAADrT6NpfQAAAPdXlFqkAQAAAAAAADMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaGFzaC9oYXNoLnN0dWIqAQAA60+jaSoBAAC59q5OpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2hhc2gvaGFzaF9wYmtkZjIuc3R1Yl8BAADrT6NpXwEAAETL79GkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaGFzaC9taGFzaF9nZXRfaGFzaF9uYW1lLnN0dWJBAAAA60+jaUEAAAAUM24XpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2hhc2gvaGFzaF9oa2RmLnN0dWJ4AAAA60+jaXgAAADHBvuapAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2hhc2gvaGFzaF9obWFjX2FsZ29zLnN0dWJaAAAA60+jaVoAAADbTVXppAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2hhc2gvaGFzaF9maWxlLnN0dWIHAQAA60+jaQcBAABU7MY1pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2hhc2gvaGFzaF9pbml0LnN0dWL7AAAA60+jafsAAAC/olA4pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2hhc2gvbWhhc2hfa2V5Z2VuX3Myay5zdHViawAAAOtPo2lrAAAA2qPrwaQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9oYXNoL2hhc2hfdXBkYXRlX2ZpbGUuc3R1YpgAAADrT6NpmAAAAKr2XIOkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaGFzaC9IYXNoQ29udGV4dC5zdHViGQEAAOtPo2kZAQAADKnHBKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9oYXNoL2hhc2hfdXBkYXRlLnN0dWKxAAAA60+jabEAAABkOBn8pAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2hhc2gvaGFzaF9obWFjX2ZpbGUuc3R1YnQAAADrT6NpdAAAAG0SlKKkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvaGFzaC9taGFzaF9jb3VudC5zdHViJwAAAOtPo2knAAAAdh2gCaQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9oYXNoL21oYXNoX2dldF9ibG9ja19zaXplLnN0dWJTAAAA60+jaVMAAAB4A5bspAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2hhc2gvaGFzaF9obWFjLnN0dWJlAAAA60+jaWUAAACiWumlpAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NpbXBsZXhtbC9zaW1wbGV4bWxfaW1wb3J0X2RvbS5zdHViIwEAAOtPo2kjAQAAnHXz1qQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zaW1wbGV4bWwvU2ltcGxlWE1MRWxlbWVudC5zdHVizgsAAOtPo2nOCwAA8sUG8KQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zaW1wbGV4bWwvc2ltcGxleG1sX2xvYWRfZmlsZS5zdHVi8QAAAOtPo2nxAAAAiRUY/aQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zaW1wbGV4bWwvc2ltcGxleG1sX2xvYWRfc3RyaW5nLnN0dWLNAAAA60+jac0AAACpc38spAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NpbXBsZXhtbC9TaW1wbGVYTUxJdGVyYXRvci5zdHViPQAAAOtPo2k9AAAACgMCnqQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zZXNzaW9uL3Nlc3Npb25fY3JlYXRlX2lkLnN0dWJJAAAA60+jaUkAAAAEAilppAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Nlc3Npb24vc2Vzc2lvbl9zZXRfY29va2llX3BhcmFtcy5zdHVisAAAAOtPo2mwAAAAu9k0jaQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zZXNzaW9uL3Nlc3Npb25fYWJvcnQuc3R1YioAAADrT6NpKgAAAF2dtsSkAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc2Vzc2lvbi9zZXNzaW9uX3JlZ2lzdGVyX3NodXRkb3duLnN0dWI2AAAA60+jaTYAAACK+UtTpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Nlc3Npb24vc2Vzc2lvbl9zdGF0dXMuc3R1YioAAADrT6NpKgAAAFFl/pCkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc2Vzc2lvbi9zZXNzaW9uX3Vuc2V0LnN0dWIqAAAA60+jaSoAAAAgUCUFpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Nlc3Npb24vU2Vzc2lvbklkSW50ZXJmYWNlLnN0dWKOAAAA60+jaY4AAAAfYuGjpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Nlc3Npb24vc2Vzc2lvbl9tb2R1bGVfbmFtZS5zdHViTgAAAOtPo2lOAAAAcpq2UaQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zZXNzaW9uL3Nlc3Npb25fc2F2ZV9wYXRoLnN0dWJKAAAA60+jaUoAAAAuE6FapAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Nlc3Npb24vU2Vzc2lvbkhhbmRsZXJJbnRlcmZhY2Uuc3R1YtACAADrT6Np0AIAAJsmBymkAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc2Vzc2lvbi9zZXNzaW9uX2dldF9jb29raWVfcGFyYW1zLnN0dWJOAAAA60+jaU4AAAA6AlxhpAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Nlc3Npb24vc2Vzc2lvbl9zZXRfc2F2ZV9oYW5kbGVyLnN0dWLfAgAA60+jad8CAABftZ/TpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Nlc3Npb24vc2Vzc2lvbl93cml0ZV9jbG9zZS5zdHViMAAAAOtPo2kwAAAAr0gCOKQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zZXNzaW9uL3Nlc3Npb25fZW5jb2RlLnN0dWIzAAAA60+jaTMAAAALb9o0pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Nlc3Npb24vc2Vzc2lvbl9zdGFydC5zdHViPQAAAOtPo2k9AAAAMbsBVKQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zZXNzaW9uL3Nlc3Npb25fZGVzdHJveS5zdHViLAAAAOtPo2ksAAAAD79OAaQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zZXNzaW9uL3Nlc3Npb25fY2FjaGVfbGltaXRlci5zdHViTwAAAOtPo2lPAAAAoJJW56QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zZXNzaW9uL3Nlc3Npb25fbmFtZS5zdHViZwAAAOtPo2lnAAAAFkM776QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zZXNzaW9uL3Nlc3Npb25faWQuc3R1YkEAAADrT6NpQQAAAB/zgaykAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc2Vzc2lvbi9zZXNzaW9uX2RlY29kZS5zdHViNwAAAOtPo2k3AAAAkb7sraQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zZXNzaW9uL3Nlc3Npb25fY2FjaGVfZXhwaXJlLnN0dWJIAAAA60+jaUgAAADVEf2xpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Nlc3Npb24vc2Vzc2lvbl9yZWdlbmVyYXRlX2lkLnN0dWJSAAAA60+jaVIAAABNY2gXpAEAAAAAAABYAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Nlc3Npb24vU2Vzc2lvblVwZGF0ZVRpbWVzdGFtcEhhbmRsZXJJbnRlcmZhY2Uuc3R1YisBAADrT6NpKwEAAI7zQrqkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc2Vzc2lvbi9zZXNzaW9uX2NvbW1pdC5zdHViTQAAAOtPo2lNAAAAbg09kqQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zZXNzaW9uL3Nlc3Npb25fZ2Muc3R1YiwAAADrT6NpLAAAAByHiaCkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc2Vzc2lvbi9zZXNzaW9uX3Jlc2V0LnN0dWIqAAAA60+jaSoAAADWB2x/pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Nlc3Npb24vU2Vzc2lvbkhhbmRsZXIuc3R1Yq8DAADrT6NprwMAAI7EAR+kAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZW5kLnN0dWI1AAAA60+jaTUAAAB/p9hlpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2RlZzJyYWQuc3R1Yi8AAADrT6NpLwAAAEMSfrekAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQva3Jzb3J0LnN0dWKxAAAA60+jabEAAACNYkvxpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2ZpbGV0eXBlLnN0dWI9AAAA60+jaT0AAAAPERZMpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL21pbi5zdHViPwAAAOtPo2k/AAAA9sr41KQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9maW5kX2tleS5zdHViXQAAAOtPo2ldAAAAeKsjjaQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pc19mbG9hdC5zdHViMQAAAOtPo2kxAAAAmIrKm6QBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9jZWlsLnN0dWIwAAAA60+jaTAAAABSH+A+pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X3Byb2R1Y3Quc3R1YjsAAADrT6NpOwAAAJRx8S2kAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaGVhZGVyLnN0dWJwAAAA60+jaXAAAAA3XqLApAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9jb250ZXh0X3NldF9vcHRpb24uc3R1YoUBAADrT6NphQEAAP5LzwqkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvQXNzZXJ0aW9uRXJyb3Iuc3R1YkAAAADrT6NpQAAAANE2gMKkAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbWVtb3J5X3Jlc2V0X3BlYWtfdXNhZ2Uuc3R1YkUAAADrT6NpRQAAAOm3ND+kAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvY3J5cHQuc3R1Yk4AAADrT6NpTgAAABqsN5WkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaW5fYXJyYXkuc3R1YlkAAADrT6NpWQAAACgxs8OkAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXIuc3R1YoIAAADrT6NpggAAAEskEAikAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfbWVyZ2Uuc3R1YjkAAADrT6NpOQAAAJEZvGSkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbW92ZV91cGxvYWRlZF9maWxlLnN0dWJHAAAA60+jaUcAAABVAYcqpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Jhc2U2NF9lbmNvZGUuc3R1YkkAAADrT6NpSQAAANAZ0xikAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZmlsZWN0aW1lLnN0dWI7AAAA60+jaTsAAADyqTOSpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3BvcGVuLnN0dWJXAAAA60+jaVcAAADCb6EupAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2tleV9leGlzdHMuc3R1YnYAAADrT6NpdgAAAEAppTukAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RycG9zLnN0dWJZAAAA60+jaVkAAACR5U8/pAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2xjZ192YWx1ZS5zdHViMwAAAOtPo2kzAAAAcgPvKqQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9yZWFkbGluay5zdHVidgAAAOtPo2l2AAAASFDA9aQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9kbnNfZ2V0X214LnN0dWKKAAAA60+jaYoAAAAl9w7vpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2luZXRfbnRvcC5zdHViVQAAAOtPo2lVAAAA/1l02aQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pbXBsb2RlLnN0dWJTAAAA60+jaVMAAABxP1blpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cnNwbi5zdHViagAAAOtPo2lqAAAADup4gKQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9jb3VudF9jaGFycy5zdHViegAAAOtPo2l6AAAAN5xugKQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9nbG9iLnN0dWJvAAAA60+jaW8AAADn3t/RpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9maWx0ZXJfcmVtb3ZlLnN0dWJlAAAA60+jaWUAAAA4bSX0pAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL29iX2dldF9jb250ZW50cy5zdHViNAAAAOtPo2k0AAAACnA+UqQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJfcmVwbGFjZS5zdHVi2QAAAOtPo2nZAAAAELq7mqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9oZWJyZXYuc3R1YlAAAADrT6NpUAAAAEo9AkmkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaW5pX2dldF9hbGwuc3R1YnUAAADrT6NpdQAAAJXLGsykAQAAAAAAAE0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24uc3R1Ys4AAADrT6NpzgAAAEqCu0ukAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyX2lyZXBsYWNlLnN0dWK2AAAA60+jabYAAABZozkFpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2h0bWxlbnRpdGllcy5zdHViXQEAAOtPo2ldAQAAUpBpfqQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zZXRyYXdjb29raWUuc3R1YsIAAADrT6NpwgAAABQk2IOkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3lzbG9nLnN0dWKdAAAA60+jaZ0AAAD7oO14pAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X3NsaWNlLnN0dWJ0AAAA60+jaXQAAAAfHOrupAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N1YnN0cl9yZXBsYWNlLnN0dWKuAAAA60+jaa4AAABbW6cSpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Jhc2VuYW1lLnN0dWJIAAAA60+jaUgAAABdYRHXpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Ruc19jaGVja19yZWNvcmQuc3R1YoEAAADrT6NpgQAAAIsIAZOkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyX3dvcmRfY291bnQuc3R1YoIAAADrT6NpggAAANx3fRukAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfdWludGVyc2VjdC5zdHViZwAAAOtPo2lnAAAAE1bFm6QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC91dGY4X2RlY29kZS5zdHViOAAAAOtPo2k4AAAApXuSLKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJpcF90YWdzLnN0dWJfAAAA60+jaV8AAADRBcBmpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldF9kZWJ1Z190eXBlLnN0dWI5AAAA60+jaTkAAADzMSZEpAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9zZXRfd3JpdGVfYnVmZmVyLnN0dWJkAAAA60+jaWQAAAAByxTvpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2NvbnZlcnRfdXVlbmNvZGUuc3R1Yk4AAADrT6NpTgAAAICMy36kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfdW5pcXVlLnN0dWJQAAAA60+jaVAAAAB8M0q/pAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X2ludGVyc2VjdF9rZXkuc3R1Yk8AAADrT6NpTwAAAAvr6YekAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvY2FsbF91c2VyX2Z1bmMuc3R1Yk4AAADrT6NpTgAAALDL6fKkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbmxfbGFuZ2luZm8uc3R1Yk4AAADrT6NpTgAAAOaUPG6kAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbWFpbC5zdHViqAAAAOtPo2moAAAAZmPumqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zY2FuZGlyLnN0dWK2AAAA60+jabYAAAD2tjrkpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3JhbmRvbV9ieXRlcy5zdHViRQAAAOtPo2lFAAAATwHn/qQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9jb3VudF92YWx1ZXMuc3R1YmkAAADrT6NpaQAAAHKmWmWkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RycGJyay5zdHViTgAAAOtPo2lOAAAA7MxL3aQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9maWxlYXRpbWUuc3R1YkwAAADrT6NpTAAAANZ8+gWkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZmVvZi5zdHViRwAAAOtPo2lHAAAAPfxtl6QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9nZXRob3N0bmFtZS5zdHViWwAAAOtPo2lbAAAAMSmrjqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9mY2xvc2Uuc3R1YkkAAADrT6NpSQAAAHB8yQCkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfY29tYmluZS5zdHViRQAAAOtPo2lFAAAAyGOTYKQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJlYW1fYnVja2V0X25ldy5zdHViAQEAAOtPo2kBAQAANuuGnqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9vcGVubG9nLnN0dWL9AAAA60+jaf0AAAAm3nJgpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldF9icm93c2VyLnN0dWKbAAAA60+jaZsAAAATLxMupAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2ZvcndhcmRfc3RhdGljX2NhbGwuc3R1YlMAAADrT6NpUwAAAJv/lfikAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvb3JkLnN0dWIwAAAA60+jaTAAAAAy7GEvpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3BjbG9zZS5zdHViSAAAAOtPo2lIAAAAPXT4uKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9EaXJlY3Rvcnkuc3R1YvkBAADrT6Np+QEAAHSPd12kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaW5ldF9wdG9uLnN0dWJVAAAA60+jaVUAAADJlLEApAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X3NoaWZ0LnN0dWI2AAAA60+jaTYAAAC2MFOepAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2luaV9zZXQuc3R1YsEAAADrT6NpwQAAAKYSFlCkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcmVhZGZpbGUuc3R1YpAAAADrT6NpkAAAANLkD6KkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvb3BlbmRpci5zdHVijwAAAOtPo2mPAAAAiiNgcqQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9leHBtMS5zdHViLQAAAOtPo2ktAAAA6kJmjqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9jaGVja2Ruc3JyLnN0dWJrAAAA60+jaWsAAADg+58BpAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9jb250ZXh0X2NyZWF0ZS5zdHVicQAAAOtPo2lxAAAAUr81UqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9mcHV0Y3N2LnN0dWJ/AQAA60+jaX8BAAABXkAipAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Nsb3NlbG9nLnN0dWJlAAAA60+jaWUAAABJ5BCApAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL210X3JhbmQuc3R1YkkAAADrT6NpSQAAAIA6GRakAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZmx1c2guc3R1YiIAAADrT6NpIgAAAA/wg0WkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZ2V0c2VydmJ5bmFtZS5zdHViZwAAAOtPo2lnAAAAzcvl7qQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9wYXNzd29yZF9hbGdvcy5zdHViLAAAAOtPo2ksAAAAFB4W16QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9sb2cxMC5zdHViLQAAAOtPo2ktAAAAbprlyaQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJfc3RhcnRzX3dpdGguc3R1YkwAAADrT6NpTAAAAPbLFVmkAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbWF4LnN0dWI/AAAA60+jaT8AAAD+hv77pAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2lzX2RvdWJsZS5zdHViSQAAAOtPo2lJAAAA9JSl46QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9sdHJpbS5zdHViWAAAAOtPo2lYAAAAyMU7LaQBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJlYW1fY29udGV4dF9nZXRfcGFyYW1zLnN0dWJyAAAA60+jaXIAAACkdLH7pAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3NvY2tldF9nZXRfc3RhdHVzLnN0dWJ4AAAA60+jaXgAAAAb3xXVpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3Vuc2VyaWFsaXplLnN0dWJKAAAA60+jaUoAAAD3lcmSpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2NvbnN0YW50LnN0dWJKAAAA60+jaUoAAABrtyy7pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cl9kZWNyZW1lbnQuc3R1YksAAADrT6NpSwAAAHqrUpGkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3JhbmQuc3R1YucAAADrT6Np5wAAAHYgTq+kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfc2VhcmNoLnN0dWJpAAAA60+jaWkAAABhxgBppAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9zZXRfcmVhZF9idWZmZXIuc3R1YmMAAADrT6NpYwAAALyGbaWkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3Vic3RyX2NvbXBhcmUuc3R1YowAAADrT6NpjAAAANrQmEekAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvY2xlYXJzdGF0Y2FjaGUuc3R1YmsAAADrT6NpawAAANPHFj+kAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RydHIuc3R1YloAAADrT6NpWgAAADyskf+kAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvdXNvcnQuc3R1YqEAAADrT6NpoQAAAIG2nOmkAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc2luLnN0dWIrAAAA60+jaSsAAAC71oqupAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Nvbm5lY3Rpb25fYWJvcnRlZC5zdHViLgAAAOtPo2kuAAAAN7C1tqQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hdGFuLnN0dWIsAAAA60+jaSwAAAC6E9PNpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3NldHR5cGUuc3R1Yj0AAADrT6NpPQAAAAKkzhmkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfZmxpcC5zdHViYQAAAOtPo2lhAAAADiXoj6QBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJlYW1fc2V0X2NodW5rX3NpemUuc3R1YmkAAADrT6NpaQAAAIrJQCmkAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfaW50ZXJzZWN0X3Vhc3NvYy5zdHVibQAAAOtPo2ltAAAADz06fKQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9fX1BIUF9JbmNvbXBsZXRlX0NsYXNzLnN0dWJeAAAA60+jaV4AAABMRzhIpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9zdXBwb3J0c19sb2NrLnN0dWJXAAAA60+jaVcAAAB4CazEpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9maWx0ZXJfcmVnaXN0ZXIuc3R1YlUAAADrT6NpVQAAAC1u8wOkAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaW1hZ2VfdHlwZV90b19leHRlbnNpb24uc3R1YmUAAADrT6NpZQAAAOjfY5KkAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcmVnaXN0ZXJfdGlja19mdW5jdGlvbi5zdHViXAAAAOtPo2lcAAAA+m4fKKQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9tZDUuc3R1YlIAAADrT6NpUgAAALL+oCmkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcmVhbHBhdGhfY2FjaGVfc2l6ZS5zdHViLwAAAOtPo2kvAAAAeg61bKQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9mdG9rLnN0dWJmAAAA60+jaWYAAAAvtCfqpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3Bvcy5zdHViSgAAAOtPo2lKAAAAxuoFBqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC91a3NvcnQuc3R1YqMAAADrT6NpowAAAETEhLykAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaGVhZGVyX3JlbW92ZS5zdHViPgAAAOtPo2k+AAAA+321+qQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9wYXJzZV9zdHIuc3R1YloAAADrT6NpWgAAAMiHUEmkAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfdWludGVyc2VjdF9hc3NvYy5zdHVibQAAAOtPo2ltAAAATSl3l6QBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9kaXJuYW1lLnN0dWJDAAAA60+jaUMAAAAhav7QpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldF9pbmNsdWRlX3BhdGguc3R1YjUAAADrT6NpNQAAAGjk1mGkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZm9wZW4uc3R1Yq4AAADrT6NprgAAABqHyfWkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbGlua2luZm8uc3R1YjYAAADrT6NpNgAAALia3Y2kAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX3NvY2tldF9zaHV0ZG93bi5zdHVieQAAAOtPo2l5AAAA3iK9DaQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pc19yZWFkYWJsZS5zdHViOAAAAOtPo2k4AAAAW0uJeqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9waHB2ZXJzaW9uLnN0dWJIAAAA60+jaUgAAADMTPmKpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cl9yZXBlYXQuc3R1YkMAAADrT6NpQwAAAM4r0H+kAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbXRfc3JhbmQuc3R1Yt8AAADrT6Np3wAAACeoneKkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvdGltZV9uYW5vc2xlZXAuc3R1YnkAAADrT6NpeQAAAOOPMAKkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyY3Nwbi5zdHViawAAAOtPo2lrAAAA6OR+G6QBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9odHRwX2J1aWxkX3F1ZXJ5LnN0dWKyAAAA60+jabIAAACr7okcpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3Vhc29ydC5zdHViowAAAOtPo2mjAAAAVm5ItqQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJyaXBvcy5zdHViWwAAAOtPo2lbAAAA7IPC0qQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9ydHJpbS5zdHViWAAAAOtPo2lYAAAAdDGwNaQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9md3JpdGUuc3R1YnEAAADrT6NpcQAAALCOFPWkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbmwyYnIuc3R1YkoAAADrT6NpSgAAADtXdEKkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc2FwaV93aW5kb3dzX2NwX3NldC5zdHViZQAAAOtPo2llAAAATnaBW6QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9mc3luYy5zdHViWQAAAOtPo2lZAAAAKwCrDaQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hc2luLnN0dWIsAAAA60+jaSwAAAAr+xs5pAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9nZXRfdHJhbnNwb3J0cy5zdHViSgAAAOtPo2lKAAAA/Zvcx6QBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9vYl9jbGVhbi5zdHViJQAAAOtPo2klAAAATbbR0qQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9rZXkuc3R1Yj4AAADrT6NpPgAAAHux3KCkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3FydC5zdHViLAAAAOtPo2ksAAAAlaCRmqQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pbmlfYWx0ZXIuc3R1YvEAAADrT6Np8QAAAGd9i9mkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaXNfY2FsbGFibGUuc3R1YosAAADrT6NpiwAAAIEYrSikAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfcmV2ZXJzZS5zdHViVAAAAOtPo2lUAAAAwrwpMKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zaHVmZmxlLnN0dWJ9AAAA60+jaX0AAADKk2N+pAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3BhdGhpbmZvLnN0dWJrAAAA60+jaWsAAACiNlvEpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2lzX2FycmF5LnN0dWIxAAAA60+jaTEAAADK8OabpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X3VkaWZmX3Vhc3NvYy5zdHViaQAAAOtPo2lpAAAAQkqa06QBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC91bmxpbmsuc3R1YmkAAADrT6NpaQAAAIO/HcikAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvY29weS5zdHVibwAAAOtPo2lvAAAAS/IZPaQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9leHAuc3R1YisAAADrT6NpKwAAAMH2wdukAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaGlnaGxpZ2h0X3N0cmluZy5zdHVi3gAAAOtPo2neAAAAgmtir6QBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zYXBpX3dpbmRvd3NfY3BfY29udi5zdHVidgAAAOtPo2l2AAAA50ldpKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9maW5kLnN0dWJZAAAA60+jaVkAAADpbjzspAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2lzX2xvbmcuc3R1YkUAAADrT6NpRQAAAA5I/6WkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcmVzZXQuc3R1YjcAAADrT6NpNwAAALSSP1+kAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYm9vbHZhbC5zdHViMAAAAOtPo2kwAAAAI89BA6QBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9jYWxsX3VzZXJfZnVuY19hcnJheS5zdHViUQAAAOtPo2lRAAAAKxa6d6QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9mbG9vci5zdHViMQAAAOtPo2kxAAAAb3DoWqQBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pbWFnZV90eXBlX3RvX21pbWVfdHlwZS5zdHViUwAAAOtPo2lTAAAAkjF7zqQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9waHBfc2FwaV9uYW1lLnN0dWIyAAAA60+jaTIAAACI18dZpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2RlY29jdC5zdHViLQAAAOtPo2ktAAAAwY4dK6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9mdHJ1bmNhdGUuc3R1YlcAAADrT6NpVwAAANOM06OkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaW5pX3BhcnNlX3F1YW50aXR5LnN0dWJQAAAA60+jaVAAAAABMwmWpAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3NhcGlfd2luZG93c19jcF9nZXQuc3R1YkAAAADrT6NpQAAAAMvZOZakAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvb2JfZ2V0X3N0YXR1cy5zdHViWwAAAOtPo2lbAAAA04FXJqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJlYW1fZ2V0X2xpbmUuc3R1YnwAAADrT6NpfAAAAKOmwaekAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfaW50ZXJzZWN0LnN0dWJLAAAA60+jaUsAAACJ7V3gpAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3NoYTEuc3R1YlQAAADrT6NpVAAAALz+DMKkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZmlsZWlub2RlLnN0dWI7AAAA60+jaTsAAABsNiJNpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3ZlcnNpb25fY29tcGFyZS5zdHVifwAAAOtPo2l/AAAAWjVnkKQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9pc19saXN0LnN0dWJHAAAA60+jaUcAAADfEDjgpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3VucGFjay5zdHVihgAAAOtPo2mGAAAAU31U2aQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9jb252ZXJ0X3V1ZGVjb2RlLnN0dWJDAAAA60+jaUMAAAA2w2KBpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3NzY2FuZi5zdHVicwAAAOtPo2lzAAAADV2bj6QBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9nZXRob3N0YnlhZGRyLnN0dWJDAAAA60+jaUMAAAAbqRicpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2lzX2V4ZWN1dGFibGUuc3R1YjoAAADrT6NpOgAAABxI0HCkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX3NvY2tldF9zZXJ2ZXIuc3R1Yi0BAADrT6NpLQEAAGe641mkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX2J1Y2tldF9wcmVwZW5kLnN0dWL2AAAA60+jafYAAAD5cYRtpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldHJhbmRtYXguc3R1YkIAAADrT6NpQgAAABxsEmGkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcGFzc3dvcmRfZ2V0X2luZm8uc3R1YmMAAADrT6NpYwAAAAy1rhekAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyY29sbC5zdHViSgAAAOtPo2lKAAAAv+0wlaQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zZXRfdGltZV9saW1pdC5zdHViawAAAOtPo2lrAAAALPpteqQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9nZXRfaGVhZGVycy5zdHViogAAAOtPo2miAAAACvlDQ6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9wdXNoLnN0dWJTAAAA60+jaVMAAABergM7pAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV93cmFwcGVyX3VucmVnaXN0ZXIuc3R1YkYAAADrT6NpRgAAABXGB3mkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvdXJsZW5jb2RlLnN0dWI2AAAA60+jaTYAAACLeollpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldGhvc3RieW5hbWVsLnN0dWJZAAAA60+jaVkAAAC22+57pAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X2tleV9leGlzdHMuc3R1Yl0AAADrT6NpXQAAAIdeMrekAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvdG1wZmlsZS5zdHViPAAAAOtPo2k8AAAApz+nD6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9maWxlZ3JvdXAuc3R1YjsAAADrT6NpOwAAAIY0A6KkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcmVhZGRpci5zdHViZgAAAOtPo2lmAAAAn8Y5N6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9tYXAuc3R1YloAAADrT6NpWgAAAEtj/NykAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RydmFsLnN0dWIxAAAA60+jaTEAAAC3lIEHpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3Bhc3N3b3JkX3ZlcmlmeS5zdHViSgAAAOtPo2lKAAAApuyzFKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9oZXgyYmluLnN0dWI6AAAA60+jaToAAABAUVwxpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL29iX3N0YXJ0LnN0dWJyAQAA60+jaXIBAAB9PKulpAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2ZkaXYuc3R1YjoAAADrT6NpOgAAAPhdgPGkAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc2FwaV93aW5kb3dzX2NwX2lzX3V0Zjguc3R1YjQAAADrT6NpNAAAAFaX0IukAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvY2hkaXIuc3R1YjMAAADrT6NpMwAAAHsCUlGkAQAAAAAAAE4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX3NvY2tldF9lbmFibGVfY3J5cHRvLnN0dWLQAAAA60+jadAAAAB8z2oipAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldGltYWdlc2l6ZS5zdHViiAAAAOtPo2mIAAAAyeKJ7qQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9mZ2V0cy5zdHViZQAAAOtPo2llAAAAn8+AMqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9oZXhkZWMuc3R1YjoAAADrT6NpOgAAAEFUBgKkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvb2JfZ2V0X2xlbmd0aC5zdHViLwAAAOtPo2kvAAAA7wnXnaQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9nZXRteXVpZC5zdHViOwAAAOtPo2k7AAAAkDRHC6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9wcm9jX25pY2Uuc3R1YkQAAADrT6NpRAAAAP2UhQWkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcmF3dXJsZW5jb2RlLnN0dWI5AAAA60+jaTkAAADMwPgGpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldF9jdXJyZW50X3VzZXIuc3R1YjYAAADrT6NpNgAAAK5S8JKkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc29ja2V0X3NldF9ibG9ja2luZy5zdHVihgAAAOtPo2mGAAAACttAfqQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC92ZnByaW50Zi5zdHViaQAAAOtPo2lpAAAAjhlByaQBAAAAAAAAUAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zYXBpX3dpbmRvd3Nfc2V0X2N0cmxfaGFuZGxlci5zdHViXgAAAOtPo2leAAAAlsl8+KQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9iYXNlX2NvbnZlcnQuc3R1YlQAAADrT6NpVAAAAFkhdLqkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcXVvdGVtZXRhLnN0dWI2AAAA60+jaTYAAACPo1YNpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Fzc2VydC5zdHVieAAAAOtPo2l4AAAAzaJNb6QBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9yYW5kLnN0dWJGAAAA60+jaUYAAACfHbaEpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9zb2NrZXRfY2xpZW50LnN0dWIxAQAA60+jaTEBAACzc5V4pAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X3dhbGtfcmVjdXJzaXZlLnN0dWL5AAAA60+jafkAAAD0YwYypAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL29iX2VuZF9mbHVzaC5zdHViKQAAAOtPo2kpAAAA/f3K0qQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV92YWx1ZXMuc3R1YlQAAADrT6NpVAAAAK9/+rukAQAAAAAAAFMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc2FwaV93aW5kb3dzX2dlbmVyYXRlX2N0cmxfZXZlbnQuc3R1YlUAAADrT6NpVQAAAAVgq6qkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfY2hhbmdlX2tleV9jYXNlLnN0dWJXAAAA60+jaVcAAADBllEepAEAAAAAAABRAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2h0dHBfZ2V0X2xhc3RfcmVzcG9uc2VfaGVhZGVycy5zdHViTgAAAOtPo2lOAAAAPay5xKQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9jb3VudC5zdHViUgAAAOtPo2lSAAAAR9TDHaQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJlYW1fc2V0X2Jsb2NraW5nLnN0dWJkAAAA60+jaWQAAACHyu11pAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3V0ZjhfZW5jb2RlLnN0dWI4AAAA60+jaTgAAABfGuI/pAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X2FueS5zdHViVwAAAOtPo2lXAAAAH8PbRKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9iaW4yaGV4LnN0dWJDAAAA60+jaUMAAACgRg/bpAEAAAAAAABPAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9idWNrZXRfbWFrZV93cml0ZWFibGUuc3R1YicBAADrT6NpJwEAAFCu986kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvb2JfZ2V0X2NsZWFuLnN0dWIxAAAA60+jaTEAAADGesLVpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X3BvcC5zdHViNAAAAOtPo2k0AAAADvNt36QBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pbmlfZ2V0LnN0dWI6AAAA60+jaToAAAARkQSVpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N5c19nZXRsb2FkYXZnLnN0dWJnAAAA60+jaWcAAAB72GR2pAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2ZpbGVvd25lci5zdHViOwAAAOtPo2k7AAAAAr1PaKQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9uYXRjYXNlc29ydC5zdHVihQAAAOtPo2mFAAAAQYbtaaQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9jb2x1bW4uc3R1YnYAAADrT6NpdgAAAAElAamkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvb2JfaW1wbGljaXRfZmx1c2guc3R1YkEAAADrT6NpQQAAAO+D7bqkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvY2hyb290LnN0dWJ0AAAA60+jaXQAAADP6ZDnpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X3JlZHVjZS5zdHViYQAAAOtPo2lhAAAADeeqQaQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJfZW5kc193aXRoLnN0dWJKAAAA60+jaUoAAADG1kpPpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3dvcmR3cmFwLnN0dWJ6AAAA60+jaXoAAABj2UVipAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3JtZGlyLnN0dWJpAAAA60+jaWkAAABwTyPhpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3NlcmlhbGl6ZS5zdHViNAAAAOtPo2k0AAAA4vSN16QBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJlYW1fc29ja2V0X2FjY2VwdC5zdHVisQEAAOtPo2mxAQAAxCirX6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zaGVsbF9leGVjLnN0dWJDAAAA60+jaUMAAAChj1eZpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2lzX2ludGVnZXIuc3R1YkgAAADrT6NpSAAAAJLzII2kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc2ltaWxhcl90ZXh0LnN0dWJ3AAAA60+jaXcAAACmB5s8pAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9yZWdpc3Rlcl93cmFwcGVyLnN0dWKJAAAA60+jaYkAAAC1nX9FpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2lzX29iamVjdC5zdHViMgAAAOtPo2kyAAAA+PMqaqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9maWxsX2tleXMuc3R1YkYAAADrT6NpRgAAAKGUbfykAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfdW5zaGlmdC5zdHViSAAAAOtPo2lIAAAAYrWOYKQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pc19pdGVyYWJsZS5zdHViNAAAAOtPo2k0AAAAOMWdqaQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9wcm9jX3Rlcm1pbmF0ZS5zdHViZQAAAOtPo2llAAAAz3VPwaQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9jb3Muc3R1YisAAADrT6NpKwAAAJ5ZRiqkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZnN0YXQuc3R1YmIAAADrT6NpYgAAAGg385ikAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvb2JfbGlzdF9oYW5kbGVycy5zdHViRQAAAOtPo2lFAAAARFQMZaQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9nZXRydXNhZ2Uuc3R1Ym4AAADrT6NpbgAAAKXB5DykAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvdnByaW50Zi5zdHViQAAAAOtPo2lAAAAA9F4AQaQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zaGExX2ZpbGUuc3R1YlQAAADrT6NpVAAAAGRFVyKkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyX3BhZC5zdHViegAAAOtPo2l6AAAAZePiIaQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9kbC5zdHViOQAAAOtPo2k5AAAALVV+hqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9yYW5kb21faW50LnN0dWI4AAAA60+jaTgAAADV0CNzpAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9nZXRfY29udGVudHMuc3R1YoUAAADrT6NphQAAAPUwJPKkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcGhwX2luaV9sb2FkZWRfZmlsZS5zdHViOAAAAOtPo2k4AAAAsTAMH6QBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9pbnRlcnNlY3RfdWtleS5zdHViawAAAOtPo2lrAAAA7nz6nKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pc19zdHJpbmcuc3R1YjIAAADrT6NpMgAAAHgI84SkAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcG93LnN0dWJHAAAA60+jaUcAAABcoTTPpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2NvbXBhY3Quc3R1Yp8AAADrT6NpnwAAAHq649ikAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaHRtbHNwZWNpYWxjaGFycy5zdHVihwEAAOtPo2mHAQAAuARX1qQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zaXplb2Yuc3R1YmcAAADrT6NpZwAAAES5thSkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfbXVsdGlzb3J0LnN0dWKiAAAA60+jaaIAAABu/GxhpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3JvdW5kLnN0dWIYAQAA60+jaRgBAABwfG1xpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3Byb2Nfb3Blbi5zdHViCAEAAOtPo2kIAQAACeS85qQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pc19zY2FsYXIuc3R1YjIAAADrT6NpMgAAADKB2m2kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyX3NwbGl0LnN0dWJkAAAA60+jaWQAAADEz9bNpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3NsZWVwLnN0dWItAAAA60+jaS0AAADaM2NMpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmlwb3Muc3R1YloAAADrT6NpWgAAAEJTQdGkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RybmF0Y21wLnN0dWJFAAAA60+jaUUAAABolUyIpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N5c3RlbS5zdHVibwAAAOtPo2lvAAAAN9KbEKQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9kZWJ1Z196dmFsX2R1bXAuc3R1YkoAAADrT6NpSgAAAGQ1zYmkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaXNfaW50LnN0dWIvAAAA60+jaS8AAADws171pAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Zsb2F0dmFsLnN0dWIyAAAA60+jaTIAAADn+zL7pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2lzX2NvdW50YWJsZS5zdHViNQAAAOtPo2k1AAAAwPruc6QBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJlYW1fZ2V0X2ZpbHRlcnMuc3R1YkcAAADrT6NpRwAAADQsDGCkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaHR0cF9yZXNwb25zZV9jb2RlLnN0dWJJAAAA60+jaUkAAAB5uWcKpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FkZGNzbGFzaGVzLnN0dWJMAAAA60+jaUwAAABh0BNxpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2xvZzFwLnN0dWItAAAA60+jaS0AAADbYDnvpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3BpLnN0dWIgAAAA60+jaSAAAABfbG/NpAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3ByZXYuc3R1YjYAAADrT6NpNgAAAPuYkWykAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaXNfaW5maW5pdGUuc3R1YjIAAADrT6NpMgAAANBr9m+kAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcGhwaW5mby5zdHVimgAAAOtPo2maAAAA/t+Sv6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJfcm90MTMuc3R1YjYAAADrT6NpNgAAAOiwmzukAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvdXNsZWVwLnN0dWI0AAAA60+jaTQAAAClExwIpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X2RpZmZfdWtleS5zdHViZgAAAOtPo2lmAAAA1jeBDaQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zZXRfaW5jbHVkZV9wYXRoLnN0dWJJAAAA60+jaUkAAAASqoeypAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cnRvdXBwZXIuc3R1YjcAAADrT6NpNwAAADlaK/ukAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbWVtb3J5X2dldF91c2FnZS5zdHViRAAAAOtPo2lEAAAARaxOvaQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9iYXNlNjRfZGVjb2RlLnN0dWJWAAAA60+jaVYAAAA1FmxRpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3RlbXBuYW0uc3R1Yk0AAADrT6NpTQAAAD57iySkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaW50ZGl2LnN0dWI2AAAA60+jaTYAAABd0GHQpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2ZwcmludGYuc3R1YmsAAADrT6NpawAAAMFVjR+kAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZGlyLnN0dWJzAAAA60+jaXMAAAC0P6rvpAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Nvc2guc3R1YiwAAADrT6NpLAAAAGftq2WkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3lzX2dldF90ZW1wX2Rpci5zdHViNgAAAOtPo2k2AAAA7pRRcaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pc19udWxsLnN0dWIwAAAA60+jaTAAAAC5RTimpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cnJwb3Muc3R1YloAAADrT6NpWgAAABNHfQqkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvdW5pcWlkLnN0dWJ8AAAA60+jaXwAAAA9Nxq4pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N1YnN0cl9jb3VudC5zdHVibgAAAOtPo2luAAAAzhIbSKQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9rZXlfZmlyc3Quc3R1YkMAAADrT6NpQwAAAEhyyrekAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyX2luY3JlbWVudC5zdHViSwAAAOtPo2lLAAAAdI0Xt6QBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9vdXRwdXRfYWRkX3Jld3JpdGVfdmFyLnN0dWJOAAAA60+jaU4AAABdlOo0pAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL21ldGFwaG9uZS5zdHViZgAAAOtPo2lmAAAA3+Pp0KQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9mc2Vlay5zdHVibAAAAOtPo2lsAAAAuImfjqQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pbmlfcmVzdG9yZS5zdHViNgAAAOtPo2k2AAAAaRVrFKQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9lc2NhcGVzaGVsbGNtZC5zdHViPAAAAOtPo2k8AAAARS1fhaQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9kaWZmX2Fzc29jLnN0dWJMAAAA60+jaUwAAADvQr2epAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X2ZpbHRlci5zdHViYQAAAOtPo2lhAAAAnr78j6QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9mbG9jay5zdHVioQAAAOtPo2mhAAAAKS0m7qQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9mZmx1c2guc3R1YkkAAADrT6NpSQAAAGQkX2CkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbmV0X2dldF9pbnRlcmZhY2VzLnN0dWKIAAAA60+jaYgAAADu8nQxpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3B1dGVudi5zdHViSAAAAOtPo2lIAAAAxCuBVqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC91Y2ZpcnN0LnN0dWI0AAAA60+jaTQAAACd+w3cpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmNoci5zdHVifQAAAOtPo2l9AAAAk7ZG4qQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9oZWFkZXJzX2xpc3Quc3R1YkEAAADrT6NpQQAAAJpnGsWkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyaXBjc2xhc2hlcy5zdHViOgAAAOtPo2k6AAAAr05fWKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9mbm1hdGNoLnN0dWJpAAAA60+jaWkAAAC4ANNipAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2lzX25hbi5zdHViLQAAAOtPo2ktAAAAHiMbIqQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9maWxlLnN0dWKVAAAA60+jaZUAAACamNVLpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2V4cGxvZGUuc3R1Yo0AAADrT6NpjQAAANKkKE2kAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfd2Fsay5zdHVi5QAAAOtPo2nlAAAAvVqRqqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9wZnNvY2tvcGVuLnN0dWLiAAAA60+jaeIAAAB7W6BopAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3RyaW0uc3R1YlcAAADrT6NpVwAAAJa5nSukAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaXNfZmluaXRlLnN0dWIwAAAA60+jaTAAAACwjUFypAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9zZXRfdGltZW91dC5zdHVipAAAAOtPo2mkAAAAuGnZh6QBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pc19maWxlLnN0dWI0AAAA60+jaTQAAAD5Sg+JpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3JlbmFtZS5zdHVicQAAAOtPo2lxAAAAoZIbBKQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9nZXRzZXJ2Ynlwb3J0LnN0dWJrAAAA60+jaWsAAABG6VfypAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3BocGNyZWRpdHMuc3R1YpkAAADrT6NpmQAAAA8JHYakAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfcmVwbGFjZS5zdHViTwAAAOtPo2lPAAAAfJ43Y6QBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9yZXF1ZXN0X3BhcnNlX2JvZHkuc3R1YqkAAADrT6NpqQAAAPqSWyukAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbG9jYWxlY29udi5zdHViPwAAAOtPo2k/AAAADgZ7B6QBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9wYXJzZV9pbmlfZmlsZS5zdHVioQAAAOtPo2mhAAAAGIMKZaQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9yZXdpbmQuc3R1YkkAAADrT6NpSQAAAJtC05CkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZG5zX2dldF9yZWNvcmQuc3R1YhMBAADrT6NpEwEAAGFb6TikAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaW50dmFsLnN0dWI+AAAA60+jaT4AAADiWfO0pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2NyYzMyLnN0dWI9AAAA60+jaT0AAADIQA8IpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldG15aW5vZGUuc3R1YiwAAADrT6NpLAAAALm3JGikAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcmVhbHBhdGhfY2FjaGVfZ2V0LnN0dWJHAAAA60+jaUcAAADWpxyHpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X3VkaWZmX2Fzc29jLnN0dWJoAAAA60+jaWgAAACDzVBqpAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL21lbW9yeV9nZXRfcGVha191c2FnZS5zdHViSQAAAOtPo2lJAAAAKe7+KqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9wcmludGYuc3R1YkIAAADrT6NpQgAAAAfyKBKkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX2J1Y2tldF9hcHBlbmQuc3R1YvQAAADrT6Np9AAAABlruYSkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvdGltZV9zbGVlcF91bnRpbC5zdHViPQAAAOtPo2k9AAAAaJ3iRaQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9lcnJvcl9jbGVhcl9sYXN0LnN0dWItAAAA60+jaS0AAABzceg4pAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3Npbmguc3R1YiwAAADrT6NpLAAAAK/1Ky6kAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbHN0YXQuc3R1YlAAAADrT6NpUAAAAJCv+KWkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3ltbGluay5zdHViQAAAAOtPo2lAAAAAB+svaqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pc19ib29sLnN0dWIwAAAA60+jaTAAAACA//kepAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL29iX2ZsdXNoLnN0dWIlAAAA60+jaSUAAACS4iRFpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9zb2NrZXRfc2VuZHRvLnN0dWKQAAAA60+jaZAAAAC0yGf9pAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cnB0aW1lLnN0dWKHAAAA60+jaYcAAACd74F+pAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cnRvay5zdHViUAAAAOtPo2lQAAAAikdMiKQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9lcnJvcl9nZXRfbGFzdC5zdHViRAAAAOtPo2lEAAAAVTEazKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pcHRjcGFyc2Uuc3R1YlYAAADrT6NpVgAAAMPXlA+kAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX3NvY2tldF9wYWlyLnN0dWKNAAAA60+jaY0AAABYGXkOpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3NvY2tldF9zZXRfdGltZW91dC5zdHVimwAAAOtPo2mbAAAAVfpS56QBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9sY2hncnAuc3R1YkYAAADrT6NpRgAAAGE76uGkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaHRtbF9lbnRpdHlfZGVjb2RlLnN0dWIeAQAA60+jaR4BAABSgIV7pAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL25leHQuc3R1YjYAAADrT6NpNgAAAIVVh1CkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyaXBzbGFzaGVzLnN0dWI5AAAA60+jaTkAAAAXub9tpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9pc2F0dHkuc3R1YlAAAADrT6NpUAAAAPBrpMCkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZ2V0cHJvdG9ieW5hbWUuc3R1Yl8AAADrT6NpXwAAAHEUnpikAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZ2V0bXlnaWQuc3R1YioAAADrT6NpKgAAAAEb7TWkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvb2JfZ2V0X2xldmVsLnN0dWIoAAAA60+jaSgAAAB5LJwCpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2xvZy5zdHViPgAAAOtPo2k+AAAA4t1H+qQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9yYXd1cmxkZWNvZGUuc3R1YjkAAADrT6NpOQAAADahiBWkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZnNvY2tvcGVuLnN0dWLvAAAA60+jae8AAAAvxgBBpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL1N0cmVhbUJ1Y2tldC5zdHViDAEAAOtPo2kMAQAAImk3FKQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pc19yZXNvdXJjZS5zdHViNAAAAOtPo2k0AAAA8K+TVaQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC91bWFzay5zdHViMgAAAOtPo2kyAAAAJtQdTaQBAAAAAAAATQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJlYW1fY29udGV4dF9nZXRfb3B0aW9ucy5zdHVieAAAAOtPo2l4AAAA4LuEoaQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJlYW1fZmlsdGVyX2FwcGVuZC5zdHVirAAAAOtPo2msAAAArzuXraQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC92YXJfZHVtcC5zdHViTwAAAOtPo2lPAAAA6X2e5KQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9tdF9nZXRyYW5kbWF4LnN0dWIpAAAA60+jaSkAAAAf5WFnpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Noci5zdHViMAAAAOtPo2kwAAAA0hE0bqQBAAAAAAAAUwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9odHRwX2NsZWFyX2xhc3RfcmVzcG9uc2VfaGVhZGVycy5zdHViTgAAAOtPo2lOAAAAQQ4juKQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9jb25uZWN0aW9uX3N0YXR1cy5zdHViLQAAAOtPo2ktAAAAbqPYCqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9vY3RkZWMuc3R1YjwAAADrT6NpPAAAAAjUFjmkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvY2xvc2VkaXIuc3R1Yl8AAADrT6NpXwAAAER5SoekAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyX3NodWZmbGUuc3R1YjgAAADrT6NpOAAAAAA3aoKkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcGFzc3dvcmRfbmVlZHNfcmVoYXNoLnN0dWJqAAAA60+jaWoAAAA3AcFPpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2ZpbGVzaXplLnN0dWI6AAAA60+jaToAAAClxfHxpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3BocF91bmFtZS5zdHViOgAAAOtPo2k6AAAAoJubs6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zZXRjb29raWUuc3R1Yr8AAADrT6NpvwAAAE5+sYmkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvdWN3b3Jkcy5zdHViWAAAAOtPo2lYAAAA/XyIzqQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9udW1iZXJfZm9ybWF0LnN0dWKPAAAA60+jaY8AAAAY5TSdpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldHR5cGUuc3R1YkYAAADrT6NpRgAAAMtfsROkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX2NvcHlfdG9fc3RyZWFtLnN0dWKmAAAA60+jaaYAAACG6j9LpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Rpc2tmcmVlc3BhY2Uuc3R1YmAAAADrT6NpYAAAALJruUukAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaHRtbHNwZWNpYWxjaGFyc19kZWNvZGUuc3R1YvQAAADrT6Np9AAAAMClK5ikAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcmFuZ2Uuc3R1Yg8BAADrT6NpDwEAAGol8T6kAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbGluay5zdHViPQAAAOtPo2k9AAAACt4OtKQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJfY29udGFpbnMuc3R1YkkAAADrT6NpSQAAAGk6M8ukAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfa2V5X2xhc3Quc3R1YkIAAADrT6NpQgAAAIFzN/ekAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfY2h1bmsuc3R1Yl8AAADrT6NpXwAAAFr5tsekAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbmF0c29ydC5zdHVifQAAAOtPo2l9AAAAKiOnkaQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC90b3VjaC5zdHViaQAAAOtPo2lpAAAAD7pB8aQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9wYWQuc3R1Yk4AAADrT6NpTgAAAMZ7fgmkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaXNfbnVtZXJpYy5zdHViMwAAAOtPo2kzAAAAkIFypaQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC90YW5oLnN0dWIsAAAA60+jaSwAAACVnteppAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldGltYWdlc2l6ZWZyb21zdHJpbmcuc3R1YpAAAADrT6NpkAAAAIylebWkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYmluZGVjLnN0dWI9AAAA60+jaT0AAABrWANhpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL21rZGlyLnN0dWKbAAAA60+jaZsAAADxtgEKpAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2pvaW4uc3R1YmYAAADrT6NpZgAAAI/oYSmkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZXNjYXBlc2hlbGxhcmcuc3R1YjgAAADrT6NpOAAAAK8Ni9ykAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZGlza19mcmVlX3NwYWNlLnN0dWJEAAAA60+jaUQAAAAsnFTBpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldG14cnIuc3R1YpwAAADrT6NpnAAAAK1+59+kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZ2V0dGltZW9mZGF5LnN0dWJdAAAA60+jaV0AAADmcTs/pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2V4dHJhY3Quc3R1YnwAAADrT6NpfAAAALm3i2akAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfc3BsaWNlLnN0dWJyAAAA60+jaXIAAADDncE1pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cm5hdGNhc2VjbXAuc3R1YkkAAADrT6NpSQAAAEFffyekAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXRhbmguc3R1Yi0AAADrT6NpLQAAAPycT1mkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc291bmRleC5zdHViRAAAAOtPo2lEAAAAKy+ARKQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hY29zLnN0dWIsAAAA60+jaSwAAAAOdNe9pAEAAAAAAABNAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9jb250ZXh0X3NldF9vcHRpb25zLnN0dWIKAQAA60+jaQoBAADQJ2jEpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Rpc2tfdG90YWxfc3BhY2Uuc3R1YkUAAADrT6NpRQAAAEJ4g8ykAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX2ZpbHRlcl9wcmVwZW5kLnN0dWKtAAAA60+jaa0AAACOBCmypAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3Rhbi5zdHViKwAAAOtPo2krAAAAKj5CWqQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pZ25vcmVfdXNlcl9hYm9ydC5zdHViQQAAAOtPo2lBAAAAnfu5gaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJyY2hyLnN0dWL9AAAA60+jaf0AAACZCQN2pAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X3JlcGxhY2VfcmVjdXJzaXZlLnN0dWJZAAAA60+jaVkAAAD6PlnypAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3BhY2suc3R1YlcAAADrT6NpVwAAADGrjd2kAQAAAAAAAE0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX2NvbnRleHRfZ2V0X2RlZmF1bHQuc3R1Yl8AAADrT6NpXwAAAIzXrNikAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcmVhbHBhdGguc3R1YjkAAADrT6NpOQAAAC8nA36kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvUm91bmRpbmdNb2RlLnN0dWLrAAAA60+jaesAAADME3SPpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9zb2NrZXRfcmVjdmZyb20uc3R1YrMAAADrT6NpswAAAFVxNSSkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfdWRpZmYuc3R1YmIAAADrT6NpYgAAAJv2yEukAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbGNmaXJzdC5zdHViNAAAAOtPo2k0AAAAGwkslqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9nZXRvcHQuc3R1YqYAAADrT6NppgAAAICaD/mkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXRhbjIuc3R1YjUAAADrT6NpNQAAAHpBsBGkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvb2JfZ2V0X2ZsdXNoLnN0dWIxAAAA60+jaTEAAAB4oBz7pAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9jb250ZXh0X3NldF9wYXJhbXMuc3R1YvUAAADrT6Np9QAAAPU5ADykAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZmlsZV9leGlzdHMuc3R1YjgAAADrT6NpOAAAAF6oriykAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXNzZXJ0X29wdGlvbnMuc3R1Yk8AAADrT6NpTwAAAH2/62SkAQAAAAAAAEwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvb3V0cHV0X3Jlc2V0X3Jld3JpdGVfdmFycy5zdHViNgAAAOtPo2k2AAAAA5UGlKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9hbGwuc3R1YlcAAADrT6NpVwAAAMjU2cKkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZmRhdGFzeW5jLnN0dWJdAAAA60+jaV0AAAC48UC4pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3NwcmludGYuc3R1Yl4AAADrT6NpXgAAAJy7U7ikAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvb2JfZW5kX2NsZWFuLnN0dWIpAAAA60+jaSkAAAAiqT9FpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2RvdWJsZXZhbC5zdHViSgAAAOtPo2lKAAAAZ6Eom6QBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9oaWdobGlnaHRfZmlsZS5zdHViWAAAAOtPo2lYAAAAw0g6vKQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJlYW1faXNfbG9jYWwuc3R1YlkAAADrT6NpWQAAAEkSKNGkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcGFzc3RocnUuc3R1YvgAAADrT6Np+AAAAA9PAF6kAQAAAAAAAE0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc2FwaV93aW5kb3dzX3Z0MTAwX3N1cHBvcnQuc3R1YoQAAADrT6NphAAAALeLhz+kAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvdmFyX2V4cG9ydC5zdHViTAAAAOtPo2lMAAAAkWtcfaQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9yYW5kLnN0dWJNAAAA60+jaU0AAAAH0kJRpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Z0ZWxsLnN0dWJNAAAA60+jaU0AAABUxDSGpAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3VucmVnaXN0ZXJfdGlja19mdW5jdGlvbi5zdHViRwAAAOtPo2lHAAAAjxJ7NaQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zZXRfZmlsZV9idWZmZXIuc3R1YoIAAADrT6NpggAAAMzvT0ukAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RycmV2LnN0dWIzAAAA60+jaTMAAACwk/C2pAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X2ZpbGwuc3R1YlIAAADrT6NpUgAAAPYEr8ukAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvY3VycmVudC5zdHViOAAAAOtPo2k4AAAA105y4qQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJzdHIuc3R1YmgAAADrT6NpaAAAABnrPPekAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfaW50ZXJzZWN0X2Fzc29jLnN0dWJRAAAA60+jaVEAAADCs4dMpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldF9jZmdfdmFyLnN0dWJEAAAA60+jaUQAAABBu9HspAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2NoZ3JwLnN0dWJFAAAA60+jaUUAAAD8lSoKpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3JhZDJkZWcuc3R1Yi8AAADrT6NpLwAAAJ1kTy2kAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZGVjYmluLnN0dWItAAAA60+jaS0AAACxIUu+pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2ZwdXRzLnN0dWKFAAAA60+jaYUAAAAn1A1ypAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2RlY2hleC5zdHViLQAAAOtPo2ktAAAAjMKVVaQBAAAAAAAASwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9oZWFkZXJfcmVnaXN0ZXJfY2FsbGJhY2suc3R1YlkAAADrT6NpWQAAANcXcSakAQAAAAAAAE0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX2NvbnRleHRfc2V0X2RlZmF1bHQuc3R1YlcAAADrT6NpVwAAAH+8RB+kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZmlsZXBlcm1zLnN0dWI7AAAA60+jaTsAAADBRh+DpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3BhcnNlX2luaV9zdHJpbmcuc3R1YrsAAADrT6NpuwAAAAy9uHSkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJzb3J0LnN0dWKxAAAA60+jabEAAACSrBFEpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2lwdGNlbWJlZC5zdHVibQAAAOtPo2ltAAAA/S+OKqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9nZXRjd2Quc3R1YjIAAADrT6NpMgAAAKc4OMekAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZ2V0ZW52LnN0dWJ2AAAA60+jaXYAAADhcQCYpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X2tleXMuc3R1YocAAADrT6NphwAAAAoSrGKkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZnJlYWQuc3R1Yl0AAADrT6NpXQAAAPprT5SkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaGVhZGVyc19zZW50LnN0dWKAAAAA60+jaYAAAACe4qdIpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cmVhbV9zb2NrZXRfZ2V0X25hbWUuc3R1Ym8AAADrT6NpbwAAAAUgUVGkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfZGlmZi5zdHViRgAAAOtPo2lGAAAAokOvnaQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hYnMuc3R1YkAAAADrT6NpQAAAAERfZtOkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX3NlbGVjdC5zdHViTwEAAOtPo2lPAQAAz8GJ3aQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9waHBfc3RyaXBfd2hpdGVzcGFjZS5zdHViQwAAAOtPo2lDAAAAvaYlYKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9pc19kaXIuc3R1YjMAAADrT6NpMwAAAPGqivWkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaXNfbGluay5zdHViNAAAAOtPo2k0AAAAk6CiFaQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zZXRsb2NhbGUuc3R1Yo4AAADrT6NpjgAAAJcgSWKkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZ2V0bGFzdG1vZC5zdHViLAAAAOtPo2ksAAAAk/OX06QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hZGRzbGFzaGVzLnN0dWI3AAAA60+jaTcAAABQWdObpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2lzX3dyaXRhYmxlLnN0dWI4AAAA60+jaTgAAADqYrK9pAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2NodW5rX3NwbGl0LnN0dWJmAAAA60+jaWYAAADDLWr5pAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0cnRvbG93ZXIuc3R1YjcAAADrT6NpNwAAAL6amBakAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbWQ1X2ZpbGUuc3R1YlMAAADrT6NpUwAAAJkmqtukAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZmlsZV9nZXRfY29udGVudHMuc3R1YsIAAADrT6NpwgAAANXRmDekAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc2hvd19zb3VyY2Uuc3R1YnIAAADrT6NpcgAAAHanjTakAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZnNjYW5mLnN0dWKNAAAA60+jaY0AAAB0qFsLpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3ByaW50X3Iuc3R1YsgAAADrT6NpyAAAAJcii06kAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZ2V0bXlwaWQuc3R1YioAAADrT6NpKgAAALcWbzSkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX2dldF9tZXRhX2RhdGEuc3R1YlwAAADrT6NpXAAAALMuPiikAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvdXJsZGVjb2RlLnN0dWI2AAAA60+jaTYAAABxG/l2pAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N0YXQuc3R1Yk8AAADrT6NpTwAAACy/YA+kAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcnNvcnQuc3R1Yq8AAADrT6NprwAAADE+XEWkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZmlsZV9wdXRfY29udGVudHMuc3R1YpYAAADrT6NplgAAALuRi4GkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX2dldF93cmFwcGVycy5zdHViSAAAAOtPo2lIAAAA+LrxIaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJpc3RyLnN0dWJpAAAA60+jaWkAAABPqXqtpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2Fzb3J0LnN0dWKvAAAA60+jaa8AAACwVZwhpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2xvbmcyaXAuc3R1Yo4AAADrT6NpjgAAAN3zUZikAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZ2V0aG9zdGJ5bmFtZS5zdHViPAAAAOtPo2k8AAAAtz8BTqQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9jaG9wLnN0dWJrAAAA60+jaWsAAADjxR+3pAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2V4ZWMuc3R1Yq4AAADrT6NprgAAADa4h/ykAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvaXNfd3JpdGVhYmxlLnN0dWJTAAAA60+jaVMAAACjnwatpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FzaW5oLnN0dWItAAAA60+jaS0AAADG97PepAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2dldHByb3RvYnludW1iZXIuc3R1YmMAAADrT6NpYwAAAOgTCImkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZmlsZW10aW1lLnN0dWI7AAAA60+jaTsAAACqU4K+pAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3F1b3RlZF9wcmludGFibGVfZW5jb2RlLnN0dWJEAAAA60+jaUQAAAAwlxwspAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL21pY3JvdGltZS5zdHVibwAAAOtPo2lvAAAAEW/ElaQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9wcm9jX2dldF9zdGF0dXMuc3R1YmgAAADrT6NpaAAAABVfbF2kAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfZGlmZl9rZXkuc3R1YkoAAADrT6NpSgAAAOA9AiukAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcGFyc2VfdXJsLnN0dWKdAAAA60+jaZ0AAACoc/IrpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2lwMmxvbmcuc3R1YjMAAADrT6NpMwAAAOCX/LekAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbGNob3duLnN0dWJVAAAA60+jaVUAAAC8E1mopAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3NvcnQuc3R1Yq0AAADrT6NprQAAACgddlmkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvY29uZmlnX2dldF9oYXNoLnN0dWJTAAAA60+jaVMAAAATjlYrpAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3F1b3RlZF9wcmludGFibGVfZGVjb2RlLnN0dWJeAAAA60+jaV4AAAAPbvWHpAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3BocF9pbmlfc2Nhbm5lZF9maWxlcy5zdHViOgAAAOtPo2k6AAAAVxTZZaQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9wcm9jX2Nsb3NlLnN0dWJOAAAA60+jaU4AAAChxteepAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2FycmF5X3VpbnRlcnNlY3RfdWFzc29jLnN0dWJuAAAA60+jaW4AAAARgruvpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3N1YnN0ci5zdHViVQAAAOtPo2lVAAAAvkUjF6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9mcGFzc3RocnUuc3R1YksAAADrT6NpSwAAAI2siIKkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvdnNwcmludGYuc3R1YkQAAADrT6NpRAAAAD9j0+mkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvcmV3aW5kZGlyLnN0dWJgAAAA60+jaWAAAACZhD2JpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL3Bhc3N3b3JkX2hhc2guc3R1YmgAAADrT6NpaAAAAKLNNFmkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZXJyb3JfbG9nLnN0dWKNAAAA60+jaY0AAAAt9qn7pAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2lzX3VwbG9hZGVkX2ZpbGUuc3R1Yj0AAADrT6NpPQAAANS3cjKkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZnBvdy5zdHViaQAAAOtPo2lpAAAADLgOdqQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9tZXJnZV9yZWN1cnNpdmUuc3R1YkMAAADrT6NpQwAAAAKX7DykAQAAAAAAAE0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZ2V0X2h0bWxfdHJhbnNsYXRpb25fdGFibGUuc3R1YogBAADrT6NpiAEAAJbXaRCkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvbGV2ZW5zaHRlaW4uc3R1YqcAAADrT6NppwAAABGmspmkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyX2dldGNzdi5zdHVilwAAAOtPo2mXAAAAGjo3CaQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9ocnRpbWUuc3R1YmEAAADrT6NpYQAAAMTOMgmkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZm1vZC5zdHViOgAAAOtPo2k6AAAAH38iLaQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9hcnJheV9zdW0uc3R1YjcAAADrT6NpNwAAAI7MrrmkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZmdldGMuc3R1YlAAAADrT6NpUAAAAMyza2ikAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvY2hvd24uc3R1YkQAAADrT6NpRAAAAHPT9AikAQAAAAAAAE4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvc3RyZWFtX3Jlc29sdmVfaW5jbHVkZV9wYXRoLnN0dWJQAAAA60+jaVAAAAAPJ0ZepAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N0YW5kYXJkL2ZvcndhcmRfc3RhdGljX2NhbGxfYXJyYXkuc3R1YlYAAADrT6NpVgAAAMBxO6GkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvY2htb2Quc3R1YksAAADrT6NpSwAAANYRixykAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZ2V0X21ldGFfdGFncy5zdHVieAAAAOtPo2l4AAAAjvFScKQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9oeXBvdC5zdHViNQAAAOtPo2k1AAAAAoYoNKQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9waHBfdXNlcl9maWx0ZXIuc3R1Yv0BAADrT6Np/QEAAGLpQGukAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYXJyYXlfZGlmZl91YXNzb2Muc3R1YmgAAADrT6NpaAAAAJeIq4qkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvYWNvc2guc3R1Yi0AAADrT6NpLQAAAA7vM5WkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3RhbmRhcmQvZmdldGNzdi5zdHViwwAAAOtPo2nDAAAAvSigJ6QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9rc29ydC5zdHVirwAAAOtPo2mvAAAAVYr6ZqQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zdGFuZGFyZC9zdHJlYW1fd3JhcHBlcl9yZXN0b3JlLnN0dWJDAAAA60+jaUMAAADvQWWvpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3N5c3ZzZW0vc2VtX3JlbW92ZS5zdHViQAAAAOtPo2lAAAAAj5z/IaQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zeXN2c2VtL3NlbV9nZXQuc3R1YoYAAADrT6NphgAAAGuiHB+kAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3lzdnNlbS9zZW1fYWNxdWlyZS5zdHViXQAAAOtPo2ldAAAAmJJnm6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zeXN2c2VtL1N5c3ZTZW1hcGhvcmUuc3R1YkcAAADrT6NpRwAAANZ8V4CkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3lzdnNlbS9zZW1fcmVsZWFzZS5zdHViQQAAAOtPo2lBAAAAJCneIqQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX2Rpdl9xLnN0dWJ3AAAA60+jaXcAAAACxHeTpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfcG9wY291bnQuc3R1YjwAAADrT6NpPAAAAD3J3DWkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9zY2FuMC5zdHViRgAAAOtPo2lGAAAASB4YVqQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX2phY29iaS5zdHViUgAAAOtPo2lSAAAAu/GeaqQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX3NjYW4xLnN0dWJGAAAA60+jaUYAAAAENo71pAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfZGl2X3Iuc3R1YncAAADrT6NpdwAAAGxvOT+kAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9zcXJ0LnN0dWI5AAAA60+jaTkAAAAyoEiBpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfZ2NkLnN0dWJQAAAA60+jaVAAAADBNha/pAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfaGFtZGlzdC5zdHViUwAAAOtPo2lTAAAAMCnWIqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX3JhbmRvbV9iaXRzLnN0dWI1AAAA60+jaTUAAACdjay6pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfZGl2X3FyLnN0dWKQAAAA60+jaZAAAAAPjwoqpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfYWJzLnN0dWI4AAAA60+jaTgAAADclXC6pAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfY29tLnN0dWI4AAAA60+jaTgAAABTxtS0pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfY2xyYml0LnN0dWI8AAAA60+jaTwAAACnHC3YpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfYW5kLnN0dWJQAAAA60+jaVAAAABjbc6SpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfc3ViLnN0dWJQAAAA60+jaVAAAADUQWmipAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfcmFuZG9tX3JhbmdlLnN0dWJXAAAA60+jaVcAAADNLdIDpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfcmFuZG9tX3NlZWQuc3R1YkEAAADrT6NpQQAAAB+SOBGkAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9uZWcuc3R1YjgAAADrT6NpOAAAAJ6u8o6kAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9yb290LnN0dWJDAAAA60+jaUMAAABGlrj8pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfc2V0Yml0LnN0dWJQAAAA60+jaVAAAAAKK7gdpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfdGVzdGJpdC5zdHViSAAAAOtPo2lIAAAAYU+qWKQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX2ludmVydC5zdHViWQAAAOtPo2lZAAAAXgnPG6QBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX211bC5zdHViUAAAAOtPo2lQAAAAlEbvRqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX2xlZ2VuZHJlLnN0dWJUAAAA60+jaVQAAAC8rqdOpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfYmlub21pYWwuc3R1YkMAAADrT6NpQwAAAP+bCr6kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9wcm9iX3ByaW1lLnN0dWJVAAAA60+jaVUAAADT4qVZpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfc3RydmFsLnN0dWJNAAAA60+jaU0AAACGTy2ipAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfcGVyZmVjdF9zcXVhcmUuc3R1YkMAAADrT6NpQwAAAGVFKjCkAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9kaXYuc3R1Yo0AAADrT6NpjQAAAPY+HX2kAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9rcm9uZWNrZXIuc3R1YlUAAADrT6NpVQAAAB+HI8KkAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9tb2Quc3R1YlAAAADrT6NpUAAAAH9QylqkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9kaXZleGFjdC5zdHViVQAAAOtPo2lVAAAAnobNaqQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX3NpZ24uc3R1YjgAAADrT6NpOAAAAI3bfa6kAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9vci5zdHViTwAAAOtPo2lPAAAATjQY5qQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX3Bvdy5zdHViRwAAAOtPo2lHAAAAGoqDv6QBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX3Jvb3RyZW0uc3R1Yl4AAADrT6NpXgAAAHPVZWCkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9zcXJ0cmVtLnN0dWJUAAAA60+jaVQAAACXXhuXpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfcG93bS5zdHVibgAAAOtPo2luAAAAelK966QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX2ltcG9ydC5zdHVidwAAAOtPo2l3AAAAW6ZZo6QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX2ludHZhbC5zdHViOgAAAOtPo2k6AAAAFYJamaQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX2NtcC5zdHViTwAAAOtPo2lPAAAABdCDpKQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX2V4cG9ydC5zdHVigQAAAOtPo2mBAAAAdJsZ/6QBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX2xjbS5zdHViUAAAAOtPo2lQAAAAnFq8JaQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX2FkZC5zdHViUAAAAOtPo2lQAAAAHgTrPKQBAAAAAAAAMQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvR01QLnN0dWI8AQAA60+jaTwBAAAOycsopAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfeG9yLnN0dWJQAAAA60+jaVAAAAAHyZBtpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfbmV4dHByaW1lLnN0dWI+AAAA60+jaT4AAAAXp+fApAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dtcC9nbXBfcGVyZmVjdF9wb3dlci5zdHViQgAAAOtPo2lCAAAA9ElxzqQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nbXAvZ21wX2luaXQuc3R1YkMAAADrT6NpQwAAACfCv0qkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9nY2RleHQuc3R1YmsAAADrT6NpawAAAH67PzCkAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ21wL2dtcF9mYWN0LnN0dWI5AAAA60+jaTkAAACyQueDpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ZpbHRlci9maWx0ZXJfaW5wdXQuc3R1YnsAAADrT6NpewAAAIZgQDikAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZmlsdGVyL2ZpbHRlcl92YXJfYXJyYXkuc3R1YoIAAADrT6NpggAAACt7FkukAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZmlsdGVyL2ZpbHRlcl9saXN0LnN0dWJAAAAA60+jaUAAAADr4h1WpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ZpbHRlci9maWx0ZXJfdmFyLnN0dWJqAAAA60+jaWoAAADyY4alpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2ZpbHRlci9maWx0ZXJfaWQuc3R1YjcAAADrT6NpNwAAAKH48oCkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZmlsdGVyL2ZpbHRlcl9pbnB1dF9hcnJheS5zdHVigQAAAOtPo2mBAAAAS+KYeKQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9maWx0ZXIvZmlsdGVyX2hhc192YXIuc3R1Ym4AAADrT6NpbgAAAOXNdWCkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9vZGJjX2ZpZWxkX25hbWUuc3R1Yt4AAADrT6Np3gAAAPsaB/WkAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9vZGJjX2RvLnN0dWILAQAA60+jaQsBAACO5ROqpAEAAAAAAABSAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19jb25uZWN0aW9uX3N0cmluZ19zaG91bGRfcXVvdGUuc3R1YlwAAADrT6NpXAAAAItxGu2kAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9PZGJjL1Jlc3VsdC5zdHVibQAAAOtPo2ltAAAA3JU+YqQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL09kYmMvQ29ubmVjdGlvbi5zdHVicQAAAOtPo2lxAAAA3Ffxa6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfcHJpbWFyeWtleXMuc3R1YjUBAADrT6NpNQEAACFh9rOkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9vZGJjX3JvbGxiYWNrLnN0dWKnAAAA60+jaacAAADkTh7ApAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19jbG9zZS5zdHVioQAAAOtPo2mhAAAAWGBOIKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfbnVtX3Jvd3Muc3R1YrAAAADrT6NpsAAAAFASf8ikAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9vZGJjX3NldG9wdGlvbi5zdHViAAEAAOtPo2kAAQAAi3AxvqQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfZmV0Y2hfaW50by5zdHViSwEAAOtPo2lLAQAAiTWdNaQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfZXJyb3Iuc3R1YrkAAADrT6NpuQAAAJN75Q2kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9vZGJjX2ZvcmVpZ25rZXlzLnN0dWK5AQAA60+jabkBAADoBT+GpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19zcGVjaWFsY29sdW1ucy5zdHVilQEAAOtPo2mVAQAAZ2BnNaQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfZmllbGRfbGVuLnN0dWLWAAAA60+jadYAAACeXmXipAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19jdXJzb3Iuc3R1Yr4AAADrT6NpvgAAAKHnbKukAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9vZGJjX2Nvbm5lY3Rpb25fc3RyaW5nX3F1b3RlLnN0dWJXAAAA60+jaVcAAACD/kHZpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19udW1fZmllbGRzLnN0dWLCAAAA60+jacIAAACPOn1mpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19yZXN1bHRfYWxsLnN0dWIHAQAA60+jaQcBAAC5bKV6pAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19lcnJvcm1zZy5zdHVivwAAAOtPo2m/AAAAT2nkfaQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfcHJvY2VkdXJlcy5zdHViaQEAAOtPo2lpAQAAOdZHLKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfY2xvc2VfYWxsLnN0dWJNAAAA60+jaU0AAAD3XWompAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19maWVsZF9zY2FsZS5zdHVi2gAAAOtPo2naAAAACWLXVqQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfcGNvbm5lY3Quc3R1YmgBAADrT6NpaAEAAJtTmmqkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9vZGJjX2ZldGNoX3Jvdy5zdHVi2AAAAOtPo2nYAAAAqxsp8aQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfYmlubW9kZS5zdHVixgAAAOtPo2nGAAAAOVaLqqQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfZmV0Y2hfYXJyYXkuc3R1YvwAAADrT6Np/AAAACXY1lykAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9vZGJjX2ZyZWVfcmVzdWx0LnN0dWK4AAAA60+jabgAAAC5eNVEpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19wcm9jZWR1cmVjb2x1bW5zLnN0dWJDAgAA60+jaUMCAADRs2OwpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19wcmVwYXJlLnN0dWLpAAAA60+jaekAAACTwuOIpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19maWVsZF9udW0uc3R1YtwAAADrT6Np3AAAAL+BcP+kAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9vZGJjX3RhYmxlcHJpdmlsZWdlcy5zdHViDQIAAOtPo2kNAgAAAv1IFqQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfZGF0YV9zb3VyY2Uuc3R1YroBAADrT6NpugEAAPYuAeCkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9vZGJjX3Jlc3VsdC5zdHVi7AAAAOtPo2nsAAAAbgQEfKQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfZmllbGRfcHJlY2lzaW9uLnN0dWIcAQAA60+jaRwBAADmUKXYpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19sb25ncmVhZGxlbi5zdHVi0gAAAOtPo2nSAAAAAqGcoKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9vZGJjL29kYmNfdGFibGVzLnN0dWKHAQAA60+jaYcBAACOtbX3pAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19jb2x1bW5wcml2aWxlZ2VzLnN0dWJfAQAA60+jaV8BAAAK+1E3pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19jb21taXQuc3R1YqMAAADrT6NpowAAAAB8T0OkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9vZGJjX2dldHR5cGVpbmZvLnN0dWL7AAAA60+jafsAAABRH/8YpAEAAAAAAABPAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19jb25uZWN0aW9uX3N0cmluZ19pc19xdW90ZWQuc3R1YnMAAADrT6NpcwAAAABQaXCkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvb2RiYy9vZGJjX25leHRfcmVzdWx0LnN0dWIgAQAA60+jaSABAABtrEubpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19leGVjLnN0dWLxAAAA60+jafEAAAC1StqupAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19zdGF0aXN0aWNzLnN0dWJrAQAA60+jaWsBAACUZluWpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19maWVsZF90eXBlLnN0dWLeAAAA60+jad4AAAAeWRNppAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19leGVjdXRlLnN0dWLYAAAA60+jadgAAAAUyl9lpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19hdXRvY29tbWl0LnN0dWJiAQAA60+jaWIBAACSKEm1pAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19jb2x1bW5zLnN0dWKLAQAA60+jaYsBAABEmGz1pAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19jb25uZWN0LnN0dWJmAQAA60+jaWYBAADD7bempAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L29kYmMvb2RiY19mZXRjaF9vYmplY3Quc3R1YkYBAADrT6NpRgEAAIRcxWikAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcGRvX215c3FsL1Bkby9NeXNxbC5zdHVi8AgAAOtPo2nwCAAAle/1oaQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96bGliL2d6aW5mbGF0ZS5zdHViTwAAAOtPo2lPAAAA+Rk23qQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96bGliL3psaWJfZGVjb2RlLnN0dWJRAAAA60+jaVEAAACkqcNCpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvSW5mbGF0ZUNvbnRleHQuc3R1YkgAAADrT6NpSAAAANlJ1uWkAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvemxpYi9nendyaXRlLnN0dWKHAAAA60+jaYcAAAACRICspAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvZ3pkZWZsYXRlLnN0dWJuAAAA60+jaW4AAAB7ZaBxpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvaW5mbGF0ZV9pbml0LnN0dWJcAAAA60+jaVwAAAAt9qHHpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvcmVhZGd6ZmlsZS5zdHViVwAAAOtPo2lXAAAABjE8M6QBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96bGliL3psaWJfZW5jb2RlLnN0dWJcAAAA60+jaVwAAABkSba4pAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvZ3pkZWNvZGUuc3R1Yk4AAADrT6NpTgAAAF3HeO+kAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvemxpYi9nemNvbXByZXNzLnN0dWJzAAAA60+jaXMAAABl6NaGpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvaW5mbGF0ZV9hZGQuc3R1YnkAAADrT6NpeQAAAOjkunWkAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvemxpYi9nem9wZW4uc3R1YnQAAADrT6NpdAAAANUYHjakAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvemxpYi9nenJld2luZC5zdHViYAAAAOtPo2lgAAAAIH5kXaQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96bGliL2d6ZW5jb2RlLnN0dWJuAAAA60+jaW4AAACuRDl+pAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvZ3pmaWxlLnN0dWJsAAAA60+jaWwAAADbpaC6pAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvZ3pnZXRzLnN0dWJ6AAAA60+jaXoAAACJRWydpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvZ3pwdXRzLnN0dWKGAAAA60+jaYYAAADuDxNkpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvb2JfZ3poYW5kbGVyLnN0dWJJAAAA60+jaUkAAAAgRgUwpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvZ3pjbG9zZS5zdHViXwAAAOtPo2lfAAAA5IDUY6QBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96bGliL2d6cGFzc3RocnUuc3R1YmQAAADrT6NpZAAAAORqndKkAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvemxpYi9nemVvZi5zdHViWwAAAOtPo2lbAAAAOTpsXqQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96bGliL2luZmxhdGVfZ2V0X3N0YXR1cy5zdHViRgAAAOtPo2lGAAAATXNPCKQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96bGliL2RlZmxhdGVfaW5pdC5zdHViXAAAAOtPo2lcAAAAB408GqQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96bGliL3psaWJfZ2V0X2NvZGluZ190eXBlLnN0dWI5AAAA60+jaTkAAABzEx8ppAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvZGVmbGF0ZV9hZGQuc3R1YnkAAADrT6NpeQAAAAWHnjmkAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvemxpYi9nemdldGMuc3R1YmUAAADrT6NpZQAAAMYVWuukAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvemxpYi9nenRlbGwuc3R1YmIAAADrT6NpYgAAAF29zmekAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvemxpYi9pbmZsYXRlX2dldF9yZWFkX2xlbi5zdHViSAAAAOtPo2lIAAAAOIoSpaQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96bGliL2d6dW5jb21wcmVzcy5zdHViUgAAAOtPo2lSAAAAzTtueKQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96bGliL2d6cmVhZC5zdHVicgAAAOtPo2lyAAAApfeFjqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC96bGliL0RlZmxhdGVDb250ZXh0LnN0dWImAAAA60+jaSYAAADYx6ybpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3psaWIvZ3pzZWVrLnN0dWKBAAAA60+jaYEAAABGu5cUpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2VyZWdfc2VhcmNoLnN0dWJbAAAA60+jaVsAAACcVzzCpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2NoZWNrX2VuY29kaW5nLnN0dWJnAAAA60+jaWcAAADO0VAUpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX3N0cl9zcGxpdC5zdHViYwAAAOtPo2ljAAAAPptuV6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9zdHJzdHIuc3R1YoUAAADrT6NphQAAANRClbCkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfbGlzdF9lbmNvZGluZ3Muc3R1Yi8AAADrT6NpLwAAALNmLaakAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfZW5jb2RlX21pbWVoZWFkZXIuc3R1YqgAAADrT6NpqAAAAINlziOkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfZXJlZ19zZWFyY2hfZ2V0cG9zLnN0dWIxAAAA60+jaTEAAAC4XTX1pAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX3N1YnN0aXR1dGVfY2hhcmFjdGVyLnN0dWJrAAAA60+jaWsAAAA1c/bPpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX3N0cmxlbi5zdHViTQAAAOtPo2lNAAAAKgffaqQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9lbmNvZGluZ19hbGlhc2VzLnN0dWJYAAAA60+jaVgAAAACG7ZapAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX29yZC5zdHViUAAAAOtPo2lQAAAABl+FuaQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9sYW5ndWFnZS5zdHViaQAAAOtPo2lpAAAAxvtxgKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9lcmVnLnN0dWJyAAAA60+jaXIAAAAr5sBkpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX3BhcnNlX3N0ci5zdHViXQAAAOtPo2ldAAAAJ+PvJqQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9lcmVnaV9yZXBsYWNlLnN0dWKHAAAA60+jaYcAAAAlN6q2pAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX3JlZ2V4X3NldF9vcHRpb25zLnN0dWJKAAAA60+jaUoAAAAFUt6YpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX3N0cnBvcy5zdHVidgAAAOtPo2l2AAAAv5vQQqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9zdHJpc3RyLnN0dWKGAAAA60+jaYYAAACRn+4zpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2h0dHBfaW5wdXQuc3R1YmMAAADrT6NpYwAAANbgCEekAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfc3RydG9sb3dlci5zdHViVAAAAOtPo2lUAAAAPHivNaQBAAAAAAAASwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9lcmVnX3JlcGxhY2VfY2FsbGJhY2suc3R1Yo4AAADrT6NpjgAAAIO56x6kAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfbHRyaW0uc3R1YnwAAADrT6NpfAAAAOBv4aqkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfc3Vic3RyX2NvdW50LnN0dWJlAAAA60+jaWUAAACj9tFKpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2Noci5zdHViUwAAAOtPo2lTAAAAhDmZLKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9zdHJpcG9zLnN0dWJ3AAAA60+jaXcAAACao5BupAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2ludGVybmFsX2VuY29kaW5nLnN0dWJQAAAA60+jaVAAAAB76qIApAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX3N0cnJjaHIuc3R1YoYAAADrT6NphgAAALMO6ZOkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfc3Ryd2lkdGguc3R1Yk8AAADrT6NpTwAAAAYGnCqkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfY29udmVydF92YXJpYWJsZXMuc3R1YocAAADrT6NphwAAAH1a5w+kAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfc3RyX3BhZC5zdHViqAAAAOtPo2moAAAADacy46QBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9yZWdleF9lbmNvZGluZy5zdHViYQAAAOtPo2lhAAAAYiWgS6QBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9vdXRwdXRfaGFuZGxlci5zdHViSwAAAOtPo2lLAAAAkfppMKQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9zY3J1Yi5zdHViTwAAAOtPo2lPAAAAKFJSraQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9lcmVnX3NlYXJjaF9wb3Muc3R1Yn0AAADrT6NpfQAAALWBQd+kAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfZGV0ZWN0X2VuY29kaW5nLnN0dWKAAAAA60+jaYAAAAD4n95FpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2VyZWdpLnN0dWJzAAAA60+jaXMAAAAC1Rv2pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX3N0cmltd2lkdGguc3R1YoYAAADrT6NphgAAABxj5EekAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfZGVjb2RlX251bWVyaWNlbnRpdHkuc3R1YmoAAADrT6NpagAAAAUz5I2kAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfc3RycmljaHIuc3R1YocAAADrT6NphwAAAFLexumkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfc3RyY3V0LnN0dWJxAAAA60+jaXEAAACImwZQpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX3ByZWZlcnJlZF9taW1lX25hbWUuc3R1YksAAADrT6NpSwAAACa0WWqkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfc3Vic3RyLnN0dWJxAAAA60+jaXEAAAC1p7hXpAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2VuY29kZV9udW1lcmljZW50aXR5LnN0dWJ9AAAA60+jaX0AAABp3JvmpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2RldGVjdF9vcmRlci5zdHViawAAAOtPo2lrAAAAjaeoVqQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9zcGxpdC5zdHVicwAAAOtPo2lzAAAAD7YKB6QBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9lcmVnX3NlYXJjaF9yZWdzLnN0dWJ+AAAA60+jaX4AAADsarGgpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2h0dHBfb3V0cHV0LnN0dWJKAAAA60+jaUoAAABU/C7spAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX3J0cmltLnN0dWJ8AAAA60+jaXwAAADz+s5ApAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX3N0cnRvdXBwZXIuc3R1YlQAAADrT6NpVAAAAPuTmaqkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfZXJlZ19yZXBsYWNlLnN0dWKGAAAA60+jaYYAAABEpxjtpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2VyZWdfc2VhcmNoX2dldHJlZ3Muc3R1YlEAAADrT6NpUQAAALFXA7KkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfdHJpbS5zdHViewAAAOtPo2l7AAAAE8oBAKQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9zZW5kX21haWwuc3R1Yp8AAADrT6NpnwAAAPmC/EGkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfc3Rycmlwb3Muc3R1YngAAADrT6NpeAAAAMi0t5akAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfZXJlZ19zZWFyY2hfaW5pdC5zdHVicAAAAOtPo2lwAAAAUwrXX6QBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9jb252ZXJ0X2VuY29kaW5nLnN0dWKnAAAA60+jaacAAADwKUp2pAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2RlY29kZV9taW1laGVhZGVyLnN0dWJBAAAA60+jaUEAAACa173hpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2dldF9pbmZvLnN0dWIvAQAA60+jaS8BAABi35cKpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2NvbnZlcnRfa2FuYS5zdHViawAAAOtPo2lrAAAAeVFJfqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9jb252ZXJ0X2Nhc2Uuc3R1YmEAAADrT6NpYQAAAPU3KS6kAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfc3RycnBvcy5zdHVidwAAAOtPo2l3AAAAYqBpB6QBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl9lcmVnX3NlYXJjaF9zZXRwb3Muc3R1Yj0AAADrT6NpPQAAAL+nZF6kAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbWJzdHJpbmcvbWJfZXJlZ19tYXRjaC5zdHViYgAAAOtPo2liAAAAXoDkFKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9tYnN0cmluZy9tYl91Y2ZpcnN0LnN0dWJiAAAA60+jaWIAAABTfgDbpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L21ic3RyaW5nL21iX2xjZmlyc3Quc3R1YmIAAADrT6NpYgAAAOKcVU+kAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc3FsaXRlMy9TUUxpdGUzRXhjZXB0aW9uLnN0dWJrAAAA60+jaWsAAADGKstZpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NxbGl0ZTMvU1FMaXRlMy5zdHVizjkAAOtPo2nOOQAAPRnUN6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zcWxpdGUzL1NRTGl0ZTNTdG10LnN0dWLbBAAA60+jadsEAACtjkzIpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NxbGl0ZTMvU1FMaXRlM1Jlc3VsdC5zdHViLgMAAOtPo2kuAwAABrMM8qQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYmEvZGJhX25leHRrZXkuc3R1Yq8AAADrT6NprwAAAMtU1MykAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGJhL2RiYV9wb3Blbi5zdHVingIAAOtPo2meAgAAiiUL3qQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYmEvRGJhL0Nvbm5lY3Rpb24uc3R1YnYAAADrT6NpdgAAAGiLK7mkAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGJhL2RiYV9vcGVuLnN0dWJrAgAA60+jaWsCAAD0/oNmpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RiYS9kYmFfaGFuZGxlcnMuc3R1YlgAAADrT6NpWAAAAE7sK2KkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGJhL2RiYV9leGlzdHMuc3R1YksBAADrT6NpSwEAAOT+bB2kAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGJhL2RiYV9jbG9zZS5zdHVimwAAAOtPo2mbAAAA2bv3raQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYmEvZGJhX3N5bmMuc3R1YpkAAADrT6NpmQAAALJb1eKkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGJhL2RiYV9pbnNlcnQuc3R1YngBAADrT6NpeAEAADkjJIikAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGJhL2RiYV9maXJzdGtleS5zdHVisQAAAOtPo2mxAAAAhhH5oqQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYmEvZGJhX2tleV9zcGxpdC5zdHViRwAAAOtPo2lHAAAAgFCl5aQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYmEvZGJhX3JlcGxhY2Uuc3R1YnsBAADrT6NpewEAAJO4QgWkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGJhL2RiYV9mZXRjaC5zdHVi8AIAAOtPo2nwAgAAutBJ2KQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYmEvZGJhX29wdGltaXplLnN0dWKhAAAA60+jaaEAAABS7d7+pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RiYS9kYmFfZGVsZXRlLnN0dWJLAQAA60+jaUsBAABtassspAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RiYS9kYmFfbGlzdC5zdHViJgAAAOtPo2kmAAAAFh4Zp6QBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zbm1wL3NubXB3YWxrb2lkLnN0dWKsAAAA60+jaawAAABKuEHMpAEAAAAAAAAzAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NubXAvU05NUC5zdHVisx0AAOtPo2mzHQAAGH18JKQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zbm1wL3NubXAzX3JlYWxfd2Fsay5zdHViFwEAAOtPo2kXAQAA6oFDYKQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zbm1wL3NubXB3YWxrLnN0dWKOAAAA60+jaY4AAABS0gZTpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NubXAvc25tcDNfc2V0LnN0dWIzAQAA60+jaTMBAAC1eBiqpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NubXAvc25tcDJfZ2V0bmV4dC5zdHVijQAAAOtPo2mNAAAARB186qQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zbm1wL3NubXBfZ2V0X3ZhbHVlcmV0cmlldmFsLnN0dWIzAAAA60+jaTMAAAADSwtapAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NubXAvc25tcDJfd2Fsay5zdHVikAAAAOtPo2mQAAAA4aF12qQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zbm1wL3NubXBnZXRuZXh0LnN0dWKLAAAA60+jaYsAAAD3y38zpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NubXAvc25tcDJfZ2V0LnN0dWKJAAAA60+jaYkAAADkE0u0pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NubXAvc25tcDNfZ2V0LnN0dWILAQAA60+jaQsBAAAtkyFMpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NubXAvc25tcGdldC5zdHViqQAAAOtPo2mpAAAAuVcQ3qQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zbm1wL3NubXAzX3dhbGsuc3R1YhIBAADrT6NpEgEAAIMnfE2kAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc25tcC9zbm1wMl9zZXQuc3R1YrEAAADrT6NpsQAAACKynmGkAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc25tcC9zbm1wc2V0LnN0dWKvAAAA60+jaa8AAAAOgo6opAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NubXAvc25tcF9nZXRfcXVpY2tfcHJpbnQuc3R1YjEAAADrT6NpMQAAALA68o+kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc25tcC9zbm1wX3JlYWRfbWliLnN0dWI6AAAA60+jaToAAABuErBVpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NubXAvc25tcF9zZXRfcXVpY2tfcHJpbnQuc3R1YpUAAADrT6NplQAAAAayexKkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc25tcC9zbm1wX3NldF9lbnVtX3ByaW50LnN0dWKTAAAA60+jaZMAAABpH4GMpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NubXAvc25tcDNfZ2V0bmV4dC5zdHViDwEAAOtPo2kPAQAAWgSU3aQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zbm1wL3NubXBfc2V0X29pZF9udW1lcmljX3ByaW50LnN0dWLxAAAA60+jafEAAACFatDOpAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NubXAvc25tcF9zZXRfdmFsdWVyZXRyaWV2YWwuc3R1YpkAAADrT6NpmQAAAIuwxt6kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc25tcC9TTk1QRXhjZXB0aW9uLnN0dWI5AAAA60+jaTkAAADqPXcepAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NubXAvc25tcF9zZXRfb2lkX291dHB1dF9mb3JtYXQuc3R1Yp8AAADrT6NpnwAAANc6YE2kAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc25tcC9zbm1wcmVhbHdhbGsuc3R1YpIAAADrT6NpkgAAABRovsakAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc25tcC9zbm1wMl9yZWFsX3dhbGsuc3R1YpUAAADrT6NplQAAAH22h7qkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29hcC9Tb2FwRmF1bHQuc3R1YhcBAADrT6NpFwEAAKDbMX+kAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29hcC91c2Vfc29hcF9lcnJvcl9oYW5kbGVyLnN0dWJoAAAA60+jaWgAAADEq2TrpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvYXAvU29hcENsaWVudC5zdHViQggAAOtPo2lCCAAA/UI85KQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2FwL1NvYXBWYXIuc3R1YtQAAADrT6Np1AAAAFTYfGykAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29hcC9Tb2FwL1VybC5zdHVicAAAAOtPo2lwAAAAEFIIe6QBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2FwL1NvYXAvU2RsLnN0dWJwAAAA60+jaXAAAACshlfNpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvYXAvU29hcEhlYWRlci5zdHVivQAAAOtPo2m9AAAAx8DSVqQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zb2FwL2lzX3NvYXBfZmF1bHQuc3R1YjcAAADrT6NpNwAAAJzXqiqkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc29hcC9Tb2FwU2VydmVyLnN0dWImBQAA60+jaSYFAAD5fVpupAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3NvYXAvU29hcFBhcmFtLnN0dWJiAAAA60+jaWIAAADNwGQ+pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9mdHBfbmJfZ2V0LnN0dWJVAQAA60+jaVUBAAD3952PpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9mdHBfZ2V0X29wdGlvbi5zdHVixwAAAOtPo2nHAAAAV4lVIaQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX3Bhc3Yuc3R1YrUAAADrT6NptQAAAGG/4X6kAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZnRwL2Z0cF9uYl9mZ2V0LnN0dWJxAQAA60+jaXEBAADzv0JFpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9mdHBfZnB1dC5zdHVibQEAAOtPo2ltAQAAM3nmHaQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX2Nsb3NlLnN0dWKbAAAA60+jaZsAAADGhZ5WpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9mdHBfZGVsZXRlLnN0dWLBAAAA60+jacEAAADhsl85pAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9mdHBfZmdldC5zdHVibQEAAOtPo2ltAQAAr35GB6QBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX25iX2ZwdXQuc3R1YnEBAADrT6NpcQEAAAYEgu2kAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZnRwL2Z0cF9zc2xfY29ubmVjdC5zdHViKgEAAOtPo2kqAQAAa3aCn6QBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX3Jhd2xpc3Quc3R1YkABAADrT6NpQAEAAIoBX+ekAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZnRwL2Z0cF9zaXplLnN0dWK7AAAA60+jabsAAAAYJxpFpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9mdHBfbWxzZC5zdHViBwEAAOtPo2kHAQAA2azv1KQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX3Jhdy5zdHVi9wAAAOtPo2n3AAAAlS5alaQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX3JlbmFtZS5zdHVi0QAAAOtPo2nRAAAAol7inaQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX2Nvbm5lY3Quc3R1YhwBAADrT6NpHAEAAGAftXGkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZnRwL2Z0cF9ta2Rpci5zdHVi0QAAAOtPo2nRAAAAGNS1MaQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX2xvZ2luLnN0dWLxAAAA60+jafEAAAD+v0IipAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9mdHBfc2V0X29wdGlvbi5zdHViCwEAAOtPo2kLAQAAg16RZaQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX2dldC5zdHViSwEAAOtPo2lLAQAAxsWnGKQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX21kdG0uc3R1YrsAAADrT6NpuwAAAEAZ1IWkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZnRwL2Z0cF9uYl9jb250aW51ZS5zdHVipQAAAOtPo2mlAAAAY8INx6QBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX2V4ZWMuc3R1YrsAAADrT6NpuwAAAPlYQmCkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZnRwL2Z0cF9zeXN0eXBlLnN0dWKvAAAA60+jaa8AAADDyNZupAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9mdHBfc2l0ZS5zdHViuwAAAOtPo2m7AAAA1RkE8qQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX2FwcGVuZC5zdHViLwEAAOtPo2kvAQAAgeh3D6QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX25iX3B1dC5zdHViWwEAAOtPo2lbAQAAZEMjVKQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX3F1aXQuc3R1YskAAADrT6NpyQAAAKJfnOWkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZnRwL2Z0cF9ubGlzdC5zdHViCgEAAOtPo2kKAQAAq8Jd76QBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX2NoZGlyLnN0dWLBAAAA60+jacEAAAAwHWW3pAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9mdHBfY2R1cC5zdHVimQAAAOtPo2mZAAAAIr2/k6QBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX3JtZGlyLnN0dWLBAAAA60+jacEAAAAEnBb/pAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9mdHBfcHV0LnN0dWJLAQAA60+jaUsBAAAmD7nbpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9mdHBfcHdkLnN0dWKnAAAA60+jaacAAACidkVGpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9GVFAvQ29ubmVjdGlvbi5zdHVidgAAAOtPo2l2AAAAO3Cri6QBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9mdHAvZnRwX2FsbG9jLnN0dWIVAQAA60+jaRUBAAAqk6rypAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2Z0cC9mdHBfY2htb2Quc3R1Yu0AAADrT6Np7QAAAG/E6UekAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc2htb3Avc2htb3BfcmVhZC5zdHViTgAAAOtPo2lOAAAAzVIAzqQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zaG1vcC9zaG1vcF9kZWxldGUuc3R1YjYAAADrT6NpNgAAAP/69lukAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc2htb3AvU2htb3Auc3R1Yj8AAADrT6NpPwAAAJ1mK/SkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc2htb3Avc2htb3BfY2xvc2Uuc3R1YkgAAADrT6NpSAAAADFl+CWkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvc2htb3Avc2htb3Bfb3Blbi5zdHViYgAAAOtPo2liAAAAyOj+OqQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zaG1vcC9zaG1vcF93cml0ZS5zdHViTwAAAOtPo2lPAAAAEE1FJqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9zaG1vcC9zaG1vcF9zaXplLnN0dWIzAAAA60+jaTMAAACf9Rv+pAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Rva2VuaXplci90b2tlbl9nZXRfYWxsLnN0dWJpAAAA60+jaWkAAACdOEwrpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Rva2VuaXplci90b2tlbl9uYW1lLnN0dWIwAAAA60+jaTAAAADZJAhFpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3Rva2VuaXplci9QaHBUb2tlbi5zdHViBAIAAOtPo2kEAgAAK26Zk6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9wZG9fZGJsaWIvUGRvL0RibGliLnN0dWJRAwAA60+jaVEDAADPTS11pAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9nZXRfcmVzdWx0LnN0dWJ6AAAA60+jaXoAAABawX2gpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfZHVtcF9kZWJ1Z19pbmZvLnN0dWJBAAAA60+jaUEAAAAr81VHpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9zcWxzdGF0ZS5zdHViSgAAAOtPo2lKAAAA/H2rS6QBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3NxbHN0YXRlLnN0dWI8AAAA60+jaTwAAABBmJk0pAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9lcnJvci5zdHViRwAAAOtPo2lHAAAAfdcqpaQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3JlYWxfY29ubmVjdC5zdHVi4QAAAOtPo2nhAAAADm/e5KQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2RlYnVnLnN0dWKLAAAA60+jaYsAAAAHK3+RpAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9kYXRhX3NlZWsuc3R1YlYAAADrT6NpVgAAAFZxz1SkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9lcnJuby5zdHViNgAAAOtPo2k2AAAAiunquaQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX251bV9yb3dzLnN0dWJIAAAA60+jaUgAAACTUL+JpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9leGVjdXRlLnN0dWLAAAAA60+jacAAAAAmlTLUpAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nLnN0dWJWAAAA60+jaVYAAAA8MRGrpAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfZ2V0X2Nvbm5lY3Rpb25fc3RhdHMuc3R1Yn4AAADrT6NpfgAAABIQdgakAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9mZXRjaF9vYmplY3Quc3R1Yo0AAADrT6NpjQAAACdVBwikAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9zdG10X25leHRfcmVzdWx0LnN0dWJLAAAA60+jaUsAAAAnxDSKpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RhdC5zdHViPgAAAOtPo2k+AAAADxnbkaQBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2NoYXJhY3Rlcl9zZXRfbmFtZS5zdHViRgAAAOtPo2lGAAAAxzbEm6QBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2ZldGNoX2ZpZWxkcy5zdHViXgAAAOtPo2leAAAAlefrEqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2Nsb3NlLnN0dWKJAAAA60+jaYkAAACtiRnepAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9wYXJhbV9jb3VudC5zdHViSgAAAOtPo2lKAAAA3IyKRqQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2luc2VydF9pZC5zdHViQQAAAOtPo2lBAAAAxplzHKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2Vycm9yLnN0dWI5AAAA60+jaTkAAAAeSGDBpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9hdHRyX2dldC5zdHViVwAAAOtPo2lXAAAA+H0DPqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3N0bXRfcmVzZXQuc3R1YkUAAADrT6NpRQAAAG+X1s+kAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9tb3JlX3Jlc3VsdHMuc3R1Yj4AAADrT6NpPgAAAMfJeeakAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9mZXRjaF9maWVsZF9kaXJlY3Quc3R1YmAAAADrT6NpYAAAAL7YZ2CkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9zdG10LnN0dWI4DQAA60+jaTgNAAByBppkpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9zdG9yZV9yZXN1bHQuc3R1YkwAAADrT6NpTAAAAOe5vWmkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9zdG10X2F0dHJfc2V0LnN0dWJkAAAA60+jaWQAAADBx1vnpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfY29ubmVjdC5zdHVixQAAAOtPo2nFAAAAE8ZwgaQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2dldF9jbGllbnRfaW5mby5zdHViSwAAAOtPo2lLAAAAMpeE3KQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3N0bXRfZXJyb3JfbGlzdC5zdHViYgAAAOtPo2liAAAASQRnhKQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX211bHRpX3F1ZXJ5LnN0dWJMAAAA60+jaUwAAABS4oMZpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc2V0X29wdC5zdHViiwAAAOtPo2mLAAAABoyUPaQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3ByZXBhcmUuc3R1Yl0AAADrT6NpXQAAAOEOoNqkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9yZXN1bHQuc3R1YiUJAADrT6NpJQkAAFi6AG+kAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9nZXRfY2hhcnNldC5zdHViRwAAAOtPo2lHAAAAmKp33qQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2Nvbm5lY3RfZXJyb3Iuc3R1YjQAAADrT6NpNAAAAHjwnfykAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9jb21taXQuc3R1Yl4AAADrT6NpXgAAAEqQlJ6kAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9mZXRjaF9maWVsZC5zdHViTQAAAOtPo2lNAAAAxSDRiaQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3N0bXRfbnVtX3Jvd3Muc3R1YlUAAADrT6NpVQAAANztSZOkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9nZXRfc2VydmVyX2luZm8uc3R1YkMAAADrT6NpQwAAAPg2HxCkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9zdG10X2ZpZWxkX2NvdW50LnN0dWJKAAAA60+jaUoAAADwDkuqpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9lcnJuby5zdHViRAAAAOtPo2lEAAAA4DJ2NqQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3N0bXRfZnJlZV9yZXN1bHQuc3R1YksAAADrT6NpSwAAAI3pLBOkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9nZXRfd2FybmluZ3Muc3R1Yk8AAADrT6NpTwAAALEF0nykAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9mZXRjaF9hbGwuc3R1YpMAAADrT6NpkwAAAEpEe0WkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9mZXRjaF9sZW5ndGhzLnN0dWJlAAAA60+jaWUAAAD9e9ynpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfcXVlcnkuc3R1Yn0AAADrT6NpfQAAANd27eSkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV93YXJuaW5nLnN0dWKCAAAA60+jaYIAAABAYIQ8pAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfcmVsZWFzZV9zYXZlcG9pbnQuc3R1YlgAAADrT6NpWAAAALT41q6kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9vcHRpb25zLnN0dWJuAAAA60+jaW4AAADFzRWOpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfcmVwb3J0LnN0dWKDAAAA60+jaYMAAABwzab8pAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfZmV0Y2hfYXJyYXkuc3R1YogAAADrT6NpiAAAALyp2IekAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9zZXRfY2hhcnNldC5zdHViTgAAAOtPo2lOAAAAPaYnNqQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2luZm8uc3R1YjkAAADrT6NpOQAAAG5tFeakAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9zc2xfc2V0LnN0dWJZAQAA60+jaVkBAADxT1m8pAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc2F2ZXBvaW50LnN0dWJJAAAA60+jaUkAAADtiwGgpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfZmllbGRfY291bnQuc3R1YjwAAADrT6NpPAAAAMVGR1akAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9yZWFwX2FzeW5jX3F1ZXJ5LnN0dWJxAAAA60+jaXEAAADFS9YgpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfdGhyZWFkX2lkLnN0dWI6AAAA60+jaToAAADNwllYpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfZXhlY3V0ZS5zdHVi+gAAAOtPo2n6AAAAjPI9Y6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3JlZnJlc2guc3R1YkUAAADrT6NpRQAAAJPEFtmkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9uZXh0X3Jlc3VsdC5zdHViPQAAAOtPo2k9AAAAnk9suqQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3N0bXRfbW9yZV9yZXN1bHRzLnN0dWJsAAAA60+jaWwAAAAjwfq4pAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9pbml0LnN0dWJJAAAA60+jaUkAAAAtMSr2pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfcm9sbGJhY2suc3R1YmAAAADrT6NpYAAAAL4XBrqkAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9nZXRfY2xpZW50X3ZlcnNpb24uc3R1YjUAAADrT6NpNQAAAMscREOkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaS5zdHViMh4AAOtPo2kyHgAA6GHHcaQBAAAAAAAASgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3N0bXRfYWZmZWN0ZWRfcm93cy5zdHViUwAAAOtPo2lTAAAAweHHTaQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2NoYW5nZV91c2VyLnN0dWJ0AAAA60+jaXQAAAA8Q+08pAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfZnJlZV9yZXN1bHQuc3R1YkUAAADrT6NpRQAAAEDnHrmkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9raWxsLnN0dWJHAAAA60+jaUcAAAABL0JJpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfbnVtX2ZpZWxkcy5zdHViQwAAAOtPo2lDAAAAc+Y+7KQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3BvbGwuc3R1Yp8AAADrT6NpnwAAAPX7Zb2kAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9zdG10X3NlbmRfbG9uZ19kYXRhLnN0dWJsAAAA60+jaWwAAADl/nIWpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfdGhyZWFkX3NhZmUuc3R1Yi8AAADrT6NpLwAAAJZHtMSkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9zcWxfZXhjZXB0aW9uLnN0dWKRAAAA60+jaZEAAADtLgGMpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfYWZmZWN0ZWRfcm93cy5zdHViRQAAAOtPo2lFAAAA5pfBpqQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2RhdGFfc2Vlay5zdHViUAAAAOtPo2lQAAAA1H3fS6QBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3N0bXRfY2xvc2Uuc3R1YqUAAADrT6NppQAAAB8WinikAQAAAAAAAEwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9zdG10X3Jlc3VsdF9tZXRhZGF0YS5zdHViXwAAAOtPo2lfAAAA7YCe2aQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2VzY2FwZV9zdHJpbmcuc3R1YnkAAADrT6NpeQAAAJTUMJ2kAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9nZXRfY2xpZW50X3N0YXRzLnN0dWJMAAAA60+jaUwAAACynfwNpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfcmVhbF9xdWVyeS5zdHViSwAAAOtPo2lLAAAA2BTwbKQBAAAAAAAASQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2JlZ2luX3RyYW5zYWN0aW9uLnN0dWJpAAAA60+jaWkAAADnd47QpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfcGluZy5zdHViNgAAAOtPo2k2AAAAREaRdqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2F1dG9jb21taXQuc3R1YkoAAADrT6NpSgAAAD42/PCkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9jb25uZWN0X2Vycm5vLnN0dWIwAAAA60+jaTAAAABTzD62pAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9nZXRfd2FybmluZ3Muc3R1YmQAAADrT6NpZAAAAFzlJ3+kAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9maWVsZF90ZWxsLnN0dWJDAAAA60+jaUMAAACrmxFgpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfZmV0Y2hfY29sdW1uLnN0dWJ/AAAA60+jaX8AAACeul5FpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfZmllbGRfc2Vlay5zdHViuwAAAOtPo2m7AAAA5JzxbKQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2dldF9ob3N0X2luZm8uc3R1YkEAAADrT6NpQQAAAKyaw2CkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9zdG10X2luc2VydF9pZC5zdHViTwAAAOtPo2lPAAAAhuz3OaQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3N0bXRfcHJlcGFyZS5zdHViVgAAAOtPo2lWAAAAgKFgmqQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2luaXQuc3R1YjEAAADrT6NpMQAAAHhmzq2kAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9leGVjdXRlX3F1ZXJ5LnN0dWKFAAAA60+jaYUAAAAoaYbbpAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9iaW5kX3Jlc3VsdC5zdHViXAAAAOtPo2lcAAAAvZBmW6QBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3N0bXRfYmluZF9wYXJhbS5zdHViagAAAOtPo2lqAAAAdVjMrKQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3NlbGVjdF9kYi5zdHViTQAAAOtPo2lNAAAABu+5W6QBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3VzZV9yZXN1bHQuc3R1YkwAAADrT6NpTAAAAMDLngqkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9mZXRjaF9hc3NvYy5zdHViaAAAAOtPo2loAAAAW2u6+aQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3dhcm5pbmdfY291bnQuc3R1Yj4AAADrT6NpPgAAAFkhpyWkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9kcml2ZXIuc3R1YkcAAADrT6NpRwAAALFBafKkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvbXlzcWxpL215c3FsaV9lcnJvcl9saXN0LnN0dWJUAAAA60+jaVQAAADwNkdRpAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfZ2V0X3NlcnZlcl92ZXJzaW9uLnN0dWJDAAAA60+jaUMAAAAeIpQVpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfZ2V0X2xpbmtzX3N0YXRzLnN0dWJLAAAA60+jaUsAAABzQKMtpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfc3RtdF9mZXRjaC5zdHViRgAAAOtPo2lGAAAA/MTeeqQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX3N0b3JlX3Jlc3VsdC5zdHViXQAAAOtPo2ldAAAAknH49aQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9teXNxbGkvbXlzcWxpX2dldF9wcm90b19pbmZvLnN0dWI/AAAA60+jaT8AAAAHMPAhpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L215c3FsaS9teXNxbGlfZmV0Y2hfcm93LnN0dWJmAAAA60+jaWYAAADpRIxnpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NhbGVuZGFyL2pld2lzaHRvamQuc3R1YkUAAADrT6NpRQAAAPL0rKGkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY2FsZW5kYXIvY2FsX2luZm8uc3R1Yk8AAADrT6NpTwAAAFZmtKWkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY2FsZW5kYXIvamR0b2dyZWdvcmlhbi5zdHViOwAAAOtPo2k7AAAA1xi8DaQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jYWxlbmRhci9qZHRvZnJlbmNoLnN0dWI4AAAA60+jaTgAAAC2ZIJWpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NhbGVuZGFyL2pkdG91bml4LnN0dWIzAAAA60+jaTMAAADJKSb8pAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NhbGVuZGFyL3VuaXh0b2pkLnN0dWJAAAAA60+jaUAAAAD0YnaDpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NhbGVuZGFyL2pkdG9qdWxpYW4uc3R1YjgAAADrT6NpOAAAAL653Z2kAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY2FsZW5kYXIvY2FsX3RvX2pkLnN0dWJTAAAA60+jaVMAAABvvFmrpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NhbGVuZGFyL2ZyZW5jaHRvamQuc3R1YkUAAADrT6NpRQAAAOu4HaGkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY2FsZW5kYXIvY2FsX2RheXNfaW5fbW9udGguc3R1YnMAAADrT6NpcwAAAH8KGFakAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY2FsZW5kYXIvZ3JlZ29yaWFudG9qZC5zdHViSAAAAOtPo2lIAAAAJWdetqQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jYWxlbmRhci9lYXN0ZXJfZGF0ZS5zdHViWAAAAOtPo2lYAAAA5k3556QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jYWxlbmRhci9qdWxpYW50b2pkLnN0dWJFAAAA60+jaUUAAADtlACNpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NhbGVuZGFyL2NhbF9mcm9tX2pkLnN0dWJeAAAA60+jaV4AAAB49NWhpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2NhbGVuZGFyL2pkdG9qZXdpc2guc3R1Yl4AAADrT6NpXgAAAHpB+KakAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY2FsZW5kYXIvZWFzdGVyX2RheXMuc3R1YlgAAADrT6NpWAAAAOVUWDKkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY2FsZW5kYXIvamRkYXlvZndlZWsuc3R1YlgAAADrT6NpWAAAAGL6G4WkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY2FsZW5kYXIvamRtb250aG5hbWUuc3R1YkQAAADrT6NpRAAAAKj8dJ+kAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sL3htbF9nZXRfY3VycmVudF9ieXRlX2luZGV4LnN0dWJIAAAA60+jaUgAAAB/cQ5GpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbC94bWxfcGFyc2VyX2ZyZWUuc3R1Yj4AAADrT6NpPgAAANJYOd6kAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sL3htbF9nZXRfY3VycmVudF9jb2x1bW5fbnVtYmVyLnN0dWJLAAAA60+jaUsAAADXVkoRpAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbC94bWxfc2V0X25vdGF0aW9uX2RlY2xfaGFuZGxlci5zdHVijQEAAOtPo2mNAQAAEgWEDqQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWwveG1sX3NldF9kZWZhdWx0X2hhbmRsZXIuc3R1YnsBAADrT6NpewEAAAHv4vekAQAAAAAAAFAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sL3htbF9zZXRfZW5kX25hbWVzcGFjZV9kZWNsX2hhbmRsZXIuc3R1YpwBAADrT6NpnAEAANWHLXukAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sL3htbF9nZXRfZXJyb3JfY29kZS5zdHViQAAAAOtPo2lAAAAAbf6UOqQBAAAAAAAAUgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWwveG1sX3NldF9zdGFydF9uYW1lc3BhY2VfZGVjbF9oYW5kbGVyLnN0dWKiAQAA60+jaaIBAACuDK0ipAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbC94bWxfcGFyc2VyX2NyZWF0ZS5zdHVibgAAAOtPo2luAAAAa8FQGqQBAAAAAAAAVAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWwveG1sX3NldF9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2hhbmRsZXIuc3R1YqgBAADrT6NpqAEAAMx7TlGkAQAAAAAAAEwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sL3htbF9zZXRfY2hhcmFjdGVyX2RhdGFfaGFuZGxlci5zdHVikAEAAOtPo2mQAQAAr/cSYqQBAAAAAAAAUQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWwveG1sX3NldF9leHRlcm5hbF9lbnRpdHlfcmVmX2hhbmRsZXIuc3R1Yp8BAADrT6NpnwEAANTJ3HGkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sL3htbF9lcnJvcl9zdHJpbmcuc3R1Yj8AAADrT6NpPwAAAHcFS+akAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sL1hNTFBhcnNlci5zdHViIQAAAOtPo2khAAAAwDsJQaQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWwveG1sX3BhcnNlLnN0dWJdAAAA60+jaV0AAAATDaNOpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbC94bWxfcGFyc2VyX2dldF9vcHRpb24uc3R1YuEAAADrT6Np4QAAAL49s3SkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sL3htbF9wYXJzZXJfc2V0X29wdGlvbi5zdHViEgEAAOtPo2kSAQAASVx4+aQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWwveG1sX3BhcnNlX2ludG9fc3RydWN0LnN0dWJlAQAA60+jaWUBAACYR8oVpAEAAAAAAABSAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbC94bWxfc2V0X3VucGFyc2VkX2VudGl0eV9kZWNsX2hhbmRsZXIuc3R1YqIBAADrT6NpogEAAHx8m9+kAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sL3htbF9nZXRfY3VycmVudF9saW5lX251bWJlci5zdHViSQAAAOtPo2lJAAAA4TyvCaQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC94bWwveG1sX3BhcnNlcl9jcmVhdGVfbnMuc3R1YmgAAADrT6NpaAAAALqGoKekAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQveG1sL3htbF9zZXRfZWxlbWVudF9oYW5kbGVyLnN0dWIgAgAA60+jaSACAADf1DthpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3htbC94bWxfc2V0X29iamVjdC5zdHVitQAAAOtPo2m1AAAAapu1paQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yYW5kb20vbGNnX3ZhbHVlLnN0dWI4AAAA60+jaTgAAAD2jwL6pAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JhbmRvbS9yYW5kb21fYnl0ZXMuc3R1YloAAADrT6NpWgAAAFSHUACkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmFuZG9tL1JhbmRvbS9SYW5kb21FcnJvci5zdHVibgAAAOtPo2luAAAADuB3WaQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yYW5kb20vUmFuZG9tL0NyeXB0b1NhZmVFbmdpbmUuc3R1YmEAAADrT6NpYQAAAOAO4j+kAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmFuZG9tL1JhbmRvbS9FbmdpbmUuc3R1YmgAAADrT6NpaAAAAOMEFyqkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmFuZG9tL1JhbmRvbS9JbnRlcnZhbEJvdW5kYXJ5LnN0dWJFAAAA60+jaUUAAACotLlJpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JhbmRvbS9SYW5kb20vUmFuZG9tRXhjZXB0aW9uLnN0dWJ2AAAA60+jaXYAAAATYeEQpAEAAAAAAABRAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JhbmRvbS9SYW5kb20vRW5naW5lL1hvc2hpcm8yNTZTdGFyU3Rhci5zdHViIgMAAOtPo2kiAwAAAW4JIaQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yYW5kb20vUmFuZG9tL0VuZ2luZS9NdDE5OTM3LnN0dWLAAQAA60+jacABAAAfE8nipAEAAAAAAABSAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JhbmRvbS9SYW5kb20vRW5naW5lL1BjZ09uZXNlcTEyOFhzbFJyNjQuc3R1Yv4CAADrT6Np/gIAAIN8bCGkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmFuZG9tL1JhbmRvbS9FbmdpbmUvU2VjdXJlLnN0dWIUAQAA60+jaRQBAADHpWvgpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JhbmRvbS9SYW5kb20vUmFuZG9taXplci5zdHVi6wMAAOtPo2nrAwAAII1lXaQBAAAAAAAATwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yYW5kb20vUmFuZG9tL0Jyb2tlblJhbmRvbUVuZ2luZUVycm9yLnN0dWKHAAAA60+jaYcAAADnntRppAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JhbmRvbS9tdF9yYW5kLnN0dWJaAAAA60+jaVoAAADdkMlepAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L3JhbmRvbS9zcmFuZC5zdHVi/AAAAOtPo2n8AAAAuzZ4PKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9yYW5kb20vbXRfc3JhbmQuc3R1YtQAAADrT6Np1AAAAGSz/4KkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmFuZG9tL2dldHJhbmRtYXguc3R1YlMAAADrT6NpUwAAAL1+UnekAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmFuZG9tL3JhbmQuc3R1YlcAAADrT6NpVwAAADQhtIukAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmFuZG9tL3JhbmRvbV9pbnQuc3R1YkkAAADrT6NpSQAAAIjhWe2kAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvcmFuZG9tL210X2dldHJhbmRtYXguc3R1YjoAAADrT6NpOgAAAI2IEmekAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9nZXRkYXRlLnN0dWJSAAAA60+jaVIAAABdVHA8pAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvdGltZXpvbmVfbmFtZV9mcm9tX2FiYnIuc3R1Ym4AAADrT6NpbgAAAPmi+BOkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9zdHJmdGltZS5zdHViUwAAAOtPo2lTAAAAvpyodKQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL0RhdGVPYmplY3RFcnJvci5zdHViYwAAAOtPo2ljAAAA8UfTXKQBAAAAAAAASwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL0RhdGVJbnZhbGlkVGltZVpvbmVFeGNlcHRpb24uc3R1YnQAAADrT6NpdAAAALV+mE2kAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS90aW1lem9uZV9pZGVudGlmaWVyc19saXN0LnN0dWKRAAAA60+jaZEAAACajvYZpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvdGltZXpvbmVfbmFtZV9nZXQuc3R1YkUAAADrT6NpRQAAABJKqvKkAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS90aW1lem9uZV9hYmJyZXZpYXRpb25zX2xpc3Quc3R1YlAAAADrT6NpUAAAAFCkNjmkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9zdHJ0b3RpbWUuc3R1YnkAAADrT6NpeQAAALFJoNGkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9jaGVja2RhdGUuc3R1YkUAAADrT6NpRQAAAIyKfyakAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9kYXRlX3RpbWVzdGFtcF9nZXQuc3R1YkgAAADrT6NpSAAAAC+lYT2kAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9EYXRlTWFsZm9ybWVkU3RyaW5nRXhjZXB0aW9uLnN0dWJ0AAAA60+jaXQAAAB0a4d3pAEAAAAAAABQAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZV9jcmVhdGVfaW1tdXRhYmxlX2Zyb21fZm9ybWF0LnN0dWKTAAAA60+jaZMAAACl48dopAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvRGF0ZVRpbWUuc3R1Yg8OAADrT6NpDw4AABPI4tKkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9nbXN0cmZ0aW1lLnN0dWJVAAAA60+jaVUAAAB+7F9xpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvdGltZXpvbmVfdmVyc2lvbl9nZXQuc3R1YjMAAADrT6NpMwAAAGExx4ykAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9kYXRlX2RpZmYuc3R1YocAAADrT6NphwAAAFOlfrekAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9EYXRlVGltZUltbXV0YWJsZS5zdHViCw4AAOtPo2kLDgAAX7ZzMaQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL2RhdGVfcGFyc2Uuc3R1Yk8AAADrT6NpTwAAACX9mC2kAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9kYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0LnN0dWJIAAAA60+jaUgAAABg7L5lpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZV9vZmZzZXRfZ2V0LnN0dWJFAAAA60+jaUUAAACdWimWpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvdGltZXpvbmVfdHJhbnNpdGlvbnNfZ2V0LnN0dWKsAAAA60+jaawAAAD2AA34pAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvRGF0ZVBlcmlvZC5zdHVi0wcAAOtPo2nTBwAAQCP/WqQBAAAAAAAAUQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL0RhdGVNYWxmb3JtZWRQZXJpb2RTdHJpbmdFeGNlcHRpb24uc3R1YnoAAADrT6NpegAAAM0mClSkAQAAAAAAAFQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9kYXRlX2ludGVydmFsX2NyZWF0ZV9mcm9tX2RhdGVfc3RyaW5nLnN0dWJhAAAA60+jaWEAAABh14AMpAEAAAAAAAAzAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZS5zdHViSQAAAOtPo2lJAAAAssdZlaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL2RhdGVfZm9ybWF0LnN0dWJUAAAA60+jaVQAAABxKCXTpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvRGF0ZUVycm9yLnN0dWJZAAAA60+jaVkAAAAZGcgRpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZV9pbnRlcnZhbF9mb3JtYXQuc3R1YlgAAADrT6NpWAAAABcQvESkAQAAAAAAADMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS90aW1lLnN0dWIgAAAA60+jaSAAAAAaZYWgpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZV9jcmVhdGVfaW1tdXRhYmxlLnN0dWJ/AAAA60+jaX8AAACHxPYWpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZV9wYXJzZV9mcm9tX2Zvcm1hdC5zdHViawAAAOtPo2lrAAAATbxZdaQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL0RhdGVFeGNlcHRpb24uc3R1YmEAAADrT6NpYQAAAAOUZhSkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9kYXRlX2NyZWF0ZS5zdHVibAAAAOtPo2lsAAAAL3/mBKQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL2dtbWt0aW1lLnN0dWKWAAAA60+jaZYAAADCmAj2pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZV90aW1lem9uZV9nZXQuc3R1YlcAAADrT6NpVwAAALTLC3ykAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9nbWRhdGUuc3R1YksAAADrT6NpSwAAAGXn+KGkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9EYXRlSW50ZXJ2YWwuc3R1Yh4DAADrT6NpHgMAAA5mtQakAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9EYXRlVGltZUludGVyZmFjZS5zdHViuQ0AAOtPo2m5DQAAGh/l66QBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL2RhdGVfc3Vuc2V0LnN0dWLVAAAA60+jadUAAABglHFnpAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZV9jcmVhdGVfZnJvbV9mb3JtYXQuc3R1YoAAAADrT6NpgAAAAAg0HYGkAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9kYXRlX2lzb2RhdGVfc2V0LnN0dWJtAAAA60+jaW0AAADd+XdspAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZV9zdW5yaXNlLnN0dWLWAAAA60+jadYAAADLoMz5pAEAAAAAAAA0AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvaWRhdGUuc3R1Yk0AAADrT6NpTQAAADGlOOSkAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9ta3RpbWUuc3R1YpQAAADrT6NplAAAAAf0cWSkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9sb2NhbHRpbWUuc3R1Ym8AAADrT6NpbwAAACN2oRSkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9kYXRlX2RhdGVfc2V0LnN0dWJhAAAA60+jaWEAAADZaSYPpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZV9zdW5faW5mby5zdHVicwAAAOtPo2lzAAAAJint6qQBAAAAAAAAUwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL0RhdGVNYWxmb3JtZWRJbnRlcnZhbFN0cmluZ0V4Y2VwdGlvbi5zdHVifAAAAOtPo2l8AAAAb8HIl6QBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL0RhdGVJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uLnN0dWJ1AAAA60+jaXUAAAArYKblpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZV9tb2RpZnkuc3R1YlYAAADrT6NpVgAAAA0Te1WkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9kYXRlX3RpbWVzdGFtcF9zZXQuc3R1YlUAAADrT6NpVQAAACXl3z2kAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9kYXRlX3N1Yi5zdHViVAAAAOtPo2lUAAAAcX3mDqQBAAAAAAAASAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL2RhdGVfZGVmYXVsdF90aW1lem9uZV9nZXQuc3R1YjgAAADrT6NpOAAAAA1IqzakAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9kYXRlX2dldF9sYXN0X2Vycm9ycy5zdHViTwAAAOtPo2lPAAAA1qlbk6QBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL2RhdGVfYWRkLnN0dWJUAAAA60+jaVQAAAA1N2YcpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZV90aW1lem9uZV9zZXQuc3R1Yl0AAADrT6NpXQAAAK+ItCikAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS9EYXRlVGltZVpvbmUuc3R1YmEUAADrT6NpYRQAAPSsxrKkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZGF0ZS90aW1lem9uZV9vcGVuLnN0dWJJAAAA60+jaUkAAACKLvGxpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvdGltZXpvbmVfbG9jYXRpb25fZ2V0LnN0dWJlAAAA60+jaWUAAAA6s7/CpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvZGF0ZV90aW1lX3NldC5zdHVifwAAAOtPo2l/AAAAcrncQKQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9kYXRlL0RhdGVSYW5nZUVycm9yLnN0dWJiAAAA60+jaWIAAADjKHUYpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2RhdGUvdGltZXpvbmVfb2Zmc2V0X2dldC5zdHViYgAAAOtPo2liAAAA/xgN5qQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWZsaXAuc3R1YkAAAADrT6NpQAAAAGstWgykAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VjcmVhdGVmcm9tYm1wLnN0dWJcAAAA60+jaVwAAACrRJlFpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlaW50ZXJsYWNlLnN0dWJQAAAA60+jaVAAAAA7A53hpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdldHJ1ZWNvbG9ydG9wYWxldHRlLnN0dWJiAAAA60+jaWIAAAC3D7bspAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlY2hhci5zdHVi9wAAAOtPo2n3AAAAH+7ahaQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWdyYWJzY3JlZW4uc3R1YjYAAADrT6NpNgAAAGPu90+kAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VnZC5zdHViSQAAAOtPo2lJAAAA6jn/dqQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZXBuZy5zdHVipAAAAOtPo2mkAAAAWEdDCaQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWxpbmUuc3R1YmUAAADrT6NpZQAAAIaRnHikAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VjcmVhdGVmcm9tZ2Quc3R1YkgAAADrT6NpSAAAANPrN3KkAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2V4Ym0uc3R1Ym0AAADrT6NpbQAAAJ0vbvekAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VjcmVhdGVmcm9tdGdhLnN0dWJjAAAA60+jaWMAAAA2PoUmpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlY3JlYXRlZnJvbXhibS5zdHViUAAAAOtPo2lQAAAA7NJX4KQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNvcHltZXJnZS5zdHVirgAAAOtPo2muAAAAMvlcPqQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNyZWF0ZWZyb21hdmlmLnN0dWKCAAAA60+jaYIAAADaS8D5pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlY3JlYXRlZnJvbXdibXAuc3R1YlEAAADrT6NpUQAAABS0DROkAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvZ2RfaW5mby5zdHViPAAAAOtPo2k8AAAA1ZlHmqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWRlc3Ryb3kuc3R1Yj8AAADrT6NpPwAAAAndqq+kAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2Vjb2xvcnNmb3JpbmRleC5zdHViYwAAAOtPo2ljAAAAsrlPP6QBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWZpbGwuc3R1YlEAAADrT6NpUQAAAGTu5QCkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2Vjb2xvcnN0b3RhbC5zdHViOwAAAOtPo2k7AAAA+upGcKQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNvbG9yYWxsb2NhdGVhbHBoYS5zdHVidQAAAOtPo2l1AAAAl1ieFaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZXNldHN0eWxlLnN0dWJHAAAA60+jaUcAAAC4XY77pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlc2V0YnJ1c2guc3R1YkoAAADrT6NpSgAAAHMBPu+kAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VjcmVhdGVmcm9tZ2QyLnN0dWJJAAAA60+jaUkAAACl9OQupAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdldHlwZXMuc3R1YiYAAADrT6NpJgAAAG8g4kqkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VjcmVhdGV0cnVlY29sb3Iuc3R1YlIAAADrT6NpUgAAABOhuN6kAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2Vjb2xvcnJlc29sdmVhbHBoYS5zdHVibgAAAOtPo2luAAAAMddoVqQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWFscGhhYmxlbmRpbmcuc3R1YkwAAADrT6NpTAAAAPJj3/qkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VjcmVhdGVmcm9tZ2QycGFydC5zdHVidgAAAOtPo2l2AAAASIcZuqQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWpwZWcuc3R1YpkAAADrT6NpmQAAAFFmp7akAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VnZXRpbnRlcnBvbGF0aW9uLnN0dWJAAAAA60+jaUAAAADQVyJ1pAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlZ2lmLnN0dWJrAAAA60+jaWsAAAARCwgTpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlYXZpZi5zdHVitQAAAOtPo2m1AAAASihhraQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZXNjYWxlLnN0dWJ+AAAA60+jaX4AAABGMnw+pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlZmlsbGVkcG9seWdvbi5zdHViewAAAOtPo2l7AAAAKZ6mRaQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWdldGNsaXAuc3R1YlAAAADrT6NpUAAAAHLjQtWkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2Vjb2xvcnRyYW5zcGFyZW50LnN0dWJUAAAA60+jaVQAAACtwtzPpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlc3RyaW5nLnN0dWL/AAAA60+jaf8AAADiQBAUpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlcGFsZXR0ZWNvcHkuc3R1YkkAAADrT6NpSQAAAPazXDSkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VhZmZpbmVtYXRyaXhnZXQuc3R1YoUAAADrT6NphQAAAOz1ezmkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2Vyb3RhdGUuc3R1YlUBAADrT6NpVQEAAJpOtHakAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2Vjb2xvcmV4YWN0YWxwaGEuc3R1YmwAAADrT6NpbAAAALuAvfukAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VmaWx0ZXIuc3R1Yn4AAADrT6NpfgAAAMGyfCakAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2V0dGZ0ZXh0LnN0dWLOAAAA60+jac4AAAD8KmrspAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlcmVzb2x1dGlvbi5zdHVijgAAAOtPo2mOAAAAKYwZGaQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNvbG9yY2xvc2VzdC5zdHViXQAAAOtPo2ldAAAAeORwH6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWlzdHJ1ZWNvbG9yLnN0dWI8AAAA60+jaTwAAAANikBmpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlY29sb3JtYXRjaC5zdHViTgAAAOtPo2lOAAAA3X1Mx6QBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNvcHkuc3R1Yp8AAADrT6NpnwAAALGgkW+kAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VmdHRleHQuc3R1YsYAAADrT6NpxgAAAIVeHgykAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvR2RJbWFnZS5zdHViQQAAAOtPo2lBAAAAX24JwqQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNvbG9yY2xvc2VzdGFscGhhLnN0dWJuAAAA60+jaW4AAABQuMX4pAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlZWxsaXBzZS5zdHViewAAAOtPo2l7AAAA6c06BKQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWFyYy5zdHVimQAAAOtPo2mZAAAAXXOQRqQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNvcHlyZXNpemVkLnN0dWLHAAAA60+jaccAAACpYkvcpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlZm9udGhlaWdodC5zdHViiwAAAOtPo2mLAAAAUGpLS6QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNvbG9ycmVzb2x2ZS5zdHViXQAAAOtPo2ldAAAA8fIj3qQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNyZWF0ZWZyb21naWYuc3R1YkkAAADrT6NpSQAAAGmfazekAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2Vjb2xvcmFsbG9jYXRlLnN0dWJkAAAA60+jaWQAAACH1bqgpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdld2JtcC5zdHVikgAAAOtPo2mSAAAAVT+ciKQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWZpbGxlZGFyYy5zdHViqwAAAOtPo2mrAAAA/x3IL6QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWZ0YmJveC5zdHViswAAAOtPo2mzAAAAqayWTaQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZXJlY3RhbmdsZS5zdHViagAAAOtPo2lqAAAAfkM356QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNvbnZvbHV0aW9uLnN0dWJqAAAA60+jaWoAAAAkmcHdpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdld2VicC5zdHVimgAAAOtPo2maAAAAJYRif6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWxheWVyZWZmZWN0LnN0dWJJAAAA60+jaUkAAABmXv8bpAEAAAAAAAA5AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlcG9seWdvbi5zdHVidQAAAOtPo2l1AAAAyUO/h6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNvbG9yZXhhY3Quc3R1YlsAAADrT6NpWwAAALmBErqkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2Vjb2xvcmRlYWxsb2NhdGUuc3R1YkwAAADrT6NpTAAAANYER9qkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VjcmVhdGVmcm9tanBlZy5zdHViXQAAAOtPo2ldAAAA1BF4nqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZXNldHRpbGUuc3R1YkgAAADrT6NpSAAAAJe/mMykAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VhZmZpbmVtYXRyaXhjb25jYXQuc3R1YnAAAADrT6NpcAAAAMZJLjSkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VzZXRjbGlwLnN0dWJcAAAA60+jaVwAAAAa4wGOpAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlY3JvcGF1dG8uc3R1YooAAADrT6NpigAAANQbsS2kAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VhbnRpYWxpYXMuc3R1YkgAAADrT6NpSAAAAFlUFoikAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2Vjb2xvcnNldC5zdHViDgEAAOtPo2kOAQAAXHmjLqQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWJtcC5zdHVilwAAAOtPo2mXAAAAeIC3K6QBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZXR0ZmJib3guc3R1YqMAAADrT6NpowAAABnlZFGkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VjcmVhdGVmcm9tc3RyaW5nLnN0dWJIAAAA60+jaUgAAAD/jGPBpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlZGFzaGVkbGluZS5zdHViawAAAOtPo2lrAAAAVqE/56QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZXNldHRoaWNrbmVzcy5zdHViTQAAAOtPo2lNAAAAz92JGKQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWdkMi5zdHViDwEAAOtPo2kPAQAAisxmYaQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZXNldGludGVycG9sYXRpb24uc3R1YmMAAADrT6NpYwAAACRtwLGkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VncmFid2luZG93LnN0dWJtAAAA60+jaW0AAABwgZLApAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlZmlsbHRvYm9yZGVyLnN0dWJsAAAA60+jaWwAAACFeQNipAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlZmlsbGVkZWxsaXBzZS5zdHVigQAAAOtPo2mBAAAAuDch3KQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWFmZmluZS5zdHViZQAAAOtPo2llAAAAH6DBCqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZXN0cmluZ3VwLnN0dWIDAQAA60+jaQMBAAAbRb//pAEAAAAAAAA0AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlc3kuc3R1YjIAAADrT6NpMgAAAGlK5KukAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VzeC5zdHViMgAAAOtPo2kyAAAAKFFoxaQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNvbG9yY2xvc2VzdGh3Yi5zdHViYAAAAOtPo2lgAAAALZjYrqQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNvbG9yYXQuc3R1Yk0AAADrT6NpTQAAAEYmsIukAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VmaWxsZWRyZWN0YW5nbGUuc3R1YnAAAADrT6NpcAAAAFZkhjCkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VzYXZlYWxwaGEuc3R1YkgAAADrT6NpSAAAAEaGW8GkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VjaGFydXAuc3R1YvsAAADrT6Np+wAAAIrB49qkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VvcGVucG9seWdvbi5zdHVieQAAAOtPo2l5AAAA3oVMoqQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNvcHlyZXNhbXBsZWQuc3R1YskAAADrT6NpyQAAAHU4uO+kAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2Vsb2FkZm9udC5zdHVinQAAAOtPo2mdAAAAInTnpqQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNyZWF0ZWZyb213ZWJwLnN0dWJlAAAA60+jaWUAAABZC4rppAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlY3JlYXRlLnN0dWJJAAAA60+jaUkAAADoJIWApAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlY3JvcC5zdHViUQAAAOtPo2lRAAAAC8IfuKQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWZvbnR3aWR0aC5zdHViiQAAAOtPo2mJAAAAhmR+0qQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZXBhbGV0dGV0b3RydWVjb2xvci5zdHViQwAAAOtPo2lDAAAA5rNJ4aQBAAAAAAAAMwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9HZEZvbnQuc3R1YmIAAADrT6NpYgAAAPrYKzykAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2Vjb3B5bWVyZ2VncmF5LnN0dWKyAAAA60+jabIAAAAwY1gHpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlZ2FtbWFjb3JyZWN0LnN0dWJmAAAA60+jaWYAAAAXvHSYpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2dkL2ltYWdlY3JlYXRlZnJvbXBuZy5zdHViYwAAAOtPo2ljAAAAr6HrGKQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9nZC9pbWFnZWNyZWF0ZWZyb214cG0uc3R1YlwAAADrT6NpXAAAAM46cZKkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvZ2QvaW1hZ2VzZXRwaXhlbC5zdHViVQAAAOtPo2lVAAAAQmlXDKQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9qc29uL2pzb25fbGFzdF9lcnJvcl9tc2cuc3R1YjIAAADrT6NpMgAAALC4GQykAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvanNvbi9qc29uX2VuY29kZS5zdHVigAAAAOtPo2mAAAAAiXjopKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9qc29uL0pzb25FeGNlcHRpb24uc3R1YjIAAADrT6NpMgAAAFD5J/KkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvanNvbi9qc29uX3ZhbGlkYXRlLnN0dWJpAAAA60+jaWkAAAD5+Q/BpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2pzb24vSnNvblNlcmlhbGl6YWJsZS5zdHVijgAAAOtPo2mOAAAAYbZIqKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9qc29uL2pzb25fZGVjb2RlLnN0dWJyAAAA60+jaXIAAABoCCkRpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2pzb24vanNvbl9sYXN0X2Vycm9yLnN0dWIrAAAA60+jaSsAAADfjyzTpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2J6Mi9iendyaXRlLnN0dWKOAAAA60+jaY4AAAAx+V0DpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2J6Mi9iemVycm9yLnN0dWLfAAAA60+jad8AAAAV0v+RpAEAAAAAAAA0AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2J6Mi9iem9wZW4uc3R1YpQAAADrT6NplAAAALaMRNOkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvYnoyL2J6ZGVjb21wcmVzcy5zdHViYAAAAOtPo2lgAAAAsBuEVqQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9iejIvYnpmbHVzaC5zdHViZgAAAOtPo2lmAAAAsYr2CKQBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9iejIvYnplcnJuby5zdHViowAAAOtPo2mjAAAA990tK6QBAAAAAAAANAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9iejIvYnpyZWFkLnN0dWJdAAAA60+jaV0AAAAg0aRDpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2J6Mi9iemNsb3NlLnN0dWJmAAAA60+jaWYAAADWXMFtpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2J6Mi9iemVycnN0ci5zdHViqwAAAOtPo2mrAAAAV670x6QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9iejIvYnpjb21wcmVzcy5zdHViZAAAAOtPo2lkAAAAP1FtdaQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfZXJyb3Iuc3R1YjwAAADrT6NpPAAAAD4CdGmkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9DdXJsSGFuZGxlLnN0dWJEAAAA60+jaUQAAAAAoRz3pAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N1cmwvY3VybF9zaGFyZV9jbG9zZS5zdHViSwAAAOtPo2lLAAAAPs9uk6QBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL0N1cmxNdWx0aUhhbmRsZS5zdHViJwAAAOtPo2knAAAAYMBmYKQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfc2hhcmVfc3RyZXJyb3Iuc3R1YkIAAADrT6NpQgAAAG3K2TKkAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9jdXJsX3BhdXNlLnN0dWJ2AAAA60+jaXYAAADxCWk7pAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N1cmwvY3VybF92ZXJzaW9uLnN0dWJHAAAA60+jaUcAAACyX0b9pAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N1cmwvY3VybF91bmVzY2FwZS5zdHViVQAAAOtPo2lVAAAA9LeB5qQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfbXVsdGlfaW5pdC5zdHViOAAAAOtPo2k4AAAAr6k1xqQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfZmlsZV9jcmVhdGUuc3R1Yn4AAADrT6NpfgAAADHmJGqkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9jdXJsX3NldG9wdF9hcnJheS5zdHViUQAAAOtPo2lRAAAAePlnTKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfc3RyZXJyb3Iuc3R1YjwAAADrT6NpPAAAAMOzlXGkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9jdXJsX211bHRpX3NlbGVjdC5zdHViYQAAAOtPo2lhAAAAYHgYjaQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfbXVsdGlfZXhlYy5zdHViewAAAOtPo2l7AAAAC0mPSqQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfbXVsdGlfc3RyZXJyb3Iuc3R1YkIAAADrT6NpQgAAAO/89gKkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9jdXJsX3NldG9wdC5zdHViVgAAAOtPo2lWAAAAYv3oB6QBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfY29weV9oYW5kbGUuc3R1Yk0AAADrT6NpTQAAAIkgzOukAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9jdXJsX211bHRpX2Nsb3NlLnN0dWJLAAAA60+jaUsAAABEjyQppAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N1cmwvY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlLnN0dWJnAAAA60+jaWcAAACQ9BJtpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N1cmwvQ1VSTFN0cmluZ0ZpbGUuc3R1YqgAAADrT6NpqAAAACeKxFakAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9jdXJsX211bHRpX2FkZF9oYW5kbGUuc3R1YmQAAADrT6NpZAAAADhRQTqkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9jdXJsX3NoYXJlX3NldG9wdC5zdHViZwAAAOtPo2lnAAAAug6alKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfZXJybm8uc3R1YjkAAADrT6NpOQAAAAf7HrKkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9jdXJsX2V4ZWMuc3R1YkcAAADrT6NpRwAAAIWAYYKkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9DVVJMRmlsZS5zdHViHAMAAOtPo2kcAwAAbs83QqQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfdXBrZWVwLnN0dWKNAAAA60+jaY0AAAAIh+9qpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N1cmwvY3VybF9nZXRpbmZvLnN0dWJSAAAA60+jaVIAAAAzkrb4pAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N1cmwvY3VybF9tdWx0aV9zZXRvcHQuc3R1YmcAAADrT6NpZwAAAPaWfcukAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9jdXJsX3Jlc2V0LnN0dWJBAAAA60+jaUEAAAB1l+tMpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N1cmwvY3VybF9tdWx0aV9lcnJuby5zdHViSgAAAOtPo2lKAAAADflo76QBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfZXNjYXBlLnN0dWKEAAAA60+jaYQAAACq3tf0pAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N1cmwvY3VybF9pbml0LnN0dWJGAAAA60+jaUYAAABCNKWWpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvZXh0L2N1cmwvY3VybF9zaGFyZV9lcnJuby5zdHViSgAAAOtPo2lKAAAA+YYedaQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfbXVsdGlfZ2V0Y29udGVudC5zdHViSAAAAOtPo2lIAAAAf+EOOKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL2V4dC9jdXJsL2N1cmxfY2xvc2Uuc3R1YjoAAADrT6NpOgAAAMkwOXGkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9DdXJsU2hhcmVIYW5kbGUuc3R1YicAAADrT6NpJwAAADRcNLqkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9jdXJsX3NoYXJlX2luaXQuc3R1YjgAAADrT6NpOAAAAFrfSMmkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9leHQvY3VybC9jdXJsX211bHRpX2luZm9fcmVhZC5zdHVipgAAAOtPo2mmAAAA7bXUgqQBAAAAAAAAKAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL0xJQ0VOU0WEDAAA60+jaYQMAAD7sqRWpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9nY19kaXNhYmxlLnN0dWInAAAA60+jaScAAADJ7H/6pAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9nY19lbmFibGVkLnN0dWInAAAA60+jaScAAAAAcn2mpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9UcmF2ZXJzYWJsZS5zdHViQwAAAOtPo2lDAAAA78WCoKQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvaW50ZXJmYWNlX2V4aXN0cy5zdHViVQAAAOtPo2lVAAAAov558aQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvc2V0X2Vycm9yX2hhbmRsZXIuc3R1Yn4AAADrT6NpfgAAAMdT1FGkAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL0ZpYmVyRXJyb3Iuc3R1YnAAAADrT6NpcAAAAIJVAzOkAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL2dldF9jbGFzcy5zdHViQAAAAOtPo2lAAAAAQd1woKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvcHJvcGVydHlfZXhpc3RzLnN0dWJ7AAAA60+jaXsAAAAD66F5pAEAAAAAAAAxAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9kZWZpbmUuc3R1YvwAAADrT6Np/AAAAKP/1G6kAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL0NvdW50YWJsZS5zdHVifQAAAOtPo2l9AAAA79K/jaQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZ2V0X3BhcmVudF9jbGFzcy5zdHViXQAAAOtPo2ldAAAAuIQP6qQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZnVuY19nZXRfYXJncy5zdHViKwAAAOtPo2krAAAAveo2oqQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZ2V0X2RlZmluZWRfdmFycy5zdHViRQAAAOtPo2lFAAAA4RJbbaQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvUmV0dXJuVHlwZVdpbGxDaGFuZ2Uuc3R1YmsAAADrT6NpawAAAND4WZ+kAQAAAAAAADMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL0l0ZXJhdG9yLnN0dWIQAgAA60+jaRACAAAUXeeHpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9JbnRlcm5hbEl0ZXJhdG9yLnN0dWLoAQAA60+jaegBAADQESB9pAEAAAAAAAAxAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9zdHJjbXAuc3R1YkIAAADrT6NpQgAAAISNkTCkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL2dldF9yZXNvdXJjZV9pZC5zdHViVQAAAOtPo2lVAAAAilwM36QBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvemVuZF90aHJlYWRfaWQuc3R1YkkAAADrT6NpSQAAADCXHW+kAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL0F0dHJpYnV0ZS5zdHVi4ggAAOtPo2niCAAAqBp7u6QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvV2Vha1JlZmVyZW5jZS5zdHVi8QAAAOtPo2nxAAAAcXEagKQBAAAAAAAALwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvaXNfYS5zdHVijwAAAOtPo2mPAAAAwOwY36QBAAAAAAAAMgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvV2Vha01hcC5zdHViRAIAAOtPo2lEAgAALbW7BKQBAAAAAAAAMgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvQ2xvc3VyZS5zdHVi/QEAAOtPo2n9AQAABsm1KKQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZ2V0X2RlZmluZWRfZnVuY3Rpb25zLnN0dWJnAAAA60+jaWcAAAAABF4mpAEAAAAAAAA0AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9UeXBlRXJyb3Iuc3R1YioAAADrT6NpKgAAAJ8XxdakAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL0Vycm9yRXhjZXB0aW9uLnN0dWIgAQAA60+jaSABAAAGwg1tpAEAAAAAAAAxAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9zdHJsZW4uc3R1YjAAAADrT6NpMAAAABc8meukAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL3N0cm5jYXNlY21wLnN0dWJUAAAA60+jaVQAAAAqw2IMpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9TZW5zaXRpdmVQYXJhbWV0ZXJWYWx1ZS5zdHViFAEAAOtPo2kUAQAAQ3pPEaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvQXJpdGhtZXRpY0Vycm9yLnN0dWIwAAAA60+jaTAAAADH2o8VpAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9JdGVyYXRvckFnZ3JlZ2F0ZS5zdHViqAAAAOtPo2moAAAAgIktRaQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZW51bV9leGlzdHMuc3R1YlwAAADrT6NpXAAAANSpuwmkAQAAAAAAADYAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL0FycmF5QWNjZXNzLnN0dWI1AgAA60+jaTUCAAAmK72OpAEAAAAAAAA7AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9nZXRfY2FsbGVkX2NsYXNzLnN0dWIvAAAA60+jaS8AAADX5q2JpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9nZXRfZGVmaW5lZF9jb25zdGFudHMuc3R1YmIAAADrT6NpYgAAAKKkVsmkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL1NlbnNpdGl2ZVBhcmFtZXRlci5zdHVisgAAAOtPo2myAAAAm/sPUaQBAAAAAAAANAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvR2VuZXJhdG9yLnN0dWI6AgAA60+jaToCAACOnscbpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9EaXZpc2lvbkJ5WmVyb0Vycm9yLnN0dWI+AAAA60+jaT4AAAAX4zjVpAEAAAAAAAAzAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9PdmVycmlkZS5zdHVipQAAAOtPo2mlAAAAfn2Fz6QBAAAAAAAANQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvUGFyc2VFcnJvci5zdHViMgAAAOtPo2kyAAAAGJp/IaQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvemVuZF92ZXJzaW9uLnN0dWJNAAAA60+jaU0AAACs++WQpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9WYWx1ZUVycm9yLnN0dWIrAAAA60+jaSsAAADyJsiypAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9nZXRfZGVjbGFyZWRfaW50ZXJmYWNlcy5zdHViTAAAAOtPo2lMAAAAdfcLNaQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZGVidWdfYmFja3RyYWNlLnN0dWKBAAAA60+jaYEAAAB3vXx6pAEAAAAAAAA6AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9lcnJvcl9yZXBvcnRpbmcuc3R1YkMAAADrT6NpQwAAAEFU13CkAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL0JhY2tlZEVudW0uc3R1Yr8AAADrT6NpvwAAAEifqSukAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL3Jlc3RvcmVfZXhjZXB0aW9uX2hhbmRsZXIuc3R1YocAAADrT6NphwAAAADe3tKkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL2dldF9tYW5nbGVkX29iamVjdF92YXJzLnN0dWJDAAAA60+jaUMAAACDGqYDpAEAAAAAAAAyAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9kZWZpbmVkLnN0dWI5AAAA60+jaTkAAABusSpipAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9TdHJpbmdhYmxlLnN0dWJKAAAA60+jaUoAAAB93ojBpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9yZXN0b3JlX2Vycm9yX2hhbmRsZXIuc3R1Yn8AAADrT6NpfwAAACRQJSmkAQAAAAAAAD0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL2dldF9pbmNsdWRlZF9maWxlcy5zdHViRwAAAOtPo2lHAAAAk9FUDKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZ2NfY29sbGVjdF9jeWNsZXMuc3R1Yi0AAADrT6NpLQAAANxX8q+kAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL2dldF9kZWNsYXJlZF90cmFpdHMuc3R1YkgAAADrT6NpSAAAAHs47QmkAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL0RlcHJlY2F0ZWQuc3R1Yl8BAADrT6NpXwEAAPDn/rukAQAAAAAAADIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL3N0cm5jbXAuc3R1YlAAAADrT6NpUAAAAPsp3wOkAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL2djX2VuYWJsZS5zdHViJgAAAOtPo2kmAAAAVo/zL6QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZ2V0X3JlcXVpcmVkX2ZpbGVzLnN0dWJVAAAA60+jaVUAAABMBm4ZpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9Bcmd1bWVudENvdW50RXJyb3Iuc3R1YjcAAADrT6NpNwAAAP9mGi2kAQAAAAAAADUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL3VzZXJfZXJyb3Iuc3R1YgMBAADrT6NpAwEAADzqi1mkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL2dldF9vYmplY3RfdmFycy5zdHViOwAAAOtPo2k7AAAAMol6Y6QBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvbWV0aG9kX2V4aXN0cy5zdHVidwAAAOtPo2l3AAAAX/Tan6QBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvQ2xvc2VkR2VuZXJhdG9yRXhjZXB0aW9uLnN0dWI9AAAA60+jaT0AAABrUe8XpAEAAAAAAAAwAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9GaWJlci5zdHViCgMAAOtPo2kKAwAAqdIObaQBAAAAAAAARAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvUmVxdWVzdFBhcnNlQm9keUV4Y2VwdGlvbi5zdHViTwAAAOtPo2lPAAAA11o0X6QBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZ2V0X2NsYXNzX21ldGhvZHMuc3R1YmQAAADrT6NpZAAAAM/2XVOkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL3RyaWdnZXJfZXJyb3Iuc3R1YtEAAADrT6Np0QAAADu+i2OkAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL1Rocm93YWJsZS5zdHVibwEAAOtPo2lvAQAApdeNeKQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZ2V0X3Jlc291cmNlcy5zdHViPwAAAOtPo2k/AAAAUDLprqQBAAAAAAAAOAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZnVuY19udW1fYXJncy5zdHViKQAAAOtPo2kpAAAAT6JQaKQBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZ2V0X2NsYXNzX3ZhcnMuc3R1YlAAAADrT6NpUAAAAMh1iemkAQAAAAAAAEEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL0FsbG93RHluYW1pY1Byb3BlcnRpZXMuc3R1YpQAAADrT6NplAAAALf6XSWkAQAAAAAAADMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL3N0ZENsYXNzLnN0dWJKAAAA60+jaUoAAAAipwtfpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9kZWJ1Z19wcmludF9iYWNrdHJhY2Uuc3R1YlIAAADrT6NpUgAAAK66pkykAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL3RyYWl0X2V4aXN0cy5zdHViTQAAAOtPo2lNAAAA9c+QOKQBAAAAAAAAOgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZnVuY3Rpb25fZXhpc3RzLnN0dWI8AAAA60+jaTwAAAAkbcQQpAEAAAAAAAAwAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9FcnJvci5zdHViBAYAAOtPo2kEBgAAqGWViaQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZ2V0X2xvYWRlZF9leHRlbnNpb25zLnN0dWJnAAAA60+jaWcAAADBTzaIpAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9Db21waWxlRXJyb3Iuc3R1Yi0AAADrT6NpLQAAANodHoakAQAAAAAAAD8AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL2dldF9kZWNsYXJlZF9jbGFzc2VzLnN0dWJJAAAA60+jaUkAAADPXImEpAEAAAAAAAA0AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9FeGNlcHRpb24uc3R1YmQDAADrT6NpZAMAALs/W2mkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL1VuaGFuZGxlZE1hdGNoRXJyb3Iuc3R1YjQAAADrT6NpNAAAAC3HQeakAQAAAAAAADMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL1VuaXRFbnVtLnN0dWJ5AAAA60+jaXkAAAB3R3XXpAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9zdHJjYXNlY21wLnN0dWJGAAAA60+jaUYAAADl089YpAEAAAAAAAA4AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9nY19tZW1fY2FjaGVzLnN0dWIwAAAA60+jaTAAAACOy8pjpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9jbGFzc19hbGlhcy5zdHViWwAAAOtPo2lbAAAAgJSBxKQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZ2V0X3Jlc291cmNlX3R5cGUuc3R1YloAAADrT6NpWgAAACjx3sukAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL2V4dGVuc2lvbl9sb2FkZWQuc3R1Yj4AAADrT6NpPgAAADJb64akAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL2Z1bmNfZ2V0X2FyZy5zdHViNwAAAOtPo2k3AAAAFqmqAKQBAAAAAAAANwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvY2xhc3NfZXhpc3RzLnN0dWJNAAAA60+jaU0AAADLKkNGpAEAAAAAAAA3AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvWmVuZC9TZXJpYWxpemFibGUuc3R1YqkAAADrT6NpqQAAABjJ5GmkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL3NldF9leGNlcHRpb25faGFuZGxlci5zdHViZwAAAOtPo2lnAAAAI1wlFKQBAAAAAAAAPgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvZ2V0X2V4dGVuc2lvbl9mdW5jcy5zdHViXwAAAOtPo2lfAAAAs60hU6QBAAAAAAAAOQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL1plbmQvaXNfc3ViY2xhc3Nfb2Yuc3R1YpgAAADrT6NpmAAAANEX2zGkAQAAAAAAADQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9aZW5kL2djX3N0YXR1cy5zdHViPgAAAOtPo2k+AAAAME/BFqQBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL3NhcGkvbGl0ZXNwZWVkL2FwYWNoZV9nZXRfbW9kdWxlcy5zdHViMAAAAOtPo2kwAAAAmJg30qQBAAAAAAAATgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL3NhcGkvbGl0ZXNwZWVkL2xpdGVzcGVlZF9yZXF1ZXN0X2hlYWRlcnMuc3R1YlkAAADrT6NpWQAAAMT+NFOkAQAAAAAAAE0AAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL2xpdGVzcGVlZC9saXRlc3BlZWRfZmluaXNoX3JlcXVlc3Quc3R1YjUAAADrT6NpNQAAAGf8UiykAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL2xpdGVzcGVlZC9hcGFjaGVfcmVxdWVzdF9oZWFkZXJzLnN0dWJcAAAA60+jaVwAAADIBjgIpAEAAAAAAABCAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9saXRlc3BlZWQvZ2V0YWxsaGVhZGVycy5zdHViUwAAAOtPo2lTAAAA/4hn4aQBAAAAAAAATAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL3NhcGkvbGl0ZXNwZWVkL2FwYWNoZV9yZXNwb25zZV9oZWFkZXJzLnN0dWJkAAAA60+jaWQAAACh4mNMpAEAAAAAAABPAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9saXRlc3BlZWQvbGl0ZXNwZWVkX3Jlc3BvbnNlX2hlYWRlcnMuc3R1Yj4AAADrT6NpPgAAANrtaqikAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL2NsaS9jbGlfZ2V0X3Byb2Nlc3NfdGl0bGUuc3R1YjUAAADrT6NpNQAAAHz7fXCkAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL2NsaS9jbGlfc2V0X3Byb2Nlc3NfdGl0bGUuc3R1Yj8AAADrT6NpPwAAADxrvm2kAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL2NsaS9hcGFjaGVfcmVxdWVzdF9oZWFkZXJzLnN0dWI0AAAA60+jaTQAAABEaEg6pAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9jbGkvZ2V0YWxsaGVhZGVycy5zdHViKwAAAOtPo2krAAAAi4mnQqQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL3NhcGkvY2xpL2FwYWNoZV9yZXNwb25zZV9oZWFkZXJzLnN0dWI1AAAA60+jaTUAAACWqI0IpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9mcG0vZnBtL2Zhc3RjZ2lfZmluaXNoX3JlcXVlc3Quc3R1YlUAAADrT6NpVQAAAFJywbmkAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL2ZwbS9mcG0vYXBhY2hlX3JlcXVlc3RfaGVhZGVycy5zdHViNAAAAOtPo2k0AAAARGhIOqQBAAAAAAAAQAAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL3NhcGkvZnBtL2ZwbS9nZXRhbGxoZWFkZXJzLnN0dWJQAAAA60+jaVAAAACN9CiapAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9mcG0vZnBtL2ZwbV9nZXRfc3RhdHVzLnN0dWIyAAAA60+jaTIAAACWy9sNpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9hcGFjaGUyaGFuZGxlci92aXJ0dWFsLnN0dWIvAAAA60+jaS8AAAB7WJXTpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9hcGFjaGUyaGFuZGxlci9hcGFjaGVfZ2V0ZW52LnN0dWJdAAAA60+jaV0AAADHAl0zpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9hcGFjaGUyaGFuZGxlci9hcGFjaGVfc2V0ZW52LnN0dWJkAAAA60+jaWQAAAAeS7jdpAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9hcGFjaGUyaGFuZGxlci9hcGFjaGVfZ2V0X21vZHVsZXMuc3R1YjAAAADrT6NpMAAAAJiYN9KkAQAAAAAAAEwAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL2FwYWNoZTJoYW5kbGVyL2FwYWNoZV9nZXRfdmVyc2lvbi5zdHViNwAAAOtPo2k3AAAAPtzK1qQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL3NhcGkvYXBhY2hlMmhhbmRsZXIvYXBhY2hlX25vdGUuc3R1Yl0AAADrT6NpXQAAADfj0GSkAQAAAAAAAFAAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL2FwYWNoZTJoYW5kbGVyL2FwYWNoZV9yZXF1ZXN0X2hlYWRlcnMuc3R1YjQAAADrT6NpNAAAAERoSDqkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL2FwYWNoZTJoYW5kbGVyL2dldGFsbGhlYWRlcnMuc3R1YlAAAADrT6NpUAAAAI30KJqkAQAAAAAAAFEAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL2FwYWNoZTJoYW5kbGVyL2FwYWNoZV9yZXNwb25zZV9oZWFkZXJzLnN0dWI1AAAA60+jaTUAAACWqI0IpAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9hcGFjaGUyaGFuZGxlci9hcGFjaGVfbG9va3VwX3VyaS5zdHViaAAAAOtPo2loAAAAFWt6LaQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL3NhcGkvY2dpL2FwYWNoZV9jaGlsZF90ZXJtaW5hdGUuc3R1YlUAAADrT6NpVQAAALmKC8+kAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL2NnaS9hcGFjaGVfcmVxdWVzdF9oZWFkZXJzLnN0dWI0AAAA60+jaTQAAABEaEg6pAEAAAAAAAA8AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9jZ2kvZ2V0YWxsaGVhZGVycy5zdHViUAAAAOtPo2lQAAAAjfQomqQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL3NhcGkvY2dpL2FwYWNoZV9yZXNwb25zZV9oZWFkZXJzLnN0dWI1AAAA60+jaTUAAACWqI0IpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9waHBkYmcvcGhwZGJnX3Byb21wdC5zdHViOAAAAOtPo2k4AAAANdVTsaQBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL3NhcGkvcGhwZGJnL3BocGRiZ19leGVjLnN0dWI+AAAA60+jaT4AAAAAE9FlpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9waHBkYmcvcGhwZGJnX2NsZWFyLnN0dWIpAAAA60+jaSkAAABqd7S/pAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9waHBkYmcvcGhwZGJnX2dldF9leGVjdXRhYmxlLnN0dWJGAAAA60+jaUYAAAC63ilGpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9waHBkYmcvcGhwZGJnX2JyZWFrX2ZpbGUuc3R1YkUAAADrT6NpRQAAAHI78GOkAQAAAAAAAEcAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL3BocGRiZy9waHBkYmdfYnJlYWtfZnVuY3Rpb24uc3R1YkIAAADrT6NpQgAAAHv9JpukAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL3BocGRiZy9waHBkYmdfYnJlYWtfbmV4dC5zdHViUAAAAOtPo2lQAAAAzGRMLKQBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocC04LXN0dWJzL3N0dWJzL3NhcGkvcGhwZGJnL3BocGRiZ19icmVha19tZXRob2Quc3R1Yk0AAADrT6NpTQAAAEr09f+kAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHAtOC1zdHVicy9zdHVicy9zYXBpL3BocGRiZy9waHBkYmdfZW5kX29wbG9nLnN0dWJCAAAA60+jaUIAAAAYb5dxpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9waHBkYmcvcGhwZGJnX2NvbG9yLnN0dWJEAAAA60+jaUQAAADPiOD1pAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvc3R1YnMvc2FwaS9waHBkYmcvcGhwZGJnX3N0YXJ0X29wbG9nLnN0dWIvAAAA60+jaS8AAAAp5opOpAEAAAAAAAArAAAAdmVuZG9yL3BocHN0YW4vcGhwLTgtc3R1YnMvUGhwOFN0dWJzTWFwLnBocP6qAgDrT6Np/qoCACo0HtqkAQAAAAAAACQAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL0xJQ0VOU0UuBAAA60+jaS4EAAAe5hgtpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvVHlwZU5vZGUucGhwkgAAAOtPo2mSAAAA1F3Qy6QBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL1VuaW9uVHlwZU5vZGUucGhwPwMAAOtPo2k/AwAAf1TQ4aQBAAAAAAAAPAAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0FycmF5U2hhcGVOb2RlLnBocCQFAADrT6NpJAUAAMYT9MykAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9BcnJheVR5cGVOb2RlLnBocPYCAADrT6Np9gIAALXOnvikAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9BcnJheVNoYXBlSXRlbU5vZGUucGhwigQAAOtPo2mKBAAAH67Ur6QBAAAAAAAARwAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0NhbGxhYmxlVHlwZVBhcmFtZXRlck5vZGUucGhwtwQAAOtPo2m3BAAAXDbe8qQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL09mZnNldEFjY2Vzc1R5cGVOb2RlLnBocF8DAADrT6NpXwMAAEgfzcekAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9JbnRlcnNlY3Rpb25UeXBlTm9kZS5waHBGAwAA60+jaUYDAAA36xU2pAEAAAAAAABIAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvQXJyYXlTaGFwZVVuc2VhbGVkVHlwZU5vZGUucGhwIQMAAOtPo2khAwAA3u4X66QBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL09iamVjdFNoYXBlSXRlbU5vZGUucGhwGgQAAOtPo2kaBAAAxccW8qQBAAAAAAAATQAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0NvbmRpdGlvbmFsVHlwZUZvclBhcmFtZXRlck5vZGUucGhwQQQAAOtPo2lBBAAAPmGEoaQBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0NvbmRpdGlvbmFsVHlwZU5vZGUucGhwTgQAAOtPo2lOBAAAtItA76QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0ludmFsaWRUeXBlTm9kZS5waHBTAwAA60+jaVMDAADn5RKrpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvSWRlbnRpZmllclR5cGVOb2RlLnBocLIBAADrT6NpsgEAAEYf6vKkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9UaGlzVHlwZU5vZGUucGhwKAEAAOtPo2koAQAAK4XCnKQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0NvbnN0VHlwZU5vZGUucGhwGAIAAOtPo2kYAgAAIaIu36QBAAAAAAAAPQAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL09iamVjdFNoYXBlTm9kZS5waHBNAgAA60+jaU0CAADNpVKgpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvR2VuZXJpY1R5cGVOb2RlLnBocFIGAADrT6NpUgYAAB1xoWCkAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9DYWxsYWJsZVR5cGVOb2RlLnBocMMFAADrT6NpwwUAAC8aLHykAQAAAAAAAD4AAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9OdWxsYWJsZVR5cGVOb2RlLnBocNkBAADrT6Np2QEAAEs208ukAQAAAAAAADIAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQXR0cmlidXRlLnBocDkBAADrT6NpOQEAAMbSBqekAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvTm9kZVZpc2l0b3IvQ2xvbmluZ1Zpc2l0b3IucGhwyQEAAOtPo2nJAQAA6mS996QBAAAAAAAARQAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvQ29uc3RFeHByRmxvYXROb2RlLnBocMYBAADrT6NpxgEAAAkTB52kAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwckZhbHNlTm9kZS5waHA9AQAA60+jaT0BAABQMXcxpAEAAAAAAABBAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEZldGNoTm9kZS5waHDVAgAA60+jadUCAAD3WxZlpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEV4cHJUcnVlTm9kZS5waHA7AQAA60+jaTsBAADoxIlFpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEV4cHJBcnJheUl0ZW1Ob2RlLnBocBIDAADrT6NpEgMAADSrfM2kAQAAAAAAAE4AAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0RvY3RyaW5lQ29uc3RFeHByU3RyaW5nTm9kZS5waHB1BAAA60+jaXUEAAD1LHfRpAEAAAAAAABHAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEV4cHJJbnRlZ2VyTm9kZS5waHDIAQAA60+jacgBAADSs5W/pAEAAAAAAABQAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9RdW90ZUF3YXJlQ29uc3RFeHByU3RyaW5nTm9kZS5waHBQDAAA60+jaVAMAAD9pQBdpAEAAAAAAABFAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEV4cHJBcnJheU5vZGUucGhwRgIAAOtPo2lGAgAARJiHG6QBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvQ29uc3RFeHByU3RyaW5nTm9kZS5waHDHAQAA60+jaccBAADEjQujpAEAAAAAAABAAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEV4cHJOb2RlLnBocJwAAADrT6NpnAAAADDJ2kukAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwck51bGxOb2RlLnBocDsBAADrT6NpOwEAAJhnCpWkAQAAAAAAADwAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQWJzdHJhY3ROb2RlVmlzaXRvci5waHDFAgAA60+jacUCAACeL4MYpAEAAAAAAAA2AAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L05vZGVUcmF2ZXJzZXIucGhwxSoAAOtPo2nFKgAAiUIsmaQBAAAAAAAALQAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Ob2RlLnBocHcBAADrT6NpdwEAAD9TOwqkAQAAAAAAADcAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvTm9kZUF0dHJpYnV0ZXMucGhwrQIAAOtPo2mtAgAApVlYVKQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUmV0dXJuVGFnVmFsdWVOb2RlLnBocKECAADrT6NpoQIAAK9IF+ekAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0dlbmVyaWNUYWdWYWx1ZU5vZGUucGhw1QEAAOtPo2nVAQAAmCbcBKQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvVGhyb3dzVGFnVmFsdWVOb2RlLnBocKECAADrT6NpoQIAAMnUNomkAQAAAAAAAFYAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1B1cmVVbmxlc3NDYWxsYWJsZUlzSW1wdXJlVGFnVmFsdWVOb2RlLnBocLICAADrT6NpsgIAAFodB3SkAQAAAAAAADoAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BocERvY05vZGUucGhwNjUAAOtPo2k2NQAAon1ueqQBAAAAAAAAQwAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvRXh0ZW5kc1RhZ1ZhbHVlTm9kZS5waHC3AgAA60+jabcCAAB1ReatpAEAAAAAAAA/AAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9WYXJUYWdWYWx1ZU5vZGUucGhwQgMAAOtPo2lCAwAAa07lLaQBAAAAAAAAPwAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUGhwRG9jQ2hpbGROb2RlLnBocJsAAADrT6NpmwAAAIzVBvWkAQAAAAAAAEMAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1NlbGZPdXRUYWdWYWx1ZU5vZGUucGhwpAIAAOtPo2mkAgAA9rcyS6QBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUGFyYW1UYWdWYWx1ZU5vZGUucGhwiwQAAOtPo2mLBAAAwayvt6QBAAAAAAAAQQAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvTWl4aW5UYWdWYWx1ZU5vZGUucGhwoAIAAOtPo2mgAgAAYcYY+KQBAAAAAAAAWwAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUGFyYW1JbW1lZGlhdGVseUludm9rZWRDYWxsYWJsZVRhZ1ZhbHVlTm9kZS5waHC3AgAA60+jabcCAAA1UxgVpAEAAAAAAABVAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QYXJhbUxhdGVySW52b2tlZENhbGxhYmxlVGFnVmFsdWVOb2RlLnBocLECAADrT6NpsQIAAE/YvIKkAQAAAAAAAEUAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1R5cGVBbGlhc1RhZ1ZhbHVlTm9kZS5waHB3AgAA60+jaXcCAAA2JiIhpAEAAAAAAABDAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9JbnZhbGlkVGFnVmFsdWVOb2RlLnBocPkEAADrT6Np+QQAAD6R3E6kAQAAAAAAAEkAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1R5cGVsZXNzUGFyYW1UYWdWYWx1ZU5vZGUucGhwAQQAAOtPo2kBBAAAsLjBPKQBAAAAAAAARgAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvRGVwcmVjYXRlZFRhZ1ZhbHVlTm9kZS5waHAPAgAA60+jaQ8CAAAyi5d3pAEAAAAAAABMAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QYXJhbUNsb3N1cmVUaGlzVGFnVmFsdWVOb2RlLnBocDoDAADrT6NpOgMAAOrZxJmkAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0Fzc2VydFRhZ1Byb3BlcnR5VmFsdWVOb2RlLnBocO8EAADrT6Np7wQAAOlQ8G+kAQAAAAAAAE0AAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1JlcXVpcmVJbXBsZW1lbnRzVGFnVmFsdWVOb2RlLnBocKwCAADrT6NprAIAAMU6RcukAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1RlbXBsYXRlVGFnVmFsdWVOb2RlLnBocDoFAADrT6NpOgUAAFWgEcCkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0Fzc2VydFRhZ1ZhbHVlTm9kZS5waHBwBAAA60+jaXAEAACIPuSNpAEAAAAAAABEAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9Qcm9wZXJ0eVRhZ1ZhbHVlTm9kZS5waHAtAwAA60+jaS0DAABZyz/FpAEAAAAAAABKAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9SZXF1aXJlRXh0ZW5kc1RhZ1ZhbHVlTm9kZS5waHCpAgAA60+jaakCAABCJ+kIpAEAAAAAAAA+AAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QaHBEb2NUZXh0Tm9kZS5waHC5AQAA60+jabkBAAC70/lOpAEAAAAAAABLAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9NZXRob2RUYWdWYWx1ZVBhcmFtZXRlck5vZGUucGhwMwUAAOtPo2kzBQAArxjriaQBAAAAAAAASwAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvVHlwZUFsaWFzSW1wb3J0VGFnVmFsdWVOb2RlLnBocKIDAADrT6NpogMAAHDQuuSkAQAAAAAAAEAAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1VzZXNUYWdWYWx1ZU5vZGUucGhwtAIAAOtPo2m0AgAA2filvKQBAAAAAAAAQgAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUGhwRG9jVGFnVmFsdWVOb2RlLnBocJ4AAADrT6NpngAAAKfDOWWkAQAAAAAAAEgAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0Fzc2VydFRhZ01ldGhvZFZhbHVlTm9kZS5waHDlBAAA60+jaeUEAACuxJpkpAEAAAAAAAA9AAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QaHBEb2NUYWdOb2RlLnBocCgDAADrT6NpKAMAABVYcr2kAQAAAAAAAEQAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BhcmFtT3V0VGFnVmFsdWVOb2RlLnBocDIDAADrT6NpMgMAABQBbQGkAQAAAAAAAEIAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL01ldGhvZFRhZ1ZhbHVlTm9kZS5waHDYBgAA60+jadgGAAA0/T7LpAEAAAAAAABNAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9Eb2N0cmluZS9Eb2N0cmluZVRhZ1ZhbHVlTm9kZS5waHDzAgAA60+jafMCAABe5oPqpAEAAAAAAABJAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9Eb2N0cmluZS9Eb2N0cmluZUFyZ3VtZW50LnBocJYDAADrT6NplgMAAEwGTSqkAQAAAAAAAEoAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0RvY3RyaW5lL0RvY3RyaW5lQXJyYXlJdGVtLnBocEwEAADrT6NpTAQAAA/GMEKkAQAAAAAAAEsAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0RvY3RyaW5lL0RvY3RyaW5lQW5ub3RhdGlvbi5waHDZAgAA60+jadkCAAAo0lTNpAEAAAAAAABGAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9Eb2N0cmluZS9Eb2N0cmluZUFycmF5LnBocFQCAADrT6NpVAIAAHytbZGkAQAAAAAAAEYAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0ltcGxlbWVudHNUYWdWYWx1ZU5vZGUucGhwugIAAOtPo2m6AgAAEj+gpKQBAAAAAAAANAAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Ob2RlVmlzaXRvci5waHDPCgAA60+jac8KAABvgvu3pAEAAAAAAAA1AAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvUHJpbnRlci9EaWZmRWxlbS5waHCsAwAA60+jaawDAADGWjbnpAEAAAAAAAAzAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvUHJpbnRlci9EaWZmZXIucGhwpRUAAOtPo2mlFQAAUtLHgKQBAAAAAAAANAAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1ByaW50ZXIvUHJpbnRlci5waHBqhQAA60+jaWqFAABpMehNpAEAAAAAAAAwAAAAdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvTGV4ZXIvTGV4ZXIucGhwsxwAAOtPo2mzHAAACo9nh6QBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9TdHJpbmdVbmVzY2FwZXIucGhwPgoAAOtPo2k+CgAAK3TNOaQBAAAAAAAAOwAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9QYXJzZXJFeGNlcHRpb24ucGhwZwkAAOtPo2lnCQAAdS9nuaQBAAAAAAAANgAAAHZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9UeXBlUGFyc2VyLnBocMCXAADrT6NpwJcAAOXfWdWkAQAAAAAAADsAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9QYXJzZXIvQ29uc3RFeHByUGFyc2VyLnBocDwnAADrT6NpPCcAAH+J/XSkAQAAAAAAADgAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9QYXJzZXIvUGhwRG9jUGFyc2VyLnBocFm7AADrT6NpWbsAAJs9u9+kAQAAAAAAADkAAAB2ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9QYXJzZXIvVG9rZW5JdGVyYXRvci5waHC7IwAA60+jabsjAABHI618pAEAAAAAAAA5AAAAdmVuZG9yL25ldHRlL3JvYm90LWxvYWRlci9zcmMvUm9ib3RMb2FkZXIvUm9ib3RMb2FkZXIucGhwsEAAAOtPo2mwQAAA2oFOMaQBAAAAAAAAGgAAAHZlbmRvci9uZXR0ZS91dGlscy9uY3MueG1s6gEAAOtPo2nqAQAABP8PHKQBAAAAAAAALAAAAHZlbmRvci9uZXR0ZS91dGlscy9zcmMvVXRpbHMvT2JqZWN0TWl4aW4ucGhwAAQAAOtPo2kABAAA4u59WKQBAAAAAAAAKgAAAHZlbmRvci9uZXR0ZS91dGlscy9zcmMvVXRpbHMvQXJyYXlMaXN0LnBocN8LAADrT6Np3wsAACxVDnykAQAAAAAAACcAAAB2ZW5kb3IvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL1JhbmRvbS5waHDSBAAA60+jadIEAABb9jjXpAEAAAAAAAAqAAAAdmVuZG9yL25ldHRlL3V0aWxzL3NyYy9VdGlscy9BcnJheUhhc2gucGhwTggAAOtPo2lOCAAAaAXOLqQBAAAAAAAAKgAAAHZlbmRvci9uZXR0ZS91dGlscy9zcmMvVXRpbHMvUGFnaW5hdG9yLnBocIESAADrT6NpgRIAAAI9ReqkAQAAAAAAACcAAAB2ZW5kb3IvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL0Zsb2F0cy5waHBtCQAA60+jaW0JAADtcNidpAEAAAAAAAAmAAAAdmVuZG9yL25ldHRlL3V0aWxzL3NyYy9VdGlscy9JbWFnZS5waHDUYAAA60+jadRgAACWKnMqpAEAAAAAAAArAAAAdmVuZG9yL25ldHRlL3V0aWxzL3NyYy9VdGlscy9leGNlcHRpb25zLnBocJcEAADrT6NplwQAABRHCsKkAQAAAAAAACsAAAB2ZW5kb3IvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL1ZhbGlkYXRvcnMucGhwgCsAAOtPo2mAKwAAhv8dh6QBAAAAAAAAJwAAAHZlbmRvci9uZXR0ZS91dGlscy9zcmMvVXRpbHMvQXJyYXlzLnBocJgxAADrT6NpmDEAAFcGPsikAQAAAAAAACUAAAB2ZW5kb3IvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL0pzb24ucGhwzwYAAOtPo2nPBgAAHf+DWKQBAAAAAAAAKwAAAHZlbmRvci9uZXR0ZS91dGlscy9zcmMvVXRpbHMvRmlsZVN5c3RlbS5waHC+IAAA60+jab4gAAD+D+ZBpAEAAAAAAAAlAAAAdmVuZG9yL25ldHRlL3V0aWxzL3NyYy9VdGlscy9IdG1sLnBocJpaAADrT6NpmloAAEvecGWkAQAAAAAAACsAAAB2ZW5kb3IvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL1JlZmxlY3Rpb24ucGhwezcAAOtPo2l7NwAAeMe2gKQBAAAAAAAAKQAAAHZlbmRvci9uZXR0ZS91dGlscy9zcmMvVXRpbHMvRGF0ZVRpbWUucGhwXw4AAOtPo2lfDgAAcLW3lqQBAAAAAAAAKAAAAHZlbmRvci9uZXR0ZS91dGlscy9zcmMvVXRpbHMvSGVscGVycy5waHCNCQAA60+jaY0JAADI+A7TpAEAAAAAAAAoAAAAdmVuZG9yL25ldHRlL3V0aWxzL3NyYy9VdGlscy9TdHJpbmdzLnBocHFRAADrT6NpcVEAALG++d2kAQAAAAAAACUAAAB2ZW5kb3IvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL1R5cGUucGhwkBsAAOtPo2mQGwAAkPkrbqQBAAAAAAAALgAAAHZlbmRvci9uZXR0ZS91dGlscy9zcmMvVXRpbHMvT2JqZWN0SGVscGVycy5waHBGHwAA60+jaUYfAABth/AIpAEAAAAAAAApAAAAdmVuZG9yL25ldHRlL3V0aWxzL3NyYy9VdGlscy9DYWxsYmFjay5waHCFFQAA60+jaYUVAADUPOFTpAEAAAAAAAAlAAAAdmVuZG9yL25ldHRlL3V0aWxzL3NyYy9UcmFuc2xhdG9yLnBocOgBAADrT6Np6AEAAAMeumekAQAAAAAAACUAAAB2ZW5kb3IvbmV0dGUvdXRpbHMvc3JjL2V4Y2VwdGlvbnMucGhwxggAAOtPo2nGCAAAAWZTfKQBAAAAAAAAKAAAAHZlbmRvci9uZXR0ZS91dGlscy9zcmMvY29tcGF0aWJpbGl0eS5waHAIAwAA60+jaQgDAACLkKJQpAEAAAAAAAApAAAAdmVuZG9yL25ldHRlL3V0aWxzL3NyYy9IdG1sU3RyaW5nYWJsZS5waHBsAQAA60+jaWwBAACIq7bZpAEAAAAAAAAmAAAAdmVuZG9yL25ldHRlL3V0aWxzL3NyYy9TdGF0aWNDbGFzcy5waHDLAgAA60+jacsCAAAsrUh9pAEAAAAAAAA0AAAAdmVuZG9yL25ldHRlL3V0aWxzL3NyYy9JdGVyYXRvcnMvQ2FjaGluZ0l0ZXJhdG9yLnBocPANAADrT6Np8A0AAMOqp4ykAQAAAAAAACsAAAB2ZW5kb3IvbmV0dGUvdXRpbHMvc3JjL0l0ZXJhdG9ycy9NYXBwZXIucGhwpQIAAOtPo2mlAgAAfsAucqQBAAAAAAAAJgAAAHZlbmRvci9uZXR0ZS91dGlscy9zcmMvU21hcnRPYmplY3QucGhwAhEAAOtPo2kCEQAAsRvbBKQBAAAAAAAAGgAAAHZlbmRvci9uZXR0ZS91dGlscy9uY3MucGhwOAEAAOtPo2k4AQAAiGDx0aQBAAAAAAAAGwAAAHZlbmRvci9uZXR0ZS9kaS9QQVRDSEVTLnR4dLkAAADrT6NpuQAAAKXQ2+ekAQAAAAAAACUAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL2NvbXBhdGliaWxpdHkucGhwoQMAAOtPo2mhAwAAlon2IKQBAAAAAAAAJAAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvQ29udGFpbmVyLnBocDosAADrT6NpOiwAAA4d74SkAQAAAAAAACwAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL0NvbXBpbGVyRXh0ZW5zaW9uLnBocJIRAADrT6NpkhEAAKlSk+SkAQAAAAAAADkAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL0RlZmluaXRpb25zL0FjY2Vzc29yRGVmaW5pdGlvbi5waHAkDgAA60+jaSQOAABfuDbjpAEAAAAAAAA4AAAAdmVuZG9yL25ldHRlL2RpL3NyYy9ESS9EZWZpbml0aW9ucy9TZXJ2aWNlRGVmaW5pdGlvbi5waHBpFQAA60+jaWkVAABLEBfCpAEAAAAAAAAwAAAAdmVuZG9yL25ldHRlL2RpL3NyYy9ESS9EZWZpbml0aW9ucy9SZWZlcmVuY2UucGhw3wQAAOtPo2nfBAAA1fpcFqQBAAAAAAAAMAAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvRGVmaW5pdGlvbnMvU3RhdGVtZW50LnBocNQHAADrT6Np1AcAAHHj/nqkAQAAAAAAADgAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL0RlZmluaXRpb25zL0xvY2F0b3JEZWZpbml0aW9uLnBocHUVAADrT6NpdRUAAE+TM6qkAQAAAAAAADEAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL0RlZmluaXRpb25zL0RlZmluaXRpb24ucGhwJxIAAOtPo2knEgAAqqLY2aQBAAAAAAAAOQAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvRGVmaW5pdGlvbnMvSW1wb3J0ZWREZWZpbml0aW9uLnBocAQFAADrT6NpBAUAAHb8g8ykAQAAAAAAADgAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL0RlZmluaXRpb25zL0ZhY3RvcnlEZWZpbml0aW9uLnBocEcjAADrT6NpRyMAAGBG61WkAQAAAAAAACwAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL0F0dHJpYnV0ZXMvSW5qZWN0LnBocCEBAADrT6NpIQEAALLsTX2kAQAAAAAAACMAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL1Jlc29sdmVyLnBocLZiAADrT6NptmIAAKO0FZOkAQAAAAAAACUAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL2V4Y2VwdGlvbnMucGhwNgMAAOtPo2k2AwAAxMvq8aQBAAAAAAAAKwAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvRHluYW1pY1BhcmFtZXRlci5waHBvAQAA60+jaW8BAAAQmr6kpAEAAAAAAAAqAAAAdmVuZG9yL25ldHRlL2RpL3NyYy9ESS9Db250YWluZXJMb2FkZXIucGhwTA8AAOtPo2lMDwAA8fQkraQBAAAAAAAAJwAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvUGhwR2VuZXJhdG9yLnBocJkaAADrT6NpmRoAALoMedmkAQAAAAAAACwAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL0RlcGVuZGVuY3lDaGVja2VyLnBocBUWAADrT6NpFRYAAK4IDE6kAQAAAAAAADUAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL0NvbmZpZy9BZGFwdGVycy9QaHBBZGFwdGVyLnBocPsCAADrT6Np+wIAAPby7qekAQAAAAAAADYAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL0NvbmZpZy9BZGFwdGVycy9OZW9uQWRhcHRlci5waHD2FwAA60+jafYXAABAbuW2pAEAAAAAAAApAAAAdmVuZG9yL25ldHRlL2RpL3NyYy9ESS9Db25maWcvSGVscGVycy5waHAlAwAA60+jaSUDAACWyLu5pAEAAAAAAAAoAAAAdmVuZG9yL25ldHRlL2RpL3NyYy9ESS9Db25maWcvTG9hZGVyLnBocDQOAADrT6NpNA4AAPhramWkAQAAAAAAACkAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL0NvbmZpZy9BZGFwdGVyLnBocKgBAADrT6NpqAEAAPCSLWakAQAAAAAAACsAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL0NvbnRhaW5lckJ1aWxkZXIucGhwzysAAOtPo2nPKwAADm7Z0qQBAAAAAAAAIwAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvQ29tcGlsZXIucGhwqiUAAOtPo2mqJQAAlJ+Yq6QBAAAAAAAAJQAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvQXV0b3dpcmluZy5waHBjFAAA60+jaWMUAAARwCR4pAEAAAAAAAA2AAAAdmVuZG9yL25ldHRlL2RpL3NyYy9ESS9FeHRlbnNpb25zL0RlZmluaXRpb25TY2hlbWEucGhwbx8AAOtPo2lvHwAAzkp/I6QBAAAAAAAAOAAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9EZWNvcmF0b3JFeHRlbnNpb24ucGhwZwkAAOtPo2lnCQAAp2+5PKQBAAAAAAAAOAAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9Db25zdGFudHNFeHRlbnNpb24ucGhw5wIAAOtPo2nnAgAAcP1GK6QBAAAAAAAANwAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9TZXJ2aWNlc0V4dGVuc2lvbi5waHATHgAA60+jaRMeAAALI4tppAEAAAAAAAA5AAAAdmVuZG9yL25ldHRlL2RpL3NyYy9ESS9FeHRlbnNpb25zL1BhcmFtZXRlcnNFeHRlbnNpb24ucGhwew4AAOtPo2l7DgAAgYqG/qQBAAAAAAAAOQAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9FeHRlbnNpb25zRXh0ZW5zaW9uLnBocBIFAADrT6NpEgUAAEXBbV+kAQAAAAAAADEAAAB2ZW5kb3IvbmV0dGUvZGkvc3JjL0RJL0V4dGVuc2lvbnMvRElFeHRlbnNpb24ucGhwOQ0AAOtPo2k5DQAAw8KZxaQBAAAAAAAANQAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9TZWFyY2hFeHRlbnNpb24ucGhw1BMAAOtPo2nUEwAA/GrEyKQBAAAAAAAAMgAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9QaHBFeHRlbnNpb24ucGhw6QYAAOtPo2npBgAAhQjM+aQBAAAAAAAANQAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9JbmplY3RFeHRlbnNpb24ucGhwxhUAAOtPo2nGFQAAvnZUnqQBAAAAAAAAIgAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvREkvSGVscGVycy5waHDYIwAA60+jadgjAABlJJnwpAEAAAAAAABIAAAAdmVuZG9yL25ldHRlL2RpL3NyYy9CcmlkZ2VzL0RJVHJhY3kvdGVtcGxhdGVzL0NvbnRhaW5lclBhbmVsLnBhbmVsLnBodG1s9ggAAOtPo2n2CAAAXeudpqQBAAAAAAAARgAAAHZlbmRvci9uZXR0ZS9kaS9zcmMvQnJpZGdlcy9ESVRyYWN5L3RlbXBsYXRlcy9Db250YWluZXJQYW5lbC50YWIucGh0bWzAAwAA60+jacADAAA+RsAtpAEAAAAAAAA2AAAAdmVuZG9yL25ldHRlL2RpL3NyYy9CcmlkZ2VzL0RJVHJhY3kvQ29udGFpbmVyUGFuZWwucGhwaQoAAOtPo2lpCgAAqS2n/qQBAAAAAAAAKAAAAHZlbmRvci9uZXR0ZS9maW5kZXIvc3JjL1V0aWxzL0ZpbmRlci5waHCMKgAA60+jaYwqAAAINwvfpAEAAAAAAAAdAAAAdmVuZG9yL25ldHRlL25lb24vUEFUQ0hFUy50eHTgAAAA60+jaeAAAAAwkqBPpAEAAAAAAAAoAAAAdmVuZG9yL25ldHRlL25lb24vc3JjL05lb24vVHJhdmVyc2VyLnBocGoHAADrT6NpagcAAKoMYs2kAQAAAAAAACoAAAB2ZW5kb3IvbmV0dGUvbmVvbi9zcmMvTmVvbi9Ub2tlblN0cmVhbS5waHAuCAAA60+jaS4IAADC8XCYpAEAAAAAAAAkAAAAdmVuZG9yL25ldHRlL25lb24vc3JjL05lb24vTGV4ZXIucGhwDAoAAOtPo2kMCgAA7SYU56QBAAAAAAAAJQAAAHZlbmRvci9uZXR0ZS9uZW9uL3NyYy9OZW9uL0VudGl0eS5waHDIAgAA60+jacgCAAC5Y+RYpAEAAAAAAAAkAAAAdmVuZG9yL25ldHRlL25lb24vc3JjL05lb24vVG9rZW4ucGhwfQIAAOtPo2l9AgAAzCGIC6QBAAAAAAAAMwAAAHZlbmRvci9uZXR0ZS9uZW9uL3NyYy9OZW9uL05vZGUvRW50aXR5Q2hhaW5Ob2RlLnBocBsEAADrT6NpGwQAALX034WkAQAAAAAAAC4AAAB2ZW5kb3IvbmV0dGUvbmVvbi9zcmMvTmVvbi9Ob2RlL1N0cmluZ05vZGUucGhw4QoAAOtPo2nhCgAAxawcMqQBAAAAAAAAMwAAAHZlbmRvci9uZXR0ZS9uZW9uL3NyYy9OZW9uL05vZGUvSW5saW5lQXJyYXlOb2RlLnBocF8CAADrT6NpXwIAALb+quekAQAAAAAAADEAAAB2ZW5kb3IvbmV0dGUvbmVvbi9zcmMvTmVvbi9Ob2RlL0FycmF5SXRlbU5vZGUucGhwjAcAAOtPo2mMBwAAqPJlRqQBAAAAAAAALwAAAHZlbmRvci9uZXR0ZS9uZW9uL3NyYy9OZW9uL05vZGUvTGl0ZXJhbE5vZGUucGhwRQsAAOtPo2lFCwAA6bwNxKQBAAAAAAAALgAAAHZlbmRvci9uZXR0ZS9uZW9uL3NyYy9OZW9uL05vZGUvRW50aXR5Tm9kZS5waHBZBAAA60+jaVkEAAACKUfQpAEAAAAAAAAtAAAAdmVuZG9yL25ldHRlL25lb24vc3JjL05lb24vTm9kZS9BcnJheU5vZGUucGhwgQIAAOtPo2mBAgAAqhrca6QBAAAAAAAAMgAAAHZlbmRvci9uZXR0ZS9uZW9uL3NyYy9OZW9uL05vZGUvQmxvY2tBcnJheU5vZGUucGhwvAIAAOtPo2m8AgAA2ZbFJqQBAAAAAAAAIwAAAHZlbmRvci9uZXR0ZS9uZW9uL3NyYy9OZW9uL05lb24ucGhwnAUAAOtPo2mcBQAAuZra3qQBAAAAAAAAJgAAAHZlbmRvci9uZXR0ZS9uZW9uL3NyYy9OZW9uL0VuY29kZXIucGhwaAoAAOtPo2loCgAAp7682qQBAAAAAAAAIwAAAHZlbmRvci9uZXR0ZS9uZW9uL3NyYy9OZW9uL05vZGUucGhwtgIAAOtPo2m2AgAAfUUx0KQBAAAAAAAAKAAAAHZlbmRvci9uZXR0ZS9uZW9uL3NyYy9OZW9uL0V4Y2VwdGlvbi5waHA3AQAA60+jaTcBAAC0nQq7pAEAAAAAAAAmAAAAdmVuZG9yL25ldHRlL25lb24vc3JjL05lb24vRGVjb2Rlci5waHC6AgAA60+jaboCAAAvfFT5pAEAAAAAAAAlAAAAdmVuZG9yL25ldHRlL25lb24vc3JjL05lb24vUGFyc2VyLnBocOQhAADrT6Np5CEAAEl7+vakAQAAAAAAAB8AAAB2ZW5kb3IvbmV0dGUvbmVvbi9iaW4vbmVvbi1saW50SwgAAOtPo2lLCAAAVUwTxKQBAAAAAAAAOQAAAHZlbmRvci9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvQ2xhc3NUeXBlLnBocEY7AADrT6NpRjsAAC70ujCkAQAAAAAAADgAAAB2ZW5kb3IvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0VudW1DYXNlLnBocJMCAADrT6NpkwIAANcbElekAQAAAAAAADkAAAB2ZW5kb3IvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0F0dHJpYnV0ZS5waHBfAwAA60+jaV8DAADl4NXspAEAAAAAAAA4AAAAdmVuZG9yL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9Qcm9wZXJ0eS5waHCeCgAA60+jaZ4KAABzlyygpAEAAAAAAAA3AAAAdmVuZG9yL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9DbG9zdXJlLnBocL4FAADrT6NpvgUAAEeRZaikAQAAAAAAADgAAAB2ZW5kb3IvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0NvbnN0YW50LnBocMIDAADrT6NpwgMAAG80YL6kAQAAAAAAADYAAAB2ZW5kb3IvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL01ldGhvZC5waHDjCwAA60+jaeMLAADbzGJ6pAEAAAAAAAA6AAAAdmVuZG9yL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9QaHBMaXRlcmFsLnBocPsAAADrT6Np+wAAALopJqakAQAAAAAAADkAAAB2ZW5kb3IvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1BhcmFtZXRlci5waHArCgAA60+jaSsKAACExHSjpAEAAAAAAAA6AAAAdmVuZG9yL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9Qc3JQcmludGVyLnBocLkBAADrT6NpuQEAAI6KAZOkAQAAAAAAAEUAAAB2ZW5kb3IvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1RyYWl0cy9BdHRyaWJ1dGVBd2FyZS5waHC5AwAA60+jabkDAADzo22UpAEAAAAAAABAAAAAdmVuZG9yL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9UcmFpdHMvTmFtZUF3YXJlLnBocIgDAADrT6NpiAMAAJFK5Q2kAQAAAAAAAEMAAAB2ZW5kb3IvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1RyYWl0cy9Db21tZW50QXdhcmUucGhwzQIAAOtPo2nNAgAAPamGfKQBAAAAAAAARgAAAHZlbmRvci9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvVHJhaXRzL1Zpc2liaWxpdHlBd2FyZS5waHA8BwAA60+jaTwHAAAaYWySpAEAAAAAAABDAAAAdmVuZG9yL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9UcmFpdHMvRnVuY3Rpb25MaWtlLnBocDAPAADrT6NpMA8AAL5R1lmkAQAAAAAAADkAAAB2ZW5kb3IvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0V4dHJhY3Rvci5waHAMPgAA60+jaQw+AACCpHcqpAEAAAAAAABBAAAAdmVuZG9yL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9Qcm9tb3RlZFBhcmFtZXRlci5waHDlAwAA60+jaeUDAACREJDspAEAAAAAAAA3AAAAdmVuZG9yL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9MaXRlcmFsLnBocAoDAADrT6NpCgMAAIU9+1ukAQAAAAAAADcAAAB2ZW5kb3IvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0hlbHBlcnMucGhwihgAAOtPo2mKGAAAl0BpXaQBAAAAAAAAOAAAAHZlbmRvci9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvVHJhaXRVc2UucGhwowMAAOtPo2mjAwAAXI6MCKQBAAAAAAAAPgAAAHZlbmRvci9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvR2xvYmFsRnVuY3Rpb24ucGhw6wQAAOtPo2nrBAAAO8s6cKQBAAAAAAAANgAAAHZlbmRvci9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvRHVtcGVyLnBocDgjAADrT6NpOCMAAPuqSsCkAQAAAAAAADwAAAB2ZW5kb3IvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1BocE5hbWVzcGFjZS5waHBDJwAA60+jaUMnAACCUaoRpAEAAAAAAAA3AAAAdmVuZG9yL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9GYWN0b3J5LnBocIwzAADrT6NpjDMAAKVCkLOkAQAAAAAAADQAAAB2ZW5kb3IvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1R5cGUucGhwWAcAAOtPo2lYBwAAEEPU26QBAAAAAAAANwAAAHZlbmRvci9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvUGhwRmlsZS5waHChEAAA60+jaaEQAAAliAHbpAEAAAAAAAA3AAAAdmVuZG9yL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9QcmludGVyLnBocFs0AADrT6NpWzQAAPjDK9mkAQAAAAAAACIAAAB2ZW5kb3IvbmV0dGUvcGhwLWdlbmVyYXRvci9uY3MucGhwJwEAAOtPo2knAQAAUgDZ+6QBAAAAAAAALAAAAHZlbmRvci9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9Qcm9jZXNzb3IucGhwDQkAAOtPo2kNCQAABOcFtKQBAAAAAAAAMwAAAHZlbmRvci9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9EeW5hbWljUGFyYW1ldGVyLnBocO8AAADrT6Np7wAAAG7TkmakAQAAAAAAADYAAAB2ZW5kb3IvbmV0dGUvc2NoZW1hL3NyYy9TY2hlbWEvVmFsaWRhdGlvbkV4Y2VwdGlvbi5waHDeAwAA60+jad4DAABehwWzpAEAAAAAAAAqAAAAdmVuZG9yL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL0NvbnRleHQucGhw/gQAAOtPo2n+BAAA3XkxOKQBAAAAAAAAKQAAAHZlbmRvci9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9FeHBlY3QucGhw1gsAAOtPo2nWCwAACWrjt6QBAAAAAAAAKQAAAHZlbmRvci9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9TY2hlbWEucGhweQIAAOtPo2l5AgAAyNhyF6QBAAAAAAAAMQAAAHZlbmRvci9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9FbGVtZW50cy9BbnlPZi5waHBWDgAA60+jaVYOAAC2CcHZpAEAAAAAAAA1AAAAdmVuZG9yL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL0VsZW1lbnRzL1N0cnVjdHVyZS5waHCjFQAA60+jaaMVAAAB3ddPpAEAAAAAAAAwAAAAdmVuZG9yL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL0VsZW1lbnRzL0Jhc2UucGhw9w4AAOtPo2n3DgAAEmHkg6QBAAAAAAAAMAAAAHZlbmRvci9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9FbGVtZW50cy9UeXBlLnBocP4WAADrT6Np/hYAAFOJgqKkAQAAAAAAACoAAAB2ZW5kb3IvbmV0dGUvc2NoZW1hL3NyYy9TY2hlbWEvSGVscGVycy5waHALGAAA60+jaQsYAADaXdEPpAEAAAAAAAAqAAAAdmVuZG9yL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL01lc3NhZ2UucGhw+wkAAOtPo2n7CQAAQlo8kaQBAAAAAAAANQAAAHZlbmRvci9uZXR0ZS9ib290c3RyYXAvc3JjL0Jvb3RzdHJhcC9Db25maWd1cmF0b3IucGhwDiwAAOtPo2kOLAAA8yNX0qQBAAAAAAAARgAAAHZlbmRvci9uZXR0ZS9ib290c3RyYXAvc3JjL0Jvb3RzdHJhcC9FeHRlbnNpb25zL0NvbnN0YW50c0V4dGVuc2lvbi5waHApAgAA60+jaSkCAABXNZYPpAEAAAAAAABAAAAAdmVuZG9yL25ldHRlL2Jvb3RzdHJhcC9zcmMvQm9vdHN0cmFwL0V4dGVuc2lvbnMvUGhwRXh0ZW5zaW9uLnBocFEGAADrT6NpUQYAAK6K0KikAQAAAAAAACsAAAB2ZW5kb3IvbmV0dGUvYm9vdHN0cmFwL3NyYy9Db25maWd1cmF0b3IucGhwxAEAAOtPo2nEAQAAQ/P8OKQBAAAAAAAAMgAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0NvbnRpbnVvdXNwaHAucGhwaQUAAOtPo2lpBQAAmuT+n6QBAAAAAAAAMQAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0F3c0NvZGVCdWlsZC5waHDbBQAA60+jadsFAABzFrVIpAEAAAAAAAAtAAAAdmVuZG9yL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvQ2kvQXBwVmV5b3IucGhwnQYAAOtPo2mdBgAAFGxQf6QBAAAAAAAAMgAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0dpdEh1YkFjdGlvbnMucGhwAAcAAOtPo2kABwAA4fid6KQBAAAAAAAALwAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0Fic3RyYWN0Q2kucGhwmQEAAOtPo2mZAQAA/V/O8KQBAAAAAAAAKgAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0J1ZGR5LnBocBEGAADrT6NpEQYAAOyO2xekAQAAAAAAACsAAAB2ZW5kb3Ivb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9CYW1ib28ucGhwOAYAAOtPo2k4BgAAM2LMaKQBAAAAAAAALQAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0NvZGVzaGlwLnBocB0FAADrT6NpHQUAAIWLfW2kAQAAAAAAACsAAAB2ZW5kb3Ivb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9DaXJjbGUucGhwgQUAAOtPo2mBBQAAnF1fg6QBAAAAAAAAMAAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0NpSW50ZXJmYWNlLnBocPEFAADrT6Np8QUAAFNPGDWkAQAAAAAAACsAAAB2ZW5kb3Ivb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9UcmF2aXMucGhw0wYAAOtPo2nTBgAAo1QQTqQBAAAAAAAALAAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL1dlcmNrZXIucGhwLgUAAOtPo2kuBQAApdtxoaQBAAAAAAAAKgAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0Ryb25lLnBocDIFAADrT6NpMgUAAD3OM0WkAQAAAAAAACsAAAB2ZW5kb3Ivb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9HaXRMYWIucGhwBAcAAOtPo2kEBwAACU18+qQBAAAAAAAALAAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0plbmtpbnMucGhw2AQAAOtPo2nYBAAAMTPDgKQBAAAAAAAALQAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL1RlYW1DaXR5LnBocMsEAADrT6NpywQAAEETNyGkAQAAAAAAADcAAAB2ZW5kb3Ivb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9CaXRidWNrZXRQaXBlbGluZXMucGhw3wUAAOtPo2nfBQAAz8RbFKQBAAAAAAAAQgAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0V4Y2VwdGlvbi9DaU5vdERldGVjdGVkRXhjZXB0aW9uLnBocJcAAADrT6NplwAAACVZZbKkAQAAAAAAACwAAAB2ZW5kb3Ivb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaURldGVjdG9yLnBocOMKAADrT6Np4woAAJ9XjjqkAQAAAAAAAC4AAAB2ZW5kb3Ivb25kcmFtL2NpLWRldGVjdG9yL3NyYy9UcmluYXJ5TG9naWMucGhwPwcAAOtPo2k/BwAAh5K2VqQBAAAAAAAAJQAAAHZlbmRvci9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0Vudi5waHDHAQAA60+jaccBAADQ/9qapAEAAAAAAAA2AAAAdmVuZG9yL3N5bWZvbnkvc3RyaW5nL0luZmxlY3Rvci9JbmZsZWN0b3JJbnRlcmZhY2UucGhwVgMAAOtPo2lWAwAA0ofgKKQBAAAAAAAANAAAAHZlbmRvci9zeW1mb255L3N0cmluZy9JbmZsZWN0b3IvRW5nbGlzaEluZmxlY3Rvci5waHCUQgAA60+jaZRCAAADsRDXpAEAAAAAAAAzAAAAdmVuZG9yL3N5bWZvbnkvc3RyaW5nL0luZmxlY3Rvci9GcmVuY2hJbmZsZWN0b3IucGhwJBgAAOtPo2kkGAAAP1SBi6QBAAAAAAAAJAAAAHZlbmRvci9zeW1mb255L3N0cmluZy9CeXRlU3RyaW5nLnBocOc8AADrT6Np5zwAALav2RukAQAAAAAAACcAAAB2ZW5kb3Ivc3ltZm9ueS9zdHJpbmcvVW5pY29kZVN0cmluZy5waHDQMgAA60+jadAyAAADNIKXpAEAAAAAAAA2AAAAdmVuZG9yL3N5bWZvbnkvc3RyaW5nL0V4Y2VwdGlvbi9FeGNlcHRpb25JbnRlcmZhY2UucGhwYwEAAOtPo2ljAQAAoqFl2aQBAAAAAAAANAAAAHZlbmRvci9zeW1mb255L3N0cmluZy9FeGNlcHRpb24vUnVudGltZUV4Y2VwdGlvbi5waHCCAQAA60+jaYIBAAAMphDSpAEAAAAAAAA8AAAAdmVuZG9yL3N5bWZvbnkvc3RyaW5nL0V4Y2VwdGlvbi9JbnZhbGlkQXJndW1lbnRFeGNlcHRpb24ucGhwkgEAAOtPo2mSAQAAlalMT6QBAAAAAAAAKAAAAHZlbmRvci9zeW1mb255L3N0cmluZy9BYnN0cmFjdFN0cmluZy5waHDgTwAA60+jaeBPAADDwd2vpAEAAAAAAAAdAAAAdmVuZG9yL3N5bWZvbnkvc3RyaW5nL0xJQ0VOU0UsBAAA60+jaSwEAADVpl/PpAEAAAAAAAAtAAAAdmVuZG9yL3N5bWZvbnkvc3RyaW5nL1Jlc291cmNlcy9mdW5jdGlvbnMucGhwcAMAAOtPo2lwAwAAGnWgM6QBAAAAAAAAPAAAAHZlbmRvci9zeW1mb255L3N0cmluZy9SZXNvdXJjZXMvZGF0YS93Y3N3aWR0aF90YWJsZV93aWRlLnBocB8TAADrT6NpHxMAAICLcbGkAQAAAAAAADwAAAB2ZW5kb3Ivc3ltZm9ueS9zdHJpbmcvUmVzb3VyY2VzL2RhdGEvd2Nzd2lkdGhfdGFibGVfemVyby5waHCYFQAA60+jaZgVAADQYKidpAEAAAAAAAAkAAAAdmVuZG9yL3N5bWZvbnkvc3RyaW5nL0xhenlTdHJpbmcucGhwchMAAOtPo2lyEwAApQjzuKQBAAAAAAAALgAAAHZlbmRvci9zeW1mb255L3N0cmluZy9TbHVnZ2VyL0FzY2lpU2x1Z2dlci5waHAzFwAA60+jaTMXAACIYS+cpAEAAAAAAAAyAAAAdmVuZG9yL3N5bWZvbnkvc3RyaW5nL1NsdWdnZXIvU2x1Z2dlckludGVyZmFjZS5waHDxAgAA60+jafECAACwR0jApAEAAAAAAAAvAAAAdmVuZG9yL3N5bWZvbnkvc3RyaW5nL0Fic3RyYWN0VW5pY29kZVN0cmluZy5waHBhaQAA60+jaWFpAAAIDnf4pAEAAAAAAAApAAAAdmVuZG9yL3N5bWZvbnkvc3RyaW5nL0NvZGVQb2ludFN0cmluZy5waHCxHwAA60+jabEfAACMHEE2pAEAAAAAAAA1AAAAdmVuZG9yL3N5bWZvbnkvcG9seWZpbGwtaW50bC1ncmFwaGVtZS9ib290c3RyYXA4MC5waHBnCgAA60+jaWcKAACZvkV7pAEAAAAAAAAtAAAAdmVuZG9yL3N5bWZvbnkvcG9seWZpbGwtaW50bC1ncmFwaGVtZS9MSUNFTlNFLAQAAOtPo2ksBAAAhJUdSKQBAAAAAAAAMwAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLWludGwtZ3JhcGhlbWUvYm9vdHN0cmFwLnBocOUIAADrT6Np5QgAAAT64gSkAQAAAAAAADIAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLWdyYXBoZW1lL0dyYXBoZW1lLnBocDgmAADrT6NpOCYAAP4etUmkAQAAAAAAADcAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLW5vcm1hbGl6ZXIvYm9vdHN0cmFwODAucGhwzwIAAOtPo2nPAgAA7CzIEqQBAAAAAAAANgAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLWludGwtbm9ybWFsaXplci9Ob3JtYWxpemVyLnBocGQlAADrT6NpZCUAAHWpsemkAQAAAAAAAC8AAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLW5vcm1hbGl6ZXIvTElDRU5TRSwEAADrT6NpLAQAAISVHUikAQAAAAAAAEwAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLW5vcm1hbGl6ZXIvUmVzb3VyY2VzL3VuaWRhdGEvY29tYmluaW5nQ2xhc3MucGhwRDUAAOtPo2lENQAAjYD9C6QBAAAAAAAAUgAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLWludGwtbm9ybWFsaXplci9SZXNvdXJjZXMvdW5pZGF0YS9jYW5vbmljYWxDb21wb3NpdGlvbi5waHDjRAAA60+jaeNEAAAn10PUpAEAAAAAAABUAAAAdmVuZG9yL3N5bWZvbnkvcG9seWZpbGwtaW50bC1ub3JtYWxpemVyL1Jlc291cmNlcy91bmlkYXRhL2Nhbm9uaWNhbERlY29tcG9zaXRpb24ucGhwe5gAAOtPo2l7mAAAsmpluqQBAAAAAAAAWAAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLWludGwtbm9ybWFsaXplci9SZXNvdXJjZXMvdW5pZGF0YS9jb21wYXRpYmlsaXR5RGVjb21wb3NpdGlvbi5waHBvBQEA60+jaW8FAQBj4yy9pAEAAAAAAABGAAAAdmVuZG9yL3N5bWZvbnkvcG9seWZpbGwtaW50bC1ub3JtYWxpemVyL1Jlc291cmNlcy9zdHVicy9Ob3JtYWxpemVyLnBocJQBAADrT6NplAEAAI7PxyWkAQAAAAAAADUAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLW5vcm1hbGl6ZXIvYm9vdHN0cmFwLnBocNUCAADrT6Np1QIAACNwqwykAQAAAAAAACcAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS9QaHA4MS5waHDGAgAA60+jacYCAACLsCQbpAEAAAAAAAAlAAAAdmVuZG9yL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvTElDRU5TRSwEAADrT6NpLAQAADDwFfKkAQAAAAAAAEAAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS9SZXNvdXJjZXMvc3R1YnMvQ1VSTFN0cmluZ0ZpbGUucGhwmwUAAOtPo2mbBQAA++hKVKQBAAAAAAAARgAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLXBocDgxL1Jlc291cmNlcy9zdHVicy9SZXR1cm5UeXBlV2lsbENoYW5nZS5waHClAQAA60+jaaUBAAA1GocrpAEAAAAAAAArAAAAdmVuZG9yL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvYm9vdHN0cmFwLnBocOICAADrT6Np4gIAAAY8AVCkAQAAAAAAAC0AAAB2ZW5kb3Ivc3ltZm9ueS9wcm9jZXNzL1BpcGVzL1dpbmRvd3NQaXBlcy5waHBvFwAA60+jaW8XAAAMTTQmpAEAAAAAAAAvAAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9QaXBlcy9QaXBlc0ludGVyZmFjZS5waHDqBQAA60+jaeoFAADxqAPPpAEAAAAAAAAqAAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9QaXBlcy9Vbml4UGlwZXMucGhwtQ4AAOtPo2m1DgAAOlafG6QBAAAAAAAALgAAAHZlbmRvci9zeW1mb255L3Byb2Nlc3MvUGlwZXMvQWJzdHJhY3RQaXBlcy5waHD8EwAA60+jafwTAACYWOijpAEAAAAAAAArAAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9FeGVjdXRhYmxlRmluZGVyLnBocOQJAADrT6Np5AkAAGKft1SkAQAAAAAAAC4AAAB2ZW5kb3Ivc3ltZm9ueS9wcm9jZXNzL1BocEV4ZWN1dGFibGVGaW5kZXIucGhwYQoAAOtPo2lhCgAA20SuyqQBAAAAAAAAOwAAAHZlbmRvci9zeW1mb255L3Byb2Nlc3MvRXhjZXB0aW9uL1Byb2Nlc3NGYWlsZWRFeGNlcHRpb24ucGhwSQUAAOtPo2lJBQAAeIBOEqQBAAAAAAAAPQAAAHZlbmRvci9zeW1mb255L3Byb2Nlc3MvRXhjZXB0aW9uL1Byb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbi5waHB8BgAA60+jaXwGAACWnnd5pAEAAAAAAAA3AAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9FeGNlcHRpb24vRXhjZXB0aW9uSW50ZXJmYWNlLnBocNQBAADrT6Np1AEAALdbaJqkAQAAAAAAADUAAAB2ZW5kb3Ivc3ltZm9ueS9wcm9jZXNzL0V4Y2VwdGlvbi9SdW50aW1lRXhjZXB0aW9uLnBocPMBAADrT6Np8wEAADZymKGkAQAAAAAAAD0AAAB2ZW5kb3Ivc3ltZm9ueS9wcm9jZXNzL0V4Y2VwdGlvbi9JbnZhbGlkQXJndW1lbnRFeGNlcHRpb24ucGhwAgIAAOtPo2kCAgAAKZsmtaQBAAAAAAAAMwAAAHZlbmRvci9zeW1mb255L3Byb2Nlc3MvRXhjZXB0aW9uL0xvZ2ljRXhjZXB0aW9uLnBocOQBAADrT6Np5AEAAHZ4LiykAQAAAAAAAD0AAAB2ZW5kb3Ivc3ltZm9ueS9wcm9jZXNzL0V4Y2VwdGlvbi9Qcm9jZXNzU2lnbmFsZWRFeGNlcHRpb24ucGhw1AMAAOtPo2nUAwAAwDELIKQBAAAAAAAAJwAAAHZlbmRvci9zeW1mb255L3Byb2Nlc3MvUHJvY2Vzc1V0aWxzLnBocFwHAADrT6NpXAcAADFw31qkAQAAAAAAAB4AAAB2ZW5kb3Ivc3ltZm9ueS9wcm9jZXNzL0xJQ0VOU0UsBAAA60+jaSwEAACEqbtVpAEAAAAAAAAmAAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9JbnB1dFN0cmVhbS5waHCLCQAA60+jaYsJAAD//EM3pAEAAAAAAAAlAAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9QaHBQcm9jZXNzLnBocN8JAADrT6Np3wkAAEznhYekAQAAAAAAACIAAAB2ZW5kb3Ivc3ltZm9ueS9wcm9jZXNzL1Byb2Nlc3MucGhwu88AAOtPo2m7zwAAB5zN8qQBAAAAAAAALQAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLWN0eXBlL2Jvb3RzdHJhcDgwLnBocGgHAADrT6NpaAcAALpmCdekAQAAAAAAACUAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZS9MSUNFTlNFLAQAAOtPo2ksBAAA6R2k/aQBAAAAAAAAJwAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLWN0eXBlL0N0eXBlLnBocMkZAADrT6NpyRkAADJ8dOqkAQAAAAAAACsAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZS9ib290c3RyYXAucGhwLAcAAOtPo2ksBwAAY5DG1aQBAAAAAAAAJQAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLXBocDczL0xJQ0VOU0UsBAAA60+jaSwEAADpHaT9pAEAAAAAAAA/AAAAdmVuZG9yL3N5bWZvbnkvcG9seWZpbGwtcGhwNzMvUmVzb3VyY2VzL3N0dWJzL0pzb25FeGNlcHRpb24ucGhwRQEAAOtPo2lFAQAAOFOW7KQBAAAAAAAAKwAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLXBocDczL2Jvb3RzdHJhcC5waHDzAwAA60+jafMDAACA0hB8pAEAAAAAAAAnAAAAdmVuZG9yL3N5bWZvbnkvcG9seWZpbGwtcGhwNzMvUGhwNzMucGhwYgMAAOtPo2liAwAASgOaPKQBAAAAAAAAOQAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9FeGNlcHRpb24vQWNjZXNzRGVuaWVkRXhjZXB0aW9uLnBocL0BAADrT6NpvQEAAKoRbmikAQAAAAAAAD4AAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvRXhjZXB0aW9uL0RpcmVjdG9yeU5vdEZvdW5kRXhjZXB0aW9uLnBocLUBAADrT6NptQEAABY2cYmkAQAAAAAAACMAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvR2l0aWdub3JlLnBocCUMAADrT6NpJQwAAEeoO0mkAQAAAAAAADkAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvRmlsZW5hbWVGaWx0ZXJJdGVyYXRvci5waHC7BAAA60+jabsEAADA43y7pAEAAAAAAAA8AAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL0l0ZXJhdG9yL0ZpbGVjb250ZW50RmlsdGVySXRlcmF0b3IucGhwvAUAAOtPo2m8BQAA1lD1BKQBAAAAAAAAOwAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9JdGVyYXRvci9EZXB0aFJhbmdlRmlsdGVySXRlcmF0b3IucGhwnwUAAOtPo2mfBQAAIppk1KQBAAAAAAAAOQAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9JdGVyYXRvci9GaWxlVHlwZUZpbHRlckl0ZXJhdG9yLnBocIEFAADrT6NpgQUAAG2WLHCkAQAAAAAAADUAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvUGF0aEZpbHRlckl0ZXJhdG9yLnBocMEFAADrT6NpwQUAALrCuZqkAQAAAAAAAD0AAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvTXVsdGlwbGVQY3JlRmlsdGVySXRlcmF0b3IucGhwwQwAAOtPo2nBDAAAxvzUCaQBAAAAAAAAOgAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9JdGVyYXRvci9TaXplUmFuZ2VGaWx0ZXJJdGVyYXRvci5waHCeBQAA60+jaZ4FAAA+knlapAEAAAAAAAA6AAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL0l0ZXJhdG9yL0RhdGVSYW5nZUZpbHRlckl0ZXJhdG9yLnBocMcFAADrT6NpxwUAAKZE5UOkAQAAAAAAAEEAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvRXhjbHVkZURpcmVjdG9yeUZpbHRlckl0ZXJhdG9yLnBocIYKAADrT6NphgoAAEY7hF6kAQAAAAAAADsAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvVmNzSWdub3JlZEZpbHRlckl0ZXJhdG9yLnBocJ8PAADrT6Npnw8AAD1N/WikAQAAAAAAADcAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvQ3VzdG9tRmlsdGVySXRlcmF0b3IucGhwMwYAAOtPo2kzBgAA2Tm/hqQBAAAAAAAAMwAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9JdGVyYXRvci9Tb3J0YWJsZUl0ZXJhdG9yLnBocGoPAADrT6Npag8AADnO3TOkAQAAAAAAAD0AAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IucGhw/xAAAOtPo2n/EAAAuFOWS6QBAAAAAAAALwAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9JdGVyYXRvci9MYXp5SXRlcmF0b3IucGhwsQIAAOtPo2mxAgAAAL/LEqQBAAAAAAAAHQAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9MSUNFTlNFLAQAAOtPo2ksBAAAhKm7VaQBAAAAAAAAHgAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9HbG9iLnBocEoOAADrT6NpSg4AAAeGgbWkAQAAAAAAADUAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvQ29tcGFyYXRvci9OdW1iZXJDb21wYXJhdG9yLnBocB8KAADrT6NpHwoAAGdc4QqkAQAAAAAAADMAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvQ29tcGFyYXRvci9EYXRlQ29tcGFyYXRvci5waHCMBQAA60+jaYwFAABy5NX9pAEAAAAAAAAvAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL0NvbXBhcmF0b3IvQ29tcGFyYXRvci5waHD8CwAA60+jafwLAAD7ilv/pAEAAAAAAAAgAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL0ZpbmRlci5waHDFWAAA60+jacVYAAB9ydbupAEAAAAAAAAlAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1NwbEZpbGVJbmZvLnBocCwIAADrT6NpLAgAAPaepumkAQAAAAAAADAAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZy9ib290c3RyYXA4MC5waHAQJwAA60+jaRAnAABMI1xNpAEAAAAAAAAoAAAAdmVuZG9yL3N5bWZvbnkvcG9seWZpbGwtbWJzdHJpbmcvTElDRU5TRSwEAADrT6NpLAQAAISVHUikAQAAAAAAAEAAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZy9SZXNvdXJjZXMvdW5pZGF0YS91cHBlckNhc2UucGhw0mYAAOtPo2nSZgAA6BJQ9aQBAAAAAAAAQgAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nL1Jlc291cmNlcy91bmlkYXRhL2Nhc2VGb2xkaW5nLnBocGEJAADrT6NpYQkAAOZ84rOkAQAAAAAAAEYAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZy9SZXNvdXJjZXMvdW5pZGF0YS90aXRsZUNhc2VSZWdleHAucGhwORgAAOtPo2k5GAAAPnx6S6QBAAAAAAAAQAAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nL1Jlc291cmNlcy91bmlkYXRhL2xvd2VyQ2FzZS5waHDbXwAA60+jadtfAADV48xkpAEAAAAAAAAtAAAAdmVuZG9yL3N5bWZvbnkvcG9seWZpbGwtbWJzdHJpbmcvTWJzdHJpbmcucGhwSo0AAOtPo2lKjQAAhKjFrqQBAAAAAAAALgAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nL2Jvb3RzdHJhcC5waHAPIQAA60+jaQ8hAADM7s5kpAEAAAAAAAAsAAAAdmVuZG9yL3N5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzL0xJQ0VOU0UsBAAA60+jaSwEAAAMS+7ApAEAAAAAAAAxAAAAdmVuZG9yL3N5bWZvbnkvZGVwcmVjYXRpb24tY29udHJhY3RzL2Z1bmN0aW9uLnBocDIEAADrT6NpMgQAANLjMACkAQAAAAAAACUAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1waHA3NC9MSUNFTlNFLAQAAOtPo2ksBAAA1aZfz6QBAAAAAAAAKwAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLXBocDc0L2Jvb3RzdHJhcC5waHAlAwAA60+jaSUDAAD8ogzwpAEAAAAAAAAnAAAAdmVuZG9yL3N5bWZvbnkvcG9seWZpbGwtcGhwNzQvUGhwNzQucGhw9QoAAOtPo2n1CgAAQVbcgKQBAAAAAAAAJwAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLXBocDgwL1BocDgwLnBocPkNAADrT6Np+Q0AAGNIvLikAQAAAAAAACUAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9MSUNFTlNFLAQAAOtPo2ksBAAADEvuwKQBAAAAAAAAOwAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9BdHRyaWJ1dGUucGhw8AIAAOtPo2nwAgAATUvcPKQBAAAAAAAAPAAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9WYWx1ZUVycm9yLnBocD4BAADrT6NpPgEAAGemjvOkAQAAAAAAADoAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvUGhwVG9rZW4ucGhwdwEAAOtPo2l3AQAAPTdUOKQBAAAAAAAAPAAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9TdHJpbmdhYmxlLnBocIwBAADrT6NpjAEAAHRdXNqkAQAAAAAAAEUAAAB2ZW5kb3Ivc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvVW5oYW5kbGVkTWF0Y2hFcnJvci5waHBHAQAA60+jaUcBAADWiCsDpAEAAAAAAAAqAAAAdmVuZG9yL3N5bWZvbnkvcG9seWZpbGwtcGhwODAvUGhwVG9rZW4ucGhwiQgAAOtPo2mJCAAAFF1m8aQBAAAAAAAAKwAAAHZlbmRvci9zeW1mb255L3BvbHlmaWxsLXBocDgwL2Jvb3RzdHJhcC5waHD8BQAA60+jafwFAAD4Ay7EpAEAAAAAAAAzAAAAdmVuZG9yL3N5bWZvbnkvc2VydmljZS1jb250cmFjdHMvUmVzZXRJbnRlcmZhY2UucGhw+QMAAOtPo2n5AwAAHPESGqQBAAAAAAAAQAAAAHZlbmRvci9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL0F0dHJpYnV0ZS9TdWJzY3JpYmVkU2VydmljZS5waHA6AwAA60+jaToDAAAF5+a0pAEAAAAAAAA3AAAAdmVuZG9yL3N5bWZvbnkvc2VydmljZS1jb250cmFjdHMvQXR0cmlidXRlL1JlcXVpcmVkLnBocKMCAADrT6NpowIAACxnCDykAQAAAAAAADsAAAB2ZW5kb3Ivc3ltZm9ueS9zZXJ2aWNlLWNvbnRyYWN0cy9TZXJ2aWNlU3Vic2NyaWJlclRyYWl0LnBocOIPAADrT6Np4g8AALkBa/WkAQAAAAAAAD0AAAB2ZW5kb3Ivc3ltZm9ueS9zZXJ2aWNlLWNvbnRyYWN0cy9TZXJ2aWNlUHJvdmlkZXJJbnRlcmZhY2UucGhw3wQAAOtPo2nfBAAA88JVbqQBAAAAAAAAKAAAAHZlbmRvci9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL0xJQ0VOU0UsBAAA60+jaSwEAADpHaT9pAEAAAAAAAA/AAAAdmVuZG9yL3N5bWZvbnkvc2VydmljZS1jb250cmFjdHMvU2VydmljZVN1YnNjcmliZXJJbnRlcmZhY2UucGhw2wgAAOtPo2nbCAAAfMjYeqQBAAAAAAAAOAAAAHZlbmRvci9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL1NlcnZpY2VMb2NhdG9yVHJhaXQucGhwCQ8AAOtPo2kJDwAAoYRBr6QBAAAAAAAAKAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvQ29uc29sZUV2ZW50cy5waHCwCAAA60+jabAIAAAw/2LDpAEAAAAAAAAhAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9DdXJzb3IucGhwPxAAAOtPo2k/EAAAgOWZYaQBAAAAAAAAMAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvT3V0cHV0L0J1ZmZlcmVkT3V0cHV0LnBocGMDAADrT6NpYwMAAJ8W4RykAQAAAAAAADYAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL091dHB1dC9Db25zb2xlU2VjdGlvbk91dHB1dC5waHCsEAAA60+jaawQAADJD93UpAEAAAAAAAAoAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9PdXRwdXQvT3V0cHV0LnBocGcRAADrT6NpZxEAAN2sjv+kAQAAAAAAADUAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL091dHB1dC9UcmltbWVkQnVmZmVyT3V0cHV0LnBocG8GAADrT6NpbwYAAGi+VlWkAQAAAAAAAC8AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL091dHB1dC9Db25zb2xlT3V0cHV0LnBocCkTAADrT6NpKRMAAMwKynykAQAAAAAAAC4AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL091dHB1dC9TdHJlYW1PdXRwdXQucGhw5Q8AAOtPo2nlDwAAhS56LaQBAAAAAAAAOAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvT3V0cHV0L0NvbnNvbGVPdXRwdXRJbnRlcmZhY2UucGhwMQMAAOtPo2kxAwAAKqdITKQBAAAAAAAAMQAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvT3V0cHV0L091dHB1dEludGVyZmFjZS5waHB0CwAA60+jaXQLAABNNBpBpAEAAAAAAAAsAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9PdXRwdXQvTnVsbE91dHB1dC5waHA4CQAA60+jaTgJAACCsMk/pAEAAAAAAAAuAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9BdHRyaWJ1dGUvQXNDb21tYW5kLnBocE4DAADrT6NpTgMAAAZN/eSkAQAAAAAAADsAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0V4Y2VwdGlvbi9JbnZhbGlkT3B0aW9uRXhjZXB0aW9uLnBocBcCAADrT6NpFwIAAAN6j7ukAQAAAAAAAD8AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0V4Y2VwdGlvbi9OYW1lc3BhY2VOb3RGb3VuZEV4Y2VwdGlvbi5waHDsAQAA60+jaewBAABYByN8pAEAAAAAAAA3AAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9FeGNlcHRpb24vRXhjZXB0aW9uSW50ZXJmYWNlLnBocLsBAADrT6NpuwEAANtbJuKkAQAAAAAAADUAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0V4Y2VwdGlvbi9SdW50aW1lRXhjZXB0aW9uLnBocMABAADrT6NpwAEAAP3u8WikAQAAAAAAADoAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0V4Y2VwdGlvbi9NaXNzaW5nSW5wdXRFeGNlcHRpb24ucGhwAAIAAOtPo2kAAgAAky4otqQBAAAAAAAAPQAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvRXhjZXB0aW9uL0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbi5waHDQAQAA60+jadABAACw/iBopAEAAAAAAAAzAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9FeGNlcHRpb24vTG9naWNFeGNlcHRpb24ucGhwvAEAAOtPo2m8AQAAbBAT0KQBAAAAAAAAPQAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvRXhjZXB0aW9uL0NvbW1hbmROb3RGb3VuZEV4Y2VwdGlvbi5waHDPBAAA60+jac8EAAAkK/nTpAEAAAAAAAAyAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9DSS9HaXRodWJBY3Rpb25SZXBvcnRlci5waHAjDAAA60+jaSMMAACWtSqqpAEAAAAAAABEAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9EZXBlbmRlbmN5SW5qZWN0aW9uL0FkZENvbnNvbGVDb21tYW5kUGFzcy5waHCsFwAA60+jaawXAABlWnqzpAEAAAAAAAAuAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9Db21tYW5kL0xpc3RDb21tYW5kLnBocBUMAADrT6NpFQwAAFiYT8ikAQAAAAAAAD0AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0NvbW1hbmQvU2lnbmFsYWJsZUNvbW1hbmRJbnRlcmZhY2UucGhwvQIAAOtPo2m9AgAAIK8G+qQBAAAAAAAAKgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvQ29tbWFuZC9Db21tYW5kLnBocMBQAADrT6NpwFAAANbomQekAQAAAAAAADIAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0NvbW1hbmQvQ29tcGxldGVDb21tYW5kLnBocO8gAADrT6Np7yAAAM7F3lKkAQAAAAAAADgAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0NvbW1hbmQvRHVtcENvbXBsZXRpb25Db21tYW5kLnBocLsTAADrT6NpuxMAAPx1J+ukAQAAAAAAADAAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0NvbW1hbmQvTG9ja2FibGVUcmFpdC5waHAkBwAA60+jaSQHAAD6+KC1pAEAAAAAAAAuAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9Db21tYW5kL0hlbHBDb21tYW5kLnBocB4MAADrT6NpHgwAAMVG2H+kAQAAAAAAAC4AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0NvbW1hbmQvTGF6eUNvbW1hbmQucGhwRhUAAOtPo2lGFQAAhzXaUKQBAAAAAAAAOAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU2lnbmFsUmVnaXN0cnkvU2lnbmFsUmVnaXN0cnkucGhwRAYAAOtPo2lEBgAAAb+yT6QBAAAAAAAANgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvRXZlbnRMaXN0ZW5lci9FcnJvckxpc3RlbmVyLnBocF4LAADrT6NpXgsAAM4UjhSkAQAAAAAAAB4AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0xJQ0VOU0UsBAAA60+jaSwEAACEqbtVpAEAAAAAAAAwAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9SZXNvdXJjZXMvY29tcGxldGlvbi5iYXNoyQoAAOtPo2nJCgAACKB6KKQBAAAAAAAANAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvUmVzb3VyY2VzL2Jpbi9oaWRkZW5pbnB1dC5leGUAJAAA60+jaQAkAACVjaV2pAEAAAAAAAAvAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9Mb2dnZXIvQ29uc29sZUxvZ2dlci5waHC0EAAA60+jabQQAAC6NKK8pAEAAAAAAAA0AAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9FdmVudC9Db25zb2xlQ29tbWFuZEV2ZW50LnBocD0FAADrT6NpPQUAAOxZCeikAQAAAAAAADYAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0V2ZW50L0NvbnNvbGVUZXJtaW5hdGVFdmVudC5waHBqBAAA60+jaWoEAABAxOH8pAEAAAAAAAAtAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9FdmVudC9Db25zb2xlRXZlbnQucGhwzAUAAOtPo2nMBQAAzdNZaKQBAAAAAAAAMwAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvRXZlbnQvQ29uc29sZVNpZ25hbEV2ZW50LnBocNkDAADrT6Np2QMAABnvSoKkAQAAAAAAADIAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0V2ZW50L0NvbnNvbGVFcnJvckV2ZW50LnBocCIGAADrT6NpIgYAAJ+7up+kAQAAAAAAACAAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0NvbG9yLnBocFoTAADrT6NpWhMAAHOCSrakAQAAAAAAACwAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0lucHV0L0lucHV0T3B0aW9uLnBocGAaAADrT6NpYBoAAEqaLHukAQAAAAAAADAAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0lucHV0L0lucHV0RGVmaW5pdGlvbi5waHBULgAA60+jaVQuAACgHojbpAEAAAAAAAAsAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9JbnB1dC9TdHJpbmdJbnB1dC5waHDBCgAA60+jacEKAAD6iP6gpAEAAAAAAAA5AAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9JbnB1dC9TdHJlYW1hYmxlSW5wdXRJbnRlcmZhY2UucGhwegMAAOtPo2l6AwAA+cTEiqQBAAAAAAAANAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvSW5wdXQvSW5wdXRBd2FyZUludGVyZmFjZS5waHBMAgAA60+jaUwCAABMydXHpAEAAAAAAAAmAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9JbnB1dC9JbnB1dC5waHA9FQAA60+jaT0VAADQH/AcpAEAAAAAAAArAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9JbnB1dC9BcnJheUlucHV0LnBocL8WAADrT6NpvxYAAPCSy9ukAQAAAAAAAC8AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0lucHV0L0lucHV0SW50ZXJmYWNlLnBocJkRAADrT6NpmREAALCFTNikAQAAAAAAAC4AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0lucHV0L0lucHV0QXJndW1lbnQucGhwoQ0AAOtPo2mhDQAAzfx8MaQBAAAAAAAAKgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvSW5wdXQvQXJndklucHV0LnBocMIwAADrT6NpwjAAAJiNCKykAQAAAAAAAC8AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1Rlc3Rlci9Db21tYW5kVGVzdGVyLnBocEoJAADrT6NpSgkAANrkLw+kAQAAAAAAAEAAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1Rlc3Rlci9Db25zdHJhaW50L0NvbW1hbmRJc1N1Y2Nlc3NmdWwucGhwuAQAAOtPo2m4BAAA8mDbDKQBAAAAAAAAOQAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvVGVzdGVyL0NvbW1hbmRDb21wbGV0aW9uVGVzdGVyLnBocEwGAADrT6NpTAYAAFS9v0ikAQAAAAAAAC0AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1Rlc3Rlci9UZXN0ZXJUcmFpdC5waHDLFwAA60+jacsXAABqI4L+pAEAAAAAAAAzAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9UZXN0ZXIvQXBwbGljYXRpb25UZXN0ZXIucGhwkgoAAOtPo2mSCgAA2TxOp6QBAAAAAAAAMgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvUXVlc3Rpb24vQ2hvaWNlUXVlc3Rpb24ucGhw6hMAAOtPo2nqEwAA/+vVvKQBAAAAAAAAOAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvUXVlc3Rpb24vQ29uZmlybWF0aW9uUXVlc3Rpb24ucGhwKQYAAOtPo2kpBgAAJWS4WKQBAAAAAAAALAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvUXVlc3Rpb24vUXVlc3Rpb24ucGhwfhsAAOtPo2l+GwAA44wUQaQBAAAAAAAAMwAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU2luZ2xlQ29tbWFuZEFwcGxpY2F0aW9uLnBocDkHAADrT6NpOQcAAFeNMDCkAQAAAAAAADwAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0Rlc2NyaXB0b3IvQXBwbGljYXRpb25EZXNjcmlwdGlvbi5waHAlDwAA60+jaSUPAAD897AxpAEAAAAAAAA0AAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9EZXNjcmlwdG9yL1RleHREZXNjcmlwdG9yLnBocA4yAADrT6NpDjIAABy+NQmkAQAAAAAAADkAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0Rlc2NyaXB0b3IvRGVzY3JpcHRvckludGVyZmFjZS5waHBRAgAA60+jaVECAAAN2kCwpAEAAAAAAAA4AAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9EZXNjcmlwdG9yL01hcmtkb3duRGVzY3JpcHRvci5waHBrGwAA60+jaWsbAAD0KN6+pAEAAAAAAAAwAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9EZXNjcmlwdG9yL0Rlc2NyaXB0b3IucGhwGgwAAOtPo2kaDAAARHEEEaQBAAAAAAAAMwAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvRGVzY3JpcHRvci9YbWxEZXNjcmlwdG9yLnBocC4nAADrT6NpLicAAAAN4CCkAQAAAAAAADQAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0Rlc2NyaXB0b3IvSnNvbkRlc2NyaXB0b3IucGhwzBUAAOtPo2nMFQAAu+ihZqQBAAAAAAAAMwAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvSGVscGVyL1Byb2dyZXNzSW5kaWNhdG9yLnBocL0bAADrT6NpvRsAAJ1yFrykAQAAAAAAADcAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0hlbHBlci9TeW1mb255UXVlc3Rpb25IZWxwZXIucGhwRw0AAOtPo2lHDQAAUPuxz6QBAAAAAAAAMAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvSGVscGVyL1RhYmxlQ2VsbFN0eWxlLnBocGQIAADrT6NpZAgAAA7rPnakAQAAAAAAACsAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0hlbHBlci9UYWJsZVJvd3MucGhwVgIAAOtPo2lWAgAAwVa/1aQBAAAAAAAAJwAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvSGVscGVyL1RhYmxlLnBocA9zAADrT6NpD3MAAIr6gcqkAQAAAAAAADYAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0hlbHBlci9EZWJ1Z0Zvcm1hdHRlckhlbHBlci5waHBcDQAA60+jaVwNAABv7S20pAEAAAAAAAAyAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvRGVzY3JpcHRvckhlbHBlci5waHDvCQAA60+jae8JAAC+lc/gpAEAAAAAAAAsAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGVTdHlsZS5waHDUMAAA60+jadQwAACA7YpvpAEAAAAAAAAwAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGVTZXBhcmF0b3IucGhwJQIAAOtPo2klAgAAa6GNxKQBAAAAAAAAKwAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvSGVscGVyL0hlbHBlclNldC5waHBFCgAA60+jaUUKAAAZ/w+4pAEAAAAAAAArAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGVDZWxsLnBocBUHAADrT6NpFQcAAJjElsukAQAAAAAAAC0AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0hlbHBlci9Qcm9ncmVzc0Jhci5waHBPSAAA60+jaU9IAAD4xk8IpAEAAAAAAAAxAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvSGVscGVySW50ZXJmYWNlLnBocF4DAADrT6NpXgMAAPzAA0SkAQAAAAAAACgAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0hlbHBlci9IZWxwZXIucGhw7BMAAOtPo2nsEwAA1tgXkaQBAAAAAAAALwAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvSGVscGVyL1Byb2Nlc3NIZWxwZXIucGhw0RMAAOtPo2nREwAA2J3giqQBAAAAAAAAKAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvSGVscGVyL0R1bXBlci5waHBYCAAA60+jaVgIAAAUhSO5pAEAAAAAAAAwAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvUXVlc3Rpb25IZWxwZXIucGhw80wAAOtPo2nzTAAA+vHu/6QBAAAAAAAAMQAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvSGVscGVyL0Zvcm1hdHRlckhlbHBlci5waHCACQAA60+jaYAJAAAY9x3FpAEAAAAAAAAyAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvSW5wdXRBd2FyZUhlbHBlci5waHAhAwAA60+jaSEDAAAiExjnpAEAAAAAAABCAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9Gb3JtYXR0ZXIvT3V0cHV0Rm9ybWF0dGVyU3R5bGVJbnRlcmZhY2UucGhwaQQAAOtPo2lpBAAAwFr396QBAAAAAAAAOQAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvRm9ybWF0dGVyL091dHB1dEZvcm1hdHRlclN0eWxlLnBocJULAADrT6NplQsAAMEICIOkAQAAAAAAADgAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0Zvcm1hdHRlci9OdWxsT3V0cHV0Rm9ybWF0dGVyLnBocG8FAADrT6NpbwUAAF5U67SkAQAAAAAAADQAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0Zvcm1hdHRlci9PdXRwdXRGb3JtYXR0ZXIucGhwwCAAAOtPo2nAIAAAOWODRqQBAAAAAAAAPgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvRm9ybWF0dGVyL091dHB1dEZvcm1hdHRlclN0eWxlU3RhY2sucGhwKwoAAOtPo2krCgAAdLwoT6QBAAAAAAAAPQAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvRm9ybWF0dGVyL091dHB1dEZvcm1hdHRlckludGVyZmFjZS5waHBEBQAA60+jaUQFAAC3BVvvpAEAAAAAAABGAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9Gb3JtYXR0ZXIvV3JhcHBhYmxlT3V0cHV0Rm9ybWF0dGVySW50ZXJmYWNlLnBocL8CAADrT6NpvwIAAJf8WqmkAQAAAAAAAD0AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0Zvcm1hdHRlci9OdWxsT3V0cHV0Rm9ybWF0dGVyU3R5bGUucGhwuAQAAOtPo2m4BAAAwpZRMKQBAAAAAAAAQQAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvQ29tcGxldGlvbi9PdXRwdXQvQmFzaENvbXBsZXRpb25PdXRwdXQucGhwFQQAAOtPo2kVBAAAU8ejYaQBAAAAAAAARgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvQ29tcGxldGlvbi9PdXRwdXQvQ29tcGxldGlvbk91dHB1dEludGVyZmFjZS5waHD4AgAA60+jafgCAABvIJNVpAEAAAAAAAA7AAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9Db21wbGV0aW9uL0NvbXBsZXRpb25TdWdnZXN0aW9ucy5waHBuCAAA60+jaW4IAABTQe6RpAEAAAAAAAAwAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9Db21wbGV0aW9uL1N1Z2dlc3Rpb24ucGhwvgIAAOtPo2m+AgAA9+DPBKQBAAAAAAAANQAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvQ29tcGxldGlvbi9Db21wbGV0aW9uSW5wdXQucGhwWyAAAOtPo2lbIAAAN0sgJ6QBAAAAAAAAJgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvQXBwbGljYXRpb24ucGhwGLAAAOtPo2kYsAAAS7XMWqQBAAAAAAAAIwAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvVGVybWluYWwucGhwbRQAAOtPo2ltFAAAvAbAoqQBAAAAAAAAPwAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvQ29tbWFuZExvYWRlci9Db21tYW5kTG9hZGVySW50ZXJmYWNlLnBocIIDAADrT6NpggMAAKiaYxykAQAAAAAAAD8AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL0NvbW1hbmRMb2FkZXIvQ29udGFpbmVyQ29tbWFuZExvYWRlci5waHAWBgAA60+jaRYGAAAQpaRWpAEAAAAAAAA9AAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9Db21tYW5kTG9hZGVyL0ZhY3RvcnlDb21tYW5kTG9hZGVyLnBocGUFAADrT6NpZQUAAHcRIRmkAQAAAAAAACwAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N0eWxlL091dHB1dFN0eWxlLnBocEwMAADrT6NpTAwAAMbj1W+kAQAAAAAAAC8AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N0eWxlL1N0eWxlSW50ZXJmYWNlLnBocFIKAADrT6NpUgoAAAG88DOkAQAAAAAAAC0AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N0eWxlL1N5bWZvbnlTdHlsZS5waHDmOQAA60+jaeY5AACkvKPepAEAAAAAAAAgAAAAdmVuZG9yL2NsdWUvbmRqc29uLXJlYWN0L0xJQ0VOU0U6BAAA60+jaToEAADuRGlHpAEAAAAAAAAoAAAAdmVuZG9yL2NsdWUvbmRqc29uLXJlYWN0L3NyYy9FbmNvZGVyLnBocKoRAADrT6NpqhEAAKnF11mkAQAAAAAAACgAAAB2ZW5kb3IvY2x1ZS9uZGpzb24tcmVhY3Qvc3JjL0RlY29kZXIucGhwzRIAAOtPo2nNEgAAQw6z46QBAAAAAAAAEwAAAHZlbmRvci9hdXRvbG9hZC5waHDsAgAA60+jaewCAADR6nbWpAEAAAAAAAAkAAAAdmVuZG9yL2ZpZy9odHRwLW1lc3NhZ2UtdXRpbC9MSUNFTlNFPQQAAOtPo2k9BAAAg4kQP6QBAAAAAAAAOwAAAHZlbmRvci9maWcvaHR0cC1tZXNzYWdlLXV0aWwvc3JjL1JlcXVlc3RNZXRob2RJbnRlcmZhY2UucGhw5AIAAOtPo2nkAgAAQ5w+mKQBAAAAAAAAOAAAAHZlbmRvci9maWcvaHR0cC1tZXNzYWdlLXV0aWwvc3JjL1N0YXR1c0NvZGVJbnRlcmZhY2UucGhweQ8AAOtPo2l5DwAA6cchvKQBAAAAAAAALQAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vTElDRU5TRTYEAADrT6NpNgQAAFd30gCkAQAAAAAAAFgAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Ob2RlQ29tcGlsZXIvRXhjZXB0aW9uL1VuYWJsZVRvQ29tcGlsZU5vZGUucGhwhRQAAOtPo2mFFAAAdk7SuqQBAAAAAAAASAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL05vZGVDb21waWxlci9Db21waWxlZFZhbHVlLnBocMMBAADrT6NpwwEAAF+9k4CkAQAAAAAAAE0AAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Ob2RlQ29tcGlsZXIvQ29tcGlsZU5vZGVUb1ZhbHVlLnBocIAzAADrT6NpgDMAAO3y5lSkAQAAAAAAAEoAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Ob2RlQ29tcGlsZXIvQ29tcGlsZXJDb250ZXh0LnBocF8SAADrT6NpXxIAAFqgzVekAQAAAAAAAFsAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0FzdC9FeGNlcHRpb24vUGFyc2VUb0FzdEZhaWx1cmUucGhwvgYAAOtPo2m+BgAASuc6vqQBAAAAAAAAVQAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvQXN0L0ZpbmRSZWZsZWN0aW9uc0luVHJlZS5waHAwGQAA60+jaTAZAABkESDApAEAAAAAAABHAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Bc3QvTG9jYXRvci5waHAoCwAA60+jaSgLAADB5OphpAEAAAAAAABWAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Bc3QvUGFyc2VyL01lbW9pemluZ1BhcnNlci5waHDqBQAA60+jaeoFAABn0Qm/pAEAAAAAAABZAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Bc3QvU3RyYXRlZ3kvTm9kZVRvUmVmbGVjdGlvbi5waHDXCQAA60+jadcJAAB8fhOEpAEAAAAAAABeAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Bc3QvU3RyYXRlZ3kvQXN0Q29udmVyc2lvblN0cmF0ZWd5LnBocOcEAADrT6Np5wQAAOGOz5ykAQAAAAAAAFUAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0V4Y2VwdGlvbi9JbnZhbGlkRmlsZUluZm8ucGhwKwIAAOtPo2krAgAASiKO6aQBAAAAAAAAXAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvRXhjZXB0aW9uL05vQW5vbnltb3VzQ2xhc3NPbkxpbmUucGhwfwEAAOtPo2l/AQAAjVwT7KQBAAAAAAAAVgAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvRXhjZXB0aW9uL0ludmFsaWREaXJlY3RvcnkucGhw/gEAAOtPo2n+AQAAn2ScVKQBAAAAAAAAVgAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvRXhjZXB0aW9uL05vdEludGVybmFsQ2xhc3MucGhwpAAAAOtPo2mkAAAAmXrXr6QBAAAAAAAAWwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvRXhjZXB0aW9uL1R3b0Nsb3N1cmVzT25TYW1lTGluZS5waHByAQAA60+jaXIBAACNxh/TpAEAAAAAAABiAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vRXZhbGVkQ2xvc3VyZUNhbm5vdEJlTG9jYXRlZC5waHAkAQAA60+jaSQBAAACZIfPpAEAAAAAAABZAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vSW52YWxpZEZpbGVMb2NhdGlvbi5waHCrAAAA60+jaasAAACVrJyUpAEAAAAAAABVAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vTm9DbG9zdXJlT25MaW5lLnBocHABAADrT6NpcAEAAO7UAUekAQAAAAAAAGMAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0V4Y2VwdGlvbi9Ud29Bbm9ueW1vdXNDbGFzc2VzT25TYW1lTGluZS5waHCDAQAA60+jaYMBAABNL7efpAEAAAAAAABXAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vRnVuY3Rpb25VbmRlZmluZWQucGhwVgIAAOtPo2lWAgAATjDHHaQBAAAAAAAAaQAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvRXhjZXB0aW9uL0V2YWxlZEFub255bW91c0NsYXNzQ2Fubm90QmVMb2NhdGVkLnBocDMBAADrT6NpMwEAAMc2x66kAQAAAAAAAFYAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQWJzdHJhY3RTb3VyY2VMb2NhdG9yLnBocD0JAADrT6NpPQkAANsqmJGkAQAAAAAAAFUAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ2xvc3VyZVNvdXJjZUxvY2F0b3IucGhwfRcAAOtPo2l9FwAATSTA0KQBAAAAAAAAVwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9BZ2dyZWdhdGVTb3VyY2VMb2NhdG9yLnBocBoGAADrT6NpGgYAAJBIr5akAQAAAAAAAGwAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvRmFjdG9yeS9NYWtlTG9jYXRvckZvckNvbXBvc2VySnNvbi5waHABFgAA60+jaQEWAACRpUwrpAEAAAAAAABwAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL0ZhY3RvcnkvRXhjZXB0aW9uL01pc3NpbmdJbnN0YWxsZWRKc29uLnBocPsBAADrT6Np+wEAAJ+FIm+kAQAAAAAAAHMAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvRmFjdG9yeS9FeGNlcHRpb24vSW52YWxpZFByb2plY3REaXJlY3RvcnkucGhw5QEAAOtPo2nlAQAAqiE0bKQBAAAAAAAAbwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9Db21wb3Nlci9GYWN0b3J5L0V4Y2VwdGlvbi9NaXNzaW5nQ29tcG9zZXJKc29uLnBocPABAADrT6Np8AEAAM1UX8qkAQAAAAAAAGUAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvRmFjdG9yeS9FeGNlcHRpb24vRXhjZXB0aW9uLnBocK0AAADrT6NprQAAAMla4FykAQAAAAAAAG0AAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvRmFjdG9yeS9FeGNlcHRpb24vRmFpbGVkVG9QYXJzZUpzb24ucGhw1gEAAOtPo2nWAQAAJ8I8gKQBAAAAAAAAfAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9Db21wb3Nlci9GYWN0b3J5L01ha2VMb2NhdG9yRm9yQ29tcG9zZXJKc29uQW5kSW5zdGFsbGVkSnNvbi5waHBvIAAA60+jaW8gAAA6n9vvpAEAAAAAAABtAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL0ZhY3RvcnkvTWFrZUxvY2F0b3JGb3JJbnN0YWxsZWRKc29uLnBocNEcAADrT6Np0RwAAOIbI0CkAQAAAAAAAFkAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvUHNyL1BzcjRNYXBwaW5nLnBocA4KAADrT6NpDgoAAM/1jo+kAQAAAAAAAGwAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvUHNyL0V4Y2VwdGlvbi9JbnZhbGlkUHJlZml4TWFwcGluZy5waHBzAwAA60+jaXMDAACR87ScpAEAAAAAAABhAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL1Bzci9FeGNlcHRpb24vRXhjZXB0aW9uLnBocKkAAADrT6NpqQAAANkUBeykAQAAAAAAAFkAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvUHNyL1BzcjBNYXBwaW5nLnBocEcHAADrT6NpRwcAAOon92WkAQAAAAAAAGIAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvUHNyL1BzckF1dG9sb2FkZXJNYXBwaW5nLnBocHYBAADrT6NpdgEAAKbJJ9akAQAAAAAAAF4AAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvUHNyQXV0b2xvYWRlckxvY2F0b3IucGhw2QkAAOtPo2nZCQAAWDQAbaQBAAAAAAAAVwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9NZW1vaXppbmdTb3VyY2VMb2NhdG9yLnBocNoKAADrT6Np2goAAF+G49ukAQAAAAAAAFgAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvRXZhbGVkQ29kZVNvdXJjZUxvY2F0b3IucGhw3wgAAOtPo2nfCAAAV9HndqQBAAAAAAAAVgAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9Db21wb3NlclNvdXJjZUxvY2F0b3IucGhw2wYAAOtPo2nbBgAAE+e20qQBAAAAAAAATgAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9Tb3VyY2VMb2NhdG9yLnBocCsEAADrT6NpKwQAAEPe/z2kAQAAAAAAAGIAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQW5vbnltb3VzQ2xhc3NPYmplY3RTb3VyY2VMb2NhdG9yLnBocEQUAADrT6NpRBQAAMkZTnekAQAAAAAAAFkAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvRGlyZWN0b3JpZXNTb3VyY2VMb2NhdG9yLnBocPgIAADrT6Np+AgAADhRdlmkAQAAAAAAAFkAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvUGhwSW50ZXJuYWxTb3VyY2VMb2NhdG9yLnBocDIMAADrT6NpMgwAANb8xeukAQAAAAAAAHAAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQXV0b2xvYWRTb3VyY2VMb2NhdG9yL0ZpbGVSZWFkVHJhcFN0cmVhbVdyYXBwZXIucGhwfhIAAOtPo2l+EgAAn8NKYKQBAAAAAAAAVgAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9BdXRvbG9hZFNvdXJjZUxvY2F0b3IucGhw6C4AAOtPo2noLgAAwKJ5U6QBAAAAAAAAVAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9TdHJpbmdTb3VyY2VMb2NhdG9yLnBocDEFAADrT6NpMQUAADw+pNmkAQAAAAAAAFoAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvRmlsZUl0ZXJhdG9yU291cmNlTG9jYXRvci5waHACDQAA60+jaQINAADKkXFXpAEAAAAAAABYAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL1NpbmdsZUZpbGVTb3VyY2VMb2NhdG9yLnBocFQGAADrT6NpVAYAAHpFe0ekAQAAAAAAAGAAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1NvdXJjZVN0dWJiZXIvQWdncmVnYXRlU291cmNlU3R1YmJlci5waHASCAAA60+jaRIIAAD1timLpAEAAAAAAABhAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Tb3VyY2VTdHViYmVyL1JlZmxlY3Rpb25Tb3VyY2VTdHViYmVyLnBocCh6AADrT6NpKHoAAFNhxTqkAQAAAAAAAG0AAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1NvdXJjZVN0dWJiZXIvRXhjZXB0aW9uL0NvdWxkTm90RmluZFBocFN0b3JtU3R1YnMucGhwMAEAAOtPo2kwAQAAped+iaQBAAAAAAAAZgAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvU291cmNlU3R1YmJlci9QaHBTdG9ybVN0dWJzL0NhY2hpbmdWaXNpdG9yLnBocHQeAADrT6NpdB4AAPzO95KkAQAAAAAAAFIAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1NvdXJjZVN0dWJiZXIvU3R1YkRhdGEucGhwiAMAAOtPo2mIAwAAyMYk1aQBAAAAAAAAVwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvU291cmNlU3R1YmJlci9Tb3VyY2VTdHViYmVyLnBocIEDAADrT6NpgQMAAP5/z62kAQAAAAAAAGQAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1NvdXJjZVN0dWJiZXIvUGhwU3Rvcm1TdHVic1NvdXJjZVN0dWJiZXIucGhwiHwAAOtPo2mIfAAAn/FHsqQBAAAAAAAAUQAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvTG9jYXRlZC9Mb2NhdGVkU291cmNlLnBocA0HAADrT6NpDQcAAFMDA86kAQAAAAAAAFkAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0xvY2F0ZWQvSW50ZXJuYWxMb2NhdGVkU291cmNlLnBocCADAADrT6NpIAMAANzhev2kAQAAAAAAAFcAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0xvY2F0ZWQvRXZhbGVkTG9jYXRlZFNvdXJjZS5waHA0AQAA60+jaTQBAAB7cgRqpAEAAAAAAABaAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Mb2NhdGVkL0Fub255bW91c0xvY2F0ZWRTb3VyY2UucGhwdAEAAOtPo2l0AQAABo1tIKQBAAAAAAAAVgAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvTG9jYXRlZC9BbGlhc0xvY2F0ZWRTb3VyY2UucGhwTwIAAOtPo2lPAgAAvoOio6QBAAAAAAAARwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvRmlsZUNoZWNrZXIucGhwvwIAAOtPo2m/AgAAKYCHTaQBAAAAAAAARwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL0lkZW50aWZpZXIvSWRlbnRpZmllclR5cGUucGhwmQUAAOtPo2mZBQAAg+Js3qQBAAAAAAAAWAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL0lkZW50aWZpZXIvRXhjZXB0aW9uL0ludmFsaWRJZGVudGlmaWVyTmFtZS5waHBlAQAA60+jaWUBAAAOiFpKpAEAAAAAAABDAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvSWRlbnRpZmllci9JZGVudGlmaWVyLnBocOgGAADrT6Np6AYAAHFiIaGkAQAAAAAAAEsAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9VdGlsL0V4Y2VwdGlvbi9Ob05vZGVQb3NpdGlvbi5waHC2AQAA60+jabYBAAAklonmpAEAAAAAAABQAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvVXRpbC9FeGNlcHRpb24vSW52YWxpZE5vZGVQb3NpdGlvbi5waHBWAQAA60+jaVYBAAA+VbXdpAEAAAAAAABIAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvVXRpbC9DbGFzc0V4aXN0ZW5jZUNoZWNrZXIucGhwewMAAOtPo2l7AwAAwafzSqQBAAAAAAAARwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1V0aWwvRmluZFJlZmxlY3Rpb25PbkxpbmUucGhw7xAAAOtPo2nvEAAAUDX4y6QBAAAAAAAAPQAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1V0aWwvRmlsZUhlbHBlci5waHBmCwAA60+jaWYLAABBdUwGpAEAAAAAAABGAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvVXRpbC9Db25zdGFudE5vZGVDaGVja2VyLnBocN8FAADrT6Np3wUAAN+4r0OkAQAAAAAAAEwAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9VdGlsL0NhbGN1bGF0ZVJlZmxlY3Rpb25Db2x1bW4ucGhw8gUAAOtPo2nyBQAANYdf/aQBAAAAAAAARAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1V0aWwvR2V0TGFzdERvY0NvbW1lbnQucGhwvwIAAOtPo2m/AgAAxBT+dKQBAAAAAAAAPgAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL0JldHRlclJlZmxlY3Rpb24ucGhwBhQAAOtPo2kGFAAASlNvM6QBAAAAAAAARwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblR5cGUucGhwVgsAAOtPo2lWCwAAPR2ZYaQBAAAAAAAAUAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkNsYXNzQ29uc3RhbnQucGhwsikAAOtPo2myKQAAYQB416QBAAAAAAAASwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkNvbnN0YW50LnBocMAnAADrT6NpwCcAALsSH+ykAQAAAAAAAFwAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0F0dHJpYnV0ZS9SZWZsZWN0aW9uQXR0cmlidXRlSGVscGVyLnBocDMMAADrT6NpMwwAAEuWHqOkAQAAAAAAAFoAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0V4Y2VwdGlvbi9NZXRob2RQcm90b3R5cGVOb3RGb3VuZC5waHCyAAAA60+jabIAAAAynjdWpAEAAAAAAABUAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vQ2lyY3VsYXJSZWZlcmVuY2UucGhwbQEAAOtPo2ltAQAAHxYPIqQBAAAAAAAAWwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL09iamVjdE5vdEluc3RhbmNlT2ZDbGFzcy5waHB4AQAA60+jaXgBAAAMvbV3pAEAAAAAAABXAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vRnVuY3Rpb25Eb2VzTm90RXhpc3QucGhwewEAAOtPo2l7AQAAvtdjiaQBAAAAAAAAUwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL05vT2JqZWN0UHJvdmlkZWQucGhwGwEAAOtPo2kbAQAAD+8vjKQBAAAAAAAAWgAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL0ludmFsaWREZWZhdWx0VmFsdWVUeXBlLnBocKwAAADrT6NprAAAAMN1ZEKkAQAAAAAAAE4AAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0V4Y2VwdGlvbi9Ob3RBbk9iamVjdC5waHCsAQAA60+jaawBAADugJwBpAEAAAAAAABfAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vSW52YWxpZEFycm93RnVuY3Rpb25Cb2R5Tm9kZS5waHAsAgAA60+jaSwCAACncErNpAEAAAAAAABWAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vQ29kZUxvY2F0aW9uTWlzc2luZy5waHAUAQAA60+jaRQBAADJx979pAEAAAAAAABWAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vSW52YWxpZENvbnN0YW50Tm9kZS5waHATAgAA60+jaRMCAAAN1Zf0pAEAAAAAAABWAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vUHJvcGVydHlJc05vdFN0YXRpYy5waHBbAQAA60+jaVsBAAB/odjppAEAAAAAAABUAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vQ2xhc3NEb2VzTm90RXhpc3QucGhwtQEAAOtPo2m1AQAAwJ1u46QBAAAAAAAAVwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL1Byb3BlcnR5RG9lc05vdEV4aXN0LnBocF0BAADrT6NpXQEAAC83aVukAQAAAAAAAEsAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0V4Y2VwdGlvbi9Ob1BhcmVudC5waHCZAAAA60+jaZkAAADi/f7fpAEAAAAAAABTAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uRnVuY3Rpb25BYnN0cmFjdC5waHBqPAAA60+jaWo8AADW70yUpAEAAAAAAABJAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uT2JqZWN0LnBocM42AADrT6NpzjYAAFBC52WkAQAAAAAAAEsAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25FbnVtQ2FzZS5waHCuFwAA60+jaa4XAAA9Ee4npAEAAAAAAABMAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uVW5pb25UeXBlLnBocN4LAADrT6Np3gsAALqWPHqkAQAAAAAAAEMAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb24ucGhwxQEAAOtPo2nFAQAAUnVL7KQBAAAAAAAATAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvbk5hbWVkVHlwZS5waHAuFAAA60+jaS4UAADhq1zapAEAAAAAAABMAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUGFyYW1ldGVyLnBocD9FAADrT6NpP0UAAK4JmUmkAQAAAAAAAEkAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25NZXRob2QucGhwvD0AAOtPo2m8PQAA0e48N6QBAAAAAAAASwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3BlcnR5LnBocCJLAADrT6NpIksAAPv/XZSkAQAAAAAAAEsAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25GdW5jdGlvbi5waHCoFwAA60+jaagXAAADpUPUpAEAAAAAAABMAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uQXR0cmlidXRlLnBocPgTAADrT6Np+BMAAA6AqMSkAQAAAAAAAE8AAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvblR5cGUucGhwkwwAAOtPo2mTDAAAUmMvRqQBAAAAAAAAWAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9SZWZsZWN0aW9uQ2xhc3NDb25zdGFudC5waHBoGwAA60+jaWgbAAAfzKwhpAEAAAAAAABZAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25FbnVtQmFja2VkQ2FzZS5waHDWEgAA60+jadYSAADnTQ1DpAEAAAAAAABZAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL0V4Y2VwdGlvbi9Ob3RJbXBsZW1lbnRlZC5waHCnAAAA60+jaacAAAAYSVJlpAEAAAAAAABRAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25PYmplY3QucGhwckcAAOtPo2lyRwAAq4hlm6QBAAAAAAAAVwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9SZWZsZWN0aW9uRW51bVVuaXRDYXNlLnBocN4QAADrT6Np3hAAADE/zH6kAQAAAAAAAFsAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbkF0dHJpYnV0ZUZhY3RvcnkucGhwNgMAAOtPo2k2AwAAzgSMBaQBAAAAAAAAVAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9SZWZsZWN0aW9uVW5pb25UeXBlLnBocBIGAADrT6NpEgYAAHyiG6ukAQAAAAAAAFQAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbk5hbWVkVHlwZS5waHCIBgAA60+jaYgGAACJoVNOpAEAAAAAAABUAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25QYXJhbWV0ZXIucGhwdCMAAOtPo2l0IwAA3y6TiKQBAAAAAAAAUQAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9SZWZsZWN0aW9uTWV0aG9kLnBocFYtAADrT6NpVi0AAFMLEDykAQAAAAAAAFMAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvblByb3BlcnR5LnBocCAcAADrT6NpIBwAAKiqpnWkAQAAAAAAAFMAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbkZ1bmN0aW9uLnBocFwiAADrT6NpXCIAANRNYZKkAQAAAAAAAFQAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbkF0dHJpYnV0ZS5waHB/BwAA60+jaX8HAADHQyy6pAEAAAAAAABQAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25DbGFzcy5waHAhVQAA60+jaSFVAACt/j5YpAEAAAAAAABYAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL0Zha2VSZWZsZWN0aW9uQXR0cmlidXRlLnBocOsFAADrT6Np6wUAAIYRcgukAQAAAAAAAFsAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbkludGVyc2VjdGlvblR5cGUucGhwMQYAAOtPo2kxBgAAiHt3gKQBAAAAAAAATwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9SZWZsZWN0aW9uRW51bS5waHBTSwAA60+jaVNLAAC52VeDpAEAAAAAAABUAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9Bbm5vdGF0aW9uL0Fubm90YXRpb25IZWxwZXIucGhwMgMAAOtPo2kyAwAAaY4Ky6QBAAAAAAAASAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkNsYXNzLnBocMzsAADrT6NpzOwAAIYKHVqkAQAAAAAAAFYAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N1cHBvcnQvQWxyZWFkeVZpc2l0ZWRDbGFzc2VzLnBocF0DAADrT6NpXQMAACUw0/qkAQAAAAAAAGEAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N0cmluZ0Nhc3QvUmVmbGVjdGlvbkF0dHJpYnV0ZVN0cmluZ0Nhc3QucGhwVwcAAOtPo2lXBwAAaKjNV6QBAAAAAAAAYAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vU3RyaW5nQ2FzdC9SZWZsZWN0aW9uRnVuY3Rpb25TdHJpbmdDYXN0LnBocBELAADrT6NpEQsAAEZbM/6kAQAAAAAAAGAAAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N0cmluZ0Nhc3QvUmVmbGVjdGlvbkNvbnN0YW50U3RyaW5nQ2FzdC5waHC0BwAA60+jabQHAABwrL+kpAEAAAAAAABcAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9TdHJpbmdDYXN0L1JlZmxlY3Rpb25UeXBlU3RyaW5nQ2FzdC5waHA6BwAA60+jaToHAABsMc+EpAEAAAAAAABhAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9TdHJpbmdDYXN0L1JlZmxlY3Rpb25QYXJhbWV0ZXJTdHJpbmdDYXN0LnBocGUHAADrT6NpZQcAAAkqxBOkAQAAAAAAAF4AAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N0cmluZ0Nhc3QvUmVmbGVjdGlvbk1ldGhvZFN0cmluZ0Nhc3QucGhweRIAAOtPo2l5EgAAHI7PK6QBAAAAAAAAYAAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vU3RyaW5nQ2FzdC9SZWZsZWN0aW9uUHJvcGVydHlTdHJpbmdDYXN0LnBocEoFAADrT6NpSgUAAK6DL5KkAQAAAAAAAF0AAAB2ZW5kb3Ivb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N0cmluZ0Nhc3QvUmVmbGVjdGlvbkNsYXNzU3RyaW5nQ2FzdC5waHAoIwAA60+jaSgjAADYVZyypAEAAAAAAABgAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9TdHJpbmdDYXN0L1JlZmxlY3Rpb25FbnVtQ2FzZVN0cmluZ0Nhc3QucGhwFAMAAOtPo2kUAwAAhzJe/6QBAAAAAAAAZQAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vU3RyaW5nQ2FzdC9SZWZsZWN0aW9uQ2xhc3NDb25zdGFudFN0cmluZ0Nhc3QucGhwigQAAOtPo2mKBAAAbafyNKQBAAAAAAAAUwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkludGVyc2VjdGlvblR5cGUucGhwgQoAAOtPo2mBCgAAtbL4o6QBAAAAAAAARwAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkVudW0ucGhwahAAAOtPo2lqEAAADB8yl6QBAAAAAAAAQQAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rvci9SZWZsZWN0b3IucGhwEwYAAOtPo2kTBgAAYpR5jqQBAAAAAAAASQAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rvci9GdW5jdGlvblJlZmxlY3Rvci5waHD9CAAA60+jaf0IAABhvTjSpAEAAAAAAABUAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdG9yL0V4Y2VwdGlvbi9JZGVudGlmaWVyTm90Rm91bmQucGhwTAMAAOtPo2lMAwAA3qQnGqQBAAAAAAAASQAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rvci9Db25zdGFudFJlZmxlY3Rvci5waHD9CAAA60+jaf0IAACwrSRFpAEAAAAAAABIAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdG9yL0RlZmF1bHRSZWZsZWN0b3IucGhwBRAAAOtPo2kFEAAA+uz9maQBAAAAAAAARgAAAHZlbmRvci9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rvci9DbGFzc1JlZmxlY3Rvci5waHDhCAAA60+jaeEIAAC9GgNFpAEAAAAAAAAzAAAAdmVuZG9yL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9yZW5vdmF0ZS5qc29ukAAAAOtPo2mQAAAAtZ17jKQBAAAAAAAAHwAAAHZlbmRvci9yZWFjdC9ldmVudC1sb29wL0xJQ0VOU0V1BAAA60+jaXUEAAACnnuwpAEAAAAAAAAtAAAAdmVuZG9yL3JlYWN0L2V2ZW50LWxvb3Avc3JjL0xvb3BJbnRlcmZhY2UucGhwh0sAAOtPo2mHSwAAMZnf16QBAAAAAAAALAAAAHZlbmRvci9yZWFjdC9ldmVudC1sb29wL3NyYy9FeHRFdmVudExvb3AucGhwyB8AAOtPo2nIHwAABJ27yKQBAAAAAAAAKQAAAHZlbmRvci9yZWFjdC9ldmVudC1sb29wL3NyYy9FeHRVdkxvb3AucGhwvSMAAOtPo2m9IwAAk4/RoaQBAAAAAAAALAAAAHZlbmRvci9yZWFjdC9ldmVudC1sb29wL3NyYy9FeHRMaWJldkxvb3AucGhw/RYAAOtPo2n9FgAAdE4Gb6QBAAAAAAAALwAAAHZlbmRvci9yZWFjdC9ldmVudC1sb29wL3NyYy9FeHRMaWJldmVudExvb3AucGhwpiEAAOtPo2mmIQAA1JIGHqQBAAAAAAAALgAAAHZlbmRvci9yZWFjdC9ldmVudC1sb29wL3NyYy9UaW1lckludGVyZmFjZS5waHD9AQAA60+jaf0BAACU16jspAEAAAAAAAA0AAAAdmVuZG9yL3JlYWN0L2V2ZW50LWxvb3Avc3JjL1RpY2svRnV0dXJlVGlja1F1ZXVlLnBocLsEAADrT6NpuwQAAOLTE06kAQAAAAAAACkAAAB2ZW5kb3IvcmVhY3QvZXZlbnQtbG9vcC9zcmMvRXh0RXZMb29wLnBocIsXAADrT6NpixcAANMYcIekAQAAAAAAACsAAAB2ZW5kb3IvcmVhY3QvZXZlbnQtbG9vcC9zcmMvVGltZXIvVGltZXIucGhwNgUAAOtPo2k2BQAAdals0aQBAAAAAAAALAAAAHZlbmRvci9yZWFjdC9ldmVudC1sb29wL3NyYy9UaW1lci9UaW1lcnMucGhwuQwAAOtPo2m5DAAAGELrO6QBAAAAAAAAJAAAAHZlbmRvci9yZWFjdC9ldmVudC1sb29wL3NyYy9Mb29wLnBocDkdAADrT6NpOR0AAHLDRL+kAQAAAAAAACcAAAB2ZW5kb3IvcmVhY3QvZXZlbnQtbG9vcC9zcmMvRmFjdG9yeS5waHA8BwAA60+jaTwHAABLYxEhpAEAAAAAAAAwAAAAdmVuZG9yL3JlYWN0L2V2ZW50LWxvb3Avc3JjL1N0cmVhbVNlbGVjdExvb3AucGhwGC8AAOtPo2kYLwAA+SqrJ6QBAAAAAAAALgAAAHZlbmRvci9yZWFjdC9ldmVudC1sb29wL3NyYy9TaWduYWxzSGFuZGxlci5waHArBQAA60+jaSsFAABWGck7pAEAAAAAAAAiAAAAdmVuZG9yL3JlYWN0L2NoaWxkLXByb2Nlc3MvTElDRU5TRXUEAADrT6NpdQQAAAKee7CkAQAAAAAAACoAAAB2ZW5kb3IvcmVhY3QvY2hpbGQtcHJvY2Vzcy9zcmMvUHJvY2Vzcy5waHDSOgAA60+jadI6AAARd8cvpAEAAAAAAAAbAAAAdmVuZG9yL3JlYWN0L3NvY2tldC9MSUNFTlNFdQQAAOtPo2l1BAAAAp57sKQBAAAAAAAALgAAAHZlbmRvci9yZWFjdC9zb2NrZXQvc3JjL0Nvbm5lY3RvckludGVyZmFjZS5waHA9CAAA60+jaT0IAACJXG0TpAEAAAAAAAAoAAAAdmVuZG9yL3JlYWN0L3NvY2tldC9zcmMvVGNwQ29ubmVjdG9yLnBocBYbAADrT6NpFhsAAAEoakikAQAAAAAAACQAAAB2ZW5kb3IvcmVhY3Qvc29ja2V0L3NyYy9GZFNlcnZlci5waHAXHQAA60+jaRcdAAAjrfuDpAEAAAAAAAAtAAAAdmVuZG9yL3JlYWN0L3NvY2tldC9zcmMvRml4ZWRVcmlDb25uZWN0b3IucGhwPAQAAOtPo2k8BAAAGQFIEKQBAAAAAAAALAAAAHZlbmRvci9yZWFjdC9zb2NrZXQvc3JjL1N0cmVhbUVuY3J5cHRpb24ucGhw0xQAAOtPo2nTFAAAzIIKQqQBAAAAAAAAIgAAAHZlbmRvci9yZWFjdC9zb2NrZXQvc3JjL1NlcnZlci5waHDaDgAA60+jadoOAACkc4lNpAEAAAAAAAArAAAAdmVuZG9yL3JlYWN0L3NvY2tldC9zcmMvU2VydmVySW50ZXJmYWNlLnBocLcUAADrT6NptxQAABOJ0K+kAQAAAAAAADoAAAB2ZW5kb3IvcmVhY3Qvc29ja2V0L3NyYy9IYXBweUV5ZUJhbGxzQ29ubmVjdGlvbkJ1aWxkZXIucGhwiy0AAOtPo2mLLQAA4lQz0aQBAAAAAAAALwAAAHZlbmRvci9yZWFjdC9zb2NrZXQvc3JjL0Nvbm5lY3Rpb25JbnRlcmZhY2UucGhwbREAAOtPo2ltEQAA9Brz/qQBAAAAAAAAKQAAAHZlbmRvci9yZWFjdC9zb2NrZXQvc3JjL1VuaXhDb25uZWN0b3IucGhwrgYAAOtPo2muBgAA7Ge5GKQBAAAAAAAAJQAAAHZlbmRvci9yZWFjdC9zb2NrZXQvc3JjL1RjcFNlcnZlci5waHDIIgAA60+jacgiAADyEwdMpAEAAAAAAAAoAAAAdmVuZG9yL3JlYWN0L3NvY2tldC9zcmMvRG5zQ29ubmVjdG9yLnBocKsRAADrT6NpqxEAACz4lzukAQAAAAAAADIAAAB2ZW5kb3IvcmVhY3Qvc29ja2V0L3NyYy9IYXBweUV5ZUJhbGxzQ29ubmVjdG9yLnBocJULAADrT6NplQsAAFrvR32kAQAAAAAAACYAAAB2ZW5kb3IvcmVhY3Qvc29ja2V0L3NyYy9Db25uZWN0aW9uLnBocPQXAADrT6Np9BcAAA+SHlekAQAAAAAAACgAAAB2ZW5kb3IvcmVhY3Qvc29ja2V0L3NyYy9Tb2NrZXRTZXJ2ZXIucGhwxCIAAOtPo2nEIgAAeD4b3KQBAAAAAAAAKAAAAHZlbmRvci9yZWFjdC9zb2NrZXQvc3JjL1NlY3VyZVNlcnZlci5waHAbHgAA60+jaRseAAAKt+9xpAEAAAAAAAAmAAAAdmVuZG9yL3JlYWN0L3NvY2tldC9zcmMvVW5peFNlcnZlci5waHDKEwAA60+jacoTAAB8ChE/pAEAAAAAAAAqAAAAdmVuZG9yL3JlYWN0L3NvY2tldC9zcmMvTGltaXRpbmdTZXJ2ZXIucGhw+RkAAOtPo2n5GQAAi8pjEqQBAAAAAAAAKwAAAHZlbmRvci9yZWFjdC9zb2NrZXQvc3JjL1NlY3VyZUNvbm5lY3Rvci5waHBKEwAA60+jaUoTAACDxNPCpAEAAAAAAAAlAAAAdmVuZG9yL3JlYWN0L3NvY2tldC9zcmMvQ29ubmVjdG9yLnBocNwdAADrT6Np3B0AADjiSEmkAQAAAAAAACwAAAB2ZW5kb3IvcmVhY3Qvc29ja2V0L3NyYy9UaW1lb3V0Q29ubmVjdG9yLnBocGELAADrT6NpYQsAAMIdu2OkAQAAAAAAABwAAAB2ZW5kb3IvcmVhY3QvcHJvbWlzZS9MSUNFTlNFZwQAAOtPo2lnBAAAnxpG4qQBAAAAAAAAOQAAAHZlbmRvci9yZWFjdC9wcm9taXNlL3NyYy9FeGNlcHRpb24vQ29tcG9zaXRlRXhjZXB0aW9uLnBocHQDAADrT6NpdAMAADQGVjakAQAAAAAAADYAAAB2ZW5kb3IvcmVhY3QvcHJvbWlzZS9zcmMvRXhjZXB0aW9uL0xlbmd0aEV4Y2VwdGlvbi5waHBxAAAA60+jaXEAAADNgEpmpAEAAAAAAAAuAAAAdmVuZG9yL3JlYWN0L3Byb21pc2Uvc3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocJgAAADrT6NpmAAAAEB9w3mkAQAAAAAAACUAAAB2ZW5kb3IvcmVhY3QvcHJvbWlzZS9zcmMvRGVmZXJyZWQucGhwJQQAAOtPo2klBAAAW1cz06QBAAAAAAAAJAAAAHZlbmRvci9yZWFjdC9wcm9taXNlL3NyYy9Qcm9taXNlLnBocCMoAADrT6NpIygAAJjVVQekAQAAAAAAACYAAAB2ZW5kb3IvcmVhY3QvcHJvbWlzZS9zcmMvZnVuY3Rpb25zLnBocKssAADrT6NpqywAAJLZw+2kAQAAAAAAADcAAAB2ZW5kb3IvcmVhY3QvcHJvbWlzZS9zcmMvSW50ZXJuYWwvQ2FuY2VsbGF0aW9uUXVldWUucGhwJwUAAOtPo2knBQAAuSrABKQBAAAAAAAANQAAAHZlbmRvci9yZWFjdC9wcm9taXNlL3NyYy9JbnRlcm5hbC9SZWplY3RlZFByb21pc2UucGhwzw0AAOtPo2nPDQAAsWYUW6QBAAAAAAAANgAAAHZlbmRvci9yZWFjdC9wcm9taXNlL3NyYy9JbnRlcm5hbC9GdWxmaWxsZWRQcm9taXNlLnBocFQJAADrT6NpVAkAAH8xB3+kAQAAAAAAAC0AAAB2ZW5kb3IvcmVhY3QvcHJvbWlzZS9zcmMvUHJvbWlzZUludGVyZmFjZS5waHBtFgAA60+jaW0WAACMOuHhpAEAAAAAAAAaAAAAdmVuZG9yL3JlYWN0L2NhY2hlL0xJQ0VOU0V1BAAA60+jaXUEAAACnnuwpAEAAAAAAAApAAAAdmVuZG9yL3JlYWN0L2NhY2hlL3NyYy9DYWNoZUludGVyZmFjZS5waHAwIAAA60+jaTAgAABDsMmYpAEAAAAAAAAlAAAAdmVuZG9yL3JlYWN0L2NhY2hlL3NyYy9BcnJheUNhY2hlLnBocF8WAADrT6NpXxYAAOMQGoykAQAAAAAAABoAAAB2ZW5kb3IvcmVhY3QvYXN5bmMvTElDRU5TRV4EAADrT6NpXgQAABh5VB2kAQAAAAAAACwAAAB2ZW5kb3IvcmVhY3QvYXN5bmMvc3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocMkAAADrT6NpyQAAAPKilZmkAQAAAAAAACQAAAB2ZW5kb3IvcmVhY3QvYXN5bmMvc3JjL2Z1bmN0aW9ucy5waHCQQgAA60+jaZBCAACdIafIpAEAAAAAAAAZAAAAdmVuZG9yL3JlYWN0L2h0dHAvTElDRU5TRXUEAADrT6NpdQQAAAKee7CkAQAAAAAAAB0AAAB2ZW5kb3IvcmVhY3QvaHR0cC9QQVRDSEVTLnR4dK4AAADrT6NprgAAACE9uHmkAQAAAAAAACwAAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvSW8vRW1wdHlCb2R5U3RyZWFtLnBocEgLAADrT6NpSAsAAOoHIIikAQAAAAAAACwAAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvSW8vQWJzdHJhY3RSZXF1ZXN0LnBocPwQAADrT6Np/BAAADMxJ2ykAQAAAAAAACQAAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvSW8vSW5pVXRpbC5waHBzBAAA60+jaXMEAAD/bEbqpAEAAAAAAAArAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL0lvL0h0dHBCb2R5U3RyZWFtLnBocLIPAADrT6Npsg8AAB8rYpWkAQAAAAAAADAAAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvSW8vQ2xpZW50UmVxdWVzdFN0cmVhbS5waHAFKQAA60+jaQUpAADKco08pAEAAAAAAAAsAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL0lvL1N0cmVhbWluZ1NlcnZlci5waHBRSAAA60+jaVFIAABI3ALhpAEAAAAAAAApAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL0lvL1VwbG9hZGVkRmlsZS5waHD5CQAA60+jafkJAAB6ounNpAEAAAAAAAArAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL0lvL0NodW5rZWREZWNvZGVyLnBocC8VAADrT6NpLxUAAPCPmvWkAQAAAAAAACIAAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvSW8vQ2xvY2sucGhw/QUAAOtPo2n9BQAAGRkInKQBAAAAAAAALAAAAHZlbmRvci9yZWFjdC9odHRwL3NyYy9Jby9NdWx0aXBhcnRQYXJzZXIucGhwKCQAAOtPo2koJAAAIblD4qQBAAAAAAAALwAAAHZlbmRvci9yZWFjdC9odHRwL3NyYy9Jby9SZWFkYWJsZUJvZHlTdHJlYW0ucGhwFg0AAOtPo2kWDQAAO2R3z6QBAAAAAAAAKAAAAHZlbmRvci9yZWFjdC9odHRwL3NyYy9Jby9UcmFuc2FjdGlvbi5waHD/LAAA60+jaf8sAADcOlxypAEAAAAAAAArAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL0lvL0NodW5rZWRFbmNvZGVyLnBocFEIAADrT6NpUQgAAIQssuWkAQAAAAAAADIAAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvSW8vQ2xvc2VQcm90ZWN0aW9uU3RyZWFtLnBocDYLAADrT6NpNgsAAJ/rjzikAQAAAAAAADAAAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvSW8vUmVxdWVzdEhlYWRlclBhcnNlci5waHABGgAA60+jaQEaAADmUCqqpAEAAAAAAAAsAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL0lvL0Fic3RyYWN0TWVzc2FnZS5waHCxEgAA60+jabESAAA4+UIqpAEAAAAAAAAwAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL0lvL0xlbmd0aExpbWl0ZWRTdHJlYW0ucGhwHwsAAOtPo2kfCwAAky+zHaQBAAAAAAAALgAAAHZlbmRvci9yZWFjdC9odHRwL3NyYy9Jby9QYXVzZUJ1ZmZlclN0cmVhbS5waHAYEQAA60+jaRgRAABnhHRtpAEAAAAAAAA0AAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL0lvL0NsaWVudENvbm5lY3Rpb25NYW5hZ2VyLnBocOoRAADrT6Np6hEAAH7HB4qkAQAAAAAAACMAAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvSW8vU2VuZGVyLnBocIMZAADrT6NpgxkAAEYBvPGkAQAAAAAAAC8AAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvSW8vQ2xpZW50UmVxdWVzdFN0YXRlLnBocC0BAADrT6NpLQEAAATND/2kAQAAAAAAACkAAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvSW8vQnVmZmVyZWRCb2R5LnBocLUPAADrT6NptQ8AAMPuvr6kAQAAAAAAAC0AAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvSW8vTWlkZGxld2FyZVJ1bm5lci5waHCZBgAA60+jaZkGAAALF2b/pAEAAAAAAAAgAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL1NlcnZlci5waHBGAgAA60+jaUYCAAAw3hQYpAEAAAAAAAAkAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL0h0dHBTZXJ2ZXIucGhwjjwAAOtPo2mOPAAAULCoXqQBAAAAAAAAKQAAAHZlbmRvci9yZWFjdC9odHRwL3NyYy9NZXNzYWdlL1JlcXVlc3QucGhwIgkAAOtPo2kiCQAAuqh7tKQBAAAAAAAAJQAAAHZlbmRvci9yZWFjdC9odHRwL3NyYy9NZXNzYWdlL1VyaS5waHBMJQAA60+jaUwlAAB4Z6YRpAEAAAAAAAAqAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL01lc3NhZ2UvUmVzcG9uc2UucGhwfTkAAOtPo2l9OQAAm1Uf16QBAAAAAAAALwAAAHZlbmRvci9yZWFjdC9odHRwL3NyYy9NZXNzYWdlL1NlcnZlclJlcXVlc3QucGhwBi8AAOtPo2kGLwAAT2dX5qQBAAAAAAAAMwAAAHZlbmRvci9yZWFjdC9odHRwL3NyYy9NZXNzYWdlL1Jlc3BvbnNlRXhjZXB0aW9uLnBocPsEAADrT6Np+wQAAGNV0hKkAQAAAAAAACEAAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvQnJvd3Nlci5waHBOfAAA60+jaU58AABKyFZ2pAEAAAAAAAAnAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL0NsaWVudC9DbGllbnQucGhwnQIAAOtPo2mdAgAALjTkE6QBAAAAAAAAQAAAAHZlbmRvci9yZWFjdC9odHRwL3NyYy9NaWRkbGV3YXJlL1JlcXVlc3RCb2R5UGFyc2VyTWlkZGxld2FyZS5waHBeBQAA60+jaV4FAACn3cWApAEAAAAAAABAAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL01pZGRsZXdhcmUvUmVxdWVzdEJvZHlCdWZmZXJNaWRkbGV3YXJlLnBocDMRAADrT6NpMxEAAHAHY2CkAQAAAAAAAD8AAAB2ZW5kb3IvcmVhY3QvaHR0cC9zcmMvTWlkZGxld2FyZS9TdHJlYW1pbmdSZXF1ZXN0TWlkZGxld2FyZS5waHAvCgAA60+jaS8KAAAga1fNpAEAAAAAAABGAAAAdmVuZG9yL3JlYWN0L2h0dHAvc3JjL01pZGRsZXdhcmUvTGltaXRDb25jdXJyZW50UmVxdWVzdHNNaWRkbGV3YXJlLnBocN8dAADrT6Np3x0AAAxcJ5WkAQAAAAAAABsAAAB2ZW5kb3IvcmVhY3Qvc3RyZWFtL0xJQ0VOU0V1BAAA60+jaXUEAAACnnuwpAEAAAAAAAAxAAAAdmVuZG9yL3JlYWN0L3N0cmVhbS9zcmMvRHVwbGV4U3RyZWFtSW50ZXJmYWNlLnBocNAGAADrT6Np0AYAAPoTjNukAQAAAAAAADIAAAB2ZW5kb3IvcmVhY3Qvc3RyZWFtL3NyYy9Xcml0YWJsZVJlc291cmNlU3RyZWFtLnBocBAWAADrT6NpEBYAAFrUIX2kAQAAAAAAADIAAAB2ZW5kb3IvcmVhY3Qvc3RyZWFtL3NyYy9SZWFkYWJsZVJlc291cmNlU3RyZWFtLnBocPAXAADrT6Np8BcAAHomHwqkAQAAAAAAADMAAAB2ZW5kb3IvcmVhY3Qvc3RyZWFtL3NyYy9SZWFkYWJsZVN0cmVhbUludGVyZmFjZS5waHC9NwAA60+jab03AACQO16ZpAEAAAAAAAApAAAAdmVuZG9yL3JlYWN0L3N0cmVhbS9zcmMvVGhyb3VnaFN0cmVhbS5waHCYFAAA60+jaZgUAADqgmHupAEAAAAAAAAzAAAAdmVuZG9yL3JlYWN0L3N0cmVhbS9zcmMvV3JpdGFibGVTdHJlYW1JbnRlcmZhY2UucGhwujkAAOtPo2m6OQAAF1P7eaQBAAAAAAAAKwAAAHZlbmRvci9yZWFjdC9zdHJlYW0vc3JjL0NvbXBvc2l0ZVN0cmVhbS5waHBoBwAA60+jaWgHAACAOt48pAEAAAAAAAAwAAAAdmVuZG9yL3JlYWN0L3N0cmVhbS9zcmMvRHVwbGV4UmVzb3VyY2VTdHJlYW0ucGhwrR0AAOtPo2mtHQAApcix5qQBAAAAAAAAIAAAAHZlbmRvci9yZWFjdC9zdHJlYW0vc3JjL1V0aWwucGhw7QgAAOtPo2ntCAAAP2J+D6QBAAAAAAAAGAAAAHZlbmRvci9yZWFjdC9kbnMvTElDRU5TRXUEAADrT6NpdQQAAAKee7CkAQAAAAAAACUAAAB2ZW5kb3IvcmVhY3QvZG5zL3NyYy9Nb2RlbC9SZWNvcmQucGhw6hkAAOtPo2nqGQAAI8TvYKQBAAAAAAAAJgAAAHZlbmRvci9yZWFjdC9kbnMvc3JjL01vZGVsL01lc3NhZ2UucGhw1xYAAOtPo2nXFgAA1Ot9iaQBAAAAAAAAKwAAAHZlbmRvci9yZWFjdC9kbnMvc3JjL0JhZFNlcnZlckV4Y2VwdGlvbi5waHBmAAAA60+jaWYAAAA/lXu+pAEAAAAAAAApAAAAdmVuZG9yL3JlYWN0L2Rucy9zcmMvQ29uZmlnL0hvc3RzRmlsZS5waHDJEgAA60+jackSAADOj9dUpAEAAAAAAAAmAAAAdmVuZG9yL3JlYWN0L2Rucy9zcmMvQ29uZmlnL0NvbmZpZy5waHBLFQAA60+jaUsVAACiEQRnpAEAAAAAAAAuAAAAdmVuZG9yL3JlYWN0L2Rucy9zcmMvUHJvdG9jb2wvQmluYXJ5RHVtcGVyLnBocFEWAADrT6NpURYAACa/HRikAQAAAAAAACgAAAB2ZW5kb3IvcmVhY3QvZG5zL3NyYy9Qcm90b2NvbC9QYXJzZXIucGhwDiwAAOtPo2kOLAAA0yDptaQBAAAAAAAAMAAAAHZlbmRvci9yZWFjdC9kbnMvc3JjL1JlY29yZE5vdEZvdW5kRXhjZXB0aW9uLnBocGsAAADrT6NpawAAANCdoNGkAQAAAAAAACoAAAB2ZW5kb3IvcmVhY3QvZG5zL3NyYy9SZXNvbHZlci9SZXNvbHZlci5waHAQEgAA60+jaRASAAAxY7sJpAEAAAAAAAApAAAAdmVuZG9yL3JlYWN0L2Rucy9zcmMvUmVzb2x2ZXIvRmFjdG9yeS5waHDpIAAA60+jaekgAADlay/spAEAAAAAAAAzAAAAdmVuZG9yL3JlYWN0L2Rucy9zcmMvUmVzb2x2ZXIvUmVzb2x2ZXJJbnRlcmZhY2UucGhwhQ8AAOtPo2mFDwAAc2DNqqQBAAAAAAAALgAAAHZlbmRvci9yZWFjdC9kbnMvc3JjL1F1ZXJ5L0NhY2hpbmdFeGVjdXRvci5waHBVCgAA60+jaVUKAAAhNpzCpAEAAAAAAAA5AAAAdmVuZG9yL3JlYWN0L2Rucy9zcmMvUXVlcnkvU2VsZWN0aXZlVHJhbnNwb3J0RXhlY3V0b3IucGhwCgwAAOtPo2kKDAAA4Uv10KQBAAAAAAAAJAAAAHZlbmRvci9yZWFjdC9kbnMvc3JjL1F1ZXJ5L1F1ZXJ5LnBocAYIAADrT6NpBggAAP5qthukAQAAAAAAADAAAAB2ZW5kb3IvcmVhY3QvZG5zL3NyYy9RdWVyeS9Ib3N0c0ZpbGVFeGVjdXRvci5waHD7CwAA60+jafsLAAC9t3tJpAEAAAAAAAAwAAAAdmVuZG9yL3JlYWN0L2Rucy9zcmMvUXVlcnkvRXhlY3V0b3JJbnRlcmZhY2UucGhwyAUAAOtPo2nIBQAAKXSglaQBAAAAAAAALwAAAHZlbmRvci9yZWFjdC9kbnMvc3JjL1F1ZXJ5L0ZhbGxiYWNrRXhlY3V0b3IucGhw2AYAAOtPo2nYBgAAZ2lBfaQBAAAAAAAALwAAAHZlbmRvci9yZWFjdC9kbnMvc3JjL1F1ZXJ5L1RpbWVvdXRFeGNlcHRpb24ucGhwagAAAOtPo2lqAAAA1ILSa6QBAAAAAAAAKwAAAHZlbmRvci9yZWFjdC9kbnMvc3JjL1F1ZXJ5L0Nvb3BFeGVjdXRvci5waHCFDQAA60+jaYUNAABAaE4dpAEAAAAAAAAuAAAAdmVuZG9yL3JlYWN0L2Rucy9zcmMvUXVlcnkvVGltZW91dEV4ZWN1dG9yLnBocAcLAADrT6NpBwsAALgNMpCkAQAAAAAAADQAAAB2ZW5kb3IvcmVhY3QvZG5zL3NyYy9RdWVyeS9DYW5jZWxsYXRpb25FeGNlcHRpb24ucGhwdgAAAOtPo2l2AAAA5TGKPKQBAAAAAAAALAAAAHZlbmRvci9yZWFjdC9kbnMvc3JjL1F1ZXJ5L1JldHJ5RXhlY3V0b3IucGhwSwoAAOtPo2lLCgAATUr/e6QBAAAAAAAAMwAAAHZlbmRvci9yZWFjdC9kbnMvc3JjL1F1ZXJ5L1VkcFRyYW5zcG9ydEV4ZWN1dG9yLnBocGghAADrT6NpaCEAAAoBXkqkAQAAAAAAADMAAAB2ZW5kb3IvcmVhY3QvZG5zL3NyYy9RdWVyeS9UY3BUcmFuc3BvcnRFeGVjdXRvci5waHCgNgAA60+jaaA2AADI8fuGpAEAAAAAAAAcAAAAdmVuZG9yL3Bzci9jb250YWluZXIvTElDRU5TRXkEAADrT6NpeQQAAMpPk3CkAQAAAAAAAC8AAAB2ZW5kb3IvcHNyL2NvbnRhaW5lci9zcmMvQ29udGFpbmVySW50ZXJmYWNlLnBocCIEAADrT6NpIgQAADULC9KkAQAAAAAAADgAAAB2ZW5kb3IvcHNyL2NvbnRhaW5lci9zcmMvQ29udGFpbmVyRXhjZXB0aW9uSW50ZXJmYWNlLnBocMoAAADrT6NpygAAAFw5RrSkAQAAAAAAADcAAAB2ZW5kb3IvcHNyL2NvbnRhaW5lci9zcmMvTm90Rm91bmRFeGNlcHRpb25JbnRlcmZhY2UucGhwsQAAAOtPo2mxAAAAWaT6GqQBAAAAAAAAHwAAAHZlbmRvci9wc3IvaHR0cC1tZXNzYWdlL0xJQ0VOU0U9BAAA60+jaT0EAADaFufqpAEAAAAAAAAwAAAAdmVuZG9yL3Bzci9odHRwLW1lc3NhZ2Uvc3JjL01lc3NhZ2VJbnRlcmZhY2UucGhwUhsAAOtPo2lSGwAAPpFadKQBAAAAAAAAMAAAAHZlbmRvci9wc3IvaHR0cC1tZXNzYWdlL3NyYy9SZXF1ZXN0SW50ZXJmYWNlLnBocAsTAADrT6NpCxMAAP1Xw6qkAQAAAAAAADEAAAB2ZW5kb3IvcHNyL2h0dHAtbWVzc2FnZS9zcmMvUmVzcG9uc2VJbnRlcmZhY2UucGhwVQoAAOtPo2lVCgAAKIsFqKQBAAAAAAAALAAAAHZlbmRvci9wc3IvaHR0cC1tZXNzYWdlL3NyYy9VcmlJbnRlcmZhY2UucGhwlTEAAOtPo2mVMQAAGXpLz6QBAAAAAAAALwAAAHZlbmRvci9wc3IvaHR0cC1tZXNzYWdlL3NyYy9TdHJlYW1JbnRlcmZhY2UucGhwyhIAAOtPo2nKEgAA47boxqQBAAAAAAAANQAAAHZlbmRvci9wc3IvaHR0cC1tZXNzYWdlL3NyYy9VcGxvYWRlZEZpbGVJbnRlcmZhY2UucGhwcBIAAOtPo2lwEgAAeIALTaQBAAAAAAAANgAAAHZlbmRvci9wc3IvaHR0cC1tZXNzYWdlL3NyYy9TZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlLnBocKgnAADrT6NpqCcAADwIQCakAQAAAAAAABYAAAB2ZW5kb3IvcHNyL2xvZy9MSUNFTlNFPQQAAOtPo2k9BAAAcLGOT6QBAAAAAAAAIgAAAHZlbmRvci9wc3IvbG9nL3NyYy9Mb2dnZXJUcmFpdC5waHBMDgAA60+jaUwOAAClrSmLpAEAAAAAAAAfAAAAdmVuZG9yL3Bzci9sb2cvc3JjL0xvZ0xldmVsLnBocEwBAADrT6NpTAEAAPdT0sikAQAAAAAAACcAAAB2ZW5kb3IvcHNyL2xvZy9zcmMvTG9nZ2VyQXdhcmVUcmFpdC5waHC8AQAA60+jabwBAAC+DrWTpAEAAAAAAAAmAAAAdmVuZG9yL3Bzci9sb2cvc3JjL0xvZ2dlckludGVyZmFjZS5waHAWDQAA60+jaRYNAAAYtwQBpAEAAAAAAAArAAAAdmVuZG9yL3Bzci9sb2cvc3JjL0xvZ2dlckF3YXJlSW50ZXJmYWNlLnBocDwBAADrT6NpPAEAACZfANikAQAAAAAAAC8AAAB2ZW5kb3IvcHNyL2xvZy9zcmMvSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uLnBocHMAAADrT6NpcwAAAAEovnCkAQAAAAAAACEAAAB2ZW5kb3IvcHNyL2xvZy9zcmMvTnVsbExvZ2dlci5waHDvAgAA60+jae8CAABPTbyIpAEAAAAAAAAlAAAAdmVuZG9yL3Bzci9sb2cvc3JjL0Fic3RyYWN0TG9nZ2VyLnBocLEBAADrT6NpsQEAAHMHGPukAQAAAAAAABcAAABzcmMvRmlsZS9GaWxlRmluZGVyLnBocIAHAADrT6NpgAcAAONIubOkAQAAAAAAACAAAABzcmMvRmlsZS9GaWxlRXhjbHVkZXJGYWN0b3J5LnBocEsIAADrT6NpSwgAAPSJElukAQAAAAAAABgAAABzcmMvRmlsZS9GaWxlTW9uaXRvci5waHBTEgAA60+jaVMSAAA+bSCMpAEAAAAAAAAzAAAAc3JjL0ZpbGUvU3lzdGVtQWdub3N0aWNTaW1wbGVSZWxhdGl2ZVBhdGhIZWxwZXIucGhwvwIAAOtPo2m/AgAAiozczaQBAAAAAAAAFwAAAHNyYy9GaWxlL0ZpbGVXcml0ZXIucGhw/QEAAOtPo2n9AQAAUpGLuqQBAAAAAAAAHwAAAHNyYy9GaWxlL1JlbGF0aXZlUGF0aEhlbHBlci5waHCnAAAA60+jaacAAACz/itspAEAAAAAAAAXAAAAc3JjL0ZpbGUvRmlsZUhlbHBlci5waHCeCwAA60+jaZ4LAAC7nMqgpAEAAAAAAAAXAAAAc3JjL0ZpbGUvRmlsZVJlYWRlci5waHAYAwAA60+jaRgDAABCV7TNpAEAAAAAAAAeAAAAc3JjL0ZpbGUvRmlsZU1vbml0b3JSZXN1bHQucGhwogQAAOtPo2miBAAAFugVLqQBAAAAAAAAIwAAAHNyYy9GaWxlL051bGxSZWxhdGl2ZVBhdGhIZWxwZXIucGhw8gAAAOtPo2nyAAAAetwSE6QBAAAAAAAAIgAAAHNyYy9GaWxlL1BhdGhOb3RGb3VuZEV4Y2VwdGlvbi5waHC6AQAA60+jaboBAABPSjWVpAEAAAAAAAAmAAAAc3JjL0ZpbGUvQ291bGROb3RSZWFkRmlsZUV4Y2VwdGlvbi5waHCNAQAA60+jaY0BAAAUeDFnpAEAAAAAAAAuAAAAc3JjL0ZpbGUvUGFyZW50RGlyZWN0b3J5UmVsYXRpdmVQYXRoSGVscGVyLnBocNgHAADrT6Np2AcAAMtCaLGkAQAAAAAAACMAAABzcmMvRmlsZS9GaWxlRXhjbHVkZXJSYXdGYWN0b3J5LnBocOgAAADrT6Np6AAAACkMZq6kAQAAAAAAAB0AAABzcmMvRmlsZS9GaWxlRmluZGVyUmVzdWx0LnBocFoCAADrT6NpWgIAAH8g73ukAQAAAAAAACQAAABzcmMvRmlsZS9GdXp6eVJlbGF0aXZlUGF0aEhlbHBlci5waHBQDgAA60+jaVAOAACX8JyNpAEAAAAAAAAlAAAAc3JjL0ZpbGUvU2ltcGxlUmVsYXRpdmVQYXRoSGVscGVyLnBocC4DAADrT6NpLgMAAKZjEXGkAQAAAAAAACcAAABzcmMvRmlsZS9Db3VsZE5vdFdyaXRlRmlsZUV4Y2VwdGlvbi5waHCrAQAA60+jaasBAAC6HOj0pAEAAAAAAAAZAAAAc3JjL0ZpbGUvRmlsZUV4Y2x1ZGVyLnBocF4PAADrT6NpXg8AANg6VUikAQAAAAAAACsAAABzcmMvQ2xhc3Nlcy9Gb3JiaWRkZW5DbGFzc05hbWVFeHRlbnNpb24ucGhwTAMAAOtPo2lMAwAAff/QtqQBAAAAAAAAJAAAAHNyYy9QaHAvUGhwVmVyc2lvbkZhY3RvcnlGYWN0b3J5LnBocM0GAADrT6NpzQYAAPG4X+6kAQAAAAAAABYAAABzcmMvUGhwL1BocFZlcnNpb24ucGhwKyIAAOtPo2krIgAAUFwBpqQBAAAAAAAAHQAAAHNyYy9QaHAvUGhwVmVyc2lvbkZhY3RvcnkucGhw7QQAAOtPo2ntBAAAXgmu0KQBAAAAAAAAHQAAAHNyYy9BbmFseXNlZENvZGVFeGNlcHRpb24ucGhwsAAAAOtPo2mwAAAAaXFFXqQBAAAAAAAAGQAAAHNyYy9hdXRvbG9hZEZ1bmN0aW9ucy5waHDNAAAA60+jac0AAAAUwBrRpAEAAAAAAAAWAAAAc3JjL1R5cGUvTmV2ZXJUeXBlLnBocIE2AADrT6NpgTYAALfEJrykAQAAAAAAADIAAABzcmMvVHlwZS9GdW5jdGlvblBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uLnBocIcDAADrT6NphwMAAF8Yu7mkAQAAAAAAABkAAABzcmMvVHlwZS9DYWxsYWJsZVR5cGUucGhwZ1MAAOtPo2lnUwAAqCoLn6QBAAAAAAAAFgAAAHNyYy9UeXBlL1R5cGVVdGlscy5waHB+MgAA60+jaX4yAAAmAywApAEAAAAAAAAYAAAAc3JjL1R5cGUvSW50ZWdlclR5cGUucGhw7RMAAOtPo2ntEwAAAgerE6QBAAAAAAAAJgAAAHNyYy9UeXBlL1R5cGVBbGlhc1Jlc29sdmVyUHJvdmlkZXIucGhwsAAAAOtPo2mwAAAA+pwhbqQBAAAAAAAAHAAAAHNyYy9UeXBlL1VuaW9uVHlwZUhlbHBlci5waHB+EgAA60+jaX4SAAC8Im/tpAEAAAAAAAAdAAAAc3JjL1R5cGUvSW50ZWdlclJhbmdlVHlwZS5waHBjXAAA60+jaWNcAADrWZBdpAEAAAAAAAAtAAAAc3JjL1R5cGUvRHluYW1pY01ldGhvZFJldHVyblR5cGVFeHRlbnNpb24ucGhwngMAAOtPo2meAwAABUPhJKQBAAAAAAAAHwAAAHNyYy9UeXBlL0NvbnN0YW50U2NhbGFyVHlwZS5waHDkAAAA60+jaeQAAAApWRnwpAEAAAAAAAAgAAAAc3JjL1R5cGUvSXNTdXBlclR5cGVPZlJlc3VsdC5waHBWDwAA60+jaVYPAAAYwzBcpAEAAAAAAAAfAAAAc3JjL1R5cGUvTGF0ZVJlc29sdmFibGVUeXBlLnBocMYAAADrT6NpxgAAAN4AMZCkAQAAAAAAACMAAABzcmMvVHlwZS9PYmplY3RXaXRob3V0Q2xhc3NUeXBlLnBocKYaAADrT6NpphoAALNYmkCkAQAAAAAAADMAAABzcmMvVHlwZS9QaHAvRGF0ZVRpbWVEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHA7BwAA60+jaTsHAAAwxOwwpAEAAAAAAAA0AAAAc3JjL1R5cGUvUGhwL0RhdGVUaW1lU3ViTWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uLnBocA0FAADrT6NpDQUAAO0dudWkAQAAAAAAAD4AAABzcmMvVHlwZS9QaHAvU2ltcGxlWE1MRWxlbWVudENvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uLnBocHcHAADrT6NpdwcAAHT9WsukAQAAAAAAADoAAABzcmMvVHlwZS9QaHAvSXNDYWxsYWJsZUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhw5AkAAOtPo2nkCQAAe2Dk1qQBAAAAAAAANwAAAHNyYy9UeXBlL1BocC9EYXRlSW50ZXJ2YWxEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDEBwAA60+jacQHAABxTRs+pAEAAAAAAAA+AAAAc3JjL1R5cGUvUGhwL0FycmF5S2V5RXhpc3RzRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHBmDAAA60+jaWYMAACzgpmtpAEAAAAAAAA3AAAAc3JjL1R5cGUvUGhwL0luQXJyYXlGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocJYVAADrT6NplhUAAP0lKnqkAQAAAAAAADIAAABzcmMvVHlwZS9QaHAvU3RybGVuRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocIgMAADrT6NpiAwAAFNdDx+kAQAAAAAAAD4AAABzcmMvVHlwZS9QaHAvRnVuY3Rpb25FeGlzdHNGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocEEHAADrT6NpQQcAANEJzgqkAQAAAAAAADQAAABzcmMvVHlwZS9QaHAvQXJyYXlNYXBGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwbRoAAOtPo2ltGgAAdmHyrqQBAAAAAAAAOAAAAHNyYy9UeXBlL1BocC9PcGVuU3NsRW5jcnlwdFBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24ucGhwDQgAAOtPo2kNCAAAnlXK4aQBAAAAAAAAHwAAAHNyYy9UeXBlL1BocC9Db25zdGFudEhlbHBlci5waHBaBAAA60+jaVoEAAB0/TnzpAEAAAAAAAAyAAAAc3JjL1R5cGUvUGhwL0hydGltZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDGBgAA60+jacYGAAD9EBj1pAEAAAAAAAA3AAAAc3JjL1R5cGUvUGhwL0lzQXJyYXlGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocPcGAADrT6Np9wYAAJMk0rCkAQAAAAAAADsAAABzcmMvVHlwZS9QaHAvUGF0aGluZm9GdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocBENAADrT6NpEQ0AAFX69JOkAQAAAAAAAD8AAABzcmMvVHlwZS9QaHAvQmFja2VkRW51bUZyb21NZXRob2REeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHB6CwAA60+jaXoLAACmhrQJpAEAAAAAAAA6AAAAc3JjL1R5cGUvUGhwL0N0eXBlRGlnaXRGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocMUKAADrT6NpxQoAAKmJVx2kAQAAAAAAADcAAABzcmMvVHlwZS9QaHAvRGVmaW5lZENvbnN0YW50VHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwlgcAAOtPo2mWBwAA07CKB6QBAAAAAAAAPwAAAHNyYy9UeXBlL1BocC9CYXNlNjREZWNvZGVEeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocNoGAADrT6Np2gYAAB9nUuakAQAAAAAAADYAAABzcmMvVHlwZS9QaHAvRGVmaW5lQ29uc3RhbnRUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHCDBgAA60+jaYMGAACCXpTjpAEAAAAAAAAtAAAAc3JjL1R5cGUvUGhwL1Rocm93YWJsZVJldHVyblR5cGVFeHRlbnNpb24ucGhw8AgAAOtPo2nwCAAAc6Gr7qQBAAAAAAAAOQAAAHNyYy9UeXBlL1BocC9EYXRlUGVyaW9kQ29uc3RydWN0b3JSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCQJAADrT6NpJAkAAI9tRtykAQAAAAAAADoAAABzcmMvVHlwZS9QaHAvU3ByaW50ZkZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhw8zAAAOtPo2nzMAAAq6GvQaQBAAAAAAAAMgAAAHNyYy9UeXBlL1BocC9TdHJUb2tGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwggUAAOtPo2mCBQAAHeQicqQBAAAAAAAAMwAAAHNyYy9UeXBlL1BocC9HZXR0eXBlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocEYLAADrT6NpRgsAADHLxZakAQAAAAAAADUAAABzcmMvVHlwZS9QaHAvQXJyYXlSYW5kRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCEIAADrT6NpIQgAAPSsu2CkAQAAAAAAADUAAABzcmMvVHlwZS9QaHAvTWljcm90aW1lRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocPEFAADrT6Np8QUAAL+7n8KkAQAAAAAAADQAAABzcmMvVHlwZS9QaHAvTWJTdHJsZW5GdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwlhcAAOtPo2mWFwAAqV5Z3KQBAAAAAAAAOQAAAHNyYy9UeXBlL1BocC9Tc2NhbmZGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocGcKAADrT6NpZwoAAG7/c+2kAQAAAAAAADMAAABzcmMvVHlwZS9QaHAvQXJyYXlLZXlEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHC2BAAA60+jabYEAAAqMaI9pAEAAAAAAABAAAAAc3JjL1R5cGUvUGhwL0FycmF5UG9pbnRlckZ1bmN0aW9uc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocOEFAADrT6Np4QUAAHXaQxekAQAAAAAAAEEAAABzcmMvVHlwZS9QaHAvU3RySW5jcmVtZW50RGVjcmVtZW50RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocNgOAADrT6Np2A4AAJL2KlqkAQAAAAAAADEAAABzcmMvVHlwZS9QaHAvQ291bnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwwQQAAOtPo2nBBAAAai5t+aQBAAAAAAAAJwAAAHNyYy9UeXBlL1BocC9Kc29uVGhyb3dUeXBlRXh0ZW5zaW9uLnBocE4HAADrT6NpTgcAAEQrwDKkAQAAAAAAADAAAABzcmMvVHlwZS9QaHAvSXNBRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0hlbHBlci5waHAcCQAA60+jaRwJAAAyzrbipAEAAAAAAAA+AAAAc3JjL1R5cGUvUGhwL0N1cmxHZXRpbmZvRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDRHAAA60+jadEcAADxeNQhpAEAAAAAAAA+AAAAc3JjL1R5cGUvUGhwL0FycmF5Q2hhbmdlS2V5Q2FzZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDrFgAA60+jaesWAAB5LRNspAEAAAAAAABBAAAAc3JjL1R5cGUvUGhwL1ZlcnNpb25Db21wYXJlRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHCECwAA60+jaYQLAAD/nAoLpAEAAAAAAAAxAAAAc3JjL1R5cGUvUGhwL1N1YnN0ckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocG8SAADrT6NpbxIAAMlmgdqkAQAAAAAAADMAAABzcmMvVHlwZS9QaHAvSXNBRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHBICgAA60+jaUgKAAAazoNlpAEAAAAAAAApAAAAc3JjL1R5cGUvUGhwL0ludGRpdlRocm93VHlwZUV4dGVuc2lvbi5waHBnBgAA60+jaWcGAABDrwe8pAEAAAAAAAA7AAAAc3JjL1R5cGUvUGhwL1JlcGxhY2VGdW5jdGlvbnNEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHB+GwAA60+jaX4bAAACB2tOpAEAAAAAAAAzAAAAc3JjL1R5cGUvUGhwL1ByZWdNYXRjaFBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24ucGhwaAcAAOtPo2loBwAASA2yrqQBAAAAAAAAOAAAAHNyYy9UeXBlL1BocC9BcnJheVJldmVyc2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhw0QUAAOtPo2nRBQAAmcYiy6QBAAAAAAAALwAAAHNyYy9UeXBlL1BocC9NYkZ1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb24ucGhwHgsAAOtPo2keCwAAYLEQLKQBAAAAAAAAOwAAAHNyYy9UeXBlL1BocC9DbGFzc0ltcGxlbWVudHNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwewgAAOtPo2l7CAAAx2Mld6QBAAAAAAAANgAAAHNyYy9UeXBlL1BocC9CY01hdGhTdHJpbmdPck51bGxSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocGooAADrT6NpaigAAFdZPFmkAQAAAAAAADQAAABzcmMvVHlwZS9QaHAvRGF0ZUZvcm1hdE1ldGhvZFJldHVyblR5cGVFeHRlbnNpb24ucGhwJgUAAOtPo2kmBQAAAIU506QBAAAAAAAAMgAAAHNyYy9UeXBlL1BocC9NaW5NYXhGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwCx0AAOtPo2kLHQAAd8C7bKQBAAAAAAAAQQAAAHNyYy9UeXBlL1BocC9HZXRQYXJlbnRDbGFzc0R5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwtQwAAOtPo2m1DAAAyyNoxaQBAAAAAAAAQAAAAHNyYy9UeXBlL1BocC9SZWZsZWN0aW9uUHJvcGVydHlDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbi5waHDyCQAA60+jafIJAACrfwj/pAEAAAAAAAA0AAAAc3JjL1R5cGUvUGhwL01ldGhvZEV4aXN0c1R5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocMoIAADrT6NpyggAAMyT1zmkAQAAAAAAADsAAABzcmMvVHlwZS9QaHAvUGFyc2VVcmxGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocIseAADrT6Npix4AAPKKzomkAQAAAAAAADEAAABzcmMvVHlwZS9QaHAvTHRyaW1GdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwWwUAAOtPo2lbBQAASUyKyaQBAAAAAAAANQAAAHNyYy9UeXBlL1BocC9Ec01hcER5bmFtaWNNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24ucGhwnQMAAOtPo2mdAwAApQlmU6QBAAAAAAAAOAAAAHNyYy9UeXBlL1BocC9BcnJheVJlcGxhY2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwahEAAOtPo2lqEQAA/eJicKQBAAAAAAAAOwAAAHNyYy9UeXBlL1BocC9Kc29uVGhyb3dPbkVycm9yRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwuhEAAOtPo2m6EQAAEi2L26QBAAAAAAAANAAAAHNyYy9UeXBlL1BocC9QcmVnU3BsaXREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHBzBwAA60+jaXMHAADxFJLupAEAAAAAAAA/AAAAc3JjL1R5cGUvUGhwL1NpbXBsZVhNTEVsZW1lbnRYcGF0aE1ldGhvZFJldHVyblR5cGVFeHRlbnNpb24ucGhwkAYAAOtPo2mQBgAAWT8v/aQBAAAAAAAANwAAAHNyYy9UeXBlL1BocC9BcnJheUtleUxhc3REeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDJBAAA60+jackEAADkP3n9pAEAAAAAAABCAAAAc3JjL1R5cGUvUGhwL1R5cGVTcGVjaWZ5aW5nRnVuY3Rpb25zRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwLwsAAOtPo2kvCwAA4qmP9qQBAAAAAAAAOQAAAHNyYy9UeXBlL1BocC9HZXRDYWxsZWRDbGFzc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocLQDAADrT6NptAMAAH+puiqkAQAAAAAAAEAAAABzcmMvVHlwZS9QaHAvTWJTdWJzdGl0dXRlQ2hhcmFjdGVyRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwXBMAAOtPo2lcEwAACROSKaQBAAAAAAAAPgAAAHNyYy9UeXBlL1BocC9BcnJheVZhbHVlc0Z1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwQAUAAOtPo2lABQAARYEiP6QBAAAAAAAAOQAAAHNyYy9UeXBlL1BocC9BcnJheUZpbGxLZXlzRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocEYFAADrT6NpRgUAAEOrbAqkAQAAAAAAADYAAABzcmMvVHlwZS9QaHAvRmlsdGVySW5wdXREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHCbBQAA60+jaZsFAABeKOzIpAEAAAAAAAAwAAAAc3JjL1R5cGUvUGhwL0RhdGVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwmwQAAOtPo2mbBAAA6Y1E1KQBAAAAAAAAPgAAAHNyYy9UeXBlL1BocC9DbG9zdXJlRnJvbUNhbGxhYmxlRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwfgcAAOtPo2l+BwAAe3Mkr6QBAAAAAAAALwAAAHNyYy9UeXBlL1BocC9TdGF0RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwbggAAOtPo2luCAAA2qRQRKQBAAAAAAAAMQAAAHNyYy9UeXBlL1BocC9Sb3VuZEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDuCgAA60+jae4KAACRTWN3pAEAAAAAAAA3AAAAc3JjL1R5cGUvUGhwL0FycmF5U3BsaWNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocKgDAADrT6NpqAMAAOUTG26kAQAAAAAAADcAAABzcmMvVHlwZS9QaHAvQXJyYXlGaWx0ZXJGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwEAUAAOtPo2kQBQAAb/N2o6QBAAAAAAAAOgAAAHNyYy9UeXBlL1BocC9Jc0l0ZXJhYmxlRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAuBgAA60+jaS4GAABSnDO3pAEAAAAAAAA5AAAAc3JjL1R5cGUvUGhwL0ZpbHRlclZhckFycmF5RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhw6SAAAOtPo2npIAAAR3av46QBAAAAAAAAOwAAAHNyYy9UeXBlL1BocC9DbGFzc0V4aXN0c0Z1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwqwgAAOtPo2mrCAAAF8oJaqQBAAAAAAAANAAAAHNyYy9UeXBlL1BocC9TdHJTcGxpdEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDvEgAA60+jae8SAAAQKq2vpAEAAAAAAAA4AAAAc3JjL1R5cGUvUGhwL0dldERlYnVnVHlwZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDCDgAA60+jacIOAADPTP+DpAEAAAAAAAA3AAAAc3JjL1R5cGUvUGhwL0FycmF5Q3VycmVudER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocPYEAADrT6Np9gQAADeiqLmkAQAAAAAAAD8AAABzcmMvVHlwZS9QaHAvU2ltcGxlWE1MRWxlbWVudEFzWE1MTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbi5waHA7BAAA60+jaTsEAAADT1gtpAEAAAAAAAA+AAAAc3JjL1R5cGUvUGhwL1JlZmxlY3Rpb25NZXRob2RDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbi5waHB9CwAA60+jaX0LAADSKhHOpAEAAAAAAAA7AAAAc3JjL1R5cGUvUGhwL0FycmF5U3VtRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHC2CAAA60+jabYIAADVVk6upAEAAAAAAAA9AAAAc3JjL1R5cGUvUGhwL0FycmF5SW50ZXJzZWN0S2V5RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocKQHAADrT6NppAcAABiKbUKkAQAAAAAAADcAAABzcmMvVHlwZS9QaHAvRGF0ZVRpbWVNb2RpZnlNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24ucGhwiwgAAOtPo2mLCAAAo8UxLaQBAAAAAAAANgAAAHNyYy9UeXBlL1BocC9BcnJheUNodW5rRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocGkHAADrT6NpaQcAAHmX1AKkAQAAAAAAADAAAABzcmMvVHlwZS9QaHAvRHNNYXBEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHA6BgAA60+jaToGAADMooSnpAEAAAAAAAA1AAAAc3JjL1R5cGUvUGhwL0FycmF5RmlsbEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHApDQAA60+jaSkNAACnYtIHpAEAAAAAAAA6AAAAc3JjL1R5cGUvUGhwL0dldERlZmluZWRWYXJzRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocL0FAADrT6NpvQUAAAnge52kAQAAAAAAADEAAABzcmMvVHlwZS9QaHAvWE1MUmVhZGVyT3BlblJldHVyblR5cGVFeHRlbnNpb24ucGhwuQUAAOtPo2m5BQAA92gaBKQBAAAAAAAAOAAAAHNyYy9UeXBlL1BocC9QcmVnUmVwbGFjZUNhbGxiYWNrQ2xvc3VyZVR5cGVFeHRlbnNpb24ucGhwpQcAAOtPo2mlBwAA9vwK9aQBAAAAAAAANgAAAHNyYy9UeXBlL1BocC9Bc3NlcnRGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocN8EAADrT6Np3wQAACavZoakAQAAAAAAADIAAABzcmMvVHlwZS9QaHAvRGF0ZVRpbWVNb2RpZnlSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocDkKAADrT6NpOQoAAAPkd5ikAQAAAAAAADUAAABzcmMvVHlwZS9QaHAvU3RyUmVwZWF0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocMAOAADrT6NpwA4AAA/uL36kAQAAAAAAADgAAABzcmMvVHlwZS9QaHAvU3RydmFsRmFtaWx5RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocMUGAADrT6NpxQYAAInv0LCkAQAAAAAAADoAAABzcmMvVHlwZS9QaHAvRGF0ZVRpbWVab25lQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhw0AcAAOtPo2nQBwAAeucUWqQBAAAAAAAAPAAAAHNyYy9UeXBlL1BocC9Jc1N1YmNsYXNzT2ZGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocN8KAADrT6Np3woAAOLDKtmkAQAAAAAAADsAAABzcmMvVHlwZS9QaHAvQXJyYXlTZWFyY2hGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocEgGAADrT6NpSAYAAO7va9SkAQAAAAAAAD0AAABzcmMvVHlwZS9QaHAvQXJyYXlNZXJnZUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwnxEAAOtPo2mfEQAAbATr06QBAAAAAAAAOQAAAHNyYy9UeXBlL1BocC9EYXRlVGltZUNyZWF0ZUR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocC4GAADrT6NpLgYAALEoMVukAQAAAAAAADsAAABzcmMvVHlwZS9QaHAvTm9uRW1wdHlTdHJpbmdGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocBYGAADrT6NpFgYAAGNRS4KkAQAAAAAAAC8AAABzcmMvVHlwZS9QaHAvRmlsdGVyRnVuY3Rpb25SZXR1cm5UeXBlSGVscGVyLnBocDRCAADrT6NpNEIAAB0TPkKkAQAAAAAAADEAAABzcmMvVHlwZS9QaHAvSGFzaEZ1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb24ucGhwQBIAAOtPo2lAEgAAv88iRKQBAAAAAAAAJwAAAHNyYy9UeXBlL1BocC9SZWdleEFycmF5U2hhcGVNYXRjaGVyLnBocKpEAADrT6NpqkQAAJrqvRqkAQAAAAAAADsAAABzcmMvVHlwZS9QaHAvSXRlcmF0b3JUb0FycmF5RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocGEGAADrT6NpYQYAAG1VQsmkAQAAAAAAAEAAAABzcmMvVHlwZS9QaHAvUmVmbGVjdGlvbkZ1bmN0aW9uQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwagcAAOtPo2lqBwAAqYiDMqQBAAAAAAAAOAAAAHNyYy9UeXBlL1BocC9BcnJheUtleUZpcnN0RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwzAQAAOtPo2nMBAAAj3mQWqQBAAAAAAAANQAAAHNyYy9UeXBlL1BocC9TdHJ0b3RpbWVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwrwkAAOtPo2mvCQAAMZgpU6QBAAAAAAAAOgAAAHNyYy9UeXBlL1BocC9EaW9TdGF0RHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDZBAAA60+jadkEAACj8CDspAEAAAAAAAA5AAAAc3JjL1R5cGUvUGhwL0FyZ3VtZW50QmFzZWRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwAQkAAOtPo2kBCQAAt3gG/KQBAAAAAAAAKgAAAHNyYy9UeXBlL1BocC9JbmlHZXRSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocLEGAADrT6NpsQYAAJNX5U6kAQAAAAAAADYAAABzcmMvVHlwZS9QaHAvRGF0ZUZvcm1hdEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDNBAAA60+jac0EAADCpUNzpAEAAAAAAAA8AAAAc3JjL1R5cGUvUGhwL0FycmF5S2V5c0Z1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwOgUAAOtPo2k6BQAAMAAUfqQBAAAAAAAALQAAAHNyYy9UeXBlL1BocC9EYXRlRnVuY3Rpb25SZXR1cm5UeXBlSGVscGVyLnBocLYPAADrT6Nptg8AAN2gwl+kAQAAAAAAADcAAABzcmMvVHlwZS9QaHAvVHJpbUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhw8gUAAOtPo2nyBQAAiXbIGaQBAAAAAAAANwAAAHNyYy9UeXBlL1BocC9UcmlnZ2VyRXJyb3JEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDOBwAA60+jac4HAADicfW4pAEAAAAAAAA2AAAAc3JjL1R5cGUvUGhwL1Byb3BlcnR5RXhpc3RzVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwAQsAAOtPo2kBCwAAqC9tvKQBAAAAAAAANAAAAHNyYy9UeXBlL1BocC9BcnJheVBvcEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDGBAAA60+jacYEAACi9KzGpAEAAAAAAAA1AAAAc3JjL1R5cGUvUGhwL0NvdW50RnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHDiBQAA60+jaeIFAABix1GlpAEAAAAAAAA0AAAAc3JjL1R5cGUvUGhwL01iRnVuY3Rpb25zUmV0dXJuVHlwZUV4dGVuc2lvblRyYWl0LnBocO0GAADrT6Np7QYAAG8lIDmkAQAAAAAAADgAAABzcmMvVHlwZS9QaHAvQXJyYXlDb21iaW5lRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocF4RAADrT6NpXhEAALDsf8KkAQAAAAAAADEAAABzcmMvVHlwZS9QaHAvUmFuZ2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwNRkAAOtPo2k1GQAAjhoMsqQBAAAAAAAAMwAAAHNyYy9UeXBlL1BocC9Db21wYWN0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocHQKAADrT6NpdAoAAGLjgmqkAQAAAAAAADQAAABzcmMvVHlwZS9QaHAvQ29uc3RhbnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwFQYAAOtPo2kVBgAArpEc1KQBAAAAAAAAOAAAAHNyYy9UeXBlL1BocC9DbG9zdXJlQmluZFRvRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwoAMAAOtPo2mgAwAAruXC86QBAAAAAAAAMQAAAHNyYy9UeXBlL1BocC9QcmVnTWF0Y2hUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHA0CgAA60+jaTQKAADZCGlLpAEAAAAAAAA/AAAAc3JjL1R5cGUvUGhwL051bWJlckZvcm1hdEZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwGQYAAOtPo2kZBgAAsQp2UaQBAAAAAAAANwAAAHNyYy9UeXBlL1BocC9TZXRUeXBlRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHA7CwAA60+jaTsLAABHsh4GpAEAAAAAAAA6AAAAc3JjL1R5cGUvUGhwL0hpZ2hsaWdodFN0cmluZ0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocBkGAADrT6NpGQYAAJJrOKakAQAAAAAAADUAAABzcmMvVHlwZS9QaHAvQXJyYXlGaW5kRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocDMHAADrT6NpMwcAAPJT5e+kAQAAAAAAADIAAABzcmMvVHlwZS9QaHAvU3RyUGFkRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCkKAADrT6NpKQoAAOZhcBakAQAAAAAAADoAAABzcmMvVHlwZS9QaHAvRGF0ZUludGVydmFsQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhw9QcAAOtPo2n1BwAA4FA0N6QBAAAAAAAANQAAAHNyYy9UeXBlL1BocC9SYW5kb21JbnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhw5QkAAOtPo2nlCQAA37s0K6QBAAAAAAAAMgAAAHNyYy9UeXBlL1BocC9TdHJyZXZGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwDQkAAOtPo2kNCQAALaqYsaQBAAAAAAAANQAAAHNyYy9UeXBlL1BocC9BcnJheUZsaXBGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwCwUAAOtPo2kLBQAAVpsQUaQBAAAAAAAAQQAAAHNyYy9UeXBlL1BocC9TaW1wbGVYTUxFbGVtZW50Q2xhc3NQcm9wZXJ0eVJlZmxlY3Rpb25FeHRlbnNpb24ucGhwwgMAAOtPo2nCAwAAfz9Af6QBAAAAAAAAMgAAAHNyYy9UeXBlL1BocC9QYXJzZVN0clBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24ucGhw4wcAAOtPo2njBwAArRXHrKQBAAAAAAAANwAAAHNyYy9UeXBlL1BocC9BcnJheUNvbHVtbkZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHASHgAA60+jaRIeAABJW/HQpAEAAAAAAAA2AAAAc3JjL1R5cGUvUGhwL0FycmF5U2xpY2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhweQYAAOtPo2l5BgAAG4NYHKQBAAAAAAAAOAAAAHNyYy9UeXBlL1BocC9BcnJheUZpbmRLZXlGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwKwQAAOtPo2krBAAAKqeeIqQBAAAAAAAAPwAAAHNyYy9UeXBlL1BocC9TdHJXb3JkQ291bnRGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCQIAADrT6NpJAgAAI26fDSkAQAAAAAAADYAAABzcmMvVHlwZS9QaHAvRGF0ZVRpbWVDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbi5waHAYCAAA60+jaRgIAAB/sRkbpAEAAAAAAAA9AAAAc3JjL1R5cGUvUGhwL1JlZmxlY3Rpb25DbGFzc0NvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uLnBocCYFAADrT6NpJgUAAJM5nr6kAQAAAAAAADYAAABzcmMvVHlwZS9QaHAvQWJzRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDmAwAA60+jaeYDAADZ1UQQpAEAAAAAAAA0AAAAc3JjL1R5cGUvUGhwL0ZpbHRlclZhckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocOcFAADrT6Np5wUAADepgSGkAQAAAAAAAD0AAABzcmMvVHlwZS9QaHAvTWJDb252ZXJ0RW5jb2RpbmdGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhw4xIAAOtPo2njEgAAtWfhI6QBAAAAAAAANAAAAHNyYy9UeXBlL1BocC9TdHJDYXNlRnVuY3Rpb25zUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAsGAAA60+jaSwYAADID3/tpAEAAAAAAAA1AAAAc3JjL1R5cGUvUGhwL1N0ckNvbnRhaW5pbmdUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHCCDQAA60+jaYINAACDc4MqpAEAAAAAAABBAAAAc3JjL1R5cGUvUGhwL1JlZmxlY3Rpb25HZXRBdHRyaWJ1dGVzTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbi5waHCDBgAA60+jaYMGAAAXLXJKpAEAAAAAAABDAAAAc3JjL1R5cGUvUGhwL1JlZmxlY3Rpb25DbGFzc0lzU3ViY2xhc3NPZlR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocLkGAADrT6NpuQYAACyAktCkAQAAAAAAADYAAABzcmMvVHlwZS9QaHAvQXJyYXlTaGlmdEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDLBAAA60+jacsEAAAYNZ1spAEAAAAAAAAzAAAAc3JjL1R5cGUvUGhwL0dldENsYXNzRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJQwAAOtPo2klDAAAd8+hhaQBAAAAAAAAPwAAAHNyYy9UeXBlL1BocC9HZXR0aW1lb2ZkYXlEeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocEoHAADrT6NpSgcAABOAUj6kAQAAAAAAADQAAABzcmMvVHlwZS9QaHAvQXJyYXlOZXh0RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhw0QQAAOtPo2nRBAAAKgBFBKQBAAAAAAAAPgAAAHNyYy9UeXBlL1BocC9BcnJheVNlYXJjaEZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJggAAOtPo2kmCAAAf0/RDKQBAAAAAAAANgAAAHNyYy9UeXBlL1BocC9QcmVnRmlsdGVyRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocOMFAADrT6Np4wUAANTH63ykAQAAAAAAADMAAABzcmMvVHlwZS9QaHAvSW1wbG9kZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHDpFAAA60+jaekUAADQeYWvpAEAAAAAAAA3AAAAc3JjL1R5cGUvUGhwL0FycmF5UmVkdWNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocPQIAADrT6Np9AgAAJzCe3WkAQAAAAAAADoAAABzcmMvVHlwZS9QaHAvRXhwbG9kZUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwgAwAAOtPo2mADAAAZskq9qQBAAAAAAAANgAAAHNyYy9UeXBlL1BocC9DbG9zdXJlQmluZER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocMQDAADrT6NpxAMAAF2gih2kAQAAAAAAADQAAABzcmMvVHlwZS9QaHAvQXJyYXlGaWx0ZXJGdW5jdGlvblJldHVyblR5cGVIZWxwZXIucGhwATEAAOtPo2kBMQAAIQ3pS6QBAAAAAAAAKQAAAHNyYy9UeXBlL1BocC9Bc3NlcnRUaHJvd1R5cGVFeHRlbnNpb24ucGhwJAQAAOtPo2kkBAAATajUwKQBAAAAAAAALwAAAHNyYy9UeXBlL1BocC9Qb3dGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwewMAAOtPo2l7AwAA8YNf2qQBAAAAAAAAJwAAAHNyYy9UeXBlL05vbmV4aXN0ZW50UGFyZW50Q2xhc3NUeXBlLnBocOMUAADrT6Np4xQAAI8OeuSkAQAAAAAAADMAAABzcmMvVHlwZS9EeW5hbWljU3RhdGljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbi5waHC4AwAA60+jabgDAACO4EPRpAEAAAAAAAAeAAAAc3JjL1R5cGUvVHlwZUFsaWFzUmVzb2x2ZXIucGhwNAEAAOtPo2k0AQAA0JuK5KQBAAAAAAAALwAAAHNyYy9UeXBlL0R5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwfgMAAOtPo2l+AwAA/6R//aQBAAAAAAAAHAAAAHNyYy9UeXBlL0NsYXNzU3RyaW5nVHlwZS5waHBNCwAA60+jaU0LAACVte73pAEAAAAAAAAgAAAAc3JjL1R5cGUvQmVuZXZvbGVudFVuaW9uVHlwZS5waHAYFQAA60+jaRgVAABErGZypAEAAAAAAAAqAAAAc3JjL1R5cGUvTGF6eVR5cGVBbGlhc1Jlc29sdmVyUHJvdmlkZXIucGhwGgIAAOtPo2kaAgAAY9BruKQBAAAAAAAAJAAAAHNyYy9UeXBlL0VudW0vRW51bUNhc2VPYmplY3RUeXBlLnBocIEYAADrT6NpgRgAAAqI0E2kAQAAAAAAABoAAABzcmMvVHlwZS9OZXdPYmplY3RUeXBlLnBocDYKAADrT6NpNgoAAJH55QmkAQAAAAAAABsAAABzcmMvVHlwZS9SZWN1cnNpb25HdWFyZC5waHCcAgAA60+jaZwCAAB9jYtPpAEAAAAAAAAVAAAAc3JjL1R5cGUvTnVsbFR5cGUucGhwbykAAOtPo2lvKQAA4CzZQKQBAAAAAAAALAAAAHNyYy9UeXBlL01ldGhvZFBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24ucGhwiAMAAOtPo2mIAwAAE8YgpaQBAAAAAAAAHwAAAHNyYy9UeXBlL0NhbGxhYmxlVHlwZUhlbHBlci5waHCKEQAA60+jaYoRAAAiVPDKpAEAAAAAAAAkAAAAc3JjL1R5cGUvVXNlZnVsVHlwZUFsaWFzUmVzb2x2ZXIucGhw1BUAAOtPo2nUFQAACILQv6QBAAAAAAAAHwAAAHNyYy9UeXBlL0V4cG9uZW50aWF0ZUhlbHBlci5waHAcEAAA60+jaRwQAADp7IVNpAEAAAAAAAAXAAAAc3JjL1R5cGUvVHlwZVJlc3VsdC5waHDkAQAA60+jaeQBAACJ8RcopAEAAAAAAAAoAAAAc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRTdHJpbmdUeXBlLnBocJVLAADrT6NplUsAAC8NLemkAQAAAAAAACcAAABzcmMvVHlwZS9Db25zdGFudC9Db25zdGFudEZsb2F0VHlwZS5waHC6CwAA60+jaboLAABCpp2fpAEAAAAAAAAwAAAAc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRBcnJheVR5cGVBbmRNZXRob2QucGhw7QUAAOtPo2ntBQAAB/cumaQBAAAAAAAAJwAAAHNyYy9UeXBlL0NvbnN0YW50L0NvbnN0YW50QXJyYXlUeXBlLnBocHDnAADrT6NpcOcAAPmYf0GkAQAAAAAAAC4AAABzcmMvVHlwZS9Db25zdGFudC9Db25zdGFudEFycmF5VHlwZUJ1aWxkZXIucGhw5TAAAOtPo2nlMAAAuY5LjaQBAAAAAAAAMgAAAHNyYy9UeXBlL0NvbnN0YW50L0NvbnN0YW50U2NhbGFyVG9Cb29sZWFuVHJhaXQucGhwFgEAAOtPo2kWAQAAJraa56QBAAAAAAAAKQAAAHNyYy9UeXBlL0NvbnN0YW50L0NvbnN0YW50SW50ZWdlclR5cGUucGhwAw0AAOtPo2kDDQAAapvn6qQBAAAAAAAAKwAAAHNyYy9UeXBlL0NvbnN0YW50L092ZXJzaXplZEFycmF5QnVpbGRlci5waHC7DgAA60+jabsOAAB2aqonpAEAAAAAAAApAAAAc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRCb29sZWFuVHlwZS5waHD3DQAA60+jafcNAADO5wgXpAEAAAAAAAAVAAAAc3JjL1R5cGUvVGhpc1R5cGUucGhwPwwAAOtPo2k/DAAAd+H9LaQBAAAAAAAAGwAAAHNyYy9UeXBlL1ZlcmJvc2l0eUxldmVsLnBocHUaAADrT6NpdRoAANL4U7ekAQAAAAAAABkAAABzcmMvVHlwZS9Db25zdGFudFR5cGUucGhwfAAAAOtPo2l8AAAAqeQ+R6QBAAAAAAAALgAAAHNyYy9UeXBlL0Z1bmN0aW9uUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbi5waHCNAwAA60+jaY0DAADIJCXCpAEAAAAAAAAoAAAAc3JjL1R5cGUvR2VuZXJpY1R5cGVWYXJpYWJsZVJlc29sdmVyLnBocPMFAADrT6Np8wUAAAEAMD+kAQAAAAAAACwAAABzcmMvVHlwZS9EeW5hbWljTWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uLnBocGcDAADrT6NpZwMAALnerV6kAQAAAAAAABcAAABzcmMvVHlwZS9TdHJpbmdUeXBlLnBocEkhAADrT6NpSSEAAEcNtlykAQAAAAAAABoAAABzcmMvVHlwZS9BY2NlcHRzUmVzdWx0LnBocM8MAADrT6NpzwwAAHh8vnekAQAAAAAAACwAAABzcmMvVHlwZS9GdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocAEEAADrT6NpAQQAAGdczFCkAQAAAAAAACoAAABzcmMvVHlwZS9NZXRob2RUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnBAAA60+jaScEAABUXDBlpAEAAAAAAAAsAAAAc3JjL1R5cGUvRXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvbi5waHBJAgAA60+jaUkCAABDOK0WpAEAAAAAAAAdAAAAc3JjL1R5cGUvT2Zmc2V0QWNjZXNzVHlwZS5waHC4DAAA60+jabgMAAA8Ao5/pAEAAAAAAAAaAAAAc3JjL1R5cGUvVHlwZVRyYXZlcnNlci5waHAqBwAA60+jaSoHAABwSaiWpAEAAAAAAAAcAAAAc3JjL1R5cGUvT2JqZWN0U2hhcGVUeXBlLnBocPtHAADrT6Np+0cAAOFh0PqkAQAAAAAAAB4AAABzcmMvVHlwZS9UeXBlV2l0aENsYXNzTmFtZS5waHBcAQAA60+jaVwBAAAnrdrcpAEAAAAAAAAqAAAAc3JjL1R5cGUvT2JqZWN0U2hhcGVQcm9wZXJ0eVJlZmxlY3Rpb24ucGhwzwYAAOtPo2nPBgAA1mO/B6QBAAAAAAAAGAAAAHNyYy9UeXBlL1ZhbHVlT2ZUeXBlLnBocIoLAADrT6NpigsAAEWgpr2kAQAAAAAAACAAAABzcmMvVHlwZS9HZW5lcmFsaXplUHJlY2lzaW9uLnBocB8FAADrT6NpHwUAADDNIj+kAQAAAAAAAB0AAABzcmMvVHlwZS9TdWJ0cmFjdGFibGVUeXBlLnBocK0BAADrT6NprQEAABS2rLOkAQAAAAAAADIAAABzcmMvVHlwZS9TdGF0aWNNZXRob2RQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uLnBocKIDAADrT6NpogMAAO24m++kAQAAAAAAABYAAABzcmMvVHlwZS9UeXBlQWxpYXMucGhwaQQAAOtPo2lpBAAAOQj4CqQBAAAAAAAAOAAAAHNyYy9UeXBlL1N0cmluZ0Fsd2F5c0FjY2VwdGluZ09iamVjdFdpdGhUb1N0cmluZ1R5cGUucGhwuQgAAOtPo2m5CAAAWagJOaQBAAAAAAAAMQAAAHNyYy9UeXBlL0NpcmN1bGFyVHlwZUFsaWFzRGVmaW5pdGlvbkV4Y2VwdGlvbi5waHCQAAAA60+jaZAAAADFse7DpAEAAAAAAAAnAAAAc3JjL1R5cGUvQ2lyY3VsYXJUeXBlQWxpYXNFcnJvclR5cGUucGhwiwAAAOtPo2mLAAAAW32yqaQBAAAAAAAANgAAAHNyYy9UeXBlL1N0YXRpY01ldGhvZFBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uLnBocJgDAADrT6NpmAMAAGPufUKkAQAAAAAAABYAAABzcmMvVHlwZS9LZXlPZlR5cGUucGhwJgoAAOtPo2kmCgAAc5Qb2aQBAAAAAAAAGwAAAHNyYy9UeXBlL1R5cGVoaW50SGVscGVyLnBocIIlAADrT6NpgiUAAJ1afZukAQAAAAAAADQAAABzcmMvVHlwZS9PcGVyYXRvclR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uUmVnaXN0cnkucGhwCgUAAOtPo2kKBQAAgvQ0v6QBAAAAAAAAFgAAAHNyYy9UeXBlL0FycmF5VHlwZS5waHDGYwAA60+jacZjAADio3CjpAEAAAAAAAAbAAAAc3JjL1R5cGUvRmlsZVR5cGVNYXBwZXIucGhwNIMAAOtPo2k0gwAAxTrrpqQBAAAAAAAALAAAAHNyYy9UeXBlL09wZXJhdG9yVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwiwMAAOtPo2mLAwAA1g10RqQBAAAAAAAAIwAAAHNyYy9UeXBlL1RyYWl0cy9PYmplY3RUeXBlVHJhaXQucGhwexoAAOtPo2l7GgAAcz4HMKQBAAAAAAAAKgAAAHNyYy9UeXBlL1RyYWl0cy9NYXliZUl0ZXJhYmxlVHlwZVRyYWl0LnBocEkFAADrT6NpSQUAAIkWAg6kAQAAAAAAACoAAABzcmMvVHlwZS9UcmFpdHMvRmFsc2V5Qm9vbGVhblR5cGVUcmFpdC5waHAZAQAA60+jaRkBAAA0oGsxpAEAAAAAAAAoAAAAc3JjL1R5cGUvVHJhaXRzL05vbkl0ZXJhYmxlVHlwZVRyYWl0LnBocBgEAADrT6NpGAQAAKIuC3ykAQAAAAAAADYAAABzcmMvVHlwZS9UcmFpdHMvQ29uc3RhbnROdW1lcmljQ29tcGFyaXNvblR5cGVUcmFpdC5waHApCQAA60+jaSkJAAA19oqFpAEAAAAAAAAnAAAAc3JjL1R5cGUvVHJhaXRzL01heWJlQXJyYXlUeXBlVHJhaXQucGhwoAcAAOtPo2mgBwAAFveNe6QBAAAAAAAALQAAAHNyYy9UeXBlL1RyYWl0cy9VbmRlY2lkZWRCb29sZWFuVHlwZVRyYWl0LnBocN8AAADrT6Np3wAAAMi3zeKkAQAAAAAAADAAAABzcmMvVHlwZS9UcmFpdHMvVW5kZWNpZGVkQ29tcGFyaXNvblR5cGVUcmFpdC5waHAeAwAA60+jaR4DAAD+i25/pAEAAAAAAAAnAAAAc3JjL1R5cGUvVHJhaXRzL05vbkdlbmVyaWNUeXBlVHJhaXQucGhw1QEAAOtPo2nVAQAA9rDegaQBAAAAAAAAOAAAAHNyYy9UeXBlL1RyYWl0cy9VbmRlY2lkZWRDb21wYXJpc29uQ29tcG91bmRUeXBlVHJhaXQucGhw1wEAAOtPo2nXAQAAAM3pEaQBAAAAAAAAMAAAAHNyYy9UeXBlL1RyYWl0cy9Ob25PZmZzZXRBY2Nlc3NpYmxlVHlwZVRyYWl0LnBocI4DAADrT6NpjgMAAPnhiwWkAQAAAAAAACoAAABzcmMvVHlwZS9UcmFpdHMvTWF5YmVDYWxsYWJsZVR5cGVUcmFpdC5waHDjAQAA60+jaeMBAAAEm47ppAEAAAAAAAAqAAAAc3JjL1R5cGUvVHJhaXRzL05vblJlbW92ZWFibGVUeXBlVHJhaXQucGhw1AAAAOtPo2nUAAAANOJpOKQBAAAAAAAAKwAAAHNyYy9UeXBlL1RyYWl0cy9MYXRlUmVzb2x2YWJsZVR5cGVUcmFpdC5waHCtPQAA60+jaa09AAD5/ToJpAEAAAAAAAAyAAAAc3JjL1R5cGUvVHJhaXRzL01heWJlT2Zmc2V0QWNjZXNzaWJsZVR5cGVUcmFpdC5waHB4AwAA60+jaXgDAAAS58AOpAEAAAAAAAAoAAAAc3JjL1R5cGUvVHJhaXRzL01heWJlT2JqZWN0VHlwZVRyYWl0LnBocAoNAADrT6NpCg0AAB23MnukAQAAAAAAACgAAABzcmMvVHlwZS9UcmFpdHMvTm9uQ2FsbGFibGVUeXBlVHJhaXQucGhwzgEAAOtPo2nOAQAA1ab6W6QBAAAAAAAAKgAAAHNyYy9UeXBlL1RyYWl0cy9UcnV0aHlCb29sZWFuVHlwZVRyYWl0LnBocBgBAADrT6NpGAEAAIGEsgmkAQAAAAAAACUAAABzcmMvVHlwZS9UcmFpdHMvTm9uQXJyYXlUeXBlVHJhaXQucGhwkgcAAOtPo2mSBwAA3YR/I6QBAAAAAAAALQAAAHNyYy9UeXBlL1RyYWl0cy9Ob25HZW5lcmFsaXphYmxlVHlwZVRyYWl0LnBocIABAADrT6NpgAEAAGaDN92kAQAAAAAAACYAAABzcmMvVHlwZS9UcmFpdHMvTm9uT2JqZWN0VHlwZVRyYWl0LnBocHUKAADrT6NpdQoAABxCEbikAQAAAAAAACsAAABzcmMvVHlwZS9UcmFpdHMvQ29uc3RhbnRTY2FsYXJUeXBlVHJhaXQucGhwNg8AAOtPo2k2DwAAejtyMaQBAAAAAAAAHQAAAHNyYy9UeXBlL0ludGVyc2VjdGlvblR5cGUucGhwXL0AAOtPo2lcvQAA31cDd6QBAAAAAAAAIgAAAHNyYy9UeXBlL0p1c3ROdWxsYWJsZVR5cGVUcmFpdC5waHAyEAAA60+jaTIQAABPY2hHpAEAAAAAAAAoAAAAc3JjL1R5cGUvQ29uZGl0aW9uYWxUeXBlRm9yUGFyYW1ldGVyLnBocIQUAADrT6NphBQAAK+P5s6kAQAAAAAAACkAAABzcmMvVHlwZS9BY2Nlc3NvcnkvSGFzT2Zmc2V0VmFsdWVUeXBlLnBocIs1AADrT6NpizUAAN1m0YGkAQAAAAAAACYAAABzcmMvVHlwZS9BY2Nlc3NvcnkvSGFzUHJvcGVydHlUeXBlLnBocKUTAADrT6NppRMAAMioYK+kAQAAAAAAACkAAABzcmMvVHlwZS9BY2Nlc3NvcnkvT3ZlcnNpemVkQXJyYXlUeXBlLnBocGsqAADrT6NpayoAAFQlYdOkAQAAAAAAADEAAABzcmMvVHlwZS9BY2Nlc3NvcnkvQWNjZXNzb3J5TnVtZXJpY1N0cmluZ1R5cGUucGhwtiUAAOtPo2m2JQAAnPSOK6QBAAAAAAAAJAAAAHNyYy9UeXBlL0FjY2Vzc29yeS9IYXNNZXRob2RUeXBlLnBocBAZAADrT6NpEBkAAIOKx5qkAQAAAAAAACQAAABzcmMvVHlwZS9BY2Nlc3NvcnkvSGFzT2Zmc2V0VHlwZS5waHBPLAAA60+jaU8sAAC2KR45pAEAAAAAAAAzAAAAc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeUxvd2VyY2FzZVN0cmluZ1R5cGUucGhwbyQAAOtPo2lvJAAAiqCM+qQBAAAAAAAAMQAAAHNyYy9UeXBlL0FjY2Vzc29yeS9BY2Nlc3NvcnlMaXRlcmFsU3RyaW5nVHlwZS5waHCLJAAA60+jaYskAABkH6dUpAEAAAAAAAAyAAAAc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeU5vbkVtcHR5U3RyaW5nVHlwZS5waHAQJgAA60+jaRAmAADJ/rPRpAEAAAAAAAAyAAAAc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeU5vbkZhbHN5U3RyaW5nVHlwZS5waHAnJAAA60+jaSckAAAE3CFmpAEAAAAAAAAtAAAAc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeUFycmF5TGlzdFR5cGUucGhwMTAAAOtPo2kxMAAAq+40gqQBAAAAAAAAMwAAAHNyYy9UeXBlL0FjY2Vzc29yeS9BY2Nlc3NvcnlVcHBlcmNhc2VTdHJpbmdUeXBlLnBocG8kAADrT6NpbyQAAPv0bwqkAQAAAAAAACQAAABzcmMvVHlwZS9BY2Nlc3NvcnkvQWNjZXNzb3J5VHlwZS5waHCEAAAA60+jaYQAAAAXO8qgpAEAAAAAAAAoAAAAc3JjL1R5cGUvQWNjZXNzb3J5L05vbkVtcHR5QXJyYXlUeXBlLnBocMYrAADrT6NpxisAAOgS5NWkAQAAAAAAADAAAABzcmMvVHlwZS9NZXRob2RQYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvbi5waHBzAwAA60+jaXMDAADfTdKMpAEAAAAAAAAXAAAAc3JjL1R5cGUvT2JqZWN0VHlwZS5waHB43gAA60+jaXjeAABGMjiApAEAAAAAAAAfAAAAc3JjL1R5cGUvQ29uc3RhbnRUeXBlSGVscGVyLnBocBsJAADrT6NpGwkAAMZE46ukAQAAAAAAABcAAABzcmMvVHlwZS9TdGF0aWNUeXBlLnBocBBeAADrT6NpEF4AALtJGkSkAQAAAAAAACgAAABzcmMvVHlwZS9QYXJzZXJOb2RlVHlwZVRvUEhQU3RhblR5cGUucGhwlw8AAOtPo2mXDwAA0jKRlKQBAAAAAAAAHwAAAHNyYy9UeXBlL0Nsb3N1cmVUeXBlRmFjdG9yeS5waHBsFgAA60+jaWwWAAA/uMndpAEAAAAAAAAuAAAAc3JjL1R5cGUvRHluYW1pY0Z1bmN0aW9uVGhyb3dUeXBlRXh0ZW5zaW9uLnBocGwDAADrT6NpbAMAACv4iYukAQAAAAAAABwAAABzcmMvVHlwZS9TdHJpY3RNaXhlZFR5cGUucGhwdS8AAOtPo2l1LwAA9ta5n6QBAAAAAAAALAAAAHNyYy9UeXBlL0RpcmVjdFR5cGVBbGlhc1Jlc29sdmVyUHJvdmlkZXIucGhwBAIAAOtPo2kEAgAA8ymLGqQBAAAAAAAAJwAAAHNyYy9UeXBlL0hlbHBlci9HZXRUZW1wbGF0ZVR5cGVUeXBlLnBocJANAADrT6NpkA0AAP7YCuSkAQAAAAAAACwAAABzcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlT2JqZWN0U2hhcGVUeXBlLnBocKcEAADrT6NppwQAALcK2WKkAQAAAAAAADMAAABzcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlT2JqZWN0V2l0aG91dENsYXNzVHlwZS5waHAsBAAA60+jaSwEAACCPJn4pAEAAAAAAAAwAAAAc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUNvbnN0YW50SW50ZWdlclR5cGUucGhwngQAAOtPo2meBAAAR0E41aQBAAAAAAAALgAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVHZW5lcmljT2JqZWN0VHlwZS5waHCNBQAA60+jaY0FAAAC+s4ipAEAAAAAAAAkAAAAc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVNYXAucGhwXxoAAOtPo2lfGgAA8aoZVKQBAAAAAAAAMQAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlQXJndW1lbnRTdHJhdGVneS5waHCzBQAA60+jabMFAABm0Rt5pAEAAAAAAAApAAAAc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVTdHJhdGVneS5waHA8AQAA60+jaTwBAABVCHrcpAEAAAAAAAAoAAAAc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUludGVnZXJUeXBlLnBocFsEAADrT6NpWwQAAKDLnUykAQAAAAAAACsAAABzcmMvVHlwZS9HZW5lcmljL0dlbmVyaWNDbGFzc1N0cmluZ1R5cGUucGhwtR0AAOtPo2m1HQAA6ht7AqQBAAAAAAAAJgAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlU2NvcGUucGhwAQgAAOtPo2kBCAAApJNHoaQBAAAAAAAAJgAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlVHJhaXQucGhwGjAAAOtPo2kaMAAAhn8keaQBAAAAAAAAKQAAAHNyYy9UeXBlL0dlbmVyaWMvVHlwZVByb2plY3Rpb25IZWxwZXIucGhwcwIAAOtPo2lzAgAASF6mMaQBAAAAAAAAJgAAAHNyYy9UeXBlL0dlbmVyaWMvR2VuZXJpY09iamVjdFR5cGUucGhwhTYAAOtPo2mFNgAAX6In0KQBAAAAAAAALAAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlVmFyaWFuY2VNYXAucGhwqgQAAOtPo2mqBAAAJI4DLqQBAAAAAAAALAAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVTdHJpY3RNaXhlZFR5cGUucGhw0AUAAOtPo2nQBQAA3OfBQaQBAAAAAAAAMAAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVCZW5ldm9sZW50VW5pb25UeXBlLnBocEUGAADrT6NpRQYAAOwPyNakAQAAAAAAACYAAABzcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlTWl4ZWRUeXBlLnBocGgHAADrT6NpaAcAAILpbxWkAQAAAAAAACYAAABzcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlQXJyYXlUeXBlLnBocHwEAADrT6NpfAQAAA8RYKSkAQAAAAAAACcAAABzcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZUhlbHBlci5waHCJFQAA60+jaYkVAAAv9gclpAEAAAAAAAAnAAAAc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZU9iamVjdFR5cGUucGhwDAQAAOtPo2kMBAAAmdjAOKQBAAAAAAAAJwAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVTdHJpbmdUeXBlLnBocFYEAADrT6NpVgQAADZ5SS+kAQAAAAAAACkAAABzcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlSXRlcmFibGVUeXBlLnBocCsEAADrT6NpKwQAABkIXoSkAQAAAAAAACYAAABzcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlS2V5T2ZUeXBlLnBocHsFAADrT6NpewUAABbSZhykAQAAAAAAACYAAABzcmMvVHlwZS9HZW5lcmljL0dlbmVyaWNTdGF0aWNUeXBlLnBocMklAADrT6NpySUAALGB112kAQAAAAAAADIAAABzcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZVBhcmFtZXRlclN0cmF0ZWd5LnBocIADAADrT6NpgAMAACjvA32kAQAAAAAAACYAAABzcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlRmxvYXRUeXBlLnBocFEEAADrT6NpUQQAACRar7ukAQAAAAAAAC8AAABzcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlQ29uc3RhbnRTdHJpbmdUeXBlLnBocJkEAADrT6NpmQQAAIgrVOSkAQAAAAAAACgAAABzcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlQm9vbGVhblR5cGUucGhwWwQAAOtPo2lbBAAAFeSHCKQBAAAAAAAAJgAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVVbmlvblR5cGUucGhwLQUAAOtPo2ktBQAAYKltaKQBAAAAAAAAKQAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlVmFyaWFuY2UucGhwHBsAAOtPo2kcGwAA2gj9S6QBAAAAAAAAKAAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlRmFjdG9yeS5waHBUGgAA60+jaVQaAABpz+hJpAEAAAAAAAAqAAAAc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVSZWZlcmVuY2UucGhw0AIAAOtPo2nQAgAAQrw4kKQBAAAAAAAALQAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVJbnRlcnNlY3Rpb25UeXBlLnBocLoDAADrT6NpugMAAMQJr+CkAQAAAAAAAC4AAABzcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlQ29uc3RhbnRBcnJheVR5cGUucGhw+wQAAOtPo2n7BAAAKPtcJqQBAAAAAAAAIQAAAHNyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlLnBocHwDAADrT6NpfAMAAPn8ci+kAQAAAAAAABYAAABzcmMvVHlwZS9VbmlvblR5cGUucGhwKLUAAOtPo2kotQAAiVsC6aQBAAAAAAAAFgAAAHNyYy9UeXBlL01peGVkVHlwZS5waHA4ggAA60+jaTiCAADghgbupAEAAAAAAAAZAAAAc3JjL1R5cGUvUmVzb3VyY2VUeXBlLnBocHcMAADrT6NpdwwAAPm2mPGkAQAAAAAAACIAAABzcmMvVHlwZS9Mb29zZUNvbXBhcmlzb25IZWxwZXIucGhwrwkAAOtPo2mvCQAAObp/zaQBAAAAAAAAFgAAAHNyYy9UeXBlL0Vycm9yVHlwZS5waHDFBAAA60+jacUEAABYB5DDpAEAAAAAAAAYAAAAc3JjL1R5cGUvQm9vbGVhblR5cGUucGhwkhAAAOtPo2mSEAAACkRd56QBAAAAAAAAGQAAAHNyYy9UeXBlL0NvbXBvdW5kVHlwZS5waHADBAAA60+jaQMEAABVs/WepAEAAAAAAAA0AAAAc3JjL1R5cGUvRXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5LnBocCcCAADrT6NpJwIAABl5Em6kAQAAAAAAADAAAABzcmMvVHlwZS9TdGF0aWNNZXRob2RUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHBHBAAA60+jaUcEAAB699k7pAEAAAAAAAAiAAAAc3JjL1R5cGUvTm9uQWNjZXB0aW5nTmV2ZXJUeXBlLnBocNYEAADrT6Np1gQAAK9FM+akAQAAAAAAABUAAABzcmMvVHlwZS9Wb2lkVHlwZS5waHCaGgAA60+jaZoaAADKg2zCpAEAAAAAAAAeAAAAc3JjL1R5cGUvU3RhdGljVHlwZUZhY3RvcnkucGhwzwMAAOtPo2nPAwAAw2WPjaQBAAAAAAAAGAAAAHNyYy9UeXBlL0Nsb3N1cmVUeXBlLnBocNNhAADrT6Np02EAANRGO72kAQAAAAAAAC8AAABzcmMvVHlwZS9EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvblJlZ2lzdHJ5LnBocL0RAADrT6NpvREAAOVuJvakAQAAAAAAAB4AAABzcmMvVHlwZS9CaXR3aXNlRmxhZ0hlbHBlci5waHD7DQAA60+jafsNAADqKi17pAEAAAAAAAARAAAAc3JjL1R5cGUvVHlwZS5waHAFMAAA60+jaQUwAACnJBhGpAEAAAAAAAAbAAAAc3JjL1R5cGUvVHlwZUNvbWJpbmF0b3IucGhwmsgAAOtPo2mayAAARVKHaqQBAAAAAAAAMgAAAHNyYy9UeXBlL0R5bmFtaWNTdGF0aWNNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24ucGhwgQMAAOtPo2mBAwAA7gCf5qQBAAAAAAAAGQAAAHNyYy9UeXBlL0l0ZXJhYmxlVHlwZS5waHC1PQAA60+jabU9AADVBWWTpAEAAAAAAAAWAAAAc3JjL1R5cGUvRmxvYXRUeXBlLnBocNscAADrT6Np2xwAAGo6pQSkAQAAAAAAACUAAABzcmMvVHlwZS9SZWdleC9SZWdleEFzdFdhbGtSZXN1bHQucGhwqwkAAOtPo2mrCQAAnsRp2qQBAAAAAAAAKQAAAHNyYy9UeXBlL1JlZ2V4L1JlZ2V4Tm9uQ2FwdHVyaW5nR3JvdXAucGhwbQcAAOtPo2ltBwAAoPQlRKQBAAAAAAAAJgAAAHNyYy9UeXBlL1JlZ2V4L1JlZ2V4Q2FwdHVyaW5nR3JvdXAucGhw+A4AAOtPo2n4DgAAmCst2qQBAAAAAAAAIwAAAHNyYy9UeXBlL1JlZ2V4L1JlZ2V4QWx0ZXJuYXRpb24ucGhw1AQAAOtPo2nUBAAAXgptnKQBAAAAAAAAJwAAAHNyYy9UeXBlL1JlZ2V4L1JlZ2V4R3JvdXBXYWxrUmVzdWx0LnBocNQKAADrT6Np1AoAAGMC7BykAQAAAAAAACMAAABzcmMvVHlwZS9SZWdleC9SZWdleEdyb3VwUGFyc2VyLnBocIlUAADrT6NpiVQAAGQLPkCkAQAAAAAAACgAAABzcmMvVHlwZS9SZWdleC9SZWdleEV4cHJlc3Npb25IZWxwZXIucGhwuBQAAOtPo2m4FAAA1Ciuz6QBAAAAAAAAHAAAAHNyYy9UeXBlL0NvbmRpdGlvbmFsVHlwZS5waHDKHAAA60+jacocAAACGYOopAEAAAAAAAAmAAAAc3JjL1R5cGUvU2ltdWx0YW5lb3VzVHlwZVRyYXZlcnNlci5waHCABAAA60+jaYAEAAAsogDVpAEAAAAAAAAfAAAAc3JjL1J1bGVzL01ldGFkYXRhUnVsZUVycm9yLnBocNoAAADrT6Np2gAAAOb21WikAQAAAAAAACcAAABzcmMvUnVsZXMvTWlzc2luZy9NaXNzaW5nUmV0dXJuUnVsZS5waHBwEgAA60+jaXASAAC2yTbqpAEAAAAAAAAlAAAAc3JjL1J1bGVzL0Z1bmN0aW9uUmV0dXJuVHlwZUNoZWNrLnBocFALAADrT6NpUAsAAMiukqCkAQAAAAAAAD4AAABzcmMvUnVsZXMvUHJvcGVydGllcy9SZWFkT25seUJ5UGhwRG9jUHJvcGVydHlBc3NpZ25SZWZSdWxlLnBocHgHAADrT6NpeAcAAKQxEJukAQAAAAAAADEAAABzcmMvUnVsZXMvUHJvcGVydGllcy9Qcm9wZXJ0eVJlZmxlY3Rpb25GaW5kZXIucGhwoRAAAOtPo2mhEAAA2hTOD6QBAAAAAAAAQQAAAHNyYy9SdWxlcy9Qcm9wZXJ0aWVzL0xhenlSZWFkV3JpdGVQcm9wZXJ0aWVzRXh0ZW5zaW9uUHJvdmlkZXIucGhwEAMAAOtPo2kQAwAAFqHDgaQBAAAAAAAAQgAAAHNyYy9SdWxlcy9Qcm9wZXJ0aWVzL0RlZmF1bHRWYWx1ZVR5cGVzQXNzaWduZWRUb1Byb3BlcnRpZXNSdWxlLnBocCkIAADrT6NpKQgAAPWCW4ekAQAAAAAAADMAAABzcmMvUnVsZXMvUHJvcGVydGllcy9SZWFkT25seVByb3BlcnR5QXNzaWduUnVsZS5waHDZDgAA60+jadkOAACOBlMTpAEAAAAAAABDAAAAc3JjL1J1bGVzL1Byb3BlcnRpZXMvRGlyZWN0UmVhZFdyaXRlUHJvcGVydGllc0V4dGVuc2lvblByb3ZpZGVyLnBocGgCAADrT6NpaAIAAJMdZSqkAQAAAAAAADYAAABzcmMvUnVsZXMvUHJvcGVydGllcy9UeXBlc0Fzc2lnbmVkVG9Qcm9wZXJ0aWVzUnVsZS5waHAIDAAA60+jaQgMAACJID4+pAEAAAAAAAA7AAAAc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZE9ubHlCeVBocERvY1Byb3BlcnR5QXNzaWduUnVsZS5waHCZDwAA60+jaZkPAADyE3qMpAEAAAAAAAA1AAAAc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZFdyaXRlUHJvcGVydGllc0V4dGVuc2lvbi5waHCEAwAA60+jaYQDAACokcAVpAEAAAAAAAA9AAAAc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZFdyaXRlUHJvcGVydGllc0V4dGVuc2lvblByb3ZpZGVyLnBocC4BAADrT6NpLgEAAF+imoGkAQAAAAAAAC0AAABzcmMvUnVsZXMvUHJvcGVydGllcy9SZWFkT25seVByb3BlcnR5UnVsZS5waHCtBgAA60+jaa0GAACdOKykpAEAAAAAAABCAAAAc3JjL1J1bGVzL1Byb3BlcnRpZXMvTWlzc2luZ1JlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eUFzc2lnblJ1bGUucGhw5wkAAOtPo2nnCQAAxsW6CKQBAAAAAAAANQAAAHNyYy9SdWxlcy9Qcm9wZXJ0aWVzL0FjY2Vzc1Byb3BlcnRpZXNJbkFzc2lnblJ1bGUucGhw4AMAAOtPo2ngAwAAKa4VoaQBAAAAAAAANQAAAHNyYy9SdWxlcy9Qcm9wZXJ0aWVzL1JlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eVJ1bGUucGhwhAMAAOtPo2mEAwAAt9urR6QBAAAAAAAANgAAAHNyYy9SdWxlcy9Qcm9wZXJ0aWVzL1JlYWRPbmx5UHJvcGVydHlBc3NpZ25SZWZSdWxlLnBocDwHAADrT6NpPAcAAIiNBpOkAQAAAAAAADQAAABzcmMvUnVsZXMvUHJvcGVydGllcy9NaXNzaW5nUHJvcGVydHlUeXBlaGludFJ1bGUucGhwQgsAAOtPo2lCCwAAIPVInqQBAAAAAAAAPwAAAHNyYy9SdWxlcy9Qcm9wZXJ0aWVzL0FjY2Vzc1ByaXZhdGVQcm9wZXJ0eVRocm91Z2hTdGF0aWNSdWxlLnBocD0GAADrT6NpPQYAAPzodcmkAQAAAAAAADgAAABzcmMvUnVsZXMvUHJvcGVydGllcy9FeGlzdGluZ0NsYXNzZXNJblByb3BlcnRpZXNSdWxlLnBocIsOAADrT6Npiw4AAPp5dIukAQAAAAAAADgAAABzcmMvUnVsZXMvUHJvcGVydGllcy9Xcml0aW5nVG9SZWFkT25seVByb3BlcnRpZXNSdWxlLnBocKEIAADrT6NpoQgAAM04xKCkAQAAAAAAADcAAABzcmMvUnVsZXMvUHJvcGVydGllcy9SZWFkaW5nV3JpdGVPbmx5UHJvcGVydGllc1J1bGUucGhw7QgAAOtPo2ntCAAA0+RAjaQBAAAAAAAAOwAAAHNyYy9SdWxlcy9Qcm9wZXJ0aWVzL0FjY2Vzc1N0YXRpY1Byb3BlcnRpZXNJbkFzc2lnblJ1bGUucGhwFgQAAOtPo2kWBAAA44wu2qQBAAAAAAAAOAAAAHNyYy9SdWxlcy9Qcm9wZXJ0aWVzL0ludmFsaWRDYWxsYWJsZVByb3BlcnR5VHlwZVJ1bGUucGhwmwYAAOtPo2mbBgAAEqWoaKQBAAAAAAAAMwAAAHNyYy9SdWxlcy9Qcm9wZXJ0aWVzL0FjY2Vzc1N0YXRpY1Byb3BlcnRpZXNSdWxlLnBocEUiAADrT6NpRSIAAAQxdaWkAQAAAAAAAC8AAABzcmMvUnVsZXMvUHJvcGVydGllcy9Qcm9wZXJ0eUF0dHJpYnV0ZXNSdWxlLnBocBIDAADrT6NpEgMAAHKYhTekAQAAAAAAADIAAABzcmMvUnVsZXMvUHJvcGVydGllcy9VbmluaXRpYWxpemVkUHJvcGVydHlSdWxlLnBocOYHAADrT6Np5gcAADpVcNCkAQAAAAAAADoAAABzcmMvUnVsZXMvUHJvcGVydGllcy9NaXNzaW5nUmVhZE9ubHlQcm9wZXJ0eUFzc2lnblJ1bGUucGhwTwkAAOtPo2lPCQAAbZ2GeaQBAAAAAAAALQAAAHNyYy9SdWxlcy9Qcm9wZXJ0aWVzL0FjY2Vzc1Byb3BlcnRpZXNSdWxlLnBocDYZAADrT6NpNhkAAO7K69mkAQAAAAAAADIAAABzcmMvUnVsZXMvUHJvcGVydGllcy9OdWxsc2FmZVByb3BlcnR5RmV0Y2hSdWxlLnBocAoEAADrT6NpCgQAAMQ6zJGkAQAAAAAAADAAAABzcmMvUnVsZXMvUHJvcGVydGllcy9Gb3VuZFByb3BlcnR5UmVmbGVjdGlvbi5waHAwDgAA60+jaTAOAABfSBvEpAEAAAAAAAAyAAAAc3JjL1J1bGVzL1Byb3BlcnRpZXMvUHJvcGVydGllc0luSW50ZXJmYWNlUnVsZS5waHDcAgAA60+jadwCAAChWumOpAEAAAAAAAArAAAAc3JjL1J1bGVzL1Byb3BlcnRpZXMvUHJvcGVydHlEZXNjcmlwdG9yLnBocIIFAADrT6NpggUAAIxPVlGkAQAAAAAAAC8AAABzcmMvUnVsZXMvUHJvcGVydGllcy9PdmVycmlkaW5nUHJvcGVydHlSdWxlLnBocPsgAADrT6Np+yAAAMMiANikAQAAAAAAADIAAABzcmMvUnVsZXMvR2VuZXJpY3MvTWV0aG9kU2lnbmF0dXJlVmFyaWFuY2VSdWxlLnBocAkGAADrT6NpCQYAAAoOAgSkAQAAAAAAACsAAABzcmMvUnVsZXMvR2VuZXJpY3MvRW51bVRlbXBsYXRlVHlwZVJ1bGUucGhwGwQAAOtPo2kbBAAA1NXOEaQBAAAAAAAALQAAAHNyYy9SdWxlcy9HZW5lcmljcy9JbnRlcmZhY2VBbmNlc3RvcnNSdWxlLnBocOANAADrT6Np4A0AAD1wc5mkAQAAAAAAACQAAABzcmMvUnVsZXMvR2VuZXJpY3MvVmFyaWFuY2VDaGVjay5waHAsEAAA60+jaSwQAAAllog2pAEAAAAAAAAsAAAAc3JjL1J1bGVzL0dlbmVyaWNzL1RyYWl0VGVtcGxhdGVUeXBlUnVsZS5waHBaCQAA60+jaVoJAACyMxjlpAEAAAAAAAAoAAAAc3JjL1J1bGVzL0dlbmVyaWNzL1RlbXBsYXRlVHlwZUNoZWNrLnBocCknAADrT6NpKScAAPGNatakAQAAAAAAAC0AAABzcmMvUnVsZXMvR2VuZXJpY3MvR2VuZXJpY09iamVjdFR5cGVDaGVjay5waHAWHgAA60+jaRYeAAC2LX7LpAEAAAAAAAAxAAAAc3JjL1J1bGVzL0dlbmVyaWNzL0Nyb3NzQ2hlY2tJbnRlcmZhY2VzSGVscGVyLnBocA0NAADrT6NpDQ0AAPC769SkAQAAAAAAACwAAABzcmMvUnVsZXMvR2VuZXJpY3MvQ2xhc3NUZW1wbGF0ZVR5cGVSdWxlLnBocPsHAADrT6Np+wcAAOmX6KikAQAAAAAAACgAAABzcmMvUnVsZXMvR2VuZXJpY3MvRW51bUFuY2VzdG9yc1J1bGUucGhwbg0AAOtPo2luDQAA4tu78aQBAAAAAAAAKwAAAHNyYy9SdWxlcy9HZW5lcmljcy9Qcm9wZXJ0eVZhcmlhbmNlUnVsZS5waHCGBgAA60+jaYYGAADnPxH8pAEAAAAAAAAlAAAAc3JjL1J1bGVzL0dlbmVyaWNzL1VzZWRUcmFpdHNSdWxlLnBocJsNAADrT6Npmw0AAFvfywukAQAAAAAAADAAAABzcmMvUnVsZXMvR2VuZXJpY3MvSW50ZXJmYWNlVGVtcGxhdGVUeXBlUnVsZS5waHD+BwAA60+jaf4HAABhMbTzpAEAAAAAAAAtAAAAc3JjL1J1bGVzL0dlbmVyaWNzL01ldGhvZFRlbXBsYXRlVHlwZVJ1bGUucGhwKQ4AAOtPo2kpDgAAljw76qQBAAAAAAAAMAAAAHNyYy9SdWxlcy9HZW5lcmljcy9NZXRob2RUYWdUZW1wbGF0ZVR5cGVSdWxlLnBocHQDAADrT6NpdAMAAB7TmzqkAQAAAAAAACkAAABzcmMvUnVsZXMvR2VuZXJpY3MvQ2xhc3NBbmNlc3RvcnNSdWxlLnBocPcQAADrT6Np9xAAAHhNN0mkAQAAAAAAADEAAABzcmMvUnVsZXMvR2VuZXJpY3MvTWV0aG9kVGFnVGVtcGxhdGVUeXBlQ2hlY2sucGhwvg0AAOtPo2m+DQAA5BcHoqQBAAAAAAAANQAAAHNyYy9SdWxlcy9HZW5lcmljcy9NZXRob2RUYWdUZW1wbGF0ZVR5cGVUcmFpdFJ1bGUucGhwKwUAAOtPo2krBQAAK4dc+aQBAAAAAAAALwAAAHNyYy9SdWxlcy9HZW5lcmljcy9GdW5jdGlvblRlbXBsYXRlVHlwZVJ1bGUucGhwrQkAAOtPo2mtCQAAZmFJLKQBAAAAAAAALAAAAHNyYy9SdWxlcy9HZW5lcmljcy9HZW5lcmljQW5jZXN0b3JzQ2hlY2sucGhwQh8AAOtPo2lCHwAAbz/CG6QBAAAAAAAANAAAAHNyYy9SdWxlcy9HZW5lcmljcy9GdW5jdGlvblNpZ25hdHVyZVZhcmlhbmNlUnVsZS5waHDxBAAA60+jafEEAABqcjLppAEAAAAAAAAmAAAAc3JjL1J1bGVzL1B1cmUvRnVuY3Rpb25QdXJpdHlDaGVjay5waHDfEQAA60+jad8RAADR5NodpAEAAAAAAAAhAAAAc3JjL1J1bGVzL1B1cmUvUHVyZU1ldGhvZFJ1bGUucGhwHgQAAOtPo2keBAAA24XX6KQBAAAAAAAAIwAAAHNyYy9SdWxlcy9QdXJlL1B1cmVGdW5jdGlvblJ1bGUucGhw8AMAAOtPo2nwAwAArj3zH6QBAAAAAAAAKAAAAHNyYy9SdWxlcy9DbGFzc2VzL1JlcXVpcmVFeHRlbmRzUnVsZS5waHDBCAAA60+jacEIAADTmatppAEAAAAAAAAjAAAAc3JjL1J1bGVzL0NsYXNzZXMvTWV0aG9kVGFnUnVsZS5waHC7AgAA60+jabsCAADQRrmvpAEAAAAAAAArAAAAc3JjL1J1bGVzL0NsYXNzZXMvUmVxdWlyZUltcGxlbWVudHNSdWxlLnBocJwFAADrT6NpnAUAAKWD2sqkAQAAAAAAACUAAABzcmMvUnVsZXMvQ2xhc3Nlcy9Qcm9wZXJ0eVRhZ1J1bGUucGhwwQIAAOtPo2nBAgAAuD/wmaQBAAAAAAAAKwAAAHNyYy9SdWxlcy9DbGFzc2VzL01ldGhvZFRhZ1RyYWl0VXNlUnVsZS5waHD9AgAA60+jaf0CAAApBBBEpAEAAAAAAAAvAAAAc3JjL1J1bGVzL0NsYXNzZXMvTG9jYWxUeXBlVHJhaXRBbGlhc2VzUnVsZS5waHCYBAAA60+jaZgEAACAe9ispAEAAAAAAAA5AAAAc3JjL1J1bGVzL0NsYXNzZXMvRXhpc3RpbmdDbGFzc2VzSW5FbnVtSW1wbGVtZW50c1J1bGUucGhwygoAAOtPo2nKCgAAYRVWD6QBAAAAAAAAMwAAAHNyYy9SdWxlcy9DbGFzc2VzL0R1cGxpY2F0ZUNsYXNzRGVjbGFyYXRpb25SdWxlLnBocAEJAADrT6NpAQkAADE9TKqkAQAAAAAAAB8AAABzcmMvUnVsZXMvQ2xhc3Nlcy9NaXhpblJ1bGUucGhwrwIAAOtPo2mvAgAAY/PUB6QBAAAAAAAAJAAAAHNyYy9SdWxlcy9DbGFzc2VzL01peGluVHJhaXRSdWxlLnBocHcEAADrT6NpdwQAAJCI9umkAQAAAAAAACcAAABzcmMvUnVsZXMvQ2xhc3Nlcy9DbGFzc0NvbnN0YW50UnVsZS5waHChGwAA60+jaaEbAADo72DDpAEAAAAAAAA6AAAAc3JjL1J1bGVzL0NsYXNzZXMvRXhpc3RpbmdDbGFzc2VzSW5DbGFzc0ltcGxlbWVudHNSdWxlLnBocDUMAADrT6NpNQwAAF6TLpqkAQAAAAAAAC8AAABzcmMvUnVsZXMvQ2xhc3Nlcy9JbnN0YW50aWF0aW9uQ2FsbGFibGVSdWxlLnBocJ0CAADrT6NpnQIAAN2mEqekAQAAAAAAADEAAABzcmMvUnVsZXMvQ2xhc3Nlcy9DbGFzc0NvbnN0YW50QXR0cmlidXRlc1J1bGUucGhwJAMAAOtPo2kkAwAAoR34cKQBAAAAAAAANQAAAHNyYy9SdWxlcy9DbGFzc2VzL1VudXNlZENvbnN0cnVjdG9yUGFyYW1ldGVyc1J1bGUucGhwhAgAAOtPo2mECAAA2RkSrKQBAAAAAAAAJwAAAHNyYy9SdWxlcy9DbGFzc2VzL0luc3RhbnRpYXRpb25SdWxlLnBocAkkAADrT6NpCSQAAIpm7likAQAAAAAAADAAAABzcmMvUnVsZXMvQ2xhc3Nlcy9Ob25DbGFzc0F0dHJpYnV0ZUNsYXNzUnVsZS5waHBmCAAA60+jaWYIAAAthFn4pAEAAAAAAAAqAAAAc3JjL1J1bGVzL0NsYXNzZXMvTG9jYWxUeXBlQWxpYXNlc1J1bGUucGhw0AIAAOtPo2nQAgAAVfxHfaQBAAAAAAAAJAAAAHNyYy9SdWxlcy9DbGFzc2VzL01ldGhvZFRhZ0NoZWNrLnBocEgvAADrT6NpSC8AAH2mxDmkAQAAAAAAADMAAABzcmMvUnVsZXMvQ2xhc3Nlcy9JbnZhbGlkUHJvbW90ZWRQcm9wZXJ0aWVzUnVsZS5waHAbCgAA60+jaRsKAABj2JWDpAEAAAAAAAAtAAAAc3JjL1J1bGVzL0NsYXNzZXMvVHJhaXRBdHRyaWJ1dGVDbGFzc1J1bGUucGhwUAMAAOtPo2lQAwAAiUVcd6QBAAAAAAAALQAAAHNyYy9SdWxlcy9DbGFzc2VzL1Byb3BlcnR5VGFnVHJhaXRVc2VSdWxlLnBocAMDAADrT6NpAwMAAHfTYnakAQAAAAAAACkAAABzcmMvUnVsZXMvQ2xhc3Nlcy9BbGxvd2VkU3ViVHlwZXNSdWxlLnBocAwHAADrT6NpDAcAADfnukSkAQAAAAAAACsAAABzcmMvUnVsZXMvQ2xhc3Nlcy9Mb2NhbFR5cGVBbGlhc2VzQ2hlY2sucGhwNjsAAOtPo2k2OwAAKLnmdaQBAAAAAAAAJgAAAHNyYy9SdWxlcy9DbGFzc2VzL1Byb3BlcnR5VGFnQ2hlY2sucGhwXCcAAOtPo2lcJwAADdQ59KQBAAAAAAAAMgAAAHNyYy9SdWxlcy9DbGFzc2VzL0xvY2FsVHlwZVRyYWl0VXNlQWxpYXNlc1J1bGUucGhwEgMAAOtPo2kSAwAAzV92BaQBAAAAAAAALgAAAHNyYy9SdWxlcy9DbGFzc2VzL0ltcG9zc2libGVJbnN0YW5jZU9mUnVsZS5waHDoEQAA60+jaegRAAAIdwdPpAEAAAAAAAAnAAAAc3JjL1J1bGVzL0NsYXNzZXMvUmVhZE9ubHlDbGFzc1J1bGUucGhwowUAAOtPo2mjBQAAC/NpQqQBAAAAAAAAIAAAAHNyYy9SdWxlcy9DbGFzc2VzL01peGluQ2hlY2sucGhw+xsAAOtPo2n7GwAA4sLfq6QBAAAAAAAAKAAAAHNyYy9SdWxlcy9DbGFzc2VzL01ldGhvZFRhZ1RyYWl0UnVsZS5waHCDBAAA60+jaYMEAABqefVLpAEAAAAAAAAqAAAAc3JjL1J1bGVzL0NsYXNzZXMvUHJvcGVydHlUYWdUcmFpdFJ1bGUucGhwiQQAAOtPo2mJBAAAp4/Z+KQBAAAAAAAANQAAAHNyYy9SdWxlcy9DbGFzc2VzL0V4aXN0aW5nQ2xhc3NJbkNsYXNzRXh0ZW5kc1J1bGUucGhwKxEAAOtPo2krEQAAIlB3LaQBAAAAAAAALgAAAHNyYy9SdWxlcy9DbGFzc2VzL0R1cGxpY2F0ZURlY2xhcmF0aW9uUnVsZS5waHCbEQAA60+jaZsRAAAvDNH/pAEAAAAAAAA7AAAAc3JjL1J1bGVzL0NsYXNzZXMvRXhpc3RpbmdDbGFzc2VzSW5JbnRlcmZhY2VFeHRlbmRzUnVsZS5waHAUCwAA60+jaRQLAAAnMrAxpAEAAAAAAAApAAAAc3JjL1J1bGVzL0NsYXNzZXMvQ2xhc3NBdHRyaWJ1dGVzUnVsZS5waHBSAwAA60+jaVIDAACcY8Z4pAEAAAAAAAAnAAAAc3JjL1J1bGVzL0NsYXNzZXMvTWl4aW5UcmFpdFVzZVJ1bGUucGhw8QIAAOtPo2nxAgAAHZZ+hqQBAAAAAAAAMQAAAHNyYy9SdWxlcy9DbGFzc2VzL0V4aXN0aW5nQ2xhc3NJblRyYWl0VXNlUnVsZS5waHC/DQAA60+jab8NAABC1a/UpAEAAAAAAAAzAAAAc3JjL1J1bGVzL0NsYXNzZXMvRXhpc3RpbmdDbGFzc0luSW5zdGFuY2VPZlJ1bGUucGhw2woAAOtPo2nbCgAAQOguh6QBAAAAAAAAIwAAAHNyYy9SdWxlcy9DbGFzc2VzL05ld1N0YXRpY1J1bGUucGhwswcAAOtPo2mzBwAAT87of6QBAAAAAAAAJAAAAHNyYy9SdWxlcy9DbGFzc2VzL0VudW1TYW5pdHlSdWxlLnBocF4YAADrT6NpXhgAAKjfOOqkAQAAAAAAADwAAABzcmMvUnVsZXMvQ2xhc3Nlcy9BY2Nlc3NQcml2YXRlQ29uc3RhbnRUaHJvdWdoU3RhdGljUnVsZS5waHDbBQAA60+jadsFAADijLUVpAEAAAAAAAAeAAAAc3JjL1J1bGVzL1J1bGVFcnJvckJ1aWxkZXIucGhwlRgAAOtPo2mVGAAAo/Qv76QBAAAAAAAAJQAAAHNyYy9SdWxlcy9GdW5jdGlvbkRlZmluaXRpb25DaGVjay5waHCkZgAA60+jaaRmAACfp1XSpAEAAAAAAAArAAAAc3JjL1J1bGVzL1R5cGVzL0ludmFsaWRUeXBlc0luVW5pb25SdWxlLnBocEwNAADrT6NpTA0AAEvK0TCkAQAAAAAAABwAAABzcmMvUnVsZXMvQ2xhc3NOYW1lQ2hlY2sucGhwjwQAAOtPo2mPBAAA6PNjSKQBAAAAAAAAJgAAAHNyYy9SdWxlcy9BcGkvQmNVbmNvdmVyZWRJbnRlcmZhY2UucGhw4wQAAOtPo2njBAAA6/Ig2aQBAAAAAAAANQAAAHNyYy9SdWxlcy9BcGkvTm9kZUNvbm5lY3RpbmdWaXNpdG9yQXR0cmlidXRlc1J1bGUucGhw9QoAAOtPo2n1CgAAG2CJYqQBAAAAAAAAIwAAAHNyYy9SdWxlcy9BcGkvQXBpSW5zdGFuY2VvZlJ1bGUucGhwWxAAAOtPo2lbEAAA8mpsWqQBAAAAAAAAJwAAAHNyYy9SdWxlcy9BcGkvQXBpSW5zdGFuY2VvZlR5cGVSdWxlLnBocDwaAADrT6NpPBoAALyC/K2kAQAAAAAAAC8AAABzcmMvUnVsZXMvQXBpL1J1bnRpbWVSZWZsZWN0aW9uRnVuY3Rpb25SdWxlLnBocBsIAADrT6NpGwgAAP1VIA2kAQAAAAAAAB8AAABzcmMvUnVsZXMvQXBpL0FwaVJ1bGVIZWxwZXIucGhwaAkAAOtPo2loCQAAoZExSqQBAAAAAAAAKAAAAHNyYy9SdWxlcy9BcGkvQXBpQ2xhc3NDb25zdEZldGNoUnVsZS5waHBmCwAA60+jaWYLAACSXzJ6pAEAAAAAAAAmAAAAc3JjL1J1bGVzL0FwaS9BcGlJbnN0YW50aWF0aW9uUnVsZS5waHCACQAA60+jaYAJAADf+NexpAEAAAAAAAApAAAAc3JjL1J1bGVzL0FwaS9BcGlJbnRlcmZhY2VFeHRlbmRzUnVsZS5waHApCwAA60+jaSkLAAB6pjbdpAEAAAAAAAAlAAAAc3JjL1J1bGVzL0FwaS9BcGlDbGFzc0V4dGVuZHNSdWxlLnBocKAJAADrT6NpoAkAAOWNA1KkAQAAAAAAACEAAABzcmMvUnVsZXMvQXBpL0FwaVRyYWl0VXNlUnVsZS5waHCHBwAA60+jaYcHAACAAkwGpAEAAAAAAAAlAAAAc3JjL1J1bGVzL0FwaS9HZXRUZW1wbGF0ZVR5cGVSdWxlLnBocMgJAADrT6NpyAkAAOXk+PKkAQAAAAAAACgAAABzcmMvUnVsZXMvQXBpL0FwaUNsYXNzSW1wbGVtZW50c1J1bGUucGhwKwsAAOtPo2krCwAAkoVZs6QBAAAAAAAAIwAAAHNyYy9SdWxlcy9BcGkvQXBpTWV0aG9kQ2FsbFJ1bGUucGhwPgoAAOtPo2k+CgAAK2B8s6QBAAAAAAAAIwAAAHNyYy9SdWxlcy9BcGkvQXBpU3RhdGljQ2FsbFJ1bGUucGhwpQwAAOtPo2mlDAAAnb+ks6QBAAAAAAAANAAAAHNyYy9SdWxlcy9BcGkvUnVudGltZVJlZmxlY3Rpb25JbnN0YW50aWF0aW9uUnVsZS5waHA6CgAA60+jaToKAABNaAUlpAEAAAAAAAA3AAAAc3JjL1J1bGVzL0FwaS9QaHBTdGFuTmFtZXNwYWNlSW4zcmRQYXJ0eVBhY2thZ2VSdWxlLnBocOUJAADrT6Np5QkAACYLCsmkAQAAAAAAABsAAABzcmMvUnVsZXMvTGluZVJ1bGVFcnJvci5waHCpAAAA60+jaakAAACFWyU3pAEAAAAAAAAqAAAAc3JjL1J1bGVzL1J1bGVMZXZlbEhlbHBlckFjY2VwdHNSZXN1bHQucGhwoQMAAOtPo2mhAwAAerhKC6QBAAAAAAAAKwAAAHNyYy9SdWxlcy9XaGl0ZXNwYWNlL0ZpbGVXaGl0ZXNwYWNlUnVsZS5waHBfCwAA60+jaV8LAACjzi5cpAEAAAAAAAAlAAAAc3JjL1J1bGVzL1ZhcmlhYmxlcy9UaHJvd1R5cGVSdWxlLnBocFEGAADrT6NpUQYAALL6yk+kAQAAAAAAACEAAABzcmMvUnVsZXMvVmFyaWFibGVzL0lzc2V0UnVsZS5waHDmBAAA60+jaeYEAACE0uK/pAEAAAAAAAA0AAAAc3JjL1J1bGVzL1ZhcmlhYmxlcy9QYXJhbWV0ZXJPdXRBc3NpZ25lZFR5cGVSdWxlLnBocNMNAADrT6Np0w0AANIXQKakAQAAAAAAACsAAABzcmMvUnVsZXMvVmFyaWFibGVzL1ZhcmlhYmxlQ2xvbmluZ1J1bGUucGhw9AYAAOtPo2n0BgAAg9Mt6aQBAAAAAAAAOAAAAHNyYy9SdWxlcy9WYXJpYWJsZXMvUGFyYW1ldGVyT3V0RXhlY3V0aW9uRW5kVHlwZVJ1bGUucGhw9w8AAOtPo2n3DwAAanTiF6QBAAAAAAAALAAAAHNyYy9SdWxlcy9WYXJpYWJsZXMvQ29tcGFjdFZhcmlhYmxlc1J1bGUucGhw5AoAAOtPo2nkCgAA+YH8QaQBAAAAAAAAIQAAAHNyYy9SdWxlcy9WYXJpYWJsZXMvRW1wdHlSdWxlLnBocFUGAADrT6NpVQYAAJC3ZVKkAQAAAAAAACsAAABzcmMvUnVsZXMvVmFyaWFibGVzL0RlZmluZWRWYXJpYWJsZVJ1bGUucGhwrQcAAOtPo2mtBwAApddeyaQBAAAAAAAAIQAAAHNyYy9SdWxlcy9WYXJpYWJsZXMvVW5zZXRSdWxlLnBocMgHAADrT6NpyAcAAFOkWTWkAQAAAAAAACgAAABzcmMvUnVsZXMvVmFyaWFibGVzL051bGxDb2FsZXNjZVJ1bGUucGhwvgUAAOtPo2m+BQAAMZZUW6QBAAAAAAAAGAAAAHNyYy9SdWxlcy9Jc3NldENoZWNrLnBocAUvAADrT6NpBS8AAK9j7JGkAQAAAAAAACcAAABzcmMvUnVsZXMvRGF0ZVRpbWVJbnN0YW50aWF0aW9uUnVsZS5waHAvBwAA60+jaS8HAAAfzCtepAEAAAAAAAAbAAAAc3JjL1J1bGVzL051bGxzYWZlQ2hlY2sucGhwwwUAAOtPo2nDBQAArcOsgqQBAAAAAAAAKQAAAHNyYy9SdWxlcy9JZ25vcmUvSWdub3JlUGFyc2VFcnJvclJ1bGUucGhwQgQAAOtPo2lCBAAAYuMt5KQBAAAAAAAAHQAAAHNyYy9SdWxlcy9SdWxlTGV2ZWxIZWxwZXIucGhwTUIAAOtPo2lNQgAAeKFSR6QBAAAAAAAAHAAAAHNyYy9SdWxlcy9EaXJlY3RSZWdpc3RyeS5waHAlBQAA60+jaSUFAACU9xp1pAEAAAAAAAA6AAAAc3JjL1J1bGVzL0FycmF5cy9Ob25leGlzdGVudE9mZnNldEluQXJyYXlEaW1GZXRjaENoZWNrLnBocBsSAADrT6NpGxIAAHmOiQekAQAAAAAAACcAAABzcmMvUnVsZXMvQXJyYXlzL0FycmF5VW5wYWNraW5nUnVsZS5waHBnBwAA60+jaWcHAADf2eKppAEAAAAAAAA5AAAAc3JjL1J1bGVzL0FycmF5cy9PZmZzZXRBY2Nlc3NXaXRob3V0RGltRm9yUmVhZGluZ1J1bGUucGhw+QIAAOtPo2n5AgAAf4AIP6QBAAAAAAAANAAAAHNyYy9SdWxlcy9BcnJheXMvT2Zmc2V0QWNjZXNzVmFsdWVBc3NpZ25tZW50UnVsZS5waHAUCgAA60+jaRQKAAAQVf9WpAEAAAAAAAAnAAAAc3JjL1J1bGVzL0FycmF5cy9FbXB0eUFycmF5SXRlbVJ1bGUucGhwOgMAAOtPo2k6AwAA2llyOqQBAAAAAAAANQAAAHNyYy9SdWxlcy9BcnJheXMvRHVwbGljYXRlS2V5c0luTGl0ZXJhbEFycmF5c1J1bGUucGhwaQ4AAOtPo2lpDgAACtVQ9qQBAAAAAAAALQAAAHNyYy9SdWxlcy9BcnJheXMvQXBwZW5kZWRBcnJheUtleVR5cGVSdWxlLnBocNYKAADrT6Np1goAANTrZfGkAQAAAAAAADIAAABzcmMvUnVsZXMvQXJyYXlzL0ludmFsaWRLZXlJbkFycmF5RGltRmV0Y2hSdWxlLnBocAMIAADrT6NpAwgAAAEITeakAQAAAAAAAC4AAABzcmMvUnVsZXMvQXJyYXlzL0ludmFsaWRLZXlJbkFycmF5SXRlbVJ1bGUucGhwywUAAOtPo2nLBQAAPlpmvKQBAAAAAAAALQAAAHNyYy9SdWxlcy9BcnJheXMvT2Zmc2V0QWNjZXNzQXNzaWduT3BSdWxlLnBocJ8KAADrT6NpnwoAAAksNyikAQAAAAAAACsAAABzcmMvUnVsZXMvQXJyYXlzL0FycmF5RGVzdHJ1Y3R1cmluZ1J1bGUucGhwWg0AAOtPo2laDQAAFaUxc6QBAAAAAAAAKgAAAHNyYy9SdWxlcy9BcnJheXMvQWxsb3dlZEFycmF5S2V5c1R5cGVzLnBocHsJAADrT6NpewkAAH7xbUKkAQAAAAAAAC8AAABzcmMvUnVsZXMvQXJyYXlzL09mZnNldEFjY2Vzc0Fzc2lnbm1lbnRSdWxlLnBocOkKAADrT6Np6QoAADrSH/2kAQAAAAAAAC4AAABzcmMvUnVsZXMvQXJyYXlzL1VucGFja0l0ZXJhYmxlSW5BcnJheVJ1bGUucGhw8wYAAOtPo2nzBgAAcrSJp6QBAAAAAAAAJAAAAHNyYy9SdWxlcy9BcnJheXMvRGVhZEZvcmVhY2hSdWxlLnBocBwDAADrT6NpHAMAAEGkGMikAQAAAAAAADkAAABzcmMvUnVsZXMvQXJyYXlzL05vbmV4aXN0ZW50T2Zmc2V0SW5BcnJheURpbUZldGNoUnVsZS5waHDxDQAA60+jafENAAByfXtvpAEAAAAAAAAqAAAAc3JjL1J1bGVzL0FycmF5cy9JdGVyYWJsZUluRm9yZWFjaFJ1bGUucGhwQgYAAOtPo2lCBgAAcHq3l6QBAAAAAAAALgAAAHNyYy9SdWxlcy9BcnJheXMvQXBwZW5kZWRBcnJheUl0ZW1UeXBlUnVsZS5waHDWCgAA60+jadYKAACGxKOYpAEAAAAAAAAhAAAAc3JjL1J1bGVzL0lkZW50aWZpZXJSdWxlRXJyb3IucGhwuAAAAOtPo2m4AAAATVQzDqQBAAAAAAAAJwAAAHNyYy9SdWxlcy9DbGFzc0Nhc2VTZW5zaXRpdml0eUNoZWNrLnBocIQHAADrT6NphAcAAM5QxeWkAQAAAAAAAC4AAABzcmMvUnVsZXMvRW51bUNhc2VzL0VudW1DYXNlQXR0cmlidXRlc1J1bGUucGhwHQMAAOtPo2kdAwAAOF3kKqQBAAAAAAAAJQAAAHNyYy9SdWxlcy9DbGFzc0ZvcmJpZGRlbk5hbWVDaGVjay5waHC2CQAA60+jabYJAAB/kz1zpAEAAAAAAAAxAAAAc3JjL1J1bGVzL1JlZ2V4cC9SZWd1bGFyRXhwcmVzc2lvblF1b3RpbmdSdWxlLnBocMIeAADrT6Npwh4AAKxdcMSkAQAAAAAAADEAAABzcmMvUnVsZXMvUmVnZXhwL1JlZ3VsYXJFeHByZXNzaW9uUGF0dGVyblJ1bGUucGhwpQ4AAOtPo2mlDgAAmgiuwKQBAAAAAAAAKQAAAHNyYy9SdWxlcy9GdW5jdGlvbkNhbGxQYXJhbWV0ZXJzQ2hlY2sucGhwkWQAAOtPo2mRZAAA4rFlnqQBAAAAAAAAOQAAAHNyYy9SdWxlcy9Db21wYXJpc29uL1doaWxlTG9vcEFsd2F5c1RydWVDb25kaXRpb25SdWxlLnBocKwLAADrT6NprAsAAHjdOGOkAQAAAAAAADkAAABzcmMvUnVsZXMvQ29tcGFyaXNvbi9Eb1doaWxlTG9vcENvbnN0YW50Q29uZGl0aW9uUnVsZS5waHDhDAAA60+jaeEMAABFGJBipAEAAAAAAAA6AAAAc3JjL1J1bGVzL0NvbXBhcmlzb24vSW1wb3NzaWJsZUNoZWNrVHlwZU1ldGhvZENhbGxSdWxlLnBocPQQAADrT6Np9BAAAHuKAYSkAQAAAAAAADgAAABzcmMvUnVsZXMvQ29tcGFyaXNvbi9Cb29sZWFuTm90Q29uc3RhbnRDb25kaXRpb25SdWxlLnBocLoLAADrT6NpugsAAPW/WV2kAQAAAAAAADoAAABzcmMvUnVsZXMvQ29tcGFyaXNvbi9XaGlsZUxvb3BBbHdheXNGYWxzZUNvbmRpdGlvblJ1bGUucGhwMggAAOtPo2kyCAAAsVA0mqQBAAAAAAAAMgAAAHNyYy9SdWxlcy9Db21wYXJpc29uL1VucmVhY2hhYmxlSWZCcmFuY2hlc1J1bGUucGhwHw0AAOtPo2kfDQAAY0nBS6QBAAAAAAAANAAAAHNyYy9SdWxlcy9Db21wYXJpc29uL0NvbnN0YW50Q29uZGl0aW9uUnVsZUhlbHBlci5waHDRCwAA60+jadELAABrhMb6pAEAAAAAAAAyAAAAc3JjL1J1bGVzL0NvbXBhcmlzb24vSW1wb3NzaWJsZUNoZWNrVHlwZUhlbHBlci5waHAiRgAA60+jaSJGAABF8njHpAEAAAAAAAA3AAAAc3JjL1J1bGVzL0NvbXBhcmlzb24vQm9vbGVhbk9yQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocIgbAADrT6NpiBsAAA1r+mKkAQAAAAAAADgAAABzcmMvUnVsZXMvQ29tcGFyaXNvbi9Mb2dpY2FsWG9yQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocBsSAADrT6NpGxIAAPC14UmkAQAAAAAAAEAAAABzcmMvUnVsZXMvQ29tcGFyaXNvbi9JbXBvc3NpYmxlQ2hlY2tUeXBlU3RhdGljTWV0aG9kQ2FsbFJ1bGUucGhw/BEAAOtPo2n8EQAAU+YRtqQBAAAAAAAANAAAAHNyYy9SdWxlcy9Db21wYXJpc29uL0Vsc2VJZkNvbnN0YW50Q29uZGl0aW9uUnVsZS5waHCoCwAA60+jaagLAAALpoMUpAEAAAAAAAA9AAAAc3JjL1J1bGVzL0NvbXBhcmlzb24vVGVybmFyeU9wZXJhdG9yQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocJMIAADrT6NpkwgAADI8C/GkAQAAAAAAADgAAABzcmMvUnVsZXMvQ29tcGFyaXNvbi9Cb29sZWFuQW5kQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocIMbAADrT6NpgxsAAPnjrOykAQAAAAAAAD0AAABzcmMvUnVsZXMvQ29tcGFyaXNvbi9TdHJpY3RDb21wYXJpc29uT2ZEaWZmZXJlbnRUeXBlc1J1bGUucGhwPRcAAOtPo2k9FwAAO/e4JqQBAAAAAAAAMAAAAHNyYy9SdWxlcy9Db21wYXJpc29uL0lmQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocI4IAADrT6NpjggAANRFwVekAQAAAAAAADcAAABzcmMvUnVsZXMvQ29tcGFyaXNvbi9Vc2FnZU9mVm9pZE1hdGNoRXhwcmVzc2lvblJ1bGUucGhwIgMAAOtPo2kiAwAAf7SriqQBAAAAAAAAPAAAAHNyYy9SdWxlcy9Db21wYXJpc29uL0ltcG9zc2libGVDaGVja1R5cGVGdW5jdGlvbkNhbGxSdWxlLnBocFEOAADrT6NpUQ4AAOKsUb6kAQAAAAAAADkAAABzcmMvUnVsZXMvQ29tcGFyaXNvbi9VbnJlYWNoYWJsZVRlcm5hcnlFbHNlQnJhbmNoUnVsZS5waHDYCQAA60+jadgJAADXGV7jpAEAAAAAAAAsAAAAc3JjL1J1bGVzL0NvbXBhcmlzb24vTWF0Y2hFeHByZXNzaW9uUnVsZS5waHA+HQAA60+jaT4dAADSWShApAEAAAAAAABHAAAAc3JjL1J1bGVzL0NvbXBhcmlzb24vTnVtYmVyQ29tcGFyaXNvbk9wZXJhdG9yc0NvbnN0YW50Q29uZGl0aW9uUnVsZS5waHBwDAAA60+jaXAMAAAs7wsFpAEAAAAAAAA0AAAAc3JjL1J1bGVzL0NvbXBhcmlzb24vQ29uc3RhbnRMb29zZUNvbXBhcmlzb25SdWxlLnBocNsOAADrT6Np2w4AAER1C9OkAQAAAAAAACwAAABzcmMvUnVsZXMvRnVuY3Rpb25zL0Z1bmN0aW9uQ2FsbGFibGVSdWxlLnBocP8PAADrT6Np/w8AAN0LsNakAQAAAAAAADMAAABzcmMvUnVsZXMvRnVuY3Rpb25zL0Fycm93RnVuY3Rpb25BdHRyaWJ1dGVzUnVsZS5waHAgAwAA60+jaSADAABt4TAXpAEAAAAAAAA1AAAAc3JjL1J1bGVzL0Z1bmN0aW9ucy9QYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nUnVsZS5waHCdDQAA60+jaZ0NAAD5oem4pAEAAAAAAAArAAAAc3JjL1J1bGVzL0Z1bmN0aW9ucy9QYXJhbUF0dHJpYnV0ZXNSdWxlLnBocNwDAADrT6Np3AMAAGfsJM+kAQAAAAAAADwAAABzcmMvUnVsZXMvRnVuY3Rpb25zL0luY29tcGF0aWJsZURlZmF1bHRQYXJhbWV0ZXJUeXBlUnVsZS5waHDGBwAA60+jacYHAACFxoi8pAEAAAAAAAA8AAAAc3JjL1J1bGVzL0Z1bmN0aW9ucy9NaXNzaW5nRnVuY3Rpb25QYXJhbWV0ZXJUeXBlaGludFJ1bGUucGhwtxAAAOtPo2m3EAAAyHsB/6QBAAAAAAAAQwAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvSW5jb21wYXRpYmxlQ2xvc3VyZURlZmF1bHRQYXJhbWV0ZXJUeXBlUnVsZS5waHC2BwAA60+jabYHAABXjin6pAEAAAAAAAA2AAAAc3JjL1J1bGVzL0Z1bmN0aW9ucy9Vc2VsZXNzRnVuY3Rpb25SZXR1cm5WYWx1ZVJ1bGUucGhw4gkAAOtPo2niCQAAaBW2NaQBAAAAAAAALQAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvVW51c2VkQ2xvc3VyZVVzZXNSdWxlLnBocL4EAADrT6NpvgQAAP+2+U2kAQAAAAAAAEkAAABzcmMvUnVsZXMvRnVuY3Rpb25zL0luY29tcGF0aWJsZUFycm93RnVuY3Rpb25EZWZhdWx0UGFyYW1ldGVyVHlwZVJ1bGUucGhwzgcAAOtPo2nOBwAAikQWuKQBAAAAAAAAOQAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvVmFyaWFkaWNQYXJhbWV0ZXJzRGVjbGFyYXRpb25SdWxlLnBocDIEAADrT6NpMgQAAJwTa7OkAQAAAAAAAC8AAABzcmMvUnVsZXMvRnVuY3Rpb25zL1JldHVybk51bGxzYWZlQnlSZWZSdWxlLnBocFoFAADrT6NpWgUAALrXn6akAQAAAAAAACsAAABzcmMvUnVsZXMvRnVuY3Rpb25zL0ltcGxvZGVGdW5jdGlvblJ1bGUucGhwAQoAAOtPo2kBCgAAQ8BSo6QBAAAAAAAALwAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvUmFuZG9tSW50UGFyYW1ldGVyc1J1bGUucGhwoQgAAOtPo2mhCAAAnv+mwaQBAAAAAAAALgAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvRnVuY3Rpb25BdHRyaWJ1dGVzUnVsZS5waHATAwAA60+jaRMDAADQf9P4pAEAAAAAAAAtAAAAc3JjL1J1bGVzL0Z1bmN0aW9ucy9DbG9zdXJlQXR0cmlidXRlc1J1bGUucGhwDgMAAOtPo2kOAwAAN2a/OaQBAAAAAAAAKAAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvQ2FsbFVzZXJGdW5jUnVsZS5waHDWCwAA60+jadYLAADy/KNLpAEAAAAAAAAsAAAAc3JjL1J1bGVzL0Z1bmN0aW9ucy9QcmludGZQYXJhbWV0ZXJzUnVsZS5waHBzDQAA60+jaXMNAADNRxQGpAEAAAAAAAA/AAAAc3JjL1J1bGVzL0Z1bmN0aW9ucy9JbnZhbGlkTGV4aWNhbFZhcmlhYmxlc0luQ2xvc3VyZVVzZVJ1bGUucGhwoQgAAOtPo2mhCAAAZM51iqQBAAAAAAAANAAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvQ2FsbFRvRnVuY3Rpb25QYXJhbWV0ZXJzUnVsZS5waHDqCgAA60+jaeoKAAAt5WwWpAEAAAAAAAA5AAAAc3JjL1J1bGVzL0Z1bmN0aW9ucy9Tb3J0UGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ1J1bGUucGhwEhMAAOtPo2kSEwAAMiVse6QBAAAAAAAALAAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvRGVmaW5lUGFyYW1ldGVyc1J1bGUucGhwugUAAOtPo2m6BQAAeICYDKQBAAAAAAAAJwAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvQXJyYXlGaWx0ZXJSdWxlLnBocPMSAADrT6Np8xIAADsumtOkAQAAAAAAADwAAABzcmMvUnVsZXMvRnVuY3Rpb25zL0Fycm93RnVuY3Rpb25SZXR1cm5OdWxsc2FmZUJ5UmVmUnVsZS5waHDyAwAA60+jafIDAAA2IIwMpAEAAAAAAAAzAAAAc3JjL1J1bGVzL0Z1bmN0aW9ucy9BcnJvd0Z1bmN0aW9uUmV0dXJuVHlwZVJ1bGUucGhw5QcAAOtPo2nlBwAAHVyoTaQBAAAAAAAAJgAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvUmV0dXJuVHlwZVJ1bGUucGhwKAYAAOtPo2koBgAAdCQ3z6QBAAAAAAAAPAAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvSW1wbG9kZVBhcmFtZXRlckNhc3RhYmxlVG9TdHJpbmdSdWxlLnBocPINAADrT6Np8g0AAJ2RpbWkAQAAAAAAADEAAABzcmMvUnVsZXMvRnVuY3Rpb25zL1ByaW50ZkFycmF5UGFyYW1ldGVyc1J1bGUucGhwhRgAAOtPo2mFGAAABxoI26QBAAAAAAAAPQAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvRXhpc3RpbmdDbGFzc2VzSW5DbG9zdXJlVHlwZWhpbnRzUnVsZS5waHBcBAAA60+jaVwEAAC2KJVspAEAAAAAAAA5AAAAc3JjL1J1bGVzL0Z1bmN0aW9ucy9NaXNzaW5nRnVuY3Rpb25SZXR1cm5UeXBlaGludFJ1bGUucGhwFwoAAOtPo2kXCgAAljjDOqQBAAAAAAAAKQAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvSW5uZXJGdW5jdGlvblJ1bGUucGhwZQMAAOtPo2llAwAARfy/bKQBAAAAAAAANgAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvRXhpc3RpbmdDbGFzc2VzSW5UeXBlaGludHNSdWxlLnBocLkFAADrT6NpuQUAAMD8186kAQAAAAAAADgAAABzcmMvUnVsZXMvRnVuY3Rpb25zL0R1cGxpY2F0ZUZ1bmN0aW9uRGVjbGFyYXRpb25SdWxlLnBocKUHAADrT6NppQcAABA30q2kAQAAAAAAAC8AAABzcmMvUnVsZXMvRnVuY3Rpb25zL1JlZGVmaW5lZFBhcmFtZXRlcnNSdWxlLnBocN0EAADrT6Np3QQAADTtnw6kAQAAAAAAACcAAABzcmMvUnVsZXMvRnVuY3Rpb25zL0FycmF5VmFsdWVzUnVsZS5waHBUDwAA60+jaVQPAADZGJoupAEAAAAAAAAtAAAAc3JjL1J1bGVzL0Z1bmN0aW9ucy9DbG9zdXJlUmV0dXJuVHlwZVJ1bGUucGhwQAgAAOtPo2lACAAAZqmCbqQBAAAAAAAAKQAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvQ2FsbENhbGxhYmxlc1J1bGUucGhwUBMAAOtPo2lQEwAA3BGeBqQBAAAAAAAAJAAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvUHJpbnRmSGVscGVyLnBocEAJAADrT6NpQAkAAKk/XHykAQAAAAAAAEMAAABzcmMvUnVsZXMvRnVuY3Rpb25zL0V4aXN0aW5nQ2xhc3Nlc0luQXJyb3dGdW5jdGlvblR5cGVoaW50c1J1bGUucGhw1QcAAOtPo2nVBwAAm1WgJKQBAAAAAAAARQAAAHNyYy9SdWxlcy9GdW5jdGlvbnMvQ2FsbFRvRnVuY3Rpb25TdGF0ZW1lbnRXaXRob3V0U2lkZUVmZmVjdHNSdWxlLnBocEgQAADrT6NpSBAAAK4npj6kAQAAAAAAADUAAABzcmMvUnVsZXMvRnVuY3Rpb25zL0NhbGxUb05vbkV4aXN0ZW50RnVuY3Rpb25SdWxlLnBocCcIAADrT6NpJwgAAKKHny6kAQAAAAAAACYAAABzcmMvUnVsZXMvR2VuZXJhdG9ycy9ZaWVsZFR5cGVSdWxlLnBocFUMAADrT6NpVQwAAL9iFBqkAQAAAAAAAC0AAABzcmMvUnVsZXMvR2VuZXJhdG9ycy9ZaWVsZEluR2VuZXJhdG9yUnVsZS5waHAiCAAA60+jaSIIAAB9IQ2KpAEAAAAAAAAqAAAAc3JjL1J1bGVzL0dlbmVyYXRvcnMvWWllbGRGcm9tVHlwZVJ1bGUucGhwIhQAAOtPo2kiFAAAp1GQ0qQBAAAAAAAAIAAAAHNyYy9SdWxlcy9EZWJ1Zy9EdW1wVHlwZVJ1bGUucGhwngUAAOtPo2meBQAA38HL06QBAAAAAAAAIgAAAHNyYy9SdWxlcy9EZWJ1Zy9EZWJ1Z1Njb3BlUnVsZS5waHBIBgAA60+jaUgGAAC+jwmmpAEAAAAAAAAiAAAAc3JjL1J1bGVzL0RlYnVnL0ZpbGVBc3NlcnRSdWxlLnBocLMXAADrT6NpsxcAAH684xSkAQAAAAAAACYAAABzcmMvUnVsZXMvRGVidWcvRHVtcFBocERvY1R5cGVSdWxlLnBocCoGAADrT6NpKgYAAHpCGuSkAQAAAAAAACwAAABzcmMvUnVsZXMvUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ0NoZWNrLnBocGoIAADrT6NpaggAAJgATOOkAQAAAAAAACUAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMjUucGhwYAUAAOtPo2lgBQAAo5Er/aQBAAAAAAAAJQAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEyMS5waHAHBAAA60+jaQcEAAAy7w3cpAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNjkucGhw+wIAAOtPo2n7AgAAUiXJ6aQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjg1LnBocM0DAADrT6NpzQMAAJNAOQGkAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I5Ny5waHCFAgAA60+jaYUCAAAKxvxCpAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMjEucGhwjQMAAOtPo2mNAwAAUiN4naQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjgzLnBocCIDAADrT6NpIgMAANX3s1OkAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I0My5waHCiAwAA60+jaaIDAACumVcSpAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yODEucGhwdAIAAOtPo2l0AgAAyIOIZaQBAAAAAAAAIwAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEucGhwYQEAAOtPo2lhAQAA0WnvfqQBAAAAAAAAJQAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEwNS5waHA1AwAA60+jaTUDAACKYjCRpAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNDkucGhwFwMAAOtPo2kXAwAAK92rYKQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjE3LnBocDQCAADrT6NpNAIAAADIuQ6kAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IyMy5waHA7BAAA60+jaTsEAACcW0SzpAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMzUucGhw8wIAAOtPo2nzAgAAaP6TIqQBAAAAAAAAJQAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjExNS5waHAGBAAA60+jaQYEAAD39gp8pAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMjkucGhwPAQAAOtPo2k8BAAARhL9pqQBAAAAAAAAJQAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEwOS5waHCOBAAA60+jaY4EAAD3kjY6pAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNTcucGhwxgMAAOtPo2nGAwAAY72mIKQBAAAAAAAAIwAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjcucGhwaAMAAOtPo2loAwAAPE8uyaQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEzLnBocGoDAADrT6NpagMAAJyVvMWkAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I5NS5waHAqBQAA60+jaSoFAADRJu9KpAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNjUucGhwogEAAOtPo2miAQAAjvQYPKQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjM5LnBocEwEAADrT6NpTAQAAMnYDPWkAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IzNy5waHCeAwAA60+jaZ4DAACFYg32pAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMzEucGhw6gQAAOtPo2nqBAAA2NfItaQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjg3LnBocHsEAADrT6NpewQAAIJvB1mkAQAAAAAAACMAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I5LnBocBACAADrT6NpEAIAAHEm3/GkAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxOS5waHDiAgAA60+jaeICAAAufs5VpAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yOTEucGhw0QMAAOtPo2nRAwAAgArZKqQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjI3LnBocJEDAADrT6NpkQMAAKtHDjqkAQAAAAAAACUAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMDcucGhw4wMAAOtPo2njAwAAVSmZmqQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjUxLnBocMUDAADrT6NpxQMAALgVMP2kAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I3MS5waHCpAwAA60+jaakDAADis6C5pAEAAAAAAAAlAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTExLnBocDwFAADrT6NpPAUAAGcwITqkAQAAAAAAACUAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMjcucGhwDgYAAOtPo2kOBgAAqFZgTKQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjQ1LnBocE0EAADrT6NpTQQAAK6qO4mkAQAAAAAAACMAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I1LnBocLoCAADrT6NpugIAAGu6xyqkAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I4OS5waHAjAwAA60+jaSMDAAD2bIctpAEAAAAAAAAlAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTIzLnBocLUEAADrT6NptQQAABsak5GkAQAAAAAAACMAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IzLnBocA8CAADrT6NpDwIAAJTdYGCkAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I1OS5waHB0BAAA60+jaXQEAAAQ77T8pAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTUucGhwGAQAAOtPo2kYBAAA3sIf+6QBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjI1LnBocOMCAADrT6Np4wIAAC2qJMWkAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I2Ny5waHBQAgAA60+jaVACAAD41LbfpAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMzMucGhwRQIAAOtPo2lFAgAA6gq1TaQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjc5LnBocFgEAADrT6NpWAQAAFkLKoukAQAAAAAAACUAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMDEucGhw3wMAAOtPo2nfAwAA6t6ueKQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjkzLnBocHwEAADrT6NpfAQAAPZKDwqkAQAAAAAAACUAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMDMucGhwjQQAAOtPo2mNBAAAwvyI/qQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjQ3LnBocPsEAADrT6Np+wQAABDH7zGkAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I2My5waHDNBQAA60+jac0FAABpTByrpAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNzcucGhwqgMAAOtPo2mqAwAAhkZU0KQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjYxLnBocB8FAADrT6NpHwUAALjNeVmkAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I0MS5waHD0AgAA60+jafQCAAB5e3qbpAEAAAAAAAAlAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTE5LnBocF8FAADrT6NpXwUAAHmx/OmkAQAAAAAAACUAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMTMucGhwWAMAAOtPo2lYAwAAa0/InKQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjUzLnBocHAEAADrT6NpcAQAAEqIKvSkAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I3NS5waHD/AgAA60+jaf8CAADkjoAXpAEAAAAAAAAkAAAAc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNTUucGhwHgUAAOtPo2keBQAAuXSBaaQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjk5LnBocDMDAADrT6NpMwMAAD8IuJukAQAAAAAAACUAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMTcucGhwsQQAAOtPo2mxBAAAC/RkPqQBAAAAAAAAJAAAAHNyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjExLnBocL8CAADrT6NpvwIAAIIzg0qkAQAAAAAAACQAAABzcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I3My5waHBRAgAA60+jaVECAABVg3E8pAEAAAAAAAAqAAAAc3JjL1J1bGVzL1RyYWl0cy9Db25zdGFudHNJblRyYWl0c1J1bGUucGhwKgQAAOtPo2kqBAAAndj42aQBAAAAAAAAJgAAAHNyYy9SdWxlcy9UcmFpdHMvVHJhaXRVc2VDb2xsZWN0b3IucGhwsgIAAOtPo2myAgAAofITOKQBAAAAAAAALgAAAHNyYy9SdWxlcy9UcmFpdHMvVHJhaXREZWNsYXJhdGlvbkNvbGxlY3Rvci5waHBbAgAA60+jaVsCAACRueuGpAEAAAAAAAAyAAAAc3JjL1J1bGVzL1RyYWl0cy9Db25mbGljdGluZ1RyYWl0Q29uc3RhbnRzUnVsZS5waHCTIwAA60+jaZMjAAAkF1DXpAEAAAAAAAApAAAAc3JjL1J1bGVzL1RyYWl0cy9Ob3RBbmFseXNlZFRyYWl0UnVsZS5waHCLBgAA60+jaYsGAAB4XuYqpAEAAAAAAAAwAAAAc3JjL1J1bGVzL0NvbnN0YW50cy9DbGFzc0FzQ2xhc3NDb25zdGFudFJ1bGUucGhwfQMAAOtPo2l9AwAAh78ZuKQBAAAAAAAARQAAAHNyYy9SdWxlcy9Db25zdGFudHMvTGF6eUFsd2F5c1VzZWRDbGFzc0NvbnN0YW50c0V4dGVuc2lvblByb3ZpZGVyLnBocCEDAADrT6NpIQMAAO9q/uWkAQAAAAAAADAAAABzcmMvUnVsZXMvQ29uc3RhbnRzL01hZ2ljQ29uc3RhbnRDb250ZXh0UnVsZS5waHB2CAAA60+jaXYIAADJuvPnpAEAAAAAAAA0AAAAc3JjL1J1bGVzL0NvbnN0YW50cy9OYXRpdmVUeXBlZENsYXNzQ29uc3RhbnRSdWxlLnBocA8EAADrT6NpDwQAAHjo+EykAQAAAAAAAEEAAABzcmMvUnVsZXMvQ29uc3RhbnRzL0Fsd2F5c1VzZWRDbGFzc0NvbnN0YW50c0V4dGVuc2lvblByb3ZpZGVyLnBocEUBAADrT6NpRQEAAFKr4T+kAQAAAAAAACQAAABzcmMvUnVsZXMvQ29uc3RhbnRzL0NvbnN0YW50UnVsZS5waHDRAgAA60+jadECAABvXtqppAEAAAAAAAA4AAAAc3JjL1J1bGVzL0NvbnN0YW50cy9WYWx1ZUFzc2lnbmVkVG9DbGFzc0NvbnN0YW50UnVsZS5waHCeDwAA60+jaZ4PAACAt1nupAEAAAAAAAA1AAAAc3JjL1J1bGVzL0NvbnN0YW50cy9EeW5hbWljQ2xhc3NDb25zdGFudEZldGNoUnVsZS5waHCfBwAA60+jaZ8HAAAww2GwpAEAAAAAAAAuAAAAc3JjL1J1bGVzL0NvbnN0YW50cy9PdmVycmlkaW5nQ29uc3RhbnRSdWxlLnBocBoYAADrT6NpGhgAAFq/a+2kAQAAAAAAACkAAABzcmMvUnVsZXMvQ29uc3RhbnRzL0ZpbmFsQ29uc3RhbnRSdWxlLnBocO8DAADrT6Np7wMAAGEyq6SkAQAAAAAAADkAAABzcmMvUnVsZXMvQ29uc3RhbnRzL0Fsd2F5c1VzZWRDbGFzc0NvbnN0YW50c0V4dGVuc2lvbi5waHC/AgAA60+jab8CAADeoQVypAEAAAAAAAA4AAAAc3JjL1J1bGVzL0NvbnN0YW50cy9NaXNzaW5nQ2xhc3NDb25zdGFudFR5cGVoaW50UnVsZS5waHBFDAAA60+jaUUMAAAKw+LdpAEAAAAAAAAxAAAAc3JjL1J1bGVzL09wZXJhdG9ycy9JbnZhbGlkVW5hcnlPcGVyYXRpb25SdWxlLnBocI8LAADrT6NpjwsAAJiWVWCkAQAAAAAAADIAAABzcmMvUnVsZXMvT3BlcmF0b3JzL0ludmFsaWRCaW5hcnlPcGVyYXRpb25SdWxlLnBocCMQAADrT6NpIxAAACc4klCkAQAAAAAAADYAAABzcmMvUnVsZXMvT3BlcmF0b3JzL0ludmFsaWRDb21wYXJpc29uT3BlcmF0aW9uUnVsZS5waHABFQAA60+jaQEVAAAIE88BpAEAAAAAAAAyAAAAc3JjL1J1bGVzL09wZXJhdG9ycy9JbnZhbGlkSW5jRGVjT3BlcmF0aW9uUnVsZS5waHCgDgAA60+jaaAOAABuKWnEpAEAAAAAAAAsAAAAc3JjL1J1bGVzL09wZXJhdG9ycy9JbnZhbGlkQXNzaWduVmFyUnVsZS5waHAFCgAA60+jaQUKAAD8kFuGpAEAAAAAAAAXAAAAc3JjL1J1bGVzL1J1bGVFcnJvci5waHCKAAAA60+jaYoAAAB0QPrQpAEAAAAAAAAWAAAAc3JjL1J1bGVzL1JlZ2lzdHJ5LnBocCcBAADrT6NpJwEAANf58A6kAQAAAAAAAD4AAABzcmMvUnVsZXMvRGVhZENvZGUvQ29uc3RydWN0b3JXaXRob3V0SW1wdXJlUG9pbnRzQ29sbGVjdG9yLnBocA4FAADrT6NpDgUAAKRlu4ikAQAAAAAAADYAAABzcmMvUnVsZXMvRGVhZENvZGUvUG9zc2libHlQdXJlTWV0aG9kQ2FsbENvbGxlY3Rvci5waHDcBwAA60+jadwHAADLkh2KpAEAAAAAAAAwAAAAc3JjL1J1bGVzL0RlYWRDb2RlL1VudXNlZFByaXZhdGVDb25zdGFudFJ1bGUucGhwVA4AAOtPo2lUDgAAmzgQS6QBAAAAAAAAQwAAAHNyYy9SdWxlcy9EZWFkQ29kZS9DYWxsVG9NZXRob2RTdGF0ZW1lbnRXaXRob3V0SW1wdXJlUG9pbnRzUnVsZS5waHBoCAAA60+jaWgIAACJyqngpAEAAAAAAAA7AAAAc3JjL1J1bGVzL0RlYWRDb2RlL0Z1bmN0aW9uV2l0aG91dEltcHVyZVBvaW50c0NvbGxlY3Rvci5waHAUBQAA60+jaRQFAABp+QYUpAEAAAAAAABFAAAAc3JjL1J1bGVzL0RlYWRDb2RlL0NhbGxUb0Z1bmN0aW9uU3RhdGVtZW50V2l0aG91dEltcHVyZVBvaW50c1J1bGUucGhw0wUAAOtPo2nTBQAAfOGk4qQBAAAAAAAAJQAAAHNyYy9SdWxlcy9EZWFkQ29kZS9CZXR0ZXJOb29wUnVsZS5waHBLDwAA60+jaUsPAACYt45cpAEAAAAAAAAuAAAAc3JjL1J1bGVzL0RlYWRDb2RlL1VudXNlZFByaXZhdGVNZXRob2RSdWxlLnBocKAdAADrT6NpoB0AABoyuhukAQAAAAAAADYAAABzcmMvUnVsZXMvRGVhZENvZGUvUG9zc2libHlQdXJlU3RhdGljQ2FsbENvbGxlY3Rvci5waHCOBQAA60+jaY4FAADvnWqbpAEAAAAAAAAfAAAAc3JjL1J1bGVzL0RlYWRDb2RlL05vb3BSdWxlLnBocPkHAADrT6Np+QcAABz44I6kAQAAAAAAAC8AAABzcmMvUnVsZXMvRGVhZENvZGUvUG9zc2libHlQdXJlTmV3Q29sbGVjdG9yLnBocDMGAADrT6NpMwYAAOQG/dmkAQAAAAAAADQAAABzcmMvUnVsZXMvRGVhZENvZGUvUG9zc2libHlQdXJlRnVuY0NhbGxDb2xsZWN0b3IucGhwgAUAAOtPo2mABQAAK2ZZG6QBAAAAAAAASQAAAHNyYy9SdWxlcy9EZWFkQ29kZS9DYWxsVG9TdGF0aWNNZXRob2RTdGF0ZW1lbnRXaXRob3V0SW1wdXJlUG9pbnRzUnVsZS5waHD4BwAA60+jafgHAACedbjmpAEAAAAAAAA5AAAAc3JjL1J1bGVzL0RlYWRDb2RlL01ldGhvZFdpdGhvdXRJbXB1cmVQb2ludHNDb2xsZWN0b3IucGhwwQUAAOtPo2nBBQAAore8qaQBAAAAAAAALwAAAHNyYy9SdWxlcy9EZWFkQ29kZS9VbnJlYWNoYWJsZVN0YXRlbWVudFJ1bGUucGhwkQIAAOtPo2mRAgAAIRrwqaQBAAAAAAAASAAAAHNyYy9SdWxlcy9EZWFkQ29kZS9DYWxsVG9Db25zdHJ1Y3RvclN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlLnBocOwFAADrT6Np7AUAACDcQrqkAQAAAAAAADAAAABzcmMvUnVsZXMvRGVhZENvZGUvVW51c2VkUHJpdmF0ZVByb3BlcnR5UnVsZS5waHBDIQAA60+jaUMhAAA1p5MwpAEAAAAAAAA6AAAAc3JjL1J1bGVzL01ldGhvZHMvTWlzc2luZ01hZ2ljU2VyaWFsaXphdGlvbk1ldGhvZHNSdWxlLnBocBgKAADrT6NpGAoAAAcp9vCkAQAAAAAAAEcAAABzcmMvUnVsZXMvTWV0aG9kcy9DYWxsVG9TdGF0aWNNZXRob2RTdGF0ZW1lbnRXaXRob3V0U2lkZUVmZmVjdHNSdWxlLnBocEkMAADrT6NpSQwAAJXXCQykAQAAAAAAADoAAABzcmMvUnVsZXMvTWV0aG9kcy9BYnN0cmFjdE1ldGhvZEluTm9uQWJzdHJhY3RDbGFzc1J1bGUucGhwUwcAAOtPo2lTBwAAGSCcGKQBAAAAAAAAMgAAAHNyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RTZWxmT3V0VHlwZVJ1bGUucGhwTQoAAOtPo2lNCgAAcH4RE6QBAAAAAAAANQAAAHNyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RJbXBsZW1lbnRhdGlvblJ1bGUucGhwpwYAAOtPo2mnBgAAfaIaxaQBAAAAAAAAOgAAAHNyYy9SdWxlcy9NZXRob2RzL0luY29tcGF0aWJsZURlZmF1bHRQYXJhbWV0ZXJUeXBlUnVsZS5waHAcCAAA60+jaRwIAACQlvPApAEAAAAAAAAvAAAAc3JjL1J1bGVzL01ldGhvZHMvQ29uc3RydWN0b3JSZXR1cm5UeXBlUnVsZS5waHCYBgAA60+jaZgGAAA6bZOppAEAAAAAAAA1AAAAc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kVmlzaWJpbGl0eUluSW50ZXJmYWNlUnVsZS5waHA/BAAA60+jaT8EAAC+BZWypAEAAAAAAAAlAAAAc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kQ2FsbENoZWNrLnBocOwUAADrT6Np7BQAALUcBbSkAQAAAAAAADYAAABzcmMvUnVsZXMvTWV0aG9kcy9JbGxlZ2FsQ29uc3RydWN0b3JNZXRob2RDYWxsUnVsZS5waHDxAgAA60+jafECAAABx3g8pAEAAAAAAAAoAAAAc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kQ2FsbGFibGVSdWxlLnBocA8IAADrT6NpDwgAAF6Tb06kAQAAAAAAADYAAABzcmMvUnVsZXMvTWV0aG9kcy9JbGxlZ2FsQ29uc3RydWN0b3JTdGF0aWNDYWxsUnVsZS5waHD8CQAA60+jafwJAAAlZ8T5pAEAAAAAAAA4AAAAc3JjL1J1bGVzL01ldGhvZHMvTWlzc2luZ01ldGhvZFBhcmFtZXRlclR5cGVoaW50UnVsZS5waHCKEQAA60+jaYoRAADMQO5ipAEAAAAAAAA1AAAAc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kUGFyYW1ldGVyQ29tcGFyaXNvbkhlbHBlci5waHD+OAAA60+jaf44AAAW18w/pAEAAAAAAAAvAAAAc3JjL1J1bGVzL01ldGhvZHMvQ29uc2lzdGVudENvbnN0cnVjdG9yUnVsZS5waHA2BgAA60+jaTYGAADEPrHQpAEAAAAAAAAqAAAAc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kQXR0cmlidXRlc1J1bGUucGhwDwMAAOtPo2kPAwAAsRxVOaQBAAAAAAAAJQAAAHNyYy9SdWxlcy9NZXRob2RzL0NhbGxNZXRob2RzUnVsZS5waHAfDAAA60+jaR8MAAD0V2KNpAEAAAAAAAArAAAAc3JjL1J1bGVzL01ldGhvZHMvQ2FsbFN0YXRpY01ldGhvZHNSdWxlLnBocKcMAADrT6NppwwAAIja04akAQAAAAAAAC8AAABzcmMvUnVsZXMvTWV0aG9kcy9BYnN0cmFjdFByaXZhdGVNZXRob2RSdWxlLnBocOIEAADrT6Np4gQAAH4pq7KkAQAAAAAAACoAAABzcmMvUnVsZXMvTWV0aG9kcy9PdmVycmlkaW5nTWV0aG9kUnVsZS5waHCqPwAA60+jaao/AAAN98klpAEAAAAAAAA7AAAAc3JjL1J1bGVzL01ldGhvZHMvTGF6eUFsd2F5c1VzZWRNZXRob2RFeHRlbnNpb25Qcm92aWRlci5waHCLAgAA60+jaYsCAACq6u3cpAEAAAAAAAA3AAAAc3JjL1J1bGVzL01ldGhvZHMvQWx3YXlzVXNlZE1ldGhvZEV4dGVuc2lvblByb3ZpZGVyLnBocCkBAADrT6NpKQEAALn9s0WkAQAAAAAAAEYAAABzcmMvUnVsZXMvTWV0aG9kcy9DYWxsVG9Db25zdHJ1Y3RvclN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUucGhwtQgAAOtPo2m1CAAA0YbqkaQBAAAAAAAAJAAAAHNyYy9SdWxlcy9NZXRob2RzL1JldHVyblR5cGVSdWxlLnBocKwOAADrT6NprA4AALdE24qkAQAAAAAAAC4AAABzcmMvUnVsZXMvTWV0aG9kcy9TdGF0aWNNZXRob2RDYWxsYWJsZVJ1bGUucGhwPAgAAOtPo2k8CAAAqIUEbqQBAAAAAAAANQAAAHNyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RSZXR1cm5UeXBlaGludFJ1bGUucGhwGQwAAOtPo2kZDAAAAGc3+qQBAAAAAAAANAAAAHNyYy9SdWxlcy9NZXRob2RzL0V4aXN0aW5nQ2xhc3Nlc0luVHlwZWhpbnRzUnVsZS5waHDtBgAA60+jae0GAABqHzMKpAEAAAAAAAAvAAAAc3JjL1J1bGVzL01ldGhvZHMvQWx3YXlzVXNlZE1ldGhvZEV4dGVuc2lvbi5waHBLAgAA60+jaUsCAACQR+1lpAEAAAAAAAAsAAAAc3JjL1J1bGVzL01ldGhvZHMvRmluYWxQcml2YXRlTWV0aG9kUnVsZS5waHATBQAA60+jaRMFAACPJ9+ZpAEAAAAAAAAsAAAAc3JjL1J1bGVzL01ldGhvZHMvTnVsbHNhZmVNZXRob2RDYWxsUnVsZS5waHBwAwAA60+jaXADAADZdSjFpAEAAAAAAAA9AAAAc3JjL1J1bGVzL01ldGhvZHMvRGlyZWN0QWx3YXlzVXNlZE1ldGhvZEV4dGVuc2lvblByb3ZpZGVyLnBocBgCAADrT6NpGAIAAMtBtuOkAQAAAAAAADgAAABzcmMvUnVsZXMvTWV0aG9kcy9DYWxsUHJpdmF0ZU1ldGhvZFRocm91Z2hTdGF0aWNSdWxlLnBocNYFAADrT6Np1gUAADF5DfqkAQAAAAAAAEEAAABzcmMvUnVsZXMvTWV0aG9kcy9DYWxsVG9NZXRob2RTdGF0ZW1lbnRXaXRob3V0U2lkZUVmZmVjdHNSdWxlLnBocPwJAADrT6Np/AkAABE+W9CkAQAAAAAAACkAAABzcmMvUnVsZXMvTWV0aG9kcy9NZXRob2RTaWduYXR1cmVSdWxlLnBocAguAADrT6NpCC4AAK7CKVukAQAAAAAAACsAAABzcmMvUnVsZXMvTWV0aG9kcy9TdGF0aWNNZXRob2RDYWxsQ2hlY2sucGhwricAAOtPo2muJwAAX+JQEaQBAAAAAAAAIQAAAHNyYy9SdWxlcy9OYW1lcy9Vc2VkTmFtZXNSdWxlLnBocLoRAADrT6NpuhEAAHbzmOSkAQAAAAAAACwAAABzcmMvUnVsZXMvS2V5d29yZHMvUmVxdWlyZUZpbGVFeGlzdHNSdWxlLnBocBUPAADrT6NpFQ8AAJMRKJikAQAAAAAAAC4AAABzcmMvUnVsZXMvS2V5d29yZHMvQ29udGludWVCcmVha0luTG9vcFJ1bGUucGhwqggAAOtPo2mqCAAAijCocqQBAAAAAAAALQAAAHNyYy9SdWxlcy9LZXl3b3Jkcy9EZWNsYXJlU3RyaWN0VHlwZXNSdWxlLnBocKYHAADrT6NppgcAAIhbrUKkAQAAAAAAACsAAABzcmMvUnVsZXMvVW51c2VkRnVuY3Rpb25QYXJhbWV0ZXJzQ2hlY2sucGhwzQ0AAOtPo2nNDQAAypC71KQBAAAAAAAAHQAAAHNyYy9SdWxlcy9Gb3VuZFR5cGVSZXN1bHQucGhw8wQAAOtPo2nzBAAABGhbZ6QBAAAAAAAAIgAAAHNyYy9SdWxlcy9NaXNzaW5nVHlwZWhpbnRDaGVjay5waHDoHAAA60+jaegcAAByvWO6pAEAAAAAAAAaAAAAc3JjL1J1bGVzL0xhenlSZWdpc3RyeS5waHAfBwAA60+jaR8HAABvE8+SpAEAAAAAAAAfAAAAc3JjL1J1bGVzL0NsYXNzTmFtZU5vZGVQYWlyLnBocBUCAADrT6NpFQIAAIgkaM2kAQAAAAAAAB0AAABzcmMvUnVsZXMvQXR0cmlidXRlc0NoZWNrLnBocGwfAADrT6NpbB8AANTKRlukAQAAAAAAAEIAAABzcmMvUnVsZXMvRXhjZXB0aW9ucy9NaXNzaW5nQ2hlY2tlZEV4Y2VwdGlvbkluTWV0aG9kVGhyb3dzUnVsZS5waHCpBQAA60+jaakFAABnugkZpAEAAAAAAAA1AAAAc3JjL1J1bGVzL0V4Y2VwdGlvbnMvVG9vV2lkZUZ1bmN0aW9uVGhyb3dUeXBlUnVsZS5waHBaBQAA60+jaVoFAABT2rGdpAEAAAAAAAAqAAAAc3JjL1J1bGVzL0V4Y2VwdGlvbnMvVGhyb3dFeHByVHlwZVJ1bGUucGhwVgYAAOtPo2lWBgAATSgQS6QBAAAAAAAANQAAAHNyYy9SdWxlcy9FeGNlcHRpb25zL0NhdWdodEV4Y2VwdGlvbkV4aXN0ZW5jZVJ1bGUucGhwFgkAAOtPo2kWCQAAfqR3KaQBAAAAAAAARQAAAHNyYy9SdWxlcy9FeGNlcHRpb25zL1Rocm93c1ZvaWRGdW5jdGlvbldpdGhFeHBsaWNpdFRocm93UG9pbnRSdWxlLnBocMEJAADrT6NpwQkAANOXvAGkAQAAAAAAADMAAABzcmMvUnVsZXMvRXhjZXB0aW9ucy9Ub29XaWRlTWV0aG9kVGhyb3dUeXBlUnVsZS5waHD5BwAA60+jafkHAAC3X34apAEAAAAAAAA9AAAAc3JjL1J1bGVzL0V4Y2VwdGlvbnMvTWlzc2luZ0NoZWNrZWRFeGNlcHRpb25JblRocm93c0NoZWNrLnBocOIHAADrT6Np4gcAAJl+tqGkAQAAAAAAAC4AAABzcmMvUnVsZXMvRXhjZXB0aW9ucy9Ob25jYXB0dXJpbmdDYXRjaFJ1bGUucGhwGAQAAOtPo2kYBAAAFySchKQBAAAAAAAAQwAAAHNyYy9SdWxlcy9FeGNlcHRpb25zL1Rocm93c1ZvaWRNZXRob2RXaXRoRXhwbGljaXRUaHJvd1BvaW50UnVsZS5waHDrCQAA60+jaesJAAAv1npopAEAAAAAAABEAAAAc3JjL1J1bGVzL0V4Y2VwdGlvbnMvTWlzc2luZ0NoZWNrZWRFeGNlcHRpb25JbkZ1bmN0aW9uVGhyb3dzUnVsZS5waHB9BQAA60+jaX0FAADvAOeFpAEAAAAAAAAsAAAAc3JjL1J1bGVzL0V4Y2VwdGlvbnMvVGhyb3dFeHByZXNzaW9uUnVsZS5waHCKAwAA60+jaYoDAADLXX+MpAEAAAAAAAAuAAAAc3JjL1J1bGVzL0V4Y2VwdGlvbnMvVG9vV2lkZVRocm93VHlwZUNoZWNrLnBocJ8EAADrT6NpnwQAAOccVtGkAQAAAAAAAC4AAABzcmMvUnVsZXMvRXhjZXB0aW9ucy9FeGNlcHRpb25UeXBlUmVzb2x2ZXIucGhw6AQAAOtPo2noBAAAgXPoGaQBAAAAAAAANQAAAHNyYy9SdWxlcy9FeGNlcHRpb25zL0RlZmF1bHRFeGNlcHRpb25UeXBlUmVzb2x2ZXIucGhwnQ4AAOtPo2mdDgAATwTRG6QBAAAAAAAANwAAAHNyYy9SdWxlcy9FeGNlcHRpb25zL0NhdGNoV2l0aFVudGhyb3duRXhjZXB0aW9uUnVsZS5waHBUCAAA60+jaVQIAACxWIMQpAEAAAAAAAA6AAAAc3JjL1J1bGVzL0V4Y2VwdGlvbnMvT3ZlcndyaXR0ZW5FeGl0UG9pbnRCeUZpbmFsbHlSdWxlLnBocCQHAADrT6NpJAcAAL6iOX2kAQAAAAAAAEIAAABzcmMvUnVsZXMvVG9vV2lkZVR5cGVoaW50cy9Ub29XaWRlRnVuY3Rpb25QYXJhbWV0ZXJPdXRUeXBlUnVsZS5waHDQAwAA60+jadADAABn/fiXpAEAAAAAAAA+AAAAc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZU1ldGhvZFJldHVyblR5cGVoaW50UnVsZS5waHBNEAAA60+jaU0QAAC722jdpAEAAAAAAABAAAAAc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZUZ1bmN0aW9uUmV0dXJuVHlwZWhpbnRSdWxlLnBocIEKAADrT6NpgQoAAKfoxJSkAQAAAAAAAEAAAABzcmMvUnVsZXMvVG9vV2lkZVR5cGVoaW50cy9Ub29XaWRlTWV0aG9kUGFyYW1ldGVyT3V0VHlwZVJ1bGUucGhw9AMAAOtPo2n0AwAAzYnI9aQBAAAAAAAANgAAAHNyYy9SdWxlcy9Ub29XaWRlVHlwZWhpbnRzL1Rvb1dpZGVQcm9wZXJ0eVR5cGVSdWxlLnBocNATAADrT6Np0BMAAAfkOyekAQAAAAAAAEUAAABzcmMvUnVsZXMvVG9vV2lkZVR5cGVoaW50cy9Ub29XaWRlQXJyb3dGdW5jdGlvblJldHVyblR5cGVoaW50UnVsZS5waHCSBgAA60+jaZIGAABdClfupAEAAAAAAAA7AAAAc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZVBhcmFtZXRlck91dFR5cGVDaGVjay5waHA/DQAA60+jaT8NAABvHql8pAEAAAAAAAA/AAAAc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZUNsb3N1cmVSZXR1cm5UeXBlaGludFJ1bGUucGhw4AgAAOtPo2ngCAAAaQql0KQBAAAAAAAAIwAAAHNyYy9SdWxlcy9Ob25JZ25vcmFibGVSdWxlRXJyb3IucGhwjAAAAOtPo2mMAAAANvN5zKQBAAAAAAAAHAAAAHNyYy9SdWxlcy9DYXN0L1ByaW50UnVsZS5waHBZBQAA60+jaVkFAABRZqvCpAEAAAAAAAAgAAAAc3JjL1J1bGVzL0Nhc3QvVW5zZXRDYXN0UnVsZS5waHB/AwAA60+jaX8DAADzknzSpAEAAAAAAAAiAAAAc3JjL1J1bGVzL0Nhc3QvSW52YWxpZENhc3RSdWxlLnBocN8LAADrT6Np3wsAACiJ53mkAQAAAAAAABsAAABzcmMvUnVsZXMvQ2FzdC9FY2hvUnVsZS5waHDmBQAA60+jaeYFAADf4nYVpAEAAAAAAAAyAAAAc3JjL1J1bGVzL0Nhc3QvSW52YWxpZFBhcnRPZkVuY2Fwc2VkU3RyaW5nUnVsZS5waHCxBwAA60+jabEHAAC8PLDxpAEAAAAAAAAmAAAAc3JjL1J1bGVzL1BsYXlncm91bmQvTm9QaHBDb2RlUnVsZS5waHBWAwAA60+jaVYDAAA6RQ3UpAEAAAAAAAAqAAAAc3JjL1J1bGVzL1BsYXlncm91bmQvRnVuY3Rpb25OZXZlclJ1bGUucGhwVQUAAOtPo2lVBQAAztF72aQBAAAAAAAAKAAAAHNyYy9SdWxlcy9QbGF5Z3JvdW5kL05ldmVyUnVsZUhlbHBlci5waHC9AwAA60+jab0DAABAzeIupAEAAAAAAAAoAAAAc3JjL1J1bGVzL1BsYXlncm91bmQvTWV0aG9kTmV2ZXJSdWxlLnBocHcFAADrT6NpdwUAAJNdcg+kAQAAAAAAAC0AAABzcmMvUnVsZXMvUGxheWdyb3VuZC9Ob3RBbmFseXNlZFRyYWl0UnVsZS5waHCHBgAA60+jaYcGAADeWsqGpAEAAAAAAAAbAAAAc3JjL1J1bGVzL0ZpbGVSdWxlRXJyb3IucGhw3wAAAOtPo2nfAAAAIeGVdqQBAAAAAAAAGgAAAHNyYy9SdWxlcy9UaXBSdWxlRXJyb3IucGhwqgAAAOtPo2mqAAAA88MGfKQBAAAAAAAAMgAAAHNyYy9SdWxlcy9QaHBEb2MvV3JvbmdWYXJpYWJsZU5hbWVJblZhclRhZ1J1bGUucGhwszYAAOtPo2mzNgAAbBiyYaQBAAAAAAAALQAAAHNyYy9SdWxlcy9QaHBEb2MvSW52YWxpZFBIUFN0YW5Eb2NUYWdSdWxlLnBocKAOAADrT6NpoA4AAPdhQvGkAQAAAAAAACUAAABzcmMvUnVsZXMvUGhwRG9jL01ldGhvZEFzc2VydFJ1bGUucGhwiAMAAOtPo2mIAwAApc+HE6QBAAAAAAAAMAAAAHNyYy9SdWxlcy9QaHBEb2MvSW5jb21wYXRpYmxlU2VsZk91dFR5cGVSdWxlLnBocGQNAADrT6NpZA0AAIoW90+kAQAAAAAAADkAAABzcmMvUnVsZXMvUGhwRG9jL1JlcXVpcmVJbXBsZW1lbnRzRGVmaW5pdGlvblRyYWl0UnVsZS5waHCuCwAA60+jaa4LAABx/qxmpAEAAAAAAAAlAAAAc3JjL1J1bGVzL1BocERvYy9Bc3NlcnRSdWxlSGVscGVyLnBocKYlAADrT6NppiUAAHbjm1qkAQAAAAAAACcAAABzcmMvUnVsZXMvUGhwRG9jL0Z1bmN0aW9uQXNzZXJ0UnVsZS5waHCJAwAA60+jaYkDAADsVR/WpAEAAAAAAAA0AAAAc3JjL1J1bGVzL1BocERvYy9NZXRob2RDb25kaXRpb25hbFJldHVyblR5cGVSdWxlLnBocJIDAADrT6NpkgMAACHMt9ykAQAAAAAAACgAAABzcmMvUnVsZXMvUGhwRG9jL1JlcXVpcmVFeHRlbmRzQ2hlY2sucGhwRAsAAOtPo2lECwAAEAXzNaQBAAAAAAAAMQAAAHNyYy9SdWxlcy9QaHBEb2MvSW52YWxpZFRocm93c1BocERvY1ZhbHVlUnVsZS5waHDOCwAA60+jac4LAAAY+COFpAEAAAAAAAA3AAAAc3JjL1J1bGVzL1BocERvYy9JbmNvbXBhdGlibGVQcm9wZXJ0eVBocERvY1R5cGVSdWxlLnBocBsTAADrT6NpGxMAAL0HqN6kAQAAAAAAADYAAABzcmMvUnVsZXMvUGhwRG9jL0Z1bmN0aW9uQ29uZGl0aW9uYWxSZXR1cm5UeXBlUnVsZS5waHCRAwAA60+jaZEDAAChgaFGpAEAAAAAAAA0AAAAc3JjL1J1bGVzL1BocERvYy9Db25kaXRpb25hbFJldHVyblR5cGVSdWxlSGVscGVyLnBocMYTAADrT6NpxhMAAHkVxpCkAQAAAAAAAC4AAABzcmMvUnVsZXMvUGhwRG9jL0dlbmVyaWNDYWxsYWJsZVJ1bGVIZWxwZXIucGhw9A8AAOtPo2n0DwAADbYPB6QBAAAAAAAAMAAAAHNyYy9SdWxlcy9QaHBEb2MvSW52YWxpZFBocERvY1ZhclRhZ1R5cGVSdWxlLnBocAcaAADrT6NpBxoAAFHc1aOkAQAAAAAAADYAAABzcmMvUnVsZXMvUGhwRG9jL1JlcXVpcmVFeHRlbmRzRGVmaW5pdGlvblRyYWl0UnVsZS5waHANBQAA60+jaQ0FAABGQ+g9pAEAAAAAAAA8AAAAc3JjL1J1bGVzL1BocERvYy9JbmNvbXBhdGlibGVDbGFzc0NvbnN0YW50UGhwRG9jVHlwZVJ1bGUucGhwChMAAOtPo2kKEwAAaumAmKQBAAAAAAAAKQAAAHNyYy9SdWxlcy9QaHBEb2MvVmFyVGFnVHlwZVJ1bGVIZWxwZXIucGhwSiMAAOtPo2lKIwAA6V1F7KQBAAAAAAAALgAAAHNyYy9SdWxlcy9QaHBEb2MvSW52YWxpZFBocERvY1RhZ1ZhbHVlUnVsZS5waHAdEAAA60+jaR0QAADpmL3xpAEAAAAAAABEAAAAc3JjL1J1bGVzL1BocERvYy9JbmNvbXBhdGlibGVQYXJhbUltbWVkaWF0ZWx5SW52b2tlZENhbGxhYmxlUnVsZS5waHChCwAA60+jaaELAAAB8BZVpAEAAAAAAAA0AAAAc3JjL1J1bGVzL1BocERvYy9WYXJUYWdDaGFuZ2VkRXhwcmVzc2lvblR5cGVSdWxlLnBocGgDAADrT6NpaAMAAASIy4qkAQAAAAAAACsAAABzcmMvUnVsZXMvUGhwRG9jL1VucmVzb2x2YWJsZVR5cGVIZWxwZXIucGhwRQMAAOtPo2lFAwAA6w3BdaQBAAAAAAAAJQAAAHNyYy9SdWxlcy9QaHBEb2MvUGhwRG9jTGluZUhlbHBlci5waHA6AwAA60+jaToDAAA2533upAEAAAAAAAA2AAAAc3JjL1J1bGVzL1BocERvYy9SZXF1aXJlRXh0ZW5kc0RlZmluaXRpb25DbGFzc1J1bGUucGhwMAUAAOtPo2kwBQAA+ULBRqQBAAAAAAAAOQAAAHNyYy9SdWxlcy9QaHBEb2MvUmVxdWlyZUltcGxlbWVudHNEZWZpbml0aW9uQ2xhc3NSdWxlLnBocKwDAADrT6NprAMAAPSsW6ikAQAAAAAAAC8AAABzcmMvUnVsZXMvUGhwRG9jL0luY29tcGF0aWJsZVBocERvY1R5cGVSdWxlLnBocGMuAADrT6NpYy4AAClBsTOkAQAAAAAAABIAAABzcmMvUnVsZXMvUnVsZS5waHDWAgAA60+jadYCAABZndqTpAEAAAAAAAAvAAAAc3JjL1J1bGVzL05hbWVzcGFjZXMvRXhpc3RpbmdOYW1lc0luVXNlUnVsZS5waHBoDwAA60+jaWgPAABJld/tpAEAAAAAAAA0AAAAc3JjL1J1bGVzL05hbWVzcGFjZXMvRXhpc3RpbmdOYW1lc0luR3JvdXBVc2VSdWxlLnBocPMOAADrT6Np8w4AABw2A5mkAQAAAAAAACoAAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9SdWxlc0V4dGVuc2lvbi5waHAEAwAA60+jaQQDAABlcP7upAEAAAAAAAAvAAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vUHJvamVjdENvbmZpZ0hlbHBlci5waHC6BgAA60+jaboGAACj/hBxpAEAAAAAAAAwAAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTmV0dGUvTmV0dGVDb250YWluZXIucGhwHwkAAOtPo2kfCQAA2JkJF6QBAAAAAAAAQAAAAHNyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0ludmFsaWRJZ25vcmVkRXJyb3JQYXR0ZXJuc0V4Y2VwdGlvbi5waHAvAgAA60+jaS8CAAAO3DacpAEAAAAAAAA7AAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vRHVwbGljYXRlSW5jbHVkZWRGaWxlc0V4Y2VwdGlvbi5waHBwAgAA60+jaXACAADUsDtppAEAAAAAAAAlAAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vQ29udGFpbmVyLnBocLMDAADrT6NpswMAANiL+lKkAQAAAAAAACwAAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9Db250YWluZXJGYWN0b3J5LnBocCY8AADrT6NpJjwAAGA+zL6kAQAAAAAAACkAAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9Mb2FkZXJGYWN0b3J5LnBocCwFAADrT6NpLAUAAIfVWpukAQAAAAAAAFAAAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL09wZXJhdG9yVHlwZVNwZWNpZnlpbmdFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocBMBAADrT6NpEwEAAM3ccymkAQAAAAAAAE8AAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0xhenlEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwIQUAAOtPo2khBQAAOy1quKQBAAAAAAAASgAAAHNyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvTGF6eVBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uUHJvdmlkZXIucGhwewQAAOtPo2l7BAAAnAsBw6QBAAAAAAAARgAAAHNyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvTGF6eUR5bmFtaWNUaHJvd1R5cGVFeHRlbnNpb25Qcm92aWRlci5waHBbBAAA60+jaVsEAACr5yrHpAEAAAAAAABUAAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9MYXp5RXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhw0AMAAOtPo2nQAwAAyVIS16QBAAAAAAAASwAAAHNyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocAQBAADrT6NpBAEAADty7gikAQAAAAAAAFQAAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0xhenlPcGVyYXRvclR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlci5waHAXBAAA60+jaRcEAADYZSgnpAEAAAAAAABGAAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9QYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvblByb3ZpZGVyLnBocLwCAADrT6NpvAIAAEkDB3ukAQAAAAAAAFAAAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0V4cHJlc3Npb25UeXBlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocBMBAADrT6NpEwEAAB7h5qWkAQAAAAAAAEIAAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL1BhcmFtZXRlck91dFR5cGVFeHRlbnNpb25Qcm92aWRlci5waHCUAgAA60+jaZQCAAC9sri7pAEAAAAAAABGAAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9MYXp5UGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvblByb3ZpZGVyLnBocFsEAADrT6NpWwQAALmIajSkAQAAAAAAAEIAAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0R5bmFtaWNUaHJvd1R5cGVFeHRlbnNpb25Qcm92aWRlci5waHCUAgAA60+jaZQCAADkcI/VpAEAAAAAAAAuAAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTWVtb2l6aW5nQ29udGFpbmVyLnBocAUHAADrT6NpBQcAAPHRbXKkAQAAAAAAADYAAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9QYXJhbWV0ZXJOb3RGb3VuZEV4Y2VwdGlvbi5waHBQAQAA60+jaVABAAAMRAXxpAEAAAAAAAAtAAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTmVvbi9PcHRpb25hbFBhdGgucGhwCAEAAOtPo2kIAQAAYEfAxaQBAAAAAAAANQAAAHNyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1BhcmFtZXRlcnNTY2hlbWFFeHRlbnNpb24ucGhw0gEAAOtPo2nSAQAA9XhHgqQBAAAAAAAANAAAAHNyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0NvbmRpdGlvbmFsVGFnc0V4dGVuc2lvbi5waHC1DwAA60+jabUPAACXsjB7pAEAAAAAAAAmAAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTmVvbkxvYWRlci5waHDEAwAA60+jacQDAABHz/4rpAEAAAAAAAAoAAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vQ29uZmlndXJhdG9yLnBocBILAADrT6NpEgsAAOGjM4ukAQAAAAAAAE8AAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9SZWZsZWN0aW9uL0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwCgEAAOtPo2kKAQAAuHKQGaQBAAAAAAAAUwAAAHNyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1JlZmxlY3Rpb24vTGF6eUNsYXNzUmVmbGVjdGlvbkV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwKwwAAOtPo2krDAAAUJZ5yqQBAAAAAAAALgAAAHNyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0JsZWVkaW5nRWRnZVRvZ2dsZS5waHCaAQAA60+jaZoBAAA3oWH/pAEAAAAAAAAnAAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTmVvbkFkYXB0ZXIucGhw7RsAAOtPo2ntGwAAOEhJn6QBAAAAAAAAOQAAAHNyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1ZhbGlkYXRlRXhjbHVkZVBhdGhzRXh0ZW5zaW9uLnBocHcKAADrT6NpdwoAAFqsUEakAQAAAAAAADYAAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9EZXJpdmF0aXZlQ29udGFpbmVyRmFjdG9yeS5waHDxCgAA60+jafEKAACDDLOjpAEAAAAAAAA6AAAAc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVmFsaWRhdGVJZ25vcmVkRXJyb3JzRXh0ZW5zaW9uLnBocCEgAADrT6NpISAAABm/chCkAQAAAAAAADgAAABzcmMvRGVwZW5kZW5jeUluamVjdGlvbi9JbnZhbGlkRXhjbHVkZVBhdGhzRXhjZXB0aW9uLnBocCcCAADrT6NpJwIAAMTUlH6kAQAAAAAAACEAAABzcmMvQW5hbHlzZXIvU3RhdGVtZW50Q29udGV4dC5waHCtAgAA60+jaa0CAADiX6M4pAEAAAAAAAAsAAAAc3JjL0FuYWx5c2VyL0NvbmRpdGlvbmFsRXhwcmVzc2lvbkhvbGRlci5waHCIBgAA60+jaYgGAADccDcApAEAAAAAAAAhAAAAc3JjL0FuYWx5c2VyL0NvbnN0YW50UmVzb2x2ZXIucGhwoCsAAOtPo2mgKwAA3N0zMaQBAAAAAAAAIwAAAHNyYy9BbmFseXNlci9FbmRTdGF0ZW1lbnRSZXN1bHQucGhwaQIAAOtPo2lpAgAAPtP2uKQBAAAAAAAALAAAAHNyYy9BbmFseXNlci9UeXBlU3BlY2lmaWVyQXdhcmVFeHRlbnNpb24ucGhw0QAAAOtPo2nRAAAA6ezQUaQBAAAAAAAAHgAAAHNyYy9BbmFseXNlci9UeXBlU3BlY2lmaWVyLnBocDJ+AQDrT6NpMn4BALufFF2kAQAAAAAAACgAAABzcmMvQW5hbHlzZXIvQW5hbHlzZXJSZXN1bHRGaW5hbGl6ZXIucGhwxyUAAOtPo2nHJQAA+3CtvqQBAAAAAAAAIgAAAHNyYy9BbmFseXNlci9Ob2RlU2NvcGVSZXNvbHZlci5waHB4ewQA60+jaXh7BABNVe/TpAEAAAAAAAAdAAAAc3JjL0FuYWx5c2VyL1Njb3BlQ29udGV4dC5waHD8CgAA60+jafwKAACRosMqpAEAAAAAAAAjAAAAc3JjL0FuYWx5c2VyL0ZpbGVBbmFseXNlclJlc3VsdC5waHBwDgAA60+jaXAOAABvrUhOpAEAAAAAAAAgAAAAc3JjL0FuYWx5c2VyL1N0YXRlbWVudFJlc3VsdC5waHCPFgAA60+jaY8WAAAuzTrypAEAAAAAAAAjAAAAc3JjL0FuYWx5c2VyL1N0YXRlbWVudEV4aXRQb2ludC5waHBxAgAA60+jaXECAADySRuspAEAAAAAAAAoAAAAc3JjL0FuYWx5c2VyL0NvbnN0YW50UmVzb2x2ZXJGYWN0b3J5LnBocD8DAADrT6NpPwMAALyGKSakAQAAAAAAACEAAABzcmMvQW5hbHlzZXIvRXhwcmVzc2lvblJlc3VsdC5waHBVCgAA60+jaVUKAACLmgKKpAEAAAAAAAAsAAAAc3JjL0FuYWx5c2VyL0Vuc3VyZWROb25OdWxsYWJpbGl0eVJlc3VsdC5waHBXAwAA60+jaVcDAAATez1tpAEAAAAAAAApAAAAc3JjL0FuYWx5c2VyL1JpY2hlclNjb3BlR2V0VHlwZUhlbHBlci5waHAiCgAA60+jaSIKAACIjLqppAEAAAAAAAAdAAAAc3JjL0FuYWx5c2VyL1Njb3BlRmFjdG9yeS5waHAaAgAA60+jaRoCAABDgNkVpAEAAAAAAAAeAAAAc3JjL0FuYWx5c2VyL011dGF0aW5nU2NvcGUucGhw7FwDAOtPo2nsXAMAOI+08qQBAAAAAAAAHwAAAHNyYy9BbmFseXNlci9BbmFseXNlclJlc3VsdC5waHB9FQAA60+jaX0VAABN9t7MpAEAAAAAAAA5AAAAc3JjL0FuYWx5c2VyL0lnbm9yZS9JZ25vcmVkRXJyb3JIZWxwZXJQcm9jZXNzZWRSZXN1bHQucGhwDQUAAOtPo2kNBQAANKc4Q6QBAAAAAAAAKgAAAHNyYy9BbmFseXNlci9JZ25vcmUvSWdub3JlZEVycm9ySGVscGVyLnBocAYVAADrT6NpBhUAAG02nAKkAQAAAAAAACQAAABzcmMvQW5hbHlzZXIvSWdub3JlL0lnbm9yZWRFcnJvci5waHA0DAAA60+jaTQMAABU+FdipAEAAAAAAAAsAAAAc3JjL0FuYWx5c2VyL0lnbm9yZS9JZ25vcmVQYXJzZUV4Y2VwdGlvbi5waHC6AQAA60+jaboBAACqgO2IpAEAAAAAAAAjAAAAc3JjL0FuYWx5c2VyL0lnbm9yZS9JZ25vcmVMZXhlci5waHB5CgAA60+jaXkKAACY/c71pAEAAAAAAAAwAAAAc3JjL0FuYWx5c2VyL0lnbm9yZS9JZ25vcmVkRXJyb3JIZWxwZXJSZXN1bHQucGhwxSgAAOtPo2nFKAAAQHEUN6QBAAAAAAAAJQAAAHNyYy9BbmFseXNlci9UeXBlU3BlY2lmaWVyQ29udGV4dC5waHAICQAA60+jaQgJAAD1RRBFpAEAAAAAAAA2AAAAc3JjL0FuYWx5c2VyL0Vuc3VyZWROb25OdWxsYWJpbGl0eVJlc3VsdEV4cHJlc3Npb24ucGhwcAQAAOtPo2lwBAAAWUPVWqQBAAAAAAAAGwAAAHNyYy9BbmFseXNlci9UaHJvd1BvaW50LnBocJ8IAADrT6NpnwgAACcjZb2kAQAAAAAAACwAAABzcmMvQW5hbHlzZXIvTG9jYWxJZ25vcmVzUHJvY2Vzc29yUmVzdWx0LnBocDkGAADrT6NpOQYAALYJbvukAQAAAAAAACQAAABzcmMvQW5hbHlzZXIvQXJndW1lbnRzTm9ybWFsaXplci5waHCDHwAA60+jaYMfAAAJbBoApAEAAAAAAAAnAAAAc3JjL0FuYWx5c2VyL051bGxzYWZlT3BlcmF0b3JIZWxwZXIucGhwtQoAAOtPo2m1CgAAmc8JnKQBAAAAAAAAKwAAAHNyYy9BbmFseXNlci9EaXJlY3RJbnRlcm5hbFNjb3BlRmFjdG9yeS5waHDtFwAA60+jae0XAABbxzHQpAEAAAAAAAAlAAAAc3JjL0FuYWx5c2VyL0V4cHJlc3Npb25UeXBlSG9sZGVyLnBocIkGAADrT6NpiQYAANIq/y2kAQAAAAAAACgAAABzcmMvQW5hbHlzZXIvUmVzdWx0Q2FjaGUvUmVzdWx0Q2FjaGUucGhw2xQAAOtPo2nbFAAABn20jqQBAAAAAAAALwAAAHNyYy9BbmFseXNlci9SZXN1bHRDYWNoZS9SZXN1bHRDYWNoZUNsZWFyZXIucGhwSwIAAOtPo2lLAgAAlYeudaQBAAAAAAAALwAAAHNyYy9BbmFseXNlci9SZXN1bHRDYWNoZS9SZXN1bHRDYWNoZU1hbmFnZXIucGhwErgAAOtPo2kSuAAAe3ynJaQBAAAAAAAANQAAAHNyYy9BbmFseXNlci9SZXN1bHRDYWNoZS9SZXN1bHRDYWNoZVByb2Nlc3NSZXN1bHQucGhwdwIAAOtPo2l3AgAA+3b47aQBAAAAAAAANgAAAHNyYy9BbmFseXNlci9SZXN1bHRDYWNoZS9SZXN1bHRDYWNoZU1hbmFnZXJGYWN0b3J5LnBocCABAADrT6NpIAEAAKBQa4OkAQAAAAAAAB8AAABzcmMvQW5hbHlzZXIvU3BlY2lmaWVkVHlwZXMucGhwXhMAAOtPo2leEwAAmFo9m6QBAAAAAAAAJQAAAHNyYy9BbmFseXNlci9UeXBlU3BlY2lmaWVyRmFjdG9yeS5waHA9CAAA60+jaT0IAADAeU/+pAEAAAAAAAAWAAAAc3JjL0FuYWx5c2VyL1Njb3BlLnBocI0QAADrT6NpjRAAALEaXXukAQAAAAAAABoAAABzcmMvQW5hbHlzZXIvTmFtZVNjb3BlLnBocEkcAADrT6NpSRwAAABlPTmkAQAAAAAAACUAAABzcmMvQW5hbHlzZXIvUHJvY2Vzc0Nsb3N1cmVSZXN1bHQucGhwsQUAAOtPo2mxBQAADaKMMaQBAAAAAAAAFgAAAHNyYy9BbmFseXNlci9FcnJvci5waHCnHAAA60+jaaccAABkcmtQpAEAAAAAAAAgAAAAc3JjL0FuYWx5c2VyL091dE9mQ2xhc3NTY29wZS5waHDqAwAA60+jaeoDAADfESMApAEAAAAAAAAcAAAAc3JjL0FuYWx5c2VyL0ltcHVyZVBvaW50LnBocNYGAADrT6Np1gYAAKJ2/T+kAQAAAAAAACsAAABzcmMvQW5hbHlzZXIvVW5kZWZpbmVkVmFyaWFibGVFeGNlcHRpb24ucGhwOwMAAOtPo2k7AwAA1fWeIaQBAAAAAAAAJQAAAHNyYy9BbmFseXNlci9JbnRlcm5hbFNjb3BlRmFjdG9yeS5waHD/BQAA60+jaf8FAADPpMa3pAEAAAAAAAAgAAAAc3JjL0FuYWx5c2VyL0ZpbmFsaXplclJlc3VsdC5waHBMBQAA60+jaUwFAACvu4NLpAEAAAAAAAAmAAAAc3JjL0FuYWx5c2VyL0xvY2FsSWdub3Jlc1Byb2Nlc3Nvci5waHCpDQAA60+jaakNAABEVwFZpAEAAAAAAAAeAAAAc3JjL0FuYWx5c2VyL0ludGVybmFsRXJyb3IucGhweAoAAOtPo2l4CgAA5m0meKQBAAAAAAAAHQAAAHNyYy9BbmFseXNlci9GaWxlQW5hbHlzZXIucGhwgUMAAOtPo2mBQwAAuK4V46QBAAAAAAAAIgAAAHNyYy9BbmFseXNlci9FeHByZXNzaW9uQ29udGV4dC5waHCABwAA60+jaYAHAABuLNxhpAEAAAAAAAAZAAAAc3JjL0FuYWx5c2VyL0FuYWx5c2VyLnBocBIUAADrT6NpEhQAAKq+TIqkAQAAAAAAACUAAABzcmMvQW5hbHlzZXIvUnVsZUVycm9yVHJhbnNmb3JtZXIucGhwIQkAAOtPo2khCQAAn36Qp6QBAAAAAAAAKQAAAHNyYy9BbmFseXNlci9MYXp5SW50ZXJuYWxTY29wZUZhY3RvcnkucGhwxhAAAOtPo2nGEAAAHq85aaQBAAAAAAAAHwAAAHNyYy9Db21tYW5kL0luY2VwdGlvblJlc3VsdC5waHB6EgAA60+jaXoSAADxUIT+pAEAAAAAAAAdAAAAc3JjL0NvbW1hbmQvQ29tbWFuZEhlbHBlci5waHDfiQAA60+jad+JAACs0OFupAEAAAAAAAAiAAAAc3JjL0NvbW1hbmQvRml4ZXJXb3JrZXJDb21tYW5kLnBocI0+AADrT6NpjT4AANrfU7OkAQAAAAAAABsAAABzcmMvQ29tbWFuZC9PdXRwdXRTdHlsZS5waHCTAwAA60+jaZMDAADYPmcGpAEAAAAAAAAnAAAAc3JjL0NvbW1hbmQvQ2xlYXJSZXN1bHRDYWNoZUNvbW1hbmQucGhwDw0AAOtPo2kPDQAAqQ5WD6QBAAAAAAAAHgAAAHNyYy9Db21tYW5kL0FuYWx5c2VyUnVubmVyLnBocF0OAADrT6NpXQ4AAFdt24KkAQAAAAAAACsAAABzcmMvQ29tbWFuZC9JZ25vcmVkUmVnZXhWYWxpZGF0b3JSZXN1bHQucGhw8wUAAOtPo2nzBQAApDOPP6QBAAAAAAAAJQAAAHNyYy9Db21tYW5kL0ZpeGVyUHJvY2Vzc0V4Y2VwdGlvbi5waHCEAAAA60+jaYQAAAC9mEh9pAEAAAAAAAAdAAAAc3JjL0NvbW1hbmQvV29ya2VyQ29tbWFuZC5waHCZLAAA60+jaZksAACeYacbpAEAAAAAAAAiAAAAc3JjL0NvbW1hbmQvRXJyb3JzQ29uc29sZVN0eWxlLnBocPAYAADrT6Np8BgAAHrBARGkAQAAAAAAACUAAABzcmMvQ29tbWFuZC9JZ25vcmVkUmVnZXhWYWxpZGF0b3IucGhwqxEAAOtPo2mrEQAAnyDr+qQBAAAAAAAAJQAAAHNyYy9Db21tYW5kL1N5bWZvbnkvU3ltZm9ueU91dHB1dC5waHADBgAA60+jaQMGAADZJRg0pAEAAAAAAAAkAAAAc3JjL0NvbW1hbmQvU3ltZm9ueS9TeW1mb255U3R5bGUucGhw0AcAAOtPo2nQBwAAZM1ze6QBAAAAAAAAIgAAAHNyYy9Db21tYW5kL0FuYWx5c2VBcHBsaWNhdGlvbi5waHCnNwAA60+jaac3AAA6gC9opAEAAAAAAAAWAAAAc3JjL0NvbW1hbmQvT3V0cHV0LnBocPMBAADrT6Np8wEAAJYCOZWkAQAAAAAAACAAAABzcmMvQ29tbWFuZC9GaXhlckFwcGxpY2F0aW9uLnBocB5VAADrT6NpHlUAAP8oE96kAQAAAAAAAB8AAABzcmMvQ29tbWFuZC9EaWFnbm9zZUNvbW1hbmQucGhwPw4AAOtPo2k/DgAAzQTd9qQBAAAAAAAAHgAAAHNyYy9Db21tYW5kL0FuYWx5c2lzUmVzdWx0LnBocGMTAADrT6NpYxMAAM/uJGWkAQAAAAAAAC8AAABzcmMvQ29tbWFuZC9JbmNlcHRpb25Ob3RTdWNjZXNzZnVsRXhjZXB0aW9uLnBocI4AAADrT6NpjgAAAPCYml+kAQAAAAAAAB4AAABzcmMvQ29tbWFuZC9BbmFseXNlQ29tbWFuZC5waHACigAA60+jaQKKAAB+XjGHpAEAAAAAAAAxAAAAc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvSnNvbkVycm9yRm9ybWF0dGVyLnBocFIIAADrT6NpUggAAMHYdSakAQAAAAAAADUAAABzcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9UZWFtY2l0eUVycm9yRm9ybWF0dGVyLnBocBAQAADrT6NpEBAAAEu8LuKkAQAAAAAAADgAAABzcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9CYXNlbGluZVBocEVycm9yRm9ybWF0dGVyLnBocFANAADrT6NpUA0AAH9dDLCkAQAAAAAAADMAAABzcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9HaXRsYWJFcnJvckZvcm1hdHRlci5waHA1BwAA60+jaTUHAAAE3daWpAEAAAAAAAAtAAAAc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvRXJyb3JGb3JtYXR0ZXIucGhwqgIAAOtPo2mqAgAAmXPjzKQBAAAAAAAANwAAAHNyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0NoZWNrc3R5bGVFcnJvckZvcm1hdHRlci5waHAFDwAA60+jaQUPAAA9BrA0pAEAAAAAAAAwAAAAc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvUmF3RXJyb3JGb3JtYXR0ZXIucGhwagUAAOtPo2lqBQAA5H+5AqQBAAAAAAAAMwAAAHNyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0dpdGh1YkVycm9yRm9ybWF0dGVyLnBocGgKAADrT6NpaAoAABmyVtSkAQAAAAAAADcAAABzcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9DaURldGVjdGVkRXJyb3JGb3JtYXR0ZXIucGhwigYAAOtPo2mKBgAAUOtvUKQBAAAAAAAAOQAAAHNyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0Jhc2VsaW5lTmVvbkVycm9yRm9ybWF0dGVyLnBocP0LAADrT6Np/QsAAGB2klqkAQAAAAAAADIAAABzcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9UYWJsZUVycm9yRm9ybWF0dGVyLnBocFAeAADrT6NpUB4AAG4xenekAQAAAAAAADIAAABzcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9KdW5pdEVycm9yRm9ybWF0dGVyLnBocAwLAADrT6NpDAsAAI5VwyukAQAAAAAAACUAAABzcmMvQ29tbWFuZC9EdW1wUGFyYW1ldGVyc0NvbW1hbmQucGhwRg8AAOtPo2lGDwAAWWd0XKQBAAAAAAAAHQAAAHNyYy9Db21tYW5kL2ZpeGVyLXBoYXIucHVia2V5IAMAAOtPo2kgAwAAdQHkqqQBAAAAAAAAIwAAAHNyYy9EZXBlbmRlbmN5L1Jvb3RFeHBvcnRlZE5vZGUucGhwxwEAAOtPo2nHAQAAXTY1FaQBAAAAAAAAMAAAAHNyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZEVudW1Ob2RlLnBocPcQAADrT6Np9xAAALL3VnSkAQAAAAAAADEAAABzcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRDbGFzc05vZGUucGhwUxgAAOtPo2lTGAAADW8Tf6QBAAAAAAAANQAAAHNyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZEludGVyZmFjZU5vZGUucGhwDAwAAOtPo2kMDAAAff1B86QBAAAAAAAAOgAAAHNyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZENsYXNzQ29uc3RhbnRzTm9kZS5waHDMDAAA60+jacwMAACH/yk4pAEAAAAAAAA5AAAAc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkQ2xhc3NDb25zdGFudE5vZGUucGhwVQkAAOtPo2lVCQAAu2GUJaQBAAAAAAAANQAAAHNyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZEF0dHJpYnV0ZU5vZGUucGhwEAcAAOtPo2kQBwAAGTDdN6QBAAAAAAAAMQAAAHNyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZFRyYWl0Tm9kZS5waHC9FAAA60+jab0UAAA6nxyIpAEAAAAAAAA0AAAAc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkRW51bUNhc2VOb2RlLnBocMkHAADrT6NpyQcAAMAVnvCkAQAAAAAAADQAAABzcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRGdW5jdGlvbk5vZGUucGhwzREAAOtPo2nNEQAANnW1E6QBAAAAAAAANQAAAHNyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZFBhcmFtZXRlck5vZGUucGhw3AsAAOtPo2ncCwAAvhODyKQBAAAAAAAANgAAAHNyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZFByb3BlcnRpZXNOb2RlLnBocCQQAADrT6NpJBAAADLSbNmkAQAAAAAAADoAAABzcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRUcmFpdFVzZUFkYXB0YXRpb24ucGhwRgoAAOtPo2lGCgAAEfT1KaQBAAAAAAAAMgAAAHNyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZFBocERvY05vZGUucGhwKQgAAOtPo2kpCAAAhpyCqKQBAAAAAAAAMgAAAHNyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZE1ldGhvZE5vZGUucGhw0BQAAOtPo2nQFAAAG0KRkqQBAAAAAAAAJQAAAHNyYy9EZXBlbmRlbmN5L0RlcGVuZGVuY3lSZXNvbHZlci5waHAPiwAA60+jaQ+LAADN/HSrpAEAAAAAAAAmAAAAc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlRmV0Y2hlci5waHDoAwAA60+jaegDAADoKl7spAEAAAAAAAAjAAAAc3JjL0RlcGVuZGVuY3kvTm9kZURlcGVuZGVuY2llcy5waHD4BgAA60+jafgGAACCvOlXpAEAAAAAAAAfAAAAc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlLnBocGEBAADrT6NpYQEAABtWgU6kAQAAAAAAACcAAABzcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGVSZXNvbHZlci5waHDLNAAA60+jacs0AAAXLYQkpAEAAAAAAAAmAAAAc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlVmlzaXRvci5waHAIBgAA60+jaQgGAADCgpxZpAEAAAAAAAAiAAAAc3JjL0RpYWdub3NlL0RpYWdub3NlRXh0ZW5zaW9uLnBocIcCAADrT6NphwIAAL+b4dekAQAAAAAAACkAAABzcmMvRGlhZ25vc2UvUEhQU3RhbkRpYWdub3NlRXh0ZW5zaW9uLnBocPwbAADrT6Np/BsAAJPJ8xCkAQAAAAAAACUAAABzcmMvUGFyc2VyL1BhcmVudFN0bXRUeXBlc1Zpc2l0b3IucGhwbgQAAOtPo2luBAAACQwm3KQBAAAAAAAAJQAAAHNyYy9QYXJzZXIvRGVjbGFyZVBvc2l0aW9uVmlzaXRvci5waHDYAwAA60+jadgDAADebUH5pAEAAAAAAAAiAAAAc3JjL1BhcnNlci9BcnJheVdhbGtBcmdWaXNpdG9yLnBocMQCAADrT6NpxAIAACtG5RakAQAAAAAAACMAAABzcmMvUGFyc2VyL0N1cmxTZXRPcHRBcmdWaXNpdG9yLnBocMcCAADrT6NpxwIAAKoUQWOkAQAAAAAAACEAAABzcmMvUGFyc2VyL1BocFBhcnNlckRlY29yYXRvci5waHC8AwAA60+jabwDAAAj7rPfpAEAAAAAAAAdAAAAc3JjL1BhcnNlci9DbGVhbmluZ1BhcnNlci5waHDKBAAA60+jacoEAACY1LFEpAEAAAAAAAAgAAAAc3JjL1BhcnNlci9DbG9zdXJlQXJnVmlzaXRvci5waHCqAwAA60+jaaoDAABnqsPLpAEAAAAAAAAiAAAAc3JjL1BhcnNlci9UcnlDYXRjaFR5cGVWaXNpdG9yLnBocPEGAADrT6Np8QYAAIdLPrSkAQAAAAAAAC0AAABzcmMvUGFyc2VyL1R5cGVUcmF2ZXJzZXJJbnN0YW5jZW9mVmlzaXRvci5waHAoBQAA60+jaSgFAADaUZxGpAEAAAAAAAAgAAAAc3JjL1BhcnNlci9QYXRoUm91dGluZ1BhcnNlci5waHDwDAAA60+jafAMAADSggRNpAEAAAAAAAAlAAAAc3JjL1BhcnNlci9UcmFpdENvbGxlY3RpbmdWaXNpdG9yLnBocL8BAADrT6NpvwEAAH00KMSkAQAAAAAAACMAAABzcmMvUGFyc2VyL0xhc3RDb25kaXRpb25WaXNpdG9yLnBocI4KAADrT6NpjgoAAIxv/BekAQAAAAAAACQAAABzcmMvUGFyc2VyL0Nsb3N1cmVCaW5kQXJnVmlzaXRvci5waHARAwAA60+jaREDAABgD7ZppAEAAAAAAAAbAAAAc3JjL1BhcnNlci9TaW1wbGVQYXJzZXIucGhwiQYAAOtPo2mJBgAARmEck6QBAAAAAAAAJAAAAHNyYy9QYXJzZXIvQXJyYXlGaWx0ZXJBcmdWaXNpdG9yLnBocMoCAADrT6NpygIAAE5o/jWkAQAAAAAAACEAAABzcmMvUGFyc2VyL0FycmF5TWFwQXJnVmlzaXRvci5waHCfAwAA60+jaZ8DAAAseuy4pAEAAAAAAAAbAAAAc3JjL1BhcnNlci9MZXhlckZhY3RvcnkucGhwnQMAAOtPo2mdAwAAJPVCOaQBAAAAAAAALwAAAHNyYy9QYXJzZXIvTWFnaWNDb25zdGFudFBhcmFtRGVmYXVsdFZpc2l0b3IucGhwBAIAAOtPo2kEAgAA7epCw6QBAAAAAAAAJAAAAHNyYy9QYXJzZXIvQW5vbnltb3VzQ2xhc3NWaXNpdG9yLnBocGYFAADrT6NpZgUAACxHweikAQAAAAAAABsAAABzcmMvUGFyc2VyL0NhY2hlZFBhcnNlci5waHDtCgAA60+jae0KAAA2NGyOpAEAAAAAAAAiAAAAc3JjL1BhcnNlci9BcnJheUZpbmRBcmdWaXNpdG9yLnBocBcDAADrT6NpFwMAAMyyP6ukAQAAAAAAACsAAABzcmMvUGFyc2VyL05ld0Fzc2lnbmVkVG9Qcm9wZXJ0eVZpc2l0b3IucGhwqAIAAOtPo2moAgAAqVi9HqQBAAAAAAAAHgAAAHNyYy9QYXJzZXIvQ2xlYW5pbmdWaXNpdG9yLnBocFwJAADrT6NpXAkAAKOg8UikAQAAAAAAACYAAABzcmMvUGFyc2VyL0Fycm93RnVuY3Rpb25BcmdWaXNpdG9yLnBocLwDAADrT6NpvAMAAPy/3MekAQAAAAAAACYAAABzcmMvUGFyc2VyL0Nsb3N1cmVCaW5kVG9WYXJWaXNpdG9yLnBocLMCAADrT6NpswIAAJtCph2kAQAAAAAAACoAAABzcmMvUGFyc2VyL0Z1bmN0aW9uQ2FsbFN0YXRlbWVudEZpbmRlci5waHDOBAAA60+jac4EAADMSnm+pAEAAAAAAAAZAAAAc3JjL1BhcnNlci9SaWNoUGFyc2VyLnBocJE0AADrT6NpkTQAAGSmUq6kAQAAAAAAACQAAABzcmMvUGFyc2VyL1BhcnNlckVycm9yc0V4Y2VwdGlvbi5waHDeBAAA60+jad4EAADN5jwppAEAAAAAAAA0AAAAc3JjL1BhcnNlci9SZW1vdmVVbnVzZWRDb2RlQnlQaHBWZXJzaW9uSWRWaXNpdG9yLnBocFMKAADrT6NpUwoAAPLgU0ykAQAAAAAAAC8AAABzcmMvUGFyc2VyL0ltbWVkaWF0ZWx5SW52b2tlZENsb3N1cmVWaXNpdG9yLnBocAECAADrT6NpAQIAAMWHb7ukAQAAAAAAABUAAABzcmMvUGFyc2VyL1BhcnNlci5waHC2AQAA60+jabYBAACGXzi3pAEAAAAAAAAoAAAAc3JjL1Byb2Nlc3MvUHJvY2Vzc0NhbmNlbGVkRXhjZXB0aW9uLnBocIcAAADrT6NphwAAAHdAWJKkAQAAAAAAAB4AAABzcmMvUHJvY2Vzcy9Qcm9jZXNzUHJvbWlzZS5waHB6DAAA60+jaXoMAACFmDDwpAEAAAAAAAAeAAAAc3JjL1Byb2Nlc3MvQ3B1Q29yZUNvdW50ZXIucGhwggIAAOtPo2mCAgAAZiRzqKQBAAAAAAAAJwAAAHNyYy9Qcm9jZXNzL1Byb2Nlc3NDcmFzaGVkRXhjZXB0aW9uLnBocIYAAADrT6NphgAAAAwmwtCkAQAAAAAAAB0AAABzcmMvUHJvY2Vzcy9Qcm9jZXNzSGVscGVyLnBocFkJAADrT6NpWQkAAFwN0mmkAQAAAAAAABMAAABzcmMvQ2FjaGUvQ2FjaGUucGhwZwIAAOtPo2lnAgAAGY6dYKQBAAAAAAAAHgAAAHNyYy9DYWNoZS9GaWxlQ2FjaGVTdG9yYWdlLnBocE8MAADrT6NpTwwAAHthaeCkAQAAAAAAABcAAABzcmMvQ2FjaGUvQ2FjaGVJdGVtLnBocDgDAADrT6NpOAMAAE+RSVekAQAAAAAAABoAAABzcmMvQ2FjaGUvQ2FjaGVTdG9yYWdlLnBocDABAADrT6NpMAEAANwegp2kAQAAAAAAACAAAABzcmMvQ2FjaGUvTWVtb3J5Q2FjaGVTdG9yYWdlLnBocE8DAADrT6NpTwMAAA3fa0KkAQAAAAAAACIAAABzcmMvTm9kZS9GaW5hbGx5RXhpdFBvaW50c05vZGUucGhwHAUAAOtPo2kcBQAAQMZxe6QBAAAAAAAAHQAAAHNyYy9Ob2RlL0NsYXNzTWV0aG9kc05vZGUucGhwswYAAOtPo2mzBgAAatZXD6QBAAAAAAAAGgAAAHNyYy9Ob2RlL0Jvb2xlYW5Pck5vZGUucGhwigQAAOtPo2mKBAAAKqNrF6QBAAAAAAAAHwAAAHNyYy9Ob2RlL05vb3BFeHByZXNzaW9uTm9kZS5waHC0AwAA60+jabQDAADBotM1pAEAAAAAAAApAAAAc3JjL05vZGUvRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnRzTm9kZS5waHCZDAAA60+jaZkMAACVNAexpAEAAAAAAAAsAAAAc3JjL05vZGUvRXhwci9Qcm9wZXJ0eUluaXRpYWxpemF0aW9uRXhwci5waHDUAgAA60+jadQCAABsE5zWpAEAAAAAAAAwAAAAc3JjL05vZGUvRXhwci9TZXRFeGlzdGluZ09mZnNldFZhbHVlVHlwZUV4cHIucGhw9AMAAOtPo2n0AwAAZtY2tKQBAAAAAAAANAAAAHNyYy9Ob2RlL0V4cHIvUGFyYW1ldGVyVmFyaWFibGVPcmlnaW5hbFZhbHVlRXhwci5waHDkAgAA60+jaeQCAAACIERIpAEAAAAAAAAoAAAAc3JjL05vZGUvRXhwci9HZXRPZmZzZXRWYWx1ZVR5cGVFeHByLnBocDQDAADrT6NpNAMAAKElN+ukAQAAAAAAACoAAABzcmMvTm9kZS9FeHByL0dldEl0ZXJhYmxlVmFsdWVUeXBlRXhwci5waHCaAgAA60+jaZoCAAD1ICYbpAEAAAAAAAAoAAAAc3JjL05vZGUvRXhwci9HZXRJdGVyYWJsZUtleVR5cGVFeHByLnBocJYCAADrT6NplgIAAFdtMkKkAQAAAAAAACEAAABzcmMvTm9kZS9FeHByL1Vuc2V0T2Zmc2V0RXhwci5waHAmAwAA60+jaSYDAABX42MTpAEAAAAAAAAaAAAAc3JjL05vZGUvRXhwci9UeXBlRXhwci5waHDHAgAA60+jaccCAAD2AWfDpAEAAAAAAAAmAAAAc3JjL05vZGUvRXhwci9BbHdheXNSZW1lbWJlcmVkRXhwci5waHAuBAAA60+jaS4EAAB3fiiCpAEAAAAAAAAqAAAAc3JjL05vZGUvRXhwci9PcmlnaW5hbFByb3BlcnR5VHlwZUV4cHIucGhwjwMAAOtPo2mPAwAA2cb/AKQBAAAAAAAAKAAAAHNyYy9Ob2RlL0V4cHIvU2V0T2Zmc2V0VmFsdWVUeXBlRXhwci5waHDnAwAA60+jaecDAACFlTacpAEAAAAAAAAnAAAAc3JjL05vZGUvRXhwci9FeGlzdGluZ0FycmF5RGltRmV0Y2gucGhwMgMAAOtPo2kyAwAAGZIZ5KQBAAAAAAAAHgAAAHNyYy9Ob2RlL0NvbGxlY3RlZERhdGFOb2RlLnBocJsHAADrT6NpmwcAAPSPw5+kAQAAAAAAABsAAABzcmMvTm9kZS9JbkZ1bmN0aW9uTm9kZS5waHCZBAAA60+jaZkEAAD+X80dpAEAAAAAAAAsAAAAc3JjL05vZGUvVmFyVGFnQ2hhbmdlZEV4cHJlc3Npb25UeXBlTm9kZS5waHCiAwAA60+jaaIDAADSNC+PpAEAAAAAAAAdAAAAc3JjL05vZGUvRXhlY3V0aW9uRW5kTm9kZS5waHAXBQAA60+jaRcFAACXN6s2pAEAAAAAAAAoAAAAc3JjL05vZGUvTWF0Y2hFeHByZXNzaW9uQXJtQ29uZGl0aW9uLnBocP0CAADrT6Np/QIAACYLK72kAQAAAAAAABgAAABzcmMvTm9kZS9JblRyYWl0Tm9kZS5waHB5BQAA60+jaXkFAAAcDpdApAEAAAAAAAAcAAAAc3JjL05vZGUvUmV0dXJuU3RhdGVtZW50LnBocH8CAADrT6NpfwIAAInsj7+kAQAAAAAAABgAAABzcmMvTm9kZS9DbGFzc01ldGhvZC5waHBPAwAA60+jaU8DAAAtZSg3pAEAAAAAAAAkAAAAc3JjL05vZGUvUHJpbnRlci9Ob2RlVHlwZVByaW50ZXIucGhwzwUAAOtPo2nPBQAA/7p3OaQBAAAAAAAAIAAAAHNyYy9Ob2RlL1ByaW50ZXIvRXhwclByaW50ZXIucGhwvgIAAOtPo2m+AgAAV9SdzqQBAAAAAAAAHAAAAHNyYy9Ob2RlL1ByaW50ZXIvUHJpbnRlci5waHCNDgAA60+jaY0OAACNJKGmpAEAAAAAAAAaAAAAc3JjL05vZGUvSW5DbG9zdXJlTm9kZS5waHApBAAA60+jaSkEAACEezlTpAEAAAAAAAAdAAAAc3JjL05vZGUvTGl0ZXJhbEFycmF5SXRlbS5waHBnAgAA60+jaWcCAAAlF2vqpAEAAAAAAAAkAAAAc3JjL05vZGUvQ2xhc3NTdGF0ZW1lbnRzR2F0aGVyZXIucGhw2CMAAOtPo2nYIwAA3frTBKQBAAAAAAAAKAAAAHNyYy9Ob2RlL0Nsb3N1cmVSZXR1cm5TdGF0ZW1lbnRzTm9kZS5waHDkCgAA60+jaeQKAACjXISspAEAAAAAAAArAAAAc3JjL05vZGUvQ2F0Y2hXaXRoVW50aHJvd25FeGNlcHRpb25Ob2RlLnBocAUFAADrT6NpBQUAAIHQ8kekAQAAAAAAACUAAABzcmMvTm9kZS9Eb1doaWxlTG9vcENvbmRpdGlvbk5vZGUucGhwPAQAAOtPo2k8BAAAjnsMb6QBAAAAAAAAIQAAAHNyYy9Ob2RlL0Z1bmN0aW9uQ2FsbGFibGVOb2RlLnBocBEEAADrT6NpEQQAADsCBIykAQAAAAAAACIAAABzcmMvTm9kZS9Qcm9wZXJ0eS9Qcm9wZXJ0eVJlYWQucGhwDAMAAOtPo2kMAwAAV+YAvqQBAAAAAAAAIwAAAHNyYy9Ob2RlL1Byb3BlcnR5L1Byb3BlcnR5V3JpdGUucGhwHAQAAOtPo2kcBAAAfQiuBqQBAAAAAAAAJAAAAHNyYy9Ob2RlL1Byb3BlcnR5L1Byb3BlcnR5QXNzaWduLnBocHICAADrT6NpcgIAAMf/CSCkAQAAAAAAACYAAABzcmMvTm9kZS9JbnN0YW50aWF0aW9uQ2FsbGFibGVOb2RlLnBocBYEAADrT6NpFgQAAH6X/iOkAQAAAAAAACcAAABzcmMvTm9kZS9NZXRob2RSZXR1cm5TdGF0ZW1lbnRzTm9kZS5waHCMDgAA60+jaYwOAADmY8uMpAEAAAAAAAAoAAAAc3JjL05vZGUvQ29uc3RhbnQvQ2xhc3NDb25zdGFudEZldGNoLnBocGkCAADrT6NpaQIAAKTB8QWkAQAAAAAAAB4AAABzcmMvTm9kZS9NZXRob2QvTWV0aG9kQ2FsbC5waHAUAwAA60+jaRQDAACsW4+KpAEAAAAAAAAfAAAAc3JjL05vZGUvQW5vbnltb3VzQ2xhc3NOb2RlLnBocKICAADrT6NpogIAAGLJq7CkAQAAAAAAABsAAABzcmMvTm9kZS9Cb29sZWFuQW5kTm9kZS5waHCUBAAA60+jaZQEAAA3k2NKpAEAAAAAAAAfAAAAc3JjL05vZGUvQ2xhc3NDb25zdGFudHNOb2RlLnBocM4GAADrT6NpzgYAACKLaMOkAQAAAAAAABYAAABzcmMvTm9kZS9Jc3NldEV4cHIucGhwkwIAAOtPo2mTAgAALfOLbqQBAAAAAAAAIAAAAHNyYy9Ob2RlL0NsYXNzUHJvcGVydGllc05vZGUucGhwWUAAAOtPo2lZQAAA2e6wyaQBAAAAAAAAIAAAAHNyYy9Ob2RlL01hdGNoRXhwcmVzc2lvbk5vZGUucGhwDgUAAOtPo2kOBQAA5tiwMKQBAAAAAAAAHwAAAHNyYy9Ob2RlL0ludmFsaWRhdGVFeHByTm9kZS5waHDBAgAA60+jacECAAClihyLpAEAAAAAAAAeAAAAc3JjL05vZGUvSW5DbGFzc01ldGhvZE5vZGUucGhwxgUAAOtPo2nGBQAADPgH3KQBAAAAAAAAGAAAAHNyYy9Ob2RlL0luQ2xhc3NOb2RlLnBocDIEAADrT6NpMgQAAGKqAFikAQAAAAAAACUAAABzcmMvTm9kZS9TdGF0aWNNZXRob2RDYWxsYWJsZU5vZGUucGhwOwUAAOtPo2k7BQAAKTNFMKQBAAAAAAAAGAAAAHNyYy9Ob2RlL1ZpcnR1YWxOb2RlLnBocIEAAADrT6NpgQAAAP5Aqs+kAQAAAAAAACMAAABzcmMvTm9kZS9CcmVha2xlc3NXaGlsZUxvb3BOb2RlLnBocIoEAADrT6NpigQAAO5G8JCkAQAAAAAAAB8AAABzcmMvTm9kZS9NYXRjaEV4cHJlc3Npb25Bcm0ucGhwrgMAAOtPo2muAwAAEcx07aQBAAAAAAAAIwAAAHNyYy9Ob2RlL01hdGNoRXhwcmVzc2lvbkFybUJvZHkucGhwMwIAAOtPo2kzAgAAxrYzB6QBAAAAAAAAGgAAAHNyYy9Ob2RlL0luRm9yZWFjaE5vZGUucGhw9AIAAOtPo2n0AgAAU3GUR6QBAAAAAAAAHQAAAHNyYy9Ob2RlL0xpdGVyYWxBcnJheU5vZGUucGhwfgMAAOtPo2l+AwAAOdcvcqQBAAAAAAAAIAAAAHNyYy9Ob2RlL0luQXJyb3dGdW5jdGlvbk5vZGUucGhwVwQAAOtPo2lXBAAAkq1FPKQBAAAAAAAAJQAAAHNyYy9Ob2RlL1VucmVhY2hhYmxlU3RhdGVtZW50Tm9kZS5waHAIAwAA60+jaQgDAAAQupP7pAEAAAAAAAAfAAAAc3JjL05vZGUvVmFyaWFibGVBc3NpZ25Ob2RlLnBocIcEAADrT6NphwQAAMvSCQOkAQAAAAAAAB4AAABzcmMvTm9kZS9DbGFzc1Byb3BlcnR5Tm9kZS5waHDrEAAA60+jaesQAACh29YypAEAAAAAAAAfAAAAc3JjL05vZGUvUHJvcGVydHlBc3NpZ25Ob2RlLnBocE4FAADrT6NpTgUAALMcDkqkAQAAAAAAACEAAABzcmMvTm9kZS9SZXR1cm5TdGF0ZW1lbnRzTm9kZS5waHBvAwAA60+jaW8DAAD8N4v+pAEAAAAAAAAVAAAAc3JjL05vZGUvRmlsZU5vZGUucGhwUAMAAOtPo2lQAwAAB5lRwaQBAAAAAAAAHwAAAHNyYy9Ob2RlL01ldGhvZENhbGxhYmxlTm9kZS5waHDJBAAA60+jackEAACwb6pvpAEAAAAAAAAsAAAAc3JjL1Rlc3RpbmcvVGVzdENhc2VTb3VyY2VMb2NhdG9yRmFjdG9yeS5waHBpFQAA60+jaWkVAACTD4qApAEAAAAAAAAZAAAAc3JjL1Rlc3RpbmcvVGVzdENhc2UubmVvbroDAADrT6NpugMAADssIROkAQAAAAAAAB8AAABzcmMvVGVzdGluZy9QSFBTdGFuVGVzdENhc2UucGhwISUAAOtPo2khJQAAelGe66QBAAAAAAAAJgAAAHNyYy9UZXN0aW5nL0Vycm9yRm9ybWF0dGVyVGVzdENhc2UucGhwOxIAAOtPo2k7EgAAHWIyuaQBAAAAAAAAJQAAAHNyYy9UZXN0aW5nL1R5cGVJbmZlcmVuY2VUZXN0Q2FzZS5waHAXNQAA60+jaRc1AABqDmThpAEAAAAAAAAZAAAAc3JjL1Rlc3RpbmcvZnVuY3Rpb25zLnBocPACAADrT6Np8AIAAP0tY/GkAQAAAAAAAB4AAABzcmMvVGVzdGluZy9MZXZlbHNUZXN0Q2FzZS5waHAcGwAA60+jaRwbAADthpmWpAEAAAAAAAAcAAAAc3JjL1Rlc3RpbmcvUnVsZVRlc3RDYXNlLnBocE8eAADrT6NpTx4AANXvSbCkAQAAAAAAACEAAABzcmMvUGFyYWxsZWwvUGFyYWxsZWxBbmFseXNlci5waHAhNQAA60+jaSE1AACYnM9GpAEAAAAAAAAZAAAAc3JjL1BhcmFsbGVsL1NjaGVkdWxlLnBocKECAADrT6NpoQIAALzA3rukAQAAAAAAACkAAABzcmMvUGFyYWxsZWwvUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uLnBocIgAAADrT6NpiAAAAAUfhd+kAQAAAAAAABwAAABzcmMvUGFyYWxsZWwvUHJvY2Vzc1Bvb2wucGhwagcAAOtPo2lqBwAAIuVGpKQBAAAAAAAAGgAAAHNyYy9QYXJhbGxlbC9TY2hlZHVsZXIucGhwngkAAOtPo2meCQAAkgi2gaQBAAAAAAAAGAAAAHNyYy9QYXJhbGxlbC9Qcm9jZXNzLnBocLMSAADrT6NpsxIAANg9CU+kAQAAAAAAACUAAABzcmMvQnJva2VyL0NsYXNzTm90Rm91bmRFeGNlcHRpb24ucGhw2wIAAOtPo2nbAgAAo15636QBAAAAAAAAKAAAAHNyYy9Ccm9rZXIvQ2xhc3NBdXRvbG9hZGluZ0V4Y2VwdGlvbi5waHC6AwAA60+jaboDAAAhdflWpAEAAAAAAAAcAAAAc3JjL0Jyb2tlci9Ccm9rZXJGYWN0b3J5LnBocM4FAADrT6NpzgUAADZRzpekAQAAAAAAABUAAABzcmMvQnJva2VyL0Jyb2tlci5waHAYEgAA60+jaRgSAAAmgpThpAEAAAAAAAAnAAAAc3JjL0Jyb2tlci9Bbm9ueW1vdXNDbGFzc05hbWVIZWxwZXIucGhwhgUAAOtPo2mGBQAAa+EwPKQBAAAAAAAAKAAAAHNyYy9Ccm9rZXIvRnVuY3Rpb25Ob3RGb3VuZEV4Y2VwdGlvbi5waHDyAgAA60+jafICAAByoACCpAEAAAAAAAAoAAAAc3JjL0Jyb2tlci9Db25zdGFudE5vdEZvdW5kRXhjZXB0aW9uLnBocJ0CAADrT6NpnQIAALEHY0ikAQAAAAAAABAAAABzcmMvZHVtcFR5cGUucGhwQQEAAOtPo2lBAQAAmh2nDaQBAAAAAAAALgAAAHNyYy9SZWZsZWN0aW9uL0NhbGxhYmxlcy9TaW1wbGVJbXB1cmVQb2ludC5waHAFCAAA60+jaQUIAACoAIFupAEAAAAAAAA0AAAAc3JjL1JlZmxlY3Rpb24vQ2FsbGFibGVzL0Z1bmN0aW9uQ2FsbGFibGVWYXJpYW50LnBocHQUAADrT6NpdBQAAIYsTjGkAQAAAAAAADcAAABzcmMvUmVmbGVjdGlvbi9DYWxsYWJsZXMvQ2FsbGFibGVQYXJhbWV0ZXJzQWNjZXB0b3IucGhw7wIAAOtPo2nvAgAAyiJS4KQBAAAAAAAALQAAAHNyYy9SZWZsZWN0aW9uL0NhbGxhYmxlcy9TaW1wbGVUaHJvd1BvaW50LnBocIkEAADrT6NpiQQAAIZrQxOkAQAAAAAAAEkAAABzcmMvUmVmbGVjdGlvbi9Bbm5vdGF0aW9ucy9Bbm5vdGF0aW9uc01ldGhvZHNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwHhMAAOtPo2keEwAAJcjtDaQBAAAAAAAATAAAAHNyYy9SZWZsZWN0aW9uL0Fubm90YXRpb25zL0Fubm90YXRpb25zUHJvcGVydGllc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHBtDwAA60+jaW0PAABV22HnpAEAAAAAAABDAAAAc3JjL1JlZmxlY3Rpb24vQW5ub3RhdGlvbnMvQW5ub3RhdGlvbnNNZXRob2RQYXJhbWV0ZXJSZWZsZWN0aW9uLnBocC4IAADrT6NpLggAAPO32+CkAQAAAAAAADsAAABzcmMvUmVmbGVjdGlvbi9Bbm5vdGF0aW9ucy9Bbm5vdGF0aW9uUHJvcGVydHlSZWZsZWN0aW9uLnBocGsIAADrT6NpawgAAEXbodSkAQAAAAAAADkAAABzcmMvUmVmbGVjdGlvbi9Bbm5vdGF0aW9ucy9Bbm5vdGF0aW9uTWV0aG9kUmVmbGVjdGlvbi5waHDwEQAA60+jafARAABvbOO/pAEAAAAAAABRAAAAc3JjL1JlZmxlY3Rpb24vUmVxdWlyZUV4dGVuc2lvbi9SZXF1aXJlRXh0ZW5kc01ldGhvZHNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwRgcAAOtPo2lGBwAAkYf33qQBAAAAAAAAVAAAAHNyYy9SZWZsZWN0aW9uL1JlcXVpcmVFeHRlbnNpb24vUmVxdWlyZUV4dGVuZHNQcm9wZXJ0aWVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocGwHAADrT6NpbAcAAD6/gKSkAQAAAAAAACwAAABzcmMvUmVmbGVjdGlvbi9GdW5jdGlvblJlZmxlY3Rpb25GYWN0b3J5LnBocEUEAADrT6NpRQQAAJ2HdLekAQAAAAAAACUAAABzcmMvUmVmbGVjdGlvbi9Db25zdGFudE5hbWVIZWxwZXIucGhwggIAAOtPo2mCAgAA0wVCmKQBAAAAAAAAJQAAAHNyYy9SZWZsZWN0aW9uL0VudW1DYXNlUmVmbGVjdGlvbi5waHCIAwAA60+jaYgDAADdHEu0pAEAAAAAAAApAAAAc3JjL1JlZmxlY3Rpb24vSW5pdGlhbGl6ZXJFeHByQ29udGV4dC5waHAPFwAA60+jaQ8XAACFIuMGpAEAAAAAAAAiAAAAc3JjL1JlZmxlY3Rpb24vQ2xhc3NOYW1lSGVscGVyLnBocA0CAADrT6NpDQIAAGFaeZ6kAQAAAAAAADUAAABzcmMvUmVmbGVjdGlvbi9DYWxsYWJsZUZ1bmN0aW9uVmFyaWFudFdpdGhQaHBEb2NzLnBocKMKAADrT6NpowoAADQqWt6kAQAAAAAAADYAAABzcmMvUmVmbGVjdGlvbi9SZXNvbHZlZEZ1bmN0aW9uVmFyaWFudFdpdGhPcmlnaW5hbC5waHB/KQAA60+jaX8pAAAmVfmRpAEAAAAAAAAsAAAAc3JjL1JlZmxlY3Rpb24vV3JhcHBlclByb3BlcnR5UmVmbGVjdGlvbi5waHD9AAAA60+jaf0AAADGNutApAEAAAAAAAAtAAAAc3JjL1JlZmxlY3Rpb24vUGFyYW1ldGVyc0FjY2VwdG9yU2VsZWN0b3IucGhwnJYAAOtPo2mclgAAr9TRlqQBAAAAAAAAPQAAAHNyYy9SZWZsZWN0aW9uL01peGluL01peGluTWV0aG9kc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHA6DAAA60+jaToMAABqVtDepAEAAAAAAAAuAAAAc3JjL1JlZmxlY3Rpb24vTWl4aW4vTWl4aW5NZXRob2RSZWZsZWN0aW9uLnBocDQIAADrT6NpNAgAACD3I12kAQAAAAAAAEAAAABzcmMvUmVmbGVjdGlvbi9NaXhpbi9NaXhpblByb3BlcnRpZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwnAsAAOtPo2mcCwAARF7b16QBAAAAAAAAKwAAAHNyYy9SZWZsZWN0aW9uL0dsb2JhbENvbnN0YW50UmVmbGVjdGlvbi5waHDCAQAA60+jacIBAAB2qFrKpAEAAAAAAAArAAAAc3JjL1JlZmxlY3Rpb24vRXh0ZW5kZWRNZXRob2RSZWZsZWN0aW9uLnBocEkGAADrT6NpSQYAALhYXKCkAQAAAAAAACUAAABzcmMvUmVmbGVjdGlvbi9Db25zdHJ1Y3RvcnNIZWxwZXIucGhwoQoAAOtPo2mhCgAAKFHC96QBAAAAAAAAMAAAAHNyYy9SZWZsZWN0aW9uL1BocC9FbnVtQ2FzZXNNZXRob2RSZWZsZWN0aW9uLnBocFMNAADrT6NpUw0AAEF3KfekAQAAAAAAAC0AAABzcmMvUmVmbGVjdGlvbi9QaHAvUGhwUGFyYW1ldGVyUmVmbGVjdGlvbi5waHB6EAAA60+jaXoQAADdZqQKpAEAAAAAAAAuAAAAc3JjL1JlZmxlY3Rpb24vUGhwL0J1aWx0aW5NZXRob2RSZWZsZWN0aW9uLnBocAsHAADrT6NpCwcAALAZ2GykAQAAAAAAADEAAABzcmMvUmVmbGVjdGlvbi9QaHAvUGhwTWV0aG9kUmVmbGVjdGlvbkZhY3RvcnkucGhwkgQAAOtPo2mSBAAABtrxwaQBAAAAAAAALQAAAHNyYy9SZWZsZWN0aW9uL1BocC9FbnVtUHJvcGVydHlSZWZsZWN0aW9uLnBocJgGAADrT6NpmAYAAFSFkpikAQAAAAAAAEIAAABzcmMvUmVmbGVjdGlvbi9QaHAvRW51bUFsbG93ZWRTdWJUeXBlc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHALAwAA60+jaQsDAADmnQy7pAEAAAAAAAA4AAAAc3JjL1JlZmxlY3Rpb24vUGhwL1BocE1ldGhvZEZyb21QYXJzZXJOb2RlUmVmbGVjdGlvbi5waHCAFgAA60+jaYAWAAA2/YBmpAEAAAAAAAAyAAAAc3JjL1JlZmxlY3Rpb24vUGhwL0Nsb3N1cmVDYWxsTWV0aG9kUmVmbGVjdGlvbi5waHDPEwAA60+jac8TAAC3WcaipAEAAAAAAAAvAAAAc3JjL1JlZmxlY3Rpb24vUGhwL1NpbXBsZVhNTEVsZW1lbnRQcm9wZXJ0eS5waHCQBwAA60+jaZAHAACmjxy7pAEAAAAAAAA7AAAAc3JjL1JlZmxlY3Rpb24vUGhwL1BocFBhcmFtZXRlckZyb21QYXJzZXJOb2RlUmVmbGVjdGlvbi5waHBIDQAA60+jaUgNAACb8V5ApAEAAAAAAAA0AAAAc3JjL1JlZmxlY3Rpb24vUGhwL05hdGl2ZUJ1aWx0aW5NZXRob2RSZWZsZWN0aW9uLnBocK0OAADrT6NprQ4AACquzkukAQAAAAAAAEQAAABzcmMvUmVmbGVjdGlvbi9QaHAvVW5pdmVyc2FsT2JqZWN0Q3JhdGVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocOgKAADrT6Np6AoAAE4Az06kAQAAAAAAACwAAABzcmMvUmVmbGVjdGlvbi9QaHAvUGhwRnVuY3Rpb25SZWZsZWN0aW9uLnBocAEuAADrT6NpAS4AAC2/StWkAQAAAAAAADIAAABzcmMvUmVmbGVjdGlvbi9QaHAvUGhwQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocDbKAADrT6NpNsoAACcxupqkAQAAAAAAACoAAABzcmMvUmVmbGVjdGlvbi9QaHAvUGhwTWV0aG9kUmVmbGVjdGlvbi5waHB4RgAA60+jaXhGAAC7geC+pAEAAAAAAAA2AAAAc3JjL1JlZmxlY3Rpb24vUGhwL1NvYXAvU29hcENsaWVudE1ldGhvZFJlZmxlY3Rpb24ucGhwRggAAOtPo2lGCAAAaRUW76QBAAAAAAAARQAAAHNyYy9SZWZsZWN0aW9uL1BocC9Tb2FwL1NvYXBDbGllbnRNZXRob2RzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocOkCAADrT6Np6QIAACu2sPmkAQAAAAAAAEUAAABzcmMvUmVmbGVjdGlvbi9QaHAvQ2xvc3VyZUNhbGxVbnJlc29sdmVkTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbi5waHB+BQAA60+jaX4FAADiS8NypAEAAAAAAABAAAAAc3JjL1JlZmxlY3Rpb24vUGhwL0VudW1VbnJlc29sdmVkUHJvcGVydHlQcm90b3R5cGVSZWZsZWN0aW9uLnBocPYDAADrT6Np9gMAALP7JzekAQAAAAAAADAAAABzcmMvUmVmbGVjdGlvbi9QaHAvRHVtbXlQYXJhbWV0ZXJXaXRoUGhwRG9jcy5waHDuBgAA60+jae4GAADP82otpAEAAAAAAAAsAAAAc3JjL1JlZmxlY3Rpb24vUGhwL1BocFByb3BlcnR5UmVmbGVjdGlvbi5waHDyFAAA60+jafIUAAB2uugSpAEAAAAAAAAzAAAAc3JjL1JlZmxlY3Rpb24vUGhwL1VuaXZlcnNhbE9iamVjdENyYXRlUHJvcGVydHkucGhwSgcAAOtPo2lKBwAAdD/+t6QBAAAAAAAAOgAAAHNyYy9SZWZsZWN0aW9uL1BocC9QaHBGdW5jdGlvbkZyb21QYXJzZXJOb2RlUmVmbGVjdGlvbi5waHD2LAAA60+jafYsAABUFCLIpAEAAAAAAAAlAAAAc3JjL1JlZmxlY3Rpb24vUGhwL0R1bW15UGFyYW1ldGVyLnBocAwGAADrT6NpDAYAAMhYqkKkAQAAAAAAAC0AAABzcmMvUmVmbGVjdGlvbi9QaHAvRXhpdEZ1bmN0aW9uUmVmbGVjdGlvbi5waHCkCwAA60+jaaQLAACkpQRWpAEAAAAAAAAqAAAAc3JjL1JlZmxlY3Rpb24vQ2xhc3NDb25zdGFudFJlZmxlY3Rpb24ucGhwXBIAAOtPo2lcEgAAXM9KTqQBAAAAAAAARgAAAHNyYy9SZWZsZWN0aW9uL1R5cGUvVW5pb25UeXBlVW5yZXNvbHZlZFByb3BlcnR5UHJvdG90eXBlUmVmbGVjdGlvbi5waHDUCgAA60+jadQKAABd01VfpAEAAAAAAABLAAAAc3JjL1JlZmxlY3Rpb24vVHlwZS9JbnRlcnNlY3Rpb25UeXBlVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwpQoAAOtPo2mlCgAAHe4nwqQBAAAAAAAARwAAAHNyYy9SZWZsZWN0aW9uL1R5cGUvQ2FsbGVkT25UeXBlVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwPxYAAOtPo2k/FgAAsmP1TqQBAAAAAAAAOgAAAHNyYy9SZWZsZWN0aW9uL1R5cGUvSW50ZXJzZWN0aW9uVHlwZVByb3BlcnR5UmVmbGVjdGlvbi5waHBuDwAA60+jaW4PAACaVKf3pAEAAAAAAAA9AAAAc3JjL1JlZmxlY3Rpb24vVHlwZS9VbnJlc29sdmVkUHJvcGVydHlQcm90b3R5cGVSZWZsZWN0aW9uLnBocM4BAADrT6NpzgEAAJn1VGCkAQAAAAAAAEMAAABzcmMvUmVmbGVjdGlvbi9UeXBlL0NhbGxiYWNrVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwLhQAAOtPo2kuFAAAmGW4Z6QBAAAAAAAAOwAAAHNyYy9SZWZsZWN0aW9uL1R5cGUvVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwwgEAAOtPo2nCAQAAgt1DLqQBAAAAAAAATQAAAHNyYy9SZWZsZWN0aW9uL1R5cGUvSW50ZXJzZWN0aW9uVHlwZVVucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24ucGhw6AoAAOtPo2noCgAAk0N5zKQBAAAAAAAARQAAAHNyYy9SZWZsZWN0aW9uL1R5cGUvQ2FsbGJhY2tVbnJlc29sdmVkUHJvcGVydHlQcm90b3R5cGVSZWZsZWN0aW9uLnBocGgOAADrT6NpaA4AAC2pM/CkAQAAAAAAADgAAABzcmMvUmVmbGVjdGlvbi9UeXBlL0ludGVyc2VjdGlvblR5cGVNZXRob2RSZWZsZWN0aW9uLnBocJodAADrT6Npmh0AAJbipP+kAQAAAAAAAEkAAABzcmMvUmVmbGVjdGlvbi9UeXBlL0NhbGxlZE9uVHlwZVVucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24ucGhwYw4AAOtPo2ljDgAARAjogKQBAAAAAAAARAAAAHNyYy9SZWZsZWN0aW9uL1R5cGUvVW5pb25UeXBlVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwlwoAAOtPo2mXCgAACDBT0KQBAAAAAAAAMwAAAHNyYy9SZWZsZWN0aW9uL1R5cGUvVW5pb25UeXBlUHJvcGVydHlSZWZsZWN0aW9uLnBocHAPAADrT6NpcA8AAMwvh36kAQAAAAAAADEAAABzcmMvUmVmbGVjdGlvbi9UeXBlL1VuaW9uVHlwZU1ldGhvZFJlZmxlY3Rpb24ucGhwVBcAAOtPo2lUFwAA3D9luaQBAAAAAAAALgAAAHNyYy9SZWZsZWN0aW9uL0luaXRpYWxpemVyRXhwclR5cGVSZXNvbHZlci5waHAsYQEA60+jaSxhAQCIwalJpAEAAAAAAAA5AAAAc3JjL1JlZmxlY3Rpb24vTWlzc2luZ1Byb3BlcnR5RnJvbVJlZmxlY3Rpb25FeGNlcHRpb24ucGhwfQEAAOtPo2l9AQAAm0ShJKQBAAAAAAAANQAAAHNyYy9SZWZsZWN0aW9uL1Byb3BlcnRpZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwUwMAAOtPo2lTAwAALT2EW6QBAAAAAAAAJQAAAHNyYy9SZWZsZWN0aW9uL1BhcmFtZXRlcnNBY2NlcHRvci5waHBJAgAA60+jaUkCAAA2VaASpAEAAAAAAAAlAAAAc3JjL1JlZmxlY3Rpb24vUHJvcGVydHlSZWZsZWN0aW9uLnBocFcCAADrT6NpVwIAADzIelekAQAAAAAAADQAAABzcmMvUmVmbGVjdGlvbi9XcmFwcGVkRXh0ZW5kZWRQcm9wZXJ0eVJlZmxlY3Rpb24ucGhwNwcAAOtPo2k3BwAA01258aQBAAAAAAAANQAAAHNyYy9SZWZsZWN0aW9uL0NvbnN0YW50L1J1bnRpbWVDb25zdGFudFJlZmxlY3Rpb24ucGhw1QUAAOtPo2nVBQAAYAdAAKQBAAAAAAAAMgAAAHNyYy9SZWZsZWN0aW9uL1NpZ25hdHVyZU1hcC9QYXJhbWV0ZXJTaWduYXR1cmUucGhwPwcAAOtPo2k/BwAAnBHht6QBAAAAAAAAMgAAAHNyYy9SZWZsZWN0aW9uL1NpZ25hdHVyZU1hcC9TaWduYXR1cmVNYXBQYXJzZXIucGhwnw0AAOtPo2mfDQAADUECOaQBAAAAAAAAQAAAAHNyYy9SZWZsZWN0aW9uL1NpZ25hdHVyZU1hcC9OYXRpdmVGdW5jdGlvblJlZmxlY3Rpb25Qcm92aWRlci5waHCTIAAA60+jaZMgAAA3wdalpAEAAAAAAAA0AAAAc3JjL1JlZmxlY3Rpb24vU2lnbmF0dXJlTWFwL1NpZ25hdHVyZU1hcFByb3ZpZGVyLnBocPkFAADrT6Np+QUAAFgNlzekAQAAAAAAADEAAABzcmMvUmVmbGVjdGlvbi9TaWduYXR1cmVNYXAvRnVuY3Rpb25TaWduYXR1cmUucGhwpAQAAOtPo2mkBAAA9PzJHKQBAAAAAAAAOAAAAHNyYy9SZWZsZWN0aW9uL1NpZ25hdHVyZU1hcC9QaHA4U2lnbmF0dXJlTWFwUHJvdmlkZXIucGhw8E4AAOtPo2nwTgAAYE2/daQBAAAAAAAAPAAAAHNyYy9SZWZsZWN0aW9uL1NpZ25hdHVyZU1hcC9GdW5jdGlvblNpZ25hdHVyZU1hcFByb3ZpZGVyLnBocAsnAADrT6NpCycAAM12UnCkAQAAAAAAADsAAABzcmMvUmVmbGVjdGlvbi9TaWduYXR1cmVNYXAvU2lnbmF0dXJlTWFwUHJvdmlkZXJGYWN0b3J5LnBocFIEAADrT6NpUgQAACXaj7+kAQAAAAAAACwAAABzcmMvUmVmbGVjdGlvbi9Ucml2aWFsUGFyYW1ldGVyc0FjY2VwdG9yLnBocEYIAADrT6NpRggAAC4/UmekAQAAAAAAACUAAABzcmMvUmVmbGVjdGlvbi9Db25zdGFudFJlZmxlY3Rpb24ucGhwfAEAAOtPo2l8AQAALCA9C6QBAAAAAAAAMwAAAHNyYy9SZWZsZWN0aW9uL0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvblJlZ2lzdHJ5LnBocL8NAADrT6Npvw0AAHsIlCOkAQAAAAAAAD4AAABzcmMvUmVmbGVjdGlvbi9OYXRpdmUvTmF0aXZlUGFyYW1ldGVyV2l0aFBocERvY3NSZWZsZWN0aW9uLnBocJQMAADrT6NplAwAABEQlTWkAQAAAAAAADIAAABzcmMvUmVmbGVjdGlvbi9OYXRpdmUvTmF0aXZlRnVuY3Rpb25SZWZsZWN0aW9uLnBocMsQAADrT6NpyxAAAFXD1lKkAQAAAAAAADMAAABzcmMvUmVmbGVjdGlvbi9OYXRpdmUvTmF0aXZlUGFyYW1ldGVyUmVmbGVjdGlvbi5waHCuCAAA60+jaa4IAABhdJHKpAEAAAAAAAAwAAAAc3JjL1JlZmxlY3Rpb24vTmF0aXZlL05hdGl2ZU1ldGhvZFJlZmxlY3Rpb24ucGhwCxsAAOtPo2kLGwAAQfwePqQBAAAAAAAALQAAAHNyYy9SZWZsZWN0aW9uL0V4dGVuZGVkUHJvcGVydHlSZWZsZWN0aW9uLnBocB0CAADrT6NpHQIAABZTiPmkAQAAAAAAAC0AAABzcmMvUmVmbGVjdGlvbi9SZXNvbHZlZFByb3BlcnR5UmVmbGVjdGlvbi5waHBLDwAA60+jaUsPAABeFdxwpAEAAAAAAAArAAAAc3JjL1JlZmxlY3Rpb24vUmVzb2x2ZWRNZXRob2RSZWZsZWN0aW9uLnBocD0XAADrT6NpPRcAABWUiJSkAQAAAAAAAEYAAABzcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvdmlkZXIvU2V0dGVyUmVmbGVjdGlvblByb3ZpZGVyUHJvdmlkZXIucGhwYQIAAOtPo2lhAgAA1zMXl6QBAAAAAAAARgAAAHNyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci9EaXJlY3RSZWZsZWN0aW9uUHJvdmlkZXJQcm92aWRlci5waHBQAgAA60+jaVACAACsbsyqpAEAAAAAAAA/AAAAc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3ZpZGVyL1JlZmxlY3Rpb25Qcm92aWRlckZhY3RvcnkucGhwUwIAAOtPo2lTAgAARyv1FqQBAAAAAAAAPQAAAHNyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci9EdW1teVJlZmxlY3Rpb25Qcm92aWRlci5waHCIBwAA60+jaYgHAAAxlvcipAEAAAAAAABEAAAAc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3ZpZGVyL0xhenlSZWZsZWN0aW9uUHJvdmlkZXJQcm92aWRlci5waHBgAgAA60+jaWACAACcHQ8GpAEAAAAAAABAAAAAc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3ZpZGVyL1JlZmxlY3Rpb25Qcm92aWRlclByb3ZpZGVyLnBocOkAAADrT6Np6QAAAAoJCRSkAQAAAAAAAEEAAABzcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvdmlkZXIvTWVtb2l6aW5nUmVmbGVjdGlvblByb3ZpZGVyLnBocN8MAADrT6Np3wwAAFQp2HKkAQAAAAAAADIAAABzcmMvUmVmbGVjdGlvbi9XcmFwcGVkRXh0ZW5kZWRNZXRob2RSZWZsZWN0aW9uLnBocDQQAADrT6NpNBAAAHU+mkekAQAAAAAAACUAAABzcmMvUmVmbGVjdGlvbi9JbmFjY2Vzc2libGVNZXRob2QucGhwKggAAOtPo2kqCAAAQ9iCjaQBAAAAAAAAJAAAAHNyYy9SZWZsZWN0aW9uL05hbWVzcGFjZUFuc3dlcmVyLnBocM8AAADrT6NpzwAAAFzcDnekAQAAAAAAACYAAABzcmMvUmVmbGVjdGlvbi9QYXJhbWV0ZXJSZWZsZWN0aW9uLnBocKUBAADrT6NppQEAANtgfTGkAQAAAAAAADoAAABzcmMvUmVmbGVjdGlvbi9BbGxvd2VkU3ViVHlwZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwogMAAOtPo2miAwAAVWxivKQBAAAAAAAAMQAAAHNyYy9SZWZsZWN0aW9uL1BhcmFtZXRlclJlZmxlY3Rpb25XaXRoUGhwRG9jcy5waHDRAQAA60+jadEBAADJeZD3pAEAAAAAAAAtAAAAc3JjL1JlZmxlY3Rpb24vRnVuY3Rpb25WYXJpYW50V2l0aFBocERvY3MucGhwGgYAAOtPo2kaBgAAqskeCaQBAAAAAAAATwAAAHNyYy9SZWZsZWN0aW9uL1BIUFN0YW4vTmF0aXZlUmVmbGVjdGlvbkVudW1SZXR1cm5EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHCSBQAA60+jaZIFAACwlLxHpAEAAAAAAAAiAAAAc3JjL1JlZmxlY3Rpb24vQ2xhc3NSZWZsZWN0aW9uLnBocDHzAADrT6NpMfMAAM2khiekAQAAAAAAACwAAABzcmMvUmVmbGVjdGlvbi9DbGFzc01lbWJlckFjY2Vzc0Fuc3dlcmVyLnBocHQCAADrT6NpdAIAAALtBkqkAQAAAAAAACgAAABzcmMvUmVmbGVjdGlvbi9DbGFzc01lbWJlclJlZmxlY3Rpb24ucGhwZAEAAOtPo2lkAQAAWTPV2aQBAAAAAAAALAAAAHNyYy9SZWZsZWN0aW9uL01ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhw7gkAAOtPo2nuCQAAIw3KQKQBAAAAAAAAJAAAAHNyYy9SZWZsZWN0aW9uL1Bhc3NlZEJ5UmVmZXJlbmNlLnBocCUHAADrT6NpJQcAAK1C7gOkAQAAAAAAADMAAABzcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvdmlkZXJTdGF0aWNBY2Nlc3Nvci5waHCnAgAA60+jaacCAAAyzQBIpAEAAAAAAAAdAAAAc3JjL1JlZmxlY3Rpb24vQXNzZXJ0aW9ucy5waHD9CwAA60+jaf0LAABrWAjGpAEAAAAAAAAlAAAAc3JjL1JlZmxlY3Rpb24vRnVuY3Rpb25SZWZsZWN0aW9uLnBocMoFAADrT6NpygUAAKWknsCkAQAAAAAAACoAAABzcmMvUmVmbGVjdGlvbi9SZXNvbHZlZEZ1bmN0aW9uVmFyaWFudC5waHCtAQAA60+jaa0BAABsaSfUpAEAAAAAAAAyAAAAc3JjL1JlZmxlY3Rpb24vQWRkaXRpb25hbENvbnN0cnVjdG9yc0V4dGVuc2lvbi5waHDpAgAA60+jaekCAAALClc8pAEAAAAAAAAlAAAAc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3ZpZGVyLnBocI8FAADrT6NpjwUAAJz9ciGkAQAAAAAAADcAAABzcmMvUmVmbGVjdGlvbi9NaXNzaW5nTWV0aG9kRnJvbVJlZmxlY3Rpb25FeGNlcHRpb24ucGhwdgEAAOtPo2l2AQAAQ3qVYqQBAAAAAAAAJwAAAHNyYy9SZWZsZWN0aW9uL0Jyb2tlckF3YXJlRXh0ZW5zaW9uLnBocB0BAADrT6NpHQEAAPBKghekAQAAAAAAADkAAABzcmMvUmVmbGVjdGlvbi9NaXNzaW5nQ29uc3RhbnRGcm9tUmVmbGVjdGlvbkV4Y2VwdGlvbi5waHB8AQAA60+jaXwBAADL+CfKpAEAAAAAAAAiAAAAc3JjL1JlZmxlY3Rpb24vRnVuY3Rpb25WYXJpYW50LnBocDEIAADrT6NpMQgAACR51dekAQAAAAAAADIAAABzcmMvUmVmbGVjdGlvbi9NZXRob2RzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocDoDAADrT6NpOgMAAEdnToOkAQAAAAAAADQAAABzcmMvUmVmbGVjdGlvbi9HZW5lcmljUGFyYW1ldGVyc0FjY2VwdG9yUmVzb2x2ZXIucGhwRRMAAOtPo2lFEwAAIPvGPaQBAAAAAAAAMAAAAHNyYy9SZWZsZWN0aW9uL1BhcmFtZXRlcnNBY2NlcHRvcldpdGhQaHBEb2NzLnBocBMCAADrT6NpEwIAAE+QJEWkAQAAAAAAACMAAABzcmMvUmVmbGVjdGlvbi9NZXRob2RSZWZsZWN0aW9uLnBocNICAADrT6Np0gIAAJB15yqkAQAAAAAAAC4AAABzcmMvUmVmbGVjdGlvbi9EdW1teS9EdW1teU1ldGhvZFJlZmxlY3Rpb24ucGhwgwsAAOtPo2mDCwAAEzJnVqQBAAAAAAAAMAAAAHNyYy9SZWZsZWN0aW9uL0R1bW15L0R1bW15UHJvcGVydHlSZWZsZWN0aW9uLnBocE8GAADrT6NpTwYAAHbpRYekAQAAAAAAADAAAABzcmMvUmVmbGVjdGlvbi9EdW1teS9EdW1teUNvbnN0YW50UmVmbGVjdGlvbi5waHB1BwAA60+jaXUHAADV2UGepAEAAAAAAAA0AAAAc3JjL1JlZmxlY3Rpb24vRHVtbXkvQ2hhbmdlZFR5cGVNZXRob2RSZWZsZWN0aW9uLnBocBYQAADrT6NpFhAAAH8wKq+kAQAAAAAAADYAAABzcmMvUmVmbGVjdGlvbi9EdW1teS9DaGFuZ2VkVHlwZVByb3BlcnR5UmVmbGVjdGlvbi5waHCUCQAA60+jaZQJAAB/bbPmpAEAAAAAAAAzAAAAc3JjL1JlZmxlY3Rpb24vRHVtbXkvRHVtbXlDb25zdHJ1Y3RvclJlZmxlY3Rpb24ucGhwAQwAAOtPo2kBDAAADPuPd6QBAAAAAAAAUwAAAHNyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlU3R1YmJlci9QaHBTdG9ybVN0dWJzU291cmNlU3R1YmJlckZhY3RvcnkucGhwhQMAAOtPo2mFAwAAntSKi6QBAAAAAAAAUAAAAHNyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlU3R1YmJlci9SZWZsZWN0aW9uU291cmNlU3R1YmJlckZhY3RvcnkucGhw3AIAAOtPo2ncAgAAaLH+mKQBAAAAAAAAVgAAAHNyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRQc3JBdXRvbG9hZGVyTG9jYXRvckZhY3RvcnkucGhwcwEAAOtPo2lzAQAAx6MvYKQBAAAAAAAAXAAAAHNyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRTaW5nbGVGaWxlU291cmNlTG9jYXRvclJlcG9zaXRvcnkucGhwnwMAAOtPo2mfAwAAP0KQB6QBAAAAAAAATgAAAHNyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9SZWZsZWN0aW9uQ2xhc3NTb3VyY2VMb2NhdG9yLnBocEwHAADrT6NpTAcAAKHYKz+kAQAAAAAAAFAAAABzcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvQXV0b2xvYWRGdW5jdGlvbnNTb3VyY2VMb2NhdG9yLnBocLwIAADrT6NpvAgAAJOLW0ikAQAAAAAAAEAAAABzcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvUGhwRmlsZUNsZWFuZXIucGhw3CIAAOtPo2ncIgAAnWDws6QBAAAAAAAAUgAAAHNyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRTaW5nbGVGaWxlU291cmNlTG9jYXRvci5waHAlJQAA60+jaSUlAABL1tEhpAEAAAAAAABSAAAAc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL1BocFZlcnNpb25CbGFja2xpc3RTb3VyY2VMb2NhdG9yLnBocMkGAADrT6NpyQYAABjG6gKkAQAAAAAAAEIAAABzcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvRmlsZU5vZGVzRmV0Y2hlci5waHD5BQAA60+jafkFAABqbgbMpAEAAAAAAABZAAAAc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL09wdGltaXplZFNpbmdsZUZpbGVTb3VyY2VMb2NhdG9yRmFjdG9yeS5waHAZAQAA60+jaRkBAABp9ZAVpAEAAAAAAABAAAAAc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL0NhY2hpbmdWaXNpdG9yLnBocLsSAADrT6NpuxIAAGMkZlakAQAAAAAAAD0AAABzcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvRmV0Y2hlZE5vZGUucGhwCgQAAOtPo2kKBAAA9u/Y4qQBAAAAAAAAWAAAAHNyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWREaXJlY3RvcnlTb3VyY2VMb2NhdG9yRmFjdG9yeS5waHBpHwAA60+jaWkfAACn/df4pAEAAAAAAABRAAAAc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL09wdGltaXplZERpcmVjdG9yeVNvdXJjZUxvY2F0b3IucGhw+TQAAOtPo2n5NAAA/BO4PaQBAAAAAAAAYAAAAHNyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9Db21wb3Nlckpzb25BbmRJbnN0YWxsZWRKc29uU291cmNlTG9jYXRvck1ha2VyLnBocLkqAADrT6NpuSoAACab9jukAQAAAAAAAEQAAABzcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvRmV0Y2hlZE5vZGVzUmVzdWx0LnBocCcGAADrT6NpJwYAAOsaUeGkAQAAAAAAAE0AAABzcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvU2tpcENsYXNzQWxpYXNTb3VyY2VMb2NhdG9yLnBocMwGAADrT6NpzAYAAHOm6dCkAQAAAAAAAEsAAABzcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvRmlsZVJlYWRUcmFwU3RyZWFtV3JhcHBlci5waHApHgAA60+jaSkeAADacXyTpAEAAAAAAABQAAAAc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL1Jld3JpdGVDbGFzc0FsaWFzU291cmNlTG9jYXRvci5waHDRBgAA60+jadEGAACbLPu9pAEAAAAAAABUAAAAc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL05ld09wdGltaXplZERpcmVjdG9yeVNvdXJjZUxvY2F0b3IucGhwByAAAOtPo2kHIAAAUnB9GKQBAAAAAAAARwAAAHNyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9BdXRvbG9hZFNvdXJjZUxvY2F0b3IucGhwbzYAAOtPo2lvNgAAt+MleqQBAAAAAAAATwAAAHNyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRQc3JBdXRvbG9hZGVyTG9jYXRvci5waHDNCAAA60+jac0IAAAaW2JCpAEAAAAAAABbAAAAc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL09wdGltaXplZERpcmVjdG9yeVNvdXJjZUxvY2F0b3JSZXBvc2l0b3J5LnBocLEDAADrT6NpsQMAAGLEpRGkAQAAAAAAAEMAAABzcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb25Qcm92aWRlckZhY3RvcnkucGhwIwEAAOtPo2kjAQAA0Sl5AqQBAAAAAAAASAAAAHNyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvblNvdXJjZUxvY2F0b3JGYWN0b3J5LnBocMUhAADrT6NpxSEAAKQiawKkAQAAAAAAADwAAABzcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb25Qcm92aWRlci5waHBsVAAA60+jaWxUAACYlx8ipAEAAAAAAABAAAAAc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9SZWZsZWN0b3IvTWVtb2l6aW5nUmVmbGVjdG9yLnBocIgPAADrT6NpiA8AAPUOJ2KkAQAAAAAAACsAAABzcmMvUmVmbGVjdGlvbi9QaHBWZXJzaW9uU3RhdGljQWNjZXNzb3IucGhwawIAAOtPo2lrAgAAcZ7NP6QBAAAAAAAANgAAAHNyYy9SZWZsZWN0aW9uL1Jlc29sdmVkRnVuY3Rpb25WYXJpYW50V2l0aENhbGxhYmxlLnBocK8PAADrT6Nprw8AAOsZytOkAQAAAAAAACMAAABzcmMvSW50ZXJuYWwvQ29tYmluYXRpb25zSGVscGVyLnBocAYDAADrT6NpBgMAAHuVb3WkAQAAAAAAACoAAABzcmMvSW50ZXJuYWwvRGlyZWN0b3J5Q3JlYXRvckV4Y2VwdGlvbi5waHA4AgAA60+jaTgCAACrfgLrpAEAAAAAAAAcAAAAc3JjL0ludGVybmFsL0J5dGVzSGVscGVyLnBocIYCAADrT6NphgIAAKJlfAmkAQAAAAAAADQAAABzcmMvSW50ZXJuYWwvQ29udGFpbmVyRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwKQcAAOtPo2kpBwAAgad3Q6QBAAAAAAAAHgAAAHNyYy9JbnRlcm5hbC9TcHJpbnRmSGVscGVyLnBocPkAAADrT6Np+QAAAMcLNpqkAQAAAAAAAB8AAABzcmMvSW50ZXJuYWwvQ29tcG9zZXJIZWxwZXIucGhwDAsAAOtPo2kMCwAAjVSC7qQBAAAAAAAAIQAAAHNyYy9JbnRlcm5hbC9EaXJlY3RvcnlDcmVhdG9yLnBocKgCAADrT6NpqAIAAHreeb2kAQAAAAAAAB4AAABzcmMvSW50ZXJuYWwvQWdlbnREZXRlY3Rvci5waHCRBQAA60+jaZEFAAD2sPT+pAEAAAAAAAAUAAAAc3JjL1RyaW5hcnlMb2dpYy5waHCSFwAA60+jaZIXAACJMyrspAEAAAAAAAAgAAAAc3JjL0NvbGxlY3RvcnMvQ29sbGVjdGVkRGF0YS5waHBaBwAA60+jaVoHAAATbmEEpAEAAAAAAAAcAAAAc3JjL0NvbGxlY3RvcnMvQ29sbGVjdG9yLnBocAwDAADrT6NpDAMAALGP5zukAQAAAAAAACIAAABzcmMvQ29sbGVjdG9ycy9SZWdpc3RyeUZhY3RvcnkucGhwGgIAAOtPo2kaAgAApA93yqQBAAAAAAAAGwAAAHNyYy9Db2xsZWN0b3JzL1JlZ2lzdHJ5LnBocHYFAADrT6NpdgUAACj8iwakAQAAAAAAACAAAABzcmMvU2hvdWxkTm90SGFwcGVuRXhjZXB0aW9uLnBocAcBAADrT6NpBwEAAJ4FB4CkAQAAAAAAABIAAABzcmMvZGVidWdTY29wZS5waHCdAAAA60+jaZ0AAADyGQy9pAEAAAAAAAAfAAAAc3JjL1BocERvYy9UeXBlTm9kZVJlc29sdmVyLnBocOK5AADrT6Np4rkAANqgcxykAQAAAAAAACEAAABzcmMvUGhwRG9jL1N0dWJGaWxlc0V4dGVuc2lvbi5waHB0AgAA60+jaXQCAACIUqympAEAAAAAAAAlAAAAc3JjL1BocERvYy9Db25zdEV4cHJQYXJzZXJGYWN0b3J5LnBocNgBAADrT6Np2AEAAPCXv9ekAQAAAAAAACAAAABzcmMvUGhwRG9jL1RhZy9EZXByZWNhdGVkVGFnLnBocGMBAADrT6NpYwEAALVW6PWkAQAAAAAAAB8AAABzcmMvUGhwRG9jL1RhZy9UeXBlQWxpYXNUYWcucGhwPwMAAOtPo2k/AwAAss0X6aQBAAAAAAAAJQAAAHNyYy9QaHBEb2MvVGFnL1R5cGVBbGlhc0ltcG9ydFRhZy5waHA4AwAA60+jaTgDAAC0QXR3pAEAAAAAAAAgAAAAc3JjL1BocERvYy9UYWcvSW1wbGVtZW50c1RhZy5waHBfAQAA60+jaV8BAAAlQYg7pAEAAAAAAAAcAAAAc3JjL1BocERvYy9UYWcvTWV0aG9kVGFnLnBocCAFAADrT6NpIAUAAA0Qr6GkAQAAAAAAACUAAABzcmMvUGhwRG9jL1RhZy9NZXRob2RUYWdQYXJhbWV0ZXIucGhwHQUAAOtPo2kdBQAA1jxhOKQBAAAAAAAAJwAAAHNyYy9QaHBEb2MvVGFnL1JlcXVpcmVJbXBsZW1lbnRzVGFnLnBocGYBAADrT6NpZgEAABN8AJSkAQAAAAAAACQAAABzcmMvUGhwRG9jL1RhZy9SZXF1aXJlRXh0ZW5kc1RhZy5waHBjAQAA60+jaWMBAABIjkSppAEAAAAAAAAlAAAAc3JjL1BocERvYy9UYWcvQXNzZXJ0VGFnUGFyYW1ldGVyLnBocLoFAADrT6NpugUAAOrG9hukAQAAAAAAABsAAABzcmMvUGhwRG9jL1RhZy9UeXBlZFRhZy5waHD3AAAA60+jafcAAADdKrw0pAEAAAAAAAAeAAAAc3JjL1BocERvYy9UYWcvVGVtcGxhdGVUYWcucGhwYgQAAOtPo2liBAAAYdH4rKQBAAAAAAAAHgAAAHNyYy9QaHBEb2MvVGFnL1BhcmFtT3V0VGFnLnBocB0CAADrT6NpHQIAAH5tEzukAQAAAAAAABsAAABzcmMvUGhwRG9jL1RhZy9QYXJhbVRhZy5waHD4AgAA60+jafgCAAA57F2cpAEAAAAAAAAdAAAAc3JjL1BocERvYy9UYWcvRXh0ZW5kc1RhZy5waHBcAQAA60+jaVwBAAA1WSGTpAEAAAAAAAAhAAAAc3JjL1BocERvYy9UYWcvU2VsZk91dFR5cGVUYWcucGhwIAIAAOtPo2kgAgAA4rEAuaQBAAAAAAAAHAAAAHNyYy9QaHBEb2MvVGFnL0Fzc2VydFRhZy5waHDRCwAA60+jadELAAD2/jPkpAEAAAAAAAAZAAAAc3JjL1BocERvYy9UYWcvVmFyVGFnLnBocFgDAADrT6NpWAMAALoYB/GkAQAAAAAAAB4AAABzcmMvUGhwRG9jL1RhZy9Qcm9wZXJ0eVRhZy5waHDCBAAA60+jacIEAADhlBMKpAEAAAAAAAAcAAAAc3JjL1BocERvYy9UYWcvUmV0dXJuVGFnLnBocFsDAADrT6NpWwMAAL1u+takAQAAAAAAACYAAABzcmMvUGhwRG9jL1RhZy9QYXJhbUNsb3N1cmVUaGlzVGFnLnBocCsCAADrT6NpKwIAANao3hSkAQAAAAAAABwAAABzcmMvUGhwRG9jL1RhZy9UaHJvd3NUYWcucGhwWwEAAOtPo2lbAQAApCoKAqQBAAAAAAAAGgAAAHNyYy9QaHBEb2MvVGFnL1VzZXNUYWcucGhwWQEAAOtPo2lZAQAArnswMqQBAAAAAAAAGwAAAHNyYy9QaHBEb2MvVGFnL01peGluVGFnLnBocFoBAADrT6NpWgEAAGmQis6kAQAAAAAAACcAAABzcmMvUGhwRG9jL1N0dWJTb3VyY2VMb2NhdG9yRmFjdG9yeS5waHAzCwAA60+jaTMLAACXlIrNpAEAAAAAAAA4AAAAc3JjL1BocERvYy9UeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlci5waHDLAAAA60+jacsAAABwOiinpAEAAAAAAAAiAAAAc3JjL1BocERvYy9SZXNvbHZlZFBocERvY0Jsb2NrLnBocNKZAADrT6Np0pkAALzxtzikAQAAAAAAAC0AAABzcmMvUGhwRG9jL1R5cGVOb2RlUmVzb2x2ZXJBd2FyZUV4dGVuc2lvbi5waHDZAAAA60+jadkAAABO+CxzpAEAAAAAAAAoAAAAc3JjL1BocERvYy9UeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uLnBocBADAADrT6NpEAMAAAQggSmkAQAAAAAAAC0AAABzcmMvUGhwRG9jL0pzb25WYWxpZGF0ZVN0dWJGaWxlc0V4dGVuc2lvbi5waHAuAgAA60+jaS4CAAA0LbLdpAEAAAAAAAA0AAAAc3JjL1BocERvYy9OYW1lU2NvcGVBbHJlYWR5QmVpbmdDcmVhdGVkRXhjZXB0aW9uLnBocJMAAADrT6NpkwAAAC/9L3+kAQAAAAAAABoAAABzcmMvUGhwRG9jL1BocERvY0Jsb2NrLnBocMMvAADrT6Npwy8AANz5a+6kAQAAAAAAAD4AAABzcmMvUGhwRG9jL0RpcmVjdFR5cGVOb2RlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocCYCAADrT6NpJgIAAB7UIE6kAQAAAAAAACgAAABzcmMvUGhwRG9jL1BocERvY0luaGVyaXRhbmNlUmVzb2x2ZXIucGhw7RUAAOtPo2ntFQAANmSI1aQBAAAAAAAAIAAAAHNyYy9QaHBEb2MvU3R1YkZpbGVzUHJvdmlkZXIucGhw8wAAAOtPo2nzAAAAotQl5KQBAAAAAAAAIwAAAHNyYy9QaHBEb2MvUGhwRG9jU3RyaW5nUmVzb2x2ZXIucGhwqQMAAOtPo2mpAwAAFDuS3KQBAAAAAAAAIQAAAHNyYy9QaHBEb2MvU3R1YlBocERvY1Byb3ZpZGVyLnBocEYyAADrT6NpRjIAADgDKWekAQAAAAAAACQAAABzcmMvUGhwRG9jL0NvbnN0RXhwck5vZGVSZXNvbHZlci5waHAeFQAA60+jaR4VAAAZkmMKpAEAAAAAAAAcAAAAc3JjL1BocERvYy9TdHViVmFsaWRhdG9yLnBocJ43AADrT6NpnjcAAOWWmjCkAQAAAAAAACcAAABzcmMvUGhwRG9jL0RlZmF1bHRTdHViRmlsZXNQcm92aWRlci5waHDnCQAA60+jaecJAABQnn/bpAEAAAAAAAAqAAAAc3JjL1BocERvYy9Db3VudGFibGVTdHViRmlsZXNFeHRlbnNpb24ucGhwJAIAAOtPo2kkAgAAc5pVVqQBAAAAAAAAPAAAAHNyYy9QaHBEb2MvTGF6eVR5cGVOb2RlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocKADAADrT6NpoAMAAOqw4I+kAQAAAAAAACEAAABzcmMvUGhwRG9jL1BocERvY05vZGVSZXNvbHZlci5waHANaQAA60+jaQ1pAAC6JBIjpAEAAAAAAAAhAAAAc3JjL1BocERvYy9UeXBlU3RyaW5nUmVzb2x2ZXIucGhwsgQAAOtPo2myBAAAxQ/taqQBAAAAAAAALQAAAHNyYy9QaHBEb2MvU29ja2V0U2VsZWN0U3R1YkZpbGVzRXh0ZW5zaW9uLnBocF4CAADrT6NpXgIAAJ9E2MukAQAAAAAAADUAAABzcmMvUGhwRG9jL1R5cGVOb2RlUmVzb2x2ZXJFeHRlbnNpb25Bd2FyZVJlZ2lzdHJ5LnBocHEDAADrT6NpcQMAAFFBBeWkAQAAAAAAADAAAABzcmMvUGhwRG9jL1R5cGVOb2RlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeS5waHDUAAAA60+jadQAAAB1+QvlpAEAAAAAAAAvAAAAc3JjL1BocERvYy9SZWZsZWN0aW9uRW51bVN0dWJGaWxlc0V4dGVuc2lvbi5waHAqAgAA60+jaSoCAAAMCK+ApAEAAAAAAAALAAAAYmluL3BocHN0YW4aGgAA60+jaRoaAAAWnbbUpAEAAAAAAAAkAAAAcmVzb3VyY2VzL2Z1bmN0aW9uTWFwX3BocDgyZGVsdGEucGhw+QQAAOtPo2n5BAAA/ariV6QBAAAAAAAAHgAAAHJlc291cmNlcy9mdW5jdGlvbk1ldGFkYXRhLnBocBFbAQDrT6NpEVsBAD4aSRukAQAAAAAAACQAAAByZXNvdXJjZXMvZnVuY3Rpb25NYXBfcGhwODRkZWx0YS5waHAcBAAA60+jaRwEAAC4qqTrpAEAAAAAAAAkAAAAcmVzb3VyY2VzL2Z1bmN0aW9uTWFwX3BocDgzZGVsdGEucGhw2AYAAOtPo2nYBgAAhrgupaQBAAAAAAAAGQAAAHJlc291cmNlcy9SZWdleEdyYW1tYXIucHCrHwAA60+jaasfAADONz95pAEAAAAAAAAZAAAAcmVzb3VyY2VzL2Z1bmN0aW9uTWFwLnBocKh2DwDrT6NpqHYPAP2b3nGkAQAAAAAAACQAAAByZXNvdXJjZXMvZnVuY3Rpb25NYXBfcGhwODBkZWx0YS5waHBsagAA60+jaWxqAAA8h0uppAEAAAAAAAAmAAAAcmVzb3VyY2VzL2Z1bmN0aW9uTWFwX2JsZWVkaW5nRWRnZS5waHBITAAA60+jaUhMAABSDSyEpAEAAAAAAAAkAAAAcmVzb3VyY2VzL2Z1bmN0aW9uTWFwX3BocDgxZGVsdGEucGhw8RYAAOtPo2nxFgAAAKR2MaQBAAAAAAAAJAAAAHJlc291cmNlcy9mdW5jdGlvbk1hcF9waHA3NGRlbHRhLnBocDUPAADrT6NpNQ8AAIwJq5CkAQAAAAAAADEAAAByZXNvdXJjZXMvZnVuY3Rpb25NYXBfcGhwODBkZWx0YV9ibGVlZGluZ0VkZ2UucGhw/wQAAOtPo2n/BAAAA0fumqQBAAAAAAAAPD9waHAKCmRlY2xhcmUgKHN0cmljdF90eXBlcz0xKTsKbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NTsKCnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZWRDb2RlRXhjZXB0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvQW5hbHlzZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9BbmFseXNlclJlc3VsdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0FuYWx5c2VyL0FuYWx5c2VyUmVzdWx0RmluYWxpemVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvQXJndW1lbnRzTm9ybWFsaXplci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0FuYWx5c2VyL0NvbmRpdGlvbmFsRXhwcmVzc2lvbkhvbGRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0FuYWx5c2VyL0NvbnN0YW50UmVzb2x2ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9Db25zdGFudFJlc29sdmVyRmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0FuYWx5c2VyL0RpcmVjdEludGVybmFsU2NvcGVGYWN0b3J5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvRW5kU3RhdGVtZW50UmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvRW5zdXJlZE5vbk51bGxhYmlsaXR5UmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvRW5zdXJlZE5vbk51bGxhYmlsaXR5UmVzdWx0RXhwcmVzc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0FuYWx5c2VyL0Vycm9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvRXhwcmVzc2lvbkNvbnRleHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9FeHByZXNzaW9uUmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvRXhwcmVzc2lvblR5cGVIb2xkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9GaWxlQW5hbHlzZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9GaWxlQW5hbHlzZXJSZXN1bHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9GaW5hbGl6ZXJSZXN1bHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9JZ25vcmUvSWdub3JlTGV4ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9JZ25vcmUvSWdub3JlUGFyc2VFeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9JZ25vcmUvSWdub3JlZEVycm9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvSWdub3JlL0lnbm9yZWRFcnJvckhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0FuYWx5c2VyL0lnbm9yZS9JZ25vcmVkRXJyb3JIZWxwZXJQcm9jZXNzZWRSZXN1bHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9JZ25vcmUvSWdub3JlZEVycm9ySGVscGVyUmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvSW1wdXJlUG9pbnQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9JbnRlcm5hbEVycm9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvSW50ZXJuYWxTY29wZUZhY3RvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9MYXp5SW50ZXJuYWxTY29wZUZhY3RvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9Mb2NhbElnbm9yZXNQcm9jZXNzb3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9Mb2NhbElnbm9yZXNQcm9jZXNzb3JSZXN1bHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9NdXRhdGluZ1Njb3BlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvTmFtZVNjb3BlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvTm9kZVNjb3BlUmVzb2x2ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9OdWxsc2FmZU9wZXJhdG9ySGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvT3V0T2ZDbGFzc1Njb3BlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvUHJvY2Vzc0Nsb3N1cmVSZXN1bHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9SZXN1bHRDYWNoZS9SZXN1bHRDYWNoZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0FuYWx5c2VyL1Jlc3VsdENhY2hlL1Jlc3VsdENhY2hlQ2xlYXJlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0FuYWx5c2VyL1Jlc3VsdENhY2hlL1Jlc3VsdENhY2hlTWFuYWdlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0FuYWx5c2VyL1Jlc3VsdENhY2hlL1Jlc3VsdENhY2hlTWFuYWdlckZhY3RvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9SZXN1bHRDYWNoZS9SZXN1bHRDYWNoZVByb2Nlc3NSZXN1bHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9SaWNoZXJTY29wZUdldFR5cGVIZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9SdWxlRXJyb3JUcmFuc2Zvcm1lci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0FuYWx5c2VyL1Njb3BlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvU2NvcGVDb250ZXh0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvU2NvcGVGYWN0b3J5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvU3BlY2lmaWVkVHlwZXMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9TdGF0ZW1lbnRDb250ZXh0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvU3RhdGVtZW50RXhpdFBvaW50LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvU3RhdGVtZW50UmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvVGhyb3dQb2ludC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0FuYWx5c2VyL1R5cGVTcGVjaWZpZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9UeXBlU3BlY2lmaWVyQXdhcmVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9BbmFseXNlci9UeXBlU3BlY2lmaWVyQ29udGV4dC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0FuYWx5c2VyL1R5cGVTcGVjaWZpZXJGYWN0b3J5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQW5hbHlzZXIvVW5kZWZpbmVkVmFyaWFibGVFeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ccm9rZXIvQW5vbnltb3VzQ2xhc3NOYW1lSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQnJva2VyL0Jyb2tlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0Jyb2tlci9Ccm9rZXJGYWN0b3J5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQnJva2VyL0NsYXNzQXV0b2xvYWRpbmdFeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ccm9rZXIvQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0Jyb2tlci9Db25zdGFudE5vdEZvdW5kRXhjZXB0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQnJva2VyL0Z1bmN0aW9uTm90Rm91bmRFeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9DYWNoZS9DYWNoZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NhY2hlL0NhY2hlSXRlbS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NhY2hlL0NhY2hlU3RvcmFnZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NhY2hlL0ZpbGVDYWNoZVN0b3JhZ2UucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9DYWNoZS9NZW1vcnlDYWNoZVN0b3JhZ2UucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9DbGFzc2VzL0ZvcmJpZGRlbkNsYXNzTmFtZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NvbGxlY3RvcnMvQ29sbGVjdGVkRGF0YS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NvbGxlY3RvcnMvQ29sbGVjdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29sbGVjdG9ycy9SZWdpc3RyeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NvbGxlY3RvcnMvUmVnaXN0cnlGYWN0b3J5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9BbmFseXNlQXBwbGljYXRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL0FuYWx5c2VDb21tYW5kLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9BbmFseXNlclJ1bm5lci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NvbW1hbmQvQW5hbHlzaXNSZXN1bHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL0NsZWFyUmVzdWx0Q2FjaGVDb21tYW5kLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9Db21tYW5kSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9EaWFnbm9zZUNvbW1hbmQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL0R1bXBQYXJhbWV0ZXJzQ29tbWFuZC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvQmFzZWxpbmVOZW9uRXJyb3JGb3JtYXR0ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0Jhc2VsaW5lUGhwRXJyb3JGb3JtYXR0ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0NoZWNrc3R5bGVFcnJvckZvcm1hdHRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvQ2lEZXRlY3RlZEVycm9yRm9ybWF0dGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9FcnJvckZvcm1hdHRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvR2l0aHViRXJyb3JGb3JtYXR0ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0dpdGxhYkVycm9yRm9ybWF0dGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9Kc29uRXJyb3JGb3JtYXR0ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0p1bml0RXJyb3JGb3JtYXR0ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL1Jhd0Vycm9yRm9ybWF0dGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9UYWJsZUVycm9yRm9ybWF0dGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9UZWFtY2l0eUVycm9yRm9ybWF0dGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9FcnJvcnNDb25zb2xlU3R5bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL0ZpeGVyQXBwbGljYXRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL0ZpeGVyUHJvY2Vzc0V4Y2VwdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NvbW1hbmQvRml4ZXJXb3JrZXJDb21tYW5kLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9JZ25vcmVkUmVnZXhWYWxpZGF0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL0lnbm9yZWRSZWdleFZhbGlkYXRvclJlc3VsdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NvbW1hbmQvSW5jZXB0aW9uTm90U3VjY2Vzc2Z1bEV4Y2VwdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0NvbW1hbmQvSW5jZXB0aW9uUmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9PdXRwdXQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL091dHB1dFN0eWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9TeW1mb255L1N5bWZvbnlPdXRwdXQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Db21tYW5kL1N5bWZvbnkvU3ltZm9ueVN0eWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvQ29tbWFuZC9Xb3JrZXJDb21tYW5kLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeS9EZXBlbmRlbmN5UmVzb2x2ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkQXR0cmlidXRlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkQ2xhc3NDb25zdGFudE5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZENsYXNzQ29uc3RhbnRzTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkQ2xhc3NOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRFbnVtQ2FzZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZEVudW1Ob2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRGdW5jdGlvbk5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZEludGVyZmFjZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZE1ldGhvZE5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZFBhcmFtZXRlck5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZFBocERvY05vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZFByb3BlcnRpZXNOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRUcmFpdE5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZFRyYWl0VXNlQWRhcHRhdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlRmV0Y2hlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlUmVzb2x2ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZVZpc2l0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5L05vZGVEZXBlbmRlbmNpZXMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5L1Jvb3RFeHBvcnRlZE5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0JsZWVkaW5nRWRnZVRvZ2dsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vQ29uZGl0aW9uYWxUYWdzRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9Db25maWd1cmF0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0NvbnRhaW5lci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vQ29udGFpbmVyRmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vRGVyaXZhdGl2ZUNvbnRhaW5lckZhY3RvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0R1cGxpY2F0ZUluY2x1ZGVkRmlsZXNFeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0ludmFsaWRFeGNsdWRlUGF0aHNFeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0ludmFsaWRJZ25vcmVkRXJyb3JQYXR0ZXJuc0V4Y2VwdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTG9hZGVyRmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTWVtb2l6aW5nQ29udGFpbmVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9OZW9uL09wdGlvbmFsUGF0aC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTmVvbkFkYXB0ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL05lb25Mb2FkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL05ldHRlL05ldHRlQ29udGFpbmVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9QYXJhbWV0ZXJOb3RGb3VuZEV4Y2VwdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vUGFyYW1ldGVyc1NjaGVtYUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vUHJvamVjdENvbmZpZ0hlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vUmVmbGVjdGlvbi9DbGFzc1JlZmxlY3Rpb25FeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9SZWZsZWN0aW9uL0xhenlDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9SdWxlc0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvRHluYW1pY1Rocm93VHlwZUV4dGVuc2lvblByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0V4cHJlc3Npb25UeXBlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0xhenlEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvTGF6eUR5bmFtaWNUaHJvd1R5cGVFeHRlbnNpb25Qcm92aWRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9MYXp5RXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvTGF6eU9wZXJhdG9yVHlwZVNwZWNpZnlpbmdFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0xhenlQYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvblByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0xhenlQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uUHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvT3BlcmF0b3JUeXBlU3BlY2lmeWluZ0V4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvUGFyYW1ldGVyQ2xvc3VyZVR5cGVFeHRlbnNpb25Qcm92aWRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9QYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uUHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1ZhbGlkYXRlRXhjbHVkZVBhdGhzRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9WYWxpZGF0ZUlnbm9yZWRFcnJvcnNFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9EaWFnbm9zZS9EaWFnbm9zZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0RpYWdub3NlL1BIUFN0YW5EaWFnbm9zZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ZpbGUvQ291bGROb3RSZWFkRmlsZUV4Y2VwdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ZpbGUvQ291bGROb3RXcml0ZUZpbGVFeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9GaWxlL0ZpbGVFeGNsdWRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ZpbGUvRmlsZUV4Y2x1ZGVyRmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ZpbGUvRmlsZUV4Y2x1ZGVyUmF3RmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ZpbGUvRmlsZUZpbmRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ZpbGUvRmlsZUZpbmRlclJlc3VsdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ZpbGUvRmlsZUhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ZpbGUvRmlsZU1vbml0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9GaWxlL0ZpbGVNb25pdG9yUmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRmlsZS9GaWxlUmVhZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRmlsZS9GaWxlV3JpdGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRmlsZS9GdXp6eVJlbGF0aXZlUGF0aEhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ZpbGUvTnVsbFJlbGF0aXZlUGF0aEhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ZpbGUvUGFyZW50RGlyZWN0b3J5UmVsYXRpdmVQYXRoSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRmlsZS9QYXRoTm90Rm91bmRFeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9GaWxlL1JlbGF0aXZlUGF0aEhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ZpbGUvU2ltcGxlUmVsYXRpdmVQYXRoSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvRmlsZS9TeXN0ZW1BZ25vc3RpY1NpbXBsZVJlbGF0aXZlUGF0aEhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ludGVybmFsL0FnZW50RGV0ZWN0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9JbnRlcm5hbC9CeXRlc0hlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ludGVybmFsL0NvbWJpbmF0aW9uc0hlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ludGVybmFsL0NvbXBvc2VySGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvSW50ZXJuYWwvQ29udGFpbmVyRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9JbnRlcm5hbC9EaXJlY3RvcnlDcmVhdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvSW50ZXJuYWwvRGlyZWN0b3J5Q3JlYXRvckV4Y2VwdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL0ludGVybmFsL1NwcmludGZIZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0Fub255bW91c0NsYXNzTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvQm9vbGVhbkFuZE5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0Jvb2xlYW5Pck5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0JyZWFrbGVzc1doaWxlTG9vcE5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0NhdGNoV2l0aFVudGhyb3duRXhjZXB0aW9uTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvQ2xhc3NDb25zdGFudHNOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9DbGFzc01ldGhvZC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvQ2xhc3NNZXRob2RzTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvQ2xhc3NQcm9wZXJ0aWVzTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvQ2xhc3NQcm9wZXJ0eU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0NsYXNzU3RhdGVtZW50c0dhdGhlcmVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9DbG9zdXJlUmV0dXJuU3RhdGVtZW50c05vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0NvbGxlY3RlZERhdGFOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9Db25zdGFudC9DbGFzc0NvbnN0YW50RmV0Y2gucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0RvV2hpbGVMb29wQ29uZGl0aW9uTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvRXhlY3V0aW9uRW5kTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvRXhwci9BbHdheXNSZW1lbWJlcmVkRXhwci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvRXhwci9FeGlzdGluZ0FycmF5RGltRmV0Y2gucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0V4cHIvR2V0SXRlcmFibGVLZXlUeXBlRXhwci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvRXhwci9HZXRJdGVyYWJsZVZhbHVlVHlwZUV4cHIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0V4cHIvR2V0T2Zmc2V0VmFsdWVUeXBlRXhwci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvRXhwci9PcmlnaW5hbFByb3BlcnR5VHlwZUV4cHIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0V4cHIvUGFyYW1ldGVyVmFyaWFibGVPcmlnaW5hbFZhbHVlRXhwci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvRXhwci9Qcm9wZXJ0eUluaXRpYWxpemF0aW9uRXhwci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvRXhwci9TZXRFeGlzdGluZ09mZnNldFZhbHVlVHlwZUV4cHIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0V4cHIvU2V0T2Zmc2V0VmFsdWVUeXBlRXhwci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvRXhwci9UeXBlRXhwci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvRXhwci9VbnNldE9mZnNldEV4cHIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0ZpbGVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9GaW5hbGx5RXhpdFBvaW50c05vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0Z1bmN0aW9uQ2FsbGFibGVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9GdW5jdGlvblJldHVyblN0YXRlbWVudHNOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9JbkFycm93RnVuY3Rpb25Ob2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9JbkNsYXNzTWV0aG9kTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvSW5DbGFzc05vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0luQ2xvc3VyZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0luRm9yZWFjaE5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0luRnVuY3Rpb25Ob2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9JblRyYWl0Tm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvSW5zdGFudGlhdGlvbkNhbGxhYmxlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvSW52YWxpZGF0ZUV4cHJOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9Jc3NldEV4cHIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0xpdGVyYWxBcnJheUl0ZW0ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL0xpdGVyYWxBcnJheU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL01hdGNoRXhwcmVzc2lvbkFybS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvTWF0Y2hFeHByZXNzaW9uQXJtQm9keS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvTWF0Y2hFeHByZXNzaW9uQXJtQ29uZGl0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9NYXRjaEV4cHJlc3Npb25Ob2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9NZXRob2QvTWV0aG9kQ2FsbC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvTWV0aG9kQ2FsbGFibGVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9NZXRob2RSZXR1cm5TdGF0ZW1lbnRzTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvTm9vcEV4cHJlc3Npb25Ob2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9QcmludGVyL0V4cHJQcmludGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9QcmludGVyL05vZGVUeXBlUHJpbnRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvUHJpbnRlci9QcmludGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9Qcm9wZXJ0eS9Qcm9wZXJ0eUFzc2lnbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvUHJvcGVydHkvUHJvcGVydHlSZWFkLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9Qcm9wZXJ0eS9Qcm9wZXJ0eVdyaXRlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9Qcm9wZXJ0eUFzc2lnbk5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL1JldHVyblN0YXRlbWVudC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvUmV0dXJuU3RhdGVtZW50c05vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL1N0YXRpY01ldGhvZENhbGxhYmxlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL05vZGUvVW5yZWFjaGFibGVTdGF0ZW1lbnROb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9WYXJUYWdDaGFuZ2VkRXhwcmVzc2lvblR5cGVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvTm9kZS9WYXJpYWJsZUFzc2lnbk5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Ob2RlL1ZpcnR1YWxOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGFyYWxsZWwvUGFyYWxsZWxBbmFseXNlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcmFsbGVsL1Byb2Nlc3MucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QYXJhbGxlbC9Qcm9jZXNzUG9vbC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcmFsbGVsL1Byb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcmFsbGVsL1NjaGVkdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGFyYWxsZWwvU2NoZWR1bGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGFyc2VyL0Fub255bW91c0NsYXNzVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9BcnJheUZpbHRlckFyZ1Zpc2l0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QYXJzZXIvQXJyYXlGaW5kQXJnVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9BcnJheU1hcEFyZ1Zpc2l0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QYXJzZXIvQXJyYXlXYWxrQXJnVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9BcnJvd0Z1bmN0aW9uQXJnVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9DYWNoZWRQYXJzZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QYXJzZXIvQ2xlYW5pbmdQYXJzZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QYXJzZXIvQ2xlYW5pbmdWaXNpdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGFyc2VyL0Nsb3N1cmVBcmdWaXNpdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGFyc2VyL0Nsb3N1cmVCaW5kQXJnVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9DbG9zdXJlQmluZFRvVmFyVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9DdXJsU2V0T3B0QXJnVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9EZWNsYXJlUG9zaXRpb25WaXNpdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGFyc2VyL0Z1bmN0aW9uQ2FsbFN0YXRlbWVudEZpbmRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9JbW1lZGlhdGVseUludm9rZWRDbG9zdXJlVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9MYXN0Q29uZGl0aW9uVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9MZXhlckZhY3RvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QYXJzZXIvTWFnaWNDb25zdGFudFBhcmFtRGVmYXVsdFZpc2l0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QYXJzZXIvTmV3QXNzaWduZWRUb1Byb3BlcnR5VmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9QYXJlbnRTdG10VHlwZXNWaXNpdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGFyc2VyL1BhcnNlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9QYXJzZXJFcnJvcnNFeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QYXJzZXIvUGF0aFJvdXRpbmdQYXJzZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QYXJzZXIvUGhwUGFyc2VyRGVjb3JhdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGFyc2VyL1JlbW92ZVVudXNlZENvZGVCeVBocFZlcnNpb25JZFZpc2l0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QYXJzZXIvUmljaFBhcnNlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9TaW1wbGVQYXJzZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QYXJzZXIvVHJhaXRDb2xsZWN0aW5nVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BhcnNlci9UcnlDYXRjaFR5cGVWaXNpdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGFyc2VyL1R5cGVUcmF2ZXJzZXJJbnN0YW5jZW9mVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocC9QaHBWZXJzaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwL1BocFZlcnNpb25GYWN0b3J5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwL1BocFZlcnNpb25GYWN0b3J5RmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9Db25zdEV4cHJOb2RlUmVzb2x2ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvQ29uc3RFeHByUGFyc2VyRmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9Db3VudGFibGVTdHViRmlsZXNFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvRGVmYXVsdFN0dWJGaWxlc1Byb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL0RpcmVjdFR5cGVOb2RlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL0pzb25WYWxpZGF0ZVN0dWJGaWxlc0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9MYXp5VHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvTmFtZVNjb3BlQWxyZWFkeUJlaW5nQ3JlYXRlZEV4Y2VwdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9QaHBEb2NCbG9jay5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9QaHBEb2NJbmhlcml0YW5jZVJlc29sdmVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1BocERvY05vZGVSZXNvbHZlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9QaHBEb2NTdHJpbmdSZXNvbHZlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9SZWZsZWN0aW9uRW51bVN0dWJGaWxlc0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9SZXNvbHZlZFBocERvY0Jsb2NrLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1NvY2tldFNlbGVjdFN0dWJGaWxlc0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9TdHViRmlsZXNFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvU3R1YkZpbGVzUHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvU3R1YlBocERvY1Byb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1N0dWJTb3VyY2VMb2NhdG9yRmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9TdHViVmFsaWRhdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1RhZy9Bc3NlcnRUYWcucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvVGFnL0Fzc2VydFRhZ1BhcmFtZXRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9UYWcvRGVwcmVjYXRlZFRhZy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9UYWcvRXh0ZW5kc1RhZy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9UYWcvSW1wbGVtZW50c1RhZy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9UYWcvTWV0aG9kVGFnLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1RhZy9NZXRob2RUYWdQYXJhbWV0ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvVGFnL01peGluVGFnLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1RhZy9QYXJhbUNsb3N1cmVUaGlzVGFnLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1RhZy9QYXJhbU91dFRhZy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9UYWcvUGFyYW1UYWcucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvVGFnL1Byb3BlcnR5VGFnLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1RhZy9SZXF1aXJlRXh0ZW5kc1RhZy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9UYWcvUmVxdWlyZUltcGxlbWVudHNUYWcucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvVGFnL1JldHVyblRhZy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9UYWcvU2VsZk91dFR5cGVUYWcucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvVGFnL1RlbXBsYXRlVGFnLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1RhZy9UaHJvd3NUYWcucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvVGFnL1R5cGVBbGlhc0ltcG9ydFRhZy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9UYWcvVHlwZUFsaWFzVGFnLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1RhZy9UeXBlZFRhZy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9UYWcvVXNlc1RhZy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1BocERvYy9UYWcvVmFyVGFnLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1R5cGVOb2RlUmVzb2x2ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvVHlwZU5vZGVSZXNvbHZlckF3YXJlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1R5cGVOb2RlUmVzb2x2ZXJFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvVHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvbkF3YXJlUmVnaXN0cnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9QaHBEb2MvVHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1R5cGVOb2RlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUGhwRG9jL1R5cGVTdHJpbmdSZXNvbHZlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1Byb2Nlc3MvQ3B1Q29yZUNvdW50ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Qcm9jZXNzL1Byb2Nlc3NDYW5jZWxlZEV4Y2VwdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1Byb2Nlc3MvUHJvY2Vzc0NyYXNoZWRFeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Qcm9jZXNzL1Byb2Nlc3NIZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9Qcm9jZXNzL1Byb2Nlc3NQcm9taXNlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9BZGRpdGlvbmFsQ29uc3RydWN0b3JzRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9BbGxvd2VkU3ViVHlwZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0Fubm90YXRpb25zL0Fubm90YXRpb25NZXRob2RSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9Bbm5vdGF0aW9ucy9Bbm5vdGF0aW9uUHJvcGVydHlSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9Bbm5vdGF0aW9ucy9Bbm5vdGF0aW9uc01ldGhvZFBhcmFtZXRlclJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0Fubm90YXRpb25zL0Fubm90YXRpb25zTWV0aG9kc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQW5ub3RhdGlvbnMvQW5ub3RhdGlvbnNQcm9wZXJ0aWVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9Bc3NlcnRpb25zLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb25Qcm92aWRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uUHJvdmlkZXJGYWN0b3J5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb25Tb3VyY2VMb2NhdG9yRmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9SZWZsZWN0b3IvTWVtb2l6aW5nUmVmbGVjdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvQXV0b2xvYWRGdW5jdGlvbnNTb3VyY2VMb2NhdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvQXV0b2xvYWRTb3VyY2VMb2NhdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvQ2FjaGluZ1Zpc2l0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9Db21wb3Nlckpzb25BbmRJbnN0YWxsZWRKc29uU291cmNlTG9jYXRvck1ha2VyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvRmV0Y2hlZE5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9GZXRjaGVkTm9kZXNSZXN1bHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9GaWxlTm9kZXNGZXRjaGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvRmlsZVJlYWRUcmFwU3RyZWFtV3JhcHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL05ld09wdGltaXplZERpcmVjdG9yeVNvdXJjZUxvY2F0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWREaXJlY3RvcnlTb3VyY2VMb2NhdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvT3B0aW1pemVkRGlyZWN0b3J5U291cmNlTG9jYXRvckZhY3RvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWREaXJlY3RvcnlTb3VyY2VMb2NhdG9yUmVwb3NpdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL09wdGltaXplZFBzckF1dG9sb2FkZXJMb2NhdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvT3B0aW1pemVkUHNyQXV0b2xvYWRlckxvY2F0b3JGYWN0b3J5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvT3B0aW1pemVkU2luZ2xlRmlsZVNvdXJjZUxvY2F0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRTaW5nbGVGaWxlU291cmNlTG9jYXRvckZhY3RvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRTaW5nbGVGaWxlU291cmNlTG9jYXRvclJlcG9zaXRvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9QaHBGaWxlQ2xlYW5lci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL1BocFZlcnNpb25CbGFja2xpc3RTb3VyY2VMb2NhdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvUmVmbGVjdGlvbkNsYXNzU291cmNlTG9jYXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL1Jld3JpdGVDbGFzc0FsaWFzU291cmNlTG9jYXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL1NraXBDbGFzc0FsaWFzU291cmNlTG9jYXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VTdHViYmVyL1BocFN0b3JtU3R1YnNTb3VyY2VTdHViYmVyRmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VTdHViYmVyL1JlZmxlY3Rpb25Tb3VyY2VTdHViYmVyRmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQnJva2VyQXdhcmVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0NhbGxhYmxlRnVuY3Rpb25WYXJpYW50V2l0aFBocERvY3MucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0NhbGxhYmxlcy9DYWxsYWJsZVBhcmFtZXRlcnNBY2NlcHRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQ2FsbGFibGVzL0Z1bmN0aW9uQ2FsbGFibGVWYXJpYW50LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9DYWxsYWJsZXMvU2ltcGxlSW1wdXJlUG9pbnQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0NhbGxhYmxlcy9TaW1wbGVUaHJvd1BvaW50LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9DbGFzc0NvbnN0YW50UmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQ2xhc3NNZW1iZXJBY2Nlc3NBbnN3ZXJlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQ2xhc3NNZW1iZXJSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9DbGFzc05hbWVIZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0NsYXNzUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uUmVnaXN0cnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0NvbnN0YW50L1J1bnRpbWVDb25zdGFudFJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0NvbnN0YW50TmFtZUhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vQ29uc3RhbnRSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9Db25zdHJ1Y3RvcnNIZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0R1bW15L0NoYW5nZWRUeXBlTWV0aG9kUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vRHVtbXkvQ2hhbmdlZFR5cGVQcm9wZXJ0eVJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0R1bW15L0R1bW15Q29uc3RhbnRSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9EdW1teS9EdW1teUNvbnN0cnVjdG9yUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vRHVtbXkvRHVtbXlNZXRob2RSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9EdW1teS9EdW1teVByb3BlcnR5UmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vRW51bUNhc2VSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9FeHRlbmRlZE1ldGhvZFJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0V4dGVuZGVkUHJvcGVydHlSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9GdW5jdGlvblJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0Z1bmN0aW9uUmVmbGVjdGlvbkZhY3RvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0Z1bmN0aW9uVmFyaWFudC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vRnVuY3Rpb25WYXJpYW50V2l0aFBocERvY3MucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0dlbmVyaWNQYXJhbWV0ZXJzQWNjZXB0b3JSZXNvbHZlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vR2xvYmFsQ29uc3RhbnRSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9JbmFjY2Vzc2libGVNZXRob2QucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0luaXRpYWxpemVyRXhwckNvbnRleHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL0luaXRpYWxpemVyRXhwclR5cGVSZXNvbHZlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vTWV0aG9kUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vTWV0aG9kc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vTWlzc2luZ0NvbnN0YW50RnJvbVJlZmxlY3Rpb25FeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL01pc3NpbmdNZXRob2RGcm9tUmVmbGVjdGlvbkV4Y2VwdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vTWlzc2luZ1Byb3BlcnR5RnJvbVJlZmxlY3Rpb25FeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL01peGluL01peGluTWV0aG9kUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vTWl4aW4vTWl4aW5NZXRob2RzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9NaXhpbi9NaXhpblByb3BlcnRpZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL05hbWVzcGFjZUFuc3dlcmVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9OYXRpdmUvTmF0aXZlRnVuY3Rpb25SZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9OYXRpdmUvTmF0aXZlTWV0aG9kUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vTmF0aXZlL05hdGl2ZVBhcmFtZXRlclJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL05hdGl2ZS9OYXRpdmVQYXJhbWV0ZXJXaXRoUGhwRG9jc1JlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1BIUFN0YW4vTmF0aXZlUmVmbGVjdGlvbkVudW1SZXR1cm5EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGFyYW1ldGVyUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGFyYW1ldGVyUmVmbGVjdGlvbldpdGhQaHBEb2NzLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9QYXJhbWV0ZXJzQWNjZXB0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1BhcmFtZXRlcnNBY2NlcHRvclNlbGVjdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9QYXJhbWV0ZXJzQWNjZXB0b3JXaXRoUGhwRG9jcy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGFzc2VkQnlSZWZlcmVuY2UucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9CdWlsdGluTWV0aG9kUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL0Nsb3N1cmVDYWxsTWV0aG9kUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL0Nsb3N1cmVDYWxsVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9EdW1teVBhcmFtZXRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL0R1bW15UGFyYW1ldGVyV2l0aFBocERvY3MucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9FbnVtQWxsb3dlZFN1YlR5cGVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvRW51bUNhc2VzTWV0aG9kUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL0VudW1Qcm9wZXJ0eVJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9FbnVtVW5yZXNvbHZlZFByb3BlcnR5UHJvdG90eXBlUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL0V4aXRGdW5jdGlvblJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9OYXRpdmVCdWlsdGluTWV0aG9kUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1BocENsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1BocEZ1bmN0aW9uRnJvbVBhcnNlck5vZGVSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvUGhwRnVuY3Rpb25SZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvUGhwTWV0aG9kRnJvbVBhcnNlck5vZGVSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvUGhwTWV0aG9kUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1BocE1ldGhvZFJlZmxlY3Rpb25GYWN0b3J5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvUGhwUGFyYW1ldGVyRnJvbVBhcnNlck5vZGVSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvUGhwUGFyYW1ldGVyUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1BocFByb3BlcnR5UmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1NpbXBsZVhNTEVsZW1lbnRQcm9wZXJ0eS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1NvYXAvU29hcENsaWVudE1ldGhvZFJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9Tb2FwL1NvYXBDbGllbnRNZXRob2RzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvVW5pdmVyc2FsT2JqZWN0Q3JhdGVQcm9wZXJ0eS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1VuaXZlcnNhbE9iamVjdENyYXRlc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwVmVyc2lvblN0YXRpY0FjY2Vzc29yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9Qcm9wZXJ0aWVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9Qcm9wZXJ0eVJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3ZpZGVyL0RpcmVjdFJlZmxlY3Rpb25Qcm92aWRlclByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvdmlkZXIvRHVtbXlSZWZsZWN0aW9uUHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci9MYXp5UmVmbGVjdGlvblByb3ZpZGVyUHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci9NZW1vaXppbmdSZWZsZWN0aW9uUHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci9SZWZsZWN0aW9uUHJvdmlkZXJGYWN0b3J5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvdmlkZXIvUmVmbGVjdGlvblByb3ZpZGVyUHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci9TZXR0ZXJSZWZsZWN0aW9uUHJvdmlkZXJQcm92aWRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3ZpZGVyU3RhdGljQWNjZXNzb3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1JlcXVpcmVFeHRlbnNpb24vUmVxdWlyZUV4dGVuZHNNZXRob2RzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9SZXF1aXJlRXh0ZW5zaW9uL1JlcXVpcmVFeHRlbmRzUHJvcGVydGllc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUmVzb2x2ZWRGdW5jdGlvblZhcmlhbnQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1Jlc29sdmVkRnVuY3Rpb25WYXJpYW50V2l0aENhbGxhYmxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9SZXNvbHZlZEZ1bmN0aW9uVmFyaWFudFdpdGhPcmlnaW5hbC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vUmVzb2x2ZWRNZXRob2RSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9SZXNvbHZlZFByb3BlcnR5UmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vU2lnbmF0dXJlTWFwL0Z1bmN0aW9uU2lnbmF0dXJlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9TaWduYXR1cmVNYXAvRnVuY3Rpb25TaWduYXR1cmVNYXBQcm92aWRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vU2lnbmF0dXJlTWFwL05hdGl2ZUZ1bmN0aW9uUmVmbGVjdGlvblByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9TaWduYXR1cmVNYXAvUGFyYW1ldGVyU2lnbmF0dXJlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9TaWduYXR1cmVNYXAvUGhwOFNpZ25hdHVyZU1hcFByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9TaWduYXR1cmVNYXAvU2lnbmF0dXJlTWFwUGFyc2VyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9TaWduYXR1cmVNYXAvU2lnbmF0dXJlTWFwUHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1NpZ25hdHVyZU1hcC9TaWduYXR1cmVNYXBQcm92aWRlckZhY3RvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1RyaXZpYWxQYXJhbWV0ZXJzQWNjZXB0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1R5cGUvQ2FsbGJhY2tVbnJlc29sdmVkTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9DYWxsYmFja1VucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1R5cGUvQ2FsbGVkT25UeXBlVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1R5cGUvQ2FsbGVkT25UeXBlVW5yZXNvbHZlZFByb3BlcnR5UHJvdG90eXBlUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9JbnRlcnNlY3Rpb25UeXBlTWV0aG9kUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9JbnRlcnNlY3Rpb25UeXBlUHJvcGVydHlSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9UeXBlL0ludGVyc2VjdGlvblR5cGVVbnJlc29sdmVkTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9JbnRlcnNlY3Rpb25UeXBlVW5yZXNvbHZlZFByb3BlcnR5UHJvdG90eXBlUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9VbmlvblR5cGVNZXRob2RSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9UeXBlL1VuaW9uVHlwZVByb3BlcnR5UmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9VbmlvblR5cGVVbnJlc29sdmVkTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9VbmlvblR5cGVVbnJlc29sdmVkUHJvcGVydHlQcm90b3R5cGVSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9UeXBlL1VucmVzb2x2ZWRNZXRob2RQcm90b3R5cGVSZWZsZWN0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUmVmbGVjdGlvbi9UeXBlL1VucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1dyYXBwZWRFeHRlbmRlZE1ldGhvZFJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SZWZsZWN0aW9uL1dyYXBwZWRFeHRlbmRlZFByb3BlcnR5UmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1JlZmxlY3Rpb24vV3JhcHBlclByb3BlcnR5UmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0FwaS9BcGlDbGFzc0NvbnN0RmV0Y2hSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQXBpL0FwaUNsYXNzRXh0ZW5kc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcGkvQXBpQ2xhc3NJbXBsZW1lbnRzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0FwaS9BcGlJbnN0YW5jZW9mUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0FwaS9BcGlJbnN0YW5jZW9mVHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcGkvQXBpSW5zdGFudGlhdGlvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcGkvQXBpSW50ZXJmYWNlRXh0ZW5kc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcGkvQXBpTWV0aG9kQ2FsbFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcGkvQXBpUnVsZUhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0FwaS9BcGlTdGF0aWNDYWxsUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0FwaS9BcGlUcmFpdFVzZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcGkvQmNVbmNvdmVyZWRJbnRlcmZhY2UucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcGkvR2V0VGVtcGxhdGVUeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0FwaS9Ob2RlQ29ubmVjdGluZ1Zpc2l0b3JBdHRyaWJ1dGVzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0FwaS9QaHBTdGFuTmFtZXNwYWNlSW4zcmRQYXJ0eVBhY2thZ2VSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQXBpL1J1bnRpbWVSZWZsZWN0aW9uRnVuY3Rpb25SdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQXBpL1J1bnRpbWVSZWZsZWN0aW9uSW5zdGFudGlhdGlvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcnJheXMvQWxsb3dlZEFycmF5S2V5c1R5cGVzLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQXJyYXlzL0FwcGVuZGVkQXJyYXlJdGVtVHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcnJheXMvQXBwZW5kZWRBcnJheUtleVR5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQXJyYXlzL0FycmF5RGVzdHJ1Y3R1cmluZ1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcnJheXMvQXJyYXlVbnBhY2tpbmdSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQXJyYXlzL0RlYWRGb3JlYWNoUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0FycmF5cy9EdXBsaWNhdGVLZXlzSW5MaXRlcmFsQXJyYXlzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0FycmF5cy9FbXB0eUFycmF5SXRlbVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcnJheXMvSW52YWxpZEtleUluQXJyYXlEaW1GZXRjaFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcnJheXMvSW52YWxpZEtleUluQXJyYXlJdGVtUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0FycmF5cy9JdGVyYWJsZUluRm9yZWFjaFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcnJheXMvTm9uZXhpc3RlbnRPZmZzZXRJbkFycmF5RGltRmV0Y2hDaGVjay5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0FycmF5cy9Ob25leGlzdGVudE9mZnNldEluQXJyYXlEaW1GZXRjaFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcnJheXMvT2Zmc2V0QWNjZXNzQXNzaWduT3BSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQXJyYXlzL09mZnNldEFjY2Vzc0Fzc2lnbm1lbnRSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQXJyYXlzL09mZnNldEFjY2Vzc1ZhbHVlQXNzaWdubWVudFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BcnJheXMvT2Zmc2V0QWNjZXNzV2l0aG91dERpbUZvclJlYWRpbmdSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQXJyYXlzL1VucGFja0l0ZXJhYmxlSW5BcnJheVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9BdHRyaWJ1dGVzQ2hlY2sucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DYXN0L0VjaG9SdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2FzdC9JbnZhbGlkQ2FzdFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DYXN0L0ludmFsaWRQYXJ0T2ZFbmNhcHNlZFN0cmluZ1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DYXN0L1ByaW50UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Nhc3QvVW5zZXRDYXN0UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzQ2FzZVNlbnNpdGl2aXR5Q2hlY2sucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc0ZvcmJpZGRlbk5hbWVDaGVjay5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzTmFtZUNoZWNrLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3NOYW1lTm9kZVBhaXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0FjY2Vzc1ByaXZhdGVDb25zdGFudFRocm91Z2hTdGF0aWNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9BbGxvd2VkU3ViVHlwZXNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9DbGFzc0F0dHJpYnV0ZXNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9DbGFzc0NvbnN0YW50QXR0cmlidXRlc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0NsYXNzQ29uc3RhbnRSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9EdXBsaWNhdGVDbGFzc0RlY2xhcmF0aW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvRHVwbGljYXRlRGVjbGFyYXRpb25SdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9FbnVtU2FuaXR5UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvRXhpc3RpbmdDbGFzc0luQ2xhc3NFeHRlbmRzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvRXhpc3RpbmdDbGFzc0luSW5zdGFuY2VPZlJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0V4aXN0aW5nQ2xhc3NJblRyYWl0VXNlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvRXhpc3RpbmdDbGFzc2VzSW5DbGFzc0ltcGxlbWVudHNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9FeGlzdGluZ0NsYXNzZXNJbkVudW1JbXBsZW1lbnRzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvRXhpc3RpbmdDbGFzc2VzSW5JbnRlcmZhY2VFeHRlbmRzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvSW1wb3NzaWJsZUluc3RhbmNlT2ZSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9JbnN0YW50aWF0aW9uQ2FsbGFibGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9JbnN0YW50aWF0aW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvSW52YWxpZFByb21vdGVkUHJvcGVydGllc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0xvY2FsVHlwZUFsaWFzZXNDaGVjay5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTG9jYWxUeXBlQWxpYXNlc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0xvY2FsVHlwZVRyYWl0QWxpYXNlc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0xvY2FsVHlwZVRyYWl0VXNlQWxpYXNlc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc2VzL01ldGhvZFRhZ0NoZWNrLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9NZXRob2RUYWdSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9NZXRob2RUYWdUcmFpdFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc2VzL01ldGhvZFRhZ1RyYWl0VXNlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTWl4aW5DaGVjay5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTWl4aW5SdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9NaXhpblRyYWl0UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTWl4aW5UcmFpdFVzZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc2VzL05ld1N0YXRpY1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc2VzL05vbkNsYXNzQXR0cmlidXRlQ2xhc3NSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9Qcm9wZXJ0eVRhZ0NoZWNrLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9Qcm9wZXJ0eVRhZ1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc2VzL1Byb3BlcnR5VGFnVHJhaXRSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9Qcm9wZXJ0eVRhZ1RyYWl0VXNlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvUmVhZE9ubHlDbGFzc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9DbGFzc2VzL1JlcXVpcmVFeHRlbmRzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvUmVxdWlyZUltcGxlbWVudHNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9UcmFpdEF0dHJpYnV0ZUNsYXNzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvVW51c2VkQ29uc3RydWN0b3JQYXJhbWV0ZXJzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vQm9vbGVhbkFuZENvbnN0YW50Q29uZGl0aW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vQm9vbGVhbk5vdENvbnN0YW50Q29uZGl0aW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vQm9vbGVhbk9yQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9Db25zdGFudENvbmRpdGlvblJ1bGVIZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL0NvbnN0YW50TG9vc2VDb21wYXJpc29uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vRG9XaGlsZUxvb3BDb25zdGFudENvbmRpdGlvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL0Vsc2VJZkNvbnN0YW50Q29uZGl0aW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vSWZDb25zdGFudENvbmRpdGlvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL0ltcG9zc2libGVDaGVja1R5cGVGdW5jdGlvbkNhbGxSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9JbXBvc3NpYmxlQ2hlY2tUeXBlSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9JbXBvc3NpYmxlQ2hlY2tUeXBlTWV0aG9kQ2FsbFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL0ltcG9zc2libGVDaGVja1R5cGVTdGF0aWNNZXRob2RDYWxsUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vTG9naWNhbFhvckNvbnN0YW50Q29uZGl0aW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vTWF0Y2hFeHByZXNzaW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vTnVtYmVyQ29tcGFyaXNvbk9wZXJhdG9yc0NvbnN0YW50Q29uZGl0aW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vU3RyaWN0Q29tcGFyaXNvbk9mRGlmZmVyZW50VHlwZXNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9UZXJuYXJ5T3BlcmF0b3JDb25zdGFudENvbmRpdGlvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL1VucmVhY2hhYmxlSWZCcmFuY2hlc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL1VucmVhY2hhYmxlVGVybmFyeUVsc2VCcmFuY2hSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9Vc2FnZU9mVm9pZE1hdGNoRXhwcmVzc2lvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL1doaWxlTG9vcEFsd2F5c0ZhbHNlQ29uZGl0aW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vV2hpbGVMb29wQWx3YXlzVHJ1ZUNvbmRpdGlvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvQWx3YXlzVXNlZENsYXNzQ29uc3RhbnRzRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ29uc3RhbnRzL0Fsd2F5c1VzZWRDbGFzc0NvbnN0YW50c0V4dGVuc2lvblByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ29uc3RhbnRzL0NsYXNzQXNDbGFzc0NvbnN0YW50UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbnN0YW50cy9Db25zdGFudFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvRHluYW1pY0NsYXNzQ29uc3RhbnRGZXRjaFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvRmluYWxDb25zdGFudFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvTGF6eUFsd2F5c1VzZWRDbGFzc0NvbnN0YW50c0V4dGVuc2lvblByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ29uc3RhbnRzL01hZ2ljQ29uc3RhbnRDb250ZXh0UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbnN0YW50cy9NaXNzaW5nQ2xhc3NDb25zdGFudFR5cGVoaW50UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0NvbnN0YW50cy9OYXRpdmVUeXBlZENsYXNzQ29uc3RhbnRSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvQ29uc3RhbnRzL092ZXJyaWRpbmdDb25zdGFudFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvVmFsdWVBc3NpZ25lZFRvQ2xhc3NDb25zdGFudFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9EYXRlVGltZUluc3RhbnRpYXRpb25SdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvQmV0dGVyTm9vcFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9DYWxsVG9Db25zdHJ1Y3RvclN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvQ2FsbFRvRnVuY3Rpb25TdGF0ZW1lbnRXaXRob3V0SW1wdXJlUG9pbnRzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL0NhbGxUb01ldGhvZFN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvQ2FsbFRvU3RhdGljTWV0aG9kU3RhdGVtZW50V2l0aG91dEltcHVyZVBvaW50c1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9Db25zdHJ1Y3RvcldpdGhvdXRJbXB1cmVQb2ludHNDb2xsZWN0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9GdW5jdGlvbldpdGhvdXRJbXB1cmVQb2ludHNDb2xsZWN0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9NZXRob2RXaXRob3V0SW1wdXJlUG9pbnRzQ29sbGVjdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvTm9vcFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9Qb3NzaWJseVB1cmVGdW5jQ2FsbENvbGxlY3Rvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL1Bvc3NpYmx5UHVyZU1ldGhvZENhbGxDb2xsZWN0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9Qb3NzaWJseVB1cmVOZXdDb2xsZWN0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9Qb3NzaWJseVB1cmVTdGF0aWNDYWxsQ29sbGVjdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvVW5yZWFjaGFibGVTdGF0ZW1lbnRSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvVW51c2VkUHJpdmF0ZUNvbnN0YW50UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL1VudXNlZFByaXZhdGVNZXRob2RSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvVW51c2VkUHJpdmF0ZVByb3BlcnR5UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0RlYnVnL0RlYnVnU2NvcGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRGVidWcvRHVtcFBocERvY1R5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRGVidWcvRHVtcFR5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRGVidWcvRmlsZUFzc2VydFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9EaXJlY3RSZWdpc3RyeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0VudW1DYXNlcy9FbnVtQ2FzZUF0dHJpYnV0ZXNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9DYXRjaFdpdGhVbnRocm93bkV4Y2VwdGlvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL0NhdWdodEV4Y2VwdGlvbkV4aXN0ZW5jZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL0RlZmF1bHRFeGNlcHRpb25UeXBlUmVzb2x2ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL0V4Y2VwdGlvblR5cGVSZXNvbHZlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvTWlzc2luZ0NoZWNrZWRFeGNlcHRpb25JbkZ1bmN0aW9uVGhyb3dzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvTWlzc2luZ0NoZWNrZWRFeGNlcHRpb25Jbk1ldGhvZFRocm93c1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL01pc3NpbmdDaGVja2VkRXhjZXB0aW9uSW5UaHJvd3NDaGVjay5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvTm9uY2FwdHVyaW5nQ2F0Y2hSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9PdmVyd3JpdHRlbkV4aXRQb2ludEJ5RmluYWxseVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL1Rocm93RXhwclR5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9UaHJvd0V4cHJlc3Npb25SdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9UaHJvd3NWb2lkRnVuY3Rpb25XaXRoRXhwbGljaXRUaHJvd1BvaW50UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvVGhyb3dzVm9pZE1ldGhvZFdpdGhFeHBsaWNpdFRocm93UG9pbnRSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9Ub29XaWRlRnVuY3Rpb25UaHJvd1R5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9Ub29XaWRlTWV0aG9kVGhyb3dUeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvVG9vV2lkZVRocm93VHlwZUNoZWNrLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRmlsZVJ1bGVFcnJvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0ZvdW5kVHlwZVJlc3VsdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9uQ2FsbFBhcmFtZXRlcnNDaGVjay5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9uRGVmaW5pdGlvbkNoZWNrLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25SZXR1cm5UeXBlQ2hlY2sucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvQXJyYXlGaWx0ZXJSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0FycmF5VmFsdWVzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9BcnJvd0Z1bmN0aW9uQXR0cmlidXRlc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvQXJyb3dGdW5jdGlvblJldHVybk51bGxzYWZlQnlSZWZSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0Fycm93RnVuY3Rpb25SZXR1cm5UeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DYWxsQ2FsbGFibGVzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DYWxsVG9GdW5jdGlvblBhcmFtZXRlcnNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0NhbGxUb0Z1bmN0aW9uU3RhdGVtZW50V2l0aG91dFNpZGVFZmZlY3RzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DYWxsVG9Ob25FeGlzdGVudEZ1bmN0aW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DYWxsVXNlckZ1bmNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0Nsb3N1cmVBdHRyaWJ1dGVzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DbG9zdXJlUmV0dXJuVHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvRGVmaW5lUGFyYW1ldGVyc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvRHVwbGljYXRlRnVuY3Rpb25EZWNsYXJhdGlvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvRXhpc3RpbmdDbGFzc2VzSW5BcnJvd0Z1bmN0aW9uVHlwZWhpbnRzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9FeGlzdGluZ0NsYXNzZXNJbkNsb3N1cmVUeXBlaGludHNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0V4aXN0aW5nQ2xhc3Nlc0luVHlwZWhpbnRzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9GdW5jdGlvbkF0dHJpYnV0ZXNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0Z1bmN0aW9uQ2FsbGFibGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0ltcGxvZGVGdW5jdGlvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvSW1wbG9kZVBhcmFtZXRlckNhc3RhYmxlVG9TdHJpbmdSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0luY29tcGF0aWJsZUFycm93RnVuY3Rpb25EZWZhdWx0UGFyYW1ldGVyVHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvSW5jb21wYXRpYmxlQ2xvc3VyZURlZmF1bHRQYXJhbWV0ZXJUeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9JbmNvbXBhdGlibGVEZWZhdWx0UGFyYW1ldGVyVHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvSW5uZXJGdW5jdGlvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvSW52YWxpZExleGljYWxWYXJpYWJsZXNJbkNsb3N1cmVVc2VSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL01pc3NpbmdGdW5jdGlvblBhcmFtZXRlclR5cGVoaW50UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9NaXNzaW5nRnVuY3Rpb25SZXR1cm5UeXBlaGludFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvUGFyYW1BdHRyaWJ1dGVzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9QYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9QcmludGZBcnJheVBhcmFtZXRlcnNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL1ByaW50ZkhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9QcmludGZQYXJhbWV0ZXJzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9SYW5kb21JbnRQYXJhbWV0ZXJzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9SZWRlZmluZWRQYXJhbWV0ZXJzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9SZXR1cm5OdWxsc2FmZUJ5UmVmUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9SZXR1cm5UeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9Tb3J0UGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvVW51c2VkQ2xvc3VyZVVzZXNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL1VzZWxlc3NGdW5jdGlvblJldHVyblZhbHVlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9WYXJpYWRpY1BhcmFtZXRlcnNEZWNsYXJhdGlvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9HZW5lcmF0b3JzL1lpZWxkRnJvbVR5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvR2VuZXJhdG9ycy9ZaWVsZEluR2VuZXJhdG9yUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0dlbmVyYXRvcnMvWWllbGRUeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0NsYXNzQW5jZXN0b3JzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0NsYXNzVGVtcGxhdGVUeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0Nyb3NzQ2hlY2tJbnRlcmZhY2VzSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvRW51bUFuY2VzdG9yc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9FbnVtVGVtcGxhdGVUeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0Z1bmN0aW9uU2lnbmF0dXJlVmFyaWFuY2VSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvRnVuY3Rpb25UZW1wbGF0ZVR5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvR2VuZXJpY0FuY2VzdG9yc0NoZWNrLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvR2VuZXJpY09iamVjdFR5cGVDaGVjay5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0ludGVyZmFjZUFuY2VzdG9yc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9JbnRlcmZhY2VUZW1wbGF0ZVR5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvTWV0aG9kU2lnbmF0dXJlVmFyaWFuY2VSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvTWV0aG9kVGFnVGVtcGxhdGVUeXBlQ2hlY2sucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9NZXRob2RUYWdUZW1wbGF0ZVR5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvTWV0aG9kVGFnVGVtcGxhdGVUeXBlVHJhaXRSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvTWV0aG9kVGVtcGxhdGVUeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL1Byb3BlcnR5VmFyaWFuY2VSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvVGVtcGxhdGVUeXBlQ2hlY2sucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9UcmFpdFRlbXBsYXRlVHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9Vc2VkVHJhaXRzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL1ZhcmlhbmNlQ2hlY2sucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9JZGVudGlmaWVyUnVsZUVycm9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvSWdub3JlL0lnbm9yZVBhcnNlRXJyb3JSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvSXNzZXRDaGVjay5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0tleXdvcmRzL0NvbnRpbnVlQnJlYWtJbkxvb3BSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvS2V5d29yZHMvRGVjbGFyZVN0cmljdFR5cGVzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0tleXdvcmRzL1JlcXVpcmVGaWxlRXhpc3RzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0xhenlSZWdpc3RyeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL0xpbmVSdWxlRXJyb3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRhZGF0YVJ1bGVFcnJvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL01ldGhvZHMvQWJzdHJhY3RNZXRob2RJbk5vbkFic3RyYWN0Q2xhc3NSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9BYnN0cmFjdFByaXZhdGVNZXRob2RSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9BbHdheXNVc2VkTWV0aG9kRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9BbHdheXNVc2VkTWV0aG9kRXh0ZW5zaW9uUHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NhbGxNZXRob2RzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL01ldGhvZHMvQ2FsbFByaXZhdGVNZXRob2RUaHJvdWdoU3RhdGljUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL01ldGhvZHMvQ2FsbFN0YXRpY01ldGhvZHNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9DYWxsVG9Db25zdHJ1Y3RvclN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NhbGxUb01ldGhvZFN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NhbGxUb1N0YXRpY01ldGhvZFN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NvbnNpc3RlbnRDb25zdHJ1Y3RvclJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NvbnN0cnVjdG9yUmV0dXJuVHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL0RpcmVjdEFsd2F5c1VzZWRNZXRob2RFeHRlbnNpb25Qcm92aWRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL01ldGhvZHMvRXhpc3RpbmdDbGFzc2VzSW5UeXBlaGludHNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9GaW5hbFByaXZhdGVNZXRob2RSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9JbGxlZ2FsQ29uc3RydWN0b3JNZXRob2RDYWxsUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL01ldGhvZHMvSWxsZWdhbENvbnN0cnVjdG9yU3RhdGljQ2FsbFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL0luY29tcGF0aWJsZURlZmF1bHRQYXJhbWV0ZXJUeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL01ldGhvZHMvTGF6eUFsd2F5c1VzZWRNZXRob2RFeHRlbnNpb25Qcm92aWRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kQXR0cmlidXRlc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL01ldGhvZENhbGxDaGVjay5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kQ2FsbGFibGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9NZXRob2RQYXJhbWV0ZXJDb21wYXJpc29uSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9NZXRob2RTaWduYXR1cmVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9NZXRob2RWaXNpYmlsaXR5SW5JbnRlcmZhY2VSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9NaXNzaW5nTWFnaWNTZXJpYWxpemF0aW9uTWV0aG9kc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RJbXBsZW1lbnRhdGlvblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RQYXJhbWV0ZXJUeXBlaGludFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RSZXR1cm5UeXBlaGludFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RTZWxmT3V0VHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL051bGxzYWZlTWV0aG9kQ2FsbFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NZXRob2RzL092ZXJyaWRpbmdNZXRob2RSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9SZXR1cm5UeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL01ldGhvZHMvU3RhdGljTWV0aG9kQ2FsbENoZWNrLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9TdGF0aWNNZXRob2RDYWxsYWJsZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9NaXNzaW5nL01pc3NpbmdSZXR1cm5SdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTWlzc2luZ1R5cGVoaW50Q2hlY2sucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9OYW1lcy9Vc2VkTmFtZXNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvTmFtZXNwYWNlcy9FeGlzdGluZ05hbWVzSW5Hcm91cFVzZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9OYW1lc3BhY2VzL0V4aXN0aW5nTmFtZXNJblVzZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Ob25JZ25vcmFibGVSdWxlRXJyb3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9OdWxsc2FmZUNoZWNrLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvT3BlcmF0b3JzL0ludmFsaWRBc3NpZ25WYXJSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvT3BlcmF0b3JzL0ludmFsaWRCaW5hcnlPcGVyYXRpb25SdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvT3BlcmF0b3JzL0ludmFsaWRDb21wYXJpc29uT3BlcmF0aW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL09wZXJhdG9ycy9JbnZhbGlkSW5jRGVjT3BlcmF0aW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL09wZXJhdG9ycy9JbnZhbGlkVW5hcnlPcGVyYXRpb25SdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ0NoZWNrLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0Fzc2VydFJ1bGVIZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9QaHBEb2MvQ29uZGl0aW9uYWxSZXR1cm5UeXBlUnVsZUhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1BocERvYy9GdW5jdGlvbkFzc2VydFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9QaHBEb2MvRnVuY3Rpb25Db25kaXRpb25hbFJldHVyblR5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0dlbmVyaWNDYWxsYWJsZVJ1bGVIZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9QaHBEb2MvSW5jb21wYXRpYmxlQ2xhc3NDb25zdGFudFBocERvY1R5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0luY29tcGF0aWJsZVBhcmFtSW1tZWRpYXRlbHlJbnZva2VkQ2FsbGFibGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0luY29tcGF0aWJsZVBocERvY1R5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0luY29tcGF0aWJsZVByb3BlcnR5UGhwRG9jVHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9QaHBEb2MvSW5jb21wYXRpYmxlU2VsZk91dFR5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0ludmFsaWRQSFBTdGFuRG9jVGFnUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1BocERvYy9JbnZhbGlkUGhwRG9jVGFnVmFsdWVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0ludmFsaWRQaHBEb2NWYXJUYWdUeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1BocERvYy9JbnZhbGlkVGhyb3dzUGhwRG9jVmFsdWVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGhwRG9jL01ldGhvZEFzc2VydFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9QaHBEb2MvTWV0aG9kQ29uZGl0aW9uYWxSZXR1cm5UeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1BocERvYy9QaHBEb2NMaW5lSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGhwRG9jL1JlcXVpcmVFeHRlbmRzQ2hlY2sucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9QaHBEb2MvUmVxdWlyZUV4dGVuZHNEZWZpbml0aW9uQ2xhc3NSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGhwRG9jL1JlcXVpcmVFeHRlbmRzRGVmaW5pdGlvblRyYWl0UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1BocERvYy9SZXF1aXJlSW1wbGVtZW50c0RlZmluaXRpb25DbGFzc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9QaHBEb2MvUmVxdWlyZUltcGxlbWVudHNEZWZpbml0aW9uVHJhaXRSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGhwRG9jL1VucmVzb2x2YWJsZVR5cGVIZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9QaHBEb2MvVmFyVGFnQ2hhbmdlZEV4cHJlc3Npb25UeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1BocERvYy9WYXJUYWdUeXBlUnVsZUhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1BocERvYy9Xcm9uZ1ZhcmlhYmxlTmFtZUluVmFyVGFnUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1BsYXlncm91bmQvRnVuY3Rpb25OZXZlclJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9QbGF5Z3JvdW5kL01ldGhvZE5ldmVyUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1BsYXlncm91bmQvTmV2ZXJSdWxlSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGxheWdyb3VuZC9Ob1BocENvZGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUGxheWdyb3VuZC9Ob3RBbmFseXNlZFRyYWl0UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvQWNjZXNzUHJpdmF0ZVByb3BlcnR5VGhyb3VnaFN0YXRpY1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL0FjY2Vzc1Byb3BlcnRpZXNJbkFzc2lnblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL0FjY2Vzc1Byb3BlcnRpZXNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9BY2Nlc3NTdGF0aWNQcm9wZXJ0aWVzSW5Bc3NpZ25SdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9BY2Nlc3NTdGF0aWNQcm9wZXJ0aWVzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvRGVmYXVsdFZhbHVlVHlwZXNBc3NpZ25lZFRvUHJvcGVydGllc1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL0RpcmVjdFJlYWRXcml0ZVByb3BlcnRpZXNFeHRlbnNpb25Qcm92aWRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvRXhpc3RpbmdDbGFzc2VzSW5Qcm9wZXJ0aWVzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvRm91bmRQcm9wZXJ0eVJlZmxlY3Rpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL0ludmFsaWRDYWxsYWJsZVByb3BlcnR5VHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL0xhenlSZWFkV3JpdGVQcm9wZXJ0aWVzRXh0ZW5zaW9uUHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL01pc3NpbmdQcm9wZXJ0eVR5cGVoaW50UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvTWlzc2luZ1JlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eUFzc2lnblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL01pc3NpbmdSZWFkT25seVByb3BlcnR5QXNzaWduUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvTnVsbHNhZmVQcm9wZXJ0eUZldGNoUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvT3ZlcnJpZGluZ1Byb3BlcnR5UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUHJvcGVydGllc0luSW50ZXJmYWNlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUHJvcGVydHlBdHRyaWJ1dGVzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUHJvcGVydHlEZXNjcmlwdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9Qcm9wZXJ0eVJlZmxlY3Rpb25GaW5kZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1JlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eUFzc2lnblJlZlJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1JlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eUFzc2lnblJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1JlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1JlYWRPbmx5UHJvcGVydHlBc3NpZ25SZWZSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9SZWFkT25seVByb3BlcnR5QXNzaWduUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZE9ubHlQcm9wZXJ0eVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1JlYWRXcml0ZVByb3BlcnRpZXNFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1JlYWRXcml0ZVByb3BlcnRpZXNFeHRlbnNpb25Qcm92aWRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZGluZ1dyaXRlT25seVByb3BlcnRpZXNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9UeXBlc0Fzc2lnbmVkVG9Qcm9wZXJ0aWVzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvVW5pbml0aWFsaXplZFByb3BlcnR5UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvV3JpdGluZ1RvUmVhZE9ubHlQcm9wZXJ0aWVzUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1B1cmUvRnVuY3Rpb25QdXJpdHlDaGVjay5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1B1cmUvUHVyZUZ1bmN0aW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1B1cmUvUHVyZU1ldGhvZFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SZWdleHAvUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1JlZ2V4cC9SZWd1bGFyRXhwcmVzc2lvblF1b3RpbmdSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUmVnaXN0cnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9yQnVpbGRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTAxLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMDMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEwNS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTA3LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMDkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjExLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMTEucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjExMy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTE1LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMTcucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjExOS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTIxLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMjMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEyNS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTI3LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjE3LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxOS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMjEucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjIzLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IyNS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMjcucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjI5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IzLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IzMS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMzMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjM1LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IzNy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMzkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjQxLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I0My5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNDUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjQ3LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I0OS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNTEucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjUzLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I1NS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNTcucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjU5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I2MS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNjMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjY1LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I2Ny5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNjkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjcucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjcxLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I3My5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNzUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjc3LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I3OS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yODEucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjgzLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I4NS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yODcucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjg5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I5MS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yOTMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjk1LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I5Ny5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yOTkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlTGV2ZWxIZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9SdWxlTGV2ZWxIZWxwZXJBY2NlcHRzUmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvVGlwUnVsZUVycm9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvVG9vV2lkZVR5cGVoaW50cy9Ub29XaWRlQXJyb3dGdW5jdGlvblJldHVyblR5cGVoaW50UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZUNsb3N1cmVSZXR1cm5UeXBlaGludFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Ub29XaWRlVHlwZWhpbnRzL1Rvb1dpZGVGdW5jdGlvblBhcmFtZXRlck91dFR5cGVSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvVG9vV2lkZVR5cGVoaW50cy9Ub29XaWRlRnVuY3Rpb25SZXR1cm5UeXBlaGludFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9Ub29XaWRlVHlwZWhpbnRzL1Rvb1dpZGVNZXRob2RQYXJhbWV0ZXJPdXRUeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZU1ldGhvZFJldHVyblR5cGVoaW50UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZVBhcmFtZXRlck91dFR5cGVDaGVjay5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZVByb3BlcnR5VHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9UcmFpdHMvQ29uZmxpY3RpbmdUcmFpdENvbnN0YW50c1J1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9UcmFpdHMvQ29uc3RhbnRzSW5UcmFpdHNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvVHJhaXRzL05vdEFuYWx5c2VkVHJhaXRSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvVHJhaXRzL1RyYWl0RGVjbGFyYXRpb25Db2xsZWN0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9UcmFpdHMvVHJhaXRVc2VDb2xsZWN0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9UeXBlcy9JbnZhbGlkVHlwZXNJblVuaW9uUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1VudXNlZEZ1bmN0aW9uUGFyYW1ldGVyc0NoZWNrLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvVmFyaWFibGVzL0NvbXBhY3RWYXJpYWJsZXNSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvVmFyaWFibGVzL0RlZmluZWRWYXJpYWJsZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9WYXJpYWJsZXMvRW1wdHlSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvVmFyaWFibGVzL0lzc2V0UnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1ZhcmlhYmxlcy9OdWxsQ29hbGVzY2VSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvUnVsZXMvVmFyaWFibGVzL1BhcmFtZXRlck91dEFzc2lnbmVkVHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9WYXJpYWJsZXMvUGFyYW1ldGVyT3V0RXhlY3V0aW9uRW5kVHlwZVJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9WYXJpYWJsZXMvVGhyb3dUeXBlUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1ZhcmlhYmxlcy9VbnNldFJ1bGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9SdWxlcy9WYXJpYWJsZXMvVmFyaWFibGVDbG9uaW5nUnVsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1J1bGVzL1doaXRlc3BhY2UvRmlsZVdoaXRlc3BhY2VSdWxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvU2hvdWxkTm90SGFwcGVuRXhjZXB0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHJpbmFyeUxvZ2ljLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9BY2NlcHRzUmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvQWNjZXNzb3J5QXJyYXlMaXN0VHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeUxpdGVyYWxTdHJpbmdUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvQWNjZXNzb3J5TG93ZXJjYXNlU3RyaW5nVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeU5vbkVtcHR5U3RyaW5nVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeU5vbkZhbHN5U3RyaW5nVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeU51bWVyaWNTdHJpbmdUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvQWNjZXNzb3J5VHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeVVwcGVyY2FzZVN0cmluZ1R5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9IYXNNZXRob2RUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvSGFzT2Zmc2V0VHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0hhc09mZnNldFZhbHVlVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0hhc1Byb3BlcnR5VHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L05vbkVtcHR5QXJyYXlUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvT3ZlcnNpemVkQXJyYXlUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9BcnJheVR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0JlbmV2b2xlbnRVbmlvblR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0JpdHdpc2VGbGFnSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9Cb29sZWFuVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQ2FsbGFibGVUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9DYWxsYWJsZVR5cGVIZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0NpcmN1bGFyVHlwZUFsaWFzRGVmaW5pdGlvbkV4Y2VwdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQ2lyY3VsYXJUeXBlQWxpYXNFcnJvclR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0NsYXNzU3RyaW5nVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQ2xvc3VyZVR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0Nsb3N1cmVUeXBlRmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQ29tcG91bmRUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9Db25kaXRpb25hbFR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0NvbmRpdGlvbmFsVHlwZUZvclBhcmFtZXRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRBcnJheVR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0NvbnN0YW50L0NvbnN0YW50QXJyYXlUeXBlQW5kTWV0aG9kLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9Db25zdGFudC9Db25zdGFudEFycmF5VHlwZUJ1aWxkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0NvbnN0YW50L0NvbnN0YW50Qm9vbGVhblR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0NvbnN0YW50L0NvbnN0YW50RmxvYXRUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9Db25zdGFudC9Db25zdGFudEludGVnZXJUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9Db25zdGFudC9Db25zdGFudFNjYWxhclRvQm9vbGVhblRyYWl0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9Db25zdGFudC9Db25zdGFudFN0cmluZ1R5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0NvbnN0YW50L092ZXJzaXplZEFycmF5QnVpbGRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvQ29uc3RhbnRTY2FsYXJUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9Db25zdGFudFR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0NvbnN0YW50VHlwZUhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvRGlyZWN0VHlwZUFsaWFzUmVzb2x2ZXJQcm92aWRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvRHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvRHluYW1pY0Z1bmN0aW9uVGhyb3dUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9EeW5hbWljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvRHluYW1pY01ldGhvZFRocm93VHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb25SZWdpc3RyeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvRHluYW1pY1N0YXRpY01ldGhvZFJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0R5bmFtaWNTdGF0aWNNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0VudW0vRW51bUNhc2VPYmplY3RUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9FcnJvclR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0V4cG9uZW50aWF0ZUhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvRXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvRXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9GaWxlVHlwZU1hcHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvRmxvYXRUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9GdW5jdGlvblBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9GdW5jdGlvblBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0Z1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyYWxpemVQcmVjaXNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvR2VuZXJpY0NsYXNzU3RyaW5nVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvR2VuZXJpYy9HZW5lcmljT2JqZWN0VHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvR2VuZXJpYy9HZW5lcmljU3RhdGljVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUFycmF5VHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUJlbmV2b2xlbnRVbmlvblR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVCb29sZWFuVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUNvbnN0YW50QXJyYXlUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlQ29uc3RhbnRJbnRlZ2VyVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUNvbnN0YW50U3RyaW5nVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUZsb2F0VHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUdlbmVyaWNPYmplY3RUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlSW50ZWdlclR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVJbnRlcnNlY3Rpb25UeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlSXRlcmFibGVUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlS2V5T2ZUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlTWl4ZWRUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlT2JqZWN0U2hhcGVUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlT2JqZWN0VHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZU9iamVjdFdpdGhvdXRDbGFzc1R5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVTdHJpY3RNaXhlZFR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVTdHJpbmdUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVBcmd1bWVudFN0cmF0ZWd5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZUZhY3RvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZU1hcC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVQYXJhbWV0ZXJTdHJhdGVneS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVSZWZlcmVuY2UucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlU2NvcGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlU3RyYXRlZ3kucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlVHJhaXQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlVmFyaWFuY2UucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlVmFyaWFuY2VNYXAucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVVbmlvblR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWMvVHlwZVByb2plY3Rpb25IZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0dlbmVyaWNUeXBlVmFyaWFibGVSZXNvbHZlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvSGVscGVyL0dldFRlbXBsYXRlVHlwZVR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0ludGVnZXJSYW5nZVR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0ludGVnZXJUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9JbnRlcnNlY3Rpb25UeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9Jc1N1cGVyVHlwZU9mUmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9JdGVyYWJsZVR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0p1c3ROdWxsYWJsZVR5cGVUcmFpdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvS2V5T2ZUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9MYXRlUmVzb2x2YWJsZVR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL0xhenlUeXBlQWxpYXNSZXNvbHZlclByb3ZpZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9Mb29zZUNvbXBhcmlzb25IZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL01ldGhvZFBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9NZXRob2RQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9NZXRob2RUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvTWl4ZWRUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9OZXZlclR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL05ld09iamVjdFR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL05vbkFjY2VwdGluZ05ldmVyVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvTm9uZXhpc3RlbnRQYXJlbnRDbGFzc1R5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL051bGxUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9PYmplY3RTaGFwZVByb3BlcnR5UmVmbGVjdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvT2JqZWN0U2hhcGVUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9PYmplY3RUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9PYmplY3RXaXRob3V0Q2xhc3NUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9PZmZzZXRBY2Nlc3NUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9PcGVyYXRvclR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9PcGVyYXRvclR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uUmVnaXN0cnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BhcnNlck5vZGVUeXBlVG9QSFBTdGFuVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0Fic0Z1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9Bcmd1bWVudEJhc2VkRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlDaGFuZ2VLZXlDYXNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlDaHVua0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5Q29sdW1uRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlDb21iaW5lRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlDdXJyZW50RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9BcnJheUZpbGxGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9BcnJheUZpbGxLZXlzRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlGaWx0ZXJGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9BcnJheUZpbHRlckZ1bmN0aW9uUmV0dXJuVHlwZUhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5RmluZEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5RmluZEtleUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5RmxpcEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5SW50ZXJzZWN0S2V5RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlLZXlEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5S2V5RXhpc3RzRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5S2V5Rmlyc3REeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5S2V5TGFzdER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlLZXlzRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5TWFwRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlNZXJnZUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9BcnJheU5leHREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5UG9pbnRlckZ1bmN0aW9uc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlQb3BGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9BcnJheVJhbmRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9BcnJheVJlZHVjZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5UmVwbGFjZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5UmV2ZXJzZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5U2VhcmNoRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5U2VhcmNoRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0FycmF5U2hpZnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9BcnJheVNsaWNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlTcGxpY2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9BcnJheVN1bUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9BcnJheVZhbHVlc0Z1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9Bc3NlcnRGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQXNzZXJ0VGhyb3dUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQmFja2VkRW51bUZyb21NZXRob2REeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0Jhc2U2NERlY29kZUR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9CY01hdGhTdHJpbmdPck51bGxSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQ2xhc3NFeGlzdHNGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQ2xhc3NJbXBsZW1lbnRzRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQ2xvc3VyZUJpbmREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0Nsb3N1cmVCaW5kVG9EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0Nsb3N1cmVGcm9tQ2FsbGFibGVEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0NvbXBhY3RGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9Db25zdGFudEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0NvbnN0YW50SGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvQ291bnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9Db3VudEZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9DdHlwZURpZ2l0RnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0N1cmxHZXRpbmZvRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0RhdGVGb3JtYXRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9EYXRlRm9ybWF0TWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0RhdGVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9EYXRlRnVuY3Rpb25SZXR1cm5UeXBlSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvRGF0ZUludGVydmFsQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9EYXRlSW50ZXJ2YWxEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0RhdGVQZXJpb2RDb25zdHJ1Y3RvclJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9EYXRlVGltZUNvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvRGF0ZVRpbWVDcmVhdGVEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0RhdGVUaW1lRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9EYXRlVGltZU1vZGlmeU1ldGhvZFRocm93VHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0RhdGVUaW1lTW9kaWZ5UmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0RhdGVUaW1lU3ViTWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvRGF0ZVRpbWVab25lQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9EZWZpbmVDb25zdGFudFR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvRGVmaW5lZENvbnN0YW50VHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9EaW9TdGF0RHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0RzTWFwRHluYW1pY01ldGhvZFRocm93VHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0RzTWFwRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9FeHBsb2RlRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0ZpbHRlckZ1bmN0aW9uUmV0dXJuVHlwZUhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0ZpbHRlcklucHV0RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9GaWx0ZXJWYXJBcnJheUR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvRmlsdGVyVmFyRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9GdW5jdGlvbkV4aXN0c0Z1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9HZXRDYWxsZWRDbGFzc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvR2V0Q2xhc3NEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0dldERlYnVnVHlwZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0dldERlZmluZWRWYXJzRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvR2V0UGFyZW50Q2xhc3NEeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvR2V0dGltZW9mZGF5RHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0dldHR5cGVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9IYXNoRnVuY3Rpb25zUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0hpZ2hsaWdodFN0cmluZ0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvSHJ0aW1lRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvSW1wbG9kZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0luQXJyYXlGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvSW5pR2V0UmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0ludGRpdlRocm93VHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0lzQUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9Jc0FGdW5jdGlvblR5cGVTcGVjaWZ5aW5nSGVscGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvSXNBcnJheUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9Jc0NhbGxhYmxlRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0lzSXRlcmFibGVGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvSXNTdWJjbGFzc09mRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0l0ZXJhdG9yVG9BcnJheUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0pzb25UaHJvd09uRXJyb3JEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL0pzb25UaHJvd1R5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9MdHJpbUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL01iQ29udmVydEVuY29kaW5nRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvTWJGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvTWJGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uVHJhaXQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9NYlN0cmxlbkZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL01iU3Vic3RpdHV0ZUNoYXJhY3RlckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvTWV0aG9kRXhpc3RzVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9NaWNyb3RpbWVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9NaW5NYXhGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9Ob25FbXB0eVN0cmluZ0Z1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9OdW1iZXJGb3JtYXRGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvT3BlblNzbEVuY3J5cHRQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvUGFyc2VTdHJQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvUGFyc2VVcmxGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvUGF0aGluZm9GdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvUG93RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvUHJlZ0ZpbHRlckZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1ByZWdNYXRjaFBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9QcmVnTWF0Y2hUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1ByZWdSZXBsYWNlQ2FsbGJhY2tDbG9zdXJlVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1ByZWdTcGxpdER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvUHJvcGVydHlFeGlzdHNUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1JhbmRvbUludEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1JhbmdlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvUmVmbGVjdGlvbkNsYXNzQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9SZWZsZWN0aW9uQ2xhc3NJc1N1YmNsYXNzT2ZUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1JlZmxlY3Rpb25GdW5jdGlvbkNvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvUmVmbGVjdGlvbkdldEF0dHJpYnV0ZXNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvUmVmbGVjdGlvbk1ldGhvZENvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvUmVmbGVjdGlvblByb3BlcnR5Q29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9SZWdleEFycmF5U2hhcGVNYXRjaGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvUmVwbGFjZUZ1bmN0aW9uc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvUm91bmRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TZXRUeXBlRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1NpbXBsZVhNTEVsZW1lbnRBc1hNTE1ldGhvZFJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TaW1wbGVYTUxFbGVtZW50Q2xhc3NQcm9wZXJ0eVJlZmxlY3Rpb25FeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TaW1wbGVYTUxFbGVtZW50Q29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TaW1wbGVYTUxFbGVtZW50WHBhdGhNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvU3ByaW50ZkZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9Tc2NhbmZGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvU3RhdER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvU3RyQ2FzZUZ1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TdHJDb250YWluaW5nVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TdHJJbmNyZW1lbnREZWNyZW1lbnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TdHJQYWRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TdHJSZXBlYXRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TdHJTcGxpdEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1N0clRva0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1N0cldvcmRDb3VudEZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TdHJsZW5GdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TdHJyZXZGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TdHJ0b3RpbWVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TdHJ2YWxGYW1pbHlGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9TdWJzdHJEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1Rocm93YWJsZVJldHVyblR5cGVFeHRlbnNpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1BocC9UcmlnZ2VyRXJyb3JEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1RyaW1GdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9QaHAvVHlwZVNwZWNpZnlpbmdGdW5jdGlvbnNEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1ZlcnNpb25Db21wYXJlRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUGhwL1hNTFJlYWRlck9wZW5SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9SZWN1cnNpb25HdWFyZC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUmVnZXgvUmVnZXhBbHRlcm5hdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvUmVnZXgvUmVnZXhBc3RXYWxrUmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9SZWdleC9SZWdleENhcHR1cmluZ0dyb3VwLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9SZWdleC9SZWdleEV4cHJlc3Npb25IZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1JlZ2V4L1JlZ2V4R3JvdXBQYXJzZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1JlZ2V4L1JlZ2V4R3JvdXBXYWxrUmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9SZWdleC9SZWdleE5vbkNhcHR1cmluZ0dyb3VwLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9SZXNvdXJjZVR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1NpbXVsdGFuZW91c1R5cGVUcmF2ZXJzZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1N0YXRpY01ldGhvZFBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9TdGF0aWNNZXRob2RQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9TdGF0aWNNZXRob2RUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvU3RhdGljVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvU3RhdGljVHlwZUZhY3RvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1N0cmljdE1peGVkVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvU3RyaW5nQWx3YXlzQWNjZXB0aW5nT2JqZWN0V2l0aFRvU3RyaW5nVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvU3RyaW5nVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvU3VidHJhY3RhYmxlVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvVGhpc1R5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1RyYWl0cy9Db25zdGFudE51bWVyaWNDb21wYXJpc29uVHlwZVRyYWl0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9UcmFpdHMvQ29uc3RhbnRTY2FsYXJUeXBlVHJhaXQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1RyYWl0cy9GYWxzZXlCb29sZWFuVHlwZVRyYWl0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9UcmFpdHMvTGF0ZVJlc29sdmFibGVUeXBlVHJhaXQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1RyYWl0cy9NYXliZUFycmF5VHlwZVRyYWl0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9UcmFpdHMvTWF5YmVDYWxsYWJsZVR5cGVUcmFpdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvVHJhaXRzL01heWJlSXRlcmFibGVUeXBlVHJhaXQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1RyYWl0cy9NYXliZU9iamVjdFR5cGVUcmFpdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvVHJhaXRzL01heWJlT2Zmc2V0QWNjZXNzaWJsZVR5cGVUcmFpdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvVHJhaXRzL05vbkFycmF5VHlwZVRyYWl0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9UcmFpdHMvTm9uQ2FsbGFibGVUeXBlVHJhaXQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1RyYWl0cy9Ob25HZW5lcmFsaXphYmxlVHlwZVRyYWl0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9UcmFpdHMvTm9uR2VuZXJpY1R5cGVUcmFpdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvVHJhaXRzL05vbkl0ZXJhYmxlVHlwZVRyYWl0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9UcmFpdHMvTm9uT2JqZWN0VHlwZVRyYWl0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9UcmFpdHMvTm9uT2Zmc2V0QWNjZXNzaWJsZVR5cGVUcmFpdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvVHJhaXRzL05vblJlbW92ZWFibGVUeXBlVHJhaXQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1RyYWl0cy9PYmplY3RUeXBlVHJhaXQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1RyYWl0cy9UcnV0aHlCb29sZWFuVHlwZVRyYWl0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9UcmFpdHMvVW5kZWNpZGVkQm9vbGVhblR5cGVUcmFpdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvVHJhaXRzL1VuZGVjaWRlZENvbXBhcmlzb25Db21wb3VuZFR5cGVUcmFpdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvVHJhaXRzL1VuZGVjaWRlZENvbXBhcmlzb25UeXBlVHJhaXQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1R5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1R5cGVBbGlhcy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvVHlwZUFsaWFzUmVzb2x2ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1R5cGVBbGlhc1Jlc29sdmVyUHJvdmlkZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1R5cGVDb21iaW5hdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9UeXBlUmVzdWx0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9UeXBlVHJhdmVyc2VyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9UeXBlVXRpbHMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1R5cGVXaXRoQ2xhc3NOYW1lLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9UeXBlaGludEhlbHBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvVW5pb25UeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9VbmlvblR5cGVIZWxwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1VzZWZ1bFR5cGVBbGlhc1Jlc29sdmVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvVHlwZS9WYWx1ZU9mVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvc3JjL1R5cGUvVmVyYm9zaXR5TGV2ZWwucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9UeXBlL1ZvaWRUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvYXV0b2xvYWRGdW5jdGlvbnMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3NyYy9kZWJ1Z1Njb3BlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9zcmMvZHVtcFR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL0NsYXNzQ29uc3QucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9DbGFzc18ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9EZWNsYXJhdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL0VudW1DYXNlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvRW51bV8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9GdW5jdGlvbkxpa2UucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9GdW5jdGlvbl8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9JbnRlcmZhY2VfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvTWV0aG9kLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvTmFtZXNwYWNlXy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL1BhcmFtLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvUHJvcGVydHkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9UcmFpdFVzZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL1RyYWl0VXNlQWRhcHRhdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL1RyYWl0Xy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL1VzZV8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlckZhY3RvcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlckhlbHBlcnMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQ29tbWVudC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Db21tZW50L0RvYy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Db25zdEV4cHJFdmFsdWF0aW9uRXhjZXB0aW9uLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0NvbnN0RXhwckV2YWx1YXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9FcnJvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9FcnJvckhhbmRsZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvRXJyb3JIYW5kbGVyL0NvbGxlY3RpbmcucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvRXJyb3JIYW5kbGVyL1Rocm93aW5nLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0ludGVybmFsL0RpZmZFbGVtLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0ludGVybmFsL0RpZmZlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9JbnRlcm5hbC9QcmludGFibGVOZXdBbm9uQ2xhc3NOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0ludGVybmFsL1Rva2VuU3RyZWFtLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0pzb25EZWNvZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL0VtdWxhdGl2ZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL0F0dHJpYnV0ZUVtdWxhdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvQ29hbGVzZUVxdWFsVG9rZW5FbXVsYXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL0VudW1Ub2tlbkVtdWxhdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvRXhwbGljaXRPY3RhbEVtdWxhdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvRmxleGlibGVEb2NTdHJpbmdFbXVsYXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL0ZuVG9rZW5FbXVsYXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL0tleXdvcmRFbXVsYXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL01hdGNoVG9rZW5FbXVsYXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL051bGxzYWZlVG9rZW5FbXVsYXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL051bWVyaWNMaXRlcmFsU2VwYXJhdG9yRW11bGF0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9SZWFkb25seUZ1bmN0aW9uVG9rZW5FbXVsYXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL1JlYWRvbmx5VG9rZW5FbXVsYXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL1JldmVyc2VFbXVsYXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL1Rva2VuRW11bGF0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTmFtZUNvbnRleHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0FyZy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0F0dHJpYnV0ZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0F0dHJpYnV0ZUdyb3VwLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvQ29tcGxleFR5cGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9Db25zdF8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9BcnJheURpbUZldGNoLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9BcnJheUl0ZW0ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0FycmF5Xy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXJyb3dGdW5jdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvQml0d2lzZUFuZC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvQml0d2lzZU9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9CaXR3aXNlWG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9Db2FsZXNjZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvQ29uY2F0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9EaXYucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wL01pbnVzLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9Nb2QucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wL011bC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvUGx1cy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvUG93LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9TaGlmdExlZnQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wL1NoaWZ0UmlnaHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnblJlZi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0JpdHdpc2VBbmQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0JpdHdpc2VPci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvQml0d2lzZVhvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvQm9vbGVhbkFuZC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvQm9vbGVhbk9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Db2FsZXNjZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvQ29uY2F0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9EaXYucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0VxdWFsLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9HcmVhdGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9HcmVhdGVyT3JFcXVhbC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvSWRlbnRpY2FsLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Mb2dpY2FsQW5kLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Mb2dpY2FsT3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0xvZ2ljYWxYb3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL01pbnVzLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Nb2QucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL011bC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvTm90RXF1YWwucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL05vdElkZW50aWNhbC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvUGx1cy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvUG93LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9TaGlmdExlZnQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1NoaWZ0UmlnaHQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1NtYWxsZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1NtYWxsZXJPckVxdWFsLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9TcGFjZXNoaXAucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpdHdpc2VOb3QucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Jvb2xlYW5Ob3QucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0NhbGxMaWtlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DYXN0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DYXN0L0FycmF5Xy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2FzdC9Cb29sXy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2FzdC9Eb3VibGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Nhc3QvSW50Xy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2FzdC9PYmplY3RfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DYXN0L1N0cmluZ18ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Nhc3QvVW5zZXRfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DbGFzc0NvbnN0RmV0Y2gucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Nsb25lXy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2xvc3VyZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2xvc3VyZVVzZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ29uc3RGZXRjaC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvRW1wdHlfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9FcnJvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvRXJyb3JTdXBwcmVzcy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvRXZhbF8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0V4aXRfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9GdW5jQ2FsbC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvSW5jbHVkZV8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0luc3RhbmNlb2ZfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Jc3NldF8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0xpc3RfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9NYXRjaF8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL01ldGhvZENhbGwucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL05ld18ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL051bGxzYWZlTWV0aG9kQ2FsbC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTnVsbHNhZmVQcm9wZXJ0eUZldGNoLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Qb3N0RGVjLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Qb3N0SW5jLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9QcmVEZWMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1ByZUluYy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvUHJpbnRfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Qcm9wZXJ0eUZldGNoLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9TaGVsbEV4ZWMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1N0YXRpY0NhbGwucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1N0YXRpY1Byb3BlcnR5RmV0Y2gucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1Rlcm5hcnkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1Rocm93Xy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvVW5hcnlNaW51cy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvVW5hcnlQbHVzLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9WYXJpYWJsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvWWllbGRGcm9tLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9ZaWVsZF8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9GdW5jdGlvbkxpa2UucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9JZGVudGlmaWVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvSW50ZXJzZWN0aW9uVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL01hdGNoQXJtLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvTmFtZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL05hbWUvRnVsbHlRdWFsaWZpZWQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9OYW1lL1JlbGF0aXZlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvTnVsbGFibGVUeXBlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvUGFyYW0ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvRE51bWJlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9FbmNhcHNlZC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9FbmNhcHNlZFN0cmluZ1BhcnQucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvTE51bWJlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9NYWdpY0NvbnN0LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvQ2xhc3NfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvRGlyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvRmlsZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9NYWdpY0NvbnN0L0Z1bmN0aW9uXy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9NYWdpY0NvbnN0L0xpbmUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvTWFnaWNDb25zdC9NZXRob2QucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvTWFnaWNDb25zdC9OYW1lc3BhY2VfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvVHJhaXRfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL1N0cmluZ18ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9CcmVha18ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0Nhc2VfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9DYXRjaF8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NsYXNzQ29uc3QucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NsYXNzTGlrZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvQ2xhc3NNZXRob2QucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NsYXNzXy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvQ29uc3RfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Db250aW51ZV8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0RlY2xhcmVEZWNsYXJlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9EZWNsYXJlXy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRG9fLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9FY2hvXy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRWxzZUlmXy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRWxzZV8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0VudW1DYXNlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9FbnVtXy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRXhwcmVzc2lvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRmluYWxseV8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0Zvcl8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0ZvcmVhY2hfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9GdW5jdGlvbl8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0dsb2JhbF8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0dvdG9fLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Hcm91cFVzZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvSGFsdENvbXBpbGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9JZl8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0lubGluZUhUTUwucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0ludGVyZmFjZV8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0xhYmVsLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9OYW1lc3BhY2VfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Ob3AucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1Byb3BlcnR5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Qcm9wZXJ0eVByb3BlcnR5LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9SZXR1cm5fLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9TdGF0aWNWYXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1N0YXRpY18ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1N3aXRjaF8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1Rocm93Xy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvVHJhaXRVc2UucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1RyYWl0VXNlQWRhcHRhdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvVHJhaXRVc2VBZGFwdGF0aW9uL0FsaWFzLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9UcmFpdFVzZUFkYXB0YXRpb24vUHJlY2VkZW5jZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvVHJhaXRfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9UcnlDYXRjaC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvVW5zZXRfLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Vc2VVc2UucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1VzZV8ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1doaWxlXy5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1VuaW9uVHlwZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1Zhckxpa2VJZGVudGlmaWVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvVmFyaWFkaWNQbGFjZWhvbGRlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlQWJzdHJhY3QucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZUR1bXBlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlRmluZGVyLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGVUcmF2ZXJzZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZVRyYXZlcnNlckludGVyZmFjZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9DbG9uaW5nVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9GaW5kaW5nVmlzaXRvci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9GaXJzdEZpbmRpbmdWaXNpdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGVWaXNpdG9yL05hbWVSZXNvbHZlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9Ob2RlQ29ubmVjdGluZ1Zpc2l0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZVZpc2l0b3IvUGFyZW50Q29ubmVjdGluZ1Zpc2l0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZVZpc2l0b3JBYnN0cmFjdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9QYXJzZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyL011bHRpcGxlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL1BhcnNlci9QaHA1LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL1BhcnNlci9QaHA3LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL1BhcnNlci9Ub2tlbnMucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyQWJzdHJhY3QucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyRmFjdG9yeS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9QcmV0dHlQcmludGVyL1N0YW5kYXJkLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL1ByZXR0eVByaW50ZXJBYnN0cmFjdC5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0Fic3RyYWN0Tm9kZVZpc2l0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9BdHRyaWJ1dGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvQ29uc3RFeHByQXJyYXlJdGVtTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEV4cHJBcnJheU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvQ29uc3RFeHByRmFsc2VOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwckZsb2F0Tm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEV4cHJJbnRlZ2VyTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEV4cHJOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwck51bGxOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwclN0cmluZ05vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvQ29uc3RFeHByVHJ1ZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvQ29uc3RGZXRjaE5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvRG9jdHJpbmVDb25zdEV4cHJTdHJpbmdOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL1F1b3RlQXdhcmVDb25zdEV4cHJTdHJpbmdOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L05vZGVBdHRyaWJ1dGVzLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvTm9kZVRyYXZlcnNlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L05vZGVWaXNpdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvTm9kZVZpc2l0b3IvQ2xvbmluZ1Zpc2l0b3IucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvQXNzZXJ0VGFnTWV0aG9kVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0Fzc2VydFRhZ1Byb3BlcnR5VmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0Fzc2VydFRhZ1ZhbHVlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9EZXByZWNhdGVkVGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0RvY3RyaW5lL0RvY3RyaW5lQW5ub3RhdGlvbi5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9Eb2N0cmluZS9Eb2N0cmluZUFyZ3VtZW50LnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0RvY3RyaW5lL0RvY3RyaW5lQXJyYXkucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvRG9jdHJpbmUvRG9jdHJpbmVBcnJheUl0ZW0ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvRG9jdHJpbmUvRG9jdHJpbmVUYWdWYWx1ZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvRXh0ZW5kc1RhZ1ZhbHVlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9HZW5lcmljVGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0ltcGxlbWVudHNUYWdWYWx1ZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvSW52YWxpZFRhZ1ZhbHVlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9NZXRob2RUYWdWYWx1ZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvTWV0aG9kVGFnVmFsdWVQYXJhbWV0ZXJOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL01peGluVGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BhcmFtQ2xvc3VyZVRoaXNUYWdWYWx1ZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUGFyYW1JbW1lZGlhdGVseUludm9rZWRDYWxsYWJsZVRhZ1ZhbHVlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QYXJhbUxhdGVySW52b2tlZENhbGxhYmxlVGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BhcmFtT3V0VGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BhcmFtVGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BocERvY0NoaWxkTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QaHBEb2NOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BocERvY1RhZ05vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUGhwRG9jVGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BocERvY1RleHROb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1Byb3BlcnR5VGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1B1cmVVbmxlc3NDYWxsYWJsZUlzSW1wdXJlVGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1JlcXVpcmVFeHRlbmRzVGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1JlcXVpcmVJbXBsZW1lbnRzVGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1JldHVyblRhZ1ZhbHVlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9TZWxmT3V0VGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1RlbXBsYXRlVGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1Rocm93c1RhZ1ZhbHVlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9UeXBlQWxpYXNJbXBvcnRUYWdWYWx1ZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvVHlwZUFsaWFzVGFnVmFsdWVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1R5cGVsZXNzUGFyYW1UYWdWYWx1ZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvVXNlc1RhZ1ZhbHVlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9WYXJUYWdWYWx1ZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0FycmF5U2hhcGVJdGVtTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvQXJyYXlTaGFwZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0FycmF5U2hhcGVVbnNlYWxlZFR5cGVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9BcnJheVR5cGVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9DYWxsYWJsZVR5cGVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9DYWxsYWJsZVR5cGVQYXJhbWV0ZXJOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9Db25kaXRpb25hbFR5cGVGb3JQYXJhbWV0ZXJOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9Db25kaXRpb25hbFR5cGVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9Db25zdFR5cGVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9HZW5lcmljVHlwZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0lkZW50aWZpZXJUeXBlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvSW50ZXJzZWN0aW9uVHlwZU5vZGUucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0ludmFsaWRUeXBlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvTnVsbGFibGVUeXBlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvT2JqZWN0U2hhcGVJdGVtTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvT2JqZWN0U2hhcGVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9PZmZzZXRBY2Nlc3NUeXBlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvVGhpc1R5cGVOb2RlLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9UeXBlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvVW5pb25UeXBlTm9kZS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvTGV4ZXIvTGV4ZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9Db25zdEV4cHJQYXJzZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9QYXJzZXJFeGNlcHRpb24ucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9QaHBEb2NQYXJzZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9TdHJpbmdVbmVzY2FwZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9Ub2tlbkl0ZXJhdG9yLnBocCc7CnJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy92ZW5kb3IvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9QYXJzZXIvVHlwZVBhcnNlci5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvUHJpbnRlci9EaWZmRWxlbS5waHAnOwpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvdmVuZG9yL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvUHJpbnRlci9EaWZmZXIucGhwJzsKcmVxdWlyZV9vbmNlIF9fRElSX18gLiAnL3ZlbmRvci9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1ByaW50ZXIvUHJpbnRlci5waHAnOwppbmNsdWRlczoKCS0gY29uZmlnLmxldmVsOS5uZW9uCgppbmNsdWRlczoKCS0gY29uZmlnLmxldmVsNC5uZW9uCgpwYXJhbWV0ZXJzOgoJY2hlY2tGdW5jdGlvbkFyZ3VtZW50VHlwZXM6IHRydWUKCWNoZWNrQXJndW1lbnRzUGFzc2VkQnlSZWZlcmVuY2U6IHRydWUKCmNvbmRpdGlvbmFsVGFnczoKCVBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXEFycmF5RmlsdGVyUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5hcnJheUZpbHRlciUKCglQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xBcnJheVZhbHVlc1J1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMuYXJyYXlWYWx1ZXMlCgoJUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcQ2FsbFVzZXJGdW5jUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5jYWxsVXNlckZ1bmMlCgoJUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ1J1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMuY2hlY2tQYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nRnVuY3Rpb25zJQoKCVBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXEltcGxvZGVQYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5jaGVja1BhcmFtZXRlckNhc3RhYmxlVG9TdHJpbmdGdW5jdGlvbnMlCgoJUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcU29ydFBhcmFtZXRlckNhc3RhYmxlVG9TdHJpbmdSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLmNoZWNrUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ0Z1bmN0aW9ucyUKCnJ1bGVzOgoJLSBQSFBTdGFuXFJ1bGVzXERhdGVUaW1lSW5zdGFudGlhdGlvblJ1bGUKCnNlcnZpY2VzOgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xSYW5kb21JbnRQYXJhbWV0ZXJzUnVsZQoJCWFyZ3VtZW50czoKCQkJcmVwb3J0TWF5YmVzOiAlcmVwb3J0TWF5YmVzJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcQXJyYXlGaWx0ZXJSdWxlCgkJYXJndW1lbnRzOgoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluOiAldHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpblRpcDogJXRpcHMudHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXEFycmF5VmFsdWVzUnVsZQoJCWFyZ3VtZW50czoKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogJXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW5UaXA6ICV0aXBzLnRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xDYWxsVXNlckZ1bmNSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xJbXBsb2RlRnVuY3Rpb25SdWxlCgkJYXJndW1lbnRzOgoJCQlkaXNhYmxlZDogJWZlYXR1cmVUb2dnbGVzLmNoZWNrUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ0Z1bmN0aW9ucyUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXFBhcmFtZXRlckNhc3RhYmxlVG9TdHJpbmdSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xJbXBsb2RlUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ1J1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXFNvcnRQYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nUnVsZQoKaW5jbHVkZXM6CgktIGNvbmZpZy5sZXZlbDEubmVvbgoKcGFyYW1ldGVyczoKCWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHk6IHRydWUKCWNoZWNrVGhpc09ubHk6IGZhbHNlCgljaGVja1BocERvY01pc3NpbmdSZXR1cm46IHRydWUKCnJ1bGVzOgoJLSBQSFBTdGFuXFJ1bGVzXENhc3RcRWNob1J1bGUKCS0gUEhQU3RhblxSdWxlc1xDYXN0XEludmFsaWRDYXN0UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENhc3RcSW52YWxpZFBhcnRPZkVuY2Fwc2VkU3RyaW5nUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENhc3RcUHJpbnRSdWxlCgktIFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xBY2Nlc3NQcml2YXRlQ29uc3RhbnRUaHJvdWdoU3RhdGljUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENvbXBhcmlzb25cVXNhZ2VPZlZvaWRNYXRjaEV4cHJlc3Npb25SdWxlCgktIFBIUFN0YW5cUnVsZXNcQ29uc3RhbnRzXFZhbHVlQXNzaWduZWRUb0NsYXNzQ29uc3RhbnRSdWxlCgktIFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXEluY29tcGF0aWJsZURlZmF1bHRQYXJhbWV0ZXJUeXBlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEdlbmVyaWNzXENsYXNzQW5jZXN0b3JzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEdlbmVyaWNzXENsYXNzVGVtcGxhdGVUeXBlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEdlbmVyaWNzXEVudW1BbmNlc3RvcnNSdWxlCgktIFBIUFN0YW5cUnVsZXNcR2VuZXJpY3NcRW51bVRlbXBsYXRlVHlwZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xHZW5lcmljc1xGdW5jdGlvblRlbXBsYXRlVHlwZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xHZW5lcmljc1xGdW5jdGlvblNpZ25hdHVyZVZhcmlhbmNlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEdlbmVyaWNzXEludGVyZmFjZUFuY2VzdG9yc1J1bGUKCS0gUEhQU3RhblxSdWxlc1xHZW5lcmljc1xJbnRlcmZhY2VUZW1wbGF0ZVR5cGVSdWxlCgktIFBIUFN0YW5cUnVsZXNcR2VuZXJpY3NcTWV0aG9kVGVtcGxhdGVUeXBlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEdlbmVyaWNzXE1ldGhvZFRhZ1RlbXBsYXRlVHlwZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xHZW5lcmljc1xNZXRob2RTaWduYXR1cmVWYXJpYW5jZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xHZW5lcmljc1xUcmFpdFRlbXBsYXRlVHlwZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xHZW5lcmljc1xVc2VkVHJhaXRzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcQ2FsbFByaXZhdGVNZXRob2RUaHJvdWdoU3RhdGljUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcSW5jb21wYXRpYmxlRGVmYXVsdFBhcmFtZXRlclR5cGVSdWxlCgktIFBIUFN0YW5cUnVsZXNcT3BlcmF0b3JzXEludmFsaWRDb21wYXJpc29uT3BlcmF0aW9uUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFBocERvY1xGdW5jdGlvbkNvbmRpdGlvbmFsUmV0dXJuVHlwZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xQaHBEb2NcTWV0aG9kQ29uZGl0aW9uYWxSZXR1cm5UeXBlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFBocERvY1xGdW5jdGlvbkFzc2VydFJ1bGUKCS0gUEhQU3RhblxSdWxlc1xQaHBEb2NcTWV0aG9kQXNzZXJ0UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFBocERvY1xJbmNvbXBhdGlibGVTZWxmT3V0VHlwZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xQaHBEb2NcSW5jb21wYXRpYmxlQ2xhc3NDb25zdGFudFBocERvY1R5cGVSdWxlCgktIFBIUFN0YW5cUnVsZXNcUGhwRG9jXEluY29tcGF0aWJsZVBocERvY1R5cGVSdWxlCgktIFBIUFN0YW5cUnVsZXNcUGhwRG9jXEluY29tcGF0aWJsZVByb3BlcnR5UGhwRG9jVHlwZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xQaHBEb2NcSW52YWxpZFRocm93c1BocERvY1ZhbHVlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFBocERvY1xJbmNvbXBhdGlibGVQYXJhbUltbWVkaWF0ZWx5SW52b2tlZENhbGxhYmxlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcQWNjZXNzUHJpdmF0ZVByb3BlcnR5VGhyb3VnaFN0YXRpY1J1bGUKCS0gUEhQU3RhblxSdWxlc1xDbGFzc2VzXFJlcXVpcmVJbXBsZW1lbnRzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcUmVxdWlyZUV4dGVuZHNSdWxlCgktIFBIUFN0YW5cUnVsZXNcUGhwRG9jXFJlcXVpcmVJbXBsZW1lbnRzRGVmaW5pdGlvbkNsYXNzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFBocERvY1xSZXF1aXJlRXh0ZW5kc0RlZmluaXRpb25DbGFzc1J1bGUKCS0gUEhQU3RhblxSdWxlc1xQaHBEb2NcUmVxdWlyZUV4dGVuZHNEZWZpbml0aW9uVHJhaXRSdWxlCgpjb25kaXRpb25hbFRhZ3M6CglQSFBTdGFuXFJ1bGVzXENsYXNzZXNcTWV0aG9kVGFnUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5hYnNlbnRUeXBlQ2hlY2tzJQoKCVBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xNZXRob2RUYWdUcmFpdFJ1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMuYWJzZW50VHlwZUNoZWNrcyUKCglQSFBTdGFuXFJ1bGVzXENsYXNzZXNcTWV0aG9kVGFnVHJhaXRVc2VSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLmFic2VudFR5cGVDaGVja3MlCgoJUEhQU3RhblxSdWxlc1xDbGFzc2VzXE1peGluVHJhaXRSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLmFic2VudFR5cGVDaGVja3MlCgoJUEhQU3RhblxSdWxlc1xDbGFzc2VzXE1peGluVHJhaXRVc2VSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLmFic2VudFR5cGVDaGVja3MlCgoJUEhQU3RhblxSdWxlc1xDbGFzc2VzXFByb3BlcnR5VGFnUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5hYnNlbnRUeXBlQ2hlY2tzJQoKCVBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xQcm9wZXJ0eVRhZ1RyYWl0UnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5hYnNlbnRUeXBlQ2hlY2tzJQoKCVBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xQcm9wZXJ0eVRhZ1RyYWl0VXNlUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5hYnNlbnRUeXBlQ2hlY2tzJQoKCVBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXEluY29tcGF0aWJsZUFycm93RnVuY3Rpb25EZWZhdWx0UGFyYW1ldGVyVHlwZVJ1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMuY2xvc3VyZURlZmF1bHRQYXJhbWV0ZXJUeXBlUnVsZSUKCglQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xJbmNvbXBhdGlibGVDbG9zdXJlRGVmYXVsdFBhcmFtZXRlclR5cGVSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLmNsb3N1cmVEZWZhdWx0UGFyYW1ldGVyVHlwZVJ1bGUlCgoJUEhQU3RhblxSdWxlc1xHZW5lcmljc1xNZXRob2RUYWdUZW1wbGF0ZVR5cGVUcmFpdFJ1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMuYWJzZW50VHlwZUNoZWNrcyUKCglQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcSWxsZWdhbENvbnN0cnVjdG9yTWV0aG9kQ2FsbFJ1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMuaWxsZWdhbENvbnN0cnVjdG9yTWV0aG9kQ2FsbCUKCglQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcSWxsZWdhbENvbnN0cnVjdG9yU3RhdGljQ2FsbFJ1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMuaWxsZWdhbENvbnN0cnVjdG9yTWV0aG9kQ2FsbCUKCglQSFBTdGFuXFJ1bGVzXFBocERvY1xWYXJUYWdDaGFuZ2VkRXhwcmVzc2lvblR5cGVSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLnZhclRhZ1R5cGUlCgoJUEhQU3RhblxSdWxlc1xHZW5lcmljc1xQcm9wZXJ0eVZhcmlhbmNlUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5wcm9wZXJ0eVZhcmlhbmNlJQoKCVBIUFN0YW5cUnVsZXNcUHVyZVxQdXJlRnVuY3Rpb25SdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLnB1cmUlCgoJUEhQU3RhblxSdWxlc1xQdXJlXFB1cmVNZXRob2RSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLnB1cmUlCgpzZXJ2aWNlczoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xDbGFzc2VzXE1peGluUnVsZQoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcTWl4aW5UcmFpdFJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xNaXhpblRyYWl0VXNlUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xDbGFzc2VzXE1ldGhvZFRhZ1J1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xNZXRob2RUYWdUcmFpdFJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xNZXRob2RUYWdUcmFpdFVzZVJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xQcm9wZXJ0eVRhZ1J1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xQcm9wZXJ0eVRhZ1RyYWl0UnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xDbGFzc2VzXFByb3BlcnR5VGFnVHJhaXRVc2VSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFBocERvY1xSZXF1aXJlRXh0ZW5kc0NoZWNrCgkJYXJndW1lbnRzOgoJCQljaGVja0NsYXNzQ2FzZVNlbnNpdGl2aXR5OiAlY2hlY2tDbGFzc0Nhc2VTZW5zaXRpdml0eSUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcUGhwRG9jXFJlcXVpcmVJbXBsZW1lbnRzRGVmaW5pdGlvblRyYWl0UnVsZQoJCWFyZ3VtZW50czoKCQkJY2hlY2tDbGFzc0Nhc2VTZW5zaXRpdml0eTogJWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHklCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xJbmNvbXBhdGlibGVBcnJvd0Z1bmN0aW9uRGVmYXVsdFBhcmFtZXRlclR5cGVSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xJbmNvbXBhdGlibGVDbG9zdXJlRGVmYXVsdFBhcmFtZXRlclR5cGVSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xDYWxsQ2FsbGFibGVzUnVsZQoJCWFyZ3VtZW50czoKCQkJcmVwb3J0TWF5YmVzOiAlcmVwb3J0TWF5YmVzJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xHZW5lcmljc1xNZXRob2RUYWdUZW1wbGF0ZVR5cGVUcmFpdFJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcTWV0aG9kc1xJbGxlZ2FsQ29uc3RydWN0b3JNZXRob2RDYWxsUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xNZXRob2RzXElsbGVnYWxDb25zdHJ1Y3RvclN0YXRpY0NhbGxSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFBocERvY1xJbnZhbGlkUGhwRG9jVGFnVmFsdWVSdWxlCgkJYXJndW1lbnRzOgoJCQljaGVja0FsbEludmFsaWRQaHBEb2NzOiAlZmVhdHVyZVRvZ2dsZXMuYWxsSW52YWxpZFBocERvY3MlCgkJCWludmFsaWRQaHBEb2NUYWdMaW5lOiAlZmVhdHVyZVRvZ2dsZXMuaW52YWxpZFBocERvY1RhZ0xpbmUlCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFBocERvY1xJbnZhbGlkUGhwRG9jVmFyVGFnVHlwZVJ1bGUKCQlhcmd1bWVudHM6CgkJCWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHk6ICVjaGVja0NsYXNzQ2FzZVNlbnNpdGl2aXR5JQoJCQljaGVja01pc3NpbmdWYXJUYWdUeXBlaGludDogJWNoZWNrTWlzc2luZ1ZhclRhZ1R5cGVoaW50JQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xQaHBEb2NcSW52YWxpZFBIUFN0YW5Eb2NUYWdSdWxlCgkJYXJndW1lbnRzOgoJCQljaGVja0FsbEludmFsaWRQaHBEb2NzOiAlZmVhdHVyZVRvZ2dsZXMuYWxsSW52YWxpZFBocERvY3MlCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFBocERvY1xWYXJUYWdDaGFuZ2VkRXhwcmVzc2lvblR5cGVSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFBocERvY1xXcm9uZ1ZhcmlhYmxlTmFtZUluVmFyVGFnUnVsZQoJCWFyZ3VtZW50czoKCQkJY2hlY2tUeXBlQWdhaW5zdE5hdGl2ZVR5cGU6ICVmZWF0dXJlVG9nZ2xlcy52YXJUYWdUeXBlJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xHZW5lcmljc1xQcm9wZXJ0eVZhcmlhbmNlUnVsZQoJCWFyZ3VtZW50czoKCQkJcmVhZE9ubHlCeVBocERvYzogJWZlYXR1cmVUb2dnbGVzLnJlYWRPbmx5QnlQaHBEb2MlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFB1cmVcUHVyZUZ1bmN0aW9uUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xQdXJlXFB1cmVNZXRob2RSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXE9wZXJhdG9yc1xJbnZhbGlkQmluYXJ5T3BlcmF0aW9uUnVsZQoJCWFyZ3VtZW50czoKCQkJYmxlZWRpbmdFZGdlOiAlZmVhdHVyZVRvZ2dsZXMuYmxlZWRpbmdFZGdlJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xPcGVyYXRvcnNcSW52YWxpZFVuYXJ5T3BlcmF0aW9uUnVsZQoJCWFyZ3VtZW50czoKCQkJYmxlZWRpbmdFZGdlOiAlZmVhdHVyZVRvZ2dsZXMuYmxlZWRpbmdFZGdlJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKaW5jbHVkZXM6CgktIGNvbmZpZy5sZXZlbDgubmVvbgoKcGFyYW1ldGVyczoKCWNoZWNrRXhwbGljaXRNaXhlZDogdHJ1ZQoKaW5jbHVkZXM6CgktIGNvbmZpZy5sZXZlbDcubmVvbgoKcGFyYW1ldGVyczoKCWNoZWNrTnVsbGFibGVzOiB0cnVlCgppbmNsdWRlczoKCS0gY29uZmlnLmxldmVsNS5uZW9uCgpwYXJhbWV0ZXJzOgoJY2hlY2tHZW5lcmljQ2xhc3NJbk5vbkdlbmVyaWNPYmplY3RUeXBlOiB0cnVlCgljaGVja01pc3NpbmdJdGVyYWJsZVZhbHVlVHlwZTogdHJ1ZQoJY2hlY2tNaXNzaW5nVmFyVGFnVHlwZWhpbnQ6IHRydWUKCWNoZWNrTWlzc2luZ1R5cGVoaW50czogdHJ1ZQoKcnVsZXM6CgktIFBIUFN0YW5cUnVsZXNcQ29uc3RhbnRzXE1pc3NpbmdDbGFzc0NvbnN0YW50VHlwZWhpbnRSdWxlCgktIFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXE1pc3NpbmdGdW5jdGlvblJldHVyblR5cGVoaW50UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcTWlzc2luZ01ldGhvZFJldHVyblR5cGVoaW50UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcTWlzc2luZ1Byb3BlcnR5VHlwZWhpbnRSdWxlCgpjb25kaXRpb25hbFRhZ3M6CglQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcTWlzc2luZ01ldGhvZFNlbGZPdXRUeXBlUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5hYnNlbnRUeXBlQ2hlY2tzJQoKc2VydmljZXM6CgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXE1pc3NpbmdGdW5jdGlvblBhcmFtZXRlclR5cGVoaW50UnVsZQoJCWFyZ3VtZW50czoKCQkJcGFyYW1PdXQ6ICVmZWF0dXJlVG9nZ2xlcy5wYXJhbU91dFR5cGUlCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcTWlzc2luZ01ldGhvZFBhcmFtZXRlclR5cGVoaW50UnVsZQoJCWFyZ3VtZW50czoKCQkJcGFyYW1PdXQ6ICVmZWF0dXJlVG9nZ2xlcy5wYXJhbU91dFR5cGUlCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcTWlzc2luZ01ldGhvZFNlbGZPdXRUeXBlUnVsZQoKaW5jbHVkZXM6CgktIGNvbmZpZy5sZXZlbDIubmVvbgoKY29uZGl0aW9uYWxUYWdzOgoJUEhQU3RhblxSdWxlc1xBcnJheXNcQXJyYXlVbnBhY2tpbmdSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLmFycmF5VW5wYWNraW5nJQoKCVBIUFN0YW5cUnVsZXNcUHJvcGVydGllc1xSZWFkT25seUJ5UGhwRG9jUHJvcGVydHlBc3NpZ25SZWZSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLnJlYWRPbmx5QnlQaHBEb2MlCgoJUEhQU3RhblxSdWxlc1xQcm9wZXJ0aWVzXFJlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eUFzc2lnblJ1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMucmVhZE9ubHlCeVBocERvYyUKCglQSFBTdGFuXFJ1bGVzXFZhcmlhYmxlc1xQYXJhbWV0ZXJPdXRBc3NpZ25lZFR5cGVSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLnBhcmFtT3V0VHlwZSUKCglQSFBTdGFuXFJ1bGVzXFZhcmlhYmxlc1xQYXJhbWV0ZXJPdXRFeGVjdXRpb25FbmRUeXBlUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5wYXJhbU91dFR5cGUlCgpydWxlczoKCS0gUEhQU3RhblxSdWxlc1xBcnJheXNcQXJyYXlEZXN0cnVjdHVyaW5nUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEFycmF5c1xJdGVyYWJsZUluRm9yZWFjaFJ1bGUKCS0gUEhQU3RhblxSdWxlc1xBcnJheXNcT2Zmc2V0QWNjZXNzQXNzaWdubWVudFJ1bGUKCS0gUEhQU3RhblxSdWxlc1xBcnJheXNcT2Zmc2V0QWNjZXNzQXNzaWduT3BSdWxlCgktIFBIUFN0YW5cUnVsZXNcQXJyYXlzXE9mZnNldEFjY2Vzc1ZhbHVlQXNzaWdubWVudFJ1bGUKCS0gUEhQU3RhblxSdWxlc1xBcnJheXNcVW5wYWNrSXRlcmFibGVJbkFycmF5UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEV4Y2VwdGlvbnNcVGhyb3dFeHByVHlwZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcQXJyb3dGdW5jdGlvblJldHVyblR5cGVSdWxlCgktIFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXENsb3N1cmVSZXR1cm5UeXBlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xSZXR1cm5UeXBlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEdlbmVyYXRvcnNcWWllbGRUeXBlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcUmV0dXJuVHlwZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xQcm9wZXJ0aWVzXERlZmF1bHRWYWx1ZVR5cGVzQXNzaWduZWRUb1Byb3BlcnRpZXNSdWxlCgktIFBIUFN0YW5cUnVsZXNcUHJvcGVydGllc1xSZWFkT25seVByb3BlcnR5QXNzaWduUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcUmVhZE9ubHlQcm9wZXJ0eUFzc2lnblJlZlJ1bGUKCS0gUEhQU3RhblxSdWxlc1xQcm9wZXJ0aWVzXFR5cGVzQXNzaWduZWRUb1Byb3BlcnRpZXNSdWxlCgktIFBIUFN0YW5cUnVsZXNcVmFyaWFibGVzXFRocm93VHlwZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xWYXJpYWJsZXNcVmFyaWFibGVDbG9uaW5nUnVsZQoKcGFyYW1ldGVyczoKCWNoZWNrUGhwRG9jTWV0aG9kU2lnbmF0dXJlczogdHJ1ZQoKc2VydmljZXM6CgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQXJyYXlzXEludmFsaWRLZXlJbkFycmF5RGltRmV0Y2hSdWxlCgkJYXJndW1lbnRzOgoJCQlyZXBvcnRNYXliZXM6ICVyZXBvcnRNYXliZXMlCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEFycmF5c1xJbnZhbGlkS2V5SW5BcnJheUl0ZW1SdWxlCgkJYXJndW1lbnRzOgoJCQlyZXBvcnRNYXliZXM6ICVyZXBvcnRNYXliZXMlCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEFycmF5c1xOb25leGlzdGVudE9mZnNldEluQXJyYXlEaW1GZXRjaFJ1bGUKCQlhcmd1bWVudHM6CgkJCXJlcG9ydE1heWJlczogJXJlcG9ydE1heWJlcyUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRXhjZXB0aW9uc1xUaHJvd3NWb2lkRnVuY3Rpb25XaXRoRXhwbGljaXRUaHJvd1BvaW50UnVsZQoJCWFyZ3VtZW50czoKCQkJZXhjZXB0aW9uVHlwZVJlc29sdmVyOiBAZXhjZXB0aW9uVHlwZVJlc29sdmVyCgkJCW1pc3NpbmdDaGVja2VkRXhjZXB0aW9uSW5UaHJvd3M6ICVleGNlcHRpb25zLmNoZWNrLm1pc3NpbmdDaGVja2VkRXhjZXB0aW9uSW5UaHJvd3MlCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEV4Y2VwdGlvbnNcVGhyb3dzVm9pZE1ldGhvZFdpdGhFeHBsaWNpdFRocm93UG9pbnRSdWxlCgkJYXJndW1lbnRzOgoJCQlleGNlcHRpb25UeXBlUmVzb2x2ZXI6IEBleGNlcHRpb25UeXBlUmVzb2x2ZXIKCQkJbWlzc2luZ0NoZWNrZWRFeGNlcHRpb25JblRocm93czogJWV4Y2VwdGlvbnMuY2hlY2subWlzc2luZ0NoZWNrZWRFeGNlcHRpb25JblRocm93cyUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcR2VuZXJhdG9yc1xZaWVsZEZyb21UeXBlUnVsZQoJCWFyZ3VtZW50czoKCQkJcmVwb3J0TWF5YmVzOiAlcmVwb3J0TWF5YmVzJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xHZW5lcmF0b3JzXFlpZWxkSW5HZW5lcmF0b3JSdWxlCgkJYXJndW1lbnRzOgoJCQlyZXBvcnRNYXliZXM6ICVyZXBvcnRNYXliZXMlCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEFycmF5c1xBcnJheVVucGFja2luZ1J1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcUHJvcGVydGllc1xSZWFkT25seUJ5UGhwRG9jUHJvcGVydHlBc3NpZ25SZWZSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcUmVhZE9ubHlCeVBocERvY1Byb3BlcnR5QXNzaWduUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xWYXJpYWJsZXNcUGFyYW1ldGVyT3V0QXNzaWduZWRUeXBlUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xWYXJpYWJsZXNcUGFyYW1ldGVyT3V0RXhlY3V0aW9uRW5kVHlwZVJ1bGUKCmluY2x1ZGVzOgoJLSBjb25maWcubGV2ZWw2Lm5lb24KCnBhcmFtZXRlcnM6CgljaGVja1VuaW9uVHlwZXM6IHRydWUKCXJlcG9ydE1heWJlczogdHJ1ZQoKcGFyYW1ldGVyczoKCWN1c3RvbVJ1bGVzZXRVc2VkOiBmYWxzZQoKY29uZGl0aW9uYWxUYWdzOgoJUEhQU3RhblxSdWxlc1xBcGlcTm9kZUNvbm5lY3RpbmdWaXNpdG9yQXR0cmlidXRlc1J1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMubm9kZUNvbm5lY3RpbmdWaXNpdG9yUnVsZSUKCglQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcTWlzc2luZ1JlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eUFzc2lnblJ1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMucmVhZE9ubHlCeVBocERvYyUKCglQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcUmVhZE9ubHlCeVBocERvY1Byb3BlcnR5UnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5yZWFkT25seUJ5UGhwRG9jJQoKCVBIUFN0YW5cUnVsZXNcUHJvcGVydGllc1xVbmluaXRpYWxpemVkUHJvcGVydHlSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWNoZWNrVW5pbml0aWFsaXplZFByb3BlcnRpZXMlCgoJUEhQU3RhblxSdWxlc1xNZXRob2RzXENvbnNpc3RlbnRDb25zdHJ1Y3RvclJ1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMuY29uc2lzdGVudENvbnN0cnVjdG9yJQoKCVBIUFN0YW5cUnVsZXNcQXBpXEFwaUNsYXNzQ29uc3RGZXRjaFJ1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMucnVudGltZVJlZmxlY3Rpb25SdWxlcyUKCglQSFBTdGFuXFJ1bGVzXEFwaVxBcGlJbnN0YW5jZW9mUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5ydW50aW1lUmVmbGVjdGlvblJ1bGVzJQoKCVBIUFN0YW5cUnVsZXNcQXBpXFJ1bnRpbWVSZWZsZWN0aW9uRnVuY3Rpb25SdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLnJ1bnRpbWVSZWZsZWN0aW9uUnVsZXMlCgoJUEhQU3RhblxSdWxlc1xBcGlcUnVudGltZVJlZmxlY3Rpb25JbnN0YW50aWF0aW9uUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5ydW50aW1lUmVmbGVjdGlvblJ1bGVzJQoKCVBIUFN0YW5cUnVsZXNcTWV0aG9kc1xNaXNzaW5nTWFnaWNTZXJpYWxpemF0aW9uTWV0aG9kc1J1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMubWlzc2luZ01hZ2ljU2VyaWFsaXphdGlvblJ1bGUlCgoJUEhQU3RhblxSdWxlc1xDb25zdGFudHNcTWFnaWNDb25zdGFudENvbnRleHRSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLm1hZ2ljQ29uc3RhbnRPdXRPZkNvbnRleHQlCgoJUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcVXNlbGVzc0Z1bmN0aW9uUmV0dXJuVmFsdWVSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLnVzZWxlc3NSZXR1cm5WYWx1ZSUKCglQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xQcmludGZBcnJheVBhcmFtZXRlcnNSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLnByaW50ZkFycmF5UGFyYW1ldGVycyUKCglQSFBTdGFuXFJ1bGVzXFJlZ2V4cFxSZWd1bGFyRXhwcmVzc2lvblF1b3RpbmdSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLnZhbGlkYXRlUHJlZ1F1b3RlJQoKCVBIUFN0YW5cUnVsZXNcS2V5d29yZHNcUmVxdWlyZUZpbGVFeGlzdHNSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLnJlcXVpcmVGaWxlRXhpc3RzJQoKCVBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xMb2NhbFR5cGVUcmFpdFVzZUFsaWFzZXNSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLmFic2VudFR5cGVDaGVja3MlCgpydWxlczoKCS0gUEhQU3RhblxSdWxlc1xBcGlcQXBpSW5zdGFudGlhdGlvblJ1bGUKCS0gUEhQU3RhblxSdWxlc1xBcGlcQXBpQ2xhc3NFeHRlbmRzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEFwaVxBcGlDbGFzc0ltcGxlbWVudHNSdWxlCgktIFBIUFN0YW5cUnVsZXNcQXBpXEFwaUludGVyZmFjZUV4dGVuZHNSdWxlCgktIFBIUFN0YW5cUnVsZXNcQXBpXEFwaU1ldGhvZENhbGxSdWxlCgktIFBIUFN0YW5cUnVsZXNcQXBpXEFwaVN0YXRpY0NhbGxSdWxlCgktIFBIUFN0YW5cUnVsZXNcQXBpXEFwaVRyYWl0VXNlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEFwaVxHZXRUZW1wbGF0ZVR5cGVSdWxlCgktIFBIUFN0YW5cUnVsZXNcQXBpXFBocFN0YW5OYW1lc3BhY2VJbjNyZFBhcnR5UGFja2FnZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xBcnJheXNcRHVwbGljYXRlS2V5c0luTGl0ZXJhbEFycmF5c1J1bGUKCS0gUEhQU3RhblxSdWxlc1xBcnJheXNcRW1wdHlBcnJheUl0ZW1SdWxlCgktIFBIUFN0YW5cUnVsZXNcQXJyYXlzXE9mZnNldEFjY2Vzc1dpdGhvdXREaW1Gb3JSZWFkaW5nUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENhc3RcVW5zZXRDYXN0UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcQWxsb3dlZFN1YlR5cGVzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcQ2xhc3NBdHRyaWJ1dGVzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcQ2xhc3NDb25zdGFudEF0dHJpYnV0ZXNSdWxlCgktIFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xDbGFzc0NvbnN0YW50UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcRHVwbGljYXRlRGVjbGFyYXRpb25SdWxlCgktIFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xFbnVtU2FuaXR5UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcRXhpc3RpbmdDbGFzc2VzSW5DbGFzc0ltcGxlbWVudHNSdWxlCgktIFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xFeGlzdGluZ0NsYXNzZXNJbkVudW1JbXBsZW1lbnRzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcRXhpc3RpbmdDbGFzc2VzSW5JbnRlcmZhY2VFeHRlbmRzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcRXhpc3RpbmdDbGFzc0luVHJhaXRVc2VSdWxlCgktIFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xJbnN0YW50aWF0aW9uUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcSW5zdGFudGlhdGlvbkNhbGxhYmxlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcSW52YWxpZFByb21vdGVkUHJvcGVydGllc1J1bGUKCS0gUEhQU3RhblxSdWxlc1xDbGFzc2VzXExvY2FsVHlwZUFsaWFzZXNSdWxlCgktIFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xMb2NhbFR5cGVUcmFpdEFsaWFzZXNSdWxlCgktIFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xOZXdTdGF0aWNSdWxlCgktIFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xOb25DbGFzc0F0dHJpYnV0ZUNsYXNzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcUmVhZE9ubHlDbGFzc1J1bGUKCS0gUEhQU3RhblxSdWxlc1xDbGFzc2VzXFRyYWl0QXR0cmlidXRlQ2xhc3NSdWxlCgktIFBIUFN0YW5cUnVsZXNcQ29uc3RhbnRzXENsYXNzQXNDbGFzc0NvbnN0YW50UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENvbnN0YW50c1xEeW5hbWljQ2xhc3NDb25zdGFudEZldGNoUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENvbnN0YW50c1xGaW5hbENvbnN0YW50UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENvbnN0YW50c1xOYXRpdmVUeXBlZENsYXNzQ29uc3RhbnRSdWxlCgktIFBIUFN0YW5cUnVsZXNcRW51bUNhc2VzXEVudW1DYXNlQXR0cmlidXRlc1J1bGUKCS0gUEhQU3RhblxSdWxlc1xFeGNlcHRpb25zXE5vbmNhcHR1cmluZ0NhdGNoUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEV4Y2VwdGlvbnNcVGhyb3dFeHByZXNzaW9uUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xBcnJvd0Z1bmN0aW9uQXR0cmlidXRlc1J1bGUKCS0gUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcQXJyb3dGdW5jdGlvblJldHVybk51bGxzYWZlQnlSZWZSdWxlCgktIFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXENsb3N1cmVBdHRyaWJ1dGVzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xEZWZpbmVQYXJhbWV0ZXJzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xFeGlzdGluZ0NsYXNzZXNJbkFycm93RnVuY3Rpb25UeXBlaGludHNSdWxlCgktIFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXENhbGxUb0Z1bmN0aW9uUGFyYW1ldGVyc1J1bGUKCS0gUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcRXhpc3RpbmdDbGFzc2VzSW5DbG9zdXJlVHlwZWhpbnRzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xFeGlzdGluZ0NsYXNzZXNJblR5cGVoaW50c1J1bGUKCS0gUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcRnVuY3Rpb25BdHRyaWJ1dGVzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xJbm5lckZ1bmN0aW9uUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xJbnZhbGlkTGV4aWNhbFZhcmlhYmxlc0luQ2xvc3VyZVVzZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcUGFyYW1BdHRyaWJ1dGVzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xQcmludGZQYXJhbWV0ZXJzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xSZWRlZmluZWRQYXJhbWV0ZXJzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xSZXR1cm5OdWxsc2FmZUJ5UmVmUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXElnbm9yZVxJZ25vcmVQYXJzZUVycm9yUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEZ1bmN0aW9uc1xWYXJpYWRpY1BhcmFtZXRlcnNEZWNsYXJhdGlvblJ1bGUKCS0gUEhQU3RhblxSdWxlc1xLZXl3b3Jkc1xDb250aW51ZUJyZWFrSW5Mb29wUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEtleXdvcmRzXERlY2xhcmVTdHJpY3RUeXBlc1J1bGUKCS0gUEhQU3RhblxSdWxlc1xNZXRob2RzXEFic3RyYWN0TWV0aG9kSW5Ob25BYnN0cmFjdENsYXNzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcQWJzdHJhY3RQcml2YXRlTWV0aG9kUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcQ2FsbE1ldGhvZHNSdWxlCgktIFBIUFN0YW5cUnVsZXNcTWV0aG9kc1xDYWxsU3RhdGljTWV0aG9kc1J1bGUKCS0gUEhQU3RhblxSdWxlc1xNZXRob2RzXENvbnN0cnVjdG9yUmV0dXJuVHlwZVJ1bGUKCS0gUEhQU3RhblxSdWxlc1xNZXRob2RzXEV4aXN0aW5nQ2xhc3Nlc0luVHlwZWhpbnRzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcRmluYWxQcml2YXRlTWV0aG9kUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcTWV0aG9kQ2FsbGFibGVSdWxlCgktIFBIUFN0YW5cUnVsZXNcTWV0aG9kc1xNZXRob2RWaXNpYmlsaXR5SW5JbnRlcmZhY2VSdWxlCgktIFBIUFN0YW5cUnVsZXNcTWV0aG9kc1xNaXNzaW5nTWV0aG9kSW1wbGVtZW50YXRpb25SdWxlCgktIFBIUFN0YW5cUnVsZXNcTWV0aG9kc1xNZXRob2RBdHRyaWJ1dGVzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcU3RhdGljTWV0aG9kQ2FsbGFibGVSdWxlCgktIFBIUFN0YW5cUnVsZXNcTmFtZXNcVXNlZE5hbWVzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE9wZXJhdG9yc1xJbnZhbGlkQXNzaWduVmFyUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcQWNjZXNzUHJvcGVydGllc0luQXNzaWduUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcQWNjZXNzU3RhdGljUHJvcGVydGllc0luQXNzaWduUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcSW52YWxpZENhbGxhYmxlUHJvcGVydHlUeXBlUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcTWlzc2luZ1JlYWRPbmx5UHJvcGVydHlBc3NpZ25SdWxlCgktIFBIUFN0YW5cUnVsZXNcUHJvcGVydGllc1xQcm9wZXJ0aWVzSW5JbnRlcmZhY2VSdWxlCgktIFBIUFN0YW5cUnVsZXNcUHJvcGVydGllc1xQcm9wZXJ0eUF0dHJpYnV0ZXNSdWxlCgktIFBIUFN0YW5cUnVsZXNcUHJvcGVydGllc1xSZWFkT25seVByb3BlcnR5UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFRyYWl0c1xDb25mbGljdGluZ1RyYWl0Q29uc3RhbnRzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFRyYWl0c1xDb25zdGFudHNJblRyYWl0c1J1bGUKCS0gUEhQU3RhblxSdWxlc1xUeXBlc1xJbnZhbGlkVHlwZXNJblVuaW9uUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFZhcmlhYmxlc1xVbnNldFJ1bGUKCS0gUEhQU3RhblxSdWxlc1xXaGl0ZXNwYWNlXEZpbGVXaGl0ZXNwYWNlUnVsZQoKc2VydmljZXM6CgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQXBpXEFwaUNsYXNzQ29uc3RGZXRjaFJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQXBpXEFwaUluc3RhbmNlb2ZSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEFwaVxBcGlJbnN0YW5jZW9mVHlwZVJ1bGUKCQlhcmd1bWVudHM6CgkJCWVuYWJsZWQ6ICVmZWF0dXJlVG9nZ2xlcy5pbnN0YW5jZW9mVHlwZSUKCQkJZGVwcmVjYXRpb25SdWxlc0luc3RhbGxlZDogJWRlcHJlY2F0aW9uUnVsZXNJbnN0YWxsZWQlCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEFwaVxOb2RlQ29ubmVjdGluZ1Zpc2l0b3JBdHRyaWJ1dGVzUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xBcGlcUnVudGltZVJlZmxlY3Rpb25GdW5jdGlvblJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQXBpXFJ1bnRpbWVSZWZsZWN0aW9uSW5zdGFudGlhdGlvblJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xFeGlzdGluZ0NsYXNzSW5DbGFzc0V4dGVuZHNSdWxlCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ2xhc3Nlc1xFeGlzdGluZ0NsYXNzSW5JbnN0YW5jZU9mUnVsZQoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJCWFyZ3VtZW50czoKCQkJY2hlY2tDbGFzc0Nhc2VTZW5zaXRpdml0eTogJWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHklCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcTG9jYWxUeXBlVHJhaXRVc2VBbGlhc2VzUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xFeGNlcHRpb25zXENhdWdodEV4Y2VwdGlvbkV4aXN0ZW5jZVJ1bGUKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCQlhcmd1bWVudHM6CgkJCWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHk6ICVjaGVja0NsYXNzQ2FzZVNlbnNpdGl2aXR5JQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcQ2FsbFRvTm9uRXhpc3RlbnRGdW5jdGlvblJ1bGUKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCQlhcmd1bWVudHM6CgkJCWNoZWNrRnVuY3Rpb25OYW1lQ2FzZTogJWNoZWNrRnVuY3Rpb25OYW1lQ2FzZSUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ29uc3RhbnRzXE92ZXJyaWRpbmdDb25zdGFudFJ1bGUKCQlhcmd1bWVudHM6CgkJCWNoZWNrUGhwRG9jTWV0aG9kU2lnbmF0dXJlczogJWNoZWNrUGhwRG9jTWV0aG9kU2lnbmF0dXJlcyUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcTWV0aG9kc1xPdmVycmlkaW5nTWV0aG9kUnVsZQoJCWFyZ3VtZW50czoKCQkJY2hlY2tQaHBEb2NNZXRob2RTaWduYXR1cmVzOiAlY2hlY2tQaHBEb2NNZXRob2RTaWduYXR1cmVzJQoJCQlnZW5lcmljUHJvdG90eXBlTWVzc2FnZTogJWZlYXR1cmVUb2dnbGVzLmdlbmVyaWNQcm90b3R5cGVNZXNzYWdlJQoJCQlmaW5hbEJ5UGhwRG9jOiAlZmVhdHVyZVRvZ2dsZXMuZmluYWxCeVBocERvYyUKCQkJY2hlY2tNaXNzaW5nT3ZlcnJpZGVNZXRob2RBdHRyaWJ1dGU6ICVjaGVja01pc3NpbmdPdmVycmlkZU1ldGhvZEF0dHJpYnV0ZSUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcTWV0aG9kc1xDb25zaXN0ZW50Q29uc3RydWN0b3JSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXE1pc3NpbmdcTWlzc2luZ1JldHVyblJ1bGUKCQlhcmd1bWVudHM6CgkJCWNoZWNrRXhwbGljaXRNaXhlZE1pc3NpbmdSZXR1cm46ICVjaGVja0V4cGxpY2l0TWl4ZWRNaXNzaW5nUmV0dXJuJQoJCQljaGVja1BocERvY01pc3NpbmdSZXR1cm46ICVjaGVja1BocERvY01pc3NpbmdSZXR1cm4lCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXE5hbWVzcGFjZXNcRXhpc3RpbmdOYW1lc0luR3JvdXBVc2VSdWxlCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgkJYXJndW1lbnRzOgoJCQljaGVja0Z1bmN0aW9uTmFtZUNhc2U6ICVjaGVja0Z1bmN0aW9uTmFtZUNhc2UlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXE5hbWVzcGFjZXNcRXhpc3RpbmdOYW1lc0luVXNlUnVsZQoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJCWFyZ3VtZW50czoKCQkJY2hlY2tGdW5jdGlvbk5hbWVDYXNlOiAlY2hlY2tGdW5jdGlvbk5hbWVDYXNlJQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xPcGVyYXRvcnNcSW52YWxpZEluY0RlY09wZXJhdGlvblJ1bGUKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCQlhcmd1bWVudHM6CgkJCWJsZWVkaW5nRWRnZTogJWZlYXR1cmVUb2dnbGVzLmJsZWVkaW5nRWRnZSUKCQkJY2hlY2tUaGlzT25seTogJWNoZWNrVGhpc09ubHklCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcQWNjZXNzUHJvcGVydGllc1J1bGUKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCQlhcmd1bWVudHM6CgkJCXJlcG9ydE1hZ2ljUHJvcGVydGllczogJXJlcG9ydE1hZ2ljUHJvcGVydGllcyUKCQkJY2hlY2tEeW5hbWljUHJvcGVydGllczogJWNoZWNrRHluYW1pY1Byb3BlcnRpZXMlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcQWNjZXNzU3RhdGljUHJvcGVydGllc1J1bGUKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xQcm9wZXJ0aWVzXEV4aXN0aW5nQ2xhc3Nlc0luUHJvcGVydGllc1J1bGUKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCQlhcmd1bWVudHM6CgkJCWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHk6ICVjaGVja0NsYXNzQ2FzZVNlbnNpdGl2aXR5JQoJCQljaGVja1RoaXNPbmx5OiAlY2hlY2tUaGlzT25seSUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXEZ1bmN0aW9uQ2FsbGFibGVSdWxlCgkJYXJndW1lbnRzOgoJCQljaGVja0Z1bmN0aW9uTmFtZUNhc2U6ICVjaGVja0Z1bmN0aW9uTmFtZUNhc2UlCgkJCXJlcG9ydE1heWJlczogJXJlcG9ydE1heWJlcyUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcUHJvcGVydGllc1xNaXNzaW5nUmVhZE9ubHlCeVBocERvY1Byb3BlcnR5QXNzaWduUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xQcm9wZXJ0aWVzXE92ZXJyaWRpbmdQcm9wZXJ0eVJ1bGUKCQlhcmd1bWVudHM6CgkJCWNoZWNrUGhwRG9jTWV0aG9kU2lnbmF0dXJlczogJWNoZWNrUGhwRG9jTWV0aG9kU2lnbmF0dXJlcyUKCQkJcmVwb3J0TWF5YmVzOiAlcmVwb3J0TWF5YmVzSW5Qcm9wZXJ0eVBocERvY1R5cGVzJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xQcm9wZXJ0aWVzXFJlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eVJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcUHJvcGVydGllc1xVbmluaXRpYWxpemVkUHJvcGVydHlSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcV3JpdGluZ1RvUmVhZE9ubHlQcm9wZXJ0aWVzUnVsZQoJCWFyZ3VtZW50czoKCQkJY2hlY2tUaGlzT25seTogJWNoZWNrVGhpc09ubHklCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcUmVhZGluZ1dyaXRlT25seVByb3BlcnRpZXNSdWxlCgkJYXJndW1lbnRzOgoJCQljaGVja1RoaXNPbmx5OiAlY2hlY2tUaGlzT25seSUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcVmFyaWFibGVzXENvbXBhY3RWYXJpYWJsZXNSdWxlCgkJYXJndW1lbnRzOgoJCQljaGVja01heWJlVW5kZWZpbmVkVmFyaWFibGVzOiAlY2hlY2tNYXliZVVuZGVmaW5lZFZhcmlhYmxlcyUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcVmFyaWFibGVzXERlZmluZWRWYXJpYWJsZVJ1bGUKCQlhcmd1bWVudHM6CgkJCWNsaUFyZ3VtZW50c1ZhcmlhYmxlc1JlZ2lzdGVyZWQ6ICVjbGlBcmd1bWVudHNWYXJpYWJsZXNSZWdpc3RlcmVkJQoJCQljaGVja01heWJlVW5kZWZpbmVkVmFyaWFibGVzOiAlY2hlY2tNYXliZVVuZGVmaW5lZFZhcmlhYmxlcyUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcUmVnZXhwXFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVyblJ1bGUKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXENvbnN0cnVjdG9yc0hlbHBlcgoJCWFyZ3VtZW50czoKCQkJYWRkaXRpb25hbENvbnN0cnVjdG9yczogJWFkZGl0aW9uYWxDb25zdHJ1Y3RvcnMlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcTWlzc2luZ01hZ2ljU2VyaWFsaXphdGlvbk1ldGhvZHNSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENvbnN0YW50c1xNYWdpY0NvbnN0YW50Q29udGV4dFJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXFVzZWxlc3NGdW5jdGlvblJldHVyblZhbHVlUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcUHJpbnRmQXJyYXlQYXJhbWV0ZXJzUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xSZWdleHBcUmVndWxhckV4cHJlc3Npb25RdW90aW5nUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xLZXl3b3Jkc1xSZXF1aXJlRmlsZUV4aXN0c1J1bGUKCQlhcmd1bWVudHM6CgkJCWN1cnJlbnRXb3JraW5nRGlyZWN0b3J5OiAlY3VycmVudFdvcmtpbmdEaXJlY3RvcnklCgpwYXJhbWV0ZXJzOgoJZmVhdHVyZVRvZ2dsZXM6CgkJYmxlZWRpbmdFZGdlOiB0cnVlCgkJc2tpcENoZWNrR2VuZXJpY0NsYXNzZXMhOiBbXQoJCWV4cGxpY2l0TWl4ZWRJblVua25vd25HZW5lcmljTmV3OiB0cnVlCgkJZXhwbGljaXRNaXhlZEZvckdsb2JhbFZhcmlhYmxlczogdHJ1ZQoJCWV4cGxpY2l0TWl4ZWRWaWFJc0FycmF5OiB0cnVlCgkJYXJyYXlGaWx0ZXI6IHRydWUKCQlhcnJheVVucGFja2luZzogdHJ1ZQoJCWFycmF5VmFsdWVzOiB0cnVlCgkJbm9kZUNvbm5lY3RpbmdWaXNpdG9yQ29tcGF0aWJpbGl0eTogZmFsc2UKCQlub2RlQ29ubmVjdGluZ1Zpc2l0b3JSdWxlOiB0cnVlCgkJZGlzYWJsZUNoZWNrTWlzc2luZ0l0ZXJhYmxlVmFsdWVUeXBlOiB0cnVlCgkJc3RyaWN0VW5uZWNlc3NhcnlOdWxsc2FmZVByb3BlcnR5RmV0Y2g6IHRydWUKCQlsb29zZUNvbXBhcmlzb246IHRydWUKCQljb25zaXN0ZW50Q29uc3RydWN0b3I6IHRydWUKCQljaGVja1VucmVzb2x2YWJsZVBhcmFtZXRlclR5cGVzOiB0cnVlCgkJcmVhZE9ubHlCeVBocERvYzogdHJ1ZQoJCXBocERvY1BhcnNlclJlcXVpcmVXaGl0ZXNwYWNlQmVmb3JlRGVzY3JpcHRpb246IHRydWUKCQlwaHBEb2NQYXJzZXJJbmNsdWRlTGluZXM6IHRydWUKCQllbmFibGVJZ25vcmVFcnJvcnNXaXRoaW5QaHBEb2NzOiB0cnVlCgkJcnVudGltZVJlZmxlY3Rpb25SdWxlczogdHJ1ZQoJCW5vdEFuYWx5c2VkVHJhaXQ6IHRydWUKCQljdXJsU2V0T3B0VHlwZXM6IHRydWUKCQlsaXN0VHlwZTogdHJ1ZQoJCWFic3RyYWN0VHJhaXRNZXRob2Q6IHRydWUKCQltaXNzaW5nTWFnaWNTZXJpYWxpemF0aW9uUnVsZTogdHJ1ZQoJCW51bGxDb250ZXh0Rm9yVm9pZFJldHVybmluZ0Z1bmN0aW9uczogdHJ1ZQoJCXVuZXNjYXBlU3RyaW5nczogdHJ1ZQoJCWFsd2F5c0NoZWNrVG9vV2lkZVJldHVyblR5cGVGaW5hbE1ldGhvZHM6IHRydWUKCQlkdXBsaWNhdGVTdHViczogdHJ1ZQoJCWxvZ2ljYWxYb3I6IHRydWUKCQliZXR0ZXJOb29wOiB0cnVlCgkJaW52YXJpYW5jZUNvbXBvc2l0aW9uOiB0cnVlCgkJYWx3YXlzVHJ1ZUFsd2F5c1JlcG9ydGVkOiB0cnVlCgkJZGlzYWJsZVVucmVhY2hhYmxlQnJhbmNoZXNSdWxlczogdHJ1ZQoJCXZhclRhZ1R5cGU6IHRydWUKCQljbG9zdXJlRGVmYXVsdFBhcmFtZXRlclR5cGVSdWxlOiB0cnVlCgkJbmV3UnVsZUxldmVsSGVscGVyOiB0cnVlCgkJaW5zdGFuY2VvZlR5cGU6IHRydWUKCQlwYXJhbU91dFZhcmlhbmNlOiB0cnVlCgkJYWxsSW52YWxpZFBocERvY3M6IHRydWUKCQlzdHJpY3RTdGF0aWNNZXRob2RUZW1wbGF0ZVR5cGVWYXJpYW5jZTogdHJ1ZQoJCXByb3BlcnR5VmFyaWFuY2U6IHRydWUKCQlnZW5lcmljUHJvdG90eXBlTWVzc2FnZTogdHJ1ZQoJCXN0cmljdGVyRnVuY3Rpb25NYXA6IHRydWUKCQlpbnZhbGlkUGhwRG9jVGFnTGluZTogdHJ1ZQoJCWRldGVjdERlYWRUeXBlSW5NdWx0aUNhdGNoOiB0cnVlCgkJemVyb0ZpbGVzOiB0cnVlCgkJcHJvamVjdFNlcnZpY2VzTm90SW5BbmFseXNlZFBhdGhzOiB0cnVlCgkJY2FsbFVzZXJGdW5jOiB0cnVlCgkJZmluYWxCeVBocERvYzogdHJ1ZQoJCW1hZ2ljQ29uc3RhbnRPdXRPZkNvbnRleHQ6IHRydWUKCQlwYXJhbU91dFR5cGU6IHRydWUKCQlwdXJlOiB0cnVlCgkJY2hlY2tQYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nRnVuY3Rpb25zOiB0cnVlCgkJdXNlbGVzc1JldHVyblZhbHVlOiB0cnVlCgkJcHJpbnRmQXJyYXlQYXJhbWV0ZXJzOiB0cnVlCgkJcHJlY2lzZU1pc3NpbmdSZXR1cm46IHRydWUKCQl2YWxpZGF0ZVByZWdRdW90ZTogdHJ1ZQoJCW5vSW1wbGljaXRXaWxkY2FyZDogdHJ1ZQoJCXRvb1dpZGVQcm9wZXJ0eVR5cGU6IHRydWUKCQlleHBsaWNpdFRocm93OiB0cnVlCgkJYWJzZW50VHlwZUNoZWNrczogdHJ1ZQoJCXJlcXVpcmVGaWxlRXhpc3RzOiB0cnVlCgoJc3R1YkZpbGVzOgoJCS0gLi4vc3R1YnMvYmxlZWRpbmdFZGdlL1J1bGUuc3R1YgoKaW5jbHVkZXM6CgktIGNvbmZpZy5sZXZlbDMubmVvbgoKcnVsZXM6CgktIFBIUFN0YW5cUnVsZXNcQXJyYXlzXERlYWRGb3JlYWNoUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXERlYWRDb2RlXFVucmVhY2hhYmxlU3RhdGVtZW50UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXERlYWRDb2RlXFVudXNlZFByaXZhdGVDb25zdGFudFJ1bGUKCS0gUEhQU3RhblxSdWxlc1xEZWFkQ29kZVxVbnVzZWRQcml2YXRlTWV0aG9kUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXEV4Y2VwdGlvbnNcT3ZlcndyaXR0ZW5FeGl0UG9pbnRCeUZpbmFsbHlSdWxlCgktIFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXENhbGxUb0Z1bmN0aW9uU3RhdGVtZW50V2l0aG91dFNpZGVFZmZlY3RzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcQ2FsbFRvTWV0aG9kU3RhdGVtZW50V2l0aG91dFNpZGVFZmZlY3RzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcQ2FsbFRvU3RhdGljTWV0aG9kU3RhdGVtZW50V2l0aG91dFNpZGVFZmZlY3RzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcTnVsbHNhZmVNZXRob2RDYWxsUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFRvb1dpZGVUeXBlaGludHNcVG9vV2lkZUFycm93RnVuY3Rpb25SZXR1cm5UeXBlaGludFJ1bGUKCS0gUEhQU3RhblxSdWxlc1xUb29XaWRlVHlwZWhpbnRzXFRvb1dpZGVDbG9zdXJlUmV0dXJuVHlwZWhpbnRSdWxlCgktIFBIUFN0YW5cUnVsZXNcVG9vV2lkZVR5cGVoaW50c1xUb29XaWRlRnVuY3Rpb25SZXR1cm5UeXBlaGludFJ1bGUKCmNvbmRpdGlvbmFsVGFnczoKCVBIUFN0YW5cUnVsZXNcQ29tcGFyaXNvblxDb25zdGFudExvb3NlQ29tcGFyaXNvblJ1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMubG9vc2VDb21wYXJpc29uJQoKCVBIUFN0YW5cUnVsZXNcVHJhaXRzXFRyYWl0RGVjbGFyYXRpb25Db2xsZWN0b3I6CgkJcGhwc3Rhbi5jb2xsZWN0b3I6ICVmZWF0dXJlVG9nZ2xlcy5ub3RBbmFseXNlZFRyYWl0JQoKCVBIUFN0YW5cUnVsZXNcVHJhaXRzXFRyYWl0VXNlQ29sbGVjdG9yOgoJCXBocHN0YW4uY29sbGVjdG9yOiAlZmVhdHVyZVRvZ2dsZXMubm90QW5hbHlzZWRUcmFpdCUKCglQSFBTdGFuXFJ1bGVzXFRyYWl0c1xOb3RBbmFseXNlZFRyYWl0UnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5ub3RBbmFseXNlZFRyYWl0JQoKCVBIUFN0YW5cUnVsZXNcQ29tcGFyaXNvblxMb2dpY2FsWG9yQ29uc3RhbnRDb25kaXRpb25SdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLmxvZ2ljYWxYb3IlCgoJUEhQU3RhblxSdWxlc1xEZWFkQ29kZVxCZXR0ZXJOb29wUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5iZXR0ZXJOb29wJQoKCVBIUFN0YW5cUnVsZXNcVG9vV2lkZVR5cGVoaW50c1xUb29XaWRlRnVuY3Rpb25QYXJhbWV0ZXJPdXRUeXBlUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5wYXJhbU91dFR5cGUlCgoJUEhQU3RhblxSdWxlc1xUb29XaWRlVHlwZWhpbnRzXFRvb1dpZGVNZXRob2RQYXJhbWV0ZXJPdXRUeXBlUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5wYXJhbU91dFR5cGUlCgoJUEhQU3RhblxSdWxlc1xEZWFkQ29kZVxDYWxsVG9Db25zdHJ1Y3RvclN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLnB1cmUlCgoJUEhQU3RhblxSdWxlc1xEZWFkQ29kZVxQb3NzaWJseVB1cmVOZXdDb2xsZWN0b3I6CgkJcGhwc3Rhbi5jb2xsZWN0b3I6ICVmZWF0dXJlVG9nZ2xlcy5wdXJlJQoKCVBIUFN0YW5cUnVsZXNcRGVhZENvZGVcQ29uc3RydWN0b3JXaXRob3V0SW1wdXJlUG9pbnRzQ29sbGVjdG9yOgoJCXBocHN0YW4uY29sbGVjdG9yOiAlZmVhdHVyZVRvZ2dsZXMucHVyZSUKCglQSFBTdGFuXFJ1bGVzXERlYWRDb2RlXENhbGxUb0Z1bmN0aW9uU3RhdGVtZW50V2l0aG91dEltcHVyZVBvaW50c1J1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMucHVyZSUKCglQSFBTdGFuXFJ1bGVzXERlYWRDb2RlXFBvc3NpYmx5UHVyZUZ1bmNDYWxsQ29sbGVjdG9yOgoJCXBocHN0YW4uY29sbGVjdG9yOiAlZmVhdHVyZVRvZ2dsZXMucHVyZSUKCglQSFBTdGFuXFJ1bGVzXERlYWRDb2RlXEZ1bmN0aW9uV2l0aG91dEltcHVyZVBvaW50c0NvbGxlY3RvcjoKCQlwaHBzdGFuLmNvbGxlY3RvcjogJWZlYXR1cmVUb2dnbGVzLnB1cmUlCgoJUEhQU3RhblxSdWxlc1xEZWFkQ29kZVxDYWxsVG9NZXRob2RTdGF0ZW1lbnRXaXRob3V0SW1wdXJlUG9pbnRzUnVsZToKCQlwaHBzdGFuLnJ1bGVzLnJ1bGU6ICVmZWF0dXJlVG9nZ2xlcy5wdXJlJQoKCVBIUFN0YW5cUnVsZXNcRGVhZENvZGVcUG9zc2libHlQdXJlTWV0aG9kQ2FsbENvbGxlY3RvcjoKCQlwaHBzdGFuLmNvbGxlY3RvcjogJWZlYXR1cmVUb2dnbGVzLnB1cmUlCgoJUEhQU3RhblxSdWxlc1xEZWFkQ29kZVxNZXRob2RXaXRob3V0SW1wdXJlUG9pbnRzQ29sbGVjdG9yOgoJCXBocHN0YW4uY29sbGVjdG9yOiAlZmVhdHVyZVRvZ2dsZXMucHVyZSUKCglQSFBTdGFuXFJ1bGVzXERlYWRDb2RlXENhbGxUb1N0YXRpY01ldGhvZFN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWZlYXR1cmVUb2dnbGVzLnB1cmUlCgoJUEhQU3RhblxSdWxlc1xEZWFkQ29kZVxQb3NzaWJseVB1cmVTdGF0aWNDYWxsQ29sbGVjdG9yOgoJCXBocHN0YW4uY29sbGVjdG9yOiAlZmVhdHVyZVRvZ2dsZXMucHVyZSUKCglQSFBTdGFuXFJ1bGVzXFRvb1dpZGVUeXBlaGludHNcVG9vV2lkZVByb3BlcnR5VHlwZVJ1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZmVhdHVyZVRvZ2dsZXMudG9vV2lkZVByb3BlcnR5VHlwZSUKCnBhcmFtZXRlcnM6CgljaGVja0FkdmFuY2VkSXNzZXQ6IHRydWUKCnNlcnZpY2VzOgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcSW1wb3NzaWJsZUluc3RhbmNlT2ZSdWxlCgkJYXJndW1lbnRzOgoJCQljaGVja0Fsd2F5c1RydWVJbnN0YW5jZW9mOiAlY2hlY2tBbHdheXNUcnVlSW5zdGFuY2VvZiUKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogJXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgkJCXJlcG9ydEFsd2F5c1RydWVJbkxhc3RDb25kaXRpb246ICVyZXBvcnRBbHdheXNUcnVlSW5MYXN0Q29uZGl0aW9uJQoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluVGlwOiAldGlwcy50cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xDb21wYXJpc29uXEJvb2xlYW5BbmRDb25zdGFudENvbmRpdGlvblJ1bGUKCQlhcmd1bWVudHM6CgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW46ICV0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoJCQlibGVlZGluZ0VkZ2U6ICVmZWF0dXJlVG9nZ2xlcy5ibGVlZGluZ0VkZ2UlCgkJCXJlcG9ydEFsd2F5c1RydWVJbkxhc3RDb25kaXRpb246ICVyZXBvcnRBbHdheXNUcnVlSW5MYXN0Q29uZGl0aW9uJQoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluVGlwOiAldGlwcy50cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xDb21wYXJpc29uXEJvb2xlYW5PckNvbnN0YW50Q29uZGl0aW9uUnVsZQoJCWFyZ3VtZW50czoKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogJXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgkJCWJsZWVkaW5nRWRnZTogJWZlYXR1cmVUb2dnbGVzLmJsZWVkaW5nRWRnZSUKCQkJcmVwb3J0QWx3YXlzVHJ1ZUluTGFzdENvbmRpdGlvbjogJXJlcG9ydEFsd2F5c1RydWVJbkxhc3RDb25kaXRpb24lCgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW5UaXA6ICV0aXBzLnRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENvbXBhcmlzb25cQm9vbGVhbk5vdENvbnN0YW50Q29uZGl0aW9uUnVsZQoJCWFyZ3VtZW50czoKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogJXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgkJCXJlcG9ydEFsd2F5c1RydWVJbkxhc3RDb25kaXRpb246ICVyZXBvcnRBbHdheXNUcnVlSW5MYXN0Q29uZGl0aW9uJQoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluVGlwOiAldGlwcy50cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xEZWFkQ29kZVxOb29wUnVsZQoJCWFyZ3VtZW50czoKCQkJYmV0dGVyOiAlZmVhdHVyZVRvZ2dsZXMuYmV0dGVyTm9vcCUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRGVhZENvZGVcQ2FsbFRvQ29uc3RydWN0b3JTdGF0ZW1lbnRXaXRob3V0SW1wdXJlUG9pbnRzUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xEZWFkQ29kZVxDb25zdHJ1Y3RvcldpdGhvdXRJbXB1cmVQb2ludHNDb2xsZWN0b3IKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRGVhZENvZGVcUG9zc2libHlQdXJlTmV3Q29sbGVjdG9yCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXERlYWRDb2RlXENhbGxUb0Z1bmN0aW9uU3RhdGVtZW50V2l0aG91dEltcHVyZVBvaW50c1J1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRGVhZENvZGVcRnVuY3Rpb25XaXRob3V0SW1wdXJlUG9pbnRzQ29sbGVjdG9yCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXERlYWRDb2RlXFBvc3NpYmx5UHVyZUZ1bmNDYWxsQ29sbGVjdG9yCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXERlYWRDb2RlXENhbGxUb01ldGhvZFN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXERlYWRDb2RlXE1ldGhvZFdpdGhvdXRJbXB1cmVQb2ludHNDb2xsZWN0b3IKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRGVhZENvZGVcUG9zc2libHlQdXJlTWV0aG9kQ2FsbENvbGxlY3RvcgoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xEZWFkQ29kZVxDYWxsVG9TdGF0aWNNZXRob2RTdGF0ZW1lbnRXaXRob3V0SW1wdXJlUG9pbnRzUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xEZWFkQ29kZVxQb3NzaWJseVB1cmVTdGF0aWNDYWxsQ29sbGVjdG9yCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXERlYWRDb2RlXFVudXNlZFByaXZhdGVQcm9wZXJ0eVJ1bGUKCQlhcmd1bWVudHM6CgkJCWFsd2F5c1dyaXR0ZW5UYWdzOiAlcHJvcGVydHlBbHdheXNXcml0dGVuVGFncyUKCQkJYWx3YXlzUmVhZFRhZ3M6ICVwcm9wZXJ0eUFsd2F5c1JlYWRUYWdzJQoJCQljaGVja1VuaW5pdGlhbGl6ZWRQcm9wZXJ0aWVzOiAlY2hlY2tVbmluaXRpYWxpemVkUHJvcGVydGllcyUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ29tcGFyaXNvblxEb1doaWxlTG9vcENvbnN0YW50Q29uZGl0aW9uUnVsZQoJCWFyZ3VtZW50czoKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogJXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW5UaXA6ICV0aXBzLnRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENvbXBhcmlzb25cRWxzZUlmQ29uc3RhbnRDb25kaXRpb25SdWxlCgkJYXJndW1lbnRzOgoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluOiAldHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCQkJcmVwb3J0QWx3YXlzVHJ1ZUluTGFzdENvbmRpdGlvbjogJXJlcG9ydEFsd2F5c1RydWVJbkxhc3RDb25kaXRpb24lCgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW5UaXA6ICV0aXBzLnRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENvbXBhcmlzb25cSWZDb25zdGFudENvbmRpdGlvblJ1bGUKCQlhcmd1bWVudHM6CgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW46ICV0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluVGlwOiAldGlwcy50cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xDb21wYXJpc29uXEltcG9zc2libGVDaGVja1R5cGVGdW5jdGlvbkNhbGxSdWxlCgkJYXJndW1lbnRzOgoJCQljaGVja0Fsd2F5c1RydWVDaGVja1R5cGVGdW5jdGlvbkNhbGw6ICVjaGVja0Fsd2F5c1RydWVDaGVja1R5cGVGdW5jdGlvbkNhbGwlCgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW46ICV0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoJCQlyZXBvcnRBbHdheXNUcnVlSW5MYXN0Q29uZGl0aW9uOiAlcmVwb3J0QWx3YXlzVHJ1ZUluTGFzdENvbmRpdGlvbiUKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpblRpcDogJXRpcHMudHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ29tcGFyaXNvblxJbXBvc3NpYmxlQ2hlY2tUeXBlTWV0aG9kQ2FsbFJ1bGUKCQlhcmd1bWVudHM6CgkJCWNoZWNrQWx3YXlzVHJ1ZUNoZWNrVHlwZUZ1bmN0aW9uQ2FsbDogJWNoZWNrQWx3YXlzVHJ1ZUNoZWNrVHlwZUZ1bmN0aW9uQ2FsbCUKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogJXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgkJCXJlcG9ydEFsd2F5c1RydWVJbkxhc3RDb25kaXRpb246ICVyZXBvcnRBbHdheXNUcnVlSW5MYXN0Q29uZGl0aW9uJQoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluVGlwOiAldGlwcy50cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xDb21wYXJpc29uXEltcG9zc2libGVDaGVja1R5cGVTdGF0aWNNZXRob2RDYWxsUnVsZQoJCWFyZ3VtZW50czoKCQkJY2hlY2tBbHdheXNUcnVlQ2hlY2tUeXBlRnVuY3Rpb25DYWxsOiAlY2hlY2tBbHdheXNUcnVlQ2hlY2tUeXBlRnVuY3Rpb25DYWxsJQoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluOiAldHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCQkJcmVwb3J0QWx3YXlzVHJ1ZUluTGFzdENvbmRpdGlvbjogJXJlcG9ydEFsd2F5c1RydWVJbkxhc3RDb25kaXRpb24lCgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW5UaXA6ICV0aXBzLnRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENvbXBhcmlzb25cTG9naWNhbFhvckNvbnN0YW50Q29uZGl0aW9uUnVsZQoJCWFyZ3VtZW50czoKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogJXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgkJCXJlcG9ydEFsd2F5c1RydWVJbkxhc3RDb25kaXRpb246ICVyZXBvcnRBbHdheXNUcnVlSW5MYXN0Q29uZGl0aW9uJQoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluVGlwOiAldGlwcy50cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xEZWFkQ29kZVxCZXR0ZXJOb29wUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xDb21wYXJpc29uXE1hdGNoRXhwcmVzc2lvblJ1bGUKCQlhcmd1bWVudHM6CgkJCWNoZWNrQWx3YXlzVHJ1ZVN0cmljdENvbXBhcmlzb246ICVjaGVja0Fsd2F5c1RydWVTdHJpY3RDb21wYXJpc29uJQoJCQlkaXNhYmxlVW5yZWFjaGFibGU6ICVmZWF0dXJlVG9nZ2xlcy5kaXNhYmxlVW5yZWFjaGFibGVCcmFuY2hlc1J1bGVzJQoJCQlyZXBvcnRBbHdheXNUcnVlSW5MYXN0Q29uZGl0aW9uOiAlcmVwb3J0QWx3YXlzVHJ1ZUluTGFzdENvbmRpdGlvbiUKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogJXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENvbXBhcmlzb25cTnVtYmVyQ29tcGFyaXNvbk9wZXJhdG9yc0NvbnN0YW50Q29uZGl0aW9uUnVsZQoJCWFyZ3VtZW50czoKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogJXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW5UaXA6ICV0aXBzLnRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENvbXBhcmlzb25cU3RyaWN0Q29tcGFyaXNvbk9mRGlmZmVyZW50VHlwZXNSdWxlCgkJYXJndW1lbnRzOgoJCQljaGVja0Fsd2F5c1RydWVTdHJpY3RDb21wYXJpc29uOiAlY2hlY2tBbHdheXNUcnVlU3RyaWN0Q29tcGFyaXNvbiUKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogJXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgkJCXJlcG9ydEFsd2F5c1RydWVJbkxhc3RDb25kaXRpb246ICVyZXBvcnRBbHdheXNUcnVlSW5MYXN0Q29uZGl0aW9uJQoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluVGlwOiAldGlwcy50cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xDb21wYXJpc29uXENvbnN0YW50TG9vc2VDb21wYXJpc29uUnVsZQoJCWFyZ3VtZW50czoKCQkJY2hlY2tBbHdheXNUcnVlTG9vc2VDb21wYXJpc29uOiAlY2hlY2tBbHdheXNUcnVlTG9vc2VDb21wYXJpc29uJQoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluOiAldHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCQkJcmVwb3J0QWx3YXlzVHJ1ZUluTGFzdENvbmRpdGlvbjogJXJlcG9ydEFsd2F5c1RydWVJbkxhc3RDb25kaXRpb24lCgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW5UaXA6ICV0aXBzLnRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENvbXBhcmlzb25cVGVybmFyeU9wZXJhdG9yQ29uc3RhbnRDb25kaXRpb25SdWxlCgkJYXJndW1lbnRzOgoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluOiAldHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpblRpcDogJXRpcHMudHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ29tcGFyaXNvblxVbnJlYWNoYWJsZUlmQnJhbmNoZXNSdWxlCgkJYXJndW1lbnRzOgoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluOiAldHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCQkJZGlzYWJsZTogJWZlYXR1cmVUb2dnbGVzLmRpc2FibGVVbnJlYWNoYWJsZUJyYW5jaGVzUnVsZXMlCgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW5UaXA6ICV0aXBzLnRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5ydWxlcy5ydWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENvbXBhcmlzb25cVW5yZWFjaGFibGVUZXJuYXJ5RWxzZUJyYW5jaFJ1bGUKCQlhcmd1bWVudHM6CgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW46ICV0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoJCQlkaXNhYmxlOiAlZmVhdHVyZVRvZ2dsZXMuZGlzYWJsZVVucmVhY2hhYmxlQnJhbmNoZXNSdWxlcyUKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpblRpcDogJXRpcHMudHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ29tcGFyaXNvblxXaGlsZUxvb3BBbHdheXNGYWxzZUNvbmRpdGlvblJ1bGUKCQlhcmd1bWVudHM6CgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW46ICV0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluVGlwOiAldGlwcy50cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xDb21wYXJpc29uXFdoaWxlTG9vcEFsd2F5c1RydWVDb25kaXRpb25SdWxlCgkJYXJndW1lbnRzOgoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluOiAldHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpblRpcDogJXRpcHMudHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcTWV0aG9kc1xDYWxsVG9Db25zdHJ1Y3RvclN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUKCQlhcmd1bWVudHM6CgkJCXJlcG9ydE5vQ29uc3RydWN0b3I6ICVmZWF0dXJlVG9nZ2xlcy5wdXJlJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xUb29XaWRlVHlwZWhpbnRzXFRvb1dpZGVNZXRob2RSZXR1cm5UeXBlaGludFJ1bGUKCQlhcmd1bWVudHM6CgkJCWNoZWNrUHJvdGVjdGVkQW5kUHVibGljTWV0aG9kczogJWNoZWNrVG9vV2lkZVJldHVyblR5cGVzSW5Qcm90ZWN0ZWRBbmRQdWJsaWNNZXRob2RzJQoJCQlhbHdheXNDaGVja0ZpbmFsOiAlZmVhdHVyZVRvZ2dsZXMuYWx3YXlzQ2hlY2tUb29XaWRlUmV0dXJuVHlwZUZpbmFsTWV0aG9kcyUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcUHJvcGVydGllc1xOdWxsc2FmZVByb3BlcnR5RmV0Y2hSdWxlCgkJdGFnczoKCQkJLSBwaHBzdGFuLnJ1bGVzLnJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcVHJhaXRzXFRyYWl0RGVjbGFyYXRpb25Db2xsZWN0b3IKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcVHJhaXRzXFRyYWl0VXNlQ29sbGVjdG9yCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFRyYWl0c1xOb3RBbmFseXNlZFRyYWl0UnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xFeGNlcHRpb25zXENhdGNoV2l0aFVudGhyb3duRXhjZXB0aW9uUnVsZQoJCWFyZ3VtZW50czoKCQkJZXhjZXB0aW9uVHlwZVJlc29sdmVyOiBAZXhjZXB0aW9uVHlwZVJlc29sdmVyCgkJCXJlcG9ydFVuY2hlY2tlZEV4Y2VwdGlvbkRlYWRDYXRjaDogJWV4Y2VwdGlvbnMucmVwb3J0VW5jaGVja2VkRXhjZXB0aW9uRGVhZENhdGNoJQoKCQl0YWdzOgoJCQktIHBocHN0YW4ucnVsZXMucnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xUb29XaWRlVHlwZWhpbnRzXFRvb1dpZGVGdW5jdGlvblBhcmFtZXRlck91dFR5cGVSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFRvb1dpZGVUeXBlaGludHNcVG9vV2lkZU1ldGhvZFBhcmFtZXRlck91dFR5cGVSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFRvb1dpZGVUeXBlaGludHNcVG9vV2lkZVByb3BlcnR5VHlwZVJ1bGUKCnBhcmFtZXRlcnM6CgljaGVja1RoaXNPbmx5OiBmYWxzZQoJY2hlY2tDbGFzc0Nhc2VTZW5zaXRpdml0eTogdHJ1ZQoJY2hlY2tHZW5lcmljQ2xhc3NJbk5vbkdlbmVyaWNPYmplY3RUeXBlOiB0cnVlCgljaGVja01pc3NpbmdJdGVyYWJsZVZhbHVlVHlwZTogdHJ1ZQoJY2hlY2tNaXNzaW5nVHlwZWhpbnRzOiB0cnVlCgljaGVja01pc3NpbmdDYWxsYWJsZVNpZ25hdHVyZTogZmFsc2UKCV9fdmFsaWRhdGU6IGZhbHNlCgpzZXJ2aWNlczoKCS0KCQljbGFzczogUEhQU3RhblxQaHBEb2NcU3R1YlNvdXJjZUxvY2F0b3JGYWN0b3J5CgkJYXJndW1lbnRzOgoJCQlwaHA4UGFyc2VyOiBAcGhwOFBocFBhcnNlcgoKCW5vZGVTY29wZVJlc29sdmVyQ2xhc3NSZWZsZWN0b3I6CgkJZmFjdG9yeTogQHN0dWJSZWZsZWN0b3IKCglzdHViQmV0dGVyUmVmbGVjdGlvblByb3ZpZGVyOgoJCWNsYXNzOiBQSFBTdGFuXFJlZmxlY3Rpb25cQmV0dGVyUmVmbGVjdGlvblxCZXR0ZXJSZWZsZWN0aW9uUHJvdmlkZXIKCQlhcmd1bWVudHM6CgkJCXJlZmxlY3RvcjogQHN0dWJSZWZsZWN0b3IKCQkJdW5pdmVyc2FsT2JqZWN0Q3JhdGVzQ2xhc3NlczogJXVuaXZlcnNhbE9iamVjdENyYXRlc0NsYXNzZXMlCgoJCWF1dG93aXJlZDogZmFsc2UKCglzdHViUmVmbGVjdG9yOgoJCWNsYXNzOiBQSFBTdGFuXEJldHRlclJlZmxlY3Rpb25cUmVmbGVjdG9yXERlZmF1bHRSZWZsZWN0b3IKCQlhcmd1bWVudHM6CgkJCXNvdXJjZUxvY2F0b3I6IEBzdHViU291cmNlTG9jYXRvcgoKCQlhdXRvd2lyZWQ6IGZhbHNlCgoJc3R1YlNvdXJjZUxvY2F0b3I6CgkJY2xhc3M6IFBIUFN0YW5cQmV0dGVyUmVmbGVjdGlvblxTb3VyY2VMb2NhdG9yXFR5cGVcU291cmNlTG9jYXRvcgoJCWZhY3Rvcnk6IEBQSFBTdGFuXFBocERvY1xTdHViU291cmNlTG9jYXRvckZhY3Rvcnk6OmNyZWF0ZSgpCgkJYXV0b3dpcmVkOiBmYWxzZQoKCXJlZmxlY3Rpb25Qcm92aWRlcjoKCQlmYWN0b3J5OiBAc3R1YkJldHRlclJlZmxlY3Rpb25Qcm92aWRlcgoJCWF1dG93aXJlZDoKCQkJLSBQSFBTdGFuXFJlZmxlY3Rpb25cUmVmbGVjdGlvblByb3ZpZGVyCgpwYXJhbWV0ZXJzU2NoZW1hOgoJYm9vdHN0cmFwRmlsZXM6IGxpc3RPZihzdHJpbmcoKSkKCWV4Y2x1ZGVzX2FuYWx5c2U6IGxpc3RPZihzdHJpbmcoKSkKCWV4Y2x1ZGVQYXRoczogc2NoZW1hKGFueU9mKHN0cnVjdHVyZSh7YW5hbHlzZTogbGlzdE9mKHN0cmluZygpKX0pLCBzdHJ1Y3R1cmUoe2FuYWx5c2VBbmRTY2FuOiBsaXN0T2Yoc3RyaW5nKCkpfSksIHN0cnVjdHVyZSh7YW5hbHlzZTogbGlzdE9mKHN0cmluZygpKSwgYW5hbHlzZUFuZFNjYW46IGxpc3RPZihzdHJpbmcoKSl9KSksIG51bGxhYmxlKCkpCglsZXZlbDogc2NoZW1hKGFueU9mKGludCgpLCBzdHJpbmcoKSksIG51bGxhYmxlKCkpCglwYXRoczogbGlzdE9mKHN0cmluZygpKQoJZXhjZXB0aW9uczogc3RydWN0dXJlKHtpbXBsaWNpdFRocm93czogYm9vbCgpLCByZXBvcnRVbmNoZWNrZWRFeGNlcHRpb25EZWFkQ2F0Y2g6IGJvb2woKSwgdW5jaGVja2VkRXhjZXB0aW9uUmVnZXhlczogbGlzdE9mKHN0cmluZygpKSwgdW5jaGVja2VkRXhjZXB0aW9uQ2xhc3NlczogbGlzdE9mKHN0cmluZygpKSwgY2hlY2tlZEV4Y2VwdGlvblJlZ2V4ZXM6IGxpc3RPZihzdHJpbmcoKSksIGNoZWNrZWRFeGNlcHRpb25DbGFzc2VzOiBsaXN0T2Yoc3RyaW5nKCkpLCBjaGVjazogc3RydWN0dXJlKHttaXNzaW5nQ2hlY2tlZEV4Y2VwdGlvbkluVGhyb3dzOiBib29sKCksIHRvb1dpZGVUaHJvd1R5cGU6IGJvb2woKX0pfSkKCWZlYXR1cmVUb2dnbGVzOiBzdHJ1Y3R1cmUoe2JsZWVkaW5nRWRnZTogYm9vbCgpLCBkaXNhYmxlUnVudGltZVJlZmxlY3Rpb25Qcm92aWRlcjogYm9vbCgpLCBza2lwQ2hlY2tHZW5lcmljQ2xhc3NlczogbGlzdE9mKHN0cmluZygpKSwgZXhwbGljaXRNaXhlZEluVW5rbm93bkdlbmVyaWNOZXc6IGJvb2woKSwgZXhwbGljaXRNaXhlZEZvckdsb2JhbFZhcmlhYmxlczogYm9vbCgpLCBleHBsaWNpdE1peGVkVmlhSXNBcnJheTogYm9vbCgpLCBhcnJheUZpbHRlcjogYm9vbCgpLCBhcnJheVVucGFja2luZzogYm9vbCgpLCBhcnJheVZhbHVlczogYm9vbCgpLCBub2RlQ29ubmVjdGluZ1Zpc2l0b3JDb21wYXRpYmlsaXR5OiBib29sKCksIG5vZGVDb25uZWN0aW5nVmlzaXRvclJ1bGU6IGJvb2woKSwgaWxsZWdhbENvbnN0cnVjdG9yTWV0aG9kQ2FsbDogYm9vbCgpLCBkaXNhYmxlQ2hlY2tNaXNzaW5nSXRlcmFibGVWYWx1ZVR5cGU6IGJvb2woKSwgc3RyaWN0VW5uZWNlc3NhcnlOdWxsc2FmZVByb3BlcnR5RmV0Y2g6IGJvb2woKSwgbG9vc2VDb21wYXJpc29uOiBib29sKCksIGNvbnNpc3RlbnRDb25zdHJ1Y3RvcjogYm9vbCgpLCBjaGVja1VucmVzb2x2YWJsZVBhcmFtZXRlclR5cGVzOiBib29sKCksIHJlYWRPbmx5QnlQaHBEb2M6IGJvb2woKSwgcGhwRG9jUGFyc2VyUmVxdWlyZVdoaXRlc3BhY2VCZWZvcmVEZXNjcmlwdGlvbjogYm9vbCgpLCBwaHBEb2NQYXJzZXJJbmNsdWRlTGluZXM6IGJvb2woKSwgZW5hYmxlSWdub3JlRXJyb3JzV2l0aGluUGhwRG9jczogYm9vbCgpLCBydW50aW1lUmVmbGVjdGlvblJ1bGVzOiBib29sKCksIG5vdEFuYWx5c2VkVHJhaXQ6IGJvb2woKSwgY3VybFNldE9wdFR5cGVzOiBib29sKCksIGxpc3RUeXBlOiBib29sKCksIGFic3RyYWN0VHJhaXRNZXRob2Q6IGJvb2woKSwgbWlzc2luZ01hZ2ljU2VyaWFsaXphdGlvblJ1bGU6IGJvb2woKSwgbnVsbENvbnRleHRGb3JWb2lkUmV0dXJuaW5nRnVuY3Rpb25zOiBib29sKCksIHVuZXNjYXBlU3RyaW5nczogYm9vbCgpLCBhbHdheXNDaGVja1Rvb1dpZGVSZXR1cm5UeXBlRmluYWxNZXRob2RzOiBib29sKCksIGR1cGxpY2F0ZVN0dWJzOiBib29sKCksIGxvZ2ljYWxYb3I6IGJvb2woKSwgYmV0dGVyTm9vcDogYm9vbCgpLCBpbnZhcmlhbmNlQ29tcG9zaXRpb246IGJvb2woKSwgYWx3YXlzVHJ1ZUFsd2F5c1JlcG9ydGVkOiBib29sKCksIGRpc2FibGVVbnJlYWNoYWJsZUJyYW5jaGVzUnVsZXM6IGJvb2woKSwgdmFyVGFnVHlwZTogYm9vbCgpLCBjbG9zdXJlRGVmYXVsdFBhcmFtZXRlclR5cGVSdWxlOiBib29sKCksIG5ld1J1bGVMZXZlbEhlbHBlcjogYm9vbCgpLCBpbnN0YW5jZW9mVHlwZTogYm9vbCgpLCBwYXJhbU91dFZhcmlhbmNlOiBib29sKCksIGFsbEludmFsaWRQaHBEb2NzOiBib29sKCksIHN0cmljdFN0YXRpY01ldGhvZFRlbXBsYXRlVHlwZVZhcmlhbmNlOiBib29sKCksIHByb3BlcnR5VmFyaWFuY2U6IGJvb2woKSwgZ2VuZXJpY1Byb3RvdHlwZU1lc3NhZ2U6IGJvb2woKSwgc3RyaWN0ZXJGdW5jdGlvbk1hcDogYm9vbCgpLCBpbnZhbGlkUGhwRG9jVGFnTGluZTogYm9vbCgpLCBkZXRlY3REZWFkVHlwZUluTXVsdGlDYXRjaDogYm9vbCgpLCB6ZXJvRmlsZXM6IGJvb2woKSwgcHJvamVjdFNlcnZpY2VzTm90SW5BbmFseXNlZFBhdGhzOiBib29sKCksIGNhbGxVc2VyRnVuYzogYm9vbCgpLCBmaW5hbEJ5UGhwRG9jOiBib29sKCksIG1hZ2ljQ29uc3RhbnRPdXRPZkNvbnRleHQ6IGJvb2woKSwgcGFyYW1PdXRUeXBlOiBib29sKCksIHB1cmU6IGJvb2woKSwgY2hlY2tQYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nRnVuY3Rpb25zOiBib29sKCksIHVzZWxlc3NSZXR1cm5WYWx1ZTogYm9vbCgpLCBwcmludGZBcnJheVBhcmFtZXRlcnM6IGJvb2woKSwgcHJlY2lzZU1pc3NpbmdSZXR1cm46IGJvb2woKSwgdmFsaWRhdGVQcmVnUXVvdGU6IGJvb2woKSwgbm9JbXBsaWNpdFdpbGRjYXJkOiBib29sKCksIG5hcnJvd1ByZWdNYXRjaGVzOiBib29sKCksIHRvb1dpZGVQcm9wZXJ0eVR5cGU6IGJvb2woKSwgZXhwbGljaXRUaHJvdzogYm9vbCgpLCBhYnNlbnRUeXBlQ2hlY2tzOiBib29sKCksIHJlcXVpcmVGaWxlRXhpc3RzOiBib29sKCl9KQoJZmlsZUV4dGVuc2lvbnM6IGxpc3RPZihzdHJpbmcoKSkKCWNoZWNrQWR2YW5jZWRJc3NldDogYm9vbCgpCgljaGVja0Fsd2F5c1RydWVDaGVja1R5cGVGdW5jdGlvbkNhbGw6IGJvb2woKQoJY2hlY2tBbHdheXNUcnVlSW5zdGFuY2VvZjogYm9vbCgpCgljaGVja0Fsd2F5c1RydWVTdHJpY3RDb21wYXJpc29uOiBib29sKCkKCWNoZWNrQWx3YXlzVHJ1ZUxvb3NlQ29tcGFyaXNvbjogYm9vbCgpCglyZXBvcnRBbHdheXNUcnVlSW5MYXN0Q29uZGl0aW9uOiBib29sKCkKCWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHk6IGJvb2woKQoJY2hlY2tFeHBsaWNpdE1peGVkOiBib29sKCkKCWNoZWNrSW1wbGljaXRNaXhlZDogYm9vbCgpCgljaGVja0Z1bmN0aW9uQXJndW1lbnRUeXBlczogYm9vbCgpCgljaGVja0Z1bmN0aW9uTmFtZUNhc2U6IGJvb2woKQoJY2hlY2tHZW5lcmljQ2xhc3NJbk5vbkdlbmVyaWNPYmplY3RUeXBlOiBib29sKCkKCWNoZWNrSW50ZXJuYWxDbGFzc0Nhc2VTZW5zaXRpdml0eTogYm9vbCgpCgljaGVja01pc3NpbmdJdGVyYWJsZVZhbHVlVHlwZTogYm9vbCgpCgljaGVja01pc3NpbmdDYWxsYWJsZVNpZ25hdHVyZTogYm9vbCgpCgljaGVja01pc3NpbmdWYXJUYWdUeXBlaGludDogYm9vbCgpCgljaGVja0FyZ3VtZW50c1Bhc3NlZEJ5UmVmZXJlbmNlOiBib29sKCkKCWNoZWNrTWF5YmVVbmRlZmluZWRWYXJpYWJsZXM6IGJvb2woKQoJY2hlY2tOdWxsYWJsZXM6IGJvb2woKQoJY2hlY2tUaGlzT25seTogYm9vbCgpCgljaGVja1VuaW9uVHlwZXM6IGJvb2woKQoJY2hlY2tCZW5ldm9sZW50VW5pb25UeXBlczogYm9vbCgpCgljaGVja0V4cGxpY2l0TWl4ZWRNaXNzaW5nUmV0dXJuOiBib29sKCkKCWNoZWNrUGhwRG9jTWlzc2luZ1JldHVybjogYm9vbCgpCgljaGVja1BocERvY01ldGhvZFNpZ25hdHVyZXM6IGJvb2woKQoJY2hlY2tFeHRyYUFyZ3VtZW50czogYm9vbCgpCgljaGVja01pc3NpbmdUeXBlaGludHM6IGJvb2woKQoJY2hlY2tUb29XaWRlUmV0dXJuVHlwZXNJblByb3RlY3RlZEFuZFB1YmxpY01ldGhvZHM6IGJvb2woKQoJY2hlY2tVbmluaXRpYWxpemVkUHJvcGVydGllczogYm9vbCgpCgljaGVja0R5bmFtaWNQcm9wZXJ0aWVzOiBib29sKCkKCWRlcHJlY2F0aW9uUnVsZXNJbnN0YWxsZWQ6IGJvb2woKQoJaW5mZXJQcml2YXRlUHJvcGVydHlUeXBlRnJvbUNvbnN0cnVjdG9yOiBib29sKCkKCXRpcHM6IHN0cnVjdHVyZSh7dHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogYm9vbCgpfSkKCXRpcHNPZlRoZURheTogYm9vbCgpCglyZXBvcnRNYXliZXM6IGJvb2woKQoJcmVwb3J0TWF5YmVzSW5NZXRob2RTaWduYXR1cmVzOiBib29sKCkKCXJlcG9ydE1heWJlc0luUHJvcGVydHlQaHBEb2NUeXBlczogYm9vbCgpCglyZXBvcnRTdGF0aWNNZXRob2RTaWduYXR1cmVzOiBib29sKCkKCXJlcG9ydFdyb25nUGhwRG9jVHlwZUluVmFyVGFnOiBib29sKCkKCXJlcG9ydEFueVR5cGVXaWRlbmluZ0luVmFyVGFnOiBib29sKCkKCXJlcG9ydFBvc3NpYmx5Tm9uZXhpc3RlbnRHZW5lcmFsQXJyYXlPZmZzZXQ6IGJvb2woKQoJcmVwb3J0UG9zc2libHlOb25leGlzdGVudENvbnN0YW50QXJyYXlPZmZzZXQ6IGJvb2woKQoJY2hlY2tNaXNzaW5nT3ZlcnJpZGVNZXRob2RBdHRyaWJ1dGU6IGJvb2woKQoJcGFyYWxsZWw6IHN0cnVjdHVyZSh7am9iU2l6ZTogaW50KCksIHByb2Nlc3NUaW1lb3V0OiBmbG9hdCgpLCBtYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXM6IGludCgpLCBtaW5pbXVtTnVtYmVyT2ZKb2JzUGVyUHJvY2VzczogaW50KCksIGJ1ZmZlcjogaW50KCl9KQoJcGhwVmVyc2lvbjogc2NoZW1hKGFueU9mKHNjaGVtYShpbnQoKSwgbWluKDcwMTAwKSwgbWF4KDgwNDk5KSkpLCBudWxsYWJsZSgpKQoJcG9sbHV0ZVNjb3BlV2l0aExvb3BJbml0aWFsQXNzaWdubWVudHM6IGJvb2woKQoJcG9sbHV0ZVNjb3BlV2l0aEFsd2F5c0l0ZXJhYmxlRm9yZWFjaDogYm9vbCgpCglwcm9wZXJ0eUFsd2F5c1dyaXR0ZW5UYWdzOiBsaXN0T2Yoc3RyaW5nKCkpCglwcm9wZXJ0eUFsd2F5c1JlYWRUYWdzOiBsaXN0T2Yoc3RyaW5nKCkpCglhZGRpdGlvbmFsQ29uc3RydWN0b3JzOiBsaXN0T2Yoc3RyaW5nKCkpCgl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluOiBib29sKCkKCXVzZVBhdGhDb25zdGFudHNBc0NvbnN0YW50U3RyaW5nOiBib29sKCkKCXJlbWVtYmVyUG9zc2libHlJbXB1cmVGdW5jdGlvblZhbHVlczogYm9vbCgpCglyZXBvcnRNYWdpY01ldGhvZHM6IGJvb2woKQoJcmVwb3J0TWFnaWNQcm9wZXJ0aWVzOiBib29sKCkKCWlnbm9yZUVycm9yczogbGlzdE9mKGFueU9mKHN0cmluZygpLCBzdHJ1Y3R1cmUoez9tZXNzYWdlczogbGlzdE9mKHN0cmluZygpKSwgP2lkZW50aWZpZXI6IHN0cmluZygpLCA/cGF0aDogc3RyaW5nKCksID9yZXBvcnRVbm1hdGNoZWQ6IGJvb2woKX0pLCBzdHJ1Y3R1cmUoez9tZXNzYWdlOiBzdHJpbmcoKSwgP2lkZW50aWZpZXI6IHN0cmluZygpLCA/cGF0aDogc3RyaW5nKCksID9yZXBvcnRVbm1hdGNoZWQ6IGJvb2woKX0pLCBzdHJ1Y3R1cmUoez9tZXNzYWdlOiBzdHJpbmcoKSwgY291bnQ6IGludCgpLCBwYXRoOiBzdHJpbmcoKSwgP2lkZW50aWZpZXI6IHN0cmluZygpLCA/cmVwb3J0VW5tYXRjaGVkOiBib29sKCl9KSwgc3RydWN0dXJlKHs/bWVzc2FnZTogc3RyaW5nKCksIHBhdGhzOiBsaXN0T2Yoc3RyaW5nKCkpLCA/aWRlbnRpZmllcjogc3RyaW5nKCksID9yZXBvcnRVbm1hdGNoZWQ6IGJvb2woKX0pLCBzdHJ1Y3R1cmUoez9tZXNzYWdlczogbGlzdE9mKHN0cmluZygpKSwgcGF0aHM6IGxpc3RPZihzdHJpbmcoKSksID9pZGVudGlmaWVyOiBzdHJpbmcoKSwgP3JlcG9ydFVubWF0Y2hlZDogYm9vbCgpfSkpKQoJaW50ZXJuYWxFcnJvcnNDb3VudExpbWl0OiBpbnQoKQoJY2FjaGU6IHN0cnVjdHVyZSh7bm9kZXNCeUZpbGVDb3VudE1heDogaW50KCksIG5vZGVzQnlTdHJpbmdDb3VudE1heDogaW50KCl9KQoJcmVwb3J0VW5tYXRjaGVkSWdub3JlZEVycm9yczogYm9vbCgpCglzY29wZUNsYXNzOiBzdHJpbmcoKQoJdHlwZUFsaWFzZXM6IGFycmF5T2Yoc3RyaW5nKCkpCgl1bml2ZXJzYWxPYmplY3RDcmF0ZXNDbGFzc2VzOiBsaXN0T2Yoc3RyaW5nKCkpCglzdHViRmlsZXM6IGxpc3RPZihzdHJpbmcoKSkKCWVhcmx5VGVybWluYXRpbmdNZXRob2RDYWxsczogYXJyYXlPZihsaXN0T2Yoc3RyaW5nKCkpKQoJZWFybHlUZXJtaW5hdGluZ0Z1bmN0aW9uQ2FsbHM6IGxpc3RPZihzdHJpbmcoKSkKCW1lbW9yeUxpbWl0RmlsZTogc3RyaW5nKCkKCXRlbXBSZXN1bHRDYWNoZVBhdGg6IHN0cmluZygpCglyZXN1bHRDYWNoZVBhdGg6IHN0cmluZygpCglyZXN1bHRDYWNoZUNoZWNrc1Byb2plY3RFeHRlbnNpb25GaWxlc0RlcGVuZGVuY2llczogYm9vbCgpCglzdGF0aWNSZWZsZWN0aW9uQ2xhc3NOYW1lUGF0dGVybnM6IGxpc3RPZihzdHJpbmcoKSkKCWR5bmFtaWNDb25zdGFudE5hbWVzOiBsaXN0T2Yoc3RyaW5nKCkpCgljdXN0b21SdWxlc2V0VXNlZDogc2NoZW1hKGJvb2woKSwgbnVsbGFibGUoKSkKCXJvb3REaXI6IHN0cmluZygpCgl0bXBEaXI6IHN0cmluZygpCgljdXJyZW50V29ya2luZ0RpcmVjdG9yeTogc3RyaW5nKCkKCWNsaUFyZ3VtZW50c1ZhcmlhYmxlc1JlZ2lzdGVyZWQ6IGJvb2woKQoJbWl4aW5FeGNsdWRlQ2xhc3NlczogbGlzdE9mKHN0cmluZygpKQoJc2NhbkZpbGVzOiBsaXN0T2Yoc3RyaW5nKCkpCglzY2FuRGlyZWN0b3JpZXM6IGxpc3RPZihzdHJpbmcoKSkKCWZpeGVyVG1wRGlyOiBzdHJpbmcoKQoJZWRpdG9yVXJsOiBzY2hlbWEoc3RyaW5nKCksIG51bGxhYmxlKCkpCgllZGl0b3JVcmxUaXRsZTogc2NoZW1hKHN0cmluZygpLCBudWxsYWJsZSgpKQoJZXJyb3JGb3JtYXQ6IHNjaGVtYShzdHJpbmcoKSwgbnVsbGFibGUoKSkKCXBybzogc3RydWN0dXJlKHtkbnNTZXJ2ZXJzOiBzY2hlbWEobGlzdE9mKHN0cmluZygpKSwgbWluKDEpKSwgdG1wRGlyOiBzdHJpbmcoKX0pCgllbnY6IGFycmF5T2Yoc3RyaW5nKCksIGFueU9mKGludCgpLCBzdHJpbmcoKSkpCglzeXNHZXRUZW1wRGlyOiBzdHJpbmcoKQoJc291cmNlTG9jYXRvclBsYXlncm91bmRNb2RlOiBib29sKCkKCWRlYnVnTW9kZTogYm9vbCgpCglwcm9kdWN0aW9uTW9kZTogYm9vbCgpCgl0ZW1wRGlyOiBzdHJpbmcoKQoJX192YWxpZGF0ZTogYm9vbCgpCglhZGRpdGlvbmFsQ29uZmlnRmlsZXM6IGFycmF5T2Yoc3RyaW5nKCkpCglnZW5lcmF0ZUJhc2VsaW5lRmlsZTogc2NoZW1hKHN0cmluZygpLCBudWxsYWJsZSgpKQoJYW5hbHlzZWRQYXRoczogbGlzdE9mKHN0cmluZygpKQoJYWxsQ29uZmlnRmlsZXM6IGxpc3RPZihzdHJpbmcoKSkKCWNvbXBvc2VyQXV0b2xvYWRlclByb2plY3RQYXRoczogbGlzdE9mKHN0cmluZygpKQoJYW5hbHlzZWRQYXRoc0Zyb21Db25maWc6IGxpc3RPZihzdHJpbmcoKSkKCXVzZWRMZXZlbDogc3RyaW5nKCkKCWNsaUF1dG9sb2FkRmlsZTogc2NoZW1hKHN0cmluZygpLCBudWxsYWJsZSgpKQoJc2luZ2xlUmVmbGVjdGlvbkZpbGU6IHNjaGVtYShzdHJpbmcoKSwgbnVsbGFibGUoKSkKCXNpbmdsZVJlZmxlY3Rpb25JbnN0ZWFkT2ZGaWxlOiBzY2hlbWEoc3RyaW5nKCksIG51bGxhYmxlKCkpCgppbmNsdWRlczoKCS0gcGFyYW1ldGVyc1NjaGVtYS5uZW9uCgpwYXJhbWV0ZXJzOgoJYm9vdHN0cmFwRmlsZXM6CgkJLSAuLi9zdHVicy9ydW50aW1lL1JlZmxlY3Rpb25VbmlvblR5cGUucGhwCgkJLSAuLi9zdHVicy9ydW50aW1lL1JlZmxlY3Rpb25BdHRyaWJ1dGUucGhwCgkJLSAuLi9zdHVicy9ydW50aW1lL0F0dHJpYnV0ZS5waHAKCQktIC4uL3N0dWJzL3J1bnRpbWUvUmVmbGVjdGlvbkludGVyc2VjdGlvblR5cGUucGhwCgoJZXhjbHVkZXNfYW5hbHlzZTogW10KCWV4Y2x1ZGVQYXRoczogbnVsbAoJbGV2ZWw6IG51bGwKCXBhdGhzOiBbXQoJZXhjZXB0aW9uczoKCQlpbXBsaWNpdFRocm93czogdHJ1ZQoJCXJlcG9ydFVuY2hlY2tlZEV4Y2VwdGlvbkRlYWRDYXRjaDogdHJ1ZQoJCXVuY2hlY2tlZEV4Y2VwdGlvblJlZ2V4ZXM6IFtdCgkJdW5jaGVja2VkRXhjZXB0aW9uQ2xhc3NlczogW10KCQljaGVja2VkRXhjZXB0aW9uUmVnZXhlczogW10KCQljaGVja2VkRXhjZXB0aW9uQ2xhc3NlczogW10KCQljaGVjazoKCQkJbWlzc2luZ0NoZWNrZWRFeGNlcHRpb25JblRocm93czogZmFsc2UKCQkJdG9vV2lkZVRocm93VHlwZTogZmFsc2UKCglmZWF0dXJlVG9nZ2xlczoKCQlibGVlZGluZ0VkZ2U6IGZhbHNlCgkJZGlzYWJsZVJ1bnRpbWVSZWZsZWN0aW9uUHJvdmlkZXI6IHRydWUKCQlza2lwQ2hlY2tHZW5lcmljQ2xhc3NlczoKCQkJLSBEYXRlUGVyaW9kCgkJCS0gQ2FsbGJhY2tGaWx0ZXJJdGVyYXRvcgoJCQktIEZpbHRlckl0ZXJhdG9yCgkJCS0gUmVjdXJzaXZlQ2FsbGJhY2tGaWx0ZXJJdGVyYXRvcgoJCQktIEFwcGVuZEl0ZXJhdG9yCgkJCS0gTm9SZXdpbmRJdGVyYXRvcgoJCQktIExpbWl0SXRlcmF0b3IKCQkJLSBJbmZpbml0ZUl0ZXJhdG9yCgkJCS0gQ2FjaGluZ0l0ZXJhdG9yCgkJCS0gUmVnZXhJdGVyYXRvcgoJCQktIFJlZmxlY3Rpb25FbnVtCgoJCWV4cGxpY2l0TWl4ZWRJblVua25vd25HZW5lcmljTmV3OiBmYWxzZQoJCWV4cGxpY2l0TWl4ZWRGb3JHbG9iYWxWYXJpYWJsZXM6IGZhbHNlCgkJZXhwbGljaXRNaXhlZFZpYUlzQXJyYXk6IGZhbHNlCgkJYXJyYXlGaWx0ZXI6IGZhbHNlCgkJYXJyYXlVbnBhY2tpbmc6IGZhbHNlCgkJYXJyYXlWYWx1ZXM6IGZhbHNlCgkJbm9kZUNvbm5lY3RpbmdWaXNpdG9yQ29tcGF0aWJpbGl0eTogdHJ1ZQoJCW5vZGVDb25uZWN0aW5nVmlzaXRvclJ1bGU6IGZhbHNlCgkJaWxsZWdhbENvbnN0cnVjdG9yTWV0aG9kQ2FsbDogZmFsc2UKCQlkaXNhYmxlQ2hlY2tNaXNzaW5nSXRlcmFibGVWYWx1ZVR5cGU6IGZhbHNlCgkJc3RyaWN0VW5uZWNlc3NhcnlOdWxsc2FmZVByb3BlcnR5RmV0Y2g6IGZhbHNlCgkJbG9vc2VDb21wYXJpc29uOiBmYWxzZQoJCWNvbnNpc3RlbnRDb25zdHJ1Y3RvcjogZmFsc2UKCQljaGVja1VucmVzb2x2YWJsZVBhcmFtZXRlclR5cGVzOiBmYWxzZQoJCXJlYWRPbmx5QnlQaHBEb2M6IGZhbHNlCgkJcGhwRG9jUGFyc2VyUmVxdWlyZVdoaXRlc3BhY2VCZWZvcmVEZXNjcmlwdGlvbjogZmFsc2UKCQlwaHBEb2NQYXJzZXJJbmNsdWRlTGluZXM6IGZhbHNlCgkJZW5hYmxlSWdub3JlRXJyb3JzV2l0aGluUGhwRG9jczogZmFsc2UKCQlydW50aW1lUmVmbGVjdGlvblJ1bGVzOiBmYWxzZQoJCW5vdEFuYWx5c2VkVHJhaXQ6IGZhbHNlCgkJY3VybFNldE9wdFR5cGVzOiBmYWxzZQoJCWxpc3RUeXBlOiBmYWxzZQoJCWFic3RyYWN0VHJhaXRNZXRob2Q6IGZhbHNlCgkJbWlzc2luZ01hZ2ljU2VyaWFsaXphdGlvblJ1bGU6IGZhbHNlCgkJbnVsbENvbnRleHRGb3JWb2lkUmV0dXJuaW5nRnVuY3Rpb25zOiBmYWxzZQoJCXVuZXNjYXBlU3RyaW5nczogZmFsc2UKCQlhbHdheXNDaGVja1Rvb1dpZGVSZXR1cm5UeXBlRmluYWxNZXRob2RzOiBmYWxzZQoJCWR1cGxpY2F0ZVN0dWJzOiBmYWxzZQoJCWxvZ2ljYWxYb3I6IGZhbHNlCgkJYmV0dGVyTm9vcDogZmFsc2UKCQlpbnZhcmlhbmNlQ29tcG9zaXRpb246IGZhbHNlCgkJYWx3YXlzVHJ1ZUFsd2F5c1JlcG9ydGVkOiBmYWxzZQoJCWRpc2FibGVVbnJlYWNoYWJsZUJyYW5jaGVzUnVsZXM6IGZhbHNlCgkJdmFyVGFnVHlwZTogZmFsc2UKCQljbG9zdXJlRGVmYXVsdFBhcmFtZXRlclR5cGVSdWxlOiBmYWxzZQoJCW5ld1J1bGVMZXZlbEhlbHBlcjogZmFsc2UKCQlpbnN0YW5jZW9mVHlwZTogZmFsc2UKCQlwYXJhbU91dFZhcmlhbmNlOiBmYWxzZQoJCWFsbEludmFsaWRQaHBEb2NzOiBmYWxzZQoJCXN0cmljdFN0YXRpY01ldGhvZFRlbXBsYXRlVHlwZVZhcmlhbmNlOiBmYWxzZQoJCXByb3BlcnR5VmFyaWFuY2U6IGZhbHNlCgkJZ2VuZXJpY1Byb3RvdHlwZU1lc3NhZ2U6IGZhbHNlCgkJc3RyaWN0ZXJGdW5jdGlvbk1hcDogZmFsc2UKCQlpbnZhbGlkUGhwRG9jVGFnTGluZTogZmFsc2UKCQlkZXRlY3REZWFkVHlwZUluTXVsdGlDYXRjaDogZmFsc2UKCQl6ZXJvRmlsZXM6IGZhbHNlCgkJcHJvamVjdFNlcnZpY2VzTm90SW5BbmFseXNlZFBhdGhzOiBmYWxzZQoJCWNhbGxVc2VyRnVuYzogZmFsc2UKCQlmaW5hbEJ5UGhwRG9jOiBmYWxzZQoJCW1hZ2ljQ29uc3RhbnRPdXRPZkNvbnRleHQ6IGZhbHNlCgkJcGFyYW1PdXRUeXBlOiBmYWxzZQoJCXB1cmU6IGZhbHNlCgkJY2hlY2tQYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nRnVuY3Rpb25zOiBmYWxzZQoJCXVzZWxlc3NSZXR1cm5WYWx1ZTogZmFsc2UKCQlwcmludGZBcnJheVBhcmFtZXRlcnM6IGZhbHNlCgkJcHJlY2lzZU1pc3NpbmdSZXR1cm46IGZhbHNlCgkJdmFsaWRhdGVQcmVnUXVvdGU6IGZhbHNlCgkJbm9JbXBsaWNpdFdpbGRjYXJkOiBmYWxzZQoJCXJlcXVpcmVGaWxlRXhpc3RzOiBmYWxzZQoJCW5hcnJvd1ByZWdNYXRjaGVzOiB0cnVlCgkJdG9vV2lkZVByb3BlcnR5VHlwZTogZmFsc2UKCQlleHBsaWNpdFRocm93OiBmYWxzZQoJCWFic2VudFR5cGVDaGVja3M6IGZhbHNlCgoJZmlsZUV4dGVuc2lvbnM6CgkJLSBwaHAKCgljaGVja0FkdmFuY2VkSXNzZXQ6IGZhbHNlCgljaGVja0Fsd2F5c1RydWVDaGVja1R5cGVGdW5jdGlvbkNhbGw6ICVmZWF0dXJlVG9nZ2xlcy5hbHdheXNUcnVlQWx3YXlzUmVwb3J0ZWQlCgljaGVja0Fsd2F5c1RydWVJbnN0YW5jZW9mOiAlZmVhdHVyZVRvZ2dsZXMuYWx3YXlzVHJ1ZUFsd2F5c1JlcG9ydGVkJQoJY2hlY2tBbHdheXNUcnVlU3RyaWN0Q29tcGFyaXNvbjogJWZlYXR1cmVUb2dnbGVzLmFsd2F5c1RydWVBbHdheXNSZXBvcnRlZCUKCWNoZWNrQWx3YXlzVHJ1ZUxvb3NlQ29tcGFyaXNvbjogJWZlYXR1cmVUb2dnbGVzLmFsd2F5c1RydWVBbHdheXNSZXBvcnRlZCUKCXJlcG9ydEFsd2F5c1RydWVJbkxhc3RDb25kaXRpb246IGZhbHNlCgljaGVja0NsYXNzQ2FzZVNlbnNpdGl2aXR5OiBmYWxzZQoJY2hlY2tFeHBsaWNpdE1peGVkOiBmYWxzZQoJY2hlY2tJbXBsaWNpdE1peGVkOiBmYWxzZQoJY2hlY2tGdW5jdGlvbkFyZ3VtZW50VHlwZXM6IGZhbHNlCgljaGVja0Z1bmN0aW9uTmFtZUNhc2U6IGZhbHNlCgljaGVja0dlbmVyaWNDbGFzc0luTm9uR2VuZXJpY09iamVjdFR5cGU6IGZhbHNlCgljaGVja0ludGVybmFsQ2xhc3NDYXNlU2Vuc2l0aXZpdHk6IGZhbHNlCgljaGVja01pc3NpbmdJdGVyYWJsZVZhbHVlVHlwZTogZmFsc2UKCWNoZWNrTWlzc2luZ0NhbGxhYmxlU2lnbmF0dXJlOiBmYWxzZQoJY2hlY2tNaXNzaW5nVmFyVGFnVHlwZWhpbnQ6IGZhbHNlCgljaGVja0FyZ3VtZW50c1Bhc3NlZEJ5UmVmZXJlbmNlOiBmYWxzZQoJY2hlY2tNYXliZVVuZGVmaW5lZFZhcmlhYmxlczogZmFsc2UKCWNoZWNrTnVsbGFibGVzOiBmYWxzZQoJY2hlY2tUaGlzT25seTogdHJ1ZQoJY2hlY2tVbmlvblR5cGVzOiBmYWxzZQoJY2hlY2tCZW5ldm9sZW50VW5pb25UeXBlczogZmFsc2UKCWNoZWNrRXhwbGljaXRNaXhlZE1pc3NpbmdSZXR1cm46IGZhbHNlCgljaGVja1BocERvY01pc3NpbmdSZXR1cm46IGZhbHNlCgljaGVja1BocERvY01ldGhvZFNpZ25hdHVyZXM6IGZhbHNlCgljaGVja0V4dHJhQXJndW1lbnRzOiBmYWxzZQoJY2hlY2tNaXNzaW5nVHlwZWhpbnRzOiBmYWxzZQoJY2hlY2tUb29XaWRlUmV0dXJuVHlwZXNJblByb3RlY3RlZEFuZFB1YmxpY01ldGhvZHM6IGZhbHNlCgljaGVja1VuaW5pdGlhbGl6ZWRQcm9wZXJ0aWVzOiBmYWxzZQoJY2hlY2tEeW5hbWljUHJvcGVydGllczogZmFsc2UKCWRlcHJlY2F0aW9uUnVsZXNJbnN0YWxsZWQ6IGZhbHNlCglpbmZlclByaXZhdGVQcm9wZXJ0eVR5cGVGcm9tQ29uc3RydWN0b3I6IGZhbHNlCglyZXBvcnRNYXliZXM6IGZhbHNlCglyZXBvcnRNYXliZXNJbk1ldGhvZFNpZ25hdHVyZXM6IGZhbHNlCglyZXBvcnRNYXliZXNJblByb3BlcnR5UGhwRG9jVHlwZXM6IGZhbHNlCglyZXBvcnRTdGF0aWNNZXRob2RTaWduYXR1cmVzOiBmYWxzZQoJcmVwb3J0V3JvbmdQaHBEb2NUeXBlSW5WYXJUYWc6IGZhbHNlCglyZXBvcnRBbnlUeXBlV2lkZW5pbmdJblZhclRhZzogZmFsc2UKCXJlcG9ydFBvc3NpYmx5Tm9uZXhpc3RlbnRHZW5lcmFsQXJyYXlPZmZzZXQ6IGZhbHNlCglyZXBvcnRQb3NzaWJseU5vbmV4aXN0ZW50Q29uc3RhbnRBcnJheU9mZnNldDogZmFsc2UKCWNoZWNrTWlzc2luZ092ZXJyaWRlTWV0aG9kQXR0cmlidXRlOiBmYWxzZQoJbWl4aW5FeGNsdWRlQ2xhc3NlczogW10KCXNjYW5GaWxlczogW10KCXNjYW5EaXJlY3RvcmllczogW10KCXBhcmFsbGVsOgoJCWpvYlNpemU6IDIwCgkJcHJvY2Vzc1RpbWVvdXQ6IDYwMC4wCgkJbWF4aW11bU51bWJlck9mUHJvY2Vzc2VzOiAzMgoJCW1pbmltdW1OdW1iZXJPZkpvYnNQZXJQcm9jZXNzOiAyCgkJYnVmZmVyOiAxMzQyMTc3MjgKCglwaHBWZXJzaW9uOiBudWxsCglwb2xsdXRlU2NvcGVXaXRoTG9vcEluaXRpYWxBc3NpZ25tZW50czogdHJ1ZQoJcG9sbHV0ZVNjb3BlV2l0aEFsd2F5c0l0ZXJhYmxlRm9yZWFjaDogdHJ1ZQoJcHJvcGVydHlBbHdheXNXcml0dGVuVGFnczogW10KCXByb3BlcnR5QWx3YXlzUmVhZFRhZ3M6IFtdCglmaXhlclRtcERpcjogJXByby50bXBEaXIlCglhZGRpdGlvbmFsQ29uc3RydWN0b3JzOiBbXQoJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogdHJ1ZQoJdXNlUGF0aENvbnN0YW50c0FzQ29uc3RhbnRTdHJpbmc6IGZhbHNlCglyZW1lbWJlclBvc3NpYmx5SW1wdXJlRnVuY3Rpb25WYWx1ZXM6IHRydWUKCXRpcHM6CgkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogdHJ1ZQoKCXRpcHNPZlRoZURheTogdHJ1ZQoJcmVwb3J0TWFnaWNNZXRob2RzOiBmYWxzZQoJcmVwb3J0TWFnaWNQcm9wZXJ0aWVzOiBmYWxzZQoJaWdub3JlRXJyb3JzOiBbXQoJaW50ZXJuYWxFcnJvcnNDb3VudExpbWl0OiA1MAoJY2FjaGU6CgkJbm9kZXNCeUZpbGVDb3VudE1heDogMTAyNAoJCW5vZGVzQnlTdHJpbmdDb3VudE1heDogMjU2CgoJcmVwb3J0VW5tYXRjaGVkSWdub3JlZEVycm9yczogdHJ1ZQoJc2NvcGVDbGFzczogUEhQU3RhblxBbmFseXNlclxNdXRhdGluZ1Njb3BlCgl0eXBlQWxpYXNlczogW10KCXVuaXZlcnNhbE9iamVjdENyYXRlc0NsYXNzZXM6CgkJLSBzdGRDbGFzcwoKCXN0dWJGaWxlczoKCQktIC4uL3N0dWJzL1JlZmxlY3Rpb25BdHRyaWJ1dGUuc3R1YgoJCS0gLi4vc3R1YnMvUmVmbGVjdGlvbkNsYXNzLnN0dWIKCQktIC4uL3N0dWJzL1JlZmxlY3Rpb25DbGFzc0NvbnN0YW50LnN0dWIKCQktIC4uL3N0dWJzL1JlZmxlY3Rpb25GdW5jdGlvbkFic3RyYWN0LnN0dWIKCQktIC4uL3N0dWJzL1JlZmxlY3Rpb25NZXRob2Quc3R1YgoJCS0gLi4vc3R1YnMvUmVmbGVjdGlvblBhcmFtZXRlci5zdHViCgkJLSAuLi9zdHVicy9SZWZsZWN0aW9uUHJvcGVydHkuc3R1YgoJCS0gLi4vc3R1YnMvaXRlcmFibGUuc3R1YgoJCS0gLi4vc3R1YnMvQXJyYXlPYmplY3Quc3R1YgoJCS0gLi4vc3R1YnMvV2Vha1JlZmVyZW5jZS5zdHViCgkJLSAuLi9zdHVicy9leHQtZHMuc3R1YgoJCS0gLi4vc3R1YnMvSW1hZ2lja1BpeGVsLnN0dWIKCQktIC4uL3N0dWJzL1BET1N0YXRlbWVudC5zdHViCgkJLSAuLi9zdHVicy9kYXRlLnN0dWIKCQktIC4uL3N0dWJzL2libV9kYjIuc3R1YgoJCS0gLi4vc3R1YnMvbXlzcWxpLnN0dWIKCQktIC4uL3N0dWJzL3ppcC5zdHViCgkJLSAuLi9zdHVicy9kb20uc3R1YgoJCS0gLi4vc3R1YnMvc3BsLnN0dWIKCQktIC4uL3N0dWJzL1NwbE9iamVjdFN0b3JhZ2Uuc3R1YgoJCS0gLi4vc3R1YnMvRXhjZXB0aW9uLnN0dWIKCQktIC4uL3N0dWJzL2FycmF5RnVuY3Rpb25zLnN0dWIKCQktIC4uL3N0dWJzL2NvcmUuc3R1YgoJCS0gLi4vc3R1YnMvdHlwZUNoZWNraW5nRnVuY3Rpb25zLnN0dWIKCgllYXJseVRlcm1pbmF0aW5nTWV0aG9kQ2FsbHM6IFtdCgllYXJseVRlcm1pbmF0aW5nRnVuY3Rpb25DYWxsczogW10KCW1lbW9yeUxpbWl0RmlsZTogJXRtcERpciUvLm1lbW9yeV9saW1pdAoJdGVtcFJlc3VsdENhY2hlUGF0aDogJXRtcERpciUvcmVzdWx0Q2FjaGVzCglyZXN1bHRDYWNoZVBhdGg6ICV0bXBEaXIlL3Jlc3VsdENhY2hlLnBocAoJcmVzdWx0Q2FjaGVDaGVja3NQcm9qZWN0RXh0ZW5zaW9uRmlsZXNEZXBlbmRlbmNpZXM6IGZhbHNlCglzdGF0aWNSZWZsZWN0aW9uQ2xhc3NOYW1lUGF0dGVybnM6IFtdCglkeW5hbWljQ29uc3RhbnROYW1lczoKCQktIElDT05WX0lNUEwKCQktIExJQlhNTF9WRVJTSU9OCgkJLSBMSUJYTUxfRE9UVEVEX1ZFUlNJT04KCQktIE1lbWNhY2hlZDo6SEFWRV9FTkNPRElORwoJCS0gTWVtY2FjaGVkOjpIQVZFX0lHQklOQVJZCgkJLSBNZW1jYWNoZWQ6OkhBVkVfSlNPTgoJCS0gTWVtY2FjaGVkOjpIQVZFX01TR1BBQ0sKCQktIE1lbWNhY2hlZDo6SEFWRV9TQVNMCgkJLSBNZW1jYWNoZWQ6OkhBVkVfU0VTU0lPTgoJCS0gUEhQX1ZFUlNJT04KCQktIFBIUF9NQUpPUl9WRVJTSU9OCgkJLSBQSFBfTUlOT1JfVkVSU0lPTgoJCS0gUEhQX1JFTEVBU0VfVkVSU0lPTgoJCS0gUEhQX1ZFUlNJT05fSUQKCQktIFBIUF9FWFRSQV9WRVJTSU9OCgkJLSBQSFBfV0lORE9XU19WRVJTSU9OX01BSk9SCgkJLSBQSFBfV0lORE9XU19WRVJTSU9OX01JTk9SCgkJLSBQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxECgkJLSBQSFBfWlRTCgkJLSBQSFBfREVCVUcKCQktIFBIUF9NQVhQQVRITEVOCgkJLSBQSFBfT1MKCQktIFBIUF9PU19GQU1JTFkKCQktIFBIUF9TQVBJCgkJLSBQSFBfRU9MCgkJLSBQSFBfSU5UX01BWAoJCS0gUEhQX0lOVF9NSU4KCQktIFBIUF9JTlRfU0laRQoJCS0gUEhQX0ZMT0FUX0RJRwoJCS0gUEhQX0ZMT0FUX0VQU0lMT04KCQktIFBIUF9GTE9BVF9NSU4KCQktIFBIUF9GTE9BVF9NQVgKCQktIERFRkFVTFRfSU5DTFVERV9QQVRICgkJLSBQRUFSX0lOU1RBTExfRElSCgkJLSBQRUFSX0VYVEVOU0lPTl9ESVIKCQktIFBIUF9FWFRFTlNJT05fRElSCgkJLSBQSFBfUFJFRklYCgkJLSBQSFBfQklORElSCgkJLSBQSFBfQklOQVJZCgkJLSBQSFBfTUFORElSCgkJLSBQSFBfTElCRElSCgkJLSBQSFBfREFUQURJUgoJCS0gUEhQX1NZU0NPTkZESVIKCQktIFBIUF9MT0NBTFNUQVRFRElSCgkJLSBQSFBfQ09ORklHX0ZJTEVfUEFUSAoJCS0gUEhQX0NPTkZJR19GSUxFX1NDQU5fRElSCgkJLSBQSFBfU0hMSUJfU1VGRklYCgkJLSBQSFBfRkRfU0VUU0laRQoJCS0gT1BFTlNTTF9WRVJTSU9OX05VTUJFUgoJCS0gWkVORF9ERUJVR19CVUlMRAoJCS0gWkVORF9USFJFQURfU0FGRQoJCS0gRV9BTEwKCgljdXN0b21SdWxlc2V0VXNlZDogbnVsbAoJZWRpdG9yVXJsOiBudWxsCgllZGl0b3JVcmxUaXRsZTogbnVsbAoJZXJyb3JGb3JtYXQ6IG51bGwKCXN5c0dldFRlbXBEaXI6IDo6c3lzX2dldF90ZW1wX2RpcigpCglzb3VyY2VMb2NhdG9yUGxheWdyb3VuZE1vZGU6IGZhbHNlCglwcm86CgkJZG5zU2VydmVyczoKCQkJLSAnMS4xLjEuMicKCgkJdG1wRGlyOiAlc3lzR2V0VGVtcERpciUvcGhwc3Rhbi1maXhlcgoKCV9fdmFsaWRhdGU6IHRydWUKCmV4dGVuc2lvbnM6CglydWxlczogUEhQU3RhblxEZXBlbmRlbmN5SW5qZWN0aW9uXFJ1bGVzRXh0ZW5zaW9uCgljb25kaXRpb25hbFRhZ3M6IFBIUFN0YW5cRGVwZW5kZW5jeUluamVjdGlvblxDb25kaXRpb25hbFRhZ3NFeHRlbnNpb24KCXBhcmFtZXRlcnNTY2hlbWE6IFBIUFN0YW5cRGVwZW5kZW5jeUluamVjdGlvblxQYXJhbWV0ZXJzU2NoZW1hRXh0ZW5zaW9uCgl2YWxpZGF0ZUlnbm9yZWRFcnJvcnM6IFBIUFN0YW5cRGVwZW5kZW5jeUluamVjdGlvblxWYWxpZGF0ZUlnbm9yZWRFcnJvcnNFeHRlbnNpb24KCXZhbGlkYXRlRXhjbHVkZVBhdGhzOiBQSFBTdGFuXERlcGVuZGVuY3lJbmplY3Rpb25cVmFsaWRhdGVFeGNsdWRlUGF0aHNFeHRlbnNpb24KCnJ1bGVzOgoJLSBQSFBTdGFuXFJ1bGVzXERlYnVnXERlYnVnU2NvcGVSdWxlCgktIFBIUFN0YW5cUnVsZXNcRGVidWdcRHVtcFBocERvY1R5cGVSdWxlCgktIFBIUFN0YW5cUnVsZXNcRGVidWdcRHVtcFR5cGVSdWxlCgktIFBIUFN0YW5cUnVsZXNcRGVidWdcRmlsZUFzc2VydFJ1bGUKCmNvbmRpdGlvbmFsVGFnczoKCVBIUFN0YW5cUnVsZXNcRXhjZXB0aW9uc1xNaXNzaW5nQ2hlY2tlZEV4Y2VwdGlvbkluRnVuY3Rpb25UaHJvd3NSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWV4Y2VwdGlvbnMuY2hlY2subWlzc2luZ0NoZWNrZWRFeGNlcHRpb25JblRocm93cyUKCglQSFBTdGFuXFJ1bGVzXEV4Y2VwdGlvbnNcTWlzc2luZ0NoZWNrZWRFeGNlcHRpb25Jbk1ldGhvZFRocm93c1J1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZXhjZXB0aW9ucy5jaGVjay5taXNzaW5nQ2hlY2tlZEV4Y2VwdGlvbkluVGhyb3dzJQoKCVBIUFN0YW5cUnVsZXNcRXhjZXB0aW9uc1xUb29XaWRlRnVuY3Rpb25UaHJvd1R5cGVSdWxlOgoJCXBocHN0YW4ucnVsZXMucnVsZTogJWV4Y2VwdGlvbnMuY2hlY2sudG9vV2lkZVRocm93VHlwZSUKCglQSFBTdGFuXFJ1bGVzXEV4Y2VwdGlvbnNcVG9vV2lkZU1ldGhvZFRocm93VHlwZVJ1bGU6CgkJcGhwc3Rhbi5ydWxlcy5ydWxlOiAlZXhjZXB0aW9ucy5jaGVjay50b29XaWRlVGhyb3dUeXBlJQoKCVBocFBhcnNlclxOb2RlVmlzaXRvclxOb2RlQ29ubmVjdGluZ1Zpc2l0b3I6CgkJcGhwc3Rhbi5wYXJzZXIucmljaFBhcnNlck5vZGVWaXNpdG9yOiAlZmVhdHVyZVRvZ2dsZXMubm9kZUNvbm5lY3RpbmdWaXNpdG9yQ29tcGF0aWJpbGl0eSUKCglQSFBTdGFuXFBhcnNlclxDdXJsU2V0T3B0QXJnVmlzaXRvcjoKCQlwaHBzdGFuLnBhcnNlci5yaWNoUGFyc2VyTm9kZVZpc2l0b3I6ICVmZWF0dXJlVG9nZ2xlcy5jdXJsU2V0T3B0VHlwZXMlCgoJUEhQU3RhblxQYXJzZXJcVHlwZVRyYXZlcnNlckluc3RhbmNlb2ZWaXNpdG9yOgoJCXBocHN0YW4ucGFyc2VyLnJpY2hQYXJzZXJOb2RlVmlzaXRvcjogJWZlYXR1cmVUb2dnbGVzLmluc3RhbmNlb2ZUeXBlJQoKc2VydmljZXM6CgktCgkJY2xhc3M6IFBocFBhcnNlclxCdWlsZGVyRmFjdG9yeQoKCS0KCQljbGFzczogUEhQU3RhblxQYXJzZXJcTGV4ZXJGYWN0b3J5CgoJLQoJCWNsYXNzOiBQaHBQYXJzZXJcTm9kZVZpc2l0b3JcTmFtZVJlc29sdmVyCgkJYXJndW1lbnRzOgoJCQlvcHRpb25zOgoJCQkJcHJlc2VydmVPcmlnaW5hbE5hbWVzOiB0cnVlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFBhcnNlclxBbm9ueW1vdXNDbGFzc1Zpc2l0b3IKCQl0YWdzOgoJCQktIHBocHN0YW4ucGFyc2VyLnJpY2hQYXJzZXJOb2RlVmlzaXRvcgoKCS0KCQljbGFzczogUEhQU3RhblxQYXJzZXJcQXJyYXlGaWx0ZXJBcmdWaXNpdG9yCgkJdGFnczoKCQkJLSBwaHBzdGFuLnBhcnNlci5yaWNoUGFyc2VyTm9kZVZpc2l0b3IKCgktCgkJY2xhc3M6IFBIUFN0YW5cUGFyc2VyXEFycmF5RmluZEFyZ1Zpc2l0b3IKCQl0YWdzOgoJCQktIHBocHN0YW4ucGFyc2VyLnJpY2hQYXJzZXJOb2RlVmlzaXRvcgoKCS0KCQljbGFzczogUEhQU3RhblxQYXJzZXJcQXJyYXlNYXBBcmdWaXNpdG9yCgkJdGFnczoKCQkJLSBwaHBzdGFuLnBhcnNlci5yaWNoUGFyc2VyTm9kZVZpc2l0b3IKCgktCgkJY2xhc3M6IFBIUFN0YW5cUGFyc2VyXEFycmF5V2Fsa0FyZ1Zpc2l0b3IKCQl0YWdzOgoJCQktIHBocHN0YW4ucGFyc2VyLnJpY2hQYXJzZXJOb2RlVmlzaXRvcgoKCS0KCQljbGFzczogUEhQU3RhblxQYXJzZXJcQ2xvc3VyZUFyZ1Zpc2l0b3IKCQl0YWdzOgoJCQktIHBocHN0YW4ucGFyc2VyLnJpY2hQYXJzZXJOb2RlVmlzaXRvcgoKCS0KCQljbGFzczogUEhQU3RhblxQYXJzZXJcQ2xvc3VyZUJpbmRUb1ZhclZpc2l0b3IKCQl0YWdzOgoJCQktIHBocHN0YW4ucGFyc2VyLnJpY2hQYXJzZXJOb2RlVmlzaXRvcgoKCS0KCQljbGFzczogUEhQU3RhblxQYXJzZXJcQ2xvc3VyZUJpbmRBcmdWaXNpdG9yCgkJdGFnczoKCQkJLSBwaHBzdGFuLnBhcnNlci5yaWNoUGFyc2VyTm9kZVZpc2l0b3IKCgktCgkJY2xhc3M6IFBIUFN0YW5cUGFyc2VyXEN1cmxTZXRPcHRBcmdWaXNpdG9yCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFBhcnNlclxUeXBlVHJhdmVyc2VySW5zdGFuY2VvZlZpc2l0b3IKCgktCgkJY2xhc3M6IFBIUFN0YW5cUGFyc2VyXEFycm93RnVuY3Rpb25BcmdWaXNpdG9yCgkJdGFnczoKCQkJLSBwaHBzdGFuLnBhcnNlci5yaWNoUGFyc2VyTm9kZVZpc2l0b3IKCgktCgkJY2xhc3M6IFBIUFN0YW5cUGFyc2VyXE1hZ2ljQ29uc3RhbnRQYXJhbURlZmF1bHRWaXNpdG9yCgkJdGFnczoKCQkJLSBwaHBzdGFuLnBhcnNlci5yaWNoUGFyc2VyTm9kZVZpc2l0b3IKCgktCgkJY2xhc3M6IFBIUFN0YW5cUGFyc2VyXE5ld0Fzc2lnbmVkVG9Qcm9wZXJ0eVZpc2l0b3IKCQl0YWdzOgoJCQktIHBocHN0YW4ucGFyc2VyLnJpY2hQYXJzZXJOb2RlVmlzaXRvcgoKCS0KCQljbGFzczogUEhQU3RhblxQYXJzZXJcUGFyZW50U3RtdFR5cGVzVmlzaXRvcgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5wYXJzZXIucmljaFBhcnNlck5vZGVWaXNpdG9yCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFBhcnNlclxUcnlDYXRjaFR5cGVWaXNpdG9yCgkJdGFnczoKCQkJLSBwaHBzdGFuLnBhcnNlci5yaWNoUGFyc2VyTm9kZVZpc2l0b3IKCgktCgkJY2xhc3M6IFBIUFN0YW5cUGFyc2VyXExhc3RDb25kaXRpb25WaXNpdG9yCgkJdGFnczoKCQkJLSBwaHBzdGFuLnBhcnNlci5yaWNoUGFyc2VyTm9kZVZpc2l0b3IKCgktCgkJY2xhc3M6IFBocFBhcnNlclxOb2RlVmlzaXRvclxOb2RlQ29ubmVjdGluZ1Zpc2l0b3IKCgktCgkJY2xhc3M6IFBIUFN0YW5cTm9kZVxQcmludGVyXEV4cHJQcmludGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXE5vZGVcUHJpbnRlclxQcmludGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXEJyb2tlclxBbm9ueW1vdXNDbGFzc05hbWVIZWxwZXIKCQlhcmd1bWVudHM6CgkJCXJlbGF0aXZlUGF0aEhlbHBlcjogQHNpbXBsZVJlbGF0aXZlUGF0aEhlbHBlcgoKCS0KCQljbGFzczogUEhQU3RhblxQaHBcUGhwVmVyc2lvbgoJCWZhY3Rvcnk6IEBQSFBTdGFuXFBocFxQaHBWZXJzaW9uRmFjdG9yeTo6Y3JlYXRlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFBocFxQaHBWZXJzaW9uRmFjdG9yeQoJCWZhY3Rvcnk6IEBQSFBTdGFuXFBocFxQaHBWZXJzaW9uRmFjdG9yeUZhY3Rvcnk6OmNyZWF0ZQoKCS0KCQljbGFzczogUEhQU3RhblxQaHBcUGhwVmVyc2lvbkZhY3RvcnlGYWN0b3J5CgkJYXJndW1lbnRzOgoJCQl2ZXJzaW9uSWQ6ICVwaHBWZXJzaW9uJQoJCQljb21wb3NlckF1dG9sb2FkZXJQcm9qZWN0UGF0aHM6ICVjb21wb3NlckF1dG9sb2FkZXJQcm9qZWN0UGF0aHMlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFBocERvY1BhcnNlclxMZXhlclxMZXhlcgoKCS0KCQljbGFzczogUEhQU3RhblxQaHBEb2NQYXJzZXJcUGFyc2VyXFR5cGVQYXJzZXIKCQlhcmd1bWVudHM6CgkJCXF1b3RlQXdhcmVDb25zdEV4cHJTdHJpbmc6ICVmZWF0dXJlVG9nZ2xlcy51bmVzY2FwZVN0cmluZ3MlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFBocERvY1BhcnNlclxQYXJzZXJcQ29uc3RFeHByUGFyc2VyCgkJZmFjdG9yeTogQFBIUFN0YW5cUGhwRG9jXENvbnN0RXhwclBhcnNlckZhY3Rvcnk6OmNyZWF0ZSgpCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFBocERvY1BhcnNlclxQYXJzZXJcUGhwRG9jUGFyc2VyCgkJYXJndW1lbnRzOgoJCQlyZXF1aXJlV2hpdGVzcGFjZUJlZm9yZURlc2NyaXB0aW9uOiAlZmVhdHVyZVRvZ2dsZXMucGhwRG9jUGFyc2VyUmVxdWlyZVdoaXRlc3BhY2VCZWZvcmVEZXNjcmlwdGlvbiUKCQkJcHJlc2VydmVUeXBlQWxpYXNlc1dpdGhJbnZhbGlkVHlwZXM6IHRydWUKCQkJdXNlZEF0dHJpYnV0ZXM6CgkJCQlsaW5lczogJWZlYXR1cmVUb2dnbGVzLnBocERvY1BhcnNlckluY2x1ZGVMaW5lcyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUGhwRG9jUGFyc2VyXFByaW50ZXJcUHJpbnRlcgoKCS0KCQljbGFzczogUEhQU3RhblxQaHBEb2NcQ29uc3RFeHByUGFyc2VyRmFjdG9yeQoJCWFyZ3VtZW50czoKCQkJdW5lc2NhcGVTdHJpbmdzOiAlZmVhdHVyZVRvZ2dsZXMudW5lc2NhcGVTdHJpbmdzJQoKCS0KCQljbGFzczogUEhQU3RhblxQaHBEb2NcUGhwRG9jSW5oZXJpdGFuY2VSZXNvbHZlcgoKCS0KCQljbGFzczogUEhQU3RhblxQaHBEb2NcUGhwRG9jTm9kZVJlc29sdmVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFBocERvY1xQaHBEb2NTdHJpbmdSZXNvbHZlcgoKCS0KCQljbGFzczogUEhQU3RhblxQaHBEb2NcQ29uc3RFeHByTm9kZVJlc29sdmVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFBocERvY1xUeXBlTm9kZVJlc29sdmVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFBocERvY1xUeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcgoJCWZhY3Rvcnk6IFBIUFN0YW5cUGhwRG9jXExhenlUeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcgoKCS0KCQljbGFzczogUEhQU3RhblxQaHBEb2NcVHlwZVN0cmluZ1Jlc29sdmVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFBocERvY1xTdHViVmFsaWRhdG9yCgkJYXJndW1lbnRzOgoJCQlkdXBsaWNhdGVTdHViczogJWZlYXR1cmVUb2dnbGVzLmR1cGxpY2F0ZVN0dWJzJQoKCS0KCQljbGFzczogUEhQU3RhblxQaHBEb2NcQ291bnRhYmxlU3R1YkZpbGVzRXh0ZW5zaW9uCgkJYXJndW1lbnRzOgoJCQlibGVlZGluZ0VkZ2U6ICVmZWF0dXJlVG9nZ2xlcy5ibGVlZGluZ0VkZ2UlCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5zdHViRmlsZXNFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cUGhwRG9jXFNvY2tldFNlbGVjdFN0dWJGaWxlc0V4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5zdHViRmlsZXNFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cUGhwRG9jXERlZmF1bHRTdHViRmlsZXNQcm92aWRlcgoJCWFyZ3VtZW50czoKCQkJc3R1YkZpbGVzOiAlc3R1YkZpbGVzJQoJCQljb21wb3NlckF1dG9sb2FkZXJQcm9qZWN0UGF0aHM6ICVjb21wb3NlckF1dG9sb2FkZXJQcm9qZWN0UGF0aHMlCgoJCWF1dG93aXJlZDoKCQkJLSBQSFBTdGFuXFBocERvY1xTdHViRmlsZXNQcm92aWRlcgoKCS0KCQljbGFzczogUEhQU3RhblxQaHBEb2NcSnNvblZhbGlkYXRlU3R1YkZpbGVzRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLnN0dWJGaWxlc0V4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxQaHBEb2NcUmVmbGVjdGlvbkVudW1TdHViRmlsZXNFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uc3R1YkZpbGVzRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXEFuYWx5c2VyXEFuYWx5c2VyCgkJYXJndW1lbnRzOgoJCQlpbnRlcm5hbEVycm9yc0NvdW50TGltaXQ6ICVpbnRlcm5hbEVycm9yc0NvdW50TGltaXQlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXEFuYWx5c2VyXEFuYWx5c2VyUmVzdWx0RmluYWxpemVyCgkJYXJndW1lbnRzOgoJCQlyZXBvcnRVbm1hdGNoZWRJZ25vcmVkRXJyb3JzOiAlcmVwb3J0VW5tYXRjaGVkSWdub3JlZEVycm9ycyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cQW5hbHlzZXJcRmlsZUFuYWx5c2VyCgkJYXJndW1lbnRzOgoJCQlwYXJzZXI6IEBkZWZhdWx0QW5hbHlzaXNQYXJzZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cQW5hbHlzZXJcTG9jYWxJZ25vcmVzUHJvY2Vzc29yCgoJLQoJCWNsYXNzOiBQSFBTdGFuXEFuYWx5c2VyXFJ1bGVFcnJvclRyYW5zZm9ybWVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXEFuYWx5c2VyXElnbm9yZVxJZ25vcmVkRXJyb3JIZWxwZXIKCQlhcmd1bWVudHM6CgkJCWlnbm9yZUVycm9yczogJWlnbm9yZUVycm9ycyUKCQkJcmVwb3J0VW5tYXRjaGVkSWdub3JlZEVycm9yczogJXJlcG9ydFVubWF0Y2hlZElnbm9yZWRFcnJvcnMlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXEFuYWx5c2VyXElnbm9yZVxJZ25vcmVMZXhlcgoKCS0KCQljbGFzczogUEhQU3RhblxBbmFseXNlclxMYXp5SW50ZXJuYWxTY29wZUZhY3RvcnkKCQlhcmd1bWVudHM6CgkJCXNjb3BlQ2xhc3M6ICVzY29wZUNsYXNzJQoKCQlhdXRvd2lyZWQ6CgkJCS0gUEhQU3RhblxBbmFseXNlclxJbnRlcm5hbFNjb3BlRmFjdG9yeQoKCS0KCQljbGFzczogUEhQU3RhblxBbmFseXNlclxTY29wZUZhY3RvcnkKCgktCgkJY2xhc3M6IFBIUFN0YW5cQW5hbHlzZXJcTm9kZVNjb3BlUmVzb2x2ZXIKCQlhcmd1bWVudHM6CgkJCXBhcnNlcjogQGRlZmF1bHRBbmFseXNpc1BhcnNlcgoJCQlyZWZsZWN0b3I6IEBub2RlU2NvcGVSZXNvbHZlclJlZmxlY3RvcgoJCQlwb2xsdXRlU2NvcGVXaXRoTG9vcEluaXRpYWxBc3NpZ25tZW50czogJXBvbGx1dGVTY29wZVdpdGhMb29wSW5pdGlhbEFzc2lnbm1lbnRzJQoJCQlwb2xsdXRlU2NvcGVXaXRoQWx3YXlzSXRlcmFibGVGb3JlYWNoOiAlcG9sbHV0ZVNjb3BlV2l0aEFsd2F5c0l0ZXJhYmxlRm9yZWFjaCUKCQkJZWFybHlUZXJtaW5hdGluZ01ldGhvZENhbGxzOiAlZWFybHlUZXJtaW5hdGluZ01ldGhvZENhbGxzJQoJCQllYXJseVRlcm1pbmF0aW5nRnVuY3Rpb25DYWxsczogJWVhcmx5VGVybWluYXRpbmdGdW5jdGlvbkNhbGxzJQoJCQlpbXBsaWNpdFRocm93czogJWV4Y2VwdGlvbnMuaW1wbGljaXRUaHJvd3MlCgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW46ICV0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoJCQlkZXRlY3REZWFkVHlwZUluTXVsdGlDYXRjaDogJWZlYXR1cmVUb2dnbGVzLmRldGVjdERlYWRUeXBlSW5NdWx0aUNhdGNoJQoJCQl1bml2ZXJzYWxPYmplY3RDcmF0ZXNDbGFzc2VzOiAldW5pdmVyc2FsT2JqZWN0Q3JhdGVzQ2xhc3NlcyUKCQkJcGFyYW1PdXRUeXBlOiAlZmVhdHVyZVRvZ2dsZXMucGFyYW1PdXRUeXBlJQoJCQlwcmVjaXNlTWlzc2luZ1JldHVybjogJWZlYXR1cmVUb2dnbGVzLnByZWNpc2VNaXNzaW5nUmV0dXJuJQoJCQlleHBsaWNpdFRocm93OiAlZmVhdHVyZVRvZ2dsZXMuZXhwbGljaXRUaHJvdyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cQW5hbHlzZXJcQ29uc3RhbnRSZXNvbHZlcgoJCWZhY3Rvcnk6IEBQSFBTdGFuXEFuYWx5c2VyXENvbnN0YW50UmVzb2x2ZXJGYWN0b3J5OjpjcmVhdGUoKQoKCS0KCQljbGFzczogUEhQU3RhblxBbmFseXNlclxDb25zdGFudFJlc29sdmVyRmFjdG9yeQoKCS0KCQlpbXBsZW1lbnQ6IFBIUFN0YW5cQW5hbHlzZXJcUmVzdWx0Q2FjaGVcUmVzdWx0Q2FjaGVNYW5hZ2VyRmFjdG9yeQoJCWFyZ3VtZW50czoKCQkJc2NhbkZpbGVGaW5kZXI6IEBmaWxlRmluZGVyU2NhbgoJCQljYWNoZUZpbGVQYXRoOiAlcmVzdWx0Q2FjaGVQYXRoJQoJCQlhbmFseXNlZFBhdGhzOiAlYW5hbHlzZWRQYXRocyUKCQkJYW5hbHlzZWRQYXRoc0Zyb21Db25maWc6ICVhbmFseXNlZFBhdGhzRnJvbUNvbmZpZyUKCQkJY29tcG9zZXJBdXRvbG9hZGVyUHJvamVjdFBhdGhzOiAlY29tcG9zZXJBdXRvbG9hZGVyUHJvamVjdFBhdGhzJQoJCQl1c2VkTGV2ZWw6ICV1c2VkTGV2ZWwlCgkJCWNsaUF1dG9sb2FkRmlsZTogJWNsaUF1dG9sb2FkRmlsZSUKCQkJYm9vdHN0cmFwRmlsZXM6ICVib290c3RyYXBGaWxlcyUKCQkJc2NhbkZpbGVzOiAlc2NhbkZpbGVzJQoJCQlzY2FuRGlyZWN0b3JpZXM6ICVzY2FuRGlyZWN0b3JpZXMlCgkJCWNoZWNrRGVwZW5kZW5jaWVzT2ZQcm9qZWN0RXh0ZW5zaW9uRmlsZXM6ICVyZXN1bHRDYWNoZUNoZWNrc1Byb2plY3RFeHRlbnNpb25GaWxlc0RlcGVuZGVuY2llcyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cQW5hbHlzZXJcUmVzdWx0Q2FjaGVcUmVzdWx0Q2FjaGVDbGVhcmVyCgkJYXJndW1lbnRzOgoJCQljYWNoZUZpbGVQYXRoOiAlcmVzdWx0Q2FjaGVQYXRoJQoKCS0KCQljbGFzczogUEhQU3RhblxBbmFseXNlclxSaWNoZXJTY29wZUdldFR5cGVIZWxwZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cQ2FjaGVcQ2FjaGUKCQlhcmd1bWVudHM6CgkJCXN0b3JhZ2U6IEBjYWNoZVN0b3JhZ2UKCgktCgkJY2xhc3M6IFBIUFN0YW5cQ29sbGVjdG9yc1xSZWdpc3RyeQoJCWZhY3Rvcnk6IEBQSFBTdGFuXENvbGxlY3RvcnNcUmVnaXN0cnlGYWN0b3J5OjpjcmVhdGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cQ29sbGVjdG9yc1xSZWdpc3RyeUZhY3RvcnkKCgktCgkJY2xhc3M6IFBIUFN0YW5cQ29tbWFuZFxBbmFseXNlQXBwbGljYXRpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cQ29tbWFuZFxBbmFseXNlclJ1bm5lcgoKCS0KCQljbGFzczogUEhQU3RhblxDb21tYW5kXEZpeGVyQXBwbGljYXRpb24KCQlhcmd1bWVudHM6CgkJCWFuYWx5c2VkUGF0aHM6ICVhbmFseXNlZFBhdGhzJQoJCQljdXJyZW50V29ya2luZ0RpcmVjdG9yeTogJWN1cnJlbnRXb3JraW5nRGlyZWN0b3J5JQoJCQlwcm9UbXBEaXI6ICVwcm8udG1wRGlyJQoJCQlkbnNTZXJ2ZXJzOiAlcHJvLmRuc1NlcnZlcnMlCgkJCWNvbXBvc2VyQXV0b2xvYWRlclByb2plY3RQYXRoczogJWNvbXBvc2VyQXV0b2xvYWRlclByb2plY3RQYXRocyUKCQkJYWxsQ29uZmlnRmlsZXM6ICVhbGxDb25maWdGaWxlcyUKCQkJY2xpQXV0b2xvYWRGaWxlOiAlY2xpQXV0b2xvYWRGaWxlJQoJCQlib290c3RyYXBGaWxlczogJWJvb3RzdHJhcEZpbGVzJQoJCQllZGl0b3JVcmw6ICVlZGl0b3JVcmwlCgkJCXVzZWRMZXZlbDogJXVzZWRMZXZlbCUKCgktCgkJY2xhc3M6IFBIUFN0YW5cRGVwZW5kZW5jeVxEZXBlbmRlbmN5UmVzb2x2ZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cRGVwZW5kZW5jeVxFeHBvcnRlZE5vZGVGZXRjaGVyCgkJYXJndW1lbnRzOgoJCQlwYXJzZXI6IEBkZWZhdWx0QW5hbHlzaXNQYXJzZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cRGVwZW5kZW5jeVxFeHBvcnRlZE5vZGVSZXNvbHZlcgoKCS0KCQljbGFzczogUEhQU3RhblxEZXBlbmRlbmN5XEV4cG9ydGVkTm9kZVZpc2l0b3IKCgktCgkJY2xhc3M6IFBIUFN0YW5cRGVwZW5kZW5jeUluamVjdGlvblxDb250YWluZXIKCQlmYWN0b3J5OiBQSFBTdGFuXERlcGVuZGVuY3lJbmplY3Rpb25cTWVtb2l6aW5nQ29udGFpbmVyCgkJYXJndW1lbnRzOgoJCQlvcmlnaW5hbENvbnRhaW5lcjogQFBIUFN0YW5cRGVwZW5kZW5jeUluamVjdGlvblxOZXR0ZVxOZXR0ZUNvbnRhaW5lcgoKCS0KCQljbGFzczogUEhQU3RhblxEZXBlbmRlbmN5SW5qZWN0aW9uXE5ldHRlXE5ldHRlQ29udGFpbmVyCgkJYXV0b3dpcmVkOgoJCQktIFBIUFN0YW5cRGVwZW5kZW5jeUluamVjdGlvblxOZXR0ZVxOZXR0ZUNvbnRhaW5lcgoKCS0KCQljbGFzczogUEhQU3RhblxEZXBlbmRlbmN5SW5qZWN0aW9uXERlcml2YXRpdmVDb250YWluZXJGYWN0b3J5CgkJYXJndW1lbnRzOgoJCQljdXJyZW50V29ya2luZ0RpcmVjdG9yeTogJWN1cnJlbnRXb3JraW5nRGlyZWN0b3J5JQoJCQl0ZW1wRGlyZWN0b3J5OiAldGVtcERpciUKCQkJYWRkaXRpb25hbENvbmZpZ0ZpbGVzOiAlYWRkaXRpb25hbENvbmZpZ0ZpbGVzJQoJCQlhbmFseXNlZFBhdGhzOiAlYW5hbHlzZWRQYXRocyUKCQkJY29tcG9zZXJBdXRvbG9hZGVyUHJvamVjdFBhdGhzOiAlY29tcG9zZXJBdXRvbG9hZGVyUHJvamVjdFBhdGhzJQoJCQlhbmFseXNlZFBhdGhzRnJvbUNvbmZpZzogJWFuYWx5c2VkUGF0aHNGcm9tQ29uZmlnJQoJCQl1c2VkTGV2ZWw6ICV1c2VkTGV2ZWwlCgkJCWdlbmVyYXRlQmFzZWxpbmVGaWxlOiAlZ2VuZXJhdGVCYXNlbGluZUZpbGUlCgkJCWNsaUF1dG9sb2FkRmlsZTogJWNsaUF1dG9sb2FkRmlsZSUKCQkJc2luZ2xlUmVmbGVjdGlvbkZpbGU6ICVzaW5nbGVSZWZsZWN0aW9uRmlsZSUKCQkJc2luZ2xlUmVmbGVjdGlvbkluc3RlYWRPZkZpbGU6ICVzaW5nbGVSZWZsZWN0aW9uSW5zdGVhZE9mRmlsZSUKCgktCgkJY2xhc3M6IFBIUFN0YW5cRGVwZW5kZW5jeUluamVjdGlvblxSZWZsZWN0aW9uXENsYXNzUmVmbGVjdGlvbkV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIKCQlmYWN0b3J5OiBQSFBTdGFuXERlcGVuZGVuY3lJbmplY3Rpb25cUmVmbGVjdGlvblxMYXp5Q2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcgoKCS0KCQljbGFzczogUEhQU3RhblxEZXBlbmRlbmN5SW5qZWN0aW9uXFR5cGVcRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyCgkJZmFjdG9yeTogUEhQU3RhblxEZXBlbmRlbmN5SW5qZWN0aW9uXFR5cGVcTGF6eUR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcgoKCS0KCQljbGFzczogUEhQU3RhblxEZXBlbmRlbmN5SW5qZWN0aW9uXFR5cGVcUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvblByb3ZpZGVyCgkJZmFjdG9yeTogUEhQU3RhblxEZXBlbmRlbmN5SW5qZWN0aW9uXFR5cGVcTGF6eVBhcmFtZXRlck91dFR5cGVFeHRlbnNpb25Qcm92aWRlcgoKCS0KCQljbGFzczogUEhQU3RhblxEZXBlbmRlbmN5SW5qZWN0aW9uXFR5cGVcRXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIKCQlmYWN0b3J5OiBQSFBTdGFuXERlcGVuZGVuY3lJbmplY3Rpb25cVHlwZVxMYXp5RXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cRGVwZW5kZW5jeUluamVjdGlvblxUeXBlXE9wZXJhdG9yVHlwZVNwZWNpZnlpbmdFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyCgkJZmFjdG9yeTogUEhQU3RhblxEZXBlbmRlbmN5SW5qZWN0aW9uXFR5cGVcTGF6eU9wZXJhdG9yVHlwZVNwZWNpZnlpbmdFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXERlcGVuZGVuY3lJbmplY3Rpb25cVHlwZVxEeW5hbWljVGhyb3dUeXBlRXh0ZW5zaW9uUHJvdmlkZXIKCQlmYWN0b3J5OiBQSFBTdGFuXERlcGVuZGVuY3lJbmplY3Rpb25cVHlwZVxMYXp5RHluYW1pY1Rocm93VHlwZUV4dGVuc2lvblByb3ZpZGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXERlcGVuZGVuY3lJbmplY3Rpb25cVHlwZVxQYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvblByb3ZpZGVyCgkJZmFjdG9yeTogUEhQU3RhblxEZXBlbmRlbmN5SW5qZWN0aW9uXFR5cGVcTGF6eVBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uUHJvdmlkZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cRmlsZVxGaWxlSGVscGVyCgkJYXJndW1lbnRzOgoJCQl3b3JraW5nRGlyZWN0b3J5OiAlY3VycmVudFdvcmtpbmdEaXJlY3RvcnklCgoJLQoJCWNsYXNzOiBQSFBTdGFuXEZpbGVcRmlsZUV4Y2x1ZGVyRmFjdG9yeQoJCWFyZ3VtZW50czoKCQkJb2Jzb2xldGVFeGNsdWRlc0FuYWx5c2U6ICVleGNsdWRlc19hbmFseXNlJQoJCQlleGNsdWRlUGF0aHM6ICVleGNsdWRlUGF0aHMlCgoJLQoJCWltcGxlbWVudDogUEhQU3RhblxGaWxlXEZpbGVFeGNsdWRlclJhd0ZhY3RvcnkKCQlhcmd1bWVudHM6CgkJCW5vSW1wbGljaXRXaWxkY2FyZDogJWZlYXR1cmVUb2dnbGVzLm5vSW1wbGljaXRXaWxkY2FyZCUKCglmaWxlRXhjbHVkZXJBbmFseXNlOgoJCWNsYXNzOiBQSFBTdGFuXEZpbGVcRmlsZUV4Y2x1ZGVyCgkJZmFjdG9yeTogQFBIUFN0YW5cRmlsZVxGaWxlRXhjbHVkZXJGYWN0b3J5OjpjcmVhdGVBbmFseXNlRmlsZUV4Y2x1ZGVyKCkKCQlhdXRvd2lyZWQ6IGZhbHNlCgoJZmlsZUV4Y2x1ZGVyU2NhbjoKCQljbGFzczogUEhQU3RhblxGaWxlXEZpbGVFeGNsdWRlcgoJCWZhY3Rvcnk6IEBQSFBTdGFuXEZpbGVcRmlsZUV4Y2x1ZGVyRmFjdG9yeTo6Y3JlYXRlU2NhbkZpbGVFeGNsdWRlcigpCgkJYXV0b3dpcmVkOiBmYWxzZQoKCWZpbGVGaW5kZXJBbmFseXNlOgoJCWNsYXNzOiBQSFBTdGFuXEZpbGVcRmlsZUZpbmRlcgoJCWFyZ3VtZW50czoKCQkJZmlsZUV4Y2x1ZGVyOiBAZmlsZUV4Y2x1ZGVyQW5hbHlzZQoJCQlmaWxlRXh0ZW5zaW9uczogJWZpbGVFeHRlbnNpb25zJQoKCQlhdXRvd2lyZWQ6IGZhbHNlCgoJZmlsZUZpbmRlclNjYW46CgkJY2xhc3M6IFBIUFN0YW5cRmlsZVxGaWxlRmluZGVyCgkJYXJndW1lbnRzOgoJCQlmaWxlRXhjbHVkZXI6IEBmaWxlRXhjbHVkZXJTY2FuCgkJCWZpbGVFeHRlbnNpb25zOiAlZmlsZUV4dGVuc2lvbnMlCgoJCWF1dG93aXJlZDogZmFsc2UKCgktCgkJY2xhc3M6IFBIUFN0YW5cRmlsZVxGaWxlTW9uaXRvcgoJCWFyZ3VtZW50czoKCQkJYW5hbHlzZUZpbGVGaW5kZXI6IEBmaWxlRmluZGVyQW5hbHlzZQoJCQlzY2FuRmlsZUZpbmRlcjogQGZpbGVGaW5kZXJTY2FuCgkJCWFuYWx5c2VkUGF0aHM6ICVhbmFseXNlZFBhdGhzJQoJCQlhbmFseXNlZFBhdGhzRnJvbUNvbmZpZzogJWFuYWx5c2VkUGF0aHNGcm9tQ29uZmlnJQoJCQlzY2FuRmlsZXM6ICVzY2FuRmlsZXMlCgkJCXNjYW5EaXJlY3RvcmllczogJXNjYW5EaXJlY3RvcmllcyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUGFyc2VyXERlY2xhcmVQb3NpdGlvblZpc2l0b3IKCQl0YWdzOgoJCQktIHBocHN0YW4ucGFyc2VyLnJpY2hQYXJzZXJOb2RlVmlzaXRvcgoKCS0KCQljbGFzczogUEhQU3RhblxQYXJzZXJcSW1tZWRpYXRlbHlJbnZva2VkQ2xvc3VyZVZpc2l0b3IKCQl0YWdzOgoJCQktIHBocHN0YW4ucGFyc2VyLnJpY2hQYXJzZXJOb2RlVmlzaXRvcgoKCS0KCQljbGFzczogUEhQU3RhblxQYXJhbGxlbFxQYXJhbGxlbEFuYWx5c2VyCgkJYXJndW1lbnRzOgoJCQlpbnRlcm5hbEVycm9yc0NvdW50TGltaXQ6ICVpbnRlcm5hbEVycm9yc0NvdW50TGltaXQlCgkJCXByb2Nlc3NUaW1lb3V0OiAlcGFyYWxsZWwucHJvY2Vzc1RpbWVvdXQlCgkJCWRlY29kZXJCdWZmZXJTaXplOiAlcGFyYWxsZWwuYnVmZmVyJQoKCS0KCQljbGFzczogUEhQU3RhblxQYXJhbGxlbFxTY2hlZHVsZXIKCQlhcmd1bWVudHM6CgkJCWpvYlNpemU6ICVwYXJhbGxlbC5qb2JTaXplJQoJCQltYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXM6ICVwYXJhbGxlbC5tYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXMlCgkJCW1pbmltdW1OdW1iZXJPZkpvYnNQZXJQcm9jZXNzOiAlcGFyYWxsZWwubWluaW11bU51bWJlck9mSm9ic1BlclByb2Nlc3MlCgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5kaWFnbm9zZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxQYXJzZXJcRnVuY3Rpb25DYWxsU3RhdGVtZW50RmluZGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFByb2Nlc3NcQ3B1Q29yZUNvdW50ZXIKCgktCgkJaW1wbGVtZW50OiBQSFBTdGFuXFJlZmxlY3Rpb25cRnVuY3Rpb25SZWZsZWN0aW9uRmFjdG9yeQoJCWFyZ3VtZW50czoKCQkJcGFyc2VyOiBAZGVmYXVsdEFuYWx5c2lzUGFyc2VyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJlZmxlY3Rpb25cSW5pdGlhbGl6ZXJFeHByVHlwZVJlc29sdmVyCgkJYXJndW1lbnRzOgoJCQl1c2VQYXRoQ29uc3RhbnRzQXNDb25zdGFudFN0cmluZzogJXVzZVBhdGhDb25zdGFudHNBc0NvbnN0YW50U3RyaW5nJQoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXEFubm90YXRpb25zXEFubm90YXRpb25zTWV0aG9kc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXEFubm90YXRpb25zXEFubm90YXRpb25zUHJvcGVydGllc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXEJldHRlclJlZmxlY3Rpb25cU291cmNlTG9jYXRvclxDYWNoaW5nVmlzaXRvcgoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXEJldHRlclJlZmxlY3Rpb25cU291cmNlTG9jYXRvclxGaWxlTm9kZXNGZXRjaGVyCgkJYXJndW1lbnRzOgoJCQlwYXJzZXI6IEBkZWZhdWx0QW5hbHlzaXNQYXJzZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cUmVmbGVjdGlvblxCZXR0ZXJSZWZsZWN0aW9uXFNvdXJjZUxvY2F0b3JcQ29tcG9zZXJKc29uQW5kSW5zdGFsbGVkSnNvblNvdXJjZUxvY2F0b3JNYWtlcgoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXEJldHRlclJlZmxlY3Rpb25cU291cmNlTG9jYXRvclxPcHRpbWl6ZWREaXJlY3RvcnlTb3VyY2VMb2NhdG9yRmFjdG9yeQoJCWFyZ3VtZW50czoKCQkJZmlsZUZpbmRlcjogQGZpbGVGaW5kZXJTY2FuCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJlZmxlY3Rpb25cQmV0dGVyUmVmbGVjdGlvblxTb3VyY2VMb2NhdG9yXE9wdGltaXplZERpcmVjdG9yeVNvdXJjZUxvY2F0b3JSZXBvc2l0b3J5CgoJLQoJCWltcGxlbWVudDogUEhQU3RhblxSZWZsZWN0aW9uXEJldHRlclJlZmxlY3Rpb25cU291cmNlTG9jYXRvclxPcHRpbWl6ZWRQc3JBdXRvbG9hZGVyTG9jYXRvckZhY3RvcnkKCgktCgkJaW1wbGVtZW50OiBQSFBTdGFuXFJlZmxlY3Rpb25cQmV0dGVyUmVmbGVjdGlvblxTb3VyY2VMb2NhdG9yXE9wdGltaXplZFNpbmdsZUZpbGVTb3VyY2VMb2NhdG9yRmFjdG9yeQoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXEJldHRlclJlZmxlY3Rpb25cU291cmNlTG9jYXRvclxPcHRpbWl6ZWRTaW5nbGVGaWxlU291cmNlTG9jYXRvclJlcG9zaXRvcnkKCgktCgkJY2xhc3M6IFBIUFN0YW5cUmVmbGVjdGlvblxSZXF1aXJlRXh0ZW5zaW9uXFJlcXVpcmVFeHRlbmRzTWV0aG9kc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXFJlcXVpcmVFeHRlbnNpb25cUmVxdWlyZUV4dGVuZHNQcm9wZXJ0aWVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJlZmxlY3Rpb25cTWl4aW5cTWl4aW5NZXRob2RzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uCgkJYXJndW1lbnRzOgoJCQltaXhpbkV4Y2x1ZGVDbGFzc2VzOiAlbWl4aW5FeGNsdWRlQ2xhc3NlcyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUmVmbGVjdGlvblxNaXhpblxNaXhpblByb3BlcnRpZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24KCQlhcmd1bWVudHM6CgkJCW1peGluRXhjbHVkZUNsYXNzZXM6ICVtaXhpbkV4Y2x1ZGVDbGFzc2VzJQoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXFBocFxQaHBDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24KCQlhcmd1bWVudHM6CgkJCXBhcnNlcjogQGRlZmF1bHRBbmFseXNpc1BhcnNlcgoJCQlpbmZlclByaXZhdGVQcm9wZXJ0eVR5cGVGcm9tQ29uc3RydWN0b3I6ICVpbmZlclByaXZhdGVQcm9wZXJ0eVR5cGVGcm9tQ29uc3RydWN0b3IlCgoJLQoJCWltcGxlbWVudDogUEhQU3RhblxSZWZsZWN0aW9uXFBocFxQaHBNZXRob2RSZWZsZWN0aW9uRmFjdG9yeQoJCWFyZ3VtZW50czoKCQkJcGFyc2VyOiBAZGVmYXVsdEFuYWx5c2lzUGFyc2VyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJlZmxlY3Rpb25cUGhwXFNvYXBcU29hcENsaWVudE1ldGhvZHNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cUmVmbGVjdGlvblxQaHBcRW51bUFsbG93ZWRTdWJUeXBlc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuYWxsb3dlZFN1YlR5cGVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJlZmxlY3Rpb25cUGhwXFVuaXZlcnNhbE9iamVjdENyYXRlc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIucHJvcGVydGllc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbgoKCQlhcmd1bWVudHM6CgkJCWNsYXNzZXM6ICV1bml2ZXJzYWxPYmplY3RDcmF0ZXNDbGFzc2VzJQoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXFBIUFN0YW5cTmF0aXZlUmVmbGVjdGlvbkVudW1SZXR1cm5EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY01ldGhvZFJldHVyblR5cGVFeHRlbnNpb24KCgkJYXJndW1lbnRzOgoJCQljbGFzc05hbWU6IFBIUFN0YW5cUmVmbGVjdGlvblxDbGFzc1JlZmxlY3Rpb24KCQkJbWV0aG9kTmFtZTogZ2V0TmF0aXZlUmVmbGVjdGlvbgoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXFBIUFN0YW5cTmF0aXZlUmVmbGVjdGlvbkVudW1SZXR1cm5EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY01ldGhvZFJldHVyblR5cGVFeHRlbnNpb24KCgkJYXJndW1lbnRzOgoJCQljbGFzc05hbWU6IFBIUFN0YW5cUmVmbGVjdGlvblxQaHBcQnVpbHRpbk1ldGhvZFJlZmxlY3Rpb24KCQkJbWV0aG9kTmFtZTogZ2V0RGVjbGFyaW5nQ2xhc3MKCgktCgkJY2xhc3M6IFBIUFN0YW5cUmVmbGVjdGlvblxSZWZsZWN0aW9uUHJvdmlkZXJcUmVmbGVjdGlvblByb3ZpZGVyUHJvdmlkZXIKCQlmYWN0b3J5OiBQSFBTdGFuXFJlZmxlY3Rpb25cUmVmbGVjdGlvblByb3ZpZGVyXExhenlSZWZsZWN0aW9uUHJvdmlkZXJQcm92aWRlcgoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXFNpZ25hdHVyZU1hcFxOYXRpdmVGdW5jdGlvblJlZmxlY3Rpb25Qcm92aWRlcgoJCWFyZ3VtZW50czoKCQkJcmVmbGVjdG9yOiBAYmV0dGVyUmVmbGVjdGlvblJlZmxlY3RvcgoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXFNpZ25hdHVyZU1hcFxTaWduYXR1cmVNYXBQYXJzZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cUmVmbGVjdGlvblxTaWduYXR1cmVNYXBcRnVuY3Rpb25TaWduYXR1cmVNYXBQcm92aWRlcgoJCWFyZ3VtZW50czoKCQkJc3RyaWN0ZXJGdW5jdGlvbk1hcDogJWZlYXR1cmVUb2dnbGVzLnN0cmljdGVyRnVuY3Rpb25NYXAlCgoJCWF1dG93aXJlZDoKCQkJLSBQSFBTdGFuXFJlZmxlY3Rpb25cU2lnbmF0dXJlTWFwXEZ1bmN0aW9uU2lnbmF0dXJlTWFwUHJvdmlkZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cUmVmbGVjdGlvblxTaWduYXR1cmVNYXBcUGhwOFNpZ25hdHVyZU1hcFByb3ZpZGVyCgkJYXV0b3dpcmVkOgoJCQktIFBIUFN0YW5cUmVmbGVjdGlvblxTaWduYXR1cmVNYXBcUGhwOFNpZ25hdHVyZU1hcFByb3ZpZGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJlZmxlY3Rpb25cU2lnbmF0dXJlTWFwXFNpZ25hdHVyZU1hcFByb3ZpZGVyRmFjdG9yeQoKCS0KCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXFNpZ25hdHVyZU1hcFxTaWduYXR1cmVNYXBQcm92aWRlcgoJCWZhY3Rvcnk6IEBQSFBTdGFuXFJlZmxlY3Rpb25cU2lnbmF0dXJlTWFwXFNpZ25hdHVyZU1hcFByb3ZpZGVyRmFjdG9yeTo6Y3JlYXRlKCkKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQXBpXEFwaVJ1bGVIZWxwZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQXR0cmlidXRlc0NoZWNrCgkJYXJndW1lbnRzOgoJCQlkZXByZWNhdGlvblJ1bGVzSW5zdGFsbGVkOiAlZGVwcmVjYXRpb25SdWxlc0luc3RhbGxlZCUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQXJyYXlzXE5vbmV4aXN0ZW50T2Zmc2V0SW5BcnJheURpbUZldGNoQ2hlY2sKCQlhcmd1bWVudHM6CgkJCXJlcG9ydE1heWJlczogJXJlcG9ydE1heWJlcyUKCQkJYmxlZWRpbmdFZGdlOiAlZmVhdHVyZVRvZ2dsZXMuYmxlZWRpbmdFZGdlJQoJCQlyZXBvcnRQb3NzaWJseU5vbmV4aXN0ZW50R2VuZXJhbEFycmF5T2Zmc2V0OiAlcmVwb3J0UG9zc2libHlOb25leGlzdGVudEdlbmVyYWxBcnJheU9mZnNldCUKCQkJcmVwb3J0UG9zc2libHlOb25leGlzdGVudENvbnN0YW50QXJyYXlPZmZzZXQ6ICVyZXBvcnRQb3NzaWJseU5vbmV4aXN0ZW50Q29uc3RhbnRBcnJheU9mZnNldCUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ2xhc3NOYW1lQ2hlY2sKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ2xhc3NDYXNlU2Vuc2l0aXZpdHlDaGVjawoJCWFyZ3VtZW50czoKCQkJY2hlY2tJbnRlcm5hbENsYXNzQ2FzZVNlbnNpdGl2aXR5OiAlY2hlY2tJbnRlcm5hbENsYXNzQ2FzZVNlbnNpdGl2aXR5JQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xDbGFzc0ZvcmJpZGRlbk5hbWVDaGVjawoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xDbGFzc2VzXExvY2FsVHlwZUFsaWFzZXNDaGVjawoJCWFyZ3VtZW50czoKCQkJZ2xvYmFsVHlwZUFsaWFzZXM6ICV0eXBlQWxpYXNlcyUKCQkJY2hlY2tNaXNzaW5nVHlwZWhpbnRzOiAlY2hlY2tNaXNzaW5nVHlwZWhpbnRzJQoJCQljaGVja0NsYXNzQ2FzZVNlbnNpdGl2aXR5OiAlY2hlY2tDbGFzc0Nhc2VTZW5zaXRpdml0eSUKCQkJYWJzZW50VHlwZUNoZWNrczogJWZlYXR1cmVUb2dnbGVzLmFic2VudFR5cGVDaGVja3MlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcTWV0aG9kVGFnQ2hlY2sKCQlhcmd1bWVudHM6CgkJCWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHk6ICVjaGVja0NsYXNzQ2FzZVNlbnNpdGl2aXR5JQoJCQljaGVja01pc3NpbmdUeXBlaGludHM6ICVjaGVja01pc3NpbmdUeXBlaGludHMlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcTWl4aW5DaGVjawoJCWFyZ3VtZW50czoKCQkJY2hlY2tDbGFzc0Nhc2VTZW5zaXRpdml0eTogJWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHklCgkJCWFic2VudFR5cGVDaGVja3M6ICVmZWF0dXJlVG9nZ2xlcy5hYnNlbnRUeXBlQ2hlY2tzJQoJCQljaGVja01pc3NpbmdUeXBlaGludHM6ICVjaGVja01pc3NpbmdUeXBlaGludHMlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcUHJvcGVydHlUYWdDaGVjawoJCWFyZ3VtZW50czoKCQkJY2hlY2tDbGFzc0Nhc2VTZW5zaXRpdml0eTogJWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHklCgkJCWNoZWNrTWlzc2luZ1R5cGVoaW50czogJWNoZWNrTWlzc2luZ1R5cGVoaW50cyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ29tcGFyaXNvblxDb25zdGFudENvbmRpdGlvblJ1bGVIZWxwZXIKCQlhcmd1bWVudHM6CgkJCXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW46ICV0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluJQoJCQlsb29zZUNvbXBhcmlzb25SdWxlRW5hYmxlZDogJWZlYXR1cmVUb2dnbGVzLmxvb3NlQ29tcGFyaXNvbiUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcQ29tcGFyaXNvblxJbXBvc3NpYmxlQ2hlY2tUeXBlSGVscGVyCgkJYXJndW1lbnRzOgoJCQl1bml2ZXJzYWxPYmplY3RDcmF0ZXNDbGFzc2VzOiAldW5pdmVyc2FsT2JqZWN0Q3JhdGVzQ2xhc3NlcyUKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogJXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgkJCW51bGxDb250ZXh0Rm9yVm9pZFJldHVybmluZ0Z1bmN0aW9uczogJWZlYXR1cmVUb2dnbGVzLm51bGxDb250ZXh0Rm9yVm9pZFJldHVybmluZ0Z1bmN0aW9ucyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRXhjZXB0aW9uc1xEZWZhdWx0RXhjZXB0aW9uVHlwZVJlc29sdmVyCgkJYXJndW1lbnRzOgoJCQl1bmNoZWNrZWRFeGNlcHRpb25SZWdleGVzOiAlZXhjZXB0aW9ucy51bmNoZWNrZWRFeGNlcHRpb25SZWdleGVzJQoJCQl1bmNoZWNrZWRFeGNlcHRpb25DbGFzc2VzOiAlZXhjZXB0aW9ucy51bmNoZWNrZWRFeGNlcHRpb25DbGFzc2VzJQoJCQljaGVja2VkRXhjZXB0aW9uUmVnZXhlczogJWV4Y2VwdGlvbnMuY2hlY2tlZEV4Y2VwdGlvblJlZ2V4ZXMlCgkJCWNoZWNrZWRFeGNlcHRpb25DbGFzc2VzOiAlZXhjZXB0aW9ucy5jaGVja2VkRXhjZXB0aW9uQ2xhc3NlcyUKCgkJYXV0b3dpcmVkOgoJCQktIFBIUFN0YW5cUnVsZXNcRXhjZXB0aW9uc1xEZWZhdWx0RXhjZXB0aW9uVHlwZVJlc29sdmVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEV4Y2VwdGlvbnNcTWlzc2luZ0NoZWNrZWRFeGNlcHRpb25JbkZ1bmN0aW9uVGhyb3dzUnVsZQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xFeGNlcHRpb25zXE1pc3NpbmdDaGVja2VkRXhjZXB0aW9uSW5NZXRob2RUaHJvd3NSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEV4Y2VwdGlvbnNcTWlzc2luZ0NoZWNrZWRFeGNlcHRpb25JblRocm93c0NoZWNrCgkJYXJndW1lbnRzOgoJCQlleGNlcHRpb25UeXBlUmVzb2x2ZXI6IEBleGNlcHRpb25UeXBlUmVzb2x2ZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRXhjZXB0aW9uc1xUb29XaWRlRnVuY3Rpb25UaHJvd1R5cGVSdWxlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEV4Y2VwdGlvbnNcVG9vV2lkZU1ldGhvZFRocm93VHlwZVJ1bGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRXhjZXB0aW9uc1xUb29XaWRlVGhyb3dUeXBlQ2hlY2sKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25DYWxsUGFyYW1ldGVyc0NoZWNrCgkJYXJndW1lbnRzOgoJCQljaGVja0FyZ3VtZW50VHlwZXM6ICVjaGVja0Z1bmN0aW9uQXJndW1lbnRUeXBlcyUKCQkJY2hlY2tBcmd1bWVudHNQYXNzZWRCeVJlZmVyZW5jZTogJWNoZWNrQXJndW1lbnRzUGFzc2VkQnlSZWZlcmVuY2UlCgkJCWNoZWNrRXh0cmFBcmd1bWVudHM6ICVjaGVja0V4dHJhQXJndW1lbnRzJQoJCQljaGVja01pc3NpbmdUeXBlaGludHM6ICVjaGVja01pc3NpbmdUeXBlaGludHMlCgkJCWNoZWNrVW5yZXNvbHZhYmxlUGFyYW1ldGVyVHlwZXM6ICVmZWF0dXJlVG9nZ2xlcy5jaGVja1VucmVzb2x2YWJsZVBhcmFtZXRlclR5cGVzJQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xGdW5jdGlvbkRlZmluaXRpb25DaGVjawoJCWFyZ3VtZW50czoKCQkJY2hlY2tDbGFzc0Nhc2VTZW5zaXRpdml0eTogJWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHklCgkJCWNoZWNrVGhpc09ubHk6ICVjaGVja1RoaXNPbmx5JQoJCQlhYnNlbnRUeXBlQ2hlY2tzOiAlZmVhdHVyZVRvZ2dsZXMuYWJzZW50VHlwZUNoZWNrcyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25SZXR1cm5UeXBlQ2hlY2sKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ0NoZWNrCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEdlbmVyaWNzXENyb3NzQ2hlY2tJbnRlcmZhY2VzSGVscGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEdlbmVyaWNzXEdlbmVyaWNBbmNlc3RvcnNDaGVjawoJCWFyZ3VtZW50czoKCQkJY2hlY2tHZW5lcmljQ2xhc3NJbk5vbkdlbmVyaWNPYmplY3RUeXBlOiAlY2hlY2tHZW5lcmljQ2xhc3NJbk5vbkdlbmVyaWNPYmplY3RUeXBlJQoJCQlza2lwQ2hlY2tHZW5lcmljQ2xhc3NlczogJWZlYXR1cmVUb2dnbGVzLnNraXBDaGVja0dlbmVyaWNDbGFzc2VzJQoJCQlhYnNlbnRUeXBlQ2hlY2tzOiAlZmVhdHVyZVRvZ2dsZXMuYWJzZW50VHlwZUNoZWNrcyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcR2VuZXJpY3NcR2VuZXJpY09iamVjdFR5cGVDaGVjawoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xHZW5lcmljc1xNZXRob2RUYWdUZW1wbGF0ZVR5cGVDaGVjawoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xHZW5lcmljc1xUZW1wbGF0ZVR5cGVDaGVjawoJCWFyZ3VtZW50czoKCQkJY2hlY2tDbGFzc0Nhc2VTZW5zaXRpdml0eTogJWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHklCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXEdlbmVyaWNzXFZhcmlhbmNlQ2hlY2sKCQlhcmd1bWVudHM6CgkJCWNoZWNrUGFyYW1PdXRWYXJpYW5jZTogJWZlYXR1cmVUb2dnbGVzLnBhcmFtT3V0VmFyaWFuY2UlCgkJCXN0cmljdFN0YXRpY1ZhcmlhbmNlOiAlZmVhdHVyZVRvZ2dsZXMuc3RyaWN0U3RhdGljTWV0aG9kVGVtcGxhdGVUeXBlVmFyaWFuY2UlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXElzc2V0Q2hlY2sKCQlhcmd1bWVudHM6CgkJCWNoZWNrQWR2YW5jZWRJc3NldDogJWNoZWNrQWR2YW5jZWRJc3NldCUKCQkJdHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbjogJXRyZWF0UGhwRG9jVHlwZXNBc0NlcnRhaW4lCgkJCXN0cmljdFVubmVjZXNzYXJ5TnVsbHNhZmVQcm9wZXJ0eUZldGNoOiAlZmVhdHVyZVRvZ2dsZXMuc3RyaWN0VW5uZWNlc3NhcnlOdWxsc2FmZVByb3BlcnR5RmV0Y2glCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcTWV0aG9kQ2FsbENoZWNrCgkJYXJndW1lbnRzOgoJCQljaGVja0Z1bmN0aW9uTmFtZUNhc2U6ICVjaGVja0Z1bmN0aW9uTmFtZUNhc2UlCgkJCXJlcG9ydE1hZ2ljTWV0aG9kczogJXJlcG9ydE1hZ2ljTWV0aG9kcyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcTWV0aG9kc1xTdGF0aWNNZXRob2RDYWxsQ2hlY2sKCQlhcmd1bWVudHM6CgkJCWNoZWNrRnVuY3Rpb25OYW1lQ2FzZTogJWNoZWNrRnVuY3Rpb25OYW1lQ2FzZSUKCQkJcmVwb3J0TWFnaWNNZXRob2RzOiAlcmVwb3J0TWFnaWNNZXRob2RzJQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xNZXRob2RzXE1ldGhvZFNpZ25hdHVyZVJ1bGUKCQlhcmd1bWVudHM6CgkJCXJlcG9ydE1heWJlczogJXJlcG9ydE1heWJlc0luTWV0aG9kU2lnbmF0dXJlcyUKCQkJcmVwb3J0U3RhdGljOiAlcmVwb3J0U3RhdGljTWV0aG9kU2lnbmF0dXJlcyUKCQkJYWJzdHJhY3RUcmFpdE1ldGhvZDogJWZlYXR1cmVUb2dnbGVzLmFic3RyYWN0VHJhaXRNZXRob2QlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXE1ldGhvZHNcTWV0aG9kUGFyYW1ldGVyQ29tcGFyaXNvbkhlbHBlcgoJCWFyZ3VtZW50czoKCQkJZ2VuZXJpY1Byb3RvdHlwZU1lc3NhZ2U6ICVmZWF0dXJlVG9nZ2xlcy5nZW5lcmljUHJvdG90eXBlTWVzc2FnZSUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcTWlzc2luZ1R5cGVoaW50Q2hlY2sKCQlhcmd1bWVudHM6CgkJCWNoZWNrTWlzc2luZ0l0ZXJhYmxlVmFsdWVUeXBlOiAlY2hlY2tNaXNzaW5nSXRlcmFibGVWYWx1ZVR5cGUlCgkJCWRpc2FibGVDaGVja01pc3NpbmdJdGVyYWJsZVZhbHVlVHlwZTogJWZlYXR1cmVUb2dnbGVzLmRpc2FibGVDaGVja01pc3NpbmdJdGVyYWJsZVZhbHVlVHlwZSUKCQkJY2hlY2tHZW5lcmljQ2xhc3NJbk5vbkdlbmVyaWNPYmplY3RUeXBlOiAlY2hlY2tHZW5lcmljQ2xhc3NJbk5vbkdlbmVyaWNPYmplY3RUeXBlJQoJCQljaGVja01pc3NpbmdDYWxsYWJsZVNpZ25hdHVyZTogJWNoZWNrTWlzc2luZ0NhbGxhYmxlU2lnbmF0dXJlJQoJCQlza2lwQ2hlY2tHZW5lcmljQ2xhc3NlczogJWZlYXR1cmVUb2dnbGVzLnNraXBDaGVja0dlbmVyaWNDbGFzc2VzJQoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xOdWxsc2FmZUNoZWNrCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXENvbnN0YW50c1xMYXp5QWx3YXlzVXNlZENsYXNzQ29uc3RhbnRzRXh0ZW5zaW9uUHJvdmlkZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcTWV0aG9kc1xMYXp5QWx3YXlzVXNlZE1ldGhvZEV4dGVuc2lvblByb3ZpZGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFBocERvY1xDb25kaXRpb25hbFJldHVyblR5cGVSdWxlSGVscGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFBocERvY1xBc3NlcnRSdWxlSGVscGVyCgkJYXJndW1lbnRzOgoJCQljaGVja01pc3NpbmdUeXBlaGludHM6ICVjaGVja01pc3NpbmdUeXBlaGludHMlCgkJCWNoZWNrQ2xhc3NDYXNlU2Vuc2l0aXZpdHk6ICVjaGVja0NsYXNzQ2FzZVNlbnNpdGl2aXR5JQoJCQlhYnNlbnRUeXBlQ2hlY2tzOiAlZmVhdHVyZVRvZ2dsZXMuYWJzZW50VHlwZUNoZWNrcyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcUGhwRG9jXFVucmVzb2x2YWJsZVR5cGVIZWxwZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcUGhwRG9jXEdlbmVyaWNDYWxsYWJsZVJ1bGVIZWxwZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcUGhwRG9jXFZhclRhZ1R5cGVSdWxlSGVscGVyCgkJYXJndW1lbnRzOgoJCQljaGVja1R5cGVBZ2FpbnN0UGhwRG9jVHlwZTogJXJlcG9ydFdyb25nUGhwRG9jVHlwZUluVmFyVGFnJQoJCQlzdHJpY3RXaWRlbmluZ0NoZWNrOiAlcmVwb3J0QW55VHlwZVdpZGVuaW5nSW5WYXJUYWclCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFBsYXlncm91bmRcTmV2ZXJSdWxlSGVscGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJ1bGVzXFByb3BlcnRpZXNcTGF6eVJlYWRXcml0ZVByb3BlcnRpZXNFeHRlbnNpb25Qcm92aWRlcgoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xQcm9wZXJ0aWVzXFByb3BlcnR5RGVzY3JpcHRvcgoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xQcm9wZXJ0aWVzXFByb3BlcnR5UmVmbGVjdGlvbkZpbmRlcgoKCS0KCQljbGFzczogUEhQU3RhblxSdWxlc1xQdXJlXEZ1bmN0aW9uUHVyaXR5Q2hlY2sKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcUnVsZUxldmVsSGVscGVyCgkJYXJndW1lbnRzOgoJCQljaGVja051bGxhYmxlczogJWNoZWNrTnVsbGFibGVzJQoJCQljaGVja1RoaXNPbmx5OiAlY2hlY2tUaGlzT25seSUKCQkJY2hlY2tVbmlvblR5cGVzOiAlY2hlY2tVbmlvblR5cGVzJQoJCQljaGVja0V4cGxpY2l0TWl4ZWQ6ICVjaGVja0V4cGxpY2l0TWl4ZWQlCgkJCWNoZWNrSW1wbGljaXRNaXhlZDogJWNoZWNrSW1wbGljaXRNaXhlZCUKCQkJbmV3UnVsZUxldmVsSGVscGVyOiAlZmVhdHVyZVRvZ2dsZXMubmV3UnVsZUxldmVsSGVscGVyJQoJCQljaGVja0JlbmV2b2xlbnRVbmlvblR5cGVzOiAlY2hlY2tCZW5ldm9sZW50VW5pb25UeXBlcyUKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcVW51c2VkRnVuY3Rpb25QYXJhbWV0ZXJzQ2hlY2sKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcVG9vV2lkZVR5cGVoaW50c1xUb29XaWRlUGFyYW1ldGVyT3V0VHlwZUNoZWNrCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcRmlsZVR5cGVNYXBwZXIKCQlhcmd1bWVudHM6CgkJCXBocFBhcnNlcjogQGRlZmF1bHRBbmFseXNpc1BhcnNlcgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFR5cGVBbGlhc1Jlc29sdmVyCgkJZmFjdG9yeTogUEhQU3RhblxUeXBlXFVzZWZ1bFR5cGVBbGlhc1Jlc29sdmVyCgkJYXJndW1lbnRzOgoJCQlnbG9iYWxUeXBlQWxpYXNlczogJXR5cGVBbGlhc2VzJQoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFR5cGVBbGlhc1Jlc29sdmVyUHJvdmlkZXIKCQlmYWN0b3J5OiBQSFBTdGFuXFR5cGVcTGF6eVR5cGVBbGlhc1Jlc29sdmVyUHJvdmlkZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxCaXR3aXNlRmxhZ0hlbHBlcgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxBYnNGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFyZ3VtZW50QmFzZWRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQXJyYXlDaGFuZ2VLZXlDYXNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFycmF5SW50ZXJzZWN0S2V5RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFycmF5Q2h1bmtGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQXJyYXlDb2x1bW5GdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQXJyYXlDb21iaW5lRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFycmF5Q3VycmVudER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFycmF5RmlsbEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxBcnJheUZpbGxLZXlzRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFycmF5RmlsdGVyRnVuY3Rpb25SZXR1cm5UeXBlSGVscGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFycmF5RmlsdGVyRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFycmF5RmxpcEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxBcnJheUZpbmRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQXJyYXlGaW5kS2V5RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFycmF5S2V5RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQXJyYXlLZXlFeGlzdHNGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLnR5cGVTcGVjaWZpZXIuZnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxBcnJheUtleUZpcnN0RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQXJyYXlLZXlMYXN0RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQXJyYXlLZXlzRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxBcnJheU1hcEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxBcnJheU1lcmdlRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxBcnJheU5leHREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxBcnJheVBvcEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxBcnJheVJhbmRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQXJyYXlSZWR1Y2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQXJyYXlSZXBsYWNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFycmF5UmV2ZXJzZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxBcnJheVNoaWZ0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFycmF5U2xpY2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQXJyYXlTcGxpY2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQXJyYXlTZWFyY2hGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFycmF5U2VhcmNoRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi50eXBlU3BlY2lmaWVyLmZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQXJyYXlWYWx1ZXNGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFycmF5U3VtRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxBc3NlcnRUaHJvd1R5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uZHluYW1pY0Z1bmN0aW9uVGhyb3dUeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEJhY2tlZEVudW1Gcm9tTWV0aG9kRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNTdGF0aWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEJhc2U2NERlY29kZUR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQmNNYXRoU3RyaW5nT3JOdWxsUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxDbG9zdXJlQmluZER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljU3RhdGljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxDbG9zdXJlQmluZFRvRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXENsb3N1cmVGcm9tQ2FsbGFibGVEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY1N0YXRpY01ldGhvZFJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQ29tcGFjdEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCQlhcmd1bWVudHM6CgkJCWNoZWNrTWF5YmVVbmRlZmluZWRWYXJpYWJsZXM6ICVjaGVja01heWJlVW5kZWZpbmVkVmFyaWFibGVzJQoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxDb25zdGFudEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxDb25zdGFudEhlbHBlcgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxDb3VudEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxDb3VudEZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4udHlwZVNwZWNpZmllci5mdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEN1cmxHZXRpbmZvRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxEYXRlRnVuY3Rpb25SZXR1cm5UeXBlSGVscGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXERhdGVGb3JtYXRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcRGF0ZUZvcm1hdE1ldGhvZFJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXERhdGVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcRGF0ZUludGVydmFsQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uZHluYW1pY1N0YXRpY01ldGhvZFRocm93VHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxEYXRlSW50ZXJ2YWxEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY1N0YXRpY01ldGhvZFJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcRGF0ZVRpbWVDcmVhdGVEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxEYXRlVGltZUR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXERhdGVUaW1lTW9kaWZ5UmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY01ldGhvZFJldHVyblR5cGVFeHRlbnNpb24KCgkJYXJndW1lbnRzOgoJCQlkYXRlVGltZUNsYXNzOiBEYXRlVGltZQoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxEYXRlVGltZU1vZGlmeVJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uCgoJCWFyZ3VtZW50czoKCQkJZGF0ZVRpbWVDbGFzczogRGF0ZVRpbWVJbW11dGFibGUKCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcRGF0ZVRpbWVDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5keW5hbWljU3RhdGljTWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXERhdGVUaW1lTW9kaWZ5TWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmR5bmFtaWNNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcRGF0ZVRpbWVTdWJNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uZHluYW1pY01ldGhvZFRocm93VHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxEYXRlVGltZVpvbmVDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5keW5hbWljU3RhdGljTWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXERzTWFwRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXERzTWFwRHluYW1pY01ldGhvZFRocm93VHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5keW5hbWljTWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXERpb1N0YXREeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEV4cGxvZGVGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEZpbHRlckZ1bmN0aW9uUmV0dXJuVHlwZUhlbHBlcgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxGaWx0ZXJJbnB1dER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEZpbHRlclZhckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEZpbHRlclZhckFycmF5RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcR2V0Q2FsbGVkQ2xhc3NEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxHZXRDbGFzc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEdldERlYnVnVHlwZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxHZXREZWZpbmVkVmFyc0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxHZXRQYXJlbnRDbGFzc0R5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcR2V0dHlwZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxHZXR0aW1lb2ZkYXlEeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEhhc2hGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEhpZ2hsaWdodFN0cmluZ0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEludGRpdlRocm93VHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5keW5hbWljRnVuY3Rpb25UaHJvd1R5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcSW5pR2V0UmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxKc29uVGhyb3dUeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmR5bmFtaWNGdW5jdGlvblRocm93VHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxPcGVuU3NsRW5jcnlwdFBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uZnVuY3Rpb25QYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFBhcnNlU3RyUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5mdW5jdGlvblBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcUHJlZ01hdGNoVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4udHlwZVNwZWNpZmllci5mdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFByZWdNYXRjaFBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uZnVuY3Rpb25QYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFByZWdSZXBsYWNlQ2FsbGJhY2tDbG9zdXJlVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5mdW5jdGlvblBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFJlZ2V4QXJyYXlTaGFwZU1hdGNoZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxSZWdleFxSZWdleEdyb3VwUGFyc2VyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUmVnZXhcUmVnZXhFeHByZXNzaW9uSGVscGVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFJlZmxlY3Rpb25DbGFzc0NvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmR5bmFtaWNTdGF0aWNNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcUmVmbGVjdGlvbkZ1bmN0aW9uQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uZHluYW1pY1N0YXRpY01ldGhvZFRocm93VHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxSZWZsZWN0aW9uTWV0aG9kQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uZHluYW1pY1N0YXRpY01ldGhvZFRocm93VHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxSZWZsZWN0aW9uUHJvcGVydHlDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5keW5hbWljU3RhdGljTWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFN0ckNvbnRhaW5pbmdUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi50eXBlU3BlY2lmaWVyLmZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcU2ltcGxlWE1MRWxlbWVudENsYXNzUHJvcGVydHlSZWZsZWN0aW9uRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5wcm9wZXJ0aWVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFNpbXBsZVhNTEVsZW1lbnRDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5keW5hbWljU3RhdGljTWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFN0YXREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXE1ldGhvZEV4aXN0c1R5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLnR5cGVTcGVjaWZpZXIuZnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxQcm9wZXJ0eUV4aXN0c1R5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLnR5cGVTcGVjaWZpZXIuZnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxNaW5NYXhGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcTnVtYmVyRm9ybWF0RnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxQYXRoaW5mb0Z1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcUHJlZ0ZpbHRlckZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxQcmVnU3BsaXREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxSZWZsZWN0aW9uQ2xhc3NJc1N1YmNsYXNzT2ZUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi50eXBlU3BlY2lmaWVyLm1ldGhvZFR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFJlcGxhY2VGdW5jdGlvbnNEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxBcnJheVBvaW50ZXJGdW5jdGlvbnNEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxMdHJpbUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxNYkZ1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcTWJDb252ZXJ0RW5jb2RpbmdGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcTWJTdWJzdGl0dXRlQ2hhcmFjdGVyRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcTWJTdHJsZW5GdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcTWljcm90aW1lRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEhydGltZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxJbXBsb2RlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXE5vbkVtcHR5U3RyaW5nRnVuY3Rpb25zUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxTZXRUeXBlRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi50eXBlU3BlY2lmaWVyLmZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcU3RyQ2FzZUZ1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcU3RybGVuRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFN0ckluY3JlbWVudERlY3JlbWVudEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxTdHJQYWRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcU3RyUmVwZWF0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFN0cnJldkZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxTdWJzdHJEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxUaHJvd2FibGVSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxQYXJzZVVybEZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcVHJpZ2dlckVycm9yRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcVHJpbUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcVmVyc2lvbkNvbXBhcmVGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFBvd0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxSb3VuZEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxTdHJ0b3RpbWVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcUmFuZG9tSW50RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFJhbmdlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEFzc2VydEZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4udHlwZVNwZWNpZmllci5mdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXENsYXNzRXhpc3RzRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi50eXBlU3BlY2lmaWVyLmZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQ2xhc3NJbXBsZW1lbnRzRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXERlZmluZUNvbnN0YW50VHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4udHlwZVNwZWNpZmllci5mdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXERlZmluZWRDb25zdGFudFR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLnR5cGVTcGVjaWZpZXIuZnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxGdW5jdGlvbkV4aXN0c0Z1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4udHlwZVNwZWNpZmllci5mdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEluQXJyYXlGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLnR5cGVTcGVjaWZpZXIuZnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxJc0FycmF5RnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi50eXBlU3BlY2lmaWVyLmZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCgkJYXJndW1lbnRzOgoJCQlleHBsaWNpdE1peGVkOiAlZmVhdHVyZVRvZ2dsZXMuZXhwbGljaXRNaXhlZFZpYUlzQXJyYXklCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXElzQ2FsbGFibGVGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLnR5cGVTcGVjaWZpZXIuZnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxJc0l0ZXJhYmxlRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi50eXBlU3BlY2lmaWVyLmZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcSXNTdWJjbGFzc09mRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi50eXBlU3BlY2lmaWVyLmZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcSXRlcmF0b3JUb0FycmF5RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXElzQUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4udHlwZVNwZWNpZmllci5mdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXElzQUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdIZWxwZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxQaHBcQ3R5cGVEaWdpdEZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4udHlwZVNwZWNpZmllci5mdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXEpzb25UaHJvd09uRXJyb3JEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxUeXBlU3BlY2lmeWluZ0Z1bmN0aW9uc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJYXJndW1lbnRzOgoJCQl0cmVhdFBocERvY1R5cGVzQXNDZXJ0YWluOiAldHJlYXRQaHBEb2NUeXBlc0FzQ2VydGFpbiUKCQkJdW5pdmVyc2FsT2JqZWN0Q3JhdGVzQ2xhc3NlczogJXVuaXZlcnNhbE9iamVjdENyYXRlc0NsYXNzZXMlCgkJCW51bGxDb250ZXh0Rm9yVm9pZFJldHVybmluZ0Z1bmN0aW9uczogJWZlYXR1cmVUb2dnbGVzLm51bGxDb250ZXh0Rm9yVm9pZFJldHVybmluZ0Z1bmN0aW9ucyUKCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFNpbXBsZVhNTEVsZW1lbnRBc1hNTE1ldGhvZFJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFNpbXBsZVhNTEVsZW1lbnRYcGF0aE1ldGhvZFJldHVyblR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFN0clNwbGl0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFN0clRva0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxTcHJpbnRmRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxTc2NhbmZGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFN0cnZhbEZhbWlseUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5icm9rZXIuZHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxTdHJXb3JkQ291bnRGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFhNTFJlYWRlck9wZW5SZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNTdGF0aWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFJlZmxlY3Rpb25HZXRBdHRyaWJ1dGVzTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbgoJCWFyZ3VtZW50czoKCQkJY2xhc3NOYW1lOiBSZWZsZWN0aW9uQ2xhc3MKCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxSZWZsZWN0aW9uR2V0QXR0cmlidXRlc01ldGhvZFJldHVyblR5cGVFeHRlbnNpb24KCQlhcmd1bWVudHM6CgkJCWNsYXNzTmFtZTogUmVmbGVjdGlvbkNsYXNzQ29uc3RhbnQKCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxSZWZsZWN0aW9uR2V0QXR0cmlidXRlc01ldGhvZFJldHVyblR5cGVFeHRlbnNpb24KCQlhcmd1bWVudHM6CgkJCWNsYXNzTmFtZTogUmVmbGVjdGlvbkZ1bmN0aW9uQWJzdHJhY3QKCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxSZWZsZWN0aW9uR2V0QXR0cmlidXRlc01ldGhvZFJldHVyblR5cGVFeHRlbnNpb24KCQlhcmd1bWVudHM6CgkJCWNsYXNzTmFtZTogUmVmbGVjdGlvblBhcmFtZXRlcgoKCQl0YWdzOgoJCQktIHBocHN0YW4uYnJva2VyLmR5bmFtaWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFR5cGVcUGhwXFJlZmxlY3Rpb25HZXRBdHRyaWJ1dGVzTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbgoJCWFyZ3VtZW50czoKCQkJY2xhc3NOYW1lOiBSZWZsZWN0aW9uUHJvcGVydHkKCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXFBocFxEYXRlUGVyaW9kQ29uc3RydWN0b3JSZXR1cm5UeXBlRXh0ZW5zaW9uCgkJdGFnczoKCQkJLSBwaHBzdGFuLmJyb2tlci5keW5hbWljU3RhdGljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogUEhQU3RhblxUeXBlXENsb3N1cmVUeXBlRmFjdG9yeQoJCWFyZ3VtZW50czoKCQkJcGFyc2VyOiBAY3VycmVudFBocFZlcnNpb25QaHBQYXJzZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cVHlwZVxDb25zdGFudFxPdmVyc2l6ZWRBcnJheUJ1aWxkZXIKCgktCgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcRnVuY3Rpb25zXFByaW50ZkhlbHBlcgoKCWV4Y2VwdGlvblR5cGVSZXNvbHZlcjoKCQljbGFzczogUEhQU3RhblxSdWxlc1xFeGNlcHRpb25zXEV4Y2VwdGlvblR5cGVSZXNvbHZlcgoJCWZhY3Rvcnk6IEBQSFBTdGFuXFJ1bGVzXEV4Y2VwdGlvbnNcRGVmYXVsdEV4Y2VwdGlvblR5cGVSZXNvbHZlcgoKCXR5cGVTcGVjaWZpZXI6CgkJY2xhc3M6IFBIUFN0YW5cQW5hbHlzZXJcVHlwZVNwZWNpZmllcgoJCWZhY3Rvcnk6IEB0eXBlU3BlY2lmaWVyRmFjdG9yeTo6Y3JlYXRlCgoJdHlwZVNwZWNpZmllckZhY3Rvcnk6CgkJY2xhc3M6IFBIUFN0YW5cQW5hbHlzZXJcVHlwZVNwZWNpZmllckZhY3RvcnkKCglyZWxhdGl2ZVBhdGhIZWxwZXI6CgkJY2xhc3M6IFBIUFN0YW5cRmlsZVxSZWxhdGl2ZVBhdGhIZWxwZXIKCQlmYWN0b3J5OiBQSFBTdGFuXEZpbGVcRnV6enlSZWxhdGl2ZVBhdGhIZWxwZXIKCQlhcmd1bWVudHM6CgkJCWN1cnJlbnRXb3JraW5nRGlyZWN0b3J5OiAlY3VycmVudFdvcmtpbmdEaXJlY3RvcnklCgkJCWFuYWx5c2VkUGF0aHM6ICVhbmFseXNlZFBhdGhzJQoJCQlmYWxsYmFja1JlbGF0aXZlUGF0aEhlbHBlcjogQHBhcmVudERpcmVjdG9yeVJlbGF0aXZlUGF0aEhlbHBlcgoKCXNpbXBsZVJlbGF0aXZlUGF0aEhlbHBlcjoKCQljbGFzczogUEhQU3RhblxGaWxlXFJlbGF0aXZlUGF0aEhlbHBlcgoJCWZhY3Rvcnk6IFBIUFN0YW5cRmlsZVxTaW1wbGVSZWxhdGl2ZVBhdGhIZWxwZXIKCQlhcmd1bWVudHM6CgkJCWN1cnJlbnRXb3JraW5nRGlyZWN0b3J5OiAlY3VycmVudFdvcmtpbmdEaXJlY3RvcnklCgoJCWF1dG93aXJlZDogZmFsc2UKCglwYXJlbnREaXJlY3RvcnlSZWxhdGl2ZVBhdGhIZWxwZXI6CgkJY2xhc3M6IFBIUFN0YW5cRmlsZVxQYXJlbnREaXJlY3RvcnlSZWxhdGl2ZVBhdGhIZWxwZXIKCQlhcmd1bWVudHM6CgkJCXBhcmVudERpcmVjdG9yeTogJWN1cnJlbnRXb3JraW5nRGlyZWN0b3J5JQoKCQlhdXRvd2lyZWQ6IGZhbHNlCgoJYnJva2VyOgoJCWNsYXNzOiBQSFBTdGFuXEJyb2tlclxCcm9rZXIKCQlmYWN0b3J5OiBAYnJva2VyRmFjdG9yeTo6Y3JlYXRlCgkJYXV0b3dpcmVkOgoJCQktIFBIUFN0YW5cQnJva2VyXEJyb2tlcgoKCWJyb2tlckZhY3Rvcnk6CgkJY2xhc3M6IFBIUFN0YW5cQnJva2VyXEJyb2tlckZhY3RvcnkKCgljYWNoZVN0b3JhZ2U6CgkJY2xhc3M6IFBIUFN0YW5cQ2FjaGVcRmlsZUNhY2hlU3RvcmFnZQoJCWFyZ3VtZW50czoKCQkJZGlyZWN0b3J5OiAldG1wRGlyJS9jYWNoZS9QSFBTdGFuCgoJCWF1dG93aXJlZDogZmFsc2UKCgljdXJyZW50UGhwVmVyc2lvblJpY2hQYXJzZXI6CgkJY2xhc3M6IFBIUFN0YW5cUGFyc2VyXFJpY2hQYXJzZXIKCQlhcmd1bWVudHM6CgkJCXBhcnNlcjogQGN1cnJlbnRQaHBWZXJzaW9uUGhwUGFyc2VyCgkJCWxleGVyOiBAY3VycmVudFBocFZlcnNpb25MZXhlcgoJCQllbmFibGVJZ25vcmVFcnJvcnNXaXRoaW5QaHBEb2NzOiAlZmVhdHVyZVRvZ2dsZXMuZW5hYmxlSWdub3JlRXJyb3JzV2l0aGluUGhwRG9jcyUKCgkJYXV0b3dpcmVkOiBmYWxzZQoKCWN1cnJlbnRQaHBWZXJzaW9uU2ltcGxlUGFyc2VyOgoJCWNsYXNzOiBQSFBTdGFuXFBhcnNlclxDbGVhbmluZ1BhcnNlcgoJCWFyZ3VtZW50czoKCQkJd3JhcHBlZFBhcnNlcjogQGN1cnJlbnRQaHBWZXJzaW9uU2ltcGxlRGlyZWN0UGFyc2VyCgoJCWF1dG93aXJlZDogZmFsc2UKCgljdXJyZW50UGhwVmVyc2lvblNpbXBsZURpcmVjdFBhcnNlcjoKCQljbGFzczogUEhQU3RhblxQYXJzZXJcU2ltcGxlUGFyc2VyCgkJYXJndW1lbnRzOgoJCQlwYXJzZXI6IEBjdXJyZW50UGhwVmVyc2lvblBocFBhcnNlcgoKCQlhdXRvd2lyZWQ6IGZhbHNlCgoJZGVmYXVsdEFuYWx5c2lzUGFyc2VyOgoJCWNsYXNzOiBQSFBTdGFuXFBhcnNlclxDYWNoZWRQYXJzZXIKCQlhcmd1bWVudHM6CgkJCW9yaWdpbmFsUGFyc2VyOiBAcGF0aFJvdXRpbmdQYXJzZXIKCQkJY2FjaGVkTm9kZXNCeVN0cmluZ0NvdW50TWF4OiAlY2FjaGUubm9kZXNCeVN0cmluZ0NvdW50TWF4JQoKCQlhdXRvd2lyZWQ6IGZhbHNlCgoJcGhwUGFyc2VyRGVjb3JhdG9yOgoJCWNsYXNzOiBQSFBTdGFuXFBhcnNlclxQaHBQYXJzZXJEZWNvcmF0b3IKCQlhcmd1bWVudHM6CgkJCXdyYXBwZWRQYXJzZXI6IEBkZWZhdWx0QW5hbHlzaXNQYXJzZXIKCgkJYXV0b3dpcmVkOiBmYWxzZQoKCWN1cnJlbnRQaHBWZXJzaW9uTGV4ZXI6CgkJY2xhc3M6IFBocFBhcnNlclxMZXhlcgoJCWZhY3Rvcnk6IEBQSFBTdGFuXFBhcnNlclxMZXhlckZhY3Rvcnk6OmNyZWF0ZSgpCgkJYXV0b3dpcmVkOiBmYWxzZQoKCWN1cnJlbnRQaHBWZXJzaW9uUGhwUGFyc2VyOgoJCWNsYXNzOiBQaHBQYXJzZXJcUGFyc2VyXFBocDcKCQlhcmd1bWVudHM6CgkJCWxleGVyOiBAY3VycmVudFBocFZlcnNpb25MZXhlcgoKCQlhdXRvd2lyZWQ6IGZhbHNlCgoJcmVnaXN0cnk6CgkJY2xhc3M6IFBIUFN0YW5cUnVsZXNcTGF6eVJlZ2lzdHJ5CgkJYXV0b3dpcmVkOgoJCQktIFBIUFN0YW5cUnVsZXNcUmVnaXN0cnkKCglzdHViUGhwRG9jUHJvdmlkZXI6CgkJY2xhc3M6IFBIUFN0YW5cUGhwRG9jXFN0dWJQaHBEb2NQcm92aWRlcgoJCWFyZ3VtZW50czoKCQkJcGFyc2VyOiBAZGVmYXVsdEFuYWx5c2lzUGFyc2VyCgoJcmVmbGVjdGlvblByb3ZpZGVyRmFjdG9yeToKCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXFJlZmxlY3Rpb25Qcm92aWRlclxSZWZsZWN0aW9uUHJvdmlkZXJGYWN0b3J5CgkJYXJndW1lbnRzOgoJCQlzdGF0aWNSZWZsZWN0aW9uUHJvdmlkZXI6IEBiZXR0ZXJSZWZsZWN0aW9uUHJvdmlkZXIKCglyZWZsZWN0aW9uUHJvdmlkZXI6CgkJZmFjdG9yeTogQFBIUFN0YW5cUmVmbGVjdGlvblxSZWZsZWN0aW9uUHJvdmlkZXJcUmVmbGVjdGlvblByb3ZpZGVyRmFjdG9yeTo6Y3JlYXRlCgkJYXV0b3dpcmVkOgoJCQktIFBIUFN0YW5cUmVmbGVjdGlvblxSZWZsZWN0aW9uUHJvdmlkZXIKCgliZXR0ZXJSZWZsZWN0aW9uU291cmNlTG9jYXRvcjoKCQljbGFzczogUEhQU3RhblxCZXR0ZXJSZWZsZWN0aW9uXFNvdXJjZUxvY2F0b3JcVHlwZVxTb3VyY2VMb2NhdG9yCgkJZmFjdG9yeTogQFBIUFN0YW5cUmVmbGVjdGlvblxCZXR0ZXJSZWZsZWN0aW9uXEJldHRlclJlZmxlY3Rpb25Tb3VyY2VMb2NhdG9yRmFjdG9yeTo6Y3JlYXRlCgkJYXV0b3dpcmVkOiBmYWxzZQoKCW9yaWdpbmFsQmV0dGVyUmVmbGVjdGlvblJlZmxlY3RvcjoKCQljbGFzczogUEhQU3RhblxCZXR0ZXJSZWZsZWN0aW9uXFJlZmxlY3RvclxEZWZhdWx0UmVmbGVjdG9yCgkJYXJndW1lbnRzOgoJCQlzb3VyY2VMb2NhdG9yOiBAYmV0dGVyUmVmbGVjdGlvblNvdXJjZUxvY2F0b3IKCgliZXR0ZXJSZWZsZWN0aW9uUmVmbGVjdG9yOgoJCWNsYXNzOiBQSFBTdGFuXFJlZmxlY3Rpb25cQmV0dGVyUmVmbGVjdGlvblxSZWZsZWN0b3JcTWVtb2l6aW5nUmVmbGVjdG9yCgkJYXJndW1lbnRzOgoJCQlyZWZsZWN0b3I6IEBvcmlnaW5hbEJldHRlclJlZmxlY3Rpb25SZWZsZWN0b3IKCgkJYXV0b3dpcmVkOiBmYWxzZQoKCWJldHRlclJlZmxlY3Rpb25DbGFzc1JlZmxlY3RvcjoKCQljbGFzczogUEhQU3RhblxCZXR0ZXJSZWZsZWN0aW9uXFJlZmxlY3RvclxDbGFzc1JlZmxlY3RvcgoJCWFyZ3VtZW50czoKCQkJc291cmNlTG9jYXRvcjogQGJldHRlclJlZmxlY3Rpb25Tb3VyY2VMb2NhdG9yCgoJCWF1dG93aXJlZDogZmFsc2UKCgliZXR0ZXJSZWZsZWN0aW9uRnVuY3Rpb25SZWZsZWN0b3I6CgkJY2xhc3M6IFBIUFN0YW5cQmV0dGVyUmVmbGVjdGlvblxSZWZsZWN0b3JcRnVuY3Rpb25SZWZsZWN0b3IKCQlhcmd1bWVudHM6CgkJCXNvdXJjZUxvY2F0b3I6IEBiZXR0ZXJSZWZsZWN0aW9uU291cmNlTG9jYXRvcgoKCQlhdXRvd2lyZWQ6IGZhbHNlCgoJYmV0dGVyUmVmbGVjdGlvbkNvbnN0YW50UmVmbGVjdG9yOgoJCWNsYXNzOiBQSFBTdGFuXEJldHRlclJlZmxlY3Rpb25cUmVmbGVjdG9yXENvbnN0YW50UmVmbGVjdG9yCgkJYXJndW1lbnRzOgoJCQlzb3VyY2VMb2NhdG9yOiBAYmV0dGVyUmVmbGVjdGlvblNvdXJjZUxvY2F0b3IKCgkJYXV0b3dpcmVkOiBmYWxzZQoKCW5vZGVTY29wZVJlc29sdmVyUmVmbGVjdG9yOgoJCWZhY3Rvcnk6IEBiZXR0ZXJSZWZsZWN0aW9uUmVmbGVjdG9yCgkJYXV0b3dpcmVkOiBmYWxzZQoKCWJldHRlclJlZmxlY3Rpb25Qcm92aWRlcjoKCQljbGFzczogUEhQU3RhblxSZWZsZWN0aW9uXEJldHRlclJlZmxlY3Rpb25cQmV0dGVyUmVmbGVjdGlvblByb3ZpZGVyCgkJYXJndW1lbnRzOgoJCQlyZWZsZWN0b3I6IEBiZXR0ZXJSZWZsZWN0aW9uUmVmbGVjdG9yCgkJCXVuaXZlcnNhbE9iamVjdENyYXRlc0NsYXNzZXM6ICV1bml2ZXJzYWxPYmplY3RDcmF0ZXNDbGFzc2VzJQoKCQlhdXRvd2lyZWQ6IGZhbHNlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJlZmxlY3Rpb25cQmV0dGVyUmVmbGVjdGlvblxCZXR0ZXJSZWZsZWN0aW9uU291cmNlTG9jYXRvckZhY3RvcnkKCQlhcmd1bWVudHM6CgkJCXBhcnNlcjogQHBocFBhcnNlckRlY29yYXRvcgoJCQlwaHA4UGFyc2VyOiBAcGhwOFBocFBhcnNlcgoJCQlzY2FuRmlsZXM6ICVzY2FuRmlsZXMlCgkJCXNjYW5EaXJlY3RvcmllczogJXNjYW5EaXJlY3RvcmllcyUKCQkJYW5hbHlzZWRQYXRoczogJWFuYWx5c2VkUGF0aHMlCgkJCWNvbXBvc2VyQXV0b2xvYWRlclByb2plY3RQYXRoczogJWNvbXBvc2VyQXV0b2xvYWRlclByb2plY3RQYXRocyUKCQkJYW5hbHlzZWRQYXRoc0Zyb21Db25maWc6ICVhbmFseXNlZFBhdGhzRnJvbUNvbmZpZyUKCQkJcGxheWdyb3VuZE1vZGU6ICVzb3VyY2VMb2NhdG9yUGxheWdyb3VuZE1vZGUlCgkJCXNpbmdsZVJlZmxlY3Rpb25GaWxlOiAlc2luZ2xlUmVmbGVjdGlvbkZpbGUlCgoJLQoJCWltcGxlbWVudDogUEhQU3RhblxSZWZsZWN0aW9uXEJldHRlclJlZmxlY3Rpb25cQmV0dGVyUmVmbGVjdGlvblByb3ZpZGVyRmFjdG9yeQoJCWFyZ3VtZW50czoKCQkJdW5pdmVyc2FsT2JqZWN0Q3JhdGVzQ2xhc3NlczogJXVuaXZlcnNhbE9iamVjdENyYXRlc0NsYXNzZXMlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJlZmxlY3Rpb25cQmV0dGVyUmVmbGVjdGlvblxTb3VyY2VTdHViYmVyXFBocFN0b3JtU3R1YnNTb3VyY2VTdHViYmVyRmFjdG9yeQoJCWFyZ3VtZW50czoKCQkJcGhwUGFyc2VyOiBAcGhwOFBocFBhcnNlcgoKCS0KCQlmYWN0b3J5OiBAUEhQU3RhblxSZWZsZWN0aW9uXEJldHRlclJlZmxlY3Rpb25cU291cmNlU3R1YmJlclxQaHBTdG9ybVN0dWJzU291cmNlU3R1YmJlckZhY3Rvcnk6OmNyZWF0ZSgpCgkJYXV0b3dpcmVkOgoJCQktIFBIUFN0YW5cQmV0dGVyUmVmbGVjdGlvblxTb3VyY2VMb2NhdG9yXFNvdXJjZVN0dWJiZXJcUGhwU3Rvcm1TdHVic1NvdXJjZVN0dWJiZXIKCgktCgkJZmFjdG9yeTogQFBIUFN0YW5cUmVmbGVjdGlvblxCZXR0ZXJSZWZsZWN0aW9uXFNvdXJjZVN0dWJiZXJcUmVmbGVjdGlvblNvdXJjZVN0dWJiZXJGYWN0b3J5OjpjcmVhdGUoKQoJCWF1dG93aXJlZDoKCQkJLSBQSFBTdGFuXEJldHRlclJlZmxlY3Rpb25cU291cmNlTG9jYXRvclxTb3VyY2VTdHViYmVyXFJlZmxlY3Rpb25Tb3VyY2VTdHViYmVyCgoJLQoJCWNsYXNzOiBQSFBTdGFuXFJlZmxlY3Rpb25cQmV0dGVyUmVmbGVjdGlvblxTb3VyY2VTdHViYmVyXFJlZmxlY3Rpb25Tb3VyY2VTdHViYmVyRmFjdG9yeQoKCXBocDhMZXhlcjoKCQljbGFzczogUGhwUGFyc2VyXExleGVyXEVtdWxhdGl2ZQoJCWZhY3Rvcnk6IEBQSFBTdGFuXFBhcnNlclxMZXhlckZhY3Rvcnk6OmNyZWF0ZUVtdWxhdGl2ZSgpCgkJYXV0b3dpcmVkOiBmYWxzZQoKCXBocDhQaHBQYXJzZXI6CgkJY2xhc3M6IFBocFBhcnNlclxQYXJzZXJcUGhwNwoJCWFyZ3VtZW50czoKCQkJbGV4ZXI6IEBwaHA4TGV4ZXIKCgkJYXV0b3dpcmVkOiBmYWxzZQoKCXBocDhQYXJzZXI6CgkJY2xhc3M6IFBIUFN0YW5cUGFyc2VyXFNpbXBsZVBhcnNlcgoJCWFyZ3VtZW50czoKCQkJcGFyc2VyOiBAcGhwOFBocFBhcnNlcgoKCQlhdXRvd2lyZWQ6IGZhbHNlCgoJcGF0aFJvdXRpbmdQYXJzZXI6CgkJY2xhc3M6IFBIUFN0YW5cUGFyc2VyXFBhdGhSb3V0aW5nUGFyc2VyCgkJYXJndW1lbnRzOgoJCQljdXJyZW50UGhwVmVyc2lvblJpY2hQYXJzZXI6IEBjdXJyZW50UGhwVmVyc2lvblJpY2hQYXJzZXIKCQkJY3VycmVudFBocFZlcnNpb25TaW1wbGVQYXJzZXI6IEBjdXJyZW50UGhwVmVyc2lvblNpbXBsZVBhcnNlcgoJCQlwaHA4UGFyc2VyOiBAcGhwOFBhcnNlcgoJCQlzaW5nbGVSZWZsZWN0aW9uRmlsZTogJXNpbmdsZVJlZmxlY3Rpb25GaWxlJQoKCQlhdXRvd2lyZWQ6IGZhbHNlCgoJcGhwc3RhbkRpYWdub3NlRXh0ZW5zaW9uOgoJCWNsYXNzOiBQSFBTdGFuXERpYWdub3NlXFBIUFN0YW5EaWFnbm9zZUV4dGVuc2lvbgoJCWFyZ3VtZW50czoKCQkJY29tcG9zZXJBdXRvbG9hZGVyUHJvamVjdFBhdGhzOiAlY29tcG9zZXJBdXRvbG9hZGVyUHJvamVjdFBhdGhzJQoJCQlhbGxDb25maWdGaWxlczogJWFsbENvbmZpZ0ZpbGVzJQoKCQlhdXRvd2lyZWQ6IGZhbHNlCgoJLQoJCWNsYXNzOiBQSFBTdGFuXENvbW1hbmRcRXJyb3JGb3JtYXR0ZXJcQ2lEZXRlY3RlZEVycm9yRm9ybWF0dGVyCgkJYXV0b3dpcmVkOgoJCQktIFBIUFN0YW5cQ29tbWFuZFxFcnJvckZvcm1hdHRlclxDaURldGVjdGVkRXJyb3JGb3JtYXR0ZXIKCgllcnJvckZvcm1hdHRlci5yYXc6CgkJY2xhc3M6IFBIUFN0YW5cQ29tbWFuZFxFcnJvckZvcm1hdHRlclxSYXdFcnJvckZvcm1hdHRlcgoKCWVycm9yRm9ybWF0dGVyLnRhYmxlOgoJCWNsYXNzOiBQSFBTdGFuXENvbW1hbmRcRXJyb3JGb3JtYXR0ZXJcVGFibGVFcnJvckZvcm1hdHRlcgoJCWFyZ3VtZW50czoKCQkJc2ltcGxlUmVsYXRpdmVQYXRoSGVscGVyOiBAc2ltcGxlUmVsYXRpdmVQYXRoSGVscGVyCgkJCXNob3dUaXBzT2ZUaGVEYXk6ICV0aXBzT2ZUaGVEYXklCgkJCWVkaXRvclVybDogJWVkaXRvclVybCUKCQkJZWRpdG9yVXJsVGl0bGU6ICVlZGl0b3JVcmxUaXRsZSUKCgllcnJvckZvcm1hdHRlci5jaGVja3N0eWxlOgoJCWNsYXNzOiBQSFBTdGFuXENvbW1hbmRcRXJyb3JGb3JtYXR0ZXJcQ2hlY2tzdHlsZUVycm9yRm9ybWF0dGVyCgkJYXJndW1lbnRzOgoJCQlyZWxhdGl2ZVBhdGhIZWxwZXI6IEBzaW1wbGVSZWxhdGl2ZVBhdGhIZWxwZXIKCgllcnJvckZvcm1hdHRlci5qc29uOgoJCWNsYXNzOiBQSFBTdGFuXENvbW1hbmRcRXJyb3JGb3JtYXR0ZXJcSnNvbkVycm9yRm9ybWF0dGVyCgkJYXJndW1lbnRzOgoJCQlwcmV0dHk6IGZhbHNlCgoJZXJyb3JGb3JtYXR0ZXIuanVuaXQ6CgkJY2xhc3M6IFBIUFN0YW5cQ29tbWFuZFxFcnJvckZvcm1hdHRlclxKdW5pdEVycm9yRm9ybWF0dGVyCgkJYXJndW1lbnRzOgoJCQlyZWxhdGl2ZVBhdGhIZWxwZXI6IEBzaW1wbGVSZWxhdGl2ZVBhdGhIZWxwZXIKCgllcnJvckZvcm1hdHRlci5wcmV0dHlKc29uOgoJCWNsYXNzOiBQSFBTdGFuXENvbW1hbmRcRXJyb3JGb3JtYXR0ZXJcSnNvbkVycm9yRm9ybWF0dGVyCgkJYXJndW1lbnRzOgoJCQlwcmV0dHk6IHRydWUKCgllcnJvckZvcm1hdHRlci5naXRsYWI6CgkJY2xhc3M6IFBIUFN0YW5cQ29tbWFuZFxFcnJvckZvcm1hdHRlclxHaXRsYWJFcnJvckZvcm1hdHRlcgoJCWFyZ3VtZW50czoKCQkJcmVsYXRpdmVQYXRoSGVscGVyOiBAc2ltcGxlUmVsYXRpdmVQYXRoSGVscGVyCgoJZXJyb3JGb3JtYXR0ZXIuZ2l0aHViOgoJCWNsYXNzOiBQSFBTdGFuXENvbW1hbmRcRXJyb3JGb3JtYXR0ZXJcR2l0aHViRXJyb3JGb3JtYXR0ZXIKCQlhcmd1bWVudHM6CgkJCXJlbGF0aXZlUGF0aEhlbHBlcjogQHNpbXBsZVJlbGF0aXZlUGF0aEhlbHBlcgoKCWVycm9yRm9ybWF0dGVyLnRlYW1jaXR5OgoJCWNsYXNzOiBQSFBTdGFuXENvbW1hbmRcRXJyb3JGb3JtYXR0ZXJcVGVhbWNpdHlFcnJvckZvcm1hdHRlcgoJCWFyZ3VtZW50czoKCQkJcmVsYXRpdmVQYXRoSGVscGVyOiBAc2ltcGxlUmVsYXRpdmVQYXRoSGVscGVyCgppbmNsdWRlczoKCS0gY29uZmlnLmxldmVsMC5uZW9uCgpwYXJhbWV0ZXJzOgoJY2hlY2tNYXliZVVuZGVmaW5lZFZhcmlhYmxlczogdHJ1ZQoJY2hlY2tFeHRyYUFyZ3VtZW50czogdHJ1ZQoJcmVwb3J0TWFnaWNNZXRob2RzOiB0cnVlCglyZXBvcnRNYWdpY1Byb3BlcnRpZXM6IHRydWUKCnJ1bGVzOgoJLSBQSFBTdGFuXFJ1bGVzXENsYXNzZXNcVW51c2VkQ29uc3RydWN0b3JQYXJhbWV0ZXJzUnVsZQoJLSBQSFBTdGFuXFJ1bGVzXENvbnN0YW50c1xDb25zdGFudFJ1bGUKCS0gUEhQU3RhblxSdWxlc1xGdW5jdGlvbnNcVW51c2VkQ2xvc3VyZVVzZXNSdWxlCgktIFBIUFN0YW5cUnVsZXNcVmFyaWFibGVzXEVtcHR5UnVsZQoJLSBQSFBTdGFuXFJ1bGVzXFZhcmlhYmxlc1xJc3NldFJ1bGUKCS0gUEhQU3RhblxSdWxlc1xWYXJpYWJsZXNcTnVsbENvYWxlc2NlUnVsZQoKPD9waHAKCi8qKgogKiBAcGFyYW0gYXJyYXk8cmVzb3VyY2U+fG51bGwgJiRyZWFkCiAqIEBwYXJhbSBhcnJheTxyZXNvdXJjZT58bnVsbCAmJHdyaXRlCiAqIEBwYXJhbSBhcnJheTxyZXNvdXJjZT58bnVsbCAmJGV4Y2VwdAogKiBAcGFyYW0tb3V0ICgkcmVhZCBpcyBub3QgbnVsbCA/IGFycmF5PHJlc291cmNlPiA6IG51bGwpICRyZWFkCiAqIEBwYXJhbS1vdXQgKCR3cml0ZSBpcyBub3QgbnVsbCA/IGFycmF5PHJlc291cmNlPiA6IG51bGwpICR3cml0ZQogKiBAcGFyYW0tb3V0ICgkZXhjZXB0IGlzIG5vdCBudWxsID8gYXJyYXk8cmVzb3VyY2U+IDogbnVsbCkgJGV4Y2VwdAogKiBAcmV0dXJuIGludHxmYWxzZQogKi8KZnVuY3Rpb24gc29ja2V0X3NlbGVjdCg/YXJyYXkgJiRyZWFkLCA/YXJyYXkgJiR3cml0ZSwgP2FycmF5ICYkZXhjZXB0LCA/aW50ICRzZWNvbmRzLCBpbnQgJG1pY3Jvc2Vjb25kcyA9IDApIHt9Cjw/cGhwCgppbnRlcmZhY2UgQ291bnRhYmxlCnsKICAgIC8qKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludDsKfQo8P3BocAoKY2xhc3MgRE9NRG9jdW1lbnQKewoKCS8qKiBAdmFyIERPTURvY3VtZW50VHlwZXxudWxsICovCglwdWJsaWMgJGRvY3R5cGU7CgoJLyoqIEB2YXIgRE9NRWxlbWVudHxudWxsICovCglwdWJsaWMgJGRvY3VtZW50RWxlbWVudDsKCgkvKiogQHZhciBudWxsICovCglwdWJsaWMgJG93bmVyRG9jdW1lbnQ7CgoJLyoqCgkgKiBAcGFyYW0gc3RyaW5nICRuYW1lCgkgKiBAcmV0dXJuIERPTU5vZGVMaXN0PERPTUVsZW1lbnQ+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZSAoJG5hbWUpIHt9CgoJLyoqCgkgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2VVUkkKCSAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsTmFtZQoJICogQHJldHVybiBET01Ob2RlTGlzdDxET01FbGVtZW50PgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyAoJG5hbWVzcGFjZVVSSSwgJGxvY2FsTmFtZSkge30KCn0KCmNsYXNzIERPTU5vZGUKewoKfQoKY2xhc3MgRE9NRWxlbWVudCBleHRlbmRzIERPTU5vZGUKewoKCS8qKiBAdmFyIERPTURvY3VtZW50ICovCglwdWJsaWMgJG93bmVyRG9jdW1lbnQ7CgoJLyoqCgkgKiBAcGFyYW0gc3RyaW5nICRuYW1lCgkgKiBAcmV0dXJuIERPTU5vZGVMaXN0PERPTUVsZW1lbnQ+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZSAoJG5hbWUpIHt9CgoJLyoqCgkgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2VVUkkKCSAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsTmFtZQoJICogQHJldHVybiBET01Ob2RlTGlzdDxET01FbGVtZW50PgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyAoJG5hbWVzcGFjZVVSSSwgJGxvY2FsTmFtZSkge30KCn0KCi8qKgogKiBAdGVtcGxhdGUtY292YXJpYW50IFROb2RlIGFzIERPTU5vZGUKICogQGltcGxlbWVudHMgVHJhdmVyc2FibGU8aW50LCBUTm9kZT4KICogQGltcGxlbWVudHMgSXRlcmF0b3JBZ2dyZWdhdGU8aW50LCBUTm9kZT4KICovCmNsYXNzIERPTU5vZGVMaXN0IGltcGxlbWVudHMgVHJhdmVyc2FibGUsIEl0ZXJhdG9yQWdncmVnYXRlLCBDb3VudGFibGUKewoKCS8qKgoJICogQHBhcmFtIGludCAkaW5kZXgKCSAqIEByZXR1cm4gVE5vZGV8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gaXRlbSAoJGluZGV4KSB7fQoKfQoKY2xhc3MgRE9NWFBhdGgKewoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZXhwcmVzc2lvbgogICAgICogQHBhcmFtIERPTU5vZGV8bnVsbCAkY29udGV4dE5vZGUKICAgICAqIEBwYXJhbSBib29sZWFuICRyZWdpc3Rlck5vZGVOUwogICAgICogQHJldHVybiBET01Ob2RlTGlzdDxET01Ob2RlPnxmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVlcnkoJGV4cHJlc3Npb24sICRjb250ZXh0Tm9kZSwgJHJlZ2lzdGVyTm9kZU5TKSB7fQoKfQoKY2xhc3MgRE9NQXR0cgp7CgoJLyoqIEB2YXIgRE9NRG9jdW1lbnQgKi8KCXB1YmxpYyAkb3duZXJEb2N1bWVudDsKCn0KCmNsYXNzIERPTUNoYXJhY3RlckRhdGEKewoKCS8qKiBAdmFyIERPTURvY3VtZW50ICovCglwdWJsaWMgJG93bmVyRG9jdW1lbnQ7Cgp9CgpjbGFzcyBET01Eb2N1bWVudFR5cGUKewoKCS8qKiBAdmFyIERPTURvY3VtZW50ICovCglwdWJsaWMgJG93bmVyRG9jdW1lbnQ7Cgp9CgpjbGFzcyBET01FbnRpdHkKewoKCS8qKiBAdmFyIERPTURvY3VtZW50ICovCglwdWJsaWMgJG93bmVyRG9jdW1lbnQ7Cgp9CgpjbGFzcyBET01Ob3RhdGlvbgp7CgoJLyoqIEB2YXIgRE9NRG9jdW1lbnQgKi8KCXB1YmxpYyAkb3duZXJEb2N1bWVudDsKCn0KCmNsYXNzIERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbgp7CgoJLyoqIEB2YXIgRE9NRG9jdW1lbnQgKi8KCXB1YmxpYyAkb3duZXJEb2N1bWVudDsKCgkvKioKCSAqIEB2YXIgc3RyaW5nCgkgKi8KCXB1YmxpYyAkdGFyZ2V0OwoKCS8qKgoJICogQHZhciBzdHJpbmcKCSAqLwoJcHVibGljICRkYXRhOwoKfQoKLyoqCiAqIEBwcm9wZXJ0eS1yZWFkIGludCAkbGVuZ3RoCiAqLwpjbGFzcyBET01OYW1lZE5vZGVNYXAKewoKfQoKY2xhc3MgRE9NVGV4dAp7CgoJLyoqIEB2YXIgc3RyaW5nICovCglwdWJsaWMgJHdob2xlVGV4dDsKCn0KPD9waHAKCmNsYXNzIFJlZmxlY3Rpb25NZXRob2QKewoKCS8qKgoJICogQHZhciBjbGFzcy1zdHJpbmcKCSAqLwoJcHVibGljICRjbGFzczsKCgkvKioKCSAqIEB2YXIgbm9uLWZhbHN5LXN0cmluZwoJICovCglwdWJsaWMgJG5hbWU7Cgp9Cjw/cGhwCgpuYW1lc3BhY2UgRHM7Cgp1c2UgQXJyYXlBY2Nlc3M7CnVzZSBDb3VudGFibGU7CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgT3V0T2ZCb3VuZHNFeGNlcHRpb247CnVzZSBPdXRPZlJhbmdlRXhjZXB0aW9uOwp1c2UgSXRlcmF0b3JBZ2dyZWdhdGU7CnVzZSBVbmRlcmZsb3dFeGNlcHRpb247CgovKioKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUS2V5CiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVFZhbHVlCiAqIEBleHRlbmRzIEl0ZXJhdG9yQWdncmVnYXRlPFRLZXksIFRWYWx1ZT4KICovCmludGVyZmFjZSBDb2xsZWN0aW9uIGV4dGVuZHMgSXRlcmF0b3JBZ2dyZWdhdGUsIENvdW50YWJsZSwgSnNvblNlcmlhbGl6YWJsZQp7CgkvKioKCSAqIEByZXR1cm4gc3RhdGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBjb3B5KCk7CgoJLyoqCgkgKiBAcmV0dXJuIGFycmF5PFRLZXksIFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTogYXJyYXk7Cn0KCi8qKgogKiBAdGVtcGxhdGUgVFZhbHVlCiAqIEBpbXBsZW1lbnRzIFNlcXVlbmNlPFRWYWx1ZT4KICovCmZpbmFsIGNsYXNzIERlcXVlIGltcGxlbWVudHMgU2VxdWVuY2UKewoJLyoqCgkgKiBAcGFyYW0gaXRlcmFibGU8VFZhbHVlPiAkdmFsdWVzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpdGVyYWJsZSAkdmFsdWVzID0gW10pCgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIERlcXVlPFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNvcHkoKQoJewoJfQoKCS8qKgoJICogQHRlbXBsYXRlIFRWYWx1ZTIKCSAqIEBwYXJhbSBpdGVyYWJsZTxUVmFsdWUyPiAkdmFsdWVzCgkgKiBAcmV0dXJuIERlcXVlPFRWYWx1ZXxUVmFsdWUyPgoJICovCglwdWJsaWMgZnVuY3Rpb24gbWVyZ2UoaXRlcmFibGUgJHZhbHVlcyk6IERlcXVlCgl7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gKGNhbGxhYmxlKFRWYWx1ZSk6IGJvb2wpfG51bGwgJGNhbGxiYWNrCgkgKiBAcmV0dXJuIERlcXVlPFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGZpbHRlcig/Y2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCk6IERlcXVlCgl7Cgl9CgoJLyoqCgkgKiBAdGVtcGxhdGUgVE5ld1ZhbHVlCgkgKiBAcGFyYW0gY2FsbGFibGUoVFZhbHVlKTogVE5ld1ZhbHVlICRjYWxsYmFjawoJICogQHJldHVybiBEZXF1ZTxUTmV3VmFsdWU+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBtYXAoY2FsbGFibGUgJGNhbGxiYWNrKTogRGVxdWUKCXsKCX0KCgkvKioKCSAqIEByZXR1cm4gRGVxdWU8VFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gcmV2ZXJzZWQoKTogRGVxdWUKCXsKCX0KCgkvKioKCSAqIEByZXR1cm4gRGVxdWU8VFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2xpY2UoaW50ICRvZmZzZXQsID9pbnQgJGxlbmd0aCA9IG51bGwpOiBEZXF1ZQoJewoJfQp9CgovKioKICogQHRlbXBsYXRlIFRLZXkKICogQHRlbXBsYXRlIFRWYWx1ZQogKiBAaW1wbGVtZW50cyBDb2xsZWN0aW9uPFRLZXksIFRWYWx1ZT4KICogQGltcGxlbWVudHMgQXJyYXlBY2Nlc3M8VEtleSwgVFZhbHVlPgogKi8KZmluYWwgY2xhc3MgTWFwIGltcGxlbWVudHMgQ29sbGVjdGlvbiwgQXJyYXlBY2Nlc3MKewoJLyoqCgkgKiBAcGFyYW0gaXRlcmFibGU8VEtleSwgVFZhbHVlPiAkdmFsdWVzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpdGVyYWJsZSAkdmFsdWVzID0gW10pCgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIE1hcDxUS2V5LCBUVmFsdWU+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBjb3B5KCk6IE1hcAoJewoJfQoKCS8qKgoJICogQHBhcmFtIGNhbGxhYmxlKFRLZXksIFRWYWx1ZSk6IFRWYWx1ZSAkY2FsbGJhY2sKCSAqIEByZXR1cm4gdm9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gYXBwbHkoY2FsbGFibGUgJGNhbGxiYWNrKQoJewoJfQoKCS8qKgoJICogQHJldHVybiBQYWlyPFRLZXksIFRWYWx1ZT4KCSAqIEB0aHJvd3MgVW5kZXJmbG93RXhjZXB0aW9uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBmaXJzdCgpOiBQYWlyCgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIFBhaXI8VEtleSwgVFZhbHVlPgoJICogQHRocm93cyBVbmRlcmZsb3dFeGNlcHRpb24KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGxhc3QoKTogUGFpcgoJewoJfQoKCS8qKgoJICogQHJldHVybiBQYWlyPFRLZXksIFRWYWx1ZT4KCSAqIEB0aHJvd3MgT3V0T2ZSYW5nZUV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2tpcChpbnQgJHBvc2l0aW9uKTogUGFpcgoJewoJfQoKCS8qKgoJICogQHRlbXBsYXRlIFRLZXkyCgkgKiBAdGVtcGxhdGUgVFZhbHVlMgoJICogQHBhcmFtIGl0ZXJhYmxlPFRLZXkyLCBUVmFsdWUyPiAkdmFsdWVzCgkgKiBAcmV0dXJuIE1hcDxUS2V5fFRLZXkyLCBUVmFsdWV8VFZhbHVlMj4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIG1lcmdlKGl0ZXJhYmxlICR2YWx1ZXMpOiBNYXAKCXsKCX0KCgkvKioKCSAqIEB0ZW1wbGF0ZSBUS2V5MgoJICogQHRlbXBsYXRlIFRWYWx1ZTIKCSAqIEBwYXJhbSBNYXA8VEtleTIsIFRWYWx1ZTI+ICRtYXAKCSAqIEByZXR1cm4gTWFwPFRLZXkmVEtleTIsIFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGludGVyc2VjdChNYXAgJG1hcCk6IE1hcAoJewoJfQoKCS8qKgoJICogQHRlbXBsYXRlIFRWYWx1ZTIKCSAqIEBwYXJhbSBNYXA8VEtleSwgVFZhbHVlMj4gJG1hcAoJICogQHJldHVybiBNYXA8VEtleSwgVFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gZGlmZihNYXAgJG1hcCk6IE1hcAoJewoJfQoKCS8qKgoJICogQHBhcmFtIFRLZXkgJGtleQoJICovCglwdWJsaWMgZnVuY3Rpb24gaGFzS2V5KCRrZXkpOiBib29sCgl7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gVFZhbHVlICR2YWx1ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gaGFzVmFsdWUoJHZhbHVlKTogYm9vbAoJewoJfQoKCS8qKgoJICogQHBhcmFtIChjYWxsYWJsZShUS2V5LCBUVmFsdWUpOiBib29sKXxudWxsICRjYWxsYmFjawoJICogQHJldHVybiBNYXA8VEtleSwgVFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gZmlsdGVyKD9jYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsKTogTWFwCgl7Cgl9CgoJLyoqCgkgKiBAdGVtcGxhdGUgVERlZmF1bHQKCSAqIEBwYXJhbSBUS2V5ICRrZXkKCSAqIEBwYXJhbSBURGVmYXVsdCAkZGVmYXVsdAoJICogQHJldHVybiBUVmFsdWV8VERlZmF1bHQKCSAqIEB0aHJvd3MgT3V0T2ZCb3VuZHNFeGNlcHRpb24KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldCgka2V5LCAkZGVmYXVsdCA9IG51bGwpCgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIFNldDxUS2V5PgoJICovCglwdWJsaWMgZnVuY3Rpb24ga2V5cygpOiBTZXQKCXsKCX0KCgkvKioKCSAqIEB0ZW1wbGF0ZSBUTmV3VmFsdWUKCSAqIEBwYXJhbSBjYWxsYWJsZShUS2V5LCBUVmFsdWUpOiBUTmV3VmFsdWUgJGNhbGxiYWNrCgkgKiBAcmV0dXJuIE1hcDxUS2V5LCBUTmV3VmFsdWU+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBtYXAoY2FsbGFibGUgJGNhbGxiYWNrKTogTWFwCgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIFNlcXVlbmNlPFBhaXI8VEtleSwgVFZhbHVlPj4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHBhaXJzKCk6IFNlcXVlbmNlCgl7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gVEtleSAka2V5CgkgKiBAcGFyYW0gVFZhbHVlICR2YWx1ZQoJICogQHJldHVybiB2b2lkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBwdXQoJGtleSwgJHZhbHVlKQoJewoJfQoKCS8qKgoJICogQHBhcmFtIGl0ZXJhYmxlPFRLZXksIFRWYWx1ZT4gJHZhbHVlcwoJICogQHJldHVybiB2b2lkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBwdXRBbGwoaXRlcmFibGUgJHZhbHVlcykKCXsKCX0KCgkvKioKCSAqIEB0ZW1wbGF0ZSBUQ2FycnkKCSAqIEBwYXJhbSBjYWxsYWJsZShUQ2FycnksIFRLZXksIFRWYWx1ZSk6IFRDYXJyeSAkY2FsbGJhY2sKCSAqIEBwYXJhbSBUQ2FycnkgJGluaXRpYWwKCSAqIEByZXR1cm4gVENhcnJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiByZWR1Y2UoY2FsbGFibGUgJGNhbGxiYWNrLCAkaW5pdGlhbCA9IG51bGwpCgl7Cgl9CgoJLyoqCgkgKiBAdGVtcGxhdGUgVERlZmF1bHQKCSAqIEBwYXJhbSBUS2V5ICRrZXkKCSAqIEBwYXJhbSBURGVmYXVsdCAkZGVmYXVsdAoJICogQHJldHVybiBUVmFsdWV8VERlZmF1bHQKCSAqIEB0aHJvd3MgXE91dE9mQm91bmRzRXhjZXB0aW9uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiByZW1vdmUoJGtleSwgJGRlZmF1bHQgPSBudWxsKQoJewoJfQoKCS8qKgoJICogQHJldHVybiBNYXA8VEtleSwgVFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gcmV2ZXJzZWQoKTogTWFwCgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIE1hcDxUS2V5LCBUVmFsdWU+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzbGljZShpbnQgJG9mZnNldCwgP2ludCAkbGVuZ3RoID0gbnVsbCk6IE1hcAoJewoJfQoKCS8qKgoJICogQHBhcmFtIChjYWxsYWJsZShUVmFsdWUsIFRWYWx1ZSk6IGludCl8bnVsbCAkY29tcGFyYXRvcgoJICogQHJldHVybiB2b2lkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzb3J0KD9jYWxsYWJsZSAkY29tcGFyYXRvciA9IG51bGwpCgl7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gKGNhbGxhYmxlKFRWYWx1ZSwgVFZhbHVlKTogaW50KXxudWxsICRjb21wYXJhdG9yCgkgKiBAcmV0dXJuIE1hcDxUS2V5LCBUVmFsdWU+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzb3J0ZWQoP2NhbGxhYmxlICRjb21wYXJhdG9yID0gbnVsbCk6IE1hcAoJewoJfQoKCS8qKgoJICogQHBhcmFtIChjYWxsYWJsZShUS2V5LCBUS2V5KTogaW50KXxudWxsICRjb21wYXJhdG9yCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGtzb3J0KD9jYWxsYWJsZSAkY29tcGFyYXRvciA9IG51bGwpCgl7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gKGNhbGxhYmxlKFRLZXksIFRLZXkpOiBpbnQpfG51bGwgJGNvbXBhcmF0b3IKCSAqIEByZXR1cm4gTWFwPFRLZXksIFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGtzb3J0ZWQoP2NhbGxhYmxlICRjb21wYXJhdG9yID0gbnVsbCk6IE1hcAoJewoJfQoKCS8qKgoJICogQHJldHVybiBhcnJheTxUS2V5LCBUVmFsdWU+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk6IGFycmF5Cgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIFNlcXVlbmNlPFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHZhbHVlcygpOiBTZXF1ZW5jZQoJewoJfQoKCS8qKgoJICogQHRlbXBsYXRlIFRLZXkyCgkgKiBAdGVtcGxhdGUgVFZhbHVlMgoJICogQHBhcmFtIE1hcDxUS2V5MiwgVFZhbHVlMj4gJG1hcAoJICogQHJldHVybiBNYXA8VEtleXxUS2V5MiwgVFZhbHVlfFRWYWx1ZTI+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB1bmlvbihNYXAgJG1hcCk6IE1hcAoJewoJfQoKCS8qKgoJICogQHRlbXBsYXRlIFRLZXkyCgkgKiBAdGVtcGxhdGUgVFZhbHVlMgoJICogQHBhcmFtIE1hcDxUS2V5MiwgVFZhbHVlMj4gJG1hcAoJICogQHJldHVybiBNYXA8VEtleXxUS2V5MiwgVFZhbHVlfFRWYWx1ZTI+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB4b3IoTWFwICRtYXApOiBNYXAKCXsKCX0KfQoKLyoqCiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVEtleQogKiBAdGVtcGxhdGUtY292YXJpYW50IFRWYWx1ZQogKi8KZmluYWwgY2xhc3MgUGFpciBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewoJLyoqCgkgKiBAdmFyIFRLZXkKCSAqLwoJcHVibGljICRrZXk7CgoJLyoqCgkgKiBAdmFyIFRWYWx1ZQoJICovCglwdWJsaWMgJHZhbHVlOwoKCS8qKgoJICogQHBhcmFtIFRLZXkgJGtleQoJICogQHBhcmFtIFRWYWx1ZSAkdmFsdWUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRrZXkgPSBudWxsLCAkdmFsdWUgPSBudWxsKQoJewoJfQoKCS8qKgoJICogQHJldHVybiBQYWlyPFRLZXksIFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNvcHkoKTogUGFpcgoJewoJfQp9CgovKioKICogQHRlbXBsYXRlIFRWYWx1ZQogKiBAZXh0ZW5kcyBDb2xsZWN0aW9uPGludCwgVFZhbHVlPgogKiBAZXh0ZW5kcyBBcnJheUFjY2VzczxpbnQsIFRWYWx1ZT4KICovCmludGVyZmFjZSBTZXF1ZW5jZSBleHRlbmRzIENvbGxlY3Rpb24sIEFycmF5QWNjZXNzCnsKCS8qKgoJICogQHBhcmFtIGNhbGxhYmxlKFRWYWx1ZSk6IFRWYWx1ZSAkY2FsbGJhY2sKCSAqIEByZXR1cm4gdm9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gYXBwbHkoY2FsbGFibGUgJGNhbGxiYWNrKTsKCgkvKioKCSAqIEBwYXJhbSBUVmFsdWUgLi4uJHZhbHVlcwoJICovCglwdWJsaWMgZnVuY3Rpb24gY29udGFpbnMoLi4uJHZhbHVlcyk6IGJvb2w7CgoJLyoqCgkgKiBAcGFyYW0gKGNhbGxhYmxlKFRWYWx1ZSk6IGJvb2wpfG51bGwgJGNhbGxiYWNrCgkgKiBAcmV0dXJuIFNlcXVlbmNlPFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGZpbHRlcig/Y2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCk7CgoJLyoqCgkgKiBAcGFyYW0gVFZhbHVlICR2YWx1ZQoJICogQHJldHVybiBpbnR8ZmFsc2UKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGZpbmQoJHZhbHVlKTsKCgkvKioKCSAqIEByZXR1cm4gVFZhbHVlCgkgKiBAdGhyb3dzIFxVbmRlcmZsb3dFeGNlcHRpb24KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGZpcnN0KCk7CgoJLyoqCgkgKiBAcmV0dXJuIFRWYWx1ZQoJICogQHRocm93cyBcT3V0T2ZSYW5nZUV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0KGludCAkaW5kZXgpOwoKCS8qKgoJICogQHBhcmFtIFRWYWx1ZSAuLi4kdmFsdWVzCgkgKiBAdGhyb3dzIFxPdXRPZlJhbmdlRXhjZXB0aW9uCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGluc2VydChpbnQgJGluZGV4LCAuLi4kdmFsdWVzKTsKCgkvKioKCSAqIEBwYXJhbSBzdHJpbmcgJGdsdWUKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBqb2luKD9zdHJpbmcgJGdsdWUgPSBudWxsKTogc3RyaW5nOwoKCS8qKgoJICogQHJldHVybiBUVmFsdWUKCSAqIEB0aHJvd3MgXFVuZGVyZmxvd0V4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gbGFzdCgpOwoKCS8qKgoJICogQHRlbXBsYXRlIFROZXdWYWx1ZQoJICogQHBhcmFtIGNhbGxhYmxlKFRWYWx1ZSk6IFROZXdWYWx1ZSAkY2FsbGJhY2sKCSAqIEByZXR1cm4gU2VxdWVuY2U8VE5ld1ZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gbWFwKGNhbGxhYmxlICRjYWxsYmFjayk7CgoJLyoqCgkgKiBAdGVtcGxhdGUgVFZhbHVlMgoJICogQHBhcmFtIGl0ZXJhYmxlPFRWYWx1ZTI+ICR2YWx1ZXMKCSAqIEByZXR1cm4gU2VxdWVuY2U8VFZhbHVlfFRWYWx1ZTI+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBtZXJnZShpdGVyYWJsZSAkdmFsdWVzKTsKCgkvKioKCSAqIEByZXR1cm4gVFZhbHVlCgkgKiBAdGhyb3dzIFxVbmRlcmZsb3dFeGNlcHRpb24KCSAqIEBwaHBzdGFuLWltcHVyZQoJICovCglwdWJsaWMgZnVuY3Rpb24gcG9wKCk7CgoJLyoqCgkgKiBAcGFyYW0gVFZhbHVlIC4uLiR2YWx1ZXMKCSAqIEByZXR1cm4gdm9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gcHVzaCguLi4kdmFsdWVzKTsKCgkvKioKCSAqIEB0ZW1wbGF0ZSBUQ2FycnkKCSAqIEBwYXJhbSBjYWxsYWJsZShUQ2FycnksIFRWYWx1ZSk6IFRDYXJyeSAkY2FsbGJhY2sKCSAqIEBwYXJhbSBUQ2FycnkgJGluaXRpYWwKCSAqIEByZXR1cm4gVENhcnJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiByZWR1Y2UoY2FsbGFibGUgJGNhbGxiYWNrLCAkaW5pdGlhbCA9IG51bGwpOwoKCS8qKgoJICogQHJldHVybiBUVmFsdWUKCSAqIEB0aHJvd3MgXE91dE9mUmFuZ2VFeGNlcHRpb24KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJlbW92ZShpbnQgJGluZGV4KTsKCgkvKioKCSAqIEByZXR1cm4gU2VxdWVuY2U8VFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gcmV2ZXJzZWQoKTsKCgkvKioKCSAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlCgkgKiBAdGhyb3dzIFxPdXRPZlJhbmdlRXhjZXB0aW9uCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldChpbnQgJGluZGV4LCAkdmFsdWUpOwoKCS8qKgoJICogQHJldHVybiBUVmFsdWUKCSAqIEB0aHJvd3MgXFVuZGVyZmxvd0V4Y2VwdGlvbgoJICogQHBocHN0YW4taW1wdXJlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzaGlmdCgpOwoKCS8qKgoJICogQHJldHVybiBTZXF1ZW5jZTxUVmFsdWU+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzbGljZShpbnQgJGluZGV4LCA/aW50ICRsZW5ndGggPSBudWxsKTsKCgkvKioKCSAqIEBwYXJhbSAoY2FsbGFibGUoVFZhbHVlLCBUVmFsdWUpOiBpbnQpfG51bGwgJGNvbXBhcmF0b3IKCSAqIEByZXR1cm4gdm9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gc29ydCg/Y2FsbGFibGUgJGNvbXBhcmF0b3IgPSBudWxsKTsKCgkvKioKCSAqIEBwYXJhbSAoY2FsbGFibGUoVFZhbHVlLCBUVmFsdWUpOiBpbnQpfG51bGwgJGNvbXBhcmF0b3IKCSAqIEByZXR1cm4gU2VxdWVuY2U8VFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gc29ydGVkKD9jYWxsYWJsZSAkY29tcGFyYXRvciA9IG51bGwpOwoKCS8qKgoJICogQHBhcmFtIFRWYWx1ZSAuLi4kdmFsdWVzCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHVuc2hpZnQoLi4uJHZhbHVlcyk7Cn0KCgovKioKICogQHRlbXBsYXRlIFRWYWx1ZQogKiBAaW1wbGVtZW50cyBTZXF1ZW5jZTxUVmFsdWU+CiAqLwpmaW5hbCBjbGFzcyBWZWN0b3IgaW1wbGVtZW50cyBTZXF1ZW5jZQp7CgkvKioKCSAqIEBwYXJhbSBpdGVyYWJsZTxUVmFsdWU+ICR2YWx1ZXMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGl0ZXJhYmxlICR2YWx1ZXMgPSBbXSkKCXsKCX0KCgkvKioKCSAqIEByZXR1cm4gVmVjdG9yPFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNvcHkoKQoJewoJfQoKCS8qKgoJICogQHJldHVybiBWZWN0b3I8VFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gcmV2ZXJzZWQoKTogVmVjdG9yCgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIFZlY3RvcjxUVmFsdWU+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzbGljZShpbnQgJG9mZnNldCwgP2ludCAkbGVuZ3RoID0gbnVsbCk6IFZlY3RvcgoJewoJfQoKCS8qKgoJICogQHBhcmFtIChjYWxsYWJsZShUVmFsdWUsIFRWYWx1ZSk6IGludCl8bnVsbCAkY29tcGFyYXRvcgoJICogQHJldHVybiBWZWN0b3I8VFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gc29ydGVkKD9jYWxsYWJsZSAkY29tcGFyYXRvciA9IG51bGwpOiBWZWN0b3IKCXsKCX0KCgkvKioKCSAqIEBwYXJhbSAoY2FsbGFibGUoVFZhbHVlKTogYm9vbCl8bnVsbCAkY2FsbGJhY2sKCSAqIEByZXR1cm4gVmVjdG9yPFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGZpbHRlcig/Y2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCk6IFZlY3RvcgoJewoJfQoKCS8qKgoJICogQHRlbXBsYXRlIFROZXdWYWx1ZQoJICogQHBhcmFtIGNhbGxhYmxlKFRWYWx1ZSk6IFROZXdWYWx1ZSAkY2FsbGJhY2sKCSAqIEByZXR1cm4gVmVjdG9yPFROZXdWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIG1hcChjYWxsYWJsZSAkY2FsbGJhY2spOiBWZWN0b3IKCXsKCX0KCgkvKioKCSAqIEB0ZW1wbGF0ZSBUVmFsdWUyCgkgKiBAcGFyYW0gaXRlcmFibGU8VFZhbHVlMj4gJHZhbHVlcwoJICogQHJldHVybiBWZWN0b3I8VFZhbHVlfFRWYWx1ZTI+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBtZXJnZShpdGVyYWJsZSAkdmFsdWVzKTogVmVjdG9yCgl7Cgl9Cn0KCi8qKgogKiBAdGVtcGxhdGUgVFZhbHVlCiAqIEBpbXBsZW1lbnRzIENvbGxlY3Rpb248aW50LCBUVmFsdWU+CiAqIEBpbXBsZW1lbnRzIEFycmF5QWNjZXNzPGludCwgVFZhbHVlPgogKi8KZmluYWwgY2xhc3MgU2V0IGltcGxlbWVudHMgQ29sbGVjdGlvbiwgQXJyYXlBY2Nlc3MKewoJLyoqCgkgKiBAcGFyYW0gaXRlcmFibGU8VFZhbHVlPiAkdmFsdWVzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpdGVyYWJsZSAkdmFsdWVzID0gW10pCgl7Cgl9CgoJLyoqCgkgKiBAcGFyYW0gVFZhbHVlIC4uLiR2YWx1ZXMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFkZCguLi4kdmFsdWVzKTogdm9pZAoJewoJfQoKCS8qKgoJICogQHBhcmFtIFRWYWx1ZSAuLi4kdmFsdWVzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBjb250YWlucyguLi4kdmFsdWVzKTogYm9vbAoJewoJfQoKCS8qKgoJICogQHJldHVybiBTZXQ8VFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gY29weSgpOiBTZXQKCXsKCX0KCgkvKioKCSAqIEB0ZW1wbGF0ZSBUVmFsdWUyCgkgKiBAcGFyYW0gU2V0PFRWYWx1ZTI+ICRzZXQKCSAqIEByZXR1cm4gU2V0PFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGRpZmYoU2V0ICRzZXQpOiBTZXQKCXsKCX0KCgkvKioKCSAqIEBwYXJhbSAoY2FsbGFibGUoVFZhbHVlKTogYm9vbCl8bnVsbCAkY2FsbGJhY2sKCSAqIEByZXR1cm4gU2V0PFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGZpbHRlcig/Y2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCk6IFNldAoJewoJfQoKCS8qKgoJICogQHJldHVybiBUVmFsdWUKCSAqIEB0aHJvd3MgXFVuZGVyZmxvd0V4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gZmlyc3QoKQoJewoJfQoKCS8qKgoJICogQHJldHVybiBUVmFsdWUKCSAqIEB0aHJvd3MgXE91dE9mUmFuZ2VFeGNlcHRpb24KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldChpbnQgJGluZGV4KQoJewoJfQoKCS8qKgoJICogQHRlbXBsYXRlIFRWYWx1ZTIKCSAqIEBwYXJhbSBTZXQ8VFZhbHVlMj4gJHNldAoJICogQHJldHVybiBTZXQ8VFZhbHVlJlRWYWx1ZTI+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpbnRlcnNlY3QoU2V0ICRzZXQpOiBTZXQKCXsKCX0KCgkvKioKCSAqIEByZXR1cm4gVFZhbHVlCgkgKiBAdGhyb3dzIFxVbmRlcmZsb3dFeGNlcHRpb24KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGxhc3QoKQoJewoJfQoKCS8qKgoJICogQHRlbXBsYXRlIFROZXdWYWx1ZQoJICogQHBhcmFtIGNhbGxhYmxlKFRWYWx1ZSk6IFROZXdWYWx1ZSAkY2FsbGJhY2sKCSAqIEByZXR1cm4gU2V0PFROZXdWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIG1hcChjYWxsYWJsZSAkY2FsbGJhY2spOiBTZXQKCXsKCX0KCgkvKioKCSAqIEB0ZW1wbGF0ZSBUVmFsdWUyCgkgKiBAcGFyYW0gaXRlcmFibGU8VFZhbHVlMj4gJHZhbHVlcwoJICogQHJldHVybiBTZXQ8VFZhbHVlfFRWYWx1ZTI+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBtZXJnZShpdGVyYWJsZSAkdmFsdWVzKTogU2V0Cgl7Cgl9CgoJLyoqCgkgKiBAdGVtcGxhdGUgVENhcnJ5CgkgKiBAcGFyYW0gY2FsbGFibGUoVENhcnJ5LCBUVmFsdWUpOiBUQ2FycnkgJGNhbGxiYWNrCgkgKiBAcGFyYW0gVENhcnJ5ICRpbml0aWFsCgkgKiBAcmV0dXJuIFRDYXJyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gcmVkdWNlKGNhbGxhYmxlICRjYWxsYmFjaywgJGluaXRpYWwgPSBudWxsKQoJewoJfQoKCS8qKgoJICogQHBhcmFtIFRWYWx1ZSAuLi4kdmFsdWVzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiByZW1vdmUoLi4uJHZhbHVlcyk6IHZvaWQKCXsKCX0KCgkvKioKCSAqIEByZXR1cm4gU2V0PFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJldmVyc2VkKCk6IFNldAoJewoJfQoKCS8qKgoJICogQHJldHVybiBTZXQ8VFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2xpY2UoaW50ICRpbmRleCwgP2ludCAkbGVuZ3RoID0gbnVsbCk6IFNldAoJewoJfQoKCS8qKgoJICogQHBhcmFtIChjYWxsYWJsZShUVmFsdWUsIFRWYWx1ZSk6IGludCl8bnVsbCAkY29tcGFyYXRvcgoJICovCglwdWJsaWMgZnVuY3Rpb24gc29ydCg/Y2FsbGFibGUgJGNvbXBhcmF0b3IgPSBudWxsKTogdm9pZAoJewoJfQoKCS8qKgoJICogQHBhcmFtIChjYWxsYWJsZShUVmFsdWUsIFRWYWx1ZSk6IGludCl8bnVsbCAkY29tcGFyYXRvcgoJICogQHJldHVybiBTZXQ8VFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gc29ydGVkKD9jYWxsYWJsZSAkY29tcGFyYXRvciA9IG51bGwpOiBTZXQKCXsKCX0KCgkvKioKCSAqIEByZXR1cm4gbGlzdDxUVmFsdWU+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk6IGFycmF5Cgl7Cgl9CgoJLyoqCgkgKiBAdGVtcGxhdGUgVFZhbHVlMgoJICogQHBhcmFtIFNldDxUVmFsdWUyPiAkc2V0CgkgKiBAcmV0dXJuIFNldDxUVmFsdWV8VFZhbHVlMj4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHVuaW9uKFNldCAkc2V0KTogU2V0Cgl7Cgl9CgoJLyoqCgkgKiBAdGVtcGxhdGUgVFZhbHVlMgoJICogQHBhcmFtIFNldDxUVmFsdWUyPiAkc2V0CgkgKiBAcmV0dXJuIFNldDxUVmFsdWV8VFZhbHVlMj4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHhvcihTZXQgJHNldCk6IFNldAoJewoJfQp9CgovKioKICogQHRlbXBsYXRlIFRWYWx1ZQogKiBAaW1wbGVtZW50cyBDb2xsZWN0aW9uPGludCwgVFZhbHVlPgogKiBAaW1wbGVtZW50cyBBcnJheUFjY2VzczxpbnQsIFRWYWx1ZT4KICovCmZpbmFsIGNsYXNzIFN0YWNrIGltcGxlbWVudHMgQ29sbGVjdGlvbiwgQXJyYXlBY2Nlc3MKewoJLyoqCgkgKiBAcGFyYW0gaXRlcmFibGU8VFZhbHVlPiAkdmFsdWVzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpdGVyYWJsZSAkdmFsdWVzID0gW10pCgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIFN0YWNrPFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNvcHkoKTogU3RhY2sKCXsKCX0KCgkvKioKCSAqIEByZXR1cm4gVFZhbHVlCgkgKiBAdGhyb3dzIFVuZGVyZmxvd0V4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gcGVlaygpCgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIFRWYWx1ZQoJICogQHRocm93cyBVbmRlcmZsb3dFeGNlcHRpb24KCSAqIEBwaHBzdGFuLWltcHVyZQoJICovCglwdWJsaWMgZnVuY3Rpb24gcG9wKCkKCXsKCX0KCgkvKioKCSAqIEBwYXJhbSBUVmFsdWUgLi4uJHZhbHVlcwoJICogQHJldHVybiB2b2lkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBwdXNoKC4uLiR2YWx1ZXMpOiB2b2lkCgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIGxpc3Q8VFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpOiBhcnJheQoJewoJfQp9CgovKioKICogQHRlbXBsYXRlIFRWYWx1ZQogKiBAaW1wbGVtZW50cyBDb2xsZWN0aW9uPGludCwgVFZhbHVlPgogKiBAaW1wbGVtZW50cyBBcnJheUFjY2VzczxpbnQsIFRWYWx1ZT4KICovCmZpbmFsIGNsYXNzIFF1ZXVlIGltcGxlbWVudHMgQ29sbGVjdGlvbiwgQXJyYXlBY2Nlc3MKewoJLyoqCgkgKiBAcGFyYW0gaXRlcmFibGU8VFZhbHVlPiAkdmFsdWVzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpdGVyYWJsZSAkdmFsdWVzID0gW10pCgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIFF1ZXVlPFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNvcHkoKTogUXVldWUKCXsKCX0KCgkvKioKCSAqIEByZXR1cm4gVFZhbHVlCgkgKiBAdGhyb3dzIFVuZGVyZmxvd0V4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gcGVlaygpCgl7Cgl9CgoJLyoqCgkgKiBAcmV0dXJuIFRWYWx1ZQoJICogQHRocm93cyBVbmRlcmZsb3dFeGNlcHRpb24KCSAqIEBwaHBzdGFuLWltcHVyZQoJICovCglwdWJsaWMgZnVuY3Rpb24gcG9wKCkKCXsKCX0KCgkvKioKCSAqIEBwYXJhbSBUVmFsdWUgLi4uJHZhbHVlcwoJICovCglwdWJsaWMgZnVuY3Rpb24gcHVzaCguLi4kdmFsdWVzKTogdm9pZAoJewoJfQoKCS8qKgoJICogQHJldHVybiBsaXN0PFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTogYXJyYXkKCXsKCX0KfQoKLyoqCiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogQGltcGxlbWVudHMgQ29sbGVjdGlvbjxpbnQsIFRWYWx1ZT4KICovCmZpbmFsIGNsYXNzIFByaW9yaXR5UXVldWUgaW1wbGVtZW50cyBDb2xsZWN0aW9uCnsKCS8qKgoJICogQHJldHVybiBQcmlvcml0eVF1ZXVlPFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNvcHkoKTogUHJpb3JpdHlRdWV1ZQoJewoJfQoKCS8qKgoJICogQHJldHVybiBUVmFsdWUKCSAqIEB0aHJvd3MgVW5kZXJmbG93RXhjZXB0aW9uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBwZWVrKCkKCXsKCX0KCgkvKioKCSAqIEByZXR1cm4gVFZhbHVlCgkgKiBAdGhyb3dzIFVuZGVyZmxvd0V4Y2VwdGlvbgoJICogQHBocHN0YW4taW1wdXJlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBwb3AoKQoJewoJfQoKCS8qKgoJICogQHBhcmFtIFRWYWx1ZSAkdmFsdWUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHB1c2goJHZhbHVlLCBpbnQgJHByaW9yaXR5KTogdm9pZAoJewoJfQoKCS8qKgoJICogQHJldHVybiBsaXN0PFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTogYXJyYXkKCXsKCX0KfQo8P3BocAoKY2xhc3MgUmVmbGVjdGlvblBhcmFtZXRlcgp7CiAgICAvKioKICAgICAqIEByZXR1cm4gbGlzdDxSZWZsZWN0aW9uQXR0cmlidXRlPG9iamVjdD4+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKD9zdHJpbmcgJG5hbWUgPSBudWxsLCBpbnQgJGZsYWdzID0gMCkKICAgIHsKICAgIH0KfQo8P3BocAoKLyoqCiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVCBhcyBvYmplY3QKICovCmZpbmFsIGNsYXNzIFdlYWtSZWZlcmVuY2UKewoKCS8qKgoJICogQHRlbXBsYXRlIFRJbiBhcyBvYmplY3QKCSAqIEBwYXJhbSBUSW4gJHJlZmVyZW50CgkgKiBAcmV0dXJuIFdlYWtSZWZlcmVuY2U8VEluPgoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShvYmplY3QgJHJlZmVyZW50KTogV2Vha1JlZmVyZW5jZSB7fQoKCS8qKiBAcmV0dXJuID9UICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0KCkge30KfQoKCi8qKgogKiBAdGVtcGxhdGUgVEtleSBvZiBvYmplY3QKICogQHRlbXBsYXRlIFRWYWx1ZQogKiBAaW1wbGVtZW50cyBcQXJyYXlBY2Nlc3M8VEtleSwgVFZhbHVlPgogKiBAaW1wbGVtZW50cyBcSXRlcmF0b3JBZ2dyZWdhdGU8VEtleSwgVFZhbHVlPgogKi8KZmluYWwgY2xhc3MgV2Vha01hcCBpbXBsZW1lbnRzIFxBcnJheUFjY2VzcywgXENvdW50YWJsZSwgXEl0ZXJhdG9yQWdncmVnYXRlCnsKCS8qKgoJICogQHBhcmFtIFRLZXkgJG9mZnNldAoJICogQHJldHVybiBUVmFsdWUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgkb2Zmc2V0KSB7fQp9Cjw/cGhwCgovKioKICogQHRlbXBsYXRlLWNvdmFyaWFudCBURGF0ZSBvZiBEYXRlVGltZUludGVyZmFjZQogKiBAdGVtcGxhdGUtY292YXJpYW50IFRFbmQgb2YgP0RhdGVUaW1lSW50ZXJmYWNlCiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVFJlY3VycmVuY2VzIG9mID9pbnQKICogQGltcGxlbWVudHMgXEl0ZXJhdG9yQWdncmVnYXRlPGludCwgVERhdGU+CiAqIEBpbXBsZW1lbnRzIFxUcmF2ZXJzYWJsZTxpbnQsIFREYXRlPgogKi8KY2xhc3MgRGF0ZVBlcmlvZCBpbXBsZW1lbnRzIFxJdGVyYXRvckFnZ3JlZ2F0ZSwgXFRyYXZlcnNhYmxlCnsKCgkvKioKCSAqIEByZXR1cm4gVEVuZAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0RW5kRGF0ZSgpCgl7CgoJfQoKCS8qKgoJICogQHJldHVybiBUUmVjdXJyZW5jZXMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldFJlY3VycmVuY2VzKCkKCXsKCgl9CgoJLyoqCgkgKiBAcmV0dXJuIFREYXRlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRTdGFydERhdGUoKTogRGF0ZVRpbWVJbnRlcmZhY2UKCXsKCgl9Cn0KPD9waHAKCmNsYXNzIFJlZmxlY3Rpb25Qcm9wZXJ0eQp7CiAgICAvKioKICAgICAqIEByZXR1cm4gbGlzdDxSZWZsZWN0aW9uQXR0cmlidXRlPG9iamVjdD4+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKD9zdHJpbmcgJG5hbWUgPSBudWxsLCBpbnQgJGZsYWdzID0gMCkKICAgIHsKICAgIH0KfQo8P3BocAoKLyoqCiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVCBvZiBvYmplY3QKICovCmNsYXNzIFJlZmxlY3Rpb25BdHRyaWJ1dGUKewogICAgLyoqCiAgICAgKiBAcmV0dXJuIGNsYXNzLXN0cmluZzxUPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpIDogc3RyaW5nCiAgICB7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5ld0luc3RhbmNlKCkgOiBvYmplY3QKICAgIHsKICAgIH0KfQo8P3BocAoKLyoqCiAqIEBwYXJhbSBwb3NpdGl2ZS1pbnQgJGRlcHRoCiAqIEBwYXJhbSBpbnQtbWFzazxKU09OX0lOVkFMSURfVVRGOF9JR05PUkU+ICRmbGFncwogKiBAcGhwc3Rhbi1hc3NlcnQtaWYtdHJ1ZSA9bm9uLWVtcHR5LXN0cmluZyAkanNvbgogKi8KZnVuY3Rpb24ganNvbl92YWxpZGF0ZShzdHJpbmcgJGpzb24sIGludCAkZGVwdGggPSA1MTIsIGludCAkZmxhZ3MgPSAwKTogYm9vbAp7Cn0KPD9waHAKCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbm5lY3Rpb24KICogQHBhcmFtIFxEQjJfQVVUT0NPTU1JVF9PRkZ8XERCMl9BVVRPQ09NTUlUX09OICR2YWx1ZQogKgogKiBAcmV0dXJuICgkdmFsdWUgaXMgbnVsbCA/IFxEQjJfQVVUT0NPTU1JVF9PRkZ8XERCMl9BVVRPQ09NTUlUX09OIDogYm9vbCkKICovCmZ1bmN0aW9uIGRiMl9hdXRvY29tbWl0KCRjb25uZWN0aW9uLCA/aW50ICR2YWx1ZSA9IG51bGwpIHt9Cjw/cGhwCgovKioKICogQHRlbXBsYXRlIFRLZXkKICogQHRlbXBsYXRlIFRWYWx1ZQogKi8KaW50ZXJmYWNlIEFycmF5QWNjZXNzCnsKCgkvKioKCSAqIEBwYXJhbSBUS2V5ICRvZmZzZXQKCSAqIEByZXR1cm4gYm9vbAoJICovCglwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRvZmZzZXQpOwoKCS8qKgoJICogQHBhcmFtIFRLZXkgJG9mZnNldAoJICogQHJldHVybiBUVmFsdWV8bnVsbAoJICovCglwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRvZmZzZXQpOwoKCS8qKgoJICogQHBhcmFtIFRLZXl8bnVsbCAkb2Zmc2V0CgkgKiBAcGFyYW0gVFZhbHVlICR2YWx1ZQoJICogQHJldHVybiB2b2lkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKTsKCgkvKioKCSAqIEBwYXJhbSBUS2V5ICRvZmZzZXQKCSAqIEByZXR1cm4gdm9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9mZnNldCk7Cgp9CgovKioKICogQHRlbXBsYXRlIFRLZXkgb2YgYXJyYXkta2V5CiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogQGltcGxlbWVudHMgSXRlcmF0b3JBZ2dyZWdhdGU8VEtleSwgVFZhbHVlPgogKiBAaW1wbGVtZW50cyBBcnJheUFjY2VzczxUS2V5LCBUVmFsdWU+CiAqLwpjbGFzcyBBcnJheU9iamVjdCBpbXBsZW1lbnRzIEl0ZXJhdG9yQWdncmVnYXRlLCBBcnJheUFjY2Vzcwp7CgoJLyoqCgkgKiBAcGFyYW0gYXJyYXk8VEtleSwgVFZhbHVlPnxvYmplY3QgJGlucHV0CgkgKiBAcGFyYW0gaW50ICRmbGFncwoJICogQHBhcmFtIGNsYXNzLXN0cmluZyAkaXRlcmF0b3JfY2xhc3MKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRpbnB1dCA9IG51bGwsICRmbGFncyA9IDAsICRpdGVyYXRvcl9jbGFzcyA9ICJBcnJheUl0ZXJhdG9yIikgeyB9CgoJLyoqCgkgKiBAcGFyYW0gVFZhbHVlICR2YWx1ZQoJICogQHJldHVybiB2b2lkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoJHZhbHVlKSB7IH0KCgkvKioKCSAqIEByZXR1cm4gYXJyYXk8VEtleSwgVFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QXJyYXlDb3B5KCkgeyB9CgoJLyoqCgkgKiBAcGFyYW0gY2FsbGFibGUoVFZhbHVlLCBUVmFsdWUpOiBpbnQgJGNtcF9mdW5jdGlvbgoJICogQHJldHVybiB2b2lkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB1YXNvcnQoJGNtcF9mdW5jdGlvbikgeyB9CgoJLyoqCgkgKiBAcGFyYW0gY2FsbGFibGUoVEtleSwgVEtleSk6IGludCAkY21wX2Z1bmN0aW9uCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHVrc29ydCgkY21wX2Z1bmN0aW9uKSB7IH0KCgkvKioKCSAqIEByZXR1cm4gQXJyYXlJdGVyYXRvcjxUS2V5LCBUVmFsdWU+CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpIHsgfQoKCS8qKgoJICogQHBhcmFtIGNsYXNzLXN0cmluZyAkaXRlcmF0b3JfY2xhc3MKCSAqIEByZXR1cm4gdm9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0SXRlcmF0b3JDbGFzcygkaXRlcmF0b3JfY2xhc3MpIHsgfQoKfQoKLyoqCiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogQGltcGxlbWVudHMgSXRlcmF0b3I8aW50LCBUVmFsdWV8bnVsbD4KICogQGltcGxlbWVudHMgSXRlcmF0b3JBZ2dyZWdhdGU8aW50LCBUVmFsdWV8bnVsbD4KICogQGltcGxlbWVudHMgQXJyYXlBY2Nlc3M8aW50LCBUVmFsdWV8bnVsbD4KICovCmNsYXNzIFNwbEZpeGVkQXJyYXkgaW1wbGVtZW50cyBJdGVyYXRvciwgSXRlcmF0b3JBZ2dyZWdhdGUsIEFycmF5QWNjZXNzLCBDb3VudGFibGUKewoJLyoqCgkgKiBAdGVtcGxhdGUgVElucHV0CgkgKiBAcGFyYW0gYXJyYXk8aW50LCBUSW5wdXQ+ICRhcnJheQoJICogQHJldHVybiBTcGxGaXhlZEFycmF5PFRJbnB1dD4KCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tQXJyYXkoYXJyYXkgJGFycmF5LCBib29sICRzYXZlX2luZGV4ZXMgPSB0cnVlKTogU3BsRml4ZWRBcnJheSB7IH0KCgkvKioKCSAqIEByZXR1cm4gYXJyYXk8aW50LCBUVmFsdWV8bnVsbD4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTogYXJyYXkgeyB9Cn0KPD9waHAKCmNsYXNzIEltYWdpY2tQaXhlbAp7CgkvKioKCSAqIEByZXR1cm4gKCRub3JtYWxpemVkIGlzIDAgPyBhcnJheXtyOiBpbnQ8MCwgMjU1PiwgZzogaW50PDAsIDI1NT4sIGI6IGludDwwLCAyNTU+LCBhOiBpbnQ8MCwgMT59IDogKCRub3JtYWxpemVkIGlzIDEgPyBhcnJheXtyOiBmbG9hdCwgZzogZmxvYXQsIGI6IGZsb2F0LCBhOiBmbG9hdH0gOiAoJG5vcm1hbGl6ZWQgaXMgMiA/IGFycmF5e3I6IGludDwwLCAyNTU+LCBnOiBpbnQ8MCwgMjU1PiwgYjogaW50PDAsIDI1NT4sIGE6IGludDwwLCAyNTU+fSA6IGFycmF5e30pKSkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldENvbG9yKGludCAkbm9ybWFsaXplZCA9IDApOiBhcnJheTsKfQo8P3BocAoKLyoqCiAqIEB0ZW1wbGF0ZSBUT2JqZWN0IG9mIG9iamVjdAogKiBAdGVtcGxhdGUgVERhdGEKICoKICogQHRlbXBsYXRlLWltcGxlbWVudHMgSXRlcmF0b3I8aW50LCBUT2JqZWN0PgogKiBAdGVtcGxhdGUtaW1wbGVtZW50cyBTZWVrYWJsZUl0ZXJhdG9yPGludCwgVE9iamVjdD4KICogQHRlbXBsYXRlLWltcGxlbWVudHMgQXJyYXlBY2Nlc3M8VE9iamVjdCwgVERhdGE+CiAqLwpjbGFzcyBTcGxPYmplY3RTdG9yYWdlIGltcGxlbWVudHMgQ291bnRhYmxlLCBJdGVyYXRvciwgU2Vla2FibGVJdGVyYXRvciwgU2VyaWFsaXphYmxlLCBBcnJheUFjY2Vzcwp7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gXFNwbE9iamVjdFN0b3JhZ2U8VE9iamVjdCwgVERhdGE+ICRzdG9yYWdlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRBbGwoU3BsT2JqZWN0U3RvcmFnZSAkc3RvcmFnZSk6IHZvaWQgeyB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gVE9iamVjdCAkb2JqZWN0CiAgICAgKiBAcGFyYW0gVERhdGEgJGRhdGEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGF0dGFjaChvYmplY3QgJG9iamVjdCwgJGRhdGEgPSBudWxsKTogdm9pZCB7IH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBUT2JqZWN0ICRvYmplY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnRhaW5zKG9iamVjdCAkb2JqZWN0KTogYm9vbCB7IH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBUT2JqZWN0ICRvYmplY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRldGFjaChvYmplY3QgJG9iamVjdCk6IHZvaWQgeyB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gVE9iamVjdCAkb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYXNoKG9iamVjdCAkb2JqZWN0KTogc3RyaW5nIHsgfQoKICAgIC8qKgogICAgICogQHJldHVybiBURGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW5mbygpIHsgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFxTcGxPYmplY3RTdG9yYWdlPCosICo+ICRzdG9yYWdlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVBbGwoU3BsT2JqZWN0U3RvcmFnZSAkc3RvcmFnZSk6IHZvaWQgeyB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gXFNwbE9iamVjdFN0b3JhZ2U8KiwgKj4gJHN0b3JhZ2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZUFsbEV4Y2VwdChTcGxPYmplY3RTdG9yYWdlICRzdG9yYWdlKTogdm9pZCB7IH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBURGF0YSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW5mbygkZGF0YSk6IHZvaWQgeyB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gVE9iamVjdCAkb2Zmc2V0CiAgICAgKiBAcmV0dXJuIFREYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG9mZnNldCk7Cgp9Cjw/cGhwCgovKioKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUS2V5CiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVFZhbHVlCiAqLwppbnRlcmZhY2UgVHJhdmVyc2FibGUKewp9CgovKioKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUS2V5CiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVFZhbHVlCiAqCiAqIEBleHRlbmRzIFRyYXZlcnNhYmxlPFRLZXksIFRWYWx1ZT4KICovCmludGVyZmFjZSBJdGVyYXRvckFnZ3JlZ2F0ZSBleHRlbmRzIFRyYXZlcnNhYmxlCnsKCgkvKioKCSAqIEByZXR1cm4gVHJhdmVyc2FibGU8VEtleSwgVFZhbHVlPgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKTsKCn0KCi8qKgogKiBAdGVtcGxhdGUtY292YXJpYW50IFRLZXkKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUVmFsdWUKICoKICogQGV4dGVuZHMgVHJhdmVyc2FibGU8VEtleSwgVFZhbHVlPgogKi8KaW50ZXJmYWNlIEl0ZXJhdG9yIGV4dGVuZHMgVHJhdmVyc2FibGUKewoKCS8qKgoJICogQHJldHVybiBUVmFsdWUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKTsKCgkvKioKCSAqIEByZXR1cm4gVEtleQoJICovCglwdWJsaWMgZnVuY3Rpb24ga2V5KCk7Cgp9CgovKioKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUS2V5CiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVFZhbHVlCiAqCiAqIEBleHRlbmRzIEl0ZXJhdG9yPFRLZXksIFRWYWx1ZT4KICovCmludGVyZmFjZSBSZWN1cnNpdmVJdGVyYXRvciBleHRlbmRzIEl0ZXJhdG9yCnsKCn0KCi8qKgogKiBAdGVtcGxhdGUtY292YXJpYW50IFRLZXkKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUVmFsdWUKICogQHRlbXBsYXRlIFRTZW5kCiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVFJldHVybgogKgogKiBAaW1wbGVtZW50cyBJdGVyYXRvcjxUS2V5LCBUVmFsdWU+CiAqLwpjbGFzcyBHZW5lcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcgp7CgoJLyoqCgkgKiBAcmV0dXJuIFRSZXR1cm4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldFJldHVybigpIHt9CgoJLyoqCgkgKiBAcGFyYW0gVFNlbmQgJHZhbHVlCgkgKiBAcmV0dXJuIFRWYWx1ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2VuZCgkdmFsdWUpIHt9Cgp9CgovKioKICogQGltcGxlbWVudHMgVHJhdmVyc2FibGU8c3RyaW5nLCBzdGF0aWM+CiAqIEBpbXBsZW1lbnRzIEFycmF5QWNjZXNzPGludHxzdHJpbmcsIHN0YXRpYz4KICogQGltcGxlbWVudHMgSXRlcmF0b3I8c3RyaW5nLCBzdGF0aWM+CiAqIEBpbXBsZW1lbnRzIFJlY3Vyc2l2ZUl0ZXJhdG9yPHN0cmluZywgc3RhdGljPgogKi8KY2xhc3MgU2ltcGxlWE1MRWxlbWVudCBpbXBsZW1lbnRzIFRyYXZlcnNhYmxlLCBBcnJheUFjY2VzcywgSXRlcmF0b3IsIFJlY3Vyc2l2ZUl0ZXJhdG9yCnsKCgkvKioKCSAqIEByZXR1cm4gKCRmaWxlbmFtZSBpcyBudWxsID8gc3RyaW5nfGZhbHNlIDogYm9vbCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFzWE1MKD9zdHJpbmcgJGZpbGVuYW1lID0gbnVsbCkgeyAgfQoKCS8qKgoJICogQHJldHVybiAoJGZpbGVuYW1lIGlzIG51bGwgPyBzdHJpbmd8ZmFsc2UgOiBib29sKQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2F2ZVhNTCg/c3RyaW5nICRmaWxlbmFtZSA9IG51bGwpIHsgIH0KCn0KCi8qKgogKiBAdGVtcGxhdGUtY292YXJpYW50IFRLZXkKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUVmFsdWUKICogQGV4dGVuZHMgSXRlcmF0b3I8VEtleSwgVFZhbHVlPgogKi8KaW50ZXJmYWNlIFNlZWthYmxlSXRlcmF0b3IgZXh0ZW5kcyBJdGVyYXRvcgp7Cgp9CgovKioKICogQHRlbXBsYXRlIFRLZXkgb2YgYXJyYXkta2V5CiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogQGltcGxlbWVudHMgU2Vla2FibGVJdGVyYXRvcjxUS2V5LCBUVmFsdWU+CiAqIEBpbXBsZW1lbnRzIEFycmF5QWNjZXNzPFRLZXksIFRWYWx1ZT4KICovCmNsYXNzIEFycmF5SXRlcmF0b3IgaW1wbGVtZW50cyBTZWVrYWJsZUl0ZXJhdG9yLCBBcnJheUFjY2VzcywgQ291bnRhYmxlCnsKCgkvKioKCSAqIEBwYXJhbSBhcnJheTxUS2V5LCBUVmFsdWU+ICRhcnJheQoJICogQHBhcmFtIGludCAkZmxhZ3MKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRhcnJheSA9IGFycmF5KCksICRmbGFncyA9IDApIHsgfQoKCS8qKgoJICogQHBhcmFtIFRWYWx1ZSAkdmFsdWUKCSAqIEByZXR1cm4gdm9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKCR2YWx1ZSkgeyB9CgoJLyoqCgkgKiBAcmV0dXJuIGFycmF5PFRLZXksIFRWYWx1ZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEFycmF5Q29weSgpIHsgfQoKCS8qKgoJICogQHBhcmFtIGNhbGxhYmxlKFRWYWx1ZSwgVFZhbHVlKTogaW50ICRjbXBfZnVuY3Rpb24KCSAqIEByZXR1cm4gdm9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gdWFzb3J0KCRjbXBfZnVuY3Rpb24pIHsgfQoKCS8qKgoJICogQHBhcmFtIGNhbGxhYmxlKFRLZXksIFRLZXkpOiBpbnQgJGNtcF9mdW5jdGlvbgoJICogQHJldHVybiB2b2lkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB1a3NvcnQoJGNtcF9mdW5jdGlvbikgeyB9Cgp9CgovKioKICogQHRlbXBsYXRlIFQgb2YgXFJlY3Vyc2l2ZUl0ZXJhdG9yfFxJdGVyYXRvckFnZ3JlZ2F0ZQogKiBAbWl4aW4gVAogKi8KY2xhc3MgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcgp7CgkvKioKCSAqIEBwYXJhbSBUICRpdGVyYXRvcgoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCgkJJGl0ZXJhdG9yLAoJCWludCAkbW9kZSA9IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3I6OkxFQVZFU19PTkxZLAoJCWludCAkZmxhZ3MgPSAwCgkpCgl7CgoJfQoKfQoKLyoqCiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVEtleQogKiBAdGVtcGxhdGUtY292YXJpYW50IFRWYWx1ZQogKgogKiBAdGVtcGxhdGUtZXh0ZW5kcyBJdGVyYXRvcjxUS2V5LCBUVmFsdWU+CiAqLwppbnRlcmZhY2UgT3V0ZXJJdGVyYXRvciBleHRlbmRzIEl0ZXJhdG9yIHsKICAgIC8qKgogICAgICogQHJldHVybiBJdGVyYXRvcjxUS2V5LCBUVmFsdWU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbm5lckl0ZXJhdG9yKCk7Cn0KCi8qKgogKiBAdGVtcGxhdGUtY292YXJpYW50IFRLZXkKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUVmFsdWUKICogQHRlbXBsYXRlIFRJdGVyYXRvciBhcyBUcmF2ZXJzYWJsZTxUS2V5LCBUVmFsdWU+CiAqCiAqIEB0ZW1wbGF0ZS1pbXBsZW1lbnRzIE91dGVySXRlcmF0b3I8VEtleSwgVFZhbHVlPgogKgogKiBAbWl4aW4gVEl0ZXJhdG9yCiAqLwpjbGFzcyBJdGVyYXRvckl0ZXJhdG9yIGltcGxlbWVudHMgT3V0ZXJJdGVyYXRvciB7CiAgICAvKioKICAgICAqIEBwYXJhbSBUSXRlcmF0b3IgJGl0ZXJhdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChUcmF2ZXJzYWJsZSAkaXRlcmF0b3IpIHt9Cn0KCi8qKgogKiBAdGVtcGxhdGUtY292YXJpYW50IFRLZXkKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUVmFsdWUKICogQHRlbXBsYXRlIFRJdGVyYXRvciBhcyBUcmF2ZXJzYWJsZTxUS2V5LCBUVmFsdWU+CiAqCiAqIEB0ZW1wbGF0ZS1leHRlbmRzIEl0ZXJhdG9ySXRlcmF0b3I8VEtleSwgVFZhbHVlLCBUSXRlcmF0b3I+CiAqLwpjbGFzcyBGaWx0ZXJJdGVyYXRvciBleHRlbmRzIEl0ZXJhdG9ySXRlcmF0b3IKewoKfQoKLyoqCiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVEtleQogKiBAdGVtcGxhdGUtY292YXJpYW50IFRWYWx1ZQogKiBAdGVtcGxhdGUgVEl0ZXJhdG9yIGFzIFRyYXZlcnNhYmxlPFRLZXksIFRWYWx1ZT4KICoKICogQGV4dGVuZHMgRmlsdGVySXRlcmF0b3I8VEtleSwgVFZhbHVlLCBUSXRlcmF0b3I+CiAqLwpjbGFzcyBDYWxsYmFja0ZpbHRlckl0ZXJhdG9yIGV4dGVuZHMgRmlsdGVySXRlcmF0b3IKewoKfQoKLyoqCiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVEtleQogKiBAdGVtcGxhdGUtY292YXJpYW50IFRWYWx1ZQogKiBAdGVtcGxhdGUgVEl0ZXJhdG9yIGFzIFRyYXZlcnNhYmxlPFRLZXksIFRWYWx1ZT4KICoKICogQGV4dGVuZHMgQ2FsbGJhY2tGaWx0ZXJJdGVyYXRvcjxUS2V5LCBUVmFsdWUsIFRJdGVyYXRvcj4KICogQGltcGxlbWVudHMgUmVjdXJzaXZlSXRlcmF0b3I8VEtleSwgVFZhbHVlPgogKi8KY2xhc3MgUmVjdXJzaXZlQ2FsbGJhY2tGaWx0ZXJJdGVyYXRvciBleHRlbmRzIENhbGxiYWNrRmlsdGVySXRlcmF0b3IgaW1wbGVtZW50cyBSZWN1cnNpdmVJdGVyYXRvcgp7CiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzQ2hpbGRyZW4oKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBSZWN1cnNpdmVDYWxsYmFja0ZpbHRlckl0ZXJhdG9yPFRLZXksIFRWYWx1ZSwgVEl0ZXJhdG9yPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hpbGRyZW4oKSB7fQoKfQoKLyoqCiAqIEB0ZW1wbGF0ZSBUS2V5IG9mIGFycmF5LWtleQogKiBAdGVtcGxhdGUgVFZhbHVlCiAqCiAqIEB0ZW1wbGF0ZS1pbXBsZW1lbnRzIFJlY3Vyc2l2ZUl0ZXJhdG9yPFRLZXksIFRWYWx1ZT4KICogQHRlbXBsYXRlLWV4dGVuZHMgQXJyYXlJdGVyYXRvcjxUS2V5LCBUVmFsdWU+CiAqLwpjbGFzcyBSZWN1cnNpdmVBcnJheUl0ZXJhdG9yIGV4dGVuZHMgQXJyYXlJdGVyYXRvciBpbXBsZW1lbnRzIFJlY3Vyc2l2ZUl0ZXJhdG9yIHsKCiAgICAvKioKICAgICAqIEByZXR1cm4gUmVjdXJzaXZlQXJyYXlJdGVyYXRvcjxUS2V5LCBUVmFsdWU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDaGlsZHJlbigpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc0NoaWxkcmVuKCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gVFZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gVEtleQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZShUS2V5LCBUS2V5KTogaW50ICRjbXBfZnVuY3Rpb24KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdWtzb3J0KCRjbXBfZnVuY3Rpb24pIHsgfQp9CgovKioKICogQHRlbXBsYXRlIFRLZXkKICogQHRlbXBsYXRlIFRWYWx1ZQogKiBAdGVtcGxhdGUgVEl0ZXJhdG9yIGFzIEl0ZXJhdG9yPFRLZXksIFRWYWx1ZT4KICoKICogQHRlbXBsYXRlLWV4dGVuZHMgSXRlcmF0b3JJdGVyYXRvcjxUS2V5LCBUVmFsdWUsIFRJdGVyYXRvcj4KICovCmNsYXNzIEFwcGVuZEl0ZXJhdG9yIGV4dGVuZHMgSXRlcmF0b3JJdGVyYXRvciB7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gVEl0ZXJhdG9yICRpdGVyYXRvcgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoSXRlcmF0b3IgJGl0ZXJhdG9yKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBBcnJheUl0ZXJhdG9yPGFycmF5LWtleSwgVFZhbHVlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXJyYXlJdGVyYXRvcigpIHt9Cgp9CgovKioKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUS2V5CiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVFZhbHVlCiAqIEB0ZW1wbGF0ZSBUSXRlcmF0b3IgYXMgSXRlcmF0b3I8VEtleSwgVFZhbHVlPgogKgogKiBAdGVtcGxhdGUtZXh0ZW5kcyBJdGVyYXRvckl0ZXJhdG9yPFRLZXksIFRWYWx1ZSwgVEl0ZXJhdG9yPgogKi8KY2xhc3MgTm9SZXdpbmRJdGVyYXRvciBleHRlbmRzIEl0ZXJhdG9ySXRlcmF0b3IgewogICAgLyoqCiAgICAgKiBAcGFyYW0gVEl0ZXJhdG9yICRpdGVyYXRvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSXRlcmF0b3IgJGl0ZXJhdG9yKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBUVmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBUS2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKSB7fQp9CgovKioKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUS2V5CiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVFZhbHVlCiAqIEB0ZW1wbGF0ZSBUSXRlcmF0b3IgYXMgSXRlcmF0b3I8VEtleSwgVFZhbHVlPgogKgogKiBAdGVtcGxhdGUtaW1wbGVtZW50cyBPdXRlckl0ZXJhdG9yPFRLZXksIFRWYWx1ZT4KICogQHRlbXBsYXRlLWV4dGVuZHMgSXRlcmF0b3JJdGVyYXRvcjxUS2V5LCBUVmFsdWUsIFRJdGVyYXRvcj4KICovCmNsYXNzIExpbWl0SXRlcmF0b3IgZXh0ZW5kcyBJdGVyYXRvckl0ZXJhdG9yIGltcGxlbWVudHMgT3V0ZXJJdGVyYXRvciB7CiAgICAvKioKICAgICAqIEBwYXJhbSBUSXRlcmF0b3IgJGl0ZXJhdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChJdGVyYXRvciAkaXRlcmF0b3IsIGludCAkb2Zmc2V0ID0gMCwgaW50ICRjb3VudCA9IC0xKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBUVmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBUS2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKSB7fQp9CgovKioKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUS2V5CiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVFZhbHVlCiAqIEB0ZW1wbGF0ZSBUSXRlcmF0b3IgYXMgSXRlcmF0b3I8VEtleSwgVFZhbHVlPgogKgogKiBAdGVtcGxhdGUtZXh0ZW5kcyBJdGVyYXRvckl0ZXJhdG9yPFRLZXksIFRWYWx1ZSwgVEl0ZXJhdG9yPgogKi8KY2xhc3MgSW5maW5pdGVJdGVyYXRvciBleHRlbmRzIEl0ZXJhdG9ySXRlcmF0b3IgewogICAgLyoqCiAgICAgKiBAcGFyYW0gVEl0ZXJhdG9yICRpdGVyYXRvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSXRlcmF0b3IgJGl0ZXJhdG9yKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBUVmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBUS2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKSB7fQp9CgovKioKICogQHRlbXBsYXRlIFRLZXkKICogQHRlbXBsYXRlIFRWYWx1ZQogKiBAdGVtcGxhdGUgVEl0ZXJhdG9yIGFzIEl0ZXJhdG9yPFRLZXksIFRWYWx1ZT4KICoKICogQHRlbXBsYXRlLWltcGxlbWVudHMgT3V0ZXJJdGVyYXRvcjxUS2V5LCBUVmFsdWU+CiAqIEB0ZW1wbGF0ZS1pbXBsZW1lbnRzIEFycmF5QWNjZXNzPFRLZXksIFRWYWx1ZT4KICoKICogQHRlbXBsYXRlLWV4dGVuZHMgSXRlcmF0b3JJdGVyYXRvcjxUS2V5LCBUVmFsdWUsIFRJdGVyYXRvcj4KICovCmNsYXNzIENhY2hpbmdJdGVyYXRvciBleHRlbmRzIEl0ZXJhdG9ySXRlcmF0b3IgaW1wbGVtZW50cyBPdXRlckl0ZXJhdG9yLCBBcnJheUFjY2VzcywgQ291bnRhYmxlIHsKICAgIGNvbnN0IENBTExfVE9TVFJJTkcgPSAxIDsKICAgIGNvbnN0IENBVENIX0dFVF9DSElMRCA9IDE2IDsKICAgIGNvbnN0IFRPU1RSSU5HX1VTRV9LRVkgPSAyIDsKICAgIGNvbnN0IFRPU1RSSU5HX1VTRV9DVVJSRU5UID0gNCA7CiAgICBjb25zdCBUT1NUUklOR19VU0VfSU5ORVIgPSA4IDsKICAgIGNvbnN0IEZVTExfQ0FDSEUgPSAyNTYgOwoKICAgIC8qKgogICAgICogQHBhcmFtIFRJdGVyYXRvciAkaXRlcmF0b3IKICAgICAqIEBwYXJhbSBpbnQtbWFzay1vZjxzZWxmOjoqPiAkZmxhZ3MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEl0ZXJhdG9yICRpdGVyYXRvciwgaW50ICRmbGFncyA9IHNlbGY6OkNBTExfVE9TVFJJTkcpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFRWYWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFRLZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PGFycmF5LWtleSwgVFZhbHVlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2FjaGUoKSB7fQp9CgovKioKICogQHRlbXBsYXRlIFRLZXkKICogQHRlbXBsYXRlIFRWYWx1ZQogKiBAdGVtcGxhdGUgVEl0ZXJhdG9yIG9mIFRyYXZlcnNhYmxlPFRLZXksIFRWYWx1ZT4KICoKICogQHRlbXBsYXRlLWV4dGVuZHMgRmlsdGVySXRlcmF0b3I8VEtleSwgVFZhbHVlLCBUSXRlcmF0b3I+CiAqLwpjbGFzcyBSZWdleEl0ZXJhdG9yIGV4dGVuZHMgRmlsdGVySXRlcmF0b3IgewogICAgY29uc3QgTUFUQ0ggPSAwIDsKICAgIGNvbnN0IEdFVF9NQVRDSCA9IDEgOwogICAgY29uc3QgQUxMX01BVENIRVMgPSAyIDsKICAgIGNvbnN0IFNQTElUID0gMyA7CiAgICBjb25zdCBSRVBMQUNFID0gNCA7CiAgICBjb25zdCBVU0VfS0VZID0gMSA7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gSXRlcmF0b3I8VEtleSwgVFZhbHVlPiAkaXRlcmF0b3IKICAgICAqIEBwYXJhbSBzZWxmOjpNQVRDSHxzZWxmOjpHRVRfTUFUQ0h8c2VsZjo6QUxMX01BVENIRVN8c2VsZjo6U1BMSVR8c2VsZjo6UkVQTEFDRSAkbW9kZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSXRlcmF0b3IgJGl0ZXJhdG9yLCBzdHJpbmcgJHJlZ2V4LCBpbnQgJG1vZGUgPSBzZWxmOjpNQVRDSCwgaW50ICRmbGFncyA9IDAsIGludCAkcHJlZ19mbGFncyA9IDApIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFRWYWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFRLZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpIHt9Cn0KCi8qKgogKiBAdGVtcGxhdGUtaW1wbGVtZW50cyBJdGVyYXRvcjxuZXZlciwgbmV2ZXI+CiAqLwpjbGFzcyBFbXB0eUl0ZXJhdG9yIGltcGxlbWVudHMgSXRlcmF0b3IgewogICAgLyoqCiAgICAgKiBAcmV0dXJuIG5ldmVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gbmV2ZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpIHt9Cn0KPD9waHAKCmNsYXNzIG15c3FsaQp7CiAgICAvKioKICAgICAqIEB2YXIgaW50PC0xLG1heD58bnVtZXJpYy1zdHJpbmcKICAgICAqLwogICAgcHVibGljICRhZmZlY3RlZF9yb3dzOwp9CgpjbGFzcyBteXNxbGlfcmVzdWx0CnsKICAgIC8qKgogICAgICogQHZhciBpbnQ8MCxtYXg+fG51bWVyaWMtc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkbnVtX3Jvd3M7CgogICAgLyoqCiAgICAgKiBAdGVtcGxhdGUgVCBvZiBvYmplY3QKICAgICAqIEBwYXJhbSBjbGFzcy1zdHJpbmc8VD4gJGNsYXNzCiAgICAgKiBAcGFyYW0gYXJyYXk8bWl4ZWQ+ICRjb25zdHJ1Y3Rvcl9hcmdzCiAgICAgKiBAcmV0dXJuIFR8bnVsbHxmYWxzZQogICAgICovCiAgICBmdW5jdGlvbiBmZXRjaF9vYmplY3Qoc3RyaW5nICRjbGFzcyA9ICdzdGRDbGFzcycsIGFycmF5ICRjb25zdHJ1Y3Rvcl9hcmdzID0gW10pIHt9Cn0KCgovKioKICogQHRlbXBsYXRlIFQgb2Ygb2JqZWN0CiAqCiAqIEBwYXJhbSBjbGFzcy1zdHJpbmc8VD4gJGNsYXNzCiAqIEBwYXJhbSBhcnJheTxtaXhlZD4gJGNvbnN0cnVjdG9yX2FyZ3MKICogQHJldHVybiBUfG51bGx8ZmFsc2UKICovCmZ1bmN0aW9uIG15c3FsaV9mZXRjaF9vYmplY3QobXlzcWxpX3Jlc3VsdCAkcmVzdWx0LCBzdHJpbmcgJGNsYXNzID0gJ3N0ZENsYXNzJywgYXJyYXkgJGNvbnN0cnVjdG9yX2FyZ3MgPSBbXSkge30KCmNsYXNzIG15c3FsaV9zdG10CnsKICAgIC8qKgogICAgICogQHZhciBpbnQ8LTEsbWF4PnxudW1lcmljLXN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGFmZmVjdGVkX3Jvd3M7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGVycm5vOwoKICAgIC8qKgogICAgICogQHZhciBsaXN0PGFycmF5e2Vycm5vOiBpbnQsIHNxbHN0YXRlOiBzdHJpbmcsIGVycm9yOiBzdHJpbmd9PgogICAgICovCiAgICBwdWJsaWMgJGVycm9yX2xpc3Q7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGVycm9yOwoKICAgIC8qKgogICAgICogQHZhciAwfHBvc2l0aXZlLWludAogICAgICovCiAgICBwdWJsaWMgJGZpZWxkX2NvdW50OwoKICAgIC8qKgogICAgICogQHZhciBpbnR8c3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkaW5zZXJ0X2lkOwoKICAgIC8qKgogICAgICogQHZhciBpbnQ8MCxtYXg+fG51bWVyaWMtc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkbnVtX3Jvd3M7CgogICAgLyoqCiAgICAgKiBAdmFyIDB8cG9zaXRpdmUtaW50CiAgICAgKi8KICAgIHB1YmxpYyAkcGFyYW1fY291bnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIG5vbi1lbXB0eS1zdHJpbmcKICAgICAqLwogICAgcHVibGljICRzcWxzdGF0ZTsKCn0KPD9waHAKCi8qKgogKiBAcGFyYW0gYXJyYXk8U29ja2V0PnxudWxsICYkcmVhZAogKiBAcGFyYW0gYXJyYXk8U29ja2V0PnxudWxsICYkd3JpdGUKICogQHBhcmFtIGFycmF5PFNvY2tldD58bnVsbCAmJGV4Y2VwdAogKiBAcGFyYW0tb3V0ICgkcmVhZCBpcyBub3QgbnVsbCA/IGFycmF5PFNvY2tldD4gOiBudWxsKSAkcmVhZAogKiBAcGFyYW0tb3V0ICgkd3JpdGUgaXMgbm90IG51bGwgPyBhcnJheTxTb2NrZXQ+IDogbnVsbCkgJHdyaXRlCiAqIEBwYXJhbS1vdXQgKCRleGNlcHQgaXMgbm90IG51bGwgPyBhcnJheTxTb2NrZXQ+IDogbnVsbCkgJGV4Y2VwdAogKi8KZnVuY3Rpb24gc29ja2V0X3NlbGVjdCg/YXJyYXkgJiRyZWFkLCA/YXJyYXkgJiR3cml0ZSwgP2FycmF5ICYkZXhjZXB0LCA/aW50ICRzZWNvbmRzLCBpbnQgJG1pY3Jvc2Vjb25kcyA9IDApOiBpbnR8ZmFsc2Uge30KPD9waHAKCi8qKgogKiBAdGVtcGxhdGUtY292YXJpYW50IFQgb2Ygb2JqZWN0CiAqLwpjbGFzcyBSZWZsZWN0aW9uQ2xhc3MKewoKCS8qKgoJICogQHZhciBjbGFzcy1zdHJpbmc8VD4KCSAqLwoJcHVibGljICRuYW1lOwoKCS8qKgoJICogQHBhcmFtIFR8Y2xhc3Mtc3RyaW5nPFQ+ICRhcmd1bWVudAoJICogQHRocm93cyBSZWZsZWN0aW9uRXhjZXB0aW9uCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkYXJndW1lbnQpIHt9CgoJLyoqCgkgKiBAcmV0dXJuIGNsYXNzLXN0cmluZzxUPgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpIDogc3RyaW5nOwoKCS8qKgoJICogQHBhcmFtIG1peGVkIC4uLiRhcmdzCgkgKgoJICogQHJldHVybiBUCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBuZXdJbnN0YW5jZSguLi4kYXJncykge30KCgkvKioKCSAqIEBwYXJhbSBhcnJheTxpbnR8c3RyaW5nLCBtaXhlZD4gJGFyZ3MKCSAqCgkgKiBAcmV0dXJuIFQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIG5ld0luc3RhbmNlQXJncyhhcnJheSAkYXJncykge30KCgkvKioKCSAqIEByZXR1cm4gVAoJICovCglwdWJsaWMgZnVuY3Rpb24gbmV3SW5zdGFuY2VXaXRob3V0Q29uc3RydWN0b3IoKTsKCiAgICAvKioKICAgICAqIEByZXR1cm4gbGlzdDxSZWZsZWN0aW9uQXR0cmlidXRlPG9iamVjdD4+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKD9zdHJpbmcgJG5hbWUgPSBudWxsLCBpbnQgJGZsYWdzID0gMCkKICAgIHsKICAgIH0KfQo8P3BocAoKLyoqCiAqIEBpbXBsZW1lbnRzIFRyYXZlcnNhYmxlPGFycmF5PGludHxzdHJpbmcsIG1peGVkPj4KICogQGltcGxlbWVudHMgSXRlcmF0b3JBZ2dyZWdhdGU8YXJyYXk8aW50fHN0cmluZywgbWl4ZWQ+PgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnBkb3N0YXRlbWVudC5waHAKICovCmNsYXNzIFBET1N0YXRlbWVudCBpbXBsZW1lbnRzIFRyYXZlcnNhYmxlLCBJdGVyYXRvckFnZ3JlZ2F0ZQp7CiAgICAvKioKICAgICAqIEB0ZW1wbGF0ZSBUIG9mIG9iamVjdAogICAgICogQHBhcmFtIGNsYXNzLXN0cmluZzxUPiAkY2xhc3MKICAgICAqIEBwYXJhbSBhcnJheTxtaXhlZD4gJGN0b3JBcmdzCiAgICAgKiBAcmV0dXJuIGZhbHNlfFQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZldGNoT2JqZWN0KCRjbGFzcyA9IFxzdGRDbGFzczo6Y2xhc3MsIGFycmF5ICRjdG9yQXJncyA9IGFycmF5KCkpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5e25hbWU6IHN0cmluZywgdGFibGU/OiBzdHJpbmcsIG5hdGl2ZV90eXBlPzogc3RyaW5nLCBsZW46IGludCwgZmxhZ3M6IGFycmF5PGludCwgc3RyaW5nPiwgcHJlY2lzaW9uOiBpbnQ8MCwgbWF4PiwgcGRvX3R5cGU6IFBETzo6UEFSQU1fKiB9fGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2x1bW5NZXRhKGludCAkY29sdW1uKSB7fQp9Cjw/cGhwCgovKioKICogQHRlbXBsYXRlIFRJbiBvZiBtaXhlZAogKiBAdGVtcGxhdGUgVFJldHVybiBvZiBtaXhlZAogKgogKiBAcGFyYW0gYXJyYXk8VEluPiAkb25lCiAqIEBwYXJhbSBjYWxsYWJsZShUUmV0dXJuLCBUSW4pOiBUUmV0dXJuICR0d28KICogQHBhcmFtIFRSZXR1cm4gJHRocmVlCiAqCiAqIEByZXR1cm4gVFJldHVybgogKi8KZnVuY3Rpb24gYXJyYXlfcmVkdWNlKAoJYXJyYXkgJG9uZSwKCWNhbGxhYmxlICR0d28sCgkkdGhyZWUgPSBudWxsCikge30KCi8qKgogKiBAdGVtcGxhdGUgVCBvZiBtaXhlZAogKgogKiBAcGFyYW0gYXJyYXk8VD4gJGFycmF5CiAqIEByZXR1cm4gKCRhcnJheSBpcyBub24tZW1wdHktYXJyYXkgPyBub24tZW1wdHktbGlzdDxUPiA6IGxpc3Q8VD4pCiAqLwpmdW5jdGlvbiBhcnJheV92YWx1ZXMoYXJyYXkgJGFycmF5KTogYXJyYXkge30KCi8qKgogKiBAdGVtcGxhdGUgVEtleSBhcyAoaW50fHN0cmluZykKICogQHRlbXBsYXRlIFQKICogQHRlbXBsYXRlIFRBcnJheSBhcyBhcnJheTxUS2V5LFQ+CiAqCiAqIEBwYXJhbSBUQXJyYXkgJGFycmF5CiAqIEBwYXJhbSBjYWxsYWJsZShULFQpOmludCAkY2FsbGJhY2sKICovCmZ1bmN0aW9uIHVhc29ydChhcnJheSAmJGFycmF5LCBjYWxsYWJsZSAkY2FsbGJhY2spOiBib29sCnt9CgovKioKICogQHRlbXBsYXRlIFQKICogQHRlbXBsYXRlIFRBcnJheSBhcyBhcnJheTxUPgogKgogKiBAcGFyYW0gVEFycmF5ICRhcnJheQogKiBAcGFyYW0gY2FsbGFibGUoVCxUKTppbnQgJGNhbGxiYWNrCiAqLwpmdW5jdGlvbiB1c29ydChhcnJheSAmJGFycmF5LCBjYWxsYWJsZSAkY2FsbGJhY2spOiBib29sCnt9CgovKioKICogQHRlbXBsYXRlIFRLZXkgYXMgKGludHxzdHJpbmcpCiAqIEB0ZW1wbGF0ZSBUCiAqIEB0ZW1wbGF0ZSBUQXJyYXkgYXMgYXJyYXk8VEtleSxUPgogKgogKiBAcGFyYW0gVEFycmF5ICRhcnJheQogKiBAcGFyYW0gY2FsbGFibGUoVEtleSxUS2V5KTppbnQgJGNhbGxiYWNrCiAqLwpmdW5jdGlvbiB1a3NvcnQoYXJyYXkgJiRhcnJheSwgY2FsbGFibGUgJGNhbGxiYWNrKTogYm9vbAp7Cn0KCi8qKgogKiBAdGVtcGxhdGUgVFYgb2YgbWl4ZWQKICogQHRlbXBsYXRlIFRLIG9mIG1peGVkCiAqCiAqIEBwYXJhbSBhcnJheTxUSywgVFY+ICRvbmUKICogQHBhcmFtIGFycmF5PFRLLCBUVj4gJHR3bwogKiBAcGFyYW0gY2FsbGFibGUoVFYsIFRWKTogaW50ICR0aHJlZQogKiBAcmV0dXJuIGFycmF5PFRLLCBUVj4KICovCmZ1bmN0aW9uIGFycmF5X3VkaWZmKAogICAgYXJyYXkgJG9uZSwKICAgIGFycmF5ICR0d28sCiAgICBjYWxsYWJsZSAkdGhyZWUKKTogYXJyYXkge30KCi8qKgogKiBAcGFyYW0gYXJyYXk8YXJyYXkta2V5LCBtaXhlZD4gJHZhbHVlCiAqIEByZXR1cm4gKCR2YWx1ZSBpcyBfX2Fsd2F5cy1saXN0ID8gdHJ1ZSA6IGZhbHNlKQogKi8KZnVuY3Rpb24gYXJyYXlfaXNfbGlzdChhcnJheSAkdmFsdWUpOiBib29sIHt9CgovKioKICogQHRlbXBsYXRlIFRLIG9mIGFycmF5LWtleQogKiBAdGVtcGxhdGUgVFYgb2YgbWl4ZWQKICoKICogQHBhcmFtIGFycmF5PFRLLCBUVj4gJG9uZQogKiBAcGFyYW0gYXJyYXk8VEssIFRWPiAkdHdvCiAqIEBwYXJhbSBjYWxsYWJsZShUSywgVEspOiBpbnQgJHRocmVlCiAqIEByZXR1cm4gYXJyYXk8VEssIFRWPgogKi8KZnVuY3Rpb24gYXJyYXlfZGlmZl91YXNzb2MoCiAgICBhcnJheSAkb25lLAogICAgYXJyYXkgJHR3bywKICAgIGNhbGxhYmxlICR0aHJlZQopOiBhcnJheSB7fQoKLyoqCiAqIEB0ZW1wbGF0ZSBUSyBvZiBhcnJheS1rZXkKICogQHRlbXBsYXRlIFRWIG9mIG1peGVkCiAqCiAqIEBwYXJhbSBhcnJheTxUSywgVFY+ICRvbmUKICogQHBhcmFtIGFycmF5PFRLLCBUVj4gJHR3bwogKiBAcGFyYW0gY2FsbGFibGUoVEssIFRLKTogaW50ICR0aHJlZQogKiBAcmV0dXJuIGFycmF5PFRLLCBUVj4KICovCmZ1bmN0aW9uIGFycmF5X2RpZmZfdWtleSgKICAgIGFycmF5ICRvbmUsCiAgICBhcnJheSAkdHdvLAogICAgY2FsbGFibGUgJHRocmVlCik6IGFycmF5IHt9CgovKioKICogQHRlbXBsYXRlIFRLIG9mIGFycmF5LWtleQogKiBAdGVtcGxhdGUgVFYgb2YgbWl4ZWQKICoKICogQHBhcmFtIGFycmF5PFRLLCBUVj4gJG9uZQogKiBAcGFyYW0gYXJyYXk8VEssIFRWPiAkdHdvCiAqIEBwYXJhbSBjYWxsYWJsZShUSywgVEspOiBpbnQgJHRocmVlCiAqIEByZXR1cm4gYXJyYXk8VEssIFRWPgogKi8KZnVuY3Rpb24gYXJyYXlfaW50ZXJzZWN0X3Vhc3NvYygKICAgIGFycmF5ICRvbmUsCiAgICBhcnJheSAkdHdvLAogICAgY2FsbGFibGUgJHRocmVlCik6IGFycmF5IHt9CgovKioKICogQHRlbXBsYXRlIFRLIG9mIGFycmF5LWtleQogKiBAdGVtcGxhdGUgVFYgb2YgbWl4ZWQKICoKICogQHBhcmFtIGFycmF5PFRLLCBUVj4gJG9uZQogKiBAcGFyYW0gYXJyYXk8VEssIFRWPiAkdHdvCiAqIEBwYXJhbSBjYWxsYWJsZShUSywgVEspOiBpbnQgJHRocmVlCiAqCiAqIEByZXR1cm4gYXJyYXk8VEssIFRWPgogKi8KZnVuY3Rpb24gYXJyYXlfaW50ZXJzZWN0X3VrZXkoCiAgICBhcnJheSAkb25lLAogICAgYXJyYXkgJHR3bywKICAgIGNhbGxhYmxlICR0aHJlZQopOiBhcnJheSB7fQoKLyoqCiAqIEB0ZW1wbGF0ZSBUSyBvZiBhcnJheS1rZXkKICogQHRlbXBsYXRlIFRWIG9mIG1peGVkCiAqCiAqIEBwYXJhbSBhcnJheTxUSywgVFY+ICRvbmUKICogQHBhcmFtIGFycmF5PFRLLCBUVj4gJHR3bwogKiBAcGFyYW0gY2FsbGFibGUoVFYsIFRWKTogaW50ICR0aHJlZQogKgogKiBAcmV0dXJuIGFycmF5PFRLLCBUVj4KICovCmZ1bmN0aW9uIGFycmF5X3VkaWZmX2Fzc29jKAogICAgYXJyYXkgJG9uZSwKICAgIGFycmF5ICR0d28sCiAgICBjYWxsYWJsZSAkdGhyZWUKKTogYXJyYXkge30KCi8qKgogKiBAdGVtcGxhdGUgVEsgb2YgYXJyYXkta2V5CiAqIEB0ZW1wbGF0ZSBUViBvZiBtaXhlZAogKgogKiBAcGFyYW0gYXJyYXk8VEssIFRWPiAkb25lCiAqIEBwYXJhbSBhcnJheTxUSywgVFY+ICR0d28KICogQHBhcmFtIGNhbGxhYmxlKFRWLCBUVik6IGludCAkdGhyZWUKICogQHBhcmFtIGNhbGxhYmxlKFRLLCBUSyk6IGludCAkZm91cgogKiBAcmV0dXJuIGFycmF5PFRLLCBUVj4KICovCmZ1bmN0aW9uIGFycmF5X3VkaWZmX3Vhc3NvYygKICAgIGFycmF5ICRvbmUsCiAgICBhcnJheSAkdHdvLAogICAgY2FsbGFibGUgJHRocmVlLAogICAgY2FsbGFibGUgJGZvdXIKKTogYXJyYXkge30KCi8qKgogKiBAdGVtcGxhdGUgVEsgb2YgYXJyYXkta2V5CiAqIEB0ZW1wbGF0ZSBUViBvZiBtaXhlZAogKgogKiBAcGFyYW0gYXJyYXk8VEssIFRWPiAkb25lCiAqIEBwYXJhbSBhcnJheTxUSywgVFY+ICR0d28KICogQHBhcmFtIGNhbGxhYmxlKFRWLCBUVik6IGludCAkdGhyZWUKICogQHJldHVybiBhcnJheTxUSywgVFY+CiAqLwpmdW5jdGlvbiBhcnJheV91aW50ZXJzZWN0X2Fzc29jKAogICAgYXJyYXkgJG9uZSwKICAgIGFycmF5ICR0d28sCiAgICBjYWxsYWJsZSAkdGhyZWUsCik6IGFycmF5IHt9CgovKioKICogQHRlbXBsYXRlIFRLIG9mIGFycmF5LWtleQogKiBAdGVtcGxhdGUgVFYgb2YgbWl4ZWQKICoKICogQHBhcmFtIGFycmF5PFRLLCBUVj4gJG9uZQogKiBAcGFyYW0gYXJyYXk8VEssIFRWPiAkdHdvCiAqIEBwYXJhbSBjYWxsYWJsZShUViwgVFYpOiBpbnQgJHRocmVlCiAqIEBwYXJhbSBjYWxsYWJsZShUSywgVEspOiBpbnQgJGZvdXIKICogQHJldHVybiBhcnJheTxUSywgVFY+CiAqLwpmdW5jdGlvbiBhcnJheV91aW50ZXJzZWN0X3Vhc3NvYygKICAgIGFycmF5ICRvbmUsCiAgICBhcnJheSAkdHdvLAogICAgY2FsbGFibGUgJHRocmVlLAogICAgY2FsbGFibGUgJGZvdXIKKTogYXJyYXkge30KCi8qKgogKiBAdGVtcGxhdGUgVEsgb2YgYXJyYXkta2V5CiAqIEB0ZW1wbGF0ZSBUViBvZiBtaXhlZAogKgogKiBAcGFyYW0gYXJyYXk8VEssIFRWPiAkb25lCiAqIEBwYXJhbSBhcnJheTxUSywgVFY+ICR0d28KICogQHBhcmFtIGNhbGxhYmxlKFRWLCBUVik6IGludCAkdGhyZWUKICogQHJldHVybiBhcnJheTxUSywgVFY+CiAqLwpmdW5jdGlvbiBhcnJheV91aW50ZXJzZWN0KAogICAgYXJyYXkgJG9uZSwKICAgIGFycmF5ICR0d28sCiAgICBjYWxsYWJsZSAkdGhyZWUsCik6IGFycmF5IHt9Cjw/cGhwCgpjbGFzcyBSZWZsZWN0aW9uQ2xhc3NDb25zdGFudAp7CiAgICAvKioKICAgICAqIEByZXR1cm4gbGlzdDxSZWZsZWN0aW9uQXR0cmlidXRlPG9iamVjdD4+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKD9zdHJpbmcgJG5hbWUgPSBudWxsLCBpbnQgJGZsYWdzID0gMCkKICAgIHsKICAgIH0KfQo8P3BocAoKY2xhc3MgWmlwQXJjaGl2ZQp7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHN0YXR1czsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkc3RhdHVzU3lzOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRudW1GaWxlczsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkZmlsZW5hbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGNvbW1lbnQ7Cgp9Cjw/cGhwCgovKioKICogQHBhcmFtICgkYWxsb3dfc3RyaW5nIGlzIGZhbHNlID8gb2JqZWN0IDogb2JqZWN0fHN0cmluZykgJG9iamVjdF9vcl9jbGFzcwogKiBAcGFyYW0gc3RyaW5nICRjbGFzcwogKiBAcGFyYW0gYm9vbCAkYWxsb3dfc3RyaW5nCiAqIEByZXR1cm4gKCRhbGxvd19zdHJpbmcgaXMgZmFsc2UgPyAoJG9iamVjdF9vcl9jbGFzcyBpcyBvYmplY3QgPyBib29sIDogZmFsc2UpIDogYm9vbCkKICovCmZ1bmN0aW9uIGlzX3N1YmNsYXNzX29mKCRvYmplY3Rfb3JfY2xhc3MsIHN0cmluZyAkY2xhc3MsICRhbGxvd19zdHJpbmcgPSB0cnVlKTogYm9vbHt9CgovKioKICogQHBhcmFtICgkYWxsb3dfc3RyaW5nIGlzIGZhbHNlID8gb2JqZWN0IDogb2JqZWN0fHN0cmluZykgJG9iamVjdF9vcl9jbGFzcwogKiBAcGFyYW0gc3RyaW5nICRjbGFzcwogKiBAcGFyYW0gYm9vbCAkYWxsb3dfc3RyaW5nCiAqIEByZXR1cm4gKCRhbGxvd19zdHJpbmcgaXMgZmFsc2UgPyAoJG9iamVjdF9vcl9jbGFzcyBpcyBvYmplY3QgPyBib29sIDogZmFsc2UpIDogYm9vbCkKICovCmZ1bmN0aW9uIGlzX2EoJG9iamVjdF9vcl9jbGFzcywgc3RyaW5nICRjbGFzcywgJGFsbG93X3N0cmluZyA9IGZhbHNlKTogYm9vbHt9CgovKioKICogQHBhcmFtIG1peGVkICR2YXIKICogQHBhcmFtIGJvb2wgJHJldHVybgogKiBAcmV0dXJuICgkcmV0dXJuIGlzIHRydWUgPyBzdHJpbmcgOiBudWxsKQogKi8KZnVuY3Rpb24gdmFyX2V4cG9ydCgkdmFyLCBib29sICRyZXR1cm4gPSBmYWxzZSkge30KCi8qKgogKiBAcGFyYW0gbWl4ZWQgJHZhcgogKiBAcmV0dXJuICgkcmV0dXJuIGlzIHRydWUgPyBzdHJpbmcgOiBib29sKQogKi8KZnVuY3Rpb24gaGlnaGxpZ2h0X2ZpbGUoJHZhciwgYm9vbCAkcmV0dXJuID0gZmFsc2UpIHt9CgovKioKICogQHBhcmFtIG1peGVkICR2YXIKICogQHJldHVybiAoJHJldHVybiBpcyB0cnVlID8gc3RyaW5nIDogYm9vbCkKICovCmZ1bmN0aW9uIHNob3dfc291cmNlKCR2YXIsIGJvb2wgJHJldHVybiA9IGZhbHNlKSB7fQoKLyoqCiAqIEBwYXJhbSBtaXhlZCAkdmFyCiAqIEBwYXJhbSBib29sICRyZXR1cm4KICogQHJldHVybiAoJHJldHVybiBpcyB0cnVlID8gc3RyaW5nIDogdHJ1ZSkKICovCmZ1bmN0aW9uIHByaW50X3IoJHZhciwgYm9vbCAkcmV0dXJuID0gZmFsc2UpIHt9CgovKioKICogQHJldHVybiAoJHN0cmluZyBpcyBub24tZW1wdHktc3RyaW5nID8gbm9uLWVtcHR5LXN0cmluZyA6IHN0cmluZykKICovCmZ1bmN0aW9uIHNvZGl1bV9iaW4yYmFzZTY0KHN0cmluZyAkc3RyaW5nLCBpbnQgJGlkKTogc3RyaW5nIHt9CgovKioKICogQHJldHVybiAoJHN0cmluZyBpcyBub24tZW1wdHktc3RyaW5nID8gbm9uLWVtcHR5LXN0cmluZyA6IHN0cmluZykKICovCmZ1bmN0aW9uIHNvZGl1bV9iaW4yaGV4KHN0cmluZyAkc3RyaW5nKTogc3RyaW5nIHt9CgovKioKICogQHJldHVybiAoJHN0cmluZyBpcyBub24tZW1wdHktc3RyaW5nID8gbm9uLWVtcHR5LXN0cmluZyA6IHN0cmluZykKICovCmZ1bmN0aW9uIGJhc2U2NF9lbmNvZGUoc3RyaW5nICRzdHJpbmcpIDogc3RyaW5nIHt9CgovKioKICogQHJldHVybiAoJHN0cmluZyBpcyBub24tZW1wdHktc3RyaW5nID8gbm9uLWVtcHR5LXN0cmluZyA6IHN0cmluZykKICovCmZ1bmN0aW9uIGJpbjJoZXgoc3RyaW5nICRzdHJpbmcpOiBzdHJpbmcge30KCi8qKgogKiBAcmV0dXJuICgkc3RyaW5nIGlzIG5vbi1lbXB0eS1zdHJpbmcgPyBub24tZW1wdHktc3RyaW5nIDogc3RyaW5nKQogKi8KZnVuY3Rpb24gc3RyX3NodWZmbGUoc3RyaW5nICRzdHJpbmcpOiBzdHJpbmcge30KCi8qKgogKiBAcGFyYW0gYXJyYXk8bWl4ZWQ+ICRyZXN1bHQKICogQHBhcmFtLW91dCBhcnJheTxpbnR8c3RyaW5nLCBhcnJheTxtaXhlZD58c3RyaW5nPiAkcmVzdWx0CiAqLwpmdW5jdGlvbiBwYXJzZV9zdHIoc3RyaW5nICRzdHJpbmcsIGFycmF5ICYkcmVzdWx0KTogdm9pZCB7fQoKLyoqCiAqIEBwYXJhbSBhcnJheTxtaXhlZD4gJHJlc3VsdAogKiBAcGFyYW0tb3V0IGFycmF5PGludHxzdHJpbmcsIGFycmF5PG1peGVkPnxzdHJpbmc+ICRyZXN1bHQKICovCmZ1bmN0aW9uIG1iX3BhcnNlX3N0cihzdHJpbmcgJHN0cmluZywgYXJyYXkgJiRyZXN1bHQpOiBib29sIHt9CgovKiogQHBhcmFtLW91dCBmbG9hdCAkcGVyY2VudCAqLwpmdW5jdGlvbiBzaW1pbGFyX3RleHQoc3RyaW5nICRzdHJpbmcxLCBzdHJpbmcgJHN0cmluZzIsID9mbG9hdCAmJHBlcmNlbnQgPSBudWxsKSA6IGludCB7fQoKLyoqCiAqIEBwYXJhbSBtaXhlZCAkb3V0cHV0CiAqIEBwYXJhbSBtaXhlZCAkcmVzdWx0X2NvZGUKICoKICogQHBhcmFtLW91dCBsaXN0PHN0cmluZz4gJG91dHB1dAogKiBAcGFyYW0tb3V0IGludCAkcmVzdWx0X2NvZGUKICoKICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICovCmZ1bmN0aW9uIGV4ZWMoc3RyaW5nICRjb21tYW5kLCAmJG91dHB1dCwgJiRyZXN1bHRfY29kZSkge30KCi8qKgogKiBAcGFyYW0gbWl4ZWQgJHJlc3VsdF9jb2RlCiAqIEBwYXJhbS1vdXQgaW50ICRyZXN1bHRfY29kZQogKgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogKi8KZnVuY3Rpb24gc3lzdGVtKHN0cmluZyAkY29tbWFuZCwgJiRyZXN1bHRfY29kZSkge30KCi8qKgogKiBAcGFyYW0gbWl4ZWQgJHJlc3VsdF9jb2RlCiAqIEBwYXJhbS1vdXQgaW50ICRyZXN1bHRfY29kZQogKi8KZnVuY3Rpb24gcGFzc3RocnUoc3RyaW5nICRjb21tYW5kLCAmJHJlc3VsdF9jb2RlKTogP2Jvb2wge30KCgovKioKICogQHRlbXBsYXRlIFQKICogQHRlbXBsYXRlIFRBcnJheSBhcyBhcnJheTxUPgogKgogKiBAcGFyYW0gVEFycmF5ICRhcnJheQogKi8KZnVuY3Rpb24gc2h1ZmZsZShhcnJheSAmJGFycmF5KTogYm9vbAp7Cn0KCi8qKgogKiBAdGVtcGxhdGUgVAogKiBAdGVtcGxhdGUgVEFycmF5IGFzIGFycmF5PFQ+CiAqCiAqIEBwYXJhbSBUQXJyYXkgJGFycmF5CiAqLwpmdW5jdGlvbiBzb3J0KGFycmF5ICYkYXJyYXksIGludCAkZmxhZ3MgPSBTT1JUX1JFR1VMQVIpOiBib29sCnsKfQoKLyoqCiAqIEB0ZW1wbGF0ZSBUCiAqIEB0ZW1wbGF0ZSBUQXJyYXkgYXMgYXJyYXk8VD4KICoKICogQHBhcmFtIFRBcnJheSAkYXJyYXkKICovCmZ1bmN0aW9uIHJzb3J0KGFycmF5ICYkYXJyYXksIGludCAkZmxhZ3MgPSBTT1JUX1JFR1VMQVIpOiBib29sCnsKfQoKLyoqCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogKiBAcGFyYW0tb3V0IG51bGwgJHN0cmluZwogKi8KZnVuY3Rpb24gc29kaXVtX21lbXplcm8oc3RyaW5nICYkc3RyaW5nKTogdm9pZAp7Cn0KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0cmVhbQogKiBAcGFyYW0gbWl4ZWQgJHZhcnMKICogQHBhcmFtLW91dCBzdHJpbmd8aW50fGZsb2F0fG51bGwgJHZhcnMKICoKICogQHJldHVybiBsaXN0PG1peGVkPnxpbnR8ZmFsc2UKICovCmZ1bmN0aW9uIGZzY2FuZigkc3RyZWFtLCBzdHJpbmcgJGZvcm1hdCwgJi4uLiR2YXJzKSB7fQoKLyoqCiAqIEBwYXJhbSBtaXhlZCAkd2FyCiAqIEBwYXJhbSBtaXhlZCAkdmFycwogKiBAcGFyYW0tb3V0IHN0cmluZ3xpbnR8ZmxvYXR8bnVsbCAkd2FyCiAqIEBwYXJhbS1vdXQgc3RyaW5nfGludHxmbG9hdHxudWxsICR2YXJzCiAqCiAqIEByZXR1cm4gaW50fGFycmF5PG1peGVkPnxudWxsCiAqLwpmdW5jdGlvbiBzc2NhbmYoc3RyaW5nICRzdHJpbmcsIHN0cmluZyAkZm9ybWF0LCAmJHdhciwgJi4uLiR2YXJzKSB7fQoKLyoqCiAqIEB0ZW1wbGF0ZSBURmxhZ3MgYXMgaW50CiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4KICogQHBhcmFtIHN0cmluZyAkc3ViamVjdAogKiBAcGFyYW0gbWl4ZWQgJG1hdGNoZXMKICogQHBhcmFtIFRGbGFncyAkZmxhZ3MKICogQHBhcmFtLW91dCAoCiAqICAgICAgICAgIFRGbGFncyBpcyAxCiAqICAgICAgICAgID8gYXJyYXk8bGlzdDxzdHJpbmc+PgogKiAgICAgICAgICA6IChURmxhZ3MgaXMgMgogKiAgICAgICAgICAgICAgPyBsaXN0PGFycmF5PHN0cmluZz4+CiAqICAgICAgICAgICAgICA6IChURmxhZ3MgaXMgMjU2fDI1NwogKiAgICAgICAgICAgICAgICAgID8gYXJyYXk8bGlzdDxhcnJheXtzdHJpbmcsIGludH0+PgogKiAgICAgICAgICAgICAgICAgIDogKFRGbGFncyBpcyAyNTgKICogICAgICAgICAgICAgICAgICAgICAgPyBsaXN0PGFycmF5PGFycmF5e3N0cmluZywgaW50fT4+CiAqICAgICAgICAgICAgICAgICAgICAgIDogKFRGbGFncyBpcyA1MTJ8NTEzCiAqICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFycmF5PGxpc3Q8P3N0cmluZz4+CiAqICAgICAgICAgICAgICAgICAgICAgICAgICA6IChURmxhZ3MgaXMgNTE0CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsaXN0PGFycmF5PD9zdHJpbmc+PgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKFRGbGFncyBpcyA3NzAKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBsaXN0PGFycmF5PGFycmF5ez9zdHJpbmcsIGludH0+PgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChURmxhZ3MgaXMgMCA/IGFycmF5PGxpc3Q8c3RyaW5nPj4gOiBhcnJheTxtaXhlZD4pCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgKQogKiAgICAgICAgICAgICAgICAgICAgICApCiAqICAgICAgICAgICAgICAgICAgKQogKiAgICAgICAgICAgICAgKQogKiAgICAgICAgICApCiAqICAgICAgICApICRtYXRjaGVzCiAqIEByZXR1cm4gaW50fGZhbHNlCiAqLwpmdW5jdGlvbiBwcmVnX21hdGNoX2FsbCgkcGF0dGVybiwgJHN1YmplY3QsICYkbWF0Y2hlcyA9IFtdLCBpbnQgJGZsYWdzID0gMSwgaW50ICRvZmZzZXQgPSAwKSB7fQoKLyoqCiAqIEB0ZW1wbGF0ZSBURmxhZ3MgYXMgaW50LW1hc2s8MCwgMjU2LCA1MTI+CiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4KICogQHBhcmFtIHN0cmluZyAkc3ViamVjdAogKiBAcGFyYW0gbWl4ZWQgJG1hdGNoZXMKICogQHBhcmFtIFRGbGFncyAkZmxhZ3MKICogQHBhcmFtLW91dCAoCiAqICAgICAgICAgICAgIFRGbGFncyBpcyAyNTYKICogICAgICAgICAgICAgPyBhcnJheTxhcnJheS1rZXksIGFycmF5e3N0cmluZywgMHxwb3NpdGl2ZS1pbnR9fGFycmF5eycnLCAtMX0+CiAqICAgICAgICAgICAgIDogKFRGbGFncyBpcyA1MTIKICogICAgICAgICAgICAgICAgID8gYXJyYXk8YXJyYXkta2V5LCBzdHJpbmd8bnVsbD4KICogICAgICAgICAgICAgICAgIDogKFRGbGFncyBpcyA3NjgKICogICAgICAgICAgICAgICAgICAgICA/IGFycmF5PGFycmF5LWtleSwgYXJyYXl7c3RyaW5nLCAwfHBvc2l0aXZlLWludH18YXJyYXl7bnVsbCwgLTF9PgogKiAgICAgICAgICAgICAgICAgICAgIDogYXJyYXk8YXJyYXkta2V5LCBzdHJpbmc+CiAqICAgICAgICAgICAgICAgICAgICAgKQogKiAgICAgICAgICAgICAgICAgKQogKiAgICAgICAgICAgICApICRtYXRjaGVzCiAqIEByZXR1cm4gMXwwfGZhbHNlCiAqLwpmdW5jdGlvbiBwcmVnX21hdGNoKCRwYXR0ZXJuLCAkc3ViamVjdCwgJiRtYXRjaGVzID0gW10sIGludCAkZmxhZ3MgPSAwLCBpbnQgJG9mZnNldCA9IDApIHt9CgovKioKICogQHBhcmFtIHN0cmluZ3xhcnJheTxtaXhlZD4gJHBhdHRlcm4KICogQHBhcmFtIGNhbGxhYmxlKGFycmF5PGludHxzdHJpbmcsIHN0cmluZz4pOnN0cmluZyAkY2FsbGJhY2sKICogQHBhcmFtIHN0cmluZ3xhcnJheTxtaXhlZD4gJHN1YmplY3QKICogQHBhcmFtIGludCAkY291bnQKICogQHBhcmFtLW91dCAwfHBvc2l0aXZlLWludCAkY291bnQKICogQHJldHVybiAoJHN1YmplY3QgaXMgYXJyYXkgPyBsaXN0PHN0cmluZz58bnVsbCA6IHN0cmluZ3xudWxsKQogKi8KZnVuY3Rpb24gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCRwYXR0ZXJuLCAkY2FsbGJhY2ssICRzdWJqZWN0LCBpbnQgJGxpbWl0ID0gLTEsICYkY291bnQgPSBudWxsLCBpbnQgJGZsYWdzID0gMCkge30KCi8qKgogKiBAcGFyYW0gc3RyaW5nfGFycmF5PG1peGVkPiAkcGF0dGVybgogKiBAcGFyYW0gc3RyaW5nfGFycmF5PG1peGVkPiAkcmVwbGFjZW1lbnQKICogQHBhcmFtIHN0cmluZ3xhcnJheTxtaXhlZD4gJHN1YmplY3QKICogQHBhcmFtIGludCAkY291bnQKICogQHBhcmFtLW91dCAwfHBvc2l0aXZlLWludCAkY291bnQKICogQHJldHVybiAoJHN1YmplY3QgaXMgYXJyYXkgPyBsaXN0PHN0cmluZz58bnVsbCA6IHN0cmluZ3xudWxsKQogKi8KZnVuY3Rpb24gcHJlZ19yZXBsYWNlKCRwYXR0ZXJuLCAkcmVwbGFjZW1lbnQsICRzdWJqZWN0LCBpbnQgJGxpbWl0ID0gLTEsICYkY291bnQgPSBudWxsKSB7fQoKLyoqCiAqIEBwYXJhbSBzdHJpbmd8YXJyYXk8bWl4ZWQ+ICRwYXR0ZXJuCiAqIEBwYXJhbSBzdHJpbmd8YXJyYXk8bWl4ZWQ+ICRyZXBsYWNlbWVudAogKiBAcGFyYW0gc3RyaW5nfGFycmF5PG1peGVkPiAkc3ViamVjdAogKiBAcGFyYW0gaW50ICRjb3VudAogKiBAcGFyYW0tb3V0IDB8cG9zaXRpdmUtaW50ICRjb3VudAogKiBAcmV0dXJuICgkc3ViamVjdCBpcyBhcnJheSA/IGxpc3Q8c3RyaW5nPiA6IHN0cmluZ3xudWxsKQogKi8KZnVuY3Rpb24gcHJlZ19maWx0ZXIoJHBhdHRlcm4sICRyZXBsYWNlbWVudCwgJHN1YmplY3QsIGludCAkbGltaXQgPSAtMSwgJiRjb3VudCA9IG51bGwpIHt9CgovKioKICogQHBhcmFtIGFycmF5PG1peGVkPnxzdHJpbmcgJHNlYXJjaAogKiBAcGFyYW0gYXJyYXk8bWl4ZWQ+fHN0cmluZyAkcmVwbGFjZQogKiBAcGFyYW0gYXJyYXk8bWl4ZWQ+fHN0cmluZyAkc3ViamVjdAogKiBAcGFyYW0tb3V0IGludCAkY291bnQKICogQHJldHVybiBsaXN0PHN0cmluZz58c3RyaW5nCiAqLwpmdW5jdGlvbiBzdHJfcmVwbGFjZSgkc2VhcmNoLCAkcmVwbGFjZSwgJHN1YmplY3QsID9pbnQgJiRjb3VudCA9IG51bGwpIHt9CgovKioKICogQHBhcmFtIGFycmF5PG1peGVkPnxzdHJpbmcgJHNlYXJjaAogKiBAcGFyYW0gYXJyYXk8bWl4ZWQ+fHN0cmluZyAkcmVwbGFjZQogKiBAcGFyYW0gYXJyYXk8bWl4ZWQ+fHN0cmluZyAkc3ViamVjdAogKiBAcGFyYW0tb3V0IGludCAkY291bnQKICogQHJldHVybiBsaXN0PHN0cmluZz58c3RyaW5nCiAqLwpmdW5jdGlvbiBzdHJfaXJlcGxhY2UoJHNlYXJjaCwgJHJlcGxhY2UsICRzdWJqZWN0LCA/aW50ICYkY291bnQgPSBudWxsKSB7fQoKLyoqCiAqIEB0ZW1wbGF0ZSBUUmVhZCBvZiBudWxsfGFycmF5PGFycmF5LWtleSwgcmVzb3VyY2U+CiAqIEB0ZW1wbGF0ZSBUV3JpdGUgb2YgbnVsbHxhcnJheTxhcnJheS1rZXksIHJlc291cmNlPgogKiBAdGVtcGxhdGUgVEV4Y2VwdCBvZiBudWxsfGFycmF5PGFycmF5LWtleSwgcmVzb3VyY2U+CiAqIEBwYXJhbSBUUmVhZCAkcmVhZAogKiBAcGFyYW0gVFdyaXRlICR3cml0ZQogKiBAcGFyYW0gVEV4Y2VwdCAkZXhjZXB0CiAqIEByZXR1cm4gZmFsc2V8MHxwb3NpdGl2ZS1pbnQKICogQHBhcmFtLW91dCAoVFJlYWQgaXMgbnVsbCA/IG51bGwgOiBhcnJheTxhcnJheS1rZXksIHJlc291cmNlPikgJHJlYWQKICogQHBhcmFtLW91dCAoVFdyaXRlIGlzIG51bGwgPyBudWxsIDogYXJyYXk8YXJyYXkta2V5LCByZXNvdXJjZT4pICR3cml0ZQogKiBAcGFyYW0tb3V0IChURXhjZXB0IGlzIG51bGwgPyBudWxsIDogYXJyYXk8YXJyYXkta2V5LCByZXNvdXJjZT4pICRleGNlcHQKICovCmZ1bmN0aW9uIHN0cmVhbV9zZWxlY3QoP2FycmF5ICYkcmVhZCwgP2FycmF5ICYkd3JpdGUsID9hcnJheSAmJGV4Y2VwdCwgP2ludCAkc2Vjb25kcywgP2ludCAkbWljcm9zZWNvbmRzID0gbnVsbCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHN0cmVhbQogKiBAcGFyYW0tb3V0IDB8MSAkd291bGRfYmxvY2sKICovCmZ1bmN0aW9uIGZsb2NrKCRzdHJlYW0sIGludCAkb3BlcmF0aW9uLCBtaXhlZCAmJHdvdWxkX2Jsb2NrID0gbnVsbCk6IGJvb2wge30KCi8qKgogKiBAcGFyYW0tb3V0IGludCAkZXJyb3JfY29kZQogKiBAcGFyYW0tb3V0IHN0cmluZyAkZXJyb3JfbWVzc2FnZQogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlCiAqLwpmdW5jdGlvbiBmc29ja29wZW4oc3RyaW5nICRob3N0bmFtZSwgaW50ICRwb3J0ID0gLTEsID9pbnQgJiRlcnJvcl9jb2RlID0gbnVsbCwgP3N0cmluZyAmJGVycm9yX21lc3NhZ2UgPSBudWxsLCA/ZmxvYXQgJHRpbWVvdXQgPSBudWxsKSB7fQoKLyoqCiAqIEBwYXJhbS1vdXQgc3RyaW5nICRmaWxlbmFtZQogKiBAcGFyYW0tb3V0IGludCAkbGluZQogKi8KZnVuY3Rpb24gaGVhZGVyc19zZW50KD9zdHJpbmcgJiRmaWxlbmFtZSA9IG51bGwsID9pbnQgJiRsaW5lID0gbnVsbCk6IGJvb2wge30KCi8qKgogKiBAcGFyYW0tb3V0IGNhbGxhYmxlLXN0cmluZyAkY2FsbGFibGVfbmFtZQogKiBAcmV0dXJuICgkdmFsdWUgaXMgY2FsbGFibGUgPyB0cnVlIDogZmFsc2UpCiAqLwpmdW5jdGlvbiBpc19jYWxsYWJsZShtaXhlZCAkdmFsdWUsIGJvb2wgJHN5bnRheF9vbmx5ID0gZmFsc2UsID9zdHJpbmcgJiRjYWxsYWJsZV9uYW1lID0gbnVsbCk6IGJvb2wge30KCi8qKgogKiBAcGFyYW0gZmxvYXR8aW50ICRudW0KICogQHJldHVybiAoJG51bSBpcyBmbG9hdCA/IGZsb2F0IDogJG51bSBpcyBpbnQgPyBub24tbmVnYXRpdmUtaW50IDogZmxvYXR8bm9uLW5lZ2F0aXZlLWludCkKICovCmZ1bmN0aW9uIGFicygkbnVtKSB7fQoKLyoqCiAqIEByZXR1cm4gKCRjYXRlZ29yaXplIGlzIHRydWUgPyBhcnJheTxzdHJpbmcsIGFycmF5PHN0cmluZywgbWl4ZWQ+PiA6IGFycmF5PHN0cmluZywgbWl4ZWQ+KQogKi8KZnVuY3Rpb24gZ2V0X2RlZmluZWRfY29uc3RhbnRzKGJvb2wgJGNhdGVnb3JpemUgPSBmYWxzZSk6IGFycmF5IHt9Cjw/cGhwCgppbnRlcmZhY2UgQ291bnRhYmxlCnsKICAgIC8qKgogICAgICogQHJldHVybiAwfHBvc2l0aXZlLWludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50Owp9Cjw/cGhwIGRlY2xhcmUoc3RyaWN0X3R5cGVzID0gMSk7CgpuYW1lc3BhY2UgUEhQU3RhblxSdWxlczsKCnVzZSBQaHBQYXJzZXJcTm9kZTsKdXNlIFBIUFN0YW5cQW5hbHlzZXJcU2NvcGU7CgovKioKICogQGFwaQogKiBAdGVtcGxhdGUgVE5vZGVUeXBlIG9mIE5vZGUKICovCmludGVyZmFjZSBSdWxlCnsKCgkvKioKCSAqIEByZXR1cm4gY2xhc3Mtc3RyaW5nPFROb2RlVHlwZT4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldE5vZGVUeXBlKCk6IHN0cmluZzsKCgkvKioKCSAqIEBwYXJhbSBUTm9kZVR5cGUgJG5vZGUKCSAqIEByZXR1cm4gbGlzdDxJZGVudGlmaWVyUnVsZUVycm9yPgoJICovCglwdWJsaWMgZnVuY3Rpb24gcHJvY2Vzc05vZGUoTm9kZSAkbm9kZSwgU2NvcGUgJHNjb3BlKTogYXJyYXk7Cgp9Cjw/cGhwCgovKioKICogQHRlbXBsYXRlLWNvdmFyaWFudCBUIG9mIFVuaXRFbnVtCiAqIEBleHRlbmRzIFJlZmxlY3Rpb25DbGFzczxUPgogKi8KY2xhc3MgUmVmbGVjdGlvbkVudW0gZXh0ZW5kcyBSZWZsZWN0aW9uQ2xhc3MKewoKCS8qKgoJICogQHJldHVybiAoVCBpcyBCYWNrZWRFbnVtID8gUmVmbGVjdGlvbkVudW1CYWNrZWRDYXNlW10gOiBSZWZsZWN0aW9uRW51bVVuaXRDYXNlW10pCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRDYXNlcygpOiBhcnJheSB7fQoKCS8qKgoJICogQHJldHVybiAoVCBpcyBCYWNrZWRFbnVtID8gUmVmbGVjdGlvbkVudW1CYWNrZWRDYXNlIDogUmVmbGVjdGlvbkVudW1Vbml0Q2FzZSkKCSAqIEB0aHJvd3MgUmVmbGVjdGlvbkV4Y2VwdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q2FzZShzdHJpbmcgJG5hbWUpOiBSZWZsZWN0aW9uRW51bVVuaXRDYXNlIHt9CgoJLyoqCgkgKiBAcGhwc3Rhbi1hc3NlcnQtaWYtdHJ1ZSBzZWxmPEJhY2tlZEVudW0+ICR0aGlzCgkgKiBAcGhwc3Rhbi1hc3NlcnQtaWYtdHJ1ZSAhbnVsbCAkdGhpcy0+Z2V0QmFja2luZ1R5cGUoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gaXNCYWNrZWQoKTogYm9vbCB7fQoKfQo8P3BocAoKaW50ZXJmYWNlIFRocm93YWJsZQp7CgkvKioKCSAqIEByZXR1cm4gc3RyaW5nCgkgKiBAdGhyb3dzIHZvaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldE1lc3NhZ2UoKTsKCgkvKioKCSAqIEByZXR1cm4gbWl4ZWQKCSAqIEB0aHJvd3Mgdm9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q29kZSgpOwoKCS8qKgoJICogQHJldHVybiBzdHJpbmcKCSAqIEB0aHJvd3Mgdm9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0RmlsZSgpOwoKCS8qKgoJICogQHJldHVybiBpbnQKCSAqIEB0aHJvd3Mgdm9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0TGluZSgpOwoKCS8qKgoJICogQHJldHVybiBsaXN0PGFycmF5e2Z1bmN0aW9uOnN0cmluZyxsaW5lPzppbnQsZmlsZT86c3RyaW5nLGNsYXNzPzpjbGFzcy1zdHJpbmcsdHlwZT86Jzo6J3wnLT4nLGFyZ3M/Om1peGVkW10sb2JqZWN0PzpvYmplY3R9PgoJICogQHRocm93cyB2b2lkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRUcmFjZSgpOwoKCS8qKgoJICogQHJldHVybiBzdHJpbmcKCSAqIEB0aHJvd3Mgdm9pZAoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0VHJhY2VBc1N0cmluZygpOwoKCS8qKgoJICogQHJldHVybiBudWxsfFRocm93YWJsZQoJICogQHRocm93cyB2b2lkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRQcmV2aW91cygpOwoKCS8qKgoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTsKfQoKY2xhc3MgRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlCnsKCgkvKioKCSAqIEByZXR1cm4gc3RyaW5nCgkgKiBAdGhyb3dzIHZvaWQKCSAqLwoJZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldE1lc3NhZ2UoKTogc3RyaW5nIHt9CgoJLyoqCgkgKiBAcmV0dXJuIG1peGVkCgkgKiBAdGhyb3dzIHZvaWQKCSAqLwoJZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldENvZGUoKSB7fQoKCS8qKgoJICogQHJldHVybiBzdHJpbmcKCSAqIEB0aHJvd3Mgdm9pZAoJICovCglmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0RmlsZSgpOiBzdHJpbmcge30KCgkvKioKCSAqIEByZXR1cm4gaW50CgkgKiBAdGhyb3dzIHZvaWQKCSAqLwoJZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldExpbmUoKTogaW50IHt9CgoJLyoqCgkgKiBAcmV0dXJuIGxpc3Q8YXJyYXl7ZnVuY3Rpb246c3RyaW5nLGxpbmU/OmludCxmaWxlPzpzdHJpbmcsY2xhc3M/OmNsYXNzLXN0cmluZyx0eXBlPzonOjonfCctPicsYXJncz86bWl4ZWRbXSxvYmplY3Q/Om9iamVjdH0+CgkgKiBAdGhyb3dzIHZvaWQKCSAqLwoJZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldFRyYWNlKCk6IGFycmF5IHt9CgoJLyoqCgkgKiBAcmV0dXJuIG51bGx8VGhyb3dhYmxlCgkgKiBAdGhyb3dzIHZvaWQKCSAqLwoJZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldFByZXZpb3VzKCk6ID9UaHJvd2FibGUge30KCgkvKioKCSAqIEByZXR1cm4gc3RyaW5nCgkgKiBAdGhyb3dzIHZvaWQKCSAqLwoJZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldFRyYWNlQXNTdHJpbmcoKTogc3RyaW5nIHt9Cgp9CgpjbGFzcyBFcnJvciBpbXBsZW1lbnRzIFRocm93YWJsZQp7CgoJLyoqCgkgKiBAcmV0dXJuIHN0cmluZwoJICogQHRocm93cyB2b2lkCgkgKi8KCWZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXNzYWdlKCk6IHN0cmluZyB7fQoKCS8qKgoJICogQHJldHVybiBtaXhlZAoJICogQHRocm93cyB2b2lkCgkgKi8KCWZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2RlKCkge30KCgkvKioKCSAqIEByZXR1cm4gc3RyaW5nCgkgKiBAdGhyb3dzIHZvaWQKCSAqLwoJZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldEZpbGUoKTogc3RyaW5nIHt9CgoJLyoqCgkgKiBAcmV0dXJuIGludAoJICogQHRocm93cyB2b2lkCgkgKi8KCWZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRMaW5lKCk6IGludCB7fQoKCS8qKgoJICogQHJldHVybiBsaXN0PGFycmF5e2Z1bmN0aW9uOnN0cmluZyxsaW5lPzppbnQsZmlsZT86c3RyaW5nLGNsYXNzPzpjbGFzcy1zdHJpbmcsdHlwZT86Jzo6J3wnLT4nLGFyZ3M/Om1peGVkW10sb2JqZWN0PzpvYmplY3R9PgoJICogQHRocm93cyB2b2lkCgkgKi8KCWZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRUcmFjZSgpOiBhcnJheSB7fQoKCS8qKgoJICogQHJldHVybiBudWxsfFRocm93YWJsZQoJICogQHRocm93cyB2b2lkCgkgKi8KCWZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRQcmV2aW91cygpOiA/VGhyb3dhYmxlIHt9CgoJLyoqCgkgKiBAcmV0dXJuIHN0cmluZwoJICogQHRocm93cyB2b2lkCgkgKi8KCWZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRUcmFjZUFzU3RyaW5nKCk6IHN0cmluZyB7fQoKfQo8P3BocAoKaWYgKFxQSFBfVkVSU0lPTl9JRCA8IDgwMDAwICYmICFjbGFzc19leGlzdHMoJ0F0dHJpYnV0ZScsIGZhbHNlKSkgewoJI1tBdHRyaWJ1dGUoQXR0cmlidXRlOjpUQVJHRVRfQ0xBU1MpXQoJY2xhc3MgQXR0cmlidXRlCgl7CgoJCS8qKiBAdmFyIGludCAqLwoJCXB1YmxpYyAkZmxhZ3M7CgoJCS8qKgoJCSAqIE1hcmtzIHRoYXQgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGlzIGFsbG93ZWQgb25seSBpbiBjbGFzc2VzLgoJCSAqLwoJCWNvbnN0IFRBUkdFVF9DTEFTUyA9IDE7CgoJCS8qKgoJCSAqIE1hcmtzIHRoYXQgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGlzIGFsbG93ZWQgb25seSBpbiBmdW5jdGlvbnMuCgkJICovCgkJY29uc3QgVEFSR0VUX0ZVTkNUSU9OID0gMSA8PCAxOwoKCQkvKioKCQkgKiBNYXJrcyB0aGF0IGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBpcyBhbGxvd2VkIG9ubHkgaW4gY2xhc3MgbWV0aG9kcy4KCQkgKi8KCQljb25zdCBUQVJHRVRfTUVUSE9EID0gMSA8PCAyOwoKCQkvKioKCQkgKiBNYXJrcyB0aGF0IGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBpcyBhbGxvd2VkIG9ubHkgaW4gY2xhc3MgcHJvcGVydGllcy4KCQkgKi8KCQljb25zdCBUQVJHRVRfUFJPUEVSVFkgPSAxIDw8IDM7CgoJCS8qKgoJCSAqIE1hcmtzIHRoYXQgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGlzIGFsbG93ZWQgb25seSBpbiBjbGFzcyBjb25zdGFudHMuCgkJICovCgkJY29uc3QgVEFSR0VUX0NMQVNTX0NPTlNUQU5UID0gMSA8PCA0OwoKCQkvKioKCQkgKiBNYXJrcyB0aGF0IGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBpcyBhbGxvd2VkIG9ubHkgaW4gZnVuY3Rpb24gb3IgbWV0aG9kIHBhcmFtZXRlcnMuCgkJICovCgkJY29uc3QgVEFSR0VUX1BBUkFNRVRFUiA9IDEgPDwgNTsKCgkJLyoqCgkJICogTWFya3MgdGhhdCBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gaXMgYWxsb3dlZCBhbnl3aGVyZS4KCQkgKi8KCQljb25zdCBUQVJHRVRfQUxMID0gKDEgPDwgNikgLSAxOwoKCQkvKioKCQkgKiBOb3RlcyB0aGF0IGFuIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBpbiB0aGUgc2FtZSBwbGFjZSBpcwoJCSAqIGFsbG93ZWQgbXVsdGlwbGUgdGltZXMuCgkJICovCgkJY29uc3QgSVNfUkVQRUFUQUJMRSA9IDEgPDwgNjsKCgkJLyoqCgkJICogQHBhcmFtIGludCAkZmxhZ3MgQSB2YWx1ZSBpbiB0aGUgZm9ybSBvZiBhIGJpdG1hc2sgaW5kaWNhdGluZyB0aGUgcGxhY2VzCgkJICogd2hlcmUgYXR0cmlidXRlcyBjYW4gYmUgZGVmaW5lZC4KCQkgKi8KCQlwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZsYWdzID0gc2VsZjo6VEFSR0VUX0FMTCkKCQl7CgkJCSR0aGlzLT5mbGFncyA9ICRmbGFnczsKCQl9CgoJfQp9CgppZiAoXFBIUF9WRVJTSU9OX0lEIDwgODAxMDAgJiYgIWNsYXNzX2V4aXN0cygnUmV0dXJuVHlwZVdpbGxDaGFuZ2UnLCBmYWxzZSkpIHsKCSNbQXR0cmlidXRlKEF0dHJpYnV0ZTo6VEFSR0VUX01FVEhPRCldCglmaW5hbCBjbGFzcyBSZXR1cm5UeXBlV2lsbENoYW5nZQoJewoJfQp9CgppZiAoXFBIUF9WRVJTSU9OX0lEIDwgODAyMDAgJiYgIWNsYXNzX2V4aXN0cygnQWxsb3dEeW5hbWljUHJvcGVydGllcycsIGZhbHNlKSkgewoJI1tBdHRyaWJ1dGUoQXR0cmlidXRlOjpUQVJHRVRfQ0xBU1MpXQoJZmluYWwgY2xhc3MgQWxsb3dEeW5hbWljUHJvcGVydGllcwoJewoJfQp9CgppZiAoXFBIUF9WRVJTSU9OX0lEIDwgODAyMDAgJiYgIWNsYXNzX2V4aXN0cygnU2Vuc2l0aXZlUGFyYW1ldGVyJywgZmFsc2UpKSB7CgkjW0F0dHJpYnV0ZShBdHRyaWJ1dGU6OlRBUkdFVF9QQVJBTUVURVIpXQoJZmluYWwgY2xhc3MgU2Vuc2l0aXZlUGFyYW1ldGVyCgl7Cgl9Cn0KPD9waHAKCmlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDEwMCkgewoJaWYgKGludGVyZmFjZV9leGlzdHMoJ1VuaXRFbnVtJywgZmFsc2UpKSB7CgkJcmV0dXJuOwoJfQoKCWludGVyZmFjZSBVbml0RW51bQoJewoJCS8qKgoJCSAqIEByZXR1cm4gbGlzdDxzdGF0aWM+CgkJICovCgkJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXNlcygpOiBhcnJheTsKCX0KfQo8P3BocAoKaWYgKFxQSFBfVkVSU0lPTl9JRCA8IDgwMTAwKSB7CglpZiAoY2xhc3NfZXhpc3RzKCdSZWZsZWN0aW9uRW51bUJhY2tlZENhc2UnLCBmYWxzZSkpIHsKCQlyZXR1cm47Cgl9CgoJY2xhc3MgUmVmbGVjdGlvbkVudW1CYWNrZWRDYXNlIGV4dGVuZHMgUmVmbGVjdGlvbkVudW1Vbml0Q2FzZQoJewoJCXB1YmxpYyBmdW5jdGlvbiBnZXRCYWNraW5nVmFsdWUoKTogaW50fHN0cmluZwoJCXsKCQl9Cgl9Cn0KPD9waHAKCmlmIChcUEhQX1ZFUlNJT05fSUQgPCA4MDEwMCkgewoJaWYgKGNsYXNzX2V4aXN0cygnUmVmbGVjdGlvbkVudW1Vbml0Q2FzZScsIGZhbHNlKSkgewoJCXJldHVybjsKCX0KCgljbGFzcyBSZWZsZWN0aW9uRW51bVVuaXRDYXNlIGV4dGVuZHMgUmVmbGVjdGlvbkNsYXNzQ29uc3RhbnQKCXsKCQlwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qob2JqZWN0fHN0cmluZyAkY2xhc3MsIHN0cmluZyAkY29uc3RhbnQpCgkJewoJCX0KCgkJcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCk6IFVuaXRFbnVtCgkJewoJCX0KCgkJLyoqCgkJICogQHJldHVybiBSZWZsZWN0aW9uRW51bQoJCSAqLwoJCXB1YmxpYyBmdW5jdGlvbiBnZXRFbnVtKCk6IFJlZmxlY3Rpb25FbnVtCgkJewoJCX0KCX0KfQo8P3BocAoKaWYgKFxQSFBfVkVSU0lPTl9JRCA8IDgwMTAwKSB7CglpZiAoaW50ZXJmYWNlX2V4aXN0cygnQmFja2VkRW51bScsIGZhbHNlKSkgewoJCXJldHVybjsKCX0KCglpbnRlcmZhY2UgQmFja2VkRW51bSBleHRlbmRzIFVuaXRFbnVtCgl7CgkJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tKGludHxzdHJpbmcgJHZhbHVlKTogc3RhdGljOwoKCQlwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRyeUZyb20oaW50fHN0cmluZyAkdmFsdWUpOiA/c3RhdGljOwoJfQp9Cjw/cGhwCgppZiAoXFBIUF9WRVJTSU9OX0lEIDwgODAxMDApIHsKCWlmIChjbGFzc19leGlzdHMoJ1JlZmxlY3Rpb25FbnVtJywgZmFsc2UpKSB7CgkJcmV0dXJuOwoJfQoKCWNsYXNzIFJlZmxlY3Rpb25FbnVtIGV4dGVuZHMgUmVmbGVjdGlvbkNsYXNzCgl7CgkJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KG9iamVjdHxzdHJpbmcgJG9iamVjdE9yQ2xhc3MpIHt9CgoJCXB1YmxpYyBmdW5jdGlvbiBoYXNDYXNlKHN0cmluZyAkbmFtZSk6IGJvb2wKCQl7CgkJfQoKCQlwdWJsaWMgZnVuY3Rpb24gZ2V0Q2FzZXMoKTogYXJyYXkKCQl7CgkJfQoKCQlwdWJsaWMgZnVuY3Rpb24gZ2V0Q2FzZShzdHJpbmcgJG5hbWUpOiBSZWZsZWN0aW9uRW51bVVuaXRDYXNlCgkJewoJCX0KCgkJcHVibGljIGZ1bmN0aW9uIGlzQmFja2VkKCk6IGJvb2wKCQl7CgkJfQoKCQlwdWJsaWMgZnVuY3Rpb24gZ2V0QmFja2luZ1R5cGUoKTogP1JlZmxlY3Rpb25UeXBlCgkJewoJCX0KCX0KfQo8P3BocAoKaWYgKFxQSFBfVkVSU0lPTl9JRCA8IDgwMDAwKSB7CglpZiAoY2xhc3NfZXhpc3RzKCdSZWZsZWN0aW9uVW5pb25UeXBlJywgZmFsc2UpKSB7CgkJcmV0dXJuOwoJfQoKCWNsYXNzIFJlZmxlY3Rpb25VbmlvblR5cGUgZXh0ZW5kcyBSZWZsZWN0aW9uVHlwZQoJewoKCQkvKiogQHJldHVybiBSZWZsZWN0aW9uVHlwZVtdICovCgkJcHVibGljIGZ1bmN0aW9uIGdldFR5cGVzKCkKCQl7CgkJCXJldHVybiBbXTsKCQl9CgoJfQp9Cjw/cGhwCgppZiAoXFBIUF9WRVJTSU9OX0lEIDwgODAwMDApIHsKCWlmIChjbGFzc19leGlzdHMoJ1JlZmxlY3Rpb25BdHRyaWJ1dGUnLCBmYWxzZSkpIHsKCQlyZXR1cm47Cgl9CgoJY2xhc3MgUmVmbGVjdGlvbkF0dHJpYnV0ZQoJewoKCQlwdWJsaWMgY29uc3QgSVNfSU5TVEFOQ0VPRiA9IDI7CgoJCXB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCk6IHN0cmluZwoJCXsKCQl9CgoJCXB1YmxpYyBmdW5jdGlvbiBnZXRUYXJnZXQoKTogaW50CgkJewoJCX0KCgkJcHVibGljIGZ1bmN0aW9uIGlzUmVwZWF0ZWQoKTogYm9vbAoJCXsKCQl9CgoJCXB1YmxpYyBmdW5jdGlvbiBnZXRBcmd1bWVudHMoKTogYXJyYXkKCQl7CgkJfQoKCQlwdWJsaWMgZnVuY3Rpb24gbmV3SW5zdGFuY2UoKTogb2JqZWN0CgkJewoJCX0KCgkJcHJpdmF0ZSBmdW5jdGlvbiBfX2Nsb25lKCkKCQl7CgkJfQoKCQlwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKCQl7CgkJfQoJfQp9Cjw/cGhwCgppZiAoXFBIUF9WRVJTSU9OX0lEIDwgODAxMDApIHsKCWlmIChjbGFzc19leGlzdHMoJ1JlZmxlY3Rpb25JbnRlcnNlY3Rpb25UeXBlJywgZmFsc2UpKSB7CgkJcmV0dXJuOwoJfQoKCWNsYXNzIFJlZmxlY3Rpb25JbnRlcnNlY3Rpb25UeXBlIGV4dGVuZHMgUmVmbGVjdGlvblR5cGUKCXsKCgkJLyoqIEByZXR1cm4gUmVmbGVjdGlvblR5cGVbXSAqLwoJCXB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlcygpCgkJewoJCQlyZXR1cm4gW107CgkJfQoKCX0KfQo8P3BocAoKLyoqCiAqIEByZXR1cm4gKCR2YWx1ZSBpcyBzdHJpbmcgPyB0cnVlIDogZmFsc2UpCiAqLwpmdW5jdGlvbiBpc19zdHJpbmcobWl4ZWQgJHZhbHVlKTogYm9vbAp7Cgp9CgovKioKICogQHJldHVybiAoJHZhbHVlIGlzIGZsb2F0ID8gdHJ1ZSA6IGZhbHNlKQogKi8KZnVuY3Rpb24gaXNfZmxvYXQobWl4ZWQgJHZhbHVlKTogYm9vbAp7Cgp9CgovKioKICogQHJldHVybiAoJHZhbHVlIGlzIGZsb2F0ID8gdHJ1ZSA6IGZhbHNlKQogKi8KZnVuY3Rpb24gaXNfZG91YmxlKG1peGVkICR2YWx1ZSk6IGJvb2wKewoKfQoKLyoqCiAqIEByZXR1cm4gKCR2YWx1ZSBpcyBmbG9hdCA/IHRydWUgOiBmYWxzZSkKICovCmZ1bmN0aW9uIGlzX3JlYWwobWl4ZWQgJHZhbHVlKTogYm9vbAp7Cgp9CgovKioKICogQHJldHVybiAoJHZhbHVlIGlzIGZsb2F0fGludHxudW1lcmljLXN0cmluZyA/IHRydWUgOiBmYWxzZSkKICovCmZ1bmN0aW9uIGlzX251bWVyaWMobWl4ZWQgJHZhbHVlKTogYm9vbAp7Cgp9CgovKioKICogQHJldHVybiAoJHZhbHVlIGlzIG51bGwgPyB0cnVlIDogZmFsc2UpCiAqLwpmdW5jdGlvbiBpc19udWxsKG1peGVkICR2YWx1ZSk6IGJvb2wKewoKfQoKLyoqCiAqIEByZXR1cm4gKCR2YWx1ZSBpcyBib29sID8gdHJ1ZSA6IGZhbHNlKQogKi8KZnVuY3Rpb24gaXNfYm9vbChtaXhlZCAkdmFsdWUpOiBib29sCnsKCn0KCi8qKgogKiBAcmV0dXJuICgkdmFsdWUgaXMgYXJyYXk8YXJyYXkta2V5LCBtaXhlZD58XENvdW50YWJsZSA/IHRydWUgOiBmYWxzZSkKICovCmZ1bmN0aW9uIGlzX2NvdW50YWJsZShtaXhlZCAkdmFsdWUpOiBib29sCnsKCn0KCi8qKgogKiBAcmV0dXJuICgkdmFsdWUgaXMgb2JqZWN0ID8gdHJ1ZSA6IGZhbHNlKQogKi8KZnVuY3Rpb24gaXNfb2JqZWN0KG1peGVkICR2YWx1ZSk6IGJvb2wKewoKfQoKLyoqCiAqIEByZXR1cm4gKCR2YWx1ZSBpcyBzY2FsYXIgPyB0cnVlIDogZmFsc2UpCiAqLwpmdW5jdGlvbiBpc19zY2FsYXIobWl4ZWQgJHZhbHVlKTogYm9vbAp7Cgp9CgovKioKICogQHJldHVybiAoJHZhbHVlIGlzIGludCA/IHRydWUgOiBmYWxzZSkKICovCmZ1bmN0aW9uIGlzX2ludChtaXhlZCAkdmFsdWUpOiBib29sCnsKCn0KCi8qKgogKiBAcmV0dXJuICgkdmFsdWUgaXMgaW50ID8gdHJ1ZSA6IGZhbHNlKQogKi8KZnVuY3Rpb24gaXNfaW50ZWdlcihtaXhlZCAkdmFsdWUpOiBib29sCnsKCn0KCi8qKgogKiBAcmV0dXJuICgkdmFsdWUgaXMgaW50ID8gdHJ1ZSA6IGZhbHNlKQogKi8KZnVuY3Rpb24gaXNfbG9uZyhtaXhlZCAkdmFsdWUpOiBib29sCnsKCn0KCi8qKgogKiBAcGhwc3Rhbi1hc3NlcnQtaWYtdHJ1ZSA9cmVzb3VyY2UgJHZhbHVlCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gaXNfcmVzb3VyY2UobWl4ZWQgJHZhbHVlKTogYm9vbAp7Cgp9CgovKioKICogQHJldHVybiAoJHZhbHVlIGlzIGFycmF5ID8gdHJ1ZSA6IGZhbHNlKQogKi8KZnVuY3Rpb24gaXNfYXJyYXkobWl4ZWQgJHZhbHVlKTogYm9vbAp7Cgp9CgovKioKICogQHJldHVybiAoJHZhbHVlIGlzIGl0ZXJhYmxlPG1peGVkLCBtaXhlZD4gPyB0cnVlIDogZmFsc2UpCiAqLwpmdW5jdGlvbiBpc19pdGVyYWJsZShtaXhlZCAkdmFsdWUpOiBib29sCnsKCn0KPD9waHAKCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoqCiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogQGltcGxlbWVudHMgXEl0ZXJhdG9yPGludCwgVFZhbHVlPgogKiBAaW1wbGVtZW50cyBcQXJyYXlBY2Nlc3M8aW50LCBUVmFsdWU+CiAqLwpjbGFzcyBTcGxEb3VibHlMaW5rZWRMaXN0IGltcGxlbWVudHMgXEl0ZXJhdG9yLCBcQXJyYXlBY2Nlc3MgewoJLyoqCgkgKiBAcGFyYW0gaW50ICRpbmRleAoJICogQHBhcmFtIFRWYWx1ZSAkbmV3dmFsCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFkZCgkaW5kZXgsICRuZXd2YWwpIHt9CgoJLyoqCgkgKiBAcmV0dXJuIFRWYWx1ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gcG9wICgpIHt9CgoJLyoqCgkgKiBAcmV0dXJuIFRWYWx1ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2hpZnQgKCkge30KCgkvKioKCSAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHB1c2ggKCR2YWx1ZSkge30KCgkvKioKCSAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHVuc2hpZnQgKCR2YWx1ZSkge30KCgkvKioKCSAqIEByZXR1cm4gVFZhbHVlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB0b3AgKCkge30KCgkvKioKCSAqIEByZXR1cm4gVFZhbHVlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBib3R0b20gKCkge30KCgkvKioKCSAqIEBwYXJhbSBpbnQgJG9mZnNldAoJICogQHJldHVybiBUVmFsdWUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCAoJG9mZnNldCkge30KfQoKLyoqCiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogQGV4dGVuZHMgXFNwbERvdWJseUxpbmtlZExpc3Q8VFZhbHVlPgogKi8KY2xhc3MgU3BsUXVldWUgZXh0ZW5kcyBcU3BsRG91Ymx5TGlua2VkTGlzdCB7CgkvKioKCSAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlCgkgKiBAcmV0dXJuIHZvaWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGVucXVldWUgKCR2YWx1ZSkge30KCgkvKioKCSAqIEByZXR1cm4gVFZhbHVlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBkZXF1ZXVlICgpIHt9Cn0KCi8qKgogKiBAdGVtcGxhdGUgVFByaW9yaXR5CiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICoKICogQGltcGxlbWVudHMgXEl0ZXJhdG9yPGludCwgVFZhbHVlPgogKi8KY2xhc3MgU3BsUHJpb3JpdHlRdWV1ZSBpbXBsZW1lbnRzIFxJdGVyYXRvciB7CgkvKioKCSAqIEBwYXJhbSBUUHJpb3JpdHkgJHByaW9yaXR5MQoJICogQHBhcmFtIFRQcmlvcml0eSAkcHJpb3JpdHkyCgkgKiBAcmV0dXJuIGludAoJICovCglwdWJsaWMgZnVuY3Rpb24gY29tcGFyZSAoJHByaW9yaXR5MSwgJHByaW9yaXR5Mikge30KCgkvKioKCSAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlCgkgKiBAcGFyYW0gVFByaW9yaXR5ICRwcmlvcml0eQoJICogQHJldHVybiB0cnVlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpbnNlcnQgKCR2YWx1ZSwgJHByaW9yaXR5KSB7fQoKCS8qKgoJICogQHJldHVybiBUUHJpb3JpdHl8VFZhbHVlfGFycmF5e3ByaW9yaXR5OiBUUHJpb3JpdHksIGRhdGE6IFRWYWx1ZX0KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRvcCAoKSB7fQoKCS8qKgoJICogQHJldHVybiBUUHJpb3JpdHl8VFZhbHVlfGFycmF5e3ByaW9yaXR5OiBUUHJpb3JpdHksIGRhdGE6IFRWYWx1ZX0KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGV4dHJhY3QgKCkge30KCgkvKioKCSAqIEByZXR1cm4gVFByaW9yaXR5fFRWYWx1ZXxhcnJheXtwcmlvcml0eTogVFByaW9yaXR5LCBkYXRhOiBUVmFsdWV9CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBjdXJyZW50ICgpIHt9Cn0KPD9waHAKCmFic3RyYWN0IGNsYXNzIFJlZmxlY3Rpb25GdW5jdGlvbkFic3RyYWN0CnsKCgkvKioKCSAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlTmFtZSAoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBsaXN0PFJlZmxlY3Rpb25BdHRyaWJ1dGU8b2JqZWN0Pj4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZXMoP3N0cmluZyAkbmFtZSA9IG51bGwsIGludCAkZmxhZ3MgPSAwKQogICAgewogICAgfQp9CkNvcHlyaWdodCAoYykgMjAxMSBJZ29yIFdpZWRsZXIKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQKdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCjw/cGhwCgpkZWNsYXJlIChzdHJpY3RfdHlwZXM9MSk7Ci8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEV2ZW5lbWVudC4KICoKICogKGMpIElnb3IgV2llZGxlciA8aWdvckB3aWVkbGVyLmNoPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCm5hbWVzcGFjZSBfUEhQU3Rhbl84YzY2ZDgyNTVcRXZlbmVtZW50OwoKdXNlIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIGZ1bmN0aW9uIGNvdW50Owp1c2UgZnVuY3Rpb24gYXJyYXlfa2V5czsKdXNlIGZ1bmN0aW9uIGFycmF5X21lcmdlOwp1c2UgZnVuY3Rpb24gYXJyYXlfc2VhcmNoOwp1c2UgZnVuY3Rpb24gYXJyYXlfdW5pcXVlOwp1c2UgZnVuY3Rpb24gYXJyYXlfdmFsdWVzOwp0cmFpdCBFdmVudEVtaXR0ZXJUcmFpdAp7CiAgICBwcm90ZWN0ZWQgJGxpc3RlbmVycyA9IFtdOwogICAgcHJvdGVjdGVkICRvbmNlTGlzdGVuZXJzID0gW107CiAgICBwdWJsaWMgZnVuY3Rpb24gb24oJGV2ZW50LCBjYWxsYWJsZSAkbGlzdGVuZXIpCiAgICB7CiAgICAgICAgaWYgKCRldmVudCA9PT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdldmVudCBuYW1lIG11c3Qgbm90IGJlIG51bGwnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+bGlzdGVuZXJzWyRldmVudF0pKSB7CiAgICAgICAgICAgICR0aGlzLT5saXN0ZW5lcnNbJGV2ZW50XSA9IFtdOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+bGlzdGVuZXJzWyRldmVudF1bXSA9ICRsaXN0ZW5lcjsKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gb25jZSgkZXZlbnQsIGNhbGxhYmxlICRsaXN0ZW5lcikKICAgIHsKICAgICAgICBpZiAoJGV2ZW50ID09PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ2V2ZW50IG5hbWUgbXVzdCBub3QgYmUgbnVsbCcpOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5vbmNlTGlzdGVuZXJzWyRldmVudF0pKSB7CiAgICAgICAgICAgICR0aGlzLT5vbmNlTGlzdGVuZXJzWyRldmVudF0gPSBbXTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPm9uY2VMaXN0ZW5lcnNbJGV2ZW50XVtdID0gJGxpc3RlbmVyOwogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcigkZXZlbnQsIGNhbGxhYmxlICRsaXN0ZW5lcikKICAgIHsKICAgICAgICBpZiAoJGV2ZW50ID09PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ2V2ZW50IG5hbWUgbXVzdCBub3QgYmUgbnVsbCcpOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmxpc3RlbmVyc1skZXZlbnRdKSkgewogICAgICAgICAgICAkaW5kZXggPSBhcnJheV9zZWFyY2goJGxpc3RlbmVyLCAkdGhpcy0+bGlzdGVuZXJzWyRldmVudF0sIFx0cnVlKTsKICAgICAgICAgICAgaWYgKFxmYWxzZSAhPT0gJGluZGV4KSB7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+bGlzdGVuZXJzWyRldmVudF1bJGluZGV4XSk7CiAgICAgICAgICAgICAgICBpZiAoY291bnQoJHRoaXMtPmxpc3RlbmVyc1skZXZlbnRdKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIHVuc2V0KCR0aGlzLT5saXN0ZW5lcnNbJGV2ZW50XSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5vbmNlTGlzdGVuZXJzWyRldmVudF0pKSB7CiAgICAgICAgICAgICRpbmRleCA9IGFycmF5X3NlYXJjaCgkbGlzdGVuZXIsICR0aGlzLT5vbmNlTGlzdGVuZXJzWyRldmVudF0sIFx0cnVlKTsKICAgICAgICAgICAgaWYgKFxmYWxzZSAhPT0gJGluZGV4KSB7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+b25jZUxpc3RlbmVyc1skZXZlbnRdWyRpbmRleF0pOwogICAgICAgICAgICAgICAgaWYgKGNvdW50KCR0aGlzLT5vbmNlTGlzdGVuZXJzWyRldmVudF0pID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPm9uY2VMaXN0ZW5lcnNbJGV2ZW50XSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKCRldmVudCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRldmVudCAhPT0gbnVsbCkgewogICAgICAgICAgICB1bnNldCgkdGhpcy0+bGlzdGVuZXJzWyRldmVudF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5saXN0ZW5lcnMgPSBbXTsKICAgICAgICB9CiAgICAgICAgaWYgKCRldmVudCAhPT0gbnVsbCkgewogICAgICAgICAgICB1bnNldCgkdGhpcy0+b25jZUxpc3RlbmVyc1skZXZlbnRdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+b25jZUxpc3RlbmVycyA9IFtdOwogICAgICAgIH0KICAgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0ZW5lcnMoJGV2ZW50ID0gbnVsbCkgOiBhcnJheQogICAgewogICAgICAgIGlmICgkZXZlbnQgPT09IG51bGwpIHsKICAgICAgICAgICAgJGV2ZW50cyA9IFtdOwogICAgICAgICAgICAkZXZlbnROYW1lcyA9IGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZShhcnJheV9rZXlzKCR0aGlzLT5saXN0ZW5lcnMpLCBhcnJheV9rZXlzKCR0aGlzLT5vbmNlTGlzdGVuZXJzKSkpOwogICAgICAgICAgICBmb3JlYWNoICgkZXZlbnROYW1lcyBhcyAkZXZlbnROYW1lKSB7CiAgICAgICAgICAgICAgICAkZXZlbnRzWyRldmVudE5hbWVdID0gYXJyYXlfbWVyZ2UoaXNzZXQoJHRoaXMtPmxpc3RlbmVyc1skZXZlbnROYW1lXSkgPyAkdGhpcy0+bGlzdGVuZXJzWyRldmVudE5hbWVdIDogW10sIGlzc2V0KCR0aGlzLT5vbmNlTGlzdGVuZXJzWyRldmVudE5hbWVdKSA/ICR0aGlzLT5vbmNlTGlzdGVuZXJzWyRldmVudE5hbWVdIDogW10pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkZXZlbnRzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXlfbWVyZ2UoaXNzZXQoJHRoaXMtPmxpc3RlbmVyc1skZXZlbnRdKSA/ICR0aGlzLT5saXN0ZW5lcnNbJGV2ZW50XSA6IFtdLCBpc3NldCgkdGhpcy0+b25jZUxpc3RlbmVyc1skZXZlbnRdKSA/ICR0aGlzLT5vbmNlTGlzdGVuZXJzWyRldmVudF0gOiBbXSk7CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gZW1pdCgkZXZlbnQsIGFycmF5ICRhcmd1bWVudHMgPSBbXSkKICAgIHsKICAgICAgICBpZiAoJGV2ZW50ID09PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ2V2ZW50IG5hbWUgbXVzdCBub3QgYmUgbnVsbCcpOwogICAgICAgIH0KICAgICAgICAkbGlzdGVuZXJzID0gW107CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5saXN0ZW5lcnNbJGV2ZW50XSkpIHsKICAgICAgICAgICAgJGxpc3RlbmVycyA9IGFycmF5X3ZhbHVlcygkdGhpcy0+bGlzdGVuZXJzWyRldmVudF0pOwogICAgICAgIH0KICAgICAgICAkb25jZUxpc3RlbmVycyA9IFtdOwogICAgICAgIGlmIChpc3NldCgkdGhpcy0+b25jZUxpc3RlbmVyc1skZXZlbnRdKSkgewogICAgICAgICAgICAkb25jZUxpc3RlbmVycyA9IGFycmF5X3ZhbHVlcygkdGhpcy0+b25jZUxpc3RlbmVyc1skZXZlbnRdKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVtcHR5KCRsaXN0ZW5lcnMpID09PSBcZmFsc2UpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGxpc3RlbmVycyBhcyAkbGlzdGVuZXIpIHsKICAgICAgICAgICAgICAgICRsaXN0ZW5lciguLi4kYXJndW1lbnRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoZW1wdHkoJG9uY2VMaXN0ZW5lcnMpID09PSBcZmFsc2UpIHsKICAgICAgICAgICAgdW5zZXQoJHRoaXMtPm9uY2VMaXN0ZW5lcnNbJGV2ZW50XSk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRvbmNlTGlzdGVuZXJzIGFzICRsaXN0ZW5lcikgewogICAgICAgICAgICAgICAgJGxpc3RlbmVyKC4uLiRhcmd1bWVudHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cjw/cGhwCgpkZWNsYXJlIChzdHJpY3RfdHlwZXM9MSk7Ci8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEV2ZW5lbWVudC4KICoKICogKGMpIElnb3IgV2llZGxlciA8aWdvckB3aWVkbGVyLmNoPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCm5hbWVzcGFjZSBfUEhQU3Rhbl84YzY2ZDgyNTVcRXZlbmVtZW50OwoKY2xhc3MgRXZlbnRFbWl0dGVyIGltcGxlbWVudHMgRXZlbnRFbWl0dGVySW50ZXJmYWNlCnsKICAgIHVzZSBFdmVudEVtaXR0ZXJUcmFpdDsKfQo8P3BocAoKZGVjbGFyZSAoc3RyaWN0X3R5cGVzPTEpOwovKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBFdmVuZW1lbnQuCiAqCiAqIChjKSBJZ29yIFdpZWRsZXIgPGlnb3JAd2llZGxlci5jaD4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwpuYW1lc3BhY2UgX1BIUFN0YW5fOGM2NmQ4MjU1XEV2ZW5lbWVudDsKCmludGVyZmFjZSBFdmVudEVtaXR0ZXJJbnRlcmZhY2UKewogICAgcHVibGljIGZ1bmN0aW9uIG9uKCRldmVudCwgY2FsbGFibGUgJGxpc3RlbmVyKTsKICAgIHB1YmxpYyBmdW5jdGlvbiBvbmNlKCRldmVudCwgY2FsbGFibGUgJGxpc3RlbmVyKTsKICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcigkZXZlbnQsIGNhbGxhYmxlICRsaXN0ZW5lcik7CiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKCRldmVudCA9IG51bGwpOwogICAgcHVibGljIGZ1bmN0aW9uIGxpc3RlbmVycygkZXZlbnQgPSBudWxsKTsKICAgIHB1YmxpYyBmdW5jdGlvbiBlbWl0KCRldmVudCwgYXJyYXkgJGFyZ3VtZW50cyA9IFtdKTsKfQo8P3BocAoKLy8gYXV0b2xvYWRfc3RhdGljLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgpuYW1lc3BhY2UgQ29tcG9zZXJcQXV0b2xvYWQ7CgpjbGFzcyBDb21wb3NlclN0YXRpY0luaXQwN2I0NmRjZTUxZWE0MWMwMjU1MTFiOTQxNWIzMjc0Ywp7CiAgICBwdWJsaWMgc3RhdGljICRmaWxlcyA9IGFycmF5ICgKICAgICAgICAnZTg4OTkyODczYjc3NjVmOWI1NzEwY2FiOTViYTVkZDcnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2NvbnNpc3RlbmN5L1ByZWx1ZGUucGhwJywKICAgICAgICAnM2U3NmY3ZjAyYjQxYWY4Y2VhOTYwMTg5MzNmNmI3ZTMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3Byb3RvY29sL1dyYXBwZXIucGhwJywKICAgICAgICAnYWQxNTVmOGYxY2YwZDQxOGZlNDllMjQ4ZGI4YzY2MWInID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvcHJvbWlzZS9zcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwJywKICAgICAgICAnYTRhMTE5YTU2ZTUwZmJiMjkzMjgxZDlhNDgwMDdlMGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9ib290c3RyYXAucGhwJywKICAgICAgICAnNmUzZmFlMjk2MzFlZjI4MDY2MGIzY2RhZDA2ZjI1YTgnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMvZnVuY3Rpb24ucGhwJywKICAgICAgICAnMGU2ZDdiZjRhNTgxMWJmYTVjZjQwYzVjY2Q2ZmFlNmEnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZy9ib290c3RyYXAucGhwJywKICAgICAgICAnMzIwY2RlMjJmNjZkZDRmNWQzZmQ2MjFkM2U4OGI5OGYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZS9ib290c3RyYXAucGhwJywKICAgICAgICAnODgyNWVkZTgzZjJmMjg5MTI3NzIyZDRlODQyY2Y3ZTgnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLWdyYXBoZW1lL2Jvb3RzdHJhcC5waHAnLAogICAgICAgICdlNjlmN2Y2ZWUyODdiOTY5MTk4YzNjOWQ2Nzc3YmQzOCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLWludGwtbm9ybWFsaXplci9ib290c3RyYXAucGhwJywKICAgICAgICAnZmUxZDQ4OTgyNzdjMjY3NDhhMDAzMjkyZjQzMmNkM2InID0+IF9fRElSX18gLiAnLy4uJyAuICcvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1BocFN0b3JtU3R1YnNNYXAucGhwJywKICAgICAgICAnMGQ1OWVlMjQwYTRjZDk2ZGRiYjRmZjE2NGZjY2VhNGQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA3My9ib290c3RyYXAucGhwJywKICAgICAgICAnYjZiOTkxYTU3NjIwZTJmYjZiMmY2NmYwM2ZlOWRkYzInID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9zdHJpbmcvUmVzb3VyY2VzL2Z1bmN0aW9ucy5waHAnLAogICAgICAgICdjNGUwM2VjZDQ3MGQyYTg3ODA0OTc5YzBhODE1MjI4NCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9hc3luYy9zcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwJywKICAgICAgICAnYjY4NmI4ZTQ2NDQ3ODY4MDI1YTE1Y2U1ZDBjYjI2MzQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA3NC9ib290c3RyYXAucGhwJywKICAgICAgICAnMjNjMTgwNDZmNTJiZWYzZWVhMDM0NjU3YmFmZGE1MGYnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS9ib290c3RyYXAucGhwJywKICAgICAgICAnMjNlMWFmZmRmNDA3ZTM1MzhhMWYzMmMxNDBmYjA0MDEnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL2RlYnVnU2NvcGUucGhwJywKICAgICAgICAnOGIzYjI1ZTExZTgyNzUzOTIzZDQzZTI5OGE3MGRjZDAnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL2R1bXBUeXBlLnBocCcsCiAgICAgICAgJzk2NjIyNzllM2U3NWY3MzdkOTMwMzAyNTI2NzNiZjJkJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9hdXRvbG9hZEZ1bmN0aW9ucy5waHAnLAogICAgICAgICcxYTJlYWI1MzA2NWVmZjk2OTJiYWMyMzhkMTVjYzhjYicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVGVzdGluZy9mdW5jdGlvbnMucGhwJywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyAkcHJlZml4TGVuZ3Roc1BzcjQgPSBhcnJheSAoCiAgICAgICAgJ18nID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxQb2x5ZmlsbFxcQ3R5cGVcXCcgPT4gNDIsCiAgICAgICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbnRyYWN0c1xcU2VydmljZVxcJyA9PiA0NSwKICAgICAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxTdHJpbmdcXCcgPT4gNDQsCiAgICAgICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcJyA9PiA0NSwKICAgICAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXCcgPT4gNDQsCiAgICAgICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcJyA9PiA0NSwKICAgICAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFN0cmVhbVxcJyA9PiAzMiwKICAgICAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcJyA9PiAzMiwKICAgICAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFByb21pc2VcXCcgPT4gMzMsCiAgICAgICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFwnID0+IDMwLAogICAgICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRXZlbnRMb29wXFwnID0+IDM1LAogICAgICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFwnID0+IDI5LAogICAgICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcQ2hpbGRQcm9jZXNzXFwnID0+IDM4LAogICAgICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcQ2FjaGVcXCcgPT4gMzEsCiAgICAgICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcTG9nXFwnID0+IDI3LAogICAgICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXEh0dHBcXE1lc3NhZ2VcXCcgPT4gMzYsCiAgICAgICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcQ29udGFpbmVyXFwnID0+IDMzLAogICAgICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXCcgPT4gMzcsCiAgICAgICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZ1xcSHR0cFxcTWVzc2FnZVxcJyA9PiAzNiwKICAgICAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFwnID0+IDQwLAogICAgICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxFdmVuZW1lbnRcXCcgPT4gMjksCiAgICAgICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxYZGVidWdIYW5kbGVyXFwnID0+IDQyLAogICAgICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcU2VtdmVyXFwnID0+IDM1LAogICAgICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcUGNyZVxcJyA9PiAzMywKICAgICAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXENhQnVuZGxlXFwnID0+IDM3LAogICAgICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDbHVlXFxSZWFjdFxcTkRKc29uXFwnID0+IDM3LAogICAgICAgICksCiAgICAgICAgJ1MnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAnU3ltZm9ueVxcUG9seWZpbGxcXFBocDgxXFwnID0+IDIzLAogICAgICAgICAgICAnU3ltZm9ueVxcUG9seWZpbGxcXFBocDgwXFwnID0+IDIzLAogICAgICAgICAgICAnU3ltZm9ueVxcUG9seWZpbGxcXFBocDc0XFwnID0+IDIzLAogICAgICAgICAgICAnU3ltZm9ueVxcUG9seWZpbGxcXFBocDczXFwnID0+IDIzLAogICAgICAgICAgICAnU3ltZm9ueVxcUG9seWZpbGxcXE1ic3RyaW5nXFwnID0+IDI2LAogICAgICAgICAgICAnU3ltZm9ueVxcUG9seWZpbGxcXEludGxcXE5vcm1hbGl6ZXJcXCcgPT4gMzMsCiAgICAgICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcSW50bFxcR3JhcGhlbWVcXCcgPT4gMzEsCiAgICAgICAgKSwKICAgICAgICAnUCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdQaHBQYXJzZXJcXCcgPT4gMTAsCiAgICAgICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXCcgPT4gMjEsCiAgICAgICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFwnID0+IDI1LAogICAgICAgICAgICAnUEhQU3RhblxcJyA9PiA4LAogICAgICAgICksCiAgICAgICAgJ0gnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAnSG9hXFxaZm9ybWF0XFwnID0+IDEyLAogICAgICAgICAgICAnSG9hXFxWaXNpdG9yXFwnID0+IDEyLAogICAgICAgICAgICAnSG9hXFxVc3RyaW5nXFwnID0+IDEyLAogICAgICAgICAgICAnSG9hXFxTdHJlYW1cXCcgPT4gMTEsCiAgICAgICAgICAgICdIb2FcXFJlZ2V4XFwnID0+IDEwLAogICAgICAgICAgICAnSG9hXFxQcm90b2NvbFxcJyA9PiAxMywKICAgICAgICAgICAgJ0hvYVxcTWF0aFxcJyA9PiA5LAogICAgICAgICAgICAnSG9hXFxJdGVyYXRvclxcJyA9PiAxMywKICAgICAgICAgICAgJ0hvYVxcRmlsZVxcJyA9PiA5LAogICAgICAgICAgICAnSG9hXFxFeGNlcHRpb25cXCcgPT4gMTQsCiAgICAgICAgICAgICdIb2FcXEV2ZW50XFwnID0+IDEwLAogICAgICAgICAgICAnSG9hXFxDb25zaXN0ZW5jeVxcJyA9PiAxNiwKICAgICAgICAgICAgJ0hvYVxcQ29tcGlsZXJcXCcgPT4gMTMsCiAgICAgICAgKSwKICAgICk7CgogICAgcHVibGljIHN0YXRpYyAkcHJlZml4RGlyc1BzcjQgPSBhcnJheSAoCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcUG9seWZpbGxcXEN0eXBlXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZScsCiAgICAgICAgKSwKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb250cmFjdHNcXFNlcnZpY2VcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcU3RyaW5nXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9zdHJpbmcnLAogICAgICAgICksCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxQcm9jZXNzXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wcm9jZXNzJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9maW5kZXInLAogICAgICAgICksCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTdHJlYW1cXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zdHJlYW0vc3JjJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zb2NrZXQvc3JjJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxQcm9taXNlXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvcHJvbWlzZS9zcmMnLAogICAgICAgICksCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRXZlbnRMb29wXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMnLAogICAgICAgICksCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2Rucy9zcmMnLAogICAgICAgICksCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXENoaWxkUHJvY2Vzc1xcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2NoaWxkLXByb2Nlc3Mvc3JjJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxDYWNoZVxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2NhY2hlL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXExvZ1xcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3Bzci9sb2cvc3JjJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcSHR0cFxcTWVzc2FnZVxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3Bzci9odHRwLW1lc3NhZ2Uvc3JjJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcQ29udGFpbmVyXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2NvbnRhaW5lci9zcmMnLAogICAgICAgICksCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWdcXEh0dHBcXE1lc3NhZ2VcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWcvaHR0cC1tZXNzYWdlLXV0aWwvc3JjJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEV2ZW5lbWVudFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2V2ZW5lbWVudC9ldmVuZW1lbnQvc3JjJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxYZGVidWdIYW5kbGVyXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvY29tcG9zZXIveGRlYnVnLWhhbmRsZXIvc3JjJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxTZW12ZXJcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9jb21wb3Nlci9zZW12ZXIvc3JjJywKICAgICAgICApLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxQY3JlXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvY29tcG9zZXIvcGNyZS9zcmMnLAogICAgICAgICksCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXENhQnVuZGxlXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvY29tcG9zZXIvY2EtYnVuZGxlL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDbHVlXFxSZWFjdFxcTkRKc29uXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvY2x1ZS9uZGpzb24tcmVhY3Qvc3JjJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODFcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgxJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODBcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwNzRcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDc0JywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwNzNcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDczJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcTWJzdHJpbmdcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcSW50bFxcTm9ybWFsaXplclxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtaW50bC1ub3JtYWxpemVyJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcSW50bFxcR3JhcGhlbWVcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLWludGwtZ3JhcGhlbWUnLAogICAgICAgICksCiAgICAgICAgJ1BocFBhcnNlclxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlcicsCiAgICAgICAgKSwKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMnLAogICAgICAgICksCiAgICAgICAgJ1BIUFN0YW5cXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0hvYVxcWmZvcm1hdFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS96Zm9ybWF0JywKICAgICAgICApLAogICAgICAgICdIb2FcXFZpc2l0b3JcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvdmlzaXRvcicsCiAgICAgICAgKSwKICAgICAgICAnSG9hXFxVc3RyaW5nXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3VzdHJpbmcnLAogICAgICAgICksCiAgICAgICAgJ0hvYVxcU3RyZWFtXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbScsCiAgICAgICAgKSwKICAgICAgICAnSG9hXFxSZWdleFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9yZWdleCcsCiAgICAgICAgKSwKICAgICAgICAnSG9hXFxQcm90b2NvbFxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9wcm90b2NvbCcsCiAgICAgICAgKSwKICAgICAgICAnSG9hXFxNYXRoXFwnID0+CiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL21hdGgnLAogICAgICAgICksCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3InLAogICAgICAgICksCiAgICAgICAgJ0hvYVxcRmlsZVxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9maWxlJywKICAgICAgICApLAogICAgICAgICdIb2FcXEV4Y2VwdGlvblxcJyA9PgogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9leGNlcHRpb24nLAogICAgICAgICksCiAgICAgICAgJ0hvYVxcRXZlbnRcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvZXZlbnQnLAogICAgICAgICksCiAgICAgICAgJ0hvYVxcQ29uc2lzdGVuY3lcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29uc2lzdGVuY3knLAogICAgICAgICksCiAgICAgICAgJ0hvYVxcQ29tcGlsZXJcXCcgPT4KICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXInLAogICAgICAgICksCiAgICApOwoKICAgIHB1YmxpYyBzdGF0aWMgJGNsYXNzTWFwID0gYXJyYXkgKAogICAgICAgICdBdHRyaWJ1dGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvQXR0cmlidXRlLnBocCcsCiAgICAgICAgJ0NVUkxTdHJpbmdGaWxlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvUmVzb3VyY2VzL3N0dWJzL0NVUkxTdHJpbmdGaWxlLnBocCcsCiAgICAgICAgJ0NvbXBvc2VyXFxJbnN0YWxsZWRWZXJzaW9ucycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9jb21wb3Nlci9JbnN0YWxsZWRWZXJzaW9ucy5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxCaW5cXFBwJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9jb21waWxlci9CaW4vUHAucGhwJywKICAgICAgICAnSG9hXFxDb21waWxlclxcRXhjZXB0aW9uXFxFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2NvbXBpbGVyL0V4Y2VwdGlvbi9FeGNlcHRpb24ucGhwJywKICAgICAgICAnSG9hXFxDb21waWxlclxcRXhjZXB0aW9uXFxGaW5hbFN0YXRlSGFzTm90QmVlblJlYWNoZWQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2NvbXBpbGVyL0V4Y2VwdGlvbi9GaW5hbFN0YXRlSGFzTm90QmVlblJlYWNoZWQucGhwJywKICAgICAgICAnSG9hXFxDb21waWxlclxcRXhjZXB0aW9uXFxJbGxlZ2FsVG9rZW4nID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2NvbXBpbGVyL0V4Y2VwdGlvbi9JbGxlZ2FsVG9rZW4ucGhwJywKICAgICAgICAnSG9hXFxDb21waWxlclxcRXhjZXB0aW9uXFxMZXhlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXIvRXhjZXB0aW9uL0xleGVyLnBocCcsCiAgICAgICAgJ0hvYVxcQ29tcGlsZXJcXEV4Y2VwdGlvblxcUnVsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXIvRXhjZXB0aW9uL1J1bGUucGhwJywKICAgICAgICAnSG9hXFxDb21waWxlclxcRXhjZXB0aW9uXFxVbmV4cGVjdGVkVG9rZW4nID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2NvbXBpbGVyL0V4Y2VwdGlvbi9VbmV4cGVjdGVkVG9rZW4ucGhwJywKICAgICAgICAnSG9hXFxDb21waWxlclxcRXhjZXB0aW9uXFxVbnJlY29nbml6ZWRUb2tlbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXIvRXhjZXB0aW9uL1VucmVjb2duaXplZFRva2VuLnBocCcsCiAgICAgICAgJ0hvYVxcQ29tcGlsZXJcXExsMScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXIvTGwxLnBocCcsCiAgICAgICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcTGV4ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2NvbXBpbGVyL0xsay9MZXhlci5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXExsaycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXIvTGxrL0xsay5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFBhcnNlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXIvTGxrL1BhcnNlci5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFJ1bGVcXEFuYWx5emVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9jb21waWxlci9MbGsvUnVsZS9BbmFseXplci5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFJ1bGVcXENob2ljZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXIvTGxrL1J1bGUvQ2hvaWNlLnBocCcsCiAgICAgICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcUnVsZVxcQ29uY2F0ZW5hdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXIvTGxrL1J1bGUvQ29uY2F0ZW5hdGlvbi5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFJ1bGVcXEVreml0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9jb21waWxlci9MbGsvUnVsZS9Fa3ppdC5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFJ1bGVcXEVudHJ5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9jb21waWxlci9MbGsvUnVsZS9FbnRyeS5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFJ1bGVcXEludm9jYXRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2NvbXBpbGVyL0xsay9SdWxlL0ludm9jYXRpb24ucGhwJywKICAgICAgICAnSG9hXFxDb21waWxlclxcTGxrXFxSdWxlXFxSZXBldGl0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9jb21waWxlci9MbGsvUnVsZS9SZXBldGl0aW9uLnBocCcsCiAgICAgICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcUnVsZVxcUnVsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXIvTGxrL1J1bGUvUnVsZS5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFJ1bGVcXFRva2VuJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9jb21waWxlci9MbGsvUnVsZS9Ub2tlbi5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFNhbXBsZXJcXEJvdW5kZWRFeGhhdXN0aXZlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9jb21waWxlci9MbGsvU2FtcGxlci9Cb3VuZGVkRXhoYXVzdGl2ZS5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFNhbXBsZXJcXENvdmVyYWdlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9jb21waWxlci9MbGsvU2FtcGxlci9Db3ZlcmFnZS5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFNhbXBsZXJcXEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXIvTGxrL1NhbXBsZXIvRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcU2FtcGxlclxcU2FtcGxlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXIvTGxrL1NhbXBsZXIvU2FtcGxlci5waHAnLAogICAgICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFNhbXBsZXJcXFVuaWZvcm0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2NvbXBpbGVyL0xsay9TYW1wbGVyL1VuaWZvcm0ucGhwJywKICAgICAgICAnSG9hXFxDb21waWxlclxcTGxrXFxUcmVlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvY29tcGlsZXIvTGxrL1RyZWVOb2RlLnBocCcsCiAgICAgICAgJ0hvYVxcQ29tcGlsZXJcXFZpc2l0b3JcXER1bXAnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2NvbXBpbGVyL1Zpc2l0b3IvRHVtcC5waHAnLAogICAgICAgICdIb2FcXENvbnNpc3RlbmN5XFxBdXRvbG9hZGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9jb25zaXN0ZW5jeS9BdXRvbG9hZGVyLnBocCcsCiAgICAgICAgJ0hvYVxcQ29uc2lzdGVuY3lcXENvbnNpc3RlbmN5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9jb25zaXN0ZW5jeS9Db25zaXN0ZW5jeS5waHAnLAogICAgICAgICdIb2FcXENvbnNpc3RlbmN5XFxFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2NvbnNpc3RlbmN5L0V4Y2VwdGlvbi5waHAnLAogICAgICAgICdIb2FcXENvbnNpc3RlbmN5XFxYY2FsbGFibGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2NvbnNpc3RlbmN5L1hjYWxsYWJsZS5waHAnLAogICAgICAgICdIb2FcXEV2ZW50XFxCdWNrZXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2V2ZW50L0J1Y2tldC5waHAnLAogICAgICAgICdIb2FcXEV2ZW50XFxFdmVudCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvZXZlbnQvRXZlbnQucGhwJywKICAgICAgICAnSG9hXFxFdmVudFxcRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9ldmVudC9FeGNlcHRpb24ucGhwJywKICAgICAgICAnSG9hXFxFdmVudFxcTGlzdGVuYWJsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvZXZlbnQvTGlzdGVuYWJsZS5waHAnLAogICAgICAgICdIb2FcXEV2ZW50XFxMaXN0ZW5lcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvZXZlbnQvTGlzdGVuZXIucGhwJywKICAgICAgICAnSG9hXFxFdmVudFxcTGlzdGVucycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvZXZlbnQvTGlzdGVucy5waHAnLAogICAgICAgICdIb2FcXEV2ZW50XFxTb3VyY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2V2ZW50L1NvdXJjZS5waHAnLAogICAgICAgICdIb2FcXEV4Y2VwdGlvblxcRXJyb3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2V4Y2VwdGlvbi9FcnJvci5waHAnLAogICAgICAgICdIb2FcXEV4Y2VwdGlvblxcRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9leGNlcHRpb24vRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ0hvYVxcRXhjZXB0aW9uXFxHcm91cCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvZXhjZXB0aW9uL0dyb3VwLnBocCcsCiAgICAgICAgJ0hvYVxcRXhjZXB0aW9uXFxJZGxlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9leGNlcHRpb24vSWRsZS5waHAnLAogICAgICAgICdIb2FcXEZpbGVcXERpcmVjdG9yeScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvZmlsZS9EaXJlY3RvcnkucGhwJywKICAgICAgICAnSG9hXFxGaWxlXFxFeGNlcHRpb25cXEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvZmlsZS9FeGNlcHRpb24vRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ0hvYVxcRmlsZVxcRXhjZXB0aW9uXFxGaWxlRG9lc05vdEV4aXN0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9maWxlL0V4Y2VwdGlvbi9GaWxlRG9lc05vdEV4aXN0LnBocCcsCiAgICAgICAgJ0hvYVxcRmlsZVxcRmlsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvZmlsZS9GaWxlLnBocCcsCiAgICAgICAgJ0hvYVxcRmlsZVxcRmluZGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9maWxlL0ZpbmRlci5waHAnLAogICAgICAgICdIb2FcXEZpbGVcXEdlbmVyaWMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2ZpbGUvR2VuZXJpYy5waHAnLAogICAgICAgICdIb2FcXEZpbGVcXExpbmtcXExpbmsnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2ZpbGUvTGluay9MaW5rLnBocCcsCiAgICAgICAgJ0hvYVxcRmlsZVxcTGlua1xcUmVhZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvZmlsZS9MaW5rL1JlYWQucGhwJywKICAgICAgICAnSG9hXFxGaWxlXFxMaW5rXFxSZWFkV3JpdGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2ZpbGUvTGluay9SZWFkV3JpdGUucGhwJywKICAgICAgICAnSG9hXFxGaWxlXFxMaW5rXFxXcml0ZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvZmlsZS9MaW5rL1dyaXRlLnBocCcsCiAgICAgICAgJ0hvYVxcRmlsZVxcUmVhZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvZmlsZS9SZWFkLnBocCcsCiAgICAgICAgJ0hvYVxcRmlsZVxcUmVhZFdyaXRlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9maWxlL1JlYWRXcml0ZS5waHAnLAogICAgICAgICdIb2FcXEZpbGVcXFNwbEZpbGVJbmZvJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9maWxlL1NwbEZpbGVJbmZvLnBocCcsCiAgICAgICAgJ0hvYVxcRmlsZVxcVGVtcG9yYXJ5XFxSZWFkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9maWxlL1RlbXBvcmFyeS9SZWFkLnBocCcsCiAgICAgICAgJ0hvYVxcRmlsZVxcVGVtcG9yYXJ5XFxSZWFkV3JpdGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2ZpbGUvVGVtcG9yYXJ5L1JlYWRXcml0ZS5waHAnLAogICAgICAgICdIb2FcXEZpbGVcXFRlbXBvcmFyeVxcVGVtcG9yYXJ5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9maWxlL1RlbXBvcmFyeS9UZW1wb3JhcnkucGhwJywKICAgICAgICAnSG9hXFxGaWxlXFxUZW1wb3JhcnlcXFdyaXRlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9maWxlL1RlbXBvcmFyeS9Xcml0ZS5waHAnLAogICAgICAgICdIb2FcXEZpbGVcXFdhdGNoZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2ZpbGUvV2F0Y2hlci5waHAnLAogICAgICAgICdIb2FcXEZpbGVcXFdyaXRlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9maWxlL1dyaXRlLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXEFnZ3JlZ2F0ZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvQWdncmVnYXRlLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXEFwcGVuZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvQXBwZW5kLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXEJ1ZmZlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvQnVmZmVyLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXENhbGxiYWNrRmlsdGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9pdGVyYXRvci9DYWxsYmFja0ZpbHRlci5waHAnLAogICAgICAgICdIb2FcXEl0ZXJhdG9yXFxDYWxsYmFja0dlbmVyYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvQ2FsbGJhY2tHZW5lcmF0b3IucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcQ291bnRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvQ291bnRlci5waHAnLAogICAgICAgICdIb2FcXEl0ZXJhdG9yXFxEZW11bHRpcGxleGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9pdGVyYXRvci9EZW11bHRpcGxleGVyLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXERpcmVjdG9yeScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvRGlyZWN0b3J5LnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXEZpbGVTeXN0ZW0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2l0ZXJhdG9yL0ZpbGVTeXN0ZW0ucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcRmlsdGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9pdGVyYXRvci9GaWx0ZXIucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcR2xvYicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvR2xvYi5waHAnLAogICAgICAgICdIb2FcXEl0ZXJhdG9yXFxJbmZpbml0ZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvSW5maW5pdGUucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcSXRlcmF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2l0ZXJhdG9yL0l0ZXJhdG9yLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXEl0ZXJhdG9ySXRlcmF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2l0ZXJhdG9yL0l0ZXJhdG9ySXRlcmF0b3IucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcTGltaXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2l0ZXJhdG9yL0xpbWl0LnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXExvb2thaGVhZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvTG9va2FoZWFkLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXExvb2tiZWhpbmQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2l0ZXJhdG9yL0xvb2tiZWhpbmQucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcTWFwJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9pdGVyYXRvci9NYXAucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcTW9jaycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvTW9jay5waHAnLAogICAgICAgICdIb2FcXEl0ZXJhdG9yXFxNdWx0aXBsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvTXVsdGlwbGUucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcTm9SZXdpbmQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2l0ZXJhdG9yL05vUmV3aW5kLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXE91dGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9pdGVyYXRvci9PdXRlci5waHAnLAogICAgICAgICdIb2FcXEl0ZXJhdG9yXFxSZWN1cnNpdmVcXENhbGxiYWNrRmlsdGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9pdGVyYXRvci9SZWN1cnNpdmUvQ2FsbGJhY2tGaWx0ZXIucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcUmVjdXJzaXZlXFxEaXJlY3RvcnknID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2l0ZXJhdG9yL1JlY3Vyc2l2ZS9EaXJlY3RvcnkucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcUmVjdXJzaXZlXFxGaWx0ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2l0ZXJhdG9yL1JlY3Vyc2l2ZS9GaWx0ZXIucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcUmVjdXJzaXZlXFxJdGVyYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvUmVjdXJzaXZlL0l0ZXJhdG9yLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXFJlY3Vyc2l2ZVxcTWFwJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9pdGVyYXRvci9SZWN1cnNpdmUvTWFwLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXFJlY3Vyc2l2ZVxcTW9jaycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvUmVjdXJzaXZlL01vY2sucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcUmVjdXJzaXZlXFxSZWN1cnNpdmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2l0ZXJhdG9yL1JlY3Vyc2l2ZS9SZWN1cnNpdmUucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcUmVjdXJzaXZlXFxSZWd1bGFyRXhwcmVzc2lvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvUmVjdXJzaXZlL1JlZ3VsYXJFeHByZXNzaW9uLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXFJlZ3VsYXJFeHByZXNzaW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9pdGVyYXRvci9SZWd1bGFyRXhwcmVzc2lvbi5waHAnLAogICAgICAgICdIb2FcXEl0ZXJhdG9yXFxSZXBlYXRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvaXRlcmF0b3IvUmVwZWF0ZXIucGhwJywKICAgICAgICAnSG9hXFxJdGVyYXRvclxcU2Vla2FibGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL2l0ZXJhdG9yL1NlZWthYmxlLnBocCcsCiAgICAgICAgJ0hvYVxcSXRlcmF0b3JcXFNwbEZpbGVJbmZvJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9pdGVyYXRvci9TcGxGaWxlSW5mby5waHAnLAogICAgICAgICdIb2FcXE1hdGhcXEJpblxcQ2FsYycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvbWF0aC9CaW4vQ2FsYy5waHAnLAogICAgICAgICdIb2FcXE1hdGhcXENvbWJpbmF0b3JpY3NcXENvbWJpbmF0aW9uXFxDYXJ0ZXNpYW5Qcm9kdWN0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9tYXRoL0NvbWJpbmF0b3JpY3MvQ29tYmluYXRpb24vQ2FydGVzaWFuUHJvZHVjdC5waHAnLAogICAgICAgICdIb2FcXE1hdGhcXENvbWJpbmF0b3JpY3NcXENvbWJpbmF0aW9uXFxDb21iaW5hdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvbWF0aC9Db21iaW5hdG9yaWNzL0NvbWJpbmF0aW9uL0NvbWJpbmF0aW9uLnBocCcsCiAgICAgICAgJ0hvYVxcTWF0aFxcQ29tYmluYXRvcmljc1xcQ29tYmluYXRpb25cXEdhbW1hJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9tYXRoL0NvbWJpbmF0b3JpY3MvQ29tYmluYXRpb24vR2FtbWEucGhwJywKICAgICAgICAnSG9hXFxNYXRoXFxDb250ZXh0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9tYXRoL0NvbnRleHQucGhwJywKICAgICAgICAnSG9hXFxNYXRoXFxFeGNlcHRpb25cXEFscmVhZHlEZWZpbmVkQ29uc3RhbnQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL21hdGgvRXhjZXB0aW9uL0FscmVhZHlEZWZpbmVkQ29uc3RhbnQucGhwJywKICAgICAgICAnSG9hXFxNYXRoXFxFeGNlcHRpb25cXEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvbWF0aC9FeGNlcHRpb24vRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ0hvYVxcTWF0aFxcRXhjZXB0aW9uXFxVbmtub3duQ29uc3RhbnQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL21hdGgvRXhjZXB0aW9uL1Vua25vd25Db25zdGFudC5waHAnLAogICAgICAgICdIb2FcXE1hdGhcXEV4Y2VwdGlvblxcVW5rbm93bkZ1bmN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9tYXRoL0V4Y2VwdGlvbi9Vbmtub3duRnVuY3Rpb24ucGhwJywKICAgICAgICAnSG9hXFxNYXRoXFxFeGNlcHRpb25cXFVua25vd25WYXJpYWJsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvbWF0aC9FeGNlcHRpb24vVW5rbm93blZhcmlhYmxlLnBocCcsCiAgICAgICAgJ0hvYVxcTWF0aFxcU2FtcGxlclxcUmFuZG9tJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9tYXRoL1NhbXBsZXIvUmFuZG9tLnBocCcsCiAgICAgICAgJ0hvYVxcTWF0aFxcU2FtcGxlclxcU2FtcGxlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvbWF0aC9TYW1wbGVyL1NhbXBsZXIucGhwJywKICAgICAgICAnSG9hXFxNYXRoXFxVdGlsJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9tYXRoL1V0aWwucGhwJywKICAgICAgICAnSG9hXFxNYXRoXFxWaXNpdG9yXFxBcml0aG1ldGljJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9tYXRoL1Zpc2l0b3IvQXJpdGhtZXRpYy5waHAnLAogICAgICAgICdIb2FcXFByb3RvY29sXFxCaW5cXFJlc29sdmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3Byb3RvY29sL0Jpbi9SZXNvbHZlLnBocCcsCiAgICAgICAgJ0hvYVxcUHJvdG9jb2xcXEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvcHJvdG9jb2wvRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ0hvYVxcUHJvdG9jb2xcXE5vZGVcXExpYnJhcnknID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3Byb3RvY29sL05vZGUvTGlicmFyeS5waHAnLAogICAgICAgICdIb2FcXFByb3RvY29sXFxOb2RlXFxOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9wcm90b2NvbC9Ob2RlL05vZGUucGhwJywKICAgICAgICAnSG9hXFxQcm90b2NvbFxcUHJvdG9jb2wnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3Byb3RvY29sL1Byb3RvY29sLnBocCcsCiAgICAgICAgJ0hvYVxcUHJvdG9jb2xcXFdyYXBwZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3Byb3RvY29sL1dyYXBwZXIucGhwJywKICAgICAgICAnSG9hXFxSZWdleFxcRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9yZWdleC9FeGNlcHRpb24ucGhwJywKICAgICAgICAnSG9hXFxSZWdleFxcVmlzaXRvclxcSXNvdHJvcGljJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9yZWdleC9WaXNpdG9yL0lzb3Ryb3BpYy5waHAnLAogICAgICAgICdIb2FcXFN0cmVhbVxcQnVja2V0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9zdHJlYW0vQnVja2V0LnBocCcsCiAgICAgICAgJ0hvYVxcU3RyZWFtXFxDb21wb3NpdGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9Db21wb3NpdGUucGhwJywKICAgICAgICAnSG9hXFxTdHJlYW1cXENvbnRleHQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9Db250ZXh0LnBocCcsCiAgICAgICAgJ0hvYVxcU3RyZWFtXFxFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9FeGNlcHRpb24ucGhwJywKICAgICAgICAnSG9hXFxTdHJlYW1cXEZpbHRlclxcQmFzaWMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9GaWx0ZXIvQmFzaWMucGhwJywKICAgICAgICAnSG9hXFxTdHJlYW1cXEZpbHRlclxcRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9zdHJlYW0vRmlsdGVyL0V4Y2VwdGlvbi5waHAnLAogICAgICAgICdIb2FcXFN0cmVhbVxcRmlsdGVyXFxGaWx0ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9GaWx0ZXIvRmlsdGVyLnBocCcsCiAgICAgICAgJ0hvYVxcU3RyZWFtXFxGaWx0ZXJcXExhdGVDb21wdXRlZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2Evc3RyZWFtL0ZpbHRlci9MYXRlQ29tcHV0ZWQucGhwJywKICAgICAgICAnSG9hXFxTdHJlYW1cXElTdHJlYW1cXEJ1ZmZlcmFibGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL0J1ZmZlcmFibGUucGhwJywKICAgICAgICAnSG9hXFxTdHJlYW1cXElTdHJlYW1cXEluJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9zdHJlYW0vSVN0cmVhbS9Jbi5waHAnLAogICAgICAgICdIb2FcXFN0cmVhbVxcSVN0cmVhbVxcTG9ja2FibGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL0xvY2thYmxlLnBocCcsCiAgICAgICAgJ0hvYVxcU3RyZWFtXFxJU3RyZWFtXFxPdXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL091dC5waHAnLAogICAgICAgICdIb2FcXFN0cmVhbVxcSVN0cmVhbVxcUGF0aGFibGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL1BhdGhhYmxlLnBocCcsCiAgICAgICAgJ0hvYVxcU3RyZWFtXFxJU3RyZWFtXFxQb2ludGFibGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL1BvaW50YWJsZS5waHAnLAogICAgICAgICdIb2FcXFN0cmVhbVxcSVN0cmVhbVxcU3RhdGFibGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL1N0YXRhYmxlLnBocCcsCiAgICAgICAgJ0hvYVxcU3RyZWFtXFxJU3RyZWFtXFxTdHJlYW0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL1N0cmVhbS5waHAnLAogICAgICAgICdIb2FcXFN0cmVhbVxcSVN0cmVhbVxcU3RydWN0dXJhbCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2Evc3RyZWFtL0lTdHJlYW0vU3RydWN0dXJhbC5waHAnLAogICAgICAgICdIb2FcXFN0cmVhbVxcSVN0cmVhbVxcVG91Y2hhYmxlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9zdHJlYW0vSVN0cmVhbS9Ub3VjaGFibGUucGhwJywKICAgICAgICAnSG9hXFxTdHJlYW1cXFN0cmVhbScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2Evc3RyZWFtL1N0cmVhbS5waHAnLAogICAgICAgICdIb2FcXFN0cmVhbVxcV3JhcHBlclxcRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9zdHJlYW0vV3JhcHBlci9FeGNlcHRpb24ucGhwJywKICAgICAgICAnSG9hXFxTdHJlYW1cXFdyYXBwZXJcXElXcmFwcGVyXFxGaWxlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9zdHJlYW0vV3JhcHBlci9JV3JhcHBlci9GaWxlLnBocCcsCiAgICAgICAgJ0hvYVxcU3RyZWFtXFxXcmFwcGVyXFxJV3JhcHBlclxcSVdyYXBwZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9XcmFwcGVyL0lXcmFwcGVyL0lXcmFwcGVyLnBocCcsCiAgICAgICAgJ0hvYVxcU3RyZWFtXFxXcmFwcGVyXFxJV3JhcHBlclxcU3RyZWFtJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS9zdHJlYW0vV3JhcHBlci9JV3JhcHBlci9TdHJlYW0ucGhwJywKICAgICAgICAnSG9hXFxTdHJlYW1cXFdyYXBwZXJcXFdyYXBwZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3N0cmVhbS9XcmFwcGVyL1dyYXBwZXIucGhwJywKICAgICAgICAnSG9hXFxVc3RyaW5nXFxCaW5cXEZyb21jb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS91c3RyaW5nL0Jpbi9Gcm9tY29kZS5waHAnLAogICAgICAgICdIb2FcXFVzdHJpbmdcXEJpblxcVG9jb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS91c3RyaW5nL0Jpbi9Ub2NvZGUucGhwJywKICAgICAgICAnSG9hXFxVc3RyaW5nXFxFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3VzdHJpbmcvRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ0hvYVxcVXN0cmluZ1xcU2VhcmNoJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS91c3RyaW5nL1NlYXJjaC5waHAnLAogICAgICAgICdIb2FcXFVzdHJpbmdcXFVzdHJpbmcnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3VzdHJpbmcvVXN0cmluZy5waHAnLAogICAgICAgICdIb2FcXFZpc2l0b3JcXEVsZW1lbnQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3Zpc2l0b3IvRWxlbWVudC5waHAnLAogICAgICAgICdIb2FcXFZpc2l0b3JcXFZpc2l0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS92aXNpdG9yL1Zpc2l0LnBocCcsCiAgICAgICAgJ0hvYVxcWmZvcm1hdFxcRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2hvYS96Zm9ybWF0L0V4Y2VwdGlvbi5waHAnLAogICAgICAgICdIb2FcXFpmb3JtYXRcXFBhcmFtZXRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ob2EvemZvcm1hdC9QYXJhbWV0ZXIucGhwJywKICAgICAgICAnSG9hXFxaZm9ybWF0XFxQYXJhbWV0ZXJpemFibGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvaG9hL3pmb3JtYXQvUGFyYW1ldGVyaXphYmxlLnBocCcsCiAgICAgICAgJ0pzb25FeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA3My9SZXNvdXJjZXMvc3R1YnMvSnNvbkV4Y2VwdGlvbi5waHAnLAogICAgICAgICdOb3JtYWxpemVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtaW50bC1ub3JtYWxpemVyL1Jlc291cmNlcy9zdHVicy9Ob3JtYWxpemVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VkQ29kZUV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZWRDb2RlRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxBbmFseXNlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvQW5hbHlzZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXEFuYWx5c2VyUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9BbmFseXNlclJlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcQW5hbHlzZXJSZXN1bHRGaW5hbGl6ZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL0FuYWx5c2VyUmVzdWx0RmluYWxpemVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxBcmd1bWVudHNOb3JtYWxpemVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9Bcmd1bWVudHNOb3JtYWxpemVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxDb25kaXRpb25hbEV4cHJlc3Npb25Ib2xkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL0NvbmRpdGlvbmFsRXhwcmVzc2lvbkhvbGRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcQ29uc3RhbnRSZXNvbHZlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvQ29uc3RhbnRSZXNvbHZlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcQ29uc3RhbnRSZXNvbHZlckZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL0NvbnN0YW50UmVzb2x2ZXJGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxEaXJlY3RJbnRlcm5hbFNjb3BlRmFjdG9yeScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvRGlyZWN0SW50ZXJuYWxTY29wZUZhY3RvcnkucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXEVuZFN0YXRlbWVudFJlc3VsdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvRW5kU3RhdGVtZW50UmVzdWx0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxFbnN1cmVkTm9uTnVsbGFiaWxpdHlSZXN1bHQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL0Vuc3VyZWROb25OdWxsYWJpbGl0eVJlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcRW5zdXJlZE5vbk51bGxhYmlsaXR5UmVzdWx0RXhwcmVzc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvRW5zdXJlZE5vbk51bGxhYmlsaXR5UmVzdWx0RXhwcmVzc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcRXJyb3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL0Vycm9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxFeHByZXNzaW9uQ29udGV4dCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvRXhwcmVzc2lvbkNvbnRleHQucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXEV4cHJlc3Npb25SZXN1bHQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL0V4cHJlc3Npb25SZXN1bHQucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXEV4cHJlc3Npb25UeXBlSG9sZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9FeHByZXNzaW9uVHlwZUhvbGRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcRmlsZUFuYWx5c2VyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9GaWxlQW5hbHlzZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXEZpbGVBbmFseXNlclJlc3VsdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvRmlsZUFuYWx5c2VyUmVzdWx0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxGaW5hbGl6ZXJSZXN1bHQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL0ZpbmFsaXplclJlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcSWdub3JlXFxJZ25vcmVMZXhlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvSWdub3JlL0lnbm9yZUxleGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxJZ25vcmVcXElnbm9yZVBhcnNlRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9JZ25vcmUvSWdub3JlUGFyc2VFeGNlcHRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXElnbm9yZVxcSWdub3JlZEVycm9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9JZ25vcmUvSWdub3JlZEVycm9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxJZ25vcmVcXElnbm9yZWRFcnJvckhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvSWdub3JlL0lnbm9yZWRFcnJvckhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcSWdub3JlXFxJZ25vcmVkRXJyb3JIZWxwZXJQcm9jZXNzZWRSZXN1bHQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL0lnbm9yZS9JZ25vcmVkRXJyb3JIZWxwZXJQcm9jZXNzZWRSZXN1bHQucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXElnbm9yZVxcSWdub3JlZEVycm9ySGVscGVyUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9JZ25vcmUvSWdub3JlZEVycm9ySGVscGVyUmVzdWx0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxJbXB1cmVQb2ludCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvSW1wdXJlUG9pbnQucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXEludGVybmFsRXJyb3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL0ludGVybmFsRXJyb3IucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXEludGVybmFsU2NvcGVGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9JbnRlcm5hbFNjb3BlRmFjdG9yeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcTGF6eUludGVybmFsU2NvcGVGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9MYXp5SW50ZXJuYWxTY29wZUZhY3RvcnkucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXExvY2FsSWdub3Jlc1Byb2Nlc3NvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvTG9jYWxJZ25vcmVzUHJvY2Vzc29yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxMb2NhbElnbm9yZXNQcm9jZXNzb3JSZXN1bHQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL0xvY2FsSWdub3Jlc1Byb2Nlc3NvclJlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcTXV0YXRpbmdTY29wZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvTXV0YXRpbmdTY29wZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcTmFtZVNjb3BlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9OYW1lU2NvcGUucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXE5vZGVTY29wZVJlc29sdmVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9Ob2RlU2NvcGVSZXNvbHZlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcTnVsbHNhZmVPcGVyYXRvckhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvTnVsbHNhZmVPcGVyYXRvckhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcT3V0T2ZDbGFzc1Njb3BlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9PdXRPZkNsYXNzU2NvcGUucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFByb2Nlc3NDbG9zdXJlUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9Qcm9jZXNzQ2xvc3VyZVJlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcUmVzdWx0Q2FjaGVcXFJlc3VsdENhY2hlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9SZXN1bHRDYWNoZS9SZXN1bHRDYWNoZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcUmVzdWx0Q2FjaGVcXFJlc3VsdENhY2hlQ2xlYXJlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvUmVzdWx0Q2FjaGUvUmVzdWx0Q2FjaGVDbGVhcmVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxSZXN1bHRDYWNoZVxcUmVzdWx0Q2FjaGVNYW5hZ2VyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9SZXN1bHRDYWNoZS9SZXN1bHRDYWNoZU1hbmFnZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFJlc3VsdENhY2hlXFxSZXN1bHRDYWNoZU1hbmFnZXJGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9SZXN1bHRDYWNoZS9SZXN1bHRDYWNoZU1hbmFnZXJGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxSZXN1bHRDYWNoZVxcUmVzdWx0Q2FjaGVQcm9jZXNzUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9SZXN1bHRDYWNoZS9SZXN1bHRDYWNoZVByb2Nlc3NSZXN1bHQucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFJpY2hlclNjb3BlR2V0VHlwZUhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvUmljaGVyU2NvcGVHZXRUeXBlSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxSdWxlRXJyb3JUcmFuc2Zvcm1lcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvUnVsZUVycm9yVHJhbnNmb3JtZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFNjb3BlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9TY29wZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcU2NvcGVDb250ZXh0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9TY29wZUNvbnRleHQucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFNjb3BlRmFjdG9yeScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvU2NvcGVGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxTcGVjaWZpZWRUeXBlcycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvU3BlY2lmaWVkVHlwZXMucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFN0YXRlbWVudENvbnRleHQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL1N0YXRlbWVudENvbnRleHQucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFN0YXRlbWVudEV4aXRQb2ludCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvU3RhdGVtZW50RXhpdFBvaW50LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxTdGF0ZW1lbnRSZXN1bHQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL1N0YXRlbWVudFJlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcVGhyb3dQb2ludCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvVGhyb3dQb2ludC5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcVHlwZVNwZWNpZmllcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvVHlwZVNwZWNpZmllci5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcVHlwZVNwZWNpZmllckF3YXJlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9UeXBlU3BlY2lmaWVyQXdhcmVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFR5cGVTcGVjaWZpZXJDb250ZXh0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9BbmFseXNlci9UeXBlU3BlY2lmaWVyQ29udGV4dC5waHAnLAogICAgICAgICdQSFBTdGFuXFxBbmFseXNlclxcVHlwZVNwZWNpZmllckZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0FuYWx5c2VyL1R5cGVTcGVjaWZpZXJGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxVbmRlZmluZWRWYXJpYWJsZUV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQW5hbHlzZXIvVW5kZWZpbmVkVmFyaWFibGVFeGNlcHRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL0JldHRlclJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcSWRlbnRpZmllclxcRXhjZXB0aW9uXFxJbnZhbGlkSWRlbnRpZmllck5hbWUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9JZGVudGlmaWVyL0V4Y2VwdGlvbi9JbnZhbGlkSWRlbnRpZmllck5hbWUucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcSWRlbnRpZmllclxcSWRlbnRpZmllcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL0lkZW50aWZpZXIvSWRlbnRpZmllci5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxJZGVudGlmaWVyXFxJZGVudGlmaWVyVHlwZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL0lkZW50aWZpZXIvSWRlbnRpZmllclR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcTm9kZUNvbXBpbGVyXFxDb21waWxlTm9kZVRvVmFsdWUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Ob2RlQ29tcGlsZXIvQ29tcGlsZU5vZGVUb1ZhbHVlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXE5vZGVDb21waWxlclxcQ29tcGlsZWRWYWx1ZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL05vZGVDb21waWxlci9Db21waWxlZFZhbHVlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXE5vZGVDb21waWxlclxcQ29tcGlsZXJDb250ZXh0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvTm9kZUNvbXBpbGVyL0NvbXBpbGVyQ29udGV4dC5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxOb2RlQ29tcGlsZXJcXEV4Y2VwdGlvblxcVW5hYmxlVG9Db21waWxlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL05vZGVDb21waWxlci9FeGNlcHRpb24vVW5hYmxlVG9Db21waWxlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBZGFwdGVyXFxFeGNlcHRpb25cXE5vdEltcGxlbWVudGVkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL0V4Y2VwdGlvbi9Ob3RJbXBsZW1lbnRlZC5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBZGFwdGVyXFxGYWtlUmVmbGVjdGlvbkF0dHJpYnV0ZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9GYWtlUmVmbGVjdGlvbkF0dHJpYnV0ZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBZGFwdGVyXFxSZWZsZWN0aW9uQXR0cmlidXRlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25BdHRyaWJ1dGUucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcQWRhcHRlclxcUmVmbGVjdGlvbkF0dHJpYnV0ZUZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbkF0dHJpYnV0ZUZhY3RvcnkucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcQWRhcHRlclxcUmVmbGVjdGlvbkNsYXNzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25DbGFzcy5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBZGFwdGVyXFxSZWZsZWN0aW9uQ2xhc3NDb25zdGFudCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9SZWZsZWN0aW9uQ2xhc3NDb25zdGFudC5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBZGFwdGVyXFxSZWZsZWN0aW9uRW51bScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9SZWZsZWN0aW9uRW51bS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBZGFwdGVyXFxSZWZsZWN0aW9uRW51bUJhY2tlZENhc2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbkVudW1CYWNrZWRDYXNlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25FbnVtVW5pdENhc2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbkVudW1Vbml0Q2FzZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBZGFwdGVyXFxSZWZsZWN0aW9uRnVuY3Rpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbkZ1bmN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25JbnRlcnNlY3Rpb25UeXBlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25JbnRlcnNlY3Rpb25UeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25NZXRob2QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbk1ldGhvZC5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBZGFwdGVyXFxSZWZsZWN0aW9uTmFtZWRUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25OYW1lZFR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcQWRhcHRlclxcUmVmbGVjdGlvbk9iamVjdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9SZWZsZWN0aW9uT2JqZWN0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25QYXJhbWV0ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvblBhcmFtZXRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBZGFwdGVyXFxSZWZsZWN0aW9uUHJvcGVydHknID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvblByb3BlcnR5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25UeXBlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25UeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25VbmlvblR5cGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvblVuaW9uVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBbm5vdGF0aW9uXFxBbm5vdGF0aW9uSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9Bbm5vdGF0aW9uL0Fubm90YXRpb25IZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcQXR0cmlidXRlXFxSZWZsZWN0aW9uQXR0cmlidXRlSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BdHRyaWJ1dGUvUmVmbGVjdGlvbkF0dHJpYnV0ZUhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxFeGNlcHRpb25cXENpcmN1bGFyUmVmZXJlbmNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vQ2lyY3VsYXJSZWZlcmVuY2UucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcRXhjZXB0aW9uXFxDbGFzc0RvZXNOb3RFeGlzdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL0NsYXNzRG9lc05vdEV4aXN0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEV4Y2VwdGlvblxcQ29kZUxvY2F0aW9uTWlzc2luZycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL0NvZGVMb2NhdGlvbk1pc3NpbmcucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcRXhjZXB0aW9uXFxGdW5jdGlvbkRvZXNOb3RFeGlzdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL0Z1bmN0aW9uRG9lc05vdEV4aXN0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEV4Y2VwdGlvblxcSW52YWxpZEFycm93RnVuY3Rpb25Cb2R5Tm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL0ludmFsaWRBcnJvd0Z1bmN0aW9uQm9keU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcRXhjZXB0aW9uXFxJbnZhbGlkQ29uc3RhbnROb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vSW52YWxpZENvbnN0YW50Tm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxFeGNlcHRpb25cXEludmFsaWREZWZhdWx0VmFsdWVUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vSW52YWxpZERlZmF1bHRWYWx1ZVR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcRXhjZXB0aW9uXFxNZXRob2RQcm90b3R5cGVOb3RGb3VuZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL01ldGhvZFByb3RvdHlwZU5vdEZvdW5kLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEV4Y2VwdGlvblxcTm9PYmplY3RQcm92aWRlZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL05vT2JqZWN0UHJvdmlkZWQucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcRXhjZXB0aW9uXFxOb1BhcmVudCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL05vUGFyZW50LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEV4Y2VwdGlvblxcTm90QW5PYmplY3QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0V4Y2VwdGlvbi9Ob3RBbk9iamVjdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxFeGNlcHRpb25cXE9iamVjdE5vdEluc3RhbmNlT2ZDbGFzcycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL09iamVjdE5vdEluc3RhbmNlT2ZDbGFzcy5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxFeGNlcHRpb25cXFByb3BlcnR5RG9lc05vdEV4aXN0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vUHJvcGVydHlEb2VzTm90RXhpc3QucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcRXhjZXB0aW9uXFxQcm9wZXJ0eUlzTm90U3RhdGljJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vUHJvcGVydHlJc05vdFN0YXRpYy5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25BdHRyaWJ1dGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25BdHRyaWJ1dGUucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvbkNsYXNzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uQ2xhc3MucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvbkNsYXNzQ29uc3RhbnQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25DbGFzc0NvbnN0YW50LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25Db25zdGFudCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkNvbnN0YW50LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25FbnVtJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uRW51bS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uRW51bUNhc2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25FbnVtQ2FzZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uRnVuY3Rpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25GdW5jdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uRnVuY3Rpb25BYnN0cmFjdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkZ1bmN0aW9uQWJzdHJhY3QucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvbkludGVyc2VjdGlvblR5cGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25JbnRlcnNlY3Rpb25UeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25NZXRob2QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25NZXRob2QucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvbk5hbWVkVHlwZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvbk5hbWVkVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uT2JqZWN0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uT2JqZWN0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25QYXJhbWV0ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25QYXJhbWV0ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvblByb3BlcnR5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvcGVydHkucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvblR5cGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25UeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25VbmlvblR5cGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25VbmlvblR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcU3RyaW5nQ2FzdFxcUmVmbGVjdGlvbkF0dHJpYnV0ZVN0cmluZ0Nhc3QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N0cmluZ0Nhc3QvUmVmbGVjdGlvbkF0dHJpYnV0ZVN0cmluZ0Nhc3QucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcU3RyaW5nQ2FzdFxcUmVmbGVjdGlvbkNsYXNzQ29uc3RhbnRTdHJpbmdDYXN0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9TdHJpbmdDYXN0L1JlZmxlY3Rpb25DbGFzc0NvbnN0YW50U3RyaW5nQ2FzdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxTdHJpbmdDYXN0XFxSZWZsZWN0aW9uQ2xhc3NTdHJpbmdDYXN0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9TdHJpbmdDYXN0L1JlZmxlY3Rpb25DbGFzc1N0cmluZ0Nhc3QucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcU3RyaW5nQ2FzdFxcUmVmbGVjdGlvbkNvbnN0YW50U3RyaW5nQ2FzdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vU3RyaW5nQ2FzdC9SZWZsZWN0aW9uQ29uc3RhbnRTdHJpbmdDYXN0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFN0cmluZ0Nhc3RcXFJlZmxlY3Rpb25FbnVtQ2FzZVN0cmluZ0Nhc3QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N0cmluZ0Nhc3QvUmVmbGVjdGlvbkVudW1DYXNlU3RyaW5nQ2FzdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxTdHJpbmdDYXN0XFxSZWZsZWN0aW9uRnVuY3Rpb25TdHJpbmdDYXN0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9TdHJpbmdDYXN0L1JlZmxlY3Rpb25GdW5jdGlvblN0cmluZ0Nhc3QucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcU3RyaW5nQ2FzdFxcUmVmbGVjdGlvbk1ldGhvZFN0cmluZ0Nhc3QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N0cmluZ0Nhc3QvUmVmbGVjdGlvbk1ldGhvZFN0cmluZ0Nhc3QucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcU3RyaW5nQ2FzdFxcUmVmbGVjdGlvblBhcmFtZXRlclN0cmluZ0Nhc3QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N0cmluZ0Nhc3QvUmVmbGVjdGlvblBhcmFtZXRlclN0cmluZ0Nhc3QucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcU3RyaW5nQ2FzdFxcUmVmbGVjdGlvblByb3BlcnR5U3RyaW5nQ2FzdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vU3RyaW5nQ2FzdC9SZWZsZWN0aW9uUHJvcGVydHlTdHJpbmdDYXN0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFN0cmluZ0Nhc3RcXFJlZmxlY3Rpb25UeXBlU3RyaW5nQ2FzdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vU3RyaW5nQ2FzdC9SZWZsZWN0aW9uVHlwZVN0cmluZ0Nhc3QucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcU3VwcG9ydFxcQWxyZWFkeVZpc2l0ZWRDbGFzc2VzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9TdXBwb3J0L0FscmVhZHlWaXNpdGVkQ2xhc3Nlcy5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0b3JcXENsYXNzUmVmbGVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdG9yL0NsYXNzUmVmbGVjdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3RvclxcQ29uc3RhbnRSZWZsZWN0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0b3IvQ29uc3RhbnRSZWZsZWN0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdG9yXFxEZWZhdWx0UmVmbGVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdG9yL0RlZmF1bHRSZWZsZWN0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdG9yXFxFeGNlcHRpb25cXElkZW50aWZpZXJOb3RGb3VuZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rvci9FeGNlcHRpb24vSWRlbnRpZmllck5vdEZvdW5kLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3RvclxcRnVuY3Rpb25SZWZsZWN0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0b3IvRnVuY3Rpb25SZWZsZWN0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdG9yXFxSZWZsZWN0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0b3IvUmVmbGVjdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEFzdFxcRXhjZXB0aW9uXFxQYXJzZVRvQXN0RmFpbHVyZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvQXN0L0V4Y2VwdGlvbi9QYXJzZVRvQXN0RmFpbHVyZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxBc3RcXEZpbmRSZWZsZWN0aW9uc0luVHJlZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvQXN0L0ZpbmRSZWZsZWN0aW9uc0luVHJlZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxBc3RcXExvY2F0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0FzdC9Mb2NhdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEFzdFxcUGFyc2VyXFxNZW1vaXppbmdQYXJzZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0FzdC9QYXJzZXIvTWVtb2l6aW5nUGFyc2VyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEFzdFxcU3RyYXRlZ3lcXEFzdENvbnZlcnNpb25TdHJhdGVneScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvQXN0L1N0cmF0ZWd5L0FzdENvbnZlcnNpb25TdHJhdGVneS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxBc3RcXFN0cmF0ZWd5XFxOb2RlVG9SZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Bc3QvU3RyYXRlZ3kvTm9kZVRvUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxFeGNlcHRpb25cXEV2YWxlZEFub255bW91c0NsYXNzQ2Fubm90QmVMb2NhdGVkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vRXZhbGVkQW5vbnltb3VzQ2xhc3NDYW5ub3RCZUxvY2F0ZWQucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcRXhjZXB0aW9uXFxFdmFsZWRDbG9zdXJlQ2Fubm90QmVMb2NhdGVkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vRXZhbGVkQ2xvc3VyZUNhbm5vdEJlTG9jYXRlZC5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxFeGNlcHRpb25cXEZ1bmN0aW9uVW5kZWZpbmVkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vRnVuY3Rpb25VbmRlZmluZWQucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcRXhjZXB0aW9uXFxJbnZhbGlkRGlyZWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vSW52YWxpZERpcmVjdG9yeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxFeGNlcHRpb25cXEludmFsaWRGaWxlSW5mbycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvRXhjZXB0aW9uL0ludmFsaWRGaWxlSW5mby5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxFeGNlcHRpb25cXEludmFsaWRGaWxlTG9jYXRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0V4Y2VwdGlvbi9JbnZhbGlkRmlsZUxvY2F0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEV4Y2VwdGlvblxcTm9Bbm9ueW1vdXNDbGFzc09uTGluZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvRXhjZXB0aW9uL05vQW5vbnltb3VzQ2xhc3NPbkxpbmUucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcRXhjZXB0aW9uXFxOb0Nsb3N1cmVPbkxpbmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0V4Y2VwdGlvbi9Ob0Nsb3N1cmVPbkxpbmUucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcRXhjZXB0aW9uXFxOb3RJbnRlcm5hbENsYXNzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vTm90SW50ZXJuYWxDbGFzcy5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxFeGNlcHRpb25cXFR3b0Fub255bW91c0NsYXNzZXNPblNhbWVMaW5lJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vVHdvQW5vbnltb3VzQ2xhc3Nlc09uU2FtZUxpbmUucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcRXhjZXB0aW9uXFxUd29DbG9zdXJlc09uU2FtZUxpbmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0V4Y2VwdGlvbi9Ud29DbG9zdXJlc09uU2FtZUxpbmUucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcRmlsZUNoZWNrZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0ZpbGVDaGVja2VyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXExvY2F0ZWRcXEFsaWFzTG9jYXRlZFNvdXJjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvTG9jYXRlZC9BbGlhc0xvY2F0ZWRTb3VyY2UucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcTG9jYXRlZFxcQW5vbnltb3VzTG9jYXRlZFNvdXJjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvTG9jYXRlZC9Bbm9ueW1vdXNMb2NhdGVkU291cmNlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXExvY2F0ZWRcXEV2YWxlZExvY2F0ZWRTb3VyY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0xvY2F0ZWQvRXZhbGVkTG9jYXRlZFNvdXJjZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxMb2NhdGVkXFxJbnRlcm5hbExvY2F0ZWRTb3VyY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0xvY2F0ZWQvSW50ZXJuYWxMb2NhdGVkU291cmNlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXExvY2F0ZWRcXExvY2F0ZWRTb3VyY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0xvY2F0ZWQvTG9jYXRlZFNvdXJjZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxTb3VyY2VTdHViYmVyXFxBZ2dyZWdhdGVTb3VyY2VTdHViYmVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Tb3VyY2VTdHViYmVyL0FnZ3JlZ2F0ZVNvdXJjZVN0dWJiZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcU291cmNlU3R1YmJlclxcRXhjZXB0aW9uXFxDb3VsZE5vdEZpbmRQaHBTdG9ybVN0dWJzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Tb3VyY2VTdHViYmVyL0V4Y2VwdGlvbi9Db3VsZE5vdEZpbmRQaHBTdG9ybVN0dWJzLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFNvdXJjZVN0dWJiZXJcXFBocFN0b3JtU3R1YnNTb3VyY2VTdHViYmVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Tb3VyY2VTdHViYmVyL1BocFN0b3JtU3R1YnNTb3VyY2VTdHViYmVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFNvdXJjZVN0dWJiZXJcXFBocFN0b3JtU3R1YnNcXENhY2hpbmdWaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Tb3VyY2VTdHViYmVyL1BocFN0b3JtU3R1YnMvQ2FjaGluZ1Zpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcU291cmNlU3R1YmJlclxcUmVmbGVjdGlvblNvdXJjZVN0dWJiZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1NvdXJjZVN0dWJiZXIvUmVmbGVjdGlvblNvdXJjZVN0dWJiZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcU291cmNlU3R1YmJlclxcU291cmNlU3R1YmJlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvU291cmNlU3R1YmJlci9Tb3VyY2VTdHViYmVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFNvdXJjZVN0dWJiZXJcXFN0dWJEYXRhJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Tb3VyY2VTdHViYmVyL1N0dWJEYXRhLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXEFic3RyYWN0U291cmNlTG9jYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9BYnN0cmFjdFNvdXJjZUxvY2F0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQWdncmVnYXRlU291cmNlTG9jYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9BZ2dyZWdhdGVTb3VyY2VMb2NhdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXEFub255bW91c0NsYXNzT2JqZWN0U291cmNlTG9jYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9Bbm9ueW1vdXNDbGFzc09iamVjdFNvdXJjZUxvY2F0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQXV0b2xvYWRTb3VyY2VMb2NhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0F1dG9sb2FkU291cmNlTG9jYXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxBdXRvbG9hZFNvdXJjZUxvY2F0b3JcXEZpbGVSZWFkVHJhcFN0cmVhbVdyYXBwZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQXV0b2xvYWRTb3VyY2VMb2NhdG9yL0ZpbGVSZWFkVHJhcFN0cmVhbVdyYXBwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQ2xvc3VyZVNvdXJjZUxvY2F0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ2xvc3VyZVNvdXJjZUxvY2F0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQ29tcG9zZXJTb3VyY2VMb2NhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyU291cmNlTG9jYXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxDb21wb3NlclxcRmFjdG9yeVxcRXhjZXB0aW9uXFxFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvRmFjdG9yeS9FeGNlcHRpb24vRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXENvbXBvc2VyXFxGYWN0b3J5XFxFeGNlcHRpb25cXEZhaWxlZFRvUGFyc2VKc29uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL0ZhY3RvcnkvRXhjZXB0aW9uL0ZhaWxlZFRvUGFyc2VKc29uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXENvbXBvc2VyXFxGYWN0b3J5XFxFeGNlcHRpb25cXEludmFsaWRQcm9qZWN0RGlyZWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL0ZhY3RvcnkvRXhjZXB0aW9uL0ludmFsaWRQcm9qZWN0RGlyZWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXENvbXBvc2VyXFxGYWN0b3J5XFxFeGNlcHRpb25cXE1pc3NpbmdDb21wb3Nlckpzb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvRmFjdG9yeS9FeGNlcHRpb24vTWlzc2luZ0NvbXBvc2VySnNvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxDb21wb3NlclxcRmFjdG9yeVxcRXhjZXB0aW9uXFxNaXNzaW5nSW5zdGFsbGVkSnNvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9Db21wb3Nlci9GYWN0b3J5L0V4Y2VwdGlvbi9NaXNzaW5nSW5zdGFsbGVkSnNvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxDb21wb3NlclxcRmFjdG9yeVxcTWFrZUxvY2F0b3JGb3JDb21wb3Nlckpzb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvRmFjdG9yeS9NYWtlTG9jYXRvckZvckNvbXBvc2VySnNvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxDb21wb3NlclxcRmFjdG9yeVxcTWFrZUxvY2F0b3JGb3JDb21wb3Nlckpzb25BbmRJbnN0YWxsZWRKc29uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL0ZhY3RvcnkvTWFrZUxvY2F0b3JGb3JDb21wb3Nlckpzb25BbmRJbnN0YWxsZWRKc29uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXENvbXBvc2VyXFxGYWN0b3J5XFxNYWtlTG9jYXRvckZvckluc3RhbGxlZEpzb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvRmFjdG9yeS9NYWtlTG9jYXRvckZvckluc3RhbGxlZEpzb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQ29tcG9zZXJcXFBzckF1dG9sb2FkZXJMb2NhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL1BzckF1dG9sb2FkZXJMb2NhdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXENvbXBvc2VyXFxQc3JcXEV4Y2VwdGlvblxcRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL1Bzci9FeGNlcHRpb24vRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXENvbXBvc2VyXFxQc3JcXEV4Y2VwdGlvblxcSW52YWxpZFByZWZpeE1hcHBpbmcnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvUHNyL0V4Y2VwdGlvbi9JbnZhbGlkUHJlZml4TWFwcGluZy5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxDb21wb3NlclxcUHNyXFxQc3IwTWFwcGluZycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9Db21wb3Nlci9Qc3IvUHNyME1hcHBpbmcucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQ29tcG9zZXJcXFBzclxcUHNyNE1hcHBpbmcnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvUHNyL1BzcjRNYXBwaW5nLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXENvbXBvc2VyXFxQc3JcXFBzckF1dG9sb2FkZXJNYXBwaW5nJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL1Bzci9Qc3JBdXRvbG9hZGVyTWFwcGluZy5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxEaXJlY3Rvcmllc1NvdXJjZUxvY2F0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvRGlyZWN0b3JpZXNTb3VyY2VMb2NhdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXEV2YWxlZENvZGVTb3VyY2VMb2NhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0V2YWxlZENvZGVTb3VyY2VMb2NhdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXEZpbGVJdGVyYXRvclNvdXJjZUxvY2F0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvRmlsZUl0ZXJhdG9yU291cmNlTG9jYXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxNZW1vaXppbmdTb3VyY2VMb2NhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL01lbW9pemluZ1NvdXJjZUxvY2F0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcUGhwSW50ZXJuYWxTb3VyY2VMb2NhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL1BocEludGVybmFsU291cmNlTG9jYXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxTaW5nbGVGaWxlU291cmNlTG9jYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9TaW5nbGVGaWxlU291cmNlTG9jYXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxTb3VyY2VMb2NhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL1NvdXJjZUxvY2F0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcU3RyaW5nU291cmNlTG9jYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9TdHJpbmdTb3VyY2VMb2NhdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFV0aWxcXENhbGN1bGF0ZVJlZmxlY3Rpb25Db2x1bW4nID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9VdGlsL0NhbGN1bGF0ZVJlZmxlY3Rpb25Db2x1bW4ucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcVXRpbFxcQ2xhc3NFeGlzdGVuY2VDaGVja2VyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvVXRpbC9DbGFzc0V4aXN0ZW5jZUNoZWNrZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcVXRpbFxcQ29uc3RhbnROb2RlQ2hlY2tlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1V0aWwvQ29uc3RhbnROb2RlQ2hlY2tlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxVdGlsXFxFeGNlcHRpb25cXEludmFsaWROb2RlUG9zaXRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9VdGlsL0V4Y2VwdGlvbi9JbnZhbGlkTm9kZVBvc2l0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFV0aWxcXEV4Y2VwdGlvblxcTm9Ob2RlUG9zaXRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9VdGlsL0V4Y2VwdGlvbi9Ob05vZGVQb3NpdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxVdGlsXFxGaWxlSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvVXRpbC9GaWxlSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFV0aWxcXEZpbmRSZWZsZWN0aW9uT25MaW5lJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvVXRpbC9GaW5kUmVmbGVjdGlvbk9uTGluZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxVdGlsXFxHZXRMYXN0RG9jQ29tbWVudCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1V0aWwvR2V0TGFzdERvY0NvbW1lbnQucGhwJywKICAgICAgICAnUEhQU3RhblxcQnJva2VyXFxBbm9ueW1vdXNDbGFzc05hbWVIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0Jyb2tlci9Bbm9ueW1vdXNDbGFzc05hbWVIZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQnJva2VyXFxCcm9rZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0Jyb2tlci9Ccm9rZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQnJva2VyXFxCcm9rZXJGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ccm9rZXIvQnJva2VyRmFjdG9yeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxCcm9rZXJcXENsYXNzQXV0b2xvYWRpbmdFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0Jyb2tlci9DbGFzc0F1dG9sb2FkaW5nRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEJyb2tlclxcQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQnJva2VyL0NsYXNzTm90Rm91bmRFeGNlcHRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcQnJva2VyXFxDb25zdGFudE5vdEZvdW5kRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ccm9rZXIvQ29uc3RhbnROb3RGb3VuZEV4Y2VwdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxCcm9rZXJcXEZ1bmN0aW9uTm90Rm91bmRFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0Jyb2tlci9GdW5jdGlvbk5vdEZvdW5kRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXENhY2hlXFxDYWNoZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ2FjaGUvQ2FjaGUucGhwJywKICAgICAgICAnUEhQU3RhblxcQ2FjaGVcXENhY2hlSXRlbScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ2FjaGUvQ2FjaGVJdGVtLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXENhY2hlXFxDYWNoZVN0b3JhZ2UnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0NhY2hlL0NhY2hlU3RvcmFnZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxDYWNoZVxcRmlsZUNhY2hlU3RvcmFnZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ2FjaGUvRmlsZUNhY2hlU3RvcmFnZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxDYWNoZVxcTWVtb3J5Q2FjaGVTdG9yYWdlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9DYWNoZS9NZW1vcnlDYWNoZVN0b3JhZ2UucGhwJywKICAgICAgICAnUEhQU3RhblxcQ2xhc3Nlc1xcRm9yYmlkZGVuQ2xhc3NOYW1lRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9DbGFzc2VzL0ZvcmJpZGRlbkNsYXNzTmFtZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb2xsZWN0b3JzXFxDb2xsZWN0ZWREYXRhJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db2xsZWN0b3JzL0NvbGxlY3RlZERhdGEucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29sbGVjdG9yc1xcQ29sbGVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db2xsZWN0b3JzL0NvbGxlY3Rvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb2xsZWN0b3JzXFxSZWdpc3RyeScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ29sbGVjdG9ycy9SZWdpc3RyeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb2xsZWN0b3JzXFxSZWdpc3RyeUZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0NvbGxlY3RvcnMvUmVnaXN0cnlGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXENvbW1hbmRcXEFuYWx5c2VBcHBsaWNhdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ29tbWFuZC9BbmFseXNlQXBwbGljYXRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29tbWFuZFxcQW5hbHlzZUNvbW1hbmQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0NvbW1hbmQvQW5hbHlzZUNvbW1hbmQucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29tbWFuZFxcQW5hbHlzZXJSdW5uZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0NvbW1hbmQvQW5hbHlzZXJSdW5uZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29tbWFuZFxcQW5hbHlzaXNSZXN1bHQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0NvbW1hbmQvQW5hbHlzaXNSZXN1bHQucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29tbWFuZFxcQ2xlYXJSZXN1bHRDYWNoZUNvbW1hbmQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0NvbW1hbmQvQ2xlYXJSZXN1bHRDYWNoZUNvbW1hbmQucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29tbWFuZFxcQ29tbWFuZEhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ29tbWFuZC9Db21tYW5kSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXENvbW1hbmRcXERpYWdub3NlQ29tbWFuZCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ29tbWFuZC9EaWFnbm9zZUNvbW1hbmQucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29tbWFuZFxcRHVtcFBhcmFtZXRlcnNDb21tYW5kJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL0R1bXBQYXJhbWV0ZXJzQ29tbWFuZC5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb21tYW5kXFxFcnJvckZvcm1hdHRlclxcQmFzZWxpbmVOZW9uRXJyb3JGb3JtYXR0ZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvQmFzZWxpbmVOZW9uRXJyb3JGb3JtYXR0ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29tbWFuZFxcRXJyb3JGb3JtYXR0ZXJcXEJhc2VsaW5lUGhwRXJyb3JGb3JtYXR0ZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvQmFzZWxpbmVQaHBFcnJvckZvcm1hdHRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb21tYW5kXFxFcnJvckZvcm1hdHRlclxcQ2hlY2tzdHlsZUVycm9yRm9ybWF0dGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0NoZWNrc3R5bGVFcnJvckZvcm1hdHRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb21tYW5kXFxFcnJvckZvcm1hdHRlclxcQ2lEZXRlY3RlZEVycm9yRm9ybWF0dGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0NpRGV0ZWN0ZWRFcnJvckZvcm1hdHRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb21tYW5kXFxFcnJvckZvcm1hdHRlclxcRXJyb3JGb3JtYXR0ZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvRXJyb3JGb3JtYXR0ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29tbWFuZFxcRXJyb3JGb3JtYXR0ZXJcXEdpdGh1YkVycm9yRm9ybWF0dGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0dpdGh1YkVycm9yRm9ybWF0dGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXENvbW1hbmRcXEVycm9yRm9ybWF0dGVyXFxHaXRsYWJFcnJvckZvcm1hdHRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9HaXRsYWJFcnJvckZvcm1hdHRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb21tYW5kXFxFcnJvckZvcm1hdHRlclxcSnNvbkVycm9yRm9ybWF0dGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0pzb25FcnJvckZvcm1hdHRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb21tYW5kXFxFcnJvckZvcm1hdHRlclxcSnVuaXRFcnJvckZvcm1hdHRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9KdW5pdEVycm9yRm9ybWF0dGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXENvbW1hbmRcXEVycm9yRm9ybWF0dGVyXFxSYXdFcnJvckZvcm1hdHRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9SYXdFcnJvckZvcm1hdHRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb21tYW5kXFxFcnJvckZvcm1hdHRlclxcVGFibGVFcnJvckZvcm1hdHRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9UYWJsZUVycm9yRm9ybWF0dGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXENvbW1hbmRcXEVycm9yRm9ybWF0dGVyXFxUZWFtY2l0eUVycm9yRm9ybWF0dGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL1RlYW1jaXR5RXJyb3JGb3JtYXR0ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29tbWFuZFxcRXJyb3JzQ29uc29sZVN0eWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL0Vycm9yc0NvbnNvbGVTdHlsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb21tYW5kXFxGaXhlckFwcGxpY2F0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL0ZpeGVyQXBwbGljYXRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29tbWFuZFxcRml4ZXJQcm9jZXNzRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL0ZpeGVyUHJvY2Vzc0V4Y2VwdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb21tYW5kXFxGaXhlcldvcmtlckNvbW1hbmQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0NvbW1hbmQvRml4ZXJXb3JrZXJDb21tYW5kLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXENvbW1hbmRcXElnbm9yZWRSZWdleFZhbGlkYXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ29tbWFuZC9JZ25vcmVkUmVnZXhWYWxpZGF0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29tbWFuZFxcSWdub3JlZFJlZ2V4VmFsaWRhdG9yUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL0lnbm9yZWRSZWdleFZhbGlkYXRvclJlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb21tYW5kXFxJbmNlcHRpb25Ob3RTdWNjZXNzZnVsRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL0luY2VwdGlvbk5vdFN1Y2Nlc3NmdWxFeGNlcHRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcQ29tbWFuZFxcSW5jZXB0aW9uUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL0luY2VwdGlvblJlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb21tYW5kXFxPdXRwdXQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0NvbW1hbmQvT3V0cHV0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXENvbW1hbmRcXE91dHB1dFN0eWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL091dHB1dFN0eWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXENvbW1hbmRcXFN5bWZvbnlcXFN5bWZvbnlPdXRwdXQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0NvbW1hbmQvU3ltZm9ueS9TeW1mb255T3V0cHV0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXENvbW1hbmRcXFN5bWZvbnlcXFN5bWZvbnlTdHlsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvQ29tbWFuZC9TeW1mb255L1N5bWZvbnlTdHlsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxDb21tYW5kXFxXb3JrZXJDb21tYW5kJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Db21tYW5kL1dvcmtlckNvbW1hbmQucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcQmxlZWRpbmdFZGdlVG9nZ2xlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0JsZWVkaW5nRWRnZVRvZ2dsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxDb25kaXRpb25hbFRhZ3NFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vQ29uZGl0aW9uYWxUYWdzRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXENvbmZpZ3VyYXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9Db25maWd1cmF0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcQ29udGFpbmVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0NvbnRhaW5lci5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxDb250YWluZXJGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0NvbnRhaW5lckZhY3RvcnkucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcRGVyaXZhdGl2ZUNvbnRhaW5lckZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vRGVyaXZhdGl2ZUNvbnRhaW5lckZhY3RvcnkucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcRHVwbGljYXRlSW5jbHVkZWRGaWxlc0V4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9EdXBsaWNhdGVJbmNsdWRlZEZpbGVzRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXEludmFsaWRFeGNsdWRlUGF0aHNFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vSW52YWxpZEV4Y2x1ZGVQYXRoc0V4Y2VwdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxJbnZhbGlkSWdub3JlZEVycm9yUGF0dGVybnNFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vSW52YWxpZElnbm9yZWRFcnJvclBhdHRlcm5zRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXExvYWRlckZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTG9hZGVyRmFjdG9yeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxNZW1vaXppbmdDb250YWluZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTWVtb2l6aW5nQ29udGFpbmVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXE5lb25BZGFwdGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL05lb25BZGFwdGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXE5lb25Mb2FkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTmVvbkxvYWRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxOZW9uXFxPcHRpb25hbFBhdGgnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTmVvbi9PcHRpb25hbFBhdGgucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcTmV0dGVcXE5ldHRlQ29udGFpbmVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL05ldHRlL05ldHRlQ29udGFpbmVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFBhcmFtZXRlck5vdEZvdW5kRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1BhcmFtZXRlck5vdEZvdW5kRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFBhcmFtZXRlcnNTY2hlbWFFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vUGFyYW1ldGVyc1NjaGVtYUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxQcm9qZWN0Q29uZmlnSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1Byb2plY3RDb25maWdIZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcUmVmbGVjdGlvblxcQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9SZWZsZWN0aW9uL0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcUmVmbGVjdGlvblxcTGF6eUNsYXNzUmVmbGVjdGlvbkV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vUmVmbGVjdGlvbi9MYXp5Q2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxSdWxlc0V4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9SdWxlc0V4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxUeXBlXFxEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcVHlwZVxcRHluYW1pY1Rocm93VHlwZUV4dGVuc2lvblByb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvRHluYW1pY1Rocm93VHlwZUV4dGVuc2lvblByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFR5cGVcXEV4cHJlc3Npb25UeXBlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvRXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcVHlwZVxcTGF6eUR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0xhenlEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcVHlwZVxcTGF6eUR5bmFtaWNUaHJvd1R5cGVFeHRlbnNpb25Qcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0xhenlEeW5hbWljVGhyb3dUeXBlRXh0ZW5zaW9uUHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcVHlwZVxcTGF6eUV4cHJlc3Npb25UeXBlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvTGF6eUV4cHJlc3Npb25UeXBlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFR5cGVcXExhenlPcGVyYXRvclR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0xhenlPcGVyYXRvclR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxUeXBlXFxMYXp5UGFyYW1ldGVyQ2xvc3VyZVR5cGVFeHRlbnNpb25Qcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0xhenlQYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvblByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFR5cGVcXExhenlQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uUHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9MYXp5UGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvblByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFR5cGVcXE9wZXJhdG9yVHlwZVNwZWNpZnlpbmdFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvT3BlcmF0b3JUeXBlU3BlY2lmeWluZ0V4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcVHlwZVxcUGFyYW1ldGVyQ2xvc3VyZVR5cGVFeHRlbnNpb25Qcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL1BhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uUHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcVHlwZVxcUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvblByb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvblByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFZhbGlkYXRlRXhjbHVkZVBhdGhzRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1ZhbGlkYXRlRXhjbHVkZVBhdGhzRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFZhbGlkYXRlSWdub3JlZEVycm9yc0V4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9WYWxpZGF0ZUlnbm9yZWRFcnJvcnNFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRGVwZW5kZW5jeVJlc29sdmVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5L0RlcGVuZGVuY3lSZXNvbHZlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5XFxFeHBvcnRlZE5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZUZldGNoZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlRmV0Y2hlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5XFxFeHBvcnRlZE5vZGVSZXNvbHZlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGVSZXNvbHZlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5XFxFeHBvcnRlZE5vZGVWaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZVZpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlXFxFeHBvcnRlZEF0dHJpYnV0ZU5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkQXR0cmlidXRlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5XFxFeHBvcnRlZE5vZGVcXEV4cG9ydGVkQ2xhc3NDb25zdGFudE5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkQ2xhc3NDb25zdGFudE5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlXFxFeHBvcnRlZENsYXNzQ29uc3RhbnRzTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRDbGFzc0NvbnN0YW50c05vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlXFxFeHBvcnRlZENsYXNzTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRDbGFzc05vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlXFxFeHBvcnRlZEVudW1DYXNlTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRFbnVtQ2FzZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlXFxFeHBvcnRlZEVudW1Ob2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZEVudW1Ob2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRGdW5jdGlvbk5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkRnVuY3Rpb25Ob2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRJbnRlcmZhY2VOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZEludGVyZmFjZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlXFxFeHBvcnRlZE1ldGhvZE5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkTWV0aG9kTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5XFxFeHBvcnRlZE5vZGVcXEV4cG9ydGVkUGFyYW1ldGVyTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRQYXJhbWV0ZXJOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRQaHBEb2NOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZFBocERvY05vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlXFxFeHBvcnRlZFByb3BlcnRpZXNOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZFByb3BlcnRpZXNOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRUcmFpdE5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkVHJhaXROb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRUcmFpdFVzZUFkYXB0YXRpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkVHJhaXRVc2VBZGFwdGF0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXE5vZGVEZXBlbmRlbmNpZXMnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0RlcGVuZGVuY3kvTm9kZURlcGVuZGVuY2llcy5waHAnLAogICAgICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5XFxSb290RXhwb3J0ZWROb2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EZXBlbmRlbmN5L1Jvb3RFeHBvcnRlZE5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcRGlhZ25vc2VcXERpYWdub3NlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EaWFnbm9zZS9EaWFnbm9zZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxEaWFnbm9zZVxcUEhQU3RhbkRpYWdub3NlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9EaWFnbm9zZS9QSFBTdGFuRGlhZ25vc2VFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcRmlsZVxcQ291bGROb3RSZWFkRmlsZUV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRmlsZS9Db3VsZE5vdFJlYWRGaWxlRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEZpbGVcXENvdWxkTm90V3JpdGVGaWxlRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9GaWxlL0NvdWxkTm90V3JpdGVGaWxlRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEZpbGVcXEZpbGVFeGNsdWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRmlsZS9GaWxlRXhjbHVkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcRmlsZVxcRmlsZUV4Y2x1ZGVyRmFjdG9yeScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRmlsZS9GaWxlRXhjbHVkZXJGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEZpbGVcXEZpbGVFeGNsdWRlclJhd0ZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0ZpbGUvRmlsZUV4Y2x1ZGVyUmF3RmFjdG9yeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxGaWxlXFxGaWxlRmluZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9GaWxlL0ZpbGVGaW5kZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcRmlsZVxcRmlsZUZpbmRlclJlc3VsdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRmlsZS9GaWxlRmluZGVyUmVzdWx0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEZpbGVcXEZpbGVIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0ZpbGUvRmlsZUhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxGaWxlXFxGaWxlTW9uaXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRmlsZS9GaWxlTW9uaXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxGaWxlXFxGaWxlTW9uaXRvclJlc3VsdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRmlsZS9GaWxlTW9uaXRvclJlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxGaWxlXFxGaWxlUmVhZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9GaWxlL0ZpbGVSZWFkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcRmlsZVxcRmlsZVdyaXRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRmlsZS9GaWxlV3JpdGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEZpbGVcXEZ1enp5UmVsYXRpdmVQYXRoSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9GaWxlL0Z1enp5UmVsYXRpdmVQYXRoSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEZpbGVcXE51bGxSZWxhdGl2ZVBhdGhIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0ZpbGUvTnVsbFJlbGF0aXZlUGF0aEhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxGaWxlXFxQYXJlbnREaXJlY3RvcnlSZWxhdGl2ZVBhdGhIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0ZpbGUvUGFyZW50RGlyZWN0b3J5UmVsYXRpdmVQYXRoSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEZpbGVcXFBhdGhOb3RGb3VuZEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvRmlsZS9QYXRoTm90Rm91bmRFeGNlcHRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcRmlsZVxcUmVsYXRpdmVQYXRoSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9GaWxlL1JlbGF0aXZlUGF0aEhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxGaWxlXFxTaW1wbGVSZWxhdGl2ZVBhdGhIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL0ZpbGUvU2ltcGxlUmVsYXRpdmVQYXRoSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEZpbGVcXFN5c3RlbUFnbm9zdGljU2ltcGxlUmVsYXRpdmVQYXRoSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9GaWxlL1N5c3RlbUFnbm9zdGljU2ltcGxlUmVsYXRpdmVQYXRoSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEludGVybmFsXFxBZ2VudERldGVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9JbnRlcm5hbC9BZ2VudERldGVjdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEludGVybmFsXFxCeXRlc0hlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvSW50ZXJuYWwvQnl0ZXNIZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcSW50ZXJuYWxcXENvbWJpbmF0aW9uc0hlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvSW50ZXJuYWwvQ29tYmluYXRpb25zSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXEludGVybmFsXFxDb21wb3NlckhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvSW50ZXJuYWwvQ29tcG9zZXJIZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcSW50ZXJuYWxcXENvbnRhaW5lckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9JbnRlcm5hbC9Db250YWluZXJEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxJbnRlcm5hbFxcRGlyZWN0b3J5Q3JlYXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvSW50ZXJuYWwvRGlyZWN0b3J5Q3JlYXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxJbnRlcm5hbFxcRGlyZWN0b3J5Q3JlYXRvckV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvSW50ZXJuYWwvRGlyZWN0b3J5Q3JlYXRvckV4Y2VwdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxJbnRlcm5hbFxcU3ByaW50ZkhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvSW50ZXJuYWwvU3ByaW50ZkhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxBbm9ueW1vdXNDbGFzc05vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvQW5vbnltb3VzQ2xhc3NOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEJvb2xlYW5BbmROb2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0Jvb2xlYW5BbmROb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEJvb2xlYW5Pck5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvQm9vbGVhbk9yTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxCcmVha2xlc3NXaGlsZUxvb3BOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0JyZWFrbGVzc1doaWxlTG9vcE5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcQ2F0Y2hXaXRoVW50aHJvd25FeGNlcHRpb25Ob2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0NhdGNoV2l0aFVudGhyb3duRXhjZXB0aW9uTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxDbGFzc0NvbnN0YW50c05vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvQ2xhc3NDb25zdGFudHNOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXENsYXNzTWV0aG9kJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0NsYXNzTWV0aG9kLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXENsYXNzTWV0aG9kc05vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvQ2xhc3NNZXRob2RzTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxDbGFzc1Byb3BlcnRpZXNOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0NsYXNzUHJvcGVydGllc05vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcQ2xhc3NQcm9wZXJ0eU5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvQ2xhc3NQcm9wZXJ0eU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcQ2xhc3NTdGF0ZW1lbnRzR2F0aGVyZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvQ2xhc3NTdGF0ZW1lbnRzR2F0aGVyZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcQ2xvc3VyZVJldHVyblN0YXRlbWVudHNOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0Nsb3N1cmVSZXR1cm5TdGF0ZW1lbnRzTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxDb2xsZWN0ZWREYXRhTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9Db2xsZWN0ZWREYXRhTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxDb25zdGFudFxcQ2xhc3NDb25zdGFudEZldGNoJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0NvbnN0YW50L0NsYXNzQ29uc3RhbnRGZXRjaC5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxEb1doaWxlTG9vcENvbmRpdGlvbk5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvRG9XaGlsZUxvb3BDb25kaXRpb25Ob2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEV4ZWN1dGlvbkVuZE5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvRXhlY3V0aW9uRW5kTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxFeHByXFxBbHdheXNSZW1lbWJlcmVkRXhwcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9FeHByL0Fsd2F5c1JlbWVtYmVyZWRFeHByLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEV4cHJcXEV4aXN0aW5nQXJyYXlEaW1GZXRjaCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9FeHByL0V4aXN0aW5nQXJyYXlEaW1GZXRjaC5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxFeHByXFxHZXRJdGVyYWJsZUtleVR5cGVFeHByJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0V4cHIvR2V0SXRlcmFibGVLZXlUeXBlRXhwci5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxFeHByXFxHZXRJdGVyYWJsZVZhbHVlVHlwZUV4cHInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvRXhwci9HZXRJdGVyYWJsZVZhbHVlVHlwZUV4cHIucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcRXhwclxcR2V0T2Zmc2V0VmFsdWVUeXBlRXhwcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9FeHByL0dldE9mZnNldFZhbHVlVHlwZUV4cHIucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcRXhwclxcT3JpZ2luYWxQcm9wZXJ0eVR5cGVFeHByJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0V4cHIvT3JpZ2luYWxQcm9wZXJ0eVR5cGVFeHByLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEV4cHJcXFBhcmFtZXRlclZhcmlhYmxlT3JpZ2luYWxWYWx1ZUV4cHInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvRXhwci9QYXJhbWV0ZXJWYXJpYWJsZU9yaWdpbmFsVmFsdWVFeHByLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEV4cHJcXFByb3BlcnR5SW5pdGlhbGl6YXRpb25FeHByJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0V4cHIvUHJvcGVydHlJbml0aWFsaXphdGlvbkV4cHIucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcRXhwclxcU2V0RXhpc3RpbmdPZmZzZXRWYWx1ZVR5cGVFeHByJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0V4cHIvU2V0RXhpc3RpbmdPZmZzZXRWYWx1ZVR5cGVFeHByLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEV4cHJcXFNldE9mZnNldFZhbHVlVHlwZUV4cHInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvRXhwci9TZXRPZmZzZXRWYWx1ZVR5cGVFeHByLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEV4cHJcXFR5cGVFeHByJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0V4cHIvVHlwZUV4cHIucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcRXhwclxcVW5zZXRPZmZzZXRFeHByJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0V4cHIvVW5zZXRPZmZzZXRFeHByLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEZpbGVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0ZpbGVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEZpbmFsbHlFeGl0UG9pbnRzTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9GaW5hbGx5RXhpdFBvaW50c05vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcRnVuY3Rpb25DYWxsYWJsZU5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvRnVuY3Rpb25DYWxsYWJsZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnRzTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9GdW5jdGlvblJldHVyblN0YXRlbWVudHNOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEluQXJyb3dGdW5jdGlvbk5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvSW5BcnJvd0Z1bmN0aW9uTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxJbkNsYXNzTWV0aG9kTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9JbkNsYXNzTWV0aG9kTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxJbkNsYXNzTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9JbkNsYXNzTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxJbkNsb3N1cmVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0luQ2xvc3VyZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcSW5Gb3JlYWNoTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9JbkZvcmVhY2hOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEluRnVuY3Rpb25Ob2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0luRnVuY3Rpb25Ob2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEluVHJhaXROb2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL0luVHJhaXROb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXEluc3RhbnRpYXRpb25DYWxsYWJsZU5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvSW5zdGFudGlhdGlvbkNhbGxhYmxlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxJbnZhbGlkYXRlRXhwck5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvSW52YWxpZGF0ZUV4cHJOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXElzc2V0RXhwcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9Jc3NldEV4cHIucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcTGl0ZXJhbEFycmF5SXRlbScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9MaXRlcmFsQXJyYXlJdGVtLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXExpdGVyYWxBcnJheU5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvTGl0ZXJhbEFycmF5Tm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxNYXRjaEV4cHJlc3Npb25Bcm0nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvTWF0Y2hFeHByZXNzaW9uQXJtLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXE1hdGNoRXhwcmVzc2lvbkFybUJvZHknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvTWF0Y2hFeHByZXNzaW9uQXJtQm9keS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxNYXRjaEV4cHJlc3Npb25Bcm1Db25kaXRpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvTWF0Y2hFeHByZXNzaW9uQXJtQ29uZGl0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXE1hdGNoRXhwcmVzc2lvbk5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvTWF0Y2hFeHByZXNzaW9uTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxNZXRob2RDYWxsYWJsZU5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvTWV0aG9kQ2FsbGFibGVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXE1ldGhvZFJldHVyblN0YXRlbWVudHNOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL01ldGhvZFJldHVyblN0YXRlbWVudHNOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXE1ldGhvZFxcTWV0aG9kQ2FsbCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9NZXRob2QvTWV0aG9kQ2FsbC5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxOb29wRXhwcmVzc2lvbk5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvTm9vcEV4cHJlc3Npb25Ob2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXFByaW50ZXJcXEV4cHJQcmludGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL1ByaW50ZXIvRXhwclByaW50ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcUHJpbnRlclxcTm9kZVR5cGVQcmludGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL1ByaW50ZXIvTm9kZVR5cGVQcmludGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXFByaW50ZXJcXFByaW50ZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvUHJpbnRlci9QcmludGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXFByb3BlcnR5QXNzaWduTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9Qcm9wZXJ0eUFzc2lnbk5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcUHJvcGVydHlcXFByb3BlcnR5QXNzaWduJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL1Byb3BlcnR5L1Byb3BlcnR5QXNzaWduLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXFByb3BlcnR5XFxQcm9wZXJ0eVJlYWQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvUHJvcGVydHkvUHJvcGVydHlSZWFkLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXFByb3BlcnR5XFxQcm9wZXJ0eVdyaXRlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL1Byb3BlcnR5L1Byb3BlcnR5V3JpdGUucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcUmV0dXJuU3RhdGVtZW50JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Ob2RlL1JldHVyblN0YXRlbWVudC5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxSZXR1cm5TdGF0ZW1lbnRzTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9SZXR1cm5TdGF0ZW1lbnRzTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxOb2RlXFxTdGF0aWNNZXRob2RDYWxsYWJsZU5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvU3RhdGljTWV0aG9kQ2FsbGFibGVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXFVucmVhY2hhYmxlU3RhdGVtZW50Tm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9VbnJlYWNoYWJsZVN0YXRlbWVudE5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcVmFyVGFnQ2hhbmdlZEV4cHJlc3Npb25UeXBlTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9WYXJUYWdDaGFuZ2VkRXhwcmVzc2lvblR5cGVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXE5vZGVcXFZhcmlhYmxlQXNzaWduTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvTm9kZS9WYXJpYWJsZUFzc2lnbk5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcTm9kZVxcVmlydHVhbE5vZGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL05vZGUvVmlydHVhbE5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyYWxsZWxcXFBhcmFsbGVsQW5hbHlzZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcmFsbGVsL1BhcmFsbGVsQW5hbHlzZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyYWxsZWxcXFByb2Nlc3MnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcmFsbGVsL1Byb2Nlc3MucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyYWxsZWxcXFByb2Nlc3NQb29sJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJhbGxlbC9Qcm9jZXNzUG9vbC5waHAnLAogICAgICAgICdQSFBTdGFuXFxQYXJhbGxlbFxcUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJhbGxlbC9Qcm9jZXNzVGltZWRPdXRFeGNlcHRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyYWxsZWxcXFNjaGVkdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJhbGxlbC9TY2hlZHVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQYXJhbGxlbFxcU2NoZWR1bGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJhbGxlbC9TY2hlZHVsZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyc2VyXFxBbm9ueW1vdXNDbGFzc1Zpc2l0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcnNlci9Bbm9ueW1vdXNDbGFzc1Zpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyc2VyXFxBcnJheUZpbHRlckFyZ1Zpc2l0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcnNlci9BcnJheUZpbHRlckFyZ1Zpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyc2VyXFxBcnJheUZpbmRBcmdWaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJzZXIvQXJyYXlGaW5kQXJnVmlzaXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQYXJzZXJcXEFycmF5TWFwQXJnVmlzaXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGFyc2VyL0FycmF5TWFwQXJnVmlzaXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQYXJzZXJcXEFycmF5V2Fsa0FyZ1Zpc2l0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcnNlci9BcnJheVdhbGtBcmdWaXNpdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBhcnNlclxcQXJyb3dGdW5jdGlvbkFyZ1Zpc2l0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcnNlci9BcnJvd0Z1bmN0aW9uQXJnVmlzaXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQYXJzZXJcXENhY2hlZFBhcnNlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGFyc2VyL0NhY2hlZFBhcnNlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQYXJzZXJcXENsZWFuaW5nUGFyc2VyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJzZXIvQ2xlYW5pbmdQYXJzZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyc2VyXFxDbGVhbmluZ1Zpc2l0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcnNlci9DbGVhbmluZ1Zpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyc2VyXFxDbG9zdXJlQXJnVmlzaXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGFyc2VyL0Nsb3N1cmVBcmdWaXNpdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBhcnNlclxcQ2xvc3VyZUJpbmRBcmdWaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJzZXIvQ2xvc3VyZUJpbmRBcmdWaXNpdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBhcnNlclxcQ2xvc3VyZUJpbmRUb1ZhclZpc2l0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcnNlci9DbG9zdXJlQmluZFRvVmFyVmlzaXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQYXJzZXJcXEN1cmxTZXRPcHRBcmdWaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJzZXIvQ3VybFNldE9wdEFyZ1Zpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyc2VyXFxEZWNsYXJlUG9zaXRpb25WaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJzZXIvRGVjbGFyZVBvc2l0aW9uVmlzaXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQYXJzZXJcXEZ1bmN0aW9uQ2FsbFN0YXRlbWVudEZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGFyc2VyL0Z1bmN0aW9uQ2FsbFN0YXRlbWVudEZpbmRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQYXJzZXJcXEltbWVkaWF0ZWx5SW52b2tlZENsb3N1cmVWaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJzZXIvSW1tZWRpYXRlbHlJbnZva2VkQ2xvc3VyZVZpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyc2VyXFxMYXN0Q29uZGl0aW9uVmlzaXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGFyc2VyL0xhc3RDb25kaXRpb25WaXNpdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBhcnNlclxcTGV4ZXJGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJzZXIvTGV4ZXJGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBhcnNlclxcTWFnaWNDb25zdGFudFBhcmFtRGVmYXVsdFZpc2l0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcnNlci9NYWdpY0NvbnN0YW50UGFyYW1EZWZhdWx0VmlzaXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQYXJzZXJcXE5ld0Fzc2lnbmVkVG9Qcm9wZXJ0eVZpc2l0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcnNlci9OZXdBc3NpZ25lZFRvUHJvcGVydHlWaXNpdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBhcnNlclxcUGFyZW50U3RtdFR5cGVzVmlzaXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGFyc2VyL1BhcmVudFN0bXRUeXBlc1Zpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyc2VyXFxQYXJzZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcnNlci9QYXJzZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyc2VyXFxQYXJzZXJFcnJvcnNFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcnNlci9QYXJzZXJFcnJvcnNFeGNlcHRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyc2VyXFxQYXRoUm91dGluZ1BhcnNlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGFyc2VyL1BhdGhSb3V0aW5nUGFyc2VyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBhcnNlclxcUGhwUGFyc2VyRGVjb3JhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJzZXIvUGhwUGFyc2VyRGVjb3JhdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBhcnNlclxcUmVtb3ZlVW51c2VkQ29kZUJ5UGhwVmVyc2lvbklkVmlzaXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGFyc2VyL1JlbW92ZVVudXNlZENvZGVCeVBocFZlcnNpb25JZFZpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyc2VyXFxSaWNoUGFyc2VyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QYXJzZXIvUmljaFBhcnNlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQYXJzZXJcXFNpbXBsZVBhcnNlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGFyc2VyL1NpbXBsZVBhcnNlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQYXJzZXJcXFRyYWl0Q29sbGVjdGluZ1Zpc2l0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcnNlci9UcmFpdENvbGxlY3RpbmdWaXNpdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBhcnNlclxcVHJ5Q2F0Y2hUeXBlVmlzaXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGFyc2VyL1RyeUNhdGNoVHlwZVZpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUGFyc2VyXFxUeXBlVHJhdmVyc2VySW5zdGFuY2VvZlZpc2l0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BhcnNlci9UeXBlVHJhdmVyc2VySW5zdGFuY2VvZlZpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwOFN0dWJzTWFwJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwLTgtc3R1YnMvUGhwOFN0dWJzTWFwLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxBYnN0cmFjdE5vZGVWaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0Fic3RyYWN0Tm9kZVZpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXEF0dHJpYnV0ZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9BdHRyaWJ1dGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXENvbnN0RXhwclxcQ29uc3RFeHByQXJyYXlJdGVtTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvQ29uc3RFeHByQXJyYXlJdGVtTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcQ29uc3RFeHByXFxDb25zdEV4cHJBcnJheU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwckFycmF5Tm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcQ29uc3RFeHByXFxDb25zdEV4cHJGYWxzZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwckZhbHNlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcQ29uc3RFeHByXFxDb25zdEV4cHJGbG9hdE5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwckZsb2F0Tm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcQ29uc3RFeHByXFxDb25zdEV4cHJJbnRlZ2VyTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvQ29uc3RFeHBySW50ZWdlck5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXENvbnN0RXhwclxcQ29uc3RFeHByTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvQ29uc3RFeHByTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcQ29uc3RFeHByXFxDb25zdEV4cHJOdWxsTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvQ29uc3RFeHByTnVsbE5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXENvbnN0RXhwclxcQ29uc3RFeHByU3RyaW5nTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvQ29uc3RFeHByU3RyaW5nTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcQ29uc3RFeHByXFxDb25zdEV4cHJUcnVlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvQ29uc3RFeHByVHJ1ZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXENvbnN0RXhwclxcQ29uc3RGZXRjaE5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RmV0Y2hOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxDb25zdEV4cHJcXERvY3RyaW5lQ29uc3RFeHByU3RyaW5nTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvRG9jdHJpbmVDb25zdEV4cHJTdHJpbmdOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxDb25zdEV4cHJcXFF1b3RlQXdhcmVDb25zdEV4cHJTdHJpbmdOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9RdW90ZUF3YXJlQ29uc3RFeHByU3RyaW5nTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Ob2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxOb2RlQXR0cmlidXRlcycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Ob2RlQXR0cmlidXRlcy5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcTm9kZVRyYXZlcnNlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Ob2RlVHJhdmVyc2VyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxOb2RlVmlzaXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Ob2RlVmlzaXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcTm9kZVZpc2l0b3JcXENsb25pbmdWaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L05vZGVWaXNpdG9yL0Nsb25pbmdWaXNpdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXEFzc2VydFRhZ01ldGhvZFZhbHVlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvQXNzZXJ0VGFnTWV0aG9kVmFsdWVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXEFzc2VydFRhZ1Byb3BlcnR5VmFsdWVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9Bc3NlcnRUYWdQcm9wZXJ0eVZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxBc3NlcnRUYWdWYWx1ZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0Fzc2VydFRhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxEZXByZWNhdGVkVGFnVmFsdWVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9EZXByZWNhdGVkVGFnVmFsdWVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXERvY3RyaW5lXFxEb2N0cmluZUFubm90YXRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0RvY3RyaW5lL0RvY3RyaW5lQW5ub3RhdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxEb2N0cmluZVxcRG9jdHJpbmVBcmd1bWVudCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvRG9jdHJpbmUvRG9jdHJpbmVBcmd1bWVudC5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxEb2N0cmluZVxcRG9jdHJpbmVBcnJheScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvRG9jdHJpbmUvRG9jdHJpbmVBcnJheS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxEb2N0cmluZVxcRG9jdHJpbmVBcnJheUl0ZW0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0RvY3RyaW5lL0RvY3RyaW5lQXJyYXlJdGVtLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXERvY3RyaW5lXFxEb2N0cmluZVRhZ1ZhbHVlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvRG9jdHJpbmUvRG9jdHJpbmVUYWdWYWx1ZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcRXh0ZW5kc1RhZ1ZhbHVlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvRXh0ZW5kc1RhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxHZW5lcmljVGFnVmFsdWVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9HZW5lcmljVGFnVmFsdWVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXEltcGxlbWVudHNUYWdWYWx1ZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0ltcGxlbWVudHNUYWdWYWx1ZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcSW52YWxpZFRhZ1ZhbHVlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvSW52YWxpZFRhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxNZXRob2RUYWdWYWx1ZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL01ldGhvZFRhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxNZXRob2RUYWdWYWx1ZVBhcmFtZXRlck5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL01ldGhvZFRhZ1ZhbHVlUGFyYW1ldGVyTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxNaXhpblRhZ1ZhbHVlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvTWl4aW5UYWdWYWx1ZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcUGFyYW1DbG9zdXJlVGhpc1RhZ1ZhbHVlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUGFyYW1DbG9zdXJlVGhpc1RhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxQYXJhbUltbWVkaWF0ZWx5SW52b2tlZENhbGxhYmxlVGFnVmFsdWVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QYXJhbUltbWVkaWF0ZWx5SW52b2tlZENhbGxhYmxlVGFnVmFsdWVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFBhcmFtTGF0ZXJJbnZva2VkQ2FsbGFibGVUYWdWYWx1ZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BhcmFtTGF0ZXJJbnZva2VkQ2FsbGFibGVUYWdWYWx1ZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcUGFyYW1PdXRUYWdWYWx1ZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BhcmFtT3V0VGFnVmFsdWVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFBhcmFtVGFnVmFsdWVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QYXJhbVRhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxQaHBEb2NDaGlsZE5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BocERvY0NoaWxkTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxQaHBEb2NOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QaHBEb2NOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFBocERvY1RhZ05vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BocERvY1RhZ05vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcUGhwRG9jVGFnVmFsdWVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QaHBEb2NUYWdWYWx1ZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcUGhwRG9jVGV4dE5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BocERvY1RleHROb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFByb3BlcnR5VGFnVmFsdWVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9Qcm9wZXJ0eVRhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxQdXJlVW5sZXNzQ2FsbGFibGVJc0ltcHVyZVRhZ1ZhbHVlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUHVyZVVubGVzc0NhbGxhYmxlSXNJbXB1cmVUYWdWYWx1ZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcUmVxdWlyZUV4dGVuZHNUYWdWYWx1ZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1JlcXVpcmVFeHRlbmRzVGFnVmFsdWVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFJlcXVpcmVJbXBsZW1lbnRzVGFnVmFsdWVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9SZXF1aXJlSW1wbGVtZW50c1RhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxSZXR1cm5UYWdWYWx1ZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1JldHVyblRhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxTZWxmT3V0VGFnVmFsdWVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9TZWxmT3V0VGFnVmFsdWVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFRlbXBsYXRlVGFnVmFsdWVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9UZW1wbGF0ZVRhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxUaHJvd3NUYWdWYWx1ZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1Rocm93c1RhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxUeXBlQWxpYXNJbXBvcnRUYWdWYWx1ZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1R5cGVBbGlhc0ltcG9ydFRhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxUeXBlQWxpYXNUYWdWYWx1ZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1R5cGVBbGlhc1RhZ1ZhbHVlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxUeXBlbGVzc1BhcmFtVGFnVmFsdWVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9UeXBlbGVzc1BhcmFtVGFnVmFsdWVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFVzZXNUYWdWYWx1ZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1VzZXNUYWdWYWx1ZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcVmFyVGFnVmFsdWVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9WYXJUYWdWYWx1ZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXEFycmF5U2hhcGVJdGVtTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0FycmF5U2hhcGVJdGVtTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcQXJyYXlTaGFwZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9BcnJheVNoYXBlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcQXJyYXlTaGFwZVVuc2VhbGVkVHlwZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9BcnJheVNoYXBlVW5zZWFsZWRUeXBlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcQXJyYXlUeXBlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0FycmF5VHlwZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXENhbGxhYmxlVHlwZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9DYWxsYWJsZVR5cGVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxUeXBlXFxDYWxsYWJsZVR5cGVQYXJhbWV0ZXJOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvQ2FsbGFibGVUeXBlUGFyYW1ldGVyTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcQ29uZGl0aW9uYWxUeXBlRm9yUGFyYW1ldGVyTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0NvbmRpdGlvbmFsVHlwZUZvclBhcmFtZXRlck5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXENvbmRpdGlvbmFsVHlwZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9Db25kaXRpb25hbFR5cGVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxUeXBlXFxDb25zdFR5cGVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvQ29uc3RUeXBlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcR2VuZXJpY1R5cGVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvR2VuZXJpY1R5cGVOb2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxUeXBlXFxJZGVudGlmaWVyVHlwZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9JZGVudGlmaWVyVHlwZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXEludGVyc2VjdGlvblR5cGVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvSW50ZXJzZWN0aW9uVHlwZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXEludmFsaWRUeXBlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0ludmFsaWRUeXBlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcTnVsbGFibGVUeXBlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL051bGxhYmxlVHlwZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXE9iamVjdFNoYXBlSXRlbU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9PYmplY3RTaGFwZUl0ZW1Ob2RlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxUeXBlXFxPYmplY3RTaGFwZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9PYmplY3RTaGFwZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXE9mZnNldEFjY2Vzc1R5cGVOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvT2Zmc2V0QWNjZXNzVHlwZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXFRoaXNUeXBlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL1RoaXNUeXBlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcVHlwZU5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9UeXBlTm9kZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcVW5pb25UeXBlTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL1VuaW9uVHlwZU5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxMZXhlclxcTGV4ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9MZXhlci9MZXhlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXFBhcnNlclxcQ29uc3RFeHByUGFyc2VyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvUGFyc2VyL0NvbnN0RXhwclBhcnNlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXFBhcnNlclxcUGFyc2VyRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvUGFyc2VyL1BhcnNlckV4Y2VwdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXFBhcnNlclxcUGhwRG9jUGFyc2VyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvUGFyc2VyL1BocERvY1BhcnNlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXFBhcnNlclxcU3RyaW5nVW5lc2NhcGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvUGFyc2VyL1N0cmluZ1VuZXNjYXBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXFBhcnNlclxcVG9rZW5JdGVyYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9Ub2tlbkl0ZXJhdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcUGFyc2VyXFxUeXBlUGFyc2VyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvUGFyc2VyL1R5cGVQYXJzZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxQcmludGVyXFxEaWZmRWxlbScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1ByaW50ZXIvRGlmZkVsZW0ucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxQcmludGVyXFxEaWZmZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9QcmludGVyL0RpZmZlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXFByaW50ZXJcXFByaW50ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9QcmludGVyL1ByaW50ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxDb25zdEV4cHJOb2RlUmVzb2x2ZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9Db25zdEV4cHJOb2RlUmVzb2x2ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxDb25zdEV4cHJQYXJzZXJGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvQ29uc3RFeHByUGFyc2VyRmFjdG9yeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NcXENvdW50YWJsZVN0dWJGaWxlc0V4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL0NvdW50YWJsZVN0dWJGaWxlc0V4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NcXERlZmF1bHRTdHViRmlsZXNQcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL0RlZmF1bHRTdHViRmlsZXNQcm92aWRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NcXERpcmVjdFR5cGVOb2RlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvRGlyZWN0VHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxKc29uVmFsaWRhdGVTdHViRmlsZXNFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9Kc29uVmFsaWRhdGVTdHViRmlsZXNFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxMYXp5VHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9MYXp5VHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxOYW1lU2NvcGVBbHJlYWR5QmVpbmdDcmVhdGVkRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvTmFtZVNjb3BlQWxyZWFkeUJlaW5nQ3JlYXRlZEV4Y2VwdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NcXFBocERvY0Jsb2NrJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvUGhwRG9jQmxvY2sucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxQaHBEb2NJbmhlcml0YW5jZVJlc29sdmVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvUGhwRG9jSW5oZXJpdGFuY2VSZXNvbHZlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NcXFBocERvY05vZGVSZXNvbHZlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1BocERvY05vZGVSZXNvbHZlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NcXFBocERvY1N0cmluZ1Jlc29sdmVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvUGhwRG9jU3RyaW5nUmVzb2x2ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxSZWZsZWN0aW9uRW51bVN0dWJGaWxlc0V4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1JlZmxlY3Rpb25FbnVtU3R1YkZpbGVzRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcUmVzb2x2ZWRQaHBEb2NCbG9jaycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1Jlc29sdmVkUGhwRG9jQmxvY2sucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxTb2NrZXRTZWxlY3RTdHViRmlsZXNFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9Tb2NrZXRTZWxlY3RTdHViRmlsZXNFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxTdHViRmlsZXNFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9TdHViRmlsZXNFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxTdHViRmlsZXNQcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1N0dWJGaWxlc1Byb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcU3R1YlBocERvY1Byb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvU3R1YlBocERvY1Byb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcU3R1YlNvdXJjZUxvY2F0b3JGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvU3R1YlNvdXJjZUxvY2F0b3JGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcU3R1YlZhbGlkYXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1N0dWJWYWxpZGF0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXEFzc2VydFRhZycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1RhZy9Bc3NlcnRUYWcucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXEFzc2VydFRhZ1BhcmFtZXRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1RhZy9Bc3NlcnRUYWdQYXJhbWV0ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXERlcHJlY2F0ZWRUYWcnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9UYWcvRGVwcmVjYXRlZFRhZy5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NcXFRhZ1xcRXh0ZW5kc1RhZycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1RhZy9FeHRlbmRzVGFnLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxJbXBsZW1lbnRzVGFnJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvVGFnL0ltcGxlbWVudHNUYWcucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXE1ldGhvZFRhZycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1RhZy9NZXRob2RUYWcucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXE1ldGhvZFRhZ1BhcmFtZXRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1RhZy9NZXRob2RUYWdQYXJhbWV0ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXE1peGluVGFnJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvVGFnL01peGluVGFnLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxQYXJhbUNsb3N1cmVUaGlzVGFnJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvVGFnL1BhcmFtQ2xvc3VyZVRoaXNUYWcucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXFBhcmFtT3V0VGFnJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvVGFnL1BhcmFtT3V0VGFnLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxQYXJhbVRhZycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1RhZy9QYXJhbVRhZy5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NcXFRhZ1xcUHJvcGVydHlUYWcnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9UYWcvUHJvcGVydHlUYWcucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXFJlcXVpcmVFeHRlbmRzVGFnJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvVGFnL1JlcXVpcmVFeHRlbmRzVGFnLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxSZXF1aXJlSW1wbGVtZW50c1RhZycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1RhZy9SZXF1aXJlSW1wbGVtZW50c1RhZy5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NcXFRhZ1xcUmV0dXJuVGFnJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvVGFnL1JldHVyblRhZy5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NcXFRhZ1xcU2VsZk91dFR5cGVUYWcnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9UYWcvU2VsZk91dFR5cGVUYWcucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXFRlbXBsYXRlVGFnJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvVGFnL1RlbXBsYXRlVGFnLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxUaHJvd3NUYWcnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9UYWcvVGhyb3dzVGFnLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxUeXBlQWxpYXNJbXBvcnRUYWcnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9UYWcvVHlwZUFsaWFzSW1wb3J0VGFnLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxUeXBlQWxpYXNUYWcnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9UYWcvVHlwZUFsaWFzVGFnLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxUeXBlZFRhZycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1RhZy9UeXBlZFRhZy5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NcXFRhZ1xcVXNlc1RhZycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1RhZy9Vc2VzVGFnLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxWYXJUYWcnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9UYWcvVmFyVGFnLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcVHlwZU5vZGVSZXNvbHZlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1R5cGVOb2RlUmVzb2x2ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUeXBlTm9kZVJlc29sdmVyQXdhcmVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9UeXBlTm9kZVJlc29sdmVyQXdhcmVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvVHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxQaHBEb2NcXFR5cGVOb2RlUmVzb2x2ZXJFeHRlbnNpb25Bd2FyZVJlZ2lzdHJ5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvVHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvbkF3YXJlUmVnaXN0cnkucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1BocERvYy9UeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnkucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwRG9jXFxUeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwRG9jL1R5cGVOb2RlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocERvY1xcVHlwZVN0cmluZ1Jlc29sdmVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHBEb2MvVHlwZVN0cmluZ1Jlc29sdmVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocFxcUGhwVmVyc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwL1BocFZlcnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUGhwXFxQaHBWZXJzaW9uRmFjdG9yeScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUGhwL1BocFZlcnNpb25GYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFBocFxcUGhwVmVyc2lvbkZhY3RvcnlGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9QaHAvUGhwVmVyc2lvbkZhY3RvcnlGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFByb2Nlc3NcXENwdUNvcmVDb3VudGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Qcm9jZXNzL0NwdUNvcmVDb3VudGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFByb2Nlc3NcXFByb2Nlc3NDYW5jZWxlZEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUHJvY2Vzcy9Qcm9jZXNzQ2FuY2VsZWRFeGNlcHRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUHJvY2Vzc1xcUHJvY2Vzc0NyYXNoZWRFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1Byb2Nlc3MvUHJvY2Vzc0NyYXNoZWRFeGNlcHRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUHJvY2Vzc1xcUHJvY2Vzc0hlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUHJvY2Vzcy9Qcm9jZXNzSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFByb2Nlc3NcXFByb2Nlc3NQcm9taXNlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9Qcm9jZXNzL1Byb2Nlc3NQcm9taXNlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEFkZGl0aW9uYWxDb25zdHJ1Y3RvcnNFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQWRkaXRpb25hbENvbnN0cnVjdG9yc0V4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxBbGxvd2VkU3ViVHlwZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQWxsb3dlZFN1YlR5cGVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEFubm90YXRpb25zXFxBbm5vdGF0aW9uTWV0aG9kUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9Bbm5vdGF0aW9ucy9Bbm5vdGF0aW9uTWV0aG9kUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxBbm5vdGF0aW9uc1xcQW5ub3RhdGlvblByb3BlcnR5UmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9Bbm5vdGF0aW9ucy9Bbm5vdGF0aW9uUHJvcGVydHlSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEFubm90YXRpb25zXFxBbm5vdGF0aW9uc01ldGhvZFBhcmFtZXRlclJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQW5ub3RhdGlvbnMvQW5ub3RhdGlvbnNNZXRob2RQYXJhbWV0ZXJSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEFubm90YXRpb25zXFxBbm5vdGF0aW9uc01ldGhvZHNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQW5ub3RhdGlvbnMvQW5ub3RhdGlvbnNNZXRob2RzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEFubm90YXRpb25zXFxBbm5vdGF0aW9uc1Byb3BlcnRpZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQW5ub3RhdGlvbnMvQW5ub3RhdGlvbnNQcm9wZXJ0aWVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEFzc2VydGlvbnMnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQXNzZXJ0aW9ucy5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uUHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uUHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblByb3ZpZGVyRmFjdG9yeScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb25Qcm92aWRlckZhY3RvcnkucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblNvdXJjZUxvY2F0b3JGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvblNvdXJjZUxvY2F0b3JGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3RvclxcTWVtb2l6aW5nUmVmbGVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vUmVmbGVjdG9yL01lbW9pemluZ1JlZmxlY3Rvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxBdXRvbG9hZEZ1bmN0aW9uc1NvdXJjZUxvY2F0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL0F1dG9sb2FkRnVuY3Rpb25zU291cmNlTG9jYXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxBdXRvbG9hZFNvdXJjZUxvY2F0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL0F1dG9sb2FkU291cmNlTG9jYXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxDYWNoaW5nVmlzaXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvQ2FjaGluZ1Zpc2l0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcQ29tcG9zZXJKc29uQW5kSW5zdGFsbGVkSnNvblNvdXJjZUxvY2F0b3JNYWtlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvQ29tcG9zZXJKc29uQW5kSW5zdGFsbGVkSnNvblNvdXJjZUxvY2F0b3JNYWtlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxGZXRjaGVkTm9kZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvRmV0Y2hlZE5vZGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcRmV0Y2hlZE5vZGVzUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9GZXRjaGVkTm9kZXNSZXN1bHQucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcRmlsZU5vZGVzRmV0Y2hlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvRmlsZU5vZGVzRmV0Y2hlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxGaWxlUmVhZFRyYXBTdHJlYW1XcmFwcGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9GaWxlUmVhZFRyYXBTdHJlYW1XcmFwcGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXE5ld09wdGltaXplZERpcmVjdG9yeVNvdXJjZUxvY2F0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL05ld09wdGltaXplZERpcmVjdG9yeVNvdXJjZUxvY2F0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcT3B0aW1pemVkRGlyZWN0b3J5U291cmNlTG9jYXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvT3B0aW1pemVkRGlyZWN0b3J5U291cmNlTG9jYXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxPcHRpbWl6ZWREaXJlY3RvcnlTb3VyY2VMb2NhdG9yRmFjdG9yeScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvT3B0aW1pemVkRGlyZWN0b3J5U291cmNlTG9jYXRvckZhY3RvcnkucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcT3B0aW1pemVkRGlyZWN0b3J5U291cmNlTG9jYXRvclJlcG9zaXRvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL09wdGltaXplZERpcmVjdG9yeVNvdXJjZUxvY2F0b3JSZXBvc2l0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXE9wdGltaXplZFBzckF1dG9sb2FkZXJMb2NhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRQc3JBdXRvbG9hZGVyTG9jYXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxPcHRpbWl6ZWRQc3JBdXRvbG9hZGVyTG9jYXRvckZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL09wdGltaXplZFBzckF1dG9sb2FkZXJMb2NhdG9yRmFjdG9yeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxPcHRpbWl6ZWRTaW5nbGVGaWxlU291cmNlTG9jYXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvT3B0aW1pemVkU2luZ2xlRmlsZVNvdXJjZUxvY2F0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcT3B0aW1pemVkU2luZ2xlRmlsZVNvdXJjZUxvY2F0b3JGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRTaW5nbGVGaWxlU291cmNlTG9jYXRvckZhY3RvcnkucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcT3B0aW1pemVkU2luZ2xlRmlsZVNvdXJjZUxvY2F0b3JSZXBvc2l0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRTaW5nbGVGaWxlU291cmNlTG9jYXRvclJlcG9zaXRvcnkucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcUGhwRmlsZUNsZWFuZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL1BocEZpbGVDbGVhbmVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFBocFZlcnNpb25CbGFja2xpc3RTb3VyY2VMb2NhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9QaHBWZXJzaW9uQmxhY2tsaXN0U291cmNlTG9jYXRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxSZWZsZWN0aW9uQ2xhc3NTb3VyY2VMb2NhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9SZWZsZWN0aW9uQ2xhc3NTb3VyY2VMb2NhdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFJld3JpdGVDbGFzc0FsaWFzU291cmNlTG9jYXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvUmV3cml0ZUNsYXNzQWxpYXNTb3VyY2VMb2NhdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFNraXBDbGFzc0FsaWFzU291cmNlTG9jYXRvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvU2tpcENsYXNzQWxpYXNTb3VyY2VMb2NhdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZVN0dWJiZXJcXFBocFN0b3JtU3R1YnNTb3VyY2VTdHViYmVyRmFjdG9yeScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZVN0dWJiZXIvUGhwU3Rvcm1TdHVic1NvdXJjZVN0dWJiZXJGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZVN0dWJiZXJcXFJlZmxlY3Rpb25Tb3VyY2VTdHViYmVyRmFjdG9yeScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZVN0dWJiZXIvUmVmbGVjdGlvblNvdXJjZVN0dWJiZXJGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJyb2tlckF3YXJlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0Jyb2tlckF3YXJlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXENhbGxhYmxlRnVuY3Rpb25WYXJpYW50V2l0aFBocERvY3MnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQ2FsbGFibGVGdW5jdGlvblZhcmlhbnRXaXRoUGhwRG9jcy5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDYWxsYWJsZXNcXENhbGxhYmxlUGFyYW1ldGVyc0FjY2VwdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0NhbGxhYmxlcy9DYWxsYWJsZVBhcmFtZXRlcnNBY2NlcHRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDYWxsYWJsZXNcXEZ1bmN0aW9uQ2FsbGFibGVWYXJpYW50JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0NhbGxhYmxlcy9GdW5jdGlvbkNhbGxhYmxlVmFyaWFudC5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDYWxsYWJsZXNcXFNpbXBsZUltcHVyZVBvaW50JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0NhbGxhYmxlcy9TaW1wbGVJbXB1cmVQb2ludC5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDYWxsYWJsZXNcXFNpbXBsZVRocm93UG9pbnQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQ2FsbGFibGVzL1NpbXBsZVRocm93UG9pbnQucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQ2xhc3NDb25zdGFudFJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQ2xhc3NDb25zdGFudFJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQ2xhc3NNZW1iZXJBY2Nlc3NBbnN3ZXJlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9DbGFzc01lbWJlckFjY2Vzc0Fuc3dlcmVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXENsYXNzTWVtYmVyUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9DbGFzc01lbWJlclJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQ2xhc3NOYW1lSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0NsYXNzTmFtZUhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDbGFzc1JlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vQ2xhc3NSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXENsYXNzUmVmbGVjdGlvbkV4dGVuc2lvblJlZ2lzdHJ5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvblJlZ2lzdHJ5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXENvbnN0YW50TmFtZUhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9Db25zdGFudE5hbWVIZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQ29uc3RhbnRSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0NvbnN0YW50UmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDb25zdGFudFxcUnVudGltZUNvbnN0YW50UmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9Db25zdGFudC9SdW50aW1lQ29uc3RhbnRSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXENvbnN0cnVjdG9yc0hlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9Db25zdHJ1Y3RvcnNIZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcRHVtbXlcXENoYW5nZWRUeXBlTWV0aG9kUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9EdW1teS9DaGFuZ2VkVHlwZU1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcRHVtbXlcXENoYW5nZWRUeXBlUHJvcGVydHlSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0R1bW15L0NoYW5nZWRUeXBlUHJvcGVydHlSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXER1bW15XFxEdW1teUNvbnN0YW50UmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9EdW1teS9EdW1teUNvbnN0YW50UmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxEdW1teVxcRHVtbXlDb25zdHJ1Y3RvclJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vRHVtbXkvRHVtbXlDb25zdHJ1Y3RvclJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcRHVtbXlcXER1bW15TWV0aG9kUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9EdW1teS9EdW1teU1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcRHVtbXlcXER1bW15UHJvcGVydHlSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0R1bW15L0R1bW15UHJvcGVydHlSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEVudW1DYXNlUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9FbnVtQ2FzZVJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcRXh0ZW5kZWRNZXRob2RSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0V4dGVuZGVkTWV0aG9kUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxFeHRlbmRlZFByb3BlcnR5UmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9FeHRlbmRlZFByb3BlcnR5UmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxGdW5jdGlvblJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vRnVuY3Rpb25SZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEZ1bmN0aW9uUmVmbGVjdGlvbkZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vRnVuY3Rpb25SZWZsZWN0aW9uRmFjdG9yeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxGdW5jdGlvblZhcmlhbnQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vRnVuY3Rpb25WYXJpYW50LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEZ1bmN0aW9uVmFyaWFudFdpdGhQaHBEb2NzJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0Z1bmN0aW9uVmFyaWFudFdpdGhQaHBEb2NzLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEdlbmVyaWNQYXJhbWV0ZXJzQWNjZXB0b3JSZXNvbHZlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9HZW5lcmljUGFyYW1ldGVyc0FjY2VwdG9yUmVzb2x2ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcR2xvYmFsQ29uc3RhbnRSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL0dsb2JhbENvbnN0YW50UmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxJbmFjY2Vzc2libGVNZXRob2QnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vSW5hY2Nlc3NpYmxlTWV0aG9kLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEluaXRpYWxpemVyRXhwckNvbnRleHQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vSW5pdGlhbGl6ZXJFeHByQ29udGV4dC5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxJbml0aWFsaXplckV4cHJUeXBlUmVzb2x2ZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vSW5pdGlhbGl6ZXJFeHByVHlwZVJlc29sdmVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxNZXRob2RSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL01ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTWV0aG9kc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9NZXRob2RzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXE1pc3NpbmdDb25zdGFudEZyb21SZWZsZWN0aW9uRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL01pc3NpbmdDb25zdGFudEZyb21SZWZsZWN0aW9uRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXE1pc3NpbmdNZXRob2RGcm9tUmVmbGVjdGlvbkV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9NaXNzaW5nTWV0aG9kRnJvbVJlZmxlY3Rpb25FeGNlcHRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTWlzc2luZ1Byb3BlcnR5RnJvbVJlZmxlY3Rpb25FeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vTWlzc2luZ1Byb3BlcnR5RnJvbVJlZmxlY3Rpb25FeGNlcHRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTWl4aW5cXE1peGluTWV0aG9kUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9NaXhpbi9NaXhpbk1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTWl4aW5cXE1peGluTWV0aG9kc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9NaXhpbi9NaXhpbk1ldGhvZHNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTWl4aW5cXE1peGluUHJvcGVydGllc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9NaXhpbi9NaXhpblByb3BlcnRpZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTmFtZXNwYWNlQW5zd2VyZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vTmFtZXNwYWNlQW5zd2VyZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTmF0aXZlXFxOYXRpdmVGdW5jdGlvblJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vTmF0aXZlL05hdGl2ZUZ1bmN0aW9uUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxOYXRpdmVcXE5hdGl2ZU1ldGhvZFJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vTmF0aXZlL05hdGl2ZU1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTmF0aXZlXFxOYXRpdmVQYXJhbWV0ZXJSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL05hdGl2ZS9OYXRpdmVQYXJhbWV0ZXJSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXE5hdGl2ZVxcTmF0aXZlUGFyYW1ldGVyV2l0aFBocERvY3NSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL05hdGl2ZS9OYXRpdmVQYXJhbWV0ZXJXaXRoUGhwRG9jc1JlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUEhQU3RhblxcTmF0aXZlUmVmbGVjdGlvbkVudW1SZXR1cm5EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9QSFBTdGFuL05hdGl2ZVJlZmxlY3Rpb25FbnVtUmV0dXJuRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGFyYW1ldGVyUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9QYXJhbWV0ZXJSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBhcmFtZXRlclJlZmxlY3Rpb25XaXRoUGhwRG9jcycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9QYXJhbWV0ZXJSZWZsZWN0aW9uV2l0aFBocERvY3MucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGFyYW1ldGVyc0FjY2VwdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BhcmFtZXRlcnNBY2NlcHRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQYXJhbWV0ZXJzQWNjZXB0b3JTZWxlY3RvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9QYXJhbWV0ZXJzQWNjZXB0b3JTZWxlY3Rvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQYXJhbWV0ZXJzQWNjZXB0b3JXaXRoUGhwRG9jcycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9QYXJhbWV0ZXJzQWNjZXB0b3JXaXRoUGhwRG9jcy5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQYXNzZWRCeVJlZmVyZW5jZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9QYXNzZWRCeVJlZmVyZW5jZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBWZXJzaW9uU3RhdGljQWNjZXNzb3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwVmVyc2lvblN0YXRpY0FjY2Vzc29yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcQnVpbHRpbk1ldGhvZFJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL0J1aWx0aW5NZXRob2RSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcQ2xvc3VyZUNhbGxNZXRob2RSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9DbG9zdXJlQ2FsbE1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxDbG9zdXJlQ2FsbFVucmVzb2x2ZWRNZXRob2RQcm90b3R5cGVSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9DbG9zdXJlQ2FsbFVucmVzb2x2ZWRNZXRob2RQcm90b3R5cGVSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcRHVtbXlQYXJhbWV0ZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL0R1bW15UGFyYW1ldGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcRHVtbXlQYXJhbWV0ZXJXaXRoUGhwRG9jcycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvRHVtbXlQYXJhbWV0ZXJXaXRoUGhwRG9jcy5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXEVudW1BbGxvd2VkU3ViVHlwZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL0VudW1BbGxvd2VkU3ViVHlwZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxFbnVtQ2FzZXNNZXRob2RSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9FbnVtQ2FzZXNNZXRob2RSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcRW51bVByb3BlcnR5UmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvRW51bVByb3BlcnR5UmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXEVudW1VbnJlc29sdmVkUHJvcGVydHlQcm90b3R5cGVSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9FbnVtVW5yZXNvbHZlZFByb3BlcnR5UHJvdG90eXBlUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXEV4aXRGdW5jdGlvblJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL0V4aXRGdW5jdGlvblJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxOYXRpdmVCdWlsdGluTWV0aG9kUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvTmF0aXZlQnVpbHRpbk1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxQaHBDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1BocENsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXFBocEZ1bmN0aW9uRnJvbVBhcnNlck5vZGVSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9QaHBGdW5jdGlvbkZyb21QYXJzZXJOb2RlUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXFBocEZ1bmN0aW9uUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvUGhwRnVuY3Rpb25SZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcUGhwTWV0aG9kRnJvbVBhcnNlck5vZGVSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9QaHBNZXRob2RGcm9tUGFyc2VyTm9kZVJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxQaHBNZXRob2RSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9QaHBNZXRob2RSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcUGhwTWV0aG9kUmVmbGVjdGlvbkZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1BocE1ldGhvZFJlZmxlY3Rpb25GYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcUGhwUGFyYW1ldGVyRnJvbVBhcnNlck5vZGVSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9QaHBQYXJhbWV0ZXJGcm9tUGFyc2VyTm9kZVJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxQaHBQYXJhbWV0ZXJSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9QaHBQYXJhbWV0ZXJSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcUGhwUHJvcGVydHlSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9QaHBQcm9wZXJ0eVJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxTaW1wbGVYTUxFbGVtZW50UHJvcGVydHknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1NpbXBsZVhNTEVsZW1lbnRQcm9wZXJ0eS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXFNvYXBcXFNvYXBDbGllbnRNZXRob2RSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9Tb2FwL1NvYXBDbGllbnRNZXRob2RSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcU29hcFxcU29hcENsaWVudE1ldGhvZHNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1NvYXAvU29hcENsaWVudE1ldGhvZHNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxVbml2ZXJzYWxPYmplY3RDcmF0ZVByb3BlcnR5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9Vbml2ZXJzYWxPYmplY3RDcmF0ZVByb3BlcnR5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcVW5pdmVyc2FsT2JqZWN0Q3JhdGVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9Vbml2ZXJzYWxPYmplY3RDcmF0ZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUHJvcGVydGllc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9Qcm9wZXJ0aWVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFByb3BlcnR5UmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9Qcm9wZXJ0eVJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvblByb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uUHJvdmlkZXJTdGF0aWNBY2Nlc3NvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvdmlkZXJTdGF0aWNBY2Nlc3Nvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uUHJvdmlkZXJcXERpcmVjdFJlZmxlY3Rpb25Qcm92aWRlclByb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci9EaXJlY3RSZWZsZWN0aW9uUHJvdmlkZXJQcm92aWRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uUHJvdmlkZXJcXER1bW15UmVmbGVjdGlvblByb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci9EdW1teVJlZmxlY3Rpb25Qcm92aWRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uUHJvdmlkZXJcXExhenlSZWZsZWN0aW9uUHJvdmlkZXJQcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvdmlkZXIvTGF6eVJlZmxlY3Rpb25Qcm92aWRlclByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25Qcm92aWRlclxcTWVtb2l6aW5nUmVmbGVjdGlvblByb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci9NZW1vaXppbmdSZWZsZWN0aW9uUHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvblByb3ZpZGVyXFxSZWZsZWN0aW9uUHJvdmlkZXJGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci9SZWZsZWN0aW9uUHJvdmlkZXJGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25Qcm92aWRlclxcUmVmbGVjdGlvblByb3ZpZGVyUHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3ZpZGVyL1JlZmxlY3Rpb25Qcm92aWRlclByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25Qcm92aWRlclxcU2V0dGVyUmVmbGVjdGlvblByb3ZpZGVyUHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3ZpZGVyL1NldHRlclJlZmxlY3Rpb25Qcm92aWRlclByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFJlcXVpcmVFeHRlbnNpb25cXFJlcXVpcmVFeHRlbmRzTWV0aG9kc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9SZXF1aXJlRXh0ZW5zaW9uL1JlcXVpcmVFeHRlbmRzTWV0aG9kc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxSZXF1aXJlRXh0ZW5zaW9uXFxSZXF1aXJlRXh0ZW5kc1Byb3BlcnRpZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUmVxdWlyZUV4dGVuc2lvbi9SZXF1aXJlRXh0ZW5kc1Byb3BlcnRpZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVzb2x2ZWRGdW5jdGlvblZhcmlhbnQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUmVzb2x2ZWRGdW5jdGlvblZhcmlhbnQucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVzb2x2ZWRGdW5jdGlvblZhcmlhbnRXaXRoQ2FsbGFibGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUmVzb2x2ZWRGdW5jdGlvblZhcmlhbnRXaXRoQ2FsbGFibGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVzb2x2ZWRGdW5jdGlvblZhcmlhbnRXaXRoT3JpZ2luYWwnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vUmVzb2x2ZWRGdW5jdGlvblZhcmlhbnRXaXRoT3JpZ2luYWwucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVzb2x2ZWRNZXRob2RSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1Jlc29sdmVkTWV0aG9kUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxSZXNvbHZlZFByb3BlcnR5UmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9SZXNvbHZlZFByb3BlcnR5UmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxTaWduYXR1cmVNYXBcXEZ1bmN0aW9uU2lnbmF0dXJlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1NpZ25hdHVyZU1hcC9GdW5jdGlvblNpZ25hdHVyZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxTaWduYXR1cmVNYXBcXEZ1bmN0aW9uU2lnbmF0dXJlTWFwUHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vU2lnbmF0dXJlTWFwL0Z1bmN0aW9uU2lnbmF0dXJlTWFwUHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcU2lnbmF0dXJlTWFwXFxOYXRpdmVGdW5jdGlvblJlZmxlY3Rpb25Qcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9TaWduYXR1cmVNYXAvTmF0aXZlRnVuY3Rpb25SZWZsZWN0aW9uUHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcU2lnbmF0dXJlTWFwXFxQYXJhbWV0ZXJTaWduYXR1cmUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vU2lnbmF0dXJlTWFwL1BhcmFtZXRlclNpZ25hdHVyZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxTaWduYXR1cmVNYXBcXFBocDhTaWduYXR1cmVNYXBQcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9TaWduYXR1cmVNYXAvUGhwOFNpZ25hdHVyZU1hcFByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFNpZ25hdHVyZU1hcFxcU2lnbmF0dXJlTWFwUGFyc2VyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1NpZ25hdHVyZU1hcC9TaWduYXR1cmVNYXBQYXJzZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcU2lnbmF0dXJlTWFwXFxTaWduYXR1cmVNYXBQcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9TaWduYXR1cmVNYXAvU2lnbmF0dXJlTWFwUHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcU2lnbmF0dXJlTWFwXFxTaWduYXR1cmVNYXBQcm92aWRlckZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vU2lnbmF0dXJlTWFwL1NpZ25hdHVyZU1hcFByb3ZpZGVyRmFjdG9yeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUcml2aWFsUGFyYW1ldGVyc0FjY2VwdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1RyaXZpYWxQYXJhbWV0ZXJzQWNjZXB0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcVHlwZVxcQ2FsbGJhY2tVbnJlc29sdmVkTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9UeXBlL0NhbGxiYWNrVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcVHlwZVxcQ2FsbGJhY2tVbnJlc29sdmVkUHJvcGVydHlQcm90b3R5cGVSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1R5cGUvQ2FsbGJhY2tVbnJlc29sdmVkUHJvcGVydHlQcm90b3R5cGVSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFR5cGVcXENhbGxlZE9uVHlwZVVucmVzb2x2ZWRNZXRob2RQcm90b3R5cGVSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1R5cGUvQ2FsbGVkT25UeXBlVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcVHlwZVxcQ2FsbGVkT25UeXBlVW5yZXNvbHZlZFByb3BlcnR5UHJvdG90eXBlUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9UeXBlL0NhbGxlZE9uVHlwZVVucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcVHlwZVxcSW50ZXJzZWN0aW9uVHlwZU1ldGhvZFJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9JbnRlcnNlY3Rpb25UeXBlTWV0aG9kUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxJbnRlcnNlY3Rpb25UeXBlUHJvcGVydHlSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1R5cGUvSW50ZXJzZWN0aW9uVHlwZVByb3BlcnR5UmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxJbnRlcnNlY3Rpb25UeXBlVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9JbnRlcnNlY3Rpb25UeXBlVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcVHlwZVxcSW50ZXJzZWN0aW9uVHlwZVVucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9JbnRlcnNlY3Rpb25UeXBlVW5yZXNvbHZlZFByb3BlcnR5UHJvdG90eXBlUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxVbmlvblR5cGVNZXRob2RSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1R5cGUvVW5pb25UeXBlTWV0aG9kUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxVbmlvblR5cGVQcm9wZXJ0eVJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9VbmlvblR5cGVQcm9wZXJ0eVJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcVHlwZVxcVW5pb25UeXBlVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9VbmlvblR5cGVVbnJlc29sdmVkTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxVbmlvblR5cGVVbnJlc29sdmVkUHJvcGVydHlQcm90b3R5cGVSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SZWZsZWN0aW9uL1R5cGUvVW5pb25UeXBlVW5yZXNvbHZlZFByb3BlcnR5UHJvdG90eXBlUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxVbnJlc29sdmVkTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUmVmbGVjdGlvbi9UeXBlL1VucmVzb2x2ZWRNZXRob2RQcm90b3R5cGVSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFR5cGVcXFVucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9VbnJlc29sdmVkUHJvcGVydHlQcm90b3R5cGVSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFdyYXBwZWRFeHRlbmRlZE1ldGhvZFJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vV3JhcHBlZEV4dGVuZGVkTWV0aG9kUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxXcmFwcGVkRXh0ZW5kZWRQcm9wZXJ0eVJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vV3JhcHBlZEV4dGVuZGVkUHJvcGVydHlSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFdyYXBwZXJQcm9wZXJ0eVJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1JlZmxlY3Rpb24vV3JhcHBlclByb3BlcnR5UmVmbGVjdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxBcGlDbGFzc0NvbnN0RmV0Y2hSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9BcGkvQXBpQ2xhc3NDb25zdEZldGNoUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxBcGlDbGFzc0V4dGVuZHNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9BcGkvQXBpQ2xhc3NFeHRlbmRzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxBcGlDbGFzc0ltcGxlbWVudHNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9BcGkvQXBpQ2xhc3NJbXBsZW1lbnRzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxBcGlJbnN0YW5jZW9mUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXBpL0FwaUluc3RhbmNlb2ZSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcGlcXEFwaUluc3RhbmNlb2ZUeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXBpL0FwaUluc3RhbmNlb2ZUeXBlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxBcGlJbnN0YW50aWF0aW9uUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXBpL0FwaUluc3RhbnRpYXRpb25SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcGlcXEFwaUludGVyZmFjZUV4dGVuZHNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9BcGkvQXBpSW50ZXJmYWNlRXh0ZW5kc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEFwaVxcQXBpTWV0aG9kQ2FsbFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0FwaS9BcGlNZXRob2RDYWxsUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxBcGlSdWxlSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9BcGkvQXBpUnVsZUhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxBcGlTdGF0aWNDYWxsUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXBpL0FwaVN0YXRpY0NhbGxSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcGlcXEFwaVRyYWl0VXNlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXBpL0FwaVRyYWl0VXNlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxCY1VuY292ZXJlZEludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXBpL0JjVW5jb3ZlcmVkSW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcGlcXEdldFRlbXBsYXRlVHlwZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0FwaS9HZXRUZW1wbGF0ZVR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcGlcXE5vZGVDb25uZWN0aW5nVmlzaXRvckF0dHJpYnV0ZXNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9BcGkvTm9kZUNvbm5lY3RpbmdWaXNpdG9yQXR0cmlidXRlc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEFwaVxcUGhwU3Rhbk5hbWVzcGFjZUluM3JkUGFydHlQYWNrYWdlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXBpL1BocFN0YW5OYW1lc3BhY2VJbjNyZFBhcnR5UGFja2FnZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEFwaVxcUnVudGltZVJlZmxlY3Rpb25GdW5jdGlvblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0FwaS9SdW50aW1lUmVmbGVjdGlvbkZ1bmN0aW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxSdW50aW1lUmVmbGVjdGlvbkluc3RhbnRpYXRpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9BcGkvUnVudGltZVJlZmxlY3Rpb25JbnN0YW50aWF0aW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXJyYXlzXFxBbGxvd2VkQXJyYXlLZXlzVHlwZXMnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0FycmF5cy9BbGxvd2VkQXJyYXlLZXlzVHlwZXMucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEFycmF5c1xcQXBwZW5kZWRBcnJheUl0ZW1UeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXJyYXlzL0FwcGVuZGVkQXJyYXlJdGVtVHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEFycmF5c1xcQXBwZW5kZWRBcnJheUtleVR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9BcnJheXMvQXBwZW5kZWRBcnJheUtleVR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXEFycmF5RGVzdHJ1Y3R1cmluZ1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0FycmF5cy9BcnJheURlc3RydWN0dXJpbmdSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXEFycmF5VW5wYWNraW5nUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXJyYXlzL0FycmF5VW5wYWNraW5nUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXJyYXlzXFxEZWFkRm9yZWFjaFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0FycmF5cy9EZWFkRm9yZWFjaFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEFycmF5c1xcRHVwbGljYXRlS2V5c0luTGl0ZXJhbEFycmF5c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0FycmF5cy9EdXBsaWNhdGVLZXlzSW5MaXRlcmFsQXJyYXlzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXJyYXlzXFxFbXB0eUFycmF5SXRlbVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0FycmF5cy9FbXB0eUFycmF5SXRlbVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEFycmF5c1xcSW52YWxpZEtleUluQXJyYXlEaW1GZXRjaFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0FycmF5cy9JbnZhbGlkS2V5SW5BcnJheURpbUZldGNoUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXJyYXlzXFxJbnZhbGlkS2V5SW5BcnJheUl0ZW1SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9BcnJheXMvSW52YWxpZEtleUluQXJyYXlJdGVtUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXJyYXlzXFxJdGVyYWJsZUluRm9yZWFjaFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0FycmF5cy9JdGVyYWJsZUluRm9yZWFjaFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEFycmF5c1xcTm9uZXhpc3RlbnRPZmZzZXRJbkFycmF5RGltRmV0Y2hDaGVjaycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXJyYXlzL05vbmV4aXN0ZW50T2Zmc2V0SW5BcnJheURpbUZldGNoQ2hlY2sucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEFycmF5c1xcTm9uZXhpc3RlbnRPZmZzZXRJbkFycmF5RGltRmV0Y2hSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9BcnJheXMvTm9uZXhpc3RlbnRPZmZzZXRJbkFycmF5RGltRmV0Y2hSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXE9mZnNldEFjY2Vzc0Fzc2lnbk9wUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXJyYXlzL09mZnNldEFjY2Vzc0Fzc2lnbk9wUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXJyYXlzXFxPZmZzZXRBY2Nlc3NBc3NpZ25tZW50UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXJyYXlzL09mZnNldEFjY2Vzc0Fzc2lnbm1lbnRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXE9mZnNldEFjY2Vzc1ZhbHVlQXNzaWdubWVudFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0FycmF5cy9PZmZzZXRBY2Nlc3NWYWx1ZUFzc2lnbm1lbnRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXE9mZnNldEFjY2Vzc1dpdGhvdXREaW1Gb3JSZWFkaW5nUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQXJyYXlzL09mZnNldEFjY2Vzc1dpdGhvdXREaW1Gb3JSZWFkaW5nUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXJyYXlzXFxVbnBhY2tJdGVyYWJsZUluQXJyYXlSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9BcnJheXMvVW5wYWNrSXRlcmFibGVJbkFycmF5UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQXR0cmlidXRlc0NoZWNrJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9BdHRyaWJ1dGVzQ2hlY2sucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENhc3RcXEVjaG9SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9DYXN0L0VjaG9SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDYXN0XFxJbnZhbGlkQ2FzdFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Nhc3QvSW52YWxpZENhc3RSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDYXN0XFxJbnZhbGlkUGFydE9mRW5jYXBzZWRTdHJpbmdSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9DYXN0L0ludmFsaWRQYXJ0T2ZFbmNhcHNlZFN0cmluZ1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENhc3RcXFByaW50UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2FzdC9QcmludFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENhc3RcXFVuc2V0Q2FzdFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Nhc3QvVW5zZXRDYXN0UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3NDYXNlU2Vuc2l0aXZpdHlDaGVjaycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3NDYXNlU2Vuc2l0aXZpdHlDaGVjay5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3NGb3JiaWRkZW5OYW1lQ2hlY2snID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzRm9yYmlkZGVuTmFtZUNoZWNrLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc05hbWVDaGVjaycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3NOYW1lQ2hlY2sucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzTmFtZU5vZGVQYWlyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9DbGFzc05hbWVOb2RlUGFpci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcQWNjZXNzUHJpdmF0ZUNvbnN0YW50VGhyb3VnaFN0YXRpY1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvQWNjZXNzUHJpdmF0ZUNvbnN0YW50VGhyb3VnaFN0YXRpY1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXEFsbG93ZWRTdWJUeXBlc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvQWxsb3dlZFN1YlR5cGVzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcQ2xhc3NBdHRyaWJ1dGVzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9DbGFzc0F0dHJpYnV0ZXNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxDbGFzc0NvbnN0YW50QXR0cmlidXRlc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvQ2xhc3NDb25zdGFudEF0dHJpYnV0ZXNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxDbGFzc0NvbnN0YW50UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9DbGFzc0NvbnN0YW50UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcRHVwbGljYXRlQ2xhc3NEZWNsYXJhdGlvblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvRHVwbGljYXRlQ2xhc3NEZWNsYXJhdGlvblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXER1cGxpY2F0ZURlY2xhcmF0aW9uUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9EdXBsaWNhdGVEZWNsYXJhdGlvblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXEVudW1TYW5pdHlSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0VudW1TYW5pdHlSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxFeGlzdGluZ0NsYXNzSW5DbGFzc0V4dGVuZHNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0V4aXN0aW5nQ2xhc3NJbkNsYXNzRXh0ZW5kc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXEV4aXN0aW5nQ2xhc3NJbkluc3RhbmNlT2ZSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0V4aXN0aW5nQ2xhc3NJbkluc3RhbmNlT2ZSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxFeGlzdGluZ0NsYXNzSW5UcmFpdFVzZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvRXhpc3RpbmdDbGFzc0luVHJhaXRVc2VSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxFeGlzdGluZ0NsYXNzZXNJbkNsYXNzSW1wbGVtZW50c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvRXhpc3RpbmdDbGFzc2VzSW5DbGFzc0ltcGxlbWVudHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxFeGlzdGluZ0NsYXNzZXNJbkVudW1JbXBsZW1lbnRzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9FeGlzdGluZ0NsYXNzZXNJbkVudW1JbXBsZW1lbnRzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcRXhpc3RpbmdDbGFzc2VzSW5JbnRlcmZhY2VFeHRlbmRzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9FeGlzdGluZ0NsYXNzZXNJbkludGVyZmFjZUV4dGVuZHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxJbXBvc3NpYmxlSW5zdGFuY2VPZlJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvSW1wb3NzaWJsZUluc3RhbmNlT2ZSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxJbnN0YW50aWF0aW9uQ2FsbGFibGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0luc3RhbnRpYXRpb25DYWxsYWJsZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXEluc3RhbnRpYXRpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0luc3RhbnRpYXRpb25SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxJbnZhbGlkUHJvbW90ZWRQcm9wZXJ0aWVzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9JbnZhbGlkUHJvbW90ZWRQcm9wZXJ0aWVzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcTG9jYWxUeXBlQWxpYXNlc0NoZWNrJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0xvY2FsVHlwZUFsaWFzZXNDaGVjay5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcTG9jYWxUeXBlQWxpYXNlc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTG9jYWxUeXBlQWxpYXNlc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXExvY2FsVHlwZVRyYWl0QWxpYXNlc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTG9jYWxUeXBlVHJhaXRBbGlhc2VzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcTG9jYWxUeXBlVHJhaXRVc2VBbGlhc2VzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9Mb2NhbFR5cGVUcmFpdFVzZUFsaWFzZXNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxNZXRob2RUYWdDaGVjaycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9NZXRob2RUYWdDaGVjay5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcTWV0aG9kVGFnUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9NZXRob2RUYWdSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxNZXRob2RUYWdUcmFpdFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTWV0aG9kVGFnVHJhaXRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxNZXRob2RUYWdUcmFpdFVzZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTWV0aG9kVGFnVHJhaXRVc2VSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxNaXhpbkNoZWNrJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL01peGluQ2hlY2sucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXE1peGluUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9NaXhpblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXE1peGluVHJhaXRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL01peGluVHJhaXRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxNaXhpblRyYWl0VXNlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9NaXhpblRyYWl0VXNlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcTmV3U3RhdGljUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9OZXdTdGF0aWNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxOb25DbGFzc0F0dHJpYnV0ZUNsYXNzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9Ob25DbGFzc0F0dHJpYnV0ZUNsYXNzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcUHJvcGVydHlUYWdDaGVjaycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9Qcm9wZXJ0eVRhZ0NoZWNrLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxQcm9wZXJ0eVRhZ1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvUHJvcGVydHlUYWdSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxQcm9wZXJ0eVRhZ1RyYWl0UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9Qcm9wZXJ0eVRhZ1RyYWl0UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcUHJvcGVydHlUYWdUcmFpdFVzZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvUHJvcGVydHlUYWdUcmFpdFVzZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXFJlYWRPbmx5Q2xhc3NSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL1JlYWRPbmx5Q2xhc3NSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxSZXF1aXJlRXh0ZW5kc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvUmVxdWlyZUV4dGVuZHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxSZXF1aXJlSW1wbGVtZW50c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NsYXNzZXMvUmVxdWlyZUltcGxlbWVudHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxUcmFpdEF0dHJpYnV0ZUNsYXNzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9UcmFpdEF0dHJpYnV0ZUNsYXNzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcVW51c2VkQ29uc3RydWN0b3JQYXJhbWV0ZXJzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9VbnVzZWRDb25zdHJ1Y3RvclBhcmFtZXRlcnNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxCb29sZWFuQW5kQ29uc3RhbnRDb25kaXRpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL0Jvb2xlYW5BbmRDb25zdGFudENvbmRpdGlvblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXEJvb2xlYW5Ob3RDb25zdGFudENvbmRpdGlvblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vQm9vbGVhbk5vdENvbnN0YW50Q29uZGl0aW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcQm9vbGVhbk9yQ29uc3RhbnRDb25kaXRpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL0Jvb2xlYW5PckNvbnN0YW50Q29uZGl0aW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcQ29uc3RhbnRDb25kaXRpb25SdWxlSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL0NvbnN0YW50Q29uZGl0aW9uUnVsZUhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcQ29uc3RhbnRMb29zZUNvbXBhcmlzb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL0NvbnN0YW50TG9vc2VDb21wYXJpc29uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcRG9XaGlsZUxvb3BDb25zdGFudENvbmRpdGlvblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vRG9XaGlsZUxvb3BDb25zdGFudENvbmRpdGlvblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXEVsc2VJZkNvbnN0YW50Q29uZGl0aW9uUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9FbHNlSWZDb25zdGFudENvbmRpdGlvblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXElmQ29uc3RhbnRDb25kaXRpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL0lmQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxJbXBvc3NpYmxlQ2hlY2tUeXBlRnVuY3Rpb25DYWxsUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9JbXBvc3NpYmxlQ2hlY2tUeXBlRnVuY3Rpb25DYWxsUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcSW1wb3NzaWJsZUNoZWNrVHlwZUhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9JbXBvc3NpYmxlQ2hlY2tUeXBlSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxJbXBvc3NpYmxlQ2hlY2tUeXBlTWV0aG9kQ2FsbFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vSW1wb3NzaWJsZUNoZWNrVHlwZU1ldGhvZENhbGxSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxJbXBvc3NpYmxlQ2hlY2tUeXBlU3RhdGljTWV0aG9kQ2FsbFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vSW1wb3NzaWJsZUNoZWNrVHlwZVN0YXRpY01ldGhvZENhbGxSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxMb2dpY2FsWG9yQ29uc3RhbnRDb25kaXRpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL0xvZ2ljYWxYb3JDb25zdGFudENvbmRpdGlvblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXE1hdGNoRXhwcmVzc2lvblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vTWF0Y2hFeHByZXNzaW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcTnVtYmVyQ29tcGFyaXNvbk9wZXJhdG9yc0NvbnN0YW50Q29uZGl0aW9uUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9OdW1iZXJDb21wYXJpc29uT3BlcmF0b3JzQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxTdHJpY3RDb21wYXJpc29uT2ZEaWZmZXJlbnRUeXBlc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vU3RyaWN0Q29tcGFyaXNvbk9mRGlmZmVyZW50VHlwZXNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxUZXJuYXJ5T3BlcmF0b3JDb25zdGFudENvbmRpdGlvblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vVGVybmFyeU9wZXJhdG9yQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxVbnJlYWNoYWJsZUlmQnJhbmNoZXNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL1VucmVhY2hhYmxlSWZCcmFuY2hlc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXFVucmVhY2hhYmxlVGVybmFyeUVsc2VCcmFuY2hSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL1VucmVhY2hhYmxlVGVybmFyeUVsc2VCcmFuY2hSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxVc2FnZU9mVm9pZE1hdGNoRXhwcmVzc2lvblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vVXNhZ2VPZlZvaWRNYXRjaEV4cHJlc3Npb25SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxXaGlsZUxvb3BBbHdheXNGYWxzZUNvbmRpdGlvblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vV2hpbGVMb29wQWx3YXlzRmFsc2VDb25kaXRpb25SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxXaGlsZUxvb3BBbHdheXNUcnVlQ29uZGl0aW9uUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9XaGlsZUxvb3BBbHdheXNUcnVlQ29uZGl0aW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ29uc3RhbnRzXFxBbHdheXNVc2VkQ2xhc3NDb25zdGFudHNFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbnN0YW50cy9BbHdheXNVc2VkQ2xhc3NDb25zdGFudHNFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENvbnN0YW50c1xcQWx3YXlzVXNlZENsYXNzQ29uc3RhbnRzRXh0ZW5zaW9uUHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbnN0YW50cy9BbHdheXNVc2VkQ2xhc3NDb25zdGFudHNFeHRlbnNpb25Qcm92aWRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ29uc3RhbnRzXFxDbGFzc0FzQ2xhc3NDb25zdGFudFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbnN0YW50cy9DbGFzc0FzQ2xhc3NDb25zdGFudFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENvbnN0YW50c1xcQ29uc3RhbnRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvQ29uc3RhbnRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb25zdGFudHNcXER5bmFtaWNDbGFzc0NvbnN0YW50RmV0Y2hSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvRHluYW1pY0NsYXNzQ29uc3RhbnRGZXRjaFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENvbnN0YW50c1xcRmluYWxDb25zdGFudFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbnN0YW50cy9GaW5hbENvbnN0YW50UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcQ29uc3RhbnRzXFxMYXp5QWx3YXlzVXNlZENsYXNzQ29uc3RhbnRzRXh0ZW5zaW9uUHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbnN0YW50cy9MYXp5QWx3YXlzVXNlZENsYXNzQ29uc3RhbnRzRXh0ZW5zaW9uUHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENvbnN0YW50c1xcTWFnaWNDb25zdGFudENvbnRleHRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvTWFnaWNDb25zdGFudENvbnRleHRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb25zdGFudHNcXE1pc3NpbmdDbGFzc0NvbnN0YW50VHlwZWhpbnRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvTWlzc2luZ0NsYXNzQ29uc3RhbnRUeXBlaGludFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENvbnN0YW50c1xcTmF0aXZlVHlwZWRDbGFzc0NvbnN0YW50UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ29uc3RhbnRzL05hdGl2ZVR5cGVkQ2xhc3NDb25zdGFudFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENvbnN0YW50c1xcT3ZlcnJpZGluZ0NvbnN0YW50UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvQ29uc3RhbnRzL092ZXJyaWRpbmdDb25zdGFudFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXENvbnN0YW50c1xcVmFsdWVBc3NpZ25lZFRvQ2xhc3NDb25zdGFudFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0NvbnN0YW50cy9WYWx1ZUFzc2lnbmVkVG9DbGFzc0NvbnN0YW50UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRGF0ZVRpbWVJbnN0YW50aWF0aW9uUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRGF0ZVRpbWVJbnN0YW50aWF0aW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRGVhZENvZGVcXEJldHRlck5vb3BSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9CZXR0ZXJOb29wUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRGVhZENvZGVcXENhbGxUb0NvbnN0cnVjdG9yU3RhdGVtZW50V2l0aG91dEltcHVyZVBvaW50c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL0NhbGxUb0NvbnN0cnVjdG9yU3RhdGVtZW50V2l0aG91dEltcHVyZVBvaW50c1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxDYWxsVG9GdW5jdGlvblN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9DYWxsVG9GdW5jdGlvblN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcQ2FsbFRvTWV0aG9kU3RhdGVtZW50V2l0aG91dEltcHVyZVBvaW50c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL0NhbGxUb01ldGhvZFN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcQ2FsbFRvU3RhdGljTWV0aG9kU3RhdGVtZW50V2l0aG91dEltcHVyZVBvaW50c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL0NhbGxUb1N0YXRpY01ldGhvZFN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcQ29uc3RydWN0b3JXaXRob3V0SW1wdXJlUG9pbnRzQ29sbGVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9Db25zdHJ1Y3RvcldpdGhvdXRJbXB1cmVQb2ludHNDb2xsZWN0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxGdW5jdGlvbldpdGhvdXRJbXB1cmVQb2ludHNDb2xsZWN0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL0Z1bmN0aW9uV2l0aG91dEltcHVyZVBvaW50c0NvbGxlY3Rvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRGVhZENvZGVcXE1ldGhvZFdpdGhvdXRJbXB1cmVQb2ludHNDb2xsZWN0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL01ldGhvZFdpdGhvdXRJbXB1cmVQb2ludHNDb2xsZWN0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxOb29wUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvTm9vcFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxQb3NzaWJseVB1cmVGdW5jQ2FsbENvbGxlY3RvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvUG9zc2libHlQdXJlRnVuY0NhbGxDb2xsZWN0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxQb3NzaWJseVB1cmVNZXRob2RDYWxsQ29sbGVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9Qb3NzaWJseVB1cmVNZXRob2RDYWxsQ29sbGVjdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcUG9zc2libHlQdXJlTmV3Q29sbGVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9Qb3NzaWJseVB1cmVOZXdDb2xsZWN0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxQb3NzaWJseVB1cmVTdGF0aWNDYWxsQ29sbGVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9Qb3NzaWJseVB1cmVTdGF0aWNDYWxsQ29sbGVjdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcVW5yZWFjaGFibGVTdGF0ZW1lbnRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9VbnJlYWNoYWJsZVN0YXRlbWVudFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxVbnVzZWRQcml2YXRlQ29uc3RhbnRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9VbnVzZWRQcml2YXRlQ29uc3RhbnRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcVW51c2VkUHJpdmF0ZU1ldGhvZFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL1VudXNlZFByaXZhdGVNZXRob2RSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcVW51c2VkUHJpdmF0ZVByb3BlcnR5UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvVW51c2VkUHJpdmF0ZVByb3BlcnR5UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRGVidWdcXERlYnVnU2NvcGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9EZWJ1Zy9EZWJ1Z1Njb3BlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRGVidWdcXER1bXBQaHBEb2NUeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRGVidWcvRHVtcFBocERvY1R5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWJ1Z1xcRHVtcFR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9EZWJ1Zy9EdW1wVHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXERlYnVnXFxGaWxlQXNzZXJ0UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRGVidWcvRmlsZUFzc2VydFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXERpcmVjdFJlZ2lzdHJ5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9EaXJlY3RSZWdpc3RyeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRW51bUNhc2VzXFxFbnVtQ2FzZUF0dHJpYnV0ZXNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9FbnVtQ2FzZXMvRW51bUNhc2VBdHRyaWJ1dGVzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRXhjZXB0aW9uc1xcQ2F0Y2hXaXRoVW50aHJvd25FeGNlcHRpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL0NhdGNoV2l0aFVudGhyb3duRXhjZXB0aW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRXhjZXB0aW9uc1xcQ2F1Z2h0RXhjZXB0aW9uRXhpc3RlbmNlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9DYXVnaHRFeGNlcHRpb25FeGlzdGVuY2VSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxFeGNlcHRpb25zXFxEZWZhdWx0RXhjZXB0aW9uVHlwZVJlc29sdmVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL0RlZmF1bHRFeGNlcHRpb25UeXBlUmVzb2x2ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXEV4Y2VwdGlvblR5cGVSZXNvbHZlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9FeGNlcHRpb25UeXBlUmVzb2x2ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXE1pc3NpbmdDaGVja2VkRXhjZXB0aW9uSW5GdW5jdGlvblRocm93c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvTWlzc2luZ0NoZWNrZWRFeGNlcHRpb25JbkZ1bmN0aW9uVGhyb3dzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRXhjZXB0aW9uc1xcTWlzc2luZ0NoZWNrZWRFeGNlcHRpb25Jbk1ldGhvZFRocm93c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvTWlzc2luZ0NoZWNrZWRFeGNlcHRpb25Jbk1ldGhvZFRocm93c1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXE1pc3NpbmdDaGVja2VkRXhjZXB0aW9uSW5UaHJvd3NDaGVjaycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9NaXNzaW5nQ2hlY2tlZEV4Y2VwdGlvbkluVGhyb3dzQ2hlY2sucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXE5vbmNhcHR1cmluZ0NhdGNoUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9Ob25jYXB0dXJpbmdDYXRjaFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXE92ZXJ3cml0dGVuRXhpdFBvaW50QnlGaW5hbGx5UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9PdmVyd3JpdHRlbkV4aXRQb2ludEJ5RmluYWxseVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXFRocm93RXhwclR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL1Rocm93RXhwclR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxFeGNlcHRpb25zXFxUaHJvd0V4cHJlc3Npb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL1Rocm93RXhwcmVzc2lvblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXFRocm93c1ZvaWRGdW5jdGlvbldpdGhFeHBsaWNpdFRocm93UG9pbnRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL1Rocm93c1ZvaWRGdW5jdGlvbldpdGhFeHBsaWNpdFRocm93UG9pbnRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxFeGNlcHRpb25zXFxUaHJvd3NWb2lkTWV0aG9kV2l0aEV4cGxpY2l0VGhyb3dQb2ludFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvVGhyb3dzVm9pZE1ldGhvZFdpdGhFeHBsaWNpdFRocm93UG9pbnRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxFeGNlcHRpb25zXFxUb29XaWRlRnVuY3Rpb25UaHJvd1R5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL1Rvb1dpZGVGdW5jdGlvblRocm93VHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXFRvb1dpZGVNZXRob2RUaHJvd1R5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL1Rvb1dpZGVNZXRob2RUaHJvd1R5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxFeGNlcHRpb25zXFxUb29XaWRlVGhyb3dUeXBlQ2hlY2snID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvVG9vV2lkZVRocm93VHlwZUNoZWNrLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxGaWxlUnVsZUVycm9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GaWxlUnVsZUVycm9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxGb3VuZFR5cGVSZXN1bHQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0ZvdW5kVHlwZVJlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25DYWxsUGFyYW1ldGVyc0NoZWNrJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbkNhbGxQYXJhbWV0ZXJzQ2hlY2sucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uRGVmaW5pdGlvbkNoZWNrJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbkRlZmluaXRpb25DaGVjay5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25SZXR1cm5UeXBlQ2hlY2snID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9uUmV0dXJuVHlwZUNoZWNrLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXEFycmF5RmlsdGVyUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0FycmF5RmlsdGVyUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxBcnJheVZhbHVlc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9BcnJheVZhbHVlc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcQXJyb3dGdW5jdGlvbkF0dHJpYnV0ZXNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvQXJyb3dGdW5jdGlvbkF0dHJpYnV0ZXNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXEFycm93RnVuY3Rpb25SZXR1cm5OdWxsc2FmZUJ5UmVmUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0Fycm93RnVuY3Rpb25SZXR1cm5OdWxsc2FmZUJ5UmVmUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxBcnJvd0Z1bmN0aW9uUmV0dXJuVHlwZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9BcnJvd0Z1bmN0aW9uUmV0dXJuVHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcQ2FsbENhbGxhYmxlc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DYWxsQ2FsbGFibGVzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxDYWxsVG9GdW5jdGlvblBhcmFtZXRlcnNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvQ2FsbFRvRnVuY3Rpb25QYXJhbWV0ZXJzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxDYWxsVG9GdW5jdGlvblN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DYWxsVG9GdW5jdGlvblN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcQ2FsbFRvTm9uRXhpc3RlbnRGdW5jdGlvblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DYWxsVG9Ob25FeGlzdGVudEZ1bmN0aW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxDYWxsVXNlckZ1bmNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvQ2FsbFVzZXJGdW5jUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxDbG9zdXJlQXR0cmlidXRlc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DbG9zdXJlQXR0cmlidXRlc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcQ2xvc3VyZVJldHVyblR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvQ2xvc3VyZVJldHVyblR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXERlZmluZVBhcmFtZXRlcnNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvRGVmaW5lUGFyYW1ldGVyc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcRHVwbGljYXRlRnVuY3Rpb25EZWNsYXJhdGlvblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9EdXBsaWNhdGVGdW5jdGlvbkRlY2xhcmF0aW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxFeGlzdGluZ0NsYXNzZXNJbkFycm93RnVuY3Rpb25UeXBlaGludHNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvRXhpc3RpbmdDbGFzc2VzSW5BcnJvd0Z1bmN0aW9uVHlwZWhpbnRzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxFeGlzdGluZ0NsYXNzZXNJbkNsb3N1cmVUeXBlaGludHNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvRXhpc3RpbmdDbGFzc2VzSW5DbG9zdXJlVHlwZWhpbnRzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxFeGlzdGluZ0NsYXNzZXNJblR5cGVoaW50c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9FeGlzdGluZ0NsYXNzZXNJblR5cGVoaW50c1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcRnVuY3Rpb25BdHRyaWJ1dGVzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0Z1bmN0aW9uQXR0cmlidXRlc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcRnVuY3Rpb25DYWxsYWJsZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9GdW5jdGlvbkNhbGxhYmxlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxJbXBsb2RlRnVuY3Rpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvSW1wbG9kZUZ1bmN0aW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxJbXBsb2RlUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9JbXBsb2RlUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcSW5jb21wYXRpYmxlQXJyb3dGdW5jdGlvbkRlZmF1bHRQYXJhbWV0ZXJUeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0luY29tcGF0aWJsZUFycm93RnVuY3Rpb25EZWZhdWx0UGFyYW1ldGVyVHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcSW5jb21wYXRpYmxlQ2xvc3VyZURlZmF1bHRQYXJhbWV0ZXJUeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0luY29tcGF0aWJsZUNsb3N1cmVEZWZhdWx0UGFyYW1ldGVyVHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcSW5jb21wYXRpYmxlRGVmYXVsdFBhcmFtZXRlclR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvSW5jb21wYXRpYmxlRGVmYXVsdFBhcmFtZXRlclR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXElubmVyRnVuY3Rpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvSW5uZXJGdW5jdGlvblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcSW52YWxpZExleGljYWxWYXJpYWJsZXNJbkNsb3N1cmVVc2VSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvSW52YWxpZExleGljYWxWYXJpYWJsZXNJbkNsb3N1cmVVc2VSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXE1pc3NpbmdGdW5jdGlvblBhcmFtZXRlclR5cGVoaW50UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL01pc3NpbmdGdW5jdGlvblBhcmFtZXRlclR5cGVoaW50UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxNaXNzaW5nRnVuY3Rpb25SZXR1cm5UeXBlaGludFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9NaXNzaW5nRnVuY3Rpb25SZXR1cm5UeXBlaGludFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcUGFyYW1BdHRyaWJ1dGVzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL1BhcmFtQXR0cmlidXRlc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9QYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxQcmludGZBcnJheVBhcmFtZXRlcnNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvUHJpbnRmQXJyYXlQYXJhbWV0ZXJzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxQcmludGZIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9QcmludGZIZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcUHJpbnRmUGFyYW1ldGVyc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9QcmludGZQYXJhbWV0ZXJzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxSYW5kb21JbnRQYXJhbWV0ZXJzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL1JhbmRvbUludFBhcmFtZXRlcnNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXFJlZGVmaW5lZFBhcmFtZXRlcnNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvUmVkZWZpbmVkUGFyYW1ldGVyc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcUmV0dXJuTnVsbHNhZmVCeVJlZlJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9SZXR1cm5OdWxsc2FmZUJ5UmVmUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxSZXR1cm5UeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL1JldHVyblR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXFNvcnRQYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL1NvcnRQYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxVbnVzZWRDbG9zdXJlVXNlc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9VbnVzZWRDbG9zdXJlVXNlc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcVXNlbGVzc0Z1bmN0aW9uUmV0dXJuVmFsdWVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvVXNlbGVzc0Z1bmN0aW9uUmV0dXJuVmFsdWVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXFZhcmlhZGljUGFyYW1ldGVyc0RlY2xhcmF0aW9uUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL1ZhcmlhZGljUGFyYW1ldGVyc0RlY2xhcmF0aW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJhdG9yc1xcWWllbGRGcm9tVHlwZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0dlbmVyYXRvcnMvWWllbGRGcm9tVHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyYXRvcnNcXFlpZWxkSW5HZW5lcmF0b3JSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9HZW5lcmF0b3JzL1lpZWxkSW5HZW5lcmF0b3JSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmF0b3JzXFxZaWVsZFR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9HZW5lcmF0b3JzL1lpZWxkVHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyaWNzXFxDbGFzc0FuY2VzdG9yc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0NsYXNzQW5jZXN0b3JzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXENsYXNzVGVtcGxhdGVUeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvQ2xhc3NUZW1wbGF0ZVR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcQ3Jvc3NDaGVja0ludGVyZmFjZXNIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0Nyb3NzQ2hlY2tJbnRlcmZhY2VzSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcRW51bUFuY2VzdG9yc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0VudW1BbmNlc3RvcnNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcRW51bVRlbXBsYXRlVHlwZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0VudW1UZW1wbGF0ZVR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcRnVuY3Rpb25TaWduYXR1cmVWYXJpYW5jZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0Z1bmN0aW9uU2lnbmF0dXJlVmFyaWFuY2VSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcRnVuY3Rpb25UZW1wbGF0ZVR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9GdW5jdGlvblRlbXBsYXRlVHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyaWNzXFxHZW5lcmljQW5jZXN0b3JzQ2hlY2snID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0dlbmVyaWNBbmNlc3RvcnNDaGVjay5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXEdlbmVyaWNPYmplY3RUeXBlQ2hlY2snID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0dlbmVyaWNPYmplY3RUeXBlQ2hlY2sucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyaWNzXFxJbnRlcmZhY2VBbmNlc3RvcnNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9JbnRlcmZhY2VBbmNlc3RvcnNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcSW50ZXJmYWNlVGVtcGxhdGVUeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvSW50ZXJmYWNlVGVtcGxhdGVUeXBlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXE1ldGhvZFNpZ25hdHVyZVZhcmlhbmNlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvTWV0aG9kU2lnbmF0dXJlVmFyaWFuY2VSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcTWV0aG9kVGFnVGVtcGxhdGVUeXBlQ2hlY2snID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL01ldGhvZFRhZ1RlbXBsYXRlVHlwZUNoZWNrLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcTWV0aG9kVGFnVGVtcGxhdGVUeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvTWV0aG9kVGFnVGVtcGxhdGVUeXBlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXE1ldGhvZFRhZ1RlbXBsYXRlVHlwZVRyYWl0UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvTWV0aG9kVGFnVGVtcGxhdGVUeXBlVHJhaXRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcTWV0aG9kVGVtcGxhdGVUeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvTWV0aG9kVGVtcGxhdGVUeXBlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXFByb3BlcnR5VmFyaWFuY2VSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9Qcm9wZXJ0eVZhcmlhbmNlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXFRlbXBsYXRlVHlwZUNoZWNrJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9UZW1wbGF0ZVR5cGVDaGVjay5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXFRyYWl0VGVtcGxhdGVUeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvVHJhaXRUZW1wbGF0ZVR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcVXNlZFRyYWl0c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL1VzZWRUcmFpdHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcVmFyaWFuY2VDaGVjaycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvVmFyaWFuY2VDaGVjay5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcSWRlbnRpZmllclJ1bGVFcnJvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvSWRlbnRpZmllclJ1bGVFcnJvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcSWdub3JlXFxJZ25vcmVQYXJzZUVycm9yUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvSWdub3JlL0lnbm9yZVBhcnNlRXJyb3JSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxJc3NldENoZWNrJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Jc3NldENoZWNrLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxLZXl3b3Jkc1xcQ29udGludWVCcmVha0luTG9vcFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0tleXdvcmRzL0NvbnRpbnVlQnJlYWtJbkxvb3BSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxLZXl3b3Jkc1xcRGVjbGFyZVN0cmljdFR5cGVzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvS2V5d29yZHMvRGVjbGFyZVN0cmljdFR5cGVzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcS2V5d29yZHNcXFJlcXVpcmVGaWxlRXhpc3RzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvS2V5d29yZHMvUmVxdWlyZUZpbGVFeGlzdHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxMYXp5UmVnaXN0cnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL0xhenlSZWdpc3RyeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTGluZVJ1bGVFcnJvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvTGluZVJ1bGVFcnJvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0YWRhdGFSdWxlRXJyb3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGFkYXRhUnVsZUVycm9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxBYnN0cmFjdE1ldGhvZEluTm9uQWJzdHJhY3RDbGFzc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvQWJzdHJhY3RNZXRob2RJbk5vbkFic3RyYWN0Q2xhc3NSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxBYnN0cmFjdFByaXZhdGVNZXRob2RSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0Fic3RyYWN0UHJpdmF0ZU1ldGhvZFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXEFsd2F5c1VzZWRNZXRob2RFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvQWx3YXlzVXNlZE1ldGhvZEV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcQWx3YXlzVXNlZE1ldGhvZEV4dGVuc2lvblByb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0Fsd2F5c1VzZWRNZXRob2RFeHRlbnNpb25Qcm92aWRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcQ2FsbE1ldGhvZHNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NhbGxNZXRob2RzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcQ2FsbFByaXZhdGVNZXRob2RUaHJvdWdoU3RhdGljUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9DYWxsUHJpdmF0ZU1ldGhvZFRocm91Z2hTdGF0aWNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxDYWxsU3RhdGljTWV0aG9kc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvQ2FsbFN0YXRpY01ldGhvZHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxDYWxsVG9Db25zdHJ1Y3RvclN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvQ2FsbFRvQ29uc3RydWN0b3JTdGF0ZW1lbnRXaXRob3V0U2lkZUVmZmVjdHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxDYWxsVG9NZXRob2RTdGF0ZW1lbnRXaXRob3V0U2lkZUVmZmVjdHNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NhbGxUb01ldGhvZFN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXENhbGxUb1N0YXRpY01ldGhvZFN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvQ2FsbFRvU3RhdGljTWV0aG9kU3RhdGVtZW50V2l0aG91dFNpZGVFZmZlY3RzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcQ29uc2lzdGVudENvbnN0cnVjdG9yUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9Db25zaXN0ZW50Q29uc3RydWN0b3JSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxDb25zdHJ1Y3RvclJldHVyblR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NvbnN0cnVjdG9yUmV0dXJuVHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXERpcmVjdEFsd2F5c1VzZWRNZXRob2RFeHRlbnNpb25Qcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9EaXJlY3RBbHdheXNVc2VkTWV0aG9kRXh0ZW5zaW9uUHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXEV4aXN0aW5nQ2xhc3Nlc0luVHlwZWhpbnRzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9FeGlzdGluZ0NsYXNzZXNJblR5cGVoaW50c1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXEZpbmFsUHJpdmF0ZU1ldGhvZFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvRmluYWxQcml2YXRlTWV0aG9kUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcSWxsZWdhbENvbnN0cnVjdG9yTWV0aG9kQ2FsbFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvSWxsZWdhbENvbnN0cnVjdG9yTWV0aG9kQ2FsbFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXElsbGVnYWxDb25zdHJ1Y3RvclN0YXRpY0NhbGxSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0lsbGVnYWxDb25zdHJ1Y3RvclN0YXRpY0NhbGxSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxJbmNvbXBhdGlibGVEZWZhdWx0UGFyYW1ldGVyVHlwZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvSW5jb21wYXRpYmxlRGVmYXVsdFBhcmFtZXRlclR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxMYXp5QWx3YXlzVXNlZE1ldGhvZEV4dGVuc2lvblByb3ZpZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0xhenlBbHdheXNVc2VkTWV0aG9kRXh0ZW5zaW9uUHJvdmlkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXE1ldGhvZEF0dHJpYnV0ZXNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NZXRob2RzL01ldGhvZEF0dHJpYnV0ZXNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxNZXRob2RDYWxsQ2hlY2snID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kQ2FsbENoZWNrLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxNZXRob2RDYWxsYWJsZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kQ2FsbGFibGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxNZXRob2RQYXJhbWV0ZXJDb21wYXJpc29uSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NZXRob2RzL01ldGhvZFBhcmFtZXRlckNvbXBhcmlzb25IZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXE1ldGhvZFNpZ25hdHVyZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kU2lnbmF0dXJlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcTWV0aG9kVmlzaWJpbGl0eUluSW50ZXJmYWNlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9NZXRob2RWaXNpYmlsaXR5SW5JbnRlcmZhY2VSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxNaXNzaW5nTWFnaWNTZXJpYWxpemF0aW9uTWV0aG9kc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvTWlzc2luZ01hZ2ljU2VyaWFsaXphdGlvbk1ldGhvZHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxNaXNzaW5nTWV0aG9kSW1wbGVtZW50YXRpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RJbXBsZW1lbnRhdGlvblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXE1pc3NpbmdNZXRob2RQYXJhbWV0ZXJUeXBlaGludFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvTWlzc2luZ01ldGhvZFBhcmFtZXRlclR5cGVoaW50UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcTWlzc2luZ01ldGhvZFJldHVyblR5cGVoaW50UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9NaXNzaW5nTWV0aG9kUmV0dXJuVHlwZWhpbnRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxNaXNzaW5nTWV0aG9kU2VsZk91dFR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RTZWxmT3V0VHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXE51bGxzYWZlTWV0aG9kQ2FsbFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvTnVsbHNhZmVNZXRob2RDYWxsUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcT3ZlcnJpZGluZ01ldGhvZFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvT3ZlcnJpZGluZ01ldGhvZFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXFJldHVyblR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NZXRob2RzL1JldHVyblR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxTdGF0aWNNZXRob2RDYWxsQ2hlY2snID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvU3RhdGljTWV0aG9kQ2FsbENoZWNrLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxTdGF0aWNNZXRob2RDYWxsYWJsZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL01ldGhvZHMvU3RhdGljTWV0aG9kQ2FsbGFibGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxNaXNzaW5nVHlwZWhpbnRDaGVjaycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvTWlzc2luZ1R5cGVoaW50Q2hlY2sucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE1pc3NpbmdcXE1pc3NpbmdSZXR1cm5SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9NaXNzaW5nL01pc3NpbmdSZXR1cm5SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxOYW1lc1xcVXNlZE5hbWVzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvTmFtZXMvVXNlZE5hbWVzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTmFtZXNwYWNlc1xcRXhpc3RpbmdOYW1lc0luR3JvdXBVc2VSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9OYW1lc3BhY2VzL0V4aXN0aW5nTmFtZXNJbkdyb3VwVXNlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTmFtZXNwYWNlc1xcRXhpc3RpbmdOYW1lc0luVXNlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvTmFtZXNwYWNlcy9FeGlzdGluZ05hbWVzSW5Vc2VSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxOb25JZ25vcmFibGVSdWxlRXJyb3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL05vbklnbm9yYWJsZVJ1bGVFcnJvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcTnVsbHNhZmVDaGVjaycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvTnVsbHNhZmVDaGVjay5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcT3BlcmF0b3JzXFxJbnZhbGlkQXNzaWduVmFyUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvT3BlcmF0b3JzL0ludmFsaWRBc3NpZ25WYXJSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxPcGVyYXRvcnNcXEludmFsaWRCaW5hcnlPcGVyYXRpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9PcGVyYXRvcnMvSW52YWxpZEJpbmFyeU9wZXJhdGlvblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE9wZXJhdG9yc1xcSW52YWxpZENvbXBhcmlzb25PcGVyYXRpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9PcGVyYXRvcnMvSW52YWxpZENvbXBhcmlzb25PcGVyYXRpb25SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxPcGVyYXRvcnNcXEludmFsaWRJbmNEZWNPcGVyYXRpb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9PcGVyYXRvcnMvSW52YWxpZEluY0RlY09wZXJhdGlvblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXE9wZXJhdG9yc1xcSW52YWxpZFVuYXJ5T3BlcmF0aW9uUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvT3BlcmF0b3JzL0ludmFsaWRVbmFyeU9wZXJhdGlvblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFBhcmFtZXRlckNhc3RhYmxlVG9TdHJpbmdDaGVjaycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ0NoZWNrLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXEFzc2VydFJ1bGVIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1BocERvYy9Bc3NlcnRSdWxlSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXENvbmRpdGlvbmFsUmV0dXJuVHlwZVJ1bGVIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1BocERvYy9Db25kaXRpb25hbFJldHVyblR5cGVSdWxlSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXEZ1bmN0aW9uQXNzZXJ0UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0Z1bmN0aW9uQXNzZXJ0UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxGdW5jdGlvbkNvbmRpdGlvbmFsUmV0dXJuVHlwZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1BocERvYy9GdW5jdGlvbkNvbmRpdGlvbmFsUmV0dXJuVHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcR2VuZXJpY0NhbGxhYmxlUnVsZUhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0dlbmVyaWNDYWxsYWJsZVJ1bGVIZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcSW5jb21wYXRpYmxlQ2xhc3NDb25zdGFudFBocERvY1R5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9QaHBEb2MvSW5jb21wYXRpYmxlQ2xhc3NDb25zdGFudFBocERvY1R5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXEluY29tcGF0aWJsZVBhcmFtSW1tZWRpYXRlbHlJbnZva2VkQ2FsbGFibGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9QaHBEb2MvSW5jb21wYXRpYmxlUGFyYW1JbW1lZGlhdGVseUludm9rZWRDYWxsYWJsZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcSW5jb21wYXRpYmxlUGhwRG9jVHlwZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1BocERvYy9JbmNvbXBhdGlibGVQaHBEb2NUeXBlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxJbmNvbXBhdGlibGVQcm9wZXJ0eVBocERvY1R5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9QaHBEb2MvSW5jb21wYXRpYmxlUHJvcGVydHlQaHBEb2NUeXBlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxJbmNvbXBhdGlibGVTZWxmT3V0VHlwZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1BocERvYy9JbmNvbXBhdGlibGVTZWxmT3V0VHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcSW52YWxpZFBIUFN0YW5Eb2NUYWdSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9QaHBEb2MvSW52YWxpZFBIUFN0YW5Eb2NUYWdSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXEludmFsaWRQaHBEb2NUYWdWYWx1ZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1BocERvYy9JbnZhbGlkUGhwRG9jVGFnVmFsdWVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXEludmFsaWRQaHBEb2NWYXJUYWdUeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0ludmFsaWRQaHBEb2NWYXJUYWdUeXBlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxJbnZhbGlkVGhyb3dzUGhwRG9jVmFsdWVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9QaHBEb2MvSW52YWxpZFRocm93c1BocERvY1ZhbHVlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxNZXRob2RBc3NlcnRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9QaHBEb2MvTWV0aG9kQXNzZXJ0UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxNZXRob2RDb25kaXRpb25hbFJldHVyblR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9QaHBEb2MvTWV0aG9kQ29uZGl0aW9uYWxSZXR1cm5UeXBlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxQaHBEb2NMaW5lSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9QaHBEb2MvUGhwRG9jTGluZUhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxSZXF1aXJlRXh0ZW5kc0NoZWNrJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9QaHBEb2MvUmVxdWlyZUV4dGVuZHNDaGVjay5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxSZXF1aXJlRXh0ZW5kc0RlZmluaXRpb25DbGFzc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1BocERvYy9SZXF1aXJlRXh0ZW5kc0RlZmluaXRpb25DbGFzc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcUmVxdWlyZUV4dGVuZHNEZWZpbml0aW9uVHJhaXRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9QaHBEb2MvUmVxdWlyZUV4dGVuZHNEZWZpbml0aW9uVHJhaXRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXFJlcXVpcmVJbXBsZW1lbnRzRGVmaW5pdGlvbkNsYXNzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUGhwRG9jL1JlcXVpcmVJbXBsZW1lbnRzRGVmaW5pdGlvbkNsYXNzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxSZXF1aXJlSW1wbGVtZW50c0RlZmluaXRpb25UcmFpdFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1BocERvYy9SZXF1aXJlSW1wbGVtZW50c0RlZmluaXRpb25UcmFpdFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcVW5yZXNvbHZhYmxlVHlwZUhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUGhwRG9jL1VucmVzb2x2YWJsZVR5cGVIZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcVmFyVGFnQ2hhbmdlZEV4cHJlc3Npb25UeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUGhwRG9jL1ZhclRhZ0NoYW5nZWRFeHByZXNzaW9uVHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcVmFyVGFnVHlwZVJ1bGVIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1BocERvYy9WYXJUYWdUeXBlUnVsZUhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxXcm9uZ1ZhcmlhYmxlTmFtZUluVmFyVGFnUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUGhwRG9jL1dyb25nVmFyaWFibGVOYW1lSW5WYXJUYWdSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQbGF5Z3JvdW5kXFxGdW5jdGlvbk5ldmVyUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUGxheWdyb3VuZC9GdW5jdGlvbk5ldmVyUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGxheWdyb3VuZFxcTWV0aG9kTmV2ZXJSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9QbGF5Z3JvdW5kL01ldGhvZE5ldmVyUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGxheWdyb3VuZFxcTmV2ZXJSdWxlSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9QbGF5Z3JvdW5kL05ldmVyUnVsZUhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUGxheWdyb3VuZFxcTm9QaHBDb2RlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUGxheWdyb3VuZC9Ob1BocENvZGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQbGF5Z3JvdW5kXFxOb3RBbmFseXNlZFRyYWl0UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUGxheWdyb3VuZC9Ob3RBbmFseXNlZFRyYWl0UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcQWNjZXNzUHJpdmF0ZVByb3BlcnR5VGhyb3VnaFN0YXRpY1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvQWNjZXNzUHJpdmF0ZVByb3BlcnR5VGhyb3VnaFN0YXRpY1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXEFjY2Vzc1Byb3BlcnRpZXNJbkFzc2lnblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvQWNjZXNzUHJvcGVydGllc0luQXNzaWduUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcQWNjZXNzUHJvcGVydGllc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvQWNjZXNzUHJvcGVydGllc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXEFjY2Vzc1N0YXRpY1Byb3BlcnRpZXNJbkFzc2lnblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvQWNjZXNzU3RhdGljUHJvcGVydGllc0luQXNzaWduUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcQWNjZXNzU3RhdGljUHJvcGVydGllc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvQWNjZXNzU3RhdGljUHJvcGVydGllc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXERlZmF1bHRWYWx1ZVR5cGVzQXNzaWduZWRUb1Byb3BlcnRpZXNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL0RlZmF1bHRWYWx1ZVR5cGVzQXNzaWduZWRUb1Byb3BlcnRpZXNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxEaXJlY3RSZWFkV3JpdGVQcm9wZXJ0aWVzRXh0ZW5zaW9uUHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvRGlyZWN0UmVhZFdyaXRlUHJvcGVydGllc0V4dGVuc2lvblByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxFeGlzdGluZ0NsYXNzZXNJblByb3BlcnRpZXNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL0V4aXN0aW5nQ2xhc3Nlc0luUHJvcGVydGllc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXEZvdW5kUHJvcGVydHlSZWZsZWN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL0ZvdW5kUHJvcGVydHlSZWZsZWN0aW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxJbnZhbGlkQ2FsbGFibGVQcm9wZXJ0eVR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL0ludmFsaWRDYWxsYWJsZVByb3BlcnR5VHlwZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXExhenlSZWFkV3JpdGVQcm9wZXJ0aWVzRXh0ZW5zaW9uUHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvTGF6eVJlYWRXcml0ZVByb3BlcnRpZXNFeHRlbnNpb25Qcm92aWRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcTWlzc2luZ1Byb3BlcnR5VHlwZWhpbnRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL01pc3NpbmdQcm9wZXJ0eVR5cGVoaW50UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcTWlzc2luZ1JlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eUFzc2lnblJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvTWlzc2luZ1JlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eUFzc2lnblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXE1pc3NpbmdSZWFkT25seVByb3BlcnR5QXNzaWduUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9NaXNzaW5nUmVhZE9ubHlQcm9wZXJ0eUFzc2lnblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXE51bGxzYWZlUHJvcGVydHlGZXRjaFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvTnVsbHNhZmVQcm9wZXJ0eUZldGNoUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcT3ZlcnJpZGluZ1Byb3BlcnR5UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9PdmVycmlkaW5nUHJvcGVydHlSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxQcm9wZXJ0aWVzSW5JbnRlcmZhY2VSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1Byb3BlcnRpZXNJbkludGVyZmFjZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXFByb3BlcnR5QXR0cmlidXRlc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUHJvcGVydHlBdHRyaWJ1dGVzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcUHJvcGVydHlEZXNjcmlwdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1Byb3BlcnR5RGVzY3JpcHRvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcUHJvcGVydHlSZWZsZWN0aW9uRmluZGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1Byb3BlcnR5UmVmbGVjdGlvbkZpbmRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcUmVhZE9ubHlCeVBocERvY1Byb3BlcnR5QXNzaWduUmVmUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9SZWFkT25seUJ5UGhwRG9jUHJvcGVydHlBc3NpZ25SZWZSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxSZWFkT25seUJ5UGhwRG9jUHJvcGVydHlBc3NpZ25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1JlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eUFzc2lnblJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXFJlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZE9ubHlCeVBocERvY1Byb3BlcnR5UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcUmVhZE9ubHlQcm9wZXJ0eUFzc2lnblJlZlJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZE9ubHlQcm9wZXJ0eUFzc2lnblJlZlJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXFJlYWRPbmx5UHJvcGVydHlBc3NpZ25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1JlYWRPbmx5UHJvcGVydHlBc3NpZ25SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxSZWFkT25seVByb3BlcnR5UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9SZWFkT25seVByb3BlcnR5UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcUmVhZFdyaXRlUHJvcGVydGllc0V4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9SZWFkV3JpdGVQcm9wZXJ0aWVzRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxSZWFkV3JpdGVQcm9wZXJ0aWVzRXh0ZW5zaW9uUHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZFdyaXRlUHJvcGVydGllc0V4dGVuc2lvblByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxSZWFkaW5nV3JpdGVPbmx5UHJvcGVydGllc1J1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZGluZ1dyaXRlT25seVByb3BlcnRpZXNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxUeXBlc0Fzc2lnbmVkVG9Qcm9wZXJ0aWVzUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9UeXBlc0Fzc2lnbmVkVG9Qcm9wZXJ0aWVzUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcVW5pbml0aWFsaXplZFByb3BlcnR5UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9VbmluaXRpYWxpemVkUHJvcGVydHlSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxXcml0aW5nVG9SZWFkT25seVByb3BlcnRpZXNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1dyaXRpbmdUb1JlYWRPbmx5UHJvcGVydGllc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFB1cmVcXEZ1bmN0aW9uUHVyaXR5Q2hlY2snID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1B1cmUvRnVuY3Rpb25QdXJpdHlDaGVjay5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUHVyZVxcUHVyZUZ1bmN0aW9uUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUHVyZS9QdXJlRnVuY3Rpb25SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxQdXJlXFxQdXJlTWV0aG9kUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUHVyZS9QdXJlTWV0aG9kUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUmVnZXhwXFxSZWd1bGFyRXhwcmVzc2lvblBhdHRlcm5SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SZWdleHAvUmVndWxhckV4cHJlc3Npb25QYXR0ZXJuUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUmVnZXhwXFxSZWd1bGFyRXhwcmVzc2lvblF1b3RpbmdSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SZWdleHAvUmVndWxhckV4cHJlc3Npb25RdW90aW5nUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUmVnaXN0cnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1JlZ2lzdHJ5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yQnVpbGRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9yQnVpbGRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxMDEnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTAxLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxMDMnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTAzLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxMDUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTA1LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxMDcnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTA3LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxMDknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTA5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxMScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTExJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjExMS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTEzJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjExMy5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTE1JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjExNS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTE3JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjExNy5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTE5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjExOS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTIxJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEyMS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTIzJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEyMy5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTI1JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEyNS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTI3JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEyNy5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTMnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTMucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjE1JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjE1LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxNycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxNy5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTkucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjIxJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjIxLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IyMycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IyMy5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMjUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMjUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjI3JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjI3LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IyOScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IyOS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IzLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IzMScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IzMS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMzMnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMzMucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjM1JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjM1LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IzNycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IzNy5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMzknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMzkucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjQxJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjQxLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I0MycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I0My5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNDUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNDUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjQ3JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjQ3LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I0OScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I0OS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I1LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I1MScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I1MS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNTMnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNTMucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjU1JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjU1LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I1NycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I1Ny5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNTknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNTkucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjYxJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjYxLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I2MycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I2My5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNjUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNjUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjY3JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjY3LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I2OScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I2OS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I3LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I3MScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I3MS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNzMnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNzMucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjc1JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjc1LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I3NycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I3Ny5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNzknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNzkucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjgxJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjgxLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I4MycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I4My5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yODUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yODUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjg3JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjg3LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I4OScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I4OS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yOScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I5MScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I5MS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yOTMnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yOTMucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjk1JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjk1LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I5NycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I5Ny5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yOTknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yOTkucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVMZXZlbEhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvUnVsZUxldmVsSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlTGV2ZWxIZWxwZXJBY2NlcHRzUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9SdWxlTGV2ZWxIZWxwZXJBY2NlcHRzUmVzdWx0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxUaXBSdWxlRXJyb3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1RpcFJ1bGVFcnJvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcVG9vV2lkZVR5cGVoaW50c1xcVG9vV2lkZUFycm93RnVuY3Rpb25SZXR1cm5UeXBlaGludFJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZUFycm93RnVuY3Rpb25SZXR1cm5UeXBlaGludFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFRvb1dpZGVUeXBlaGludHNcXFRvb1dpZGVDbG9zdXJlUmV0dXJuVHlwZWhpbnRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Ub29XaWRlVHlwZWhpbnRzL1Rvb1dpZGVDbG9zdXJlUmV0dXJuVHlwZWhpbnRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxUb29XaWRlVHlwZWhpbnRzXFxUb29XaWRlRnVuY3Rpb25QYXJhbWV0ZXJPdXRUeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvVG9vV2lkZVR5cGVoaW50cy9Ub29XaWRlRnVuY3Rpb25QYXJhbWV0ZXJPdXRUeXBlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcVG9vV2lkZVR5cGVoaW50c1xcVG9vV2lkZUZ1bmN0aW9uUmV0dXJuVHlwZWhpbnRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Ub29XaWRlVHlwZWhpbnRzL1Rvb1dpZGVGdW5jdGlvblJldHVyblR5cGVoaW50UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcVG9vV2lkZVR5cGVoaW50c1xcVG9vV2lkZU1ldGhvZFBhcmFtZXRlck91dFR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Ub29XaWRlVHlwZWhpbnRzL1Rvb1dpZGVNZXRob2RQYXJhbWV0ZXJPdXRUeXBlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcVG9vV2lkZVR5cGVoaW50c1xcVG9vV2lkZU1ldGhvZFJldHVyblR5cGVoaW50UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvVG9vV2lkZVR5cGVoaW50cy9Ub29XaWRlTWV0aG9kUmV0dXJuVHlwZWhpbnRSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxUb29XaWRlVHlwZWhpbnRzXFxUb29XaWRlUGFyYW1ldGVyT3V0VHlwZUNoZWNrJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Ub29XaWRlVHlwZWhpbnRzL1Rvb1dpZGVQYXJhbWV0ZXJPdXRUeXBlQ2hlY2sucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFRvb1dpZGVUeXBlaGludHNcXFRvb1dpZGVQcm9wZXJ0eVR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9Ub29XaWRlVHlwZWhpbnRzL1Rvb1dpZGVQcm9wZXJ0eVR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxUcmFpdHNcXENvbmZsaWN0aW5nVHJhaXRDb25zdGFudHNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9UcmFpdHMvQ29uZmxpY3RpbmdUcmFpdENvbnN0YW50c1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFRyYWl0c1xcQ29uc3RhbnRzSW5UcmFpdHNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9UcmFpdHMvQ29uc3RhbnRzSW5UcmFpdHNSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxUcmFpdHNcXE5vdEFuYWx5c2VkVHJhaXRSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9UcmFpdHMvTm90QW5hbHlzZWRUcmFpdFJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFRyYWl0c1xcVHJhaXREZWNsYXJhdGlvbkNvbGxlY3RvcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvVHJhaXRzL1RyYWl0RGVjbGFyYXRpb25Db2xsZWN0b3IucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFRyYWl0c1xcVHJhaXRVc2VDb2xsZWN0b3InID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1RyYWl0cy9UcmFpdFVzZUNvbGxlY3Rvci5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcVHlwZXNcXEludmFsaWRUeXBlc0luVW5pb25SdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9UeXBlcy9JbnZhbGlkVHlwZXNJblVuaW9uUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcVW51c2VkRnVuY3Rpb25QYXJhbWV0ZXJzQ2hlY2snID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1VudXNlZEZ1bmN0aW9uUGFyYW1ldGVyc0NoZWNrLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxWYXJpYWJsZXNcXENvbXBhY3RWYXJpYWJsZXNSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9WYXJpYWJsZXMvQ29tcGFjdFZhcmlhYmxlc1J1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFZhcmlhYmxlc1xcRGVmaW5lZFZhcmlhYmxlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvVmFyaWFibGVzL0RlZmluZWRWYXJpYWJsZVJ1bGUucGhwJywKICAgICAgICAnUEhQU3RhblxcUnVsZXNcXFZhcmlhYmxlc1xcRW1wdHlSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9WYXJpYWJsZXMvRW1wdHlSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxWYXJpYWJsZXNcXElzc2V0UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvVmFyaWFibGVzL0lzc2V0UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcVmFyaWFibGVzXFxOdWxsQ29hbGVzY2VSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9WYXJpYWJsZXMvTnVsbENvYWxlc2NlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcVmFyaWFibGVzXFxQYXJhbWV0ZXJPdXRBc3NpZ25lZFR5cGVSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9WYXJpYWJsZXMvUGFyYW1ldGVyT3V0QXNzaWduZWRUeXBlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcVmFyaWFibGVzXFxQYXJhbWV0ZXJPdXRFeGVjdXRpb25FbmRUeXBlUnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvVmFyaWFibGVzL1BhcmFtZXRlck91dEV4ZWN1dGlvbkVuZFR5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxWYXJpYWJsZXNcXFRocm93VHlwZVJ1bGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1J1bGVzL1ZhcmlhYmxlcy9UaHJvd1R5cGVSdWxlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFJ1bGVzXFxWYXJpYWJsZXNcXFVuc2V0UnVsZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvUnVsZXMvVmFyaWFibGVzL1Vuc2V0UnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcVmFyaWFibGVzXFxWYXJpYWJsZUNsb25pbmdSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9WYXJpYWJsZXMvVmFyaWFibGVDbG9uaW5nUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxSdWxlc1xcV2hpdGVzcGFjZVxcRmlsZVdoaXRlc3BhY2VSdWxlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9SdWxlcy9XaGl0ZXNwYWNlL0ZpbGVXaGl0ZXNwYWNlUnVsZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxTaG91bGROb3RIYXBwZW5FeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1Nob3VsZE5vdEhhcHBlbkV4Y2VwdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUZXN0aW5nXFxFcnJvckZvcm1hdHRlclRlc3RDYXNlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UZXN0aW5nL0Vycm9yRm9ybWF0dGVyVGVzdENhc2UucGhwJywKICAgICAgICAnUEhQU3RhblxcVGVzdGluZ1xcTGV2ZWxzVGVzdENhc2UnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1Rlc3RpbmcvTGV2ZWxzVGVzdENhc2UucGhwJywKICAgICAgICAnUEhQU3RhblxcVGVzdGluZ1xcUEhQU3RhblRlc3RDYXNlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UZXN0aW5nL1BIUFN0YW5UZXN0Q2FzZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUZXN0aW5nXFxSdWxlVGVzdENhc2UnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1Rlc3RpbmcvUnVsZVRlc3RDYXNlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFRlc3RpbmdcXFRlc3RDYXNlU291cmNlTG9jYXRvckZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1Rlc3RpbmcvVGVzdENhc2VTb3VyY2VMb2NhdG9yRmFjdG9yeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUZXN0aW5nXFxUeXBlSW5mZXJlbmNlVGVzdENhc2UnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1Rlc3RpbmcvVHlwZUluZmVyZW5jZVRlc3RDYXNlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFRyaW5hcnlMb2dpYycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHJpbmFyeUxvZ2ljLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEFjY2VwdHNSZXN1bHQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQWNjZXB0c1Jlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxBY2Nlc3NvcnlcXEFjY2Vzc29yeUFycmF5TGlzdFR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeUFycmF5TGlzdFR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxBY2Nlc3NvcnlMaXRlcmFsU3RyaW5nVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvQWNjZXNzb3J5TGl0ZXJhbFN0cmluZ1R5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxBY2Nlc3NvcnlMb3dlcmNhc2VTdHJpbmdUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9BY2Nlc3NvcnlMb3dlcmNhc2VTdHJpbmdUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEFjY2Vzc29yeVxcQWNjZXNzb3J5Tm9uRW1wdHlTdHJpbmdUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9BY2Nlc3NvcnlOb25FbXB0eVN0cmluZ1R5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxBY2Nlc3NvcnlOb25GYWxzeVN0cmluZ1R5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeU5vbkZhbHN5U3RyaW5nVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxBY2Nlc3NvcnlcXEFjY2Vzc29yeU51bWVyaWNTdHJpbmdUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9BY2Nlc3NvcnlOdW1lcmljU3RyaW5nVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxBY2Nlc3NvcnlcXEFjY2Vzc29yeVR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeVR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxBY2Nlc3NvcnlVcHBlcmNhc2VTdHJpbmdUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9BY2Nlc3NvcnlVcHBlcmNhc2VTdHJpbmdUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEFjY2Vzc29yeVxcSGFzTWV0aG9kVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvSGFzTWV0aG9kVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxBY2Nlc3NvcnlcXEhhc09mZnNldFR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0hhc09mZnNldFR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxIYXNPZmZzZXRWYWx1ZVR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0hhc09mZnNldFZhbHVlVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxBY2Nlc3NvcnlcXEhhc1Byb3BlcnR5VHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvSGFzUHJvcGVydHlUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEFjY2Vzc29yeVxcTm9uRW1wdHlBcnJheVR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L05vbkVtcHR5QXJyYXlUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEFjY2Vzc29yeVxcT3ZlcnNpemVkQXJyYXlUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9PdmVyc2l6ZWRBcnJheVR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQXJyYXlUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0FycmF5VHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxCZW5ldm9sZW50VW5pb25UeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0JlbmV2b2xlbnRVbmlvblR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQml0d2lzZUZsYWdIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQml0d2lzZUZsYWdIZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQm9vbGVhblR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQm9vbGVhblR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQ2FsbGFibGVUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0NhbGxhYmxlVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxDYWxsYWJsZVR5cGVIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQ2FsbGFibGVUeXBlSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXENpcmN1bGFyVHlwZUFsaWFzRGVmaW5pdGlvbkV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9DaXJjdWxhclR5cGVBbGlhc0RlZmluaXRpb25FeGNlcHRpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQ2lyY3VsYXJUeXBlQWxpYXNFcnJvclR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQ2lyY3VsYXJUeXBlQWxpYXNFcnJvclR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQ2xhc3NTdHJpbmdUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0NsYXNzU3RyaW5nVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxDbG9zdXJlVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9DbG9zdXJlVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxDbG9zdXJlVHlwZUZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQ2xvc3VyZVR5cGVGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXENvbXBvdW5kVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9Db21wb3VuZFR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQ29uZGl0aW9uYWxUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0NvbmRpdGlvbmFsVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxDb25kaXRpb25hbFR5cGVGb3JQYXJhbWV0ZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQ29uZGl0aW9uYWxUeXBlRm9yUGFyYW1ldGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXENvbnN0YW50U2NhbGFyVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9Db25zdGFudFNjYWxhclR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQ29uc3RhbnRUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0NvbnN0YW50VHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxDb25zdGFudFR5cGVIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQ29uc3RhbnRUeXBlSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXENvbnN0YW50XFxDb25zdGFudEFycmF5VHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9Db25zdGFudC9Db25zdGFudEFycmF5VHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxDb25zdGFudFxcQ29uc3RhbnRBcnJheVR5cGVBbmRNZXRob2QnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRBcnJheVR5cGVBbmRNZXRob2QucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQ29uc3RhbnRcXENvbnN0YW50QXJyYXlUeXBlQnVpbGRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9Db25zdGFudC9Db25zdGFudEFycmF5VHlwZUJ1aWxkZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQ29uc3RhbnRcXENvbnN0YW50Qm9vbGVhblR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRCb29sZWFuVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxDb25zdGFudFxcQ29uc3RhbnRGbG9hdFR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRGbG9hdFR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcQ29uc3RhbnRcXENvbnN0YW50SW50ZWdlclR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRJbnRlZ2VyVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxDb25zdGFudFxcQ29uc3RhbnRTY2FsYXJUb0Jvb2xlYW5UcmFpdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9Db25zdGFudC9Db25zdGFudFNjYWxhclRvQm9vbGVhblRyYWl0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXENvbnN0YW50XFxDb25zdGFudFN0cmluZ1R5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRTdHJpbmdUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXENvbnN0YW50XFxPdmVyc2l6ZWRBcnJheUJ1aWxkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvQ29uc3RhbnQvT3ZlcnNpemVkQXJyYXlCdWlsZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXERpcmVjdFR5cGVBbGlhc1Jlc29sdmVyUHJvdmlkZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvRGlyZWN0VHlwZUFsaWFzUmVzb2x2ZXJQcm92aWRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxEeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0R5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcRHluYW1pY0Z1bmN0aW9uVGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0R5bmFtaWNGdW5jdGlvblRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxEeW5hbWljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9EeW5hbWljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxEeW5hbWljTWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0R5bmFtaWNNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb25SZWdpc3RyeScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvblJlZ2lzdHJ5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXER5bmFtaWNTdGF0aWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0R5bmFtaWNTdGF0aWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXER5bmFtaWNTdGF0aWNNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvRHluYW1pY1N0YXRpY01ldGhvZFRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxFbnVtXFxFbnVtQ2FzZU9iamVjdFR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvRW51bS9FbnVtQ2FzZU9iamVjdFR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcRXJyb3JUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0Vycm9yVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxFeHBvbmVudGlhdGVIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvRXhwb25lbnRpYXRlSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEV4cHJlc3Npb25UeXBlUmVzb2x2ZXJFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvRXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxFeHByZXNzaW9uVHlwZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvRXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEZpbGVUeXBlTWFwcGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0ZpbGVUeXBlTWFwcGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEZsb2F0VHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9GbG9hdFR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcRnVuY3Rpb25QYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9GdW5jdGlvblBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEZ1bmN0aW9uUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9GdW5jdGlvblBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9GdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyYWxpemVQcmVjaXNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJhbGl6ZVByZWNpc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljVHlwZVZhcmlhYmxlUmVzb2x2ZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpY1R5cGVWYXJpYWJsZVJlc29sdmVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXEdlbmVyaWNDbGFzc1N0cmluZ1R5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9HZW5lcmljQ2xhc3NTdHJpbmdUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXEdlbmVyaWNPYmplY3RUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0dlbmVyaWMvR2VuZXJpY09iamVjdFR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcR2VuZXJpY1N0YXRpY1R5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9HZW5lcmljU3RhdGljVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZUFycmF5VHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlQXJyYXlUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlQmVuZXZvbGVudFVuaW9uVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlQmVuZXZvbGVudFVuaW9uVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZUJvb2xlYW5UeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVCb29sZWFuVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZUNvbnN0YW50QXJyYXlUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVDb25zdGFudEFycmF5VHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZUNvbnN0YW50SW50ZWdlclR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUNvbnN0YW50SW50ZWdlclR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVDb25zdGFudFN0cmluZ1R5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUNvbnN0YW50U3RyaW5nVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZUZsb2F0VHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlRmxvYXRUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlR2VuZXJpY09iamVjdFR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUdlbmVyaWNPYmplY3RUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlSW50ZWdlclR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUludGVnZXJUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlSW50ZXJzZWN0aW9uVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlSW50ZXJzZWN0aW9uVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZUl0ZXJhYmxlVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlSXRlcmFibGVUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlS2V5T2ZUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVLZXlPZlR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVNaXhlZFR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZU1peGVkVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZU9iamVjdFNoYXBlVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlT2JqZWN0U2hhcGVUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlT2JqZWN0VHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlT2JqZWN0VHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZU9iamVjdFdpdGhvdXRDbGFzc1R5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZU9iamVjdFdpdGhvdXRDbGFzc1R5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVTdHJpY3RNaXhlZFR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVN0cmljdE1peGVkVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZVN0cmluZ1R5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVN0cmluZ1R5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlVHlwZUFyZ3VtZW50U3RyYXRlZ3knID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVBcmd1bWVudFN0cmF0ZWd5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlVHlwZUZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlVHlwZUhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZUhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZVR5cGVNYXAnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVNYXAucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVUeXBlUGFyYW1ldGVyU3RyYXRlZ3knID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVQYXJhbWV0ZXJTdHJhdGVneS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZVR5cGVSZWZlcmVuY2UnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVSZWZlcmVuY2UucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVUeXBlU2NvcGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVTY29wZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZVR5cGVTdHJhdGVneScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZVN0cmF0ZWd5LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlVHlwZVRyYWl0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlVHJhaXQucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVUeXBlVmFyaWFuY2UnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVWYXJpYW5jZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZVR5cGVWYXJpYW5jZU1hcCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZVZhcmlhbmNlTWFwLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlVW5pb25UeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVVbmlvblR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVHlwZVByb2plY3Rpb25IZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvR2VuZXJpYy9UeXBlUHJvamVjdGlvbkhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxIZWxwZXJcXEdldFRlbXBsYXRlVHlwZVR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvSGVscGVyL0dldFRlbXBsYXRlVHlwZVR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcSW50ZWdlclJhbmdlVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9JbnRlZ2VyUmFuZ2VUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEludGVnZXJUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0ludGVnZXJUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEludGVyc2VjdGlvblR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvSW50ZXJzZWN0aW9uVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxJc1N1cGVyVHlwZU9mUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0lzU3VwZXJUeXBlT2ZSZXN1bHQucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcSXRlcmFibGVUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0l0ZXJhYmxlVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxKdXN0TnVsbGFibGVUeXBlVHJhaXQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvSnVzdE51bGxhYmxlVHlwZVRyYWl0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXEtleU9mVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9LZXlPZlR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcTGF0ZVJlc29sdmFibGVUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL0xhdGVSZXNvbHZhYmxlVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxMYXp5VHlwZUFsaWFzUmVzb2x2ZXJQcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9MYXp5VHlwZUFsaWFzUmVzb2x2ZXJQcm92aWRlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxMb29zZUNvbXBhcmlzb25IZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvTG9vc2VDb21wYXJpc29uSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXE1ldGhvZFBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL01ldGhvZFBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXE1ldGhvZFBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvTWV0aG9kUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxNZXRob2RUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9NZXRob2RUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxNaXhlZFR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvTWl4ZWRUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXE5ldmVyVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9OZXZlclR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcTmV3T2JqZWN0VHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9OZXdPYmplY3RUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXE5vbkFjY2VwdGluZ05ldmVyVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9Ob25BY2NlcHRpbmdOZXZlclR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcTm9uZXhpc3RlbnRQYXJlbnRDbGFzc1R5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvTm9uZXhpc3RlbnRQYXJlbnRDbGFzc1R5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcTnVsbFR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvTnVsbFR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcT2JqZWN0U2hhcGVQcm9wZXJ0eVJlZmxlY3Rpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvT2JqZWN0U2hhcGVQcm9wZXJ0eVJlZmxlY3Rpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcT2JqZWN0U2hhcGVUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL09iamVjdFNoYXBlVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxPYmplY3RUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL09iamVjdFR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcT2JqZWN0V2l0aG91dENsYXNzVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9PYmplY3RXaXRob3V0Q2xhc3NUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXE9mZnNldEFjY2Vzc1R5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvT2Zmc2V0QWNjZXNzVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxPcGVyYXRvclR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL09wZXJhdG9yVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcT3BlcmF0b3JUeXBlU3BlY2lmeWluZ0V4dGVuc2lvblJlZ2lzdHJ5JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL09wZXJhdG9yVHlwZVNwZWNpZnlpbmdFeHRlbnNpb25SZWdpc3RyeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQYXJzZXJOb2RlVHlwZVRvUEhQU3RhblR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGFyc2VyTm9kZVR5cGVUb1BIUFN0YW5UeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQWJzRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQWJzRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFyZ3VtZW50QmFzZWRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0FyZ3VtZW50QmFzZWRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUNoYW5nZUtleUNhc2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0FycmF5Q2hhbmdlS2V5Q2FzZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5Q2h1bmtGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0FycmF5Q2h1bmtGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUNvbHVtbkZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlDb2x1bW5GdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUNvbWJpbmVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0FycmF5Q29tYmluZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5Q3VycmVudER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheUN1cnJlbnREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5RmlsbEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlGaWxsRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlGaWxsS2V5c0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlGaWxsS2V5c0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5RmlsdGVyRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheUZpbHRlckZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5RmlsdGVyRnVuY3Rpb25SZXR1cm5UeXBlSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheUZpbHRlckZ1bmN0aW9uUmV0dXJuVHlwZUhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5RmluZEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlGaW5kRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlGaW5kS2V5RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheUZpbmRLZXlGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUZsaXBGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0FycmF5RmxpcEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5SW50ZXJzZWN0S2V5RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheUludGVyc2VjdEtleUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5S2V5RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0FycmF5S2V5RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUtleUV4aXN0c0Z1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0FycmF5S2V5RXhpc3RzRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5S2V5Rmlyc3REeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlLZXlGaXJzdER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlLZXlMYXN0RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0FycmF5S2V5TGFzdER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlLZXlzRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlLZXlzRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5TWFwRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheU1hcEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5TWVyZ2VGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheU1lcmdlRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5TmV4dER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheU5leHREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5UG9pbnRlckZ1bmN0aW9uc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheVBvaW50ZXJGdW5jdGlvbnNEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5UG9wRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheVBvcEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5UmFuZEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlSYW5kRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlSZWR1Y2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0FycmF5UmVkdWNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlSZXBsYWNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheVJlcGxhY2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheVJldmVyc2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0FycmF5UmV2ZXJzZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5U2VhcmNoRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlTZWFyY2hGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlTZWFyY2hGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheVNlYXJjaEZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheVNoaWZ0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheVNoaWZ0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlTbGljZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlTbGljZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5U3BsaWNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheVNwbGljZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5U3VtRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlTdW1GdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlWYWx1ZXNGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9BcnJheVZhbHVlc0Z1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBc3NlcnRGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9Bc3NlcnRGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXNzZXJ0VGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9Bc3NlcnRUaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxCYWNrZWRFbnVtRnJvbU1ldGhvZER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9CYWNrZWRFbnVtRnJvbU1ldGhvZER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQmFzZTY0RGVjb2RlRHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQmFzZTY0RGVjb2RlRHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEJjTWF0aFN0cmluZ09yTnVsbFJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0JjTWF0aFN0cmluZ09yTnVsbFJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxDbGFzc0V4aXN0c0Z1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0NsYXNzRXhpc3RzRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXENsYXNzSW1wbGVtZW50c0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQ2xhc3NJbXBsZW1lbnRzRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQ2xvc3VyZUJpbmREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQ2xvc3VyZUJpbmREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXENsb3N1cmVCaW5kVG9EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQ2xvc3VyZUJpbmRUb0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQ2xvc3VyZUZyb21DYWxsYWJsZUR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9DbG9zdXJlRnJvbUNhbGxhYmxlRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxDb21wYWN0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9Db21wYWN0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQ29uc3RhbnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0NvbnN0YW50RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQ29uc3RhbnRIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0NvbnN0YW50SGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQ291bnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0NvdW50RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQ291bnRGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9Db3VudEZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxDdHlwZURpZ2l0RnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvQ3R5cGVEaWdpdEZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxDdXJsR2V0aW5mb0Z1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0N1cmxHZXRpbmZvRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERhdGVGb3JtYXRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0RhdGVGb3JtYXRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEYXRlRm9ybWF0TWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvRGF0ZUZvcm1hdE1ldGhvZFJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEYXRlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9EYXRlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcRGF0ZUZ1bmN0aW9uUmV0dXJuVHlwZUhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvRGF0ZUZ1bmN0aW9uUmV0dXJuVHlwZUhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERhdGVJbnRlcnZhbENvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9EYXRlSW50ZXJ2YWxDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERhdGVJbnRlcnZhbER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9EYXRlSW50ZXJ2YWxEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERhdGVQZXJpb2RDb25zdHJ1Y3RvclJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0RhdGVQZXJpb2RDb25zdHJ1Y3RvclJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEYXRlVGltZUNvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9EYXRlVGltZUNvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcRGF0ZVRpbWVDcmVhdGVEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvRGF0ZVRpbWVDcmVhdGVEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERhdGVUaW1lRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0RhdGVUaW1lRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEYXRlVGltZU1vZGlmeU1ldGhvZFRocm93VHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvRGF0ZVRpbWVNb2RpZnlNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEYXRlVGltZU1vZGlmeVJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0RhdGVUaW1lTW9kaWZ5UmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERhdGVUaW1lU3ViTWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9EYXRlVGltZVN1Yk1ldGhvZFRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERhdGVUaW1lWm9uZUNvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9EYXRlVGltZVpvbmVDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERlZmluZUNvbnN0YW50VHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0RlZmluZUNvbnN0YW50VHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEZWZpbmVkQ29uc3RhbnRUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvRGVmaW5lZENvbnN0YW50VHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEaW9TdGF0RHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvRGlvU3RhdER5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEc01hcER5bmFtaWNNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0RzTWFwRHluYW1pY01ldGhvZFRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERzTWFwRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0RzTWFwRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxFeHBsb2RlRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvRXhwbG9kZUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxGaWx0ZXJGdW5jdGlvblJldHVyblR5cGVIZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0ZpbHRlckZ1bmN0aW9uUmV0dXJuVHlwZUhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEZpbHRlcklucHV0RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0ZpbHRlcklucHV0RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxGaWx0ZXJWYXJBcnJheUR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9GaWx0ZXJWYXJBcnJheUR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcRmlsdGVyVmFyRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0ZpbHRlclZhckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcRnVuY3Rpb25FeGlzdHNGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9GdW5jdGlvbkV4aXN0c0Z1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxHZXRDYWxsZWRDbGFzc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9HZXRDYWxsZWRDbGFzc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcR2V0Q2xhc3NEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvR2V0Q2xhc3NEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEdldERlYnVnVHlwZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvR2V0RGVidWdUeXBlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcR2V0RGVmaW5lZFZhcnNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0dldERlZmluZWRWYXJzRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcR2V0UGFyZW50Q2xhc3NEeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9HZXRQYXJlbnRDbGFzc0R5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxHZXR0aW1lb2ZkYXlEeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9HZXR0aW1lb2ZkYXlEeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcR2V0dHlwZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvR2V0dHlwZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEhhc2hGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9IYXNoRnVuY3Rpb25zUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEhpZ2hsaWdodFN0cmluZ0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9IaWdobGlnaHRTdHJpbmdEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEhydGltZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvSHJ0aW1lRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcSW1wbG9kZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvSW1wbG9kZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEluQXJyYXlGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9JbkFycmF5RnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEluaUdldFJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0luaUdldFJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxJbnRkaXZUaHJvd1R5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0ludGRpdlRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXElzQUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0lzQUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxJc0FGdW5jdGlvblR5cGVTcGVjaWZ5aW5nSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9Jc0FGdW5jdGlvblR5cGVTcGVjaWZ5aW5nSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcSXNBcnJheUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0lzQXJyYXlGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcSXNDYWxsYWJsZUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0lzQ2FsbGFibGVGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcSXNJdGVyYWJsZUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0lzSXRlcmFibGVGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcSXNTdWJjbGFzc09mRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvSXNTdWJjbGFzc09mRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEl0ZXJhdG9yVG9BcnJheUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvSXRlcmF0b3JUb0FycmF5RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcSnNvblRocm93T25FcnJvckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9Kc29uVGhyb3dPbkVycm9yRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxKc29uVGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9Kc29uVGhyb3dUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcTHRyaW1GdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL0x0cmltRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcTWJDb252ZXJ0RW5jb2RpbmdGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL01iQ29udmVydEVuY29kaW5nRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcTWJGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9NYkZ1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxNYkZ1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb25UcmFpdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvTWJGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uVHJhaXQucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxNYlN0cmxlbkZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvTWJTdHJsZW5GdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxNYlN1YnN0aXR1dGVDaGFyYWN0ZXJEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvTWJTdWJzdGl0dXRlQ2hhcmFjdGVyRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxNZXRob2RFeGlzdHNUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvTWV0aG9kRXhpc3RzVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxNaWNyb3RpbWVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL01pY3JvdGltZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXE1pbk1heEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvTWluTWF4RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcTm9uRW1wdHlTdHJpbmdGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9Ob25FbXB0eVN0cmluZ0Z1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxOdW1iZXJGb3JtYXRGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9OdW1iZXJGb3JtYXRGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcT3BlblNzbEVuY3J5cHRQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9PcGVuU3NsRW5jcnlwdFBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxQYXJzZVN0clBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1BhcnNlU3RyUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFBhcnNlVXJsRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvUGFyc2VVcmxGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUGF0aGluZm9GdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9QYXRoaW5mb0Z1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxQb3dGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1Bvd0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFByZWdGaWx0ZXJGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1ByZWdGaWx0ZXJGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxQcmVnTWF0Y2hQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9QcmVnTWF0Y2hQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUHJlZ01hdGNoVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1ByZWdNYXRjaFR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUHJlZ1JlcGxhY2VDYWxsYmFja0Nsb3N1cmVUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9QcmVnUmVwbGFjZUNhbGxiYWNrQ2xvc3VyZVR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxQcmVnU3BsaXREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvUHJlZ1NwbGl0RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxQcm9wZXJ0eUV4aXN0c1R5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9Qcm9wZXJ0eUV4aXN0c1R5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUmFuZG9tSW50RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9SYW5kb21JbnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxSYW5nZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvUmFuZ2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxSZWZsZWN0aW9uQ2xhc3NDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvUmVmbGVjdGlvbkNsYXNzQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxSZWZsZWN0aW9uQ2xhc3NJc1N1YmNsYXNzT2ZUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvUmVmbGVjdGlvbkNsYXNzSXNTdWJjbGFzc09mVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxSZWZsZWN0aW9uRnVuY3Rpb25Db25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvUmVmbGVjdGlvbkZ1bmN0aW9uQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxSZWZsZWN0aW9uR2V0QXR0cmlidXRlc01ldGhvZFJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1JlZmxlY3Rpb25HZXRBdHRyaWJ1dGVzTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFJlZmxlY3Rpb25NZXRob2RDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvUmVmbGVjdGlvbk1ldGhvZENvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUmVmbGVjdGlvblByb3BlcnR5Q29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1JlZmxlY3Rpb25Qcm9wZXJ0eUNvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUmVnZXhBcnJheVNoYXBlTWF0Y2hlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvUmVnZXhBcnJheVNoYXBlTWF0Y2hlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFJlcGxhY2VGdW5jdGlvbnNEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvUmVwbGFjZUZ1bmN0aW9uc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUm91bmRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1JvdW5kRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcU2V0VHlwZUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1NldFR5cGVGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcU2ltcGxlWE1MRWxlbWVudEFzWE1MTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvU2ltcGxlWE1MRWxlbWVudEFzWE1MTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFNpbXBsZVhNTEVsZW1lbnRDbGFzc1Byb3BlcnR5UmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvU2ltcGxlWE1MRWxlbWVudENsYXNzUHJvcGVydHlSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcU2ltcGxlWE1MRWxlbWVudENvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9TaW1wbGVYTUxFbGVtZW50Q29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxTaW1wbGVYTUxFbGVtZW50WHBhdGhNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9TaW1wbGVYTUxFbGVtZW50WHBhdGhNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcU3ByaW50ZkZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1NwcmludGZGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcU3NjYW5mRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvU3NjYW5mRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0YXREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvU3RhdER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcU3RyQ2FzZUZ1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1N0ckNhc2VGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcU3RyQ29udGFpbmluZ1R5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9TdHJDb250YWluaW5nVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxTdHJJbmNyZW1lbnREZWNyZW1lbnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1N0ckluY3JlbWVudERlY3JlbWVudEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0clBhZEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvU3RyUGFkRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcU3RyUmVwZWF0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9TdHJSZXBlYXRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxTdHJTcGxpdEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvU3RyU3BsaXRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxTdHJUb2tGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1N0clRva0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0cldvcmRDb3VudEZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1N0cldvcmRDb3VudEZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxTdHJsZW5GdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1N0cmxlbkZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0cnJldkZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvU3RycmV2RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcU3RydG90aW1lRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9TdHJ0b3RpbWVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxTdHJ2YWxGYW1pbHlGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1N0cnZhbEZhbWlseUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN1YnN0ckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9TdWJzdHJEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFRocm93YWJsZVJldHVyblR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUGhwL1Rocm93YWJsZVJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxUcmlnZ2VyRXJyb3JEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvVHJpZ2dlckVycm9yRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxUcmltRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvVHJpbUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxUeXBlU3BlY2lmeWluZ0Z1bmN0aW9uc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9UeXBlU3BlY2lmeWluZ0Z1bmN0aW9uc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcVmVyc2lvbkNvbXBhcmVGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1BocC9WZXJzaW9uQ29tcGFyZUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxYTUxSZWFkZXJPcGVuUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9QaHAvWE1MUmVhZGVyT3BlblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUmVjdXJzaW9uR3VhcmQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUmVjdXJzaW9uR3VhcmQucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUmVnZXhcXFJlZ2V4QWx0ZXJuYXRpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUmVnZXgvUmVnZXhBbHRlcm5hdGlvbi5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxSZWdleFxcUmVnZXhBc3RXYWxrUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1JlZ2V4L1JlZ2V4QXN0V2Fsa1Jlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxSZWdleFxcUmVnZXhDYXB0dXJpbmdHcm91cCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9SZWdleC9SZWdleENhcHR1cmluZ0dyb3VwLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFJlZ2V4XFxSZWdleEV4cHJlc3Npb25IZWxwZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvUmVnZXgvUmVnZXhFeHByZXNzaW9uSGVscGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFJlZ2V4XFxSZWdleEdyb3VwUGFyc2VyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1JlZ2V4L1JlZ2V4R3JvdXBQYXJzZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUmVnZXhcXFJlZ2V4R3JvdXBXYWxrUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1JlZ2V4L1JlZ2V4R3JvdXBXYWxrUmVzdWx0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFJlZ2V4XFxSZWdleE5vbkNhcHR1cmluZ0dyb3VwJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1JlZ2V4L1JlZ2V4Tm9uQ2FwdHVyaW5nR3JvdXAucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcUmVzb3VyY2VUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1Jlc291cmNlVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxTaW11bHRhbmVvdXNUeXBlVHJhdmVyc2VyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1NpbXVsdGFuZW91c1R5cGVUcmF2ZXJzZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcU3RhdGljTWV0aG9kUGFyYW1ldGVyQ2xvc3VyZVR5cGVFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvU3RhdGljTWV0aG9kUGFyYW1ldGVyQ2xvc3VyZVR5cGVFeHRlbnNpb24ucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcU3RhdGljTWV0aG9kUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9TdGF0aWNNZXRob2RQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFN0YXRpY01ldGhvZFR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1N0YXRpY01ldGhvZFR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFN0YXRpY1R5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvU3RhdGljVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxTdGF0aWNUeXBlRmFjdG9yeScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9TdGF0aWNUeXBlRmFjdG9yeS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxTdHJpY3RNaXhlZFR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvU3RyaWN0TWl4ZWRUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFN0cmluZ0Fsd2F5c0FjY2VwdGluZ09iamVjdFdpdGhUb1N0cmluZ1R5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvU3RyaW5nQWx3YXlzQWNjZXB0aW5nT2JqZWN0V2l0aFRvU3RyaW5nVHlwZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxTdHJpbmdUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1N0cmluZ1R5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcU3VidHJhY3RhYmxlVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9TdWJ0cmFjdGFibGVUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFRoaXNUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1RoaXNUeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcQ29uc3RhbnROdW1lcmljQ29tcGFyaXNvblR5cGVUcmFpdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9UcmFpdHMvQ29uc3RhbnROdW1lcmljQ29tcGFyaXNvblR5cGVUcmFpdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXENvbnN0YW50U2NhbGFyVHlwZVRyYWl0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1RyYWl0cy9Db25zdGFudFNjYWxhclR5cGVUcmFpdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXEZhbHNleUJvb2xlYW5UeXBlVHJhaXQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVHJhaXRzL0ZhbHNleUJvb2xlYW5UeXBlVHJhaXQucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxMYXRlUmVzb2x2YWJsZVR5cGVUcmFpdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9UcmFpdHMvTGF0ZVJlc29sdmFibGVUeXBlVHJhaXQucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxNYXliZUFycmF5VHlwZVRyYWl0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1RyYWl0cy9NYXliZUFycmF5VHlwZVRyYWl0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcTWF5YmVDYWxsYWJsZVR5cGVUcmFpdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9UcmFpdHMvTWF5YmVDYWxsYWJsZVR5cGVUcmFpdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXE1heWJlSXRlcmFibGVUeXBlVHJhaXQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVHJhaXRzL01heWJlSXRlcmFibGVUeXBlVHJhaXQucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxNYXliZU9iamVjdFR5cGVUcmFpdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9UcmFpdHMvTWF5YmVPYmplY3RUeXBlVHJhaXQucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxNYXliZU9mZnNldEFjY2Vzc2libGVUeXBlVHJhaXQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVHJhaXRzL01heWJlT2Zmc2V0QWNjZXNzaWJsZVR5cGVUcmFpdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXE5vbkFycmF5VHlwZVRyYWl0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1RyYWl0cy9Ob25BcnJheVR5cGVUcmFpdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXE5vbkNhbGxhYmxlVHlwZVRyYWl0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1RyYWl0cy9Ob25DYWxsYWJsZVR5cGVUcmFpdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXE5vbkdlbmVyYWxpemFibGVUeXBlVHJhaXQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVHJhaXRzL05vbkdlbmVyYWxpemFibGVUeXBlVHJhaXQucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxOb25HZW5lcmljVHlwZVRyYWl0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1RyYWl0cy9Ob25HZW5lcmljVHlwZVRyYWl0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcTm9uSXRlcmFibGVUeXBlVHJhaXQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVHJhaXRzL05vbkl0ZXJhYmxlVHlwZVRyYWl0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcTm9uT2JqZWN0VHlwZVRyYWl0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1RyYWl0cy9Ob25PYmplY3RUeXBlVHJhaXQucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxOb25PZmZzZXRBY2Nlc3NpYmxlVHlwZVRyYWl0JyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1RyYWl0cy9Ob25PZmZzZXRBY2Nlc3NpYmxlVHlwZVRyYWl0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcTm9uUmVtb3ZlYWJsZVR5cGVUcmFpdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9UcmFpdHMvTm9uUmVtb3ZlYWJsZVR5cGVUcmFpdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXE9iamVjdFR5cGVUcmFpdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9UcmFpdHMvT2JqZWN0VHlwZVRyYWl0LnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcVHJ1dGh5Qm9vbGVhblR5cGVUcmFpdCcgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9UcmFpdHMvVHJ1dGh5Qm9vbGVhblR5cGVUcmFpdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXFVuZGVjaWRlZEJvb2xlYW5UeXBlVHJhaXQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVHJhaXRzL1VuZGVjaWRlZEJvb2xlYW5UeXBlVHJhaXQucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxVbmRlY2lkZWRDb21wYXJpc29uQ29tcG91bmRUeXBlVHJhaXQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVHJhaXRzL1VuZGVjaWRlZENvbXBhcmlzb25Db21wb3VuZFR5cGVUcmFpdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXFVuZGVjaWRlZENvbXBhcmlzb25UeXBlVHJhaXQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVHJhaXRzL1VuZGVjaWRlZENvbXBhcmlzb25UeXBlVHJhaXQucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVHlwZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9UeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFR5cGVBbGlhcycgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9UeXBlQWxpYXMucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVHlwZUFsaWFzUmVzb2x2ZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVHlwZUFsaWFzUmVzb2x2ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVHlwZUFsaWFzUmVzb2x2ZXJQcm92aWRlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9UeXBlQWxpYXNSZXNvbHZlclByb3ZpZGVyLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFR5cGVDb21iaW5hdG9yJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1R5cGVDb21iaW5hdG9yLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFR5cGVSZXN1bHQnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVHlwZVJlc3VsdC5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxUeXBlVHJhdmVyc2VyJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1R5cGVUcmF2ZXJzZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVHlwZVV0aWxzJyA9PiBfX0RJUl9fIC4gJy8uLi8uLicgLiAnL3NyYy9UeXBlL1R5cGVVdGlscy5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxUeXBlV2l0aENsYXNzTmFtZScgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9UeXBlV2l0aENsYXNzTmFtZS5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxUeXBlaGludEhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9UeXBlaGludEhlbHBlci5waHAnLAogICAgICAgICdQSFBTdGFuXFxUeXBlXFxVbmlvblR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVW5pb25UeXBlLnBocCcsCiAgICAgICAgJ1BIUFN0YW5cXFR5cGVcXFVuaW9uVHlwZUhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4vLi4nIC4gJy9zcmMvVHlwZS9VbmlvblR5cGVIZWxwZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVXNlZnVsVHlwZUFsaWFzUmVzb2x2ZXInID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVXNlZnVsVHlwZUFsaWFzUmVzb2x2ZXIucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVmFsdWVPZlR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVmFsdWVPZlR5cGUucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVmVyYm9zaXR5TGV2ZWwnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVmVyYm9zaXR5TGV2ZWwucGhwJywKICAgICAgICAnUEhQU3RhblxcVHlwZVxcVm9pZFR5cGUnID0+IF9fRElSX18gLiAnLy4uLy4uJyAuICcvc3JjL1R5cGUvVm9pZFR5cGUucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxCdWlsZGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcQnVpbGRlckZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXJGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcQnVpbGRlckhlbHBlcnMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXJIZWxwZXJzLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcQnVpbGRlclxcQ2xhc3NDb25zdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9DbGFzc0NvbnN0LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcQnVpbGRlclxcQ2xhc3NfJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL0NsYXNzXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXEJ1aWxkZXJcXERlY2xhcmF0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL0RlY2xhcmF0aW9uLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcQnVpbGRlclxcRW51bUNhc2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvRW51bUNhc2UucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxCdWlsZGVyXFxFbnVtXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9FbnVtXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXEJ1aWxkZXJcXEZ1bmN0aW9uTGlrZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9GdW5jdGlvbkxpa2UucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxCdWlsZGVyXFxGdW5jdGlvbl8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvRnVuY3Rpb25fLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcQnVpbGRlclxcSW50ZXJmYWNlXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9JbnRlcmZhY2VfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcQnVpbGRlclxcTWV0aG9kJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL01ldGhvZC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXEJ1aWxkZXJcXE5hbWVzcGFjZV8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvTmFtZXNwYWNlXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXEJ1aWxkZXJcXFBhcmFtJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL1BhcmFtLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcQnVpbGRlclxcUHJvcGVydHknID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvUHJvcGVydHkucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxCdWlsZGVyXFxUcmFpdFVzZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9UcmFpdFVzZS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXEJ1aWxkZXJcXFRyYWl0VXNlQWRhcHRhdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9UcmFpdFVzZUFkYXB0YXRpb24ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxCdWlsZGVyXFxUcmFpdF8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvVHJhaXRfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcQnVpbGRlclxcVXNlXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9Vc2VfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcQ29tbWVudCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQ29tbWVudC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXENvbW1lbnRcXERvYycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQ29tbWVudC9Eb2MucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxDb25zdEV4cHJFdmFsdWF0aW9uRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Db25zdEV4cHJFdmFsdWF0aW9uRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcQ29uc3RFeHByRXZhbHVhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Db25zdEV4cHJFdmFsdWF0b3IucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxFcnJvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvRXJyb3IucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxFcnJvckhhbmRsZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0Vycm9ySGFuZGxlci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXEVycm9ySGFuZGxlclxcQ29sbGVjdGluZycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvRXJyb3JIYW5kbGVyL0NvbGxlY3RpbmcucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxFcnJvckhhbmRsZXJcXFRocm93aW5nJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9FcnJvckhhbmRsZXIvVGhyb3dpbmcucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxJbnRlcm5hbFxcRGlmZkVsZW0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0ludGVybmFsL0RpZmZFbGVtLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcSW50ZXJuYWxcXERpZmZlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvSW50ZXJuYWwvRGlmZmVyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcSW50ZXJuYWxcXFByaW50YWJsZU5ld0Fub25DbGFzc05vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0ludGVybmFsL1ByaW50YWJsZU5ld0Fub25DbGFzc05vZGUucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxJbnRlcm5hbFxcVG9rZW5TdHJlYW0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0ludGVybmFsL1Rva2VuU3RyZWFtLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcSnNvbkRlY29kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0pzb25EZWNvZGVyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTGV4ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTGV4ZXJcXEVtdWxhdGl2ZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvRW11bGF0aXZlLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTGV4ZXJcXFRva2VuRW11bGF0b3JcXEF0dHJpYnV0ZUVtdWxhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL0F0dHJpYnV0ZUVtdWxhdG9yLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTGV4ZXJcXFRva2VuRW11bGF0b3JcXENvYWxlc2VFcXVhbFRva2VuRW11bGF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvQ29hbGVzZUVxdWFsVG9rZW5FbXVsYXRvci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXExleGVyXFxUb2tlbkVtdWxhdG9yXFxFbnVtVG9rZW5FbXVsYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9FbnVtVG9rZW5FbXVsYXRvci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXExleGVyXFxUb2tlbkVtdWxhdG9yXFxFeHBsaWNpdE9jdGFsRW11bGF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvRXhwbGljaXRPY3RhbEVtdWxhdG9yLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTGV4ZXJcXFRva2VuRW11bGF0b3JcXEZsZXhpYmxlRG9jU3RyaW5nRW11bGF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvRmxleGlibGVEb2NTdHJpbmdFbXVsYXRvci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXExleGVyXFxUb2tlbkVtdWxhdG9yXFxGblRva2VuRW11bGF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvRm5Ub2tlbkVtdWxhdG9yLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTGV4ZXJcXFRva2VuRW11bGF0b3JcXEtleXdvcmRFbXVsYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9LZXl3b3JkRW11bGF0b3IucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxMZXhlclxcVG9rZW5FbXVsYXRvclxcTWF0Y2hUb2tlbkVtdWxhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL01hdGNoVG9rZW5FbXVsYXRvci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXExleGVyXFxUb2tlbkVtdWxhdG9yXFxOdWxsc2FmZVRva2VuRW11bGF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvTnVsbHNhZmVUb2tlbkVtdWxhdG9yLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTGV4ZXJcXFRva2VuRW11bGF0b3JcXE51bWVyaWNMaXRlcmFsU2VwYXJhdG9yRW11bGF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvTnVtZXJpY0xpdGVyYWxTZXBhcmF0b3JFbXVsYXRvci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXExleGVyXFxUb2tlbkVtdWxhdG9yXFxSZWFkb25seUZ1bmN0aW9uVG9rZW5FbXVsYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9SZWFkb25seUZ1bmN0aW9uVG9rZW5FbXVsYXRvci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXExleGVyXFxUb2tlbkVtdWxhdG9yXFxSZWFkb25seVRva2VuRW11bGF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvUmVhZG9ubHlUb2tlbkVtdWxhdG9yLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTGV4ZXJcXFRva2VuRW11bGF0b3JcXFJldmVyc2VFbXVsYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9SZXZlcnNlRW11bGF0b3IucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxMZXhlclxcVG9rZW5FbXVsYXRvclxcVG9rZW5FbXVsYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9Ub2tlbkVtdWxhdG9yLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTmFtZUNvbnRleHQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05hbWVDb250ZXh0LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVBYnN0cmFjdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZUFic3RyYWN0LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZUR1bXBlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZUR1bXBlci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVGaW5kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGVGaW5kZXIucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlVHJhdmVyc2VyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVHJhdmVyc2VyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVRyYXZlcnNlckludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZVRyYXZlcnNlckludGVyZmFjZS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVWaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVWaXNpdG9yQWJzdHJhY3QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGVWaXNpdG9yQWJzdHJhY3QucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlVmlzaXRvclxcQ2xvbmluZ1Zpc2l0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGVWaXNpdG9yL0Nsb25pbmdWaXNpdG9yLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVZpc2l0b3JcXEZpbmRpbmdWaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9GaW5kaW5nVmlzaXRvci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVWaXNpdG9yXFxGaXJzdEZpbmRpbmdWaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9GaXJzdEZpbmRpbmdWaXNpdG9yLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVZpc2l0b3JcXE5hbWVSZXNvbHZlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZVZpc2l0b3IvTmFtZVJlc29sdmVyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVZpc2l0b3JcXE5vZGVDb25uZWN0aW5nVmlzaXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZVZpc2l0b3IvTm9kZUNvbm5lY3RpbmdWaXNpdG9yLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVZpc2l0b3JcXFBhcmVudENvbm5lY3RpbmdWaXNpdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9QYXJlbnRDb25uZWN0aW5nVmlzaXRvci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEFyZycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9BcmcucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxBdHRyaWJ1dGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvQXR0cmlidXRlLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcQXR0cmlidXRlR3JvdXAnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvQXR0cmlidXRlR3JvdXAucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxDb21wbGV4VHlwZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9Db21wbGV4VHlwZS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXENvbnN0XycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9Db25zdF8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxBcnJheURpbUZldGNoJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXJyYXlEaW1GZXRjaC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFycmF5SXRlbScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0FycmF5SXRlbS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFycmF5XycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0FycmF5Xy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFycm93RnVuY3Rpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9BcnJvd0Z1bmN0aW9uLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXNzaWduJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXNzaWduT3AnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFzc2lnbk9wXFxCaXR3aXNlQW5kJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvQml0d2lzZUFuZC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFzc2lnbk9wXFxCaXR3aXNlT3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9CaXR3aXNlT3IucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxBc3NpZ25PcFxcQml0d2lzZVhvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wL0JpdHdpc2VYb3IucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxBc3NpZ25PcFxcQ29hbGVzY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9Db2FsZXNjZS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFzc2lnbk9wXFxDb25jYXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9Db25jYXQucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxBc3NpZ25PcFxcRGl2JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvRGl2LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXNzaWduT3BcXE1pbnVzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvTWludXMucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxBc3NpZ25PcFxcTW9kJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvTW9kLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXNzaWduT3BcXE11bCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wL011bC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFzc2lnbk9wXFxQbHVzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvUGx1cy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFzc2lnbk9wXFxQb3cnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9Qb3cucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxBc3NpZ25PcFxcU2hpZnRMZWZ0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvU2hpZnRMZWZ0LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXNzaWduT3BcXFNoaWZ0UmlnaHQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9TaGlmdFJpZ2h0LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXNzaWduUmVmJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduUmVmLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3AnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxCaXR3aXNlQW5kJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvQml0d2lzZUFuZC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxCaXR3aXNlT3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9CaXR3aXNlT3IucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcQml0d2lzZVhvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0JpdHdpc2VYb3IucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcQm9vbGVhbkFuZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0Jvb2xlYW5BbmQucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcQm9vbGVhbk9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvQm9vbGVhbk9yLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXENvYWxlc2NlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvQ29hbGVzY2UucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcQ29uY2F0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvQ29uY2F0LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXERpdicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0Rpdi5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxFcXVhbCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0VxdWFsLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXEdyZWF0ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9HcmVhdGVyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXEdyZWF0ZXJPckVxdWFsJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvR3JlYXRlck9yRXF1YWwucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcSWRlbnRpY2FsJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvSWRlbnRpY2FsLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXExvZ2ljYWxBbmQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Mb2dpY2FsQW5kLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXExvZ2ljYWxPcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0xvZ2ljYWxPci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxMb2dpY2FsWG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvTG9naWNhbFhvci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxNaW51cycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL01pbnVzLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXE1vZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL01vZC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxNdWwnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9NdWwucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcTm90RXF1YWwnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Ob3RFcXVhbC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxOb3RJZGVudGljYWwnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Ob3RJZGVudGljYWwucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcUGx1cycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1BsdXMucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcUG93JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvUG93LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXFNoaWZ0TGVmdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1NoaWZ0TGVmdC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxTaGlmdFJpZ2h0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvU2hpZnRSaWdodC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxTbWFsbGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvU21hbGxlci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxTbWFsbGVyT3JFcXVhbCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1NtYWxsZXJPckVxdWFsLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXFNwYWNlc2hpcCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1NwYWNlc2hpcC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpdHdpc2VOb3QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaXR3aXNlTm90LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQm9vbGVhbk5vdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Jvb2xlYW5Ob3QucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxDYWxsTGlrZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0NhbGxMaWtlLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQ2FzdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Nhc3QucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxDYXN0XFxBcnJheV8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DYXN0L0FycmF5Xy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXENhc3RcXEJvb2xfJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2FzdC9Cb29sXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXENhc3RcXERvdWJsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Nhc3QvRG91YmxlLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQ2FzdFxcSW50XycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Nhc3QvSW50Xy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXENhc3RcXE9iamVjdF8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DYXN0L09iamVjdF8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxDYXN0XFxTdHJpbmdfJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2FzdC9TdHJpbmdfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQ2FzdFxcVW5zZXRfJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2FzdC9VbnNldF8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxDbGFzc0NvbnN0RmV0Y2gnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DbGFzc0NvbnN0RmV0Y2gucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxDbG9uZV8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DbG9uZV8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxDbG9zdXJlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2xvc3VyZS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXENsb3N1cmVVc2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DbG9zdXJlVXNlLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQ29uc3RGZXRjaCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0NvbnN0RmV0Y2gucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxFbXB0eV8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9FbXB0eV8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxFcnJvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Vycm9yLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcRXJyb3JTdXBwcmVzcycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Vycm9yU3VwcHJlc3MucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxFdmFsXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0V2YWxfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcRXhpdF8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9FeGl0Xy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEZ1bmNDYWxsJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvRnVuY0NhbGwucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxJbmNsdWRlXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0luY2x1ZGVfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcSW5zdGFuY2VvZl8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9JbnN0YW5jZW9mXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXElzc2V0XycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0lzc2V0Xy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXExpc3RfJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTGlzdF8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxNYXRjaF8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9NYXRjaF8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxNZXRob2RDYWxsJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTWV0aG9kQ2FsbC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXE5ld18nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9OZXdfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcTnVsbHNhZmVNZXRob2RDYWxsJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTnVsbHNhZmVNZXRob2RDYWxsLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcTnVsbHNhZmVQcm9wZXJ0eUZldGNoJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTnVsbHNhZmVQcm9wZXJ0eUZldGNoLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcUG9zdERlYycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1Bvc3REZWMucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxQb3N0SW5jJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvUG9zdEluYy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXFByZURlYycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1ByZURlYy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXFByZUluYycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1ByZUluYy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXFByaW50XycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1ByaW50Xy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXFByb3BlcnR5RmV0Y2gnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Qcm9wZXJ0eUZldGNoLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcU2hlbGxFeGVjJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvU2hlbGxFeGVjLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcU3RhdGljQ2FsbCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1N0YXRpY0NhbGwucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxTdGF0aWNQcm9wZXJ0eUZldGNoJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvU3RhdGljUHJvcGVydHlGZXRjaC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXFRlcm5hcnknID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9UZXJuYXJ5LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcVGhyb3dfJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvVGhyb3dfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcVW5hcnlNaW51cycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1VuYXJ5TWludXMucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxVbmFyeVBsdXMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9VbmFyeVBsdXMucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxWYXJpYWJsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1ZhcmlhYmxlLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcWWllbGRGcm9tJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvWWllbGRGcm9tLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcWWllbGRfJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvWWllbGRfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcRnVuY3Rpb25MaWtlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0Z1bmN0aW9uTGlrZS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXElkZW50aWZpZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvSWRlbnRpZmllci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXEludGVyc2VjdGlvblR5cGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvSW50ZXJzZWN0aW9uVHlwZS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXE1hdGNoQXJtJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL01hdGNoQXJtLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcTmFtZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9OYW1lLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcTmFtZVxcRnVsbHlRdWFsaWZpZWQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvTmFtZS9GdWxseVF1YWxpZmllZC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXE5hbWVcXFJlbGF0aXZlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL05hbWUvUmVsYXRpdmUucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxOdWxsYWJsZVR5cGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvTnVsbGFibGVUeXBlLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcUGFyYW0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvUGFyYW0ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU2NhbGFyXFxETnVtYmVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9ETnVtYmVyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU2NhbGFyXFxFbmNhcHNlZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvRW5jYXBzZWQucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXJcXEVuY2Fwc2VkU3RyaW5nUGFydCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvRW5jYXBzZWRTdHJpbmdQYXJ0LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU2NhbGFyXFxMTnVtYmVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9MTnVtYmVyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU2NhbGFyXFxNYWdpY0NvbnN0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9NYWdpY0NvbnN0LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU2NhbGFyXFxNYWdpY0NvbnN0XFxDbGFzc18nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvQ2xhc3NfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU2NhbGFyXFxNYWdpY0NvbnN0XFxEaXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvRGlyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU2NhbGFyXFxNYWdpY0NvbnN0XFxGaWxlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9NYWdpY0NvbnN0L0ZpbGUucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXJcXE1hZ2ljQ29uc3RcXEZ1bmN0aW9uXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvTWFnaWNDb25zdC9GdW5jdGlvbl8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXJcXE1hZ2ljQ29uc3RcXExpbmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvTGluZS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFNjYWxhclxcTWFnaWNDb25zdFxcTWV0aG9kJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9NYWdpY0NvbnN0L01ldGhvZC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFNjYWxhclxcTWFnaWNDb25zdFxcTmFtZXNwYWNlXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvTWFnaWNDb25zdC9OYW1lc3BhY2VfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU2NhbGFyXFxNYWdpY0NvbnN0XFxUcmFpdF8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvVHJhaXRfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU2NhbGFyXFxTdHJpbmdfJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9TdHJpbmdfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcQnJlYWtfJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvQnJlYWtfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcQ2FzZV8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9DYXNlXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXENhdGNoXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NhdGNoXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXENsYXNzQ29uc3QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9DbGFzc0NvbnN0LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcQ2xhc3NMaWtlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvQ2xhc3NMaWtlLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcQ2xhc3NNZXRob2QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9DbGFzc01ldGhvZC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXENsYXNzXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NsYXNzXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXENvbnN0XycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NvbnN0Xy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXENvbnRpbnVlXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NvbnRpbnVlXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXERlY2xhcmVEZWNsYXJlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRGVjbGFyZURlY2xhcmUucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxEZWNsYXJlXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0RlY2xhcmVfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcRG9fJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRG9fLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcRWNob18nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9FY2hvXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXEVsc2VJZl8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9FbHNlSWZfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcRWxzZV8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9FbHNlXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXEVudW1DYXNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRW51bUNhc2UucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxFbnVtXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0VudW1fLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcRXhwcmVzc2lvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0V4cHJlc3Npb24ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxGaW5hbGx5XycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0ZpbmFsbHlfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcRm9yXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0Zvcl8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxGb3JlYWNoXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0ZvcmVhY2hfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcRnVuY3Rpb25fJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRnVuY3Rpb25fLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcR2xvYmFsXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0dsb2JhbF8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxHb3RvXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0dvdG9fLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcR3JvdXBVc2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Hcm91cFVzZS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXEhhbHRDb21waWxlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0hhbHRDb21waWxlci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXElmXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0lmXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXElubGluZUhUTUwnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9JbmxpbmVIVE1MLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcSW50ZXJmYWNlXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0ludGVyZmFjZV8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxMYWJlbCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0xhYmVsLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcTmFtZXNwYWNlXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L05hbWVzcGFjZV8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxOb3AnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Ob3AucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxQcm9wZXJ0eScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1Byb3BlcnR5LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcUHJvcGVydHlQcm9wZXJ0eScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1Byb3BlcnR5UHJvcGVydHkucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxSZXR1cm5fJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvUmV0dXJuXy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXFN0YXRpY1ZhcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1N0YXRpY1Zhci5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXFN0YXRpY18nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9TdGF0aWNfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcU3dpdGNoXycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1N3aXRjaF8ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxUaHJvd18nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9UaHJvd18ucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxUcmFpdFVzZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1RyYWl0VXNlLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcVHJhaXRVc2VBZGFwdGF0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvVHJhaXRVc2VBZGFwdGF0aW9uLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcVHJhaXRVc2VBZGFwdGF0aW9uXFxBbGlhcycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1RyYWl0VXNlQWRhcHRhdGlvbi9BbGlhcy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXFRyYWl0VXNlQWRhcHRhdGlvblxcUHJlY2VkZW5jZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1RyYWl0VXNlQWRhcHRhdGlvbi9QcmVjZWRlbmNlLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcVHJhaXRfJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvVHJhaXRfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcVHJ5Q2F0Y2gnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9UcnlDYXRjaC5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXFVuc2V0XycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1Vuc2V0Xy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXFVzZVVzZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1VzZVVzZS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXFVzZV8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Vc2VfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcV2hpbGVfJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvV2hpbGVfLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcVW5pb25UeXBlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1VuaW9uVHlwZS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXE5vZGVcXFZhckxpa2VJZGVudGlmaWVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1Zhckxpa2VJZGVudGlmaWVyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcTm9kZVxcVmFyaWFkaWNQbGFjZWhvbGRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9WYXJpYWRpY1BsYWNlaG9sZGVyLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcUGFyc2VyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9QYXJzZXIucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxQYXJzZXJBYnN0cmFjdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyQWJzdHJhY3QucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxQYXJzZXJGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9QYXJzZXJGYWN0b3J5LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcUGFyc2VyXFxNdWx0aXBsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyL011bHRpcGxlLnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcUGFyc2VyXFxQaHA1JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9QYXJzZXIvUGhwNS5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXFBhcnNlclxcUGhwNycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyL1BocDcucGhwJywKICAgICAgICAnUGhwUGFyc2VyXFxQYXJzZXJcXFRva2VucycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyL1Rva2Vucy5waHAnLAogICAgICAgICdQaHBQYXJzZXJcXFByZXR0eVByaW50ZXJBYnN0cmFjdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUHJldHR5UHJpbnRlckFic3RyYWN0LnBocCcsCiAgICAgICAgJ1BocFBhcnNlclxcUHJldHR5UHJpbnRlclxcU3RhbmRhcmQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL1ByZXR0eVByaW50ZXIvU3RhbmRhcmQucGhwJywKICAgICAgICAnUGhwVG9rZW4nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvUGhwVG9rZW4ucGhwJywKICAgICAgICAnUmV0dXJuVHlwZVdpbGxDaGFuZ2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS9SZXNvdXJjZXMvc3R1YnMvUmV0dXJuVHlwZVdpbGxDaGFuZ2UucGhwJywKICAgICAgICAnU3RyaW5nYWJsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9TdHJpbmdhYmxlLnBocCcsCiAgICAgICAgJ1N5bWZvbnlcXFBvbHlmaWxsXFxJbnRsXFxHcmFwaGVtZVxcR3JhcGhlbWUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLWdyYXBoZW1lL0dyYXBoZW1lLnBocCcsCiAgICAgICAgJ1N5bWZvbnlcXFBvbHlmaWxsXFxJbnRsXFxOb3JtYWxpemVyXFxOb3JtYWxpemVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtaW50bC1ub3JtYWxpemVyL05vcm1hbGl6ZXIucGhwJywKICAgICAgICAnU3ltZm9ueVxcUG9seWZpbGxcXE1ic3RyaW5nXFxNYnN0cmluZycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nL01ic3RyaW5nLnBocCcsCiAgICAgICAgJ1N5bWZvbnlcXFBvbHlmaWxsXFxQaHA3M1xcUGhwNzMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA3My9QaHA3My5waHAnLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwNzRcXFBocDc0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwNzQvUGhwNzQucGhwJywKICAgICAgICAnU3ltZm9ueVxcUG9seWZpbGxcXFBocDgwXFxQaHA4MCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL1BocDgwLnBocCcsCiAgICAgICAgJ1N5bWZvbnlcXFBvbHlmaWxsXFxQaHA4MFxcUGhwVG9rZW4nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9QaHBUb2tlbi5waHAnLAogICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODFcXFBocDgxJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvUGhwODEucGhwJywKICAgICAgICAnVW5oYW5kbGVkTWF0Y2hFcnJvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9VbmhhbmRsZWRNYXRjaEVycm9yLnBocCcsCiAgICAgICAgJ1ZhbHVlRXJyb3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvVmFsdWVFcnJvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENsdWVcXFJlYWN0XFxOREpzb25cXERlY29kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvY2x1ZS9uZGpzb24tcmVhY3Qvc3JjL0RlY29kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDbHVlXFxSZWFjdFxcTkRKc29uXFxFbmNvZGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NsdWUvbmRqc29uLXJlYWN0L3NyYy9FbmNvZGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXENhQnVuZGxlXFxDYUJ1bmRsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9jb21wb3Nlci9jYS1idW5kbGUvc3JjL0NhQnVuZGxlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFBjcmVcXE1hdGNoQWxsUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3BjcmUvc3JjL01hdGNoQWxsUmVzdWx0LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFBjcmVcXE1hdGNoQWxsU3RyaWN0R3JvdXBzUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3BjcmUvc3JjL01hdGNoQWxsU3RyaWN0R3JvdXBzUmVzdWx0LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFBjcmVcXE1hdGNoQWxsV2l0aE9mZnNldHNSZXN1bHQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvY29tcG9zZXIvcGNyZS9zcmMvTWF0Y2hBbGxXaXRoT2Zmc2V0c1Jlc3VsdC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxQY3JlXFxNYXRjaFJlc3VsdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9jb21wb3Nlci9wY3JlL3NyYy9NYXRjaFJlc3VsdC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxQY3JlXFxNYXRjaFN0cmljdEdyb3Vwc1Jlc3VsdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9jb21wb3Nlci9wY3JlL3NyYy9NYXRjaFN0cmljdEdyb3Vwc1Jlc3VsdC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxQY3JlXFxNYXRjaFdpdGhPZmZzZXRzUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3BjcmUvc3JjL01hdGNoV2l0aE9mZnNldHNSZXN1bHQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcUGNyZVxcUGNyZUV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9jb21wb3Nlci9wY3JlL3NyYy9QY3JlRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFBjcmVcXFByZWcnID0+IF9fRElSX18gLiAnLy4uJyAuICcvY29tcG9zZXIvcGNyZS9zcmMvUHJlZy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxQY3JlXFxSZWdleCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9jb21wb3Nlci9wY3JlL3NyYy9SZWdleC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxQY3JlXFxSZXBsYWNlUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3BjcmUvc3JjL1JlcGxhY2VSZXN1bHQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcUGNyZVxcVW5leHBlY3RlZE51bGxNYXRjaEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9jb21wb3Nlci9wY3JlL3NyYy9VbmV4cGVjdGVkTnVsbE1hdGNoRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFNlbXZlclxcQ29tcGFyYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9jb21wb3Nlci9zZW12ZXIvc3JjL0NvbXBhcmF0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcU2VtdmVyXFxDb21waWxpbmdNYXRjaGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29tcGlsaW5nTWF0Y2hlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxTZW12ZXJcXENvbnN0cmFpbnRcXEJvdW5kJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29uc3RyYWludC9Cb3VuZC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxTZW12ZXJcXENvbnN0cmFpbnRcXENvbnN0cmFpbnQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvY29tcG9zZXIvc2VtdmVyL3NyYy9Db25zdHJhaW50L0NvbnN0cmFpbnQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcU2VtdmVyXFxDb25zdHJhaW50XFxDb25zdHJhaW50SW50ZXJmYWNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29uc3RyYWludC9Db25zdHJhaW50SW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFNlbXZlclxcQ29uc3RyYWludFxcTWF0Y2hBbGxDb25zdHJhaW50JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29uc3RyYWludC9NYXRjaEFsbENvbnN0cmFpbnQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcU2VtdmVyXFxDb25zdHJhaW50XFxNYXRjaE5vbmVDb25zdHJhaW50JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29uc3RyYWludC9NYXRjaE5vbmVDb25zdHJhaW50LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFNlbXZlclxcQ29uc3RyYWludFxcTXVsdGlDb25zdHJhaW50JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29uc3RyYWludC9NdWx0aUNvbnN0cmFpbnQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcU2VtdmVyXFxJbnRlcnZhbCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9jb21wb3Nlci9zZW12ZXIvc3JjL0ludGVydmFsLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFNlbXZlclxcSW50ZXJ2YWxzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvSW50ZXJ2YWxzLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFNlbXZlclxcU2VtdmVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvU2VtdmVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFNlbXZlclxcVmVyc2lvblBhcnNlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9jb21wb3Nlci9zZW12ZXIvc3JjL1ZlcnNpb25QYXJzZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcWGRlYnVnSGFuZGxlclxcUGhwQ29uZmlnJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3hkZWJ1Zy1oYW5kbGVyL3NyYy9QaHBDb25maWcucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcWGRlYnVnSGFuZGxlclxcUHJvY2VzcycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9jb21wb3Nlci94ZGVidWctaGFuZGxlci9zcmMvUHJvY2Vzcy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxYZGVidWdIYW5kbGVyXFxTdGF0dXMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvY29tcG9zZXIveGRlYnVnLWhhbmRsZXIvc3JjL1N0YXR1cy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxYZGVidWdIYW5kbGVyXFxYZGVidWdIYW5kbGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2NvbXBvc2VyL3hkZWJ1Zy1oYW5kbGVyL3NyYy9YZGVidWdIYW5kbGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRXZlbmVtZW50XFxFdmVudEVtaXR0ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvZXZlbmVtZW50L2V2ZW5lbWVudC9zcmMvRXZlbnRFbWl0dGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRXZlbmVtZW50XFxFdmVudEVtaXR0ZXJJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvZXZlbmVtZW50L2V2ZW5lbWVudC9zcmMvRXZlbnRFbWl0dGVySW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRXZlbmVtZW50XFxFdmVudEVtaXR0ZXJUcmFpdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ldmVuZW1lbnQvZXZlbmVtZW50L3NyYy9FdmVudEVtaXR0ZXJUcmFpdC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcQ3B1Q29yZUNvdW50ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvQ3B1Q29yZUNvdW50ZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXERpYWdub3NlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9EaWFnbm9zZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEV4ZWN1dG9yXFxQcm9jT3BlbkV4ZWN1dG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0V4ZWN1dG9yL1Byb2NPcGVuRXhlY3V0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEV4ZWN1dG9yXFxQcm9jZXNzRXhlY3V0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRXhlY3V0b3IvUHJvY2Vzc0V4ZWN1dG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxGaW5kZXJcXENtaUNtZGxldExvZ2ljYWxGaW5kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0NtaUNtZGxldExvZ2ljYWxGaW5kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcQ21pQ21kbGV0UGh5c2ljYWxGaW5kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0NtaUNtZGxldFBoeXNpY2FsRmluZGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxGaW5kZXJcXENwdUNvcmVGaW5kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0NwdUNvcmVGaW5kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcQ3B1SW5mb0ZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvQ3B1SW5mb0ZpbmRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxEdW1teUNwdUNvcmVGaW5kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0R1bW15Q3B1Q29yZUZpbmRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxFbnZWYXJpYWJsZUZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvRW52VmFyaWFibGVGaW5kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcRmluZGVyUmVnaXN0cnknID0+IF9fRElSX18gLiAnLy4uJyAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0ZpbmRlclJlZ2lzdHJ5LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxGaW5kZXJcXEh3TG9naWNhbEZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvSHdMb2dpY2FsRmluZGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxGaW5kZXJcXEh3UGh5c2ljYWxGaW5kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0h3UGh5c2ljYWxGaW5kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcTHNjcHVMb2dpY2FsRmluZGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9Mc2NwdUxvZ2ljYWxGaW5kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcTHNjcHVQaHlzaWNhbEZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvTHNjcHVQaHlzaWNhbEZpbmRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxOUHJvY0ZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvTlByb2NGaW5kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcTlByb2Nlc3NvckZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvTlByb2Nlc3NvckZpbmRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxOdWxsQ3B1Q29yZUZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvTnVsbENwdUNvcmVGaW5kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcT25seUluUG93ZXJTaGVsbEZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvT25seUluUG93ZXJTaGVsbEZpbmRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxPbmx5T25PU0ZhbWlseUZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvT25seU9uT1NGYW1pbHlGaW5kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcUHJvY09wZW5CYXNlZEZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvUHJvY09wZW5CYXNlZEZpbmRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxTa2lwT25PU0ZhbWlseUZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvU2tpcE9uT1NGYW1pbHlGaW5kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcV2luZG93c1JlZ2lzdHJ5TG9naWNhbEZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvV2luZG93c1JlZ2lzdHJ5TG9naWNhbEZpbmRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxXbWljTG9naWNhbEZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvV21pY0xvZ2ljYWxGaW5kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcV21pY1BoeXNpY2FsRmluZGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9XbWljUGh5c2ljYWxGaW5kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcX05Qcm9jZXNzb3JGaW5kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL19OUHJvY2Vzc29yRmluZGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxOdW1iZXJPZkNwdUNvcmVOb3RGb3VuZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9OdW1iZXJPZkNwdUNvcmVOb3RGb3VuZC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcUGFyYWxsZWxpc2F0aW9uUmVzdWx0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL1BhcmFsbGVsaXNhdGlvblJlc3VsdC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZ1xcSHR0cFxcTWVzc2FnZVxcUmVxdWVzdE1ldGhvZEludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9maWcvaHR0cC1tZXNzYWdlLXV0aWwvc3JjL1JlcXVlc3RNZXRob2RJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWdcXEh0dHBcXE1lc3NhZ2VcXFN0YXR1c0NvZGVJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvZmlnL2h0dHAtbWVzc2FnZS11dGlsL3NyYy9TdGF0dXNDb2RlSW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS91dGlscy9zcmMvZXhjZXB0aW9ucy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxCb290c3RyYXBcXENvbmZpZ3VyYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9ib290c3RyYXAvc3JjL0Jvb3RzdHJhcC9Db25maWd1cmF0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcQm9vdHN0cmFwXFxFeHRlbnNpb25zXFxDb25zdGFudHNFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvYm9vdHN0cmFwL3NyYy9Cb290c3RyYXAvRXh0ZW5zaW9ucy9Db25zdGFudHNFeHRlbnNpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcQm9vdHN0cmFwXFxFeHRlbnNpb25zXFxQaHBFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvYm9vdHN0cmFwL3NyYy9Cb290c3RyYXAvRXh0ZW5zaW9ucy9QaHBFeHRlbnNpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcQnJpZGdlc1xcRElUcmFjeVxcQ29udGFpbmVyUGFuZWwnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0JyaWRnZXMvRElUcmFjeS9Db250YWluZXJQYW5lbC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxDb25maWd1cmF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvYm9vdHN0cmFwL3NyYy9Db25maWd1cmF0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXEF0dHJpYnV0ZXNcXEluamVjdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvREkvQXR0cmlidXRlcy9JbmplY3QucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXEF1dG93aXJpbmcnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0RJL0F1dG93aXJpbmcucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXENvbXBpbGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9Db21waWxlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcQ29tcGlsZXJFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0RJL0NvbXBpbGVyRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxDb25maWdcXEFkYXB0ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0RJL0NvbmZpZy9BZGFwdGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxDb25maWdcXEFkYXB0ZXJzXFxOZW9uQWRhcHRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvREkvQ29uZmlnL0FkYXB0ZXJzL05lb25BZGFwdGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxDb25maWdcXEFkYXB0ZXJzXFxQaHBBZGFwdGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9Db25maWcvQWRhcHRlcnMvUGhwQWRhcHRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcQ29uZmlnXFxIZWxwZXJzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9Db25maWcvSGVscGVycy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcQ29uZmlnXFxJQWRhcHRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvY29tcGF0aWJpbGl0eS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcQ29uZmlnXFxMb2FkZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0RJL0NvbmZpZy9Mb2FkZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXENvbnRhaW5lcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvREkvQ29udGFpbmVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxDb250YWluZXJCdWlsZGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9Db250YWluZXJCdWlsZGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxDb250YWluZXJMb2FkZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0RJL0NvbnRhaW5lckxvYWRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRGVmaW5pdGlvbnNcXEFjY2Vzc29yRGVmaW5pdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvREkvRGVmaW5pdGlvbnMvQWNjZXNzb3JEZWZpbml0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxEZWZpbml0aW9uc1xcRGVmaW5pdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvREkvRGVmaW5pdGlvbnMvRGVmaW5pdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRGVmaW5pdGlvbnNcXEZhY3RvcnlEZWZpbml0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9EZWZpbml0aW9ucy9GYWN0b3J5RGVmaW5pdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRGVmaW5pdGlvbnNcXEltcG9ydGVkRGVmaW5pdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvREkvRGVmaW5pdGlvbnMvSW1wb3J0ZWREZWZpbml0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxEZWZpbml0aW9uc1xcTG9jYXRvckRlZmluaXRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0RJL0RlZmluaXRpb25zL0xvY2F0b3JEZWZpbml0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxEZWZpbml0aW9uc1xcUmVmZXJlbmNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9EZWZpbml0aW9ucy9SZWZlcmVuY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXERlZmluaXRpb25zXFxTZXJ2aWNlRGVmaW5pdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvREkvRGVmaW5pdGlvbnMvU2VydmljZURlZmluaXRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXERlZmluaXRpb25zXFxTdGF0ZW1lbnQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0RJL0RlZmluaXRpb25zL1N0YXRlbWVudC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRGVwZW5kZW5jeUNoZWNrZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0RJL0RlcGVuZGVuY3lDaGVja2VyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxEeW5hbWljUGFyYW1ldGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9EeW5hbWljUGFyYW1ldGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxFeHRlbnNpb25zXFxDb25zdGFudHNFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0RJL0V4dGVuc2lvbnMvQ29uc3RhbnRzRXh0ZW5zaW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxFeHRlbnNpb25zXFxESUV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9ESUV4dGVuc2lvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRXh0ZW5zaW9uc1xcRGVjb3JhdG9yRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9FeHRlbnNpb25zL0RlY29yYXRvckV4dGVuc2lvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRXh0ZW5zaW9uc1xcRGVmaW5pdGlvblNjaGVtYScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9EZWZpbml0aW9uU2NoZW1hLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxFeHRlbnNpb25zXFxFeHRlbnNpb25zRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9FeHRlbnNpb25zL0V4dGVuc2lvbnNFeHRlbnNpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXEV4dGVuc2lvbnNcXEluamVjdEV4dGVuc2lvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9JbmplY3RFeHRlbnNpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXEV4dGVuc2lvbnNcXFBhcmFtZXRlcnNFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0RJL0V4dGVuc2lvbnMvUGFyYW1ldGVyc0V4dGVuc2lvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRXh0ZW5zaW9uc1xcUGhwRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9FeHRlbnNpb25zL1BocEV4dGVuc2lvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRXh0ZW5zaW9uc1xcU2VhcmNoRXh0ZW5zaW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9FeHRlbnNpb25zL1NlYXJjaEV4dGVuc2lvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRXh0ZW5zaW9uc1xcU2VydmljZXNFeHRlbnNpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0RJL0V4dGVuc2lvbnMvU2VydmljZXNFeHRlbnNpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXEhlbHBlcnMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvZGkvc3JjL0RJL0hlbHBlcnMucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXEludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9leGNlcHRpb25zLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxNaXNzaW5nU2VydmljZUV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvREkvZXhjZXB0aW9ucy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcTm90QWxsb3dlZER1cmluZ1Jlc29sdmluZ0V4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvREkvZXhjZXB0aW9ucy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcUGhwR2VuZXJhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9QaHBHZW5lcmF0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXFJlc29sdmVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9SZXNvbHZlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcU2VydmljZUNyZWF0aW9uRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9ESS9leGNlcHRpb25zLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxTZXJ2aWNlRGVmaW5pdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9kaS9zcmMvY29tcGF0aWJpbGl0eS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcU3RhdGVtZW50JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL2RpL3NyYy9jb21wYXRpYmlsaXR5LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERlcHJlY2F0ZWRFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvdXRpbHMvc3JjL2V4Y2VwdGlvbnMucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRGlyZWN0b3J5Tm90Rm91bmRFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvdXRpbHMvc3JjL2V4Y2VwdGlvbnMucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRmlsZU5vdEZvdW5kRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9leGNlcHRpb25zLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXEh0bWxTdHJpbmdhYmxlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9IdG1sU3RyaW5nYWJsZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxJT0V4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS91dGlscy9zcmMvZXhjZXB0aW9ucy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvdXRpbHMvc3JjL2V4Y2VwdGlvbnMucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcSW52YWxpZFN0YXRlRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9leGNlcHRpb25zLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXEl0ZXJhdG9yc1xcQ2FjaGluZ0l0ZXJhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9JdGVyYXRvcnMvQ2FjaGluZ0l0ZXJhdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXEl0ZXJhdG9yc1xcTWFwcGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9JdGVyYXRvcnMvTWFwcGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXExvYWRlcnNcXFJvYm90TG9hZGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3JvYm90LWxvYWRlci9zcmMvUm9ib3RMb2FkZXIvUm9ib3RMb2FkZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTG9jYWxpemF0aW9uXFxJVHJhbnNsYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS91dGlscy9zcmMvY29tcGF0aWJpbGl0eS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxMb2NhbGl6YXRpb25cXFRyYW5zbGF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvdXRpbHMvc3JjL1RyYW5zbGF0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTWVtYmVyQWNjZXNzRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9leGNlcHRpb25zLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXERlY29kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvbmVvbi9zcmMvTmVvbi9EZWNvZGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXEVuY29kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvbmVvbi9zcmMvTmVvbi9FbmNvZGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXEVudGl0eScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9uZW9uL3NyYy9OZW9uL0VudGl0eS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxOZW9uXFxFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvbmVvbi9zcmMvTmVvbi9FeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTmVvblxcTGV4ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvbmVvbi9zcmMvTmVvbi9MZXhlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxOZW9uXFxOZW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL25lb24vc3JjL05lb24vTmVvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxOZW9uXFxOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL25lb24vc3JjL05lb24vTm9kZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxOZW9uXFxOb2RlXFxBcnJheUl0ZW1Ob2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL25lb24vc3JjL05lb24vTm9kZS9BcnJheUl0ZW1Ob2RlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXE5vZGVcXEFycmF5Tm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9uZW9uL3NyYy9OZW9uL05vZGUvQXJyYXlOb2RlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXE5vZGVcXEJsb2NrQXJyYXlOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL25lb24vc3JjL05lb24vTm9kZS9CbG9ja0FycmF5Tm9kZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxOZW9uXFxOb2RlXFxFbnRpdHlDaGFpbk5vZGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvbmVvbi9zcmMvTmVvbi9Ob2RlL0VudGl0eUNoYWluTm9kZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxOZW9uXFxOb2RlXFxFbnRpdHlOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL25lb24vc3JjL05lb24vTm9kZS9FbnRpdHlOb2RlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXE5vZGVcXElubGluZUFycmF5Tm9kZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9uZW9uL3NyYy9OZW9uL05vZGUvSW5saW5lQXJyYXlOb2RlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXE5vZGVcXExpdGVyYWxOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL25lb24vc3JjL05lb24vTm9kZS9MaXRlcmFsTm9kZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxOZW9uXFxOb2RlXFxTdHJpbmdOb2RlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL25lb24vc3JjL05lb24vTm9kZS9TdHJpbmdOb2RlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXFBhcnNlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9uZW9uL3NyYy9OZW9uL1BhcnNlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxOZW9uXFxUb2tlbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9uZW9uL3NyYy9OZW9uL1Rva2VuLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXFRva2VuU3RyZWFtJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL25lb24vc3JjL05lb24vVG9rZW5TdHJlYW0ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTmVvblxcVHJhdmVyc2VyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL25lb24vc3JjL05lb24vVHJhdmVyc2VyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5vdEltcGxlbWVudGVkRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9leGNlcHRpb25zLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5vdFN1cHBvcnRlZEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS91dGlscy9zcmMvZXhjZXB0aW9ucy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxPdXRPZlJhbmdlRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9leGNlcHRpb25zLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcQXR0cmlidXRlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9BdHRyaWJ1dGUucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxDbGFzc1R5cGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0NsYXNzVHlwZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXENsb3N1cmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0Nsb3N1cmUucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxDb25zdGFudCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvQ29uc3RhbnQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxEdW1wZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0R1bXBlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXEVudW1DYXNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9FbnVtQ2FzZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXEV4dHJhY3RvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvRXh0cmFjdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcRmFjdG9yeScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvRmFjdG9yeS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXEdsb2JhbEZ1bmN0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9HbG9iYWxGdW5jdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXEhlbHBlcnMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0hlbHBlcnMucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxMaXRlcmFsJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9MaXRlcmFsLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcTWV0aG9kJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9NZXRob2QucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxQYXJhbWV0ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1BhcmFtZXRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXFBocEZpbGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1BocEZpbGUucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxQaHBMaXRlcmFsJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9QaHBMaXRlcmFsLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcUGhwTmFtZXNwYWNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9QaHBOYW1lc3BhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxQcmludGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9QcmludGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcUHJvbW90ZWRQYXJhbWV0ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1Byb21vdGVkUGFyYW1ldGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcUHJvcGVydHknID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1Byb3BlcnR5LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcUHNyUHJpbnRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvUHNyUHJpbnRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXFRyYWl0VXNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9UcmFpdFVzZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXFRyYWl0c1xcQXR0cmlidXRlQXdhcmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1RyYWl0cy9BdHRyaWJ1dGVBd2FyZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXFRyYWl0c1xcQ29tbWVudEF3YXJlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9UcmFpdHMvQ29tbWVudEF3YXJlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcVHJhaXRzXFxGdW5jdGlvbkxpa2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1RyYWl0cy9GdW5jdGlvbkxpa2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxUcmFpdHNcXE5hbWVBd2FyZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvVHJhaXRzL05hbWVBd2FyZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXFRyYWl0c1xcVmlzaWJpbGl0eUF3YXJlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9UcmFpdHMvVmlzaWJpbGl0eUF3YXJlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcVHlwZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvVHlwZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxTY2hlbWFcXENvbnRleHQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvc2NoZW1hL3NyYy9TY2hlbWEvQ29udGV4dC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxTY2hlbWFcXER5bmFtaWNQYXJhbWV0ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvc2NoZW1hL3NyYy9TY2hlbWEvRHluYW1pY1BhcmFtZXRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxTY2hlbWFcXEVsZW1lbnRzXFxBbnlPZicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9FbGVtZW50cy9BbnlPZi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxTY2hlbWFcXEVsZW1lbnRzXFxCYXNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL0VsZW1lbnRzL0Jhc2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcU2NoZW1hXFxFbGVtZW50c1xcU3RydWN0dXJlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL0VsZW1lbnRzL1N0cnVjdHVyZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxTY2hlbWFcXEVsZW1lbnRzXFxUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL0VsZW1lbnRzL1R5cGUucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcU2NoZW1hXFxFeHBlY3QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvc2NoZW1hL3NyYy9TY2hlbWEvRXhwZWN0LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFNjaGVtYVxcSGVscGVycycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9IZWxwZXJzLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFNjaGVtYVxcTWVzc2FnZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9NZXNzYWdlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFNjaGVtYVxcUHJvY2Vzc29yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL1Byb2Nlc3Nvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxTY2hlbWFcXFNjaGVtYScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9TY2hlbWEucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcU2NoZW1hXFxWYWxpZGF0aW9uRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL1ZhbGlkYXRpb25FeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcU21hcnRPYmplY3QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvdXRpbHMvc3JjL1NtYXJ0T2JqZWN0LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFN0YXRpY0NsYXNzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9TdGF0aWNDbGFzcy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvdXRpbHMvc3JjL2V4Y2VwdGlvbnMucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXEFycmF5SGFzaCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvQXJyYXlIYXNoLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxBcnJheUxpc3QnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL0FycmF5TGlzdC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcQXJyYXlzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9BcnJheXMucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXEFzc2VydGlvbkV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvZXhjZXB0aW9ucy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcQ2FsbGJhY2snID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL0NhbGxiYWNrLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxEYXRlVGltZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvRGF0ZVRpbWUucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXEZpbGVTeXN0ZW0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL0ZpbGVTeXN0ZW0ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXEZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS9maW5kZXIvc3JjL1V0aWxzL0ZpbmRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcRmxvYXRzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9GbG9hdHMucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXEhlbHBlcnMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL0hlbHBlcnMucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXEh0bWwnID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL0h0bWwucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXElIdG1sU3RyaW5nJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9jb21wYXRpYmlsaXR5LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxJbWFnZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvSW1hZ2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXEltYWdlRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9leGNlcHRpb25zLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxKc29uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9Kc29uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxKc29uRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9leGNlcHRpb25zLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxPYmplY3RIZWxwZXJzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9PYmplY3RIZWxwZXJzLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxPYmplY3RNaXhpbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvT2JqZWN0TWl4aW4ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXFBhZ2luYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvUGFnaW5hdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxSYW5kb20nID0+IF9fRElSX18gLiAnLy4uJyAuICcvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL1JhbmRvbS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcUmVmbGVjdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvUmVmbGVjdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcUmVnZXhwRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9leGNlcHRpb25zLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxTdHJpbmdzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9TdHJpbmdzLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxUeXBlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9UeXBlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxVbmtub3duSW1hZ2VGaWxlRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9leGNlcHRpb25zLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxWYWxpZGF0b3JzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9WYWxpZGF0b3JzLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaURldGVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvQ2lEZXRlY3Rvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE9uZHJhTVxcQ2lEZXRlY3RvclxcQ2lcXEFic3RyYWN0Q2knID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9BYnN0cmFjdENpLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcQXBwVmV5b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9BcHBWZXlvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE9uZHJhTVxcQ2lEZXRlY3RvclxcQ2lcXEF3c0NvZGVCdWlsZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0F3c0NvZGVCdWlsZC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE9uZHJhTVxcQ2lEZXRlY3RvclxcQ2lcXEJhbWJvbycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0JhbWJvby5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE9uZHJhTVxcQ2lEZXRlY3RvclxcQ2lcXEJpdGJ1Y2tldFBpcGVsaW5lcycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0JpdGJ1Y2tldFBpcGVsaW5lcy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE9uZHJhTVxcQ2lEZXRlY3RvclxcQ2lcXEJ1ZGR5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvQ2kvQnVkZHkucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXENpXFxDaUludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0NpSW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcQ2lyY2xlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvQ2kvQ2lyY2xlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcQ29kZXNoaXAnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9Db2Rlc2hpcC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE9uZHJhTVxcQ2lEZXRlY3RvclxcQ2lcXENvbnRpbnVvdXNwaHAnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9Db250aW51b3VzcGhwLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcRHJvbmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9Ecm9uZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE9uZHJhTVxcQ2lEZXRlY3RvclxcQ2lcXEdpdEh1YkFjdGlvbnMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9HaXRIdWJBY3Rpb25zLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcR2l0TGFiJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvQ2kvR2l0TGFiLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcSmVua2lucycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0plbmtpbnMucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXENpXFxUZWFtQ2l0eScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL1RlYW1DaXR5LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcVHJhdmlzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvQ2kvVHJhdmlzLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcV2VyY2tlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL1dlcmNrZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXEVudicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0Vudi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE9uZHJhTVxcQ2lEZXRlY3RvclxcRXhjZXB0aW9uXFxDaU5vdERldGVjdGVkRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvRXhjZXB0aW9uL0NpTm90RGV0ZWN0ZWRFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXFRyaW5hcnlMb2dpYycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL1RyaW5hcnlMb2dpYy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcQ29udGFpbmVyXFxDb250YWluZXJFeGNlcHRpb25JbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2NvbnRhaW5lci9zcmMvQ29udGFpbmVyRXhjZXB0aW9uSW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUHNyXFxDb250YWluZXJcXENvbnRhaW5lckludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9wc3IvY29udGFpbmVyL3NyYy9Db250YWluZXJJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXENvbnRhaW5lclxcTm90Rm91bmRFeGNlcHRpb25JbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2NvbnRhaW5lci9zcmMvTm90Rm91bmRFeGNlcHRpb25JbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXEh0dHBcXE1lc3NhZ2VcXE1lc3NhZ2VJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2h0dHAtbWVzc2FnZS9zcmMvTWVzc2FnZUludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcSHR0cFxcTWVzc2FnZVxcUmVxdWVzdEludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9wc3IvaHR0cC1tZXNzYWdlL3NyYy9SZXF1ZXN0SW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUHNyXFxIdHRwXFxNZXNzYWdlXFxSZXNwb25zZUludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9wc3IvaHR0cC1tZXNzYWdlL3NyYy9SZXNwb25zZUludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcSHR0cFxcTWVzc2FnZVxcU2VydmVyUmVxdWVzdEludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9wc3IvaHR0cC1tZXNzYWdlL3NyYy9TZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUHNyXFxIdHRwXFxNZXNzYWdlXFxTdHJlYW1JbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2h0dHAtbWVzc2FnZS9zcmMvU3RyZWFtSW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUHNyXFxIdHRwXFxNZXNzYWdlXFxVcGxvYWRlZEZpbGVJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2h0dHAtbWVzc2FnZS9zcmMvVXBsb2FkZWRGaWxlSW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUHNyXFxIdHRwXFxNZXNzYWdlXFxVcmlJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2h0dHAtbWVzc2FnZS9zcmMvVXJpSW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUHNyXFxMb2dcXEFic3RyYWN0TG9nZ2VyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3Bzci9sb2cvc3JjL0Fic3RyYWN0TG9nZ2VyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUHNyXFxMb2dcXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9wc3IvbG9nL3NyYy9JbnZhbGlkQXJndW1lbnRFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXExvZ1xcTG9nTGV2ZWwnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2xvZy9zcmMvTG9nTGV2ZWwucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXExvZ1xcTG9nZ2VyQXdhcmVJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2xvZy9zcmMvTG9nZ2VyQXdhcmVJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXExvZ1xcTG9nZ2VyQXdhcmVUcmFpdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9wc3IvbG9nL3NyYy9Mb2dnZXJBd2FyZVRyYWl0LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUHNyXFxMb2dcXExvZ2dlckludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9wc3IvbG9nL3NyYy9Mb2dnZXJJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXExvZ1xcTG9nZ2VyVHJhaXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2xvZy9zcmMvTG9nZ2VyVHJhaXQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXExvZ1xcTnVsbExvZ2dlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9wc3IvbG9nL3NyYy9OdWxsTG9nZ2VyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXENhY2hlXFxBcnJheUNhY2hlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2NhY2hlL3NyYy9BcnJheUNhY2hlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXENhY2hlXFxDYWNoZUludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9jYWNoZS9zcmMvQ2FjaGVJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcQ2hpbGRQcm9jZXNzXFxQcm9jZXNzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2NoaWxkLXByb2Nlc3Mvc3JjL1Byb2Nlc3MucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxCYWRTZXJ2ZXJFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZG5zL3NyYy9CYWRTZXJ2ZXJFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxDb25maWdcXENvbmZpZycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9kbnMvc3JjL0NvbmZpZy9Db25maWcucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxDb25maWdcXEhvc3RzRmlsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9kbnMvc3JjL0NvbmZpZy9Ib3N0c0ZpbGUucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxNb2RlbFxcTWVzc2FnZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9kbnMvc3JjL01vZGVsL01lc3NhZ2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxNb2RlbFxcUmVjb3JkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2Rucy9zcmMvTW9kZWwvUmVjb3JkLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUHJvdG9jb2xcXEJpbmFyeUR1bXBlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9kbnMvc3JjL1Byb3RvY29sL0JpbmFyeUR1bXBlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXFByb3RvY29sXFxQYXJzZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZG5zL3NyYy9Qcm90b2NvbC9QYXJzZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxRdWVyeVxcQ2FjaGluZ0V4ZWN1dG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2Rucy9zcmMvUXVlcnkvQ2FjaGluZ0V4ZWN1dG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUXVlcnlcXENhbmNlbGxhdGlvbkV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9kbnMvc3JjL1F1ZXJ5L0NhbmNlbGxhdGlvbkV4Y2VwdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXFF1ZXJ5XFxDb29wRXhlY3V0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZG5zL3NyYy9RdWVyeS9Db29wRXhlY3V0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxRdWVyeVxcRXhlY3V0b3JJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZG5zL3NyYy9RdWVyeS9FeGVjdXRvckludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXFF1ZXJ5XFxGYWxsYmFja0V4ZWN1dG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2Rucy9zcmMvUXVlcnkvRmFsbGJhY2tFeGVjdXRvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXFF1ZXJ5XFxIb3N0c0ZpbGVFeGVjdXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9kbnMvc3JjL1F1ZXJ5L0hvc3RzRmlsZUV4ZWN1dG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUXVlcnlcXFF1ZXJ5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2Rucy9zcmMvUXVlcnkvUXVlcnkucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxRdWVyeVxcUmV0cnlFeGVjdXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9kbnMvc3JjL1F1ZXJ5L1JldHJ5RXhlY3V0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxRdWVyeVxcU2VsZWN0aXZlVHJhbnNwb3J0RXhlY3V0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZG5zL3NyYy9RdWVyeS9TZWxlY3RpdmVUcmFuc3BvcnRFeGVjdXRvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXFF1ZXJ5XFxUY3BUcmFuc3BvcnRFeGVjdXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9kbnMvc3JjL1F1ZXJ5L1RjcFRyYW5zcG9ydEV4ZWN1dG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUXVlcnlcXFRpbWVvdXRFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZG5zL3NyYy9RdWVyeS9UaW1lb3V0RXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUXVlcnlcXFRpbWVvdXRFeGVjdXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9kbnMvc3JjL1F1ZXJ5L1RpbWVvdXRFeGVjdXRvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXFF1ZXJ5XFxVZHBUcmFuc3BvcnRFeGVjdXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9kbnMvc3JjL1F1ZXJ5L1VkcFRyYW5zcG9ydEV4ZWN1dG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUmVjb3JkTm90Rm91bmRFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZG5zL3NyYy9SZWNvcmROb3RGb3VuZEV4Y2VwdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXFJlc29sdmVyXFxGYWN0b3J5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2Rucy9zcmMvUmVzb2x2ZXIvRmFjdG9yeS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXFJlc29sdmVyXFxSZXNvbHZlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9kbnMvc3JjL1Jlc29sdmVyL1Jlc29sdmVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUmVzb2x2ZXJcXFJlc29sdmVySW50ZXJmYWNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2Rucy9zcmMvUmVzb2x2ZXIvUmVzb2x2ZXJJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRXZlbnRMb29wXFxFeHRFdkxvb3AnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvRXh0RXZMb29wLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEV2ZW50TG9vcFxcRXh0RXZlbnRMb29wJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2V2ZW50LWxvb3Avc3JjL0V4dEV2ZW50TG9vcC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxFdmVudExvb3BcXEV4dExpYmV2TG9vcCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9ldmVudC1sb29wL3NyYy9FeHRMaWJldkxvb3AucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRXZlbnRMb29wXFxFeHRMaWJldmVudExvb3AnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvRXh0TGliZXZlbnRMb29wLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEV2ZW50TG9vcFxcRXh0VXZMb29wJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2V2ZW50LWxvb3Avc3JjL0V4dFV2TG9vcC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxFdmVudExvb3BcXEZhY3RvcnknID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvRmFjdG9yeS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxFdmVudExvb3BcXExvb3AnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvTG9vcC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxFdmVudExvb3BcXExvb3BJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvTG9vcEludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxFdmVudExvb3BcXFNpZ25hbHNIYW5kbGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2V2ZW50LWxvb3Avc3JjL1NpZ25hbHNIYW5kbGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEV2ZW50TG9vcFxcU3RyZWFtU2VsZWN0TG9vcCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9ldmVudC1sb29wL3NyYy9TdHJlYW1TZWxlY3RMb29wLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEV2ZW50TG9vcFxcVGlja1xcRnV0dXJlVGlja1F1ZXVlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2V2ZW50LWxvb3Avc3JjL1RpY2svRnV0dXJlVGlja1F1ZXVlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEV2ZW50TG9vcFxcVGltZXJJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvVGltZXJJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRXZlbnRMb29wXFxUaW1lclxcVGltZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvVGltZXIvVGltZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRXZlbnRMb29wXFxUaW1lclxcVGltZXJzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2V2ZW50LWxvb3Avc3JjL1RpbWVyL1RpbWVycy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxCcm93c2VyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL0Jyb3dzZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcQ2xpZW50XFxDbGllbnQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvaHR0cC9zcmMvQ2xpZW50L0NsaWVudC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxIdHRwU2VydmVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL0h0dHBTZXJ2ZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXEFic3RyYWN0TWVzc2FnZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9BYnN0cmFjdE1lc3NhZ2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXEFic3RyYWN0UmVxdWVzdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9BYnN0cmFjdFJlcXVlc3QucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXEJ1ZmZlcmVkQm9keScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9CdWZmZXJlZEJvZHkucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXENodW5rZWREZWNvZGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL0lvL0NodW5rZWREZWNvZGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxDaHVua2VkRW5jb2RlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9DaHVua2VkRW5jb2Rlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcQ2xpZW50Q29ubmVjdGlvbk1hbmFnZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvaHR0cC9zcmMvSW8vQ2xpZW50Q29ubmVjdGlvbk1hbmFnZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXENsaWVudFJlcXVlc3RTdGF0ZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9DbGllbnRSZXF1ZXN0U3RhdGUucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXENsaWVudFJlcXVlc3RTdHJlYW0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvaHR0cC9zcmMvSW8vQ2xpZW50UmVxdWVzdFN0cmVhbS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcQ2xvY2snID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvaHR0cC9zcmMvSW8vQ2xvY2sucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXENsb3NlUHJvdGVjdGlvblN0cmVhbScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9DbG9zZVByb3RlY3Rpb25TdHJlYW0ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXEVtcHR5Qm9keVN0cmVhbScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9FbXB0eUJvZHlTdHJlYW0ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXEh0dHBCb2R5U3RyZWFtJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL0lvL0h0dHBCb2R5U3RyZWFtLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxJbmlVdGlsJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL0lvL0luaVV0aWwucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXExlbmd0aExpbWl0ZWRTdHJlYW0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvaHR0cC9zcmMvSW8vTGVuZ3RoTGltaXRlZFN0cmVhbS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcTWlkZGxld2FyZVJ1bm5lcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9NaWRkbGV3YXJlUnVubmVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxNdWx0aXBhcnRQYXJzZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvaHR0cC9zcmMvSW8vTXVsdGlwYXJ0UGFyc2VyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxQYXVzZUJ1ZmZlclN0cmVhbScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9QYXVzZUJ1ZmZlclN0cmVhbS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcUmVhZGFibGVCb2R5U3RyZWFtJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL0lvL1JlYWRhYmxlQm9keVN0cmVhbS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcUmVxdWVzdEhlYWRlclBhcnNlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9SZXF1ZXN0SGVhZGVyUGFyc2VyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxTZW5kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvaHR0cC9zcmMvSW8vU2VuZGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxTdHJlYW1pbmdTZXJ2ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvaHR0cC9zcmMvSW8vU3RyZWFtaW5nU2VydmVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxUcmFuc2FjdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9UcmFuc2FjdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcVXBsb2FkZWRGaWxlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL0lvL1VwbG9hZGVkRmlsZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxNZXNzYWdlXFxSZXF1ZXN0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL01lc3NhZ2UvUmVxdWVzdC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxNZXNzYWdlXFxSZXNwb25zZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9NZXNzYWdlL1Jlc3BvbnNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXE1lc3NhZ2VcXFJlc3BvbnNlRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL01lc3NhZ2UvUmVzcG9uc2VFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcTWVzc2FnZVxcU2VydmVyUmVxdWVzdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9NZXNzYWdlL1NlcnZlclJlcXVlc3QucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcTWVzc2FnZVxcVXJpJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL01lc3NhZ2UvVXJpLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXE1pZGRsZXdhcmVcXExpbWl0Q29uY3VycmVudFJlcXVlc3RzTWlkZGxld2FyZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9odHRwL3NyYy9NaWRkbGV3YXJlL0xpbWl0Q29uY3VycmVudFJlcXVlc3RzTWlkZGxld2FyZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxNaWRkbGV3YXJlXFxSZXF1ZXN0Qm9keUJ1ZmZlck1pZGRsZXdhcmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvaHR0cC9zcmMvTWlkZGxld2FyZS9SZXF1ZXN0Qm9keUJ1ZmZlck1pZGRsZXdhcmUucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcTWlkZGxld2FyZVxcUmVxdWVzdEJvZHlQYXJzZXJNaWRkbGV3YXJlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL01pZGRsZXdhcmUvUmVxdWVzdEJvZHlQYXJzZXJNaWRkbGV3YXJlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXE1pZGRsZXdhcmVcXFN0cmVhbWluZ1JlcXVlc3RNaWRkbGV3YXJlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL01pZGRsZXdhcmUvU3RyZWFtaW5nUmVxdWVzdE1pZGRsZXdhcmUucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcU2VydmVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L2h0dHAvc3JjL1NlcnZlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxQcm9taXNlXFxEZWZlcnJlZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9wcm9taXNlL3NyYy9EZWZlcnJlZC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxQcm9taXNlXFxFeGNlcHRpb25cXENvbXBvc2l0ZUV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9wcm9taXNlL3NyYy9FeGNlcHRpb24vQ29tcG9zaXRlRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFByb21pc2VcXEV4Y2VwdGlvblxcTGVuZ3RoRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L3Byb21pc2Uvc3JjL0V4Y2VwdGlvbi9MZW5ndGhFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcUHJvbWlzZVxcSW50ZXJuYWxcXENhbmNlbGxhdGlvblF1ZXVlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L3Byb21pc2Uvc3JjL0ludGVybmFsL0NhbmNlbGxhdGlvblF1ZXVlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFByb21pc2VcXEludGVybmFsXFxGdWxmaWxsZWRQcm9taXNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L3Byb21pc2Uvc3JjL0ludGVybmFsL0Z1bGZpbGxlZFByb21pc2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcUHJvbWlzZVxcSW50ZXJuYWxcXFJlamVjdGVkUHJvbWlzZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9wcm9taXNlL3NyYy9JbnRlcm5hbC9SZWplY3RlZFByb21pc2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcUHJvbWlzZVxcUHJvbWlzZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9wcm9taXNlL3NyYy9Qcm9taXNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFByb21pc2VcXFByb21pc2VJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3QvcHJvbWlzZS9zcmMvUHJvbWlzZUludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXENvbm5lY3Rpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc29ja2V0L3NyYy9Db25uZWN0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcQ29ubmVjdGlvbkludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zb2NrZXQvc3JjL0Nvbm5lY3Rpb25JbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU29ja2V0XFxDb25uZWN0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc29ja2V0L3NyYy9Db25uZWN0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU29ja2V0XFxDb25uZWN0b3JJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc29ja2V0L3NyYy9Db25uZWN0b3JJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU29ja2V0XFxEbnNDb25uZWN0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc29ja2V0L3NyYy9EbnNDb25uZWN0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU29ja2V0XFxGZFNlcnZlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zb2NrZXQvc3JjL0ZkU2VydmVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcRml4ZWRVcmlDb25uZWN0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc29ja2V0L3NyYy9GaXhlZFVyaUNvbm5lY3Rvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXEhhcHB5RXllQmFsbHNDb25uZWN0aW9uQnVpbGRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zb2NrZXQvc3JjL0hhcHB5RXllQmFsbHNDb25uZWN0aW9uQnVpbGRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXEhhcHB5RXllQmFsbHNDb25uZWN0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc29ja2V0L3NyYy9IYXBweUV5ZUJhbGxzQ29ubmVjdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcTGltaXRpbmdTZXJ2ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc29ja2V0L3NyYy9MaW1pdGluZ1NlcnZlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXFNlY3VyZUNvbm5lY3RvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zb2NrZXQvc3JjL1NlY3VyZUNvbm5lY3Rvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXFNlY3VyZVNlcnZlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zb2NrZXQvc3JjL1NlY3VyZVNlcnZlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXFNlcnZlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zb2NrZXQvc3JjL1NlcnZlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXFNlcnZlckludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zb2NrZXQvc3JjL1NlcnZlckludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXFNvY2tldFNlcnZlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zb2NrZXQvc3JjL1NvY2tldFNlcnZlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXFN0cmVhbUVuY3J5cHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc29ja2V0L3NyYy9TdHJlYW1FbmNyeXB0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcVGNwQ29ubmVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L3NvY2tldC9zcmMvVGNwQ29ubmVjdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcVGNwU2VydmVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L3NvY2tldC9zcmMvVGNwU2VydmVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcVGltZW91dENvbm5lY3RvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zb2NrZXQvc3JjL1RpbWVvdXRDb25uZWN0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU29ja2V0XFxVbml4Q29ubmVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L3NvY2tldC9zcmMvVW5peENvbm5lY3Rvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXFVuaXhTZXJ2ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc29ja2V0L3NyYy9Vbml4U2VydmVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFN0cmVhbVxcQ29tcG9zaXRlU3RyZWFtJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L3N0cmVhbS9zcmMvQ29tcG9zaXRlU3RyZWFtLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFN0cmVhbVxcRHVwbGV4UmVzb3VyY2VTdHJlYW0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc3RyZWFtL3NyYy9EdXBsZXhSZXNvdXJjZVN0cmVhbS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTdHJlYW1cXER1cGxleFN0cmVhbUludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zdHJlYW0vc3JjL0R1cGxleFN0cmVhbUludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTdHJlYW1cXFJlYWRhYmxlUmVzb3VyY2VTdHJlYW0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc3RyZWFtL3NyYy9SZWFkYWJsZVJlc291cmNlU3RyZWFtLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFN0cmVhbVxcUmVhZGFibGVTdHJlYW1JbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc3RyZWFtL3NyYy9SZWFkYWJsZVN0cmVhbUludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTdHJlYW1cXFRocm91Z2hTdHJlYW0nID0+IF9fRElSX18gLiAnLy4uJyAuICcvcmVhY3Qvc3RyZWFtL3NyYy9UaHJvdWdoU3RyZWFtLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFN0cmVhbVxcVXRpbCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9yZWFjdC9zdHJlYW0vc3JjL1V0aWwucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU3RyZWFtXFxXcml0YWJsZVJlc291cmNlU3RyZWFtJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L3N0cmVhbS9zcmMvV3JpdGFibGVSZXNvdXJjZVN0cmVhbS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTdHJlYW1cXFdyaXRhYmxlU3RyZWFtSW50ZXJmYWNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3JlYWN0L3N0cmVhbS9zcmMvV3JpdGFibGVTdHJlYW1JbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEFwcGxpY2F0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9BcHBsaWNhdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQXR0cmlidXRlXFxBc0NvbW1hbmQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0F0dHJpYnV0ZS9Bc0NvbW1hbmQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENJXFxHaXRodWJBY3Rpb25SZXBvcnRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvQ0kvR2l0aHViQWN0aW9uUmVwb3J0ZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9Db2xvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29tbWFuZExvYWRlclxcQ29tbWFuZExvYWRlckludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvQ29tbWFuZExvYWRlci9Db21tYW5kTG9hZGVySW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxDb21tYW5kTG9hZGVyXFxDb250YWluZXJDb21tYW5kTG9hZGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9Db21tYW5kTG9hZGVyL0NvbnRhaW5lckNvbW1hbmRMb2FkZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbW1hbmRMb2FkZXJcXEZhY3RvcnlDb21tYW5kTG9hZGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9Db21tYW5kTG9hZGVyL0ZhY3RvcnlDb21tYW5kTG9hZGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxDb21tYW5kXFxDb21tYW5kJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9Db21tYW5kL0NvbW1hbmQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbW1hbmRcXENvbXBsZXRlQ29tbWFuZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvQ29tbWFuZC9Db21wbGV0ZUNvbW1hbmQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbW1hbmRcXER1bXBDb21wbGV0aW9uQ29tbWFuZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvQ29tbWFuZC9EdW1wQ29tcGxldGlvbkNvbW1hbmQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbW1hbmRcXEhlbHBDb21tYW5kJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9Db21tYW5kL0hlbHBDb21tYW5kLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxDb21tYW5kXFxMYXp5Q29tbWFuZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvQ29tbWFuZC9MYXp5Q29tbWFuZC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29tbWFuZFxcTGlzdENvbW1hbmQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0NvbW1hbmQvTGlzdENvbW1hbmQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbW1hbmRcXExvY2thYmxlVHJhaXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0NvbW1hbmQvTG9ja2FibGVUcmFpdC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29tbWFuZFxcU2lnbmFsYWJsZUNvbW1hbmRJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0NvbW1hbmQvU2lnbmFsYWJsZUNvbW1hbmRJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbXBsZXRpb25cXENvbXBsZXRpb25JbnB1dCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvQ29tcGxldGlvbi9Db21wbGV0aW9uSW5wdXQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbXBsZXRpb25cXENvbXBsZXRpb25TdWdnZXN0aW9ucycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvQ29tcGxldGlvbi9Db21wbGV0aW9uU3VnZ2VzdGlvbnMucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbXBsZXRpb25cXE91dHB1dFxcQmFzaENvbXBsZXRpb25PdXRwdXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0NvbXBsZXRpb24vT3V0cHV0L0Jhc2hDb21wbGV0aW9uT3V0cHV0LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxDb21wbGV0aW9uXFxPdXRwdXRcXENvbXBsZXRpb25PdXRwdXRJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0NvbXBsZXRpb24vT3V0cHV0L0NvbXBsZXRpb25PdXRwdXRJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbXBsZXRpb25cXFN1Z2dlc3Rpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0NvbXBsZXRpb24vU3VnZ2VzdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29uc29sZUV2ZW50cycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvQ29uc29sZUV2ZW50cy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ3Vyc29yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9DdXJzb3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXERlcGVuZGVuY3lJbmplY3Rpb25cXEFkZENvbnNvbGVDb21tYW5kUGFzcycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvRGVwZW5kZW5jeUluamVjdGlvbi9BZGRDb25zb2xlQ29tbWFuZFBhc3MucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXERlc2NyaXB0b3JcXEFwcGxpY2F0aW9uRGVzY3JpcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0Rlc2NyaXB0b3IvQXBwbGljYXRpb25EZXNjcmlwdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRGVzY3JpcHRvclxcRGVzY3JpcHRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvRGVzY3JpcHRvci9EZXNjcmlwdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxEZXNjcmlwdG9yXFxEZXNjcmlwdG9ySW50ZXJmYWNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9EZXNjcmlwdG9yL0Rlc2NyaXB0b3JJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXERlc2NyaXB0b3JcXEpzb25EZXNjcmlwdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9EZXNjcmlwdG9yL0pzb25EZXNjcmlwdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxEZXNjcmlwdG9yXFxNYXJrZG93bkRlc2NyaXB0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0Rlc2NyaXB0b3IvTWFya2Rvd25EZXNjcmlwdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxEZXNjcmlwdG9yXFxUZXh0RGVzY3JpcHRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvRGVzY3JpcHRvci9UZXh0RGVzY3JpcHRvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRGVzY3JpcHRvclxcWG1sRGVzY3JpcHRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvRGVzY3JpcHRvci9YbWxEZXNjcmlwdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxFdmVudExpc3RlbmVyXFxFcnJvckxpc3RlbmVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9FdmVudExpc3RlbmVyL0Vycm9yTGlzdGVuZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEV2ZW50XFxDb25zb2xlQ29tbWFuZEV2ZW50JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9FdmVudC9Db25zb2xlQ29tbWFuZEV2ZW50LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxFdmVudFxcQ29uc29sZUVycm9yRXZlbnQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0V2ZW50L0NvbnNvbGVFcnJvckV2ZW50LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxFdmVudFxcQ29uc29sZUV2ZW50JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9FdmVudC9Db25zb2xlRXZlbnQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEV2ZW50XFxDb25zb2xlU2lnbmFsRXZlbnQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0V2ZW50L0NvbnNvbGVTaWduYWxFdmVudC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRXZlbnRcXENvbnNvbGVUZXJtaW5hdGVFdmVudCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvRXZlbnQvQ29uc29sZVRlcm1pbmF0ZUV2ZW50LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxFeGNlcHRpb25cXENvbW1hbmROb3RGb3VuZEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvRXhjZXB0aW9uL0NvbW1hbmROb3RGb3VuZEV4Y2VwdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRXhjZXB0aW9uXFxFeGNlcHRpb25JbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0V4Y2VwdGlvbi9FeGNlcHRpb25JbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEV4Y2VwdGlvblxcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9FeGNlcHRpb24vSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxFeGNlcHRpb25cXEludmFsaWRPcHRpb25FeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0V4Y2VwdGlvbi9JbnZhbGlkT3B0aW9uRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxFeGNlcHRpb25cXExvZ2ljRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9FeGNlcHRpb24vTG9naWNFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEV4Y2VwdGlvblxcTWlzc2luZ0lucHV0RXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9FeGNlcHRpb24vTWlzc2luZ0lucHV0RXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxFeGNlcHRpb25cXE5hbWVzcGFjZU5vdEZvdW5kRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9FeGNlcHRpb24vTmFtZXNwYWNlTm90Rm91bmRFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEV4Y2VwdGlvblxcUnVudGltZUV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvRXhjZXB0aW9uL1J1bnRpbWVFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEZvcm1hdHRlclxcTnVsbE91dHB1dEZvcm1hdHRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvRm9ybWF0dGVyL051bGxPdXRwdXRGb3JtYXR0ZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEZvcm1hdHRlclxcTnVsbE91dHB1dEZvcm1hdHRlclN0eWxlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9Gb3JtYXR0ZXIvTnVsbE91dHB1dEZvcm1hdHRlclN0eWxlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxGb3JtYXR0ZXJcXE91dHB1dEZvcm1hdHRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvRm9ybWF0dGVyL091dHB1dEZvcm1hdHRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRm9ybWF0dGVyXFxPdXRwdXRGb3JtYXR0ZXJJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0Zvcm1hdHRlci9PdXRwdXRGb3JtYXR0ZXJJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEZvcm1hdHRlclxcT3V0cHV0Rm9ybWF0dGVyU3R5bGUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0Zvcm1hdHRlci9PdXRwdXRGb3JtYXR0ZXJTdHlsZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRm9ybWF0dGVyXFxPdXRwdXRGb3JtYXR0ZXJTdHlsZUludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvRm9ybWF0dGVyL091dHB1dEZvcm1hdHRlclN0eWxlSW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxGb3JtYXR0ZXJcXE91dHB1dEZvcm1hdHRlclN0eWxlU3RhY2snID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0Zvcm1hdHRlci9PdXRwdXRGb3JtYXR0ZXJTdHlsZVN0YWNrLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxGb3JtYXR0ZXJcXFdyYXBwYWJsZU91dHB1dEZvcm1hdHRlckludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvRm9ybWF0dGVyL1dyYXBwYWJsZU91dHB1dEZvcm1hdHRlckludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSGVscGVyXFxEZWJ1Z0Zvcm1hdHRlckhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL0RlYnVnRm9ybWF0dGVySGVscGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxIZWxwZXJcXERlc2NyaXB0b3JIZWxwZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0hlbHBlci9EZXNjcmlwdG9ySGVscGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxIZWxwZXJcXER1bXBlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL0R1bXBlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSGVscGVyXFxGb3JtYXR0ZXJIZWxwZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0hlbHBlci9Gb3JtYXR0ZXJIZWxwZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvSGVscGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxIZWxwZXJcXEhlbHBlckludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL0hlbHBlckludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSGVscGVyXFxIZWxwZXJTZXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0hlbHBlci9IZWxwZXJTZXQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcSW5wdXRBd2FyZUhlbHBlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL0lucHV0QXdhcmVIZWxwZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcUHJvY2Vzc0hlbHBlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL1Byb2Nlc3NIZWxwZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcUHJvZ3Jlc3NCYXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0hlbHBlci9Qcm9ncmVzc0Jhci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSGVscGVyXFxQcm9ncmVzc0luZGljYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL1Byb2dyZXNzSW5kaWNhdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxIZWxwZXJcXFF1ZXN0aW9uSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvUXVlc3Rpb25IZWxwZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcU3ltZm9ueVF1ZXN0aW9uSGVscGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvU3ltZm9ueVF1ZXN0aW9uSGVscGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxIZWxwZXJcXFRhYmxlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGUucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcVGFibGVDZWxsJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGVDZWxsLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxIZWxwZXJcXFRhYmxlQ2VsbFN0eWxlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGVDZWxsU3R5bGUucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcVGFibGVSb3dzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGVSb3dzLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxIZWxwZXJcXFRhYmxlU2VwYXJhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGVTZXBhcmF0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcVGFibGVTdHlsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL1RhYmxlU3R5bGUucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXElucHV0XFxBcmd2SW5wdXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0lucHV0L0FyZ3ZJbnB1dC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSW5wdXRcXEFycmF5SW5wdXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0lucHV0L0FycmF5SW5wdXQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXElucHV0XFxJbnB1dCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvSW5wdXQvSW5wdXQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXElucHV0XFxJbnB1dEFyZ3VtZW50JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9JbnB1dC9JbnB1dEFyZ3VtZW50LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxJbnB1dFxcSW5wdXRBd2FyZUludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvSW5wdXQvSW5wdXRBd2FyZUludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSW5wdXRcXElucHV0RGVmaW5pdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvSW5wdXQvSW5wdXREZWZpbml0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxJbnB1dFxcSW5wdXRJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0lucHV0L0lucHV0SW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxJbnB1dFxcSW5wdXRPcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL0lucHV0L0lucHV0T3B0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxJbnB1dFxcU3RyZWFtYWJsZUlucHV0SW50ZXJmYWNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9JbnB1dC9TdHJlYW1hYmxlSW5wdXRJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXElucHV0XFxTdHJpbmdJbnB1dCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvSW5wdXQvU3RyaW5nSW5wdXQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXExvZ2dlclxcQ29uc29sZUxvZ2dlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvTG9nZ2VyL0NvbnNvbGVMb2dnZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXE91dHB1dFxcQnVmZmVyZWRPdXRwdXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL091dHB1dC9CdWZmZXJlZE91dHB1dC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcT3V0cHV0XFxDb25zb2xlT3V0cHV0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9PdXRwdXQvQ29uc29sZU91dHB1dC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcT3V0cHV0XFxDb25zb2xlT3V0cHV0SW50ZXJmYWNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9PdXRwdXQvQ29uc29sZU91dHB1dEludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcT3V0cHV0XFxDb25zb2xlU2VjdGlvbk91dHB1dCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvT3V0cHV0L0NvbnNvbGVTZWN0aW9uT3V0cHV0LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxPdXRwdXRcXE51bGxPdXRwdXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL091dHB1dC9OdWxsT3V0cHV0LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxPdXRwdXRcXE91dHB1dCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvT3V0cHV0L091dHB1dC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcT3V0cHV0XFxPdXRwdXRJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL091dHB1dC9PdXRwdXRJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXE91dHB1dFxcU3RyZWFtT3V0cHV0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9PdXRwdXQvU3RyZWFtT3V0cHV0LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxPdXRwdXRcXFRyaW1tZWRCdWZmZXJPdXRwdXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL091dHB1dC9UcmltbWVkQnVmZmVyT3V0cHV0LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxRdWVzdGlvblxcQ2hvaWNlUXVlc3Rpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL1F1ZXN0aW9uL0Nob2ljZVF1ZXN0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxRdWVzdGlvblxcQ29uZmlybWF0aW9uUXVlc3Rpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL1F1ZXN0aW9uL0NvbmZpcm1hdGlvblF1ZXN0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxRdWVzdGlvblxcUXVlc3Rpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL1F1ZXN0aW9uL1F1ZXN0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxTaWduYWxSZWdpc3RyeVxcU2lnbmFsUmVnaXN0cnknID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL1NpZ25hbFJlZ2lzdHJ5L1NpZ25hbFJlZ2lzdHJ5LnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxTaW5nbGVDb21tYW5kQXBwbGljYXRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL1NpbmdsZUNvbW1hbmRBcHBsaWNhdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcU3R5bGVcXE91dHB1dFN0eWxlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9TdHlsZS9PdXRwdXRTdHlsZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcU3R5bGVcXFN0eWxlSW50ZXJmYWNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvY29uc29sZS9TdHlsZS9TdHlsZUludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcU3R5bGVcXFN5bWZvbnlTdHlsZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvU3R5bGUvU3ltZm9ueVN0eWxlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxUZXJtaW5hbCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvVGVybWluYWwucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXFRlc3RlclxcQXBwbGljYXRpb25UZXN0ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL1Rlc3Rlci9BcHBsaWNhdGlvblRlc3Rlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcVGVzdGVyXFxDb21tYW5kQ29tcGxldGlvblRlc3RlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2NvbnNvbGUvVGVzdGVyL0NvbW1hbmRDb21wbGV0aW9uVGVzdGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxUZXN0ZXJcXENvbW1hbmRUZXN0ZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL1Rlc3Rlci9Db21tYW5kVGVzdGVyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxUZXN0ZXJcXENvbnN0cmFpbnRcXENvbW1hbmRJc1N1Y2Nlc3NmdWwnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL1Rlc3Rlci9Db25zdHJhaW50L0NvbW1hbmRJc1N1Y2Nlc3NmdWwucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXFRlc3RlclxcVGVzdGVyVHJhaXQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9jb25zb2xlL1Rlc3Rlci9UZXN0ZXJUcmFpdC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxDb21wYXJhdG9yXFxDb21wYXJhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvZmluZGVyL0NvbXBhcmF0b3IvQ29tcGFyYXRvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxDb21wYXJhdG9yXFxEYXRlQ29tcGFyYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2ZpbmRlci9Db21wYXJhdG9yL0RhdGVDb21wYXJhdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXENvbXBhcmF0b3JcXE51bWJlckNvbXBhcmF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9maW5kZXIvQ29tcGFyYXRvci9OdW1iZXJDb21wYXJhdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEV4Y2VwdGlvblxcQWNjZXNzRGVuaWVkRXhjZXB0aW9uJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvZmluZGVyL0V4Y2VwdGlvbi9BY2Nlc3NEZW5pZWRFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcRXhjZXB0aW9uXFxEaXJlY3RvcnlOb3RGb3VuZEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2ZpbmRlci9FeGNlcHRpb24vRGlyZWN0b3J5Tm90Rm91bmRFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcRmluZGVyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvZmluZGVyL0ZpbmRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxHaXRpZ25vcmUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9maW5kZXIvR2l0aWdub3JlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEdsb2InID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9maW5kZXIvR2xvYi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxJdGVyYXRvclxcQ3VzdG9tRmlsdGVySXRlcmF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvQ3VzdG9tRmlsdGVySXRlcmF0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcSXRlcmF0b3JcXERhdGVSYW5nZUZpbHRlckl0ZXJhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvZmluZGVyL0l0ZXJhdG9yL0RhdGVSYW5nZUZpbHRlckl0ZXJhdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEl0ZXJhdG9yXFxEZXB0aFJhbmdlRmlsdGVySXRlcmF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvRGVwdGhSYW5nZUZpbHRlckl0ZXJhdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEl0ZXJhdG9yXFxFeGNsdWRlRGlyZWN0b3J5RmlsdGVySXRlcmF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvRXhjbHVkZURpcmVjdG9yeUZpbHRlckl0ZXJhdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEl0ZXJhdG9yXFxGaWxlVHlwZUZpbHRlckl0ZXJhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvZmluZGVyL0l0ZXJhdG9yL0ZpbGVUeXBlRmlsdGVySXRlcmF0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcSXRlcmF0b3JcXEZpbGVjb250ZW50RmlsdGVySXRlcmF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvRmlsZWNvbnRlbnRGaWx0ZXJJdGVyYXRvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxJdGVyYXRvclxcRmlsZW5hbWVGaWx0ZXJJdGVyYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2ZpbmRlci9JdGVyYXRvci9GaWxlbmFtZUZpbHRlckl0ZXJhdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEl0ZXJhdG9yXFxMYXp5SXRlcmF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvTGF6eUl0ZXJhdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEl0ZXJhdG9yXFxNdWx0aXBsZVBjcmVGaWx0ZXJJdGVyYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2ZpbmRlci9JdGVyYXRvci9NdWx0aXBsZVBjcmVGaWx0ZXJJdGVyYXRvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxJdGVyYXRvclxcUGF0aEZpbHRlckl0ZXJhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvZmluZGVyL0l0ZXJhdG9yL1BhdGhGaWx0ZXJJdGVyYXRvci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxJdGVyYXRvclxcUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3InID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcSXRlcmF0b3JcXFNpemVSYW5nZUZpbHRlckl0ZXJhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvZmluZGVyL0l0ZXJhdG9yL1NpemVSYW5nZUZpbHRlckl0ZXJhdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEl0ZXJhdG9yXFxTb3J0YWJsZUl0ZXJhdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvZmluZGVyL0l0ZXJhdG9yL1NvcnRhYmxlSXRlcmF0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcSXRlcmF0b3JcXFZjc0lnbm9yZWRGaWx0ZXJJdGVyYXRvcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L2ZpbmRlci9JdGVyYXRvci9WY3NJZ25vcmVkRmlsdGVySXRlcmF0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcU3BsRmlsZUluZm8nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9maW5kZXIvU3BsRmlsZUluZm8ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXEV4Y2VwdGlvblxcRXhjZXB0aW9uSW50ZXJmYWNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcHJvY2Vzcy9FeGNlcHRpb24vRXhjZXB0aW9uSW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxQcm9jZXNzXFxFeGNlcHRpb25cXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3Byb2Nlc3MvRXhjZXB0aW9uL0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcRXhjZXB0aW9uXFxMb2dpY0V4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3Byb2Nlc3MvRXhjZXB0aW9uL0xvZ2ljRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxQcm9jZXNzXFxFeGNlcHRpb25cXFByb2Nlc3NGYWlsZWRFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wcm9jZXNzL0V4Y2VwdGlvbi9Qcm9jZXNzRmFpbGVkRXhjZXB0aW9uLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxQcm9jZXNzXFxFeGNlcHRpb25cXFByb2Nlc3NTaWduYWxlZEV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3Byb2Nlc3MvRXhjZXB0aW9uL1Byb2Nlc3NTaWduYWxlZEV4Y2VwdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcRXhjZXB0aW9uXFxQcm9jZXNzVGltZWRPdXRFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wcm9jZXNzL0V4Y2VwdGlvbi9Qcm9jZXNzVGltZWRPdXRFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXEV4Y2VwdGlvblxcUnVudGltZUV4Y2VwdGlvbicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3Byb2Nlc3MvRXhjZXB0aW9uL1J1bnRpbWVFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXEV4ZWN1dGFibGVGaW5kZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wcm9jZXNzL0V4ZWN1dGFibGVGaW5kZXIucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXElucHV0U3RyZWFtJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcHJvY2Vzcy9JbnB1dFN0cmVhbS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcUGhwRXhlY3V0YWJsZUZpbmRlcicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3Byb2Nlc3MvUGhwRXhlY3V0YWJsZUZpbmRlci5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcUGhwUHJvY2VzcycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3Byb2Nlc3MvUGhwUHJvY2Vzcy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcUGlwZXNcXEFic3RyYWN0UGlwZXMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wcm9jZXNzL1BpcGVzL0Fic3RyYWN0UGlwZXMucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXFBpcGVzXFxQaXBlc0ludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3Byb2Nlc3MvUGlwZXMvUGlwZXNJbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXFBpcGVzXFxVbml4UGlwZXMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wcm9jZXNzL1BpcGVzL1VuaXhQaXBlcy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcUGlwZXNcXFdpbmRvd3NQaXBlcycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3Byb2Nlc3MvUGlwZXMvV2luZG93c1BpcGVzLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxQcm9jZXNzXFxQcm9jZXNzJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcHJvY2Vzcy9Qcm9jZXNzLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxQcm9jZXNzXFxQcm9jZXNzVXRpbHMnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9wcm9jZXNzL1Byb2Nlc3NVdGlscy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcU3RyaW5nXFxBYnN0cmFjdFN0cmluZycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3N0cmluZy9BYnN0cmFjdFN0cmluZy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcU3RyaW5nXFxBYnN0cmFjdFVuaWNvZGVTdHJpbmcnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9zdHJpbmcvQWJzdHJhY3RVbmljb2RlU3RyaW5nLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxTdHJpbmdcXEJ5dGVTdHJpbmcnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9zdHJpbmcvQnl0ZVN0cmluZy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcU3RyaW5nXFxDb2RlUG9pbnRTdHJpbmcnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9zdHJpbmcvQ29kZVBvaW50U3RyaW5nLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxTdHJpbmdcXEV4Y2VwdGlvblxcRXhjZXB0aW9uSW50ZXJmYWNlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvc3RyaW5nL0V4Y2VwdGlvbi9FeGNlcHRpb25JbnRlcmZhY2UucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFN0cmluZ1xcRXhjZXB0aW9uXFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9zdHJpbmcvRXhjZXB0aW9uL0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbi5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcU3RyaW5nXFxFeGNlcHRpb25cXFJ1bnRpbWVFeGNlcHRpb24nID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9zdHJpbmcvRXhjZXB0aW9uL1J1bnRpbWVFeGNlcHRpb24ucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFN0cmluZ1xcSW5mbGVjdG9yXFxFbmdsaXNoSW5mbGVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvc3RyaW5nL0luZmxlY3Rvci9FbmdsaXNoSW5mbGVjdG9yLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxTdHJpbmdcXEluZmxlY3RvclxcRnJlbmNoSW5mbGVjdG9yJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvc3RyaW5nL0luZmxlY3Rvci9GcmVuY2hJbmZsZWN0b3IucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFN0cmluZ1xcSW5mbGVjdG9yXFxJbmZsZWN0b3JJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9zdHJpbmcvSW5mbGVjdG9yL0luZmxlY3RvckludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcU3RyaW5nXFxMYXp5U3RyaW5nJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvc3RyaW5nL0xhenlTdHJpbmcucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFN0cmluZ1xcU2x1Z2dlclxcQXNjaWlTbHVnZ2VyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvc3RyaW5nL1NsdWdnZXIvQXNjaWlTbHVnZ2VyLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxTdHJpbmdcXFNsdWdnZXJcXFNsdWdnZXJJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9zdHJpbmcvU2x1Z2dlci9TbHVnZ2VySW50ZXJmYWNlLnBocCcsCiAgICAgICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxTdHJpbmdcXFVuaWNvZGVTdHJpbmcnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9zdHJpbmcvVW5pY29kZVN0cmluZy5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbnRyYWN0c1xcU2VydmljZVxcQXR0cmlidXRlXFxSZXF1aXJlZCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL0F0dHJpYnV0ZS9SZXF1aXJlZC5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbnRyYWN0c1xcU2VydmljZVxcQXR0cmlidXRlXFxTdWJzY3JpYmVkU2VydmljZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL0F0dHJpYnV0ZS9TdWJzY3JpYmVkU2VydmljZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbnRyYWN0c1xcU2VydmljZVxcUmVzZXRJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9zZXJ2aWNlLWNvbnRyYWN0cy9SZXNldEludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbnRyYWN0c1xcU2VydmljZVxcU2VydmljZUxvY2F0b3JUcmFpdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL1NlcnZpY2VMb2NhdG9yVHJhaXQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb250cmFjdHNcXFNlcnZpY2VcXFNlcnZpY2VQcm92aWRlckludGVyZmFjZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL1NlcnZpY2VQcm92aWRlckludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbnRyYWN0c1xcU2VydmljZVxcU2VydmljZVN1YnNjcmliZXJJbnRlcmZhY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS9zZXJ2aWNlLWNvbnRyYWN0cy9TZXJ2aWNlU3Vic2NyaWJlckludGVyZmFjZS5waHAnLAogICAgICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbnRyYWN0c1xcU2VydmljZVxcU2VydmljZVN1YnNjcmliZXJUcmFpdCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL1NlcnZpY2VTdWJzY3JpYmVyVHJhaXQucGhwJywKICAgICAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxQb2x5ZmlsbFxcQ3R5cGVcXEN0eXBlJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtY3R5cGUvQ3R5cGUucGhwJywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbml0aWFsaXplcihDbGFzc0xvYWRlciAkbG9hZGVyKQogICAgewogICAgICAgIHJldHVybiBcQ2xvc3VyZTo6YmluZChmdW5jdGlvbiAoKSB1c2UgKCRsb2FkZXIpIHsKICAgICAgICAgICAgJGxvYWRlci0+cHJlZml4TGVuZ3Roc1BzcjQgPSBDb21wb3NlclN0YXRpY0luaXQwN2I0NmRjZTUxZWE0MWMwMjU1MTFiOTQxNWIzMjc0Yzo6JHByZWZpeExlbmd0aHNQc3I0OwogICAgICAgICAgICAkbG9hZGVyLT5wcmVmaXhEaXJzUHNyNCA9IENvbXBvc2VyU3RhdGljSW5pdDA3YjQ2ZGNlNTFlYTQxYzAyNTUxMWI5NDE1YjMyNzRjOjokcHJlZml4RGlyc1BzcjQ7CiAgICAgICAgICAgICRsb2FkZXItPmNsYXNzTWFwID0gQ29tcG9zZXJTdGF0aWNJbml0MDdiNDZkY2U1MWVhNDFjMDI1NTExYjk0MTViMzI3NGM6OiRjbGFzc01hcDsKCiAgICAgICAgfSwgbnVsbCwgQ2xhc3NMb2FkZXI6OmNsYXNzKTsKICAgIH0KfQo8P3BocAoKLy8gYXV0b2xvYWRfcmVhbC5waHAgQGdlbmVyYXRlZCBieSBDb21wb3NlcgoKY2xhc3MgQ29tcG9zZXJBdXRvbG9hZGVySW5pdDA3YjQ2ZGNlNTFlYTQxYzAyNTUxMWI5NDE1YjMyNzRjCnsKICAgIHByaXZhdGUgc3RhdGljICRsb2FkZXI7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkQ2xhc3NMb2FkZXIoJGNsYXNzKQogICAgewogICAgICAgIGlmICgnQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXInID09PSAkY2xhc3MpIHsKICAgICAgICAgICAgcmVxdWlyZSBfX0RJUl9fIC4gJy9DbGFzc0xvYWRlci5waHAnOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gXENvbXBvc2VyXEF1dG9sb2FkXENsYXNzTG9hZGVyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TG9hZGVyKCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gc2VsZjo6JGxvYWRlcikgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGxvYWRlcjsKICAgICAgICB9CgogICAgICAgIHNwbF9hdXRvbG9hZF9yZWdpc3RlcihhcnJheSgnQ29tcG9zZXJBdXRvbG9hZGVySW5pdDA3YjQ2ZGNlNTFlYTQxYzAyNTUxMWI5NDE1YjMyNzRjJywgJ2xvYWRDbGFzc0xvYWRlcicpLCB0cnVlLCB0cnVlKTsKICAgICAgICBzZWxmOjokbG9hZGVyID0gJGxvYWRlciA9IG5ldyBcQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXIoXGRpcm5hbWUoX19ESVJfXykpOwogICAgICAgIHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyKGFycmF5KCdDb21wb3NlckF1dG9sb2FkZXJJbml0MDdiNDZkY2U1MWVhNDFjMDI1NTExYjk0MTViMzI3NGMnLCAnbG9hZENsYXNzTG9hZGVyJykpOwoKICAgICAgICByZXF1aXJlIF9fRElSX18gLiAnL2F1dG9sb2FkX3N0YXRpYy5waHAnOwogICAgICAgIGNhbGxfdXNlcl9mdW5jKFxDb21wb3NlclxBdXRvbG9hZFxDb21wb3NlclN0YXRpY0luaXQwN2I0NmRjZTUxZWE0MWMwMjU1MTFiOTQxNWIzMjc0Yzo6Z2V0SW5pdGlhbGl6ZXIoJGxvYWRlcikpOwoKICAgICAgICAkbG9hZGVyLT5zZXRDbGFzc01hcEF1dGhvcml0YXRpdmUodHJ1ZSk7CiAgICAgICAgJGxvYWRlci0+cmVnaXN0ZXIodHJ1ZSk7CgogICAgICAgICRmaWxlc1RvTG9hZCA9IFxDb21wb3NlclxBdXRvbG9hZFxDb21wb3NlclN0YXRpY0luaXQwN2I0NmRjZTUxZWE0MWMwMjU1MTFiOTQxNWIzMjc0Yzo6JGZpbGVzOwogICAgICAgICRyZXF1aXJlRmlsZSA9IFxDbG9zdXJlOjpiaW5kKHN0YXRpYyBmdW5jdGlvbiAoJGZpbGVJZGVudGlmaWVyLCAkZmlsZSkgewogICAgICAgICAgICBpZiAoZW1wdHkoJEdMT0JBTFNbJ19fY29tcG9zZXJfYXV0b2xvYWRfZmlsZXMnXVskZmlsZUlkZW50aWZpZXJdKSkgewogICAgICAgICAgICAgICAgJEdMT0JBTFNbJ19fY29tcG9zZXJfYXV0b2xvYWRfZmlsZXMnXVskZmlsZUlkZW50aWZpZXJdID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICByZXF1aXJlICRmaWxlOwogICAgICAgICAgICB9CiAgICAgICAgfSwgbnVsbCwgbnVsbCk7CiAgICAgICAgZm9yZWFjaCAoJGZpbGVzVG9Mb2FkIGFzICRmaWxlSWRlbnRpZmllciA9PiAkZmlsZSkgewogICAgICAgICAgICAkcmVxdWlyZUZpbGUoJGZpbGVJZGVudGlmaWVyLCAkZmlsZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGxvYWRlcjsKICAgIH0KfQo8P3BocCByZXR1cm4gYXJyYXkoCiAgICAncm9vdCcgPT4gYXJyYXkoCiAgICAgICAgJ25hbWUnID0+ICdwaHBzdGFuL3BocHN0YW4tc3JjJywKICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjEyLjMzJywKICAgICAgICAndmVyc2lvbicgPT4gJzEuMTIuMzMuMCcsCiAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzhjNjZkODI1NWIyOWUxNDZmNmYxNTBhYmFlNTc5ZjFmNmY5MTcwYTUnLAogICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vLi4vJywKICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAnZGV2JyA9PiB0cnVlLAogICAgKSwKICAgICd2ZXJzaW9ucycgPT4gYXJyYXkoCiAgICAgICAgJ2JyaWFuaXVtL3BhcmF0ZXN0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjYuNi4zJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICc2LjYuMy4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2YyZDc4MWJiOTEzNmNkYTJmNWU3M2VlNzc4MDQ5ZTgwYmE2ODFjZjYnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9icmlhbml1bS9wYXJhdGVzdCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ2NsdWUvbmRqc29uLXJlYWN0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjEuMy4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjMuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzM5MmRjMTY1ZmNlOTNiNWJiNWM2MzdiNjdlNTk2MTkyMjNjOTMxYjAnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9jbHVlL25kanNvbi1yZWFjdCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdjb21wb3Nlci9jYS1idW5kbGUnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjUuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS41LjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcwYzVjY2ZjZmVhMzEyYjVjNWExOTBhMjFhYzVjZWY5M2Y3NGJhZjk5JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi9jYS1idW5kbGUnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnY29tcG9zZXIvcGNyZScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzMuMy4xJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICczLjMuMS4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzYzYWFlYWMyMWQ3ZTc3NWZmOWJjOWQ0NTAyMWUxNzQ1Yzk3NTIxYzQnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uL3BjcmUnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnY29tcG9zZXIvc2VtdmVyJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMy40LjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzMuNC4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMzVlOGQwYWY0NDg2MTQxYmM3NDVmMjNhMjljYzIwOTFlYjYyNGEzMicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4vc2VtdmVyJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ2NvbXBvc2VyL3hkZWJ1Zy1oYW5kbGVyJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMy4wLjUnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzMuMC41LjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNmMxOTI1NTYxNjMyZTgzZDYwYTQ0NDkyZTBiMzQ0Y2Y0OGFiODVlZicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4veGRlYnVnLWhhbmRsZXInLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnY3dlYWdhbnMvY29tcG9zZXItcGF0Y2hlcycgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzEuNy4zJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjcuMy4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2UxOTBkNDQ2NmZlMmIxMDNhNTU0NjdkZmE4M2ZjMmZlY2ZjYWYyZGInLAogICAgICAgICAgICAndHlwZScgPT4gJ2NvbXBvc2VyLXBsdWdpbicsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2N3ZWFnYW5zL2NvbXBvc2VyLXBhdGNoZXMnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gdHJ1ZSwKICAgICAgICApLAogICAgICAgICdkb2N0cmluZS9pbnN0YW50aWF0b3InID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjQuMScsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS40LjEuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcxMGRjZmNlMTUxYjk2N2QyMGZkZTFiMzRhZTY2NDA3MTJjMzg5MWJjJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vZG9jdHJpbmUvaW5zdGFudGlhdG9yJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAnZXZlbmVtZW50L2V2ZW5lbWVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YzLjAuMicsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy4wLjIuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcwYTE2YjBkNzFhYjEzMjg0MzM5YWJiOTlkOWQyYmQ4MTM2NDBlZmJjJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vZXZlbmVtZW50L2V2ZW5lbWVudCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdmaWRyeS9jcHUtY29yZS1jb3VudGVyJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMS4yLjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMi4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnODUyMDQ1MWExNDBkM2Y0NmFjMzMwNDI3MTUxMTVlMjkwY2Y1Nzg1ZicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXInLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnZmlnL2h0dHAtbWVzc2FnZS11dGlsJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMS4xLjUnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMS41LjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnOWQ5NGRjMDE1NDIzMGFjMzllNWJmODkzOThiMzI0YTg2ZjYzZjc2NScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2ZpZy9odHRwLW1lc3NhZ2UtdXRpbCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdncm9neS9waHAtcGFyYWxsZWwtbGludCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgICAgICdyZXBsYWNlZCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAwID0+ICcqJywKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgICdob2EvY29tcGlsZXInID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICczLjE3LjA4LjA4JywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICczLjE3LjA4LjA4JywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2FhMDljYWYwYmYyOGFkYWU2NjU0Y2E2ZWU0MTVlZTJmNTIyNjcyZGUnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9ob2EvY29tcGlsZXInLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnaG9hL2NvbnNpc3RlbmN5JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMS4xNy4wNS4wMicsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4xNy4wNS4wMicsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdmZDdkMGFkYzgyNDEwNTA3ZjMzMjUxNmZhZjY1NWI2ZWQyMmU0YzJmJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vaG9hL2NvbnNpc3RlbmN5JywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ2hvYS9ldmVudCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzEuMTcuMDEuMTMnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMTcuMDEuMTMnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNmMwMDYwZGNlZDIxMmZmYTNhZjBlMzRiYjQ2NjI0Zjk5MGIyOWM1NCcsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2hvYS9ldmVudCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdob2EvZXhjZXB0aW9uJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMS4xNy4wMS4xNicsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4xNy4wMS4xNicsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcwOTE3MjdkNDY0MjBhM2Q3NDY4ZWYwNTk1NjUxNDg4YmZjM2E0NThmJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vaG9hL2V4Y2VwdGlvbicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdob2EvZmlsZScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzEuMTcuMDcuMTEnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMTcuMDcuMTEnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMzVjYjk3OWI3NzliYzU0OTE4ZDJmOWE0ZTAyZWQ2YzdhMWZhNjdjYScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2hvYS9maWxlJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ2hvYS9pdGVyYXRvcicgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzIuMTcuMDEuMTAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzIuMTcuMDEuMTAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnZDExMjBiYTA5Y2I0Y2NkMDQ5Yzg2ZDEwMDU4YWI5NGFmMjQ1ZjBjYycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2hvYS9pdGVyYXRvcicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdob2EvbWF0aCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzEuMTcuMDUuMTYnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMTcuMDUuMTYnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNzE1MDc4NWQzMGY1ZDU2NTcwNDkxMjExNmE0NjJlOWY1YmM4M2EwYycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2hvYS9tYXRoJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ2hvYS9wcm90b2NvbCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzEuMTcuMDEuMTQnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMTcuMDEuMTQnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNWMyY2Y5NzIxNTFjNDVmMzczMjMwZGExNzBlYTAxNWRlZWNmMTllMicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2hvYS9wcm90b2NvbCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdob2EvcmVnZXgnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjE3LjAxLjEzJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjE3LjAxLjEzJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzdlMjYzYTYxYjZmYjQ1YzFkMDNkOGU1ZWY3NzY2ODUxOGFiZDViZWMnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9ob2EvcmVnZXgnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnaG9hL3N0cmVhbScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzEuMTcuMDIuMjEnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMTcuMDIuMjEnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMzI5M2NmZmZjYTJkZTEwNTI1ZGY1MTQzNmFkZjg4YTU1OTE1MWQ4MicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2hvYS9zdHJlYW0nLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnaG9hL3VzdHJpbmcnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICc0LjE3LjAxLjE2JywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICc0LjE3LjAxLjE2JywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2U2MzI2ZTI3MzkxNzg3OTliMWZlM2ZkZDkyMDI5Zjk1MTdmYTE3YTAnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9ob2EvdXN0cmluZycsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdob2EvdmlzaXRvcicgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzIuMTcuMDEuMTYnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzIuMTcuMDEuMTYnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnYzE4ZmUxY2JhYzk4YWU0NDllMGQ1NmU4NzQ2OTEwM2JhMDhmMjI0YScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL2hvYS92aXNpdG9yJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ2hvYS96Zm9ybWF0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMS4xNy4wMS4xMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4xNy4wMS4xMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc1MjJjMzgxYTJhMDc1ZDRiOWRiYjQyZWI0NTkyZGQwOTUyMGU0YWMyJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vaG9hL3pmb3JtYXQnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnamFrdWItb25kZXJrYS9waHAtcGFyYWxsZWwtbGludCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgICAgICdyZXBsYWNlZCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAwID0+ICcqJywKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgICdqZWFuODUvcHJldHR5LXBhY2thZ2UtdmVyc2lvbnMnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcyLjAuNScsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMi4wLjUuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdhZTU0N2U0NTVhM2Q4YmFiZDA3Yjk2OTY2YjE3ZDdmZDIxZDljNmFmJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vamVhbjg1L3ByZXR0eS1wYWNrYWdlLXZlcnNpb25zJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAnamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnZGV2LW1hc3RlcicsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnZGV2LW1hc3RlcicsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc1NmY2YjllNTVmNTg4NWU2NTE1NTM4NDNhMWFhZjllYzljNTg2YzA0JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KAogICAgICAgICAgICAgICAgMCA9PiAnOTk5OTk5OS1kZXYnLAogICAgICAgICAgICApLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdteWNsYWJzL2RlZXAtY29weScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzEuMTEuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4xMS4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMTRkYWVkNDI5NmZhZTc0ZDllMzIwMWQyYzQ5MjVkMWFjYjdhYTYxNCcsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL215Y2xhYnMvZGVlcC1jb3B5JywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAnbmV0dGUvYm9vdHN0cmFwJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjMuMS40JywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICczLjEuNC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzFhNzk2NWI0ZWU0MDFhZDBlM2Y2NzNiOWMwMTZkMjQ4MWFmZGMyODAnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9uZXR0ZS9ib290c3RyYXAnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnbmV0dGUvZGknID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2My4xLjUnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzMuMS41LjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMDBlYTBhZmE2NDNiM2I0MzgzYTVjZDFhMzIyNjU2Yzk4OWFkZTQ5OCcsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL25ldHRlL2RpJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ25ldHRlL2ZpbmRlcicgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YyLjYuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMi42LjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc5OTFhZWZiNDI4NjBhYmVhYjhlMDAzOTcwYzM4MDlhOWQ4M2NiOTMyJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vbmV0dGUvZmluZGVyJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ25ldHRlL25lb24nID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2My4zLjMnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzMuMy4zLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMjJlMzg0ZGExNjJmYWI0Mjk2MWQ0OGViMDZjMDZkM2FkMGMxMWI5NScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL25ldHRlL25lb24nLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnbmV0dGUvcGhwLWdlbmVyYXRvcicgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YzLjYuOScsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy42LjkuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdkMzE3ODJmN2JkMmFlODRhZDA2Zjg2MzM5MWVjM2ZiNzdjYTRkMGE2JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vbmV0dGUvcGhwLWdlbmVyYXRvcicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICduZXR0ZS9yb2JvdC1sb2FkZXInID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2My40LjEnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzMuNC4xLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnZTJhZGMzMzRjYjk1ODE2NGMwNTBmNDg1ZDk5YzQ0YzQzMGY1MWZlMicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL25ldHRlL3JvYm90LWxvYWRlcicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICduZXR0ZS9zY2hlbWEnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2MS4yLjUnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMi41LjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMDQ2MmYwMTY2ZTgyM2FhZDY1N2M5MjI0ZDBmODQ5ZWNhYzFiYTEwYScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL25ldHRlL3NjaGVtYScsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICduZXR0ZS91dGlscycgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YzLjIuNycsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy4yLjcuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcwYWY0ZTNkZTRkZjlmMTU0MzUzNGJlYWIyNTVjY2Y0NTllN2EyYzk5JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vbmV0dGUvdXRpbHMnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnbmlraWMvcGhwLXBhcnNlcicgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3Y0LjE5LjQnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzQuMTkuNC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzcxNWY0ZDI1ZTIyNWJjNDdiMjkzYThiOTk3ZmU2Y2U5OWJmOTg3ZDInLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9uaWtpYy9waHAtcGFyc2VyJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ29uZHJhbS9jaS1kZXRlY3RvcicgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzMuNS4xJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICczLjUuMS4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzU5NGU2MTI1Mjg0M2I2ODk5OGJkZGQ0ODA3OGM1MDU4ZmU5MDI4YmQnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9vbmRyYW0vY2ktZGV0ZWN0b3InLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnNi4yNS4wLjIxJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICc2LjI1LjAuMjEnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnYzFiY2ZhYTEzMDcxOGU0MDA0YWI4MjYwYmVkNGJmZTk2YTQ2ZGMwMicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdvbmRyZWptaXJ0ZXMvc2ltcGxlLWRvd25ncmFkZXInID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjAuMicsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4wLjIuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc4MzJhYWFlNTNkY2ZlMzU4ZjYzMTgwNDk0ZGU4NzM0MjQ0NzczZDQ2JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vb25kcmVqbWlydGVzL3NpbXBsZS1kb3duZ3JhZGVyJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAncGhhci1pby9tYW5pZmVzdCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzIuMC4zJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcyLjAuMy4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzk3ODAzZWNhMzdkMzE5ZGZhNzgyNmNjMjQzN2ZjMDIwODU3YWNiNTMnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9waGFyLWlvL21hbmlmZXN0JywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAncGhhci1pby92ZXJzaW9uJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMy4yLjEnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzMuMi4xLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNGY3ZmQ3ODM2YzZmMzMyYmIyOTMzNTY5ZTU2NmEwZDZjNGNiZWQ3NCcsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3BoYXItaW8vdmVyc2lvbicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3BocC1wYXJhbGxlbC1saW50L3BocC1wYXJhbGxlbC1saW50JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjEuNC4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjQuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzZkYjU2MzUxNGYyN2UxOTU5NWExOWY0NWE0YmY3NTdiNjQwMTE5NGUnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9waHAtcGFyYWxsZWwtbGludC9waHAtcGFyYWxsZWwtbGludCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3BocHN0YW4vcGhwLTgtc3R1YnMnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcwLjMuMTExJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcwLjMuMTExLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMDAxMzI1MjE0NWRmNWQ4NDExMjc2NGQ0ZWE1N2VkMWM2ZjA3NDAxOCcsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3BocHN0YW4vcGhwLTgtc3R1YnMnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncGhwc3Rhbi9waHBkb2MtcGFyc2VyJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMS4zMy4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjMzLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc4MmEzMTFmZDM2OTBmYjJiZjdiNjRkNWM5OGY5MTJiM2RkNzQ2MTQwJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcGhwc3Rhbi9waHBkb2MtcGFyc2VyJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3BocHN0YW4vcGhwc3RhbicgPT4gYXJyYXkoCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICAgICAncmVwbGFjZWQnID0+IGFycmF5KAogICAgICAgICAgICAgICAgMCA9PiAnMS4xMi54JywKICAgICAgICAgICAgKSwKICAgICAgICApLAogICAgICAgICdwaHBzdGFuL3BocHN0YW4tZGVwcmVjYXRpb24tcnVsZXMnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjIuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4yLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdmYThjY2U3NzIwZmE3ODI4OTlhMGFhOTdiNmE0MTIyNWQxYmI3YjI2JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdwaHBzdGFuLWV4dGVuc2lvbicsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3BocHN0YW4vcGhwc3Rhbi1kZXByZWNhdGlvbi1ydWxlcycsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3BocHN0YW4vcGhwc3Rhbi1uZXR0ZScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzEuMy44JywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjMuOC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2JjNzRiOGIyMDhiNDdmMTYzZmU1NTcwOGZjZjFhMDMzMzI0N2ZhNzknLAogICAgICAgICAgICAndHlwZScgPT4gJ3BocHN0YW4tZXh0ZW5zaW9uJywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcGhwc3Rhbi9waHBzdGFuLW5ldHRlJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAncGhwc3Rhbi9waHBzdGFuLXBocHVuaXQnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjQuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS40LjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdmM2VhMDIxODY2ZjQyNjNmMDdjYTM2MzZiZjIyYzY0YmU5NjEwYzExJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdwaHBzdGFuLWV4dGVuc2lvbicsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3BocHN0YW4vcGhwc3Rhbi1waHB1bml0JywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAncGhwc3Rhbi9waHBzdGFuLXNyYycgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzEuMTIuMzMnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMTIuMzMuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc4YzY2ZDgyNTViMjllMTQ2ZjZmMTUwYWJhZTU3OWYxZjZmOTE3MGE1JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vLi4vJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3BocHN0YW4vcGhwc3Rhbi1zdHJpY3QtcnVsZXMnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjYuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS42LjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICczNjNmOTIxZGQ4NDQxNzc3ZDRmYzEzN2RlYjk5YmViNDg2Yzc3ZGYxJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdwaHBzdGFuLWV4dGVuc2lvbicsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3BocHN0YW4vcGhwc3Rhbi1zdHJpY3QtcnVsZXMnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gdHJ1ZSwKICAgICAgICApLAogICAgICAgICdwaHB1bml0L3BocC1jb2RlLWNvdmVyYWdlJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnOS4yLjMwJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICc5LjIuMzAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdjYTJiZDg3ZDJmOTIxNTkwNDY4MmE5Y2I5YmIzN2RkYTk4ZTc2MDg5JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcGhwdW5pdC9waHAtY29kZS1jb3ZlcmFnZScsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3BocHVuaXQvcGhwLWZpbGUtaXRlcmF0b3InID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICczLjAuNicsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy4wLjYuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdjZjFjMmU3YzIwM2FjNjUwZTM1MmY0Y2M2NzVhNzAyMWU3ZDFiM2NmJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcGhwdW5pdC9waHAtZmlsZS1pdGVyYXRvcicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3BocHVuaXQvcGhwLWludm9rZXInID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICczLjEuMScsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy4xLjEuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc1YTEwMTQ3ZDBhYWY2NWI1ODk0MGEwYjcyZjcxYzlhYzA0MjNjYzY3JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcGhwdW5pdC9waHAtaW52b2tlcicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3BocHVuaXQvcGhwLXRleHQtdGVtcGxhdGUnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcyLjAuNCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMi4wLjQuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc1ZGE1ZjY3ZmM5NTYyMWRmOWZmNGM0ZTVhODRkNmE4YTJhY2Y3YzI4JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcGhwdW5pdC9waHAtdGV4dC10ZW1wbGF0ZScsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3BocHVuaXQvcGhwLXRpbWVyJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnNS4wLjMnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzUuMC4zLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNWE2M2NlMjBlZDFiNWJmNTc3ODUwZTJjNGU4N2Y0YWE5MDJhZmJkMicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3BocHVuaXQvcGhwLXRpbWVyJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAncGhwdW5pdC9waHB1bml0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnOS41LjIzJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICc5LjUuMjMuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc4ODg1NTY4NTJlN2U5YmJlZWVkYjk2NTZhZmU0NjExODc2NWFkZTM0JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcGhwdW5pdC9waHB1bml0JywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAncHNyL2NvbnRhaW5lcicgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzEuMS4yJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjEuMi4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzUxM2UwNjY2ZjcyMTZjNzQ1OTE3MGQ1NmRmMjdkZmNlZmUxNjg5ZWEnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9wc3IvY29udGFpbmVyJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3Bzci9odHRwLW1lc3NhZ2UnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjEnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMS4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnY2I2Y2U0ODQ1Y2UzNGE4YWQ5ZTY4MTE3YzEwZWU5MGEyOTkxOWViYScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3Bzci9odHRwLW1lc3NhZ2UnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncHNyL2xvZycgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzIuMC4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcyLjAuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2VmMjlmNmQyNjI3OTg3MDdhOWVkZDU1NGUyYjgyNTE3ZWYzYTkzNzYnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9wc3IvbG9nJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3Bzci9sb2ctaW1wbGVtZW50YXRpb24nID0+IGFycmF5KAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICAgICAgJ3Byb3ZpZGVkJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgIDAgPT4gJzEuMHwyLjAnLAogICAgICAgICAgICApLAogICAgICAgICksCiAgICAgICAgJ3JlYWN0L2FzeW5jJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjMuMi4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICczLjIuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2JjM2VmNjcyYjMzZTk1YmY4MTRmZTgzNzc3MzFlNDY4ODhlZDRiNTQnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9yZWFjdC9hc3luYycsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdyZWFjdC9jYWNoZScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YxLjIuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4yLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdkNDdjNDcyYjY0YWE1NjA4MjI1ZjQ3OTY1YTQ4NGI3NWM3ODE3ZDViJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcmVhY3QvY2FjaGUnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncmVhY3QvY2hpbGQtcHJvY2VzcycgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzAuNy54LWRldicsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMC43Ljk5OTk5OTkuOTk5OTk5OS1kZXYnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnY2UyNjU0ZDIxZDJhNzQ5ZTBhNjE0MmQwMDQzMmU2NWJhMDAzYTJkOScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3JlYWN0L2NoaWxkLXByb2Nlc3MnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncmVhY3QvZG5zJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjEuMTMuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4xMy4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnZWI4YWUwMDFiNWE0NTU2NjVjODljMWRmOTdmNmZiNjgyZjhmYjBmNScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3JlYWN0L2RucycsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdyZWFjdC9ldmVudC1sb29wJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjEuNS4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjUuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2JiZTBiZDhjNTFmZmMwNWVlNDNmMTcyOTA4N2VkM2JkZjdkNTMzNTQnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9yZWFjdC9ldmVudC1sb29wJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3JlYWN0L2h0dHAnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2MS4xMC4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjEwLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc4MTExMjgxZWU1N2YyMmI3MTk0ZjVkYmEyMjVlNjA5YmE3Y2U0ZDIwJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vcmVhY3QvaHR0cCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdyZWFjdC9wcm9taXNlJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjMuMi4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICczLjIuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzhhMTY0NjQzMzEzYzcxMzU0NTgyZGM4NTBiNDJiMzNmYTEyYTRiNjMnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9yZWFjdC9wcm9taXNlJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3JlYWN0L3NvY2tldCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YxLjE2LjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMTYuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzIzZTRmZjMzZWEzZTE2MGQyZDFmNTlhMGU2MDUwZTRiMGZiMGVhYzEnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9yZWFjdC9zb2NrZXQnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAncmVhY3Qvc3RyZWFtJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjEuNC4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjQuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzFlNWIwYWNiOGZlNTUxNDNiNWI0MjY4MTcxNTUxOTBlYjZmNWIxOGQnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9yZWFjdC9zdHJlYW0nLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnc2ViYXN0aWFuL2NsaS1wYXJzZXInID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjAuMScsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4wLjEuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc0NDJlN2M3ZTY4N2U0MmFkYzAzNDcwYzdiNjY4YmM0YjI0MDJjMGIyJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc2ViYXN0aWFuL2NsaS1wYXJzZXInLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gdHJ1ZSwKICAgICAgICApLAogICAgICAgICdzZWJhc3RpYW4vY29kZS11bml0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMS4wLjgnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMC44LjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMWZjOWY2NGMwOTI3NjI3ZWY3OGJhNDM2YzliMTdkOTY3ZTY4ZTEyMCcsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3NlYmFzdGlhbi9jb2RlLXVuaXQnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gdHJ1ZSwKICAgICAgICApLAogICAgICAgICdzZWJhc3RpYW4vY29kZS11bml0LXJldmVyc2UtbG9va3VwJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMi4wLjMnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzIuMC4zLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnYWM5MWYwMWNjZWM0OWZiNzdiZGM2ZmQxZTU0OGJjNzBmN2ZhYTNlNScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3NlYmFzdGlhbi9jb2RlLXVuaXQtcmV2ZXJzZS1sb29rdXAnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gdHJ1ZSwKICAgICAgICApLAogICAgICAgICdzZWJhc3RpYW4vY29tcGFyYXRvcicgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzQuMC42JywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICc0LjAuNi4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzU1ZjQyNjE5ODllNTQ2ZGMxMTIyNThjN2E3NTkzNWE4MWE3Y2UzODInLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9zZWJhc3RpYW4vY29tcGFyYXRvcicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3NlYmFzdGlhbi9jb21wbGV4aXR5JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMi4wLjMnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzIuMC4zLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMjVmMjA3YzQwZDYyYjhiN2FhMzJmNWFiMDI2YzUzNTYxOTY0MDUzYScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3NlYmFzdGlhbi9jb21wbGV4aXR5JywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAnc2ViYXN0aWFuL2RpZmYnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICc0LjAuNCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnNC4wLjQuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICczNDYxZTNmY2NjN2NmZGZjMjcyMGJlOTEwZDNiZDczYzY5YmU1OTBkJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc2ViYXN0aWFuL2RpZmYnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gdHJ1ZSwKICAgICAgICApLAogICAgICAgICdzZWJhc3RpYW4vZW52aXJvbm1lbnQnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICc1LjEuNScsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnNS4xLjUuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc4MzBjNDNhODQ0ZjFmOGQ1YjdhMWY2ZDYwNzZiNzg0NDU0ZDhiN2VkJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc2ViYXN0aWFuL2Vudmlyb25tZW50JywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAnc2ViYXN0aWFuL2V4cG9ydGVyJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnNC4wLjQnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzQuMC40LjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNjVlOGI3ZGI0NzZjNWRkMjY3ZTY1ZWVhOWNhYjc3NTg0ZDNjZmZmOScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3NlYmFzdGlhbi9leHBvcnRlcicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3NlYmFzdGlhbi9nbG9iYWwtc3RhdGUnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICc1LjAuNScsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnNS4wLjUuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcwY2E4ZGI1YTVmYzljODY0NjI0NGU2Mjk2MjVhYzQ4NmZhMjg2YmYyJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc2ViYXN0aWFuL2dsb2JhbC1zdGF0ZScsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3NlYmFzdGlhbi9saW5lcy1vZi1jb2RlJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMS4wLjQnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMC40LjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnZTFlNGExNzA1NjA5MjVjMjZkNDI0YjZhMDNhZWQxNTdlN2RjYzVjNScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3NlYmFzdGlhbi9saW5lcy1vZi1jb2RlJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAnc2ViYXN0aWFuL29iamVjdC1lbnVtZXJhdG9yJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnNC4wLjQnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzQuMC40LjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNWM5ZWVhYzQxYjI5MGEzNzEyZDg4ODUxNTE4ODI1YWQ3OGY0NWM3MScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3NlYmFzdGlhbi9vYmplY3QtZW51bWVyYXRvcicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3NlYmFzdGlhbi9vYmplY3QtcmVmbGVjdG9yJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMi4wLjQnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzIuMC40LjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnYjRmNDc5ZWJkYmY2M2FjNjA1ZDE4M2VjZTE3ZDhkN2ZlNDljMTVjNycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3NlYmFzdGlhbi9vYmplY3QtcmVmbGVjdG9yJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAnc2ViYXN0aWFuL3JlY3Vyc2lvbi1jb250ZXh0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnNC4wLjQnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzQuMC40LjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnY2Q5ZDhjZjNjNTgwNGRlNDM0MWMyODNlZDc4N2YwOTlmNTUwNjE3MicsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3NlYmFzdGlhbi9yZWN1cnNpb24tY29udGV4dCcsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3NlYmFzdGlhbi9yZXNvdXJjZS1vcGVyYXRpb25zJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMy4wLjMnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzMuMC4zLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnMGY0NDQzY2IzYTFkOTJjZTgwOTg5OTc1M2JjMGQ1ZDVhOGRkMTlhOCcsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3NlYmFzdGlhbi9yZXNvdXJjZS1vcGVyYXRpb25zJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAnc2ViYXN0aWFuL3R5cGUnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICczLjAuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy4wLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdiMjMzYjg0YmM0NDY1YWZmN2I1N2NmMWM0YmM3NWM4NmQwMGQ2ZGFkJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc2ViYXN0aWFuL3R5cGUnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gdHJ1ZSwKICAgICAgICApLAogICAgICAgICdzZWJhc3RpYW4vdmVyc2lvbicgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJzMuMC4yJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICczLjAuMi4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2M2YzEwMjIzNTFhOTAxNTEyMTcwMTE4NDM2Yzc2NGU0NzNmNmRlOGMnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9zZWJhc3RpYW4vdmVyc2lvbicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3NoaXBtb25rL2NvbXBvc2VyLWRlcGVuZGVuY3ktYW5hbHlzZXInID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjcuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS43LjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdiY2E4NjJiMjgzMGE0NTM3MzRhZWUwNDhlYjBjZGFiODJlNWM5ZGEzJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc2hpcG1vbmsvY29tcG9zZXItZGVwZW5kZW5jeS1hbmFseXNlcicsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3NoaXBtb25rL25hbWUtY29sbGlzaW9uLWRldGVjdG9yJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAnMi4xLjEnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzIuMS4xLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnZThjODI2N2E5YTM3NzQ0NTBiNjRmNGNiZjBiYjAzNTEwOGU3OGYwNycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3NoaXBtb25rL25hbWUtY29sbGlzaW9uLWRldGVjdG9yJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IHRydWUsCiAgICAgICAgKSwKICAgICAgICAnc3ltZm9ueS9jb25zb2xlJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjUuNC40MScsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnNS40LjQxLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnNjQ3M2Q0NDFhOTEzY2I5OTcxMjNiNTlmZjJkYmUzZDFjZjllMTFiYScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3N5bWZvbnkvY29uc29sZScsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdzeW1mb255L2RlcHJlY2F0aW9uLWNvbnRyYWN0cycgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YzLjUuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMy41LjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcwZTBkMjljZTFmMjBkZWZmYjRhYjFiMDE2YTcyNTdjNGYxZTc4OWExJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnc3ltZm9ueS9maW5kZXInID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2NS40LjQwJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICc1LjQuNDAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdmNTFjZmY0Njg3NTQ3NjQxYzdkODE4MGQ3NDkzMmFiNDBiMjIwNWNlJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3ltZm9ueS9maW5kZXInLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YxLjMxLjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMzEuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2EzY2M4YjA0NGE2ZWE1MTMzMTBjYmQ0OGVmNzMzM2IzODQ5NDU2MzgnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9zeW1mb255L3BvbHlmaWxsLWN0eXBlJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3N5bWZvbnkvcG9seWZpbGwtaW50bC1ncmFwaGVtZScgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YxLjMxLjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMzEuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJ2I5MTIzOTI2ZTNiN2JjMmY5OGMwMmFkNTRmNmE0YjAyYjkxYThhYmUnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9zeW1mb255L3BvbHlmaWxsLWludGwtZ3JhcGhlbWUnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLW5vcm1hbGl6ZXInID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2MS4zMS4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjMxLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICczODMzZDcyNTVjYzMwMzU0NjQzNWNiNjUwMzE2YmZmNzA4YTFjNzVjJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLW5vcm1hbGl6ZXInLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnc3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZycgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YxLjMxLjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMzEuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzg1MTgxYmE5OWIyMzQ1YjBlZjEwY2U0MmVjYWMzNzYxMmQ5ZmQzNDEnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9zeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3N5bWZvbnkvcG9seWZpbGwtcGhwNzMnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2MS4zMS4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjMxLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcwZjY4YzAzNTY1ZGNhYWYyNWE4OTA2Njc1NDJlOGJkNzVmZTdlNWJiJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3ltZm9ueS9wb2x5ZmlsbC1waHA3MycsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdzeW1mb255L3BvbHlmaWxsLXBocDc0JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3ByZXR0eV92ZXJzaW9uJyA9PiAndjEuMzEuMCcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4zMS4wLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnOTU4OTUzN2QwNTMyNWZiNWQ4OGEyMGQ4OTI2ODIzZTViODI3YTQzZScsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3N5bWZvbnkvcG9seWZpbGwtcGhwNzQnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnc3ltZm9ueS9wb2x5ZmlsbC1waHA4MCcgPT4gYXJyYXkoCiAgICAgICAgICAgICdwcmV0dHlfdmVyc2lvbicgPT4gJ3YxLjMxLjAnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzEuMzEuMC4wJywKICAgICAgICAgICAgJ3JlZmVyZW5jZScgPT4gJzYwMzI4ZTM2MmQ0YzJjODAyYTU0ZmNiZjA0ZjlkM2ZiODkyYjRjZjgnLAogICAgICAgICAgICAndHlwZScgPT4gJ2xpYnJhcnknLAogICAgICAgICAgICAnaW5zdGFsbF9wYXRoJyA9PiBfX0RJUl9fIC4gJy8uLi9zeW1mb255L3BvbHlmaWxsLXBocDgwJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3N5bWZvbnkvcG9seWZpbGwtcGhwODEnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2MS4zMS4wJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICcxLjMxLjAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICc0YTRjZmMyZDI1M2MyMWE1YWQwZTUzMDcxZGYyNDhlZDQ4YzZjZTVjJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3ltZm9ueS9wb2x5ZmlsbC1waHA4MScsCiAgICAgICAgICAgICdhbGlhc2VzJyA9PiBhcnJheSgpLAogICAgICAgICAgICAnZGV2X3JlcXVpcmVtZW50JyA9PiBmYWxzZSwKICAgICAgICApLAogICAgICAgICdzeW1mb255L3Byb2Nlc3MnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2NS40LjQwJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICc1LjQuNDAuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICdkZWVkY2IzYmI0NjY5Y2FlMjE0OGJjOTIwZWFmZDJiMTZkYzdjMDQ2JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3ltZm9ueS9wcm9jZXNzJywKICAgICAgICAgICAgJ2FsaWFzZXMnID0+IGFycmF5KCksCiAgICAgICAgICAgICdkZXZfcmVxdWlyZW1lbnQnID0+IGZhbHNlLAogICAgICAgICksCiAgICAgICAgJ3N5bWZvbnkvc2VydmljZS1jb250cmFjdHMnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2Mi41LjMnLAogICAgICAgICAgICAndmVyc2lvbicgPT4gJzIuNS4zLjAnLAogICAgICAgICAgICAncmVmZXJlbmNlJyA9PiAnYTIzMjk1OTZkZGM4ZmQ1Njg5MDBlM2ZjNzZjYmE0MjQ4OWVjYzdmMycsCiAgICAgICAgICAgICd0eXBlJyA9PiAnbGlicmFyeScsCiAgICAgICAgICAgICdpbnN0YWxsX3BhdGgnID0+IF9fRElSX18gLiAnLy4uL3N5bWZvbnkvc2VydmljZS1jb250cmFjdHMnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAnc3ltZm9ueS9zdHJpbmcnID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICd2NS40LjQxJywKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICc1LjQuNDEuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICcwNjVhOTYxMWUwYjFmZDIxOTdhODY3ZTFmYjdmMjIzODE5MWI3MDk2JywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vc3ltZm9ueS9zdHJpbmcnLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gZmFsc2UsCiAgICAgICAgKSwKICAgICAgICAndGhlc2Vlci90b2tlbml6ZXInID0+IGFycmF5KAogICAgICAgICAgICAncHJldHR5X3ZlcnNpb24nID0+ICcxLjIuMScsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnMS4yLjEuMCcsCiAgICAgICAgICAgICdyZWZlcmVuY2UnID0+ICczNGE0MWU5OThjMjE4M2UyMjk5NWYxNThjNTgxZTdiNWU3NTVhYjllJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdsaWJyYXJ5JywKICAgICAgICAgICAgJ2luc3RhbGxfcGF0aCcgPT4gX19ESVJfXyAuICcvLi4vdGhlc2Vlci90b2tlbml6ZXInLAogICAgICAgICAgICAnYWxpYXNlcycgPT4gYXJyYXkoKSwKICAgICAgICAgICAgJ2Rldl9yZXF1aXJlbWVudCcgPT4gdHJ1ZSwKICAgICAgICApLAogICAgKSwKKTsKTUlUIExpY2Vuc2UKCkNvcHlyaWdodCAoYykgMjAxNyBDb21wb3NlcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KPD9waHAKCmRlY2xhcmUgKHN0cmljdF90eXBlcz0xKTsKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgY29tcG9zZXIveGRlYnVnLWhhbmRsZXIuCiAqCiAqIChjKSBDb21wb3NlciA8aHR0cHM6Ly9naXRodWIuY29tL2NvbXBvc2VyPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldwogKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCm5hbWVzcGFjZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcWGRlYnVnSGFuZGxlcjsKCi8qKgogKiBAYXV0aG9yIEpvaG4gU3RldmVuc29uIDxqb2huLXN0ZXZlbnNvbkBibHVleW9uZGVyLmNvLnVrPgogKgogKiBAcGhwc3Rhbi10eXBlIHJlc3RhcnREYXRhIGFycmF5e3RtcEluaTogc3RyaW5nLCBzY2FubmVkSW5pczogYm9vbCwgc2NhbkRpcjogZmFsc2V8c3RyaW5nLCBwaHByYzogZmFsc2V8c3RyaW5nLCBpbmlzOiBzdHJpbmdbXSwgc2tpcHBlZDogc3RyaW5nfQogKi8KY2xhc3MgUGhwQ29uZmlnCnsKICAgIC8qKgogICAgICogVXNlIHRoZSBvcmlnaW5hbCBQSFAgY29uZmlndXJhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10gRW1wdHkgYXJyYXkgb2YgUEhQIGNsaSBvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1c2VPcmlnaW5hbCgpIDogYXJyYXkKICAgIHsKICAgICAgICAkdGhpcy0+Z2V0RGF0YUFuZFJlc2V0KCk7CiAgICAgICAgcmV0dXJuIFtdOwogICAgfQogICAgLyoqCiAgICAgKiBVc2Ugc3RhbmRhcmQgcmVzdGFydCBzZXR0aW5ncwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10gUEhQIGNsaSBvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1c2VTdGFuZGFyZCgpIDogYXJyYXkKICAgIHsKICAgICAgICAkZGF0YSA9ICR0aGlzLT5nZXREYXRhQW5kUmVzZXQoKTsKICAgICAgICBpZiAoJGRhdGEgIT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIFsnLW4nLCAnLWMnLCAkZGF0YVsndG1wSW5pJ11dOwogICAgICAgIH0KICAgICAgICByZXR1cm4gW107CiAgICB9CiAgICAvKioKICAgICAqIFVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGVyc2lzdCBzZXR0aW5ncwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10gRW1wdHkgYXJyYXkgb2YgUEhQIGNsaSBvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1c2VQZXJzaXN0ZW50KCkgOiBhcnJheQogICAgewogICAgICAgICRkYXRhID0gJHRoaXMtPmdldERhdGFBbmRSZXNldCgpOwogICAgICAgIGlmICgkZGF0YSAhPT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+dXBkYXRlRW52KCdQSFBSQycsICRkYXRhWyd0bXBJbmknXSk7CiAgICAgICAgICAgICR0aGlzLT51cGRhdGVFbnYoJ1BIUF9JTklfU0NBTl9ESVInLCAnJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBbXTsKICAgIH0KICAgIC8qKgogICAgICogUmV0dXJucyByZXN0YXJ0IGRhdGEgaWYgYXZhaWxhYmxlIGFuZCByZXNldHMgdGhlIGVudmlyb25tZW50CiAgICAgKgogICAgICogQHBocHN0YW4tcmV0dXJuIHJlc3RhcnREYXRhfG51bGwKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXREYXRhQW5kUmVzZXQoKSA6ID9hcnJheQogICAgewogICAgICAgICRkYXRhID0gWGRlYnVnSGFuZGxlcjo6Z2V0UmVzdGFydFNldHRpbmdzKCk7CiAgICAgICAgaWYgKCRkYXRhICE9PSBudWxsKSB7CiAgICAgICAgICAgICR0aGlzLT51cGRhdGVFbnYoJ1BIUFJDJywgJGRhdGFbJ3BocHJjJ10pOwogICAgICAgICAgICAkdGhpcy0+dXBkYXRlRW52KCdQSFBfSU5JX1NDQU5fRElSJywgJGRhdGFbJ3NjYW5EaXInXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZGF0YTsKICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlcyBhIHJlc3RhcnQgc2V0dGluZ3MgdmFsdWUgaW4gdGhlIGVudmlyb25tZW50CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIHN0cmluZ3xmYWxzZSAkdmFsdWUKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB1cGRhdGVFbnYoc3RyaW5nICRuYW1lLCAkdmFsdWUpIDogdm9pZAogICAgewogICAgICAgIFByb2Nlc3M6OnNldEVudigkbmFtZSwgXGZhbHNlICE9PSAkdmFsdWUgPyAkdmFsdWUgOiBudWxsKTsKICAgIH0KfQo8P3BocAoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgY29tcG9zZXIveGRlYnVnLWhhbmRsZXIuCiAqCiAqIChjKSBDb21wb3NlciA8aHR0cHM6Ly9naXRodWIuY29tL2NvbXBvc2VyPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldwogKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCmRlY2xhcmUgKHN0cmljdF90eXBlcz0xKTsKbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxYZGVidWdIYW5kbGVyOwoKdXNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxQY3JlXFByZWc7CnVzZSBfUEhQU3Rhbl84YzY2ZDgyNTVcUHNyXExvZ1xMb2dnZXJJbnRlcmZhY2U7Ci8qKgogKiBAYXV0aG9yIEpvaG4gU3RldmVuc29uIDxqb2huLXN0ZXZlbnNvbkBibHVleW9uZGVyLmNvLnVrPgogKgogKiBAcGhwc3Rhbi1pbXBvcnQtdHlwZSByZXN0YXJ0RGF0YSBmcm9tIFBocENvbmZpZwogKi8KY2xhc3MgWGRlYnVnSGFuZGxlcgp7CiAgICBjb25zdCBTVUZGSVhfQUxMT1cgPSAnX0FMTE9XX1hERUJVRyc7CiAgICBjb25zdCBTVUZGSVhfSU5JUyA9ICdfT1JJR0lOQUxfSU5JUyc7CiAgICBjb25zdCBSRVNUQVJUX0lEID0gJ2ludGVybmFsJzsKICAgIGNvbnN0IFJFU1RBUlRfU0VUVElOR1MgPSAnWERFQlVHX0hBTkRMRVJfU0VUVElOR1MnOwogICAgY29uc3QgREVCVUcgPSAnWERFQlVHX0hBTkRMRVJfREVCVUcnOwogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHByb3RlY3RlZCAkdG1wSW5pOwogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGluUmVzdGFydDsKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJG5hbWU7CiAgICAvKiogQHZhciBzdHJpbmd8bnVsbCAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHNraXBwZWQ7CiAgICAvKiogQHZhciBib29sICovCiAgICBwcml2YXRlIHN0YXRpYyAkeGRlYnVnQWN0aXZlOwogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHByaXZhdGUgc3RhdGljICR4ZGVidWdNb2RlOwogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHByaXZhdGUgc3RhdGljICR4ZGVidWdWZXJzaW9uOwogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHJpdmF0ZSAkY2xpOwogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHByaXZhdGUgJGRlYnVnOwogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICRlbnZBbGxvd1hkZWJ1ZzsKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJpdmF0ZSAkZW52T3JpZ2luYWxJbmlzOwogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHJpdmF0ZSAkcGVyc2lzdGVudDsKICAgIC8qKiBAdmFyIHN0cmluZ3xudWxsICovCiAgICBwcml2YXRlICRzY3JpcHQ7CiAgICAvKiogQHZhciBTdGF0dXMgKi8KICAgIHByaXZhdGUgJHN0YXR1c1dyaXRlcjsKICAgIC8qKgogICAgICogQ29uc3RydWN0b3IKICAgICAqCiAgICAgKiBUaGUgJGVudlByZWZpeCBpcyB1c2VkIHRvIGNyZWF0ZSBkaXN0aW5jdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIEl0IGlzCiAgICAgKiB1cHBlcmNhc2VkIGFuZCBwcmVwZW5kZWQgdG8gdGhlIGRlZmF1bHQgYmFzZSB2YWx1ZXMuIEZvciBleGFtcGxlICdteWFwcCcKICAgICAqIHdvdWxkIHJlc3VsdCBpbiBNWUFQUF9BTExPV19YREVCVUcgYW5kIE1ZQVBQX09SSUdJTkFMX0lOSVMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZW52UHJlZml4IFZhbHVlIHVzZWQgaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIElmIHRoZSBwYXJhbWV0ZXIgaXMgaW52YWxpZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRlbnZQcmVmaXgpCiAgICB7CiAgICAgICAgaWYgKCRlbnZQcmVmaXggPT09ICcnKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXInKTsKICAgICAgICB9CiAgICAgICAgc2VsZjo6JG5hbWUgPSBcc3RydG91cHBlcigkZW52UHJlZml4KTsKICAgICAgICAkdGhpcy0+ZW52QWxsb3dYZGVidWcgPSBzZWxmOjokbmFtZSAuIHNlbGY6OlNVRkZJWF9BTExPVzsKICAgICAgICAkdGhpcy0+ZW52T3JpZ2luYWxJbmlzID0gc2VsZjo6JG5hbWUgLiBzZWxmOjpTVUZGSVhfSU5JUzsKICAgICAgICBzZWxmOjpzZXRYZGVidWdEZXRhaWxzKCk7CiAgICAgICAgc2VsZjo6JGluUmVzdGFydCA9IFxmYWxzZTsKICAgICAgICBpZiAoJHRoaXMtPmNsaSA9IFxQSFBfU0FQSSA9PT0gJ2NsaScpIHsKICAgICAgICAgICAgJHRoaXMtPmRlYnVnID0gKHN0cmluZykgXGdldGVudihzZWxmOjpERUJVRyk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5zdGF0dXNXcml0ZXIgPSBuZXcgU3RhdHVzKCR0aGlzLT5lbnZBbGxvd1hkZWJ1ZywgKGJvb2wpICR0aGlzLT5kZWJ1Zyk7CiAgICB9CiAgICAvKioKICAgICAqIEFjdGl2YXRlcyBzdGF0dXMgbWVzc2FnZSBvdXRwdXQgdG8gYSBQU1IzIGxvZ2dlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TG9nZ2VyKExvZ2dlckludGVyZmFjZSAkbG9nZ2VyKSA6IHNlbGYKICAgIHsKICAgICAgICAkdGhpcy0+c3RhdHVzV3JpdGVyLT5zZXRMb2dnZXIoJGxvZ2dlcik7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBtYWluIHNjcmlwdCBsb2NhdGlvbiBpZiBpdCBjYW5ub3QgYmUgY2FsbGVkIGZyb20gYXJndgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TWFpblNjcmlwdChzdHJpbmcgJHNjcmlwdCkgOiBzZWxmCiAgICB7CiAgICAgICAgJHRoaXMtPnNjcmlwdCA9ICRzY3JpcHQ7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQogICAgLyoqCiAgICAgKiBQZXJzaXN0IHRoZSBzZXR0aW5ncyB0byBrZWVwIFhkZWJ1ZyBvdXQgb2Ygc3ViLXByb2Nlc3NlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGVyc2lzdGVudCgpIDogc2VsZgogICAgewogICAgICAgICR0aGlzLT5wZXJzaXN0ZW50ID0gXHRydWU7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgWGRlYnVnIGlzIGxvYWRlZCBhbmQgdGhlIHByb2Nlc3MgbmVlZHMgdG8gYmUgcmVzdGFydGVkCiAgICAgKgogICAgICogVGhpcyBiZWhhdmlvdXIgY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgdGhlIE1ZQVBQX0FMTE9XX1hERUJVRwogICAgICogZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gMS4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGludGVybmFsbHkgc28gdGhhdAogICAgICogdGhlIHJlc3RhcnRlZCBwcm9jZXNzIGlzIGNyZWF0ZWQgb25seSBvbmNlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2soKSA6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+bm90aWZ5KFN0YXR1czo6Q0hFQ0ssIHNlbGY6OiR4ZGVidWdWZXJzaW9uIC4gJ3wnIC4gc2VsZjo6JHhkZWJ1Z01vZGUpOwogICAgICAgICRlbnZBcmdzID0gXGV4cGxvZGUoJ3wnLCAoc3RyaW5nKSBcZ2V0ZW52KCR0aGlzLT5lbnZBbGxvd1hkZWJ1ZykpOwogICAgICAgIGlmICghKGJvb2wpICRlbnZBcmdzWzBdICYmICR0aGlzLT5yZXF1aXJlc1Jlc3RhcnQoc2VsZjo6JHhkZWJ1Z0FjdGl2ZSkpIHsKICAgICAgICAgICAgLy8gUmVzdGFydCByZXF1aXJlZAogICAgICAgICAgICAkdGhpcy0+bm90aWZ5KFN0YXR1czo6UkVTVEFSVCk7CiAgICAgICAgICAgICRjb21tYW5kID0gJHRoaXMtPnByZXBhcmVSZXN0YXJ0KCk7CiAgICAgICAgICAgIGlmICgkY29tbWFuZCAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJHRoaXMtPnJlc3RhcnQoJGNvbW1hbmQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OlJFU1RBUlRfSUQgPT09ICRlbnZBcmdzWzBdICYmIFxjb3VudCgkZW52QXJncykgPT09IDUpIHsKICAgICAgICAgICAgLy8gUmVzdGFydGVkLCBzbyB1bnNldCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbmQgdXNlIHNhdmVkIHZhbHVlcwogICAgICAgICAgICAkdGhpcy0+bm90aWZ5KFN0YXR1czo6UkVTVEFSVEVEKTsKICAgICAgICAgICAgUHJvY2Vzczo6c2V0RW52KCR0aGlzLT5lbnZBbGxvd1hkZWJ1Zyk7CiAgICAgICAgICAgIHNlbGY6OiRpblJlc3RhcnQgPSBcdHJ1ZTsKICAgICAgICAgICAgaWYgKHNlbGY6OiR4ZGVidWdWZXJzaW9uID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAvLyBTa2lwcGVkIHZlcnNpb24gaXMgb25seSBzZXQgaWYgWGRlYnVnIGlzIG5vdCBsb2FkZWQKICAgICAgICAgICAgICAgIHNlbGY6OiRza2lwcGVkID0gJGVudkFyZ3NbMV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPnRyeUVuYWJsZVNpZ25hbHMoKTsKICAgICAgICAgICAgLy8gUHV0IHJlc3RhcnQgc2V0dGluZ3MgaW4gdGhlIGVudmlyb25tZW50CiAgICAgICAgICAgICR0aGlzLT5zZXRFbnZSZXN0YXJ0U2V0dGluZ3MoJGVudkFyZ3MpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgICR0aGlzLT5ub3RpZnkoU3RhdHVzOjpOT1JFU1RBUlQpOwogICAgICAgICRzZXR0aW5ncyA9IHNlbGY6OmdldFJlc3RhcnRTZXR0aW5ncygpOwogICAgICAgIGlmICgkc2V0dGluZ3MgIT09IG51bGwpIHsKICAgICAgICAgICAgLy8gQ2FsbGVkIHdpdGggZXhpc3Rpbmcgc2V0dGluZ3MsIHNvIHN5bmMgb3VyIHNldHRpbmdzCiAgICAgICAgICAgICR0aGlzLT5zeW5jU2V0dGluZ3MoJHNldHRpbmdzKTsKICAgICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgcGhwLmluaSBsb2NhdGlvbnMgd2l0aCBhdCBsZWFzdCBvbmUgZW50cnkKICAgICAqCiAgICAgKiBUaGUgZXF1aXZhbGVudCBvZiBjYWxsaW5nIHBocF9pbmlfbG9hZGVkX2ZpbGUgdGhlbiBwaHBfaW5pX3NjYW5uZWRfZmlsZXMuCiAgICAgKiBUaGUgbG9hZGVkIGluaSBsb2NhdGlvbiBpcyB0aGUgZmlyc3QgZW50cnkgYW5kIG1heSBiZSBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBub24tZW1wdHktbGlzdDxzdHJpbmc+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QWxsSW5pRmlsZXMoKSA6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKHNlbGY6OiRuYW1lICE9PSBudWxsKSB7CiAgICAgICAgICAgICRlbnYgPSBcZ2V0ZW52KHNlbGY6OiRuYW1lIC4gc2VsZjo6U1VGRklYX0lOSVMpOwogICAgICAgICAgICBpZiAoXGZhbHNlICE9PSAkZW52KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gXGV4cGxvZGUoXFBBVEhfU0VQQVJBVE9SLCAkZW52KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkcGF0aHMgPSBbKHN0cmluZykgXHBocF9pbmlfbG9hZGVkX2ZpbGUoKV07CiAgICAgICAgJHNjYW5uZWQgPSBccGhwX2luaV9zY2FubmVkX2ZpbGVzKCk7CiAgICAgICAgaWYgKCRzY2FubmVkICE9PSBcZmFsc2UpIHsKICAgICAgICAgICAgJHBhdGhzID0gXGFycmF5X21lcmdlKCRwYXRocywgXGFycmF5X21hcCgndHJpbScsIFxleHBsb2RlKCcsJywgJHNjYW5uZWQpKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcGF0aHM7CiAgICB9CiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgcmVzdGFydCBzZXR0aW5ncyBvciBudWxsCiAgICAgKgogICAgICogU2V0dGluZ3Mgd2lsbCBiZSBhdmFpbGFibGUgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyB3YXMgcmVzdGFydGVkLCBvcgogICAgICogY2FsbGVkIHdpdGggdGhlIHNldHRpbmdzIGZyb20gYW4gZXhpc3RpbmcgcmVzdGFydC4KICAgICAqCiAgICAgKiBAcGhwc3Rhbi1yZXR1cm4gcmVzdGFydERhdGF8bnVsbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlc3RhcnRTZXR0aW5ncygpIDogP2FycmF5CiAgICB7CiAgICAgICAgJGVudkFyZ3MgPSBcZXhwbG9kZSgnfCcsIChzdHJpbmcpIFxnZXRlbnYoc2VsZjo6UkVTVEFSVF9TRVRUSU5HUykpOwogICAgICAgIGlmIChcY291bnQoJGVudkFyZ3MpICE9PSA2IHx8ICFzZWxmOjokaW5SZXN0YXJ0ICYmIFxwaHBfaW5pX2xvYWRlZF9maWxlKCkgIT09ICRlbnZBcmdzWzBdKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gWyd0bXBJbmknID0+ICRlbnZBcmdzWzBdLCAnc2Nhbm5lZEluaXMnID0+IChib29sKSAkZW52QXJnc1sxXSwgJ3NjYW5EaXInID0+ICcqJyA9PT0gJGVudkFyZ3NbMl0gPyBcZmFsc2UgOiAkZW52QXJnc1syXSwgJ3BocHJjJyA9PiAnKicgPT09ICRlbnZBcmdzWzNdID8gXGZhbHNlIDogJGVudkFyZ3NbM10sICdpbmlzJyA9PiBcZXhwbG9kZShcUEFUSF9TRVBBUkFUT1IsICRlbnZBcmdzWzRdKSwgJ3NraXBwZWQnID0+ICRlbnZBcmdzWzVdXTsKICAgIH0KICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgWGRlYnVnIHZlcnNpb24gdGhhdCB0cmlnZ2VyZWQgYSBzdWNjZXNzZnVsIHJlc3RhcnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTa2lwcGVkVmVyc2lvbigpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNlbGY6OiRza2lwcGVkOwogICAgfQogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgWGRlYnVnIGlzIGxvYWRlZCBhbmQgYWN0aXZlCiAgICAgKgogICAgICogdHJ1ZTogaWYgWGRlYnVnIGlzIGxvYWRlZCBhbmQgaXMgcnVubmluZyBpbiBhbiBhY3RpdmUgbW9kZS4KICAgICAqIGZhbHNlOiBpZiBYZGVidWcgaXMgbm90IGxvYWRlZCwgb3IgaXQgaXMgcnVubmluZyB3aXRoIHhkZWJ1Zy5tb2RlPW9mZi4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1hkZWJ1Z0FjdGl2ZSgpIDogYm9vbAogICAgewogICAgICAgIHNlbGY6OnNldFhkZWJ1Z0RldGFpbHMoKTsKICAgICAgICByZXR1cm4gc2VsZjo6JHhkZWJ1Z0FjdGl2ZTsKICAgIH0KICAgIC8qKgogICAgICogQWxsb3dzIGFuIGV4dGVuZGluZyBjbGFzcyB0byBkZWNpZGUgaWYgdGhlcmUgc2hvdWxkIGJlIGEgcmVzdGFydAogICAgICoKICAgICAqIFRoZSBkZWZhdWx0IGlzIHRvIHJlc3RhcnQgaWYgWGRlYnVnIGlzIGxvYWRlZCBhbmQgaXRzIG1vZGUgaXMgbm90ICJvZmYiLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVxdWlyZXNSZXN0YXJ0KGJvb2wgJGRlZmF1bHQpIDogYm9vbAogICAgewogICAgICAgIHJldHVybiAkZGVmYXVsdDsKICAgIH0KICAgIC8qKgogICAgICogQWxsb3dzIGFuIGV4dGVuZGluZyBjbGFzcyB0byBhY2Nlc3MgdGhlIHRtcEluaQogICAgICoKICAgICAqIEBwYXJhbSBub24tZW1wdHktbGlzdDxzdHJpbmc+ICRjb21tYW5kCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiByZXN0YXJ0KGFycmF5ICRjb21tYW5kKSA6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+ZG9SZXN0YXJ0KCRjb21tYW5kKTsKICAgIH0KICAgIC8qKgogICAgICogRXhlY3V0ZXMgdGhlIHJlc3RhcnRlZCBjb21tYW5kIHRoZW4gZGVsZXRlcyB0aGUgdG1wIGluaQogICAgICoKICAgICAqIEBwYXJhbSBub24tZW1wdHktbGlzdDxzdHJpbmc+ICRjb21tYW5kCiAgICAgKiBAcGhwc3Rhbi1yZXR1cm4gbmV2ZXIKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBkb1Jlc3RhcnQoYXJyYXkgJGNvbW1hbmQpIDogdm9pZAogICAgewogICAgICAgIGlmIChcUEhQX1ZFUlNJT05fSUQgPj0gNzA0MDApIHsKICAgICAgICAgICAgJGNtZCA9ICRjb21tYW5kOwogICAgICAgICAgICAkZGlzcGxheUNtZCA9IFxzcHJpbnRmKCdbJXNdJywgXGltcGxvZGUoJywgJywgJGNtZCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjbWQgPSBQcm9jZXNzOjplc2NhcGVTaGVsbENvbW1hbmQoJGNvbW1hbmQpOwogICAgICAgICAgICBpZiAoXGRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fQlVJTEQnKSkgewogICAgICAgICAgICAgICAgLy8gT3V0ZXIgcXVvdGVzIHJlcXVpcmVkIG9uIGNtZCBzdHJpbmcgYmVsb3cgUEhQIDgKICAgICAgICAgICAgICAgICRjbWQgPSAnIicgLiAkY21kIC4gJyInOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRkaXNwbGF5Q21kID0gJGNtZDsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnRyeUVuYWJsZVNpZ25hbHMoKTsKICAgICAgICAkdGhpcy0+bm90aWZ5KFN0YXR1czo6UkVTVEFSVElORywgJGRpc3BsYXlDbWQpOwogICAgICAgICRwcm9jZXNzID0gXHByb2Nfb3BlbigkY21kLCBbXSwgJHBpcGVzKTsKICAgICAgICBpZiAoXGlzX3Jlc291cmNlKCRwcm9jZXNzKSkgewogICAgICAgICAgICAkZXhpdENvZGUgPSBccHJvY19jbG9zZSgkcHJvY2Vzcyk7CiAgICAgICAgfQogICAgICAgIGlmICghaXNzZXQoJGV4aXRDb2RlKSkgewogICAgICAgICAgICAvLyBVbmxpa2VseSB0aGF0IHBocCBvciB0aGUgZGVmYXVsdCBzaGVsbCBjYW5ub3QgYmUgaW52b2tlZAogICAgICAgICAgICAkdGhpcy0+bm90aWZ5KFN0YXR1czo6RVJST1IsICdVbmFibGUgdG8gcmVzdGFydCBwcm9jZXNzJyk7CiAgICAgICAgICAgICRleGl0Q29kZSA9IC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5ub3RpZnkoU3RhdHVzOjpJTkZPLCAnUmVzdGFydGVkIHByb2Nlc3MgZXhpdGVkICcgLiAkZXhpdENvZGUpOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPmRlYnVnID09PSAnMicpIHsKICAgICAgICAgICAgJHRoaXMtPm5vdGlmeShTdGF0dXM6OklORk8sICdUZW1wIGluaSBzYXZlZDogJyAuICR0aGlzLT50bXBJbmkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIEBcdW5saW5rKChzdHJpbmcpICR0aGlzLT50bXBJbmkpOwogICAgICAgIH0KICAgICAgICBleGl0KCRleGl0Q29kZSk7CiAgICB9CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGNvbW1hbmQgbGluZSBhcnJheSBpZiBldmVyeXRoaW5nIHdhcyB3cml0dGVuIGZvciB0aGUgcmVzdGFydAogICAgICoKICAgICAqIElmIGFueSBvZiB0aGUgZm9sbG93aW5nIGZhaWxzIChob3dldmVyIHVubGlrZWx5KSB3ZSBtdXN0IHJldHVybiBmYWxzZSB0bwogICAgICogc3RvcCBwb3RlbnRpYWwgcmVjdXJzaW9uOgogICAgICogICAtIHRtcCBpbmkgZmlsZSBjcmVhdGlvbgogICAgICogICAtIGVudmlyb25tZW50IHZhcmlhYmxlIGNyZWF0aW9uCiAgICAgKgogICAgICogQHJldHVybiBub24tZW1wdHktbGlzdDxzdHJpbmc+fG51bGwKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBwcmVwYXJlUmVzdGFydCgpIDogP2FycmF5CiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+Y2xpKSB7CiAgICAgICAgICAgICR0aGlzLT5ub3RpZnkoU3RhdHVzOjpFUlJPUiwgJ1Vuc3VwcG9ydGVkIFNBUEk6ICcgLiBcUEhQX1NBUEkpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKCgkYXJndiA9ICR0aGlzLT5jaGVja1NlcnZlckFyZ3YoKSkgPT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXMtPm5vdGlmeShTdGF0dXM6OkVSUk9SLCAnJF9TRVJWRVJbYXJndl0gaXMgbm90IGFzIGV4cGVjdGVkJyk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoISR0aGlzLT5jaGVja0NvbmZpZ3VyYXRpb24oJGluZm8pKSB7CiAgICAgICAgICAgICR0aGlzLT5ub3RpZnkoU3RhdHVzOjpFUlJPUiwgJGluZm8pOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJG1haW5TY3JpcHQgPSAoc3RyaW5nKSAkdGhpcy0+c2NyaXB0OwogICAgICAgIGlmICghJHRoaXMtPmNoZWNrTWFpblNjcmlwdCgkbWFpblNjcmlwdCwgJGFyZ3YpKSB7CiAgICAgICAgICAgICR0aGlzLT5ub3RpZnkoU3RhdHVzOjpFUlJPUiwgJ1VuYWJsZSB0byBhY2Nlc3MgbWFpbiBzY3JpcHQ6ICcgLiAkbWFpblNjcmlwdCk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAkdG1wRGlyID0gXHN5c19nZXRfdGVtcF9kaXIoKTsKICAgICAgICAkaW5pRXJyb3IgPSAnVW5hYmxlIHRvIGNyZWF0ZSB0ZW1wIGluaSBmaWxlIGF0OiAnIC4gJHRtcERpcjsKICAgICAgICBpZiAoKCR0bXBmaWxlID0gQFx0ZW1wbmFtKCR0bXBEaXIsICcnKSkgPT09IFxmYWxzZSkgewogICAgICAgICAgICAkdGhpcy0+bm90aWZ5KFN0YXR1czo6RVJST1IsICRpbmlFcnJvcik7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAkZXJyb3IgPSBudWxsOwogICAgICAgICRpbmlGaWxlcyA9IHNlbGY6OmdldEFsbEluaUZpbGVzKCk7CiAgICAgICAgJHNjYW5uZWRJbmlzID0gXGNvdW50KCRpbmlGaWxlcykgPiAxOwogICAgICAgIGlmICghJHRoaXMtPndyaXRlVG1wSW5pKCR0bXBmaWxlLCAkaW5pRmlsZXMsICRlcnJvcikpIHsKICAgICAgICAgICAgJHRoaXMtPm5vdGlmeShTdGF0dXM6OkVSUk9SLCAkZXJyb3IgPz8gJGluaUVycm9yKTsKICAgICAgICAgICAgQFx1bmxpbmsoJHRtcGZpbGUpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKCEkdGhpcy0+c2V0RW52aXJvbm1lbnQoJHNjYW5uZWRJbmlzLCAkaW5pRmlsZXMsICR0bXBmaWxlKSkgewogICAgICAgICAgICAkdGhpcy0+bm90aWZ5KFN0YXR1czo6RVJST1IsICdVbmFibGUgdG8gc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcycpOwogICAgICAgICAgICBAXHVubGluaygkdG1wZmlsZSk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+dG1wSW5pID0gJHRtcGZpbGU7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb21tYW5kKCRhcmd2LCAkdG1wZmlsZSwgJG1haW5TY3JpcHQpOwogICAgfQogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRtcCBpbmkgZmlsZSB3YXMgd3JpdHRlbgogICAgICoKICAgICAqIEBwYXJhbSBub24tZW1wdHktbGlzdDxzdHJpbmc+ICRpbmlGaWxlcyBBbGwgaW5pIGZpbGVzIHVzZWQgaW4gdGhlIGN1cnJlbnQgcHJvY2VzcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHdyaXRlVG1wSW5pKHN0cmluZyAkdG1wRmlsZSwgYXJyYXkgJGluaUZpbGVzLCA/c3RyaW5nICYkZXJyb3IpIDogYm9vbAogICAgewogICAgICAgIC8vICRpbmlGaWxlcyBoYXMgYXQgbGVhc3Qgb25lIGl0ZW0gYW5kIGl0IG1heSBiZSBlbXB0eQogICAgICAgIGlmICgkaW5pRmlsZXNbMF0gPT09ICcnKSB7CiAgICAgICAgICAgIFxhcnJheV9zaGlmdCgkaW5pRmlsZXMpOwogICAgICAgIH0KICAgICAgICAkY29udGVudCA9ICcnOwogICAgICAgICRzZWN0aW9uUmVnZXggPSAnL15cXHMqXFxbKD86UEFUSHxIT1NUKVxccyo9L21pJzsKICAgICAgICAkeGRlYnVnUmVnZXggPSAnL15cXHMqKHplbmRfZXh0ZW5zaW9uXFxzKj0uKnhkZWJ1Zy4qKSQvbWknOwogICAgICAgIGZvcmVhY2ggKCRpbmlGaWxlcyBhcyAkZmlsZSkgewogICAgICAgICAgICAvLyBDaGVjayBmb3IgaW5hY2Nlc3NpYmxlIGluaSBmaWxlcwogICAgICAgICAgICBpZiAoKCRkYXRhID0gQFxmaWxlX2dldF9jb250ZW50cygkZmlsZSkpID09PSBcZmFsc2UpIHsKICAgICAgICAgICAgICAgICRlcnJvciA9ICdVbmFibGUgdG8gcmVhZCBpbmk6ICcgLiAkZmlsZTsKICAgICAgICAgICAgICAgIHJldHVybiBcZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQ2hlY2sgYW5kIHJlbW92ZSBkaXJlY3RpdmVzIGFmdGVyIEhPU1QgYW5kIFBBVEggc2VjdGlvbnMKICAgICAgICAgICAgaWYgKFByZWc6OmlzTWF0Y2hXaXRoT2Zmc2V0cygkc2VjdGlvblJlZ2V4LCAkZGF0YSwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgICAgICAkZGF0YSA9IFxzdWJzdHIoJGRhdGEsIDAsICRtYXRjaGVzWzBdWzFdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY29udGVudCAuPSBQcmVnOjpyZXBsYWNlKCR4ZGVidWdSZWdleCwgJzskMScsICRkYXRhKSAuIFxQSFBfRU9MOwogICAgICAgIH0KICAgICAgICAvLyBNZXJnZSBsb2FkZWQgc2V0dGluZ3MgaW50byBvdXIgaW5pIGNvbnRlbnQsIGlmIGl0IGlzIHZhbGlkCiAgICAgICAgJGNvbmZpZyA9IFxwYXJzZV9pbmlfc3RyaW5nKCRjb250ZW50KTsKICAgICAgICAkbG9hZGVkID0gXGluaV9nZXRfYWxsKG51bGwsIFxmYWxzZSk7CiAgICAgICAgaWYgKFxmYWxzZSA9PT0gJGNvbmZpZyB8fCBcZmFsc2UgPT09ICRsb2FkZWQpIHsKICAgICAgICAgICAgJGVycm9yID0gJ1VuYWJsZSB0byBwYXJzZSBpbmkgZGF0YSc7CiAgICAgICAgICAgIHJldHVybiBcZmFsc2U7CiAgICAgICAgfQogICAgICAgICRjb250ZW50IC49ICR0aGlzLT5tZXJnZUxvYWRlZENvbmZpZygkbG9hZGVkLCAkY29uZmlnKTsKICAgICAgICAvLyBXb3JrLWFyb3VuZCBmb3IgaHR0cHM6Ly9idWdzLnBocC5uZXQvYnVnLnBocD9pZD03NTkzMgogICAgICAgICRjb250ZW50IC49ICdvcGNhY2hlLmVuYWJsZV9jbGk9MCcgLiBcUEhQX0VPTDsKICAgICAgICByZXR1cm4gKGJvb2wpIEBcZmlsZV9wdXRfY29udGVudHMoJHRtcEZpbGUsICRjb250ZW50KTsKICAgIH0KICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmb3IgdGhlIHJlc3RhcnQKICAgICAqCiAgICAgKiBAcGFyYW0gbm9uLWVtcHR5LWxpc3Q8c3RyaW5nPiAkYXJndgogICAgICogQHJldHVybiBub24tZW1wdHktbGlzdDxzdHJpbmc+CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0Q29tbWFuZChhcnJheSAkYXJndiwgc3RyaW5nICR0bXBJbmksIHN0cmluZyAkbWFpblNjcmlwdCkgOiBhcnJheQogICAgewogICAgICAgICRwaHAgPSBbXFBIUF9CSU5BUlldOwogICAgICAgICRhcmdzID0gXGFycmF5X3NsaWNlKCRhcmd2LCAxKTsKICAgICAgICBpZiAoISR0aGlzLT5wZXJzaXN0ZW50KSB7CiAgICAgICAgICAgIC8vIFVzZSBjb21tYW5kLWxpbmUgb3B0aW9ucwogICAgICAgICAgICBcYXJyYXlfcHVzaCgkcGhwLCAnLW4nLCAnLWMnLCAkdG1wSW5pKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFxhcnJheV9tZXJnZSgkcGhwLCBbJG1haW5TY3JpcHRdLCAkYXJncyk7CiAgICB9CiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdGFydCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2VyZSBzZXQKICAgICAqCiAgICAgKiBObyBuZWVkIHRvIHVwZGF0ZSAkX1NFUlZFUiBzaW5jZSB0aGlzIGlzIHNldCBpbiB0aGUgcmVzdGFydGVkIHByb2Nlc3MuCiAgICAgKgogICAgICogQHBhcmFtIG5vbi1lbXB0eS1saXN0PHN0cmluZz4gJGluaUZpbGVzIEFsbCBpbmkgZmlsZXMgdXNlZCBpbiB0aGUgY3VycmVudCBwcm9jZXNzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0RW52aXJvbm1lbnQoYm9vbCAkc2Nhbm5lZEluaXMsIGFycmF5ICRpbmlGaWxlcywgc3RyaW5nICR0bXBJbmkpIDogYm9vbAogICAgewogICAgICAgICRzY2FuRGlyID0gXGdldGVudignUEhQX0lOSV9TQ0FOX0RJUicpOwogICAgICAgICRwaHByYyA9IFxnZXRlbnYoJ1BIUFJDJyk7CiAgICAgICAgLy8gTWFrZSBvcmlnaW5hbCBpbmlzIGF2YWlsYWJsZSB0byByZXN0YXJ0ZWQgcHJvY2VzcwogICAgICAgIGlmICghXHB1dGVudigkdGhpcy0+ZW52T3JpZ2luYWxJbmlzIC4gJz0nIC4gXGltcGxvZGUoXFBBVEhfU0VQQVJBVE9SLCAkaW5pRmlsZXMpKSkgewogICAgICAgICAgICByZXR1cm4gXGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPnBlcnNpc3RlbnQpIHsKICAgICAgICAgICAgLy8gVXNlIHRoZSBlbnZpcm9ubWVudCB0byBwZXJzaXN0IHRoZSBzZXR0aW5ncwogICAgICAgICAgICBpZiAoIVxwdXRlbnYoJ1BIUF9JTklfU0NBTl9ESVI9JykgfHwgIVxwdXRlbnYoJ1BIUFJDPScgLiAkdG1wSW5pKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBGbGFnIHJlc3RhcnRlZCBwcm9jZXNzIGFuZCBzYXZlIHZhbHVlcyBmb3IgaXQgdG8gdXNlCiAgICAgICAgJGVudkFyZ3MgPSBbc2VsZjo6UkVTVEFSVF9JRCwgc2VsZjo6JHhkZWJ1Z1ZlcnNpb24sIChpbnQpICRzY2FubmVkSW5pcywgXGZhbHNlID09PSAkc2NhbkRpciA/ICcqJyA6ICRzY2FuRGlyLCBcZmFsc2UgPT09ICRwaHByYyA/ICcqJyA6ICRwaHByY107CiAgICAgICAgcmV0dXJuIFxwdXRlbnYoJHRoaXMtPmVudkFsbG93WGRlYnVnIC4gJz0nIC4gXGltcGxvZGUoJ3wnLCAkZW52QXJncykpOwogICAgfQogICAgLyoqCiAgICAgKiBMb2dzIHN0YXR1cyBtZXNzYWdlcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIG5vdGlmeShzdHJpbmcgJG9wLCA/c3RyaW5nICRkYXRhID0gbnVsbCkgOiB2b2lkCiAgICB7CiAgICAgICAgJHRoaXMtPnN0YXR1c1dyaXRlci0+cmVwb3J0KCRvcCwgJGRhdGEpOwogICAgfQogICAgLyoqCiAgICAgKiBSZXR1cm5zIGRlZmF1bHQsIGNoYW5nZWQgYW5kIGNvbW1hbmQtbGluZSBpbmkgc2V0dGluZ3MKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkbG9hZGVkQ29uZmlnIEFsbCBjdXJyZW50IGluaSBzZXR0aW5ncwogICAgICogQHBhcmFtIG1peGVkW10gJGluaUNvbmZpZyBTZXR0aW5ncyBmcm9tIHVzZXIgaW5pIGZpbGVzCiAgICAgKgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIG1lcmdlTG9hZGVkQ29uZmlnKGFycmF5ICRsb2FkZWRDb25maWcsIGFycmF5ICRpbmlDb25maWcpIDogc3RyaW5nCiAgICB7CiAgICAgICAgJGNvbnRlbnQgPSAnJzsKICAgICAgICBmb3JlYWNoICgkbG9hZGVkQ29uZmlnIGFzICRuYW1lID0+ICR2YWx1ZSkgewogICAgICAgICAgICAvLyBWYWx1ZSB3aWxsIGVpdGhlciBiZSBudWxsLCBzdHJpbmcgb3IgYXJyYXkgKEhIVk0gb25seSkKICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCR2YWx1ZSkgfHwgXHN0cnBvcygkbmFtZSwgJ3hkZWJ1ZycpID09PSAwIHx8ICRuYW1lID09PSAnYXBjLm1tYXBfZmlsZV9tYXNrJykgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5pQ29uZmlnWyRuYW1lXSkgfHwgJGluaUNvbmZpZ1skbmFtZV0gIT09ICR2YWx1ZSkgewogICAgICAgICAgICAgICAgLy8gRG91YmxlLXF1b3RlIGVzY2FwZSBlYWNoIHZhbHVlCiAgICAgICAgICAgICAgICAkY29udGVudCAuPSAkbmFtZSAuICc9IicgLiBcYWRkY3NsYXNoZXMoJHZhbHVlLCAnXFwiJykgLiAnIicgLiBcUEhQX0VPTDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGNvbnRlbnQ7CiAgICB9CiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2NyaXB0IG5hbWUgY2FuIGJlIHVzZWQKICAgICAqCiAgICAgKiBAcGFyYW0gbm9uLWVtcHR5LWxpc3Q8c3RyaW5nPiAkYXJndgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNoZWNrTWFpblNjcmlwdChzdHJpbmcgJiRtYWluU2NyaXB0LCBhcnJheSAkYXJndikgOiBib29sCiAgICB7CiAgICAgICAgaWYgKCRtYWluU2NyaXB0ICE9PSAnJykgewogICAgICAgICAgICAvLyBBbGxvdyBhbiBhcHBsaWNhdGlvbiB0byBzZXQgLS0gZm9yIHN0YW5kYXJkIGlucHV0CiAgICAgICAgICAgIHJldHVybiBcZmlsZV9leGlzdHMoJG1haW5TY3JpcHQpIHx8ICctLScgPT09ICRtYWluU2NyaXB0OwogICAgICAgIH0KICAgICAgICBpZiAoXGZpbGVfZXhpc3RzKCRtYWluU2NyaXB0ID0gJGFyZ3ZbMF0pKSB7CiAgICAgICAgICAgIHJldHVybiBcdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLy8gVXNlIGEgYmFja3RyYWNlIHRvIHJlc29sdmUgUGhhciBhbmQgY2hkaXIgaXNzdWVzLgogICAgICAgICR0cmFjZSA9IFxkZWJ1Z19iYWNrdHJhY2UoXERFQlVHX0JBQ0tUUkFDRV9JR05PUkVfQVJHUyk7CiAgICAgICAgJG1haW4gPSBcZW5kKCR0cmFjZSk7CiAgICAgICAgaWYgKCRtYWluICE9PSBcZmFsc2UgJiYgaXNzZXQoJG1haW5bJ2ZpbGUnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIFxmaWxlX2V4aXN0cygkbWFpblNjcmlwdCA9ICRtYWluWydmaWxlJ10pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gXGZhbHNlOwogICAgfQogICAgLyoqCiAgICAgKiBBZGRzIHJlc3RhcnQgc2V0dGluZ3MgdG8gdGhlIGVudmlyb25tZW50CiAgICAgKgogICAgICogQHBhcmFtIG5vbi1lbXB0eS1saXN0PHN0cmluZz4gJGVudkFyZ3MKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRFbnZSZXN0YXJ0U2V0dGluZ3MoYXJyYXkgJGVudkFyZ3MpIDogdm9pZAogICAgewogICAgICAgICRzZXR0aW5ncyA9IFtccGhwX2luaV9sb2FkZWRfZmlsZSgpLCAkZW52QXJnc1syXSwgJGVudkFyZ3NbM10sICRlbnZBcmdzWzRdLCBcZ2V0ZW52KCR0aGlzLT5lbnZPcmlnaW5hbEluaXMpLCBzZWxmOjokc2tpcHBlZF07CiAgICAgICAgUHJvY2Vzczo6c2V0RW52KHNlbGY6OlJFU1RBUlRfU0VUVElOR1MsIFxpbXBsb2RlKCd8JywgJHNldHRpbmdzKSk7CiAgICB9CiAgICAvKioKICAgICAqIFN5bmNzIHNldHRpbmdzIGFuZCB0aGUgZW52aXJvbm1lbnQgaWYgY2FsbGVkIHdpdGggZXhpc3Rpbmcgc2V0dGluZ3MKICAgICAqCiAgICAgKiBAcGhwc3Rhbi1wYXJhbSByZXN0YXJ0RGF0YSAkc2V0dGluZ3MKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzeW5jU2V0dGluZ3MoYXJyYXkgJHNldHRpbmdzKSA6IHZvaWQKICAgIHsKICAgICAgICBpZiAoXGZhbHNlID09PSBcZ2V0ZW52KCR0aGlzLT5lbnZPcmlnaW5hbEluaXMpKSB7CiAgICAgICAgICAgIC8vIENhbGxlZCBieSBhbm90aGVyIGFwcCwgc28gbWFrZSBvcmlnaW5hbCBpbmlzIGF2YWlsYWJsZQogICAgICAgICAgICBQcm9jZXNzOjpzZXRFbnYoJHRoaXMtPmVudk9yaWdpbmFsSW5pcywgXGltcGxvZGUoXFBBVEhfU0VQQVJBVE9SLCAkc2V0dGluZ3NbJ2luaXMnXSkpOwogICAgICAgIH0KICAgICAgICBzZWxmOjokc2tpcHBlZCA9ICRzZXR0aW5nc1snc2tpcHBlZCddOwogICAgICAgICR0aGlzLT5ub3RpZnkoU3RhdHVzOjpJTkZPLCAnUHJvY2VzcyBjYWxsZWQgd2l0aCBleGlzdGluZyByZXN0YXJ0IHNldHRpbmdzJyk7CiAgICB9CiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbm8ga25vd24gY29uZmlndXJhdGlvbiBpc3N1ZXMKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0NvbmZpZ3VyYXRpb24oP3N0cmluZyAmJGluZm8pIDogYm9vbAogICAgewogICAgICAgIGlmICghXGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsKICAgICAgICAgICAgJGluZm8gPSAncHJvY19vcGVuIGZ1bmN0aW9uIGlzIGRpc2FibGVkJzsKICAgICAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFcZmlsZV9leGlzdHMoXFBIUF9CSU5BUlkpKSB7CiAgICAgICAgICAgICRpbmZvID0gJ1BIUF9CSU5BUlkgaXMgbm90IGF2YWlsYWJsZSc7CiAgICAgICAgICAgIHJldHVybiBcZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChcZXh0ZW5zaW9uX2xvYWRlZCgndW9weicpICYmICEoYm9vbCkgXGluaV9nZXQoJ3VvcHouZGlzYWJsZScpKSB7CiAgICAgICAgICAgIC8vIHVvcHogd29ya3MgYXQgb3Bjb2RlIGxldmVsIGFuZCBkaXNhYmxlcyBleGl0IGNhbGxzCiAgICAgICAgICAgIGlmIChcZnVuY3Rpb25fZXhpc3RzKCd1b3B6X2FsbG93X2V4aXQnKSkgewogICAgICAgICAgICAgICAgQFx1b3B6X2FsbG93X2V4aXQoXHRydWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGluZm8gPSAndW9weiBleHRlbnNpb24gaXMgbm90IGNvbXBhdGlibGUnOwogICAgICAgICAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBDaGVjayBVTkMgcGF0aHMgd2hlbiB1c2luZyBjbWQuZXhlCiAgICAgICAgaWYgKFxkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykgJiYgXFBIUF9WRVJTSU9OX0lEIDwgNzA0MDApIHsKICAgICAgICAgICAgJHdvcmtpbmdEaXIgPSBcZ2V0Y3dkKCk7CiAgICAgICAgICAgIGlmICgkd29ya2luZ0RpciA9PT0gXGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkaW5mbyA9ICd1bmFibGUgdG8gZGV0ZXJtaW5lIHdvcmtpbmcgZGlyZWN0b3J5JzsKICAgICAgICAgICAgICAgIHJldHVybiBcZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKDAgPT09IFxzdHJwb3MoJHdvcmtpbmdEaXIsICdcXFxcJykpIHsKICAgICAgICAgICAgICAgICRpbmZvID0gJ2NtZC5leGUgZG9lcyBub3Qgc3VwcG9ydCBVTkMgcGF0aHM6ICcgLiAkd29ya2luZ0RpcjsKICAgICAgICAgICAgICAgIHJldHVybiBcZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIFx0cnVlOwogICAgfQogICAgLyoqCiAgICAgKiBFbmFibGVzIGFzeW5jIHNpZ25hbHMgYW5kIGNvbnRyb2wgaW50ZXJydXB0cyBpbiB0aGUgcmVzdGFydGVkIHByb2Nlc3MKICAgICAqCiAgICAgKiBBdmFpbGFibGUgb24gVW5peCBQSFAgNy4xKyB3aXRoIHRoZSBwY250bCBleHRlbnNpb24gYW5kIFdpbmRvd3MgUEhQIDcuNCsuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdHJ5RW5hYmxlU2lnbmFscygpIDogdm9pZAogICAgewogICAgICAgIGlmIChcZnVuY3Rpb25fZXhpc3RzKCdwY250bF9hc3luY19zaWduYWxzJykgJiYgXGZ1bmN0aW9uX2V4aXN0cygncGNudGxfc2lnbmFsJykpIHsKICAgICAgICAgICAgXHBjbnRsX2FzeW5jX3NpZ25hbHMoXHRydWUpOwogICAgICAgICAgICAkbWVzc2FnZSA9ICdBc3luYyBzaWduYWxzIGVuYWJsZWQnOwogICAgICAgICAgICBpZiAoIXNlbGY6OiRpblJlc3RhcnQpIHsKICAgICAgICAgICAgICAgIC8vIFJlc3RhcnRpbmcsIHNvIGlnbm9yZSBTSUdJTlQgaW4gcGFyZW50CiAgICAgICAgICAgICAgICBccGNudGxfc2lnbmFsKFxTSUdJTlQsIFxTSUdfSUdOKTsKICAgICAgICAgICAgfSBlbHNlaWYgKFxpc19pbnQoXHBjbnRsX3NpZ25hbF9nZXRfaGFuZGxlcihcU0lHSU5UKSkpIHsKICAgICAgICAgICAgICAgIC8vIFJlc3RhcnRlZCwgbm8gaGFuZGxlciBzZXQgc28gZm9yY2UgZGVmYXVsdCBhY3Rpb24KICAgICAgICAgICAgICAgIFxwY250bF9zaWduYWwoXFNJR0lOVCwgXFNJR19ERkwpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghc2VsZjo6JGluUmVzdGFydCAmJiBcZnVuY3Rpb25fZXhpc3RzKCdzYXBpX3dpbmRvd3Nfc2V0X2N0cmxfaGFuZGxlcicpKSB7CiAgICAgICAgICAgIC8vIFJlc3RhcnRpbmcsIHNvIHNldCBhIGhhbmRsZXIgdG8gaWdub3JlIENUUkwgZXZlbnRzIGluIHRoZSBwYXJlbnQuCiAgICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IENUUkwrQyBldmVudHMgd2lsbCBiZSBhdmFpbGFibGUgaW4gdGhlIGNoaWxkCiAgICAgICAgICAgIC8vIHByb2Nlc3Mgd2l0aG91dCBoYXZpbmcgdG8gZW5hYmxlIHRoZW0gdGhlcmUsIHdoaWNoIGlzIHVucmVsaWFibGUuCiAgICAgICAgICAgIFxzYXBpX3dpbmRvd3Nfc2V0X2N0cmxfaGFuZGxlcihmdW5jdGlvbiAoJGV2dCkgewogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFJldHVybnMgJF9TRVJWRVJbJ2FyZ3YnXSBpZiBpdCBpcyBhcyBleHBlY3RlZAogICAgICoKICAgICAqIEByZXR1cm4gbm9uLWVtcHR5LWxpc3Q8c3RyaW5nPnxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tTZXJ2ZXJBcmd2KCkgOiA/YXJyYXkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gW107CiAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWydhcmd2J10pICYmIFxpc19hcnJheSgkX1NFUlZFUlsnYXJndiddKSkgewogICAgICAgICAgICBmb3JlYWNoICgkX1NFUlZFUlsnYXJndiddIGFzICR2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKCFcaXNfc3RyaW5nKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRyZXN1bHRbXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gXGNvdW50KCRyZXN1bHQpID4gMCA/ICRyZXN1bHQgOiBudWxsOwogICAgfQogICAgLyoqCiAgICAgKiBTZXRzIHN0YXRpYyBwcm9wZXJ0aWVzICR4ZGVidWdBY3RpdmUsICR4ZGVidWdWZXJzaW9uIGFuZCAkeGRlYnVnTW9kZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzZXRYZGVidWdEZXRhaWxzKCkgOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKHNlbGY6OiR4ZGVidWdBY3RpdmUgIT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzZWxmOjokeGRlYnVnQWN0aXZlID0gXGZhbHNlOwogICAgICAgIGlmICghXGV4dGVuc2lvbl9sb2FkZWQoJ3hkZWJ1ZycpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJHZlcnNpb24gPSBccGhwdmVyc2lvbigneGRlYnVnJyk7CiAgICAgICAgc2VsZjo6JHhkZWJ1Z1ZlcnNpb24gPSAkdmVyc2lvbiAhPT0gXGZhbHNlID8gJHZlcnNpb24gOiAndW5rbm93bic7CiAgICAgICAgaWYgKFx2ZXJzaW9uX2NvbXBhcmUoc2VsZjo6JHhkZWJ1Z1ZlcnNpb24sICczLjEnLCAnPj0nKSkgewogICAgICAgICAgICAkbW9kZXMgPSBceGRlYnVnX2luZm8oJ21vZGUnKTsKICAgICAgICAgICAgc2VsZjo6JHhkZWJ1Z01vZGUgPSBcY291bnQoJG1vZGVzKSA9PT0gMCA/ICdvZmYnIDogXGltcGxvZGUoJywnLCAkbW9kZXMpOwogICAgICAgICAgICBzZWxmOjokeGRlYnVnQWN0aXZlID0gc2VsZjo6JHhkZWJ1Z01vZGUgIT09ICdvZmYnOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC8vIFNlZSBpZiB4ZGVidWcubW9kZSBpcyBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uCiAgICAgICAgJGluaU1vZGUgPSBcaW5pX2dldCgneGRlYnVnLm1vZGUnKTsKICAgICAgICBpZiAoJGluaU1vZGUgPT09IFxmYWxzZSkgewogICAgICAgICAgICBzZWxmOjokeGRlYnVnQWN0aXZlID0gXHRydWU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLy8gRW52aXJvbm1lbnQgdmFsdWUgd2lucyBidXQgY2Fubm90IGJlIGVtcHR5CiAgICAgICAgJGVudk1vZGUgPSAoc3RyaW5nKSBcZ2V0ZW52KCdYREVCVUdfTU9ERScpOwogICAgICAgIGlmICgkZW52TW9kZSAhPT0gJycpIHsKICAgICAgICAgICAgc2VsZjo6JHhkZWJ1Z01vZGUgPSAkZW52TW9kZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZWxmOjokeGRlYnVnTW9kZSA9ICRpbmlNb2RlICE9PSAnJyA/ICRpbmlNb2RlIDogJ29mZic7CiAgICAgICAgfQogICAgICAgIC8vIEFuIGVtcHR5IGNvbW1hLXNlcGFyYXRlZCBsaXN0IGlzIHRyZWF0ZWQgYXMgbW9kZSAnb2ZmJwogICAgICAgIGlmIChQcmVnOjppc01hdGNoKCcvXiwrJC8nLCBcc3RyX3JlcGxhY2UoJyAnLCAnJywgc2VsZjo6JHhkZWJ1Z01vZGUpKSkgewogICAgICAgICAgICBzZWxmOjokeGRlYnVnTW9kZSA9ICdvZmYnOwogICAgICAgIH0KICAgICAgICBzZWxmOjokeGRlYnVnQWN0aXZlID0gc2VsZjo6JHhkZWJ1Z01vZGUgIT09ICdvZmYnOwogICAgfQp9Cjw/cGhwCgovKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBjb21wb3Nlci94ZGVidWctaGFuZGxlci4KICoKICogKGMpIENvbXBvc2VyIDxodHRwczovL2dpdGh1Yi5jb20vY29tcG9zZXI+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3CiAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KZGVjbGFyZSAoc3RyaWN0X3R5cGVzPTEpOwpuYW1lc3BhY2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFhkZWJ1Z0hhbmRsZXI7Cgp1c2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFBjcmVcUHJlZzsKLyoqCiAqIFByb2Nlc3MgdXRpbGl0eSBmdW5jdGlvbnMKICoKICogQGF1dGhvciBKb2huIFN0ZXZlbnNvbiA8am9obi1zdGV2ZW5zb25AYmx1ZXlvbmRlci5jby51az4KICovCmNsYXNzIFByb2Nlc3MKewogICAgLyoqCiAgICAgKiBFc2NhcGVzIGEgc3RyaW5nIHRvIGJlIHVzZWQgYXMgYSBzaGVsbCBhcmd1bWVudC4KICAgICAqCiAgICAgKiBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qb2huc3RldmVuc29uL3dpbmJveC1hcmdzCiAgICAgKiBNSVQgTGljZW5zZWQgKGMpIEpvaG4gU3RldmVuc29uIDxqb2huLXN0ZXZlbnNvbkBibHVleW9uZGVyLmNvLnVrPgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFyZyAgVGhlIGFyZ3VtZW50IHRvIGJlIGVzY2FwZWQKICAgICAqIEBwYXJhbSBib29sICRtZXRhIEFkZGl0aW9uYWxseSBlc2NhcGUgY21kLmV4ZSBtZXRhIGNoYXJhY3RlcnMKICAgICAqIEBwYXJhbSBib29sICRtb2R1bGUgVGhlIGFyZ3VtZW50IGlzIHRoZSBtb2R1bGUgdG8gaW52b2tlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXNjYXBlKHN0cmluZyAkYXJnLCBib29sICRtZXRhID0gXHRydWUsIGJvb2wgJG1vZHVsZSA9IFxmYWxzZSkgOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIVxkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykpIHsKICAgICAgICAgICAgcmV0dXJuICInIiAuIFxzdHJfcmVwbGFjZSgiJyIsICInXFwnJyIsICRhcmcpIC4gIiciOwogICAgICAgIH0KICAgICAgICAkcXVvdGUgPSBcc3RycGJyaygkYXJnLCAiIFx0IikgIT09IFxmYWxzZSB8fCAkYXJnID09PSAnJzsKICAgICAgICAkYXJnID0gUHJlZzo6cmVwbGFjZSgnLyhcXFxcKikiLycsICckMSQxXFwiJywgJGFyZywgLTEsICRkcXVvdGVzKTsKICAgICAgICAkZHF1b3RlcyA9IChib29sKSAkZHF1b3RlczsKICAgICAgICBpZiAoJG1ldGEpIHsKICAgICAgICAgICAgJG1ldGEgPSAkZHF1b3RlcyB8fCBQcmVnOjppc01hdGNoKCcvJVteJV0rJS8nLCAkYXJnKTsKICAgICAgICAgICAgaWYgKCEkbWV0YSkgewogICAgICAgICAgICAgICAgJHF1b3RlID0gJHF1b3RlIHx8IFxzdHJwYnJrKCRhcmcsICdeJnw8PigpJykgIT09IFxmYWxzZTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRtb2R1bGUgJiYgISRkcXVvdGVzICYmICRxdW90ZSkgewogICAgICAgICAgICAgICAgJG1ldGEgPSBcZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRxdW90ZSkgewogICAgICAgICAgICAkYXJnID0gJyInIC4gUHJlZzo6cmVwbGFjZSgnLyhcXFxcKikkLycsICckMSQxJywgJGFyZykgLiAnIic7CiAgICAgICAgfQogICAgICAgIGlmICgkbWV0YSkgewogICAgICAgICAgICAkYXJnID0gUHJlZzo6cmVwbGFjZSgnLyhbIl4mfDw+KCklXSkvJywgJ14kMScsICRhcmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGFyZzsKICAgIH0KICAgIC8qKgogICAgICogRXNjYXBlcyBhbiBhcnJheSBvZiBhcmd1bWVudHMgdGhhdCBtYWtlIHVwIGEgc2hlbGwgY29tbWFuZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkYXJncyBBcmd1bWVudCBsaXN0LCB3aXRoIHRoZSBtb2R1bGUgbmFtZSBmaXJzdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVzY2FwZVNoZWxsQ29tbWFuZChhcnJheSAkYXJncykgOiBzdHJpbmcKICAgIHsKICAgICAgICAkY29tbWFuZCA9ICcnOwogICAgICAgICRtb2R1bGUgPSBcYXJyYXlfc2hpZnQoJGFyZ3MpOwogICAgICAgIGlmICgkbW9kdWxlICE9PSBudWxsKSB7CiAgICAgICAgICAgICRjb21tYW5kID0gc2VsZjo6ZXNjYXBlKCRtb2R1bGUsIFx0cnVlLCBcdHJ1ZSk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRhcmdzIGFzICRhcmcpIHsKICAgICAgICAgICAgICAgICRjb21tYW5kIC49ICcgJyAuIHNlbGY6OmVzY2FwZSgkYXJnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGNvbW1hbmQ7CiAgICB9CiAgICAvKioKICAgICAqIE1ha2VzIHB1dGVudiBlbnZpcm9ubWVudCBjaGFuZ2VzIGF2YWlsYWJsZSBpbiAkX1NFUlZFUiBhbmQgJF9FTlYKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkdmFsdWUgQSBudWxsIHZhbHVlIHVuc2V0cyB0aGUgdmFyaWFibGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRFbnYoc3RyaW5nICRuYW1lLCA/c3RyaW5nICR2YWx1ZSA9IG51bGwpIDogYm9vbAogICAgewogICAgICAgICR1bnNldCA9IG51bGwgPT09ICR2YWx1ZTsKICAgICAgICBpZiAoIVxwdXRlbnYoJHVuc2V0ID8gJG5hbWUgOiAkbmFtZSAuICc9JyAuICR2YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCR1bnNldCkgewogICAgICAgICAgICB1bnNldCgkX1NFUlZFUlskbmFtZV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRfU0VSVkVSWyRuYW1lXSA9ICR2YWx1ZTsKICAgICAgICB9CiAgICAgICAgLy8gVXBkYXRlICRfRU5WIGlmIGl0IGlzIGJlaW5nIHVzZWQKICAgICAgICBpZiAoXGZhbHNlICE9PSBcc3RyaXBvcygoc3RyaW5nKSBcaW5pX2dldCgndmFyaWFibGVzX29yZGVyJyksICdFJykpIHsKICAgICAgICAgICAgaWYgKCR1bnNldCkgewogICAgICAgICAgICAgICAgdW5zZXQoJF9FTlZbJG5hbWVdKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRfRU5WWyRuYW1lXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gXHRydWU7CiAgICB9Cn0KPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNvbXBvc2VyL3hkZWJ1Zy1oYW5kbGVyLgogKgogKiAoYykgQ29tcG9zZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlcj4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcKICogdGhlIExJQ0VOU0UgZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwpkZWNsYXJlIChzdHJpY3RfdHlwZXM9MSk7Cm5hbWVzcGFjZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcWGRlYnVnSGFuZGxlcjsKCnVzZSBfUEhQU3Rhbl84YzY2ZDgyNTVcUHNyXExvZ1xMb2dnZXJJbnRlcmZhY2U7CnVzZSBfUEhQU3Rhbl84YzY2ZDgyNTVcUHNyXExvZ1xMb2dMZXZlbDsKLyoqCiAqIEBhdXRob3IgSm9obiBTdGV2ZW5zb24gPGpvaG4tc3RldmVuc29uQGJsdWV5b25kZXIuY28udWs+CiAqIEBpbnRlcm5hbAogKi8KY2xhc3MgU3RhdHVzCnsKICAgIGNvbnN0IEVOVl9SRVNUQVJUID0gJ1hERUJVR19IQU5ETEVSX1JFU1RBUlQnOwogICAgY29uc3QgQ0hFQ0sgPSAnQ2hlY2snOwogICAgY29uc3QgRVJST1IgPSAnRXJyb3InOwogICAgY29uc3QgSU5GTyA9ICdJbmZvJzsKICAgIGNvbnN0IE5PUkVTVEFSVCA9ICdOb1Jlc3RhcnQnOwogICAgY29uc3QgUkVTVEFSVCA9ICdSZXN0YXJ0JzsKICAgIGNvbnN0IFJFU1RBUlRJTkcgPSAnUmVzdGFydGluZyc7CiAgICBjb25zdCBSRVNUQVJURUQgPSAnUmVzdGFydGVkJzsKICAgIC8qKiBAdmFyIGJvb2wgKi8KICAgIHByaXZhdGUgJGRlYnVnOwogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlICRlbnZBbGxvd1hkZWJ1ZzsKICAgIC8qKiBAdmFyIHN0cmluZ3xudWxsICovCiAgICBwcml2YXRlICRsb2FkZWQ7CiAgICAvKiogQHZhciBMb2dnZXJJbnRlcmZhY2V8bnVsbCAqLwogICAgcHJpdmF0ZSAkbG9nZ2VyOwogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHJpdmF0ZSAkbW9kZU9mZjsKICAgIC8qKiBAdmFyIGZsb2F0ICovCiAgICBwcml2YXRlICR0aW1lOwogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbnZBbGxvd1hkZWJ1ZyBQcmVmaXhlZCBfQUxMT1dfWERFQlVHIG5hbWUKICAgICAqIEBwYXJhbSBib29sICRkZWJ1ZyBXaGV0aGVyIGRlYnVnIG91dHB1dCBpcyByZXF1aXJlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRlbnZBbGxvd1hkZWJ1ZywgYm9vbCAkZGVidWcpCiAgICB7CiAgICAgICAgJHN0YXJ0ID0gXGdldGVudihzZWxmOjpFTlZfUkVTVEFSVCk7CiAgICAgICAgUHJvY2Vzczo6c2V0RW52KHNlbGY6OkVOVl9SRVNUQVJUKTsKICAgICAgICAkdGhpcy0+dGltZSA9IFxpc19udW1lcmljKCRzdGFydCkgPyBccm91bmQoKFxtaWNyb3RpbWUoXHRydWUpIC0gJHN0YXJ0KSAqIDEwMDApIDogMDsKICAgICAgICAkdGhpcy0+ZW52QWxsb3dYZGVidWcgPSAkZW52QWxsb3dYZGVidWc7CiAgICAgICAgJHRoaXMtPmRlYnVnID0gJGRlYnVnICYmIFxkZWZpbmVkKCdTVERFUlInKTsKICAgICAgICAkdGhpcy0+bW9kZU9mZiA9IFxmYWxzZTsKICAgIH0KICAgIC8qKgogICAgICogQWN0aXZhdGVzIHN0YXR1cyBtZXNzYWdlIG91dHB1dCB0byBhIFBTUjMgbG9nZ2VyCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRMb2dnZXIoTG9nZ2VySW50ZXJmYWNlICRsb2dnZXIpIDogdm9pZAogICAgewogICAgICAgICR0aGlzLT5sb2dnZXIgPSAkbG9nZ2VyOwogICAgfQogICAgLyoqCiAgICAgKiBDYWxscyBhIGhhbmRsZXIgbWV0aG9kIHRvIHJlcG9ydCBhIG1lc3NhZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgJG9wIGlzIG5vdCBrbm93bgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVwb3J0KHN0cmluZyAkb3AsID9zdHJpbmcgJGRhdGEpIDogdm9pZAogICAgewogICAgICAgIGlmICgkdGhpcy0+bG9nZ2VyICE9PSBudWxsIHx8ICR0aGlzLT5kZWJ1ZykgewogICAgICAgICAgICAkcGFyYW0gPSAoc3RyaW5nKSAkZGF0YTsKICAgICAgICAgICAgc3dpdGNoICgkb3ApIHsKICAgICAgICAgICAgICAgIGNhc2Ugc2VsZjo6Q0hFQ0s6CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJlcG9ydENoZWNrKCRwYXJhbSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIHNlbGY6OkVSUk9SOgogICAgICAgICAgICAgICAgICAgICR0aGlzLT5yZXBvcnRFcnJvcigkcGFyYW0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBzZWxmOjpJTkZPOgogICAgICAgICAgICAgICAgICAgICR0aGlzLT5yZXBvcnRJbmZvKCRwYXJhbSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIHNlbGY6Ok5PUkVTVEFSVDoKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmVwb3J0Tm9SZXN0YXJ0KCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIHNlbGY6OlJFU1RBUlQ6CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJlcG9ydFJlc3RhcnQoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ugc2VsZjo6UkVTVEFSVEVEOgogICAgICAgICAgICAgICAgICAgICR0aGlzLT5yZXBvcnRSZXN0YXJ0ZWQoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ugc2VsZjo6UkVTVEFSVElORzoKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cmVwb3J0UmVzdGFydGluZygkcGFyYW0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5rbm93biBvcCBoYW5kbGVyOiAnIC4gJG9wKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogT3V0cHV0cyBhIHN0YXR1cyBtZXNzYWdlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gb3V0cHV0KHN0cmluZyAkdGV4dCwgP3N0cmluZyAkbGV2ZWwgPSBudWxsKSA6IHZvaWQKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmxvZ2dlciAhPT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT5sb2coJGxldmVsICE9PSBudWxsID8gJGxldmVsIDogTG9nTGV2ZWw6OkRFQlVHLCAkdGV4dCk7CiAgICAgICAgfQogICAgICAgIGlmICgkdGhpcy0+ZGVidWcpIHsKICAgICAgICAgICAgXGZ3cml0ZShcU1RERVJSLCBcc3ByaW50ZigneGRlYnVnLWhhbmRsZXJbJWRdICVzJywgXGdldG15cGlkKCksICR0ZXh0IC4gXFBIUF9FT0wpKTsKICAgICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENoZWNraW5nIHN0YXR1cyBtZXNzYWdlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVwb3J0Q2hlY2soc3RyaW5nICRsb2FkZWQpIDogdm9pZAogICAgewogICAgICAgIGxpc3QoJHZlcnNpb24sICRtb2RlKSA9IFxleHBsb2RlKCd8JywgJGxvYWRlZCk7CiAgICAgICAgaWYgKCR2ZXJzaW9uICE9PSAnJykgewogICAgICAgICAgICAkdGhpcy0+bG9hZGVkID0gJygnIC4gJHZlcnNpb24gLiAnKScgLiAoJG1vZGUgIT09ICcnID8gJyB4ZGVidWcubW9kZT0nIC4gJG1vZGUgOiAnJyk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5tb2RlT2ZmID0gJG1vZGUgPT09ICdvZmYnOwogICAgICAgICR0aGlzLT5vdXRwdXQoJ0NoZWNraW5nICcgLiAkdGhpcy0+ZW52QWxsb3dYZGVidWcpOwogICAgfQogICAgLyoqCiAgICAgKiBFcnJvciBzdGF0dXMgbWVzc2FnZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlcG9ydEVycm9yKHN0cmluZyAkZXJyb3IpIDogdm9pZAogICAgewogICAgICAgICR0aGlzLT5vdXRwdXQoXHNwcmludGYoJ05vIHJlc3RhcnQgKCVzKScsICRlcnJvciksIExvZ0xldmVsOjpXQVJOSU5HKTsKICAgIH0KICAgIC8qKgogICAgICogSW5mbyBzdGF0dXMgbWVzc2FnZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlcG9ydEluZm8oc3RyaW5nICRpbmZvKSA6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+b3V0cHV0KCRpbmZvKTsKICAgIH0KICAgIC8qKgogICAgICogTm8gcmVzdGFydCBzdGF0dXMgbWVzc2FnZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlcG9ydE5vUmVzdGFydCgpIDogdm9pZAogICAgewogICAgICAgICR0aGlzLT5vdXRwdXQoJHRoaXMtPmdldExvYWRlZE1lc3NhZ2UoKSk7CiAgICAgICAgaWYgKCR0aGlzLT5sb2FkZWQgIT09IG51bGwpIHsKICAgICAgICAgICAgJHRleHQgPSBcc3ByaW50ZignTm8gcmVzdGFydCAoJXMpJywgJHRoaXMtPmdldEVudkFsbG93KCkpOwogICAgICAgICAgICBpZiAoIShib29sKSBcZ2V0ZW52KCR0aGlzLT5lbnZBbGxvd1hkZWJ1ZykpIHsKICAgICAgICAgICAgICAgICR0ZXh0IC49ICcgQWxsb3dlZCBieSAnIC4gKCR0aGlzLT5tb2RlT2ZmID8gJ3hkZWJ1Zy5tb2RlJyA6ICdhcHBsaWNhdGlvbicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5vdXRwdXQoJHRleHQpOwogICAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogUmVzdGFydCBzdGF0dXMgbWVzc2FnZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlcG9ydFJlc3RhcnQoKSA6IHZvaWQKICAgIHsKICAgICAgICAkdGhpcy0+b3V0cHV0KCR0aGlzLT5nZXRMb2FkZWRNZXNzYWdlKCkpOwogICAgICAgIFByb2Nlc3M6OnNldEVudihzZWxmOjpFTlZfUkVTVEFSVCwgKHN0cmluZykgXG1pY3JvdGltZShcdHJ1ZSkpOwogICAgfQogICAgLyoqCiAgICAgKiBSZXN0YXJ0ZWQgc3RhdHVzIG1lc3NhZ2UKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZXBvcnRSZXN0YXJ0ZWQoKSA6IHZvaWQKICAgIHsKICAgICAgICAkbG9hZGVkID0gJHRoaXMtPmdldExvYWRlZE1lc3NhZ2UoKTsKICAgICAgICAkdGV4dCA9IFxzcHJpbnRmKCdSZXN0YXJ0ZWQgKCVkIG1zKS4gJXMnLCAkdGhpcy0+dGltZSwgJGxvYWRlZCk7CiAgICAgICAgJGxldmVsID0gJHRoaXMtPmxvYWRlZCAhPT0gbnVsbCA/IExvZ0xldmVsOjpXQVJOSU5HIDogbnVsbDsKICAgICAgICAkdGhpcy0+b3V0cHV0KCR0ZXh0LCAkbGV2ZWwpOwogICAgfQogICAgLyoqCiAgICAgKiBSZXN0YXJ0aW5nIHN0YXR1cyBtZXNzYWdlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVwb3J0UmVzdGFydGluZyhzdHJpbmcgJGNvbW1hbmQpIDogdm9pZAogICAgewogICAgICAgICR0ZXh0ID0gXHNwcmludGYoJ1Byb2Nlc3MgcmVzdGFydGluZyAoJXMpJywgJHRoaXMtPmdldEVudkFsbG93KCkpOwogICAgICAgICR0aGlzLT5vdXRwdXQoJHRleHQpOwogICAgICAgICR0ZXh0ID0gJ1J1bm5pbmc6ICcgLiAkY29tbWFuZDsKICAgICAgICAkdGhpcy0+b3V0cHV0KCR0ZXh0KTsKICAgIH0KICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgX0FMTE9XX1hERUJVRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBhcyBuYW1lPXZhbHVlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0RW52QWxsb3coKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZW52QWxsb3dYZGVidWcgLiAnPScgLiBcZ2V0ZW52KCR0aGlzLT5lbnZBbGxvd1hkZWJ1Zyk7CiAgICB9CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIFhkZWJ1ZyBzdGF0dXMgYW5kIHZlcnNpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRMb2FkZWRNZXNzYWdlKCkgOiBzdHJpbmcKICAgIHsKICAgICAgICAkbG9hZGVkID0gJHRoaXMtPmxvYWRlZCAhPT0gbnVsbCA/IFxzcHJpbnRmKCdsb2FkZWQgJXMnLCAkdGhpcy0+bG9hZGVkKSA6ICdub3QgbG9hZGVkJzsKICAgICAgICByZXR1cm4gJ1RoZSBYZGVidWcgZXh0ZW5zaW9uIGlzICcgLiAkbG9hZGVkOwogICAgfQp9Cjw/cGhwCgovKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBDb21wb3Nlci4KICoKICogKGMpIE5pbHMgQWRlcm1hbm4gPG5hZGVybWFuQG5hZGVybWFuLmRlPgogKiAgICAgSm9yZGkgQm9nZ2lhbm8gPGouYm9nZ2lhbm9Ac2VsZC5iZT4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIENvbXBvc2VyXEF1dG9sb2FkOwoKLyoqCiAqIENsYXNzTG9hZGVyIGltcGxlbWVudHMgYSBQU1ItMCwgUFNSLTQgYW5kIGNsYXNzbWFwIGNsYXNzIGxvYWRlci4KICoKICogICAgICRsb2FkZXIgPSBuZXcgXENvbXBvc2VyXEF1dG9sb2FkXENsYXNzTG9hZGVyKCk7CiAqCiAqICAgICAvLyByZWdpc3RlciBjbGFzc2VzIHdpdGggbmFtZXNwYWNlcwogKiAgICAgJGxvYWRlci0+YWRkKCdTeW1mb255XENvbXBvbmVudCcsIF9fRElSX18uJy9jb21wb25lbnQnKTsKICogICAgICRsb2FkZXItPmFkZCgnU3ltZm9ueScsICAgICAgICAgICBfX0RJUl9fLicvZnJhbWV3b3JrJyk7CiAqCiAqICAgICAvLyBhY3RpdmF0ZSB0aGUgYXV0b2xvYWRlcgogKiAgICAgJGxvYWRlci0+cmVnaXN0ZXIoKTsKICoKICogICAgIC8vIHRvIGVuYWJsZSBzZWFyY2hpbmcgdGhlIGluY2x1ZGUgcGF0aCAoZWcuIGZvciBQRUFSIHBhY2thZ2VzKQogKiAgICAgJGxvYWRlci0+c2V0VXNlSW5jbHVkZVBhdGgodHJ1ZSk7CiAqCiAqIEluIHRoaXMgZXhhbXBsZSwgaWYgeW91IHRyeSB0byB1c2UgYSBjbGFzcyBpbiB0aGUgU3ltZm9ueVxDb21wb25lbnQKICogbmFtZXNwYWNlIG9yIG9uZSBvZiBpdHMgY2hpbGRyZW4gKFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGUgZm9yIGluc3RhbmNlKSwKICogdGhlIGF1dG9sb2FkZXIgd2lsbCBmaXJzdCBsb29rIGZvciB0aGUgY2xhc3MgdW5kZXIgdGhlIGNvbXBvbmVudC8KICogZGlyZWN0b3J5LCBhbmQgaXQgd2lsbCB0aGVuIGZhbGxiYWNrIHRvIHRoZSBmcmFtZXdvcmsvIGRpcmVjdG9yeSBpZiBub3QKICogZm91bmQgYmVmb3JlIGdpdmluZyB1cC4KICoKICogVGhpcyBjbGFzcyBpcyBsb29zZWx5IGJhc2VkIG9uIHRoZSBTeW1mb255IFVuaXZlcnNhbENsYXNzTG9hZGVyLgogKgogKiBAYXV0aG9yIEZhYmllbiBQb3RlbmNpZXIgPGZhYmllbkBzeW1mb255LmNvbT4KICogQGF1dGhvciBKb3JkaSBCb2dnaWFubyA8ai5ib2dnaWFub0BzZWxkLmJlPgogKiBAc2VlICAgIGh0dHBzOi8vd3d3LnBocC1maWcub3JnL3Bzci9wc3ItMC8KICogQHNlZSAgICBodHRwczovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTQvCiAqLwpjbGFzcyBDbGFzc0xvYWRlcgp7CiAgICAvKiogQHZhciBcQ2xvc3VyZShzdHJpbmcpOnZvaWQgKi8KICAgIHByaXZhdGUgc3RhdGljICRpbmNsdWRlRmlsZTsKCiAgICAvKiogQHZhciBzdHJpbmd8bnVsbCAqLwogICAgcHJpdmF0ZSAkdmVuZG9yRGlyOwoKICAgIC8vIFBTUi00CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8c3RyaW5nLCBhcnJheTxzdHJpbmcsIGludD4+CiAgICAgKi8KICAgIHByaXZhdGUgJHByZWZpeExlbmd0aHNQc3I0ID0gYXJyYXkoKTsKICAgIC8qKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIGxpc3Q8c3RyaW5nPj4KICAgICAqLwogICAgcHJpdmF0ZSAkcHJlZml4RGlyc1BzcjQgPSBhcnJheSgpOwogICAgLyoqCiAgICAgKiBAdmFyIGxpc3Q8c3RyaW5nPgogICAgICovCiAgICBwcml2YXRlICRmYWxsYmFja0RpcnNQc3I0ID0gYXJyYXkoKTsKCiAgICAvLyBQU1ItMAogICAgLyoqCiAgICAgKiBMaXN0IG9mIFBTUi0wIHByZWZpeGVzCiAgICAgKgogICAgICogU3RydWN0dXJlZCBhcyBhcnJheSgnRiAoZmlyc3QgbGV0dGVyKScgPT4gYXJyYXkoJ0Zvb1xCYXIgKGZ1bGwgcHJlZml4KScgPT4gYXJyYXkoJ3BhdGgnLCAncGF0aDInKSkpCiAgICAgKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIGFycmF5PHN0cmluZywgbGlzdDxzdHJpbmc+Pj4KICAgICAqLwogICAgcHJpdmF0ZSAkcHJlZml4ZXNQc3IwID0gYXJyYXkoKTsKICAgIC8qKgogICAgICogQHZhciBsaXN0PHN0cmluZz4KICAgICAqLwogICAgcHJpdmF0ZSAkZmFsbGJhY2tEaXJzUHNyMCA9IGFycmF5KCk7CgogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHJpdmF0ZSAkdXNlSW5jbHVkZVBhdGggPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8c3RyaW5nLCBzdHJpbmc+CiAgICAgKi8KICAgIHByaXZhdGUgJGNsYXNzTWFwID0gYXJyYXkoKTsKCiAgICAvKiogQHZhciBib29sICovCiAgICBwcml2YXRlICRjbGFzc01hcEF1dGhvcml0YXRpdmUgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXk8c3RyaW5nLCBib29sPgogICAgICovCiAgICBwcml2YXRlICRtaXNzaW5nQ2xhc3NlcyA9IGFycmF5KCk7CgogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHByaXZhdGUgJGFwY3VQcmVmaXg7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5PHN0cmluZywgc2VsZj4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHJlZ2lzdGVyZWRMb2FkZXJzID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdmVuZG9yRGlyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmVuZG9yRGlyID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+dmVuZG9yRGlyID0gJHZlbmRvckRpcjsKICAgICAgICBzZWxmOjppbml0aWFsaXplSW5jbHVkZUNsb3N1cmUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXk8c3RyaW5nLCBsaXN0PHN0cmluZz4+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcmVmaXhlcygpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkdGhpcy0+cHJlZml4ZXNQc3IwKSkgewogICAgICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ2FycmF5X21lcmdlJywgYXJyYXlfdmFsdWVzKCR0aGlzLT5wcmVmaXhlc1BzcjApKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhcnJheSgpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsIGxpc3Q8c3RyaW5nPj4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByZWZpeGVzUHNyNCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wcmVmaXhEaXJzUHNyNDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbGlzdDxzdHJpbmc+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGYWxsYmFja0RpcnMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbGlzdDxzdHJpbmc+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGYWxsYmFja0RpcnNQc3I0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZywgc3RyaW5nPiBBcnJheSBvZiBjbGFzc25hbWUgPT4gcGF0aAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xhc3NNYXAoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2xhc3NNYXA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nLCBzdHJpbmc+ICRjbGFzc01hcCBDbGFzcyB0byBmaWxlbmFtZSBtYXAKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZENsYXNzTWFwKGFycmF5ICRjbGFzc01hcCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNsYXNzTWFwKSB7CiAgICAgICAgICAgICR0aGlzLT5jbGFzc01hcCA9IGFycmF5X21lcmdlKCR0aGlzLT5jbGFzc01hcCwgJGNsYXNzTWFwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+Y2xhc3NNYXAgPSAkY2xhc3NNYXA7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgc2V0IG9mIFBTUi0wIGRpcmVjdG9yaWVzIGZvciBhIGdpdmVuIHByZWZpeCwgZWl0aGVyCiAgICAgKiBhcHBlbmRpbmcgb3IgcHJlcGVuZGluZyB0byB0aGUgb25lcyBwcmV2aW91c2x5IHNldCBmb3IgdGhpcyBwcmVmaXguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgJHByZWZpeCAgVGhlIHByZWZpeAogICAgICogQHBhcmFtIGxpc3Q8c3RyaW5nPnxzdHJpbmcgJHBhdGhzICAgVGhlIFBTUi0wIHJvb3QgZGlyZWN0b3JpZXMKICAgICAqIEBwYXJhbSBib29sICAgICAgICAgICAgICAgICRwcmVwZW5kIFdoZXRoZXIgdG8gcHJlcGVuZCB0aGUgZGlyZWN0b3JpZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZCgkcHJlZml4LCAkcGF0aHMsICRwcmVwZW5kID0gZmFsc2UpCiAgICB7CiAgICAgICAgJHBhdGhzID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgaWYgKCEkcHJlZml4KSB7CiAgICAgICAgICAgIGlmICgkcHJlcGVuZCkgewogICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAgPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICAgICAkcGF0aHMsCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwLAogICAgICAgICAgICAgICAgICAgICRwYXRocwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJGZpcnN0ID0gJHByZWZpeFswXTsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSkpIHsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdID0gJHBhdGhzOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoJHByZXBlbmQpIHsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAkcGF0aHMsCiAgICAgICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0KICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0gPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSwKICAgICAgICAgICAgICAgICRwYXRocwogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIHNldCBvZiBQU1ItNCBkaXJlY3RvcmllcyBmb3IgYSBnaXZlbiBuYW1lc3BhY2UsIGVpdGhlcgogICAgICogYXBwZW5kaW5nIG9yIHByZXBlbmRpbmcgdG8gdGhlIG9uZXMgcHJldmlvdXNseSBzZXQgZm9yIHRoaXMgbmFtZXNwYWNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRwcmVmaXggIFRoZSBwcmVmaXgvbmFtZXNwYWNlLCB3aXRoIHRyYWlsaW5nICdcXCcKICAgICAqIEBwYXJhbSBsaXN0PHN0cmluZz58c3RyaW5nICRwYXRocyAgIFRoZSBQU1ItNCBiYXNlIGRpcmVjdG9yaWVzCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAgICAgICAgICAkcHJlcGVuZCBXaGV0aGVyIHRvIHByZXBlbmQgdGhlIGRpcmVjdG9yaWVzCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRQc3I0KCRwcmVmaXgsICRwYXRocywgJHByZXBlbmQgPSBmYWxzZSkKICAgIHsKICAgICAgICAkcGF0aHMgPSAoYXJyYXkpICRwYXRoczsKICAgICAgICBpZiAoISRwcmVmaXgpIHsKICAgICAgICAgICAgLy8gUmVnaXN0ZXIgZGlyZWN0b3JpZXMgZm9yIHRoZSByb290IG5hbWVzcGFjZS4KICAgICAgICAgICAgaWYgKCRwcmVwZW5kKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgICAgICRwYXRocywKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0ID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQsCiAgICAgICAgICAgICAgICAgICAgJHBhdGhzCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKCFpc3NldCgkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0pKSB7CiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGRpcmVjdG9yaWVzIGZvciBhIG5ldyBuYW1lc3BhY2UuCiAgICAgICAgICAgICRsZW5ndGggPSBzdHJsZW4oJHByZWZpeCk7CiAgICAgICAgICAgIGlmICgnXFwnICE9PSAkcHJlZml4WyRsZW5ndGggLSAxXSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIkEgbm9uLWVtcHR5IFBTUi00IHByZWZpeCBtdXN0IGVuZCB3aXRoIGEgbmFtZXNwYWNlIHNlcGFyYXRvci4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+cHJlZml4TGVuZ3Roc1BzcjRbJHByZWZpeFswXV1bJHByZWZpeF0gPSAkbGVuZ3RoOwogICAgICAgICAgICAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0gPSAkcGF0aHM7CiAgICAgICAgfSBlbHNlaWYgKCRwcmVwZW5kKSB7CiAgICAgICAgICAgIC8vIFByZXBlbmQgZGlyZWN0b3JpZXMgZm9yIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBuYW1lc3BhY2UuCiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgJHBhdGhzLAogICAgICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdCiAgICAgICAgICAgICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gQXBwZW5kIGRpcmVjdG9yaWVzIGZvciBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgbmFtZXNwYWNlLgogICAgICAgICAgICAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0gPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSwKICAgICAgICAgICAgICAgICRwYXRocwogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIHNldCBvZiBQU1ItMCBkaXJlY3RvcmllcyBmb3IgYSBnaXZlbiBwcmVmaXgsCiAgICAgKiByZXBsYWNpbmcgYW55IG90aGVycyBwcmV2aW91c2x5IHNldCBmb3IgdGhpcyBwcmVmaXguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgJHByZWZpeCBUaGUgcHJlZml4CiAgICAgKiBAcGFyYW0gbGlzdDxzdHJpbmc+fHN0cmluZyAkcGF0aHMgIFRoZSBQU1ItMCBiYXNlIGRpcmVjdG9yaWVzCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoJHByZWZpeCwgJHBhdGhzKQogICAgewogICAgICAgIGlmICghJHByZWZpeCkgewogICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCA9IChhcnJheSkgJHBhdGhzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJHByZWZpeFswXV1bJHByZWZpeF0gPSAoYXJyYXkpICRwYXRoczsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgYSBzZXQgb2YgUFNSLTQgZGlyZWN0b3JpZXMgZm9yIGEgZ2l2ZW4gbmFtZXNwYWNlLAogICAgICogcmVwbGFjaW5nIGFueSBvdGhlcnMgcHJldmlvdXNseSBzZXQgZm9yIHRoaXMgbmFtZXNwYWNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRwcmVmaXggVGhlIHByZWZpeC9uYW1lc3BhY2UsIHdpdGggdHJhaWxpbmcgJ1xcJwogICAgICogQHBhcmFtIGxpc3Q8c3RyaW5nPnxzdHJpbmcgJHBhdGhzICBUaGUgUFNSLTQgYmFzZSBkaXJlY3RvcmllcwogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UHNyNCgkcHJlZml4LCAkcGF0aHMpCiAgICB7CiAgICAgICAgaWYgKCEkcHJlZml4KSB7CiAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0ID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGxlbmd0aCA9IHN0cmxlbigkcHJlZml4KTsKICAgICAgICAgICAgaWYgKCdcXCcgIT09ICRwcmVmaXhbJGxlbmd0aCAtIDFdKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiQSBub24tZW1wdHkgUFNSLTQgcHJlZml4IG11c3QgZW5kIHdpdGggYSBuYW1lc3BhY2Ugc2VwYXJhdG9yLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhMZW5ndGhzUHNyNFskcHJlZml4WzBdXVskcHJlZml4XSA9ICRsZW5ndGg7CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSA9IChhcnJheSkgJHBhdGhzOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFR1cm5zIG9uIHNlYXJjaGluZyB0aGUgaW5jbHVkZSBwYXRoIGZvciBjbGFzcyBmaWxlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkdXNlSW5jbHVkZVBhdGgKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFVzZUluY2x1ZGVQYXRoKCR1c2VJbmNsdWRlUGF0aCkKICAgIHsKICAgICAgICAkdGhpcy0+dXNlSW5jbHVkZVBhdGggPSAkdXNlSW5jbHVkZVBhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYW4gYmUgdXNlZCB0byBjaGVjayBpZiB0aGUgYXV0b2xvYWRlciB1c2VzIHRoZSBpbmNsdWRlIHBhdGggdG8gY2hlY2sKICAgICAqIGZvciBjbGFzc2VzLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlSW5jbHVkZVBhdGgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXNlSW5jbHVkZVBhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBUdXJucyBvZmYgc2VhcmNoaW5nIHRoZSBwcmVmaXggYW5kIGZhbGxiYWNrIGRpcmVjdG9yaWVzIGZvciBjbGFzc2VzCiAgICAgKiB0aGF0IGhhdmUgbm90IGJlZW4gcmVnaXN0ZXJlZCB3aXRoIHRoZSBjbGFzcyBtYXAuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGNsYXNzTWFwQXV0aG9yaXRhdGl2ZQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q2xhc3NNYXBBdXRob3JpdGF0aXZlKCRjbGFzc01hcEF1dGhvcml0YXRpdmUpCiAgICB7CiAgICAgICAgJHRoaXMtPmNsYXNzTWFwQXV0aG9yaXRhdGl2ZSA9ICRjbGFzc01hcEF1dGhvcml0YXRpdmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBTaG91bGQgY2xhc3MgbG9va3VwIGZhaWwgaWYgbm90IGZvdW5kIGluIHRoZSBjdXJyZW50IGNsYXNzIG1hcD8KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzQ2xhc3NNYXBBdXRob3JpdGF0aXZlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNsYXNzTWFwQXV0aG9yaXRhdGl2ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEFQQ3UgcHJlZml4IHRvIHVzZSB0byBjYWNoZSBmb3VuZC9ub3QtZm91bmQgY2xhc3NlcywgaWYgdGhlIGV4dGVuc2lvbiBpcyBlbmFibGVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkYXBjdVByZWZpeAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QXBjdVByZWZpeCgkYXBjdVByZWZpeCkKICAgIHsKICAgICAgICAkdGhpcy0+YXBjdVByZWZpeCA9IGZ1bmN0aW9uX2V4aXN0cygnYXBjdV9mZXRjaCcpICYmIGZpbHRlcl92YXIoaW5pX2dldCgnYXBjLmVuYWJsZWQnKSwgRklMVEVSX1ZBTElEQVRFX0JPT0xFQU4pID8gJGFwY3VQcmVmaXggOiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIEFQQ3UgcHJlZml4IGluIHVzZSwgb3IgbnVsbCBpZiBBUEN1IGNhY2hpbmcgaXMgbm90IGVuYWJsZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXBjdVByZWZpeCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hcGN1UHJlZml4OwogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIHRoaXMgaW5zdGFuY2UgYXMgYW4gYXV0b2xvYWRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkcHJlcGVuZCBXaGV0aGVyIHRvIHByZXBlbmQgdGhlIGF1dG9sb2FkZXIgb3Igbm90CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3RlcigkcHJlcGVuZCA9IGZhbHNlKQogICAgewogICAgICAgIHNwbF9hdXRvbG9hZF9yZWdpc3RlcihhcnJheSgkdGhpcywgJ2xvYWRDbGFzcycpLCB0cnVlLCAkcHJlcGVuZCk7CgogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+dmVuZG9yRGlyKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICgkcHJlcGVuZCkgewogICAgICAgICAgICBzZWxmOjokcmVnaXN0ZXJlZExvYWRlcnMgPSBhcnJheSgkdGhpcy0+dmVuZG9yRGlyID0+ICR0aGlzKSArIHNlbGY6OiRyZWdpc3RlcmVkTG9hZGVyczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1bnNldChzZWxmOjokcmVnaXN0ZXJlZExvYWRlcnNbJHRoaXMtPnZlbmRvckRpcl0pOwogICAgICAgICAgICBzZWxmOjokcmVnaXN0ZXJlZExvYWRlcnNbJHRoaXMtPnZlbmRvckRpcl0gPSAkdGhpczsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBVbnJlZ2lzdGVycyB0aGlzIGluc3RhbmNlIGFzIGFuIGF1dG9sb2FkZXIuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnJlZ2lzdGVyKCkKICAgIHsKICAgICAgICBzcGxfYXV0b2xvYWRfdW5yZWdpc3RlcihhcnJheSgkdGhpcywgJ2xvYWRDbGFzcycpKTsKCiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT52ZW5kb3JEaXIpIHsKICAgICAgICAgICAgdW5zZXQoc2VsZjo6JHJlZ2lzdGVyZWRMb2FkZXJzWyR0aGlzLT52ZW5kb3JEaXJdKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkcyB0aGUgZ2l2ZW4gY2xhc3Mgb3IgaW50ZXJmYWNlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3MKICAgICAqIEByZXR1cm4gdHJ1ZXxudWxsIFRydWUgaWYgbG9hZGVkLCBudWxsIG90aGVyd2lzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZENsYXNzKCRjbGFzcykKICAgIHsKICAgICAgICBpZiAoJGZpbGUgPSAkdGhpcy0+ZmluZEZpbGUoJGNsYXNzKSkgewogICAgICAgICAgICAkaW5jbHVkZUZpbGUgPSBzZWxmOjokaW5jbHVkZUZpbGU7CiAgICAgICAgICAgICRpbmNsdWRlRmlsZSgkZmlsZSk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8qKgogICAgICogRmluZHMgdGhlIHBhdGggdG8gdGhlIGZpbGUgd2hlcmUgdGhlIGNsYXNzIGlzIGRlZmluZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2xhc3MgVGhlIG5hbWUgb2YgdGhlIGNsYXNzCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIHBhdGggaWYgZm91bmQsIGZhbHNlIG90aGVyd2lzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmluZEZpbGUoJGNsYXNzKQogICAgewogICAgICAgIC8vIGNsYXNzIG1hcCBsb29rdXAKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmNsYXNzTWFwWyRjbGFzc10pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y2xhc3NNYXBbJGNsYXNzXTsKICAgICAgICB9CiAgICAgICAgaWYgKCR0aGlzLT5jbGFzc01hcEF1dGhvcml0YXRpdmUgfHwgaXNzZXQoJHRoaXMtPm1pc3NpbmdDbGFzc2VzWyRjbGFzc10pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5hcGN1UHJlZml4KSB7CiAgICAgICAgICAgICRmaWxlID0gYXBjdV9mZXRjaCgkdGhpcy0+YXBjdVByZWZpeC4kY2xhc3MsICRoaXQpOwogICAgICAgICAgICBpZiAoJGhpdCkgewogICAgICAgICAgICAgICAgcmV0dXJuICRmaWxlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkZmlsZSA9ICR0aGlzLT5maW5kRmlsZVdpdGhFeHRlbnNpb24oJGNsYXNzLCAnLnBocCcpOwoKICAgICAgICAvLyBTZWFyY2ggZm9yIEhhY2sgZmlsZXMgaWYgd2UgYXJlIHJ1bm5pbmcgb24gSEhWTQogICAgICAgIGlmIChmYWxzZSA9PT0gJGZpbGUgJiYgZGVmaW5lZCgnSEhWTV9WRVJTSU9OJykpIHsKICAgICAgICAgICAgJGZpbGUgPSAkdGhpcy0+ZmluZEZpbGVXaXRoRXh0ZW5zaW9uKCRjbGFzcywgJy5oaCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgIT09ICR0aGlzLT5hcGN1UHJlZml4KSB7CiAgICAgICAgICAgIGFwY3VfYWRkKCR0aGlzLT5hcGN1UHJlZml4LiRjbGFzcywgJGZpbGUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZhbHNlID09PSAkZmlsZSkgewogICAgICAgICAgICAvLyBSZW1lbWJlciB0aGF0IHRoaXMgY2xhc3MgZG9lcyBub3QgZXhpc3QuCiAgICAgICAgICAgICR0aGlzLT5taXNzaW5nQ2xhc3Nlc1skY2xhc3NdID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZmlsZTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIGxvYWRlcnMga2V5ZWQgYnkgdGhlaXIgY29ycmVzcG9uZGluZyB2ZW5kb3IgZGlyZWN0b3JpZXMuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheTxzdHJpbmcsIHNlbGY+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZExvYWRlcnMoKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjokcmVnaXN0ZXJlZExvYWRlcnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgICAgICAkY2xhc3MKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICAgICRleHQKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZmluZEZpbGVXaXRoRXh0ZW5zaW9uKCRjbGFzcywgJGV4dCkKICAgIHsKICAgICAgICAvLyBQU1ItNCBsb29rdXAKICAgICAgICAkbG9naWNhbFBhdGhQc3I0ID0gc3RydHIoJGNsYXNzLCAnXFwnLCBESVJFQ1RPUllfU0VQQVJBVE9SKSAuICRleHQ7CgogICAgICAgICRmaXJzdCA9ICRjbGFzc1swXTsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnByZWZpeExlbmd0aHNQc3I0WyRmaXJzdF0pKSB7CiAgICAgICAgICAgICRzdWJQYXRoID0gJGNsYXNzOwogICAgICAgICAgICB3aGlsZSAoZmFsc2UgIT09ICRsYXN0UG9zID0gc3RycnBvcygkc3ViUGF0aCwgJ1xcJykpIHsKICAgICAgICAgICAgICAgICRzdWJQYXRoID0gc3Vic3RyKCRzdWJQYXRoLCAwLCAkbGFzdFBvcyk7CiAgICAgICAgICAgICAgICAkc2VhcmNoID0gJHN1YlBhdGggLiAnXFwnOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5wcmVmaXhEaXJzUHNyNFskc2VhcmNoXSkpIHsKICAgICAgICAgICAgICAgICAgICAkcGF0aEVuZCA9IERJUkVDVE9SWV9TRVBBUkFUT1IgLiBzdWJzdHIoJGxvZ2ljYWxQYXRoUHNyNCwgJGxhc3RQb3MgKyAxKTsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHNlYXJjaF0gYXMgJGRpcikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUgPSAkZGlyIC4gJHBhdGhFbmQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFBTUi00IGZhbGxiYWNrIGRpcnMKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCBhcyAkZGlyKSB7CiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGxvZ2ljYWxQYXRoUHNyNCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUFNSLTAgbG9va3VwCiAgICAgICAgaWYgKGZhbHNlICE9PSAkcG9zID0gc3RycnBvcygkY2xhc3MsICdcXCcpKSB7CiAgICAgICAgICAgIC8vIG5hbWVzcGFjZWQgY2xhc3MgbmFtZQogICAgICAgICAgICAkbG9naWNhbFBhdGhQc3IwID0gc3Vic3RyKCRsb2dpY2FsUGF0aFBzcjQsIDAsICRwb3MgKyAxKQogICAgICAgICAgICAgICAgLiBzdHJ0cihzdWJzdHIoJGxvZ2ljYWxQYXRoUHNyNCwgJHBvcyArIDEpLCAnXycsIERJUkVDVE9SWV9TRVBBUkFUT1IpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFBFQVItbGlrZSBjbGFzcyBuYW1lCiAgICAgICAgICAgICRsb2dpY2FsUGF0aFBzcjAgPSBzdHJ0cigkY2xhc3MsICdfJywgRElSRUNUT1JZX1NFUEFSQVRPUikgLiAkZXh0OwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdIGFzICRwcmVmaXggPT4gJGRpcnMpIHsKICAgICAgICAgICAgICAgIGlmICgwID09PSBzdHJwb3MoJGNsYXNzLCAkcHJlZml4KSkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRkaXJzIGFzICRkaXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlID0gJGRpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkbG9naWNhbFBhdGhQc3IwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRmaWxlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBQU1ItMCBmYWxsYmFjayBkaXJzCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAgYXMgJGRpcikgewogICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUgPSAkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRsb2dpY2FsUGF0aFBzcjApKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFBTUi0wIGluY2x1ZGUgcGF0aHMuCiAgICAgICAgaWYgKCR0aGlzLT51c2VJbmNsdWRlUGF0aCAmJiAkZmlsZSA9IHN0cmVhbV9yZXNvbHZlX2luY2x1ZGVfcGF0aCgkbG9naWNhbFBhdGhQc3IwKSkgewogICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaW5pdGlhbGl6ZUluY2x1ZGVDbG9zdXJlKCkKICAgIHsKICAgICAgICBpZiAoc2VsZjo6JGluY2x1ZGVGaWxlICE9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFNjb3BlIGlzb2xhdGVkIGluY2x1ZGUuCiAgICAgICAgICoKICAgICAgICAgKiBQcmV2ZW50cyBhY2Nlc3MgdG8gJHRoaXMvc2VsZiBmcm9tIGluY2x1ZGVkIGZpbGVzLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtICBzdHJpbmcgJGZpbGUKICAgICAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAgICAgKi8KICAgICAgICBzZWxmOjokaW5jbHVkZUZpbGUgPSBcQ2xvc3VyZTo6YmluZChzdGF0aWMgZnVuY3Rpb24oJGZpbGUpIHsKICAgICAgICAgICAgaW5jbHVkZSAkZmlsZTsKICAgICAgICB9LCBudWxsLCBudWxsKTsKICAgIH0KfQoKQ29weXJpZ2h0IChjKSBOaWxzIEFkZXJtYW5uLCBKb3JkaSBCb2dnaWFubwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KCnNlcnZpY2VzOgoJLQoJCWNsYXNzOiBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcUGNyZVxQSFBTdGFuXFByZWdNYXRjaFBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24KCQl0YWdzOgoJCQktIHBocHN0YW4uc3RhdGljTWV0aG9kUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbgoKCS0KCQljbGFzczogX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFBjcmVcUEhQU3RhblxQcmVnTWF0Y2hUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi50eXBlU3BlY2lmaWVyLnN0YXRpY01ldGhvZFR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uCgoJLQoJCWNsYXNzOiBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcUGNyZVxQSFBTdGFuXFByZWdSZXBsYWNlQ2FsbGJhY2tDbG9zdXJlVHlwZUV4dGVuc2lvbgoJCXRhZ3M6CgkJCS0gcGhwc3Rhbi5zdGF0aWNNZXRob2RQYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvbgoKcnVsZXM6CgktIENvbXBvc2VyXFBjcmVcUEhQU3RhblxVbnNhZmVTdHJpY3RHcm91cHNDYWxsUnVsZQoJLSBDb21wb3NlclxQY3JlXFBIUFN0YW5cSW52YWxpZFJlZ2V4UGF0dGVyblJ1bGUKCkNvcHlyaWdodCAoQykgMjAyMSBDb21wb3NlcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgp0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgp0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwpzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNvbXBvc2VyL3BjcmUuCiAqCiAqIChjKSBDb21wb3NlciA8aHR0cHM6Ly9naXRodWIuY29tL2NvbXBvc2VyPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldwogKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCm5hbWVzcGFjZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcUGNyZTsKCmZpbmFsIGNsYXNzIFJlcGxhY2VSZXN1bHQKewogICAgLyoqCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkcmVzdWx0OwogICAgLyoqCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgMHxwb3NpdGl2ZS1pbnQKICAgICAqLwogICAgcHVibGljICRjb3VudDsKICAgIC8qKgogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICRtYXRjaGVkOwogICAgLyoqCiAgICAgKiBAcGFyYW0gMHxwb3NpdGl2ZS1pbnQgJGNvdW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGNvdW50LCBzdHJpbmcgJHJlc3VsdCkKICAgIHsKICAgICAgICAkdGhpcy0+Y291bnQgPSAkY291bnQ7CiAgICAgICAgJHRoaXMtPm1hdGNoZWQgPSAoYm9vbCkgJGNvdW50OwogICAgICAgICR0aGlzLT5yZXN1bHQgPSAkcmVzdWx0OwogICAgfQp9Cjw/cGhwCgovKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBjb21wb3Nlci9wY3JlLgogKgogKiAoYykgQ29tcG9zZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlcj4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcKICogdGhlIExJQ0VOU0UgZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwpuYW1lc3BhY2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFBjcmU7CgpmaW5hbCBjbGFzcyBNYXRjaEFsbFdpdGhPZmZzZXRzUmVzdWx0CnsKICAgIC8qKgogICAgICogQW4gYXJyYXkgb2YgbWF0Y2ggZ3JvdXAgPT4gbGlzdCBvZiBtYXRjaGVzLCBldmVyeSBtYXRjaCBiZWluZyBhIHBhaXIgb2Ygc3RyaW5nIG1hdGNoZWQgKyBvZmZzZXQgaW4gYnl0ZXMgKG9yIC0xIGlmIG5vIG1hdGNoKQogICAgICoKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBhcnJheTxpbnR8c3RyaW5nLCBsaXN0PGFycmF5e3N0cmluZ3xudWxsLCBpbnR9Pj4KICAgICAqIEBwaHBzdGFuLXZhciBhcnJheTxpbnR8c3RyaW5nLCBsaXN0PGFycmF5e3N0cmluZ3xudWxsLCBpbnQ8LTEsIG1heD59Pj4KICAgICAqLwogICAgcHVibGljICRtYXRjaGVzOwogICAgLyoqCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgMHxwb3NpdGl2ZS1pbnQKICAgICAqLwogICAgcHVibGljICRjb3VudDsKICAgIC8qKgogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICRtYXRjaGVkOwogICAgLyoqCiAgICAgKiBAcGFyYW0gMHxwb3NpdGl2ZS1pbnQgJGNvdW50CiAgICAgKiBAcGFyYW0gYXJyYXk8aW50fHN0cmluZywgbGlzdDxhcnJheXtzdHJpbmd8bnVsbCwgaW50fT4+ICRtYXRjaGVzCiAgICAgKiBAcGhwc3Rhbi1wYXJhbSBhcnJheTxpbnR8c3RyaW5nLCBsaXN0PGFycmF5e3N0cmluZ3xudWxsLCBpbnQ8LTEsIG1heD59Pj4gJG1hdGNoZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkY291bnQsIGFycmF5ICRtYXRjaGVzKQogICAgewogICAgICAgICR0aGlzLT5tYXRjaGVzID0gJG1hdGNoZXM7CiAgICAgICAgJHRoaXMtPm1hdGNoZWQgPSAoYm9vbCkgJGNvdW50OwogICAgICAgICR0aGlzLT5jb3VudCA9ICRjb3VudDsKICAgIH0KfQo8P3BocAoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgY29tcG9zZXIvcGNyZS4KICoKICogKGMpIENvbXBvc2VyIDxodHRwczovL2dpdGh1Yi5jb20vY29tcG9zZXI+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3CiAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxQY3JlOwoKZmluYWwgY2xhc3MgTWF0Y2hBbGxTdHJpY3RHcm91cHNSZXN1bHQKewogICAgLyoqCiAgICAgKiBBbiBhcnJheSBvZiBtYXRjaCBncm91cCA9PiBsaXN0IG9mIG1hdGNoZWQgc3RyaW5ncwogICAgICoKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBhcnJheTxpbnR8c3RyaW5nLCBsaXN0PHN0cmluZz4+CiAgICAgKi8KICAgIHB1YmxpYyAkbWF0Y2hlczsKICAgIC8qKgogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIDB8cG9zaXRpdmUtaW50CiAgICAgKi8KICAgIHB1YmxpYyAkY291bnQ7CiAgICAvKioKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHB1YmxpYyAkbWF0Y2hlZDsKICAgIC8qKgogICAgICogQHBhcmFtIDB8cG9zaXRpdmUtaW50ICRjb3VudAogICAgICogQHBhcmFtIGFycmF5PGxpc3Q8c3RyaW5nPj4gJG1hdGNoZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkY291bnQsIGFycmF5ICRtYXRjaGVzKQogICAgewogICAgICAgICR0aGlzLT5tYXRjaGVzID0gJG1hdGNoZXM7CiAgICAgICAgJHRoaXMtPm1hdGNoZWQgPSAoYm9vbCkgJGNvdW50OwogICAgICAgICR0aGlzLT5jb3VudCA9ICRjb3VudDsKICAgIH0KfQo8P3BocAoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgY29tcG9zZXIvcGNyZS4KICoKICogKGMpIENvbXBvc2VyIDxodHRwczovL2dpdGh1Yi5jb20vY29tcG9zZXI+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3CiAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxQY3JlOwoKZmluYWwgY2xhc3MgTWF0Y2hTdHJpY3RHcm91cHNSZXN1bHQKewogICAgLyoqCiAgICAgKiBBbiBhcnJheSBvZiBtYXRjaCBncm91cCA9PiBzdHJpbmcgbWF0Y2hlZAogICAgICoKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBhcnJheTxpbnR8c3RyaW5nLCBzdHJpbmc+CiAgICAgKi8KICAgIHB1YmxpYyAkbWF0Y2hlczsKICAgIC8qKgogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICRtYXRjaGVkOwogICAgLyoqCiAgICAgKiBAcGFyYW0gMHxwb3NpdGl2ZS1pbnQgJGNvdW50CiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nPiAkbWF0Y2hlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRjb3VudCwgYXJyYXkgJG1hdGNoZXMpCiAgICB7CiAgICAgICAgJHRoaXMtPm1hdGNoZXMgPSAkbWF0Y2hlczsKICAgICAgICAkdGhpcy0+bWF0Y2hlZCA9IChib29sKSAkY291bnQ7CiAgICB9Cn0KPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNvbXBvc2VyL3BjcmUuCiAqCiAqIChjKSBDb21wb3NlciA8aHR0cHM6Ly9naXRodWIuY29tL2NvbXBvc2VyPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldwogKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCm5hbWVzcGFjZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcUGNyZTsKCmZpbmFsIGNsYXNzIE1hdGNoV2l0aE9mZnNldHNSZXN1bHQKewogICAgLyoqCiAgICAgKiBBbiBhcnJheSBvZiBtYXRjaCBncm91cCA9PiBwYWlyIG9mIHN0cmluZyBtYXRjaGVkICsgb2Zmc2V0IGluIGJ5dGVzIChvciAtMSBpZiBubyBtYXRjaCkKICAgICAqCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgYXJyYXk8aW50fHN0cmluZywgYXJyYXl7c3RyaW5nfG51bGwsIGludH0+CiAgICAgKiBAcGhwc3Rhbi12YXIgYXJyYXk8aW50fHN0cmluZywgYXJyYXl7c3RyaW5nfG51bGwsIGludDwtMSwgbWF4Pn0+CiAgICAgKi8KICAgIHB1YmxpYyAkbWF0Y2hlczsKICAgIC8qKgogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICRtYXRjaGVkOwogICAgLyoqCiAgICAgKiBAcGFyYW0gMHxwb3NpdGl2ZS1pbnQgJGNvdW50CiAgICAgKiBAcGFyYW0gYXJyYXk8YXJyYXl7c3RyaW5nfG51bGwsIGludH0+ICRtYXRjaGVzCiAgICAgKiBAcGhwc3Rhbi1wYXJhbSBhcnJheTxpbnR8c3RyaW5nLCBhcnJheXtzdHJpbmd8bnVsbCwgaW50PC0xLCBtYXg+fT4gJG1hdGNoZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkY291bnQsIGFycmF5ICRtYXRjaGVzKQogICAgewogICAgICAgICR0aGlzLT5tYXRjaGVzID0gJG1hdGNoZXM7CiAgICAgICAgJHRoaXMtPm1hdGNoZWQgPSAoYm9vbCkgJGNvdW50OwogICAgfQp9Cjw/cGhwCgovKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBjb21wb3Nlci9wY3JlLgogKgogKiAoYykgQ29tcG9zZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlcj4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcKICogdGhlIExJQ0VOU0UgZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwpuYW1lc3BhY2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFBjcmU7CgpjbGFzcyBQY3JlRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24KewogICAgLyoqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkZnVuY3Rpb24KICAgICAqIEBwYXJhbSAgc3RyaW5nfHN0cmluZ1tdICRwYXR0ZXJuCiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tRnVuY3Rpb24oJGZ1bmN0aW9uLCAkcGF0dGVybikKICAgIHsKICAgICAgICAkY29kZSA9IFxwcmVnX2xhc3RfZXJyb3IoKTsKICAgICAgICBpZiAoXGlzX2FycmF5KCRwYXR0ZXJuKSkgewogICAgICAgICAgICAkcGF0dGVybiA9IFxpbXBsb2RlKCcsICcsICRwYXR0ZXJuKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBQY3JlRXhjZXB0aW9uKCRmdW5jdGlvbiAuICcoKTogZmFpbGVkIGV4ZWN1dGluZyAiJyAuICRwYXR0ZXJuIC4gJyI6ICcgLiBzZWxmOjpwY3JlTGFzdEVycm9yTWVzc2FnZSgkY29kZSksICRjb2RlKTsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtICBpbnQgJGNvZGUKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHBjcmVMYXN0RXJyb3JNZXNzYWdlKCRjb2RlKQogICAgewogICAgICAgIGlmIChcZnVuY3Rpb25fZXhpc3RzKCdwcmVnX2xhc3RfZXJyb3JfbXNnJykpIHsKICAgICAgICAgICAgcmV0dXJuIFxwcmVnX2xhc3RfZXJyb3JfbXNnKCk7CiAgICAgICAgfQogICAgICAgIC8vIG9sZGVyIHBocCB2ZXJzaW9ucyBkaWQgbm90IHNldCB0aGUgY29kZSBwcm9wZXJseSBpbiBhbGwgY2FzZXMKICAgICAgICBpZiAoXFBIUF9WRVJTSU9OX0lEIDwgNzAyMDEgJiYgJGNvZGUgPT09IDApIHsKICAgICAgICAgICAgcmV0dXJuICdVTkRFRklORURfRVJST1InOwogICAgICAgIH0KICAgICAgICAkY29uc3RhbnRzID0gXGdldF9kZWZpbmVkX2NvbnN0YW50cyhcdHJ1ZSk7CiAgICAgICAgaWYgKCFpc3NldCgkY29uc3RhbnRzWydwY3JlJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAnVU5ERUZJTkVEX0VSUk9SJzsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoJGNvbnN0YW50c1sncGNyZSddIGFzICRjb25zdCA9PiAkdmFsKSB7CiAgICAgICAgICAgIGlmICgkdmFsID09PSAkY29kZSAmJiBcc3Vic3RyKCRjb25zdCwgLTYpID09PSAnX0VSUk9SJykgewogICAgICAgICAgICAgICAgcmV0dXJuICRjb25zdDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJ1VOREVGSU5FRF9FUlJPUic7CiAgICB9Cn0KPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNvbXBvc2VyL3BjcmUuCiAqCiAqIChjKSBDb21wb3NlciA8aHR0cHM6Ly9naXRodWIuY29tL2NvbXBvc2VyPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldwogKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCm5hbWVzcGFjZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcUGNyZTsKCmZpbmFsIGNsYXNzIE1hdGNoQWxsUmVzdWx0CnsKICAgIC8qKgogICAgICogQW4gYXJyYXkgb2YgbWF0Y2ggZ3JvdXAgPT4gbGlzdCBvZiBtYXRjaGVkIHN0cmluZ3MKICAgICAqCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgYXJyYXk8aW50fHN0cmluZywgbGlzdDxzdHJpbmd8bnVsbD4+CiAgICAgKi8KICAgIHB1YmxpYyAkbWF0Y2hlczsKICAgIC8qKgogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIDB8cG9zaXRpdmUtaW50CiAgICAgKi8KICAgIHB1YmxpYyAkY291bnQ7CiAgICAvKioKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHB1YmxpYyAkbWF0Y2hlZDsKICAgIC8qKgogICAgICogQHBhcmFtIDB8cG9zaXRpdmUtaW50ICRjb3VudAogICAgICogQHBhcmFtIGFycmF5PGludHxzdHJpbmcsIGxpc3Q8c3RyaW5nfG51bGw+PiAkbWF0Y2hlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoaW50ICRjb3VudCwgYXJyYXkgJG1hdGNoZXMpCiAgICB7CiAgICAgICAgJHRoaXMtPm1hdGNoZXMgPSAkbWF0Y2hlczsKICAgICAgICAkdGhpcy0+bWF0Y2hlZCA9IChib29sKSAkY291bnQ7CiAgICAgICAgJHRoaXMtPmNvdW50ID0gJGNvdW50OwogICAgfQp9Cjw/cGhwCgpkZWNsYXJlIChzdHJpY3RfdHlwZXM9MSk7Cm5hbWVzcGFjZSBDb21wb3NlclxQY3JlXFBIUFN0YW47Cgp1c2UgUEhQU3RhblxBbmFseXNlclxTY29wZTsKdXNlIFBIUFN0YW5cVHlwZVxBcnJheVR5cGU7CnVzZSBQSFBTdGFuXFR5cGVcQ29uc3RhbnRcQ29uc3RhbnRBcnJheVR5cGU7CnVzZSBQSFBTdGFuXFR5cGVcQ29uc3RhbnRcQ29uc3RhbnRJbnRlZ2VyVHlwZTsKdXNlIFBIUFN0YW5cVHlwZVxJbnRlcnNlY3Rpb25UeXBlOwp1c2UgUEhQU3RhblxUeXBlXFR5cGVDb21iaW5hdG9yOwp1c2UgUEhQU3RhblxUeXBlXFR5cGU7CnVzZSBQaHBQYXJzZXJcTm9kZVxBcmc7CnVzZSBQSFBTdGFuXFR5cGVcUGhwXFJlZ2V4QXJyYXlTaGFwZU1hdGNoZXI7CnVzZSBQSFBTdGFuXFR5cGVcVHlwZVRyYXZlcnNlcjsKdXNlIFBIUFN0YW5cVHlwZVxVbmlvblR5cGU7CmZpbmFsIGNsYXNzIFByZWdNYXRjaEZsYWdzCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VHlwZSg/QXJnICRmbGFnc0FyZywgU2NvcGUgJHNjb3BlKSA6ID9UeXBlCiAgICB7CiAgICAgICAgaWYgKCRmbGFnc0FyZyA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50SW50ZWdlclR5cGUoXFBSRUdfVU5NQVRDSEVEX0FTX05VTEwpOwogICAgICAgIH0KICAgICAgICAkZmxhZ3NUeXBlID0gJHNjb3BlLT5nZXRUeXBlKCRmbGFnc0FyZy0+dmFsdWUpOwogICAgICAgICRjb25zdGFudFNjYWxhcnMgPSAkZmxhZ3NUeXBlLT5nZXRDb25zdGFudFNjYWxhclZhbHVlcygpOwogICAgICAgIGlmICgkY29uc3RhbnRTY2FsYXJzID09PSBbXSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgJGludGVybmFsRmxhZ3NUeXBlcyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRmbGFnc1R5cGUtPmdldENvbnN0YW50U2NhbGFyVmFsdWVzKCkgYXMgJGNvbnN0YW50U2NhbGFyVmFsdWUpIHsKICAgICAgICAgICAgaWYgKCFcaXNfaW50KCRjb25zdGFudFNjYWxhclZhbHVlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGludGVybmFsRmxhZ3NUeXBlc1tdID0gbmV3IENvbnN0YW50SW50ZWdlclR5cGUoJGNvbnN0YW50U2NhbGFyVmFsdWUgfCBcUFJFR19VTk1BVENIRURfQVNfTlVMTCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBUeXBlQ29tYmluYXRvcjo6dW5pb24oLi4uJGludGVybmFsRmxhZ3NUeXBlcyk7CiAgICB9CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbW92ZU51bGxGcm9tTWF0Y2hlcyhUeXBlICRtYXRjaGVzVHlwZSkgOiBUeXBlCiAgICB7CiAgICAgICAgcmV0dXJuIFR5cGVUcmF2ZXJzZXI6Om1hcCgkbWF0Y2hlc1R5cGUsIHN0YXRpYyBmdW5jdGlvbiAoVHlwZSAkdHlwZSwgY2FsbGFibGUgJHRyYXZlcnNlKSA6IFR5cGUgewogICAgICAgICAgICBpZiAoJHR5cGUgaW5zdGFuY2VvZiBVbmlvblR5cGUgfHwgJHR5cGUgaW5zdGFuY2VvZiBJbnRlcnNlY3Rpb25UeXBlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHRyYXZlcnNlKCR0eXBlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJHR5cGUgaW5zdGFuY2VvZiBDb25zdGFudEFycmF5VHlwZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudEFycmF5VHlwZSgkdHlwZS0+Z2V0S2V5VHlwZXMoKSwgXGFycmF5X21hcChzdGF0aWMgZnVuY3Rpb24gKFR5cGUgJHZhbHVlVHlwZSkgdXNlKCR0cmF2ZXJzZSkgOiBUeXBlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRyYXZlcnNlKCR2YWx1ZVR5cGUpOwogICAgICAgICAgICAgICAgfSwgJHR5cGUtPmdldFZhbHVlVHlwZXMoKSksICR0eXBlLT5nZXROZXh0QXV0b0luZGV4ZXMoKSwgW10sICR0eXBlLT5pc0xpc3QoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCR0eXBlIGluc3RhbmNlb2YgQXJyYXlUeXBlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5VHlwZSgkdHlwZS0+Z2V0S2V5VHlwZSgpLCAkdHJhdmVyc2UoJHR5cGUtPmdldEl0ZW1UeXBlKCkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gVHlwZUNvbWJpbmF0b3I6OnJlbW92ZU51bGwoJHR5cGUpOwogICAgICAgIH0pOwogICAgfQp9Cjw/cGhwCgpkZWNsYXJlIChzdHJpY3RfdHlwZXM9MSk7Cm5hbWVzcGFjZSBDb21wb3NlclxQY3JlXFBIUFN0YW47Cgp1c2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFBjcmVcUHJlZzsKdXNlIFBocFBhcnNlclxOb2RlXEV4cHJcU3RhdGljQ2FsbDsKdXNlIFBIUFN0YW5cQW5hbHlzZXJcU2NvcGU7CnVzZSBQSFBTdGFuXFJlZmxlY3Rpb25cTWV0aG9kUmVmbGVjdGlvbjsKdXNlIFBIUFN0YW5cUmVmbGVjdGlvblxQYXJhbWV0ZXJSZWZsZWN0aW9uOwp1c2UgUEhQU3RhblxUcmluYXJ5TG9naWM7CnVzZSBQSFBTdGFuXFR5cGVcUGhwXFJlZ2V4QXJyYXlTaGFwZU1hdGNoZXI7CnVzZSBQSFBTdGFuXFR5cGVcU3RhdGljTWV0aG9kUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbjsKdXNlIFBIUFN0YW5cVHlwZVxUeXBlOwpmaW5hbCBjbGFzcyBQcmVnTWF0Y2hQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uIGltcGxlbWVudHMgU3RhdGljTWV0aG9kUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbgp7CiAgICAvKioKICAgICAqIEB2YXIgUmVnZXhBcnJheVNoYXBlTWF0Y2hlcgogICAgICovCiAgICBwcml2YXRlICRyZWdleFNoYXBlTWF0Y2hlcjsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChSZWdleEFycmF5U2hhcGVNYXRjaGVyICRyZWdleFNoYXBlTWF0Y2hlcikKICAgIHsKICAgICAgICAkdGhpcy0+cmVnZXhTaGFwZU1hdGNoZXIgPSAkcmVnZXhTaGFwZU1hdGNoZXI7CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTdGF0aWNNZXRob2RTdXBwb3J0ZWQoTWV0aG9kUmVmbGVjdGlvbiAkbWV0aG9kUmVmbGVjdGlvbiwgUGFyYW1ldGVyUmVmbGVjdGlvbiAkcGFyYW1ldGVyKSA6IGJvb2wKICAgIHsKICAgICAgICByZXR1cm4gJG1ldGhvZFJlZmxlY3Rpb24tPmdldERlY2xhcmluZ0NsYXNzKCktPmdldE5hbWUoKSA9PT0gUHJlZzo6Y2xhc3MgJiYgXGluX2FycmF5KCRtZXRob2RSZWZsZWN0aW9uLT5nZXROYW1lKCksIFsnbWF0Y2gnLCAnaXNNYXRjaCcsICdtYXRjaFN0cmljdEdyb3VwcycsICdpc01hdGNoU3RyaWN0R3JvdXBzJywgJ21hdGNoQWxsJywgJ2lzTWF0Y2hBbGwnLCAnbWF0Y2hBbGxTdHJpY3RHcm91cHMnLCAnaXNNYXRjaEFsbFN0cmljdEdyb3VwcyddLCBcdHJ1ZSkgJiYgJHBhcmFtZXRlci0+Z2V0TmFtZSgpID09PSAnbWF0Y2hlcyc7CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyYW1ldGVyT3V0VHlwZUZyb21TdGF0aWNNZXRob2RDYWxsKE1ldGhvZFJlZmxlY3Rpb24gJG1ldGhvZFJlZmxlY3Rpb24sIFN0YXRpY0NhbGwgJG1ldGhvZENhbGwsIFBhcmFtZXRlclJlZmxlY3Rpb24gJHBhcmFtZXRlciwgU2NvcGUgJHNjb3BlKSA6ID9UeXBlCiAgICB7CiAgICAgICAgJGFyZ3MgPSAkbWV0aG9kQ2FsbC0+Z2V0QXJncygpOwogICAgICAgICRwYXR0ZXJuQXJnID0gJGFyZ3NbMF0gPz8gbnVsbDsKICAgICAgICAkbWF0Y2hlc0FyZyA9ICRhcmdzWzJdID8/IG51bGw7CiAgICAgICAgJGZsYWdzQXJnID0gJGFyZ3NbM10gPz8gbnVsbDsKICAgICAgICBpZiAoJHBhdHRlcm5BcmcgPT09IG51bGwgfHwgJG1hdGNoZXNBcmcgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgICRmbGFnc1R5cGUgPSBcQ29tcG9zZXJcUGNyZVxQSFBTdGFuXFByZWdNYXRjaEZsYWdzOjpnZXRUeXBlKCRmbGFnc0FyZywgJHNjb3BlKTsKICAgICAgICBpZiAoJGZsYWdzVHlwZSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKFxzdHJpcG9zKCRtZXRob2RSZWZsZWN0aW9uLT5nZXROYW1lKCksICdtYXRjaEFsbCcpICE9PSBcZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZWdleFNoYXBlTWF0Y2hlci0+bWF0Y2hBbGxFeHByKCRwYXR0ZXJuQXJnLT52YWx1ZSwgJGZsYWdzVHlwZSwgVHJpbmFyeUxvZ2ljOjpjcmVhdGVNYXliZSgpLCAkc2NvcGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRoaXMtPnJlZ2V4U2hhcGVNYXRjaGVyLT5tYXRjaEV4cHIoJHBhdHRlcm5BcmctPnZhbHVlLCAkZmxhZ3NUeXBlLCBUcmluYXJ5TG9naWM6OmNyZWF0ZU1heWJlKCksICRzY29wZSk7CiAgICB9Cn0KPD9waHAKCmRlY2xhcmUgKHN0cmljdF90eXBlcz0xKTsKbmFtZXNwYWNlIENvbXBvc2VyXFBjcmVcUEhQU3RhbjsKCnVzZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcUGNyZVxQcmVnOwp1c2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFBjcmVcUmVnZXg7CnVzZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcUGNyZVxQY3JlRXhjZXB0aW9uOwp1c2UgX1BIUFN0YW5fOGM2NmQ4MjU1XE5ldHRlXFV0aWxzXFJlZ2V4cEV4Y2VwdGlvbjsKdXNlIF9QSFBTdGFuXzhjNjZkODI1NVxOZXR0ZVxVdGlsc1xTdHJpbmdzOwp1c2UgUGhwUGFyc2VyXE5vZGU7CnVzZSBQaHBQYXJzZXJcTm9kZVxFeHByXFN0YXRpY0NhbGw7CnVzZSBQaHBQYXJzZXJcTm9kZVxOYW1lXEZ1bGx5UXVhbGlmaWVkOwp1c2UgUEhQU3RhblxBbmFseXNlclxTY29wZTsKdXNlIFBIUFN0YW5cUnVsZXNcUnVsZTsKdXNlIFBIUFN0YW5cUnVsZXNcUnVsZUVycm9yQnVpbGRlcjsKdXNlIGZ1bmN0aW9uIGluX2FycmF5Owp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKLyoqCiAqIENvcHkgb2YgUEhQU3RhbidzIFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVyblJ1bGUKICoKICogQGltcGxlbWVudHMgUnVsZTxTdGF0aWNDYWxsPgogKi8KY2xhc3MgSW52YWxpZFJlZ2V4UGF0dGVyblJ1bGUgaW1wbGVtZW50cyBSdWxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlVHlwZSgpIDogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuIFN0YXRpY0NhbGw6OmNsYXNzOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIHByb2Nlc3NOb2RlKE5vZGUgJG5vZGUsIFNjb3BlICRzY29wZSkgOiBhcnJheQogICAgewogICAgICAgICRwYXR0ZXJucyA9ICR0aGlzLT5leHRyYWN0UGF0dGVybnMoJG5vZGUsICRzY29wZSk7CiAgICAgICAgJGVycm9ycyA9IFtdOwogICAgICAgIGZvcmVhY2ggKCRwYXR0ZXJucyBhcyAkcGF0dGVybikgewogICAgICAgICAgICAkZXJyb3JNZXNzYWdlID0gJHRoaXMtPnZhbGlkYXRlUGF0dGVybigkcGF0dGVybik7CiAgICAgICAgICAgIGlmICgkZXJyb3JNZXNzYWdlID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZXJyb3JzW10gPSBSdWxlRXJyb3JCdWlsZGVyOjptZXNzYWdlKHNwcmludGYoJ1JlZ2V4IHBhdHRlcm4gaXMgaW52YWxpZDogJXMnLCAkZXJyb3JNZXNzYWdlKSktPmlkZW50aWZpZXIoJ3JlZ2V4cC5wYXR0ZXJuJyktPmJ1aWxkKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZXJyb3JzOwogICAgfQogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZXh0cmFjdFBhdHRlcm5zKFN0YXRpY0NhbGwgJG5vZGUsIFNjb3BlICRzY29wZSkgOiBhcnJheQogICAgewogICAgICAgIGlmICghJG5vZGUtPmNsYXNzIGluc3RhbmNlb2YgRnVsbHlRdWFsaWZpZWQpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgICAgICAkaXNSZWdleCA9ICRub2RlLT5jbGFzcy0+dG9TdHJpbmcoKSA9PT0gUmVnZXg6OmNsYXNzOwogICAgICAgICRpc1ByZWcgPSAkbm9kZS0+Y2xhc3MtPnRvU3RyaW5nKCkgPT09IFByZWc6OmNsYXNzOwogICAgICAgIGlmICghJGlzUmVnZXggJiYgISRpc1ByZWcpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgICAgICBpZiAoISRub2RlLT5uYW1lIGluc3RhbmNlb2YgTm9kZVxJZGVudGlmaWVyIHx8ICFQcmVnOjppc01hdGNoKCd7XihtYXRjaHxpc01hdGNofGdyZXB8cmVwbGFjZXxzcGxpdCl9JywgJG5vZGUtPm5hbWUtPm5hbWUpKSB7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CiAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICRub2RlLT5uYW1lLT5uYW1lOwogICAgICAgIGlmICghaXNzZXQoJG5vZGUtPmdldEFyZ3MoKVswXSkpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgICAgICAkcGF0dGVybk5vZGUgPSAkbm9kZS0+Z2V0QXJncygpWzBdLT52YWx1ZTsKICAgICAgICAkcGF0dGVyblR5cGUgPSAkc2NvcGUtPmdldFR5cGUoJHBhdHRlcm5Ob2RlKTsKICAgICAgICAkcGF0dGVyblN0cmluZ3MgPSBbXTsKICAgICAgICBmb3JlYWNoICgkcGF0dGVyblR5cGUtPmdldENvbnN0YW50U3RyaW5ncygpIGFzICRjb25zdGFudFN0cmluZ1R5cGUpIHsKICAgICAgICAgICAgaWYgKCRmdW5jdGlvbk5hbWUgPT09ICdyZXBsYWNlQ2FsbGJhY2tBcnJheScpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRwYXR0ZXJuU3RyaW5nc1tdID0gJGNvbnN0YW50U3RyaW5nVHlwZS0+Z2V0VmFsdWUoKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoJHBhdHRlcm5UeXBlLT5nZXRDb25zdGFudEFycmF5cygpIGFzICRjb25zdGFudEFycmF5VHlwZSkgewogICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGZ1bmN0aW9uTmFtZSwgWydyZXBsYWNlJywgJ3JlcGxhY2VDYWxsYmFjayddLCBcdHJ1ZSkpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb25zdGFudEFycmF5VHlwZS0+Z2V0VmFsdWVUeXBlcygpIGFzICRhcnJheUtleVR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkYXJyYXlLZXlUeXBlLT5nZXRDb25zdGFudFN0cmluZ3MoKSBhcyAkY29uc3RhbnRTdHJpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhdHRlcm5TdHJpbmdzW10gPSAkY29uc3RhbnRTdHJpbmctPmdldFZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkZnVuY3Rpb25OYW1lICE9PSAncmVwbGFjZUNhbGxiYWNrQXJyYXknKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3JlYWNoICgkY29uc3RhbnRBcnJheVR5cGUtPmdldEtleVR5cGVzKCkgYXMgJGFycmF5S2V5VHlwZSkgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGFycmF5S2V5VHlwZS0+Z2V0Q29uc3RhbnRTdHJpbmdzKCkgYXMgJGNvbnN0YW50U3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhdHRlcm5TdHJpbmdzW10gPSAkY29uc3RhbnRTdHJpbmctPmdldFZhbHVlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRwYXR0ZXJuU3RyaW5nczsKICAgIH0KICAgIHByaXZhdGUgZnVuY3Rpb24gdmFsaWRhdGVQYXR0ZXJuKHN0cmluZyAkcGF0dGVybikgOiA/c3RyaW5nCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJG1zZyA9IG51bGw7CiAgICAgICAgICAgICRwcmV2ID0gXHNldF9lcnJvcl9oYW5kbGVyKGZ1bmN0aW9uIChpbnQgJHNldmVyaXR5LCBzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAkZmlsZSkgdXNlKCYkbXNnKSA6IGJvb2wgewogICAgICAgICAgICAgICAgJG1zZyA9IFxwcmVnX3JlcGxhY2UoIiNecHJlZ19tYXRjaChfYWxsKT9cXCguKj9cXCk6ICMiLCAnJywgJG1lc3NhZ2UpOwogICAgICAgICAgICAgICAgcmV0dXJuIFx0cnVlOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKCRwYXR0ZXJuID09PSAnJykgewogICAgICAgICAgICAgICAgcmV0dXJuICdFbXB0eSBzdHJpbmcgaXMgbm90IGEgdmFsaWQgcmVndWxhciBleHByZXNzaW9uJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBQcmVnOjptYXRjaCgkcGF0dGVybiwgJycpOwogICAgICAgICAgICBpZiAoJG1zZyAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmV0dXJuICRtc2c7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChQY3JlRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIGlmICgkZS0+Z2V0Q29kZSgpID09PSBcUFJFR19JTlRFUk5BTF9FUlJPUiAmJiAkbXNnICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJG1zZzsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gXHByZWdfcmVwbGFjZSgney4qPyBmYWlsZWQgZXhlY3V0aW5nICIuKiI6IH0nLCAnJywgJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgXHJlc3RvcmVfZXJyb3JfaGFuZGxlcigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo8P3BocAoKZGVjbGFyZSAoc3RyaWN0X3R5cGVzPTEpOwpuYW1lc3BhY2UgQ29tcG9zZXJcUGNyZVxQSFBTdGFuOwoKdXNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxQY3JlXFByZWc7CnVzZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcUGNyZVxSZWdleDsKdXNlIFBocFBhcnNlclxOb2RlOwp1c2UgUGhwUGFyc2VyXE5vZGVcRXhwclxTdGF0aWNDYWxsOwp1c2UgUGhwUGFyc2VyXE5vZGVcTmFtZVxGdWxseVF1YWxpZmllZDsKdXNlIFBIUFN0YW5cQW5hbHlzZXJcU2NvcGU7CnVzZSBQSFBTdGFuXEFuYWx5c2VyXFNwZWNpZmllZFR5cGVzOwp1c2UgUEhQU3RhblxSdWxlc1xSdWxlOwp1c2UgUEhQU3RhblxSdWxlc1xSdWxlRXJyb3JCdWlsZGVyOwp1c2UgUEhQU3RhblxUcmluYXJ5TG9naWM7CnVzZSBQSFBTdGFuXFR5cGVcT2JqZWN0VHlwZTsKdXNlIFBIUFN0YW5cVHlwZVxUeXBlOwp1c2UgUEhQU3RhblxUeXBlXFR5cGVDb21iaW5hdG9yOwp1c2UgUEhQU3RhblxUeXBlXFBocFxSZWdleEFycmF5U2hhcGVNYXRjaGVyOwp1c2UgZnVuY3Rpb24gc3ByaW50ZjsKLyoqCiAqIEBpbXBsZW1lbnRzIFJ1bGU8U3RhdGljQ2FsbD4KICovCmZpbmFsIGNsYXNzIFVuc2FmZVN0cmljdEdyb3Vwc0NhbGxSdWxlIGltcGxlbWVudHMgUnVsZQp7CiAgICAvKioKICAgICAqIEB2YXIgUmVnZXhBcnJheVNoYXBlTWF0Y2hlcgogICAgICovCiAgICBwcml2YXRlICRyZWdleFNoYXBlTWF0Y2hlcjsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChSZWdleEFycmF5U2hhcGVNYXRjaGVyICRyZWdleFNoYXBlTWF0Y2hlcikKICAgIHsKICAgICAgICAkdGhpcy0+cmVnZXhTaGFwZU1hdGNoZXIgPSAkcmVnZXhTaGFwZU1hdGNoZXI7CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZVR5cGUoKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBTdGF0aWNDYWxsOjpjbGFzczsKICAgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzTm9kZShOb2RlICRub2RlLCBTY29wZSAkc2NvcGUpIDogYXJyYXkKICAgIHsKICAgICAgICBpZiAoISRub2RlLT5jbGFzcyBpbnN0YW5jZW9mIEZ1bGx5UXVhbGlmaWVkKSB7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CiAgICAgICAgJGlzUmVnZXggPSAkbm9kZS0+Y2xhc3MtPnRvU3RyaW5nKCkgPT09IFJlZ2V4OjpjbGFzczsKICAgICAgICAkaXNQcmVnID0gJG5vZGUtPmNsYXNzLT50b1N0cmluZygpID09PSBQcmVnOjpjbGFzczsKICAgICAgICBpZiAoISRpc1JlZ2V4ICYmICEkaXNQcmVnKSB7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CiAgICAgICAgaWYgKCEkbm9kZS0+bmFtZSBpbnN0YW5jZW9mIE5vZGVcSWRlbnRpZmllciB8fCAhXGluX2FycmF5KCRub2RlLT5uYW1lLT5uYW1lLCBbJ21hdGNoU3RyaWN0R3JvdXBzJywgJ2lzTWF0Y2hTdHJpY3RHcm91cHMnLCAnbWF0Y2hBbGxTdHJpY3RHcm91cHMnLCAnaXNNYXRjaEFsbFN0cmljdEdyb3VwcyddLCBcdHJ1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgICAgICAkYXJncyA9ICRub2RlLT5nZXRBcmdzKCk7CiAgICAgICAgaWYgKCFpc3NldCgkYXJnc1swXSkpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgICAgICAkcGF0dGVybkFyZyA9ICRhcmdzWzBdID8/IG51bGw7CiAgICAgICAgaWYgKCRpc1ByZWcpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkYXJnc1syXSkpIHsKICAgICAgICAgICAgICAgIC8vIG5vIG1hdGNoZXMgc2V0LCBza2lwIGFzIHRoZSBtYXRjaGVzIHdvbid0IGJlIHVzZWQgYW55d2F5CiAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGZsYWdzQXJnID0gJGFyZ3NbM10gPz8gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZmxhZ3NBcmcgPSAkYXJnc1syXSA/PyBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoJHBhdHRlcm5BcmcgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgICAgICAkZmxhZ3NUeXBlID0gXENvbXBvc2VyXFBjcmVcUEhQU3RhblxQcmVnTWF0Y2hGbGFnczo6Z2V0VHlwZSgkZmxhZ3NBcmcsICRzY29wZSk7CiAgICAgICAgaWYgKCRmbGFnc1R5cGUgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgICAgICAkbWF0Y2hlZFR5cGUgPSAkdGhpcy0+cmVnZXhTaGFwZU1hdGNoZXItPm1hdGNoRXhwcigkcGF0dGVybkFyZy0+dmFsdWUsICRmbGFnc1R5cGUsIFRyaW5hcnlMb2dpYzo6Y3JlYXRlWWVzKCksICRzY29wZSk7CiAgICAgICAgaWYgKCRtYXRjaGVkVHlwZSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gW1J1bGVFcnJvckJ1aWxkZXI6Om1lc3NhZ2Uoc3ByaW50ZignVGhlICVzIGNhbGwgaXMgcG90ZW50aWFsbHkgdW5zYWZlIGFzICRtYXRjaGVzXCcgdHlwZSBjb3VsZCBub3QgYmUgaW5mZXJyZWQuJywgJG5vZGUtPm5hbWUtPm5hbWUpKS0+aWRlbnRpZmllcignY29tcG9zZXJQY3JlLm1heWJlVW5zYWZlU3RyaWN0R3JvdXBzJyktPmJ1aWxkKCldOwogICAgICAgIH0KICAgICAgICBpZiAoXGNvdW50KCRtYXRjaGVkVHlwZS0+Z2V0Q29uc3RhbnRBcnJheXMoKSkgPT09IDEpIHsKICAgICAgICAgICAgJG1hdGNoZWRUeXBlID0gJG1hdGNoZWRUeXBlLT5nZXRDb25zdGFudEFycmF5cygpWzBdOwogICAgICAgICAgICAkbnVsbGFibGVHcm91cHMgPSBbXTsKICAgICAgICAgICAgZm9yZWFjaCAoJG1hdGNoZWRUeXBlLT5nZXRWYWx1ZVR5cGVzKCkgYXMgJGluZGV4ID0+ICR0eXBlKSB7CiAgICAgICAgICAgICAgICBpZiAoVHlwZUNvbWJpbmF0b3I6OmNvbnRhaW5zTnVsbCgkdHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAkbnVsbGFibGVHcm91cHNbXSA9ICRtYXRjaGVkVHlwZS0+Z2V0S2V5VHlwZXMoKVskaW5kZXhdLT5nZXRWYWx1ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChcY291bnQoJG51bGxhYmxlR3JvdXBzKSA+IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiBbUnVsZUVycm9yQnVpbGRlcjo6bWVzc2FnZShzcHJpbnRmKCdUaGUgJXMgY2FsbCBpcyB1bnNhZmUgYXMgbWF0Y2ggZ3JvdXAlcyAiJXMiICVzIG9wdGlvbmFsIGFuZCBtYXkgYmUgbnVsbC4nLCAkbm9kZS0+bmFtZS0+bmFtZSwgXGNvdW50KCRudWxsYWJsZUdyb3VwcykgPiAxID8gJ3MnIDogJycsIFxpbXBsb2RlKCciLCAiJywgJG51bGxhYmxlR3JvdXBzKSwgXGNvdW50KCRudWxsYWJsZUdyb3VwcykgPiAxID8gJ2FyZScgOiAnaXMnKSktPmlkZW50aWZpZXIoJ2NvbXBvc2VyUGNyZS51bnNhZmVTdHJpY3RHcm91cHMnKS0+YnVpbGQoKV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIFtdOwogICAgfQp9Cjw/cGhwCgpkZWNsYXJlIChzdHJpY3RfdHlwZXM9MSk7Cm5hbWVzcGFjZSBDb21wb3NlclxQY3JlXFBIUFN0YW47Cgp1c2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFBjcmVcUHJlZzsKdXNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxQY3JlXFJlZ2V4Owp1c2UgUGhwUGFyc2VyXE5vZGVcRXhwclxTdGF0aWNDYWxsOwp1c2UgUEhQU3RhblxBbmFseXNlclxTY29wZTsKdXNlIFBIUFN0YW5cUmVmbGVjdGlvblxNZXRob2RSZWZsZWN0aW9uOwp1c2UgUEhQU3RhblxSZWZsZWN0aW9uXE5hdGl2ZVxOYXRpdmVQYXJhbWV0ZXJSZWZsZWN0aW9uOwp1c2UgUEhQU3RhblxSZWZsZWN0aW9uXFBhcmFtZXRlclJlZmxlY3Rpb247CnVzZSBQSFBTdGFuXFRyaW5hcnlMb2dpYzsKdXNlIFBIUFN0YW5cVHlwZVxDbG9zdXJlVHlwZTsKdXNlIFBIUFN0YW5cVHlwZVxDb25zdGFudFxDb25zdGFudEFycmF5VHlwZTsKdXNlIFBIUFN0YW5cVHlwZVxQaHBcUmVnZXhBcnJheVNoYXBlTWF0Y2hlcjsKdXNlIFBIUFN0YW5cVHlwZVxTdGF0aWNNZXRob2RQYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvbjsKdXNlIFBIUFN0YW5cVHlwZVxTdHJpbmdUeXBlOwp1c2UgUEhQU3RhblxUeXBlXFR5cGVDb21iaW5hdG9yOwp1c2UgUEhQU3RhblxUeXBlXFR5cGU7CmZpbmFsIGNsYXNzIFByZWdSZXBsYWNlQ2FsbGJhY2tDbG9zdXJlVHlwZUV4dGVuc2lvbiBpbXBsZW1lbnRzIFN0YXRpY01ldGhvZFBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uCnsKICAgIC8qKgogICAgICogQHZhciBSZWdleEFycmF5U2hhcGVNYXRjaGVyCiAgICAgKi8KICAgIHByaXZhdGUgJHJlZ2V4U2hhcGVNYXRjaGVyOwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFJlZ2V4QXJyYXlTaGFwZU1hdGNoZXIgJHJlZ2V4U2hhcGVNYXRjaGVyKQogICAgewogICAgICAgICR0aGlzLT5yZWdleFNoYXBlTWF0Y2hlciA9ICRyZWdleFNoYXBlTWF0Y2hlcjsKICAgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1N0YXRpY01ldGhvZFN1cHBvcnRlZChNZXRob2RSZWZsZWN0aW9uICRtZXRob2RSZWZsZWN0aW9uLCBQYXJhbWV0ZXJSZWZsZWN0aW9uICRwYXJhbWV0ZXIpIDogYm9vbAogICAgewogICAgICAgIHJldHVybiBcaW5fYXJyYXkoJG1ldGhvZFJlZmxlY3Rpb24tPmdldERlY2xhcmluZ0NsYXNzKCktPmdldE5hbWUoKSwgW1ByZWc6OmNsYXNzLCBSZWdleDo6Y2xhc3NdLCBcdHJ1ZSkgJiYgXGluX2FycmF5KCRtZXRob2RSZWZsZWN0aW9uLT5nZXROYW1lKCksIFsncmVwbGFjZUNhbGxiYWNrJywgJ3JlcGxhY2VDYWxsYmFja1N0cmljdEdyb3VwcyddLCBcdHJ1ZSkgJiYgJHBhcmFtZXRlci0+Z2V0TmFtZSgpID09PSAncmVwbGFjZW1lbnQnOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGVGcm9tU3RhdGljTWV0aG9kQ2FsbChNZXRob2RSZWZsZWN0aW9uICRtZXRob2RSZWZsZWN0aW9uLCBTdGF0aWNDYWxsICRtZXRob2RDYWxsLCBQYXJhbWV0ZXJSZWZsZWN0aW9uICRwYXJhbWV0ZXIsIFNjb3BlICRzY29wZSkgOiA/VHlwZQogICAgewogICAgICAgICRhcmdzID0gJG1ldGhvZENhbGwtPmdldEFyZ3MoKTsKICAgICAgICAkcGF0dGVybkFyZyA9ICRhcmdzWzBdID8/IG51bGw7CiAgICAgICAgJGZsYWdzQXJnID0gJGFyZ3NbNV0gPz8gbnVsbDsKICAgICAgICBpZiAoJHBhdHRlcm5BcmcgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgICRmbGFnc1R5cGUgPSBcQ29tcG9zZXJcUGNyZVxQSFBTdGFuXFByZWdNYXRjaEZsYWdzOjpnZXRUeXBlKCRmbGFnc0FyZywgJHNjb3BlKTsKICAgICAgICAkbWF0Y2hlc1R5cGUgPSAkdGhpcy0+cmVnZXhTaGFwZU1hdGNoZXItPm1hdGNoRXhwcigkcGF0dGVybkFyZy0+dmFsdWUsICRmbGFnc1R5cGUsIFRyaW5hcnlMb2dpYzo6Y3JlYXRlWWVzKCksICRzY29wZSk7CiAgICAgICAgaWYgKCRtYXRjaGVzVHlwZSA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKCRtZXRob2RSZWZsZWN0aW9uLT5nZXROYW1lKCkgPT09ICdyZXBsYWNlQ2FsbGJhY2tTdHJpY3RHcm91cHMnICYmIFxjb3VudCgkbWF0Y2hlc1R5cGUtPmdldENvbnN0YW50QXJyYXlzKCkpID09PSAxKSB7CiAgICAgICAgICAgICRtYXRjaGVzVHlwZSA9ICRtYXRjaGVzVHlwZS0+Z2V0Q29uc3RhbnRBcnJheXMoKVswXTsKICAgICAgICAgICAgJG1hdGNoZXNUeXBlID0gbmV3IENvbnN0YW50QXJyYXlUeXBlKCRtYXRjaGVzVHlwZS0+Z2V0S2V5VHlwZXMoKSwgXGFycmF5X21hcChzdGF0aWMgZnVuY3Rpb24gKFR5cGUgJHZhbHVlVHlwZSkgOiBUeXBlIHsKICAgICAgICAgICAgICAgIGlmIChcY291bnQoJHZhbHVlVHlwZS0+Z2V0Q29uc3RhbnRBcnJheXMoKSkgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsdWVUeXBlQXJyYXkgPSAkdmFsdWVUeXBlLT5nZXRDb25zdGFudEFycmF5cygpWzBdOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnRBcnJheVR5cGUoJHZhbHVlVHlwZUFycmF5LT5nZXRLZXlUeXBlcygpLCBcYXJyYXlfbWFwKHN0YXRpYyBmdW5jdGlvbiAoVHlwZSAkdmFsdWVUeXBlKSA6IFR5cGUgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUNvbWJpbmF0b3I6OnJlbW92ZU51bGwoJHZhbHVlVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgfSwgJHZhbHVlVHlwZUFycmF5LT5nZXRWYWx1ZVR5cGVzKCkpLCAkdmFsdWVUeXBlQXJyYXktPmdldE5leHRBdXRvSW5kZXhlcygpLCBbXSwgJHZhbHVlVHlwZUFycmF5LT5pc0xpc3QoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUNvbWJpbmF0b3I6OnJlbW92ZU51bGwoJHZhbHVlVHlwZSk7CiAgICAgICAgICAgIH0sICRtYXRjaGVzVHlwZS0+Z2V0VmFsdWVUeXBlcygpKSwgJG1hdGNoZXNUeXBlLT5nZXROZXh0QXV0b0luZGV4ZXMoKSwgW10sICRtYXRjaGVzVHlwZS0+aXNMaXN0KCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENsb3N1cmVUeXBlKFtuZXcgTmF0aXZlUGFyYW1ldGVyUmVmbGVjdGlvbigkcGFyYW1ldGVyLT5nZXROYW1lKCksICRwYXJhbWV0ZXItPmlzT3B0aW9uYWwoKSwgJG1hdGNoZXNUeXBlLCAkcGFyYW1ldGVyLT5wYXNzZWRCeVJlZmVyZW5jZSgpLCAkcGFyYW1ldGVyLT5pc1ZhcmlhZGljKCksICRwYXJhbWV0ZXItPmdldERlZmF1bHRWYWx1ZSgpKV0sIG5ldyBTdHJpbmdUeXBlKCkpOwogICAgfQp9Cjw/cGhwCgpkZWNsYXJlIChzdHJpY3RfdHlwZXM9MSk7Cm5hbWVzcGFjZSBDb21wb3NlclxQY3JlXFBIUFN0YW47Cgp1c2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFBjcmVcUHJlZzsKdXNlIFBocFBhcnNlclxOb2RlXEV4cHJcU3RhdGljQ2FsbDsKdXNlIFBIUFN0YW5cQW5hbHlzZXJcU2NvcGU7CnVzZSBQSFBTdGFuXEFuYWx5c2VyXFNwZWNpZmllZFR5cGVzOwp1c2UgUEhQU3RhblxBbmFseXNlclxUeXBlU3BlY2lmaWVyOwp1c2UgUEhQU3RhblxBbmFseXNlclxUeXBlU3BlY2lmaWVyQXdhcmVFeHRlbnNpb247CnVzZSBQSFBTdGFuXEFuYWx5c2VyXFR5cGVTcGVjaWZpZXJDb250ZXh0Owp1c2UgUEhQU3RhblxSZWZsZWN0aW9uXE1ldGhvZFJlZmxlY3Rpb247CnVzZSBQSFBTdGFuXFRyaW5hcnlMb2dpYzsKdXNlIFBIUFN0YW5cVHlwZVxDb25zdGFudFxDb25zdGFudEFycmF5VHlwZTsKdXNlIFBIUFN0YW5cVHlwZVxQaHBcUmVnZXhBcnJheVNoYXBlTWF0Y2hlcjsKdXNlIFBIUFN0YW5cVHlwZVxTdGF0aWNNZXRob2RUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbjsKdXNlIFBIUFN0YW5cVHlwZVxUeXBlQ29tYmluYXRvcjsKdXNlIFBIUFN0YW5cVHlwZVxUeXBlOwpmaW5hbCBjbGFzcyBQcmVnTWF0Y2hUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbiBpbXBsZW1lbnRzIFN0YXRpY01ldGhvZFR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLCBUeXBlU3BlY2lmaWVyQXdhcmVFeHRlbnNpb24KewogICAgLyoqCiAgICAgKiBAdmFyIFR5cGVTcGVjaWZpZXIKICAgICAqLwogICAgcHJpdmF0ZSAkdHlwZVNwZWNpZmllcjsKICAgIC8qKgogICAgICogQHZhciBSZWdleEFycmF5U2hhcGVNYXRjaGVyCiAgICAgKi8KICAgIHByaXZhdGUgJHJlZ2V4U2hhcGVNYXRjaGVyOwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFJlZ2V4QXJyYXlTaGFwZU1hdGNoZXIgJHJlZ2V4U2hhcGVNYXRjaGVyKQogICAgewogICAgICAgICR0aGlzLT5yZWdleFNoYXBlTWF0Y2hlciA9ICRyZWdleFNoYXBlTWF0Y2hlcjsKICAgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUeXBlU3BlY2lmaWVyKFR5cGVTcGVjaWZpZXIgJHR5cGVTcGVjaWZpZXIpIDogdm9pZAogICAgewogICAgICAgICR0aGlzLT50eXBlU3BlY2lmaWVyID0gJHR5cGVTcGVjaWZpZXI7CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xhc3MoKSA6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBQcmVnOjpjbGFzczsKICAgIH0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1N0YXRpY01ldGhvZFN1cHBvcnRlZChNZXRob2RSZWZsZWN0aW9uICRtZXRob2RSZWZsZWN0aW9uLCBTdGF0aWNDYWxsICRub2RlLCBUeXBlU3BlY2lmaWVyQ29udGV4dCAkY29udGV4dCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIFxpbl9hcnJheSgkbWV0aG9kUmVmbGVjdGlvbi0+Z2V0TmFtZSgpLCBbJ21hdGNoJywgJ2lzTWF0Y2gnLCAnbWF0Y2hTdHJpY3RHcm91cHMnLCAnaXNNYXRjaFN0cmljdEdyb3VwcycsICdtYXRjaEFsbCcsICdpc01hdGNoQWxsJywgJ21hdGNoQWxsU3RyaWN0R3JvdXBzJywgJ2lzTWF0Y2hBbGxTdHJpY3RHcm91cHMnXSwgXHRydWUpICYmICEkY29udGV4dC0+bnVsbCgpOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIHNwZWNpZnlUeXBlcyhNZXRob2RSZWZsZWN0aW9uICRtZXRob2RSZWZsZWN0aW9uLCBTdGF0aWNDYWxsICRub2RlLCBTY29wZSAkc2NvcGUsIFR5cGVTcGVjaWZpZXJDb250ZXh0ICRjb250ZXh0KSA6IFNwZWNpZmllZFR5cGVzCiAgICB7CiAgICAgICAgJGFyZ3MgPSAkbm9kZS0+Z2V0QXJncygpOwogICAgICAgICRwYXR0ZXJuQXJnID0gJGFyZ3NbMF0gPz8gbnVsbDsKICAgICAgICAkbWF0Y2hlc0FyZyA9ICRhcmdzWzJdID8/IG51bGw7CiAgICAgICAgJGZsYWdzQXJnID0gJGFyZ3NbM10gPz8gbnVsbDsKICAgICAgICBpZiAoJHBhdHRlcm5BcmcgPT09IG51bGwgfHwgJG1hdGNoZXNBcmcgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBTcGVjaWZpZWRUeXBlcygpOwogICAgICAgIH0KICAgICAgICAkZmxhZ3NUeXBlID0gXENvbXBvc2VyXFBjcmVcUEhQU3RhblxQcmVnTWF0Y2hGbGFnczo6Z2V0VHlwZSgkZmxhZ3NBcmcsICRzY29wZSk7CiAgICAgICAgaWYgKCRmbGFnc1R5cGUgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBTcGVjaWZpZWRUeXBlcygpOwogICAgICAgIH0KICAgICAgICBpZiAoXHN0cmlwb3MoJG1ldGhvZFJlZmxlY3Rpb24tPmdldE5hbWUoKSwgJ21hdGNoQWxsJykgIT09IFxmYWxzZSkgewogICAgICAgICAgICAkbWF0Y2hlZFR5cGUgPSAkdGhpcy0+cmVnZXhTaGFwZU1hdGNoZXItPm1hdGNoQWxsRXhwcigkcGF0dGVybkFyZy0+dmFsdWUsICRmbGFnc1R5cGUsIFRyaW5hcnlMb2dpYzo6Y3JlYXRlRnJvbUJvb2xlYW4oJGNvbnRleHQtPnRydWUoKSksICRzY29wZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG1hdGNoZWRUeXBlID0gJHRoaXMtPnJlZ2V4U2hhcGVNYXRjaGVyLT5tYXRjaEV4cHIoJHBhdHRlcm5BcmctPnZhbHVlLCAkZmxhZ3NUeXBlLCBUcmluYXJ5TG9naWM6OmNyZWF0ZUZyb21Cb29sZWFuKCRjb250ZXh0LT50cnVlKCkpLCAkc2NvcGUpOwogICAgICAgIH0KICAgICAgICBpZiAoJG1hdGNoZWRUeXBlID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgU3BlY2lmaWVkVHlwZXMoKTsKICAgICAgICB9CiAgICAgICAgaWYgKFxpbl9hcnJheSgkbWV0aG9kUmVmbGVjdGlvbi0+Z2V0TmFtZSgpLCBbJ21hdGNoU3RyaWN0R3JvdXBzJywgJ2lzTWF0Y2hTdHJpY3RHcm91cHMnLCAnbWF0Y2hBbGxTdHJpY3RHcm91cHMnLCAnaXNNYXRjaEFsbFN0cmljdEdyb3VwcyddLCBcdHJ1ZSkpIHsKICAgICAgICAgICAgJG1hdGNoZWRUeXBlID0gXENvbXBvc2VyXFBjcmVcUEhQU3RhblxQcmVnTWF0Y2hGbGFnczo6cmVtb3ZlTnVsbEZyb21NYXRjaGVzKCRtYXRjaGVkVHlwZSk7CiAgICAgICAgfQogICAgICAgICRvdmVyd3JpdGUgPSBcZmFsc2U7CiAgICAgICAgaWYgKCRjb250ZXh0LT5mYWxzZSgpKSB7CiAgICAgICAgICAgICRvdmVyd3JpdGUgPSBcdHJ1ZTsKICAgICAgICAgICAgJGNvbnRleHQgPSAkY29udGV4dC0+bmVnYXRlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+dHlwZVNwZWNpZmllci0+Y3JlYXRlKCRtYXRjaGVzQXJnLT52YWx1ZSwgJG1hdGNoZWRUeXBlLCAkY29udGV4dCwgJG92ZXJ3cml0ZSwgJHNjb3BlLCAkbm9kZSk7CiAgICB9Cn0KPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNvbXBvc2VyL3BjcmUuCiAqCiAqIChjKSBDb21wb3NlciA8aHR0cHM6Ly9naXRodWIuY29tL2NvbXBvc2VyPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldwogKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCm5hbWVzcGFjZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcUGNyZTsKCmZpbmFsIGNsYXNzIE1hdGNoUmVzdWx0CnsKICAgIC8qKgogICAgICogQW4gYXJyYXkgb2YgbWF0Y2ggZ3JvdXAgPT4gc3RyaW5nIG1hdGNoZWQKICAgICAqCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgYXJyYXk8aW50fHN0cmluZywgc3RyaW5nfG51bGw+CiAgICAgKi8KICAgIHB1YmxpYyAkbWF0Y2hlczsKICAgIC8qKgogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICRtYXRjaGVkOwogICAgLyoqCiAgICAgKiBAcGFyYW0gMHxwb3NpdGl2ZS1pbnQgJGNvdW50CiAgICAgKiBAcGFyYW0gYXJyYXk8c3RyaW5nfG51bGw+ICRtYXRjaGVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChpbnQgJGNvdW50LCBhcnJheSAkbWF0Y2hlcykKICAgIHsKICAgICAgICAkdGhpcy0+bWF0Y2hlcyA9ICRtYXRjaGVzOwogICAgICAgICR0aGlzLT5tYXRjaGVkID0gKGJvb2wpICRjb3VudDsKICAgIH0KfQo8P3BocAoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgY29tcG9zZXIvcGNyZS4KICoKICogKGMpIENvbXBvc2VyIDxodHRwczovL2dpdGh1Yi5jb20vY29tcG9zZXI+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3CiAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxQY3JlOwoKY2xhc3MgUmVnZXgKewogICAgLyoqCiAgICAgKiBAcGFyYW0gbm9uLWVtcHR5LXN0cmluZyAkcGF0dGVybgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzTWF0Y2goc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHN1YmplY3QsIGludCAkb2Zmc2V0ID0gMCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIChib29sKSBQcmVnOjptYXRjaCgkcGF0dGVybiwgJHN1YmplY3QsICRtYXRjaGVzLCAwLCAkb2Zmc2V0KTsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtIG5vbi1lbXB0eS1zdHJpbmcgJHBhdHRlcm4KICAgICAqIEBwYXJhbSBpbnQtbWFzazxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMPiAkZmxhZ3MgUFJFR19VTk1BVENIRURfQVNfTlVMTCBpcyBhbHdheXMgc2V0LCBubyBvdGhlciBmbGFncyBhcmUgc3VwcG9ydGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF0Y2goc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHN1YmplY3QsIGludCAkZmxhZ3MgPSAwLCBpbnQgJG9mZnNldCA9IDApIDogTWF0Y2hSZXN1bHQKICAgIHsKICAgICAgICBzZWxmOjpjaGVja09mZnNldENhcHR1cmUoJGZsYWdzLCAnbWF0Y2hXaXRoT2Zmc2V0cycpOwogICAgICAgICRjb3VudCA9IFByZWc6Om1hdGNoKCRwYXR0ZXJuLCAkc3ViamVjdCwgJG1hdGNoZXMsICRmbGFncywgJG9mZnNldCk7CiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaFJlc3VsdCgkY291bnQsICRtYXRjaGVzKTsKICAgIH0KICAgIC8qKgogICAgICogVmFyaWFudCBvZiBgbWF0Y2goKWAgd2hpY2ggcmV0dXJucyBub24tbnVsbCBtYXRjaGVzIChvciB0aHJvd3MpCiAgICAgKgogICAgICogQHBhcmFtIG5vbi1lbXB0eS1zdHJpbmcgJHBhdHRlcm4KICAgICAqIEBwYXJhbSBpbnQtbWFzazxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMPiAkZmxhZ3MgUFJFR19VTk1BVENIRURfQVNfTlVMTCBpcyBhbHdheXMgc2V0LCBubyBvdGhlciBmbGFncyBhcmUgc3VwcG9ydGVkCiAgICAgKiBAdGhyb3dzIFVuZXhwZWN0ZWROdWxsTWF0Y2hFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXRjaFN0cmljdEdyb3VwcyhzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkc3ViamVjdCwgaW50ICRmbGFncyA9IDAsIGludCAkb2Zmc2V0ID0gMCkgOiBNYXRjaFN0cmljdEdyb3Vwc1Jlc3VsdAogICAgewogICAgICAgIC8vIEBwaHBzdGFuLWlnbm9yZSBjb21wb3NlclBjcmUubWF5YmVVbnNhZmVTdHJpY3RHcm91cHMKICAgICAgICAkY291bnQgPSBQcmVnOjptYXRjaFN0cmljdEdyb3VwcygkcGF0dGVybiwgJHN1YmplY3QsICRtYXRjaGVzLCAkZmxhZ3MsICRvZmZzZXQpOwogICAgICAgIHJldHVybiBuZXcgTWF0Y2hTdHJpY3RHcm91cHNSZXN1bHQoJGNvdW50LCAkbWF0Y2hlcyk7CiAgICB9CiAgICAvKioKICAgICAqIFJ1bnMgcHJlZ19tYXRjaCB3aXRoIFBSRUdfT0ZGU0VUX0NBUFRVUkUKICAgICAqCiAgICAgKiBAcGFyYW0gbm9uLWVtcHR5LXN0cmluZyAkcGF0dGVybgogICAgICogQHBhcmFtIGludC1tYXNrPFBSRUdfVU5NQVRDSEVEX0FTX05VTEx8UFJFR19PRkZTRVRfQ0FQVFVSRT4gJGZsYWdzIFBSRUdfVU5NQVRDSEVEX0FTX05VTEwgYW5kIFBSRUdfTUFUQ0hfT0ZGU0VUIGFyZSBhbHdheXMgc2V0LCBubyBvdGhlciBmbGFncyBhcmUgc3VwcG9ydGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF0Y2hXaXRoT2Zmc2V0cyhzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkc3ViamVjdCwgaW50ICRmbGFncyA9IDAsIGludCAkb2Zmc2V0ID0gMCkgOiBNYXRjaFdpdGhPZmZzZXRzUmVzdWx0CiAgICB7CiAgICAgICAgJGNvdW50ID0gUHJlZzo6bWF0Y2hXaXRoT2Zmc2V0cygkcGF0dGVybiwgJHN1YmplY3QsICRtYXRjaGVzLCAkZmxhZ3MsICRvZmZzZXQpOwogICAgICAgIHJldHVybiBuZXcgTWF0Y2hXaXRoT2Zmc2V0c1Jlc3VsdCgkY291bnQsICRtYXRjaGVzKTsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtIG5vbi1lbXB0eS1zdHJpbmcgJHBhdHRlcm4KICAgICAqIEBwYXJhbSBpbnQtbWFzazxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMPiAkZmxhZ3MgUFJFR19VTk1BVENIRURfQVNfTlVMTCBpcyBhbHdheXMgc2V0LCBubyBvdGhlciBmbGFncyBhcmUgc3VwcG9ydGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF0Y2hBbGwoc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHN1YmplY3QsIGludCAkZmxhZ3MgPSAwLCBpbnQgJG9mZnNldCA9IDApIDogTWF0Y2hBbGxSZXN1bHQKICAgIHsKICAgICAgICBzZWxmOjpjaGVja09mZnNldENhcHR1cmUoJGZsYWdzLCAnbWF0Y2hBbGxXaXRoT2Zmc2V0cycpOwogICAgICAgIHNlbGY6OmNoZWNrU2V0T3JkZXIoJGZsYWdzKTsKICAgICAgICAkY291bnQgPSBQcmVnOjptYXRjaEFsbCgkcGF0dGVybiwgJHN1YmplY3QsICRtYXRjaGVzLCAkZmxhZ3MsICRvZmZzZXQpOwogICAgICAgIHJldHVybiBuZXcgTWF0Y2hBbGxSZXN1bHQoJGNvdW50LCAkbWF0Y2hlcyk7CiAgICB9CiAgICAvKioKICAgICAqIFZhcmlhbnQgb2YgYG1hdGNoQWxsKClgIHdoaWNoIHJldHVybnMgbm9uLW51bGwgbWF0Y2hlcyAob3IgdGhyb3dzKQogICAgICoKICAgICAqIEBwYXJhbSBub24tZW1wdHktc3RyaW5nICRwYXR0ZXJuCiAgICAgKiBAcGFyYW0gaW50LW1hc2s8UFJFR19VTk1BVENIRURfQVNfTlVMTD4gJGZsYWdzIFBSRUdfVU5NQVRDSEVEX0FTX05VTEwgaXMgYWx3YXlzIHNldCwgbm8gb3RoZXIgZmxhZ3MgYXJlIHN1cHBvcnRlZAogICAgICogQHRocm93cyBVbmV4cGVjdGVkTnVsbE1hdGNoRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF0Y2hBbGxTdHJpY3RHcm91cHMoc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHN1YmplY3QsIGludCAkZmxhZ3MgPSAwLCBpbnQgJG9mZnNldCA9IDApIDogTWF0Y2hBbGxTdHJpY3RHcm91cHNSZXN1bHQKICAgIHsKICAgICAgICBzZWxmOjpjaGVja09mZnNldENhcHR1cmUoJGZsYWdzLCAnbWF0Y2hBbGxXaXRoT2Zmc2V0cycpOwogICAgICAgIHNlbGY6OmNoZWNrU2V0T3JkZXIoJGZsYWdzKTsKICAgICAgICAvLyBAcGhwc3Rhbi1pZ25vcmUgY29tcG9zZXJQY3JlLm1heWJlVW5zYWZlU3RyaWN0R3JvdXBzCiAgICAgICAgJGNvdW50ID0gUHJlZzo6bWF0Y2hBbGxTdHJpY3RHcm91cHMoJHBhdHRlcm4sICRzdWJqZWN0LCAkbWF0Y2hlcywgJGZsYWdzLCAkb2Zmc2V0KTsKICAgICAgICByZXR1cm4gbmV3IE1hdGNoQWxsU3RyaWN0R3JvdXBzUmVzdWx0KCRjb3VudCwgJG1hdGNoZXMpOwogICAgfQogICAgLyoqCiAgICAgKiBSdW5zIHByZWdfbWF0Y2hfYWxsIHdpdGggUFJFR19PRkZTRVRfQ0FQVFVSRQogICAgICoKICAgICAqIEBwYXJhbSBub24tZW1wdHktc3RyaW5nICRwYXR0ZXJuCiAgICAgKiBAcGFyYW0gaW50LW1hc2s8UFJFR19VTk1BVENIRURfQVNfTlVMTHxQUkVHX09GRlNFVF9DQVBUVVJFPiAkZmxhZ3MgUFJFR19VTk1BVENIRURfQVNfTlVMTCBhbmQgUFJFR19NQVRDSF9PRkZTRVQgYXJlIGFsd2F5cyBzZXQsIG5vIG90aGVyIGZsYWdzIGFyZSBzdXBwb3J0ZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXRjaEFsbFdpdGhPZmZzZXRzKHN0cmluZyAkcGF0dGVybiwgc3RyaW5nICRzdWJqZWN0LCBpbnQgJGZsYWdzID0gMCwgaW50ICRvZmZzZXQgPSAwKSA6IE1hdGNoQWxsV2l0aE9mZnNldHNSZXN1bHQKICAgIHsKICAgICAgICBzZWxmOjpjaGVja1NldE9yZGVyKCRmbGFncyk7CiAgICAgICAgJGNvdW50ID0gUHJlZzo6bWF0Y2hBbGxXaXRoT2Zmc2V0cygkcGF0dGVybiwgJHN1YmplY3QsICRtYXRjaGVzLCAkZmxhZ3MsICRvZmZzZXQpOwogICAgICAgIHJldHVybiBuZXcgTWF0Y2hBbGxXaXRoT2Zmc2V0c1Jlc3VsdCgkY291bnQsICRtYXRjaGVzKTsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkcGF0dGVybgogICAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkcmVwbGFjZW1lbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgJHN1YmplY3QKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXBsYWNlKCRwYXR0ZXJuLCAkcmVwbGFjZW1lbnQsICRzdWJqZWN0LCBpbnQgJGxpbWl0ID0gLTEpIDogUmVwbGFjZVJlc3VsdAogICAgewogICAgICAgICRyZXN1bHQgPSBQcmVnOjpyZXBsYWNlKCRwYXR0ZXJuLCAkcmVwbGFjZW1lbnQsICRzdWJqZWN0LCAkbGltaXQsICRjb3VudCk7CiAgICAgICAgcmV0dXJuIG5ldyBSZXBsYWNlUmVzdWx0KCRjb3VudCwgJHJlc3VsdCk7CiAgICB9CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJHBhdHRlcm4KICAgICAqIEBwYXJhbSAoJGZsYWdzIGlzIFBSRUdfT0ZGU0VUX0NBUFRVUkUgPyAoY2FsbGFibGUoYXJyYXk8aW50fHN0cmluZywgYXJyYXl7c3RyaW5nfG51bGwsIGludDwtMSwgbWF4Pn0+KTogc3RyaW5nKSA6IGNhbGxhYmxlKGFycmF5PGludHxzdHJpbmcsIHN0cmluZ3xudWxsPik6IHN0cmluZykgJHJlcGxhY2VtZW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICRzdWJqZWN0CiAgICAgKiBAcGFyYW0gaW50LW1hc2s8UFJFR19VTk1BVENIRURfQVNfTlVMTHxQUkVHX09GRlNFVF9DQVBUVVJFPiAkZmxhZ3MgUFJFR19PRkZTRVRfQ0FQVFVSRSBpcyBzdXBwb3J0ZWQsIFBSRUdfVU5NQVRDSEVEX0FTX05VTEwgaXMgYWx3YXlzIHNldAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlcGxhY2VDYWxsYmFjaygkcGF0dGVybiwgY2FsbGFibGUgJHJlcGxhY2VtZW50LCAkc3ViamVjdCwgaW50ICRsaW1pdCA9IC0xLCBpbnQgJGZsYWdzID0gMCkgOiBSZXBsYWNlUmVzdWx0CiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFByZWc6OnJlcGxhY2VDYWxsYmFjaygkcGF0dGVybiwgJHJlcGxhY2VtZW50LCAkc3ViamVjdCwgJGxpbWl0LCAkY291bnQsICRmbGFncyk7CiAgICAgICAgcmV0dXJuIG5ldyBSZXBsYWNlUmVzdWx0KCRjb3VudCwgJHJlc3VsdCk7CiAgICB9CiAgICAvKioKICAgICAqIFZhcmlhbnQgb2YgYHJlcGxhY2VDYWxsYmFjaygpYCB3aGljaCBvdXRwdXRzIG5vbi1udWxsIG1hdGNoZXMgKG9yIHRocm93cykKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuCiAgICAgKiBAcGFyYW0gKCRmbGFncyBpcyBQUkVHX09GRlNFVF9DQVBUVVJFID8gKGNhbGxhYmxlKGFycmF5PGludHxzdHJpbmcsIGFycmF5e3N0cmluZywgaW50PDAsIG1heD59Pik6IHN0cmluZykgOiBjYWxsYWJsZShhcnJheTxpbnR8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nKSAkcmVwbGFjZW1lbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgJHN1YmplY3QKICAgICAqIEBwYXJhbSBpbnQtbWFzazxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMfFBSRUdfT0ZGU0VUX0NBUFRVUkU+ICRmbGFncyBQUkVHX09GRlNFVF9DQVBUVVJFIGlzIHN1cHBvcnRlZCwgUFJFR19VTk1BVENIRURfQVNfTlVMTCBpcyBhbHdheXMgc2V0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVwbGFjZUNhbGxiYWNrU3RyaWN0R3JvdXBzKCRwYXR0ZXJuLCBjYWxsYWJsZSAkcmVwbGFjZW1lbnQsICRzdWJqZWN0LCBpbnQgJGxpbWl0ID0gLTEsIGludCAkZmxhZ3MgPSAwKSA6IFJlcGxhY2VSZXN1bHQKICAgIHsKICAgICAgICAkcmVzdWx0ID0gUHJlZzo6cmVwbGFjZUNhbGxiYWNrU3RyaWN0R3JvdXBzKCRwYXR0ZXJuLCAkcmVwbGFjZW1lbnQsICRzdWJqZWN0LCAkbGltaXQsICRjb3VudCwgJGZsYWdzKTsKICAgICAgICByZXR1cm4gbmV3IFJlcGxhY2VSZXN1bHQoJGNvdW50LCAkcmVzdWx0KTsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtICgkZmxhZ3MgaXMgUFJFR19PRkZTRVRfQ0FQVFVSRSA/IChhcnJheTxzdHJpbmcsIGNhbGxhYmxlKGFycmF5PGludHxzdHJpbmcsIGFycmF5e3N0cmluZ3xudWxsLCBpbnQ8LTEsIG1heD59Pik6IHN0cmluZz4pIDogYXJyYXk8c3RyaW5nLCBjYWxsYWJsZShhcnJheTxpbnR8c3RyaW5nLCBzdHJpbmd8bnVsbD4pOiBzdHJpbmc+KSAkcGF0dGVybgogICAgICogQHBhcmFtIHN0cmluZyAkc3ViamVjdAogICAgICogQHBhcmFtIGludC1tYXNrPFBSRUdfVU5NQVRDSEVEX0FTX05VTEx8UFJFR19PRkZTRVRfQ0FQVFVSRT4gJGZsYWdzIFBSRUdfT0ZGU0VUX0NBUFRVUkUgaXMgc3VwcG9ydGVkLCBQUkVHX1VOTUFUQ0hFRF9BU19OVUxMIGlzIGFsd2F5cyBzZXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXBsYWNlQ2FsbGJhY2tBcnJheShhcnJheSAkcGF0dGVybiwgJHN1YmplY3QsIGludCAkbGltaXQgPSAtMSwgaW50ICRmbGFncyA9IDApIDogUmVwbGFjZVJlc3VsdAogICAgewogICAgICAgICRyZXN1bHQgPSBQcmVnOjpyZXBsYWNlQ2FsbGJhY2tBcnJheSgkcGF0dGVybiwgJHN1YmplY3QsICRsaW1pdCwgJGNvdW50LCAkZmxhZ3MpOwogICAgICAgIHJldHVybiBuZXcgUmVwbGFjZVJlc3VsdCgkY291bnQsICRyZXN1bHQpOwogICAgfQogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY2hlY2tPZmZzZXRDYXB0dXJlKGludCAkZmxhZ3MsIHN0cmluZyAkdXNlRnVuY3Rpb25OYW1lKSA6IHZvaWQKICAgIHsKICAgICAgICBpZiAoKCRmbGFncyAmIFxQUkVHX09GRlNFVF9DQVBUVVJFKSAhPT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignUFJFR19PRkZTRVRfQ0FQVFVSRSBpcyBub3Qgc3VwcG9ydGVkIGFzIGl0IGNoYW5nZXMgdGhlIHJldHVybiB0eXBlLCB1c2UgJyAuICR1c2VGdW5jdGlvbk5hbWUgLiAnKCkgaW5zdGVhZCcpOwogICAgICAgIH0KICAgIH0KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNoZWNrU2V0T3JkZXIoaW50ICRmbGFncykgOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCgkZmxhZ3MgJiBcUFJFR19TRVRfT1JERVIpICE9PSAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdQUkVHX1NFVF9PUkRFUiBpcyBub3Qgc3VwcG9ydGVkIGFzIGl0IGNoYW5nZXMgdGhlIHJldHVybiB0eXBlJyk7CiAgICAgICAgfQogICAgfQp9Cjw/cGhwCgovKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBjb21wb3Nlci9wY3JlLgogKgogKiAoYykgQ29tcG9zZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlcj4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcKICogdGhlIExJQ0VOU0UgZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwpuYW1lc3BhY2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFBjcmU7CgpjbGFzcyBQcmVnCnsKICAgIC8qKiBAaW50ZXJuYWwgKi8KICAgIHB1YmxpYyBjb25zdCBBUlJBWV9NU0cgPSAnJHN1YmplY3QgYXMgYW4gYXJyYXkgaXMgbm90IHN1cHBvcnRlZC4gWW91IGNhbiB1c2UgXCdmb3JlYWNoXCcgaW5zdGVhZC4nOwogICAgLyoqIEBpbnRlcm5hbCAqLwogICAgcHVibGljIGNvbnN0IElOVkFMSURfVFlQRV9NU0cgPSAnJHN1YmplY3QgbXVzdCBiZSBhIHN0cmluZywgJXMgZ2l2ZW4uJzsKICAgIC8qKgogICAgICogQHBhcmFtIG5vbi1lbXB0eS1zdHJpbmcgICAkcGF0dGVybgogICAgICogQHBhcmFtIGFycmF5PG1peGVkPiAkbWF0Y2hlcyBTZXQgYnkgbWV0aG9kCiAgICAgKiBAcGFyYW0gaW50LW1hc2s8UFJFR19VTk1BVENIRURfQVNfTlVMTD4gJGZsYWdzIFBSRUdfVU5NQVRDSEVEX0FTX05VTEwgaXMgYWx3YXlzIHNldCwgbm8gb3RoZXIgZmxhZ3MgYXJlIHN1cHBvcnRlZAogICAgICogQHJldHVybiAwfDEKICAgICAqCiAgICAgKiBAcGFyYW0tb3V0IGFycmF5PGludHxzdHJpbmcsIHN0cmluZ3xudWxsPiAkbWF0Y2hlcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1hdGNoKHN0cmluZyAkcGF0dGVybiwgc3RyaW5nICRzdWJqZWN0LCA/YXJyYXkgJiRtYXRjaGVzID0gbnVsbCwgaW50ICRmbGFncyA9IDAsIGludCAkb2Zmc2V0ID0gMCkgOiBpbnQKICAgIHsKICAgICAgICBzZWxmOjpjaGVja09mZnNldENhcHR1cmUoJGZsYWdzLCAnbWF0Y2hXaXRoT2Zmc2V0cycpOwogICAgICAgICRyZXN1bHQgPSBccHJlZ19tYXRjaCgkcGF0dGVybiwgJHN1YmplY3QsICRtYXRjaGVzLCAkZmxhZ3MgfCBcUFJFR19VTk1BVENIRURfQVNfTlVMTCwgJG9mZnNldCk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IFxmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBQY3JlRXhjZXB0aW9uOjpmcm9tRnVuY3Rpb24oJ3ByZWdfbWF0Y2gnLCAkcGF0dGVybik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQogICAgLyoqCiAgICAgKiBWYXJpYW50IG9mIGBtYXRjaCgpYCB3aGljaCBvdXRwdXRzIG5vbi1udWxsIG1hdGNoZXMgKG9yIHRocm93cykKICAgICAqCiAgICAgKiBAcGFyYW0gbm9uLWVtcHR5LXN0cmluZyAkcGF0dGVybgogICAgICogQHBhcmFtIGFycmF5PG1peGVkPiAkbWF0Y2hlcyBTZXQgYnkgbWV0aG9kCiAgICAgKiBAcGFyYW0gaW50LW1hc2s8UFJFR19VTk1BVENIRURfQVNfTlVMTD4gJGZsYWdzIFBSRUdfVU5NQVRDSEVEX0FTX05VTEwgaXMgYWx3YXlzIHNldCwgbm8gb3RoZXIgZmxhZ3MgYXJlIHN1cHBvcnRlZAogICAgICogQHJldHVybiAwfDEKICAgICAqIEB0aHJvd3MgVW5leHBlY3RlZE51bGxNYXRjaEV4Y2VwdGlvbgogICAgICoKICAgICAqIEBwYXJhbS1vdXQgYXJyYXk8aW50fHN0cmluZywgc3RyaW5nPiAkbWF0Y2hlcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1hdGNoU3RyaWN0R3JvdXBzKHN0cmluZyAkcGF0dGVybiwgc3RyaW5nICRzdWJqZWN0LCA/YXJyYXkgJiRtYXRjaGVzID0gbnVsbCwgaW50ICRmbGFncyA9IDAsIGludCAkb2Zmc2V0ID0gMCkgOiBpbnQKICAgIHsKICAgICAgICAkcmVzdWx0ID0gc2VsZjo6bWF0Y2goJHBhdHRlcm4sICRzdWJqZWN0LCAkbWF0Y2hlc0ludGVybmFsLCAkZmxhZ3MsICRvZmZzZXQpOwogICAgICAgICRtYXRjaGVzID0gc2VsZjo6ZW5mb3JjZU5vbk51bGxNYXRjaGVzKCRwYXR0ZXJuLCAkbWF0Y2hlc0ludGVybmFsLCAnbWF0Y2gnKTsKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KICAgIC8qKgogICAgICogUnVucyBwcmVnX21hdGNoIHdpdGggUFJFR19PRkZTRVRfQ0FQVFVSRQogICAgICoKICAgICAqIEBwYXJhbSBub24tZW1wdHktc3RyaW5nICAgJHBhdHRlcm4KICAgICAqIEBwYXJhbSBhcnJheTxtaXhlZD4gJG1hdGNoZXMgU2V0IGJ5IG1ldGhvZAogICAgICogQHBhcmFtIGludC1tYXNrPFBSRUdfVU5NQVRDSEVEX0FTX05VTEx8UFJFR19PRkZTRVRfQ0FQVFVSRT4gJGZsYWdzIFBSRUdfVU5NQVRDSEVEX0FTX05VTEwgYW5kIFBSRUdfT0ZGU0VUX0NBUFRVUkUgYXJlIGFsd2F5cyBzZXQsIG5vIG90aGVyIGZsYWdzIGFyZSBzdXBwb3J0ZWQKICAgICAqIEByZXR1cm4gMHwxCiAgICAgKgogICAgICogQHBhcmFtLW91dCBhcnJheTxpbnR8c3RyaW5nLCBhcnJheXtzdHJpbmd8bnVsbCwgaW50PC0xLCBtYXg+fT4gJG1hdGNoZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXRjaFdpdGhPZmZzZXRzKHN0cmluZyAkcGF0dGVybiwgc3RyaW5nICRzdWJqZWN0LCA/YXJyYXkgJiRtYXRjaGVzLCBpbnQgJGZsYWdzID0gMCwgaW50ICRvZmZzZXQgPSAwKSA6IGludAogICAgewogICAgICAgICRyZXN1bHQgPSBccHJlZ19tYXRjaCgkcGF0dGVybiwgJHN1YmplY3QsICRtYXRjaGVzLCAkZmxhZ3MgfCBcUFJFR19VTk1BVENIRURfQVNfTlVMTCB8IFxQUkVHX09GRlNFVF9DQVBUVVJFLCAkb2Zmc2V0KTsKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gXGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IFBjcmVFeGNlcHRpb246OmZyb21GdW5jdGlvbigncHJlZ19tYXRjaCcsICRwYXR0ZXJuKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CiAgICAvKioKICAgICAqIEBwYXJhbSBub24tZW1wdHktc3RyaW5nICAgJHBhdHRlcm4KICAgICAqIEBwYXJhbSBhcnJheTxtaXhlZD4gJG1hdGNoZXMgU2V0IGJ5IG1ldGhvZAogICAgICogQHBhcmFtIGludC1tYXNrPFBSRUdfVU5NQVRDSEVEX0FTX05VTEw+ICRmbGFncyBQUkVHX1VOTUFUQ0hFRF9BU19OVUxMIGlzIGFsd2F5cyBzZXQsIG5vIG90aGVyIGZsYWdzIGFyZSBzdXBwb3J0ZWQKICAgICAqIEByZXR1cm4gMHxwb3NpdGl2ZS1pbnQKICAgICAqCiAgICAgKiBAcGFyYW0tb3V0IGFycmF5PGludHxzdHJpbmcsIGxpc3Q8c3RyaW5nfG51bGw+PiAkbWF0Y2hlcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1hdGNoQWxsKHN0cmluZyAkcGF0dGVybiwgc3RyaW5nICRzdWJqZWN0LCA/YXJyYXkgJiRtYXRjaGVzID0gbnVsbCwgaW50ICRmbGFncyA9IDAsIGludCAkb2Zmc2V0ID0gMCkgOiBpbnQKICAgIHsKICAgICAgICBzZWxmOjpjaGVja09mZnNldENhcHR1cmUoJGZsYWdzLCAnbWF0Y2hBbGxXaXRoT2Zmc2V0cycpOwogICAgICAgIHNlbGY6OmNoZWNrU2V0T3JkZXIoJGZsYWdzKTsKICAgICAgICAkcmVzdWx0ID0gXHByZWdfbWF0Y2hfYWxsKCRwYXR0ZXJuLCAkc3ViamVjdCwgJG1hdGNoZXMsICRmbGFncyB8IFxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMLCAkb2Zmc2V0KTsKICAgICAgICBpZiAoIVxpc19pbnQoJHJlc3VsdCkpIHsKICAgICAgICAgICAgLy8gUEhQIDwgOCBtYXkgcmV0dXJuIG51bGwsIDgrIHJldHVybnMgaW50fGZhbHNlCiAgICAgICAgICAgIHRocm93IFBjcmVFeGNlcHRpb246OmZyb21GdW5jdGlvbigncHJlZ19tYXRjaF9hbGwnLCAkcGF0dGVybik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQogICAgLyoqCiAgICAgKiBWYXJpYW50IG9mIGBtYXRjaCgpYCB3aGljaCBvdXRwdXRzIG5vbi1udWxsIG1hdGNoZXMgKG9yIHRocm93cykKICAgICAqCiAgICAgKiBAcGFyYW0gbm9uLWVtcHR5LXN0cmluZyAgICRwYXR0ZXJuCiAgICAgKiBAcGFyYW0gYXJyYXk8bWl4ZWQ+ICRtYXRjaGVzIFNldCBieSBtZXRob2QKICAgICAqIEBwYXJhbSBpbnQtbWFzazxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMPiAkZmxhZ3MgUFJFR19VTk1BVENIRURfQVNfTlVMTCBpcyBhbHdheXMgc2V0LCBubyBvdGhlciBmbGFncyBhcmUgc3VwcG9ydGVkCiAgICAgKiBAcmV0dXJuIDB8cG9zaXRpdmUtaW50CiAgICAgKiBAdGhyb3dzIFVuZXhwZWN0ZWROdWxsTWF0Y2hFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcGFyYW0tb3V0IGFycmF5PGludHxzdHJpbmcsIGxpc3Q8c3RyaW5nPj4gJG1hdGNoZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXRjaEFsbFN0cmljdEdyb3VwcyhzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkc3ViamVjdCwgP2FycmF5ICYkbWF0Y2hlcyA9IG51bGwsIGludCAkZmxhZ3MgPSAwLCBpbnQgJG9mZnNldCA9IDApIDogaW50CiAgICB7CiAgICAgICAgJHJlc3VsdCA9IHNlbGY6Om1hdGNoQWxsKCRwYXR0ZXJuLCAkc3ViamVjdCwgJG1hdGNoZXNJbnRlcm5hbCwgJGZsYWdzLCAkb2Zmc2V0KTsKICAgICAgICAkbWF0Y2hlcyA9IHNlbGY6OmVuZm9yY2VOb25OdWxsTWF0Y2hBbGwoJHBhdHRlcm4sICRtYXRjaGVzSW50ZXJuYWwsICdtYXRjaEFsbCcpOwogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQogICAgLyoqCiAgICAgKiBSdW5zIHByZWdfbWF0Y2hfYWxsIHdpdGggUFJFR19PRkZTRVRfQ0FQVFVSRQogICAgICoKICAgICAqIEBwYXJhbSBub24tZW1wdHktc3RyaW5nICAgJHBhdHRlcm4KICAgICAqIEBwYXJhbSBhcnJheTxtaXhlZD4gJG1hdGNoZXMgU2V0IGJ5IG1ldGhvZAogICAgICogQHBhcmFtIGludC1tYXNrPFBSRUdfVU5NQVRDSEVEX0FTX05VTEx8UFJFR19PRkZTRVRfQ0FQVFVSRT4gJGZsYWdzIFBSRUdfVU5NQVRDSEVEX0FTX05VTEwgYW5kIFBSRUdfTUFUQ0hfT0ZGU0VUIGFyZSBhbHdheXMgc2V0LCBubyBvdGhlciBmbGFncyBhcmUgc3VwcG9ydGVkCiAgICAgKiBAcmV0dXJuIDB8cG9zaXRpdmUtaW50CiAgICAgKgogICAgICogQHBhcmFtLW91dCBhcnJheTxpbnR8c3RyaW5nLCBsaXN0PGFycmF5e3N0cmluZ3xudWxsLCBpbnQ8LTEsIG1heD59Pj4gJG1hdGNoZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXRjaEFsbFdpdGhPZmZzZXRzKHN0cmluZyAkcGF0dGVybiwgc3RyaW5nICRzdWJqZWN0LCA/YXJyYXkgJiRtYXRjaGVzLCBpbnQgJGZsYWdzID0gMCwgaW50ICRvZmZzZXQgPSAwKSA6IGludAogICAgewogICAgICAgIHNlbGY6OmNoZWNrU2V0T3JkZXIoJGZsYWdzKTsKICAgICAgICAkcmVzdWx0ID0gXHByZWdfbWF0Y2hfYWxsKCRwYXR0ZXJuLCAkc3ViamVjdCwgJG1hdGNoZXMsICRmbGFncyB8IFxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMIHwgXFBSRUdfT0ZGU0VUX0NBUFRVUkUsICRvZmZzZXQpOwogICAgICAgIGlmICghXGlzX2ludCgkcmVzdWx0KSkgewogICAgICAgICAgICAvLyBQSFAgPCA4IG1heSByZXR1cm4gbnVsbCwgOCsgcmV0dXJucyBpbnR8ZmFsc2UKICAgICAgICAgICAgdGhyb3cgUGNyZUV4Y2VwdGlvbjo6ZnJvbUZ1bmN0aW9uKCdwcmVnX21hdGNoX2FsbCcsICRwYXR0ZXJuKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJHBhdHRlcm4KICAgICAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJHJlcGxhY2VtZW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdWJqZWN0CiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICRjb3VudCBTZXQgYnkgbWV0aG9kCiAgICAgKgogICAgICogQHBhcmFtLW91dCBpbnQ8MCwgbWF4PiAkY291bnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXBsYWNlKCRwYXR0ZXJuLCAkcmVwbGFjZW1lbnQsICRzdWJqZWN0LCBpbnQgJGxpbWl0ID0gLTEsID9pbnQgJiRjb3VudCA9IG51bGwpIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCFcaXNfc2NhbGFyKCRzdWJqZWN0KSkgewogICAgICAgICAgICBpZiAoXGlzX2FycmF5KCRzdWJqZWN0KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3RhdGljOjpBUlJBWV9NU0cpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IG5ldyBcVHlwZUVycm9yKFxzcHJpbnRmKHN0YXRpYzo6SU5WQUxJRF9UWVBFX01TRywgXGdldHR5cGUoJHN1YmplY3QpKSk7CiAgICAgICAgfQogICAgICAgICRyZXN1bHQgPSBccHJlZ19yZXBsYWNlKCRwYXR0ZXJuLCAkcmVwbGFjZW1lbnQsICRzdWJqZWN0LCAkbGltaXQsICRjb3VudCk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgUGNyZUV4Y2VwdGlvbjo6ZnJvbUZ1bmN0aW9uKCdwcmVnX3JlcGxhY2UnLCAkcGF0dGVybik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfHN0cmluZ1tdICRwYXR0ZXJuCiAgICAgKiBAcGFyYW0gKCRmbGFncyBpcyBQUkVHX09GRlNFVF9DQVBUVVJFID8gKGNhbGxhYmxlKGFycmF5PGludHxzdHJpbmcsIGFycmF5e3N0cmluZ3xudWxsLCBpbnQ8LTEsIG1heD59Pik6IHN0cmluZykgOiBjYWxsYWJsZShhcnJheTxpbnR8c3RyaW5nLCBzdHJpbmd8bnVsbD4pOiBzdHJpbmcpICRyZXBsYWNlbWVudAogICAgICogQHBhcmFtIHN0cmluZyAkc3ViamVjdAogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAkY291bnQgU2V0IGJ5IG1ldGhvZAogICAgICogQHBhcmFtIGludC1tYXNrPFBSRUdfVU5NQVRDSEVEX0FTX05VTEx8UFJFR19PRkZTRVRfQ0FQVFVSRT4gJGZsYWdzIFBSRUdfT0ZGU0VUX0NBUFRVUkUgaXMgc3VwcG9ydGVkLCBQUkVHX1VOTUFUQ0hFRF9BU19OVUxMIGlzIGFsd2F5cyBzZXQKICAgICAqCiAgICAgKiBAcGFyYW0tb3V0IGludDwwLCBtYXg+ICRjb3VudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlcGxhY2VDYWxsYmFjaygkcGF0dGVybiwgY2FsbGFibGUgJHJlcGxhY2VtZW50LCAkc3ViamVjdCwgaW50ICRsaW1pdCA9IC0xLCA/aW50ICYkY291bnQgPSBudWxsLCBpbnQgJGZsYWdzID0gMCkgOiBzdHJpbmcKICAgIHsKICAgICAgICBpZiAoIVxpc19zY2FsYXIoJHN1YmplY3QpKSB7CiAgICAgICAgICAgIGlmIChcaXNfYXJyYXkoJHN1YmplY3QpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzdGF0aWM6OkFSUkFZX01TRyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgbmV3IFxUeXBlRXJyb3IoXHNwcmludGYoc3RhdGljOjpJTlZBTElEX1RZUEVfTVNHLCBcZ2V0dHlwZSgkc3ViamVjdCkpKTsKICAgICAgICB9CiAgICAgICAgJHJlc3VsdCA9IFxwcmVnX3JlcGxhY2VfY2FsbGJhY2soJHBhdHRlcm4sICRyZXBsYWNlbWVudCwgJHN1YmplY3QsICRsaW1pdCwgJGNvdW50LCAkZmxhZ3MgfCBcUFJFR19VTk1BVENIRURfQVNfTlVMTCk7CiAgICAgICAgaWYgKCRyZXN1bHQgPT09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgUGNyZUV4Y2VwdGlvbjo6ZnJvbUZ1bmN0aW9uKCdwcmVnX3JlcGxhY2VfY2FsbGJhY2snLCAkcGF0dGVybik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQogICAgLyoqCiAgICAgKiBWYXJpYW50IG9mIGByZXBsYWNlQ2FsbGJhY2soKWAgd2hpY2ggb3V0cHV0cyBub24tbnVsbCBtYXRjaGVzIChvciB0aHJvd3MpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0dGVybgogICAgICogQHBhcmFtICgkZmxhZ3MgaXMgUFJFR19PRkZTRVRfQ0FQVFVSRSA/IChjYWxsYWJsZShhcnJheTxpbnR8c3RyaW5nLCBhcnJheXtzdHJpbmcsIGludDwwLCBtYXg+fT4pOiBzdHJpbmcpIDogY2FsbGFibGUoYXJyYXk8aW50fHN0cmluZywgc3RyaW5nPik6IHN0cmluZykgJHJlcGxhY2VtZW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdWJqZWN0CiAgICAgKiBAcGFyYW0gaW50ICRjb3VudCBTZXQgYnkgbWV0aG9kCiAgICAgKiBAcGFyYW0gaW50LW1hc2s8UFJFR19VTk1BVENIRURfQVNfTlVMTHxQUkVHX09GRlNFVF9DQVBUVVJFPiAkZmxhZ3MgUFJFR19PRkZTRVRfQ0FQVFVSRSBpcyBzdXBwb3J0ZWQsIFBSRUdfVU5NQVRDSEVEX0FTX05VTEwgaXMgYWx3YXlzIHNldAogICAgICoKICAgICAqIEBwYXJhbS1vdXQgaW50PDAsIG1heD4gJGNvdW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVwbGFjZUNhbGxiYWNrU3RyaWN0R3JvdXBzKHN0cmluZyAkcGF0dGVybiwgY2FsbGFibGUgJHJlcGxhY2VtZW50LCAkc3ViamVjdCwgaW50ICRsaW1pdCA9IC0xLCA/aW50ICYkY291bnQgPSBudWxsLCBpbnQgJGZsYWdzID0gMCkgOiBzdHJpbmcKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6cmVwbGFjZUNhbGxiYWNrKCRwYXR0ZXJuLCBmdW5jdGlvbiAoYXJyYXkgJG1hdGNoZXMpIHVzZSgkcGF0dGVybiwgJHJlcGxhY2VtZW50KSB7CiAgICAgICAgICAgIHJldHVybiAkcmVwbGFjZW1lbnQoc2VsZjo6ZW5mb3JjZU5vbk51bGxNYXRjaGVzKCRwYXR0ZXJuLCAkbWF0Y2hlcywgJ3JlcGxhY2VDYWxsYmFjaycpKTsKICAgICAgICB9LCAkc3ViamVjdCwgJGxpbWl0LCAkY291bnQsICRmbGFncyk7CiAgICB9CiAgICAvKioKICAgICAqIEBwYXJhbSAoJGZsYWdzIGlzIFBSRUdfT0ZGU0VUX0NBUFRVUkUgPyAoYXJyYXk8c3RyaW5nLCBjYWxsYWJsZShhcnJheTxpbnR8c3RyaW5nLCBhcnJheXtzdHJpbmd8bnVsbCwgaW50PC0xLCBtYXg+fT4pOiBzdHJpbmc+KSA6IGFycmF5PHN0cmluZywgY2FsbGFibGUoYXJyYXk8aW50fHN0cmluZywgc3RyaW5nfG51bGw+KTogc3RyaW5nPikgJHBhdHRlcm4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHN1YmplY3QKICAgICAqIEBwYXJhbSBpbnQgICAgJGNvdW50IFNldCBieSBtZXRob2QKICAgICAqIEBwYXJhbSBpbnQtbWFzazxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMfFBSRUdfT0ZGU0VUX0NBUFRVUkU+ICRmbGFncyBQUkVHX09GRlNFVF9DQVBUVVJFIGlzIHN1cHBvcnRlZCwgUFJFR19VTk1BVENIRURfQVNfTlVMTCBpcyBhbHdheXMgc2V0CiAgICAgKgogICAgICogQHBhcmFtLW91dCBpbnQ8MCwgbWF4PiAkY291bnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXBsYWNlQ2FsbGJhY2tBcnJheShhcnJheSAkcGF0dGVybiwgJHN1YmplY3QsIGludCAkbGltaXQgPSAtMSwgP2ludCAmJGNvdW50ID0gbnVsbCwgaW50ICRmbGFncyA9IDApIDogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCFcaXNfc2NhbGFyKCRzdWJqZWN0KSkgewogICAgICAgICAgICBpZiAoXGlzX2FycmF5KCRzdWJqZWN0KSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3RhdGljOjpBUlJBWV9NU0cpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IG5ldyBcVHlwZUVycm9yKFxzcHJpbnRmKHN0YXRpYzo6SU5WQUxJRF9UWVBFX01TRywgXGdldHR5cGUoJHN1YmplY3QpKSk7CiAgICAgICAgfQogICAgICAgICRyZXN1bHQgPSBccHJlZ19yZXBsYWNlX2NhbGxiYWNrX2FycmF5KCRwYXR0ZXJuLCAkc3ViamVjdCwgJGxpbWl0LCAkY291bnQsICRmbGFncyB8IFxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMKTsKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gbnVsbCkgewogICAgICAgICAgICAkcGF0dGVybiA9IFxhcnJheV9rZXlzKCRwYXR0ZXJuKTsKICAgICAgICAgICAgdGhyb3cgUGNyZUV4Y2VwdGlvbjo6ZnJvbUZ1bmN0aW9uKCdwcmVnX3JlcGxhY2VfY2FsbGJhY2tfYXJyYXknLCAkcGF0dGVybik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50LW1hc2s8UFJFR19TUExJVF9OT19FTVBUWXxQUkVHX1NQTElUX0RFTElNX0NBUFRVUkV8UFJFR19TUExJVF9PRkZTRVRfQ0FQVFVSRT4gJGZsYWdzIFBSRUdfU1BMSVRfTk9fRU1QVFkgb3IgUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFCiAgICAgKiBAcmV0dXJuIGxpc3Q8c3RyaW5nPgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNwbGl0KHN0cmluZyAkcGF0dGVybiwgc3RyaW5nICRzdWJqZWN0LCBpbnQgJGxpbWl0ID0gLTEsIGludCAkZmxhZ3MgPSAwKSA6IGFycmF5CiAgICB7CiAgICAgICAgaWYgKCgkZmxhZ3MgJiBcUFJFR19TUExJVF9PRkZTRVRfQ0FQVFVSRSkgIT09IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1BSRUdfU1BMSVRfT0ZGU0VUX0NBUFRVUkUgaXMgbm90IHN1cHBvcnRlZCBhcyBpdCBjaGFuZ2VzIHRoZSB0eXBlIG9mICRtYXRjaGVzLCB1c2Ugc3BsaXRXaXRoT2Zmc2V0cygpIGluc3RlYWQnKTsKICAgICAgICB9CiAgICAgICAgJHJlc3VsdCA9IFxwcmVnX3NwbGl0KCRwYXR0ZXJuLCAkc3ViamVjdCwgJGxpbWl0LCAkZmxhZ3MpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBcZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgUGNyZUV4Y2VwdGlvbjo6ZnJvbUZ1bmN0aW9uKCdwcmVnX3NwbGl0JywgJHBhdHRlcm4pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtIGludC1tYXNrPFBSRUdfU1BMSVRfTk9fRU1QVFl8UFJFR19TUExJVF9ERUxJTV9DQVBUVVJFfFBSRUdfU1BMSVRfT0ZGU0VUX0NBUFRVUkU+ICRmbGFncyBQUkVHX1NQTElUX05PX0VNUFRZIG9yIFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSwgUFJFR19TUExJVF9PRkZTRVRfQ0FQVFVSRSBpcyBhbHdheXMgc2V0CiAgICAgKiBAcmV0dXJuIGxpc3Q8YXJyYXl7c3RyaW5nLCBpbnR9PgogICAgICogQHBocHN0YW4tcmV0dXJuIGxpc3Q8YXJyYXl7c3RyaW5nLCBpbnQ8MCwgbWF4Pn0+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3BsaXRXaXRoT2Zmc2V0cyhzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkc3ViamVjdCwgaW50ICRsaW1pdCA9IC0xLCBpbnQgJGZsYWdzID0gMCkgOiBhcnJheQogICAgewogICAgICAgICRyZXN1bHQgPSBccHJlZ19zcGxpdCgkcGF0dGVybiwgJHN1YmplY3QsICRsaW1pdCwgJGZsYWdzIHwgXFBSRUdfU1BMSVRfT0ZGU0VUX0NBUFRVUkUpOwogICAgICAgIGlmICgkcmVzdWx0ID09PSBcZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgUGNyZUV4Y2VwdGlvbjo6ZnJvbUZ1bmN0aW9uKCdwcmVnX3NwbGl0JywgJHBhdHRlcm4pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KICAgIC8qKgogICAgICogQHRlbXBsYXRlIFQgb2Ygc3RyaW5nfFxTdHJpbmdhYmxlCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJHBhdHRlcm4KICAgICAqIEBwYXJhbSBhcnJheTxUPiAkYXJyYXkKICAgICAqIEBwYXJhbSBpbnQtbWFzazxQUkVHX0dSRVBfSU5WRVJUPiAkZmxhZ3MgUFJFR19HUkVQX0lOVkVSVAogICAgICogQHJldHVybiBhcnJheTxUPgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdyZXAoc3RyaW5nICRwYXR0ZXJuLCBhcnJheSAkYXJyYXksIGludCAkZmxhZ3MgPSAwKSA6IGFycmF5CiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFxwcmVnX2dyZXAoJHBhdHRlcm4sICRhcnJheSwgJGZsYWdzKTsKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gXGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IFBjcmVFeGNlcHRpb246OmZyb21GdW5jdGlvbigncHJlZ19ncmVwJywgJHBhdHRlcm4pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KICAgIC8qKgogICAgICogVmFyaWFudCBvZiBtYXRjaCgpIHdoaWNoIHJldHVybnMgYSBib29sIGluc3RlYWQgb2YgaW50CiAgICAgKgogICAgICogQHBhcmFtIG5vbi1lbXB0eS1zdHJpbmcgICAkcGF0dGVybgogICAgICogQHBhcmFtIGFycmF5PG1peGVkPiAkbWF0Y2hlcyBTZXQgYnkgbWV0aG9kCiAgICAgKiBAcGFyYW0gaW50LW1hc2s8UFJFR19VTk1BVENIRURfQVNfTlVMTD4gJGZsYWdzIFBSRUdfVU5NQVRDSEVEX0FTX05VTEwgaXMgYWx3YXlzIHNldCwgbm8gb3RoZXIgZmxhZ3MgYXJlIHN1cHBvcnRlZAogICAgICoKICAgICAqIEBwYXJhbS1vdXQgYXJyYXk8aW50fHN0cmluZywgc3RyaW5nfG51bGw+ICRtYXRjaGVzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNNYXRjaChzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkc3ViamVjdCwgP2FycmF5ICYkbWF0Y2hlcyA9IG51bGwsIGludCAkZmxhZ3MgPSAwLCBpbnQgJG9mZnNldCA9IDApIDogYm9vbAogICAgewogICAgICAgIHJldHVybiAoYm9vbCkgc3RhdGljOjptYXRjaCgkcGF0dGVybiwgJHN1YmplY3QsICRtYXRjaGVzLCAkZmxhZ3MsICRvZmZzZXQpOwogICAgfQogICAgLyoqCiAgICAgKiBWYXJpYW50IG9mIGBpc01hdGNoKClgIHdoaWNoIG91dHB1dHMgbm9uLW51bGwgbWF0Y2hlcyAob3IgdGhyb3dzKQogICAgICoKICAgICAqIEBwYXJhbSBub24tZW1wdHktc3RyaW5nICRwYXR0ZXJuCiAgICAgKiBAcGFyYW0gYXJyYXk8bWl4ZWQ+ICRtYXRjaGVzIFNldCBieSBtZXRob2QKICAgICAqIEBwYXJhbSBpbnQtbWFzazxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMPiAkZmxhZ3MgUFJFR19VTk1BVENIRURfQVNfTlVMTCBpcyBhbHdheXMgc2V0LCBubyBvdGhlciBmbGFncyBhcmUgc3VwcG9ydGVkCiAgICAgKiBAdGhyb3dzIFVuZXhwZWN0ZWROdWxsTWF0Y2hFeGNlcHRpb24KICAgICAqCiAgICAgKiBAcGFyYW0tb3V0IGFycmF5PGludHxzdHJpbmcsIHN0cmluZz4gJG1hdGNoZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc01hdGNoU3RyaWN0R3JvdXBzKHN0cmluZyAkcGF0dGVybiwgc3RyaW5nICRzdWJqZWN0LCA/YXJyYXkgJiRtYXRjaGVzID0gbnVsbCwgaW50ICRmbGFncyA9IDAsIGludCAkb2Zmc2V0ID0gMCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIChib29sKSBzZWxmOjptYXRjaFN0cmljdEdyb3VwcygkcGF0dGVybiwgJHN1YmplY3QsICRtYXRjaGVzLCAkZmxhZ3MsICRvZmZzZXQpOwogICAgfQogICAgLyoqCiAgICAgKiBWYXJpYW50IG9mIG1hdGNoQWxsKCkgd2hpY2ggcmV0dXJucyBhIGJvb2wgaW5zdGVhZCBvZiBpbnQKICAgICAqCiAgICAgKiBAcGFyYW0gbm9uLWVtcHR5LXN0cmluZyAgICRwYXR0ZXJuCiAgICAgKiBAcGFyYW0gYXJyYXk8bWl4ZWQ+ICRtYXRjaGVzIFNldCBieSBtZXRob2QKICAgICAqIEBwYXJhbSBpbnQtbWFzazxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMPiAkZmxhZ3MgUFJFR19VTk1BVENIRURfQVNfTlVMTCBpcyBhbHdheXMgc2V0LCBubyBvdGhlciBmbGFncyBhcmUgc3VwcG9ydGVkCiAgICAgKgogICAgICogQHBhcmFtLW91dCBhcnJheTxpbnR8c3RyaW5nLCBsaXN0PHN0cmluZ3xudWxsPj4gJG1hdGNoZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc01hdGNoQWxsKHN0cmluZyAkcGF0dGVybiwgc3RyaW5nICRzdWJqZWN0LCA/YXJyYXkgJiRtYXRjaGVzID0gbnVsbCwgaW50ICRmbGFncyA9IDAsIGludCAkb2Zmc2V0ID0gMCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIChib29sKSBzdGF0aWM6Om1hdGNoQWxsKCRwYXR0ZXJuLCAkc3ViamVjdCwgJG1hdGNoZXMsICRmbGFncywgJG9mZnNldCk7CiAgICB9CiAgICAvKioKICAgICAqIFZhcmlhbnQgb2YgYGlzTWF0Y2hBbGwoKWAgd2hpY2ggb3V0cHV0cyBub24tbnVsbCBtYXRjaGVzIChvciB0aHJvd3MpCiAgICAgKgogICAgICogQHBhcmFtIG5vbi1lbXB0eS1zdHJpbmcgJHBhdHRlcm4KICAgICAqIEBwYXJhbSBhcnJheTxtaXhlZD4gJG1hdGNoZXMgU2V0IGJ5IG1ldGhvZAogICAgICogQHBhcmFtIGludC1tYXNrPFBSRUdfVU5NQVRDSEVEX0FTX05VTEw+ICRmbGFncyBQUkVHX1VOTUFUQ0hFRF9BU19OVUxMIGlzIGFsd2F5cyBzZXQsIG5vIG90aGVyIGZsYWdzIGFyZSBzdXBwb3J0ZWQKICAgICAqCiAgICAgKiBAcGFyYW0tb3V0IGFycmF5PGludHxzdHJpbmcsIGxpc3Q8c3RyaW5nPj4gJG1hdGNoZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc01hdGNoQWxsU3RyaWN0R3JvdXBzKHN0cmluZyAkcGF0dGVybiwgc3RyaW5nICRzdWJqZWN0LCA/YXJyYXkgJiRtYXRjaGVzID0gbnVsbCwgaW50ICRmbGFncyA9IDAsIGludCAkb2Zmc2V0ID0gMCkgOiBib29sCiAgICB7CiAgICAgICAgcmV0dXJuIChib29sKSBzZWxmOjptYXRjaEFsbFN0cmljdEdyb3VwcygkcGF0dGVybiwgJHN1YmplY3QsICRtYXRjaGVzLCAkZmxhZ3MsICRvZmZzZXQpOwogICAgfQogICAgLyoqCiAgICAgKiBWYXJpYW50IG9mIG1hdGNoV2l0aE9mZnNldHMoKSB3aGljaCByZXR1cm5zIGEgYm9vbCBpbnN0ZWFkIG9mIGludAogICAgICoKICAgICAqIFJ1bnMgcHJlZ19tYXRjaCB3aXRoIFBSRUdfT0ZGU0VUX0NBUFRVUkUKICAgICAqCiAgICAgKiBAcGFyYW0gbm9uLWVtcHR5LXN0cmluZyAgICRwYXR0ZXJuCiAgICAgKiBAcGFyYW0gYXJyYXk8bWl4ZWQ+ICRtYXRjaGVzIFNldCBieSBtZXRob2QKICAgICAqIEBwYXJhbSBpbnQtbWFzazxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMPiAkZmxhZ3MgUFJFR19VTk1BVENIRURfQVNfTlVMTCBpcyBhbHdheXMgc2V0LCBubyBvdGhlciBmbGFncyBhcmUgc3VwcG9ydGVkCiAgICAgKgogICAgICogQHBhcmFtLW91dCBhcnJheTxpbnR8c3RyaW5nLCBhcnJheXtzdHJpbmd8bnVsbCwgaW50PC0xLCBtYXg+fT4gJG1hdGNoZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc01hdGNoV2l0aE9mZnNldHMoc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHN1YmplY3QsID9hcnJheSAmJG1hdGNoZXMsIGludCAkZmxhZ3MgPSAwLCBpbnQgJG9mZnNldCA9IDApIDogYm9vbAogICAgewogICAgICAgIHJldHVybiAoYm9vbCkgc3RhdGljOjptYXRjaFdpdGhPZmZzZXRzKCRwYXR0ZXJuLCAkc3ViamVjdCwgJG1hdGNoZXMsICRmbGFncywgJG9mZnNldCk7CiAgICB9CiAgICAvKioKICAgICAqIFZhcmlhbnQgb2YgbWF0Y2hBbGxXaXRoT2Zmc2V0cygpIHdoaWNoIHJldHVybnMgYSBib29sIGluc3RlYWQgb2YgaW50CiAgICAgKgogICAgICogUnVucyBwcmVnX21hdGNoX2FsbCB3aXRoIFBSRUdfT0ZGU0VUX0NBUFRVUkUKICAgICAqCiAgICAgKiBAcGFyYW0gbm9uLWVtcHR5LXN0cmluZyAgICRwYXR0ZXJuCiAgICAgKiBAcGFyYW0gYXJyYXk8bWl4ZWQ+ICRtYXRjaGVzIFNldCBieSBtZXRob2QKICAgICAqIEBwYXJhbSBpbnQtbWFzazxQUkVHX1VOTUFUQ0hFRF9BU19OVUxMPiAkZmxhZ3MgUFJFR19VTk1BVENIRURfQVNfTlVMTCBpcyBhbHdheXMgc2V0LCBubyBvdGhlciBmbGFncyBhcmUgc3VwcG9ydGVkCiAgICAgKgogICAgICogQHBhcmFtLW91dCBhcnJheTxpbnR8c3RyaW5nLCBsaXN0PGFycmF5e3N0cmluZ3xudWxsLCBpbnQ8LTEsIG1heD59Pj4gJG1hdGNoZXMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc01hdGNoQWxsV2l0aE9mZnNldHMoc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHN1YmplY3QsID9hcnJheSAmJG1hdGNoZXMsIGludCAkZmxhZ3MgPSAwLCBpbnQgJG9mZnNldCA9IDApIDogYm9vbAogICAgewogICAgICAgIHJldHVybiAoYm9vbCkgc3RhdGljOjptYXRjaEFsbFdpdGhPZmZzZXRzKCRwYXR0ZXJuLCAkc3ViamVjdCwgJG1hdGNoZXMsICRmbGFncywgJG9mZnNldCk7CiAgICB9CiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjaGVja09mZnNldENhcHR1cmUoaW50ICRmbGFncywgc3RyaW5nICR1c2VGdW5jdGlvbk5hbWUpIDogdm9pZAogICAgewogICAgICAgIGlmICgoJGZsYWdzICYgXFBSRUdfT0ZGU0VUX0NBUFRVUkUpICE9PSAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdQUkVHX09GRlNFVF9DQVBUVVJFIGlzIG5vdCBzdXBwb3J0ZWQgYXMgaXQgY2hhbmdlcyB0aGUgdHlwZSBvZiAkbWF0Y2hlcywgdXNlICcgLiAkdXNlRnVuY3Rpb25OYW1lIC4gJygpIGluc3RlYWQnKTsKICAgICAgICB9CiAgICB9CiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjaGVja1NldE9yZGVyKGludCAkZmxhZ3MpIDogdm9pZAogICAgewogICAgICAgIGlmICgoJGZsYWdzICYgXFBSRUdfU0VUX09SREVSKSAhPT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignUFJFR19TRVRfT1JERVIgaXMgbm90IHN1cHBvcnRlZCBhcyBpdCBjaGFuZ2VzIHRoZSB0eXBlIG9mICRtYXRjaGVzJyk7CiAgICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXk8aW50fHN0cmluZywgc3RyaW5nfG51bGx8YXJyYXl7c3RyaW5nfG51bGwsIGludH0+ICRtYXRjaGVzCiAgICAgKiBAcmV0dXJuIGFycmF5PGludHxzdHJpbmcsIHN0cmluZz4KICAgICAqIEB0aHJvd3MgVW5leHBlY3RlZE51bGxNYXRjaEV4Y2VwdGlvbgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBlbmZvcmNlTm9uTnVsbE1hdGNoZXMoc3RyaW5nICRwYXR0ZXJuLCBhcnJheSAkbWF0Y2hlcywgc3RyaW5nICR2YXJpYW50TWV0aG9kKQogICAgewogICAgICAgIGZvcmVhY2ggKCRtYXRjaGVzIGFzICRncm91cCA9PiAkbWF0Y2gpIHsKICAgICAgICAgICAgaWYgKFxpc19zdHJpbmcoJG1hdGNoKSB8fCBcaXNfYXJyYXkoJG1hdGNoKSAmJiBcaXNfc3RyaW5nKCRtYXRjaFswXSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkTnVsbE1hdGNoRXhjZXB0aW9uKCdQYXR0ZXJuICInIC4gJHBhdHRlcm4gLiAnIiBoYWQgYW4gdW5leHBlY3RlZCB1bm1hdGNoZWQgZ3JvdXAgIicgLiAkZ3JvdXAgLiAnIiwgbWFrZSBzdXJlIHRoZSBwYXR0ZXJuIGFsd2F5cyBtYXRjaGVzIG9yIHVzZSAnIC4gJHZhcmlhbnRNZXRob2QgLiAnKCkgaW5zdGVhZC4nKTsKICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8c3RyaW5nPiAqLwogICAgICAgIHJldHVybiAkbWF0Y2hlczsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5PGludHxzdHJpbmcsIGxpc3Q8c3RyaW5nfG51bGw+PiAkbWF0Y2hlcwogICAgICogQHJldHVybiBhcnJheTxpbnR8c3RyaW5nLCBsaXN0PHN0cmluZz4+CiAgICAgKiBAdGhyb3dzIFVuZXhwZWN0ZWROdWxsTWF0Y2hFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZW5mb3JjZU5vbk51bGxNYXRjaEFsbChzdHJpbmcgJHBhdHRlcm4sIGFycmF5ICRtYXRjaGVzLCBzdHJpbmcgJHZhcmlhbnRNZXRob2QpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJG1hdGNoZXMgYXMgJGdyb3VwID0+ICRncm91cE1hdGNoZXMpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGdyb3VwTWF0Y2hlcyBhcyAkbWF0Y2gpIHsKICAgICAgICAgICAgICAgIGlmIChudWxsID09PSAkbWF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZE51bGxNYXRjaEV4Y2VwdGlvbignUGF0dGVybiAiJyAuICRwYXR0ZXJuIC4gJyIgaGFkIGFuIHVuZXhwZWN0ZWQgdW5tYXRjaGVkIGdyb3VwICInIC4gJGdyb3VwIC4gJyIsIG1ha2Ugc3VyZSB0aGUgcGF0dGVybiBhbHdheXMgbWF0Y2hlcyBvciB1c2UgJyAuICR2YXJpYW50TWV0aG9kIC4gJygpIGluc3RlYWQuJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqIEB2YXIgYXJyYXk8aW50fHN0cmluZywgbGlzdDxzdHJpbmc+PiAqLwogICAgICAgIHJldHVybiAkbWF0Y2hlczsKICAgIH0KfQo8P3BocAoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgY29tcG9zZXIvcGNyZS4KICoKICogKGMpIENvbXBvc2VyIDxodHRwczovL2dpdGh1Yi5jb20vY29tcG9zZXI+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3CiAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxQY3JlOwoKY2xhc3MgVW5leHBlY3RlZE51bGxNYXRjaEV4Y2VwdGlvbiBleHRlbmRzIFBjcmVFeGNlcHRpb24KewogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tRnVuY3Rpb24oJGZ1bmN0aW9uLCAkcGF0dGVybikKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdmcm9tRnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgb24gJyAuIHNlbGY6OmNsYXNzIC4gJywgdXNlICcgLiBQY3JlRXhjZXB0aW9uOjpjbGFzcyk7CiAgICB9Cn0KPD9waHAKCi8vIGF1dG9sb2FkX3BzcjQucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCiR2ZW5kb3JEaXIgPSBkaXJuYW1lKF9fRElSX18pOwokYmFzZURpciA9IGRpcm5hbWUoJHZlbmRvckRpcik7CgpyZXR1cm4gYXJyYXkoCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxQb2x5ZmlsbFxcQ3R5cGVcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZScpLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29udHJhY3RzXFxTZXJ2aWNlXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvc2VydmljZS1jb250cmFjdHMnKSwKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcU3RyaW5nXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvc3RyaW5nJyksCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3ltZm9ueS9wcm9jZXNzJyksCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9zeW1mb255L2ZpbmRlcicpLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZScpLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFN0cmVhbVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9yZWFjdC9zdHJlYW0vc3JjJyksCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU29ja2V0XFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3JlYWN0L3NvY2tldC9zcmMnKSwKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxQcm9taXNlXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3JlYWN0L3Byb21pc2Uvc3JjJyksCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYycpLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEV2ZW50TG9vcFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9yZWFjdC9ldmVudC1sb29wL3NyYycpLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9yZWFjdC9kbnMvc3JjJyksCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcQ2hpbGRQcm9jZXNzXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3JlYWN0L2NoaWxkLXByb2Nlc3Mvc3JjJyksCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcQ2FjaGVcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvcmVhY3QvY2FjaGUvc3JjJyksCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXExvZ1xcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9wc3IvbG9nL3NyYycpLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUHNyXFxIdHRwXFxNZXNzYWdlXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3Bzci9odHRwLW1lc3NhZ2Uvc3JjJyksCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXENvbnRhaW5lclxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9wc3IvY29udGFpbmVyL3NyYycpLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMnKSwKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZ1xcSHR0cFxcTWVzc2FnZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9maWcvaHR0cC1tZXNzYWdlLXV0aWwvc3JjJyksCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMnKSwKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEV2ZW5lbWVudFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9ldmVuZW1lbnQvZXZlbmVtZW50L3NyYycpLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFhkZWJ1Z0hhbmRsZXJcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvY29tcG9zZXIveGRlYnVnLWhhbmRsZXIvc3JjJyksCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcU2VtdmVyXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMnKSwKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxQY3JlXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3BjcmUvc3JjJyksCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcQ2FCdW5kbGVcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvY29tcG9zZXIvY2EtYnVuZGxlL3NyYycpLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ2x1ZVxcUmVhY3RcXE5ESnNvblxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9jbHVlL25kanNvbi1yZWFjdC9zcmMnKSwKICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODFcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MScpLAogICAgJ1N5bWZvbnlcXFBvbHlmaWxsXFxQaHA4MFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwJyksCiAgICAnU3ltZm9ueVxcUG9seWZpbGxcXFBocDc0XFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwNzQnKSwKICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwNzNcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA3MycpLAogICAgJ1N5bWZvbnlcXFBvbHlmaWxsXFxNYnN0cmluZ1xcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nJyksCiAgICAnU3ltZm9ueVxcUG9seWZpbGxcXEludGxcXE5vcm1hbGl6ZXJcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLW5vcm1hbGl6ZXInKSwKICAgICdTeW1mb255XFxQb2x5ZmlsbFxcSW50bFxcR3JhcGhlbWVcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLWdyYXBoZW1lJyksCiAgICAnUGhwUGFyc2VyXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlcicpLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjJyksCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjJyksCiAgICAnUEhQU3RhblxcJyA9PiBhcnJheSgkYmFzZURpciAuICcvc3JjJyksCiAgICAnSG9hXFxaZm9ybWF0XFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2hvYS96Zm9ybWF0JyksCiAgICAnSG9hXFxWaXNpdG9yXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2hvYS92aXNpdG9yJyksCiAgICAnSG9hXFxVc3RyaW5nXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2hvYS91c3RyaW5nJyksCiAgICAnSG9hXFxTdHJlYW1cXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbScpLAogICAgJ0hvYVxcUmVnZXhcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvaG9hL3JlZ2V4JyksCiAgICAnSG9hXFxQcm90b2NvbFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9ob2EvcHJvdG9jb2wnKSwKICAgICdIb2FcXE1hdGhcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvaG9hL21hdGgnKSwKICAgICdIb2FcXEl0ZXJhdG9yXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2hvYS9pdGVyYXRvcicpLAogICAgJ0hvYVxcRmlsZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9ob2EvZmlsZScpLAogICAgJ0hvYVxcRXhjZXB0aW9uXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2hvYS9leGNlcHRpb24nKSwKICAgICdIb2FcXEV2ZW50XFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2hvYS9ldmVudCcpLAogICAgJ0hvYVxcQ29uc2lzdGVuY3lcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvaG9hL2NvbnNpc3RlbmN5JyksCiAgICAnSG9hXFxDb21waWxlclxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXInKSwKKTsKPD9waHAKCi8vIGF1dG9sb2FkX2NsYXNzbWFwLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokdmVuZG9yRGlyID0gZGlybmFtZShfX0RJUl9fKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAogICAgJ0F0dHJpYnV0ZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvQXR0cmlidXRlLnBocCcsCiAgICAnQ1VSTFN0cmluZ0ZpbGUnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvUmVzb3VyY2VzL3N0dWJzL0NVUkxTdHJpbmdGaWxlLnBocCcsCiAgICAnQ29tcG9zZXJcXEluc3RhbGxlZFZlcnNpb25zJyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci9JbnN0YWxsZWRWZXJzaW9ucy5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXEJpblxcUHAnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9jb21waWxlci9CaW4vUHAucGhwJywKICAgICdIb2FcXENvbXBpbGVyXFxFeGNlcHRpb25cXEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvaG9hL2NvbXBpbGVyL0V4Y2VwdGlvbi9FeGNlcHRpb24ucGhwJywKICAgICdIb2FcXENvbXBpbGVyXFxFeGNlcHRpb25cXEZpbmFsU3RhdGVIYXNOb3RCZWVuUmVhY2hlZCcgPT4gJHZlbmRvckRpciAuICcvaG9hL2NvbXBpbGVyL0V4Y2VwdGlvbi9GaW5hbFN0YXRlSGFzTm90QmVlblJlYWNoZWQucGhwJywKICAgICdIb2FcXENvbXBpbGVyXFxFeGNlcHRpb25cXElsbGVnYWxUb2tlbicgPT4gJHZlbmRvckRpciAuICcvaG9hL2NvbXBpbGVyL0V4Y2VwdGlvbi9JbGxlZ2FsVG9rZW4ucGhwJywKICAgICdIb2FcXENvbXBpbGVyXFxFeGNlcHRpb25cXExleGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXIvRXhjZXB0aW9uL0xleGVyLnBocCcsCiAgICAnSG9hXFxDb21waWxlclxcRXhjZXB0aW9uXFxSdWxlJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXIvRXhjZXB0aW9uL1J1bGUucGhwJywKICAgICdIb2FcXENvbXBpbGVyXFxFeGNlcHRpb25cXFVuZXhwZWN0ZWRUb2tlbicgPT4gJHZlbmRvckRpciAuICcvaG9hL2NvbXBpbGVyL0V4Y2VwdGlvbi9VbmV4cGVjdGVkVG9rZW4ucGhwJywKICAgICdIb2FcXENvbXBpbGVyXFxFeGNlcHRpb25cXFVucmVjb2duaXplZFRva2VuJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXIvRXhjZXB0aW9uL1VucmVjb2duaXplZFRva2VuLnBocCcsCiAgICAnSG9hXFxDb21waWxlclxcTGwxJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXIvTGwxLnBocCcsCiAgICAnSG9hXFxDb21waWxlclxcTGxrXFxMZXhlcicgPT4gJHZlbmRvckRpciAuICcvaG9hL2NvbXBpbGVyL0xsay9MZXhlci5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcTGxrJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXIvTGxrL0xsay5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcUGFyc2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXIvTGxrL1BhcnNlci5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcUnVsZVxcQW5hbHl6ZXInID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9jb21waWxlci9MbGsvUnVsZS9BbmFseXplci5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcUnVsZVxcQ2hvaWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXIvTGxrL1J1bGUvQ2hvaWNlLnBocCcsCiAgICAnSG9hXFxDb21waWxlclxcTGxrXFxSdWxlXFxDb25jYXRlbmF0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXIvTGxrL1J1bGUvQ29uY2F0ZW5hdGlvbi5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcUnVsZVxcRWt6aXQnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9jb21waWxlci9MbGsvUnVsZS9Fa3ppdC5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcUnVsZVxcRW50cnknID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9jb21waWxlci9MbGsvUnVsZS9FbnRyeS5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcUnVsZVxcSW52b2NhdGlvbicgPT4gJHZlbmRvckRpciAuICcvaG9hL2NvbXBpbGVyL0xsay9SdWxlL0ludm9jYXRpb24ucGhwJywKICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFJ1bGVcXFJlcGV0aXRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9jb21waWxlci9MbGsvUnVsZS9SZXBldGl0aW9uLnBocCcsCiAgICAnSG9hXFxDb21waWxlclxcTGxrXFxSdWxlXFxSdWxlJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXIvTGxrL1J1bGUvUnVsZS5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcUnVsZVxcVG9rZW4nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9jb21waWxlci9MbGsvUnVsZS9Ub2tlbi5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcU2FtcGxlclxcQm91bmRlZEV4aGF1c3RpdmUnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9jb21waWxlci9MbGsvU2FtcGxlci9Cb3VuZGVkRXhoYXVzdGl2ZS5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcU2FtcGxlclxcQ292ZXJhZ2UnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9jb21waWxlci9MbGsvU2FtcGxlci9Db3ZlcmFnZS5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcU2FtcGxlclxcRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXIvTGxrL1NhbXBsZXIvRXhjZXB0aW9uLnBocCcsCiAgICAnSG9hXFxDb21waWxlclxcTGxrXFxTYW1wbGVyXFxTYW1wbGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXIvTGxrL1NhbXBsZXIvU2FtcGxlci5waHAnLAogICAgJ0hvYVxcQ29tcGlsZXJcXExsa1xcU2FtcGxlclxcVW5pZm9ybScgPT4gJHZlbmRvckRpciAuICcvaG9hL2NvbXBpbGVyL0xsay9TYW1wbGVyL1VuaWZvcm0ucGhwJywKICAgICdIb2FcXENvbXBpbGVyXFxMbGtcXFRyZWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvY29tcGlsZXIvTGxrL1RyZWVOb2RlLnBocCcsCiAgICAnSG9hXFxDb21waWxlclxcVmlzaXRvclxcRHVtcCcgPT4gJHZlbmRvckRpciAuICcvaG9hL2NvbXBpbGVyL1Zpc2l0b3IvRHVtcC5waHAnLAogICAgJ0hvYVxcQ29uc2lzdGVuY3lcXEF1dG9sb2FkZXInID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9jb25zaXN0ZW5jeS9BdXRvbG9hZGVyLnBocCcsCiAgICAnSG9hXFxDb25zaXN0ZW5jeVxcQ29uc2lzdGVuY3knID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9jb25zaXN0ZW5jeS9Db25zaXN0ZW5jeS5waHAnLAogICAgJ0hvYVxcQ29uc2lzdGVuY3lcXEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvaG9hL2NvbnNpc3RlbmN5L0V4Y2VwdGlvbi5waHAnLAogICAgJ0hvYVxcQ29uc2lzdGVuY3lcXFhjYWxsYWJsZScgPT4gJHZlbmRvckRpciAuICcvaG9hL2NvbnNpc3RlbmN5L1hjYWxsYWJsZS5waHAnLAogICAgJ0hvYVxcRXZlbnRcXEJ1Y2tldCcgPT4gJHZlbmRvckRpciAuICcvaG9hL2V2ZW50L0J1Y2tldC5waHAnLAogICAgJ0hvYVxcRXZlbnRcXEV2ZW50JyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvZXZlbnQvRXZlbnQucGhwJywKICAgICdIb2FcXEV2ZW50XFxFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9ldmVudC9FeGNlcHRpb24ucGhwJywKICAgICdIb2FcXEV2ZW50XFxMaXN0ZW5hYmxlJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvZXZlbnQvTGlzdGVuYWJsZS5waHAnLAogICAgJ0hvYVxcRXZlbnRcXExpc3RlbmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvZXZlbnQvTGlzdGVuZXIucGhwJywKICAgICdIb2FcXEV2ZW50XFxMaXN0ZW5zJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvZXZlbnQvTGlzdGVucy5waHAnLAogICAgJ0hvYVxcRXZlbnRcXFNvdXJjZScgPT4gJHZlbmRvckRpciAuICcvaG9hL2V2ZW50L1NvdXJjZS5waHAnLAogICAgJ0hvYVxcRXhjZXB0aW9uXFxFcnJvcicgPT4gJHZlbmRvckRpciAuICcvaG9hL2V4Y2VwdGlvbi9FcnJvci5waHAnLAogICAgJ0hvYVxcRXhjZXB0aW9uXFxFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9leGNlcHRpb24vRXhjZXB0aW9uLnBocCcsCiAgICAnSG9hXFxFeGNlcHRpb25cXEdyb3VwJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvZXhjZXB0aW9uL0dyb3VwLnBocCcsCiAgICAnSG9hXFxFeGNlcHRpb25cXElkbGUnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9leGNlcHRpb24vSWRsZS5waHAnLAogICAgJ0hvYVxcRmlsZVxcRGlyZWN0b3J5JyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvZmlsZS9EaXJlY3RvcnkucGhwJywKICAgICdIb2FcXEZpbGVcXEV4Y2VwdGlvblxcRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvZmlsZS9FeGNlcHRpb24vRXhjZXB0aW9uLnBocCcsCiAgICAnSG9hXFxGaWxlXFxFeGNlcHRpb25cXEZpbGVEb2VzTm90RXhpc3QnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9maWxlL0V4Y2VwdGlvbi9GaWxlRG9lc05vdEV4aXN0LnBocCcsCiAgICAnSG9hXFxGaWxlXFxGaWxlJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvZmlsZS9GaWxlLnBocCcsCiAgICAnSG9hXFxGaWxlXFxGaW5kZXInID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9maWxlL0ZpbmRlci5waHAnLAogICAgJ0hvYVxcRmlsZVxcR2VuZXJpYycgPT4gJHZlbmRvckRpciAuICcvaG9hL2ZpbGUvR2VuZXJpYy5waHAnLAogICAgJ0hvYVxcRmlsZVxcTGlua1xcTGluaycgPT4gJHZlbmRvckRpciAuICcvaG9hL2ZpbGUvTGluay9MaW5rLnBocCcsCiAgICAnSG9hXFxGaWxlXFxMaW5rXFxSZWFkJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvZmlsZS9MaW5rL1JlYWQucGhwJywKICAgICdIb2FcXEZpbGVcXExpbmtcXFJlYWRXcml0ZScgPT4gJHZlbmRvckRpciAuICcvaG9hL2ZpbGUvTGluay9SZWFkV3JpdGUucGhwJywKICAgICdIb2FcXEZpbGVcXExpbmtcXFdyaXRlJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvZmlsZS9MaW5rL1dyaXRlLnBocCcsCiAgICAnSG9hXFxGaWxlXFxSZWFkJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvZmlsZS9SZWFkLnBocCcsCiAgICAnSG9hXFxGaWxlXFxSZWFkV3JpdGUnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9maWxlL1JlYWRXcml0ZS5waHAnLAogICAgJ0hvYVxcRmlsZVxcU3BsRmlsZUluZm8nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9maWxlL1NwbEZpbGVJbmZvLnBocCcsCiAgICAnSG9hXFxGaWxlXFxUZW1wb3JhcnlcXFJlYWQnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9maWxlL1RlbXBvcmFyeS9SZWFkLnBocCcsCiAgICAnSG9hXFxGaWxlXFxUZW1wb3JhcnlcXFJlYWRXcml0ZScgPT4gJHZlbmRvckRpciAuICcvaG9hL2ZpbGUvVGVtcG9yYXJ5L1JlYWRXcml0ZS5waHAnLAogICAgJ0hvYVxcRmlsZVxcVGVtcG9yYXJ5XFxUZW1wb3JhcnknID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9maWxlL1RlbXBvcmFyeS9UZW1wb3JhcnkucGhwJywKICAgICdIb2FcXEZpbGVcXFRlbXBvcmFyeVxcV3JpdGUnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9maWxlL1RlbXBvcmFyeS9Xcml0ZS5waHAnLAogICAgJ0hvYVxcRmlsZVxcV2F0Y2hlcicgPT4gJHZlbmRvckRpciAuICcvaG9hL2ZpbGUvV2F0Y2hlci5waHAnLAogICAgJ0hvYVxcRmlsZVxcV3JpdGUnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9maWxlL1dyaXRlLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcQWdncmVnYXRlJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvQWdncmVnYXRlLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcQXBwZW5kJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvQXBwZW5kLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcQnVmZmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvQnVmZmVyLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcQ2FsbGJhY2tGaWx0ZXInID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9pdGVyYXRvci9DYWxsYmFja0ZpbHRlci5waHAnLAogICAgJ0hvYVxcSXRlcmF0b3JcXENhbGxiYWNrR2VuZXJhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvQ2FsbGJhY2tHZW5lcmF0b3IucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxDb3VudGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvQ291bnRlci5waHAnLAogICAgJ0hvYVxcSXRlcmF0b3JcXERlbXVsdGlwbGV4ZXInID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9pdGVyYXRvci9EZW11bHRpcGxleGVyLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcRGlyZWN0b3J5JyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvRGlyZWN0b3J5LnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvRXhjZXB0aW9uLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcRmlsZVN5c3RlbScgPT4gJHZlbmRvckRpciAuICcvaG9hL2l0ZXJhdG9yL0ZpbGVTeXN0ZW0ucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxGaWx0ZXInID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9pdGVyYXRvci9GaWx0ZXIucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxHbG9iJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvR2xvYi5waHAnLAogICAgJ0hvYVxcSXRlcmF0b3JcXEluZmluaXRlJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvSW5maW5pdGUucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxJdGVyYXRvcicgPT4gJHZlbmRvckRpciAuICcvaG9hL2l0ZXJhdG9yL0l0ZXJhdG9yLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcSXRlcmF0b3JJdGVyYXRvcicgPT4gJHZlbmRvckRpciAuICcvaG9hL2l0ZXJhdG9yL0l0ZXJhdG9ySXRlcmF0b3IucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxMaW1pdCcgPT4gJHZlbmRvckRpciAuICcvaG9hL2l0ZXJhdG9yL0xpbWl0LnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcTG9va2FoZWFkJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvTG9va2FoZWFkLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcTG9va2JlaGluZCcgPT4gJHZlbmRvckRpciAuICcvaG9hL2l0ZXJhdG9yL0xvb2tiZWhpbmQucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxNYXAnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9pdGVyYXRvci9NYXAucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxNb2NrJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvTW9jay5waHAnLAogICAgJ0hvYVxcSXRlcmF0b3JcXE11bHRpcGxlJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvTXVsdGlwbGUucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxOb1Jld2luZCcgPT4gJHZlbmRvckRpciAuICcvaG9hL2l0ZXJhdG9yL05vUmV3aW5kLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcT3V0ZXInID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9pdGVyYXRvci9PdXRlci5waHAnLAogICAgJ0hvYVxcSXRlcmF0b3JcXFJlY3Vyc2l2ZVxcQ2FsbGJhY2tGaWx0ZXInID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9pdGVyYXRvci9SZWN1cnNpdmUvQ2FsbGJhY2tGaWx0ZXIucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxSZWN1cnNpdmVcXERpcmVjdG9yeScgPT4gJHZlbmRvckRpciAuICcvaG9hL2l0ZXJhdG9yL1JlY3Vyc2l2ZS9EaXJlY3RvcnkucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxSZWN1cnNpdmVcXEZpbHRlcicgPT4gJHZlbmRvckRpciAuICcvaG9hL2l0ZXJhdG9yL1JlY3Vyc2l2ZS9GaWx0ZXIucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxSZWN1cnNpdmVcXEl0ZXJhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvUmVjdXJzaXZlL0l0ZXJhdG9yLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcUmVjdXJzaXZlXFxNYXAnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9pdGVyYXRvci9SZWN1cnNpdmUvTWFwLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcUmVjdXJzaXZlXFxNb2NrJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvUmVjdXJzaXZlL01vY2sucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxSZWN1cnNpdmVcXFJlY3Vyc2l2ZScgPT4gJHZlbmRvckRpciAuICcvaG9hL2l0ZXJhdG9yL1JlY3Vyc2l2ZS9SZWN1cnNpdmUucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxSZWN1cnNpdmVcXFJlZ3VsYXJFeHByZXNzaW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvUmVjdXJzaXZlL1JlZ3VsYXJFeHByZXNzaW9uLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcUmVndWxhckV4cHJlc3Npb24nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9pdGVyYXRvci9SZWd1bGFyRXhwcmVzc2lvbi5waHAnLAogICAgJ0hvYVxcSXRlcmF0b3JcXFJlcGVhdGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvaXRlcmF0b3IvUmVwZWF0ZXIucGhwJywKICAgICdIb2FcXEl0ZXJhdG9yXFxTZWVrYWJsZScgPT4gJHZlbmRvckRpciAuICcvaG9hL2l0ZXJhdG9yL1NlZWthYmxlLnBocCcsCiAgICAnSG9hXFxJdGVyYXRvclxcU3BsRmlsZUluZm8nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9pdGVyYXRvci9TcGxGaWxlSW5mby5waHAnLAogICAgJ0hvYVxcTWF0aFxcQmluXFxDYWxjJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvbWF0aC9CaW4vQ2FsYy5waHAnLAogICAgJ0hvYVxcTWF0aFxcQ29tYmluYXRvcmljc1xcQ29tYmluYXRpb25cXENhcnRlc2lhblByb2R1Y3QnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9tYXRoL0NvbWJpbmF0b3JpY3MvQ29tYmluYXRpb24vQ2FydGVzaWFuUHJvZHVjdC5waHAnLAogICAgJ0hvYVxcTWF0aFxcQ29tYmluYXRvcmljc1xcQ29tYmluYXRpb25cXENvbWJpbmF0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvbWF0aC9Db21iaW5hdG9yaWNzL0NvbWJpbmF0aW9uL0NvbWJpbmF0aW9uLnBocCcsCiAgICAnSG9hXFxNYXRoXFxDb21iaW5hdG9yaWNzXFxDb21iaW5hdGlvblxcR2FtbWEnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9tYXRoL0NvbWJpbmF0b3JpY3MvQ29tYmluYXRpb24vR2FtbWEucGhwJywKICAgICdIb2FcXE1hdGhcXENvbnRleHQnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9tYXRoL0NvbnRleHQucGhwJywKICAgICdIb2FcXE1hdGhcXEV4Y2VwdGlvblxcQWxyZWFkeURlZmluZWRDb25zdGFudCcgPT4gJHZlbmRvckRpciAuICcvaG9hL21hdGgvRXhjZXB0aW9uL0FscmVhZHlEZWZpbmVkQ29uc3RhbnQucGhwJywKICAgICdIb2FcXE1hdGhcXEV4Y2VwdGlvblxcRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvbWF0aC9FeGNlcHRpb24vRXhjZXB0aW9uLnBocCcsCiAgICAnSG9hXFxNYXRoXFxFeGNlcHRpb25cXFVua25vd25Db25zdGFudCcgPT4gJHZlbmRvckRpciAuICcvaG9hL21hdGgvRXhjZXB0aW9uL1Vua25vd25Db25zdGFudC5waHAnLAogICAgJ0hvYVxcTWF0aFxcRXhjZXB0aW9uXFxVbmtub3duRnVuY3Rpb24nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9tYXRoL0V4Y2VwdGlvbi9Vbmtub3duRnVuY3Rpb24ucGhwJywKICAgICdIb2FcXE1hdGhcXEV4Y2VwdGlvblxcVW5rbm93blZhcmlhYmxlJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvbWF0aC9FeGNlcHRpb24vVW5rbm93blZhcmlhYmxlLnBocCcsCiAgICAnSG9hXFxNYXRoXFxTYW1wbGVyXFxSYW5kb20nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9tYXRoL1NhbXBsZXIvUmFuZG9tLnBocCcsCiAgICAnSG9hXFxNYXRoXFxTYW1wbGVyXFxTYW1wbGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvbWF0aC9TYW1wbGVyL1NhbXBsZXIucGhwJywKICAgICdIb2FcXE1hdGhcXFV0aWwnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9tYXRoL1V0aWwucGhwJywKICAgICdIb2FcXE1hdGhcXFZpc2l0b3JcXEFyaXRobWV0aWMnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9tYXRoL1Zpc2l0b3IvQXJpdGhtZXRpYy5waHAnLAogICAgJ0hvYVxcUHJvdG9jb2xcXEJpblxcUmVzb2x2ZScgPT4gJHZlbmRvckRpciAuICcvaG9hL3Byb3RvY29sL0Jpbi9SZXNvbHZlLnBocCcsCiAgICAnSG9hXFxQcm90b2NvbFxcRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvcHJvdG9jb2wvRXhjZXB0aW9uLnBocCcsCiAgICAnSG9hXFxQcm90b2NvbFxcTm9kZVxcTGlicmFyeScgPT4gJHZlbmRvckRpciAuICcvaG9hL3Byb3RvY29sL05vZGUvTGlicmFyeS5waHAnLAogICAgJ0hvYVxcUHJvdG9jb2xcXE5vZGVcXE5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9wcm90b2NvbC9Ob2RlL05vZGUucGhwJywKICAgICdIb2FcXFByb3RvY29sXFxQcm90b2NvbCcgPT4gJHZlbmRvckRpciAuICcvaG9hL3Byb3RvY29sL1Byb3RvY29sLnBocCcsCiAgICAnSG9hXFxQcm90b2NvbFxcV3JhcHBlcicgPT4gJHZlbmRvckRpciAuICcvaG9hL3Byb3RvY29sL1dyYXBwZXIucGhwJywKICAgICdIb2FcXFJlZ2V4XFxFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9yZWdleC9FeGNlcHRpb24ucGhwJywKICAgICdIb2FcXFJlZ2V4XFxWaXNpdG9yXFxJc290cm9waWMnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9yZWdleC9WaXNpdG9yL0lzb3Ryb3BpYy5waHAnLAogICAgJ0hvYVxcU3RyZWFtXFxCdWNrZXQnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9zdHJlYW0vQnVja2V0LnBocCcsCiAgICAnSG9hXFxTdHJlYW1cXENvbXBvc2l0ZScgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9Db21wb3NpdGUucGhwJywKICAgICdIb2FcXFN0cmVhbVxcQ29udGV4dCcgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9Db250ZXh0LnBocCcsCiAgICAnSG9hXFxTdHJlYW1cXEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9FeGNlcHRpb24ucGhwJywKICAgICdIb2FcXFN0cmVhbVxcRmlsdGVyXFxCYXNpYycgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9GaWx0ZXIvQmFzaWMucGhwJywKICAgICdIb2FcXFN0cmVhbVxcRmlsdGVyXFxFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9zdHJlYW0vRmlsdGVyL0V4Y2VwdGlvbi5waHAnLAogICAgJ0hvYVxcU3RyZWFtXFxGaWx0ZXJcXEZpbHRlcicgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9GaWx0ZXIvRmlsdGVyLnBocCcsCiAgICAnSG9hXFxTdHJlYW1cXEZpbHRlclxcTGF0ZUNvbXB1dGVkJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2Evc3RyZWFtL0ZpbHRlci9MYXRlQ29tcHV0ZWQucGhwJywKICAgICdIb2FcXFN0cmVhbVxcSVN0cmVhbVxcQnVmZmVyYWJsZScgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL0J1ZmZlcmFibGUucGhwJywKICAgICdIb2FcXFN0cmVhbVxcSVN0cmVhbVxcSW4nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9zdHJlYW0vSVN0cmVhbS9Jbi5waHAnLAogICAgJ0hvYVxcU3RyZWFtXFxJU3RyZWFtXFxMb2NrYWJsZScgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL0xvY2thYmxlLnBocCcsCiAgICAnSG9hXFxTdHJlYW1cXElTdHJlYW1cXE91dCcgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL091dC5waHAnLAogICAgJ0hvYVxcU3RyZWFtXFxJU3RyZWFtXFxQYXRoYWJsZScgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL1BhdGhhYmxlLnBocCcsCiAgICAnSG9hXFxTdHJlYW1cXElTdHJlYW1cXFBvaW50YWJsZScgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL1BvaW50YWJsZS5waHAnLAogICAgJ0hvYVxcU3RyZWFtXFxJU3RyZWFtXFxTdGF0YWJsZScgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL1N0YXRhYmxlLnBocCcsCiAgICAnSG9hXFxTdHJlYW1cXElTdHJlYW1cXFN0cmVhbScgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9JU3RyZWFtL1N0cmVhbS5waHAnLAogICAgJ0hvYVxcU3RyZWFtXFxJU3RyZWFtXFxTdHJ1Y3R1cmFsJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2Evc3RyZWFtL0lTdHJlYW0vU3RydWN0dXJhbC5waHAnLAogICAgJ0hvYVxcU3RyZWFtXFxJU3RyZWFtXFxUb3VjaGFibGUnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9zdHJlYW0vSVN0cmVhbS9Ub3VjaGFibGUucGhwJywKICAgICdIb2FcXFN0cmVhbVxcU3RyZWFtJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2Evc3RyZWFtL1N0cmVhbS5waHAnLAogICAgJ0hvYVxcU3RyZWFtXFxXcmFwcGVyXFxFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9zdHJlYW0vV3JhcHBlci9FeGNlcHRpb24ucGhwJywKICAgICdIb2FcXFN0cmVhbVxcV3JhcHBlclxcSVdyYXBwZXJcXEZpbGUnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9zdHJlYW0vV3JhcHBlci9JV3JhcHBlci9GaWxlLnBocCcsCiAgICAnSG9hXFxTdHJlYW1cXFdyYXBwZXJcXElXcmFwcGVyXFxJV3JhcHBlcicgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9XcmFwcGVyL0lXcmFwcGVyL0lXcmFwcGVyLnBocCcsCiAgICAnSG9hXFxTdHJlYW1cXFdyYXBwZXJcXElXcmFwcGVyXFxTdHJlYW0nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS9zdHJlYW0vV3JhcHBlci9JV3JhcHBlci9TdHJlYW0ucGhwJywKICAgICdIb2FcXFN0cmVhbVxcV3JhcHBlclxcV3JhcHBlcicgPT4gJHZlbmRvckRpciAuICcvaG9hL3N0cmVhbS9XcmFwcGVyL1dyYXBwZXIucGhwJywKICAgICdIb2FcXFVzdHJpbmdcXEJpblxcRnJvbWNvZGUnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS91c3RyaW5nL0Jpbi9Gcm9tY29kZS5waHAnLAogICAgJ0hvYVxcVXN0cmluZ1xcQmluXFxUb2NvZGUnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS91c3RyaW5nL0Jpbi9Ub2NvZGUucGhwJywKICAgICdIb2FcXFVzdHJpbmdcXEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvaG9hL3VzdHJpbmcvRXhjZXB0aW9uLnBocCcsCiAgICAnSG9hXFxVc3RyaW5nXFxTZWFyY2gnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS91c3RyaW5nL1NlYXJjaC5waHAnLAogICAgJ0hvYVxcVXN0cmluZ1xcVXN0cmluZycgPT4gJHZlbmRvckRpciAuICcvaG9hL3VzdHJpbmcvVXN0cmluZy5waHAnLAogICAgJ0hvYVxcVmlzaXRvclxcRWxlbWVudCcgPT4gJHZlbmRvckRpciAuICcvaG9hL3Zpc2l0b3IvRWxlbWVudC5waHAnLAogICAgJ0hvYVxcVmlzaXRvclxcVmlzaXQnID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS92aXNpdG9yL1Zpc2l0LnBocCcsCiAgICAnSG9hXFxaZm9ybWF0XFxFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL2hvYS96Zm9ybWF0L0V4Y2VwdGlvbi5waHAnLAogICAgJ0hvYVxcWmZvcm1hdFxcUGFyYW1ldGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9ob2EvemZvcm1hdC9QYXJhbWV0ZXIucGhwJywKICAgICdIb2FcXFpmb3JtYXRcXFBhcmFtZXRlcml6YWJsZScgPT4gJHZlbmRvckRpciAuICcvaG9hL3pmb3JtYXQvUGFyYW1ldGVyaXphYmxlLnBocCcsCiAgICAnSnNvbkV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA3My9SZXNvdXJjZXMvc3R1YnMvSnNvbkV4Y2VwdGlvbi5waHAnLAogICAgJ05vcm1hbGl6ZXInID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtaW50bC1ub3JtYWxpemVyL1Jlc291cmNlcy9zdHVicy9Ob3JtYWxpemVyLnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZWRDb2RlRXhjZXB0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VkQ29kZUV4Y2VwdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxBbmFseXNlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9BbmFseXNlci5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxBbmFseXNlclJlc3VsdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9BbmFseXNlclJlc3VsdC5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxBbmFseXNlclJlc3VsdEZpbmFsaXplcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9BbmFseXNlclJlc3VsdEZpbmFsaXplci5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxBcmd1bWVudHNOb3JtYWxpemVyJyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL0FyZ3VtZW50c05vcm1hbGl6ZXIucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcQ29uZGl0aW9uYWxFeHByZXNzaW9uSG9sZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL0NvbmRpdGlvbmFsRXhwcmVzc2lvbkhvbGRlci5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxDb25zdGFudFJlc29sdmVyJyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL0NvbnN0YW50UmVzb2x2ZXIucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcQ29uc3RhbnRSZXNvbHZlckZhY3RvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvQ29uc3RhbnRSZXNvbHZlckZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcRGlyZWN0SW50ZXJuYWxTY29wZUZhY3RvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvRGlyZWN0SW50ZXJuYWxTY29wZUZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcRW5kU3RhdGVtZW50UmVzdWx0JyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL0VuZFN0YXRlbWVudFJlc3VsdC5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxFbnN1cmVkTm9uTnVsbGFiaWxpdHlSZXN1bHQnID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvRW5zdXJlZE5vbk51bGxhYmlsaXR5UmVzdWx0LnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZXJcXEVuc3VyZWROb25OdWxsYWJpbGl0eVJlc3VsdEV4cHJlc3Npb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvRW5zdXJlZE5vbk51bGxhYmlsaXR5UmVzdWx0RXhwcmVzc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxFcnJvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9FcnJvci5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxFeHByZXNzaW9uQ29udGV4dCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9FeHByZXNzaW9uQ29udGV4dC5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxFeHByZXNzaW9uUmVzdWx0JyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL0V4cHJlc3Npb25SZXN1bHQucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcRXhwcmVzc2lvblR5cGVIb2xkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvRXhwcmVzc2lvblR5cGVIb2xkZXIucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcRmlsZUFuYWx5c2VyJyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL0ZpbGVBbmFseXNlci5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxGaWxlQW5hbHlzZXJSZXN1bHQnID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvRmlsZUFuYWx5c2VyUmVzdWx0LnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZXJcXEZpbmFsaXplclJlc3VsdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9GaW5hbGl6ZXJSZXN1bHQucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcSWdub3JlXFxJZ25vcmVMZXhlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9JZ25vcmUvSWdub3JlTGV4ZXIucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcSWdub3JlXFxJZ25vcmVQYXJzZUV4Y2VwdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9JZ25vcmUvSWdub3JlUGFyc2VFeGNlcHRpb24ucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcSWdub3JlXFxJZ25vcmVkRXJyb3InID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvSWdub3JlL0lnbm9yZWRFcnJvci5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxJZ25vcmVcXElnbm9yZWRFcnJvckhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9JZ25vcmUvSWdub3JlZEVycm9ySGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZXJcXElnbm9yZVxcSWdub3JlZEVycm9ySGVscGVyUHJvY2Vzc2VkUmVzdWx0JyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL0lnbm9yZS9JZ25vcmVkRXJyb3JIZWxwZXJQcm9jZXNzZWRSZXN1bHQucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcSWdub3JlXFxJZ25vcmVkRXJyb3JIZWxwZXJSZXN1bHQnID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvSWdub3JlL0lnbm9yZWRFcnJvckhlbHBlclJlc3VsdC5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxJbXB1cmVQb2ludCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9JbXB1cmVQb2ludC5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxJbnRlcm5hbEVycm9yJyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL0ludGVybmFsRXJyb3IucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcSW50ZXJuYWxTY29wZUZhY3RvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvSW50ZXJuYWxTY29wZUZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcTGF6eUludGVybmFsU2NvcGVGYWN0b3J5JyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL0xhenlJbnRlcm5hbFNjb3BlRmFjdG9yeS5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxMb2NhbElnbm9yZXNQcm9jZXNzb3InID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvTG9jYWxJZ25vcmVzUHJvY2Vzc29yLnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZXJcXExvY2FsSWdub3Jlc1Byb2Nlc3NvclJlc3VsdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9Mb2NhbElnbm9yZXNQcm9jZXNzb3JSZXN1bHQucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcTXV0YXRpbmdTY29wZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9NdXRhdGluZ1Njb3BlLnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZXJcXE5hbWVTY29wZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9OYW1lU2NvcGUucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcTm9kZVNjb3BlUmVzb2x2ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvTm9kZVNjb3BlUmVzb2x2ZXIucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcTnVsbHNhZmVPcGVyYXRvckhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9OdWxsc2FmZU9wZXJhdG9ySGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZXJcXE91dE9mQ2xhc3NTY29wZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9PdXRPZkNsYXNzU2NvcGUucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcUHJvY2Vzc0Nsb3N1cmVSZXN1bHQnID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvUHJvY2Vzc0Nsb3N1cmVSZXN1bHQucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcUmVzdWx0Q2FjaGVcXFJlc3VsdENhY2hlJyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL1Jlc3VsdENhY2hlL1Jlc3VsdENhY2hlLnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFJlc3VsdENhY2hlXFxSZXN1bHRDYWNoZUNsZWFyZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvUmVzdWx0Q2FjaGUvUmVzdWx0Q2FjaGVDbGVhcmVyLnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFJlc3VsdENhY2hlXFxSZXN1bHRDYWNoZU1hbmFnZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvUmVzdWx0Q2FjaGUvUmVzdWx0Q2FjaGVNYW5hZ2VyLnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFJlc3VsdENhY2hlXFxSZXN1bHRDYWNoZU1hbmFnZXJGYWN0b3J5JyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL1Jlc3VsdENhY2hlL1Jlc3VsdENhY2hlTWFuYWdlckZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcUmVzdWx0Q2FjaGVcXFJlc3VsdENhY2hlUHJvY2Vzc1Jlc3VsdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9SZXN1bHRDYWNoZS9SZXN1bHRDYWNoZVByb2Nlc3NSZXN1bHQucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcUmljaGVyU2NvcGVHZXRUeXBlSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL1JpY2hlclNjb3BlR2V0VHlwZUhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxSdWxlRXJyb3JUcmFuc2Zvcm1lcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9SdWxlRXJyb3JUcmFuc2Zvcm1lci5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxTY29wZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9TY29wZS5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxTY29wZUNvbnRleHQnID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvU2NvcGVDb250ZXh0LnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFNjb3BlRmFjdG9yeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9TY29wZUZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcU3BlY2lmaWVkVHlwZXMnID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvU3BlY2lmaWVkVHlwZXMucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcU3RhdGVtZW50Q29udGV4dCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9TdGF0ZW1lbnRDb250ZXh0LnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFN0YXRlbWVudEV4aXRQb2ludCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9TdGF0ZW1lbnRFeGl0UG9pbnQucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcU3RhdGVtZW50UmVzdWx0JyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL1N0YXRlbWVudFJlc3VsdC5waHAnLAogICAgJ1BIUFN0YW5cXEFuYWx5c2VyXFxUaHJvd1BvaW50JyA9PiAkYmFzZURpciAuICcvc3JjL0FuYWx5c2VyL1Rocm93UG9pbnQucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcVHlwZVNwZWNpZmllcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9UeXBlU3BlY2lmaWVyLnBocCcsCiAgICAnUEhQU3RhblxcQW5hbHlzZXJcXFR5cGVTcGVjaWZpZXJBd2FyZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9BbmFseXNlci9UeXBlU3BlY2lmaWVyQXdhcmVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcVHlwZVNwZWNpZmllckNvbnRleHQnID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvVHlwZVNwZWNpZmllckNvbnRleHQucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcVHlwZVNwZWNpZmllckZhY3RvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvVHlwZVNwZWNpZmllckZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxBbmFseXNlclxcVW5kZWZpbmVkVmFyaWFibGVFeGNlcHRpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvQW5hbHlzZXIvVW5kZWZpbmVkVmFyaWFibGVFeGNlcHRpb24ucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL0JldHRlclJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxJZGVudGlmaWVyXFxFeGNlcHRpb25cXEludmFsaWRJZGVudGlmaWVyTmFtZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9JZGVudGlmaWVyL0V4Y2VwdGlvbi9JbnZhbGlkSWRlbnRpZmllck5hbWUucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxJZGVudGlmaWVyXFxJZGVudGlmaWVyJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL0lkZW50aWZpZXIvSWRlbnRpZmllci5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXElkZW50aWZpZXJcXElkZW50aWZpZXJUeXBlJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL0lkZW50aWZpZXIvSWRlbnRpZmllclR5cGUucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxOb2RlQ29tcGlsZXJcXENvbXBpbGVOb2RlVG9WYWx1ZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Ob2RlQ29tcGlsZXIvQ29tcGlsZU5vZGVUb1ZhbHVlLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcTm9kZUNvbXBpbGVyXFxDb21waWxlZFZhbHVlJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL05vZGVDb21waWxlci9Db21waWxlZFZhbHVlLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcTm9kZUNvbXBpbGVyXFxDb21waWxlckNvbnRleHQnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvTm9kZUNvbXBpbGVyL0NvbXBpbGVyQ29udGV4dC5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXE5vZGVDb21waWxlclxcRXhjZXB0aW9uXFxVbmFibGVUb0NvbXBpbGVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL05vZGVDb21waWxlci9FeGNlcHRpb24vVW5hYmxlVG9Db21waWxlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXEV4Y2VwdGlvblxcTm90SW1wbGVtZW50ZWQnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL0V4Y2VwdGlvbi9Ob3RJbXBsZW1lbnRlZC5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXEZha2VSZWZsZWN0aW9uQXR0cmlidXRlJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9GYWtlUmVmbGVjdGlvbkF0dHJpYnV0ZS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25BdHRyaWJ1dGUnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25BdHRyaWJ1dGUucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBZGFwdGVyXFxSZWZsZWN0aW9uQXR0cmlidXRlRmFjdG9yeScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbkF0dHJpYnV0ZUZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBZGFwdGVyXFxSZWZsZWN0aW9uQ2xhc3MnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25DbGFzcy5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25DbGFzc0NvbnN0YW50JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9SZWZsZWN0aW9uQ2xhc3NDb25zdGFudC5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25FbnVtJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9SZWZsZWN0aW9uRW51bS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25FbnVtQmFja2VkQ2FzZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbkVudW1CYWNrZWRDYXNlLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcQWRhcHRlclxcUmVmbGVjdGlvbkVudW1Vbml0Q2FzZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbkVudW1Vbml0Q2FzZS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25GdW5jdGlvbicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbkZ1bmN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcQWRhcHRlclxcUmVmbGVjdGlvbkludGVyc2VjdGlvblR5cGUnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25JbnRlcnNlY3Rpb25UeXBlLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcQWRhcHRlclxcUmVmbGVjdGlvbk1ldGhvZCcgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvbk1ldGhvZC5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25OYW1lZFR5cGUnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25OYW1lZFR5cGUucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBZGFwdGVyXFxSZWZsZWN0aW9uT2JqZWN0JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vQWRhcHRlci9SZWZsZWN0aW9uT2JqZWN0LnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcQWRhcHRlclxcUmVmbGVjdGlvblBhcmFtZXRlcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvblBhcmFtZXRlci5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFkYXB0ZXJcXFJlZmxlY3Rpb25Qcm9wZXJ0eScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvblByb3BlcnR5LnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcQWRhcHRlclxcUmVmbGVjdGlvblR5cGUnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BZGFwdGVyL1JlZmxlY3Rpb25UeXBlLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcQWRhcHRlclxcUmVmbGVjdGlvblVuaW9uVHlwZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0FkYXB0ZXIvUmVmbGVjdGlvblVuaW9uVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEFubm90YXRpb25cXEFubm90YXRpb25IZWxwZXInID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9Bbm5vdGF0aW9uL0Fubm90YXRpb25IZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxBdHRyaWJ1dGVcXFJlZmxlY3Rpb25BdHRyaWJ1dGVIZWxwZXInID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9BdHRyaWJ1dGUvUmVmbGVjdGlvbkF0dHJpYnV0ZUhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEV4Y2VwdGlvblxcQ2lyY3VsYXJSZWZlcmVuY2UnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vQ2lyY3VsYXJSZWZlcmVuY2UucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxFeGNlcHRpb25cXENsYXNzRG9lc05vdEV4aXN0JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL0NsYXNzRG9lc05vdEV4aXN0LnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcRXhjZXB0aW9uXFxDb2RlTG9jYXRpb25NaXNzaW5nJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL0NvZGVMb2NhdGlvbk1pc3NpbmcucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxFeGNlcHRpb25cXEZ1bmN0aW9uRG9lc05vdEV4aXN0JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL0Z1bmN0aW9uRG9lc05vdEV4aXN0LnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcRXhjZXB0aW9uXFxJbnZhbGlkQXJyb3dGdW5jdGlvbkJvZHlOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL0ludmFsaWRBcnJvd0Z1bmN0aW9uQm9keU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxFeGNlcHRpb25cXEludmFsaWRDb25zdGFudE5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vSW52YWxpZENvbnN0YW50Tm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEV4Y2VwdGlvblxcSW52YWxpZERlZmF1bHRWYWx1ZVR5cGUnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vSW52YWxpZERlZmF1bHRWYWx1ZVR5cGUucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxFeGNlcHRpb25cXE1ldGhvZFByb3RvdHlwZU5vdEZvdW5kJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL01ldGhvZFByb3RvdHlwZU5vdEZvdW5kLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcRXhjZXB0aW9uXFxOb09iamVjdFByb3ZpZGVkJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL05vT2JqZWN0UHJvdmlkZWQucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxFeGNlcHRpb25cXE5vUGFyZW50JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL05vUGFyZW50LnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcRXhjZXB0aW9uXFxOb3RBbk9iamVjdCcgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL0V4Y2VwdGlvbi9Ob3RBbk9iamVjdC5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEV4Y2VwdGlvblxcT2JqZWN0Tm90SW5zdGFuY2VPZkNsYXNzJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vRXhjZXB0aW9uL09iamVjdE5vdEluc3RhbmNlT2ZDbGFzcy5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXEV4Y2VwdGlvblxcUHJvcGVydHlEb2VzTm90RXhpc3QnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vUHJvcGVydHlEb2VzTm90RXhpc3QucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxFeGNlcHRpb25cXFByb3BlcnR5SXNOb3RTdGF0aWMnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9FeGNlcHRpb24vUHJvcGVydHlJc05vdFN0YXRpYy5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb24nID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvbkF0dHJpYnV0ZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25BdHRyaWJ1dGUucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uQ2xhc3MnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uQ2xhc3MucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uQ2xhc3NDb25zdGFudCcgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25DbGFzc0NvbnN0YW50LnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvbkNvbnN0YW50JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkNvbnN0YW50LnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvbkVudW0nID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uRW51bS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25FbnVtQ2FzZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25FbnVtQ2FzZS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25GdW5jdGlvbicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25GdW5jdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25GdW5jdGlvbkFic3RyYWN0JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvbkZ1bmN0aW9uQWJzdHJhY3QucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uSW50ZXJzZWN0aW9uVHlwZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25JbnRlcnNlY3Rpb25UeXBlLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvbk1ldGhvZCcgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25NZXRob2QucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uTmFtZWRUeXBlJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvbk5hbWVkVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25PYmplY3QnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uT2JqZWN0LnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvblBhcmFtZXRlcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25QYXJhbWV0ZXIucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uUHJvcGVydHknID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvcGVydHkucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uVHlwZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25UeXBlLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvblVuaW9uVHlwZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25VbmlvblR5cGUucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxTdHJpbmdDYXN0XFxSZWZsZWN0aW9uQXR0cmlidXRlU3RyaW5nQ2FzdCcgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N0cmluZ0Nhc3QvUmVmbGVjdGlvbkF0dHJpYnV0ZVN0cmluZ0Nhc3QucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxTdHJpbmdDYXN0XFxSZWZsZWN0aW9uQ2xhc3NDb25zdGFudFN0cmluZ0Nhc3QnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9TdHJpbmdDYXN0L1JlZmxlY3Rpb25DbGFzc0NvbnN0YW50U3RyaW5nQ2FzdC5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFN0cmluZ0Nhc3RcXFJlZmxlY3Rpb25DbGFzc1N0cmluZ0Nhc3QnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9TdHJpbmdDYXN0L1JlZmxlY3Rpb25DbGFzc1N0cmluZ0Nhc3QucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxTdHJpbmdDYXN0XFxSZWZsZWN0aW9uQ29uc3RhbnRTdHJpbmdDYXN0JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vU3RyaW5nQ2FzdC9SZWZsZWN0aW9uQ29uc3RhbnRTdHJpbmdDYXN0LnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcU3RyaW5nQ2FzdFxcUmVmbGVjdGlvbkVudW1DYXNlU3RyaW5nQ2FzdCcgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N0cmluZ0Nhc3QvUmVmbGVjdGlvbkVudW1DYXNlU3RyaW5nQ2FzdC5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3Rpb25cXFN0cmluZ0Nhc3RcXFJlZmxlY3Rpb25GdW5jdGlvblN0cmluZ0Nhc3QnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9TdHJpbmdDYXN0L1JlZmxlY3Rpb25GdW5jdGlvblN0cmluZ0Nhc3QucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxTdHJpbmdDYXN0XFxSZWZsZWN0aW9uTWV0aG9kU3RyaW5nQ2FzdCcgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N0cmluZ0Nhc3QvUmVmbGVjdGlvbk1ldGhvZFN0cmluZ0Nhc3QucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxTdHJpbmdDYXN0XFxSZWZsZWN0aW9uUGFyYW1ldGVyU3RyaW5nQ2FzdCcgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0aW9uL1N0cmluZ0Nhc3QvUmVmbGVjdGlvblBhcmFtZXRlclN0cmluZ0Nhc3QucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxTdHJpbmdDYXN0XFxSZWZsZWN0aW9uUHJvcGVydHlTdHJpbmdDYXN0JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vU3RyaW5nQ2FzdC9SZWZsZWN0aW9uUHJvcGVydHlTdHJpbmdDYXN0LnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdGlvblxcU3RyaW5nQ2FzdFxcUmVmbGVjdGlvblR5cGVTdHJpbmdDYXN0JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rpb24vU3RyaW5nQ2FzdC9SZWZsZWN0aW9uVHlwZVN0cmluZ0Nhc3QucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0aW9uXFxTdXBwb3J0XFxBbHJlYWR5VmlzaXRlZENsYXNzZXMnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdGlvbi9TdXBwb3J0L0FscmVhZHlWaXNpdGVkQ2xhc3Nlcy5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3RvclxcQ2xhc3NSZWZsZWN0b3InID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdG9yL0NsYXNzUmVmbGVjdG9yLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdG9yXFxDb25zdGFudFJlZmxlY3RvcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0b3IvQ29uc3RhbnRSZWZsZWN0b3IucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0b3JcXERlZmF1bHRSZWZsZWN0b3InID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvUmVmbGVjdG9yL0RlZmF1bHRSZWZsZWN0b3IucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0b3JcXEV4Y2VwdGlvblxcSWRlbnRpZmllck5vdEZvdW5kJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1JlZmxlY3Rvci9FeGNlcHRpb24vSWRlbnRpZmllck5vdEZvdW5kLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcUmVmbGVjdG9yXFxGdW5jdGlvblJlZmxlY3RvcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0b3IvRnVuY3Rpb25SZWZsZWN0b3IucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxSZWZsZWN0b3JcXFJlZmxlY3RvcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9SZWZsZWN0b3IvUmVmbGVjdG9yLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcQXN0XFxFeGNlcHRpb25cXFBhcnNlVG9Bc3RGYWlsdXJlJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvQXN0L0V4Y2VwdGlvbi9QYXJzZVRvQXN0RmFpbHVyZS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEFzdFxcRmluZFJlZmxlY3Rpb25zSW5UcmVlJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvQXN0L0ZpbmRSZWZsZWN0aW9uc0luVHJlZS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEFzdFxcTG9jYXRvcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0FzdC9Mb2NhdG9yLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcQXN0XFxQYXJzZXJcXE1lbW9pemluZ1BhcnNlcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0FzdC9QYXJzZXIvTWVtb2l6aW5nUGFyc2VyLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcQXN0XFxTdHJhdGVneVxcQXN0Q29udmVyc2lvblN0cmF0ZWd5JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvQXN0L1N0cmF0ZWd5L0FzdENvbnZlcnNpb25TdHJhdGVneS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEFzdFxcU3RyYXRlZ3lcXE5vZGVUb1JlZmxlY3Rpb24nID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Bc3QvU3RyYXRlZ3kvTm9kZVRvUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEV4Y2VwdGlvblxcRXZhbGVkQW5vbnltb3VzQ2xhc3NDYW5ub3RCZUxvY2F0ZWQnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vRXZhbGVkQW5vbnltb3VzQ2xhc3NDYW5ub3RCZUxvY2F0ZWQucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxFeGNlcHRpb25cXEV2YWxlZENsb3N1cmVDYW5ub3RCZUxvY2F0ZWQnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vRXZhbGVkQ2xvc3VyZUNhbm5vdEJlTG9jYXRlZC5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEV4Y2VwdGlvblxcRnVuY3Rpb25VbmRlZmluZWQnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vRnVuY3Rpb25VbmRlZmluZWQucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxFeGNlcHRpb25cXEludmFsaWREaXJlY3RvcnknID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vSW52YWxpZERpcmVjdG9yeS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEV4Y2VwdGlvblxcSW52YWxpZEZpbGVJbmZvJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvRXhjZXB0aW9uL0ludmFsaWRGaWxlSW5mby5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEV4Y2VwdGlvblxcSW52YWxpZEZpbGVMb2NhdGlvbicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0V4Y2VwdGlvbi9JbnZhbGlkRmlsZUxvY2F0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcRXhjZXB0aW9uXFxOb0Fub255bW91c0NsYXNzT25MaW5lJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvRXhjZXB0aW9uL05vQW5vbnltb3VzQ2xhc3NPbkxpbmUucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxFeGNlcHRpb25cXE5vQ2xvc3VyZU9uTGluZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0V4Y2VwdGlvbi9Ob0Nsb3N1cmVPbkxpbmUucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxFeGNlcHRpb25cXE5vdEludGVybmFsQ2xhc3MnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vTm90SW50ZXJuYWxDbGFzcy5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEV4Y2VwdGlvblxcVHdvQW5vbnltb3VzQ2xhc3Nlc09uU2FtZUxpbmUnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9FeGNlcHRpb24vVHdvQW5vbnltb3VzQ2xhc3Nlc09uU2FtZUxpbmUucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxFeGNlcHRpb25cXFR3b0Nsb3N1cmVzT25TYW1lTGluZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0V4Y2VwdGlvbi9Ud29DbG9zdXJlc09uU2FtZUxpbmUucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxGaWxlQ2hlY2tlcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0ZpbGVDaGVja2VyLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcTG9jYXRlZFxcQWxpYXNMb2NhdGVkU291cmNlJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvTG9jYXRlZC9BbGlhc0xvY2F0ZWRTb3VyY2UucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxMb2NhdGVkXFxBbm9ueW1vdXNMb2NhdGVkU291cmNlJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvTG9jYXRlZC9Bbm9ueW1vdXNMb2NhdGVkU291cmNlLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcTG9jYXRlZFxcRXZhbGVkTG9jYXRlZFNvdXJjZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0xvY2F0ZWQvRXZhbGVkTG9jYXRlZFNvdXJjZS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXExvY2F0ZWRcXEludGVybmFsTG9jYXRlZFNvdXJjZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0xvY2F0ZWQvSW50ZXJuYWxMb2NhdGVkU291cmNlLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcTG9jYXRlZFxcTG9jYXRlZFNvdXJjZScgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL0xvY2F0ZWQvTG9jYXRlZFNvdXJjZS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFNvdXJjZVN0dWJiZXJcXEFnZ3JlZ2F0ZVNvdXJjZVN0dWJiZXInID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Tb3VyY2VTdHViYmVyL0FnZ3JlZ2F0ZVNvdXJjZVN0dWJiZXIucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxTb3VyY2VTdHViYmVyXFxFeGNlcHRpb25cXENvdWxkTm90RmluZFBocFN0b3JtU3R1YnMnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Tb3VyY2VTdHViYmVyL0V4Y2VwdGlvbi9Db3VsZE5vdEZpbmRQaHBTdG9ybVN0dWJzLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcU291cmNlU3R1YmJlclxcUGhwU3Rvcm1TdHVic1NvdXJjZVN0dWJiZXInID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Tb3VyY2VTdHViYmVyL1BocFN0b3JtU3R1YnNTb3VyY2VTdHViYmVyLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcU291cmNlU3R1YmJlclxcUGhwU3Rvcm1TdHVic1xcQ2FjaGluZ1Zpc2l0b3InID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Tb3VyY2VTdHViYmVyL1BocFN0b3JtU3R1YnMvQ2FjaGluZ1Zpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxTb3VyY2VTdHViYmVyXFxSZWZsZWN0aW9uU291cmNlU3R1YmJlcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1NvdXJjZVN0dWJiZXIvUmVmbGVjdGlvblNvdXJjZVN0dWJiZXIucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxTb3VyY2VTdHViYmVyXFxTb3VyY2VTdHViYmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvU291cmNlU3R1YmJlci9Tb3VyY2VTdHViYmVyLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcU291cmNlU3R1YmJlclxcU3R1YkRhdGEnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9Tb3VyY2VTdHViYmVyL1N0dWJEYXRhLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQWJzdHJhY3RTb3VyY2VMb2NhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9BYnN0cmFjdFNvdXJjZUxvY2F0b3IucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxBZ2dyZWdhdGVTb3VyY2VMb2NhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9BZ2dyZWdhdGVTb3VyY2VMb2NhdG9yLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQW5vbnltb3VzQ2xhc3NPYmplY3RTb3VyY2VMb2NhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9Bbm9ueW1vdXNDbGFzc09iamVjdFNvdXJjZUxvY2F0b3IucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxBdXRvbG9hZFNvdXJjZUxvY2F0b3InID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0F1dG9sb2FkU291cmNlTG9jYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXEF1dG9sb2FkU291cmNlTG9jYXRvclxcRmlsZVJlYWRUcmFwU3RyZWFtV3JhcHBlcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQXV0b2xvYWRTb3VyY2VMb2NhdG9yL0ZpbGVSZWFkVHJhcFN0cmVhbVdyYXBwZXIucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxDbG9zdXJlU291cmNlTG9jYXRvcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ2xvc3VyZVNvdXJjZUxvY2F0b3IucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxDb21wb3NlclNvdXJjZUxvY2F0b3InID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyU291cmNlTG9jYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXENvbXBvc2VyXFxGYWN0b3J5XFxFeGNlcHRpb25cXEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvRmFjdG9yeS9FeGNlcHRpb24vRXhjZXB0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQ29tcG9zZXJcXEZhY3RvcnlcXEV4Y2VwdGlvblxcRmFpbGVkVG9QYXJzZUpzb24nID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL0ZhY3RvcnkvRXhjZXB0aW9uL0ZhaWxlZFRvUGFyc2VKc29uLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQ29tcG9zZXJcXEZhY3RvcnlcXEV4Y2VwdGlvblxcSW52YWxpZFByb2plY3REaXJlY3RvcnknID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL0ZhY3RvcnkvRXhjZXB0aW9uL0ludmFsaWRQcm9qZWN0RGlyZWN0b3J5LnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQ29tcG9zZXJcXEZhY3RvcnlcXEV4Y2VwdGlvblxcTWlzc2luZ0NvbXBvc2VySnNvbicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvRmFjdG9yeS9FeGNlcHRpb24vTWlzc2luZ0NvbXBvc2VySnNvbi5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXENvbXBvc2VyXFxGYWN0b3J5XFxFeGNlcHRpb25cXE1pc3NpbmdJbnN0YWxsZWRKc29uJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9Db21wb3Nlci9GYWN0b3J5L0V4Y2VwdGlvbi9NaXNzaW5nSW5zdGFsbGVkSnNvbi5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXENvbXBvc2VyXFxGYWN0b3J5XFxNYWtlTG9jYXRvckZvckNvbXBvc2VySnNvbicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvRmFjdG9yeS9NYWtlTG9jYXRvckZvckNvbXBvc2VySnNvbi5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXENvbXBvc2VyXFxGYWN0b3J5XFxNYWtlTG9jYXRvckZvckNvbXBvc2VySnNvbkFuZEluc3RhbGxlZEpzb24nID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL0ZhY3RvcnkvTWFrZUxvY2F0b3JGb3JDb21wb3Nlckpzb25BbmRJbnN0YWxsZWRKc29uLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQ29tcG9zZXJcXEZhY3RvcnlcXE1ha2VMb2NhdG9yRm9ySW5zdGFsbGVkSnNvbicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvRmFjdG9yeS9NYWtlTG9jYXRvckZvckluc3RhbGxlZEpzb24ucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxDb21wb3NlclxcUHNyQXV0b2xvYWRlckxvY2F0b3InID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL1BzckF1dG9sb2FkZXJMb2NhdG9yLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQ29tcG9zZXJcXFBzclxcRXhjZXB0aW9uXFxFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL1Bzci9FeGNlcHRpb24vRXhjZXB0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQ29tcG9zZXJcXFBzclxcRXhjZXB0aW9uXFxJbnZhbGlkUHJlZml4TWFwcGluZycgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvUHNyL0V4Y2VwdGlvbi9JbnZhbGlkUHJlZml4TWFwcGluZy5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXENvbXBvc2VyXFxQc3JcXFBzcjBNYXBwaW5nJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9Db21wb3Nlci9Qc3IvUHNyME1hcHBpbmcucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxDb21wb3NlclxcUHNyXFxQc3I0TWFwcGluZycgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvQ29tcG9zZXIvUHNyL1BzcjRNYXBwaW5nLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcQ29tcG9zZXJcXFBzclxcUHNyQXV0b2xvYWRlck1hcHBpbmcnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0NvbXBvc2VyL1Bzci9Qc3JBdXRvbG9hZGVyTWFwcGluZy5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXERpcmVjdG9yaWVzU291cmNlTG9jYXRvcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvRGlyZWN0b3JpZXNTb3VyY2VMb2NhdG9yLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcRXZhbGVkQ29kZVNvdXJjZUxvY2F0b3InID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL0V2YWxlZENvZGVTb3VyY2VMb2NhdG9yLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcVHlwZVxcRmlsZUl0ZXJhdG9yU291cmNlTG9jYXRvcicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9Tb3VyY2VMb2NhdG9yL1R5cGUvRmlsZUl0ZXJhdG9yU291cmNlTG9jYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXE1lbW9pemluZ1NvdXJjZUxvY2F0b3InID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL01lbW9pemluZ1NvdXJjZUxvY2F0b3IucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxQaHBJbnRlcm5hbFNvdXJjZUxvY2F0b3InID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL1BocEludGVybmFsU291cmNlTG9jYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXFNpbmdsZUZpbGVTb3VyY2VMb2NhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9TaW5nbGVGaWxlU291cmNlTG9jYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFR5cGVcXFNvdXJjZUxvY2F0b3InID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvU291cmNlTG9jYXRvci9UeXBlL1NvdXJjZUxvY2F0b3IucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxUeXBlXFxTdHJpbmdTb3VyY2VMb2NhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1NvdXJjZUxvY2F0b3IvVHlwZS9TdHJpbmdTb3VyY2VMb2NhdG9yLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcVXRpbFxcQ2FsY3VsYXRlUmVmbGVjdGlvbkNvbHVtbicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9VdGlsL0NhbGN1bGF0ZVJlZmxlY3Rpb25Db2x1bW4ucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxVdGlsXFxDbGFzc0V4aXN0ZW5jZUNoZWNrZXInID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvVXRpbC9DbGFzc0V4aXN0ZW5jZUNoZWNrZXIucGhwJywKICAgICdQSFBTdGFuXFxCZXR0ZXJSZWZsZWN0aW9uXFxVdGlsXFxDb25zdGFudE5vZGVDaGVja2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1V0aWwvQ29uc3RhbnROb2RlQ2hlY2tlci5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFV0aWxcXEV4Y2VwdGlvblxcSW52YWxpZE5vZGVQb3NpdGlvbicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9VdGlsL0V4Y2VwdGlvbi9JbnZhbGlkTm9kZVBvc2l0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcVXRpbFxcRXhjZXB0aW9uXFxOb05vZGVQb3NpdGlvbicgPT4gJHZlbmRvckRpciAuICcvb25kcmVqbWlydGVzL2JldHRlci1yZWZsZWN0aW9uL3NyYy9VdGlsL0V4Y2VwdGlvbi9Ob05vZGVQb3NpdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFV0aWxcXEZpbGVIZWxwZXInID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvVXRpbC9GaWxlSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcQmV0dGVyUmVmbGVjdGlvblxcVXRpbFxcRmluZFJlZmxlY3Rpb25PbkxpbmUnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJlam1pcnRlcy9iZXR0ZXItcmVmbGVjdGlvbi9zcmMvVXRpbC9GaW5kUmVmbGVjdGlvbk9uTGluZS5waHAnLAogICAgJ1BIUFN0YW5cXEJldHRlclJlZmxlY3Rpb25cXFV0aWxcXEdldExhc3REb2NDb21tZW50JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyZWptaXJ0ZXMvYmV0dGVyLXJlZmxlY3Rpb24vc3JjL1V0aWwvR2V0TGFzdERvY0NvbW1lbnQucGhwJywKICAgICdQSFBTdGFuXFxCcm9rZXJcXEFub255bW91c0NsYXNzTmFtZUhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ccm9rZXIvQW5vbnltb3VzQ2xhc3NOYW1lSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcQnJva2VyXFxCcm9rZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvQnJva2VyL0Jyb2tlci5waHAnLAogICAgJ1BIUFN0YW5cXEJyb2tlclxcQnJva2VyRmFjdG9yeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ccm9rZXIvQnJva2VyRmFjdG9yeS5waHAnLAogICAgJ1BIUFN0YW5cXEJyb2tlclxcQ2xhc3NBdXRvbG9hZGluZ0V4Y2VwdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ccm9rZXIvQ2xhc3NBdXRvbG9hZGluZ0V4Y2VwdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXEJyb2tlclxcQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ccm9rZXIvQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXEJyb2tlclxcQ29uc3RhbnROb3RGb3VuZEV4Y2VwdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ccm9rZXIvQ29uc3RhbnROb3RGb3VuZEV4Y2VwdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXEJyb2tlclxcRnVuY3Rpb25Ob3RGb3VuZEV4Y2VwdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ccm9rZXIvRnVuY3Rpb25Ob3RGb3VuZEV4Y2VwdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXENhY2hlXFxDYWNoZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9DYWNoZS9DYWNoZS5waHAnLAogICAgJ1BIUFN0YW5cXENhY2hlXFxDYWNoZUl0ZW0nID0+ICRiYXNlRGlyIC4gJy9zcmMvQ2FjaGUvQ2FjaGVJdGVtLnBocCcsCiAgICAnUEhQU3RhblxcQ2FjaGVcXENhY2hlU3RvcmFnZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9DYWNoZS9DYWNoZVN0b3JhZ2UucGhwJywKICAgICdQSFBTdGFuXFxDYWNoZVxcRmlsZUNhY2hlU3RvcmFnZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9DYWNoZS9GaWxlQ2FjaGVTdG9yYWdlLnBocCcsCiAgICAnUEhQU3RhblxcQ2FjaGVcXE1lbW9yeUNhY2hlU3RvcmFnZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9DYWNoZS9NZW1vcnlDYWNoZVN0b3JhZ2UucGhwJywKICAgICdQSFBTdGFuXFxDbGFzc2VzXFxGb3JiaWRkZW5DbGFzc05hbWVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvQ2xhc3Nlcy9Gb3JiaWRkZW5DbGFzc05hbWVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxDb2xsZWN0b3JzXFxDb2xsZWN0ZWREYXRhJyA9PiAkYmFzZURpciAuICcvc3JjL0NvbGxlY3RvcnMvQ29sbGVjdGVkRGF0YS5waHAnLAogICAgJ1BIUFN0YW5cXENvbGxlY3RvcnNcXENvbGxlY3RvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Db2xsZWN0b3JzL0NvbGxlY3Rvci5waHAnLAogICAgJ1BIUFN0YW5cXENvbGxlY3RvcnNcXFJlZ2lzdHJ5JyA9PiAkYmFzZURpciAuICcvc3JjL0NvbGxlY3RvcnMvUmVnaXN0cnkucGhwJywKICAgICdQSFBTdGFuXFxDb2xsZWN0b3JzXFxSZWdpc3RyeUZhY3RvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29sbGVjdG9ycy9SZWdpc3RyeUZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxBbmFseXNlQXBwbGljYXRpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9BbmFseXNlQXBwbGljYXRpb24ucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxBbmFseXNlQ29tbWFuZCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9Db21tYW5kL0FuYWx5c2VDb21tYW5kLnBocCcsCiAgICAnUEhQU3RhblxcQ29tbWFuZFxcQW5hbHlzZXJSdW5uZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9BbmFseXNlclJ1bm5lci5waHAnLAogICAgJ1BIUFN0YW5cXENvbW1hbmRcXEFuYWx5c2lzUmVzdWx0JyA9PiAkYmFzZURpciAuICcvc3JjL0NvbW1hbmQvQW5hbHlzaXNSZXN1bHQucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxDbGVhclJlc3VsdENhY2hlQ29tbWFuZCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9Db21tYW5kL0NsZWFyUmVzdWx0Q2FjaGVDb21tYW5kLnBocCcsCiAgICAnUEhQU3RhblxcQ29tbWFuZFxcQ29tbWFuZEhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Db21tYW5kL0NvbW1hbmRIZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxEaWFnbm9zZUNvbW1hbmQnID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9EaWFnbm9zZUNvbW1hbmQucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxEdW1wUGFyYW1ldGVyc0NvbW1hbmQnID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9EdW1wUGFyYW1ldGVyc0NvbW1hbmQucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxFcnJvckZvcm1hdHRlclxcQmFzZWxpbmVOZW9uRXJyb3JGb3JtYXR0ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9CYXNlbGluZU5lb25FcnJvckZvcm1hdHRlci5waHAnLAogICAgJ1BIUFN0YW5cXENvbW1hbmRcXEVycm9yRm9ybWF0dGVyXFxCYXNlbGluZVBocEVycm9yRm9ybWF0dGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvQmFzZWxpbmVQaHBFcnJvckZvcm1hdHRlci5waHAnLAogICAgJ1BIUFN0YW5cXENvbW1hbmRcXEVycm9yRm9ybWF0dGVyXFxDaGVja3N0eWxlRXJyb3JGb3JtYXR0ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9DaGVja3N0eWxlRXJyb3JGb3JtYXR0ZXIucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxFcnJvckZvcm1hdHRlclxcQ2lEZXRlY3RlZEVycm9yRm9ybWF0dGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvQ2lEZXRlY3RlZEVycm9yRm9ybWF0dGVyLnBocCcsCiAgICAnUEhQU3RhblxcQ29tbWFuZFxcRXJyb3JGb3JtYXR0ZXJcXEVycm9yRm9ybWF0dGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvRXJyb3JGb3JtYXR0ZXIucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxFcnJvckZvcm1hdHRlclxcR2l0aHViRXJyb3JGb3JtYXR0ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9HaXRodWJFcnJvckZvcm1hdHRlci5waHAnLAogICAgJ1BIUFN0YW5cXENvbW1hbmRcXEVycm9yRm9ybWF0dGVyXFxHaXRsYWJFcnJvckZvcm1hdHRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0dpdGxhYkVycm9yRm9ybWF0dGVyLnBocCcsCiAgICAnUEhQU3RhblxcQ29tbWFuZFxcRXJyb3JGb3JtYXR0ZXJcXEpzb25FcnJvckZvcm1hdHRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL0pzb25FcnJvckZvcm1hdHRlci5waHAnLAogICAgJ1BIUFN0YW5cXENvbW1hbmRcXEVycm9yRm9ybWF0dGVyXFxKdW5pdEVycm9yRm9ybWF0dGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0NvbW1hbmQvRXJyb3JGb3JtYXR0ZXIvSnVuaXRFcnJvckZvcm1hdHRlci5waHAnLAogICAgJ1BIUFN0YW5cXENvbW1hbmRcXEVycm9yRm9ybWF0dGVyXFxSYXdFcnJvckZvcm1hdHRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Db21tYW5kL0Vycm9yRm9ybWF0dGVyL1Jhd0Vycm9yRm9ybWF0dGVyLnBocCcsCiAgICAnUEhQU3RhblxcQ29tbWFuZFxcRXJyb3JGb3JtYXR0ZXJcXFRhYmxlRXJyb3JGb3JtYXR0ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9UYWJsZUVycm9yRm9ybWF0dGVyLnBocCcsCiAgICAnUEhQU3RhblxcQ29tbWFuZFxcRXJyb3JGb3JtYXR0ZXJcXFRlYW1jaXR5RXJyb3JGb3JtYXR0ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9FcnJvckZvcm1hdHRlci9UZWFtY2l0eUVycm9yRm9ybWF0dGVyLnBocCcsCiAgICAnUEhQU3RhblxcQ29tbWFuZFxcRXJyb3JzQ29uc29sZVN0eWxlJyA9PiAkYmFzZURpciAuICcvc3JjL0NvbW1hbmQvRXJyb3JzQ29uc29sZVN0eWxlLnBocCcsCiAgICAnUEhQU3RhblxcQ29tbWFuZFxcRml4ZXJBcHBsaWNhdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Db21tYW5kL0ZpeGVyQXBwbGljYXRpb24ucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxGaXhlclByb2Nlc3NFeGNlcHRpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9GaXhlclByb2Nlc3NFeGNlcHRpb24ucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxGaXhlcldvcmtlckNvbW1hbmQnID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9GaXhlcldvcmtlckNvbW1hbmQucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxJZ25vcmVkUmVnZXhWYWxpZGF0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9JZ25vcmVkUmVnZXhWYWxpZGF0b3IucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxJZ25vcmVkUmVnZXhWYWxpZGF0b3JSZXN1bHQnID0+ICRiYXNlRGlyIC4gJy9zcmMvQ29tbWFuZC9JZ25vcmVkUmVnZXhWYWxpZGF0b3JSZXN1bHQucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxJbmNlcHRpb25Ob3RTdWNjZXNzZnVsRXhjZXB0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL0NvbW1hbmQvSW5jZXB0aW9uTm90U3VjY2Vzc2Z1bEV4Y2VwdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXENvbW1hbmRcXEluY2VwdGlvblJlc3VsdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9Db21tYW5kL0luY2VwdGlvblJlc3VsdC5waHAnLAogICAgJ1BIUFN0YW5cXENvbW1hbmRcXE91dHB1dCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9Db21tYW5kL091dHB1dC5waHAnLAogICAgJ1BIUFN0YW5cXENvbW1hbmRcXE91dHB1dFN0eWxlJyA9PiAkYmFzZURpciAuICcvc3JjL0NvbW1hbmQvT3V0cHV0U3R5bGUucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxTeW1mb255XFxTeW1mb255T3V0cHV0JyA9PiAkYmFzZURpciAuICcvc3JjL0NvbW1hbmQvU3ltZm9ueS9TeW1mb255T3V0cHV0LnBocCcsCiAgICAnUEhQU3RhblxcQ29tbWFuZFxcU3ltZm9ueVxcU3ltZm9ueVN0eWxlJyA9PiAkYmFzZURpciAuICcvc3JjL0NvbW1hbmQvU3ltZm9ueS9TeW1mb255U3R5bGUucGhwJywKICAgICdQSFBTdGFuXFxDb21tYW5kXFxXb3JrZXJDb21tYW5kJyA9PiAkYmFzZURpciAuICcvc3JjL0NvbW1hbmQvV29ya2VyQ29tbWFuZC5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXEJsZWVkaW5nRWRnZVRvZ2dsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0JsZWVkaW5nRWRnZVRvZ2dsZS5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXENvbmRpdGlvbmFsVGFnc0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0NvbmRpdGlvbmFsVGFnc0V4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXENvbmZpZ3VyYXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0NvbmZpZ3VyYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXENvbnRhaW5lcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0NvbnRhaW5lci5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXENvbnRhaW5lckZhY3RvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9Db250YWluZXJGYWN0b3J5LnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcRGVyaXZhdGl2ZUNvbnRhaW5lckZhY3RvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9EZXJpdmF0aXZlQ29udGFpbmVyRmFjdG9yeS5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXER1cGxpY2F0ZUluY2x1ZGVkRmlsZXNFeGNlcHRpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9EdXBsaWNhdGVJbmNsdWRlZEZpbGVzRXhjZXB0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcSW52YWxpZEV4Y2x1ZGVQYXRoc0V4Y2VwdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL0ludmFsaWRFeGNsdWRlUGF0aHNFeGNlcHRpb24ucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxJbnZhbGlkSWdub3JlZEVycm9yUGF0dGVybnNFeGNlcHRpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9JbnZhbGlkSWdub3JlZEVycm9yUGF0dGVybnNFeGNlcHRpb24ucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxMb2FkZXJGYWN0b3J5JyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTG9hZGVyRmFjdG9yeS5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXE1lbW9pemluZ0NvbnRhaW5lcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL01lbW9pemluZ0NvbnRhaW5lci5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXE5lb25BZGFwdGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTmVvbkFkYXB0ZXIucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxOZW9uTG9hZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTmVvbkxvYWRlci5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXE5lb25cXE9wdGlvbmFsUGF0aCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL05lb24vT3B0aW9uYWxQYXRoLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcTmV0dGVcXE5ldHRlQ29udGFpbmVyJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vTmV0dGUvTmV0dGVDb250YWluZXIucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxQYXJhbWV0ZXJOb3RGb3VuZEV4Y2VwdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1BhcmFtZXRlck5vdEZvdW5kRXhjZXB0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcUGFyYW1ldGVyc1NjaGVtYUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1BhcmFtZXRlcnNTY2hlbWFFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxQcm9qZWN0Q29uZmlnSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vUHJvamVjdENvbmZpZ0hlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFJlZmxlY3Rpb25cXENsYXNzUmVmbGVjdGlvbkV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9SZWZsZWN0aW9uL0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxSZWZsZWN0aW9uXFxMYXp5Q2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1JlZmxlY3Rpb24vTGF6eUNsYXNzUmVmbGVjdGlvbkV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxSdWxlc0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1J1bGVzRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcVHlwZVxcRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxUeXBlXFxEeW5hbWljVGhyb3dUeXBlRXh0ZW5zaW9uUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0R5bmFtaWNUaHJvd1R5cGVFeHRlbnNpb25Qcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFR5cGVcXEV4cHJlc3Npb25UeXBlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9FeHByZXNzaW9uVHlwZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFR5cGVcXExhenlEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0xhenlEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxUeXBlXFxMYXp5RHluYW1pY1Rocm93VHlwZUV4dGVuc2lvblByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9MYXp5RHluYW1pY1Rocm93VHlwZUV4dGVuc2lvblByb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcVHlwZVxcTGF6eUV4cHJlc3Npb25UeXBlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9MYXp5RXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxUeXBlXFxMYXp5T3BlcmF0b3JUeXBlU3BlY2lmeWluZ0V4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0xhenlPcGVyYXRvclR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFR5cGVcXExhenlQYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvblByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9MYXp5UGFyYW1ldGVyQ2xvc3VyZVR5cGVFeHRlbnNpb25Qcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lJbmplY3Rpb25cXFR5cGVcXExhenlQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeUluamVjdGlvbi9UeXBlL0xhenlQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uUHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxUeXBlXFxPcGVyYXRvclR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1R5cGUvT3BlcmF0b3JUeXBlU3BlY2lmeWluZ0V4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxUeXBlXFxQYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvblByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9QYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvblByb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcVHlwZVxcUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvblByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVHlwZS9QYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uUHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5SW5qZWN0aW9uXFxWYWxpZGF0ZUV4Y2x1ZGVQYXRoc0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5SW5qZWN0aW9uL1ZhbGlkYXRlRXhjbHVkZVBhdGhzRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeUluamVjdGlvblxcVmFsaWRhdGVJZ25vcmVkRXJyb3JzRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3lJbmplY3Rpb24vVmFsaWRhdGVJZ25vcmVkRXJyb3JzRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRGVwZW5kZW5jeVJlc29sdmVyJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3kvRGVwZW5kZW5jeVJlc29sdmVyLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlRmV0Y2hlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZUZldGNoZXIucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5XFxFeHBvcnRlZE5vZGVSZXNvbHZlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZVJlc29sdmVyLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlVmlzaXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZVZpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5XFxFeHBvcnRlZE5vZGVcXEV4cG9ydGVkQXR0cmlidXRlTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZEF0dHJpYnV0ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5XFxFeHBvcnRlZE5vZGVcXEV4cG9ydGVkQ2xhc3NDb25zdGFudE5vZGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRDbGFzc0NvbnN0YW50Tm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRDbGFzc0NvbnN0YW50c05vZGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRDbGFzc0NvbnN0YW50c05vZGUucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5XFxFeHBvcnRlZE5vZGVcXEV4cG9ydGVkQ2xhc3NOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkQ2xhc3NOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlXFxFeHBvcnRlZEVudW1DYXNlTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZEVudW1DYXNlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRFbnVtTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZEVudW1Ob2RlLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlXFxFeHBvcnRlZEZ1bmN0aW9uTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZEZ1bmN0aW9uTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRJbnRlcmZhY2VOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkSW50ZXJmYWNlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRNZXRob2ROb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkTWV0aG9kTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRQYXJhbWV0ZXJOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkUGFyYW1ldGVyTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRQaHBEb2NOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3kvRXhwb3J0ZWROb2RlL0V4cG9ydGVkUGhwRG9jTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRQcm9wZXJ0aWVzTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZFByb3BlcnRpZXNOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcRGVwZW5kZW5jeVxcRXhwb3J0ZWROb2RlXFxFeHBvcnRlZFRyYWl0Tm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9EZXBlbmRlbmN5L0V4cG9ydGVkTm9kZS9FeHBvcnRlZFRyYWl0Tm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXEV4cG9ydGVkTm9kZVxcRXhwb3J0ZWRUcmFpdFVzZUFkYXB0YXRpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeS9FeHBvcnRlZE5vZGUvRXhwb3J0ZWRUcmFpdFVzZUFkYXB0YXRpb24ucGhwJywKICAgICdQSFBTdGFuXFxEZXBlbmRlbmN5XFxOb2RlRGVwZW5kZW5jaWVzJyA9PiAkYmFzZURpciAuICcvc3JjL0RlcGVuZGVuY3kvTm9kZURlcGVuZGVuY2llcy5waHAnLAogICAgJ1BIUFN0YW5cXERlcGVuZGVuY3lcXFJvb3RFeHBvcnRlZE5vZGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvRGVwZW5kZW5jeS9Sb290RXhwb3J0ZWROb2RlLnBocCcsCiAgICAnUEhQU3RhblxcRGlhZ25vc2VcXERpYWdub3NlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL0RpYWdub3NlL0RpYWdub3NlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcRGlhZ25vc2VcXFBIUFN0YW5EaWFnbm9zZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9EaWFnbm9zZS9QSFBTdGFuRGlhZ25vc2VFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxGaWxlXFxDb3VsZE5vdFJlYWRGaWxlRXhjZXB0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL0ZpbGUvQ291bGROb3RSZWFkRmlsZUV4Y2VwdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXEZpbGVcXENvdWxkTm90V3JpdGVGaWxlRXhjZXB0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL0ZpbGUvQ291bGROb3RXcml0ZUZpbGVFeGNlcHRpb24ucGhwJywKICAgICdQSFBTdGFuXFxGaWxlXFxGaWxlRXhjbHVkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvRmlsZS9GaWxlRXhjbHVkZXIucGhwJywKICAgICdQSFBTdGFuXFxGaWxlXFxGaWxlRXhjbHVkZXJGYWN0b3J5JyA9PiAkYmFzZURpciAuICcvc3JjL0ZpbGUvRmlsZUV4Y2x1ZGVyRmFjdG9yeS5waHAnLAogICAgJ1BIUFN0YW5cXEZpbGVcXEZpbGVFeGNsdWRlclJhd0ZhY3RvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvRmlsZS9GaWxlRXhjbHVkZXJSYXdGYWN0b3J5LnBocCcsCiAgICAnUEhQU3RhblxcRmlsZVxcRmlsZUZpbmRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9GaWxlL0ZpbGVGaW5kZXIucGhwJywKICAgICdQSFBTdGFuXFxGaWxlXFxGaWxlRmluZGVyUmVzdWx0JyA9PiAkYmFzZURpciAuICcvc3JjL0ZpbGUvRmlsZUZpbmRlclJlc3VsdC5waHAnLAogICAgJ1BIUFN0YW5cXEZpbGVcXEZpbGVIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvRmlsZS9GaWxlSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcRmlsZVxcRmlsZU1vbml0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvRmlsZS9GaWxlTW9uaXRvci5waHAnLAogICAgJ1BIUFN0YW5cXEZpbGVcXEZpbGVNb25pdG9yUmVzdWx0JyA9PiAkYmFzZURpciAuICcvc3JjL0ZpbGUvRmlsZU1vbml0b3JSZXN1bHQucGhwJywKICAgICdQSFBTdGFuXFxGaWxlXFxGaWxlUmVhZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0ZpbGUvRmlsZVJlYWRlci5waHAnLAogICAgJ1BIUFN0YW5cXEZpbGVcXEZpbGVXcml0ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvRmlsZS9GaWxlV3JpdGVyLnBocCcsCiAgICAnUEhQU3RhblxcRmlsZVxcRnV6enlSZWxhdGl2ZVBhdGhIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvRmlsZS9GdXp6eVJlbGF0aXZlUGF0aEhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXEZpbGVcXE51bGxSZWxhdGl2ZVBhdGhIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvRmlsZS9OdWxsUmVsYXRpdmVQYXRoSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcRmlsZVxcUGFyZW50RGlyZWN0b3J5UmVsYXRpdmVQYXRoSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0ZpbGUvUGFyZW50RGlyZWN0b3J5UmVsYXRpdmVQYXRoSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcRmlsZVxcUGF0aE5vdEZvdW5kRXhjZXB0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL0ZpbGUvUGF0aE5vdEZvdW5kRXhjZXB0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcRmlsZVxcUmVsYXRpdmVQYXRoSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0ZpbGUvUmVsYXRpdmVQYXRoSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcRmlsZVxcU2ltcGxlUmVsYXRpdmVQYXRoSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0ZpbGUvU2ltcGxlUmVsYXRpdmVQYXRoSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcRmlsZVxcU3lzdGVtQWdub3N0aWNTaW1wbGVSZWxhdGl2ZVBhdGhIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvRmlsZS9TeXN0ZW1BZ25vc3RpY1NpbXBsZVJlbGF0aXZlUGF0aEhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXEludGVybmFsXFxBZ2VudERldGVjdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL0ludGVybmFsL0FnZW50RGV0ZWN0b3IucGhwJywKICAgICdQSFBTdGFuXFxJbnRlcm5hbFxcQnl0ZXNIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvSW50ZXJuYWwvQnl0ZXNIZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxJbnRlcm5hbFxcQ29tYmluYXRpb25zSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL0ludGVybmFsL0NvbWJpbmF0aW9uc0hlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXEludGVybmFsXFxDb21wb3NlckhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9JbnRlcm5hbC9Db21wb3NlckhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXEludGVybmFsXFxDb250YWluZXJEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9JbnRlcm5hbC9Db250YWluZXJEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXEludGVybmFsXFxEaXJlY3RvcnlDcmVhdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL0ludGVybmFsL0RpcmVjdG9yeUNyZWF0b3IucGhwJywKICAgICdQSFBTdGFuXFxJbnRlcm5hbFxcRGlyZWN0b3J5Q3JlYXRvckV4Y2VwdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9JbnRlcm5hbC9EaXJlY3RvcnlDcmVhdG9yRXhjZXB0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcSW50ZXJuYWxcXFNwcmludGZIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvSW50ZXJuYWwvU3ByaW50ZkhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXEFub255bW91c0NsYXNzTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0Fub255bW91c0NsYXNzTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXEJvb2xlYW5BbmROb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvQm9vbGVhbkFuZE5vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxCb29sZWFuT3JOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvQm9vbGVhbk9yTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXEJyZWFrbGVzc1doaWxlTG9vcE5vZGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9CcmVha2xlc3NXaGlsZUxvb3BOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcQ2F0Y2hXaXRoVW50aHJvd25FeGNlcHRpb25Ob2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvQ2F0Y2hXaXRoVW50aHJvd25FeGNlcHRpb25Ob2RlLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcQ2xhc3NDb25zdGFudHNOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvQ2xhc3NDb25zdGFudHNOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcQ2xhc3NNZXRob2QnID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9DbGFzc01ldGhvZC5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXENsYXNzTWV0aG9kc05vZGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9DbGFzc01ldGhvZHNOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcQ2xhc3NQcm9wZXJ0aWVzTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0NsYXNzUHJvcGVydGllc05vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxDbGFzc1Byb3BlcnR5Tm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0NsYXNzUHJvcGVydHlOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcQ2xhc3NTdGF0ZW1lbnRzR2F0aGVyZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9DbGFzc1N0YXRlbWVudHNHYXRoZXJlci5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXENsb3N1cmVSZXR1cm5TdGF0ZW1lbnRzTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0Nsb3N1cmVSZXR1cm5TdGF0ZW1lbnRzTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXENvbGxlY3RlZERhdGFOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvQ29sbGVjdGVkRGF0YU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxDb25zdGFudFxcQ2xhc3NDb25zdGFudEZldGNoJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvQ29uc3RhbnQvQ2xhc3NDb25zdGFudEZldGNoLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcRG9XaGlsZUxvb3BDb25kaXRpb25Ob2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvRG9XaGlsZUxvb3BDb25kaXRpb25Ob2RlLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcRXhlY3V0aW9uRW5kTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0V4ZWN1dGlvbkVuZE5vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxFeHByXFxBbHdheXNSZW1lbWJlcmVkRXhwcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0V4cHIvQWx3YXlzUmVtZW1iZXJlZEV4cHIucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxFeHByXFxFeGlzdGluZ0FycmF5RGltRmV0Y2gnID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9FeHByL0V4aXN0aW5nQXJyYXlEaW1GZXRjaC5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXEV4cHJcXEdldEl0ZXJhYmxlS2V5VHlwZUV4cHInID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9FeHByL0dldEl0ZXJhYmxlS2V5VHlwZUV4cHIucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxFeHByXFxHZXRJdGVyYWJsZVZhbHVlVHlwZUV4cHInID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9FeHByL0dldEl0ZXJhYmxlVmFsdWVUeXBlRXhwci5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXEV4cHJcXEdldE9mZnNldFZhbHVlVHlwZUV4cHInID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9FeHByL0dldE9mZnNldFZhbHVlVHlwZUV4cHIucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxFeHByXFxPcmlnaW5hbFByb3BlcnR5VHlwZUV4cHInID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9FeHByL09yaWdpbmFsUHJvcGVydHlUeXBlRXhwci5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXEV4cHJcXFBhcmFtZXRlclZhcmlhYmxlT3JpZ2luYWxWYWx1ZUV4cHInID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9FeHByL1BhcmFtZXRlclZhcmlhYmxlT3JpZ2luYWxWYWx1ZUV4cHIucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxFeHByXFxQcm9wZXJ0eUluaXRpYWxpemF0aW9uRXhwcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0V4cHIvUHJvcGVydHlJbml0aWFsaXphdGlvbkV4cHIucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxFeHByXFxTZXRFeGlzdGluZ09mZnNldFZhbHVlVHlwZUV4cHInID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9FeHByL1NldEV4aXN0aW5nT2Zmc2V0VmFsdWVUeXBlRXhwci5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXEV4cHJcXFNldE9mZnNldFZhbHVlVHlwZUV4cHInID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9FeHByL1NldE9mZnNldFZhbHVlVHlwZUV4cHIucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxFeHByXFxUeXBlRXhwcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0V4cHIvVHlwZUV4cHIucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxFeHByXFxVbnNldE9mZnNldEV4cHInID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9FeHByL1Vuc2V0T2Zmc2V0RXhwci5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXEZpbGVOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvRmlsZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxGaW5hbGx5RXhpdFBvaW50c05vZGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9GaW5hbGx5RXhpdFBvaW50c05vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxGdW5jdGlvbkNhbGxhYmxlTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0Z1bmN0aW9uQ2FsbGFibGVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnRzTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0Z1bmN0aW9uUmV0dXJuU3RhdGVtZW50c05vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxJbkFycm93RnVuY3Rpb25Ob2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvSW5BcnJvd0Z1bmN0aW9uTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXEluQ2xhc3NNZXRob2ROb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvSW5DbGFzc01ldGhvZE5vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxJbkNsYXNzTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0luQ2xhc3NOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcSW5DbG9zdXJlTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0luQ2xvc3VyZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxJbkZvcmVhY2hOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvSW5Gb3JlYWNoTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXEluRnVuY3Rpb25Ob2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvSW5GdW5jdGlvbk5vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxJblRyYWl0Tm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0luVHJhaXROb2RlLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcSW5zdGFudGlhdGlvbkNhbGxhYmxlTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL0luc3RhbnRpYXRpb25DYWxsYWJsZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxJbnZhbGlkYXRlRXhwck5vZGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9JbnZhbGlkYXRlRXhwck5vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxJc3NldEV4cHInID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9Jc3NldEV4cHIucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxMaXRlcmFsQXJyYXlJdGVtJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvTGl0ZXJhbEFycmF5SXRlbS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXExpdGVyYWxBcnJheU5vZGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9MaXRlcmFsQXJyYXlOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcTWF0Y2hFeHByZXNzaW9uQXJtJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvTWF0Y2hFeHByZXNzaW9uQXJtLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcTWF0Y2hFeHByZXNzaW9uQXJtQm9keScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL01hdGNoRXhwcmVzc2lvbkFybUJvZHkucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxNYXRjaEV4cHJlc3Npb25Bcm1Db25kaXRpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9NYXRjaEV4cHJlc3Npb25Bcm1Db25kaXRpb24ucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxNYXRjaEV4cHJlc3Npb25Ob2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvTWF0Y2hFeHByZXNzaW9uTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXE1ldGhvZENhbGxhYmxlTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL01ldGhvZENhbGxhYmxlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXE1ldGhvZFJldHVyblN0YXRlbWVudHNOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvTWV0aG9kUmV0dXJuU3RhdGVtZW50c05vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxNZXRob2RcXE1ldGhvZENhbGwnID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9NZXRob2QvTWV0aG9kQ2FsbC5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXE5vb3BFeHByZXNzaW9uTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL05vb3BFeHByZXNzaW9uTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXFByaW50ZXJcXEV4cHJQcmludGVyJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvUHJpbnRlci9FeHByUHJpbnRlci5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXFByaW50ZXJcXE5vZGVUeXBlUHJpbnRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL1ByaW50ZXIvTm9kZVR5cGVQcmludGVyLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcUHJpbnRlclxcUHJpbnRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL1ByaW50ZXIvUHJpbnRlci5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXFByb3BlcnR5QXNzaWduTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL1Byb3BlcnR5QXNzaWduTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXFByb3BlcnR5XFxQcm9wZXJ0eUFzc2lnbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL1Byb3BlcnR5L1Byb3BlcnR5QXNzaWduLnBocCcsCiAgICAnUEhQU3RhblxcTm9kZVxcUHJvcGVydHlcXFByb3BlcnR5UmVhZCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL1Byb3BlcnR5L1Byb3BlcnR5UmVhZC5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXFByb3BlcnR5XFxQcm9wZXJ0eVdyaXRlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvUHJvcGVydHkvUHJvcGVydHlXcml0ZS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXFJldHVyblN0YXRlbWVudCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL1JldHVyblN0YXRlbWVudC5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXFJldHVyblN0YXRlbWVudHNOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvUmV0dXJuU3RhdGVtZW50c05vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxTdGF0aWNNZXRob2RDYWxsYWJsZU5vZGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9TdGF0aWNNZXRob2RDYWxsYWJsZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxVbnJlYWNoYWJsZVN0YXRlbWVudE5vZGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvTm9kZS9VbnJlYWNoYWJsZVN0YXRlbWVudE5vZGUucGhwJywKICAgICdQSFBTdGFuXFxOb2RlXFxWYXJUYWdDaGFuZ2VkRXhwcmVzc2lvblR5cGVOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvVmFyVGFnQ2hhbmdlZEV4cHJlc3Npb25UeXBlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXFZhcmlhYmxlQXNzaWduTm9kZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9Ob2RlL1ZhcmlhYmxlQXNzaWduTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXE5vZGVcXFZpcnR1YWxOb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL05vZGUvVmlydHVhbE5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQYXJhbGxlbFxcUGFyYWxsZWxBbmFseXNlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QYXJhbGxlbC9QYXJhbGxlbEFuYWx5c2VyLnBocCcsCiAgICAnUEhQU3RhblxcUGFyYWxsZWxcXFByb2Nlc3MnID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyYWxsZWwvUHJvY2Vzcy5waHAnLAogICAgJ1BIUFN0YW5cXFBhcmFsbGVsXFxQcm9jZXNzUG9vbCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9QYXJhbGxlbC9Qcm9jZXNzUG9vbC5waHAnLAogICAgJ1BIUFN0YW5cXFBhcmFsbGVsXFxQcm9jZXNzVGltZWRPdXRFeGNlcHRpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyYWxsZWwvUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUGFyYWxsZWxcXFNjaGVkdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1BhcmFsbGVsL1NjaGVkdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUGFyYWxsZWxcXFNjaGVkdWxlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QYXJhbGxlbC9TY2hlZHVsZXIucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXEFub255bW91c0NsYXNzVmlzaXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QYXJzZXIvQW5vbnltb3VzQ2xhc3NWaXNpdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUGFyc2VyXFxBcnJheUZpbHRlckFyZ1Zpc2l0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyc2VyL0FycmF5RmlsdGVyQXJnVmlzaXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFBhcnNlclxcQXJyYXlGaW5kQXJnVmlzaXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QYXJzZXIvQXJyYXlGaW5kQXJnVmlzaXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFBhcnNlclxcQXJyYXlNYXBBcmdWaXNpdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1BhcnNlci9BcnJheU1hcEFyZ1Zpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXEFycmF5V2Fsa0FyZ1Zpc2l0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyc2VyL0FycmF5V2Fsa0FyZ1Zpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXEFycm93RnVuY3Rpb25BcmdWaXNpdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1BhcnNlci9BcnJvd0Z1bmN0aW9uQXJnVmlzaXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFBhcnNlclxcQ2FjaGVkUGFyc2VyJyA9PiAkYmFzZURpciAuICcvc3JjL1BhcnNlci9DYWNoZWRQYXJzZXIucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXENsZWFuaW5nUGFyc2VyJyA9PiAkYmFzZURpciAuICcvc3JjL1BhcnNlci9DbGVhbmluZ1BhcnNlci5waHAnLAogICAgJ1BIUFN0YW5cXFBhcnNlclxcQ2xlYW5pbmdWaXNpdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1BhcnNlci9DbGVhbmluZ1Zpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXENsb3N1cmVBcmdWaXNpdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1BhcnNlci9DbG9zdXJlQXJnVmlzaXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFBhcnNlclxcQ2xvc3VyZUJpbmRBcmdWaXNpdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1BhcnNlci9DbG9zdXJlQmluZEFyZ1Zpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXENsb3N1cmVCaW5kVG9WYXJWaXNpdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1BhcnNlci9DbG9zdXJlQmluZFRvVmFyVmlzaXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFBhcnNlclxcQ3VybFNldE9wdEFyZ1Zpc2l0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyc2VyL0N1cmxTZXRPcHRBcmdWaXNpdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUGFyc2VyXFxEZWNsYXJlUG9zaXRpb25WaXNpdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1BhcnNlci9EZWNsYXJlUG9zaXRpb25WaXNpdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUGFyc2VyXFxGdW5jdGlvbkNhbGxTdGF0ZW1lbnRGaW5kZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyc2VyL0Z1bmN0aW9uQ2FsbFN0YXRlbWVudEZpbmRlci5waHAnLAogICAgJ1BIUFN0YW5cXFBhcnNlclxcSW1tZWRpYXRlbHlJbnZva2VkQ2xvc3VyZVZpc2l0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyc2VyL0ltbWVkaWF0ZWx5SW52b2tlZENsb3N1cmVWaXNpdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUGFyc2VyXFxMYXN0Q29uZGl0aW9uVmlzaXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QYXJzZXIvTGFzdENvbmRpdGlvblZpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXExleGVyRmFjdG9yeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9QYXJzZXIvTGV4ZXJGYWN0b3J5LnBocCcsCiAgICAnUEhQU3RhblxcUGFyc2VyXFxNYWdpY0NvbnN0YW50UGFyYW1EZWZhdWx0VmlzaXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QYXJzZXIvTWFnaWNDb25zdGFudFBhcmFtRGVmYXVsdFZpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXE5ld0Fzc2lnbmVkVG9Qcm9wZXJ0eVZpc2l0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyc2VyL05ld0Fzc2lnbmVkVG9Qcm9wZXJ0eVZpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXFBhcmVudFN0bXRUeXBlc1Zpc2l0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyc2VyL1BhcmVudFN0bXRUeXBlc1Zpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXFBhcnNlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QYXJzZXIvUGFyc2VyLnBocCcsCiAgICAnUEhQU3RhblxcUGFyc2VyXFxQYXJzZXJFcnJvcnNFeGNlcHRpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyc2VyL1BhcnNlckVycm9yc0V4Y2VwdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFBhcnNlclxcUGF0aFJvdXRpbmdQYXJzZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyc2VyL1BhdGhSb3V0aW5nUGFyc2VyLnBocCcsCiAgICAnUEhQU3RhblxcUGFyc2VyXFxQaHBQYXJzZXJEZWNvcmF0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyc2VyL1BocFBhcnNlckRlY29yYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFBhcnNlclxcUmVtb3ZlVW51c2VkQ29kZUJ5UGhwVmVyc2lvbklkVmlzaXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QYXJzZXIvUmVtb3ZlVW51c2VkQ29kZUJ5UGhwVmVyc2lvbklkVmlzaXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFBhcnNlclxcUmljaFBhcnNlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QYXJzZXIvUmljaFBhcnNlci5waHAnLAogICAgJ1BIUFN0YW5cXFBhcnNlclxcU2ltcGxlUGFyc2VyJyA9PiAkYmFzZURpciAuICcvc3JjL1BhcnNlci9TaW1wbGVQYXJzZXIucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXFRyYWl0Q29sbGVjdGluZ1Zpc2l0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyc2VyL1RyYWl0Q29sbGVjdGluZ1Zpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXFRyeUNhdGNoVHlwZVZpc2l0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUGFyc2VyL1RyeUNhdGNoVHlwZVZpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxQYXJzZXJcXFR5cGVUcmF2ZXJzZXJJbnN0YW5jZW9mVmlzaXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QYXJzZXIvVHlwZVRyYXZlcnNlckluc3RhbmNlb2ZWaXNpdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUGhwOFN0dWJzTWFwJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocC04LXN0dWJzL1BocDhTdHVic01hcC5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxBYnN0cmFjdE5vZGVWaXNpdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9BYnN0cmFjdE5vZGVWaXNpdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXEF0dHJpYnV0ZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQXR0cmlidXRlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXENvbnN0RXhwclxcQ29uc3RFeHByQXJyYXlJdGVtTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwckFycmF5SXRlbU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcQ29uc3RFeHByXFxDb25zdEV4cHJBcnJheU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEV4cHJBcnJheU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcQ29uc3RFeHByXFxDb25zdEV4cHJGYWxzZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEV4cHJGYWxzZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcQ29uc3RFeHByXFxDb25zdEV4cHJGbG9hdE5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEV4cHJGbG9hdE5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcQ29uc3RFeHByXFxDb25zdEV4cHJJbnRlZ2VyTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwckludGVnZXJOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXENvbnN0RXhwclxcQ29uc3RFeHByTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwck5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcQ29uc3RFeHByXFxDb25zdEV4cHJOdWxsTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwck51bGxOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXENvbnN0RXhwclxcQ29uc3RFeHByU3RyaW5nTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwclN0cmluZ05vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcQ29uc3RFeHByXFxDb25zdEV4cHJUcnVlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0NvbnN0RXhwclRydWVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXENvbnN0RXhwclxcQ29uc3RGZXRjaE5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L0NvbnN0RXhwci9Db25zdEZldGNoTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxDb25zdEV4cHJcXERvY3RyaW5lQ29uc3RFeHByU3RyaW5nTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvQ29uc3RFeHByL0RvY3RyaW5lQ29uc3RFeHByU3RyaW5nTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxDb25zdEV4cHJcXFF1b3RlQXdhcmVDb25zdEV4cHJTdHJpbmdOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Db25zdEV4cHIvUXVvdGVBd2FyZUNvbnN0RXhwclN0cmluZ05vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxOb2RlQXR0cmlidXRlcycgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvTm9kZUF0dHJpYnV0ZXMucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcTm9kZVRyYXZlcnNlcicgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvTm9kZVRyYXZlcnNlci5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxOb2RlVmlzaXRvcicgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvTm9kZVZpc2l0b3IucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcTm9kZVZpc2l0b3JcXENsb25pbmdWaXNpdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9Ob2RlVmlzaXRvci9DbG9uaW5nVmlzaXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXEFzc2VydFRhZ01ldGhvZFZhbHVlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0Fzc2VydFRhZ01ldGhvZFZhbHVlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXEFzc2VydFRhZ1Byb3BlcnR5VmFsdWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvQXNzZXJ0VGFnUHJvcGVydHlWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxBc3NlcnRUYWdWYWx1ZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9Bc3NlcnRUYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxEZXByZWNhdGVkVGFnVmFsdWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvRGVwcmVjYXRlZFRhZ1ZhbHVlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXERvY3RyaW5lXFxEb2N0cmluZUFubm90YXRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9Eb2N0cmluZS9Eb2N0cmluZUFubm90YXRpb24ucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxEb2N0cmluZVxcRG9jdHJpbmVBcmd1bWVudCcgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0RvY3RyaW5lL0RvY3RyaW5lQXJndW1lbnQucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxEb2N0cmluZVxcRG9jdHJpbmVBcnJheScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0RvY3RyaW5lL0RvY3RyaW5lQXJyYXkucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxEb2N0cmluZVxcRG9jdHJpbmVBcnJheUl0ZW0nID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9Eb2N0cmluZS9Eb2N0cmluZUFycmF5SXRlbS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXERvY3RyaW5lXFxEb2N0cmluZVRhZ1ZhbHVlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0RvY3RyaW5lL0RvY3RyaW5lVGFnVmFsdWVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcRXh0ZW5kc1RhZ1ZhbHVlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0V4dGVuZHNUYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxHZW5lcmljVGFnVmFsdWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvR2VuZXJpY1RhZ1ZhbHVlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXEltcGxlbWVudHNUYWdWYWx1ZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9JbXBsZW1lbnRzVGFnVmFsdWVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcSW52YWxpZFRhZ1ZhbHVlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL0ludmFsaWRUYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxNZXRob2RUYWdWYWx1ZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9NZXRob2RUYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxNZXRob2RUYWdWYWx1ZVBhcmFtZXRlck5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9NZXRob2RUYWdWYWx1ZVBhcmFtZXRlck5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxNaXhpblRhZ1ZhbHVlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL01peGluVGFnVmFsdWVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcUGFyYW1DbG9zdXJlVGhpc1RhZ1ZhbHVlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1BhcmFtQ2xvc3VyZVRoaXNUYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxQYXJhbUltbWVkaWF0ZWx5SW52b2tlZENhbGxhYmxlVGFnVmFsdWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUGFyYW1JbW1lZGlhdGVseUludm9rZWRDYWxsYWJsZVRhZ1ZhbHVlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFBhcmFtTGF0ZXJJbnZva2VkQ2FsbGFibGVUYWdWYWx1ZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QYXJhbUxhdGVySW52b2tlZENhbGxhYmxlVGFnVmFsdWVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcUGFyYW1PdXRUYWdWYWx1ZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QYXJhbU91dFRhZ1ZhbHVlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFBhcmFtVGFnVmFsdWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUGFyYW1UYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxQaHBEb2NDaGlsZE5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QaHBEb2NDaGlsZE5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxQaHBEb2NOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUGhwRG9jTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFBocERvY1RhZ05vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QaHBEb2NUYWdOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcUGhwRG9jVGFnVmFsdWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUGhwRG9jVGFnVmFsdWVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcUGhwRG9jVGV4dE5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9QaHBEb2NUZXh0Tm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFByb3BlcnR5VGFnVmFsdWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUHJvcGVydHlUYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxQdXJlVW5sZXNzQ2FsbGFibGVJc0ltcHVyZVRhZ1ZhbHVlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvUGhwRG9jL1B1cmVVbmxlc3NDYWxsYWJsZUlzSW1wdXJlVGFnVmFsdWVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcUmVxdWlyZUV4dGVuZHNUYWdWYWx1ZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9SZXF1aXJlRXh0ZW5kc1RhZ1ZhbHVlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFJlcXVpcmVJbXBsZW1lbnRzVGFnVmFsdWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvUmVxdWlyZUltcGxlbWVudHNUYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxSZXR1cm5UYWdWYWx1ZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9SZXR1cm5UYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxTZWxmT3V0VGFnVmFsdWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvU2VsZk91dFRhZ1ZhbHVlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFRlbXBsYXRlVGFnVmFsdWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvVGVtcGxhdGVUYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxUaHJvd3NUYWdWYWx1ZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9UaHJvd3NUYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxUeXBlQWxpYXNJbXBvcnRUYWdWYWx1ZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9UeXBlQWxpYXNJbXBvcnRUYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxUeXBlQWxpYXNUYWdWYWx1ZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9UeXBlQWxpYXNUYWdWYWx1ZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcUGhwRG9jXFxUeXBlbGVzc1BhcmFtVGFnVmFsdWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvVHlwZWxlc3NQYXJhbVRhZ1ZhbHVlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxQaHBEb2NcXFVzZXNUYWdWYWx1ZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1BocERvYy9Vc2VzVGFnVmFsdWVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFBocERvY1xcVmFyVGFnVmFsdWVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9QaHBEb2MvVmFyVGFnVmFsdWVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXEFycmF5U2hhcGVJdGVtTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9BcnJheVNoYXBlSXRlbU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcQXJyYXlTaGFwZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvQXJyYXlTaGFwZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcQXJyYXlTaGFwZVVuc2VhbGVkVHlwZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvQXJyYXlTaGFwZVVuc2VhbGVkVHlwZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcQXJyYXlUeXBlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9BcnJheVR5cGVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXENhbGxhYmxlVHlwZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvQ2FsbGFibGVUeXBlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxUeXBlXFxDYWxsYWJsZVR5cGVQYXJhbWV0ZXJOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0NhbGxhYmxlVHlwZVBhcmFtZXRlck5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcQ29uZGl0aW9uYWxUeXBlRm9yUGFyYW1ldGVyTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9Db25kaXRpb25hbFR5cGVGb3JQYXJhbWV0ZXJOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXENvbmRpdGlvbmFsVHlwZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvQ29uZGl0aW9uYWxUeXBlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxUeXBlXFxDb25zdFR5cGVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0NvbnN0VHlwZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcR2VuZXJpY1R5cGVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0dlbmVyaWNUeXBlTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxUeXBlXFxJZGVudGlmaWVyVHlwZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvSWRlbnRpZmllclR5cGVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXEludGVyc2VjdGlvblR5cGVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL0ludGVyc2VjdGlvblR5cGVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXEludmFsaWRUeXBlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9JbnZhbGlkVHlwZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcTnVsbGFibGVUeXBlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9OdWxsYWJsZVR5cGVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXE9iamVjdFNoYXBlSXRlbU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvT2JqZWN0U2hhcGVJdGVtTm9kZS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcQXN0XFxUeXBlXFxPYmplY3RTaGFwZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvT2JqZWN0U2hhcGVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXE9mZnNldEFjY2Vzc1R5cGVOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL0FzdC9UeXBlL09mZnNldEFjY2Vzc1R5cGVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxBc3RcXFR5cGVcXFRoaXNUeXBlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9UaGlzVHlwZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcVHlwZU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvQXN0L1R5cGUvVHlwZU5vZGUucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXEFzdFxcVHlwZVxcVW5pb25UeXBlTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9Bc3QvVHlwZS9VbmlvblR5cGVOb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxMZXhlclxcTGV4ZXInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvTGV4ZXIvTGV4ZXIucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXFBhcnNlclxcQ29uc3RFeHByUGFyc2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9Db25zdEV4cHJQYXJzZXIucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXFBhcnNlclxcUGFyc2VyRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9QYXJzZXJFeGNlcHRpb24ucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXFBhcnNlclxcUGhwRG9jUGFyc2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9QaHBEb2NQYXJzZXIucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXFBhcnNlclxcU3RyaW5nVW5lc2NhcGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9TdHJpbmdVbmVzY2FwZXIucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXFBhcnNlclxcVG9rZW5JdGVyYXRvcicgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9QYXJzZXIvVG9rZW5JdGVyYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1BhcnNlclxcUGFyc2VyXFxUeXBlUGFyc2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHBzdGFuL3BocGRvYy1wYXJzZXIvc3JjL1BhcnNlci9UeXBlUGFyc2VyLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxQcmludGVyXFxEaWZmRWxlbScgPT4gJHZlbmRvckRpciAuICcvcGhwc3Rhbi9waHBkb2MtcGFyc2VyL3NyYy9QcmludGVyL0RpZmZFbGVtLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jUGFyc2VyXFxQcmludGVyXFxEaWZmZXInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvUHJpbnRlci9EaWZmZXIucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NQYXJzZXJcXFByaW50ZXJcXFByaW50ZXInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHN0YW4vcGhwZG9jLXBhcnNlci9zcmMvUHJpbnRlci9QcmludGVyLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxDb25zdEV4cHJOb2RlUmVzb2x2ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL0NvbnN0RXhwck5vZGVSZXNvbHZlci5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcQ29uc3RFeHByUGFyc2VyRmFjdG9yeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvQ29uc3RFeHByUGFyc2VyRmFjdG9yeS5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcQ291bnRhYmxlU3R1YkZpbGVzRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9Db3VudGFibGVTdHViRmlsZXNFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXERlZmF1bHRTdHViRmlsZXNQcm92aWRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvRGVmYXVsdFN0dWJGaWxlc1Byb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxEaXJlY3RUeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvRGlyZWN0VHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXEpzb25WYWxpZGF0ZVN0dWJGaWxlc0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvSnNvblZhbGlkYXRlU3R1YkZpbGVzRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxMYXp5VHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL0xhenlUeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcTmFtZVNjb3BlQWxyZWFkeUJlaW5nQ3JlYXRlZEV4Y2VwdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvTmFtZVNjb3BlQWxyZWFkeUJlaW5nQ3JlYXRlZEV4Y2VwdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcUGhwRG9jQmxvY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1BocERvY0Jsb2NrLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxQaHBEb2NJbmhlcml0YW5jZVJlc29sdmVyJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9QaHBEb2NJbmhlcml0YW5jZVJlc29sdmVyLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxQaHBEb2NOb2RlUmVzb2x2ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1BocERvY05vZGVSZXNvbHZlci5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcUGhwRG9jU3RyaW5nUmVzb2x2ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1BocERvY1N0cmluZ1Jlc29sdmVyLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxSZWZsZWN0aW9uRW51bVN0dWJGaWxlc0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvUmVmbGVjdGlvbkVudW1TdHViRmlsZXNFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFJlc29sdmVkUGhwRG9jQmxvY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1Jlc29sdmVkUGhwRG9jQmxvY2sucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFNvY2tldFNlbGVjdFN0dWJGaWxlc0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvU29ja2V0U2VsZWN0U3R1YkZpbGVzRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxTdHViRmlsZXNFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1N0dWJGaWxlc0V4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcU3R1YkZpbGVzUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1N0dWJGaWxlc1Byb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxTdHViUGhwRG9jUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1N0dWJQaHBEb2NQcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcU3R1YlNvdXJjZUxvY2F0b3JGYWN0b3J5JyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9TdHViU291cmNlTG9jYXRvckZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFN0dWJWYWxpZGF0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1N0dWJWYWxpZGF0b3IucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFRhZ1xcQXNzZXJ0VGFnJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9UYWcvQXNzZXJ0VGFnLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXEFzc2VydFRhZ1BhcmFtZXRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvVGFnL0Fzc2VydFRhZ1BhcmFtZXRlci5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxEZXByZWNhdGVkVGFnJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9UYWcvRGVwcmVjYXRlZFRhZy5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxFeHRlbmRzVGFnJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9UYWcvRXh0ZW5kc1RhZy5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxJbXBsZW1lbnRzVGFnJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9UYWcvSW1wbGVtZW50c1RhZy5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxNZXRob2RUYWcnID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1RhZy9NZXRob2RUYWcucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFRhZ1xcTWV0aG9kVGFnUGFyYW1ldGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9UYWcvTWV0aG9kVGFnUGFyYW1ldGVyLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXE1peGluVGFnJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9UYWcvTWl4aW5UYWcucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFRhZ1xcUGFyYW1DbG9zdXJlVGhpc1RhZycgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvVGFnL1BhcmFtQ2xvc3VyZVRoaXNUYWcucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFRhZ1xcUGFyYW1PdXRUYWcnID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1RhZy9QYXJhbU91dFRhZy5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxQYXJhbVRhZycgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvVGFnL1BhcmFtVGFnLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXFByb3BlcnR5VGFnJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9UYWcvUHJvcGVydHlUYWcucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFRhZ1xcUmVxdWlyZUV4dGVuZHNUYWcnID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1RhZy9SZXF1aXJlRXh0ZW5kc1RhZy5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxSZXF1aXJlSW1wbGVtZW50c1RhZycgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvVGFnL1JlcXVpcmVJbXBsZW1lbnRzVGFnLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXFJldHVyblRhZycgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvVGFnL1JldHVyblRhZy5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxTZWxmT3V0VHlwZVRhZycgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvVGFnL1NlbGZPdXRUeXBlVGFnLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXFRlbXBsYXRlVGFnJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9UYWcvVGVtcGxhdGVUYWcucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFRhZ1xcVGhyb3dzVGFnJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9UYWcvVGhyb3dzVGFnLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxUYWdcXFR5cGVBbGlhc0ltcG9ydFRhZycgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvVGFnL1R5cGVBbGlhc0ltcG9ydFRhZy5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxUeXBlQWxpYXNUYWcnID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1RhZy9UeXBlQWxpYXNUYWcucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFRhZ1xcVHlwZWRUYWcnID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1RhZy9UeXBlZFRhZy5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxVc2VzVGFnJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9UYWcvVXNlc1RhZy5waHAnLAogICAgJ1BIUFN0YW5cXFBocERvY1xcVGFnXFxWYXJUYWcnID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1RhZy9WYXJUYWcucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFR5cGVOb2RlUmVzb2x2ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUGhwRG9jL1R5cGVOb2RlUmVzb2x2ZXIucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFR5cGVOb2RlUmVzb2x2ZXJBd2FyZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvVHlwZU5vZGVSZXNvbHZlckF3YXJlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxUeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1BocERvYy9UeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxUeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uQXdhcmVSZWdpc3RyeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvVHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvbkF3YXJlUmVnaXN0cnkucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFR5cGVOb2RlUmVzb2x2ZXJFeHRlbnNpb25SZWdpc3RyeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvVHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5LnBocCcsCiAgICAnUEhQU3RhblxcUGhwRG9jXFxUeXBlTm9kZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnlQcm92aWRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvVHlwZU5vZGVSZXNvbHZlckV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxQaHBEb2NcXFR5cGVTdHJpbmdSZXNvbHZlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHBEb2MvVHlwZVN0cmluZ1Jlc29sdmVyLnBocCcsCiAgICAnUEhQU3RhblxcUGhwXFxQaHBWZXJzaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1BocC9QaHBWZXJzaW9uLnBocCcsCiAgICAnUEhQU3RhblxcUGhwXFxQaHBWZXJzaW9uRmFjdG9yeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHAvUGhwVmVyc2lvbkZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxQaHBcXFBocFZlcnNpb25GYWN0b3J5RmFjdG9yeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9QaHAvUGhwVmVyc2lvbkZhY3RvcnlGYWN0b3J5LnBocCcsCiAgICAnUEhQU3RhblxcUHJvY2Vzc1xcQ3B1Q29yZUNvdW50ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUHJvY2Vzcy9DcHVDb3JlQ291bnRlci5waHAnLAogICAgJ1BIUFN0YW5cXFByb2Nlc3NcXFByb2Nlc3NDYW5jZWxlZEV4Y2VwdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9Qcm9jZXNzL1Byb2Nlc3NDYW5jZWxlZEV4Y2VwdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFByb2Nlc3NcXFByb2Nlc3NDcmFzaGVkRXhjZXB0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1Byb2Nlc3MvUHJvY2Vzc0NyYXNoZWRFeGNlcHRpb24ucGhwJywKICAgICdQSFBTdGFuXFxQcm9jZXNzXFxQcm9jZXNzSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1Byb2Nlc3MvUHJvY2Vzc0hlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFByb2Nlc3NcXFByb2Nlc3NQcm9taXNlJyA9PiAkYmFzZURpciAuICcvc3JjL1Byb2Nlc3MvUHJvY2Vzc1Byb21pc2UucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxBZGRpdGlvbmFsQ29uc3RydWN0b3JzRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vQWRkaXRpb25hbENvbnN0cnVjdG9yc0V4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEFsbG93ZWRTdWJUeXBlc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0FsbG93ZWRTdWJUeXBlc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEFubm90YXRpb25zXFxBbm5vdGF0aW9uTWV0aG9kUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0Fubm90YXRpb25zL0Fubm90YXRpb25NZXRob2RSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQW5ub3RhdGlvbnNcXEFubm90YXRpb25Qcm9wZXJ0eVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9Bbm5vdGF0aW9ucy9Bbm5vdGF0aW9uUHJvcGVydHlSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQW5ub3RhdGlvbnNcXEFubm90YXRpb25zTWV0aG9kUGFyYW1ldGVyUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0Fubm90YXRpb25zL0Fubm90YXRpb25zTWV0aG9kUGFyYW1ldGVyUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEFubm90YXRpb25zXFxBbm5vdGF0aW9uc01ldGhvZHNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9Bbm5vdGF0aW9ucy9Bbm5vdGF0aW9uc01ldGhvZHNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxBbm5vdGF0aW9uc1xcQW5ub3RhdGlvbnNQcm9wZXJ0aWVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vQW5ub3RhdGlvbnMvQW5ub3RhdGlvbnNQcm9wZXJ0aWVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQXNzZXJ0aW9ucycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0Fzc2VydGlvbnMucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb25Qcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25Qcm92aWRlckZhY3RvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb25Qcm92aWRlckZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uU291cmNlTG9jYXRvckZhY3RvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb25Tb3VyY2VMb2NhdG9yRmFjdG9yeS5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFJlZmxlY3RvclxcTWVtb2l6aW5nUmVmbGVjdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9SZWZsZWN0b3IvTWVtb2l6aW5nUmVmbGVjdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcQXV0b2xvYWRGdW5jdGlvbnNTb3VyY2VMb2NhdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL0F1dG9sb2FkRnVuY3Rpb25zU291cmNlTG9jYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEF1dG9sb2FkU291cmNlTG9jYXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9BdXRvbG9hZFNvdXJjZUxvY2F0b3IucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxDYWNoaW5nVmlzaXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9DYWNoaW5nVmlzaXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXENvbXBvc2VySnNvbkFuZEluc3RhbGxlZEpzb25Tb3VyY2VMb2NhdG9yTWFrZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvQ29tcG9zZXJKc29uQW5kSW5zdGFsbGVkSnNvblNvdXJjZUxvY2F0b3JNYWtlci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEZldGNoZWROb2RlJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL0ZldGNoZWROb2RlLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcRmV0Y2hlZE5vZGVzUmVzdWx0JyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL0ZldGNoZWROb2Rlc1Jlc3VsdC5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEZpbGVOb2Rlc0ZldGNoZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvRmlsZU5vZGVzRmV0Y2hlci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXEZpbGVSZWFkVHJhcFN0cmVhbVdyYXBwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvRmlsZVJlYWRUcmFwU3RyZWFtV3JhcHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXE5ld09wdGltaXplZERpcmVjdG9yeVNvdXJjZUxvY2F0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvTmV3T3B0aW1pemVkRGlyZWN0b3J5U291cmNlTG9jYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXE9wdGltaXplZERpcmVjdG9yeVNvdXJjZUxvY2F0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvT3B0aW1pemVkRGlyZWN0b3J5U291cmNlTG9jYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXE9wdGltaXplZERpcmVjdG9yeVNvdXJjZUxvY2F0b3JGYWN0b3J5JyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VMb2NhdG9yL09wdGltaXplZERpcmVjdG9yeVNvdXJjZUxvY2F0b3JGYWN0b3J5LnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcT3B0aW1pemVkRGlyZWN0b3J5U291cmNlTG9jYXRvclJlcG9zaXRvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvT3B0aW1pemVkRGlyZWN0b3J5U291cmNlTG9jYXRvclJlcG9zaXRvcnkucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxPcHRpbWl6ZWRQc3JBdXRvbG9hZGVyTG9jYXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRQc3JBdXRvbG9hZGVyTG9jYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXE9wdGltaXplZFBzckF1dG9sb2FkZXJMb2NhdG9yRmFjdG9yeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRQc3JBdXRvbG9hZGVyTG9jYXRvckZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxPcHRpbWl6ZWRTaW5nbGVGaWxlU291cmNlTG9jYXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRTaW5nbGVGaWxlU291cmNlTG9jYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXE9wdGltaXplZFNpbmdsZUZpbGVTb3VyY2VMb2NhdG9yRmFjdG9yeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9PcHRpbWl6ZWRTaW5nbGVGaWxlU291cmNlTG9jYXRvckZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxPcHRpbWl6ZWRTaW5nbGVGaWxlU291cmNlTG9jYXRvclJlcG9zaXRvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvT3B0aW1pemVkU2luZ2xlRmlsZVNvdXJjZUxvY2F0b3JSZXBvc2l0b3J5LnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlTG9jYXRvclxcUGhwRmlsZUNsZWFuZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvUGhwRmlsZUNsZWFuZXIucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxQaHBWZXJzaW9uQmxhY2tsaXN0U291cmNlTG9jYXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9QaHBWZXJzaW9uQmxhY2tsaXN0U291cmNlTG9jYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFJlZmxlY3Rpb25DbGFzc1NvdXJjZUxvY2F0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvUmVmbGVjdGlvbkNsYXNzU291cmNlTG9jYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZUxvY2F0b3JcXFJld3JpdGVDbGFzc0FsaWFzU291cmNlTG9jYXRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlTG9jYXRvci9SZXdyaXRlQ2xhc3NBbGlhc1NvdXJjZUxvY2F0b3IucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCZXR0ZXJSZWZsZWN0aW9uXFxTb3VyY2VMb2NhdG9yXFxTa2lwQ2xhc3NBbGlhc1NvdXJjZUxvY2F0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9CZXR0ZXJSZWZsZWN0aW9uL1NvdXJjZUxvY2F0b3IvU2tpcENsYXNzQWxpYXNTb3VyY2VMb2NhdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQmV0dGVyUmVmbGVjdGlvblxcU291cmNlU3R1YmJlclxcUGhwU3Rvcm1TdHVic1NvdXJjZVN0dWJiZXJGYWN0b3J5JyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vQmV0dGVyUmVmbGVjdGlvbi9Tb3VyY2VTdHViYmVyL1BocFN0b3JtU3R1YnNTb3VyY2VTdHViYmVyRmFjdG9yeS5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEJldHRlclJlZmxlY3Rpb25cXFNvdXJjZVN0dWJiZXJcXFJlZmxlY3Rpb25Tb3VyY2VTdHViYmVyRmFjdG9yeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0JldHRlclJlZmxlY3Rpb24vU291cmNlU3R1YmJlci9SZWZsZWN0aW9uU291cmNlU3R1YmJlckZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxCcm9rZXJBd2FyZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0Jyb2tlckF3YXJlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQ2FsbGFibGVGdW5jdGlvblZhcmlhbnRXaXRoUGhwRG9jcycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0NhbGxhYmxlRnVuY3Rpb25WYXJpYW50V2l0aFBocERvY3MucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDYWxsYWJsZXNcXENhbGxhYmxlUGFyYW1ldGVyc0FjY2VwdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vQ2FsbGFibGVzL0NhbGxhYmxlUGFyYW1ldGVyc0FjY2VwdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcQ2FsbGFibGVzXFxGdW5jdGlvbkNhbGxhYmxlVmFyaWFudCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0NhbGxhYmxlcy9GdW5jdGlvbkNhbGxhYmxlVmFyaWFudC5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXENhbGxhYmxlc1xcU2ltcGxlSW1wdXJlUG9pbnQnID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9DYWxsYWJsZXMvU2ltcGxlSW1wdXJlUG9pbnQucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDYWxsYWJsZXNcXFNpbXBsZVRocm93UG9pbnQnID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9DYWxsYWJsZXMvU2ltcGxlVGhyb3dQb2ludC5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXENsYXNzQ29uc3RhbnRSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vQ2xhc3NDb25zdGFudFJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDbGFzc01lbWJlckFjY2Vzc0Fuc3dlcmVyJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vQ2xhc3NNZW1iZXJBY2Nlc3NBbnN3ZXJlci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXENsYXNzTWVtYmVyUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0NsYXNzTWVtYmVyUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXENsYXNzTmFtZUhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0NsYXNzTmFtZUhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXENsYXNzUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0NsYXNzUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXENsYXNzUmVmbGVjdGlvbkV4dGVuc2lvblJlZ2lzdHJ5JyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uUmVnaXN0cnkucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDb25zdGFudE5hbWVIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9Db25zdGFudE5hbWVIZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDb25zdGFudFJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9Db25zdGFudFJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDb25zdGFudFxcUnVudGltZUNvbnN0YW50UmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0NvbnN0YW50L1J1bnRpbWVDb25zdGFudFJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxDb25zdHJ1Y3RvcnNIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9Db25zdHJ1Y3RvcnNIZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxEdW1teVxcQ2hhbmdlZFR5cGVNZXRob2RSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vRHVtbXkvQ2hhbmdlZFR5cGVNZXRob2RSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcRHVtbXlcXENoYW5nZWRUeXBlUHJvcGVydHlSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vRHVtbXkvQ2hhbmdlZFR5cGVQcm9wZXJ0eVJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxEdW1teVxcRHVtbXlDb25zdGFudFJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9EdW1teS9EdW1teUNvbnN0YW50UmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXER1bW15XFxEdW1teUNvbnN0cnVjdG9yUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0R1bW15L0R1bW15Q29uc3RydWN0b3JSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcRHVtbXlcXER1bW15TWV0aG9kUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0R1bW15L0R1bW15TWV0aG9kUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXER1bW15XFxEdW1teVByb3BlcnR5UmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0R1bW15L0R1bW15UHJvcGVydHlSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcRW51bUNhc2VSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vRW51bUNhc2VSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcRXh0ZW5kZWRNZXRob2RSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vRXh0ZW5kZWRNZXRob2RSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcRXh0ZW5kZWRQcm9wZXJ0eVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9FeHRlbmRlZFByb3BlcnR5UmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEZ1bmN0aW9uUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0Z1bmN0aW9uUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEZ1bmN0aW9uUmVmbGVjdGlvbkZhY3RvcnknID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9GdW5jdGlvblJlZmxlY3Rpb25GYWN0b3J5LnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcRnVuY3Rpb25WYXJpYW50JyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vRnVuY3Rpb25WYXJpYW50LnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcRnVuY3Rpb25WYXJpYW50V2l0aFBocERvY3MnID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9GdW5jdGlvblZhcmlhbnRXaXRoUGhwRG9jcy5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEdlbmVyaWNQYXJhbWV0ZXJzQWNjZXB0b3JSZXNvbHZlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0dlbmVyaWNQYXJhbWV0ZXJzQWNjZXB0b3JSZXNvbHZlci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEdsb2JhbENvbnN0YW50UmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0dsb2JhbENvbnN0YW50UmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEluYWNjZXNzaWJsZU1ldGhvZCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL0luYWNjZXNzaWJsZU1ldGhvZC5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXEluaXRpYWxpemVyRXhwckNvbnRleHQnID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9Jbml0aWFsaXplckV4cHJDb250ZXh0LnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcSW5pdGlhbGl6ZXJFeHByVHlwZVJlc29sdmVyJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vSW5pdGlhbGl6ZXJFeHByVHlwZVJlc29sdmVyLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL01ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxNZXRob2RSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vTWV0aG9kUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXE1ldGhvZHNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9NZXRob2RzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTWlzc2luZ0NvbnN0YW50RnJvbVJlZmxlY3Rpb25FeGNlcHRpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9NaXNzaW5nQ29uc3RhbnRGcm9tUmVmbGVjdGlvbkV4Y2VwdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXE1pc3NpbmdNZXRob2RGcm9tUmVmbGVjdGlvbkV4Y2VwdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL01pc3NpbmdNZXRob2RGcm9tUmVmbGVjdGlvbkV4Y2VwdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXE1pc3NpbmdQcm9wZXJ0eUZyb21SZWZsZWN0aW9uRXhjZXB0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vTWlzc2luZ1Byb3BlcnR5RnJvbVJlZmxlY3Rpb25FeGNlcHRpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxNaXhpblxcTWl4aW5NZXRob2RSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vTWl4aW4vTWl4aW5NZXRob2RSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTWl4aW5cXE1peGluTWV0aG9kc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL01peGluL01peGluTWV0aG9kc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXE1peGluXFxNaXhpblByb3BlcnRpZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9NaXhpbi9NaXhpblByb3BlcnRpZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxOYW1lc3BhY2VBbnN3ZXJlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL05hbWVzcGFjZUFuc3dlcmVyLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTmF0aXZlXFxOYXRpdmVGdW5jdGlvblJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9OYXRpdmUvTmF0aXZlRnVuY3Rpb25SZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcTmF0aXZlXFxOYXRpdmVNZXRob2RSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vTmF0aXZlL05hdGl2ZU1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxOYXRpdmVcXE5hdGl2ZVBhcmFtZXRlclJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9OYXRpdmUvTmF0aXZlUGFyYW1ldGVyUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXE5hdGl2ZVxcTmF0aXZlUGFyYW1ldGVyV2l0aFBocERvY3NSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vTmF0aXZlL05hdGl2ZVBhcmFtZXRlcldpdGhQaHBEb2NzUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBIUFN0YW5cXE5hdGl2ZVJlZmxlY3Rpb25FbnVtUmV0dXJuRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QSFBTdGFuL05hdGl2ZVJlZmxlY3Rpb25FbnVtUmV0dXJuRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQYXJhbWV0ZXJSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUGFyYW1ldGVyUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBhcmFtZXRlclJlZmxlY3Rpb25XaXRoUGhwRG9jcycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1BhcmFtZXRlclJlZmxlY3Rpb25XaXRoUGhwRG9jcy5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBhcmFtZXRlcnNBY2NlcHRvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1BhcmFtZXRlcnNBY2NlcHRvci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBhcmFtZXRlcnNBY2NlcHRvclNlbGVjdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUGFyYW1ldGVyc0FjY2VwdG9yU2VsZWN0b3IucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQYXJhbWV0ZXJzQWNjZXB0b3JXaXRoUGhwRG9jcycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1BhcmFtZXRlcnNBY2NlcHRvcldpdGhQaHBEb2NzLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGFzc2VkQnlSZWZlcmVuY2UnID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QYXNzZWRCeVJlZmVyZW5jZS5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFZlcnNpb25TdGF0aWNBY2Nlc3NvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1BocFZlcnNpb25TdGF0aWNBY2Nlc3Nvci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcQnVpbHRpbk1ldGhvZFJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvQnVpbHRpbk1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXENsb3N1cmVDYWxsTWV0aG9kUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9DbG9zdXJlQ2FsbE1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXENsb3N1cmVDYWxsVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvQ2xvc3VyZUNhbGxVbnJlc29sdmVkTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcRHVtbXlQYXJhbWV0ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvRHVtbXlQYXJhbWV0ZXIucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXER1bW15UGFyYW1ldGVyV2l0aFBocERvY3MnID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvRHVtbXlQYXJhbWV0ZXJXaXRoUGhwRG9jcy5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcRW51bUFsbG93ZWRTdWJUeXBlc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9FbnVtQWxsb3dlZFN1YlR5cGVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxFbnVtQ2FzZXNNZXRob2RSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL0VudW1DYXNlc01ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXEVudW1Qcm9wZXJ0eVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvRW51bVByb3BlcnR5UmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcRW51bVVucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvRW51bVVucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXEV4aXRGdW5jdGlvblJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvRXhpdEZ1bmN0aW9uUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcTmF0aXZlQnVpbHRpbk1ldGhvZFJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvTmF0aXZlQnVpbHRpbk1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXFBocENsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9QaHBDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXFBocEZ1bmN0aW9uRnJvbVBhcnNlck5vZGVSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1BocEZ1bmN0aW9uRnJvbVBhcnNlck5vZGVSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxQaHBGdW5jdGlvblJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvUGhwRnVuY3Rpb25SZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxQaHBNZXRob2RGcm9tUGFyc2VyTm9kZVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvUGhwTWV0aG9kRnJvbVBhcnNlck5vZGVSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxQaHBNZXRob2RSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1BocE1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXFBocE1ldGhvZFJlZmxlY3Rpb25GYWN0b3J5JyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1BocE1ldGhvZFJlZmxlY3Rpb25GYWN0b3J5LnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxQaHBQYXJhbWV0ZXJGcm9tUGFyc2VyTm9kZVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvUGhwUGFyYW1ldGVyRnJvbVBhcnNlck5vZGVSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUGhwXFxQaHBQYXJhbWV0ZXJSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1BocFBhcmFtZXRlclJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXFBocFByb3BlcnR5UmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9QaHBQcm9wZXJ0eVJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXFNpbXBsZVhNTEVsZW1lbnRQcm9wZXJ0eScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1BocC9TaW1wbGVYTUxFbGVtZW50UHJvcGVydHkucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXFNvYXBcXFNvYXBDbGllbnRNZXRob2RSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1NvYXAvU29hcENsaWVudE1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXFNvYXBcXFNvYXBDbGllbnRNZXRob2RzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1NvYXAvU29hcENsaWVudE1ldGhvZHNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxQaHBcXFVuaXZlcnNhbE9iamVjdENyYXRlUHJvcGVydHknID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9QaHAvVW5pdmVyc2FsT2JqZWN0Q3JhdGVQcm9wZXJ0eS5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFBocFxcVW5pdmVyc2FsT2JqZWN0Q3JhdGVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUGhwL1VuaXZlcnNhbE9iamVjdENyYXRlc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFByb3BlcnRpZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9Qcm9wZXJ0aWVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUHJvcGVydHlSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUHJvcGVydHlSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvblByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvblByb3ZpZGVyU3RhdGljQWNjZXNzb3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvdmlkZXJTdGF0aWNBY2Nlc3Nvci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFJlZmxlY3Rpb25Qcm92aWRlclxcRGlyZWN0UmVmbGVjdGlvblByb3ZpZGVyUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvdmlkZXIvRGlyZWN0UmVmbGVjdGlvblByb3ZpZGVyUHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uUHJvdmlkZXJcXER1bW15UmVmbGVjdGlvblByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3ZpZGVyL0R1bW15UmVmbGVjdGlvblByb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvblByb3ZpZGVyXFxMYXp5UmVmbGVjdGlvblByb3ZpZGVyUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvdmlkZXIvTGF6eVJlZmxlY3Rpb25Qcm92aWRlclByb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvblByb3ZpZGVyXFxNZW1vaXppbmdSZWZsZWN0aW9uUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9SZWZsZWN0aW9uUHJvdmlkZXIvTWVtb2l6aW5nUmVmbGVjdGlvblByb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvblByb3ZpZGVyXFxSZWZsZWN0aW9uUHJvdmlkZXJGYWN0b3J5JyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3ZpZGVyL1JlZmxlY3Rpb25Qcm92aWRlckZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxSZWZsZWN0aW9uUHJvdmlkZXJcXFJlZmxlY3Rpb25Qcm92aWRlclByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3ZpZGVyL1JlZmxlY3Rpb25Qcm92aWRlclByb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVmbGVjdGlvblByb3ZpZGVyXFxTZXR0ZXJSZWZsZWN0aW9uUHJvdmlkZXJQcm92aWRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1JlZmxlY3Rpb25Qcm92aWRlci9TZXR0ZXJSZWZsZWN0aW9uUHJvdmlkZXJQcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFJlcXVpcmVFeHRlbnNpb25cXFJlcXVpcmVFeHRlbmRzTWV0aG9kc0NsYXNzUmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1JlcXVpcmVFeHRlbnNpb24vUmVxdWlyZUV4dGVuZHNNZXRob2RzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVxdWlyZUV4dGVuc2lvblxcUmVxdWlyZUV4dGVuZHNQcm9wZXJ0aWVzQ2xhc3NSZWZsZWN0aW9uRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUmVxdWlyZUV4dGVuc2lvbi9SZXF1aXJlRXh0ZW5kc1Byb3BlcnRpZXNDbGFzc1JlZmxlY3Rpb25FeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxSZXNvbHZlZEZ1bmN0aW9uVmFyaWFudCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1Jlc29sdmVkRnVuY3Rpb25WYXJpYW50LnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcUmVzb2x2ZWRGdW5jdGlvblZhcmlhbnRXaXRoQ2FsbGFibGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9SZXNvbHZlZEZ1bmN0aW9uVmFyaWFudFdpdGhDYWxsYWJsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFJlc29sdmVkRnVuY3Rpb25WYXJpYW50V2l0aE9yaWdpbmFsJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vUmVzb2x2ZWRGdW5jdGlvblZhcmlhbnRXaXRoT3JpZ2luYWwucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxSZXNvbHZlZE1ldGhvZFJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9SZXNvbHZlZE1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxSZXNvbHZlZFByb3BlcnR5UmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1Jlc29sdmVkUHJvcGVydHlSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcU2lnbmF0dXJlTWFwXFxGdW5jdGlvblNpZ25hdHVyZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1NpZ25hdHVyZU1hcC9GdW5jdGlvblNpZ25hdHVyZS5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFNpZ25hdHVyZU1hcFxcRnVuY3Rpb25TaWduYXR1cmVNYXBQcm92aWRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1NpZ25hdHVyZU1hcC9GdW5jdGlvblNpZ25hdHVyZU1hcFByb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcU2lnbmF0dXJlTWFwXFxOYXRpdmVGdW5jdGlvblJlZmxlY3Rpb25Qcm92aWRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1NpZ25hdHVyZU1hcC9OYXRpdmVGdW5jdGlvblJlZmxlY3Rpb25Qcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFNpZ25hdHVyZU1hcFxcUGFyYW1ldGVyU2lnbmF0dXJlJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vU2lnbmF0dXJlTWFwL1BhcmFtZXRlclNpZ25hdHVyZS5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFNpZ25hdHVyZU1hcFxcUGhwOFNpZ25hdHVyZU1hcFByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vU2lnbmF0dXJlTWFwL1BocDhTaWduYXR1cmVNYXBQcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFNpZ25hdHVyZU1hcFxcU2lnbmF0dXJlTWFwUGFyc2VyJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vU2lnbmF0dXJlTWFwL1NpZ25hdHVyZU1hcFBhcnNlci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFNpZ25hdHVyZU1hcFxcU2lnbmF0dXJlTWFwUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9TaWduYXR1cmVNYXAvU2lnbmF0dXJlTWFwUHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxTaWduYXR1cmVNYXBcXFNpZ25hdHVyZU1hcFByb3ZpZGVyRmFjdG9yeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1NpZ25hdHVyZU1hcC9TaWduYXR1cmVNYXBQcm92aWRlckZhY3RvcnkucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUcml2aWFsUGFyYW1ldGVyc0FjY2VwdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vVHJpdmlhbFBhcmFtZXRlcnNBY2NlcHRvci5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFR5cGVcXENhbGxiYWNrVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9UeXBlL0NhbGxiYWNrVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxDYWxsYmFja1VucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9UeXBlL0NhbGxiYWNrVW5yZXNvbHZlZFByb3BlcnR5UHJvdG90eXBlUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFR5cGVcXENhbGxlZE9uVHlwZVVucmVzb2x2ZWRNZXRob2RQcm90b3R5cGVSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9DYWxsZWRPblR5cGVVbnJlc29sdmVkTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFR5cGVcXENhbGxlZE9uVHlwZVVucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9UeXBlL0NhbGxlZE9uVHlwZVVucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxJbnRlcnNlY3Rpb25UeXBlTWV0aG9kUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1R5cGUvSW50ZXJzZWN0aW9uVHlwZU1ldGhvZFJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxJbnRlcnNlY3Rpb25UeXBlUHJvcGVydHlSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9JbnRlcnNlY3Rpb25UeXBlUHJvcGVydHlSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcVHlwZVxcSW50ZXJzZWN0aW9uVHlwZVVucmVzb2x2ZWRNZXRob2RQcm90b3R5cGVSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9JbnRlcnNlY3Rpb25UeXBlVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxJbnRlcnNlY3Rpb25UeXBlVW5yZXNvbHZlZFByb3BlcnR5UHJvdG90eXBlUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1R5cGUvSW50ZXJzZWN0aW9uVHlwZVVucmVzb2x2ZWRQcm9wZXJ0eVByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxVbmlvblR5cGVNZXRob2RSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9VbmlvblR5cGVNZXRob2RSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcVHlwZVxcVW5pb25UeXBlUHJvcGVydHlSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9VbmlvblR5cGVQcm9wZXJ0eVJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxVbmlvblR5cGVVbnJlc29sdmVkTWV0aG9kUHJvdG90eXBlUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1R5cGUvVW5pb25UeXBlVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSZWZsZWN0aW9uXFxUeXBlXFxVbmlvblR5cGVVbnJlc29sdmVkUHJvcGVydHlQcm90b3R5cGVSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vVHlwZS9VbmlvblR5cGVVbnJlc29sdmVkUHJvcGVydHlQcm90b3R5cGVSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcVHlwZVxcVW5yZXNvbHZlZE1ldGhvZFByb3RvdHlwZVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9UeXBlL1VucmVzb2x2ZWRNZXRob2RQcm90b3R5cGVSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcVHlwZVxcVW5yZXNvbHZlZFByb3BlcnR5UHJvdG90eXBlUmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1R5cGUvVW5yZXNvbHZlZFByb3BlcnR5UHJvdG90eXBlUmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJlZmxlY3Rpb25cXFdyYXBwZWRFeHRlbmRlZE1ldGhvZFJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUmVmbGVjdGlvbi9XcmFwcGVkRXh0ZW5kZWRNZXRob2RSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcV3JhcHBlZEV4dGVuZGVkUHJvcGVydHlSZWZsZWN0aW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1JlZmxlY3Rpb24vV3JhcHBlZEV4dGVuZGVkUHJvcGVydHlSZWZsZWN0aW9uLnBocCcsCiAgICAnUEhQU3RhblxcUmVmbGVjdGlvblxcV3JhcHBlclByb3BlcnR5UmVmbGVjdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SZWZsZWN0aW9uL1dyYXBwZXJQcm9wZXJ0eVJlZmxlY3Rpb24ucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxBcGlDbGFzc0NvbnN0RmV0Y2hSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0FwaS9BcGlDbGFzc0NvbnN0RmV0Y2hSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEFwaVxcQXBpQ2xhc3NFeHRlbmRzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcGkvQXBpQ2xhc3NFeHRlbmRzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcGlcXEFwaUNsYXNzSW1wbGVtZW50c1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXBpL0FwaUNsYXNzSW1wbGVtZW50c1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxBcGlJbnN0YW5jZW9mUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcGkvQXBpSW5zdGFuY2VvZlJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxBcGlJbnN0YW5jZW9mVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXBpL0FwaUluc3RhbmNlb2ZUeXBlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcGlcXEFwaUluc3RhbnRpYXRpb25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0FwaS9BcGlJbnN0YW50aWF0aW9uUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcGlcXEFwaUludGVyZmFjZUV4dGVuZHNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0FwaS9BcGlJbnRlcmZhY2VFeHRlbmRzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcGlcXEFwaU1ldGhvZENhbGxSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0FwaS9BcGlNZXRob2RDYWxsUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcGlcXEFwaVJ1bGVIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXBpL0FwaVJ1bGVIZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxBcGlTdGF0aWNDYWxsUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcGkvQXBpU3RhdGljQ2FsbFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxBcGlUcmFpdFVzZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXBpL0FwaVRyYWl0VXNlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcGlcXEJjVW5jb3ZlcmVkSW50ZXJmYWNlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0FwaS9CY1VuY292ZXJlZEludGVyZmFjZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcGlcXEdldFRlbXBsYXRlVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXBpL0dldFRlbXBsYXRlVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxOb2RlQ29ubmVjdGluZ1Zpc2l0b3JBdHRyaWJ1dGVzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcGkvTm9kZUNvbm5lY3RpbmdWaXNpdG9yQXR0cmlidXRlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQXBpXFxQaHBTdGFuTmFtZXNwYWNlSW4zcmRQYXJ0eVBhY2thZ2VSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0FwaS9QaHBTdGFuTmFtZXNwYWNlSW4zcmRQYXJ0eVBhY2thZ2VSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEFwaVxcUnVudGltZVJlZmxlY3Rpb25GdW5jdGlvblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXBpL1J1bnRpbWVSZWZsZWN0aW9uRnVuY3Rpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEFwaVxcUnVudGltZVJlZmxlY3Rpb25JbnN0YW50aWF0aW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcGkvUnVudGltZVJlZmxlY3Rpb25JbnN0YW50aWF0aW9uUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXEFsbG93ZWRBcnJheUtleXNUeXBlcycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcnJheXMvQWxsb3dlZEFycmF5S2V5c1R5cGVzLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEFycmF5c1xcQXBwZW5kZWRBcnJheUl0ZW1UeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcnJheXMvQXBwZW5kZWRBcnJheUl0ZW1UeXBlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXEFwcGVuZGVkQXJyYXlLZXlUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcnJheXMvQXBwZW5kZWRBcnJheUtleVR5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEFycmF5c1xcQXJyYXlEZXN0cnVjdHVyaW5nUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcnJheXMvQXJyYXlEZXN0cnVjdHVyaW5nUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXEFycmF5VW5wYWNraW5nUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcnJheXMvQXJyYXlVbnBhY2tpbmdSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEFycmF5c1xcRGVhZEZvcmVhY2hSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0FycmF5cy9EZWFkRm9yZWFjaFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQXJyYXlzXFxEdXBsaWNhdGVLZXlzSW5MaXRlcmFsQXJyYXlzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcnJheXMvRHVwbGljYXRlS2V5c0luTGl0ZXJhbEFycmF5c1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQXJyYXlzXFxFbXB0eUFycmF5SXRlbVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXJyYXlzL0VtcHR5QXJyYXlJdGVtUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXEludmFsaWRLZXlJbkFycmF5RGltRmV0Y2hSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0FycmF5cy9JbnZhbGlkS2V5SW5BcnJheURpbUZldGNoUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXEludmFsaWRLZXlJbkFycmF5SXRlbVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXJyYXlzL0ludmFsaWRLZXlJbkFycmF5SXRlbVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQXJyYXlzXFxJdGVyYWJsZUluRm9yZWFjaFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXJyYXlzL0l0ZXJhYmxlSW5Gb3JlYWNoUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXE5vbmV4aXN0ZW50T2Zmc2V0SW5BcnJheURpbUZldGNoQ2hlY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXJyYXlzL05vbmV4aXN0ZW50T2Zmc2V0SW5BcnJheURpbUZldGNoQ2hlY2sucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQXJyYXlzXFxOb25leGlzdGVudE9mZnNldEluQXJyYXlEaW1GZXRjaFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXJyYXlzL05vbmV4aXN0ZW50T2Zmc2V0SW5BcnJheURpbUZldGNoUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXE9mZnNldEFjY2Vzc0Fzc2lnbk9wUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcnJheXMvT2Zmc2V0QWNjZXNzQXNzaWduT3BSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEFycmF5c1xcT2Zmc2V0QWNjZXNzQXNzaWdubWVudFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXJyYXlzL09mZnNldEFjY2Vzc0Fzc2lnbm1lbnRSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEFycmF5c1xcT2Zmc2V0QWNjZXNzVmFsdWVBc3NpZ25tZW50UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcnJheXMvT2Zmc2V0QWNjZXNzVmFsdWVBc3NpZ25tZW50UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBcnJheXNcXE9mZnNldEFjY2Vzc1dpdGhvdXREaW1Gb3JSZWFkaW5nUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcnJheXMvT2Zmc2V0QWNjZXNzV2l0aG91dERpbUZvclJlYWRpbmdSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEFycmF5c1xcVW5wYWNrSXRlcmFibGVJbkFycmF5UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9BcnJheXMvVW5wYWNrSXRlcmFibGVJbkFycmF5UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxBdHRyaWJ1dGVzQ2hlY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQXR0cmlidXRlc0NoZWNrLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENhc3RcXEVjaG9SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Nhc3QvRWNob1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2FzdFxcSW52YWxpZENhc3RSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Nhc3QvSW52YWxpZENhc3RSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENhc3RcXEludmFsaWRQYXJ0T2ZFbmNhcHNlZFN0cmluZ1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2FzdC9JbnZhbGlkUGFydE9mRW5jYXBzZWRTdHJpbmdSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENhc3RcXFByaW50UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DYXN0L1ByaW50UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDYXN0XFxVbnNldENhc3RSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Nhc3QvVW5zZXRDYXN0UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc0Nhc2VTZW5zaXRpdml0eUNoZWNrJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzQ2FzZVNlbnNpdGl2aXR5Q2hlY2sucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3NGb3JiaWRkZW5OYW1lQ2hlY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3NGb3JiaWRkZW5OYW1lQ2hlY2sucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3NOYW1lQ2hlY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3NOYW1lQ2hlY2sucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3NOYW1lTm9kZVBhaXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3NOYW1lTm9kZVBhaXIucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcQWNjZXNzUHJpdmF0ZUNvbnN0YW50VGhyb3VnaFN0YXRpY1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9BY2Nlc3NQcml2YXRlQ29uc3RhbnRUaHJvdWdoU3RhdGljUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxBbGxvd2VkU3ViVHlwZXNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvQWxsb3dlZFN1YlR5cGVzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxDbGFzc0F0dHJpYnV0ZXNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvQ2xhc3NBdHRyaWJ1dGVzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxDbGFzc0NvbnN0YW50QXR0cmlidXRlc1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9DbGFzc0NvbnN0YW50QXR0cmlidXRlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcQ2xhc3NDb25zdGFudFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9DbGFzc0NvbnN0YW50UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxEdXBsaWNhdGVDbGFzc0RlY2xhcmF0aW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0R1cGxpY2F0ZUNsYXNzRGVjbGFyYXRpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXER1cGxpY2F0ZURlY2xhcmF0aW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0R1cGxpY2F0ZURlY2xhcmF0aW9uUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxFbnVtU2FuaXR5UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0VudW1TYW5pdHlSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXEV4aXN0aW5nQ2xhc3NJbkNsYXNzRXh0ZW5kc1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9FeGlzdGluZ0NsYXNzSW5DbGFzc0V4dGVuZHNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXEV4aXN0aW5nQ2xhc3NJbkluc3RhbmNlT2ZSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvRXhpc3RpbmdDbGFzc0luSW5zdGFuY2VPZlJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcRXhpc3RpbmdDbGFzc0luVHJhaXRVc2VSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvRXhpc3RpbmdDbGFzc0luVHJhaXRVc2VSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXEV4aXN0aW5nQ2xhc3Nlc0luQ2xhc3NJbXBsZW1lbnRzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0V4aXN0aW5nQ2xhc3Nlc0luQ2xhc3NJbXBsZW1lbnRzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxFeGlzdGluZ0NsYXNzZXNJbkVudW1JbXBsZW1lbnRzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0V4aXN0aW5nQ2xhc3Nlc0luRW51bUltcGxlbWVudHNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXEV4aXN0aW5nQ2xhc3Nlc0luSW50ZXJmYWNlRXh0ZW5kc1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9FeGlzdGluZ0NsYXNzZXNJbkludGVyZmFjZUV4dGVuZHNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXEltcG9zc2libGVJbnN0YW5jZU9mUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0ltcG9zc2libGVJbnN0YW5jZU9mUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxJbnN0YW50aWF0aW9uQ2FsbGFibGVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvSW5zdGFudGlhdGlvbkNhbGxhYmxlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxJbnN0YW50aWF0aW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0luc3RhbnRpYXRpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXEludmFsaWRQcm9tb3RlZFByb3BlcnRpZXNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvSW52YWxpZFByb21vdGVkUHJvcGVydGllc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcTG9jYWxUeXBlQWxpYXNlc0NoZWNrJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTG9jYWxUeXBlQWxpYXNlc0NoZWNrLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXExvY2FsVHlwZUFsaWFzZXNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTG9jYWxUeXBlQWxpYXNlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcTG9jYWxUeXBlVHJhaXRBbGlhc2VzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0xvY2FsVHlwZVRyYWl0QWxpYXNlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcTG9jYWxUeXBlVHJhaXRVc2VBbGlhc2VzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL0xvY2FsVHlwZVRyYWl0VXNlQWxpYXNlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcTWV0aG9kVGFnQ2hlY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9NZXRob2RUYWdDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxNZXRob2RUYWdSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTWV0aG9kVGFnUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxNZXRob2RUYWdUcmFpdFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9NZXRob2RUYWdUcmFpdFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcTWV0aG9kVGFnVHJhaXRVc2VSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTWV0aG9kVGFnVHJhaXRVc2VSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXE1peGluQ2hlY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9NaXhpbkNoZWNrLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXE1peGluUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL01peGluUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxNaXhpblRyYWl0UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL01peGluVHJhaXRSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXE1peGluVHJhaXRVc2VSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvTWl4aW5UcmFpdFVzZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcTmV3U3RhdGljUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL05ld1N0YXRpY1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcTm9uQ2xhc3NBdHRyaWJ1dGVDbGFzc1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9Ob25DbGFzc0F0dHJpYnV0ZUNsYXNzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxQcm9wZXJ0eVRhZ0NoZWNrJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvUHJvcGVydHlUYWdDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxQcm9wZXJ0eVRhZ1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9Qcm9wZXJ0eVRhZ1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcUHJvcGVydHlUYWdUcmFpdFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9Qcm9wZXJ0eVRhZ1RyYWl0UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxQcm9wZXJ0eVRhZ1RyYWl0VXNlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL1Byb3BlcnR5VGFnVHJhaXRVc2VSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXFJlYWRPbmx5Q2xhc3NSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvUmVhZE9ubHlDbGFzc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ2xhc3Nlc1xcUmVxdWlyZUV4dGVuZHNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NsYXNzZXMvUmVxdWlyZUV4dGVuZHNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXFJlcXVpcmVJbXBsZW1lbnRzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL1JlcXVpcmVJbXBsZW1lbnRzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDbGFzc2VzXFxUcmFpdEF0dHJpYnV0ZUNsYXNzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9DbGFzc2VzL1RyYWl0QXR0cmlidXRlQ2xhc3NSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENsYXNzZXNcXFVudXNlZENvbnN0cnVjdG9yUGFyYW1ldGVyc1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ2xhc3Nlcy9VbnVzZWRDb25zdHJ1Y3RvclBhcmFtZXRlcnNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXEJvb2xlYW5BbmRDb25zdGFudENvbmRpdGlvblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9Cb29sZWFuQW5kQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXEJvb2xlYW5Ob3RDb25zdGFudENvbmRpdGlvblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9Cb29sZWFuTm90Q29uc3RhbnRDb25kaXRpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXEJvb2xlYW5PckNvbnN0YW50Q29uZGl0aW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL0Jvb2xlYW5PckNvbnN0YW50Q29uZGl0aW9uUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxDb25zdGFudENvbmRpdGlvblJ1bGVIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9Db25zdGFudENvbmRpdGlvblJ1bGVIZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcQ29uc3RhbnRMb29zZUNvbXBhcmlzb25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vQ29uc3RhbnRMb29zZUNvbXBhcmlzb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXERvV2hpbGVMb29wQ29uc3RhbnRDb25kaXRpb25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vRG9XaGlsZUxvb3BDb25zdGFudENvbmRpdGlvblJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcRWxzZUlmQ29uc3RhbnRDb25kaXRpb25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vRWxzZUlmQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXElmQ29uc3RhbnRDb25kaXRpb25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vSWZDb25zdGFudENvbmRpdGlvblJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcSW1wb3NzaWJsZUNoZWNrVHlwZUZ1bmN0aW9uQ2FsbFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9JbXBvc3NpYmxlQ2hlY2tUeXBlRnVuY3Rpb25DYWxsUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxJbXBvc3NpYmxlQ2hlY2tUeXBlSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vSW1wb3NzaWJsZUNoZWNrVHlwZUhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxJbXBvc3NpYmxlQ2hlY2tUeXBlTWV0aG9kQ2FsbFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9JbXBvc3NpYmxlQ2hlY2tUeXBlTWV0aG9kQ2FsbFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcSW1wb3NzaWJsZUNoZWNrVHlwZVN0YXRpY01ldGhvZENhbGxSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vSW1wb3NzaWJsZUNoZWNrVHlwZVN0YXRpY01ldGhvZENhbGxSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXExvZ2ljYWxYb3JDb25zdGFudENvbmRpdGlvblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9Mb2dpY2FsWG9yQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXE1hdGNoRXhwcmVzc2lvblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9NYXRjaEV4cHJlc3Npb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXE51bWJlckNvbXBhcmlzb25PcGVyYXRvcnNDb25zdGFudENvbmRpdGlvblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9OdW1iZXJDb21wYXJpc29uT3BlcmF0b3JzQ29uc3RhbnRDb25kaXRpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXFN0cmljdENvbXBhcmlzb25PZkRpZmZlcmVudFR5cGVzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL1N0cmljdENvbXBhcmlzb25PZkRpZmZlcmVudFR5cGVzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxUZXJuYXJ5T3BlcmF0b3JDb25zdGFudENvbmRpdGlvblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9UZXJuYXJ5T3BlcmF0b3JDb25zdGFudENvbmRpdGlvblJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcVW5yZWFjaGFibGVJZkJyYW5jaGVzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Db21wYXJpc29uL1VucmVhY2hhYmxlSWZCcmFuY2hlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcVW5yZWFjaGFibGVUZXJuYXJ5RWxzZUJyYW5jaFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9VbnJlYWNoYWJsZVRlcm5hcnlFbHNlQnJhbmNoUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb21wYXJpc29uXFxVc2FnZU9mVm9pZE1hdGNoRXhwcmVzc2lvblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29tcGFyaXNvbi9Vc2FnZU9mVm9pZE1hdGNoRXhwcmVzc2lvblJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ29tcGFyaXNvblxcV2hpbGVMb29wQWx3YXlzRmFsc2VDb25kaXRpb25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vV2hpbGVMb29wQWx3YXlzRmFsc2VDb25kaXRpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbXBhcmlzb25cXFdoaWxlTG9vcEFsd2F5c1RydWVDb25kaXRpb25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NvbXBhcmlzb24vV2hpbGVMb29wQWx3YXlzVHJ1ZUNvbmRpdGlvblJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ29uc3RhbnRzXFxBbHdheXNVc2VkQ2xhc3NDb25zdGFudHNFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29uc3RhbnRzL0Fsd2F5c1VzZWRDbGFzc0NvbnN0YW50c0V4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb25zdGFudHNcXEFsd2F5c1VzZWRDbGFzc0NvbnN0YW50c0V4dGVuc2lvblByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NvbnN0YW50cy9BbHdheXNVc2VkQ2xhc3NDb25zdGFudHNFeHRlbnNpb25Qcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb25zdGFudHNcXENsYXNzQXNDbGFzc0NvbnN0YW50UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvQ2xhc3NBc0NsYXNzQ29uc3RhbnRSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbnN0YW50c1xcQ29uc3RhbnRSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0NvbnN0YW50cy9Db25zdGFudFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ29uc3RhbnRzXFxEeW5hbWljQ2xhc3NDb25zdGFudEZldGNoUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvRHluYW1pY0NsYXNzQ29uc3RhbnRGZXRjaFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ29uc3RhbnRzXFxGaW5hbENvbnN0YW50UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvRmluYWxDb25zdGFudFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ29uc3RhbnRzXFxMYXp5QWx3YXlzVXNlZENsYXNzQ29uc3RhbnRzRXh0ZW5zaW9uUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29uc3RhbnRzL0xhenlBbHdheXNVc2VkQ2xhc3NDb25zdGFudHNFeHRlbnNpb25Qcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb25zdGFudHNcXE1hZ2ljQ29uc3RhbnRDb250ZXh0UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvTWFnaWNDb25zdGFudENvbnRleHRSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbnN0YW50c1xcTWlzc2luZ0NsYXNzQ29uc3RhbnRUeXBlaGludFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29uc3RhbnRzL01pc3NpbmdDbGFzc0NvbnN0YW50VHlwZWhpbnRSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXENvbnN0YW50c1xcTmF0aXZlVHlwZWRDbGFzc0NvbnN0YW50UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvTmF0aXZlVHlwZWRDbGFzc0NvbnN0YW50UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxDb25zdGFudHNcXE92ZXJyaWRpbmdDb25zdGFudFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvQ29uc3RhbnRzL092ZXJyaWRpbmdDb25zdGFudFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcQ29uc3RhbnRzXFxWYWx1ZUFzc2lnbmVkVG9DbGFzc0NvbnN0YW50UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Db25zdGFudHMvVmFsdWVBc3NpZ25lZFRvQ2xhc3NDb25zdGFudFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRGF0ZVRpbWVJbnN0YW50aWF0aW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9EYXRlVGltZUluc3RhbnRpYXRpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxCZXR0ZXJOb29wUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9CZXR0ZXJOb29wUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcQ2FsbFRvQ29uc3RydWN0b3JTdGF0ZW1lbnRXaXRob3V0SW1wdXJlUG9pbnRzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9DYWxsVG9Db25zdHJ1Y3RvclN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxDYWxsVG9GdW5jdGlvblN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL0NhbGxUb0Z1bmN0aW9uU3RhdGVtZW50V2l0aG91dEltcHVyZVBvaW50c1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRGVhZENvZGVcXENhbGxUb01ldGhvZFN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL0NhbGxUb01ldGhvZFN0YXRlbWVudFdpdGhvdXRJbXB1cmVQb2ludHNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxDYWxsVG9TdGF0aWNNZXRob2RTdGF0ZW1lbnRXaXRob3V0SW1wdXJlUG9pbnRzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9DYWxsVG9TdGF0aWNNZXRob2RTdGF0ZW1lbnRXaXRob3V0SW1wdXJlUG9pbnRzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcQ29uc3RydWN0b3JXaXRob3V0SW1wdXJlUG9pbnRzQ29sbGVjdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL0NvbnN0cnVjdG9yV2l0aG91dEltcHVyZVBvaW50c0NvbGxlY3Rvci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcRnVuY3Rpb25XaXRob3V0SW1wdXJlUG9pbnRzQ29sbGVjdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL0Z1bmN0aW9uV2l0aG91dEltcHVyZVBvaW50c0NvbGxlY3Rvci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcTWV0aG9kV2l0aG91dEltcHVyZVBvaW50c0NvbGxlY3RvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9NZXRob2RXaXRob3V0SW1wdXJlUG9pbnRzQ29sbGVjdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxOb29wUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9Ob29wUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcUG9zc2libHlQdXJlRnVuY0NhbGxDb2xsZWN0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvUG9zc2libHlQdXJlRnVuY0NhbGxDb2xsZWN0b3IucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRGVhZENvZGVcXFBvc3NpYmx5UHVyZU1ldGhvZENhbGxDb2xsZWN0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvUG9zc2libHlQdXJlTWV0aG9kQ2FsbENvbGxlY3Rvci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcUG9zc2libHlQdXJlTmV3Q29sbGVjdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL1Bvc3NpYmx5UHVyZU5ld0NvbGxlY3Rvci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxEZWFkQ29kZVxcUG9zc2libHlQdXJlU3RhdGljQ2FsbENvbGxlY3RvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9EZWFkQ29kZS9Qb3NzaWJseVB1cmVTdGF0aWNDYWxsQ29sbGVjdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxVbnJlYWNoYWJsZVN0YXRlbWVudFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRGVhZENvZGUvVW5yZWFjaGFibGVTdGF0ZW1lbnRSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxVbnVzZWRQcml2YXRlQ29uc3RhbnRSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL1VudXNlZFByaXZhdGVDb25zdGFudFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRGVhZENvZGVcXFVudXNlZFByaXZhdGVNZXRob2RSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL1VudXNlZFByaXZhdGVNZXRob2RSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXERlYWRDb2RlXFxVbnVzZWRQcml2YXRlUHJvcGVydHlSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0RlYWRDb2RlL1VudXNlZFByaXZhdGVQcm9wZXJ0eVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRGVidWdcXERlYnVnU2NvcGVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0RlYnVnL0RlYnVnU2NvcGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXERlYnVnXFxEdW1wUGhwRG9jVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRGVidWcvRHVtcFBocERvY1R5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXERlYnVnXFxEdW1wVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRGVidWcvRHVtcFR5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXERlYnVnXFxGaWxlQXNzZXJ0UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9EZWJ1Zy9GaWxlQXNzZXJ0UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxEaXJlY3RSZWdpc3RyeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9EaXJlY3RSZWdpc3RyeS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxFbnVtQ2FzZXNcXEVudW1DYXNlQXR0cmlidXRlc1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRW51bUNhc2VzL0VudW1DYXNlQXR0cmlidXRlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRXhjZXB0aW9uc1xcQ2F0Y2hXaXRoVW50aHJvd25FeGNlcHRpb25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvQ2F0Y2hXaXRoVW50aHJvd25FeGNlcHRpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXENhdWdodEV4Y2VwdGlvbkV4aXN0ZW5jZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9DYXVnaHRFeGNlcHRpb25FeGlzdGVuY2VSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXERlZmF1bHRFeGNlcHRpb25UeXBlUmVzb2x2ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9EZWZhdWx0RXhjZXB0aW9uVHlwZVJlc29sdmVyLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXEV4Y2VwdGlvblR5cGVSZXNvbHZlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL0V4Y2VwdGlvblR5cGVSZXNvbHZlci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxFeGNlcHRpb25zXFxNaXNzaW5nQ2hlY2tlZEV4Y2VwdGlvbkluRnVuY3Rpb25UaHJvd3NSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvTWlzc2luZ0NoZWNrZWRFeGNlcHRpb25JbkZ1bmN0aW9uVGhyb3dzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxFeGNlcHRpb25zXFxNaXNzaW5nQ2hlY2tlZEV4Y2VwdGlvbkluTWV0aG9kVGhyb3dzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL01pc3NpbmdDaGVja2VkRXhjZXB0aW9uSW5NZXRob2RUaHJvd3NSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXE1pc3NpbmdDaGVja2VkRXhjZXB0aW9uSW5UaHJvd3NDaGVjaycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL01pc3NpbmdDaGVja2VkRXhjZXB0aW9uSW5UaHJvd3NDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxFeGNlcHRpb25zXFxOb25jYXB0dXJpbmdDYXRjaFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9Ob25jYXB0dXJpbmdDYXRjaFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRXhjZXB0aW9uc1xcT3ZlcndyaXR0ZW5FeGl0UG9pbnRCeUZpbmFsbHlSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvT3ZlcndyaXR0ZW5FeGl0UG9pbnRCeUZpbmFsbHlSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEV4Y2VwdGlvbnNcXFRocm93RXhwclR5cGVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0V4Y2VwdGlvbnMvVGhyb3dFeHByVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRXhjZXB0aW9uc1xcVGhyb3dFeHByZXNzaW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL1Rocm93RXhwcmVzc2lvblJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRXhjZXB0aW9uc1xcVGhyb3dzVm9pZEZ1bmN0aW9uV2l0aEV4cGxpY2l0VGhyb3dQb2ludFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9UaHJvd3NWb2lkRnVuY3Rpb25XaXRoRXhwbGljaXRUaHJvd1BvaW50UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxFeGNlcHRpb25zXFxUaHJvd3NWb2lkTWV0aG9kV2l0aEV4cGxpY2l0VGhyb3dQb2ludFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9UaHJvd3NWb2lkTWV0aG9kV2l0aEV4cGxpY2l0VGhyb3dQb2ludFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRXhjZXB0aW9uc1xcVG9vV2lkZUZ1bmN0aW9uVGhyb3dUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9FeGNlcHRpb25zL1Rvb1dpZGVGdW5jdGlvblRocm93VHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRXhjZXB0aW9uc1xcVG9vV2lkZU1ldGhvZFRocm93VHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9Ub29XaWRlTWV0aG9kVGhyb3dUeXBlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxFeGNlcHRpb25zXFxUb29XaWRlVGhyb3dUeXBlQ2hlY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRXhjZXB0aW9ucy9Ub29XaWRlVGhyb3dUeXBlQ2hlY2sucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRmlsZVJ1bGVFcnJvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GaWxlUnVsZUVycm9yLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEZvdW5kVHlwZVJlc3VsdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Gb3VuZFR5cGVSZXN1bHQucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25DYWxsUGFyYW1ldGVyc0NoZWNrJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9uQ2FsbFBhcmFtZXRlcnNDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbkRlZmluaXRpb25DaGVjaycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbkRlZmluaXRpb25DaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvblJldHVyblR5cGVDaGVjaycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvblJldHVyblR5cGVDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXEFycmF5RmlsdGVyUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvQXJyYXlGaWx0ZXJSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcQXJyYXlWYWx1ZXNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9BcnJheVZhbHVlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxBcnJvd0Z1bmN0aW9uQXR0cmlidXRlc1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0Fycm93RnVuY3Rpb25BdHRyaWJ1dGVzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXEFycm93RnVuY3Rpb25SZXR1cm5OdWxsc2FmZUJ5UmVmUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvQXJyb3dGdW5jdGlvblJldHVybk51bGxzYWZlQnlSZWZSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcQXJyb3dGdW5jdGlvblJldHVyblR5cGVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9BcnJvd0Z1bmN0aW9uUmV0dXJuVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxDYWxsQ2FsbGFibGVzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvQ2FsbENhbGxhYmxlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxDYWxsVG9GdW5jdGlvblBhcmFtZXRlcnNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DYWxsVG9GdW5jdGlvblBhcmFtZXRlcnNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcQ2FsbFRvRnVuY3Rpb25TdGF0ZW1lbnRXaXRob3V0U2lkZUVmZmVjdHNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DYWxsVG9GdW5jdGlvblN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxDYWxsVG9Ob25FeGlzdGVudEZ1bmN0aW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvQ2FsbFRvTm9uRXhpc3RlbnRGdW5jdGlvblJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxDYWxsVXNlckZ1bmNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DYWxsVXNlckZ1bmNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcQ2xvc3VyZUF0dHJpYnV0ZXNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9DbG9zdXJlQXR0cmlidXRlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxDbG9zdXJlUmV0dXJuVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0Nsb3N1cmVSZXR1cm5UeXBlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXERlZmluZVBhcmFtZXRlcnNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9EZWZpbmVQYXJhbWV0ZXJzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXER1cGxpY2F0ZUZ1bmN0aW9uRGVjbGFyYXRpb25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9EdXBsaWNhdGVGdW5jdGlvbkRlY2xhcmF0aW9uUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXEV4aXN0aW5nQ2xhc3Nlc0luQXJyb3dGdW5jdGlvblR5cGVoaW50c1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0V4aXN0aW5nQ2xhc3Nlc0luQXJyb3dGdW5jdGlvblR5cGVoaW50c1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxFeGlzdGluZ0NsYXNzZXNJbkNsb3N1cmVUeXBlaGludHNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9FeGlzdGluZ0NsYXNzZXNJbkNsb3N1cmVUeXBlaGludHNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcRXhpc3RpbmdDbGFzc2VzSW5UeXBlaGludHNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9FeGlzdGluZ0NsYXNzZXNJblR5cGVoaW50c1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxGdW5jdGlvbkF0dHJpYnV0ZXNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9GdW5jdGlvbkF0dHJpYnV0ZXNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcRnVuY3Rpb25DYWxsYWJsZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0Z1bmN0aW9uQ2FsbGFibGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcSW1wbG9kZUZ1bmN0aW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvSW1wbG9kZUZ1bmN0aW9uUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXEltcGxvZGVQYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvSW1wbG9kZVBhcmFtZXRlckNhc3RhYmxlVG9TdHJpbmdSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcSW5jb21wYXRpYmxlQXJyb3dGdW5jdGlvbkRlZmF1bHRQYXJhbWV0ZXJUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvSW5jb21wYXRpYmxlQXJyb3dGdW5jdGlvbkRlZmF1bHRQYXJhbWV0ZXJUeXBlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXEluY29tcGF0aWJsZUNsb3N1cmVEZWZhdWx0UGFyYW1ldGVyVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0luY29tcGF0aWJsZUNsb3N1cmVEZWZhdWx0UGFyYW1ldGVyVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxJbmNvbXBhdGlibGVEZWZhdWx0UGFyYW1ldGVyVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL0luY29tcGF0aWJsZURlZmF1bHRQYXJhbWV0ZXJUeXBlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXElubmVyRnVuY3Rpb25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9Jbm5lckZ1bmN0aW9uUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXEludmFsaWRMZXhpY2FsVmFyaWFibGVzSW5DbG9zdXJlVXNlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvSW52YWxpZExleGljYWxWYXJpYWJsZXNJbkNsb3N1cmVVc2VSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcTWlzc2luZ0Z1bmN0aW9uUGFyYW1ldGVyVHlwZWhpbnRSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9NaXNzaW5nRnVuY3Rpb25QYXJhbWV0ZXJUeXBlaGludFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxNaXNzaW5nRnVuY3Rpb25SZXR1cm5UeXBlaGludFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL01pc3NpbmdGdW5jdGlvblJldHVyblR5cGVoaW50UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXFBhcmFtQXR0cmlidXRlc1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL1BhcmFtQXR0cmlidXRlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxQYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxQcmludGZBcnJheVBhcmFtZXRlcnNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9QcmludGZBcnJheVBhcmFtZXRlcnNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcUHJpbnRmSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9QcmludGZIZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxQcmludGZQYXJhbWV0ZXJzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvUHJpbnRmUGFyYW1ldGVyc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxSYW5kb21JbnRQYXJhbWV0ZXJzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvUmFuZG9tSW50UGFyYW1ldGVyc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxSZWRlZmluZWRQYXJhbWV0ZXJzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvUmVkZWZpbmVkUGFyYW1ldGVyc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxSZXR1cm5OdWxsc2FmZUJ5UmVmUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvUmV0dXJuTnVsbHNhZmVCeVJlZlJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxSZXR1cm5UeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvUmV0dXJuVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxTb3J0UGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL1NvcnRQYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxGdW5jdGlvbnNcXFVudXNlZENsb3N1cmVVc2VzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9GdW5jdGlvbnMvVW51c2VkQ2xvc3VyZVVzZXNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEZ1bmN0aW9uc1xcVXNlbGVzc0Z1bmN0aW9uUmV0dXJuVmFsdWVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0Z1bmN0aW9ucy9Vc2VsZXNzRnVuY3Rpb25SZXR1cm5WYWx1ZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcRnVuY3Rpb25zXFxWYXJpYWRpY1BhcmFtZXRlcnNEZWNsYXJhdGlvblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvRnVuY3Rpb25zL1ZhcmlhZGljUGFyYW1ldGVyc0RlY2xhcmF0aW9uUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmF0b3JzXFxZaWVsZEZyb21UeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9HZW5lcmF0b3JzL1lpZWxkRnJvbVR5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyYXRvcnNcXFlpZWxkSW5HZW5lcmF0b3JSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0dlbmVyYXRvcnMvWWllbGRJbkdlbmVyYXRvclJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJhdG9yc1xcWWllbGRUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9HZW5lcmF0b3JzL1lpZWxkVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXENsYXNzQW5jZXN0b3JzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9DbGFzc0FuY2VzdG9yc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXENsYXNzVGVtcGxhdGVUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9DbGFzc1RlbXBsYXRlVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXENyb3NzQ2hlY2tJbnRlcmZhY2VzSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0Nyb3NzQ2hlY2tJbnRlcmZhY2VzSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyaWNzXFxFbnVtQW5jZXN0b3JzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9FbnVtQW5jZXN0b3JzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcRW51bVRlbXBsYXRlVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvRW51bVRlbXBsYXRlVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXEZ1bmN0aW9uU2lnbmF0dXJlVmFyaWFuY2VSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0Z1bmN0aW9uU2lnbmF0dXJlVmFyaWFuY2VSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyaWNzXFxGdW5jdGlvblRlbXBsYXRlVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvRnVuY3Rpb25UZW1wbGF0ZVR5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyaWNzXFxHZW5lcmljQW5jZXN0b3JzQ2hlY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvR2VuZXJpY0FuY2VzdG9yc0NoZWNrLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyaWNzXFxHZW5lcmljT2JqZWN0VHlwZUNoZWNrJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL0dlbmVyaWNPYmplY3RUeXBlQ2hlY2sucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXEludGVyZmFjZUFuY2VzdG9yc1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvSW50ZXJmYWNlQW5jZXN0b3JzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcSW50ZXJmYWNlVGVtcGxhdGVUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9JbnRlcmZhY2VUZW1wbGF0ZVR5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyaWNzXFxNZXRob2RTaWduYXR1cmVWYXJpYW5jZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvTWV0aG9kU2lnbmF0dXJlVmFyaWFuY2VSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyaWNzXFxNZXRob2RUYWdUZW1wbGF0ZVR5cGVDaGVjaycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9NZXRob2RUYWdUZW1wbGF0ZVR5cGVDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcTWV0aG9kVGFnVGVtcGxhdGVUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9NZXRob2RUYWdUZW1wbGF0ZVR5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyaWNzXFxNZXRob2RUYWdUZW1wbGF0ZVR5cGVUcmFpdFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvTWV0aG9kVGFnVGVtcGxhdGVUeXBlVHJhaXRSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyaWNzXFxNZXRob2RUZW1wbGF0ZVR5cGVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL01ldGhvZFRlbXBsYXRlVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXFByb3BlcnR5VmFyaWFuY2VSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL1Byb3BlcnR5VmFyaWFuY2VSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEdlbmVyaWNzXFxUZW1wbGF0ZVR5cGVDaGVjaycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9HZW5lcmljcy9UZW1wbGF0ZVR5cGVDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcVHJhaXRUZW1wbGF0ZVR5cGVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0dlbmVyaWNzL1RyYWl0VGVtcGxhdGVUeXBlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxHZW5lcmljc1xcVXNlZFRyYWl0c1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvVXNlZFRyYWl0c1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcR2VuZXJpY3NcXFZhcmlhbmNlQ2hlY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvR2VuZXJpY3MvVmFyaWFuY2VDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxJZGVudGlmaWVyUnVsZUVycm9yJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL0lkZW50aWZpZXJSdWxlRXJyb3IucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcSWdub3JlXFxJZ25vcmVQYXJzZUVycm9yUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9JZ25vcmUvSWdub3JlUGFyc2VFcnJvclJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcSXNzZXRDaGVjaycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Jc3NldENoZWNrLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEtleXdvcmRzXFxDb250aW51ZUJyZWFrSW5Mb29wUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9LZXl3b3Jkcy9Db250aW51ZUJyZWFrSW5Mb29wUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxLZXl3b3Jkc1xcRGVjbGFyZVN0cmljdFR5cGVzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9LZXl3b3Jkcy9EZWNsYXJlU3RyaWN0VHlwZXNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXEtleXdvcmRzXFxSZXF1aXJlRmlsZUV4aXN0c1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvS2V5d29yZHMvUmVxdWlyZUZpbGVFeGlzdHNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXExhenlSZWdpc3RyeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9MYXp5UmVnaXN0cnkucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTGluZVJ1bGVFcnJvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9MaW5lUnVsZUVycm9yLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGFkYXRhUnVsZUVycm9yJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGFkYXRhUnVsZUVycm9yLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXEFic3RyYWN0TWV0aG9kSW5Ob25BYnN0cmFjdENsYXNzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0Fic3RyYWN0TWV0aG9kSW5Ob25BYnN0cmFjdENsYXNzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxBYnN0cmFjdFByaXZhdGVNZXRob2RSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGhvZHMvQWJzdHJhY3RQcml2YXRlTWV0aG9kUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxBbHdheXNVc2VkTWV0aG9kRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGhvZHMvQWx3YXlzVXNlZE1ldGhvZEV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxBbHdheXNVc2VkTWV0aG9kRXh0ZW5zaW9uUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9BbHdheXNVc2VkTWV0aG9kRXh0ZW5zaW9uUHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcQ2FsbE1ldGhvZHNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGhvZHMvQ2FsbE1ldGhvZHNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXENhbGxQcml2YXRlTWV0aG9kVGhyb3VnaFN0YXRpY1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9DYWxsUHJpdmF0ZU1ldGhvZFRocm91Z2hTdGF0aWNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXENhbGxTdGF0aWNNZXRob2RzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NhbGxTdGF0aWNNZXRob2RzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxDYWxsVG9Db25zdHJ1Y3RvclN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9DYWxsVG9Db25zdHJ1Y3RvclN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcQ2FsbFRvTWV0aG9kU3RhdGVtZW50V2l0aG91dFNpZGVFZmZlY3RzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NhbGxUb01ldGhvZFN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcQ2FsbFRvU3RhdGljTWV0aG9kU3RhdGVtZW50V2l0aG91dFNpZGVFZmZlY3RzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NhbGxUb1N0YXRpY01ldGhvZFN0YXRlbWVudFdpdGhvdXRTaWRlRWZmZWN0c1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcQ29uc2lzdGVudENvbnN0cnVjdG9yUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NvbnNpc3RlbnRDb25zdHJ1Y3RvclJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcQ29uc3RydWN0b3JSZXR1cm5UeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0NvbnN0cnVjdG9yUmV0dXJuVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcRGlyZWN0QWx3YXlzVXNlZE1ldGhvZEV4dGVuc2lvblByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGhvZHMvRGlyZWN0QWx3YXlzVXNlZE1ldGhvZEV4dGVuc2lvblByb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXEV4aXN0aW5nQ2xhc3Nlc0luVHlwZWhpbnRzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0V4aXN0aW5nQ2xhc3Nlc0luVHlwZWhpbnRzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxGaW5hbFByaXZhdGVNZXRob2RSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGhvZHMvRmluYWxQcml2YXRlTWV0aG9kUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxJbGxlZ2FsQ29uc3RydWN0b3JNZXRob2RDYWxsUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL0lsbGVnYWxDb25zdHJ1Y3Rvck1ldGhvZENhbGxSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXElsbGVnYWxDb25zdHJ1Y3RvclN0YXRpY0NhbGxSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGhvZHMvSWxsZWdhbENvbnN0cnVjdG9yU3RhdGljQ2FsbFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcSW5jb21wYXRpYmxlRGVmYXVsdFBhcmFtZXRlclR5cGVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGhvZHMvSW5jb21wYXRpYmxlRGVmYXVsdFBhcmFtZXRlclR5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXExhenlBbHdheXNVc2VkTWV0aG9kRXh0ZW5zaW9uUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9MYXp5QWx3YXlzVXNlZE1ldGhvZEV4dGVuc2lvblByb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXE1ldGhvZEF0dHJpYnV0ZXNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kQXR0cmlidXRlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcTWV0aG9kQ2FsbENoZWNrJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kQ2FsbENoZWNrLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXE1ldGhvZENhbGxhYmxlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL01ldGhvZENhbGxhYmxlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxNZXRob2RQYXJhbWV0ZXJDb21wYXJpc29uSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kUGFyYW1ldGVyQ29tcGFyaXNvbkhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxNZXRob2RTaWduYXR1cmVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kU2lnbmF0dXJlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxNZXRob2RWaXNpYmlsaXR5SW5JbnRlcmZhY2VSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL01ldGhvZHMvTWV0aG9kVmlzaWJpbGl0eUluSW50ZXJmYWNlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxNaXNzaW5nTWFnaWNTZXJpYWxpemF0aW9uTWV0aG9kc1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9NaXNzaW5nTWFnaWNTZXJpYWxpemF0aW9uTWV0aG9kc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcTWlzc2luZ01ldGhvZEltcGxlbWVudGF0aW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RJbXBsZW1lbnRhdGlvblJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcTWlzc2luZ01ldGhvZFBhcmFtZXRlclR5cGVoaW50UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RQYXJhbWV0ZXJUeXBlaGludFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcTWlzc2luZ01ldGhvZFJldHVyblR5cGVoaW50UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RSZXR1cm5UeXBlaGludFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcTWlzc2luZ01ldGhvZFNlbGZPdXRUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL01pc3NpbmdNZXRob2RTZWxmT3V0VHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcTnVsbHNhZmVNZXRob2RDYWxsUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL051bGxzYWZlTWV0aG9kQ2FsbFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWV0aG9kc1xcT3ZlcnJpZGluZ01ldGhvZFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9PdmVycmlkaW5nTWV0aG9kUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxSZXR1cm5UeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL1JldHVyblR5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE1ldGhvZHNcXFN0YXRpY01ldGhvZENhbGxDaGVjaycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9NZXRob2RzL1N0YXRpY01ldGhvZENhbGxDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxNZXRob2RzXFxTdGF0aWNNZXRob2RDYWxsYWJsZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvTWV0aG9kcy9TdGF0aWNNZXRob2RDYWxsYWJsZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWlzc2luZ1R5cGVoaW50Q2hlY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvTWlzc2luZ1R5cGVoaW50Q2hlY2sucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcTWlzc2luZ1xcTWlzc2luZ1JldHVyblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvTWlzc2luZy9NaXNzaW5nUmV0dXJuUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxOYW1lc1xcVXNlZE5hbWVzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9OYW1lcy9Vc2VkTmFtZXNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE5hbWVzcGFjZXNcXEV4aXN0aW5nTmFtZXNJbkdyb3VwVXNlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9OYW1lc3BhY2VzL0V4aXN0aW5nTmFtZXNJbkdyb3VwVXNlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxOYW1lc3BhY2VzXFxFeGlzdGluZ05hbWVzSW5Vc2VSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL05hbWVzcGFjZXMvRXhpc3RpbmdOYW1lc0luVXNlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxOb25JZ25vcmFibGVSdWxlRXJyb3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvTm9uSWdub3JhYmxlUnVsZUVycm9yLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE51bGxzYWZlQ2hlY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvTnVsbHNhZmVDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxPcGVyYXRvcnNcXEludmFsaWRBc3NpZ25WYXJSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL09wZXJhdG9ycy9JbnZhbGlkQXNzaWduVmFyUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxPcGVyYXRvcnNcXEludmFsaWRCaW5hcnlPcGVyYXRpb25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL09wZXJhdG9ycy9JbnZhbGlkQmluYXJ5T3BlcmF0aW9uUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxPcGVyYXRvcnNcXEludmFsaWRDb21wYXJpc29uT3BlcmF0aW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9PcGVyYXRvcnMvSW52YWxpZENvbXBhcmlzb25PcGVyYXRpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE9wZXJhdG9yc1xcSW52YWxpZEluY0RlY09wZXJhdGlvblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvT3BlcmF0b3JzL0ludmFsaWRJbmNEZWNPcGVyYXRpb25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXE9wZXJhdG9yc1xcSW52YWxpZFVuYXJ5T3BlcmF0aW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9PcGVyYXRvcnMvSW52YWxpZFVuYXJ5T3BlcmF0aW9uUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQYXJhbWV0ZXJDYXN0YWJsZVRvU3RyaW5nQ2hlY2snID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUGFyYW1ldGVyQ2FzdGFibGVUb1N0cmluZ0NoZWNrLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcQXNzZXJ0UnVsZUhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvQXNzZXJ0UnVsZUhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXENvbmRpdGlvbmFsUmV0dXJuVHlwZVJ1bGVIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0NvbmRpdGlvbmFsUmV0dXJuVHlwZVJ1bGVIZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxGdW5jdGlvbkFzc2VydFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0Z1bmN0aW9uQXNzZXJ0UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXEZ1bmN0aW9uQ29uZGl0aW9uYWxSZXR1cm5UeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvRnVuY3Rpb25Db25kaXRpb25hbFJldHVyblR5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcR2VuZXJpY0NhbGxhYmxlUnVsZUhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvR2VuZXJpY0NhbGxhYmxlUnVsZUhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXEluY29tcGF0aWJsZUNsYXNzQ29uc3RhbnRQaHBEb2NUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvSW5jb21wYXRpYmxlQ2xhc3NDb25zdGFudFBocERvY1R5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcSW5jb21wYXRpYmxlUGFyYW1JbW1lZGlhdGVseUludm9rZWRDYWxsYWJsZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0luY29tcGF0aWJsZVBhcmFtSW1tZWRpYXRlbHlJbnZva2VkQ2FsbGFibGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcSW5jb21wYXRpYmxlUGhwRG9jVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUGhwRG9jL0luY29tcGF0aWJsZVBocERvY1R5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcSW5jb21wYXRpYmxlUHJvcGVydHlQaHBEb2NUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvSW5jb21wYXRpYmxlUHJvcGVydHlQaHBEb2NUeXBlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXEluY29tcGF0aWJsZVNlbGZPdXRUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvSW5jb21wYXRpYmxlU2VsZk91dFR5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcSW52YWxpZFBIUFN0YW5Eb2NUYWdSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1BocERvYy9JbnZhbGlkUEhQU3RhbkRvY1RhZ1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxJbnZhbGlkUGhwRG9jVGFnVmFsdWVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1BocERvYy9JbnZhbGlkUGhwRG9jVGFnVmFsdWVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcSW52YWxpZFBocERvY1ZhclRhZ1R5cGVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1BocERvYy9JbnZhbGlkUGhwRG9jVmFyVGFnVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxJbnZhbGlkVGhyb3dzUGhwRG9jVmFsdWVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1BocERvYy9JbnZhbGlkVGhyb3dzUGhwRG9jVmFsdWVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcTWV0aG9kQXNzZXJ0UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvTWV0aG9kQXNzZXJ0UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXE1ldGhvZENvbmRpdGlvbmFsUmV0dXJuVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUGhwRG9jL01ldGhvZENvbmRpdGlvbmFsUmV0dXJuVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxQaHBEb2NMaW5lSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1BocERvYy9QaHBEb2NMaW5lSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcUmVxdWlyZUV4dGVuZHNDaGVjaycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvUmVxdWlyZUV4dGVuZHNDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXFJlcXVpcmVFeHRlbmRzRGVmaW5pdGlvbkNsYXNzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvUmVxdWlyZUV4dGVuZHNEZWZpbml0aW9uQ2xhc3NSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcUmVxdWlyZUV4dGVuZHNEZWZpbml0aW9uVHJhaXRSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1BocERvYy9SZXF1aXJlRXh0ZW5kc0RlZmluaXRpb25UcmFpdFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxSZXF1aXJlSW1wbGVtZW50c0RlZmluaXRpb25DbGFzc1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUGhwRG9jL1JlcXVpcmVJbXBsZW1lbnRzRGVmaW5pdGlvbkNsYXNzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXFJlcXVpcmVJbXBsZW1lbnRzRGVmaW5pdGlvblRyYWl0UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvUmVxdWlyZUltcGxlbWVudHNEZWZpbml0aW9uVHJhaXRSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBocERvY1xcVW5yZXNvbHZhYmxlVHlwZUhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvVW5yZXNvbHZhYmxlVHlwZUhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQaHBEb2NcXFZhclRhZ0NoYW5nZWRFeHByZXNzaW9uVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUGhwRG9jL1ZhclRhZ0NoYW5nZWRFeHByZXNzaW9uVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxWYXJUYWdUeXBlUnVsZUhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvVmFyVGFnVHlwZVJ1bGVIZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUGhwRG9jXFxXcm9uZ1ZhcmlhYmxlTmFtZUluVmFyVGFnUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QaHBEb2MvV3JvbmdWYXJpYWJsZU5hbWVJblZhclRhZ1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUGxheWdyb3VuZFxcRnVuY3Rpb25OZXZlclJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUGxheWdyb3VuZC9GdW5jdGlvbk5ldmVyUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQbGF5Z3JvdW5kXFxNZXRob2ROZXZlclJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUGxheWdyb3VuZC9NZXRob2ROZXZlclJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUGxheWdyb3VuZFxcTmV2ZXJSdWxlSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1BsYXlncm91bmQvTmV2ZXJSdWxlSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBsYXlncm91bmRcXE5vUGhwQ29kZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUGxheWdyb3VuZC9Ob1BocENvZGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFBsYXlncm91bmRcXE5vdEFuYWx5c2VkVHJhaXRSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1BsYXlncm91bmQvTm90QW5hbHlzZWRUcmFpdFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcQWNjZXNzUHJpdmF0ZVByb3BlcnR5VGhyb3VnaFN0YXRpY1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9BY2Nlc3NQcml2YXRlUHJvcGVydHlUaHJvdWdoU3RhdGljUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxBY2Nlc3NQcm9wZXJ0aWVzSW5Bc3NpZ25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvQWNjZXNzUHJvcGVydGllc0luQXNzaWduUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxBY2Nlc3NQcm9wZXJ0aWVzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL0FjY2Vzc1Byb3BlcnRpZXNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXEFjY2Vzc1N0YXRpY1Byb3BlcnRpZXNJbkFzc2lnblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9BY2Nlc3NTdGF0aWNQcm9wZXJ0aWVzSW5Bc3NpZ25SdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXEFjY2Vzc1N0YXRpY1Byb3BlcnRpZXNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvQWNjZXNzU3RhdGljUHJvcGVydGllc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcRGVmYXVsdFZhbHVlVHlwZXNBc3NpZ25lZFRvUHJvcGVydGllc1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9EZWZhdWx0VmFsdWVUeXBlc0Fzc2lnbmVkVG9Qcm9wZXJ0aWVzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxEaXJlY3RSZWFkV3JpdGVQcm9wZXJ0aWVzRXh0ZW5zaW9uUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9EaXJlY3RSZWFkV3JpdGVQcm9wZXJ0aWVzRXh0ZW5zaW9uUHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcRXhpc3RpbmdDbGFzc2VzSW5Qcm9wZXJ0aWVzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL0V4aXN0aW5nQ2xhc3Nlc0luUHJvcGVydGllc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcRm91bmRQcm9wZXJ0eVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9Gb3VuZFByb3BlcnR5UmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxJbnZhbGlkQ2FsbGFibGVQcm9wZXJ0eVR5cGVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvSW52YWxpZENhbGxhYmxlUHJvcGVydHlUeXBlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxMYXp5UmVhZFdyaXRlUHJvcGVydGllc0V4dGVuc2lvblByb3ZpZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvTGF6eVJlYWRXcml0ZVByb3BlcnRpZXNFeHRlbnNpb25Qcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxNaXNzaW5nUHJvcGVydHlUeXBlaGludFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9NaXNzaW5nUHJvcGVydHlUeXBlaGludFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcTWlzc2luZ1JlYWRPbmx5QnlQaHBEb2NQcm9wZXJ0eUFzc2lnblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9NaXNzaW5nUmVhZE9ubHlCeVBocERvY1Byb3BlcnR5QXNzaWduUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxNaXNzaW5nUmVhZE9ubHlQcm9wZXJ0eUFzc2lnblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9NaXNzaW5nUmVhZE9ubHlQcm9wZXJ0eUFzc2lnblJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcTnVsbHNhZmVQcm9wZXJ0eUZldGNoUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL051bGxzYWZlUHJvcGVydHlGZXRjaFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcT3ZlcnJpZGluZ1Byb3BlcnR5UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL092ZXJyaWRpbmdQcm9wZXJ0eVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcUHJvcGVydGllc0luSW50ZXJmYWNlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1Byb3BlcnRpZXNJbkludGVyZmFjZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcUHJvcGVydHlBdHRyaWJ1dGVzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1Byb3BlcnR5QXR0cmlidXRlc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcUHJvcGVydHlEZXNjcmlwdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUHJvcGVydHlEZXNjcmlwdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXFByb3BlcnR5UmVmbGVjdGlvbkZpbmRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1Byb3BlcnR5UmVmbGVjdGlvbkZpbmRlci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxSZWFkT25seUJ5UGhwRG9jUHJvcGVydHlBc3NpZ25SZWZSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZE9ubHlCeVBocERvY1Byb3BlcnR5QXNzaWduUmVmUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxSZWFkT25seUJ5UGhwRG9jUHJvcGVydHlBc3NpZ25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZE9ubHlCeVBocERvY1Byb3BlcnR5QXNzaWduUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxSZWFkT25seUJ5UGhwRG9jUHJvcGVydHlSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZE9ubHlCeVBocERvY1Byb3BlcnR5UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxSZWFkT25seVByb3BlcnR5QXNzaWduUmVmUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1JlYWRPbmx5UHJvcGVydHlBc3NpZ25SZWZSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXFJlYWRPbmx5UHJvcGVydHlBc3NpZ25SdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZE9ubHlQcm9wZXJ0eUFzc2lnblJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcUmVhZE9ubHlQcm9wZXJ0eVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9SZWFkT25seVByb3BlcnR5UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxSZWFkV3JpdGVQcm9wZXJ0aWVzRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZFdyaXRlUHJvcGVydGllc0V4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxQcm9wZXJ0aWVzXFxSZWFkV3JpdGVQcm9wZXJ0aWVzRXh0ZW5zaW9uUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUHJvcGVydGllcy9SZWFkV3JpdGVQcm9wZXJ0aWVzRXh0ZW5zaW9uUHJvdmlkZXIucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcUmVhZGluZ1dyaXRlT25seVByb3BlcnRpZXNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvUmVhZGluZ1dyaXRlT25seVByb3BlcnRpZXNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFByb3BlcnRpZXNcXFR5cGVzQXNzaWduZWRUb1Byb3BlcnRpZXNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Byb3BlcnRpZXMvVHlwZXNBc3NpZ25lZFRvUHJvcGVydGllc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcVW5pbml0aWFsaXplZFByb3BlcnR5UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1VuaW5pdGlhbGl6ZWRQcm9wZXJ0eVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHJvcGVydGllc1xcV3JpdGluZ1RvUmVhZE9ubHlQcm9wZXJ0aWVzUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Qcm9wZXJ0aWVzL1dyaXRpbmdUb1JlYWRPbmx5UHJvcGVydGllc1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHVyZVxcRnVuY3Rpb25QdXJpdHlDaGVjaycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QdXJlL0Z1bmN0aW9uUHVyaXR5Q2hlY2sucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHVyZVxcUHVyZUZ1bmN0aW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9QdXJlL1B1cmVGdW5jdGlvblJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUHVyZVxcUHVyZU1ldGhvZFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUHVyZS9QdXJlTWV0aG9kUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSZWdleHBcXFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVyblJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUmVnZXhwL1JlZ3VsYXJFeHByZXNzaW9uUGF0dGVyblJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUmVnZXhwXFxSZWd1bGFyRXhwcmVzc2lvblF1b3RpbmdSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1JlZ2V4cC9SZWd1bGFyRXhwcmVzc2lvblF1b3RpbmdSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJlZ2lzdHJ5JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1JlZ2lzdHJ5LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9yLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvckJ1aWxkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9yQnVpbGRlci5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxMDEnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMDEucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTAzJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTAzLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjEwNScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEwNS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxMDcnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMDcucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTA5JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTA5LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjExJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTEucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTExJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTExLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjExMycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjExMy5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxMTUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMTUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTE3JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTE3LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjExOScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjExOS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxMjEnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMjEucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTIzJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTIzLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjEyNScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjEyNS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxMjcnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMjcucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTMnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxMy5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IxNScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjE1LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjE3JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMTcucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMTknID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IxOS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IyMScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjIxLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjIzJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMjMucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMjUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IyNS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IyNycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjI3LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjI5JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMjkucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjMucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMzEnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IzMS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IzMycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjMzLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjM1JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yMzUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yMzcnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3IzNy5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3IzOScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjM5LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjQxJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNDEucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNDMnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I0My5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I0NScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjQ1LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjQ3JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNDcucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNDknID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I0OS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I1JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I1MScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjUxLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjUzJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNTMucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNTUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I1NS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I1NycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjU3LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjU5JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNTkucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNjEnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I2MS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I2MycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjYzLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjY1JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNjUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNjcnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I2Ny5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I2OScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjY5LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjcnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I3LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjcxJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNzEucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNzMnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I3My5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I3NScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjc1LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjc3JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yNzcucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yNzknID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I3OS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I4MScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjgxLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjgzJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yODMucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yODUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I4NS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I4NycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjg3LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjg5JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yODkucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yOScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjkucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yOTEnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I5MS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I5MycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjkzLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVFcnJvcnNcXFJ1bGVFcnJvcjk1JyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1J1bGVFcnJvcnMvUnVsZUVycm9yOTUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUVycm9yc1xcUnVsZUVycm9yOTcnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvUnVsZUVycm9ycy9SdWxlRXJyb3I5Ny5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxSdWxlRXJyb3JzXFxSdWxlRXJyb3I5OScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlRXJyb3JzL1J1bGVFcnJvcjk5LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFJ1bGVMZXZlbEhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlTGV2ZWxIZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcUnVsZUxldmVsSGVscGVyQWNjZXB0c1Jlc3VsdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9SdWxlTGV2ZWxIZWxwZXJBY2NlcHRzUmVzdWx0LnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFRpcFJ1bGVFcnJvcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9UaXBSdWxlRXJyb3IucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcVG9vV2lkZVR5cGVoaW50c1xcVG9vV2lkZUFycm93RnVuY3Rpb25SZXR1cm5UeXBlaGludFJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvVG9vV2lkZVR5cGVoaW50cy9Ub29XaWRlQXJyb3dGdW5jdGlvblJldHVyblR5cGVoaW50UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxUb29XaWRlVHlwZWhpbnRzXFxUb29XaWRlQ2xvc3VyZVJldHVyblR5cGVoaW50UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Ub29XaWRlVHlwZWhpbnRzL1Rvb1dpZGVDbG9zdXJlUmV0dXJuVHlwZWhpbnRSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFRvb1dpZGVUeXBlaGludHNcXFRvb1dpZGVGdW5jdGlvblBhcmFtZXRlck91dFR5cGVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZUZ1bmN0aW9uUGFyYW1ldGVyT3V0VHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcVG9vV2lkZVR5cGVoaW50c1xcVG9vV2lkZUZ1bmN0aW9uUmV0dXJuVHlwZWhpbnRSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZUZ1bmN0aW9uUmV0dXJuVHlwZWhpbnRSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFRvb1dpZGVUeXBlaGludHNcXFRvb1dpZGVNZXRob2RQYXJhbWV0ZXJPdXRUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Ub29XaWRlVHlwZWhpbnRzL1Rvb1dpZGVNZXRob2RQYXJhbWV0ZXJPdXRUeXBlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxUb29XaWRlVHlwZWhpbnRzXFxUb29XaWRlTWV0aG9kUmV0dXJuVHlwZWhpbnRSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZU1ldGhvZFJldHVyblR5cGVoaW50UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxUb29XaWRlVHlwZWhpbnRzXFxUb29XaWRlUGFyYW1ldGVyT3V0VHlwZUNoZWNrJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1Rvb1dpZGVUeXBlaGludHMvVG9vV2lkZVBhcmFtZXRlck91dFR5cGVDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxUb29XaWRlVHlwZWhpbnRzXFxUb29XaWRlUHJvcGVydHlUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9Ub29XaWRlVHlwZWhpbnRzL1Rvb1dpZGVQcm9wZXJ0eVR5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFRyYWl0c1xcQ29uZmxpY3RpbmdUcmFpdENvbnN0YW50c1J1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvVHJhaXRzL0NvbmZsaWN0aW5nVHJhaXRDb25zdGFudHNSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFRyYWl0c1xcQ29uc3RhbnRzSW5UcmFpdHNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1RyYWl0cy9Db25zdGFudHNJblRyYWl0c1J1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcVHJhaXRzXFxOb3RBbmFseXNlZFRyYWl0UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9UcmFpdHMvTm90QW5hbHlzZWRUcmFpdFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcVHJhaXRzXFxUcmFpdERlY2xhcmF0aW9uQ29sbGVjdG9yJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1RyYWl0cy9UcmFpdERlY2xhcmF0aW9uQ29sbGVjdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFRyYWl0c1xcVHJhaXRVc2VDb2xsZWN0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvVHJhaXRzL1RyYWl0VXNlQ29sbGVjdG9yLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFR5cGVzXFxJbnZhbGlkVHlwZXNJblVuaW9uUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9UeXBlcy9JbnZhbGlkVHlwZXNJblVuaW9uUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxVbnVzZWRGdW5jdGlvblBhcmFtZXRlcnNDaGVjaycgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9VbnVzZWRGdW5jdGlvblBhcmFtZXRlcnNDaGVjay5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxWYXJpYWJsZXNcXENvbXBhY3RWYXJpYWJsZXNSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1ZhcmlhYmxlcy9Db21wYWN0VmFyaWFibGVzUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxWYXJpYWJsZXNcXERlZmluZWRWYXJpYWJsZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvVmFyaWFibGVzL0RlZmluZWRWYXJpYWJsZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcVmFyaWFibGVzXFxFbXB0eVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvVmFyaWFibGVzL0VtcHR5UnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxWYXJpYWJsZXNcXElzc2V0UnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9WYXJpYWJsZXMvSXNzZXRSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFZhcmlhYmxlc1xcTnVsbENvYWxlc2NlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9WYXJpYWJsZXMvTnVsbENvYWxlc2NlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFJ1bGVzXFxWYXJpYWJsZXNcXFBhcmFtZXRlck91dEFzc2lnbmVkVHlwZVJ1bGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvUnVsZXMvVmFyaWFibGVzL1BhcmFtZXRlck91dEFzc2lnbmVkVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcVmFyaWFibGVzXFxQYXJhbWV0ZXJPdXRFeGVjdXRpb25FbmRUeXBlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9WYXJpYWJsZXMvUGFyYW1ldGVyT3V0RXhlY3V0aW9uRW5kVHlwZVJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcVmFyaWFibGVzXFxUaHJvd1R5cGVSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1ZhcmlhYmxlcy9UaHJvd1R5cGVSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFZhcmlhYmxlc1xcVW5zZXRSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1ZhcmlhYmxlcy9VbnNldFJ1bGUucGhwJywKICAgICdQSFBTdGFuXFxSdWxlc1xcVmFyaWFibGVzXFxWYXJpYWJsZUNsb25pbmdSdWxlJyA9PiAkYmFzZURpciAuICcvc3JjL1J1bGVzL1ZhcmlhYmxlcy9WYXJpYWJsZUNsb25pbmdSdWxlLnBocCcsCiAgICAnUEhQU3RhblxcUnVsZXNcXFdoaXRlc3BhY2VcXEZpbGVXaGl0ZXNwYWNlUnVsZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9SdWxlcy9XaGl0ZXNwYWNlL0ZpbGVXaGl0ZXNwYWNlUnVsZS5waHAnLAogICAgJ1BIUFN0YW5cXFNob3VsZE5vdEhhcHBlbkV4Y2VwdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9TaG91bGROb3RIYXBwZW5FeGNlcHRpb24ucGhwJywKICAgICdQSFBTdGFuXFxUZXN0aW5nXFxFcnJvckZvcm1hdHRlclRlc3RDYXNlJyA9PiAkYmFzZURpciAuICcvc3JjL1Rlc3RpbmcvRXJyb3JGb3JtYXR0ZXJUZXN0Q2FzZS5waHAnLAogICAgJ1BIUFN0YW5cXFRlc3RpbmdcXExldmVsc1Rlc3RDYXNlJyA9PiAkYmFzZURpciAuICcvc3JjL1Rlc3RpbmcvTGV2ZWxzVGVzdENhc2UucGhwJywKICAgICdQSFBTdGFuXFxUZXN0aW5nXFxQSFBTdGFuVGVzdENhc2UnID0+ICRiYXNlRGlyIC4gJy9zcmMvVGVzdGluZy9QSFBTdGFuVGVzdENhc2UucGhwJywKICAgICdQSFBTdGFuXFxUZXN0aW5nXFxSdWxlVGVzdENhc2UnID0+ICRiYXNlRGlyIC4gJy9zcmMvVGVzdGluZy9SdWxlVGVzdENhc2UucGhwJywKICAgICdQSFBTdGFuXFxUZXN0aW5nXFxUZXN0Q2FzZVNvdXJjZUxvY2F0b3JGYWN0b3J5JyA9PiAkYmFzZURpciAuICcvc3JjL1Rlc3RpbmcvVGVzdENhc2VTb3VyY2VMb2NhdG9yRmFjdG9yeS5waHAnLAogICAgJ1BIUFN0YW5cXFRlc3RpbmdcXFR5cGVJbmZlcmVuY2VUZXN0Q2FzZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UZXN0aW5nL1R5cGVJbmZlcmVuY2VUZXN0Q2FzZS5waHAnLAogICAgJ1BIUFN0YW5cXFRyaW5hcnlMb2dpYycgPT4gJGJhc2VEaXIgLiAnL3NyYy9UcmluYXJ5TG9naWMucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxBY2NlcHRzUmVzdWx0JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvQWNjZXB0c1Jlc3VsdC5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEFjY2Vzc29yeVxcQWNjZXNzb3J5QXJyYXlMaXN0VHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9BY2Nlc3NvcnlBcnJheUxpc3RUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxBY2Nlc3NvcnlMaXRlcmFsU3RyaW5nVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9BY2Nlc3NvcnlMaXRlcmFsU3RyaW5nVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEFjY2Vzc29yeVxcQWNjZXNzb3J5TG93ZXJjYXNlU3RyaW5nVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9BY2Nlc3NvcnlMb3dlcmNhc2VTdHJpbmdUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxBY2Nlc3NvcnlOb25FbXB0eVN0cmluZ1R5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvQWNjZXNzb3J5Tm9uRW1wdHlTdHJpbmdUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxBY2Nlc3NvcnlOb25GYWxzeVN0cmluZ1R5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvQWNjZXNzb3J5Tm9uRmFsc3lTdHJpbmdUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxBY2Nlc3NvcnlOdW1lcmljU3RyaW5nVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9BY2Nlc3NvcnlOdW1lcmljU3RyaW5nVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEFjY2Vzc29yeVxcQWNjZXNzb3J5VHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9BY2Nlc3NvcnlUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxBY2Nlc3NvcnlVcHBlcmNhc2VTdHJpbmdUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L0FjY2Vzc29yeVVwcGVyY2FzZVN0cmluZ1R5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxBY2Nlc3NvcnlcXEhhc01ldGhvZFR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvSGFzTWV0aG9kVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEFjY2Vzc29yeVxcSGFzT2Zmc2V0VHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9IYXNPZmZzZXRUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxIYXNPZmZzZXRWYWx1ZVR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvSGFzT2Zmc2V0VmFsdWVUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxIYXNQcm9wZXJ0eVR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9BY2Nlc3NvcnkvSGFzUHJvcGVydHlUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQWNjZXNzb3J5XFxOb25FbXB0eUFycmF5VHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0FjY2Vzc29yeS9Ob25FbXB0eUFycmF5VHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEFjY2Vzc29yeVxcT3ZlcnNpemVkQXJyYXlUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvQWNjZXNzb3J5L092ZXJzaXplZEFycmF5VHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEFycmF5VHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0FycmF5VHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEJlbmV2b2xlbnRVbmlvblR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9CZW5ldm9sZW50VW5pb25UeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQml0d2lzZUZsYWdIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9CaXR3aXNlRmxhZ0hlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEJvb2xlYW5UeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvQm9vbGVhblR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxDYWxsYWJsZVR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9DYWxsYWJsZVR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxDYWxsYWJsZVR5cGVIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9DYWxsYWJsZVR5cGVIZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxDaXJjdWxhclR5cGVBbGlhc0RlZmluaXRpb25FeGNlcHRpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9DaXJjdWxhclR5cGVBbGlhc0RlZmluaXRpb25FeGNlcHRpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxDaXJjdWxhclR5cGVBbGlhc0Vycm9yVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0NpcmN1bGFyVHlwZUFsaWFzRXJyb3JUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQ2xhc3NTdHJpbmdUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvQ2xhc3NTdHJpbmdUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQ2xvc3VyZVR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9DbG9zdXJlVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXENsb3N1cmVUeXBlRmFjdG9yeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0Nsb3N1cmVUeXBlRmFjdG9yeS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXENvbXBvdW5kVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0NvbXBvdW5kVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXENvbmRpdGlvbmFsVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0NvbmRpdGlvbmFsVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXENvbmRpdGlvbmFsVHlwZUZvclBhcmFtZXRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0NvbmRpdGlvbmFsVHlwZUZvclBhcmFtZXRlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXENvbnN0YW50U2NhbGFyVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0NvbnN0YW50U2NhbGFyVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXENvbnN0YW50VHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0NvbnN0YW50VHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXENvbnN0YW50VHlwZUhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0NvbnN0YW50VHlwZUhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXENvbnN0YW50XFxDb25zdGFudEFycmF5VHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0NvbnN0YW50L0NvbnN0YW50QXJyYXlUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQ29uc3RhbnRcXENvbnN0YW50QXJyYXlUeXBlQW5kTWV0aG9kJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRBcnJheVR5cGVBbmRNZXRob2QucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxDb25zdGFudFxcQ29uc3RhbnRBcnJheVR5cGVCdWlsZGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRBcnJheVR5cGVCdWlsZGVyLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQ29uc3RhbnRcXENvbnN0YW50Qm9vbGVhblR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9Db25zdGFudC9Db25zdGFudEJvb2xlYW5UeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQ29uc3RhbnRcXENvbnN0YW50RmxvYXRUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRGbG9hdFR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxDb25zdGFudFxcQ29uc3RhbnRJbnRlZ2VyVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0NvbnN0YW50L0NvbnN0YW50SW50ZWdlclR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxDb25zdGFudFxcQ29uc3RhbnRTY2FsYXJUb0Jvb2xlYW5UcmFpdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0NvbnN0YW50L0NvbnN0YW50U2NhbGFyVG9Cb29sZWFuVHJhaXQucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxDb25zdGFudFxcQ29uc3RhbnRTdHJpbmdUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvQ29uc3RhbnQvQ29uc3RhbnRTdHJpbmdUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcQ29uc3RhbnRcXE92ZXJzaXplZEFycmF5QnVpbGRlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0NvbnN0YW50L092ZXJzaXplZEFycmF5QnVpbGRlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXERpcmVjdFR5cGVBbGlhc1Jlc29sdmVyUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9EaXJlY3RUeXBlQWxpYXNSZXNvbHZlclByb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcRHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0R5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxEeW5hbWljRnVuY3Rpb25UaHJvd1R5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9EeW5hbWljRnVuY3Rpb25UaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxEeW5hbWljTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0R5bmFtaWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcRHluYW1pY01ldGhvZFRocm93VHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0R5bmFtaWNNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvblJlZ2lzdHJ5JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb25SZWdpc3RyeS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXER5bmFtaWNTdGF0aWNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvRHluYW1pY1N0YXRpY01ldGhvZFJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxEeW5hbWljU3RhdGljTWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvRHluYW1pY1N0YXRpY01ldGhvZFRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEVudW1cXEVudW1DYXNlT2JqZWN0VHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0VudW0vRW51bUNhc2VPYmplY3RUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcRXJyb3JUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvRXJyb3JUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcRXhwb25lbnRpYXRlSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvRXhwb25lbnRpYXRlSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcRXhwcmVzc2lvblR5cGVSZXNvbHZlckV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0V4cHJlc3Npb25UeXBlUmVzb2x2ZXJFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxFeHByZXNzaW9uVHlwZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnknID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9FeHByZXNzaW9uVHlwZVJlc29sdmVyRXh0ZW5zaW9uUmVnaXN0cnkucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxGaWxlVHlwZU1hcHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0ZpbGVUeXBlTWFwcGVyLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcRmxvYXRUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvRmxvYXRUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcRnVuY3Rpb25QYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0Z1bmN0aW9uUGFyYW1ldGVyQ2xvc3VyZVR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxGdW5jdGlvblBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9GdW5jdGlvblBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyYWxpemVQcmVjaXNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmFsaXplUHJlY2lzaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1R5cGVWYXJpYWJsZVJlc29sdmVyJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvR2VuZXJpY1R5cGVWYXJpYWJsZVJlc29sdmVyLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcR2VuZXJpY0NsYXNzU3RyaW5nVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0dlbmVyaWMvR2VuZXJpY0NsYXNzU3RyaW5nVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXEdlbmVyaWNPYmplY3RUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvR2VuZXJpYy9HZW5lcmljT2JqZWN0VHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXEdlbmVyaWNTdGF0aWNUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvR2VuZXJpYy9HZW5lcmljU3RhdGljVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlQXJyYXlUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUFycmF5VHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlQmVuZXZvbGVudFVuaW9uVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVCZW5ldm9sZW50VW5pb25UeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVCb29sZWFuVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVCb29sZWFuVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlQ29uc3RhbnRBcnJheVR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlQ29uc3RhbnRBcnJheVR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZUNvbnN0YW50SW50ZWdlclR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlQ29uc3RhbnRJbnRlZ2VyVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlQ29uc3RhbnRTdHJpbmdUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUNvbnN0YW50U3RyaW5nVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlRmxvYXRUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUZsb2F0VHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlR2VuZXJpY09iamVjdFR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlR2VuZXJpY09iamVjdFR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZUludGVnZXJUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUludGVnZXJUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVJbnRlcnNlY3Rpb25UeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZUludGVyc2VjdGlvblR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZUl0ZXJhYmxlVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVJdGVyYWJsZVR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZUtleU9mVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVLZXlPZlR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZU1peGVkVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVNaXhlZFR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZU9iamVjdFNoYXBlVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVPYmplY3RTaGFwZVR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZU9iamVjdFR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlT2JqZWN0VHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlT2JqZWN0V2l0aG91dENsYXNzVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVPYmplY3RXaXRob3V0Q2xhc3NUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVTdHJpY3RNaXhlZFR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlU3RyaWN0TWl4ZWRUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVTdHJpbmdUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVN0cmluZ1R5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZVR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlVHlwZUFyZ3VtZW50U3RyYXRlZ3knID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZUFyZ3VtZW50U3RyYXRlZ3kucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZVR5cGVGYWN0b3J5JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVGYWN0b3J5LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVUeXBlSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVIZWxwZXIucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxHZW5lcmljXFxUZW1wbGF0ZVR5cGVNYXAnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZU1hcC5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlVHlwZVBhcmFtZXRlclN0cmF0ZWd5JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvR2VuZXJpYy9UZW1wbGF0ZVR5cGVQYXJhbWV0ZXJTdHJhdGVneS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEdlbmVyaWNcXFRlbXBsYXRlVHlwZVJlZmVyZW5jZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0dlbmVyaWMvVGVtcGxhdGVUeXBlUmVmZXJlbmNlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVUeXBlU2NvcGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZVNjb3BlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVUeXBlU3RyYXRlZ3knID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZVN0cmF0ZWd5LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVUeXBlVHJhaXQnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZVRyYWl0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVUeXBlVmFyaWFuY2UnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZVZhcmlhbmNlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVUeXBlVmFyaWFuY2VNYXAnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVHlwZVZhcmlhbmNlTWFwLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVGVtcGxhdGVVbmlvblR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1RlbXBsYXRlVW5pb25UeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcR2VuZXJpY1xcVHlwZVByb2plY3Rpb25IZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9HZW5lcmljL1R5cGVQcm9qZWN0aW9uSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcSGVscGVyXFxHZXRUZW1wbGF0ZVR5cGVUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvSGVscGVyL0dldFRlbXBsYXRlVHlwZVR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxJbnRlZ2VyUmFuZ2VUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvSW50ZWdlclJhbmdlVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXEludGVnZXJUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvSW50ZWdlclR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxJbnRlcnNlY3Rpb25UeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvSW50ZXJzZWN0aW9uVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXElzU3VwZXJUeXBlT2ZSZXN1bHQnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9Jc1N1cGVyVHlwZU9mUmVzdWx0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcSXRlcmFibGVUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvSXRlcmFibGVUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcSnVzdE51bGxhYmxlVHlwZVRyYWl0JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvSnVzdE51bGxhYmxlVHlwZVRyYWl0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcS2V5T2ZUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvS2V5T2ZUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcTGF0ZVJlc29sdmFibGVUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvTGF0ZVJlc29sdmFibGVUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcTGF6eVR5cGVBbGlhc1Jlc29sdmVyUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9MYXp5VHlwZUFsaWFzUmVzb2x2ZXJQcm92aWRlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXExvb3NlQ29tcGFyaXNvbkhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL0xvb3NlQ29tcGFyaXNvbkhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXE1ldGhvZFBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvTWV0aG9kUGFyYW1ldGVyQ2xvc3VyZVR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxNZXRob2RQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvTWV0aG9kUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXE1ldGhvZFR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvTWV0aG9kVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxNaXhlZFR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9NaXhlZFR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxOZXZlclR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9OZXZlclR5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxOZXdPYmplY3RUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvTmV3T2JqZWN0VHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXE5vbkFjY2VwdGluZ05ldmVyVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL05vbkFjY2VwdGluZ05ldmVyVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXE5vbmV4aXN0ZW50UGFyZW50Q2xhc3NUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvTm9uZXhpc3RlbnRQYXJlbnRDbGFzc1R5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxOdWxsVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL051bGxUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcT2JqZWN0U2hhcGVQcm9wZXJ0eVJlZmxlY3Rpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9PYmplY3RTaGFwZVByb3BlcnR5UmVmbGVjdGlvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXE9iamVjdFNoYXBlVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL09iamVjdFNoYXBlVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXE9iamVjdFR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9PYmplY3RUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcT2JqZWN0V2l0aG91dENsYXNzVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL09iamVjdFdpdGhvdXRDbGFzc1R5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxPZmZzZXRBY2Nlc3NUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvT2Zmc2V0QWNjZXNzVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXE9wZXJhdG9yVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9PcGVyYXRvclR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcT3BlcmF0b3JUeXBlU3BlY2lmeWluZ0V4dGVuc2lvblJlZ2lzdHJ5JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvT3BlcmF0b3JUeXBlU3BlY2lmeWluZ0V4dGVuc2lvblJlZ2lzdHJ5LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGFyc2VyTm9kZVR5cGVUb1BIUFN0YW5UeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGFyc2VyTm9kZVR5cGVUb1BIUFN0YW5UeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBYnNGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0Fic0Z1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFyZ3VtZW50QmFzZWRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJndW1lbnRCYXNlZEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlDaGFuZ2VLZXlDYXNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0FycmF5Q2hhbmdlS2V5Q2FzZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlDaHVua0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9BcnJheUNodW5rRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUNvbHVtbkZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9BcnJheUNvbHVtbkZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlDb21iaW5lRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0FycmF5Q29tYmluZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlDdXJyZW50RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlDdXJyZW50RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5RmlsbEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9BcnJheUZpbGxGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5RmlsbEtleXNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlGaWxsS2V5c0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlGaWx0ZXJGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlGaWx0ZXJGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5RmlsdGVyRnVuY3Rpb25SZXR1cm5UeXBlSGVscGVyJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0FycmF5RmlsdGVyRnVuY3Rpb25SZXR1cm5UeXBlSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUZpbmRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlGaW5kRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUZpbmRLZXlGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlGaW5kS2V5RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUZsaXBGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlGbGlwRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUludGVyc2VjdEtleUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9BcnJheUludGVyc2VjdEtleUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlLZXlEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9BcnJheUtleUR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUtleUV4aXN0c0Z1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlLZXlFeGlzdHNGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUtleUZpcnN0RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlLZXlGaXJzdER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheUtleUxhc3REeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9BcnJheUtleUxhc3REeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlLZXlzRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9BcnJheUtleXNGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheU1hcEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9BcnJheU1hcEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlNZXJnZUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlNZXJnZUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5TmV4dER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0FycmF5TmV4dER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheVBvaW50ZXJGdW5jdGlvbnNEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9BcnJheVBvaW50ZXJGdW5jdGlvbnNEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlQb3BGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlQb3BGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5UmFuZEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9BcnJheVJhbmRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5UmVkdWNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0FycmF5UmVkdWNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheVJlcGxhY2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlSZXBsYWNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheVJldmVyc2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlSZXZlcnNlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheVNlYXJjaEZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlTZWFyY2hGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheVNlYXJjaEZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlTZWFyY2hGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxBcnJheVNoaWZ0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0FycmF5U2hpZnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5U2xpY2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlTbGljZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXJyYXlTcGxpY2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXJyYXlTcGxpY2VGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5U3VtRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9BcnJheVN1bUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFycmF5VmFsdWVzRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9BcnJheVZhbHVlc0Z1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEFzc2VydEZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQXNzZXJ0RnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQXNzZXJ0VGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0Fzc2VydFRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQmFja2VkRW51bUZyb21NZXRob2REeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9CYWNrZWRFbnVtRnJvbU1ldGhvZER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxCYXNlNjREZWNvZGVEeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0Jhc2U2NERlY29kZUR5bmFtaWNGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEJjTWF0aFN0cmluZ09yTnVsbFJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQmNNYXRoU3RyaW5nT3JOdWxsUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQ2xhc3NFeGlzdHNGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0NsYXNzRXhpc3RzRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQ2xhc3NJbXBsZW1lbnRzRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0NsYXNzSW1wbGVtZW50c0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQ2xvc3VyZUJpbmREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9DbG9zdXJlQmluZER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxDbG9zdXJlQmluZFRvRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQ2xvc3VyZUJpbmRUb0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxDbG9zdXJlRnJvbUNhbGxhYmxlRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQ2xvc3VyZUZyb21DYWxsYWJsZUR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxDb21wYWN0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0NvbXBhY3RGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXENvbnN0YW50RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0NvbnN0YW50RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxDb25zdGFudEhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9Db25zdGFudEhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcQ291bnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQ291bnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXENvdW50RnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9Db3VudEZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEN0eXBlRGlnaXRGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0N0eXBlRGlnaXRGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxDdXJsR2V0aW5mb0Z1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvQ3VybEdldGluZm9GdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEYXRlRm9ybWF0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0RhdGVGb3JtYXRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERhdGVGb3JtYXRNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0RhdGVGb3JtYXRNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEYXRlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0RhdGVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERhdGVGdW5jdGlvblJldHVyblR5cGVIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvRGF0ZUZ1bmN0aW9uUmV0dXJuVHlwZUhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcRGF0ZUludGVydmFsQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvRGF0ZUludGVydmFsQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERhdGVJbnRlcnZhbER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0RhdGVJbnRlcnZhbER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEYXRlUGVyaW9kQ29uc3RydWN0b3JSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0RhdGVQZXJpb2RDb25zdHJ1Y3RvclJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERhdGVUaW1lQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvRGF0ZVRpbWVDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcRGF0ZVRpbWVDcmVhdGVEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9EYXRlVGltZUNyZWF0ZUR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEYXRlVGltZUR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0RhdGVUaW1lRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERhdGVUaW1lTW9kaWZ5TWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0RhdGVUaW1lTW9kaWZ5TWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEYXRlVGltZU1vZGlmeVJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvRGF0ZVRpbWVNb2RpZnlSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEYXRlVGltZVN1Yk1ldGhvZFRocm93VHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9EYXRlVGltZVN1Yk1ldGhvZFRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcRGF0ZVRpbWVab25lQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvRGF0ZVRpbWVab25lQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERlZmluZUNvbnN0YW50VHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvRGVmaW5lQ29uc3RhbnRUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcRGVmaW5lZENvbnN0YW50VHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvRGVmaW5lZENvbnN0YW50VHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXERpb1N0YXREeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0Rpb1N0YXREeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEc01hcER5bmFtaWNNZXRob2RUaHJvd1R5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvRHNNYXBEeW5hbWljTWV0aG9kVGhyb3dUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxEc01hcER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0RzTWFwRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEV4cGxvZGVGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0V4cGxvZGVGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxGaWx0ZXJGdW5jdGlvblJldHVyblR5cGVIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvRmlsdGVyRnVuY3Rpb25SZXR1cm5UeXBlSGVscGVyLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxGaWx0ZXJJbnB1dER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0ZpbHRlcklucHV0RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEZpbHRlclZhckFycmF5RHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvRmlsdGVyVmFyQXJyYXlEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcRmlsdGVyVmFyRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvRmlsdGVyVmFyRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEZ1bmN0aW9uRXhpc3RzRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9GdW5jdGlvbkV4aXN0c0Z1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEdldENhbGxlZENsYXNzRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvR2V0Q2FsbGVkQ2xhc3NEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcR2V0Q2xhc3NEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9HZXRDbGFzc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxHZXREZWJ1Z1R5cGVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvR2V0RGVidWdUeXBlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxHZXREZWZpbmVkVmFyc0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9HZXREZWZpbmVkVmFyc0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcR2V0UGFyZW50Q2xhc3NEeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0dldFBhcmVudENsYXNzRHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcR2V0dGltZW9mZGF5RHluYW1pY0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9HZXR0aW1lb2ZkYXlEeW5hbWljRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxHZXR0eXBlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0dldHR5cGVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEhhc2hGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0hhc2hGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxIaWdobGlnaHRTdHJpbmdEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9IaWdobGlnaHRTdHJpbmdEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcSHJ0aW1lRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0hydGltZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcSW1wbG9kZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9JbXBsb2RlRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxJbkFycmF5RnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9JbkFycmF5RnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcSW5pR2V0UmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9JbmlHZXRSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxJbnRkaXZUaHJvd1R5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvSW50ZGl2VGhyb3dUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxJc0FGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0lzQUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXElzQUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvSXNBRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0hlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcSXNBcnJheUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvSXNBcnJheUZ1bmN0aW9uVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXElzQ2FsbGFibGVGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0lzQ2FsbGFibGVGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxJc0l0ZXJhYmxlRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9Jc0l0ZXJhYmxlRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcSXNTdWJjbGFzc09mRnVuY3Rpb25UeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9Jc1N1YmNsYXNzT2ZGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxJdGVyYXRvclRvQXJyYXlGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvSXRlcmF0b3JUb0FycmF5RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxKc29uVGhyb3dPbkVycm9yRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvSnNvblRocm93T25FcnJvckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxKc29uVGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0pzb25UaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXEx0cmltRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL0x0cmltRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxNYkNvbnZlcnRFbmNvZGluZ0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9NYkNvbnZlcnRFbmNvZGluZ0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcTWJGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL01iRnVuY3Rpb25zUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcTWJGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uVHJhaXQnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvTWJGdW5jdGlvbnNSZXR1cm5UeXBlRXh0ZW5zaW9uVHJhaXQucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXE1iU3RybGVuRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL01iU3RybGVuRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxNYlN1YnN0aXR1dGVDaGFyYWN0ZXJEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9NYlN1YnN0aXR1dGVDaGFyYWN0ZXJEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcTWV0aG9kRXhpc3RzVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvTWV0aG9kRXhpc3RzVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXE1pY3JvdGltZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9NaWNyb3RpbWVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXE1pbk1heEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9NaW5NYXhGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXE5vbkVtcHR5U3RyaW5nRnVuY3Rpb25zUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9Ob25FbXB0eVN0cmluZ0Z1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXE51bWJlckZvcm1hdEZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvTnVtYmVyRm9ybWF0RnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcT3BlblNzbEVuY3J5cHRQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL09wZW5Tc2xFbmNyeXB0UGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUGFyc2VTdHJQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1BhcnNlU3RyUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUGFyc2VVcmxGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1BhcnNlVXJsRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUGF0aGluZm9GdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1BhdGhpbmZvRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUG93RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1Bvd0Z1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUHJlZ0ZpbHRlckZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9QcmVnRmlsdGVyRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxQcmVnTWF0Y2hQYXJhbWV0ZXJPdXRUeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1ByZWdNYXRjaFBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFByZWdNYXRjaFR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1ByZWdNYXRjaFR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxQcmVnUmVwbGFjZUNhbGxiYWNrQ2xvc3VyZVR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvUHJlZ1JlcGxhY2VDYWxsYmFja0Nsb3N1cmVUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxQcmVnU3BsaXREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9QcmVnU3BsaXREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUHJvcGVydHlFeGlzdHNUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9Qcm9wZXJ0eUV4aXN0c1R5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxSYW5kb21JbnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvUmFuZG9tSW50RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxSYW5nZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9SYW5nZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUmVmbGVjdGlvbkNsYXNzQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvUmVmbGVjdGlvbkNsYXNzQ29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFJlZmxlY3Rpb25DbGFzc0lzU3ViY2xhc3NPZlR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1JlZmxlY3Rpb25DbGFzc0lzU3ViY2xhc3NPZlR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxSZWZsZWN0aW9uRnVuY3Rpb25Db25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9SZWZsZWN0aW9uRnVuY3Rpb25Db25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUmVmbGVjdGlvbkdldEF0dHJpYnV0ZXNNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1JlZmxlY3Rpb25HZXRBdHRyaWJ1dGVzTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUmVmbGVjdGlvbk1ldGhvZENvbnN0cnVjdG9yVGhyb3dUeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1JlZmxlY3Rpb25NZXRob2RDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUmVmbGVjdGlvblByb3BlcnR5Q29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvUmVmbGVjdGlvblByb3BlcnR5Q29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFJlZ2V4QXJyYXlTaGFwZU1hdGNoZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvUmVnZXhBcnJheVNoYXBlTWF0Y2hlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUmVwbGFjZUZ1bmN0aW9uc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1JlcGxhY2VGdW5jdGlvbnNEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcUm91bmRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvUm91bmRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFNldFR5cGVGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1NldFR5cGVGdW5jdGlvblR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxTaW1wbGVYTUxFbGVtZW50QXNYTUxNZXRob2RSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1NpbXBsZVhNTEVsZW1lbnRBc1hNTE1ldGhvZFJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFNpbXBsZVhNTEVsZW1lbnRDbGFzc1Byb3BlcnR5UmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9TaW1wbGVYTUxFbGVtZW50Q2xhc3NQcm9wZXJ0eVJlZmxlY3Rpb25FeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFNpbXBsZVhNTEVsZW1lbnRDb25zdHJ1Y3RvclRocm93VHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9TaW1wbGVYTUxFbGVtZW50Q29uc3RydWN0b3JUaHJvd1R5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFNpbXBsZVhNTEVsZW1lbnRYcGF0aE1ldGhvZFJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvU2ltcGxlWE1MRWxlbWVudFhwYXRoTWV0aG9kUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcU3ByaW50ZkZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvU3ByaW50ZkZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFNzY2FuZkZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvU3NjYW5mRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcU3RhdER5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1N0YXREeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcU3RyQ2FzZUZ1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvU3RyQ2FzZUZ1bmN0aW9uc1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0ckNvbnRhaW5pbmdUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9TdHJDb250YWluaW5nVHlwZVNwZWNpZnlpbmdFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0ckluY3JlbWVudERlY3JlbWVudEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9TdHJJbmNyZW1lbnREZWNyZW1lbnRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0clBhZEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9TdHJQYWRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0clJlcGVhdEZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9TdHJSZXBlYXRGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0clNwbGl0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1N0clNwbGl0RnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxTdHJUb2tGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvU3RyVG9rRnVuY3Rpb25SZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxTdHJXb3JkQ291bnRGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1N0cldvcmRDb3VudEZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0cmxlbkZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9TdHJsZW5GdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0cnJldkZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9TdHJyZXZGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0cnRvdGltZUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9TdHJ0b3RpbWVGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN0cnZhbEZhbWlseUZ1bmN0aW9uUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9TdHJ2YWxGYW1pbHlGdW5jdGlvblJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFN1YnN0ckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1N1YnN0ckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxUaHJvd2FibGVSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1Rocm93YWJsZVJldHVyblR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxQaHBcXFRyaWdnZXJFcnJvckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUGhwL1RyaWdnZXJFcnJvckR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxUcmltRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9UcmltRnVuY3Rpb25EeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFBocFxcVHlwZVNwZWNpZnlpbmdGdW5jdGlvbnNEeW5hbWljUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9UeXBlU3BlY2lmeWluZ0Z1bmN0aW9uc0R5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxWZXJzaW9uQ29tcGFyZUZ1bmN0aW9uRHluYW1pY1JldHVyblR5cGVFeHRlbnNpb24nID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9QaHAvVmVyc2lvbkNvbXBhcmVGdW5jdGlvbkR5bmFtaWNSZXR1cm5UeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUGhwXFxYTUxSZWFkZXJPcGVuUmV0dXJuVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1BocC9YTUxSZWFkZXJPcGVuUmV0dXJuVHlwZUV4dGVuc2lvbi5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFJlY3Vyc2lvbkd1YXJkJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUmVjdXJzaW9uR3VhcmQucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxSZWdleFxcUmVnZXhBbHRlcm5hdGlvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1JlZ2V4L1JlZ2V4QWx0ZXJuYXRpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxSZWdleFxcUmVnZXhBc3RXYWxrUmVzdWx0JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUmVnZXgvUmVnZXhBc3RXYWxrUmVzdWx0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUmVnZXhcXFJlZ2V4Q2FwdHVyaW5nR3JvdXAnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9SZWdleC9SZWdleENhcHR1cmluZ0dyb3VwLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUmVnZXhcXFJlZ2V4RXhwcmVzc2lvbkhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1JlZ2V4L1JlZ2V4RXhwcmVzc2lvbkhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFJlZ2V4XFxSZWdleEdyb3VwUGFyc2VyJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUmVnZXgvUmVnZXhHcm91cFBhcnNlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFJlZ2V4XFxSZWdleEdyb3VwV2Fsa1Jlc3VsdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1JlZ2V4L1JlZ2V4R3JvdXBXYWxrUmVzdWx0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUmVnZXhcXFJlZ2V4Tm9uQ2FwdHVyaW5nR3JvdXAnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9SZWdleC9SZWdleE5vbkNhcHR1cmluZ0dyb3VwLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcUmVzb3VyY2VUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvUmVzb3VyY2VUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcU2ltdWx0YW5lb3VzVHlwZVRyYXZlcnNlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1NpbXVsdGFuZW91c1R5cGVUcmF2ZXJzZXIucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxTdGF0aWNNZXRob2RQYXJhbWV0ZXJDbG9zdXJlVHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1N0YXRpY01ldGhvZFBhcmFtZXRlckNsb3N1cmVUeXBlRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcU3RhdGljTWV0aG9kUGFyYW1ldGVyT3V0VHlwZUV4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1N0YXRpY01ldGhvZFBhcmFtZXRlck91dFR5cGVFeHRlbnNpb24ucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxTdGF0aWNNZXRob2RUeXBlU3BlY2lmeWluZ0V4dGVuc2lvbicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1N0YXRpY01ldGhvZFR5cGVTcGVjaWZ5aW5nRXh0ZW5zaW9uLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcU3RhdGljVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1N0YXRpY1R5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxTdGF0aWNUeXBlRmFjdG9yeScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1N0YXRpY1R5cGVGYWN0b3J5LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcU3RyaWN0TWl4ZWRUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvU3RyaWN0TWl4ZWRUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcU3RyaW5nQWx3YXlzQWNjZXB0aW5nT2JqZWN0V2l0aFRvU3RyaW5nVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1N0cmluZ0Fsd2F5c0FjY2VwdGluZ09iamVjdFdpdGhUb1N0cmluZ1R5cGUucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxTdHJpbmdUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvU3RyaW5nVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFN1YnRyYWN0YWJsZVR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9TdWJ0cmFjdGFibGVUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVGhpc1R5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UaGlzVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcQ29uc3RhbnROdW1lcmljQ29tcGFyaXNvblR5cGVUcmFpdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1RyYWl0cy9Db25zdGFudE51bWVyaWNDb21wYXJpc29uVHlwZVRyYWl0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxDb25zdGFudFNjYWxhclR5cGVUcmFpdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1RyYWl0cy9Db25zdGFudFNjYWxhclR5cGVUcmFpdC5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcRmFsc2V5Qm9vbGVhblR5cGVUcmFpdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1RyYWl0cy9GYWxzZXlCb29sZWFuVHlwZVRyYWl0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxMYXRlUmVzb2x2YWJsZVR5cGVUcmFpdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1RyYWl0cy9MYXRlUmVzb2x2YWJsZVR5cGVUcmFpdC5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcTWF5YmVBcnJheVR5cGVUcmFpdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1RyYWl0cy9NYXliZUFycmF5VHlwZVRyYWl0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxNYXliZUNhbGxhYmxlVHlwZVRyYWl0JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvVHJhaXRzL01heWJlQ2FsbGFibGVUeXBlVHJhaXQucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXE1heWJlSXRlcmFibGVUeXBlVHJhaXQnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UcmFpdHMvTWF5YmVJdGVyYWJsZVR5cGVUcmFpdC5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcTWF5YmVPYmplY3RUeXBlVHJhaXQnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UcmFpdHMvTWF5YmVPYmplY3RUeXBlVHJhaXQucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXE1heWJlT2Zmc2V0QWNjZXNzaWJsZVR5cGVUcmFpdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1RyYWl0cy9NYXliZU9mZnNldEFjY2Vzc2libGVUeXBlVHJhaXQucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXE5vbkFycmF5VHlwZVRyYWl0JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvVHJhaXRzL05vbkFycmF5VHlwZVRyYWl0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxOb25DYWxsYWJsZVR5cGVUcmFpdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1RyYWl0cy9Ob25DYWxsYWJsZVR5cGVUcmFpdC5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcTm9uR2VuZXJhbGl6YWJsZVR5cGVUcmFpdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1RyYWl0cy9Ob25HZW5lcmFsaXphYmxlVHlwZVRyYWl0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxOb25HZW5lcmljVHlwZVRyYWl0JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvVHJhaXRzL05vbkdlbmVyaWNUeXBlVHJhaXQucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXE5vbkl0ZXJhYmxlVHlwZVRyYWl0JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvVHJhaXRzL05vbkl0ZXJhYmxlVHlwZVRyYWl0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxOb25PYmplY3RUeXBlVHJhaXQnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UcmFpdHMvTm9uT2JqZWN0VHlwZVRyYWl0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxOb25PZmZzZXRBY2Nlc3NpYmxlVHlwZVRyYWl0JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvVHJhaXRzL05vbk9mZnNldEFjY2Vzc2libGVUeXBlVHJhaXQucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXE5vblJlbW92ZWFibGVUeXBlVHJhaXQnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UcmFpdHMvTm9uUmVtb3ZlYWJsZVR5cGVUcmFpdC5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcT2JqZWN0VHlwZVRyYWl0JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvVHJhaXRzL09iamVjdFR5cGVUcmFpdC5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFRyYWl0c1xcVHJ1dGh5Qm9vbGVhblR5cGVUcmFpdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1RyYWl0cy9UcnV0aHlCb29sZWFuVHlwZVRyYWl0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHJhaXRzXFxVbmRlY2lkZWRCb29sZWFuVHlwZVRyYWl0JyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvVHJhaXRzL1VuZGVjaWRlZEJvb2xlYW5UeXBlVHJhaXQucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXFVuZGVjaWRlZENvbXBhcmlzb25Db21wb3VuZFR5cGVUcmFpdCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1RyYWl0cy9VbmRlY2lkZWRDb21wYXJpc29uQ29tcG91bmRUeXBlVHJhaXQucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxUcmFpdHNcXFVuZGVjaWRlZENvbXBhcmlzb25UeXBlVHJhaXQnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UcmFpdHMvVW5kZWNpZGVkQ29tcGFyaXNvblR5cGVUcmFpdC5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFR5cGUnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHlwZUFsaWFzJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvVHlwZUFsaWFzLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHlwZUFsaWFzUmVzb2x2ZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UeXBlQWxpYXNSZXNvbHZlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFR5cGVBbGlhc1Jlc29sdmVyUHJvdmlkZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UeXBlQWxpYXNSZXNvbHZlclByb3ZpZGVyLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHlwZUNvbWJpbmF0b3InID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UeXBlQ29tYmluYXRvci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFR5cGVSZXN1bHQnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UeXBlUmVzdWx0LnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHlwZVRyYXZlcnNlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1R5cGVUcmF2ZXJzZXIucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxUeXBlVXRpbHMnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UeXBlVXRpbHMucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxUeXBlV2l0aENsYXNzTmFtZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1R5cGVXaXRoQ2xhc3NOYW1lLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVHlwZWhpbnRIZWxwZXInID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9UeXBlaGludEhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFVuaW9uVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1VuaW9uVHlwZS5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFVuaW9uVHlwZUhlbHBlcicgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1VuaW9uVHlwZUhlbHBlci5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFVzZWZ1bFR5cGVBbGlhc1Jlc29sdmVyJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvVXNlZnVsVHlwZUFsaWFzUmVzb2x2ZXIucGhwJywKICAgICdQSFBTdGFuXFxUeXBlXFxWYWx1ZU9mVHlwZScgPT4gJGJhc2VEaXIgLiAnL3NyYy9UeXBlL1ZhbHVlT2ZUeXBlLnBocCcsCiAgICAnUEhQU3RhblxcVHlwZVxcVmVyYm9zaXR5TGV2ZWwnID0+ICRiYXNlRGlyIC4gJy9zcmMvVHlwZS9WZXJib3NpdHlMZXZlbC5waHAnLAogICAgJ1BIUFN0YW5cXFR5cGVcXFZvaWRUeXBlJyA9PiAkYmFzZURpciAuICcvc3JjL1R5cGUvVm9pZFR5cGUucGhwJywKICAgICdQaHBQYXJzZXJcXEJ1aWxkZXInID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxCdWlsZGVyRmFjdG9yeScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXJGYWN0b3J5LnBocCcsCiAgICAnUGhwUGFyc2VyXFxCdWlsZGVySGVscGVycycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXJIZWxwZXJzLnBocCcsCiAgICAnUGhwUGFyc2VyXFxCdWlsZGVyXFxDbGFzc0NvbnN0JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9DbGFzc0NvbnN0LnBocCcsCiAgICAnUGhwUGFyc2VyXFxCdWlsZGVyXFxDbGFzc18nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL0NsYXNzXy5waHAnLAogICAgJ1BocFBhcnNlclxcQnVpbGRlclxcRGVjbGFyYXRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL0RlY2xhcmF0aW9uLnBocCcsCiAgICAnUGhwUGFyc2VyXFxCdWlsZGVyXFxFbnVtQ2FzZScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvRW51bUNhc2UucGhwJywKICAgICdQaHBQYXJzZXJcXEJ1aWxkZXJcXEVudW1fJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9FbnVtXy5waHAnLAogICAgJ1BocFBhcnNlclxcQnVpbGRlclxcRnVuY3Rpb25MaWtlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9GdW5jdGlvbkxpa2UucGhwJywKICAgICdQaHBQYXJzZXJcXEJ1aWxkZXJcXEZ1bmN0aW9uXycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvRnVuY3Rpb25fLnBocCcsCiAgICAnUGhwUGFyc2VyXFxCdWlsZGVyXFxJbnRlcmZhY2VfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9JbnRlcmZhY2VfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxCdWlsZGVyXFxNZXRob2QnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL01ldGhvZC5waHAnLAogICAgJ1BocFBhcnNlclxcQnVpbGRlclxcTmFtZXNwYWNlXycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvTmFtZXNwYWNlXy5waHAnLAogICAgJ1BocFBhcnNlclxcQnVpbGRlclxcUGFyYW0nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9CdWlsZGVyL1BhcmFtLnBocCcsCiAgICAnUGhwUGFyc2VyXFxCdWlsZGVyXFxQcm9wZXJ0eScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvUHJvcGVydHkucGhwJywKICAgICdQaHBQYXJzZXJcXEJ1aWxkZXJcXFRyYWl0VXNlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9UcmFpdFVzZS5waHAnLAogICAgJ1BocFBhcnNlclxcQnVpbGRlclxcVHJhaXRVc2VBZGFwdGF0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9UcmFpdFVzZUFkYXB0YXRpb24ucGhwJywKICAgICdQaHBQYXJzZXJcXEJ1aWxkZXJcXFRyYWl0XycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0J1aWxkZXIvVHJhaXRfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxCdWlsZGVyXFxVc2VfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQnVpbGRlci9Vc2VfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxDb21tZW50JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQ29tbWVudC5waHAnLAogICAgJ1BocFBhcnNlclxcQ29tbWVudFxcRG9jJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvQ29tbWVudC9Eb2MucGhwJywKICAgICdQaHBQYXJzZXJcXENvbnN0RXhwckV2YWx1YXRpb25FeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Db25zdEV4cHJFdmFsdWF0aW9uRXhjZXB0aW9uLnBocCcsCiAgICAnUGhwUGFyc2VyXFxDb25zdEV4cHJFdmFsdWF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Db25zdEV4cHJFdmFsdWF0b3IucGhwJywKICAgICdQaHBQYXJzZXJcXEVycm9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvRXJyb3IucGhwJywKICAgICdQaHBQYXJzZXJcXEVycm9ySGFuZGxlcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0Vycm9ySGFuZGxlci5waHAnLAogICAgJ1BocFBhcnNlclxcRXJyb3JIYW5kbGVyXFxDb2xsZWN0aW5nJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvRXJyb3JIYW5kbGVyL0NvbGxlY3RpbmcucGhwJywKICAgICdQaHBQYXJzZXJcXEVycm9ySGFuZGxlclxcVGhyb3dpbmcnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9FcnJvckhhbmRsZXIvVGhyb3dpbmcucGhwJywKICAgICdQaHBQYXJzZXJcXEludGVybmFsXFxEaWZmRWxlbScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0ludGVybmFsL0RpZmZFbGVtLnBocCcsCiAgICAnUGhwUGFyc2VyXFxJbnRlcm5hbFxcRGlmZmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvSW50ZXJuYWwvRGlmZmVyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxJbnRlcm5hbFxcUHJpbnRhYmxlTmV3QW5vbkNsYXNzTm9kZScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0ludGVybmFsL1ByaW50YWJsZU5ld0Fub25DbGFzc05vZGUucGhwJywKICAgICdQaHBQYXJzZXJcXEludGVybmFsXFxUb2tlblN0cmVhbScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0ludGVybmFsL1Rva2VuU3RyZWFtLnBocCcsCiAgICAnUGhwUGFyc2VyXFxKc29uRGVjb2RlcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0pzb25EZWNvZGVyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxMZXhlcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxMZXhlclxcRW11bGF0aXZlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvRW11bGF0aXZlLnBocCcsCiAgICAnUGhwUGFyc2VyXFxMZXhlclxcVG9rZW5FbXVsYXRvclxcQXR0cmlidXRlRW11bGF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL0F0dHJpYnV0ZUVtdWxhdG9yLnBocCcsCiAgICAnUGhwUGFyc2VyXFxMZXhlclxcVG9rZW5FbXVsYXRvclxcQ29hbGVzZUVxdWFsVG9rZW5FbXVsYXRvcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvQ29hbGVzZUVxdWFsVG9rZW5FbXVsYXRvci5waHAnLAogICAgJ1BocFBhcnNlclxcTGV4ZXJcXFRva2VuRW11bGF0b3JcXEVudW1Ub2tlbkVtdWxhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9FbnVtVG9rZW5FbXVsYXRvci5waHAnLAogICAgJ1BocFBhcnNlclxcTGV4ZXJcXFRva2VuRW11bGF0b3JcXEV4cGxpY2l0T2N0YWxFbXVsYXRvcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvRXhwbGljaXRPY3RhbEVtdWxhdG9yLnBocCcsCiAgICAnUGhwUGFyc2VyXFxMZXhlclxcVG9rZW5FbXVsYXRvclxcRmxleGlibGVEb2NTdHJpbmdFbXVsYXRvcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvRmxleGlibGVEb2NTdHJpbmdFbXVsYXRvci5waHAnLAogICAgJ1BocFBhcnNlclxcTGV4ZXJcXFRva2VuRW11bGF0b3JcXEZuVG9rZW5FbXVsYXRvcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvRm5Ub2tlbkVtdWxhdG9yLnBocCcsCiAgICAnUGhwUGFyc2VyXFxMZXhlclxcVG9rZW5FbXVsYXRvclxcS2V5d29yZEVtdWxhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9LZXl3b3JkRW11bGF0b3IucGhwJywKICAgICdQaHBQYXJzZXJcXExleGVyXFxUb2tlbkVtdWxhdG9yXFxNYXRjaFRva2VuRW11bGF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9MZXhlci9Ub2tlbkVtdWxhdG9yL01hdGNoVG9rZW5FbXVsYXRvci5waHAnLAogICAgJ1BocFBhcnNlclxcTGV4ZXJcXFRva2VuRW11bGF0b3JcXE51bGxzYWZlVG9rZW5FbXVsYXRvcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvTnVsbHNhZmVUb2tlbkVtdWxhdG9yLnBocCcsCiAgICAnUGhwUGFyc2VyXFxMZXhlclxcVG9rZW5FbXVsYXRvclxcTnVtZXJpY0xpdGVyYWxTZXBhcmF0b3JFbXVsYXRvcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvTnVtZXJpY0xpdGVyYWxTZXBhcmF0b3JFbXVsYXRvci5waHAnLAogICAgJ1BocFBhcnNlclxcTGV4ZXJcXFRva2VuRW11bGF0b3JcXFJlYWRvbmx5RnVuY3Rpb25Ub2tlbkVtdWxhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9SZWFkb25seUZ1bmN0aW9uVG9rZW5FbXVsYXRvci5waHAnLAogICAgJ1BocFBhcnNlclxcTGV4ZXJcXFRva2VuRW11bGF0b3JcXFJlYWRvbmx5VG9rZW5FbXVsYXRvcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL0xleGVyL1Rva2VuRW11bGF0b3IvUmVhZG9ubHlUb2tlbkVtdWxhdG9yLnBocCcsCiAgICAnUGhwUGFyc2VyXFxMZXhlclxcVG9rZW5FbXVsYXRvclxcUmV2ZXJzZUVtdWxhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9SZXZlcnNlRW11bGF0b3IucGhwJywKICAgICdQaHBQYXJzZXJcXExleGVyXFxUb2tlbkVtdWxhdG9yXFxUb2tlbkVtdWxhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTGV4ZXIvVG9rZW5FbXVsYXRvci9Ub2tlbkVtdWxhdG9yLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOYW1lQ29udGV4dCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05hbWVDb250ZXh0LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZUFic3RyYWN0JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZUFic3RyYWN0LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlRHVtcGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZUR1bXBlci5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZUZpbmRlcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGVGaW5kZXIucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVUcmF2ZXJzZXInID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVHJhdmVyc2VyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlVHJhdmVyc2VySW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZVRyYXZlcnNlckludGVyZmFjZS5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVZpc2l0b3InID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVZpc2l0b3JBYnN0cmFjdCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGVWaXNpdG9yQWJzdHJhY3QucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVWaXNpdG9yXFxDbG9uaW5nVmlzaXRvcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGVWaXNpdG9yL0Nsb25pbmdWaXNpdG9yLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlVmlzaXRvclxcRmluZGluZ1Zpc2l0b3InID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9GaW5kaW5nVmlzaXRvci5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVZpc2l0b3JcXEZpcnN0RmluZGluZ1Zpc2l0b3InID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9GaXJzdEZpbmRpbmdWaXNpdG9yLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlVmlzaXRvclxcTmFtZVJlc29sdmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZVZpc2l0b3IvTmFtZVJlc29sdmVyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlVmlzaXRvclxcTm9kZUNvbm5lY3RpbmdWaXNpdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZVZpc2l0b3IvTm9kZUNvbm5lY3RpbmdWaXNpdG9yLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlVmlzaXRvclxcUGFyZW50Q29ubmVjdGluZ1Zpc2l0b3InID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlVmlzaXRvci9QYXJlbnRDb25uZWN0aW5nVmlzaXRvci5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcQXJnJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9BcmcucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEF0dHJpYnV0ZScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvQXR0cmlidXRlLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxBdHRyaWJ1dGVHcm91cCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvQXR0cmlidXRlR3JvdXAucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXENvbXBsZXhUeXBlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9Db21wbGV4VHlwZS5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcQ29uc3RfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9Db25zdF8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHInID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFycmF5RGltRmV0Y2gnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXJyYXlEaW1GZXRjaC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXJyYXlJdGVtJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0FycmF5SXRlbS5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXJyYXlfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0FycmF5Xy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXJyb3dGdW5jdGlvbicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9BcnJvd0Z1bmN0aW9uLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxBc3NpZ24nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxBc3NpZ25PcCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXNzaWduT3BcXEJpdHdpc2VBbmQnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvQml0d2lzZUFuZC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXNzaWduT3BcXEJpdHdpc2VPcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9CaXR3aXNlT3IucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFzc2lnbk9wXFxCaXR3aXNlWG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wL0JpdHdpc2VYb3IucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFzc2lnbk9wXFxDb2FsZXNjZScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9Db2FsZXNjZS5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXNzaWduT3BcXENvbmNhdCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9Db25jYXQucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFzc2lnbk9wXFxEaXYnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvRGl2LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxBc3NpZ25PcFxcTWludXMnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvTWludXMucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFzc2lnbk9wXFxNb2QnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvTW9kLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxBc3NpZ25PcFxcTXVsJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Fzc2lnbk9wL011bC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXNzaWduT3BcXFBsdXMnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvUGx1cy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQXNzaWduT3BcXFBvdycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9Qb3cucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEFzc2lnbk9wXFxTaGlmdExlZnQnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduT3AvU2hpZnRMZWZ0LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxBc3NpZ25PcFxcU2hpZnRSaWdodCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Bc3NpZ25PcC9TaGlmdFJpZ2h0LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxBc3NpZ25SZWYnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQXNzaWduUmVmLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXEJpdHdpc2VBbmQnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvQml0d2lzZUFuZC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXEJpdHdpc2VPcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9CaXR3aXNlT3IucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxCaXR3aXNlWG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0JpdHdpc2VYb3IucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxCb29sZWFuQW5kJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0Jvb2xlYW5BbmQucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxCb29sZWFuT3InID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvQm9vbGVhbk9yLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcQ29hbGVzY2UnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvQ29hbGVzY2UucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxDb25jYXQnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvQ29uY2F0LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcRGl2JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0Rpdi5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXEVxdWFsJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0VxdWFsLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcR3JlYXRlcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9HcmVhdGVyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcR3JlYXRlck9yRXF1YWwnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvR3JlYXRlck9yRXF1YWwucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxJZGVudGljYWwnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvSWRlbnRpY2FsLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcTG9naWNhbEFuZCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Mb2dpY2FsQW5kLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcTG9naWNhbE9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL0xvZ2ljYWxPci5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXExvZ2ljYWxYb3InID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvTG9naWNhbFhvci5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXE1pbnVzJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL01pbnVzLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcTW9kJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL01vZC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXE11bCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9NdWwucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxOb3RFcXVhbCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Ob3RFcXVhbC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXE5vdElkZW50aWNhbCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaW5hcnlPcC9Ob3RJZGVudGljYWwucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxQbHVzJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1BsdXMucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEJpbmFyeU9wXFxQb3cnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvUG93LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcU2hpZnRMZWZ0JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1NoaWZ0TGVmdC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXFNoaWZ0UmlnaHQnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvU2hpZnRSaWdodC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXFNtYWxsZXInID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQmluYXJ5T3AvU21hbGxlci5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQmluYXJ5T3BcXFNtYWxsZXJPckVxdWFsJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1NtYWxsZXJPckVxdWFsLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCaW5hcnlPcFxcU3BhY2VzaGlwJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0JpbmFyeU9wL1NwYWNlc2hpcC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQml0d2lzZU5vdCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9CaXR3aXNlTm90LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxCb29sZWFuTm90JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Jvb2xlYW5Ob3QucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXENhbGxMaWtlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0NhbGxMaWtlLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxDYXN0JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Nhc3QucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXENhc3RcXEFycmF5XycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DYXN0L0FycmF5Xy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQ2FzdFxcQm9vbF8nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2FzdC9Cb29sXy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQ2FzdFxcRG91YmxlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Nhc3QvRG91YmxlLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxDYXN0XFxJbnRfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Nhc3QvSW50Xy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQ2FzdFxcT2JqZWN0XycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DYXN0L09iamVjdF8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXENhc3RcXFN0cmluZ18nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2FzdC9TdHJpbmdfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxDYXN0XFxVbnNldF8nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2FzdC9VbnNldF8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXENsYXNzQ29uc3RGZXRjaCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DbGFzc0NvbnN0RmV0Y2gucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXENsb25lXycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DbG9uZV8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXENsb3N1cmUnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvQ2xvc3VyZS5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcQ2xvc3VyZVVzZScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9DbG9zdXJlVXNlLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxDb25zdEZldGNoJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0NvbnN0RmV0Y2gucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEVtcHR5XycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9FbXB0eV8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEVycm9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Vycm9yLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxFcnJvclN1cHByZXNzJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0Vycm9yU3VwcHJlc3MucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEV2YWxfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0V2YWxfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxFeGl0XycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9FeGl0Xy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcRnVuY0NhbGwnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvRnVuY0NhbGwucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXEluY2x1ZGVfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0luY2x1ZGVfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxJbnN0YW5jZW9mXycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9JbnN0YW5jZW9mXy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcSXNzZXRfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL0lzc2V0Xy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcTGlzdF8nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTGlzdF8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXE1hdGNoXycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9NYXRjaF8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXE1ldGhvZENhbGwnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTWV0aG9kQ2FsbC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcTmV3XycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9OZXdfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxOdWxsc2FmZU1ldGhvZENhbGwnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTnVsbHNhZmVNZXRob2RDYWxsLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxOdWxsc2FmZVByb3BlcnR5RmV0Y2gnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvTnVsbHNhZmVQcm9wZXJ0eUZldGNoLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxQb3N0RGVjJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1Bvc3REZWMucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXFBvc3RJbmMnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvUG9zdEluYy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcUHJlRGVjJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1ByZURlYy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcUHJlSW5jJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1ByZUluYy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcUHJpbnRfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1ByaW50Xy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcUHJvcGVydHlGZXRjaCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9Qcm9wZXJ0eUZldGNoLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxTaGVsbEV4ZWMnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvU2hlbGxFeGVjLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxTdGF0aWNDYWxsJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1N0YXRpY0NhbGwucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXFN0YXRpY1Byb3BlcnR5RmV0Y2gnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvU3RhdGljUHJvcGVydHlGZXRjaC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcRXhwclxcVGVybmFyeScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9UZXJuYXJ5LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxUaHJvd18nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvVGhyb3dfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxVbmFyeU1pbnVzJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1VuYXJ5TWludXMucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXFVuYXJ5UGx1cycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvRXhwci9VbmFyeVBsdXMucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXEV4cHJcXFZhcmlhYmxlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9FeHByL1ZhcmlhYmxlLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxZaWVsZEZyb20nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvWWllbGRGcm9tLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxFeHByXFxZaWVsZF8nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0V4cHIvWWllbGRfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxGdW5jdGlvbkxpa2UnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL0Z1bmN0aW9uTGlrZS5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcSWRlbnRpZmllcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvSWRlbnRpZmllci5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcSW50ZXJzZWN0aW9uVHlwZScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvSW50ZXJzZWN0aW9uVHlwZS5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcTWF0Y2hBcm0nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL01hdGNoQXJtLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxOYW1lJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9OYW1lLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxOYW1lXFxGdWxseVF1YWxpZmllZCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvTmFtZS9GdWxseVF1YWxpZmllZC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcTmFtZVxcUmVsYXRpdmUnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL05hbWUvUmVsYXRpdmUucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXE51bGxhYmxlVHlwZScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvTnVsbGFibGVUeXBlLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxQYXJhbScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvUGFyYW0ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFNjYWxhcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXJcXEROdW1iZXInID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9ETnVtYmVyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXJcXEVuY2Fwc2VkJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvRW5jYXBzZWQucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFNjYWxhclxcRW5jYXBzZWRTdHJpbmdQYXJ0JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvRW5jYXBzZWRTdHJpbmdQYXJ0LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXJcXExOdW1iZXInID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9MTnVtYmVyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXJcXE1hZ2ljQ29uc3QnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9NYWdpY0NvbnN0LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXJcXE1hZ2ljQ29uc3RcXENsYXNzXycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvQ2xhc3NfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXJcXE1hZ2ljQ29uc3RcXERpcicgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvRGlyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXJcXE1hZ2ljQ29uc3RcXEZpbGUnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9NYWdpY0NvbnN0L0ZpbGUucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFNjYWxhclxcTWFnaWNDb25zdFxcRnVuY3Rpb25fJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvTWFnaWNDb25zdC9GdW5jdGlvbl8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFNjYWxhclxcTWFnaWNDb25zdFxcTGluZScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvTGluZS5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU2NhbGFyXFxNYWdpY0NvbnN0XFxNZXRob2QnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9NYWdpY0NvbnN0L01ldGhvZC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU2NhbGFyXFxNYWdpY0NvbnN0XFxOYW1lc3BhY2VfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TY2FsYXIvTWFnaWNDb25zdC9OYW1lc3BhY2VfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXJcXE1hZ2ljQ29uc3RcXFRyYWl0XycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU2NhbGFyL01hZ2ljQ29uc3QvVHJhaXRfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTY2FsYXJcXFN0cmluZ18nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1NjYWxhci9TdHJpbmdfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxCcmVha18nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvQnJlYWtfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxDYXNlXycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9DYXNlXy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcQ2F0Y2hfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NhdGNoXy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcQ2xhc3NDb25zdCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9DbGFzc0NvbnN0LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxDbGFzc0xpa2UnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvQ2xhc3NMaWtlLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxDbGFzc01ldGhvZCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9DbGFzc01ldGhvZC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcQ2xhc3NfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NsYXNzXy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcQ29uc3RfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NvbnN0Xy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcQ29udGludWVfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0NvbnRpbnVlXy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcRGVjbGFyZURlY2xhcmUnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRGVjbGFyZURlY2xhcmUucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXERlY2xhcmVfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0RlY2xhcmVfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxEb18nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRG9fLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxFY2hvXycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9FY2hvXy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcRWxzZUlmXycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9FbHNlSWZfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxFbHNlXycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9FbHNlXy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcRW51bUNhc2UnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRW51bUNhc2UucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXEVudW1fJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0VudW1fLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxFeHByZXNzaW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0V4cHJlc3Npb24ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXEZpbmFsbHlfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0ZpbmFsbHlfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxGb3JfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0Zvcl8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXEZvcmVhY2hfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0ZvcmVhY2hfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxGdW5jdGlvbl8nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvRnVuY3Rpb25fLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxHbG9iYWxfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0dsb2JhbF8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXEdvdG9fJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0dvdG9fLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxHcm91cFVzZScgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Hcm91cFVzZS5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcSGFsdENvbXBpbGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0hhbHRDb21waWxlci5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcSWZfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0lmXy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcSW5saW5lSFRNTCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9JbmxpbmVIVE1MLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxJbnRlcmZhY2VfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0ludGVyZmFjZV8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXExhYmVsJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L0xhYmVsLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxOYW1lc3BhY2VfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L05hbWVzcGFjZV8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXE5vcCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Ob3AucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXFByb3BlcnR5JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1Byb3BlcnR5LnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxQcm9wZXJ0eVByb3BlcnR5JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1Byb3BlcnR5UHJvcGVydHkucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXFJldHVybl8nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvUmV0dXJuXy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcU3RhdGljVmFyJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1N0YXRpY1Zhci5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcU3RhdGljXycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9TdGF0aWNfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxTd2l0Y2hfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1N3aXRjaF8ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXFRocm93XycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9UaHJvd18ucGhwJywKICAgICdQaHBQYXJzZXJcXE5vZGVcXFN0bXRcXFRyYWl0VXNlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1RyYWl0VXNlLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxUcmFpdFVzZUFkYXB0YXRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvVHJhaXRVc2VBZGFwdGF0aW9uLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxUcmFpdFVzZUFkYXB0YXRpb25cXEFsaWFzJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1RyYWl0VXNlQWRhcHRhdGlvbi9BbGlhcy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcVHJhaXRVc2VBZGFwdGF0aW9uXFxQcmVjZWRlbmNlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1RyYWl0VXNlQWRhcHRhdGlvbi9QcmVjZWRlbmNlLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxUcmFpdF8nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvVHJhaXRfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxUcnlDYXRjaCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9UcnlDYXRjaC5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcVW5zZXRfJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1Vuc2V0Xy5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcVXNlVXNlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9TdG10L1VzZVVzZS5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcU3RtdFxcVXNlXycgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL05vZGUvU3RtdC9Vc2VfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxTdG10XFxXaGlsZV8nID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1N0bXQvV2hpbGVfLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxVbmlvblR5cGUnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1VuaW9uVHlwZS5waHAnLAogICAgJ1BocFBhcnNlclxcTm9kZVxcVmFyTGlrZUlkZW50aWZpZXInID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9Ob2RlL1Zhckxpa2VJZGVudGlmaWVyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxOb2RlXFxWYXJpYWRpY1BsYWNlaG9sZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvTm9kZS9WYXJpYWRpY1BsYWNlaG9sZGVyLnBocCcsCiAgICAnUGhwUGFyc2VyXFxQYXJzZXInID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9QYXJzZXIucGhwJywKICAgICdQaHBQYXJzZXJcXFBhcnNlckFic3RyYWN0JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyQWJzdHJhY3QucGhwJywKICAgICdQaHBQYXJzZXJcXFBhcnNlckZhY3RvcnknID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9QYXJzZXJGYWN0b3J5LnBocCcsCiAgICAnUGhwUGFyc2VyXFxQYXJzZXJcXE11bHRpcGxlJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyL011bHRpcGxlLnBocCcsCiAgICAnUGhwUGFyc2VyXFxQYXJzZXJcXFBocDUnID0+ICR2ZW5kb3JEaXIgLiAnL25pa2ljL3BocC1wYXJzZXIvbGliL1BocFBhcnNlci9QYXJzZXIvUGhwNS5waHAnLAogICAgJ1BocFBhcnNlclxcUGFyc2VyXFxQaHA3JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyL1BocDcucGhwJywKICAgICdQaHBQYXJzZXJcXFBhcnNlclxcVG9rZW5zJyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUGFyc2VyL1Rva2Vucy5waHAnLAogICAgJ1BocFBhcnNlclxcUHJldHR5UHJpbnRlckFic3RyYWN0JyA9PiAkdmVuZG9yRGlyIC4gJy9uaWtpYy9waHAtcGFyc2VyL2xpYi9QaHBQYXJzZXIvUHJldHR5UHJpbnRlckFic3RyYWN0LnBocCcsCiAgICAnUGhwUGFyc2VyXFxQcmV0dHlQcmludGVyXFxTdGFuZGFyZCcgPT4gJHZlbmRvckRpciAuICcvbmlraWMvcGhwLXBhcnNlci9saWIvUGhwUGFyc2VyL1ByZXR0eVByaW50ZXIvU3RhbmRhcmQucGhwJywKICAgICdQaHBUb2tlbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvUGhwVG9rZW4ucGhwJywKICAgICdSZXR1cm5UeXBlV2lsbENoYW5nZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS9SZXNvdXJjZXMvc3R1YnMvUmV0dXJuVHlwZVdpbGxDaGFuZ2UucGhwJywKICAgICdTdHJpbmdhYmxlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9TdHJpbmdhYmxlLnBocCcsCiAgICAnU3ltZm9ueVxcUG9seWZpbGxcXEludGxcXEdyYXBoZW1lXFxHcmFwaGVtZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLWdyYXBoZW1lL0dyYXBoZW1lLnBocCcsCiAgICAnU3ltZm9ueVxcUG9seWZpbGxcXEludGxcXE5vcm1hbGl6ZXJcXE5vcm1hbGl6ZXInID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtaW50bC1ub3JtYWxpemVyL05vcm1hbGl6ZXIucGhwJywKICAgICdTeW1mb255XFxQb2x5ZmlsbFxcTWJzdHJpbmdcXE1ic3RyaW5nJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nL01ic3RyaW5nLnBocCcsCiAgICAnU3ltZm9ueVxcUG9seWZpbGxcXFBocDczXFxQaHA3MycgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA3My9QaHA3My5waHAnLAogICAgJ1N5bWZvbnlcXFBvbHlmaWxsXFxQaHA3NFxcUGhwNzQnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwNzQvUGhwNzQucGhwJywKICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwODBcXFBocDgwJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL1BocDgwLnBocCcsCiAgICAnU3ltZm9ueVxcUG9seWZpbGxcXFBocDgwXFxQaHBUb2tlbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9QaHBUb2tlbi5waHAnLAogICAgJ1N5bWZvbnlcXFBvbHlmaWxsXFxQaHA4MVxcUGhwODEnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwODEvUGhwODEucGhwJywKICAgICdVbmhhbmRsZWRNYXRjaEVycm9yJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDgwL1Jlc291cmNlcy9zdHVicy9VbmhhbmRsZWRNYXRjaEVycm9yLnBocCcsCiAgICAnVmFsdWVFcnJvcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9SZXNvdXJjZXMvc3R1YnMvVmFsdWVFcnJvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ2x1ZVxcUmVhY3RcXE5ESnNvblxcRGVjb2RlcicgPT4gJHZlbmRvckRpciAuICcvY2x1ZS9uZGpzb24tcmVhY3Qvc3JjL0RlY29kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENsdWVcXFJlYWN0XFxOREpzb25cXEVuY29kZXInID0+ICR2ZW5kb3JEaXIgLiAnL2NsdWUvbmRqc29uLXJlYWN0L3NyYy9FbmNvZGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcQ2FCdW5kbGVcXENhQnVuZGxlJyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci9jYS1idW5kbGUvc3JjL0NhQnVuZGxlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcUGNyZVxcTWF0Y2hBbGxSZXN1bHQnID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3BjcmUvc3JjL01hdGNoQWxsUmVzdWx0LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcUGNyZVxcTWF0Y2hBbGxTdHJpY3RHcm91cHNSZXN1bHQnID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3BjcmUvc3JjL01hdGNoQWxsU3RyaWN0R3JvdXBzUmVzdWx0LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcUGNyZVxcTWF0Y2hBbGxXaXRoT2Zmc2V0c1Jlc3VsdCcgPT4gJHZlbmRvckRpciAuICcvY29tcG9zZXIvcGNyZS9zcmMvTWF0Y2hBbGxXaXRoT2Zmc2V0c1Jlc3VsdC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFBjcmVcXE1hdGNoUmVzdWx0JyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci9wY3JlL3NyYy9NYXRjaFJlc3VsdC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFBjcmVcXE1hdGNoU3RyaWN0R3JvdXBzUmVzdWx0JyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci9wY3JlL3NyYy9NYXRjaFN0cmljdEdyb3Vwc1Jlc3VsdC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFBjcmVcXE1hdGNoV2l0aE9mZnNldHNSZXN1bHQnID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3BjcmUvc3JjL01hdGNoV2l0aE9mZnNldHNSZXN1bHQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxQY3JlXFxQY3JlRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci9wY3JlL3NyYy9QY3JlRXhjZXB0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcUGNyZVxcUHJlZycgPT4gJHZlbmRvckRpciAuICcvY29tcG9zZXIvcGNyZS9zcmMvUHJlZy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFBjcmVcXFJlZ2V4JyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci9wY3JlL3NyYy9SZWdleC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFBjcmVcXFJlcGxhY2VSZXN1bHQnID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3BjcmUvc3JjL1JlcGxhY2VSZXN1bHQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxQY3JlXFxVbmV4cGVjdGVkTnVsbE1hdGNoRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci9wY3JlL3NyYy9VbmV4cGVjdGVkTnVsbE1hdGNoRXhjZXB0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcU2VtdmVyXFxDb21wYXJhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci9zZW12ZXIvc3JjL0NvbXBhcmF0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxTZW12ZXJcXENvbXBpbGluZ01hdGNoZXInID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29tcGlsaW5nTWF0Y2hlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFNlbXZlclxcQ29uc3RyYWludFxcQm91bmQnID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29uc3RyYWludC9Cb3VuZC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFNlbXZlclxcQ29uc3RyYWludFxcQ29uc3RyYWludCcgPT4gJHZlbmRvckRpciAuICcvY29tcG9zZXIvc2VtdmVyL3NyYy9Db25zdHJhaW50L0NvbnN0cmFpbnQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxTZW12ZXJcXENvbnN0cmFpbnRcXENvbnN0cmFpbnRJbnRlcmZhY2UnID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29uc3RyYWludC9Db25zdHJhaW50SW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcU2VtdmVyXFxDb25zdHJhaW50XFxNYXRjaEFsbENvbnN0cmFpbnQnID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29uc3RyYWludC9NYXRjaEFsbENvbnN0cmFpbnQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxTZW12ZXJcXENvbnN0cmFpbnRcXE1hdGNoTm9uZUNvbnN0cmFpbnQnID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29uc3RyYWludC9NYXRjaE5vbmVDb25zdHJhaW50LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcU2VtdmVyXFxDb25zdHJhaW50XFxNdWx0aUNvbnN0cmFpbnQnID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvQ29uc3RyYWludC9NdWx0aUNvbnN0cmFpbnQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxTZW12ZXJcXEludGVydmFsJyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci9zZW12ZXIvc3JjL0ludGVydmFsLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcU2VtdmVyXFxJbnRlcnZhbHMnID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvSW50ZXJ2YWxzLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcU2VtdmVyXFxTZW12ZXInID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3NlbXZlci9zcmMvU2VtdmVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxDb21wb3NlclxcU2VtdmVyXFxWZXJzaW9uUGFyc2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci9zZW12ZXIvc3JjL1ZlcnNpb25QYXJzZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxYZGVidWdIYW5kbGVyXFxQaHBDb25maWcnID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3hkZWJ1Zy1oYW5kbGVyL3NyYy9QaHBDb25maWcucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXENvbXBvc2VyXFxYZGVidWdIYW5kbGVyXFxQcm9jZXNzJyA9PiAkdmVuZG9yRGlyIC4gJy9jb21wb3Nlci94ZGVidWctaGFuZGxlci9zcmMvUHJvY2Vzcy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFhkZWJ1Z0hhbmRsZXJcXFN0YXR1cycgPT4gJHZlbmRvckRpciAuICcvY29tcG9zZXIveGRlYnVnLWhhbmRsZXIvc3JjL1N0YXR1cy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcQ29tcG9zZXJcXFhkZWJ1Z0hhbmRsZXJcXFhkZWJ1Z0hhbmRsZXInID0+ICR2ZW5kb3JEaXIgLiAnL2NvbXBvc2VyL3hkZWJ1Zy1oYW5kbGVyL3NyYy9YZGVidWdIYW5kbGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxFdmVuZW1lbnRcXEV2ZW50RW1pdHRlcicgPT4gJHZlbmRvckRpciAuICcvZXZlbmVtZW50L2V2ZW5lbWVudC9zcmMvRXZlbnRFbWl0dGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxFdmVuZW1lbnRcXEV2ZW50RW1pdHRlckludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvZXZlbmVtZW50L2V2ZW5lbWVudC9zcmMvRXZlbnRFbWl0dGVySW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxFdmVuZW1lbnRcXEV2ZW50RW1pdHRlclRyYWl0JyA9PiAkdmVuZG9yRGlyIC4gJy9ldmVuZW1lbnQvZXZlbmVtZW50L3NyYy9FdmVudEVtaXR0ZXJUcmFpdC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxDcHVDb3JlQ291bnRlcicgPT4gJHZlbmRvckRpciAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvQ3B1Q29yZUNvdW50ZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRGlhZ25vc2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9EaWFnbm9zZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRXhlY3V0b3JcXFByb2NPcGVuRXhlY3V0b3InID0+ICR2ZW5kb3JEaXIgLiAnL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0V4ZWN1dG9yL1Byb2NPcGVuRXhlY3V0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRXhlY3V0b3JcXFByb2Nlc3NFeGVjdXRvcicgPT4gJHZlbmRvckRpciAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRXhlY3V0b3IvUHJvY2Vzc0V4ZWN1dG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcQ21pQ21kbGV0TG9naWNhbEZpbmRlcicgPT4gJHZlbmRvckRpciAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0NtaUNtZGxldExvZ2ljYWxGaW5kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxDbWlDbWRsZXRQaHlzaWNhbEZpbmRlcicgPT4gJHZlbmRvckRpciAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0NtaUNtZGxldFBoeXNpY2FsRmluZGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcQ3B1Q29yZUZpbmRlcicgPT4gJHZlbmRvckRpciAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0NwdUNvcmVGaW5kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxDcHVJbmZvRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvQ3B1SW5mb0ZpbmRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxGaW5kZXJcXER1bW15Q3B1Q29yZUZpbmRlcicgPT4gJHZlbmRvckRpciAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0R1bW15Q3B1Q29yZUZpbmRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxGaW5kZXJcXEVudlZhcmlhYmxlRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvRW52VmFyaWFibGVGaW5kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxGaW5kZXJSZWdpc3RyeScgPT4gJHZlbmRvckRpciAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0ZpbmRlclJlZ2lzdHJ5LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcSHdMb2dpY2FsRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvSHdMb2dpY2FsRmluZGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXEZpbmRlclxcSHdQaHlzaWNhbEZpbmRlcicgPT4gJHZlbmRvckRpciAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL0h3UGh5c2ljYWxGaW5kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxMc2NwdUxvZ2ljYWxGaW5kZXInID0+ICR2ZW5kb3JEaXIgLiAnL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9Mc2NwdUxvZ2ljYWxGaW5kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxMc2NwdVBoeXNpY2FsRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvTHNjcHVQaHlzaWNhbEZpbmRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxGaW5kZXJcXE5Qcm9jRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvTlByb2NGaW5kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxOUHJvY2Vzc29yRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvTlByb2Nlc3NvckZpbmRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxGaW5kZXJcXE51bGxDcHVDb3JlRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvTnVsbENwdUNvcmVGaW5kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxPbmx5SW5Qb3dlclNoZWxsRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvT25seUluUG93ZXJTaGVsbEZpbmRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxGaW5kZXJcXE9ubHlPbk9TRmFtaWx5RmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvT25seU9uT1NGYW1pbHlGaW5kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxQcm9jT3BlbkJhc2VkRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvUHJvY09wZW5CYXNlZEZpbmRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxGaW5kZXJcXFNraXBPbk9TRmFtaWx5RmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvU2tpcE9uT1NGYW1pbHlGaW5kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxXaW5kb3dzUmVnaXN0cnlMb2dpY2FsRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvV2luZG93c1JlZ2lzdHJ5TG9naWNhbEZpbmRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxGaW5kZXJcXFdtaWNMb2dpY2FsRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9GaW5kZXIvV21pY0xvZ2ljYWxGaW5kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxXbWljUGh5c2ljYWxGaW5kZXInID0+ICR2ZW5kb3JEaXIgLiAnL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL0ZpbmRlci9XbWljUGh5c2ljYWxGaW5kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZHJ5XFxDcHVDb3JlQ291bnRlclxcRmluZGVyXFxfTlByb2Nlc3NvckZpbmRlcicgPT4gJHZlbmRvckRpciAuICcvZmlkcnkvY3B1LWNvcmUtY291bnRlci9zcmMvRmluZGVyL19OUHJvY2Vzc29yRmluZGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxGaWRyeVxcQ3B1Q29yZUNvdW50ZXJcXE51bWJlck9mQ3B1Q29yZU5vdEZvdW5kJyA9PiAkdmVuZG9yRGlyIC4gJy9maWRyeS9jcHUtY29yZS1jb3VudGVyL3NyYy9OdW1iZXJPZkNwdUNvcmVOb3RGb3VuZC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlkcnlcXENwdUNvcmVDb3VudGVyXFxQYXJhbGxlbGlzYXRpb25SZXN1bHQnID0+ICR2ZW5kb3JEaXIgLiAnL2ZpZHJ5L2NwdS1jb3JlLWNvdW50ZXIvc3JjL1BhcmFsbGVsaXNhdGlvblJlc3VsdC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcRmlnXFxIdHRwXFxNZXNzYWdlXFxSZXF1ZXN0TWV0aG9kSW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9maWcvaHR0cC1tZXNzYWdlLXV0aWwvc3JjL1JlcXVlc3RNZXRob2RJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXEZpZ1xcSHR0cFxcTWVzc2FnZVxcU3RhdHVzQ29kZUludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvZmlnL2h0dHAtbWVzc2FnZS11dGlsL3NyYy9TdGF0dXNDb2RlSW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS91dGlscy9zcmMvZXhjZXB0aW9ucy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXEJvb3RzdHJhcFxcQ29uZmlndXJhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9ib290c3RyYXAvc3JjL0Jvb3RzdHJhcC9Db25maWd1cmF0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxCb290c3RyYXBcXEV4dGVuc2lvbnNcXENvbnN0YW50c0V4dGVuc2lvbicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvYm9vdHN0cmFwL3NyYy9Cb290c3RyYXAvRXh0ZW5zaW9ucy9Db25zdGFudHNFeHRlbnNpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxCb290c3RyYXBcXEV4dGVuc2lvbnNcXFBocEV4dGVuc2lvbicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvYm9vdHN0cmFwL3NyYy9Cb290c3RyYXAvRXh0ZW5zaW9ucy9QaHBFeHRlbnNpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxCcmlkZ2VzXFxESVRyYWN5XFxDb250YWluZXJQYW5lbCcgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0JyaWRnZXMvRElUcmFjeS9Db250YWluZXJQYW5lbC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXENvbmZpZ3VyYXRvcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvYm9vdHN0cmFwL3NyYy9Db25maWd1cmF0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcQXR0cmlidXRlc1xcSW5qZWN0JyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvREkvQXR0cmlidXRlcy9JbmplY3QucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcQXV0b3dpcmluZycgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0RJL0F1dG93aXJpbmcucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcQ29tcGlsZXInID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9Db21waWxlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxDb21waWxlckV4dGVuc2lvbicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0RJL0NvbXBpbGVyRXh0ZW5zaW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXENvbmZpZ1xcQWRhcHRlcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0RJL0NvbmZpZy9BZGFwdGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXENvbmZpZ1xcQWRhcHRlcnNcXE5lb25BZGFwdGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvREkvQ29uZmlnL0FkYXB0ZXJzL05lb25BZGFwdGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXENvbmZpZ1xcQWRhcHRlcnNcXFBocEFkYXB0ZXInID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9Db25maWcvQWRhcHRlcnMvUGhwQWRhcHRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxDb25maWdcXEhlbHBlcnMnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9Db25maWcvSGVscGVycy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxDb25maWdcXElBZGFwdGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvY29tcGF0aWJpbGl0eS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxDb25maWdcXExvYWRlcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0RJL0NvbmZpZy9Mb2FkZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcQ29udGFpbmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvREkvQ29udGFpbmVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXENvbnRhaW5lckJ1aWxkZXInID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9Db250YWluZXJCdWlsZGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXENvbnRhaW5lckxvYWRlcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0RJL0NvbnRhaW5lckxvYWRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxEZWZpbml0aW9uc1xcQWNjZXNzb3JEZWZpbml0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvREkvRGVmaW5pdGlvbnMvQWNjZXNzb3JEZWZpbml0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXERlZmluaXRpb25zXFxEZWZpbml0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvREkvRGVmaW5pdGlvbnMvRGVmaW5pdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxEZWZpbml0aW9uc1xcRmFjdG9yeURlZmluaXRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9EZWZpbml0aW9ucy9GYWN0b3J5RGVmaW5pdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxEZWZpbml0aW9uc1xcSW1wb3J0ZWREZWZpbml0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvREkvRGVmaW5pdGlvbnMvSW1wb3J0ZWREZWZpbml0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXERlZmluaXRpb25zXFxMb2NhdG9yRGVmaW5pdGlvbicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0RJL0RlZmluaXRpb25zL0xvY2F0b3JEZWZpbml0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXERlZmluaXRpb25zXFxSZWZlcmVuY2UnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9EZWZpbml0aW9ucy9SZWZlcmVuY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRGVmaW5pdGlvbnNcXFNlcnZpY2VEZWZpbml0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvREkvRGVmaW5pdGlvbnMvU2VydmljZURlZmluaXRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRGVmaW5pdGlvbnNcXFN0YXRlbWVudCcgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0RJL0RlZmluaXRpb25zL1N0YXRlbWVudC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxEZXBlbmRlbmN5Q2hlY2tlcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0RJL0RlcGVuZGVuY3lDaGVja2VyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXER5bmFtaWNQYXJhbWV0ZXInID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9EeW5hbWljUGFyYW1ldGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXEV4dGVuc2lvbnNcXENvbnN0YW50c0V4dGVuc2lvbicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0RJL0V4dGVuc2lvbnMvQ29uc3RhbnRzRXh0ZW5zaW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXEV4dGVuc2lvbnNcXERJRXh0ZW5zaW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9ESUV4dGVuc2lvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxFeHRlbnNpb25zXFxEZWNvcmF0b3JFeHRlbnNpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9FeHRlbnNpb25zL0RlY29yYXRvckV4dGVuc2lvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxFeHRlbnNpb25zXFxEZWZpbml0aW9uU2NoZW1hJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9EZWZpbml0aW9uU2NoZW1hLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXEV4dGVuc2lvbnNcXEV4dGVuc2lvbnNFeHRlbnNpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9FeHRlbnNpb25zL0V4dGVuc2lvbnNFeHRlbnNpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRXh0ZW5zaW9uc1xcSW5qZWN0RXh0ZW5zaW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvREkvRXh0ZW5zaW9ucy9JbmplY3RFeHRlbnNpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcRXh0ZW5zaW9uc1xcUGFyYW1ldGVyc0V4dGVuc2lvbicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0RJL0V4dGVuc2lvbnMvUGFyYW1ldGVyc0V4dGVuc2lvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxFeHRlbnNpb25zXFxQaHBFeHRlbnNpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9FeHRlbnNpb25zL1BocEV4dGVuc2lvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxFeHRlbnNpb25zXFxTZWFyY2hFeHRlbnNpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9FeHRlbnNpb25zL1NlYXJjaEV4dGVuc2lvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxFeHRlbnNpb25zXFxTZXJ2aWNlc0V4dGVuc2lvbicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0RJL0V4dGVuc2lvbnMvU2VydmljZXNFeHRlbnNpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcSGVscGVycycgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvZGkvc3JjL0RJL0hlbHBlcnMucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9leGNlcHRpb25zLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXE1pc3NpbmdTZXJ2aWNlRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvREkvZXhjZXB0aW9ucy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxOb3RBbGxvd2VkRHVyaW5nUmVzb2x2aW5nRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvREkvZXhjZXB0aW9ucy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxQaHBHZW5lcmF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9QaHBHZW5lcmF0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxESVxcUmVzb2x2ZXInID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9SZXNvbHZlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxTZXJ2aWNlQ3JlYXRpb25FeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9ESS9leGNlcHRpb25zLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRElcXFNlcnZpY2VEZWZpbml0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9kaS9zcmMvY29tcGF0aWJpbGl0eS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXERJXFxTdGF0ZW1lbnQnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL2RpL3NyYy9jb21wYXRpYmlsaXR5LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcRGVwcmVjYXRlZEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvdXRpbHMvc3JjL2V4Y2VwdGlvbnMucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxEaXJlY3RvcnlOb3RGb3VuZEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvdXRpbHMvc3JjL2V4Y2VwdGlvbnMucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxGaWxlTm90Rm91bmRFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9leGNlcHRpb25zLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcSHRtbFN0cmluZ2FibGUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9IdG1sU3RyaW5nYWJsZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXElPRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS91dGlscy9zcmMvZXhjZXB0aW9ucy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvdXRpbHMvc3JjL2V4Y2VwdGlvbnMucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxJbnZhbGlkU3RhdGVFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9leGNlcHRpb25zLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcSXRlcmF0b3JzXFxDYWNoaW5nSXRlcmF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9JdGVyYXRvcnMvQ2FjaGluZ0l0ZXJhdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcSXRlcmF0b3JzXFxNYXBwZXInID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9JdGVyYXRvcnMvTWFwcGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTG9hZGVyc1xcUm9ib3RMb2FkZXInID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3JvYm90LWxvYWRlci9zcmMvUm9ib3RMb2FkZXIvUm9ib3RMb2FkZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxMb2NhbGl6YXRpb25cXElUcmFuc2xhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS91dGlscy9zcmMvY29tcGF0aWJpbGl0eS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXExvY2FsaXphdGlvblxcVHJhbnNsYXRvcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvdXRpbHMvc3JjL1RyYW5zbGF0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxNZW1iZXJBY2Nlc3NFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9leGNlcHRpb25zLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTmVvblxcRGVjb2RlcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvbmVvbi9zcmMvTmVvbi9EZWNvZGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTmVvblxcRW5jb2RlcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvbmVvbi9zcmMvTmVvbi9FbmNvZGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTmVvblxcRW50aXR5JyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9uZW9uL3NyYy9OZW9uL0VudGl0eS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvbmVvbi9zcmMvTmVvbi9FeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxOZW9uXFxMZXhlcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvbmVvbi9zcmMvTmVvbi9MZXhlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXE5lb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL25lb24vc3JjL05lb24vTmVvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXE5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL25lb24vc3JjL05lb24vTm9kZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXE5vZGVcXEFycmF5SXRlbU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL25lb24vc3JjL05lb24vTm9kZS9BcnJheUl0ZW1Ob2RlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTmVvblxcTm9kZVxcQXJyYXlOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9uZW9uL3NyYy9OZW9uL05vZGUvQXJyYXlOb2RlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTmVvblxcTm9kZVxcQmxvY2tBcnJheU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL25lb24vc3JjL05lb24vTm9kZS9CbG9ja0FycmF5Tm9kZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXE5vZGVcXEVudGl0eUNoYWluTm9kZScgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvbmVvbi9zcmMvTmVvbi9Ob2RlL0VudGl0eUNoYWluTm9kZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXE5vZGVcXEVudGl0eU5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL25lb24vc3JjL05lb24vTm9kZS9FbnRpdHlOb2RlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTmVvblxcTm9kZVxcSW5saW5lQXJyYXlOb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9uZW9uL3NyYy9OZW9uL05vZGUvSW5saW5lQXJyYXlOb2RlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTmVvblxcTm9kZVxcTGl0ZXJhbE5vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL25lb24vc3JjL05lb24vTm9kZS9MaXRlcmFsTm9kZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXE5vZGVcXFN0cmluZ05vZGUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL25lb24vc3JjL05lb24vTm9kZS9TdHJpbmdOb2RlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTmVvblxcUGFyc2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9uZW9uL3NyYy9OZW9uL1BhcnNlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE5lb25cXFRva2VuJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9uZW9uL3NyYy9OZW9uL1Rva2VuLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTmVvblxcVG9rZW5TdHJlYW0nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL25lb24vc3JjL05lb24vVG9rZW5TdHJlYW0ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxOZW9uXFxUcmF2ZXJzZXInID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL25lb24vc3JjL05lb24vVHJhdmVyc2VyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTm90SW1wbGVtZW50ZWRFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9leGNlcHRpb25zLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcTm90U3VwcG9ydGVkRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS91dGlscy9zcmMvZXhjZXB0aW9ucy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXE91dE9mUmFuZ2VFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9leGNlcHRpb25zLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxBdHRyaWJ1dGUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9BdHRyaWJ1dGUucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXENsYXNzVHlwZScgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0NsYXNzVHlwZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcQ2xvc3VyZScgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0Nsb3N1cmUucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXENvbnN0YW50JyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvQ29uc3RhbnQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXER1bXBlcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0R1bXBlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcRW51bUNhc2UnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9FbnVtQ2FzZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcRXh0cmFjdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvRXh0cmFjdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxGYWN0b3J5JyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvRmFjdG9yeS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcR2xvYmFsRnVuY3Rpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9HbG9iYWxGdW5jdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcSGVscGVycycgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL0hlbHBlcnMucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXExpdGVyYWwnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9MaXRlcmFsLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxNZXRob2QnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9NZXRob2QucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXFBhcmFtZXRlcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1BhcmFtZXRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcUGhwRmlsZScgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1BocEZpbGUucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXFBocExpdGVyYWwnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9QaHBMaXRlcmFsLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxQaHBOYW1lc3BhY2UnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9QaHBOYW1lc3BhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXFByaW50ZXInID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9QcmludGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxQcm9tb3RlZFBhcmFtZXRlcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1Byb21vdGVkUGFyYW1ldGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxQcm9wZXJ0eScgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1Byb3BlcnR5LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxQc3JQcmludGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvUHNyUHJpbnRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcVHJhaXRVc2UnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9UcmFpdFVzZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcVHJhaXRzXFxBdHRyaWJ1dGVBd2FyZScgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1RyYWl0cy9BdHRyaWJ1dGVBd2FyZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcVHJhaXRzXFxDb21tZW50QXdhcmUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9UcmFpdHMvQ29tbWVudEF3YXJlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxUcmFpdHNcXEZ1bmN0aW9uTGlrZScgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvcGhwLWdlbmVyYXRvci9zcmMvUGhwR2VuZXJhdG9yL1RyYWl0cy9GdW5jdGlvbkxpa2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxQaHBHZW5lcmF0b3JcXFRyYWl0c1xcTmFtZUF3YXJlJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvVHJhaXRzL05hbWVBd2FyZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFBocEdlbmVyYXRvclxcVHJhaXRzXFxWaXNpYmlsaXR5QXdhcmUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3BocC1nZW5lcmF0b3Ivc3JjL1BocEdlbmVyYXRvci9UcmFpdHMvVmlzaWJpbGl0eUF3YXJlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcUGhwR2VuZXJhdG9yXFxUeXBlJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9waHAtZ2VuZXJhdG9yL3NyYy9QaHBHZW5lcmF0b3IvVHlwZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFNjaGVtYVxcQ29udGV4dCcgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvc2NoZW1hL3NyYy9TY2hlbWEvQ29udGV4dC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFNjaGVtYVxcRHluYW1pY1BhcmFtZXRlcicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvc2NoZW1hL3NyYy9TY2hlbWEvRHluYW1pY1BhcmFtZXRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFNjaGVtYVxcRWxlbWVudHNcXEFueU9mJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9FbGVtZW50cy9BbnlPZi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFNjaGVtYVxcRWxlbWVudHNcXEJhc2UnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL0VsZW1lbnRzL0Jhc2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxTY2hlbWFcXEVsZW1lbnRzXFxTdHJ1Y3R1cmUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL0VsZW1lbnRzL1N0cnVjdHVyZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFNjaGVtYVxcRWxlbWVudHNcXFR5cGUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL0VsZW1lbnRzL1R5cGUucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxTY2hlbWFcXEV4cGVjdCcgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvc2NoZW1hL3NyYy9TY2hlbWEvRXhwZWN0LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcU2NoZW1hXFxIZWxwZXJzJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9IZWxwZXJzLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcU2NoZW1hXFxNZXNzYWdlJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9NZXNzYWdlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcU2NoZW1hXFxQcm9jZXNzb3InID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL1Byb2Nlc3Nvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFNjaGVtYVxcU2NoZW1hJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9zY2hlbWEvc3JjL1NjaGVtYS9TY2hlbWEucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxTY2hlbWFcXFZhbGlkYXRpb25FeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3NjaGVtYS9zcmMvU2NoZW1hL1ZhbGlkYXRpb25FeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxTbWFydE9iamVjdCcgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvdXRpbHMvc3JjL1NtYXJ0T2JqZWN0LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcU3RhdGljQ2xhc3MnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9TdGF0aWNDbGFzcy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvdXRpbHMvc3JjL2V4Y2VwdGlvbnMucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcQXJyYXlIYXNoJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvQXJyYXlIYXNoLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXEFycmF5TGlzdCcgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL0FycmF5TGlzdC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxBcnJheXMnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9BcnJheXMucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcQXNzZXJ0aW9uRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvZXhjZXB0aW9ucy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxDYWxsYmFjaycgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL0NhbGxiYWNrLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXERhdGVUaW1lJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvRGF0ZVRpbWUucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcRmlsZVN5c3RlbScgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL0ZpbGVTeXN0ZW0ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS9maW5kZXIvc3JjL1V0aWxzL0ZpbmRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxGbG9hdHMnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9GbG9hdHMucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcSGVscGVycycgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL0hlbHBlcnMucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcSHRtbCcgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL0h0bWwucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcSUh0bWxTdHJpbmcnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9jb21wYXRpYmlsaXR5LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXEltYWdlJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvSW1hZ2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcSW1hZ2VFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9leGNlcHRpb25zLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXEpzb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9Kc29uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXEpzb25FeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9leGNlcHRpb25zLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXE9iamVjdEhlbHBlcnMnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9PYmplY3RIZWxwZXJzLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXE9iamVjdE1peGluJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvT2JqZWN0TWl4aW4ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE5ldHRlXFxVdGlsc1xcUGFnaW5hdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvUGFnaW5hdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXFJhbmRvbScgPT4gJHZlbmRvckRpciAuICcvbmV0dGUvdXRpbHMvc3JjL1V0aWxzL1JhbmRvbS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxSZWZsZWN0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9uZXR0ZS91dGlscy9zcmMvVXRpbHMvUmVmbGVjdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcTmV0dGVcXFV0aWxzXFxSZWdleHBFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9leGNlcHRpb25zLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXFN0cmluZ3MnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9TdHJpbmdzLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXFR5cGUnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9UeXBlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXFVua25vd25JbWFnZUZpbGVFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9leGNlcHRpb25zLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxOZXR0ZVxcVXRpbHNcXFZhbGlkYXRvcnMnID0+ICR2ZW5kb3JEaXIgLiAnL25ldHRlL3V0aWxzL3NyYy9VdGlscy9WYWxpZGF0b3JzLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXENpRGV0ZWN0b3InID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvQ2lEZXRlY3Rvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcQWJzdHJhY3RDaScgPT4gJHZlbmRvckRpciAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9BYnN0cmFjdENpLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXENpXFxBcHBWZXlvcicgPT4gJHZlbmRvckRpciAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9BcHBWZXlvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcQXdzQ29kZUJ1aWxkJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0F3c0NvZGVCdWlsZC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcQmFtYm9vJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0JhbWJvby5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcQml0YnVja2V0UGlwZWxpbmVzJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0JpdGJ1Y2tldFBpcGVsaW5lcy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcQnVkZHknID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvQ2kvQnVkZHkucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE9uZHJhTVxcQ2lEZXRlY3RvclxcQ2lcXENpSW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0NpSW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXENpXFxDaXJjbGUnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvQ2kvQ2lyY2xlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXENpXFxDb2Rlc2hpcCcgPT4gJHZlbmRvckRpciAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9Db2Rlc2hpcC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcQ29udGludW91c3BocCcgPT4gJHZlbmRvckRpciAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9Db250aW51b3VzcGhwLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXENpXFxEcm9uZScgPT4gJHZlbmRvckRpciAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9Ecm9uZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxDaVxcR2l0SHViQWN0aW9ucycgPT4gJHZlbmRvckRpciAuICcvb25kcmFtL2NpLWRldGVjdG9yL3NyYy9DaS9HaXRIdWJBY3Rpb25zLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXENpXFxHaXRMYWInID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvQ2kvR2l0TGFiLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXENpXFxKZW5raW5zJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL0plbmtpbnMucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE9uZHJhTVxcQ2lEZXRlY3RvclxcQ2lcXFRlYW1DaXR5JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL1RlYW1DaXR5LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXENpXFxUcmF2aXMnID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvQ2kvVHJhdmlzLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxPbmRyYU1cXENpRGV0ZWN0b3JcXENpXFxXZXJja2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0NpL1dlcmNrZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE9uZHJhTVxcQ2lEZXRlY3RvclxcRW52JyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL0Vudi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcT25kcmFNXFxDaURldGVjdG9yXFxFeGNlcHRpb25cXENpTm90RGV0ZWN0ZWRFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL29uZHJhbS9jaS1kZXRlY3Rvci9zcmMvRXhjZXB0aW9uL0NpTm90RGV0ZWN0ZWRFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXE9uZHJhTVxcQ2lEZXRlY3RvclxcVHJpbmFyeUxvZ2ljJyA9PiAkdmVuZG9yRGlyIC4gJy9vbmRyYW0vY2ktZGV0ZWN0b3Ivc3JjL1RyaW5hcnlMb2dpYy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUHNyXFxDb250YWluZXJcXENvbnRhaW5lckV4Y2VwdGlvbkludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcHNyL2NvbnRhaW5lci9zcmMvQ29udGFpbmVyRXhjZXB0aW9uSW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXENvbnRhaW5lclxcQ29udGFpbmVySW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9wc3IvY29udGFpbmVyL3NyYy9Db250YWluZXJJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcQ29udGFpbmVyXFxOb3RGb3VuZEV4Y2VwdGlvbkludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcHNyL2NvbnRhaW5lci9zcmMvTm90Rm91bmRFeGNlcHRpb25JbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcSHR0cFxcTWVzc2FnZVxcTWVzc2FnZUludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcHNyL2h0dHAtbWVzc2FnZS9zcmMvTWVzc2FnZUludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUHNyXFxIdHRwXFxNZXNzYWdlXFxSZXF1ZXN0SW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9wc3IvaHR0cC1tZXNzYWdlL3NyYy9SZXF1ZXN0SW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXEh0dHBcXE1lc3NhZ2VcXFJlc3BvbnNlSW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9wc3IvaHR0cC1tZXNzYWdlL3NyYy9SZXNwb25zZUludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUHNyXFxIdHRwXFxNZXNzYWdlXFxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9wc3IvaHR0cC1tZXNzYWdlL3NyYy9TZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXEh0dHBcXE1lc3NhZ2VcXFN0cmVhbUludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcHNyL2h0dHAtbWVzc2FnZS9zcmMvU3RyZWFtSW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXEh0dHBcXE1lc3NhZ2VcXFVwbG9hZGVkRmlsZUludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcHNyL2h0dHAtbWVzc2FnZS9zcmMvVXBsb2FkZWRGaWxlSW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXEh0dHBcXE1lc3NhZ2VcXFVyaUludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcHNyL2h0dHAtbWVzc2FnZS9zcmMvVXJpSW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXExvZ1xcQWJzdHJhY3RMb2dnZXInID0+ICR2ZW5kb3JEaXIgLiAnL3Bzci9sb2cvc3JjL0Fic3RyYWN0TG9nZ2VyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXExvZ1xcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9wc3IvbG9nL3NyYy9JbnZhbGlkQXJndW1lbnRFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcTG9nXFxMb2dMZXZlbCcgPT4gJHZlbmRvckRpciAuICcvcHNyL2xvZy9zcmMvTG9nTGV2ZWwucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcTG9nXFxMb2dnZXJBd2FyZUludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcHNyL2xvZy9zcmMvTG9nZ2VyQXdhcmVJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcTG9nXFxMb2dnZXJBd2FyZVRyYWl0JyA9PiAkdmVuZG9yRGlyIC4gJy9wc3IvbG9nL3NyYy9Mb2dnZXJBd2FyZVRyYWl0LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxQc3JcXExvZ1xcTG9nZ2VySW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9wc3IvbG9nL3NyYy9Mb2dnZXJJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcTG9nXFxMb2dnZXJUcmFpdCcgPT4gJHZlbmRvckRpciAuICcvcHNyL2xvZy9zcmMvTG9nZ2VyVHJhaXQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFBzclxcTG9nXFxOdWxsTG9nZ2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9wc3IvbG9nL3NyYy9OdWxsTG9nZ2VyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcQ2FjaGVcXEFycmF5Q2FjaGUnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2NhY2hlL3NyYy9BcnJheUNhY2hlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcQ2FjaGVcXENhY2hlSW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9jYWNoZS9zcmMvQ2FjaGVJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxDaGlsZFByb2Nlc3NcXFByb2Nlc3MnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2NoaWxkLXByb2Nlc3Mvc3JjL1Byb2Nlc3MucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXEJhZFNlcnZlckV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZG5zL3NyYy9CYWRTZXJ2ZXJFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXENvbmZpZ1xcQ29uZmlnJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9kbnMvc3JjL0NvbmZpZy9Db25maWcucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXENvbmZpZ1xcSG9zdHNGaWxlJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9kbnMvc3JjL0NvbmZpZy9Ib3N0c0ZpbGUucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXE1vZGVsXFxNZXNzYWdlJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9kbnMvc3JjL01vZGVsL01lc3NhZ2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXE1vZGVsXFxSZWNvcmQnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2Rucy9zcmMvTW9kZWwvUmVjb3JkLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxQcm90b2NvbFxcQmluYXJ5RHVtcGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9kbnMvc3JjL1Byb3RvY29sL0JpbmFyeUR1bXBlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUHJvdG9jb2xcXFBhcnNlcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZG5zL3NyYy9Qcm90b2NvbC9QYXJzZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXFF1ZXJ5XFxDYWNoaW5nRXhlY3V0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2Rucy9zcmMvUXVlcnkvQ2FjaGluZ0V4ZWN1dG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxRdWVyeVxcQ2FuY2VsbGF0aW9uRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9kbnMvc3JjL1F1ZXJ5L0NhbmNlbGxhdGlvbkV4Y2VwdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUXVlcnlcXENvb3BFeGVjdXRvcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZG5zL3NyYy9RdWVyeS9Db29wRXhlY3V0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXFF1ZXJ5XFxFeGVjdXRvckludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZG5zL3NyYy9RdWVyeS9FeGVjdXRvckludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUXVlcnlcXEZhbGxiYWNrRXhlY3V0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2Rucy9zcmMvUXVlcnkvRmFsbGJhY2tFeGVjdXRvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUXVlcnlcXEhvc3RzRmlsZUV4ZWN1dG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9kbnMvc3JjL1F1ZXJ5L0hvc3RzRmlsZUV4ZWN1dG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxRdWVyeVxcUXVlcnknID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2Rucy9zcmMvUXVlcnkvUXVlcnkucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXFF1ZXJ5XFxSZXRyeUV4ZWN1dG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9kbnMvc3JjL1F1ZXJ5L1JldHJ5RXhlY3V0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxEbnNcXFF1ZXJ5XFxTZWxlY3RpdmVUcmFuc3BvcnRFeGVjdXRvcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZG5zL3NyYy9RdWVyeS9TZWxlY3RpdmVUcmFuc3BvcnRFeGVjdXRvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUXVlcnlcXFRjcFRyYW5zcG9ydEV4ZWN1dG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9kbnMvc3JjL1F1ZXJ5L1RjcFRyYW5zcG9ydEV4ZWN1dG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxRdWVyeVxcVGltZW91dEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZG5zL3NyYy9RdWVyeS9UaW1lb3V0RXhjZXB0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxRdWVyeVxcVGltZW91dEV4ZWN1dG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9kbnMvc3JjL1F1ZXJ5L1RpbWVvdXRFeGVjdXRvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUXVlcnlcXFVkcFRyYW5zcG9ydEV4ZWN1dG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9kbnMvc3JjL1F1ZXJ5L1VkcFRyYW5zcG9ydEV4ZWN1dG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxSZWNvcmROb3RGb3VuZEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZG5zL3NyYy9SZWNvcmROb3RGb3VuZEV4Y2VwdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUmVzb2x2ZXJcXEZhY3RvcnknID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2Rucy9zcmMvUmVzb2x2ZXIvRmFjdG9yeS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXERuc1xcUmVzb2x2ZXJcXFJlc29sdmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9kbnMvc3JjL1Jlc29sdmVyL1Jlc29sdmVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRG5zXFxSZXNvbHZlclxcUmVzb2x2ZXJJbnRlcmZhY2UnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2Rucy9zcmMvUmVzb2x2ZXIvUmVzb2x2ZXJJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxFdmVudExvb3BcXEV4dEV2TG9vcCcgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvRXh0RXZMb29wLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRXZlbnRMb29wXFxFeHRFdmVudExvb3AnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2V2ZW50LWxvb3Avc3JjL0V4dEV2ZW50TG9vcC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEV2ZW50TG9vcFxcRXh0TGliZXZMb29wJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9ldmVudC1sb29wL3NyYy9FeHRMaWJldkxvb3AucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxFdmVudExvb3BcXEV4dExpYmV2ZW50TG9vcCcgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvRXh0TGliZXZlbnRMb29wLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRXZlbnRMb29wXFxFeHRVdkxvb3AnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2V2ZW50LWxvb3Avc3JjL0V4dFV2TG9vcC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEV2ZW50TG9vcFxcRmFjdG9yeScgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvRmFjdG9yeS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEV2ZW50TG9vcFxcTG9vcCcgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvTG9vcC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEV2ZW50TG9vcFxcTG9vcEludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvTG9vcEludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEV2ZW50TG9vcFxcU2lnbmFsc0hhbmRsZXInID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2V2ZW50LWxvb3Avc3JjL1NpZ25hbHNIYW5kbGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRXZlbnRMb29wXFxTdHJlYW1TZWxlY3RMb29wJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9ldmVudC1sb29wL3NyYy9TdHJlYW1TZWxlY3RMb29wLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRXZlbnRMb29wXFxUaWNrXFxGdXR1cmVUaWNrUXVldWUnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2V2ZW50LWxvb3Avc3JjL1RpY2svRnV0dXJlVGlja1F1ZXVlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcRXZlbnRMb29wXFxUaW1lckludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvVGltZXJJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxFdmVudExvb3BcXFRpbWVyXFxUaW1lcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvZXZlbnQtbG9vcC9zcmMvVGltZXIvVGltZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxFdmVudExvb3BcXFRpbWVyXFxUaW1lcnMnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2V2ZW50LWxvb3Avc3JjL1RpbWVyL1RpbWVycy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXEJyb3dzZXInID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL0Jyb3dzZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxDbGllbnRcXENsaWVudCcgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvaHR0cC9zcmMvQ2xpZW50L0NsaWVudC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXEh0dHBTZXJ2ZXInID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL0h0dHBTZXJ2ZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcQWJzdHJhY3RNZXNzYWdlJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9BYnN0cmFjdE1lc3NhZ2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcQWJzdHJhY3RSZXF1ZXN0JyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9BYnN0cmFjdFJlcXVlc3QucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcQnVmZmVyZWRCb2R5JyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9CdWZmZXJlZEJvZHkucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcQ2h1bmtlZERlY29kZXInID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL0lvL0NodW5rZWREZWNvZGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXENodW5rZWRFbmNvZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9DaHVua2VkRW5jb2Rlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxDbGllbnRDb25uZWN0aW9uTWFuYWdlcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvaHR0cC9zcmMvSW8vQ2xpZW50Q29ubmVjdGlvbk1hbmFnZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcQ2xpZW50UmVxdWVzdFN0YXRlJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9DbGllbnRSZXF1ZXN0U3RhdGUucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcQ2xpZW50UmVxdWVzdFN0cmVhbScgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvaHR0cC9zcmMvSW8vQ2xpZW50UmVxdWVzdFN0cmVhbS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxDbG9jaycgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvaHR0cC9zcmMvSW8vQ2xvY2sucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcQ2xvc2VQcm90ZWN0aW9uU3RyZWFtJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9DbG9zZVByb3RlY3Rpb25TdHJlYW0ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcRW1wdHlCb2R5U3RyZWFtJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9FbXB0eUJvZHlTdHJlYW0ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcSHR0cEJvZHlTdHJlYW0nID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL0lvL0h0dHBCb2R5U3RyZWFtLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXEluaVV0aWwnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL0lvL0luaVV0aWwucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxJb1xcTGVuZ3RoTGltaXRlZFN0cmVhbScgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvaHR0cC9zcmMvSW8vTGVuZ3RoTGltaXRlZFN0cmVhbS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxNaWRkbGV3YXJlUnVubmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9NaWRkbGV3YXJlUnVubmVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXE11bHRpcGFydFBhcnNlcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvaHR0cC9zcmMvSW8vTXVsdGlwYXJ0UGFyc2VyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXFBhdXNlQnVmZmVyU3RyZWFtJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9QYXVzZUJ1ZmZlclN0cmVhbS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxSZWFkYWJsZUJvZHlTdHJlYW0nID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL0lvL1JlYWRhYmxlQm9keVN0cmVhbS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxSZXF1ZXN0SGVhZGVyUGFyc2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9SZXF1ZXN0SGVhZGVyUGFyc2VyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXFNlbmRlcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvaHR0cC9zcmMvSW8vU2VuZGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXFN0cmVhbWluZ1NlcnZlcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvaHR0cC9zcmMvSW8vU3RyZWFtaW5nU2VydmVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcSW9cXFRyYW5zYWN0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9Jby9UcmFuc2FjdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXElvXFxVcGxvYWRlZEZpbGUnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL0lvL1VwbG9hZGVkRmlsZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXE1lc3NhZ2VcXFJlcXVlc3QnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL01lc3NhZ2UvUmVxdWVzdC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXE1lc3NhZ2VcXFJlc3BvbnNlJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9NZXNzYWdlL1Jlc3BvbnNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcTWVzc2FnZVxcUmVzcG9uc2VFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL01lc3NhZ2UvUmVzcG9uc2VFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxNZXNzYWdlXFxTZXJ2ZXJSZXF1ZXN0JyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9NZXNzYWdlL1NlcnZlclJlcXVlc3QucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxNZXNzYWdlXFxVcmknID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL01lc3NhZ2UvVXJpLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcTWlkZGxld2FyZVxcTGltaXRDb25jdXJyZW50UmVxdWVzdHNNaWRkbGV3YXJlJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9odHRwL3NyYy9NaWRkbGV3YXJlL0xpbWl0Q29uY3VycmVudFJlcXVlc3RzTWlkZGxld2FyZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXEh0dHBcXE1pZGRsZXdhcmVcXFJlcXVlc3RCb2R5QnVmZmVyTWlkZGxld2FyZScgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvaHR0cC9zcmMvTWlkZGxld2FyZS9SZXF1ZXN0Qm9keUJ1ZmZlck1pZGRsZXdhcmUucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxNaWRkbGV3YXJlXFxSZXF1ZXN0Qm9keVBhcnNlck1pZGRsZXdhcmUnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL01pZGRsZXdhcmUvUmVxdWVzdEJvZHlQYXJzZXJNaWRkbGV3YXJlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcSHR0cFxcTWlkZGxld2FyZVxcU3RyZWFtaW5nUmVxdWVzdE1pZGRsZXdhcmUnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL01pZGRsZXdhcmUvU3RyZWFtaW5nUmVxdWVzdE1pZGRsZXdhcmUucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxIdHRwXFxTZXJ2ZXInID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L2h0dHAvc3JjL1NlcnZlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFByb21pc2VcXERlZmVycmVkJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9wcm9taXNlL3NyYy9EZWZlcnJlZC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFByb21pc2VcXEV4Y2VwdGlvblxcQ29tcG9zaXRlRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9wcm9taXNlL3NyYy9FeGNlcHRpb24vQ29tcG9zaXRlRXhjZXB0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcUHJvbWlzZVxcRXhjZXB0aW9uXFxMZW5ndGhFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L3Byb21pc2Uvc3JjL0V4Y2VwdGlvbi9MZW5ndGhFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxQcm9taXNlXFxJbnRlcm5hbFxcQ2FuY2VsbGF0aW9uUXVldWUnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L3Byb21pc2Uvc3JjL0ludGVybmFsL0NhbmNlbGxhdGlvblF1ZXVlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcUHJvbWlzZVxcSW50ZXJuYWxcXEZ1bGZpbGxlZFByb21pc2UnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L3Byb21pc2Uvc3JjL0ludGVybmFsL0Z1bGZpbGxlZFByb21pc2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxQcm9taXNlXFxJbnRlcm5hbFxcUmVqZWN0ZWRQcm9taXNlJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9wcm9taXNlL3NyYy9JbnRlcm5hbC9SZWplY3RlZFByb21pc2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxQcm9taXNlXFxQcm9taXNlJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9wcm9taXNlL3NyYy9Qcm9taXNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcUHJvbWlzZVxcUHJvbWlzZUludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvcHJvbWlzZS9zcmMvUHJvbWlzZUludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcQ29ubmVjdGlvbicgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc29ja2V0L3NyYy9Db25uZWN0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU29ja2V0XFxDb25uZWN0aW9uSW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9zb2NrZXQvc3JjL0Nvbm5lY3Rpb25JbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXENvbm5lY3RvcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc29ja2V0L3NyYy9Db25uZWN0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXENvbm5lY3RvckludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc29ja2V0L3NyYy9Db25uZWN0b3JJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXERuc0Nvbm5lY3RvcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc29ja2V0L3NyYy9EbnNDb25uZWN0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXEZkU2VydmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9zb2NrZXQvc3JjL0ZkU2VydmVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU29ja2V0XFxGaXhlZFVyaUNvbm5lY3RvcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc29ja2V0L3NyYy9GaXhlZFVyaUNvbm5lY3Rvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcSGFwcHlFeWVCYWxsc0Nvbm5lY3Rpb25CdWlsZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9zb2NrZXQvc3JjL0hhcHB5RXllQmFsbHNDb25uZWN0aW9uQnVpbGRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcSGFwcHlFeWVCYWxsc0Nvbm5lY3RvcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc29ja2V0L3NyYy9IYXBweUV5ZUJhbGxzQ29ubmVjdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU29ja2V0XFxMaW1pdGluZ1NlcnZlcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc29ja2V0L3NyYy9MaW1pdGluZ1NlcnZlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcU2VjdXJlQ29ubmVjdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9zb2NrZXQvc3JjL1NlY3VyZUNvbm5lY3Rvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcU2VjdXJlU2VydmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9zb2NrZXQvc3JjL1NlY3VyZVNlcnZlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcU2VydmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9zb2NrZXQvc3JjL1NlcnZlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcU2VydmVySW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9zb2NrZXQvc3JjL1NlcnZlckludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcU29ja2V0U2VydmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9zb2NrZXQvc3JjL1NvY2tldFNlcnZlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcU3RyZWFtRW5jcnlwdGlvbicgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc29ja2V0L3NyYy9TdHJlYW1FbmNyeXB0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU29ja2V0XFxUY3BDb25uZWN0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L3NvY2tldC9zcmMvVGNwQ29ubmVjdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU29ja2V0XFxUY3BTZXJ2ZXInID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L3NvY2tldC9zcmMvVGNwU2VydmVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU29ja2V0XFxUaW1lb3V0Q29ubmVjdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9zb2NrZXQvc3JjL1RpbWVvdXRDb25uZWN0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTb2NrZXRcXFVuaXhDb25uZWN0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L3NvY2tldC9zcmMvVW5peENvbm5lY3Rvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFNvY2tldFxcVW5peFNlcnZlcicgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc29ja2V0L3NyYy9Vbml4U2VydmVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU3RyZWFtXFxDb21wb3NpdGVTdHJlYW0nID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L3N0cmVhbS9zcmMvQ29tcG9zaXRlU3RyZWFtLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU3RyZWFtXFxEdXBsZXhSZXNvdXJjZVN0cmVhbScgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc3RyZWFtL3NyYy9EdXBsZXhSZXNvdXJjZVN0cmVhbS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFN0cmVhbVxcRHVwbGV4U3RyZWFtSW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9zdHJlYW0vc3JjL0R1cGxleFN0cmVhbUludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFN0cmVhbVxcUmVhZGFibGVSZXNvdXJjZVN0cmVhbScgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc3RyZWFtL3NyYy9SZWFkYWJsZVJlc291cmNlU3RyZWFtLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU3RyZWFtXFxSZWFkYWJsZVN0cmVhbUludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc3RyZWFtL3NyYy9SZWFkYWJsZVN0cmVhbUludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFN0cmVhbVxcVGhyb3VnaFN0cmVhbScgPT4gJHZlbmRvckRpciAuICcvcmVhY3Qvc3RyZWFtL3NyYy9UaHJvdWdoU3RyZWFtLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxSZWFjdFxcU3RyZWFtXFxVdGlsJyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9zdHJlYW0vc3JjL1V0aWwucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFJlYWN0XFxTdHJlYW1cXFdyaXRhYmxlUmVzb3VyY2VTdHJlYW0nID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L3N0cmVhbS9zcmMvV3JpdGFibGVSZXNvdXJjZVN0cmVhbS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcUmVhY3RcXFN0cmVhbVxcV3JpdGFibGVTdHJlYW1JbnRlcmZhY2UnID0+ICR2ZW5kb3JEaXIgLiAnL3JlYWN0L3N0cmVhbS9zcmMvV3JpdGFibGVTdHJlYW1JbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQXBwbGljYXRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9BcHBsaWNhdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxBdHRyaWJ1dGVcXEFzQ29tbWFuZCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0F0dHJpYnV0ZS9Bc0NvbW1hbmQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ0lcXEdpdGh1YkFjdGlvblJlcG9ydGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvQ0kvR2l0aHViQWN0aW9uUmVwb3J0ZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29sb3InID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9Db2xvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxDb21tYW5kTG9hZGVyXFxDb21tYW5kTG9hZGVySW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvQ29tbWFuZExvYWRlci9Db21tYW5kTG9hZGVySW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbW1hbmRMb2FkZXJcXENvbnRhaW5lckNvbW1hbmRMb2FkZXInID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9Db21tYW5kTG9hZGVyL0NvbnRhaW5lckNvbW1hbmRMb2FkZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29tbWFuZExvYWRlclxcRmFjdG9yeUNvbW1hbmRMb2FkZXInID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9Db21tYW5kTG9hZGVyL0ZhY3RvcnlDb21tYW5kTG9hZGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbW1hbmRcXENvbW1hbmQnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9Db21tYW5kL0NvbW1hbmQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29tbWFuZFxcQ29tcGxldGVDb21tYW5kJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvQ29tbWFuZC9Db21wbGV0ZUNvbW1hbmQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29tbWFuZFxcRHVtcENvbXBsZXRpb25Db21tYW5kJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvQ29tbWFuZC9EdW1wQ29tcGxldGlvbkNvbW1hbmQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29tbWFuZFxcSGVscENvbW1hbmQnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9Db21tYW5kL0hlbHBDb21tYW5kLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbW1hbmRcXExhenlDb21tYW5kJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvQ29tbWFuZC9MYXp5Q29tbWFuZC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxDb21tYW5kXFxMaXN0Q29tbWFuZCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0NvbW1hbmQvTGlzdENvbW1hbmQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29tbWFuZFxcTG9ja2FibGVUcmFpdCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0NvbW1hbmQvTG9ja2FibGVUcmFpdC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxDb21tYW5kXFxTaWduYWxhYmxlQ29tbWFuZEludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0NvbW1hbmQvU2lnbmFsYWJsZUNvbW1hbmRJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29tcGxldGlvblxcQ29tcGxldGlvbklucHV0JyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvQ29tcGxldGlvbi9Db21wbGV0aW9uSW5wdXQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29tcGxldGlvblxcQ29tcGxldGlvblN1Z2dlc3Rpb25zJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvQ29tcGxldGlvbi9Db21wbGV0aW9uU3VnZ2VzdGlvbnMucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29tcGxldGlvblxcT3V0cHV0XFxCYXNoQ29tcGxldGlvbk91dHB1dCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0NvbXBsZXRpb24vT3V0cHV0L0Jhc2hDb21wbGV0aW9uT3V0cHV0LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXENvbXBsZXRpb25cXE91dHB1dFxcQ29tcGxldGlvbk91dHB1dEludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0NvbXBsZXRpb24vT3V0cHV0L0NvbXBsZXRpb25PdXRwdXRJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcQ29tcGxldGlvblxcU3VnZ2VzdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0NvbXBsZXRpb24vU3VnZ2VzdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxDb25zb2xlRXZlbnRzJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvQ29uc29sZUV2ZW50cy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxDdXJzb3InID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9DdXJzb3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRGVwZW5kZW5jeUluamVjdGlvblxcQWRkQ29uc29sZUNvbW1hbmRQYXNzJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvRGVwZW5kZW5jeUluamVjdGlvbi9BZGRDb25zb2xlQ29tbWFuZFBhc3MucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRGVzY3JpcHRvclxcQXBwbGljYXRpb25EZXNjcmlwdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0Rlc2NyaXB0b3IvQXBwbGljYXRpb25EZXNjcmlwdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxEZXNjcmlwdG9yXFxEZXNjcmlwdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvRGVzY3JpcHRvci9EZXNjcmlwdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXERlc2NyaXB0b3JcXERlc2NyaXB0b3JJbnRlcmZhY2UnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9EZXNjcmlwdG9yL0Rlc2NyaXB0b3JJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRGVzY3JpcHRvclxcSnNvbkRlc2NyaXB0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9EZXNjcmlwdG9yL0pzb25EZXNjcmlwdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXERlc2NyaXB0b3JcXE1hcmtkb3duRGVzY3JpcHRvcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0Rlc2NyaXB0b3IvTWFya2Rvd25EZXNjcmlwdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXERlc2NyaXB0b3JcXFRleHREZXNjcmlwdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvRGVzY3JpcHRvci9UZXh0RGVzY3JpcHRvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxEZXNjcmlwdG9yXFxYbWxEZXNjcmlwdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvRGVzY3JpcHRvci9YbWxEZXNjcmlwdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEV2ZW50TGlzdGVuZXJcXEVycm9yTGlzdGVuZXInID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9FdmVudExpc3RlbmVyL0Vycm9yTGlzdGVuZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRXZlbnRcXENvbnNvbGVDb21tYW5kRXZlbnQnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9FdmVudC9Db25zb2xlQ29tbWFuZEV2ZW50LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEV2ZW50XFxDb25zb2xlRXJyb3JFdmVudCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0V2ZW50L0NvbnNvbGVFcnJvckV2ZW50LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEV2ZW50XFxDb25zb2xlRXZlbnQnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9FdmVudC9Db25zb2xlRXZlbnQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRXZlbnRcXENvbnNvbGVTaWduYWxFdmVudCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0V2ZW50L0NvbnNvbGVTaWduYWxFdmVudC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxFdmVudFxcQ29uc29sZVRlcm1pbmF0ZUV2ZW50JyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvRXZlbnQvQ29uc29sZVRlcm1pbmF0ZUV2ZW50LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEV4Y2VwdGlvblxcQ29tbWFuZE5vdEZvdW5kRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvRXhjZXB0aW9uL0NvbW1hbmROb3RGb3VuZEV4Y2VwdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxFeGNlcHRpb25cXEV4Y2VwdGlvbkludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0V4Y2VwdGlvbi9FeGNlcHRpb25JbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRXhjZXB0aW9uXFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9FeGNlcHRpb24vSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEV4Y2VwdGlvblxcSW52YWxpZE9wdGlvbkV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0V4Y2VwdGlvbi9JbnZhbGlkT3B0aW9uRXhjZXB0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEV4Y2VwdGlvblxcTG9naWNFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9FeGNlcHRpb24vTG9naWNFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRXhjZXB0aW9uXFxNaXNzaW5nSW5wdXRFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9FeGNlcHRpb24vTWlzc2luZ0lucHV0RXhjZXB0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEV4Y2VwdGlvblxcTmFtZXNwYWNlTm90Rm91bmRFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9FeGNlcHRpb24vTmFtZXNwYWNlTm90Rm91bmRFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRXhjZXB0aW9uXFxSdW50aW1lRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvRXhjZXB0aW9uL1J1bnRpbWVFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRm9ybWF0dGVyXFxOdWxsT3V0cHV0Rm9ybWF0dGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvRm9ybWF0dGVyL051bGxPdXRwdXRGb3JtYXR0ZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRm9ybWF0dGVyXFxOdWxsT3V0cHV0Rm9ybWF0dGVyU3R5bGUnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9Gb3JtYXR0ZXIvTnVsbE91dHB1dEZvcm1hdHRlclN0eWxlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEZvcm1hdHRlclxcT3V0cHV0Rm9ybWF0dGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvRm9ybWF0dGVyL091dHB1dEZvcm1hdHRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxGb3JtYXR0ZXJcXE91dHB1dEZvcm1hdHRlckludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0Zvcm1hdHRlci9PdXRwdXRGb3JtYXR0ZXJJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcRm9ybWF0dGVyXFxPdXRwdXRGb3JtYXR0ZXJTdHlsZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0Zvcm1hdHRlci9PdXRwdXRGb3JtYXR0ZXJTdHlsZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxGb3JtYXR0ZXJcXE91dHB1dEZvcm1hdHRlclN0eWxlSW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvRm9ybWF0dGVyL091dHB1dEZvcm1hdHRlclN0eWxlSW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEZvcm1hdHRlclxcT3V0cHV0Rm9ybWF0dGVyU3R5bGVTdGFjaycgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0Zvcm1hdHRlci9PdXRwdXRGb3JtYXR0ZXJTdHlsZVN0YWNrLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEZvcm1hdHRlclxcV3JhcHBhYmxlT3V0cHV0Rm9ybWF0dGVySW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvRm9ybWF0dGVyL1dyYXBwYWJsZU91dHB1dEZvcm1hdHRlckludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxIZWxwZXJcXERlYnVnRm9ybWF0dGVySGVscGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL0RlYnVnRm9ybWF0dGVySGVscGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcRGVzY3JpcHRvckhlbHBlcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0hlbHBlci9EZXNjcmlwdG9ySGVscGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcRHVtcGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL0R1bXBlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxIZWxwZXJcXEZvcm1hdHRlckhlbHBlcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0hlbHBlci9Gb3JtYXR0ZXJIZWxwZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSGVscGVyXFxIZWxwZXInID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvSGVscGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcSGVscGVySW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL0hlbHBlckludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxIZWxwZXJcXEhlbHBlclNldCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0hlbHBlci9IZWxwZXJTZXQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSGVscGVyXFxJbnB1dEF3YXJlSGVscGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL0lucHV0QXdhcmVIZWxwZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSGVscGVyXFxQcm9jZXNzSGVscGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL1Byb2Nlc3NIZWxwZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSGVscGVyXFxQcm9ncmVzc0JhcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0hlbHBlci9Qcm9ncmVzc0Jhci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxIZWxwZXJcXFByb2dyZXNzSW5kaWNhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL1Byb2dyZXNzSW5kaWNhdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcUXVlc3Rpb25IZWxwZXInID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvUXVlc3Rpb25IZWxwZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSGVscGVyXFxTeW1mb255UXVlc3Rpb25IZWxwZXInID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvU3ltZm9ueVF1ZXN0aW9uSGVscGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcVGFibGUnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGUucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSGVscGVyXFxUYWJsZUNlbGwnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGVDZWxsLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcVGFibGVDZWxsU3R5bGUnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGVDZWxsU3R5bGUucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSGVscGVyXFxUYWJsZVJvd3MnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGVSb3dzLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXEhlbHBlclxcVGFibGVTZXBhcmF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9IZWxwZXIvVGFibGVTZXBhcmF0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSGVscGVyXFxUYWJsZVN0eWxlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvSGVscGVyL1RhYmxlU3R5bGUucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSW5wdXRcXEFyZ3ZJbnB1dCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0lucHV0L0FyZ3ZJbnB1dC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxJbnB1dFxcQXJyYXlJbnB1dCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0lucHV0L0FycmF5SW5wdXQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSW5wdXRcXElucHV0JyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvSW5wdXQvSW5wdXQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSW5wdXRcXElucHV0QXJndW1lbnQnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9JbnB1dC9JbnB1dEFyZ3VtZW50LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXElucHV0XFxJbnB1dEF3YXJlSW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvSW5wdXQvSW5wdXRBd2FyZUludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxJbnB1dFxcSW5wdXREZWZpbml0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvSW5wdXQvSW5wdXREZWZpbml0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXElucHV0XFxJbnB1dEludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0lucHV0L0lucHV0SW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXElucHV0XFxJbnB1dE9wdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL0lucHV0L0lucHV0T3B0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXElucHV0XFxTdHJlYW1hYmxlSW5wdXRJbnRlcmZhY2UnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9JbnB1dC9TdHJlYW1hYmxlSW5wdXRJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcSW5wdXRcXFN0cmluZ0lucHV0JyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvSW5wdXQvU3RyaW5nSW5wdXQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcTG9nZ2VyXFxDb25zb2xlTG9nZ2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvTG9nZ2VyL0NvbnNvbGVMb2dnZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcT3V0cHV0XFxCdWZmZXJlZE91dHB1dCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL091dHB1dC9CdWZmZXJlZE91dHB1dC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxPdXRwdXRcXENvbnNvbGVPdXRwdXQnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9PdXRwdXQvQ29uc29sZU91dHB1dC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxPdXRwdXRcXENvbnNvbGVPdXRwdXRJbnRlcmZhY2UnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9PdXRwdXQvQ29uc29sZU91dHB1dEludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxPdXRwdXRcXENvbnNvbGVTZWN0aW9uT3V0cHV0JyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvT3V0cHV0L0NvbnNvbGVTZWN0aW9uT3V0cHV0LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXE91dHB1dFxcTnVsbE91dHB1dCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL091dHB1dC9OdWxsT3V0cHV0LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXE91dHB1dFxcT3V0cHV0JyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvT3V0cHV0L091dHB1dC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxPdXRwdXRcXE91dHB1dEludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL091dHB1dC9PdXRwdXRJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcT3V0cHV0XFxTdHJlYW1PdXRwdXQnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9PdXRwdXQvU3RyZWFtT3V0cHV0LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXE91dHB1dFxcVHJpbW1lZEJ1ZmZlck91dHB1dCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL091dHB1dC9UcmltbWVkQnVmZmVyT3V0cHV0LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXFF1ZXN0aW9uXFxDaG9pY2VRdWVzdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL1F1ZXN0aW9uL0Nob2ljZVF1ZXN0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXFF1ZXN0aW9uXFxDb25maXJtYXRpb25RdWVzdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL1F1ZXN0aW9uL0NvbmZpcm1hdGlvblF1ZXN0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXFF1ZXN0aW9uXFxRdWVzdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL1F1ZXN0aW9uL1F1ZXN0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXFNpZ25hbFJlZ2lzdHJ5XFxTaWduYWxSZWdpc3RyeScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL1NpZ25hbFJlZ2lzdHJ5L1NpZ25hbFJlZ2lzdHJ5LnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXFNpbmdsZUNvbW1hbmRBcHBsaWNhdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL1NpbmdsZUNvbW1hbmRBcHBsaWNhdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxTdHlsZVxcT3V0cHV0U3R5bGUnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9TdHlsZS9PdXRwdXRTdHlsZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxTdHlsZVxcU3R5bGVJbnRlcmZhY2UnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZS9TdHlsZS9TdHlsZUludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxTdHlsZVxcU3ltZm9ueVN0eWxlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvU3R5bGUvU3ltZm9ueVN0eWxlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXFRlcm1pbmFsJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvVGVybWluYWwucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcVGVzdGVyXFxBcHBsaWNhdGlvblRlc3RlcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL1Rlc3Rlci9BcHBsaWNhdGlvblRlc3Rlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFxUZXN0ZXJcXENvbW1hbmRDb21wbGV0aW9uVGVzdGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2NvbnNvbGUvVGVzdGVyL0NvbW1hbmRDb21wbGV0aW9uVGVzdGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXFRlc3RlclxcQ29tbWFuZFRlc3RlcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL1Rlc3Rlci9Db21tYW5kVGVzdGVyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXENvbnNvbGVcXFRlc3RlclxcQ29uc3RyYWludFxcQ29tbWFuZElzU3VjY2Vzc2Z1bCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL1Rlc3Rlci9Db25zdHJhaW50L0NvbW1hbmRJc1N1Y2Nlc3NmdWwucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcQ29uc29sZVxcVGVzdGVyXFxUZXN0ZXJUcmFpdCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9jb25zb2xlL1Rlc3Rlci9UZXN0ZXJUcmFpdC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXENvbXBhcmF0b3JcXENvbXBhcmF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvZmluZGVyL0NvbXBhcmF0b3IvQ29tcGFyYXRvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXENvbXBhcmF0b3JcXERhdGVDb21wYXJhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2ZpbmRlci9Db21wYXJhdG9yL0RhdGVDb21wYXJhdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcQ29tcGFyYXRvclxcTnVtYmVyQ29tcGFyYXRvcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9maW5kZXIvQ29tcGFyYXRvci9OdW1iZXJDb21wYXJhdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcRXhjZXB0aW9uXFxBY2Nlc3NEZW5pZWRFeGNlcHRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvZmluZGVyL0V4Y2VwdGlvbi9BY2Nlc3NEZW5pZWRFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxFeGNlcHRpb25cXERpcmVjdG9yeU5vdEZvdW5kRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2ZpbmRlci9FeGNlcHRpb24vRGlyZWN0b3J5Tm90Rm91bmRFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxGaW5kZXInID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvZmluZGVyL0ZpbmRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEdpdGlnbm9yZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9maW5kZXIvR2l0aWdub3JlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcR2xvYicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9maW5kZXIvR2xvYi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEl0ZXJhdG9yXFxDdXN0b21GaWx0ZXJJdGVyYXRvcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvQ3VzdG9tRmlsdGVySXRlcmF0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxJdGVyYXRvclxcRGF0ZVJhbmdlRmlsdGVySXRlcmF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvZmluZGVyL0l0ZXJhdG9yL0RhdGVSYW5nZUZpbHRlckl0ZXJhdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcSXRlcmF0b3JcXERlcHRoUmFuZ2VGaWx0ZXJJdGVyYXRvcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvRGVwdGhSYW5nZUZpbHRlckl0ZXJhdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcSXRlcmF0b3JcXEV4Y2x1ZGVEaXJlY3RvcnlGaWx0ZXJJdGVyYXRvcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvRXhjbHVkZURpcmVjdG9yeUZpbHRlckl0ZXJhdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcSXRlcmF0b3JcXEZpbGVUeXBlRmlsdGVySXRlcmF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvZmluZGVyL0l0ZXJhdG9yL0ZpbGVUeXBlRmlsdGVySXRlcmF0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxJdGVyYXRvclxcRmlsZWNvbnRlbnRGaWx0ZXJJdGVyYXRvcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvRmlsZWNvbnRlbnRGaWx0ZXJJdGVyYXRvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEl0ZXJhdG9yXFxGaWxlbmFtZUZpbHRlckl0ZXJhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2ZpbmRlci9JdGVyYXRvci9GaWxlbmFtZUZpbHRlckl0ZXJhdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcSXRlcmF0b3JcXExhenlJdGVyYXRvcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvTGF6eUl0ZXJhdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcSXRlcmF0b3JcXE11bHRpcGxlUGNyZUZpbHRlckl0ZXJhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2ZpbmRlci9JdGVyYXRvci9NdWx0aXBsZVBjcmVGaWx0ZXJJdGVyYXRvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEl0ZXJhdG9yXFxQYXRoRmlsdGVySXRlcmF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvZmluZGVyL0l0ZXJhdG9yL1BhdGhGaWx0ZXJJdGVyYXRvci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxGaW5kZXJcXEl0ZXJhdG9yXFxSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9maW5kZXIvSXRlcmF0b3IvUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxJdGVyYXRvclxcU2l6ZVJhbmdlRmlsdGVySXRlcmF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvZmluZGVyL0l0ZXJhdG9yL1NpemVSYW5nZUZpbHRlckl0ZXJhdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcSXRlcmF0b3JcXFNvcnRhYmxlSXRlcmF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvZmluZGVyL0l0ZXJhdG9yL1NvcnRhYmxlSXRlcmF0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxJdGVyYXRvclxcVmNzSWdub3JlZEZpbHRlckl0ZXJhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L2ZpbmRlci9JdGVyYXRvci9WY3NJZ25vcmVkRmlsdGVySXRlcmF0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcRmluZGVyXFxTcGxGaWxlSW5mbycgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9maW5kZXIvU3BsRmlsZUluZm8ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcRXhjZXB0aW9uXFxFeGNlcHRpb25JbnRlcmZhY2UnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcHJvY2Vzcy9FeGNlcHRpb24vRXhjZXB0aW9uSW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXEV4Y2VwdGlvblxcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3Byb2Nlc3MvRXhjZXB0aW9uL0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxQcm9jZXNzXFxFeGNlcHRpb25cXExvZ2ljRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3Byb2Nlc3MvRXhjZXB0aW9uL0xvZ2ljRXhjZXB0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXEV4Y2VwdGlvblxcUHJvY2Vzc0ZhaWxlZEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wcm9jZXNzL0V4Y2VwdGlvbi9Qcm9jZXNzRmFpbGVkRXhjZXB0aW9uLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXEV4Y2VwdGlvblxcUHJvY2Vzc1NpZ25hbGVkRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3Byb2Nlc3MvRXhjZXB0aW9uL1Byb2Nlc3NTaWduYWxlZEV4Y2VwdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxQcm9jZXNzXFxFeGNlcHRpb25cXFByb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wcm9jZXNzL0V4Y2VwdGlvbi9Qcm9jZXNzVGltZWRPdXRFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcRXhjZXB0aW9uXFxSdW50aW1lRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3Byb2Nlc3MvRXhjZXB0aW9uL1J1bnRpbWVFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcRXhlY3V0YWJsZUZpbmRlcicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wcm9jZXNzL0V4ZWN1dGFibGVGaW5kZXIucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcSW5wdXRTdHJlYW0nID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcHJvY2Vzcy9JbnB1dFN0cmVhbS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxQcm9jZXNzXFxQaHBFeGVjdXRhYmxlRmluZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3Byb2Nlc3MvUGhwRXhlY3V0YWJsZUZpbmRlci5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxQcm9jZXNzXFxQaHBQcm9jZXNzJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3Byb2Nlc3MvUGhwUHJvY2Vzcy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxQcm9jZXNzXFxQaXBlc1xcQWJzdHJhY3RQaXBlcycgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wcm9jZXNzL1BpcGVzL0Fic3RyYWN0UGlwZXMucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcUGlwZXNcXFBpcGVzSW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3Byb2Nlc3MvUGlwZXMvUGlwZXNJbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcUHJvY2Vzc1xcUGlwZXNcXFVuaXhQaXBlcycgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wcm9jZXNzL1BpcGVzL1VuaXhQaXBlcy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxQcm9jZXNzXFxQaXBlc1xcV2luZG93c1BpcGVzJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3Byb2Nlc3MvUGlwZXMvV2luZG93c1BpcGVzLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXFByb2Nlc3MnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcHJvY2Vzcy9Qcm9jZXNzLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXFByb2Nlc3NVdGlscycgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wcm9jZXNzL1Byb2Nlc3NVdGlscy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxTdHJpbmdcXEFic3RyYWN0U3RyaW5nJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3N0cmluZy9BYnN0cmFjdFN0cmluZy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxTdHJpbmdcXEFic3RyYWN0VW5pY29kZVN0cmluZycgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9zdHJpbmcvQWJzdHJhY3RVbmljb2RlU3RyaW5nLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFN0cmluZ1xcQnl0ZVN0cmluZycgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9zdHJpbmcvQnl0ZVN0cmluZy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxTdHJpbmdcXENvZGVQb2ludFN0cmluZycgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9zdHJpbmcvQ29kZVBvaW50U3RyaW5nLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFN0cmluZ1xcRXhjZXB0aW9uXFxFeGNlcHRpb25JbnRlcmZhY2UnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvc3RyaW5nL0V4Y2VwdGlvbi9FeGNlcHRpb25JbnRlcmZhY2UucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcU3RyaW5nXFxFeGNlcHRpb25cXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9zdHJpbmcvRXhjZXB0aW9uL0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbi5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxTdHJpbmdcXEV4Y2VwdGlvblxcUnVudGltZUV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9zdHJpbmcvRXhjZXB0aW9uL1J1bnRpbWVFeGNlcHRpb24ucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcU3RyaW5nXFxJbmZsZWN0b3JcXEVuZ2xpc2hJbmZsZWN0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvc3RyaW5nL0luZmxlY3Rvci9FbmdsaXNoSW5mbGVjdG9yLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFN0cmluZ1xcSW5mbGVjdG9yXFxGcmVuY2hJbmZsZWN0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvc3RyaW5nL0luZmxlY3Rvci9GcmVuY2hJbmZsZWN0b3IucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcU3RyaW5nXFxJbmZsZWN0b3JcXEluZmxlY3RvckludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9zdHJpbmcvSW5mbGVjdG9yL0luZmxlY3RvckludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29tcG9uZW50XFxTdHJpbmdcXExhenlTdHJpbmcnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvc3RyaW5nL0xhenlTdHJpbmcucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbXBvbmVudFxcU3RyaW5nXFxTbHVnZ2VyXFxBc2NpaVNsdWdnZXInID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvc3RyaW5nL1NsdWdnZXIvQXNjaWlTbHVnZ2VyLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFN0cmluZ1xcU2x1Z2dlclxcU2x1Z2dlckludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9zdHJpbmcvU2x1Z2dlci9TbHVnZ2VySW50ZXJmYWNlLnBocCcsCiAgICAnX1BIUFN0YW5fOGM2NmQ4MjU1XFxTeW1mb255XFxDb21wb25lbnRcXFN0cmluZ1xcVW5pY29kZVN0cmluZycgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9zdHJpbmcvVW5pY29kZVN0cmluZy5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29udHJhY3RzXFxTZXJ2aWNlXFxBdHRyaWJ1dGVcXFJlcXVpcmVkJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL0F0dHJpYnV0ZS9SZXF1aXJlZC5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29udHJhY3RzXFxTZXJ2aWNlXFxBdHRyaWJ1dGVcXFN1YnNjcmliZWRTZXJ2aWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL0F0dHJpYnV0ZS9TdWJzY3JpYmVkU2VydmljZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29udHJhY3RzXFxTZXJ2aWNlXFxSZXNldEludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9zZXJ2aWNlLWNvbnRyYWN0cy9SZXNldEludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29udHJhY3RzXFxTZXJ2aWNlXFxTZXJ2aWNlTG9jYXRvclRyYWl0JyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL1NlcnZpY2VMb2NhdG9yVHJhaXQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXENvbnRyYWN0c1xcU2VydmljZVxcU2VydmljZVByb3ZpZGVySW50ZXJmYWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL1NlcnZpY2VQcm92aWRlckludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29udHJhY3RzXFxTZXJ2aWNlXFxTZXJ2aWNlU3Vic2NyaWJlckludGVyZmFjZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9zZXJ2aWNlLWNvbnRyYWN0cy9TZXJ2aWNlU3Vic2NyaWJlckludGVyZmFjZS5waHAnLAogICAgJ19QSFBTdGFuXzhjNjZkODI1NVxcU3ltZm9ueVxcQ29udHJhY3RzXFxTZXJ2aWNlXFxTZXJ2aWNlU3Vic2NyaWJlclRyYWl0JyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3NlcnZpY2UtY29udHJhY3RzL1NlcnZpY2VTdWJzY3JpYmVyVHJhaXQucGhwJywKICAgICdfUEhQU3Rhbl84YzY2ZDgyNTVcXFN5bWZvbnlcXFBvbHlmaWxsXFxDdHlwZVxcQ3R5cGUnID0+ICR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtY3R5cGUvQ3R5cGUucGhwJywKKTsKPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENvbXBvc2VyLgogKgogKiAoYykgTmlscyBBZGVybWFubiA8bmFkZXJtYW5AbmFkZXJtYW4uZGU+CiAqICAgICBKb3JkaSBCb2dnaWFubyA8ai5ib2dnaWFub0BzZWxkLmJlPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgQ29tcG9zZXI7Cgp1c2UgQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXI7CnVzZSBDb21wb3NlclxTZW12ZXJcVmVyc2lvblBhcnNlcjsKCi8qKgogKiBUaGlzIGNsYXNzIGlzIGNvcGllZCBpbiBldmVyeSBDb21wb3NlciBpbnN0YWxsZWQgcHJvamVjdCBhbmQgYXZhaWxhYmxlIHRvIGFsbAogKgogKiBTZWUgYWxzbyBodHRwczovL2dldGNvbXBvc2VyLm9yZy9kb2MvMDctcnVudGltZS5tZCNpbnN0YWxsZWQtdmVyc2lvbnMKICoKICogVG8gcmVxdWlyZSBpdHMgcHJlc2VuY2UsIHlvdSBjYW4gcmVxdWlyZSBgY29tcG9zZXItcnVudGltZS1hcGkgXjIuMGAKICoKICogQGZpbmFsCiAqLwpjbGFzcyBJbnN0YWxsZWRWZXJzaW9ucwp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwgaWYgc2V0IChieSByZWZsZWN0aW9uIGJ5IENvbXBvc2VyKSwgdGhpcyBzaG91bGQgYmUgc2V0IHRvIHRoZSBwYXRoIHdoZXJlIHRoaXMgY2xhc3MgaXMgYmVpbmcgY29waWVkIHRvCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHNlbGZEaXIgPSBudWxsOwoKICAgIC8qKgogICAgICogQHZhciBtaXhlZFtdfG51bGwKICAgICAqIEBwc2FsbS12YXIgYXJyYXl7cm9vdDogYXJyYXl7bmFtZTogc3RyaW5nLCBwcmV0dHlfdmVyc2lvbjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHJlZmVyZW5jZTogc3RyaW5nfG51bGwsIHR5cGU6IHN0cmluZywgaW5zdGFsbF9wYXRoOiBzdHJpbmcsIGFsaWFzZXM6IHN0cmluZ1tdLCBkZXY6IGJvb2x9LCB2ZXJzaW9uczogYXJyYXk8c3RyaW5nLCBhcnJheXtwcmV0dHlfdmVyc2lvbj86IHN0cmluZywgdmVyc2lvbj86IHN0cmluZywgcmVmZXJlbmNlPzogc3RyaW5nfG51bGwsIHR5cGU/OiBzdHJpbmcsIGluc3RhbGxfcGF0aD86IHN0cmluZywgYWxpYXNlcz86IHN0cmluZ1tdLCBkZXZfcmVxdWlyZW1lbnQ6IGJvb2wsIHJlcGxhY2VkPzogc3RyaW5nW10sIHByb3ZpZGVkPzogc3RyaW5nW119Pn18YXJyYXl7fXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljICRpbnN0YWxsZWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGluc3RhbGxlZElzTG9jYWxEaXI7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2x8bnVsbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkY2FuR2V0VmVuZG9yczsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXlbXQogICAgICogQHBzYWxtLXZhciBhcnJheTxzdHJpbmcsIGFycmF5e3Jvb3Q6IGFycmF5e25hbWU6IHN0cmluZywgcHJldHR5X3ZlcnNpb246IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZ3xudWxsLCB0eXBlOiBzdHJpbmcsIGluc3RhbGxfcGF0aDogc3RyaW5nLCBhbGlhc2VzOiBzdHJpbmdbXSwgZGV2OiBib29sfSwgdmVyc2lvbnM6IGFycmF5PHN0cmluZywgYXJyYXl7cHJldHR5X3ZlcnNpb24/OiBzdHJpbmcsIHZlcnNpb24/OiBzdHJpbmcsIHJlZmVyZW5jZT86IHN0cmluZ3xudWxsLCB0eXBlPzogc3RyaW5nLCBpbnN0YWxsX3BhdGg/OiBzdHJpbmcsIGFsaWFzZXM/OiBzdHJpbmdbXSwgZGV2X3JlcXVpcmVtZW50OiBib29sLCByZXBsYWNlZD86IHN0cmluZ1tdLCBwcm92aWRlZD86IHN0cmluZ1tdfT59PgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkaW5zdGFsbGVkQnlWZW5kb3IgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHBhY2thZ2UgbmFtZXMgd2hpY2ggYXJlIHByZXNlbnQsIGVpdGhlciBieSBiZWluZyBpbnN0YWxsZWQsIHJlcGxhY2VkIG9yIHByb3ZpZGVkCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICogQHBzYWxtLXJldHVybiBsaXN0PHN0cmluZz4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbnN0YWxsZWRQYWNrYWdlcygpCiAgICB7CiAgICAgICAgJHBhY2thZ2VzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoIChzZWxmOjpnZXRJbnN0YWxsZWQoKSBhcyAkaW5zdGFsbGVkKSB7CiAgICAgICAgICAgICRwYWNrYWdlc1tdID0gYXJyYXlfa2V5cygkaW5zdGFsbGVkWyd2ZXJzaW9ucyddKTsKICAgICAgICB9CgogICAgICAgIGlmICgxID09PSBcY291bnQoJHBhY2thZ2VzKSkgewogICAgICAgICAgICByZXR1cm4gJHBhY2thZ2VzWzBdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGFycmF5X2tleXMoYXJyYXlfZmxpcChcY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ2FycmF5X21lcmdlJywgJHBhY2thZ2VzKSkpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHBhY2thZ2UgbmFtZXMgd2l0aCBhIHNwZWNpZmljIHR5cGUgZS5nLiAnbGlicmFyeScKICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgICR0eXBlCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKiBAcHNhbG0tcmV0dXJuIGxpc3Q8c3RyaW5nPgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbGxlZFBhY2thZ2VzQnlUeXBlKCR0eXBlKQogICAgewogICAgICAgICRwYWNrYWdlc0J5VHlwZSA9IGFycmF5KCk7CgogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGluc3RhbGxlZFsndmVyc2lvbnMnXSBhcyAkbmFtZSA9PiAkcGFja2FnZSkgewogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRwYWNrYWdlWyd0eXBlJ10pICYmICRwYWNrYWdlWyd0eXBlJ10gPT09ICR0eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgJHBhY2thZ2VzQnlUeXBlW10gPSAkbmFtZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwYWNrYWdlc0J5VHlwZTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBwYWNrYWdlIGlzIGluc3RhbGxlZAogICAgICoKICAgICAqIFRoaXMgYWxzbyByZXR1cm5zIHRydWUgaWYgdGhlIHBhY2thZ2UgbmFtZSBpcyBwcm92aWRlZCBvciByZXBsYWNlZCBieSBhbm90aGVyIHBhY2thZ2UKICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkcGFja2FnZU5hbWUKICAgICAqIEBwYXJhbSAgYm9vbCAgICRpbmNsdWRlRGV2UmVxdWlyZW1lbnRzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0luc3RhbGxlZCgkcGFja2FnZU5hbWUsICRpbmNsdWRlRGV2UmVxdWlyZW1lbnRzID0gdHJ1ZSkKICAgIHsKICAgICAgICBmb3JlYWNoIChzZWxmOjpnZXRJbnN0YWxsZWQoKSBhcyAkaW5zdGFsbGVkKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGluY2x1ZGVEZXZSZXF1aXJlbWVudHMgfHwgIWlzc2V0KCRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsnZGV2X3JlcXVpcmVtZW50J10pIHx8ICRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsnZGV2X3JlcXVpcmVtZW50J10gPT09IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gcGFja2FnZSBzYXRpc2ZpZXMgYSB2ZXJzaW9uIGNvbnN0cmFpbnQKICAgICAqCiAgICAgKiBlLmcuIElmIHlvdSB3YW50IHRvIGtub3cgd2hldGhlciB2ZXJzaW9uIDIuMysgb2YgcGFja2FnZSBmb28vYmFyIGlzIGluc3RhbGxlZCwgeW91IHdvdWxkIGNhbGw6CiAgICAgKgogICAgICogICBDb21wb3NlclxJbnN0YWxsZWRWZXJzaW9uczo6c2F0aXNmaWVzKG5ldyBWZXJzaW9uUGFyc2VyLCAnZm9vL2JhcicsICdeMi4zJykKICAgICAqCiAgICAgKiBAcGFyYW0gIFZlcnNpb25QYXJzZXIgJHBhcnNlciAgICAgIEluc3RhbGwgY29tcG9zZXIvc2VtdmVyIHRvIGhhdmUgYWNjZXNzIHRvIHRoaXMgY2xhc3MgYW5kIGZ1bmN0aW9uYWxpdHkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICAgICAkcGFja2FnZU5hbWUKICAgICAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICAkY29uc3RyYWludCAgQSB2ZXJzaW9uIGNvbnN0cmFpbnQgdG8gY2hlY2sgZm9yLCBpZiB5b3UgcGFzcyBvbmUgeW91IGhhdmUgdG8gbWFrZSBzdXJlIGNvbXBvc2VyL3NlbXZlciBpcyByZXF1aXJlZCBieSB5b3VyIHBhY2thZ2UKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNhdGlzZmllcyhWZXJzaW9uUGFyc2VyICRwYXJzZXIsICRwYWNrYWdlTmFtZSwgJGNvbnN0cmFpbnQpCiAgICB7CiAgICAgICAgJGNvbnN0cmFpbnQgPSAkcGFyc2VyLT5wYXJzZUNvbnN0cmFpbnRzKChzdHJpbmcpICRjb25zdHJhaW50KTsKICAgICAgICAkcHJvdmlkZWQgPSAkcGFyc2VyLT5wYXJzZUNvbnN0cmFpbnRzKHNlbGY6OmdldFZlcnNpb25SYW5nZXMoJHBhY2thZ2VOYW1lKSk7CgogICAgICAgIHJldHVybiAkcHJvdmlkZWQtPm1hdGNoZXMoJGNvbnN0cmFpbnQpOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHZlcnNpb24gY29uc3RyYWludCByZXByZXNlbnRpbmcgYWxsIHRoZSByYW5nZShzKSB3aGljaCBhcmUgaW5zdGFsbGVkIGZvciBhIGdpdmVuIHBhY2thZ2UKICAgICAqCiAgICAgKiBJdCBpcyBlYXNpZXIgdG8gdXNlIHRoaXMgdmlhIGlzSW5zdGFsbGVkKCkgd2l0aCB0aGUgJGNvbnN0cmFpbnQgYXJndW1lbnQgaWYgeW91IG5lZWQgdG8gY2hlY2sKICAgICAqIHdoZXRoZXIgYSBnaXZlbiB2ZXJzaW9uIG9mIGEgcGFja2FnZSBpcyBpbnN0YWxsZWQsIGFuZCBub3QganVzdCB3aGV0aGVyIGl0IGV4aXN0cwogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICRwYWNrYWdlTmFtZQogICAgICogQHJldHVybiBzdHJpbmcgVmVyc2lvbiBjb25zdHJhaW50IHVzYWJsZSB3aXRoIGNvbXBvc2VyL3NlbXZlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFZlcnNpb25SYW5nZXMoJHBhY2thZ2VOYW1lKQogICAgewogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJhbmdlcyA9IGFycmF5KCk7CiAgICAgICAgICAgIGlmIChpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3ByZXR0eV92ZXJzaW9uJ10pKSB7CiAgICAgICAgICAgICAgICAkcmFuZ2VzW10gPSAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3ByZXR0eV92ZXJzaW9uJ107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2FsaWFzZXMnLCAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICAkcmFuZ2VzID0gYXJyYXlfbWVyZ2UoJHJhbmdlcywgJGluc3RhbGxlZFsndmVyc2lvbnMnXVskcGFja2FnZU5hbWVdWydhbGlhc2VzJ10pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdyZXBsYWNlZCcsICRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXSkpIHsKICAgICAgICAgICAgICAgICRyYW5nZXMgPSBhcnJheV9tZXJnZSgkcmFuZ2VzLCAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3JlcGxhY2VkJ10pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdwcm92aWRlZCcsICRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXSkpIHsKICAgICAgICAgICAgICAgICRyYW5nZXMgPSBhcnJheV9tZXJnZSgkcmFuZ2VzLCAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3Byb3ZpZGVkJ10pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnIHx8ICcsICRyYW5nZXMpOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxPdXRPZkJvdW5kc0V4Y2VwdGlvbignUGFja2FnZSAiJyAuICRwYWNrYWdlTmFtZSAuICciIGlzIG5vdCBpbnN0YWxsZWQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICAgJHBhY2thZ2VOYW1lCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIElmIHRoZSBwYWNrYWdlIGlzIGJlaW5nIHJlcGxhY2VkIG9yIHByb3ZpZGVkIGJ1dCBpcyBub3QgcmVhbGx5IGluc3RhbGxlZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkIGFzIHZlcnNpb24sIHVzZSBzYXRpc2ZpZXMgb3IgZ2V0VmVyc2lvblJhbmdlcyBpZiB5b3UgbmVlZCB0byBrbm93IGlmIGEgZ2l2ZW4gdmVyc2lvbiBpcyBwcmVzZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigkcGFja2FnZU5hbWUpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoc2VsZjo6Z2V0SW5zdGFsbGVkKCkgYXMgJGluc3RhbGxlZCkgewogICAgICAgICAgICBpZiAoIWlzc2V0KCRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWlzc2V0KCRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsndmVyc2lvbiddKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3ZlcnNpb24nXTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcT3V0T2ZCb3VuZHNFeGNlcHRpb24oJ1BhY2thZ2UgIicgLiAkcGFja2FnZU5hbWUgLiAnIiBpcyBub3QgaW5zdGFsbGVkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgICAgICRwYWNrYWdlTmFtZQogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBJZiB0aGUgcGFja2FnZSBpcyBiZWluZyByZXBsYWNlZCBvciBwcm92aWRlZCBidXQgaXMgbm90IHJlYWxseSBpbnN0YWxsZWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZCBhcyB2ZXJzaW9uLCB1c2Ugc2F0aXNmaWVzIG9yIGdldFZlcnNpb25SYW5nZXMgaWYgeW91IG5lZWQgdG8ga25vdyBpZiBhIGdpdmVuIHZlcnNpb24gaXMgcHJlc2VudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFByZXR0eVZlcnNpb24oJHBhY2thZ2VOYW1lKQogICAgewogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3ByZXR0eV92ZXJzaW9uJ10pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsncHJldHR5X3ZlcnNpb24nXTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBcT3V0T2ZCb3VuZHNFeGNlcHRpb24oJ1BhY2thZ2UgIicgLiAkcGFja2FnZU5hbWUgLiAnIiBpcyBub3QgaW5zdGFsbGVkJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgICAgICRwYWNrYWdlTmFtZQogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBJZiB0aGUgcGFja2FnZSBpcyBiZWluZyByZXBsYWNlZCBvciBwcm92aWRlZCBidXQgaXMgbm90IHJlYWxseSBpbnN0YWxsZWQsIG51bGwgd2lsbCBiZSByZXR1cm5lZCBhcyByZWZlcmVuY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSZWZlcmVuY2UoJHBhY2thZ2VOYW1lKQogICAgewogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3JlZmVyZW5jZSddKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV1bJ3JlZmVyZW5jZSddOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxPdXRPZkJvdW5kc0V4Y2VwdGlvbignUGFja2FnZSAiJyAuICRwYWNrYWdlTmFtZSAuICciIGlzIG5vdCBpbnN0YWxsZWQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICAgJHBhY2thZ2VOYW1lCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIElmIHRoZSBwYWNrYWdlIGlzIGJlaW5nIHJlcGxhY2VkIG9yIHByb3ZpZGVkIGJ1dCBpcyBub3QgcmVhbGx5IGluc3RhbGxlZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkIGFzIGluc3RhbGwgcGF0aC4gUGFja2FnZXMgb2YgdHlwZSBtZXRhcGFja2FnZXMgYWxzbyBoYXZlIGEgbnVsbCBpbnN0YWxsIHBhdGguCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFsbFBhdGgoJHBhY2thZ2VOYW1lKQogICAgewogICAgICAgIGZvcmVhY2ggKHNlbGY6OmdldEluc3RhbGxlZCgpIGFzICRpbnN0YWxsZWQpIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkaW5zdGFsbGVkWyd2ZXJzaW9ucyddWyRwYWNrYWdlTmFtZV0pKSB7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRpbnN0YWxsZWRbJ3ZlcnNpb25zJ11bJHBhY2thZ2VOYW1lXVsnaW5zdGFsbF9wYXRoJ10pID8gJGluc3RhbGxlZFsndmVyc2lvbnMnXVskcGFja2FnZU5hbWVdWydpbnN0YWxsX3BhdGgnXSA6IG51bGw7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXE91dE9mQm91bmRzRXhjZXB0aW9uKCdQYWNrYWdlICInIC4gJHBhY2thZ2VOYW1lIC4gJyIgaXMgbm90IGluc3RhbGxlZCcpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICogQHBzYWxtLXJldHVybiBhcnJheXtuYW1lOiBzdHJpbmcsIHByZXR0eV92ZXJzaW9uOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd8bnVsbCwgdHlwZTogc3RyaW5nLCBpbnN0YWxsX3BhdGg6IHN0cmluZywgYWxpYXNlczogc3RyaW5nW10sIGRldjogYm9vbH0KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSb290UGFja2FnZSgpCiAgICB7CiAgICAgICAgJGluc3RhbGxlZCA9IHNlbGY6OmdldEluc3RhbGxlZCgpOwoKICAgICAgICByZXR1cm4gJGluc3RhbGxlZFswXVsncm9vdCddOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmF3IGluc3RhbGxlZC5waHAgZGF0YSBmb3IgY3VzdG9tIGltcGxlbWVudGF0aW9ucwogICAgICoKICAgICAqIEBkZXByZWNhdGVkIFVzZSBnZXRBbGxSYXdEYXRhKCkgaW5zdGVhZCB3aGljaCByZXR1cm5zIGFsbCBkYXRhc2V0cyBmb3IgYWxsIGF1dG9sb2FkZXJzIHByZXNlbnQgaW4gdGhlIHByb2Nlc3MuIGdldFJhd0RhdGEgb25seSByZXR1cm5zIHRoZSBmaXJzdCBkYXRhc2V0IGxvYWRlZCwgd2hpY2ggbWF5IG5vdCBiZSB3aGF0IHlvdSBleHBlY3QuCiAgICAgKiBAcmV0dXJuIGFycmF5W10KICAgICAqIEBwc2FsbS1yZXR1cm4gYXJyYXl7cm9vdDogYXJyYXl7bmFtZTogc3RyaW5nLCBwcmV0dHlfdmVyc2lvbjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHJlZmVyZW5jZTogc3RyaW5nfG51bGwsIHR5cGU6IHN0cmluZywgaW5zdGFsbF9wYXRoOiBzdHJpbmcsIGFsaWFzZXM6IHN0cmluZ1tdLCBkZXY6IGJvb2x9LCB2ZXJzaW9uczogYXJyYXk8c3RyaW5nLCBhcnJheXtwcmV0dHlfdmVyc2lvbj86IHN0cmluZywgdmVyc2lvbj86IHN0cmluZywgcmVmZXJlbmNlPzogc3RyaW5nfG51bGwsIHR5cGU/OiBzdHJpbmcsIGluc3RhbGxfcGF0aD86IHN0cmluZywgYWxpYXNlcz86IHN0cmluZ1tdLCBkZXZfcmVxdWlyZW1lbnQ6IGJvb2wsIHJlcGxhY2VkPzogc3RyaW5nW10sIHByb3ZpZGVkPzogc3RyaW5nW119Pn0KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSYXdEYXRhKCkKICAgIHsKICAgICAgICBAdHJpZ2dlcl9lcnJvcignZ2V0UmF3RGF0YSBvbmx5IHJldHVybnMgdGhlIGZpcnN0IGRhdGFzZXQgbG9hZGVkLCB3aGljaCBtYXkgbm90IGJlIHdoYXQgeW91IGV4cGVjdC4gVXNlIGdldEFsbFJhd0RhdGEoKSBpbnN0ZWFkIHdoaWNoIHJldHVybnMgYWxsIGRhdGFzZXRzIGZvciBhbGwgYXV0b2xvYWRlcnMgcHJlc2VudCBpbiB0aGUgcHJvY2Vzcy4nLCBFX1VTRVJfREVQUkVDQVRFRCk7CgogICAgICAgIGlmIChudWxsID09PSBzZWxmOjokaW5zdGFsbGVkKSB7CiAgICAgICAgICAgIC8vIG9ubHkgcmVxdWlyZSB0aGUgaW5zdGFsbGVkLnBocCBmaWxlIGlmIHRoaXMgZmlsZSBpcyBsb2FkZWQgZnJvbSBpdHMgZHVtcGVkIGxvY2F0aW9uLAogICAgICAgICAgICAvLyBhbmQgbm90IGZyb20gaXRzIHNvdXJjZSBsb2NhdGlvbiBpbiB0aGUgY29tcG9zZXIvY29tcG9zZXIgcGFja2FnZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlci9jb21wb3Nlci9pc3N1ZXMvOTkzNwogICAgICAgICAgICBpZiAoc3Vic3RyKF9fRElSX18sIC04LCAxKSAhPT0gJ0MnKSB7CiAgICAgICAgICAgICAgICBzZWxmOjokaW5zdGFsbGVkID0gaW5jbHVkZSBfX0RJUl9fIC4gJy9pbnN0YWxsZWQucGhwJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNlbGY6OiRpbnN0YWxsZWQgPSBhcnJheSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6JGluc3RhbGxlZDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJhdyBkYXRhIG9mIGFsbCBpbnN0YWxsZWQucGhwIHdoaWNoIGFyZSBjdXJyZW50bHkgbG9hZGVkIGZvciBjdXN0b20gaW1wbGVtZW50YXRpb25zCiAgICAgKgogICAgICogQHJldHVybiBhcnJheVtdCiAgICAgKiBAcHNhbG0tcmV0dXJuIGxpc3Q8YXJyYXl7cm9vdDogYXJyYXl7bmFtZTogc3RyaW5nLCBwcmV0dHlfdmVyc2lvbjogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcsIHJlZmVyZW5jZTogc3RyaW5nfG51bGwsIHR5cGU6IHN0cmluZywgaW5zdGFsbF9wYXRoOiBzdHJpbmcsIGFsaWFzZXM6IHN0cmluZ1tdLCBkZXY6IGJvb2x9LCB2ZXJzaW9uczogYXJyYXk8c3RyaW5nLCBhcnJheXtwcmV0dHlfdmVyc2lvbj86IHN0cmluZywgdmVyc2lvbj86IHN0cmluZywgcmVmZXJlbmNlPzogc3RyaW5nfG51bGwsIHR5cGU/OiBzdHJpbmcsIGluc3RhbGxfcGF0aD86IHN0cmluZywgYWxpYXNlcz86IHN0cmluZ1tdLCBkZXZfcmVxdWlyZW1lbnQ6IGJvb2wsIHJlcGxhY2VkPzogc3RyaW5nW10sIHByb3ZpZGVkPzogc3RyaW5nW119Pn0+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QWxsUmF3RGF0YSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmdldEluc3RhbGxlZCgpOwogICAgfQoKICAgIC8qKgogICAgICogTGV0cyB5b3UgcmVsb2FkIHRoZSBzdGF0aWMgYXJyYXkgZnJvbSBhbm90aGVyIGZpbGUKICAgICAqCiAgICAgKiBUaGlzIGlzIG9ubHkgdXNlZnVsIGZvciBjb21wbGV4IGludGVncmF0aW9ucyBpbiB3aGljaCBhIHByb2plY3QgbmVlZHMgdG8gdXNlCiAgICAgKiB0aGlzIGNsYXNzIGJ1dCB0aGVuIGFsc28gbmVlZHMgdG8gZXhlY3V0ZSBhbm90aGVyIHByb2plY3QncyBhdXRvbG9hZGVyIGluIHByb2Nlc3MsCiAgICAgKiBhbmQgd2FudHMgdG8gZW5zdXJlIGJvdGggcHJvamVjdHMgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgdmVyc2lvbiBvZiBpbnN0YWxsZWQucGhwLgogICAgICoKICAgICAqIEEgdHlwaWNhbCBjYXNlIHdvdWxkIGJlIFBIUFVuaXQsIHdoZXJlIGl0IHdvdWxkIG5lZWQgdG8gbWFrZSBzdXJlIGl0IHJlYWRzIGFsbAogICAgICogdGhlIGRhdGEgaXQgbmVlZHMgZnJvbSB0aGlzIGNsYXNzLCB0aGVuIGNhbGwgcmVsb2FkKCkgd2l0aAogICAgICogYHJlcXVpcmUgJENXRC92ZW5kb3IvY29tcG9zZXIvaW5zdGFsbGVkLnBocGAgKG9yIHNpbWlsYXIpIGFzIGlucHV0IHRvIG1ha2Ugc3VyZQogICAgICogdGhlIHByb2plY3QgaW4gd2hpY2ggaXQgcnVucyBjYW4gdGhlbiBhbHNvIHVzZSB0aGlzIGNsYXNzIHNhZmVseSwgd2l0aG91dAogICAgICogaW50ZXJmZXJlbmNlIGJldHdlZW4gUEhQVW5pdCdzIGRlcGVuZGVuY2llcyBhbmQgdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheVtdICRkYXRhIEEgdmVuZG9yL2NvbXBvc2VyL2luc3RhbGxlZC5waHAgZGF0YSBzZXQKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEBwc2FsbS1wYXJhbSBhcnJheXtyb290OiBhcnJheXtuYW1lOiBzdHJpbmcsIHByZXR0eV92ZXJzaW9uOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd8bnVsbCwgdHlwZTogc3RyaW5nLCBpbnN0YWxsX3BhdGg6IHN0cmluZywgYWxpYXNlczogc3RyaW5nW10sIGRldjogYm9vbH0sIHZlcnNpb25zOiBhcnJheTxzdHJpbmcsIGFycmF5e3ByZXR0eV92ZXJzaW9uPzogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nLCByZWZlcmVuY2U/OiBzdHJpbmd8bnVsbCwgdHlwZT86IHN0cmluZywgaW5zdGFsbF9wYXRoPzogc3RyaW5nLCBhbGlhc2VzPzogc3RyaW5nW10sIGRldl9yZXF1aXJlbWVudDogYm9vbCwgcmVwbGFjZWQ/OiBzdHJpbmdbXSwgcHJvdmlkZWQ/OiBzdHJpbmdbXX0+fSAkZGF0YQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbG9hZCgkZGF0YSkKICAgIHsKICAgICAgICBzZWxmOjokaW5zdGFsbGVkID0gJGRhdGE7CiAgICAgICAgc2VsZjo6JGluc3RhbGxlZEJ5VmVuZG9yID0gYXJyYXkoKTsKCiAgICAgICAgLy8gd2hlbiB1c2luZyByZWxvYWQsIHdlIGRpc2FibGUgdGhlIGR1cGxpY2F0ZSBwcm90ZWN0aW9uIHRvIGVuc3VyZSB0aGF0IHNlbGY6OiRpbnN0YWxsZWQgZGF0YSBpcwogICAgICAgIC8vIGFsd2F5cyByZXR1cm5lZCwgYnV0IHdlIGNhbm5vdCBrbm93IHdoZXRoZXIgaXQgY29tZXMgZnJvbSB0aGUgaW5zdGFsbGVkLnBocCBpbiBfX0RJUl9fIG9yIG5vdCwKICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIGFzc3VtZSBpdCBkb2VzIG5vdCwgYW5kIHRoYXQgbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGUgZGF0YSBiZWluZyByZXR1cm5lZCB3aGVuIGxpc3RpbmcKICAgICAgICAvLyBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzIGZvciBleGFtcGxlCiAgICAgICAgc2VsZjo6JGluc3RhbGxlZElzTG9jYWxEaXIgPSBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldFNlbGZEaXIoKQogICAgewogICAgICAgIGlmIChzZWxmOjokc2VsZkRpciA9PT0gbnVsbCkgewogICAgICAgICAgICBzZWxmOjokc2VsZkRpciA9IHN0cnRyKF9fRElSX18sICdcXCcsICcvJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6JHNlbGZEaXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5W10KICAgICAqIEBwc2FsbS1yZXR1cm4gbGlzdDxhcnJheXtyb290OiBhcnJheXtuYW1lOiBzdHJpbmcsIHByZXR0eV92ZXJzaW9uOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd8bnVsbCwgdHlwZTogc3RyaW5nLCBpbnN0YWxsX3BhdGg6IHN0cmluZywgYWxpYXNlczogc3RyaW5nW10sIGRldjogYm9vbH0sIHZlcnNpb25zOiBhcnJheTxzdHJpbmcsIGFycmF5e3ByZXR0eV92ZXJzaW9uPzogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nLCByZWZlcmVuY2U/OiBzdHJpbmd8bnVsbCwgdHlwZT86IHN0cmluZywgaW5zdGFsbF9wYXRoPzogc3RyaW5nLCBhbGlhc2VzPzogc3RyaW5nW10sIGRldl9yZXF1aXJlbWVudDogYm9vbCwgcmVwbGFjZWQ/OiBzdHJpbmdbXSwgcHJvdmlkZWQ/OiBzdHJpbmdbXX0+fT4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFsbGVkKCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gc2VsZjo6JGNhbkdldFZlbmRvcnMpIHsKICAgICAgICAgICAgc2VsZjo6JGNhbkdldFZlbmRvcnMgPSBtZXRob2RfZXhpc3RzKCdDb21wb3NlclxBdXRvbG9hZFxDbGFzc0xvYWRlcicsICdnZXRSZWdpc3RlcmVkTG9hZGVycycpOwogICAgICAgIH0KCiAgICAgICAgJGluc3RhbGxlZCA9IGFycmF5KCk7CiAgICAgICAgJGNvcGllZExvY2FsRGlyID0gZmFsc2U7CgogICAgICAgIGlmIChzZWxmOjokY2FuR2V0VmVuZG9ycykgewogICAgICAgICAgICAkc2VsZkRpciA9IHNlbGY6OmdldFNlbGZEaXIoKTsKICAgICAgICAgICAgZm9yZWFjaCAoQ2xhc3NMb2FkZXI6OmdldFJlZ2lzdGVyZWRMb2FkZXJzKCkgYXMgJHZlbmRvckRpciA9PiAkbG9hZGVyKSB7CiAgICAgICAgICAgICAgICAkdmVuZG9yRGlyID0gc3RydHIoJHZlbmRvckRpciwgJ1xcJywgJy8nKTsKICAgICAgICAgICAgICAgIGlmIChpc3NldChzZWxmOjokaW5zdGFsbGVkQnlWZW5kb3JbJHZlbmRvckRpcl0pKSB7CiAgICAgICAgICAgICAgICAgICAgJGluc3RhbGxlZFtdID0gc2VsZjo6JGluc3RhbGxlZEJ5VmVuZG9yWyR2ZW5kb3JEaXJdOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHZlbmRvckRpci4nL2NvbXBvc2VyL2luc3RhbGxlZC5waHAnKSkgewogICAgICAgICAgICAgICAgICAgIC8qKiBAdmFyIGFycmF5e3Jvb3Q6IGFycmF5e25hbWU6IHN0cmluZywgcHJldHR5X3ZlcnNpb246IHN0cmluZywgdmVyc2lvbjogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZ3xudWxsLCB0eXBlOiBzdHJpbmcsIGluc3RhbGxfcGF0aDogc3RyaW5nLCBhbGlhc2VzOiBzdHJpbmdbXSwgZGV2OiBib29sfSwgdmVyc2lvbnM6IGFycmF5PHN0cmluZywgYXJyYXl7cHJldHR5X3ZlcnNpb24/OiBzdHJpbmcsIHZlcnNpb24/OiBzdHJpbmcsIHJlZmVyZW5jZT86IHN0cmluZ3xudWxsLCB0eXBlPzogc3RyaW5nLCBpbnN0YWxsX3BhdGg/OiBzdHJpbmcsIGFsaWFzZXM/OiBzdHJpbmdbXSwgZGV2X3JlcXVpcmVtZW50OiBib29sLCByZXBsYWNlZD86IHN0cmluZ1tdLCBwcm92aWRlZD86IHN0cmluZ1tdfT59ICRyZXF1aXJlZCAqLwogICAgICAgICAgICAgICAgICAgICRyZXF1aXJlZCA9IHJlcXVpcmUgJHZlbmRvckRpci4nL2NvbXBvc2VyL2luc3RhbGxlZC5waHAnOwogICAgICAgICAgICAgICAgICAgIHNlbGY6OiRpbnN0YWxsZWRCeVZlbmRvclskdmVuZG9yRGlyXSA9ICRyZXF1aXJlZDsKICAgICAgICAgICAgICAgICAgICAkaW5zdGFsbGVkW10gPSAkcmVxdWlyZWQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGY6OiRpbnN0YWxsZWQgPT09IG51bGwgJiYgJHZlbmRvckRpci4nL2NvbXBvc2VyJyA9PT0gJHNlbGZEaXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6JGluc3RhbGxlZCA9ICRyZXF1aXJlZDsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6JGluc3RhbGxlZElzTG9jYWxEaXIgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzZWxmOjokaW5zdGFsbGVkSXNMb2NhbERpciAmJiAkdmVuZG9yRGlyLicvY29tcG9zZXInID09PSAkc2VsZkRpcikgewogICAgICAgICAgICAgICAgICAgICRjb3BpZWRMb2NhbERpciA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChudWxsID09PSBzZWxmOjokaW5zdGFsbGVkKSB7CiAgICAgICAgICAgIC8vIG9ubHkgcmVxdWlyZSB0aGUgaW5zdGFsbGVkLnBocCBmaWxlIGlmIHRoaXMgZmlsZSBpcyBsb2FkZWQgZnJvbSBpdHMgZHVtcGVkIGxvY2F0aW9uLAogICAgICAgICAgICAvLyBhbmQgbm90IGZyb20gaXRzIHNvdXJjZSBsb2NhdGlvbiBpbiB0aGUgY29tcG9zZXIvY29tcG9zZXIgcGFja2FnZSwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlci9jb21wb3Nlci9pc3N1ZXMvOTkzNwogICAgICAgICAgICBpZiAoc3Vic3RyKF9fRElSX18sIC04LCAxKSAhPT0gJ0MnKSB7CiAgICAgICAgICAgICAgICAvKiogQHZhciBhcnJheXtyb290OiBhcnJheXtuYW1lOiBzdHJpbmcsIHByZXR0eV92ZXJzaW9uOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd8bnVsbCwgdHlwZTogc3RyaW5nLCBpbnN0YWxsX3BhdGg6IHN0cmluZywgYWxpYXNlczogc3RyaW5nW10sIGRldjogYm9vbH0sIHZlcnNpb25zOiBhcnJheTxzdHJpbmcsIGFycmF5e3ByZXR0eV92ZXJzaW9uPzogc3RyaW5nLCB2ZXJzaW9uPzogc3RyaW5nLCByZWZlcmVuY2U/OiBzdHJpbmd8bnVsbCwgdHlwZT86IHN0cmluZywgaW5zdGFsbF9wYXRoPzogc3RyaW5nLCBhbGlhc2VzPzogc3RyaW5nW10sIGRldl9yZXF1aXJlbWVudDogYm9vbCwgcmVwbGFjZWQ/OiBzdHJpbmdbXSwgcHJvdmlkZWQ/OiBzdHJpbmdbXX0+fSAkcmVxdWlyZWQgKi8KICAgICAgICAgICAgICAgICRyZXF1aXJlZCA9IHJlcXVpcmUgX19ESVJfXyAuICcvaW5zdGFsbGVkLnBocCc7CiAgICAgICAgICAgICAgICBzZWxmOjokaW5zdGFsbGVkID0gJHJlcXVpcmVkOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc2VsZjo6JGluc3RhbGxlZCA9IGFycmF5KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzZWxmOjokaW5zdGFsbGVkICE9PSBhcnJheSgpICYmICEkY29waWVkTG9jYWxEaXIpIHsKICAgICAgICAgICAgJGluc3RhbGxlZFtdID0gc2VsZjo6JGluc3RhbGxlZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkaW5zdGFsbGVkOwogICAgfQp9Cjw/cGhwCgovLyBhdXRvbG9hZF9maWxlcy5waHAgQGdlbmVyYXRlZCBieSBDb21wb3NlcgoKJHZlbmRvckRpciA9IGRpcm5hbWUoX19ESVJfXyk7CiRiYXNlRGlyID0gZGlybmFtZSgkdmVuZG9yRGlyKTsKCnJldHVybiBhcnJheSgKICAgICdlODg5OTI4NzNiNzc2NWY5YjU3MTBjYWI5NWJhNWRkNycgPT4gJHZlbmRvckRpciAuICcvaG9hL2NvbnNpc3RlbmN5L1ByZWx1ZGUucGhwJywKICAgICczZTc2ZjdmMDJiNDFhZjhjZWE5NjAxODkzM2Y2YjdlMycgPT4gJHZlbmRvckRpciAuICcvaG9hL3Byb3RvY29sL1dyYXBwZXIucGhwJywKICAgICdhZDE1NWY4ZjFjZjBkNDE4ZmU0OWUyNDhkYjhjNjYxYicgPT4gJHZlbmRvckRpciAuICcvcmVhY3QvcHJvbWlzZS9zcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwJywKICAgICdhNGExMTlhNTZlNTBmYmIyOTMyODFkOWE0ODAwN2UwZScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MC9ib290c3RyYXAucGhwJywKICAgICc2ZTNmYWUyOTYzMWVmMjgwNjYwYjNjZGFkMDZmMjVhOCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9kZXByZWNhdGlvbi1jb250cmFjdHMvZnVuY3Rpb24ucGhwJywKICAgICcwZTZkN2JmNGE1ODExYmZhNWNmNDBjNWNjZDZmYWU2YScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZy9ib290c3RyYXAucGhwJywKICAgICczMjBjZGUyMmY2NmRkNGY1ZDNmZDYyMWQzZTg4Yjk4ZicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1jdHlwZS9ib290c3RyYXAucGhwJywKICAgICc4ODI1ZWRlODNmMmYyODkxMjc3MjJkNGU4NDJjZjdlOCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1pbnRsLWdyYXBoZW1lL2Jvb3RzdHJhcC5waHAnLAogICAgJ2U2OWY3ZjZlZTI4N2I5NjkxOThjM2M5ZDY3NzdiZDM4JyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLWludGwtbm9ybWFsaXplci9ib290c3RyYXAucGhwJywKICAgICdmZTFkNDg5ODI3N2MyNjc0OGEwMDMyOTJmNDMyY2QzYicgPT4gJHZlbmRvckRpciAuICcvamV0YnJhaW5zL3BocHN0b3JtLXN0dWJzL1BocFN0b3JtU3R1YnNNYXAucGhwJywKICAgICcwZDU5ZWUyNDBhNGNkOTZkZGJiNGZmMTY0ZmNjZWE0ZCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA3My9ib290c3RyYXAucGhwJywKICAgICdiNmI5OTFhNTc2MjBlMmZiNmIyZjY2ZjAzZmU5ZGRjMicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9zdHJpbmcvUmVzb3VyY2VzL2Z1bmN0aW9ucy5waHAnLAogICAgJ2M0ZTAzZWNkNDcwZDJhODc4MDQ5NzljMGE4MTUyMjg0JyA9PiAkdmVuZG9yRGlyIC4gJy9yZWFjdC9hc3luYy9zcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwJywKICAgICdiNjg2YjhlNDY0NDc4NjgwMjVhMTVjZTVkMGNiMjYzNCcgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA3NC9ib290c3RyYXAucGhwJywKICAgICcyM2MxODA0NmY1MmJlZjNlZWEwMzQ2NTdiYWZkYTUwZicgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA4MS9ib290c3RyYXAucGhwJywKICAgICcyM2UxYWZmZGY0MDdlMzUzOGExZjMyYzE0MGZiMDQwMScgPT4gJGJhc2VEaXIgLiAnL3NyYy9kZWJ1Z1Njb3BlLnBocCcsCiAgICAnOGIzYjI1ZTExZTgyNzUzOTIzZDQzZTI5OGE3MGRjZDAnID0+ICRiYXNlRGlyIC4gJy9zcmMvZHVtcFR5cGUucGhwJywKICAgICc5NjYyMjc5ZTNlNzVmNzM3ZDkzMDMwMjUyNjczYmYyZCcgPT4gJGJhc2VEaXIgLiAnL3NyYy9hdXRvbG9hZEZ1bmN0aW9ucy5waHAnLAogICAgJzFhMmVhYjUzMDY1ZWZmOTY5MmJhYzIzOGQxNWNjOGNiJyA9PiAkYmFzZURpciAuICcvc3JjL1Rlc3RpbmcvZnVuY3Rpb25zLnBocCcsCik7CkNvcHlyaWdodCAoQykgMjAxNSBDb21wb3NlcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgp0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgp0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCnVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCm9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwpzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4KPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNvbXBvc2VyL3NlbXZlci4KICoKICogKGMpIENvbXBvc2VyIDxodHRwczovL2dpdGh1Yi5jb20vY29tcG9zZXI+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3CiAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxTZW12ZXI7Cgp1c2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFNlbXZlclxDb25zdHJhaW50XENvbnN0cmFpbnQ7CmNsYXNzIEludGVydmFsCnsKICAgIC8qKiBAdmFyIENvbnN0cmFpbnQgKi8KICAgIHByaXZhdGUgJHN0YXJ0OwogICAgLyoqIEB2YXIgQ29uc3RyYWludCAqLwogICAgcHJpdmF0ZSAkZW5kOwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KENvbnN0cmFpbnQgJHN0YXJ0LCBDb25zdHJhaW50ICRlbmQpCiAgICB7CiAgICAgICAgJHRoaXMtPnN0YXJ0ID0gJHN0YXJ0OwogICAgICAgICR0aGlzLT5lbmQgPSAkZW5kOwogICAgfQogICAgLyoqCiAgICAgKiBAcmV0dXJuIENvbnN0cmFpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXJ0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXJ0OwogICAgfQogICAgLyoqCiAgICAgKiBAcmV0dXJuIENvbnN0cmFpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVuZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lbmQ7CiAgICB9CiAgICAvKioKICAgICAqIEByZXR1cm4gQ29uc3RyYWludAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21aZXJvKCkKICAgIHsKICAgICAgICBzdGF0aWMgJHplcm87CiAgICAgICAgaWYgKG51bGwgPT09ICR6ZXJvKSB7CiAgICAgICAgICAgICR6ZXJvID0gbmV3IENvbnN0cmFpbnQoJz49JywgJzAuMC4wLjAtZGV2Jyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkemVybzsKICAgIH0KICAgIC8qKgogICAgICogQHJldHVybiBDb25zdHJhaW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdW50aWxQb3NpdGl2ZUluZmluaXR5KCkKICAgIHsKICAgICAgICBzdGF0aWMgJHBvc2l0aXZlSW5maW5pdHk7CiAgICAgICAgaWYgKG51bGwgPT09ICRwb3NpdGl2ZUluZmluaXR5KSB7CiAgICAgICAgICAgICRwb3NpdGl2ZUluZmluaXR5ID0gbmV3IENvbnN0cmFpbnQoJzwnLCBcUEhQX0lOVF9NQVggLiAnLjAuMC4wJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcG9zaXRpdmVJbmZpbml0eTsKICAgIH0KICAgIC8qKgogICAgICogQHJldHVybiBzZWxmCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYW55KCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHNlbGYoc2VsZjo6ZnJvbVplcm8oKSwgc2VsZjo6dW50aWxQb3NpdGl2ZUluZmluaXR5KCkpOwogICAgfQogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5eyduYW1lcyc6IHN0cmluZ1tdLCAnZXhjbHVkZSc6IGJvb2x9CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYW55RGV2KCkKICAgIHsKICAgICAgICAvLyBhbnkgPT0gZXhjbHVkZSBub3RoaW5nCiAgICAgICAgcmV0dXJuIGFycmF5KCduYW1lcycgPT4gYXJyYXkoKSwgJ2V4Y2x1ZGUnID0+IFx0cnVlKTsKICAgIH0KICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXsnbmFtZXMnOiBzdHJpbmdbXSwgJ2V4Y2x1ZGUnOiBib29sfQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vRGV2KCkKICAgIHsKICAgICAgICAvLyBub3RoaW5nID09IG5vIG5hbWVzIGluY2x1ZGVkCiAgICAgICAgcmV0dXJuIGFycmF5KCduYW1lcycgPT4gYXJyYXkoKSwgJ2V4Y2x1ZGUnID0+IFxmYWxzZSk7CiAgICB9Cn0KPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNvbXBvc2VyL3NlbXZlci4KICoKICogKGMpIENvbXBvc2VyIDxodHRwczovL2dpdGh1Yi5jb20vY29tcG9zZXI+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3CiAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxTZW12ZXJcQ29uc3RyYWludDsKCi8qKgogKiBEZWZpbmVzIGEgY29uc3RyYWludC4KICovCmNsYXNzIENvbnN0cmFpbnQgaW1wbGVtZW50cyBDb25zdHJhaW50SW50ZXJmYWNlCnsKICAgIC8qIG9wZXJhdG9yIGludGVnZXIgdmFsdWVzICovCiAgICBjb25zdCBPUF9FUSA9IDA7CiAgICBjb25zdCBPUF9MVCA9IDE7CiAgICBjb25zdCBPUF9MRSA9IDI7CiAgICBjb25zdCBPUF9HVCA9IDM7CiAgICBjb25zdCBPUF9HRSA9IDQ7CiAgICBjb25zdCBPUF9ORSA9IDU7CiAgICAvKiBvcGVyYXRvciBzdHJpbmcgdmFsdWVzICovCiAgICBjb25zdCBTVFJfT1BfRVEgPSAnPT0nOwogICAgY29uc3QgU1RSX09QX0VRX0FMVCA9ICc9JzsKICAgIGNvbnN0IFNUUl9PUF9MVCA9ICc8JzsKICAgIGNvbnN0IFNUUl9PUF9MRSA9ICc8PSc7CiAgICBjb25zdCBTVFJfT1BfR1QgPSAnPic7CiAgICBjb25zdCBTVFJfT1BfR0UgPSAnPj0nOwogICAgY29uc3QgU1RSX09QX05FID0gJyE9JzsKICAgIGNvbnN0IFNUUl9PUF9ORV9BTFQgPSAnPD4nOwogICAgLyoqCiAgICAgKiBPcGVyYXRvciB0byBpbnRlZ2VyIHRyYW5zbGF0aW9uIHRhYmxlLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqIEBwaHBzdGFuLXZhciBhcnJheTxzZWxmOjpTVFJfT1BfKiwgc2VsZjo6T1BfKj4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHRyYW5zT3BTdHIgPSBhcnJheSgnPScgPT4gc2VsZjo6T1BfRVEsICc9PScgPT4gc2VsZjo6T1BfRVEsICc8JyA9PiBzZWxmOjpPUF9MVCwgJzw9JyA9PiBzZWxmOjpPUF9MRSwgJz4nID0+IHNlbGY6Ok9QX0dULCAnPj0nID0+IHNlbGY6Ok9QX0dFLCAnPD4nID0+IHNlbGY6Ok9QX05FLCAnIT0nID0+IHNlbGY6Ok9QX05FKTsKICAgIC8qKgogICAgICogSW50ZWdlciB0byBvcGVyYXRvciB0cmFuc2xhdGlvbiB0YWJsZS4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKiBAcGhwc3Rhbi12YXIgYXJyYXk8c2VsZjo6T1BfKiwgc2VsZjo6U1RSX09QXyo+CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljICR0cmFuc09wSW50ID0gYXJyYXkoc2VsZjo6T1BfRVEgPT4gJz09Jywgc2VsZjo6T1BfTFQgPT4gJzwnLCBzZWxmOjpPUF9MRSA9PiAnPD0nLCBzZWxmOjpPUF9HVCA9PiAnPicsIHNlbGY6Ok9QX0dFID0+ICc+PScsIHNlbGY6Ok9QX05FID0+ICchPScpOwogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICogQHBocHN0YW4tdmFyIHNlbGY6Ok9QXyoKICAgICAqLwogICAgcHJvdGVjdGVkICRvcGVyYXRvcjsKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJvdGVjdGVkICR2ZXJzaW9uOwogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHByb3RlY3RlZCAkcHJldHR5U3RyaW5nOwogICAgLyoqIEB2YXIgQm91bmQgKi8KICAgIHByb3RlY3RlZCAkbG93ZXJCb3VuZDsKICAgIC8qKiBAdmFyIEJvdW5kICovCiAgICBwcm90ZWN0ZWQgJHVwcGVyQm91bmQ7CiAgICAvKioKICAgICAqIFNldHMgb3BlcmF0b3IgYW5kIHZlcnNpb24gdG8gY29tcGFyZSB3aXRoLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wZXJhdG9yCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2ZXJzaW9uCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIGludmFsaWQgb3BlcmF0b3IgaXMgZ2l2ZW4uCiAgICAgKgogICAgICogQHBocHN0YW4tcGFyYW0gc2VsZjo6U1RSX09QXyogJG9wZXJhdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkb3BlcmF0b3IsICR2ZXJzaW9uKQogICAgewogICAgICAgIGlmICghaXNzZXQoc2VsZjo6JHRyYW5zT3BTdHJbJG9wZXJhdG9yXSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oXHNwcmludGYoJ0ludmFsaWQgb3BlcmF0b3IgIiVzIiBnaXZlbiwgZXhwZWN0ZWQgb25lIG9mOiAlcycsICRvcGVyYXRvciwgXGltcGxvZGUoJywgJywgc2VsZjo6Z2V0U3VwcG9ydGVkT3BlcmF0b3JzKCkpKSk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5vcGVyYXRvciA9IHNlbGY6OiR0cmFuc09wU3RyWyRvcGVyYXRvcl07CiAgICAgICAgJHRoaXMtPnZlcnNpb24gPSAkdmVyc2lvbjsKICAgIH0KICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZlcnNpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmVyc2lvbjsKICAgIH0KICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAcGhwc3Rhbi1yZXR1cm4gc2VsZjo6U1RSX09QXyoKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE9wZXJhdG9yKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6JHRyYW5zT3BJbnRbJHRoaXMtPm9wZXJhdG9yXTsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtIENvbnN0cmFpbnRJbnRlcmZhY2UgJHByb3ZpZGVyCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXRjaGVzKENvbnN0cmFpbnRJbnRlcmZhY2UgJHByb3ZpZGVyKQogICAgewogICAgICAgIGlmICgkcHJvdmlkZXIgaW5zdGFuY2VvZiBzZWxmKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+bWF0Y2hTcGVjaWZpYygkcHJvdmlkZXIpOwogICAgICAgIH0KICAgICAgICAvLyB0dXJuIG1hdGNoaW5nIGFyb3VuZCB0byBmaW5kIGEgbWF0Y2gKICAgICAgICByZXR1cm4gJHByb3ZpZGVyLT5tYXRjaGVzKCR0aGlzKTsKICAgIH0KICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UHJldHR5U3RyaW5nKCRwcmV0dHlTdHJpbmcpCiAgICB7CiAgICAgICAgJHRoaXMtPnByZXR0eVN0cmluZyA9ICRwcmV0dHlTdHJpbmc7CiAgICB9CiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByZXR0eVN0cmluZygpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5wcmV0dHlTdHJpbmcpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5wcmV0dHlTdHJpbmc7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+X190b1N0cmluZygpOwogICAgfQogICAgLyoqCiAgICAgKiBHZXQgYWxsIHN1cHBvcnRlZCBjb21wYXJpc29uIG9wZXJhdG9ycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKgogICAgICogQHBocHN0YW4tcmV0dXJuIGxpc3Q8c2VsZjo6U1RSX09QXyo+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U3VwcG9ydGVkT3BlcmF0b3JzKCkKICAgIHsKICAgICAgICByZXR1cm4gXGFycmF5X2tleXMoc2VsZjo6JHRyYW5zT3BTdHIpOwogICAgfQogICAgLyoqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkb3BlcmF0b3IKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQHBocHN0YW4tcGFyYW0gIHNlbGY6OlNUUl9PUF8qICRvcGVyYXRvcgogICAgICogQHBocHN0YW4tcmV0dXJuIHNlbGY6Ok9QXyoKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRPcGVyYXRvckNvbnN0YW50KCRvcGVyYXRvcikKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6JHRyYW5zT3BTdHJbJG9wZXJhdG9yXTsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkYQogICAgICogQHBhcmFtIHN0cmluZyAkYgogICAgICogQHBhcmFtIHN0cmluZyAkb3BlcmF0b3IKICAgICAqIEBwYXJhbSBib29sICAgJGNvbXBhcmVCcmFuY2hlcwogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiBpbnZhbGlkIG9wZXJhdG9yIGlzIGdpdmVuLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBwaHBzdGFuLXBhcmFtIHNlbGY6OlNUUl9PUF8qICRvcGVyYXRvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyc2lvbkNvbXBhcmUoJGEsICRiLCAkb3BlcmF0b3IsICRjb21wYXJlQnJhbmNoZXMgPSBcZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldChzZWxmOjokdHJhbnNPcFN0clskb3BlcmF0b3JdKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihcc3ByaW50ZignSW52YWxpZCBvcGVyYXRvciAiJXMiIGdpdmVuLCBleHBlY3RlZCBvbmUgb2Y6ICVzJywgJG9wZXJhdG9yLCBcaW1wbG9kZSgnLCAnLCBzZWxmOjpnZXRTdXBwb3J0ZWRPcGVyYXRvcnMoKSkpKTsKICAgICAgICB9CiAgICAgICAgJGFJc0JyYW5jaCA9IFxzdHJwb3MoJGEsICdkZXYtJykgPT09IDA7CiAgICAgICAgJGJJc0JyYW5jaCA9IFxzdHJwb3MoJGIsICdkZXYtJykgPT09IDA7CiAgICAgICAgaWYgKCRvcGVyYXRvciA9PT0gJyE9JyAmJiAoJGFJc0JyYW5jaCB8fCAkYklzQnJhbmNoKSkgewogICAgICAgICAgICByZXR1cm4gJGEgIT09ICRiOwogICAgICAgIH0KICAgICAgICBpZiAoJGFJc0JyYW5jaCAmJiAkYklzQnJhbmNoKSB7CiAgICAgICAgICAgIHJldHVybiAkb3BlcmF0b3IgPT09ICc9PScgJiYgJGEgPT09ICRiOwogICAgICAgIH0KICAgICAgICAvLyB3aGVuIGJyYW5jaGVzIGFyZSBub3QgY29tcGFyYWJsZSwgd2UgbWFrZSBzdXJlIGRldiBicmFuY2hlcyBuZXZlciBtYXRjaCBhbnl0aGluZwogICAgICAgIGlmICghJGNvbXBhcmVCcmFuY2hlcyAmJiAoJGFJc0JyYW5jaCB8fCAkYklzQnJhbmNoKSkgewogICAgICAgICAgICByZXR1cm4gXGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gXHZlcnNpb25fY29tcGFyZSgkYSwgJGIsICRvcGVyYXRvcik7CiAgICB9CiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUoJG90aGVyT3BlcmF0b3IpCiAgICB7CiAgICAgICAgaWYgKFxzdHJwb3MoJHRoaXMtPnZlcnNpb24sICdkZXYtJykgPT09IDApIHsKICAgICAgICAgICAgaWYgKHNlbGY6Ok9QX0VRID09PSAkdGhpcy0+b3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgIGlmIChzZWxmOjpPUF9FUSA9PT0gJG90aGVyT3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gXHNwcmludGYoJyRiICYmICR2ID09PSAlcycsIFx2YXJfZXhwb3J0KCR0aGlzLT52ZXJzaW9uLCBcdHJ1ZSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHNlbGY6Ok9QX05FID09PSAkb3RoZXJPcGVyYXRvcikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBcc3ByaW50ZignISRiIHx8ICR2ICE9PSAlcycsIFx2YXJfZXhwb3J0KCR0aGlzLT52ZXJzaW9uLCBcdHJ1ZSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICdmYWxzZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHNlbGY6Ok9QX05FID09PSAkdGhpcy0+b3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgIGlmIChzZWxmOjpPUF9FUSA9PT0gJG90aGVyT3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gXHNwcmludGYoJyEkYiB8fCAkdiAhPT0gJXMnLCBcdmFyX2V4cG9ydCgkdGhpcy0+dmVyc2lvbiwgXHRydWUpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzZWxmOjpPUF9ORSA9PT0gJG90aGVyT3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RydWUnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICchJGInOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAnZmFsc2UnOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZjo6T1BfRVEgPT09ICR0aGlzLT5vcGVyYXRvcikgewogICAgICAgICAgICBpZiAoc2VsZjo6T1BfRVEgPT09ICRvdGhlck9wZXJhdG9yKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gXHNwcmludGYoJ1xcdmVyc2lvbl9jb21wYXJlKCR2LCAlcywgXCc9PVwnKScsIFx2YXJfZXhwb3J0KCR0aGlzLT52ZXJzaW9uLCBcdHJ1ZSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzZWxmOjpPUF9ORSA9PT0gJG90aGVyT3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgIHJldHVybiBcc3ByaW50ZignJGIgfHwgXFx2ZXJzaW9uX2NvbXBhcmUoJHYsICVzLCBcJyE9XCcpJywgXHZhcl9leHBvcnQoJHRoaXMtPnZlcnNpb24sIFx0cnVlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFxzcHJpbnRmKCchJGIgJiYgXFx2ZXJzaW9uX2NvbXBhcmUoJXMsICR2LCBcJyVzXCcpJywgXHZhcl9leHBvcnQoJHRoaXMtPnZlcnNpb24sIFx0cnVlKSwgc2VsZjo6JHRyYW5zT3BJbnRbJG90aGVyT3BlcmF0b3JdKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6Ok9QX05FID09PSAkdGhpcy0+b3BlcmF0b3IpIHsKICAgICAgICAgICAgaWYgKHNlbGY6Ok9QX0VRID09PSAkb3RoZXJPcGVyYXRvcikgewogICAgICAgICAgICAgICAgcmV0dXJuIFxzcHJpbnRmKCckYiB8fCAoISRiICYmIFxcdmVyc2lvbl9jb21wYXJlKCR2LCAlcywgXCchPVwnKSknLCBcdmFyX2V4cG9ydCgkdGhpcy0+dmVyc2lvbiwgXHRydWUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2VsZjo6T1BfTkUgPT09ICRvdGhlck9wZXJhdG9yKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ3RydWUnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAnISRiJzsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6Ok9QX0xUID09PSAkdGhpcy0+b3BlcmF0b3IgfHwgc2VsZjo6T1BfTEUgPT09ICR0aGlzLT5vcGVyYXRvcikgewogICAgICAgICAgICBpZiAoc2VsZjo6T1BfTFQgPT09ICRvdGhlck9wZXJhdG9yIHx8IHNlbGY6Ok9QX0xFID09PSAkb3RoZXJPcGVyYXRvcikgewogICAgICAgICAgICAgICAgcmV0dXJuICchJGInOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gJHRoaXMtPm9wZXJhdG9yIG11c3QgYmUgc2VsZjo6T1BfR1QgfHwgc2VsZjo6T1BfR0UgaGVyZQogICAgICAgICAgICBpZiAoc2VsZjo6T1BfR1QgPT09ICRvdGhlck9wZXJhdG9yIHx8IHNlbGY6Ok9QX0dFID09PSAkb3RoZXJPcGVyYXRvcikgewogICAgICAgICAgICAgICAgcmV0dXJuICchJGInOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjpPUF9ORSA9PT0gJG90aGVyT3BlcmF0b3IpIHsKICAgICAgICAgICAgcmV0dXJuICd0cnVlJzsKICAgICAgICB9CiAgICAgICAgJGNvZGVDb21wYXJpc29uID0gXHNwcmludGYoJ1xcdmVyc2lvbl9jb21wYXJlKCR2LCAlcywgXCclc1wnKScsIFx2YXJfZXhwb3J0KCR0aGlzLT52ZXJzaW9uLCBcdHJ1ZSksIHNlbGY6OiR0cmFuc09wSW50WyR0aGlzLT5vcGVyYXRvcl0pOwogICAgICAgIGlmICgkdGhpcy0+b3BlcmF0b3IgPT09IHNlbGY6Ok9QX0xFKSB7CiAgICAgICAgICAgIGlmICgkb3RoZXJPcGVyYXRvciA9PT0gc2VsZjo6T1BfR1QpIHsKICAgICAgICAgICAgICAgIHJldHVybiBcc3ByaW50ZignISRiICYmIFxcdmVyc2lvbl9jb21wYXJlKCR2LCAlcywgXCchPVwnKSAmJiAnLCBcdmFyX2V4cG9ydCgkdGhpcy0+dmVyc2lvbiwgXHRydWUpKSAuICRjb2RlQ29tcGFyaXNvbjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgkdGhpcy0+b3BlcmF0b3IgPT09IHNlbGY6Ok9QX0dFKSB7CiAgICAgICAgICAgIGlmICgkb3RoZXJPcGVyYXRvciA9PT0gc2VsZjo6T1BfTFQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBcc3ByaW50ZignISRiICYmIFxcdmVyc2lvbl9jb21wYXJlKCR2LCAlcywgXCchPVwnKSAmJiAnLCBcdmFyX2V4cG9ydCgkdGhpcy0+dmVyc2lvbiwgXHRydWUpKSAuICRjb2RlQ29tcGFyaXNvbjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gXHNwcmludGYoJyEkYiAmJiAlcycsICRjb2RlQ29tcGFyaXNvbik7CiAgICB9CiAgICAvKioKICAgICAqIEBwYXJhbSBDb25zdHJhaW50ICRwcm92aWRlcgogICAgICogQHBhcmFtIGJvb2wgICAgICAgJGNvbXBhcmVCcmFuY2hlcwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWF0Y2hTcGVjaWZpYyhDb25zdHJhaW50ICRwcm92aWRlciwgJGNvbXBhcmVCcmFuY2hlcyA9IFxmYWxzZSkKICAgIHsKICAgICAgICAkbm9FcXVhbE9wID0gXHN0cl9yZXBsYWNlKCc9JywgJycsIHNlbGY6OiR0cmFuc09wSW50WyR0aGlzLT5vcGVyYXRvcl0pOwogICAgICAgICRwcm92aWRlck5vRXF1YWxPcCA9IFxzdHJfcmVwbGFjZSgnPScsICcnLCBzZWxmOjokdHJhbnNPcEludFskcHJvdmlkZXItPm9wZXJhdG9yXSk7CiAgICAgICAgJGlzRXF1YWxPcCA9IHNlbGY6Ok9QX0VRID09PSAkdGhpcy0+b3BlcmF0b3I7CiAgICAgICAgJGlzTm9uRXF1YWxPcCA9IHNlbGY6Ok9QX05FID09PSAkdGhpcy0+b3BlcmF0b3I7CiAgICAgICAgJGlzUHJvdmlkZXJFcXVhbE9wID0gc2VsZjo6T1BfRVEgPT09ICRwcm92aWRlci0+b3BlcmF0b3I7CiAgICAgICAgJGlzUHJvdmlkZXJOb25FcXVhbE9wID0gc2VsZjo6T1BfTkUgPT09ICRwcm92aWRlci0+b3BlcmF0b3I7CiAgICAgICAgLy8gJyE9JyBvcGVyYXRvciBpcyBtYXRjaCB3aGVuIG90aGVyIG9wZXJhdG9yIGlzIG5vdCAnPT0nIG9wZXJhdG9yIG9yIHZlcnNpb24gaXMgbm90IG1hdGNoCiAgICAgICAgLy8gdGhlc2Uga2luZHMgb2YgY29tcGFyaXNvbnMgYWx3YXlzIGhhdmUgYSBzb2x1dGlvbgogICAgICAgIGlmICgkaXNOb25FcXVhbE9wIHx8ICRpc1Byb3ZpZGVyTm9uRXF1YWxPcCkgewogICAgICAgICAgICBpZiAoJGlzTm9uRXF1YWxPcCAmJiAhJGlzUHJvdmlkZXJOb25FcXVhbE9wICYmICEkaXNQcm92aWRlckVxdWFsT3AgJiYgXHN0cnBvcygkcHJvdmlkZXItPnZlcnNpb24sICdkZXYtJykgPT09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiBcZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRpc1Byb3ZpZGVyTm9uRXF1YWxPcCAmJiAhJGlzTm9uRXF1YWxPcCAmJiAhJGlzRXF1YWxPcCAmJiBcc3RycG9zKCR0aGlzLT52ZXJzaW9uLCAnZGV2LScpID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gXGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghJGlzRXF1YWxPcCAmJiAhJGlzUHJvdmlkZXJFcXVhbE9wKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gXHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT52ZXJzaW9uQ29tcGFyZSgkcHJvdmlkZXItPnZlcnNpb24sICR0aGlzLT52ZXJzaW9uLCAnIT0nLCAkY29tcGFyZUJyYW5jaGVzKTsKICAgICAgICB9CiAgICAgICAgLy8gYW4gZXhhbXBsZSBmb3IgdGhlIGNvbmRpdGlvbiBpcyA8PSAyLjAgJiA8IDEuMAogICAgICAgIC8vIHRoZXNlIGtpbmRzIG9mIGNvbXBhcmlzb25zIGFsd2F5cyBoYXZlIGEgc29sdXRpb24KICAgICAgICBpZiAoJHRoaXMtPm9wZXJhdG9yICE9PSBzZWxmOjpPUF9FUSAmJiAkbm9FcXVhbE9wID09PSAkcHJvdmlkZXJOb0VxdWFsT3ApIHsKICAgICAgICAgICAgcmV0dXJuICEoXHN0cnBvcygkdGhpcy0+dmVyc2lvbiwgJ2Rldi0nKSA9PT0gMCB8fCBcc3RycG9zKCRwcm92aWRlci0+dmVyc2lvbiwgJ2Rldi0nKSA9PT0gMCk7CiAgICAgICAgfQogICAgICAgICR2ZXJzaW9uMSA9ICRpc0VxdWFsT3AgPyAkdGhpcy0+dmVyc2lvbiA6ICRwcm92aWRlci0+dmVyc2lvbjsKICAgICAgICAkdmVyc2lvbjIgPSAkaXNFcXVhbE9wID8gJHByb3ZpZGVyLT52ZXJzaW9uIDogJHRoaXMtPnZlcnNpb247CiAgICAgICAgJG9wZXJhdG9yID0gJGlzRXF1YWxPcCA/ICRwcm92aWRlci0+b3BlcmF0b3IgOiAkdGhpcy0+b3BlcmF0b3I7CiAgICAgICAgaWYgKCR0aGlzLT52ZXJzaW9uQ29tcGFyZSgkdmVyc2lvbjEsICR2ZXJzaW9uMiwgc2VsZjo6JHRyYW5zT3BJbnRbJG9wZXJhdG9yXSwgJGNvbXBhcmVCcmFuY2hlcykpIHsKICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlLCBlLmcuIHJlcXVpcmUgPj0gMS4wIGFuZCBwcm92aWRlIDwgMS4wCiAgICAgICAgICAgIC8vIDEuMCA+PSAxLjAgYnV0IDEuMCBpcyBvdXRzaWRlIG9mIHRoZSBwcm92aWRlZCBpbnRlcnZhbAogICAgICAgICAgICByZXR1cm4gIShzZWxmOjokdHJhbnNPcEludFskcHJvdmlkZXItPm9wZXJhdG9yXSA9PT0gJHByb3ZpZGVyTm9FcXVhbE9wICYmIHNlbGY6OiR0cmFuc09wSW50WyR0aGlzLT5vcGVyYXRvcl0gIT09ICRub0VxdWFsT3AgJiYgXHZlcnNpb25fY29tcGFyZSgkcHJvdmlkZXItPnZlcnNpb24sICR0aGlzLT52ZXJzaW9uLCAnPT0nKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBcZmFsc2U7CiAgICB9CiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6JHRyYW5zT3BJbnRbJHRoaXMtPm9wZXJhdG9yXSAuICcgJyAuICR0aGlzLT52ZXJzaW9uOwogICAgfQogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb3dlckJvdW5kKCkKICAgIHsKICAgICAgICAkdGhpcy0+ZXh0cmFjdEJvdW5kcygpOwogICAgICAgIHJldHVybiAkdGhpcy0+bG93ZXJCb3VuZDsKICAgIH0KICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXBwZXJCb3VuZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmV4dHJhY3RCb3VuZHMoKTsKICAgICAgICByZXR1cm4gJHRoaXMtPnVwcGVyQm91bmQ7CiAgICB9CiAgICAvKioKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGV4dHJhY3RCb3VuZHMoKQogICAgewogICAgICAgIGlmIChudWxsICE9PSAkdGhpcy0+bG93ZXJCb3VuZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC8vIEJyYW5jaGVzCiAgICAgICAgaWYgKFxzdHJwb3MoJHRoaXMtPnZlcnNpb24sICdkZXYtJykgPT09IDApIHsKICAgICAgICAgICAgJHRoaXMtPmxvd2VyQm91bmQgPSBCb3VuZDo6emVybygpOwogICAgICAgICAgICAkdGhpcy0+dXBwZXJCb3VuZCA9IEJvdW5kOjpwb3NpdGl2ZUluZmluaXR5KCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICgkdGhpcy0+b3BlcmF0b3IpIHsKICAgICAgICAgICAgY2FzZSBzZWxmOjpPUF9FUToKICAgICAgICAgICAgICAgICR0aGlzLT5sb3dlckJvdW5kID0gbmV3IEJvdW5kKCR0aGlzLT52ZXJzaW9uLCBcdHJ1ZSk7CiAgICAgICAgICAgICAgICAkdGhpcy0+dXBwZXJCb3VuZCA9IG5ldyBCb3VuZCgkdGhpcy0+dmVyc2lvbiwgXHRydWUpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ugc2VsZjo6T1BfTFQ6CiAgICAgICAgICAgICAgICAkdGhpcy0+bG93ZXJCb3VuZCA9IEJvdW5kOjp6ZXJvKCk7CiAgICAgICAgICAgICAgICAkdGhpcy0+dXBwZXJCb3VuZCA9IG5ldyBCb3VuZCgkdGhpcy0+dmVyc2lvbiwgXGZhbHNlKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHNlbGY6Ok9QX0xFOgogICAgICAgICAgICAgICAgJHRoaXMtPmxvd2VyQm91bmQgPSBCb3VuZDo6emVybygpOwogICAgICAgICAgICAgICAgJHRoaXMtPnVwcGVyQm91bmQgPSBuZXcgQm91bmQoJHRoaXMtPnZlcnNpb24sIFx0cnVlKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHNlbGY6Ok9QX0dUOgogICAgICAgICAgICAgICAgJHRoaXMtPmxvd2VyQm91bmQgPSBuZXcgQm91bmQoJHRoaXMtPnZlcnNpb24sIFxmYWxzZSk7CiAgICAgICAgICAgICAgICAkdGhpcy0+dXBwZXJCb3VuZCA9IEJvdW5kOjpwb3NpdGl2ZUluZmluaXR5KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBzZWxmOjpPUF9HRToKICAgICAgICAgICAgICAgICR0aGlzLT5sb3dlckJvdW5kID0gbmV3IEJvdW5kKCR0aGlzLT52ZXJzaW9uLCBcdHJ1ZSk7CiAgICAgICAgICAgICAgICAkdGhpcy0+dXBwZXJCb3VuZCA9IEJvdW5kOjpwb3NpdGl2ZUluZmluaXR5KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBzZWxmOjpPUF9ORToKICAgICAgICAgICAgICAgICR0aGlzLT5sb3dlckJvdW5kID0gQm91bmQ6Onplcm8oKTsKICAgICAgICAgICAgICAgICR0aGlzLT51cHBlckJvdW5kID0gQm91bmQ6OnBvc2l0aXZlSW5maW5pdHkoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KfQo8P3BocAoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgY29tcG9zZXIvc2VtdmVyLgogKgogKiAoYykgQ29tcG9zZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlcj4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcKICogdGhlIExJQ0VOU0UgZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwpuYW1lc3BhY2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFNlbXZlclxDb25zdHJhaW50OwoKY2xhc3MgQm91bmQKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlICR2ZXJzaW9uOwogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkaXNJbmNsdXNpdmU7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24KICAgICAqIEBwYXJhbSBib29sICAgJGlzSW5jbHVzaXZlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmVyc2lvbiwgJGlzSW5jbHVzaXZlKQogICAgewogICAgICAgICR0aGlzLT52ZXJzaW9uID0gJHZlcnNpb247CiAgICAgICAgJHRoaXMtPmlzSW5jbHVzaXZlID0gJGlzSW5jbHVzaXZlOwogICAgfQogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52ZXJzaW9uOwogICAgfQogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzSW5jbHVzaXZlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlzSW5jbHVzaXZlOwogICAgfQogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzWmVybygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRWZXJzaW9uKCkgPT09ICcwLjAuMC4wLWRldicgJiYgJHRoaXMtPmlzSW5jbHVzaXZlKCk7CiAgICB9CiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQb3NpdGl2ZUluZmluaXR5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFZlcnNpb24oKSA9PT0gXFBIUF9JTlRfTUFYIC4gJy4wLjAuMCcgJiYgISR0aGlzLT5pc0luY2x1c2l2ZSgpOwogICAgfQogICAgLyoqCiAgICAgKiBDb21wYXJlcyBhIGJvdW5kIHRvIGFub3RoZXIgd2l0aCBhIGdpdmVuIG9wZXJhdG9yLgogICAgICoKICAgICAqIEBwYXJhbSBCb3VuZCAgJG90aGVyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcGVyYXRvcgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZVRvKEJvdW5kICRvdGhlciwgJG9wZXJhdG9yKQogICAgewogICAgICAgIGlmICghXGluX2FycmF5KCRvcGVyYXRvciwgYXJyYXkoJzwnLCAnPicpLCBcdHJ1ZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0RvZXMgbm90IHN1cHBvcnQgYW55IG90aGVyIG9wZXJhdG9yIG90aGVyIHRoYW4gPiBvciA8LicpOwogICAgICAgIH0KICAgICAgICAvLyBJZiB0aGV5IGFyZSB0aGUgc2FtZSBpdCBkb2Vzbid0IG1hdHRlcgogICAgICAgIGlmICgkdGhpcyA9PSAkb3RoZXIpIHsKICAgICAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgICAgICB9CiAgICAgICAgJGNvbXBhcmVSZXN1bHQgPSBcdmVyc2lvbl9jb21wYXJlKCR0aGlzLT5nZXRWZXJzaW9uKCksICRvdGhlci0+Z2V0VmVyc2lvbigpKTsKICAgICAgICAvLyBOb3QgdGhlIHNhbWUgdmVyc2lvbiBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBib3VuZHMgYXJlIGluY2x1c2l2ZSBvciBub3QKICAgICAgICBpZiAoMCAhPT0gJGNvbXBhcmVSZXN1bHQpIHsKICAgICAgICAgICAgcmV0dXJuICgnPicgPT09ICRvcGVyYXRvciA/IDEgOiAtMSkgPT09ICRjb21wYXJlUmVzdWx0OwogICAgICAgIH0KICAgICAgICAvLyBRdWVzdGlvbiB3ZSdyZSBhbnN3ZXJpbmcgaGVyZSBpcyAiYW0gSSBoaWdoZXIgdGhhbiAkb3RoZXI/IgogICAgICAgIHJldHVybiAnPicgPT09ICRvcGVyYXRvciA/ICRvdGhlci0+aXNJbmNsdXNpdmUoKSA6ICEkb3RoZXItPmlzSW5jbHVzaXZlKCk7CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuIFxzcHJpbnRmKCclcyBbJXNdJywgJHRoaXMtPmdldFZlcnNpb24oKSwgJHRoaXMtPmlzSW5jbHVzaXZlKCkgPyAnaW5jbHVzaXZlJyA6ICdleGNsdXNpdmUnKTsKICAgIH0KICAgIC8qKgogICAgICogQHJldHVybiBzZWxmCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gemVybygpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBCb3VuZCgnMC4wLjAuMC1kZXYnLCBcdHJ1ZSk7CiAgICB9CiAgICAvKioKICAgICAqIEByZXR1cm4gc2VsZgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBvc2l0aXZlSW5maW5pdHkoKQogICAgewogICAgICAgIHJldHVybiBuZXcgQm91bmQoXFBIUF9JTlRfTUFYIC4gJy4wLjAuMCcsIFxmYWxzZSk7CiAgICB9Cn0KPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNvbXBvc2VyL3NlbXZlci4KICoKICogKGMpIENvbXBvc2VyIDxodHRwczovL2dpdGh1Yi5jb20vY29tcG9zZXI+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3CiAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxTZW12ZXJcQ29uc3RyYWludDsKCi8qKgogKiBETyBOT1QgSU1QTEVNRU5UIHRoaXMgaW50ZXJmYWNlLiBJdCBpcyBvbmx5IG1lYW50IGZvciB1c2FnZSBhcyBhIHR5cGUgaGludAogKiBpbiBsaWJyYXJpZXMgcmVseWluZyBvbiBjb21wb3Nlci9zZW12ZXIgYnV0IGNyZWF0aW5nIHlvdXIgb3duIGNvbnN0cmFpbnQgY2xhc3MKICogdGhhdCBpbXBsZW1lbnRzIHRoaXMgaW50ZXJmYWNlIGlzIG5vdCBhIHN1cHBvcnRlZCB1c2UgY2FzZSBhbmQgd2lsbCBjYXVzZSB0aGUKICogY29tcG9zZXIvc2VtdmVyIGNvbXBvbmVudHMgdG8gcmV0dXJuIHVuZXhwZWN0ZWQgcmVzdWx0cy4KICovCmludGVyZmFjZSBDb25zdHJhaW50SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGNvbnN0cmFpbnQgaW50ZXJzZWN0cyBpbiBhbnkgd2F5IHdpdGggdGhpcyBjb25zdHJhaW50CiAgICAgKgogICAgICogQHBhcmFtIENvbnN0cmFpbnRJbnRlcmZhY2UgJHByb3ZpZGVyCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXRjaGVzKENvbnN0cmFpbnRJbnRlcmZhY2UgJHByb3ZpZGVyKTsKICAgIC8qKgogICAgICogUHJvdmlkZXMgYSBjb21waWxlZCB2ZXJzaW9uIG9mIHRoZSBjb25zdHJhaW50IGZvciB0aGUgZ2l2ZW4gb3BlcmF0b3IKICAgICAqIFRoZSBjb21waWxlZCB2ZXJzaW9uIG11c3QgYmUgYSBQSFAgZXhwcmVzc2lvbi4KICAgICAqIEV4ZWN1dG9yIG9mIGNvbXBpbGUgdmVyc2lvbiBtdXN0IHByb3ZpZGUgMiB2YXJpYWJsZXM6CiAgICAgKiAtICR2ID0gdGhlIHN0cmluZyB2ZXJzaW9uIHRvIGNvbXBhcmUgd2l0aAogICAgICogLSAkYiA9IHdoZXRoZXIgb3Igbm90IHRoZSB2ZXJzaW9uIGlzIGEgbm9uLWNvbXBhcmFibGUgYnJhbmNoIChzdGFydHMgd2l0aCAiZGV2LSIpCiAgICAgKgogICAgICogQHNlZSBDb25zdHJhaW50OjpPUF8qIGZvciB0aGUgbGlzdCBvZiBhdmFpbGFibGUgb3BlcmF0b3JzLgogICAgICogQGV4YW1wbGUgcmV0dXJuICchJGIgJiYgdmVyc2lvbl9jb21wYXJlKCR2LCAnMS4wJywgJz4nKSc7CiAgICAgKgogICAgICogQHBhcmFtIGludCAkb3RoZXJPcGVyYXRvciBvbmUgQ29uc3RyYWludDo6T1BfKgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQHBocHN0YW4tcGFyYW0gQ29uc3RyYWludDo6T1BfKiAkb3RoZXJPcGVyYXRvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSgkb3RoZXJPcGVyYXRvcik7CiAgICAvKioKICAgICAqIEByZXR1cm4gQm91bmQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVwcGVyQm91bmQoKTsKICAgIC8qKgogICAgICogQHJldHVybiBCb3VuZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG93ZXJCb3VuZCgpOwogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJldHR5U3RyaW5nKCk7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJldHR5U3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQcmV0dHlTdHJpbmcoJHByZXR0eVN0cmluZyk7CiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk7Cn0KPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNvbXBvc2VyL3NlbXZlci4KICoKICogKGMpIENvbXBvc2VyIDxodHRwczovL2dpdGh1Yi5jb20vY29tcG9zZXI+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3CiAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxTZW12ZXJcQ29uc3RyYWludDsKCi8qKgogKiBCbGFja2hvbGUgb2YgY29uc3RyYWludHMsIG5vdGhpbmcgZXNjYXBlcyBpdAogKi8KY2xhc3MgTWF0Y2hOb25lQ29uc3RyYWludCBpbXBsZW1lbnRzIENvbnN0cmFpbnRJbnRlcmZhY2UKewogICAgLyoqIEB2YXIgc3RyaW5nfG51bGwgKi8KICAgIHByb3RlY3RlZCAkcHJldHR5U3RyaW5nOwogICAgLyoqCiAgICAgKiBAcGFyYW0gQ29uc3RyYWludEludGVyZmFjZSAkcHJvdmlkZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1hdGNoZXMoQ29uc3RyYWludEludGVyZmFjZSAkcHJvdmlkZXIpCiAgICB7CiAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgIH0KICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSgkb3RoZXJPcGVyYXRvcikKICAgIHsKICAgICAgICByZXR1cm4gJ2ZhbHNlJzsKICAgIH0KICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UHJldHR5U3RyaW5nKCRwcmV0dHlTdHJpbmcpCiAgICB7CiAgICAgICAgJHRoaXMtPnByZXR0eVN0cmluZyA9ICRwcmV0dHlTdHJpbmc7CiAgICB9CiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByZXR0eVN0cmluZygpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5wcmV0dHlTdHJpbmcpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5wcmV0dHlTdHJpbmc7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoc3RyaW5nKSAkdGhpczsKICAgIH0KICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuICdbXSc7CiAgICB9CiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVwcGVyQm91bmQoKQogICAgewogICAgICAgIHJldHVybiBuZXcgQm91bmQoJzAuMC4wLjAtZGV2JywgXGZhbHNlKTsKICAgIH0KICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG93ZXJCb3VuZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBCb3VuZCgnMC4wLjAuMC1kZXYnLCBcZmFsc2UpOwogICAgfQp9Cjw/cGhwCgovKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBjb21wb3Nlci9zZW12ZXIuCiAqCiAqIChjKSBDb21wb3NlciA8aHR0cHM6Ly9naXRodWIuY29tL2NvbXBvc2VyPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldwogKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCm5hbWVzcGFjZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcU2VtdmVyXENvbnN0cmFpbnQ7CgovKioKICogRGVmaW5lcyB0aGUgYWJzZW5jZSBvZiBhIGNvbnN0cmFpbnQuCiAqCiAqIFRoaXMgY29uc3RyYWludCBtYXRjaGVzIGV2ZXJ5dGhpbmcuCiAqLwpjbGFzcyBNYXRjaEFsbENvbnN0cmFpbnQgaW1wbGVtZW50cyBDb25zdHJhaW50SW50ZXJmYWNlCnsKICAgIC8qKiBAdmFyIHN0cmluZ3xudWxsICovCiAgICBwcm90ZWN0ZWQgJHByZXR0eVN0cmluZzsKICAgIC8qKgogICAgICogQHBhcmFtIENvbnN0cmFpbnRJbnRlcmZhY2UgJHByb3ZpZGVyCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXRjaGVzKENvbnN0cmFpbnRJbnRlcmZhY2UgJHByb3ZpZGVyKQogICAgewogICAgICAgIHJldHVybiBcdHJ1ZTsKICAgIH0KICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGlsZSgkb3RoZXJPcGVyYXRvcikKICAgIHsKICAgICAgICByZXR1cm4gJ3RydWUnOwogICAgfQogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQcmV0dHlTdHJpbmcoJHByZXR0eVN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+cHJldHR5U3RyaW5nID0gJHByZXR0eVN0cmluZzsKICAgIH0KICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJldHR5U3RyaW5nKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnByZXR0eVN0cmluZykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnByZXR0eVN0cmluZzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIChzdHJpbmcpICR0aGlzOwogICAgfQogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gJyonOwogICAgfQogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcHBlckJvdW5kKCkKICAgIHsKICAgICAgICByZXR1cm4gQm91bmQ6OnBvc2l0aXZlSW5maW5pdHkoKTsKICAgIH0KICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG93ZXJCb3VuZCgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJvdW5kOjp6ZXJvKCk7CiAgICB9Cn0KPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNvbXBvc2VyL3NlbXZlci4KICoKICogKGMpIENvbXBvc2VyIDxodHRwczovL2dpdGh1Yi5jb20vY29tcG9zZXI+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3CiAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxTZW12ZXJcQ29uc3RyYWludDsKCi8qKgogKiBEZWZpbmVzIGEgY29uanVuY3RpdmUgb3IgZGlzanVuY3RpdmUgc2V0IG9mIGNvbnN0cmFpbnRzLgogKi8KY2xhc3MgTXVsdGlDb25zdHJhaW50IGltcGxlbWVudHMgQ29uc3RyYWludEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgQ29uc3RyYWludEludGVyZmFjZVtdCiAgICAgKiBAcGhwc3Rhbi12YXIgbm9uLWVtcHR5LWFycmF5PENvbnN0cmFpbnRJbnRlcmZhY2U+CiAgICAgKi8KICAgIHByb3RlY3RlZCAkY29uc3RyYWludHM7CiAgICAvKiogQHZhciBzdHJpbmd8bnVsbCAqLwogICAgcHJvdGVjdGVkICRwcmV0dHlTdHJpbmc7CiAgICAvKiogQHZhciBzdHJpbmd8bnVsbCAqLwogICAgcHJvdGVjdGVkICRzdHJpbmc7CiAgICAvKiogQHZhciBib29sICovCiAgICBwcm90ZWN0ZWQgJGNvbmp1bmN0aXZlOwogICAgLyoqIEB2YXIgQm91bmR8bnVsbCAqLwogICAgcHJvdGVjdGVkICRsb3dlckJvdW5kOwogICAgLyoqIEB2YXIgQm91bmR8bnVsbCAqLwogICAgcHJvdGVjdGVkICR1cHBlckJvdW5kOwogICAgLyoqCiAgICAgKiBAcGFyYW0gQ29uc3RyYWludEludGVyZmFjZVtdICRjb25zdHJhaW50cyBBIHNldCBvZiBjb25zdHJhaW50cwogICAgICogQHBhcmFtIGJvb2wgICAgICAgICAgICAgICAgICAkY29uanVuY3RpdmUgV2hldGhlciB0aGUgY29uc3RyYWludHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgY29uanVuY3RpdmUgb3IgZGlzanVuY3RpdmUKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgbGVzcyB0aGFuIDIgY29uc3RyYWludHMgYXJlIHBhc3NlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGNvbnN0cmFpbnRzLCAkY29uanVuY3RpdmUgPSBcdHJ1ZSkKICAgIHsKICAgICAgICBpZiAoXGNvdW50KCRjb25zdHJhaW50cykgPCAyKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdNdXN0IHByb3ZpZGUgYXQgbGVhc3QgdHdvIGNvbnN0cmFpbnRzIGZvciBhIE11bHRpQ29uc3RyYWludC4gVXNlICcgLiAndGhlIHJlZ3VsYXIgQ29uc3RyYWludCBjbGFzcyBmb3Igb25lIGNvbnN0cmFpbnQgb25seSBvciBNYXRjaEFsbENvbnN0cmFpbnQgZm9yIG5vbmUuIFlvdSBtYXkgdXNlICcgLiAnTXVsdGlDb25zdHJhaW50OjpjcmVhdGUoKSB3aGljaCBvcHRpbWl6ZXMgYW5kIGhhbmRsZXMgdGhvc2UgY2FzZXMgYXV0b21hdGljYWxseS4nKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmNvbnN0cmFpbnRzID0gJGNvbnN0cmFpbnRzOwogICAgICAgICR0aGlzLT5jb25qdW5jdGl2ZSA9ICRjb25qdW5jdGl2ZTsKICAgIH0KICAgIC8qKgogICAgICogQHJldHVybiBDb25zdHJhaW50SW50ZXJmYWNlW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnN0cmFpbnRzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbnN0cmFpbnRzOwogICAgfQogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzQ29uanVuY3RpdmUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29uanVuY3RpdmU7CiAgICB9CiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNEaXNqdW5jdGl2ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICEkdGhpcy0+Y29uanVuY3RpdmU7CiAgICB9CiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBpbGUoJG90aGVyT3BlcmF0b3IpCiAgICB7CiAgICAgICAgJHBhcnRzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y29uc3RyYWludHMgYXMgJGNvbnN0cmFpbnQpIHsKICAgICAgICAgICAgJGNvZGUgPSAkY29uc3RyYWludC0+Y29tcGlsZSgkb3RoZXJPcGVyYXRvcik7CiAgICAgICAgICAgIGlmICgkY29kZSA9PT0gJ3RydWUnKSB7CiAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5jb25qdW5jdGl2ZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAndHJ1ZSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICgkY29kZSA9PT0gJ2ZhbHNlJykgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5jb25qdW5jdGl2ZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnZmFsc2UnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHBhcnRzW10gPSAnKCcgLiAkY29kZSAuICcpJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoISRwYXJ0cykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmNvbmp1bmN0aXZlID8gJ3RydWUnIDogJ2ZhbHNlJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb25qdW5jdGl2ZSA/IFxpbXBsb2RlKCcmJicsICRwYXJ0cykgOiBcaW1wbG9kZSgnfHwnLCAkcGFydHMpOwogICAgfQogICAgLyoqCiAgICAgKiBAcGFyYW0gQ29uc3RyYWludEludGVyZmFjZSAkcHJvdmlkZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1hdGNoZXMoQ29uc3RyYWludEludGVyZmFjZSAkcHJvdmlkZXIpCiAgICB7CiAgICAgICAgaWYgKFxmYWxzZSA9PT0gJHRoaXMtPmNvbmp1bmN0aXZlKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jb25zdHJhaW50cyBhcyAkY29uc3RyYWludCkgewogICAgICAgICAgICAgICAgaWYgKCRwcm92aWRlci0+bWF0Y2hlcygkY29uc3RyYWludCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gXHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgICAgICB9CiAgICAgICAgLy8gd2hlbiBtYXRjaGluZyBhIGNvbmp1bmN0aXZlIGFuZCBhIGRpc2p1bmN0aXZlIG11bHRpIGNvbnN0cmFpbnQgd2UgaGF2ZSB0byBpdGVyYXRlIG92ZXIgdGhlIGRpc2p1bmN0aXZlIG9uZQogICAgICAgIC8vIG90aGVyd2lzZSB3ZSdkIHJldHVybiB0cnVlIGlmIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgZGlzanVuY3RpdmUgY29uc3RyYWludCBtYXRjaCB0aGUgY29uanVuY3RpdmUgb25lCiAgICAgICAgLy8gd2hpY2ggd291bGQgbGVhZCB0byBpbmNvcnJlY3QgcmVzdWx0cywgZS5nLiBbPjEgYW5kIDwyXSB3b3VsZCBtYXRjaCBbPDEgb3IgPjJdIGFsdGhvdWdoIHRoZXkgZG8gbm90IGludGVyc2VjdAogICAgICAgIGlmICgkcHJvdmlkZXIgaW5zdGFuY2VvZiBNdWx0aUNvbnN0cmFpbnQgJiYgJHByb3ZpZGVyLT5pc0Rpc2p1bmN0aXZlKCkpIHsKICAgICAgICAgICAgcmV0dXJuICRwcm92aWRlci0+bWF0Y2hlcygkdGhpcyk7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jb25zdHJhaW50cyBhcyAkY29uc3RyYWludCkgewogICAgICAgICAgICBpZiAoISRwcm92aWRlci0+bWF0Y2hlcygkY29uc3RyYWludCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBcZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIFx0cnVlOwogICAgfQogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQcmV0dHlTdHJpbmcoJHByZXR0eVN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+cHJldHR5U3RyaW5nID0gJHByZXR0eVN0cmluZzsKICAgIH0KICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJldHR5U3RyaW5nKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnByZXR0eVN0cmluZykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnByZXR0eVN0cmluZzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIChzdHJpbmcpICR0aGlzOwogICAgfQogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnN0cmluZyAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmluZzsKICAgICAgICB9CiAgICAgICAgJGNvbnN0cmFpbnRzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y29uc3RyYWludHMgYXMgJGNvbnN0cmFpbnQpIHsKICAgICAgICAgICAgJGNvbnN0cmFpbnRzW10gPSAoc3RyaW5nKSAkY29uc3RyYWludDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJpbmcgPSAnWycgLiBcaW1wbG9kZSgkdGhpcy0+Y29uanVuY3RpdmUgPyAnICcgOiAnIHx8ICcsICRjb25zdHJhaW50cykgLiAnXSc7CiAgICB9CiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExvd2VyQm91bmQoKQogICAgewogICAgICAgICR0aGlzLT5leHRyYWN0Qm91bmRzKCk7CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5sb3dlckJvdW5kKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ2V4dHJhY3RCb3VuZHMgc2hvdWxkIGhhdmUgcG9wdWxhdGVkIHRoZSBsb3dlckJvdW5kIHByb3BlcnR5Jyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+bG93ZXJCb3VuZDsKICAgIH0KICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXBwZXJCb3VuZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmV4dHJhY3RCb3VuZHMoKTsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPnVwcGVyQm91bmQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignZXh0cmFjdEJvdW5kcyBzaG91bGQgaGF2ZSBwb3B1bGF0ZWQgdGhlIHVwcGVyQm91bmQgcHJvcGVydHknKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT51cHBlckJvdW5kOwogICAgfQogICAgLyoqCiAgICAgKiBUcmllcyB0byBvcHRpbWl6ZSB0aGUgY29uc3RyYWludHMgYXMgbXVjaCBhcyBwb3NzaWJsZSwgbWVhbmluZwogICAgICogcmVkdWNpbmcvY29sbGFwc2luZyBjb25ncnVlbnQgY29uc3RyYWludHMgZXRjLgogICAgICogRG9lcyBub3QgbmVjZXNzYXJpbHkgcmV0dXJuIGEgTXVsdGlDb25zdHJhaW50IGluc3RhbmNlIGlmCiAgICAgKiB0aGluZ3MgY2FuIGJlIHJlZHVjZWQgdG8gYSBzaW1wbGUgY29uc3RyYWludAogICAgICoKICAgICAqIEBwYXJhbSBDb25zdHJhaW50SW50ZXJmYWNlW10gJGNvbnN0cmFpbnRzIEEgc2V0IG9mIGNvbnN0cmFpbnRzCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAgICAgICAgICAgICRjb25qdW5jdGl2ZSBXaGV0aGVyIHRoZSBjb25zdHJhaW50cyBzaG91bGQgYmUgdHJlYXRlZCBhcyBjb25qdW5jdGl2ZSBvciBkaXNqdW5jdGl2ZQogICAgICoKICAgICAqIEByZXR1cm4gQ29uc3RyYWludEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShhcnJheSAkY29uc3RyYWludHMsICRjb25qdW5jdGl2ZSA9IFx0cnVlKQogICAgewogICAgICAgIGlmICgwID09PSBcY291bnQoJGNvbnN0cmFpbnRzKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IE1hdGNoQWxsQ29uc3RyYWludCgpOwogICAgICAgIH0KICAgICAgICBpZiAoMSA9PT0gXGNvdW50KCRjb25zdHJhaW50cykpIHsKICAgICAgICAgICAgcmV0dXJuICRjb25zdHJhaW50c1swXTsKICAgICAgICB9CiAgICAgICAgJG9wdGltaXplZCA9IHNlbGY6Om9wdGltaXplQ29uc3RyYWludHMoJGNvbnN0cmFpbnRzLCAkY29uanVuY3RpdmUpOwogICAgICAgIGlmICgkb3B0aW1pemVkICE9PSBudWxsKSB7CiAgICAgICAgICAgIGxpc3QoJGNvbnN0cmFpbnRzLCAkY29uanVuY3RpdmUpID0gJG9wdGltaXplZDsKICAgICAgICAgICAgaWYgKFxjb3VudCgkY29uc3RyYWludHMpID09PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGNvbnN0cmFpbnRzWzBdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgc2VsZigkY29uc3RyYWludHMsICRjb25qdW5jdGl2ZSk7CiAgICB9CiAgICAvKioKICAgICAqIEBwYXJhbSAgQ29uc3RyYWludEludGVyZmFjZVtdICRjb25zdHJhaW50cwogICAgICogQHBhcmFtICBib29sICAgICAgICAgICAgICAgICAgJGNvbmp1bmN0aXZlCiAgICAgKiBAcmV0dXJuID9hcnJheQogICAgICoKICAgICAqIEBwaHBzdGFuLXJldHVybiBhcnJheXswOiBsaXN0PENvbnN0cmFpbnRJbnRlcmZhY2U+LCAxOiBib29sfXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIG9wdGltaXplQ29uc3RyYWludHMoYXJyYXkgJGNvbnN0cmFpbnRzLCAkY29uanVuY3RpdmUpCiAgICB7CiAgICAgICAgLy8gcGFyc2UgdGhlIHR3byBPUiBncm91cHMgYW5kIGlmIHRoZXkgYXJlIGNvbnRpZ3VvdXMgd2UgY29sbGFwc2UKICAgICAgICAvLyB0aGVtIGludG8gb25lIGNvbnN0cmFpbnQKICAgICAgICAvLyBbPj0gMSA8IDJdIHx8IFs+PSAyIDwgM10gfHwgWz49IDMgPCA0XSA9PiBbPj0gMSA8IDRdCiAgICAgICAgaWYgKCEkY29uanVuY3RpdmUpIHsKICAgICAgICAgICAgJGxlZnQgPSAkY29uc3RyYWludHNbMF07CiAgICAgICAgICAgICRtZXJnZWRDb25zdHJhaW50cyA9IGFycmF5KCk7CiAgICAgICAgICAgICRvcHRpbWl6ZWQgPSBcZmFsc2U7CiAgICAgICAgICAgIGZvciAoJGkgPSAxLCAkbCA9IFxjb3VudCgkY29uc3RyYWludHMpOyAkaSA8ICRsOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAkcmlnaHQgPSAkY29uc3RyYWludHNbJGldOwogICAgICAgICAgICAgICAgaWYgKCRsZWZ0IGluc3RhbmNlb2Ygc2VsZiAmJiAkbGVmdC0+Y29uanVuY3RpdmUgJiYgJHJpZ2h0IGluc3RhbmNlb2Ygc2VsZiAmJiAkcmlnaHQtPmNvbmp1bmN0aXZlICYmIFxjb3VudCgkbGVmdC0+Y29uc3RyYWludHMpID09PSAyICYmIFxjb3VudCgkcmlnaHQtPmNvbnN0cmFpbnRzKSA9PT0gMiAmJiAoJGxlZnQwID0gKHN0cmluZykgJGxlZnQtPmNvbnN0cmFpbnRzWzBdKSAmJiAkbGVmdDBbMF0gPT09ICc+JyAmJiAkbGVmdDBbMV0gPT09ICc9JyAmJiAoJGxlZnQxID0gKHN0cmluZykgJGxlZnQtPmNvbnN0cmFpbnRzWzFdKSAmJiAkbGVmdDFbMF0gPT09ICc8JyAmJiAoJHJpZ2h0MCA9IChzdHJpbmcpICRyaWdodC0+Y29uc3RyYWludHNbMF0pICYmICRyaWdodDBbMF0gPT09ICc+JyAmJiAkcmlnaHQwWzFdID09PSAnPScgJiYgKCRyaWdodDEgPSAoc3RyaW5nKSAkcmlnaHQtPmNvbnN0cmFpbnRzWzFdKSAmJiAkcmlnaHQxWzBdID09PSAnPCcgJiYgXHN1YnN0cigkbGVmdDEsIDIpID09PSBcc3Vic3RyKCRyaWdodDAsIDMpKSB7CiAgICAgICAgICAgICAgICAgICAgJG9wdGltaXplZCA9IFx0cnVlOwogICAgICAgICAgICAgICAgICAgICRsZWZ0ID0gbmV3IE11bHRpQ29uc3RyYWludChhcnJheSgkbGVmdC0+Y29uc3RyYWludHNbMF0sICRyaWdodC0+Y29uc3RyYWludHNbMV0pLCBcdHJ1ZSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRtZXJnZWRDb25zdHJhaW50c1tdID0gJGxlZnQ7CiAgICAgICAgICAgICAgICAgICAgJGxlZnQgPSAkcmlnaHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRvcHRpbWl6ZWQpIHsKICAgICAgICAgICAgICAgICRtZXJnZWRDb25zdHJhaW50c1tdID0gJGxlZnQ7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoJG1lcmdlZENvbnN0cmFpbnRzLCBcZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIFRPRE86IEhlcmUncyB0aGUgcGxhY2UgdG8gcHV0IG1vcmUgb3B0aW1pemF0aW9ucwogICAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgLyoqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBleHRyYWN0Qm91bmRzKCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmxvd2VyQm91bmQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y29uc3RyYWludHMgYXMgJGNvbnN0cmFpbnQpIHsKICAgICAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5sb3dlckJvdW5kIHx8IG51bGwgPT09ICR0aGlzLT51cHBlckJvdW5kKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+bG93ZXJCb3VuZCA9ICRjb25zdHJhaW50LT5nZXRMb3dlckJvdW5kKCk7CiAgICAgICAgICAgICAgICAkdGhpcy0+dXBwZXJCb3VuZCA9ICRjb25zdHJhaW50LT5nZXRVcHBlckJvdW5kKCk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGNvbnN0cmFpbnQtPmdldExvd2VyQm91bmQoKS0+Y29tcGFyZVRvKCR0aGlzLT5sb3dlckJvdW5kLCAkdGhpcy0+aXNDb25qdW5jdGl2ZSgpID8gJz4nIDogJzwnKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmxvd2VyQm91bmQgPSAkY29uc3RyYWludC0+Z2V0TG93ZXJCb3VuZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkY29uc3RyYWludC0+Z2V0VXBwZXJCb3VuZCgpLT5jb21wYXJlVG8oJHRoaXMtPnVwcGVyQm91bmQsICR0aGlzLT5pc0Nvbmp1bmN0aXZlKCkgPyAnPCcgOiAnPicpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+dXBwZXJCb3VuZCA9ICRjb25zdHJhaW50LT5nZXRVcHBlckJvdW5kKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNvbXBvc2VyL3NlbXZlci4KICoKICogKGMpIENvbXBvc2VyIDxodHRwczovL2dpdGh1Yi5jb20vY29tcG9zZXI+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3CiAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxTZW12ZXI7Cgp1c2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFNlbXZlclxDb25zdHJhaW50XENvbnN0cmFpbnQ7CnVzZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcU2VtdmVyXENvbnN0cmFpbnRcQ29uc3RyYWludEludGVyZmFjZTsKLyoqCiAqIEhlbHBlciBjbGFzcyB0byBldmFsdWF0ZSBjb25zdHJhaW50IGJ5IGNvbXBpbGluZyBhbmQgcmV1c2luZyB0aGUgY29kZSB0byBldmFsdWF0ZQogKi8KY2xhc3MgQ29tcGlsaW5nTWF0Y2hlcgp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqIEBwaHBzdGFuLXZhciBhcnJheTxzdHJpbmcsIGNhbGxhYmxlPgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkY29tcGlsZWRDaGVja2VyQ2FjaGUgPSBhcnJheSgpOwogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKiBAcGhwc3Rhbi12YXIgYXJyYXk8c3RyaW5nLCBib29sPgogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkcmVzdWx0Q2FjaGUgPSBhcnJheSgpOwogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGVuYWJsZWQ7CiAgICAvKioKICAgICAqIEBwaHBzdGFuLXZhciBhcnJheTxDb25zdHJhaW50OjpPUF8qLCBDb25zdHJhaW50OjpTVFJfT1BfKj4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHRyYW5zT3BJbnQgPSBhcnJheShDb25zdHJhaW50OjpPUF9FUSA9PiBDb25zdHJhaW50OjpTVFJfT1BfRVEsIENvbnN0cmFpbnQ6Ok9QX0xUID0+IENvbnN0cmFpbnQ6OlNUUl9PUF9MVCwgQ29uc3RyYWludDo6T1BfTEUgPT4gQ29uc3RyYWludDo6U1RSX09QX0xFLCBDb25zdHJhaW50OjpPUF9HVCA9PiBDb25zdHJhaW50OjpTVFJfT1BfR1QsIENvbnN0cmFpbnQ6Ok9QX0dFID0+IENvbnN0cmFpbnQ6OlNUUl9PUF9HRSwgQ29uc3RyYWludDo6T1BfTkUgPT4gQ29uc3RyYWludDo6U1RSX09QX05FKTsKICAgIC8qKgogICAgICogQ2xlYXJzIHRoZSBtZW1vaXphdGlvbiBjYWNoZSBvbmNlIHlvdSBhcmUgZG9uZQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNsZWFyKCkKICAgIHsKICAgICAgICBzZWxmOjokcmVzdWx0Q2FjaGUgPSBhcnJheSgpOwogICAgICAgIHNlbGY6OiRjb21waWxlZENoZWNrZXJDYWNoZSA9IGFycmF5KCk7CiAgICB9CiAgICAvKioKICAgICAqIEV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbjogJGNvbnN0cmFpbnQgbWF0Y2ggJG9wZXJhdG9yICR2ZXJzaW9uCiAgICAgKgogICAgICogQHBhcmFtIENvbnN0cmFpbnRJbnRlcmZhY2UgJGNvbnN0cmFpbnQKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICAgICRvcGVyYXRvcgogICAgICogQHBocHN0YW4tcGFyYW0gQ29uc3RyYWludDo6T1BfKiAgJG9wZXJhdG9yCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAkdmVyc2lvbgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXRjaChDb25zdHJhaW50SW50ZXJmYWNlICRjb25zdHJhaW50LCAkb3BlcmF0b3IsICR2ZXJzaW9uKQogICAgewogICAgICAgICRyZXN1bHRDYWNoZUtleSA9ICRvcGVyYXRvciAuICRjb25zdHJhaW50IC4gJzsnIC4gJHZlcnNpb247CiAgICAgICAgaWYgKGlzc2V0KHNlbGY6OiRyZXN1bHRDYWNoZVskcmVzdWx0Q2FjaGVLZXldKSkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6JHJlc3VsdENhY2hlWyRyZXN1bHRDYWNoZUtleV07CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjokZW5hYmxlZCA9PT0gbnVsbCkgewogICAgICAgICAgICBzZWxmOjokZW5hYmxlZCA9ICFcaW5fYXJyYXkoJ2V2YWwnLCBcZXhwbG9kZSgnLCcsIChzdHJpbmcpIFxpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpKSwgXHRydWUpOwogICAgICAgIH0KICAgICAgICBpZiAoIXNlbGY6OiRlbmFibGVkKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjokcmVzdWx0Q2FjaGVbJHJlc3VsdENhY2hlS2V5XSA9ICRjb25zdHJhaW50LT5tYXRjaGVzKG5ldyBDb25zdHJhaW50KHNlbGY6OiR0cmFuc09wSW50WyRvcGVyYXRvcl0sICR2ZXJzaW9uKSk7CiAgICAgICAgfQogICAgICAgICRjYWNoZUtleSA9ICRvcGVyYXRvciAuICRjb25zdHJhaW50OwogICAgICAgIGlmICghaXNzZXQoc2VsZjo6JGNvbXBpbGVkQ2hlY2tlckNhY2hlWyRjYWNoZUtleV0pKSB7CiAgICAgICAgICAgICRjb2RlID0gJGNvbnN0cmFpbnQtPmNvbXBpbGUoJG9wZXJhdG9yKTsKICAgICAgICAgICAgc2VsZjo6JGNvbXBpbGVkQ2hlY2tlckNhY2hlWyRjYWNoZUtleV0gPSAkZnVuY3Rpb24gPSBldmFsKCdyZXR1cm4gZnVuY3Rpb24oJHYsICRiKXtyZXR1cm4gJyAuICRjb2RlIC4gJzt9OycpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRmdW5jdGlvbiA9IHNlbGY6OiRjb21waWxlZENoZWNrZXJDYWNoZVskY2FjaGVLZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6JHJlc3VsdENhY2hlWyRyZXN1bHRDYWNoZUtleV0gPSAkZnVuY3Rpb24oJHZlcnNpb24sIFxzdHJwb3MoJHZlcnNpb24sICdkZXYtJykgPT09IDApOwogICAgfQp9Cjw/cGhwCgovKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBjb21wb3Nlci9zZW12ZXIuCiAqCiAqIChjKSBDb21wb3NlciA8aHR0cHM6Ly9naXRodWIuY29tL2NvbXBvc2VyPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldwogKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCm5hbWVzcGFjZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcU2VtdmVyOwoKdXNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxTZW12ZXJcQ29uc3RyYWludFxDb25zdHJhaW50OwpjbGFzcyBDb21wYXJhdG9yCnsKICAgIC8qKgogICAgICogRXZhbHVhdGVzIHRoZSBleHByZXNzaW9uOiAkdmVyc2lvbjEgPiAkdmVyc2lvbjIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbjEKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24yCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ3JlYXRlclRoYW4oJHZlcnNpb24xLCAkdmVyc2lvbjIpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmNvbXBhcmUoJHZlcnNpb24xLCAnPicsICR2ZXJzaW9uMik7CiAgICB9CiAgICAvKioKICAgICAqIEV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbjogJHZlcnNpb24xID49ICR2ZXJzaW9uMi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2ZXJzaW9uMQogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbjIKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBncmVhdGVyVGhhbk9yRXF1YWxUbygkdmVyc2lvbjEsICR2ZXJzaW9uMikKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Y29tcGFyZSgkdmVyc2lvbjEsICc+PScsICR2ZXJzaW9uMik7CiAgICB9CiAgICAvKioKICAgICAqIEV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbjogJHZlcnNpb24xIDwgJHZlcnNpb24yLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24xCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2ZXJzaW9uMgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxlc3NUaGFuKCR2ZXJzaW9uMSwgJHZlcnNpb24yKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpjb21wYXJlKCR2ZXJzaW9uMSwgJzwnLCAkdmVyc2lvbjIpOwogICAgfQogICAgLyoqCiAgICAgKiBFdmFsdWF0ZXMgdGhlIGV4cHJlc3Npb246ICR2ZXJzaW9uMSA8PSAkdmVyc2lvbjIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbjEKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24yCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbGVzc1RoYW5PckVxdWFsVG8oJHZlcnNpb24xLCAkdmVyc2lvbjIpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmNvbXBhcmUoJHZlcnNpb24xLCAnPD0nLCAkdmVyc2lvbjIpOwogICAgfQogICAgLyoqCiAgICAgKiBFdmFsdWF0ZXMgdGhlIGV4cHJlc3Npb246ICR2ZXJzaW9uMSA9PSAkdmVyc2lvbjIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbjEKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24yCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXF1YWxUbygkdmVyc2lvbjEsICR2ZXJzaW9uMikKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Y29tcGFyZSgkdmVyc2lvbjEsICc9PScsICR2ZXJzaW9uMik7CiAgICB9CiAgICAvKioKICAgICAqIEV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbjogJHZlcnNpb24xICE9ICR2ZXJzaW9uMi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2ZXJzaW9uMQogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbjIKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3RFcXVhbFRvKCR2ZXJzaW9uMSwgJHZlcnNpb24yKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpjb21wYXJlKCR2ZXJzaW9uMSwgJyE9JywgJHZlcnNpb24yKTsKICAgIH0KICAgIC8qKgogICAgICogRXZhbHVhdGVzIHRoZSBleHByZXNzaW9uOiAkdmVyc2lvbjEgJG9wZXJhdG9yICR2ZXJzaW9uMi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2ZXJzaW9uMQogICAgICogQHBhcmFtIHN0cmluZyAkb3BlcmF0b3IKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24yCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHBocHN0YW4tcGFyYW0gQ29uc3RyYWludDo6U1RSX09QXyogICRvcGVyYXRvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbXBhcmUoJHZlcnNpb24xLCAkb3BlcmF0b3IsICR2ZXJzaW9uMikKICAgIHsKICAgICAgICAkY29uc3RyYWludCA9IG5ldyBDb25zdHJhaW50KCRvcGVyYXRvciwgJHZlcnNpb24yKTsKICAgICAgICByZXR1cm4gJGNvbnN0cmFpbnQtPm1hdGNoU3BlY2lmaWMobmV3IENvbnN0cmFpbnQoJz09JywgJHZlcnNpb24xKSwgXHRydWUpOwogICAgfQp9Cjw/cGhwCgovKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBjb21wb3Nlci9zZW12ZXIuCiAqCiAqIChjKSBDb21wb3NlciA8aHR0cHM6Ly9naXRodWIuY29tL2NvbXBvc2VyPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldwogKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCm5hbWVzcGFjZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcU2VtdmVyOwoKdXNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxTZW12ZXJcQ29uc3RyYWludFxDb25zdHJhaW50SW50ZXJmYWNlOwp1c2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFNlbXZlclxDb25zdHJhaW50XE1hdGNoQWxsQ29uc3RyYWludDsKdXNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxTZW12ZXJcQ29uc3RyYWludFxNdWx0aUNvbnN0cmFpbnQ7CnVzZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcU2VtdmVyXENvbnN0cmFpbnRcQ29uc3RyYWludDsKLyoqCiAqIFZlcnNpb24gcGFyc2VyLgogKgogKiBAYXV0aG9yIEpvcmRpIEJvZ2dpYW5vIDxqLmJvZ2dpYW5vQHNlbGQuYmU+CiAqLwpjbGFzcyBWZXJzaW9uUGFyc2VyCnsKICAgIC8qKgogICAgICogUmVnZXggdG8gbWF0Y2ggcHJlLXJlbGVhc2UgZGF0YSAoc29ydCBvZikuCiAgICAgKgogICAgICogRHVlIHRvIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgogICAgICogICAtIEluc3RlYWQgb2YgZW5mb3JjaW5nIGh5cGhlbiwgYW4gdW5kZXJzY29yZSwgZG90IG9yIG5vdGhpbmcgYXQgYWxsIGFyZSBhbHNvIGFjY2VwdGVkLgogICAgICogICAtIE9ubHkgc3RhYmlsaXRpZXMgYXMgcmVjb2duaXplZCBieSBDb21wb3NlciBhcmUgYWxsb3dlZCB0byBwcmVjZWRlIGEgbnVtZXJpY2FsIGlkZW50aWZpZXIuCiAgICAgKiAgIC0gTnVtZXJpY2FsLW9ubHkgcHJlLXJlbGVhc2UgaWRlbnRpZmllcnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHNlZSB0ZXN0cy4KICAgICAqCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLXwKICAgICAqIFttYWpvcl0uW21pbm9yXS5bcGF0Y2hdIC1bcHJlLXJlbGVhc2VdICtbYnVpbGQtbWV0YWRhdGFdCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJG1vZGlmaWVyUmVnZXggPSAnWy5fLV0/KD86KHN0YWJsZXxiZXRhfGJ8UkN8YWxwaGF8YXxwYXRjaHxwbHxwKSgoPzpbLi1dP1xcZCspKispPyk/KFsuLV0/ZGV2KT8nOwogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwcml2YXRlIHN0YXRpYyAkc3RhYmlsaXRpZXNSZWdleCA9ICdzdGFibGV8UkN8YmV0YXxhbHBoYXxkZXYnOwogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzdGFiaWxpdHkgb2YgYSB2ZXJzaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHBocHN0YW4tcmV0dXJuICdzdGFibGUnfCdSQyd8J2JldGEnfCdhbHBoYSd8J2RldicKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVN0YWJpbGl0eSgkdmVyc2lvbikKICAgIHsKICAgICAgICAkdmVyc2lvbiA9IChzdHJpbmcpIFxwcmVnX3JlcGxhY2UoJ3sjLiskfScsICcnLCAoc3RyaW5nKSAkdmVyc2lvbik7CiAgICAgICAgaWYgKFxzdHJwb3MoJHZlcnNpb24sICdkZXYtJykgPT09IDAgfHwgJy1kZXYnID09PSBcc3Vic3RyKCR2ZXJzaW9uLCAtNCkpIHsKICAgICAgICAgICAgcmV0dXJuICdkZXYnOwogICAgICAgIH0KICAgICAgICBccHJlZ19tYXRjaCgneycgLiBzZWxmOjokbW9kaWZpZXJSZWdleCAuICcoPzpcXCsuKik/JH1pJywgXHN0cnRvbG93ZXIoJHZlcnNpb24pLCAkbWF0Y2gpOwogICAgICAgIGlmICghZW1wdHkoJG1hdGNoWzNdKSkgewogICAgICAgICAgICByZXR1cm4gJ2Rldic7CiAgICAgICAgfQogICAgICAgIGlmICghZW1wdHkoJG1hdGNoWzFdKSkgewogICAgICAgICAgICBpZiAoJ2JldGEnID09PSAkbWF0Y2hbMV0gfHwgJ2InID09PSAkbWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgIHJldHVybiAnYmV0YSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCdhbHBoYScgPT09ICRtYXRjaFsxXSB8fCAnYScgPT09ICRtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgcmV0dXJuICdhbHBoYSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCdyYycgPT09ICRtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgcmV0dXJuICdSQyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICdzdGFibGUnOwogICAgfQogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdGFiaWxpdHkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZVN0YWJpbGl0eSgkc3RhYmlsaXR5KQogICAgewogICAgICAgICRzdGFiaWxpdHkgPSBcc3RydG9sb3dlcigoc3RyaW5nKSAkc3RhYmlsaXR5KTsKICAgICAgICByZXR1cm4gJHN0YWJpbGl0eSA9PT0gJ3JjJyA/ICdSQycgOiAkc3RhYmlsaXR5OwogICAgfQogICAgLyoqCiAgICAgKiBOb3JtYWxpemVzIGEgdmVyc2lvbiBzdHJpbmcgdG8gYmUgYWJsZSB0byBwZXJmb3JtIGNvbXBhcmlzb25zIG9uIGl0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24KICAgICAqIEBwYXJhbSA/c3RyaW5nICRmdWxsVmVyc2lvbiBvcHRpb25hbCBjb21wbGV0ZSB2ZXJzaW9uIHN0cmluZyB0byBnaXZlIG1vcmUgY29udGV4dAogICAgICoKICAgICAqIEB0aHJvd3MgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemUoJHZlcnNpb24sICRmdWxsVmVyc2lvbiA9IG51bGwpCiAgICB7CiAgICAgICAgJHZlcnNpb24gPSBcdHJpbSgoc3RyaW5nKSAkdmVyc2lvbik7CiAgICAgICAgJG9yaWdWZXJzaW9uID0gJHZlcnNpb247CiAgICAgICAgaWYgKG51bGwgPT09ICRmdWxsVmVyc2lvbikgewogICAgICAgICAgICAkZnVsbFZlcnNpb24gPSAkdmVyc2lvbjsKICAgICAgICB9CiAgICAgICAgLy8gc3RyaXAgb2ZmIGFsaWFzaW5nCiAgICAgICAgaWYgKFxwcmVnX21hdGNoKCd7XihbXixcXHNdKyspICsrYXMgKysoW14sXFxzXSsrKSR9JywgJHZlcnNpb24sICRtYXRjaCkpIHsKICAgICAgICAgICAgJHZlcnNpb24gPSAkbWF0Y2hbMV07CiAgICAgICAgfQogICAgICAgIC8vIHN0cmlwIG9mZiBzdGFiaWxpdHkgZmxhZwogICAgICAgIGlmIChccHJlZ19tYXRjaCgne0AoPzonIC4gc2VsZjo6JHN0YWJpbGl0aWVzUmVnZXggLiAnKSR9aScsICR2ZXJzaW9uLCAkbWF0Y2gpKSB7CiAgICAgICAgICAgICR2ZXJzaW9uID0gXHN1YnN0cigkdmVyc2lvbiwgMCwgXHN0cmxlbigkdmVyc2lvbikgLSBcc3RybGVuKCRtYXRjaFswXSkpOwogICAgICAgIH0KICAgICAgICAvLyBub3JtYWxpemUgbWFzdGVyL3RydW5rL2RlZmF1bHQgYnJhbmNoZXMgdG8gZGV2LW5hbWUgZm9yIEJDIHdpdGggMS54IGFzIHRoZXNlIHVzZWQgdG8gYmUgdmFsaWQgY29uc3RyYWludHMKICAgICAgICBpZiAoXGluX2FycmF5KCR2ZXJzaW9uLCBhcnJheSgnbWFzdGVyJywgJ3RydW5rJywgJ2RlZmF1bHQnKSwgXHRydWUpKSB7CiAgICAgICAgICAgICR2ZXJzaW9uID0gJ2Rldi0nIC4gJHZlcnNpb247CiAgICAgICAgfQogICAgICAgIC8vIGlmIHJlcXVpcmVtZW50IGlzIGJyYW5jaC1saWtlLCB1c2UgZnVsbCBuYW1lCiAgICAgICAgaWYgKFxzdHJpcG9zKCR2ZXJzaW9uLCAnZGV2LScpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAnZGV2LScgLiBcc3Vic3RyKCR2ZXJzaW9uLCA0KTsKICAgICAgICB9CiAgICAgICAgLy8gc3RyaXAgb2ZmIGJ1aWxkIG1ldGFkYXRhCiAgICAgICAgaWYgKFxwcmVnX21hdGNoKCd7XihbXixcXHMrXSsrKVxcK1teXFxzXSsrJH0nLCAkdmVyc2lvbiwgJG1hdGNoKSkgewogICAgICAgICAgICAkdmVyc2lvbiA9ICRtYXRjaFsxXTsKICAgICAgICB9CiAgICAgICAgLy8gbWF0Y2ggY2xhc3NpY2FsIHZlcnNpb25pbmcKICAgICAgICBpZiAoXHByZWdfbWF0Y2goJ3tedj8oXFxkezEsNX0rKShcXC5cXGQrKyk/KFxcLlxcZCsrKT8oXFwuXFxkKyspPycgLiBzZWxmOjokbW9kaWZpZXJSZWdleCAuICckfWknLCAkdmVyc2lvbiwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgICR2ZXJzaW9uID0gJG1hdGNoZXNbMV0gLiAoIWVtcHR5KCRtYXRjaGVzWzJdKSA/ICRtYXRjaGVzWzJdIDogJy4wJykgLiAoIWVtcHR5KCRtYXRjaGVzWzNdKSA/ICRtYXRjaGVzWzNdIDogJy4wJykgLiAoIWVtcHR5KCRtYXRjaGVzWzRdKSA/ICRtYXRjaGVzWzRdIDogJy4wJyk7CiAgICAgICAgICAgICRpbmRleCA9IDU7CiAgICAgICAgICAgIC8vIG1hdGNoIGRhdGUodGltZSkgYmFzZWQgdmVyc2lvbmluZwogICAgICAgIH0gZWxzZWlmIChccHJlZ19tYXRjaCgne152PyhcXGR7NH0oPzpbLjotXT9cXGR7Mn0pezEsNn0oPzpbLjotXT9cXGR7MSwzfSl7MCwyfSknIC4gc2VsZjo6JG1vZGlmaWVyUmVnZXggLiAnJH1pJywgJHZlcnNpb24sICRtYXRjaGVzKSkgewogICAgICAgICAgICAkdmVyc2lvbiA9IChzdHJpbmcpIFxwcmVnX3JlcGxhY2UoJ3tcXER9JywgJy4nLCAkbWF0Y2hlc1sxXSk7CiAgICAgICAgICAgICRpbmRleCA9IDI7CiAgICAgICAgfQogICAgICAgIC8vIGFkZCB2ZXJzaW9uIG1vZGlmaWVycyBpZiBhIHZlcnNpb24gd2FzIG1hdGNoZWQKICAgICAgICBpZiAoaXNzZXQoJGluZGV4KSkgewogICAgICAgICAgICBpZiAoIWVtcHR5KCRtYXRjaGVzWyRpbmRleF0pKSB7CiAgICAgICAgICAgICAgICBpZiAoJ3N0YWJsZScgPT09ICRtYXRjaGVzWyRpbmRleF0pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHZlcnNpb247CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdmVyc2lvbiAuPSAnLScgLiAkdGhpcy0+ZXhwYW5kU3RhYmlsaXR5KCRtYXRjaGVzWyRpbmRleF0pIC4gKGlzc2V0KCRtYXRjaGVzWyRpbmRleCArIDFdKSAmJiAnJyAhPT0gJG1hdGNoZXNbJGluZGV4ICsgMV0gPyBcbHRyaW0oJG1hdGNoZXNbJGluZGV4ICsgMV0sICcuLScpIDogJycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghZW1wdHkoJG1hdGNoZXNbJGluZGV4ICsgMl0pKSB7CiAgICAgICAgICAgICAgICAkdmVyc2lvbiAuPSAnLWRldic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICR2ZXJzaW9uOwogICAgICAgIH0KICAgICAgICAvLyBtYXRjaCBkZXYgYnJhbmNoZXMKICAgICAgICBpZiAoXHByZWdfbWF0Y2goJ3soLio/KVsuLV0/ZGV2JH1pJywgJHZlcnNpb24sICRtYXRjaCkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRub3JtYWxpemVkID0gJHRoaXMtPm5vcm1hbGl6ZUJyYW5jaCgkbWF0Y2hbMV0pOwogICAgICAgICAgICAgICAgLy8gYSBicmFuY2ggZW5kaW5nIHdpdGggLWRldiBpcyBvbmx5IHZhbGlkIGlmIGl0IGlzIG51bWVyaWMKICAgICAgICAgICAgICAgIC8vIGlmIGl0IGdldHMgcHJlZml4ZWQgd2l0aCBkZXYtIGl0IG1lYW5zIHRoZSBicmFuY2ggbmFtZSBzaG91bGQKICAgICAgICAgICAgICAgIC8vIGhhdmUgaGFkIGEgZGV2LSBwcmVmaXggYWxyZWFkeSB3aGVuIHBhc3NlZCB0byBub3JtYWxpemUKICAgICAgICAgICAgICAgIGlmIChcc3RycG9zKCRub3JtYWxpemVkLCAnZGV2LScpID09PSBcZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJG5vcm1hbGl6ZWQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkZXh0cmFNZXNzYWdlID0gJyc7CiAgICAgICAgaWYgKFxwcmVnX21hdGNoKCd7ICthcyArJyAuIFxwcmVnX3F1b3RlKCR2ZXJzaW9uKSAuICcoPzpAKD86JyAuIHNlbGY6OiRzdGFiaWxpdGllc1JlZ2V4IC4gJykpPyR9JywgJGZ1bGxWZXJzaW9uKSkgewogICAgICAgICAgICAkZXh0cmFNZXNzYWdlID0gJyBpbiAiJyAuICRmdWxsVmVyc2lvbiAuICciLCB0aGUgYWxpYXMgbXVzdCBiZSBhbiBleGFjdCB2ZXJzaW9uJzsKICAgICAgICB9IGVsc2VpZiAoXHByZWdfbWF0Y2goJ3teJyAuIFxwcmVnX3F1b3RlKCR2ZXJzaW9uKSAuICcoPzpAKD86JyAuIHNlbGY6OiRzdGFiaWxpdGllc1JlZ2V4IC4gJykpPyArYXMgK30nLCAkZnVsbFZlcnNpb24pKSB7CiAgICAgICAgICAgICRleHRyYU1lc3NhZ2UgPSAnIGluICInIC4gJGZ1bGxWZXJzaW9uIC4gJyIsIHRoZSBhbGlhcyBzb3VyY2UgbXVzdCBiZSBhbiBleGFjdCB2ZXJzaW9uLCBpZiBpdCBpcyBhIGJyYW5jaCBuYW1lIHlvdSBzaG91bGQgcHJlZml4IGl0IHdpdGggZGV2LSc7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdJbnZhbGlkIHZlcnNpb24gc3RyaW5nICInIC4gJG9yaWdWZXJzaW9uIC4gJyInIC4gJGV4dHJhTWVzc2FnZSk7CiAgICB9CiAgICAvKioKICAgICAqIEV4dHJhY3QgbnVtZXJpYyBwcmVmaXggZnJvbSBhbGlhcywgaWYgaXQgaXMgaW4gbnVtZXJpYyBmb3JtYXQsIHN1aXRhYmxlIGZvciB2ZXJzaW9uIGNvbXBhcmlzb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYnJhbmNoIEJyYW5jaCBuYW1lIChlLmcuIDIuMS54LWRldikKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBOdW1lcmljIHByZWZpeCBpZiBwcmVzZW50IChlLmcuIDIuMS4pIG9yIGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJzZU51bWVyaWNBbGlhc1ByZWZpeCgkYnJhbmNoKQogICAgewogICAgICAgIGlmIChccHJlZ19tYXRjaCgne14oP1A8dmVyc2lvbj4oXFxkKytcXC4pKlxcZCsrKSg/OlxcLngpPy1kZXYkfWknLCAoc3RyaW5nKSAkYnJhbmNoLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgcmV0dXJuICRtYXRjaGVzWyd2ZXJzaW9uJ10gLiAnLic7CiAgICAgICAgfQogICAgICAgIHJldHVybiBcZmFsc2U7CiAgICB9CiAgICAvKioKICAgICAqIE5vcm1hbGl6ZXMgYSBicmFuY2ggbmFtZSB0byBiZSBhYmxlIHRvIHBlcmZvcm0gY29tcGFyaXNvbnMgb24gaXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemVCcmFuY2goJG5hbWUpCiAgICB7CiAgICAgICAgJG5hbWUgPSBcdHJpbSgoc3RyaW5nKSAkbmFtZSk7CiAgICAgICAgaWYgKFxwcmVnX21hdGNoKCd7XnY/KFxcZCsrKShcXC4oPzpcXGQrK3xbeFgqXSkpPyhcXC4oPzpcXGQrK3xbeFgqXSkpPyhcXC4oPzpcXGQrK3xbeFgqXSkpPyR9aScsICRuYW1lLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgJHZlcnNpb24gPSAnJzsKICAgICAgICAgICAgZm9yICgkaSA9IDE7ICRpIDwgNTsgKyskaSkgewogICAgICAgICAgICAgICAgJHZlcnNpb24gLj0gaXNzZXQoJG1hdGNoZXNbJGldKSA/IFxzdHJfcmVwbGFjZShhcnJheSgnKicsICdYJyksICd4JywgJG1hdGNoZXNbJGldKSA6ICcueCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFxzdHJfcmVwbGFjZSgneCcsICc5OTk5OTk5JywgJHZlcnNpb24pIC4gJy1kZXYnOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJ2Rldi0nIC4gJG5hbWU7CiAgICB9CiAgICAvKioKICAgICAqIE5vcm1hbGl6ZXMgYSBkZWZhdWx0IGJyYW5jaCBuYW1lIChpLmUuIG1hc3RlciBvbiBnaXQpIHRvIDk5OTk5OTktZGV2LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEBkZXByZWNhdGVkIE5vIG5lZWQgdG8gdXNlIHRoaXMgYW55bW9yZSBpbiB0aGVvcnksIENvbXBvc2VyIDIgZG9lcyBub3Qgbm9ybWFsaXplIGFueSBicmFuY2ggbmFtZXMgdG8gOTk5OTk5OS1kZXYgYW55bW9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplRGVmYXVsdEJyYW5jaCgkbmFtZSkKICAgIHsKICAgICAgICBpZiAoJG5hbWUgPT09ICdkZXYtbWFzdGVyJyB8fCAkbmFtZSA9PT0gJ2Rldi1kZWZhdWx0JyB8fCAkbmFtZSA9PT0gJ2Rldi10cnVuaycpIHsKICAgICAgICAgICAgcmV0dXJuICc5OTk5OTk5LWRldic7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoc3RyaW5nKSAkbmFtZTsKICAgIH0KICAgIC8qKgogICAgICogUGFyc2VzIGEgY29uc3RyYWludCBzdHJpbmcgaW50byBNdWx0aUNvbnN0cmFpbnQgYW5kL29yIENvbnN0cmFpbnQgb2JqZWN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb25zdHJhaW50cwogICAgICoKICAgICAqIEByZXR1cm4gQ29uc3RyYWludEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2VDb25zdHJhaW50cygkY29uc3RyYWludHMpCiAgICB7CiAgICAgICAgJHByZXR0eUNvbnN0cmFpbnQgPSAoc3RyaW5nKSAkY29uc3RyYWludHM7CiAgICAgICAgJG9yQ29uc3RyYWludHMgPSBccHJlZ19zcGxpdCgne1xccypcXHxcXHw/XFxzKn0nLCBcdHJpbSgoc3RyaW5nKSAkY29uc3RyYWludHMpKTsKICAgICAgICBpZiAoXGZhbHNlID09PSAkb3JDb25zdHJhaW50cykgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ZhaWxlZCB0byBwcmVnX3NwbGl0IHN0cmluZzogJyAuICRjb25zdHJhaW50cyk7CiAgICAgICAgfQogICAgICAgICRvckdyb3VwcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJG9yQ29uc3RyYWludHMgYXMgJG9yQ29uc3RyYWludCkgewogICAgICAgICAgICAkYW5kQ29uc3RyYWludHMgPSBccHJlZ19zcGxpdCgneyg/PCFefGFzfFs9PjwgLF0pICooPzwhLSlbLCBdKD8hLSkgKig/ISx8YXN8JCl9JywgJG9yQ29uc3RyYWludCk7CiAgICAgICAgICAgIGlmIChcZmFsc2UgPT09ICRhbmRDb25zdHJhaW50cykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdGYWlsZWQgdG8gcHJlZ19zcGxpdCBzdHJpbmc6ICcgLiAkb3JDb25zdHJhaW50KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoXGNvdW50KCRhbmRDb25zdHJhaW50cykgPiAxKSB7CiAgICAgICAgICAgICAgICAkY29uc3RyYWludE9iamVjdHMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGFuZENvbnN0cmFpbnRzIGFzICRhbmRDb25zdHJhaW50KSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnBhcnNlQ29uc3RyYWludCgkYW5kQ29uc3RyYWludCkgYXMgJHBhcnNlZEFuZENvbnN0cmFpbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnN0cmFpbnRPYmplY3RzW10gPSAkcGFyc2VkQW5kQ29uc3RyYWludDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkY29uc3RyYWludE9iamVjdHMgPSAkdGhpcy0+cGFyc2VDb25zdHJhaW50KCRhbmRDb25zdHJhaW50c1swXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKDEgPT09IFxjb3VudCgkY29uc3RyYWludE9iamVjdHMpKSB7CiAgICAgICAgICAgICAgICAkY29uc3RyYWludCA9ICRjb25zdHJhaW50T2JqZWN0c1swXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjb25zdHJhaW50ID0gbmV3IE11bHRpQ29uc3RyYWludCgkY29uc3RyYWludE9iamVjdHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvckdyb3Vwc1tdID0gJGNvbnN0cmFpbnQ7CiAgICAgICAgfQogICAgICAgICRwYXJzZWRDb25zdHJhaW50ID0gTXVsdGlDb25zdHJhaW50OjpjcmVhdGUoJG9yR3JvdXBzLCBcZmFsc2UpOwogICAgICAgICRwYXJzZWRDb25zdHJhaW50LT5zZXRQcmV0dHlTdHJpbmcoJHByZXR0eUNvbnN0cmFpbnQpOwogICAgICAgIHJldHVybiAkcGFyc2VkQ29uc3RyYWludDsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkY29uc3RyYWludAogICAgICoKICAgICAqIEB0aHJvd3MgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqCiAgICAgKiBAcGhwc3Rhbi1yZXR1cm4gbm9uLWVtcHR5LWFycmF5PENvbnN0cmFpbnRJbnRlcmZhY2U+CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcGFyc2VDb25zdHJhaW50KCRjb25zdHJhaW50KQogICAgewogICAgICAgIC8vIHN0cmlwIG9mZiBhbGlhc2luZwogICAgICAgIGlmIChccHJlZ19tYXRjaCgne14oW14sXFxzXSsrKSArK2FzICsrKFteLFxcc10rKykkfScsICRjb25zdHJhaW50LCAkbWF0Y2gpKSB7CiAgICAgICAgICAgICRjb25zdHJhaW50ID0gJG1hdGNoWzFdOwogICAgICAgIH0KICAgICAgICAvLyBzdHJpcCBAc3RhYmlsaXR5IGZsYWdzLCBhbmQga2VlcCBpdCBmb3IgbGF0ZXIgdXNlCiAgICAgICAgaWYgKFxwcmVnX21hdGNoKCd7XihbXixcXHNdKj8pQCgnIC4gc2VsZjo6JHN0YWJpbGl0aWVzUmVnZXggLiAnKSR9aScsICRjb25zdHJhaW50LCAkbWF0Y2gpKSB7CiAgICAgICAgICAgICRjb25zdHJhaW50ID0gJycgIT09ICRtYXRjaFsxXSA/ICRtYXRjaFsxXSA6ICcqJzsKICAgICAgICAgICAgaWYgKCRtYXRjaFsyXSAhPT0gJ3N0YWJsZScpIHsKICAgICAgICAgICAgICAgICRzdGFiaWxpdHlNb2RpZmllciA9ICRtYXRjaFsyXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBnZXQgcmlkIG9mICNyZWZzIGFzIHRob3NlIGFyZSB1c2VkIGJ5IGNvbXBvc2VyIG9ubHkKICAgICAgICBpZiAoXHByZWdfbWF0Y2goJ3teKGRldi1bXixcXHNAXSs/fFteLFxcc0BdKz9cXC54LWRldikjLiskfWknLCAkY29uc3RyYWludCwgJG1hdGNoKSkgewogICAgICAgICAgICAkY29uc3RyYWludCA9ICRtYXRjaFsxXTsKICAgICAgICB9CiAgICAgICAgaWYgKFxwcmVnX21hdGNoKCd7Xih2KT9beFgqXShcXC5beFgqXSkqJH1pJywgJGNvbnN0cmFpbnQsICRtYXRjaCkpIHsKICAgICAgICAgICAgaWYgKCFlbXB0eSgkbWF0Y2hbMV0pIHx8ICFlbXB0eSgkbWF0Y2hbMl0pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkobmV3IENvbnN0cmFpbnQoJz49JywgJzAuMC4wLjAtZGV2JykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBhcnJheShuZXcgTWF0Y2hBbGxDb25zdHJhaW50KCkpOwogICAgICAgIH0KICAgICAgICAkdmVyc2lvblJlZ2V4ID0gJ3Y/KFxcZCsrKSg/OlxcLihcXGQrKykpPyg/OlxcLihcXGQrKykpPyg/OlxcLihcXGQrKykpPyg/OicgLiBzZWxmOjokbW9kaWZpZXJSZWdleCAuICd8XFwuKFt4WCpdWy4tXT9kZXYpKSg/OlxcK1teXFxzXSspPyc7CiAgICAgICAgLy8gVGlsZGUgUmFuZ2UKICAgICAgICAvLwogICAgICAgIC8vIExpa2Ugd2lsZGNhcmQgY29uc3RyYWludHMsIHVuc3VmZml4ZWQgdGlsZGUgY29uc3RyYWludHMgc2F5IHRoYXQgdGhleSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgcHJldmlvdXMKICAgICAgICAvLyB2ZXJzaW9uLCB0byBlbnN1cmUgdGhhdCB1bnN0YWJsZSBpbnN0YW5jZXMgb2YgdGhlIGN1cnJlbnQgdmVyc2lvbiBhcmUgYWxsb3dlZC4gSG93ZXZlciwgaWYgYSBzdGFiaWxpdHkKICAgICAgICAvLyBzdWZmaXggaXMgYWRkZWQgdG8gdGhlIGNvbnN0cmFpbnQsIHRoZW4gYSA+PSBtYXRjaCBvbiB0aGUgY3VycmVudCB2ZXJzaW9uIGlzIHVzZWQgaW5zdGVhZC4KICAgICAgICBpZiAoXHByZWdfbWF0Y2goJ3tefj4/JyAuICR2ZXJzaW9uUmVnZXggLiAnJH1pJywgJGNvbnN0cmFpbnQsICRtYXRjaGVzKSkgewogICAgICAgICAgICBpZiAoXHN0cnBvcygkY29uc3RyYWludCwgJ34+JykgPT09IDApIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdDb3VsZCBub3QgcGFyc2UgdmVyc2lvbiBjb25zdHJhaW50ICcgLiAkY29uc3RyYWludCAuICc6ICcgLiAnSW52YWxpZCBvcGVyYXRvciAifj4iLCB5b3UgcHJvYmFibHkgbWVhbnQgdG8gdXNlIHRoZSAifiIgb3BlcmF0b3InKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBXb3JrIG91dCB3aGljaCBwb3NpdGlvbiBpbiB0aGUgdmVyc2lvbiB3ZSBhcmUgb3BlcmF0aW5nIGF0CiAgICAgICAgICAgIGlmIChpc3NldCgkbWF0Y2hlc1s0XSkgJiYgJycgIT09ICRtYXRjaGVzWzRdICYmIG51bGwgIT09ICRtYXRjaGVzWzRdKSB7CiAgICAgICAgICAgICAgICAkcG9zaXRpb24gPSA0OwogICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJG1hdGNoZXNbM10pICYmICcnICE9PSAkbWF0Y2hlc1szXSAmJiBudWxsICE9PSAkbWF0Y2hlc1szXSkgewogICAgICAgICAgICAgICAgJHBvc2l0aW9uID0gMzsKICAgICAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRtYXRjaGVzWzJdKSAmJiAnJyAhPT0gJG1hdGNoZXNbMl0gJiYgbnVsbCAhPT0gJG1hdGNoZXNbMl0pIHsKICAgICAgICAgICAgICAgICRwb3NpdGlvbiA9IDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcG9zaXRpb24gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIHdoZW4gbWF0Y2hpbmcgMi54LWRldiBvciAzLjAueC1kZXYgd2UgaGF2ZSB0byBzaGlmdCB0aGUgc2Vjb25kIG9yIHRoaXJkIG51bWJlciwgZGVzcGl0ZSBubyBzZWNvbmQvdGhpcmQgbnVtYmVyIG1hdGNoaW5nIGFib3ZlCiAgICAgICAgICAgIGlmICghZW1wdHkoJG1hdGNoZXNbOF0pKSB7CiAgICAgICAgICAgICAgICAkcG9zaXRpb24rKzsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHN0YWJpbGl0eSBzdWZmaXgKICAgICAgICAgICAgJHN0YWJpbGl0eVN1ZmZpeCA9ICcnOwogICAgICAgICAgICBpZiAoZW1wdHkoJG1hdGNoZXNbNV0pICYmIGVtcHR5KCRtYXRjaGVzWzddKSAmJiBlbXB0eSgkbWF0Y2hlc1s4XSkpIHsKICAgICAgICAgICAgICAgICRzdGFiaWxpdHlTdWZmaXggLj0gJy1kZXYnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRsb3dWZXJzaW9uID0gJHRoaXMtPm5vcm1hbGl6ZShcc3Vic3RyKCRjb25zdHJhaW50IC4gJHN0YWJpbGl0eVN1ZmZpeCwgMSkpOwogICAgICAgICAgICAkbG93ZXJCb3VuZCA9IG5ldyBDb25zdHJhaW50KCc+PScsICRsb3dWZXJzaW9uKTsKICAgICAgICAgICAgLy8gRm9yIHVwcGVyIGJvdW5kLCB3ZSBpbmNyZW1lbnQgdGhlIHBvc2l0aW9uIG9mIG9uZSBtb3JlIHNpZ25pZmljYW5jZSwKICAgICAgICAgICAgLy8gYnV0IGhpZ2hQb3NpdGlvbiA9IDAgd291bGQgYmUgaWxsZWdhbAogICAgICAgICAgICAkaGlnaFBvc2l0aW9uID0gXG1heCgxLCAkcG9zaXRpb24gLSAxKTsKICAgICAgICAgICAgJGhpZ2hWZXJzaW9uID0gJHRoaXMtPm1hbmlwdWxhdGVWZXJzaW9uU3RyaW5nKCRtYXRjaGVzLCAkaGlnaFBvc2l0aW9uLCAxKSAuICctZGV2JzsKICAgICAgICAgICAgJHVwcGVyQm91bmQgPSBuZXcgQ29uc3RyYWludCgnPCcsICRoaWdoVmVyc2lvbik7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgkbG93ZXJCb3VuZCwgJHVwcGVyQm91bmQpOwogICAgICAgIH0KICAgICAgICAvLyBDYXJldCBSYW5nZQogICAgICAgIC8vCiAgICAgICAgLy8gQWxsb3dzIGNoYW5nZXMgdGhhdCBkbyBub3QgbW9kaWZ5IHRoZSBsZWZ0LW1vc3Qgbm9uLXplcm8gZGlnaXQgaW4gdGhlIFttYWpvciwgbWlub3IsIHBhdGNoXSB0dXBsZS4KICAgICAgICAvLyBJbiBvdGhlciB3b3JkcywgdGhpcyBhbGxvd3MgcGF0Y2ggYW5kIG1pbm9yIHVwZGF0ZXMgZm9yIHZlcnNpb25zIDEuMC4wIGFuZCBhYm92ZSwgcGF0Y2ggdXBkYXRlcyBmb3IKICAgICAgICAvLyB2ZXJzaW9ucyAwLlggPj0wLjEuMCwgYW5kIG5vIHVwZGF0ZXMgZm9yIHZlcnNpb25zIDAuMC5YCiAgICAgICAgaWYgKFxwcmVnX21hdGNoKCd7XlxcXicgLiAkdmVyc2lvblJlZ2V4IC4gJygkKX1pJywgJGNvbnN0cmFpbnQsICRtYXRjaGVzKSkgewogICAgICAgICAgICAvLyBXb3JrIG91dCB3aGljaCBwb3NpdGlvbiBpbiB0aGUgdmVyc2lvbiB3ZSBhcmUgb3BlcmF0aW5nIGF0CiAgICAgICAgICAgIGlmICgnMCcgIT09ICRtYXRjaGVzWzFdIHx8ICcnID09PSAkbWF0Y2hlc1syXSB8fCBudWxsID09PSAkbWF0Y2hlc1syXSkgewogICAgICAgICAgICAgICAgJHBvc2l0aW9uID0gMTsKICAgICAgICAgICAgfSBlbHNlaWYgKCcwJyAhPT0gJG1hdGNoZXNbMl0gfHwgJycgPT09ICRtYXRjaGVzWzNdIHx8IG51bGwgPT09ICRtYXRjaGVzWzNdKSB7CiAgICAgICAgICAgICAgICAkcG9zaXRpb24gPSAyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHBvc2l0aW9uID0gMzsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHN0YWJpbGl0eSBzdWZmaXgKICAgICAgICAgICAgJHN0YWJpbGl0eVN1ZmZpeCA9ICcnOwogICAgICAgICAgICBpZiAoZW1wdHkoJG1hdGNoZXNbNV0pICYmIGVtcHR5KCRtYXRjaGVzWzddKSAmJiBlbXB0eSgkbWF0Y2hlc1s4XSkpIHsKICAgICAgICAgICAgICAgICRzdGFiaWxpdHlTdWZmaXggLj0gJy1kZXYnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRsb3dWZXJzaW9uID0gJHRoaXMtPm5vcm1hbGl6ZShcc3Vic3RyKCRjb25zdHJhaW50IC4gJHN0YWJpbGl0eVN1ZmZpeCwgMSkpOwogICAgICAgICAgICAkbG93ZXJCb3VuZCA9IG5ldyBDb25zdHJhaW50KCc+PScsICRsb3dWZXJzaW9uKTsKICAgICAgICAgICAgLy8gRm9yIHVwcGVyIGJvdW5kLCB3ZSBpbmNyZW1lbnQgdGhlIHBvc2l0aW9uIG9mIG9uZSBtb3JlIHNpZ25pZmljYW5jZSwKICAgICAgICAgICAgLy8gYnV0IGhpZ2hQb3NpdGlvbiA9IDAgd291bGQgYmUgaWxsZWdhbAogICAgICAgICAgICAkaGlnaFZlcnNpb24gPSAkdGhpcy0+bWFuaXB1bGF0ZVZlcnNpb25TdHJpbmcoJG1hdGNoZXMsICRwb3NpdGlvbiwgMSkgLiAnLWRldic7CiAgICAgICAgICAgICR1cHBlckJvdW5kID0gbmV3IENvbnN0cmFpbnQoJzwnLCAkaGlnaFZlcnNpb24pOwogICAgICAgICAgICByZXR1cm4gYXJyYXkoJGxvd2VyQm91bmQsICR1cHBlckJvdW5kKTsKICAgICAgICB9CiAgICAgICAgLy8gWCBSYW5nZQogICAgICAgIC8vCiAgICAgICAgLy8gQW55IG9mIFgsIHgsIG9yICogbWF5IGJlIHVzZWQgdG8gInN0YW5kIGluIiBmb3Igb25lIG9mIHRoZSBudW1lcmljIHZhbHVlcyBpbiB0aGUgW21ham9yLCBtaW5vciwgcGF0Y2hdIHR1cGxlLgogICAgICAgIC8vIEEgcGFydGlhbCB2ZXJzaW9uIHJhbmdlIGlzIHRyZWF0ZWQgYXMgYW4gWC1SYW5nZSwgc28gdGhlIHNwZWNpYWwgY2hhcmFjdGVyIGlzIGluIGZhY3Qgb3B0aW9uYWwuCiAgICAgICAgaWYgKFxwcmVnX21hdGNoKCd7XnY/KFxcZCsrKSg/OlxcLihcXGQrKykpPyg/OlxcLihcXGQrKykpPyg/OlxcLlt4WCpdKSsrJH0nLCAkY29uc3RyYWludCwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkbWF0Y2hlc1szXSkgJiYgJycgIT09ICRtYXRjaGVzWzNdICYmIG51bGwgIT09ICRtYXRjaGVzWzNdKSB7CiAgICAgICAgICAgICAgICAkcG9zaXRpb24gPSAzOwogICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJG1hdGNoZXNbMl0pICYmICcnICE9PSAkbWF0Y2hlc1syXSAmJiBudWxsICE9PSAkbWF0Y2hlc1syXSkgewogICAgICAgICAgICAgICAgJHBvc2l0aW9uID0gMjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRwb3NpdGlvbiA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGxvd1ZlcnNpb24gPSAkdGhpcy0+bWFuaXB1bGF0ZVZlcnNpb25TdHJpbmcoJG1hdGNoZXMsICRwb3NpdGlvbikgLiAnLWRldic7CiAgICAgICAgICAgICRoaWdoVmVyc2lvbiA9ICR0aGlzLT5tYW5pcHVsYXRlVmVyc2lvblN0cmluZygkbWF0Y2hlcywgJHBvc2l0aW9uLCAxKSAuICctZGV2JzsKICAgICAgICAgICAgaWYgKCRsb3dWZXJzaW9uID09PSAnMC4wLjAuMC1kZXYnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkobmV3IENvbnN0cmFpbnQoJzwnLCAkaGlnaFZlcnNpb24pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYXJyYXkobmV3IENvbnN0cmFpbnQoJz49JywgJGxvd1ZlcnNpb24pLCBuZXcgQ29uc3RyYWludCgnPCcsICRoaWdoVmVyc2lvbikpOwogICAgICAgIH0KICAgICAgICAvLyBIeXBoZW4gUmFuZ2UKICAgICAgICAvLwogICAgICAgIC8vIFNwZWNpZmllcyBhbiBpbmNsdXNpdmUgc2V0LiBJZiBhIHBhcnRpYWwgdmVyc2lvbiBpcyBwcm92aWRlZCBhcyB0aGUgZmlyc3QgdmVyc2lvbiBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlLAogICAgICAgIC8vIHRoZW4gdGhlIG1pc3NpbmcgcGllY2VzIGFyZSByZXBsYWNlZCB3aXRoIHplcm9lcy4gSWYgYSBwYXJ0aWFsIHZlcnNpb24gaXMgcHJvdmlkZWQgYXMgdGhlIHNlY29uZCB2ZXJzaW9uIGluCiAgICAgICAgLy8gdGhlIGluY2x1c2l2ZSByYW5nZSwgdGhlbiBhbGwgdmVyc2lvbnMgdGhhdCBzdGFydCB3aXRoIHRoZSBzdXBwbGllZCBwYXJ0cyBvZiB0aGUgdHVwbGUgYXJlIGFjY2VwdGVkLCBidXQKICAgICAgICAvLyBub3RoaW5nIHRoYXQgd291bGQgYmUgZ3JlYXRlciB0aGFuIHRoZSBwcm92aWRlZCB0dXBsZSBwYXJ0cy4KICAgICAgICBpZiAoXHByZWdfbWF0Y2goJ3teKD9QPGZyb20+JyAuICR2ZXJzaW9uUmVnZXggLiAnKSArLSArKD9QPHRvPicgLiAkdmVyc2lvblJlZ2V4IC4gJykoJCl9aScsICRjb25zdHJhaW50LCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzdGFiaWxpdHkgc3VmZml4CiAgICAgICAgICAgICRsb3dTdGFiaWxpdHlTdWZmaXggPSAnJzsKICAgICAgICAgICAgaWYgKGVtcHR5KCRtYXRjaGVzWzZdKSAmJiBlbXB0eSgkbWF0Y2hlc1s4XSkgJiYgZW1wdHkoJG1hdGNoZXNbOV0pKSB7CiAgICAgICAgICAgICAgICAkbG93U3RhYmlsaXR5U3VmZml4ID0gJy1kZXYnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRsb3dWZXJzaW9uID0gJHRoaXMtPm5vcm1hbGl6ZSgkbWF0Y2hlc1snZnJvbSddKTsKICAgICAgICAgICAgJGxvd2VyQm91bmQgPSBuZXcgQ29uc3RyYWludCgnPj0nLCAkbG93VmVyc2lvbiAuICRsb3dTdGFiaWxpdHlTdWZmaXgpOwogICAgICAgICAgICAkZW1wdHkgPSBmdW5jdGlvbiAoJHgpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkeCA9PT0gMCB8fCAkeCA9PT0gJzAnID8gXGZhbHNlIDogZW1wdHkoJHgpOwogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoISRlbXB0eSgkbWF0Y2hlc1sxMl0pICYmICEkZW1wdHkoJG1hdGNoZXNbMTNdKSB8fCAhZW1wdHkoJG1hdGNoZXNbMTVdKSB8fCAhZW1wdHkoJG1hdGNoZXNbMTddKSB8fCAhZW1wdHkoJG1hdGNoZXNbMThdKSkgewogICAgICAgICAgICAgICAgJGhpZ2hWZXJzaW9uID0gJHRoaXMtPm5vcm1hbGl6ZSgkbWF0Y2hlc1sndG8nXSk7CiAgICAgICAgICAgICAgICAkdXBwZXJCb3VuZCA9IG5ldyBDb25zdHJhaW50KCc8PScsICRoaWdoVmVyc2lvbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkaGlnaE1hdGNoID0gYXJyYXkoJycsICRtYXRjaGVzWzExXSwgJG1hdGNoZXNbMTJdLCAkbWF0Y2hlc1sxM10sICRtYXRjaGVzWzE0XSk7CiAgICAgICAgICAgICAgICAvLyB2YWxpZGF0ZSB0byB2ZXJzaW9uCiAgICAgICAgICAgICAgICAkdGhpcy0+bm9ybWFsaXplKCRtYXRjaGVzWyd0byddKTsKICAgICAgICAgICAgICAgICRoaWdoVmVyc2lvbiA9ICR0aGlzLT5tYW5pcHVsYXRlVmVyc2lvblN0cmluZygkaGlnaE1hdGNoLCAkZW1wdHkoJG1hdGNoZXNbMTJdKSA/IDEgOiAyLCAxKSAuICctZGV2JzsKICAgICAgICAgICAgICAgICR1cHBlckJvdW5kID0gbmV3IENvbnN0cmFpbnQoJzwnLCAkaGlnaFZlcnNpb24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBhcnJheSgkbG93ZXJCb3VuZCwgJHVwcGVyQm91bmQpOwogICAgICAgIH0KICAgICAgICAvLyBCYXNpYyBDb21wYXJhdG9ycwogICAgICAgIGlmIChccHJlZ19tYXRjaCgne14oPD58IT18Pj0/fDw9P3w9PT8pP1xccyooLiopfScsICRjb25zdHJhaW50LCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgJHZlcnNpb24gPSAkdGhpcy0+bm9ybWFsaXplKCRtYXRjaGVzWzJdKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAvLyByZWNvdmVyIGZyb20gYW4gaW52YWxpZCBjb25zdHJhaW50IGxpa2UgZm9vYmFyLWRldiB3aGljaCBzaG91bGQgYmUgZGV2LWZvb2JhcgogICAgICAgICAgICAgICAgICAgIC8vIGV4Y2VwdCBpZiB0aGUgY29uc3RyYWludCB1c2VzIGEga25vd24gb3BlcmF0b3IsIGluIHdoaWNoIGNhc2UgaXQgbXVzdCBiZSBhIHBhcnNlIGVycm9yCiAgICAgICAgICAgICAgICAgICAgaWYgKFxzdWJzdHIoJG1hdGNoZXNbMl0sIC00KSA9PT0gJy1kZXYnICYmIFxwcmVnX21hdGNoKCd7XlswLTlhLXpBLVotLi9dKyR9JywgJG1hdGNoZXNbMl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR2ZXJzaW9uID0gJHRoaXMtPm5vcm1hbGl6ZSgnZGV2LScgLiBcc3Vic3RyKCRtYXRjaGVzWzJdLCAwLCAtNCkpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRvcCA9ICRtYXRjaGVzWzFdID86ICc9JzsKICAgICAgICAgICAgICAgIGlmICgkb3AgIT09ICc9PScgJiYgJG9wICE9PSAnPScgJiYgIWVtcHR5KCRzdGFiaWxpdHlNb2RpZmllcikgJiYgc2VsZjo6cGFyc2VTdGFiaWxpdHkoJHZlcnNpb24pID09PSAnc3RhYmxlJykgewogICAgICAgICAgICAgICAgICAgICR2ZXJzaW9uIC49ICctJyAuICRzdGFiaWxpdHlNb2RpZmllcjsKICAgICAgICAgICAgICAgIH0gZWxzZWlmICgnPCcgPT09ICRvcCB8fCAnPj0nID09PSAkb3ApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIVxwcmVnX21hdGNoKCcvLScgLiBzZWxmOjokbW9kaWZpZXJSZWdleCAuICckLycsIFxzdHJ0b2xvd2VyKCRtYXRjaGVzWzJdKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxzdHJwb3MoJG1hdGNoZXNbMl0sICdkZXYtJykgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2ZXJzaW9uIC49ICctZGV2JzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBhcnJheShuZXcgQ29uc3RyYWludCgkbWF0Y2hlc1sxXSA/OiAnPScsICR2ZXJzaW9uKSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkbWVzc2FnZSA9ICdDb3VsZCBub3QgcGFyc2UgdmVyc2lvbiBjb25zdHJhaW50ICcgLiAkY29uc3RyYWludDsKICAgICAgICBpZiAoaXNzZXQoJGUpKSB7CiAgICAgICAgICAgICRtZXNzYWdlIC49ICc6ICcgLiAkZS0+Z2V0TWVzc2FnZSgpOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbigkbWVzc2FnZSk7CiAgICB9CiAgICAvKioKICAgICAqIEluY3JlbWVudCwgZGVjcmVtZW50LCBvciBzaW1wbHkgcGFkIGEgdmVyc2lvbiBudW1iZXIuCiAgICAgKgogICAgICogU3VwcG9ydCBmdW5jdGlvbiBmb3Ige0BsaW5rIHBhcnNlQ29uc3RyYWludCgpfQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAgJG1hdGNoZXMgICBBcnJheSB3aXRoIHZlcnNpb24gcGFydHMgaW4gYXJyYXkgaW5kZXhlcyAxLDIsMyw0CiAgICAgKiBAcGFyYW0gaW50ICAgICRwb3NpdGlvbiAgMSwyLDMsNCAtIHdoaWNoIHNlZ21lbnQgb2YgdGhlIHZlcnNpb24gdG8gaW5jcmVtZW50L2RlY3JlbWVudAogICAgICogQHBhcmFtIGludCAgICAkaW5jcmVtZW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYWQgICAgICAgVGhlIHN0cmluZyB0byBwYWQgdmVyc2lvbiBwYXJ0cyBhZnRlciAkcG9zaXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBuZXcgdmVyc2lvbgogICAgICoKICAgICAqIEBwaHBzdGFuLXBhcmFtIHN0cmluZ1tdICRtYXRjaGVzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gbWFuaXB1bGF0ZVZlcnNpb25TdHJpbmcoYXJyYXkgJG1hdGNoZXMsICRwb3NpdGlvbiwgJGluY3JlbWVudCA9IDAsICRwYWQgPSAnMCcpCiAgICB7CiAgICAgICAgZm9yICgkaSA9IDQ7ICRpID4gMDsgLS0kaSkgewogICAgICAgICAgICBpZiAoJGkgPiAkcG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICRtYXRjaGVzWyRpXSA9ICRwYWQ7CiAgICAgICAgICAgIH0gZWxzZWlmICgkaSA9PT0gJHBvc2l0aW9uICYmICRpbmNyZW1lbnQpIHsKICAgICAgICAgICAgICAgICRtYXRjaGVzWyRpXSArPSAkaW5jcmVtZW50OwogICAgICAgICAgICAgICAgLy8gSWYgJG1hdGNoZXNbJGldIHdhcyAwLCBjYXJyeSB0aGUgZGVjcmVtZW50CiAgICAgICAgICAgICAgICBpZiAoJG1hdGNoZXNbJGldIDwgMCkgewogICAgICAgICAgICAgICAgICAgICRtYXRjaGVzWyRpXSA9ICRwYWQ7CiAgICAgICAgICAgICAgICAgICAgLS0kcG9zaXRpb247CiAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIG51bGwgb24gYSBjYXJyeSBvdmVyZmxvdwogICAgICAgICAgICAgICAgICAgIGlmICgkaSA9PT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRtYXRjaGVzWzFdIC4gJy4nIC4gJG1hdGNoZXNbMl0gLiAnLicgLiAkbWF0Y2hlc1szXSAuICcuJyAuICRtYXRjaGVzWzRdOwogICAgfQogICAgLyoqCiAgICAgKiBFeHBhbmQgc2hvcnRoYW5kIHN0YWJpbGl0eSBzdHJpbmcgdG8gbG9uZyB2ZXJzaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YWJpbGl0eQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZXhwYW5kU3RhYmlsaXR5KCRzdGFiaWxpdHkpCiAgICB7CiAgICAgICAgJHN0YWJpbGl0eSA9IFxzdHJ0b2xvd2VyKCRzdGFiaWxpdHkpOwogICAgICAgIHN3aXRjaCAoJHN0YWJpbGl0eSkgewogICAgICAgICAgICBjYXNlICdhJzoKICAgICAgICAgICAgICAgIHJldHVybiAnYWxwaGEnOwogICAgICAgICAgICBjYXNlICdiJzoKICAgICAgICAgICAgICAgIHJldHVybiAnYmV0YSc7CiAgICAgICAgICAgIGNhc2UgJ3AnOgogICAgICAgICAgICBjYXNlICdwbCc6CiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhdGNoJzsKICAgICAgICAgICAgY2FzZSAncmMnOgogICAgICAgICAgICAgICAgcmV0dXJuICdSQyc7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJHN0YWJpbGl0eTsKICAgICAgICB9CiAgICB9Cn0KPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGNvbXBvc2VyL3NlbXZlci4KICoKICogKGMpIENvbXBvc2VyIDxodHRwczovL2dpdGh1Yi5jb20vY29tcG9zZXI+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3CiAqIHRoZSBMSUNFTlNFIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KbmFtZXNwYWNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxTZW12ZXI7Cgp1c2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFNlbXZlclxDb25zdHJhaW50XENvbnN0cmFpbnQ7CmNsYXNzIFNlbXZlcgp7CiAgICBjb25zdCBTT1JUX0FTQyA9IDE7CiAgICBjb25zdCBTT1JUX0RFU0MgPSAtMTsKICAgIC8qKiBAdmFyIFZlcnNpb25QYXJzZXIgKi8KICAgIHByaXZhdGUgc3RhdGljICR2ZXJzaW9uUGFyc2VyOwogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgaWYgZ2l2ZW4gdmVyc2lvbiBzYXRpc2ZpZXMgZ2l2ZW4gY29uc3RyYWludHMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbgogICAgICogQHBhcmFtIHN0cmluZyAkY29uc3RyYWludHMKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzYXRpc2ZpZXMoJHZlcnNpb24sICRjb25zdHJhaW50cykKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gc2VsZjo6JHZlcnNpb25QYXJzZXIpIHsKICAgICAgICAgICAgc2VsZjo6JHZlcnNpb25QYXJzZXIgPSBuZXcgVmVyc2lvblBhcnNlcigpOwogICAgICAgIH0KICAgICAgICAkdmVyc2lvblBhcnNlciA9IHNlbGY6OiR2ZXJzaW9uUGFyc2VyOwogICAgICAgICRwcm92aWRlciA9IG5ldyBDb25zdHJhaW50KCc9PScsICR2ZXJzaW9uUGFyc2VyLT5ub3JtYWxpemUoJHZlcnNpb24pKTsKICAgICAgICAkcGFyc2VkQ29uc3RyYWludHMgPSAkdmVyc2lvblBhcnNlci0+cGFyc2VDb25zdHJhaW50cygkY29uc3RyYWludHMpOwogICAgICAgIHJldHVybiAkcGFyc2VkQ29uc3RyYWludHMtPm1hdGNoZXMoJHByb3ZpZGVyKTsKICAgIH0KICAgIC8qKgogICAgICogUmV0dXJuIGFsbCB2ZXJzaW9ucyB0aGF0IHNhdGlzZnkgZ2l2ZW4gY29uc3RyYWludHMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ1tdICR2ZXJzaW9ucwogICAgICogQHBhcmFtIHN0cmluZyAgICRjb25zdHJhaW50cwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzYXRpc2ZpZWRCeShhcnJheSAkdmVyc2lvbnMsICRjb25zdHJhaW50cykKICAgIHsKICAgICAgICAkdmVyc2lvbnMgPSBcYXJyYXlfZmlsdGVyKCR2ZXJzaW9ucywgZnVuY3Rpb24gKCR2ZXJzaW9uKSB1c2UoJGNvbnN0cmFpbnRzKSB7CiAgICAgICAgICAgIHJldHVybiBTZW12ZXI6OnNhdGlzZmllcygkdmVyc2lvbiwgJGNvbnN0cmFpbnRzKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gXGFycmF5X3ZhbHVlcygkdmVyc2lvbnMpOwogICAgfQogICAgLyoqCiAgICAgKiBTb3J0IGdpdmVuIGFycmF5IG9mIHZlcnNpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkdmVyc2lvbnMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc29ydChhcnJheSAkdmVyc2lvbnMpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OnVzb3J0KCR2ZXJzaW9ucywgc2VsZjo6U09SVF9BU0MpOwogICAgfQogICAgLyoqCiAgICAgKiBTb3J0IGdpdmVuIGFycmF5IG9mIHZlcnNpb25zIGluIHJldmVyc2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ1tdICR2ZXJzaW9ucwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByc29ydChhcnJheSAkdmVyc2lvbnMpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OnVzb3J0KCR2ZXJzaW9ucywgc2VsZjo6U09SVF9ERVNDKTsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICR2ZXJzaW9ucwogICAgICogQHBhcmFtIGludCAgICAgICRkaXJlY3Rpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHVzb3J0KGFycmF5ICR2ZXJzaW9ucywgJGRpcmVjdGlvbikKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gc2VsZjo6JHZlcnNpb25QYXJzZXIpIHsKICAgICAgICAgICAgc2VsZjo6JHZlcnNpb25QYXJzZXIgPSBuZXcgVmVyc2lvblBhcnNlcigpOwogICAgICAgIH0KICAgICAgICAkdmVyc2lvblBhcnNlciA9IHNlbGY6OiR2ZXJzaW9uUGFyc2VyOwogICAgICAgICRub3JtYWxpemVkID0gYXJyYXkoKTsKICAgICAgICAvLyBOb3JtYWxpemUgb3V0c2lkZSBvZiB1c29ydCgpIHNjb3BlIGZvciBtaW5vciBwZXJmb3JtYW5jZSBpbmNyZWFzZS4KICAgICAgICAvLyBDcmVhdGVzIGFuIGFycmF5IG9mIGFycmF5czogW1tub3JtYWxpemVkLCBrZXldLCAuLi5dCiAgICAgICAgZm9yZWFjaCAoJHZlcnNpb25zIGFzICRrZXkgPT4gJHZlcnNpb24pIHsKICAgICAgICAgICAgJG5vcm1hbGl6ZWRWZXJzaW9uID0gJHZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSgkdmVyc2lvbik7CiAgICAgICAgICAgICRub3JtYWxpemVkVmVyc2lvbiA9ICR2ZXJzaW9uUGFyc2VyLT5ub3JtYWxpemVEZWZhdWx0QnJhbmNoKCRub3JtYWxpemVkVmVyc2lvbik7CiAgICAgICAgICAgICRub3JtYWxpemVkW10gPSBhcnJheSgkbm9ybWFsaXplZFZlcnNpb24sICRrZXkpOwogICAgICAgIH0KICAgICAgICBcdXNvcnQoJG5vcm1hbGl6ZWQsIGZ1bmN0aW9uIChhcnJheSAkbGVmdCwgYXJyYXkgJHJpZ2h0KSB1c2UoJGRpcmVjdGlvbikgewogICAgICAgICAgICBpZiAoJGxlZnRbMF0gPT09ICRyaWdodFswXSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKENvbXBhcmF0b3I6Omxlc3NUaGFuKCRsZWZ0WzBdLCAkcmlnaHRbMF0pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gLSRkaXJlY3Rpb247CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICRkaXJlY3Rpb247CiAgICAgICAgfSk7CiAgICAgICAgLy8gUmVjcmVhdGUgaW5wdXQgYXJyYXksIHVzaW5nIHRoZSBvcmlnaW5hbCBpbmRleGVzIHdoaWNoIGFyZSBub3cgaW4gc29ydGVkIG9yZGVyLgogICAgICAgICRzb3J0ZWQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRub3JtYWxpemVkIGFzICRpdGVtKSB7CiAgICAgICAgICAgICRzb3J0ZWRbXSA9ICR2ZXJzaW9uc1skaXRlbVsxXV07CiAgICAgICAgfQogICAgICAgIHJldHVybiAkc29ydGVkOwogICAgfQp9Cjw/cGhwCgovKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBjb21wb3Nlci9zZW12ZXIuCiAqCiAqIChjKSBDb21wb3NlciA8aHR0cHM6Ly9naXRodWIuY29tL2NvbXBvc2VyPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldwogKiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCm5hbWVzcGFjZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcU2VtdmVyOwoKdXNlIF9QSFBTdGFuXzhjNjZkODI1NVxDb21wb3NlclxTZW12ZXJcQ29uc3RyYWludFxDb25zdHJhaW50Owp1c2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFNlbXZlclxDb25zdHJhaW50XENvbnN0cmFpbnRJbnRlcmZhY2U7CnVzZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcU2VtdmVyXENvbnN0cmFpbnRcTWF0Y2hBbGxDb25zdHJhaW50Owp1c2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXFNlbXZlclxDb25zdHJhaW50XE1hdGNoTm9uZUNvbnN0cmFpbnQ7CnVzZSBfUEhQU3Rhbl84YzY2ZDgyNTVcQ29tcG9zZXJcU2VtdmVyXENvbnN0cmFpbnRcTXVsdGlDb25zdHJhaW50OwovKioKICogSGVscGVyIGNsYXNzIGdlbmVyYXRpbmcgaW50ZXJ2YWxzIGZyb20gY29uc3RyYWludHMKICoKICogVGhpcyBjb250YWlucyB1dGlsaXRpZXMgZm9yOgogKgogKiAgLSBjb21wYWN0aW5nIGFuIGV4aXN0aW5nIGNvbnN0cmFpbnQgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29tYmluZSBzZXZlcmFsIGludG8gb25lCiAqIGJ5IGNyZWF0aW5nIGEgTXVsdGlDb25zdHJhaW50IG91dCBvZiB0aGUgbWFueSBjb25zdHJhaW50cyB5b3UgaGF2ZS4KICoKICogIC0gY2hlY2tpbmcgd2hldGhlciBvbmUgc3Vic2V0IGlzIGEgc3Vic2V0IG9mIGFub3RoZXIuCiAqCiAqIE5vdGU6IFlvdSBzaG91bGQgY2FsbCBjbGVhciB0byBmcmVlIG1lbW9pemF0aW9uIG1lbW9yeSAgdXNhZ2Ugd2hlbiB5b3UgYXJlIGRvbmUgdXNpbmcgdGhpcyBjbGFzcwogKi8KY2xhc3MgSW50ZXJ2YWxzCnsKICAgIC8qKgogICAgICogQHBocHN0YW4tdmFyIGFycmF5PHN0cmluZywgYXJyYXl7J251bWVyaWMnOiBJbnRlcnZhbFtdLCAnYnJhbmNoZXMnOiBhcnJheXsnbmFtZXMnOiBzdHJpbmdbXSwgJ2V4Y2x1ZGUnOiBib29sfX0+CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljICRpbnRlcnZhbHNDYWNoZSA9IGFycmF5KCk7CiAgICAvKioKICAgICAqIEBwaHBzdGFuLXZhciBhcnJheTxzdHJpbmcsIGludD4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJG9wU29ydE9yZGVyID0gYXJyYXkoJz49JyA9PiAtMywgJzwnID0+IC0yLCAnPicgPT4gMiwgJzw9JyA9PiAzKTsKICAgIC8qKgogICAgICogQ2xlYXJzIHRoZSBtZW1vaXphdGlvbiBjYWNoZSBvbmNlIHlvdSBhcmUgZG9uZQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNsZWFyKCkKICAgIHsKICAgICAgICBzZWxmOjokaW50ZXJ2YWxzQ2FjaGUgPSBhcnJheSgpOwogICAgfQogICAgLyoqCiAgICAgKiBDaGVja3Mgd2hldGhlciAkY2FuZGlkYXRlIGlzIGEgc3Vic2V0IG9mICRjb25zdHJhaW50CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNTdWJzZXRPZihDb25zdHJhaW50SW50ZXJmYWNlICRjYW5kaWRhdGUsIENvbnN0cmFpbnRJbnRlcmZhY2UgJGNvbnN0cmFpbnQpCiAgICB7CiAgICAgICAgaWYgKCRjb25zdHJhaW50IGluc3RhbmNlb2YgTWF0Y2hBbGxDb25zdHJhaW50KSB7CiAgICAgICAgICAgIHJldHVybiBcdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCRjYW5kaWRhdGUgaW5zdGFuY2VvZiBNYXRjaE5vbmVDb25zdHJhaW50IHx8ICRjb25zdHJhaW50IGluc3RhbmNlb2YgTWF0Y2hOb25lQ29uc3RyYWludCkgewogICAgICAgICAgICByZXR1cm4gXGZhbHNlOwogICAgICAgIH0KICAgICAgICAkaW50ZXJzZWN0aW9uSW50ZXJ2YWxzID0gc2VsZjo6Z2V0KG5ldyBNdWx0aUNvbnN0cmFpbnQoYXJyYXkoJGNhbmRpZGF0ZSwgJGNvbnN0cmFpbnQpLCBcdHJ1ZSkpOwogICAgICAgICRjYW5kaWRhdGVJbnRlcnZhbHMgPSBzZWxmOjpnZXQoJGNhbmRpZGF0ZSk7CiAgICAgICAgaWYgKFxjb3VudCgkaW50ZXJzZWN0aW9uSW50ZXJ2YWxzWydudW1lcmljJ10pICE9PSBcY291bnQoJGNhbmRpZGF0ZUludGVydmFsc1snbnVtZXJpYyddKSkgewogICAgICAgICAgICByZXR1cm4gXGZhbHNlOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkaW50ZXJzZWN0aW9uSW50ZXJ2YWxzWydudW1lcmljJ10gYXMgJGluZGV4ID0+ICRpbnRlcnZhbCkgewogICAgICAgICAgICBpZiAoIWlzc2V0KCRjYW5kaWRhdGVJbnRlcnZhbHNbJ251bWVyaWMnXVskaW5kZXhdKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoKHN0cmluZykgJGNhbmRpZGF0ZUludGVydmFsc1snbnVtZXJpYyddWyRpbmRleF0tPmdldFN0YXJ0KCkgIT09IChzdHJpbmcpICRpbnRlcnZhbC0+Z2V0U3RhcnQoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoKHN0cmluZykgJGNhbmRpZGF0ZUludGVydmFsc1snbnVtZXJpYyddWyRpbmRleF0tPmdldEVuZCgpICE9PSAoc3RyaW5nKSAkaW50ZXJ2YWwtPmdldEVuZCgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gXGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkaW50ZXJzZWN0aW9uSW50ZXJ2YWxzWydicmFuY2hlcyddWydleGNsdWRlJ10gIT09ICRjYW5kaWRhdGVJbnRlcnZhbHNbJ2JyYW5jaGVzJ11bJ2V4Y2x1ZGUnXSkgewogICAgICAgICAgICByZXR1cm4gXGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoXGNvdW50KCRpbnRlcnNlY3Rpb25JbnRlcnZhbHNbJ2JyYW5jaGVzJ11bJ25hbWVzJ10pICE9PSBcY291bnQoJGNhbmRpZGF0ZUludGVydmFsc1snYnJhbmNoZXMnXVsnbmFtZXMnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoJGludGVyc2VjdGlvbkludGVydmFsc1snYnJhbmNoZXMnXVsnbmFtZXMnXSBhcyAkaW5kZXggPT4gJG5hbWUpIHsKICAgICAgICAgICAgaWYgKCRuYW1lICE9PSAkY2FuZGlkYXRlSW50ZXJ2YWxzWydicmFuY2hlcyddWyduYW1lcyddWyRpbmRleF0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBcZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIFx0cnVlOwogICAgfQogICAgLyoqCiAgICAgKiBDaGVja3Mgd2hldGhlciAkYSBhbmQgJGIgaGF2ZSBhbnkgaW50ZXJzZWN0aW9uLCBlcXVpdmFsZW50IHRvICRhLT5tYXRjaGVzKCRiKQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhdmVJbnRlcnNlY3Rpb25zKENvbnN0cmFpbnRJbnRlcmZhY2UgJGEsIENvbnN0cmFpbnRJbnRlcmZhY2UgJGIpCiAgICB7CiAgICAgICAgaWYgKCRhIGluc3RhbmNlb2YgTWF0Y2hBbGxDb25zdHJhaW50IHx8ICRiIGluc3RhbmNlb2YgTWF0Y2hBbGxDb25zdHJhaW50KSB7CiAgICAgICAgICAgIHJldHVybiBcdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCRhIGluc3RhbmNlb2YgTWF0Y2hOb25lQ29uc3RyYWludCB8fCAkYiBpbnN0YW5jZW9mIE1hdGNoTm9uZUNvbnN0cmFpbnQpIHsKICAgICAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgICAgICB9CiAgICAgICAgJGludGVyc2VjdGlvbkludGVydmFscyA9IHNlbGY6OmdlbmVyYXRlSW50ZXJ2YWxzKG5ldyBNdWx0aUNvbnN0cmFpbnQoYXJyYXkoJGEsICRiKSwgXHRydWUpLCBcdHJ1ZSk7CiAgICAgICAgcmV0dXJuIFxjb3VudCgkaW50ZXJzZWN0aW9uSW50ZXJ2YWxzWydudW1lcmljJ10pID4gMCB8fCAkaW50ZXJzZWN0aW9uSW50ZXJ2YWxzWydicmFuY2hlcyddWydleGNsdWRlJ10gfHwgXGNvdW50KCRpbnRlcnNlY3Rpb25JbnRlcnZhbHNbJ2JyYW5jaGVzJ11bJ25hbWVzJ10pID4gMDsKICAgIH0KICAgIC8qKgogICAgICogQXR0ZW1wdHMgdG8gb3B0aW1pemUgYSBNdWx0aUNvbnN0cmFpbnQKICAgICAqCiAgICAgKiBXaGVuIG1lcmdpbmcgTXVsdGlDb25zdHJhaW50cyB0b2dldGhlciB0aGV5IGNhbiBnZXQgdmVyeSBsYXJnZSwgdGhpcyB3aWxsCiAgICAgKiBjb21wYWN0IGl0IGJ5IGxvb2tpbmcgYXQgdGhlIHJlYWwgaW50ZXJ2YWxzIGNvdmVyZWQgYnkgYWxsIHRoZSBjb25zdHJhaW50cwogICAgICogYW5kIHRoZW4gY3JlYXRlcyBhIG5ldyBjb25zdHJhaW50IGNvbnRhaW5pbmcgb25seSB0aGUgc21hbGxlc3QgYW1vdW50IG9mIHJ1bGVzCiAgICAgKiB0byBtYXRjaCB0aGUgc2FtZSBpbnRlcnZhbHMuCiAgICAgKgogICAgICogQHJldHVybiBDb25zdHJhaW50SW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29tcGFjdENvbnN0cmFpbnQoQ29uc3RyYWludEludGVyZmFjZSAkY29uc3RyYWludCkKICAgIHsKICAgICAgICBpZiAoISRjb25zdHJhaW50IGluc3RhbmNlb2YgTXVsdGlDb25zdHJhaW50KSB7CiAgICAgICAgICAgIHJldHVybiAkY29uc3RyYWludDsKICAgICAgICB9CiAgICAgICAgJGludGVydmFscyA9IHNlbGY6OmdlbmVyYXRlSW50ZXJ2YWxzKCRjb25zdHJhaW50KTsKICAgICAgICAkY29uc3RyYWludHMgPSBhcnJheSgpOwogICAgICAgICRoYXNOdW1lcmljTWF0Y2hBbGwgPSBcZmFsc2U7CiAgICAgICAgaWYgKFxjb3VudCgkaW50ZXJ2YWxzWydudW1lcmljJ10pID09PSAxICYmIChzdHJpbmcpICRpbnRlcnZhbHNbJ251bWVyaWMnXVswXS0+Z2V0U3RhcnQoKSA9PT0gKHN0cmluZykgSW50ZXJ2YWw6OmZyb21aZXJvKCkgJiYgKHN0cmluZykgJGludGVydmFsc1snbnVtZXJpYyddWzBdLT5nZXRFbmQoKSA9PT0gKHN0cmluZykgSW50ZXJ2YWw6OnVudGlsUG9zaXRpdmVJbmZpbml0eSgpKSB7CiAgICAgICAgICAgICRjb25zdHJhaW50c1tdID0gJGludGVydmFsc1snbnVtZXJpYyddWzBdLT5nZXRTdGFydCgpOwogICAgICAgICAgICAkaGFzTnVtZXJpY01hdGNoQWxsID0gXHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHVuRXF1YWxDb25zdHJhaW50cyA9IGFycmF5KCk7CiAgICAgICAgICAgIGZvciAoJGkgPSAwLCAkY291bnQgPSBcY291bnQoJGludGVydmFsc1snbnVtZXJpYyddKTsgJGkgPCAkY291bnQ7ICRpKyspIHsKICAgICAgICAgICAgICAgICRpbnRlcnZhbCA9ICRpbnRlcnZhbHNbJ251bWVyaWMnXVskaV07CiAgICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50IGludGVydmFsIGVuZHMgd2l0aCA8IE4gYW5kIG5leHQgaW50ZXJ2YWwgYmVnaW5zIHdpdGggPiBOIHdlIGNhbiBzd2FwIHRoaXMgb3V0IGZvciAhPSBOCiAgICAgICAgICAgICAgICAvLyBidXQgdGhpcyBuZWVkcyB0byBoYXBwZW4gYXMgYSBjb25qdW5jdGl2ZSBleHByZXNzaW9uIHRvZ2V0aGVyIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGludGVydmFsCiAgICAgICAgICAgICAgICAvLyBhbmQgZW5kIG9mIG5leHQgaW50ZXJ2YWwsIHNvIFs+PU0sIDxOXSB8fCBbPk4sIDxQXSA9PiBbPj1NLCAhPU4sIDxQXSBidXQgTS9QIGNhbiBiZSBza2lwcGVkIGlmCiAgICAgICAgICAgICAgICAvLyB0aGV5IGFyZSB6ZXJvLytpbmYKICAgICAgICAgICAgICAgIGlmICgkaW50ZXJ2YWwtPmdldEVuZCgpLT5nZXRPcGVyYXRvcigpID09PSAnPCcgJiYgJGkgKyAxIDwgJGNvdW50KSB7CiAgICAgICAgICAgICAgICAgICAgJG5leHRJbnRlcnZhbCA9ICRpbnRlcnZhbHNbJ251bWVyaWMnXVskaSArIDFdOwogICAgICAgICAgICAgICAgICAgIGlmICgkaW50ZXJ2YWwtPmdldEVuZCgpLT5nZXRWZXJzaW9uKCkgPT09ICRuZXh0SW50ZXJ2YWwtPmdldFN0YXJ0KCktPmdldFZlcnNpb24oKSAmJiAkbmV4dEludGVydmFsLT5nZXRTdGFydCgpLT5nZXRPcGVyYXRvcigpID09PSAnPicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBhZGQgYSBzdGFydCBpZiB3ZSBkaWRuJ3QgYWxyZWFkeSBkbyBzbywgY2FuIGJlIHNraXBwZWQgaWYgd2UncmUgbG9va2luZyBhdCBzZWNvbmQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZXJ2YWwgaW4gWz49TSwgPE5dIHx8IFs+TiwgPFBdIHx8IFs+UCwgPFFdIHdoZXJlIHVuRXF1YWxDb25zdHJhaW50cyBjdXJyZW50bHkgY29udGFpbnMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gWz49TSwgIT1OXSBhbHJlYWR5IGFuZCB3ZSBvbmx5IHdhbnQgdG8gYWRkICE9UCByaWdodCBub3cKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxjb3VudCgkdW5FcXVhbENvbnN0cmFpbnRzKSA9PT0gMCAmJiAoc3RyaW5nKSAkaW50ZXJ2YWwtPmdldFN0YXJ0KCkgIT09IChzdHJpbmcpIEludGVydmFsOjpmcm9tWmVybygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdW5FcXVhbENvbnN0cmFpbnRzW10gPSAkaW50ZXJ2YWwtPmdldFN0YXJ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHVuRXF1YWxDb25zdHJhaW50c1tdID0gbmV3IENvbnN0cmFpbnQoJyE9JywgJGludGVydmFsLT5nZXRFbmQoKS0+Z2V0VmVyc2lvbigpKTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKFxjb3VudCgkdW5FcXVhbENvbnN0cmFpbnRzKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIHdoZXJlIHRoZSBlbmQgb2YgdGhlIGZvbGxvd2luZyBpbnRlcnZhbCBvZiBhICE9IGNvbnN0cmFpbnQgaXMgYWRkZWQgYXMgZXhwbGFpbmVkIGFib3ZlCiAgICAgICAgICAgICAgICAgICAgaWYgKChzdHJpbmcpICRpbnRlcnZhbC0+Z2V0RW5kKCkgIT09IChzdHJpbmcpIEludGVydmFsOjp1bnRpbFBvc2l0aXZlSW5maW5pdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdW5FcXVhbENvbnN0cmFpbnRzW10gPSAkaW50ZXJ2YWwtPmdldEVuZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBjb3VudCBpcyAxIGlmIGVudGlyZSBjb25zdHJhaW50IGlzIGp1c3Qgb25lICE9IGV4cHJlc3Npb24KICAgICAgICAgICAgICAgICAgICBpZiAoXGNvdW50KCR1bkVxdWFsQ29uc3RyYWludHMpID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAkY29uc3RyYWludHNbXSA9IG5ldyBNdWx0aUNvbnN0cmFpbnQoJHVuRXF1YWxDb25zdHJhaW50cywgXHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25zdHJhaW50c1tdID0gJHVuRXF1YWxDb25zdHJhaW50c1swXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHVuRXF1YWxDb25zdHJhaW50cyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGJhY2sgPj0geCAtIDw9IHggaW50ZXJ2YWxzIHRvID09IHgKICAgICAgICAgICAgICAgIGlmICgkaW50ZXJ2YWwtPmdldFN0YXJ0KCktPmdldFZlcnNpb24oKSA9PT0gJGludGVydmFsLT5nZXRFbmQoKS0+Z2V0VmVyc2lvbigpICYmICRpbnRlcnZhbC0+Z2V0U3RhcnQoKS0+Z2V0T3BlcmF0b3IoKSA9PT0gJz49JyAmJiAkaW50ZXJ2YWwtPmdldEVuZCgpLT5nZXRPcGVyYXRvcigpID09PSAnPD0nKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnN0cmFpbnRzW10gPSBuZXcgQ29uc3RyYWludCgnPT0nLCAkaW50ZXJ2YWwtPmdldFN0YXJ0KCktPmdldFZlcnNpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKHN0cmluZykgJGludGVydmFsLT5nZXRTdGFydCgpID09PSAoc3RyaW5nKSBJbnRlcnZhbDo6ZnJvbVplcm8oKSkgewogICAgICAgICAgICAgICAgICAgICRjb25zdHJhaW50c1tdID0gJGludGVydmFsLT5nZXRFbmQoKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmICgoc3RyaW5nKSAkaW50ZXJ2YWwtPmdldEVuZCgpID09PSAoc3RyaW5nKSBJbnRlcnZhbDo6dW50aWxQb3NpdGl2ZUluZmluaXR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAkY29uc3RyYWludHNbXSA9ICRpbnRlcnZhbC0+Z2V0U3RhcnQoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbnN0cmFpbnRzW10gPSBuZXcgTXVsdGlDb25zdHJhaW50KGFycmF5KCRpbnRlcnZhbC0+Z2V0U3RhcnQoKSwgJGludGVydmFsLT5nZXRFbmQoKSksIFx0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkZGV2Q29uc3RyYWludHMgPSBhcnJheSgpOwogICAgICAgIGlmICgwID09PSBcY291bnQoJGludGVydmFsc1snYnJhbmNoZXMnXVsnbmFtZXMnXSkpIHsKICAgICAgICAgICAgaWYgKCRpbnRlcnZhbHNbJ2JyYW5jaGVzJ11bJ2V4Y2x1ZGUnXSkgewogICAgICAgICAgICAgICAgaWYgKCRoYXNOdW1lcmljTWF0Y2hBbGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1hdGNoQWxsQ29uc3RyYWludCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGNvbnN0cmFpbnQgc2hvdWxkIGNvbnRhaW4gYSAhPSBvcGVyYXRvciBhbmQgYWxyZWFkeSBjb3ZlciB0aGlzCiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3JlYWNoICgkaW50ZXJ2YWxzWydicmFuY2hlcyddWyduYW1lcyddIGFzICRicmFuY2hOYW1lKSB7CiAgICAgICAgICAgICAgICBpZiAoJGludGVydmFsc1snYnJhbmNoZXMnXVsnZXhjbHVkZSddKSB7CiAgICAgICAgICAgICAgICAgICAgJGRldkNvbnN0cmFpbnRzW10gPSBuZXcgQ29uc3RyYWludCgnIT0nLCAkYnJhbmNoTmFtZSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRkZXZDb25zdHJhaW50c1tdID0gbmV3IENvbnN0cmFpbnQoJz09JywgJGJyYW5jaE5hbWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIGV4Y2x1ZGVkIGJyYW5jaGVzLCBlLmcuICE9IGRldi1mb28gYXJlIGNvbmp1bmN0aXZlIHdpdGggdGhlIGludGVydmFsLCBzbwogICAgICAgICAgICAvLyA+IDIuMCAhPSBkZXYtZm9vIG11c3QgcmV0dXJuIGEgY29uanVuY3RpdmUgY29uc3RyYWludAogICAgICAgICAgICBpZiAoJGludGVydmFsc1snYnJhbmNoZXMnXVsnZXhjbHVkZSddKSB7CiAgICAgICAgICAgICAgICBpZiAoXGNvdW50KCRjb25zdHJhaW50cykgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUNvbnN0cmFpbnQoXGFycmF5X21lcmdlKGFycmF5KG5ldyBNdWx0aUNvbnN0cmFpbnQoJGNvbnN0cmFpbnRzLCBcZmFsc2UpKSwgJGRldkNvbnN0cmFpbnRzKSwgXHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKFxjb3VudCgkY29uc3RyYWludHMpID09PSAxICYmIChzdHJpbmcpICRjb25zdHJhaW50c1swXSA9PT0gKHN0cmluZykgSW50ZXJ2YWw6OmZyb21aZXJvKCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoXGNvdW50KCRkZXZDb25zdHJhaW50cykgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXVsdGlDb25zdHJhaW50KCRkZXZDb25zdHJhaW50cywgXHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGRldkNvbnN0cmFpbnRzWzBdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUNvbnN0cmFpbnQoXGFycmF5X21lcmdlKCRjb25zdHJhaW50cywgJGRldkNvbnN0cmFpbnRzKSwgXHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIG90aGVyd2lzZSBkZXZDb25zdHJhaW50cyBjb250YWlucyBhIGxpc3Qgb2YgPT0gb3BlcmF0b3JzIGZvciBicmFuY2hlcyB3aGljaCBhcmUgZGlzanVuY3RpdmUgd2l0aCB0aGUKICAgICAgICAgICAgLy8gcmVzdCBvZiB0aGUgY29uc3RyYWludAogICAgICAgICAgICAkY29uc3RyYWludHMgPSBcYXJyYXlfbWVyZ2UoJGNvbnN0cmFpbnRzLCAkZGV2Q29uc3RyYWludHMpOwogICAgICAgIH0KICAgICAgICBpZiAoXGNvdW50KCRjb25zdHJhaW50cykgPiAxKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgTXVsdGlDb25zdHJhaW50KCRjb25zdHJhaW50cywgXGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgaWYgKFxjb3VudCgkY29uc3RyYWludHMpID09PSAxKSB7CiAgICAgICAgICAgIHJldHVybiAkY29uc3RyYWludHNbMF07CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgTWF0Y2hOb25lQ29uc3RyYWludCgpOwogICAgfQogICAgLyoqCiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIG51bWVyaWMgaW50ZXJ2YWxzIGFuZCBicmFuY2ggY29uc3RyYWludHMgcmVwcmVzZW50aW5nIGEgZ2l2ZW4gY29uc3RyYWludAogICAgICoKICAgICAqIGlmIHRoZSByZXR1cm5lZCBudW1lcmljIGFycmF5IGlzIGVtcHR5IGl0IG1lYW5zIHRoZSBjb25zdHJhaW50IG1hdGNoZXMgbm90aGluZyBpbiB0aGUgbnVtZXJpYyByYW5nZSAoMCAtICtpbmYpCiAgICAgKiBpZiB0aGUgcmV0dXJuZWQgYnJhbmNoZXMgYXJyYXkgaXMgZW1wdHkgaXQgbWVhbnMgbm8gZGV2LSogdmVyc2lvbnMgYXJlIG1hdGNoZWQKICAgICAqIGlmIGEgY29uc3RyYWludCBtYXRjaGVzIGFsbCBwb3NzaWJsZSBkZXYtKiB2ZXJzaW9ucywgYnJhbmNoZXMgd2lsbCBjb250YWluIEludGVydmFsOjphbnlEZXYoKQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqIEBwaHBzdGFuLXJldHVybiBhcnJheXsnbnVtZXJpYyc6IEludGVydmFsW10sICdicmFuY2hlcyc6IGFycmF5eyduYW1lcyc6IHN0cmluZ1tdLCAnZXhjbHVkZSc6IGJvb2x9fQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldChDb25zdHJhaW50SW50ZXJmYWNlICRjb25zdHJhaW50KQogICAgewogICAgICAgICRrZXkgPSAoc3RyaW5nKSAkY29uc3RyYWludDsKICAgICAgICBpZiAoIWlzc2V0KHNlbGY6OiRpbnRlcnZhbHNDYWNoZVska2V5XSkpIHsKICAgICAgICAgICAgc2VsZjo6JGludGVydmFsc0NhY2hlWyRrZXldID0gc2VsZjo6Z2VuZXJhdGVJbnRlcnZhbHMoJGNvbnN0cmFpbnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6JGludGVydmFsc0NhY2hlWyRrZXldOwogICAgfQogICAgLyoqCiAgICAgKiBAcGFyYW0gYm9vbCAkc3RvcE9uRmlyc3RWYWxpZEludGVydmFsCiAgICAgKgogICAgICogQHBocHN0YW4tcmV0dXJuIGFycmF5eydudW1lcmljJzogSW50ZXJ2YWxbXSwgJ2JyYW5jaGVzJzogYXJyYXl7J25hbWVzJzogc3RyaW5nW10sICdleGNsdWRlJzogYm9vbH19CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdlbmVyYXRlSW50ZXJ2YWxzKENvbnN0cmFpbnRJbnRlcmZhY2UgJGNvbnN0cmFpbnQsICRzdG9wT25GaXJzdFZhbGlkSW50ZXJ2YWwgPSBcZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCRjb25zdHJhaW50IGluc3RhbmNlb2YgTWF0Y2hBbGxDb25zdHJhaW50KSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnbnVtZXJpYycgPT4gYXJyYXkobmV3IEludGVydmFsKEludGVydmFsOjpmcm9tWmVybygpLCBJbnRlcnZhbDo6dW50aWxQb3NpdGl2ZUluZmluaXR5KCkpKSwgJ2JyYW5jaGVzJyA9PiBJbnRlcnZhbDo6YW55RGV2KCkpOwogICAgICAgIH0KICAgICAgICBpZiAoJGNvbnN0cmFpbnQgaW5zdGFuY2VvZiBNYXRjaE5vbmVDb25zdHJhaW50KSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnbnVtZXJpYycgPT4gYXJyYXkoKSwgJ2JyYW5jaGVzJyA9PiBhcnJheSgnbmFtZXMnID0+IGFycmF5KCksICdleGNsdWRlJyA9PiBcZmFsc2UpKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRjb25zdHJhaW50IGluc3RhbmNlb2YgQ29uc3RyYWludCkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6Z2VuZXJhdGVTaW5nbGVDb25zdHJhaW50SW50ZXJ2YWxzKCRjb25zdHJhaW50KTsKICAgICAgICB9CiAgICAgICAgaWYgKCEkY29uc3RyYWludCBpbnN0YW5jZW9mIE11bHRpQ29uc3RyYWludCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignVGhlIGNvbnN0cmFpbnQgcGFzc2VkIGluIHNob3VsZCBiZSBhbiBNYXRjaEFsbENvbnN0cmFpbnQsIENvbnN0cmFpbnQgb3IgTXVsdGlDb25zdHJhaW50IGluc3RhbmNlLCBnb3QgJyAuIFxnZXRfY2xhc3MoJGNvbnN0cmFpbnQpIC4gJy4nKTsKICAgICAgICB9CiAgICAgICAgJGNvbnN0cmFpbnRzID0gJGNvbnN0cmFpbnQtPmdldENvbnN0cmFpbnRzKCk7CiAgICAgICAgJG51bWVyaWNHcm91cHMgPSBhcnJheSgpOwogICAgICAgICRjb25zdHJhaW50QnJhbmNoZXMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRjb25zdHJhaW50cyBhcyAkYykgewogICAgICAgICAgICAkcmVzID0gc2VsZjo6Z2V0KCRjKTsKICAgICAgICAgICAgJG51bWVyaWNHcm91cHNbXSA9ICRyZXNbJ251bWVyaWMnXTsKICAgICAgICAgICAgJGNvbnN0cmFpbnRCcmFuY2hlc1tdID0gJHJlc1snYnJhbmNoZXMnXTsKICAgICAgICB9CiAgICAgICAgaWYgKCRjb25zdHJhaW50LT5pc0Rpc2p1bmN0aXZlKCkpIHsKICAgICAgICAgICAgJGJyYW5jaGVzID0gSW50ZXJ2YWw6Om5vRGV2KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRjb25zdHJhaW50QnJhbmNoZXMgYXMgJGIpIHsKICAgICAgICAgICAgICAgIGlmICgkYlsnZXhjbHVkZSddKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRicmFuY2hlc1snZXhjbHVkZSddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc2p1bmN0aXZlIGNvbnN0cmFpbnQsIHNvIG9ubHkgZXhjbHVkZSB3aGF0J3MgZXhjbHVkZWQgaW4gYWxsIGNvbnN0cmFpbnRzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICE9YSwhPWIgfHwgIT1iLCE9YyA9PiAhPWIKICAgICAgICAgICAgICAgICAgICAgICAgJGJyYW5jaGVzWyduYW1lcyddID0gXGFycmF5X2ludGVyc2VjdCgkYnJhbmNoZXNbJ25hbWVzJ10sICRiWyduYW1lcyddKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBkaXNqdW5jdGl2ZSBjb25zdHJhaW50IHNvIGV4Y2x1ZGUgYWxsIG5hbWVzIHdoaWNoIGFyZSBub3QgZXhwbGljaXRseSBpbmNsdWRlZCBpbiB0aGUgYWx0ZXJuYXRpdmUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gKD09YiB8fCA9PWMpIHx8ICE9YSwhPWIgPT4gIT1hCiAgICAgICAgICAgICAgICAgICAgICAgICRicmFuY2hlc1snZXhjbHVkZSddID0gXHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICRicmFuY2hlc1snbmFtZXMnXSA9IFxhcnJheV9kaWZmKCRiWyduYW1lcyddLCAkYnJhbmNoZXNbJ25hbWVzJ10pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRicmFuY2hlc1snZXhjbHVkZSddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc2p1bmN0aXZlIGNvbnN0cmFpbnQgc28gZXhjbHVkZSBhbGwgbmFtZXMgd2hpY2ggYXJlIG5vdCBleHBsaWNpdGx5IGluY2x1ZGVkIGluIHRoZSBhbHRlcm5hdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICAvLyAhPWEsIT1iIHx8ICg9PWIgfHwgPT1jKSA9PiAhPWEKICAgICAgICAgICAgICAgICAgICAgICAgJGJyYW5jaGVzWyduYW1lcyddID0gXGFycmF5X2RpZmYoJGJyYW5jaGVzWyduYW1lcyddLCAkYlsnbmFtZXMnXSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzanVuY3RpdmUgY29uc3RyYWludCwgc28ganVzdCBhZGQgYWxsIHRoZSBvdGhlciBicmFuY2hlcwogICAgICAgICAgICAgICAgICAgICAgICAvLyAoPT1hIHx8ID09YikgfHwgPT1jID0+ID09YSB8fCA9PWIgfHwgPT1jCiAgICAgICAgICAgICAgICAgICAgICAgICRicmFuY2hlc1snbmFtZXMnXSA9IFxhcnJheV9tZXJnZSgkYnJhbmNoZXNbJ25hbWVzJ10sICRiWyduYW1lcyddKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkYnJhbmNoZXMgPSBJbnRlcnZhbDo6YW55RGV2KCk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRjb25zdHJhaW50QnJhbmNoZXMgYXMgJGIpIHsKICAgICAgICAgICAgICAgIGlmICgkYlsnZXhjbHVkZSddKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRicmFuY2hlc1snZXhjbHVkZSddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbmp1bmN0aXZlLCBzbyBqdXN0IGFkZCBhbGwgYnJhbmNoIG5hbWVzIHRvIGJlIGV4Y2x1ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICE9YSAmJiAhPWIgPT4gIT1hLCE9YgogICAgICAgICAgICAgICAgICAgICAgICAkYnJhbmNoZXNbJ25hbWVzJ10gPSBcYXJyYXlfbWVyZ2UoJGJyYW5jaGVzWyduYW1lcyddLCAkYlsnbmFtZXMnXSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uanVuY3RpdmUsIHNvIG9ubHkga2VlcCBpbmNsdWRlZCBuYW1lcyB3aGljaCBhcmUgbm90IGV4Y2x1ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICg9PWF8fD09YykgJiYgIT1hLCE9YiA9PiA9PWMKICAgICAgICAgICAgICAgICAgICAgICAgJGJyYW5jaGVzWyduYW1lcyddID0gXGFycmF5X2RpZmYoJGJyYW5jaGVzWyduYW1lcyddLCAkYlsnbmFtZXMnXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGJyYW5jaGVzWydleGNsdWRlJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uanVuY3RpdmUsIHNvIG9ubHkga2VlcCBpbmNsdWRlZCBuYW1lcyB3aGljaCBhcmUgbm90IGV4Y2x1ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICE9YSwhPWIgJiYgKD09YXx8PT1jKSA9PiA9PWMKICAgICAgICAgICAgICAgICAgICAgICAgJGJyYW5jaGVzWyduYW1lcyddID0gXGFycmF5X2RpZmYoJGJbJ25hbWVzJ10sICRicmFuY2hlc1snbmFtZXMnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRicmFuY2hlc1snZXhjbHVkZSddID0gXGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbmp1bmN0aXZlLCBzbyBvbmx5IGtlZXAgbmFtZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gYm90aAogICAgICAgICAgICAgICAgICAgICAgICAvLyAoPT1hfHw9PWIpICYmICg9PWF8fD09YykgPT4gPT1hCiAgICAgICAgICAgICAgICAgICAgICAgICRicmFuY2hlc1snbmFtZXMnXSA9IFxhcnJheV9pbnRlcnNlY3QoJGJyYW5jaGVzWyduYW1lcyddLCAkYlsnbmFtZXMnXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRicmFuY2hlc1snbmFtZXMnXSA9IFxhcnJheV91bmlxdWUoJGJyYW5jaGVzWyduYW1lcyddKTsKICAgICAgICBpZiAoXGNvdW50KCRudW1lcmljR3JvdXBzKSA9PT0gMSkgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ251bWVyaWMnID0+ICRudW1lcmljR3JvdXBzWzBdLCAnYnJhbmNoZXMnID0+ICRicmFuY2hlcyk7CiAgICAgICAgfQogICAgICAgICRib3JkZXJzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkbnVtZXJpY0dyb3VwcyBhcyAkZ3JvdXApIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGdyb3VwIGFzICRpbnRlcnZhbCkgewogICAgICAgICAgICAgICAgJGJvcmRlcnNbXSA9IGFycmF5KCd2ZXJzaW9uJyA9PiAkaW50ZXJ2YWwtPmdldFN0YXJ0KCktPmdldFZlcnNpb24oKSwgJ29wZXJhdG9yJyA9PiAkaW50ZXJ2YWwtPmdldFN0YXJ0KCktPmdldE9wZXJhdG9yKCksICdzaWRlJyA9PiAnc3RhcnQnKTsKICAgICAgICAgICAgICAgICRib3JkZXJzW10gPSBhcnJheSgndmVyc2lvbicgPT4gJGludGVydmFsLT5nZXRFbmQoKS0+Z2V0VmVyc2lvbigpLCAnb3BlcmF0b3InID0+ICRpbnRlcnZhbC0+Z2V0RW5kKCktPmdldE9wZXJhdG9yKCksICdzaWRlJyA9PiAnZW5kJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJG9wU29ydE9yZGVyID0gc2VsZjo6JG9wU29ydE9yZGVyOwogICAgICAgIFx1c29ydCgkYm9yZGVycywgZnVuY3Rpb24gKCRhLCAkYikgdXNlKCRvcFNvcnRPcmRlcikgewogICAgICAgICAgICAkb3JkZXIgPSBcdmVyc2lvbl9jb21wYXJlKCRhWyd2ZXJzaW9uJ10sICRiWyd2ZXJzaW9uJ10pOwogICAgICAgICAgICBpZiAoJG9yZGVyID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJG9wU29ydE9yZGVyWyRhWydvcGVyYXRvciddXSAtICRvcFNvcnRPcmRlclskYlsnb3BlcmF0b3InXV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICRvcmRlcjsKICAgICAgICB9KTsKICAgICAgICAkYWN0aXZlSW50ZXJ2YWxzID0gMDsKICAgICAgICAkaW50ZXJ2YWxzID0gYXJyYXkoKTsKICAgICAgICAkaW5kZXggPSAwOwogICAgICAgICRhY3RpdmF0aW9uVGhyZXNob2xkID0gJGNvbnN0cmFpbnQtPmlzQ29uanVuY3RpdmUoKSA/IFxjb3VudCgkbnVtZXJpY0dyb3VwcykgOiAxOwogICAgICAgICRzdGFydCA9IG51bGw7CiAgICAgICAgZm9yZWFjaCAoJGJvcmRlcnMgYXMgJGJvcmRlcikgewogICAgICAgICAgICBpZiAoJGJvcmRlclsnc2lkZSddID09PSAnc3RhcnQnKSB7CiAgICAgICAgICAgICAgICAkYWN0aXZlSW50ZXJ2YWxzKys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkYWN0aXZlSW50ZXJ2YWxzLS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCEkc3RhcnQgJiYgJGFjdGl2ZUludGVydmFscyA+PSAkYWN0aXZhdGlvblRocmVzaG9sZCkgewogICAgICAgICAgICAgICAgJHN0YXJ0ID0gbmV3IENvbnN0cmFpbnQoJGJvcmRlclsnb3BlcmF0b3InXSwgJGJvcmRlclsndmVyc2lvbiddKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRzdGFydCAmJiAkYWN0aXZlSW50ZXJ2YWxzIDwgJGFjdGl2YXRpb25UaHJlc2hvbGQpIHsKICAgICAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgaW52YWxpZCBpbnRlcnZhbHMgbGlrZSA+IHggLSA8PSB4LCBvciA+PSB4IC0gPCB4CiAgICAgICAgICAgICAgICBpZiAoXHZlcnNpb25fY29tcGFyZSgkc3RhcnQtPmdldFZlcnNpb24oKSwgJGJvcmRlclsndmVyc2lvbiddLCAnPScpICYmICgkc3RhcnQtPmdldE9wZXJhdG9yKCkgPT09ICc+JyAmJiAkYm9yZGVyWydvcGVyYXRvciddID09PSAnPD0nIHx8ICRzdGFydC0+Z2V0T3BlcmF0b3IoKSA9PT0gJz49JyAmJiAkYm9yZGVyWydvcGVyYXRvciddID09PSAnPCcpKSB7CiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJGludGVydmFsc1skaW5kZXhdKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGludGVydmFsc1skaW5kZXhdID0gbmV3IEludGVydmFsKCRzdGFydCwgbmV3IENvbnN0cmFpbnQoJGJvcmRlclsnb3BlcmF0b3InXSwgJGJvcmRlclsndmVyc2lvbiddKSk7CiAgICAgICAgICAgICAgICAgICAgJGluZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRzdG9wT25GaXJzdFZhbGlkSW50ZXJ2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHN0YXJ0ID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXkoJ251bWVyaWMnID0+ICRpbnRlcnZhbHMsICdicmFuY2hlcycgPT4gJGJyYW5jaGVzKTsKICAgIH0KICAgIC8qKgogICAgICogQHBocHN0YW4tcmV0dXJuIGFycmF5eydudW1lcmljJzogSW50ZXJ2YWxbXSwgJ2JyYW5jaGVzJzogYXJyYXl7J25hbWVzJzogc3RyaW5nW10sICdleGNsdWRlJzogYm9vbH19CiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdlbmVyYXRlU2luZ2xlQ29uc3RyYWludEludGVydmFscyhDb25zdHJhaW50ICRjb25zdHJhaW50KQogICAgewogICAgICAgICRvcCA9ICRjb25zdHJhaW50LT5nZXRPcGVyYXRvcigpOwogICAgICAgIC8vIGhhbmRsZSBicmFuY2ggY29uc3RyYWludHMgZmlyc3QKICAgICAgICBpZiAoXHN0cnBvcygkY29uc3RyYWludC0+Z2V0VmVyc2lvbigpLCAnZGV2LScpID09PSAwKSB7CiAgICAgICAgICAgICRpbnRlcnZhbHMgPSBhcnJheSgpOwogICAgICAgICAgICAkYnJhbmNoZXMgPSBhcnJheSgnbmFtZXMnID0+IGFycmF5KCksICdleGNsdWRlJyA9PiBcZmFsc2UpOwogICAgICAgICAgICAvLyAhPSBkZXYtZm9vIG1lYW5zIGFueSBudW1lcmljIHZlcnNpb24gbWF5IG1hdGNoLCB3ZSB0cmVhdCA+LzwgbGlrZSAhPSB0aGV5IGFyZSBub3QgcmVhbGx5IGRlZmluZWQgZm9yIGJyYW5jaGVzCiAgICAgICAgICAgIGlmICgkb3AgPT09ICchPScpIHsKICAgICAgICAgICAgICAgICRpbnRlcnZhbHNbXSA9IG5ldyBJbnRlcnZhbChJbnRlcnZhbDo6ZnJvbVplcm8oKSwgSW50ZXJ2YWw6OnVudGlsUG9zaXRpdmVJbmZpbml0eSgpKTsKICAgICAgICAgICAgICAgICRicmFuY2hlcyA9IGFycmF5KCduYW1lcycgPT4gYXJyYXkoJGNvbnN0cmFpbnQtPmdldFZlcnNpb24oKSksICdleGNsdWRlJyA9PiBcdHJ1ZSk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkb3AgPT09ICc9PScpIHsKICAgICAgICAgICAgICAgICRicmFuY2hlc1snbmFtZXMnXVtdID0gJGNvbnN0cmFpbnQtPmdldFZlcnNpb24oKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ251bWVyaWMnID0+ICRpbnRlcnZhbHMsICdicmFuY2hlcycgPT4gJGJyYW5jaGVzKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRvcFswXSA9PT0gJz4nKSB7CiAgICAgICAgICAgIC8vID4gJiA+PQogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ251bWVyaWMnID0+IGFycmF5KG5ldyBJbnRlcnZhbCgkY29uc3RyYWludCwgSW50ZXJ2YWw6OnVudGlsUG9zaXRpdmVJbmZpbml0eSgpKSksICdicmFuY2hlcycgPT4gSW50ZXJ2YWw6Om5vRGV2KCkpOwogICAgICAgIH0KICAgICAgICBpZiAoJG9wWzBdID09PSAnPCcpIHsKICAgICAgICAgICAgLy8gPCAmIDw9CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnbnVtZXJpYycgPT4gYXJyYXkobmV3IEludGVydmFsKEludGVydmFsOjpmcm9tWmVybygpLCAkY29uc3RyYWludCkpLCAnYnJhbmNoZXMnID0+IEludGVydmFsOjpub0RldigpKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRvcCA9PT0gJyE9JykgewogICAgICAgICAgICAvLyBjb252ZXJ0ICE9eCB0byBpbnRlcnZhbHMgb2YgMCAtIDx4ICYmID54IC0gK2luZiArIGRldioKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdudW1lcmljJyA9PiBhcnJheShuZXcgSW50ZXJ2YWwoSW50ZXJ2YWw6OmZyb21aZXJvKCksIG5ldyBDb25zdHJhaW50KCc8JywgJGNvbnN0cmFpbnQtPmdldFZlcnNpb24oKSkpLCBuZXcgSW50ZXJ2YWwobmV3IENvbnN0cmFpbnQoJz4nLCAkY29uc3RyYWludC0+Z2V0VmVyc2lvbigpKSwgSW50ZXJ2YWw6OnVudGlsUG9zaXRpdmVJbmZpbml0eSgpKSksICdicmFuY2hlcycgPT4gSW50ZXJ2YWw6OmFueURldigpKTsKICAgICAgICB9CiAgICAgICAgLy8gY29udmVydCA9PXggdG8gYW4gaW50ZXJ2YWwgb2YgPj14IC0gPD14CiAgICAgICAgcmV0dXJuIGFycmF5KCdudW1lcmljJyA9PiBhcnJheShuZXcgSW50ZXJ2YWwobmV3IENvbnN0cmFpbnQoJz49JywgJGNvbnN0cmFpbnQtPmdldFZlcnNpb24oKSksIG5ldyBDb25zdHJhaW50KCc8PScsICRjb25zdHJhaW50LT5nZXRWZXJzaW9uKCkpKSksICdicmFuY2hlcycgPT4gSW50ZXJ2YWw6Om5vRGV2KCkpOwogICAgfQp9Cjw/cGhwCgovLyBhdXRvbG9hZF9uYW1lc3BhY2VzLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokdmVuZG9yRGlyID0gZGlybmFtZShfX0RJUl9fKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAopOwojIwojIyBCdW5kbGUgb2YgQ0EgUm9vdCBDZXJ0aWZpY2F0ZXMKIyMKIyMgQ2VydGlmaWNhdGUgZGF0YSBmcm9tIE1vemlsbGEgYXMgb2Y6IE1vbiBNYXIgMTEgMTU6MjU6MjcgMjAyNCBHTVQKIyMKIyMgVGhpcyBpcyBhIGJ1bmRsZSBvZiBYLjUwOSBjZXJ0aWZpY2F0ZXMgb2YgcHVibGljIENlcnRpZmljYXRlIEF1dGhvcml0aWVzCiMjIChDQSkuIFRoZXNlIHdlcmUgYXV0b21hdGljYWxseSBleHRyYWN0ZWQgZnJvbSBNb3ppbGxhJ3Mgcm9vdCBjZXJ0aWZpY2F0ZXMKIyMgZmlsZSAoY2VydGRhdGEudHh0KS4gIFRoaXMgZmlsZSBjYW4gYmUgZm91bmQgaW4gdGhlIG1vemlsbGEgc291cmNlIHRyZWU6CiMjIGh0dHBzOi8vaGcubW96aWxsYS5vcmcvcmVsZWFzZXMvbW96aWxsYS1yZWxlYXNlL3Jhdy1maWxlL2RlZmF1bHQvc2VjdXJpdHkvbnNzL2xpYi9ja2Z3L2J1aWx0aW5zL2NlcnRkYXRhLnR4dAojIwojIyBJdCBjb250YWlucyB0aGUgY2VydGlmaWNhdGVzIGluIFBFTSBmb3JtYXQgYW5kIHRoZXJlZm9yZQojIyBjYW4gYmUgZGlyZWN0bHkgdXNlZCB3aXRoIGN1cmwgLyBsaWJjdXJsIC8gcGhwX2N1cmwsIG9yIHdpdGgKIyMgYW4gQXBhY2hlK21vZF9zc2wgd2Vic2VydmVyIGZvciBTU0wgY2xpZW50IGF1dGhlbnRpY2F0aW9uLgojIyBKdXN0IGNvbmZpZ3VyZSB0aGlzIGZpbGUgYXMgdGhlIFNTTENBQ2VydGlmaWNhdGVGaWxlLgojIwojIyBDb252ZXJzaW9uIGRvbmUgd2l0aCBtay1jYS1idW5kbGUucGwgdmVyc2lvbiAxLjI5LgojIyBTSEEyNTY6IDRkOTZiZDUzOWY0NzE5ZTlhY2U0OTM3NTdhZmJlNGEyM2VlODU3OWRlMWM5N2ZiZWJjNTBiYmEzYzEyZThjMWUKIyMKCgpHbG9iYWxTaWduIFJvb3QgQ0EKPT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlEZFRDQ0FsMmdBd0lCQWdJTEJBQUFBQUFCRlV0YXc1UXdEUVlKS29aSWh2Y05BUUVGQlFBd1Z6RUxNQWtHQTFVRUJoTUNRa1V4CkdUQVhCZ05WQkFvVEVFZHNiMkpoYkZOcFoyNGdibll0YzJFeEVEQU9CZ05WQkFzVEIxSnZiM1FnUTBFeEd6QVpCZ05WQkFNVEVrZHMKYjJKaGJGTnBaMjRnVW05dmRDQkRRVEFlRncwNU9EQTVNREV4TWpBd01EQmFGdzB5T0RBeE1qZ3hNakF3TURCYU1GY3hDekFKQmdOVgpCQVlUQWtKRk1Sa3dGd1lEVlFRS0V4QkhiRzlpWVd4VGFXZHVJRzUyTFhOaE1SQXdEZ1lEVlFRTEV3ZFNiMjkwSUVOQk1Sc3dHUVlEClZRUURFeEpIYkc5aVlXeFRhV2R1SUZKdmIzUWdRMEV3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRRGEKRHVhWmpjNmo0MCtLZnZ2eGk0TWxhK3BJSC9FcXNMbVZFUVM5OEdQUjRtZG16eHpkenh0SUsrNk5pWTZhcnltQVphdnB4eTBTeTZzYwpUSEFIb1QwS01NMFZqVS80M2RTTVVCVWM3MUR1eEM3My9PbFM4cEY5NEczVk5UQ09Ya056OGtIcDFXcmpzb2s2VmprNGJ3WThpR2xiCktrM0ZwMVM0YkluTW0vazh5dVg5aWZVU1BKSjRsdGJjZEc2VFJHSFJqY2RHc25VT2h1Z1ppdFZ0Yk5WNEZwV2k2Y2dLT092eUpCTlAKYzFTVEU0VTZHN3dlTkxXTEJZeTVkNHV4Mng4Z2thc0pVMjZRem5zM2RMbHdSNUVpVVdNV2VhNnhya0VtQ01nWks5Rkdxa2pXWkNyWApnelQvTENyQmJCbERTZ2VGNTlOODlpRm83K3J5VXA5L2s1RFBBZ01CQUFHalFqQkFNQTRHQTFVZER3RUIvd1FFQXdJQkJqQVBCZ05WCkhSTUJBZjhFQlRBREFRSC9NQjBHQTFVZERnUVdCQlJnZTJZYVJRMlh5b2xRTDMwRXpUU28vL3o5U3pBTkJna3Foa2lHOXcwQkFRVUYKQUFPQ0FRRUExblBuZkU5MjBJMi83THFpdmpURktESzFmUHhzbkN3cnZRbWVVNzlyWHFvUlNMYmxDS096eWoxaFRkTkdDYk0rdzZEagpZMVViOHJydnJUbmhRN2s0bytZdmlpWTc3NkJRVnZuR0N2MDR6Y1FMY0ZHVWw1Z0UzOE5mbE5VVnlSUkJuTVJkZFdRVkRmOVZNT3lHCmovOE43eXk1WTBiMnF2emZ2R245TGhKSVpKcmdsZkNtN3ltUEFiRVZ0UXdkcGY1cExHa2tlQjZ6cHh4eFl1N0t5SmVzRjEyS3d2aEgKaG00cXhGWXhsZEJuaVlVcitXeW1YVWFkREtxQzVKbFIzWEMzMjFZOVllUnE0VnpXOXY0OTNrSE1CNjVqVXI5VFUvUXI2Y2Y5dHZlQwpYNFhTUVJqYmdiTUVITVVmcElCdkZTREozZ3lJQ2gzV1psWGkvRWpKS1NacDRBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKRW50cnVzdC5uZXQgUHJlbWl1bSAyMDQ4IFNlY3VyZSBTZXJ2ZXIgQ0EKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVLakNDQXhLZ0F3SUJBZ0lFT0dQZStEQU5CZ2txaGtpRzl3MEJBUVVGQURDQnRERVVNQklHQTFVRUNoTUxSVzUwY25WemRDNXUKWlhReFFEQStCZ05WQkFzVU4zZDNkeTVsYm5SeWRYTjBMbTVsZEM5RFVGTmZNakEwT0NCcGJtTnZjbkF1SUdKNUlISmxaaTRnS0d4cApiV2wwY3lCc2FXRmlMaWt4SlRBakJnTlZCQXNUSENoaktTQXhPVGs1SUVWdWRISjFjM1F1Ym1WMElFeHBiV2wwWldReE16QXhCZ05WCkJBTVRLa1Z1ZEhKMWMzUXVibVYwSUVObGNuUnBabWxqWVhScGIyNGdRWFYwYUc5eWFYUjVJQ2d5TURRNEtUQWVGdzA1T1RFeU1qUXgKTnpVd05URmFGdzB5T1RBM01qUXhOREUxTVRKYU1JRzBNUlF3RWdZRFZRUUtFd3RGYm5SeWRYTjBMbTVsZERGQU1ENEdBMVVFQ3hRMwpkM2QzTG1WdWRISjFjM1F1Ym1WMEwwTlFVMTh5TURRNElHbHVZMjl5Y0M0Z1lua2djbVZtTGlBb2JHbHRhWFJ6SUd4cFlXSXVLVEVsCk1DTUdBMVVFQ3hNY0tHTXBJREU1T1RrZ1JXNTBjblZ6ZEM1dVpYUWdUR2x0YVhSbFpERXpNREVHQTFVRUF4TXFSVzUwY25WemRDNXUKWlhRZ1EyVnlkR2xtYVdOaGRHbHZiaUJCZFhSb2IzSnBkSGtnS0RJd05EZ3BNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QQpNSUlCQ2dLQ0FRRUFyVTFMcVJLR3N1cWpJQWNWRm1RcUswdlJ2d3RLVFk3dGdIYWxaN2Q0UU1CelFzaG93TnRUSzkxZXVIYVlOWk9MCkdwMThFem9PSDF1M0hzL2xKQlFlc1lHcGpYMjR6R3RMQS9FQ0ROeXJwVUFrQUg5MGxLR2RDQ216aUF2MWgzZWRWYzNrdzM3WGFtU3IKaFJTR2xWdVhNbEJ2UGNpNlpnemovTDI0U2NGMmlVa1ovY0Nvdlltalp5L0duN3h4R1dDNExla3N5WkIyWm51VTRxOTQxbVZUWFR6VwpuTExQS1FQNUw2UlFzdFJJemdVeVZZcjlzbVJNRHVTWUIzWGJmOSs1Q0ZWZ2hUQXArWHRJcEdtRzR6VS9Ib1pkZW5vVnZlOEFqaFVpClZCY0FrQ2FUdkE1SmFKRy8rRWZUblpWQ3dRNU4zMjhtejhNWUlXSm1RM0RXMWNBSDRRSURBUUFCbzBJd1FEQU9CZ05WSFE4QkFmOEUKQkFNQ0FRWXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVWZVNCMFJHQXZ0aUp1UWlqTWZtaEpBa1d1WEF3RFFZSgpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFEdWJqMWFiTU9kVG1YeDZlYWRObDljWmxaRDdCaC9LTTN4R1k0K1daaVQ2UUJzaEo4cm1jblB5ClQvNHhtZjNJREV4b1U4YUFnaE9ZK3JhdDJsMDk4YzV1OWhVUmxJSU03aitWcnhHckQ5Y3YzaDhEajFjc0hzbTdtaHBFbGVzWVQ2WWYKelgxWEVDK2JCQWxhaExWdTJCMDY0ZGFlMFd4NVhua2NGTVhqMEV5VE8yVTg3ZDg5dnFibGxSckR0Um5EdlY1YnUvOGo3MmdaeXhLVApKMXdETFc4dzBCNjJHcXplV3ZmUnFxZ25wdjU1Z2NSNW1UTlh1aEt3cWVCQ2JKUEtWdDcrYllRTENJdCtqZXJYbUNIRzgrYzhlUzllCm5ORk1GWTNoN0NJM3pKcERDNWZjZ0pDTnMyZWJiMGdJRlZiUHYvRXJmRjZhZHVsWmtNVjhnelVSWlZFPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290Cj09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURkekNDQWwrZ0F3SUJBZ0lFQWdBQXVUQU5CZ2txaGtpRzl3MEJBUVVGQURCYU1Rc3dDUVlEVlFRR0V3SkpSVEVTTUJBR0ExVUUKQ2hNSlFtRnNkR2x0YjNKbE1STXdFUVlEVlFRTEV3cERlV0psY2xSeWRYTjBNU0l3SUFZRFZRUURFeGxDWVd4MGFXMXZjbVVnUTNsaQpaWEpVY25WemRDQlNiMjkwTUI0WERUQXdNRFV4TWpFNE5EWXdNRm9YRFRJMU1EVXhNakl6TlRrd01Gb3dXakVMTUFrR0ExVUVCaE1DClNVVXhFakFRQmdOVkJBb1RDVUpoYkhScGJXOXlaVEVUTUJFR0ExVUVDeE1LUTNsaVpYSlVjblZ6ZERFaU1DQUdBMVVFQXhNWlFtRnMKZEdsdGIzSmxJRU41WW1WeVZISjFjM1FnVW05dmREQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUtNRQp1eUtybUQxWDZDWnltclY1MUNuaTRlaVZnTEd3NDF1T0t5bWFaTitoWGUyd0NRVnQyeWd1em1LaVl2NjBpTm9TNnpqcklaM0FRU3NCClVudUlkOU1jajhlNnVZaTFhZ25uYytnUlFLZlJ6TXBpalMzbGp3dW1VTktvVU1NbzZ2V3JKWWVLbXBZY3FXZTRQd3pWOS9sU0V5L0MKRzlWd2NQQ1B3QkxLQnN1YTRkbktNM3AzMXZqc3VmRm9SRUpJRTlMQXdxU3VYbUQrdHFZRi9MVGRCMWtDMUZrWW1HUDFwV1Bna0F4OQpYYklHZXZPRjZ1dlVBNjVlaEQ1Zi94WHRhYno1T1RaeWRjOTNVazN6eVpBc3VUM2x5U05UUHg4a21DRmNCNWtwdmNZNjdPZHVoanByCmwzUmpNNzFvR0RId2VJMTJ2L3llamwwcWhxZE5rTnduR2prQ0F3RUFBYU5GTUVNd0hRWURWUjBPQkJZRUZPV2RXVENDUjFqTXJQb0kKVkRhR2V6cTFCRTN3TUJJR0ExVWRFd0VCL3dRSU1BWUJBZjhDQVFNd0RnWURWUjBQQVFIL0JBUURBZ0VHTUEwR0NTcUdTSWIzRFFFQgpCUVVBQTRJQkFRQ0ZERjJPNUc5UmFFSUZvTjI3VHljbGhBTzk5MlQ5TGRjdzQ2UVFGK3ZhS1NtMmVUOTI5aGtUSTdnUUN2bFlwTlJoCmNMMEVZV29TaWhmVkNyM0Z2REI4MXVrTUpZMkdRRS9zektOK09NWTNFVS90M1dneGprelNzd0YwN3I1MVhnZElHbjl3L3haY2hNQjUKaGJnRi9YKytaUkdqRDhBQ3RQaFNOemtFMWFreGVoaS9vQ3IwRXBuM28wV0M0enhlOVoyZXRjaWVmQzdJcEo1T0NCUkxiZjF3YldzYQpZNzFrNWgrM3p2RHlueTY3RzdmeVVJaHprc0xpNHhhTm1qSUNxNDRZM2VrUUVlNStOYXVRcno0d2xIclFNejJuWlEvMS9JNmVZczlIClJDd0JYYnNkdFRMU1I5STRMdEQrZ2R3eWFoNjE3anpWL09lQkhSbkRKRUxxWXptcAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlFa1RDQ0EzbWdBd0lCQWdJRVJXdFFWREFOQmdrcWhraUc5dzBCQVFVRkFEQ0JzREVMTUFrR0ExVUVCaE1DVlZNeEZqQVVCZ05WCkJBb1REVVZ1ZEhKMWMzUXNJRWx1WXk0eE9UQTNCZ05WQkFzVE1IZDNkeTVsYm5SeWRYTjBMbTVsZEM5RFVGTWdhWE1nYVc1amIzSncKYjNKaGRHVmtJR0o1SUhKbFptVnlaVzVqWlRFZk1CMEdBMVVFQ3hNV0tHTXBJREl3TURZZ1JXNTBjblZ6ZEN3Z1NXNWpMakV0TUNzRwpBMVVFQXhNa1JXNTBjblZ6ZENCU2IyOTBJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNU1CNFhEVEEyTVRFeU56SXdNak0wCk1sb1hEVEkyTVRFeU56SXdOVE0wTWxvd2diQXhDekFKQmdOVkJBWVRBbFZUTVJZd0ZBWURWUVFLRXcxRmJuUnlkWE4wTENCSmJtTXUKTVRrd053WURWUVFMRXpCM2QzY3VaVzUwY25WemRDNXVaWFF2UTFCVElHbHpJR2x1WTI5eWNHOXlZWFJsWkNCaWVTQnlaV1psY21WdQpZMlV4SHpBZEJnTlZCQXNURmloaktTQXlNREEySUVWdWRISjFjM1FzSUVsdVl5NHhMVEFyQmdOVkJBTVRKRVZ1ZEhKMWMzUWdVbTl2CmRDQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUIKQUxhVnRrTkMrc1p0S205STM1Uk1PVmNGN3NONUVVRm9OdTNzL3BvQmo2RTRLUHozRUVabUxrMGVHckVhVHNiUndKV0lzTW4vTVlzegpBOXUzZzNzK0lJUmU3YkpXS0tmNDRMbEFjVGZGeTBjT2x5cG93Q0tWWWhYYlI5bjEwQ3YvZ2t2SnJUN2VUTnVRZ0ZBL0NZcUVBT3d3CkNqMFl6ZnY5S2xtYUk1VVhMRVdlSDI1RGVXME1YSmorU0tmRkkwZGNYdjF1NXg2MDltaEYwWWFEVzZLS2piSGpLWUQrSlhHSXJiNjgKajZ4U2xrdXFVWTNrRXpFWjZFNU5uOXVzczJyVnZEbFVjY3A2ZW4rUTNYMGRnTm1CdTFrbXdoSCs1cFBpOTREa1pmczBOdzRwZ0hCTgpyemlHTHA1L1Y2K2VGNjdySE1zb0lWKzJITmpub2dRaStkUGEyTXNDQXdFQUFhT0JzRENCclRBT0JnTlZIUThCQWY4RUJBTUNBUVl3CkR3WURWUjBUQVFIL0JBVXdBd0VCL3pBckJnTlZIUkFFSkRBaWdBOHlNREEyTVRFeU56SXdNak0wTWxxQkR6SXdNall4TVRJM01qQTEKTXpReVdqQWZCZ05WSFNNRUdEQVdnQlJva09SbnBLWlRnTWVHWnFUeDkwdEQrNFM5YlRBZEJnTlZIUTRFRmdRVWFKRGtaNlNtVTRESApobWFrOGZkTFEvdUV2VzB3SFFZSktvWklodlo5QjBFQUJCQXdEaHNJVmpjdU1UbzBMakFEQWdTUU1BMEdDU3FHU0liM0RRRUJCUVVBCkE0SUJBUUNUMURDdzF3TWdLdEQ1WStpUkRBVWdxVjhaeW50eVR0U3gyOUNXKzFSYUdTd01DUGV5dklXb25YOXRPMUt6S3R2bjFJU00KWS9ZUHl5WUJrVkJzOUY4VTRwTjB3Qk9lTURwUTQ3Umd4Unp3SWtTTmNVZXN5QnJKNlp1YUFHQVQvM0IrWHhGTlNSdXpGVko3eVZUYQp2NTJWcjJ1YTJKN3A4ZVJEamVJUlJEcS9yNzJEUW5OU2k2cTdweW5QOVdRY0NrM1J2S3FzbnlyUS8zOS8ybjNxc2Uwd0pjR0UyalRTClczaURWdXljTnNNbTRoSDJaMGtka3F1TSsrdi9ldTZGU3FkUWdQQ25YRXFVTGw4Rm1UeFNRZUROdEdQUEFVTzZuSVBjajJBNzgxcTAKdEh1dTJndVFPSFh2Z1IxbTB2ZFhjRGF6di93b3IzRWxoVnNUL2g1L1dyUTgKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQ29tb2RvIEFBQSBTZXJ2aWNlcyByb290Cj09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRU1qQ0NBeHFnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFVRkFEQjdNUXN3Q1FZRFZRUUdFd0pIUWpFYk1Ca0dBMVVFQ0F3UwpSM0psWVhSbGNpQk5ZVzVqYUdWemRHVnlNUkF3RGdZRFZRUUhEQWRUWVd4bWIzSmtNUm93R0FZRFZRUUtEQkZEYjIxdlpHOGdRMEVnClRHbHRhWFJsWkRFaE1COEdBMVVFQXd3WVFVRkJJRU5sY25ScFptbGpZWFJsSUZObGNuWnBZMlZ6TUI0WERUQTBNREV3TVRBd01EQXcKTUZvWERUSTRNVEl6TVRJek5UazFPVm93ZXpFTE1Ba0dBMVVFQmhNQ1IwSXhHekFaQmdOVkJBZ01Fa2R5WldGMFpYSWdUV0Z1WTJobApjM1JsY2pFUU1BNEdBMVVFQnd3SFUyRnNabTl5WkRFYU1CZ0dBMVVFQ2d3UlEyOXRiMlJ2SUVOQklFeHBiV2wwWldReElUQWZCZ05WCkJBTU1HRUZCUVNCRFpYSjBhV1pwWTJGMFpTQlRaWEoyYVdObGN6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0MKZ2dFQkFMNUFuZlJ1NGVwMmh4eE5SVVNPdmtiSWd3YWR3U3IrR0IrTzVBTDY4NnRkVUlvV01RdWFCdERGY0NMTlNTMVVZOHkyYm1oRwpDMVBxeTB3a3dMeHlUdXJ4RmE3MFZKb1NDc042c2pOZzR0cUpWZk1pV1BQZTNNL3ZnNGFpakpSUG4yanltSkJHaENmSGRyL2p6RFVzCmkxNEhaR1dDd0Vpd3FKSDVZWjkySUZDb2tjZG10ZXQ0WWdOVzhJb2FFK294b3g2Z21mMDQ5dlluTWxodkIvVnJ1UHNVSzYrM3FzelcKWTE5empOb0ZtYWc0cU1zWGVEWlJyT21lOUhnNmpjOFAyVUxpbUF5ckw1OE9BZDd2bjVsSjhTM2ZySFJORzVpMVI4WGxLZEg1a0JqSApZcHkrZzhjbWV6NktKY2ZBM1ozbU5XZ1FJSjJQMk43U3c0U2NEVjdvTDhrQ0F3RUFBYU9Cd0RDQnZUQWRCZ05WSFE0RUZnUVVvQkVLCkl6Nlc4UWZzNHE4cDc0S2xmOUF3cExRd0RnWURWUjBQQVFIL0JBUURBZ0VHTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3ZXdZRFZSMGYKQkhRd2NqQTRvRGFnTklZeWFIUjBjRG92TDJOeWJDNWpiMjF2Wkc5allTNWpiMjB2UVVGQlEyVnlkR2xtYVdOaGRHVlRaWEoyYVdObApjeTVqY213d05xQTBvREtHTUdoMGRIQTZMeTlqY213dVkyOXRiMlJ2TG01bGRDOUJRVUZEWlhKMGFXWnBZMkYwWlZObGNuWnBZMlZ6CkxtTnliREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBQ0ZiOEF2Q2I2UCtrK3RaN3hrU0F6ay9FeGZZQVdNeW10cndVU1dnRWR1am0KN2wzc0FnOWcxbzFRR0U4bVRnSGo1ckNsN3IrOGRGUkJ2LzM4RXJqSFQxcjBpV0FGZjJDM0JVcno5dkhDdjhTNWRJYTJMWDFyek5MegpSdDB2eHVCcXc4TTBBeXg5bHQxYXdnNm5DcG5CQll1ckRDL3pYRHJQYkRkVkNZZmVVMEJzV08vOHRxdGxiZ1QyRzl3ODRGb1Z4cDdaCjhWbElNQ0ZsQTJ6czZTRno3SnNEb2VBM3JhQVZHSS82dWdMT3B5eXBFQk1zMU9VSUpxc2lsMkQ0a0Y1MDFLS2FVNzN5cVdqZ29tN0MKMTJ5eG93K2V2K3RvNTFieXJ2TGpLemc2Q1lHMWE0WFh2aTN0UHhxM3NtUGk5V0lzZ3RScUFFRlE4VG1EbjVYcE5wYVliZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClF1b1ZhZGlzIFJvb3QgQ0EgMgo9PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZ0ekNDQTUrZ0F3SUJBZ0lDQlFrd0RRWUpLb1pJaHZjTkFRRUZCUUF3UlRFTE1Ba0dBMVVFQmhNQ1FrMHhHVEFYQmdOVkJBb1QKRUZGMWIxWmhaR2x6SUV4cGJXbDBaV1F4R3pBWkJnTlZCQU1URWxGMWIxWmhaR2x6SUZKdmIzUWdRMEVnTWpBZUZ3MHdOakV4TWpReApPREkzTURCYUZ3MHpNVEV4TWpReE9ESXpNek5hTUVVeEN6QUpCZ05WQkFZVEFrSk5NUmt3RndZRFZRUUtFeEJSZFc5V1lXUnBjeUJNCmFXMXBkR1ZrTVJzd0dRWURWUVFERXhKUmRXOVdZV1JwY3lCU2IyOTBJRU5CSURJd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUMKRHdBd2dnSUtBb0lDQVFDYUdNcExsQTBBTGE4REtZcndENEhJcmt3WmhSMEluNnNwUklYekw0R3RNaDZRUnIramhpWWFIdjUrSEJnNgpYSnhnRnlvNmRJTXpNSDFoVkJITDdhdmc1dEtpZnZWcmJ4aTNDZ3N0L2VrKzd3ckdzeERwM01KR0YvaGQvYVRhLzU1Sldwem1NK1lrCmx2Yy91bHNySEhvMXd0Wm4vcXRtVUl0dEtHQXI3OWRndzhlVHZJMDJrZk4vK05zUkU4U2NkM2JCcnJjQ2FvRjZxVVdENGdYbXVWYkIKbERlUFNIRmpJdXdYWlFlVmlrdmZqOFphQ3VXdzQxOWVheEdyRFBtRjYwVHArQVJ6OHVuK1hKaU05WE92YTdSK3pkUmNBaXRNT2VHeQpsWlV0UW9mWDFiT1FRN2RzRS9IZTNmYkUrSWsvMFhYMWtzT1IxWXFJMEpEczNHM2VpY0psY1phTERRUDluTDliRnF5UzIrcitlWHl0CjY2LzNGc3ZielNVcjVSLzdtcC9pVWN3NlV3eEk1ZzY5eWJSMkJsTG1FUk9GY21NREJPQUVOaXNnR1FMb2RLY2Z0c2xXWnZCMUpkeG4Kd1E1aFlJaXpQdEdvL0tQYUhiRFJzU05VMzBSMmJlMUIyTUd5SXJaVEhOODFIZHloZHlveDVDMzE1ZVhieU9ELzVZRFhDMk9nL3pPaApEN29zRlJYcWw3UFNvclcrOG95V0hocVBIV3lrWVRlNWhuTXoxNWVXbmlOOWdxUk1nZUtoMGJwblg1VUhveWNSN2hZUWU3eEZTa3l5CkJOS3I3OVg5REZIT1VHb0lNZm1SMmd5UFpGd0R3enFMSUQ5dWpXYzlPdGIrZlZ1SXlWNzd6R0hjaXpOMzAwUXlOUWxpQkpJV0VOaWUKSjBmN095SGorT3NkV3dJREFRQUJvNEd3TUlHdE1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0N3WURWUjBQQkFRREFnRUdNQjBHQTFVZApEZ1FXQkJRYWhHSzhTRXd6SlFUVTd0RDJBOFFaUnRHVWF6QnVCZ05WSFNNRVp6QmxnQlFhaEdLOFNFd3pKUVRVN3REMkE4UVpSdEdVCmE2RkpwRWN3UlRFTE1Ba0dBMVVFQmhNQ1FrMHhHVEFYQmdOVkJBb1RFRkYxYjFaaFpHbHpJRXhwYldsMFpXUXhHekFaQmdOVkJBTVQKRWxGMWIxWmhaR2x6SUZKdmIzUWdRMEVnTW9JQ0JRa3dEUVlKS29aSWh2Y05BUUVGQlFBRGdnSUJBRDRLRmsyZkJsdW9ybkZkTHdVdgpaK1lUUllQRU52Ynp3Q1lNRGJWSFpGMzR0SExKUnFVREdDZFZpWGg5ZHVxV05JQVhJTnpuZy9pTi9BZTQybDlOTG1leWhQM1pSUHgzClVJSG1mTFRKRFF0eVUvaDJCd2RCUjVZTSsrQ0NKcE5WalA0aUgyQmxmRi9uSnJQM01wQ1lVTlEzY1ZYMmtpRjQ5NVY1K3ZndEpvZG0KVmpCM3BqZDRNMUlRV0s0L1lZN3lhckh2R0g1S1dXUEtqYUpXMWFjdnZGWWZ6em5CNHZzS3FCVXNmVTE2WThac2wwUTgwbS9EU2hjSworSkRTVjZJWlVhVXRsMEhhQjArcFVOcVFqWlJHNFQ3d2xQMFFBRGoxTytoQTRiUnVWaG9nekc5WWplMHVSWS9XNlpNLzU3RXMzenJXCklvemNoTHNpYjlENDVNWTU2UVNJUE1PNjYxVjZiWUNaSlBWc0FmdjRsN0NVVyt2OTBtL3hkMmdOTldRanJMaFZvUVBSVFVJWjNQaDEKV1ZhaithaEplZml2RHJrUm9IeTNhdTAwMExZbVlqZ2Fod3o0NlAwdTA1Qi9CNUVxSGRaK1hJV0RtYkE0Q0QvcFh2azFCK1RKWW01WApmNmRRbGZlNnlKdm1qcUlCeGRabXYzbGg4endjNGJtQ1hGMmd3K25ZU0wwWm9oRVVHVzZ5aGh0b1BrZzNHb2kzWFpaZW5NZnZKMklJCjRwRVpYTkx4SWQyNkYwS0NsM0dCVXpHcG4vWjlZcjl5NGFPVEhjeUtKbG9KT05ETzF3MkFGclI0cFRxSFRJMktwZFZHbC9Jc0VMbTgKVkNMQUFWQnBRNTcwc3U5dCtPemE4ZU94NzkrUmoxUXFDeVhCSmhuRVVoQUZaZFdDRU9yQ01jMHUKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKUXVvVmFkaXMgUm9vdCBDQSAzCj09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJR25UQ0NCSVdnQXdJQkFnSUNCY1l3RFFZSktvWklodmNOQVFFRkJRQXdSVEVMTUFrR0ExVUVCaE1DUWsweEdUQVhCZ05WQkFvVApFRkYxYjFaaFpHbHpJRXhwYldsMFpXUXhHekFaQmdOVkJBTVRFbEYxYjFaaFpHbHpJRkp2YjNRZ1EwRWdNekFlRncwd05qRXhNalF4Ck9URXhNak5hRncwek1URXhNalF4T1RBMk5EUmFNRVV4Q3pBSkJnTlZCQVlUQWtKTk1Sa3dGd1lEVlFRS0V4QlJkVzlXWVdScGN5Qk0KYVcxcGRHVmtNUnN3R1FZRFZRUURFeEpSZFc5V1lXUnBjeUJTYjI5MElFTkJJRE13Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQwpEd0F3Z2dJS0FvSUNBUURNVjBJV1ZKem1tTlBUVGU3KzdjZWZRemxLWmJQb0ZvZzAydzFaa1hUUGtyZ0VRSzBDU3pHcnZJMlJhTmdnCkRob0I0aHA3VGhkZDRvcTNQNWthemV0aHE4SmxwaCszdDcyM2ovejljSThMb0dlK0FhSlp6M0htRHlsMi83RldlVVVySDU1NlZPaWoKS1RWb3BBRlBENlF1Tis4YnYrT1BFS2h5cTFoWDUxU0d5TW56VzlvczJsMk9ianlqUHRyN2d1WGQ4bHl5QlROdmlqYk8wQk5PLzc5SwpERFJNcHNNaHZWQUVWZXV4dTUzN1JSNWtGZDVWQVl3Q2RyWExvVDlDYWJ3dnZXaERGbGFKS2pkaGtmMm1yazdBeXhSbGxEZExrZ2J2CkJOREluSWpiQzN1QnI3RTlLc1JsT25pMjd0eUFzZExUbVp3NjdtdGFhN09OdDlYT25NSytwVXN2RnJHZWFEc0diNjU5bi9qZTdNd3AKcDVpakpVTXY3L0ZmSnVHSVRmaGVidGZaRkc0Wk0ybW5PNFNKazhSVFZST2hVWGhBK0xqSm91NTd1bEpDZzU0VTdRVlNXbGxXcDVmOApuVDhLS2RqY1Q1RU9FN3plbGFUZmk1bStySnN6aU8rMWdhOGJ4aUpUeVBiSDdwY1VzTVY4ZUZMSThNNXVkMkNFcHVrcWRpRHRXQUVYCk1KUHBHb3ZnYzJQWmFwS1VTVTYwclVxRnhLTWlNUHdKN1dnaWM2YUlERlVoV01YaE9wOHEzY3Joa09EWmM2dHNnTGpvQzJTVG9KeU0KR2YrejBnenNrU2FIaXJPaTRYQ1BMQXJselcxb1VldmFQd1YvaXpMbUUxeHIvbDlBNGlMSXRMUmtUOWE2ZlVnK3FHa00xN3VHY2Nsegp1RDg3blNWTDJ2OUE2d0lEQVFBQm80SUJsVENDQVpFd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pDQjRRWURWUjBnQklIWk1JSFdNSUhUCkJna3JCZ0VFQWI1WUFBTXdnY1V3Z1pNR0NDc0dBUVVGQndJQ01JR0dHb0dEUVc1NUlIVnpaU0J2WmlCMGFHbHpJRU5sY25ScFptbGoKWVhSbElHTnZibk4wYVhSMWRHVnpJR0ZqWTJWd2RHRnVZMlVnYjJZZ2RHaGxJRkYxYjFaaFpHbHpJRkp2YjNRZ1EwRWdNeUJEWlhKMAphV1pwWTJGMFpTQlFiMnhwWTNrZ0x5QkRaWEowYVdacFkyRjBhVzl1SUZCeVlXTjBhV05sSUZOMFlYUmxiV1Z1ZEM0d0xRWUlLd1lCCkJRVUhBZ0VXSVdoMGRIQTZMeTkzZDNjdWNYVnZkbUZrYVhObmJHOWlZV3d1WTI5dEwyTndjekFMQmdOVkhROEVCQU1DQVFZd0hRWUQKVlIwT0JCWUVGUExBRStDQ1F6Nzc3aTluTXBZMVhOdTR5d0xRTUc0R0ExVWRJd1JuTUdXQUZQTEFFK0NDUXo3NzdpOW5NcFkxWE51NAp5d0xRb1Vta1J6QkZNUXN3Q1FZRFZRUUdFd0pDVFRFWk1CY0dBMVVFQ2hNUVVYVnZWbUZrYVhNZ1RHbHRhWFJsWkRFYk1Ca0dBMVVFCkF4TVNVWFZ2Vm1Ga2FYTWdVbTl2ZENCRFFTQXpnZ0lGeGpBTkJna3Foa2lHOXcwQkFRVUZBQU9DQWdFQVQ2MmdMRXo2d1BKdjkyWlYKcXlNMDd1Y3Ayc05idHJDRDJkRFE0aUg3ODJDbk8xMWdVeWVpbS9ZSUlpcm52NkJ5NVp3a2FqR3hrSG9uMjRRUmlTZW1kMW80MTcrcwpodnp1WFlPOEJzYlJkMnNQYlNRdlMzcHNwd2VXeXVPRW42MklpeDJyRm8xYlpoZlpGdlNMZ05MZCtMSjJ3L3c0RTZvTTNrSnBLMjd6ClBPdUFKOXYxcGtRTm4xcFZXUXZWRFZKSXhhNmY4aStBeGVveVVEVVNseTdCNGYveEk0aFJPSi95WmxaMjV3OVJsNlZTREUxSlVaVTIKUGIraVN3d1FIWWFaVEtyemNoR1Q1T3IybTlxb1hhZE50NTRDcm5NQXlOb2pBK2o1NmhsMFlnQ1V5eUlndnBTbldiV0NhcjZaZVhxcAo4a29rVXZkMC9icE81cWdkQW02eERZQkV3YTdUSXpkZnU0VjhLNUl1Nkg2bGk5Mlo0YjhuYnkxZHFudUgvZ3JkUy95TzlTYmtibkJDCmJqUHNNWjU3azhIa3lXa2FQY0JyVGlKdDdxdFlUY2JRUWNFcjZrOFNoMTdyUmRoczlaZ0MwNkRZVllvR21SbWlvSGZSTUo2c3pIWHUKZy9Xd1lqblBiRmZpVE5LUkN3NTFLQnVhdi8wYVEvSEtkL3M3ajJHNGFTZ1dRZ1JlY0NvY0lkaVA0YjBqV3kxMFFKTFpZeGtOYzkxcAp2R0pIdk9CMEs3THJmYjVCRzdYQVJzV2hJc3RmVHNFb2t0NFl1dFVxS0xzUml4ZVRtSmxnbEZ3anoxb25sMTRMQlFhVE54NDdhVGJyCnFaNWhIWTh5Mm80TTFuUStld2trMmdGM1I4UTd6VFNNbWZYSzRTVmhNN0paRytKdTF6ZFh0ZzJwRXRvPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpYUmFtcCBHbG9iYWwgQ0EgUm9vdAo9PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRU1EQ0NBeGlnQXdJQkFnSVFVSlJzN0JqcTFaeE4xWmZ2ZFkrZ3JUQU5CZ2txaGtpRzl3MEJBUVVGQURDQmdqRUxNQWtHQTFVRQpCaE1DVlZNeEhqQWNCZ05WQkFzVEZYZDNkeTU0Y21GdGNITmxZM1Z5YVhSNUxtTnZiVEVrTUNJR0ExVUVDaE1iV0ZKaGJYQWdVMlZqCmRYSnBkSGtnVTJWeWRtbGpaWE1nU1c1ak1TMHdLd1lEVlFRREV5UllVbUZ0Y0NCSGJHOWlZV3dnUTJWeWRHbG1hV05oZEdsdmJpQkIKZFhSb2IzSnBkSGt3SGhjTk1EUXhNVEF4TVRjeE5EQTBXaGNOTXpVd01UQXhNRFV6TnpFNVdqQ0JnakVMTUFrR0ExVUVCaE1DVlZNeApIakFjQmdOVkJBc1RGWGQzZHk1NGNtRnRjSE5sWTNWeWFYUjVMbU52YlRFa01DSUdBMVVFQ2hNYldGSmhiWEFnVTJWamRYSnBkSGtnClUyVnlkbWxqWlhNZ1NXNWpNUzB3S3dZRFZRUURFeVJZVW1GdGNDQkhiRzlpWVd3Z1EyVnlkR2xtYVdOaGRHbHZiaUJCZFhSb2IzSnAKZEhrd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUNZSkI2OUZiUzYzOGVNcFNlMk9BdHA4N1pPcUN3dQpJUjFjUk44aFhYNGpkUDVlZnJSS3Q2YXRINjdnQmhiaW0xdlpaM1JyWFlDUEtaMkdHOW1jRFpodGRoQW9XT1Jsc0g5S21IbWY0TU14CmZvQXJ0WXpBUURzUmh0RExvb1kyWUtUVk1JSnQyVzdRRHhJRU01ZGZUMkZhOE9UNWthdm5IVHU4Nk0vMGF5MDBmT0pJWVJ5TzgyRkUKekcrZ1NxbVVzRTNhNTZrMGVuSTRxRUhNUEpRUmZldklwb3kzaHN2S016dlpQVGVMKzNvK2hpem5jOWNLVjZ4a214bnI5QThFQ0lxcwpBeGNaWlBSYUpTS05OQ3l5OW1nZEVtM1RpaDRVMnNTUHB1SWpoZFY2RGIxcTRPbnM3QmU3UWh0bnFpWHRSWU1oL01ISmZOVmlQdnJ5CnhTM1QvZFJsQWdNQkFBR2pnWjh3Z1p3d0V3WUpLd1lCQkFHQ054UUNCQVllQkFCREFFRXdDd1lEVlIwUEJBUURBZ0dHTUE4R0ExVWQKRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZNWlBvajBHWTRRSm5NNWk1QVNzalZ5MTZiWWJNRFlHQTFVZEh3UXZNQzB3SzZBcApvQ2VHSldoMGRIQTZMeTlqY213dWVISmhiWEJ6WldOMWNtbDBlUzVqYjIwdldFZERRUzVqY213d0VBWUpLd1lCQkFHQ054VUJCQU1DCkFRRXdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBSkVWT1FNQkcyZjdTaHo1Q21CYm9kcE5sMkw1SkZNbjE0SmtUcEF1dzBrYks1cmMKL0toNFp6WHhIZkFSdmJkSTR4RDJEZDgvMHNtMnFsV2tTTG9DMjk1WkxoVmJPNTBXZlVmWE4rcGZUWFlTTnJzZjE2R0JCRVlnb3l4dApxWjRCZmo4cHpnQ1QzLzNKa25PSmlXU2U1eXZrSEpFczBybk9mYzV2TVpuVDVyN1NIcER3Q1JSNVhDT3JUZExhSVI5Tm1YbWQ0YzhuCm54Q2JISWdOc0lwa1FURzREbXlRSktTYlhIR1B1cnQrSEJ2YmFvQVBJYnpwMjZhM1FQU3lpNm14NU8rYUd0QTlhWm51cUNpajRUeXoKOExJUm5NOThRT2JkNTBOOW90ZzZ0YW1OOGpTWnhOUVE0UWI5Q1lRUU8rN0VUUFRzSjN4Q3duUjhnb29KeWJRREpidz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKR28gRGFkZHkgQ2xhc3MgMiBDQQo9PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlFQURDQ0F1aWdBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQURCak1Rc3dDUVlEVlFRR0V3SlZVekVoTUI4R0ExVUVDaE1ZClZHaGxJRWR2SUVSaFpHUjVJRWR5YjNWd0xDQkpibU11TVRFd0x3WURWUVFMRXloSGJ5QkVZV1JrZVNCRGJHRnpjeUF5SUVObGNuUnAKWm1sallYUnBiMjRnUVhWMGFHOXlhWFI1TUI0WERUQTBNRFl5T1RFM01EWXlNRm9YRFRNME1EWXlPVEUzTURZeU1Gb3dZekVMTUFrRwpBMVVFQmhNQ1ZWTXhJVEFmQmdOVkJBb1RHRlJvWlNCSGJ5QkVZV1JrZVNCSGNtOTFjQ3dnU1c1akxqRXhNQzhHQTFVRUN4TW9SMjhnClJHRmtaSGtnUTJ4aGMzTWdNaUJEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVUQ0NBU0F3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFTkFEQ0NBUWdDZ2dFQkFONmQxK3BYR0VtaFcrdlhYMGlHNnI3ZC8rVHZaeHowWldpelYzR2dYbmU3N1p0SjZYQ0FQVllZWXdodgoydkxNMEQ5L0FsUWlWQkRZc29IVXdIVTlTMy9IZDhNK2VLc2FBN1VnYXk5cUs3SEZpSDdFdXg2d3dkaEZKMitxTjFqM2h5YlgyQzMyCnFSZTNIM0kyVHFZWFAyV1lrdHNxYmwyaS9vamdDOTUvNVkwVjRldkxPdFhpRXFJVExkaU9yMThTUGFBSUJRaTJYS1ZsT0FSRm1SNmoKWUdCMHhVR2xjbUliWXNVZmIxOGFRcjRDVVdXb3JpTVlhdng0QTZsTmY0REQrcXRhL0tGQXBNb1pGdjZ5eU85ZWN3M3VkNzJhOW5tWQp2TEVIWjZJVkRkMmdXTVpFZXdvK1lpaGZ1a0VIVTFqUEVYNDRkTVg0LzdWcGtJK0VkT3FYRzY4Q0FRT2pnY0F3Z2Iwd0hRWURWUjBPCkJCWUVGTkxFc05LUjFFd1JjYk5oeXoyaC90Mm9hdFRqTUlHTkJnTlZIU01FZ1lVd2dZS0FGTkxFc05LUjFFd1JjYk5oeXoyaC90Mm8KYXRUam9XZWtaVEJqTVFzd0NRWURWUVFHRXdKVlV6RWhNQjhHQTFVRUNoTVlWR2hsSUVkdklFUmhaR1I1SUVkeWIzVndMQ0JKYm1NdQpNVEV3THdZRFZRUUxFeWhIYnlCRVlXUmtlU0JEYkdGemN5QXlJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNWdnRUFNQXdHCkExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBREpMODdMS1BwSDhFc2FoQjR5T2Q2QXpCaFJja0I0WTl3aW0KUFFvWitZZUFFVzVwNUpZWE1QODBrV055T083TUhBR2pIWlFvcERIMmVzUlUxL2JsTVZnRG9zek9ZdHVVUlhPMXYwWEpKTFhWZ2dLdApJM2xwamJpMlRjN1BUTW96SStnY2lLcWRpMEZ1RnNrZzVZbWV6VHZhY1BkK21TWWdGRlFscTI1emhlYWJJWjBLYklJT3FQakNEUG9RCkhteVc3NGNOeEE5aGk2M3VneXVWK0k2U2hISTU2eURxZysyRHpaZHVDTHpyVGlhMmN5dmswL1pNL2laeDRtRVJkRXIvVnhxSEQzVkkKTHM5UmFSZWdBaEpobGRYUlFMSVFUTzdFckJCRHBxV2VDdFdWWXBvTno0aUN4VElNNUN1ZlJlWU5ueWljc2JrcVdsZXROdyt2SFgvYgp2Wjg9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClN0YXJmaWVsZCBDbGFzcyAyIENBCj09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlFRHpDQ0F2ZWdBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUVVGQURCb01Rc3dDUVlEVlFRR0V3SlZVekVsTUNNR0ExVUVDaE1jClUzUmhjbVpwWld4a0lGUmxZMmh1YjJ4dloybGxjeXdnU1c1akxqRXlNREFHQTFVRUN4TXBVM1JoY21acFpXeGtJRU5zWVhOeklESWcKUTJWeWRHbG1hV05oZEdsdmJpQkJkWFJvYjNKcGRIa3dIaGNOTURRd05qSTVNVGN6T1RFMldoY05NelF3TmpJNU1UY3pPVEUyV2pCbwpNUXN3Q1FZRFZRUUdFd0pWVXpFbE1DTUdBMVVFQ2hNY1UzUmhjbVpwWld4a0lGUmxZMmh1YjJ4dloybGxjeXdnU1c1akxqRXlNREFHCkExVUVDeE1wVTNSaGNtWnBaV3hrSUVOc1lYTnpJRElnUTJWeWRHbG1hV05oZEdsdmJpQkJkWFJvYjNKcGRIa3dnZ0VnTUEwR0NTcUcKU0liM0RRRUJBUVVBQTRJQkRRQXdnZ0VJQW9JQkFRQzNNc2orNlhHbUJJV3REQkZrMzg1Tjc4Z0RHSWMvb2F2N1BLYWY4TU9oMnRUWQpiaXRUa1Bza3BENkU4SjdvWCt6bEowVDFLS1kvZTk3Z0t2RElyMU12bnNvRkFaTWVqMlljT2FkTitscTJjd1FsWnV0M2YrZFp4a3FaCkpSUlU2eWJIODM4WjFUQndqNit3UmlyL3Jlc3A3ZGVmcWdTSG85VDVpYVUwWDl0RGtZSTIyV1k4c2JpNWd2MmNPajRReUR2dkJtVm0KZXBzWkdEMy9jVkU4TUM1ZnZqMTNjN0pkQm16REkxYWFLNFVta2h5bkFyUGtQdzJ2Q0htQ3VEWTk2cHpUTmJPOGFjcjF6SjNvL1dTTgpGNEF6Ymw1S1habkpIb2UwblJyQTFXNFROU05lMzV0ZlBlL1c5M2JDNmo2N2VBMGNRbWRyQk5qNDF0cHZpL0pFb0FHckFnRURvNEhGCk1JSENNQjBHQTFVZERnUVdCQlMvWDdmUnp0MGZodlJiVmF6YzF4RENEcW1JNXpDQmtnWURWUjBqQklHS01JR0hnQlMvWDdmUnp0MGYKaHZSYlZhemMxeERDRHFtSTU2RnNwR293YURFTE1Ba0dBMVVFQmhNQ1ZWTXhKVEFqQmdOVkJBb1RIRk4wWVhKbWFXVnNaQ0JVWldObwpibTlzYjJkcFpYTXNJRWx1WXk0eE1qQXdCZ05WQkFzVEtWTjBZWEptYVdWc1pDQkRiR0Z6Y3lBeUlFTmxjblJwWm1sallYUnBiMjRnClFYVjBhRzl5YVhSNWdnRUFNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFBV2RQNGlkMGNrYVZhR3MKYWZQeldkcWJBWWNhVDFlcG9Ya0pLdHYzTDdJZXpNZGVhdGlEaDZHWDcwazFQbmNHUVZoaXY0NVl1QXBuUCt5ejNTRm1IOGxVK25MTQpQVXhBMklHdmQ1NkRlcnVpeC9VMEY0N1pFVUQwL0N3cVRSVi9wMkpkTGlYVEFBc2dHaDFvK1JlNDlMMkw3U2haM1UwV2l4ZUR5TEpsCnh5MTZwYXE4VTRadDNWZWt5dmdnUVF0bzhQVDdkTDVXWFhwNTlma2RoZU10bGI3MWNaQkR6STBmbWdBS2h5bnBWU0pZQUNQcTR4SkQKS1Z0SENOMk1RV3BsQnFqbElhcEJ0SlVobGJsOTBUU3JFOWF0dk56aVBUbk52VDUxY0tFWVdRUEpJclNQbk5WZUt0ZWx0dFFLYmZpMwpRQkZHbWg5NURtSy9ENWZzNEM4ZkY1UT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKRGlnaUNlcnQgQXNzdXJlZCBJRCBSb290IENBCj09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRHR6Q0NBcCtnQXdJQkFnSVFET2ZnNVJmWVJ2NlA1V0Q4Ry9Bd09UQU5CZ2txaGtpRzl3MEJBUVVGQURCbE1Rc3dDUVlEVlFRRwpFd0pWVXpFVk1CTUdBMVVFQ2hNTVJHbG5hVU5sY25RZ1NXNWpNUmt3RndZRFZRUUxFeEIzZDNjdVpHbG5hV05sY25RdVkyOXRNU1F3CklnWURWUVFERXh0RWFXZHBRMlZ5ZENCQmMzTjFjbVZrSUVsRUlGSnZiM1FnUTBFd0hoY05NRFl4TVRFd01EQXdNREF3V2hjTk16RXgKTVRFd01EQXdNREF3V2pCbE1Rc3dDUVlEVlFRR0V3SlZVekVWTUJNR0ExVUVDaE1NUkdsbmFVTmxjblFnU1c1ak1Sa3dGd1lEVlFRTApFeEIzZDNjdVpHbG5hV05sY25RdVkyOXRNU1F3SWdZRFZRUURFeHRFYVdkcFEyVnlkQ0JCYzNOMWNtVmtJRWxFSUZKdmIzUWdRMEV3CmdnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUN0RGhYTzVFT0FYTEdIODdkZytYRVNwYTdjSnBTSXF2VE8KOVNBNUtGaGdEUGlBMnFrVmxUSmhQTFd4S0lTS2l0eWZDZ3lERjNxUGtLeUs1M2xUWERHRUt2WVBtREkyZHN6ZTNUeW9vdTlxK3lIeQpVbUhmbnlEWEgrS3gyZjRZWk5JU1cxLzVXQmcxdkVmTm9UYjVhMy9Vc0RnK3dSdkRqRFBaMkM4WS9pZ1BzNmVEMXNOdVJNQmhOWllXCi9sbWNpM1p0MS9HaVN3MHIvd3R5MnA1ZzBJNlFOY1o0VlljZ29jL2xiUXJJU1h3eG1ETnNJdW1IMERKYW9yb1RnaEh0T1JlZG1UcHkKb2ViNnBOblZGekYxcm9WOUlxNC9BVWFHOWloNXlMSGE1RmNYeEg0Y0RyQzBrcVpXczcyeWwrMnFwL0MzeGFnL2xSYlEvNkdXNndoZgpHSGRQQWdNQkFBR2pZekJoTUE0R0ExVWREd0VCL3dRRUF3SUJoakFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjBHQTFVZERnUVdCQlJGCjY2S3Y5SkxMZ2pFdFVZdW5weUdkODIzSUR6QWZCZ05WSFNNRUdEQVdnQlJGNjZLdjlKTExnakV0VVl1bnB5R2Q4MjNJRHpBTkJna3EKaGtpRzl3MEJBUVVGQUFPQ0FRRUFvZzY4MytMdDhPTnljM3BrbEwvM2NtYllNdVJDZFdLdWgrdnkxZG5lVnJPZnpNNFVLTGtObDJCYwpFa3hZNU5NOWcwbEZXSmMxYVJxb1IrcFd4bm1yRXRobmdZVGZmd2s4bE9hNEppd2d2VDJ6S0luM1gvOGk0cGVFSCtsbDc0ZmczOEZuClNiTmQ2N0lKS3VzbTdYaStmVDhyODdjbU5XMWZpUUcyU1Z1ZkFRV2JxejBsd2N5MmY4THhiNGJHK21SbzY0RXRsT3RDdC9xTUh0MWkKOGI1UVo3ZHN2ZlB4SDJzTU5nY1dmemQ4cVZ0dGV2RVNSbUNEMXljRXZrdk9sNzdEWnlwb0VkK0E1d3d6WnI4VERSUnU4MzhmWXhBZQorbzBiSlcxc2o2VzNZUUd4MHFNbW9SQnhuYTNpdy9uRG1WRzNLd2NJemk3bVVMS24rZ3BGTDZMdzhnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKRGlnaUNlcnQgR2xvYmFsIFJvb3QgQ0EKPT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURyekNDQXBlZ0F3SUJBZ0lRQ0R2Z1ZwQkNSckdoZFdySldaSEhTakFOQmdrcWhraUc5dzBCQVFVRkFEQmhNUXN3Q1FZRFZRUUcKRXdKVlV6RVZNQk1HQTFVRUNoTU1SR2xuYVVObGNuUWdTVzVqTVJrd0Z3WURWUVFMRXhCM2QzY3VaR2xuYVdObGNuUXVZMjl0TVNBdwpIZ1lEVlFRREV4ZEVhV2RwUTJWeWRDQkhiRzlpWVd3Z1VtOXZkQ0JEUVRBZUZ3MHdOakV4TVRBd01EQXdNREJhRncwek1URXhNVEF3Ck1EQXdNREJhTUdFeEN6QUpCZ05WQkFZVEFsVlRNUlV3RXdZRFZRUUtFd3hFYVdkcFEyVnlkQ0JKYm1NeEdUQVhCZ05WQkFzVEVIZDMKZHk1a2FXZHBZMlZ5ZEM1amIyMHhJREFlQmdOVkJBTVRGMFJwWjJsRFpYSjBJRWRzYjJKaGJDQlNiMjkwSUVOQk1JSUJJakFOQmdrcQpoa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTRqdmhFWExlcUtUVG8xZXFVS0tQQzNlUXlhS2w3aExPbGxzQkNTRE1BWk9uClRqQzNVL2REeEdrQVY1M2lqU0xkaHdaQUFJRUp6czRiZzcvZnpUdHhSdUxXWnNjRnMzWW5Gbzk3bmg2VmZlNjNTS01JMnRhdmVndzUKQm1WL1NsMGZ2QmY0cTc3dUtOZDBmM3A0bVZtRmFHNWNJekpMdjA3QTZGcHQ0M0MvZHhDLy9BSDJoZG1vUkJCWU1xbDFHTlhSb3I1SAo0aWRxOUpveitFa0lZSXZVWDdRNmhMK2hxa3BNZlQ3UFQxOXNkbDZnU3plUm50d2k1bTNPRkJxT2Fzdit6Yk1VWkJmSFd5bWVNci95Cjd2clRDMExVcTdkQk10b00xTy80Z2RXN2pWZy90UnZvU1NpaWNOb3hCTjMzc2hieVRBcE9CNmp0U2oxZXRYK2prTU92SndJREFRQUIKbzJNd1lUQU9CZ05WSFE4QkFmOEVCQU1DQVlZd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVUE5NVFOVmJSVEx0bQo4S1BpR3h2RGw3STkwVlV3SHdZRFZSMGpCQmd3Rm9BVUE5NVFOVmJSVEx0bThLUGlHeHZEbDdJOTBWVXdEUVlKS29aSWh2Y05BUUVGCkJRQURnZ0VCQU11Y042cElFeElLK3QxRW5FOVNzUFRmcmdUMWVYa0lveVFZL0VzcmhNQXR1ZFhIL3ZUQkgxakx1RzJjZW5Ubm1DbXIKRWJYamNLQ2h6VXlJbVpPTWtYRGlxdzhjdnBPcC8yUFY1QWRnMDZPL25Wc0o4ZFdPNDFQMGptUDZQNmZidEdiZlltYlcwVzVCamZJdAp0ZXAzU3ArZFdPSXJXY0JBSSswdEtJSkZQbmxVa2lhWTRJQklxRGZ2OE5aNVlCYmVyT2dPelc2c1JCYzRMMG5hNFVVK0tyazJVODg2ClVBYjNMdWpFVjBsc1lTRVkxUVN0ZUR3c09vQnJwK3V2RlJUcDJJbkJ1VGhzNHBGc2l2OWt1WGNsVnpEQUd5U2o0ZHpwMzBkOHRiUWsKQ0FVdzdDMjlDNzlGdjFDNXFmUHJtQUVTcmNpSXhwZzBYNDBLUE1icDFaV1ZiZDQ9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkRpZ2lDZXJ0IEhpZ2ggQXNzdXJhbmNlIEVWIFJvb3QgQ0EKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRHhUQ0NBcTJnQXdJQkFnSVFBcXhjSm1vTFFKdVBDM255cmtZbGR6QU5CZ2txaGtpRzl3MEJBUVVGQURCc01Rc3dDUVlEVlFRRwpFd0pWVXpFVk1CTUdBMVVFQ2hNTVJHbG5hVU5sY25RZ1NXNWpNUmt3RndZRFZRUUxFeEIzZDNjdVpHbG5hV05sY25RdVkyOXRNU3N3CktRWURWUVFERXlKRWFXZHBRMlZ5ZENCSWFXZG9JRUZ6YzNWeVlXNWpaU0JGVmlCU2IyOTBJRU5CTUI0WERUQTJNVEV4TURBd01EQXcKTUZvWERUTXhNVEV4TURBd01EQXdNRm93YkRFTE1Ba0dBMVVFQmhNQ1ZWTXhGVEFUQmdOVkJBb1RERVJwWjJsRFpYSjBJRWx1WXpFWgpNQmNHQTFVRUN4TVFkM2QzTG1ScFoybGpaWEowTG1OdmJURXJNQ2tHQTFVRUF4TWlSR2xuYVVObGNuUWdTR2xuYUNCQmMzTjFjbUZ1ClkyVWdSVllnVW05dmRDQkRRVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNYk01WFBtKzlTNzVTMHQKTXFiZjVZRS95YzBsU2JaeEtzUFZsRFJub2dvY3NGOXBwa0N4eExleWo5Q1lwS2xCV1RyVDNKVFdQTnQwT0tSS3pFMGxndmRLcFZNUwpPTzd6U1cxeGtYNWp0cXVtWDhPa2hQaFBZbEcrK01YczJ6aVM0d2JsQ0pFTXhDaEJWZnZMV29rVmZuSG9OYjlOY2drOXZqbzRVRnQzCk1SdU5zOGNrUlpxbnJHMEFGRm9FdDdvVDYxRUttRUZCSWs1bFlZZUJRVkNtZVZ5SjNobEtWOVV1NWwwY1V5eCttTTBhQmhha2FIUFEKTkFRVFhLRngwMXA4VmR0ZVpPRTNoekJXQk9VUnRDbUFFdkY1T1lpaUFoRjhKMmEzaUxkNDhzb0txRGlyQ21UQ3YyWmRsWVRCb1NVZQpoMTBhVUFzZ0VzeEJ1MjRMVVRpNFM4c0NBd0VBQWFOak1HRXdEZ1lEVlIwUEFRSC9CQVFEQWdHR01BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdIUVlEVlIwT0JCWUVGTEUrdzJrRCtMOUhBZFNZSmhvSUF1OWpaQ3ZETUI4R0ExVWRJd1FZTUJhQUZMRSt3MmtEK0w5SEFkU1kKSmhvSUF1OWpaQ3ZETUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCQVFBY0dnYVgzTmVjbnp5SVpnWUlWeUhiSVVmNEttZXF2eGd5ZGtBUQpWOEdLODNyWkVXV09OZnFlL0VXMW50bE1NVXU0a2VoRExJNnplTTdiNDFONWNkYmxJWlFCMmxXSG1pUms5b3Btek42Y044Mm9OTEZwCm15UElubmdpSzNCRDQxVkhNV0VaNzFqRmhTOU9NUGFnTVJZanlPZmlaUll6eTc4YUc2QTkrTXBlaXpHTFlBaUpMUXdHWEZLM3hQa0sKbU5FVlg1OFN2bncyWXppOVJLUi81Q1lyQ3NTWGFRM3BqT0xBRUZlNHlIWVNrVlh5U0duWXZDb0NXdzlFMUNBeDIvUzZjQ1pka0dDZQp2RXNYQ1MrMHl4NURhTWtISjhIU1hQZnFJYmxvRXB3OG5MK2UvSUJjbTJQTjdFZXFKU2Rub0RmekFJSjlWTmVwK09rdUU2TjM2QjlLCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClN3aXNzU2lnbiBHb2xkIENBIC0gRzIKPT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRnVqQ0NBNktnQXdJQkFnSUpBTHRBSEVQMVhrK3dNQTBHQ1NxR1NJYjNEUUVCQlFVQU1FVXhDekFKQmdOVkJBWVRBa05JTVJVdwpFd1lEVlFRS0V3eFRkMmx6YzFOcFoyNGdRVWN4SHpBZEJnTlZCQU1URmxOM2FYTnpVMmxuYmlCSGIyeGtJRU5CSUMwZ1J6SXdIaGNOCk1EWXhNREkxTURnek1ETTFXaGNOTXpZeE1ESTFNRGd6TURNMVdqQkZNUXN3Q1FZRFZRUUdFd0pEU0RFVk1CTUdBMVVFQ2hNTVUzZHAKYzNOVGFXZHVJRUZITVI4d0hRWURWUVFERXhaVGQybHpjMU5wWjI0Z1IyOXNaQ0JEUVNBdElFY3lNSUlDSWpBTkJna3Foa2lHOXcwQgpBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFyK1R1Zm9za0RoSnVxVkF0RmtRN2twSmN5cmhkaEpKQ0V5cThaVmVDUUQ1WEpNMVFpeVVxCnQyLzg3NkxRd0I4Q0pFb1RsbzhqRStZb1dBQ2pSOGNHcDRRaks3dTlsaXQvVmN5THdWY2ZEbUpsRDkwOVZvcHoycTUrYmJxQkhINUMKakNBMTJVTk5oUHFFMjFJczh3NG5kd3RydnhFdmNuaWZMdGcrNWhnM1dpcHkrZHBpa0pLVnloK2M2Yk04Szh2ekFSTy9Xcy9CdFFwZwp2ZDIxbVdSVHVLQ1dzMi9pSm5lUmpPQmlFQUtmTkErazFaSXpVZDYramJxRWVtQThhdHVmSyt6ZTNnRS9iazNsVUliTHRLL3RSRURGCnlscU0ydElyZktqdXZxYmxDcW9PcGQ4RlVyZFZ4eUpkTW1xWGwyTVQyOG5iZVRaN2hUcEt4VktKK1NUbm5YZXBndjlWSEtWeGFTdlIKQWlUeXN5YlVhOW9FVmVYQkNzZHRNRGVRS3VTZUZETmVGaGRWeFZ1MXl6U0prdkdkSm8raEI5VEdzbmhRMnd3TUMzd0xqRUhYdWVuZApqSWozbzAyeU1zellGOXJOdDg1bW5kVDlYdis5bHo0cGRlZCtwMkpZcnlVMHBVSEhQYndOVU1vREF3OElXaCtWYzNoaXY2OXlGR2tPCnBlVUREbmlPSmloQzhBY0xZaUFRWnpsRytxa0R6QVE0ZW1idklJTzFqRXBXanBFQS9JNWNndDZJb01QaWFHNTlqZTg4M1dYMFhheFIKN3lTQXJxcFdsMi81clgzYVlUK1lkenlsa2JZY2pDYmFaYUlKYmNIaVZPTzV5a3hNZ0k5M2UyQ2FIdCsyOGtnZURycE9WRzJZNE9HaQpHcUozVU0vRVk1THNSeG1kNitacnpzRUNBd0VBQWFPQnJEQ0JxVEFPQmdOVkhROEJBZjhFQkFNQ0FRWXdEd1lEVlIwVEFRSC9CQVV3CkF3RUIvekFkQmdOVkhRNEVGZ1FVV3lWN2xxUmxVWDY0T2ZQQWVHWmU2RHJuOE80d0h3WURWUjBqQkJnd0ZvQVVXeVY3bHFSbFVYNjQKT2ZQQWVHWmU2RHJuOE80d1JnWURWUjBnQkQ4d1BUQTdCZ2xnaFhRQldRRUNBUUV3TGpBc0JnZ3JCZ0VGQlFjQ0FSWWdhSFIwY0RvdgpMM0psY0c5emFYUnZjbmt1YzNkcGMzTnphV2R1TG1OdmJTOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdnSUJBQ2U2NDVSODhhN0EzaGZtCjVkalY5VlN3Zy9TN3pWNEZlMCtmZFdhdlBPaFdmdnh5ZURnRDJTdGlHd0M1K09sZ3pjek9VWXJIVURGdTRVcCtHQzlwV2JZOVpJRXIKNDRPRTVpS0hqbjNnN2dLWlliZ2U5TGdyaUJJV2hNSXhremlXTWFhNU8xTS93eVNUVmx0cGt1ekZ3YnM0QU9Qc0Y2bTQzTWQ4QVlPZgpNa2U2VWlJMEhUSjZDVmFuZkNVMnFUMUwyc0NDYndxN0VzaUhTeWNSK1I0dHg1TS9udHRmSm10UzJTNks4UlRHUkkwVnFiZS92ZDZtCkd1NnVMZnRJZHhmK3UreXZHUFVxVWZBNWhKZVZiRzRid3l2RWRHQjVKYkFLSjkvZlh0STV6MFY5UWt2ZnN5d2V4Y1pkeWxVNm9KeHAKbW8vYTc3S3dQSitIYkJJclpYQVZVakVhSk05dk1TTlFINHhQanlQRGRFRmpIRldvRk4wKzRGRlF6L0ViTUZZT2tyQ0NoZGlEeXlKawp2QzI0SmRWVW9yZ0c2cTJTcENTZ3dZYTFTaE5xUjg4dUMxYVZWTXZPbXR0cXRLYXkyMEVJaGlkMzkycWdRbXdMT003WGRWQXlrc0xmCkt6QWlTTkRWUVRnbFhhVHBYWi9HbEhYUVJmMHdsME9Qa0tzS3g0WnpZRXBwTGQ2bGVOY0cybXFlU3o1M09pQVRJZ0hRdjJpZVkyQnIKTlUwTGJicWhQY0NUNEg4anMxV3RjaVZPUnZuU0Z1K3daTUVCbnVuS29HcVlEcy9ZWVBJdlNiamtRdUU0TlJiMHlHNVA5NEZXNkxxagp2aU92cnYxdkErQUNPekIyK2h0dFFjOEJzZW00eVdiMDJ5YnpPcVIwOGtra1c4bXcwRmZCK2o1NjRaZkoKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyCj09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRnZUQ0NBNldnQXdJQkFnSUlUeHZVTDFTN0wwc3dEUVlKS29aSWh2Y05BUUVGQlFBd1J6RUxNQWtHQTFVRUJoTUNRMGd4RlRBVApCZ05WQkFvVERGTjNhWE56VTJsbmJpQkJSekVoTUI4R0ExVUVBeE1ZVTNkcGMzTlRhV2R1SUZOcGJIWmxjaUJEUVNBdElFY3lNQjRYCkRUQTJNVEF5TlRBNE16STBObG9YRFRNMk1UQXlOVEE0TXpJME5sb3dSekVMTUFrR0ExVUVCaE1DUTBneEZUQVRCZ05WQkFvVERGTjMKYVhOelUybG5iaUJCUnpFaE1COEdBMVVFQXhNWVUzZHBjM05UYVdkdUlGTnBiSFpsY2lCRFFTQXRJRWN5TUlJQ0lqQU5CZ2txaGtpRwo5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBeFBHSGY5TjRNZmM0eWZqRG1VTzh4L2U4TitkT2NicExqNlZ6SFZ4dW1LNERWNjQ0Ck4wTXZGejBmeU01b0VNRjRyaGtES3hENkxIbUQ5dWk1YUxsVjhnUkVwem41L0FTTEh2R2lUU2Y1WVh1NnQrV2lFN2JyWVQ3UWJOSG0KKy9wZTdSMjBucUExVzZHU3kvQkprdjZGQ2dVKzV0a0w0ays3M0pVMy9KSHBNalVpMFI4NlRpZUZuYkFWbERMYVlRMUhUV0JDcnBKSAo2SU5hVUZqcGlvdTVYYUhjM1psS0h6Wm51MGprZzdZMzYwZzZydzluanhjSDZBVEs3Mm94aDlUQXR2bVVjWHRuWkxpMmtVcENlMlV1Ck1Hb005WkR1bGVieXpZTHMyYUZLN1BheVMrVkZoZVp0ZUpNRUxweUNiVGFweERGa0g0YURDeXIwTlFwNHlWWFBRYkJINlRDZm1iNWgKcUFhRXVTaDZYempaRzZrNHNJTi9jOEhETzBncWdnOGhtN2pNcURYRGhCdURzejYrcEpWcEFUcUpBSGdFMmNuMG1SbXJWbjViaTRZNQpGWkdrRUN3Sk1vQmdzNVBBS3JZWUM1MStqVW55RUVwLytkVkdMeG1TbzVtbkpxeTdqRHptRHJ4SEI5eHpVZkZ3WkM4SStiUkhIVEJzClJPb3BONFdTYUdhOGd6aitlemt1MDFEd0gvdGVZTGFwcHZvblFmR2JHSEx5OVlSMFNzbG54RlN1U0dUZmpORnVzQjNoQjQ4SUhwbWMKY2VsTTJLWDNSeElmZE5GUm5vYnp3cUlqUUF0ejIwdW01M01Hak1HZzZjRlpyRWI2NWkvNHozR2NSbTI1eEJXTk9Ia0RSVWp2eEYzWApDTzZIT1NLR3NnMFBXRVAzY2FsSUx2M3ExaDhDQXdFQUFhT0JyRENCcVRBT0JnTlZIUThCQWY4RUJBTUNBUVl3RHdZRFZSMFRBUUgvCkJBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVUY2RE53ZVJCdGpwYk84dEZuYjBjd3BqNmhsZ3dId1lEVlIwakJCZ3dGb0FVRjZETndlUkIKdGpwYk84dEZuYjBjd3BqNmhsZ3dSZ1lEVlIwZ0JEOHdQVEE3QmdsZ2hYUUJXUUVEQVFFd0xqQXNCZ2dyQmdFRkJRY0NBUllnYUhSMApjRG92TDNKbGNHOXphWFJ2Y25rdWMzZHBjM056YVdkdUxtTnZiUzh3RFFZSktvWklodmNOQVFFRkJRQURnZ0lCQUhQR2dlQW4waTBQCjRKVXc0cHBCZjFBc1gxOWlZYW1HYW1rWURIUkoxbDJFNmtGU0dHOVlyVkJXSUdyR3ZTaHBXSkhja1JFMXFUb2R2QnFsWUo3WUgzOUYKa1duWmZydDRjc0VHRHlyT2o0VndZYXlnelF1NE9TbFdoREpPaHJzOXhDcloxeDl5N3Y1Um9TSkJzWEVDWXhxQ3NHS3JYbGNTSDkvTAozWFdnd0YxNWtJd2I0RkRtM2pIK21IdHdYNldRMkszNEFyWnYwMkRkUUVzaXhUMnRPbnFmR2hwSGtYa3p1b0xjTW1rRGxtNGZTL0J4Ci91Tm5jcUN4djF5TDVQcVpJc2VFdVJ1Tkk1Yy83U1hnejJXNzlXRUU3OTBlc2xwQklscWhuMTBzNkZ2SmJha01ESGlxWU1aV2p3RmEKREdpOGFSbDV4QjkrbHdXL3hla2tVVjdVMVV0VDdka2pXallEWmFQQkE2MUJNUE5HRzRXUXIyVzExYkhrRmx0NGRSMlhlbTFacVNxUAplOTdEaDRrUW1VbHplTWc5dlZFMWRDclY4WDVwR3lxN083MGx1SnBhUFhKaGtHYUg3Z3pXVGRRUmRBdHEvZ3NEL0tOVlY0bitTc3V1Cld4Y0Z5UEtOSXpGVE9OSXRhaitDdVkwSWF2ZGVRWFJ1d3hGK0I2d3BZSkUvT01wWEVBMjlNQy9IcGVaQm9OcXVCWWVhb0tSbGJFd0oKREltNnVOTzV3Sk9LTVBxTjVacHJGUUZPWjZyYVlsWStoQWhtMHNRMmZhYytFUHlJNE5TQTVRQzlxdk5PQnFONmF2bGljdU1KVCt1YgpEZ0VqOForN2ZOemNiQkdYSmJMeXRHTVUwZ1lxWjR5RDljN3FCOWlhYWg3czVBcTdLa3pyQ1dBNXpzcGkyQzV1Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClNlY3VyZVRydXN0IENBCj09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlEdURDQ0FxQ2dBd0lCQWdJUURQQ09YQWdXcGExQ2YvRHJKeGhaMERBTkJna3Foa2lHOXcwQkFRVUZBREJJTVFzd0NRWURWUVFHCkV3SlZVekVnTUI0R0ExVUVDaE1YVTJWamRYSmxWSEoxYzNRZ1EyOXljRzl5WVhScGIyNHhGekFWQmdOVkJBTVREbE5sWTNWeVpWUnkKZFhOMElFTkJNQjRYRFRBMk1URXdOekU1TXpFeE9Gb1hEVEk1TVRJek1URTVOREExTlZvd1NERUxNQWtHQTFVRUJoTUNWVk14SURBZQpCZ05WQkFvVEYxTmxZM1Z5WlZSeWRYTjBJRU52Y25CdmNtRjBhVzl1TVJjd0ZRWURWUVFERXc1VFpXTjFjbVZVY25WemRDQkRRVENDCkFTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS3VrZ2VXVnpmWDJGSTdDVDhyVTRuaVZXSnhCNFEyWlFDUVgKT1pFelp1bSs0WU92WWx5SjBmd2tXMkd6NEJFUlFSd2RidkM0dS9qZXA0RzZwa2pHbngyOXZvNnBRVDY0bE8wcEd0U08wZ01kQSs5dApEV2NjVjljR3Jjckk5ZjRPcjJZbFNBU1dDMTJqdWhiRENFL1JSdmdVWFBMSVhnR1piZjJJeklhb3dXOHhRbXhTUG1qTDh4azAzN3VICkdGYUFKc1RRM01CdjM5Nmd3cEVXb0dRUlMwUzhIdmJuK21QZVpxeDJwSEdqN0RhVWFIcDNwTEhuRGkrQmV1SzFjb2J2b211TDhBL2IKMDFrL3VuSzhSQ1NjNDNPejk2OVhMMEltbmFsMHVnQlM4a3ZOVTN4SEN6YUZEbWFwQ0pjV05GZkJadmVBNCsxd1ZNZVQ0QzRvRlZtSAp1cnNDQXdFQUFhT0JuVENCbWpBVEJna3JCZ0VFQVlJM0ZBSUVCaDRFQUVNQVFUQUxCZ05WSFE4RUJBTUNBWVl3RHdZRFZSMFRBUUgvCkJBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVFqSzJGdm9FL2Y1ZFMzckQvZmRNUUIxYVE2OHdOQVlEVlIwZkJDMHdLekFwb0NlZ0pZWWoKYUhSMGNEb3ZMMk55YkM1elpXTjFjbVYwY25WemRDNWpiMjB2VTFSRFFTNWpjbXd3RUFZSkt3WUJCQUdDTnhVQkJBTUNBUUF3RFFZSgpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFERHRUMHJoV0RwU2NsdTFwcU5sR0thN1VUdDM2WjNxMDU5YzRFVmxldzNLVytKd1VMS1VCUlN1ClNjZU5RUWNTYzVSK0RDTWgvYndRZjJBUVduTDFtQTZzN0xsLzNYcHZYZE1jOVArSUJXbENxUVZ4eUxlc0p1Z3V0SXhxLzNIY3VMSGYKbWJ4OElWUXI1RmlpdTFjcHJwNnBveGttRDVrdUNMRHYvV25QbVJvSmplT25ueXZKTmpSN0pMTjRUSlVYcEFZbUhyWmtValpmWUdmWgpuTVVGZEF2blp5UFNDUHlJNmE2TGYrRXc5RGQrL2NZeTJpMmVSREF3Yk80SDN0STAvTkwvUVBaTDlHWkdCbFNtOGpJS1l5WXdhNXZSCjNJdEh1dUc1MVdMUW9xRDBad1Y0S1dNYWJ3VFcrTVpNbzVxeE43U041U2hMSFo0c3dyaG92TzBDN2pFPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpTZWN1cmUgR2xvYmFsIENBCj09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2RENDQXFTZ0F3SUJBZ0lRQjFZaXBPalVpb2xOOUJQSThQanFwVEFOQmdrcWhraUc5dzBCQVFVRkFEQktNUXN3Q1FZRFZRUUcKRXdKVlV6RWdNQjRHQTFVRUNoTVhVMlZqZFhKbFZISjFjM1FnUTI5eWNHOXlZWFJwYjI0eEdUQVhCZ05WQkFNVEVGTmxZM1Z5WlNCSApiRzlpWVd3Z1EwRXdIaGNOTURZeE1UQTNNVGswTWpJNFdoY05Namt4TWpNeE1UazFNakEyV2pCS01Rc3dDUVlEVlFRR0V3SlZVekVnCk1CNEdBMVVFQ2hNWFUyVmpkWEpsVkhKMWMzUWdRMjl5Y0c5eVlYUnBiMjR4R1RBWEJnTlZCQU1URUZObFkzVnlaU0JIYkc5aVlXd2cKUTBFd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUN2TlM3WXJHeFZhUVp4NVJOb0pMTlAyTXdoUi9qeApZRGlKaVFQcHZlcGVSbE1KM0Z6MVd1ajNSU29DNnpGaDF5a3pUTTdIZkFvM2ZnKzZNcGpoSFpldmo4ZmN5VGlXODlzYS9GSHRhTWJRCmJxUjhKTkd1UXNpV1VHTXU0UDUxL3Bpblgwa3VsZU01TTJTT0hxUmZrTkpuUExMWi9rRzVWYWNKam5JRkhvdmRSSVdDUXRCSndCMWcKOE5FWExKWHI5cVhCa3FQRndxY0lZQTFnQkJDV2VaNFdOT2FwdHZvbFJUbklIbVg1ay9XcThWTGNtWmc5cFlZYUREVXora3VsQkFZVgpIREdBNzZvWWE4SjcxOXJPK1RNZzFmVzlhak10Z1FUN3NGelVuS1BpWEIzanFVSjFYbnZVZCs4NVZMckpDaGdiRXBsSkw0aEwvVkJpCjBYUG5qM3BEQWdNQkFBR2pnWjB3Z1pvd0V3WUpLd1lCQkFHQ054UUNCQVllQkFCREFFRXdDd1lEVlIwUEJBUURBZ0dHTUE4R0ExVWQKRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZLOUVCTUpCZmtpRDIwNDVBdXpzaEhybXpzbWtNRFFHQTFVZEh3UXRNQ3N3S2FBbgpvQ1dHSTJoMGRIQTZMeTlqY213dWMyVmpkWEpsZEhKMWMzUXVZMjl0TDFOSFEwRXVZM0pzTUJBR0NTc0dBUVFCZ2pjVkFRUURBZ0VBCk1BMEdDU3FHU0liM0RRRUJCUVVBQTRJQkFRQmpHZ2hBZmFSZVV3MTMySHF1SHcwTFVSWUQ3eGg4eU9PdmFsaVRGR0NSc29UY2lFNisKT1lvNjgrYUNpVjBCTjdPckpLUVZEcEkxV2twRVhrNVgrblhPSDBqT1p2UThRQ2FTbUd3YjdpUkdEQmV6VXFYYnBaR1J6emZUYitjbgpDRHBPR1I4NnAxaGNGODk1UDR2a3A5TW1JNTBtRDFocC9FZCtzdENOaTVPL0tVOURhWFIyWjB2UEI0em1BdmUxNGJSRHRVc3RGSi81CjNDWU52NlpIZEFiWWlORTZLVENFenRJNWdHSWJxTWRYU2J4cVZWRm5GVXErTlFmazFYV1lOM2t3Rk5zcG5XekZhY3hIVmFJdzk4eGMKZjhMRG1CeHJUaGFBNjNwNFpVV2lBQnF2REExVlpEUkl1Sks1OGJSUUtmSlBJeC9hYkt3ZlJPSGRJM2hSVzhjVwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpDT01PRE8gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlFSFRDQ0F3V2dBd0lCQWdJUVRvRXRpb0psNEFzQzdqNDFBa2JsUFRBTkJna3Foa2lHOXcwQkFRVUZBRENCZ1RFTE1Ba0dBMVVFCkJoTUNSMEl4R3pBWkJnTlZCQWdURWtkeVpXRjBaWElnVFdGdVkyaGxjM1JsY2pFUU1BNEdBMVVFQnhNSFUyRnNabTl5WkRFYU1CZ0cKQTFVRUNoTVJRMDlOVDBSUElFTkJJRXhwYldsMFpXUXhKekFsQmdOVkJBTVRIa05QVFU5RVR5QkRaWEowYVdacFkyRjBhVzl1SUVGMQpkR2h2Y21sMGVUQWVGdzB3TmpFeU1ERXdNREF3TURCYUZ3MHlPVEV5TXpFeU16VTVOVGxhTUlHQk1Rc3dDUVlEVlFRR0V3SkhRakViCk1Ca0dBMVVFQ0JNU1IzSmxZWFJsY2lCTllXNWphR1Z6ZEdWeU1SQXdEZ1lEVlFRSEV3ZFRZV3htYjNKa01Sb3dHQVlEVlFRS0V4RkQKVDAxUFJFOGdRMEVnVEdsdGFYUmxaREVuTUNVR0ExVUVBeE1lUTA5TlQwUlBJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNQpNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTBFQ0xpM0xqa1J2M1VjRWJWQVNZMDZtL3dlYUtYVHVICis3dUl6ZzNqTHo4R2x2Q2lLVkNacnRzN29WZXdkRkZ4emUxQ2tVMUIvcW5JMkdxR2QwUzdXV2FYVUY2MDFDeHdSTS9hTjVWQ2FUd3cKeEhHelV2QWhUYUhZdWpsOEhKNmpKSjN5Z3hhWXFoWjhRNXNWVzdldU5KSCsxR0ltR0VhYVArdkIrZkdRVit1c2VnMkwyM0l3YW1iVgo0RWFqY054bzJmOEVTSWwzM3JYcCsyZHRRZW04T2IweTJXSUM4YkdvUFc0M25PSXY0dE9pSm92R3VGVkRpT0VqUHFYU0pEbHFSNnNBCjFLR3pxU1grRFQrbkhiclRVY0VMcE5xc09POVZVQ1FGWlVhVE5FOHRqYTNHMUNFWjBvN0tCV0Z4QjNOSDVZb1pFcjBFVGM1T25LVkkKckxzbTl3SURBUUFCbzRHT01JR0xNQjBHQTFVZERnUVdCQlFMV09XTHhrd1ZONlJBcVRDcEliNUhObHBXL3pBT0JnTlZIUThCQWY4RQpCQU1DQVFZd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pCSkJnTlZIUjhFUWpCQU1ENmdQS0E2aGpob2RIUndPaTh2WTNKc0xtTnZiVzlrCmIyTmhMbU52YlM5RFQwMVBSRTlEWlhKMGFXWnBZMkYwYVc5dVFYVjBhRzl5YVhSNUxtTnliREFOQmdrcWhraUc5dzBCQVFVRkFBT0MKQVFFQVBwaWVtL1liNmRjNXQzaXVIWElZU2RPSDVFT0M2ei9KcXZXb3RlOVZmQ0ZTWmZuVkRlRnM5RDZNazNPUkxnTEVUZ2R4YjhDUApPR0VJcUI2QkNzQXZJQzlCaTVIY1NFVzg4Y2JldW5ack04Z0FMVEZHVE8zbm5jK0lsUDh6d0Zib0pJWW11Tmc0T044cWE5MFN6TWMvClJ4ZE1vc0lHbGduVzIvNC9QRVpCMzFqaVZnODhPOEVja3pYWk9GS3M3c2pzTGpCT2xEVzBKQjlMZUduYThnSTR6SlZTay9Cd0pWbWMKSUdmRTd2bUxWMkgwa25aOVA0U05WYmZvNWF6VjhmVVpWcVphKzVBY3I1UHI1UnpVWjVkZEJBNitDNE9tRjRPNU1CS2d4VE1WQmJrTgorOGNGZHVQWVNvMzhOQmVqeGlFb3ZqQkZNUjdIZUw1WVlUaXNPK0lCWlE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpDT01PRE8gRUNDIENlcnRpZmljYXRpb24gQXV0aG9yaXR5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNpVENDQWcrZ0F3SUJBZ0lRSDBldnFtSUFjRkJVVEFHZW0yT1pLakFLQmdncWhrak9QUVFEQXpDQmhURUxNQWtHQTFVRUJoTUMKUjBJeEd6QVpCZ05WQkFnVEVrZHlaV0YwWlhJZ1RXRnVZMmhsYzNSbGNqRVFNQTRHQTFVRUJ4TUhVMkZzWm05eVpERWFNQmdHQTFVRQpDaE1SUTA5TlQwUlBJRU5CSUV4cGJXbDBaV1F4S3pBcEJnTlZCQU1USWtOUFRVOUVUeUJGUTBNZ1EyVnlkR2xtYVdOaGRHbHZiaUJCCmRYUm9iM0pwZEhrd0hoY05NRGd3TXpBMk1EQXdNREF3V2hjTk16Z3dNVEU0TWpNMU9UVTVXakNCaFRFTE1Ba0dBMVVFQmhNQ1IwSXgKR3pBWkJnTlZCQWdURWtkeVpXRjBaWElnVFdGdVkyaGxjM1JsY2pFUU1BNEdBMVVFQnhNSFUyRnNabTl5WkRFYU1CZ0dBMVVFQ2hNUgpRMDlOVDBSUElFTkJJRXhwYldsMFpXUXhLekFwQmdOVkJBTVRJa05QVFU5RVR5QkZRME1nUTJWeWRHbG1hV05oZEdsdmJpQkJkWFJvCmIzSnBkSGt3ZGpBUUJnY3Foa2pPUFFJQkJnVXJnUVFBSWdOaUFBUURSM3N2ZGNtQ0ZZWDdkZVNSRnRTcllwbjFQbElMQnM1QkFIK1gKNFFva1BCMEJCTzQ5MG8wSmx3emdkZVQ2KzNlS0t2VURZRXMyaXhZakZxMEpjZlJLOUNoUXRQNklIRzQvYkM4dkNWbGJwVnNMTTVuaQp3ejJKK1dvczc3TFRCdW1qUWpCQU1CMEdBMVVkRGdRV0JCUjFjYWNaU0JtOG5aM3FRVWZmbE1SSWQ1blRlVEFPQmdOVkhROEJBZjhFCkJBTUNBUVl3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFLQmdncWhrak9QUVFEQXdOb0FEQmxBakVBN3dOYmVxeTNlQXB5dDRqZi83VkcKRkFrSytxRG1mUWpHR29lOUdLaHp2U2JLWUF5ZHpwbWZ6MXdQTU9HK0ZESHFBakFVOUpNOFNhY3plcEJHUjdOamZST2JUcmR2R0RlQQpVLzdkSU9BMW1qYlJ4d0c1NXR6ZDgvOGRMRG9XVjltU09kWT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQ2VydGlnbmEKPT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURxRENDQXBDZ0F3SUJBZ0lKQVA3YzR3RVB5VWovTUEwR0NTcUdTSWIzRFFFQkJRVUFNRFF4Q3pBSkJnTlZCQVlUQWtaU01SSXcKRUFZRFZRUUtEQWxFYUdsdGVXOTBhWE14RVRBUEJnTlZCQU1NQ0VObGNuUnBaMjVoTUI0WERUQTNNRFl5T1RFMU1UTXdOVm9YRFRJMwpNRFl5T1RFMU1UTXdOVm93TkRFTE1Ba0dBMVVFQmhNQ1JsSXhFakFRQmdOVkJBb01DVVJvYVcxNWIzUnBjekVSTUE4R0ExVUVBd3dJClEyVnlkR2xuYm1Fd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURJYVBISjF0YXpOSFVtZ2g3c3RMN3EKWE9FbTdSRkhZZUdpZkJaNFFDSGtZSjVheUdQaHhMR1drdjhZYldrajRTdGk5OTNpTmkrUkI3bEl6dzdzZWJZczV6UkxjQWdsb3p5SApHeG55Z1FjUE9KQVoweEgraHJUeTBWNGVIcGJOZ0d6T096R1R0dktnMEttVkVuMmxtc3hyeUlSV2lqT3A1eUlWVXhid3pCZnNWMS9wCm9ncVlDZDdqWDV4djNFampoUXNWV3FhNm42eEk0d215OS9ReTNsNDB2aHg0WFVKYnpnNGlqMDJRMTMweUdMTUxMR3Evamo4VUVZa2cKRG5jVXRUMlVDSWYzSlI3VnNtQUE3RzhxS0NWdUtqNFlZeGNsUHo1RUlCYjJKc2dscmdWS3RPZGpMUE9NRmxOK1hQc1JHZ2pCUm1LZgpJcmp4d28xcDNQbzZXQWJmQWdNQkFBR2pnYnd3Z2Jrd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVUd1MytRVG1RCnRDUlp2Z0h5VXRWRjlsbzUzQkV3WkFZRFZSMGpCRjB3VzRBVUd1MytRVG1RdENSWnZnSHlVdFZGOWxvNTNCR2hPS1EyTURReEN6QUoKQmdOVkJBWVRBa1pTTVJJd0VBWURWUVFLREFsRWFHbHRlVzkwYVhNeEVUQVBCZ05WQkFNTUNFTmxjblJwWjI1aGdna0EvdHpqQVEvSgpTUDh3RGdZRFZSMFBBUUgvQkFRREFnRUdNQkVHQ1dDR1NBR0crRUlCQVFRRUF3SUFCekFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBCmhRTWVrbkgyUXEvaG8yR2U2L1BBRC9LbDFOcVY1dGErYURZOWZtNGZUSXJ2MFE4aGJWNmxVbVBPRXZqdkt0cHY2emYrRXdMSHl6cysKSW12YVlTNS8xSEk5M1REaEhreEFHWXdQMTV6Umd6QjdtRm5jZmNhNURDbE1vVE9pNjJjNlpZVFRsdUx0ZGtWd2o3VXIzdmtqMWtsdQpQQlMxeHA4MUhsRFF3WTlxY0VRQ1lzdXVIV2hCcDZwWDZGT3FCOUlHOXRVVUJndVJBM1VzYkhLMVlaV2FEWXU1RGVmMTMxVE4zdWJZCjFna0lsMlBsd1M2d3QwUW13Q2JBcjFVd25qdlZOaW9aQlBSY0h2L1BMTGYvMFAySFFCSFZFU083U01BaHFhUW9MZjBWK0xCT0svUXcKV3lIOEVaRTB2a0h2ZTUyWGRmK1hsY0NXV0MvcXUwYlh1K1RaTGc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgplUEtJIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGc0RDQ0E1aWdBd0lCQWdJUUZjaTlaVWRjcjdpWEFGN2tCdEs4blRBTkJna3Foa2lHOXcwQkFRVUZBREJlTVFzd0NRWURWUVFHCkV3SlVWekVqTUNFR0ExVUVDZ3dhUTJoMWJtZG9kMkVnVkdWc1pXTnZiU0JEYnk0c0lFeDBaQzR4S2pBb0JnTlZCQXNNSVdWUVMwa2cKVW05dmRDQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVRBZUZ3MHdOREV5TWpBd01qTXhNamRhRncwek5ERXlNakF3TWpNeApNamRhTUY0eEN6QUpCZ05WQkFZVEFsUlhNU013SVFZRFZRUUtEQnBEYUhWdVoyaDNZU0JVWld4bFkyOXRJRU52TGl3Z1RIUmtMakVxCk1DZ0dBMVVFQ3d3aFpWQkxTU0JTYjI5MElFTmxjblJwWm1sallYUnBiMjRnUVhWMGFHOXlhWFI1TUlJQ0lqQU5CZ2txaGtpRzl3MEIKQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBNFNVUDdvM2JpRE4xWjgydEgzMDZUbTJkMHk4VTgyTjB5d0VoYWpmcWhGQUhTeVpiQ1VOcwpJWjVxeU5VRDlXQnBqOHp3SXVRZjUvZHFJakczTEJYeTRQNEFha1AvaDJYR3RSckJwMHh0SW5BaGlqSHlsM1NKQ1JJbUhKN0syUktpCmxUemE2V2UvQ0tCazQ5WkN0MFh2bC9UMjlkZTFTaFVDV0gyWVdFdGd2TTNYRFpvVE0xUFJZZmw2MWRkNHM1b3o5d0NHemgxTmxEaXYKcU94NFVYQ0tYQkNEVVNIM0VUMDBobDdsU00yWGdZSTFUQm5zWmZacnhRV2g3a2NUMXJNaEo1UVFDdGtrTzdxK1JCTkdNRCtYUE5qWAoxMnJ1T3pqaks5U1hEcmtiNXdkSmZ6Y3ErWGQ0ejFUdFcwYWRvNEFPa1VQQjFsdGZGTHFmcG8wa1IwQlp2M0k0c2pac04vK1owVjBPCldRcXJhZmZBc2dSRmVsUUFycjVUOXJYbjRmZzhvekhTcWY0aFVtVEZwbWZ3ZFFjR2xCU0JWY1luNUFHUEY4RnFjZGUrUy91VVdIMSsKRVRPeFF2ZGliQmpXendsb1BuOXM5aDZQWXEybFk5c0pweDhpUWtFZWI1bUtQdGY1UDBCNmViQ2xBWkxTblQwSUZhVVFBUzJ6TW5hbwpsUTJ6ZXByN0J4QjRFVy9oajhlNkR5VWFkQ3JsSEpoQm1kOGhoK2lWQm1vS3MycEhkbVgyT3MrUFloY1pld29velJyU2d4NGh4eXkvCnZ2OWhhTGRuRzd0NFRZM09aK1hrd1k2M0kyYmluWkIxTkppcE5pdUttcFM1bmV6TWlySDRKWWxjV3JZdmpCOXRlU1NuVW1qRGhEWGkKWm8xakRpVk4xUm15NW5rM3B5S2RWREVDQXdFQUFhTnFNR2d3SFFZRFZSME9CQllFRkI0TTk3Wm44dUdTSmdsRndGVTVMbmMvUWtxaQpNQXdHQTFVZEV3UUZNQU1CQWY4d09RWUVaeW9IQUFReE1DOHdMUUlCQURBSkJnVXJEZ01DR2dVQU1BY0dCV2NxQXdBQUJCUkZzTUxICkNsWjg3bHQ0REpYNUdGUEJwaHpZRURBTkJna3Foa2lHOXcwQkFRVUZBQU9DQWdFQUNiT0RVMWtCUHBWSnVmR0J1dmwySUNPMUoyQjAKMUdxWk5GNXNBRlBabi9LbXNTUUhSR29xeHFXT2VCTG9SOWxZR3hNcVhubWJud29xWjZZbFB3WnBWblBEaW1aSSt5bUJWM1FHeXB6cQpLT2c0WnlZcjhkVzFQMldUK0RaZGpvMk5RQ0NIR2Vydko4QTl0RGtQSlh0b1VIUlZuQXhaZlZvOVFaUWxVZ2pnUnl3Vk1SblZ2d2RWCnhyc1N0WmYwWDRPRnVuSEIyV3lCRVhZS0NyQy9ncGYzNmozNit1d3RxU2lVTzFiZDBsRXVyc0M5Q0JXTWQxSTBsdGFick5NZGptRVAKTlh1YnJqbHBDMkpnUUNBMmo2LzdOdTR0Q0VvZHVMK2JYUGpxcFJ1Z2M2YlkrRzdnTXdSZmFLb25oKzNad1pDYzdiM2phald2WTkrcgpHTm02NXVsSzZsQ0tEMkdUSHVJdEdlSXdsRFdTWFE2MkI2OFpnSTlIa0ZGTExrM2RoZUxTQ2xJS0Y1cjhHckJRQXVVQm8yTTNJVXhFCnhKdFJtUkVPYzV3R2oxUXVweWhlUkRtSFZpMDN2WVZFbE9FTVN5eWN3NUtGTkdITEQ3aWJTa05TL2pRNmZianBLZHgycWNndytCUngKZ01ZZU5raDBJa0ZjaDRMb0dIR0xRWWxFNTM1WVc2aTRqUlBwcDJ6RFIrMnpHcDFpcm8yQzZwU2UzVmtRdzYzZDRrM2pNZFhIN09qeQpzUDZTSGhZS0d2elo4L2dudHNtK0hiUnNaSkIvOU9URVc5YzNya0lPM2FRYWIzeUlWTVVXYnVGNmFDNzRPcjhOcER5Sk8zaW5UbU9ECkJDRUlaNDN5Z2tuUVcvMnh6UStEaE5RK0lJWDNTajByblAwcUNnbE42b0g0RVp3PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpjZXJ0U0lHTiBST09UIENBCj09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURPRENDQWlDZ0F3SUJBZ0lHSUFZRkZuQUNNQTBHQ1NxR1NJYjNEUUVCQlFVQU1Ec3hDekFKQmdOVkJBWVRBbEpQTVJFd0R3WUQKVlFRS0V3aGpaWEowVTBsSFRqRVpNQmNHQTFVRUN4TVFZMlZ5ZEZOSlIwNGdVazlQVkNCRFFUQWVGdzB3TmpBM01EUXhOekl3TURSYQpGdzB6TVRBM01EUXhOekl3TURSYU1Ec3hDekFKQmdOVkJBWVRBbEpQTVJFd0R3WURWUVFLRXdoalpYSjBVMGxIVGpFWk1CY0dBMVVFCkN4TVFZMlZ5ZEZOSlIwNGdVazlQVkNCRFFUQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUxjenVYN0kKSlVxT3RkdTBLQnVxVjVEbzBTTFRaTHJUaytqVXJJWmhRR3BnVjJoVWhFMjhhbFFDQmYvZm01b3FybDBIajByREtIL3YreXY2ZWZISApyZkFRVXlTUWkyYkpxSWlycjFxakFPbSt1a2J1VzNON0xCZUNnVjVpTEtFQ1piTzl4U3NBZnNUOEF6TlhEZTNpK3M1ZFJkWTR6VFcyCnNzSFFuSUZLcXVTeUFWd2RqMStaeExHdDI0Z2g2NUFJZ29Eek1LTkQ1cENDcmxVb1NlMWIxNmtRT0E3K2oweGJtMGJxUWZXd0NIVEQKMElnenRuelhkTi9jaE5GRERuVTVvU1ZBS09wNHl3NHNMam1kakl0dUZod3ZKb0lRNHVObGxBb0V3RjczWFZ2NEVPTFF1bnBMKzk0MwpBQUFhV3lqajBweHpQaktIbUtISlVTL1gzcXd6czA4Q0F3RUFBYU5DTUVBd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBT0JnTlZIUThCCkFmOEVCQU1DQWNZd0hRWURWUjBPQkJZRUZPQ01tOXNsU2JQeGZJYldza0tIQzlCcm9ObmtNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0SUIKQVFBKzBoeUpMalg4K0hYZDVuOWxpUFJ5VE1rczF6Sk84OTBaZVVlOWpqdGJrdzlRU1NRVGF4UUdjdThKMDZHaDQwQ0V5ZWNZTW5ROApTRzRQbjB2VTl4N1RrNFprVkpkamNsRFZWYy82SUpNQ29wdkRJNU5PRmxWMm9IQjViYzBoSDg4dkxid1o0NGd4K0ZrYWdRbklsNlowCngyREVXOHhYanJKMS9Sc0NDZHRaYjNLVGFmY3hRZGFJT0wrSHNyMFdlZm1xNUw2SUpkMWhKeU1jdFRFSEJEYTBHcEM5b0hSeFVJbHQKdkJUakQ0YXU4YXMreDZBSnpLTkkwZURiWk9lU3RjK3Zja053aS9uRGhEd1RxbjZTbTFkVGsvcHd3cEVPTWZtYloxM3BsamhlWDdOegpUb2dWWjk2ZWRoQmlJTDVWYVpWREFEbE45dTZ3V2s1SlJGUllYMEtECi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCk5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVGVENDQXYyZ0F3SUJBZ0lHU1VFczVBQVFNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1JR25NUXN3Q1FZRFZRUUdFd0pJVlRFUk1BOEcKQTFVRUJ3d0lRblZrWVhCbGMzUXhGVEFUQmdOVkJBb01ERTVsZEV4dlkyc2dTMlowTGpFM01EVUdBMVVFQ3d3dVZHRnV3N3B6dzYxMApkc09oYm5scmFXRmt3N05ySUNoRFpYSjBhV1pwWTJGMGFXOXVJRk5sY25acFkyVnpLVEUxTURNR0ExVUVBd3dzVG1WMFRHOWpheUJCCmNtRnVlU0FvUTJ4aGMzTWdSMjlzWkNrZ1JzV1JkR0Z1dzdwenc2MTBkc09oYm5rd0hoY05NRGd4TWpFeE1UVXdPREl4V2hjTk1qZ3gKTWpBMk1UVXdPREl4V2pDQnB6RUxNQWtHQTFVRUJoTUNTRlV4RVRBUEJnTlZCQWNNQ0VKMVpHRndaWE4wTVJVd0V3WURWUVFLREF4TwpaWFJNYjJOcklFdG1kQzR4TnpBMUJnTlZCQXNNTGxSaGJzTzZjOE90ZEhiRG9XNTVhMmxoWk1PemF5QW9RMlZ5ZEdsbWFXTmhkR2x2CmJpQlRaWEoyYVdObGN5a3hOVEF6QmdOVkJBTU1MRTVsZEV4dlkyc2dRWEpoYm5rZ0tFTnNZWE56SUVkdmJHUXBJRWJGa1hSaGJzTzYKYzhPdGRIYkRvVzU1TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF4Q1JlYzc1TGJSVERvZlRqbDVCdQowakJGSGp6dVo5bGs0QnFLZjhvd3lvUGpJTUhqOURyVGxGOGFmRnR0dnpCUGhDZjJueDlKdk1hWkNwRHlEL1YvUTRRM1kxR0xlcVZ3Ci9IcFl6WTZiN2NOR2JJUndYZHJ6QVpBai9FNHdxWDdoSjJQbjdXUThvTGpKTTJQK0ZwRC9zTGo5MTZqQXdKUkRDN2JWV2FhZVZ0QWsKSDNCNXI5czVWQTFsZGRrVlFaUUJyMTdzOW8zeC82MWsvaUNhMTF6ci9xWWZDR1NqaTNaVnJSNDdLR0F1aHlYb3FxOGZ4bVJHSUxkdwpmenplU051V1U3YzVkK1FhNHNjV2hIYVhXeSs3R1JXRitHbUY5Wm1ucWZJMHA2bTJwZ1A4YjRZOVZIeDJCSnRyK1VCZEFEVEhMcGwxCm5lV0lBNnBOK0FQU1FuYkFHd0lEQUtpTG8wVXdRekFTQmdOVkhSTUJBZjhFQ0RBR0FRSC9BZ0VFTUE0R0ExVWREd0VCL3dRRUF3SUIKQmpBZEJnTlZIUTRFRmdRVXpQcG5rL0MydU5DbHdCN3pVLzJNVTkrRDE1WXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBS3QvN2h3VwpxWnc4VVFDZ3dCRUlCYWVaNW04QmlGUmhidkc1R0sxS3JmNkJRQ09VTC90MWZDOG9TMklrZ1lJTDlXSHhIRzY0WVRqcmdmcGlvVHRhCll0T1VaY1RoNW0yQytDOGxjTEloSnNGeVVSK01MTU9Fa01OYWo3clA5S2RscGV1WTBmc0Zza1oxRlNOcWI0VmpNSUR3MVo0ZktSekMKYkxCUVdWMlFXenVvRFREUHYzMS96dkdkZzczSlJtNGdwdmxoVWJvaEwzdStwUlZqb2RTVmgvR2V1Zk9KOHoyRnVMamJ2clc1S2ZuYQpOd1VBU1pRRGhFVG52ME14ejNXTEpkSDBwbVQxa3ZhckJlczk2YVVMTm1MYXpBWmZOb3UyWGpHNEt2dGU5bkhmUkNhZXhPWU5rYlF1CmRaV0FVV3BMTUthd1lxR1Q4WnZZenNSamRUOVpSN0U9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClNlY3VyZVNpZ24gUm9vdENBMTEKPT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRGJUQ0NBbFdnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFVRkFEQllNUXN3Q1FZRFZRUUdFd0pLVURFck1Da0dBMVVFQ2hNaQpTbUZ3WVc0Z1EyVnlkR2xtYVdOaGRHbHZiaUJUWlhKMmFXTmxjeXdnU1c1akxqRWNNQm9HQTFVRUF4TVRVMlZqZFhKbFUybG5iaUJTCmIyOTBRMEV4TVRBZUZ3MHdPVEEwTURnd05EVTJORGRhRncweU9UQTBNRGd3TkRVMk5EZGFNRmd4Q3pBSkJnTlZCQVlUQWtwUU1Tc3cKS1FZRFZRUUtFeUpLWVhCaGJpQkRaWEowYVdacFkyRjBhVzl1SUZObGNuWnBZMlZ6TENCSmJtTXVNUnd3R2dZRFZRUURFeE5UWldOMQpjbVZUYVdkdUlGSnZiM1JEUVRFeE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBL1hlcXBSeVFCVHZMClRKc3ppMW9VUmFUbmtCYlIzMWZTSVJDa0YvM2ZyTllmcCtUYmZQZnMzN2dEMnBSWS9WMXlmSXcvWHdGbmRCV1c0d0k4aDl1dXl3R08Kd3ZObXhvVkY5QUxHT3JWaXNxLzZuTCtrNXRTQU1KanpEYmFUajZuVTJEYnlzUHlLeWl5aEZUT1ZNZHJBRy9MdVlwbUdZeisvM1pNcQpnNmgydVJNZnQ4NU9Rb1dQSXVjdUd2S1ZDYklGdFVST2Q2RWd2YW55VGdwOVVLMzFCUTFGVDBaeC9TZytVL3NFMkMzWFpSMUtHL3JQCk83QXhtalZ1eUlzRzB3Q1I4cFFJWlV5eE5BWUFlb25pOE1jRFdjL1YxdWluTXJQbW1FQ0d4YzBuRW92TWU4NjNFVHhpWUFjalBpdEEKYnBTQUNXMjJzMjkzYnpVSVVQc0NoOFUraVFJREFRQUJvMEl3UURBZEJnTlZIUTRFRmdRVVcvaE5UN0tsaHRRNjB2RmptcUMrQ2ZaWAp0OTR3RGdZRFZSMFBBUUgvQkFRREFnRUdNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBS0NoCk9CWm1McWRXSHlHY0J2b2Q3YmtpeFRnbTJFNVA3S04vZWQ1R0lhR0hkNDhIQ0pxeXBNV3ZEektZQzN4bUtiYWJmU1ZTU1VPclRDNHIKYm5wd3J4WU80d0pzKzBMbUdKMUYyRlhJNkR2ZDUrSDBMZ3NjTkZ4c1dFcjdqSWhRWDVVY3YrMnJJclZsczRXNm5nKzRyZVY2RzRwUQpPaDI5RGJ4N1ZGQUx1VUt2VmFBWWdhMWxtZSsrNUp5L3hJV3JRYkpVYjl3bHplMTQ0bzRNalFsSjNXTjdXbW1XQWlHb3ZWSlo2WDAxCnk4aFN5bitCL3RscjAvY1I3U1hmK09mNXBQcHlsNFJURGFYUU1oaFJkbGtVYkEvcjdGK0FqSFZEZzhPRm1QOU1uaTBONUhlRGswNjEKbGdlTEtCT2JqQm1OUVNkSlFPN2U1aU5FT2R5aEl0YTZBL0k9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVDakNDQXZLZ0F3SUJBZ0lKQU1KK1F3Uk9SejhaTUEwR0NTcUdTSWIzRFFFQkN3VUFNSUdDTVFzd0NRWURWUVFHRXdKSVZURVIKTUE4R0ExVUVCd3dJUW5Wa1lYQmxjM1F4RmpBVUJnTlZCQW9NRFUxcFkzSnZjMlZqSUV4MFpDNHhKekFsQmdOVkJBTU1IazFwWTNKdgpjMlZqSUdVdFUzcHBaMjV2SUZKdmIzUWdRMEVnTWpBd09URWZNQjBHQ1NxR1NJYjNEUUVKQVJZUWFXNW1iMEJsTFhONmFXZHVieTVvCmRUQWVGdzB3T1RBMk1UWXhNVE13TVRoYUZ3MHlPVEV5TXpBeE1UTXdNVGhhTUlHQ01Rc3dDUVlEVlFRR0V3SklWVEVSTUE4R0ExVUUKQnd3SVFuVmtZWEJsYzNReEZqQVVCZ05WQkFvTURVMXBZM0p2YzJWaklFeDBaQzR4SnpBbEJnTlZCQU1NSGsxcFkzSnZjMlZqSUdVdApVM3BwWjI1dklGSnZiM1FnUTBFZ01qQXdPVEVmTUIwR0NTcUdTSWIzRFFFSkFSWVFhVzVtYjBCbExYTjZhV2R1Ynk1b2RUQ0NBU0l3CkRRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFPbjRqL05qcmRxRzJLZmdRdnZQa2Q2bUp2aVpwV053clp1dXlqTkEKZlcyV2JxRU9STzdoRTUyVVFsS2F2WFdGZEN5b0RoMlR0aGkzakN5b3ovdGNjYm5hN1A3b2ZvL2tMeDJ5cUhXSDJMZWg1VHZQbVVwRwowSU1aZmNDaEVoeVZiVXIwMk1lbFRUTXVoVGxBZFg0VWZJQVNtRkRIUVdlNG9JQmhWS1pzVGgvZ25RNEg2Y202TStmK3dGVW9MQUtBCnB4bjFudHhWVXdPWGV3ZEkvNW43TjRva3hGbk1VQkJqanFxcEdyQ0VHb2I1WDd1eFVHNmswUXJNMVhGK0g2Y2JmUFZUYmlKZnl5dm0KMUh4ZHJ0YkN4a3psQlFIWjdWZjh3U041L1BySUpJT1Y4N1ZxVVFIUWQ5YnBFcUg1R29QN2dodTVzSmYwZGdZelEwbWcvd3UxK3JVQwpBd0VBQWFPQmdEQitNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01CMEdBMVVkRGdRV0JCVExEOGJmClFrUE1QY3UxU0NPaEducW1LcnMwYURBZkJnTlZIU01FR0RBV2dCVExEOGJmUWtQTVBjdTFTQ09oR25xbUtyczBhREFiQmdOVkhSRUUKRkRBU2dSQnBibVp2UUdVdGMzcHBaMjV2TG1oMU1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRREowUTVlTHRYTXMzdyt5L3c5L3cwbwpsWk1FeUwvYXpYbTRRNUR3cEw3djh1OGhtTHpVMUYwRzl1NUM3REJzb0txcHl2R3Zpdm8vQzNOcVB1b3VRSDRmcmxSaGVlc3VDRGZYCkkvT01uNzRkc2VHa2RkdWc0bFFVc2JvY0thUVk5aEs2b2hRVTR6RTF5RUQvdCtBRmRsZkJIRm55K0wvazdTVmlYSVR3Zm40ZnM3NzUKdHlFUnpBTUJWbkNuRUpJZUd6U0JIcTJjR3NNRVBPMENZZFllQnZOZk9vZnlLL0ZGaCtVOXJOSEhWNFM5YTY3YzJQbTJHMkp3Q3owMgp5VUx5TXRkNlllYlMyejNQeUtuSm05emJXRVRYYnppdmYzalRvNjBhZGJvY3dUWjhqeDV0SE1OMVJxNDFCYWIyWEQwaDdsYnd5WUlpCkxYcFVxM0REZlNKbGduQ1cKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKR2xvYmFsU2lnbiBSb290IENBIC0gUjMKPT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURYekNDQWtlZ0F3SUJBZ0lMQkFBQUFBQUJJVmhUQ0tJd0RRWUpLb1pJaHZjTkFRRUxCUUF3VERFZ01CNEdBMVVFQ3hNWFIyeHYKWW1Gc1UybG5iaUJTYjI5MElFTkJJQzBnVWpNeEV6QVJCZ05WQkFvVENrZHNiMkpoYkZOcFoyNHhFekFSQmdOVkJBTVRDa2RzYjJKaApiRk5wWjI0d0hoY05NRGt3TXpFNE1UQXdNREF3V2hjTk1qa3dNekU0TVRBd01EQXdXakJNTVNBd0hnWURWUVFMRXhkSGJHOWlZV3hUCmFXZHVJRkp2YjNRZ1EwRWdMU0JTTXpFVE1CRUdBMVVFQ2hNS1IyeHZZbUZzVTJsbmJqRVRNQkVHQTFVRUF4TUtSMnh2WW1Gc1UybG4KYmpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTXdsZHBCNUJuZ2lGdlhBZzdhRXlpaWUvUVYyRWNXdAppSEw4UmdKRHg3S0tuUVJmSk1zdVMrRmdna2JoVXFzTWdVZHdiTjFrMGV2MUxLTVBnajBNSzY2WDE3WVVoaEI1dXpzVGdIZU1DT0ZKCjBtcGlMeDllK3BabzM0a25sVGlmQnRjK3ljc21XUTF6M3JESTZTWU9neFhHNzF1TDBnUmd5a21tS1BacE8vYkx5Q2lSNVoyS1lWYzMKckhRVTNIVGdPdTV5THk2Yys5Qzd2L1U5QU9FR00raUNLNjVUcGpvV2M0emRRUTRnT3NDMHA2SHBzaytRTGpKZzZWZkx1UVNTYUdqbApPQ1pnZGJLZmQvK1JGTyt1SUVuOHJVQVZTTkVDTVdFWlhyaVg3NjEzdDJTYWVyOWZ3UlB2bTJMN0RXemdWR2tXcVFQYWJ1bURrM0YyCnhtbUZnaGNDQXdFQUFhTkNNRUF3RGdZRFZSMFBBUUgvQkFRREFnRUdNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUUKRkkvd1MzK29Ma1VrcmsxUSttT2FpOTdpM1J1OE1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQkxRTnZBVUtyK3lBenY5NVpVUlVtNwpsZ0FKUWF5ekU0YUdLQWN6eW12bWRMbTZBQzJ1cEFyVDlmSHhENHEvYzJkS2c4ZEVlM2pncjI1c2J3TXBqak01UmNPTzVMbFhiS3I4CkVwYnNVOFl0NUNSc3VaUmorOXhUYUdkV1BvTzR6elVodzhsby9zN2F3bE9xekpDSzZmQmRSb3lWM1hwWUtCb3ZIZDdOQURkQmorMUUKYmRkVEtKZCs4MmNFSGhYWGlwYTAwOTVNSjZSTUczTnpkdlFYbWNJZmVnN2pMUWl0Q2h3cy96eXJWUTRQa1g0MjY4TlhTYjdoTGkxOApZSXZEUVZFVEk1M085ekpybEFHb21lY3NNeDg2T3lYU2hrRE9PeXlHZU1saEx4UzY3dHRWYjkrRTdnVUpUYjBvMkhMTzAySlFaUjdyCmtwZURNZG16dGNwSFdEOWYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKSXplbnBlLmNvbQo9PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGOFRDQ0E5bWdBd0lCQWdJUUFMQzNXaFpJWDcvaHkvV0wxeG5tZlRBTkJna3Foa2lHOXcwQkFRc0ZBREE0TVFzd0NRWURWUVFHCkV3SkZVekVVTUJJR0ExVUVDZ3dMU1ZwRlRsQkZJRk11UVM0eEV6QVJCZ05WQkFNTUNrbDZaVzV3WlM1amIyMHdIaGNOTURjeE1qRXoKTVRNd09ESTRXaGNOTXpjeE1qRXpNRGd5TnpJMVdqQTRNUXN3Q1FZRFZRUUdFd0pGVXpFVU1CSUdBMVVFQ2d3TFNWcEZUbEJGSUZNdQpRUzR4RXpBUkJnTlZCQU1NQ2tsNlpXNXdaUzVqYjIwd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURKCjAzcktEeDZzcDRib0ZtVnFzY0liUlRKeGxkbitFRnZNcitlbGVRR1BpY1BLOGxWeDkzZStkNVR6Y3FRc1JOaWVrcHNVT3FIbkpKQUsKQ2xhT3hkZ21sT0haU09FdFB0b0tjdDJqbVJYYWdhS0g5SHR1Sm5lSldLM1c2d3l5UVhwemJtM2JlbmhCNlFpSUVuNkhMbVlSWTJ4VQorenlkY3NDOEx2L0N0OTBOZHVNNjEvZTBhTDZpOWVPQmJzRkdiMTJONEUzR1ZGV0pHak14Q3JGWHVhT0ttTVBzT3pURmxVRnBmblhDClBDREZZYnBSUjZBZ2tKT2hrRXZ6VG55RlJWU2EwUVVtUWJDMVRSMHp2c1FEeUNWOHdYRGJPL1FKTFZRblNLd3Y0Y1NzUHNqTGtreFQKT1RjajdOTUIrZUFKUkUxTlpNRGhEVnFISXJ5dEc2UCtKclVWODZmOGhCbnA3S0dJdEVScGhJUHppZEYwQnFuTUM5YkMzaWVGVUNiSwpGN2pKZW9kV0xCb0JIbXkrRTYwUXJMVWs5VGlSb2RaTDJ2RzcwdDVIdGZHOGdmWlphODhaVSttTkZjdEt5Nmx2Uk9VYlFjL2hocWZLCjBHcWZ2RXlOQmpOYW9vWGxrRFdnWWx3V1R2RGpvdm9ER3JRc2NiTllMTjU3QzlzYUQrdmVJUjhHZHdZRHNNbnZtZnpBdVU4TGhpaisKMHJucTQ5cWx3MGRwRXVEYjhQWVppKzE3Y05jQzF1MkhHQ2dzQkNSTWQrUklpaHJHTzVyVUQ4cjZkZElCUUZxTmViK0x6MHZQcWhiQgpsZVN0VElvK0Y1SFVzV0xsZ3VXQUJLUURmbzIvMm4raUQ1ZFBETk1OKzlmUjVYSitITWgzLzF1YUQ3ZXVCVWJsOGFnVzdFZWtGd0lECkFRQUJvNEgyTUlIek1JR3dCZ05WSFJFRWdhZ3dnYVdCRDJsdVptOUFhWHBsYm5CbExtTnZiYVNCa1RDQmpqRkhNRVVHQTFVRUNndysKU1ZwRlRsQkZJRk11UVM0Z0xTQkRTVVlnUVRBeE16TTNNall3TFZKTlpYSmpMbFpwZEc5eWFXRXRSMkZ6ZEdWcGVpQlVNVEExTlNCRwpOaklnVXpneFF6QkJCZ05WQkFrTU9rRjJaR0VnWkdWc0lFMWxaR2wwWlhKeVlXNWxieUJGZEc5eVltbGtaV0VnTVRRZ0xTQXdNVEF4Ck1DQldhWFJ2Y21saExVZGhjM1JsYVhvd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBT0JnTlZIUThCQWY4RUJBTUNBUVl3SFFZRFZSME8KQkJZRUZCMGNaUTZvOGlWN3RKSFA1TEd4NXIxVmRHd0ZNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUNBUUI0cGd3V1NwOU1pRHJBeXc2bApGbjJmdVVoZkdJOE5ZamIyelJscnJLdlY5cEY5cm5IelA3TU9lSVdibGFRbklVZENTbnhJT3ZWRmZMTU1qbEY0ckpVVDNzYjlmYmdhCmtFeXJrZ1BIN1VJQnpnL1lzZnFpa3VGZ2JhNTZhd21xeGludWFFbG5NSUFrZWpFV09WdCs4Und1M1d3SnJmSXh3WUpPdWJ2NXZyOHEKaFQvQVFLTTZXZnhaU3p3b0pOdTBGWFd1RFlpNkxuUEF2VmlINVVMeTYxN3VIakFpbWNzMzBjUWhiSUhzdm0wbTVoemtRaUNlUjdDcwpnMWx3TERYV3J6WTB0TTA3K0RLbzcrTjRpZnVOUlN6YW5MaCtRQnhoNXo2aWtpeEw4czM2bUxZcC8vUHllNmtmTHFDVFZ5dmVoUVA1CmFUZkxubmhxQmJURk1YaUo3SHFuaGVHNWV6emV2aDU1aE02ZmNBNVp3alV1a0NveDJlUkZla0drTGhPYk5BNW1lMG1yWkpmUVJzTjUKblhKUVk2YVlXd2E5U0czWU9ZTnc2RFh3QmRHcXZPUGJ5QUxxZlAyQzJzSmJVald1bURxdHVqV1RJNmNmU04wMVJwaXlFR2prcFRIQwpDbGd1R1lFUXlWQjEvT3BhRnM0UjErN3ZVSWd0WWY4L1FuTUZsRVBWamp4T0FUb1pwUjlHVG5mUVhlV0JJaUdIL3BSOWhOaVRyZFpvClEwaXkyK3R6Sk9lUmYxU2t0b0ErbmFNOFRITENWOFNnMU13NEo4N1ZCcDZpU05ucG44NkNjRGFUbWp2ZmxpSGpXYmNNMnBFMzhQMVoKV3JPWnlHbHNReVlCTldOZ1ZZa0RPblhZdWtyWlZQL3Uzb0RZTGRFNDFWNHRDNWg5UG16Yi9DYUl4dz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkdvIERhZGR5IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRHhUQ0NBcTJnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFzRkFEQ0JnekVMTUFrR0ExVUVCaE1DVlZNeEVEQU9CZ05WQkFnVApCMEZ5YVhwdmJtRXhFekFSQmdOVkJBY1RDbE5qYjNSMGMyUmhiR1V4R2pBWUJnTlZCQW9URVVkdlJHRmtaSGt1WTI5dExDQkpibU11Ck1URXdMd1lEVlFRREV5aEhieUJFWVdSa2VTQlNiMjkwSUVObGNuUnBabWxqWVhSbElFRjFkR2h2Y21sMGVTQXRJRWN5TUI0WERUQTUKTURrd01UQXdNREF3TUZvWERUTTNNVEl6TVRJek5UazFPVm93Z1lNeEN6QUpCZ05WQkFZVEFsVlRNUkF3RGdZRFZRUUlFd2RCY21sNgpiMjVoTVJNd0VRWURWUVFIRXdwVFkyOTBkSE5rWVd4bE1Sb3dHQVlEVlFRS0V4RkhiMFJoWkdSNUxtTnZiU3dnU1c1akxqRXhNQzhHCkExVUVBeE1vUjI4Z1JHRmtaSGtnVW05dmRDQkRaWEowYVdacFkyRjBaU0JCZFhSb2IzSnBkSGtnTFNCSE1qQ0NBU0l3RFFZSktvWkkKaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFMOXhZZ2p4K2xrMDl4dkpHS1AzZ0VsWTZTS0RFNmJGSUVNQk80VHg1b1ZKbnlmcQo5b1FiVHFDMDIzQ1l4eklCc1FVK0IwN3U5UHBQTDFrd0l1ZXJHVlpyNG9BSC9QTVdkWUE1VVh2bCtUVzJkRTZwallJVDVMWS9xUU9ECitxSytpaFZxZjk0THc3WVpGQVhLNnNPb0JKUTdSbnd5RGZNQVppTElqV2x0Tm93UkdMZlRzaHhndERqNkFvek8wOTFHQjk0S1B1dGQKZk1oOCs3QXJVNlNTWW1sUkpRVmhHa1NCakN5cFE1WWozNnc2Z1pvT0tjVWNxZWxkSHJhZW5qQUtPYzd4aUlEN1MxM01NdXlGWWtNbApOQUpXSndHUnREdHdLajl1c2VpY2lBRjluOVQ1MjFOdFlKMi9MT2RZcTdoZlJ2ek94QnNEUEFuclNURmNhVWF6NEVjQ0F3RUFBYU5DCk1FQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QU9CZ05WSFE4QkFmOEVCQU1DQVFZd0hRWURWUjBPQkJZRUZEcWFoUWNRWnlpMjcvYTkKQlVGdUlNR1UyZy9lTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFDWjIxMTUxZm1YV1djRFlmRitPd1l4ZFMyaElJNVBaWWUwOTZhYwp2TmpwTDlEYld1N1BkSXh6dERoQzJnVjcrQUoxdVAybHNkZXU5dGZlRTh0VEVINktSdEdYK3JjdUt4R3JrTEFuZ1Bub24xcnBONStyCjVOOXNzNFVYblQzWkpFOTVrVFhXWHdUcmdJT3JtZ0l0dFJEMDJKREhCSE5BN1hJbG9LbWY3SjZyYUJLWlY4YVBFam9KcEwxRS9RWVYKTjhHYjVES2o3VGpvMkdUekxINFUvQUxxbjgzL0IyZ1gyeUtRT0MxNmpkRlU4V25qWHpQS2VqMTdDdVBLZjE4NTVlSjF1c1YyR0RQTwpMUEF2VEszM3NlZk9UNmpFbTBwVUJzVi9mZFVJRCtJYy9uNFh1S3hlOXRRV3NrTUpERTMycDJ1MG1ZUmx5bnFJNHVKRXZsejM2aHoxCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlEM1RDQ0FzV2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUXNGQURDQmp6RUxNQWtHQTFVRUJoTUNWVk14RURBT0JnTlZCQWdUCkIwRnlhWHB2Ym1FeEV6QVJCZ05WQkFjVENsTmpiM1IwYzJSaGJHVXhKVEFqQmdOVkJBb1RIRk4wWVhKbWFXVnNaQ0JVWldOb2JtOXMKYjJkcFpYTXNJRWx1WXk0eE1qQXdCZ05WQkFNVEtWTjBZWEptYVdWc1pDQlNiMjkwSUVObGNuUnBabWxqWVhSbElFRjFkR2h2Y21sMAplU0F0SUVjeU1CNFhEVEE1TURrd01UQXdNREF3TUZvWERUTTNNVEl6TVRJek5UazFPVm93Z1k4eEN6QUpCZ05WQkFZVEFsVlRNUkF3CkRnWURWUVFJRXdkQmNtbDZiMjVoTVJNd0VRWURWUVFIRXdwVFkyOTBkSE5rWVd4bE1TVXdJd1lEVlFRS0V4eFRkR0Z5Wm1sbGJHUWcKVkdWamFHNXZiRzluYVdWekxDQkpibU11TVRJd01BWURWUVFERXlsVGRHRnlabWxsYkdRZ1VtOXZkQ0JEWlhKMGFXWnBZMkYwWlNCQgpkWFJvYjNKcGRIa2dMU0JITWpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTDN0d1FQODlvLzhBckZ2Clc1OUkyWjE1NHFLM0EyRldHTU5IdHRmS1BUVXVpVVAzb1dtYjNvb2EvUk1nbkxSSmR6SXBWdjI1N0l6ZEl2cHkzQ2RobCs3MldvVHMKYmhtNWlTemNoRnZWZFB0clg4V0pwUkJTaVVaVjlMaDFIT1ovNUZTdVMvaFZjbGNDR2ZnWGNWbnJIaWdIZE1XZFNMNXN0UFNrc1BOawpOM21Td094R1huL2hiVk5NWXEvTkh3dGp1enFkKy94NUFKaGhkTThtZ2tCajg3SnlhaGtObWNyVURuWE1OL3VMaWNGWjhXSi9YN05mClpURDRwN2ROZGxvZWRsNDB3T2lXVnBtS3MvQi9wTTI5M0RJeGZKSFA0RjhSK0d1cVNWelJtWlRSb3VOald3bDJ0VlppNFV0MEhaYlUKSnRRSUJGblFtQTRPNXQ3OHcrd2ZrUEVDQXdFQUFhTkNNRUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFPQmdOVkhROEJBZjhFQkFNQwpBUVl3SFFZRFZSME9CQllFRkh3TU1oK24yVEIveEgxb28yS29vYzZyQjFzbk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQVJXZm9sClR3TnZsSms3bWgrQ2hUblVkZ1dVWHVFb2syMWlYUW5Db0tqVXNIVTQ4VFJxbmVTZmlvWW1VZVlzMGNZdGJwVWdTcElCN0xpS1ozc3gKNG1jdWpKVURKaTVEblVveDlnNjFETHUzNGpkL0lyb0FvdzU3VXZ0cnV6dkUwM2xSVHMyUTlHY0hHY2c4Um5vTkFYM0ZXT2R0NW9VdwpGNW9reEJEZ0JQZmc4bi9VcWdyL1FoMDM3WlRsWkZrU0lIYzQwekkrT0lGMWxuUDZhSSt4eTg0ZnhlejZuSDdQZnJIeEJ5MjIvTC9LCnBML1Fsd1ZLdk9vWUtBS1F2VlI0Q1NGeDA5RjlIZGtXc0tsaFBkQUtBQ0w4eDN2TENXUkZDenRBZ2ZkOWZETDFtTXBZam4wcTdwQloKYzJUNU5uUmVKYUgxWmdVdWZ6a1ZxU3I3VUl1T2hXbjAKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKU3RhcmZpZWxkIFNlcnZpY2VzIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ3ekNDQXRlZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBRENCbURFTE1Ba0dBMVVFQmhNQ1ZWTXhFREFPQmdOVkJBZ1QKQjBGeWFYcHZibUV4RXpBUkJnTlZCQWNUQ2xOamIzUjBjMlJoYkdVeEpUQWpCZ05WQkFvVEhGTjBZWEptYVdWc1pDQlVaV05vYm05cwpiMmRwWlhNc0lFbHVZeTR4T3pBNUJnTlZCQU1UTWxOMFlYSm1hV1ZzWkNCVFpYSjJhV05sY3lCU2IyOTBJRU5sY25ScFptbGpZWFJsCklFRjFkR2h2Y21sMGVTQXRJRWN5TUI0WERUQTVNRGt3TVRBd01EQXdNRm9YRFRNM01USXpNVEl6TlRrMU9Wb3dnWmd4Q3pBSkJnTlYKQkFZVEFsVlRNUkF3RGdZRFZRUUlFd2RCY21sNmIyNWhNUk13RVFZRFZRUUhFd3BUWTI5MGRITmtZV3hsTVNVd0l3WURWUVFLRXh4VApkR0Z5Wm1sbGJHUWdWR1ZqYUc1dmJHOW5hV1Z6TENCSmJtTXVNVHN3T1FZRFZRUURFekpUZEdGeVptbGxiR1FnVTJWeWRtbGpaWE1nClVtOXZkQ0JEWlhKMGFXWnBZMkYwWlNCQmRYUm9iM0pwZEhrZ0xTQkhNakNDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0MKQVFvQ2dnRUJBTlVNT3NRcStVN2k5YjRabDErT2lGT3hIei9MejU4Z0UyMHBPc2dQZlR6M2EzWTRZOWsyWUtpYlhsd0FnTEl2V1gvMgpoL2tsUTRibmFSdFNtcERoY2VQWUxRMU9iL2JJU2RtMjh4cFdyaXUyZEJUcnovc200eHE2SFpZdWFqdFlsSWxIVnY4bG9KTndVNFBhCmhIUVV3MmVlQkdnNjM0NUFXaDFLVHM5RGtUdm5WdFlBY010UzdudDlyanJudkRINVJmYkNZTThUV1FJcmdNdzBSOSs1M3BCbGJRTFAKTEpHbXB1ZmVoUmhKZkdaT296cHRxYlh1TkM2NkRRTzRNOTlINjdGcmpTWFptODZCMFVWR01wWndoOTRDRGtsRGhiWnNjN3RrNm1GQgpyTW5VVk4rSEw4Y2lzaWJNbjFsVWFKLzh2aW92eEZVY2RVQmdGNFVDVlRtTGZ3VUNBd0VBQWFOQ01FQXdEd1lEVlIwVEFRSC9CQVV3CkF3RUIvekFPQmdOVkhROEJBZjhFQkFNQ0FRWXdIUVlEVlIwT0JCWUVGSnhmQU4rcUFkY3dLemlJb3JodFNwenlFWkdETUEwR0NTcUcKU0liM0RRRUJDd1VBQTRJQkFRQkxOcWFFZDJuZE94bWZaeU1JYnc1aHlmMkUzRi9ZTm9ITjJCdEJMWjlnM2NjYWFOblJib2JoaUNQUApFOTVEeitJMHN3U2RIeW5Wdi9oZXlOWEJ2ZTZTYnpKMDhwR0NMNzJDUW5xdEtyY2dmVTI4ZWxVU3doWHF2ZmRxbFM1c2RKL1BITFR5CnhRR2poZEJ5UHExenF3dWJkUXh0UmJlT2xLeVdON1dnMEk4VlJ3N2o2SVBkai8zdlFRRjN6Q2VwWW9VejhqY0k3M0hQZHdiZXlCa2QKaUVEUGZVWWQveDdINGM3L0k5dkcrbzFWVHFrQzUwY1JSajcwL2IxN0tTYTdxV0ZpTnlpMkxTcjJFSVpreVhDbjBxMjNLWEI1Nmp6YQpZeVdmL1dpM01PeHcrM1dLdDIxZ1o3SWV5TG5wMktodkFvdG5EVTBtVjNIYUlQekJTbENOc1NpNgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpBZmZpcm1UcnVzdCBDb21tZXJjaWFsCj09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURURENDQWpTZ0F3SUJBZ0lJZDNjR0p5YXBzWHd3RFFZSktvWklodmNOQVFFTEJRQXdSREVMTUFrR0ExVUVCaE1DVlZNeEZEQVMKQmdOVkJBb01DMEZtWm1seWJWUnlkWE4wTVI4d0hRWURWUVFEREJaQlptWnBjbTFVY25WemRDQkRiMjF0WlhKamFXRnNNQjRYRFRFdwpNREV5T1RFME1EWXdObG9YRFRNd01USXpNVEUwTURZd05sb3dSREVMTUFrR0ExVUVCaE1DVlZNeEZEQVNCZ05WQkFvTUMwRm1abWx5CmJWUnlkWE4wTVI4d0hRWURWUVFEREJaQlptWnBjbTFVY25WemRDQkRiMjF0WlhKamFXRnNNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUYKQUFPQ0FROEFNSUlCQ2dLQ0FRRUE5aHRQWndjcm9SWDFCaUxMSHdHeTQzTkZCa1JKTEx0SkpSVFd6c08zcXl4UHhrRXlsRmY2RXFkYgpEdUtQSHg2R0dhZXF0UzI1WHcyS3dxK0ZOWGt5TGJzY1lqZnlzVnRLUGNyTmNWL3BRcjZVNk1qZStTSklaTWJscThZcmJhMEY4UHJWCkM4K2E1ZkJRcElzN1I2VWpXM3A2K0RNL3VPK1psK01nd2RZb2ljK1UrN2xGN2VOQUZ4SFVkUEFMTWVJckptcWJURmV1ckNBK3VrVjYKQmZPOW0ya1ZybjFPSUdQRU5YWTZCd0xKTi8zSFIrN284WFlkY3hYeWw2UzF5SHA1MlVLcUszOWMvczRtVDZObWdUV3ZSTHBVSGh3dwpNbVdkNWp5VFhsQk9ldU02MUc3TUd2djUwamV1SkNxclZ3TWlLQTFKZFgrM0tOcDF2NDdqM0E1NU1RSURBUUFCbzBJd1FEQWRCZ05WCkhRNEVGZ1FVblpQR1U0dGV5cTgvbng0UDVabVZ2Q1QybEk4d0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBT0JnTlZIUThCQWY4RUJBTUMKQVFZd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFGaXM5QVFPemNBTi93cjkxTG9XWHltOWUyaVpXRW5TdEIwM1RYOG5mVVlHWFVQRwpoaTQrYzdJbWZVK1RxYmJFS3BxcklaY1VzZDZNMDZ1SkZkaHJKTlR4RnE3WXBGelVmMUdPN1JnQnNaTmp2Yno0WVlDYW5ySE9RbkRpCnFYMEdKWDBub2Y1djdMTWVKTnJqUzFVYUFEczF0RHZaMTEwdy9ZRVRpZkxDQml2dFo4U095VU95WEdzVmlRSzhZdnhPOHJVenFySnYKMHdxaVVPUDJPK2d1Uk1MYlpqaXBNMVpJOFcwYk00ME5qRDlnTjUzVHltMStOSDRObjNKMml4dWZjdjFTTlVGRkFwWXZITEthYzBraApzVWxIUlVlMDcybzBFY2xObXN4WnQ5WUNubHBPWmJXVXJodmZLYkFXOGI4QW5nYzZGMlMxQkxVaklaa0tsVHVYZk84PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpBZmZpcm1UcnVzdCBOZXR3b3JraW5nCj09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURURENDQWpTZ0F3SUJBZ0lJZkU4RU9SelVtUzB3RFFZSktvWklodmNOQVFFRkJRQXdSREVMTUFrR0ExVUVCaE1DVlZNeEZEQVMKQmdOVkJBb01DMEZtWm1seWJWUnlkWE4wTVI4d0hRWURWUVFEREJaQlptWnBjbTFVY25WemRDQk9aWFIzYjNKcmFXNW5NQjRYRFRFdwpNREV5T1RFME1EZ3lORm9YRFRNd01USXpNVEUwTURneU5Gb3dSREVMTUFrR0ExVUVCaE1DVlZNeEZEQVNCZ05WQkFvTUMwRm1abWx5CmJWUnlkWE4wTVI4d0hRWURWUVFEREJaQlptWnBjbTFVY25WemRDQk9aWFIzYjNKcmFXNW5NSUlCSWpBTkJna3Foa2lHOXcwQkFRRUYKQUFPQ0FROEFNSUlCQ2dLQ0FRRUF0SVRNTXhjdWE1UnNhMkZTb091anozbVVUT1dVZ0puTFZXUkVaWTluWk9JRzQxdzNTZll2bTRTRQpIaTN5WUowd1RzeUVoZUlzeng2ZS9qYXJNM2MxUk5nMWxobzlOdWg2RHRqVlI2RnFhWXZaL0xzNnJubGExZlRXY2J1YWtDTnJtcmVJCmRJY01IbCs1bmkzNnExTXIzTHQyUHBOTUNBaU1IcUlqSE5ScXJTSzZtUUV1YldYTHZpUm1WU1JMUUVTeEc5Zmh3b1hBM2hBL1BlMjQKL1BIeEkxUGN2MldYYjluNVFIR05mYjJWMU02K29GNG5JOTc5cHRBbURnQXA2enhHOEQxZ3Z6OVEwdHdtUVZHZUZEZENCS053VjZnYgpoKzB0K252dWpBcmpxV2FKR2N0QitkMUVObUhQNG5kR3lIMzI5SktCTnYzYk5QRnlmdk1NRnIyMEZRSURBUUFCbzBJd1FEQWRCZ05WCkhRNEVGZ1FVQngvUzU1emF3bTZpUUxTd2VsQVFVSFRFeUwwd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBT0JnTlZIUThCQWY4RUJBTUMKQVFZd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFJbFhzaFo2cU1MOTF0bWJtelRDbkxReUZFMm5wTi9zdnFlKytFUGJrVGZPdERJdQpVRlVhTlU1MlEzRWc3NU4zVGhWd0xvZkR3UjF0M011MUo5UXNWdEZTVXpwRTBuUEl4QnNGWlZwaWtwenVRWTB4MitjMDZsa2gxUUY2CjEyUzRaRG5OeWUydjdVc0RTS2VnbVFHQTNHV2pOcTVsV1VoUGdrdklaZkZYSGVWWkxnby9iTmpSOWVVSnRHeFVBQXJnRlUySGRXMjMKV0paYTNXM1NBS0QwbTBpK3d6ZWt1amJnZkllRmx4b1ZvdDR1b2x1OXJ4ajVrRkROY0ZuNEoyZEh5OGVnQnpwOTBTeGRiQms2WnJWOQovWkZ2Z3JHK0NKUGJGRWZ4b2pmSFJaNDh4M2V2WktpVDMvWnBnNEpnOGtsQ05PMWFBRlNGSEJZMmtneGMrcWF0djlzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpBZmZpcm1UcnVzdCBQcmVtaXVtCj09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZSakNDQXk2Z0F3SUJBZ0lJYll3VVJyR21DdTR3RFFZSktvWklodmNOQVFFTUJRQXdRVEVMTUFrR0ExVUVCaE1DVlZNeEZEQVMKQmdOVkJBb01DMEZtWm1seWJWUnlkWE4wTVJ3d0dnWURWUVFEREJOQlptWnBjbTFVY25WemRDQlFjbVZ0YVhWdE1CNFhEVEV3TURFeQpPVEUwTVRBek5sb1hEVFF3TVRJek1URTBNVEF6Tmxvd1FURUxNQWtHQTFVRUJoTUNWVk14RkRBU0JnTlZCQW9NQzBGbVptbHliVlJ5CmRYTjBNUnd3R2dZRFZRUUREQk5CWm1acGNtMVVjblZ6ZENCUWNtVnRhWFZ0TUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEEKTUlJQ0NnS0NBZ0VBeEJMZnFWLytRZDNkOVorSzQvYXM0VHg0bXJ6WThIOTZvRE1xM0kwZ1c2NHRiK2VUMlRad2FtalBqbEdqaFZ0bgpCS0FRSkc5ZEtJTEJsMWZZU0NrVHR1RytrVTNmaFF4VEdKb2VKS0pQai9DaWhRdkw5Q2wvMHFSWTdpWk55YXFvZTVyWitqamVSRmNWCjVmaU15TmxJNGcwV0p4MGV5SU9GSmJlNnFsVkJ6QU1pU3kyUmpZdm1pYTlteCtuL0srazhyTnJTczhQaGFKeUorSG9BVnQ3MFZaVnMKKzdwazNXS0wzd3QzTXV0aXpDYWFtN3VxWW9OTXRBWjZNTWdwdiswR1RaZTVITVF4SzlWZnZGTVNGNXlaVnlsbWQyRWhNUWN1SlVtZApHUEx1OHl0eGpMVzZPUWRKZC96dkxwS1FCWTB0TDNkNzcwTy9OYnVhMlBsenB5enkwRmZ1S0U0bVg0K1FhQWt2dVBqY0J1a3VtajVSCnA5RWl4QXFuT0Voc3Mvbi9mYXVHVitPNjFvVjRkN3BENmtoLzl0aStJMjBldjlFMmJGaGM4ZTZrR1ZRYTlRUFNkdWJoakwwOHM5TkkKUytMSStIK1NxSFpHbkVKbFBxUWV3UWNEV2tZdHVKZnp0OVd5VlNIdnV0eE1BSmY3RkpVbk03L29RMGRHMGdpWkZtQTdtbjdTNXUwNAo2dXdCSGp4SVZra0p4MHczQUo2SURzQno0VzltNlhKSE1ENFE1UXNEeVpwQ0FHekZsSDVoeElyZmY0SWFDMW5FV1RKM3M3eGdhVlk1Ci9iUUdleXpXWkRiWnZVanRoQjkrcFNLUEtyaEM5SUszMUZPUWVFNHRHdjJCYjBUWE93RjBsa0xnQU9JdWErckY3bktzdTcvKzZxcW8KK056MnNubUt0bWNDQXdFQUFhTkNNRUF3SFFZRFZSME9CQllFRkozQVo2WU1JdGttOVVXcnBtVlNFU2ZZUmF4ak1BOEdBMVVkRXdFQgovd1FGTUFNQkFmOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01BMEdDU3FHU0liM0RRRUJEQVVBQTRJQ0FRQ3pWMDBRWWs0NjVLenF1Qnl2Ck1pUElzMGxhVVp4MktJMTVxbGRHRjlYMVV2YTNST2dJUkw4WWhOSUxnTTNGRXYwQVZRVmhoMEhjdFNTZVBNVFl5UHR3bmk5NGxvTWcKTnQ1OEQya1RpS1YxTnBnSXBzYmZyTTdqV05hM1B0NjY4K3MwUU5paWdmVjRQeS9WcGZ6Wm90UmVCQTRYcmY1QjhPV3ljdnBFZ2pOQwo2QzFZOTFhTVlqKzZRckNjREZ4K0xtVW1YRk5QQUxKNGZxRU5tUzJOdUIyT29zU3cvV0RRTUtTT3lBUmlxY1R0TmQ1NmwrME9PRjZTCkw1TndwYW1jYjZkOUV4MSt4Z2hJc1Y1bjYxRUlKZW5tSld0U0taR2Mwamx6Q0ZmZW1RYTBXNTBRQnVIQ0FLaTRIRW9DQ2hUUXdVSEsKKzR3MUlYMkNPUEtwVkpFWk5aT1ViV282eGJMUXU0bUdrK2lieVE4NnAzcTRvZkI0UnZyOE55L2xpb1R6My80RTJhRm9vQzhrNGdtVgpCdFdWeXVFa2x1dDg5cE1GdSsxejZTM1JkVG5YNXlUYjJFNWZRNCtlMEJRNXYxVndTSmxYTWJTYzdrcVlBNVl3SDJBRzdoc2ovb0ZnCkl4cEhZb1dsekJrMGdHK3pyQnJqbi9CN1NLM1ZBZGxudHFseWsrb3Racld5dU9ROVBMTHZUSXpxNndlL3F6V2FWWWE4R0thMXFGNjAKZzJ4cmFVRFRuOXp4dzJscnVlRnRDZlR4cWxCMkNucDllaGVoVlpaQ21URUozV0FSalFVd2Z1YU9SdEdkRk5ySEYrUUZsb3pFSkxVYgp6eFFIc2tENG81NUJocndFMEd1V3lDcUFOUDIvN3dhajNWakZoVDArai82ZUtlQzJ1QWxvR1J3WVF3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MKPT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIvakNDQVlXZ0F3SUJBZ0lJZEpjbGlzYy9lbFF3Q2dZSUtvWkl6ajBFQXdNd1JURUxNQWtHQTFVRUJoTUNWVk14RkRBU0JnTlYKQkFvTUMwRm1abWx5YlZSeWRYTjBNU0F3SGdZRFZRUUREQmRCWm1acGNtMVVjblZ6ZENCUWNtVnRhWFZ0SUVWRFF6QWVGdzB4TURBeApNamt4TkRJd01qUmFGdzAwTURFeU16RXhOREl3TWpSYU1FVXhDekFKQmdOVkJBWVRBbFZUTVJRd0VnWURWUVFLREF0QlptWnBjbTFVCmNuVnpkREVnTUI0R0ExVUVBd3dYUVdabWFYSnRWSEoxYzNRZ1VISmxiV2wxYlNCRlEwTXdkakFRQmdjcWhrak9QUUlCQmdVcmdRUUEKSWdOaUFBUU5NRjRiRlowRDBLRjVOYmM2UEpKNnloVWN6V0x6bkNaY0J6M2xWUHFqMXN3UzZ2UVVYK2lPR2Fzdkxram1yQmhEZUt6UQpOOE85c3MwczVrZmlHdVpqdUQwdUwzakVUOXYwRDZSb1RGVnlhNVVkVGhoQ2xYak1OenlSNHB0bEt5bWpRakJBTUIwR0ExVWREZ1FXCkJCU2FyeWw2d0JFMU5TWlJNQUREYXY1QTFhN1dQREFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQTRHQTFVZER3RUIvd1FFQXdJQkJqQUsKQmdncWhrak9QUVFEQXdObkFEQmtBakFYQ2ZPSGlGQmFyOGpBUXI5SFgvVnNhb2JneENkMDVEaFQxd1YvR3pUanhpK3p5Z2s4TjUzWAo1N2hHOGYyaDRuRUNNRUpaaDBQVVVkKzYwd2t5V3M2SWZsYzluRjlDYS9VSExiWHdncFA1V1crdVpQcFk1WXNlNDJPK3RZSE5id0tNCmVRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQQo9PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlEdXpDQ0FxT2dBd0lCQWdJREJFVEFNQTBHQ1NxR1NJYjNEUUVCQlFVQU1INHhDekFKQmdOVkJBWVRBbEJNTVNJd0lBWURWUVFLCkV4bFZibWw2WlhSdklGUmxZMmh1YjJ4dloybGxjeUJUTGtFdU1TY3dKUVlEVlFRTEV4NURaWEowZFcwZ1EyVnlkR2xtYVdOaGRHbHYKYmlCQmRYUm9iM0pwZEhreElqQWdCZ05WQkFNVEdVTmxjblIxYlNCVWNuVnpkR1ZrSUU1bGRIZHZjbXNnUTBFd0hoY05NRGd4TURJeQpNVEl3TnpNM1doY05Namt4TWpNeE1USXdOek0zV2pCK01Rc3dDUVlEVlFRR0V3SlFUREVpTUNBR0ExVUVDaE1aVlc1cGVtVjBieUJVClpXTm9ibTlzYjJkcFpYTWdVeTVCTGpFbk1DVUdBMVVFQ3hNZVEyVnlkSFZ0SUVObGNuUnBabWxqWVhScGIyNGdRWFYwYUc5eWFYUjUKTVNJd0lBWURWUVFERXhsRFpYSjBkVzBnVkhKMWMzUmxaQ0JPWlhSM2IzSnJJRU5CTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQwpBUThBTUlJQkNnS0NBUUVBNC90OW8zSzZ3dkRKRklmMWF3Rk80VzVBQjdwdEoxMS85MXN0czFySFVWK3JwREttWVllMmJnK0cwakFDCmwvalhhVmVoR0RsZGFtUjV4Z0ZackR3eFNqaDgwZ1RTU3lqb0lGODdCNkxNVFhQYjg2NVB4MWJWV3FlV2lmcnpxMmpVSTRaWko4OEoKSjd5c2JuS0RIREJ5MytDaTZkTGhkSFVadlNxZWV4VlVCQnZYUXptdFZTakY0aHE3OU1Ea3JqaEpNOHgyaFo4NVJkS2tudklTakZINApmT1F0Zi9Xc1grc1duN0V0MGJyTWtVSjNUQ1hKa0RodjIvRE0rNDRlbDFrKzFXQk81Z1VvN1VsNUUwdTZTTnN2K1hMVE9jcitIOWcwCmN2VzBRTTh4QWNQczNoRXRGMTBmdUZEUlhobW5hZDRITXlqS1VKWDVwMVRMVklaUVJhbjVTUUlEQVFBQm8wSXdRREFQQmdOVkhSTUIKQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJRSWRzM0xCLzhrOXNYTjdidVF2T0tFTjBaMTl6QU9CZ05WSFE4QkFmOEVCQU1DQVFZdwpEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBS2FvclNMT0FUMm1vLzlpMEVpZGkxNXlzSGhFNDl3Y3J3bjlJMGo2dlNyRXVWVUV0UkNqCmpTZmVDNEpqME83ZUREZDVRVnNpc3JDYVFWeW1jT0RVMEhmTEk5TUE0R3hXTCtGcERRM1pxcjhoZ1ZEWkJxV28vNVUzMEtyKzRyUDEKbVMxRmhJcmxRZ25YZEFJdjk0blltZW04SjlSSGpib05SaHgzenhTa0hMbWtNY1NjS0hRRE5QOHpHU2FsNlExMHR6Nlh4bmJvSjVhagpadDNocnZKQlc4cVlWb056Y09TR0d0SXhRYm92dmkwVFduWnZUdWhPZ1E0L1d3TWlvQksrWmxnUlNzc0R4TFFxS2kyV0YrQTVWTHhJCjAzWW5uWm90QnFiSjdEblNxOXVmbWdzbkFqVXBzVUNWNS9ub25GV0lHVWJXdHpUMWZzNDVtdGs0OFZIM1R5dz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKVFdDQSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRGV6Q0NBbU9nQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFVRkFEQmZNUXN3Q1FZRFZRUUdFd0pVVnpFU01CQUdBMVVFQ2d3SgpWRUZKVjBGT0xVTkJNUkF3RGdZRFZRUUxEQWRTYjI5MElFTkJNU293S0FZRFZRUUREQ0ZVVjBOQklGSnZiM1FnUTJWeWRHbG1hV05oCmRHbHZiaUJCZFhSb2IzSnBkSGt3SGhjTk1EZ3dPREk0TURjeU5ETXpXaGNOTXpBeE1qTXhNVFUxT1RVNVdqQmZNUXN3Q1FZRFZRUUcKRXdKVVZ6RVNNQkFHQTFVRUNnd0pWRUZKVjBGT0xVTkJNUkF3RGdZRFZRUUxEQWRTYjI5MElFTkJNU293S0FZRFZRUUREQ0ZVVjBOQgpJRkp2YjNRZ1EyVnlkR2xtYVdOaGRHbHZiaUJCZFhSb2IzSnBkSGt3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUN3Zm5LNHBBT1U1cWZlQ1RpUlNoRkFoNmQ4V1dRVWU3VVJFTjMrdjlYQXUxYmloU1gwTlhJUCtGUFFRZUZFQWNLMEhNTXgKUWhaSGhUTWlkcklLYncvbEpWQlBoWWErdjVndUVHY2V2aEVGaGdXUXhGblFmSGdRc0lCY3QrSEhLM1hMZkordXRkR2RJemRqcDl4QwpvaTJTQkJ0UXdYdTRQaHZKVmdTTEwxS2JyYWxXNmNIL3JhbFloekMyZ2ZlWFJmd1pWenNyYitSSDlKbEYvaDN4K0plamlCMDNIRnlQCjRIWWxtbEQ0b0ZUL1JKQjJJOUl5eHNPckJyLzgrNy96clgyU1lnSmJLZE0xbzVPYVEyUmdYYkw2TXY4N0JLOU5RR3I1eCtQdkkvMXIKeStVUGl6Z043Z3I4L2crWW56QXgzV3hTWmZtTGdiNGk0UnhZQTdxUkc0a0hBZ01CQUFHalFqQkFNQTRHQTFVZER3RUIvd1FFQXdJQgpCakFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjBHQTFVZERnUVdCQlJxT0ZzbWpkNkxXdkpQZWxTREdSampDRFdtdWpBTkJna3Foa2lHCjl3MEJBUVVGQUFPQ0FRRUFQTlYzUGRyZmlicUhEQWhVYWlCUWtyNndRVDI1Sm1TRENpL29RTUNYS0NlQ01FckprLzlxNTZZQWY0bEMKbXRZUjVWUE9MOHp5MmdYRS91SlF4RHFHZmN6YWZoQUpPNUkxS2xPeS91c3JCZGxzWGViUTc5TnFacDRWS0lWNjZJSUFyQjZuQ1dsVwpRdE5vVVJpK1ZKcS9SRUc2U2I0Z3VtbGM3cmgzemM1c0g2MkRsaGg5RHJVVU9ZVHhLT2t0bzU1N0hucHlXb096ZVcvdnRQelFDcVZZClQwYmYrMjE1V2ZLRUlsS3VEOHo3ZkR2bmFzcEhZY042K05PU0JCKzRJSVRoTmxRV3gwRGVPNHB6M04vR0NVemY3TnIvMUZOQ29jbnkKWWgwaWd6eVh4ZmtaWWllc1pTTFgwenpHNVk2eVU4eEp6cnd3L25zT001RDc3ZElVa1I4SHJ3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKU2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRGR6Q0NBbCtnQXdJQkFnSUJBREFOQmdrcWhraUc5dzBCQVFzRkFEQmRNUXN3Q1FZRFZRUUdFd0pLVURFbE1DTUdBMVVFQ2hNYwpVMFZEVDAwZ1ZISjFjM1FnVTNsemRHVnRjeUJEVHk0c1RGUkVMakVuTUNVR0ExVUVDeE1lVTJWamRYSnBkSGtnUTI5dGJYVnVhV05oCmRHbHZiaUJTYjI5MFEwRXlNQjRYRFRBNU1EVXlPVEExTURBek9Wb1hEVEk1TURVeU9UQTFNREF6T1Zvd1hURUxNQWtHQTFVRUJoTUMKU2xBeEpUQWpCZ05WQkFvVEhGTkZRMDlOSUZSeWRYTjBJRk41YzNSbGJYTWdRMDh1TEV4VVJDNHhKekFsQmdOVkJBc1RIbE5sWTNWeQphWFI1SUVOdmJXMTFibWxqWVhScGIyNGdVbTl2ZEVOQk1qQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCCkFOQVZPVkt4VXJPNnhWbUN4RjFTcmpwRFpZQkx4L0tXdk5zMmw5YW1aSXlvWHZEakNoejMzNWM5UzY3Mlhld2h0VUdyemJsK2RwKysKK1Q0Mk5LQTd3Zll4RVVWMGt6MVhnTVg1aVpuSzVhdHExTFhhUVpBUXdkYldRb25Ddi9RNEVwVk1WQVgzTnVSRmczc1VaZGJjREUzUgozbjRNcXp2RUZiNDZWcVphYjNacFVxbDZ1Y2pyYXBwZFV0QXRDbXMxRmdrUWhOQnF5am9HQURkSDVINVhUeitMNjJlNGlLckZ2bE5WCnNwSEVmYm13aFJrR2VDN2JZUnI2aGZWS2thSG5GdFdPb2puZmxMaHdIeWcvaS94QVhtT0RQSU1xR3Bscno5NVphanY4YnhiWEgvMUsKRU90T2doWTZyQ2NNVS9HdDFTU3dhd05Rd1MwOEZ0MUVOQ2NhZGZzQ0F3RUFBYU5DTUVBd0hRWURWUjBPQkJZRUZBcUZxWGRsQlpoOApRSUg0RDVjc09QRUs3RHpQTUE0R0ExVWREd0VCL3dRRUF3SUJCakFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQTBHQ1NxR1NJYjNEUUVCCkN3VUFBNElCQVFCTU9xTkVyTGxGc2NlVGZzZ0xDa0xmWk9vYzdsbHNDTHFKWDJyS1NwV2VlbzhIeGRwRmNvSnhEanJTekcrbnRLRWoKdS9Za244c1gvb3ltenNMUzI4eU4vSEg4QXluQmJGMHpYMlMyWlR1SmJ4aDJlUFhjb2tnZkdUK09rK3Z4K2hmdXpVN2pCQkpWMXVYawozZnMrQlh6aUhWN0dwN3lYVDJnNjlla3VDa08ycjFkY1ltaDh0LzJqaW9TZ3JHSytLd21ITlBCcUFidWJLVlk4L2dBM3p5TnM4VTZxCnRuUkdFbXlSN2pUVjdKcVI1MFMra0RGeTFVa0M5Z0xsOUIvcmZObVdWYW4vN0lyNW1VZi9OVm9DcWdUTGlsdUhjU21SdmFTMGVnMjkKbXZWWEl3QUhJUmMvU2puUkJVa0xwN1kzZ2FWZGpLb3pYb0VvZktkOUorc0FybzAzCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkFjdGFsaXMgQXV0aGVudGljYXRpb24gUm9vdCBDQQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZ1ekNDQTZPZ0F3SUJBZ0lJVndvUmwwTEU0OHd3RFFZSktvWklodmNOQVFFTEJRQXdhekVMTUFrR0ExVUVCaE1DU1ZReERqQU0KQmdOVkJBY01CVTFwYkdGdU1TTXdJUVlEVlFRS0RCcEJZM1JoYkdseklGTXVjQzVCTGk4d016TTFPRFV5TURrMk56RW5NQ1VHQTFVRQpBd3dlUVdOMFlXeHBjeUJCZFhSb1pXNTBhV05oZEdsdmJpQlNiMjkwSUVOQk1CNFhEVEV4TURreU1qRXhNakl3TWxvWERUTXdNRGt5Ck1qRXhNakl3TWxvd2F6RUxNQWtHQTFVRUJoTUNTVlF4RGpBTUJnTlZCQWNNQlUxcGJHRnVNU013SVFZRFZRUUtEQnBCWTNSaGJHbHoKSUZNdWNDNUJMaTh3TXpNMU9EVXlNRGsyTnpFbk1DVUdBMVVFQXd3ZVFXTjBZV3hwY3lCQmRYUm9aVzUwYVdOaGRHbHZiaUJTYjI5MApJRU5CTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFwOGJFcFNta0xPL2xHTVd3VUtOdlVUdWZDbHJKCndrZzRDc0ljb0JoL2tiV0h1VUEvM1Ixb0h3aUQxUzBlaUtENGoxYVBiWmtDa3BBVzFWOEliSW5YNGF5OElNS3g0SU5SaW1sTkFKWmEKYnkvQVJINmpEdVNSelZqdTNQdkhIa1ZIM1NlNUNBR2ZwaUVkOVVFdEwwejlLSzNnaXEwaXRGWmxqb1pVajVOREtkNDVSbmlqTUNPNgp6ZkI5RTFmQVhkS0RhMGhNeEt1ZmdGcGJPcjNKcHlJL2dDY3pXdzYzaWd4ZEJ6Y0l5MnpTZWtjaVJEWEZ6TXd1anQwcTdiZDlaZzFmCllWRWlWUnZqUnVQalBkQTFZcHJicnhUSVc2SE1pUnZoTUNiOG9Kc2ZnYWRISHdUcm96bVNCcCtaMDcvVDZrOVFuQm4rbG9jZVBHWDIKb3hna2c0WVE1MVErcURwMkpFK0JJY1hqRHdMNGs1UkhJTHYrMUE3VGFMbmR4SHFFZ3VOVFZIbmQyNXpTOGdlYkxyYThQdTJGYmU4bApFZktYR2tKaDkwcVg2SXV4RUFmNlpZR3lvam5QOXp6L0dQdkc4VnFMV2VJQ3JIdVMwRTRVVDFsRjlneGVLRit3NkQ5Rno4K3ZtMi83CmhOTjNXcFZ2ckpTRW51Njh3RXFQU3BQNFJDSGlNVVZoVUU0UTJPTTFmRXdadE40RnY2TUduOGkxemVRZjF4Y0dEWHFWZEZVTmFCcjgKRUJ0aVpKMXQ0SldndzVRSFZ3MFU1cjBGKzdpZjV0K0w0c2JuZnBiMlU4V0FORkFvV1BBU1VIRVhNTHJtZUdPODlMS3RteXV5L3VFNQpqRjY2Q3lDVTNudUR1UC9qVm8yM0VlazdqUEt4d1YyZHBBdE1LOW15R1BXMW4wc0NBd0VBQWFOak1HRXdIUVlEVlIwT0JCWUVGRkxZCmlEckluM2htN1luemV6aHdsTWtDQWpiUU1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0h3WURWUjBqQkJnd0ZvQVVVdGlJT3NpZmVHYnQKaWZON09IQ1V5UUlDTnRBd0RnWURWUjBQQVFIL0JBUURBZ0VHTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElDQVFBTGUzS0h3R0NtU1V5SQpXT1lkaVBjVVpFaW0yRmdLRGs4VE5kODFIZFR0QmpISWdUNXExZDA3R2pMdWtEMFIwaTcwanNOakxpTm1zR2UrYjdiQUV6bGdxcUkwCkpaTjFVdDZubmEwT2g0bFNjV29XUEJrZGcvaWFLV1crOUQrYTJmRHpXb2NoY1lCTnkrQTRteis3K3VBd1RjK0cwMlVRR1JqUmx3S3gKSzNKQ2FLeWd2VTVhMmhpL2E1aUIwUDJhdmw0VlNNMFJGYm5BS1Z5MDZJajNQamF1dDJMOUhtTGVjSGdRSEVoYjJyeWtPTHBuN1ZVKwpYbGZmMUFOQVRJR2swazlqcHdsQ0NSVDhBS25DZ0hOUExzQkEyUkY3U09wNkFzRFQ2eWdCSmxoMHdjQnpJbTJUbGYwNWZic3E0L2FDCjR5eVhYMDRma1pUNi9peWoySFlhdUUyeU9FK2IraDFJWUhrbTR2UDlxZENhNkhDUFNYclc1YjBLRHRzdDg0Mi82K09rZmN2SGxYSG8KMnFOOHhjTDRkSklFRzRhc3BDSlRRTGFzL2t4MnovdVVNc0ExbjNZL2J1V1FicUNtSnFLNExMN1JLNFg5cDJqSXVnRXJzV3gwSGJoegpsZWZ1dDhjbDhBQk1BTEordGd1TEhQUEFVSjRsdWVBSTNqWm0vemVsMGJ0VVpDekpKN1ZMa241bC85TXQ0YmxPdkgra1FTR1FRWGVtCk9SL3FudU9mMEdadkJleXFkbjYvYXhhZzY3WEgvSkpVTHlzUkp5VTNlRXhSYXJEenpGaGRGUEZxU0JYL3dnZTJzWTBQamx4UVJyTTkKdndHWVQ3SlpWRWMrTkh0NGJWYVRMblBxWmloNHpSMFV2NkNQTHk2NExvN3lGSXJNNmJWOCsyeWRES1hobGc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpCdXlwYXNzIENsYXNzIDIgUm9vdCBDQQo9PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRldUQ0NBMEdnQXdJQkFnSUJBakFOQmdrcWhraUc5dzBCQVFzRkFEQk9NUXN3Q1FZRFZRUUdFd0pPVHpFZE1Cc0dBMVVFQ2d3VQpRblY1Y0dGemN5QkJVeTA1T0RNeE5qTXpNamN4SURBZUJnTlZCQU1NRjBKMWVYQmhjM01nUTJ4aGMzTWdNaUJTYjI5MElFTkJNQjRYCkRURXdNVEF5TmpBNE16Z3dNMW9YRFRRd01UQXlOakE0TXpnd00xb3dUakVMTUFrR0ExVUVCaE1DVGs4eEhUQWJCZ05WQkFvTUZFSjEKZVhCaGMzTWdRVk10T1Rnek1UWXpNekkzTVNBd0hnWURWUVFEREJkQ2RYbHdZWE56SUVOc1lYTnpJRElnVW05dmRDQkRRVENDQWlJdwpEUVlKS29aSWh2Y05BUUVCQlFBRGdnSVBBRENDQWdvQ2dnSUJBTmZIWHZmQkI5UjMrME1oOVBUMWFlVHVNZ0hibzRZZjVGa051dWQxCmcxTHI2aHhoRlVpN0hRZktqSzZ3M0phZDZzTmdrb2FDS0hPY1ZnYi9TMlR3RENvM1NiWGx6d3g4N3ZGS3UzTXdaZlBWTDRPMmZ1UG4KOVo2cllQblQ4WjJTZElya0hKYXNXNERwdGZReGg2TlIvTWQrb1crT1UzZlVsOEZWTTVJK0dDOTExSzJHU2N1VnIxUUdiTmdHRTQxYgovK0VtR1ZuQUpMcUJjWG1RUkZCb0pKUmZ1TE1SOFNsQllhTkJ5eU0yMWNIeE1sQVFUbi8waHBQc2hOT092RXUvWEFGT0J6M2NGSXFVCkNxVHFjL3NMVWVnVEJ4ajZEdkVyMFZRVmZUemg5N1FaUW1kaVhuZmdvbFhzdHRscEY5VTZyMFR0U3NXZTVIb25mT1YxMTZyTEplZmYKYXdyYkQwMlRUcWlnelhzdThsa0JhcmNOdUFlQmZvczRHemptQ2xlWlBlNGg2S1AxREJiZGkrdzBqcHdxSEFBVkY0MW9nOUp3bnhnSQp6UkZvMWNsclVzM0VSby9jdGZQWVYzTWU2WlE1QkwvVDNqamV0RlBzYVJ5aWZzU1A1QnR3cmZLaStmdjNGbVJtYVo5SlVhTGlGUmhuCkJrcC8xV3kxVGJNejRHSHJYYjdwbUE4eTF4MUxQQzVhQVZLUkNmTGY2bzNZQmtCanFoSGsvc00zbmhSU1AvVGl6UEpoazlIOVoydlgKVXE2L2FLdEFRNkJYTlZONDhGUDRZVUlIWk1iWGI1dE1PQTFqckdLdk5vdWljd29OOVNHOWRLcE42bklEU2R2SFh4MWlZOGY5M1pIcwpNKzcxYmJSdU1HamV5Tlltc0hWZWU3UUhJSmloZGpLNFRXeFBBZ01CQUFHalFqQkFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEClZSME9CQllFRk1tQWQrQmlrb0wxUnB6enV2ZE13OTY0bzYwNU1BNEdBMVVkRHdFQi93UUVBd0lCQmpBTkJna3Foa2lHOXcwQkFRc0YKQUFPQ0FnRUFVMThoOWJxd09sSTVMSkt3YkFESjc4NGc3d2J5bHA3cHBIUi9laGI4dC9XMit4VWJQNnVtd0hKZEVMRng3cnhQNDYycwpBMjB1Y1M2dnhPT3RvNzBNRWFlMC8wcXlleEFRSDZkWFFiTEFydlFzV2RaSEVJanpJVkVwTU1wZ2hxOUdxeDN0T2x1d2xONUU0MEVJCm9zSHNIZGI5VDdiV1I5QVVDOHJteXJWN2QzNUJIMTZEeDdhTU9aYXdQNWFCUVc5Z2tPTG8rZnNpY2RsOXN6MUd2N1NFcjVBY0Q0OFMKYXEvdjdoNTZyZ0pLaWhjcmR2NnNWSWtrTEU4L3RyS25Ub3lva1pmN0tjWjdYQzI1eTJhMnQ2aGJFbEdGdFFsK1luaHcvcWxxWUxZZApEbmtNL2NycUpJQnl3NWMvOG5lclF5SUt4K3UyRElTQ0xJQnJRWW9Jd091bGE5K1pFc3VLMVY2QURKSGdKZ2cyU01YNk9CRTEveVdECkxmSjZ2OXI5anY2bHkwVXNIOFNJVTY1M0R0bWFkc1dPTEIyanV0WHNNcTdBcXF6MzBYcE42OVFINGtqM0lvNndwSjlxem82eXNtRDAKb3lMUUkrdVVXbnBwM1ErL1FGZXNhMWxRMmFPWjRXNytqUUY1SnlNVjNwS2Rld2xOV3VkTFNEQmFHT1lLYmVhUDROSzc1dDk4YmlHQwp3V2c1VGJTWVdHWml6RXFRWHNQNkp3U3hlUlYwbWN5K3JTRGVKbUFjNjFaUnBxUHE1S00vcC85aDNQRmFUV3d5STBQdXJLanU3a29TCkNUeGRjY0srZWZyQ2gyZ2RDLzFjYWN3RzBKcDlWSmtxeVRrYUdhOUxLa1B6WTExYVdPSXY0eDNrcWRiUUN0Q2V2OWVCQ2ZISnh5WU4KckpnV1ZxQT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQnV5cGFzcyBDbGFzcyAzIFJvb3QgQ0EKPT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZXVENDQTBHZ0F3SUJBZ0lCQWpBTkJna3Foa2lHOXcwQkFRc0ZBREJPTVFzd0NRWURWUVFHRXdKT1R6RWRNQnNHQTFVRUNnd1UKUW5WNWNHRnpjeUJCVXkwNU9ETXhOak16TWpjeElEQWVCZ05WQkFNTUYwSjFlWEJoYzNNZ1EyeGhjM01nTXlCU2IyOTBJRU5CTUI0WApEVEV3TVRBeU5qQTRNamcxT0ZvWERUUXdNVEF5TmpBNE1qZzFPRm93VGpFTE1Ba0dBMVVFQmhNQ1RrOHhIVEFiQmdOVkJBb01GRUoxCmVYQmhjM01nUVZNdE9UZ3pNVFl6TXpJM01TQXdIZ1lEVlFRRERCZENkWGx3WVhOeklFTnNZWE56SURNZ1VtOXZkQ0JEUVRDQ0FpSXcKRFFZSktvWklodmNOQVFFQkJRQURnZ0lQQURDQ0Fnb0NnZ0lCQUtYYUNwVVdVT09WOGw2ZGRqRUdNbnFiOFJCMnVBQ2F0VkkyelNSSApzSjhZWkx5YTl2clZlZGlRWWt3aUw5NDRQZGJncU9rY0xOdDRFZW1PYUZFVmNzZnpNNGZrb0YwTFhPQlhCeW93OWMzRU4zY29UUmlSCjVyL1ZVdjF4TFhBKzU4YkVpdVB3S0F2MGRwaWhpNGRWc2pvVC9MYytKemVPSXVPb1R5cnZZTHM5dHpuRERnRkhtVjBTVDl0RCtsZWgKN2ZtZHZoRkhKbHNUbUt0ZEZvcXdOeHhYblVYL2lKWTJ2N3ZLQjN0dmgyUFgwREpxMWwxc0RQR3piam5pYXpFdU9RQW5GTjQ0d093Wgpab1lTNkoxeUZoTmtVc2VwTnh6OWdqRHRoQmdkOUs1Yy8zQVRBT3V4OVRONlM5WlYrQVdOUzJtdzliTW9ObHdVeEZGelRXc0w4VFFICjJ4YzUxOXdvZTJ2MW4vTXV3VThYS2hEenpNcm82LzFycXk2YW55MkNiZ1RVVWdHVExUMkcvSDc4Mys5Q0hhWnI3N2tneHZlOW9LZVYKL2FmbWlTVFl6SXcwYk9Jakw5a1NHaUc1VlpGdkM1RjVHUXl0UUlnTGNPSjYwZzdZYUVpN2doTTVFRmpwMkNvSHhoTGJXTnZTTzFVUQpSd1VWWjJKK0dHT21SajhKRGxReVhyOE5Zbm9uNzREbzI5bExCbG8zV2lYUUNCSjMxRzhKVUpjOXlCM0QzNHhGTUZiRzAyU3JadlBBClhwYWN3OFR2dzN4cml6cDVmN05KenozaWlaK2dNRXVGdVp5VUpIbVBmV3VwUldnUEs5RHgyaHpMYWJqS1NXSnR5TkJqWXQxZ0QxaXEKajZHOEJhVm1vczhiZHJLRVpMRk1PVkxBTUxyd2pFc0NzTGEzQWdNQkFBR2pRakJBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRApWUjBPQkJZRUZFZTR6Zi9sYis3NHN1d3ZUZzc1SmJDT1BHdkRNQTRHQTFVZER3RUIvd1FFQXdJQkJqQU5CZ2txaGtpRzl3MEJBUXNGCkFBT0NBZ0VBQUNBalFUVUVrTUpBWW1EdjRqVk0xeitzNGpTUXVLRnZkdm9XRnFSSU55enBrTUx5UFBnS245aUI1YnRiMmlVc3BLZFYKY1NReTlzZ0w4cnhxK0pPc3NnZkNYNS9iek1pS3FyNXFiK0ZKRU13eDE0Qzd1OGpZb2c1a1YrcWk5Y0twTVJYU0lHcnMvQ0lCS00rRwp1SUFlcWN3UnBUenlGck5IbmZ6U2dDSEV5OUJIY0VHaHlvTVpDQ3h0OGwxM25Jb1VFOVEySEpMdzVRWTMzS2Jta0pzNGoxeHJHMGFHClEwSmZQZ0VIVTFSZFpYMzNpbk9obWxSYUh5bERGQ2ZDaFErMWlIc2FPNVMzSFdDbnRaem5LV2xYV3B1VGVrTXdHd1BYWXNoQXBxcjgKWk9SSzE1RlRBYWdnaUc2Y1gwUzV5MkNCTk94djAzM2FTRi9ydEpDOExha2NDNndjMWFKb0lJQUUxdnl4ankrN1NqRU5Tb1ljNitJMgpLU2IxMnRqRThuVmh6MzZ1ZG1OS2VrQmxrNGY0SG9DTWh1V0cxbzhPL0ZNc1lPZ1dZUnFpUGtON3pUbGdWR3IxOG9rbUFXaURTS0l6CjZNa0VrYklSTkJFKzZ0QkRHUjhEazVBTS8xRTlWL1JCYnVITG9MN3J5V1BOYmN6aytEYXFhSjN0dlYyWGNFUU50ZzQxM09FTVhidWcKVVpUTGZoYnJFUytqa2tYSVRISFp2TW1aVWxkR0wxRFB2VFZwOUQwVnpnYWxMQTgrOW9HNmxMdkR1NzlsZU5LR2VmOUpPeHFERFBEZQplT3pJOGsxTUd0NkNLZmpCV3RydDd1WW5YdWhGMEowY1VhaG9xMFRqMEl0cTQvZzd1OXhOMTJUeVViN21xcXRhNlRIdUJyeHp2eE5pCkNwL0h1WmM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRHd6Q0NBcXVnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQ0JnakVMTUFrR0ExVUVCaE1DUkVVeEt6QXBCZ05WQkFvTQpJbFF0VTNsemRHVnRjeUJGYm5SbGNuQnlhWE5sSUZObGNuWnBZMlZ6SUVkdFlrZ3hIekFkQmdOVkJBc01GbFF0VTNsemRHVnRjeUJVCmNuVnpkQ0JEWlc1MFpYSXhKVEFqQmdOVkJBTU1IRlF0VkdWc1pWTmxZeUJIYkc5aVlXeFNiMjkwSUVOc1lYTnpJRE13SGhjTk1EZ3gKTURBeE1UQXlPVFUyV2hjTk16TXhNREF4TWpNMU9UVTVXakNCZ2pFTE1Ba0dBMVVFQmhNQ1JFVXhLekFwQmdOVkJBb01JbFF0VTNsegpkR1Z0Y3lCRmJuUmxjbkJ5YVhObElGTmxjblpwWTJWeklFZHRZa2d4SHpBZEJnTlZCQXNNRmxRdFUzbHpkR1Z0Y3lCVWNuVnpkQ0JEClpXNTBaWEl4SlRBakJnTlZCQU1NSEZRdFZHVnNaVk5sWXlCSGJHOWlZV3hTYjI5MElFTnNZWE56SURNd2dnRWlNQTBHQ1NxR1NJYjMKRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDOWRaUHdZaUp2Sks3Z2VuYXNmYjNaSk5XNHQvek44RUxnNjNpSVZsNmJtbFFkVFF5Swo5dFBQY1BSU3RkaVRCT05HaG5GQlNpdndLaXhWQTlaSXcrQTVPTzN5WER3L1JMeVRQV0dyVHMwTnZ2QWdKMWdPUkg4RUdvZWwxNVlVCk5wRFFTWHVoZGZzYWEzT3grTTZwQ1N6eVU5WERGRVM0aHFYMml5czUycU16Vk5uNmNocjNJaFVjaUpGcmYyYmx3MnFBc0NUejM0WkYKaVAwWmYzV0hIeCt4R3dwekpGdTVaZUFzVk1oZzAyWVhQK0hNVkROemtRSTZwbjk3ZGptaUg1YTJPSzYxeUpOMEhaNjV0T1ZnblM5VwowZURyWGx0TUVuQU1iRVFncXhIWTlCbjIwcHhTTitmNnRzSXhPMHJVRkptdHh4cjFYVi82QjdoOERSL1dneDZ6QWdNQkFBR2pRakJBCk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RnWURWUjBQQVFIL0JBUURBZ0VHTUIwR0ExVWREZ1FXQkJTMUEvZDJPMkdDYWhLcUdGUHIKQXlHVXYvN095akFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBVmozdmxOVzkybk95V0w2dWtLMllKNWYrQWJHd1VnQzRUZVFiSVhRYgpmc0R1WG1rcUphOWMxaDNhMG5uSjg1Y3A0SWFIM2dSWkQvRloxR1NGUzVtdkpRUWV5VWFwbDk2Q3NodHduNXoycjNFeDNYc0ZwU3pUCnVjcEg5c3J5OXVldHVVZy92QmEzd1czMDZnbXY3UE8xNXdXZXBoNktVMUhXazRITWRKUDJ1ZHFtSlFWMGVWcCtRRDZDU3lZUk1HN2gKUDBISFJ3QTExZlhUOTFRK2dUM2FTV3Fhcys4UVBlYnJiOUhJSWtmTHpNOEJNWkxaR09NaXZna2VHajVhc3VSckRGUjZmVU5PdUltbAplOWVpUFphR3pQSW1OQzFxa3AyYUd0QXc0bDFPQkxCZml5QitkOEU5bFlMUlJwbzdQSGk0YjZIUURXU2llQjRwVHBQRHBGUVVXdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVNekNDQXh1Z0F3SUJBZ0lEQ1lQek1BMEdDU3FHU0liM0RRRUJDd1VBTUUweEN6QUpCZ05WQkFZVEFrUkZNUlV3RXdZRFZRUUsKREF4RUxWUnlkWE4wSUVkdFlrZ3hKekFsQmdOVkJBTU1Ia1F0VkZKVlUxUWdVbTl2ZENCRGJHRnpjeUF6SUVOQklESWdNakF3T1RBZQpGdzB3T1RFeE1EVXdPRE0xTlRoYUZ3MHlPVEV4TURVd09ETTFOVGhhTUUweEN6QUpCZ05WQkFZVEFrUkZNUlV3RXdZRFZRUUtEQXhFCkxWUnlkWE4wSUVkdFlrZ3hKekFsQmdOVkJBTU1Ia1F0VkZKVlUxUWdVbTl2ZENCRGJHRnpjeUF6SUVOQklESWdNakF3T1RDQ0FTSXcKRFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU5PeVNzOTZSKzkxbXlQNk9pL1dVRVdKTlRyR2E5disyd0JvcU9BRApFUjAzVUFpZlRVcG9sRFd6VTlHVVk2Y2dWcS9lVVhqc0tqM3pTRWhRUGdyZlJsV0xKMjNERUUwTmtWSkQySWZnWFU0MnRTSEtYemxBCkJGOWJmc3lqeGl1cFFCN1pOb1RXU1BPU0hqUkdJQ1RCcEZHT1NocnZVRDlwWFJsL1JjUEhBWTlSeVNQb2NxNjB2RllKZnhMTEhMR3YKS1pBS3lWWE1EOU8wR3UxSE5WcEs3Wnh6QkNIUXFyME1FN1VBeWlac3hHc01sRnFWbE5wUW12SC9wU3RtTWFUSk9LRGZIUis0Q1M3egpwK2huVXF1VkgrQkdQdGlrdzhwYXhUR0E2RWlhbjVScC9obmQySE44Z2NxVzNvN3RzeklGWllRMDV1YjlWeEMxWDNhL0w3QVFEY1VDCkF3RUFBYU9DQVJvd2dnRVdNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGUDNhRk1TZk1ONGh2UjVDT2Z5cll5TkoKNFBHRU1BNEdBMVVkRHdFQi93UUVBd0lCQmpDQjB3WURWUjBmQklITE1JSElNSUdBb0g2Z2ZJWjZiR1JoY0RvdkwyUnBjbVZqZEc5eQplUzVrTFhSeWRYTjBMbTVsZEM5RFRqMUVMVlJTVlZOVUpUSXdVbTl2ZENVeU1FTnNZWE56SlRJd015VXlNRU5CSlRJd01pVXlNREl3Ck1Ea3NUejFFTFZSeWRYTjBKVEl3UjIxaVNDeERQVVJGUDJObGNuUnBabWxqWVhSbGNtVjJiMk5oZEdsdmJteHBjM1F3UTZCQm9EK0cKUFdoMGRIQTZMeTkzZDNjdVpDMTBjblZ6ZEM1dVpYUXZZM0pzTDJRdGRISjFjM1JmY205dmRGOWpiR0Z6YzE4elgyTmhYekpmTWpBdwpPUzVqY213d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIK1gyekRJMzZTY2ZTRjZnSERPRkJKcGlCU1ZZRVFCckxMcE1FK2JVTUptCjJINk5NTFZ3TWVuaWFjZnpjTnNnRlliUURmQytyQUYxaE01K24wMi90MkE3blBQS0hlSmVhTmlqblpmbFFHRFNOaUgrMExTNEY5cDAKbzMvVTM3Q1lBcXh2YTJzc0pTUnlvV1h1SlZybDVqTG44dCtyU2ZyemtHa2oyd1RaNTF4WS9HWFVsNzdNL0M0S3pDVXFOUVQ0WUpFVgpkVDFCL3lNZkdjaHM2NEpUQktia1RDSk5qWXk2emx0ejdHUlVVRzNSbkZYN2FjTTJ3NHk4UElXbWF3b21EZUNUbUdDdWZzWWtsNHBoClg1R09acElKaHpiTmk1c3RQdlpSMUZEVVdTaTlnL0xNS0h0VGhtM1lKb2h3MStxUnpUNjV5c0NRYmxyR1huUmwxMXorbytJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpELVRSVVNUIFJvb3QgQ2xhc3MgMyBDQSAyIEVWIDIwMDkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlFUXpDQ0F5dWdBd0lCQWdJRENZUDBNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1GQXhDekFKQmdOVkJBWVRBa1JGTVJVd0V3WURWUVFLCkRBeEVMVlJ5ZFhOMElFZHRZa2d4S2pBb0JnTlZCQU1NSVVRdFZGSlZVMVFnVW05dmRDQkRiR0Z6Y3lBeklFTkJJRElnUlZZZ01qQXcKT1RBZUZ3MHdPVEV4TURVd09EVXdORFphRncweU9URXhNRFV3T0RVd05EWmFNRkF4Q3pBSkJnTlZCQVlUQWtSRk1SVXdFd1lEVlFRSwpEQXhFTFZSeWRYTjBJRWR0WWtneEtqQW9CZ05WQkFNTUlVUXRWRkpWVTFRZ1VtOXZkQ0JEYkdGemN5QXpJRU5CSURJZ1JWWWdNakF3Ck9UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUpueGhEUnd1aSszTUtDT3ZYd0V6NzVpdkpuOWdwZlMKZWdwbmxqZ0o5aEJPbFNKem1ZM2FGUzNuQmZ3WmN5SzNqcGdBdkR3OXJLRnMrOVo1SlV1dDhNeGsyb2crS2JnUENkTTAzVFAxWXRIaAp6Um5wN2hoUFRGaXU0aDdXREZzVld0ZzZ1TVFZWkI3ak03SzFpWGRPREwvWmxHc1RsMjhTby82WnFRVE1GZXhnYURidENIdTM5YitUCjdXWXhnNHpHY1RTSFRoZnFyNHVSalJ4V1FhNGlOMTQzOGgzWjBTME5MMmxScDc1bXBvbzZLcjNIR3JIaEZQQytPaDI1ejF1eGF2NjAKc1VZZ292c2VPM0R2azVoOWpIT1c4c1h2aFhDdEtTYjhIZ1ErSEtEWUQ4dFNnMko4N290VGxaQ3BWNkxxWVFYWStVM0VKL3B1cmUzNQoxMUgzYTZVQ0F3RUFBYU9DQVNRd2dnRWdNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGTk9VaWt4aUV5b1pMc3l2CmNvcDlOdGVhSE54bk1BNEdBMVVkRHdFQi93UUVBd0lCQmpDQjNRWURWUjBmQklIVk1JSFNNSUdIb0lHRW9JR0JobjlzWkdGd09pOHYKWkdseVpXTjBiM0o1TG1RdGRISjFjM1F1Ym1WMEwwTk9QVVF0VkZKVlUxUWxNakJTYjI5MEpUSXdRMnhoYzNNbE1qQXpKVEl3UTBFbApNakF5SlRJd1JWWWxNakF5TURBNUxFODlSQzFVY25WemRDVXlNRWR0WWtnc1F6MUVSVDlqWlhKMGFXWnBZMkYwWlhKbGRtOWpZWFJwCmIyNXNhWE4wTUVhZ1JLQkNoa0JvZEhSd09pOHZkM2QzTG1RdGRISjFjM1F1Ym1WMEwyTnliQzlrTFhSeWRYTjBYM0p2YjNSZlkyeGgKYzNOZk0xOWpZVjh5WDJWMlh6SXdNRGt1WTNKc01BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQTA3WHRhUEtTVWlPOGFFWFVITDdQKwpQUG9lVVNicmgvWXAzdUR4MU1Za0NlbkJ6MVVidEREWnpocitCbEdtRmFRdDc3Skx2eUFvSlVuUnBqWjNOT2hrMzFLeEVjZHplczA1Cm5zS3RqSEVoOGxwcnI5ODhUbFd2c29SbEZJbTVkOHNxTWI3UG8yM1BiMGlVTWtadjUzR01vS2FFR1RjSDhnTkZDU3VHZFh6ZlgybFgKQU50dTJLWnlJa3RRMUhXWVZ0KzNHUDlEUTFDdWVrUjc4SGxSMTBNOXA5T0IwL0RKVDduYXhwZUcwSUxENUVKdC9yRGlaRTRPSnVkQQpOQ2ExQ0luWENHTmpPQ2QxSGpQcWJxamRuNWxQZEUyQmlZQkwzWnFYS1Z3dnZvRkJ1WXovNm4xZ0JwN04xejNUTHFNVnZLam1KdVZ2Cnc5eTRBeUhxbnhieExGUzEKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQ0EgRGlzaWcgUm9vdCBSMgo9PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGYVRDQ0ExR2dBd0lCQWdJSkFKSzRpTnV3aXNGak1BMEdDU3FHU0liM0RRRUJDd1VBTUZJeEN6QUpCZ05WQkFZVEFsTkxNUk13CkVRWURWUVFIRXdwQ2NtRjBhWE5zWVhaaE1STXdFUVlEVlFRS0V3cEVhWE5wWnlCaExuTXVNUmt3RndZRFZRUURFeEJEUVNCRWFYTnAKWnlCU2IyOTBJRkl5TUI0WERURXlNRGN4T1RBNU1UVXpNRm9YRFRReU1EY3hPVEE1TVRVek1Gb3dVakVMTUFrR0ExVUVCaE1DVTBzeApFekFSQmdOVkJBY1RDa0p5WVhScGMyeGhkbUV4RXpBUkJnTlZCQW9UQ2tScGMybG5JR0V1Y3k0eEdUQVhCZ05WQkFNVEVFTkJJRVJwCmMybG5JRkp2YjNRZ1VqSXdnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDRHdBd2dnSUtBb0lDQVFDaW84UUFDZGFGWFMxdEZQYkMKdzNPZU5jSnhWWDZCKzZ0R1VPREJmRWw0NXF0NVdEemEvM3djbjlpWEFuZythMEVFNlVHOXZnTXNSZll2Wk5TclhhTkhQV1NiNldpYQp4c3diUDdxK3NvczBBaTZZVlJuOGpHK3FYOXBNemswRElhUFkwalNUVnBiTFRBd0FGanhmR3MzSXgyeW1yZE14cDd6bzVlRm0xdEw3CkE3UkJaY2tRcmc0Rlk4YUFhbWt3L2RMdWtPOE5KOStmbFhQMDRTWGFiQmJlUVRnMDZvdjgwZWdFRkdFdFFYNnN4M2RPeTFGVSsxNlMKR0JzRVdtakd5Y1Q2dHhPZ21MY1JLN2ZXVjh4OG5oZlJ5eVgraGs0a0xsWU1lRTJlQVJLbUs2Y0JaVzU4WWgyRWhOL3F3R3UxcFNxVgpnOE5URVF4ekhRdXlScERSUWpyT1FHNlZyZi9HbEsxdWw0U09mVytlaW9BTlNXMXo0bnVTSHNQendmUHJMZ1Z2MlJ2UE4zWUV5TFJhCjVCZW55OTEySDlBWmR1Z3NCYlBXbkRUWWx0eGhoNUVGNUVRSU04SGF1UWhsMUs2eU5nM3J1amk2RE9XYm51dU5adDJaejlhSlFmWUUKa29vcEtXMXJPaHpuZFgwQ2NRN3p3T2U5eXhuZG5XQ3l3bVpndHJFRTdzbm1ocm1hWmtDbzV4SHRnVVVEaS9abldlakJCaEc5M2MrQQpBazlsUUhoY1IxREltK1lmZ1h2a1JLaGJoWnJpM2xyVngvazZSR1pMNURKVWZPUnNuTE1PUFJlaXNqUVMxbjZ5cUVtNzBYb29RTDZpCkZoL2Y1RGNmRVhQN2tBcGxRNklOZlBnR0FWVXpmYkFOdVBUMXJxVkNWM3cyRVl4N1hzUURuWXg1blFJREFRQUJvMEl3UURBUEJnTlYKSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCQmpBZEJnTlZIUTRFRmdRVXRabjRyN0NVOWVNZzFncXR6azVXcEM1dQpRdTB3RFFZSktvWklodmNOQVFFTEJRQURnZ0lCQUNZR1huRG5aVFBJZ203Wm5CYzZHM3Btc2dIMmVEdHBYaS9xLzA3NUtNT1lLbUZNCnRDUVNpbjF0RVJUM25MWEs1cnllSjQ1TUdjaXB2WHJBMXpZT2JZVnlicWpHb20zMituTmpmN3h1ZVFnY25ZcWZHb3BUcHRpNzJUVlYKc1JIRnFRT3pWanU1aEpNaVhuN0I5aEpTaStvc1o3eitOa3oxdU0vUnMwbVNPOU1wRHBrYmx2ZGh1RHZFSzdaNGJMUWpiL0Q5MDdKZQpkUitabGFpczl0cmh4VEY3KzlGR3M5SzhaN1JpVkxvSjkyT3drNkthK2VsU0xvdGdFcXY4OVdCVzd4QmNpOFFhUXR5RFcyUU95N1c4CjFrL0JmRHh1alJOdCszdnJNTkRjVGEvRjFiYWxURnR4eWVneHZ1ZzRCa2loR3VMcTB0NFNPVmdhLzRBT2duWG10OGtIYkE3di96angKbUhIRXQzOE9GZEFsYWIwaW5TdnRCZlpHUjZ6dHdQRFVPK0xzN3BaYmtCTk9IbFk2NjdEdmxydVdJeEc2OGtPR2RHU1Z5Q2gxM3gwMQp1dEkzZ3poVE9EWTd6MnpwK1dzTzBQc0U2RTkzMTJVQmVJWU1lajRoWXZGL1kzRU15WjlFMjZnbm9uVytib0UrMThEckc1Z1BjRncwCnNvck13SVVZNjI1NnMvZGFvUWUvcVVLUzgyQWlsK1FVb1FlYlRuYkFqbjM5cENYSFIrMy9IM09zek1PbDZXOEtqcHRsd2xDRnRhT2cKVXhMTVZZZGg4NEd1RUVaaHZVUWh1TUk5ZE05K0pEWDZIQWNPbXowaXl1OHhMNHlzRXIzdlFDajhLV2Vmc2hOUFppVEVVeG5wSGlrVgo3K1p0c0g4dFovM3piQnQxUnFQbFNoZnBwTmNMCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkFDQ1ZSQUlaMQo9PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgwekNDQmJ1Z0F3SUJBZ0lJWHNPM3BrTi9wT0F3RFFZSktvWklodmNOQVFFRkJRQXdRakVTTUJBR0ExVUVBd3dKUVVORFZsSkIKU1ZveE1SQXdEZ1lEVlFRTERBZFFTMGxCUTBOV01RMHdDd1lEVlFRS0RBUkJRME5XTVFzd0NRWURWUVFHRXdKRlV6QWVGdzB4TVRBMQpNRFV3T1RNM016ZGFGdzB6TURFeU16RXdPVE0zTXpkYU1FSXhFakFRQmdOVkJBTU1DVUZEUTFaU1FVbGFNVEVRTUE0R0ExVUVDd3dIClVFdEpRVU5EVmpFTk1Bc0dBMVVFQ2d3RVFVTkRWakVMTUFrR0ExVUVCaE1DUlZNd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUMKRHdBd2dnSUtBb0lDQVFDYnFhdS9ZVXFYcnkrWFpwcDBYOURabHYzUDR1Um03eDhmUnpQQ1JLUGZtdDRmdFZUZEZYeHBOUkZ2dThnTQpqbW9ZSHRpUDJSYThFRWcyWFBCanM1QmFYQ1EzMTZQV3l3bHh1ZkVCY29Td2ZkdE5nTTM4MDIvSitOcTJEb0xTUllXb0cyaW9QZWowClJHeTlvY0xMQTc2TVBoTUFoTjlLU01Eaklncm82VGVuR0V5eENRMGpWbjhFVGRrWGhCaWx5TnBBbEhQcnpnNVhQQU9CT3AwS29WZEQKYWF4WGJYbVFlT1cxdER2WXZFeU5LS0dubzZlNkFrNGwwU3F1N2E0RElyaHJJQTh3S0ZTVmYrRHV6Z3BtbmRGQUxXNGlyNTBhd1FVWgowbS9BOHAvNGU3TUNRdnRRcVIwdGt3OGpxOGJCRDVMLzBLSVY5Vk1KY1J6L1JST0U1aVplK09DSUhBcjhGcmFvY3dhNDhHT0VBcURHCld1em5kTjl3cnFPREplcld4NWVIazZmR2lvb3psMkEzRUQ2WFBtNHBGZGFoRDlHSUxCS2ZiNnFreGtMclFhTGpsVVBUQVlWdGpyczcKOHlNMngvNDc0S0VsQjBpcnlZbDAvd2lQZ0wvQWxtWHo3dXhMYUwyZGlNTXhzMER4Nk0vMk9MdWM1TkYvMU9WWW0zejYxUE1PbTNXUgo1THBTTGhsKzBmWE5XaG44dWdiMisxS29TNWtFM2ZqNXRJdFFvMDVpaWZDSEpQcURRc0dIK3RVdEtTcGFjWHBrYXRjbllHTU4yODVKCjlZMGZrSWt5Ri9oelE3alNXcE9HWWRiaGRRcnFlV1oyaUU5eDZ3UWwxZ3BhZXBQbHVVc1hRQSt4dHJuMTNrL2M0TE9zT3hGd1lJUksKUTI2WklNQXBjUXJBWlFJREFRQUJvNElDeXpDQ0FzY3dmUVlJS3dZQkJRVUhBUUVFY1RCdk1Fd0dDQ3NHQVFVRkJ6QUNoa0JvZEhSdwpPaTh2ZDNkM0xtRmpZM1l1WlhNdlptbHNaV0ZrYldsdUwwRnlZMmhwZG05ekwyTmxjblJwWm1sallXUnZjeTl5WVdsNllXTmpkakV1ClkzSjBNQjhHQ0NzR0FRVUZCekFCaGhOb2RIUndPaTh2YjJOemNDNWhZMk4yTG1Wek1CMEdBMVVkRGdRV0JCVFNoN1RqM3pjbmsxWDIKVnVxQjVUYk1qQjQvdlRBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUI4R0ExVWRJd1FZTUJhQUZOS0h0T1BmTnllVFZmWlc2b0hsTnN5TQpIais5TUlJQmN3WURWUjBnQklJQmFqQ0NBV1l3Z2dGaUJnUlZIU0FBTUlJQldEQ0NBU0lHQ0NzR0FRVUZCd0lDTUlJQkZCNkNBUkFBClFRQjFBSFFBYndCeUFHa0FaQUJoQUdRQUlBQmtBR1VBSUFCREFHVUFjZ0IwQUdrQVpnQnBBR01BWVFCakFHa0E4d0J1QUNBQVVnQmgKQU8wQWVnQWdBR1FBWlFBZ0FHd0FZUUFnQUVFQVF3QkRBRllBSUFBb0FFRUFad0JsQUc0QVl3QnBBR0VBSUFCa0FHVUFJQUJVQUdVQQpZd0J1QUc4QWJBQnZBR2NBN1FCaEFDQUFlUUFnQUVNQVpRQnlBSFFBYVFCbUFHa0FZd0JoQUdNQWFRRHpBRzRBSUFCRkFHd0FaUUJqCkFIUUFjZ0R6QUc0QWFRQmpBR0VBTEFBZ0FFTUFTUUJHQUNBQVVRQTBBRFlBTUFBeEFERUFOUUEyQUVVQUtRQXVBQ0FBUXdCUUFGTUEKSUFCbEFHNEFJQUJvQUhRQWRBQndBRG9BTHdBdkFIY0Fkd0IzQUM0QVlRQmpBR01BZGdBdUFHVUFjekF3QmdnckJnRUZCUWNDQVJZawphSFIwY0RvdkwzZDNkeTVoWTJOMkxtVnpMMnhsWjJsemJHRmphVzl1WDJNdWFIUnRNRlVHQTFVZEh3Uk9NRXd3U3FCSW9FYUdSR2gwCmRIQTZMeTkzZDNjdVlXTmpkaTVsY3k5bWFXeGxZV1J0YVc0dlFYSmphR2wyYjNNdlkyVnlkR2xtYVdOaFpHOXpMM0poYVhwaFkyTjIKTVY5a1pYSXVZM0pzTUE0R0ExVWREd0VCL3dRRUF3SUJCakFYQmdOVkhSRUVFREFPZ1F4aFkyTjJRR0ZqWTNZdVpYTXdEUVlKS29aSQpodmNOQVFFRkJRQURnZ0lCQUpjeEFwL24vVU5uU0VRVTVDbUg3VXdvWnRDUE5kcE5ZYmRLbDAyMTI1RGdCUzRPeG5uUThwZHBENzBFClI5bSsyN1VwMnB2WnJxbVoxZE04TUpQMWphR28vQWFOUlBUS0ZwVjhNOXhpaTZnMytDZllDUzBiNzhnVUp5Q3BaRVQvTHRaMXFteE4KWUVBWlNVTlVZOXJpekxwbTVVOUVlbHZaYW9FclFOVi8rUUVuV0N6STdVaVJmRCttQU0vRUtYTVJOdDZHR1Q2ZDdobUtHOVd3N1k0OQpuQ3JBRGRnOVp1TThEYjNWbEZ6aTRxYzFHd1FBOWo5YWplcER2VitKSGFuQnNNeVo0azBBQ3RySkoxdm5FNUJjNVBVem9sVnQzT0FKClRTK3hKbHNuZFFBSnhHSjNLUWhmbmxtc3RuNnRuMVF3SWdQQkhuRmsvdms0Q3BZWTNRSVVyQ1BMQmh3ZXBIMk5EZDRuUWVpdDJoVzMKc0NQZEs2alQyaVdIN2VoVlJFMkk5RForaEpwNHJQY09Wa2tPMWpNbDFvUlFRbXdnRWgwcTFiNjg4bkNCcEhCZ3ZnVzFtNTRFUkw1aApJNnpwcFNTTUVZQ1VXcUtpdVVuU3dkelJwKzB4RVN5ZUdhYnU0Vlhod09yUERZVGtGN2VpZktYZVZTVUc3c3pBaDF4QTJzeVZQMVhnCk5jZTRoTDYwWGMxNmd3Rnk3b2ZtWHgydXRZWEdKdC9td1pycEhnSkhueXFvYmFsYnoreEZkMytZSjVveVhTcmpoTzdGbUdZdmxpQWQKM2RqREo5ZXcrZjdaZmMzUW40OExGRmhSbnkrTHd6Z3QzdWlQMW8ySHBQVldReGFaTFBTa1ZyUTB1R0UzeWNKWWdCdWdsNkg4V1kzcApFZmJSRDB0Vk5FWXFpNFk3Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClRXQ0EgR2xvYmFsIFJvb3QgQ0EKPT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRlFUQ0NBeW1nQXdJQkFnSUNETDR3RFFZSktvWklodmNOQVFFTEJRQXdVVEVMTUFrR0ExVUVCaE1DVkZjeEVqQVFCZ05WQkFvVApDVlJCU1ZkQlRpMURRVEVRTUE0R0ExVUVDeE1IVW05dmRDQkRRVEVjTUJvR0ExVUVBeE1UVkZkRFFTQkhiRzlpWVd3Z1VtOXZkQ0JEClFUQWVGdzB4TWpBMk1qY3dOakk0TXpOYUZ3MHpNREV5TXpFeE5UVTVOVGxhTUZFeEN6QUpCZ05WQkFZVEFsUlhNUkl3RUFZRFZRUUsKRXdsVVFVbFhRVTR0UTBFeEVEQU9CZ05WQkFzVEIxSnZiM1FnUTBFeEhEQWFCZ05WQkFNVEUxUlhRMEVnUjJ4dlltRnNJRkp2YjNRZwpRMEV3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQ3dCZHZJNjR6RWJvb2g3NDVObkhFS0gxSnc3VzJDCm5KZkYxMHhPUlVuTFFFSzFFalJzR2NKMHBERmZoUUtYN0VNekNsUFNuSXlPdDdoNTJ5dlZhdktPWnNUdUt3RUhrdFN6MEFMZlVQWlYKcjJZT3krQkhZQzhyTWprMVVqb29nL2g3RnNZWXVHTFdSeVdSenZBWkVrMnRZL1hUUDNWZktmQ2hNQndxb0ppbUZiM3UvUmsyOE9LUgpRNC82eXRZUUowbE03OTNCOFlWd204cnFxRnBEL0cyR2IzUHBOMFdwOERiSHpJaDFIcnRzQnYrYmF6NFg3R0dxY1h6R0hhTDNTZWtWCnRUeldvV0gxRWZjRmJ4MzlFYjdRTUFmQ0tiQUpUaWJjNDZLb2tXb2Z3cEZGaUZ6bG1MaHhwUlVaeVh4MUVjeHdkRTh0bXgyUlJQMVcKS0tEK3U0WnF5UHBjQzFqY3hrdDJ5S3NpMlhNUHBmUmFBb2svVDU0aWd1NmlkRk1xUFZNbmFSMXNqaklzWkFBbVkyRTJUcU5HdHo5OQpzeTJzYlpDaWxhTE96OXFDNXdjMEdaYnB1Q0dxS1g2bU9MNk9LVW9oWm5rZnM4TzFDV2ZlMXRRSFJ2TXEydVlpTjJETGdiWVBvQS9wCnlKVi92MVdSQlhyUFBSWEFiOTRKbEFHRDF6UWJ6RUNsOExpYlo5V1lrVHVuaEhpVkpxUmFDUGdyZExRQUJEemZ1QlNPNk4rcGpXeG4Ka2pNZHdMZlM3SkxJdmdtL0xDa0Zid0pybnUrOHZ5cThXOEJRajBGd2NZZXlUYmNFcVlTak1xK3U3bXNYaTdLeC9temhrSXlJcUpkSQp6c2hOeS9NR3oxOXFDa0t4SGg1M0w0Nmc1cElPQnZ3Rkl0SW00VEZSZlRMY0R3SURBUUFCb3lNd0lUQU9CZ05WSFE4QkFmOEVCQU1DCkFRWXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFYelNCZHUrV0hkWGx0ZGtDWTRRV3dhNmcKY0ZHbjkweEhOY2dMMXlnOWlYSFpxak5CNmhRYmJDRUF3R3hDR1g2ZmFWc2dRdCtpMHRyRWZKZExqYkRvck1qdXBXa0VtUXFTcHFzbgpMaHBOZ2IrRTFIQWVyVWYrL1VxZE0rRHl1Y1JGQ0NFSzJtbHBjM0lOdmpUK2xJdXR3eDQxMTZLRDcrVTR4NldGSDZ2UE5Pdy9LUDRNCjhWZUdUc2xWOXh6VTJLVjlCbnB2MWQ4UTM0Rk9JV1d4dHVFWGVaVkZCczVmek54R2lXTm9SSTJUOUdSd29EMmRLQVhET1hDNFluc2cKL2VUYjZRaWh1SjQ5Q2NkUCt5ejRrM1pCM2xMZzRWZlNuUU84ZDU3K25pbGU5OEZSWUIvZTJndXlMWFczUTBpVDUvWjV4b1JkZ0ZsZwpsUHg0bUk4OGsxSHRRSkFIMzJSakpNdE9jUVdoMTVRYWlETHhJblFpcnFXbTJCSnBUR0NqQXU0cjdOUmprZ3Rldmk5MmE2TzJKcnlQCkE5Z0s4a3hrUnIwNVl1V1c2elJqRVNqTWxmR3Q3Ky9jZ0ZoSTZVdTQ2bVdzNmZ5QXRiWElSZm1zd1ovWnVlcGlpSTdFOFV1REVxM20KaTRUV25zTHJneGlmYXJzYkpHQXpjTXpzOXpMelhObDVmZStlcFA3Skk4TWs3aFdTc1QyUlR5YUd2V1p6SkJQcXBLNWp3YTE5aEFNOApFSGlHRzNuanhQUHlCSlVncmlPQ3hMTTZBR0svNWpZazRWZTZ4eDZRZGRWZlA1VmhLOEU3emVXemFHSFFSaWFwSVZKcExlc3V4K3QzCnpxWTZ0UU16VDNiUjUxeFVBVjNMZVBUSkRML1BFbzRYTFNOb2xPZXIvcW15S3diUUJNMD0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKVGVsaWFTb25lcmEgUm9vdCBDQSB2MQo9PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGT0RDQ0F5Q2dBd0lCQWdJUkFKVytGcUQzTGtieGV6bUNjdnFMelpZd0RRWUpLb1pJaHZjTkFRRUZCUUF3TnpFVU1CSUdBMVVFCkNnd0xWR1ZzYVdGVGIyNWxjbUV4SHpBZEJnTlZCQU1NRmxSbGJHbGhVMjl1WlhKaElGSnZiM1FnUTBFZ2RqRXdIaGNOTURjeE1ERTQKTVRJd01EVXdXaGNOTXpJeE1ERTRNVEl3TURVd1dqQTNNUlF3RWdZRFZRUUtEQXRVWld4cFlWTnZibVZ5WVRFZk1CMEdBMVVFQXd3VwpWR1ZzYVdGVGIyNWxjbUVnVW05dmRDQkRRU0IyTVRDQ0FpSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnSVBBRENDQWdvQ2dnSUJBTUsrCjZ5ZndJYVB6YVNaVmZwM0ZWUmFSWFAzdkliOVRnSG90MHBHTVl6SHc3Q1R3dzZYU2Nud1FiZlEzdCtYbWZIbnFqTFdDaTY1SXRxd0EKM0dWMTdDcE5YOEdIOVNCbEs0R29SejZKSTVVd0ZwQi82RmNIU09jWnJyOUZaN0UzR3dZcS90NzVySDJEKzE2NjVJK1haNzVMam8xawpCMWM0VldrME5qMFRTTzlQNHRObUhxVFBHcmRlTmpQVXRBYTlHQUg5ZDRSUUFFWDFqRjNvSTd4Ky9qWGg3VkI3cVRDTkdkTUpqbWhuClhiODhseGhUdXlsaXhjcGVjc0hIbHRUYkxhQzBIMmtEN09yaVVQRU1QUENzODFNdDhCejE3V3c1T1hPQUZzaFNzQ1BONEQ3YzNUeEgKb0xzMWl1S1lhSXUrNWI5eTd0TDZwZTBTN2Z5WUdLa21kdHdvU3hBZ0hOTi9GbmN0N1crQTkwbTdVd1c3WFdqSDFNaDFGaitKV292MwpGMGZVVFBIU2lYaytUVDJZcUdIZU9oN1MrRjRENE1ISkhJelRqVTNUbFRhek4xOWpZNXN6RlBBdEptdFRmSW1NTXNKdTdEMGhBRG5KCm9XamlVSU11c0Rvcjh6YWdyQy9rYjJIQ1VRazVQb3RUdWJ0bjJ0eFR1WFpaTnAxRDVTRGdQVEpnaFNKUnQ4Y3p1OTBWTDZSNHBnZDcKZ1VZMkJJYmRlVFhIbFN3N3NLTVhOZVZ6SDdSY1dlL2E2aEJsZTNyUWY1K3p0Q28zTzNDTG0xdTVLN2Zzc2xFU2wxTXBXdFR3RWhEYwpUd0s3RXBJdll0US9hVU44RGRiOFdIVUJpSjFZRmt2ZXVwRC9Sd0dKQm1yMlg3S1Fhck1DcGdLSXY3TkhmaXJaMWZwb2VEVk5BZ01CCkFBR2pQekE5TUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3Q3dZRFZSMFBCQVFEQWdFR01CMEdBMVVkRGdRV0JCVHdqMWs0QUxQMWo1cVcKRE5YcitudXFGK2dURWpBTkJna3Foa2lHOXcwQkFRVUZBQU9DQWdFQXZ1UmNZazRrOUF3SS8vRFRER2prazBraVAwUW5iN3R0M29ObQp6cWpNRGZ6MW1nYmxkeFNSNjUxQmU1a3FoT1gvL0NIQlhmRGtIMWUzZGFtaFh3SW0vOWZIOTA3ZVQvajNIRWJBZWs5QUxDSTE4Qm14CjBHdG5MTENvNE1CQU56WDJoRnhjNDY5Q2VQNm55UTFRNmcyRWR2WlI3NE5UeG5yL0RsWkpMbzk2MWd6bUoxVGpUUXBnY21MTmtRZlcKcGIvSW1XdnR4Qm5tcTB3Uk9NVnZNZUp1U2NnL2RvQW1BeVlwNERiMjlpQlQ0eGR3TkJlZFkyZ2VhK3pEVFlhNEV6QXZYVVlOUjBQVgpHNnBaRHJsY2pRWklyWFNIWDhmOE1WUkJFK0xISVE2ZTRCNE40Y0I3UTRXUXhZcFl4bVVLZUZmeXhpTVBBZGtnUzk0UCs1S0ZkU3BjCmM0MXRleVdSeXU1RnJnWkxBTXpUc1ZsUTJqcUlPeWxEUmw2WEsxVE9VMitOU3VlVytyOXhEa0tMZlAwb29OQkl5dHJFZ1V5N29uT1QKSnNqckROWW1pTGJBSk0rN3ZWdnJkWDNwQ0k2R015eDVkd2xwcFluOHMzQ1FoM2FQMHlLN1FzNjljd3NnSmlyUW16MXdIaVJzellkMgpxUmVXdDg4Tmt2dU9HS21ZU2RHZS9tQkVjaUc1R2UzQzlUSHhPVWlJa0NSMVZCYXR6dlQ0YVJSa09mdWp1THB3UU1jbkhML0VWbFA2ClkyWFE4eHdPRnZWcmhsaE5HTlRrRFk2bG5WdVIzSFlrVUQvR0t2dlp0NXkxMXViUTJlZ1ppeFZ4U0syMzZ0aFppTlNRdnhhejJlbXMKV1dGVXlCeTZ5c0hLNGJrZ1RJODZrNG1sb015LzAvWjFwSFdXYlZZPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpULVRlbGVTZWMgR2xvYmFsUm9vdCBDbGFzcyAyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR3ekNDQXF1Z0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRc0ZBRENCZ2pFTE1Ba0dBMVVFQmhNQ1JFVXhLekFwQmdOVkJBb00KSWxRdFUzbHpkR1Z0Y3lCRmJuUmxjbkJ5YVhObElGTmxjblpwWTJWeklFZHRZa2d4SHpBZEJnTlZCQXNNRmxRdFUzbHpkR1Z0Y3lCVQpjblZ6ZENCRFpXNTBaWEl4SlRBakJnTlZCQU1NSEZRdFZHVnNaVk5sWXlCSGJHOWlZV3hTYjI5MElFTnNZWE56SURJd0hoY05NRGd4Ck1EQXhNVEEwTURFMFdoY05Nek14TURBeE1qTTFPVFU1V2pDQmdqRUxNQWtHQTFVRUJoTUNSRVV4S3pBcEJnTlZCQW9NSWxRdFUzbHoKZEdWdGN5QkZiblJsY25CeWFYTmxJRk5sY25acFkyVnpJRWR0WWtneEh6QWRCZ05WQkFzTUZsUXRVM2x6ZEdWdGN5QlVjblZ6ZENCRApaVzUwWlhJeEpUQWpCZ05WQkFNTUhGUXRWR1ZzWlZObFl5QkhiRzlpWVd4U2IyOTBJRU5zWVhOeklESXdnZ0VpTUEwR0NTcUdTSWIzCkRRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ3FYOW9iWCtoemtlWGFYUFNpNWtmbDgyaFZZQVVkQXFTem0xbnpIb3F2TkszOERjTFoKU0JudWFZL0pJUHdocWdjWjdiQmNyR1hIWCswQ2ZIdDhMUnZXdXJtQXdoaUNGb1Q2WnJBSXhsUWpnZVROdVVrLzlrOXVOMGdvT0EvRgp2dWRvY1AwNWwwM1N4NWlSVUtyRVJMTWpmVGxINlZKaTFoS1RYcmN4bGtJRiszYW5IcVAxd3Z6cGVzVnNxWEZQNnN0NHZHQ3Z4OTcwCjJjdStmak9sYnBTRDhEVDZJYXZxam5LZ1A2VGVNRnZ2aGsxcWxWdERSS2dRRlJ6bEFWZkZtUEhtQmlpUnFpREZ0MU1tVVVPeUN4R1YKV09IQUQzYlp3STE4Z2ZOeWNKNXYvaHFPMlY4MXhySnZOSHkrU0UvaVdqblgySjE0bnArR1BnTmVHWXRFb3RYSEFnTUJBQUdqUWpCQQpNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01CMEdBMVVkRGdRV0JCUy9XU0EyQUhtZ29DSnJqTlh5CllkSzRMTXVDU2pBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQU1RT2lZUXNmZE9oeU5zWnQrVTJlK2lLbzRZRld6ODI3bitxcmtSazQKcjZwOEZVM3p0cU9OcGZTTzlrU3BwK2dobGEwK0FHSVdpUEFDdXZ4aEkrWXptekI2YXpaaWU2MEVJNFJZWmVMYks0cm5KVk0zWWxOZgp2Tm9CWWltaXBpZHg1am9pZnNGdkhaVndJRW9ITk4vcS94V0E1YnJYZXRoYmRYd0ZlaWxIZmtDb01STjN6VUE3dEZGSGVpNFI0MGNSCjNwMW0wSXZWVkdiNmcxWHFmTUlwaVJ2cGI3UE80Z1dFeVM4K2VJVmlic2xmd1hoamRGakFTQmdNbVRucnBNd2F0WGxhalJXYzJCUU4KOW5vSFY4Y2lnd1V0UEpzbEpqMFlzNmxEZk1qSXEyU1BEcU8vbkJ1ZE1OdmEwQmt1cWp6eCt6T0FkdVROclJsUEJTZU9FNkZ1d2c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpBdG9zIFRydXN0ZWRSb290IDIwMTEKPT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlEZHpDQ0FsK2dBd0lCQWdJSVhEUExZaXhmc3pJd0RRWUpLb1pJaHZjTkFRRUxCUUF3UERFZU1Cd0dBMVVFQXd3VlFYUnZjeUJVCmNuVnpkR1ZrVW05dmRDQXlNREV4TVEwd0N3WURWUVFLREFSQmRHOXpNUXN3Q1FZRFZRUUdFd0pFUlRBZUZ3MHhNVEEzTURjeE5EVTQKTXpCYUZ3MHpNREV5TXpFeU16VTVOVGxhTUR3eEhqQWNCZ05WQkFNTUZVRjBiM01nVkhKMWMzUmxaRkp2YjNRZ01qQXhNVEVOTUFzRwpBMVVFQ2d3RVFYUnZjekVMTUFrR0ExVUVCaE1DUkVVd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUNWCmhUdVhieW83TGp2UHB2TXBOYjdQR0t3K3F0bjRUYUErR2tlNXZKcmY4djdNUGtmb2VwYkNKSTQxOUtrTS9JTDliY0Z5WWllOTZtdnIKNTRyTVZENlFVTStBMUpYNzZMV0MxQlRGdHFsVkpWZmJzVkQyc0dCa1dYcHB6d08zYncyK3lqNXZkSExxcWpBcWMySytTWkZoeUJIKwpEZ01xOTJvZzNBSVZEVjRWYXZ6amdzRzF4WjFrQ1d5aldaZ0hKOGNibGl0aGRIRnNRL0gzTllrUTRKN3NWYUUzSXFLSEJBVXNSMzIwCkhMbGlLV1lveXJmaGsvV2tsQU9adVhDRnRlWkk2bzFRL05uZXpHOEhEdDBMY3AyQU1CWUhsVDhvRHYzRmRVOVQxblNhdENRdWpnS1IKejNiRm14NVZkSng0SWJId0xmRUxuOExWbGhnZjhGUWllb3dIQWdNQkFBR2pmVEI3TUIwR0ExVWREZ1FXQkJTbnBRYXhMS1lKWU83UgpsK2x3cnJ3N0dXemJJVEFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjhHQTFVZEl3UVlNQmFBRktlbEJyRXNwZ2xnN3RHWDZYQ3V2RHNaCmJOc2hNQmdHQTFVZElBUVJNQTh3RFFZTEt3WUJCQUd3TFFNRUFRRXdEZ1lEVlIwUEFRSC9CQVFEQWdHR01BMEdDU3FHU0liM0RRRUIKQ3dVQUE0SUJBUUFtZHpUYmxFaUdLa0dkTEQ0R2tHREVqS3dMVkxnZnVYdlRCem5rK2o1N3NqMU83WjhqdlpmemExenY3djFBcHQraAprNkVLaHF6dklOQjVBYjE0OXhuWUpERTBCQUdtdWhXYXd5ZmMyRThQekJoai81a1BEcEZyZFJiaElmellKc2RIdDZiUFdISnhmcnJoClRaVkhPOG12YmFHMHdleUo5clFQT0xYaVpOd2x6NmJiNjVwY21hSEZDTjc5NXRyVjFscEZETVMzd3JVVTc3UVIvdzRWdGZYMTI4YTkKNjFxbjhGWWlxVHhsVk1ZVnFMMkduczJEbG1oNmNZR0o0UXZoNmhFYmFBak1hWjdzbmtHZVJESW1ldUtIQ25FOTYrUmFwTkxieGMzRwozbUIvdWZOUFJKTHZLcmNZUHFjWjJRdDlzVGRCUXJDNllCM3kvZ2tSc1BDSGU2ZWQKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKUXVvVmFkaXMgUm9vdCBDQSAxIEczCj09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRllEQ0NBMGlnQXdJQkFnSVVlRmhmTHEwc0dVdmpOd2MxTkJNb3RaYlVaWk13RFFZSktvWklodmNOQVFFTEJRQXdTREVMTUFrRwpBMVVFQmhNQ1FrMHhHVEFYQmdOVkJBb1RFRkYxYjFaaFpHbHpJRXhwYldsMFpXUXhIakFjQmdOVkJBTVRGVkYxYjFaaFpHbHpJRkp2CmIzUWdRMEVnTVNCSE16QWVGdzB4TWpBeE1USXhOekkzTkRSYUZ3MDBNakF4TVRJeE56STNORFJhTUVneEN6QUpCZ05WQkFZVEFrSk4KTVJrd0Z3WURWUVFLRXhCUmRXOVdZV1JwY3lCTWFXMXBkR1ZrTVI0d0hBWURWUVFERXhWUmRXOVdZV1JwY3lCU2IyOTBJRU5CSURFZwpSek13Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQ2d2bEFRanVueWJFQzBCSnlGdVRISzNDM2tFYWtFClBCdFZ3ZWRZTUIwa3RNUHZoZDZNTE9IQlBkK0M1ayt0UjRkczdGdEp3VXJWdTQvc2g2eC9ncHFHN0QwRG1WSUIwaldlck5yd1U4bG0KUE5Tc0FnSGFKTk03cUFKR3I2UWM0L2h6V0hhMzlnNlFEYlh3ejh6NitjWk01Y09HTUFxTkYzNDE2OFhmdXc2Y3dJMkg0NGc0aFdmNgpQc2VyNEJPY0JSaVl6NVAxc1pLMC9DUFR6OVhFSjBuZ25qeWJDS09MWFNvaDRQdzVxbFBhZlg3UEdnbFR2RjBGQk0raFNvK0xkb0lOCm9malN4eFIzVzVBMkI0R2JQZ2I2VWw1anhhWUEvcVhwVWh0U3RaSTVjZ01KWXIyd1lCWnVwdDBsd2dObTNmTUUwVURpVG91RzlHL2wKZzZBbmhGNEV3ZldRdlRBOXhPK29hYnc0bTZTa2x0RmkybW5BQVphdXk4UlJOT29NcXY4aGpsbVBTbHprWVpxbjB1a3FlSTFSUFRvVgo3cUpaanFsYzNzWDVrQ0xsaUVWeDNaR1piSHFmUFQyWWZGNzJ2aFpvb0Y2dUN5UDhXZytxSW5ZdHlhRVFIZVRUUkNPUWlKL0dLdWJYCjlacXpXQjR2TUlrSUcxU2l0WmdqN0FoM0hKVmRZZEhMaVp4Zm9rcVJtdThocWtrV0NLaTlZU2d4eVhTdGhmYlp4YkdMMGVVUU1rMWYKaXlBNlBFa2ZNNFZaRGR2TENYVkRhWFA3YTNGOThOL0VUSDNHb3k3SWxYbkxjNktPVGswaysxN2tCTDV5RzZZbkxVbGFtWHJYWEFrZwp0MytVdVUveERSeGVpRUliRWJmbmtkdWViUFJxMzR3R21BT3R6Q2p2cFVmelV3SURBUUFCbzBJd1FEQVBCZ05WSFJNQkFmOEVCVEFECkFRSC9NQTRHQTFVZER3RUIvd1FFQXdJQkJqQWRCZ05WSFE0RUZnUVVvNWZXODE2aUVPR3JSWjg4RjJRODdnRnduTXd3RFFZSktvWkkKaHZjTkFRRUxCUUFEZ2dJQkFCajZXM1g4UG5ySFgzZkh5dC9QWDhNU3hFQmQxREtxdUdyWDFSVVZScGdqcGVhUVd4aVpUT090UXFPQwpNVGFJemVuN3hBU1dTSXNCeDQwQnoxc3pCcFpHWm5RZFQrM0J0cm0wRFdITVkzN1hMbmVNbGh3cUkyaHJoVmQyY0RNVC91RlBwaU4zCkdQb2FqT2k5WmNuUFAvVEpGOXpyeDd6QUJDNHRSaTlwWnNNYmovN3NQdFBLbEw5MkNpVU5xWHNDSEtuUU8xOEx3SUU2UFdUaHY2Y3QKVHIxTnhOZ3B4aUlZME1Xc2NnS0NQNm82b2pvaWx6SGRDR1BEZFJTNVlDZ3RXMmpnRnFsbWdpTlI5ZXRUMkRHYmUrbTNuVXZyaUJiUAorVjA0aWtrd2orM3g2eG4wZHhveEdFMW5WR3d2YjJYNTJ6M3NJZXhlOVBTTHltQmxWTkZ4WlBUNXBxT0JNell6Y2ZDa2VGOU9yWU1oCjNqUkpqZWhackozeWRsbzI4aFAwcitBSngyRXFiUGZnbmE2N2hrb29ieTd1dEhuTmtEUERzM2I2OWZCc25RR1ErcDZROXB4eXowZmEKd3gva05TQlQ4bFRSMzJHRHBnTGlKVGplaFRJdFhuT1FVbDFDeE00OVMrSDVHWVFkMWFKUXpFSDdRUlREdmRiSldxTmpaZ0tBdlFVNgpPMGVjN0FBbVRQV0lVYitvSTM4WUI3QUw3WXNtb1dUVFlVcnJYSi9lczY5bkE3TWYzVzFkYVdocHExNDY3SHhwdk1jN2hVNmVGYm0wCkZVL0RsWHBZMThsczZXeTU4eWxqWHJRczhDMDk3VnBsNEtsYlFNSkltWUZ0bmg4R0tqd1N0SXNQbTZJazhLYU4xbnJnUzdaa2xtT1YKaE1KS3pSd3VKSWN6WU9YRAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpRdW9WYWRpcyBSb290IENBIDIgRzMKPT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGWURDQ0EwaWdBd0lCQWdJVVJGYzBKRnVCaVpzMThzNjRLenRicHlid2RTZ3dEUVlKS29aSWh2Y05BUUVMQlFBd1NERUxNQWtHCkExVUVCaE1DUWsweEdUQVhCZ05WQkFvVEVGRjFiMVpoWkdseklFeHBiV2wwWldReEhqQWNCZ05WQkFNVEZWRjFiMVpoWkdseklGSnYKYjNRZ1EwRWdNaUJITXpBZUZ3MHhNakF4TVRJeE9EVTVNekphRncwME1qQXhNVEl4T0RVNU16SmFNRWd4Q3pBSkJnTlZCQVlUQWtKTgpNUmt3RndZRFZRUUtFeEJSZFc5V1lXUnBjeUJNYVcxcGRHVmtNUjR3SEFZRFZRUURFeFZSZFc5V1lXUnBjeUJTYjI5MElFTkJJRElnClJ6TXdnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDRHdBd2dnSUtBb0lDQVFDaHJpV3lBUmpjVjRnL1J1djVyK0xySTNIaW10RmgKWmlGZnFxOG5VZVZ1R3hiVUxYMVFzRk4zdlhnNllPSmtBcHQ4aHB2V0dvNnQveDhWZjlXVkhoTEw1aFNFQk1IZk5yTVduNHJqeWR1WQpOTTdZTXhjb1J2eW55ZkRTdE5WTkNYSkorZktINDZuYWZhRjlhN0k2SmFsdFVrU3MrTDV1Kzl5bWM1R1FZYVlERkNEeTU0ZWppSzJ0Cm9Jei9wZ3NsVWlYbkZnSFZ5N2cxZ1F5ak8vRGg0ZnhhWGM2QWNXMzRTYXMrTzdxNDE0QUIrNlhyVzdQRlhtQXFNYUN2TitnZ09wK28KTWl3TXpBa2QwNTZPWGJ4TW1PN0ZHbWg3N0ZPbTZSUTFvOS9OZ0o4TVNQc2M5UEcvU3JqNjFZeHhTc2NmcmY1Qm1yT0RYZktFVnUrbApWMFBPS2EyTXExVy94UHRiQWQwaklhRllBSTdEMEdvVDdSUGpFaXVBM0dmbWxiTE5IaUp1S3ZoQjFQTEtGQWVOaWxVU3htbjF1SVpvCkwxTmVzTktxSWNHWTVqRGpaMVhIbTI2c0dhaFZwa1VHMENNNjIrdGxYU29SRWZBN1Q4cHQ5RFRFY2VUL0FGcjJYSzRqWUlWejhlUVEKc1NXdTFaSzdFOEVNNERuYXREbFh0YXMxcW5JaE80TTE1ekhmZWlGdXVESUlmUjB5a1JWS1luTFA0M2Vodk5VUkczWUJad2pnUVF2RAo2eFZ1K0tRWjJhS3JyK0luVWxZckFvb3NGQ1Q1djBJQ3Z5Ykl4by9nYmpoOVV5M2w3Wml6bFdOb2YvazE5TitJeFdBMWtzQjhhUnhoCmxSYlE2OTRMcno0RUVFVmxXRkE0cjBqeVdiWVc4andOa0FMR2NDNEJyVHdWMXdJREFRQUJvMEl3UURBUEJnTlZIUk1CQWY4RUJUQUQKQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCQmpBZEJnTlZIUTRFRmdRVTdlZHZkbHEvWU94Slc4YWxkN3R5Rm5HYnhEMHdEUVlKS29aSQpodmNOQVFFTEJRQURnZ0lCQUpIZmdEOURDWDV4d3ZmcnM0aVA0Vkd5dkQxMStTaGR5THlabTN0ZHF1WEs0UXIzNkxMVG45MW5NWDY2CkFhckhha0U3a05RSVhMSmdhcER3eU00RFl2bUw3ZnR1S3R3R1RUd3BENGtXaWxoTVNBL29oR0hxUEhLbWQrUkNyb2lqUTFoNWZxN0sKcFZNTnFUMXd2U0FaWWFSc09QeERNdUhCUi8vNDdQRVJJaktXbk1MMlcybVdleUFNUTBHYVcvWlpHWWplVllnM1VRdDRYQW9lbzBMOQp4NTJJRDhEeWVBSWtWSk92aVllSXlVcUFIZXJRYmo1aExqYTdOUTRubHYxbU5EdGhjblB4Rmx4SEJsUkpBSHBZRXJBSzc0WDlzYmd6CmRXcVRIQkxtWUY1dkhYL0pIeVBMaEdHZkhvSkUrVit0WWxVa21sS1k3Vkhub1g2WE91WXZIeEhhVTRBc2haNnJOUkRiSWw5cXhWNlgKVS9JeUFna3dvMWp3RFFIVmNzYXhmR2w3dy9VMlJjeGhibDVNbE1WZXJ1Z09Yb3UvOTgzZzdhRU9HelB1VkJqK0Q3N3Zmb1JyUStOdwptTnRkZGJJTldRZUZGU001MXZIZnFTWVAxa2pIczZZaTlUTTNXcFZIbjN1NkdCVnYvOVlVWklOSjBncG5JZHNQTldOZ0tDTGpzWldECnpZV20zUzhQNTJkU2Jyc3ZoWHoxU25QbnhUN0F2U0VTQlQvOHR3TkpBbHZJSmViaVZEajFlWWVNSFZPeVRvVjdCampITFBqNHNIS04KSmVWM1V2UURIRWltVUYrSUlEQnU4b0pEcXoyWGhPZFQreUhCVHc4aW1vYTRXU3IyUnowWmlDM29oZUdlN0lVSWFyRnNOTWtkN0VncgpPM2p0WnNTT2VXbUQzbitNCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClF1b1ZhZGlzIFJvb3QgQ0EgMyBHMwo9PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZZRENDQTBpZ0F3SUJBZ0lVTHZXYkFpaW4yM3IvMWFPcDdyMERvTThTYWgwd0RRWUpLb1pJaHZjTkFRRUxCUUF3U0RFTE1Ba0cKQTFVRUJoTUNRazB4R1RBWEJnTlZCQW9URUZGMWIxWmhaR2x6SUV4cGJXbDBaV1F4SGpBY0JnTlZCQU1URlZGMWIxWmhaR2x6SUZKdgpiM1FnUTBFZ015QkhNekFlRncweE1qQXhNVEl5TURJMk16SmFGdzAwTWpBeE1USXlNREkyTXpKYU1FZ3hDekFKQmdOVkJBWVRBa0pOCk1Sa3dGd1lEVlFRS0V4QlJkVzlXWVdScGN5Qk1hVzFwZEdWa01SNHdIQVlEVlFRREV4VlJkVzlXWVdScGN5QlNiMjkwSUVOQklETWcKUnpNd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUN6eXc0UVo0N3FGSmVuTWlvS1ZqWi9hRXpIczI4NgpJeFNSL3hsL3BjcXM3ck4yblhycGl4dXJhekhiK2d0VFRLL0ZwUnA1UElwTS82emZKZDVPMllJeUMwVGV5dHVNcktOdUZvTTdwbVJMCk1vbjdGaFk0ZnV0RDR0TjBTc0ppQ25NSzNVbXpWOUt3Q29XZGNUemVvOHZBTXZNQk9TQkRHelhSVTdPeDdzV1RhWUkrRnJVb1JxSGUKNm9rSjdVTzRCVWFLaHZWWlI3NGJid0VoRUxuOXFkSW95aEE1Q2NvVE5zK2NyYTFBZEhrckFqODAvL29nYVgzVDdtSDF1clBuTU5BMwpJNFp5WVVVcFNGbG9iM2VtTG9HK0IwMXZyODdFUlJPUkZIQUdqeCtmK0lkcHNRN3Z3NGtaNitvY1lmeDZiSXJjMWdNTG5pYTZFdDNVClZEbXJKcU16Nm5XQjJpM05EMC9rQTlIdkZaY2JhNURGQXBDVFpnSWhzVWZlaTVwS2dMbFZqN1dpTDhEV00yZmFmc1NudEFSRTYwZjcKNWxpNTl3endleXV4d0hBcHcwQmlMVHRJYWR3alBFanJld2w1cVczYXFEQ1l6NEJ5QTRpbVcwYXVjbmw4Q0FNaFphNjM0Unlsc1NxaQpNZDVtQlBmQWRPaHgzdjg5V2N5V0poS0xoWlZYR3F0cmRRdEVQUkVvUEh0aHQrS1BaMC9sN0R4TVlJQnBWemdlQVZ1TlZlakgzOERNCmR5TTBTWFY4OXBnUjZ5M2U3VUV1RkFVQ2YrRCtJT3MxNXhHc0lzNVhQZDdKTUcwUUE0WE44ZitNRnJYQnNqNkliR0Iva0UrVjkvWXQKclFFNUJ3VDZkWUI5djBsUTdlL0p4SHdjNjRCKzI3YlEzUlAreWRPYzE3S1hxUUlEQVFBQm8wSXdRREFQQmdOVkhSTUJBZjhFQlRBRApBUUgvTUE0R0ExVWREd0VCL3dRRUF3SUJCakFkQmdOVkhRNEVGZ1FVeGhmUXZLanFBa1B5R3dhWlhTdVFJTG5Ybk9Rd0RRWUpLb1pJCmh2Y05BUUVMQlFBRGdnSUJBRFJoMlZhMUVvZFZUZDJqTlRGR3U2UUhjcnhmWVdMb3Bmc0xON0U4dHJQNktaMS9BdldreWFpVHQzcHgKS0dtUGMrRlNrTnJWdmpybHQzWnFWb0FoMzEzbTZUcWU1VDcyb21uSEtncXdHRWZjSUhCOVVxTStXWHpCdXNuSUZVQmh5bkxXY0t6Uwp0L0FjNUlZcDhNN3ZhR1BRdFNDS0ZXR2Fmb2FZdE1uQ2R2dk11akFXektOaHhuUVQ1V3Z2b3hYcUEvNFRpMlRrMDhIUzZJVDdTZEVRClRYbG02NnI5OUkweEhuQVVyZHplWnhOTWdSVmh2TGZaa1hkeEdZRmd1L0JZcGJXY0MvZVBJbFVud0VzQmJUdVpEZFFkbTJObkw5RHUKRGNwbXZKUlBwcTN0L081anJGYy9aU1hQc29hUDBBai91SFlVYnQ3bEoreXJlTFZUdWJZLzZDRDUwcWkrWVViS2g0eUU4L254b0dpYgpJaDZCSnBzUUJKRnh3QVlmM0tEVHVWYW40NWd0ZjRPZDM0d3JuREtPTXBUd0FUd2lLcDlEd2k3RG1Ea0hPSHY4WGdCQ0gvTXlKbm1ECmhQYmw4TUZSRXNBTEhnUWpERlNsVEM5SnhVclJ0bTVnRFd2OGE0dUZKR1MzaVE2ckpVZGJQTTkrU2IzSDZRckcydmQrRGhjSTAwaVgKMEhHUzhBODVQalJxSEgzWThpS3V1Mm4wTTdTbVNGWFJEdzRtNk95MkN5Mm5oVFhOL1ZuSW45SE5QbG9wTkxrOWhNNnhaZFJaa1pGVwpkU0hCZDU3NWV1RmduZE90QkJqMGZPdGVrNDlUU2lJcCtFZ3JQazJHckZ0L3l3YVpXV0RZV0dXVmpVVFI5MzkrSjM5OXJvRDFCMHkyClBweHhWSmtFUy8xWStaajAKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKRGlnaUNlcnQgQXNzdXJlZCBJRCBSb290IEcyCj09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRGxqQ0NBbjZnQXdJQkFnSVFDNU1jT3RZNVorcG5JNy9EcjVyMFN6QU5CZ2txaGtpRzl3MEJBUXNGQURCbE1Rc3dDUVlEVlFRRwpFd0pWVXpFVk1CTUdBMVVFQ2hNTVJHbG5hVU5sY25RZ1NXNWpNUmt3RndZRFZRUUxFeEIzZDNjdVpHbG5hV05sY25RdVkyOXRNU1F3CklnWURWUVFERXh0RWFXZHBRMlZ5ZENCQmMzTjFjbVZrSUVsRUlGSnZiM1FnUnpJd0hoY05NVE13T0RBeE1USXdNREF3V2hjTk16Z3cKTVRFMU1USXdNREF3V2pCbE1Rc3dDUVlEVlFRR0V3SlZVekVWTUJNR0ExVUVDaE1NUkdsbmFVTmxjblFnU1c1ak1Sa3dGd1lEVlFRTApFeEIzZDNjdVpHbG5hV05sY25RdVkyOXRNU1F3SWdZRFZRUURFeHRFYVdkcFEyVnlkQ0JCYzNOMWNtVmtJRWxFSUZKdmIzUWdSekl3CmdnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURaNXlndlVqODJja21Ja3pUeitHb2VNVlNBbjYxVVFiVkgKMzVhbzFLK0FMYmtLejNYOWlhVjlKUHJqSWd3cnZKVVhDek8vR1UxQkJwQUF2UXhORVA0SHRlY2NiaUpWTVdXWHZkTVgwaDVpODl2cQpiRkNNUDRRTWxzKzN5d1BneW0yaEZFd2JpZDN0QUxCU2ZLK1JiTEU0RTlIcEVnakFBTEFjS3hIYWQzQTJtNjdPZVlmY2duRG1DWFJ3ClZXbXZvMmlmdjkyMmViUHluWEFwVmZTci81Vmg4OGxBYngzUnZwTzcwNGdxdTUyL2NscFdjVHMvMVBQUkN2NG83NlB1MlptdkE5T1AKWUxmeWtxR3h2WW1KSHpETnc2WXVZak91RmdKM1JGcm5nUW84cDBRdWViZy9CTHhjb0lmaEc2OVJqczNzTFByNC9tM3dPbnlxaStSbgpsVEdOQWdNQkFBR2pRakJBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3RGdZRFZSMFBBUUgvQkFRREFnR0dNQjBHQTFVZERnUVdCQlRPCncwcTVtVlh5dU50Z3Y2bCt2VmExbHphbjFqQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUF5cVZWak9QSVFXNXBKNmQxRWU4OGhqWnYKMHAzR2VEZ2RhWmFpa21rdU9HeWJmUVRVaWFXeE1UZUt5U0hNcTJ6Tml4eWExcjlJMGpKbXdZckE4eTg2NzhEajFKR0cwVkRqQTl0egpkMjlLT1ZQdDNpYkh0WDJ2SzBMUmRXTGpTaXNDeDFCTDRHbmlsbXdPUkdZUVJJK3RCZXY0ZWF5bUcrZzNOSjFUeVdHcW9sS3ZTbkFXCmhzSTZ5TEVUY0RiWXorNzBDalRWVzB6OUI1eWl1dGtCY2x6elRjSGREckVjRGNSanZxMzBGUHVKN0tKQkRrek15RmRBMEc0RHFzME0Kam9tWm1XendQREN2T045dnZLTytLU0FucTNUL0V5SjQzcGRTVlI2RHRWUWdBKzZ1d0U5VzNqZk13MytxQkNlNzAzZTRZdHNYZkp3bwpJaE56Yk04bTlZb3A1dz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkRpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBHMwo9PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSakNDQWMyZ0F3SUJBZ0lRQzZGYStoM2ZvTFZKUksvTkpLQnM3REFLQmdncWhrak9QUVFEQXpCbE1Rc3dDUVlEVlFRR0V3SlYKVXpFVk1CTUdBMVVFQ2hNTVJHbG5hVU5sY25RZ1NXNWpNUmt3RndZRFZRUUxFeEIzZDNjdVpHbG5hV05sY25RdVkyOXRNU1F3SWdZRApWUVFERXh0RWFXZHBRMlZ5ZENCQmMzTjFjbVZrSUVsRUlGSnZiM1FnUnpNd0hoY05NVE13T0RBeE1USXdNREF3V2hjTk16Z3dNVEUxCk1USXdNREF3V2pCbE1Rc3dDUVlEVlFRR0V3SlZVekVWTUJNR0ExVUVDaE1NUkdsbmFVTmxjblFnU1c1ak1Sa3dGd1lEVlFRTEV4QjMKZDNjdVpHbG5hV05sY25RdVkyOXRNU1F3SWdZRFZRUURFeHRFYVdkcFEyVnlkQ0JCYzNOMWNtVmtJRWxFSUZKdmIzUWdSek13ZGpBUQpCZ2NxaGtqT1BRSUJCZ1VyZ1FRQUlnTmlBQVFaNTd5c1JHWHR6YmcvV1B1TnNWZXBSQzBGRmZMdkMvOFFkSisxWWxKZlpuNGY1ZHdiClJYa0x6TVpUQ3AyTlhRTFpxVm5lQWxyMmxTb09qVGhLaWtuR3ZNWURPQWRmVmRwK0NXN2lmMTdRUlNBUFdYWVExcUFrOEMzZU52SnMKS1RtalFqQkFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEZ1lEVlIwUEFRSC9CQVFEQWdHR01CMEdBMVVkRGdRV0JCVEwwTDJwNFpnRgpVYUZOTjZLRGVjNk5IU3JraERBS0JnZ3Foa2pPUFFRREF3Tm5BREJrQWpBbHBJRkZBbXNTUzNWMFQ4Z2o0M0R5ZFhMZWZJbnd6NUZ5CllaNWVFSkpaVnJtRHh4RG5PT2xZSmpaOTFlUTBoamtDTUh3MlUvQXc1V0pqT3BuaXRxTTdtelQ2SHRvUWtuRmVrUk9uM2FSdWtzd3kKMXZVaFpzY3Y2cFpqYW1WRmtwVUJ0QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkRpZ2lDZXJ0IEdsb2JhbCBSb290IEcyCj09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlEampDQ0FuYWdBd0lCQWdJUUF6cng1cWNScWFDN0tHU3hIUW42NVRBTkJna3Foa2lHOXcwQkFRc0ZBREJoTVFzd0NRWURWUVFHCkV3SlZVekVWTUJNR0ExVUVDaE1NUkdsbmFVTmxjblFnU1c1ak1Sa3dGd1lEVlFRTEV4QjNkM2N1WkdsbmFXTmxjblF1WTI5dE1TQXcKSGdZRFZRUURFeGRFYVdkcFEyVnlkQ0JIYkc5aVlXd2dVbTl2ZENCSE1qQWVGdzB4TXpBNE1ERXhNakF3TURCYUZ3MHpPREF4TVRVeApNakF3TURCYU1HRXhDekFKQmdOVkJBWVRBbFZUTVJVd0V3WURWUVFLRXd4RWFXZHBRMlZ5ZENCSmJtTXhHVEFYQmdOVkJBc1RFSGQzCmR5NWthV2RwWTJWeWRDNWpiMjB4SURBZUJnTlZCQU1URjBScFoybERaWEowSUVkc2IySmhiQ0JTYjI5MElFY3lNSUlCSWpBTkJna3EKaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF1emZOTk54N2E4bXlhSkN0U25YL1Jyb2hDZ2lOOVJsVXlmdUkyL091OGpxSgprVHg2NXFzR0dtdlByQzNvWGdra1JMcGltbjdXbzZoKzRGUjFJQVdzVUxlY1l4cHNNTnphSHhteDF4N2UvZGZneTVTRE42N3NIME5PCjNYc3MwcjB1cFMva3FiaXRPdFNacExZbDZadHJBR0NTWVA5UElVa1k5MmVRcTJFR25JL3l1dW0wNlpJeWE3WHpWK2hkRzgyTUhhdVYKQkpWSjh6VXRsdU5KYmQxMzQvdEpTN1NzVlFlcGo1V3p0Q083VEcxRjhQYXBzcFV3dFAxTVZZd25TbGNVZklLZHpYT1MweFpLQmd5TQpVTkdQSGdtK0Y2SG1JY3I5ZytVUXZJT2xDc1JuS1BaekZCUTlSbmJEaHhTSklUUk5ydzlGREtaSm9icTduTVd4TTRNcGhRSURBUUFCCm8wSXdRREFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQTRHQTFVZER3RUIvd1FFQXdJQmhqQWRCZ05WSFE0RUZnUVVUaUpVSUJpVjV1TnUKNWcvNitya1M3UVlYanprd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFHQm5LSlJ2RGtoajZ6SGQ2bWNZMVlsOVBNV0xTbi9wdnRzcgpGOSt3WDNOM0tqSVRPWUZuUW9RajhrVm5OZXlJdi9pUHNHRU1OS1N1SUV5RXh0djROZUYyMmQrbVFydkhSQWlHZnpaMEpGcmFiQTBVCldUVzk4a25kdGgvSnN3MUhLajJaTDd0Y3U3WFVJT0daWDFOR0ZkdG9tL0R6TU5VK01lS05oSjdqaXRyYWxqNDFFNlZmOFBsd1VIQkgKUVJGWEdVN0FqNjRHeEpVVEZ5OGJKWjkxOHJHT21hRnZFN0ZCY2Y2SUtzaFBFQ0JWMS9NVVJlWGdSUFRxaDVVeWt3NytVMGI2TEozLwppeUs1UzlrSlJhVGVwTGlhV04wYmZWS2ZqbGxEaUlHa25pYlZiNjNkRGNZM2ZlMERraHZsZDE5MjdqeU54RjFXVzZMWlptNnpOVGZsCk1yWT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKRGlnaUNlcnQgR2xvYmFsIFJvb3QgRzMKPT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNQekNDQWNXZ0F3SUJBZ0lRQlZWV3ZQSmVwRFUxdzZRUDFhdEZjakFLQmdncWhrak9QUVFEQXpCaE1Rc3dDUVlEVlFRR0V3SlYKVXpFVk1CTUdBMVVFQ2hNTVJHbG5hVU5sY25RZ1NXNWpNUmt3RndZRFZRUUxFeEIzZDNjdVpHbG5hV05sY25RdVkyOXRNU0F3SGdZRApWUVFERXhkRWFXZHBRMlZ5ZENCSGJHOWlZV3dnVW05dmRDQkhNekFlRncweE16QTRNREV4TWpBd01EQmFGdzB6T0RBeE1UVXhNakF3Ck1EQmFNR0V4Q3pBSkJnTlZCQVlUQWxWVE1SVXdFd1lEVlFRS0V3eEVhV2RwUTJWeWRDQkpibU14R1RBWEJnTlZCQXNURUhkM2R5NWsKYVdkcFkyVnlkQzVqYjIweElEQWVCZ05WQkFNVEYwUnBaMmxEWlhKMElFZHNiMkpoYkNCU2IyOTBJRWN6TUhZd0VBWUhLb1pJemowQwpBUVlGSzRFRUFDSURZZ0FFM2FmWnU0cTRDL3NMZnlIUzhMNitjL016WFJxOE5PcmV4cHU4MEpYMjhNelFDN3BoVzFGR2ZwNHRuKzZPCll3d1g3QWR3OWMrRUxrQ0RuT2cvUVcwN3JkT2tGRmsyZUowRFErNFFFMnh5M3E2SXA2RnJ0VVBPWjl3ai93TWNvK0krbzBJd1FEQVAKQmdOVkhSTUJBZjhFQlRBREFRSC9NQTRHQTFVZER3RUIvd1FFQXdJQmhqQWRCZ05WSFE0RUZnUVVzOXRJcFBtaHhkaXVOa0hNRVdOcApZaW04UzhZd0NnWUlLb1pJemowRUF3TURhQUF3WlFJeEFLMjg4bXcvRWtyUkxUbkRDZ21YYy9TSU5veUlKN3ZtaUkxUWhhZGorWjR5CjNtYVREL0hNc1FtUDNXeXIrbXQvb0FJd09XWmJ3bVNOdUo1UTNLalZTYUx0eDl6UlNYOFhBYmpJaG85T2pJZ3JxSnFwaXNYUkFMMzQKVk9LYTVWdDhzeWNYCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkRpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNAo9PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZrRENDQTNpZ0F3SUJBZ0lRQlpzYlY1Nk9JVExpT1FlOXAzZDFYREFOQmdrcWhraUc5dzBCQVF3RkFEQmlNUXN3Q1FZRFZRUUcKRXdKVlV6RVZNQk1HQTFVRUNoTU1SR2xuYVVObGNuUWdTVzVqTVJrd0Z3WURWUVFMRXhCM2QzY3VaR2xuYVdObGNuUXVZMjl0TVNFdwpId1lEVlFRREV4aEVhV2RwUTJWeWRDQlVjblZ6ZEdWa0lGSnZiM1FnUnpRd0hoY05NVE13T0RBeE1USXdNREF3V2hjTk16Z3dNVEUxCk1USXdNREF3V2pCaU1Rc3dDUVlEVlFRR0V3SlZVekVWTUJNR0ExVUVDaE1NUkdsbmFVTmxjblFnU1c1ak1Sa3dGd1lEVlFRTEV4QjMKZDNjdVpHbG5hV05sY25RdVkyOXRNU0V3SHdZRFZRUURFeGhFYVdkcFEyVnlkQ0JVY25WemRHVmtJRkp2YjNRZ1J6UXdnZ0lpTUEwRwpDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQy81cEJ6YU42NzVGMUtQREFpTUdrejdNS25KUzdKSVQzeWl0aFp3dUVwCnB6MVlxM2FhemE1N0c0UU54REFmOHh1a09CYnJWc2FYYlIycnNubnl5aEhTNUYvV0JUeFNEMUlmeHA0VnBYNituNmxYRmxsVmNxOW8KazNEQ3NycDFtV3B6TXBUUkVFUVFMdCtDOHdlRTVuUTdiWEhpTFF3YjdpRFZ5U0FkWXlrdHp1eGVUc2lUK0NGaG16VHJCY1plN0ZzYQp2T3ZKejgyc05FQmZzWHBtN25mSVNLaG1WMWVmVkZpT0RDdTNUNmN3MlZidXludGQ0NjNKVDE3bE5lY3h5OXFUWHR5T2o0RGF0cEdZClFKQjV3M2pIdHJIRXRXb1lPQU1RamRqVU42UXVCWDJJOVlJK0VKRndxMVdDUVRMWDJ3UnpLbTZSQVh3aFROUzhyaHNEZFYxNFp0azYKTVVTYU0wQy9DTmRhU2FUQzVxbWdaOTJrSjd5aFR6bTFFVmdYOXlSY1JvOWs5OEZwaUhhWWRqMVpYVUoyaDRtWGFYcEk4T0NpRWh0bQptblRLM2tzZTV3NWpydWJVNzVLU09wNDkzQURrUlNXSnRwcEVHU3Qrd0pTMDBtRnQ2elBaeGQ5TEJBRE1mUnlWdzQvM0liS3lFYmU3CmYvTFZqSEFzUVdDcXNXTVlSSlVhZG1KKzlvQ3crK2hrcGpQUmlRZmh2YmZtUTZRWXVLWjNBZUVQbEF3aEhiSlVLU1dKYk9VT1VsRkgKZEw0bXJMWkJkZDU2ckYrTlA4bTgwMEVSRWx2bEVGRHJNY1hLY2hZaUNkOThUSFUvWSt3aFg4UWdVV3R2c2F1R2kwL0Mxa1ZmblNEOApvUjdGd0kraXNYNEtKcG4xNUdrdm1CMHQ5ZG1wc2gzbEd3SURBUUFCbzBJd1FEQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkCkR3RUIvd1FFQXdJQmhqQWRCZ05WSFE0RUZnUVU3TmZqZ3RKeFhXUk0zeTVuUCtlNm1LNGNEMDh3RFFZSktvWklodmNOQVFFTUJRQUQKZ2dJQkFMdGgyWDJwYkw0WHhKRWJ3NkdpQUkzalpHZ1BWczkzcm5ENS9acEttYm5KZUZ3TURGL2s1aFFwVmdzMlNWMUVZK0N0bkpZWQpaaHNqRFQxNTZXMXIxbFQ0MGp6QlEwQ3VIVkQxVXZ5UU83dVltV2xyeDhHbnFHaWtKOXlkK1NldU1JVzU5bWROT2o2UFdUa2lVMFRyCnlGMER5dTFRZW4xaUlRcUF5SE5tMGFBRllGL29wYlNucjZqM2JUV2NmRnFLMXFJNG1mTjRpL1JOMGlBTDNnVHVqSnRIZ1hJTndCUXkKN3pCWkxxN2djZkpXNUdxWGI1SlFiWmFOYUhxYXNqWVVlZ2J5SkxrSkVWRFhDTEc0aVhxRUkyRkNLZVdqemFJZ1FkZlJuR1RaNmlhaAppeFRYVEJteVVFRnhQVDlOY0NPR0RFcmNnZExNTXBTRURRZ0pseHhQd081cklIUXcwdUE1TkJDRklSVUJDT2hWTXQ1eFNka29GMUJOCjVyNU4wWFdzME1yN1FiaERwYXJUd3dWRVR5dzJtK0w2NGtXNEkxTnNCbTluVlg5R3RVdy9iaWhhZVNiU3BLaGlsOUllNHUxS2k3d2IKL1VkS0RkOW5abjZ5VzBIUU8rVDBPL1FFWStudndsUUFVYUNLS3NuT2VNelY2b2NFR0xQT3IwbUlyL09TbWJhejVtRVAwb1VBNTFBYQo1QnVWblJtaHVaeXhtN0VBSHUvUUQwOUNiTWtLdk81RCtqcHhwY2hOSnFVMS9ZbGR2SVZpSFRMU29DdFU3WnBYd2R2NkVNOFp0NHRLCkc0OEJ0aWVWVStpMmlXMWJ2R2pVSStpTFVhSlcrZkNtZ0tEV0hyTzhEdzlUZFNtcTZoTjM1TjZNZ1NHdEJ4QkhFYTJIUFFmUmRielAKODJaKwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpDT01PRE8gUlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUYyRENDQThDZ0F3SUJBZ0lRVEtyNXl0dGpiK0FmOTA3WVd3T0duVEFOQmdrcWhraUc5dzBCQVF3RkFEQ0JoVEVMTUFrR0ExVUUKQmhNQ1IwSXhHekFaQmdOVkJBZ1RFa2R5WldGMFpYSWdUV0Z1WTJobGMzUmxjakVRTUE0R0ExVUVCeE1IVTJGc1ptOXlaREVhTUJnRwpBMVVFQ2hNUlEwOU5UMFJQSUVOQklFeHBiV2wwWldReEt6QXBCZ05WQkFNVElrTlBUVTlFVHlCU1UwRWdRMlZ5ZEdsbWFXTmhkR2x2CmJpQkJkWFJvYjNKcGRIa3dIaGNOTVRBd01URTVNREF3TURBd1doY05Nemd3TVRFNE1qTTFPVFU1V2pDQmhURUxNQWtHQTFVRUJoTUMKUjBJeEd6QVpCZ05WQkFnVEVrZHlaV0YwWlhJZ1RXRnVZMmhsYzNSbGNqRVFNQTRHQTFVRUJ4TUhVMkZzWm05eVpERWFNQmdHQTFVRQpDaE1SUTA5TlQwUlBJRU5CSUV4cGJXbDBaV1F4S3pBcEJnTlZCQU1USWtOUFRVOUVUeUJTVTBFZ1EyVnlkR2xtYVdOaGRHbHZiaUJCCmRYUm9iM0pwZEhrd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUNSNkZTUzBncFdzYXdOSk4zRnowUm4KZEprck42TjlJM0FBY2J4VDM4VDZLaEtQUzM4UVZyMmZjSEszWVgvSlN3OFhwejNqc0FSaDd2OFJsOGYwaGo0SytqNWMrWlBtTkhyWgpGR3ZubkxPRm9JSjZkcTl4a05mcy9RMzZuR3o2MzdDQzlCUisrYjdFcGk5UGY1bC90ZnhuUTNLOURBRFdpZXRyTE5QdGo1Z2NGS3QrCjVlTnUvTmlvNUpJazJrTnJZcmhWL2VyQnZHeTJpL01Palpya20yeHBtZmg0U0RCRjFhM2hEVHhGWVB3eWxsRW52R2ZEeWk2MmErcEcKeDhjZ29MRWZaZDVJQ0xxa1RxbnlnMFkzaE92b3pJRklRMmRPY2lxYlhMMU1HeWlLWENKN3RLdVkyZTdnVVlQRENVWk9iVDZaK3BVWAoybnd6VjBFOGpWSHRDN1pjcnl4akd0OVh5RCs4NlYzRW02OUZtZUtqV2lTMHVxbFdQYzl2cXY5SldMN3dxUC8wdUszcE4vdTZ1UFFMCk92bm9RMEllaWRpRXl4UHgyYnZoaVdDNGpDaFdyQlFkbkFybmNldlBEdDA5cVphaFNMMDg5NisxRFNKTXdCR0I3Rlk3OXRPaTRsdTMKc2dRaVVwV0FrMm5vamt4bDhaRURMWEIwQXVxTFp4VXBhVklDdTlmZlVHcFZScitnb3loaGYzRFF3NktxTENHcVI4NG9uQVpGZHIrQwpHQ2UwMWE2MHkxRG1hL1JNaG5FdzZhYmZGb2JnMlA5QTNmdlFRb2gvb3pNNkxsd2VRUkdCWTg0WWNXc3I3S2FLdHpGY09tcEg0TU41CldkWWdHcS95YXBpcWNyeFhTdEpMbmJzUS9MQk1RZVh0SFQxZUtKMmN6TCt6VWRxblIrV0VVd0lEQVFBQm8wSXdRREFkQmdOVkhRNEUKRmdRVXU2OStBajM2cHZFOGhJNnQ3amlZN05reU10UXdEZ1lEVlIwUEFRSC9CQVFEQWdFR01BOEdBMVVkRXdFQi93UUZNQU1CQWY4dwpEUVlKS29aSWh2Y05BUUVNQlFBRGdnSUJBQXJ4MVVhRXQ2NVJ1Mnl5VFVFVUFKTk1uTXZsd0ZUUG9DV09Bdm45c0tJTjlTQ1lQQk10CnJGYWlzTlorRVpMcExycWVMcHB5c2IwWlJHeGhOYUthdEJZU2FWcU00ZGMrcEJyb0x3UDBybUVkRUJzcXBJdDZ4ZjRGcHVIQTFzaisKbnE2UEs3bzltZmpZY3dsWVJtNm1uUFRYSjlPVjJqZURjaHpUYytDaVI1a0RPRjNWU1hrQUtSekg3SnNnSEFja2FWZDRzam44T29TZwp0Wng4amI4dWsySW50em5hRnhpdXZUd0phUCtFbXp6VjFnc0Q0MWVlRlBmUjYwL0l2WWNqdDdaSlEzbUZYTHJya2d1aHh1aG9xRXdXCnNScVpDdWhUTEpLN29Ra1lkUXhscUh2TEk3Y2F3aWlGd3h2LzBDdGk3NlI3Q1pHWVo0d1VBYzFvQm1waklYVURnSWlLYm9IR2hmS3AKcEMzbjlLVWtFRWVEeXMzMGpYbFlzUWFiNXhvcTJaMEIxNVI5N1FOS3l2RGI2S2tCUHZWV21ja2Vqa2s5dStVSnVlQlBTWkk5Rm9KQQp6TXhaeHVZNjdSSXVhVHhzbGJIOXFoMTdmNGErSGc0eVJ2djdFNDkxZjB5TFMwWmovZ0EwUUhEQnc3bWgzYVp3NGdTelFienBnSkhxClpKeDY0U0lEcVp4dWJ3NWxUMnlIaDE3emJxRDVkYVdiUU9oVHNpZWRTcm5BZHlHTi80ZnkzcnlNN3hmZnQwa0wwZkp1TUFzYURrNTIKN1JIODllbFdzbjIveDIwS2s0eWwwTUMySGI0NlRwU2kxMjVzQzhLS2ZQb2c4OFRrNWMwTnFNdVJrckY4aGV5MUZHbG1Eb0xuemM3SQpMYVpSZnlIQk5WT0ZCa3BkbjYyN0cxOTAKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGM2pDQ0E4YWdBd0lCQWdJUUFmMXRNUHlqeWxHb0c3eGtEalVETFRBTkJna3Foa2lHOXcwQkFRd0ZBRENCaURFTE1Ba0dBMVVFCkJoTUNWVk14RXpBUkJnTlZCQWdUQ2s1bGR5QktaWEp6WlhreEZEQVNCZ05WQkFjVEMwcGxjbk5sZVNCRGFYUjVNUjR3SEFZRFZRUUsKRXhWVWFHVWdWVk5GVWxSU1ZWTlVJRTVsZEhkdmNtc3hMakFzQmdOVkJBTVRKVlZUUlZKVWNuVnpkQ0JTVTBFZ1EyVnlkR2xtYVdOaApkR2x2YmlCQmRYUm9iM0pwZEhrd0hoY05NVEF3TWpBeE1EQXdNREF3V2hjTk16Z3dNVEU0TWpNMU9UVTVXakNCaURFTE1Ba0dBMVVFCkJoTUNWVk14RXpBUkJnTlZCQWdUQ2s1bGR5QktaWEp6WlhreEZEQVNCZ05WQkFjVEMwcGxjbk5sZVNCRGFYUjVNUjR3SEFZRFZRUUsKRXhWVWFHVWdWVk5GVWxSU1ZWTlVJRTVsZEhkdmNtc3hMakFzQmdOVkJBTVRKVlZUUlZKVWNuVnpkQ0JTVTBFZ1EyVnlkR2xtYVdOaApkR2x2YmlCQmRYUm9iM0pwZEhrd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUNBRW1VWE5nN0Qyd2l6CjBLeFhEWGJ0elNmVFRLMVFnMkhpcWlCTkNTMWtDZHpPaVovTVBhbnM5cy9CM1BIVHNkWjdOeWdSSzBmYU9jYThPaG0wWDZhOWZaMmoKWTBLMmR2S3BPeXVSK09KdjBPd1dJSkFKUHVMb2RNa1l0SkhVWW1UYmY2TUc4WWdZYXBBaVBMeitFL0NIRkh2MjVCK08xT1JSeGhGbgpSZ2hSeTRZVVZEKzhNLzUrYkp6L0ZwMFl2VkdPTmFhblpzaHlaOXNoWnJIVW0zZ0R3RkE2Nk16dzNMeWVUUDZ2QlpZMUgxZGF0Ly9PCitUMjNMTGIyVk4zSTV4STZUYTVNaXJkY21yUzNJRDNLZnlJMHJuNDdhR1lCUk9jQlRrWlRtek5nOTVTK1V6ZVFjMFB6TXNOVDc5dXEKL25ST2FjZHJqR0NUM3NUSEROL2hNcTdNa3p0UmVKVm5pKzQ5VnY0TTBHa1BHdy96SlNack0yMzNia2Y2YzBQbGZnNmxackVwZkRLRQpZMVdKeEEzQmsxUXdHUk9zMDMwM3ArdGRPbXcxWE50QjF4TGFxVWtMMzlpQWlnbVRZbzYxWnM4bGlNMkV1TEUvcERrUDJRS2U2eEpNCmxYenphd1dwWGhhRHpMaG40dWdUbmN4Ymd0Tk1zKzFiLzk3bGM2d2pPeTBBdnpWVmRBbEoyRWxZR24rU051WlJrZzd6Sm4wY1RSZTgKeWV4REp0Qy9RVjlBcVVSRTlKbm5WNGVlVUI5WFZLZysvWFJqTDdGUVpRbm1XRUl1UXhwTXRQQWxSMW42QkI2VDFDWkdTbENCc3Q2KwplTGY4WnhYaHlWZUVIZzlqMXVsaXV0WmZWUzdxWE1Zb0NBUWxPYmdPSzZueVRKY2NCejhOVXZYdDd5K0NEd0lEQVFBQm8wSXdRREFkCkJnTlZIUTRFRmdRVVUzbS9XcW9yU3M5VWdPSFltOENkOHJJRFpzc3dEZ1lEVlIwUEFRSC9CQVFEQWdFR01BOEdBMVVkRXdFQi93UUYKTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVNQlFBRGdnSUJBRnpVZkEzUDl3RjlRWmxsREhQRlVwL0wrTStaQm44YjJrTVZuNTRDVlZlVwpGUEZTUENlSGxDanRIem9CTjZKMi9GTlF3SVNieG10T3Vvd2hUNktPVldLUjgya1YyTHlJNDhTcUMvM3ZxT2xMVlNvR0lHMVZlQ2taCjdsOHdYRXNrRVZYL0pKcHVYaW9yN2d0Tm4zLzNBVGlVRkpWREJ3bjdZS251SEtzU2pLQ2FYcWVZYWxsdGl6OEkrOGpSUmE4WUZXU1EKRWc5ektDN0Y0aVJPL0ZqczhQUkYvaUt6NnkrTzB0bEZZUVhCbDIrb2RuS1BpNHcycjc4TkJjNXhqZWFtYng5c3BuRml4ZGpRZzNJTQo4V2NSaVF5Y0UweHlOTis4MVhIZnFuSGQ0YmxzakR3U1hXWGF2VmNTdGtOci8rWGVUV1lSVWMrWnJ1d1h0dWh4a1l6ZVNmN2ROWEdpCkZTZVVITTloNHlhN2I2Tm5KU0ZkNXQwZEN5NW9HenVDcit5RFo0WFVtRkYwc2JtWmdJbi9mM2daWEhsS1lDNlNRSzVNTnlvc3ljZGkKeUE1ZDl6WmJ5dUFsSlFHMDNSb0huSGNBUDlEYzFldzkxUHE3UDh5RjFtOS9xUzNmdVFMMzlaZWF0VFhhdzJld2gwcXBLSjRqanY5YwpKMnZoc0UvekIrNEFMdFJaaDh0U1FaWHE5RWZYN21SQlZYeU5XUUtWM1dLZHdybnVXaWgwaEtXYnQ1REhEQWZmOVlrMmRETFdLTUd3CnNBdmduRXpESE5iODQybTFSMGFCTDZLQ3E5TmpSSERFamY4dE03cXRqM3UxY0lpdVBoblBRQ2pZL01pUXUxMlpJdlZTNWxqRkg0Z3gKUSs2SUhkZkdqanhEYWgybkdONTlQUmJ4WXZuS2tLajkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKVVNFUlRydXN0IEVDQyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDanpDQ0FoV2dBd0lCQWdJUVhJdVp4VnFVeGRKeFZ0N05pWURNSmpBS0JnZ3Foa2pPUFFRREF6Q0JpREVMTUFrR0ExVUVCaE1DClZWTXhFekFSQmdOVkJBZ1RDazVsZHlCS1pYSnpaWGt4RkRBU0JnTlZCQWNUQzBwbGNuTmxlU0JEYVhSNU1SNHdIQVlEVlFRS0V4VlUKYUdVZ1ZWTkZVbFJTVlZOVUlFNWxkSGR2Y21zeExqQXNCZ05WQkFNVEpWVlRSVkpVY25WemRDQkZRME1nUTJWeWRHbG1hV05oZEdsdgpiaUJCZFhSb2IzSnBkSGt3SGhjTk1UQXdNakF4TURBd01EQXdXaGNOTXpnd01URTRNak0xT1RVNVdqQ0JpREVMTUFrR0ExVUVCaE1DClZWTXhFekFSQmdOVkJBZ1RDazVsZHlCS1pYSnpaWGt4RkRBU0JnTlZCQWNUQzBwbGNuTmxlU0JEYVhSNU1SNHdIQVlEVlFRS0V4VlUKYUdVZ1ZWTkZVbFJTVlZOVUlFNWxkSGR2Y21zeExqQXNCZ05WQkFNVEpWVlRSVkpVY25WemRDQkZRME1nUTJWeWRHbG1hV05oZEdsdgpiaUJCZFhSb2IzSnBkSGt3ZGpBUUJnY3Foa2pPUFFJQkJnVXJnUVFBSWdOaUFBUWFyRlJhcWZsb0krZDYxU1J2VThaYTJFdXJ4dFcyCjBlWnpjYTdkbk5ZTVlmM2JvSWtEdUFVVTdGZk83bDAvNGlHenp2ZlVpbm5nbzROK0xaZlFZY1R4bWR3bGtXT3JmekNqdEhEaXg2RXoKblBPL0xseFRzVit6ZlRKL2lqVGplWG1qUWpCQU1CMEdBMVVkRGdRV0JCUTY0UW1HMU04WndwWjJkRWwyM09BMXhtTmptakFPQmdOVgpIUThCQWY4RUJBTUNBUVl3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFLQmdncWhrak9QUVFEQXdOb0FEQmxBakEyWjZFV0NOemtsd0JCCkhVNis0V01Cenp1cVFoRmtvSjJVT1FJUmVWeDdIZnBrdWU0V1FyTy9pc0lKeE96a3NVMENNUURwS21GSGpGSktTMDRZY1BiV1JOWnUKOVlPNmJWaTlKTmxXU09ydnhLSkdnWWhxT2tiUnFadE55V0hhMFYxWGFoZz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1Cj09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ0hqQ0NBYVNnQXdJQkFnSVJZRmxKNENZdXUxWDVDbmVLY2ZsSzJHd3dDZ1lJS29aSXpqMEVBd013VURFa01DSUdBMVVFQ3hNYgpSMnh2WW1Gc1UybG5iaUJGUTBNZ1VtOXZkQ0JEUVNBdElGSTFNUk13RVFZRFZRUUtFd3BIYkc5aVlXeFRhV2R1TVJNd0VRWURWUVFECkV3cEhiRzlpWVd4VGFXZHVNQjRYRFRFeU1URXhNekF3TURBd01Gb1hEVE00TURFeE9UQXpNVFF3TjFvd1VERWtNQ0lHQTFVRUN4TWIKUjJ4dlltRnNVMmxuYmlCRlEwTWdVbTl2ZENCRFFTQXRJRkkxTVJNd0VRWURWUVFLRXdwSGJHOWlZV3hUYVdkdU1STXdFUVlEVlFRRApFd3BIYkc5aVlXeFRhV2R1TUhZd0VBWUhLb1pJemowQ0FRWUZLNEVFQUNJRFlnQUVSMFVPbHZ0OVhiL3BPZEVoK0o4THR0VjdIcEk2ClNGa2M4R0l4TGNCNktQNGFwMXl6dHN5WDUwWFVXUHJSZDIxRG9zQ0haVFFLSDNyZDZ6d3pvY1dkVGFSdlFaVTRmOGtlaE92Um5rbVMKaDVTSEREcUZTbWFmblZtVFRaZGhCb1pLbzBJd1FEQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZApCZ05WSFE0RUZnUVVQZVlwU0p2cUI4b2hSRW9tM203ZTBvUFFuMWt3Q2dZSUtvWkl6ajBFQXdNRGFBQXdaUUl4QU9WcEVzbHUyOFl4CnVnbEI0WmY0Ky8yYTRuMFN5ZTE4Wk5QTEJTV0xWdG1nNTE1ZFRndURuRnQyS2FBSkppRnFZZ0l3Y2RLMWoxenFPK0Y0Q1lXb2RaSTcKeUZ6OVNPOE5kQ0tvQ09KdXhVbk94d3k4cDJGcDhmYzc0U3JMK1N2elpwQTMKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKSWRlblRydXN0IENvbW1lcmNpYWwgUm9vdCBDQSAxCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRllEQ0NBMGlnQXdJQkFnSVFDZ0ZDZ0FBQUFVVWp5RVMxQUFBQUFqQU5CZ2txaGtpRzl3MEJBUXNGQURCS01Rc3dDUVlEVlFRRwpFd0pWVXpFU01CQUdBMVVFQ2hNSlNXUmxibFJ5ZFhOME1TY3dKUVlEVlFRREV4NUpaR1Z1VkhKMWMzUWdRMjl0YldWeVkybGhiQ0JTCmIyOTBJRU5CSURFd0hoY05NVFF3TVRFMk1UZ3hNakl6V2hjTk16UXdNVEUyTVRneE1qSXpXakJLTVFzd0NRWURWUVFHRXdKVlV6RVMKTUJBR0ExVUVDaE1KU1dSbGJsUnlkWE4wTVNjd0pRWURWUVFERXg1SlpHVnVWSEoxYzNRZ1EyOXRiV1Z5WTJsaGJDQlNiMjkwSUVOQgpJREV3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQ25VQm5lUDVrOTFETkc4VzlSWVlLeXFVK1BaNGxkCmhObFQzUXdvMmRmdy82NlZRM0taK2JWZGZJckJRdUV4VUhUUmdRMTh6WnNocTBQaXJLMWVobTd6Q1lvZldqSzlvdXVVK2VoY0N1ei8KbU5LdmNiTzBVNTlPaCsrU3ZMM3NUekl3aUVzWFhsZkVVOEwyQXBlTjJXSXJ2eVFmWW8zZnc3Z3BTMGw0UEpOZ2lDTDhtZG8yeU1LaQoxQ3hVQUdjMWJuTy9BbGp3cE4zbHNLSW1lc3JnTnFVWkZ2WDl0Kyt1UDBEMWJWb0UvYzQweWlUY2RDTWJYVE1URWwzRUFTWDJNTjBDClhaL2cxVWU5dE9zYm9idEpTZGlmV3dMeml1UWtrT1JpVDAvQnI0c09kQmVvMFhLSWFub0JTY3kwUm5uR0Y3SGFtQjRIV2ZwMUlZVmwKM1pCV3p2dXJwV0NkeEozNVVyQ0x2WWY1anlzakNpTjJPL2N6NGNrQTgybjVTNkxnVHJ4K2t6bUVCL2RFY0g3K0IxcmxzYXpSR016eQpOZVZKU1FqS1ZzazkrdzhZZllzN3dSUENUWS9KVHc0MzZSK2hEbXJmWWk3TE5RWlJlU3pJSlRqMCtrdW5pVnljMHVNTk9ZWktkSHpWCldZZkNQMDRNWEZMMFBmZFNndkhxbzZ6OVNUUWFLUE5CaURvVDd1amUvNWtkWDdyTDZCN3l1VkJnd0RIVGMrWHZ2cUR0TXd0MHZpQWcKeEdkczhBZ0RlbFdBZjBaT2xxZjBIajdoOXRnSjRUTmtLMlBYTWw2ZitjQjdEM2h2bDd5VG12bWNFcEI0ZW9DSEZkZHlkSnhWZEhpeAp1dUZ1Y0FTNlQ2QzZhTU43L3pId2N6MDlsQ3F4QzBFT29QNU5pR1ZyZVRPMDF3SURBUUFCbzBJd1FEQU9CZ05WSFE4QkFmOEVCQU1DCkFRWXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVU3VVFad05Qd0JvdnVwSHUrUXVjbVZNaU9Obll3RFFZSktvWkkKaHZjTkFRRUxCUUFEZ2dJQkFBMnVrREwycGt0OFJIWVpZUjRuS00xZVZPOGx2T01Ja1BrcDE2NW9DT0dVQUZqdkxpNStVMUtNdGx3SAo2b2k2bVl0UWxOZUNnTjloQ1FDVHJRMFU1czdCOGplVWVMQmZuTE9pYzdpUEJaTTR6WTArc0xqN3dNK3g4dXd0TFJ2TTdLcWFzNnBnCmdoc3RPOE9FUFZlS2xoNmNkYmpUTU0xZ0NJT1EwNDVVOFUxbXdGMTBBMENqN29WK3doOTNuQWJvd2FjWVhWS1Y3Y25kSlo1dCtxbnQKb3pvMDBGbDcydTFROHpXLzdlc1VUVEhIWVBUYThZZWM0a2ppeHNVMyt3WVErblZaWmpGSEtkcDJtaHpwZ3E3dm1ybFI5NGdqbW1tVgpZanpsVllBMjExUUMvL0c1WGM3VUkyL1lSWVJLVzJYdmlRemRGS2NneXhpbEpiUU4rUUh3b3RMMEFNaDBqcUVxU0k1bDJ4UEU0aVVYCmZldStoMXNYSUZSUmswcFRBd3ZzWGNvejdXTDlSY2N2Vzl4WW9JQTU1dnJYL2hNVXB1MDlsRXBDZE5URGQxbHp6WTlHdmxVNDcvcm8Ka1RMcWwxZ0VJdDQ0dzh5OGJja3pPbW9LYVQrZ3lPcHlqNHhqaGlPOWJUeVducFhnU1V5cW9ya3FHNXcyZ1hqdHcraEc0aVpaUkhVZQoyWFdKVWMwUWhKMWhZTXRkK1pjaVRZNlk1dU4vOWx1N3JzM0tTb0ZyWGd2elVlRjBLK2wrSjZmWm1VbE8rS1dBMnlVUEhHTmlpc2t6CloyczhFSVBHcmQ2b3pSYU9qZkFITjNHZjhxdjhRZlhCaSt3QU4xMEo1VTZBNy9xeFhEZ0dwUnRLNGR3NExUemNxeCtRR3RWS25PN1IKY0d6TTd2UlgrQmk2aEc2SAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGWmpDQ0EwNmdBd0lCQWdJUUNnRkNnQUFBQVVVanowWjhBQUFBQWpBTkJna3Foa2lHOXcwQkFRc0ZBREJOTVFzd0NRWURWUVFHCkV3SlZVekVTTUJBR0ExVUVDaE1KU1dSbGJsUnlkWE4wTVNvd0tBWURWUVFERXlGSlpHVnVWSEoxYzNRZ1VIVmliR2xqSUZObFkzUnYKY2lCU2IyOTBJRU5CSURFd0hoY05NVFF3TVRFMk1UYzFNek15V2hjTk16UXdNVEUyTVRjMU16TXlXakJOTVFzd0NRWURWUVFHRXdKVgpVekVTTUJBR0ExVUVDaE1KU1dSbGJsUnlkWE4wTVNvd0tBWURWUVFERXlGSlpHVnVWSEoxYzNRZ1VIVmliR2xqSUZObFkzUnZjaUJTCmIyOTBJRU5CSURFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUMySXBUOHBFaXY2RWRyQ3ZzbmR1VHkKUDRvN2Vrb3NNU3FNamJDcHd6RnJxSGQyaENhMnJJRkNEUWpyVlZpN2V2aThaWDN5b0cyTHFFZnBZblllRWU0SUZOR3lSQmIwNnRENgpIaTllMjh0elFhNjhBTEJLSzBDeXJPRTdTOEl0bmVTaG0rd2FPaDd3Q0xQUTVDUTFCNStjdE1sU2Jkc0h5bysxVy9DRDgwL0hMYVhJCnJjdVZJS1F4S0ZkWVd1U05HNXFybmcwTThnb3pPU0k1Q3BjdTgxTjN1VVJGL1lUTE5pQ0JXUzJhYjIxSVNHSEtUTjlUMGE5U3ZFU2YKcXk5cmczTHZkWURhQmpNYlhjamFZOFpOemF4bU1jM1IzajZIRURiaHVhUjY3MkJRc3N2S3BsYmdONityTkJNNUplZzVadVNZZXFvUwptSnhaWm9ZK3JmR3d5ajRHRDN2d0VVczNvRVJ0ZTh1b2pISDAxYldSTnN6d0ZjWXIzbEVYc1pkTVVEMnhsVmw4QlgwdElkVUF2d0ZuCm9sNTdwbHp5OXlMeGtBMlQyNnBFVVdiTWZYWUQ2MnFvS2pnWmwzWU5hNHBoK2J6MjduYjljQ3ZkS1R6NENoNWJRaHlMVmk5Vkd4eWgKTHJYSEZ1YjRxanlTam1tMkFjRzFocDJKRHdzNGxGVG82dHllUFNXOFV5YnQxYXM1cXNWQVRGU3JzclRaMmZqWGN0c2N2RzI5WlYvdgppRFVxWmkvdTlyTmw4RE9OZkpoQmFVWVBReHhwK3B1MTBHRnF6Y3BMMlV5UVJxc1ZXYUZIVkNrdWd5aGZITUtpcTNJWEFBYU9SZXlMCjRqTTlmOW9aUk9SaWNzUGZJc2J5VnRUZFg1Vnk3VzFmOTBnRFcvM0ZLcUQyY3lPRUVCc0I1d0lEQVFBQm8wSXdRREFPQmdOVkhROEIKQWY4RUJBTUNBUVl3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVNDNIZ250aW5RdG5iY1pGcmxKUHJ3NlBSRktNdwpEUVlKS29aSWh2Y05BUUVMQlFBRGdnSUJBRWY2M1Fxd0VaRTRyVTFkOStVT2wxUVpna2lIVkl5cVpKbllXdjZJQWNWWXBabXhJMVFqCnQyb2RJRmZsQVdKQkY5TUoyM1hMYmxTUWRmNGFuNEVLd3QzWDl3blFXM0lWNUI0SmFqMHo4eUdhNWhWK3JWSFZEUkR0ZlVMQWorN0EKbWdqVlFkWmNEaUZwYm9CaERoWEF1TS9GU1JKU3pMNDZ6TlF1T0FYZU5mMGZiN2lBYUpnOVRhREtRR1hTYzN6MWk5a0tsVC9ZUHlOdApHdEVxSkJuWmhiTVg3M2h1cVZqUkk5UEhFKzF5Slg5ZHNYTncwSDhHbHdtRUtZQmhIZnBlLzNPc29PT0p1Qnh4RmNiZU1YOFMzT0Z0Cm02L242SjkxZUV5clJqdWF6cjhGR0YxTkZUd1dtaGxRQkpxeW1tOWxpMUpmUEZnRUtDWEFabUV4ZnJuZ2Ria2FxSUhXY2hlenhRTXgKTlJGNGVLTGc2VENNZjREZldOODh1aWVXNG9BMGJlT1kwMlFuckVoK0tIZGN4aVZoSmZpRkRHWDZ4REl2cFpnRjVQZ0xaeFlXeG9LNApNaG41K2JsNTNCL042NityRHQwYjIwWGtldWNDNHBWZC9HbndVMmxobFhWNUMxNVY1amdjbEtsWk01N0ljWFI1ZjFHSnRzaHF1RERJCmFqakRicDdoTnhicUJXSk1XeEpIN2FlMHMxaFd4MG56ZnhKb0NURng4RzM0VGtmNzFvWHV4VmhBR2FRZHAvbExRemZjYUZwUHordkMKWkhUZXRCWFo5RlJVR2k4YzE1ZHhWSkNPMlNDZFV5dC9xNC9pNmpDOFVEZnY4VWUxZlh3c0JPeG9uYlJKUkJEMGNrc2NaT2Y4NW11UQozV2w5YWYwQVZxVzNyTGF0dDhvK0FlK2MKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVQakNDQXlhZ0F3SUJBZ0lFU2xPTUtEQU5CZ2txaGtpRzl3MEJBUXNGQURDQnZqRUxNQWtHQTFVRUJoTUNWVk14RmpBVUJnTlYKQkFvVERVVnVkSEoxYzNRc0lFbHVZeTR4S0RBbUJnTlZCQXNUSDFObFpTQjNkM2N1Wlc1MGNuVnpkQzV1WlhRdmJHVm5ZV3d0ZEdWeQpiWE14T1RBM0JnTlZCQXNUTUNoaktTQXlNREE1SUVWdWRISjFjM1FzSUVsdVl5NGdMU0JtYjNJZ1lYVjBhRzl5YVhwbFpDQjFjMlVnCmIyNXNlVEV5TURBR0ExVUVBeE1wUlc1MGNuVnpkQ0JTYjI5MElFTmxjblJwWm1sallYUnBiMjRnUVhWMGFHOXlhWFI1SUMwZ1J6SXcKSGhjTk1Ea3dOekEzTVRjeU5UVTBXaGNOTXpBeE1qQTNNVGMxTlRVMFdqQ0J2akVMTUFrR0ExVUVCaE1DVlZNeEZqQVVCZ05WQkFvVApEVVZ1ZEhKMWMzUXNJRWx1WXk0eEtEQW1CZ05WQkFzVEgxTmxaU0IzZDNjdVpXNTBjblZ6ZEM1dVpYUXZiR1ZuWVd3dGRHVnliWE14Ck9UQTNCZ05WQkFzVE1DaGpLU0F5TURBNUlFVnVkSEoxYzNRc0lFbHVZeTRnTFNCbWIzSWdZWFYwYUc5eWFYcGxaQ0IxYzJVZ2IyNXMKZVRFeU1EQUdBMVVFQXhNcFJXNTBjblZ6ZENCU2IyOTBJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNUlDMGdSekl3Z2dFaQpNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUM2aExaeTI1NE1hK0taNlRBQnAzYnFNcmlWUVJySjJtRk9XSExQCi92YUNlYjl6WVFZS3BTZllzMS9UUlU0Y2N0Wk9Ndkp5aWcvM2d4blFhb0NBQUVVZXNNZm5tcjhTVnljY28yZ3ZDb2U5YW1zT1htWHoKSEhmVjFJV05jQ0cwc3pMbmk2TFZoamtDc2JqU1I4N2t5VW5FTzZmZSsxUjlWNzd3Nkc3Q2ViSTZDMVhpVUpnV01oTmNMM2hXd2NLVQpzL0phNUNlYW55VFh4dXpRbXlXQzQ4ekN4RVhGakpkNkJtc3FFWitwQ201SU8yL2IxQkVaUXZlUEI3LzFVMStjUHZRWExPWnByRTR5ClRHSjM2cmZvNWJzMHZCbUxycHhSNTdkK3RWT3hNeUxsYmM5d1BCcjY0cHRudG9QMGphV3ZZa3hONEZpc1pEUVNBL2kyalpSakpLUngKQWdNQkFBR2pRakJBTUE0R0ExVWREd0VCL3dRRUF3SUJCakFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjBHQTFVZERnUVdCQlJxY2laNgowQjd2ZmVjN2FWSFViSTJma0JKbXF6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFlWjhkbHNhMmVUOGlqWWZUaHdNRVlHcHJtaTVaCmlYTVJyRVBSOVJQL2pUa3J3UEs5VDNDTXFTL3FGOFFMVko3VUc1YVlNenlvcldLaUFIYXJXV2x1QmgxK3hMbEVqWml2RXRSaDJ3b1oKUmtmejYvZGp3VUFGUUtYU3QvUzFtamEvcVloMmlBUlZCQ3VjaDM4YU56eCtMYVVhMk5TSlhzcTlyRDFzMkcydjFmTjJEODA3aURnaQpuV3lUbXNROXY0SWJaVCttRDEycS9PV3lGY3ExcmNhOFBkQ0U2T29HY3JCTk9USjR2ejRSbkF1a25ab2g4L0NiQ3pCNDI4SGNoMFArCnZHT2F5c1hDSE1uSGpmODdFbGdJNXJZOTdIb3NUdnVEbHM0TVBHbUhWSE9rYzhLVC8xRVFyQlZVQWRqOEJiR0pvWDkwZzVwSjE5eE8KZTRwSWI0dEY5Zz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMrVENDQW9DZ0F3SUJBZ0lOQUthTGVTa0FBQUFBVU5DUitUQUtCZ2dxaGtqT1BRUURBekNCdnpFTE1Ba0dBMVVFQmhNQ1ZWTXgKRmpBVUJnTlZCQW9URFVWdWRISjFjM1FzSUVsdVl5NHhLREFtQmdOVkJBc1RIMU5sWlNCM2QzY3VaVzUwY25WemRDNXVaWFF2YkdWbgpZV3d0ZEdWeWJYTXhPVEEzQmdOVkJBc1RNQ2hqS1NBeU1ERXlJRVZ1ZEhKMWMzUXNJRWx1WXk0Z0xTQm1iM0lnWVhWMGFHOXlhWHBsClpDQjFjMlVnYjI1c2VURXpNREVHQTFVRUF4TXFSVzUwY25WemRDQlNiMjkwSUVObGNuUnBabWxqWVhScGIyNGdRWFYwYUc5eWFYUjUKSUMwZ1JVTXhNQjRYRFRFeU1USXhPREUxTWpVek5sb1hEVE0zTVRJeE9ERTFOVFV6Tmxvd2diOHhDekFKQmdOVkJBWVRBbFZUTVJZdwpGQVlEVlFRS0V3MUZiblJ5ZFhOMExDQkpibU11TVNnd0pnWURWUVFMRXg5VFpXVWdkM2QzTG1WdWRISjFjM1F1Ym1WMEwyeGxaMkZzCkxYUmxjbTF6TVRrd053WURWUVFMRXpBb1l5a2dNakF4TWlCRmJuUnlkWE4wTENCSmJtTXVJQzBnWm05eUlHRjFkR2h2Y21sNlpXUWcKZFhObElHOXViSGt4TXpBeEJnTlZCQU1US2tWdWRISjFjM1FnVW05dmRDQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVNBdApJRVZETVRCMk1CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCSVFUeWRDNmJVRjc0bXpRNjFWZlpnSWFKUFJiaVdsSDQ3akNmZkh5CkFzV2ZvUFpiMVlzR0dZWlBVeEJ0QnlRbm9hRDQxVWNaWVV4OXlwTW42blFNNzIrV0NmNWo3SEJkTnExbmQ2N0puWHhWUkRxaVkxRWYKOWVOaTFLbEhCejdNSUtOQ01FQXdEZ1lEVlIwUEFRSC9CQVFEQWdFR01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRQpGTGRqNXhyZGpla0lwbFdEcE9CcVVFRmxFVUpKTUFvR0NDcUdTTTQ5QkFNREEyY0FNR1FDTUdGNTJPVkNSOThjcmxPWkY3WnZISDNoCnZ4R1UwUU9JZGVTTmlhU0tkMGJlYldIdkF2WDd0ZC9NL2s3Ly9xbm1wd0l3VzVuWGhUY0d0WHNJL2VzbmkwcVUrZUg2cDQ0bUNPaDgKa21odGM5aHZKcXdoQXJpWnR5WkJXeVZncnRCSUd1NEcKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQ0ZDQSBFViBST09UCj09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRmpUQ0NBM1dnQXdJQkFnSUVHRXJNMWpBTkJna3Foa2lHOXcwQkFRc0ZBREJXTVFzd0NRWURWUVFHRXdKRFRqRXdNQzRHQTFVRQpDZ3duUTJocGJtRWdSbWx1WVc1amFXRnNJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNU1SVXdFd1lEVlFRRERBeERSa05CCklFVldJRkpQVDFRd0hoY05NVEl3T0RBNE1ETXdOekF4V2hjTk1qa3hNak14TURNd056QXhXakJXTVFzd0NRWURWUVFHRXdKRFRqRXcKTUM0R0ExVUVDZ3duUTJocGJtRWdSbWx1WVc1amFXRnNJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNU1SVXdFd1lEVlFRRApEQXhEUmtOQklFVldJRkpQVDFRd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURYWFd2TkVEOGZCVm5WCkJVMDNzUTdzbUN1T0ZSMzZrMHNYZ2lGeEVGTFhVV1J3RnNKVmFVMk9GVzJmdnd3Ynd1Q2paOVlNck04aXJxOTNWQ3BMVElwVFVuckQKN2k3ZXMzRWx3ZWxkUGU2aEw2UDNLanpKSXgxcXF4MmhwL0h6N0tEVlJNOFZ6M0l2SFdPWDZKbjUvWk9rVklCTVV0UlNxeTVKMzVETgp1RisrUDk2aHlrMGcxQ1hvaENsVHQ3R0lILy82MnBDZkNxa3RRVCt4OFJncDdoWlpMRFJKR3FnRzE2aUkwZ055ZWpMaTZtaE5iaXlXClpYdktXZnJ5NHQzdU1Dejd6RWFzeEdQcmIzODJLelJ6RXBSLzM4d21udkZ5WFZCbFdZOXBzNGRlTW0vREdJcTFsWSt3ZWpmZVdrVTcKeHpiaDcyZlJPZE9YVzNOaUdVZ3RoeHdHKzNTWUlFbHo4QVhTRzdHZ283Y2JjTk9JYWJsYTFqajBZdHdsaTNpLytPaCt1RnpKbFU5ZgpweTI1SUd2UGE5MzFEZlNDdC9TeVppNFFLUGFYV251V0ZvOEJHUzFzYm44NVdBWmtnd0dEZzhOTmt0MHl4b2VrTitrV3pxb3RhSzhLCmdXVTZjTUdiclUxdFZNb3FMVXVGRzdPQTVuQkZEV3RlTmZCL083aWM1QVJ3aVJJbGs5b0ttU0pnYW1OZ1RuWUdtRTY5ZzYwZFdJb2wKaGRMSFpSNHRqc2JmdHNiaGY0b0VJUlVwZFBBK25KQ2REQzd4aWo1YXFnd0pIc2ZWUEtQdGw4TWVOUG80K1FnTzQ4QmRLNFBSVm1ySgp0cWhVVXk1NE1tYzlnbjkwMFB2aHRnVmd1WERiamd2NUUxaHZjV0FRVWhDNXdVRUo3M0lmWnpGNC81WUZqUUlEQVFBQm8yTXdZVEFmCkJnTlZIU01FR0RBV2dCVGovaTM5S05BTHRicTJvc1MvQnFvRmpKUDdMekFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQTRHQTFVZER3RUIKL3dRRUF3SUJCakFkQmdOVkhRNEVGZ1FVNC80dC9TalFDN1c2dHFMRXZ3YXFCWXlUK3k4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQgpBQ1hHdW12cmg4dmVnam1XUGZCRXAydUVjd1BlblN0UHVpQi92SGl5ejVld0c1enoxM2t1OVVpMjB2c1hpT2JUZWovdFV4UFE0aTlxCmVjc0FJeWptSGpkWE5ZbUV3blpQTkRhdFo4UE9RUWFJeGZmdTJCcTQxZ3QvVVArVHFoZExqT3p0VW1DeXBBYnFUdXYwYXhuOTYvVWEKNENVcW10ekhRVGIzeUhRRmhEbVZPZFlMTzZRbitnallYQjc0QkdCU0VTZ29BLy92VTJZQXBVbzBGbVo4L1Fta3JwNW5HbTlCQzJzRwpFNXVQaG5FRnRDK05pV1l6S1haVW1oSDRKL3F5UDVIZ3pnMGI4ekFhcmI4aVhSdlR2eVVGVGVHU0duK1puenhFazhyVVFFbHNnSWZYCkJEckRNbEkxRGxiNHBkMTl4SXNORVI5VHl4NnlGN1pvZDFyZzFNdklCNjcxT2k2T043ZlFBVXRES1hlTU9aZVBnbHI0VWVXSm9Cam4KYUg5ZENpNzdvMGNPUGFZamVzWUJ4NC9JWHI5dGdGYStpaVM2TStxZjRUSVJudkhTVDREMkcwQ3ZPSjRSVUhsekVoTE41bXlkTEloeQpQRENCQnBFaTZsbXQyaGt1SXNLTnVZeUg0R2E4Y3lOZklXUmpnRWoxb0R3WVBaVElTRUVkUUxwZS92NVdPYUhJejE2ZUdXUkdFTm9YCmtiY0ZnS3lMbVpKOTU2TFlCd3MySitkSWVXQ0t3OWNUWFBoeVFOOUt5OCtaQUFvQUN4R1YybFpGQTRnS24yZlExWG14cUkxQWJRM0MKZWtENjgxOWtSNUxMVTdtN1djNVAvZEFWVXdIWTMrdlo1bmJ2MENPN082bDVzOVVDS2MySm81WVBTalhuVGtMQWRjMEh6K1lzNjNzdQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpPSVNURSBXSVNlS2V5IEdsb2JhbCBSb290IEdCIENBCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR0VENDQXAyZ0F3SUJBZ0lRZHJFZ1VuVHdoWWRHcy9nakd2YkN3REFOQmdrcWhraUc5dzBCQVFzRkFEQnRNUXN3Q1FZRFZRUUcKRXdKRFNERVFNQTRHQTFVRUNoTUhWMGxUWlV0bGVURWlNQ0FHQTFVRUN4TVpUMGxUVkVVZ1JtOTFibVJoZEdsdmJpQkZibVJ2Y25ObApaREVvTUNZR0ExVUVBeE1mVDBsVFZFVWdWMGxUWlV0bGVTQkhiRzlpWVd3Z1VtOXZkQ0JIUWlCRFFUQWVGdzB4TkRFeU1ERXhOVEF3Ck16SmFGdzB6T1RFeU1ERXhOVEV3TXpGYU1HMHhDekFKQmdOVkJBWVRBa05JTVJBd0RnWURWUVFLRXdkWFNWTmxTMlY1TVNJd0lBWUQKVlFRTEV4bFBTVk5VUlNCR2IzVnVaR0YwYVc5dUlFVnVaRzl5YzJWa01TZ3dKZ1lEVlFRREV4OVBTVk5VUlNCWFNWTmxTMlY1SUVkcwpiMkpoYkNCU2IyOTBJRWRDSUVOQk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBMkJlM0hFb2tLdGFYCnNjcmlIdnQ5T08rWTliSTVtRTRudUJGZGU5SWxsSWlDRlNacUd6RzdxRnNoSVN2WUQwNmZXdkd4V3VSNTFqSWpLK0ZUekpsRlhIdFAKcmJ5L2gwb0xTNWRhcVBaSTdIMTdEYzBoQnQrZUZmMUJpa2kzSVBTaGVodFgxRjFRLzdwbjJDT1pIOGcvNDk3L2IxdDNzV3R1dU1sawo5K0hLUVVZT0tYSFF1U1A4eVlGZlR2ZHYzNytFclhOa3U3ZENqbW4yMUhZZGZwMm51RmVLVVdkeTE5U291SlZVUUhNRDl1cjA2LzRvClFuYy9uU01ic3JZOWdCUUhUQzVQOTlVS0ZnMjlaa00zZmlORGVjTkFodlZNS2RxT21xME5wUVNIaUI2RjQrbFQxWnZJaXdOamVPdmcKR1VwdXV5OXJNMlJZazYxcHY0OGI3NEpJeHdJREFRQUJvMUV3VHpBTEJnTlZIUThFQkFNQ0FZWXdEd1lEVlIwVEFRSC9CQVV3QXdFQgovekFkQmdOVkhRNEVGZ1FVTlEvSU5tTmU0cVBzK1R0bUZjNVJVdU9SbWowd0VBWUpLd1lCQkFHQ054VUJCQU1DQVFBd0RRWUpLb1pJCmh2Y05BUUVMQlFBRGdnRUJBRUJNKzRleW1ZR1FmcDNGc0xBbXpZaDdLektOYnJnaGNWaVhmYTQzRks4KzUvZWE0bjMyY1ppWkJLcEQKZEhpajQwbGhQbk9NVFpUZytYSEV0aFlPVTNnZjFxS0hMd0k1Z1NrOHJ4V1lJVEQrS0pBQWpOSGh5L3BleVAzNEVFWTdvbmhDa1JkMApWUXJlVUdkTlp0R24vLzNad0xXb280ck9adlVQUTgybksxZDdZMFpxcWk1UzJQVHQ0VzJ0S1pCNFNMcmhJNnFqaWV5MXE1YkF0RXVpCkhaZWVldkp1UUhIZmFQRmxUYzU4QmQ5VFphbWw4TEdYQkhBVlJnT1kxTksvVkxTZ1dIMVNiOXBXSm1MVTJOdUpNVzhjOENMQzAySWMKTmMxTWFSVlVHcENZM3VzZVg4cDN4OHVPUFVOcG5KcFkwQ1E3M3h0QWxuNDFyWUhIVG5HNmlCTT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKU1pBRklSIFJPT1QgQ0EyCj09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRGNqQ0NBbHFnQXdJQkFnSVVQb3BkQit4VjBqTFZ0K08yWHdIckxkemsxdVF3RFFZSktvWklodmNOQVFFTEJRQXdVVEVMTUFrRwpBMVVFQmhNQ1VFd3hLREFtQmdOVkJBb01IMHR5WVdwdmQyRWdTWHBpWVNCU2IzcHNhV042Wlc1cGIzZGhJRk11UVM0eEdEQVdCZ05WCkJBTU1EMU5hUVVaSlVpQlNUMDlVSUVOQk1qQWVGdzB4TlRFd01Ua3dOelF6TXpCYUZ3MHpOVEV3TVRrd056UXpNekJhTUZFeEN6QUoKQmdOVkJBWVRBbEJNTVNnd0pnWURWUVFLREI5TGNtRnFiM2RoSUVsNlltRWdVbTk2YkdsamVtVnVhVzkzWVNCVExrRXVNUmd3RmdZRApWUVFEREE5VFdrRkdTVklnVWs5UFZDQkRRVEl3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQzN2RDVRCnFFdk5RTFhPWWVlV3lyU2gyZ3dpc1BxMWUzWUFkNHdMejMyb2hzd21VZVFnUFlVTTFsamo1L1FxR0ozYTBhNG03dXRUM1BTUTFoTksKREpBOHcvVGEwbzROa2pyY3NiSC9PTjdEdWkxZmdMa0N2VXFkR3crMHc4TEJad1BkM0J1Y1BiT3czZ0FlcURSSHU1cnIvZ3NVdlRhRQoyZzBndi9wYnk2a1dJSzA1WU80dmRiYm5sNXo1UHYxK1RXOU5MKytJRFdyNjNmRTliaUNsb0JLMFRYQzV6dGR5TzRtVHA0Q0VIQ2RKCmNrbTEvenVWbnNITXlBSHM2QTZLQ3BibnM2YUg1ZGI1QlNzTmwwQndQTHFzZFZxYzFVMmRBZ3JTUzV0bVMwWUhGMld0bjJ5SUFOd2kKaWVEaFpOUm52REY1WVR5N3lrSE5YR29BeUR3NGpsaXZBZ01CQUFHalFqQkFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEZ1lEVlIwUApBUUgvQkFRREFnRUdNQjBHQTFVZERnUVdCQlF1RnFsS0dMWEx6UFZ2VVBNalgvaGQ1Nnp3eURBTkJna3Foa2lHOXcwQkFRc0ZBQU9DCkFRRUF0WFA0QTl4Wld4MTI2YU1xZTVBb3NrM0FNMCtxbXJIVXVPUW4vNm1XbWM1RzRHMThUS0k0cEFadzhQUkJFZXcvUjQwL2NvZjUKTy8ya2J5dFRBT0QvT2JscUJ3N3JIUnoyb25LUXk0STlFWUtMMHJ1ZktxOGg1bU9HblhrWjcvZTdERFdRdzRydFR3LzF6QkxacEQ2NwpvUHdnbFY5UEppOFJJNE5PZFFjUHY1dlJ0QjNwRUFUK3ltQ1Bva3k0cmMvaGtBL05yZ3JIWFh1M1VOTFVZZnJWRmR2WG40ZFJWT3VsCjQrdkpoYUFsSURmN2pzNE1OSVRoUElHeWQwNURwWWhmaG1laFBlYTBYR0cyUHR2K3R5akZvZ2V1dGNyS2pTb1M3NWZ0d2pDa3lTcDYKKy9OTkl4dVpNelNnTHZXcEN6L1VYZUhQaEovaUdjSmZpdFlnSHVOenR3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyCj09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRjBqQ0NBN3FnQXdJQkFnSVFJZGJRU2s4bEQ4a3lOL3lxWGhLTjZUQU5CZ2txaGtpRzl3MEJBUTBGQURDQmdERUxNQWtHQTFVRQpCaE1DVUV3eElqQWdCZ05WQkFvVEdWVnVhWHBsZEc4Z1ZHVmphRzV2Ykc5bmFXVnpJRk11UVM0eEp6QWxCZ05WQkFzVEhrTmxjblIxCmJTQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVRFa01DSUdBMVVFQXhNYlEyVnlkSFZ0SUZSeWRYTjBaV1FnVG1WMGQyOXkKYXlCRFFTQXlNQ0lZRHpJd01URXhNREEyTURnek9UVTJXaGdQTWpBME5qRXdNRFl3T0RNNU5UWmFNSUdBTVFzd0NRWURWUVFHRXdKUQpUREVpTUNBR0ExVUVDaE1aVlc1cGVtVjBieUJVWldOb2JtOXNiMmRwWlhNZ1V5NUJMakVuTUNVR0ExVUVDeE1lUTJWeWRIVnRJRU5sCmNuUnBabWxqWVhScGIyNGdRWFYwYUc5eWFYUjVNU1F3SWdZRFZRUURFeHREWlhKMGRXMGdWSEoxYzNSbFpDQk9aWFIzYjNKcklFTkIKSURJd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUM5K1hqNDV0V0FER1NkaGh1V1pHYy9Jam9lZFFGOQo3L3RjWjR6SnpGeHJxWkhtdVVMbElFdWIycHQ3dVpsZDJadUFTOWVFUUNzbjAraTZNTHMrQ1JxblNaWHZLMEFrd3BmSHArNmJKZStvCkNnQ1hoVnFxbmR3cHllSTFCK3R3VFVyV3diTld1S0ZCT0p2Uit6Ri9qK0JmNGJFL0Q0NFdTV0RYQm8wWSthb21FS3NxMDlEUlo0MGIKUnI1SE1OVXVjdEhGWTlyblkzbEVma3RqSkltR0xqUS9LVXhTaXlxbndPS1JLSW01d0Z2NUhkbm5KNjMvbWdLWHdjWlFrcHNDTEwycAp1VFJaQ3IrRVN2L2Yvck9mNjltZTRKZ2o3S1pyZHhZcTI4eXRPeHlraDl4R2MxNFpZbWhGVitTUWdrSzdRdGJ3WWVEQm96MW1vMTMwCkdPNkl5WTBYUlNtWk1uVUNNZTRwSnNockF1YTFZa1YvTnhWYUkyaUoxRDdlVGlldzhFQU12RTBYeTAyaXN4N1FCbHJkOXBQUFYzV1oKOWZxR0dtZDRzNytXL2pUY3ZlZFNWdVd6NVhWNzEwR1JCZHhkYWVPVkRVTzUvSU9XT1pWN2JJQmFUeE55eHRkOUtYcEV1bEtrS3RWQgpSZ2tnL2lLZ3Rsc3dqYnlKRE5YWGNQaUhVdjNhNzZ4UkxnZXpUdjdRQ2Rwdzc1ajZWdVp0MjdWWFM5emxMQ1VWeUo0dWVFNzQycHllCmhpektWL01hNWNpU2l4cUNsbnJEdkZBU2FkZ09Xa2FMT3VzbStpUEp0ckNCdmtJQXBQalcvakF1eDlKRzl1V09kZjN5ekxuUWgxdk0KQmhCZ3U0TTF0MTVuM2tmc21VanhwS0VWL3EyTVlvNDVWVTg1RnJteFk1My90d0lEQVFBQm8wSXdRREFQQmdOVkhSTUJBZjhFQlRBRApBUUgvTUIwR0ExVWREZ1FXQkJTMm9WUTVBc09nUDQ2S3ZQclUrQnltMFRvTy9UQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0RRWUpLb1pJCmh2Y05BUUVOQlFBRGdnSUJBSEdsRHM3azZiOC9PTldKV3NRQ1lmdE14UlFYTFl0UFUyc1FGL3hsaE1jUVNaRGUyOGNtazRnbWIzRFcKQWw0NW9QZVBxNWExcFJOY2dSUnREb0dDRVJ1S1RzWlBwZDFpSGtUZkNWbjBXM2NMTittTElNYjRDazR1V0J6ck05RFBobURKMnZ1QQpMNTVNWUlSNFBTRmsxdnRCSHhnUDU4bDFjYjI5WE40MGh6NUJzQTcydWRZL0NST1dGQy9lbWgxYXVWYk9OVHF3WDNCTlh1TXA4U01vCmNsbTJxOEtNWmlZY2R5d21kaldMS0tkcG9Qazc5U1BkaFJCMHlaQURWcEhucjdwSDFCS1hFU0xqb2ttVWJPZTNsRXU2TGFUYU00dE0KcGtUL1dqekdIV1RZdFRIa3BqeDZxRmNMMisxaEdzdnh6bk4zWTZTSGIweFJPTmJrWDhlZnRvRXE1SVZJZVZoZU8vamJBb0pud1RuYgp3M1JMUFRZZStTbVRpR2hicUVRWklmQ242SUVOTE9pVE5yUTNzc3F3R3laNm1pVWZtcHFBbmtzcVAvdWptdjV6TW5IQ25zWnk0WXBvCkovSGtEN1RFVEtWaGsvaVhFQWNxTUNXcHVjaHh1TzlvekMxKzllQitENEtvYjdhNmJJTkRkODJLa2hlaG5sdDRGajFGNGpOeTNlRm0KeXBuVHljVW0vUTFvQkVhdXR0bWJqTDRadnJIRzhobmpYQUxLTE5odlNnZlp5VFhhUUhYeXhLY1piNTVDRUpoMTVwV0xZTHp0eFJMWAppczdWbUZ4V2xnUEY3bmNHTmYvUDVPNC9FMkh1MjlvdGhmRE5ycDJ5R0FsRnc1S2hjaGY4UjdhZ0N5enh4TjVEYUFocVh6dndkbVA3CnpBWXNwc2JpRHJXNXZpU1AKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxNQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlHQ3pDQ0EvT2dBd0lCQWdJQkFEQU5CZ2txaGtpRzl3MEJBUXNGQURDQnBqRUxNQWtHQTFVRUJoTUNSMUl4RHpBTkJnTlZCQWNUCkJrRjBhR1Z1Y3pGRU1FSUdBMVVFQ2hNN1NHVnNiR1Z1YVdNZ1FXTmhaR1Z0YVdNZ1lXNWtJRkpsYzJWaGNtTm9JRWx1YzNScGRIVjAKYVc5dWN5QkRaWEowTGlCQmRYUm9iM0pwZEhreFFEQStCZ05WQkFNVE4waGxiR3hsYm1saklFRmpZV1JsYldsaklHRnVaQ0JTWlhObApZWEpqYUNCSmJuTjBhWFIxZEdsdmJuTWdVbTl2ZEVOQklESXdNVFV3SGhjTk1UVXdOekEzTVRBeE1USXhXaGNOTkRBd05qTXdNVEF4Ck1USXhXakNCcGpFTE1Ba0dBMVVFQmhNQ1IxSXhEekFOQmdOVkJBY1RCa0YwYUdWdWN6RkVNRUlHQTFVRUNoTTdTR1ZzYkdWdWFXTWcKUVdOaFpHVnRhV01nWVc1a0lGSmxjMlZoY21Ob0lFbHVjM1JwZEhWMGFXOXVjeUJEWlhKMExpQkJkWFJvYjNKcGRIa3hRREErQmdOVgpCQU1UTjBobGJHeGxibWxqSUVGallXUmxiV2xqSUdGdVpDQlNaWE5sWVhKamFDQkpibk4wYVhSMWRHbHZibk1nVW05dmRFTkJJREl3Ck1UVXdnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDRHdBd2dnSUtBb0lDQVFEQytLay9HNG44UER3RVhUMlFOckNST25rOFpscnYKYlRrQlNScTB0ODkvVFNOVHQ1QUE0eE1xS0tZeDhaRUE0eWpzcmlGQnpoL2EvWDBTV3dHREQ3bXdYNW5oOGhLRGdFMEdQdCtzcitlaAppR3N4ci9DTDBCZ3p1TnRGYWpUMEFvQWtLQW9DRlpWZWRpb05tVG9VVy9iTHkxTzhFMDBCaURlVUpSdEN2Q0xZanFPV1hqclpNdHMrCjZQQVFaZTEwNFMrbmZLOG5OTHNwZlp1Mnp3bkk1ZE1LL0lobFpYUUszSE1jWE0xQXNSelV0b1NNVEZEUGFJNm9XYTdDSjA2Q29qWGQKRlBRZi83SjMxWWN2cW01OUpDZm54c3NtNXVYK1p3ZGoyRVVOM1RwWlpUbFllcEtaY2oyY2hGNklJYmpWOUN6ODJYQlNUM2k0dlR3cgppNVdZOWJQUmFNOGdGSDVNWEYvbmkrWDFOWUVaTjljUkNMZG12dE5Lem9OWEFEckRnZmdYeTVJMlhkR2oySFViNFlzbjZucElRZjFGCkdRYXRKNWxPd1hCSDNiV2ZnVk1TNWJHTVNGMHhReGZqak1aNlk1WkxLVEJPaEU1aUdWNDh6cGVRcFg4QjY1M2crSXVKM1NXWVBaSzIKZnUvWjhWRlJmUzBteUdsWlllQ3NhcmdxTmhFRWVsQzlNb1MrTDl4eTFkY2RGa2ZrUjJZZ1AvU1d4YStPQVhxbEQzcGs5UTBZaDltdQppTlg2aE1FNndHa29MZklOYUZHcTQ2VjN4cVNRRHFFM2l6RWpSOEVKQ090dTkzaWIxNEw4aENDWlNSbTJFa2F4KzBWVkZxbWpaYXljCkJ3L3FhOXdmTGdaeTdJYUlFdVF0MjE4RkwrVHdBOU1tTStlQXdzMUNvUmMwQ3dJREFRQUJvMEl3UURBUEJnTlZIUk1CQWY4RUJUQUQKQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCQmpBZEJnTlZIUTRFRmdRVWNSVm55TWpKdlhWZGN0QTRHR3FkODNFa1ZBc3dEUVlKS29aSQpodmNOQVFFTEJRQURnZ0lCQUhXN2JWUkxxaEJZUmpUeVl0Y1dObDBJWHRWc3lJZTl0QzVHOGpINGZPcEN0Wk1XVmR5aERCS2cybUYrCkQxaFljMlJ5eCtoRmp0eXA4aVkveG5tTXNWTUlNNEd3VmhPKzVsRmMySnNLVDB1Y1ZsTUM2VS8yRFdEcVRVSlY2SHdiSVNIVEd6ck0KZC9LNGtQRm94L2xhL3ZvdDlML0o5VVViempnUUtqZUtlYU8wNHdsc2hZYVQvNG1XSjNpQmoyZmpSblJVanRrTmFlSks5RTEwQS8reQpkKzJWWjVma3NjV3J2Mm9qNk5TVTRrUW9Zc1JMNHZEWTRpbHJHbkIrSkdHVGUwOERNaVVOUlNRcmxyUkdhcjlLQy9lYWo4R3NHc1ZuCjgyODAwdnB6WTR6dkZyQ29wRVlxK09zUzdISzA3L2dyZm94U3dJdUVWUGt2UHVOVnFOeG1zZG5oWDlpempGazBXYVNyVDJ5N0h4amIKZGF2WXk1TE5sRGhoRGdjR0gwdEdFUEVWdm8yRlhEdEtLNEY1RDdScG4wbFFsMDMzRGxaZHdKVnF3amJERzJqSjlTcmNSNXErc3M3RgpKZWo2QTduYStSWnVrWVQxSENqSS9DYk0xeHlRVnFkZmJ6b0V2TTE0aVF1T0R5K2pxaytpR3hJOUZnaEFEL0ZHVE5lcWV3akJDdlZ0Cko5NENqOHJEdFN2SzZldklJVk00cGN3NzJIYzNNS0pQMlcvUjhrQ3RRWG9YeGRaS05ZbTNRZFY4aG45VlRZTktwWE1nd0RxdmtQR2EKSkk3WmpuSEtlN2lHMnJLUG1UNGRFdzBTRWU3VXEvRHBGWFlDNU9EZnFpQWVXMkdGWkVDcGtKY05yVlBTV2gySGFnQ1haV0swdm05cQpwL1VzUXUweXJiWWhucjY4Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDd3pDQ0FrcWdBd0lCQWdJQkFEQUtCZ2dxaGtqT1BRUURBakNCcWpFTE1Ba0dBMVVFQmhNQ1IxSXhEekFOQmdOVkJBY1RCa0YwCmFHVnVjekZFTUVJR0ExVUVDaE03U0dWc2JHVnVhV01nUVdOaFpHVnRhV01nWVc1a0lGSmxjMlZoY21Ob0lFbHVjM1JwZEhWMGFXOXUKY3lCRFpYSjBMaUJCZFhSb2IzSnBkSGt4UkRCQ0JnTlZCQU1UTzBobGJHeGxibWxqSUVGallXUmxiV2xqSUdGdVpDQlNaWE5sWVhKagphQ0JKYm5OMGFYUjFkR2x2Ym5NZ1JVTkRJRkp2YjNSRFFTQXlNREUxTUI0WERURTFNRGN3TnpFd016Y3hNbG9YRFRRd01EWXpNREV3Ck16Y3hNbG93Z2FveEN6QUpCZ05WQkFZVEFrZFNNUTh3RFFZRFZRUUhFd1pCZEdobGJuTXhSREJDQmdOVkJBb1RPMGhsYkd4bGJtbGoKSUVGallXUmxiV2xqSUdGdVpDQlNaWE5sWVhKamFDQkpibk4wYVhSMWRHbHZibk1nUTJWeWRDNGdRWFYwYUc5eWFYUjVNVVF3UWdZRApWUVFERXp0SVpXeHNaVzVwWXlCQlkyRmtaVzFwWXlCaGJtUWdVbVZ6WldGeVkyZ2dTVzV6ZEdsMGRYUnBiMjV6SUVWRFF5QlNiMjkwClEwRWdNakF4TlRCMk1CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCSktnUWVoTGdvUmM0dmd4RVptR1pFNEpKUytkUVM4S3JqVlAKZEpXeVVXUnJqV3ZtUDNDVjhBVkVSNlp5T0ZCMmxRSmFqcTRvbnZrdFRwbnZMRWh2VENVcDZORnhXOThkd1hVM3ROZjZlM3BDbkdvSwpWbHA4YVF1cWdBa2tiSDdCUnFOQ01FQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QU9CZ05WSFE4QkFmOEVCQU1DQVFZd0hRWURWUjBPCkJCWUVGTFFpQzRLWkpBRU9uTHZrRHYyLys1Y2drNWtxTUFvR0NDcUdTTTQ5QkFNQ0EyY0FNR1FDTUdmT0ZtSTRvcXhpUmFlcGxTVEEKR2llY01qdkF3Tlc2cWVmNEJFTlRoZTVTSWQ2ZDlTV0RQcDVZU3kvWFp4TU9JUUl3QmVGMUFkNW83U29mVFV3SkNBM3NTNjFrRnlqbgpkYzVGWlhJaEY4c2lRUTZNRTVnNG1sUnRtOHJpZk9vQ1dDS1IKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKSVNSRyBSb290IFgxCj09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRmF6Q0NBMU9nQXdJQkFnSVJBSUlRejdEU1FPTlpSR1BndTJPQ2l3QXdEUVlKS29aSWh2Y05BUUVMQlFBd1R6RUxNQWtHQTFVRQpCaE1DVlZNeEtUQW5CZ05WQkFvVElFbHVkR1Z5Ym1WMElGTmxZM1Z5YVhSNUlGSmxjMlZoY21Ob0lFZHliM1Z3TVJVd0V3WURWUVFECkV3eEpVMUpISUZKdmIzUWdXREV3SGhjTk1UVXdOakEwTVRFd05ETTRXaGNOTXpVd05qQTBNVEV3TkRNNFdqQlBNUXN3Q1FZRFZRUUcKRXdKVlV6RXBNQ2NHQTFVRUNoTWdTVzUwWlhKdVpYUWdVMlZqZFhKcGRIa2dVbVZ6WldGeVkyZ2dSM0p2ZFhBeEZUQVRCZ05WQkFNVApERWxUVWtjZ1VtOXZkQ0JZTVRDQ0FpSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnSVBBRENDQWdvQ2dnSUJBSzNvSkhQMEZEZnptNTRyClZ5Z2NoNzdjdDk4NGtJeHVQT1pYb0hqM2RjS2kvdlZxYnZZQVR5amIzbWlHYkVTVHRyRmovUlFTYTc4ZjB1b3hteUYrMFRNOHVrajEKM1huZnM3ai9FdkVobWt2QmlvWnhhVXBtWm15UGZqeHd2NjBwSWdiejVNRG1nSzdpUzQrM21YNlVBNS9UUjVkOG1VZ2pVK2c0cms4SwpiNE11MFVsWGpJQjB0dG92MERpTmV3TndJUnQxOGpBOCtvK3UzZHBqcStzV1Q4S09FVXQrend2by83VjNMdlN5ZTByZ1RCSWxESENOCkF5bWc0Vk1rN0JQWjdobS9FTE5LakQrSm8yRlIzcXlIQjVUMFkzSHNMdUp2VzVpQjRZbGNOSGxzZHU4N2tHSjU1dHVrbWk4bXhkQVEKNFE3ZTJSQ09GdnUzOTZqM3grVUNCNWlQTmdpVjUrSTNsZzAyZFo3N0RuS3hIWnU4QS9sSkJkaUIzUVcwS3RaQjZhd0JkcFVLRDlqZgoxYjBTSHpVdktCZHMwcGpCcUFsa2QyNUhON3JPckZsZWFKMS9jdGFKeFFaQktUNVpQdDBtOVNUSkVhZGFvMHhBSDBhaG1iV25PbEZ1CmhqdWVmWEtuRWdWNFdlMCtVWGdWQ3dPUGpkQXZCYkkrZTBvY1MzTUZFdnpHNnVCUUUzeERrM1N6eW5UbmpoOEJDTkF3MUZ0eE5yUUgKdXNFd01GeEl0NEk3bUtaOVlJcWlveW1DekxxOWd3UWJvb01EUWFIV0JmRWJ3cmJ3cUh5R08wYW9TQ3FJM0hhYWRyOGZhcVU5R1kvcgpPUE5rM3NnckRRb28vL2ZiNGhWQzFDTFFKMTNoZWY0WTUzQ0lyVTdtMllzNnh0MG5VVzcvdkdUMU0wTlBBZ01CQUFHalFqQkFNQTRHCkExVWREd0VCL3dRRUF3SUJCakFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjBHQTFVZERnUVdCQlI1dEZubWU3Ymw1QUZ6Z0FpSXlCcFkKOXVtYmJqQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFWUjlZcWJ5eXFGRFFETEhZR21rZ0p5a0lyR0YxWElwdStJTGxhUy9WOWxaTAp1Ymh6RUZuVElaZCs1MHh4KzdMU1lLMDVxQXZxRnlGV2hmRlFEbG5yenVCWjZickpGZStHblkrRWdQYms2WkdRM0JlYllodEY4R2FWCjBueHZ3dW83N3gvUHk5YXVKL0dwc01pdS9YMSttdm9pQk92LzJYL3FrU3Npc1JjT2ovS0tORnRZMlB3QnlWUzV1Q2JNaW9nemlVd3QKaER5QzMrNldWd1c2TEx2M3hMZkhUanVDdmpISUluTnprdEhDZ0tRNU9SQXpJNEpNUEorR3NsV1lIYjRwaG93aW01N2lhenRYT29KdwpUZHdKeDRuTENnZE5iT2hkanNudnpxdkh1N1VyVGtYV1N0QW16T1Z5eWdocXBaWGpGYUgzcE8zSkxGK2wrLytzS0FJdXZ0ZDd1K054CmU1QVcwd2RlUmxOOE53ZENqTlBFbHB6Vm1iVXE0SlVhZ0VpdVREa0h6c3hIcEZLVks3cTQrNjNTTTFOOTVSMU5iZFdoc2NkQ2IrWkEKSnpWY295aTNCNDNualRPUTV5T2YrMUNjZVd4RzFiUVZzNVp1ZnBzTWxqcTRVaTAvMWx2aCt3akNoUDRrcUtPSjJxeHE0Umdxc2FoRApZVnZUSDl3N2pYYnlMZWlOZGQ4WE0ydzlVL3Q3eTBGZi85eWkwR0U0NFphNHJGMkxOOWQxMVRQQW1SR3VuVUhCY25XRXZnSkJRbDluCkpFaVUwWnNudmdjL3ViaFBnWFJSNFhxMzdaMGo0cjdnMVNnRUV6d3hBNTdkZW15UHhnY1l4bi9lUjQ0L0tKNEVCcytsVkRSM3ZleUoKbStrWFE5OWIyMS8ramg1WG9zMUFuWDVpSXRyZUdDYz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQUMgUkFJWiBGTk1ULVJDTQo9PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGZ3pDQ0EydWdBd0lCQWdJUFhaT05NR2MyeUFZZEdzZFVoR2tITUEwR0NTcUdTSWIzRFFFQkN3VUFNRHN4Q3pBSkJnTlZCQVlUCkFrVlRNUkV3RHdZRFZRUUtEQWhHVGsxVUxWSkRUVEVaTUJjR0ExVUVDd3dRUVVNZ1VrRkpXaUJHVGsxVUxWSkRUVEFlRncwd09ERXcKTWpreE5UVTVOVFphRncwek1EQXhNREV3TURBd01EQmFNRHN4Q3pBSkJnTlZCQVlUQWtWVE1SRXdEd1lEVlFRS0RBaEdUazFVTFZKRApUVEVaTUJjR0ExVUVDd3dRUVVNZ1VrRkpXaUJHVGsxVUxWSkRUVENDQWlJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dJUEFEQ0NBZ29DCmdnSUJBTHB4Z0hwTWhtNS95Qk50d01aOUhBQ1hqeXdNSTdzUW1rQ3BHcmVIaVBpYlZtcjc1bnVPaTVLT3B5VmRXUkhiTmk2M1VSY2YKcVFnZkJCY2tXS28zU2hqZjVUblVWLzNYd1N5UkFaSGlJdFFEd0ZqOGQwZnNqejUwUTdxc05JMU5PSFpuanJESWJ6QXpXSEZjdFBWcgpidFFCVUxnVGZteEtvMG5SSUJudXZNQXBHR1duM3Y3djNRcVFJZWNhWjVKQ0VKaGZUekM4UGh4RnRCRFhhRUFVd0VENjUzY1hldVlMCmoyVmJQTm1hVXR1MXZaNUd6ejNya1FVQ3dKYXlka3hORUpZN2t2cWNmdytaMzc0ak5VVWVBbHordGFpYm1TWGFYdk1pd3puMTVDb3UKMDhZZnhHeXF4UnhxQVFWS0w5TEZ3YWcwSmwxbXBkSUNJZmtZdHdiMVRwbHZxS3RNVWVqUFVCakZkOGc1Q1N4SmtqS1pxTHNYRjNtdwpXc1htbzhSWlpVYzFnMTZwNkRVTG1idmt6U0RHbTBvR09iVm8vQ0s2N2xXTUswN3E4N0hqL0xhWm10VkMrbkZOQ00rSEhtcHhmZm5UCnRPbWxjWUY3d2s1SGxxWDJkb1dqS0kvcGdHNkJVNlZ0WDdoSStjTDVOcVl1U2YrNGxzS01CN09iaUZqODZ4c2MzaTF3NHBlU01LR0oKNDd4VnFDZldTKzJRcll2Nll5VlpMYWcxM2NxWE03emx6Y2VkMGV6dlhnNUtrQVltWTYyNTJUVXRCN3AyWlN5c1Y0OTk5QWVVMTRFQwpsbDJqQjBuVmV0QlgrUnZuVTBaMXFyQjVRc3RvY1FqcFlMMDVhYzcwcjhOV1FNZXRVcUlKNUcrR1I0b2Y2eWduWFlNZ3J3VEpiRmFhCmkwYjFBZ01CQUFHamdZTXdnWUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFPQmdOVkhROEJBZjhFQkFNQ0FRWXdIUVlEVlIwT0JCWUUKRlBkOXhmM0U2Sm9iZDJTbjlSMmd6TCtIWUpwdE1ENEdBMVVkSUFRM01EVXdNd1lFVlIwZ0FEQXJNQ2tHQ0NzR0FRVUZCd0lCRmgxbwpkSFJ3T2k4dmQzZDNMbU5sY25RdVptNXRkQzVsY3k5a2NHTnpMekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBZ0VBQjVCSzMvTWpUdkRECm5GRmxtNXdpb29vTWhmTnpLV3ROL2dIaXFReGpBYjhFWjZXZG1GLzlBUlA2N0pwaTZZYit0bUxTYmt5VSs4QjFSWHhsRFBpeU44K3MKRDgrTmIva1o5NC9zSHZKd252REt1TyszLzNZM2RsdjJib2p6cjJJeUlwTU5PbXFPRkdZTUxWTjBWMlVlMWJMZEk0RTdwV1lqSjJjSgpqK0YzcWtQTlpWRUk3VkZZL3VZNStjdEhoS1FWOFhhN3BPNmtPOFJmNzdJemxoRVl0OGxsdmhqaG82VGMraGo1MDd3VG16bDZOTHJUClFmdjZNb29xdHl1R0MybURPTDdOaWk0TGNLMk5KcEx1SHZVQkt3cloxcGViYnVDb0dSdzZJWXNNSGtDdEErZmRabjcxdVNBTkEraVcKK1lKRjFEbmdvQUJkMTVqbWZaNW5jOE9hS3Zlcmk2RTZGTzgwdkZJT2laaWFCRUNFSFg1RmFaTlh6dXZPK0ZCOFR4eHVCRU9iK2RZNwpJeGpwNm83UlRVYU44VHZrYXNxNit5TzNtL3FaQVNsYVdGb3Q0L25VYlE0bXJjRnVOTHd5K0F3RittV2oyenMzZ3lMcDF0eHlNLzFkCjhpQzlkandqMmlqMytSdnJXV1RWM0Y5eWZpRDh6WW0xa0dkTlluby9UcTBkd3puK2V2UW9GdDlCOWtpQUJkY1BVWG1zRUt2VTdBTm0KNW1xd3VqR1NRa0JxdmpyVGN1RnFOMVc4ckIyVnQybGg4a09SZE9hZzB3b2tScUVJcjliYVJSbVcxRk1kVzRSNThNRDNSKytMajhVRwpycDFNWXAzL1JnVDQwOG0yRUNWQWRmNFdxc2xLWUlZdnV1OHdkK1JVNHJpRW1WaUFxaE9MVVRwUFNQYUx0ck09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkFtYXpvbiBSb290IENBIDEKPT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRFFUQ0NBaW1nQXdJQkFnSVRCbXlmejVtL2pBbzU0dkI0aWtQbWxqWmJ5akFOQmdrcWhraUc5dzBCQVFzRkFEQTVNUXN3Q1FZRApWUVFHRXdKVlV6RVBNQTBHQTFVRUNoTUdRVzFoZW05dU1Sa3dGd1lEVlFRREV4QkJiV0Y2YjI0Z1VtOXZkQ0JEUVNBeE1CNFhEVEUxCk1EVXlOakF3TURBd01Gb1hEVE00TURFeE56QXdNREF3TUZvd09URUxNQWtHQTFVRUJoTUNWVk14RHpBTkJnTlZCQW9UQmtGdFlYcHYKYmpFWk1CY0dBMVVFQXhNUVFXMWhlbTl1SUZKdmIzUWdRMEVnTVRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQwpnZ0VCQUxKNGdISEtlTlhqY2E5SGdGQjBmVzdZMTRoMjlKbG85MWdoWVBsMGhBRXZyQUl0aHRPZ1EzcE9zcVRRTnJvQnZvM2JTTWdICkZ6Wk05TzZJSThjKzZ6ZjF0Um40U1dpdzN0ZTVkamdkWVo2ay9vSTJwZVZLVnVSRjRmbjl0QmI2ZE5xY216VTVML3F3SUZBR2JIclEKZ0xLbSthL3NSeG1QVURnSDNLS0hPVmo0dXRXcCtVaG5NSmJ1bEhoZWI0bWpVY0F3aG1haFJXYTZWT3VqdzVINVNOei8wZWd3TFgwdApkSEExMTRnazk1N0VXVzY3YzRjWDhqSkdLTGhEK3JjZHFzcTA4cDhrRGkxTDkzRmNYbW4vNnBVQ3l6aUtybEE0Yjl2N0xXSWJ4Y2NlClZPRjM0R2ZJRDV5SEk5WS9RQ0IvSUlERWdFdytPeVFtamdTdWJKcklxZzBDQXdFQUFhTkNNRUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIKL3pBT0JnTlZIUThCQWY4RUJBTUNBWVl3SFFZRFZSME9CQllFRklRWXpJVTA3THdNbEpRdUNGbWN4N0lRVGdvSU1BMEdDU3FHU0liMwpEUUVCQ3dVQUE0SUJBUUNZOGpkYVFaQ2hHc1YyVVNnZ05pTU9ydVlvdTZyNGxLNUlwREIvRy93a2pVdTB5S0dYOXJieGVuRElVNVBNCkNDamptQ1hQSTZUNTNpSFRmSVVKclU2YWRUckNDMnFKZUhaRVJ4aGxiSTFCamp0L21zdjB0YWRRMXdVc04rZ0RTNjNwWWFBQ2J2WHkKOE1XeTdWdTMzUHFVWEhlZUU2Vi9VcTJWOHZpVE85NkxYRnZLV2xKYllLOFU5MHZ2by91ZlFKVnRNVlQ4UXRQSFJoOGpyZGtQU0hDYQoyWFY0Y2RGeVF6UjFibGRad2dKY0ptQXB6eU1aRm82SVE2WFU1TXNJK3lNUlEraERLWEppb2FsZFhnalVrSzY0Mk00VXd0QlY4b2IyCnhKTkRkMlpod0xub1FkZVhlR0FEYmtweXJxWFJmYm9Rbm9ac0c0cTVXVFA0NjhTUXZ2RzUKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQW1hem9uIFJvb3QgQ0EgMgo9PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGUVRDQ0F5bWdBd0lCQWdJVEJteWYwcFkxaHA4S0QrV0dlUGhiSnJ1S056QU5CZ2txaGtpRzl3MEJBUXdGQURBNU1Rc3dDUVlEClZRUUdFd0pWVXpFUE1BMEdBMVVFQ2hNR1FXMWhlbTl1TVJrd0Z3WURWUVFERXhCQmJXRjZiMjRnVW05dmRDQkRRU0F5TUI0WERURTEKTURVeU5qQXdNREF3TUZvWERUUXdNRFV5TmpBd01EQXdNRm93T1RFTE1Ba0dBMVVFQmhNQ1ZWTXhEekFOQmdOVkJBb1RCa0Z0WVhwdgpiakVaTUJjR0ExVUVBeE1RUVcxaGVtOXVJRkp2YjNRZ1EwRWdNakNDQWlJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dJUEFEQ0NBZ29DCmdnSUJBSzJXbnkyY1NreEtnWGxSbWV5S3kydGdVUk84VFcwRy9MQUlqZDBaRUdySEpndzEyTUJ2SUlUcGxMR2JoUVBEVzl0SzZNajQKa0hiWlcwL2pUT2dHTmszTW1xdzlESkFya3RRR0dXQ3NOMFI1aFlHQ3JWbzM0QTNNbmFaTVVuYnFRNTIzQk5GUTlsWGcxZEttU1lYcApOK25LZnE1Y2xVMUltait1SUZwdGlKWFpOTGhTR2tPUXNMOXNCYm0yZUxmcTBPUTZQQkpUWXY5SzhudStOUVdwRWpUajgyUjBZaXc5CkFFbGFLUDR5Ukx1SDNXVW5BbkU3MmtyM0g5ck45eUZWa0U4UDdLNkM0WjlyMlVYVHUvQmZoKzA4TERtRzJqL2U3SEpWNjNtanJkdmQKZkxDNkhNNzgzazgxZHM4UCtIZ2ZhalpSUmlkaFcrbWV6L0NpVlgxOEpZcHZMN1RGejRRdUsvME5VUkJzKzE4YnZCdCt4YTQ3bUFFeAprdjhMVi9TYXNybFg2YXZ2RFhiUjhPNzB6b2FuNEc3cHRHbWgzMm4yTThacExwY1RucVdIc0ZjUWdUZkpVN083Zi9hUzBaelFHUFNTCmJ0cURUNlpqbVV5bCsxN3ZJV1I2SUY5c1pJVVZ5emZwWWd3TEtoYmNBUzR5Mmo1TDlaNDY5aGRBbE8rZWtRaUcrcjVqcUZvejdNdDAKUTVYNWJHbFNOc2NwYi94VkExd2YrNSs5Uit2blNVZVZDMDZKSWdsSjRQVmhIdkcvTG9weWJvQlovMWM2K1hVeW8wNWY3TzBvWXRsTgpjL0xNZ1JkZzdjM3IzTnVueXNWK0FyM3lWQWhVL2JRdENTd1hWRXFZMFZUaFVXY0kwdTF1Zm04LzBpMkJXU2xteTVBNWxSRWVkQ2YrCjNldXZBZ01CQUFHalFqQkFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEZ1lEVlIwUEFRSC9CQVFEQWdHR01CMEdBMVVkRGdRV0JCU3cKRFBCTU1QUUZXQUpJL1RQbFVxOUxoT05tVWpBTkJna3Foa2lHOXcwQkFRd0ZBQU9DQWdFQXFxaUFqdzU0bytDaTFNM205Wmg2TytvQQpBN0NYRHBPOFdxajJMSXh5aDZteC9IOXovV054ZUtXSFdjOHc0UTBRc2hOYWJZTDFhdWFBbjZBRkMyamtSMnZIYXQrMi9YY3ljdVVZCitnbjBvSk1zWGRLTWRZVjJaWkFNQTNtM01TTmpyWGlEQ1lab2hNci8rYzhtbXBKNTU4MUx4ZWRocHhmTDg2a1NrNU5ycCtndlU1TEUKWUZpd3pBSlJHRnVGaldKWlk3YXR0TjZhK3liM0FDZkFYVlUzZEpuSlVIL2pXUzVFNHl3bDd1eE1NbmUwbnhycFMxMGd4ZHI5SEljVwp4a1BvMUxzbW1rVndYcWtMTjFQaVJuc24vZUJHOG9tM3pFSzJ5eWdtYnRtbHlUcklRUk5nOTFDTUZhNnliUm9WR2xkNDVwSXEyV1dRCmdqOXNBcSt1RWpvbmxqWUUxeDJpZ0dPcG0vSGx1clI4RkxCT3liRWZkRjg0OWxIcW0vb3NvaEhVcVMwbkdrV3hyN0pPY1EzQVdFYlcKYVFiTFU4dXovbXRCelVGK2ZVd1BmSEo1ZWxuTlhrb09ySnVwbUhONWZMVDB6TG00Qnd5eWRGeTR4MitJb1pDbjlLcjV2MmM2OUJvVgpZaDYzbjc0OXNTbXZaNkVTOGxnUUdWTURNQnU0R29uMm5MMlhBNDZqQ2ZNZGl5SHh0Ti9rSE5HZlpRSUc2bHpXRTdPRTc2S2xYSXgzCkthZG93R3V1UU5Lb3RPck44STFMT0p3Wm1oc29WTGlKa08vS2RZRStIdkprSk1jWXIwNy9SNTRIOWpWbHBOTUtWdi8xRjJSczc2Z2kKSlVtVHR0OEFGOXBZZmwzdXhSdXcwZEZmSVJESCtmTzZBZ29uQjhYeDFzZlQ0UHNKWUd3PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpBbWF6b24gUm9vdCBDQSAzCj09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ0akNDQVZ1Z0F3SUJBZ0lUQm15ZjFYU1hObVkvT3d1YTJlaWVkZ1B5U2pBS0JnZ3Foa2pPUFFRREFqQTVNUXN3Q1FZRFZRUUcKRXdKVlV6RVBNQTBHQTFVRUNoTUdRVzFoZW05dU1Sa3dGd1lEVlFRREV4QkJiV0Y2YjI0Z1VtOXZkQ0JEUVNBek1CNFhEVEUxTURVeQpOakF3TURBd01Gb1hEVFF3TURVeU5qQXdNREF3TUZvd09URUxNQWtHQTFVRUJoTUNWVk14RHpBTkJnTlZCQW9UQmtGdFlYcHZiakVaCk1CY0dBMVVFQXhNUVFXMWhlbTl1SUZKdmIzUWdRMEVnTXpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkNtWHA4WkIKZjhBTm0rZ0JHMWJHOGxLbHVpMnlFdWpTTHRmNnljWFlxbTBmYzRFN081aHJPWHd6cGNWT2hvNkFGMmhpUlZkOVJGZ2RzemZsWndqcgpadDZqUWpCQU1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RnWURWUjBQQVFIL0JBUURBZ0dHTUIwR0ExVWREZ1FXQkJTcnR0dlhCcDQzCnJEQ0dCNUZ3eDV6RUdiRjR3REFLQmdncWhrak9QUVFEQWdOSkFEQkdBaUVBNElXU294ZTNqZmtyQnFXVHJCcVlhR0Z5K3VHaDBQc2MKZUdDbVE1bkZ1TVFDSVFDY0F1L3hsSnl6bHZucnhpcjR0aXorT3BBVUZ0ZU1ZeVJJSE44d2ZkVm9Pdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkFtYXpvbiBSb290IENBIDQKPT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQjhqQ0NBWGlnQXdJQkFnSVRCbXlmMThHN0VFd3BRK1Z4ZTNzc3lCckJEakFLQmdncWhrak9QUVFEQXpBNU1Rc3dDUVlEVlFRRwpFd0pWVXpFUE1BMEdBMVVFQ2hNR1FXMWhlbTl1TVJrd0Z3WURWUVFERXhCQmJXRjZiMjRnVW05dmRDQkRRU0EwTUI0WERURTFNRFV5Ck5qQXdNREF3TUZvWERUUXdNRFV5TmpBd01EQXdNRm93T1RFTE1Ba0dBMVVFQmhNQ1ZWTXhEekFOQmdOVkJBb1RCa0Z0WVhwdmJqRVoKTUJjR0ExVUVBeE1RUVcxaGVtOXVJRkp2YjNRZ1EwRWdOREIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJOS3JpamRQbzFNTgovc0dLZTB1b2UwWkxZN0JpOWkwYjJ3aHhJZElBNkdPOW1pZjc4RGx1WGVvOXBjbUJxcU5iSUpoRlhSYmIvZWdRYmVPYzRPTzlYNFJpCjgzQmtNNkRMSkM5d3VvaWhLcUIxK0lHdVlnYkVnZHM1Ymltd0h2b3VYS05DTUVBd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBT0JnTlYKSFE4QkFmOEVCQU1DQVlZd0hRWURWUjBPQkJZRUZOUHN4enBsYnN6aDJuYWFWdnVjODRadFYrV0JNQW9HQ0NxR1NNNDlCQU1EQTJnQQpNR1VDTURxTElmRzlmaEd0ME85WWxpL1c2NTEra0kwcnoyWlZ3eXpqS0tsd0NrY084RGRaRXY4dG1aUW9UaXBQTlUweldnSXhBT3AxCkFFNDd4RHFVRXBISldFYWRJUk55cDRpY2l1Uk1TdHVXMUt5TGEydEpFbE16cmRma3ZpVDh0UXAyMUtXOEVBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRVl6Q0NBMHVnQXdJQkFnSUJBVEFOQmdrcWhraUc5dzBCQVFzRkFEQ0IwakVMTUFrR0ExVUVCaE1DVkZJeEdEQVdCZ05WQkFjVApEMGRsWW5wbElDMGdTMjlqWVdWc2FURkNNRUFHQTFVRUNoTTVWSFZ5YTJsNVpTQkNhV3hwYlhObGJDQjJaU0JVWld0dWIyeHZhbWxyCklFRnlZWE4wYVhKdFlTQkxkWEoxYlhVZ0xTQlVWVUpKVkVGTE1TMHdLd1lEVlFRTEV5UkxZVzExSUZObGNuUnBabWxyWVhONWIyNGcKVFdWeWEyVjZhU0F0SUV0aGJYVWdVMDB4TmpBMEJnTlZCQU1UTFZSVlFrbFVRVXNnUzJGdGRTQlRUU0JUVTB3Z1MyOXJJRk5sY25ScApabWxyWVhOcElDMGdVM1Z5ZFcwZ01UQWVGdzB4TXpFeE1qVXdPREkxTlRWYUZ3MDBNekV3TWpVd09ESTFOVFZhTUlIU01Rc3dDUVlEClZRUUdFd0pVVWpFWU1CWUdBMVVFQnhNUFIyVmllbVVnTFNCTGIyTmhaV3hwTVVJd1FBWURWUVFLRXpsVWRYSnJhWGxsSUVKcGJHbHQKYzJWc0lIWmxJRlJsYTI1dmJHOXFhV3NnUVhKaGMzUnBjbTFoSUV0MWNuVnRkU0F0SUZSVlFrbFVRVXN4TFRBckJnTlZCQXNUSkV0aApiWFVnVTJWeWRHbG1hV3RoYzNsdmJpQk5aWEpyWlhwcElDMGdTMkZ0ZFNCVFRURTJNRFFHQTFVRUF4TXRWRlZDU1ZSQlN5QkxZVzExCklGTk5JRk5UVENCTGIyc2dVMlZ5ZEdsbWFXdGhjMmtnTFNCVGRYSjFiU0F4TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEEKTUlJQkNnS0NBUUVBcjNVd002cTdhOU9aTEJJM2hObU5lNWVBMDI3bi81dFFsVDZRbFZaQzF4bDhKb1NOa3ZvQkhUb1A0bVE0dDR5OAo2SWo1aXlTckxxUDFOK1JBamhnbGVZTjFIenYvYktqRnhsYjR0TzJLUktPcmJFejhIZERjNzJpOXorU3F6dkJWOTZJMDFJTnJOM3djCnd2NjFBK3hYenJ5MHRjWHRBQTlUTnlwTjlFOE1nL3VHejh2K2pFNjloL21uaXlGWG5IcmZBMmVKTEoyWFlhY1F1RldRZnc0dEp6aDAKMytmOTJrNFM0MDBWSWdMSTRPRDhENjJLMThsVVVNdzdEOG9XZ0lUUVVWYkRqbFovaVNJekwrYUZDcjJscUJzMjN0UGNMRzA3eHhPOQpXU01zNXVXazk5Z0w3ZXFRUUVTb2xidVQxZENBTkxaR2VBNGZBSk5HNGU3cCtleFBGd0lEQVFBQm8wSXdRREFkQmdOVkhRNEVGZ1FVClpUL0hpb2JHUE4wOFZGdzErRHJ0VWd4SFY4Z3dEZ1lEVlIwUEFRSC9CQVFEQWdFR01BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RRWUoKS29aSWh2Y05BUUVMQlFBRGdnRUJBQ28vNGZFeWpxN2htRnhMWHM5ckhtb0owaUtwRXNkZVYzMXpWbVNBaEhxVDVBbTVFTTJmS2lmaApBSGUrU01nMXFJR2Y1TGdzeVg4T3NOSkxOMTNxdWRVTFhqUzk5SE1wdyswbUZaeCtDRk9LV0kzUVN5amZ3YlBmSVBQNTQrTTYzOHljCmxOaE9UOE5yRjdmM2N1aXRaak8xSlZPcjRQaE1xWjM5OGcyNnJyblpxc1pyK1pPN3JxdTRsendER3JwRHhwYTVSWEk0czZlaGxqMlIKZTM3QUlWTk1oKzN5QzFTVlVaUFZJcVVOaXZHVERqNVVEckRZeVU3YzhqRXlWdXBrK2VxMW5SWm1Rbkx6ZjlPeE1VUDhwSTRYOFcwagpxNVJtK0szN0R3aHVKaTEvRndjSnNvejdVTUNmbG8zUHR2MEFuVm9VbXI4Q1JQWEJ3cDhpWHFJUG9lTT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKR0RDQSBUcnVzdEFVVEggUjUgUk9PVAo9PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGaURDQ0EzQ2dBd0lCQWdJSWZRbVgvdkJINm5vd0RRWUpLb1pJaHZjTkFRRUxCUUF3WWpFTE1Ba0dBMVVFQmhNQ1EwNHhNakF3CkJnTlZCQW9NS1VkVlFVNUhJRVJQVGtjZ1EwVlNWRWxHU1VOQlZFVWdRVlZVU0U5U1NWUlpJRU5QTGl4TVZFUXVNUjh3SFFZRFZRUUQKREJaSFJFTkJJRlJ5ZFhOMFFWVlVTQ0JTTlNCU1QwOVVNQjRYRFRFME1URXlOakExTVRNeE5Wb1hEVFF3TVRJek1URTFOVGsxT1ZvdwpZakVMTUFrR0ExVUVCaE1DUTA0eE1qQXdCZ05WQkFvTUtVZFZRVTVISUVSUFRrY2dRMFZTVkVsR1NVTkJWRVVnUVZWVVNFOVNTVlJaCklFTlBMaXhNVkVRdU1SOHdIUVlEVlFRRERCWkhSRU5CSUZSeWRYTjBRVlZVU0NCU05TQlNUMDlVTUlJQ0lqQU5CZ2txaGtpRzl3MEIKQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBMmFNVzhNaDBkSGViN3pNTk93WitWZnkxWUk5MmhoSkNmVlptUG9pQzdYSmpEcDZMM1RRcwpBbEZSd3huOVdWU0V5ZkZyczB5dzZlaEdYVGpHb3FjdUVWZTZnaFdpbkk5dHNKbEtDdkxyaVhCalRubkV0MXU5b2wyeDhrRUNLNjJwCk9xUHNlUXJzWHpyai9lK0FQSzAwbXhxcmlDWjdWcUtDaGgvck5ZbURmMSt1S1U0OXRtN3Nyc0h3SjV1dTQvVHM3NjUvOTRZOWNucnIKcGZ0WlRxZnJsWXdpT1huaExRaVB6THlSdUVIM0ZNRWpxY090bWtWRXM3TFhMTTNHS2VKUUVLNWN5NEtPRnhnMmZaZm1pSnF3VFRRSgo5Q3k1V21ZcXNCZWJuaDUyblVwbU1VSGZQL3ZGQnU4YnRuNGFSamIzWkdNNzR6a1lJK2RuZFJUVmRWZVNONzIrYWhzbVVQSTJKZ2FRCnhYQUJaRzEyWnVHUjIyNEh3R0dBTHJJdUw0eHdwOUU3UExPUjVHNjJ4RHR3OG15U2x3bk5SMzBZd1BPN25nL1dpNjRIdGxvUHpnc00KUjZmbFByaTlmY2ViTmFCaGx6cEJkUmZNSzVaM0twSWhIdG1WZGlCbmFNOE52ZC9XSHdscW11TE1jM0drTDMwU2dMZFRNRVplUzFTWgpEMmZKcGNqeUlNR0M3SjBSMzhJQyt4bzcwZTBnbXU5bFpKSVFEU3JpM25EeEdHZUNqR0hldUx6Ukw1ejdEOUFyN1J0MnVlUTVWZmo0Cm9SMjRxb0FBVElMbnNuOEp1THd3b0M4TjlWS2VqdmVTc3dvQUhRQlVsd2Jnc1FmWnh3OWNaWDA4YlZsWDVPMmxqZWxBVTU4VlM2QngKOWhvaDQ5cHdCaUZZRkllRmQzbXFnbmtDQXdFQUFhTkNNRUF3SFFZRFZSME9CQllFRk9MSlFKOU56dWlhb1h6UERqOWx4U21JYWhsUgpNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEZ1lEVlIwUEFRSC9CQVFEQWdHR01BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRRFJTVmZnCnA4eG9XTG9CRHlzWnpZMndZVVdzRWUxalVHbjRIMysrRm8vOW5lc0xxakpIZHRKbkpPMjlmRE15bHlySEJZWm1EUmQ5RkJVYjFPdjkKSDVyMlhwZHB0eG9scEFxemtUOWZOcXlMN0Zlb1B1ZUJpaGhYT1lWMEdrTEg2VnNUWDQvNUNPbVNkSTMxUjlLck85YjdlR1pPTm4zNQo2WkxwQk43OVNXUDhiZnNVY1pObkwwZEt0N24vSGlwemNFWXd2MXJ5TDNtbDRZME0yZm15WXplTU4yV0ZjR3BjV3dseXVhMWpQTEhkCitQd3l2emVHNUx1T21DZCt1aDhXNFhBUjhnUGZKV0l5SnlZWU1vU2Yvd0E2RTdxYVRmUlB1QlJ3SXJIS0s1RE9LY0Z3OUMrZGYvS1EKSHRaYTM3ZEcvT2FHK3N2Z0lIWjZ1cWJMOVh6ZVlxV3hpKzdlZ21hS1Rqb3dIeitBeTYwbnVneGUxOUN4VnNwM2NiSzFkYUZRcVVCRApGOElvMmM5U2kxdklZOVJDUHFBemVrWXU5d29nUmxSK2FrOHg4WUYrUW5RNFpYTW43c1o4dUk3WHBUclhtS0djakJCVjA5dEw3RUNRCjhzMXVWOUppRG54WGs3R25iYzJkZzdzcTUrVzJPM0ZZcmYzUlJieGFrZTVURlcvVFJRbDFicnFRWFI0RXp6ZmZIcWhtc1l6bUlHcnYKL0VoT2RKaENyeWx2TG1ySCszM1JaakVpeklZQWZtYURERUwwdlRTU3d4cnFUOHArY2swTGNJeW1TTHVtb1JUMisxaEVtUlN1cWd1VAphYUFwSlVxbHl5dmRpbVlIRm5nVlYzRWI3UFZIaFBPZU1UZDYxWDhrcmVTOC9mM01ib1BvREtpM1FXd0gzYjA4aHBjdjBnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKU1NMLmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGM1RDQ0E4V2dBd0lCQWdJSWV5eWIweGFBTXBrd0RRWUpLb1pJaHZjTkFRRUxCUUF3ZkRFTE1Ba0dBMVVFQmhNQ1ZWTXhEakFNCkJnTlZCQWdNQlZSbGVHRnpNUkF3RGdZRFZRUUhEQWRJYjNWemRHOXVNUmd3RmdZRFZRUUtEQTlUVTB3Z1EyOXljRzl5WVhScGIyNHgKTVRBdkJnTlZCQU1NS0ZOVFRDNWpiMjBnVW05dmRDQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVNCU1UwRXdIaGNOTVRZdwpNakV5TVRjek9UTTVXaGNOTkRFd01qRXlNVGN6T1RNNVdqQjhNUXN3Q1FZRFZRUUdFd0pWVXpFT01Bd0dBMVVFQ0F3RlZHVjRZWE14CkVEQU9CZ05WQkFjTUIwaHZkWE4wYjI0eEdEQVdCZ05WQkFvTUQxTlRUQ0JEYjNKd2IzSmhkR2x2YmpFeE1DOEdBMVVFQXd3b1UxTk0KTG1OdmJTQlNiMjkwSUVObGNuUnBabWxqWVhScGIyNGdRWFYwYUc5eWFYUjVJRkpUUVRDQ0FpSXdEUVlKS29aSWh2Y05BUUVCQlFBRApnZ0lQQURDQ0Fnb0NnZ0lCQVBrUDNhTXJmY3ZRS3Y3c1o0V201eTRidW5maDQvV3ZwT3o2U2wyUnhGZEhheGgzYTNieS9aUGtQUS9DCkZwNExac05XbEo0WGc0WE9WdS95RnYwQVl2VWlDVlRvWlJkT1FibmdUMGFYcWh2SXVHNWlYbW14WDlzcUFuNzhiTXJ6UWRqdDBPajgKUDJGSTdiQURGQjBRRGtzWjRMdE83SVpsL3pielhtY0NDNTJHVldIOWVqanQvdUlaQUxkdm9WQmlkWFE4b1BySUpaSzBibm9peC9nZQpvZU95M1pFeHF5c2RCUCtsU2dRMzZZV2tNeXY5NHRaVk5Id1pwRXBveDdLbzA3ZktvWk9JNjhHWHZJejVIZGtpaENSMHh3UTlhcWtwCms4enJ1RnZoL2w4bHFqUll5TUVqVkowYm1CSERPSngrUFlac3BROUFobndDOUZ3Q1R5akxybkdmRHpySU0vNFJKVFhxL0xyRllEM1oKZkJqVnNxblRkWGdEY2lMS09zTWY3eXpsTHFuNm5peTJVVWI5cndQVzZtQm82b1VXTm11RjZSN0FzOTNFSk55QUtvRkJiWlEreU9ESgpnVUVBbmw2L2Y4VUltS0lZTEVKQXMvbHZPQ2RMVG9EMFBZRkg0SWg4Nmh6T3RYVmNVUzRjSzM4YWNpam5BTFhSZE1iWDVKK3RCNU8yClV6VTEvRGZrdy9aZEZyNGhjOTZTQ3ZpZ1kycThscEpxUHZpOFpWV2IzdlVOaVNZRS9DVWFwaVZweThKdHluemlXVitYck92dkxzaTgKMXh0WlBDdk04aG5JazJzbll4blAvT2ttK01weG0zK1QvalJuaEU2WjYveXplQWt6Y0xwbXBuYnRHM1ByR3FVTnhDSVRJSlJXQ2s0cwpiRTZ4L2MrY0NicWlNKzJIQWdNQkFBR2pZekJoTUIwR0ExVWREZ1FXQkJUZEJBa0hvdlY2ZlZKVEVwS1Y3amlBSlEybVdUQVBCZ05WCkhSTUJBZjhFQlRBREFRSC9NQjhHQTFVZEl3UVlNQmFBRk4wRUNRZWk5WHA5VWxNU2twWHVPSUFsRGFaWk1BNEdBMVVkRHdFQi93UUUKQXdJQmhqQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFJQmdSbENuN0pwMGNIaDV3WWZHVmNwTnhKSzFvazFpT01xOGJzM0FEL0NVcgpkSVdRUFhocTlMbUxwWmM3dFJpUnV4Nm4rVUJia2ZsVm1hOGVFZEJjSGFkbTQ3R1VCd3d5T2FicUc3QjUyQjJjY0VUaml0M0UrWlVmCmlqaERQd0dGcFVlblBVYXl2T1VpYVBkN25OZ3NQZ29oeUMwenJML0ZnWmt4ZE1GMWNjVytzZkFqUmZTZGEvd1pZNTJqdkFUR0dBc2wKdTFPSkQ3T0FVTjVGN2tSL3E1UjRaSmpUOWlqZGg5aHdaWFQ3RHJrVDY2Y1BZYWt5bHN6ZXUrMWpUQmk3cVVEM29GUnVJSWh4ZFJqcQplclEwY3VBakozZGN0cERxaGlWQXErOHpEOHVmZ3I2aUlQdjJ0UzBhNXNLRnNYUVArOGhsQXFSU0FVZmRTU0xCdjlqcmE2eCszdXhqCk14VzNJd2lQeGcrTlFWcmRqc1c1aitWRlAzamJ1dEliUUxIK2NVMC80SUdpdWw2MDdCWGdrOTBJSDM3aFZaa0xJZDZUbmdyNzVxTkoKdlRZdy91ZDNzcUIxbDdVdGdZZ1haU0QzMnBBQW44bFN6RExLTlh6MVBRL1lLOWYxSm16SkJqU1dGdXB3V1JveWVYa0x0b2gvRDFKSQpQYjlzMktKRUx0Rk90M0pZMDRrVGxmNUVxL2pYaXh0dW5Md3NvRnZWYWdDdlh6ZmgxZm9RQzVpY2h1Y21qODd3N0c2S1Z3dUE0MDZ5CndLQmpZWkM2VldnM2RHcTJrdHVmb1lZaXRtVW5EdXkybjBKZzVHZkN0ZHBCQzhUVGkyRWJ2UG9ma1N2WFJBZGV1aW1zMmNYcDcxTkkKV3V1QThTaFlJYzJ3QmxYN0p6OVRrSENwQkI1WEo3az0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKU1NMLmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDalRDQ0FoU2dBd0lCQWdJSWRlYmZ5OEZvVzZnd0NnWUlLb1pJemowRUF3SXdmREVMTUFrR0ExVUVCaE1DVlZNeERqQU1CZ05WCkJBZ01CVlJsZUdGek1SQXdEZ1lEVlFRSERBZEliM1Z6ZEc5dU1SZ3dGZ1lEVlFRS0RBOVRVMHdnUTI5eWNHOXlZWFJwYjI0eE1UQXYKQmdOVkJBTU1LRk5UVEM1amIyMGdVbTl2ZENCRFpYSjBhV1pwWTJGMGFXOXVJRUYxZEdodmNtbDBlU0JGUTBNd0hoY05NVFl3TWpFeQpNVGd4TkRBeldoY05OREV3TWpFeU1UZ3hOREF6V2pCOE1Rc3dDUVlEVlFRR0V3SlZVekVPTUF3R0ExVUVDQXdGVkdWNFlYTXhFREFPCkJnTlZCQWNNQjBodmRYTjBiMjR4R0RBV0JnTlZCQW9NRDFOVFRDQkRiM0p3YjNKaGRHbHZiakV4TUM4R0ExVUVBd3dvVTFOTUxtTnYKYlNCU2IyOTBJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNUlFVkRRekIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQQpCRVZ1cVZERXBpTTJubDhvalJmTGxpSmtQOXg2amgzTUNMT2ljU1M2amttNUJCdEhsbGlyTFpYSTdaNElOY2duNjRtTVUxanJZb3IrCjhGc1BhekZTWTBFN2ljM3M3TGFOR2RNMEI5eTd4Z1ovd2tXVjdNdC9xQ1BnQ2VtQit2TkgwNk5qTUdFd0hRWURWUjBPQkJZRUZJTFIKaFhNdzV6VUUwNDRDa3Z2bHBOSEVJZWpOTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SHdZRFZSMGpCQmd3Rm9BVWd0R0ZjekRuTlFUVApqZ0tTKytXazBjUWg2TTB3RGdZRFZSMFBBUUgvQkFRREFnR0dNQW9HQ0NxR1NNNDlCQU1DQTJjQU1HUUNNRy9uNjFrUnBHRFBZYkNXCmUrMEYrUzhUa2R6dDVmeFFheEZHUnJNY0lRQml1NzdENStqTkI1bjVEUXRkY2o3RXFnSXdIN3k2QytJd0pQdDhiWUJWQ3BrK2dBMHoKNVdhanM2TzdwZFdMandrc3BsMSs0dkFIQ0dodDBueHBibC9mNVdwbAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpTU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUY2ekNDQTlPZ0F3SUJBZ0lJVnJZcHpUUzhlUFl3RFFZSktvWklodmNOQVFFTEJRQXdnWUl4Q3pBSkJnTlZCQVlUQWxWVE1RNHcKREFZRFZRUUlEQVZVWlhoaGN6RVFNQTRHQTFVRUJ3d0hTRzkxYzNSdmJqRVlNQllHQTFVRUNnd1BVMU5NSUVOdmNuQnZjbUYwYVc5dQpNVGN3TlFZRFZRUUREQzVUVTB3dVkyOXRJRVZXSUZKdmIzUWdRMlZ5ZEdsbWFXTmhkR2x2YmlCQmRYUm9iM0pwZEhrZ1VsTkJJRkl5Ck1CNFhEVEUzTURVek1URTRNVFF6TjFvWERUUXlNRFV6TURFNE1UUXpOMW93Z1lJeEN6QUpCZ05WQkFZVEFsVlRNUTR3REFZRFZRUUkKREFWVVpYaGhjekVRTUE0R0ExVUVCd3dIU0c5MWMzUnZiakVZTUJZR0ExVUVDZ3dQVTFOTUlFTnZjbkJ2Y21GMGFXOXVNVGN3TlFZRApWUVFEREM1VFUwd3VZMjl0SUVWV0lGSnZiM1FnUTJWeWRHbG1hV05oZEdsdmJpQkJkWFJvYjNKcGRIa2dVbE5CSUZJeU1JSUNJakFOCkJna3Foa2lHOXcwQkFRRUZBQU9DQWc4QU1JSUNDZ0tDQWdFQWp6WmxRT0hXVGNEWHRPbEcybXZxTTBmTlRQbDlmYjY5TFQzdzIzamgKaHFYWnVnbFhhTzFYUHFEUUNFR0Q1eWhCSkIvamNoWFFBUnI3WG5BanNzdWZPZVBQeFU3R2ttMG14bnU3czlvbm5RcUc2WUUzQmY3dwpjWEhzd3h6cFk2SVhGSjN2RzJmVGhWVUNBdFpKeWN4YTRiSDNiektmeWRRN2lFR29uTDNMcTl0dGV3a2Zva3h5a05vckNQelBQRlRPClp3K296MTJXR1F2RTQzTHJyZEY5SFNmdmt1c1F2MXZyTzYvUGdOM0IwcFlFVzNwK3BLazhPSGFrWW82Z09WN3FkODlkQUZtUFppdysKQjZLakJTWVJhWmZxaGJjUGxndEx5RURoVUxvdWlzdjNENW9pNTMrYU54UE44azBUYXlIUndNd2k4cUZHOWtScG5NcGhOUWNBYjlaaApDQkhxdXJqMjZiTmc1VTI1N0o4VVpzbFhXTnZOaDJuNGlvWVNBMGUvWmhOMnJIZDlOQ1NGZzgzWHFweVFHcDhoTEg5NHQyUzQyT2ltCjlIaXpWY3VFMGpMRWVLNmpqMkhkemdoVHJleUkvQlhrbWczbW54cDN6a3lQdUJRVlBXS2NoamdHQUdZUzVGbDJXbFBBQXBpaUVDdG8KUkh1T2VjNHpTbmFxVzRFV0c3V0syTkFBZTE1aXRBbldobU1PcGdXVlNib29pNGlUc2pRYzJLUlZicmNjME42WlZUc2o5Q0xnK1NsbQpKdXdnVUhmYlNndVB2dVVDWUhCQlh0U3VVRGtpRkNiTHNqdHpkRlZIQjNtQk9hZ3dFMFRsQklxdWxoTWxRZys1VThTYi9NM2tITjQ4CitxdldCa29mWjZhWU1CemRMTnZjR0pWWFpzYi9YSXRXOVhjQ0F3RUFBYU5qTUdFd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZkJnTlYKSFNNRUdEQVdnQlQ1WUx2VTQ5VTA5cmoxQm9BbHAzUGJSbW1vbmpBZEJnTlZIUTRFRmdRVStXQzcxT1BWTlBhNDlRYUFKYWR6MjBacApxSjR3RGdZRFZSMFBBUUgvQkFRREFnR0dNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUNBUUJXczQ3TENwMUpqcitreEpHN1poY0ZVWmgxCisrVlFMSHFlOFJUNnE5T0tQditSS1k5amk5aTBxVlFCRGI2VGhpLzVTbTNIWHZWWCtjcFZIQksrUnc4MnhkOXF0OXQxd2tjbGY3bngKWS9ob0xWVUUwZktOc0tUUHZEeGVIM2pucGFBZ2NMQUV4YmYzY3FmZUlnMjlNeVZHakdTU0p1TStMbU9XMnB1TVBmZ1lDZGNEekgyRwpndURLQkFkUlVOZi9rdFVNNzlxR241blg2N2V2YU9JNUpwUzZhTGUvZzlQcWVtYzlZbWV1SmVWeTZPTGs3SzRTOWtzclBKL3BzRUR6Ck9GU3ovYmRveU5yR2oxRThzdnVSM0J6bm01M2h0dzF5aitLa3hLbDQrZXNVck1aREJjSmxPU2dZQXNPQ3NwMEZ2bVh0bGw5bGREejcKQ1RVdWU1d1QvUnNQWGNkdGdUcFdEOHc3NGE4Q0x5S3NSc3BHUEtBY1ROWkV0RjR1WEJWbUNlRW1LZjdHVW1HNnNYUC93d3ljNVd4cQpsRDhVeWtBV2xZVHpXYW1zWDB4aGsyM1JPOHlpbFF3aXBtZG5SQzY1MmRLS1FiTm1DMXI3ZlNPbDhocXcvOTZiZzVRdTBUL2ZrcmVSCnJ3VTdaY2VnYkxITlloTERrQnZqSmM0MHZHOTNkckVRdy9jRkdzRFdyM1JpU0JkM2ttbVFZUnplbFlCMFZJOFlITVB6QTlDL3BFTjEKaGxNWWVnb3VDUncybjVIOWdvb2lTOUVPVUNYZHl3TU1GOG1EQUFoT05VMktpKzN3QXBSbUxFUi95NVVubGhldENUQ3N0bkVYYm9zWAo5aHdKMUMwN21LVngwMVFUMldEejlVdG1UL3J4N2lBU2piU3NWN0ZGWTZHc2RxbkMrdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClNTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ2xEQ0NBaHFnQXdJQkFnSUlMQ21jV3hidEJaVXdDZ1lJS29aSXpqMEVBd0l3ZnpFTE1Ba0dBMVVFQmhNQ1ZWTXhEakFNQmdOVgpCQWdNQlZSbGVHRnpNUkF3RGdZRFZRUUhEQWRJYjNWemRHOXVNUmd3RmdZRFZRUUtEQTlUVTB3Z1EyOXljRzl5WVhScGIyNHhOREF5CkJnTlZCQU1NSzFOVFRDNWpiMjBnUlZZZ1VtOXZkQ0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVTQkZRME13SGhjTk1UWXcKTWpFeU1UZ3hOVEl6V2hjTk5ERXdNakV5TVRneE5USXpXakIvTVFzd0NRWURWUVFHRXdKVlV6RU9NQXdHQTFVRUNBd0ZWR1Y0WVhNeApFREFPQmdOVkJBY01CMGh2ZFhOMGIyNHhHREFXQmdOVkJBb01EMU5UVENCRGIzSndiM0poZEdsdmJqRTBNRElHQTFVRUF3d3JVMU5NCkxtTnZiU0JGVmlCU2IyOTBJRU5sY25ScFptbGpZWFJwYjI0Z1FYVjBhRzl5YVhSNUlFVkRRekIyTUJBR0J5cUdTTTQ5QWdFR0JTdUIKQkFBaUEySUFCS29TUjVDWUcvdnZ3MEFIZ3lCTzhUQ0NvZ2JSOHBLR1lmTDJJV2pLQU1USDZrTUFWSWJjL1IvZkFMaEJZbHpjY0JZeQozaCtaMU16RkI4Z0lIMkVXQjFFOWZWd0hVK00xT0l6ZnpaL1pMZzFLdGhrdVduQmFCdTIrOEtHd3l0QUpLYU5qTUdFd0hRWURWUjBPCkJCWUVGRnZLWHVYZTBvR3F6YWd0WkZHMjJYS2JsK1pQTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SHdZRFZSMGpCQmd3Rm9BVVc4cGUKNWQ3U2dhck5xQzFrVWJiWmNwdVg1azh3RGdZRFZSMFBBUUgvQkFRREFnR0dNQW9HQ0NxR1NNNDlCQU1DQTJnQU1HVUNNUUNLNWtDSgpOK3ZwMVJQWnl0UnJKUE93UFlkR1dCcnNzZDl2KzFhNmNHdkhPTXpvc1l4UEQvZnhaM1lPZzlBZVVZOENNRDMySXlnbVRNWmdoNU1tCm03STFIcnJXOXp6UkhNNzZKVHltR29FVlcvTVNEMnp1WllySmg2ajVCK0JpbW94Y1NnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKR2xvYmFsU2lnbiBSb290IENBIC0gUjYKPT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZnekNDQTJ1Z0F3SUJBZ0lPUmVhN0E0TXp3NFZsU09iL1JWRXdEUVlKS29aSWh2Y05BUUVNQlFBd1RERWdNQjRHQTFVRUN4TVgKUjJ4dlltRnNVMmxuYmlCU2IyOTBJRU5CSUMwZ1VqWXhFekFSQmdOVkJBb1RDa2RzYjJKaGJGTnBaMjR4RXpBUkJnTlZCQU1UQ2tkcwpiMkpoYkZOcFoyNHdIaGNOTVRReE1qRXdNREF3TURBd1doY05NelF4TWpFd01EQXdNREF3V2pCTU1TQXdIZ1lEVlFRTEV4ZEhiRzlpCllXeFRhV2R1SUZKdmIzUWdRMEVnTFNCU05qRVRNQkVHQTFVRUNoTUtSMnh2WW1Gc1UybG5iakVUTUJFR0ExVUVBeE1LUjJ4dlltRnMKVTJsbmJqQ0NBaUl3RFFZSktvWklodmNOQVFFQkJRQURnZ0lQQURDQ0Fnb0NnZ0lCQUpVSDZIUEtadm5zRk1wN1BQY05DUEcwUlFzcwpnclJJeHV0YlBLNkR1RUdTTXhTa2IzL3BLc3pHc0locnhiYUowY2F5L3hUT1VSUWg3RXJkRzFyRzFvZnVUVG9WQnUxa1pndVNnTXBFCjNuT1VUdk9uaVg5UGVHTUl5QkpRYlVKbUwwMjVlU2hOVWhxS0dvQzNHWUVPZnNTS3ZHUk1JUnhEYU5jOVBJckZzbWJWa0pxM01RYkYKdnVKdE1nYW1Idm01NjZxanVMKytnbU5RMFBBWWlkL2tEM24xNnFJZkt0SndMbnZudkpPN2JWUGlTSHlNRUFjNC8yYXlkMkYrNE9xTQpQS3EwcFBiemxVb1NCMjM5akxLSno5Q2dZWGZJV0hTdzFDTTY5MTA2eXFMYm5RbmVYVVF0a1BHQnpWZVMrbjY4VUFSak5OOXJreGkrCmF6YXlPZVNzSkRhMzhPKzJIQk5YazdiZXN2amloYmR6b3JnMXFrWHk0SjAyb1c5VWl2RnlWbTR1aU1WUlFrUVZsTzZqeFRpV20wNU8KV2d0SDh3WTJTWGN3dkhFMzVhYnNJUWgxL09aaEZqOTMxZG1SbDRRS2JOUUNUWFRBRk8zOU9mdUQ4bDRVb1FTd0Mrbis3by9oYmd1eQpDTE5oWmdscXNRWTZaWlpad1BBMS9jbmFLSTBhRVlkd2dRcW9tblVkbmpxR0JRQ2UyNERXSmZuY0JaNG5XVXgyT1Z2cSthV2gySU1QCjBmL2ZNQkg1aGM4elNQWEtiV1FVTEhwWVQ5TkxDRW5GbFdRYVl3NTVQZld6ak1wWXJaeENSWGx1RG9jWlhGU3haYmEvakp2Y0Ura04KYjdndTNHZHV5WXNSdFlRVWlnQVpjSU41a1plUjFCb252emNlTWdmWUZHTThLRXl2QWdNQkFBR2pZekJoTUE0R0ExVWREd0VCL3dRRQpBd0lCQmpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJTdWJBV2preFBpb3VmaTF4eld4L0IveUdkVG9EQWZCZ05WCkhTTUVHREFXZ0JTdWJBV2preFBpb3VmaTF4eld4L0IveUdkVG9EQU5CZ2txaGtpRzl3MEJBUXdGQUFPQ0FnRUFneVh0Nk5IOWxWTE4KbnNBRW9KRnA1bHpRaE43Y3JhSlA2RWQ0MW1XWXFWdW9QSWQ4QW9yUmJyY1djK1pmd0ZTWTFYUyt3YzNpRVpHdEl4ZzkzZUZ5UkphMApsVjdBZTQ2WmVCWkRFMVpYczZLek83VjMzRUJ5cktQcm16VStzUWdob2VmRVF6ZDVNcjYxNTV3c1RMeERLWm1PTU5Pc0llRGpIZnJZCkJ6TjJWQUFpS3JsTklDNXdhTnJsVS95RFhOT2Q4djlFREVSbTh0TGp2VVlBR20wQ3VpVmRqYUV4VWQxVVJoeE4yNW1XN3hvY0JGeW0KRmU5NDRIbitYZHMrcWt4Vi9ab1ZxVy9ocHZ2ZmNERHB3KzVDUnUzQ2t3V0orbjFqZXovUWNZRjhBT2lZcmc1NE5NTWwrNjhLbnlCcgozVHNUanhLTTRrRWFTSHB6b0hkcHg3WmNmNExJSHY1WUd5Z3JxR3l0WG0zQUJkSjd0K3VBL2lVMy9nS2JhS3hDWGNQdTljemM4RkIxCjBqWnBuT1o3Qk45dUJtbTIzZ29KU0ZtSDYzc1VZSHBrcW1sRDc1SEhUT3dZM1d6dlV5Mk1tZUZlOG5JK3oxVEl2V2ZzcEE5TVJmL1QKdVRBakIweVBFTCtHbHRtWldyU1pWeHlrekxzVmlWTzZMQVVQNU1TZUdiRVlOTlZNbmJydDl4K3ZKSlVFZUtnRHUrNkI1ZHBmZkl0SwpvWkIwSmFlelBrdklMRmE5eDhqdk9PSmNrdkI1OTV5RXVuUXRZUUVnZm43UjhrOEhXVitMTFVOUzYwWU1sT0gxWmtkNWQ5VlVXeCt0CkpEZkxSVnBPb0VSSXlOaXdtY1VWaEFuMjFrbEp3R1c0NWhweGJxQ284WUxvUlQ1czFnTFhDbWVEQlZySnBCQT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDYVRDQ0FlK2dBd0lCQWdJUUlTcFdESzdhREt0QVJiOHJvaTA2NmpBS0JnZ3Foa2pPUFFRREF6QnRNUXN3Q1FZRFZRUUdFd0pEClNERVFNQTRHQTFVRUNoTUhWMGxUWlV0bGVURWlNQ0FHQTFVRUN4TVpUMGxUVkVVZ1JtOTFibVJoZEdsdmJpQkZibVJ2Y25ObFpERW8KTUNZR0ExVUVBeE1mVDBsVFZFVWdWMGxUWlV0bGVTQkhiRzlpWVd3Z1VtOXZkQ0JIUXlCRFFUQWVGdzB4TnpBMU1Ea3dPVFE0TXpSYQpGdzAwTWpBMU1Ea3dPVFU0TXpOYU1HMHhDekFKQmdOVkJBWVRBa05JTVJBd0RnWURWUVFLRXdkWFNWTmxTMlY1TVNJd0lBWURWUVFMCkV4bFBTVk5VUlNCR2IzVnVaR0YwYVc5dUlFVnVaRzl5YzJWa01TZ3dKZ1lEVlFRREV4OVBTVk5VUlNCWFNWTmxTMlY1SUVkc2IySmgKYkNCU2IyOTBJRWRESUVOQk1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFVE9sUXdNWVBjaGk4MlBHNnM0bmllVXFqRnFkcgpWQ1RiVWYvcTlBa2t3d3Npbjh0cUo0S0JEZExBcnpIa2RJSnV5aVhaakhXZDhkdlFtcUpMSVg0V3AyT1Ewam5Vc1lkNFh4aVdEMUFiCk5UY1Bhc2JjMlJOTnBJNlFOK2E5V3pHUm8xUXdVakFPQmdOVkhROEJBZjhFQkFNQ0FRWXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWQKQmdOVkhRNEVGZ1FVU0ljVXJPUERucEJnT3RmS2llN1RyWXkwVUdZd0VBWUpLd1lCQkFHQ054VUJCQU1DQVFBd0NnWUlLb1pJemowRQpBd01EYUFBd1pRSXdKc2RwVzl6VjU3TG55QXlNak1QZGVZd2JZOVhKVXBST1RZSktjeDZ5Z0lTcEpjQk1XbTFKS1dCNEUrSitTT3RrCkFqRUEyelFnTWdqL21ra0N0b2plRks5ZGJKbHhqUm8vaTlmZ29qYUdIQWVDT25aVC9jS2k3ZTk3c0lCUFdBOUxVem05Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClVDQSBHbG9iYWwgRzIgUm9vdAo9PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZSakNDQXk2Z0F3SUJBZ0lRWGQreDJscWo3VjIrV21VZ1pRT1E3ekFOQmdrcWhraUc5dzBCQVFzRkFEQTlNUXN3Q1FZRFZRUUcKRXdKRFRqRVJNQThHQTFVRUNnd0lWVzVwVkhKMWMzUXhHekFaQmdOVkJBTU1FbFZEUVNCSGJHOWlZV3dnUnpJZ1VtOXZkREFlRncweApOakF6TVRFd01EQXdNREJhRncwME1ERXlNekV3TURBd01EQmFNRDB4Q3pBSkJnTlZCQVlUQWtOT01SRXdEd1lEVlFRS0RBaFZibWxVCmNuVnpkREViTUJrR0ExVUVBd3dTVlVOQklFZHNiMkpoYkNCSE1pQlNiMjkwTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEEKTUlJQ0NnS0NBZ0VBeGVZcmIzenZKZ1VubzRFazJtL0xBZm1abXFreXdpS0hZVUdSTzh2RGFCc0d4VXlwSzhGbkZ5SWRLKzM1S1ltVApvbmk5a211Z293Mmlmc3FUczZiUmpEWFZkZmtYOXM5RnhlVjY3SGVUb0k4anJnNGFBMysrMU5EdExudXJSaU5iL3l6bVZIcVV3Q29WCjhNbU5zSG83Sk9IWGFPSXhQQVl6UnJaVUVhYWxMeUpVS2xnTkFRTHgraFZSWjJ6QSt0ZTJHMy9SVm9ndkdqcU5PN3VDRWVCSEFOQlMKaDZ2N2huNFBKR3RBblRSbnZJM0hMWVp2ZVQ2T3FUd1hTMyt3bWVPd2NXRGNDL1Zrdzg1RHZHMXh1ZExlSjF1SzZOakdydUZaZmM4bwpMVFc0bFZZYThiSllTN2NTTjhoOHMrMUxnT0dOK2pJanRtKzNTSlVJc1VST2hZdzZBbFFnTDkrL1YwODdPcEFoMThFbU5WUWc3TWMvClIrenZXcjlMZXNHdE94ZFFYR0xZRDB0SzNDdjZicnh6a3Mzc3gxRG9RWmJYcVg1dDJPa2RqNHExdVZpU3VrcVNLd3hXL1lEckNQQmUKS1c0YkhBeXZqNU9KcmR1OW81NGh5b2taN04rMXd4cnJGdjU0Tmt6V2J0QStGeHlRRjJzbXV2dDZMNzhSSEJnT0xYTURqNkRsTmFCYQo0a3gxSFhIaE9UaFRlRURNZzVQWENwNmRXNCtLNU9YZ1NPUklza2ZOVGlwMUtudnlJdmJKdmdtUmxsZDZpSWlzN25Dcytkd3A0d3djCk94Sk9STmFuVHJBbXlQUFpHcGVSYU9ydmpVWUcwbFpGV0pvOERBK0R1QVVsd3puUE82UTBpYmQ1RWk5SHhlZXBsMm44cG5kbnRkOTcKOFhwbEZlUmhWbVVDQXdFQUFhTkNNRUF3RGdZRFZSMFBBUUgvQkFRREFnRUdNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwTwpCQllFRklIRWpNejE1REQvcFF3SVg0d1ZaeUYwQWQvZk1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQ0FRQVRaU0wxaml1dFJPVEwvN2xvCjVzT0FTRDBFZS9vakwzcnROdHF5em0zMjVwN2xYMWlQeXpjeW9jaGx0cTQ0UFRVYlBydzd0Z1RRdlBsSjladjNoY1UydHN1OCtNZzUKMWVSZkI3MFZWSmQweXNydFQ3cTZaSGFmZ2JpRVJVbE1qVytpNjdITTBjT1Uya1RDNXVMcUdPaWlIeWNGdXRmbDFxbk4zZTkybUkwQQpEczBiK2dPM2pvQllEaWMvVXZ1VW9zcGVaY25XaE5xNU5YSHpKc0JQZCthQko5SjNPNW9VYjNuMDl0RGgwNVM2MEZkUnZTY0ZEY0g5CnlCSXc3bStORVNzSW5kVFV2NEJGRkpxSVJOb3c2clNuNCs3dlc0TFZQdGF0ZUpMYlhEenoySzM2dUd0L3hEWW90Z0lWaWxRc25MQVgKYzQ3UU42TVVQSmlWQUF3cEJWdWVTVW14WDhmank4OG5aWTQxRjdkWHlERFpRVnU1Rkxib3dnK1VNYWVVbU14cTY3WGhKL1VRcUFIbwpqaEppNklqTXRYOUdsOENiRUdZNEdqWkdYeUpvUGQvSnhoTW5xMU1HcktJOGhnWmxiN0Yrc1NsRW1xTzZTV2tvYVkvWDVWK3RCSVprCmJ4cWdETVVJWXM2QW85RHo3R2pldmpQSEYxdC9nTVJNVExHbWhJckRPN2dKelJTQnVoampWRmMyL3RzdmZFZWhPalBJK1ZnN1JFK3gKeWdLSkJKWW9hTVZMdUNhSnU5WXpMMURWL3BxSnVoZ3lrbFRHVytDZCtWN2xEU0tiOXRyaXlDR3lZaUdxaGtDeUxtVFRYOGpqZmhGbgpSUjhGL3VPaTc3T29zL045ai9nTUh5SWZMWEMwdUFFMGRqQUE1U040cDFiWFVCK0srd2Ixd2hudzBBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKVUNBIEV4dGVuZGVkIFZhbGlkYXRpb24gUm9vdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGV2pDQ0EwS2dBd0lCQWdJUVQ5SXJqL1ZreURPZVR6UllaaU53WURBTkJna3Foa2lHOXcwQkFRc0ZBREJITVFzd0NRWURWUVFHCkV3SkRUakVSTUE4R0ExVUVDZ3dJVlc1cFZISjFjM1F4SlRBakJnTlZCQU1NSEZWRFFTQkZlSFJsYm1SbFpDQldZV3hwWkdGMGFXOXUKSUZKdmIzUXdIaGNOTVRVd016RXpNREF3TURBd1doY05Nemd4TWpNeE1EQXdNREF3V2pCSE1Rc3dDUVlEVlFRR0V3SkRUakVSTUE4RwpBMVVFQ2d3SVZXNXBWSEoxYzNReEpUQWpCZ05WQkFNTUhGVkRRU0JGZUhSbGJtUmxaQ0JXWVd4cFpHRjBhVzl1SUZKdmIzUXdnZ0lpCk1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQ3BDUWNvRXdLd21lQmtxaDVERm5wenNaR2dkVDZvK3VNNEFIcnMKaVdvZ0Q0dkZzSnN6QTFxR3hsaUcxY0dGdTAvR25FQk55cjd1YVphNHJZRXdtbnlTQmVzRks1cEkwTGgyUHBiSUlMdlNzUEdQMkt4RgpSditxWjJDMGQzNXFIendhVW5vRVBRYzhoUTJFMEI5MkN2ZHFGTjl5NHpSOFYwNVdBVDU1OGFvcE8yejYrSTl0VGNnMTM2N3IzQ1R1CmVVV25oYllGaU42SVhTVjhsMlJuQ2RtL1doVUZodk1KSHV4WU1qTVI4M2Rrc0hZZjVCQTFGeHZ5RHJGc3BDcWpjL3dKSHg0eUdWTVIKNTltekxDNTJMcUdqM241cWlBbm84Z2VLK0xMTkVPZmljMENUdXdqUlArSDhDNVN6SmU5OHB0ZlJyNS8vbHByMWtYdVlDM2ZVZnVnSAowbUsxbFRuajgvRnREdzVsaElwalZNV0F0dUNlUzMxSEpxY0JDRjNSaUo3WHd6SkUrb0pLQ21oVWZ6aFRBOHlrQUROa1VWa0xvNEtSCmVsN3NGc0x6S3VaaTJpcmJXV0lRSlVvcWdRdEhCME1HY0lmUytwTVJLWHBJVGV1VXgzQk5yMmZWVWJHQUlBRUJ0SG9JcHBCL1R1RHYKQjBHSHIycWxYb3Y3ejFDeW1sU3Z3NG02V0MzMU1KaXhObkk1ZmtrRS9TbW5USG5rQlZmYmxMa1dVNDFHc3gyVllWZFdmNi93Rmx0aApXRzgyVUJFTDJLd3JsUllhRGg4SXpUWTBaUkJpWnRXQVh4UWdYeTBNb0hnS2FOWXMxK2x2SzlKS0JaUDhubTlyWi8rSThVNmxhVXBTCk53WHF4aGFOMHNTWjBZSXJPN28xZGZkUlVWanp5QWZkNUxRRGZ3SURBUUFCbzBJd1FEQWRCZ05WSFE0RUZnUVUyWFE2NURBOURmY1MKM0g1YUJaOGVOSnIzNFJRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBT0JnTlZIUThCQWY4RUJBTUNBWVl3RFFZSktvWklodmNOQVFFTApCUUFEZ2dJQkFEYU5sOHhDRldRcE41c21MTmI3cmhWcExHc2FHdmRmdHZrSFRGbnE4OG5JdWE3TXVpNTYzTUQxc0MzQU82K2ZjQVVSCmFwOGxUd0VwY09QbERPSHFXbnpjU2J2QkhpcUI5UlpMY3BISW9qRzVxdHI4blIvelhVQUNFL3hPSEFiS3N4U1FWQmNaRWhyeEg5Y00KYVZyMmNYajBsSDJSQzQ3c2tGU092RytoVEt2OGRHVDljWnI0UVFlaHpaSGtQSnJnbXpJNWM2c3ExV25JZUpFbU1YM2l4ekR4L0JSNApkeElPRS9UZEZwUy9TMmQ3Y0ZPRnlyQzc4emhOTEpBNXdBM0NYV3ZwNHVYVmlJM1dMTCtyRzc2MUtJY1NGM1J1L0gzOGo5Q0hKckFiCis3bHNxK0tlUFJYQk95NW5BbGlSbisvNFFoOHN0MmoxZGEzUHRmYi9FWDNDOENTbHJkUDZvRHlwK2wzY3BhRHZSS1MrMXVqbDVCT1cKRjNzR1BqTHR4N2RDdkhhajJHVTRLemcxVVNFT0RtOHVOQk5BNFN0bkRHMUtRVEFZSTFveVZabkpGK0E4M3Zic2VhMHJXQm1pclN3aQpHcFdPdnBhUVhVSlh4UGtVQXpVckhDMVJWd2luT3Q0LzVNaTBBM1BDd1NhQXV3dENINjBOcnlaeTJzeStzNk9EV0EyQ3hSOUdVZU9jCkdNeU5tNDNzU2V0MVVOV01LRm5LZERUYWpBc2hxeDdxRytYSC9SVSt3QmVxK3lOdUprYkwrdm14Y210cHp5S0VDMklQck5rWkFKU2kKZGp6VUxacnRCSjR0Qm1JUU4xSWNoWEliSitYTXhqSHNOK3hqV1pzTEhYYk1makthaUpVSU5sSzczblpmZGtsSnJYKzlaU0N5eWNFcgpkaGgybjFheAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpDZXJ0aWduYSBSb290IENBCj09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdXekNDQkVPZ0F3SUJBZ0lSQU1ycEc0bnhWUU1ObytaQmJjVGpwdUV3RFFZSktvWklodmNOQVFFTEJRQXdXakVMTUFrR0ExVUUKQmhNQ1JsSXhFakFRQmdOVkJBb01DVVJvYVcxNWIzUnBjekVjTUJvR0ExVUVDd3dUTURBd01pQTBPREUwTmpNd09ERXdNREF6TmpFWgpNQmNHQTFVRUF3d1FRMlZ5ZEdsbmJtRWdVbTl2ZENCRFFUQWVGdzB4TXpFd01ERXdPRE15TWpkYUZ3MHpNekV3TURFd09ETXlNamRhCk1Gb3hDekFKQmdOVkJBWVRBa1pTTVJJd0VBWURWUVFLREFsRWFHbHRlVzkwYVhNeEhEQWFCZ05WQkFzTUV6QXdNRElnTkRneE5EWXoKTURneE1EQXdNell4R1RBWEJnTlZCQU1NRUVObGNuUnBaMjVoSUZKdmIzUWdRMEV3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQwpEd0F3Z2dJS0FvSUNBUUROR0RsbEdsbXg2bVFXRG95VUpKVjhnOVBGT1NiY0RPOFdWNDNYMkt5alFuK0N5dTNOVzlzT3R5M3RSUWdYCnN0bXp5OVlYVW5JbzI0NU9ub3EyQy9tZWhKcE5kdDRpS1Z6U3M5SUdQakE1cVhTamtsWWNvVzlNQ2lCdG55TjZ0TWJhTE9RZExOeXoKS05BVDhreE9Ba21oVkVDZTV1VUZvQzJFeVArWWJORHJpaHFFQ0I2M2FDUHVJOVZ3em0xUmFSRHVvWHJDMFNJeHdvS0YwdkpWZGxCOApKWHJKaEZ3THJOMUNUaXZuZ3FJa2ljdVFzdER1STdwbVRMdGlwUGxUV21SN2ZKajZvMGllRDVXdXB4ajBhdXd1QTBXdjhIVDRLczE2ClhkRytSQ1l5S2ZIeDlXek1mZ0loQzU5dnBEKytuVlBpejMycExIeFlHcGZoUFRjM0dHWW8wa0RGVVlxTXd5M09VNGdrV0dRd0ZzV3EKNE5ZS3BrRGZlUGIxQkh4cEU0UzgwZEduQnM4QjkyakFxRmU3T21HdEJJeVQ0NjM4OE50RWJWbmNTVm11ckpxWk5qQkJlM1l6SW9lagp3cEtHYnZsdzdxNkhoNVVieEhxOU1mUFUwdVdaLzc1STdIWDFlQllkcG5EQmZ6d2JvWkw3ejhnODFzV1RDby8xVlRwMmxjNVptSW9KCmxYY3ltb082TEFRNmw3M1VMNzdYYkp1aXluMXRKc2xWMWMvRGVWSUlDWmtISkMxa0pXdW1JV21iYXQxMFRXdVhla0c5cXhmNWtCZEkKanpiNUxkWEYyKzZxaFVWQitzMDZSYkZvNWpaTW01Qlg3Q081aHdqQ3hBbnhsNFlxS0UzaWRNRGF4SXpiMytLaEYxbk9KRmwwTWRwLwovVEJ0MmR6aGF1SDhYd0lEQVFBQm80SUJHakNDQVJZd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBT0JnTlZIUThCQWY4RUJBTUNBUVl3CkhRWURWUjBPQkJZRUZCaUhWdUJ1ZCs0a05UeE9jNW9mMXVIaWVYNHJNQjhHQTFVZEl3UVlNQmFBRkJpSFZ1QnVkKzRrTlR4T2M1b2YKMXVIaWVYNHJNRVFHQTFVZElBUTlNRHN3T1FZRVZSMGdBREF4TUM4R0NDc0dBUVVGQndJQkZpTm9kSFJ3Y3pvdkwzZDNkM2N1WTJWeQpkR2xuYm1FdVpuSXZZWFYwYjNKcGRHVnpMekJ0QmdOVkhSOEVaakJrTUMrZ0xhQXJoaWxvZEhSd09pOHZZM0pzTG1ObGNuUnBaMjVoCkxtWnlMMk5sY25ScFoyNWhjbTl2ZEdOaExtTnliREF4b0MrZ0xZWXJhSFIwY0RvdkwyTnliQzVrYUdsdGVXOTBhWE11WTI5dEwyTmwKY25ScFoyNWhjbTl2ZEdOaExtTnliREFOQmdrcWhraUc5dzBCQVFzRkFBT0NBZ0VBbExpZVQvRGpsUWdpNTgxb1FmY2NWZFY4QU9JdApPb2xkYURndlVTSUxTbzNMNmJ0ZFBydGNQYkVvL3VSVFZSUFBvWkFiQWgxZlprWUpNeWpoRFNTWGNOTVFIK3BrVjVhN1hkcm54SXhQClRHUkdIVnlINDFuZVF0R2JxSDZtaWQyUEhNa3dndTA3bk0zQTZSbmdhdGdDZFRlcjl6UW9LSkh5QkFwUE5lTmdKZ0g2MEJHTStSRnEKN3E4OXcxRFRqMTh6ZVR5R3FITkZrSXdndG5KekZ5TytCMlhsZUpJTnVnSEE2NHdjWnIrc2huY0JsQTJjNXVrNWpSK21VWXlaRERsMwo0YlNiK2h4blYyOXFhbzZwSzB4WGVYcFhJcy9OWDJOR2pWeFpPb2I0TWtkaW8yY05HSkhjKzZacjlVaGhjeU5aamdLbnZFVHE5RW1kCjhWUlkrV0N2Mmhpa0x5aEYzSHFnaUlaZDh6dm4veWsxZ1B4a1E1VG00eHh2dnEwT0ttT1pLOGwraGZaeDZBWURsZjdlajBnY1d0U1MKNkN2dTV6SGJ1Z1JxaDVqbnhWL3ZmYWNpOXdIWVRmbUowQTZhQlZta25walpieXZLY0w1a3dsV2o5T212dzVJcDNJZ1dKSms4alNhWQp0bHUzek02M053ZjlKdG1ZaFNUL1dTTURtdTJkbmFqa1hqak8xMUlOYjlJL2JiRUZhMG5PaXBGR2MvVDJML0NvYzNjT1pheWhqV1pTCmFYNUxhQXpISGpjbmc2V014d0xrRk0xSkFiQnpzLzNHa0RwdjBtenRPKzdza2I2aVExMkxBRXBtSlVSdzNrQVArSHdWOTZMT1BOZGUKRTR5QkZ4Z1gwYjN4ZHhBNjFHVTV3U2VzVnl3bFZQK2kyaytLWVRsZXJqMUtqTDA9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCmVtU2lnbiBSb290IENBIC0gRzEKPT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRGxEQ0NBbnlnQXdJQkFnSUtNZlhrWWd4c1dPM1cyREFOQmdrcWhraUc5dzBCQVFzRkFEQm5NUXN3Q1FZRFZRUUdFd0pKVGpFVApNQkVHQTFVRUN4TUtaVzFUYVdkdUlGQkxTVEVsTUNNR0ExVUVDaE1jWlUxMVpHaHlZU0JVWldOb2JtOXNiMmRwWlhNZ1RHbHRhWFJsClpERWNNQm9HQTFVRUF4TVRaVzFUYVdkdUlGSnZiM1FnUTBFZ0xTQkhNVEFlRncweE9EQXlNVGd4T0RNd01EQmFGdzAwTXpBeU1UZ3gKT0RNd01EQmFNR2N4Q3pBSkJnTlZCQVlUQWtsT01STXdFUVlEVlFRTEV3cGxiVk5wWjI0Z1VFdEpNU1V3SXdZRFZRUUtFeHhsVFhWawphSEpoSUZSbFkyaHViMnh2WjJsbGN5Qk1hVzFwZEdWa01Sd3dHZ1lEVlFRREV4TmxiVk5wWjI0Z1VtOXZkQ0JEUVNBdElFY3hNSUlCCklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFrMHU3NldhSzdwMWIxVFNUMEJzZXcrZWV1R1F6ZjJONGFMVE4KTG5GMTE1c2d4azBwdkxab1lJcjNJWnBXTlZyemRyM1l6WnIvazFaTHBWa0dvWk0wS2QwV05IVk84b0cweDVaT3JSa1ZVa3IrUEhCMQpjTTJ2SzZzVm1qTThxck9McXMxRC9mWHFjUC90enhFN2xNNU9NaGJUSTBBcWQ3T3ZQQUVzYk8yWkxJdlpUbW1Zc3ZlUFFiQXllR0hXCkRWL0QrcUpBa2gxY0YrWndQalhub3JmQ1l1S3JwRGhNdFRrMWIrb0RhZm82VkdpRmJkYnlMME5WSHBFTkR0alZhcVNXMFJNOExIaFEKNkRxUzBoZFc1VFVhUUJ3K2pTenRPZDlDNElOQmROK2p6Y0tHWUVobzQya0xWQUNMNUhacElRMTVUalFJWGhUQ3pMRzNyZGQ4Y0lySApoUUlEQVFBQm8wSXdRREFkQmdOVkhRNEVGZ1FVKys4TmhwNnc0OTJwdWZFaEYzOCsvUEIzS3hvd0RnWURWUjBQQVFIL0JBUURBZ0VHCk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFGbi84b3oxaDMxeFBhT2ZHMXZSMnZqVG5HczIKdlp1cFlldmVGaXgwUFo3bWRkclh1cWU4UWhmblBaSHI1WDNkUHB6eHo1S3NiRWpNd2lJL2FUdkZ0aFV2b3pYR2FDb2NWNjg1NzQzUQpOY01ZREhzQVZoek5peGwwM3I0UEV1RFFxcUUvQWpTeGNNNmRHTllJQXdsRzdtRGdmcmJFU1FSUmZYQmd2S3F5LzNseWVxWWRQVjhxCitNcmkvVG0zUjducmZ0OEVJNi82bkFZSDZmdGprNEJBdGNac0NqRW96Z3lmejdNak5ZQkJqV3pFTjN1Qkw0Q2hRRUtGNmRrNGplaWgKVTgwQnYybm9XZ2J5UlF1UStxN2h2NTN5cmxjOHBhNnlWdlNMWlVEcC9UR0JMUFE1Q2RqdWE2ZTBwaDBWcFpqM0FZSFloWDN6VVZ4eAppTjY2ekIrQWZrbz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKZW1TaWduIEVDQyBSb290IENBIC0gRzMKPT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNUakNDQWRPZ0F3SUJBZ0lLUFBZSHFXaHdEdHFMaERBS0JnZ3Foa2pPUFFRREF6QnJNUXN3Q1FZRFZRUUdFd0pKVGpFVE1CRUcKQTFVRUN4TUtaVzFUYVdkdUlGQkxTVEVsTUNNR0ExVUVDaE1jWlUxMVpHaHlZU0JVWldOb2JtOXNiMmRwWlhNZ1RHbHRhWFJsWkRFZwpNQjRHQTFVRUF4TVhaVzFUYVdkdUlFVkRReUJTYjI5MElFTkJJQzBnUnpNd0hoY05NVGd3TWpFNE1UZ3pNREF3V2hjTk5ETXdNakU0Ck1UZ3pNREF3V2pCck1Rc3dDUVlEVlFRR0V3SkpUakVUTUJFR0ExVUVDeE1LWlcxVGFXZHVJRkJMU1RFbE1DTUdBMVVFQ2hNY1pVMTEKWkdoeVlTQlVaV05vYm05c2IyZHBaWE1nVEdsdGFYUmxaREVnTUI0R0ExVUVBeE1YWlcxVGFXZHVJRVZEUXlCU2IyOTBJRU5CSUMwZwpSek13ZGpBUUJnY3Foa2pPUFFJQkJnVXJnUVFBSWdOaUFBUWpwUXk0TFJMMUtQT3hzdDNpQWhLQW5qbGZTVTJmeVNVMFdYVHN1d1ljCjU4QnlyK2l1TCtGQlZJY1VxRXF5Nkh5QzVsdHF0ZHl6ZGM2TEJ0Q0dJNzlHMVk0UFB3VDAxeHlTZnZhbFk4TDFYNDR1VDZFWUdRSXIKTWdxQ1pIMFdrOUdqUWpCQU1CMEdBMVVkRGdRV0JCUjhYUUtFRTlUTWlwdUJ6aGNjTGlrZW5FaGpRakFPQmdOVkhROEJBZjhFQkFNQwpBUVl3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFLQmdncWhrak9QUVFEQXdOcEFEQm1BakVBdnZOaHp3SVFIV1NWQjdnWWJvaUZCUytECkNCZVF5aCtLVE9nTkczcXhyZFdCQ1Vmdk82d0lCSHhjbWJIdFJ3ZlNBakVBbmJwVi9LbEs2TzN0NW5ZQlFudkkrR0RaalZHTFZUdjcKakh2clpRbkQrSmJOUjZpQzhoWlZkeVIrRWhDVkJDeWoKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKZW1TaWduIFJvb3QgQ0EgLSBDMQo9PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlEY3pDQ0FsdWdBd0lCQWdJTEFLN1BBTHJFenpMNFE3SXdEUVlKS29aSWh2Y05BUUVMQlFBd1ZqRUxNQWtHQTFVRUJoTUNWVk14CkV6QVJCZ05WQkFzVENtVnRVMmxuYmlCUVMwa3hGREFTQmdOVkJBb1RDMlZOZFdSb2NtRWdTVzVqTVJ3d0dnWURWUVFERXhObGJWTnAKWjI0Z1VtOXZkQ0JEUVNBdElFTXhNQjRYRFRFNE1ESXhPREU0TXpBd01Gb1hEVFF6TURJeE9ERTRNekF3TUZvd1ZqRUxNQWtHQTFVRQpCaE1DVlZNeEV6QVJCZ05WQkFzVENtVnRVMmxuYmlCUVMwa3hGREFTQmdOVkJBb1RDMlZOZFdSb2NtRWdTVzVqTVJ3d0dnWURWUVFECkV4TmxiVk5wWjI0Z1VtOXZkQ0JEUVNBdElFTXhNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXordXAKdWZHWkJjellLQ0ZLODNNMFVZUldFUFdnVHl3UzQvb1RtaWZRei9sNUduUmZIWGs1L0Z2NGNJN2drbEwzNUNYNVZJUFpIZFBJV29VLwpYc2UyQis0K3dNNmFyNnhXUWlvNUpYRFd2N1Y3TnEyczluUGN6ZGNkaW9PbCt5dVFGVGRySENaSDNEc3BWcE5xczhGcU9wMDk5Y0dYCk9GZ0ZpeHdSNCtTMHVGMkZIWVArZUY4TFJXZ1lTS1ZHY3pRNy9nL0lkcnZIR1BNRjBZYnpoZTNudWRreXJWV0l6cWEya2JCUHJINFYKSTViMlAvQWdOQmJlQ3NiRUJFVjVmNmY5dnRLcHBhK2N4U01xOXp3aGJMMnZqMDdGT3JMek5CTDgzNEFhU2FUVXFaWDNub2xlb29tcwpsTXVvYUp1dmltVW56WW51M1l5MWF5bHdRNkJwQytTNUR3SURBUUFCbzBJd1FEQWRCZ05WSFE0RUZnUVUvcUhnY0I0cUF6bFNXa0srClhKR0ZlaGlxVGJVd0RnWURWUjBQQVFIL0JBUURBZ0VHTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFTEJRQUQKZ2dFQkFNSktWdm9WSVhzb291bmxIZnY0TGNRNWxrRk1PeWNzeEd3WUZZREdySzlIV1M4bUMrTTJzTzg3L2tPWFNUS1pFaFZiM3hFcAovNnRUK0x2QmVBK3NuRk92Vjcxb2pEMXBNL0Nqb0NOak8yUm5Ja1N0MVhITFZpcDRrcU5QRWpFMk51TGUvZ0RFbzJBUEo2MmdzSXExCk5ucFNvYjBuOUNBbll1aE5sQ1FUNUFvRTZUeXJMc2hEQ1VyR1lRVGxTVFIrMDhUSTlRL0FxdW02VkY3ell5dFBUMURVL3JsN21ZdzkKd0M2OEFpdlR4RURraWdjeEhwdk9KcGtUK3hIcW1pSU1FUm5IWGh1QlVERElsaEp1NTh0QmY1RTdva2UzVklBYjNBRE1tcERxdzhOUQpCbUlNTU1BVlNLZW9XWHpocmlLaTRncDZEL3BpcTFKTTRmSGZ5cjZERFVJPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgplbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMwo9PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ0t6Q0NBYkdnQXdJQkFnSUtlM0cyZ2xhNEVueWNxREFLQmdncWhrak9QUVFEQXpCYU1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFRwpBMVVFQ3hNS1pXMVRhV2R1SUZCTFNURVVNQklHQTFVRUNoTUxaVTExWkdoeVlTQkpibU14SURBZUJnTlZCQU1URjJWdFUybG5iaUJGClEwTWdVbTl2ZENCRFFTQXRJRU16TUI0WERURTRNREl4T0RFNE16QXdNRm9YRFRRek1ESXhPREU0TXpBd01Gb3dXakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBc1RDbVZ0VTJsbmJpQlFTMGt4RkRBU0JnTlZCQW9UQzJWTmRXUm9jbUVnU1c1ak1TQXdIZ1lEVlFRRApFeGRsYlZOcFoyNGdSVU5ESUZKdmIzUWdRMEVnTFNCRE16QjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQlAybFlhNTdKaEFkCjZiY2lNSzRHOUlHenNVSnhsVG04MDFManI2LzU4cGMxa2paR0RvZVZqYms1V3VtNzM5RCt5QWRCUEx0VmI0T2phdnRpc0lHSkFuQjkKU01WSzQra2lWQ0pOazd0Q0RLOTNuQ09tZmRkaEVjNWx4L2gvL3ZYeXFhTkNNRUF3SFFZRFZSME9CQllFRlB0YVNOQ0FJRUR5cU9rQQpCMmtaZDZmbXcvVFBNQTRHQTFVZER3RUIvd1FFQXdJQkJqQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01Bb0dDQ3FHU000OUJBTURBMmdBCk1HVUNNUUMwMkM4Q2lmMjJUR0s2UTA0VGhISzFydDBjM3RhMTNGYVBXRUJhTGQ0Z1RDS0R5cE9vZnU0U1FNZldoMC80MzRVQ01Cd1UKWk9SOGxvTVJuTERSV21GTHBnOUowd0Q4b2Z6a3BmOS9yZGN3ME1kM2Y3NkJCMVV3VUNBVTlWYzRDcWd4VVE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpIb25na29uZyBQb3N0IFJvb3QgQ0EgMwo9PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRnp6Q0NBN2VnQXdJQkFnSVVDQlpmaWt5bDdBREprMERmeE1hdUk3Z2NXcVF3RFFZSktvWklodmNOQVFFTEJRQXdiekVMTUFrRwpBMVVFQmhNQ1NFc3hFakFRQmdOVkJBZ1RDVWh2Ym1jZ1MyOXVaekVTTUJBR0ExVUVCeE1KU0c5dVp5QkxiMjVuTVJZd0ZBWURWUVFLCkV3MUliMjVuYTI5dVp5QlFiM04wTVNBd0hnWURWUVFERXhkSWIyNW5hMjl1WnlCUWIzTjBJRkp2YjNRZ1EwRWdNekFlRncweE56QTIKTURNd01qSTVORFphRncwME1qQTJNRE13TWpJNU5EWmFNRzh4Q3pBSkJnTlZCQVlUQWtoTE1SSXdFQVlEVlFRSUV3bEliMjVuSUV0dgpibWN4RWpBUUJnTlZCQWNUQ1VodmJtY2dTMjl1WnpFV01CUUdBMVVFQ2hNTlNHOXVaMnR2Ym1jZ1VHOXpkREVnTUI0R0ExVUVBeE1YClNHOXVaMnR2Ym1jZ1VHOXpkQ0JTYjI5MElFTkJJRE13Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQ3oKaU5mcXpnOGdUcjdtMWdOdDdsbjh3bGZmS1dpaGd3NCthTWRvV0p3Y1lFdUpRd3k1MUJXeTdzRk9kZW0xcCsvbDZUV1o1TXdjNTB0ZgpqVE13SUROVDJhYTcxVDRUanVrZmgwbXRVQzFReWhpK0FWaWlFM0NXdTRtSVZvQmMrTDBzUE9GTVY0aTcwN21WNzh2SDl0b3hkQ2ltCjVsU0o5VUV4eXVVbUdzMkM0SERhT3ltNzFRUDFtYnBWOVdUUllBNnppVW00aWk4RjBvUkZLSHlQYUZBU2VQd0x0VlBMd3BnY2hLT2UKc0w0anBOcmN5Q3NlMm01RkhvbVkydmtBTGdicEREdHcxVkFsaUpuTHpYTmc5OVgvTldmRm9ieGVxODFLdUVYcnlHZ2VEUTBVUmhMagowbVJpaWtLWXZMVEdDQWo0L2FoTVpKeDJBYjB2cVd3ekQ5Zy9LTGc4YVFGQ2huNXB3Y2tHeXVWNlJtWHB3dFpRUVM0L3QrVHRiTmUvCkpnRVJvaFlwU21zMEJwRHNFOUsyKzJwMjBqenQ4Tll0M2VFVjdLT2JMeXpKUGl2a2FUdi9jaVd4Tm9aYngzOXJpMVViU3NVZ1lUMnUKeTFEaENEcStzSTlqUVZNd0NGazhtQjEzdW1PUmVzb1FVR0MvOE5lOGxZZVBsOFgrbDJvQmxLTjhXNFVkS2prNjBGU2gwVGx4bmYwaAorYlY3OE9MZ0FvOXVsaVFsTEtBZUxLakVpYWZ2N1prR0w3WUtURS9ib3N3M0dxOUhoUzJLWDhRME5Fd0EvUmlUWnhQUk4rWkl0SXNHCnhWZDdHWVlLZWNzQXlWS3ZRdjgzaitHakhubzlVS3RqQnVjVnRUKzJSVGVVTjdGKzhrakRmOFYxL3BlTlJZOGFweHB5S0JwQUR3SUQKQVFBQm8yTXdZVEFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQTRHQTFVZER3RUIvd1FFQXdJQkJqQWZCZ05WSFNNRUdEQVdnQlFYbmMwZQppOVk1SzNEVFhOU2d1Qit3QVB6RllUQWRCZ05WSFE0RUZnUVVGNTNOSG92V09TdHcwMXpVb0xnZnNBRDh4V0V3RFFZSktvWklodmNOCkFRRUxCUUFEZ2dJQkFGYlZlMjdtSWdIU1Fwc1kxUTdYWmlOYzQvNmd4NUxTNlpTdFM2TEc3Qko4ZE5WSTBsa1VtY0RydWRIcjlFZ3cKVzYyblYzT1pxZFBsdDlFdVdTUlkzR2d1TG1MWWF1UndDeTBnVUNDa01wWFJBSmk3MC8zM012Skpyc1o2NEVlK2JzN0xvM0k2TFdsZAp5OGpvUlRuVStrTEJFVXgzWFpMN2F2OVlST1hyZ1o2dm9KbXR2cWtCWnNzNEhUemZReC8wVFc2MHVoZEcvSDM5aDRGNWFnMHpEL292CitCUzVnTE5kVGFxWDRmbmtHTVg0MVRpTUpqejk4aWppN2xwSmlDemZlVDJPbnBBOHZVRktPdDFiOXBxMHpqOGxNSDh5ZmFJRGxORGMKZXFGUzNtNlRqUmdtL1ZXc3ZZK2Iwcyt2NTRZc3l4OEpiNk52cVlUVWM3OU5vWFFiVGlOZzhzd09xbitrbkV3bHFMSm1PemovMlpRdwo5bktFdm1oVkVBL0djeXdXYVpNSC9yRkY3YnVpVldxdzJyVktBaVVuaGRlM3Q0WkVGb2xzZ0NzK2w2bWMxWDVWVE1iZVJSQWM2dWs3Cm53TlQ3dTU2QVFJV2VOVG93cjVHZG9nVFB5SzdTQklkVWdDMEFuNGhHaDZjSmZUelBWNGUwaHo1c3kyMjl6ZGN4c3NoVHJEM21VY1kKaGNFcnVsV3VCdXJRQjdMY3E5Q0NsblhPMGxEK21lZlBMNS9uZHRGaEt2c2h1ekhRcXA5SHBMSWl5aFk2VUZmRVcwTm54V1ZpQTBrQgo2MFBaMlBpZXJjK3hZdzVGOUtCYUxKc3R4YWJBcmFoSDlDZE1PQTB1RzBrN1V2VG9pSU1yVkNqVThqVlN0REtEWW1sa0RKR2NuNWZxCmRCYjlIeEVHbXB2MAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHNAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJR1N6Q0NCRE9nQXdJQkFnSVJBTm0xUTMrdnFUa1BBQUFBQUZWbHJWZ3dEUVlKS29aSWh2Y05BUUVMQlFBd2diNHhDekFKQmdOVgpCQVlUQWxWVE1SWXdGQVlEVlFRS0V3MUZiblJ5ZFhOMExDQkpibU11TVNnd0pnWURWUVFMRXg5VFpXVWdkM2QzTG1WdWRISjFjM1F1CmJtVjBMMnhsWjJGc0xYUmxjbTF6TVRrd053WURWUVFMRXpBb1l5a2dNakF4TlNCRmJuUnlkWE4wTENCSmJtTXVJQzBnWm05eUlHRjEKZEdodmNtbDZaV1FnZFhObElHOXViSGt4TWpBd0JnTlZCQU1US1VWdWRISjFjM1FnVW05dmRDQkRaWEowYVdacFkyRjBhVzl1SUVGMQpkR2h2Y21sMGVTQXRJRWMwTUI0WERURTFNRFV5TnpFeE1URXhObG9YRFRNM01USXlOekV4TkRFeE5sb3dnYjR4Q3pBSkJnTlZCQVlUCkFsVlRNUll3RkFZRFZRUUtFdzFGYm5SeWRYTjBMQ0JKYm1NdU1TZ3dKZ1lEVlFRTEV4OVRaV1VnZDNkM0xtVnVkSEoxYzNRdWJtVjAKTDJ4bFoyRnNMWFJsY20xek1Ua3dOd1lEVlFRTEV6QW9ZeWtnTWpBeE5TQkZiblJ5ZFhOMExDQkpibU11SUMwZ1ptOXlJR0YxZEdodgpjbWw2WldRZ2RYTmxJRzl1YkhreE1qQXdCZ05WQkFNVEtVVnVkSEoxYzNRZ1VtOXZkQ0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2CmNtbDBlU0F0SUVjME1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBc2V3c1F1N2kwVEQvcFpKSDRpM0QKdW1TWGJjcjNEYlZad2JQTHFHZ1oySytFYlRCd1hYN3pMdEpUbWVIK0gxN1pTSzlkRTQzYi8yTXpUZE1BQXJ6RStORUdDSlI1V0lvVgozaW16L2YzRVQraXE0cUE3ZWMyL2EwTXkzZGwwRUxuMzlHalV1OUNIMWFwTGlpcHZLZ1Mxc3FiSG9Icm1TS3ZTMFZuTTFuNGo1cGRzCjhFTGwzRkZMRlVIdFNVckozaENYMW5iQjc2VzFOaFNYTmRoNElqVlM3ME85MnlmYllWYUNOTnpMaUdBTUMxcmxMQUhHVksvWHFzRVEKZTlJRldyaEFub2FudzVDR0FsWlNDWHFjMGllQ1UwcGxVbXIxUE9lbzhweXZpNzNURHRUVVhtNkhubW85UlIzUlhSdjA2UXFzWUpuNwppYlQvbUN6UGZCM3BBcW9FbWg2NDNJaHVKYk5zWnZjOGtQTlh3Yk12OVczeSs4cWgrQ21kUm91emF2Ym1ad2UrTEdjS0toOWFzajVYCnhOTWhJV05sVXBFYnNabU9lWDdtNjQwQTJWcXE2blBvcElJQ1I1YitXNDVVWWFQckwwc3dzSXNqZFhKOElUekk5dkYwMUJ4N293VlYKN3J0Tk96SyttbmRtbnF4cGtDSUhIMkU2bHI3bG1rL01CVHdvV2RQQkRGU29XV0c5eUhKTTZOeWZoMys5bkVnMlhwV2pEcms0SkZYOApkV2JyQXVNSU5DbEt4dU1yTHpPZzJxT0dwUktYL1lBcjJoUkM0NUs5UHZKZFhtZDBMaHlJUnlrMFgrSXlxSndsTjR5Nm1BQ1hpMG1XCkh2MGxpcXpjMnRoZGRHNW1zUDlFMzZFWXhyNUlMemVVZVBpVlNqOS9FMTVkV2YxMGhrTmpjMGtDQXdFQUFhTkNNRUF3RHdZRFZSMFQKQVFIL0JBVXdBd0VCL3pBT0JnTlZIUThCQWY4RUJBTUNBUVl3SFFZRFZSME9CQllFRko4NHhGWWp3em5vb0hGczZGUk01T2c2c2I5bgpNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUNBUUFTNVVLbWU0c1BET1JHcGJaZ1FJZU1KWDZ0dUdndVc4WkFkandEK01sWjlQT3JZczRRCmpiUmFaSXhvd0xCeVF6VFNHd3YyTEZQU3lwQkxobWI4cW9NaTlJc2FieVpJckhaM0NML0ZtRnowSm9tZWU4TzVaRElCZjlQRDNWaHQKN0xHcmhGVjBkNFFFSjFKcmhrek8zYmxsLzliR1hwK2FFSmxMZFdyK2F1bVhJT1RrZG5yRzBDU3FrTTBna0xwSFpQdC9CN05UZUxVSwpZdkp6UTg1Qks0RnFMb1VXbEZQVWExOXlJcXRSTFVMVkFKeVp2OTY3bER0WC9acjFoc3RXTzF1SUFlVjhLRXNEK1VtRGZMSi9mT1B0CmpxRi9ZRk9PVloxUU5CSVB0NWQ3YklkS1JPZjFiZXlBTi9CWUdXNUthSGJ3SDVMazZyV1MwMkZSRUF1dHA5bGZ4MS9jSDZOY2pLRisKbTdlZTAxWnZabDRIbGlEdEMzVDdaazZMRVJYcGdVbCtiN0RVVUg4aTExOWxBZzJtOUlVZTJLNEdTMHFuMGpGbXd2ak81UWltcEFLVwpSR2hYeE5Venp4a3ZGTVNVSEh1azJmQ2ZEckdBNHRHZUVXU3BpQkU2ZG9MbFlzS0EyS1NEN1pQdmZDK1FzREpNbGhWb1NGTFVtUWpBCkpPZ2M0N09sSVE2U3dKQWZ6eUJmeWpzNHg3ZHRPdlBtUkxnT01XdUlqbkRybkJkU3FFR1VMb2UyNTZZU3hYWGZXOEFLYm51azVGNkcKK1RhVTMzZkQ2UTNBT2ZGNXUwYU9xME5aSjdjZ3V5UHBWa0FoN0RFOVphcEQ4ajNmY0VUaHVrMG1FRHVZbi9QSWpoczRWaUZxVVpQVAprY3BHMm9tM1BWT0RMQWdmaTQ5VDNmK3NIdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCk1pY3Jvc29mdCBFQ0MgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxNwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNXVENDQWQrZ0F3SUJBZ0lRWnZJOXI0ZmVpN0ZLNmd4WE1RSEM3REFLQmdncWhrak9QUVFEQXpCbE1Rc3dDUVlEVlFRR0V3SlYKVXpFZU1Cd0dBMVVFQ2hNVlRXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXVNVFl3TkFZRFZRUURFeTFOYVdOeWIzTnZablFnUlVORApJRkp2YjNRZ1EyVnlkR2xtYVdOaGRHVWdRWFYwYUc5eWFYUjVJREl3TVRjd0hoY05NVGt4TWpFNE1qTXdOalExV2hjTk5ESXdOekU0Ck1qTXhOakEwV2pCbE1Rc3dDUVlEVlFRR0V3SlZVekVlTUJ3R0ExVUVDaE1WVFdsamNtOXpiMlowSUVOdmNuQnZjbUYwYVc5dU1UWXcKTkFZRFZRUURFeTFOYVdOeWIzTnZablFnUlVORElGSnZiM1FnUTJWeWRHbG1hV05oZEdVZ1FYVjBhRzl5YVhSNUlESXdNVGN3ZGpBUQpCZ2NxaGtqT1BRSUJCZ1VyZ1FRQUlnTmlBQVRVdkQwQ1FuVkJFeVBOZ0FTR0FsRXZhcWlCWWd0bHpQYktuUjV2U21aUm9nUFpuWkg2CnRoYXhqRzdlZk0zYmVhWXZ6cnZPY1MvbHBhc283R01FWnBuNCt2S1RFQVhoZ1NoQzQ4Wm85T1liaEdCS2lhL3RlUTg3enZIMlJQVUIKZU1DalZEQlNNQTRHQTFVZER3RUIvd1FFQXdJQmhqQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01CMEdBMVVkRGdRV0JCVEl5NWx5Y0ZJTQorT2Erc2dSWEtTclBRaER0TlRBUUJna3JCZ0VFQVlJM0ZRRUVBd0lCQURBS0JnZ3Foa2pPUFFRREF3Tm9BREJsQWpCWThrM3FEUGxmClh1NWdLY3M2OHR2V01vUVpQM3pWTDhLeHpKT3VVTHNKTXNiRzdYN0pOcFFTNUdpRkJxSWIwQzhDTVFDWjZSYTBEdnBXU05Ta01CYVIKZU50VWpHVUJpdWRRWnNJeHR6bTZ1Qm9pQjA3OGExUVdJUDhydGVkTURFMm1UM009Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCk1pY3Jvc29mdCBSU0EgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxNwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZxRENDQTVDZ0F3SUJBZ0lRSHRPWENWL1l0TE5IY0I2cXZuOUZzekFOQmdrcWhraUc5dzBCQVF3RkFEQmxNUXN3Q1FZRFZRUUcKRXdKVlV6RWVNQndHQTFVRUNoTVZUV2xqY205emIyWjBJRU52Y25CdmNtRjBhVzl1TVRZd05BWURWUVFERXkxTmFXTnliM052Wm5RZwpVbE5CSUZKdmIzUWdRMlZ5ZEdsbWFXTmhkR1VnUVhWMGFHOXlhWFI1SURJd01UY3dIaGNOTVRreE1qRTRNakkxTVRJeVdoY05OREl3Ck56RTRNak13TURJeldqQmxNUXN3Q1FZRFZRUUdFd0pWVXpFZU1Cd0dBMVVFQ2hNVlRXbGpjbTl6YjJaMElFTnZjbkJ2Y21GMGFXOXUKTVRZd05BWURWUVFERXkxTmFXTnliM052Wm5RZ1VsTkJJRkp2YjNRZ1EyVnlkR2xtYVdOaGRHVWdRWFYwYUc5eWFYUjVJREl3TVRjdwpnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDRHdBd2dnSUtBb0lDQVFES1c3NlVNNHdwbFpFV0NwVzlSMkxCaWZPWk50OUdrTW1sCjdYaHFiMGVSYVBnbloxQXpIYUdtKytEbFE2T0VBbGNCWFp4SVFJSlRFTHkveHp0b2tMYUNMZVgwWmRETWJSbk1sZmw3ckVxVXJRN2UKUzBNZGh3ZVNFNUNBZzJRMU9RVDg1ZWxzczdZZlVKUTRaVkJjRjBhNXRvVzFITFVYNk5aRm5kaXlKckRLeEhCS3JtQ2szYlBaN1B3NwoxVmR5dkQvSXliTGVTMnY0STJ3RHdBVzlsY2ZOY3p0bWdHVGpHcXd1K1VjRjhnYTJtM1AxZUROYng2SDdKeXFodEpxUmpKSFRPb0krCmRrQzB6VkpoVVhBb1A4WEZXdkxKakVtN0ZGdE55UDluVFV3U2xxMzEvbmlvbDRmWC9WNGdnTnloU3lMNzFJbXR1czVIbDBkVmU0OUYKeUdjb2hKVWNhRER2NzBuZ05YdGs1NWl3bE5wTmhUcytWY1FvcjFmem5oUGJSaWVmSHFKZVJJT2twY3JWRTdOTFA4VGp3dWFHWWFSUwpNTGw2SUU5dkR6aFR5ek1NRXl1UDFwcTlLc2d0c1J4OVMxSEtSOUZJSjNKZGgrdlZSZVpJWloydlVwQzZXNklZWlZjU24yaTUxQlZyCmxNUnBJcGowTStEdCtWR09RVkRKTkU5MmtLejhPTUhZNFh1NTQrT1U0VVpweXc0S1VHc1R1cXdQTjFxM0VyV1FnUjVXcmxjaWh0bkoKMHRIWFVlT3JPOFpWL1I0TzAzUUswZHFxNm1tNGx5aVBTTVFIK0ZKRE92VEtWVFVzc0tacXdKejU4b0hoRW1yQVJkbG5zODcvSTZLSgpDbFRVRkxrcXFOZnMrYXZOSlZneWVZK1FXNWc1eEFnR3dheC9EajBBcFFJREFRQUJvMVF3VWpBT0JnTlZIUThCQWY4RUJBTUNBWVl3CkR3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVUNjdFpmNGF5Y0k4YXd6bmp3Tm5wdjd0TnNpTXdFQVlKS3dZQkJBR0MKTnhVQkJBTUNBUUF3RFFZSktvWklodmNOQVFFTUJRQURnZ0lCQUt5dlBsM0NFWmFKanFQbmt0YVhGYmdUb3FaQ0xnTE5GZ1ZaSjhvZwo2THE0NkJyc1RhaVhWcTVsUTdHUEFKdFN6VlhOVXpsdFlreUxEVnQ4TGtTL2d4Q1A4MU9DZ01OUE9zZHVFVC9tNHhhUmhQdHRoSDgwCmRLMkpwODY1MTllZmhHU1N2cFdoclFsVE05M3VDdXBLVVk1dlZhdTZ0WlJHcm94LzJLSlFKV1ZnZ0ViYk13U3ViTFdZZEZRbDNKUGsKK09OVkZUMjRiY01LcEJMQmFZVnUzMlR4VTVuaFNuVWduWlVQNU5iY0EvRlpHT2hIaWJKWFdwUzJxZGdYS3hkSjVYYkx3VmFaT2pleAovMmtza1pHVDRkOU1vemQyVGFHZitHMGVIZFA2N1B2MFJSMFRiYy8zV2VVaUozSXJodk5YdXpEdEpFM2NmVmE3bzdQNE5IbUp3ZUR5CkFtSDNwdndQdXh3WEM2NUIyWHk5SjZQOUxqclJrNVN4Y3gwa2k2OWJJSW10dDJkbWVmVTZ4cWFXTS81VGtzaEdzUkdSeHBsL2o4blcKWmpFZ1FSQ0hMUXpXd2E4MG1NcGtnL3NUVjlIQjhEeDZqS1hCL1pVaG9ISEJrMmR4RXVxUGlBcHBHV1NaSTFiN3JDb3VjTDVteEF5RQo3K1dMODVNQitHcVFrMmRMc21panRXS1A2VCtNZWp0ZUQrZU11TVo4N3pmOWRPTElUek55NFpRNWJiMFNyNzRNVG5COEcyK05zektUCmMwUVdiZWowOStDVmdJK1dYVGlrOUt2ZUNqQ0hrOWhOQUhGaVJTZExPa0tFVzM5bHQyYzBVaTJjRm11cXFOaDdvMEpNY2NjTXlqNkQKNUtidnR3RXdYbEdqZWZWd2FhWkJSQStHc0N5UnhqM3FyZytFCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCmUtU3ppZ25vIFJvb3QgQ0EgMjAxNwo9PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRRENDQWVXZ0F3SUJBZ0lNQVZSSTd5SDlsMWtOOVFRS01Bb0dDQ3FHU000OUJBTUNNSEV4Q3pBSkJnTlZCQVlUQWtoVk1SRXcKRHdZRFZRUUhEQWhDZFdSaGNHVnpkREVXTUJRR0ExVUVDZ3dOVFdsamNtOXpaV01nVEhSa0xqRVhNQlVHQTFVRVlRd09Wa0ZVU0ZVdApNak0xT0RRME9UY3hIakFjQmdOVkJBTU1GV1V0VTNwcFoyNXZJRkp2YjNRZ1EwRWdNakF4TnpBZUZ3MHhOekE0TWpJeE1qQTNNRFphCkZ3MDBNakE0TWpJeE1qQTNNRFphTUhFeEN6QUpCZ05WQkFZVEFraFZNUkV3RHdZRFZRUUhEQWhDZFdSaGNHVnpkREVXTUJRR0ExVUUKQ2d3TlRXbGpjbTl6WldNZ1RIUmtMakVYTUJVR0ExVUVZUXdPVmtGVVNGVXRNak0xT0RRME9UY3hIakFjQmdOVkJBTU1GV1V0VTNwcApaMjV2SUZKdmIzUWdRMEVnTWpBeE56QlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJKYmNQWXJZc0h0dnhpZStSSkN4CnMxWVZlNDVESkgwYWhGbnVZMml5eGw2SDBCVklIcWlRcmIxVG90cmVPcENtWUY5b01yV0dRZCtIV3l4N3hmNThldHFqWXpCaE1BOEcKQTFVZEV3RUIvd1FGTUFNQkFmOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01CMEdBMVVkRGdRV0JCU0hFUlVJMGFyQmVBeXhyODdHeVpEdgp2ekFFd0RBZkJnTlZIU01FR0RBV2dCU0hFUlVJMGFyQmVBeXhyODdHeVpEdnZ6QUV3REFLQmdncWhrak9QUVFEQWdOSkFEQkdBaUVBCnRWZmQxNHBWQ3piaGhrVDYxTmxvamJqY0k0cUtEZFF2ZmVwejdMOU5iS2dDSVFETHBiUVMrdWUxNk05K2svenpOWTl2VGxwOHRMeE8Kc3Z4eXFsdForZWZjTVE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpjZXJ0U0lHTiBSb290IENBIEcyCj09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZSekNDQXkrZ0F3SUJBZ0lKRVFBMHRrN0dOaTAyTUEwR0NTcUdTSWIzRFFFQkN3VUFNRUV4Q3pBSkJnTlZCQVlUQWxKUE1SUXcKRWdZRFZRUUtFd3REUlZKVVUwbEhUaUJUUVRFY01Cb0dBMVVFQ3hNVFkyVnlkRk5KUjA0Z1VrOVBWQ0JEUVNCSE1qQWVGdzB4TnpBeQpNRFl3T1RJM016VmFGdzAwTWpBeU1EWXdPVEkzTXpWYU1FRXhDekFKQmdOVkJBWVRBbEpQTVJRd0VnWURWUVFLRXd0RFJWSlVVMGxIClRpQlRRVEVjTUJvR0ExVUVDeE1UWTJWeWRGTkpSMDRnVWs5UFZDQkRRU0JITWpDQ0FpSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnSVAKQURDQ0Fnb0NnZ0lCQU1ERmRSbVJmVVIwZElmK0RqdVczTmdCRnN6dVk1SG5DMi9PT3dwcEduekM0NitDam9iWFhvOVg2OU1oV2YwNQpOMEl3dmxEcXRnK3BpTmd1TFdraDU5RTNHRTU5a2RVV1gydGJBTUk1UXcwMmhWSzVVMlVQSFVMbGo4OEYwKzdjREJyWnVJdDRJbWZrCmFiQm94VHprYkZwRzU4M0grdS9FN0V1OWFxU3MvY3dvVWUrU3RDbXJxeldhVE9URUNNWW16UGhwbitTYzhDblRYUG5HRmlXZUk4TWcKd1QwUFB6aEFzUDZDUkRpcVdocUthMk5ZT0xRVjA3WVJhWHNlVk82TUdpS3NjcGMvSTFtYnlTS0V3UWRQekgvaVY4b1NjTHVtWmZOcApkV085bGZzYmw4M2txSy8yMFU2bzJZcHhKTTAyUGJ5V3hQRnNxYTdsencxdUtBMndEclhLVVh0NEZNTWdMMy83RkZYaEVabjkxUXFoCm5nTGpZbC9yTlVzc3VITG9QajFQckN5N0xvYmlvM2FQNVpNcXo2V3J5RnlOU3diL0VrYXNlTXNVQnpYZ3FkK0w2YThWVHhhSlc3MzIKamNaWnJvaUZEc0dKNng5bnhVV08vMjAzTml0NFpvT1JVU3M5LzFGM2RtS2g3R2MrUG9HRDRGYXBVQjhmZXBtclk3K0VGM2Z4RFR2Zgo5NXhoc3pXWWlqcXk3RHdhTno5K2o1TFAyUklVWk5vUUFoVkIvMC9FNnh5anlmcVo5MGJwNFJqWnNiZ3lMY3NVREZEWWcyV0Q3cmxjCno4c0ZXa3o2R1pkcjFsMFQwOEpjVkx3eWM2QjQ5ZkZ0SHN1ZnBhYWZJdHpSVVo2Q2VXUmdLUk0rby8xUGNtcXI0dFRsdUNSVkxFUkwKaW9oRW5NcUUweW83QWdNQkFBR2pRakJBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3RGdZRFZSMFBBUUgvQkFRREFnRUdNQjBHQTFVZApEZ1FXQkJTQ0lTMW14dGVnNEJYcnprd0pkOFJnbmxSdUF6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFZTjRhdU9meVlJTFZBek9CCnl3YUs4U0pKNmVqcWtYL0dNMTVvR1FPR08wTUJ6d2R3NUFnZVpZV1I1aEVpdC9VQ0k0NnV1UjU5SDM1czVyMGwxWlVhOGdXbXI0VUMKYjY3NDFqSC9KY2xLeU1lS3FkbWZTMG1iRVZlWmtrTVIzcll6cE16WGpXUjkxTTA4S0N5MG1wYnFUZlhFUk1RbHFpQ0EyQ2xWOStCQgovQVltLzdrMjlVTVVBMlo0NFJHeDJpQmZSZ0I0QUNHbEhnQW9ZWGh2cUFFQmo1MDBtdi8wT0pEN3VOR3pjZ2JKY2VhQnhYbnRDNlo1CjhoTUxuUGRkRG5za2s3UkkyNFpmM2xDR2VPZEE1akdva0had1lhK2NOeXdSdFlLM3FxNGtORnR5REdrTnpWbWY5bkd2bkF2UkNqajUKQmlLRFV5VU0vRkhFNXI3aU9aVUxKSzJ2MFpYa2x0ZDBaR3R4VGdJOHFvWHpJS05ET1haYmJGRCttcHdVSG1VVWloVzlvNEpGV2tsVwphdEtjc1dNeTVXSGdVeUlPcHdwSjZzdCtINmppWW9EMkVFVlNtQVlZM3FYTkwzK3ExT2srQ0hMc0l3TUNQS2FxMkx4bmREMFVGL3RVClN4ZmowM2s5Yld0SnlTZ09MblJRdnd6WlJqb1Foc21uUCttZzdIL3JwWGRZYVhIbWd3bzM4b1pKYXI1NUNKRDJBaFprUHVYYVRINE0KTk1uNVg3YXpLRkducHl1cVNmcU5aU2xPNDJzVHA1U2pMVkZ0ZUF4RXk5L2VDRy9PbzJTcjA1V0UxTGxTVkhKN2xpWE12R25qU0c0TgowTWVkSjVxcStCT1MzUjdmWTU4MXFSWTI3SXk0Zy9ROWlZL050QmRlMTdNWFFSQmRKM05naFZkSklnYz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGMmpDQ0E4S2dBd0lCQWdJTUJmY09odHBKODBZMUxycXlNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1JR0lNUXN3Q1FZRFZRUUdFd0pWClV6RVJNQThHQTFVRUNBd0lTV3hzYVc1dmFYTXhFREFPQmdOVkJBY01CME5vYVdOaFoyOHhJVEFmQmdOVkJBb01HRlJ5ZFhOMGQyRjIKWlNCSWIyeGthVzVuY3l3Z1NXNWpMakV4TUM4R0ExVUVBd3dvVkhKMWMzUjNZWFpsSUVkc2IySmhiQ0JEWlhKMGFXWnBZMkYwYVc5dQpJRUYxZEdodmNtbDBlVEFlRncweE56QTRNak14T1RNME1USmFGdzAwTWpBNE1qTXhPVE0wTVRKYU1JR0lNUXN3Q1FZRFZRUUdFd0pWClV6RVJNQThHQTFVRUNBd0lTV3hzYVc1dmFYTXhFREFPQmdOVkJBY01CME5vYVdOaFoyOHhJVEFmQmdOVkJBb01HRlJ5ZFhOMGQyRjIKWlNCSWIyeGthVzVuY3l3Z1NXNWpMakV4TUM4R0ExVUVBd3dvVkhKMWMzUjNZWFpsSUVkc2IySmhiQ0JEWlhKMGFXWnBZMkYwYVc5dQpJRUYxZEdodmNtbDBlVENDQWlJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dJUEFEQ0NBZ29DZ2dJQkFMbGRVU2hMUERlUzBZTE92UjI5CnpkMjRxODhLUHVGZDVkeXFDYmxYQWo3bVkySGY4ZytDWTY2ajk2eHowWHpuc3d1dkNBQUpXWC9OS1NxSWs0Y1hHSUR0aUxLMHRoQWYKTGRaZlZhSVRYZEhHNndaV2lZaityREtkL1Z6REJjZHU3b2FKdW9nRG5YSWhocEN1andPbDNKK0lLTXVqa2trUDdOQVA0bTFFVDRCcQpzdFRub0FwVEFicU9sNUYyYnJ6ODFXczI1a0NJMW5zdlh3WG9MRzBSOCtleXZwSkVUTktYcFA3U2NvRkRCNXpwRVQ3MWl4cFpmUjlvCldOMEVBQ3lXODBPemZwZ1pkTm1jYzlrWXZrSEhOSG5aOUdMQ1E3bXpKN0FpeS9rOVVzY3dSN1BKUHJocTR1Zm9nWEJlUW90UEpxWCsKT3NJZ2JydjRGbzdOREttMEcyeDJFT0ZZZVVZK1ZNNkFxRmNKTnlrYm1ST1BETWpXTEJ6N0JlZ0lsVDFsUnR6dXpXbmlUWStIS0U0MApDejdQRk5tNzNiWlFtcTEzMUJuVzJocUl5RTRiSjNYWXNnanhyb013dVJFT3pZZndoSTBWY255aDc4enlpR0c2OUdtN0RJd0xkVmNFCnVFNHFGQzQ5RHh3ZU1xWmlOdTVtNGlLNEJVQmpFQ0x6TXgxMGNvb3M5VGtwb05Qbkc0Q0VMY1U5NDAyeC9ScHZ1bVVITzFqc1FrVW0KKzlqYUpYTEU5Z0N4SW5tOTQzeFpZa3FjQlc4OXp1YldSMk9aeGlSdmNoTElySCtRdEF1UmNPaTM1aFlRY1JmTzNnWlBTRUY5TlVxagppZkxKUzN0QkVXMW50d2lZVE9VUkdhNUNnTno3a0FYVStGREt2dVN0eDhLVTF4YWQ1aGVQcnpiN0FnTUJBQUdqUWpCQU1BOEdBMVVkCkV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGSm5nR1djTll0dDJzOW85dUZ2by9VTFNNUTZITUE0R0ExVWREd0VCL3dRRUF3SUIKQmpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQW1ITnc0ckRUN1Ruc1RHRFpxUktHRng2VzBPaFVLRHRrTFNHbStKMVdFMnBJUFUvSApQaW5iYlZpRFZEMkhmU01GMU9RYzNPZzRaWWJGZGFkYTJ6VUZ2WGZldXlrM1FBVUh3NVJTbjhwazNmRWJLOXhHQ2hBQ01mMUthQTBIClpKRG1IdlVxb2FpN1BGMzVvd2dMRVF6eFB5MFFsRy8rNGpTSGc5YlA1UnMxYmRJRDRiQU5xS0NxUmllQ05xY1Z0Z2ltUWxSWHRwbGEKNGd0NWtOZFhFbEUxR1loQmFDWFVOeGVFRmZzQmN0eVYzbEltSUpnbTRuYjFKMi82QUR0S1lka055MUdUS3YwV0JwYW5JNW9qU1A1Ugp2YmJFc0xGVXp0NXNRYTBXWjM3Yi9Uak51VGhPc3NGZ3k1MFgzMWllZW1LeUpvOTBsWnZrV3gzU0Q5MllISnRadVNQVE1hQ20vempkCnp5QlA2VmhXT21mRDBmYVptWjI2TnJhQUw0aEhUNGEvUkRxQTVEY2NwcnJxbDVnUjBJUmlSMlFlcXU1QXZ6U3huSTlPNGZLU1R4K08KODU2WDN2T21lV3FKY1U5TEp4ZEkvdXowVUE5UFNYM01SZU85ZWtERlFkeGhWaWNHYWVWeVFZSFR0Z0dKb0M4NmNubitPakMvUWV6SApZajZSUzhmWk1YWkMrZmM4WSt3bWpITU1mUm9kNnFoOGg2akNKM3poTTBFUHo4LzhBS0FpZ0o1S3AyOEFzRUZGdHlMS2FFakZRcUt1CjNSM3k0RzVPQlZpeHdKQVdLcVE5RUVDK2oySmpnNm1jZ24wdEF1bURNSHpMSjhuOUhtWUFzQzdUSVMrT014WnNtTzBRcUFmV3pKUFAKMjlGcEhPVEt5ZUMybk9uT2NYSGViRDhXcEhrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpUcnVzdHdhdmUgR2xvYmFsIEVDQyBQMjU2IENlcnRpZmljYXRpb24gQXV0aG9yaXR5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNZRENDQWdlZ0F3SUJBZ0lNRFdwZkNEOG9YRDVSbGQ5ZE1Bb0dDQ3FHU000OUJBTUNNSUdSTVFzd0NRWURWUVFHRXdKVlV6RVIKTUE4R0ExVUVDQk1JU1d4c2FXNXZhWE14RURBT0JnTlZCQWNUQjBOb2FXTmhaMjh4SVRBZkJnTlZCQW9UR0ZSeWRYTjBkMkYyWlNCSQpiMnhrYVc1bmN5d2dTVzVqTGpFNk1EZ0dBMVVFQXhNeFZISjFjM1IzWVhabElFZHNiMkpoYkNCRlEwTWdVREkxTmlCRFpYSjBhV1pwClkyRjBhVzl1SUVGMWRHaHZjbWwwZVRBZUZ3MHhOekE0TWpNeE9UTTFNVEJhRncwME1qQTRNak14T1RNMU1UQmFNSUdSTVFzd0NRWUQKVlFRR0V3SlZVekVSTUE4R0ExVUVDQk1JU1d4c2FXNXZhWE14RURBT0JnTlZCQWNUQjBOb2FXTmhaMjh4SVRBZkJnTlZCQW9UR0ZSeQpkWE4wZDJGMlpTQkliMnhrYVc1bmN5d2dTVzVqTGpFNk1EZ0dBMVVFQXhNeFZISjFjM1IzWVhabElFZHNiMkpoYkNCRlEwTWdVREkxCk5pQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkg3N2JPWWoKNDNNeUNNcGc1bE9jdW5TTkdMQjRrRktBM1RqQVNoM1JxTXlUcEpjR09Nb05GV0xHamdFcVpaMnEzelNSTG9IQjVET1NNY1Q5Q1RxbQpQNjJqUXpCQk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0R3WURWUjBQQVFIL0JBVURBd2NHQURBZEJnTlZIUTRFRmdRVW8wRUdySkJ0CjBVcnJkYVZLRUptenNhR0xTdmN3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnQitaVTJnNmdXckt1RVorSHhiYi9hZDRsdnZpZ3R3anoKUk00cTN3Z2hERGNDSUMwbUE2QUZ2V3ZSOWx6NFpjeUdiYk9jTkVoamhBbkZqWGNhNHN5YzRYUjcKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDblRDQ0FpU2dBd0lCQWdJTUNMMkZsMnlaSjZTQWFFYzdNQW9HQ0NxR1NNNDlCQU1ETUlHUk1Rc3dDUVlEVlFRR0V3SlZVekVSCk1BOEdBMVVFQ0JNSVNXeHNhVzV2YVhNeEVEQU9CZ05WQkFjVEIwTm9hV05oWjI4eElUQWZCZ05WQkFvVEdGUnlkWE4wZDJGMlpTQkkKYjJ4a2FXNW5jeXdnU1c1akxqRTZNRGdHQTFVRUF4TXhWSEoxYzNSM1lYWmxJRWRzYjJKaGJDQkZRME1nVURNNE5DQkRaWEowYVdacApZMkYwYVc5dUlFRjFkR2h2Y21sMGVUQWVGdzB4TnpBNE1qTXhPVE0yTkROYUZ3MDBNakE0TWpNeE9UTTJORE5hTUlHUk1Rc3dDUVlEClZRUUdFd0pWVXpFUk1BOEdBMVVFQ0JNSVNXeHNhVzV2YVhNeEVEQU9CZ05WQkFjVEIwTm9hV05oWjI4eElUQWZCZ05WQkFvVEdGUnkKZFhOMGQyRjJaU0JJYjJ4a2FXNW5jeXdnU1c1akxqRTZNRGdHQTFVRUF4TXhWSEoxYzNSM1lYWmxJRWRzYjJKaGJDQkZRME1nVURNNApOQ0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVUQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQkd2YURYVTFDREZICkJhNUZtVlh4RVJNdVN2Z1FNU09qZm9QVGZ5Z0lPaVlhT3MrWGdoK0F0eWNKajlHT01NUUttdzZzV0FTcjl6WjlsQ09rbXdxS2k2dnIKL1RrbFp2RmUvb3l1alVGNW5RbGd6aWlwMDRwdDg5WkYxUEtZaERobG9LTkRNRUV3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFQQmdOVgpIUThCQWY4RUJRTURCd1lBTUIwR0ExVWREZ1FXQkJSVnFZU0owc0V5dlJqTGJLWUhUc2pubmI2Q2tEQUtCZ2dxaGtqT1BRUURBd05uCkFEQmtBakEzQVpLWFJSSitvUE0rclJrNmN0MzBVSk1ERXI1RTBrOUJwSXljblIrajlzS1M1MGdVL2s2YnBaRlhyc1kzY3JzQ01HY2wKQ3JFTVh1NnBZNUp2NVpBTC9tWWl5a2Y5aWpIM2cvNTZ2eEMrR0NzZWovWXBIcFJaNzQ0aE44dFJtS1Z1U3c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRm9qQ0NBNHFnQXdJQkFnSVVBWlF3SHFJTDNmWEZNeXF4UTBSeCtOWlFUUTB3RFFZSktvWklodmNOQVFFTUJRQXdhVEVMTUFrRwpBMVVFQmhNQ1MxSXhKakFrQmdOVkJBb01IVTVCVmtWU0lFSlZVMGxPUlZOVElGQk1RVlJHVDFKTklFTnZjbkF1TVRJd01BWURWUVFECkRDbE9RVlpGVWlCSGJHOWlZV3dnVW05dmRDQkRaWEowYVdacFkyRjBhVzl1SUVGMWRHaHZjbWwwZVRBZUZ3MHhOekE0TVRnd09EVTQKTkRKYUZ3MHpOekE0TVRneU16VTVOVGxhTUdreEN6QUpCZ05WQkFZVEFrdFNNU1l3SkFZRFZRUUtEQjFPUVZaRlVpQkNWVk5KVGtWVApVeUJRVEVGVVJrOVNUU0JEYjNKd0xqRXlNREFHQTFVRUF3d3BUa0ZXUlZJZ1IyeHZZbUZzSUZKdmIzUWdRMlZ5ZEdsbWFXTmhkR2x2CmJpQkJkWFJvYjNKcGRIa3dnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDRHdBd2dnSUtBb0lDQVFDMjFQR1RYTFZBaVFxckRaQmIKVUdPdWtKUjBGMFZ5MW50bFdpbExwMWFnUzdndlFuWHAyWHNrV2pGbHF4Y1gwVE02MlJIY1FEYUgzOGRxNlNaZVdZcDM0K2hJbkRFVworajZSc2NySm8rS2Z6aUZUb3dJMk1NdFNBdVhhTWwzRHhlYjU3aEhIaThsRUhvU1RHRXEwbitVU1pHblFKb1ZpQWJiSkFoMitnMUc3ClhOcjRyUlZxbWZlU1ZQYzBXK20vNmltQkV0UlRrWmF6a1ZyZC9wQnpLUHN3UnJYS0NBZkhjWExKWnRNMGwvYU05QmhLNGRBOVdrVzIKYWFjcCt5UE9pTmdTbkFCSXFLWVBzenVTalhFT2RNV0x5RXo1OUp1T3VEeHA3Vzg3VUM5WTdjU3cwQndiYWd6aXZFU3EyTTBVWFpSNApZYjhPYnRvcXZDOE1DM0dtc3hZL25PYjV6SjlUTmVJRG9LQVl2N3Z4dnZUV2pJY05RdmNHdWZGdDdRU1VxUDYyMHdiR1FHSGZuWjN6ClZIYk9Vem9CcHBKQjdBU2pqdzJpMVFuSzFzdWE4ZTlEWGNDcnBVSFBYRk53Y01tSXBpM1VhMkZ6VUNhR1lRNWZHOElyNG96VnU1M0IKQTBLNmxOcGZxYkRLekUwSzcwZHBBeThpKy9Fb3pyOWRVR1dva0cyemRMQUl4NnlvMGVzK25QeGRHb011Szh1MTgwU2RPcWNYWVphaQpjZE53bGhWTnQweHo3aGxjeFZzK1FmNnNkV0E3RzJQT0FOM2FDSkJpdE9VdDdraW5heGVaVkw2SFN1T3BYZ1JNNnhCdFZOYnY4ZWp5ClloYkxnR3Z0UGUzMUh6Q2xya3ZKRSsyS0FRSEp1RkZZd0dZNnNXWkx4TlV4QW1McGRJUU0yMDFHTFFJREFRQUJvMEl3UURBZEJnTlYKSFE0RUZnUVUwcCtJMzZITkxMM3M5VHNCQVpNeko3THJZRXN3RGdZRFZSMFBBUUgvQkFRREFnRUdNQThHQTFVZEV3RUIvd1FGTUFNQgpBZjh3RFFZSktvWklodmNOQVFFTUJRQURnZ0lCQURMS2dMT2RQVlFHM2RMU0x2Q2tBU0VMWjBqS2JZN2d5S29OcW8waFY0L0dQbnJLCjIxSFVVclBVbG9TbFdHQi81UXVPSC9YY0NoV0I1VHUydHlJdkNad1RGckZzRERVSWJhdGpjdTNjdnV6SFYrWXdJSEhXMXhEQkUxVUIKakNwRDVFSHh6enA2VTVMT29nTUZEVGpmQXJzUUx0azcwcHQ2d0tHbStMVXg1dlIxeWJsVG1YVkhJbG9VRmNkNEc3YWQ2UXo0RzNieApoWVRlb2RvUzc2VGlFSmQ2ZU40TVVaZW9JVUNMaHIwTjhGNU9TemE3T3lBZmlrSlc0UXNhdjN2UUlrTXNSSXo3NVNxMGJCd2N1cFRnCkUzNGg1cHJDeThWQ1pMUWVsSHNJSmNoeHpJZEZWNFhUbnlsaUlvTlJsd0FZbDNkcW1KTEpmR0JzMzJ4OVN1UndUTUtldUIzMzBEVEgKRDh6N3AvOER2cTF3a05vTDNjaHRsMSthZndreVFmM05vc3hhYlV6eXFrbitadmpwMkRYckRpZ2U3a2d2T3RCNUNUaDhwaUtDazVYUQpBNzYrQXFBRjNTQWk0MjhkaURSZ3h1WUt1UWwxQy9BSDZHbVdOY2Y3STRHT09EbTRSU3REZUtMUkxCVC9EU2h5Y3BXYlhnbmJpVVNZCnFxRkp1M0ZTOHIvMi95ZWhOcSs0dG5lSTNUcWtiWnMwa053VVhUQy90K3NYNUllM2NkQ2gxM2NWMUVMWDh2TXhtVjJiM1JadFArb0cKSS9oR29pTHRrL2JkbXVZcWg3R1lWUEVpOTJ0RjQrS09kaDJhamNRR2pUYTNGUE9kVkdtM2pqelZwRzJUZ2JldDlyMWtlOExKYURtZwprcHpOTklhUmtQcGtVWjMrL3V1bDlYWGVpZmR5Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkFDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDYmpDQ0FmT2dBd0lCQWdJUVl2WXliT1hFNDJoY0cyTGRuQzZkbFRBS0JnZ3Foa2pPUFFRREF6QjRNUXN3Q1FZRFZRUUdFd0pGClV6RVJNQThHQTFVRUNnd0lSazVOVkMxU1EwMHhEakFNQmdOVkJBc01CVU5sY21Wek1SZ3dGZ1lEVlFSaERBOVdRVlJGVXkxUk1qZ3kKTmpBd05Fb3hMREFxQmdOVkJBTU1JMEZESUZKQlNWb2dSazVOVkMxU1EwMGdVMFZTVmtsRVQxSkZVeUJUUlVkVlVrOVRNQjRYRFRFNApNVEl5TURBNU16Y3pNMW9YRFRRek1USXlNREE1TXpjek0xb3dlREVMTUFrR0ExVUVCaE1DUlZNeEVUQVBCZ05WQkFvTUNFWk9UVlF0ClVrTk5NUTR3REFZRFZRUUxEQVZEWlhKbGN6RVlNQllHQTFVRVlRd1BWa0ZVUlZNdFVUSTRNall3TURSS01Td3dLZ1lEVlFRRERDTkIKUXlCU1FVbGFJRVpPVFZRdFVrTk5JRk5GVWxaSlJFOVNSVk1nVTBWSFZWSlBVekIyTUJBR0J5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQQpCUGE2VjFQSXlxdmZOa3BTSWVTWDBvTm5udkJsVWRCZWg4ZEhzVm55VjBlYkFBS1RSQmRwMjBMSHNiSTZHQTYwWFl5elpsMmhOUGsyCkxFbmI4MGI4czBScFJCTm0vZGZGL2E4MlRjNERUUWR4ejY5cUJkS2lRMW9LVW04QkEwNk9pNk5DTUVBd0R3WURWUjBUQVFIL0JBVXcKQXdFQi96QU9CZ05WSFE4QkFmOEVCQU1DQVFZd0hRWURWUjBPQkJZRUZBRzVMKysvRVlaZzhrL1FRVzZyY3gvbjBtNUpNQW9HQ0NxRwpTTTQ5QkFNREEya0FNR1lDTVFDdVN1TXJRTU4wRWZLVnJSWWozazRNR3VaZHBTUmVhMFI3L0RqaVQ4dWNSUmNSVEJRbkpsVTVkVW9ECnpCT1FuNUlDTVFENlNteGdpSFB6N3JpWVlxbk9LOExaaXFad01SMnZzSlJNNjAvRzQ5SHpZcWM4LzVNdUIxeEpBV2RwRWdKeXYrYz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKR2xvYmFsU2lnbiBSb290IFI0Ngo9PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGV2pDQ0EwS2dBd0lCQWdJU0VkSzd1ZGNqR0o1QVh3cWRMZERmSldmUk1BMEdDU3FHU0liM0RRRUJEQVVBTUVZeEN6QUpCZ05WCkJBWVRBa0pGTVJrd0Z3WURWUVFLRXhCSGJHOWlZV3hUYVdkdUlHNTJMWE5oTVJ3d0dnWURWUVFERXhOSGJHOWlZV3hUYVdkdUlGSnYKYjNRZ1VqUTJNQjRYRFRFNU1ETXlNREF3TURBd01Gb1hEVFEyTURNeU1EQXdNREF3TUZvd1JqRUxNQWtHQTFVRUJoTUNRa1V4R1RBWApCZ05WQkFvVEVFZHNiMkpoYkZOcFoyNGdibll0YzJFeEhEQWFCZ05WQkFNVEUwZHNiMkpoYkZOcFoyNGdVbTl2ZENCU05EWXdnZ0lpCk1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQ3NySFF5NkxObDVicnRReVlkcG9rTlJib3BpTEtrSFdQZDA4RXMKQ1ZlSk9hRlY2V2MwZHd4dTVGVWRVaVhTRTJ0ZTRSMnB0MzJKTWw4Tm5wOHNlbU5nUUIrbXNMWjRqNWxVbGdoWXJ1UUd2R0lGQWhhLwpyNmdqQTdhVUQ3eHViTUxMMWFhN0RPbjJ3UUw3SWQ1bTNSZXJkRUx2OEhRdkpmVHFhMVZia051ZDMxNkhDa0Q3clJscisvZktZSWplCjJzR1AxcTdWZjlROGcrN1hGa3lEUlROcko5Q0cwQnd0YS9PcmZmR0ZxZlVvMHEzdjg0UkxISWY4RTZNNmNxSmFFU3ZXSjNFbjdZRXQKYldhQmtvZTBHMWg2ekQ4SytrWlBUWGhjK0N0STR3U0V5MTMydEdxelpmeENubEVtSXlETFBSVDVnZTFsRmdCUEdtU1haZ2pQakh2agpLOENkK1JUeUcvRldhaGEvTElXRnpYZzRtdXRDYWdJMEdJTVhUcFJXK0xhQ3RmT1czVDN6dm44Z2R6NTdHU05yTE5SeWMwTlhmZUQ0CjEybFBGellFK2NDUVlEZEYzdVlNMkhTTnJweWliWFJkUXI0RzlkbGtiZ0lRckltd1REc0hUVUIrSk1XS21JSjVqcVNuZ2lDTkkvb24KY2NuZnhrRjBvRTMya1JiY1JveGZLV014V1hFTTJHL0N0ako5KytaZFU2WitGZnk3ZFh4ZDdQajJGeHpzeDJzWnkvTjc4Q3NIcGRscwplVlIyYkowY3BtNE82WGtNcUNOcW85OGJNREdmc1ZSNy9tckxacXJjWmRDaW5rcWFCeUZyZ1kvYnhGbjYzaUxBQkp6anFsczJrK2c5CnZYcWhuUXQyc1F2SG5mM1BtS2dHd3ZncW82R0RvTGNsY3FVQzR3SURBUUFCbzBJd1FEQU9CZ05WSFE4QkFmOEVCQU1DQVlZd0R3WUQKVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVBMXlyYzRHSHFNeXdwdFdVNGphV1NmOEZtU3d3RFFZSktvWklodmNOQVFFTQpCUUFEZ2dJQkFIeDQ3UFlDTEx0YmZwSXJYVG5jdnRnZG9rSXpUZm52cENvN1JHa2VyTmxGbzA0OHA5Z2tVYkpVSEpOT3hPOTdrNFZnCkp1b0pTT0QxdThmcGFOSzdhakZ4ekhtdUVhandtZjNsSDd3dnFNeFg2M2JFSWFaSFUxVk5hTDhGcE83WEpxdGkya00zUytMR3RlV3kKZ3hrNng5UGJUWjRJZXZQdXp6NWkrNnpvWU16Ung2RmNnMFhFUmN6ekYyc1V5UVFDUHRJa3BubnBIczZpNThGWkZaOGQ0a3VhUHA5MgpDQzFyMkxwWEZOcUQ2djZNVmVuUVRxbk1kekd4UkJGNlhMRSsweFJGRlJoaUpCUFN5MDNPWElQQk52SVF0UTZJYmJqaFZwK0ozcFptCk9VZGtMRzVOcm1KN3YyQjBHYmhXckpLc0ZqTHRyV2hWL3BpNjB6VGU5TWxod3c2RzlrdUVZTzROZTdVeVdIbVJWU3lCUTdOMEgzcXEKSlo0ZDE2R0x1YzFDTGdTa1pvTk5pVFcyYktnMlNua2hlQ0xRUXJ6UlFER1FvYjRFejhwbjdmWHdnTk5neVlNcUlnWFFCenRTdnd5ZQpxaXY1dStZZmp5VzZoWTBYSGdMK1hWQUVWOC8rTGJ6dlhNQWFxN2FmSk1iZmMyaElrQ3dVOUQ5U0d1VFN5eFREWVduUDR2a1l4Ym96Cm54U2pCRjI1Y2ZlMWxOajJNOEZhd1RTTGZKdmRrenJuRTZKd1laK3ZqK3ZZeFhYNE0yYlVkR2M2TjNlYzU5MmtEM1pEWm9wRDhwLzcKREVKNFk5SGlEMjk3MUtFOWRKZUZ0MGc1UWRZZy9OQTZzL3JvYjhTS3VuRTN2b3VYc1hneFQ3UG50Z01UemxTZHJpVlp6SDgxWHdqMwpRRVV4ZUNwNgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpHbG9iYWxTaWduIFJvb3QgRTQ2Cj09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDekNDQVpHZ0F3SUJBZ0lTRWRLN3VqTnUxTHptSkdqRkRZUWRtT2hETUFvR0NDcUdTTTQ5QkFNRE1FWXhDekFKQmdOVkJBWVQKQWtKRk1Sa3dGd1lEVlFRS0V4QkhiRzlpWVd4VGFXZHVJRzUyTFhOaE1Sd3dHZ1lEVlFRREV4TkhiRzlpWVd4VGFXZHVJRkp2YjNRZwpSVFEyTUI0WERURTVNRE15TURBd01EQXdNRm9YRFRRMk1ETXlNREF3TURBd01Gb3dSakVMTUFrR0ExVUVCaE1DUWtVeEdUQVhCZ05WCkJBb1RFRWRzYjJKaGJGTnBaMjRnYm5ZdGMyRXhIREFhQmdOVkJBTVRFMGRzYjJKaGJGTnBaMjRnVW05dmRDQkZORFl3ZGpBUUJnY3EKaGtqT1BRSUJCZ1VyZ1FRQUlnTmlBQVNjRHJIUHQraWVVbmQxTlBxbFJxZXRNaGt5dEFlcEo4cVV1d3pTQ2hESDJvbXdsd3h3RXdrQgpqdGpxUitxK3NvQXJ6ZndvRGR1c3ZLU0dOKzF3Q0FCMTZwTUxleTVTbkNOb0l3WkQ3Skl2VTRUYiswY1VCK2hmbEdkZHlYcUJQQ0NqClFqQkFNQTRHQTFVZER3RUIvd1FFQXdJQmhqQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01CMEdBMVVkRGdRV0JCUXhDcENQdHNhZDBrUkwKZ0xXaTVoK3hFazhibFRBS0JnZ3Foa2pPUFFRREF3Tm9BREJsQWpFQTMxU1E3WnZ2aTVRQ2t4ZUNtYjZ6bml6MkM1R01uMG9Vc2Zaawp2THRvVVJNTUEvY1ZpNFJndVl2L1VvN25qTHdjQWpBOCtSSFVqRTdBd1dIQ0ZVeXFxeDBMTVY4N0hPSUFsMFF4NXY1emxpL2FsdFArCkNBZXpOSW04QlovM0hvYnVpM0E9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkdMT0JBTFRSVVNUIDIwMjAKPT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRmdqQ0NBMnFnQXdJQkFnSUxXa3U5V3Z0UGlsdjZaZVV3RFFZSktvWklodmNOQVFFTEJRQXdUVEVMTUFrR0ExVUVCaE1DUVZReApJekFoQmdOVkJBb1RHbVV0WTI5dGJXVnlZMlVnYlc5dWFYUnZjbWx1WnlCSGJXSklNUmt3RndZRFZRUURFeEJIVEU5Q1FVeFVVbFZUClZDQXlNREl3TUI0WERUSXdNREl4TURBd01EQXdNRm9YRFRRd01EWXhNREF3TURBd01Gb3dUVEVMTUFrR0ExVUVCaE1DUVZReEl6QWgKQmdOVkJBb1RHbVV0WTI5dGJXVnlZMlVnYlc5dWFYUnZjbWx1WnlCSGJXSklNUmt3RndZRFZRUURFeEJIVEU5Q1FVeFVVbFZUVkNBeQpNREl3TUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFyaTVXclJzYzcvYVZqNkIzR3l2VFk0K0VUVVdpCkQ1OWJSYXRaZTFFMCtleUxpbmpGM1d1dnZjVGZrMFVldjVFNEM2NE9GdWRCYy9qYnU5RzRVZURMZ3p0ek9HNTNpZzlaWXliTnB5ck8KVlB1NDRzQjhSODVnZkQreWMvTEFHYmFLa29jMURaQW9vdVFWQkdNK3VxL3VmRjdNcG90UXNqajNRV1BLenY5cGoyZ09sVGJsekxtTQpDY3BMM1RHUWxzak1ILzFXbGpUYmpoenFMTDZGTG1QZHFxbVYwLzBwbFJQd3lKaVQyUzBXUjVBUmc2STZJcUlvVjZMci9zQ01LS0NtCmZlY3FRanVDZ0dPbFl4OFp6SHl5WnFqQzAyMDNiK0orQmxIWlJZUWZFczRrVW1TRkMwaUFUb2V4SWlJd3F1dXV2dUFDNEVEb3NFS0EKQTFHcXRINnFSTmREWWZPaWF4YUpTYVNqcEN1S0FzUjQ5R2lLd2VSNk5yRnZHNVliZDBtTjFNa0djby9QVStQY0Y0VWdTdHlZSjlPUgpKaXRISG1rSHI5Nmk1T1RVYXd1elhuelVKSUJIS1drN2J1aXMvVURyMk8xeGNTdnk2RmdkNjBHWElzVWYxRG5RSjQrSDR4ajA0S2xHCkRmVjBPb0l1MEc0c2thTXhYRHRHNm5zRUVGWmVnQjMxcFdYb2d2emlCNHhpUmZVZzNrWndocUc4azlNZWRLWnNzQ3ozQXd5SURNdlUKY2xPR3ZHQkc4NWhxd3ZHL1EvbHdJSGZLTjBGNVZWSmpqVnNTbjhWb3hJaWRyUEl3cTdlak1aZG5yWThYRDJ6SGMrMGtsR3ZJZzVyUQptamRKQkt1eEZzaHNTVWt0cTZIUWpKTHlRVXA1SVNYYlk5ZTJuS2QrUW1uN09tTUNBd0VBQWFOak1HRXdEd1lEVlIwVEFRSC9CQVV3CkF3RUIvekFPQmdOVkhROEJBZjhFQkFNQ0FRWXdIUVlEVlIwT0JCWUVGTnd1SDlGaE4zbmtxOVhWc3hKeGFEMXFhSndpTUI4R0ExVWQKSXdRWU1CYUFGTnd1SDlGaE4zbmtxOVhWc3hKeGFEMXFhSndpTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElDQVFDUjhFSUNhRUR1dzJqQQpWQy9mN0dMRHc1NktvREVvcW9PT3BGYVdFaENHVnJxWGN0SlVNSHl0R2RVZGFHLzdGRUxZalE3enRkR2w0d0pDWHR6b1JsZ0hOUUl3CjRMeDBTc0ZES3YvYkd0Q3dyMnpEL2N1ejlYOXRBeTVaVnAwdExUV01zdFpERnl5U0NzdGQ2SXdQUzNCRDBJTC9xTXkvcEpUQXZvZTkKaXVPVGU4YVBteGFkSjJXOGVzVkNnbXhjQjlDcHdZaGdST21ZaFJaZitJL0tBUkRPSmNQNVlCdWd4WmZEMHl5SU1hSzlNT3pRME1BUwo4Y0U1NCtYMStOWkszVFROKzIvQlQrTUFpMWJpa3Zjb3NrSjNjaU5ueHo4UkZiTEVBd1crdXhGN0NyK29idWYvV0VQUG0yZWdnQWUyCkhjcXRiZXBCRVg0dGRKUDd3cnkrVVVURjcyZ2xKNERqeUtEVUV1elpwVGNkTjN5MGtjcmExTEdXZ2U5b1hIWVFTYTkrcFRlQXNSeFMKdlRPQlRJLzUzV1haRk0yS0pWajA0c1dEcFFtUTFHd1VZN1ZBMyt2QS9NUllmZzBVRm9kVUoyNVc1SENFdUd3eUVuNkNNVU8rMTkxOApvYTJ1MXFzZ0V1OEt3eENNU1pZMTNBdDFYckZQMVU4MERoRWdCM1ZEUmVtakVkcXNvNW5DdG5rbjRybnZ5T0wyTlNsNmRQckZmNElGCllxWUs2bWl5ZVVjR2J2SlhxQlV6eHZkNFNqMUNlMnQrL3ZkRzZ0SHJqdStJYUZ2b3dkbHhmdjFrNy85blI0aFlKUzgraGdlOSs2amwKZ3Fpc3BkTnBRODB4aUVtRVU1TEFzVGtiT1lNQk1NVHlxZnJRQTcxeU4yQldIelo4dlRtUjlXME52M3ZYa2c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpBTkYgU2VjdXJlIFNlcnZlciBSb290IENBCj09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUY3ekNDQTllZ0F3SUJBZ0lJRGRQanZHejVhN0V3RFFZSktvWklodmNOQVFFTEJRQXdnWVF4RWpBUUJnTlZCQVVUQ1VjMk16STQKTnpVeE1ERUxNQWtHQTFVRUJoTUNSVk14SnpBbEJnTlZCQW9USGtGT1JpQkJkWFJ2Y21sa1lXUWdaR1VnUTJWeWRHbG1hV05oWTJsdgpiakVVTUJJR0ExVUVDeE1MUVU1R0lFTkJJRkpoYVhveElqQWdCZ05WQkFNVEdVRk9SaUJUWldOMWNtVWdVMlZ5ZG1WeUlGSnZiM1FnClEwRXdIaGNOTVRrd09UQTBNVEF3TURNNFdoY05Nemt3T0RNd01UQXdNRE00V2pDQmhERVNNQkFHQTFVRUJSTUpSell6TWpnM05URXcKTVFzd0NRWURWUVFHRXdKRlV6RW5NQ1VHQTFVRUNoTWVRVTVHSUVGMWRHOXlhV1JoWkNCa1pTQkRaWEowYVdacFkyRmphVzl1TVJRdwpFZ1lEVlFRTEV3dEJUa1lnUTBFZ1VtRnBlakVpTUNBR0ExVUVBeE1aUVU1R0lGTmxZM1Z5WlNCVFpYSjJaWElnVW05dmRDQkRRVENDCkFpSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnSVBBRENDQWdvQ2dnSUJBTnZyYXl2bVpGU1ZncENqY3FRWkFaMmNDNEZmYzBtNnA2enoKQkU1N2xndnNFZUJicGh6T0c5SU5neHdydUo0ZGZrVXlZQThINlhkWWZwOXF5R0ZPdGliQlRJMy9UTzgwc2g5bDJMbDQ5YTJwY2JudgpUMWdkcGQ1MElKZWg3V2hNM3BJWFM3eXIvMldhbnZ0SDJWZHk4d21ocm5aRUUyNmNMVVE1dlBuSE82UllQVUc5dE1KSm84Z04wcGN2CkIyVlNBS2R1eUs5bzdQUVVsclpYSDFiRE9aOHJiZVR6UHZZMVpOb01IS0dFU3k5TFMrSXNKSjF0azBEcnRTT09Nc3B2UmRPb2lYc2UKeng3NlcwT0x6YzJvRDJyS0RGNjVua2VQOE5tMkNndFlaUmN6dVNQa2R4bDl5MG91a250UEx4QjNzWTB2YUp4aXpPQlErT3lScDFSTQpWd25WZG1QRjZHVWU3bTFxendtZCtueFByV0FJL1ZhWkR4VXNlNm1BcTR4aGowb0hka0xlUGZUZHNpUXpXN2kxbzBUSnJIOTNQQjBqCjdJS3BwdUxJQmt3Qy9xeGNtWmtMTHhDS3B2Ui8xWWQwRFZsSlJmYndjVnc1S2RhL1NpT0w5VjhCWTlLSGN5aTFTd3IxK0t1Q0xINXoKSlRJZEMyTUtGNEVBLzdaMlh1ZTBzVURLSWJ2VmdGSGxTRkpuTE5KaGlRY05EODVDZDhCRWM1eEVVS0RiRUFvdGxSeUJyK1FjNVJRZQo4VFpCQVFJdmZYT24za0xNVE9tSkRWYjNuNUhVQThac3lZL2IyQnpnUUpoZFpwbVlnRzR0L3dIRnpzdEdINndDeGtQbXJxS0VQTVZPCkhqMXR5UlJNNHk1QnU4bzV2elk4S2htcVFZZE9wYzVMTW5uZGtFbC9BZ01CQUFHall6QmhNQjhHQTFVZEl3UVlNQmFBRkp4ZjBHeGoKbzErVHlwT1lDSzJNaDZVc1hNRTNNQjBHQTFVZERnUVdCQlNjWDlCc1k2TmZrOHFUbUFpdGpJZWxMRnpCTnpBT0JnTlZIUThCQWY4RQpCQU1DQVlZd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQVRoNjVpc2FnbUQ5dXcybkFhbHhKClVxekxLMTE0T01IVlZJU2ZrL0NIR1Qwc1pvbnJEVUw4elBCMWhUK0w5SUJkZWVVWFo3MDFndUx5UEk1OVd6YkxXb0FBS2ZMT0t5engKajZwdEJaTnNjc2RXNjk5UUl5amxSUkE5NkdlanJ3NVZENUFKWXU5TFdhTDJVL0hBTmVRdndTUzllUzlPSUNJNy9Sb2dzS1FPTEhEdApkRCs0RTVVR1Vjam9oeWJLcEZ0cUZpR1MzWE5nbmhBWTNqeUI2dWdZdzN5SjhvdFFQcjBSNGhVRHFEWjlNd0ZzU0JYWGlKQ1pCTVhNCjVnZjB2UFNRN1JQaTZvdkRqNk16RDhFcFRCTk8yaFZXY1hOeWdsRDJtak44b3JHb0dqUjBaVnpPMGV1clUrQWFnTmpxT2tua0pqQ2IKNVJ5S3FLa1ZNb2Faa2dvUUkxWVM0UGJPVE9LN3Z0dU5rbk1CWmk5aVBySnlKMFUyN1UxVzQ1ZVovem8xUHFWVVNsSlpTMkRiN3Y1NApFWDlLM0JSNVlMWnJaQVBiRllQaG9yNzJJNWRROEFrek5xZHhsaVh6dVVKOTJ6Zy9MRmlzNkVMaER0alRPMHd1Z3VtRExtc3gyZDFICmhrOXRsNUV1VCtJb2NUVVcwZkp6L2lVckIwY2tZeWZJK1BiWmEvd1NNVllJd0ZOQ3I1elFNMzc4QnZBeFJBTVU4VmpxOG1vTnFSR3kKZzc3RkdyOEg2bG5jbzRnMTc1eDJNanhOQmlMT0ZlWGRudGlQMnQ3U3hEbmxGNEhQT0VmcmY0aHRXUnZmbjBJVXJuN1BxTEJtWmRvMwpyNStxUGVvb3R0N1ZNVmdXZ2x2cXV4bDFBbk1heWtnYUlaT1FDbzZUaEtkOU95TVlrb21namF3PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpDZXJ0dW0gRUMtMzg0IENBCj09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNaVENDQWV1Z0F3SUJBZ0lRZUk4blhJRVNVaUNsQk5BdDNicHo5REFLQmdncWhrak9QUVFEQXpCME1Rc3dDUVlEVlFRR0V3SlEKVERFaE1COEdBMVVFQ2hNWVFYTnpaV052SUVSaGRHRWdVM2x6ZEdWdGN5QlRMa0V1TVNjd0pRWURWUVFMRXg1RFpYSjBkVzBnUTJWeQpkR2xtYVdOaGRHbHZiaUJCZFhSb2IzSnBkSGt4R1RBWEJnTlZCQU1URUVObGNuUjFiU0JGUXkwek9EUWdRMEV3SGhjTk1UZ3dNekkyCk1EY3lORFUwV2hjTk5ETXdNekkyTURjeU5EVTBXakIwTVFzd0NRWURWUVFHRXdKUVRERWhNQjhHQTFVRUNoTVlRWE56WldOdklFUmgKZEdFZ1UzbHpkR1Z0Y3lCVExrRXVNU2N3SlFZRFZRUUxFeDVEWlhKMGRXMGdRMlZ5ZEdsbWFXTmhkR2x2YmlCQmRYUm9iM0pwZEhreApHVEFYQmdOVkJBTVRFRU5sY25SMWJTQkZReTB6T0RRZ1EwRXdkakFRQmdjcWhrak9QUUlCQmdVcmdRUUFJZ05pQUFURUtJNnJHRnRxCnZtNWtOMlBremV5ck92Zk1vYmdPZ2tuWGhpbWZvWlR5NDJCNG1JRjRCazN5N0pvT1YyQ0RuN1RtRnk4YXMxMENXNGtqUE1JUkJTcW4KaUJNWTgxQ0UxNzAwTENlSlZmL09UT2ZmcGg4b3hQQlV3N2w4dDFPdDY4S2pRakJBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRApWUjBPQkJZRUZJMEdablFrZGpyemlmZTgxcjFIZlMrOEVGOUxNQTRHQTFVZER3RUIvd1FFQXdJQkJqQUtCZ2dxaGtqT1BRUURBd05vCkFEQmxBakFEVlMybTVoakVmTy9KVUc3Qkp3K2NoNjl1MVJzSUdMMlNLY0h2bEpGNDBqb2NWWWxpNVJzSkhycGthL0YydE5RQ01RQzAKUW9TWi82dm5udnVSbHlkZDNMQmJNSEhPWGpnYWF0a2w1K3IzWVpKVytPcmFOc0tIWlpZdWNpVXZmOS9ERThrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpDZXJ0dW0gVHJ1c3RlZCBSb290IENBCj09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZ3RENDQTZpZ0F3SUJBZ0lRSHI5WlVMakpnRGRNQnZmclZVKzE3VEFOQmdrcWhraUc5dzBCQVEwRkFEQjZNUXN3Q1FZRFZRUUcKRXdKUVRERWhNQjhHQTFVRUNoTVlRWE56WldOdklFUmhkR0VnVTNsemRHVnRjeUJUTGtFdU1TY3dKUVlEVlFRTEV4NURaWEowZFcwZwpRMlZ5ZEdsbWFXTmhkR2x2YmlCQmRYUm9iM0pwZEhreEh6QWRCZ05WQkFNVEZrTmxjblIxYlNCVWNuVnpkR1ZrSUZKdmIzUWdRMEV3CkhoY05NVGd3TXpFMk1USXhNREV6V2hjTk5ETXdNekUyTVRJeE1ERXpXakI2TVFzd0NRWURWUVFHRXdKUVRERWhNQjhHQTFVRUNoTVkKUVhOelpXTnZJRVJoZEdFZ1UzbHpkR1Z0Y3lCVExrRXVNU2N3SlFZRFZRUUxFeDVEWlhKMGRXMGdRMlZ5ZEdsbWFXTmhkR2x2YmlCQgpkWFJvYjNKcGRIa3hIekFkQmdOVkJBTVRGa05sY25SMWJTQlVjblZ6ZEdWa0lGSnZiM1FnUTBFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCCkFRVUFBNElDRHdBd2dnSUtBb0lDQVFEUkxZNjd0emJxYlRlUm4wNlRwd1hrS1FNbHpoeUM5M3labjBFR3plMmp1c0RiQ1N6QmZOOHAKZmt0bEw1T24xQUZyQXlnWW85aWRCY0VxMkVYeGtkN2ZPOUNBQW96UE9BL3FwMXg0RWFUQnlJVmNKZFBUc3VjbHp4RlVsNnMxd0I1MgpITzhBVTU4NTNCU2xMQ0lsczNKeS9JMno1VDRJSGhRcU53dUlQTXF3OU1qQ29hNjh3YjRwWjFYaS9LMVpYUDY5Vnl5d2tJM0M3VGUyCmZKbUl0ZFVEbWowVkRUMDZxS2hGOEpWT0pWa2R6WmhwdTlQTU1zbU43NEgrclgySnU3cGdFOHBsbFdlZzh4bjJBMWJVYXRNbjRxR3QKZy9CS0VpSjNIQVZ6NGhseFFzRHNkVWFha0ZqZ2FvNHJwVVl3Qkk0WnNoZmp2cW02ZjFieEpBUFhzaUVvZGc0Mk1FeDUxVUdhbXFpNApOYm9NT3ZKRUd5Q0k5OFVsMXozRzR6NUQzWWYreE9yMVV6NU1aZjg3U3N0NFdtc1hYdzNIdzA5T21pcWk3VmROSXVKR21qOFBrVFFrCmZWWGpqSlUzMHhyd0NTc3Mwc21OdEEwQXEyY3BLTmdCOVJrRXRoMitkdjV5WE1TRnl0S0FRZDhGcUtQVmhKQlBDL1BnUDVzWjBqZUoKUC9KN1VoeU05dUgzUEFlWGpBNmlXWUVNc3BBOTArTlpSdTBQcWFmZWdHdGFxZ2UyR2N1OFYvT1hJWG9Nc1N0MFB1dmFwMmN0VE1TWQpuallKZG1abS9Cby82a2hVSEw0d3ZZQlF2M3kxemdEMkRHSFo1eVFENE9NQmdRNjkySVUwaUwyeU5xaDdYQWpsUklDTWIvZ3YxU0hLCkhSelErOFMxaDlFNlRzZDJ0VFZJdFFJREFRQUJvMEl3UURBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJTTSt4eDEKdkFMVG4wNHVTTm41WUZTcXhMTlArakFPQmdOVkhROEJBZjhFQkFNQ0FRWXdEUVlKS29aSWh2Y05BUUVOQlFBRGdnSUJBRWlpMVFBTApMdEEvdkJ6VnRWUkpIbHByOU9UeTRFQTM0TXdVZTduSitqVzFkUmVUYWdWcGhaek5UeGw0V3htQjgyTSt3ODViai9VdlhnRjJFejhzCkFMbk5sbEk1U1cwRVRzWHBENFlONGZxelg0SVM4VHJPWmdZa05Ddm96TXJuYWR5SG5jSTAxM25SMDNlNHFsbFkvcDBtK2ppR1BwMksKaDJSWDVSYzY0dm1OdWVNemVNR1EyTGpkdDROUjVNVE1JOVVHZk9aUjA4MDBNY0QyUnJzTHJmdzlFQVVxTzBxUkplNk0xSVNIZ0NxOApDWXlxT2hOZjZEUjVVTUVRR2ZuVEtCN1UwVkV3S2JPdWtHZldId3Bqc2NXcHhrSXhZeGVVNzJuTEwvcU1GSDNFUXhpSjJmQXlRT2FBCjRrWmY1ZVBCQUZtbytlZ2d2SWtzRGtjMEMrcFh3bE0yL0tmVXJ6SE4vZ0xsZGZxNUp3bjU4L1U3eW4yZnFTTExpTW1xMFVjOU5uZW8KV1dScko4L3ZKOEhqSkxXRzk2NStNazJ3ZVdqUk9laVFXTU9EdkE4czFwZnJ6Z3poSU1mYXR6N0RQNzh2M0RTayt5c2h6V2VQUy9Uago2dFEvNTArNnVhV1RSUnhtSHlINlpGNXY0SGFVTXN0MTlXN2w5by9IdUtUTXFKWjlaUHNrV2tvRGJHczR4dWdEUTVyM1Y3bXpLV21UCk9QUUQ4cnY3Z21zSElORlNINXBrQW51WVp0dGNUVm9QMElTVm9Ed1VRd2JLeXR1NFFUYmFha1JuaDYrdjQwVVJGV2tJc3I0V09aY2sKYnhKRjBXZGRDYWpKRmRyNjBxWmZFMkVmdjRXc3RLMnRCWlFJZ3g1MUY5TnhPNU5RSTFtZzdUeVJWSjEyQU1YRHVEamIKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKVHVuVHJ1c3QgUm9vdCBDQQo9PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGc3pDQ0E1dWdBd0lCQWdJVUV3TFY0a0JNa2thR0ZtZGR0THU3c21zKy9CTXdEUVlKS29aSWh2Y05BUUVMQlFBd1lURUxNQWtHCkExVUVCaE1DVkU0eE56QTFCZ05WQkFvTUxrRm5aVzVqWlNCT1lYUnBiMjVoYkdVZ1pHVWdRMlZ5ZEdsbWFXTmhkR2x2YmlCRmJHVmoKZEhKdmJtbHhkV1V4R1RBWEJnTlZCQU1NRUZSMWJsUnlkWE4wSUZKdmIzUWdRMEV3SGhjTk1Ua3dOREkyTURnMU56VTJXaGNOTkRRdwpOREkyTURnMU56VTJXakJoTVFzd0NRWURWUVFHRXdKVVRqRTNNRFVHQTFVRUNnd3VRV2RsYm1ObElFNWhkR2x2Ym1Gc1pTQmtaU0JEClpYSjBhV1pwWTJGMGFXOXVJRVZzWldOMGNtOXVhWEYxWlRFWk1CY0dBMVVFQXd3UVZIVnVWSEoxYzNRZ1VtOXZkQ0JEUVRDQ0FpSXcKRFFZSktvWklodmNOQVFFQkJRQURnZ0lQQURDQ0Fnb0NnZ0lCQU1QTjAveTlCRlBkRENBNjFZZ3VCVXRCOVlPQ2Z2ZFpuNTZlWStoegoydllHcVU4ZnRQa0xIem1NbWlEUWZnYlU3RFRaaHJ4MVc0ZUk4TkxaMUtNS3Ntd2I2MGtzUHF4ZDJKUURvT3cwNVRERU5YMzdKazBiCmJqQlUyUFdBUlp3NXJaekpKUVJObXBBK1RrQnVpbXZOS1dmR3pDM2dkT2dGVndwSVVQcDZROXArN0Z1YURtSjIvdXFkSFlWeTdCRzcKTmVnZko3L0JvY2U3U0JiZFZ0Zk1UcURodWF6YjFZTVpHb1hSbEpmWHlxTmxDL000K1FLdTNmWm56OGsvOVlvc1J4cVpid1VOL2RBZApnakg4S2N3QVdKZVJUSUFBSERPRmxpL0xRY0tMRUlURENTU0pIN1VQMmRsM1J4aVNsR0JjeDVrRFBQNzNsYWQ5VUtHQXdxbURyVmlXClZTSGJobG5VcjhhODNZRnVCOXRnWXY3c0VHN2FhQUgwZ3h1cFBxSmJJOWRreHQvY29uM1lTN3FDMGxINFpyOEdSdVI1S2lZMmVZOGYKVHBrZHNvOE1EaHoveVYzQS9aQVFwckUzODgwNkpHNjBoWkMvZ0xrTWpOV2Ixc2p4Vmo4YWdJbDZxZUliTWxFc1B2TGZlL1pkZWlrWgpqdVhJdlRaeGkxMU13aDAvclZpaXp6MXdUYVpRbUNYY0kvbTRXRUVJY2I5UHVJU2dqd0JVRmZ5UmJWaW5sanZyUzVZbnpXdWlvWWFzCkRYeFU1bVpNWmwrUXZpR2FBa1l0NUlQQ2dMblBTejdvZnp3QjdJOWV6WC9TS0VJQmxZcmlsejBRSVgzMm5SekZOS0hzTEE0S1Vpd1MKVlhBa1BjdkNGRFZEWFNkT3ZzQzlxbnlXNS95ZVlhMUUwd0NYQWdNQkFBR2pZekJoTUIwR0ExVWREZ1FXQkJRR21wc2ZVMzN4OWFUSQowNFkrb1hOWnRQZEVJVEFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjhHQTFVZEl3UVlNQmFBRkFhYW14OVRmZkgxcE1qVGhqNmhjMW0wCjkwUWhNQTRHQTFVZER3RUIvd1FFQXdJQkJqQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFxZ1Z1dHQwVnliK3p4aUQyQmtld2hwTWwKMDQyNXlBQS9sL1ZTSjRoeHlYVDk2OHBrMjF2dkhsMjZ2OUhyN2x4cHVoYkk4N21QMHpZdVFFa0hEVm5laXhDd1NRWGkvNUUvUzdmZApBbzc0Z1NoY3pOeHRyMThVbkgxWWVBMzJnQW01NlE2WEtSbTR0K3Y0RnN0VkV1VEdmYnZFN1BpMUhFNCtaNy9GWHh0dGJVY29xZ1JZCllkWjJ2eUovMEFkcXAyUlQ4SmVObllBL3U4RUgyMld2NXBzeW1zTlVrOFFjQ01ORSszdGpFVVBSYWhwaGFubHRrRThwamtjRndSSnAKYWRiR05qSGgvUHFBdWx4UHhPdTNNcXo0ZFdFWDF4QVp1ZkhTQ2U5NlFwMWJXZ3ZVeHBWT0tzNy9COWRQZmhnR2lQRVp0ZG1ZdTY1eAp4QnpuZEZsWTd3eUp6NHNmZFpNYUJCU1NTRkNwNjFjcEFCYmpOaHpJK0wvd005VkJEOFRNUE4zcE0wTUJrUkFySHRHNVhjMHlHWXVQCmpDQjMxeUxFUXR5RUZwc2xiZWkwVlhGL3NIeXowM0ZKdWM5U3BBUS8zRDJndTY4em5nb3dZSTdiblYyVXFMMWc1MktBZG9HRERJek0KTUVaSjRnelNxSy9yWVhIdjV5SmlxZmRjWkd5ZkZveG5OaWRGOVFsN3YvWVFDdkd3alZSRGpBUzZvei92NGpYSCtYVGdielJCMEw5egpaVmNnK1p0bmVtWm9KRTZBWmIwUW1RWlo4bVd2dU1aSHUvMlFlSXRCY3k2dlZSL2NPNUp5Ym9UVDBHRk1EY3gyVitJdGhTSVZOZzNyCkFaM3IyT3ZFaEpuN3dBek1NdWpqZDlxRFJJdWVWU2pBaTFqVGtENU9Hd0R4RmEyREs1bz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxCj09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRnBEQ0NBNHlnQXdJQkFnSVFPY3FUSE85RDg4YU9rOGYwWklrNGZqQU5CZ2txaGtpRzl3MEJBUXNGQURCc01Rc3dDUVlEVlFRRwpFd0pIVWpFM01EVUdBMVVFQ2d3dVNHVnNiR1Z1YVdNZ1FXTmhaR1Z0YVdNZ1lXNWtJRkpsYzJWaGNtTm9JRWx1YzNScGRIVjBhVzl1CmN5QkRRVEVrTUNJR0ExVUVBd3diU0VGU1NVTkJJRlJNVXlCU1UwRWdVbTl2ZENCRFFTQXlNREl4TUI0WERUSXhNREl4T1RFd05UVXoKT0ZvWERUUTFNREl4TXpFd05UVXpOMW93YkRFTE1Ba0dBMVVFQmhNQ1IxSXhOekExQmdOVkJBb01Ma2hsYkd4bGJtbGpJRUZqWVdSbApiV2xqSUdGdVpDQlNaWE5sWVhKamFDQkpibk4wYVhSMWRHbHZibk1nUTBFeEpEQWlCZ05WQkFNTUcwaEJVa2xEUVNCVVRGTWdVbE5CCklGSnZiM1FnUTBFZ01qQXlNVENDQWlJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dJUEFEQ0NBZ29DZ2dJQkFJdkM1NjlsbXdWbmxza04KSkxuUURtVDh6dUlrR0N5RWYzZFJ5d1FSTnJoZTdXbHhwNTdrSlFtWFo4Rkh3cytSRmpaaVBUZ0U0VkdDLzZ6U3RHbmRMdXdSbzBYdQphMnM3VEwrTWphUWVuUkc1NlRqNWVnNE1tT0lqSGRGT1k5VG51RUZFKzJ1dmE5b2YwOFdSaUZ1a2laTFJnZWFNT1ZpZzFtbERxYTJZClVsaHUyd3I3YTg5byt1T2tYanBGYzVnSDZsOENjdDRNcGJPZnJxa2R0eDJ6L0lwWjUyNXlaYTMxTUpRakIvT0NGa3MxbUp4VHV5L0sKNUZyWng0MGQvSmlaK3l5a2dtdndLaCtPQzE5eFhGeXVRbnNwaVlITEE2T1p5b2llQzBBSlFUUGI1bGg2L2E2WmNNQmFEOVlUaG5FdgpkbW44a04zYkxXN1I4cHYxR211ZWJ4V01ldkJMS0tBaU9JQWtiRGFrTy9Jd2tmTjRFOC9CUHpXcjhSMFJJN1ZESXA0QmtyY1lBdVVSCjBZTGJGUURNWVRmQktueWE0ZEM2czFCRzdvS3NuVEg0K3lQaUF3QkljS01KSm5rVlUyRHpPRnl0T09xQkFHTVV1VE5lM1F2Ym9FVUgKR2pNSitFMjBwd0ttYWZUQ1dRV0laWVZXcmt2TDRONDhmUzBheU9uN0g2TmhTdFlxRTYxM1RCb1ltNUVQV05nR1ZNV1grS28vSUlxbQpoYVozOXFiOEhPTHVicFF6S29OUWhBcmxUNGI0VUVWNEFJSHJXMmpqSm8zTWUxeFI5QlFzUUw0YVlCMTZjbUVkSDJNdGlLck9va1dRCkNQeHJ2ck5RS2xyOXFFZ1lSdGFRUUpLUUNvUmVhREg0NiswTjB4M0dmWmtZVlZZblpTNk5SY1VrN003akFnTUJBQUdqUWpCQU1BOEcKQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQXBJSTZaZ3BKSUtNK3FUVzhWWDZpVk52Ukx1TUE0R0ExVWREd0VCL3dRRQpBd0lCaGpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQVBwQklxbTVpRlNWbWV3elZqSXVKbmRmdFRnZnZuTkFVWDE1UXZXaVdrS1FVCkVhcG9iUWsxT1VBSjJ2UUpMRFNsZTFtRVNTbVhkTWdISGtkdDhzNGNVQ2JqbmoxQVV6LzNmNVoyRU1WR3BkQWdTMUQwTlRzWTlGVnEKUVJ0SEJtZzh1d2tJWXRsZlZVS3FyRk9GckpWV05sYXI1QVdNeGFqYUg2TnB2Vk1QeFAvY3l1Tis4a3lJaGtkR0d2TUE5WUNSb3R4RApRcFNiSVBEUnpiTHJMRlBDVTNoS1R3U1VRWnFQSnpMQjVVa1p2L0h5d291b0Nqa3hLTFI5WWpZc1Rld2ZNN1orZDIxK1VQQ2ZEdGNSCmo4OFl4ZU1uL2lidkJaM1B6emZGMEh2YU83QVdoQXc2azlhK0Y5c1BQZzRaZUFuSHFRSnlJa3YzTjNhNmRjU0ZBMXBqMWJGMUJjSzUKdlpTdGpCV1pwNU45OXNYenFuVFBCSVdVbUFEMDR2bktKR1cvNEdLdnlNWDZzc21lVmtqYWVmMldkaFcrbzQ1V3hMTTAvTDVIOU1HMApxUHpWTUlobzdzdXV5V1BFZHI2c09CamhYbHpQcmpvaVVldlJpN1B6S3pNSFZJZjZ0TElUZTdwVEJHSUJuZkhBVCs3aE90U0xJQkQ2CkFsZm03OEVMdDVCR25Ca3BqTnh2b0VwcGFaUzNKR1dnLzZ3L3pnSDdJUzc5YVBpYjhxWFBNVGhjRmFybWx3REIzMXFscHptcTZZUi8KUEZHb090bVVXNHkvVHdoeDVkdW9YTlRTcHY0QW84WVd4dy9vZ000Y0tHUjBHUWpUUXVQT0FGMS9zZHdUc09FRnk5RWdxb1owbmpubgprZjMvVzliM3JhWXZBd3R0NDFkVTYzWlRHSTBSbUxvPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpIQVJJQ0EgVExTIEVDQyBSb290IENBIDIwMjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDVkRDQ0FkdWdBd0lCQWdJUVozU2RqWGZZTzJyYkl2VC9XZUsvempBS0JnZ3Foa2pPUFFRREF6QnNNUXN3Q1FZRFZRUUdFd0pIClVqRTNNRFVHQTFVRUNnd3VTR1ZzYkdWdWFXTWdRV05oWkdWdGFXTWdZVzVrSUZKbGMyVmhjbU5vSUVsdWMzUnBkSFYwYVc5dWN5QkQKUVRFa01DSUdBMVVFQXd3YlNFRlNTVU5CSUZSTVV5QkZRME1nVW05dmRDQkRRU0F5TURJeE1CNFhEVEl4TURJeE9URXhNREV4TUZvWApEVFExTURJeE16RXhNREV3T1Zvd2JERUxNQWtHQTFVRUJoTUNSMUl4TnpBMUJnTlZCQW9NTGtobGJHeGxibWxqSUVGallXUmxiV2xqCklHRnVaQ0JTWlhObFlYSmphQ0JKYm5OMGFYUjFkR2x2Ym5NZ1EwRXhKREFpQmdOVkJBTU1HMGhCVWtsRFFTQlVURk1nUlVORElGSnYKYjNRZ1EwRWdNakF5TVRCMk1CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCRGdJL3JHZ2x0SjZySzlKT3REQTRNTTdLS3J4Y20xbApBRWVJaFB5YUptdXFTN3BzQkFxSVhoZnlWWWY4TUxBMDRqUllWeHFFVStrdzJhbnlsblREVVI5WVNUSE1tRTVnRVlkMTAzS1VrRStiCkVDVXFxSGd0dnBCQldKQVZjcWVodDZOQ01FQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVV5UnRUZ1JMK0JOVVcKMGFxOG1tKzNvSlVaYnNvd0RnWURWUjBQQVFIL0JBUURBZ0dHTUFvR0NDcUdTTTQ5QkFNREEyY0FNR1FDTUJIZXJ2amNUb2l3cWZBaQpyY0pSUU85Z2NTM3Vqd0xFWFFOd1NhU1M2c1VVaUhDbTB3Mndxc29zUUp6NzZZSnVtZ0l3SzBlYUI4YlJ3b0Y4eWd1V0dFRWJvL1F3CkNaNjFJeWdObnhTMlBGT2lUQVpwZmZwc2tjWXFTVVhtN0xjVDRUcHMKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQXV0b3JpZGFkIGRlIENlcnRpZmljYWNpb24gRmlybWFwcm9mZXNpb25hbCBDSUYgQTYyNjM0MDY4Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJR0ZEQ0NBL3lnQXdJQkFnSUlHM0RwMHYrdWJIRXdEUVlKS29aSWh2Y05BUUVMQlFBd1VURUxNQWtHQTFVRUJoTUNSVk14UWpCQQpCZ05WQkFNTU9VRjFkRzl5YVdSaFpDQmtaU0JEWlhKMGFXWnBZMkZqYVc5dUlFWnBjbTFoY0hKdlptVnphVzl1WVd3Z1EwbEdJRUUyCk1qWXpOREEyT0RBZUZ3MHhOREE1TWpNeE5USXlNRGRhRncwek5qQTFNRFV4TlRJeU1EZGFNRkV4Q3pBSkJnTlZCQVlUQWtWVE1VSXcKUUFZRFZRUURERGxCZFhSdmNtbGtZV1FnWkdVZ1EyVnlkR2xtYVdOaFkybHZiaUJHYVhKdFlYQnliMlpsYzJsdmJtRnNJRU5KUmlCQgpOakkyTXpRd05qZ3dnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDRHdBd2dnSUtBb0lDQVFES2xtdU82dmo3OGFJMTRIOU0ydUREClV0ZDl0aERJQWw2elF5ckVUMnF5eWh4ZEtKcDRFUnBwV1ZldnRTQkM1SXNQNXQ5YnBnT1NML1VSNUdMWE1uRTQyUVFNY2FzOVVYNFAKQjk5akJWenB2NVJ2d1NtQ3dMVGFVYkRCUEx1dE4wcGN5dkZMTmc0a3E3L0RoSGY5cUZEMHNlZkdMOUl0V1kxNkNrNldhVklDcWphWQo3UHo2RklNTU54L0pramQvMTRFdDVjUzU0RDQwL21mMFBtYlIwL1JBejE1aU5BOXdCajRnR0ZyTzkzSWJKV3lUZEJTVG8zT3hEcXFICkVDTlpYeUFGR1VmdGFJNlNFc3BkL05ZcnNwSThJTS9oWDY4Z3ZxQjJmM2JsN0JxR1lUTSs1M3UwUDZBUGpxSzVhbSs1aHladlFXeUkKcGxEOWFtTUw5Wk1XR3htUHN1MmJtOG1ROVFFTTN4azlEejQ0SThrdmp3elJBdjRiVmRaTzBJMDhyMCtrOC82dkt0TUZuWGtJb2N0WApNYlNjeUpDeVovUVlGcE02L0VmWTBYaVdNUis2S3d4ZlhabXRZNGxhSkNCMjJOLzlxMDZtSXFxZFh1WW5pbjFvS2FQbmlyamFFYnNYCkxabWRFeVJHOThYaTJKK09mOGVQZEcxYXN1aHk5YXp1SkJDdEx4VGEveTJhUm5GSHZrTGZ1d0hiOUgvVEtJOHhXVnZUeVFLbXRGTEsKYnBmN1E4VUlKbStLOUx2OW55aXFEZFZGOHhNNkhkakFlSTlCWnp3ZWxHU3Vld3ZGNk5rQmlEa2FsNFprUWRVN2h3eHUrZy9HdlVnVQp2emxOMUo1QnRvK1dIV09XazltVkJuZ3hhSjQzQmp1QWlVVmhPU1BIRzBTakZlVWMrSkl3dXdJREFRQUJvNEh2TUlIc01CMEdBMVVkCkRnUVdCQlJsemV1ck5SNEFQbjdWZE1BY3RITkhEaHBrTHpBU0JnTlZIUk1CQWY4RUNEQUdBUUgvQWdFQk1JR21CZ05WSFNBRWdaNHcKZ1pzd2daZ0dCRlVkSUFBd2dZOHdMd1lJS3dZQkJRVUhBZ0VXSTJoMGRIQTZMeTkzZDNjdVptbHliV0Z3Y205bVpYTnBiMjVoYkM1agpiMjB2WTNCek1Gd0dDQ3NHQVFVRkJ3SUNNRkFlVGdCUUFHRUFjd0JsQUc4QUlBQmtBR1VBSUFCc0FHRUFJQUJDQUc4QWJnQmhBRzRBCmJ3QjJBR0VBSUFBMEFEY0FJQUJDQUdFQWNnQmpBR1VBYkFCdkFHNEFZUUFnQURBQU9BQXdBREVBTnpBT0JnTlZIUThCQWY4RUJBTUMKQVFZd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFIU0hLQUlyZHg5bWlXVHRqM1F1Umh5N3FQajRDeDJEdGpxbjZFV0tCN2ZnUGlETAo0UWpiRXdqNEtLRTFzb0N6QzFIQTAxYWFqVE5GU2E5SjhPQTlCM3BGRTFyL3lKZlkweGdzZlpiNDNhSmxRM0NUa0JXNmtOL29HYkRiCkxJcGdEN2R2bEFjZUhhYkpoZmE5TlBoQWVHSVFjRHErZlVzNWdha1ExSlpCdS9oZkhBc2RDUEt4c0lsNjh2ZWc0TVNQaTNpMU8xaWwKSTQ1UFZmNDJPK0FNdDhvcU1FRWd0SUROcnZ4MlpuT29ybTdoZk5vRDZKUWc1aUtqMEIrUVhTQlRGQ1pYMmxTWDN4WkVFQUVlaUdhUApjamlUM1NDM05MN1g4ZTVqamtkNUtBYjg4MWxGSldBaU14dWpYNmk2S3RvYVBjMUE2b3p1QlJXVjFhVXNJQytubUNqdVJmenh1SWdBCkxJOUMybEhWbk9VVGFIRkZRNHVlQ3lFOFMxd0YzQnFmbUk3YXZTS2VjczJ0Q3N2TW8yZWJLSFRFbTljYVBBUllwb0tkcmNkN2IvK0EKbHVuNGpXcTlHSkFkLzBrYWtGSTNreTg4QWwyQ2RndFI1eGJIVi9nNCthZk5teUpVNzJPd0ZXMVRaUU5LWGtxZ3NxZU9TUUJaT05YSAo5SUJrOVc2VlVMZ1JmaFZ3T0Vxd2Y5REVNbkRBR2YvSk9DMFVMR2IwUWtUbVZYWWJnQlZYLzhDbnA2bzVxdGpUY05BdXV1dVVhdnBmCk5JYm5Zclg5aXZBd2haVEpyeVFDTDIvVzNXZis0N0JWVHdTWVQ2UkJWdUtUMEdybzF2UDdaZURPZGNReFdRenVnc2dNWUROS0dicUUKWnljUHZFSmR2U1JVRGV3ZGNBWmZwTHo2SUh4VgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgp2VHJ1cyBFQ0MgUm9vdCBDQQo9PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ0R6Q0NBWldnQXdJQkFnSVVibXE4V2FwVHZwZzVaNkxTYTZRNzVtMGMxdG93Q2dZSUtvWkl6ajBFQXdNd1J6RUxNQWtHQTFVRQpCaE1DUTA0eEhEQWFCZ05WQkFvVEUybFVjblZ6UTJocGJtRWdRMjh1TEV4MFpDNHhHakFZQmdOVkJBTVRFWFpVY25WeklFVkRReUJTCmIyOTBJRU5CTUI0WERURTRNRGN6TVRBM01qWTBORm9YRFRRek1EY3pNVEEzTWpZME5Gb3dSekVMTUFrR0ExVUVCaE1DUTA0eEhEQWEKQmdOVkJBb1RFMmxVY25WelEyaHBibUVnUTI4dUxFeDBaQzR4R2pBWUJnTlZCQU1URVhaVWNuVnpJRVZEUXlCU2IyOTBJRU5CTUhZdwpFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFWlZCS3JveDVsa3FxSEFqRG82TE4vbGxXUVhmOUpwUkN1eDNOQ050enNsdDE4OCtjClRvTDB2L2hoSm9WczFvVmJjbkRTL2R0aXROOVRpNzJ4UkZoaVFnbkgrbjliRU9mK1FQM0EyTU1yTXVkd3ByZW1JRlVkZTRCZFM0OW4KVFBFUW8wSXdRREFkQmdOVkhRNEVGZ1FVbURuTnZ0aXlqUGV5cStHdEpLOTdmS0hiSDg4d0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBTwpCZ05WSFE4QkFmOEVCQU1DQVFZd0NnWUlLb1pJemowRUF3TURhQUF3WlFJd1Y1M2RWdkhINCttNFNWQnJtMm5EYit6RGZTWGtWNVVUClFKdFMwenZ6UUJtOEpzY3RCcDYxZXphZjlTWFVZMnNBQWpFQTZkUEdubGFhS3N5aDJqL0laaXZUV0p3Z2hmcXJrWXB3Y0JFNFlHUUwKWWdtUldBRDVUZnMwYU5vSnJTRUdHSlRPCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCnZUcnVzIFJvb3QgQ0EKPT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRlZqQ0NBejZnQXdJQkFnSVVRK054RTlpeldSUmR0ODZNL1RYOWI3d0ZqVVV3RFFZSktvWklodmNOQVFFTEJRQXdRekVMTUFrRwpBMVVFQmhNQ1EwNHhIREFhQmdOVkJBb1RFMmxVY25WelEyaHBibUVnUTI4dUxFeDBaQzR4RmpBVUJnTlZCQU1URFhaVWNuVnpJRkp2CmIzUWdRMEV3SGhjTk1UZ3dOek14TURjeU5EQTFXaGNOTkRNd056TXhNRGN5TkRBMVdqQkRNUXN3Q1FZRFZRUUdFd0pEVGpFY01Cb0cKQTFVRUNoTVRhVlJ5ZFhORGFHbHVZU0JEYnk0c1RIUmtMakVXTUJRR0ExVUVBeE1OZGxSeWRYTWdVbTl2ZENCRFFUQ0NBaUl3RFFZSgpLb1pJaHZjTkFRRUJCUUFEZ2dJUEFEQ0NBZ29DZ2dJQkFMMVZmR0hUdUIwRVlnV2dybXkzY0xSQjZrc0RYaEEva0ZvY2l6dXdab3RzClNLWWNJcnJWUUpMdU03SWpXY21PdkZqYWk1N1FHZkl2V2NhTVkxcTZuNk1Mc0xPYVhMb1J1QkxwREx2UGJteUFoeWtVQXl5TkpKckkKWklPMWFxd1RMRFB4bjl3c1lUd2FQM0JWbTYwQVVuL1BCTG4rTnZxY3dCYXVZdjZXVEVOK1ZSUytHclBTYmNLdmRtYVZheXF3bEhlRgpYZ1FQWWgxamRmZHI1OHRibW5Ec1BtY0Y4UDRIQ0lEUEtOc0Z4aFFuTDRaOThDZmUvK1orTTBqbkN4NVkwU2NyVXc1WFNtWFgrNktBCllQeE12RFZUQVdxWGNvS3Y4UjF3Nkp6MTcxN0NiTWRIZmxxVWhTWk5PN3JyVE9pd0NjSmx3cDJkQ1p0T3RaY0ZyUFVHb1BjMkJYNzAKa0xKcnhMVDVaT3JwR2dySURhanRKOG5VNTdPNXE0SWlrQ2M5S3VoOGtPKzhULzNpQ2lTbjNtVWtwRjNxd0hZdzAzZFErQTBFbTVRMgpBWFBLQmxpbTB6dmMrZ1JHRTFXS3lVUkh1RkU1R2k3b05PSjV5MWxLQ24rOHB1OGZBMmRxV1NzbFlwUFpVeGxtUENkaUtZWk5wR3Z1Ci85Uk91dFcwNG81SVdnQVpDZkVGMmM2UnNmZnI2VGxQOW04RVE1cFY5VDRGRkwyL3MxbTAySTR6aEtPUVVxcXpBcFZnK1F4TWFQbnUKMVJjTitIRlh0U1hrS2U1bFhhL1I3andYQzFwRHhhV0c2aVNlNGdVSDNEUkNFcEhXT1hTdVRFR0MyL0ttU05Hem0vTXpxdk9td01WTwo5ZlNkZG1QbUFzWWlTOEdWUDFCa0xGVGx0dkE4S2M5WEFnTUJBQUdqUWpCQU1CMEdBMVVkRGdRV0JCUlVZbkJqOFhXRVExaU8wUllnCnNjYXNHcnoyaVRBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUE0R0ExVWREd0VCL3dRRUF3SUJCakFOQmdrcWhraUc5dzBCQVFzRkFBT0MKQWdFQUticVNTYWV0OFBGd3crU1g4SitwSmRWcm5qVCs1aHBrOWpwclVySVFlQnFmVE5xSzJ1d2NOMUxnUWt2N2JIYktKQXM1RWhXZApueEV0L0hsazNPRGc5ZDNnVjhtbHNuWndVS1QrdHdwdzFhQTA4WFhYVFVtNkVkR3oyT3lDLytzT3hMOWtMWDFqYmhkNDdGMThpTWpyCmpsZDIyVmtFK3J4U0gwV3M4SHFBN094dmRxNlIyeENPQk55UzM2RDI1cTVKMDhGc0Vodk1LYXI1Q0tYaU54VEtzYmhtN3hxQzVQRDQKOGFjV2FiZmJxV0U4bi9VeHkrUUFSc0l2ZExHeDE0SHVxQ2FWdklpdlREVUhLZ0xLZUJSdFJ5dEFWdW5MS21DaFp3T2d6b3k4c0hKbgp4REhPMnpUbEpRTmdKWHR4bU9UQUd5dGZkRUxTUzhWWkNBZUh2c1hEZitlVzJlSGNLSmZXandYajladE95aDFRUndWVHNNbzU1NFdnCmljRUZPd0UzMHo5SjRuZnJJOGlJWmpzOU9YWWhSdkhzWHlPNDY2Sm1kWFRCUVBmWWFKcVQ0aTJwTHIwY294N0lkTWFrTFhvZ3F6dTQKc0ViOWI5MWZVbFYxWXZDWG9IelhPUDBsMzgyZ214RFBpN2c0WGw3RnRLWUNOcUVlWHh6UDRwYWRLYXI5bUs1UzRmTkJVdnVwTG5LVwpueWZqcW5OOStCb2pabnM3cTJXd01nRkxGVDQ5b2s4TUt6V2l4dGxuRWpVd3pYWXVGck9abmsxUFRpMDdORVBobWc0TnBHYVh1dEljClNrd3NLb3VMZ1U5eEdxbmRYSHQ3Q01VQURUZEE0M3g3VkY4dmhWOTI5dmVuc0J4WFZzRnk2SzJpcjQwelNib2ZpdHptZEh4Z2htK0gKbDNzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpJU1JHIFJvb3QgWDIKPT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDR3pDQ0FhR2dBd0lCQWdJUVFkS2QwWExxN3FlQXdTeHM2UytIVWpBS0JnZ3Foa2pPUFFRREF6QlBNUXN3Q1FZRFZRUUdFd0pWClV6RXBNQ2NHQTFVRUNoTWdTVzUwWlhKdVpYUWdVMlZqZFhKcGRIa2dVbVZ6WldGeVkyZ2dSM0p2ZFhBeEZUQVRCZ05WQkFNVERFbFQKVWtjZ1VtOXZkQ0JZTWpBZUZ3MHlNREE1TURRd01EQXdNREJhRncwME1EQTVNVGN4TmpBd01EQmFNRTh4Q3pBSkJnTlZCQVlUQWxWVApNU2t3SndZRFZRUUtFeUJKYm5SbGNtNWxkQ0JUWldOMWNtbDBlU0JTWlhObFlYSmphQ0JIY205MWNERVZNQk1HQTFVRUF4TU1TVk5TClJ5QlNiMjkwSUZneU1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFelp2Vm40Q0RDdXdKU3ZNV1NqNWN6M2VzM21jRkRSMEgKdHR3VysxcUxGTnZpY1dERXVrV1ZFWW1PNmdiZjl5b1dIS1M1eGNVeTRBUGdIb0lZT0l2WFJkZ0thbTdtQUhmN0FsRjlJdGdLYnBwYgpkOS93K2tIc09keDF5bWdIREIvcW8wSXdRREFPQmdOVkhROEJBZjhFQkFNQ0FRWXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WCkhRNEVGZ1FVZkVLV3J0NUxTRHY2a3ZpZWpNOXRpNmx5TjVVd0NnWUlLb1pJemowRUF3TURhQUF3WlFJd2UzbE9SbENFd2tTSFJodEYKY1A5WW1kNzAvYVRTVmFZZ0xYVFdOTHhCbzFCZkFTZFd0TDRuZFFhdkVpNTFtSTM4QWpFQWkvVjNiTlRJWmFyZ0N5enVGSjBuTjZUNQpVNlZSNUNtRDEvaVFNVnRDbndyMS9xNEFhT2VNU1ErMmIxdGJGZkxuCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkhpUEtJIFJvb3QgQ0EgLSBHMQo9PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZhakNDQTFLZ0F3SUJBZ0lRTGQyc3ptS1hsS0ZENkxETmRtcGVZREFOQmdrcWhraUc5dzBCQVFzRkFEQlBNUXN3Q1FZRFZRUUcKRXdKVVZ6RWpNQ0VHQTFVRUNnd2FRMmgxYm1kb2QyRWdWR1ZzWldOdmJTQkRieTRzSUV4MFpDNHhHekFaQmdOVkJBTU1Fa2hwVUV0SgpJRkp2YjNRZ1EwRWdMU0JITVRBZUZ3MHhPVEF5TWpJd09UUTJNRFJhRncwek56RXlNekV4TlRVNU5UbGFNRTh4Q3pBSkJnTlZCQVlUCkFsUlhNU013SVFZRFZRUUtEQnBEYUhWdVoyaDNZU0JVWld4bFkyOXRJRU52TGl3Z1RIUmtMakViTUJrR0ExVUVBd3dTU0dsUVMwa2cKVW05dmRDQkRRU0F0SUVjeE1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBOUI1L1VuTXlESFBrdlJOMApvOVF3cU5DdVM5aTIzM1ZIWnZSODV6a0VIbXB3SU5KYVIzSm5WZlNsNkozVkhpR2g4R2U2ekNGb3ZrUlR2NDM1NHR3dlZjZzNQeCtrCndKeXo1SGRjb0ViK2Qvb2FvRGpxN1pweTNpdTlsRmM2dXV4NTUxOTlRbVE1ZWlZMjl5VHcxUys2bFpnUlpxMlhOZFoxQVlEZ3IvU0UKWVl3TkhsOThoNVplUWEvcmgrcjRYZkV1aUFVK1RDSzcyaDhxM1ZKR1pEbnpRczdabmd5enNIZVhaSnpBOUtNdUg1VUhzQmZmTU5zQQpHSlpNb1lGTDNRUnRVNk05L0FlczFNVTNndXZrbFFnWktJTFNRanFqMkZQc2VZbGdTR0RJY3BKUTNBT1Bneit5UWxkYTIycnBFWmZkCmhTaThNRXlyNDhLeFJVUkhIK0NLRmdlVzBpRVBVOER0cVg3VVR1eWJDZXl2UXF3dzFyL1JFRVhncGhheXBjWFRUM09VTTNFQ29XcWoKMWpPWFR5RmpIbHVQMmNGZVJYRjNENEZkWHlHYXJZUE0rbDdXalNOZkd6MUJyeUIxWmxwSzlwLzdxeGozY2NDMkhUSHNPeURyeStLNAo5YTZTc3ZmaGhFdnlvdktUbWlLZTB4UnZObFM5SDE1WkZibHpxTUY4YjN0aTZSWnNSMXBsOHc0Um0wYlovVzNjMXB6QXRIMmxzTjAvClZtK2grZmJrRWtqOUJuOFNWN2FwSTA5YkE4UGdjU29qdC9ld3NUdThtTDNXbUtnTWEvYU9FbWVtOHJKWTVBSUpFenlwdXhDMDBqQkYKOGV6M0FCSGZaZmpjSzBOVnZ4YVh4QS9WTEdHRXFuS0cvdVk2ZnNJL2ZlNzhMeFErNW9YZFVHKzNTZTBDQXdFQUFhTkNNRUF3RHdZRApWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVThuY1grbDZvL3ZZOWNkVm91c2xHRERqWXI3QXdEZ1lEVlIwUEFRSC9CQVFECkFnR0dNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUNBUUJRVWZCMTNIQUU0LytxZGRSeG9zdWVqNmlwMDY5MXgxVFBPaHdFbVNLc3hCSGkKN3pOS3BpTWREZzFIMkRmSGI2ODBmMCtCYXpWUDZYS2xNZUo0NS9kT2xCaGJRSDNQYXlGVWh1YVZldnZHeXVxY1NFNVhDVjB2clBTbAp0SmN6V05Xc2Vhbk1YL21GK2xMRmpmaVJGT3M2RFJmUVVzSjc0OEp6amtaNEJqZ3M2RnphWnNUMHBQQldHVE1wV21XU0JVZEdTcXVFCnd4NG5vUjhSa3BrbmRaTVB2RFk3bDFlUEpsc011NXdQMUc0d0I5VGNYelpvWmptRGxpY21pc2pFT2Y2YUlXL1Zjb2JwZjJMbGwwN1EKSk5CQXNOQjFDSTY5YU80STEyNThFSEJHRzN6Z2lMS2Vjb2FaQWVPL24wa1p0Q1crVm1XdUYyUGxIdC9vLzBlbHYrRW1CWVRrc01Ddgo1d2lacUF4ZUpvQkYxUGhvTDVhUHJ1SktISndXREJOdk9JZjJ1OGcwWDVJRFVYbHdwdC9MOVpsTmVjMU92RmVmUTA1ckxpc1krR3B6CmpMckZOZTg1YWtFZXozR29vcktHQjFzNnllSHZQMlVFZ0VjeVJIQ1ZUakZuYW5SYkVFVjE2ckNmME9ZMS9rNmZpOHdya2tWYmJpVmcKaFViTjBhcXdkbWFUZDVhK2c3NDR0aVJPSmd2TTdYcFdHdURwV3Naa3JVeDZBRWhFTDdsQXV4TSt2aFY0bllXQlNpcFgzdFVaUTlyYgp5bHRIaG9NTFA3WU5kbmh6ZVNKZXNZQWZ6NzdSUDFZUW1DdVZoNkVmbldRVVlEa3Nzd0JWTHVUMXN3NVh4SkZCQUp3LzZLWGY2dmIvCnlQQ3RiVktvRjZ1Yllmd1NVVFhrSmYydnFtcUdPUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkdsb2JhbFNpZ24gRUNDIFJvb3QgQ0EgLSBSNAo9PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIzRENDQVlPZ0F3SUJBZ0lOQWdQbGZ2VS9rLzJsQ1NHeXBqQUtCZ2dxaGtqT1BRUURBakJRTVNRd0lnWURWUVFMRXh0SGJHOWkKWVd4VGFXZHVJRVZEUXlCU2IyOTBJRU5CSUMwZ1VqUXhFekFSQmdOVkJBb1RDa2RzYjJKaGJGTnBaMjR4RXpBUkJnTlZCQU1UQ2tkcwpiMkpoYkZOcFoyNHdIaGNOTVRJeE1URXpNREF3TURBd1doY05Nemd3TVRFNU1ETXhOREEzV2pCUU1TUXdJZ1lEVlFRTEV4dEhiRzlpCllXeFRhV2R1SUVWRFF5QlNiMjkwSUVOQklDMGdValF4RXpBUkJnTlZCQW9UQ2tkc2IySmhiRk5wWjI0eEV6QVJCZ05WQkFNVENrZHMKYjJKaGJGTnBaMjR3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVM0eG5uVGoyd2xEcDh1T1JrY0E2U3VtdVU1QndrVwp5bU94dVliNGlsZkJWODVDK25PaDkyVkMveDdCQUxKdWN3Ny94eUhsR0tTcTJYRS9xTlM1em93ZG8wSXdRREFPQmdOVkhROEJBZjhFCkJBTUNBWVl3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVVkxCN3JVVzQ0a0IvK3dwdSs3NHp5VHlqaE5Vd0NnWUkKS29aSXpqMEVBd0lEUndBd1JBSWdJazkwY3JsZ3IvSG1uS0FXQlZCZncxNDdibUYwNzc0QnhMNFlTRmxoZ2pJQ0lDYWRWR05BM2pkZwpVTS9JMk8yZGdxNDNtTHlqajB4TXFUUXJiTy83bFpzbQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpHVFMgUm9vdCBSMQo9PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRlZ6Q0NBeitnQXdJQkFnSU5BZ1BsazI4eHNCTkppR3VpRnpBTkJna3Foa2lHOXcwQkFRd0ZBREJITVFzd0NRWURWUVFHRXdKVgpVekVpTUNBR0ExVUVDaE1aUjI5dloyeGxJRlJ5ZFhOMElGTmxjblpwWTJWeklFeE1RekVVTUJJR0ExVUVBeE1MUjFSVElGSnZiM1FnClVqRXdIaGNOTVRZd05qSXlNREF3TURBd1doY05Nell3TmpJeU1EQXdNREF3V2pCSE1Rc3dDUVlEVlFRR0V3SlZVekVpTUNBR0ExVUUKQ2hNWlIyOXZaMnhsSUZSeWRYTjBJRk5sY25acFkyVnpJRXhNUXpFVU1CSUdBMVVFQXhNTFIxUlRJRkp2YjNRZ1VqRXdnZ0lpTUEwRwpDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQzJFUUtMSHVPaGQ1czczTCtVUHJlVnAwQThvZjJDK1gweUJvSng5dmFNCmYvdm8yN3hxTHBlWG80eEwrU3Yyc2ZuT2hCMngrY1dYM3UrNThxUHB2QktKWHFlcVVxdjRJeWZMcExHY1k5dlhtWDd3Q2w3cmFLYjAKeGxwSERVMFFNK05Pc1JPanlCaHNTK3o4Q1pEZm5XUXBKU01Ib2JUU1BTNWc0TS9TQ1llN3pVandUY0xDZW9pS3U3clBXUm5XcjQrdwpCN0NlTWZHQ3djRGZMcVp0YkJrT3RkaCtKaHBGQXoyd2VhU1VLSzBQZnlibHFBaitsdWc4YUpSVDdvTTZpQ3NWbGdteTRIcU1MblhXCm5PdW5WbVNQbGs5b3JqMlh3b1NQd0x4QXdBdGN2ZmFIc3pWc3JCaFFmNFRnVE0yUzB5RHBNN3hTbWE4eXRTbXpKU3EwU1BseTRjcGsKOSthQ0VJM29uY0tLaVBvNFpvcjhZL2tCK1hqOWUxeDMrbmFIK3V6ZnNRNTVsVmUwdlNidjFnSFI2eFlLdTQ0THRjWEZpbFdyMDZ6cQprVXNwekJta01pVk9LdkZsUk5BQ3pxck9TYlRxbjN5RHNFQjc1ME9ycDJ5amozMkpnZnBNcGYvVmpzUE9TK0MxMkxPT1JjOTJ3TzFBCksvMVREN0NuMVRzTnNZcWlBOTR4cmN4MzZtOTdQdGJma1NJUzVyNzYyREw4RUdNVVVYTGVYZFlXazcwcGFEUHZPbWJzQjRvbTN4UFgKVjJWNEo5NWVTUlFBb2dCL21xZ2h0cW14bGJDbHVRMFdFZHJIYkVnOFFPQitEVnJOVmp6Umx3VzV5MHZ0T1V1Y3hEL1NWUk51SkxEVwpjZnIwd2JyTTdSdjEvb0ZCMkFDWVBUcklybnFZTnhnRmxRSURBUUFCbzBJd1FEQU9CZ05WSFE4QkFmOEVCQU1DQVlZd0R3WURWUjBUCkFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVU1SzhySm5FYUswZ25oUzlTWml6djhJa1RjVDR3RFFZSktvWklodmNOQVFFTUJRQUQKZ2dJQkFKK3FRaWJiQzV1Ky94NldraTQrb21WS2FwaTZJc3Q5d1RyWWdnb0d4dmFsM3NCT2gyWjVvZm1tV0p5cStiWG1ZT2ZnNkxFZQpRa0V6Q3pjOXpvbHdGY3ExSktqUGE3WFNRQ0dZenlJMHp6dkZJb1RneFE2S2ZGMkk1RFVrenBzK0dsUWVidHV5aDZmODgvcUJWUlJpCkNsbXBJZ1V4UG9MVzd0dFhOTHd6bGRNWEcrZ25vb3Q3VGlZYWVscGt0dEdzTi9IOW9QTTQ3SEx3RVhXZHl6UlNqZVoyYXhmRzM0YXIKSjQ1SkszVm1nUkFocHVvKzlLNGwvM3dWM3M2TUpUL0tZbkFLOXk4SlpnZklQeHo4OE50Rk1OOWlpTUcxRDUzRG4wcmVXVmxIeFljaQpOdWFDcCswS3VlSUhvSTE3ZWtvOGNkTGlBNkVmTWdmZEcrUkN6Z3dBUldHQXRRc2dXU2w0dmZsVnkyUEZQRXowdHYvYmFsOHhhNW1lCkxNRnJVS1RYNWhnVXZZVS9aNnRHbjZEL1FxYzZmMXpMWGJCd0hTczA5ZFIyQ1F6cmVFeFpCZk16UXNOaEZSQWJkMDNPSW96VWhmSkYKZmJkVDZ1OUFXcFFLWENCZlRrQmRZaUoyMy8vT1liMk1JM2pTTndMZ2p0N1JFVGVKOXIvdFNRZGlycExzUUJxdkZBblowRTZ5b3ZlKwo3dTdZLzl3YUxkNjRObkhpL0htM2xDWFJTSE5ib1RYbnM1bG5kY0VaT2l0SFR0TkNqdjB4eUJabTJ0SU1QTnV6anNtaERZQVBleFozCkZMLy8yd21Vc3BPOElGZ1Y2ZHR4US9QZUVNTUEzS2dxbGJiQzFqK1FhM2JiYlA2TXZQSndOUXpjbVJrMTNOZklSbVBWTm5HdVYvdTMKZ20zYwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpHVFMgUm9vdCBSMgo9PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRlZ6Q0NBeitnQXdJQkFnSU5BZ1BscnNXTkJDVWFxeEVscWpBTkJna3Foa2lHOXcwQkFRd0ZBREJITVFzd0NRWURWUVFHRXdKVgpVekVpTUNBR0ExVUVDaE1aUjI5dloyeGxJRlJ5ZFhOMElGTmxjblpwWTJWeklFeE1RekVVTUJJR0ExVUVBeE1MUjFSVElGSnZiM1FnClVqSXdIaGNOTVRZd05qSXlNREF3TURBd1doY05Nell3TmpJeU1EQXdNREF3V2pCSE1Rc3dDUVlEVlFRR0V3SlZVekVpTUNBR0ExVUUKQ2hNWlIyOXZaMnhsSUZSeWRYTjBJRk5sY25acFkyVnpJRXhNUXpFVU1CSUdBMVVFQXhNTFIxUlRJRkp2YjNRZ1VqSXdnZ0lpTUEwRwpDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRRE8zdjJtKyt6c0ZEUThCd1phYkZuM0dUWGQ5OEdkVmFyVHpUdWtrM0x2CkN2cHRuZmJ3aFlCYm9VaFNuem5GdCs0b3JPL0xkbWdVdWQrdEFXeVpIOFFpSFovK2NuZmdMRnV2NUFTL1QzS2dHalNZNkRsbzdKVWwKZTNhaDVtbTVoUm05aVl6K3JlMDI2bk84LzRQaXkzM0IwczVLczQwRm5vdEprOS9CVzlCdVh2QXVNQzZDL1BxOHRCY0tTT1dJbThXYgphOTZ3eXJRRDhOcjBrTGhsWlBkY1RLM29mbVplbWRlNHdqN0kwQk9kcmU3a1JYdUpWZmVLSDJKU2hCS3p3a0NYNDRvZlI1R21kRnJTCitMRmpLQkM0c3dtNFZuZEFvaWFZZWNiKzN5WHVQdVdnZjlSaEQxRkxQRCtNMnVGd2ROakNhS0g1d1F6cG9lSi91MVU4ZGdidWFrN00Ka29nd1RacTlUd3RJbW9TMW1LUFYrM1BCVjJIZEtGWjFFNjZIanVjTVVRa1FkWWhNdkkzNWV6elVJa2dmS3R6cmE3dEVzY3N6Y1RKRwpyNjFLOFl6b2REcXM1eG9pYzREU01QY2xRc2NpT3pzU3JaWXV4c04yQjZvZ3R6VkpWK21TU2VoMkZuSXhaeXVXZm9xang1UldJcjlxClMzNEJJYklqTXQva21rUnRXVnRkOVFDZ0hKdkdlSmVOa1ArYnlLcTByeEZST1Y3WisyZXQxVnNSblRLYUc3M1Z1bHVseWNzbGFWTlYKSjF6Z3lqYkxpR0g3SHJmUXkrNFcrOU9tVE42U3BkVGkzL1VHVk40dW5VdTBrekNxZ2M3ZEd0eFJjdzFQY09ubHRoWWhHWG15NW9rTApkV1RLMWF1OENjRVlvZi9VVktHRlBQMFVKQU95aDlPa3R3SURBUUFCbzBJd1FEQU9CZ05WSFE4QkFmOEVCQU1DQVlZd0R3WURWUjBUCkFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVV1Ly9LamlPZlQ1bksyK0pvcHFVVkp4Y2UyUTR3RFFZSktvWklodmNOQVFFTUJRQUQKZ2dJQkFCL0t6dDNIdnFHZjJTZE1DOXdYbUJGcWlONDk1bkZXY3JLZUdrNmMxU3VZSkYyYmEzdXdNNElKdmQ4bFJ1cVluclliL29NOAowbUpod1FUdHp1REZ5Y2dURTFYbnFHT3RqSHNCL25jdzRjNW9td1g0RXU1NU1hQkJSVFVvQ25Ha0pFK00zRHlDQjE5bTNIMFEvZ3hoCnN3V1Y3dUd1Z1ErbytNZVBUYWdqQWlackhZTlNWYzYxTHdES2dFRGc0WFNzWVBXSGdKMnVObVNSWGJCb0dPcUtZY2wzcUpmRXljZWwKL0ZWTDgvQi91V1U5SjJqUXpHdjZVNTNoa1JySlhScVdiVEtIN1FNZ3lBTE9XcjdaNnYyeVRjUXZHOTlmZXZYNGk4YnVNVG9sVVZWbgpqV1F5ZSttZXc0SzZLaTNwSHJUZ1NBYWkvR2V2SHlJQ2Mvc2dDcStkVkV1aHpmOWdSN0EvWGU4YlZyMlhJWll0Q3RGZW5UZ0NSMnk1CjlQWWpKYmlnYXBvcmR3ajZ4TEVva0NaWUNEemlmcXJYUFcrNk1ZZ0tCZXNudGFGSjdxQkZWSHZtSjJXWklDR29vN3o3R0phN1VtOE0KN1lOUlRPbFo0aUJneGNKbGtvS004eEFmRG9xWHZuZUNiVCtQSFYyOFNTZTl6RThQNGM1MmhnUWp4Y0NNRWx2OTI0U2dKUEZJLzJSOAowTDVjRnRIdm1hM0FIL3ZMcnJ3NElnWW1aTnJhbHc0L0tCVkVxRThBeXZDYXpNOTBhclErUE91VjdMWFRXdGlCbWVsREdEZnJzN3ZSCldHSkI4MmJTajZwNGxWUWd3MW91ZEN2VjBiNFlhY0NzMWFUUE9icFJoQU5sNldMQVl2N1lUVldXNHRBUitrZzBFZXllN1FVZDVNalcKSFliTAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpHVFMgUm9vdCBSMwo9PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ0NUQ0NBWTZnQXdJQkFnSU5BZ1BsdUlMcklQZ2xKMjA5WmpBS0JnZ3Foa2pPUFFRREF6QkhNUXN3Q1FZRFZRUUdFd0pWVXpFaQpNQ0FHQTFVRUNoTVpSMjl2WjJ4bElGUnlkWE4wSUZObGNuWnBZMlZ6SUV4TVF6RVVNQklHQTFVRUF4TUxSMVJUSUZKdmIzUWdVak13CkhoY05NVFl3TmpJeU1EQXdNREF3V2hjTk16WXdOakl5TURBd01EQXdXakJITVFzd0NRWURWUVFHRXdKVlV6RWlNQ0FHQTFVRUNoTVoKUjI5dloyeGxJRlJ5ZFhOMElGTmxjblpwWTJWeklFeE1RekVVTUJJR0ExVUVBeE1MUjFSVElGSnZiM1FnVWpNd2RqQVFCZ2NxaGtqTwpQUUlCQmdVcmdRUUFJZ05pQUFRZlR6T0hNeW1Lb1lUZXk4Y2hXRUdKNmxhZEswdUZ4aDFNSjd4L0psRnliK0tmMXFQS3pFVVVSb3V0CjczNkdqT3l4ZmkvL3FYR2RHSVJGQkVGVmJpdnFKbis3a0FIalN4bTY1RlNXUlFteDFXeVJSSzJFRTQ2YWpBMkFEREwyNENlalFqQkEKTUE0R0ExVWREd0VCL3dRRUF3SUJoakFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjBHQTFVZERnUVdCQlRCOFNhNm9DMnVoWUhQMC9FcQpFcjI0Q21mOXZEQUtCZ2dxaGtqT1BRUURBd05wQURCbUFqRUE5dUVnbFJSN1ZLT1FGaEcvaE1qcWIyc1huaDVHbUNDYm45TU4yYXpUCkw4MTgrRnN1VmJ1LzNaTDNwQXpjTWVHaUFqRUEvSmRtWnVWREZoT0QzY2ZmTDc0VU9PMEJ6ckVYR2hGMTZiMERqeVoraE9YSllLYVYKMTFSWnQrY1JMSW5VdWU0WAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpHVFMgUm9vdCBSNAo9PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ0NUQ0NBWTZnQXdJQkFnSU5BZ1Bsd0dqdll4cWNjcEJRVWpBS0JnZ3Foa2pPUFFRREF6QkhNUXN3Q1FZRFZRUUdFd0pWVXpFaQpNQ0FHQTFVRUNoTVpSMjl2WjJ4bElGUnlkWE4wSUZObGNuWnBZMlZ6SUV4TVF6RVVNQklHQTFVRUF4TUxSMVJUSUZKdmIzUWdValF3CkhoY05NVFl3TmpJeU1EQXdNREF3V2hjTk16WXdOakl5TURBd01EQXdXakJITVFzd0NRWURWUVFHRXdKVlV6RWlNQ0FHQTFVRUNoTVoKUjI5dloyeGxJRlJ5ZFhOMElGTmxjblpwWTJWeklFeE1RekVVTUJJR0ExVUVBeE1MUjFSVElGSnZiM1FnVWpRd2RqQVFCZ2NxaGtqTwpQUUlCQmdVcmdRUUFJZ05pQUFUemRIT25hSXRncmtPNE5jV0JNSHRMU1ozN3dXSE81dDVHdld2VllSZzFya0RkYy9lSmtUQmE2enp1CmhYeWlRSFk3cWNhNFI5Z3E1NUtSYW5QcHNYSTVueW1mb3BqVFgxNVlobVVQb1lSbEJ0SGNpOG5IYzhpTWFpL2x4S3ZSSFlxalFqQkEKTUE0R0ExVWREd0VCL3dRRUF3SUJoakFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjBHQTFVZERnUVdCQlNBVE5icmRQOUpOcVBWMlB5MQpQc1ZxOEpRZGpEQUtCZ2dxaGtqT1BRUURBd05wQURCbUFqRUE2RUQvZzk0RDlKK3VIWHFuTHJtdlQvYURIUTR0aFFFZDBkbHE3QS9DCnI4ZGVWbDVjMVJ4WUlpZ0w5ekMyTDdGOEFqRUE4R0U4cC9TZ2d1TWgxWVFkYzRhY0xhL0tOSnZ4bjdrak51SzhZQU9kZ0xPYVZzamgKNHJzVWVjck5JZFNVdFVsRAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpUZWxpYSBSb290IENBIHYyCj09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZkRENDQTF5Z0F3SUJBZ0lQQVdkZko5YitldVBrckw0Sld3V2VNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1FUXhDekFKQmdOVkJBWVQKQWtaSk1Sb3dHQVlEVlFRS0RCRlVaV3hwWVNCR2FXNXNZVzVrSUU5NWFqRVpNQmNHQTFVRUF3d1FWR1ZzYVdFZ1VtOXZkQ0JEUVNCMgpNakFlRncweE9ERXhNamt4TVRVMU5UUmFGdzAwTXpFeE1qa3hNVFUxTlRSYU1FUXhDekFKQmdOVkJBWVRBa1pKTVJvd0dBWURWUVFLCkRCRlVaV3hwWVNCR2FXNXNZVzVrSUU5NWFqRVpNQmNHQTFVRUF3d1FWR1ZzYVdFZ1VtOXZkQ0JEUVNCMk1qQ0NBaUl3RFFZSktvWkkKaHZjTkFRRUJCUUFEZ2dJUEFEQ0NBZ29DZ2dJQkFMTFFQd2U4NG52UWE1bjQ0bmRwNTg2ZHBBTzhnbTJoL29GbEgwd25ySTRBdWhaNwo2ekJxQU1DemRHaCtzcS9IMVdLemVqOVF5b3cyUkNSajBqYnBESVgyUTNiVlRLRmdjbWZpS0RPbHl6RzRPaUlqTkxoOXZWWWlRSjNxCjlIc0RyV2o4c29GUG1OQjA2bzNsZmMxanc2UDIzcExDV0JuZ2xydkZ4S2s5cFhTVy9xLzVpYXE5bFJkVTJIaEU4UXgzRlpMZ21FS24KcE5hcUlKTE53YUN6bHJJNmhFS05mZFdWNU5iYjZXTEVXTE41eFl6VE5UT0RuM1doVWlkaE9QRlpQWTVRNEwxNVBPZHNsdjVlMlFKbAp0STVjMEJFMDMxMi9VcWVCQU1OL21VV1pGZFVYeUFwVDdHUHptWDNNYVJLR3doZndBWjYvaEx6UlVzc2JrbWJPcEZQbG9iL0Uyd25XCjVvbFdLOGpqZk43ai80bmxOVzRvNkd3TEkxR3BKUVhyU1BqZHNjcjZiQWhSNzdjWWJFVEtKdUZ6eG9rR2dlV0tyTERpS2NhNUpMTnIKUkJIMHBVUENURVBsY0RhTXRqTlhlcFV1Z3FEMFhCQ3pZWVAyQWdXR0xud3RiTndEUm00MWs5VjZsUy9lSU5oYmZwU1FCR3E2V1QwRQpCWFdkTjZJT0xqM3J3YVJTZy83UWE5Um1qdHpHNlJKT0hTcFhxaEM4ZkY2Q2ZhYW15Zkl0dWZVWEo2M1JEb2xVSzVYNndLMGRtQlI0Ck0wS0dDcWx6dGZ0MERiY2JNQm5FV2c0Y0o3ZmFHTkQvaXNnRnV2R3FIS0kzdCtaSXBFWXNsT3FvZG1KSGl4QlRCMGhYYk9LU1RiYXUKQmN2Y3dVcGVqNnc5R1U3QzdXQjFLOXZCeWtMVkFnTUJBQUdqWXpCaE1COEdBMVVkSXdRWU1CYUFGSEtzNURONXFrV0g5djJzSFo3Vwp4eStHMkNRNU1CMEdBMVVkRGdRV0JCUnlyT1F6ZWFwRmgvYjlyQjJlMXNjdmh0Z2tPVEFPQmdOVkhROEJBZjhFQkFNQ0FRWXdEd1lEClZSMFRBUUgvQkFVd0F3RUIvekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBZ0VBb0R0WnB3bVVQamFFMG40dk9hV1dsL29ScmZ4bjgzRUoKOHJLSmhHZEVyN252N1pic25HVGJNakJ2WjVxc2ZsK3lxd0UyZm9INjVJUmUwcXcyNEd0aXhYMUxEb0p0MG5aaTBmNlgrSjh3ZkJqNQp0RkozZ2gxMjI5TWRxZkRCbWdDOWJYWFlmZWY2eHppam5IRG9SbmtEcnk1MDIzWDRibE1NQThpWkdvazFHVHpUeVZSOHFQQXM1bTRICmVXOXE0ZWJxa1lKcENoM0RmbG1pbm10R0ZaaGIwNjlHSFdMSXpvQlNTUkUveVFRU3d4TjhQenVLbHRzOG9CNEt0SXRVc2lSbkRlK0MKeTc0OGZkSGlmNjRXMWxaWXVkb2dzWU1Wb2UrS1RUSnZRUzhUVW9LVTF4ckJlS0pSM1N0d2JiY2ErZmV3NEdlWFZ0dDhZVk1KQXlnQwpRTWV6MlAyY2NHckdLTU9GNmVMdEdwT2cza3VZb29RK0JYY0JsajM3dENBUG5ISUNlaEl2MWFPNlVYaXZLaXRFWlU2MS9Rcm93YzE1CmgyRXIzb0JYUmI5bjhadVJYcVdrN0ZsSUVBMDR4N0Q2dzBSdEJQVjRVQnlTbGx2YTliZ3V1bHZQNWZCcW5Vc3ZXSE10VHkzRUhENzAKc3orckZRNDdHVUdLcE1GWEVtWnhUUHBUNDFmcllwVUpubFRkMGNJOFZ6eTlPSzJZWkxlNEE1cFRWbUJkczloQ0cxeExFb29jNit0OQp4bnBweHlkL3BQaUw4dVNVWm9kTDZaUUhDUko1aXJMcmRBVGN6dlJFV2VBV3lzVXNXTmM4ZTg5aWhtcFFmVFUyWnFmN04rY294OWpRCnJhVnBsSS9vd2Q4aytCc0hNWWVCMkYzMjZDallTbEtBckJQdVVCUWVtTWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkQtVFJVU1QgQlIgUm9vdCBDQSAxIDIwMjAKPT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQzJ6Q0NBbUNnQXdJQkFnSVFmTW1QSzRUWDMrb1B5V1dhMDB0TmxqQUtCZ2dxaGtqT1BRUURBekJJTVFzd0NRWURWUVFHRXdKRQpSVEVWTUJNR0ExVUVDaE1NUkMxVWNuVnpkQ0JIYldKSU1TSXdJQVlEVlFRREV4bEVMVlJTVlZOVUlFSlNJRkp2YjNRZ1EwRWdNU0F5Ck1ESXdNQjRYRFRJd01ESXhNVEE1TkRVd01Gb1hEVE0xTURJeE1UQTVORFExT1Zvd1NERUxNQWtHQTFVRUJoTUNSRVV4RlRBVEJnTlYKQkFvVERFUXRWSEoxYzNRZ1IyMWlTREVpTUNBR0ExVUVBeE1aUkMxVVVsVlRWQ0JDVWlCU2IyOTBJRU5CSURFZ01qQXlNREIyTUJBRwpCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCTWJMeHlqUis0VDFtdTlDRkNEaFEydHVkYTM4S3dPRTFIYVRKZGRaTzBGbGF4N21OQ3E3CmRQWVN6dWh0NTZ2a1BFNC9SQWlMelJaeHk3K1NtZlNrMXp4UVZGS1FoWU40bEdkbm94d0pHVDExTklYZTdXQjl4d3kwUVZLNWJ1WHUKUXFPQ0FRMHdnZ0VKTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFRkhPUkVLdi9WYk5hZkFrbDFiSzZDS0JycXg5dApNQTRHQTFVZER3RUIvd1FFQXdJQkJqQ0J4Z1lEVlIwZkJJRytNSUc3TUQ2Z1BLQTZoamhvZEhSd09pOHZZM0pzTG1RdGRISjFjM1F1CmJtVjBMMk55YkM5a0xYUnlkWE4wWDJKeVgzSnZiM1JmWTJGZk1WOHlNREl3TG1OeWJEQjVvSGVnZFlaemJHUmhjRG92TDJScGNtVmoKZEc5eWVTNWtMWFJ5ZFhOMExtNWxkQzlEVGoxRUxWUlNWVk5VSlRJd1FsSWxNakJTYjI5MEpUSXdRMEVsTWpBeEpUSXdNakF5TUN4UApQVVF0VkhKMWMzUWxNakJIYldKSUxFTTlSRVUvWTJWeWRHbG1hV05oZEdWeVpYWnZZMkYwYVc5dWJHbHpkREFLQmdncWhrak9QUVFECkF3TnBBREJtQWpFQWxKQXRFL3JoWS9oaFkraXRoWGhVa1p5NGt6ZytHa0hhUUJaVFFnaktMNDd4UG9GV3dLclk3UmpFc0s3MFB2b20KQWpFQTh5aml4dHNybWZ1M1ViZ2tvNlNVZWhvLzVqYmlBMWN6aWpETGdzZldGQkhWZFdOYkZKV2NId0hQMk5WeXB3ODcKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKRC1UUlVTVCBFViBSb290IENBIDEgMjAyMAo9PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDMnpDQ0FtQ2dBd0lCQWdJUVh3SkIxM3FIZkV3RG82eVdqZnYvMERBS0JnZ3Foa2pPUFFRREF6QklNUXN3Q1FZRFZRUUdFd0pFClJURVZNQk1HQTFVRUNoTU1SQzFVY25WemRDQkhiV0pJTVNJd0lBWURWUVFERXhsRUxWUlNWVk5VSUVWV0lGSnZiM1FnUTBFZ01TQXkKTURJd01CNFhEVEl3TURJeE1URXdNREF3TUZvWERUTTFNREl4TVRBNU5UazFPVm93U0RFTE1Ba0dBMVVFQmhNQ1JFVXhGVEFUQmdOVgpCQW9UREVRdFZISjFjM1FnUjIxaVNERWlNQ0FHQTFVRUF4TVpSQzFVVWxWVFZDQkZWaUJTYjI5MElFTkJJREVnTWpBeU1EQjJNQkFHCkJ5cUdTTTQ5QWdFR0JTdUJCQUFpQTJJQUJQRUwzWVpESUJuZmw0WG9Ja3FiejUyWXY3UUZKc25MNDZiU2o4V2VlSHN4aWFtSnJTYzgKWlJDQy9OL0RuVTd3TXlQRTBqTDFITERmTXhkZHhmQ3hpdm52dWJjVXlpbEt3ZytwZjNWbFNTb3daL1JrOTlZYWQ5ckR3cGRoUW50SgpyYU9DQVEwd2dnRUpNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGSDhRQVJZM09xUW81RkQ0cFBmc2F6SzIvdW1MCk1BNEdBMVVkRHdFQi93UUVBd0lCQmpDQnhnWURWUjBmQklHK01JRzdNRDZnUEtBNmhqaG9kSFJ3T2k4dlkzSnNMbVF0ZEhKMWMzUXUKYm1WMEwyTnliQzlrTFhSeWRYTjBYMlYyWDNKdmIzUmZZMkZmTVY4eU1ESXdMbU55YkRCNW9IZWdkWVp6YkdSaGNEb3ZMMlJwY21WagpkRzl5ZVM1a0xYUnlkWE4wTG01bGRDOURUajFFTFZSU1ZWTlVKVEl3UlZZbE1qQlNiMjkwSlRJd1EwRWxNakF4SlRJd01qQXlNQ3hQClBVUXRWSEoxYzNRbE1qQkhiV0pJTEVNOVJFVS9ZMlZ5ZEdsbWFXTmhkR1Z5WlhadlkyRjBhVzl1YkdsemREQUtCZ2dxaGtqT1BRUUQKQXdOcEFEQm1BakVBeWp6R0tuWENYblZpT1RZQVlGcUx3Wk9aek5uYlFUczdoNWtYTzlYTVQ4b2k5NkNBeS9tMHNSdFc5WExTL0JuUgpBakVBa2Zjd2t6OFFSaXR4cE5BN1JKdkFLUUlGc2tGM1VmTjVXcDZPRktCT1F0SmJnZk0wYWdQbklqaFFXKzBaVDBNVwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpEaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ0dUQ0NBWitnQXdJQkFnSVFDZUNUWmF6MzJjaTVQaHdMQkNvdTh6QUtCZ2dxaGtqT1BRUURBekJPTVFzd0NRWURWUVFHRXdKVgpVekVYTUJVR0ExVUVDaE1PUkdsbmFVTmxjblFzSUVsdVl5NHhKakFrQmdOVkJBTVRIVVJwWjJsRFpYSjBJRlJNVXlCRlEwTWdVRE00Ck5DQlNiMjkwSUVjMU1CNFhEVEl4TURFeE5UQXdNREF3TUZvWERUUTJNREV4TkRJek5UazFPVm93VGpFTE1Ba0dBMVVFQmhNQ1ZWTXgKRnpBVkJnTlZCQW9URGtScFoybERaWEowTENCSmJtTXVNU1l3SkFZRFZRUURFeDFFYVdkcFEyVnlkQ0JVVEZNZ1JVTkRJRkF6T0RRZwpVbTl2ZENCSE5UQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQk1GRW9jOFJsMUNhM2lPQ05RZk4wTXNZbmRMeGYzYzFUenZkCmxISlM3Y0k3K096NmUydFlJT3lacnNuOGFMTjF1ZHNKN01nVDlVN0dDaDFtTUV5N0gwY0tQR0VRUWlsOHBRZ080Q0xwMHpWb3pwdGoKbjRTMW1VMVlvSTcxVk9lVnlhTkNNRUF3SFFZRFZSME9CQllFRk1GUlJWQlpxejduTEZyNklDSVNCNENJZkJGcU1BNEdBMVVkRHdFQgovd1FFQXdJQmhqQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01Bb0dDQ3FHU000OUJBTURBMmdBTUdVQ01RQ0phbzFINSt6OGJsVUQyV2RzCkprNkR4djNKK3lzVHZMZDZqTFJsMG1scFl4TmpPeVpRTGdHaGVRYVJuVWkvd3I0Q01FZkRGWHV4b0pHWlNaT29QSHpvUmdhTExQSXgKQUpTZFlzaUp2Um1FRk9tbCt3RzREWFpEakM1VHkzemZEQmVXVUE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpEaWdpQ2VydCBUTFMgUlNBNDA5NiBSb290IEc1Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZaakNDQTA2Z0F3SUJBZ0lRQ1BtMGVLajZmdHBxTXplSjNuelBpakFOQmdrcWhraUc5dzBCQVF3RkFEQk5NUXN3Q1FZRFZRUUcKRXdKVlV6RVhNQlVHQTFVRUNoTU9SR2xuYVVObGNuUXNJRWx1WXk0eEpUQWpCZ05WQkFNVEhFUnBaMmxEWlhKMElGUk1VeUJTVTBFMApNRGsySUZKdmIzUWdSelV3SGhjTk1qRXdNVEUxTURBd01EQXdXaGNOTkRZd01URTBNak0xT1RVNVdqQk5NUXN3Q1FZRFZRUUdFd0pWClV6RVhNQlVHQTFVRUNoTU9SR2xuYVVObGNuUXNJRWx1WXk0eEpUQWpCZ05WQkFNVEhFUnBaMmxEWlhKMElGUk1VeUJTVTBFME1EazIKSUZKdmIzUWdSelV3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQ3owUFRKZVJHZC9meG1nZWZNMWVTOAo3SUUrYWpXT0xyZm4zcS81QjAzUE1KM3FDUXVadld4WDJoaEt1SGlzT2ptb3BraXNMbkxsdmV2eEdzM25wQU9wUHhHMDJDK0pGdnVVCkFUMjdML2dUQmFGNEhJNG80RVhnZy9SWkc1V3pybjREUmVXK3drTCs3dkk4dG9VVG1ES2RGcWdwd2dzY09OeWZNWGRjdnllai9DZXMKdHl1OWRKc1hMZktCMmwydzRTTVhQb2hLRWlQUTZzK2QzZ01Yc1VKS29CWk1wRzJUNlQ4NjdqcDhuVmlkOUU2UC9Ec2p5RzI0NGdYYQp6T3Zzd3pIMDE2Y3BWSURQUkZ0TWJ6Q2U4OHpkSDVSRG5VMS9jSEFOMURyUk4vQnNuWnZBRkpOWTc4MUJPSFc4RXdPVmZIL2pYT25WCkRkWGlmQkJpcW12d1BYYnpQNlBvc01IOTc2cFhUYXlHcHhpMEtjRXNEcjlrdmltTTJBSXR6Vnd2OG4vdkZmUU1GYXdLc1BIVERVOXEKVFhlWEFhRHhacmUzenUvTzdPeWxkY3FzNCtGajk3aWhCTWk4ZXo5ZExSWWlWdTFJU2Y2bkwza3dKWnU2YXkwL25UdkVGK2NkTHZ2eQp6NmI4NHhRc2xwZ2hqTFNSNlJsZ2cvSXdLd1p6VU5XWU93YnB4NG9NWUl3bytGS2JidUgyVGJzR0pKdlhLeVkvL1NvdmNmWFdKTDUvCk1aNFBiZWlQVDAyalAvODE2dDlKWGtHUGh2bnhkM2xMRzdTalhpLzdSZ0xRWmhOZVhvVlB6dGh3aUh2T0FiV1dsOWZOZmYyQytNSWsKd2NvQk9VK05vc0VVUUIrY1p0VU1DVWJXOHREUlNIWldPa1BMdGdvUk9icU1FMndHdFo3UDZ3SURBUUFCbzBJd1FEQWRCZ05WSFE0RQpGZ1FVVVRNYzdUWkFyeGZUSmMxcGFQS3ZUaU0rczBFd0RnWURWUjBQQVFIL0JBUURBZ0dHTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3CkRRWUpLb1pJaHZjTkFRRU1CUUFEZ2dJQkFHQ21yMXRmVjlxSjIwdFFxY1FqTlNILzBHRXdoSkczUHhEUEpZN0p2MFkwMmNFaEpoeHcKR1hJZW84bUgvcWxEWkpZNnlGTUVDclpCdThSSEFObWZHQmc3c2c3ek5Pb2s5OTJ2SUdDdWtpaGZOdWRkNU43SFBOdFFPYTI3UFNoTgpsbngyeGx2MHdkc1VwYXNaWWdjWVFGK1hrZHljeDZ1MVVRM21hVk5WekRsOTJzVVJWWExGTzR1SitEUXRwQmZsRithWmZUQ0lJVGZOCk1CYzl1UEs4cUhXZ1E5dytpVXVRcm0wRDRCeWpvSllKdTMyanR5b1FSRXRHQnpSajdURzVCTzZqbTVxdTVqRjQ5T29rWVR1cldHVC8KdTRjbllpV0IzOXloTC9idHAvOTZqMUV1TVBpa0FkS0ZPVjhCbVpadldsdHdHVWIraG1BK3JZQVFDZDA1SlM5WWY3dlNkUEQzUmg5RwpPVXJZVTlEekxqdHhwZFJ2L1BObjVBZVAzU1laNFkxYitxT1RFWnZweURyRFZXaWFrdUZTZGpqbzRicTkrMC9WNzdQblNJTXg4SUloCjQ3YStwNnR2NzUvZlRNOEJ1R0pxSXozbkNVMkFHM3N3cE1QZEIzODB2cVFtc3ZaQjZBa2Q0eUNZcWpkUC8vZng0aWx3TVVjL2ROQVUKRnZvaGlnTFZpZ21VZHk3eVdTaUxmRkNTQ21aNE9JTjF4TFZhcUJIRzVjR2RabFhQVThTdjEzV0ZxVUlUVnV3aGQ0R1RXZ3pxbHRsSgp5cUVJOHBjN2Jac0VHQ1JFam53Qjh0d2wyRjZHbXJFNTIvV1JNbXJScG5DS292ZmVwRVdGSnFnZWpGMHBXOGhMMkpwcUExNXc4b1ZQCmJFdG9MOHBVOW96YU12N0RhNE0vT01aKwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpDZXJ0YWlubHkgUm9vdCBSMQo9PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRlJ6Q0NBeStnQXdJQkFnSVJBSTRQK1V1UWNXaGxNMVQwMUVRNXQrQXdEUVlKS29aSWh2Y05BUUVMQlFBd1BURUxNQWtHQTFVRQpCaE1DVlZNeEVqQVFCZ05WQkFvVENVTmxjblJoYVc1c2VURWFNQmdHQTFVRUF4TVJRMlZ5ZEdGcGJteDVJRkp2YjNRZ1VqRXdIaGNOCk1qRXdOREF4TURBd01EQXdXaGNOTkRZd05EQXhNREF3TURBd1dqQTlNUXN3Q1FZRFZRUUdFd0pWVXpFU01CQUdBMVVFQ2hNSlEyVnkKZEdGcGJteDVNUm93R0FZRFZRUURFeEZEWlhKMFlXbHViSGtnVW05dmRDQlNNVENDQWlJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dJUApBRENDQWdvQ2dnSUJBTkEyMUIvcTNhdmswYmJtK3lMQTNSTU5hbnNpRXh5WFBHaGpaaktjQTdXTnBJR0Qybmd3RWMvY3NpdStrcitPCjVNUVR2cVJvVE5vQ2FCWjB2ckxkQk9Sckt0MDNIMkFzMi9YM29YeVZ0d3h3aGk3eE91OVM5OHpUbS9tTHZnN2ZNYmVkYUZ5U3B2WGwKOHdvMHRmOTdvdVNIb2NhdkZ3RHZBNUh0cVJ4T2NUM1NpMnlKOUhpRzVtcEpvTTYxMHJDcm0vYjAxQzdqY3ZrMnh1c1Z0eVdNT3Z3bApEYk1pY3lGMHlFcVdZWkwxTHdzWXBmU3Q0dTVCdlFGNStwYU1qUmNDTUxUNXIzZ2FqTFEyRUJBSEJYRFE5REdRaWxIRmhpWjVzaEdJClhzWHdDbFROU2FhL0FwelNSS2Z0NDNqdlJsNXRjZEY1Y0J4R1gxSHB5VGZjWDM1cGUwSGZORVhnTzRUMG9Zb0tOcDQzekdKUzRZa04KS1BsNkk3RU5QVDJhL1oyQjd5eVF3SHRFVHJ0SjRBNUtWcEs4eTdYZGVSZUprZDVoaVhTU3FPTXloYjVPaGFSTFdjc3J4WGlPY1ZUUQpBamVaak9WSjZ1QlVjcVFSQmk4TGpNRmJ2cldoc0ZOdW5MaGdrUjlaYS9rdDlKUUtsN1hzeFhZRFZCdGxVcnBNa2xaUk5hQkEyQ25iCnJsSjJPeTB3UUp1SzBFSld0TGVJQWFTSE8xT1d6YU1Xai9ObXFoZXh4MkRnd1VNRkRPNmJXMkJ2Qmx5SFd5ZjVRQkdlbkRQQnQrVTEKVndWL0o4NFhJSXdjL1BINzJqRXBTZTMxQzRTblQ4SDJUc0lvblBydTRLOEgrek1SZWlGUEN5RVF0a0E2cXlJNkJKeUxtNFNHY3ByUwpwNlhFdEhXUnFTc2pBZ01CQUFHalFqQkFNQTRHQTFVZER3RUIvd1FFQXdJQkJqQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01CMEdBMVVkCkRnUVdCQlRncWo4bGpaOUVYTUU2NkM2dWQweUVQbWNNOURBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQXVWZXZ1QkxhVjRPUGFBc3oKSFFOVFZmU1ZjT1FyUGJBNTYvcUpZdjMzMWhnRUx5RTAzZkZvOE5XV1d0N0NnS1BCamNacTkxbDNyaFZrejF0NUJYZG02b3pUYXczZAo4Vmtzd1RPbE1JQVZSUWRGR2pFaXRwSUFxNWxOT285M3I2a2l5aTlqeWhYV3g4YndQV3o4SEEyWUVHR2VFYUlpMXdyeWtYcHJPUTR2Ck1NTTJTWi9nNlE4Q1JGQTNsRlY5NnAvMk83cVVwVXpwdkQ1UnRPaktralpVYlZ3bEtOcmRyUlQ5MCs3aUlnWHIwUEszYUJMWFdvcEIKR3NhU3BWbzdZMFZQditFNmR5SXZYTDlHK1ZvRGhSTkNYOHJlVTlkaXRhWTFCTUpILzVuOWhOOWN6dWxlZ0NoQjhuM25IcERZVDNZKwpnandOL0tVRCtuc2EyVVVlWU5yRWp2bjhLOGw3bGNVcS82cUozNEl4RDNML0RDZlhDaDVXQUZBZURKREJsclhZRklXN3B3MFd3ZmdICkpCdTZoYUVhQlFtQXVwVmp5VHJzSlo5L25icWtSeFdiUkhEeGFrdldPRjVEOHhoK1VHN3BXaWptWmVaM0d6cjlIYjRESnFQYjFPRzcKZnBZbkt4M3VwUHZhSlZRVEE5NDV4c01mVFpEc2p4dEswaHp0aFpVNFVIbEcxc0dRVURHcFhKcHVIZlV6Vm91bm1kTHl5Q3d6azVJdwp4MDZNWlRNUVpCZjlKQmVXMFkzQ09tb3I2eE9MUlBJaDgwb2F0M2RmMSsySXBITGxPUitWbmI1bndYQVJQYnYwK0VtMzR5YVhPcC9TClgzejd3Smw4T1NuZ2V4Mi9EYWVQMGlrMGJpUVZ5OTZRWHI4YXhHYnF3dWE2T1YrS21hbEJXUWV3TEs4PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpDZXJ0YWlubHkgUm9vdCBFMQo9PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQjl6Q0NBWDJnQXdJQkFnSVFCaVV6c1VjRE15ZGMrWTJhdWIvTStEQUtCZ2dxaGtqT1BRUURBekE5TVFzd0NRWURWUVFHRXdKVgpVekVTTUJBR0ExVUVDaE1KUTJWeWRHRnBibXg1TVJvd0dBWURWUVFERXhGRFpYSjBZV2x1YkhrZ1VtOXZkQ0JGTVRBZUZ3MHlNVEEwCk1ERXdNREF3TURCYUZ3MDBOakEwTURFd01EQXdNREJhTUQweEN6QUpCZ05WQkFZVEFsVlRNUkl3RUFZRFZRUUtFd2xEWlhKMFlXbHUKYkhreEdqQVlCZ05WQkFNVEVVTmxjblJoYVc1c2VTQlNiMjkwSUVVeE1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFM20vNApmeHpmN2ZsSGg0YXhwTUNLK0lLWGdPcVB5RXBlS24ySWFLY0JZaFNSSkhwY25xTVhmWXFHSVRRWVVCc1EzdEEzU3liSEdXQ0E2VFM5CllCazJRTllwaHdrOGtYcjJ2Qk1qM1ZsT0JGN1B5QUljR0ZQQk1kamFJT2xFamVSMm8wSXdRREFPQmdOVkhROEJBZjhFQkFNQ0FRWXcKRHdZRFZSMFRBUUgvQkFVd0F3RUIvekFkQmdOVkhRNEVGZ1FVOHlnWXkyUjE3aWtxNisydUkxZzRoZXZJSWdjd0NnWUlLb1pJemowRQpBd01EYUFBd1pRSXhBTEdPV2lERHNobGlUZDZ3VDk5dTBuQ0s4WjkrYW96bXV0NkRhY3BwczZrRnRaYVNGNGZDMHVyUWU4N1lRVnQ4CnJnSXdSdDdxeTEyYTdETENaUmF3VERCY01QUGFUbk9HQnRqT2lRUklOemY0M1ROUm5YQ3ZlMVhZQVM1OUJXUU9ocmlSCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClNlY3VyaXR5IENvbW11bmljYXRpb24gUm9vdENBMwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZmekNDQTJlZ0F3SUJBZ0lKQU9GOE4wRDlHLzVuTUEwR0NTcUdTSWIzRFFFQkRBVUFNRjB4Q3pBSkJnTlZCQVlUQWtwUU1TVXcKSXdZRFZRUUtFeHhUUlVOUFRTQlVjblZ6ZENCVGVYTjBaVzF6SUVOUExpeE1WRVF1TVNjd0pRWURWUVFERXg1VFpXTjFjbWwwZVNCRApiMjF0ZFc1cFkyRjBhVzl1SUZKdmIzUkRRVE13SGhjTk1UWXdOakUyTURZeE56RTJXaGNOTXpnd01URTRNRFl4TnpFMldqQmRNUXN3CkNRWURWUVFHRXdKS1VERWxNQ01HQTFVRUNoTWNVMFZEVDAwZ1ZISjFjM1FnVTNsemRHVnRjeUJEVHk0c1RGUkVMakVuTUNVR0ExVUUKQXhNZVUyVmpkWEpwZEhrZ1EyOXRiWFZ1YVdOaGRHbHZiaUJTYjI5MFEwRXpNSUlDSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQWc4QQpNSUlDQ2dLQ0FnRUE0OGx5U2ZjdzNnbDhxVUNCV05PME90MjZZUStUVUc1cFBEWEM3bHR6a0J0blRDSHNYelc3T1Q0ckNtRHZ1MjByCmh2dHhvc2lzNUZhVStjbXZzWExVSUt4MDByZ1ZyVkgraFhTaHVSRCtCWUQ1VXBPelFEMTFFS3pBbHJlbmZuYTg0eHRTR2M0Ukh3c0UKTlBYWTlXazhkL05rOUEycWhkN2dDVkFFRjVhRXQ4aUt2RTF5L0J5N3ovTUdUZm1mWlBkK3BtYUdOWEhJRVlCTXdYRkFXQjYrb0hQMgovRDVRNGVBdkpqMStYQ08xZVhEZSt1RFJwZFlNUVhGNzkrcU1ISWpIN0l2MTBTOVZsa1o4V2p0WU8vdTYyQzIxSmRwNlRzOUVyaUdtCm5waktJRzU4dTRpRlcvdkFFR0s3OHZrblIrL1JpVGxEeE4vZTRVRy9WSE1nbHkxczJ2UFVCNlBtdWRodnJ2eU1HUzdUWjJjcmxkdFkKWExWcUF2TzRnMTYwYTc1QmZsY0pkVVJRVmMxYUVXRWhDbUhDcVlqOUU3d3RpUy9OWWVDVnZzcTFlK0Y3TkdjTEg3WU14M3dlR1ZQSwpwN0ZLRlNCV0ZIQTlLNElzRDUwVkhVZUFSLzk0bVE0eHIyOCtqKzJHYVI1N0dJZ1Vzc0w4Z2pNdW5Fc3QrM0E3Y2FvcmV5WW44eHJDCjNQc1h1S0hxeTZDMHJ0T1VmbnJRcThQc09DMFJMb2kvMUQrdEVqdENySThDYm4zTTBWOWh2cUc4T21wSTZpWlZJaFpkWHczL0p6T2YKR0FOMGlsdFNJRWRyUlUwaWQ0eFZKL0N2SG96Smd5SlV0NXJRVDluTy9Oa3VISllvc1FMVEE3MGxVaHcwWms4anEvUjNncFlkMFZjdwpDQkVGL1ZmUjJjY0NBd0VBQWFOQ01FQXdIUVlEVlIwT0JCWUVGR1FVZlB4WWNoYW1DaWswRlc4cXk3ejhyNmlyTUE0R0ExVWREd0VCCi93UUVBd0lCQmpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUEwR0NTcUdTSWIzRFFFQkRBVUFBNElDQVFEY0FpTUk0dThoT3NjTnR5YlMKWXBPbnBTTnlCeUNDWU44WTExU3RhU1dTbnRrVXo1bTVVb0hQcm15S08xbzV5R3dCUThJaWJRTHdZczFPWTBQQUZOcjBZL0RxOUhIdQpUb2ZqY2FuMHlWZmxMbDhjZWJzanFvZEVWK205TlUxQnUwc29vNWl5RzlrTEZ3Zmw5K3FkOVhiWHY4UzJnVmoveVA5a2FXSjVyVzRPCkgzL3VIV25sdDNKeHMvNmxBVFdVVkN2QVVtMlBWY1RKMHJqTHlqUUlVWVdnOWJ5MEYxanFDbHg2dldQR09pLy9sa2taaE9wbjJBU3gKWWZRQVcwcTNuSEUzR1lWNXY0R3d4eE1PZG5FK09vQUdyZ1lXcDQyMXdzVEwvMENsWEkybHlUcnRjb0hLWEpnODBqUURkd2o5OENsWgpYU0VJeDJDL3BIRjd1TmtlZ3I0SnIyVnZLS3UvUzdYdVBnaEhKNkFQYncrTFA2eVZHUE81RHR4blZXNWlua1lPMFFSNHluS3VkdG1sCitMTGZpQWxoaSs4a1R0RlpQMXJVUGNtVFBDdGs5WUVORnBiM2tzUCtNVy9vS2pKMER2Uk1tRW9ZRGpCVTFjWHJ2TVVWbnVpWkllc24KS3drSzIvSG1jQmhXdXd6a3Z2bm9FS1FUa3JnYzROdG5IVk1EcENLbjNGMlNFRHpxLy93YkVCckQyTkNjbldYTDBDc25NUU1lTnVFOQpkblVNLzBVbXVkMVJ2Q1BIWDlqWWh4QkFFZzA5T0RmblJEd1l3Rk1KWkkvLzFacW1mSEF1YzFVaDZOLy9nN2tkUGpJZTFxWjlMUEZtCjZWd2RwNlBPWGlVeUsrT1ZyQ29IenJRb2VJWThMYWFkVGRKME1OMWtVUlhiZzROUjE2LzlNNTFOWmc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNPRENDQWI2Z0F3SUJBZ0lKQU5aZG03TjRnUzdyTUFvR0NDcUdTTTQ5QkFNRE1HRXhDekFKQmdOVkJBWVRBa3BRTVNVd0l3WUQKVlFRS0V4eFRSVU5QVFNCVWNuVnpkQ0JUZVhOMFpXMXpJRU5QTGl4TVZFUXVNU3N3S1FZRFZRUURFeUpUWldOMWNtbDBlU0JEYjIxdApkVzVwWTJGMGFXOXVJRVZEUXlCU2IyOTBRMEV4TUI0WERURTJNRFl4TmpBMU1UVXlPRm9YRFRNNE1ERXhPREExTVRVeU9Gb3dZVEVMCk1Ba0dBMVVFQmhNQ1NsQXhKVEFqQmdOVkJBb1RIRk5GUTA5TklGUnlkWE4wSUZONWMzUmxiWE1nUTA4dUxFeFVSQzR4S3pBcEJnTlYKQkFNVElsTmxZM1Z5YVhSNUlFTnZiVzExYm1sallYUnBiMjRnUlVORElGSnZiM1JEUVRFd2RqQVFCZ2NxaGtqT1BRSUJCZ1VyZ1FRQQpJZ05pQUFTa3BXOWdBd1BEdlRIMDB4ZWNLNFIxck9YOVBWZHUxMk8vNWdTSmtvNkJuT1BwUjI3S2tCTElFK0NubmZkbGRCOXNFTExvCjVPbnZiWVV5bVVTeFh2M01kaERZVzcyaXh2bldRdVJYZHR5UXdqV3BTNGc4RWtkdFhQOUpUeHBLVUxHalFqQkFNQjBHQTFVZERnUVcKQkJTR0hPZitMYVZLaXdqK0tCSDZ2cU5tK0dCWkx6QU9CZ05WSFE4QkFmOEVCQU1DQVFZd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBSwpCZ2dxaGtqT1BRUURBd05vQURCbEFqQVZYVUk5L0xidTl6dXhOdWllOXNSR0tFa3owRmhES21NcHpFMnh0SHFpdVEwNHBWMUlLdjNMCnNuTmRvNGdJeHd3Q01RREFxeTBPYmUwWW90dFQ2U1hiVlFqZ1VNemZSR0VXZ3F0SnNMS0I3SE9IZUxSTXNtSWJFdm9XVFNWTFk3MGUKTjlrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpCSkNBIEdsb2JhbCBSb290IENBMQo9PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRmREQ0NBMXlnQXdJQkFnSVFWVzlsNDdUWmtHb2JDZEZzUHNCc0lEQU5CZ2txaGtpRzl3MEJBUXNGQURCVU1Rc3dDUVlEVlFRRwpFd0pEVGpFbU1DUUdBMVVFQ2d3ZFFrVkpTa2xPUnlCRFJWSlVTVVpKUTBGVVJTQkJWVlJJVDFKSlZGa3hIVEFiQmdOVkJBTU1GRUpLClEwRWdSMnh2WW1Gc0lGSnZiM1FnUTBFeE1CNFhEVEU1TVRJeE9UQXpNVFl4TjFvWERUUTBNVEl4TWpBek1UWXhOMW93VkRFTE1Ba0cKQTFVRUJoTUNRMDR4SmpBa0JnTlZCQW9NSFVKRlNVcEpUa2NnUTBWU1ZFbEdTVU5CVkVVZ1FWVlVTRTlTU1ZSWk1SMHdHd1lEVlFRRApEQlJDU2tOQklFZHNiMkpoYkNCU2IyOTBJRU5CTVRDQ0FpSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnSVBBRENDQWdvQ2dnSUJBUEZtCkNMM1p4UlZoeTRRRVFhVnBOM2Nkd2JCNytzTjNTSkFUY21UUnVIeVFOWjBZZVlqamx3RThSNEh5RHFLWURaNC9OK0Fac3BEeVJoeVMKc1RwaHp2cTNScDREaHRjemJ1MzNSWXgyTjk1dWxwSDMxMzRyaHhmVml6WHVoSkZ5Vjl4Z3c4TzU1OGRuSkNOUFl3cGo5bVo5UzFXbgpQM2hrU1drU2wrQk1EZE1Kb0RJd092cWZ3UEtjeFJJcUxoeTFCRFBhcERnUmF0N0dHUFpIT2lKQmh5TDh4SWtvVk5pTXBUQUsrQmNXCnlxdzMvWG1ua1JkNE9KbXRXTzJ5M3N5SmZRT2NzNGxsNStNN3NTS0dqd1p0ZUFmOWtSSi9zR3NjaVEzNXVNdDBXd2ZDeVBRMTBXUmoKZXVsdW1paldNTDNtRzkwVnI0VHFuTWZLOVE3cThsMHBoNDlwY3ptK0xpUnZSU0dzeGRScEpRYURyWHBJaFJNc0RRYTRiSGxXL0tObgpNb0gxVjZYS1YwSnA2VndrWWUvaU1CaE9SSmhWYjNyQ2s5Z1p0dDU4UjRvUlRrbEgyeWlVQWd1VVNpejVFdEJQNkRGK2JIcS9waitiCk9UMENGcU1ZczJlc1d6OHNneXRuT1lGY3VYNlUxV1Rkbm85dXJ1aDhXN1RYYWtkSTEzNnoxQzJPVm5aT3oybnhia1JzMUNUcWpTU2gKR0wrOVYvNnBtVFcxMnhCM3VEMUl1dGJCNS9FalB0ZmZoWjBuUE5SQXZRb012ZlhualNYV2dYU0hSdFFwZGFKQ2JQZHppZWQ5djNwSwpIOU1peVJWVno5OXZmRlhRcElzSEVUZGZnNlltVjZZQlczNytXR2dIcWVsNjJibm8vMUFmcThLMHdNN282djBQdlkxTnVMeHhBZ01CCkFBR2pRakJBTUIwR0ExVWREZ1FXQkJURjcrM00ySTBoeGtqazQ5Y1VMcWNXaytXWUFUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEcKQTFVZER3RUIvd1FFQXdJQkJqQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVb0tzSVRRZkkvS2kyUG00cnpjMklJblJOd1BXYVorNApZUkM2b2pHWVdVZm8wUTBsSGhWQkRPQXFWZFZYVXN2NDVNZHBveDFOY1FKZVh5RkZZRWhjQ1k1SkVNRUUzS2xpYXdMd1E4aE9uVGhKCmRNa3ljRlJ0d1VmOGpyUTJudFNjdmQwZzFsUEpHS20xVnJsMmk1Vm5adTY5bVA2dTc3NXUrMkQyL1ZuR0tocy9JMHFVSkRBbnlJbTgKNjBRa21zczl2ay9WZXM2T0Y4dGl3ZG5lSGc1Ni8wT0dORks4WVQ4OFg3dlpkclJUdkplei9vcE1FaTRyODlmTzRhTC8zWHR3K3p1aApUYVJqQXYwNGw1VS9CWENnYTk5aWdVT0x0RmtOU294VW5NVzdnWi9OZmFYdkN5VWVPaURiSFB3Zm1HY0NDdFJ6UkJQYlVZUWFWUU5XCjRBQitkQWIvT01SeUhkT29QMmd4WGRNSnh5Nk1XMlBnNk53ZTB1eGhIdkxlNWUvMm1YWmdMUjZVY25IR0N5b3l4NUpPMVViWEhmbXAKR1FySStwWE9iU09ZcWdzNHJacFdEVytOOFRFQWlNRVhuTTBaTmpYK1ZWT2c0RHd6WDVaZTRqTHAzek83QmtxcDJJUnp6bmZTeHF4eAo0VnlqSFF5N0N0OWY0cU54Mk5vM1dxQjRLL1RVZmV0MjdmSmhjS1ZsbXRPSk5CaXIrM0krMTdROWVWellINkV6ZTltQ1VBeVRGNnBzCjNNS0N1d0pYTnErWUp5bzVVT0d3aWZVbGwzNUhhQkMwN0hQS3M1ZlJKTnoyWXFBbzA3V2p1R1MzaUdKQ3o1MVR6Wm0rWkdpUFR4NFMKU1BmU0tjT1lLTXJ5TWd1VGpDbFBQR0F5elFXV1llenlyLzZ6Y0N3dXB2ST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQkpDQSBHbG9iYWwgUm9vdCBDQTIKPT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNKVENDQWF1Z0F3SUJBZ0lRTEJjSWZXUXF3UDZGR0ZrR3o3Uks2ekFLQmdncWhrak9QUVFEQXpCVU1Rc3dDUVlEVlFRR0V3SkQKVGpFbU1DUUdBMVVFQ2d3ZFFrVkpTa2xPUnlCRFJWSlVTVVpKUTBGVVJTQkJWVlJJVDFKSlZGa3hIVEFiQmdOVkJBTU1GRUpLUTBFZwpSMnh2WW1Gc0lGSnZiM1FnUTBFeU1CNFhEVEU1TVRJeE9UQXpNVGd5TVZvWERUUTBNVEl4TWpBek1UZ3lNVm93VkRFTE1Ba0dBMVVFCkJoTUNRMDR4SmpBa0JnTlZCQW9NSFVKRlNVcEpUa2NnUTBWU1ZFbEdTVU5CVkVVZ1FWVlVTRTlTU1ZSWk1SMHdHd1lEVlFRRERCUkMKU2tOQklFZHNiMkpoYkNCU2IyOTBJRU5CTWpCMk1CQUdCeXFHU000OUFnRUdCU3VCQkFBaUEySUFCSjNMZ0pHTlUyZTF1VkN4QS9qbApTUjlCSWdtd1VWSlkxaXMwajhVU1JoVEZpeThzaFA4c2JxalY4UW5qQXlFVXhFTTlmTUVzeEV0cVNzM3BoK0I5OWlLKytrcFJ1RENLCi9lSGVHQklLOWtlMzV4ZS9KNHJVUVV5V1BHQ1d3ZjBWSEtOQ01FQXdIUVlEVlIwT0JCWUVGTkpLc1ZGL0J2RFJnaDlPYmwrcmcveEkKMUxDUk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RnWURWUjBQQVFIL0JBUURBZ0VHTUFvR0NDcUdTTTQ5QkFNREEyZ0FNR1VDTUJxOApXOWYrcWRKVURrcGQwbTJ4UU56MFE5WFNTcGtaRWxhQTk0TTA0VFZPU0cwRUQxY3hNREF0c2FxZEF6amJCZ0l4QU12TWgxUExldDhnClVYT1F3S2hiWWRERlVEbjloZjdCNDNqNHB0Wkx2WnVIancvbDFsT1dxenpJUU5waDkxT2o5dz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClNlY3RpZ28gUHVibGljIFNlcnZlciBBdXRoZW50aWNhdGlvbiBSb290IEU0Ngo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNPakNDQWNHZ0F3SUJBZ0lRUXZMTTJodHBOMFJmRmY1MUtCQzQ5REFLQmdncWhrak9QUVFEQXpCZk1Rc3dDUVlEVlFRR0V3SkgKUWpFWU1CWUdBMVVFQ2hNUFUyVmpkR2xuYnlCTWFXMXBkR1ZrTVRZd05BWURWUVFERXkxVFpXTjBhV2R2SUZCMVlteHBZeUJUWlhKMgpaWElnUVhWMGFHVnVkR2xqWVhScGIyNGdVbTl2ZENCRk5EWXdIaGNOTWpFd016SXlNREF3TURBd1doY05ORFl3TXpJeE1qTTFPVFU1CldqQmZNUXN3Q1FZRFZRUUdFd0pIUWpFWU1CWUdBMVVFQ2hNUFUyVmpkR2xuYnlCTWFXMXBkR1ZrTVRZd05BWURWUVFERXkxVFpXTjAKYVdkdklGQjFZbXhwWXlCVFpYSjJaWElnUVhWMGFHVnVkR2xqWVhScGIyNGdVbTl2ZENCRk5EWXdkakFRQmdjcWhrak9QUUlCQmdVcgpnUVFBSWdOaUFBUjIrcG1wYmlEdCtkZDM0d2M3cU5zOVh6am9xMVdtVmsvV1NPcnNmeTJxdzdMRmVleVpZWDhRZWNjQ1d2a0VOL1UwCk5TdDN6bjhnajFLakFJbnMxYWVpYlZ2alM1S1RvSUQxQVpUYzhHZ0hIczN1L2lWU3RTQkRIQnYrNnhuT1E2T2pRakJBTUIwR0ExVWQKRGdRV0JCVFJJdHBNV2ZGTFh5WTRxcDNXN3VzTncvdXBZVEFPQmdOVkhROEJBZjhFQkFNQ0FZWXdEd1lEVlIwVEFRSC9CQVV3QXdFQgovekFLQmdncWhrak9QUVFEQXdObkFEQmtBakFuN3FSYXFDRzc2VWVYbEltbGRDQnRlVS9JdlpOZVdCajdMUm9BYXNtNFBkQ2tUMFJICmxBRldvdmd6SlF4QzM2b0NNQjNxNFM2SUx1SDVweDBDTWs3eW4yeFZkT091cnZ1bEd1N3QwdnpDQXhIclJWeGdFRDFjZjVrRFcyMVUKU0FHS2N3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKU2VjdGlnbyBQdWJsaWMgU2VydmVyIEF1dGhlbnRpY2F0aW9uIFJvb3QgUjQ2Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRmlqQ0NBM0tnQXdJQkFnSVFkWTM5aTY1OEJ3RDZxU1duNGNldEZEQU5CZ2txaGtpRzl3MEJBUXdGQURCZk1Rc3dDUVlEVlFRRwpFd0pIUWpFWU1CWUdBMVVFQ2hNUFUyVmpkR2xuYnlCTWFXMXBkR1ZrTVRZd05BWURWUVFERXkxVFpXTjBhV2R2SUZCMVlteHBZeUJUClpYSjJaWElnUVhWMGFHVnVkR2xqWVhScGIyNGdVbTl2ZENCU05EWXdIaGNOTWpFd016SXlNREF3TURBd1doY05ORFl3TXpJeE1qTTEKT1RVNVdqQmZNUXN3Q1FZRFZRUUdFd0pIUWpFWU1CWUdBMVVFQ2hNUFUyVmpkR2xuYnlCTWFXMXBkR1ZrTVRZd05BWURWUVFERXkxVApaV04wYVdkdklGQjFZbXhwWXlCVFpYSjJaWElnUVhWMGFHVnVkR2xqWVhScGIyNGdVbTl2ZENCU05EWXdnZ0lpTUEwR0NTcUdTSWIzCkRRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQ1R2dFUyVW5YWUFTT2dIRWRDU2U1anRyY2gvY1NWMVVnckpud1VVeERhZWYwcnR5MmsKMUN6NjZqTGRTY0s1dlE5SVBYdGFtRlN2bmwweGRFOEgvRkFoM2FUUGFFOGJFbU50SlpsTUtwbnpTREJoK29GOEhxY0lTdHcrS3h3ZgpHRXh4cWpXTXJmaHU2RHRLMmVXVUF0YUpoQk9xYmNoUE04eFFsamVTTTl4ZmlPZWZWTmxJOEpoRDFtYjlueGM0UThVQlVRdlg0eU1QCkZGMWJGT2RMdnQzMHlOb0ROOUhXT2FFaFVUQ0RzRzNYTUU2V1c1SHdjQ1NydjBXQlpFTU52U0U2THp6cG5nM0xJTFZDSjh6YWI1dnUKWkRDUU9jMlRaWUVoTWJValVETTNJdU00N2ZneE1NeEYvbUw1MFYweWVVS0gzMnJNVmhsQVRjNnF1L20xZGttVThTZjRrYVdENVFhegpZdzZBM09BU1ZZQ21PMmEwT1ljdHlQRFEwUlRwNUExTkR2WmRWM0xGT3h4SFZwM2kxZnVCWVl6TVRZQ1FORnUzMXhSMTNOZ0VTSi9BCndTaUl0T2tjeXFleDhWYTNlMGxNV2VVZ0ZhaUVBaW42T0pScG1ra0dqODBmZVJRWEVneURldDRmc1pmdStaZDRLS1RJUkpMcGZTWUYKcGxoeW0za1QyQkZmcnNVNFlqUm9zb1l3anZpUVlaNHliUFVITnMyaVRHN3NpamJ0OHVhWkZVUnd3M3k4bkRuQXRPRnI5NE1sSTFmWgpFb0RsU2ZCMUQrK042eHliVkNpMElUejhmQXIvNzN0cmRmK0xIYUFaQmF2NitDdUJRdWc0dXJ2N3F2MDk0UFBLMzA2WGx5bnQ4eGhXCjZhV1dyTDNEa0ppeTRQbWkxS1pIUTN4dHp3SURBUUFCbzBJd1FEQWRCZ05WSFE0RUZnUVVWbk5ZWkpYNWtocXdFaW9FWW5taFFCV0kKSVVrd0RnWURWUjBQQVFIL0JBUURBZ0dHTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFTUJRQURnZ0lCQUM5YwptVHo4Qmw2TWxDNXc2dEl5TVkyMDhGSFZ2QXJ6Wko4SFh0WEJjMmhrZXFLNUR1ajVYWVV0cURkRnFpajBsZ1ZRWUtsSmZwL2ltVFlwCkUwUkhhcDFWSUR6WW0vRURNcnJhUUtGejZvT2h0MFNtRHBrQm0rUzhmNzRUbEg3S3BoNTJnRFk5aEFhTE15WmxiY3ArbnY0ZmpGZzQKZXhxRHNRKzhGeEc3NWdiTVkvcUI4b0ZNMmdzUWE2SDYxU2lsendaQUZ2OTdmUmhlT1JLa1U1NStNa0lRcGlHUnFSeE9GM3lFdkorTQowZWpmNWxHNU5rYy9rTG5IdkFMY1d4eFBEa2pCSllPY0NqK2VzUU16RWhvbnJQY2liQ1RSQVVINFdBUCtKV2dpSDVwYVBIeHNublZJCjg0SHhabWR1VElMQTdycFhEaGp2THByM0V0aWdhK2tGcGFIcGFQaThURDhTSGtYb1VzQ2p2eEluZWJuTU1UekQ5am9pRmdPZ3lZOW0KcEZ1aVRkYUJKUWJwZHFRQUNqN0x6VFdiNE9FNHkyQlRoaWhDUVJ4RVYraW9yYXRGNHlVUXZOcytaVUg3RzZhWEQrdTVkSG41SHJ3ZApWdzFIcjhNdm40ZEdwK3NtV2c5V1k3VmlZRzRBKytNbkVTTG4vcG1QTlBXNTZNT1JjcjNZd3g2NUx2S1JSRkhRVjgwTU5OVklJYi9iCkUvRm1KVU5TMG5BaU5zMmZ4QngxSUsxamNtTUdEdzRuenRKcURieTFPUnJwMFhaNjBWems1MGxKTFZVM2FQQWFPcGcrVkJlSFZPbW0KSjFDSmV5QXZQLysvb1l0S1I1ai9LM3RKUHNNcFJtQVlRcXN6S2JyQUtia1RpZE9JaWpsQk84bjlwdTBmOUdCajM5SXRWUUdMCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClNTTC5jb20gVExTIFJTQSBSb290IENBIDIwMjIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRmlUQ0NBM0dnQXdJQkFnSVFiNzdhclhPOUNFRGlpMDIrMVBkYmtUQU5CZ2txaGtpRzl3MEJBUXNGQURCT01Rc3dDUVlEVlFRRwpFd0pWVXpFWU1CWUdBMVVFQ2d3UFUxTk1JRU52Y25CdmNtRjBhVzl1TVNVd0l3WURWUVFEREJ4VFUwd3VZMjl0SUZSTVV5QlNVMEVnClVtOXZkQ0JEUVNBeU1ESXlNQjRYRFRJeU1EZ3lOVEUyTXpReU1sb1hEVFEyTURneE9URTJNelF5TVZvd1RqRUxNQWtHQTFVRUJoTUMKVlZNeEdEQVdCZ05WQkFvTUQxTlRUQ0JEYjNKd2IzSmhkR2x2YmpFbE1DTUdBMVVFQXd3Y1UxTk1MbU52YlNCVVRGTWdVbE5CSUZKdgpiM1FnUTBFZ01qQXlNakNDQWlJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dJUEFEQ0NBZ29DZ2dJQkFOQ2tDWEpQUUlnU1lUNDFJNTd1CjluVFBMM3RZUGM0OERSQW9rQytYOTR4STJLRFlKYkZNc0JGTUYzTlEwQ0pLWTd1QjB5bHUxYlVKUGlZWWY3SVNmNU9ZdDYvd05yL3kKN2hpZW5EdFN4VWNaWFhUelpHYlZYY2RvdEw4YkhBYWp2STlBSTdZZXhvUzlVY1FiT2NHVjBpbnNTNjU3TGI4NS9iUmkzcFo3UWNhYwpvT0FHY3Z2d0I1Y0pPWUYwci9jMFdSRlhDc0pid1NUME1YTXdnc2FkdWdMM1BueEVYNE1OOC9IZElHa1dDVkRpMUZXMjRJQnlkbTVNClI3ZDFWVm0wVTNUWmxNWkJyVmlLTVdZUEhxSWJLVUJPTDk5NzVoWXNMZnkvN1BPMCtyNFk5cHRKMU80RmJ0azA4NXp4N0FHTDBTREcKRDZDMXZCZE9TSHRSd3Z6cFhHazNSMmF6YVBnVktQQzUwNlFWekZwUHVsSndveEpGM2NhNlR2dkMwUGVvVWlkdGJubTFqUHg3ak1FVwpUTzZBZjc3d2RyNUJVeEl6cmxvNFFxdlhEejVCalhZSE10V3JpZlpPWjlteFFuVWpidlBOUXJMOFZmVlRoeGM3d0ROWThWTFMrWUNrCjhPandPNHM0ektUR2tIOFBuUDJMMGFQUDJvT25hY2xRTnRWY0JkSUtRWFRiWXhFM3dhV2dsa3NlakJZU2Q2NlVOSHNlZjhKbUFPU3EKZytxS2tLM09Oa1JOMFZIcHZCL3phZ1g5d0hRZkpSbEFVVzdxZ2xGQTM1dTVDQ29HQXRVakhCUFc2ZHZieHJCNnkzc25tL3ZnMVVZawo3UkJMWTB1bEJZKzZ1QjBycHZxUjRwSlN2ZXpyWjVkdG1pMmZnVElGWnpMN1NBZy8yU1c0QkNVdkFnTUJBQUdqWXpCaE1BOEdBMVVkCkV3RUIvd1FGTUFNQkFmOHdId1lEVlIwakJCZ3dGb0FVK3k0Mzd1T0VlaWN1elJrMXNUTjgvOVJFUXJrd0hRWURWUjBPQkJZRUZQc3UKTis3amhIb25MczBaTmJFemZQL1VSRUs1TUE0R0ExVWREd0VCL3dRRUF3SUJoakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBZ0VBallsdApoRVVZOFUrem9POW9wTUFkckRDOFoyYXdtczIycXlJWlp0TTdRYlVRblJDNmNtNHBKQ0FjQVpsaTA1Ymc0dnNNUXRmaFdzU1dUVlROCmo4cERVLzBxdU9yNFpjb0J3cTFnYUFhZk9ScFIyZUNOSnZrTFRxVlRKWG9qcEJ6T0NCdmZSNGl5clQ3Z0o0ZUxTWXdmcVVkWWU1YnkKaUIwWXJyUFJwZ3FVK3R2VDVUZ0thM2tTTS90S1dUY1dRQTY3M3ZXSkRQRnMwL2RSYTE0MTlkdkFKdW9TYzA2cGtaQ21GOE5zTHpqVQpvM0tVUXl4aTRVNWNNajI5VEgwWlI2TERTZWVXUDQrYTB6dmtFZGlMQTl6MnRtQlZHS2FCVWZQaHFCVnE2K0FMOEJReDFybU1SVHFvCkVOand1U2ZyOTh0Njd3VnlsclhFajVaenhPaFdjNXk4YVZGanZPOW5IRU1hWDNjWkh4ajRIQ1VwK1VtWktiYVNQYUtETjdFZ2thaWIKTU9scWJMUWprMlVFcXhIekRoMVRKRWxUSGFFL25VaVNFZUo5RFUvMTE3MmlXRDU0blI0ZksvNGh1eG9UdHJFb1pQMndBZ0RIYklDaQp2UlpRSUE5eWdWL01sUCs3bWVhNmtNdnErY1lNd3E3RkdjNHpvV3RjdTM1OE5GY1hyZkEvcnMzcXI1bnNMRlIrak00dUVsWkk3eGM3ClAwcGVZTkxjZERhOHBVTmp5dzlib3dKV0NaNGtMT0dHZ1l6K3F4Y3Mrc2ppTWhvNi80VUl5WU9mOGtwSUVGUjNOKzJpdkVDKzVCQjAKOStSYnU3bnppZm1QUWRqSDVGQ1FOWUErSExoTmtOUFU5OE93b1g2RXluZVNNU3k0a0xHQ2VuUk9teE1tdE5WUVpsUjRybUE9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClNTTC5jb20gVExTIEVDQyBSb290IENBIDIwMjIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ09qQ0NBY0NnQXdJQkFnSVFGQVAxcS9zM2l4ZEFXK0pEc3FYUnhEQUtCZ2dxaGtqT1BRUURBekJPTVFzd0NRWURWUVFHRXdKVgpVekVZTUJZR0ExVUVDZ3dQVTFOTUlFTnZjbkJ2Y21GMGFXOXVNU1V3SXdZRFZRUUREQnhUVTB3dVkyOXRJRlJNVXlCRlEwTWdVbTl2CmRDQkRRU0F5TURJeU1CNFhEVEl5TURneU5URTJNek0wT0ZvWERUUTJNRGd4T1RFMk16TTBOMW93VGpFTE1Ba0dBMVVFQmhNQ1ZWTXgKR0RBV0JnTlZCQW9NRDFOVFRDQkRiM0p3YjNKaGRHbHZiakVsTUNNR0ExVUVBd3djVTFOTUxtTnZiU0JVVEZNZ1JVTkRJRkp2YjNRZwpRMEVnTWpBeU1qQjJNQkFHQnlxR1NNNDlBZ0VHQlN1QkJBQWlBMklBQkVVcE5YUDZ3cmdqemhSOXFMRk5vRnMyN2lvc1U4TmdDVFd5CkpHWW1hY0N6bGRaZGtrQVpEc2FsRTNEMDd4SlJLRjNuekwzNVBJWEJ6NVNReVN2T2trSllXV2Y5bENjUVpJeFBCTEZOU2VSN1Q1djEKNXdqNEE0ajNwOE9TU3hsVWdhTmpNR0V3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFmQmdOVkhTTUVHREFXZ0JTSmp5K2o2Q3VnRkZSNwo4MWE0Smw5bk9BdWMwREFkQmdOVkhRNEVGZ1FVaVk4dm8rZ3JvQlJVZS9OV3VDWmZaemdMbk5Bd0RnWURWUjBQQVFIL0JBUURBZ0dHCk1Bb0dDQ3FHU000OUJBTURBMmdBTUdVQ01GWGpJbGJwMTVJa1dFOGVsRElQREFJMnd2MnNkREpPNGZzY2dJaWp6UHZYNnl2L04zM3cKN2RlZWRXbzFkbEpGNEFJeEFNZU5iMElnajc2MlRWbnRkMDBweENBZ1JXU0dPbERHeEswdGsvVVlmWEx0cWMvRXJGYzJLQWhsM3p4NQpabjZnNmc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNGVENDQVp1Z0F3SUJBZ0lRUFpnN3BtWTlrR1AzZmlaWE9BVHZBREFLQmdncWhrak9QUVFEQXpCTU1TNHdMQVlEVlFRRERDVkIKZEc5eklGUnlkWE4wWldSU2IyOTBJRkp2YjNRZ1EwRWdSVU5ESUZSTVV5QXlNREl4TVEwd0N3WURWUVFLREFSQmRHOXpNUXN3Q1FZRApWUVFHRXdKRVJUQWVGdzB5TVRBME1qSXdPVEkyTWpOYUZ3MDBNVEEwTVRjd09USTJNakphTUV3eExqQXNCZ05WQkFNTUpVRjBiM01nClZISjFjM1JsWkZKdmIzUWdVbTl2ZENCRFFTQkZRME1nVkV4VElESXdNakV4RFRBTEJnTlZCQW9NQkVGMGIzTXhDekFKQmdOVkJBWVQKQWtSRk1IWXdFQVlIS29aSXpqMENBUVlGSzRFRUFDSURZZ0FFbG9aWUtEY0taOUNnM2lRWkdlSGtCUWNmbCszb1pJSzU5c1J4VU02SwpEUC9YdFhhN29XeVRiSU9pYUc2bDJiNHNpSlZCelYzZHNjcURZNFBNd0w1MDJlQ2RwTzVLVGxiZ21DbEJrMUlRMVNRNEFqSm44WlFTCmIrL1h4ZDR1L1JtQW8wSXdRREFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjBHQTFVZERnUVdCQlIyS0NYV2ZlQm1tbm9Kc21vN2pqUFgKTnROUG9qQU9CZ05WSFE4QkFmOEVCQU1DQVlZd0NnWUlLb1pJemowRUF3TURhQUF3WlFJd1c1a3A4NXd4dG9scmJOYTlkK0Y4NTFGKwp1RHJOb3paZmZQYzhkejdrVUsybzU5SlpEQ2FPTUR0dUNDckNwMXJJQWpFQW1lTU01NlBEcjlOSkxrYUNJMlpkeVFBVUV2MDQ5T0dZCmEzY3BldHNrejJWQXY5TGNqQkhvOUgxL0lJU3BRdVFvCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBSU0EgVExTIDIwMjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRlpEQ0NBMHlnQXdJQkFnSVFVOVhQNWhtVEMvc3JCUkxZd2lxaXBEQU5CZ2txaGtpRzl3MEJBUXdGQURCTU1TNHdMQVlEVlFRRApEQ1ZCZEc5eklGUnlkWE4wWldSU2IyOTBJRkp2YjNRZ1EwRWdVbE5CSUZSTVV5QXlNREl4TVEwd0N3WURWUVFLREFSQmRHOXpNUXN3CkNRWURWUVFHRXdKRVJUQWVGdzB5TVRBME1qSXdPVEl4TVRCYUZ3MDBNVEEwTVRjd09USXhNRGxhTUV3eExqQXNCZ05WQkFNTUpVRjAKYjNNZ1ZISjFjM1JsWkZKdmIzUWdVbTl2ZENCRFFTQlNVMEVnVkV4VElESXdNakV4RFRBTEJnTlZCQW9NQkVGMGIzTXhDekFKQmdOVgpCQVlUQWtSRk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBdG9BT3hIbTlCWXg5c0tPZFRTSk55L0JCCmwwMVo0TkgrVm95WDh0ZTlqMnkzSTQ5ZjFjVFlRY3Z5QWg1eDVlbjJYc3NJS2w0dzhpMW14NFFiWkZjNG5YVXRWc1l2WWUrVy9DQkcKdmV2VWV6OC9mRWM0QktrYnFsTGZFemZURlJWT3ZWOThyNjFqeDNuY0NIdlZvT1gzVzNXc2dGV1prbUdielNvWGZkdVA5TFZxNmhkSwpaQ2htRlNsc0F2RnIxYnFqTTl4YVo2Y0Y0cjlsdGhhd0VPM05VRFBKY0ZEc0dZNnd4L0owVzJ0RXhuMld1WmdJV1diZUtRR2I5Q3B0CjB4VTZrR3BuOGJSclp0a2g2OHJaWW54R0VGemVkVWxubmtMNS9uV3BvNjMvZGdwblFPUEY5NDNIaFpwWm5tS2FhdTFGaDVobnN0VksKUE5lME93QU53SThmNFVERXJtd2gzRWwrZnNxeWpXMjJ2NU12b1Z3K2o4cnRnSTVZNGR0WHo0VTJPTEp4cEFtTWtva0lpRWp4UUdNWQpzbHVNV3VQRDB4ZXFxeG1qTEJ2azFjYmlabnJYZ2htbU94WXNMM0dIWDBXZWxYT1R3a0tCSVJPVzE1MjdrMmdWK3Aya0hZenlnZUJZCkJyM0p0dVAyaVYySitheEVvY3RyK2hieHgxQTlKTnIzdytTSDFWYnhUNUF3K2tVSldkbzB6dUFUSEFSOEFOU2JocVJBdk5uY1RGZCsKcnJjenRsNTI0V1dMWnQrTnl0ZVlyODQybUl5Y2c1a0RjUE92ZE8zR0RqYm52ZXpCYzZlVVdzdVNaSUttQU1Gd29XNHNLZUZZVit4YQpmSmxySmFTUU9vRDBJSjJhenNjdCtiSkxLWldENlRXTnAwbElwdzlNR1pIUTliOFE0SEVDQXdFQUFhTkNNRUF3RHdZRFZSMFRBUUgvCkJBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWRFbVowZiswZW1oRmRjTit0TnpNemprejJnZ3dEZ1lEVlIwUEFRSC9CQVFEQWdHR01BMEcKQ1NxR1NJYjNEUUVCREFVQUE0SUNBUUFqUTFNa1lseHQvVDdDejFVQWJNVldpTGtPM1RyaUpRMlZTcGZLZ0ludUtzMWwrTnNXNEFtUwo0QmpIZUppNzgreENVdnVwcElMWFRkaUsvT1JPL2F1UXhEaDFNb1NmLzdPd0t3SXpOc0FRa0c4ZG5LL2hhWlBzbzBVdkZKLzFUQ3BsClEzSU05OFA0bFlzVTg0VWdZdDFVVTkwczNCaVZhVStEUjNCQU0xaDNFZ3lpNjFJeEhrekpxTTdGNzhQUnJlQnJBd0EwSnJSVUlUV1gKQWR4ZkcvRjg1MVg2TFdoM2U5TnB6Tk1PYTdwTmRrVFd3aFdhSnV5d3hmVzcwWHAwd216TnhiVmU5a3ptV3kyQjI3TzNPcGVlN2M5RwpzbEE5aEdDWmNiVXp0VmRGNWtKSGRXb09zQWdNcnIzZTk3c1BXRDJQQXpIb1BZSlF5aTllREYyMGw3NGdOQWYweEJMaDd0ZXcyVmt0CmFmY3hCUFR5K2F2NUV6SDRBWGNPUFVJakpzeWFjbWRSSVhyTVBJV282aUZxTzl0YVBLVTBucHJBTE4rQW5DbmczM2VVMGFLQVF2OXEKVEZzUjBQWE5vcjZ1ekZGY3c5VlVld3l1MXJrR2Q0RGk3d2NhYU14WlVhMStYR2RydWR2aUIwSmJ1QUVGV0RsTjVMdVlvN0V5N05tagoxbStVSS84N3R5bGw1Z2ZwNzdZWjZ1ZkNPQjB5aUpBOEV5dHV6TytyZHdZMGQ0UlBjdVNCaFBtNWREVGVkaytTS2xPeEpUbmJQUC9sClBxWU81V3VlLzl2c0wzU0QzNDYwczZuZUZFMy9NYU5GY3lUNmxTbk1FcGNFb2ppMmpiRHdOL3pJSVg4L3N5UWJQWXR1ekUyd0ZnMlcKSFlNZlJzQ2J2VU9aNThTV0xzNWZ5UT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClRydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMwo9PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZwVENDQTQyZ0F3SUJBZ0lVWlBZT1pYZGhhcXM3dE9xRmhMdXhpYmh4a3c4d0RRWUpLb1pJaHZjTkFRRU1CUUF3V2pFTE1Ba0cKQTFVRUJoTUNRMDR4SlRBakJnTlZCQW9NSEZSeWRYTjBRWE5wWVNCVVpXTm9ibTlzYjJkcFpYTXNJRWx1WXk0eEpEQWlCZ05WQkFNTQpHMVJ5ZFhOMFFYTnBZU0JIYkc5aVlXd2dVbTl2ZENCRFFTQkhNekFlRncweU1UQTFNakF3TWpFd01UbGFGdzAwTmpBMU1Ua3dNakV3Ck1UbGFNRm94Q3pBSkJnTlZCQVlUQWtOT01TVXdJd1lEVlFRS0RCeFVjblZ6ZEVGemFXRWdWR1ZqYUc1dmJHOW5hV1Z6TENCSmJtTXUKTVNRd0lnWURWUVFEREJ0VWNuVnpkRUZ6YVdFZ1IyeHZZbUZzSUZKdmIzUWdRMEVnUnpNd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQQpBNElDRHdBd2dnSUtBb0lDQVFEQU1ZSmhrdVNVR3dvcVpkQytCcW1ITzFFUzZuQkJydUw3ZE9vS2pibXpUTnlQdHhOU1QxUVk0U3h6CmxaSEZaanRxejZ4amJZZFQ4UGZ4T2JlZ1EyT3d4QU5kVjZublJNN0VvWU5sOWxBK3NYNFd1RHFLQXRDV0h3RE5CU0h2Qm0zZElad1oKUTBXaHhlaUF5c0t0UUdJWEJzYXF2UFBXNXZ4UWZtWkNIenlMcG5sNWhrQTFueUR2UCt1TFJ4K1Bqc1hVanJZc3lVUUU0OVJEZFQvVgpQNjhjekg1R1g2emZaQkNLNzBid2tQQVBMZlNJQzdFcHFxK0Zxa2xZcUw5am9EaVI1clBtZDJqRStTb1poTHNPNGZXdmlleWxMMUFnCmRCNFNRWE1lSk5uS3ppeWhXVFhBeUIxR0oyRmFqL2xOMDNKNVpoNmZGWkFoTGYzdGkxWndBMHBKUG45cE1SSnB4eDVjeW5vVGkram0KOVdBUHpKTXNoSC94L0dyOG0wZWQyNjJJUGZOMmRUUFhTNlRJaS9uMVExaFB5OGdEVkkrbGhYZ0VHdk56OHRlSEhVR2Y1OWdYemhxYwpEMHI4M0VSb1ZHamlRVHorTElTR056ek5QeStpMitmM1ZBTmZXZFAza1hqSGkzZHFGdVZKaFpCRmNuQXZrVjM0UG1WQUN4bVp5U1lnCldtakJOYjlQcDFIeDJCRXJXK0NhbmlnN0Nqb0tIOEdCNVM3d3BybHBwWWlVNW1zVGY5RmtQejJjY0VibG9vVjdXSVFuM01TQVBtZWEKbXNlYU1RNHc3T1lYUUpYWlJlMEJscXEvRFBOTDBXUDNFMWpBdVBQNlo5MmJmVzFLL3pKTXRTVTcveHhuRDRVaVdRV1JrVUYzZ2RDRgpUSWNRY2YrZVF4dXVsWFV0Z1FJREFRQUJvMk13WVRBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUI4R0ExVWRJd1FZTUJhQUZFRGs1UElqCjd6aktzSzVYZi9JaE1CWTAyN3lTTUIwR0ExVWREZ1FXQkJSQTVPVHlJKzg0eXJDdVYzL3lJVEFXTk51OGtqQU9CZ05WSFE4QkFmOEUKQkFNQ0FRWXdEUVlKS29aSWh2Y05BUUVNQlFBRGdnSUJBQ1k3VWVGTk9QTXlHTFMwWHVGbFhzU1VUOVNuWWFQNHdNOHpBUUxwdzZvMQpEL0dVRTNkM05aNHRWbEZFYnVIR0xpZ2UvOXJzUjgyWFJCZjM0RXpDNFh4OE1ucG15RnEyWEZORlYxcEYxQVdaTHk0alZlNWphTi9UCkczaW5FcFFHQUhVTmNvVHBMcnhhYXRYZUwxbkhvK3pTaDJiYnQxUzFKS3YwUTNqYlN3VEViOTNtUG1ZK0tmSkxhSEVpaDZENHNUTmoKZHVNTmhYSkVJbFUvSEh6cC9MZ1Y2Rkw2cWo2aklUazFkSW1tYXNJNStualB0cXpuNTlaVy95T1NMbEFMcWJVSE0vUTRYNlJKcHN0bApjSGJvQ29XQVN6WTlNL2VWVkhVbDJxekVjNEpsNlZMMVhQMDRsUUpxYVRERkhBcFhCNjRpcEN6NXhVRzN1T3lmVDBnQStRRUVWY3lzCitUSXh4SFdWQnFCLzBZMG4zYk9wcEhLSC9sbUxtbnAwRnQwV3BXSXA2enFXM0l1bmFGblQ2M2VST2ZqWHk5bVBYMW9uQVgxZGFCbGkKMk1qTjlMZHlSNzVibDg3eXJhS1prNjJVeTVQMkVnbVZ0cXZYTzlBL0Vjc3dGaTU1Z09SbmdTMWQ3WEI0dG1CWnJPRmRSV09QeU45eQphRnZxSGJnQjhYNzc1NHF6NDFTZ09BbmdQTjVDOHNMdExwdnpIelcyTnRqamdLR0x6WmxrRDhLcXE3SEs5VytlUTQyRVZKbXpic0FTClp0aHdFUEVHTlRORHFKd3V1aFF4emhCL0hJYmpqOUxWK0hmc202dnhMMlBaUWwvZ1o0RmtrZkdYTC94dUp2WXorTk8xK01SaXF6RlIKSlFKNitOMXJaZFZ0VFRESVpicG9GR1dzSnd0MGl2S0gKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKVHJ1c3RBc2lhIEdsb2JhbCBSb290IENBIEc0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ1ZUQ0NBZHlnQXdJQkFnSVVUeU5rdUk2WFk1N0dVNEhCZGs3TEtuUVYxdGN3Q2dZSUtvWkl6ajBFQXdNd1dqRUxNQWtHQTFVRQpCaE1DUTA0eEpUQWpCZ05WQkFvTUhGUnlkWE4wUVhOcFlTQlVaV05vYm05c2IyZHBaWE1zSUVsdVl5NHhKREFpQmdOVkJBTU1HMVJ5CmRYTjBRWE5wWVNCSGJHOWlZV3dnVW05dmRDQkRRU0JITkRBZUZ3MHlNVEExTWpBd01qRXdNakphRncwME5qQTFNVGt3TWpFd01qSmEKTUZveEN6QUpCZ05WQkFZVEFrTk9NU1V3SXdZRFZRUUtEQnhVY25WemRFRnphV0VnVkdWamFHNXZiRzluYVdWekxDQkpibU11TVNRdwpJZ1lEVlFRRERCdFVjblZ6ZEVGemFXRWdSMnh2WW1Gc0lGSnZiM1FnUTBFZ1J6UXdkakFRQmdjcWhrak9QUUlCQmdVcmdRUUFJZ05pCkFBVHhzODA0NUNWRDVkNFpDYnVCZWFJVlh4VmpBZDdDcTkyenBodG5TNENEcjVuTHJCZmJLNWJLZkZKVjRocmhQVmJ3THhZSStoVzgKbTd0SDVqL3VxT0ZNalBYVE52azRYYXR3bWtjTjRvRkJCdXRKK2JBcDNUUHNVS1YvZVNtNElKaWpZekJoTUE4R0ExVWRFd0VCL3dRRgpNQU1CQWY4d0h3WURWUjBqQkJnd0ZvQVVwYnRLbDg2ekszK2tNZDZYZzFtRHBtOXh5OTR3SFFZRFZSME9CQllFRktXN1NwZk9zeXQvCnBESGVsNE5aZzZadmNjdmVNQTRHQTFVZER3RUIvd1FFQXdJQkJqQUtCZ2dxaGtqT1BRUURBd05uQURCa0FqQmU4dXNHekVreG4wQUEKYmJkK052Qk5FVS96eTRrNkxIaVJVS05id01wMUp2Sy9rRjBMZ294Z0tKL0djSnBvNVBFQ01GeFlEbFoyejFqRDF4Q011bzZ1NDd4awpkVWZGVlpEai9icFY2d2ZFVTZzM3FlNGhzaUZiWUk4OU12SFZJNVRXV0E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpDb21tU2NvcGUgUHVibGljIFRydXN0IEVDQyBSb290LTAxCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNIVENDQWFPZ0F3SUJBZ0lVUTNDQ2Q4OU5YVFR4eXE0eUx6ZjM5SDkxb0o0d0NnWUlLb1pJemowRUF3TXdUakVMTUFrR0ExVUUKQmhNQ1ZWTXhFakFRQmdOVkJBb01DVU52YlcxVFkyOXdaVEVyTUNrR0ExVUVBd3dpUTI5dGJWTmpiM0JsSUZCMVlteHBZeUJVY25WegpkQ0JGUTBNZ1VtOXZkQzB3TVRBZUZ3MHlNVEEwTWpneE56TTFORE5hRncwME5qQTBNamd4TnpNMU5ESmFNRTR4Q3pBSkJnTlZCQVlUCkFsVlRNUkl3RUFZRFZRUUtEQWxEYjIxdFUyTnZjR1V4S3pBcEJnTlZCQU1NSWtOdmJXMVRZMjl3WlNCUWRXSnNhV01nVkhKMWMzUWcKUlVORElGSnZiM1F0TURFd2RqQVFCZ2NxaGtqT1BRSUJCZ1VyZ1FRQUlnTmlBQVJMTnVtdVYxNm9jTmZRajNSaWQ4TmVlcXJsdHFMeAplUDBDZmxmZGtYbWNiTGxTaUZTOEx3Uyt1TTMyRU5FcDdMWFFvTVB3aVhBWnUxRmx4VU9jdzV0am5TQ0RQZ1lMcGtKRWhSR25Tam90CjZkWm9MMGhPVXlzSFAwMjl1YXgzT1ZlalFqQkFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01CMEcKQTFVZERnUVdCQlNPQjJMQVVOM0dHUVlBUm5RRTkvT3VmWFZOTURBS0JnZ3Foa2pPUFFRREF3Tm9BREJsQWpFQW5EUGZRZU1qcUVJMgpKcGMxWEh2cjIwdjRxb3R6VlJWY3JIZ3BEN29oMk1TZzJORUQzVzNST1QzRWsyRFM0M0t5QWpCOHhYNkkwMUQxSGlYbytrNTE1bGlXCnBEVmZHMlhxWVpwd0k3VU5vNXVTVW05cG9JeU5TdER1aXc3TFI0N1FqUkU9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgRUNDIFJvb3QtMDIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ0hEQ0NBYU9nQXdJQkFnSVVLUDJaWUVGSHBnRTZ5aFI3SCsvNWFBaURYWDB3Q2dZSUtvWkl6ajBFQXdNd1RqRUxNQWtHQTFVRQpCaE1DVlZNeEVqQVFCZ05WQkFvTUNVTnZiVzFUWTI5d1pURXJNQ2tHQTFVRUF3d2lRMjl0YlZOamIzQmxJRkIxWW14cFl5QlVjblZ6CmRDQkZRME1nVW05dmRDMHdNakFlRncweU1UQTBNamd4TnpRME5UUmFGdzAwTmpBME1qZ3hOelEwTlROYU1FNHhDekFKQmdOVkJBWVQKQWxWVE1SSXdFQVlEVlFRS0RBbERiMjF0VTJOdmNHVXhLekFwQmdOVkJBTU1Ja052YlcxVFkyOXdaU0JRZFdKc2FXTWdWSEoxYzNRZwpSVU5ESUZKdmIzUXRNREl3ZGpBUUJnY3Foa2pPUFFJQkJnVXJnUVFBSWdOaUFBUjRNSUhvWXg3bDYzRlJEL2NIQjhvNW1YeE8xUS9NCk1EQUxqMmFUUHMrOXhZYTkrYkczdEQ2MEI4anpsakh6N2FSUCtLTk9qU2tWV0xqVmIzL3ViQ0sxc0s5SVJRcTlxRW1VdjRSRHNOdUUKU2dNakdXZHFiOEZ1dkFZNU45R0lJdmVqUWpCQU1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RnWURWUjBQQVFIL0JBUURBZ0VHTUIwRwpBMVVkRGdRV0JCVG1HSFgvNzJEZWhLVDFSc2ZlU2xYak1qWjU5VEFLQmdncWhrak9QUVFEQXdObkFEQmtBakFtYzBsNnRxdm1TZlI5ClVqL1VRUVN1Z0VPRFpYVzVoWUE0TzladjVKT0dxNC9uaWNoL20zNXJDaEpWWWFvUjRIa0NNSGZvTVhHc1BIRUQxb1FtSGhTNDh6czcKM3UxWi9HdE1NSDlaemtYcGMyQVZta3p3NWw0bEloVnR3b2RaMExLT2FnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKQ29tbVNjb3BlIFB1YmxpYyBUcnVzdCBSU0EgUm9vdC0wMQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGYkRDQ0ExU2dBd0lCQWdJVVBnTkpnWFVXZERHT1RLdlZ4WkFwbHNVNUVOMHdEUVlKS29aSWh2Y05BUUVMQlFBd1RqRUxNQWtHCkExVUVCaE1DVlZNeEVqQVFCZ05WQkFvTUNVTnZiVzFUWTI5d1pURXJNQ2tHQTFVRUF3d2lRMjl0YlZOamIzQmxJRkIxWW14cFl5QlUKY25WemRDQlNVMEVnVW05dmRDMHdNVEFlRncweU1UQTBNamd4TmpRMU5UUmFGdzAwTmpBME1qZ3hOalExTlROYU1FNHhDekFKQmdOVgpCQVlUQWxWVE1SSXdFQVlEVlFRS0RBbERiMjF0VTJOdmNHVXhLekFwQmdOVkJBTU1Ja052YlcxVFkyOXdaU0JRZFdKc2FXTWdWSEoxCmMzUWdVbE5CSUZKdmIzUXRNREV3Z2dJaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRQ3dTR1dqRFIxQzQ1RnQKbllTa1laWVN3dTNEMmlNMEdYYjI2djFWV3ZaVkFWTVA4c3lNbDArNVVNdXpBVVJXbHYyYktPeDdkQXZuUW10VnpzbGhzdWl0UUR5Ngp1VUVLQlU4YkpvV1BRN1ZBdFlYUjFISGNnMEh6OWtYSGdLS0VVSmRHenFBTXhHQldCQjBIVzBhbERySkxwQTZsZk83NDFHSUR1Wk5xCmloUzRjUGd1Z2tZNEl3NTB4MnRCdDlBcG81MkFzSDUzazJOQyt6U0RPM09qV2lFMjYwZjZHQmZadW1iQ2s2U1AvRjJrcmZ4UWFwV3MKdkNRejBiMklmNGIxOWJKektvOThyd2p5R3BnL3FZRmxQOEdNaWNXV01Kb0t6L1RVeURUdG5TKzhqVGlHVSs2WG42bXlZNVFYalEvYwpaaXA4VWxGMXk1bU82RDFjdjU0N0tJMkRBZytwbjNMaUxDdXozR2FYQUVEUXBGU09tMTE3UlRZbTFuSkQ2OC9BNmczY3poTG1mVGlmCkJTZW9sejdwVWNac0JTakJBZy9wR0czc3Zad0cxS2RKOUZRRmEyd3c4ZXNEMWVvOWFuYkN5eG9vU1UxL1pPRDZLOXB6ZzRIL2tRTzkKbEx2a3VJNmNNbVBObjd0b2diR0VXNjgydjNmdUhYLzNTWnRTN05KM1duMlJuVTNDT1Mza3VvTDRiL0pPSGc5TzVqOVpwU1BjUFllbwpLRmdvMGZFYk50dFB4UC9oakZ0eWpNY21BeWVqT1FvQnFzQ3lNV0NESXFGUEVna0JFYTgwMU0vWHJtTFRCUWUwTVhYZ0RXMVhUMm1ICitWZXB1aFgyeUZKdG9jdWNIK1g4ZUtnMW1wOUJGTTZsdE02VUNCd0pyVmJsMnJaSm1rcnFZeGhUbkN3dXd3SURBUUFCbzBJd1FEQVAKQmdOVkhSTUJBZjhFQlRBREFRSC9NQTRHQTFVZER3RUIvd1FFQXdJQkJqQWRCZ05WSFE0RUZnUVVOMTJtbW5ReXdzTDV4NllWRUZtNAo1UDNsdUcwd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFLK256OTcvNEwxQ2pVM2xJcGJmYU9wOVRTcDkwSzA5Rmx4RDUzM0FodWg2Ck5XUHh6SUhJeGd2b0xsSTFwS1pKa0dOUnJEU3NCVHRYQU9uVFl0UFpLZFZVdmh3UWtaeXliZjVaL1huMzZsYlFubWhVUW84bVV1Sk0KM3krWHBpL1NCNWlvODJCZFM1cFlWNGp2Z3VYNnIyeUJTNUtQUUpxVFJsbkxYM2dXc1djK1FndmZLTm13clpnZ3ZrTjgwVjRhQ1JjawpqWHRkbGVtcndXQ3JXeGhrZ1B1dDRBWjlIY3BadVBONEtXZkdWaDJ2dHJWMEtuYWhQL3QxTUorVVhqdWxZUFBMWEF6aURzbGcrTWtmCkZvb20zZWNuZitzbHBvcTl1QzAyRUpxeFdFMmFhRTlnVk9YMlJoT09pS3k4SVVJU3JjWktpWDJid2RndDZaWUQ5S0owREx3QUhiL1cKTnlWbnRIS0xyNFc5NmlvRGo4ejdQRVFrZ3VJQnBRdFp0alNOTWdzU0Rlc253djFCMTBBOGNrWXB3SXpxdWcveEJwTXU5NXlvOUdBKwpvL0U0WG80VHdiTTZsNGMva3NwNHFSeXYwTEFiSmg2K2NPeDY5VE9ZNmx6L0t3c0VUa1BkWTM0T3AwNTRBNVUrMUMwd2xSRVFLQzYvCm9BSSsvMTVaMHdVT2xWOVRSZTlyaDlWSXpSYW1sb1BoMzdNRzg4RVUyNmZzSEl0ZGtKQU5jbEhuWWZrVXlxK0RqNyt2c1FwWlhkeGMKMStTV3JWdGdIZHF1bDdJNTJRYjFkZ0FUK0doTUliQTF4TnhWc3NuQlFWb2NpY0NNYjNTZ2F6Tk50UUVvL2EydGlSYzdwcHFFdk91TQo2c1J4SktpNktma0lzaWRXTlRKZjZqbjdNWnJWR2N6dwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgpDb21tU2NvcGUgUHVibGljIFRydXN0IFJTQSBSb290LTAyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZiRENDQTFTZ0F3SUJBZ0lVVkJhL08zNDVsWEdOMGFvQXBZWU5LNDk2QlU0d0RRWUpLb1pJaHZjTkFRRUxCUUF3VGpFTE1Ba0cKQTFVRUJoTUNWVk14RWpBUUJnTlZCQW9NQ1VOdmJXMVRZMjl3WlRFck1Da0dBMVVFQXd3aVEyOXRiVk5qYjNCbElGQjFZbXhwWXlCVQpjblZ6ZENCU1UwRWdVbTl2ZEMwd01qQWVGdzB5TVRBME1qZ3hOekUyTkROYUZ3MDBOakEwTWpneE56RTJOREphTUU0eEN6QUpCZ05WCkJBWVRBbFZUTVJJd0VBWURWUVFLREFsRGIyMXRVMk52Y0dVeEt6QXBCZ05WQkFNTUlrTnZiVzFUWTI5d1pTQlFkV0pzYVdNZ1ZISjEKYzNRZ1VsTkJJRkp2YjNRdE1ESXdnZ0lpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElDRHdBd2dnSUtBb0lDQVFEaCtnNzdhQUFTeUUzVgpyQ0xFTlFFN3hWVGxXWFpqcFgvcndjUnFtTDB5alJlQTYxMjYwV0k5SlNNWk5SVHBmNG1uRzJJODFsRG5OSlVETXJHMGt5STlwK0t4CjdlWjdUaTZIbXcwemRRcmVxalhuZnVVMm1LS3VKWjZWc3pLV3BDdFlIdTgvL21JMFNGSFJ0STFDcldEYVNXcVZjTjNTQU9MTVYyTUMKZTViZFNaZGJrazZWMC9uTEtSOFlTdmdCS3RKakNXNGs2WW5TNWNjaVROeHpoa2NBcWcySWpxNkZmVXJwdXpOUERsSnduWlhqZkcyVwpXeTA5WDZHRFJsMjI0eVc0ZktjWmdCenFaVVBja1hrMkxIUjg4bWNHeVluSjI3L2FhTDhqN2R4cnJTaURlUy9zT0tVTk53Rm5KNXJwCk05a3pYemVoeGZDclBmcDRzT2Nzbi9ZK24yRGc3MGpwa0VVZUJWRjRHaXdTTEZ3b3JBMmlJNTQwandYbW9qUE9FWGNUMUE2a0hrSWYKaHMxdy90a3VGVDBkdTdqeVUxZmJ6TVowS1p3WXN6WjFPQzRQVktINGtoK0psays3MU82ZDZUczJRclVLT3lyVVpIazJFT0g1a1FNcgpleUJVelEwWkdzaEJNalRSc0puaGtCNEJRRGExdC9xcDVYZDFwQ0tCWGJDTDVDY1NEMVNJeHR1RmRPYTN3TmVtS2ZyYjN2T1RseWNFClZTOEtiemZGUFJPdkNnQ3BMSXNjZ1NqWDc0WXhxYTd5YnJqS2FpeFVSOWdxaUM2dndRY1FlS3dSb2k5QzhEZkY4cmhXM1E1aUxjNHQKVm41VjhxZEU5aXN5OUNPb1IralVLZ0Y0ejJyRE42aWVaZElzNWZxNk04RUdSUGJtejZVTnAyWUlOSW9zOHdJREFRQUJvMEl3UURBUApCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCQmpBZEJnTlZIUTRFRmdRVVI5RG5zU0wvblN6MTJWZGdzN0d4CmNKWHZZWG93RFFZSktvWklodmNOQVFFTEJRQURnZ0lCQUlacHNVMHY2WjlQSXBOb2p1UWhtYVBPUlZNYmMwUlRBSUZoelRIakNMcUIKS0NoNmtybTJxTWhEbnNjVEprM0MyT1ZWbkpKZFVOakNLOXYrNXFpWHoxSTZKTU5sWkZ4SE1hTmxOUlBEazduMytWR1h1NlR3WW9mRgoxZ2JUbDRNZ3FYNjd0aUhDcFEyRUFPSHlKeENEdXQwRGdkWGRhTU5tRU1qUmRyU3pieW1lQVBuQ0tmV3hreGxTYVJvc1RLQ0w0QldhCk1TL1RpSlZaYnVYRXMxRElGQWhLbTRzVGc3R2tjckk3ZGpOQjNOeXFwZ2R2SFNRU244aDJ2Uy9aanZRczdyZlNPQkFrTmxFdjQxeGQKZ1NHbjJydE8vK1lIcVA2NURTZHN1M0JhVlhvVDZmRXFTV25IWDRkWFRFTjViVHBsNlRCY1FlN3JkNlZ6RW9qb3YzMnU1Y1NvSHcyTwpIRzFRQWs4bUdFUGVqMVdGc1FzM0JXREpWVGtTQktFcXozRVduelpSU2I5d081NW5uUHQ3ZWNrNUhIaXNkNUZVbXJoMUNvRlNsK05tCllXdnRQamdlbG1GVjRaRlVqTzJNSkIrQnlSQ2FjNWtyRms1eUFEOVVHL2lOdW92bkZOYTJSVTlnN0phdXd5OENUbDJkbGtseUFMS3IKZFZ3UGFGc2RaY0pmTXc4ZUQvQTdodld3VHJ1Yzkrb2xCZHl0b3B0TEZ3RytRdDgxSVIydHE2NzB2NjRmRzlQaU8veXpjbk1jbXlpUQppUk05SGNFQVJ3bVdtamdiM2JIUERjSzBSUE9XbGM0eU9vODBuT0FYeDE3T3JnM2JoempsUDF2OW14bmhNVUY2Y0tvamF3SGhSVXpOCmxNNDduaTNuaUFJaTlHN295T3pXUFBPNXN0ZDNlcXg3Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClRlbGVrb20gU2VjdXJpdHkgVExTIEVDQyBSb290IDIwMjAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ1FqQ0NBY21nQXdJQkFnSVFOanFXak1sY3Nsak4wQUZkeGVWWEFEQUtCZ2dxaGtqT1BRUURBekJqTVFzd0NRWURWUVFHRXdKRQpSVEVuTUNVR0ExVUVDZ3dlUkdWMWRITmphR1VnVkdWc1pXdHZiU0JUWldOMWNtbDBlU0JIYldKSU1Tc3dLUVlEVlFRRERDSlVaV3hsCmEyOXRJRk5sWTNWeWFYUjVJRlJNVXlCRlEwTWdVbTl2ZENBeU1ESXdNQjRYRFRJd01EZ3lOVEEzTkRneU1Gb1hEVFExTURneU5USXoKTlRrMU9Wb3dZekVMTUFrR0ExVUVCaE1DUkVVeEp6QWxCZ05WQkFvTUhrUmxkWFJ6WTJobElGUmxiR1ZyYjIwZ1UyVmpkWEpwZEhrZwpSMjFpU0RFck1Da0dBMVVFQXd3aVZHVnNaV3R2YlNCVFpXTjFjbWwwZVNCVVRGTWdSVU5ESUZKdmIzUWdNakF5TURCMk1CQUdCeXFHClNNNDlBZ0VHQlN1QkJBQWlBMklBQk02Ly9sZW92OVdxOXhDYXpielJFYUs5WjBMTWtPc1ZHSkRab3MwTUtpWHJQay9PdGRLUEQvTTEKMmtPTEFvQytiMUVrSFE5cks4cWZ3bTlRTXVVM0lMWWcvNGdORDIxSnU5c0dwSWVRa3BUMENkRFBmOGlBQzhHWHM3czFKOG5DRzZOQwpNRUF3SFFZRFZSME9CQllFRk9OeXpHNlZtVWV4NXJOaFROSExxK082emQ2Zk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RnWURWUjBQCkFRSC9CQVFEQWdFR01Bb0dDQ3FHU000OUJBTURBMmNBTUdRQ01IVlNpN2VrRUUrdVNoQ0xzb1JiUXVIbUtqWUMycUJ1R1Q4bHY5cFoKTW83ays1RGNrMlRPcmJSQlIyRGl6NmZMSGdJd04wR01adDlCYTlhREFFSDlMMXIzVUxSbjBTeW9jZGREeXB3bkpKR0RTQTNQemZkVQpnYS9zZitSbjI3aVE3dDBsCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KClRlbGVrb20gU2VjdXJpdHkgVExTIFJTQSBSb290IDIwMjMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRnN6Q0NBNXVnQXdJQkFnSVFJWnhVTGVqMjdIRjMrazdvdzNCWGx6QU5CZ2txaGtpRzl3MEJBUXdGQURCak1Rc3dDUVlEVlFRRwpFd0pFUlRFbk1DVUdBMVVFQ2d3ZVJHVjFkSE5qYUdVZ1ZHVnNaV3R2YlNCVFpXTjFjbWwwZVNCSGJXSklNU3N3S1FZRFZRUUREQ0pVClpXeGxhMjl0SUZObFkzVnlhWFI1SUZSTVV5QlNVMEVnVW05dmRDQXlNREl6TUI0WERUSXpNRE15T0RFeU1UWTBOVm9YRFRRNE1ETXkKTnpJek5UazFPVm93WXpFTE1Ba0dBMVVFQmhNQ1JFVXhKekFsQmdOVkJBb01Ia1JsZFhSelkyaGxJRlJsYkdWcmIyMGdVMlZqZFhKcApkSGtnUjIxaVNERXJNQ2tHQTFVRUF3d2lWR1ZzWld0dmJTQlRaV04xY21sMGVTQlVURk1nVWxOQklGSnZiM1FnTWpBeU16Q0NBaUl3CkRRWUpLb1pJaHZjTkFRRUJCUUFEZ2dJUEFEQ0NBZ29DZ2dJQkFPMDFvWUdBODh0S2FWdkMrMUdEcmliOTRXN3pnUko5Y1VEL2gzVkMKS1NIdGdWSXMzeExCR1lTSndiM0ZLTlhWUzJ4RTFremJCNVpLVlhyS05vSUVOcWlsL0NmMlNmSFZjcDZSK1NQV2NIdTc5WnZCN0pQUApHZXBsZm9od29IUDg5disxVm1MaGMybzBtRDZDdUt5VlUvUUJvQ2NIY3FNQVU2RGtzcXVET0ZjekpaU2Z2a2dkbU9HanVwNWN6UVJ4ClVYMTFlS3Z6V2FyRTRHQytqNE5TdUhVYVFUWHR2UE02WSttcEZFWFg1bExSYnRMZXZPUDFDenZtNE1TOVEyUVRwczcwbURkc2lwV28KbDhoSEQvQmVFSXZuSFJ6K3NUdWdCVE5vQlVHQ3dRTXJBY2puajAycjZMWDJ6V3RFdGVmZGkrenFKYlFBSWxkTnNMR3lNY0VXenYvOQpGSVMzUi9xeThYRGUyNHRzTmxpa2ZMTVIwY04zZjErMkplQU54ZEt6K2JpNGQ5czNjWEZINDJBWVR5UzJkVGQ0dWFOaXI3M0pjbzR2CnpMdXUyK1FWVWhrSE0vdHF0eTFMa0NpQ2MvNFlpeldOMjZjRWFyN3F3VTAyT3hZMmtUTHZ0a0NKa1VQZzhxS3JCQzdtOGt3T0ZqUWcKcklmQkxYN0paa2NYRkJHazgvZWhKSW1yMkJySW9WeXhvL2VNYmNnQnlVL0o3TVQ4ckZFejBjaUQwY21mSGRSSE5Dayt5N0FPK29NTApLRmpsS2R3L2ZLaWZ5YllLdTZib1JoWVBsdVY3NUdwNlNHMTJtQVdsM0cwZVFoNUMyaHJnVXZlMWc4QWFlM2cxTERqMUgvMUpveTdTCldXTy9nTENNazNQTE5hYVpsU0poWlFOZyt5K1RTL3FhbklBN0FnTUJBQUdqWXpCaE1BNEdBMVVkRHdFQi93UUVBd0lCQmpBZEJnTlYKSFE0RUZnUVV0cWVYZ2oxMGhadjNQSitUbXBWNWRWS01iVWN3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFmQmdOVkhTTUVHREFXZ0JTMgpwNWVDUFhTRm0vYzhuNU9hbFhsMVVveHRSekFOQmdrcWhraUc5dzBCQVF3RkFBT0NBZ0VBcU14aHByNTFuaFZRcEd2N3FIQkZmTHArCnNWcjhXeVA2Q25mNG1IR0NERzNnWGthcWsvUWVvTVBoazl0THJiS21YYXV3MUdMTFhydG05UzN1bDBBOFl1dGUxaFRXak9LV2kwRnAKa3pYbXVabHJZclNoRjJZMHBtdGp4cmxPOGlMcFdBMVdRZEg2REVyd004MDd1MjBoT3E2T2NyWERTdnZwZmVXeG00YnU0dUI5dFBjeQovU0tFOFlYSk4zbnB0VCsvWE9SMHNvOFJZZ0RkR0dhaDJYc2pYL0dPMVdmb1ZOcGJPbXMyYi9tQnNUTkhNM2RBK1ZLcTNkU0R6NFY0Cm1acVR1WE5uUWtZUkllcitDcWtiR21WcHM0K3VGcmIyUzFheUxmbWx5T3c3WXFQdGE5Qk8xVUFKcEIrWTF6cWxrbGtnNUxCOXpWdHoKYUwxdHhLSVREbWNadUkxQ2Ztd01tbTZnSkMzVlJSdmN4QUlVL29WYlpaZktUcEJRQ0hwQ05mbnF3bWJVK0FHdUhyUyt3Nmp2L25hYQpvcVlmUnZhRTdmemJ6c1FDem5kSUxJeXk3TU1Bbyt3c1ZSakJmaG51NFMveXJZT2JucXNaMzhhS0w0eDM1YmNGN0R2QjdMNkdzNGE4CndQZmM1K3BicnJMTXRUV0dTOURpUDdiWStBNEE3bDNqOTQxWS84K0xOK2xqWDI3M0NYRTJ3aEpkVi9MSXRNM3o3Z0xmRWR4cXVWZUUKSFZsTmpNN0lEaVBDdHlhYUVCUngvcE95aXJpQThBNFFudE9vVUF3M2dpL3E0SXFkNFN3NS83VzBjd0RrOTBpbWM2eS9zdDUzQkllMApvODJiTlNRMytwQ1RFNEZDeHBnbWRUZG1RUkNzdS9XVTQ4SXhLNjNuSTFiTU5TV1NzMUE9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCkNsb3VkZmxhcmUgQ0EKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQzZ6Q0NBa3lnQXdJQkFnSVVJN2I2OHAwcFByQ0JvVzRwdGx5dlZjUEl0c2N3Q2dZSUtvWkl6ajBFQXdRdwpnWTB4Q3pBSkJnTlZCQVlUQWxWVE1STXdFUVlEVlFRSUV3cERZV3hwWm05eWJtbGhNUll3RkFZRFZRUUhFdzFUCllXNGdSbkpoYm1OcGMyTnZNUmd3RmdZRFZRUUtFdzlEYkc5MVpHWnNZWEpsTENCSmJtTXhOekExQmdOVkJBTVQKTGtOc2IzVmtabXhoY21VZ1ptOXlJRlJsWVcxeklFVkRReUJEWlhKMGFXWnBZMkYwWlNCQmRYUm9iM0pwZEhrdwpIaGNOTWpBd01qQTBNVFl3TlRBd1doY05NalV3TWpBeU1UWXdOVEF3V2pDQmpURUxNQWtHQTFVRUJoTUNWVk14CkV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCR2NtRnVZMmx6WTI4eEdEQVcKQmdOVkJBb1REME5zYjNWa1pteGhjbVVzSUVsdVl6RTNNRFVHQTFVRUF4TXVRMnh2ZFdSbWJHRnlaU0JtYjNJZwpWR1ZoYlhNZ1JVTkRJRU5sY25ScFptbGpZWFJsSUVGMWRHaHZjbWwwZVRDQm16QVFCZ2NxaGtqT1BRSUJCZ1VyCmdRUUFJd09CaGdBRUFWZFhzWDh0cEE5TkFRZUVRYWx2VUljVmFGTkR2R3NSNjl5c1p4T3JhUldOR0hMZnExbWkKUDZvM3d0bXR4L0MyT1hHMDFDdzdVRkpiS2w1TUVEeG5UMktvQWRGU3luU0pPRjJORG9lNUxvWkhiVVcreVIzWApGRGwrTUY2SnpaNTkwVkxHbzZkUEJmMDZVc1hiSDdQdkhIMlhLdEZ0OGJCWFZOTWE1YTIxUmRtcEQwUGhvMFV3ClF6QU9CZ05WSFE4QkFmOEVCQU1DQVFZd0VnWURWUjBUQVFIL0JBZ3dCZ0VCL3dJQkFqQWRCZ05WSFE0RUZnUVUKWUJjUW5nMUFFTU1OdGV1UkRBTUcwL3ZnRmUwd0NnWUlLb1pJemowRUF3UURnWXdBTUlHSUFrSUJRVTVPVEEyaApZcW1GazhwYWFuNWV6SFZMY21jdWNzZll3NEwvd21lRWpDa2N6Um1DVk5tNkw4NkxqaFdVMHYwd0VSMGUrbEhPCjNlZnZqYnN1OGdJR1NhZ0NRZ0VCbnlZTVA5Z3dnOGw5NlFuUTFraEZBMWxqRmxucWMyWGdKSERTYUFKQzBnZHoKK05WM0pNZVdhRDJSYjMyamM5cjYvYTd4WTB1MEJ5cXhCUTFPUTBkdDdBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpDb3B5cmlnaHQgKEMpIDIwMTYgQ29tcG9zZXIKClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4KdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwp1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwpvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8Kc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKU09GVFdBUkUuClRoaXMgZmlsZSB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIgUGF0Y2hlcyAoaHR0cHM6Ly9naXRodWIuY29tL2N3ZWFnYW5zL2NvbXBvc2VyLXBhdGNoZXMpClBhdGNoZXMgYXBwbGllZCB0byB0aGlzIGRpcmVjdG9yeToKCjAKU291cmNlOiBwYXRjaGVzL2Nsb3VkZmxhcmUtY2EucGF0Y2gKCgo8P3BocAoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgY29tcG9zZXIvY2EtYnVuZGxlLgogKgogKiAoYykgQ29tcG9zZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlcj4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcKICogdGhlIExJQ0VOU0UgZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwpuYW1lc3BhY2UgX1BIUFN0YW5fOGM2NmQ4MjU1XENvbXBvc2VyXENhQnVuZGxlOwoKdXNlIF9QSFBTdGFuXzhjNjZkODI1NVxQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKdXNlIF9QSFBTdGFuXzhjNjZkODI1NVxTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBocFByb2Nlc3M7Ci8qKgogKiBAYXV0aG9yIENocmlzIFNtaXRoIDxjaHJpc0BjczI3OC5vcmc+CiAqIEBhdXRob3IgSm9yZGkgQm9nZ2lhbm8gPGouYm9nZ2lhbm9Ac2VsZC5iZT4KICovCmNsYXNzIENhQnVuZGxlCnsKICAgIC8qKiBAdmFyIHN0cmluZ3xudWxsICovCiAgICBwcml2YXRlIHN0YXRpYyAkY2FQYXRoOwogICAgLyoqIEB2YXIgYXJyYXk8c3RyaW5nLCBib29sPiAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGNhRmlsZVZhbGlkaXR5ID0gYXJyYXkoKTsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3lzdGVtIENBIGJ1bmRsZSBwYXRoLCBvciBhIHBhdGggdG8gdGhlIGJ1bmRsZWQgb25lCiAgICAgKgogICAgICogVGhpcyBtZXRob2Qgd2FzIGFkYXB0ZWQgZnJvbSBTc2x1cnAuCiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vRXZhbkRvdFByby9Tc2x1cnAKICAgICAqCiAgICAgKiAoYykgRXZhbiBDb3VyeSA8bWVAZXZhbmNvdXJ5LmNvbT4KICAgICAqCiAgICAgKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIGJlbG93OgogICAgICoKICAgICAqIENvcHlyaWdodCAoYykgMjAxMywgRXZhbiBDb3VyeQogICAgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAqCiAgICAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAogICAgICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogICAgICoKICAgICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKICAgICAqICAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAgKgogICAgICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogICAgICogICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgogICAgICogICAgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgICAgKgogICAgICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAogICAgICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKICAgICAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKICAgICAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKICAgICAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwogICAgICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwogICAgICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCiAgICAgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICAgICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKICAgICAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgICoKICAgICAqIEBwYXJhbSAgTG9nZ2VySW50ZXJmYWNlICRsb2dnZXIgb3B0aW9uYWwgbG9nZ2VyIGZvciBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBDQSBmaWxlcyB3ZXJlIGxvYWRlZAogICAgICogQHJldHVybiBzdHJpbmcgICAgICAgICAgcGF0aCB0byBhIENBIGJ1bmRsZSBmaWxlIG9yIGRpcmVjdG9yeQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN5c3RlbUNhUm9vdEJ1bmRsZVBhdGgoP0xvZ2dlckludGVyZmFjZSAkbG9nZ2VyID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoc2VsZjo6JGNhUGF0aCAhPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGNhUGF0aDsKICAgICAgICB9CiAgICAgICAgJGNhQnVuZGxlUGF0aHMgPSBhcnJheSgpOwogICAgICAgIC8vIElmIFNTTF9DRVJUX0ZJTEUgZW52IHZhcmlhYmxlIHBvaW50cyB0byBhIHZhbGlkIGNlcnRpZmljYXRlL2J1bmRsZSwgdXNlIHRoYXQuCiAgICAgICAgLy8gVGhpcyBtaW1pY3MgaG93IE9wZW5TU0wgdXNlcyB0aGUgU1NMX0NFUlRfRklMRSBlbnYgdmFyaWFibGUuCiAgICAgICAgJGNhQnVuZGxlUGF0aHNbXSA9IHNlbGY6OmdldEVudlZhcmlhYmxlKCdTU0xfQ0VSVF9GSUxFJyk7CiAgICAgICAgLy8gSWYgU1NMX0NFUlRfRElSIGVudiB2YXJpYWJsZSBwb2ludHMgdG8gYSB2YWxpZCBjZXJ0aWZpY2F0ZS9idW5kbGUsIHVzZSB0aGF0LgogICAgICAgIC8vIFRoaXMgbWltaWNzIGhvdyBPcGVuU1NMIHVzZXMgdGhlIFNTTF9DRVJUX0ZJTEUgZW52IHZhcmlhYmxlLgogICAgICAgICRjYUJ1bmRsZVBhdGhzW10gPSBzZWxmOjpnZXRFbnZWYXJpYWJsZSgnU1NMX0NFUlRfRElSJyk7CiAgICAgICAgJGNhQnVuZGxlUGF0aHNbXSA9IFxpbmlfZ2V0KCdvcGVuc3NsLmNhZmlsZScpOwogICAgICAgICRjYUJ1bmRsZVBhdGhzW10gPSBcaW5pX2dldCgnb3BlbnNzbC5jYXBhdGgnKTsKICAgICAgICAkb3RoZXJMb2NhdGlvbnMgPSBhcnJheSgKICAgICAgICAgICAgJy9ldGMvcGtpL3Rscy9jZXJ0cy9jYS1idW5kbGUuY3J0JywKICAgICAgICAgICAgLy8gRmVkb3JhLCBSSEVMLCBDZW50T1MgKGNhLWNlcnRpZmljYXRlcyBwYWNrYWdlKQogICAgICAgICAgICAnL2V0Yy9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCcsCiAgICAgICAgICAgIC8vIERlYmlhbiwgVWJ1bnR1LCBHZW50b28sIEFyY2ggTGludXggKGNhLWNlcnRpZmljYXRlcyBwYWNrYWdlKQogICAgICAgICAgICAnL2V0Yy9zc2wvY2EtYnVuZGxlLnBlbScsCiAgICAgICAgICAgIC8vIFNVU0UsIG9wZW5TVVNFIChjYS1jZXJ0aWZpY2F0ZXMgcGFja2FnZSkKICAgICAgICAgICAgJy91c3IvbG9jYWwvc2hhcmUvY2VydHMvY2Etcm9vdC1uc3MuY3J0JywKICAgICAgICAgICAgLy8gRnJlZUJTRCAoY2Ffcm9vdF9uc3NfcGFja2FnZSkKICAgICAgICAgICAgJy91c3Ivc3NsL2NlcnRzL2NhLWJ1bmRsZS5jcnQnLAogICAgICAgICAgICAvLyBDeWd3aW4KICAgICAgICAgICAgJy9vcHQvbG9jYWwvc2hhcmUvY3VybC9jdXJsLWNhLWJ1bmRsZS5jcnQnLAogICAgICAgICAgICAvLyBPUyBYIG1hY3BvcnRzLCBjdXJsLWNhLWJ1bmRsZSBwYWNrYWdlCiAgICAgICAgICAgICcvdXNyL2xvY2FsL3NoYXJlL2N1cmwvY3VybC1jYS1idW5kbGUuY3J0JywKICAgICAgICAgICAgLy8gRGVmYXVsdCBjVVJMIENBIGJ1bmRlIHBhdGggKHdpdGhvdXQgLS13aXRoLWNhLWJ1bmRsZSBvcHRpb24pCiAgICAgICAgICAgICcvdXNyL3NoYXJlL3NzbC9jZXJ0cy9jYS1idW5kbGUuY3J0JywKICAgICAgICAgICAgLy8gUmVhbGx5IG9sZCBSZWRIYXQ/CiAgICAgICAgICAgICcvZXRjL3NzbC9jZXJ0LnBlbScsCiAgICAgICAgICAgIC8vIE9wZW5CU0QKICAgICAgICAgICAgJy91c3IvbG9jYWwvZXRjL3NzbC9jZXJ0LnBlbScsCiAgICAgICAgICAgIC8vIEZyZWVCU0QgMTAueAogICAgICAgICAgICAnL3Vzci9sb2NhbC9ldGMvb3BlbnNzbC9jZXJ0LnBlbScsCiAgICAgICAgICAgIC8vIE9TIFggaG9tZWJyZXcsIG9wZW5zc2wgcGFja2FnZQogICAgICAgICAgICAnL3Vzci9sb2NhbC9ldGMvb3BlbnNzbEAxLjEvY2VydC5wZW0nLAogICAgICAgICAgICAvLyBPUyBYIGhvbWVicmV3LCBvcGVuc3NsQDEuMSBwYWNrYWdlCiAgICAgICAgICAgICcvb3B0L2hvbWVicmV3L2V0Yy9vcGVuc3NsQDMvY2VydC5wZW0nLAogICAgICAgICAgICAvLyBtYWNPUyBzaWxpY29uIGhvbWVicmV3LCBvcGVuc3NsQDMgcGFja2FnZQogICAgICAgICAgICAnL29wdC9ob21lYnJldy9ldGMvb3BlbnNzbEAxLjEvY2VydC5wZW0nLAogICAgICAgICk7CiAgICAgICAgZm9yZWFjaCAoJG90aGVyTG9jYXRpb25zIGFzICRsb2NhdGlvbikgewogICAgICAgICAgICAkb3RoZXJMb2NhdGlvbnNbXSA9IFxkaXJuYW1lKCRsb2NhdGlvbik7CiAgICAgICAgfQogICAgICAgICRjYUJ1bmRsZVBhdGhzID0gXGFycmF5X21lcmdlKCRjYUJ1bmRsZVBhdGhzLCAkb3RoZXJMb2NhdGlvbnMpOwogICAgICAgIGZvcmVhY2ggKCRjYUJ1bmRsZVBhdGhzIGFzICRjYUJ1bmRsZSkgewogICAgICAgICAgICBpZiAoJGNhQnVuZGxlICYmIHNlbGY6OmNhRmlsZVVzYWJsZSgkY2FCdW5kbGUsICRsb2dnZXIpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjo6JGNhUGF0aCA9ICRjYUJ1bmRsZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGNhQnVuZGxlICYmIHNlbGY6OmNhRGlyVXNhYmxlKCRjYUJ1bmRsZSwgJGxvZ2dlcikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzZWxmOjokY2FQYXRoID0gJGNhQnVuZGxlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmOjokY2FQYXRoID0gc3RhdGljOjpnZXRCdW5kbGVkQ2FCdW5kbGVQYXRoKCk7CiAgICAgICAgLy8gQnVuZGxlZCBDQSBmaWxlLCBsYXN0IHJlc29ydAogICAgfQogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBidW5kbGVkIENBIGZpbGUKICAgICAqCiAgICAgKiBJbiBjYXNlIHlvdSBkb24ndCB3YW50IHRvIHRydXN0IHRoZSB1c2VyIG9yIHRoZSBzeXN0ZW0sIHlvdSBjYW4gdXNlIHRoaXMgZGlyZWN0bHkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBwYXRoIHRvIGEgQ0EgYnVuZGxlIGZpbGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRCdW5kbGVkQ2FCdW5kbGVQYXRoKCkKICAgIHsKICAgICAgICAkY2FCdW5kbGVGaWxlID0gX19ESVJfXyAuICcvLi4vcmVzL2NhY2VydC5wZW0nOwogICAgICAgIC8vIGNVUkwgZG9lcyBub3QgdW5kZXJzdGFuZCAncGhhcjovLycgcGF0aHMKICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvbXBvc2VyL2NhLWJ1bmRsZS9pc3N1ZXMvMTAKICAgICAgICBpZiAoMCA9PT0gXHN0cnBvcygkY2FCdW5kbGVGaWxlLCAncGhhcjovLycpKSB7CiAgICAgICAgICAgICR0ZW1wQ2FCdW5kbGVGaWxlID0gXHRlbXBuYW0oXHN5c19nZXRfdGVtcF9kaXIoKSwgJ29wZW5zc2wtY2EtYnVuZGxlLScpOwogICAgICAgICAgICBpZiAoXGZhbHNlID09PSAkdGVtcENhQnVuZGxlRmlsZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDb3VsZCBub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUgdG8gc3RvcmUgdGhlIGJ1bmRsZWQgQ0EgZmlsZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIFxmaWxlX3B1dF9jb250ZW50cygkdGVtcENhQnVuZGxlRmlsZSwgXGZpbGVfZ2V0X2NvbnRlbnRzKCRjYUJ1bmRsZUZpbGUpKTsKICAgICAgICAgICAgXHJlZ2lzdGVyX3NodXRkb3duX2Z1bmN0aW9uKGZ1bmN0aW9uICgpIHVzZSgkdGVtcENhQnVuZGxlRmlsZSkgewogICAgICAgICAgICAgICAgQFx1bmxpbmsoJHRlbXBDYUJ1bmRsZUZpbGUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgJGNhQnVuZGxlRmlsZSA9ICR0ZW1wQ2FCdW5kbGVGaWxlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGNhQnVuZGxlRmlsZTsKICAgIH0KICAgIC8qKgogICAgICogVmFsaWRhdGVzIGEgQ0EgZmlsZSB1c2luZyBvcGVuc2xfeDUwOV9wYXJzZSBvbmx5IGlmIGl0IGlzIHNhZmUgdG8gdXNlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAkZmlsZW5hbWUKICAgICAqIEBwYXJhbSBMb2dnZXJJbnRlcmZhY2UgJGxvZ2dlciAgIG9wdGlvbmFsIGxvZ2dlciBmb3IgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggQ0EgZmlsZXMgd2VyZSBsb2FkZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2YWxpZGF0ZUNhRmlsZSgkZmlsZW5hbWUsID9Mb2dnZXJJbnRlcmZhY2UgJGxvZ2dlciA9IG51bGwpCiAgICB7CiAgICAgICAgc3RhdGljICR3YXJuZWQgPSBcZmFsc2U7CiAgICAgICAgaWYgKGlzc2V0KHNlbGY6OiRjYUZpbGVWYWxpZGl0eVskZmlsZW5hbWVdKSkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGNhRmlsZVZhbGlkaXR5WyRmaWxlbmFtZV07CiAgICAgICAgfQogICAgICAgICRjb250ZW50cyA9IFxmaWxlX2dldF9jb250ZW50cygkZmlsZW5hbWUpOwogICAgICAgIGlmIChcaXNfc3RyaW5nKCRjb250ZW50cykgJiYgXHN0cmxlbigkY29udGVudHMpID4gMCkgewogICAgICAgICAgICAkY29udGVudHMgPSBccHJlZ19yZXBsYWNlKCIvXihcXC0rKD86QkVHSU58RU5EKSlcXHMrVFJVU1RFRFxccysoQ0VSVElGSUNBVEVcXC0rKVwkL20iLCAnJDEgJDInLCAkY29udGVudHMpOwogICAgICAgICAgICBpZiAobnVsbCA9PT0gJGNvbnRlbnRzKSB7CiAgICAgICAgICAgICAgICAvLyByZWdleCBleHRyYWN0aW9uIGZhaWxlZAogICAgICAgICAgICAgICAgJGlzVmFsaWQgPSBcZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkaXNWYWxpZCA9IChib29sKSBcb3BlbnNzbF94NTA5X3BhcnNlKCRjb250ZW50cyk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkaXNWYWxpZCA9IFxmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCRsb2dnZXIpIHsKICAgICAgICAgICAgJGxvZ2dlci0+ZGVidWcoJ0NoZWNrZWQgQ0EgZmlsZSAnIC4gXHJlYWxwYXRoKCRmaWxlbmFtZSkgLiAnOiAnIC4gKCRpc1ZhbGlkID8gJ3ZhbGlkJyA6ICdpbnZhbGlkJykpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6JGNhRmlsZVZhbGlkaXR5WyRmaWxlbmFtZV0gPSAkaXNWYWxpZDsKICAgIH0KICAgIC8qKgogICAgICogVGVzdCBpZiBpdCBpcyBzYWZlIHRvIHVzZSB0aGUgUEhQIGZ1bmN0aW9uIG9wZW5zc2xfeDUwOV9wYXJzZSgpLgogICAgICoKICAgICAqIFRoaXMgY2hlY2tzIGlmIE9wZW5TU0wgZXh0ZW5zaW9ucyBpcyB2dWxuZXJhYmxlIHRvIHJlbW90ZSBjb2RlIGV4ZWN1dGlvbgogICAgICogdmlhIHRoZSBleHBsb2l0IGRvY3VtZW50ZWQgYXMgQ1ZFLTIwMTMtNjQyMC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc09wZW5zc2xQYXJzZVNhZmUoKQogICAgewogICAgICAgIHJldHVybiBcdHJ1ZTsKICAgIH0KICAgIC8qKgogICAgICogUmVzZXRzIHRoZSBzdGF0aWMgY2FjaGVzCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNldCgpCiAgICB7CiAgICAgICAgc2VsZjo6JGNhRmlsZVZhbGlkaXR5ID0gYXJyYXkoKTsKICAgICAgICBzZWxmOjokY2FQYXRoID0gbnVsbDsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtICBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldEVudlZhcmlhYmxlKCRuYW1lKQogICAgewogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlskbmFtZV0pKSB7CiAgICAgICAgICAgIHJldHVybiAoc3RyaW5nKSAkX1NFUlZFUlskbmFtZV07CiAgICAgICAgfQogICAgICAgIGlmIChcUEhQX1NBUEkgPT09ICdjbGknICYmICgkdmFsdWUgPSBcZ2V0ZW52KCRuYW1lKSkgIT09IFxmYWxzZSAmJiAkdmFsdWUgIT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICR2YWx1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtICBzdHJpbmd8ZmFsc2UgJGNlcnRGaWxlCiAgICAgKiBAcGFyYW0gIExvZ2dlckludGVyZmFjZXxudWxsICRsb2dnZXIKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjYUZpbGVVc2FibGUoJGNlcnRGaWxlLCA/TG9nZ2VySW50ZXJmYWNlICRsb2dnZXIgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiAkY2VydEZpbGUgJiYgc2VsZjo6aXNGaWxlKCRjZXJ0RmlsZSwgJGxvZ2dlcikgJiYgc2VsZjo6aXNSZWFkYWJsZSgkY2VydEZpbGUsICRsb2dnZXIpICYmIHNlbGY6OnZhbGlkYXRlQ2FGaWxlKCRjZXJ0RmlsZSwgJGxvZ2dlcik7CiAgICB9CiAgICAvKioKICAgICAqIEBwYXJhbSAgc3RyaW5nfGZhbHNlICRjZXJ0RGlyCiAgICAgKiBAcGFyYW0gIExvZ2dlckludGVyZmFjZXxudWxsICRsb2dnZXIKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjYURpclVzYWJsZSgkY2VydERpciwgP0xvZ2dlckludGVyZmFjZSAkbG9nZ2VyID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gJGNlcnREaXIgJiYgc2VsZjo6aXNEaXIoJGNlcnREaXIsICRsb2dnZXIpICYmIHNlbGY6OmlzUmVhZGFibGUoJGNlcnREaXIsICRsb2dnZXIpICYmIHNlbGY6Omdsb2IoJGNlcnREaXIgLiAnLyonLCAkbG9nZ2VyKTsKICAgIH0KICAgIC8qKgogICAgICogQHBhcmFtICBzdHJpbmcgJGNlcnRGaWxlCiAgICAgKiBAcGFyYW0gIExvZ2dlckludGVyZmFjZXxudWxsICRsb2dnZXIKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpc0ZpbGUoJGNlcnRGaWxlLCA/TG9nZ2VySW50ZXJmYWNlICRsb2dnZXIgPSBudWxsKQogICAgewogICAgICAgICRpc0ZpbGUgPSBAXGlzX2ZpbGUoJGNlcnRGaWxlKTsKICAgICAgICBpZiAoISRpc0ZpbGUgJiYgJGxvZ2dlcikgewogICAgICAgICAgICAkbG9nZ2VyLT5kZWJ1Zyhcc3ByaW50ZignQ2hlY2tlZCBDQSBmaWxlICVzIGRvZXMgbm90IGV4aXN0IG9yIGl0IGlzIG5vdCBhIGZpbGUuJywgJGNlcnRGaWxlKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaXNGaWxlOwogICAgfQogICAgLyoqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkY2VydERpcgogICAgICogQHBhcmFtICBMb2dnZXJJbnRlcmZhY2V8bnVsbCAkbG9nZ2VyCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaXNEaXIoJGNlcnREaXIsID9Mb2dnZXJJbnRlcmZhY2UgJGxvZ2dlciA9IG51bGwpCiAgICB7CiAgICAgICAgJGlzRGlyID0gQFxpc19kaXIoJGNlcnREaXIpOwogICAgICAgIGlmICghJGlzRGlyICYmICRsb2dnZXIpIHsKICAgICAgICAgICAgJGxvZ2dlci0+ZGVidWcoXHNwcmludGYoJ0NoZWNrZWQgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0IG9yIGl0IGlzIG5vdCBhIGRpcmVjdG9yeS4nLCAkY2VydERpcikpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGlzRGlyOwogICAgfQogICAgLyoqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkY2VydEZpbGVPckRpcgogICAgICogQHBhcmFtICBMb2dnZXJJbnRlcmZhY2V8bnVsbCAkbG9nZ2VyCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaXNSZWFkYWJsZSgkY2VydEZpbGVPckRpciwgP0xvZ2dlckludGVyZmFjZSAkbG9nZ2VyID0gbnVsbCkKICAgIHsKICAgICAgICAkaXNSZWFkYWJsZSA9IEBcaXNfcmVhZGFibGUoJGNlcnRGaWxlT3JEaXIpOwogICAgICAgIGlmICghJGlzUmVhZGFibGUgJiYgJGxvZ2dlcikgewogICAgICAgICAgICAkbG9nZ2VyLT5kZWJ1Zyhcc3ByaW50ZignQ2hlY2tlZCBmaWxlIG9yIGRpcmVjdG9yeSAlcyBpcyBub3QgcmVhZGFibGUuJywgJGNlcnRGaWxlT3JEaXIpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRpc1JlYWRhYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkcGF0dGVybgogICAgICogQHBhcmFtICBMb2dnZXJJbnRlcmZhY2V8bnVsbCAkbG9nZ2VyCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2xvYigkcGF0dGVybiwgP0xvZ2dlckludGVyZmFjZSAkbG9nZ2VyID0gbnVsbCkKICAgIHsKICAgICAgICAkY2VydHMgPSBcZ2xvYigkcGF0dGVybik7CiAgICAgICAgaWYgKCRjZXJ0cyA9PT0gXGZhbHNlKSB7CiAgICAgICAgICAgIGlmICgkbG9nZ2VyKSB7CiAgICAgICAgICAgICAgICAkbG9nZ2VyLT5kZWJ1Zyhcc3ByaW50ZigiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGZpbmQgY2VydGlmaWNhdGVzIGZvciBwYXR0ZXJuOiAlcyIsICRwYXR0ZXJuKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFxmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKFxjb3VudCgkY2VydHMpID09PSAwKSB7CiAgICAgICAgICAgIGlmICgkbG9nZ2VyKSB7CiAgICAgICAgICAgICAgICAkbG9nZ2VyLT5kZWJ1Zyhcc3ByaW50ZigiTm8gQ0EgZmlsZXMgZm91bmQgZm9yIHBhdHRlcm46ICVzIiwgJHBhdHRlcm4pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gXGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gXHRydWU7CiAgICB9Cn0KPD9waHAKCi8qKgogKiBUaGUgU1ZNTW9kZWwgaXMgdGhlIGVuZCByZXN1bHQgb2YgdGhlIHRyYWluaW5nIHByb2Nlc3MuIEl0IGNhbiBiZSB1c2VkIHRvIGNsYXNzaWZ5IHByZXZpb3VzbHkgdW5zZWVuIGRhdGEuCiAqIEBzaW5jZSA3LjAKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vY2xhc3Muc3ZtbW9kZWwucGhwCiAqLwpjbGFzcyBTVk1Nb2RlbAp7CiAgICAvKiBNZXRob2RzICovCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbW9kZWwgaGFzIHByb2JhYmlsaXR5IGluZm9ybWF0aW9uCiAgICAgKgogICAgICogQHJldHVybiBib29sIFJldHVybiBhIGJvb2xlYW4gdmFsdWUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3N2bW1vZGVsLmNoZWNrcHJvYmFiaWxpdHltb2RlbC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoZWNrUHJvYmFiaWxpdHlNb2RlbCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgU1ZNTW9kZWwKICAgICAqCiAgICAgKiBCdWlsZCBhIG5ldyBTVk1Nb2RlbC4gTW9kZWxzIHdpbGwgdXN1YWxseSBiZSBjcmVhdGVkIGZyb20gdGhlIFNWTTo6dHJhaW4gZnVuY3Rpb24sIGJ1dCB0aGVuIHNhdmVkIG1vZGVscyBtYXkgYmUgcmVzdG9yZWQgZGlyZWN0bHkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZW5hbWUgZm9yIHRoZSBzYXZlZCBtb2RlbCBmaWxlIHRoaXMgbW9kZWwgc2hvdWxkIGxvYWQuCiAgICAgKiBAdGhyb3dzIFRocm93cyBTVk1FeGNlcHRpb24gb24gZXJyb3IKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3N2bW1vZGVsLmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkZmlsZW5hbWUgPSAnJykge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbGFiZWxzIHRoZSBtb2RlbCB3YXMgdHJhaW5lZCBvbgogICAgICoKICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBsYWJlbHMgdGhhdCB0aGUgbW9kZWwgd2FzIHRyYWluZWQgb24uIEZvciByZWdyZXNzaW9uIGFuZCBvbmUgY2xhc3MgbW9kZWxzIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkLgogICAgICogQHJldHVybiBhcnJheSBSZXR1cm4gYW4gYXJyYXkgb2YgbGFiZWxzCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9zdm1tb2RlbC5nZXRsYWJlbHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYWJlbHMoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjbGFzc2VzIHRoZSBtb2RlbCB3YXMgdHJhaW5lZCB3aXRoCiAgICAgKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNsYXNzZXMgdGhlIG1vZGVsIHdhcyB0cmFpbmVkIHdpdGgsIHdpbGwgcmV0dXJuIDIgZm9yIG9uZSBjbGFzcyBhbmQgcmVncmVzc2lvbiBtb2RlbHMuCiAgICAgKiBAcmV0dXJuIGludCBSZXR1cm4gYW4gaW50ZWdlciBudW1iZXIgb2YgY2xhc3NlcwogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vc3ZtbW9kZWwuZ2V0bnJjbGFzcy5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5yQ2xhc3MoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIFNWTSB0eXBlIHRoZSBtb2RlbCB3YXMgdHJhaW5lZCB3aXRoCiAgICAgKgogICAgICogUmV0dXJucyBhbiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgdHlwZSBvZiB0aGUgU1ZNIG1vZGVsIHVzZWQsIGUuZyBTVk06OkNfU1ZDLgogICAgICogQHJldHVybiBpbnQgUmV0dXJuIGFuIGludGVnZXIgU1ZNIHR5cGUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3N2bW1vZGVsLmdldHN2bXR5cGUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdm1UeXBlKCk6IGludCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBzaWdtYSB2YWx1ZSBmb3IgcmVncmVzc2lvbiB0eXBlcwogICAgICoKICAgICAqIEZvciByZWdyZXNzaW9uIG1vZGVscywgcmV0dXJucyBhIHNpZ21hIHZhbHVlLiBJZiB0aGVyZSBpcyBubyBwcm9iYWJpbGl0eSBpbmZvcm1hdGlvbiBvciB0aGUgbW9kZWwgaXMgbm90IFNWUiwgMCBpcyByZXR1cm5lZC4KICAgICAqIEByZXR1cm4gZmxvYXQgUmV0dXJucyBhIHNpZ21hIHZhbHVlCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9zdm1tb2RlbC5nZXRzdnJwcm9iYWJpbGl0eS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN2clByb2JhYmlsaXR5KCk6IGZsb2F0IHt9CgogICAgLyoqCiAgICAgKiBMb2FkIGEgc2F2ZWQgU1ZNIE1vZGVsCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZW5hbWUgb2YgdGhlIG1vZGVsLgogICAgICogQHJldHVybiBib29sIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBTVk1FeGNlcHRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3N2bW1vZGVsLmxvYWQucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkKHN0cmluZyAkZmlsZW5hbWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gY2xhc3MgcHJvYmFiaWxpdGllcyBmb3IgcHJldmlvdXMgdW5zZWVuIGRhdGEKICAgICAqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW4gYXJyYXkgb2YgZGF0YSBhbmQgYXR0ZW1wdHMgdG8gcHJlZGljdCB0aGUgY2xhc3MsIGFzIHdpdGggdGhlIHByZWRpY3QgZnVuY3Rpb24uIEFkZGl0aW9uYWxseSwgaG93ZXZlciwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IG9mIHByb2JhYmlsaXRpZXMsIG9uZSBwZXIgY2xhc3MgaW4gdGhlIG1vZGVsLCB3aGljaCByZXByZXNlbnQgdGhlIGVzdGltYXRlZCBjaGFuY2Ugb2YgdGhlIGRhdGEgc3VwcGxpZWQgYmVpbmcgYSBtZW1iZXIgb2YgdGhhdCBjbGFzcy4gUmVxdWlyZXMgdGhhdCB0aGUgbW9kZWwgdG8gYmUgdXNlZCBoYXMgYmVlbiB0cmFpbmVkIHdpdGggdGhlIHByb2JhYmlsaXR5IHBhcmFtZXRlciBzZXQgdG8gdHJ1ZS4KICAgICAqIEBwYXJhbSBhcnJheSAkZGF0YSBUaGUgYXJyYXkgdG8gYmUgY2xhc3NpZmllZC4gVGhpcyBzaG91bGQgYmUgYSBzZXJpZXMgb2Yga2V5ID0+IHZhbHVlIHBhaXJzIGluIGluY3JlYXNpbmcga2V5IG9yZGVyLCBidXQgbm90IG5lY2Vzc2FyaWx5IGNvbnRpbnVvdXMuCiAgICAgKiBAcmV0dXJuIGZsb2F0IHRoZSBwcmVkaWN0ZWQgdmFsdWUuIFRoaXMgd2lsbCBiZSBhIGNsYXNzIGxhYmVsIGluIHRoZSBjYXNlIG9mIGNsYXNzaWZpY2F0aW9uLCBhIHJlYWwgdmFsdWUgaW4gdGhlIGNhc2Ugb2YgcmVncmVzc2lvbi4gVGhyb3dzIFNWTUV4Y2VwdGlvbiBvbiBlcnJvcgogICAgICogQHRocm93cyBTVk1FeGNlcHRpb24gVGhyb3dzIFNWTUV4Y2VwdGlvbiBvbiBlcnJvcgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vc3ZtbW9kZWwucHJlZGljdC1wcm9iYWJpbGl0eS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZWRpY3RfcHJvYmFiaWxpdHkoYXJyYXkgJGRhdGEpOiBmbG9hdCB7fQoKICAgIC8qKgogICAgICogUHJlZGljdCBhIHZhbHVlIGZvciBwcmV2aW91c2x5IHVuc2VlbiBkYXRhCiAgICAgKgogICAgICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGFuIGFycmF5IG9mIGRhdGEgYW5kIGF0dGVtcHRzIHRvIHByZWRpY3QgdGhlIGNsYXNzIG9yIHJlZ3Jlc3Npb24gdmFsdWUgYmFzZWQgb24gdGhlIG1vZGVsIGV4dHJhY3RlZCBmcm9tIHByZXZpb3VzbHkgdHJhaW5lZCBkYXRhLgogICAgICogQHBhcmFtIGFycmF5ICRkYXRhIFRoZSBhcnJheSB0byBiZSBjbGFzc2lmaWVkLiBUaGlzIHNob3VsZCBiZSBhIHNlcmllcyBvZiBrZXkgPT4gdmFsdWUgcGFpcnMgaW4gaW5jcmVhc2luZyBrZXkgb3JkZXIsIGJ1dCBub3QgbmVjZXNzYXJpbHkgY29udGludW91cy4KICAgICAqIEByZXR1cm4gZmxvYXQgdGhlIHByZWRpY3RlZCB2YWx1ZS4gVGhpcyB3aWxsIGJlIGEgY2xhc3MgbGFiZWwgaW4gdGhlIGNhc2Ugb2YgY2xhc3NpZmljYXRpb24sIGEgcmVhbCB2YWx1ZSBpbiB0aGUgY2FzZSBvZiByZWdyZXNzaW9uLiBUaHJvd3MgU1ZNRXhjZXB0aW9uIG9uIGVycm9yCiAgICAgKiBAdGhyb3dzIFNWTUV4Y2VwdGlvbiBUaHJvd3MgU1ZNRXhjZXB0aW9uIG9uIGVycm9yCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9zdm1tb2RlbC5wcmVkaWN0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJlZGljdChhcnJheSAkZGF0YSk6IGZsb2F0IHt9CgogICAgLyoqCiAgICAgKiBTYXZlIGEgbW9kZWwgdG8gYSBmaWxlLCBmb3IgbGF0ZXIgdXNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZSB0byBzYXZlIHRoZSBtb2RlbCB0by4KICAgICAqIEByZXR1cm4gYm9vbCBUaHJvd3MgU1ZNRXhjZXB0aW9uIG9uIGVycm9yLiBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgU1ZNRXhjZXB0aW9uIFRocm93cyBTVk1FeGNlcHRpb24gb24gZXJyb3IKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3N2bW1vZGVsLnNhdmUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzYXZlKHN0cmluZyAkZmlsZW5hbWUpOiBib29sIHt9Cn0KPD9waHAKLyoqCiAqIFN1cHBvcnQgVmVjdG9yIE1hY2hpbmUgTGlicmFyeQoKICogTGliU1ZNIGlzIGFuIGVmZmljaWVudCBzb2x2ZXIgZm9yIFNWTSBjbGFzc2lmaWNhdGlvbiBhbmQgcmVncmVzc2lvbiBwcm9ibGVtcy4gVGhlIHN2bSBleHRlbnNpb24gd3JhcHMgdGhpcyBpbiBhIFBIUCBpbnRlcmZhY2UgZm9yIGVhc3kgdXNlIGluIFBIUCBzY3JpcHRzLgogKiBAc2luY2UgNy4wCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnN2bS5waHAKICovCmNsYXNzIFNWTQp7CiAgICAvKiBDb25zdGFudHMgKi8KICAgIC8qKgogICAgICogVGhlIGJhc2ljIENfU1ZDIFNWTSB0eXBlLiBUaGUgZGVmYXVsdCwgYW5kIGEgZ29vZCBzdGFydGluZyBwb2ludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ19TVkMgPSAwOwoKICAgIC8qKgogICAgICogTlVfU1ZDIHR5cGUgdXNlcyBhIGRpZmZlcmVudCwgbW9yZSBmbGV4aWJsZSwgZXJyb3Igd2VpZ2h0aW5nCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBOVV9TVkMgPSAxOwoKICAgIC8qKgogICAgICogT25lIGNsYXNzIFNWTSB0eXBlLiBUcmFpbiBqdXN0IG9uIGEgc2luZ2xlIGNsYXNzLCB1c2luZyBvdXRsaWVycyBhcyBuZWdhdGl2ZSBleGFtcGxlcwogICAgICovCiAgICBwdWJsaWMgY29uc3QgT05FX0NMQVNTID0gMjsKCiAgICAvKioKICAgICAqIEEgU1ZNIHR5cGUgZm9yIHJlZ3Jlc3Npb24gKHByZWRpY3RpbmcgYSB2YWx1ZSByYXRoZXIgdGhhbiBqdXN0IGEgY2xhc3MpCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUFNJTE9OX1NWUiA9IDM7CgogICAgLyoqCiAgICAgKiBBIE5VIHN0eWxlIFNWTSByZWdyZXNzaW9uIHR5cGUKICAgICAqLwogICAgcHVibGljIGNvbnN0IE5VX1NWUiA9IDQ7CgogICAgLyoqCiAgICAgKiBBIHZlcnkgc2ltcGxlIGtlcm5lbCwgY2FuIHdvcmsgd2VsbCBvbiBsYXJnZSBkb2N1bWVudCBjbGFzc2lmaWNhdGlvbiBwcm9ibGVtcwogICAgICovCiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX0xJTkVBUiA9IDA7CgogICAgLyoqCiAgICAgKiBBIHBvbHlub21pYWwga2VybmVsCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBLRVJORUxfUE9MWSA9IDE7CgogICAgLyoqCiAgICAgKiBUaGUgY29tbW9uIEdhdXNzaWFuIFJCRCBrZXJuZWwuIEhhbmRsZXMgbm9uLWxpbmVhciBwcm9ibGVtcyB3ZWxsIGFuZCBpcyBhIGdvb2QgZGVmYXVsdCBmb3IgY2xhc3NpZmljYXRpb24KICAgICAqLwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9SQkYgPSAyOwoKICAgIC8qKgogICAgICogQSBrZXJuZWwgYmFzZWQgb24gdGhlIHNpZ21vaWQgZnVuY3Rpb24uIFVzaW5nIHRoaXMgbWFrZXMgdGhlIFNWTSB2ZXJ5IHNpbWlsYXIgdG8gYSB0d28gbGF5ZXIgc2lnbW9pZCBiYXNlZCBuZXVyYWwgbmV0d29yawogICAgICovCiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX1NJR01PSUQgPSAzOwoKICAgIC8qKgogICAgICogQSBwcmVjb21wdXRlZCBrZXJuZWwgLSBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBLRVJORUxfUFJFQ09NUFVURUQgPSA0OwoKICAgIC8qKgogICAgICogVGhlIG9wdGlvbnMga2V5IGZvciB0aGUgU1ZNIHR5cGUKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9UWVBFID0gMTAxOwoKICAgIC8qKgogICAgICogVGhlIG9wdGlvbnMga2V5IGZvciB0aGUga2VybmVsIHR5cGUKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9LRVJORUxfVFlQRSA9IDEwMjsKICAgIHB1YmxpYyBjb25zdCBPUFRfREVHUkVFID0gMTAzOwoKICAgIC8qKgogICAgICogVHJhaW5pbmcgcGFyYW1ldGVyLCBib29sZWFuLCBmb3Igd2hldGhlciB0byB1c2UgdGhlIHNocmlua2luZyBoZXVyaXN0aWNzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfU0hSSU5LSU5HID0gMTA0OwoKICAgIC8qKgogICAgICogVHJhaW5pbmcgcGFyYW1ldGVyLCBib29sZWFuLCBmb3Igd2hldGhlciB0byBjb2xsZWN0IGFuZCB1c2UgcHJvYmFiaWxpdHkgZXN0aW1hdGVzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfUFJPUEFCSUxJVFkgPSAxMDU7CgogICAgLyoqCiAgICAgKiBBbGdvcml0aG0gcGFyYW1ldGVyIGZvciBQb2x5LCBSQkYgYW5kIFNpZ21vaWQga2VybmVsIHR5cGVzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX0dBTU1BID0gMjAxOwoKICAgIC8qKgogICAgICogVGhlIG9wdGlvbiBrZXkgZm9yIHRoZSBudSBwYXJhbWV0ZXIsIG9ubHkgdXNlZCBpbiB0aGUgTlVfIFNWTSB0eXBlcwogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX05VID0gMjAyOwoKICAgIC8qKgogICAgICogVGhlIG9wdGlvbiBrZXkgZm9yIHRoZSBFcHNpbG9uIHBhcmFtZXRlciwgdXNlZCBpbiBlcHNpbG9uIHJlZ3Jlc3Npb24KICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9FUFMgPSAyMDM7CgogICAgLyoqCiAgICAgKiBUcmFpbmluZyBwYXJhbWV0ZXIgdXNlZCBieSBFcGlzaWxvbiBTVlIgcmVncmVzc2lvbgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX1AgPSAyMDQ7CgogICAgLyoqCiAgICAgKiBBbGdvcml0aG0gcGFyYW1ldGVyIGZvciBwb2x5IGFuZCBzaWdtb2lkIGtlcm5lbHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9DT0VGX1pFUk8gPSAyMDU7CgogICAgLyoqCiAgICAgKiBUaGUgb3B0aW9uIGZvciB0aGUgY29zdCBwYXJhbWV0ZXIgdGhhdCBjb250cm9scyB0cmFkZW9mZiBiZXR3ZWVuIGVycm9ycyBhbmQgZ2VuZXJhbGl0eSAtIGVmZmVjdGl2ZWx5IHRoZSBwZW5hbHR5IGZvciBtaXNjbGFzc2lmeWluZyB0cmFpbmluZyBleGFtcGxlcy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9DID0gMjA2OwoKICAgIC8qKgogICAgICogTWVtb3J5IGNhY2hlIHNpemUsIGluIE1CCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfQ0FDSEVfU0laRSA9IDIwNzsKCiAgICAvKiBNZXRob2RzICovCiAgICAvKioKICAgICAqIENvbnN0cnVjdCBhIG5ldyBTVk0gb2JqZWN0CiAgICAgKgogICAgICogQ29uc3RydWN0cyBhIG5ldyBTVk0gb2JqZWN0IHJlYWR5IHRvIGFjY2VwdCB0cmFpbmluZyBkYXRhLgogICAgICogQHRocm93cyBTVk1FeGNlcHRpb24gVGhyb3dzIFNWTUV4Y2VwdGlvbiBpZiB0aGUgbGlic3ZtIGxpYnJhcnkgY291bGQgbm90IGJlIGxvYWRlZAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vc3ZtLmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIFRlc3QgdHJhaW5pbmcgcGFyYW1zIG9uIHN1YnNldHMgb2YgdGhlIHRyYWluaW5nIGRhdGEKICAgICAqCiAgICAgKiBDcm9zc3ZhbGlkYXRlIGNhbiBiZSB1c2VkIHRvIHRlc3QgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldCBvbiBhIHN1YnNldCBvZiB0aGUgdHJhaW5pbmcgZGF0YS4gR2l2ZW4gYSBwcm9ibGVtIHNldCBhbmQgYSBuICJmb2xkcyIsIGl0IHNlcGFyYXRlcyB0aGUgcHJvYmxlbSBzZXQgaW50byBuIHN1YnNldHMsIGFuZCB0aGUgcmVwZWF0ZWRseSB0cmFpbnMgb24gb25lIHN1YnNldCBhbmQgdGVzdHMgb24gYW5vdGhlci4gV2hpbGUgdGhlIGFjY3VyYWN5IHdpbGwgZ2VuZXJhbGx5IGJlIGxvd2VyIHRoYW4gYSBTVk0gdHJhaW5lZCBvbiB0aGUgZW50ZXIgZGF0YSBzZXQsIHRoZSBhY2N1cmFjeSBzY29yZSByZXR1cm5lZCBzaG91bGQgYmUgcmVsYXRpdmVseSB1c2VmdWwsIHNvIGl0IGNhbiBiZSB1c2VkIHRvIHRlc3QgZGlmZmVyZW50IHRyYWluaW5nIHBhcmFtZXRlcnMuCiAgICAgKiBAcGFyYW0gYXJyYXkgJHByb2JsZW0gVGhlIHByb2JsZW0gZGF0YS4gVGhpcyBjYW4gZWl0aGVyIGJlIGluIHRoZSBmb3JtIG9mIGFuIGFycmF5LCB0aGUgVVJMIG9mIGFuIFNWTUxpZ2h0IGZvcm1hdHRlZCBmaWxlLCBvciBhIHN0cmVhbSB0byBhbiBvcGVuZWQgU1ZNTGlnaHQgZm9ybWF0dGVkIGRhdGFzb3VyY2UuCiAgICAgKiBAcGFyYW0gaW50ICRudW1iZXJfb2ZfZm9sZHMgVGhlIG51bWJlciBvZiBzZXRzIHRoZSBkYXRhIHNob3VsZCBiZSBkaXZpZGVkIGludG8gYW5kIGNyb3NzIHRlc3RlZC4gQSBoaWdoZXIgbnVtYmVyIG1lYW5zIHNtYWxsZXIgdHJhaW5pbmcgc2V0cyBhbmQgbGVzcyByZWxpYWJpbGl0eS4gNSBpcyBhIGdvb2QgbnVtYmVyIHRvIHN0YXJ0IHdpdGguCiAgICAgKiBAcmV0dXJuIGZsb2F0IFRoZSBjb3JyZWN0IHBlcmNlbnRhZ2UsIGV4cHJlc3NlZCBhcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBmcm9tIDAtMS4gSW4gdGhlIGNhc2Ugb2YgTlVfU1ZDIG9yIEVQU0lMT05fU1ZSIGtlcm5lbHMgdGhlIG1lYW4gc3F1YXJlZCBlcnJvciB3aWxsIHJldHVybmVkIGluc3RlYWQuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9zdm0uY3Jvc3N2YWxpZGF0ZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyb3NzdmFsaWRhdGUoYXJyYXkgJHByb2JsZW0sIGludCAkbnVtYmVyX29mX2ZvbGRzKTogZmxvYXQge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgY3VycmVudCB0cmFpbmluZyBwYXJhbWV0ZXJzCiAgICAgKgogICAgICogUmV0cmlldmUgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgdHJhaW5pbmcgcGFyYW1ldGVycy4gVGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBrZXllZCBvbiB0aGUgcHJlZGVmaW5lZCBTVk0gY29uc3RhbnRzLgogICAgICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9zdm0uZ2V0b3B0aW9ucy5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE9wdGlvbnMoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIFNldCB0cmFpbmluZyBwYXJhbWV0ZXJzCiAgICAgKgogICAgICogU2V0IG9uZSBvciBtb3JlIHRyYWluaW5nIHBhcmFtZXRlcnMuCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBBbiBhcnJheSBvZiB0cmFpbmluZyBwYXJhbWV0ZXJzLCBrZXllZCBvbiB0aGUgU1ZNIGNvbnN0YW50cy4KICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLCB0aHJvd3MgU1ZNRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHRocm93cyBTVk1FeGNlcHRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3N2bS5zZXRvcHRpb25zLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9ucyhhcnJheSAkcGFyYW1zKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgU1ZNTW9kZWwgYmFzZWQgb24gdHJhaW5pbmcgZGF0YQogICAgICoKICAgICAqIFRyYWluIGEgc3VwcG9ydCB2ZWN0b3IgbWFjaGluZSBiYXNlZCBvbiB0aGUgc3VwcGxpZWQgdHJhaW5pbmcgZGF0YS4KICAgICAqIEBwYXJhbSBhcnJheSAkcHJvYmxlbSBUaGUgcHJvYmxlbSBjYW4gYmUgcHJvdmlkZWQgaW4gdGhyZWUgZGlmZmVyZW50IHdheXMuIEFuIGFycmF5LCB3aGVyZSB0aGUgZGF0YSBzaG91bGQgc3RhcnQgd2l0aCB0aGUgY2xhc3MgbGFiZWwgKHVzdWFsbHkgMSBvciAtMSkgdGhlbiBmb2xsb3dlZCBieSBhIHNwYXJzZSBkYXRhIHNldCBvZiBkaW1lbnNpb24gPT4gZGF0YSBwYWlycy4gQSBVUkwgdG8gYSBmaWxlIGNvbnRhaW5pbmcgYSBTVk0gTGlnaHQgZm9ybWF0dGVkIHByb2JsZW0sIHdpdGggdGhlIGVhY2ggbGluZSBiZWluZyBhIG5ldyB0cmFpbmluZyBleGFtcGxlLCB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lIGNvbnRhaW5pbmcgdGhlIGNsYXNzICgxLCAtMSkgdGhlbiBhIHNlcmllcyBvZiB0YWIgc2VwYXJhdGVkIGRhdGEgdmFsdWVzIHNob3dzIGFzIGtleTp2YWx1ZS4gQSBvcGVuZWQgc3RyZWFtIHBvaW50aW5nIHRvIGEgZGF0YSBzb3VyY2UgZm9ybWF0dGVkIGFzIGluIHRoZSBmaWxlIGFib3ZlLgogICAgICogQHBhcmFtIGFycmF5fG51bGwgJHdlaWdodHMgV2VpZ2h0cyBhcmUgYW4gb3B0aW9uYWwgc2V0IG9mIHdlaWdodGluZyBwYXJhbWV0ZXJzIGZvciB0aGUgZGlmZmVyZW50IGNsYXNzZXMsIHRvIGhlbHAgYWNjb3VudCBmb3IgdW5iYWxhbmNlZCB0cmFpbmluZyBzZXRzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGNsYXNzZXMgd2VyZSAxIGFuZCAtMSwgYW5kIC0xIGhhZCBzaWduaWZpY2FudGx5IG1vcmUgZXhhbXBsZSB0aGFuIG9uZSwgdGhlIHdlaWdodCBmb3IgLTEgY291bGQgYmUgMC41LiBXZWlnaHRzIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgMC0xLgogICAgICogQHJldHVybiBTVk1Nb2RlbCBSZXR1cm5zIGFuIFNWTU1vZGVsIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2xhc3NpZnkgcHJldmlvdXNseSB1bnNlZW4gZGF0YS4gVGhyb3dzIFNWTUV4Y2VwdGlvbiBvbiBlcnJvcgogICAgICogQHRocm93cyBTTVZFeGNlcHRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3N2bS50cmFpbi5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyYWluKGFycmF5ICRwcm9ibGVtLCBhcnJheSAkd2VpZ2h0cyA9IG51bGwpOiBTVk1Nb2RlbCB7fQp9Cjw/cGhwCi8qKgogKiBTdHVicyBmb3IgQU1RUAogKiBodHRwczovL3BlY2wucGhwLm5ldC9wYWNrYWdlL2FtcXAKICogaHR0cHM6Ly9naXRodWIuY29tL3BocC1hbXFwL3BocC1hbXFwCiAqLwoKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxEZXByZWNhdGVkOwoKLyoqCiAqIFBhc3NpbmcgaW4gdGhpcyBjb25zdGFudCBhcyBhIGZsYWcgd2lsbCBmb3JjZWZ1bGx5IGRpc2FibGUgYWxsIG90aGVyIGZsYWdzLgogKiBVc2UgdGhpcyBpZiB5b3Ugd2FudCB0byB0ZW1wb3JhcmlseSBkaXNhYmxlIHRoZSBhbXFwLmF1dG9fYWNrIGluaSBzZXR0aW5nLgogKi8KY29uc3QgQU1RUF9OT1BBUkFNID0gMDsKCi8qKgogKiBQYXNzaW5nIGluIHRoaXMgY29uc3RhbnQgYXMgYSBmbGFnIHRvIHByb3BlciBtZXRob2RzIHdpbGwgZm9yY2VmdWxseSBpZ25vcmUgYWxsIG90aGVyIGZsYWdzLgogKiBEbyBub3Qgc2VuZCBiYXNpYy5jb25zdW1lIHJlcXVlc3QgZHVyaW5nIEFNUVBRdWV1ZTo6Y29uc3VtZSgpLiBVc2UgdGhpcyBpZiB5b3Ugd2FudCB0byBydW4gY2FsbGJhY2sgb24gdG9wIG9mIHByZXZpb3VzbHkKICogZGVjbGFyZWQgY29uc3VtZXJzLgogKi8KY29uc3QgQU1RUF9KVVNUX0NPTlNVTUUgPSAxOwoKLyoqCiAqIER1cmFibGUgZXhjaGFuZ2VzIGFuZCBxdWV1ZXMgd2lsbCBzdXJ2aXZlIGEgYnJva2VyIHJlc3RhcnQsIGNvbXBsZXRlIHdpdGggYWxsIG9mIHRoZWlyIGRhdGEuCiAqLwpjb25zdCBBTVFQX0RVUkFCTEUgPSAyOwoKLyoqCiAqIFBhc3NpdmUgZXhjaGFuZ2VzIGFuZCBxdWV1ZXMgd2lsbCBub3QgYmUgcmVkZWNsYXJlZCwgYnV0IHRoZSBicm9rZXIgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgZXhjaGFuZ2Ugb3IgcXVldWUgZG9lcyBub3QgZXhpc3QuCiAqLwpjb25zdCBBTVFQX1BBU1NJVkUgPSA0OwoKLyoqCiAqIFZhbGlkIGZvciBxdWV1ZXMgb25seSwgdGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IG9ubHkgb25lIGNsaWVudCBjYW4gYmUgbGlzdGVuaW5nIHRvIGFuZCBjb25zdW1pbmcgZnJvbSB0aGlzIHF1ZXVlLgogKi8KY29uc3QgQU1RUF9FWENMVVNJVkUgPSA4OwoKLyoqCiAqIEZvciBleGNoYW5nZXMsIHRoZSBhdXRvIGRlbGV0ZSBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBleGNoYW5nZSB3aWxsIGJlIGRlbGV0ZWQgYXMgc29vbiBhcyBubyBtb3JlIHF1ZXVlcyBhcmUgYm91bmQKICogdG8gaXQuIElmIG5vIHF1ZXVlcyB3ZXJlIGV2ZXIgYm91bmQgdGhlIGV4Y2hhbmdlLCB0aGUgZXhjaGFuZ2Ugd2lsbCBuZXZlciBiZSBkZWxldGVkLiBGb3IgcXVldWVzLCB0aGUgYXV0byBkZWxldGUKICogZmxhZyBpbmRpY2F0ZXMgdGhhdCB0aGUgcXVldWUgd2lsbCBiZSBkZWxldGVkIGFzIHNvb24gYXMgdGhlcmUgYXJlIG5vIG1vcmUgbGlzdGVuZXJzIHN1YnNjcmliZWQgdG8gaXQuIElmIG5vCiAqIHN1YnNjcmlwdGlvbiBoYXMgZXZlciBiZWVuIGFjdGl2ZSwgdGhlIHF1ZXVlIHdpbGwgbmV2ZXIgYmUgZGVsZXRlZC4gTm90ZTogRXhjbHVzaXZlIHF1ZXVlcyB3aWxsIGFsd2F5cyBiZQogKiBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgd2l0aCB0aGUgY2xpZW50IGRpc2Nvbm5lY3RzLgogKi8KY29uc3QgQU1RUF9BVVRPREVMRVRFID0gMTY7CgovKioKICogQ2xpZW50cyBhcmUgbm90IGFsbG93ZWQgdG8gbWFrZSBzcGVjaWZpYyBxdWV1ZSBiaW5kaW5ncyB0byBleGNoYW5nZXMgZGVmaW5lZCB3aXRoIHRoaXMgZmxhZy4KICovCmNvbnN0IEFNUVBfSU5URVJOQUwgPSAzMjsKCi8qKgogKiBXaGVuIHBhc3NlZCB0byB0aGUgY29uc3VtZSBtZXRob2QgZm9yIGEgY2x1c3RlcmVkIGVudmlyb25tZW50LCBkbyBub3QgY29uc3VtZSBmcm9tIHRoZSBsb2NhbCBub2RlLgogKi8KY29uc3QgQU1RUF9OT0xPQ0FMID0gNjQ7CgovKioKICogV2hlbiBwYXNzZWQgdG8gdGhlIHtAbGluayBBTVFQUXVldWU6OmdldCgpfSBhbmQge0BsaW5rIEFNUVBRdWV1ZTo6Y29uc3VtZSgpfSBtZXRob2RzIGFzIGEgZmxhZywKICogdGhlIG1lc3NhZ2VzIHdpbGwgYmUgaW1tZWRpYXRlbHkgbWFya2VkIGFzIGFja25vd2xlZGdlZCBieSB0aGUgc2VydmVyIHVwb24gZGVsaXZlcnkuCiAqLwpjb25zdCBBTVFQX0FVVE9BQ0sgPSAxMjg7CgovKioKICogUGFzc2VkIG9uIHF1ZXVlIGNyZWF0aW9uLCB0aGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIHF1ZXVlIHNob3VsZCBiZSBkZWxldGVkIGlmIGl0IGJlY29tZXMgZW1wdHkuCiAqLwpjb25zdCBBTVFQX0lGRU1QVFkgPSAyNTY7CgovKioKICogUGFzc2VkIG9uIHF1ZXVlIG9yIGV4Y2hhbmdlIGNyZWF0aW9uLCB0aGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIHF1ZXVlIG9yIGV4Y2hhbmdlIHNob3VsZCBiZQogKiBkZWxldGVkIHdoZW4gbm8gY2xpZW50cyBhcmUgY29ubmVjdGVkIHRvIHRoZSBnaXZlbiBxdWV1ZSBvciBleGNoYW5nZS4KICovCmNvbnN0IEFNUVBfSUZVTlVTRUQgPSA1MTI7CgovKioKICogV2hlbiBwdWJsaXNoaW5nIGEgbWVzc2FnZSwgdGhlIG1lc3NhZ2UgbXVzdCBiZSByb3V0ZWQgdG8gYSB2YWxpZCBxdWV1ZS4gSWYgaXQgaXMgbm90LCBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVkLgogKi8KY29uc3QgQU1RUF9NQU5EQVRPUlkgPSAxMDI0OwoKLyoqCiAqIFdoZW4gcHVibGlzaGluZyBhIG1lc3NhZ2UsIG1hcmsgdGhpcyBtZXNzYWdlIGZvciBpbW1lZGlhdGUgcHJvY2Vzc2luZyBieSB0aGUgYnJva2VyLiAoSGlnaCBwcmlvcml0eSBtZXNzYWdlLikKICovCmNvbnN0IEFNUVBfSU1NRURJQVRFID0gMjA0ODsKCi8qKgogKiBJZiBzZXQgZHVyaW5nIGEgY2FsbCB0byB7QGxpbmsgQU1RUFF1ZXVlOjphY2soKX0sIHRoZSBkZWxpdmVyeSB0YWcgaXMgdHJlYXRlZCBhcyAidXAgdG8gYW5kIGluY2x1ZGluZyIsIHNvIHRoYXQgbXVsdGlwbGUKICogbWVzc2FnZXMgY2FuIGJlIGFja25vd2xlZGdlZCB3aXRoIGEgc2luZ2xlIG1ldGhvZC4gSWYgc2V0IHRvIHplcm8sIHRoZSBkZWxpdmVyeSB0YWcgcmVmZXJzIHRvIGEgc2luZ2xlIG1lc3NhZ2UuCiAqIElmIHRoZSBBTVFQX01VTFRJUExFIGZsYWcgaXMgc2V0LCBhbmQgdGhlIGRlbGl2ZXJ5IHRhZyBpcyB6ZXJvLCB0aGlzIGluZGljYXRlcyBhY2tub3dsZWRnZW1lbnQgb2YgYWxsIG91dHN0YW5kaW5nCiAqIG1lc3NhZ2VzLgogKi8KY29uc3QgQU1RUF9NVUxUSVBMRSA9IDQwOTY7CgovKioKICogSWYgc2V0IGR1cmluZyBhIGNhbGwgdG8ge0BsaW5rIEFNUVBFeGNoYW5nZTo6YmluZCgpfSwgdGhlIHNlcnZlciB3aWxsIG5vdCByZXNwb25kIHRvIHRoZSBtZXRob2QuVGhlIGNsaWVudCBzaG91bGQgbm90IHdhaXQKICogZm9yIGEgcmVwbHkgbWV0aG9kLiBJZiB0aGUgc2VydmVyIGNvdWxkIG5vdCBjb21wbGV0ZSB0aGUgbWV0aG9kIGl0IHdpbGwgcmFpc2UgYSBjaGFubmVsIG9yIGNvbm5lY3Rpb24gZXhjZXB0aW9uLgogKi8KY29uc3QgQU1RUF9OT1dBSVQgPSA4MTkyOwoKLyoqCiAqIElmIHNldCBkdXJpbmcgYSBjYWxsIHRvIHtAbGluayBBTVFQUXVldWU6Om5hY2soKX0sIHRoZSBtZXNzYWdlIHdpbGwgYmUgcGxhY2VkIGJhY2sgdG8gdGhlIHF1ZXVlLgogKi8KY29uc3QgQU1RUF9SRVFVRVVFID0gMTYzODQ7CgovKioKICogQSBkaXJlY3QgZXhjaGFuZ2UgdHlwZS4KICovCmNvbnN0IEFNUVBfRVhfVFlQRV9ESVJFQ1QgPSAnZGlyZWN0JzsKCi8qKgogKiBBIGZhbm91dCBleGNoYW5nZSB0eXBlLgogKi8KY29uc3QgQU1RUF9FWF9UWVBFX0ZBTk9VVCA9ICdmYW5vdXQnOwoKLyoqCiAqIEEgdG9waWMgZXhjaGFuZ2UgdHlwZS4KICovCmNvbnN0IEFNUVBfRVhfVFlQRV9UT1BJQyA9ICd0b3BpYyc7CgovKioKICogQSBoZWFkZXIgZXhjaGFuZ2UgdHlwZS4KICovCmNvbnN0IEFNUVBfRVhfVFlQRV9IRUFERVJTID0gJ2hlYWRlcnMnOwoKY29uc3QgQU1RUF9PU19TT0NLRVRfVElNRU9VVF9FUlJOTyA9IDUzNjg3MDk0NzsKCmNvbnN0IFBIUF9BTVFQX01BWF9DSEFOTkVMUyA9IDI1NjsKCmNvbnN0IEFNUVBfU0FTTF9NRVRIT0RfUExBSU4gPSAwOwoKY29uc3QgQU1RUF9TQVNMX01FVEhPRF9FWFRFUk5BTCA9IDE7CgovKioKICogRGVmYXVsdCBkZWxpdmVyeSBtb2RlLCBrZWVwcyB0aGUgbWVzc2FnZSBpbiBtZW1vcnkgd2hlbiB0aGUgbWVzc2FnZSBpcyBwbGFjZWQgaW4gYSBxdWV1ZS4KICovCmNvbnN0IEFNUVBfREVMSVZFUllfTU9ERV9UUkFOU0lFTlQgPSAxOwoKLyoqCiAqIFdyaXRlcyB0aGUgbWVzc2FnZSB0byB0aGUgZGlzayB3aGVuIHRoZSBtZXNzYWdlIGlzIHBsYWNlZCBpbiBhIGR1cmFibGUgcXVldWUuCiAqLwpjb25zdCBBTVFQX0RFTElWRVJZX01PREVfUEVSU0lTVEVOVCA9IDI7CgovKioKICogRXh0ZW5zaW9uIHZlcnNpb24gc3RyaW5nCiAqLwpjb25zdCBBTVFQX0VYVEVOU0lPTl9WRVJTSU9OID0gJzEuMS4xMmFscGhhMyc7CgovKioKICogRXh0ZW5zaW9uIG1ham9yIHZlcnNpb24KICovCmNvbnN0IEFNUVBfRVhURU5TSU9OX1ZFUlNJT05fTUFKT1IgPSAwOwoKLyoqCiAqIEV4dGVuc2lvbiBtaW5vciB2ZXJzaW9uCiAqLwpjb25zdCBBTVFQX0VYVEVOU0lPTl9WRVJTSU9OX01JTk9SID0gMTsKCi8qKgogKiBFeHRlbnNpb24gcGF0Y2ggdmVyc2lvbgogKi8KY29uc3QgQU1RUF9FWFRFTlNJT05fVkVSU0lPTl9QQVRDSCA9IDEyOwoKLyoqCiAqIEV4dGVuc2lvbiBleHRyYSB2ZXJzaW9uIHN1ZmZpeAogKi8KY29uc3QgQU1RUF9FWFRFTlNJT05fVkVSU0lPTl9FWFRSQSA9ICdhbHBoYTMnOwoKLyoqCiAqIEV4dGVuc2lvbiB2ZXJzaW9uIElECiAqLwpjb25zdCBBTVFQX0VYVEVOU0lPTl9WRVJTSU9OX0lEID0gJzEwMTEyJzsKCi8qKgogKiBzdHViIGNsYXNzIHJlcHJlc2VudGluZyBBTVFQQmFzaWNQcm9wZXJ0aWVzIGZyb20gcGVjbC1hbXFwCiAqLwpjbGFzcyBBTVFQQmFzaWNQcm9wZXJ0aWVzCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICA/c3RyaW5nICRjb250ZW50VHlwZSA9IG51bGwsCiAgICAgICAgP3N0cmluZyAkY29udGVudEVuY29kaW5nID0gbnVsbCwKICAgICAgICBhcnJheSAkaGVhZGVycyA9IFtdLAogICAgICAgIGludCAkZGVsaXZlcnlNb2RlID0gQU1RUF9ERUxJVkVSWV9NT0RFX1RSQU5TSUVOVCwKICAgICAgICBpbnQgJHByaW9yaXR5ID0gMCwKICAgICAgICA/c3RyaW5nICRjb3JyZWxhdGlvbklkID0gbnVsbCwKICAgICAgICA/c3RyaW5nICRyZXBseVRvID0gbnVsbCwKICAgICAgICA/c3RyaW5nICRleHBpcmF0aW9uID0gbnVsbCwKICAgICAgICA/c3RyaW5nICRtZXNzYWdlSWQgPSBudWxsLAogICAgICAgID9pbnQgJHRpbWVzdGFtcCA9IG51bGwsCiAgICAgICAgP3N0cmluZyAkdHlwZSA9IG51bGwsCiAgICAgICAgP3N0cmluZyAkdXNlcklkID0gbnVsbCwKICAgICAgICA/c3RyaW5nICRhcHBJZCA9IG51bGwsCiAgICAgICAgP3N0cmluZyAkY2x1c3RlcklkID0gbnVsbAogICAgKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBtZXNzYWdlIGNvbnRlbnQgdHlwZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBjb250ZW50IHR5cGUgb2YgdGhlIG1lc3NhZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50VHlwZSgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGNvbnRlbnQgZW5jb2Rpbmcgb2YgdGhlIG1lc3NhZ2UuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgY29udGVudCBlbmNvZGluZyBvZiB0aGUgbWVzc2FnZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnRFbmNvZGluZygpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGhlYWRlcnMgb2YgdGhlIG1lc3NhZ2UuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBBbiBhcnJheSBvZiBrZXkgdmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVycygpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGRlbGl2ZXJ5IG1vZGUgb2YgdGhlIG1lc3NhZ2UuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIGRlbGl2ZXJ5IG1vZGUgb2YgdGhlIG1lc3NhZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZWxpdmVyeU1vZGUoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBwcmlvcml0eSBvZiB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBUaGUgbWVzc2FnZSBwcmlvcml0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByaW9yaXR5KCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbWVzc2FnZSBjb3JyZWxhdGlvbiBpZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBjb3JyZWxhdGlvbiBpZCBvZiB0aGUgbWVzc2FnZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvcnJlbGF0aW9uSWQoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSByZXBseS10byBhZGRyZXNzIG9mIHRoZSBtZXNzYWdlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIGNvbnRlbnRzIG9mIHRoZSByZXBseSB0byBmaWVsZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlcGx5VG8oKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSBtZXNzYWdlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIG1lc3NhZ2UgZXhwaXJhdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEV4cGlyYXRpb24oKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBtZXNzYWdlIGlkIG9mIHRoZSBtZXNzYWdlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIG1lc3NhZ2UgaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1lc3NhZ2VJZCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsIFRoZSBtZXNzYWdlIHRpbWVzdGFtcC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVzdGFtcCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1lc3NhZ2UgdHlwZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBtZXNzYWdlIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbWVzc2FnZSB1c2VyIGlkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIG1lc3NhZ2UgdXNlciBpZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVzZXJJZCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGFwcGxpY2F0aW9uIGlkIG9mIHRoZSBtZXNzYWdlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIGFwcGxpY2F0aW9uIGlkIG9mIHRoZSBtZXNzYWdlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXBwSWQoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjbHVzdGVyIGlkIG9mIHRoZSBtZXNzYWdlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIGNsdXN0ZXIgaWQgb2YgdGhlIG1lc3NhZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbHVzdGVySWQoKSB7fQp9CgovKioKICogc3R1YiBjbGFzcyByZXByZXNlbnRpbmcgQU1RUENoYW5uZWwgZnJvbSBwZWNsLWFtcXAKICovCmNsYXNzIEFNUVBDaGFubmVsCnsKICAgIC8qKgogICAgICogQ29tbWl0IGEgcGVuZGluZyB0cmFuc2FjdGlvbi4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDaGFubmVsRXhjZXB0aW9uICAgIElmIG5vIHRyYW5zYWN0aW9uIHdhcyBzdGFydGVkIHByaW9yIHRvCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxpbmcgdGhpcyBtZXRob2QuCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBicm9rZXIgd2FzIGxvc3QuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21taXRUcmFuc2FjdGlvbigpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gQU1RUENoYW5uZWwgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBBTVFQQ29ubmVjdGlvbiAkYW1xcF9jb25uZWN0aW9uIEFuIGluc3RhbmNlIG9mIEFNUVBDb25uZWN0aW9uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFuIGFjdGl2ZSBjb25uZWN0aW9uIHRvIGEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uICAgICAgICBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgbG9zdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEFNUVBDb25uZWN0aW9uICRhbXFwX2Nvbm5lY3Rpb24pIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayB0aGUgY2hhbm5lbCBjb25uZWN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY2hhbm5lbCBpcyBjb25uZWN0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0Nvbm5lY3RlZCgpIHt9CgogICAgLyoqCiAgICAgKiBDbG9zZXMgdGhlIGNoYW5uZWwuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gaW50ZXJuYWwgY2hhbm5lbCBJRAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDaGFubmVsSWQoKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBRdWFsaXR5IE9mIFNlcnZpY2Ugc2V0dGluZ3MgZm9yIHRoZSBnaXZlbiBjaGFubmVsLgogICAgICoKICAgICAqIFNwZWNpZnkgdGhlIGFtb3VudCBvZiBkYXRhIHRvIHByZWZldGNoIGluIHRlcm1zIG9mIHdpbmRvdyBzaXplIChvY3RldHMpCiAgICAgKiBvciBudW1iZXIgb2YgbWVzc2FnZXMgZnJvbSBhIHF1ZXVlIGR1cmluZyBhIEFNUVBRdWV1ZTo6Y29uc3VtZSgpIG9yCiAgICAgKiBBTVFQUXVldWU6OmdldCgpIG1ldGhvZCBjYWxsLiBUaGUgY2xpZW50IHdpbGwgcHJlZmV0Y2ggZGF0YSB1cCB0byBzaXplCiAgICAgKiBvY3RldHMgb3IgY291bnQgbWVzc2FnZXMgZnJvbSB0aGUgc2VydmVyLCB3aGljaGV2ZXIgbGltaXQgaXMgaGl0IGZpcnN0LgogICAgICogU2V0dGluZyBlaXRoZXIgdmFsdWUgdG8gMCB3aWxsIGluc3RydWN0IHRoZSBjbGllbnQgdG8gaWdub3JlIHRoYXQKICAgICAqIHBhcnRpY3VsYXIgc2V0dGluZy4gQSBjYWxsIHRvIEFNUVBDaGFubmVsOjpxb3MoKSB3aWxsIG92ZXJ3cml0ZSBhbnkKICAgICAqIHZhbHVlcyBzZXQgYnkgY2FsbGluZyBBTVFQQ2hhbm5lbDo6c2V0UHJlZmV0Y2hTaXplKCkgYW5kCiAgICAgKiBBTVFQQ2hhbm5lbDo6c2V0UHJlZmV0Y2hDb3VudCgpLiBJZiB0aGUgY2FsbCB0byBlaXRoZXIKICAgICAqIEFNUVBRdWV1ZTo6Y29uc3VtZSgpIG9yIEFNUVBRdWV1ZTo6Z2V0KCkgaXMgZG9uZSB3aXRoIHRoZSBBTVFQX0FVVE9BQ0sKICAgICAqIGZsYWcgc2V0LCB0aGUgY2xpZW50IHdpbGwgbm90IGRvIGFueSBwcmVmZXRjaGluZyBvZiBkYXRhLCByZWdhcmRsZXNzIG9mCiAgICAgKiB0aGUgUU9TIHNldHRpbmdzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHNpemUgICBUaGUgd2luZG93IHNpemUsIGluIG9jdGV0cywgdG8gcHJlZmV0Y2guCiAgICAgKiBAcGFyYW0gaW50ICRjb3VudCAgVGhlIG51bWJlciBvZiBtZXNzYWdlcyB0byBwcmVmZXRjaC4KICAgICAqIEBwYXJhbSBib29sICAgICRnbG9iYWwgVFJVRSBmb3IgZ2xvYmFsLCBGQUxTRSBmb3IgY29uc3VtZXIuIEZBTFNFIGJ5IGRlZmF1bHQuCiAgICAgKgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcW9zKCRzaXplLCAkY291bnQsICRnbG9iYWwgPSBmYWxzZSkge30KCiAgICAvKioKICAgICAqIFJvbGxiYWNrIGEgdHJhbnNhY3Rpb24uCiAgICAgKgogICAgICogUm9sbGJhY2sgYW4gZXhpc3RpbmcgdHJhbnNhY3Rpb24uIEFNUVBDaGFubmVsOjpzdGFydFRyYW5zYWN0aW9uKCkgbXVzdAogICAgICogYmUgY2FsbGVkIHByaW9yIHRvIHRoaXMuCiAgICAgKgogICAgICogQHRocm93cyBBTVFQQ2hhbm5lbEV4Y2VwdGlvbiAgICBJZiBubyB0cmFuc2FjdGlvbiB3YXMgc3RhcnRlZCBwcmlvciB0bwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsaW5nIHRoaXMgbWV0aG9kLgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm9sbGJhY2tUcmFuc2FjdGlvbigpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG51bWJlciBvZiBtZXNzYWdlcyB0byBwcmVmZXRjaCBmcm9tIHRoZSBicm9rZXIgZm9yIGVhY2ggY29uc3VtZXIuCiAgICAgKgogICAgICogU2V0IHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgdG8gcHJlZmV0Y2ggZnJvbSB0aGUgYnJva2VyIGR1cmluZyBhIGNhbGwgdG8KICAgICAqIEFNUVBRdWV1ZTo6Y29uc3VtZSgpIG9yIEFNUVBRdWV1ZTo6Z2V0KCkuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkY291bnQgVGhlIG51bWJlciBvZiBtZXNzYWdlcyB0byBwcmVmZXRjaC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBicm9rZXIgd2FzIGxvc3QuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQcmVmZXRjaENvdW50KCRjb3VudCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHRvIHByZWZldGNoIGZyb20gdGhlIGJyb2tlciBmb3IgZWFjaCBjb25zdW1lci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJlZmV0Y2hDb3VudCgpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHdpbmRvdyBzaXplIHRvIHByZWZldGNoIGZyb20gdGhlIGJyb2tlciBmb3IgZWFjaCBjb25zdW1lci4KICAgICAqCiAgICAgKiBTZXQgdGhlIHByZWZldGNoIHdpbmRvdyBzaXplLCBpbiBvY3RldHMsIGR1cmluZyBhIGNhbGwgdG8KICAgICAqIEFNUVBRdWV1ZTo6Y29uc3VtZSgpIG9yIEFNUVBRdWV1ZTo6Z2V0KCkuIEFueSBjYWxsIHRvIHRoaXMgbWV0aG9kIHdpbGwKICAgICAqIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcmVmZXRjaCBtZXNzYWdlIGNvdW50IHRvIDAsIG1lYW5pbmcgdGhhdCB0aGUKICAgICAqIHByZWZldGNoIG1lc3NhZ2UgY291bnQgc2V0dGluZyB3aWxsIGJlIGlnbm9yZWQuIElmIHRoZSBjYWxsIHRvIGVpdGhlcgogICAgICogQU1RUFF1ZXVlOjpjb25zdW1lKCkgb3IgQU1RUFF1ZXVlOjpnZXQoKSBpcyBkb25lIHdpdGggdGhlIEFNUVBfQVVUT0FDSwogICAgICogZmxhZyBzZXQsIHRoaXMgc2V0dGluZyB3aWxsIGJlIGlnbm9yZWQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2l6ZSBUaGUgd2luZG93IHNpemUsIGluIG9jdGV0cywgdG8gcHJlZmV0Y2guCiAgICAgKgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UHJlZmV0Y2hTaXplKCRzaXplKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSB3aW5kb3cgc2l6ZSB0byBwcmVmZXRjaCBmcm9tIHRoZSBicm9rZXIgZm9yIGVhY2ggY29uc3VtZXIuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByZWZldGNoU2l6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG51bWJlciBvZiBtZXNzYWdlcyB0byBwcmVmZXRjaCBmcm9tIHRoZSBicm9rZXIgYWNyb3NzIGFsbCBjb25zdW1lcnMuCiAgICAgKgogICAgICogU2V0IHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgdG8gcHJlZmV0Y2ggZnJvbSB0aGUgYnJva2VyIGR1cmluZyBhIGNhbGwgdG8KICAgICAqIEFNUVBRdWV1ZTo6Y29uc3VtZSgpIG9yIEFNUVBRdWV1ZTo6Z2V0KCkuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkY291bnQgVGhlIG51bWJlciBvZiBtZXNzYWdlcyB0byBwcmVmZXRjaC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBicm9rZXIgd2FzIGxvc3QuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRHbG9iYWxQcmVmZXRjaENvdW50KCRjb3VudCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHRvIHByZWZldGNoIGZyb20gdGhlIGJyb2tlciBhY3Jvc3MgYWxsIGNvbnN1bWVycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0R2xvYmFsUHJlZmV0Y2hDb3VudCgpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHdpbmRvdyBzaXplIHRvIHByZWZldGNoIGZyb20gdGhlIGJyb2tlciBmb3IgYWxsIGNvbnN1bWVycy4KICAgICAqCiAgICAgKiBTZXQgdGhlIHByZWZldGNoIHdpbmRvdyBzaXplLCBpbiBvY3RldHMsIGR1cmluZyBhIGNhbGwgdG8KICAgICAqIEFNUVBRdWV1ZTo6Y29uc3VtZSgpIG9yIEFNUVBRdWV1ZTo6Z2V0KCkuIEFueSBjYWxsIHRvIHRoaXMgbWV0aG9kIHdpbGwKICAgICAqIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBwcmVmZXRjaCBtZXNzYWdlIGNvdW50IHRvIDAsIG1lYW5pbmcgdGhhdCB0aGUKICAgICAqIHByZWZldGNoIG1lc3NhZ2UgY291bnQgc2V0dGluZyB3aWxsIGJlIGlnbm9yZWQuIElmIHRoZSBjYWxsIHRvIGVpdGhlcgogICAgICogQU1RUFF1ZXVlOjpjb25zdW1lKCkgb3IgQU1RUFF1ZXVlOjpnZXQoKSBpcyBkb25lIHdpdGggdGhlIEFNUVBfQVVUT0FDSwogICAgICogZmxhZyBzZXQsIHRoaXMgc2V0dGluZyB3aWxsIGJlIGlnbm9yZWQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2l6ZSBUaGUgd2luZG93IHNpemUsIGluIG9jdGV0cywgdG8gcHJlZmV0Y2guCiAgICAgKgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0R2xvYmFsUHJlZmV0Y2hTaXplKCRzaXplKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSB3aW5kb3cgc2l6ZSB0byBwcmVmZXRjaCBmcm9tIHRoZSBicm9rZXIgZm9yIGFsbCBjb25zdW1lcnMuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEdsb2JhbFByZWZldGNoU2l6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBTdGFydCBhIHRyYW5zYWN0aW9uLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIG9uIHRoZSBnaXZlbiBjaGFubmVsIHByaW9yIHRvIGNhbGxpbmcKICAgICAqIEFNUVBDaGFubmVsOjpjb21taXRUcmFuc2FjdGlvbigpIG9yIEFNUVBDaGFubmVsOjpyb2xsYmFja1RyYW5zYWN0aW9uKCkuCiAgICAgKgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnRUcmFuc2FjdGlvbigpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIEFNUVBDb25uZWN0aW9uIG9iamVjdCBpbiB1c2UKICAgICAqCiAgICAgKiBAcmV0dXJuIEFNUVBDb25uZWN0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25uZWN0aW9uKCkge30KCiAgICAvKioKICAgICAqIFJlZGVsaXZlciB1bmFja25vd2xlZGdlZCBtZXNzYWdlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkcmVxdWV1ZQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmFzaWNSZWNvdmVyKCRyZXF1ZXVlID0gdHJ1ZSkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgY2hhbm5lbCB0byB1c2UgcHVibGlzaGVyIGFja25vd2xlZGdlbWVudHMuIFRoaXMgY2FuIG9ubHkgdXNlZCBvbiBhIG5vbi10cmFuc2FjdGlvbmFsIGNoYW5uZWwuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb25maXJtU2VsZWN0KCkge30KCiAgICAvKioKICAgICAqIFNldCBjYWxsYmFjayB0byBwcm9jZXNzIGJhc2ljLmFjayBhbmQgYmFzaWMubmFjIEFNUVAgc2VydmVyIG1ldGhvZHMgKGFwcGxpY2FibGUgd2hlbiBjaGFubmVsIGluIGNvbmZpcm0gbW9kZSkuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJGFja19jYWxsYmFjawogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJG5hY2tfY2FsbGJhY2sKICAgICAqCiAgICAgKiBDYWxsYmFjayBmdW5jdGlvbnMgd2l0aCBhbGwgYXJndW1lbnRzIGhhdmUgdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6CiAgICAgKgogICAgICogICAgICBmdW5jdGlvbiBhY2tfY2FsbGJhY2soaW50ICRkZWxpdmVyeVRhZywgYm9vbCAkbXVsdGlwbGUpIDogYm9vbDsKICAgICAqICAgICAgZnVuY3Rpb24gbmFja19jYWxsYmFjayhpbnQgJGRlbGl2ZXJ5VGFnLCBib29sICRtdWx0aXBsZSwgYm9vbCAkcmVxdWV1ZSkgOiBib29sOwogICAgICoKICAgICAqIGFuZCBzaG91bGQgcmV0dXJuIGJvb2xlYW4gZmFsc2Ugd2hlbiB3YWl0IGxvb3Agc2hvdWxkIGJlIGNhbmNlbGVkLgogICAgICoKICAgICAqIE5vdGUsIGJhc2ljLm5hY2sgc2VydmVyIG1ldGhvZCB3aWxsIG9ubHkgYmUgZGVsaXZlcmVkIGlmIGFuIGludGVybmFsIGVycm9yIG9jY3VycyBpbiB0aGUgRXJsYW5nIHByb2Nlc3MKICAgICAqIHJlc3BvbnNpYmxlIGZvciBhIHF1ZXVlIChzZWUgaHR0cHM6Ly93d3cucmFiYml0bXEuY29tL2NvbmZpcm1zLmh0bWwgZm9yIGRldGFpbHMpLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29uZmlybUNhbGxiYWNrKGNhbGxhYmxlICRhY2tfY2FsbGJhY2sgPSBudWxsLCBjYWxsYWJsZSAkbmFja19jYWxsYmFjayA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBXYWl0IHVudGlsIGFsbCBtZXNzYWdlcyBwdWJsaXNoZWQgc2luY2UgdGhlIGxhc3QgY2FsbCBoYXZlIGJlZW4gZWl0aGVyIGFjaydkIG9yIG5hY2snZCBieSB0aGUgYnJva2VyLgogICAgICoKICAgICAqIE5vdGUsIHRoaXMgbWV0aG9kIGFsc28gY2F0Y2ggYWxsIGJhc2ljLnJldHVybiBtZXNzYWdlIGZyb20gc2VydmVyLgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkdGltZW91dCBUaW1lb3V0IGluIHNlY29uZHMuIE1heSBiZSBmcmFjdGlvbmFsLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUFF1ZXVlRXhjZXB0aW9uIElmIHRpbWVvdXQgb2NjdXJzLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdEZvckNvbmZpcm0oJHRpbWVvdXQgPSAwLjApIHt9CgogICAgLyoqCiAgICAgKiBTZXQgY2FsbGJhY2sgdG8gcHJvY2VzcyBiYXNpYy5yZXR1cm4gQU1RUCBzZXJ2ZXIgbWV0aG9kCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJHJldHVybl9jYWxsYmFjawogICAgICoKICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIHdpdGggYWxsIGFyZ3VtZW50cyBoYXMgdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6CiAgICAgKgogICAgICogICAgICBmdW5jdGlvbiBjYWxsYmFjayhpbnQgJHJlcGx5X2NvZGUsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAkcmVwbHlfdGV4dCwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICRleGNoYW5nZSwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICRyb3V0aW5nS2V5LAogICAgICogICAgICAgICAgICAgICAgICAgICAgICBBTVFQQmFzaWNQcm9wZXJ0aWVzICRwcm9wZXJ0aWVzLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgJGJvZHkpIDogYm9vbDsKICAgICAqCiAgICAgKiBhbmQgc2hvdWxkIHJldHVybiBib29sZWFuIGZhbHNlIHdoZW4gd2FpdCBsb29wIHNob3VsZCBiZSBjYW5jZWxlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFJldHVybkNhbGxiYWNrKGNhbGxhYmxlICRyZXR1cm5fY2FsbGJhY2sgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogU3RhcnQgd2FpdCBsb29wIGZvciBiYXNpYy5yZXR1cm4gQU1RUCBzZXJ2ZXIgbWV0aG9kcwogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkdGltZW91dCBUaW1lb3V0IGluIHNlY29uZHMuIE1heSBiZSBmcmFjdGlvbmFsLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUFF1ZXVlRXhjZXB0aW9uIElmIHRpbWVvdXQgb2NjdXJzLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdEZvckJhc2ljUmV0dXJuKCR0aW1lb3V0ID0gMC4wKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIGFycmF5IG9mIGN1cnJlbnQgY29uc3VtZXJzIHdoZXJlIGtleSBpcyBjb25zdW1lciBhbmQgdmFsdWUgaXMgQU1RUFF1ZXVlIGNvbnN1bWVyIGlzIHJ1bm5pbmcgb24KICAgICAqCiAgICAgKiBAcmV0dXJuIEFNUVBRdWV1ZVtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdW1lcnMoKSB7fQp9CgovKioKICogc3R1YiBjbGFzcyByZXByZXNlbnRpbmcgQU1RUENoYW5uZWxFeGNlcHRpb24gZnJvbSBwZWNsLWFtcXAKICovCmNsYXNzIEFNUVBDaGFubmVsRXhjZXB0aW9uIGV4dGVuZHMgQU1RUEV4Y2VwdGlvbiB7fQoKLyoqCiAqIHN0dWIgY2xhc3MgcmVwcmVzZW50aW5nIEFNUVBDb25uZWN0aW9uIGZyb20gcGVjbC1hbXFwCiAqLwpjbGFzcyBBTVFQQ29ubmVjdGlvbgp7CiAgICAvKioKICAgICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBTVFQQ29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBDcmVhdGVzIGFuIEFNUVBDb25uZWN0aW9uIGluc3RhbmNlIHJlcHJlc2VudGluZyBhIGNvbm5lY3Rpb24gdG8gYW4gQU1RUAogICAgICogYnJva2VyLiBBIGNvbm5lY3Rpb24gd2lsbCBub3QgYmUgZXN0YWJsaXNoZWQgdW50aWwKICAgICAqIEFNUVBDb25uZWN0aW9uOjpjb25uZWN0KCkgaXMgY2FsbGVkLgogICAgICoKICAgICAqICAkY3JlZGVudGlhbHMgPSBhcnJheSgKICAgICAqICAgICAgJ2hvc3QnICA9PiBhbXFwLmhvc3QgVGhlIGhvc3QgdG8gY29ubmVjdCB0b28uIE5vdGU6IE1heCAxMDI0IGNoYXJhY3RlcnMuCiAgICAgKiAgICAgICdwb3J0JyAgPT4gYW1xcC5wb3J0IFBvcnQgb24gdGhlIGhvc3QuCiAgICAgKiAgICAgICd2aG9zdCcgPT4gYW1xcC52aG9zdCBUaGUgdmlydHVhbCBob3N0IG9uIHRoZSBob3N0LiBOb3RlOiBNYXggMTI4IGNoYXJhY3RlcnMuCiAgICAgKiAgICAgICdsb2dpbicgPT4gYW1xcC5sb2dpbiBUaGUgbG9naW4gbmFtZSB0byB1c2UuIE5vdGU6IE1heCAxMjggY2hhcmFjdGVycy4KICAgICAqICAgICAgJ3Bhc3N3b3JkJyA9PiBhbXFwLnBhc3N3b3JkIFBhc3N3b3JkLiBOb3RlOiBNYXggMTI4IGNoYXJhY3RlcnMuCiAgICAgKiAgICAgICdyZWFkX3RpbWVvdXQnICA9PiBUaW1lb3V0IGluIGZvciBpbmNvbWUgYWN0aXZpdHkuIE5vdGU6IDAgb3IgZ3JlYXRlciBzZWNvbmRzLiBNYXkgYmUgZnJhY3Rpb25hbC4KICAgICAqICAgICAgJ3dyaXRlX3RpbWVvdXQnID0+IFRpbWVvdXQgaW4gZm9yIG91dGNvbWUgYWN0aXZpdHkuIE5vdGU6IDAgb3IgZ3JlYXRlciBzZWNvbmRzLiBNYXkgYmUgZnJhY3Rpb25hbC4KICAgICAqICAgICAgJ2Nvbm5lY3RfdGltZW91dCcgPT4gQ29ubmVjdGlvbiB0aW1lb3V0LiBOb3RlOiAwIG9yIGdyZWF0ZXIgc2Vjb25kcy4gTWF5IGJlIGZyYWN0aW9uYWwuCiAgICAgKiAgICAgICdycGNfdGltZW91dCcgPT4gUlBDIHRpbWVvdXQuIE5vdGU6IDAgb3IgZ3JlYXRlciBzZWNvbmRzLiBNYXkgYmUgZnJhY3Rpb25hbC4KICAgICAqCiAgICAgKiAgICAgIENvbm5lY3Rpb24gdHVuaW5nIG9wdGlvbnMgKHNlZSBodHRwOi8vd3d3LnJhYmJpdG1xLmNvbS9hbXFwLTAtOS0xLXJlZmVyZW5jZS5odG1sI2Nvbm5lY3Rpb24udHVuZSBmb3IgZGV0YWlscyk6CiAgICAgKiAgICAgICdjaGFubmVsX21heCcgPT4gU3BlY2lmaWVzIGhpZ2hlc3QgY2hhbm5lbCBudW1iZXIgdGhhdCB0aGUgc2VydmVyIHBlcm1pdHMuIDAgbWVhbnMgc3RhbmRhcmQgZXh0ZW5zaW9uIGxpbWl0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBQSFBfQU1RUF9NQVhfQ0hBTk5FTFMgY29uc3RhbnQpCiAgICAgKiAgICAgICdmcmFtZV9tYXgnICAgPT4gVGhlIGxhcmdlc3QgZnJhbWUgc2l6ZSB0aGF0IHRoZSBzZXJ2ZXIgcHJvcG9zZXMgZm9yIHRoZSBjb25uZWN0aW9uLCBpbmNsdWRpbmcgZnJhbWUgaGVhZGVyCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgYW5kIGVuZC1ieXRlLiAwIG1lYW5zIHN0YW5kYXJkIGV4dGVuc2lvbiBsaW1pdCAoZGVwZW5kcyBvbiBsaWJyYWJiaW1xIGRlZmF1bHQgZnJhbWUgc2l6ZSBsaW1pdCkKICAgICAqICAgICAgJ2hlYXJ0YmVhdCcgICA9PiBUaGUgZGVsYXksIGluIHNlY29uZHMsIG9mIHRoZSBjb25uZWN0aW9uIGhlYXJ0YmVhdCB0aGF0IHRoZSBzZXJ2ZXIgd2FudHMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgMCBtZWFucyB0aGUgc2VydmVyIGRvZXMgbm90IHdhbnQgYSBoZWFydGJlYXQuIE5vdGUsIGxpYnJhYmJpdG1xIGhhcyBsaW1pdGVkIGhlYXJ0YmVhdCBzdXBwb3J0LAogICAgICogICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIG1lYW5zIGhlYXJ0YmVhdHMgY2hlY2tlZCBvbmx5IGR1cmluZyBibG9ja2luZyBjYWxscy4KICAgICAqCiAgICAgKiAgICAgIFRMUyBzdXBwb3J0IChzZWUgaHR0cHM6Ly93d3cucmFiYml0bXEuY29tL3NzbC5odG1sIGZvciBkZXRhaWxzKToKICAgICAqICAgICAgJ2NhY2VydCcgPT4gUGF0aCB0byB0aGUgQ0EgY2VydCBmaWxlIGluIFBFTSBmb3JtYXQuLgogICAgICogICAgICAnY2VydCcgICA9PiBQYXRoIHRvIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgaW4gUEVNIGZvcmFtdC4KICAgICAqICAgICAgJ2tleScgICAgPT4gUGF0aCB0byB0aGUgY2xpZW50IGtleSBpbiBQRU0gZm9ybWF0LgogICAgICogICAgICAndmVyaWZ5JyA9PiBFbmFibGUgb3IgZGlzYWJsZSBwZWVyIHZlcmlmaWNhdGlvbi4gSWYgcGVlciB2ZXJpZmljYXRpb24gaXMgZW5hYmxlZCB0aGVuIHRoZSBjb21tb24gbmFtZSBpbiB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgc2VydmVyIGNlcnRpZmljYXRlIG11c3QgbWF0Y2ggdGhlIHNlcnZlciBuYW1lLiBQZWVyIHZlcmlmaWNhdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCiAgICAgKgogICAgICogICAgICAnY29ubmVjdGlvbl9uYW1lJyA9PiBBIHVzZXIgZGV0ZXJtaW5lZCBuYW1lIGZvciB0aGUgY29ubmVjdGlvbgogICAgICogKQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkY3JlZGVudGlhbHMgT3B0aW9uYWwgYXJyYXkgb2YgY3JlZGVudGlhbCBpbmZvcm1hdGlvbiBmb3IKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGluZyB0byB0aGUgQU1RUCBicm9rZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkY3JlZGVudGlhbHMgPSBbXSkge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIEFNUVAgYnJva2VyIGlzIHN0aWxsIHZhbGlkLgogICAgICoKICAgICAqIENhbm5vdCByZWxpYWJseSBkZXRlY3QgZHJvcHBlZCBjb25uZWN0aW9ucyBvciB1bnVzdWFsIHNvY2tldCBlcnJvcnMsIGFzIGl0IGRvZXMgbm90IGFjdGl2ZWx5CiAgICAgKiBlbmdhZ2UgdGhlIHNvY2tldC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgVFJVRSBpZiBjb25uZWN0ZWQsIEZBTFNFIG90aGVyd2lzZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzQ29ubmVjdGVkKCkge30KCiAgICAvKioKICAgICAqIFdoZXRoZXIgY29ubmVjdGlvbiBwZXJzaXN0ZW50LgogICAgICoKICAgICAqIFdoZW4gbm8gY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgaXQgd2lsbCBhbHdheXMgcmV0dXJuIEZBTFNFLiBUaGUgc2FtZSBkaXNjbGFpbWVyIGFzIGZvcgogICAgICoge0BzZWUgQU1RUENvbm5lY3Rpb246OmlzQ29ubmVjdGVkKCl9IGFwcGxpZXMuCiAgICAgKgogICAgICogQHJldHVybiBib29sIFRSVUUgaWYgcGVyc2lzdGVudGx5IGNvbm5lY3RlZCwgRkFMU0Ugb3RoZXJ3aXNlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQZXJzaXN0ZW50KCkge30KCiAgICAvKioKICAgICAqIEVzdGFibGlzaCBhIHRyYW5zaWVudCBjb25uZWN0aW9uIHdpdGggdGhlIEFNUVAgYnJva2VyLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgaW5pdGlhdGUgYSBjb25uZWN0aW9uIHdpdGggdGhlIEFNUVAgYnJva2VyLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUENvbm5lY3Rpb25FeGNlcHRpb24KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29ubmVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBDbG9zZXMgdGhlIHRyYW5zaWVudCBjb25uZWN0aW9uIHdpdGggdGhlIEFNUVAgYnJva2VyLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgY2xvc2UgYW4gb3BlbiBjb25uZWN0aW9uIHdpdGggdGhlIEFNUVAgYnJva2VyLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUENvbm5lY3Rpb25FeGNlcHRpb24gV2hlbiBhdHRlbXB0aW5nIHRvIGRpc2Nvbm5lY3QgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc2Nvbm5lY3QoKSB7fQoKICAgIC8qKgogICAgICogQ2xvc2UgYW55IG9wZW4gdHJhbnNpZW50IGNvbm5lY3Rpb25zIGFuZCBpbml0aWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGUgQU1RUCBicm9rZXIuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWNvbm5lY3QoKSB7fQoKICAgIC8qKgogICAgICogRXN0YWJsaXNoIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uIHdpdGggdGhlIEFNUVAgYnJva2VyLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgaW5pdGlhdGUgYSBjb25uZWN0aW9uIHdpdGggdGhlIEFNUVAgYnJva2VyCiAgICAgKiBvciByZXVzZSBhbiBleGlzdGluZyBvbmUgaWYgcHJlc2VudC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBjb25uZWN0KCkge30KCiAgICAvKioKICAgICAqIENsb3NlcyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiB3aXRoIHRoZSBBTVFQIGJyb2tlci4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIGNsb3NlIGFuIG9wZW4gcGVyc2lzdGVudCBjb25uZWN0aW9uIHdpdGggdGhlIEFNUVAKICAgICAqIGJyb2tlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIFdoZW4gYXR0ZW1wdGluZyB0byBkaXNjb25uZWN0IGEgdHJhbnNpZW50IGNvbm5lY3Rpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBkaXNjb25uZWN0KCkge30KCiAgICAvKioKICAgICAqIENsb3NlIGFueSBvcGVuIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgYW5kIGluaXRpYXRlIGEgbmV3IG9uZSB3aXRoIHRoZSBBTVFQIGJyb2tlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVjb25uZWN0KCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgY29uZmlndXJlZCBob3N0LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBjb25maWd1cmVkIGhvc3RuYW1lIG9mIHRoZSBicm9rZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhvc3QoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb25maWd1cmVkIGxvZ2luLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBjb25maWd1cmVkIGxvZ2luIGFzIGEgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG9naW4oKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb25maWd1cmVkIHBhc3N3b3JkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBjb25maWd1cmVkIHBhc3N3b3JkIGFzIGEgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFzc3dvcmQoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb25maWd1cmVkIHBvcnQuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIGNvbmZpZ3VyZWQgcG9ydCBhcyBhbiBpbnRlZ2VyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UG9ydCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGNvbmZpZ3VyZWQgdmhvc3QuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGNvbmZpZ3VyZWQgdmlydHVhbCBob3N0IGFzIGEgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Vmhvc3QoKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBob3N0bmFtZSB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIEFNUVAgYnJva2VyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhvc3QgVGhlIGhvc3RuYW1lIG9mIHRoZSBBTVFQIGJyb2tlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIGhvc3QgaXMgbG9uZ2VyIHRoZW4gMTAyNCBjaGFyYWN0ZXJzLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SG9zdCgkaG9zdCkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgbG9naW4gc3RyaW5nIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgQU1RUCBicm9rZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbG9naW4gVGhlIGxvZ2luIHN0cmluZyB1c2VkIHRvIGF1dGhlbnRpY2F0ZQogICAgICogICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgQU1RUCBicm9rZXIuCiAgICAgKgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiBsb2dpbiBpcyBsb25nZXIgdGhlbiAzMiBjaGFyYWN0ZXJzLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TG9naW4oJGxvZ2luKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBwYXNzd29yZCBzdHJpbmcgdXNlZCB0byBjb25uZWN0IHRvIHRoZSBBTVFQIGJyb2tlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgc3RyaW5nIHVzZWQgdG8gYXV0aGVudGljYXRlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBBTVFQIGJyb2tlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHBhc3N3b3JkIGlzIGxvbmdlciB0aGVuIDMyY2hhcmFjdGVycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFBhc3N3b3JkKCRwYXNzd29yZCkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgcG9ydCB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIEFNUVAgYnJva2VyLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHBvcnQgVGhlIHBvcnQgdXNlZCB0byBjb25uZWN0IHRvIHRoZSBBTVFQIGJyb2tlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHBvcnQgaXMgbG9uZ2VyIG5vdCBiZXR3ZWVuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgYW5kIDY1NTM1LgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UG9ydCgkcG9ydCkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIHZpcnR1YWwgaG9zdCB0byB3aGljaCB0byBjb25uZWN0IG9uIHRoZSBBTVFQIGJyb2tlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2aG9zdCBUaGUgdmlydHVhbCBob3N0IHRvIHVzZSBvbiB0aGUgQU1RUAogICAgICogICAgICAgICAgICAgICAgICAgICAgYnJva2VyLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUENvbm5lY3Rpb25FeGNlcHRpb24gSWYgaG9zdCBpcyBsb25nZXIgdGhlbiAzMiBjaGFyYWN0ZXJzLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Vmhvc3QoJHZob3N0KSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW50ZXJ2YWwgb2YgdGltZSB0byB3YWl0IGZvciBpbmNvbWUgYWN0aXZpdHkgZnJvbSBBTVFQIGJyb2tlcgogICAgICoKICAgICAqIEBkZXByZWNhdGVkIHVzZSBBTVFQQ29ubmVjdGlvbjo6c2V0UmVhZFRpbWVvdXQoJHRpbWVvdXQpIGluc3RlYWQKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHRpbWVvdXQKICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRpbWVvdXQgaXMgbGVzcyB0aGFuIDAuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIiVjbGFzcyUtPnNldFJlYWRUaW1vdXQoJXBhcmFtZXRlcjAlKSIpXQogICAgcHVibGljIGZ1bmN0aW9uIHNldFRpbWVvdXQoJHRpbWVvdXQpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGNvbmZpZ3VyZWQgaW50ZXJ2YWwgb2YgdGltZSB0byB3YWl0IGZvciBpbmNvbWUgYWN0aXZpdHkKICAgICAqIGZyb20gQU1RUCBicm9rZXIKICAgICAqCiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgQU1RUENvbm5lY3Rpb246OmdldFJlYWRUaW1lb3V0KCkgaW5zdGVhZAogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqLwogICAgI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAnJWNsYXNzJS0+Z2V0UmVhZFRpbW91dCglcGFyYW1ldGVyMCUpJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZW91dCgpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBpbnRlcnZhbCBvZiB0aW1lIHRvIHdhaXQgZm9yIGluY29tZSBhY3Rpdml0eSBmcm9tIEFNUVAgYnJva2VyCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR0aW1lb3V0CiAgICAgKgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aW1lb3V0IGlzIGxlc3MgdGhhbiAwLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVhZFRpbWVvdXQoJHRpbWVvdXQpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGNvbmZpZ3VyZWQgaW50ZXJ2YWwgb2YgdGltZSB0byB3YWl0IGZvciBpbmNvbWUgYWN0aXZpdHkKICAgICAqIGZyb20gQU1RUCBicm9rZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZWFkVGltZW91dCgpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBpbnRlcnZhbCBvZiB0aW1lIHRvIHdhaXQgZm9yIG91dGNvbWUgYWN0aXZpdHkgdG8gQU1RUCBicm9rZXIKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHRpbWVvdXQKICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRpbWVvdXQgaXMgbGVzcyB0aGFuIDAuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRXcml0ZVRpbWVvdXQoJHRpbWVvdXQpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGNvbmZpZ3VyZWQgaW50ZXJ2YWwgb2YgdGltZSB0byB3YWl0IGZvciBvdXRjb21lIGFjdGl2aXR5CiAgICAgKiB0byBBTVFQIGJyb2tlcgogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFdyaXRlVGltZW91dCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGNvbmZpZ3VyZWQgdGltZW91dCAoaW4gc2Vjb25kcykgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIEFNUVAgYnJva2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25uZWN0VGltZW91dCgpOiBmbG9hdCB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW50ZXJ2YWwgb2YgdGltZSB0byB3YWl0IGZvciBSUEMgYWN0aXZpdHkgdG8gQU1RUCBicm9rZXIKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHRpbWVvdXQKICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRpbWVvdXQgaXMgbGVzcyB0aGFuIDAuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRScGNUaW1lb3V0KCR0aW1lb3V0KSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb25maWd1cmVkIGludGVydmFsIG9mIHRpbWUgdG8gd2FpdCBmb3IgUlBDIGFjdGl2aXR5CiAgICAgKiB0byBBTVFQIGJyb2tlcgogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJwY1RpbWVvdXQoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIGxhc3QgdXNlZCBjaGFubmVsIGlkIGR1cmluZyBjdXJyZW50IGNvbm5lY3Rpb24gc2Vzc2lvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlZENoYW5uZWxzKCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhbm5lbHMgdGhlIGNvbm5lY3Rpb24gY2FuIGhhbmRsZS4KICAgICAqCiAgICAgKiBXaGVuIGNvbm5lY3Rpb24gaXMgY29ubmVjdGVkLCBlZmZlY3RpdmUgY29ubmVjdGlvbiB2YWx1ZSByZXR1cm5lZCwgd2hpY2ggaXMgbm9ybWFsbHkgdGhlIHNhbWUgYXMgb3JpZ2luYWwKICAgICAqIGNvcnJlc3BvbmRlbnQgdmFsdWUgcGFzc2VkIHRvIGNvbnN0cnVjdG9yLCBvdGhlcndpc2Ugb3JpZ2luYWwgdmFsdWUgcGFzc2VkIHRvIGNvbnN0cnVjdG9yIHJldHVybmVkLgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYXhDaGFubmVscygpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgbWF4IHN1cHBvcnRlZCBmcmFtZSBzaXplIHBlciBjb25uZWN0aW9uIGluIGJ5dGVzLgogICAgICoKICAgICAqIFdoZW4gY29ubmVjdGlvbiBpcyBjb25uZWN0ZWQsIGVmZmVjdGl2ZSBjb25uZWN0aW9uIHZhbHVlIHJldHVybmVkLCB3aGljaCBpcyBub3JtYWxseSB0aGUgc2FtZSBhcyBvcmlnaW5hbAogICAgICogY29ycmVzcG9uZGVudCB2YWx1ZSBwYXNzZWQgdG8gY29uc3RydWN0b3IsIG90aGVyd2lzZSBvcmlnaW5hbCB2YWx1ZSBwYXNzZWQgdG8gY29uc3RydWN0b3IgcmV0dXJuZWQuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1heEZyYW1lU2l6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbiBoZWFydGJlYXRzIG9mIHRoZSBjb25uZWN0aW9uIGluIHNlY29uZHMuCiAgICAgKgogICAgICogV2hlbiBjb25uZWN0aW9uIGlzIGNvbm5lY3RlZCwgZWZmZWN0aXZlIGNvbm5lY3Rpb24gdmFsdWUgcmV0dXJuZWQsIHdoaWNoIGlzIG5vcm1hbGx5IHRoZSBzYW1lIGFzIG9yaWdpbmFsCiAgICAgKiBjb3JyZXNwb25kZW50IHZhbHVlIHBhc3NlZCB0byBjb25zdHJ1Y3Rvciwgb3RoZXJ3aXNlIG9yaWdpbmFsIHZhbHVlIHBhc3NlZCB0byBjb25zdHJ1Y3RvciByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhcnRiZWF0SW50ZXJ2YWwoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHBhdGggdG8gdGhlIENBIGNlcnQgZmlsZSBpbiBQRU0gZm9ybWF0CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q0FDZXJ0KCkge30KCiAgICAvKioKICAgICAqIFNldCBwYXRoIHRvIHRoZSBDQSBjZXJ0IGZpbGUgaW4gUEVNIGZvcm1hdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNhY2VydAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q0FDZXJ0KCRjYWNlcnQpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgcGF0aCB0byB0aGUgY2xpZW50IGNlcnRpZmljYXRlIGluIFBFTSBmb3JtYXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDZXJ0KCkge30KCiAgICAvKioKICAgICAqIFNldCBwYXRoIHRvIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgaW4gUEVNIGZvcm1hdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNlcnQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldENlcnQoJGNlcnQpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgcGF0aCB0byB0aGUgY2xpZW50IGtleSBpbiBQRU0gZm9ybWF0CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0S2V5KCkge30KCiAgICAvKioKICAgICAqIFNldCBwYXRoIHRvIHRoZSBjbGllbnQga2V5IGluIFBFTSBmb3JtYXQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGtleQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0S2V5KCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgd2hldGhlciBwZWVyIHZlcmlmaWNhdGlvbiBlbmFibGVkIG9yIGRpc2FibGVkCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJpZnkoKSB7fQoKICAgIC8qKgogICAgICogRW5hYmxlIG9yIGRpc2FibGUgcGVlciB2ZXJpZmljYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkdmVyaWZ5CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRWZXJpZnkoJHZlcmlmeSkge30KCiAgICAvKioKICAgICAqIHNldCBhdXRoZW50aWNhdGlvbiBtZXRob2QKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRzYXNsTWV0aG9kIEFNUVBfU0FTTF9NRVRIT0RfUExBSU4gfCBBTVFQX1NBU0xfTUVUSE9EX0VYVEVSTkFMCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTYXNsTWV0aG9kKCRtZXRob2QpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIGNvbmZpZ3VyYXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBBTVFQX1NBU0xfTUVUSE9EX1BMQUlOIHwgQU1RUF9TQVNMX01FVEhPRF9FWFRFUk5BTAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2FzbE1ldGhvZCgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbm5lY3Rpb25OYW1lKD9zdHJpbmcgJGNvbm5lY3Rpb25OYW1lKTogdm9pZCB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25uZWN0aW9uTmFtZSgpOiA/c3RyaW5nIHt9Cn0KCi8qKgogKiBzdHViIGNsYXNzIHJlcHJlc2VudGluZyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBmcm9tIHBlY2wtYW1xcAogKi8KY2xhc3MgQU1RUENvbm5lY3Rpb25FeGNlcHRpb24gZXh0ZW5kcyBBTVFQRXhjZXB0aW9uIHt9CgovKioKICogSW50ZXJmYWNlIHJlcHJlc2VudGluZyBBTVFQIHZhbHVlcwogKi8KaW50ZXJmYWNlIEFNUVBWYWx1ZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BbXFwVmFsdWUoKTogZmxvYXR8YXJyYXl8QU1RUERlY2ltYWx8Ym9vbHxpbnR8QU1RUFZhbHVlfHN0cmluZ3xBTVFQVGltZXN0YW1wfG51bGw7Cn0KCi8qKgogKiBzdHViIGNsYXNzIHJlcHJlc2VudGluZyBBTVFQRGVjaW1hbCBmcm9tIHBlY2wtYW1xcAogKi8KZmluYWwgLyogcmVhZG9ubHkgKi8gY2xhc3MgQU1RUERlY2ltYWwgaW1wbGVtZW50cyBBTVFQVmFsdWUKewogICAgcHVibGljIGNvbnN0IEVYUE9ORU5UX01JTiA9IDA7CiAgICBwdWJsaWMgY29uc3QgRVhQT05FTlRfTUFYID0gMjU1OwogICAgcHVibGljIGNvbnN0IFNJR05JRklDQU5EX01JTiA9IDA7CiAgICBwdWJsaWMgY29uc3QgU0lHTklGSUNBTkRfTUFYID0gNDI5NDk2NzI5NTsKCiAgICAvKioKICAgICAqIEBwYXJhbSAkZXhwb25lbnQKICAgICAqIEBwYXJhbSAkc2lnbmlmaWNhbmQKICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBFeGNoYW5nZVZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZXhwb25lbnQsICRzaWduaWZpY2FuZCkge30KCiAgICAvKiogQHJldHVybiBpbnQgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHBvbmVudCgpIHt9CgogICAgLyoqIEByZXR1cm4gaW50ICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2lnbmlmaWNhbmQoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FtcXBWYWx1ZSgpOiBmbG9hdHxhcnJheXxBTVFQRGVjaW1hbHxib29sfGludHxBTVFQVmFsdWV8c3RyaW5nfEFNUVBUaW1lc3RhbXB8bnVsbCB7fQp9CgovKioKICogc3R1YiBjbGFzcyByZXByZXNlbnRpbmcgQU1RUEVudmVsb3BlIGZyb20gcGVjbC1hbXFwCiAqLwpjbGFzcyBBTVFQRW52ZWxvcGUgZXh0ZW5kcyBBTVFQQmFzaWNQcm9wZXJ0aWVzCnsKICAgIC8qKgogICAgICogR2V0IHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBjb250ZW50cyBvZiB0aGUgbWVzc2FnZSBib2R5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qm9keSgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHJvdXRpbmcga2V5IG9mIHRoZSBtZXNzYWdlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBtZXNzYWdlIHJvdXRpbmcga2V5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Um91dGluZ0tleSgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGNvbnN1bWVyIHRhZyBvZiB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBjb25zdW1lciB0YWcgb2YgdGhlIG1lc3NhZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdW1lclRhZygpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGRlbGl2ZXJ5IHRhZyBvZiB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsIFRoZSBkZWxpdmVyeSB0YWcgb2YgdGhlIG1lc3NhZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZWxpdmVyeVRhZygpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGV4Y2hhbmdlIG5hbWUgb24gd2hpY2ggdGhlIG1lc3NhZ2Ugd2FzIHB1Ymxpc2hlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBleGNoYW5nZSBuYW1lIG9uIHdoaWNoIHRoZSBtZXNzYWdlIHdhcyBwdWJsaXNoZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeGNoYW5nZU5hbWUoKSB7fQoKICAgIC8qKgogICAgICogV2hldGhlciB0aGlzIGlzIGEgcmVkZWxpdmVyeSBvZiB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBXaGV0aGVyIHRoaXMgaXMgYSByZWRlbGl2ZXJ5IG9mIGEgbWVzc2FnZS4gSWYgdGhpcyBtZXNzYWdlIGhhcyBiZWVuCiAgICAgKiBkZWxpdmVyZWQgYW5kIEFNUVBFbnZlbG9wZTo6bmFjaygpIHdhcyBjYWxsZWQsIHRoZSBtZXNzYWdlIHdpbGwgYmUgcHV0CiAgICAgKiBiYWNrIG9uIHRoZSBxdWV1ZSB0byBiZSByZWRlbGl2ZXJlZCwgYXQgd2hpY2ggcG9pbnQgdGhlIG1lc3NhZ2Ugd2lsbAogICAgICogYWx3YXlzIHJldHVybiBUUlVFIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUUlVFIGlmIHRoaXMgaXMgYSByZWRlbGl2ZXJ5LCBGQUxTRSBvdGhlcndpc2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlZGVsaXZlcnkoKSB7fQoKICAgIC8qKgogICAgICogR2V0IGEgc3BlY2lmaWMgbWVzc2FnZSBoZWFkZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaGVhZGVyTmFtZSBOYW1lIG9mIHRoZSBoZWFkZXIgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tLgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQgVGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgaGVhZGVyIG9yIG51bGwgaWYgbm90IHNldC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlcigkaGVhZGVyTmFtZSkge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgc3BlY2lmaWMgbWVzc2FnZSBoZWFkZXIgZXhpc3RzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhlYWRlck5hbWUgTmFtZSBvZiB0aGUgaGVhZGVyIHRvIGNoZWNrLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzSGVhZGVyKCRoZWFkZXJOYW1lKSB7fQp9CgovKioKICogc3R1YiBjbGFzcyByZXByZXNlbnRpbmcgQU1RUEVudmVsb3BlRXhjZXB0aW9uIGZyb20gcGVjbC1hbXFwCiAqLwpjbGFzcyBBTVFQRW52ZWxvcGVFeGNlcHRpb24gZXh0ZW5kcyBBTVFQRXhjZXB0aW9uCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFbnZlbG9wZSgpOiBBTVFQRW52ZWxvcGUge30KfQoKLyoqCiAqIHN0dWIgY2xhc3MgcmVwcmVzZW50aW5nIEFNUVBFeGNlcHRpb24gZnJvbSBwZWNsLWFtcXAKICovCmNsYXNzIEFNUVBFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KCi8qKgogKiBzdHViIGNsYXNzIHJlcHJlc2VudGluZyBBTVFQRXhjaGFuZ2UgZnJvbSBwZWNsLWFtcXAKICovCmNsYXNzIEFNUVBFeGNoYW5nZQp7CiAgICAvKioKICAgICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBTVFQRXhjaGFuZ2UuCiAgICAgKgogICAgICogUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBBTVFQRXhjaGFuZ2Ugb2JqZWN0LCBhc3NvY2lhdGVkIHdpdGggdGhlCiAgICAgKiBnaXZlbiBBTVFQQ2hhbm5lbCBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIEFNUVBDaGFubmVsICRjaGFubmVsIEEgdmFsaWQgQU1RUENoYW5uZWwgb2JqZWN0LCBjb25uZWN0ZWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGEgYnJva2VyLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUEV4Y2hhbmdlRXhjZXB0aW9uICAgV2hlbiBhbXFwX2NoYW5uZWwgaXMgbm90IGNvbm5lY3RlZCB0bwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGJyb2tlci4KICAgICAqIEB0aHJvd3MgQU1RUENvbm5lY3Rpb25FeGNlcHRpb24gSWYgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGJyb2tlciB3YXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9zdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEFNUVBDaGFubmVsICRjaGFubmVsKSB7fQoKICAgIC8qKgogICAgICogQmluZCB0byBhbm90aGVyIGV4Y2hhbmdlLgogICAgICoKICAgICAqIEJpbmQgYW4gZXhjaGFuZ2UgdG8gYW5vdGhlciBleGNoYW5nZSB1c2luZyB0aGUgc3BlY2lmaWVkIHJvdXRpbmcga2V5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGV4Y2hhbmdlTmFtZSBOYW1lIG9mIHRoZSBleGNoYW5nZSB0byBiaW5kLgogICAgICogQHBhcmFtIHN0cmluZyAkcm91dGluZ0tleSAgIFRoZSByb3V0aW5nIGtleSB0byB1c2UgZm9yIGJpbmRpbmcuCiAgICAgKiBAcGFyYW0gYXJyYXkgICRhcmd1bWVudHMgICAgIEFkZGl0aW9uYWwgYmluZGluZyBhcmd1bWVudHMuCiAgICAgKgogICAgICogQHRocm93cyBBTVFQRXhjaGFuZ2VFeGNlcHRpb24gICBPbiBmYWlsdXJlLgogICAgICogQHRocm93cyBBTVFQQ2hhbm5lbEV4Y2VwdGlvbiAgICBJZiB0aGUgY2hhbm5lbCBpcyBub3Qgb3Blbi4KICAgICAqIEB0aHJvd3MgQU1RUENvbm5lY3Rpb25FeGNlcHRpb24gSWYgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGJyb2tlciB3YXMgbG9zdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJpbmQoJGV4Y2hhbmdlTmFtZSwgJHJvdXRpbmdLZXkgPSAnJywgYXJyYXkgJGFyZ3VtZW50cyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIGJpbmRpbmcgdG8gYW5vdGhlciBleGNoYW5nZS4KICAgICAqCiAgICAgKiBSZW1vdmUgYSByb3V0aW5nIGtleSBiaW5kaW5nIG9uIGFuIGFub3RoZXIgZXhjaGFuZ2UgZnJvbSB0aGUgZ2l2ZW4gZXhjaGFuZ2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZXhjaGFuZ2VOYW1lIE5hbWUgb2YgdGhlIGV4Y2hhbmdlIHRvIGJpbmQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyb3V0aW5nS2V5ICAgVGhlIHJvdXRpbmcga2V5IHRvIHVzZSBmb3IgYmluZGluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgJGFyZ3VtZW50cyAgICAgQWRkaXRpb25hbCBiaW5kaW5nIGFyZ3VtZW50cy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBFeGNoYW5nZUV4Y2VwdGlvbiAgIE9uIGZhaWx1cmUuCiAgICAgKiBAdGhyb3dzIEFNUVBDaGFubmVsRXhjZXB0aW9uICAgIElmIHRoZSBjaGFubmVsIGlzIG5vdCBvcGVuLgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5iaW5kKCRleGNoYW5nZU5hbWUsICRyb3V0aW5nS2V5ID0gJycsIGFycmF5ICRhcmd1bWVudHMgPSBbXSkge30KCiAgICAvKioKICAgICAqIERlY2xhcmUgYSBuZXcgZXhjaGFuZ2Ugb24gdGhlIGJyb2tlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBFeGNoYW5nZUV4Y2VwdGlvbiAgIE9uIGZhaWx1cmUuCiAgICAgKiBAdGhyb3dzIEFNUVBDaGFubmVsRXhjZXB0aW9uICAgIElmIHRoZSBjaGFubmVsIGlzIG5vdCBvcGVuLgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjbGFyZUV4Y2hhbmdlKCkge30KCiAgICAvKioKICAgICAqIERlY2xhcmUgYSBuZXcgZXhjaGFuZ2Ugb24gdGhlIGJyb2tlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBFeGNoYW5nZUV4Y2VwdGlvbiBPbiBmYWlsdXJlLgogICAgICogQHRocm93cyBBTVFQQ2hhbm5lbEV4Y2VwdGlvbiBJZiB0aGUgY2hhbm5lbCBpcyBub3Qgb3Blbi4KICAgICAqIEB0aHJvd3MgQU1RUENvbm5lY3Rpb25FeGNlcHRpb24gSWYgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGJyb2tlciB3YXMgbG9zdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlY2xhcmUoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogRGVsZXRlIHRoZSBleGNoYW5nZSBmcm9tIHRoZSBicm9rZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJGV4Y2hhbmdlTmFtZSBPcHRpb25hbCBuYW1lIG9mIGV4Y2hhbmdlIHRvIGRlbGV0ZS4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzICAgICAgICBPcHRpb25hbGx5IEFNUVBfSUZVTlVTRUQgY2FuIGJlIHNwZWNpZmllZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBpbmRpY2F0ZSB0aGUgZXhjaGFuZ2Ugc2hvdWxkIG5vdCBiZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkIHVudGlsIG5vIGNsaWVudHMgYXJlIGNvbm5lY3RlZCB0bwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBFeGNoYW5nZUV4Y2VwdGlvbiAgIE9uIGZhaWx1cmUuCiAgICAgKiBAdGhyb3dzIEFNUVBDaGFubmVsRXhjZXB0aW9uICAgIElmIHRoZSBjaGFubmVsIGlzIG5vdCBvcGVuLgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlKCRleGNoYW5nZU5hbWUgPSBudWxsLCAkZmxhZ3MgPSBBTVFQX05PUEFSQU0pIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LgogICAgICogR2V0IHRoZSBhcmd1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhcmd1bWVudE5hbWUgVGhlIGtleSB0byBsb29rIHVwLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUEV4Y2hhbmdlRXhjZXB0aW9uIElmIGtleSBkb2VzIG5vdCBleGlzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbHxpbnR8ZmxvYXR8c3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFyZ3VtZW50KCRhcmd1bWVudE5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayB3aGV0aGVyIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5IGV4aXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhcmd1bWVudE5hbWUgVGhlIGtleSB0byBsb29rIHVwLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzQXJndW1lbnQoJGFyZ3VtZW50TmFtZSkge30KCiAgICAvKioKICAgICAqIEdldCBhbGwgYXJndW1lbnRzIHNldCBvbiB0aGUgZ2l2ZW4gZXhjaGFuZ2UuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBBbiBhcnJheSBjb250YWluaW5nIGFsbCBvZiB0aGUgc2V0IGtleS92YWx1ZSBwYWlycy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFyZ3VtZW50cygpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgYWxsIHRoZSBmbGFncyBjdXJyZW50bHkgc2V0IG9uIHRoZSBnaXZlbiBleGNoYW5nZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBBbiBpbnRlZ2VyIGJpdG1hc2sgb2YgYWxsIHRoZSBmbGFncyBjdXJyZW50bHkgc2V0IG9uIHRoaXMKICAgICAqICAgICAgICAgICAgIGV4Y2hhbmdlIG9iamVjdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZsYWdzKCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgY29uZmlndXJlZCBuYW1lLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIGNvbmZpZ3VyZWQgbmFtZSBhcyBhIHN0cmluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb25maWd1cmVkIHR5cGUuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgY29uZmlndXJlZCB0eXBlIGFzIGEgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpIHt9CgogICAgLyoqCiAgICAgKiBQdWJsaXNoIGEgbWVzc2FnZSB0byBhbiBleGNoYW5nZS4KICAgICAqCiAgICAgKiBQdWJsaXNoIGEgbWVzc2FnZSB0byB0aGUgZXhjaGFuZ2UgcmVwcmVzZW50ZWQgYnkgdGhlIEFNUVBFeGNoYW5nZSBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgJG1lc3NhZ2UgICAgIFRoZSBtZXNzYWdlIHRvIHB1Ymxpc2guCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJvdXRpbmdLZXkgVGhlIG9wdGlvbmFsIHJvdXRpbmcga2V5IHRvIHdoaWNoIHRvCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGlzaCB0by4KICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkZmxhZ3MgICAgICAgT25lIG9yIG1vcmUgb2YgQU1RUF9NQU5EQVRPUlkgYW5kCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1RUF9JTU1FRElBVEUuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAkaGVhZGVycyAgT25lIG9mIGNvbnRlbnRfdHlwZSwgY29udGVudF9lbmNvZGluZywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX2lkLCB1c2VyX2lkLCBhcHBfaWQsIGRlbGl2ZXJ5X21vZGUsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHksIHRpbWVzdGFtcCwgZXhwaXJhdGlvbiwgdHlwZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHJlcGx5X3RvLCBoZWFkZXJzLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUEV4Y2hhbmdlRXhjZXB0aW9uICAgT24gZmFpbHVyZS4KICAgICAqIEB0aHJvd3MgQU1RUENoYW5uZWxFeGNlcHRpb24gICAgSWYgdGhlIGNoYW5uZWwgaXMgbm90IG9wZW4uCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBicm9rZXIgd2FzIGxvc3QuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdWJsaXNoKAogICAgICAgICRtZXNzYWdlLAogICAgICAgICRyb3V0aW5nS2V5ID0gbnVsbCwKICAgICAgICAkZmxhZ3MgPSBudWxsLAogICAgICAgIGFycmF5ICRoZWFkZXJzID0gW10KICAgICkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBrZXkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICRhcmd1bWVudE5hbWUgICBOYW1lIG9mIHRoZSBhcmd1bWVudCB0byBzZXQuCiAgICAgKiBAcGFyYW0gc3RyaW5nfGludCAkYXJndW1lbnRWYWx1ZSBWYWx1ZSBvZiB0aGUgYXJndW1lbnQgdG8gc2V0LgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QXJndW1lbnQoJGFyZ3VtZW50TmFtZSwgJGFyZ3VtZW50VmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFyZ3VtZW50TmFtZSBOYW1lIG9mIHRoZSBhcmd1bWVudCB0byByZW1vdmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVBcmd1bWVudChzdHJpbmcgJGFyZ3VtZW50TmFtZSk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFNldCBhbGwgYXJndW1lbnRzIG9uIHRoZSBleGNoYW5nZS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3VtZW50cyBBbiBhcnJheSBvZiBrZXkvdmFsdWUgcGFpcnMgb2YgYXJndW1lbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEFyZ3VtZW50cyhhcnJheSAkYXJndW1lbnRzKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBmbGFncyBvbiBhbiBleGNoYW5nZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGZsYWdzIEEgYml0bWFzayBvZiBmbGFncy4gVGhpcyBjYWxsIGN1cnJlbnRseSBvbmx5CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY29uc2lkZXJzIHRoZSBmb2xsb3dpbmcgZmxhZ3M6CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgQU1RUF9EVVJBQkxFLCBBTVFQX1BBU1NJVkUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAoYW5kIEFNUVBfRFVSQUJMRSwgaWYgbGlicmFiYml0bXEgdmVyc2lvbiA+PSAwLjUuMykKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEZsYWdzKCRmbGFncykge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgbmFtZSBvZiB0aGUgZXhjaGFuZ2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZXhjaGFuZ2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBleGNoYW5nZSB0byBzZXQgYXMgc3RyaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TmFtZSgkZXhjaGFuZ2VOYW1lKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSB0eXBlIG9mIHRoZSBleGNoYW5nZS4KICAgICAqCiAgICAgKiBTZXQgdGhlIHR5cGUgb2YgdGhlIGV4Y2hhbmdlLiBUaGlzIGNhbiBiZSBhbnkgb2YgQU1RUF9FWF9UWVBFX0RJUkVDVCwKICAgICAqIEFNUVBfRVhfVFlQRV9GQU5PVVQsIEFNUVBfRVhfVFlQRV9IRUFERVJTIG9yIEFNUVBfRVhfVFlQRV9UT1BJQy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRleGNoYW5nZVR5cGUgVGhlIHR5cGUgb2YgZXhjaGFuZ2UgYXMgYSBzdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUeXBlKCRleGNoYW5nZVR5cGUpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIEFNUVBDaGFubmVsIG9iamVjdCBpbiB1c2UKICAgICAqCiAgICAgKiBAcmV0dXJuIEFNUVBDaGFubmVsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDaGFubmVsKCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgQU1RUENvbm5lY3Rpb24gb2JqZWN0IGluIHVzZQogICAgICoKICAgICAqIEByZXR1cm4gQU1RUENvbm5lY3Rpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbm5lY3Rpb24oKSB7fQp9CgovKioKICogc3R1YiBjbGFzcyByZXByZXNlbnRpbmcgQU1RUEV4Y2hhbmdlRXhjZXB0aW9uIGZyb20gcGVjbC1hbXFwCiAqLwpjbGFzcyBBTVFQRXhjaGFuZ2VFeGNlcHRpb24gZXh0ZW5kcyBBTVFQRXhjZXB0aW9uIHt9CgovKioKICogc3R1YiBjbGFzcyByZXByZXNlbnRpbmcgQU1RUFF1ZXVlIGZyb20gcGVjbC1hbXFwCiAqLwpjbGFzcyBBTVFQUXVldWUKewogICAgLyoqCiAgICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gQU1RUFF1ZXVlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gQU1RUENoYW5uZWwgJGNoYW5uZWwgVGhlIGFtcXAgY2hhbm5lbCB0byB1c2UuCiAgICAgKgogICAgICogQHRocm93cyBBTVFQUXVldWVFeGNlcHRpb24gICAgICBXaGVuIGFtcXBfY2hhbm5lbCBpcyBub3QgY29ubmVjdGVkIHRvIGEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJva2VyLgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQU1RUENoYW5uZWwgJGNoYW5uZWwpIHt9CgogICAgLyoqCiAgICAgKiBBY2tub3dsZWRnZSB0aGUgcmVjZWlwdCBvZiBhIG1lc3NhZ2UuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgYWxsb3dzIHRoZSBhY2tub3dsZWRnZW1lbnQgb2YgYSBtZXNzYWdlIHRoYXQgaXMgcmV0cmlldmVkCiAgICAgKiB3aXRob3V0IHRoZSBBTVFQX0FVVE9BQ0sgZmxhZyB0aHJvdWdoIEFNUVBRdWV1ZTo6Z2V0KCkgb3IKICAgICAqIEFNUVBRdWV1ZTo6Y29uc3VtZSgpCiAgICAgKgogICAgICogQHBhcmFtIGludCAkZGVsaXZlcnlUYWcgVGhlIG1lc3NhZ2UgZGVsaXZlcnkgdGFnIG9mIHdoaWNoIHRvCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFja25vd2xlZGdlIHJlY2VpcHQuCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGZsYWdzICAgICAgICBUaGUgb25seSB2YWxpZCBmbGFnIHRoYXQgY2FuIGJlIHBhc3NlZCBpcwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTVFQX01VTFRJUExFLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUENoYW5uZWxFeGNlcHRpb24gICAgSWYgdGhlIGNoYW5uZWwgaXMgbm90IG9wZW4uCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBicm9rZXIgd2FzIGxvc3QuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhY2soJGRlbGl2ZXJ5VGFnLCAkZmxhZ3MgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQmluZCB0aGUgZ2l2ZW4gcXVldWUgdG8gYSByb3V0aW5nIGtleSBvbiBhbiBleGNoYW5nZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRleGNoYW5nZU5hbWUgTmFtZSBvZiB0aGUgZXhjaGFuZ2UgdG8gYmluZCB0by4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcm91dGluZ0tleSAgIFBhdHRlcm4gb3Igcm91dGluZyBrZXkgdG8gYmluZCB3aXRoLgogICAgICogQHBhcmFtIGFycmF5ICAkYXJndW1lbnRzICAgICBBZGRpdGlvbmFsIGJpbmRpbmcgYXJndW1lbnRzLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUENoYW5uZWxFeGNlcHRpb24gICAgSWYgdGhlIGNoYW5uZWwgaXMgbm90IG9wZW4uCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBicm9rZXIgd2FzIGxvc3QuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiaW5kKCRleGNoYW5nZU5hbWUsICRyb3V0aW5nS2V5ID0gbnVsbCwgYXJyYXkgJGFyZ3VtZW50cyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogQ2FuY2VsIGEgcXVldWUgdGhhdCBpcyBhbHJlYWR5IGJvdW5kIHRvIGFuIGV4Y2hhbmdlIGFuZCByb3V0aW5nIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb25zdW1lcl90YWcgVGhlIGNvbnN1bWVyIHRhZyBjYW5jZWwuIElmIG5vIHRhZyBwcm92aWRlZCwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBpdCBpcyBlbXB0eSBzdHJpbmcsIHRoZSBsYXRlc3QgY29uc3VtZXIKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcgb24gdGhpcyBxdWV1ZSB3aWxsIGJlIHVzZWQgYW5kIGFmdGVyCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bCByZXF1ZXN0IGl0IHdpbGwgc2V0IHRvIG51bGwuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgaXQgYWxzbyBlbXB0eSwgbm8gYGJhc2ljLmNhbmNlbGAKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IHdpbGwgYmUgc2VudC4gV2hlbiBjb25zdW1lcl90YWcgZ2l2ZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBpdCBlcXVhbHMgdG8gbGF0ZXN0IGNvbnN1bWVyX3RhZyBvbiBxdWV1ZSwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIGJlIGludGVycHJldGVkIGFzIGxhdGVzdCBjb25zdW1lcl90YWcgdXNhZ2UuCiAgICAgKgogICAgICogQHRocm93cyBBTVFQQ2hhbm5lbEV4Y2VwdGlvbiAgICBJZiB0aGUgY2hhbm5lbCBpcyBub3Qgb3Blbi4KICAgICAqIEB0aHJvd3MgQU1RUENvbm5lY3Rpb25FeGNlcHRpb24gSWYgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGJyb2tlciB3YXMgbG9zdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhbmNlbCgkY29uc3VtZXJfdGFnID0gJycpIHt9CgogICAgLyoqCiAgICAgKiBDb25zdW1lIG1lc3NhZ2VzIGZyb20gYSBxdWV1ZS4KICAgICAqCiAgICAgKiBCbG9ja2luZyBmdW5jdGlvbiB0aGF0IHdpbGwgcmV0cmlldmUgdGhlIG5leHQgbWVzc2FnZSBmcm9tIHRoZSBxdWV1ZSBhcwogICAgICogaXQgYmVjb21lcyBhdmFpbGFibGUgYW5kIHdpbGwgcGFzcyBpdCBvZmYgdG8gdGhlIGNhbGxiYWNrLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICRjYWxsYmFjayAgICBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHdoaWNoIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lZCBtZXNzYWdlIHdpbGwgYmUgcGFzc2VkLiBUaGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbXVzdCBhY2NlcHQgYXQgYSBtaW5pbXVtCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBwYXJhbWV0ZXIsIGFuIEFNUVBFbnZlbG9wZSBvYmplY3QsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbiBvcHRpb25hbCBzZWNvbmQgcGFyYW1ldGVyCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBBTVFQUXVldWUgb2JqZWN0IGZyb20gd2hpY2ggY2FsbGJhY2sKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIGludm9rZWQuIFRoZSBBTVFQUXVldWU6OmNvbnN1bWUoKSB3aWxsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCByZXR1cm4gdGhlIHByb2Nlc3NpbmcgdGhyZWFkIGJhY2sgdG8KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFBIUCBzY3JpcHQgdW50aWwgdGhlIGNhbGxiYWNrCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBjYWxsYmFjayBpcyBvbWl0dGVkIG9yIG51bGwgaXMgcGFzc2VkLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHRoZSBtZXNzYWdlcyBkZWxpdmVyZWQgdG8gdGhpcyBjbGllbnQgd2lsbAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgZmlyc3QgcmVhbCBjYWxsYmFjawogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkLiBUaGF0IGFsbG93cyBvbmUgdG8gaGF2ZSBhIHNpbmdsZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayBjb25zdW1pbmcgZnJvbSBtdWx0aXBsZSBxdWV1ZXMuCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGZsYWdzICAgICAgICBBIGJpdG1hc2sgb2YgYW55IG9mIHRoZSBmbGFnczogQU1RUF9BVVRPQUNLLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTVFQX0pVU1RfQ09OU1VNRS4gTm90ZTogd2hlbiBBTVFQX0pVU1RfQ09OU1VNRQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnIHVzZWQgYWxsIG90aGVyIGZsYWdzIGFyZSBpZ25vcmVkIGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29uc3VtZXJUYWcgcGFyYW1ldGVyIGhhcyBubyBzZW5zZS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1RUF9KVVNUX0NPTlNVTUUgZmxhZyBwcmV2ZW50IGZyb20gc2VuZGluZwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYmFzaWMuY29uc3VtZWAgcmVxdWVzdCBhbmQganVzdCBydW4gJGNhbGxiYWNrCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IHByb3ZpZGVkLiBDYWxsaW5nIG1ldGhvZCB3aXRoIGVtcHR5ICRjYWxsYmFjawogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgQU1RUF9KVVNUX0NPTlNVTUUgbWFrZXMgbm8gc2Vuc2UuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAkY29uc3VtZXJUYWcgQSBzdHJpbmcgZGVzY3JpYmluZyB0aGlzIGNvbnN1bWVyLiBVc2VkCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjYW5jZWxpbmcgc3Vic2NyaXB0aW9ucyB3aXRoIGNhbmNlbCgpLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUENoYW5uZWxFeGNlcHRpb24gICAgSWYgdGhlIGNoYW5uZWwgaXMgbm90IG9wZW4uCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBicm9rZXIgd2FzIGxvc3QuCiAgICAgKiBAdGhyb3dzIEFNUVBFbnZlbG9wZUV4Y2VwdGlvbiAgIFdoZW4gbm8gcXVldWUgZm91bmQgZm9yIGVudmVsb3BlLgogICAgICogQHRocm93cyBBTVFQUXVldWVFeGNlcHRpb24gICAgICBJZiB0aW1lb3V0IG9jY3VycyBvciBxdWV1ZSBpcyBub3QgZXhpc3RzLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29uc3VtZSgKICAgICAgICBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLAogICAgICAgICRmbGFncyA9IG51bGwsCiAgICAgICAgJGNvbnN1bWVyVGFnID0gbnVsbAogICAgKSB7fQoKICAgIC8qKgogICAgICogRGVjbGFyZSBhIG5ldyBxdWV1ZSBvbiB0aGUgYnJva2VyLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUENoYW5uZWxFeGNlcHRpb24gICAgSWYgdGhlIGNoYW5uZWwgaXMgbm90IG9wZW4uCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBicm9rZXIgd2FzIGxvc3QuCiAgICAgKiBAdGhyb3dzIEFNUVBRdWV1ZUV4Y2VwdGlvbiAgICAgIE9uIGZhaWx1cmUuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgdGhlIG1lc3NhZ2UgY291bnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNsYXJlUXVldWUoKSB7fQoKICAgIC8qKgogICAgICogRGVjbGFyZSBhIG5ldyBxdWV1ZSBvbiB0aGUgYnJva2VyLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUENoYW5uZWxFeGNlcHRpb24gSWYgdGhlIGNoYW5uZWwgaXMgbm90IG9wZW4uCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBicm9rZXIgd2FzIGxvc3QuCiAgICAgKiBAdGhyb3dzIEFNUVBRdWV1ZUV4Y2VwdGlvbiBPbiBmYWlsdXJlLgogICAgICoKICAgICAqIEByZXR1cm4gaW50IHRoZSBtZXNzYWdlIGNvdW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjbGFyZSgpOiBpbnQge30KCiAgICAvKioKICAgICAqIERlbGV0ZSBhIHF1ZXVlIGZyb20gdGhlIGJyb2tlci4KICAgICAqCiAgICAgKiBUaGlzIGluY2x1ZGVzIGl0cyBlbnRpcmUgY29udGVudHMgb2YgdW5yZWFkIG9yIHVuYWNrbm93bGVkZ2VkIG1lc3NhZ2VzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzICAgICAgICBPcHRpb25hbGx5IEFNUVBfSUZVTlVTRUQgY2FuIGJlIHNwZWNpZmllZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBpbmRpY2F0ZSB0aGUgcXVldWUgc2hvdWxkIG5vdCBiZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkIHVudGlsIG5vIGNsaWVudHMgYXJlIGNvbm5lY3RlZCB0bwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDaGFubmVsRXhjZXB0aW9uICAgIElmIHRoZSBjaGFubmVsIGlzIG5vdCBvcGVuLgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICoKICAgICAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2YgZGVsZXRlZCBtZXNzYWdlcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSgkZmxhZ3MgPSBBTVFQX05PUEFSQU0pIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgbmV4dCBtZXNzYWdlIGZyb20gdGhlIHF1ZXVlLgogICAgICoKICAgICAqIFJldHJpZXZlIHRoZSBuZXh0IGF2YWlsYWJsZSBtZXNzYWdlIGZyb20gdGhlIHF1ZXVlLiBJZiBubyBtZXNzYWdlcyBhcmUKICAgICAqIHByZXNlbnQgaW4gdGhlIHF1ZXVlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIE5VTEwgaW1tZWRpYXRlbHkuIFRoaXMKICAgICAqIGlzIGEgbm9uIGJsb2NraW5nIGFsdGVybmF0aXZlIHRvIHRoZSBBTVFQUXVldWU6OmNvbnN1bWUoKSBtZXRob2QuCiAgICAgKiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCBmbGFnIGZvciB0aGUgZmxhZ3MgcGFyYW1ldGVyIGlzCiAgICAgKiBBTVFQX0FVVE9BQ0suIElmIHRoaXMgZmxhZyBpcyBwYXNzZWQgaW4sIHRoZW4gdGhlIG1lc3NhZ2UgcmV0dXJuZWQgd2lsbAogICAgICogYXV0b21hdGljYWxseSBiZSBtYXJrZWQgYXMgYWNrbm93bGVkZ2VkIGJ5IHRoZSBicm9rZXIgYXMgc29vbiBhcyB0aGUKICAgICAqIGZyYW1lcyBhcmUgc2VudCB0byB0aGUgY2xpZW50LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIEEgYml0bWFzayBvZiBzdXBwb3J0ZWQgZmxhZ3MgZm9yIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCBjYWxsLiBDdXJyZW50bHksIHRoZSBvbmx5IHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBmbGFnIGlzIEFNUVBfQVVUT0FDSy4gSWYgdGhpcwogICAgICogICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgaXQgd2lsbCB1c2UgdGhlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgaW5pLXNldHRpbmcgYW1xcC5hdXRvX2Fjay4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDaGFubmVsRXhjZXB0aW9uICAgIElmIHRoZSBjaGFubmVsIGlzIG5vdCBvcGVuLgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICogQHRocm93cyBBTVFQUXVldWVFeGNlcHRpb24gICAgICBJZiBxdWV1ZSBpcyBub3QgZXhpc3QuCiAgICAgKgogICAgICogQHJldHVybiBBTVFQRW52ZWxvcGV8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRmbGFncyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgYWxsIHRoZSBmbGFncyBjdXJyZW50bHkgc2V0IG9uIHRoZSBnaXZlbiBxdWV1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBBbiBpbnRlZ2VyIGJpdG1hc2sgb2YgYWxsIHRoZSBmbGFncyBjdXJyZW50bHkgc2V0IG9uIHRoaXMKICAgICAqICAgICAgICAgICAgIGV4Y2hhbmdlIG9iamVjdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZsYWdzKCk6IGludCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb25maWd1cmVkIG5hbWUuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgY29uZmlndXJlZCBuYW1lIGFzIGEgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpOiA/c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBNYXJrIGEgbWVzc2FnZSBhcyBleHBsaWNpdGx5IG5vdCBhY2tub3dsZWRnZWQuCiAgICAgKgogICAgICogTWFyayB0aGUgbWVzc2FnZSBpZGVudGlmaWVkIGJ5IGRlbGl2ZXJ5X3RhZyBhcyBleHBsaWNpdGx5IG5vdAogICAgICogYWNrbm93bGVkZ2VkLiBUaGlzIG1ldGhvZCBjYW4gb25seSBiZSBjYWxsZWQgb24gbWVzc2FnZXMgdGhhdCBoYXZlIG5vdAogICAgICogeWV0IGJlZW4gYWNrbm93bGVkZ2VkLCBtZWFuaW5nIHRoYXQgbWVzc2FnZXMgcmV0cmlldmVkIHdpdGggYnkKICAgICAqIEFNUVBRdWV1ZTo6Y29uc3VtZSgpIGFuZCBBTVFQUXVldWU6OmdldCgpIGFuZCB1c2luZyB0aGUgQU1RUF9BVVRPQUNLCiAgICAgKiBmbGFnIGFyZSBub3QgZWxpZ2libGUuIFdoZW4gY2FsbGVkLCB0aGUgYnJva2VyIHdpbGwgaW1tZWRpYXRlbHkgcHV0IHRoZQogICAgICogbWVzc2FnZSBiYWNrIG9udG8gdGhlIHF1ZXVlLCBpbnN0ZWFkIG9mIHdhaXRpbmcgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMKICAgICAqIGNsb3NlZC4gVGhpcyBtZXRob2QgaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIFJhYmJpdE1RIGJyb2tlci4gVGhlCiAgICAgKiBiZWhhdmlvciBvZiBjYWxsaW5nIHRoaXMgbWV0aG9kIHdoaWxlIGNvbm5lY3RlZCB0byBhbnkgb3RoZXIgYnJva2VyIGlzCiAgICAgKiB1bmRlZmluZWQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkZGVsaXZlcnlUYWcgRGVsaXZlcnkgdGFnIG9mIGxhc3QgbWVzc2FnZSB0byByZWplY3QuCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyAgICAgICAgQU1RUF9SRVFVRVVFIHRvIHJlcXVldWUgdGhlIG1lc3NhZ2UocyksCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNUVBfTVVMVElQTEUgdG8gbmFjayBhbGwgcHJldmlvdXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5hY2tlZCBtZXNzYWdlcyBhcyB3ZWxsLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUENoYW5uZWxFeGNlcHRpb24gICAgSWYgdGhlIGNoYW5uZWwgaXMgbm90IG9wZW4uCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBicm9rZXIgd2FzIGxvc3QuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuYWNrKCRkZWxpdmVyeVRhZywgJGZsYWdzID0gQU1RUF9OT1BBUkFNKSB7fQoKICAgIC8qKgogICAgICogTWFyayBvbmUgbWVzc2FnZSBhcyBleHBsaWNpdGx5IG5vdCBhY2tub3dsZWRnZWQuCiAgICAgKgogICAgICogTWFyayB0aGUgbWVzc2FnZSBpZGVudGlmaWVkIGJ5IGRlbGl2ZXJ5X3RhZyBhcyBleHBsaWNpdGx5IG5vdAogICAgICogYWNrbm93bGVkZ2VkLiBUaGlzIG1ldGhvZCBjYW4gb25seSBiZSBjYWxsZWQgb24gbWVzc2FnZXMgdGhhdCBoYXZlIG5vdAogICAgICogeWV0IGJlZW4gYWNrbm93bGVkZ2VkLCBtZWFuaW5nIHRoYXQgbWVzc2FnZXMgcmV0cmlldmVkIHdpdGggYnkKICAgICAqIEFNUVBRdWV1ZTo6Y29uc3VtZSgpIGFuZCBBTVFQUXVldWU6OmdldCgpIGFuZCB1c2luZyB0aGUgQU1RUF9BVVRPQUNLCiAgICAgKiBmbGFnIGFyZSBub3QgZWxpZ2libGUuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkZGVsaXZlcnlUYWcgRGVsaXZlcnkgdGFnIG9mIHRoZSBtZXNzYWdlIHRvIHJlamVjdC4KICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkZmxhZ3MgICAgICAgIEFNUVBfUkVRVUVVRSB0byByZXF1ZXVlIHRoZSBtZXNzYWdlKHMpLgogICAgICoKICAgICAqIEB0aHJvd3MgQU1RUENoYW5uZWxFeGNlcHRpb24gICAgSWYgdGhlIGNoYW5uZWwgaXMgbm90IG9wZW4uCiAgICAgKiBAdGhyb3dzIEFNUVBDb25uZWN0aW9uRXhjZXB0aW9uIElmIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBicm9rZXIgd2FzIGxvc3QuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWplY3QoJGRlbGl2ZXJ5VGFnLCAkZmxhZ3MgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmVjb3ZlciB1bmFja25vd2xlZGdlZCBtZXNzYWdlcyBkZWxpdmVyZWQgdG8gdGhlIGN1cnJlbnQgY29uc3VtZXIuCiAgICAgKgogICAgICogUmVjb3ZlciBhbGwgdGhlIHVuYWNrbm93bGVkZ2VkIG1lc3NhZ2VzIGRlbGl2ZXJlZCB0byB0aGUgY3VycmVudCBjb25zdW1lci4KICAgICAqIElmICRyZXF1ZXVlIGlzIHRydWUsIHRoZSBicm9rZXIgY2FuIHJlZGVsaXZlciB0aGUgbWVzc2FnZXMgdG8gZGlmZmVyZW50CiAgICAgKiBjb25zdW1lcnMuIElmICRyZXF1ZXVlIGlzIEZBTFNFLCBpdCBjYW4gb25seSByZWRlbGl2ZXIgaXQgdG8gdGhlIGN1cnJlbnQKICAgICAqIGNvbnN1bWVyLiBSYWJiaXRNUSBkb2VzIG5vdCBpbXBsZW1lbnQgJHJlcXVlc3QgPSBmYWxzZS4KICAgICAqIFRoaXMgbWV0aG9kIGV4cG9zZXMgYGJhc2ljLnJlY292ZXJgIGZyb20gdGhlIEFNUVAgc3BlYy4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkcmVxdWV1ZSBJZiBUUlVFLCBkZWxpdmVyIHRvIGFueSBjb25zdW1lciwgaWYgRkFMU0UsIGRlbGl2ZXIgdG8gdGhlIGN1cnJlbnQgY29uc3VtZXIgb25seQogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICogQHRocm93cyBBTVFQQ2hhbm5lbEV4Y2VwdGlvbiBJZiB0aGUgY2hhbm5lbCBpcyBub3Qgb3Blbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlY292ZXIoYm9vbCAkcmVxdWV1ZSA9IHRydWUpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBQdXJnZSB0aGUgY29udGVudHMgb2YgYSBxdWV1ZS4KICAgICAqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcHVyZ2VkIG1lc3NhZ2VzCiAgICAgKgogICAgICogQHRocm93cyBBTVFQQ2hhbm5lbEV4Y2VwdGlvbiAgICBJZiB0aGUgY2hhbm5lbCBpcyBub3Qgb3Blbi4KICAgICAqIEB0aHJvd3MgQU1RUENvbm5lY3Rpb25FeGNlcHRpb24gSWYgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGJyb2tlciB3YXMgbG9zdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHVyZ2UoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBhcmd1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhcmd1bWVudE5hbWUgVGhlIGtleSB0byBsb29rIHVwLgogICAgICogQHRocm93cyBBTVFQUXVldWVFeGNlcHRpb24gSWYga2V5IGRvZXMgbm90IGV4aXN0CiAgICAgKiBAcmV0dXJuIGJvb2x8aW50fGZsb2F0fHN0cmluZ3xudWxsfGFycmF5fEFNUVBWYWx1ZXxBTVFQRGVjaW1hbHxBTVFQVGltZXN0YW1wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBcmd1bWVudCgkYXJndW1lbnROYW1lKSB7fQoKICAgIC8qKgogICAgICogU2V0IGEgcXVldWUgYXJndW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYXJndW1lbnROYW1lIFRoZSBrZXkgdG8gc2V0LgogICAgICogQHBhcmFtIGJvb2x8aW50fGZsb2F0fHN0cmluZ3xudWxsfGFycmF5fEFNUVBWYWx1ZXxBTVFQRGVjaW1hbHxBTVFQVGltZXN0YW1wICRhcmd1bWVudFZhbHVlIFRoZSBhcmd1bWVudCB2YWx1ZSB0byBzZXQuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBcmd1bWVudChzdHJpbmcgJGFyZ3VtZW50TmFtZSwgJGFyZ3VtZW50VmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgYSBxdWV1ZSBhcmd1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhcmd1bWVudE5hbWUgVGhlIGFyZ3VtZW50IG5hbWUgdG8gc2V0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQXJndW1lbnQoc3RyaW5nICRhcmd1bWVudE5hbWUpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBTZXQgYWxsIGFyZ3VtZW50cyBvbiB0aGUgZ2l2ZW4gcXVldWUuCiAgICAgKgogICAgICogQWxsIG90aGVyIGFyZ3VtZW50IHNldHRpbmdzIHdpbGwgYmUgd2lwZWQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRhcmd1bWVudHMgQW4gYXJyYXkgb2YgbmFtZS92YWx1ZSBwYWlycyBvZiBhcmd1bWVudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBcmd1bWVudHMoYXJyYXkgJGFyZ3VtZW50cyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEdldCBhbGwgc2V0IGFyZ3VtZW50cyBhcyBhbiBhcnJheSBvZiBrZXkvdmFsdWUgcGFpcnMuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgc2V0IGtleS92YWx1ZSBwYWlycy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFyZ3VtZW50cygpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgd2hldGhlciBhIHF1ZXVlIGhhcyBzcGVjaWZpYyBhcmd1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhcmd1bWVudE5hbWUgVGhlIGFyZ3VtZW50IG5hbWUgdG8gY2hlY2suCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNBcmd1bWVudChzdHJpbmcgJGFyZ3VtZW50TmFtZSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgZmxhZ3Mgb24gdGhlIHF1ZXVlLgogICAgICoKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkZmxhZ3MgQSBiaXRtYXNrIG9mIGZsYWdzOgogICAgICogICAgICAgICAgICAgICAgICAgICAgIEFNUVBfRFVSQUJMRSwgQU1RUF9QQVNTSVZFLAogICAgICogICAgICAgICAgICAgICAgICAgICAgIEFNUVBfRVhDTFVTSVZFLCBBTVFQX0FVVE9ERUxFVEUuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGbGFncygkZmxhZ3MgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBxdWV1ZSBuYW1lLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIHF1ZXVlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TmFtZSgkbmFtZSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBhIHJvdXRpbmcga2V5IGJpbmRpbmcgb24gYW4gZXhjaGFuZ2UgZnJvbSB0aGUgZ2l2ZW4gcXVldWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZXhjaGFuZ2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBleGNoYW5nZSBvbiB3aGljaCB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUgaXMgYm91bmQuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJvdXRpbmdLZXkgICBUaGUgYmluZGluZyByb3V0aW5nIGtleSB1c2VkIGJ5IHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS4KICAgICAqIEBwYXJhbSBhcnJheSAgJGFyZ3VtZW50cyAgICAgQWRkaXRpb25hbCBiaW5kaW5nIGFyZ3VtZW50cy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEFNUVBDaGFubmVsRXhjZXB0aW9uICAgIElmIHRoZSBjaGFubmVsIGlzIG5vdCBvcGVuLgogICAgICogQHRocm93cyBBTVFQQ29ubmVjdGlvbkV4Y2VwdGlvbiBJZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgYnJva2VyIHdhcyBsb3N0LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5iaW5kKCRleGNoYW5nZU5hbWUsICRyb3V0aW5nS2V5ID0gbnVsbCwgYXJyYXkgJGFyZ3VtZW50cyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBBTVFQQ2hhbm5lbCBvYmplY3QgaW4gdXNlCiAgICAgKgogICAgICogQHJldHVybiBBTVFQQ2hhbm5lbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hhbm5lbCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIEFNUVBDb25uZWN0aW9uIG9iamVjdCBpbiB1c2UKICAgICAqCiAgICAgKiBAcmV0dXJuIEFNUVBDb25uZWN0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25uZWN0aW9uKCkge30KCiAgICAvKioKICAgICAqIEdldCBsYXRlc3QgY29uc3VtZXIgdGFnLiBJZiBubyBjb25zdW1lciBhdmFpbGFibGUgb3IgdGhlIGxhdGVzdCBvbiB3YXMgY2FuY2VsZWQgbnVsbCB3aWxsIGJlIHJldHVybmVkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnN1bWVyVGFnKCkge30KfQoKLyoqCiAqIHN0dWIgY2xhc3MgcmVwcmVzZW50aW5nIEFNUVBRdWV1ZUV4Y2VwdGlvbiBmcm9tIHBlY2wtYW1xcAogKi8KY2xhc3MgQU1RUFF1ZXVlRXhjZXB0aW9uIGV4dGVuZHMgQU1RUEV4Y2VwdGlvbiB7fQoKY2xhc3MgQU1RUFZhbHVlRXhjZXB0aW9uIGV4dGVuZHMgQU1RUEV4Y2VwdGlvbiB7fQoKLyoqCiAqIHN0dWIgY2xhc3MgcmVwcmVzZW50aW5nIEFNUVBUaW1lc3RhbXAgZnJvbSBwZWNsLWFtcXAKICovCmZpbmFsIC8qIHJlYWRvbmx5ICovIGNsYXNzIEFNUVBUaW1lc3RhbXAgaW1wbGVtZW50cyBBTVFQVmFsdWUKewogICAgcHVibGljIGNvbnN0IE1JTiA9IDAuMDsKICAgIHB1YmxpYyBjb25zdCBNQVggPSAxODQ0Njc0NDA3MzcwOTU1MTYxNjsKCiAgICAvKioKICAgICAqIEB0aHJvd3MgQU1RUFZhbHVlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChmbG9hdCAkdGltZXN0YW1wKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lc3RhbXAoKTogZmxvYXQge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BbXFwVmFsdWUoKTogZmxvYXR8YXJyYXl8QU1RUERlY2ltYWx8Ym9vbHxpbnR8QU1RUFZhbHVlfHN0cmluZ3xBTVFQVGltZXN0YW1wfG51bGwge30KfQoKLyoqCiAqIHN0dWIgY2xhc3MgcmVwcmVzZW50aW5nIEFNUVBFeGNoYW5nZVZhbHVlIGZyb20gcGVjbC1hbXFwCiAqLwpjbGFzcyBBTVFQRXhjaGFuZ2VWYWx1ZSBleHRlbmRzIEFNUVBFeGNlcHRpb24ge30KPD9waHAKCi8vIFN0YXJ0IG9mIGVuY2hhbnQgdi4xLjEuMAp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXERlcHJlY2F0ZWQ7CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGVuY2hhbnQgJmd0Oz0gMC4xLjAgKTxici8+CiAqIGNyZWF0ZSBhIG5ldyBicm9rZXIgb2JqZWN0IGNhcGFibGUgb2YgcmVxdWVzdGluZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtYnJva2VyLWluaXQucGhwCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2V8RW5jaGFudEJyb2tlciBhIGJyb2tlciByZXNvdXJjZSBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPi4KICovCmZ1bmN0aW9uIGVuY2hhbnRfYnJva2VyX2luaXQoKSB7fQoKLyoqCiAqIEZyZWUgdGhlIGJyb2tlciByZXNvdXJjZSBhbmQgaXRzIGRpY3Rpb25hcmllcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtYnJva2VyLWZyZWUucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxFbmNoYW50QnJva2VyICRicm9rZXIgPHA+CiAqIEJyb2tlciByZXNvdXJjZQogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS4zCiAqLwojW0RlcHJlY2F0ZWQocmVhc29uOiAiVW5zZXQgdGhlIG9iamVjdCBpbnN0ZWFkIiwgc2luY2U6ICc4LjAnKV0KZnVuY3Rpb24gZW5jaGFudF9icm9rZXJfZnJlZSgkYnJva2VyKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBlbmNoYW50ICZndDs9IDAuMS4wICk8YnIvPgogKiBSZXR1cm5zIHRoZSBsYXN0IGVycm9yIG9mIHRoZSBicm9rZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5lbmNoYW50LWJyb2tlci1nZXQtZXJyb3IucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxFbmNoYW50QnJva2VyICRicm9rZXIgPHA+CiAqIEJyb2tlciByZXNvdXJjZS4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBSZXR1cm4gdGhlIG1zZyBzdHJpbmcgaWYgYW4gZXJyb3Igd2FzIGZvdW5kIG9yIDxiPkZBTFNFPC9iPgogKi8KZnVuY3Rpb24gZW5jaGFudF9icm9rZXJfZ2V0X2Vycm9yKCRicm9rZXIpIHt9CgovKioKICogU2V0IHRoZSBkaXJlY3RvcnkgcGF0aCBmb3IgYSBnaXZlbiBiYWNrZW5kCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtYnJva2VyLXNldC1kaWN0LXBhdGgucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxFbmNoYW50QnJva2VyICRicm9rZXIKICogQHBhcmFtIGludCAkZGljdF90eXBlCiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnOC4wJywgcmVhc29uOiAnUmVseWluZyBvbiB0aGlzIGZ1bmN0aW9uIGlzIGhpZ2hseSBkaXNjb3VyYWdlZC4nKV0KZnVuY3Rpb24gZW5jaGFudF9icm9rZXJfc2V0X2RpY3RfcGF0aCgkYnJva2VyLCBpbnQgJGRpY3RfdHlwZSwgc3RyaW5nICR2YWx1ZSkge30KCi8qKgogKiBHZXQgdGhlIGRpcmVjdG9yeSBwYXRoIGZvciBhIGdpdmVuIGJhY2tlbmQKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZW5jaGFudC1icm9rZXItZ2V0LWRpY3QtcGF0aC5waHAKICogQHBhcmFtIHJlc291cmNlfEVuY2hhbnRCcm9rZXIgJGJyb2tlcgogKiBAcGFyYW0gaW50ICRkaWN0X3R5cGUKICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzguMCcsIHJlYXNvbjogJ1JlbHlpbmcgb24gdGhpcyBmdW5jdGlvbiBpcyBoaWdobHkgZGlzY291cmFnZWQuJyldCmZ1bmN0aW9uIGVuY2hhbnRfYnJva2VyX2dldF9kaWN0X3BhdGgoJGJyb2tlciwgJGRpY3RfdHlwZSkge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgZW5jaGFudCAmZ3Q7PSAxLjAuMSk8YnIvPgogKiBSZXR1cm5zIGEgbGlzdCBvZiBhdmFpbGFibGUgZGljdGlvbmFyaWVzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZW5jaGFudC1icm9rZXItbGlzdC1kaWN0cy5waHAKICogQHBhcmFtIHJlc291cmNlfEVuY2hhbnRCcm9rZXIgJGJyb2tlciA8cD4KICogQnJva2VyIHJlc291cmNlCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFuIGFycmF5IG9mIGF2YWlsYWJsZSBkaWN0aW9uYXJpZXMgd2l0aCB0aGVpciBkZXRhaWxzLgogKi8KZnVuY3Rpb24gZW5jaGFudF9icm9rZXJfbGlzdF9kaWN0cygkYnJva2VyKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBlbmNoYW50ICZndDs9IDAuMS4wICk8YnIvPgogKiBjcmVhdGUgYSBuZXcgZGljdGlvbmFyeSB1c2luZyBhIHRhZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtYnJva2VyLXJlcXVlc3QtZGljdC5waHAKICogQHBhcmFtIHJlc291cmNlfEVuY2hhbnRCcm9rZXIgJGJyb2tlciA8cD4KICogQnJva2VyIHJlc291cmNlCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdGFnIDxwPgogKiBBIHRhZyBkZXNjcmliaW5nIHRoZSBsb2NhbGUsIGZvciBleGFtcGxlIGVuX1VTLCBkZV9ERQogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2V8RW5jaGFudERpY3Rpb25hcnkgYSBkaWN0aW9uYXJ5IHJlc291cmNlIG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3QoJGJyb2tlciwgJHRhZykge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgZW5jaGFudCAmZ3Q7PSAwLjEuMCApPGJyLz4KICogY3JlYXRlcyBhIGRpY3Rpb25hcnkgdXNpbmcgYSBQV0wgZmlsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtYnJva2VyLXJlcXVlc3QtcHdsLWRpY3QucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxFbmNoYW50QnJva2VyICRicm9rZXIgPHA+CiAqIEJyb2tlciByZXNvdXJjZQogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIDxwPgogKiBQYXRoIHRvIHRoZSBQV0wgZmlsZS4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlfEVuY2hhbnREaWN0aW9uYXJ5IGEgZGljdGlvbmFyeSByZXNvdXJjZSBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZW5jaGFudF9icm9rZXJfcmVxdWVzdF9wd2xfZGljdCgkYnJva2VyLCAkZmlsZW5hbWUpIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGVuY2hhbnQgJmd0Oz0gMC4xLjAgKTxici8+CiAqIEZyZWUgYSBkaWN0aW9uYXJ5IHJlc291cmNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZW5jaGFudC1icm9rZXItZnJlZS1kaWN0LnBocAogKiBAcGFyYW0gcmVzb3VyY2V8RW5jaGFudERpY3Rpb25hcnkgJGRpY3QgPHA+CiAqIERpY3Rpb25hcnkgcmVzb3VyY2UuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwojW0RlcHJlY2F0ZWQoIlVuc2V0IHRoZSBvYmplY3QgaW5zdGVhZCIsIHNpbmNlOiAnOC4wJyldCmZ1bmN0aW9uIGVuY2hhbnRfYnJva2VyX2ZyZWVfZGljdCgkZGljdCkge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgZW5jaGFudCAmZ3Q7PSAwLjEuMCApPGJyLz4KICogV2hldGhlciBhIGRpY3Rpb25hcnkgZXhpc3RzIG9yIG5vdC4gVXNpbmcgbm9uLWVtcHR5IHRhZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtYnJva2VyLWRpY3QtZXhpc3RzLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8RW5jaGFudEJyb2tlciAkYnJva2VyIDxwPgogKiBCcm9rZXIgcmVzb3VyY2UKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR0YWcgPHA+CiAqIG5vbi1lbXB0eSB0YWcgaW4gdGhlIExPQ0FMRSBmb3JtYXQsIGV4OiB1c19VUywgY2hfREUsIGV0Yy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gd2hlbiB0aGUgdGFnIGV4aXN0IG9yIDxiPkZBTFNFPC9iPiB3aGVuIG5vdC4KICovCmZ1bmN0aW9uIGVuY2hhbnRfYnJva2VyX2RpY3RfZXhpc3RzKCRicm9rZXIsICR0YWcpIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGVuY2hhbnQgJmd0Oz0gMC4xLjAgKTxici8+CiAqIERlY2xhcmVzIGEgcHJlZmVyZW5jZSBvZiBkaWN0aW9uYXJpZXMgdG8gdXNlIGZvciB0aGUgbGFuZ3VhZ2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5lbmNoYW50LWJyb2tlci1zZXQtb3JkZXJpbmcucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxFbmNoYW50QnJva2VyICRicm9rZXIgPHA+CiAqIEJyb2tlciByZXNvdXJjZQogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHRhZyA8cD4KICogTGFuZ3VhZ2UgdGFnLiBUaGUgc3BlY2lhbCAiKiIgdGFnIGNhbiBiZSB1c2VkIGFzIGEgbGFuZ3VhZ2UgdGFnCiAqIHRvIGRlY2xhcmUgYSBkZWZhdWx0IG9yZGVyaW5nIGZvciBhbnkgbGFuZ3VhZ2UgdGhhdCBkb2VzIG5vdAogKiBleHBsaWNpdGx5IGRlY2xhcmUgYW4gb3JkZXJpbmcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkb3JkZXJpbmcgPHA+CiAqIENvbW1hIGRlbGltaXRlZCBsaXN0IG9mIHByb3ZpZGVyIG5hbWVzCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBlbmNoYW50X2Jyb2tlcl9zZXRfb3JkZXJpbmcoJGJyb2tlciwgJHRhZywgJG9yZGVyaW5nKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBlbmNoYW50ICZndDs9IDAuMS4wKTxici8+CiAqIEVudW1lcmF0ZXMgdGhlIEVuY2hhbnQgcHJvdmlkZXJzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZW5jaGFudC1icm9rZXItZGVzY3JpYmUucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxFbmNoYW50QnJva2VyICRicm9rZXIgPHA+CiAqIEJyb2tlciByZXNvdXJjZQogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UKICovCmZ1bmN0aW9uIGVuY2hhbnRfYnJva2VyX2Rlc2NyaWJlKCRicm9rZXIpIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGVuY2hhbnQgJmd0Oz0gMC4xLjAgKTxici8+CiAqIENoZWNrIHdoZXRoZXIgYSB3b3JkIGlzIGNvcnJlY3RseSBzcGVsbGVkIG9yIG5vdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtZGljdC1jaGVjay5waHAKICogQHBhcmFtIHJlc291cmNlfEVuY2hhbnREaWN0aW9uYXJ5ICRkaWN0IDxwPgogKiBEaWN0aW9uYXJ5IHJlc291cmNlCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkd29yZCA8cD4KICogVGhlIHdvcmQgdG8gY2hlY2sKICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlIHdvcmQgaXMgc3BlbGxlZCBjb3JyZWN0bHksIDxiPkZBTFNFPC9iPiBpZiBub3QuCiAqLwpmdW5jdGlvbiBlbmNoYW50X2RpY3RfY2hlY2soJGRpY3QsICR3b3JkKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBlbmNoYW50ICZndDs9IDAuMS4wICk8YnIvPgogKiBXaWxsIHJldHVybiBhIGxpc3Qgb2YgdmFsdWVzIGlmIGFueSBvZiB0aG9zZSBwcmUtY29uZGl0aW9ucyBhcmUgbm90IG1ldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtZGljdC1zdWdnZXN0LnBocAogKiBAcGFyYW0gcmVzb3VyY2V8RW5jaGFudERpY3Rpb25hcnkgJGRpY3QgPHA+CiAqIERpY3Rpb25hcnkgcmVzb3VyY2UKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR3b3JkIDxwPgogKiBXb3JkIHRvIHVzZSBmb3IgdGhlIHN1Z2dlc3Rpb25zLgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgV2lsbCByZXR1cm5zIGFuIGFycmF5IG9mIHN1Z2dlc3Rpb25zIGlmIHRoZSB3b3JkIGlzIGJhZCBzcGVsbGVkLgogKi8KZnVuY3Rpb24gZW5jaGFudF9kaWN0X3N1Z2dlc3QoJGRpY3QsICR3b3JkKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBlbmNoYW50ICZndDs9IDAuMS4wICk8YnIvPgogKiBhZGQgYSB3b3JkIHRvIHBlcnNvbmFsIHdvcmQgbGlzdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtZGljdC1hZGQtdG8tcGVyc29uYWwucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZGljdCA8cD4KICogRGljdGlvbmFyeSByZXNvdXJjZQogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHdvcmQgPHA+CiAqIFRoZSB3b3JkIHRvIGFkZAogKiA8L3A+CiAqIEByZXR1cm4gdm9pZAogKiBAc2VlIGVuY2hhbnRfZGljdF9hZGQoKQogKi8KI1tEZXByZWNhdGVkKAogICAgcmVhc29uOiAnVXNlIGVuY2hhbnRfZGljdF9hZGQgaW5zdGVhZCcsCiAgICByZXBsYWNlbWVudDogJ2VuY2hhbnRfZGljdF9hZGQoJXBhcmFtZXRlcjAlLCAlcGFyYW1ldGVyMSUpJywKICAgIHNpbmNlOiAnOC4wJwopXQpmdW5jdGlvbiBlbmNoYW50X2RpY3RfYWRkX3RvX3BlcnNvbmFsKCRkaWN0LCAkd29yZCkge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgZW5jaGFudCAmZ3Q7PSAwLjEuMCApPGJyLz4KICogYWRkICd3b3JkJyB0byB0aGlzIHNwZWxsLWNoZWNraW5nIHNlc3Npb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5lbmNoYW50LWRpY3QtYWRkLXRvLXNlc3Npb24ucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxFbmNoYW50RGljdGlvbmFyeSAkZGljdCA8cD4KICogRGljdGlvbmFyeSByZXNvdXJjZQogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHdvcmQgPHA+CiAqIFRoZSB3b3JkIHRvIGFkZAogKiA8L3A+CiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gZW5jaGFudF9kaWN0X2FkZF90b19zZXNzaW9uKCRkaWN0LCAkd29yZCkge30KCi8qKgogKiAoUEhQIDgpPGJyLz4KICogQWRkIGEgd29yZCB0byBwZXJzb25hbCB3b3JkIGxpc3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5lbmNoYW50LWRpY3QtYWRkLnBocAogKiBAcGFyYW0gRW5jaGFudERpY3Rpb25hcnkgJGRpY3Rpb25hcnkgPHA+CiAqIEFuIEVuY2hhbnQgZGljdGlvbmFyeSByZXR1cm5lZCBieSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3QoKSBvciBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X3B3bF9kaWN0KCkuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkd29yZCA8cD4KICogVGhlIHdvcmQgdG8gYWRkCiAqIDwvcD4KICogQHJldHVybiB2b2lkCiAqIEBzaW5jZSA4LjAKICovCmZ1bmN0aW9uIGVuY2hhbnRfZGljdF9hZGQoJGRpY3Rpb25hcnksICR3b3JkKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBlbmNoYW50ICZndDs9IDAuMS4wICk8YnIvPgogKiB3aGV0aGVyIG9yIG5vdCAnd29yZCcgZXhpc3RzIGluIHRoaXMgc3BlbGxpbmctc2Vzc2lvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtZGljdC1pcy1pbi1zZXNzaW9uLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGRpY3QgPHA+CiAqIERpY3Rpb25hcnkgcmVzb3VyY2UKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR3b3JkIDxwPgogKiBUaGUgd29yZCB0byBsb29rdXAKICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlIHdvcmQgZXhpc3RzIG9yIDxiPkZBTFNFPC9iPgogKiBAc2VlIGVuY2hhbnRfZGljdF9pc19hZGRlZAogKi8KI1tEZXByZWNhdGVkKAogICAgcmVhc29uOiAnVXNlIGVuY2hhbnRfZGljdF9pc19hZGRlZCBpbnN0ZWFkJywKICAgIHJlcGxhY2VtZW50OiAnZW5jaGFudF9kaWN0X2lzX2FkZGVkKCVwYXJhbWV0ZXIwJSwgJXBhcmFtZXRlcjElKScsCiAgICBzaW5jZTogJzguMCcKKV0KZnVuY3Rpb24gZW5jaGFudF9kaWN0X2lzX2luX3Nlc3Npb24oJGRpY3QsICR3b3JkKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBlbmNoYW50ICZndDs9IDAuMS4wICk8YnIvPgogKiBBZGQgYSBjb3JyZWN0aW9uIGZvciBhIHdvcmQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5lbmNoYW50LWRpY3Qtc3RvcmUtcmVwbGFjZW1lbnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxFbmNoYW50RGljdGlvbmFyeSAkZGljdCA8cD4KICogRGljdGlvbmFyeSByZXNvdXJjZQogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG1pcyA8cD4KICogVGhlIHdvcmsgdG8gZml4CiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY29yIDxwPgogKiBUaGUgY29ycmVjdCB3b3JkCiAqIDwvcD4KICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBlbmNoYW50X2RpY3Rfc3RvcmVfcmVwbGFjZW1lbnQoJGRpY3QsICRtaXMsICRjb3IpIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGVuY2hhbnQgJmd0Oz0gMC4xLjAgKTxici8+CiAqIFJldHVybnMgdGhlIGxhc3QgZXJyb3Igb2YgdGhlIGN1cnJlbnQgc3BlbGxpbmctc2Vzc2lvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtZGljdC1nZXQtZXJyb3IucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxFbmNoYW50RGljdGlvbmFyeSAkZGljdCA8cD4KICogRGljdGluYXJheSByZXNvdXJjZQogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBlcnJvciBtZXNzYWdlIGFzIHN0cmluZyBvciA8Yj5GQUxTRTwvYj4gaWYgbm8gZXJyb3Igb2NjdXJyZWQuCiAqLwpmdW5jdGlvbiBlbmNoYW50X2RpY3RfZ2V0X2Vycm9yKCRkaWN0KSB7fQoKLyoqCiAqIChQSFAgOCk8YnIvPgogKiBXaGV0aGVyIG9yIG5vdCAnd29yZCcgZXhpc3RzIGluIHRoaXMgc3BlbGxpbmctc2Vzc2lvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtZGljdC1pcy1hZGRlZC5waHAKICogQHBhcmFtIEVuY2hhbnREaWN0aW9uYXJ5ICRkaWN0aW9uYXJ5IDxwPgogKiBBbiBFbmNoYW50IGRpY3Rpb25hcnkgcmV0dXJuZWQgYnkgZW5jaGFudF9icm9rZXJfcmVxdWVzdF9kaWN0KCkgb3IgZW5jaGFudF9icm9rZXJfcmVxdWVzdF9wd2xfZGljdCgpLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHdvcmQgPHA+CiAqIFRoZSB3b3JkIHRvIGxvb2t1cAogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiB0aGUgd29yZCBleGlzdHMgb3IgPGI+RkFMU0U8L2I+CiAqIEBzaW5jZSA4LjAKICovCmZ1bmN0aW9uIGVuY2hhbnRfZGljdF9pc19hZGRlZCgkZGljdGlvbmFyeSwgJHdvcmQpIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGVuY2hhbnQgJmd0Oz0gMC4xLjAgKTxici8+CiAqIERlc2NyaWJlcyBhbiBpbmRpdmlkdWFsIGRpY3Rpb25hcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5lbmNoYW50LWRpY3QtZGVzY3JpYmUucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxFbmNoYW50RGljdGlvbmFyeSAkZGljdCA8cD4KICogRGljdGlvbmFyeSByZXNvdXJjZQogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyB0aGUgZGV0YWlscyBvZiB0aGUgZGljdGlvbmFyeS4KICovCmZ1bmN0aW9uIGVuY2hhbnRfZGljdF9kZXNjcmliZSgkZGljdCkge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgZW5jaGFudDowLjIuMC0xLjAuMSk8YnIvPgogKiBDaGVjayB0aGUgd29yZCBpcyBjb3JyZWN0bHkgc3BlbGxlZCBhbmQgcHJvdmlkZSBzdWdnZXN0aW9ucwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVuY2hhbnQtZGljdC1xdWljay1jaGVjay5waHAKICogQHBhcmFtIHJlc291cmNlfEVuY2hhbnREaWN0aW9uYXJ5ICRkaWN0IDxwPgogKiBEaWN0aW9uYXJ5IHJlc291cmNlCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkd29yZCA8cD4KICogVGhlIHdvcmQgdG8gY2hlY2sKICogPC9wPgogKiBAcGFyYW0gbnVsbHxhcnJheSAmJHN1Z2dlc3Rpb25zIFtvcHRpb25hbF0gPHA+CiAqIElmIHRoZSB3b3JkIGlzIG5vdCBjb3JyZWN0bHkgc3BlbGxlZCwgdGhpcyB2YXJpYWJsZSB3aWxsCiAqIGNvbnRhaW4gYW4gYXJyYXkgb2Ygc3VnZ2VzdGlvbnMuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIHRoZSB3b3JkIGlzIGNvcnJlY3RseSBzcGVsbGVkIG9yIDxiPkZBTFNFPC9iPgogKi8KZnVuY3Rpb24gZW5jaGFudF9kaWN0X3F1aWNrX2NoZWNrKCRkaWN0LCAkd29yZCwgP2FycmF5ICYkc3VnZ2VzdGlvbnMgPSBudWxsKSB7fQoKLyoqCiAqIEBkZXByZWNhdGVkIDguMAogKi8KZGVmaW5lKCdFTkNIQU5UX01ZU1BFTEwnLCAxKTsKLyoqCiAqIEBkZXByZWNhdGVkIDguMAogKi8KZGVmaW5lKCdFTkNIQU5UX0lTUEVMTCcsIDIpOwoKZmluYWwgY2xhc3MgRW5jaGFudEJyb2tlciB7fQoKZmluYWwgY2xhc3MgRW5jaGFudERpY3Rpb25hcnkge30KLy8gRW5kIG9mIGVuY2hhbnQgdi4xLjEuMAo8Y29tcG9uZW50IG5hbWU9Ikluc3BlY3Rpb25Qcm9qZWN0UHJvZmlsZU1hbmFnZXIiPgogIDxwcm9maWxlIHZlcnNpb249IjEuMCI+CiAgICA8b3B0aW9uIG5hbWU9Im15TmFtZSIgdmFsdWU9IlByb2plY3QgRGVmYXVsdCIgLz4KICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IkxvZ2dlckluaXRpYWxpemVkV2l0aEZvcmVpZ25DbGFzcyIgZW5hYmxlZD0iZmFsc2UiIGxldmVsPSJXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9ImZhbHNlIj4KICAgICAgPG9wdGlvbiBuYW1lPSJsb2dnZXJDbGFzc05hbWUiIHZhbHVlPSJvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcixvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeSxvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5LGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlciIgLz4KICAgICAgPG9wdGlvbiBuYW1lPSJsb2dnZXJGYWN0b3J5TWV0aG9kTmFtZSIgdmFsdWU9ImdldExvZ2dlcixnZXRMb2dnZXIsZ2V0TG9nLGdldExvZ2dlciIgLz4KICAgIDwvaW5zcGVjdGlvbl90b29sPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwQXNzaWdubWVudEluQ29uZGl0aW9uSW5zcGVjdGlvbiIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldFQUsgV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwQXNzaWdubWVudFJlcGxhY2VhYmxlV2l0aE9wZXJhdG9yQXNzaWdubWVudEluc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXRUFLIFdBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlBocEFzc2lnbm1lbnRSZXBsYWNlYWJsZVdpdGhQcmVmaXhFeHByZXNzaW9uSW5zcGVjdGlvbiIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldFQUsgV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwQ29tcG91bmROYW1lc3BhY2VEZXB0aEluc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXRUFLIFdBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlBocERpdmlzaW9uQnlaZXJvSW5zcGVjdGlvbiIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlBocERvY1NpZ25hdHVyZUluc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXRUFLIFdBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSI+CiAgICAgIDxvcHRpb24gbmFtZT0iQUxMT1dfTUlTU0lOR19QQVJBTUVURVJTIiB2YWx1ZT0idHJ1ZSIgLz4KICAgIDwvaW5zcGVjdGlvbl90b29sPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwRmllbGRDYW5CZVByb21vdGVkSW5zcGVjdGlvbiIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldFQUsgV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwSW5jb21wYXRpYmxlUmV0dXJuVHlwZUluc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiPgogICAgICA8b3B0aW9uIG5hbWU9IlNUUklDVF9UWVBFX0NIRUNLSU5HIiB2YWx1ZT0idHJ1ZSIgLz4KICAgIDwvaW5zcGVjdGlvbl90b29sPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwTG9uZ1R5cGVGb3JtSW5zcGVjdGlvbiIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldFQUsgV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwTWV0aG9kT3JDbGFzc0NhbGxJc05vdENhc2VTZW5zaXRpdmVJbnNwZWN0aW9uIiBlbmFibGVkPSJ0cnVlIiBsZXZlbD0iV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwTWlzc2luZ1N0cmljdFR5cGVzRGVjbGFyYXRpb25JbnNwZWN0aW9uIiBlbmFibGVkPSJ0cnVlIiBsZXZlbD0iV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwTWlzc2luZ1Zpc2liaWxpdHlJbnNwZWN0aW9uIiBlbmFibGVkPSJ0cnVlIiBsZXZlbD0iV0VBSyBXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiIC8+CiAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJQaHBNb2RpZmllck9yZGVySW5zcGVjdGlvbiIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldFQUsgV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwTXVsdGlwbGVDbGFzc0RlY2xhcmF0aW9uc0luc3BlY3Rpb24iIGVuYWJsZWQ9ImZhbHNlIiBsZXZlbD0iV0VBSyBXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9ImZhbHNlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwTmV3Q2xhc3NNaXNzaW5nUGFyYW1ldGVyTGlzdEluc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXRUFLIFdBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlBocE92ZXJyaWRpbmdNZXRob2RWaXNpYmlsaXR5SW5zcGVjdGlvbiIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldFQUsgV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwU2VwYXJhdGVFbHNlSWZJbnNwZWN0aW9uIiBlbmFibGVkPSJ0cnVlIiBsZXZlbD0iV0VBSyBXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiIC8+CiAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJQaHBTaG9ydE9wZW5UYWdJbnNwZWN0aW9uIiBlbmFibGVkPSJ0cnVlIiBsZXZlbD0iV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwU3RhdGljQXNEeW5hbWljTWV0aG9kQ2FsbEluc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXRUFLIFdBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlBocFN0cmljdFR5cGVDaGVja2luZ0luc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJFUlJPUiIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIj4KICAgICAgPG9wdGlvbiBuYW1lPSJFTkFCTEVfV0lUSE9VVF9ERUNMQVJFX1NUUklDVF9ESVJFQ1RJVkUiIHZhbHVlPSJ0cnVlIiAvPgogICAgPC9pbnNwZWN0aW9uX3Rvb2w+CiAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJQaHBTd2l0Y2hDYXNlV2l0aG91dERlZmF1bHRCcmFuY2hJbnNwZWN0aW9uIiBlbmFibGVkPSJ0cnVlIiBsZXZlbD0iV0VBSyBXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiIC8+CiAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJQaHBUb29NYW55UGFyYW1ldGVyc0luc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiIC8+CiAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJQaHBUcmFkaXRpb25hbFN5bnRheEFycmF5TGl0ZXJhbEluc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiIC8+CiAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJQaHBUcmFpdHNVc2VMaXN0SW5zcGVjdGlvbiIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldFQUsgV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwVW5kZWZpbmVkQ2FsbGJhY2tJbnNwZWN0aW9uIiBlbmFibGVkPSJ0cnVlIiBsZXZlbD0iV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwVW5kZWZpbmVkQ2xhc3NDb25zdGFudEluc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiPgogICAgICA8b3B0aW9uIG5hbWU9IkRPV05HUkFERV9TRVZFUklUWSIgdmFsdWU9InRydWUiIC8+CiAgICAgIDxvcHRpb24gbmFtZT0iV0FSTl9PTl9NSVhFRCIgdmFsdWU9InRydWUiIC8+CiAgICA8L2luc3BlY3Rpb25fdG9vbD4KICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlBocFVuZGVmaW5lZENsYXNzSW5zcGVjdGlvbiIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSI+CiAgICAgIDxvcHRpb24gbmFtZT0iRE9OVF9SRVBPUlRfTVVMVElfUkVTT0xWRSIgdmFsdWU9InRydWUiIC8+CiAgICA8L2luc3BlY3Rpb25fdG9vbD4KICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlBocFVuZGVmaW5lZEZpZWxkSW5zcGVjdGlvbiIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSI+CiAgICAgIDxvcHRpb24gbmFtZT0iV0FSTl9PTl9NSVhFRCIgdmFsdWU9InRydWUiIC8+CiAgICA8L2luc3BlY3Rpb25fdG9vbD4KICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlBocFVuZGVmaW5lZE1ldGhvZEluc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiPgogICAgICA8b3B0aW9uIG5hbWU9IkRPV05HUkFERV9TRVZFUklUWSIgdmFsdWU9InRydWUiIC8+CiAgICAgIDxvcHRpb24gbmFtZT0iV0FSTl9PTl9NSVhFRCIgdmFsdWU9InRydWUiIC8+CiAgICA8L2luc3BlY3Rpb25fdG9vbD4KICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlBocFVubmVjZXNzYXJ5RG91YmxlUXVvdGVzSW5zcGVjdGlvbiIgZW5hYmxlZD0idHJ1ZSIgbGV2ZWw9IldFQUsgV0FSTklORyIgZW5hYmxlZF9ieV9kZWZhdWx0PSJ0cnVlIiAvPgogICAgPGluc3BlY3Rpb25fdG9vbCBjbGFzcz0iUGhwVW5uZWNlc3NhcnlQYXJlbnRoZXNlc0luc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXRUFLIFdBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlBocFVzYWdlT2ZTaWxlbmNlT3BlcmF0b3JJbnNwZWN0aW9uIiBlbmFibGVkPSJ0cnVlIiBsZXZlbD0iV0VBSyBXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiIC8+CiAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJQaHBWYXJVc2FnZUluc3BlY3Rpb24iIGVuYWJsZWQ9InRydWUiIGxldmVsPSJXRUFLIFdBUk5JTkciIGVuYWJsZWRfYnlfZGVmYXVsdD0idHJ1ZSIgLz4KICAgIDxpbnNwZWN0aW9uX3Rvb2wgY2xhc3M9IlBocFZhcmlhYmxlVmFyaWFibGVJbnNwZWN0aW9uIiBlbmFibGVkPSJ0cnVlIiBsZXZlbD0iV0VBSyBXQVJOSU5HIiBlbmFibGVkX2J5X2RlZmF1bHQ9InRydWUiIC8+CiAgICA8aW5zcGVjdGlvbl90b29sIGNsYXNzPSJTcGVsbENoZWNraW5nSW5zcGVjdGlvbiIgZW5hYmxlZD0iZmFsc2UiIGxldmVsPSJUWVBPIiBlbmFibGVkX2J5X2RlZmF1bHQ9ImZhbHNlIj4KICAgICAgPG9wdGlvbiBuYW1lPSJwcm9jZXNzQ29kZSIgdmFsdWU9InRydWUiIC8+CiAgICAgIDxvcHRpb24gbmFtZT0icHJvY2Vzc0xpdGVyYWxzIiB2YWx1ZT0idHJ1ZSIgLz4KICAgICAgPG9wdGlvbiBuYW1lPSJwcm9jZXNzQ29tbWVudHMiIHZhbHVlPSJ0cnVlIiAvPgogICAgPC9pbnNwZWN0aW9uX3Rvb2w+CiAgPC9wcm9maWxlPgo8L2NvbXBvbmVudD4KPD9waHAKCi8vIFN0YXJ0IG9mIGx1YSB2Mi4wLjYuCi8vIFRoZSBhY3R1YWwgbHVhIHZlcnNpb24gaXMgZGlmZmVyZW50IGZyb20gdGhlIFBFQ0wgcGFja2FnZSB2ZXJzaW9uCgovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubHVhLnBocAogKi8KY2xhc3MgTHVhCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5sdWEucGhwI2x1YS5jb25zdGFudHMubHVhLXZlcnNpb24KICAgICAqLwogICAgcHVibGljIGNvbnN0IExVQV9WRVJTSU9OID0gJzUuMS40JzsKCiAgICAvKioKICAgICAqIEBwYXJhbSBudWxsfHN0cmluZyAkbHVhX3NjcmlwdF9maWxlCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9sdWEuY29uc3RydWN0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP3N0cmluZyAkbHVhX3NjcmlwdF9maWxlID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2x1YS5hc3NpZ24ucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gJHRoaXN8bnVsbCBSZXR1cm5zICR0aGlzIG9yIE5VTEwgb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFzc2lnbihzdHJpbmcgJG5hbWUsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2x1YS5jYWxsLnBocAogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkbHVhX2Z1bmMgRnVuY3Rpb24gbmFtZSBpbiBsdWEKICAgICAqIEBwYXJhbSBhcnJheSAkYXJncyBBcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBMdWEgZnVuY3Rpb24KICAgICAqIEBwYXJhbSBib29sICR1c2Vfc2VsZiBXaGV0aGVyIHRvIHVzZSBzZWxmCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZHxmYWxzZSBSZXR1cm5zIHJlc3VsdCBvZiB0aGUgY2FsbGVkIGZ1bmN0aW9uLCBudWxsIGZvciB3cm9uZyBhcmd1bWVudHMgb3IgRkFMU0Ugb24gb3RoZXIgZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhbGwoY2FsbGFibGUgJGx1YV9mdW5jLCBhcnJheSAkYXJncyA9IFtdLCBib29sICR1c2Vfc2VsZiA9IGZhbHNlKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbHVhLmV2YWwucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RhdGVtZW50cwogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWR8ZmFsc2UgUmV0dXJucyByZXN1bHQgb2YgZXZhbGVkIGNvZGUsIE5VTEwgZm9yIHdyb25nIGFyZ3VtZW50cyBvciBGQUxTRSBvbiBvdGhlciBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXZhbChzdHJpbmcgJHN0YXRlbWVudHMpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9sdWEuaW5jbHVkZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZHxmYWxzZSBSZXR1cm5zIHJlc3VsdCBvZiBpbmNsdWRlZCBjb2RlLCBOVUxMIGZvciB3cm9uZyBhcmd1bWVudHMgb3IgRkFMU0Ugb24gb3RoZXIgZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluY2x1ZGUoc3RyaW5nICRmaWxlKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbHVhLmdldHZlcnNpb24ucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBMdWE6OkxVQV9WRVJTSU9OCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbHVhLnJlZ2lzdGVyY2FsbGJhY2sucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIGNhbGxhYmxlICRmdW5jdGlvbiBBIHZhbGlkIFBIUCBmdW5jdGlvbiBjYWxsYmFjawogICAgICoKICAgICAqIEByZXR1cm4gJHRoaXN8bnVsbHxmYWxzZSBSZXR1cm5zICR0aGlzLCBOVUxMIGZvciB3cm9uZyBhcmd1bWVudHMgb3IgRkFMU0Ugb24gb3RoZXIgZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlZ2lzdGVyQ2FsbGJhY2soc3RyaW5nICRuYW1lLCBjYWxsYWJsZSAkZnVuY3Rpb24pIHt9Cn0KPD9waHAKCi8qKgogKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20va2pkZXYvcGhwLWV4dC1zbmFwcHkjZnVuY3Rpb24tLXNuYXBweV9jb21wcmVzcwogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBkYXRhIHRvIGNvbXByZXNzLgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgY29tcHJlc3NlZCBzdHJpbmcgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAqLwpmdW5jdGlvbiBzbmFwcHlfY29tcHJlc3Moc3RyaW5nICRkYXRhKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2tqZGV2L3BocC1leHQtc25hcHB5I2Z1bmN0aW9uLS1zbmFwcHlfdW5jb21wcmVzcwogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBkYXRhIHRvIGNvbXByZXNzLgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgb3JpZ2luYWwgdW5jb21wcmVzc2VkIGRhdGEgb3IgRkFMU0Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBzbmFwcHlfdW5jb21wcmVzcyhzdHJpbmcgJGRhdGEpOiBzdHJpbmd8ZmFsc2Uge30KPD9waHAKCm5hbWVzcGFjZSBQZ1NxbDsKCiAgICAvKioKICAgICAqIEEgZnVsbHkgb3BhcXVlIGNsYXNzIHdoaWNoIHJlcGxhY2VzIGEgcGdzcWwgcmVzdWx0IHJlc291cmNlIGFzIG9mIFBIUCA4LjEuMC4KICAgICAqIEBzaW5jZSA4LjEKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnBnc3FsLXJlc3VsdC5waHAKICAgICAqLwogICAgZmluYWwgY2xhc3MgUmVzdWx0IHt9CgogICAgLyoqCiAgICAgKiBBIGZ1bGx5IG9wYXF1ZSBjbGFzcyB3aGljaCByZXBsYWNlcyBhIHBnc3FsIGxhcmdlIG9iamVjdCByZXNvdXJjZSBhcyBvZiBQSFAgOC4xLjAuCiAgICAgKiBAc2luY2UgOC4xCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5wZ3NxbC1sb2IucGhwCiAgICAgKi8KICAgIGZpbmFsIGNsYXNzIExvYiB7fQoKICAgIC8qKgogICAgICogQSBmdWxseSBvcGFxdWUgY2xhc3Mgd2hpY2ggcmVwbGFjZXMgYSBwZ3NxbCBsaW5rIHJlc291cmNlIGFzIG9mIFBIUCA4LjEuMC4KICAgICAqIEBzaW5jZSA4LjEKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnBnc3FsLWNvbm5lY3Rpb24ucGhwCiAgICAgKi8KICAgIGZpbmFsIGNsYXNzIENvbm5lY3Rpb24ge30KPD9waHAKCi8vIFN0YXJ0IG9mIHBnc3FsIHYuCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cQXJyYXlTaGFwZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxMYW5ndWFnZUxldmVsVHlwZUF3YXJlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFBocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlOwoKLyoqCiAqIE9wZW4gYSBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1jb25uZWN0LnBocAogKiBAcGFyYW0gc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZyA8cD4KICogVGhlIDxpPmNvbm5lY3Rpb25fc3RyaW5nPC9pPiBjYW4gYmUgZW1wdHkgdG8gdXNlIGFsbCBkZWZhdWx0IHBhcmFtZXRlcnMsIG9yIGl0CiAqIGNhbiBjb250YWluIG9uZSBvciBtb3JlIHBhcmFtZXRlciBzZXR0aW5ncyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4KICogRWFjaCBwYXJhbWV0ZXIgc2V0dGluZyBpcyBpbiB0aGUgZm9ybSBrZXl3b3JkID0gdmFsdWUuIFNwYWNlcyBhcm91bmQKICogdGhlIGVxdWFsIHNpZ24gYXJlIG9wdGlvbmFsLiBUbyB3cml0ZSBhbiBlbXB0eSB2YWx1ZSBvciBhIHZhbHVlCiAqIGNvbnRhaW5pbmcgc3BhY2VzLCBzdXJyb3VuZCBpdCB3aXRoIHNpbmdsZSBxdW90ZXMsIGUuZy4sIGtleXdvcmQgPQogKiAnYSB2YWx1ZScuIFNpbmdsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzIHdpdGhpbiB0aGUgdmFsdWUgbXVzdCBiZQogKiBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2gsIGkuZS4sIFwnIGFuZCBcXC4KICogPC9wPgogKiA8cD4KICogVGhlIGN1cnJlbnRseSByZWNvZ25pemVkIHBhcmFtZXRlciBrZXl3b3JkcyBhcmU6CiAqIDxpPmhvc3Q8L2k+LCA8aT5ob3N0YWRkcjwvaT4sIDxpPnBvcnQ8L2k+LAogKiA8aT5kYm5hbWU8L2k+IChkZWZhdWx0cyB0byB2YWx1ZSBvZiA8aT51c2VyPC9pPiksCiAqIDxpPnVzZXI8L2k+LAogKiA8aT5wYXNzd29yZDwvaT4sIDxpPmNvbm5lY3RfdGltZW91dDwvaT4sCiAqIDxpPm9wdGlvbnM8L2k+LCA8aT50dHk8L2k+IChpZ25vcmVkKSwgPGk+c3NsbW9kZTwvaT4sCiAqIDxpPnJlcXVpcmVzc2w8L2k+IChkZXByZWNhdGVkIGluIGZhdm9yIG9mIDxpPnNzbG1vZGU8L2k+KSwgYW5kCiAqIDxpPnNlcnZpY2U8L2k+LiBXaGljaCBvZiB0aGVzZSBhcmd1bWVudHMgZXhpc3QgZGVwZW5kcwogKiBvbiB5b3VyIFBvc3RncmVTUUwgdmVyc2lvbi4KICogPC9wPgogKiA8cD4KICogVGhlIDxpPm9wdGlvbnM8L2k+IHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBzZXQgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMKICogdG8gYmUgaW52b2tlZCBieSB0aGUgc2VydmVyLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIDxwPgogKiBJZiA8Yj5QR1NRTF9DT05ORUNUX0ZPUkNFX05FVzwvYj4gaXMgcGFzc2VkLCB0aGVuIGEgbmV3IGNvbm5lY3Rpb24KICogaXMgY3JlYXRlZCwgZXZlbiBpZiB0aGUgPGk+Y29ubmVjdGlvbl9zdHJpbmc8L2k+IGlzIGlkZW50aWNhbCB0bwogKiBhbiBleGlzdGluZyBjb25uZWN0aW9uLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgUG9zdGdyZVNRTCBjb25uZWN0aW9uIHJlc291cmNlIG9uIHN1Y2Nlc3MsIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbnxmYWxzZSddLCBkZWZhdWx0OiAncmVzb3VyY2V8ZmFsc2UnKV0KZnVuY3Rpb24gcGdfY29ubmVjdCgKICAgIHN0cmluZyAkY29ubmVjdGlvbl9zdHJpbmcsCiAgICBpbnQgJGZsYWdzID0gMCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldIHN0cmluZyAkaG9zdCA9ICcnLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gc3RyaW5nICRwb3J0ID0gJycsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSBzdHJpbmcgJG9wdGlvbnMgPSAnJywKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldIHN0cmluZyAkdHR5ID0gJycsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSBzdHJpbmcgJGRibmFtZSA9ICcnLAopIHt9CgovKioKICogT3BlbiBhIHBlcnNpc3RlbnQgUG9zdGdyZVNRTCBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctcGNvbm5lY3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNvbm5lY3Rpb25fc3RyaW5nIDxwPgogKiBUaGUgPGk+Y29ubmVjdGlvbl9zdHJpbmc8L2k+IGNhbiBiZSBlbXB0eSB0byB1c2UgYWxsIGRlZmF1bHQgcGFyYW1ldGVycywgb3IgaXQKICogY2FuIGNvbnRhaW4gb25lIG9yIG1vcmUgcGFyYW1ldGVyIHNldHRpbmdzIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLgogKiBFYWNoIHBhcmFtZXRlciBzZXR0aW5nIGlzIGluIHRoZSBmb3JtIGtleXdvcmQgPSB2YWx1ZS4gU3BhY2VzIGFyb3VuZAogKiB0aGUgZXF1YWwgc2lnbiBhcmUgb3B0aW9uYWwuIFRvIHdyaXRlIGFuIGVtcHR5IHZhbHVlIG9yIGEgdmFsdWUKICogY29udGFpbmluZyBzcGFjZXMsIHN1cnJvdW5kIGl0IHdpdGggc2luZ2xlIHF1b3RlcywgZS5nLiwga2V5d29yZCA9CiAqICdhIHZhbHVlJy4gU2luZ2xlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgd2l0aGluIHRoZSB2YWx1ZSBtdXN0IGJlCiAqIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCwgaS5lLiwgXCcgYW5kIFxcLgogKiA8L3A+CiAqIDxwPgogKiBUaGUgY3VycmVudGx5IHJlY29nbml6ZWQgcGFyYW1ldGVyIGtleXdvcmRzIGFyZToKICogPGk+aG9zdDwvaT4sIDxpPmhvc3RhZGRyPC9pPiwgPGk+cG9ydDwvaT4sCiAqIDxpPmRibmFtZTwvaT4sIDxpPnVzZXI8L2k+LAogKiA8aT5wYXNzd29yZDwvaT4sIDxpPmNvbm5lY3RfdGltZW91dDwvaT4sCiAqIDxpPm9wdGlvbnM8L2k+LCA8aT50dHk8L2k+IChpZ25vcmVkKSwgPGk+c3NsbW9kZTwvaT4sCiAqIDxpPnJlcXVpcmVzc2w8L2k+IChkZXByZWNhdGVkIGluIGZhdm9yIG9mIDxpPnNzbG1vZGU8L2k+KSwgYW5kCiAqIDxpPnNlcnZpY2U8L2k+LiBXaGljaCBvZiB0aGVzZSBhcmd1bWVudHMgZXhpc3QgZGVwZW5kcwogKiBvbiB5b3VyIFBvc3RncmVTUUwgdmVyc2lvbi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyA8cD4KICogSWYgPGI+UEdTUUxfQ09OTkVDVF9GT1JDRV9ORVc8L2I+IGlzIHBhc3NlZCwgdGhlbiBhIG5ldyBjb25uZWN0aW9uCiAqIGlzIGNyZWF0ZWQsIGV2ZW4gaWYgdGhlIDxpPmNvbm5lY3Rpb25fc3RyaW5nPC9pPiBpcyBpZGVudGljYWwgdG8KICogYW4gZXhpc3RpbmcgY29ubmVjdGlvbi4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIFBvc3RncmVTUUwgY29ubmVjdGlvbiByZXNvdXJjZSBvbiBzdWNjZXNzLCA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb258ZmFsc2UnXSwgZGVmYXVsdDogJ3Jlc291cmNlfGZhbHNlJyldCmZ1bmN0aW9uIHBnX3Bjb25uZWN0KAogICAgc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZywKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSBpbnQgJGZsYWdzID0gMCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldIHN0cmluZyAkaG9zdCA9ICcnLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gc3RyaW5nICRwb3J0ID0gJycsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSBzdHJpbmcgJG9wdGlvbnMgPSAnJywKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldIHN0cmluZyAkdHR5ID0gJycsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSBzdHJpbmcgJGRibmFtZSA9ICcnLAopIHt9CgovKioKICogQ2xvc2VzIGEgUG9zdGdyZVNRTCBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctY2xvc2UucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBbb3B0aW9uYWxdIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuIFdoZW4KICogPGk+Y29ubmVjdGlvbjwvaT4gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogPGI+cGdfY29ubmVjdDwvYj4gb3IgPGI+cGdfcGNvbm5lY3Q8L2I+LgogKiA8L3A+CiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCmZ1bmN0aW9uIHBnX2Nsb3NlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb258bnVsbCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24gPSBudWxsKSB7fQoKLyoqCiAqIFBvbGwgdGhlIHN0YXR1cyBvZiBhbiBpbi1wcm9ncmVzcyBhc3luY2hyb25vdXMgUG9zdGdyZVNRTCBjb25uZWN0aW9uIGF0dGVtcHQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctY29ubmVjdC1wb2xsLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogPC9wPgogKiBAcmV0dXJuIGludCA8Yj5QR1NRTF9QT0xMSU5HX0ZBSUxFRDwvYj4sIDxiPlBHU1FMX1BPTExJTkdfUkVBRElORzwvYj4sIDxiPlBHU1FMX1BPTExJTkdfV1JJVElORzwvYj4sCiAqIDxiPlBHU1FMX1BPTExJTkdfT0s8L2I+LCBvciA8Yj5QR1NRTF9QT0xMSU5HX0FDVElWRTwvYj4uCiAqIEBzaW5jZSA1LjYKICovCmZ1bmN0aW9uIHBnX2Nvbm5lY3RfcG9sbCgKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuNicsIHRvOiAnNy40JyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbgopOiBpbnQge30KCi8qKgogKiBHZXQgY29ubmVjdGlvbiBzdGF0dXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1jb25uZWN0aW9uLXN0YXR1cy5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIDwvcD4KICogQHJldHVybiBpbnQgPGI+UEdTUUxfQ09OTkVDVElPTl9PSzwvYj4gb3IKICogPGI+UEdTUUxfQ09OTkVDVElPTl9CQUQ8L2I+LgogKi8KZnVuY3Rpb24gcGdfY29ubmVjdGlvbl9zdGF0dXMoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24pOiBpbnQge30KCi8qKgogKiBHZXQgY29ubmVjdGlvbiBpcyBidXN5IG9yIG5vdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWNvbm5lY3Rpb24tYnVzeS5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIHRoZSBjb25uZWN0aW9uIGlzIGJ1c3ksIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAqLwpmdW5jdGlvbiBwZ19jb25uZWN0aW9uX2J1c3koI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24pOiBib29sIHt9CgovKioKICogUmVzZXQgY29ubmVjdGlvbiAocmVjb25uZWN0KQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWNvbm5lY3Rpb24tcmVzZXQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcGdfY29ubmVjdGlvbl9yZXNldCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbik6IGJvb2wge30KCi8qKgogKiBHZXQgYSByZWFkIG9ubHkgaGFuZGxlIHRvIHRoZSBzb2NrZXQgdW5kZXJseWluZyBhIFBvc3RncmVTUUwgY29ubmVjdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLXNvY2tldC5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIHNvY2tldCByZXNvdXJjZSBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS42CiAqLwpmdW5jdGlvbiBwZ19zb2NrZXQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24pIHt9CgovKioKICogUmV0dXJucyB0aGUgaG9zdCBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ubmVjdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWhvc3QucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBbb3B0aW9uYWxdIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuIFdoZW4KICogPGk+Y29ubmVjdGlvbjwvaT4gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogPGI+cGdfY29ubmVjdDwvYj4gb3IgPGI+cGdfcGNvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGhvc3QgdGhlCiAqIDxpPmNvbm5lY3Rpb248L2k+IGlzIHRvLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBwZ19ob3N0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb258bnVsbCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24gPSBudWxsKTogc3RyaW5nIHt9CgovKioKICogR2V0IHRoZSBkYXRhYmFzZSBuYW1lCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctZGJuYW1lLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gW29wdGlvbmFsXSA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiBXaGVuCiAqIDxpPmNvbm5lY3Rpb248L2k+IGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIDxiPnBnX2Nvbm5lY3Q8L2I+IG9yIDxiPnBnX3Bjb25uZWN0PC9iPi4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBkYXRhYmFzZSB0aGUKICogPGk+Y29ubmVjdGlvbjwvaT4gaXMgdG8sIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCmZ1bmN0aW9uIHBnX2RibmFtZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9ufG51bGwnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uID0gbnVsbCk6IHN0cmluZyB7fQoKLyoqCiAqIFJldHVybiB0aGUgcG9ydCBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctcG9ydC5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFtvcHRpb25hbF0gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIGRhdGFiYXNlIHNlcnZlciB0aGUgY29ubmVjdGlvbiBpcyB0bywgb3IgZW1wdHkgc3RyaW5nIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gcGdfcG9ydCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9ufG51bGwnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uID0gbnVsbCk6IHN0cmluZyB7fQoKLyoqCiAqIFJldHVybiB0aGUgVFRZIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctdHR5LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gW29wdGlvbmFsXSA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiBXaGVuCiAqIDxpPmNvbm5lY3Rpb248L2k+IGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIDxiPnBnX2Nvbm5lY3Q8L2I+IG9yIDxiPnBnX3Bjb25uZWN0PC9iPi4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWJ1ZyBUVFkgb2YKICogdGhlIDxpPmNvbm5lY3Rpb248L2k+LCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBwZ190dHkoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbnxudWxsJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiA9IG51bGwpOiBzdHJpbmcge30KCi8qKgogKiBHZXQgdGhlIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctb3B0aW9ucy5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFtvcHRpb25hbF0gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgPGk+Y29ubmVjdGlvbjwvaT4KICogb3B0aW9ucywgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KZnVuY3Rpb24gcGdfb3B0aW9ucygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9ufG51bGwnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uID0gbnVsbCk6IHN0cmluZyB7fQoKLyoqCiAqIFJldHVybnMgYW4gYXJyYXkgd2l0aCBjbGllbnQsIHByb3RvY29sIGFuZCBzZXJ2ZXIgdmVyc2lvbiAod2hlbiBhdmFpbGFibGUpCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctdmVyc2lvbi5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFtvcHRpb25hbF0gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBhbiBhcnJheSB3aXRoIGNsaWVudCwgcHJvdG9jb2wKICogYW5kIHNlcnZlciBrZXlzIGFuZCB2YWx1ZXMgKGlmIGF2YWlsYWJsZSkuIFJldHVybnMKICogPGI+RkFMU0U8L2I+IG9uIGVycm9yIG9yIGludmFsaWQgY29ubmVjdGlvbi4KICovCiNbQXJyYXlTaGFwZShbImNsaWVudCIgPT4gInN0cmluZyIsICJwcm90b2NvbCIgPT4gImludCIsICJzZXJ2ZXIiID0+ICJzdHJpbmciXSldCmZ1bmN0aW9uIHBnX3ZlcnNpb24oI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbnxudWxsJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiA9IG51bGwpOiBhcnJheSB7fQoKLyoqCiAqIFBpbmcgZGF0YWJhc2UgY29ubmVjdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLXBpbmcucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBbb3B0aW9uYWxdIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuIFdoZW4KICogPGk+Y29ubmVjdGlvbjwvaT4gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogPGI+cGdfY29ubmVjdDwvYj4gb3IgPGI+cGdfcGNvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcGdfcGluZygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9ufG51bGwnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uID0gbnVsbCk6IGJvb2wge30KCi8qKgogKiBMb29rcyB1cCBhIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcgb2YgdGhlIHNlcnZlci4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1wYXJhbWV0ZXItc3RhdHVzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbmFtZSBbb3B0aW9uYWxdIDxwPgogKiBQb3NzaWJsZSA8aT5wYXJhbV9uYW1lPC9pPiB2YWx1ZXMgaW5jbHVkZSBzZXJ2ZXJfdmVyc2lvbiwKICogc2VydmVyX2VuY29kaW5nLCBjbGllbnRfZW5jb2RpbmcsCiAqIGlzX3N1cGVydXNlciwgc2Vzc2lvbl9hdXRob3JpemF0aW9uLAogKiBEYXRlU3R5bGUsIFRpbWVab25lLCBhbmQKICogaW50ZWdlcl9kYXRldGltZXMuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciwgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUgb3IgaW52YWxpZAogKiA8aT5wYXJhbV9uYW1lPC9pPi4KICovCmZ1bmN0aW9uIHBnX3BhcmFtZXRlcl9zdGF0dXMoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sIHN0cmluZyAkbmFtZSk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGN1cnJlbnQgaW4tdHJhbnNhY3Rpb24gc3RhdHVzIG9mIHRoZSBzZXJ2ZXIuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctdHJhbnNhY3Rpb24tc3RhdHVzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogPC9wPgogKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNhbiBiZSA8Yj5QR1NRTF9UUkFOU0FDVElPTl9JRExFPC9iPiAoY3VycmVudGx5IGlkbGUpLAogKiA8Yj5QR1NRTF9UUkFOU0FDVElPTl9BQ1RJVkU8L2I+IChhIGNvbW1hbmQgaXMgaW4gcHJvZ3Jlc3MpLAogKiA8Yj5QR1NRTF9UUkFOU0FDVElPTl9JTlRSQU5TPC9iPiAoaWRsZSwgaW4gYSB2YWxpZCB0cmFuc2FjdGlvbiBibG9jayksCiAqIG9yIDxiPlBHU1FMX1RSQU5TQUNUSU9OX0lORVJST1I8L2I+IChpZGxlLCBpbiBhIGZhaWxlZCB0cmFuc2FjdGlvbiBibG9jaykuCiAqIDxiPlBHU1FMX1RSQU5TQUNUSU9OX1VOS05PV048L2I+IGlzIHJlcG9ydGVkIGlmIHRoZSBjb25uZWN0aW9uIGlzIGJhZC4KICogPGI+UEdTUUxfVFJBTlNBQ1RJT05fQUNUSVZFPC9iPiBpcyByZXBvcnRlZCBvbmx5IHdoZW4gYSBxdWVyeQogKiBoYXMgYmVlbiBzZW50IHRvIHRoZSBzZXJ2ZXIgYW5kIG5vdCB5ZXQgY29tcGxldGVkLgogKi8KZnVuY3Rpb24gcGdfdHJhbnNhY3Rpb25fc3RhdHVzKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uKTogaW50IHt9CgovKioKICogRXhlY3V0ZSBhIHF1ZXJ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctcXVlcnkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiBXaGVuCiAqIDxpPmNvbm5lY3Rpb248L2k+IGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIDxiPnBnX2Nvbm5lY3Q8L2I+IG9yIDxiPnBnX3Bjb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgU1FMIHN0YXRlbWVudCBvciBzdGF0ZW1lbnRzIHRvIGJlIGV4ZWN1dGVkLiBXaGVuIG11bHRpcGxlIHN0YXRlbWVudHMgYXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24sCiAqIHRoZXkgYXJlIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWQgYXMgb25lIHRyYW5zYWN0aW9uLCB1bmxlc3MgdGhlcmUgYXJlIGV4cGxpY2l0IEJFR0lOL0NPTU1JVCBjb21tYW5kcwogKiBpbmNsdWRlZCBpbiB0aGUgcXVlcnkgc3RyaW5nLiBIb3dldmVyLCB1c2luZyBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgaW4gb25lIGZ1bmN0aW9uIGNhbGwgaXMgbm90IHJlY29tbWVuZGVkLgogKiA8L3A+CiAqIDxwPgogKiBTdHJpbmcgaW50ZXJwb2xhdGlvbiBvZiB1c2VyLXN1cHBsaWVkIGRhdGEgaXMgZXh0cmVtZWx5IGRhbmdlcm91cyBhbmQgaXMKICogbGlrZWx5IHRvIGxlYWQgdG8gU1FMCiAqIGluamVjdGlvbiB2dWxuZXJhYmlsaXRpZXMuIEluIG1vc3QgY2FzZXMKICogPGI+cGdfcXVlcnlfcGFyYW1zPC9iPiBzaG91bGQgYmUgcHJlZmVycmVkLCBwYXNzaW5nCiAqIHVzZXItc3VwcGxpZWQgdmFsdWVzIGFzIHBhcmFtZXRlcnMgcmF0aGVyIHRoYW4gc3Vic3RpdHV0aW5nIHRoZW0gaW50bwogKiB0aGUgcXVlcnkgc3RyaW5nLgogKiA8L3A+CiAqIDxwPgogKiBBbnkgdXNlci1zdXBwbGllZCBkYXRhIHN1YnN0aXR1dGVkIGRpcmVjdGx5IGludG8gYSBxdWVyeSBzdHJpbmcgc2hvdWxkCiAqIGJlIHByb3Blcmx5IGVzY2FwZWQuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0fGZhbHNlJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxmYWxzZScpXQpmdW5jdGlvbiBwZ19xdWVyeSgKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiwKICAgIHN0cmluZyAkcXVlcnkKKSB7fQoKLyoqCiAqIFN1Ym1pdHMgYSBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIgYW5kIHdhaXRzIGZvciB0aGUgcmVzdWx0LCB3aXRoIHRoZSBhYmlsaXR5IHRvIHBhc3MgcGFyYW1ldGVycyBzZXBhcmF0ZWx5IGZyb20gdGhlIFNRTCBjb21tYW5kIHRleHQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctcXVlcnktcGFyYW1zLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcXVlcnkgPHA+CiAqIFRoZSBwYXJhbWV0ZXJpemVkIFNRTCBzdGF0ZW1lbnQuIE11c3QgY29udGFpbiBvbmx5IGEgc2luZ2xlIHN0YXRlbWVudC4KICogKG11bHRpcGxlIHN0YXRlbWVudHMgc2VwYXJhdGVkIGJ5IHNlbWktY29sb25zIGFyZSBub3QgYWxsb3dlZC4pIElmIGFueSBwYXJhbWV0ZXJzCiAqIGFyZSB1c2VkLCB0aGV5IGFyZSByZWZlcnJlZCB0byBhcyAkMSwgJDIsIGV0Yy4KICogPC9wPgogKiA8cD4KICogVXNlci1zdXBwbGllZCB2YWx1ZXMgc2hvdWxkIGFsd2F5cyBiZSBwYXNzZWQgYXMgcGFyYW1ldGVycywgbm90CiAqIGludGVycG9sYXRlZCBpbnRvIHRoZSBxdWVyeSBzdHJpbmcsIHdoZXJlIHRoZXkgZm9ybSBwb3NzaWJsZQogKiBTUUwgaW5qZWN0aW9uCiAqIGF0dGFjayB2ZWN0b3JzIGFuZCBpbnRyb2R1Y2UgYnVncyB3aGVuIGhhbmRsaW5nIGRhdGEgY29udGFpbmluZyBxdW90ZXMuCiAqIElmIGZvciBzb21lIHJlYXNvbiB5b3UgY2Fubm90IHVzZSBhIHBhcmFtZXRlciwgZW5zdXJlIHRoYXQgaW50ZXJwb2xhdGVkCiAqIHZhbHVlcyBhcmUgcHJvcGVybHkgZXNjYXBlZC4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBbb3B0aW9uYWxdIDxwPgogKiBBbiBhcnJheSBvZiBwYXJhbWV0ZXIgdmFsdWVzIHRvIHN1YnN0aXR1dGUgZm9yIHRoZSAkMSwgJDIsIGV0Yy4gcGxhY2Vob2xkZXJzCiAqIGluIHRoZSBvcmlnaW5hbCBwcmVwYXJlZCBxdWVyeSBzdHJpbmcuIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5CiAqIG11c3QgbWF0Y2ggdGhlIG51bWJlciBvZiBwbGFjZWhvbGRlcnMuCiAqIDwvcD4KICogPHA+CiAqIFZhbHVlcyBpbnRlbmRlZCBmb3IgYnl0ZWEgZmllbGRzIGFyZSBub3Qgc3VwcG9ydGVkIGFzCiAqIHBhcmFtZXRlcnMuIFVzZSA8Yj5wZ19lc2NhcGVfYnl0ZWE8L2I+IGluc3RlYWQsIG9yIHVzZSB0aGUKICogbGFyZ2Ugb2JqZWN0IGZ1bmN0aW9ucy4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIEEgcXVlcnkgcmVzdWx0IHJlc291cmNlIG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHR8ZmFsc2UnXSwgZGVmYXVsdDogJ3Jlc291cmNlfGZhbHNlJyldCmZ1bmN0aW9uIHBnX3F1ZXJ5X3BhcmFtcygKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRxdWVyeSA9ICcnLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICRxdWVyeSwKICAgIGFycmF5ICRwYXJhbXMKKSB7fQoKLyoqCiAqIFN1Ym1pdHMgYSByZXF1ZXN0IHRvIGNyZWF0ZSBhIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIHRoZQogKiBnaXZlbiBwYXJhbWV0ZXJzLCBhbmQgd2FpdHMgZm9yIGNvbXBsZXRpb24uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctcHJlcGFyZS5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuIFdoZW4KICogPGk+Y29ubmVjdGlvbjwvaT4gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogPGI+cGdfY29ubmVjdDwvYj4gb3IgPGI+cGdfcGNvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHN0YXRlbWVudF9uYW1lIDxwPgogKiBUaGUgbmFtZSB0byBnaXZlIHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQuIE11c3QgYmUgdW5pcXVlIHBlci1jb25uZWN0aW9uLiBJZgogKiAiIiBpcyBzcGVjaWZpZWQsIHRoZW4gYW4gdW5uYW1lZCBzdGF0ZW1lbnQgaXMgY3JlYXRlZCwgb3ZlcndyaXRpbmcgYW55CiAqIHByZXZpb3VzbHkgZGVmaW5lZCB1bm5hbWVkIHN0YXRlbWVudC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgcGFyYW1ldGVyaXplZCBTUUwgc3RhdGVtZW50LiBNdXN0IGNvbnRhaW4gb25seSBhIHNpbmdsZSBzdGF0ZW1lbnQuCiAqIChtdWx0aXBsZSBzdGF0ZW1lbnRzIHNlcGFyYXRlZCBieSBzZW1pLWNvbG9ucyBhcmUgbm90IGFsbG93ZWQuKSBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gYXMgJDEsICQyLCBldGMuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0fGZhbHNlJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxmYWxzZScpXQpmdW5jdGlvbiBwZ19wcmVwYXJlKAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGNvbm5lY3Rpb24gPSBudWxsLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gc3RyaW5nICRzdGF0ZW1lbnRfbmFtZSA9ICcnLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIHN0cmluZyAkc3RhdGVtZW50X25hbWUsCiAgICBzdHJpbmcgJHF1ZXJ5Cikge30KCi8qKgogKiBTZW5kcyBhIHJlcXVlc3QgdG8gZXhlY3V0ZSBhIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMsIGFuZCB3YWl0cyBmb3IgdGhlIHJlc3VsdC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1leGVjdXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc3RhdGVtZW50X25hbWUgPHA+CiAqIFRoZSBuYW1lIG9mIHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQgdG8gZXhlY3V0ZS4gaWYKICogIiIgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZSB1bm5hbWVkIHN0YXRlbWVudCBpcyBleGVjdXRlZC4gVGhlIG5hbWUgbXVzdCBoYXZlCiAqIGJlZW4gcHJldmlvdXNseSBwcmVwYXJlZCB1c2luZyA8Yj5wZ19wcmVwYXJlPC9iPiwKICogPGI+cGdfc2VuZF9wcmVwYXJlPC9iPiBvciBhIFBSRVBBUkUgU1FMCiAqIGNvbW1hbmQuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRwYXJhbXMgW29wdGlvbmFsXSA8cD4KICogQW4gYXJyYXkgb2YgcGFyYW1ldGVyIHZhbHVlcyB0byBzdWJzdGl0dXRlIGZvciB0aGUgJDEsICQyLCBldGMuIHBsYWNlaG9sZGVycwogKiBpbiB0aGUgb3JpZ2luYWwgcHJlcGFyZWQgcXVlcnkgc3RyaW5nLiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheQogKiBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgcGxhY2Vob2xkZXJzLgogKiA8L3A+CiAqIDxwPgogKiBFbGVtZW50cyBhcmUgY29udmVydGVkIHRvIHN0cmluZ3MgYnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgQSBxdWVyeSByZXN1bHQgcmVzb3VyY2Ugb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdHxmYWxzZSddLCBkZWZhdWx0OiAncmVzb3VyY2V8ZmFsc2UnKV0KZnVuY3Rpb24gcGdfZXhlY3V0ZSgKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldIHN0cmluZyAkc3RhdGVtZW50X25hbWUgPSAnJywKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAkc3RhdGVtZW50X25hbWUsCiAgICBhcnJheSAkcGFyYW1zCikge30KCi8qKgogKiBTZW5kcyBhc3luY2hyb25vdXMgcXVlcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1zZW5kLXF1ZXJ5LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSA8cD4KICogVGhlIFNRTCBzdGF0ZW1lbnQgb3Igc3RhdGVtZW50cyB0byBiZSBleGVjdXRlZC4KICogPC9wPgogKiA8cD4KICogRGF0YSBpbnNpZGUgdGhlIHF1ZXJ5IHNob3VsZCBiZSBwcm9wZXJseSBlc2NhcGVkLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS48L3A+CiAqIDxwPgogKiBVc2UgPGI+cGdfZ2V0X3Jlc3VsdDwvYj4gdG8gZGV0ZXJtaW5lIHRoZSBxdWVyeSByZXN1bHQuCiAqLwpmdW5jdGlvbiBwZ19zZW5kX3F1ZXJ5KAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sCiAgICBzdHJpbmcgJHF1ZXJ5Cik6IGludHxib29sIHt9CgovKioKICogU3VibWl0cyBhIGNvbW1hbmQgYW5kIHNlcGFyYXRlIHBhcmFtZXRlcnMgdG8gdGhlIHNlcnZlciB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSByZXN1bHQocykuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctc2VuZC1xdWVyeS1wYXJhbXMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IDxwPgogKiBUaGUgcGFyYW1ldGVyaXplZCBTUUwgc3RhdGVtZW50LiBNdXN0IGNvbnRhaW4gb25seSBhIHNpbmdsZSBzdGF0ZW1lbnQuCiAqIChtdWx0aXBsZSBzdGF0ZW1lbnRzIHNlcGFyYXRlZCBieSBzZW1pLWNvbG9ucyBhcmUgbm90IGFsbG93ZWQuKSBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gYXMgJDEsICQyLCBldGMuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRwYXJhbXMgPHA+CiAqIEFuIGFycmF5IG9mIHBhcmFtZXRlciB2YWx1ZXMgdG8gc3Vic3RpdHV0ZSBmb3IgdGhlICQxLCAkMiwgZXRjLiBwbGFjZWhvbGRlcnMKICogaW4gdGhlIG9yaWdpbmFsIHByZXBhcmVkIHF1ZXJ5IHN0cmluZy4gVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXkKICogbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHBsYWNlaG9sZGVycy4KICogPC9wPgogKiBAcmV0dXJuIGludHxib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuPC9wPgogKiA8cD4KICogVXNlIDxiPnBnX2dldF9yZXN1bHQ8L2I+IHRvIGRldGVybWluZSB0aGUgcXVlcnkgcmVzdWx0LgogKi8KZnVuY3Rpb24gcGdfc2VuZF9xdWVyeV9wYXJhbXMoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiwKICAgIHN0cmluZyAkcXVlcnksCiAgICBhcnJheSAkcGFyYW1zCik6IGludHxib29sIHt9CgovKioKICogU2VuZHMgYSByZXF1ZXN0IHRvIGNyZWF0ZSBhIHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLCB3aXRob3V0IHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctc2VuZC1wcmVwYXJlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc3RhdGVtZW50X25hbWUgPHA+CiAqIFRoZSBuYW1lIHRvIGdpdmUgdGhlIHByZXBhcmVkIHN0YXRlbWVudC4gTXVzdCBiZSB1bmlxdWUgcGVyLWNvbm5lY3Rpb24uIElmCiAqICIiIGlzIHNwZWNpZmllZCwgdGhlbiBhbiB1bm5hbWVkIHN0YXRlbWVudCBpcyBjcmVhdGVkLCBvdmVyd3JpdGluZyBhbnkKICogcHJldmlvdXNseSBkZWZpbmVkIHVubmFtZWQgc3RhdGVtZW50LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IDxwPgogKiBUaGUgcGFyYW1ldGVyaXplZCBTUUwgc3RhdGVtZW50LiBNdXN0IGNvbnRhaW4gb25seSBhIHNpbmdsZSBzdGF0ZW1lbnQuCiAqIChtdWx0aXBsZSBzdGF0ZW1lbnRzIHNlcGFyYXRlZCBieSBzZW1pLWNvbG9ucyBhcmUgbm90IGFsbG93ZWQuKSBJZiBhbnkgcGFyYW1ldGVycwogKiBhcmUgdXNlZCwgdGhleSBhcmUgcmVmZXJyZWQgdG8gYXMgJDEsICQyLCBldGMuCiAqIDwvcD4KICogQHJldHVybiBpbnR8Ym9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLCA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4gVXNlIDxiPnBnX2dldF9yZXN1bHQ8L2I+CiAqIHRvIGRldGVybWluZSB0aGUgcXVlcnkgcmVzdWx0LgogKi8KZnVuY3Rpb24gcGdfc2VuZF9wcmVwYXJlKAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sCiAgICBzdHJpbmcgJHN0YXRlbWVudF9uYW1lLAogICAgc3RyaW5nICRxdWVyeQopOiBpbnR8Ym9vbCB7fQoKLyoqCiAqIFNlbmRzIGEgcmVxdWVzdCB0byBleGVjdXRlIGEgcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggZ2l2ZW4gcGFyYW1ldGVycywgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgcmVzdWx0KHMpLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLXNlbmQtZXhlY3V0ZS5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuIFdoZW4KICogPGk+Y29ubmVjdGlvbjwvaT4gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogPGI+cGdfY29ubmVjdDwvYj4gb3IgPGI+cGdfcGNvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHN0YXRlbWVudF9uYW1lIDxwPgogKiBUaGUgbmFtZSBvZiB0aGUgcHJlcGFyZWQgc3RhdGVtZW50IHRvIGV4ZWN1dGUuIGlmCiAqICIiIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgdW5uYW1lZCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQuIFRoZSBuYW1lIG11c3QgaGF2ZQogKiBiZWVuIHByZXZpb3VzbHkgcHJlcGFyZWQgdXNpbmcgPGI+cGdfcHJlcGFyZTwvYj4sCiAqIDxiPnBnX3NlbmRfcHJlcGFyZTwvYj4gb3IgYSBQUkVQQVJFIFNRTAogKiBjb21tYW5kLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIDxwPgogKiBBbiBhcnJheSBvZiBwYXJhbWV0ZXIgdmFsdWVzIHRvIHN1YnN0aXR1dGUgZm9yIHRoZSAkMSwgJDIsIGV0Yy4gcGxhY2Vob2xkZXJzCiAqIGluIHRoZSBvcmlnaW5hbCBwcmVwYXJlZCBxdWVyeSBzdHJpbmcuIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5CiAqIG11c3QgbWF0Y2ggdGhlIG51bWJlciBvZiBwbGFjZWhvbGRlcnMuCiAqIDwvcD4KICogQHJldHVybiBpbnR8Ym9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLCA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4gVXNlIDxiPnBnX2dldF9yZXN1bHQ8L2I+CiAqIHRvIGRldGVybWluZSB0aGUgcXVlcnkgcmVzdWx0LgogKi8KZnVuY3Rpb24gcGdfc2VuZF9leGVjdXRlKAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sCiAgICBzdHJpbmcgJHN0YXRlbWVudF9uYW1lLAogICAgYXJyYXkgJHBhcmFtcwopOiBpbnR8Ym9vbCB7fQoKLyoqCiAqIENhbmNlbCBhbiBhc3luY2hyb25vdXMgcXVlcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1jYW5jZWwtcXVlcnkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcGdfY2FuY2VsX3F1ZXJ5KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uKTogYm9vbCB7fQoKLyoqCiAqIFJldHVybnMgdmFsdWVzIGZyb20gYSByZXN1bHQgcmVzb3VyY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1mZXRjaC1yZXN1bHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfcXVlcnk8L2I+LAogKiA8Yj5wZ19xdWVyeV9wYXJhbXM8L2I+IG9yIDxiPnBnX2V4ZWN1dGU8L2I+CiAqIChhbW9uZyBvdGhlcnMpLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHJvdyA8cD4KICogUm93IG51bWJlciBpbiByZXN1bHQgdG8gZmV0Y2guIFJvd3MgYXJlIG51bWJlcmVkIGZyb20gMCB1cHdhcmRzLiBJZiBvbWl0dGVkLAogKiBuZXh0IHJvdyBpcyBmZXRjaGVkLgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAkZmllbGQgW29wdGlvbmFsXSA8cD4KICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCAoY29sdW1uKSB0byBmZXRjaCwgb3RoZXJ3aXNlCiAqIGFuIGludCByZXByZXNlbnRpbmcgdGhlIGZpZWxkIG51bWJlciB0byBmZXRjaC4gRmllbGRzIGFyZQogKiBudW1iZXJlZCBmcm9tIDAgdXB3YXJkcy4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZXxudWxsIEJvb2xlYW4gaXMgcmV0dXJuZWQgYXMgJiN4MDAwMjI7dCYjeDAwMDIyOyBvciAmI3gwMDAyMjtmJiN4MDAwMjI7LiBBbGwKICogb3RoZXIgdHlwZXMsIGluY2x1ZGluZyBhcnJheXMgYXJlIHJldHVybmVkIGFzIHN0cmluZ3MgZm9ybWF0dGVkCiAqIGluIHRoZSBzYW1lIGRlZmF1bHQgUG9zdGdyZVNRTCBtYW5uZXIgdGhhdCB5b3Ugd291bGQgc2VlIGluIHRoZQogKiBwc3FsIHByb2dyYW0uIERhdGFiYXNlIE5VTEwKICogdmFsdWVzIGFyZSByZXR1cm5lZCBhcyA8Yj5OVUxMPC9iPi4KICogPC9wPgogKiA8cD4KICogPGI+RkFMU0U8L2I+IGlzIHJldHVybmVkIGlmIDxpPnJvdzwvaT4gZXhjZWVkcyB0aGUgbnVtYmVyCiAqIG9mIHJvd3MgaW4gdGhlIHNldCwgb3Igb24gYW55IG90aGVyIGVycm9yLgogKi8KZnVuY3Rpb24gcGdfZmV0Y2hfcmVzdWx0KAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0LAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJHJvdyA9IDAsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gJHJvdywKICAgIHN0cmluZ3xpbnQgJGZpZWxkCik6IHN0cmluZ3xmYWxzZXxudWxsIHt9CgovKioKICogR2V0IGEgcm93IGFzIGFuIGVudW1lcmF0ZWQgYXJyYXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1mZXRjaC1yb3cucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfcXVlcnk8L2I+LAogKiA8Yj5wZ19xdWVyeV9wYXJhbXM8L2I+IG9yIDxiPnBnX2V4ZWN1dGU8L2I+CiAqIChhbW9uZyBvdGhlcnMpLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHJvdyBbb3B0aW9uYWxdIDxwPgogKiBSb3cgbnVtYmVyIGluIHJlc3VsdCB0byBmZXRjaC4gUm93cyBhcmUgbnVtYmVyZWQgZnJvbSAwIHVwd2FyZHMuIElmCiAqIG9taXR0ZWQgb3IgPGI+TlVMTDwvYj4sIHRoZSBuZXh0IHJvdyBpcyBmZXRjaGVkLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG1vZGUgW29wdGlvbmFsXQogKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFuIGFycmF5LCBpbmRleGVkIGZyb20gMCB1cHdhcmRzLCB3aXRoIGVhY2ggdmFsdWUKICogcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuIERhdGFiYXNlIE5VTEwKICogdmFsdWVzIGFyZSByZXR1cm5lZCBhcyA8Yj5OVUxMPC9iPi4KICogPC9wPgogKiA8cD4KICogPGI+RkFMU0U8L2I+IGlzIHJldHVybmVkIGlmIDxpPnJvdzwvaT4gZXhjZWVkcyB0aGUgbnVtYmVyCiAqIG9mIHJvd3MgaW4gdGhlIHNldCwgdGhlcmUgYXJlIG5vIG1vcmUgcm93cywgb3Igb24gYW55IG90aGVyIGVycm9yLgogKi8KZnVuY3Rpb24gcGdfZmV0Y2hfcm93KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCwgP2ludCAkcm93ID0gbnVsbCwgaW50ICRtb2RlID0gMik6IGFycmF5fGZhbHNlIHt9CgovKioKICogRmV0Y2ggYSByb3cgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1mZXRjaC1hc3NvYy5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+CiAqIFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSA8Yj5wZ19xdWVyeTwvYj4sCiAqIDxiPnBnX3F1ZXJ5X3BhcmFtczwvYj4gb3IgPGI+cGdfZXhlY3V0ZTwvYj4KICogKGFtb25nIG90aGVycykuCiAqIDwvcD4KICogQHBhcmFtIGludCAkcm93IFtvcHRpb25hbF0gPHA+CiAqIFJvdyBudW1iZXIgaW4gcmVzdWx0IHRvIGZldGNoLiBSb3dzIGFyZSBudW1iZXJlZCBmcm9tIDAgdXB3YXJkcy4gSWYKICogb21pdHRlZCBvciA8Yj5OVUxMPC9iPiwgdGhlIG5leHQgcm93IGlzIGZldGNoZWQuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBbiBhcnJheSBpbmRleGVkIGFzc29jaWF0aXZlbHkgKGJ5IGZpZWxkIG5hbWUpLgogKiBFYWNoIHZhbHVlIGluIHRoZSBhcnJheSBpcyByZXByZXNlbnRlZCBhcyBhCiAqIHN0cmluZy4gRGF0YWJhc2UgTlVMTAogKiB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIDxiPk5VTEw8L2I+LgogKiA8L3A+CiAqIDxwPgogKiA8Yj5GQUxTRTwvYj4gaXMgcmV0dXJuZWQgaWYgPGk+cm93PC9pPiBleGNlZWRzIHRoZSBudW1iZXIKICogb2Ygcm93cyBpbiB0aGUgc2V0LCB0aGVyZSBhcmUgbm8gbW9yZSByb3dzLCBvciBvbiBhbnkgb3RoZXIgZXJyb3IuCiAqLwpmdW5jdGlvbiBwZ19mZXRjaF9hc3NvYygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQsID9pbnQgJHJvdyA9IG51bGwpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEZldGNoIGEgcm93IGFzIGFuIGFycmF5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctZmV0Y2gtYXJyYXkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfcXVlcnk8L2I+LAogKiA8Yj5wZ19xdWVyeV9wYXJhbXM8L2I+IG9yIDxiPnBnX2V4ZWN1dGU8L2I+CiAqIChhbW9uZyBvdGhlcnMpLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHJvdyBbb3B0aW9uYWxdIDxwPgogKiBSb3cgbnVtYmVyIGluIHJlc3VsdCB0byBmZXRjaC4gUm93cyBhcmUgbnVtYmVyZWQgZnJvbSAwIHVwd2FyZHMuIElmCiAqIG9taXR0ZWQgb3IgPGI+TlVMTDwvYj4sIHRoZSBuZXh0IHJvdyBpcyBmZXRjaGVkLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG1vZGUgW29wdGlvbmFsXSA8cD4KICogQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgY29udHJvbHMKICogaG93IHRoZSByZXR1cm5lZCBhcnJheSBpcyBpbmRleGVkLgogKiA8aT5yZXN1bHRfdHlwZTwvaT4gaXMgYSBjb25zdGFudCBhbmQgY2FuIHRha2UgdGhlCiAqIGZvbGxvd2luZyB2YWx1ZXM6IDxiPlBHU1FMX0FTU09DPC9iPiwKICogPGI+UEdTUUxfTlVNPC9iPiBhbmQgPGI+UEdTUUxfQk9USDwvYj4uCiAqIFVzaW5nIDxiPlBHU1FMX05VTTwvYj4sIDxiPnBnX2ZldGNoX2FycmF5PC9iPgogKiB3aWxsIHJldHVybiBhbiBhcnJheSB3aXRoIG51bWVyaWNhbCBpbmRpY2VzLCB1c2luZwogKiA8Yj5QR1NRTF9BU1NPQzwvYj4gaXQgd2lsbCByZXR1cm4gb25seSBhc3NvY2lhdGl2ZSBpbmRpY2VzCiAqIHdoaWxlIDxiPlBHU1FMX0JPVEg8L2I+LCB0aGUgZGVmYXVsdCwgd2lsbCByZXR1cm4gYm90aAogKiBudW1lcmljYWwgYW5kIGFzc29jaWF0aXZlIGluZGljZXMuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBbiBhcnJheSBpbmRleGVkIG51bWVyaWNhbGx5IChiZWdpbm5pbmcgd2l0aCAwKSBvcgogKiBhc3NvY2lhdGl2ZWx5IChpbmRleGVkIGJ5IGZpZWxkIG5hbWUpLCBvciBib3RoLgogKiBFYWNoIHZhbHVlIGluIHRoZSBhcnJheSBpcyByZXByZXNlbnRlZCBhcyBhCiAqIHN0cmluZy4gRGF0YWJhc2UgTlVMTAogKiB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIDxiPk5VTEw8L2I+LgogKiA8L3A+CiAqIDxwPgogKiA8Yj5GQUxTRTwvYj4gaXMgcmV0dXJuZWQgaWYgPGk+cm93PC9pPiBleGNlZWRzIHRoZSBudW1iZXIKICogb2Ygcm93cyBpbiB0aGUgc2V0LCB0aGVyZSBhcmUgbm8gbW9yZSByb3dzLCBvciBvbiBhbnkgb3RoZXIgZXJyb3IuCiAqLwpmdW5jdGlvbiBwZ19mZXRjaF9hcnJheSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQsID9pbnQgJHJvdyA9IG51bGwsIGludCAkbW9kZSA9IFBHU1FMX0JPVEgpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEZldGNoIGEgcm93IGFzIGFuIG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWZldGNoLW9iamVjdC5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+CiAqIFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSA8Yj5wZ19xdWVyeTwvYj4sCiAqIDxiPnBnX3F1ZXJ5X3BhcmFtczwvYj4gb3IgPGI+cGdfZXhlY3V0ZTwvYj4KICogKGFtb25nIG90aGVycykuCiAqIDwvcD4KICogQHBhcmFtIGludHxudWxsICRyb3cgW29wdGlvbmFsXSA8cD4KICogUm93IG51bWJlciBpbiByZXN1bHQgdG8gZmV0Y2guIFJvd3MgYXJlIG51bWJlcmVkIGZyb20gMCB1cHdhcmRzLiBJZgogKiBvbWl0dGVkIG9yIDxiPk5VTEw8L2I+LCB0aGUgbmV4dCByb3cgaXMgZmV0Y2hlZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRjbGFzcyBbb3B0aW9uYWxdIDxwPgogKiBJZ25vcmVkIGFuZCBkZXByZWNhdGVkLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkY29uc3RydWN0b3JfYXJncyBbb3B0aW9uYWxdIDxwPgogKiA8L3A+CiAqIEByZXR1cm4gb2JqZWN0fGZhbHNlIEFuIG9iamVjdCB3aXRoIG9uZSBhdHRyaWJ1dGUgZm9yIGVhY2ggZmllbGQKICogbmFtZSBpbiB0aGUgcmVzdWx0LiBEYXRhYmFzZSBOVUxMCiAqIHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgPGI+TlVMTDwvYj4uCiAqIDwvcD4KICogPHA+CiAqIDxiPkZBTFNFPC9iPiBpcyByZXR1cm5lZCBpZiA8aT5yb3c8L2k+IGV4Y2VlZHMgdGhlIG51bWJlcgogKiBvZiByb3dzIGluIHRoZSBzZXQsIHRoZXJlIGFyZSBubyBtb3JlIHJvd3MsIG9yIG9uIGFueSBvdGhlciBlcnJvci4KICovCmZ1bmN0aW9uIHBnX2ZldGNoX29iamVjdCgKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCwKICAgID9pbnQgJHJvdyA9IG51bGwsCiAgICBzdHJpbmcgJGNsYXNzID0gJ3N0ZENsYXNzJywKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRsID0gbnVsbCwKICAgIGFycmF5ICRjb25zdHJ1Y3Rvcl9hcmdzID0gW10KKTogb2JqZWN0fGZhbHNlIHt9CgovKioKICogRmV0Y2hlcyBhbGwgcm93cyBmcm9tIGEgcmVzdWx0IGFzIGFuIGFycmF5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctZmV0Y2gtYWxsLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogUG9zdGdyZVNRTCBxdWVyeSByZXN1bHQgcmVzb3VyY2UsIHJldHVybmVkIGJ5IDxiPnBnX3F1ZXJ5PC9iPiwKICogPGI+cGdfcXVlcnlfcGFyYW1zPC9iPiBvciA8Yj5wZ19leGVjdXRlPC9iPgogKiAoYW1vbmcgb3RoZXJzKS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtb2RlIFtvcHRpb25hbF0gPHA+CiAqIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGNvbnRyb2xzCiAqIGhvdyB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgaW5kZXhlZC4KICogPGk+cmVzdWx0X3R5cGU8L2k+IGlzIGEgY29uc3RhbnQgYW5kIGNhbiB0YWtlIHRoZQogKiBmb2xsb3dpbmcgdmFsdWVzOiA8Yj5QR1NRTF9BU1NPQzwvYj4sCiAqIDxiPlBHU1FMX05VTTwvYj4gYW5kIDxiPlBHU1FMX0JPVEg8L2I+LgogKiBVc2luZyA8Yj5QR1NRTF9OVU08L2I+LCA8Yj5wZ19mZXRjaF9hcnJheTwvYj4KICogd2lsbCByZXR1cm4gYW4gYXJyYXkgd2l0aCBudW1lcmljYWwgaW5kaWNlcywgdXNpbmcKICogPGI+UEdTUUxfQVNTT0M8L2I+IGl0IHdpbGwgcmV0dXJuIG9ubHkgYXNzb2NpYXRpdmUgaW5kaWNlcwogKiB3aGlsZSA8Yj5QR1NRTF9CT1RIPC9iPiwgdGhlIGRlZmF1bHQsIHdpbGwgcmV0dXJuIGJvdGgKICogbnVtZXJpY2FsIGFuZCBhc3NvY2lhdGl2ZSBpbmRpY2VzLgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgQW4gYXJyYXkgd2l0aCBhbGwgcm93cyBpbiB0aGUgcmVzdWx0LiBFYWNoIHJvdyBpcyBhbiBhcnJheQogKiBvZiBmaWVsZCB2YWx1ZXMgaW5kZXhlZCBieSBmaWVsZCBuYW1lLgogKiA8L3A+CiAqIDxwPgogKiA8Yj5GQUxTRTwvYj4gaXMgcmV0dXJuZWQgaWYgdGhlcmUgYXJlIG5vIHJvd3MgaW4gdGhlIHJlc3VsdCwgb3Igb24gYW55CiAqIG90aGVyIGVycm9yLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYXJyYXknXSwgZGVmYXVsdDogJ2FycmF5fGZhbHNlJyldCmZ1bmN0aW9uIHBnX2ZldGNoX2FsbCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQsIGludCAkbW9kZSA9IFBHU1FMX0FTU09DKSB7fQoKLyoqCiAqIEZldGNoZXMgYWxsIHJvd3MgaW4gYSBwYXJ0aWN1bGFyIHJlc3VsdCBjb2x1bW4gYXMgYW4gYXJyYXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1mZXRjaC1hbGwtY29sdW1ucy5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+CiAqIFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSA8Yj5wZ19xdWVyeTwvYj4sCiAqIDxiPnBnX3F1ZXJ5X3BhcmFtczwvYj4gb3IgPGI+cGdfZXhlY3V0ZTwvYj4KICogKGFtb25nIG90aGVycykuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmllbGQgW29wdGlvbmFsXSA8cD4KICogQ29sdW1uIG51bWJlciwgemVyby1iYXNlZCwgdG8gYmUgcmV0cmlldmVkIGZyb20gdGhlIHJlc3VsdCByZXNvdXJjZS4gRGVmYXVsdHMKICogdG8gdGhlIGZpcnN0IGNvbHVtbiBpZiBub3Qgc3BlY2lmaWVkLgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgd2l0aCBhbGwgdmFsdWVzIGluIHRoZSByZXN1bHQgY29sdW1uLgogKiA8cD4KICogPGI+RkFMU0U8L2I+IGlzIHJldHVybmVkIGlmIDxpPmNvbHVtbjwvaT4gaXMgbGFyZ2VyIHRoYW4gdGhlIG51bWJlcgogKiBvZiBjb2x1bW5zIGluIHRoZSByZXN1bHQsIG9yIG9uIGFueSBvdGhlciBlcnJvci4KICogPC9wPgogKi8KZnVuY3Rpb24gcGdfZmV0Y2hfYWxsX2NvbHVtbnMoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0LCBpbnQgJGZpZWxkID0gMCk6IGFycmF5IHt9CgovKioKICogUmV0dXJucyBudW1iZXIgb2YgYWZmZWN0ZWQgcmVjb3JkcyAodHVwbGVzKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWFmZmVjdGVkLXJvd3MucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfcXVlcnk8L2I+LAogKiA8Yj5wZ19xdWVyeV9wYXJhbXM8L2I+IG9yIDxiPnBnX2V4ZWN1dGU8L2I+CiAqIChhbW9uZyBvdGhlcnMpLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBieSB0aGUgcXVlcnkuIElmIG5vIHR1cGxlIGlzCiAqIGFmZmVjdGVkLCBpdCB3aWxsIHJldHVybiAwLgogKi8KZnVuY3Rpb24gcGdfYWZmZWN0ZWRfcm93cygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQpOiBpbnQge30KCi8qKgogKiBHZXQgYXN5bmNocm9ub3VzIHF1ZXJ5IHJlc3VsdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWdldC1yZXN1bHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgVGhlIHJlc3VsdCByZXNvdXJjZSwgb3IgPGI+RkFMU0U8L2I+IGlmIG5vIG1vcmUgcmVzdWx0cyBhcmUgYXZhaWxhYmxlLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0fGZhbHNlJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxmYWxzZScpXQpmdW5jdGlvbiBwZ19nZXRfcmVzdWx0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uKSB7fQoKLyoqCiAqIFNldCBpbnRlcm5hbCByb3cgb2Zmc2V0IGluIHJlc3VsdCByZXNvdXJjZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLXJlc3VsdC1zZWVrLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogUG9zdGdyZVNRTCBxdWVyeSByZXN1bHQgcmVzb3VyY2UsIHJldHVybmVkIGJ5IDxiPnBnX3F1ZXJ5PC9iPiwKICogPGI+cGdfcXVlcnlfcGFyYW1zPC9iPiBvciA8Yj5wZ19leGVjdXRlPC9iPgogKiAoYW1vbmcgb3RoZXJzKS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRyb3cgPHA+CiAqIFJvdyB0byBtb3ZlIHRoZSBpbnRlcm5hbCBvZmZzZXQgdG8gaW4gdGhlIDxpPnJlc3VsdDwvaT4gcmVzb3VyY2UuCiAqIFJvd3MgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIGZyb20gemVyby4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBnX3Jlc3VsdF9zZWVrKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCwgaW50ICRyb3cpOiBib29sIHt9CgovKioKICogR2V0IHN0YXR1cyBvZiBxdWVyeSByZXN1bHQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1yZXN1bHQtc3RhdHVzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogUG9zdGdyZVNRTCBxdWVyeSByZXN1bHQgcmVzb3VyY2UsIHJldHVybmVkIGJ5IDxiPnBnX3F1ZXJ5PC9iPiwKICogPGI+cGdfcXVlcnlfcGFyYW1zPC9iPiBvciA8Yj5wZ19leGVjdXRlPC9iPgogKiAoYW1vbmcgb3RoZXJzKS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtb2RlIFtvcHRpb25hbF0gPHA+CiAqIEVpdGhlciA8Yj5QR1NRTF9TVEFUVVNfTE9ORzwvYj4gdG8gcmV0dXJuIHRoZSBudW1lcmljIHN0YXR1cwogKiBvZiB0aGUgPGk+cmVzdWx0PC9pPiwgb3IgPGI+UEdTUUxfU1RBVFVTX1NUUklORzwvYj4KICogdG8gcmV0dXJuIHRoZSBjb21tYW5kIHRhZyBvZiB0aGUgPGk+cmVzdWx0PC9pPi4KICogSWYgbm90IHNwZWNpZmllZCwgPGI+UEdTUUxfU1RBVFVTX0xPTkc8L2I+IGlzIHRoZSBkZWZhdWx0LgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGludCBQb3NzaWJsZSByZXR1cm4gdmFsdWVzIGFyZSA8Yj5QR1NRTF9FTVBUWV9RVUVSWTwvYj4sCiAqIDxiPlBHU1FMX0NPTU1BTkRfT0s8L2I+LCA8Yj5QR1NRTF9UVVBMRVNfT0s8L2I+LCA8Yj5QR1NRTF9DT1BZX09VVDwvYj4sCiAqIDxiPlBHU1FMX0NPUFlfSU48L2I+LCA8Yj5QR1NRTF9CQURfUkVTUE9OU0U8L2I+LCA8Yj5QR1NRTF9OT05GQVRBTF9FUlJPUjwvYj4gYW5kCiAqIDxiPlBHU1FMX0ZBVEFMX0VSUk9SPC9iPiBpZiA8Yj5QR1NRTF9TVEFUVVNfTE9ORzwvYj4gaXMKICogc3BlY2lmaWVkLiBPdGhlcndpc2UsIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFBvc3RncmVTUUwgY29tbWFuZCB0YWcgaXMgcmV0dXJuZWQuCiAqLwpmdW5jdGlvbiBwZ19yZXN1bHRfc3RhdHVzKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCwgaW50ICRtb2RlID0gUEdTUUxfU1RBVFVTX0xPTkcpOiBzdHJpbmd8aW50IHt9CgovKioKICogRnJlZSByZXN1bHQgbWVtb3J5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctZnJlZS1yZXN1bHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfcXVlcnk8L2I+LAogKiA8Yj5wZ19xdWVyeV9wYXJhbXM8L2I+IG9yIDxiPnBnX2V4ZWN1dGU8L2I+CiAqIChhbW9uZyBvdGhlcnMpLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcGdfZnJlZV9yZXN1bHQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0KTogYm9vbCB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGxhc3Qgcm93J3MgT0lECiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctbGFzdC1vaWQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfcXVlcnk8L2I+LAogKiA8Yj5wZ19xdWVyeV9wYXJhbXM8L2I+IG9yIDxiPnBnX2V4ZWN1dGU8L2I+CiAqIChhbW9uZyBvdGhlcnMpLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGludHxmYWxzZSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBPSUQgYXNzaWduZWQgdG8gdGhlIG1vc3QgcmVjZW50bHkgaW5zZXJ0ZWQKICogcm93IGluIHRoZSBzcGVjaWZpZWQgPGk+Y29ubmVjdGlvbjwvaT4sIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvciBvcgogKiBubyBhdmFpbGFibGUgT0lELgogKi8KZnVuY3Rpb24gcGdfbGFzdF9vaWQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0KTogc3RyaW5nfGludHxmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGluIGEgcmVzdWx0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctbnVtLXJvd3MucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfcXVlcnk8L2I+LAogKiA8Yj5wZ19xdWVyeV9wYXJhbXM8L2I+IG9yIDxiPnBnX2V4ZWN1dGU8L2I+CiAqIChhbW9uZyBvdGhlcnMpLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgcmVzdWx0LiBPbiBlcnJvciwgLTEgaXMgcmV0dXJuZWQuCiAqLwpmdW5jdGlvbiBwZ19udW1fcm93cygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQpOiBpbnQge30KCi8qKgogKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmllbGRzIGluIGEgcmVzdWx0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctbnVtLWZpZWxkcy5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+CiAqIFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSA8Yj5wZ19xdWVyeTwvYj4sCiAqIDxiPnBnX3F1ZXJ5X3BhcmFtczwvYj4gb3IgPGI+cGdfZXhlY3V0ZTwvYj4KICogKGFtb25nIG90aGVycykuCiAqIDwvcD4KICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiBmaWVsZHMgKGNvbHVtbnMpIGluIHRoZSByZXN1bHQuIE9uIGVycm9yLCAtMSBpcyByZXR1cm5lZC4KICovCmZ1bmN0aW9uIHBnX251bV9maWVsZHMoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0KTogaW50IHt9CgovKioKICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIGZpZWxkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctZmllbGQtbmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+CiAqIFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSA8Yj5wZ19xdWVyeTwvYj4sCiAqIDxiPnBnX3F1ZXJ5X3BhcmFtczwvYj4gb3IgPGI+cGdfZXhlY3V0ZTwvYj4KICogKGFtb25nIG90aGVycykuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmllbGQgPHA+CiAqIEZpZWxkIG51bWJlciwgc3RhcnRpbmcgZnJvbSAwLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBmaWVsZCBuYW1lLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBwZ19maWVsZF9uYW1lKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCwgaW50ICRmaWVsZCk6IHN0cmluZyB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGZpZWxkIG51bWJlciBvZiB0aGUgbmFtZWQgZmllbGQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1maWVsZC1udW0ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfcXVlcnk8L2I+LAogKiA8Yj5wZ19xdWVyeV9wYXJhbXM8L2I+IG9yIDxiPnBnX2V4ZWN1dGU8L2I+CiAqIChhbW9uZyBvdGhlcnMpLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkIDxwPgogKiBUaGUgbmFtZSBvZiB0aGUgZmllbGQuCiAqIDwvcD4KICogQHJldHVybiBpbnQgVGhlIGZpZWxkIG51bWJlciAobnVtYmVyZWQgZnJvbSAwKSwgb3IgLTEgb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBwZ19maWVsZF9udW0oI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0LCBzdHJpbmcgJGZpZWxkKTogaW50IHt9CgovKioKICogUmV0dXJucyB0aGUgaW50ZXJuYWwgc3RvcmFnZSBzaXplIG9mIHRoZSBuYW1lZCBmaWVsZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWZpZWxkLXNpemUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfcXVlcnk8L2I+LAogKiA8Yj5wZ19xdWVyeV9wYXJhbXM8L2I+IG9yIDxiPnBnX2V4ZWN1dGU8L2I+CiAqIChhbW9uZyBvdGhlcnMpLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZpZWxkIDxwPgogKiBGaWVsZCBudW1iZXIsIHN0YXJ0aW5nIGZyb20gMC4KICogPC9wPgogKiBAcmV0dXJuIGludCBUaGUgaW50ZXJuYWwgZmllbGQgc3RvcmFnZSBzaXplIChpbiBieXRlcykuIC0xIGluZGljYXRlcyBhIHZhcmlhYmxlCiAqIGxlbmd0aCBmaWVsZC4gPGI+RkFMU0U8L2I+IGlzIHJldHVybmVkIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gcGdfZmllbGRfc2l6ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQsIGludCAkZmllbGQpOiBpbnQge30KCi8qKgogKiBSZXR1cm5zIHRoZSB0eXBlIG5hbWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIG51bWJlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWZpZWxkLXR5cGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfcXVlcnk8L2I+LAogKiA8Yj5wZ19xdWVyeV9wYXJhbXM8L2I+IG9yIDxiPnBnX2V4ZWN1dGU8L2I+CiAqIChhbW9uZyBvdGhlcnMpLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZpZWxkIDxwPgogKiBGaWVsZCBudW1iZXIsIHN0YXJ0aW5nIGZyb20gMC4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBiYXNlIG5hbWUgb2YgdGhlIGZpZWxkJ3MgdHlwZSwgb3IgPGI+RkFMU0U8L2I+CiAqIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gcGdfZmllbGRfdHlwZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQsIGludCAkZmllbGQpOiBzdHJpbmcge30KCi8qKgogKiBSZXR1cm5zIHRoZSB0eXBlIElEIChPSUQpIGZvciB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCBudW1iZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1maWVsZC10eXBlLW9pZC5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+CiAqIFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSA8Yj5wZ19xdWVyeTwvYj4sCiAqIDxiPnBnX3F1ZXJ5X3BhcmFtczwvYj4gb3IgPGI+cGdfZXhlY3V0ZTwvYj4KICogKGFtb25nIG90aGVycykuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmllbGQgPHA+CiAqIEZpZWxkIG51bWJlciwgc3RhcnRpbmcgZnJvbSAwLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGludCBUaGUgT0lEIG9mIHRoZSBmaWVsZCdzIGJhc2UgdHlwZS4gPGI+RkFMU0U8L2I+IGlzIHJldHVybmVkIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gcGdfZmllbGRfdHlwZV9vaWQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0LCBpbnQgJGZpZWxkKTogc3RyaW5nfGludCB7fQoKLyoqCiAqIFJldHVybnMgdGhlIHByaW50ZWQgbGVuZ3RoCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctZmllbGQtcHJ0bGVuLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogUG9zdGdyZVNRTCBxdWVyeSByZXN1bHQgcmVzb3VyY2UsIHJldHVybmVkIGJ5IDxiPnBnX3F1ZXJ5PC9iPiwKICogPGI+cGdfcXVlcnlfcGFyYW1zPC9iPiBvciA8Yj5wZ19leGVjdXRlPC9iPgogKiAoYW1vbmcgb3RoZXJzKS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRyb3cKICogQHBhcmFtIG1peGVkICRmaWVsZCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBmaWVsZCBwcmludGVkIGxlbmd0aCwgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KZnVuY3Rpb24gcGdfZmllbGRfcHJ0bGVuKAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0LAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJHJvdyA9IDAsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gJHJvdywKICAgIHN0cmluZ3xpbnQgJGZpZWxkCik6IGludHxmYWxzZSB7fQoKLyoqCiAqIFRlc3QgaWYgYSBmaWVsZCBpcyBTUUwgTlVMTAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWZpZWxkLWlzLW51bGwucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfcXVlcnk8L2I+LAogKiA8Yj5wZ19xdWVyeV9wYXJhbXM8L2I+IG9yIDxiPnBnX2V4ZWN1dGU8L2I+CiAqIChhbW9uZyBvdGhlcnMpLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHJvdyA8cD4KICogUm93IG51bWJlciBpbiByZXN1bHQgdG8gZmV0Y2guIFJvd3MgYXJlIG51bWJlcmVkIGZyb20gMCB1cHdhcmRzLiBJZiBvbWl0dGVkLAogKiBjdXJyZW50IHJvdyBpcyBmZXRjaGVkLgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAkZmllbGQgW29wdGlvbmFsXSA8cD4KICogRmllbGQgbnVtYmVyIChzdGFydGluZyBmcm9tIDApIGFzIGFuIGludGVnZXIgb3IKICogdGhlIGZpZWxkIG5hbWUgYXMgYSBzdHJpbmcuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgMSBpZiB0aGUgZmllbGQgaW4gdGhlIGdpdmVuIHJvdyBpcyBTUUwgTlVMTCwgMAogKiBpZiBub3QuIDxiPkZBTFNFPC9iPiBpcyByZXR1cm5lZCBpZiB0aGUgcm93IGlzIG91dCBvZiByYW5nZSwgb3IgdXBvbiBhbnkgb3RoZXIgZXJyb3IuCiAqLwpmdW5jdGlvbiBwZ19maWVsZF9pc19udWxsKAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0LAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJHJvdyA9IDAsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gJHJvdywKICAgIHN0cmluZ3xpbnQgJGZpZWxkCik6IGludHxmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG5hbWUgb3Igb2lkIG9mIHRoZSB0YWJsZXMgZmllbGQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1maWVsZC10YWJsZS5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+CiAqIFBvc3RncmVTUUwgcXVlcnkgcmVzdWx0IHJlc291cmNlLCByZXR1cm5lZCBieSA8Yj5wZ19xdWVyeTwvYj4sCiAqIDxiPnBnX3F1ZXJ5X3BhcmFtczwvYj4gb3IgPGI+cGdfZXhlY3V0ZTwvYj4KICogKGFtb25nIG90aGVycykuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmllbGQgPHA+CiAqIEZpZWxkIG51bWJlciwgc3RhcnRpbmcgZnJvbSAwLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRvaWRfb25seSBbb3B0aW9uYWxdIDxwPgogKiBCeSBkZWZhdWx0IHRoZSB0YWJsZXMgbmFtZSB0aGF0IGZpZWxkIGJlbG9uZ3MgdG8gaXMgcmV0dXJuZWQgYnV0CiAqIGlmIDxpPm9pZF9vbmx5PC9pPiBpcyBzZXQgdG8gPGI+VFJVRTwvYj4sIHRoZW4gdGhlCiAqIG9pZCB3aWxsIGluc3RlYWQgYmUgcmV0dXJuZWQuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8aW50fGZhbHNlIE9uIHN1Y2Nlc3MgZWl0aGVyIHRoZSBmaWVsZHMgdGFibGUgbmFtZSBvciBvaWQuIE9yLCA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBnX2ZpZWxkX3RhYmxlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCwgaW50ICRmaWVsZCwgYm9vbCAkb2lkX29ubHkgPSBmYWxzZSk6IHN0cmluZ3xpbnR8ZmFsc2Uge30KCi8qKgogKiBHZXRzIFNRTCBOT1RJRlkgbWVzc2FnZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWdldC1ub3RpZnkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG1vZGUgW29wdGlvbmFsXSA8cD4KICogQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgY29udHJvbHMKICogaG93IHRoZSByZXR1cm5lZCBhcnJheSBpcyBpbmRleGVkLgogKiA8aT5yZXN1bHRfdHlwZTwvaT4gaXMgYSBjb25zdGFudCBhbmQgY2FuIHRha2UgdGhlCiAqIGZvbGxvd2luZyB2YWx1ZXM6IDxiPlBHU1FMX0FTU09DPC9iPiwKICogPGI+UEdTUUxfTlVNPC9iPiBhbmQgPGI+UEdTUUxfQk9USDwvYj4uCiAqIFVzaW5nIDxiPlBHU1FMX05VTTwvYj4sIDxiPnBnX2dldF9ub3RpZnk8L2I+CiAqIHdpbGwgcmV0dXJuIGFuIGFycmF5IHdpdGggbnVtZXJpY2FsIGluZGljZXMsIHVzaW5nCiAqIDxiPlBHU1FMX0FTU09DPC9iPiBpdCB3aWxsIHJldHVybiBvbmx5IGFzc29jaWF0aXZlIGluZGljZXMKICogd2hpbGUgPGI+UEdTUUxfQk9USDwvYj4sIHRoZSBkZWZhdWx0LCB3aWxsIHJldHVybiBib3RoCiAqIG51bWVyaWNhbCBhbmQgYXNzb2NpYXRpdmUgaW5kaWNlcy4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIE5PVElGWSBtZXNzYWdlIG5hbWUgYW5kIGJhY2tlbmQgUElELgogKiBPdGhlcndpc2UgaWYgbm8gTk9USUZZIGlzIHdhaXRpbmcsIHRoZW4gPGI+RkFMU0U8L2I+IGlzIHJldHVybmVkLgogKi8KI1tBcnJheVNoYXBlKFsibWVzc2FnZSIgPT4gInN0cmluZyIsICJwaWQiID0+ICJpbnQiLCAicGF5bG9hZCIgPT4gInN0cmluZyJdKV0KZnVuY3Rpb24gcGdfZ2V0X25vdGlmeSgKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiwKICAgIGludCAkbW9kZSA9IDEKKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBHZXRzIHRoZSBiYWNrZW5kJ3MgcHJvY2VzcyBJRAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWdldC1waWQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IFRoZSBiYWNrZW5kIGRhdGFiYXNlIHByb2Nlc3MgSUQuCiAqLwpmdW5jdGlvbiBwZ19nZXRfcGlkKAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGNvbm5lY3Rpb24gPSBudWxsLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAopOiBpbnQge30KCi8qKgogKiBHZXQgZXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggcmVzdWx0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctcmVzdWx0LWVycm9yLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogUG9zdGdyZVNRTCBxdWVyeSByZXN1bHQgcmVzb3VyY2UsIHJldHVybmVkIGJ5IDxiPnBnX3F1ZXJ5PC9iPiwKICogPGI+cGdfcXVlcnlfcGFyYW1zPC9iPiBvciA8Yj5wZ19leGVjdXRlPC9iPgogKiAoYW1vbmcgb3RoZXJzKS4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBhIHN0cmluZyBpZiB0aGVyZSBpcyBhbiBlcnJvciBhc3NvY2lhdGVkIHdpdGggdGhlCiAqIDxpPnJlc3VsdDwvaT4gcGFyYW1ldGVyLCA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlLgogKi8KZnVuY3Rpb24gcGdfcmVzdWx0X2Vycm9yKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgYW4gaW5kaXZpZHVhbCBmaWVsZCBvZiBhbiBlcnJvciByZXBvcnQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctcmVzdWx0LWVycm9yLWZpZWxkLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogQSBQb3N0Z3JlU1FMIHF1ZXJ5IHJlc3VsdCByZXNvdXJjZSBmcm9tIGEgcHJldmlvdXNseSBleGVjdXRlZAogKiBzdGF0ZW1lbnQuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmllbGRfY29kZSA8cD4KICogUG9zc2libGUgPGk+ZmllbGRjb2RlPC9pPiB2YWx1ZXMgYXJlOiA8Yj5QR1NRTF9ESUFHX1NFVkVSSVRZPC9iPiwKICogPGI+UEdTUUxfRElBR19TUUxTVEFURTwvYj4sIDxiPlBHU1FMX0RJQUdfTUVTU0FHRV9QUklNQVJZPC9iPiwKICogPGI+UEdTUUxfRElBR19NRVNTQUdFX0RFVEFJTDwvYj4sCiAqIDxiPlBHU1FMX0RJQUdfTUVTU0FHRV9ISU5UPC9iPiwgPGI+UEdTUUxfRElBR19TVEFURU1FTlRfUE9TSVRJT048L2I+LAogKiA8Yj5QR1NRTF9ESUFHX0lOVEVSTkFMX1BPU0lUSU9OPC9iPiAoUG9zdGdyZVNRTCA4LjArIG9ubHkpLAogKiA8Yj5QR1NRTF9ESUFHX0lOVEVSTkFMX1FVRVJZPC9iPiAoUG9zdGdyZVNRTCA4LjArIG9ubHkpLAogKiA8Yj5QR1NRTF9ESUFHX0NPTlRFWFQ8L2I+LCA8Yj5QR1NRTF9ESUFHX1NPVVJDRV9GSUxFPC9iPiwKICogPGI+UEdTUUxfRElBR19TT1VSQ0VfTElORTwvYj4gb3IKICogPGI+UEdTUUxfRElBR19TT1VSQ0VfRlVOQ1RJT048L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfG51bGx8ZmFsc2UgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGVycm9yIGZpZWxkLCA8Yj5OVUxMPC9iPiBpZiB0aGUgZmllbGQgZG9lcyBub3QgZXhpc3Qgb3IgPGI+RkFMU0U8L2I+CiAqIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwZ19yZXN1bHRfZXJyb3JfZmllbGQoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQsCiAgICBpbnQgJGZpZWxkX2NvZGUKKTogc3RyaW5nfGZhbHNlfG51bGwge30KCi8qKgogKiBHZXQgdGhlIGxhc3QgZXJyb3IgbWVzc2FnZSBzdHJpbmcgb2YgYSBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctbGFzdC1lcnJvci5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFtvcHRpb25hbF0gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgbGFzdCBlcnJvciBtZXNzYWdlIG9uIHRoZQogKiBnaXZlbiA8aT5jb25uZWN0aW9uPC9pPiwgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KZnVuY3Rpb24gcGdfbGFzdF9lcnJvcigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9ufG51bGwnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uID0gbnVsbCk6IHN0cmluZyB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGxhc3Qgbm90aWNlIG1lc3NhZ2UgZnJvbSBQb3N0Z3JlU1FMIHNlcnZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWxhc3Qtbm90aWNlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtb2RlIFtvcHRpb25hbF0gPHA+CiAqIE9uZSBvZiA8Yj5QR1NRTF9OT1RJQ0VfTEFTVDwvYj4gKHRvIHJldHVybiBsYXN0IG5vdGljZSksCiAqIDxiPlBHU1FMX05PVElDRV9BTEw8L2I+ICh0byByZXR1cm4gYWxsIG5vdGljZXMpLCBvcgogKiA8Yj5QR1NRTF9OT1RJQ0VfQ0xFQVI8L2I+ICh0byBjbGVhciBub3RpY2VzKS4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fHN0cmluZ3xib29sIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGxhc3Qgbm90aWNlIG9uIHRoZQogKiBnaXZlbiA8aT5jb25uZWN0aW9uPC9pPiB3aXRoIDxiPlBHU1FMX05PVElDRV9MQVNUPC9iPiwKICogYW4gYXJyYXkgd2l0aCA8Yj5QR1NRTF9OT1RJQ0VfQUxMPC9iPiwKICogYSBib29sIHdpdGggPGI+UEdTUUxfTk9USUNFX0NMRUFSPC9iPiwgb3IKICogPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KZnVuY3Rpb24gcGdfbGFzdF9ub3RpY2UoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sIGludCAkbW9kZSA9IFBHU1FMX05PVElDRV9MQVNUKTogYXJyYXl8c3RyaW5nfGJvb2wge30KCi8qKgogKiBTZW5kIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZyB0byBQb3N0Z3JlU1FMIGJhY2tlbmQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1wdXQtbGluZS5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuIFdoZW4KICogPGk+Y29ubmVjdGlvbjwvaT4gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogPGI+cGdfY29ubmVjdDwvYj4gb3IgPGI+cGdfcGNvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IFtvcHRpb25hbF0gPHA+CiAqIEEgbGluZSBvZiB0ZXh0IHRvIGJlIHNlbnQgZGlyZWN0bHkgdG8gdGhlIFBvc3RncmVTUUwgYmFja2VuZC4gQSBOVUxMCiAqIHRlcm1pbmF0b3IgaXMgYWRkZWQgYXV0b21hdGljYWxseS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBnX3B1dF9saW5lKAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGNvbm5lY3Rpb24gPSBudWxsLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAogICAgc3RyaW5nICRxdWVyeQopOiBib29sIHt9CgovKioKICogU3luYyB3aXRoIFBvc3RncmVTUUwgYmFja2VuZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWVuZC1jb3B5LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gW29wdGlvbmFsXSA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiBXaGVuCiAqIDxpPmNvbm5lY3Rpb248L2k+IGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIDxiPnBnX2Nvbm5lY3Q8L2I+IG9yIDxiPnBnX3Bjb25uZWN0PC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBnX2VuZF9jb3B5KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb258bnVsbCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24gPSBudWxsKTogYm9vbCB7fQoKLyoqCiAqIENvcHkgYSB0YWJsZSB0byBhbiBhcnJheQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWNvcHktdG8ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlX25hbWUgPHA+CiAqIE5hbWUgb2YgdGhlIHRhYmxlIGZyb20gd2hpY2ggdG8gY29weSB0aGUgZGF0YSBpbnRvIDxpPnJvd3M8L2k+LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHNlcGFyYXRvciBbb3B0aW9uYWxdIDxwPgogKiBUaGUgdG9rZW4gdGhhdCBzZXBhcmF0ZXMgdmFsdWVzIGZvciBlYWNoIGZpZWxkIGluIGVhY2ggZWxlbWVudCBvZgogKiA8aT5yb3dzPC9pPi4gRGVmYXVsdCBpcyBUQUIuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbnVsbF9hcyBbb3B0aW9uYWxdIDxwPgogKiBIb3cgU1FMIE5VTEwgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUKICogPGk+cm93czwvaT4uIERlZmF1bHQgaXMgXE4gKCJcXE4iKS4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFuIGFycmF5IHdpdGggb25lIGVsZW1lbnQgZm9yIGVhY2ggbGluZSBvZiBDT1BZIGRhdGEuCiAqIEl0IHJldHVybnMgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwZ19jb3B5X3RvKAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sCiAgICBzdHJpbmcgJHRhYmxlX25hbWUsCiAgICBzdHJpbmcgJHNlcGFyYXRvciA9ICcJJywKICAgIHN0cmluZyAkbnVsbF9hcyA9ICdcXFxcTicKKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBJbnNlcnQgcmVjb3JkcyBpbnRvIGEgdGFibGUgZnJvbSBhbiBhcnJheQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWNvcHktZnJvbS5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZSA8cD4KICogTmFtZSBvZiB0aGUgdGFibGUgaW50byB3aGljaCB0byBjb3B5IHRoZSA8aT5yb3dzPC9pPi4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJHJvd3MgPHA+CiAqIEFuIGFycmF5IG9mIGRhdGEgdG8gYmUgY29waWVkIGludG8gPGk+dGFibGVfbmFtZTwvaT4uCiAqIEVhY2ggdmFsdWUgaW4gPGk+cm93czwvaT4gYmVjb21lcyBhIHJvdyBpbiA8aT50YWJsZV9uYW1lPC9pPi4KICogRWFjaCB2YWx1ZSBpbiA8aT5yb3dzPC9pPiBzaG91bGQgYmUgYSBkZWxpbWl0ZWQgc3RyaW5nIG9mIHRoZSB2YWx1ZXMKICogdG8gaW5zZXJ0IGludG8gZWFjaCBmaWVsZC4gVmFsdWVzIHNob3VsZCBiZSBsaW5lZmVlZCB0ZXJtaW5hdGVkLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHNlcGFyYXRvciBbb3B0aW9uYWxdIDxwPgogKiBUaGUgdG9rZW4gdGhhdCBzZXBhcmF0ZXMgdmFsdWVzIGZvciBlYWNoIGZpZWxkIGluIGVhY2ggZWxlbWVudCBvZgogKiA8aT5yb3dzPC9pPi4gRGVmYXVsdCBpcyBUQUIuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbnVsbF9hcyBbb3B0aW9uYWxdIDxwPgogKiBIb3cgU1FMIE5VTEwgdmFsdWVzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUKICogPGk+cm93czwvaT4uIERlZmF1bHQgaXMgXE4gKCJcXE4iKS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBnX2NvcHlfZnJvbSgKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAogICAgc3RyaW5nICR0YWJsZV9uYW1lLAogICAgYXJyYXkgJHJvd3MsCiAgICBzdHJpbmcgJHNlcGFyYXRvciA9ICcJJywKICAgIHN0cmluZyAkbnVsbF9hcyA9ICdcXFxcTicKKTogYm9vbCB7fQoKLyoqCiAqIEVuYWJsZSB0cmFjaW5nIGEgUG9zdGdyZVNRTCBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctdHJhY2UucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIDxwPgogKiBUaGUgZnVsbCBwYXRoIGFuZCBmaWxlIG5hbWUgb2YgdGhlIGZpbGUgaW4gd2hpY2ggdG8gd3JpdGUgdGhlCiAqIHRyYWNlIGxvZy4gU2FtZSBhcyBpbiA8Yj5mb3BlbjwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbW9kZSBbb3B0aW9uYWxdIDxwPgogKiBBbiBvcHRpb25hbCBmaWxlIGFjY2VzcyBtb2RlLCBzYW1lIGFzIGZvciA8Yj5mb3BlbjwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFtvcHRpb25hbF0gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkdHJhY2VfbW9kZSBTaW5jZSBQSFAgOC4zIG9wdGlvbmFsIHRyYWNlIG1vZGUKICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwZ190cmFjZSgKICAgIHN0cmluZyAkZmlsZW5hbWUsCiAgICBzdHJpbmcgJG1vZGUgPSAidyIsCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9ufG51bGwnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMycpXSBpbnQgJHRyYWNlX21vZGUgPSAwCik6IGJvb2wge30KCi8qKgogKiBEaXNhYmxlIHRyYWNpbmcgb2YgYSBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy11bnRyYWNlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gW29wdGlvbmFsXSA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiBXaGVuCiAqIDxpPmNvbm5lY3Rpb248L2k+IGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIDxiPnBnX2Nvbm5lY3Q8L2I+IG9yIDxiPnBnX3Bjb25uZWN0PC9iPi4KICogPC9wPgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4zJyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQpmdW5jdGlvbiBwZ191bnRyYWNlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb258bnVsbCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24gPSBudWxsKSB7fQoKLyoqCiAqIENyZWF0ZSBhIGxhcmdlIG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWxvLWNyZWF0ZS5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFtvcHRpb25hbF0gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIG1peGVkICRvaWQgW29wdGlvbmFsXSA8cD4KICogSWYgYW4gPGk+b2JqZWN0X2lkPC9pPiBpcyBnaXZlbiB0aGUgZnVuY3Rpb24KICogd2lsbCB0cnkgdG8gY3JlYXRlIGEgbGFyZ2Ugb2JqZWN0IHdpdGggdGhpcyBpZCwgZWxzZSBhIGZyZWUKICogb2JqZWN0IGlkIGlzIGFzc2lnbmVkIGJ5IHRoZSBzZXJ2ZXIuIFRoZSBwYXJhbWV0ZXIKICogd2FzIGFkZGVkIGluIFBIUCA1LjMgYW5kIHJlbGllcyBvbiBmdW5jdGlvbmFsaXR5IHRoYXQgZmlyc3QKICogYXBwZWFyZWQgaW4gUG9zdGdyZVNRTCA4LjEuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8aW50fGZhbHNlIEEgbGFyZ2Ugb2JqZWN0IE9JRCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBwZ19sb19jcmVhdGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sICRvaWQpOiBzdHJpbmd8aW50fGZhbHNlIHt9CgovKioKICogRGVsZXRlIGEgbGFyZ2Ugb2JqZWN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctbG8tdW5saW5rLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkb2lkIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBPSUQgb2YgdGhlIGxhcmdlIG9iamVjdCBpbiB0aGUgZGF0YWJhc2UuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwZ19sb191bmxpbmsoCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSAkY29ubmVjdGlvbiA9IG51bGwsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sCiAgICAkb2lkCik6IGJvb2wge30KCi8qKgogKiBPcGVuIGEgbGFyZ2Ugb2JqZWN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctbG8tb3Blbi5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuIFdoZW4KICogPGk+Y29ubmVjdGlvbjwvaT4gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogPGI+cGdfY29ubmVjdDwvYj4gb3IgPGI+cGdfcGNvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG9pZCBbb3B0aW9uYWxdIDxwPgogKiBUaGUgT0lEIG9mIHRoZSBsYXJnZSBvYmplY3QgaW4gdGhlIGRhdGFiYXNlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG1vZGUgW29wdGlvbmFsXSA8cD4KICogQ2FuIGJlIGVpdGhlciAiciIgZm9yIHJlYWQtb25seSwgInciIGZvciB3cml0ZSBvbmx5IG9yICJydyIgZm9yIHJlYWQgYW5kCiAqIHdyaXRlLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgQSBsYXJnZSBvYmplY3QgcmVzb3VyY2Ugb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcTG9ifGZhbHNlJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxmYWxzZScpXQpmdW5jdGlvbiBwZ19sb19vcGVuKAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGNvbm5lY3Rpb24gPSBudWxsLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAogICAgJG9pZCwKICAgIHN0cmluZyAkbW9kZQopIHt9CgovKioKICogQ2xvc2UgYSBsYXJnZSBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1sby1jbG9zZS5waHAKICogQHBhcmFtIHJlc291cmNlICRsb2IKICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwZ19sb19jbG9zZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxMb2InXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsb2IpOiBib29sIHt9CgovKioKICogUmVhZCBhIGxhcmdlIG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWxvLXJlYWQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbG9iIDxwPgogKiBQb3N0Z3JlU1FMIGxhcmdlIG9iamVjdCAoTE9CKSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfbG9fb3BlbjwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkbGVuZ3RoIFtvcHRpb25hbF0gPHA+CiAqIEFuIG9wdGlvbmFsIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJldHVybi4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBBIHN0cmluZyBjb250YWluaW5nIDxpPmxlbjwvaT4gYnl0ZXMgZnJvbSB0aGUKICogbGFyZ2Ugb2JqZWN0LCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBwZ19sb19yZWFkKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXExvYiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxvYiwgaW50ICRsZW5ndGggPSA4MTkyKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogV3JpdGUgdG8gYSBsYXJnZSBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1sby13cml0ZS5waHAKICogQHBhcmFtIHJlc291cmNlICRsb2IgPHA+CiAqIFBvc3RncmVTUUwgbGFyZ2Ugb2JqZWN0IChMT0IpIHJlc291cmNlLCByZXR1cm5lZCBieSA8Yj5wZ19sb19vcGVuPC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPgogKiBUaGUgZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBsYXJnZSBvYmplY3QuIElmIDxpPmxlbjwvaT4gaXMKICogc3BlY2lmaWVkIGFuZCBpcyBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiA8aT5kYXRhPC9pPiwgb25seQogKiA8aT5sZW48L2k+IGJ5dGVzIHdpbGwgYmUgd3JpdHRlbi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRsZW5ndGggW29wdGlvbmFsXSA8cD4KICogQW4gb3B0aW9uYWwgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUuIE11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8KICogYW5kIG5vIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIDxpPmRhdGE8L2k+LiBEZWZhdWx0cyB0bwogKiB0aGUgbGVuZ3RoIG9mIDxpPmRhdGE8L2k+LgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGUgbGFyZ2Ugb2JqZWN0LCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBwZ19sb193cml0ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxMb2InXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsb2IsIHN0cmluZyAkZGF0YSwgP2ludCAkbGVuZ3RoID0gbnVsbCk6IGludHxmYWxzZSB7fQoKLyoqCiAqIFJlYWRzIGFuIGVudGlyZSBsYXJnZSBvYmplY3QgYW5kIHNlbmQgc3RyYWlnaHQgdG8gYnJvd3NlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWxvLXJlYWQtYWxsLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxvYiA8cD4KICogUG9zdGdyZVNRTCBsYXJnZSBvYmplY3QgKExPQikgcmVzb3VyY2UsIHJldHVybmVkIGJ5IDxiPnBnX2xvX29wZW48L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIE51bWJlciBvZiBieXRlcyByZWFkIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCmZ1bmN0aW9uIHBnX2xvX3JlYWRfYWxsKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXExvYiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxvYik6IGludCB7fQoKLyoqCiAqIEltcG9ydCBhIGxhcmdlIG9iamVjdCBmcm9tIGZpbGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1sby1pbXBvcnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiBXaGVuCiAqIDxpPmNvbm5lY3Rpb248L2k+IGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIDxiPnBnX2Nvbm5lY3Q8L2I+IG9yIDxiPnBnX3Bjb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXRobmFtZSA8cD4KICogVGhlIGZ1bGwgcGF0aCBhbmQgZmlsZSBuYW1lIG9mIHRoZSBmaWxlIG9uIHRoZSBjbGllbnQKICogZmlsZXN5c3RlbSBmcm9tIHdoaWNoIHRvIHJlYWQgdGhlIGxhcmdlIG9iamVjdCBkYXRhLgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAkb2JqZWN0X2lkIFtvcHRpb25hbF0gPHA+CiAqIElmIGFuIDxpPm9iamVjdF9pZDwvaT4gaXMgZ2l2ZW4gdGhlIGZ1bmN0aW9uCiAqIHdpbGwgdHJ5IHRvIGNyZWF0ZSBhIGxhcmdlIG9iamVjdCB3aXRoIHRoaXMgaWQsIGVsc2UgYSBmcmVlCiAqIG9iamVjdCBpZCBpcyBhc3NpZ25lZCBieSB0aGUgc2VydmVyLiBUaGUgcGFyYW1ldGVyCiAqIHdhcyBhZGRlZCBpbiBQSFAgNS4zIGFuZCByZWxpZXMgb24gZnVuY3Rpb25hbGl0eSB0aGF0IGZpcnN0CiAqIGFwcGVhcmVkIGluIFBvc3RncmVTUUwgOC4xLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGludHxmYWxzZSBUaGUgT0lEIG9mIHRoZSBuZXdseSBjcmVhdGVkIGxhcmdlIG9iamVjdCwgb3IKICogPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwZ19sb19pbXBvcnQoCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSAkY29ubmVjdGlvbiA9IG51bGwsCiAgICAkcGF0aG5hbWUsCiAgICAkb2JqZWN0X2lkID0gbnVsbAopOiBzdHJpbmd8aW50fGZhbHNlIHt9CgovKioKICogRXhwb3J0IGEgbGFyZ2Ugb2JqZWN0IHRvIGZpbGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1sby1leHBvcnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogUG9zdGdyZVNRTCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlLiBXaGVuCiAqIDxpPmNvbm5lY3Rpb248L2k+IGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdCBjb25uZWN0aW9uCiAqIGlzIHVzZWQuIFRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gaXMgdGhlIGxhc3QgY29ubmVjdGlvbiBtYWRlIGJ5CiAqIDxiPnBnX2Nvbm5lY3Q8L2I+IG9yIDxiPnBnX3Bjb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvaWQgPHA+CiAqIFRoZSBPSUQgb2YgdGhlIGxhcmdlIG9iamVjdCBpbiB0aGUgZGF0YWJhc2UuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGF0aG5hbWUgPHA+CiAqIFRoZSBmdWxsIHBhdGggYW5kIGZpbGUgbmFtZSBvZiB0aGUgZmlsZSBpbiB3aGljaCB0byB3cml0ZSB0aGUKICogbGFyZ2Ugb2JqZWN0IG9uIHRoZSBjbGllbnQgZmlsZXN5c3RlbS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBnX2xvX2V4cG9ydCgKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoJzguMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICRvaWQsCiAgICAkcGF0aG5hbWUKKTogYm9vbCB7fQoKLyoqCiAqIFNlZWtzIHBvc2l0aW9uIHdpdGhpbiBhIGxhcmdlIG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWxvLXNlZWsucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbG9iIDxwPgogKiBQb3N0Z3JlU1FMIGxhcmdlIG9iamVjdCAoTE9CKSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfbG9fb3BlbjwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkb2Zmc2V0IDxwPgogKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNlZWsuCiAqIDwvcD4KICogQHBhcmFtIGludCAkd2hlbmNlIFtvcHRpb25hbF0gPHA+CiAqIE9uZSBvZiB0aGUgY29uc3RhbnRzIDxiPlBHU1FMX1NFRUtfU0VUPC9iPiAoc2VlayBmcm9tIG9iamVjdCBzdGFydCksCiAqIDxiPlBHU1FMX1NFRUtfQ1VSPC9iPiAoc2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24pCiAqIG9yIDxiPlBHU1FMX1NFRUtfRU5EPC9iPiAoc2VlayBmcm9tIG9iamVjdCBlbmQpIC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBnX2xvX3NlZWsoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcTG9iJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbG9iLCBpbnQgJG9mZnNldCwgaW50ICR3aGVuY2UgPSBQR1NRTF9TRUVLX0NVUik6IGJvb2wge30KCi8qKgogKiBSZXR1cm5zIGN1cnJlbnQgc2VlayBwb3NpdGlvbiBhIG9mIGxhcmdlIG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWxvLXRlbGwucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbG9iIDxwPgogKiBQb3N0Z3JlU1FMIGxhcmdlIG9iamVjdCAoTE9CKSByZXNvdXJjZSwgcmV0dXJuZWQgYnkgPGI+cGdfbG9fb3BlbjwvYj4uCiAqIDwvcD4KICogQHJldHVybiBpbnQgVGhlIGN1cnJlbnQgc2VlayBvZmZzZXQgKGluIG51bWJlciBvZiBieXRlcykgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsYXJnZQogKiBvYmplY3QuIElmIHRoZXJlIGlzIGFuIGVycm9yLCB0aGUgcmV0dXJuIHZhbHVlIGlzIG5lZ2F0aXZlLgogKi8KZnVuY3Rpb24gcGdfbG9fdGVsbCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxMb2InXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsb2IpOiBpbnQge30KCi8qKgogKiAgVHJ1bmNhdGVzIGEgbGFyZ2Ugb2JqZWN0CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWxvLXRydW5jYXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxvYiA8cD4KICogUG9zdGdyZVNRTCBsYXJnZSBvYmplY3QgKExPQikgcmVzb3VyY2UsIHJldHVybmVkIGJ5IDxiPnBnX2xvX29wZW48L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHNpemUgVGhlIG51bWJlciBvZiBieXRlcyB0byB0cnVuY2F0ZS4KICogQHJldHVybiBib29sIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwZ19sb190cnVuY2F0ZSgKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXExvYiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxvYiwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldIGludCAkc2l6ZSA9IDAsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gaW50ICRzaXplCik6IGJvb2wge30KCi8qKgogKiBFc2NhcGUgYSBzdHJpbmcgZm9yIHF1ZXJ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctZXNjYXBlLXN0cmluZy5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuIFdoZW4KICogPGk+Y29ubmVjdGlvbjwvaT4gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogPGI+cGdfY29ubmVjdDwvYj4gb3IgPGI+cGdfcGNvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBbb3B0aW9uYWxdIDxwPgogKiBBIHN0cmluZyBjb250YWluaW5nIHRleHQgdG8gYmUgZXNjYXBlZC4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyBjb250YWluaW5nIHRoZSBlc2NhcGVkIGRhdGEuCiAqLwpmdW5jdGlvbiBwZ19lc2NhcGVfc3RyaW5nKAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGNvbm5lY3Rpb24gPSBudWxsLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAogICAgc3RyaW5nICRzdHJpbmcKKTogc3RyaW5nIHt9CgovKioKICogRXNjYXBlIGEgc3RyaW5nIGZvciBpbnNlcnRpb24gaW50byBhIGJ5dGVhIGZpZWxkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctZXNjYXBlLWJ5dGVhLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIFtvcHRpb25hbF0gPHA+CiAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGV4dCBvciBiaW5hcnkgZGF0YSB0byBiZSBpbnNlcnRlZCBpbnRvIGEgYnl0ZWEKICogY29sdW1uLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVzY2FwZWQgZGF0YS4KICovCmZ1bmN0aW9uIHBnX2VzY2FwZV9ieXRlYSgKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiwKICAgIHN0cmluZyAkc3RyaW5nCik6IHN0cmluZyB7fQoKLyoqCiAqIEVzY2FwZSBhIGlkZW50aWZpZXIgZm9yIGluc2VydGlvbiBpbnRvIGEgdGV4dCBmaWVsZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWVzY2FwZS1pZGVudGlmaWVyLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIFtvcHRpb25hbF0gPHA+CiAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGV4dCB0byBiZSBlc2NhcGVkLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVzY2FwZWQgZGF0YS4KICogQHNpbmNlIDUuNC40CiAqLwpmdW5jdGlvbiBwZ19lc2NhcGVfaWRlbnRpZmllcigKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuNCcsIHRvOiAnNy40JyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiwKICAgIHN0cmluZyAkc3RyaW5nCik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIEVzY2FwZSBhIGxpdGVyYWwgZm9yIGluc2VydGlvbiBpbnRvIGEgdGV4dCBmaWVsZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWVzY2FwZS1saXRlcmFsLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIFtvcHRpb25hbF0gPHA+CiAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGV4dCB0byBiZSBlc2NhcGVkLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVzY2FwZWQgZGF0YS4KICogQHNpbmNlIDUuNC40CiAqLwpmdW5jdGlvbiBwZ19lc2NhcGVfbGl0ZXJhbCgKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuNCcsIHRvOiAnNy40JyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiwKICAgIHN0cmluZyAkc3RyaW5nCik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIFVuZXNjYXBlIGJpbmFyeSBmb3IgYnl0ZWEgdHlwZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLXVuZXNjYXBlLWJ5dGVhLnBocAogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgUG9zdGdyZVNRTCBieXRlYSBkYXRhIHRvIGJlIGNvbnZlcnRlZCBpbnRvCiAqIGEgUEhQIGJpbmFyeSBzdHJpbmcuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgdW5lc2NhcGVkIGRhdGEuCiAqLwpmdW5jdGlvbiBwZ191bmVzY2FwZV9ieXRlYShzdHJpbmcgJHN0cmluZyk6IHN0cmluZyB7fQoKLyoqCiAqIERldGVybWluZXMgdGhlIHZlcmJvc2l0eSBvZiBtZXNzYWdlcyByZXR1cm5lZCBieSA8Yj5wZ19sYXN0X2Vycm9yPC9iPgogKiBhbmQgPGI+cGdfcmVzdWx0X2Vycm9yPC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1zZXQtZXJyb3ItdmVyYm9zaXR5LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4gV2hlbgogKiA8aT5jb25uZWN0aW9uPC9pPiBpcyBub3QgcHJlc2VudCwgdGhlIGRlZmF1bHQgY29ubmVjdGlvbgogKiBpcyB1c2VkLiBUaGUgZGVmYXVsdCBjb25uZWN0aW9uIGlzIHRoZSBsYXN0IGNvbm5lY3Rpb24gbWFkZSBieQogKiA8Yj5wZ19jb25uZWN0PC9iPiBvciA8Yj5wZ19wY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkdmVyYm9zaXR5IFtvcHRpb25hbF0gPHA+CiAqIFRoZSByZXF1aXJlZCB2ZXJib3NpdHk6IDxiPlBHU1FMX0VSUk9SU19URVJTRTwvYj4sCiAqIDxiPlBHU1FMX0VSUk9SU19ERUZBVUxUPC9iPgogKiBvciA8Yj5QR1NRTF9FUlJPUlNfVkVSQk9TRTwvYj4uCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIHByZXZpb3VzIHZlcmJvc2l0eSBsZXZlbDogPGI+UEdTUUxfRVJST1JTX1RFUlNFPC9iPiwKICogPGI+UEdTUUxfRVJST1JTX0RFRkFVTFQ8L2I+CiAqIG9yIDxiPlBHU1FMX0VSUk9SU19WRVJCT1NFPC9iPi4KICovCmZ1bmN0aW9uIHBnX3NldF9lcnJvcl92ZXJib3NpdHkoCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSAkY29ubmVjdGlvbiA9IG51bGwsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sCiAgICBpbnQgJHZlcmJvc2l0eQopOiBpbnR8ZmFsc2Uge30KCi8qKgogKiBHZXRzIHRoZSBjbGllbnQgZW5jb2RpbmcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1jbGllbnQtZW5jb2RpbmcucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBbb3B0aW9uYWxdIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuIFdoZW4KICogPGk+Y29ubmVjdGlvbjwvaT4gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogPGI+cGdfY29ubmVjdDwvYj4gb3IgPGI+cGdfcGNvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBjbGllbnQgZW5jb2RpbmcsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCmZ1bmN0aW9uIHBnX2NsaWVudF9lbmNvZGluZygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9ufG51bGwnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uID0gbnVsbCk6IHN0cmluZyB7fQoKLyoqCiAqIFNldCB0aGUgY2xpZW50IGVuY29kaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctc2V0LWNsaWVudC1lbmNvZGluZy5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuIFdoZW4KICogPGk+Y29ubmVjdGlvbjwvaT4gaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24KICogaXMgdXNlZC4gVGhlIGRlZmF1bHQgY29ubmVjdGlvbiBpcyB0aGUgbGFzdCBjb25uZWN0aW9uIG1hZGUgYnkKICogPGI+cGdfY29ubmVjdDwvYj4gb3IgPGI+cGdfcGNvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIFtvcHRpb25hbF0gPHA+CiAqIFRoZSByZXF1aXJlZCBjbGllbnQgZW5jb2RpbmcuIE9uZSBvZiBTUUxfQVNDSUksIEVVQ19KUCwKICogRVVDX0NOLCBFVUNfS1IsIEVVQ19UVywKICogVU5JQ09ERSwgTVVMRV9JTlRFUk5BTCwgTEFUSU5YIChYPTEuLi45KSwKICogS09JOCwgV0lOLCBBTFQsIFNKSVMsCiAqIEJJRzUgb3IgV0lOMTI1MC4KICogPC9wPgogKiA8cD4KICogVGhlIGV4YWN0IGxpc3Qgb2YgYXZhaWxhYmxlIGVuY29kaW5ncyBkZXBlbmRzIG9uIHlvdXIgUG9zdGdyZVNRTCB2ZXJzaW9uLCBzbyBjaGVjayB5b3VyCiAqIFBvc3RncmVTUUwgbWFudWFsIGZvciBhIG1vcmUgc3BlY2lmaWMgbGlzdC4KICogPC9wPgogKiBAcmV0dXJuIGludCAwIG9uIHN1Y2Nlc3Mgb3IgLTEgb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBwZ19zZXRfY2xpZW50X2VuY29kaW5nKAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGNvbm5lY3Rpb24gPSBudWxsLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAogICAgc3RyaW5nICRlbmNvZGluZwopOiBpbnQge30KCi8qKgogKiBHZXQgbWV0YSBkYXRhIGZvciB0YWJsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLW1ldGEtZGF0YS5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZSA8cD4KICogVGhlIG5hbWUgb2YgdGhlIHRhYmxlLgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgQW4gYXJyYXkgb2YgdGhlIHRhYmxlIGRlZmluaXRpb24sIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCmZ1bmN0aW9uIHBnX21ldGFfZGF0YSgKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAogICAgc3RyaW5nICR0YWJsZV9uYW1lLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIGJvb2wgJGV4dGVuZGVkID0gZmFsc2UKKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBDb252ZXJ0IGFzc29jaWF0aXZlIGFycmF5IHZhbHVlcyBpbnRvIHN1aXRhYmxlIGZvciBTUUwgc3RhdGVtZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctY29udmVydC5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZSA8cD4KICogTmFtZSBvZiB0aGUgdGFibGUgYWdhaW5zdCB3aGljaCB0byBjb252ZXJ0IHR5cGVzLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkdmFsdWVzIDxwPgogKiBEYXRhIHRvIGJlIGNvbnZlcnRlZC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogKiBBbnkgbnVtYmVyIG9mIDxiPlBHU1FMX0NPTlZfSUdOT1JFX0RFRkFVTFQ8L2I+LAogKiA8Yj5QR1NRTF9DT05WX0ZPUkNFX05VTEw8L2I+IG9yCiAqIDxiPlBHU1FMX0NPTlZfSUdOT1JFX05PVF9OVUxMPC9iPiwgY29tYmluZWQuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBbiBhcnJheSBvZiBjb252ZXJ0ZWQgdmFsdWVzLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBwZ19jb252ZXJ0KAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sCiAgICBzdHJpbmcgJHRhYmxlX25hbWUsCiAgICBhcnJheSAkdmFsdWVzLAogICAgaW50ICRmbGFncyA9IDAKKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBJbnNlcnQgYXJyYXkgaW50byB0YWJsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWluc2VydC5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZSA8cD4KICogTmFtZSBvZiB0aGUgdGFibGUgaW50byB3aGljaCB0byBpbnNlcnQgcm93cy4gVGhlIHRhYmxlIDxpPnRhYmxlX25hbWU8L2k+IG11c3QgYXQgbGVhc3QKICogaGF2ZSBhcyBtYW55IGNvbHVtbnMgYXMgPGk+YXNzb2NfYXJyYXk8L2k+IGhhcyBlbGVtZW50cy4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJHZhbHVlcyA8cD4KICogQW4gYXJyYXkgd2hvc2Uga2V5cyBhcmUgZmllbGQgbmFtZXMgaW4gdGhlIHRhYmxlIDxpPnRhYmxlX25hbWU8L2k+LAogKiBhbmQgd2hvc2UgdmFsdWVzIGFyZSB0aGUgdmFsdWVzIG9mIHRob3NlIGZpZWxkcyB0aGF0IGFyZSB0byBiZSBpbnNlcnRlZC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogKiBBbnkgbnVtYmVyIG9mIDxiPlBHU1FMX0NPTlZfT1BUUzwvYj4sCiAqIDxiPlBHU1FMX0RNTF9OT19DT05WPC9iPiwKICogPGI+UEdTUUxfRE1MX0VYRUM8L2I+LAogKiA8Yj5QR1NRTF9ETUxfQVNZTkM8L2I+IG9yCiAqIDxiPlBHU1FMX0RNTF9TVFJJTkc8L2I+IGNvbWJpbmVkLiBJZiA8Yj5QR1NRTF9ETUxfU1RSSU5HPC9iPiBpcyBwYXJ0IG9mIHRoZQogKiA8aT5vcHRpb25zPC9pPiB0aGVuIHF1ZXJ5IHN0cmluZyBpcyByZXR1cm5lZC4KICogPC9wPgogKiBAcmV0dXJuIG1peGVkIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuIFJldHVybnMgc3RyaW5nIGlmIDxiPlBHU1FMX0RNTF9TVFJJTkc8L2I+IGlzIHBhc3NlZAogKiB2aWEgPGk+b3B0aW9uczwvaT4uCiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHR8c3RyaW5nfGJvb2wnXSwgZGVmYXVsdDogJ3Jlc291cmNlfHN0cmluZ3xib29sJyldCmZ1bmN0aW9uIHBnX2luc2VydCgKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAogICAgc3RyaW5nICR0YWJsZV9uYW1lLAogICAgYXJyYXkgJHZhbHVlcywKICAgIGludCAkZmxhZ3MgPSBQR1NRTF9ETUxfRVhFQwopIHt9CgovKioKICogVXBkYXRlIHRhYmxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctdXBkYXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIDxwPgogKiBOYW1lIG9mIHRoZSB0YWJsZSBpbnRvIHdoaWNoIHRvIHVwZGF0ZSByb3dzLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkdmFsdWVzIDxwPgogKiBBbiBhcnJheSB3aG9zZSBrZXlzIGFyZSBmaWVsZCBuYW1lcyBpbiB0aGUgdGFibGUgPGk+dGFibGVfbmFtZTwvaT4sCiAqIGFuZCB3aG9zZSB2YWx1ZXMgYXJlIHdoYXQgbWF0Y2hlZCByb3dzIGFyZSB0byBiZSB1cGRhdGVkIHRvLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkY29uZGl0aW9ucyA8cD4KICogQW4gYXJyYXkgd2hvc2Uga2V5cyBhcmUgZmllbGQgbmFtZXMgaW4gdGhlIHRhYmxlIDxpPnRhYmxlX25hbWU8L2k+LAogKiBhbmQgd2hvc2UgdmFsdWVzIGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IGEgcm93IG11c3QgbWVldCB0byBiZSB1cGRhdGVkLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIEFueSBudW1iZXIgb2YgPGI+UEdTUUxfQ09OVl9PUFRTPC9iPiwKICogPGI+UEdTUUxfRE1MX05PX0NPTlY8L2I+LAogKiA8Yj5QR1NRTF9ETUxfRVhFQzwvYj4gb3IKICogPGI+UEdTUUxfRE1MX1NUUklORzwvYj4gY29tYmluZWQuIElmIDxiPlBHU1FMX0RNTF9TVFJJTkc8L2I+IGlzIHBhcnQgb2YgdGhlCiAqIDxpPm9wdGlvbnM8L2k+IHRoZW4gcXVlcnkgc3RyaW5nIGlzIHJldHVybmVkLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4gUmV0dXJucyBzdHJpbmcgaWYgPGI+UEdTUUxfRE1MX1NUUklORzwvYj4gaXMgcGFzc2VkCiAqIHZpYSA8aT5vcHRpb25zPC9pPi4KICovCmZ1bmN0aW9uIHBnX3VwZGF0ZSgKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAogICAgc3RyaW5nICR0YWJsZV9uYW1lLAogICAgYXJyYXkgJHZhbHVlcywKICAgIGFycmF5ICRjb25kaXRpb25zLAogICAgaW50ICRmbGFncyA9IFBHU1FMX0RNTF9FWEVDCik6IHN0cmluZ3xib29sIHt9CgovKioKICogRGVsZXRlcyByZWNvcmRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctZGVsZXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIDxwPgogKiBOYW1lIG9mIHRoZSB0YWJsZSBmcm9tIHdoaWNoIHRvIGRlbGV0ZSByb3dzLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkY29uZGl0aW9ucyA8cD4KICogQW4gYXJyYXkgd2hvc2Uga2V5cyBhcmUgZmllbGQgbmFtZXMgaW4gdGhlIHRhYmxlIDxpPnRhYmxlX25hbWU8L2k+LAogKiBhbmQgd2hvc2UgdmFsdWVzIGFyZSB0aGUgdmFsdWVzIG9mIHRob3NlIGZpZWxkcyB0aGF0IGFyZSB0byBiZSBkZWxldGVkLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIEFueSBudW1iZXIgb2YgPGI+UEdTUUxfQ09OVl9GT1JDRV9OVUxMPC9iPiwKICogPGI+UEdTUUxfRE1MX05PX0NPTlY8L2I+LAogKiA8Yj5QR1NRTF9ETUxfRVhFQzwvYj4gb3IKICogPGI+UEdTUUxfRE1MX1NUUklORzwvYj4gY29tYmluZWQuIElmIDxiPlBHU1FMX0RNTF9TVFJJTkc8L2I+IGlzIHBhcnQgb2YgdGhlCiAqIDxpPm9wdGlvbnM8L2k+IHRoZW4gcXVlcnkgc3RyaW5nIGlzIHJldHVybmVkLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4gUmV0dXJucyBzdHJpbmcgaWYgPGI+UEdTUUxfRE1MX1NUUklORzwvYj4gaXMgcGFzc2VkCiAqIHZpYSA8aT5vcHRpb25zPC9pPi4KICovCmZ1bmN0aW9uIHBnX2RlbGV0ZSgKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAogICAgc3RyaW5nICR0YWJsZV9uYW1lLAogICAgYXJyYXkgJGNvbmRpdGlvbnMsCiAgICBpbnQgJGZsYWdzID0gUEdTUUxfRE1MX0VYRUMKKTogc3RyaW5nfGJvb2wge30KCi8qKgogKiBTZWxlY3QgcmVjb3JkcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLXNlbGVjdC5waHAKICogQHBhcmFtIHJlc291cmNlfFBnU3FsXENvbm5lY3Rpb24gJGNvbm5lY3Rpb24gPHA+CiAqIFBvc3RncmVTUUwgZGF0YWJhc2UgY29ubmVjdGlvbiByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIDxwPgogKiBOYW1lIG9mIHRoZSB0YWJsZSBmcm9tIHdoaWNoIHRvIHNlbGVjdCByb3dzLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkY29uZGl0aW9ucyA8cD4KICogQW4gYXJyYXkgd2hvc2Uga2V5cyBhcmUgZmllbGQgbmFtZXMgaW4gdGhlIHRhYmxlIDxpPnRhYmxlX25hbWU8L2k+LAogKiBhbmQgd2hvc2UgdmFsdWVzIGFyZSB0aGUgY29uZGl0aW9ucyB0aGF0IGEgcm93IG11c3QgbWVldCB0byBiZSByZXRyaWV2ZWQuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICogQW55IG51bWJlciBvZiA8Yj5QR1NRTF9DT05WX0ZPUkNFX05VTEw8L2I+LAogKiA8Yj5QR1NRTF9ETUxfTk9fQ09OVjwvYj4sCiAqIDxiPlBHU1FMX0RNTF9FWEVDPC9iPiwKICogPGI+UEdTUUxfRE1MX0FTWU5DPC9iPiBvcgogKiA8Yj5QR1NRTF9ETUxfU1RSSU5HPC9iPiBjb21iaW5lZC4gSWYgPGI+UEdTUUxfRE1MX1NUUklORzwvYj4gaXMgcGFydCBvZiB0aGUKICogPGk+b3B0aW9uczwvaT4gdGhlbiBxdWVyeSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAqIDwvcD4KICogQHBhcmFtIGludCAkbW9kZSBbb3B0aW9uYWxdIDxwPgogKiBBbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBjb250cm9scwogKiBob3cgdGhlIHJldHVybmVkIGFycmF5IGlzIGluZGV4ZWQuCiAqIDxpPnJlc3VsdF90eXBlPC9pPiBpcyBhIGNvbnN0YW50IGFuZCBjYW4gdGFrZSB0aGUKICogZm9sbG93aW5nIHZhbHVlczogPGI+UEdTUUxfQVNTT0M8L2I+LAogKiA8Yj5QR1NRTF9OVU08L2I+IGFuZCA8Yj5QR1NRTF9CT1RIPC9iPi4KICogVXNpbmcgPGI+UEdTUUxfTlVNPC9iPiwgPGI+cGdfZmV0Y2hfYXJyYXk8L2I+CiAqIHdpbGwgcmV0dXJuIGFuIGFycmF5IHdpdGggbnVtZXJpY2FsIGluZGljZXMsIHVzaW5nCiAqIDxiPlBHU1FMX0FTU09DPC9iPiBpdCB3aWxsIHJldHVybiBvbmx5IGFzc29jaWF0aXZlIGluZGljZXMKICogd2hpbGUgPGI+UEdTUUxfQk9USDwvYj4sIHRoZSBkZWZhdWx0LCB3aWxsIHJldHVybiBib3RoCiAqIG51bWVyaWNhbCBhbmQgYXNzb2NpYXRpdmUgaW5kaWNlcy4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fHN0cmluZ3xmYWxzZSA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLiBSZXR1cm5zIHN0cmluZyBpZiA8Yj5QR1NRTF9ETUxfU1RSSU5HPC9iPiBpcyBwYXNzZWQKICogdmlhIDxpPm9wdGlvbnM8L2k+LgogKi8KZnVuY3Rpb24gcGdfc2VsZWN0KAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sCiAgICBzdHJpbmcgJHRhYmxlX25hbWUsCiAgICBhcnJheSAkY29uZGl0aW9ucyA9IFtdLAogICAgaW50ICRmbGFncyA9IFBHU1FMX0RNTF9FWEVDLAogICAgaW50ICRtb2RlID0gUEdTUUxfQVNTT0MKKTogYXJyYXl8c3RyaW5nfGZhbHNlIHt9CgovKioKICogQHBhcmFtICRjb25uZWN0aW9uCiAqIEBwYXJhbSAkcXVlcnkgW29wdGlvbmFsXQogKiBAcmV0dXJuIG1peGVkCiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHR8ZmFsc2UnXSwgZGVmYXVsdDogJ3Jlc291cmNlfGZhbHNlJyldCmZ1bmN0aW9uIHBnX2V4ZWMoCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSAkY29ubmVjdGlvbiA9IG51bGwsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGNvbm5lY3Rpb24sCiAgICBzdHJpbmcgJHF1ZXJ5Cikge30KCi8qKgogKiBAcGFyYW0gJHJlc3VsdAogKiBAcmV0dXJuIHN0cmluZ3xpbnR8ZmFsc2UKICogQGRlcHJlY2F0ZWQgOC4wCiAqLwpmdW5jdGlvbiBwZ19nZXRsYXN0b2lkKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCk6IHN0cmluZ3xpbnR8ZmFsc2Uge30KCi8qKgogKiBAcGFyYW0gJHJlc3VsdAogKiBAcmV0dXJuIGludAogKiBAZGVwcmVjYXRlZCA4LjAKICovCmZ1bmN0aW9uIHBnX2NtZHR1cGxlcygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQpOiBpbnQge30gLy8gVE9ETyByZW1vdmUKCi8qKgogKiBAcGFyYW0gJGNvbm5lY3Rpb24gW29wdGlvbmFsXQogKiBAcmV0dXJuIHN0cmluZwogKiBAZGVwcmVjYXRlZCA4LjAKICovCmZ1bmN0aW9uIHBnX2Vycm9ybWVzc2FnZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9ufG51bGwnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uKTogc3RyaW5nIHt9CgovKioKICogQHBhcmFtICRyZXN1bHQKICogQHJldHVybiBpbnQKICogQGRlcHJlY2F0ZWQgOC4wCiAqLwpmdW5jdGlvbiBwZ19udW1yb3dzKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCk6IGludCB7fQoKLyoqCiAqIEBwYXJhbSAkcmVzdWx0CiAqIEByZXR1cm4gaW50CiAqIEBkZXByZWNhdGVkIDguMAogKi8KZnVuY3Rpb24gcGdfbnVtZmllbGRzKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCk6IGludCB7fQoKLyoqCiAqIEBwYXJhbSAkcmVzdWx0CiAqIEBwYXJhbSAkZmllbGQKICogQHJldHVybiBzdHJpbmcKICogQGRlcHJlY2F0ZWQgOC4wCiAqLwpmdW5jdGlvbiBwZ19maWVsZG5hbWUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0LCBpbnQgJGZpZWxkKTogc3RyaW5nIHt9CgovKioKICogQHBhcmFtICRyZXN1bHQKICogQHBhcmFtICRmaWVsZAogKiBAcmV0dXJuIGludAogKiBAZGVwcmVjYXRlZCA4LjAKICovCmZ1bmN0aW9uIHBnX2ZpZWxkc2l6ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQsIGludCAkZmllbGQpOiBpbnQge30KCi8qKgogKiBAcGFyYW0gJHJlc3VsdAogKiBAcGFyYW0gJGZpZWxkCiAqIEByZXR1cm4gc3RyaW5nCiAqIEBkZXByZWNhdGVkIDguMAogKi8KZnVuY3Rpb24gcGdfZmllbGR0eXBlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCwgaW50ICRmaWVsZCk6IHN0cmluZyB7fQoKLyoqCiAqIEBwYXJhbSAkcmVzdWx0CiAqIEBwYXJhbSAkZmllbGQKICogQHJldHVybiBpbnQKICogQGRlcHJlY2F0ZWQgOC4wCiAqLwpmdW5jdGlvbiBwZ19maWVsZG51bSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQsIHN0cmluZyAkZmllbGQpOiBpbnQge30KCi8qKgogKiBAcGFyYW0gJHJlc3VsdAogKiBAcGFyYW0gJHJvdwogKiBAcGFyYW0gJGZpZWxkIFtvcHRpb25hbF0KICogQHJldHVybiBpbnR8ZmFsc2UKICogQGRlcHJlY2F0ZWQgOC4wCiAqLwpmdW5jdGlvbiBwZ19maWVsZHBydGxlbigKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRyb3cgPSAwLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICRyb3csCiAgICBzdHJpbmd8aW50ICRmaWVsZAopOiBpbnR8ZmFsc2Uge30KCi8qKgogKiBAcGFyYW0gJHJlc3VsdAogKiBAcGFyYW0gJHJvdwogKiBAcGFyYW0gJGZpZWxkIFtvcHRpb25hbF0KICogQHJldHVybiBpbnR8ZmFsc2UKICogQGRlcHJlY2F0ZWQgOC4wCiAqLwpmdW5jdGlvbiBwZ19maWVsZGlzbnVsbCgKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRyb3cgPSAwLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICRyb3csCiAgICBzdHJpbmd8aW50ICRmaWVsZAopOiBpbnR8ZmFsc2Uge30KCi8qKgogKiBAcGFyYW0gJHJlc3VsdAogKiBAcmV0dXJuIGJvb2wKICogQGRlcHJlY2F0ZWQgOC4wCiAqLwpmdW5jdGlvbiBwZ19mcmVlcmVzdWx0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCk6IGJvb2wge30KCi8qKgogKiBAcGFyYW0gUGdTcWxcUmVzdWx0fHJlc291cmNlICRyZXN1bHQKICogQHBhcmFtICRyb3cKICogQHBhcmFtICRmaWVsZCBbb3B0aW9uYWxdCiAqIEBkZXByZWNhdGVkIDguMAogKi8KZnVuY3Rpb24gcGdfcmVzdWx0KAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGNvbm5lY3Rpb24sCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0LAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICRyb3csCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gc3RyaW5nfGludCAkZmllbGQKKTogc3RyaW5nfG51bGx8ZmFsc2Uge30KCi8qKgogKiBAcGFyYW0gJGxvYgogKiBAZGVwcmVjYXRlZCA4LjAKICovCmZ1bmN0aW9uIHBnX2xvcmVhZGFsbCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxMb2InXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsb2IpOiBpbnQge30gLy8gVE9ETyByZW1vdmUKCi8qKgogKiBAcGFyYW0gJGNvbm5lY3Rpb24gW29wdGlvbmFsXQogKiBAcGFyYW0gJG9pZCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gc3RyaW5nfGludHxmYWxzZQogKiBAZGVwcmVjYXRlZCA4LjAKICovCmZ1bmN0aW9uIHBnX2xvY3JlYXRlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLCAkb2lkKTogc3RyaW5nfGludHxmYWxzZSB7fQoKLyoqCiAqIEBwYXJhbSAkY29ubmVjdGlvbgogKiBAcGFyYW0gJG9pZCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYm9vbAogKiBAZGVwcmVjYXRlZCA4LjAKICovCmZ1bmN0aW9uIHBnX2xvdW5saW5rKAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGNvbm5lY3Rpb24gPSBudWxsLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAogICAgJG9pZAopOiBib29sIHt9CgovKioKICogQHBhcmFtICRjb25uZWN0aW9uCiAqIEBwYXJhbSAkb2lkIFtvcHRpb25hbF0KICogQHBhcmFtICRtb2RlIFtvcHRpb25hbF0KICogQHJldHVybiByZXNvdXJjZQogKiBAZGVwcmVjYXRlZCA4LjAKICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXExvYnxmYWxzZSddLCBkZWZhdWx0OiAncmVzb3VyY2V8ZmFsc2UnKV0KZnVuY3Rpb24gcGdfbG9vcGVuKAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGNvbm5lY3Rpb24gPSBudWxsLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BnU3FsXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRjb25uZWN0aW9uLAogICAgJG9pZCwKICAgIHN0cmluZyAkbW9kZQopIHt9CgovKioKICogQHBhcmFtICRsb2IKICogQHJldHVybiBib29sCiAqIEBkZXByZWNhdGVkIDguMAogKi8KZnVuY3Rpb24gcGdfbG9jbG9zZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxMb2InXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsb2IpOiBib29sIHt9CgovKioKICogQHBhcmFtICRsb2IKICogQHBhcmFtICRsZW5ndGgKICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICogQGRlcHJlY2F0ZWQgOC4wCiAqLwpmdW5jdGlvbiBwZ19sb3JlYWQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcTG9iJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbG9iLCBpbnQgJGxlbmd0aCA9IDgxOTIpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBAcGFyYW0gJGxvYgogKiBAcGFyYW0gJGRhdGEKICogQHBhcmFtICRsZW5ndGggW29wdGlvbmFsXQogKiBAcmV0dXJuIGludHxmYWxzZQogKiBAZGVwcmVjYXRlZCA4LjAKICovCmZ1bmN0aW9uIHBnX2xvd3JpdGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcTG9iJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbG9iLCBzdHJpbmcgJGRhdGEsID9pbnQgJGxlbmd0aCk6IGludHxmYWxzZSB7fQoKLyoqCiAqIEBwYXJhbSAkY29ubmVjdGlvbgogKiBAcGFyYW0gJGZpbGVuYW1lIFtvcHRpb25hbF0KICogQHBhcmFtICRvaWQgW29wdGlvbmFsXQogKiBAcmV0dXJuIHN0cmluZ3xpbnR8ZmFsc2UKICogQGRlcHJlY2F0ZWQgOC4wCiAqLwpmdW5jdGlvbiBwZ19sb2ltcG9ydCgKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiwKICAgICRmaWxlbmFtZSwKICAgICRvaWQKKTogc3RyaW5nfGludHxmYWxzZSB7fQoKLyoqCiAqIEBwYXJhbSAkY29ubmVjdGlvbgogKiBAcGFyYW0gJG9pZCBbb3B0aW9uYWxdCiAqIEBwYXJhbSAkZmlsZW5hbWUgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wKICogQGRlcHJlY2F0ZWQgOC4wCiAqLwpmdW5jdGlvbiBwZ19sb2V4cG9ydCgKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiwKICAgICRvaWQsCiAgICAkZmlsZW5hbWUKKTogYm9vbCB7fQoKLyoqCiAqIEBwYXJhbSAkY29ubmVjdGlvbiBbb3B0aW9uYWxdCiAqIEByZXR1cm4gc3RyaW5nCiAqIEBkZXByZWNhdGVkIDguMAogKi8KZnVuY3Rpb24gcGdfY2xpZW50ZW5jb2RpbmcoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUGdTcWxcQ29ubmVjdGlvbnxudWxsJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbik6IHN0cmluZyB7fQoKLyoqCiAqIEBwYXJhbSAkY29ubmVjdGlvbgogKiBAcGFyYW0gJGVuY29kaW5nIFtvcHRpb25hbF0KICogQHJldHVybiBpbnQKICogQGRlcHJlY2F0ZWQgOC4wCiAqLwpmdW5jdGlvbiBwZ19zZXRjbGllbnRlbmNvZGluZygKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRjb25uZWN0aW9uID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbiwKICAgIHN0cmluZyAkZW5jb2RpbmcKKTogaW50IHt9CgovKioKICogUmVhZHMgaW5wdXQgb24gdGhlIGNvbm5lY3Rpb24KICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGctY29uc3VtZS1pbnB1dC5waHAKICogQHBhcmFtIFBnU3FsXENvbm5lY3Rpb258cmVzb3VyY2UgJGNvbm5lY3Rpb24KICogQHJldHVybiBib29sIHRydWUgaWYgbm8gZXJyb3Igb2NjdXJyZWQsIG9yIGZhbHNlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KICogTm90ZSB0aGF0IHRydWUgZG9lcyBub3QgbmVjZXNzYXJpbHkgaW5kaWNhdGUgdGhhdCBpbnB1dCB3YXMgd2FpdGluZyB0byBiZSByZWFkLgogKi8KZnVuY3Rpb24gcGdfY29uc3VtZV9pbnB1dCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbik6IGJvb2wge30KCi8qKgogKiBGbHVzaCBvdXRib3VuZCBxdWVyeSBkYXRhIG9uIHRoZSBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWZsdXNoLnBocAogKiBAcGFyYW0gUGdTcWxcQ29ubmVjdGlvbnxyZXNvdXJjZSAkY29ubmVjdGlvbgogKiBAcmV0dXJuIGludHxib29sIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmx1c2ggd2FzIHN1Y2Nlc3NmdWwgb3Igbm8gZGF0YSB3YXMgd2FpdGluZyB0byBiZSBmbHVzaGVkLCAwIGlmIHBhcnQgb2YgdGhlIHBlbmRpbmcKICogZGF0YSB3YXMgZmx1c2hlZCBidXQgbW9yZSByZW1haW5zIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwZ19mbHVzaCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQZ1NxbFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkY29ubmVjdGlvbik6IGludHxib29sIHt9CgovKioKICogQHNpbmNlIDguMwogKi8KZnVuY3Rpb24gcGdfc2V0X2Vycm9yX2NvbnRleHRfdmlzaWJpbGl0eShQZ1NxbFxDb25uZWN0aW9uICRjb25uZWN0aW9uLCBpbnQgJHZpc2liaWxpdHkpOiBpbnQge30KCi8qKgogKiBAc2luY2UgOC4zCiAqLwpmdW5jdGlvbiBwZ19waXBlbGluZV9zdGF0dXMoUGdTcWxcQ29ubmVjdGlvbiAkY29ubmVjdGlvbik6IGludCB7fQoKLyoqCiAqIEBzaW5jZSA4LjMKICovCmZ1bmN0aW9uIHBnX3BpcGVsaW5lX3N5bmMoUGdTcWxcQ29ubmVjdGlvbiAkY29ubmVjdGlvbik6IGJvb2wge30KCi8qKgogKiBAc2luY2UgOC4zCiAqLwpmdW5jdGlvbiBwZ19leGl0X3BpcGVsaW5lX21vZGUoUGdTcWxcQ29ubmVjdGlvbiAkY29ubmVjdGlvbik6IGJvb2wge30KCi8qKgogKiBAc2luY2UgOC4zCiAqLwpmdW5jdGlvbiBwZ19lbnRlcl9waXBlbGluZV9tb2RlKFBnU3FsXENvbm5lY3Rpb24gJGNvbm5lY3Rpb24pOiBib29sIHt9CgovKioKICogQHNpbmNlIDguNAogKi8KZnVuY3Rpb24gcGdfcmVzdWx0X21lbW9yeV9zaXplKFBnU3FsXFJlc3VsdCAkcmVzdWx0KTogaW50IHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpmdW5jdGlvbiBwZ19jaGFuZ2VfcGFzc3dvcmQoUGdTcWxcQ29ubmVjdGlvbiAkY29ubmVjdGlvbiwgc3RyaW5nICR1c2VyLCAjW1xTZW5zaXRpdmVQYXJhbWV0ZXJdIHN0cmluZyAkcGFzc3dvcmQpOiBib29sIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpmdW5jdGlvbiBwZ19wdXRfY29weV9kYXRhKFBnU3FsXENvbm5lY3Rpb24gJGNvbm5lY3Rpb24sIHN0cmluZyAkY21kKTogaW50IHt9CgovKioKICogQHNpbmNlICA4LjQKICogQHBhcmFtIHJlc291cmNlICRzb2NrZXQKICovCmZ1bmN0aW9uIHBnX3NvY2tldF9wb2xsKCRzb2NrZXQsIGludCAkcmVhZCwgaW50ICR3cml0ZSwgaW50ICR0aW1lb3V0ID0gLTEpOiBpbnQge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmZ1bmN0aW9uIHBnX3B1dF9jb3B5X2VuZChQZ1NxbFxDb25uZWN0aW9uICRjb25uZWN0aW9uLCA/c3RyaW5nICRlcnJvciA9IG51bGwpOiBpbnQge30KCi8qKgogKiBAc2luY2UgOC40CiAqIEByZXR1cm4gYXJyYXk8c3RyaW5nLCBzdHJpbmd8bnVsbD4KICovCmZ1bmN0aW9uIHBnX2ppdCg/UGdTcWxcQ29ubmVjdGlvbiAkY29ubmVjdGlvbiA9IG51bGwpOiBhcnJheSB7fQoKZGVmaW5lKCdQR1NRTF9MSUJQUV9WRVJTSU9OJywgIjE2LjIiKTsKZGVmaW5lKCdQR1NRTF9MSUJQUV9WRVJTSU9OX1NUUicsICIxNi4yIik7CgovKioKICogUGFzc2VkIHRvIDxiPnBnX2Nvbm5lY3Q8L2I+IHRvIGZvcmNlIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBjb25uZWN0aW9uLAogKiByYXRoZXIgdGhhbiByZS11c2luZyBhbiBleGlzdGluZyBpZGVudGljYWwgY29ubmVjdGlvbi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZ3NxbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BHU1FMX0NPTk5FQ1RfRk9SQ0VfTkVXJywgMik7CgovKioKICogUGFzc2VkIHRvIDxiPnBnX2ZldGNoX2FycmF5PC9iPi4gUmV0dXJuIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGZpZWxkCiAqIG5hbWVzIGFuZCB2YWx1ZXMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9BU1NPQycsIDEpOwoKLyoqCiAqIFBhc3NlZCB0byA8Yj5wZ19mZXRjaF9hcnJheTwvYj4uIFJldHVybiBhIG51bWVyaWNhbGx5IGluZGV4ZWQgYXJyYXkgb2YgZmllbGQKICogbnVtYmVycyBhbmQgdmFsdWVzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfTlVNJywgMik7CgovKioKICogUGFzc2VkIHRvIDxiPnBnX2ZldGNoX2FycmF5PC9iPi4gUmV0dXJuIGFuIGFycmF5IG9mIGZpZWxkIHZhbHVlcwogKiB0aGF0IGlzIGJvdGggbnVtZXJpY2FsbHkgaW5kZXhlZCAoYnkgZmllbGQgbnVtYmVyKSBhbmQgYXNzb2NpYXRlZCAoYnkgZmllbGQgbmFtZSkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9CT1RIJywgMyk7CgovKioKICogUmV0dXJuZWQgYnkgPGI+cGdfY29ubmVjdGlvbl9zdGF0dXM8L2I+IGluZGljYXRpbmcgdGhhdCB0aGUgZGF0YWJhc2UKICogY29ubmVjdGlvbiBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfQ09OTkVDVElPTl9CQUQnLCAxKTsKCi8qKgogKiBSZXR1cm5lZCBieSA8Yj5wZ19jb25uZWN0aW9uX3N0YXR1czwvYj4gaW5kaWNhdGluZyB0aGF0IHRoZSBkYXRhYmFzZQogKiBjb25uZWN0aW9uIGlzIGluIGEgdmFsaWQgc3RhdGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9DT05ORUNUSU9OX09LJywgMCk7CgovKioKICogUmV0dXJuZWQgYnkgPGI+cGdfdHJhbnNhY3Rpb25fc3RhdHVzPC9iPi4gQ29ubmVjdGlvbiBpcwogKiBjdXJyZW50bHkgaWRsZSwgbm90IGluIGEgdHJhbnNhY3Rpb24uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9UUkFOU0FDVElPTl9JRExFJywgMCk7CgovKioKICogUmV0dXJuZWQgYnkgPGI+cGdfdHJhbnNhY3Rpb25fc3RhdHVzPC9iPi4gQSBjb21tYW5kCiAqIGlzIGluIHByb2dyZXNzIG9uIHRoZSBjb25uZWN0aW9uLiBBIHF1ZXJ5IGhhcyBiZWVuIHNlbnQgdmlhIHRoZSBjb25uZWN0aW9uCiAqIGFuZCBub3QgeWV0IGNvbXBsZXRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZ3NxbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BHU1FMX1RSQU5TQUNUSU9OX0FDVElWRScsIDEpOwoKLyoqCiAqIFJldHVybmVkIGJ5IDxiPnBnX3RyYW5zYWN0aW9uX3N0YXR1czwvYj4uIFRoZSBjb25uZWN0aW9uCiAqIGlzIGlkbGUsIGluIGEgdHJhbnNhY3Rpb24gYmxvY2suCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9UUkFOU0FDVElPTl9JTlRSQU5TJywgMik7CgovKioKICogUmV0dXJuZWQgYnkgPGI+cGdfdHJhbnNhY3Rpb25fc3RhdHVzPC9iPi4gVGhlIGNvbm5lY3Rpb24KICogaXMgaWRsZSwgaW4gYSBmYWlsZWQgdHJhbnNhY3Rpb24gYmxvY2suCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9UUkFOU0FDVElPTl9JTkVSUk9SJywgMyk7CgovKioKICogUmV0dXJuZWQgYnkgPGI+cGdfdHJhbnNhY3Rpb25fc3RhdHVzPC9iPi4gVGhlIGNvbm5lY3Rpb24KICogaXMgYmFkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfVFJBTlNBQ1RJT05fVU5LTk9XTicsIDQpOwoKLyoqCiAqIFBhc3NlZCB0byA8Yj5wZ19zZXRfZXJyb3JfdmVyYm9zaXR5PC9iPi4KICogU3BlY2lmaWVkIHRoYXQgcmV0dXJuZWQgbWVzc2FnZXMgaW5jbHVkZSBzZXZlcml0eSwgcHJpbWFyeSB0ZXh0LAogKiBhbmQgcG9zaXRpb24gb25seTsgdGhpcyB3aWxsIG5vcm1hbGx5IGZpdCBvbiBhIHNpbmdsZSBsaW5lLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfRVJST1JTX1RFUlNFJywgMCk7CgovKioKICogUGFzc2VkIHRvIDxiPnBnX3NldF9lcnJvcl92ZXJib3NpdHk8L2I+LgogKiBUaGUgZGVmYXVsdCBtb2RlIHByb2R1Y2VzIG1lc3NhZ2VzIHRoYXQgaW5jbHVkZSB0aGUgYWJvdmUKICogcGx1cyBhbnkgZGV0YWlsLCBoaW50LCBvciBjb250ZXh0IGZpZWxkcyAodGhlc2UgbWF5IHNwYW4KICogbXVsdGlwbGUgbGluZXMpLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfRVJST1JTX0RFRkFVTFQnLCAxKTsKCi8qKgogKiBQYXNzZWQgdG8gPGI+cGdfc2V0X2Vycm9yX3ZlcmJvc2l0eTwvYj4uCiAqIFRoZSB2ZXJib3NlIG1vZGUgaW5jbHVkZXMgYWxsIGF2YWlsYWJsZSBmaWVsZHMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9FUlJPUlNfVkVSQk9TRScsIDIpOwoKLyoqCiAqIFBhc3NlZCB0byA8Yj5wZ19sb19zZWVrPC9iPi4gU2VlayBvcGVyYXRpb24gaXMgdG8gYmVnaW4KICogZnJvbSB0aGUgc3RhcnQgb2YgdGhlIG9iamVjdC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZ3NxbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BHU1FMX1NFRUtfU0VUJywgMCk7CgovKioKICogUGFzc2VkIHRvIDxiPnBnX2xvX3NlZWs8L2I+LiBTZWVrIG9wZXJhdGlvbiBpcyB0byBiZWdpbgogKiBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfU0VFS19DVVInLCAxKTsKCi8qKgogKiBQYXNzZWQgdG8gPGI+cGdfbG9fc2VlazwvYj4uIFNlZWsgb3BlcmF0aW9uIGlzIHRvIGJlZ2luCiAqIGZyb20gdGhlIGVuZCBvZiB0aGUgb2JqZWN0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfU0VFS19FTkQnLCAyKTsKCi8qKgogKiBQYXNzZWQgdG8gPGI+cGdfcmVzdWx0X3N0YXR1czwvYj4uIEluZGljYXRlcyB0aGF0CiAqIG51bWVyaWNhbCByZXN1bHQgY29kZSBpcyBkZXNpcmVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfU1RBVFVTX0xPTkcnLCAxKTsKCi8qKgogKiBQYXNzZWQgdG8gPGI+cGdfcmVzdWx0X3N0YXR1czwvYj4uIEluZGljYXRlcyB0aGF0CiAqIHRleHR1YWwgcmVzdWx0IGNvbW1hbmQgdGFnIGlzIGRlc2lyZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9TVEFUVVNfU1RSSU5HJywgMik7CgovKioKICogUmV0dXJuZWQgYnkgPGI+cGdfcmVzdWx0X3N0YXR1czwvYj4uIFRoZSBzdHJpbmcgc2VudCB0byB0aGUgc2VydmVyCiAqIHdhcyBlbXB0eS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZ3NxbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BHU1FMX0VNUFRZX1FVRVJZJywgMCk7CgovKioKICogUmV0dXJuZWQgYnkgPGI+cGdfcmVzdWx0X3N0YXR1czwvYj4uIFN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiBhCiAqIGNvbW1hbmQgcmV0dXJuaW5nIG5vIGRhdGEuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9DT01NQU5EX09LJywgMSk7CgovKioKICogUmV0dXJuZWQgYnkgPGI+cGdfcmVzdWx0X3N0YXR1czwvYj4uIFN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiBhIGNvbW1hbmQKICogcmV0dXJuaW5nIGRhdGEgKHN1Y2ggYXMgYSBTRUxFQ1Qgb3IgU0hPVykuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9UVVBMRVNfT0snLCAyKTsKCi8qKgogKiBSZXR1cm5lZCBieSA8Yj5wZ19yZXN1bHRfc3RhdHVzPC9iPi4gQ29weSBPdXQgKGZyb20gc2VydmVyKSBkYXRhCiAqIHRyYW5zZmVyIHN0YXJ0ZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9DT1BZX09VVCcsIDMpOwoKLyoqCiAqIFJldHVybmVkIGJ5IDxiPnBnX3Jlc3VsdF9zdGF0dXM8L2I+LiBDb3B5IEluICh0byBzZXJ2ZXIpIGRhdGEKICogdHJhbnNmZXIgc3RhcnRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZ3NxbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BHU1FMX0NPUFlfSU4nLCA0KTsKCi8qKgogKiBSZXR1cm5lZCBieSA8Yj5wZ19yZXN1bHRfc3RhdHVzPC9iPi4gVGhlIHNlcnZlcidzIHJlc3BvbnNlCiAqIHdhcyBub3QgdW5kZXJzdG9vZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZ3NxbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BHU1FMX0JBRF9SRVNQT05TRScsIDUpOwoKLyoqCiAqIFJldHVybmVkIGJ5IDxiPnBnX3Jlc3VsdF9zdGF0dXM8L2I+LiBBIG5vbmZhdGFsIGVycm9yCiAqIChhIG5vdGljZSBvciB3YXJuaW5nKSBvY2N1cnJlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZ3NxbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BHU1FMX05PTkZBVEFMX0VSUk9SJywgNik7CgovKioKICogUmV0dXJuZWQgYnkgPGI+cGdfcmVzdWx0X3N0YXR1czwvYj4uIEEgZmF0YWwgZXJyb3IKICogb2NjdXJyZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9GQVRBTF9FUlJPUicsIDcpOwoKLyoqCiAqIFBhc3NlZCB0byA8Yj5wZ19yZXN1bHRfZXJyb3JfZmllbGQ8L2I+LgogKiBUaGUgc2V2ZXJpdHk7IHRoZSBmaWVsZCBjb250ZW50cyBhcmUgRVJST1IsCiAqIEZBVEFMLCBvciBQQU5JQyAoaW4gYW4gZXJyb3IgbWVzc2FnZSksIG9yCiAqIFdBUk5JTkcsIE5PVElDRSwgREVCVUcsCiAqIElORk8sIG9yIExPRyAoaW4gYSBub3RpY2UgbWVzc2FnZSksIG9yIGEgbG9jYWxpemVkCiAqIHRyYW5zbGF0aW9uIG9mIG9uZSBvZiB0aGVzZS4gQWx3YXlzIHByZXNlbnQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9ESUFHX1NFVkVSSVRZJywgODMpOwoKLyoqCiAqIFBhc3NlZCB0byA8Yj5wZ19yZXN1bHRfZXJyb3JfZmllbGQ8L2I+LgogKiBUaGUgU1FMU1RBVEUgY29kZSBmb3IgdGhlIGVycm9yLiBUaGUgU1FMU1RBVEUgY29kZSBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIGVycm9yCiAqIHRoYXQgaGFzIG9jY3VycmVkOyBpdCBjYW4gYmUgdXNlZCBieSBmcm9udC1lbmQgYXBwbGljYXRpb25zIHRvIHBlcmZvcm0gc3BlY2lmaWMKICogb3BlcmF0aW9ucyAoc3VjaCBhcyBlcnJvciBoYW5kbGluZykgaW4gcmVzcG9uc2UgdG8gYSBwYXJ0aWN1bGFyIGRhdGFiYXNlIGVycm9yLgogKiBUaGlzIGZpZWxkIGlzIG5vdCBsb2NhbGl6YWJsZSwgYW5kIGlzIGFsd2F5cyBwcmVzZW50LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfRElBR19TUUxTVEFURScsIDY3KTsKCi8qKgogKiBQYXNzZWQgdG8gPGI+cGdfcmVzdWx0X2Vycm9yX2ZpZWxkPC9iPi4KICogVGhlIHByaW1hcnkgaHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZSAodHlwaWNhbGx5IG9uZSBsaW5lKS4gQWx3YXlzIHByZXNlbnQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9ESUFHX01FU1NBR0VfUFJJTUFSWScsIDc3KTsKCi8qKgogKiBQYXNzZWQgdG8gPGI+cGdfcmVzdWx0X2Vycm9yX2ZpZWxkPC9iPi4KICogRGV0YWlsOiBhbiBvcHRpb25hbCBzZWNvbmRhcnkgZXJyb3IgbWVzc2FnZSBjYXJyeWluZyBtb3JlIGRldGFpbCBhYm91dCB0aGUgcHJvYmxlbS4gTWF5IHJ1biB0byBtdWx0aXBsZSBsaW5lcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZ3NxbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BHU1FMX0RJQUdfTUVTU0FHRV9ERVRBSUwnLCA2OCk7CgovKioKICogUGFzc2VkIHRvIDxiPnBnX3Jlc3VsdF9lcnJvcl9maWVsZDwvYj4uCiAqIEhpbnQ6IGFuIG9wdGlvbmFsIHN1Z2dlc3Rpb24gd2hhdCB0byBkbyBhYm91dCB0aGUgcHJvYmxlbS4gVGhpcyBpcyBpbnRlbmRlZCB0byBkaWZmZXIgZnJvbSBkZXRhaWwgaW4gdGhhdCBpdAogKiBvZmZlcnMgYWR2aWNlIChwb3RlbnRpYWxseSBpbmFwcHJvcHJpYXRlKSByYXRoZXIgdGhhbiBoYXJkIGZhY3RzLiBNYXkgcnVuIHRvIG11bHRpcGxlIGxpbmVzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfRElBR19NRVNTQUdFX0hJTlQnLCA3Mik7CgovKioKICogUGFzc2VkIHRvIDxiPnBnX3Jlc3VsdF9lcnJvcl9maWVsZDwvYj4uCiAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgYSBkZWNpbWFsIGludGVnZXIgaW5kaWNhdGluZyBhbiBlcnJvciBjdXJzb3IgcG9zaXRpb24gYXMgYW4gaW5kZXggaW50byB0aGUgb3JpZ2luYWwKICogc3RhdGVtZW50IHN0cmluZy4gVGhlIGZpcnN0IGNoYXJhY3RlciBoYXMgaW5kZXggMSwgYW5kIHBvc2l0aW9ucyBhcmUgbWVhc3VyZWQgaW4gY2hhcmFjdGVycyBub3QgYnl0ZXMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9ESUFHX1NUQVRFTUVOVF9QT1NJVElPTicsIDgwKTsKCi8qKgogKiBQYXNzZWQgdG8gPGI+cGdfcmVzdWx0X2Vycm9yX2ZpZWxkPC9iPi4KICogVGhpcyBpcyBkZWZpbmVkIHRoZSBzYW1lIGFzIHRoZSA8Yj5QR19ESUFHX1NUQVRFTUVOVF9QT1NJVElPTjwvYj4gZmllbGQsIGJ1dAogKiBpdCBpcyB1c2VkIHdoZW4gdGhlIGN1cnNvciBwb3NpdGlvbiByZWZlcnMgdG8gYW4gaW50ZXJuYWxseSBnZW5lcmF0ZWQKICogY29tbWFuZCByYXRoZXIgdGhhbiB0aGUgb25lIHN1Ym1pdHRlZCBieSB0aGUgY2xpZW50LiBUaGUKICogPGI+UEdfRElBR19JTlRFUk5BTF9RVUVSWTwvYj4gZmllbGQgd2lsbCBhbHdheXMgYXBwZWFyIHdoZW4gdGhpcwogKiBmaWVsZCBhcHBlYXJzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfRElBR19JTlRFUk5BTF9QT1NJVElPTicsIDExMik7CgovKioKICogUGFzc2VkIHRvIDxiPnBnX3Jlc3VsdF9lcnJvcl9maWVsZDwvYj4uCiAqIFRoZSB0ZXh0IG9mIGEgZmFpbGVkIGludGVybmFsbHktZ2VuZXJhdGVkIGNvbW1hbmQuIFRoaXMgY291bGQgYmUsIGZvciBleGFtcGxlLCBhCiAqIFNRTCBxdWVyeSBpc3N1ZWQgYnkgYSBQTC9wZ1NRTCBmdW5jdGlvbi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZ3NxbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BHU1FMX0RJQUdfSU5URVJOQUxfUVVFUlknLCAxMTMpOwoKLyoqCiAqIFBhc3NlZCB0byA8Yj5wZ19yZXN1bHRfZXJyb3JfZmllbGQ8L2I+LgogKiBBbiBpbmRpY2F0aW9uIG9mIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZSBlcnJvciBvY2N1cnJlZC4gUHJlc2VudGx5CiAqIHRoaXMgaW5jbHVkZXMgYSBjYWxsIHN0YWNrIHRyYWNlYmFjayBvZiBhY3RpdmUgcHJvY2VkdXJhbCBsYW5ndWFnZQogKiBmdW5jdGlvbnMgYW5kIGludGVybmFsbHktZ2VuZXJhdGVkIHF1ZXJpZXMuIFRoZSB0cmFjZSBpcyBvbmUgZW50cnkKICogcGVyIGxpbmUsIG1vc3QgcmVjZW50IGZpcnN0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfRElBR19DT05URVhUJywgODcpOwoKLyoqCiAqIFBhc3NlZCB0byA8Yj5wZ19yZXN1bHRfZXJyb3JfZmllbGQ8L2I+LgogKiBUaGUgZmlsZSBuYW1lIG9mIHRoZSBQb3N0Z3JlU1FMIHNvdXJjZS1jb2RlIGxvY2F0aW9uIHdoZXJlIHRoZSBlcnJvcgogKiB3YXMgcmVwb3J0ZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9ESUFHX1NPVVJDRV9GSUxFJywgNzApOwoKLyoqCiAqIFBhc3NlZCB0byA8Yj5wZ19yZXN1bHRfZXJyb3JfZmllbGQ8L2I+LgogKiBUaGUgbGluZSBudW1iZXIgb2YgdGhlIFBvc3RncmVTUUwgc291cmNlLWNvZGUgbG9jYXRpb24gd2hlcmUgdGhlCiAqIGVycm9yIHdhcyByZXBvcnRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZ3NxbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BHU1FMX0RJQUdfU09VUkNFX0xJTkUnLCA3Nik7CgovKioKICogUGFzc2VkIHRvIDxiPnBnX3Jlc3VsdF9lcnJvcl9maWVsZDwvYj4uCiAqIFRoZSBuYW1lIG9mIHRoZSBQb3N0Z3JlU1FMIHNvdXJjZS1jb2RlIGZ1bmN0aW9uIHJlcG9ydGluZyB0aGUgZXJyb3IuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9ESUFHX1NPVVJDRV9GVU5DVElPTicsIDgyKTsKCi8qKgogKiBQYXNzZWQgdG8gPGI+cGdfY29udmVydDwvYj4uCiAqIElnbm9yZSBkZWZhdWx0IHZhbHVlcyBpbiB0aGUgdGFibGUgZHVyaW5nIGNvbnZlcnNpb24uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGdzcWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQR1NRTF9DT05WX0lHTk9SRV9ERUZBVUxUJywgMik7CgovKioKICogUGFzc2VkIHRvIDxiPnBnX2NvbnZlcnQ8L2I+LgogKiBVc2UgU1FMIE5VTEwgaW4gcGxhY2Ugb2YgYW4gZW1wdHkgc3RyaW5nLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfQ09OVl9GT1JDRV9OVUxMJywgNCk7CgovKioKICogUGFzc2VkIHRvIDxiPnBnX2NvbnZlcnQ8L2I+LgogKiBJZ25vcmUgY29udmVyc2lvbiBvZiA8Yj5OVUxMPC9iPiBpbnRvIFNRTCBOT1QgTlVMTCBjb2x1bW5zLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bnc3FsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEdTUUxfQ09OVl9JR05PUkVfTk9UX05VTEwnLCA4KTsKZGVmaW5lKCdQR1NRTF9ETUxfTk9fQ09OVicsIDI1Nik7CmRlZmluZSgnUEdTUUxfRE1MX0VYRUMnLCA1MTIpOwpkZWZpbmUoJ1BHU1FMX0RNTF9BU1lOQycsIDEwMjQpOwpkZWZpbmUoJ1BHU1FMX0RNTF9TVFJJTkcnLCAyMDQ4KTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBnLWxhc3Qtbm90aWNlLnBocAogKiBAc2luY2UgNy4xCiAqLwpkZWZpbmUoJ1BHU1FMX05PVElDRV9MQVNUJywgMSk7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1sYXN0LW5vdGljZS5waHAKICogQHNpbmNlIDcuMQogKi8KZGVmaW5lKCdQR1NRTF9OT1RJQ0VfQUxMJywgMik7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZy1sYXN0LW5vdGljZS5waHAKICogQHNpbmNlIDcuMQogKi8KZGVmaW5lKCdQR1NRTF9OT1RJQ0VfQ0xFQVInLCAzKTsKCmNvbnN0IFBHU1FMX0NPTk5FQ1RfQVNZTkMgPSA0Owpjb25zdCBQR1NRTF9DT05ORUNUSU9OX0FVVEhfT0sgPSA1Owpjb25zdCBQR1NRTF9DT05ORUNUSU9OX0FXQUlUSU5HX1JFU1BPTlNFID0gNDsKY29uc3QgUEdTUUxfQ09OTkVDVElPTl9NQURFID0gMzsKY29uc3QgUEdTUUxfQ09OTkVDVElPTl9TRVRFTlYgPSA2Owpjb25zdCBQR1NRTF9DT05ORUNUSU9OX1NUQVJURUQgPSAyOwpjb25zdCBQR1NRTF9ETUxfRVNDQVBFID0gNDA5NjsKY29uc3QgUEdTUUxfUE9MTElOR19BQ1RJVkUgPSA0Owpjb25zdCBQR1NRTF9QT0xMSU5HX0ZBSUxFRCA9IDA7CmNvbnN0IFBHU1FMX1BPTExJTkdfT0sgPSAzOwpjb25zdCBQR1NRTF9QT0xMSU5HX1JFQURJTkcgPSAxOwpjb25zdCBQR1NRTF9QT0xMSU5HX1dSSVRJTkcgPSAyOwpjb25zdCBQR1NRTF9ESUFHX1NDSEVNQV9OQU1FID0gMTE1Owpjb25zdCBQR1NRTF9ESUFHX1RBQkxFX05BTUUgPSAxMTY7CmNvbnN0IFBHU1FMX0RJQUdfQ09MVU1OX05BTUUgPSA5OTsKY29uc3QgUEdTUUxfRElBR19EQVRBVFlQRV9OQU1FID0gMTAwOwpjb25zdCBQR1NRTF9ESUFHX0NPTlNUUkFJTlRfTkFNRSA9IDExMDsKY29uc3QgUEdTUUxfRElBR19TRVZFUklUWV9OT05MT0NBTElaRUQgPSA4NjsKCmNvbnN0IFBHU1FMX0VSUk9SU19TUUxTVEFURSA9IDA7CmNvbnN0IFBHU1FMX1RSQUNFX1JFR1JFU1NfTU9ERSA9IDI7CmNvbnN0IFBHU1FMX1BJUEVMSU5FX1NZTkMgPSAxMDsKY29uc3QgUEdTUUxfUElQRUxJTkVfT04gPSAxOwpjb25zdCBQR1NRTF9QSVBFTElORV9PRkYgPSAwOwpjb25zdCBQR1NRTF9QSVBFTElORV9BQk9SVEVEID0gMjsKY29uc3QgUEdTUUxfU0hPV19DT05URVhUX05FVkVSID0gMDsKY29uc3QgUEdTUUxfU0hPV19DT05URVhUX0VSUk9SUyA9IDE7CmNvbnN0IFBHU1FMX1NIT1dfQ09OVEVYVF9BTFdBWVMgPSAyOwoKLy8gRW5kIG9mIHBnc3FsIHYuCjw/cGhwCi8qKgogKiBIZWxwZXIgYXV0b2NvbXBsZXRlIGZvciBwaHAgem1xIGV4dGVuc2lvbgogKiBAYXV0aG9yIEJvcmlzIEdvcmJ5bGV2IDxla2hvQGVraG8ubmFtZT4KICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2ktZWtoby96bXEtcGhwZG9jCiAqLwovKioKICogQ2xhc3MgWk1RCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnptcS5waHAKICovCmNsYXNzIFpNUQp7CiAgICAvKioKICAgICAqIEV4Y2x1c2l2ZSBwYWlyIHBhdHRlcm4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tFVF9QQUlSID0gMDsKCiAgICAvKioKICAgICAqIFB1Ymxpc2hlciBzb2NrZXQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tFVF9QVUIgPSAxOwoKICAgIC8qKgogICAgICogU3Vic2NyaWJlciBzb2NrZXQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tFVF9TVUIgPSAyOwoKICAgIC8qKgogICAgICogUmVxdWVzdCBzb2NrZXQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tFVF9SRVEgPSAzOwoKICAgIC8qKgogICAgICogUmVwbHkgc29ja2V0CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLRVRfUkVQID0gNDsKCiAgICAvKioKICAgICAqIEFsaWFzIGZvciBTT0NLRVRfREVBTEVSCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLRVRfWFJFUSA9IDU7CgogICAgLyoqCiAgICAgKiBBbGlhcyBmb3IgU09DS0VUX1JPVVRFUgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS0VUX1hSRVAgPSA2OwoKICAgIC8qKgogICAgICogUGlwZWxpbmUgdXBzdHJlYW0gcHVzaCBzb2NrZXQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tFVF9QVVNIID0gODsKCiAgICAvKioKICAgICAqIFBpcGVsaW5lIGRvd25zdHJlYW0gcHVsbCBzb2NrZXQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tFVF9QVUxMID0gNzsKCiAgICAvKioKICAgICAqIEV4dGVuZGVkIFJFUCBzb2NrZXQgdGhhdCBjYW4gcm91dGUgcmVwbGllcyB0byByZXF1ZXN0ZXJzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLRVRfUk9VVEVSID0gNjsKCiAgICAvKioKICAgICAqIEV4dGVuZGVkIFJFUSBzb2NrZXQgdGhhdCBsb2FkIGJhbGFuY2VzIHRvIGFsbCBjb25uZWN0ZWQgcGVlcnMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tFVF9ERUFMRVIgPSA1OwoKICAgIC8qKgogICAgICogU2ltaWxhciB0byBTT0NLRVRfUFVCLCBleGNlcHQgeW91IGNhbiByZWNlaXZlIHN1YnNjcmlwdGlvbnMgYXMgbWVzc2FnZXMuCiAgICAgKiBUaGUgc3Vic2NyaXB0aW9uIG1lc3NhZ2UgaXMgMCAodW5zdWJzY3JpYmUpIG9yIDEgKHN1YnNjcmliZSkgZm9sbG93ZWQgYnkgdGhlIHRvcGljLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS0VUX1hQVUIgPSA5OwoKICAgIC8qKgogICAgICogU2ltaWxhciB0byBTT0NLRVRfU1VCLCBleGNlcHQgeW91IGNhbiBzZW5kIHN1YnNjcmlwdGlvbnMgYXMgbWVzc2FnZXMuIFNlZSBTT0NLRVRfWFBVQiBmb3IgZm9ybWF0LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS0VUX1hTVUIgPSAxMDsKCiAgICAvKioKICAgICAqIFVzZWQgdG8gc2VuZCBhbmQgcmVjZWl2ZSBUQ1AgZGF0YSBmcm9tIGEgbm9uLcOYTVEgcGVlci4KICAgICAqIEF2YWlsYWJsZSBpZiBjb21waWxlZCBhZ2FpbnN0IFplcm9NUSA0Lnggb3IgaGlnaGVyLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS0VUX1NUUkVBTSA9IDExOwoKICAgIC8qKgogICAgICogVGhlIGhpZ2ggd2F0ZXIgbWFyayBmb3IgaW5ib3VuZCBhbmQgb3V0Ym91bmQgbWVzc2FnZXMgaXMgYSBoYXJkCiAgICAgKiBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgbWVzc2FnZXMgw5hNUSBzaGFsbCBxdWV1ZSBpbiBtZW1vcnkKICAgICAqIGZvciBhbnkgc2luZ2xlIHBlZXIgdGhhdCB0aGUgc3BlY2lmaWVkIHNvY2tldCBpcyBjb21tdW5pY2F0aW5nIHdpdGguCiAgICAgKiBTZXR0aW5nIHRoaXMgb3B0aW9uIG9uIGEgc29ja2V0IHdpbGwgb25seSBhZmZlY3QgY29ubmVjdGlvbnMgbWFkZSBhZnRlciB0aGUgb3B0aW9uIGhhcyBiZWVuIHNldC4KICAgICAqIE9uIFplcm9NUSAzLnggdGhpcyBpcyBhIHdyYXBwZXIgZm9yIHNldHRpbmcgYm90aCBTTkRIV00gYW5kIFJDVkhXTS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tPUFRfSFdNID0gMTsKCiAgICAvKioKICAgICAqIFRoZSBaTVFfU05ESFdNIG9wdGlvbiBzaGFsbCBzZXQgdGhlIGhpZ2ggd2F0ZXIgbWFyayBmb3Igb3V0Ym91bmQgbWVzc2FnZXMgb24gdGhlIHNwZWNpZmllZCBzb2NrZXQuCiAgICAgKiBBdmFpbGFibGUgaWYgY29tcGlsZWQgYWdhaW5zdCBaZXJvTVEgMy54IG9yIGhpZ2hlci4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tPUFRfU05ESFdNID0gMjM7CgogICAgLyoqCiAgICAgKiBUaGUgWk1RX1NOREhXTSBvcHRpb24gc2hhbGwgc2V0IHRoZSBoaWdoIHdhdGVyIG1hcmsgZm9yIGluYm91bmQgbWVzc2FnZXMgb24gdGhlIHNwZWNpZmllZCBzb2NrZXQuCiAgICAgKiBBdmFpbGFibGUgaWYgY29tcGlsZWQgYWdhaW5zdCBaZXJvTVEgMy54IG9yIGhpZ2hlci4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tPUFRfUkNWSFdNID0gMjQ7CgogICAgLyoqCiAgICAgKiBTZXQgSS9PIHRocmVhZCBhZmZpbml0eQogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS09QVF9BRkZJTklUWSA9IDQ7CgogICAgLyoqCiAgICAgKiBTZXQgc29ja2V0IGlkZW50aXR5CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLT1BUX0lERU5USVRZID0gNTsKCiAgICAvKioKICAgICAqIEVzdGFibGlzaCBtZXNzYWdlIGZpbHRlci4gVmFsaWQgZm9yIHN1YnNjcmliZXIgc29ja2V0CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLT1BUX1NVQlNDUklCRSA9IDY7CgogICAgLyoqCiAgICAgKiBSZW1vdmUgbWVzc2FnZSBmaWx0ZXIuIFZhbGlkIGZvciBzdWJzY3JpYmVyIHNvY2tldAogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS09QVF9VTlNVQlNDUklCRSA9IDc7CgogICAgLyoqCiAgICAgKiBTZXQgcmF0ZSBmb3IgbXVsdGljYXN0IHNvY2tldHMgKHBnbSkgKFZhbHVlOiBpbnQgPj0gMCkKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tPUFRfUkFURSA9IDg7CgogICAgLyoqCiAgICAgKiBTZXQgbXVsdGljYXN0IHJlY292ZXJ5IGludGVydmFsIChWYWx1ZTogaW50ID49IDApCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLT1BUX1JFQ09WRVJZX0lWTCA9IDk7CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGluaXRpYWwgcmVjb25uZWN0aW9uIGludGVydmFsIChWYWx1ZTogaW50ID49IDApCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLT1BUX1JFQ09OTkVDVF9JVkwgPSAxODsKCiAgICAvKioKICAgICAqIFNldCB0aGUgbWF4IHJlY29ubmVjdGlvbiBpbnRlcnZhbCAoVmFsdWU6IGludCA+PSAwKQogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS09QVF9SRUNPTk5FQ1RfSVZMX01BWCA9IDIxOwoKICAgIC8qKgogICAgICogQ29udHJvbCBtdWx0aWNhc3QgbG9vcGJhY2sgKFZhbHVlOiBpbnQgPj0gMCkKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tPUFRfTUNBU1RfTE9PUCA9IDEwOwoKICAgIC8qKgogICAgICogU2V0IGtlcm5lbCB0cmFuc21pdCBidWZmZXIgc2l6ZSAoVmFsdWU6IGludCA+PSAwKQogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS09QVF9TTkRCVUYgPSAxMTsKCiAgICAvKioKICAgICAqIFNldCBrZXJuZWwgcmVjZWl2ZSBidWZmZXIgc2l6ZSAoVmFsdWU6IGludCA+PSAwKQogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS09QVF9SQ1ZCVUYgPSAxMjsKCiAgICAvKioKICAgICAqIFJlY2VpdmUgbXVsdGktcGFydCBtZXNzYWdlcwogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS09QVF9SQ1ZNT1JFID0gMTM7CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHNvY2tldCB0eXBlLiBWYWxpZCBmb3IgZ2V0U29ja09wdAogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS09QVF9UWVBFID0gMTY7CgogICAgLyoqCiAgICAgKiBUaGUgbGluZ2VyIHZhbHVlIG9mIHRoZSBzb2NrZXQuCiAgICAgKiBTcGVjaWZpZXMgaG93IGxvbmcgdGhlIHNvY2tldCBibG9ja3MgdHJ5aW5nIGZsdXNoIG1lc3NhZ2VzIGFmdGVyIGl0IGhhcyBiZWVuIGNsb3NlZAogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS09QVF9MSU5HRVIgPSAxNzsKCiAgICAvKioKICAgICAqIFRoZSBTT0NLT1BUX0JBQ0tMT0cgb3B0aW9uIHNoYWxsIHNldCB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIHF1ZXVlIG9mIG91dHN0YW5kaW5nIHBlZXIgY29ubmVjdGlvbnMKICAgICAqIGZvciB0aGUgc3BlY2lmaWVkIHNvY2tldDsgdGhpcyBvbmx5IGFwcGxpZXMgdG8gY29ubmVjdGlvbi1vcmllbnRlZCB0cmFuc3BvcnRzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU09DS09QVF9CQUNLTE9HID0gMTk7CgogICAgLyoqCiAgICAgKiBMaW1pdHMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgaW5ib3VuZCBtZXNzYWdlLiBWYWx1ZSAtMSBtZWFucyBubyBsaW1pdC4KICAgICAqIEF2YWlsYWJsZSBpZiBjb21waWxlZCBhZ2FpbnN0IFplcm9NUSAzLnggb3IgaGlnaGVyCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLT1BUX01BWE1TR1NJWkUgPSAyMjsKCiAgICAvKioKICAgICAqIFNldHMgdGhlIHRpbWVvdXQgZm9yIHNlbmQgb3BlcmF0aW9uIG9uIHRoZSBzb2NrZXQuIFZhbHVlIC0xIG1lYW5zIG5vIGxpbWl0LgogICAgICogQXZhaWxhYmxlIGlmIGNvbXBpbGVkIGFnYWluc3QgWmVyb01RIDMueCBvciBoaWdoZXIKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tPUFRfU05EVElNRU8gPSAyODsKCiAgICAvKioKICAgICAqIFNldHMgdGhlIHRpbWVvdXQgZm9yIHJlY2VpdmUgb3BlcmF0aW9uIG9uIHRoZSBzb2NrZXQuIFZhbHVlIC0xIG1lYW5zIG5vIGxpbWl0LgogICAgICogQXZhaWxhYmxlIGlmIGNvbXBpbGVkIGFnYWluc3QgWmVyb01RIDMueCBvciBoaWdoZXIKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tPUFRfUkNWVElNRU8gPSAyNzsKCiAgICAvKioKICAgICAqIERpc2FibGUgSVBWNiBzdXBwb3J0IGlmIDEuCiAgICAgKiBBdmFpbGFibGUgaWYgY29tcGlsZWQgYWdhaW5zdCBaZXJvTVEgMy54CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLT1BUX0lQVjRPTkxZID0gMzE7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgbGFzdCBjb25uZWN0ZWQgZW5kcG9pbnQgLSBmb3IgdXNlIHdpdGggKiB3aWxkY2FyZCBwb3J0cy4KICAgICAqIEF2YWlsYWJsZSBpZiBjb21waWxlZCBhZ2FpbnN0IFplcm9NUSAzLnggb3IgaGlnaGVyCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLT1BUX0xBU1RfRU5EUE9JTlQgPSAzMjsKCiAgICAvKioKICAgICAqIElkbGUgdGltZSBmb3IgVENQIGtlZXBhbGl2ZS4KICAgICAqIEF2YWlsYWJsZSBpZiBjb21waWxlZCBhZ2FpbnN0IFplcm9NUSAzLnggb3IgaGlnaGVyCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLT1BUX1RDUF9LRUVQQUxJVkVfSURMRSA9IDM2OwoKICAgIC8qKgogICAgICogQ291bnQgdGltZSBmb3IgVENQIGtlZXBhbGl2ZS4KICAgICAqIEF2YWlsYWJsZSBpZiBjb21waWxlZCBhZ2FpbnN0IFplcm9NUSAzLnggb3IgaGlnaGVyCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLT1BUX1RDUF9LRUVQQUxJVkVfQ05UID0gMzU7CgogICAgLyoqCiAgICAgKiBJbnRlcnZhbCBmb3IgVENQIGtlZXBhbGl2ZS4KICAgICAqIEF2YWlsYWJsZSBpZiBjb21waWxlZCBhZ2FpbnN0IFplcm9NUSAzLnggb3IgaGlnaGVyCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLT1BUX1RDUF9LRUVQQUxJVkVfSU5UVkwgPSAzNzsKCiAgICAvKioKICAgICAqIFNldCBhIENJRFIgc3RyaW5nIHRvIG1hdGNoIGFnYWluc3QgaW5jb21pbmcgVENQIGNvbm5lY3Rpb25zLgogICAgICogQXZhaWxhYmxlIGlmIGNvbXBpbGVkIGFnYWluc3QgWmVyb01RIDMueCBvciBoaWdoZXIKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tPUFRfREVMQVlfQVRUQUNIX09OX0NPTk5FQ1QgPSAzOTsKCiAgICAvKioKICAgICAqIFNldCBhIENJRFIgc3RyaW5nIHRvIG1hdGNoIGFnYWluc3QgaW5jb21pbmcgVENQIGNvbm5lY3Rpb25zLgogICAgICogQXZhaWxhYmxlIGlmIGNvbXBpbGVkIGFnYWluc3QgWmVyb01RIDMueCBvciBoaWdoZXIKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tPUFRfVENQX0FDQ0VQVF9GSUxURVIgPSAzODsKCiAgICAvKioKICAgICAqIFNldCB0aGUgWFBVQiB0byByZWNlaXZlIGFuIGFwcGxpY2F0aW9uIG1lc3NhZ2Ugb24gZWFjaCBpbnN0YW5jZSBvZiBhIHN1YnNjcmlwdGlvbi4KICAgICAqIEF2YWlsYWJsZSBpZiBjb21waWxlZCBhZ2FpbnN0IFplcm9NUSAzLnggb3IgaGlnaGVyCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLT1BUX1hQVUJfVkVSQk9TRSA9IDQwOwoKICAgIC8qKgogICAgICogU2V0cyB0aGUgcmF3IG1vZGUgb24gdGhlIFJPVVRFUiwgd2hlbiBzZXQgdG8gMS4KICAgICAqIEluIHJhdyBtb2RlIHdoZW4gdXNpbmcgdGNwOi8vIHRyYW5zcG9ydCB0aGUgc29ja2V0IHdpbGwgcmVhZCBhbmQgd3JpdGUgd2l0aG91dCBaZXJvTVEgZnJhbWluZy4KICAgICAqIEF2YWlsYWJsZSBpZiBjb21waWxlZCBhZ2FpbnN0IFplcm9NUSA0LjAgb3IgaGlnaGVyCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTT0NLT1BUX1JPVVRFUl9SQVcgPSA0MTsKCiAgICAvKioKICAgICAqIEVuYWJsZSBJUFY2LgogICAgICogQXZhaWxhYmxlIGlmIGNvbXBpbGVkIGFnYWluc3QgWmVyb01RIDQuMCBvciBoaWdoZXIKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNPQ0tPUFRfSVBWNiA9IDQyOwoKICAgIC8qKgogICAgICogVGhlIHNvY2tldCBsaW1pdCBmb3IgdGhpcyBjb250ZXh0LgogICAgICogQXZhaWxhYmxlIGlmIGNvbXBpbGVkIGFnYWluc3QgWmVyb01RIDMueCBvciBoaWdoZXIKICAgICAqLwogICAgcHVibGljIGNvbnN0IENUWE9QVF9NQVhfU09DS0VUUyA9IDI7CgogICAgLyoqCiAgICAgKiBQb2xsIGZvciBpbmNvbWluZyBkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQT0xMX0lOID0gMTsKCiAgICAvKioKICAgICAqIFBvbGwgZm9yIG91dGdvaW5nIGRhdGEKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTExfT1VUID0gMjsKCiAgICAvKioKICAgICAqIE5vbi1ibG9ja2luZyBvcGVyYXRpb24uCiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgWk1ROjpNT0RFX0RPTlRXQUlUIGluc3RlYWQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE1PREVfTk9CTE9DSyA9IDE7CgogICAgLyoqCiAgICAgKiBOb24tYmxvY2tpbmcgb3BlcmF0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNT0RFX0RPTlRXQUlUID0gMTsKCiAgICAvKioKICAgICAqIFNlbmQgbXVsdGktcGFydCBtZXNzYWdlCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNT0RFX1NORE1PUkUgPSAyOwoKICAgIC8qKgogICAgICogRm9yd2FyZGVyIGRldmljZQogICAgICovCiAgICBwdWJsaWMgY29uc3QgREVWSUNFX0ZPUldBUkRFUiA9IDI7CgogICAgLyoqCiAgICAgKiBRdWV1ZSBkZXZpY2UKICAgICAqLwogICAgcHVibGljIGNvbnN0IERFVklDRV9RVUVVRSA9IDM7CgogICAgLyoqCiAgICAgKiBTdHJlYW1lciBkZXZpY2UKICAgICAqLwogICAgcHVibGljIGNvbnN0IERFVklDRV9TVFJFQU1FUiA9IDE7CgogICAgLyoqCiAgICAgKiBaTVEgZXh0ZW5zaW9uIGludGVybmFsIGVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfSU5URVJOQUwgPSAtOTk7CgogICAgLyoqCiAgICAgKiBJbXBsaWVzIHRoYXQgdGhlIG9wZXJhdGlvbiB3b3VsZCBibG9jayB3aGVuIFpNUTo6TU9ERV9ET05UV0FJVCBpcyB1c2VkCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfRUFHQUlOID0gMTE7CgogICAgLyoqCiAgICAgKiBUaGUgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHNvY2tldCB0eXBlCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfRU5PVFNVUCA9IDE1NjM4NDcxMzsKCiAgICAvKioKICAgICAqIFRoZSBvcGVyYXRpb24gY2FuIG5vdCBiZSBleGVjdXRlZCBiZWNhdXNlIHRoZSBzb2NrZXQgaXMgbm90IGluIGNvcnJlY3Qgc3RhdGUKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSUl9FRlNNID0gMTU2Mzg0NzYzOwoKICAgIC8qKgogICAgICogVGhlIGNvbnRleHQgaGFzIGJlZW4gdGVybWluYXRlZAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJSX0VURVJNID0gMTU2Mzg0NzY1OwoKICAgIC8qKgogICAgICogUHJpdmF0ZSBjb25zdHJ1Y3RvciB0byBwcmV2ZW50IGRpcmVjdCBpbml0aWFsaXphdGlvbi4gVGhpcyBjbGFzcyBob2xkcyB0aGUgY29uc3RhbnRzIGZvciBaTVEgZXh0ZW5zaW9uLgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xLmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9Cn0KLyoqCiAqIENsYXNzIFpNUUNvbnRleHQKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3Muem1xY29udGV4dC5waHAKICovCmNsYXNzIFpNUUNvbnRleHQKewogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFpNUSBjb250ZXh0LiBUaGUgY29udGV4dCBpcyB1c2VkIHRvIGluaXRpYWxpemUgc29ja2V0cy4KICAgICAqIEEgcGVyc2lzdGVudCBjb250ZXh0IGlzIHJlcXVpcmVkIHRvIGluaXRpYWxpemUgcGVyc2lzdGVudCBzb2NrZXRzLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3ptcWNvbnRleHQuY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGlvX3RocmVhZHMgTnVtYmVyIG9mIGlvLXRocmVhZHMgaW4gdGhlIGNvbnRleHQKICAgICAqIEBwYXJhbSBib29sICRpc19wZXJzaXN0ZW50IFdoZXRoZXIgdGhlIGNvbnRleHQgaXMgcGVyc2lzdGVudC4gUGVyc2lzdGVudCBjb250ZXh0IGlzIHN0b3JlZCBvdmVyIG11bHRpcGxlIHJlcXVlc3RzIGFuZCBpcyBhIHJlcXVpcmVtZW50IGZvciBwZXJzaXN0ZW50IHNvY2tldHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaW9fdGhyZWFkcyA9IDEsICRpc19wZXJzaXN0ZW50ID0gdHJ1ZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIHptcSAmZ3Q7PSAxLjAuNCkKICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgY29udGV4dCBvcHRpb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xY29udGV4dC5nZXRvcHQucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IEFuIGludCByZXByZXNlbnRpbmcgdGhlIG9wdGlvbi4gU2VlIHRoZSA8Yj5aTVE6OkNUWE9QVF8qPC9iPiBjb25zdGFudHMuCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xpbnQgUmV0dXJucyBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gaW50ZWdlciBkZXBlbmRpbmcgb24ga2V5LiBUaHJvd3MgWk1RQ29udGV4dEV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEB0aHJvd3MgWk1RQ29udGV4dEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0KCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCB6bXEgJmd0Oz0gMC41LjApCiAgICAgKiBTaG9ydGN1dCBmb3IgY3JlYXRpbmcgbmV3IHNvY2tldHMgZnJvbSB0aGUgY29udGV4dC4KICAgICAqIElmIHRoZSBjb250ZXh0IGlzIG5vdCBwZXJzaXN0ZW50IHRoZSBwZXJzaXN0ZW50X2lkIHBhcmFtZXRlciBpcyBpZ25vcmVkCiAgICAgKiBhbmQgdGhlIHNvY2tldCBmYWxscyBiYWNrIHRvIGJlaW5nIG5vbi1wZXJzaXN0ZW50LgogICAgICogVGhlIG9uX25ld19zb2NrZXQgaXMgY2FsbGVkIG9ubHkgd2hlbiBhIG5ldyB1bmRlcmx5aW5nIHNvY2tldCBzdHJ1Y3R1cmUgaXMgY3JlYXRlZC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96bXFjb250ZXh0LmdldHNvY2tldC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0eXBlIDxiPlpNUTo6U09DS0VUXyo8L2I+IGNvbnN0YW50IHRvIHNwZWNpZnkgc29ja2V0IHR5cGUuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwZXJzaXN0ZW50X2lkIElmIHBlcnNpc3RlbnRfaWQgaXMgc3BlY2lmaWVkIHRoZSBzb2NrZXQgd2lsbCBiZSBwZXJzaXN0ZWQgb3ZlciBtdWx0aXBsZSByZXF1ZXN0cy4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkb25fbmV3X3NvY2tldCBDYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggaXMgZXhlY3V0ZWQgd2hlbiBhIG5ldyBzb2NrZXQgc3RydWN0dXJlIGlzIGNyZWF0ZWQuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZ2V0IGludm9rZWQgaWYgdGhlIHVuZGVybHlpbmcgcGVyc2lzdGVudCBjb25uZWN0aW9uIGlzIHJlLXVzZWQuIFRoZSBjYWxsYmFjayB0YWtlcyBaTVFTb2NrZXQgYW5kIHBlcnNpc3RlbnRfaWQgYXMgdHdvIGFyZ3VtZW50cy4KICAgICAqIEByZXR1cm4gWk1RU29ja2V0CiAgICAgKiBAdGhyb3dzIFpNUVNvY2tldEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U29ja2V0KCR0eXBlLCAkcGVyc2lzdGVudF9pZCA9IG51bGwsICRvbl9uZXdfc29ja2V0ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIChQRUNMIHptcSAmZ3Q7PSAwLjUuMCkKICAgICAqIFdoZXRoZXIgdGhlIGNvbnRleHQgaXMgcGVyc2lzdGVudC4KICAgICAqIFBlcnNpc3RlbnQgY29udGV4dCBpcyBuZWVkZWQgZm9yIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgYXMgZWFjaCBzb2NrZXQgaXMgYWxsb2NhdGVkIGZyb20gYSBjb250ZXh0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3ptcWNvbnRleHQuaXNwZXJzaXN0ZW50LnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IGlmIHRoZSBjb250ZXh0IGlzIHBlcnNpc3RlbnQgYW5kIDxiPkZBTFNFPC9iPiBpZiB0aGUgY29udGV4dCBpcyBub24tcGVyc2lzdGVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzUGVyc2lzdGVudCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCB6bXEgJmd0Oz0gMS4wLjQpCiAgICAgKiBTZXRzIGEgWk1RIGNvbnRleHQgb3B0aW9uLiBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUga2V5LgogICAgICogU2VlIFpNUSBDb25zdGFudCBUeXBlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96bXFjb250ZXh0LnNldG9wdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRrZXkgT25lIG9mIHRoZSA8Yj5aTVE6OkNUWE9QVF8qPGI+IGNvbnN0YW50cy4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuCiAgICAgKiBAcmV0dXJuIFpNUUNvbnRleHQKICAgICAqIEB0aHJvd3MgWk1RQ29udGV4dEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3B0KCRrZXksICR2YWx1ZSkge30KfQovKioKICogQ2xhc3MgWk1RU29ja2V0CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnptcXNvY2tldC5waHAKICovCmNsYXNzIFpNUVNvY2tldAp7CiAgICAvKioKICAgICAqIChQRUNMIHptcSAmZ3Q7PSAwLjUuMCkKICAgICAqIENvbnN0cnVjdHMgYSBaTVFTb2NrZXQgb2JqZWN0LgogICAgICogVGhlIHBlcnNpc3RlbnRfaWQgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGFsbG9jYXRlZCBhIHBlcnNpc3RlbnQgc29ja2V0LgogICAgICogQSBwZXJzaXN0ZW50IHNvY2tldCBoYXMgdG8gYmUgYWxsb2NhdGVkIGZyb20gYSBwZXJzaXN0ZW50IGNvbnRleHQgYW5kIGl0IHN0YXlzIGNvbm5lY3RlZCBvdmVyIG11bHRpcGxlIHJlcXVlc3RzLgogICAgICogVGhlIHBlcnNpc3RlbnRfaWQgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHJlY2FsbCB0aGUgc2FtZSBzb2NrZXQgb3ZlciBtdWx0aXBsZSByZXF1ZXN0cy4KICAgICAqIFRoZSBvbl9uZXdfc29ja2V0IGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBuZXcgdW5kZXJseWluZyBzb2NrZXQgc3RydWN0dXJlIGlzIGNyZWF0ZWQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xc29ja2V0LmNvbnN0cnVjdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gWk1RQ29udGV4dCAkY29udGV4dCA8cD5aTVFDb250ZXh0IHRvIGJ1aWxkIHRoaXMgb2JqZWN0PC9wPgogICAgICogQHBhcmFtIGludCAkdHlwZSA8cD5UaGUgdHlwZSBvZiB0aGUgc29ja2V0LiBTZWUgWk1ROjpTT0NLRVRfKiBjb25zdGFudHMuPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkcGVyc2lzdGVudF9pZCBbb3B0aW9uYWxdIDxwPklmIHBlcnNpc3RlbnRfaWQgaXMgc3BlY2lmaWVkIHRoZSBzb2NrZXQgd2lsbCBiZSBwZXJzaXN0ZWQgb3ZlciBtdWx0aXBsZSByZXF1ZXN0cy4gSWYgY29udGV4dCBpcyBub3QgcGVyc2lzdGVudCB0aGUgc29ja2V0IGZhbGxzIGJhY2sgdG8gbm9uLXBlcnNpc3RlbnQgbW9kZS48L3A+CiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJG9uX25ld19zb2NrZXQgW29wdGlvbmFsXSA8cD5DYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggaXMgZXhlY3V0ZWQgd2hlbiBhIG5ldyBzb2NrZXQgc3RydWN0dXJlIGlzIGNyZWF0ZWQuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZ2V0IGludm9rZWQgaWYgdGhlIHVuZGVybHlpbmcgcGVyc2lzdGVudCBjb25uZWN0aW9uIGlzIHJlLXVzZWQuPC9wPgogICAgICoKICAgICAqIEB0aHJvd3MgWk1RU29ja2V0RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChaTVFDb250ZXh0ICRjb250ZXh0LCAkdHlwZSwgJHBlcnNpc3RlbnRfaWQgPSBudWxsLCAkb25fbmV3X3NvY2tldCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCB6bXEgJmd0Oz0gMC41LjApCiAgICAgKiBCaW5kIHRoZSBzb2NrZXQgdG8gYW4gZW5kcG9pbnQuCiAgICAgKiBUaGUgZW5kcG9pbnQgaXMgZGVmaW5lZCBpbiBmb3JtYXQgdHJhbnNwb3J0Oi8vYWRkcmVzcwogICAgICogd2hlcmUgdHJhbnNwb3J0IGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBpbnByb2MsIGlwYywgdGNwLCBwZ20gb3IgZXBnbS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96bXFzb2NrZXQuYmluZC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkc24gVGhlIGJpbmQgZHNuLCBmb3IgZXhhbXBsZSB0cmFuc3BvcnQ6Ly9hZGRyZXNzLgogICAgICogQHBhcmFtIGJvb2wgJGZvcmNlIFRyaWVzIHRvIGJpbmQgZXZlbiBpZiB0aGUgc29ja2V0IGhhcyBhbHJlYWR5IGJlZW4gYm91bmQgdG8gdGhlIGdpdmVuIGVuZHBvaW50LgogICAgICoKICAgICAqIEByZXR1cm4gWk1RU29ja2V0CiAgICAgKiBAdGhyb3dzIFpNUVNvY2tldEV4Y2VwdGlvbiBpZiBiaW5kaW5nIGZhaWxzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiaW5kKCRkc24sICRmb3JjZSA9IGZhbHNlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgem1xICZndDs9IDAuNS4wKQogICAgICogQ29ubmVjdCB0aGUgc29ja2V0IHRvIGEgcmVtb3RlIGVuZHBvaW50LgogICAgICogVGhlIGVuZHBvaW50IGlzIGRlZmluZWQgaW4gZm9ybWF0IHRyYW5zcG9ydDovL2FkZHJlc3MKICAgICAqIHdoZXJlIHRyYW5zcG9ydCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzogaW5wcm9jLCBpcGMsIHRjcCwgcGdtIG9yIGVwZ20uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xc29ja2V0LmNvbm5lY3QucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZHNuIFRoZSBiaW5kIGRzbiwgZm9yIGV4YW1wbGUgdHJhbnNwb3J0Oi8vYWRkcmVzcy4KICAgICAqIEBwYXJhbSBib29sICRmb3JjZSBUcmllcyB0byBiaW5kIGV2ZW4gaWYgdGhlIHNvY2tldCBoYXMgYWxyZWFkeSBiZWVuIGJvdW5kIHRvIHRoZSBnaXZlbiBlbmRwb2ludC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFpNUVNvY2tldAogICAgICogQHRocm93cyBaTVFTb2NrZXRFeGNlcHRpb24gSWYgY29ubmVjdGlvbiBmYWlscwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29ubmVjdCgkZHNuLCAkZm9yY2UgPSBmYWxzZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIHptcSAmZ3Q7PSAxLjAuNCkKICAgICAqIERpc2Nvbm5lY3QgdGhlIHNvY2tldCBmcm9tIGEgcHJldmlvdXNseSBjb25uZWN0ZWQgcmVtb3RlIGVuZHBvaW50LgogICAgICogVGhlIGVuZHBvaW50IGlzIGRlZmluZWQgaW4gZm9ybWF0IHRyYW5zcG9ydDovL2FkZHJlc3MKICAgICAqIHdoZXJlIHRyYW5zcG9ydCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzogaW5wcm9jLCBpcGMsIHRjcCwgcGdtIG9yIGVwZ20uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xc29ja2V0LmRpc2Nvbm5lY3QucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZHNuIFRoZSBiaW5kIGRzbiwgZm9yIGV4YW1wbGUgdHJhbnNwb3J0Oi8vYWRkcmVzcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIFpNUVNvY2tldAogICAgICogQHRocm93cyBaTVFTb2NrZXRFeGNlcHRpb24gSWYgY29ubmVjdGlvbiBmYWlscwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzY29ubmVjdCgkZHNuKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxpc3Qgb2YgZW5kcG9pbnRzIHdoZXJlIHRoZSBzb2NrZXQgaXMgY29ubmVjdGVkIG9yIGJvdW5kIHRvLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3ptcXNvY2tldC5nZXRlbmRwb2ludHMucGhwCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBjb250YWlucyB0d28gc3ViLWFycmF5czogJ2Nvbm5lY3QnIGFuZCAnYmluZCcKICAgICAqIEB0aHJvd3MgWk1RU29ja2V0RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFbmRwb2ludHMoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcGVyc2lzdGVudCBpZCBzdHJpbmcgYXNzaWduZWQgb2YgdGhlIG9iamVjdCBhbmQgTlVMTCBpZiBzb2NrZXQgaXMgbm90IHBlcnNpc3RlbnQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xc29ja2V0LmdldHBlcnNpc3RlbnRpZC5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIDxwPgogICAgICogUmV0dXJucyB0aGUgcGVyc2lzdGVudCBpZCBzdHJpbmcgYXNzaWduZWQgb2YgdGhlIG9iamVjdCBhbmQgPGI+TlVMTDwvYj4gaWYgc29ja2V0IGlzIG5vdCBwZXJzaXN0ZW50LgogICAgICogPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGVyc2lzdGVudElkKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgc29ja2V0IG9wdGlvbi4KICAgICAqIFRoaXMgbWV0aG9kIGlzIGF2YWlsYWJsZSBpZiBaTVEgZXh0ZW5zaW9uIGhhcyBiZWVuIGNvbXBpbGVkIGFnYWluc3QgWk1RIHZlcnNpb24gMi4wLjcgb3IgaGlnaGVyCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xc29ja2V0LmdldHNvY2tvcHQucGhwCiAgICAgKgogICAgICogQHNpbmNlIDBNUSAyLjAuNwogICAgICogQHBhcmFtIGludCAka2V5IEFuIGludCByZXByZXNlbnRpbmcgdGhlIG9wdGlvbi4gU2VlIHRoZSA8Yj5aTVE6OlNPQ0tPUFRfKjwvYj4gY29uc3RhbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGludCA8cD4KICAgICAqIFJldHVybnMgZWl0aGVyIGEgc3RyaW5nIG9yIGFuIGludGVnZXIgZGVwZW5kaW5nIG9uIDxiPmtleTwvYj4uIFRocm93cwogICAgICogWk1RU29ja2V0RXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogPC9wPgogICAgICogQHRocm93cyBaTVFTb2NrZXRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNvY2tPcHQoJGtleSkge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgc29ja2V0IHR5cGUuCiAgICAgKiBUaGUgc29ja2V0IHR5cGUgY2FuIGJlIGNvbXBhcmVkIGFnYWluc3QgWk1ROjpTT0NLRVRfKiBjb25zdGFudHMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xc29ja2V0LmdldHNvY2tldHR5cGUucGhwCiAgICAgKgogICAgICogQHJldHVybiBpbnQgPHA+CiAgICAgKiBSZXR1cm5zIGFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBzb2NrZXQgdHlwZS4gVGhlIGludGVnZXIgY2FuIGJlIGNvbXBhcmVkIGFnYWluc3QKICAgICAqIDxiPlpNUTo6U09DS0VUXyo8L2I+IGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNvY2tldFR5cGUoKSB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgd2hldGhlciB0aGUgc29ja2V0IGlzIHBlcnNpc3RlbnQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xc29ja2V0LmlzcGVyc2lzdGVudC5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgPHA+UmV0dXJucyBhIGJvb2xlYW4gYmFzZWQgb24gd2hldGhlciB0aGUgc29ja2V0IGlzIHBlcnNpc3RlbnQgb3Igbm90LjwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzUGVyc2lzdGVudCgpIHt9CgogICAgLyoqCiAgICAgKiBSZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgc29ja2V0LgogICAgICogQnkgZGVmYXVsdCByZWNlaXZpbmcgd2lsbCBibG9jayB1bnRpbCBhIG1lc3NhZ2UgaXMgYXZhaWxhYmxlIHVubGVzcyA8Yj5aTVE6Ok1PREVfTk9CTE9DSzwvYj4gZmxhZyBpcyB1c2VkLgogICAgICogPGI+Wk1ROjpTT0NLT1BUX1JDVk1PUkU8L2I+IHNvY2tldCBvcHRpb24gY2FuIGJlIHVzZWQgZm9yIHJlY2VpdmluZyBtdWx0aS1wYXJ0IG1lc3NhZ2VzLgogICAgICogUmV0dXJucyB0aGUgbWVzc2FnZS4KICAgICAqIElmIDxiPlpNUTo6TU9ERV9OT0JMT0NLPC9iPiBpcyB1c2VkIGFuZCB0aGUgb3BlcmF0aW9uIHdvdWxkIGJsb2NrIGJvb2wgZmFsc2Ugc2hhbGwgYmUgcmV0dXJuZWQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xc29ja2V0LnJlY3YucGhwCiAgICAgKiBAc2VlIFpNUVNvY2tldDo6c2V0U29ja09wdCgpCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbW9kZSBQYXNzIG1vZGUgZmxhZ3MgdG8gcmVjZWl2ZSBtdWx0aXBhcnQgbWVzc2FnZXMgb3Igbm9uLWJsb2NraW5nIG9wZXJhdGlvbi4gU2VlIFpNUTo6TU9ERV8qIGNvbnN0YW50cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSA8cD5SZXR1cm5zIHRoZSBtZXNzYWdlLiBUaHJvd3MgWk1RU29ja2V0RXhjZXB0aW9uIGluIGVycm9yLiBJZiA8Yj5aTVE6Ok1PREVfTk9CTE9DSzwvYj4gaXMgdXNlZCBhbmQgdGhlIG9wZXJhdGlvbiB3b3VsZCBibG9jayBib29sZWFuIGZhbHNlIHNoYWxsIGJlIHJldHVybmVkLjwvcD4KICAgICAqIEB0aHJvd3MgWk1RU29ja2V0RXhjZXB0aW9uIGlmIHJlY2VpdmluZyBmYWlscy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlY3YoJG1vZGUgPSAwKSB7fQoKICAgIC8qKgogICAgICogUmVjZWl2ZSBhbiBhcnJheSBtdWx0aXBhcnQgbWVzc2FnZSBmcm9tIGEgc29ja2V0LgogICAgICogQnkgZGVmYXVsdCByZWNlaXZpbmcgd2lsbCBibG9jayB1bnRpbCBhIG1lc3NhZ2UgaXMgYXZhaWxhYmxlIHVubGVzcyBaTVE6Ok1PREVfTk9CTE9DSyBmbGFnIGlzIHVzZWQuCiAgICAgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBtZXNzYWdlIHBhcnRzLgogICAgICogSWYgPGI+Wk1ROjpNT0RFX05PQkxPQ0s8L2I+IGlzIHVzZWQgYW5kIHRoZSBvcGVyYXRpb24gd291bGQgYmxvY2sgYm9vbCBmYWxzZSBzaGFsbCBiZSByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96bXFzb2NrZXQucmVjdm11bHRpLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG1vZGUgUGFzcyBtb2RlIGZsYWdzIHRvIHJlY2VpdmUgbXVsdGlwYXJ0IG1lc3NhZ2VzIG9yIG5vbi1ibG9ja2luZyBvcGVyYXRpb24uIFNlZSBaTVE6Ok1PREVfKiBjb25zdGFudHMuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXSBSZXR1cm5zIHRoZSBhcnJheSBvZiBtZXNzYWdlIHBhcnRzLiBUaHJvd3MgWk1RU29ja2V0RXhjZXB0aW9uIGluIGVycm9yLiBJZiBaTVE6Ok1PREVfTk9CTE9DSyBpcyB1c2VkIGFuZCB0aGUgb3BlcmF0aW9uIHdvdWxkIGJsb2NrIGJvb2xlYW4gZmFsc2Ugc2hhbGwgYmUgcmV0dXJuZWQuCiAgICAgKiBAdGhyb3dzIFpNUVNvY2tldEV4Y2VwdGlvbiBpZiByZWNlaXZpbmcgZmFpbHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWN2TXVsdGkoJG1vZGUgPSAwKSB7fQoKICAgIC8qKgogICAgICogU2VuZCBhIG1lc3NhZ2UgdXNpbmcgdGhlIHNvY2tldC4gVGhlIG9wZXJhdGlvbiBjYW4gYmxvY2sgdW5sZXNzIFpNUTo6TU9ERV9OT0JMT0NLIGlzIHVzZWQuCiAgICAgKiBJZiA8Yj5aTVE6Ok1PREVfTk9CTE9DSzwvYj4gaXMgdXNlZCBhbmQgdGhlIG9wZXJhdGlvbiB3b3VsZCBibG9jayBib29sIGZhbHNlIHNoYWxsIGJlIHJldHVybmVkLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3ptcXNvY2tldC5zZW5kLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gc2VuZAogICAgICogQHBhcmFtIGludCAkbW9kZSBQYXNzIG1vZGUgZmxhZ3MgdG8gcmVjZWl2ZSBtdWx0aXBhcnQgbWVzc2FnZXMgb3Igbm9uLWJsb2NraW5nIG9wZXJhdGlvbi4gU2VlIFpNUTo6TU9ERV8qIGNvbnN0YW50cy4gICAgICoKICAgICAqCiAgICAgKiBAcmV0dXJuIFpNUVNvY2tldAogICAgICogQHRocm93cyBaTVFTb2NrZXRFeGNlcHRpb24gaWYgc2VuZGluZyBtZXNzYWdlIGZhaWxzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZW5kKCRtZXNzYWdlLCAkbW9kZSA9IDApIHt9CgogICAgLyoqCiAgICAgKiBTZW5kIGEgbXVsdGlwYXJ0IG1lc3NhZ2UgdXNpbmcgdGhlIHNvY2tldC4gVGhlIG9wZXJhdGlvbiBjYW4gYmxvY2sgdW5sZXNzIFpNUTo6TU9ERV9OT0JMT0NLIGlzIHVzZWQuCiAgICAgKiBJZiA8Yj5aTVE6Ok1PREVfTk9CTE9DSzwvYj4gaXMgdXNlZCBhbmQgdGhlIG9wZXJhdGlvbiB3b3VsZCBibG9jayBib29sIGZhbHNlIHNoYWxsIGJlIHJldHVybmVkLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3ptcXNvY2tldC5zZW5kbXVsdGkucGhwCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIHNlbmQgLSBhbiBhcnJheSBvZiBzdHJpbmdzCiAgICAgKiBAcGFyYW0gaW50ICRtb2RlIFBhc3MgbW9kZSBmbGFncyB0byByZWNlaXZlIG11bHRpcGFydCBtZXNzYWdlcyBvciBub24tYmxvY2tpbmcgb3BlcmF0aW9uLiBTZWUgWk1ROjpNT0RFXyogY29uc3RhbnRzLiAgICAgKgogICAgICoKICAgICAqIEByZXR1cm4gWk1RU29ja2V0CiAgICAgKiBAdGhyb3dzIFpNUVNvY2tldEV4Y2VwdGlvbiBpZiBzZW5kaW5nIG1lc3NhZ2UgZmFpbHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlbmRtdWx0aShhcnJheSAkbWVzc2FnZSwgJG1vZGUgPSAwKSB7fQoKICAgIC8qKgogICAgICogU2V0cyBhIFpNUSBzb2NrZXQgb3B0aW9uLiBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUga2V5LgogICAgICogQHNlZSBaTVEgQ29uc3RhbnQgVHlwZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xc29ja2V0LnNldHNvY2tvcHQucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAka2V5IE9uZSBvZiB0aGUgPGI+Wk1ROjpTT0NLT1BUXyo8L2I+IGNvbnN0YW50cy4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIuCiAgICAgKgogICAgICogQHJldHVybiBaTVFTb2NrZXQKICAgICAqIEB0aHJvd3MgWk1RU29ja2V0RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTb2NrT3B0KCRrZXksICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIFVuYmluZCB0aGUgc29ja2V0IGZyb20gYW4gZW5kcG9pbnQuCiAgICAgKiBUaGUgZW5kcG9pbnQgaXMgZGVmaW5lZCBpbiBmb3JtYXQgdHJhbnNwb3J0Oi8vYWRkcmVzcwogICAgICogd2hlcmUgdHJhbnNwb3J0IGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBpbnByb2MsIGlwYywgdGNwLCBwZ20gb3IgZXBnbS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96bXFzb2NrZXQudW5iaW5kLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRzbiBUaGUgcHJldmlvdXNseSBib3VuZCBkc24sIGZvciBleGFtcGxlIHRyYW5zcG9ydDovL2FkZHJlc3MuCiAgICAgKgogICAgICogQHJldHVybiBaTVFTb2NrZXQKICAgICAqIEB0aHJvd3MgWk1RU29ja2V0RXhjZXB0aW9uIGlmIGJpbmRpbmcgZmFpbHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuYmluZCgkZHNuKSB7fQp9Ci8qKgogKiBDbGFzcyBaTVFQb2xsCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnptcXBvbGwucGhwCiAqLwpjbGFzcyBaTVFQb2xsCnsKICAgIC8qKgogICAgICogKFBFQ0wgem1xICZndDs9IDAuNS4wKQogICAgICogQWRkcyBhIG5ldyBpdGVtIHRvIHRoZSBwb2xsIHNldCBhbmQgcmV0dXJucyB0aGUgaW50ZXJuYWwgaWQgb2YgdGhlIGFkZGVkIGl0ZW0uCiAgICAgKiBUaGUgaXRlbSBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBwb2xsIHNldCB1c2luZyB0aGUgcmV0dXJuZWQgc3RyaW5nIGlkLgogICAgICogUmV0dXJucyBhIHN0cmluZyBpZCBvZiB0aGUgYWRkZWQgaXRlbSB3aGljaCBjYW4gYmUgbGF0ZXIgdXNlZCB0byByZW1vdmUgdGhlIGl0ZW0uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xcG9sbC5hZGQucGhwCiAgICAgKgogICAgICogQHBhcmFtIFpNUVNvY2tldCAkZW50cnkgWk1RU29ja2V0IG9iamVjdCBvciBhIFBIUCBzdHJlYW0gcmVzb3VyY2UKICAgICAqIEBwYXJhbSBpbnQgJHR5cGUgRGVmaW5lcyB3aGF0IGFjdGl2aXR5IHRoZSBzb2NrZXQgaXMgcG9sbGVkIGZvci4gU2VlIDxiPlpNUTo6UE9MTF9JTjwvYj4gYW5kIDxiPlpNUTo6UE9MTF9PVVQ8L2I+IGNvbnN0YW50cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBSZXR1cm5zIGEgc3RyaW5nIGlkIG9mIHRoZSBhZGRlZCBpdGVtIHdoaWNoIGNhbiBiZSBsYXRlciB1c2VkIHRvIHJlbW92ZSB0aGUgaXRlbS4gVGhyb3dzIFpNUVBvbGxFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAdGhyb3dzIFpNUVBvbGxFeGNlcHRpb24gaWYgdGhlIG9iamVjdCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBwb2xsaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoWk1RU29ja2V0ICRlbnRyeSwgJHR5cGUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCB6bXEgJmd0Oz0gMS4wLjQpCiAgICAgKiBDbGVhcnMgYWxsIGVsZW1lbnRzIGZyb20gdGhlIHBvbGwgc2V0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3ptcXBvbGwuY2xlYXIucGhwCiAgICAgKgogICAgICogQHJldHVybiBaTVFQb2xsIFJldHVybnMgdGhlIGN1cnJlbnQgb2JqZWN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgem1xICZndDs9IDAuNS4wKQogICAgICogQ291bnQgdGhlIGl0ZW1zIGluIHRoZSBwb2xsIHNldC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96bXFwb2xsLmNvdW50LnBocAogICAgICoKICAgICAqIEByZXR1cm4gaW50IFJldHVybnMgYW4gaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGFtb3VudCBvZiBpdGVtcyBpbiB0aGUgcG9sbCBzZXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCB6bXEgJmd0Oz0gMC41LjApCiAgICAgKiBSZXR1cm5zIHRoZSBpZHMgb2YgdGhlIG9iamVjdHMgdGhhdCBoYWQgZXJyb3JzIGluIHRoZSBsYXN0IHBvbGwuCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgaWRzIGZvciB0aGUgaXRlbXMgdGhhdCBoYWQgZXJyb3JzIGluIHRoZSBsYXN0IHBvbGwuCiAgICAgKiBFbXB0eSBhcnJheSBpcyByZXR1cm5lZCBpZiB0aGVyZSB3ZXJlIG5vIGVycm9ycy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96bXFwb2xsLmdldGxhc3RlcnJvcnMucGhwCiAgICAgKgogICAgICogQHJldHVybiBpbnRbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdEVycm9ycygpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCB6bXEgJmd0Oz0gMC41LjApCiAgICAgKiBQb2xscyB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgcG9sbCBzZXQuCiAgICAgKiBUaGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlIGl0ZW1zIGFyZSByZXR1cm5lZCBpbiB0aGUgcmVhZGFibGUgYW5kIHdyaXRhYmxlIHBhcmFtZXRlcnMuCiAgICAgKiBaTVFQb2xsOjpnZXRMYXN0RXJyb3JzKCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgaWYgdGhlcmUgd2VyZSBlcnJvcnMuCiAgICAgKiBSZXR1cm5zIGFuIGludCByZXByZXNlbnRpbmcgYW1vdW50IG9mIGl0ZW1zIHdpdGggYWN0aXZpdHkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xcG9sbC5wb2xsLnBocAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAmJHJlYWRhYmxlIEFycmF5IHdoZXJlIHJlYWRhYmxlIFpNUVNvY2tldHMvUEhQIHN0cmVhbXMgYXJlIHJldHVybmVkLiBUaGUgYXJyYXkgd2lsbCBiZSBjbGVhcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG9wZXJhdGlvbi4KICAgICAqIEBwYXJhbSBhcnJheSAmJHdyaXRhYmxlIEFycmF5IHdoZXJlIHdyaXRhYmxlIFpNUVNvY2tldHMvUEhQIHN0cmVhbXMgYXJlIHJldHVybmVkLiBUaGUgYXJyYXkgd2lsbCBiZSBjbGVhcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG9wZXJhdGlvbi4KICAgICAqIEBwYXJhbSBpbnQgJHRpbWVvdXQgVGltZW91dCBmb3IgdGhlIG9wZXJhdGlvbi4gLTEgbWVhbnMgdGhhdCBwb2xsIHdhaXRzIHVudGlsIGF0IGxlYXN0IG9uZSBpdGVtIGhhcyBhY3Rpdml0eS4gUGxlYXNlIG5vdGUgdGhhdCBzdGFydGluZyBmcm9tIHZlcnNpb24gMS4wLjAgdGhlIHBvbGwgdGltZW91dCBpcyBkZWZpbmVkIGluIG1pbGxpc2Vjb25kcywgcmF0aGVyIHRoYW4gbWljcm9zZWNvbmRzLgogICAgICoKICAgICAqIEB0aHJvd3MgWk1RUG9sbEV4Y2VwdGlvbiBpZiBwb2xsaW5nIGZhaWxzCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9sbChhcnJheSAmJHJlYWRhYmxlLCBhcnJheSAmJHdyaXRhYmxlLCAkdGltZW91dCA9IC0xKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgem1xICZndDs9IDAuNS4wKQogICAgICogUmVtb3ZlIGl0ZW0gZnJvbSB0aGUgcG9sbCBzZXQuCiAgICAgKiBUaGUgaXRlbSBwYXJhbWV0ZXIgY2FuIGJlIFpNUVNvY2tldCBvYmplY3QsIGEgc3RyZWFtIHJlc291cmNlIG9yIHRoZSBpZCByZXR1cm5lZCBmcm9tIFpNUVBvbGw6OmFkZCgpIG1ldGhvZC4KICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaXRlbSB3YXMgcmVtb3ZlZCBhbmQgZmFsc2UgaWYgdGhlIG9iamVjdCB3aXRoIGdpdmVuIGlkIGRvZXMgbm90IGV4aXN0IGluIHRoZSBwb2xsIHNldC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96bXFwb2xsLnJlbW92ZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gWk1RU29ja2V0fHN0cmluZ3xtaXhlZCAkaXRlbSBUaGUgWk1RU29ja2V0IG9iamVjdCwgUEhQIHN0cmVhbSBvciBzdHJpbmcgaWQgb2YgdGhlIGl0ZW0uCiAgICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyB0cnVlIGlmIHRoZSBpdGVtIHdhcyByZW1vdmVkIGFuZCBmYWxzZSBpZiB0aGUgb2JqZWN0IHdpdGggZ2l2ZW4gaWQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHBvbGwgc2V0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKCRpdGVtKSB7fQp9Ci8qKgogKiBDbGFzcyBaTVFEZXZpY2UKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3Muem1xZGV2aWNlLnBocAogKi8KY2xhc3MgWk1RRGV2aWNlCnsKICAgIC8qKgogICAgICogKFBFQ0wgem1xICZndDs9IDEuMC40KQogICAgICogQ29uc3RydWN0IGEgbmV3IGRldmljZS4KICAgICAqICLDmE1RIGRldmljZXMgY2FuIGRvIGludGVybWVkaWF0aW9uIG9mIGFkZHJlc3Nlcywgc2VydmljZXMsIHF1ZXVlcywgb3IgYW55IG90aGVyIGFic3RyYWN0aW9uIHlvdSBjYXJlCiAgICAgKiB0byBkZWZpbmUgYWJvdmUgdGhlIG1lc3NhZ2UgYW5kIHNvY2tldCBsYXllcnMuIiAtLSB6Z3VpZGUKICAgICAqIENhbGwgdG8gdGhpcyBtZXRob2Qgd2lsbCBwcmVwYXJlIHRoZSBkZXZpY2UuIFVzdWFsbHkgZGV2aWNlcyBhcmUgdmVyeSBsb25nIHJ1bm5pbmcgcHJvY2Vzc2VzIHNvIHJ1bm5pbmcgdGhpcyBtZXRob2QgZnJvbSBpbnRlcmFjdGl2ZSBzY3JpcHQgaXMgbm90IHJlY29tbWVuZGVkLiBUaGlzIG1ldGhvZCB0aHJvdyBaTVFEZXZpY2VFeGNlcHRpb24gaWYgdGhlIGRldmljZSBjYW5ub3QgYmUgc3RhcnRlZC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96bXFkZXZpY2UuY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBaTVFTb2NrZXQgJGZyb250ZW5kIEZyb250ZW5kIHBhcmFtZXRlciBmb3IgdGhlIGRldmljZXMuIFVzdWFsbHkgd2hlcmUgdGhlcmUgbWVzc2FnZXMgYXJlIGNvbWluZy4KICAgICAqIEBwYXJhbSBaTVFTb2NrZXQgJGJhY2tlbmQgQmFja2VuZCBwYXJhbWV0ZXIgZm9yIHRoZSBkZXZpY2VzLiBVc3VhbGx5IHdoZXJlIHRoZXJlIG1lc3NhZ2VzIGdvaW5nIHRvLgogICAgICogQHBhcmFtIG51bGx8Wk1RU29ja2V0ICRsaXN0ZW5lciBMaXN0ZW5lciBzb2NrZXQsIHdoaWNoIHJlY2VpdmVzIGEgY29weSBvZiBhbGwgbWVzc2FnZXMgZ29pbmcgYm90aCBkaXJlY3Rpb25zLiBUaGUgdHlwZSBvZiB0aGlzIHNvY2tldCBzaG91bGQgYmUgU1VCLCBQVUxMIG9yIERFQUxFUi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFpNUVNvY2tldCAkZnJvbnRlbmQsIFpNUVNvY2tldCAkYmFja2VuZCwgWk1RU29ja2V0ICRsaXN0ZW5lciA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBpZGxlIGNhbGxiYWNrIHRpbWVvdXQgdmFsdWUuCiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBpZGxlIGNhbGxiYWNrIHRpbWVvdXQgdmFsdWUuCiAgICAgKiBBZGRlZCBpbiBaTVEgZXh0ZW5zaW9uIHZlcnNpb24gMS4xLjAuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xZGV2aWNlLmdldGlkbGV0aW1lb3V0LnBocAogICAgICoKICAgICAqIEByZXR1cm4gaW50IFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGlkbGUgY2FsbGJhY2sgdGltZW91dCB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElkbGVUaW1lb3V0KCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIHRpbWVyIGNhbGxiYWNrIHRpbWVvdXQgdmFsdWUuCiAgICAgKiBBZGRlZCBpbiBaTVEgZXh0ZW5zaW9uIHZlcnNpb24gMS4xLjAuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xZGV2aWNlLmdldHRpbWVydGltZW91dC5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB0aW1lciB0aW1lb3V0IHZhbHVlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZXJUaW1lb3V0KCkge30KCiAgICAvKioKICAgICAqIFJ1bnMgdGhlIGRldmljZS4KICAgICAqIENhbGwgdG8gdGhpcyBtZXRob2Qgd2lsbCBibG9jayB1bnRpbCB0aGUgZGV2aWNlIGlzIHJ1bm5pbmcuCiAgICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdGhhdCBkZXZpY2VzIGFyZSB1c2VkIGZyb20gaW50ZXJhY3RpdmUgc2NyaXB0cy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96bXFkZXZpY2UucnVuLnBocAogICAgICoKICAgICAqIEB0aHJvd3MgWk1RRGV2aWNlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBydW4oKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaWRsZSBjYWxsYmFjayBmdW5jdGlvbi4KICAgICAqIElmIGlkbGUgdGltZW91dCBpcyBkZWZpbmVkIHRoZSBpZGxlIGNhbGxiYWNrIGZ1bmN0aW9uIHNoYWxsIGJlIGNhbGxlZCBpZiB0aGUgaW50ZXJuYWwgcG9sbCBsb29wIHRpbWVzIG91dAogICAgICogd2l0aG91dCBldmVudHMuIElmIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIG9yIGEgdmFsdWUgdGhhdCBldmFsdWF0ZXMgdG8gZmFsc2UgdGhlIGRldmljZSBpcyBzdG9wcGVkLgogICAgICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNpZ25hdHVyZSBpcyBjYWxsYmFjayAobWl4ZWQgJHVzZXJfZGF0YSkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xZGV2aWNlLnNldGlkbGVjYWxsYmFjay5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNiX2Z1bmMgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdGhlIGRldmljZSBpcyBpZGxlLiBSZXR1cm5pbmcgZmFsc2Ugb3IgYSB2YWx1ZSB0aGF0IGV2YWx1YXRlcyB0byBmYWxzZSBmcm9tIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZSB0aGUgZGV2aWNlIHRvIHN0b3AuCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lb3V0IEhvdyBvZnRlbiB0byBpbnZva2UgdGhlIGlkbGUgY2FsbGJhY2sgaW4gbWlsbGlzZWNvbmRzLiBUaGUgaWRsZSBjYWxsYmFjayBpcyBpbnZva2VkIHBlcmlvZGljYWxseSB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2aXR5IG9uIHRoZSBkZXZpY2UuIFRoZSB0aW1lb3V0IHZhbHVlIGd1YXJhbnRlZXMgdGhhdCB0aGVyZSBpcyBhdCBsZWFzdCB0aGlzIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiBpbnZvY2F0aW9ucyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHVzZXJfZGF0YSBBZGRpdGlvbmFsIGRhdGEgdG8gcGFzcyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBaTVFEZXZpY2UgT24gc3VjY2VzcyB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IG9iamVjdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldElkbGVDYWxsYmFjaygkY2JfZnVuYywgJHRpbWVvdXQsICR1c2VyX2RhdGEpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBpZGxlIGNhbGxiYWNrIHRpbWVvdXQgdmFsdWUuIFRoZSBpZGxlIGNhbGxiYWNrIGlzIGludm9rZWQgcGVyaW9kaWNhbGx5IHdoZW4gdGhlIGRldmljZSBpcyBpZGxlLgogICAgICogT24gc3VjY2VzcyB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjdXJyZW50IG9iamVjdC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96bXFkZXZpY2Uuc2V0aWRsZXRpbWVvdXQucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdGltZW91dCBUaGUgaWRsZSBjYWxsYmFjayB0aW1lb3V0IHZhbHVlIGluIG1pbGxpc2Vjb25kcwogICAgICoKICAgICAqIEByZXR1cm4gWk1RRGV2aWNlIE9uIHN1Y2Nlc3MgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3VycmVudCBvYmplY3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJZGxlVGltZW91dCgkdGltZW91dCkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIHRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGUgdGltZXIgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGFmdGVyIHRpbWVvdXQgaGFzIHBhc3NlZC4KICAgICAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gaWRsZSBhbmQgdGltZXIgY2FsbGJhY2tzIGFyZSB0aGF0IGlkbGUgY2FsbGJhY2sgaXMgaW52b2tlZCBvbmx5IHdoZW4gdGhlIGRldmljZSBpcyBpZGxlLgogICAgICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNpZ25hdHVyZSBpcyBjYWxsYmFjayAobWl4ZWQgJHVzZXJfZGF0YSkuCiAgICAgKiBBZGRlZCBpbiBaTVEgZXh0ZW5zaW9uIHZlcnNpb24gMS4xLjAuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vem1xZGV2aWNlLnNldHRpbWVyY2FsbGJhY2sucGhwCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYl9mdW5jIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIHRoZSBkZXZpY2UgaXMgaWRsZS4gUmV0dXJuaW5nIGZhbHNlIG9yIGEgdmFsdWUgdGhhdCBldmFsdWF0ZXMgdG8gZmFsc2UgZnJvbSB0aGlzIGZ1bmN0aW9uIHdpbGwgY2F1c2UgdGhlIGRldmljZSB0byBzdG9wLgogICAgICogQHBhcmFtIGludCAkdGltZW91dCBIb3cgb2Z0ZW4gdG8gaW52b2tlIHRoZSBpZGxlIGNhbGxiYWNrIGluIG1pbGxpc2Vjb25kcy4gVGhlIGlkbGUgY2FsbGJhY2sgaXMgaW52b2tlZCBwZXJpb2RpY2FsbHkgd2hlbiB0aGVyZSBpcyBubyBhY3Rpdml0eSBvbiB0aGUgZGV2aWNlLiBUaGUgdGltZW91dCB2YWx1ZSBndWFyYW50ZWVzIHRoYXQgdGhlcmUgaXMgYXQgbGVhc3QgdGhpcyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIGJldHdlZW4gaW52b2NhdGlvbnMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgogICAgICogQHBhcmFtIG1peGVkICR1c2VyX2RhdGEgQWRkaXRpb25hbCBkYXRhIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gWk1RRGV2aWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lckNhbGxiYWNrKCRjYl9mdW5jLCAkdGltZW91dCwgJHVzZXJfZGF0YSkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIHRpbWVyIGNhbGxiYWNrIHRpbWVvdXQgdmFsdWUuIFRoZSB0aW1lciBjYWxsYmFjayBpcyBpbnZva2VkIHBlcmlvZGljYWxseSBpZiBpdCdzIHNldC4KICAgICAqIEFkZGVkIGluIFpNUSBleHRlbnNpb24gdmVyc2lvbiAxLjEuMC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96bXFkZXZpY2Uuc2V0dGltZXJ0aW1lb3V0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHRpbWVvdXQgVGhlIHRpbWVyIGNhbGxiYWNrIHRpbWVvdXQgdmFsdWUuCiAgICAgKgogICAgICogQHJldHVybiBaTVFEZXZpY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRpbWVyVGltZW91dCgkdGltZW91dCkge30KfQpjbGFzcyBaTVFFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KY2xhc3MgWk1RQ29udGV4dEV4Y2VwdGlvbiBleHRlbmRzIFpNUUV4Y2VwdGlvbiB7fQpjbGFzcyBaTVFTb2NrZXRFeGNlcHRpb24gZXh0ZW5kcyBaTVFFeGNlcHRpb24ge30KY2xhc3MgWk1RUG9sbEV4Y2VwdGlvbiBleHRlbmRzIFpNUUV4Y2VwdGlvbiB7fQpjbGFzcyBaTVFEZXZpY2VFeGNlcHRpb24gZXh0ZW5kcyBaTVFFeGNlcHRpb24ge30KPD9waHAKCi8qKgogKiBTdHViIGZpbGUgLSBETyBOT1QgSU5DTFVERSEgPSBGb3IgUEhQU3Rvcm0gdG8gYW5hbHlzZS4KICovCgovKioKICogQmVnaW4gY29uc3RhbnRzLgogKi8KZGVmaW5lKCdBcHBXaW5kb3cnLCAxKTsgLy8gQSBmaXhlZC1zaXplIGFwcGxpY2F0aW9uIHdpbmRvdy4KZGVmaW5lKCdNb2RhbERpYWxvZycsIDIpOyAvLyBBIG1vZGFsIGRpYWxvZyBib3ggKHJlcXVpcmVzIHRvIGJlIGNsb3NlZCBiZWZvcmUgY29udGludWluZyB0byBvdGhlciB0YXNrcykuCmRlZmluZSgnTW9kZWxlc3NEaWFsb2cnLCAzKTsgLy8gQSBtb2RlbGVzcyBkaWFsb2cgYm94IChvdGhlciB0YXNrcyBjYW4gYmUgcGVyZm9ybWVkIHdoaWxlIGl0IGlzIG9wZW4pLgpkZWZpbmUoJ05ha2VkV2luZG93JywgNCk7IC8vIEEgZml4ZWQtc2l6ZSBhcHBsaWNhdGlvbiB3aW5kb3cgd2l0aCBubyBib3JkZXIgYW5kIG5vIHRpdGxlIGJhci4KZGVmaW5lKCdQb3B1cFdpbmRvdycsIDUpOyAvLyBBIGZpeGVkLXNpemUgYXBwbGljYXRpb24gd2luZG93IHRoYXQgY2Fubm90IGJlIG1pbmltaXplZC4KZGVmaW5lKCdSZXNpemFibGVXaW5kb3cnLCA2KTsgLy8gQSBub3JtYWwgYXBwbGljYXRpb24gd2luZG93IHdpdGggYSByZXNpemFibGUgYm9yZGVyLgpkZWZpbmUoJ1Rvb2xEaWFsb2cnLCA3KTsgLy8gQSBtb2RlbGVzcyBkaWFsb2cgYm94IHdpdGggYSBzbWFsbCBjYXB0aW9uLgpkZWZpbmUoJ0FjY2VsJywgOCk7CmRlZmluZSgnQ2FsZW5kYXInLCA5KTsKZGVmaW5lKCdDaGVja0JveCcsIDEwKTsKZGVmaW5lKCdDb21ib0JveCcsIDExKTsKZGVmaW5lKCdFZGl0Qm94JywgMTIpOwpkZWZpbmUoJ0ZyYW1lJywgMTMpOwpkZWZpbmUoJ0dhdWdlJywgMTQpOwpkZWZpbmUoJ0hUTUxDb250cm9sJywgMTUpOwpkZWZpbmUoJ0h5cGVyTGluaycsIDE2KTsKZGVmaW5lKCdJbWFnZUJ1dHRvbicsIDE3KTsKZGVmaW5lKCdJbnZpc2libGVBcmVhJywgMTgpOwpkZWZpbmUoJ0xhYmVsJywgMTkpOwpkZWZpbmUoJ0xpc3RCb3gnLCAyMCk7CmRlZmluZSgnTGlzdFZpZXcnLCAyMSk7CmRlZmluZSgnTWVudScsIDIyKTsKZGVmaW5lKCdQdXNoQnV0dG9uJywgMjMpOwpkZWZpbmUoJ1JURkVkaXRCb3gnLCAyNCk7CmRlZmluZSgnUmFkaW9CdXR0b24nLCAyNSk7CmRlZmluZSgnU2Nyb2xsQmFyJywgMjYpOwpkZWZpbmUoJ1NsaWRlcicsIDI3KTsKZGVmaW5lKCdTcGlubmVyJywgMjgpOwpkZWZpbmUoJ1N0YXR1c0JhcicsIDI5KTsKZGVmaW5lKCdUYWJDb250cm9sJywgMzApOwpkZWZpbmUoJ1Rvb2xCYXInLCAzMSk7CmRlZmluZSgnVHJlZVZpZXcnLCAzMik7CmRlZmluZSgnVGltZXInLCBUaW1lcik7IC8vIERvZXNudCByZWFsbHkgZXhpc3QgLSBBZGRlZCBmb3IgSURFIGhlbHAKLy9kZWZpbmUoJ1BvcHVwTWVudScsIFBvcHVwTWVudSk7IC8vIERvZXNudCByZWFsbHkgZXhpc3QgLSBBZGRlZCBmb3IgSURFIGhlbHAKZGVmaW5lKCdXQkNfVkVSU0lPTicsICcyMDEwLjEwLjE0Jyk7CmRlZmluZSgnV0JDX0JPUkRFUicsIDgpOwpkZWZpbmUoJ1dCQ19CT1RUT00nLCA4MTkyKTsKZGVmaW5lKCdXQkNfQ0VOVEVSJywgMjA0OCk7CmRlZmluZSgnV0JDX0NIRUNLQk9YRVMnLCA2NTUzNik7CmRlZmluZSgnV0JDX0NVU1RPTURSQVcnLCAyNjg0MzU0NTYpOwpkZWZpbmUoJ1dCQ19ERUZBVUxUUE9TJywgLTIxNDc0ODM2NDgpOwpkZWZpbmUoJ1dCQ19ESVNBQkxFRCcsIDIpOwpkZWZpbmUoJ1dCQ19FTExJUFNJUycsIDEzMTA3Mik7CmRlZmluZSgnV0JDX0VOQUJMRUQnLCAwKTsKZGVmaW5lKCdXQkNfR1JPVVAnLCA1MjQyODgpOwpkZWZpbmUoJ1dCQ19JTUFHRScsIDQpOwpkZWZpbmUoJ1dCQ19JTlZJU0lCTEUnLCAxKTsKZGVmaW5lKCdXQkNfTEVGVCcsIDApOwpkZWZpbmUoJ1dCQ19MSU5FUycsIDEyOCk7CmRlZmluZSgnV0JDX01BU0tFRCcsIDI1Nik7CmRlZmluZSgnV0JDX01JRERMRScsIDApOwpkZWZpbmUoJ1dCQ19NVUxUSUxJTkUnLCAxMjgpOwpkZWZpbmUoJ1dCQ19OT1RJRlknLCAxNik7CmRlZmluZSgnV0JDX05VTUJFUicsIDEwMjQpOwpkZWZpbmUoJ1dCQ19SRUFET05MWScsIDY0KTsKZGVmaW5lKCdXQkNfUklHSFQnLCAzMik7CmRlZmluZSgnV0JDX1NJTkdMRScsIDEwNDg1NzYpOwpkZWZpbmUoJ1dCQ19TT1JUJywgMjYyMTQ0KTsKZGVmaW5lKCdXQkNfVEFTS0JBUicsIDUxMik7CmRlZmluZSgnV0JDX0FVVE9SRVBFQVQnLCA1MTIpOwpkZWZpbmUoJ1dCQ19UT1AnLCA0MDk2KTsKZGVmaW5lKCdXQkNfVklTSUJMRScsIDApOwpkZWZpbmUoJ1dCQ19UUkFOU1BBUkVOVCcsIDUzNjg3MDkxMik7CmRlZmluZSgnV0JDX0RFRkFVTFQnLCA4KTsKZGVmaW5lKCdXQkNfTVVMVElTRUxFQ1QnLCAxMDczNzQxODI0KTsKZGVmaW5lKCdXQkNfTk9IRUFERVInLCAyNjg0MzU0NTYpOwpkZWZpbmUoJ1dCQ19EQkxDTElDSycsIDY0KTsKZGVmaW5lKCdXQkNfTU9VU0VNT1ZFJywgMTI4KTsKZGVmaW5lKCdXQkNfTU9VU0VET1dOJywgMjU2KTsKZGVmaW5lKCdXQkNfTU9VU0VVUCcsIDUxMik7CmRlZmluZSgnV0JDX0tFWURPV04nLCAxMDI0KTsKZGVmaW5lKCdXQkNfS0VZVVAnLCAyMDQ4KTsKZGVmaW5lKCdXQkNfR0VURk9DVVMnLCA0MDk2KTsKZGVmaW5lKCdXQkNfUkVTSVpFJywgODE5Mik7CmRlZmluZSgnV0JDX1JFRFJBVycsIDE2Mzg0KTsKZGVmaW5lKCdXQkNfSEVBREVSU0VMJywgMzI3NjgpOwpkZWZpbmUoJ1dCQ19BTFQnLCAzMik7CmRlZmluZSgnV0JDX0NPTlRST0wnLCA4KTsKZGVmaW5lKCdXQkNfU0hJRlQnLCA0KTsKZGVmaW5lKCdXQkNfTEJVVFRPTicsIDEpOwpkZWZpbmUoJ1dCQ19NQlVUVE9OJywgMTYpOwpkZWZpbmUoJ1dCQ19SQlVUVE9OJywgMik7CmRlZmluZSgnV0JDX0JFRVAnLCAtMSk7CmRlZmluZSgnV0JDX0lORk8nLCA2NCk7CmRlZmluZSgnV0JDX09LJywgMCk7CmRlZmluZSgnV0JDX09LQ0FOQ0VMJywgMzMpOwpkZWZpbmUoJ1dCQ19RVUVTVElPTicsIDMyKTsKZGVmaW5lKCdXQkNfU1RPUCcsIDE2KTsKZGVmaW5lKCdXQkNfV0FSTklORycsIDQ4KTsKZGVmaW5lKCdXQkNfWUVTTk8nLCAzNik7CmRlZmluZSgnV0JDX1lFU05PQ0FOQ0VMJywgMzUpOwpkZWZpbmUoJ1dCQ19NQVhJTUlaRUQnLCAyKTsKZGVmaW5lKCdXQkNfTUlOSU1JWkVEJywgMSk7CmRlZmluZSgnV0JDX05PUk1BTCcsIDApOwpkZWZpbmUoJ1dCQ19NSU5TSVpFJywgMik7CmRlZmluZSgnV0JDX01BWFNJWkUnLCAzKTsKZGVmaW5lKCdXQkNfVElUTEUnLCAxKTsKCmRlZmluZSgnV0JDX1JURl9URVhUJywgMSk7CgpkZWZpbmUoJ0lEQUJPUlQnLCAzKTsKZGVmaW5lKCdJRENBTkNFTCcsIDIpOwpkZWZpbmUoJ0lEQ0xPU0UnLCA4KTsKZGVmaW5lKCdJRERFRkFVTFQnLCAwKTsKZGVmaW5lKCdJREhFTFAnLCA5KTsKZGVmaW5lKCdJRElHTk9SRScsIDUpOwpkZWZpbmUoJ0lETk8nLCA3KTsKZGVmaW5lKCdJRE9LJywgMSk7CmRlZmluZSgnSURSRVRSWScsIDQpOwpkZWZpbmUoJ0lEWUVTJywgNik7CmRlZmluZSgnRlRBX0JPTEQnLCAxKTsKZGVmaW5lKCdGVEFfSVRBTElDJywgMik7CmRlZmluZSgnRlRBX05PUk1BTCcsIDApOwpkZWZpbmUoJ0ZUQV9SRUdVTEFSJywgMCk7CmRlZmluZSgnRlRBX1NUUklLRU9VVCcsIDgpOwpkZWZpbmUoJ0ZUQV9VTkRFUkxJTkUnLCA0KTsKZGVmaW5lKCdCTEFDSycsIDApOwpkZWZpbmUoJ0JMVUUnLCAxNjcxMTY4MCk7CmRlZmluZSgnQ1lBTicsIDE2Nzc2OTYwKTsKZGVmaW5lKCdEQVJLQkxVRScsIDgzODg2MDgpOwpkZWZpbmUoJ0RBUktDWUFOJywgODQyMTM3Nik7CmRlZmluZSgnREFSS0dSQVknLCA4NDIxNTA0KTsKZGVmaW5lKCdEQVJLR1JFRU4nLCAzMjc2OCk7CmRlZmluZSgnREFSS01BR0VOVEEnLCA4Mzg4NzM2KTsKZGVmaW5lKCdEQVJLUkVEJywgMTI4KTsKZGVmaW5lKCdEQVJLWUVMTE9XJywgMzI4OTYpOwpkZWZpbmUoJ0dSRUVOJywgNjUyODApOwpkZWZpbmUoJ0xJR0hUR1JBWScsIDEyNjMyMjU2KTsKZGVmaW5lKCdNQUdFTlRBJywgMTY3MTE5MzUpOwpkZWZpbmUoJ1JFRCcsIDI1NSk7CmRlZmluZSgnV0hJVEUnLCAxNjc3NzIxNSk7CmRlZmluZSgnWUVMTE9XJywgNjU1MzUpOwpkZWZpbmUoJ05PQ09MT1InLCAtMSk7CmRlZmluZSgnYmdyQkxBQ0snLCAwKTsKZGVmaW5lKCdiZ3JCTFVFJywgMjU1KTsKZGVmaW5lKCdiZ3JDWUFOJywgNjU1MzUpOwpkZWZpbmUoJ2JnckRBUktCTFVFJywgMTI4KTsKZGVmaW5lKCdiZ3JEQVJLQ1lBTicsIDMyODk2KTsKZGVmaW5lKCdiZ3JEQVJLR1JBWScsIDg0MjE1MDQpOwpkZWZpbmUoJ2JnckRBUktHUkVFTicsIDMyNzY4KTsKZGVmaW5lKCdiZ3JEQVJLTUFHRU5UQScsIDgzODg3MzYpOwpkZWZpbmUoJ2JnckRBUktSRUQnLCA4Mzg4NjA4KTsKZGVmaW5lKCdiZ3JEQVJLWUVMTE9XJywgODQyMTM3Nik7CmRlZmluZSgnYmdyR1JFRU4nLCA2NTI4MCk7CmRlZmluZSgnYmdyTElHSFRHUkFZJywgMTI2MzIyNTYpOwpkZWZpbmUoJ2Jnck1BR0VOVEEnLCAxNjcxMTkzNSk7CmRlZmluZSgnYmdyUkVEJywgMTY3MTE2ODApOwpkZWZpbmUoJ2JncldISVRFJywgMTY3NzcyMTUpOwpkZWZpbmUoJ2JncllFTExPVycsIDE2Nzc2OTYwKTsKZGVmaW5lKCdiZ3JOT0NPTE9SJywgLTEpOwoKLy8gTmV3IEBXYWd5IGNvbnN0YW50cwpkZWZpbmUoJ1dCQ19MVl9OT05FJywgMCk7CmRlZmluZSgnV0JDX0xWX0ZPUkUnLCAxKTsKZGVmaW5lKCdXQkNfTFZfQkFDSycsIDIpOwpkZWZpbmUoJ1dCQ19MVl9ERUZBVUxUJywgMCk7CmRlZmluZSgnV0JDX0xWX0RSQVcnLCAxKTsKZGVmaW5lKCdXQkNfTFZfQ09MVU1OUycsIDIpOwoKLyoqCiAqIEJlZ2luIGZ1bmN0aW9ucy4KICovCi8qKgogKiBFbnRlcnMgdGhlIFdpbmRvd3MgbWFpbiBsb29wLgogKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGlmIHRoZSBhcHBsaWNhdGlvbiBoYXMgYSB3aW5kb3cuCiAqIFRoZSBjYWxsIHRvIHdiX21haW5fbG9vcCgpIG11c3QgYmUgdGhlIGxhc3QgZXhlY3V0YWJsZSBzdGF0ZW1lbnQgb2YgdGhlIFBIUCBzY3JpcHQ6CiAqIEFsbCBzdGF0ZW1lbnRzIGFmdGVyIGl0IHdpbGwgYmUgaWdub3JlZC4KICogVGhlIHJldHVybiB2YWx1ZSBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgb25seSBhbmQgbWF5IGJlIGlnbm9yZWQuCiAqIEByZXR1cm4gdm9pZCAtIEZvciBkZWJ1Z2dpbmcKICovCmZ1bmN0aW9uIHdiX21haW5fbG9vcCgpIHt9CgovKioKICogTG9va3MgZm9yIGEgZmlsZSBpbiB0aGUgV2luZG93cyBhbmQgU3lzdGVtIGRpcmVjdG9yaWVzLCBpbiB0aGlzIG9yZGVyLgogKiBJZiB0aGUgZmlsZSBleGlzdHMsIHJldHVybiB0aGUgY29tcGxldGUgcGF0aCB0byBpdC4KICogSWYgbm90LCByZXR1cm4gZmlsZW5hbWUuCiAqCiAqIEBwYXJhbSAkZmlsZW5hbWUKICoKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHdiX2ZpbmRfZmlsZSgkZmlsZW5hbWUpIHt9CgovKioKICogQ3JlYXRlcyBhbmQgZGlzcGxheXMgYSBtZXNzYWdlIGJveCB1bmRlciB0aGUgc3R5bGUgc3VwcGxpZWQgYW5kIHJldHVybnMgYSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGJ1dHRvbiBwcmVzc2VkLgogKgogKiBWYWx1ZSBmb3Igc3R5bGUgJiBXaGF0IGlzIGRpc3BsYXllZAogKgogKiBXQkNfT0sgKHRoZSBkZWZhdWx0KSAtIEFuIE9LIGJ1dHRvbi4KICoKICogV0JDX0lORk8gLSBBbiBpbmZvcm1hdGlvbiBpY29uIGFuZCBhbiBPSyBidXR0b24uCiAqCiAqIFdCQ19XQVJOSU5HIC0gQW4gZXhjbGFtYXRpb24gcG9pbnQgaWNvbiBhbmQgYW4gT0sgYnV0dG9uLgogKgogKiBXQkNfU1RPUCAtIEEgc3RvcCBpY29uIGFuZCBhbiBPSyBidXR0b24uCiAqCiAqIFdCQ19RVUVTVElPTiAtIEEgcXVlc3Rpb24gbWFyayBpY29uIGFuZCBhbiBPSyBidXR0b24uCiAqCiAqIFdCQ19PS0NBTkNFTCAtIEEgcXVlc3Rpb24gbWFyayBpY29uLCBhbiBPSyBidXR0b24gYW5kIGEgQ2FuY2VsIGJ1dHRvbi4KICoKICogV0JDX1lFU05PIC0gQSBxdWVzdGlvbiBtYXJrIGljb24sIGEgWWVzIGJ1dHRvbiBhbmQgYSBObyBidXR0b24uCiAqCiAqIFdCQ19ZRVNOT0NBTkNFTCAtIEEgcXVlc3Rpb24gbWFyayBpY29uLCBhIFllcyBidXR0b24sIGEgTm8gYnV0dG9uIGFuZCBhIENhbmNlbCBidXR0b24uCiAqCiAqIEBwYXJhbSAkcGFyZW50CiAqIEBwYXJhbSAkbWVzc2FnZQogKiBAcGFyYW0gbnVsbCAkdGl0bGUKICogQHBhcmFtIG51bGwgJHN0eWxlCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3Yl9tZXNzYWdlX2JveCgkcGFyZW50LCAkbWVzc2FnZSwgJHRpdGxlID0gbnVsbCwgJHN0eWxlID0gbnVsbCkge30KCi8qKgogKiBMb2FkcyBhbmQgcGxheXMgYSBzb3VuZCBmaWxlIG9yIHN5c3RlbSBzb3VuZC4KICogUGFyYW1ldGVyIHNvdXJjZSBtYXkgYmUgYSBzb3VuZCBmaWxlIG5hbWUgb3IgYSBzeXN0ZW0gc291bmQgY29uc3RhbnQuCiAqIFBhcmFtZXRlciBjb21tYW5kIG1heSBiZSB1c2VkIHVzZWQgdG8gcGxheSBhIFdBViBzb3VuZCBzeW5jaHJvbm91c2x5IG9yIGluIGEgbG9vcC4KICogQSBzeW5jaHJvbm91cyBzb3VuZCBzdG9wcyB0aGUgY3VycmVudGx5IHBsYXlpbmcgc291bmQgYW5kIHN1c3BlbmRzIHRoZSBhcHBsaWNhdGlvbiBjb250cm9sIHVudGlsIGl0IGZpbmlzaGVzLgogKiBBIE1JREkgc291bmR0cmFjayBhbHdheXMgc3RvcHMgYW55IGN1cnJlbnRseSBwbGF5aW5nIE1JREkgc291bmR0cmFjay4KICogVG8gc3RvcCBvbmUgb3IgbW9yZSBzb3VuZHMsIHVzZSBmdW5jdGlvbiB3Yl9zdG9wX3NvdW5kKCkuCiAqCiAqIFZhbHVlIG9mICRzb3VyY2U6CiAqIE1JREkgZmlsZSBuYW1lIC0gTG9hZCBhbmQgcGxheSB0aGUgc3BlY2lmaWVkIE1JREkgZmlsZS4KICoKICogV0JDX09LIC0gRGVmYXVsdCBzeXN0ZW0gc291bmQKICoKICogV0JDX0lORk8gLSBTeXN0ZW0gaW5mb3JtYXRpb24gc291bmQKICoKICogV0JDX1dBUk5JTkcgLSBXYXJuaW5nIHNvdW5kCiAqCiAqIFdCQ19TVE9QIC0gRXJyb3Igc291bmQKICoKICogV0JDX1FVRVNUSU9OIC0gUXVlc3Rpb24gc291bmQKICoKICogV0JDX0JFRVAgLSBEZWZhdWx0IGJlZXAgKHZpYSB0aGUgY29tcHV0ZXIgc3BlYWtlcikKICoKICogVmFsdWUgb2YgJGNvbW1hbmQ6CiAqIG51bGwgb3IgZW1wdHkgLSBMb2FkIGFuZCBwbGF5IHRoZSBzcGVjaWZpZWQgV0FWIHNvdW5kIGZpbGUuCiAqCiAqICdzeW5jJyAtIExvYWQgYW5kIHBsYXkgdGhlIHNwZWNpZmllZCBXQVYgc291bmQgZmlsZSBzeW5jaHJvbm91c2x5LgogKgogKiAnbG9vcCcgLSBMb2FkIGFuZCBsb29wIHRoZSBzcGVjaWZpZWQgV0FWIHNvdW5kIGZpbGUuCiAqCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG90aGVyd2lzZS4KICoKICogQHBhcmFtICRzb3VyY2UKICogQHBhcmFtIG51bGwgJGNvbW1hbmQKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB3Yl9wbGF5X3NvdW5kKCRzb3VyY2UsICRjb21tYW5kID0gbnVsbCkge30KCi8qKgogKiBTdG9wcyBvbmUgb3IgbW9yZSBzb3VuZHMgdGhhdCB3ZXJlIHN0YXJ0ZWQgd2l0aCB3Yl9wbGF5X3NvdW5kKCkuCiAqCiAqIG51bGwsIGVtcHR5IG9yICdhbGwnIC0gU3RvcCBhbGwgc291bmRzLgogKgogKiAnd2F2JyBvciAnd2F2ZScgLSBTdG9wIGFsbCBXQVYgc291bmRzLgogKgogKiAnbWlkJyBvciAnbWlkaScgLSBTdG9wIGFsbCBNSURJIHNvdW5kcy4KICoKICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb3RoZXJ3aXNlLgogKgogKiBAcGFyYW0gbnVsbCAkY29tbWFuZAogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHdiX3N0b3Bfc291bmQoJGNvbW1hbmQgPSBudWxsKSB7fQoKLyoqCiAqIE9wZW5zIG9yIGV4ZWN1dGVzIGEgY29tbWFuZC4gVGhlIHN0cmluZyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6LgogKgogKiBBIFdpbkJpbmRlciBzY3JpcHQuCiAqIEFuIGV4ZWN1dGFibGUgZmlsZS4KICogQSBub24tZXhlY3V0YWJsZSBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhbiBhcHBsaWNhdGlvbi4KICogQSBmb2xkZXIgbmFtZS4gUGFzc2luZyBhIG51bGwgb3IgZW1wdHkgc3RyaW5nIG9wZW5zIHRoZSBjdXJyZW50IGZvbGRlci4KICogQSBoZWxwIGZpbGUgb3IgaGVscCBmaWxlIHRvcGljLgogKiBBbiBVUkwsIGUtbWFpbCwgbmV3c2dyb3VwLCBvciBhbm90aGVyIEludGVybmV0IGNsaWVudCBhcHBsaWNhdGlvbi4KICoKICogT3B0aW9uYWwgcGFyYW1ldGVycyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kIG9yIGFwcGxpY2F0aW9uIHRocm91Z2ggdGhlIHZhcmlhYmxlIHBhcmFtLgogKgogKiBAcGFyYW0gJGNvbW1hbmQKICogQHBhcmFtIG51bGwgJHBhcmFtCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2JfZXhlYygkY29tbWFuZCwgJHBhcmFtID0gbnVsbCkge30KCi8qKgogKiBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHN5c3RlbSBhbmQgYXBwbGljYXRpb24sIGFjY29yZGluZyB0byB0aGUgc3RyaW5nIGluZm8uCiAqCiAqIFRoZSBwYXJhbWV0ZXIgaW5mbyBpcyBub3QgY2FzZS1zZW5zaXRpdmUuCiAqCiAqICJhcHBtZW1vcnkiICAgIFRoZSB0b3RhbCBtZW1vcnkgdXNlZCBieSB0aGUgYXBwbGljYXRpb27CuQogKiAiYmFja2dyb3VuZGNvbG9yIiAgICBUaGUgbWFpbiBmYWNlIGNvbG9yIGZvciBXaW5kb3dzIGRpYWxvZyBib3hlcyBhbmQgY29udHJvbHMKICogImNvbG9yZGVwdGgiICAgIFRoZSBjdXJyZW50IGNvbG9yIGRlcHRoIGluIGJpdHMgcGVyIHBpeGVsCiAqICJjb21tYW5kbGluZSIgICAgVGhlIG9yaWdpbmFsIFdpbmRvd3MgY29tbWFuZCBsaW5lIGluY2x1ZGluZyB0aGUgZXhlY3V0YWJsZSBmaWxlCiAqICJjb21wdXRlcm5hbWUiICAgIFRoZSBuYW1lIG9mIHRoZSBjb21wdXRlciBpbnNpZGUgdGhlwqBuZXR3b3JrCiAqICJjb25zb2xlbW9kZSIgICAgMSBpbmRpY2F0ZXMgdGhhdCBjb25zb2xlIG1vZGXCoChET1MgYm94KSBpcyBhY3RpdmUsIDAgb3RoZXJ3aXNlCiAqICJkaXNrZHJpdmVzIiAgICBUaGUgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGRpc2sgZHJpdmVzCiAqICJleGVwYXRoIiAgICBUaGUgcGF0aCB0byB0aGUgbWFpbiBleGVjdXRhYmxlIChQSFAuRVhFKQogKiAiZm9udHBhdGgiICAgIFRoZSBjdXJyZW50IGZvbnQgcGF0aAogKiAiZnJlZW1lbW9yeSIgICAgVGhlIGF2YWlsYWJsZSBwaHlzaWNhbCBtZW1vcnkKICogImdkaW9iamVjdHMiICAgIFRoZSBudW1iZXIgb2YgY3VycmVudGx5IGFsbG9jYXRlZCBHREkgaGFuZGxlcwogKiAiaW5zdGFuY2UiICAgIFRoZSBpbnN0YW5jZSBpZGVudGlmaWVyIG9mIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uCiAqICJvc251bWJlciIgICAgVGhlIG51bWVyaWMgT1MgdmVyc2lvbiBudW1iZXIKICogIm9zcGF0aCIgICAgVGhlIGN1cnJlbnQgT1MgcGF0aAogKiAib3N2ZXJzaW9uIiAgICBUaGUgY29tcGxldGUgT1MgdmVyc2lvbiBuYW1lCiAqICJwZ21wYXRoIiAgICBUaGUgZGVmYXVsdCBPUyBhcHBsaWNhdGlvbiBwYXRoCiAqICJzY3JlZW5hcmVhIiAgICBUaGUgdG90YWwgYXJlYSAoeCwgeSwgd2lkdGgsIGhlaWdodCkgb2YgdGhlIHNjcmVlbiwgaW4gcGl4ZWxzCiAqICJzeXN0ZW1mb250IiAgICBUaGUgY29tbW9uIChkZWZhdWx0KSBzeXN0ZW0gZm9udCBmb3IgZGlhbG9nIGJveGVzCiAqICJzeXN0ZW1wYXRoIiAgICBUaGUgT1Mgc3lzdGVtIHBhdGgKICogInRlbXBwYXRoIiAgICBUaGUgcGF0aCB1c2VkIGJ5IHRoZSBPUyB0byBob2xkIHRlbXBvcmFyeSBmaWxlcwogKiAidG90YWxtZW1vcnkiICAgIFRoZSB0b3RhbCBwaHlzaWNhbCBtZW1vcnkgaW5zdGFsbGVkCiAqICJ1c2VybmFtZSIgICAgVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBsb2dnZWQgdXNlcgogKiAidXNlcm9iamVjdHMiICAgIFRoZSBudW1iZXIgb2YgY3VycmVudGx5IGFsbG9jYXRlZCBVU0VSIGhhbmRsZXMKICogIndvcmthcmVhIiAgICBUaGUgdmFsaWQgYXJlYSAoeCwgeSwgd2lkdGgsIGhlaWdodCkgb2YgdGhlIHNjcmVlbiwgaW4gcGl4ZWxzCiAqCiAqIEBwYXJhbSAkaW5mbwogKgogKiBAcmV0dXJuIG1peGVkCiAqLwpmdW5jdGlvbiB3Yl9nZXRfc3lzdGVtX2luZm8oJGluZm8pIHt9CgovKioKICogUmVhZHMgYSBzdHJpbmcgb3IgaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGl0ZW0gcmVmZXJlbmNlZCBieSBrZXksIHN1YmtleSBhbmQgZW50cnkuCiAqIFRoZSBzdWJrZXkgbWF5IGNvbnRhaW4gZm9yd2FyZCBvciByZXZlcnNlIHNsYXNoZXMuCiAqIElmIGVudHJ5IGlzIGFuIGVtcHR5IHN0cmluZywgYSBOVUxMIHZhbHVlIG9yIGlzIG5vdCBzdXBwbGllZCwgdGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHN1YmtleS4KICoKICogVmFsdWVzIGFyZSBhbHdheXMgcmV0dXJuZWQgYXMgc3RyaW5ncy4KICogSWYgdGhlIHJlcXVlc3RlZCBlbnRyeSBpcyBhbiBlbXB0eSBzdHJpbmcsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KICogSWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcmVnaXN0cnksIHRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCiAqCiAqIEBwYXJhbSAka2V5CiAqIEBwYXJhbSAkc3Via2V5CiAqIEBwYXJhbSBudWxsICRlbnRyeQogKgogKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAqLwpmdW5jdGlvbiB3Yl9nZXRfcmVnaXN0cnlfa2V5KCRrZXksICRzdWJrZXksICRlbnRyeSA9IG51bGwpIHt9CgovKioKICogUmVhZHMgYSBzdHJpbmcgb3IgaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGl0ZW0gcmVmZXJlbmNlZCBieSBrZXksIHN1YmtleSBhbmQgZW50cnkuCiAqIFRoZSBzdWJrZXkgbWF5IGNvbnRhaW4gZm9yd2FyZCBvciByZXZlcnNlIHNsYXNoZXMuCiAqIElmIGVudHJ5IGlzIGFuIGVtcHR5IHN0cmluZywgYSBOVUxMIHZhbHVlIG9yIGlzIG5vdCBzdXBwbGllZCwgdGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHN1YmtleS4KICoKICogVmFsdWVzIGFyZSBhbHdheXMgcmV0dXJuZWQgYXMgc3RyaW5ncy4KICogSWYgdGhlIHJlcXVlc3RlZCBlbnRyeSBpcyBhbiBlbXB0eSBzdHJpbmcsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KICogSWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcmVnaXN0cnksIHRoZSBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCiAqCiAqIEBwYXJhbSAka2V5CiAqIEBwYXJhbSAkc3Via2V5CiAqIEBwYXJhbSBudWxsICRlbnRyeQogKiBAcGFyYW0gbnVsbCAkdmFsdWUKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB3Yl9zZXRfcmVnaXN0cnlfa2V5KCRrZXksICRzdWJrZXksICRlbnRyeSA9IG51bGwsICR2YWx1ZSA9IG51bGwpIHt9CgovKioKICogQ3JlYXRlcyBhIHRpbWVyIGluIHRoZSBzcGVjaWZpZWQgd2luZG93LgogKiBUaGUgdGltZXIgbXVzdCBiZSBnaXZlbiBhbiBpbnRlZ2VyIGlkIHRoYXQgbXVzdCBiZSB1bmlxdWUgdG8gYWxsIHRpbWVycyBhbmQgY29udHJvbHMuCiAqIGludGVydmFsIHNwZWNpZmllcyB0aGUgdGltZS1vdXQgdmFsdWUgaW4gbWlsbGlzZWNvbmRzLgogKiBUaW1lciBldmVudHMgYXJlIHBhc3NlZCB0byBhbmQgcHJvY2Vzc2VkIGJ5IHRoZSB3aW5kb3cgY2FsbGJhY2sgZnVuY3Rpb24uCiAqIEEgY2FsbCB0byB3Yl9kZXN0cm95X3RpbWVyKCkgZGVzdHJveXMgdGhlIHRpbWVyLgogKgogKiBMb3cgcmVzb2x1dGlvbiBhbmQgaGlnaCByZXNvbHV0aW9uIHRpbWVycwogKgogKiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGJvdGggY29udmVudGlvbmFsIChsb3ctcmVzb2x1dGlvbikgYW5kIG11bHRpbWVkaWEgKGhpZ2gtcmVzb2x1dGlvbikgdGltZXJzLgogKiBVc2UgYSBub24tbmVnYXRpdmUgaWQgdG8gc3BlY2lmeSBhIGxvdy1yZXNvbHV0aW9uIHRpbWVyIG9yIGEgbmVnYXRpdmUgaWQgdG8gc3BlY2lmeSBhIGhpZ2gtcmVzb2x1dGlvbiB0aW1lci4KICogSGktcmVzIHRpbWVycyBoYXZlIGEgMTA6MSBpbmNyZWFzZSBpbiBzcGVlZCAocmVzb2x1dGlvbiBjYW4gZ28gZG93biB0byAxIG1zIG9wcG9zZWQgdG8gMTAgbXMgb2YgYSBjb252ZW50aW9uYWwgdGltZXIpIGFuZCBtdWNoIGhpZ2hlciBwcmVjaXNpb24uCiAqCiAqIE5PVEU6IE9ubHkgb25lIGhpZ2gtcmVzb2x1dGlvbiB0aW1lciBpcyBhbGxvd2VkIHBlciBhcHBsaWNhdGlvbiBhbmQgaXQgbXVzdCBiZSBvbiB0aGUgbWFpbiB3aW5kb3cuCiAqCiAqIEBwYXJhbSAkd2luZG93CiAqIEBwYXJhbSAkaWQKICogQHBhcmFtICRpbnRlcnZhbAogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2JfY3JlYXRlX3RpbWVyKCR3aW5kb3csICRpZCwgJGludGVydmFsKSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGRlbGF5IGFuZCB2ZXJpZmllcyBpZiBtb3VzZSBidXR0b25zIGFyZSBwcmVzc2VkIGFuZC9vciB0aGUga2V5Ym9hcmQgc3RhdGUuCiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBsZW5ndGh5IG9wZXJhdGlvbnMuCiAqIEluIHRoaXMgY2FzZSwgd2Jfd2FpdCBndWFyYW50ZWVzIHRoYXQgdGhlIG1lc3NhZ2UgY29udHJvbCBpcyBzZW50IGJhY2sgdG8gdGhlIG1haW4gbG9vcCwgYXZvaWRpbmcgYW4gdW5wbGVhc2FudCAiZnJlZXppbmciIGVmZmVjdC4KICogVXNpbmcgdGhpcyBmdW5jdGlvbiBhbHNvIHByb3ZpZGVzIGFuIHdheSB0byBlYXNpbHkgZXhpdCBsZW5ndGh5IG9wZXJhdGlvbnMgYnkgY29uc3RhbnRseSBtb25pdG9yaW5nIHRoZSBrZXlib2FyZCBhbmQgbW91c2UuCiAqCiAqIFBhcmFtZXRlcnM6CiAqIFdCQ19NT1VTRURPV04KICogV0JDX01PVVNFVVAKICogV0JDX0tFWURPV04KICogV0JDX0tFWVVQCiAqCiAqIEBwYXJhbSBudWxsICR3aW5kb3cKICogQHBhcmFtIG51bGwgJHBhdXNlCiAqIEBwYXJhbSBudWxsICRmbGFncwogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2Jfd2FpdCgkd2luZG93ID0gbnVsbCwgJHBhdXNlID0gbnVsbCwgJGZsYWdzID0gbnVsbCkge30KCi8qKgogKiBEZXN0cm95cyBhIHRpbWVyIGNyZWF0ZWQgd2l0aCB3Yl9jcmVhdGVfdGltZXIoKS4KICogVGhlIHdpbmRvdyBhbmQgdGhlIGlkIHBhcmFtZXRlcnMgbXVzdCBiZSB0aGUgc2FtZSB0aGF0IHdlcmUgcGFzc2VkIHRvIHdiX2NyZWF0ZV90aW1lcigpIHdoZW4gdGhlIHRpbWVyIHdhcyBjcmVhdGVkLgogKgogKiBAcGFyYW0gJHdpbmRvdwogKiBAcGFyYW0gJGlkCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2JfZGVzdHJveV90aW1lcigkd2luZG93LCAkaWQpIHt9CgovKioKICogTG9hZHMgdGhlIGltYWdlLCBpY29uIG9yIGN1cnNvciBmaWxlIGZpbGVuYW1lIGZyb20gZGlzayBhbmQgcmV0dXJucyBhIGhhbmRsZSB0byBpdC4KICogSWYgZmlsZW5hbWUgaXMgYW4gaWNvbiBsaWJyYXJ5LCBpbmRleCBzcGVjaWZpZXMgdGhlIGluZGV4IG9mIHRoZSBpbWFnZSBpbnNpZGUgdGhlIGZpbGUuIERlZmF1bHQgaW5kZXggaXMgMC4KICoKICogSWYgc291cmNlIGlzIGFuIGljb24gb3IgYSBjdXJzb3IsIGlmIHBhcmFtIGlzIDAgKHRoZSBkZWZhdWx0KSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsYXJnZSBpY29uIG9yIGN1cnNvcgogKiBpZiBwYXJhbSBpcyAxLCBpdCByZXR1cm5zIGEgc21hbGwgaWNvbiBvciBjdXJzb3I7IGlmIHBhcmFtIGlzIC0xLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZGVmYXVsdCBpY29uIG9yIGN1cnNvci4KICoKICogTk9URTogVGhlIHJlc3VsdGluZyBpbWFnZSBtdXN0IGJlIGRlc3Ryb3llZCBieSBhIGNhbGwgdG8gd2JfZGVzdHJveV9pbWFnZSgpLgogKgogKiBAcGFyYW0gJGZpbGVuYW1lCiAqIEBwYXJhbSBudWxsICRpbmRleAogKiBAcGFyYW0gbnVsbCAkcGFyYW0KICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdiX2xvYWRfaW1hZ2UoJGZpbGVuYW1lLCAkaW5kZXggPSBudWxsLCAkcGFyYW0gPSBudWxsKSB7fQoKLyoqCiAqIFNhdmVzIHRoZSBiaXRtYXAgaW1hZ2UgdG8gZmlsZSBmaWxlbmFtZS4KICogVGhlIGltYWdlIGhhbmRsZSBtdXN0IGhhdmUgYmVlbiBvYnRhaW5lZCB3aXRoIHdiX2NyZWF0ZV9pbWFnZSgpLCB3Yl9jcmVhdGVfbWFzaygpIG9yIHdiX2xvYWRfaW1hZ2UoKS4KICoKICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gJGltYWdlCiAqIEBwYXJhbSAkZmlsZW5hbWUKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB3Yl9zYXZlX2ltYWdlKCRpbWFnZSwgJGZpbGVuYW1lKSB7fQoKLyoqCiAqIENyZWF0ZXMgYSB0cnVlLWNvbG9yIGltYWdlIG1lYXN1cmluZyB3aWR0aCBieSBoZWlnaHQgcGl4ZWxzLgogKgogKiBOT1RFOiBUaGUgcmVzdWx0aW5nIGltYWdlIG11c3QgYmUgZGVzdHJveWVkIGJ5IGEgY2FsbCB0byB3Yl9kZXN0cm95X2ltYWdlKCkuCiAqCiAqIEBwYXJhbSBpbnQgICR3aWR0aAogKiBAcGFyYW0gaW50ICAkaGVpZ2h0CiAqIEBwYXJhbSBudWxsICRkaWJibWkKICogQHBhcmFtIG51bGwgJGRpYmJpdHMKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdiX2NyZWF0ZV9pbWFnZSgkd2lkdGggPSAwLCAkaGVpZ2h0ID0gMCwgJGRpYmJtaSA9IG51bGwsICRkaWJiaXRzID0gbnVsbCkge30KCi8qKgogKiBDcmVhdGVzIGEgdHJhbnNwYXJlbmN5IG1hc2sgb2YgYSB0cnVlLWNvbG9yIGJpdG1hcC4KICogVGhlIG1hc2sgcmV0dXJuZWQgaXMgYWxzbyBhIGJpdG1hcC4gVGhlIHRyYW5zcGFyZW50IGNvbG9yIGlzIHNldCBieSB0cmFuc3BhcmVudF9jb2xvci4KICoKICogTk9URTogVGhlIHJlc3VsdGluZyBpbWFnZSBtdXN0IGJlIGRlc3Ryb3llZCBieSBhIGNhbGwgdG8gd2JfZGVzdHJveV9pbWFnZSgpLgogKgogKiBAcGFyYW0gJGJpdG1hcAogKiBAcGFyYW0gJHRyYW5zcGFyZW50X2NvbG9yCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3Yl9jcmVhdGVfbWFzaygkYml0bWFwLCAkdHJhbnNwYXJlbnRfY29sb3IpIHt9CgovKioKICogRGVzdHJveXMgYW4gaW1hZ2UgY3JlYXRlZCBieSB3Yl9jcmVhdGVfaW1hZ2UoKSwgd2JfY3JlYXRlX21hc2soKSBvciB3Yl9sb2FkX2ltYWdlKCkuCiAqCiAqIEBwYXJhbSAkaW1hZ2UKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB3Yl9kZXN0cm95X2ltYWdlKCRpbWFnZSkge30KCi8qKgogKiBSZXR1cm5zIGEgc3RyaW5nIG9mIGRhdGEgY29udGFpbmluZyBhIGNvcHkgb2YgdGhlIGludGVybmFsIHRydWUtY29sb3IgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGltYWdlLgogKiBJZiBjb21wcmVzczR0bzMgaXMgVFJVRSwgZXZlcnkgZm91cnRoIGJ5dGUgb2YgdGhlIG9yaWdpbmFsIDMyLWJpdCBkYXRhIGlzIHNraXBwZWQsIHlpZWxkaW5nIGEgUkdCICgyNC1iaXQpIGRhdGEgc3RyaW5nLgogKiBUaGlzIGlzIHJlcXVpcmVkIGZvciBpbWFnZSBsaWJyYXJpZXMgc3VjaCBhcyBGcmVlSW1hZ2UuCiAqCiAqIEBwYXJhbSAkaW1hZ2UKICogQHBhcmFtICRjb21wcmVzczR0bzMKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdiX2dldF9pbWFnZV9kYXRhKCRpbWFnZSwgJGNvbXByZXNzNHRvMykge30KCi8qKgogKiBSZXR1cm5zIHRoZSBSR0IgY29sb3IgdmFsdWUgb2YgdGhlIHBpeGVsIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy4gVGhlIGZpcnN0IHBhcmFtZXRlciwgc291cmNlLCBtYXkgYmUgYSBXaW5CaW5kZXIgb2JqZWN0LCBhIHdpbmRvdyBoYW5kbGUsIGEgZHJhd2luZyBzdXJmYWNlIG9yIGEgYml0bWFwLgogKgogKiBSZXR1cm5zIE5PQ09MT1IgaWYgYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gJHNvdXJjZQogKiBAcGFyYW0gJHhwb3MKICogQHBhcmFtICR5cG9zCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3Yl9nZXRfcGl4ZWwoJHNvdXJjZSwgJHhwb3MsICR5cG9zKSB7fQoKLyoqCiAqIERyYXdzIGEgcG9pbnQgb2YgY29sb3IsIHNldHRpbmcgdGhlIFJHQiBjb2xvciB2YWx1ZSBvZiB0aGUgcGl4ZWwgdGhhdCBleGlzdHMgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLgogKiBUaGUgZmlyc3QgcGFyYW1ldGVyLCBzb3VyY2UsIG1heSBiZSBhIFdpbkJpbmRlciBvYmplY3QsIGEgd2luZG93IGhhbmRsZSwgYSBkcmF3aW5nIHN1cmZhY2Ugb3IgYSBiaXRtYXAuCiAqCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIGlmIGFuIGVycm9yIG9jY3Vycy4KICoKICogQHBhcmFtICRzb3VyY2UKICogQHBhcmFtICR4cG9zCiAqIEBwYXJhbSAkeXBvcwogKiBAcGFyYW0gJGNvbG9yCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2JfZHJhd19wb2ludCgkc291cmNlLCAkeHBvcywgJHlwb3MsICRjb2xvcikge30KCi8qKgogKiBEcmF3cyBhIHN0cmFpZ2h0IGxpbmUuIFRoZSBmaXJzdCBwYXJhbWV0ZXIsIHRhcmdldCwgbWF5IGJlIGEgV2luQmluZGVyIG9iamVjdCwgYSB3aW5kb3cgaGFuZGxlLCBhIGRyYXdpbmcgc3VyZmFjZSBvciBhIGJpdG1hcC4KICoKICogVGhlIHN0YXJ0IGFuZCBlbmQgcG9pbnRzIG9mIHRoZSBsaW5lIGFyZSAoeDAsIHkwKSBhbmQgKHgxLCB5MSkgcmVzcGVjdGl2ZWx5LCBpbiBwaXhlbHMuCiAqIGNvbG9yIGlzIGEgUkdCIGNvbG9yIHZhbHVlIGFuZCBsaW5ld2lkdGggaXMgdGhlIHdpZHRoIG9mIHRoZSBsaW5lLCBpbiBwaXhlbHMuCiAqIEEgbGluZXdpZHRoIG9mIHplcm8gc2V0cyB0aGUgd2lkdGggdG8gMSBwaXhlbC4gUGFyYW1ldGVyIGxpbmVzdHlsZSBhY2NlcHRzIHRoZSB2YWx1ZXMgc3BlY2lmaWVkIGluIHRoZSB0YWJsZSBiZWxvdy4KICoKICogMCAgICBTb2xpZCBsaW5lICh0aGUgZGVmYXVsdCBzdHlsZSkKICogMSAgICBEb3R0ZWQgbGluZQogKiAyLTcgICAgRGFzaGVkIGxpbmVzIHdpdGggaW5jcmVhc2luZyBsZW5ndGhzCiAqIDggICAgTGluZSB3aXRoIGFsdGVybmF0aW5nIGRhc2hlcyBhbmQgZG90cwogKiA5ICAgIExpbmUgd2l0aCBhbHRlcm5hdGluZyBkYXNoZXMgYW5kIGRvdWJsZSBkb3RzCiAqCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIGlmIGFuIGVycm9yIG9jY3Vycy4KICoKICogQHBhcmFtICR0YXJnZXQKICogQHBhcmFtICR4MAogKiBAcGFyYW0gJHkwCiAqIEBwYXJhbSAkeDEKICogQHBhcmFtICR5MQogKiBAcGFyYW0gJGNvbG9yCiAqIEBwYXJhbSBudWxsICRsaW5ld2lkdGgKICogQHBhcmFtIG51bGwgJGxpbmVzdHlsZQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHdiX2RyYXdfbGluZSgkdGFyZ2V0LCAkeDAsICR5MCwgJHgxLCAkeTEsICRjb2xvciwgJGxpbmV3aWR0aCA9IG51bGwsICRsaW5lc3R5bGUgPSBudWxsKSB7fQoKLyoqCiAqIERyYXdzIGEgZmlsbGVkIG9yIGhvbGxvdyByZWN0YW5nbGUuCiAqIFRoZSBmaXJzdCBwYXJhbWV0ZXIsIHRhcmdldCwgbWF5IGJlIGEgV2luQmluZGVyIG9iamVjdCwgYSB3aW5kb3cgaGFuZGxlLCBhIGRyYXdpbmcgc3VyZmFjZSBvciBhIGJpdG1hcC4KICoKICogeHBvcyBhbmQgeXBvcyBhcmUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLCBpbiBwaXhlbHMuCiAqIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHRoZSBkaW1lbnNpb25zIG9mIHRoZSByZWN0YW5nbGUuIGNvbG9yIGlzIGEgUkdCIGNvbG9yIHZhbHVlLgogKiBTZXQgZmlsbGVkIHRvIEZBTFNFIHRvIGRyYXcgYSBib3JkZXIuCiAqIEEgbGluZXdpZHRoIG9mIHplcm8gc2V0cyB0aGUgd2lkdGggdG8gMSBwaXhlbC4KICoKICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gJHRhcmdldAogKiBAcGFyYW0gJHhwb3MKICogQHBhcmFtICR5cG9zCiAqIEBwYXJhbSAkd2lkdGgKICogQHBhcmFtICRoZWlnaHQKICogQHBhcmFtICRjb2xvcgogKiBAcGFyYW0gbnVsbCAkZmlsbGVkCiAqIEBwYXJhbSBudWxsICRsaW5ld2lkdGgKICogQHBhcmFtIG51bGwgJGxpbmVzdHlsZQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHdiX2RyYXdfcmVjdCgkdGFyZ2V0LCAkeHBvcywgJHlwb3MsICR3aWR0aCwgJGhlaWdodCwgJGNvbG9yLCAkZmlsbGVkID0gbnVsbCwgJGxpbmV3aWR0aCA9IG51bGwsICRsaW5lc3R5bGUgPSBudWxsKSB7fQoKLyoqCiAqIERyYXdzIGEgZmlsbGVkIG9yIGhvbGxvdyByZWN0YW5nbGUuCiAqIFRoZSBmaXJzdCBwYXJhbWV0ZXIsIHRhcmdldCwgbWF5IGJlIGEgV2luQmluZGVyIG9iamVjdCwgYSB3aW5kb3cgaGFuZGxlLCBhIGRyYXdpbmcgc3VyZmFjZSBvciBhIGJpdG1hcC4KICoKICogeHBvcyBhbmQgeXBvcyBhcmUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLCBpbiBwaXhlbHMuCiAqIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHRoZSBkaW1lbnNpb25zIG9mIHRoZSByZWN0YW5nbGUuIGNvbG9yIGlzIGEgUkdCIGNvbG9yIHZhbHVlLgogKiBTZXQgZmlsbGVkIHRvIEZBTFNFIHRvIGRyYXcgYSBib3JkZXIuIEluIHRoaXMgY2FzZSwgbGluZXdpZHRoIHNldHMgdGhlIHdpZHRoIG9mIHRoZSBib3JkZXIsIGluIHBpeGVscy4KICogQSBsaW5ld2lkdGggb2YgemVybyBzZXRzIHRoZSB3aWR0aCB0byAxIHBpeGVsLgogKgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBpZiBhbiBlcnJvciBvY2N1cnMuCiAqCiAqIEBwYXJhbSAkdGFyZ2V0CiAqIEBwYXJhbSAkeHBvcwogKiBAcGFyYW0gJHlwb3MKICogQHBhcmFtICR3aWR0aAogKiBAcGFyYW0gJGhlaWdodAogKiBAcGFyYW0gJGNvbG9yCiAqIEBwYXJhbSBudWxsICRmaWxsZWQKICogQHBhcmFtIG51bGwgJGxpbmV3aWR0aAogKiBAcGFyYW0gbnVsbCAkbGluZXN0eWxlCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2JfZHJhd19lbGxpcHNlKCR0YXJnZXQsICR4cG9zLCAkeXBvcywgJHdpZHRoLCAkaGVpZ2h0LCAkY29sb3IsICRmaWxsZWQgPSBudWxsLCAkbGluZXdpZHRoID0gbnVsbCwgJGxpbmVzdHlsZSA9IG51bGwpIHt9CgovKioKICogRHJhd3MgYSBzdHJpbmcuIFRoZSBmaXJzdCBwYXJhbWV0ZXIsIHRhcmdldCwgbWF5IGJlIGEgV2luQmluZGVyIG9iamVjdCwgYSB3aW5kb3cgaGFuZGxlLCBhIGRyYXdpbmcgc3VyZmFjZSBvciBhIGJpdG1hcC4KICoKICogVGhlIHRleHQgcGFyYW1ldGVyIGlzIHRoZSBzdHJpbmcgdG8gYmUgZHJhd24uCiAqIHhwb3MgYW5kIHlwb3MgYXJlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIsIGluIHBpeGVscy4KICogd2lkdGggYW5kIGhlaWdodCBvcHRpb25hbGx5IHByb3ZpZGUgYSBsaW1pdCB0byB0aGUgZHJhd2luZyBhcmVhLgogKiBJZiB0aGV5IGFyZSBub3QgcHJvdmlkZWQgb3IgemVybywgdGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIGRyYXdpbmcgYXJlYS4KICogVG8gdXNlIGEgc3BlY2lmaWMgZm9udCwgYW4gaWRlbnRpZmllciBjcmVhdGVkIHdpdGggd2JfY3JlYXRlX2ZvbnQoKSBtdXN0IGJlIHVzZWQgYXMgdGhlIGZvbnQgYXJndW1lbnQuCiAqIElmIGZvbnQgaXMgTlVMTCwgbmVnYXRpdmUgb3Igbm90IGdpdmVuLCB0aGUgbW9zdCByZWNlbnRseSBjcmVhdGVkIGZvbnQgaXMgdXNlZC4KICoKICogTk9URTogVG8gdXNlIHRoZSBzaW1wbGlmaWVkIGNhbGwgc3ludGF4IChubyB3aWR0aCwgbm8gaGVpZ2h0KSB5b3UgbXVzdCBzdXBwbHkgNCBvciA1IHBhcmFtZXRlcnMuCiAqCiAqIEBwYXJhbSAkdGFyZ2V0CiAqIEBwYXJhbSAkdGV4dAogKiBAcGFyYW0gJHhwb3MKICogQHBhcmFtICR5cG9zCiAqIEBwYXJhbSBudWxsICR3aWR0aAogKiBAcGFyYW0gbnVsbCAkaGVpZ2h0CiAqIEBwYXJhbSBudWxsICRmb250CiAqIEBwYXJhbSBudWxsICRmbGFncwogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2JfZHJhd190ZXh0KCR0YXJnZXQsICR0ZXh0LCAkeHBvcywgJHlwb3MsICR3aWR0aCA9IG51bGwsICRoZWlnaHQgPSBudWxsLCAkZm9udCA9IG51bGwsICRmbGFncyA9IG51bGwpIHt9CgovKioKICogRHJhd3MgYSBiaXRtYXAuIFRoZSBmaXJzdCBwYXJhbWV0ZXIsIHRhcmdldCwgbWF5IGJlIGEgV2luQmluZGVyIG9iamVjdCwgYSB3aW5kb3cgaGFuZGxlLCBhIGRyYXdpbmcgc3VyZmFjZSBvciBhbm90aGVyIGJpdG1hcC4KICoKICogeHBvcyBhbmQgeXBvcyBhcmUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciwgaW4gcGl4ZWxzLgogKiBUaGVzZSBwYXJhbWV0ZXJzIGRlZmF1bHQgdG8gemVyby4gd2lkdGggYW5kIGhlaWdodCBhcmUgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIHJlY3RhbmdsZS4KICogVGhlc2UgcGFyYW1ldGVycyBhbHNvIGRlZmF1bHQgdG8gemVyby4gSW4gdGhpcyBjYXNlIHRoZSBiaXRtYXAgaXMgZHJhd24gd2l0aCBpdHMgb3JpZ2luYWwgc2l6ZS4KICogVGhlIHBhcmFtZXRlciB0cmFuc3BhcmVudGNvbG9yIG1heSBiZSB1c2VkIHRvIGluZGljYXRlIHdoaWNoIGNvbG9yIGlzIHRvIGJlIG1hZGUgdHJhbnNwYXJlbnQuCiAqIElmIGlzIHNldCB0byBOT0NPTE9SICh0aGUgZGVmYXVsdCksIG5vIHRyYW5zcGFyZW5jeSBpcyB1c2VkIGFuZCB0aGUgaW1hZ2UgaXMgb3BhcXVlLgogKiBQYXJhbWV0ZXJzIHhvZmZzZXQgYW5kIHlvZmZzZXQgYXJlIG9wdGlvbmFsbHkgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBpbWFnZSB3aWxsIGJlIGRyYXduLgogKgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBpZiBhbiBlcnJvciBvY2N1cnMuCiAqCiAqIEBwYXJhbSAkdGFyZ2V0CiAqIEBwYXJhbSAkYml0bWFwCiAqIEBwYXJhbSBpbnQgICR4cG9zCiAqIEBwYXJhbSBpbnQgICR5cG9zCiAqIEBwYXJhbSBudWxsICR3aWR0aAogKiBAcGFyYW0gbnVsbCAkaGVpZ2h0CiAqIEBwYXJhbSBudWxsICR0cmFuc3BhcmVudGNvbG9yCiAqIEBwYXJhbSBudWxsICR4b2Zmc2V0CiAqIEBwYXJhbSBudWxsICR5b2Zmc2V0CiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2JfZHJhd19pbWFnZSgkdGFyZ2V0LCAkYml0bWFwLCAkeHBvcyA9IDAsICR5cG9zID0gMCwgJHdpZHRoID0gbnVsbCwgJGhlaWdodCA9IG51bGwsICR0cmFuc3BhcmVudGNvbG9yID0gbnVsbCwgJHhvZmZzZXQgPSBudWxsLCAkeW9mZnNldCA9IG51bGwpIHt9CgovKioKICogRGVzdHJveXMgYSBjb250cm9sIGNyZWF0ZWQgYnkgd2JfY3JlYXRlX2NvbnRyb2woKS4KICoKICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJzLgogKgogKiBUaXAKICogSXQgaXMgb2Z0ZW4gcHJlZmVyYWJsZSB0byBoaWRlIGEgY29udHJvbCBpbnN0ZWFkIG9mIGRlc3Ryb3lpbmcgaXQuIFRvIGhpZGUgYSB3aW5kb3csIHVzZSB3Yl9zZXRfdmlzaWJsZSgpIHdpdGggcGFyYW1ldGVyIHZpc2libGUgc2V0IHRvIEZBTFNFLgogKgogKiBAcGFyYW0gJGNvbnRyb2wKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB3Yl9kZXN0cm95X2NvbnRyb2woJGNvbnRyb2wpIHt9CgovKioKICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBhIGNvbnRyb2wgb3IgY29udHJvbCBpdGVtLiBUaGUgaXRlbSBhbmQgc3ViaXRlbSBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gLTEgaWYgYWJzZW50LgogKgogKiBAcGFyYW0gbnVsbCAkd2JvYmplY3QKICogQHBhcmFtIGludCAgJGl0ZW0KICogQHBhcmFtIGludCAgJHN1Yml0ZW0KICoKICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24gd2JfZ2V0X3ZhbHVlKCR3Ym9iamVjdCwgJGl0ZW0gPSAtMSwgJHN1Yml0ZW0gPSAtMSkge30KCi8qKgogKiBSZWZyZXNoZXMgb3IgcmVkcmF3cyB0aGUgV2luQmluZGVyIG9iamVjdCB3Ym9iamVjdCwgZm9yY2luZyBhbiBpbW1lZGlhdGUgcmVkcmF3IGlmIHRoZSBwYXJhbWV0ZXIgbm93IGlzIFRSVUUgKHRoZSBkZWZhdWx0KS4KICogSWYgbm93IGlzIEZBTFNFLCB0aGUgcmVkcmF3IGNvbW1hbmQgaXMgcG9zdGVkIHRvIHRoZSBXaW5kb3dzIG1lc3NhZ2UgcXVldWUuCiAqCiAqIE9wdGlvbmFsIHBhcmFtZXRlcnMgeHBvcywgeXBvcywgd2lkdGggYW5kIGhlaWdodCB3aWxsIG1ha2UgdGhlIGZ1bmN0aW9uIGludmFsaWRhdGUgYW5kIHJlZHJhdyBvbmx5IHRoZSBzcGVjaWZpZWQgcGFydCBvZiB0aGUgc2NyZWVuIG9yIGNvbnRyb2wuCiAqCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIGlmIGFuIGVycm9yIG9jY3Vycy4KICoKICogQHBhcmFtICR3Ym9iamVjdAogKiBAcGFyYW0gbnVsbCAkbm93CiAqIEBwYXJhbSBudWxsICR4cG9zCiAqIEBwYXJhbSBudWxsICR5cG9zCiAqIEBwYXJhbSBudWxsICR3aWR0aAogKiBAcGFyYW0gbnVsbCAkaGVpZ2h0CiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3Yl9yZWZyZXNoKCR3Ym9iamVjdCwgJG5vdyA9IG51bGwsICR4cG9zID0gbnVsbCwgJHlwb3MgPSBudWxsLCAkd2lkdGggPSBudWxsLCAkaGVpZ2h0ID0gbnVsbCkge30KCi8qKgogKiBFbmFibGVzIG9yIGRpc2FibGVzIGNvbnRyb2wgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiBlbmFibGVkLgogKgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBpZiBhbiBlcnJvciBvY2N1cnMuCiAqCiAqIEBwYXJhbSAkY29udHJvbAogKiBAcGFyYW0gJGVuYWJsZWQKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB3Yl9zZXRfZW5hYmxlZCgkY29udHJvbCwgJGVuYWJsZWQpIHt9CgovKioKICogQXNzaWducyB0aGUgaW1hZ2Ugc291cmNlIHRvIHRoZSBXaW5CaW5kZXIgb2JqZWN0IHdib2JqZWN0LgogKiBQYXJhbWV0ZXIgc291cmNlIGNhbiBiZSBlaXRoZXIgYW4gaW1hZ2UsIGljb24gb3IgY3Vyc29yIGhhbmRsZSBvciBhIHBhdGggdG8gYW4gaW1hZ2UgZmlsZSBuYW1lLgogKiBJZiBhIGhhbmRsZSwgaXQgbXVzdCBoYXZlIGJlZW4gb2J0YWluZWQgd2l0aCB3Yl9jcmVhdGVfaW1hZ2UoKSwgd2JfY3JlYXRlX21hc2soKSBvciB3Yl9sb2FkX2ltYWdlKCkuCiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgdHJhbnNwYXJlbnRjb2xvciB0ZWxscyB0aGUgZnVuY3Rpb24gd2hpY2ggY29sb3IgaXMgdG8gYmUgY29uc2lkZXJlZCB0cmFuc3BhcmVudC4KICogVGhlIGRlZmF1bHQgaXMgTk9DT0xPUiAobm8gdHJhbnNwYXJlbmN5KS4KICogaW5kZXggaXMgdXNlZCB0byBzZWxlY3QgYSBzcGVjaWZpYyBpbWFnZSBmcm9tIGEgbXVsdGktaW1hZ2UgZmlsZSAoc3VjaCBhcyBhIERMTCBvciBleGVjdXRhYmxlKS4KICoKICogSWYgc291cmNlIGlzIGFuIGljb24gb3IgYSBjdXJzb3IsIGlmIHBhcmFtIGlzIDAgKHRoZSBkZWZhdWx0KSwgdGhlIGZ1bmN0aW9uIHNldHMgYSBsYXJnZSBpY29uIG9yIGN1cnNvci4KICogaWYgcGFyYW0gaXMgMSwgaXQgc2V0cyBhIHNtYWxsIGljb24gb3IgY3Vyc29yOyBpZiBwYXJhbSBpcyAtMSwgdGhlIGZ1bmN0aW9uIHNldHMgdGhlIGRlZmF1bHQgaWNvbiBvciBjdXJzb3IuCiAqIEZvciBtaW5pbWl6ZWQgd2luZG93cywgdGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gY2hhbmdlIHRoZSBpY29uIHRoYXQgaXMgZGlzcGxheWVkIG9uIHRoZSB0YXNrIGJhci4KICoKICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gJHdib2JqZWN0CiAqIEBwYXJhbSAkc291cmNlCiAqIEBwYXJhbSBudWxsICR0cmFuc3BhcmVudGNvbG9yCiAqIEBwYXJhbSBudWxsICRpbmRleAogKiBAcGFyYW0gbnVsbCAkcGFyYW0KICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB3Yl9zZXRfaW1hZ2UoJHdib2JqZWN0LCAkc291cmNlLCAkdHJhbnNwYXJlbnRjb2xvciA9IG51bGwsICRpbmRleCA9IG51bGwsICRwYXJhbSA9IG51bGwpIHt9CgovKioKICogUmV0cmlldmVzIGEgcG9ydGlvbiBvZiB0aGUgaW1hZ2UgYWxyZWFkeSBhc3NpZ25lZCB0byBhIGNvbnRyb2wgYW5kIGFzc2lnbnMgaXQgdG8gYSBpdGVtIChhbmQgb3B0aW9uYWwgc3ViaXRlbSkuCiAqIFRoZSBpbWFnZSBtdXN0IGJlIHByZXZpb3VzbHkgYXNzaWduZWQgd2l0aCB3Yl9zZXRfaW1hZ2UoKS4gVGhlIHBvcnRpb24gd2hpY2ggaXMgYXNzaWduZWQgaXMgc3BlY2lmaWVkIGJ5IGluZGV4LgogKgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBpZiBhbiBlcnJvciBvY2N1cnMuCiAqCiAqIEBwYXJhbSAkd2JvYmplY3QKICogQHBhcmFtICRpbmRleAogKiBAcGFyYW0gbnVsbCAkaXRlbQogKiBAcGFyYW0gbnVsbCAkc3ViaXRlbQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHdiX3NldF9pdGVtX2ltYWdlKCR3Ym9iamVjdCwgJGluZGV4LCAkaXRlbSA9IG51bGwsICRzdWJpdGVtID0gbnVsbCkge30KCi8qKgogKiBEZWxldGVzIGFuIGl0ZW0sIGEgcmFuZ2Ugb2YgaXRlbXMsIG9yIGFsbCBpdGVtcyBmcm9tIGEgY29udHJvbC4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJzLgogKiBDb250cm9sIGNsYXNzZXMuCiAqCiAqIFRoaXMgZnVuY3Rpb24gYXBwbGllcyB0byB0aGUgZm9sbG93aW5nIGNvbnRyb2wgY2xhc3NlczogTGlzdEJveCwgQ29tYm9Cb3gsIExpc3RWaWV3IGFuZCBUcmVlVmlldy4KICoKICogJGl0ZW1zIGNhbiBiZToKICogaW50ZWdlciAgICBEZWxldGVzIHRoZSBzcGVjaWZpZWQgaXRlbS4KICogYXJyYXkgb2YgaW50ZWdlcnMgICAgRGVsZXRlcyB0aGUgc3BlY2lmaWVkIGl0ZW1zLgogKiB6ZXJvICAgIERlbGV0ZXMgaXRlbSB6ZXJvLgogKiBudWxsICAgIERlbGV0ZXMgYWxsIGl0ZW1zLgogKgogKiBAcGFyYW0gJGN0cmwKICogQHBhcmFtIG51bGwgJGl0ZW1zCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2JfZGVsZXRlX2l0ZW1zKCRjdHJsLCAkaXRlbXMgPSBudWxsKSB7fQoKLyoqCiAqIFJldHVybnMgYW4gaW50ZWdlciB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjbGFzcyBvZiB0aGUgb2JqZWN0IChjb250cm9sLCB3aW5kb3cgb3IgbWVudSkgcGFzc2VkIGFzIHRoZSBwYXJhbWV0ZXIuCiAqIFRoZSBjbGFzcyBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIgdG8gZnVuY3Rpb25zIHdiX2NyZWF0ZV9jb250cm9sKCkgYW5kIHdiX2NyZWF0ZV93aW5kb3coKS4KICoKICogQHBhcmFtICR3Ym9iamVjdAogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2JfZ2V0X2NsYXNzKCR3Ym9iamVjdCkge30KCi8qKgogKiBSZXR1cm5zIGFuIGludGVnZXIgaGFuZGxlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIFdpbkJpbmRlciBvYmplY3QgKGNvbnRyb2wsIHRvb2xiYXIgaXRlbSBvciBtZW51IGl0ZW0pIHdib2JqZWN0IHRoYXQgaGFzIHRoZSBzdXBwbGllZCBpZGVudGlmaWVyIGlkLgogKiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseSB1c2VkIHRvIHJldHJpZXZlIHRoZSBoYW5kbGUgb2YgYSBjaGlsZCBjb250cm9sIGluIGEgZGlhbG9nIGJveCBvciBpbiBhIG1lbnUgaXRlbS4KICoKICogQHBhcmFtICR3Ym9iamVjdAogKiBAcGFyYW0gJGlkCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3Yl9nZXRfY29udHJvbCgkd2JvYmplY3QsICRpZCkge30KCi8qKgogKiBSZXR1cm5zIFRSVUUgaWYgd2JvYmplY3QgaXMgZW5hYmxlZCBvciBGQUxTRSBvdGhlcndpc2UuCiAqCiAqIEBwYXJhbSAkd2JvYmplY3QKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB3Yl9nZXRfZW5hYmxlZCgkd2JvYmplY3QpIHt9CgovKioKICogUmV0dXJucyBhIGhhbmRsZSB0byB0aGUgd2luZG93IG9yIGNvbnRyb2wgdGhhdCBoYXMgdGhlIGtleWJvYXJkIGZvY3VzLgogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2JfZ2V0X2ZvY3VzKCkge30KCi8qKgogKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIGlkZW50aWZpZXIgb2YgdGhlIHdib2JqZWN0IGNvbnRyb2wuCiAqCiAqIEBwYXJhbSAkd2JvYmplY3QKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdiX2dldF9pZCgkd2JvYmplY3QpIHt9CgovKioKICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIG9mIHdib2JqZWN0LgogKgogKiBDb21ib0JveCAgICBUaGUgbnVtYmVyIG9mIGl0ZW1zCiAqIExpc3RCb3ggICAgVGhlIG51bWJlciBvZiBpdGVtcwogKiBMaXN0VmlldyAgICBUaGUgbnVtYmVyIG9mIHJvd3MKICoKICogQHBhcmFtICR3Ym9iamVjdAogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2JfZ2V0X2l0ZW1fY291bnQoJHdib2JqZWN0KSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGhhbmRsZSBvZiB0aGUgY29udHJvbCBwYXJlbnQgaWYgaXRlbSBzcGVjaWZpZXMgYSBjb250cm9sLCBvciB0aGUgbm9kZSBwYXJlbnQgaWYgaXRlbSBzcGVjaWZpZXMgYSB0cmVldmlldyBub2RlLgogKgogKiBAcGFyYW0gJHdib2JqZWN0CiAqIEBwYXJhbSBudWxsICRpdGVtCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3Yl9nZXRfcGFyZW50KCR3Ym9iamVjdCwgJGl0ZW0gPSBudWxsKSB7fQoKLyoqCiAqIFJldHVybnMgYSB2YWx1ZSBvciBhcnJheSB3aXRoIHRoZSBpbmRpY2VzIG9yIGlkZW50aWZpZXJzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cyBvciBpdGVtcyBpbiB3Ym9iamVjdC4KICoKICogUmV0cmlldmVzOgogKgogKiBDb21ib0JveCAgICBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLgogKiBMaXN0Qm94ICAgIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uIElmIG11bHRpc2VsZWN0ZWQgb25seSB0aGUgbGFzdCBvbiB3aWxsIGJlIHJldHVybmVkICh1c2UgZ2V0VGV4dCBmb3IgYWxsIGl0ZW1zIHRleHQpCiAqIExpc3RWaWV3ICAgIEFuIGFycmF5IHdpdGggdGhlIGluZGljZXMgb2YgdGhlIHNlbGVjdGVkIGl0ZW1zLiDCuQogKiBUYWJDb250cm9sICAgIFRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgdGFiIHBhZ2UuCiAqIFRyZWVWaWV3ICAgIFRoZSBoYW5kbGUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBub2RlLgogKiBXaW5kb3cgICAgMCAoemVybykuCiAqIE90aGVyIGNvbnRyb2xzICAgIDAgKHplcm8pLgogKgogKiBAcGFyYW0gJHdib2JqZWN0CiAqCiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIHdiX2dldF9zZWxlY3RlZCgkd2JvYmplY3QpIHt9CgovKioKICogUmV0cmlldmVzIGFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgY29udHJvbCBpdGVtLgogKiBSZXRyaWV2aW5nIHN0YXRlcy4KICoKICogVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkgcmV0dXJucyB0aGUgZXhwYW5kZWQgb3IgY29sbGFwc2VkIHN0YXRlIG9mIGEgdHJlZXZpZXcgbm9kZSBpbmRpY2F0ZWQgYnkgaXRlbS4KICogSXQgcmV0dXJucyBUUlVFIGlmIHRoZSBub2RlIGlzIGV4cGFuZGVkIGFuZCBGQUxTRSBpZiBpdCBpcyBjb2xsYXBzZWQuCiAqCiAqIEBwYXJhbSAkd2JvYmplY3QKICogQHBhcmFtIG51bGwgJGl0ZW0KICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB3Yl9nZXRfc3RhdGUoJHdib2JqZWN0LCAkaXRlbSA9IG51bGwpIHt9CgovKioKICogVGVsbHMgd2hldGhlciBhbiBvYmplY3QgaXMgdmlzaWJsZS4gUmV0dXJucyBUUlVFIGlmIHdib2JqZWN0IGlzIHZpc2libGUgYW5kIEZBTFNFIG90aGVyd2lzZS4KICoKICogQHBhcmFtICR3Ym9iamVjdAogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHdiX2dldF92aXNpYmxlKCR3Ym9iamVjdCkge30KCi8qKgogKiBTZXQgb3IgY2hhbmdlIHRoZSBtb3VzZSBjdXJzb3Igc2hhcGUgb2YgYSB3aW5kb3csIGNvbnRyb2wsIGEgd2hvbGUgY2xhc3Mgb3IgYXBwbGljYXRpb24td2lkZS4gKgogKiBUaGUgY3Vyc29yIGNhbiBiZSBzZXQgZm9yIGFueSB3aW5kb3cgY2xhc3MgYW5kIGZvciBjb250cm9sIGNsYXNzZXMgSW1hZ2VCdXR0b24sIEludmlzaWJsZUFyZWEgKGRlcHJlY2F0ZWQpLCBIeXBlckxpbmsgYW5kIEVkaXRCb3guCiAqCiAqIFRoZSBzb3VyY2UgcGFyYW1ldGVyIGNhbiBiZSBhIGN1cnNvciBoYW5kbGUgZnJvbSBmdW5jdGlvbiB3Yl9sb2FkX2ltYWdlKCkgb3Igb25lIG9mIHRoZSBwcmVzZXQgc3lzdGVtIGN1cnNvcnM6CiAqIGFycm93LCBjcm9zcywgZmluZ2VyLCBmb3JiaWRkZW4sIGhlbHAsIGliZWFtLCBudWxsIChubyBjdXJzb3IpLCBzaXplYWxsLCBzaXplbmVzdywgc2l6ZW5zLCBzaXplbndzZSwgc2l6ZXdlLCB1cGFycm93LCB3YWl0IGFuZCB3YWl0YXJyb3cuCiAqCiAqIEBwYXJhbSAkd2JvYmplY3QKICogQHBhcmFtICRzb3VyY2UKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB3Yl9zZXRfY3Vyc29yKCR3Ym9iamVjdCwgJHNvdXJjZSkge30KCi8qKgogKiBBc3NpZ25zIHRoZSBrZXlib2FyZCBmb2N1cyB0byB3Ym9iamVjdC4gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gJHdib2JqZWN0CiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2Jfc2V0X2ZvY3VzKCR3Ym9iamVjdCkge30KCi8qKgogKiBBc3NpZ25zIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmbl9oYW5kbGVyIHRvIHdpbmRvdy4KICogVGhlIGhhbmRsZXIgZnVuY3Rpb24gbWF5IGJlIGEgcmVndWxhciBQSFAgZnVuY3Rpb24gb3IgY2xhc3MgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBwcm9jZXNzIGV2ZW50cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdpbmRvdy4KICogd2Jfc2V0X2hhbmRsZXIoKSBtdXN0IGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgd2luZG93IG5lZWRzIHRvIHByb2Nlc3MgbWVzc2FnZXMgYW5kIGV2ZW50cyBmcm9tIGl0cyBjb250cm9scy4KICoKICogVG8gc3BlY2lmeSBhIGZ1bmN0aW9uIGFzIHRoZSBoYW5kbGVyLCBwYXNzIHRoZSBmdW5jdGlvbiBuYW1lIGluIGZuX2hhbmRsZXIuCiAqIElmIHRoZSBoYW5kbGVyIGlzIGEgY2xhc3MgbWV0aG9kLCBmbl9oYW5kbGVyIG11c3QgYmUgYW4gYXJyYXkgd2hpY2ggZmlyc3QgZWxlbWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgb2JqZWN0IGFuZCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUgbWV0aG9kIG5hbWUuCiAqCiAqIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBzZWUgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCB3aW5kb3cgaGFuZGxlcnMuCiAqCiAqIEBwYXJhbSAkd2luZG93CiAqIEBwYXJhbSAkZm5faGFuZGxlcgogKgogKiBAcmV0dXJuIGJvb2x8bnVsbAogKi8KZnVuY3Rpb24gd2Jfc2V0X2hhbmRsZXIoJHdpbmRvdywgJGZuX2hhbmRsZXIpIHt9CgovKioKICogU2V0cyB0aGUgbG9jYXRpb24gb2YgYW4gSFRNTENvbnRyb2wgb3Igc2VuZHMgYSBzcGVjaWFsIGNvbW1hbmQgdG8gaXQuCiAqCiAqIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIGlmIGFuIGVycm9yIG9jY3VycyAoZXhjZXB0IHdoZW4gdXNpbmcgImNtZDpidXN5IiBhcyBleHBsYWluZWQgYmVsb3cpLgogKgogKiAiY21kOmJhY2siICAgIEdvIHRvIHByZXZpb3VzbHkgdmlzaXRlZCBwYWdlLgogKiAiY21kOmZvcndhcmQiICAgIEdvIHRvIGEgcGFnZSBwcmV2aW91c2x5IHZpZXdlZCBiZWZvcmUgaXNzdWluZyB0aGUgYmFjayBjb21tYW5kLgogKiAiY21kOnJlZnJlc2giICAgIFJlZHJhdyB0aGUgY3VycmVudCBwYWdlLgogKiAiY21kOnN0b3AiICAgIFN0b3AgdGhlIGN1cnJlbnQgYWN0aW9uLCBsaWtlIGxvYWRpbmcgYSBwYWdlLgogKiAiY21kOmJ1c3kiICAgIFJldHVybiBUUlVFIGlmIHRoZSBicm93c2VyIGlzIGJ1c3kgb3IgRkFMU0UgaWYgaWRsZS4KICogImNtZDpibGFuayIgICAgQ2xlYXIgdGhlIHBhZ2UuCiAqCiAqIEBwYXJhbSAkd2JvYmplY3QKICogQHBhcmFtICRsb2NhdGlvbgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHdiX3NldF9sb2NhdGlvbigkd2JvYmplY3QsICRsb2NhdGlvbikge30KCi8qKgogKiBTZXRzIHRoZSB2YWxpZCByYW5nZSBvZiB2YWx1ZXMgKHZtaW4gYW5kIHZtYXgpIG9mIGEgY29udHJvbC4gVmFsaWQgY2xhc3NlcyBhcmUgR2F1Z2UsIFNjcm9sbEJhciwgU2xpZGVyIGFuZCBTcGlubmVyLgogKgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBpZiBhbiBlcnJvciBvY2N1cnMuCiAqCiAqIEBwYXJhbSAkY29udHJvbAogKiBAcGFyYW0gJHZtaW4KICogQHBhcmFtICR2bWF4CiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2Jfc2V0X3JhbmdlKCRjb250cm9sLCAkdm1pbiwgJHZtYXgpIHt9CgovKioKICogU2V0cyB0aGUgc3RhdGUgb2YgYSBjb250cm9sIGl0ZW0gKGEgdHJlZXZpZXcgbm9kZSkuIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIGlmIGFuIGVycm9yIG9jY3Vycy4KICoKICogU2V0dGluZyBzdGF0ZXM6CiAqIFRoaXMgZnVuY3Rpb24gY2FuIGN1cnJlbnRseSBzZXQgdGhlIGV4cGFuZGVkIG9yIGNvbGxhcHNlZCBzdGF0ZSBvZiB0aGUgdHJlZXZpZXcgbm9kZSBpbmRpY2F0ZWQgYnkgaXRlbS4KICogU2V0IHN0YXRlIHRvIFRSVUUgdG8gZXhwYW5kIHRoZSBub2RlIG9yIEZBTFNFIHRvIGNvbGxhcHNlIGl0LgogKgogKiBAcGFyYW0gJHdib2JqZWN0CiAqIEBwYXJhbSAkaXRlbQogKiBAcGFyYW0gJHN0YXRlCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2Jfc2V0X3N0YXRlKCR3Ym9iamVjdCwgJGl0ZW0sICRzdGF0ZSkge30KCi8qKgogKiBTZXRzIG9yIHJlc2V0cyBvbmUgb3IgbW9yZSBzdHlsZXMgb2YgdGhlIFdpbkJpbmRlciBvYmplY3Qgd2JvYmplY3QuCiAqIE9ubHkgYSBsaW1pdGVkIHNldCBvZiBzdHlsZXMgaXMgc3VwcG9ydGVkIGR1ZSB0byBXaW5kb3dzIGxpbWl0YXRpb25zLgogKgogKiBBcHBXaW5kb3cKICogUmVzaXphYmxlV2luZG93CiAqIFBvcHVwV2luZG93CiAqIE5ha2VkV2luZG93wqAgICAgV0JDX1RPUCAgICBNYWtlIHRoZSB3aW5kb3cgYSB0b3Btb3N0IHdpbmRvdy4KICoKICogTGlzdFZpZXcgICAgV0JDX0xJTkVTICAgIERpc3BsYXkgZ3JpZCBsaW5lcyBhcm91bmQgaXRlbXMKICogTGlzdFZpZXcgV0JDX0NIRUNLQk9YRVMgICAgRGlzcGxheSBjaGVjayBib3hlcyBpbiB0aGUgZmlyc3QgY29sdW1uIG9mIGFsbCBpdGVtcwogKiBTbGlkZXIgICAgV0JDX0xJTkVTICAgIFNob3cgdGljayBtYXJrcy4gVGhlIGNvbnRyb2wgbXVzdCBiZSBjcmVhdGVkIHdpdGggdGhlIFdCQ19MSU5FUyBzdHlsZQogKiBUcmVlVmlldyAgICBXQkNfTElORVMgICAgRHJhdyBkb3R0ZWQgbGluZXMgbGlua2luZyBjaGlsZHJlbiBvYmplY3RzIHRvIHRoZWlyIHBhcmVudHMKICoKICogQHBhcmFtICR3Ym9iamVjdAogKiBAcGFyYW0gJHN0eWxlCiAqIEBwYXJhbSAkc2V0CiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2Jfc2V0X3N0eWxlKCR3Ym9iamVjdCwgJHN0eWxlLCAkc2V0KSB7fQoKLyoqCiAqIFNob3dzIG9yIGhpZGVzIHRoZSBXaW5CaW5kZXIgb2JqZWN0IHdib2JqZWN0IGFjY29yZGluZyB0byB0aGUgdmFsdWUgb2YgdmlzaWJsZS4KICoKICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gJHdib2JqZWN0CiAqIEBwYXJhbSAkdmlzaWJsZQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHdiX3NldF92aXNpYmxlKCR3Ym9iamVjdCwgJHZpc2libGUpIHt9CgovKioKICogU29ydHMgdGhlIGNvbnRlbnRzIG9mIGEgY29udHJvbCwgYSBjb250cm9sIGl0ZW0sIGEgTGlzdFZpZXcgY29sdW1uIG9yIGEgc3ViLWl0ZW0uCiAqIElmIHRoZSBhc2NlbmRpbmcgcGFyYW1ldGVyIGlzIFRSVUUgKHRoZSBkZWZhdWx0KSwgdGhlIGNvbnRyb2wgb3IgY29sdW1uIGlzIG9yZGVyZWQgc3RhcnRpbmcgd2l0aCB0aGUgbG93ZXN0IHZhbHVlIG9yIHN0cmluZywgYW5kIHZpY2UtdmVyc2EuCiAqCiAqIFRoZSBzb3J0aW5nIGNyaXRlcmlhIGJldHdlZW4gdHdvIGdpdmVuIGl0ZW1zLCBpdGVtMSBhbmQgaXRlbTIsIGFyZSBhcyBmb2xsb3dzOgogKgogKiBTdHJpbmcgb3IgbnVtYmVyICAgIFN0cmluZyAgICBBbHBoYWJldGljYWwgb3JkZXIgYWNjb3JkaW5nIHRvIHN5c3RlbSBsb2NhbGUKICogU3RyaW5nIG9yIG51bWJlciAgICBFbXB0eSAgICBUaGUgbm9uLWVtcHR5IGl0ZW0gaXMgYWx3YXlzIGdyZWF0ZXIgdGhhbiB0aGUgZW1wdHkgb25lCiAqIE51bWJlciAgICBOdW1iZXIgICAgTnVtZXJpYyBjb21wYXJpc29uCiAqCiAqIEluIGEgTGlzdFZpZXcsIHdiX3NvcnQoKSBzb3J0cyB0aGUgY29sdW1uIGluZGV4ZWQgYnkgc3ViaXRlbS4gVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjb2x1bW4gaXMgemVyby4KICoKICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gJGNvbnRyb2wKICogQHBhcmFtIG51bGwgJGFzY2VuZGluZwogKiBAcGFyYW0gbnVsbCAkc3ViaXRlbQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHdiX3NvcnQoJGNvbnRyb2wsICRhc2NlbmRpbmcgPSBudWxsLCAkc3ViaXRlbSA9IG51bGwpIHt9CgovKioKICogUmV0cmlldmVzIGFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBsZXZlbCBvZiBhIGNvbnRyb2wgaXRlbS4KICoKICogUmV0cmlldmluZyBzdGF0ZXM6CiAqIFRoaXMgZnVuY3Rpb24gY3VycmVudGx5IHJldHVybnMgdGhlIGluc2VydGlvbiBsZXZlbCBvZiB0aGUgdHJlZXZpZXcgbm9kZSBzcGVjaWZpZWQgaW4gaXRlbS4KICoKICogQHBhcmFtICR3Ym9iamVjdAogKiBAcGFyYW0gJGl0ZW0KICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdiX2dldF9sZXZlbCgkd2JvYmplY3QsICRpdGVtKSB7fQoKLyoqCiAqIENyZWF0ZXMgYSBuZXcgZm9udC4gbmFtZSBpcyB0aGUgZm9udCBuYW1lLCBoZWlnaHQgaXMgaXRzIGhlaWdodCBpbiBwb2ludHMgKG5vdCBwaXhlbHMpLCBhbmQgY29sb3IgaXMgYSBSR0IgY29sb3IgdmFsdWUuIGZsYWdzIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOi4KICoKICogRlRBX05PUk1BTAogKiBGVEFfUkVHVUxBUgogKiBGVEFfQk9MRAogKiBGVEFfSVRBTElDCiAqIEZUQV9VTkRFUkxJTkUKICogRlRBX1NUUklLRU9VVAogKgogKiBDb25zdGFudHMgb2YgRlRBX05PUk1BTCBhbmQgRlRBX1JFR1VMQVIgbWVhbiB0aGUgc2FtZSB0aGluZyBhbmQgYXJlIGRlZmluZWQgYXMgemVyby4KICoKICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gaW50ZWdlciB2YWx1ZSB0aGF0IGlzIHRoZSBmb250IGlkZW50aWZpZXIuCiAqCiAqIEFmdGVyIHVzZSwgdGhlIGZvbnQgbXVzdCBiZSBkZXN0cm95ZWQgYnkgYSBjYWxsIHRvIHdiX2Rlc3Ryb3lfZm9udCgpIHRvIHByZXZlbnQgcmVzb3VyY2UgbGVha3MuCiAqCiAqIE5PVEU6IFRoZSBjb2xvciBwYXJhbWV0ZXIgaXMgbm90IGltcGxlbWVudGVkIHlldC4KICoKICogQHBhcmFtICRuYW1lCiAqIEBwYXJhbSAkaGVpZ2h0CiAqIEBwYXJhbSBudWxsICRjb2xvcgogKiBAcGFyYW0gbnVsbCAkZmxhZ3MKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdiX2NyZWF0ZV9mb250KCRuYW1lLCAkaGVpZ2h0LCAkY29sb3IgPSBudWxsLCAkZmxhZ3MgPSBudWxsKSB7fQoKLyoqCiAqIERlc3Ryb3lzIGEgZm9udC4KICoKICogQHBhcmFtICRuZm9udAogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHdiX2Rlc3Ryb3lfZm9udCgkbmZvbnQpIHt9CgovKioKICogU2V0cyB0aGUgZm9udCBvZiBjb250cm9sLiBmb250IGlzIGEgdW5pcXVlIGludGVnZXIgdmFsdWUgcmV0dXJuZWQgYnkgd2JfY3JlYXRlX2ZvbnQoKS4KICogSWYgZm9udCBpcyB6ZXJvIG9yIG5vdCBnaXZlbiwgdGhlIG1vc3QgcmVjZW50bHkgY3JlYXRlZCBmb250IGlzIHVzZWQuCiAqIElmIGZvbnQgaXMgYSBuZWdhdGl2ZSBudW1iZXIsIGl0IG1lYW5zIHRoZSBzeXN0ZW0gZGVmYXVsdCBmb250LgogKgogKiBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBpZiBhbiBlcnJvciBvY2N1cnMuCiAqCiAqIFRpcDoKICogVG8gY2hlY2sgdGhlIHN5c3RlbSBmb250IG5hbWUgYW5kIHNpemUsIGNhbGwgd2JfZ2V0X3N5c3RlbV9pbmZvKCkgdXNpbmcgKCJzeXN0ZW1mb250IikgYXMgdGhlIGluZm8gcGFyYW1ldGVyLgogKgogKiBAcGFyYW0gJGNvbnRyb2wKICogQHBhcmFtIG51bGwgJGZvbnQKICogQHBhcmFtIG51bGwgJHJlZHJhdwogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHdiX3NldF9mb250KCRjb250cm9sLCAkZm9udCA9IG51bGwsICRyZWRyYXcgPSBudWxsKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGFkZHJlc3MgKGFzIGFuIGludGVnZXIgcG9pbnRlcikgb2YgdGhlIHZhcmlhYmxlIHZhci4KICogdmFyIGNhbiBiZSBhIHN0cmluZywgaW50ZWdlciwgYm9vbGVhbiwgb3IgZG91YmxlLgogKiBUaGlzIGZ1bmN0aW9uIGlzIHNwZWNpYWxseSBzdWl0ZWQgdG8gdXNlIHdpdGggd2JfcGVlaygpIGFuZCB3Yl9wb2tlKCkuCiAqCiAqIEBwYXJhbSAkdmFyCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3Yl9nZXRfYWRkcmVzcygkdmFyKSB7fQoKLyoqCiAqIFNlbmRzIGEgV2luZG93cyBtZXNzYWdlIHRvIHRoZSBIV05EIGhhbmRsZSBvZiB0aGUgV2luQmluZGVyIG9iamVjdCB3Ym9iamVjdC4KICogVGhlIHBhcmFtZXRlcnMgd3BhcmFtIGFuZCBscGFyYW0sIGFzIHdlbGwgYXMgdGhlIHJldHVybiB2YWx1ZSwgZGVwZW5kIG9uIG1lc3NhZ2UuCiAqIFNlZSBTZW5kTWVzc2FnZSgpIGluIHRoZSBXaW5kb3dzIEFQSSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogKgogKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50IG1heSBiZSB1c2VkIGFzIHRoZSB3Ym9iamVjdCBwYXJhbWV0ZXI6CiAqCiAqIDB4RkZGRgogKgogKiBUaGlzIGNvbnN0YW50IGlzIHRoZSB2YWx1ZSBvZiBIV05EX0JST0FEQ0FTVCBpbiB0aGUgV2luZG93cyBBUEkuIEZvciBtb3JlIGluZm9ybWF0aW9uIGNvbnN1bHQgdGhlIFdpbmRvd3MgQVBJIGRvY3VtZW50YXRpb24uCiAqCiAqIEBwYXJhbSAkd2JvYmplY3QKICogQHBhcmFtICRtZXNzYWdlCiAqIEBwYXJhbSAkd3BhcmFtCiAqIEBwYXJhbSAkbHBhcmFtCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3Yl9zZW5kX21lc3NhZ2UoJHdib2JqZWN0LCAkbWVzc2FnZSwgJHdwYXJhbSA9IDAsICRscGFyYW0gPSAwKSB7fQoKLyoqCiAqIEdldHMgdGhlIGNvbnRlbnRzIG9mIGEgbWVtb3J5IGFyZWEgcG9pbnRlZCBieSBhZGRyZXNzLgogKiBJZiBsZW5ndGggaXMgZW1wdHkgb3IgemVybywgcmV0dXJucyBieXRlcyB1cCB0byB0aGUgZmlyc3QgTlVMIGNoYXJhY3RlciAoemVyby1jaGFyYWN0ZXIpIG9yIHVwIHRvIDMyNzY3IGJ5dGVzLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCiAqIElmIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gemVybywgcmV0dXJucyBsZW5ndGggYnl0ZXMuCiAqCiAqIEBwYXJhbSAkYWRkcmVzcwogKiBAcGFyYW0gaW50ICRsZW5ndGgKICoKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHdiX3BlZWsoJGFkZHJlc3MsICRsZW5ndGggPSAwKSB7fQoKLyoqCiAqIFNldHMgdGhlIGNvbnRlbnRzIG9mIGEgbWVtb3J5IGFyZWEgcG9pbnRlZCBieSBhZGRyZXNzLgogKgogKiBAcGFyYW0gJGFkZHJlc3MKICogQHBhcmFtICRjb250ZW50cwogKiBAcGFyYW0gbnVsbCAkbGVuZ3RoCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2JfcG9rZSgkYWRkcmVzcywgJGNvbnRlbnRzLCAkbGVuZ3RoID0gbnVsbCkge30KCi8qKgogKiBMb2FkcyBhIERMTCBpbnRvIG1lbW9yeS4gUmV0dXJucyBhbiBpbnRlZ2VyIGlkZW50aWZ5aW5nIGxpYm5hbWUuIElmIGxpYm5hbWUgaXMgTlVMTCB0aGVuIHJldHVybnMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGxhc3QgbGlicmFyeSByZXR1cm5lZC4gVGhlIGZ1bmN0aW9uIGFjY2VwdHMgZnVsbHkgcXVhbGlmaWVkIGFuZCByYXcgbmFtZXMuIFJldHVybnMgTlVMTCBpZiBubyBsaWJyYXJ5IHdhcyBmb3VuZC4KICoKICogTmFtZSBleHBhbnNpb24KICoKICogVGhlIGZ1bmN0aW9uIGFwcGVuZHMgc29tZSBjaGFyYWN0ZXJzIHRvIHRoZSBsaWJyYXJ5IG5hbWUgdW50aWwgaXQgZmluZHMgdGhlIGxpYnJhcnksIHRoZW4gaXQgcmV0dXJucyBhbiBpZGVudGlmaWVyIGZvciB0aGF0IGxpYnJhcnksCiAqIG9yIE5VTEwgaWYgdGhlIGxpYnJhcnkgd2FzIG5vdCBmb3VuZC4gSWYgbGlibmFtZSBpcyAiTElCIiwgZm9yIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBsb29rcyBmb3IgdGhlIGZvbGxvd2luZyBmaWxlcywgaW4gb3JkZXI6CiAqCiAqIExJQgogKiBMSUIuRExMCiAqIExJQjMyCiAqIExJQjMyLkRMTAogKiBMSUIuRVhFCiAqIExJQjMyLkVYRQogKgogKiBGb3IgZWFjaCBuYW1lLCB0aGUgZnVuY3Rpb24gbG9va3MgaW4gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CiAqCiAqIFRoZSBhcHBsaWNhdGlvbiBkaXJlY3Rvcnk7CiAqIFRoZSBjdXJyZW50IGRpcmVjdG9yeTsKICogVGhlIDMyLWJpdCBTeXN0ZW0gZGlyZWN0b3J5IChVc3VhbGx5IEM6XFdJTkRPV1NcU1lTVEVNMzIgb3IgQzpcV0lOTlRcU1lTVEVNMzIpOwogKiBUaGUgMTYtYml0IFN5c3RlbSBkaXJlY3RvcnkgKFVzdWFsbHkgQzpcV0lORE9XU1xTWVNURU0gb3IgQzpcV0lOTlRcU1lTVEVNKTsKICogVGhlIFdpbmRvd3MgZGlyZWN0b3J5IChVc3VhbGx5IEM6XFdJTkRPV1Mgb3IgQzpcV0lOTlQpOwogKiBUaGUgZGlyZWN0b3J5IGxpc3QgY29udGFpbmVkIGluIHRoZSBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLgogKgogKiBAcGFyYW0gJGxpYm5hbWUKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdiX2xvYWRfbGlicmFyeSgkbGlibmFtZSkge30KCi8qKgogKiBSZWxlYXNlcyB0aGUgRExMIGlkZW50aWZpZWQgYnkgaWRsaWIgZnJvbSBtZW1vcnkuIFRoZSBpZGxpYiBpZGVudGlmaWVyIG11c3QgaGF2ZSBiZWVuIG9idGFpbmVkIHdpdGggYSBjYWxsIHRvIHdiX2xvYWRfbGlicmFyeSgpLgogKgogKiBOT1RFOiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBub3QgbmVjZXNzYXJ5LgogKgogKiBAcGFyYW0gJGlkbGliCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2JfcmVsZWFzZV9saWJyYXJ5KCRpZGxpYikge30KCi8qKgogKiBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIGEgbGlicmFyeSBmdW5jdGlvbi4gZm5hbWUgaXMgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGlkbGliIGlkZW50aWZpZXMgYSBsaWJyYXJ5IGFscmVhZHkgbG9hZGVkLgogKiBUaGUgaWRsaWIgaWRlbnRpZmllciBtdXN0IGhhdmUgYmVlbiBvYnRhaW5lZCB3aXRoIGEgY2FsbCB0byB3Yl9sb2FkX2xpYnJhcnkoKS4KICogSWYgaWRsaWIgaXMgbm90IHNldCBvciBpcyBzZXQgdG8gTlVMTCwgdGhlIGxhc3QgbGlicmFyeSBzZW50IHRvIHRoZSBmdW5jdGlvbiB3aWxsIGJlIHVzZWQuCiAqCiAqIE5hbWUgZXhwYW5zaW9uOgogKiBUaGUgZnVuY3Rpb24gcHJlcGVuZHMgYW5kIGFwcGVuZHMgc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gdGhlIGZ1bmN0aW9uIG5hbWUgdW50aWwgaXQgZmluZHMgdGhlIGZ1bmN0aW9uIG5hbWUsCiAqIHRoZW4gaXQgcmV0dXJucyB0aGUgZnVuY3Rpb24gYWRkcmVzcyBvciBOVUxMIGlmIHRoZSBmdW5jdGlvbiB3YXMgbm90IGZvdW5kLgogKiBUaGVzZSBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIHRoZSBtb3N0IGNvbW1vbiBvbmVzIGVuY291bnRlcmVkIGluIHZhcmlvdXMgdHlwZXMgb2YgbGlicmFyaWVzLgogKgogKiBGb3IgZXhhbXBsZSwgaWYgZm5hbWUgaXMgc2V0IHRvICJNeUZ1bmN0aW9uIiwgd2JfZ2V0X2Z1bmN0aW9uX2FkZHJlc3MoKSBsb29rcyBmb3IgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBuYW1lcywgaW4gb3JkZXI6CiAqCiAqIE15RnVuY3Rpb24KICogTXlGdW5jdGlvbkEKICogTXlGdW5jdGlvblcKICogX015RnVuY3Rpb24KICogX015RnVuY3Rpb25BCiAqIF9NeUZ1bmN0aW9uVwogKiBNeUZ1bmN0aW9uQDAsIE15RnVuY3Rpb25ANCwgTXlGdW5jdGlvbkA4Li4uIHVudGlsIE15RnVuY3Rpb25AODAKICogX015RnVuY3Rpb25AMCwgX015RnVuY3Rpb25ANCwgX015RnVuY3Rpb25AOC4uLiB1bnRpbCBNeUZ1bmN0aW9uQDgwCiAqCiAqIFRoZSBsYXN0IHR3byBleHBhbnNpb24gb3B0aW9ucyBpbmNsdWRlIGEgJ0AnIGNoYXJhY3RlciBmb2xsb3dlZCBieSB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGltZXMgNCwKICogd2hpY2ggaXMgYSBzdGFuZGFyZCB3YXkgdG8gc3RvcmUgZnVuY3Rpb24gbmFtZXMgaW5zaWRlIERMTHMuIFRoZSBsb29wIHN0YXJ0cyBmcm9tIHplcm8gKCJAMCIpIGFuZCBlbmRzIHdoZW4gaXQgcmVhY2hlcyAyMCBwYXJhbWV0ZXJzICgiQDgwIikuCiAqCiAqIE5PVEU6IEZ1bmN0aW9uIG5hbWVzLCBpbmNsdWRpbmcgdGhlIGV4cGFuc2lvbiBjaGFyYWN0ZXJzLCBhcmUgbGltaXRlZCB0byAyNTUgY2hhcmFjdGVycy4KICoKICogQHBhcmFtICRmbmFtZQogKiBAcGFyYW0gJGlkbGliCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3Yl9nZXRfZnVuY3Rpb25fYWRkcmVzcygkZm5hbWUsICRpZGxpYikge30KCi8qKgogKiBDYWxscyB0aGUgRExMIGZ1bmN0aW9uIHBvaW50ZWQgYnkgYWRkcmVzcy4KICogYXJncyBpcyBhbiBvcHRpb25hbCBhcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgbXVzdCBtYXRjaCB0aG9zZSBvZiB0aGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkLgogKiBSZXR1cm5zIGFuIGludGVnZXIgdGhhdCBtYXkgYmUgYSB2YWxpZCB2YWx1ZSBvciBhIHBvaW50ZXIgdG8gb25lIG9iamVjdCwgYWNjb3JkaW5nIHRvIHRoZSBsaWJyYXJ5IGZ1bmN0aW9uIGNhbGxlZC4KICoKICogTk9URTogRnVuY3Rpb24gYXJndW1lbnRzIGFyZSBsaW1pdGVkIHRvIGEgbWF4aW11bSBvZiAyMC4KICoKICogQHBhcmFtICRhZGRyZXNzCiAqIEBwYXJhbSBhcnJheSAkYXJncwogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2JfY2FsbF9mdW5jdGlvbigkYWRkcmVzcywgJGFyZ3MgPSBbXSkge30KCi8qKgogKiByZXR1cm5zIGEgcG9pbnRlciB0byBNaWRpT3V0UHJvYyAoY2FuIGFsc28gYmUgdXNlZCBmb3IgTWlkaUluUHJvYywgV2F2ZUluUHJvYywgV2F2ZU91dFByb2MKICogb3IgYW55IHNpbWlsYXIgY2FsbGJhY2spIGZvciB1c2Ugd2l0aCBmdW5jdGlvbnMgbGlrZSBtaWRpT3V0T3Blbi4KICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdiX2dldF9taWRpX2NhbGxiYWNrKCkge30KCi8qKgogKiBFbnVtZXJhdGUgd2luZG93cywgaSB0aGluazogaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLWVudW13aW5kb3dzCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3Yl9nZXRfZW51bV9jYWxsYmFjaygpIHt9CgovKioKICogVW51c2VkLCBpIHRoaW5rIGl0cyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dpbjMyL2FwaS93aW51c2VyL25jLXdpbnVzZXItaG9va3Byb2MKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdiX2dldF9ob29rX2NhbGxiYWNrKCkge30KCi8qKgogKiBEZXN0cm95cyBhIHdpbmRvdyBjcmVhdGVkIGJ5IHdiX2NyZWF0ZV93aW5kb3coKS4KICoKICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gJHdpbmRvdwogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHdiX2Rlc3Ryb3lfd2luZG93KCR3aW5kb3cpIHt9CgovKioKICogR2V0cyB0aGUgZGltZW5zaW9ucyBvZiBhIGNvbnRyb2wsIHdpbmRvdywgaW1hZ2Ugb3Igc3RyaW5nLgogKiBUaGUgaW1hZ2UgaGFuZGxlIG11c3QgaGF2ZSBiZWVuIG9idGFpbmVkIHdpdGggd2JfY3JlYXRlX2ltYWdlKCksIHdiX2NyZWF0ZV9tYXNrKCkgb3Igd2JfbG9hZF9pbWFnZSgpLgogKgogKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYWxseSByZXR1cm5zIGFuIGFycmF5IHdoZXJlIHRoZSBmaXJzdCBlbGVtZW50IGlzIHRoZSB3aWR0aCBhbmQgdGhlIHNlY29uZCBpcyB0aGUgaGVpZ2h0LgogKiBNZWFzdXJlbWVudHMgYXJlIGluIHBpeGVscy4gSWYgcGFyYW0gaXMgVFJVRSwgdGhlIGFyZWEgcmV0dXJuZWQgd2lsbCBub3QgaW5jbHVkZSB0aGUgdGl0bGUgYmFyIGFuZCBib3JkZXJzLgogKiBEZWZhdWx0IGlzIEZBTFNFLgogKgogKiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGludGVnZXIgV0JDX01JTklNSVpFRCBpbnN0ZWFkIG9mIGFuIGFycmF5IGlmIHRoZSByZXF1ZXN0ZWQgd2luZG93IGlzIG1pbmltaXplZCwgb3IgTlVMTCBvbiBlcnJvci4KICoKICogSWYgb2JqZWN0IGlzIGEgTGlzdFZpZXcgaGFuZGxlIGFuZCBwYXJhbSBpcyBUUlVFLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSB3aWR0aHMgb2YgdGhlIGNvbHVtbiBoZWFkZXJzLgogKiBJZiBwYXJhbSBpcyBvbWl0dGVkIG9yIEZBTFNFLCB0aGUgZnVuY3Rpb24gYmVoYXZlcyBub3JtYWxseSBsaWtlIGRlc2NyaWJlZCBhYm92ZQogKgogKiBJZiBvYmplY3QgaXMgYSB0ZXh0IHN0cmluZywgcGFyYW0gaXMgb3B0aW9uYWxseSB1c2VkIHRvIHBhc3MgdGhlIGhhbmRsZSB0byBhIGZvbnQgY3JlYXRlZCB3aXRoIHdiX2NyZWF0ZV9mb250KCkuCiAqIElmIHBhcmFtIGlzIG51bGwgb3Igbm90IHVzZWQsIHRoZSBkZWZhdWx0IGZvbnQgaXMgdXNlZC4gT2JqZWN0IHR5cGVzIGFjY2VwdGVkCiAqCiAqIG9iamVjdCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAqCiAqIEEgY29udHJvbCBoYW5kbGUKICogQSB3aW5kb3cgaGFuZGxlCiAqIEFuIGljb24gaGFuZGxlCiAqIEEgYml0bWFwIGhhbmRsZQogKiBUaGUgbmFtZSBvZiBhIGJpdG1hcCBmaWxlCiAqIFRoZSBuYW1lIG9mIGFuIGljb24gZmlsZQogKiBBIHRleHQgc3RyaW5nCiAqCiAqIEBwYXJhbSAkb2JqZWN0CiAqIEBwYXJhbSBudWxsICRwYXJhbQogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiB3Yl9nZXRfc2l6ZSgkb2JqZWN0LCAkcGFyYW0gPSBudWxsKSB7fQoKLyoqCiAqIFNpemVzIHRoZSBvYmplY3Qgd2JvYmplY3QgdG8gd2lkdGggYW5kIGhlaWdodCBwaXhlbHMuCiAqCiAqIFBhcmFtZXRlcnMgd2lkdGggYW5kIGhlaWdodCBtYXkgYmUgdXNlZCBhcyBmb2xsb3dzOgogKgogKiBQb3NpdGl2ZSBpbnRlZ2VyICAgICB3aW5kb3cgb3IgY29udHJvbCAgIFNldHMgdGhlIHdpbmRvdyBvciBjb250cm9sIHNpemUgdG8gd2lkdGggYW5kIGhlaWdodCBwaXhlbHMuCiAqIFdCQ19OT1JNQUwgICAgICAgICAgIHdpbmRvdyAgICAgICAgICAgICAgUmVzdG9yZXMgdGhlIHdpbmRvdywgaWYgaXQgaXMgbm90IGFscmVhZHkuCiAqIFdCQ19NSU5JTUlaRUQgICAgICAgIHdpbmRvdyAgICAgICAgICAgICAgTWluaW1pemVzIHRoZSB3aW5kb3csIGlmIGl0IGlzIG5vdCBhbHJlYWR5LgogKiBXQkNfTUFYSU1JWkVEICAgICAgICB3aW5kb3cgICAgICAgICAgICAgIE1heGltaXplcyB0aGUgd2luZG93LCBpZiBpdCBpcyBub3QgYWxyZWFkeS4KICogQXJyYXkgb2YgaW50ZWdlcnMgICAgTGlzdFZpZXcgICAgICAgICAgICBDaGFuZ2VzIHRoZSBjb2x1bW4gd2lkdGhzIG9mwqB0aGUgY29udHJvbC4KICoKICogQHBhcmFtICR3Ym9iamVjdAogKiBAcGFyYW0gJHdpZHRoCiAqIEBwYXJhbSBudWxsICRoZWlnaHQKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB3Yl9zZXRfc2l6ZSgkd2JvYmplY3QsICR3aWR0aCwgJGhlaWdodCA9IG51bGwpIHt9CgovKioKICogTW92ZXMgdGhlIG9iamVjdCB3Ym9iamVjdCB0byB0aGUgY29vcmRpbmF0ZXMgeHBvcywgeXBvcyBpbiByZWxhdGlvbiB0byBpdHMgcGFyZW50IHdpbmRvdy4KICogSWYgYm90aCB4cG9zIGFuZCB5cG9zIGhhdmUgdGhlIHZhbHVlIFdCQ19DRU5URVIgb3IgYXJlIG5vdCBnaXZlbiwgdGhlIHdpbmRvdyBpcyBjZW50ZXJlZCBvbiBpdHMgcGFyZW50IHdpbmRvdy4KICoKICogUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gJHdib2JqZWN0CiAqIEBwYXJhbSBudWxsICR4cG9zCiAqIEBwYXJhbSBudWxsICR5cG9zCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2Jfc2V0X3Bvc2l0aW9uKCR3Ym9iamVjdCwgJHhwb3MgPSBudWxsLCAkeXBvcyA9IG51bGwpIHt9CgovKioKICogUmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29udHJvbCBvciB3aW5kb3cgcmVsYXRlZCB0byBpdHMgcGFyZW50LCBpbiBwaXhlbHMuCiAqIFRoZSBmaXJzdCBlbGVtZW50IGlzIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbi4KICogSWYgY2xpZW50YXJlYSBpcyBUUlVFLCB0aGUgYXJlYSByZXR1cm5lZCB3aWxsIG5vdCBpbmNsdWRlIHRoZSB0aXRsZSBiYXIgYW5kIGJvcmRlcnMuCiAqCiAqIFRoZSBkZWZhdWx0IGlzIEZBTFNFLgogKgogKiBAcGFyYW0gJHdib2JqZWN0CiAqIEBwYXJhbSBudWxsICRjbGllbnRhcmVhCiAqCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHdiX2dldF9wb3NpdGlvbigkd2JvYmplY3QsICRjbGllbnRhcmVhID0gbnVsbCkge30KCi8qKgogKiBDcmVhdGVzIGEgd2luZG93IG9mIGNsYXNzIHdjbGFzcy4gQ2xpY2sgaGVyZSBmb3IgYSBsaXN0IG9mIHRoZSBhdmFpbGFibGUgd2luZG93IGNsYXNzZXMuCiAqIFdpbmRvd3MgY3JlYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBkZXN0cm95ZWQgd2l0aCBhIGNhbGwgdG8gd2JfZGVzdHJveV93aW5kb3coKS4KICogT3B0aW9uYWwgc3R5bGUgZmxhZ3MgbWF5IGJlIHBhc3NlZCB0aHJvdWdoIHBhcmFtZXRlciBzdHlsZS4KICogVG8gZW5hYmxlIGFkZGl0aW9uYWwgbWVzc2FnZXMgaW4gYSBwYXJ0aWN1bGFyIHdpbmRvdywgaW5jbHVkZSB0aGUgV0JDX05PVElGWSBzdHlsZSBpbiB0aGUgc3R5bGUgcGFyYW1ldGVyIGFuZCB1c2UgcGFyYW0gdG8gaW5kaWNhdGUKICogd2hpY2ggYWRkaXRpb25hbCBub3RpZmljYXRpb24gbWVzc2FnZXMgeW91IHdhbnQgdG8gcHJvY2Vzcy4KICoKICogVGhpcyBmdW5jdGlvbiBtYXkgc2V0IHRoZSB0ZXh0IGFuZC9vciB0aGUgdG9vbHRpcCAoc21hbGwgaGludCB3aW5kb3cpIG9mIHRoZSB3aW5kb3cgd2hlbiBpdCBpcyBjcmVhdGVkLgogKiBUbyBjcmVhdGUgYSB0b29sdGlwLCB0ZXh0IG11c3QgYmUgYW4gYXJyYXkgd2l0aCB0d28gZWxlbWVudHMuCiAqIFRoZSBmaXJzdCBvbmUgaXMgdGhlIG5ldyBjYXB0aW9uIChvciBOVUxMIGlmIG9uZSBpcyBub3QgcmVxdWlyZWQpIGFuZCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUgbmV3IHRvb2x0aXAgKG9yIE5VTEwgaWYgb25lIGlzIG5vdCByZXF1aXJlZCkuCiAqIEFsbCBjbGFzc2VzIHN1cHBvcnQgdG9vbHRpcHMuCiAqCiAqIFJldHVybnMgdGhlIGhhbmRsZSBvZiB0aGUgbmV3bHkgY3JlYXRlZCB3aW5kb3cgb3IgTlVMTCBvciB6ZXJvIGlmIGFuIGVycm9yIG9jY3Vycy4KICoKICogQHBhcmFtICRwYXJlbnQKICogQHBhcmFtICR3Y2xhc3MKICogQHBhcmFtIG51bGwgJGNhcHRpb24KICogQHBhcmFtIG51bGwgJHhwb3MKICogQHBhcmFtIG51bGwgJHlwb3MKICogQHBhcmFtIG51bGwgJHdpZHRoCiAqIEBwYXJhbSBudWxsICRoZWlnaHQKICogQHBhcmFtIG51bGwgJHN0eWxlCiAqIEBwYXJhbSBudWxsICRwYXJhbQogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2JfY3JlYXRlX3dpbmRvdygkcGFyZW50LCAkd2NsYXNzLCAkY2FwdGlvbiA9IG51bGwsICR4cG9zID0gbnVsbCwgJHlwb3MgPSBudWxsLCAkd2lkdGggPSBudWxsLCAkaGVpZ2h0ID0gbnVsbCwgJHN0eWxlID0gbnVsbCwgJHBhcmFtID0gbnVsbCkge30KCi8qKgogKiBEZXRlY3RzIGEgcnVubmluZyBpbnN0YW5jZSBvZiBhIFdpbkJpbmRlciBhcHBsaWNhdGlvbi4KICoKICogRGV0ZWN0aW5nIHJ1bm5pbmcgaW5zdGFuY2VzCiAqCiAqIEVhY2ggbWFpbiB3aW5kb3cgb2YgYWxsIFdpbkJpbmRlciBhcHBsaWNhdGlvbnMgc3RvcmVzIGEgMzItYml0IGlkZW50aWZpZXIgdGhhdCBpcyBjYWxjdWxhdGVkIGFjY29yZGluZyB0byB0aGUgaW5pdGlhbCB3aW5kb3cgY2FwdGlvbgogKiBhbmQgaXMgdW5pcXVlIHRvIHRoYXQgY2FwdGlvbi4gd2JfZ2V0X2luc3RhbmNlKCkgd2lsbCB0cnkgdG8gZmluZCwgYW1vbmcgYWxsIGN1cnJlbnQgdG9wLWxldmVsIHdpbmRvd3MsIGEgV2luQmluZGVyIHdpbmRvdyB0aGF0IHdhcwogKiBjcmVhdGVkIHdpdGggdGhlIHNhbWUgY2FwdGlvbi4gVGhlIGZ1bmN0aW9uIHJldHVybnMgVFJVRSBpZiBpdCBmaW5kcyB0aGUgZXhpc3Rpbmcgd2luZG93IG9yIEZBTFNFIGlmIGl0IGlzIGRvZXMgbm90LgogKgogKiBUaGUgZnVuY3Rpb24gaXMgZWZmZWN0aXZlIGV2ZW4gb2YgdGhlIGNhcHRpb24gb2YgdGhlIGZpcnN0IGluc3RhbmNlIG9mIHRoZSBhcHBsaWNhdGlvbiBpcyBjaGFuZ2VkIGF0IHJ1bnRpbWUgYmVjYXVzZSB0aGUgMzItYml0IGlkZW50aWZpZXIKICogZG9lcyBub3QgY2hhbmdlIHRocm91Z2hvdXQgdGhlIGxpZmUgb2YgdGhlIGFwcGxpY2F0aW9uLgogKgogKiBJZiBicmluZ3RvZnJvbnQgaXMgc2V0IHRvIFRSVUUsIHRoZSBmdW5jdGlvbiBvcHRpb25hbGx5IHJlc3RvcmVzIHRoZSB3aW5kb3cgKGlmIG1pbmltaXplZCkKICogYW5kIGJyaW5ncyB0aGUgY29ycmVzcG9uZGluZyB3aW5kb3cgdG8gdGhlIGZyb250IG9mIG90aGVyIHdpbmRvd3MuCiAqCiAqIEBwYXJhbSAkY2FwdGlvbgogKiBAcGFyYW0gbnVsbCAkYnJpbmd0b2Zyb250CiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2JfZ2V0X2luc3RhbmNlKCRjYXB0aW9uLCAkYnJpbmd0b2Zyb250ID0gbnVsbCkge30KCi8qKgogKiBSZXR1cm5zIGFuIGFycmF5IHdpdGggYSBsaXN0IG9mIHRoZSBjaGlsZCBjb250cm9scyBpbiB3aW5kb3cgb3IgY29udHJvbCB3Ym9iamVjdC4gRWFjaCBlbGVtZW50IGlzIGFuIGludGVnZXIgaWRlbnRpZmllciB0aGF0IHJlcHJlc2VudHMgYSBXaW5CaW5kZXIgb2JqZWN0LgogKgogKiBAcGFyYW0gJHdib2JqZWN0CiAqCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHdiX2dldF9pdGVtX2xpc3QoJHdib2JqZWN0KSB7fQoKLyoqCiAqIFNldHMgYSBzcGVjaWZpYyBhcmVhIGluIGEgd2luZG93LiBQb3NzaWJsZSB2YWx1ZXMgZm9yIHR5cGUgYXJlOi4KICoKICogV0JDX1RJVExFICAgICAgICBTZXRzIHRoZSBhcmVhIHVzZWQgdG8gZHJhZyBhIGJvcmRlcmxlc3Mgd2luZG93IHdpdGggdGhlIG1vdXNlLgogKgogKiBXQkNfTUlOU0laRSAgICAgIFNldHMgdGhlIG1pbmltdW0gd2luZG93IHNpemUgaW4gYSByZXNpemFibGUgd2luZG93LgogKiAgICAgICAgICAgICAgICAgIFBhcmFtZXRlcnMgeCBhbmQgeSBhcmUgaWdub3JlZC4KICogICAgICAgICAgICAgICAgICBJZiB3aWR0aCBpcyB6ZXJvLCBubyBtaW5pbXVtIGhvcml6b250YWwgZGltZW5zaW9uIGlzIHNldC4KICogICAgICAgICAgICAgICAgICBpZiBoZWlnaHQgaXMgemVybywgbm8gbWluaW11bSB2ZXJ0aWNhbCBkaW1lbnNpb24gaXMgc2V0LgogKgogKiBXQkNfTUFYU0laRSAgICAgIFNldHMgdGhlIG1heGltdW0gd2luZG93IHNpemUgaW4gYSByZXNpemFibGUgd2luZG93LgogKiAgICAgICAgICAgICAgICAgIFBhcmFtZXRlcnMgeCBhbmQgeSBhcmUgaWdub3JlZC4KICogICAgICAgICAgICAgICAgICBJZiB3aWR0aCBpcyB6ZXJvLCBubyBtYXhpbXVtIGhvcml6b250YWwgZGltZW5zaW9uIGlzIHNldC4KICogICAgICAgICAgICAgICAgICBpZiBoZWlnaHQgaXMgemVybywgbm8gbWF4aW11bSB2ZXJ0aWNhbCBkaW1lbnNpb24gaXMgc2V0LgogKgogKiBAcGFyYW0gJHdpbmRvdwogKiBAcGFyYW0gJHR5cGUKICogQHBhcmFtIG51bGwgJHgKICogQHBhcmFtIG51bGwgJHkKICogQHBhcmFtIG51bGwgJHdpZHRoCiAqIEBwYXJhbSBudWxsICRoZWlnaHQKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB3Yl9zZXRfYXJlYSgkd2luZG93LCAkdHlwZSwgJHggPSBudWxsLCAkeSA9IG51bGwsICR3aWR0aCA9IG51bGwsICRoZWlnaHQgPSBudWxsKSB7fQoKLyoqCiAqIERpc3BsYXlzIHRoZSBzdGFuZGFyZCBTZWxlY3QgUGF0aCBkaWFsb2cgYm94LiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBwYXRoLCBpZiBhbnksIG9yIGEgYmxhbmsgc3RyaW5nIGlmIHRoZSBkaWFsb2cgYm94IHdhcyBjYW5jZWxlZC4gUmV0dXJucyBOVUxMIGlmIG5vdCBzdWNjZXNzZnVsLgogKgogKiBQYXJhbWV0ZXJzOgogKgogKiBwYXJlbnQgaXMgYSBoYW5kbGUgdG8gdGhlIFdpbkJpbmRlciBvYmplY3QgdGhhdCB3aWxsIHNlcnZlIGFzIHRoZSBwYXJlbnQgZm9yIHRoZSBkaWFsb2cgYm94LgogKiB0aXRsZSBpcyBhbiBvcHRpb25hbCBzdHJpbmcgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBkaWFsb2cgYm94LgogKiBwYXRoIGlzIGFuIG9wdGlvbmFsIGZvbGRlciB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGRpYWxvZyBib3guCiAqCiAqIEBwYXJhbSAkcGFyZW50CiAqIEBwYXJhbSBudWxsICR0aXRsZQogKiBAcGFyYW0gbnVsbCAkcGF0aAogKgogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gd2Jfc3lzX2RsZ19wYXRoKCRwYXJlbnQsICR0aXRsZSA9IG51bGwsICRwYXRoID0gbnVsbCkge30KCi8qKgogKiBEaXNwbGF5cyB0aGUgc3RhbmRhcmQgU2VsZWN0IENvbG9yIGRpYWxvZyBib3guIFJldHVybnMgYSBSR0IgdmFsdWUgd2hpY2ggaXMgdGhlIHNlbGVjdGVkIGNvbG9yIHZhbHVlIG9yIE5PQ09MT1IgaWYgdGhlIGRpYWxvZyBib3ggd2FzIGNhbmNlbGVkLiBSZXR1cm5zIE5VTEwgaWYgbm90IHN1Y2Nlc3NmdWwuCiAqCiAqIFBhcmFtZXRlcnM6CiAqCiAqIHBhcmVudCBpcyBhIGhhbmRsZSB0byB0aGUgV2luQmluZGVyIG9iamVjdCB0aGF0IHdpbGwgc2VydmUgYXMgdGhlIHBhcmVudCBmb3IgdGhlIGRpYWxvZyBib3guCiAqIHRpdGxlIGlzIGN1cnJlbnRseSBpZ25vcmVkLgogKiBjb2xvciBpcyBhbiBvcHRpb25hbCBSR0IgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBkaWFsb2cgYm94LgogKgogKiBAcGFyYW0gJHBhcmVudAogKiBAcGFyYW0gbnVsbCAkdGl0bGUKICogQHBhcmFtIG51bGwgJGNvbG9yCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3Yl9zeXNfZGxnX2NvbG9yKCRwYXJlbnQsICR0aXRsZSA9IG51bGwsICRjb2xvciA9IG51bGwpIHt9CgovKioKICogQHBhcmFtICRwYXJlbnQKICogQHBhcmFtICRhY2NlbHMKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9zZXRfYWNjZWxfdGFibGUoJHBhcmVudCwgJGFjY2Vscykge30KCi8qKgogKiBAcGFyYW0gJHBhcmVudAogKiBAcGFyYW0gJGNsYXNzCiAqIEBwYXJhbSAkY2FwdGlvbgogKiBAcGFyYW0gJHhwb3MKICogQHBhcmFtICR5cG9zCiAqIEBwYXJhbSAkd2lkdGgKICogQHBhcmFtICRoZWlnaHQKICogQHBhcmFtICRpZAogKiBAcGFyYW0gJHN0eWxlCiAqIEBwYXJhbSAkbHBhcmFtCiAqIEBwYXJhbSAkbnRhYgogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2J0ZW1wX2NyZWF0ZV9jb250cm9sKCRwYXJlbnQsICRjbGFzcywgJGNhcHRpb24sICR4cG9zLCAkeXBvcywgJHdpZHRoLCAkaGVpZ2h0LCAkaWQsICRzdHlsZSwgJGxwYXJhbSwgJG50YWIpIHt9CgovKioKICogQHBhcmFtICRjdHJsCiAqIEBwYXJhbSAkc3RyCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3YnRlbXBfY3JlYXRlX2l0ZW0oJGN0cmwsICRzdHIpIHt9CgovKioKICogQHBhcmFtICRjdHJsCiAqIEBwYXJhbSAkaXRlbXMKICogQHBhcmFtICRjbGVhcgogKiBAcGFyYW0gJHBhcmFtCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3YnRlbXBfY3JlYXRlX3N0YXR1c2Jhcl9pdGVtcygkY3RybCwgJGl0ZW1zLCAkY2xlYXIsICRwYXJhbSkge30KCi8qKgogKiBAcGFyYW0gJGN0cmwKICogQHBhcmFtIG51bGwgJGl0ZW0gLSBpdGVtIGNhbiBhbHNvIGJlIFdCQ19SVEZfVEVYVCB0byBnZXQgdGhlIFJURiBjb2RlIG9mIGFuIFJURiBpbnB1dAogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2J0ZW1wX2dldF90ZXh0KCRjdHJsLCAkaXRlbSA9IG51bGwpIHt9CgovKioKICogQHBhcmFtICRjdHJsCiAqIEBwYXJhbSAkdGV4dAogKiBAcGFyYW0gJGl0ZW0KICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9zZXRfdGV4dCgkY3RybCwgJHRleHQsICRpdGVtKSB7fQoKLyoqCiAqIEBwYXJhbSAkY3RybAogKiBAcGFyYW0gJHNlbGl0ZW1zCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3YnRlbXBfc2VsZWN0X3RhYigkY3RybCwgJHNlbGl0ZW1zKSB7fQoKLyoqCiAqIEBwYXJhbSAkY3RybAogKiBAcGFyYW0gJHZhbHVlCiAqIEBwYXJhbSAkaXRlbQogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2J0ZW1wX3NldF92YWx1ZSgkY3RybCwgJHZhbHVlLCAkaXRlbSA9IG51bGwpIHt9CgovKioKICogQHBhcmFtICRjdHJsCiAqIEBwYXJhbSAkaXRlbQogKiBAcGFyYW0gJGltYWdlCiAqIEBwYXJhbSAkdmFsdWUKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9jcmVhdGVfbGlzdHZpZXdfaXRlbSgkY3RybCwgJGl0ZW0sICRpbWFnZSwgJHZhbHVlKSB7fQoKLyoqCiAqIEBwYXJhbSAkY3RybAogKiBAcGFyYW0gJGluZGV4CiAqIEBwYXJhbSAkdmFsdWUKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9zZXRfbGlzdHZpZXdfaXRlbV9jaGVja2VkKCRjdHJsLCAkaW5kZXgsICR2YWx1ZSkge30KCi8qKgogKiBSZXR1cm4gVFJVRSBpZiB0aGUgaXRlbSdzIGNoZWNrYm94IGlzIGNoZWNrZWQKICogQHBhcmFtICRjdHJsCiAqIEBwYXJhbSAkaXRlbQogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHdidGVtcF9nZXRfbGlzdHZpZXdfaXRlbV9jaGVja2VkKCRjdHJsLCAkaXRlbSkge30KCi8qKgogKiBAcGFyYW0gJGN0cmwKICogQHBhcmFtICRpdGVtCiAqIEBwYXJhbSAkc3ViaXRlbQogKiBAcGFyYW0gJHRleHQKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9zZXRfbGlzdHZpZXdfaXRlbV90ZXh0KCRjdHJsLCAkaXRlbSwgJHN1Yml0ZW0sICR0ZXh0KSB7fQoKLyoqCiAqIEBwYXJhbSAkY3RybAogKiBAcGFyYW0gJGl0ZW0KICoKICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24gd2J0ZW1wX2dldF9saXN0dmlld190ZXh0KCRjdHJsLCAkaXRlbSkge30KCi8qKgogKiBHZXQgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBwd2JvIGNvbnRyb2wsCiAqCiAqIEBwYXJhbSAkY3RybAogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2J0ZW1wX2dldF9saXN0dmlld19jb2x1bW5zKCRjdHJsKSB7fQoKLyoqCiAqIEBwYXJhbSAkY3RybAogKiBAcGFyYW0gJGkKICogQHBhcmFtICR0ZXh0CiAqIEBwYXJhbSAkd2lkdGggLSBJZiBuV2lkdGggaXMgbmVnYXRpdmUsIGNhbGN1bGF0ZSB3aWR0aCBhdXRvbWF0aWNhbGx5CiAqIEBwYXJhbSAkYWxpZ24gLSBXQkNfTEVGVCwgV0JDX1JJR0hULCBXQkNfQ0VOVEVSCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3YnRlbXBfY3JlYXRlX2xpc3R2aWV3X2NvbHVtbigkY3RybCwgJGksICR0ZXh0LCAkd2lkdGgsICRhbGlnbikge30KCi8qKgogKiBAcGFyYW0gJGN0cmwKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9jbGVhcl9saXN0dmlld19jb2x1bW5zKCRjdHJsKSB7fQoKLyoqCiAqIEBwYXJhbSAkY3RybAogKiBAcGFyYW0gJGl0ZW0KICogQHBhcmFtICRzZWxlY3RlZAogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2J0ZW1wX3NlbGVjdF9saXN0dmlld19pdGVtKCRjdHJsLCAkaXRlbSwgJHNlbGVjdGVkKSB7fQoKLyoqCiAqIEBwYXJhbSAkY3RybAogKiBAcGFyYW0gJGJvb2wKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9zZWxlY3RfYWxsX2xpc3R2aWV3X2l0ZW1zKCRjdHJsLCAkYm9vbCkge30KCi8qKgogKiBAcGFyYW0gJHBhcmVudAogKiBAcGFyYW0gJGNhcHRpb24KICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9jcmVhdGVfbWVudSgkcGFyZW50LCAkY2FwdGlvbikge30KCi8qKgogKiBAcGFyYW0gJGN0cmwKICogQHBhcmFtICRpdGVtCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3YnRlbXBfZ2V0X21lbnVfaXRlbV9jaGVja2VkKCRjdHJsLCAkaXRlbSkge30KCi8qKgogKiBAcGFyYW0gJGN0cmwKICogQHBhcmFtICRzZWxpdGVtcwogKiBAcGFyYW0gJHNlbGVjdGVkCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3YnRlbXBfc2V0X21lbnVfaXRlbV9jaGVja2VkKCRjdHJsLCAkc2VsaXRlbXMsICRzZWxlY3RlZCkge30KCi8qKgogKiBAcGFyYW0gJGN0cmwKICogQHBhcmFtIGludCAkaXRlbQogKiBAcGFyYW0gYm9vbCAkc2VsZWN0ZWQKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9zZXRfbWVudV9pdGVtX3NlbGVjdGVkKCRjdHJsLCAkaXRlbSwgJHNlbGVjdGVkKSB7fQoKLyoqCiAqIEBwYXJhbSAkY3RybAogKiBAcGFyYW0gJGl0ZW0KICogQHBhcmFtICRpbWFnZUhhbmRsZQogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gd2J0ZW1wX3NldF9tZW51X2l0ZW1faW1hZ2UoJGN0cmwsICRpdGVtLCAkaW1hZ2VIYW5kbGUpIHt9CgovKioKICogQHBhcmFtICRwYXJlbnQKICogQHBhcmFtICRjYXB0aW9uCiAqIEBwYXJhbSAkd2lkdGgKICogQHBhcmFtICRoZWlnaHQKICogQHBhcmFtICRscGFyYW0KICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9jcmVhdGVfdG9vbGJhcigkcGFyZW50LCAkY2FwdGlvbiwgJHdpZHRoLCAkaGVpZ2h0LCAkbHBhcmFtKSB7fQoKLyoqCiAqIEBwYXJhbSAkY3RybAogKiBAcGFyYW0gJG5hbWUKICogQHBhcmFtICR2YWx1ZQogKiBAcGFyYW0gJHdoZXJlCiAqIEBwYXJhbSAkaW1hZ2VfaW5kZXgKICogQHBhcmFtICRzZWxlY3RlZF9pbWFnZQogKiBAcGFyYW0gJHNlbGVjdGVkX2ltYWdlX2luZGV4CiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3YnRlbXBfY3JlYXRlX3RyZWV2aWV3X2l0ZW0oJGN0cmwsICRuYW1lLCAkdmFsdWUsICR3aGVyZSA9IDAsICRpbWFnZV9pbmRleCA9IDAsICRzZWxlY3RlZF9pbWFnZSA9IDAsICRzZWxlY3RlZF9pbWFnZV9pbmRleCA9IDApIHt9CgovKioKICogQHBhcmFtICRjdHJsCiAqIEBwYXJhbSAkc2VsaXRlbXMKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9zZXRfdHJlZXZpZXdfaXRlbV9zZWxlY3RlZCgkY3RybCwgJHNlbGl0ZW1zKSB7fQoKLyoqCiAqIEBwYXJhbSAkY3RybAogKiBAcGFyYW0gJGl0ZW0KICogQHBhcmFtICR0ZXh0CiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gd2J0ZW1wX3NldF90cmVldmlld19pdGVtX3RleHQoJGN0cmwsICRpdGVtLCAkdGV4dCkge30KCi8qKgogKiBAcGFyYW0gJGN0cmwKICogQHBhcmFtICRpdGVtCiAqIEBwYXJhbSAkdmFsdWUKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9zZXRfdHJlZXZpZXdfaXRlbV92YWx1ZSgkY3RybCwgJGl0ZW0sICR2YWx1ZSkge30KCi8qKgogKiBAcGFyYW0gJGN0cmwKICogQHBhcmFtICRpdGVtCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3YnRlbXBfZ2V0X3RyZWV2aWV3X2l0ZW1fdGV4dCgkY3RybCwgJGl0ZW0pIHt9CgovKioKICogQHBhcmFtICRwYXJlbnQKICogQHBhcmFtIG51bGwgJHRpdGxlCiAqIEBwYXJhbSBudWxsICRmaWx0ZXIKICogQHBhcmFtIG51bGwgJHBhdGgKICogQHBhcmFtIG51bGwgJGZsYWdzCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB3YnRlbXBfc3lzX2RsZ19vcGVuKCRwYXJlbnQsICR0aXRsZSA9IG51bGwsICRmaWx0ZXIgPSBudWxsLCAkcGF0aCA9IG51bGwsICRmbGFncyA9IG51bGwpIHt9CgovKioKICogQHBhcmFtICR3Yk9iagogKiBAcGFyYW0gc3RyaW5nICR0aXRsZQogKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXIKICogQHBhcmFtIHN0cmluZyAkcGF0aAogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogKiBAcGFyYW0gc3RyaW5nICRkZWZleHQKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHdidGVtcF9zeXNfZGxnX3NhdmUoJHdiT2JqLCAkdGl0bGUgPSAnJywgJGZpbHRlciA9ICcnLCAkcGF0aCA9ICcnLCAkZmlsZW5hbWUgPSAnJywgJGRlZmV4dCA9ICcnKSB7fQo8P3BocAoKLy8gU3RhcnQgb2YgcGNudGwgdi4KdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxMYW5ndWFnZUxldmVsVHlwZUF3YXJlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFBocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXFB1cmU7CgovKioKICogRm9ya3MgdGhlIGN1cnJlbnRseSBydW5uaW5nIHByb2Nlc3MKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wY250bC1mb3JrLnBocAogKiBAcmV0dXJuIGludCBPbiBzdWNjZXNzLCB0aGUgUElEIG9mIHRoZSBjaGlsZCBwcm9jZXNzIGlzIHJldHVybmVkIGluIHRoZQogKiBwYXJlbnQncyB0aHJlYWQgb2YgZXhlY3V0aW9uLCBhbmQgYSAwIGlzIHJldHVybmVkIGluIHRoZSBjaGlsZCdzCiAqIHRocmVhZCBvZiBleGVjdXRpb24uIE9uIGZhaWx1cmUsIGEgLTEgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGUKICogcGFyZW50J3MgY29udGV4dCwgbm8gY2hpbGQgcHJvY2VzcyB3aWxsIGJlIGNyZWF0ZWQsIGFuZCBhIFBIUAogKiBlcnJvciBpcyByYWlzZWQuCiAqLwpmdW5jdGlvbiBwY250bF9mb3JrKCk6IGludCB7fQoKLyoqCiAqIFdhaXRzIG9uIG9yIHJldHVybnMgdGhlIHN0YXR1cyBvZiBhIGZvcmtlZCBjaGlsZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBjbnRsLXdhaXRwaWQucGhwCiAqIEBwYXJhbSBpbnQgJHByb2Nlc3NfaWQgPHA+CiAqIFRoZSB2YWx1ZSBvZiA8aT5waWQ8L2k+IGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICogPHRhYmxlPgogKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIDxpPnBpZDwvaT4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPiZsdDsgLTE8L3RkPgogKiA8dGQ+CiAqIHdhaXQgZm9yIGFueSBjaGlsZCBwcm9jZXNzIHdob3NlIHByb2Nlc3MgZ3JvdXAgSUQgaXMgZXF1YWwgdG8KICogdGhlIGFic29sdXRlIHZhbHVlIG9mIDxpPnBpZDwvaT4uCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4tMTwvdGQ+CiAqIDx0ZD4KICogd2FpdCBmb3IgYW55IGNoaWxkIHByb2Nlc3M7IHRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3VyIHRoYXQKICogdGhlIHdhaXQgZnVuY3Rpb24gZXhoaWJpdHMuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4wPC90ZD4KICogPHRkPgogKiB3YWl0IGZvciBhbnkgY2hpbGQgcHJvY2VzcyB3aG9zZSBwcm9jZXNzIGdyb3VwIElEIGlzIGVxdWFsIHRvCiAqIHRoYXQgb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcy4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPiZndDsgMDwvdGQ+CiAqIDx0ZD4KICogd2FpdCBmb3IgdGhlIGNoaWxkIHdob3NlIHByb2Nlc3MgSUQgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIG9mCiAqIDxpPnBpZDwvaT4uCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqIDwvcD4KICogPHA+CiAqIFNwZWNpZnlpbmcgLTEgYXMgdGhlIDxpPnBpZDwvaT4gaXMKICogZXF1aXZhbGVudCB0byB0aGUgZnVuY3Rpb25hbGl0eSA8Yj5wY250bF93YWl0PC9iPiBwcm92aWRlcwogKiAobWludXMgPGk+b3B0aW9uczwvaT4pLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJiRzdGF0dXMgPHA+CiAqIDxiPnBjbnRsX3dhaXRwaWQ8L2I+IHdpbGwgc3RvcmUgc3RhdHVzIGluZm9ybWF0aW9uCiAqIGluIHRoZSA8aT5zdGF0dXM8L2k+IHBhcmFtZXRlciB3aGljaCBjYW4gYmUKICogZXZhbHVhdGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogKiA8Yj5wY250bF93aWZleGl0ZWQ8L2I+LAogKiA8Yj5wY250bF93aWZzdG9wcGVkPC9iPiwKICogPGI+cGNudGxfd2lmc2lnbmFsZWQ8L2I+LAogKiA8Yj5wY250bF93ZXhpdHN0YXR1czwvYj4sCiAqIDxiPnBjbnRsX3d0ZXJtc2lnPC9iPiBhbmQKICogPGI+cGNudGxfd3N0b3BzaWc8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIFRoZSB2YWx1ZSBvZiA8aT5vcHRpb25zPC9pPiBpcyB0aGUgdmFsdWUgb2YgemVybwogKiBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgdHdvIGdsb2JhbCBjb25zdGFudHMKICogT1InZWQgdG9nZXRoZXI6CiAqIDx0YWJsZT4KICogcG9zc2libGUgdmFsdWVzIGZvciA8aT5vcHRpb25zPC9pPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+V05PSEFORzwvdGQ+CiAqIDx0ZD4KICogcmV0dXJuIGltbWVkaWF0ZWx5IGlmIG5vIGNoaWxkIGhhcyBleGl0ZWQuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5XVU5UUkFDRUQ8L3RkPgogKiA8dGQ+CiAqIHJldHVybiBmb3IgY2hpbGRyZW4gd2hpY2ggYXJlIHN0b3BwZWQsIGFuZCB3aG9zZSBzdGF0dXMgaGFzCiAqIG5vdCBiZWVuIHJlcG9ydGVkLgogKiA8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAmJHJlc291cmNlX3VzYWdlCiAqIEByZXR1cm4gaW50IDxiPnBjbnRsX3dhaXRwaWQ8L2I+IHJldHVybnMgdGhlIHByb2Nlc3MgSUQgb2YgdGhlCiAqIGNoaWxkIHdoaWNoIGV4aXRlZCwgLTEgb24gZXJyb3Igb3IgemVybyBpZiA8Yj5XTk9IQU5HPC9iPiB3YXMgdXNlZCBhbmQgbm8KICogY2hpbGQgd2FzIGF2YWlsYWJsZQogKi8KZnVuY3Rpb24gcGNudGxfd2FpdHBpZCgKICAgIGludCAkcHJvY2Vzc19pZCwKICAgICYkc3RhdHVzLAogICAgaW50ICRmbGFncyA9IDAsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjAnKV0gJiRyZXNvdXJjZV91c2FnZSA9IFtdCik6IGludCB7fQoKLyoqCiAqIFdhaXRzIG9uIG9yIHJldHVybnMgdGhlIHN0YXR1cyBvZiBhIGZvcmtlZCBjaGlsZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBjbnRsLXdhaXQucGhwCiAqIEBwYXJhbSBpbnQgJiRzdGF0dXMgPHA+CiAqIDxiPnBjbnRsX3dhaXQ8L2I+IHdpbGwgc3RvcmUgc3RhdHVzIGluZm9ybWF0aW9uCiAqIGluIHRoZSA8aT5zdGF0dXM8L2k+IHBhcmFtZXRlciB3aGljaCBjYW4gYmUKICogZXZhbHVhdGVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogKiA8Yj5wY250bF93aWZleGl0ZWQ8L2I+LAogKiA8Yj5wY250bF93aWZzdG9wcGVkPC9iPiwKICogPGI+cGNudGxfd2lmc2lnbmFsZWQ8L2I+LAogKiA8Yj5wY250bF93ZXhpdHN0YXR1czwvYj4sCiAqIDxiPnBjbnRsX3d0ZXJtc2lnPC9iPiBhbmQKICogPGI+cGNudGxfd3N0b3BzaWc8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIElmIHdhaXQzIGlzIGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbSAobW9zdGx5IEJTRC1zdHlsZSBzeXN0ZW1zKSwgeW91IGNhbgogKiBwcm92aWRlIHRoZSBvcHRpb25hbCA8aT5mbGFnczwvaT4gcGFyYW1ldGVyLiBJZiB0aGlzCiAqIHBhcmFtZXRlciBpcyBub3QgcHJvdmlkZWQsIHdhaXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgc3lzdGVtIGNhbGwuIElmCiAqIHdhaXQzIGlzIG5vdCBhdmFpbGFibGUsIHByb3ZpZGluZyBhIHZhbHVlIGZvciA8aT5mbGFncwogKiA8L2k+IHdpbGwgaGF2ZSBubyBlZmZlY3QuIFRoZSB2YWx1ZSBvZiA8aT5mbGFncwogKiA8L2k+IGlzIHRoZSB2YWx1ZSBvZiB6ZXJvIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyB0d28gY29uc3RhbnRzCiAqIE9SJ2VkIHRvZ2V0aGVyOgogKiA8dGFibGU+CiAqIFBvc3NpYmxlIHZhbHVlcyBmb3IgPGk+ZmxhZ3M8L2k+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5XTk9IQU5HPC90ZD4KICogPHRkPgogKiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgbm8gY2hpbGQgaGFzIGV4aXRlZC4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPldVTlRSQUNFRDwvdGQ+CiAqIDx0ZD4KICogUmV0dXJuIGZvciBjaGlsZHJlbiB3aGljaCBhcmUgc3RvcHBlZCwgYW5kIHdob3NlIHN0YXR1cyBoYXMKICogbm90IGJlZW4gcmVwb3J0ZWQuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICYkcmVzb3VyY2VfdXNhZ2UKICogQHJldHVybiBpbnQgPGI+cGNudGxfd2FpdDwvYj4gcmV0dXJucyB0aGUgcHJvY2VzcyBJRCBvZiB0aGUKICogY2hpbGQgd2hpY2ggZXhpdGVkLCAtMSBvbiBlcnJvciBvciB6ZXJvIGlmIFdOT0hBTkcgd2FzIHByb3ZpZGVkIGFzIGFuCiAqIG9wdGlvbiAob24gd2FpdDMtYXZhaWxhYmxlIHN5c3RlbXMpIGFuZCBubyBjaGlsZCB3YXMgYXZhaWxhYmxlLgogKi8KZnVuY3Rpb24gcGNudGxfd2FpdCgKICAgICYkc3RhdHVzLAogICAgaW50ICRmbGFncyA9IDAsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjAnKV0gJiRyZXNvdXJjZV91c2FnZQo9IFtdCik6IGludCB7fQoKLyoqCiAqIEluc3RhbGxzIGEgc2lnbmFsIGhhbmRsZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wY250bC1zaWduYWwucGhwCiAqIEBwYXJhbSBpbnQgJHNpZ25hbCA8cD4KICogVGhlIHNpZ25hbCBudW1iZXIuCiAqIDwvcD4KICogQHBhcmFtIGNhbGxhYmxlfGludCAkaGFuZGxlciA8cD4KICogVGhlIHNpZ25hbCBoYW5kbGVyLiBUaGlzIG1heSBiZSBlaXRoZXIgYSBjYWxsYWJsZSwgd2hpY2gKICogd2lsbCBiZSBpbnZva2VkIHRvIGhhbmRsZSB0aGUgc2lnbmFsLCBvciBlaXRoZXIgb2YgdGhlIHR3byBnbG9iYWwKICogY29uc3RhbnRzIDxiPlNJR19JR048L2I+IG9yIDxiPlNJR19ERkw8L2I+LAogKiB3aGljaCB3aWxsIGlnbm9yZSB0aGUgc2lnbmFsIG9yIHJlc3RvcmUgdGhlIGRlZmF1bHQgc2lnbmFsIGhhbmRsZXIKICogcmVzcGVjdGl2ZWx5LgogKiA8L3A+CiAqIDxwPgogKiBJZiBhIGNhbGxhYmxlIGlzIGdpdmVuLCBpdCBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nCiAqIHNpZ25hdHVyZToKICogPC9wPgogKiA8cD4KICogdm9pZDxiPmhhbmRsZXI8L2I+CiAqIDxiPmludDxpPnNpZ25vPC9pPjwvYj4KICogPGk+c2lnbm88L2k+CiAqIFRoZSBzaWduYWwgYmVpbmcgaGFuZGxlZC48L3A+CiAqIEBwYXJhbSBib29sICRyZXN0YXJ0X3N5c2NhbGxzIFtvcHRpb25hbF0gPHA+CiAqIFNwZWNpZmllcyB3aGV0aGVyIHN5c3RlbSBjYWxsIHJlc3RhcnRpbmcgc2hvdWxkIGJlIHVzZWQgd2hlbiB0aGlzCiAqIHNpZ25hbCBhcnJpdmVzLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcGNudGxfc2lnbmFsKGludCAkc2lnbmFsLCAkaGFuZGxlciwgYm9vbCAkcmVzdGFydF9zeXNjYWxscyA9IHRydWUpOiBib29sIHt9CgovKioKICogQ2FsbHMgc2lnbmFsIGhhbmRsZXJzIGZvciBwZW5kaW5nIHNpZ25hbHMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wY250bC1zaWduYWwtZGlzcGF0Y2gucGhwCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcGNudGxfc2lnbmFsX2Rpc3BhdGNoKCk6IGJvb2wge30KCi8qKgogKiBDaGVja3MgaWYgc3RhdHVzIGNvZGUgcmVwcmVzZW50cyBhIG5vcm1hbCBleGl0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGNudGwtd2lmZXhpdGVkLnBocAogKiBAcGFyYW0gaW50ICRzdGF0dXMgPHA+VGhlIDxpPnN0YXR1czwvaT4KICogcGFyYW1ldGVyIGlzIHRoZSBzdGF0dXMgcGFyYW1ldGVyIHN1cHBsaWVkIHRvIGEgc3VjY2Vzc2Z1bAogKiBjYWxsIHRvIDxiPnBjbnRsX3dhaXRwaWQ8L2I+LjwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIHRoZSBjaGlsZCBzdGF0dXMgY29kZSByZXByZXNlbnRzIGEgbm9ybWFsIGV4aXQsIDxiPkZBTFNFPC9iPgogKiBvdGhlcndpc2UuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIHBjbnRsX3dpZmV4aXRlZChpbnQgJHN0YXR1cyk6IGJvb2wge30KCi8qKgogKiBDaGVja3Mgd2hldGhlciB0aGUgY2hpbGQgcHJvY2VzcyBpcyBjdXJyZW50bHkgc3RvcHBlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBjbnRsLXdpZnN0b3BwZWQucGhwCiAqIEBwYXJhbSBpbnQgJHN0YXR1cyA8cD5UaGUgPGk+c3RhdHVzPC9pPgogKiBwYXJhbWV0ZXIgaXMgdGhlIHN0YXR1cyBwYXJhbWV0ZXIgc3VwcGxpZWQgdG8gYSBzdWNjZXNzZnVsCiAqIGNhbGwgdG8gPGI+cGNudGxfd2FpdHBpZDwvYj4uPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlIGNoaWxkIHByb2Nlc3Mgd2hpY2ggY2F1c2VkIHRoZSByZXR1cm4gaXMKICogY3VycmVudGx5IHN0b3BwZWQsIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIHBjbnRsX3dpZnN0b3BwZWQoaW50ICRzdGF0dXMpOiBib29sIHt9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgdGhlIHN0YXR1cyBjb2RlIHJlcHJlc2VudHMgYSB0ZXJtaW5hdGlvbiBkdWUgdG8gYSBzaWduYWwKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wY250bC13aWZzaWduYWxlZC5waHAKICogQHBhcmFtIGludCAkc3RhdHVzIDxwPlRoZSA8aT5zdGF0dXM8L2k+CiAqIHBhcmFtZXRlciBpcyB0aGUgc3RhdHVzIHBhcmFtZXRlciBzdXBwbGllZCB0byBhIHN1Y2Nlc3NmdWwKICogY2FsbCB0byA8Yj5wY250bF93YWl0cGlkPC9iPi48L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiB0aGUgY2hpbGQgcHJvY2VzcyBleGl0ZWQgYmVjYXVzZSBvZiBhIHNpZ25hbCB3aGljaCB3YXMKICogbm90IGNhdWdodCwgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICovCiNbUHVyZV0KZnVuY3Rpb24gcGNudGxfd2lmc2lnbmFsZWQoaW50ICRzdGF0dXMpOiBib29sIHt9CgovKioKICogUmV0dXJucyB0aGUgcmV0dXJuIGNvZGUgb2YgYSB0ZXJtaW5hdGVkIGNoaWxkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGNudGwtd2V4aXRzdGF0dXMucGhwCiAqIEBwYXJhbSBpbnQgJHN0YXR1cyA8cD5UaGUgPGk+c3RhdHVzPC9pPgogKiBwYXJhbWV0ZXIgaXMgdGhlIHN0YXR1cyBwYXJhbWV0ZXIgc3VwcGxpZWQgdG8gYSBzdWNjZXNzZnVsCiAqIGNhbGwgdG8gPGI+cGNudGxfd2FpdHBpZDwvYj4uPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSB0aGUgcmV0dXJuIGNvZGUsIGFzIGFuIGludGVnZXIuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIHBjbnRsX3dleGl0c3RhdHVzKGludCAkc3RhdHVzKTogaW50fGZhbHNlIHt9CgovKioKICogQHBhcmFtIGludCAkc3RhdHVzCiAqIEByZXR1cm4gYm9vbAogKi8KI1tQdXJlXQpmdW5jdGlvbiBwY250bF93aWZjb250aW51ZWQoaW50ICRzdGF0dXMpOiBib29sIHt9CgovKioKICogUmV0dXJucyB0aGUgc2lnbmFsIHdoaWNoIGNhdXNlZCB0aGUgY2hpbGQgdG8gdGVybWluYXRlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGNudGwtd3Rlcm1zaWcucGhwCiAqIEBwYXJhbSBpbnQgJHN0YXR1cyA8cD5UaGUgPGk+c3RhdHVzPC9pPgogKiBwYXJhbWV0ZXIgaXMgdGhlIHN0YXR1cyBwYXJhbWV0ZXIgc3VwcGxpZWQgdG8gYSBzdWNjZXNzZnVsCiAqIGNhbGwgdG8gPGI+cGNudGxfd2FpdHBpZDwvYj4uPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSB0aGUgc2lnbmFsIG51bWJlciwgYXMgYW4gaW50ZWdlci4KICovCiNbUHVyZV0KZnVuY3Rpb24gcGNudGxfd3Rlcm1zaWcoaW50ICRzdGF0dXMpOiBpbnR8ZmFsc2Uge30KCi8qKgogKiBSZXR1cm5zIHRoZSBzaWduYWwgd2hpY2ggY2F1c2VkIHRoZSBjaGlsZCB0byBzdG9wCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGNudGwtd3N0b3BzaWcucGhwCiAqIEBwYXJhbSBpbnQgJHN0YXR1cyA8cD5UaGUgPGk+c3RhdHVzPC9pPgogKiBwYXJhbWV0ZXIgaXMgdGhlIHN0YXR1cyBwYXJhbWV0ZXIgc3VwcGxpZWQgdG8gYSBzdWNjZXNzZnVsCiAqIGNhbGwgdG8gPGI+cGNudGxfd2FpdHBpZDwvYj4uPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSB0aGUgc2lnbmFsIG51bWJlci4KICovCiNbUHVyZV0KZnVuY3Rpb24gcGNudGxfd3N0b3BzaWcoaW50ICRzdGF0dXMpOiBpbnR8ZmFsc2Uge30KCi8qKgogKiBFeGVjdXRlcyBzcGVjaWZpZWQgcHJvZ3JhbSBpbiBjdXJyZW50IHByb2Nlc3Mgc3BhY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wY250bC1leGVjLnBocAogKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogKiA8aT5wYXRoPC9pPiBtdXN0IGJlIHRoZSBwYXRoIHRvIGEgYmluYXJ5IGV4ZWN1dGFibGUgb3IgYQogKiBzY3JpcHQgd2l0aCBhIHZhbGlkIHBhdGggcG9pbnRpbmcgdG8gYW4gZXhlY3V0YWJsZSBpbiB0aGUgc2hlYmFuZyAoCiAqICMhL3Vzci9sb2NhbC9iaW4vcGVybCBmb3IgZXhhbXBsZSkgYXMgdGhlIGZpcnN0IGxpbmUuIFNlZSB5b3VyIHN5c3RlbSdzCiAqIG1hbiBleGVjdmUoMikgcGFnZSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJGFyZ3MgPHA+CiAqIDxpPmFyZ3M8L2k+IGlzIGFuIGFycmF5IG9mIGFyZ3VtZW50IHN0cmluZ3MgcGFzc2VkIHRvIHRoZQogKiBwcm9ncmFtLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkZW52X3ZhcnMgPHA+CiAqIDxpPmVudnM8L2k+IGlzIGFuIGFycmF5IG9mIHN0cmluZ3Mgd2hpY2ggYXJlIHBhc3NlZCBhcwogKiBlbnZpcm9ubWVudCB0byB0aGUgcHJvZ3JhbS4gVGhlIGFycmF5IGlzIGluIHRoZSBmb3JtYXQgb2YgbmFtZSA9PiB2YWx1ZSwKICogdGhlIGtleSBiZWluZyB0aGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBhbmQgdGhlIHZhbHVlIGJlaW5nCiAqIHRoZSB2YWx1ZSBvZiB0aGF0IHZhcmlhYmxlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5GQUxTRTwvYj4gb24gZXJyb3IgYW5kIGRvZXMgbm90IHJldHVybiBvbiBzdWNjZXNzLgogKi8KZnVuY3Rpb24gcGNudGxfZXhlYyhzdHJpbmcgJHBhdGgsIGFycmF5ICRhcmdzID0gW10sIGFycmF5ICRlbnZfdmFycyA9IFtdKTogYm9vbCB7fQoKLyoqCiAqIFNldCBhbiBhbGFybSBjbG9jayBmb3IgZGVsaXZlcnkgb2YgYSBzaWduYWwKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wY250bC1hbGFybS5waHAKICogQHBhcmFtIGludCAkc2Vjb25kcyA8cD4KICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQuIElmIDxpPnNlY29uZHM8L2k+IGlzCiAqIHplcm8sIG5vIG5ldyBhbGFybSBpcyBjcmVhdGVkLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IHRoZSB0aW1lIGluIHNlY29uZHMgdGhhdCBhbnkgcHJldmlvdXNseSBzY2hlZHVsZWQgYWxhcm0gaGFkCiAqIHJlbWFpbmluZyBiZWZvcmUgaXQgd2FzIHRvIGJlIGRlbGl2ZXJlZCwgb3IgMCBpZiB0aGVyZQogKiB3YXMgbm8gcHJldmlvdXNseSBzY2hlZHVsZWQgYWxhcm0uCiAqLwpmdW5jdGlvbiBwY250bF9hbGFybShpbnQgJHNlY29uZHMpOiBpbnQge30KCi8qKgogKiBSZXRyaWV2ZSB0aGUgZXJyb3IgbnVtYmVyIHNldCBieSB0aGUgbGFzdCBwY250bCBmdW5jdGlvbiB3aGljaCBmYWlsZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wY250bC1nZXQtbGFzdC1lcnJvci5waHAKICogQHJldHVybiBpbnQgZXJyb3IgY29kZS4KICogQHNpbmNlIDUuMy40CiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIHBjbnRsX2dldF9sYXN0X2Vycm9yKCk6IGludCB7fQoKLyoqCiAqIEFsaWFzIG9mIDxiPnBjbnRsX2dldF9sYXN0X2Vycm9yPC9iPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBjbnRsLWVycm5vLnBocAogKiBAcmV0dXJuIGludCBlcnJvciBjb2RlLgogKiBAc2luY2UgNS4zLjQKICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gcGNudGxfZXJybm8oKTogaW50IHt9CgovKioKICogUmV0cmlldmUgdGhlIHN5c3RlbSBlcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZXJybm8KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wY250bC1zdHJlcnJvci5waHAKICogQHBhcmFtIGludCAkZXJyb3JfY29kZSA8cD4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBlcnJvciBkZXNjcmlwdGlvbiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS4zLjQKICovCiNbUHVyZV0KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAic3RyaW5nIl0sIGRlZmF1bHQ6ICJzdHJpbmd8ZmFsc2UiKV0KZnVuY3Rpb24gcGNudGxfc3RyZXJyb3IoaW50ICRlcnJvcl9jb2RlKTogZmFsc2V8c3RyaW5nIHt9CgovKioKICogR2V0IHRoZSBwcmlvcml0eSBvZiBhbnkgcHJvY2VzcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBjbnRsLWdldHByaW9yaXR5LnBocAogKiBAcGFyYW0gaW50fG51bGwgJHByb2Nlc3NfaWQgW29wdGlvbmFsXSA8cD4KICogSWYgbm90IHNwZWNpZmllZCwgdGhlIHBpZCBvZiB0aGUgY3VycmVudCBwcm9jZXNzICAoZ2V0bXlwaWQoKSkgaXMgdXNlZC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtb2RlIFtvcHRpb25hbF0gPHA+CiAqIE9uZSBvZiA8Yj5QUklPX1BHUlA8L2I+LCA8Yj5QUklPX1VTRVI8L2I+CiAqIG9yIDxiPlBSSU9fUFJPQ0VTUzwvYj4uCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgPGI+cGNudGxfZ2V0cHJpb3JpdHk8L2I+IHJldHVybnMgdGhlIHByaW9yaXR5IG9mIHRoZSBwcm9jZXNzCiAqIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4gQSBsb3dlciBudW1lcmljYWwgdmFsdWUgY2F1c2VzIG1vcmUgZmF2b3JhYmxlCiAqIHNjaGVkdWxpbmcuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIHBjbnRsX2dldHByaW9yaXR5KD9pbnQgJHByb2Nlc3NfaWQsIGludCAkbW9kZSA9IFBSSU9fUFJPQ0VTUyk6IGludHxmYWxzZSB7fQoKLyoqCiAqIENoYW5nZSB0aGUgcHJpb3JpdHkgb2YgYW55IHByb2Nlc3MKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wY250bC1zZXRwcmlvcml0eS5waHAKICogQHBhcmFtIGludCAkcHJpb3JpdHkgPHA+CiAqIDxpPnByaW9yaXR5PC9pPiBpcyBnZW5lcmFsbHkgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UKICogLTIwIHRvIDIwLiBUaGUgZGVmYXVsdCBwcmlvcml0eQogKiBpcyAwIHdoaWxlIGEgbG93ZXIgbnVtZXJpY2FsIHZhbHVlIGNhdXNlcyBtb3JlCiAqIGZhdm9yYWJsZSBzY2hlZHVsaW5nLiBCZWNhdXNlIHByaW9yaXR5IGxldmVscyBjYW4gZGlmZmVyIGJldHdlZW4KICogc3lzdGVtIHR5cGVzIGFuZCBrZXJuZWwgdmVyc2lvbnMsIHBsZWFzZSBzZWUgeW91ciBzeXN0ZW0ncyBzZXRwcmlvcml0eSgyKQogKiBtYW4gcGFnZSBmb3Igc3BlY2lmaWMgZGV0YWlscy4KICogPC9wPgogKiBAcGFyYW0gaW50fG51bGwgJHByb2Nlc3NfaWQgW29wdGlvbmFsXSA8cD4KICogSWYgbm90IHNwZWNpZmllZCwgdGhlIHBpZCBvZiB0aGUgY3VycmVudCBwcm9jZXNzIChnZXRteXBpZCgpKSBpcyB1c2VkLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG1vZGUgW29wdGlvbmFsXSA8cD4KICogT25lIG9mIDxiPlBSSU9fUEdSUDwvYj4sIDxiPlBSSU9fVVNFUjwvYj4KICogb3IgPGI+UFJJT19QUk9DRVNTPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBjbnRsX3NldHByaW9yaXR5KGludCAkcHJpb3JpdHksID9pbnQgJHByb2Nlc3NfaWQsIGludCAkbW9kZSA9IFBSSU9fUFJPQ0VTUyk6IGJvb2wge30KCi8qKgogKiBTZXRzIGFuZCByZXRyaWV2ZXMgYmxvY2tlZCBzaWduYWxzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGNudGwtc2lncHJvY21hc2sucGhwCiAqIEBwYXJhbSBpbnQgJG1vZGUgPHA+CiAqIFNldHMgdGhlIGJlaGF2aW9yIG9mIDxiPnBjbnRsX3NpZ3Byb2NtYXNrPC9iPi4gUG9zc2libGUKICogdmFsdWVzOgogKiA8Yj5TSUdfQkxPQ0s8L2I+OiBBZGQgdGhlIHNpZ25hbHMgdG8gdGhlCiAqIGN1cnJlbnRseSBibG9ja2VkIHNpZ25hbHMuCiAqIDxiPlNJR19VTkJMT0NLPC9iPjogUmVtb3ZlIHRoZSBzaWduYWxzIGZyb20gdGhlCiAqIGN1cnJlbnRseSBibG9ja2VkIHNpZ25hbHMuCiAqIDxiPlNJR19TRVRNQVNLPC9iPjogUmVwbGFjZSB0aGUgY3VycmVudGx5CiAqIGJsb2NrZWQgc2lnbmFscyBieSB0aGUgZ2l2ZW4gbGlzdCBvZiBzaWduYWxzLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkc2lnbmFscyA8cD4KICogTGlzdCBvZiBzaWduYWxzLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAmJG9sZF9zaWduYWxzIFtvcHRpb25hbF0gPHA+CiAqIFRoZSA8aT5vbGRfc2lnbmFsczwvaT4gcGFyYW1ldGVyIGlzIHNldCB0byBhbiBhcnJheQogKiBjb250YWluaW5nIHRoZSBsaXN0IG9mIHRoZSBwcmV2aW91c2x5IGJsb2NrZWQgc2lnbmFscy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBjbnRsX3NpZ3Byb2NtYXNrKGludCAkbW9kZSwgYXJyYXkgJHNpZ25hbHMsICYkb2xkX3NpZ25hbHMpOiBib29sIHt9CgovKioKICogV2FpdHMgZm9yIHNpZ25hbHMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wY250bC1zaWd3YWl0aW5mby5waHAKICogQHBhcmFtIGFycmF5ICRzaWduYWxzIDxwPgogKiBBcnJheSBvZiBzaWduYWxzIHRvIHdhaXQgZm9yLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAmJGluZm8gPHA+CiAqIFRoZSA8aT5pbmZvPC9pPiBwYXJhbWV0ZXIgaXMgc2V0IHRvIGFuIGFycmF5IGNvbnRhaW5pbmcKICogaW5mb3JtYXRpb25zIGFib3V0IHRoZSBzaWduYWwuCiAqIDwvcD4KICogPHA+CiAqIFRoZSBmb2xsb3dpbmcgZWxlbWVudHMgYXJlIHNldCBmb3IgYWxsIHNpZ25hbHM6CiAqIHNpZ25vOiBTaWduYWwgbnVtYmVyCiAqIGVycm5vOiBBbiBlcnJvciBudW1iZXIKICogY29kZTogU2lnbmFsIGNvZGUKICogPC9wPgogKiA8cD4KICogVGhlIGZvbGxvd2luZyBlbGVtZW50cyBtYXkgYmUgc2V0IGZvciB0aGUgPGI+U0lHQ0hMRDwvYj4gc2lnbmFsOgogKiBzdGF0dXM6IEV4aXQgdmFsdWUgb3Igc2lnbmFsCiAqIHV0aW1lOiBVc2VyIHRpbWUgY29uc3VtZWQKICogc3RpbWU6IFN5c3RlbSB0aW1lIGNvbnN1bWVkCiAqIHBpZDogU2VuZGluZyBwcm9jZXNzIElECiAqIHVpZDogUmVhbCB1c2VyIElEIG9mIHNlbmRpbmcgcHJvY2VzcwogKiA8L3A+CiAqIDxwPgogKiBUaGUgZm9sbG93aW5nIGVsZW1lbnRzIG1heSBiZSBzZXQgZm9yIHRoZSA8Yj5TSUdJTEw8L2I+LAogKiA8Yj5TSUdGUEU8L2I+LCA8Yj5TSUdTRUdWPC9iPiBhbmQKICogPGI+U0lHQlVTPC9iPiBzaWduYWxzOgogKiBhZGRyOiBNZW1vcnkgbG9jYXRpb24gd2hpY2ggY2F1c2VkIGZhdWx0CiAqIDwvcD4KICogPHA+CiAqIFRoZSBmb2xsb3dpbmcgZWxlbWVudCBtYXkgYmUgc2V0IGZvciB0aGUgPGI+U0lHUE9MTDwvYj4KICogc2lnbmFsOgogKiBiYW5kOiBCYW5kIGV2ZW50CiAqIGZkOiBGaWxlIGRlc2NyaXB0b3IgbnVtYmVyCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgT24gc3VjY2VzcywgPGI+cGNudGxfc2lnd2FpdGluZm88L2I+IHJldHVybnMgYSBzaWduYWwgbnVtYmVyLgogKi8KZnVuY3Rpb24gcGNudGxfc2lnd2FpdGluZm8oYXJyYXkgJHNpZ25hbHMsICYkaW5mbyA9IFtdKTogaW50fGZhbHNlIHt9CgovKioKICogV2FpdHMgZm9yIHNpZ25hbHMsIHdpdGggYSB0aW1lb3V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGNudGwtc2lndGltZWR3YWl0LnBocAogKiBAcGFyYW0gYXJyYXkgJHNpZ25hbHMgPHA+CiAqIEFycmF5IG9mIHNpZ25hbHMgdG8gd2FpdCBmb3IuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICYkaW5mbyA8cD4KICogVGhlIDxpPnNpZ2luZm88L2k+IGlzIHNldCB0byBhbiBhcnJheSBjb250YWluaW5nCiAqIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgc2lnbmFsLiBTZWUKICogPGI+cGNudGxfc2lnd2FpdGluZm88L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHNlY29uZHMgW29wdGlvbmFsXSA8cD4KICogVGltZW91dCBpbiBzZWNvbmRzLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG5hbm9zZWNvbmRzIFtvcHRpb25hbF0gPHA+CiAqIFRpbWVvdXQgaW4gbmFub3NlY29uZHMuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgT24gc3VjY2VzcywgPGI+cGNudGxfc2lndGltZWR3YWl0PC9iPiByZXR1cm5zIGEgc2lnbmFsIG51bWJlci4KICovCmZ1bmN0aW9uIHBjbnRsX3NpZ3RpbWVkd2FpdChhcnJheSAkc2lnbmFscywgJiRpbmZvID0gW10sIGludCAkc2Vjb25kcyA9IDAsIGludCAkbmFub3NlY29uZHMgPSAwKTogaW50fGZhbHNlIHt9CgovKioKICogRW5hYmxlL2Rpc2FibGUgYXN5bmNocm9ub3VzIHNpZ25hbCBoYW5kbGluZyBvciByZXR1cm4gdGhlIG9sZCBzZXR0aW5nLjxicj4KICogSWYgdGhlIDxiPmVuYWJsZTwvYj4gcGFyYW1ldGVyIGlzIG9taXR0ZWQsIGl0IHJldHVybnMgd2hldGhlciBhc3luY2hyb25vdXMKICogc2lnbmFsIGhhbmRsaW5nIGlzIGVuYWJsZWQuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBjbnRsLWFzeW5jLXNpZ25hbHMucGhwCiAqCiAqIEBwYXJhbSBib29sfG51bGwgJGVuYWJsZSA8cD4KICogV2hldGhlciBhc3luY2hyb25vdXMgc2lnbmFsIGhhbmRsaW5nIHNob3VsZCBiZSBlbmFibGVkLgogKiA8L3A+CiAqCiAqIEByZXR1cm4gYm9vbAogKiBAc2luY2UgNy4xCiAqLwpmdW5jdGlvbiBwY250bF9hc3luY19zaWduYWxzKAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gP2Jvb2wgJGVuYWJsZSwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSA/Ym9vbCAkZW5hYmxlID0gbnVsbAopOiBib29sIHt9CgovKioKICogR2V0IHRoZSBjdXJyZW50IGhhbmRsZXIgZm9yIHNwZWNpZmllZCBzaWduYWwuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBjbnRsLXNpZ25hbC1nZXQtaGFuZGxlci5waHAKICoKICogQHBhcmFtIGludCAkc2lnbmFsIDxwPgogKiBUaGUgc2lnbmFsIG51bWJlci4KICogPC9wPgogKgogKiBAcmV0dXJuIGJvb2x8cmVzb3VyY2UKICogQHNpbmNlIDcuMQogKi8KZnVuY3Rpb24gcGNudGxfc2lnbmFsX2dldF9oYW5kbGVyKGludCAkc2lnbmFsKSB7fQoKLyoqCiAqIEBwYXJhbSBpbnQgJGZsYWdzCiAqIEByZXR1cm4gYm9vbAogKiBAc2luY2UgNy40CiAqLwpmdW5jdGlvbiBwY250bF91bnNoYXJlKGludCAkZmxhZ3MpOiBib29sIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpmdW5jdGlvbiBwY250bF93YWl0aWQoaW50ICRpZHR5cGUgPSBQX0FMTCwgP2ludCAkaWQgPSBudWxsLCAmJGluZm8gPSBbXSwgaW50ICRmbGFncyA9IFdFWElURUQpOiBib29sIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpmdW5jdGlvbiBwY250bF9nZXRjcHVhZmZpbml0eSg/aW50ICRwcm9jZXNzX2lkID0gbnVsbCk6IGFycmF5fGZhbHNlIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpmdW5jdGlvbiBwY250bF9zZXRjcHVhZmZpbml0eSg/aW50ICRwcm9jZXNzX2lkID0gbnVsbCwgYXJyYXkgJGNwdV9pZHMgPSBbXSk6IGJvb2wge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmZ1bmN0aW9uIHBjbnRsX2dldGNwdSgpOiBpbnQge30KCmRlZmluZSgnV05PSEFORycsIDEpOwpkZWZpbmUoJ1dVTlRSQUNFRCcsIDIpOwpkZWZpbmUoJ1dDT05USU5VRUQnLCA4KTsKZGVmaW5lKCdTSUdfSUdOJywgMSk7CmRlZmluZSgnU0lHX0RGTCcsIDApOwpkZWZpbmUoJ1NJR19FUlInLCAtMSk7CmRlZmluZSgnU0lHSFVQJywgMSk7CmRlZmluZSgnU0lHSU5UJywgMik7CmRlZmluZSgnU0lHUVVJVCcsIDMpOwpkZWZpbmUoJ1NJR0lMTCcsIDQpOwpkZWZpbmUoJ1NJR1RSQVAnLCA1KTsKZGVmaW5lKCdTSUdBQlJUJywgNik7CmRlZmluZSgnU0lHSU9UJywgNik7CmRlZmluZSgnU0lHQlVTJywgNyk7CmRlZmluZSgnU0lHRlBFJywgOCk7CmRlZmluZSgnU0lHS0lMTCcsIDkpOwpkZWZpbmUoJ1NJR1VTUjEnLCAxMCk7CmRlZmluZSgnU0lHU0VHVicsIDExKTsKZGVmaW5lKCdTSUdVU1IyJywgMTIpOwpkZWZpbmUoJ1NJR1BJUEUnLCAxMyk7CmRlZmluZSgnU0lHQUxSTScsIDE0KTsKZGVmaW5lKCdTSUdURVJNJywgMTUpOwpkZWZpbmUoJ1NJR1NUS0ZMVCcsIDE2KTsKZGVmaW5lKCdTSUdDTEQnLCAxNyk7CmRlZmluZSgnU0lHQ0hMRCcsIDE3KTsKZGVmaW5lKCdTSUdDT05UJywgMTgpOwpkZWZpbmUoJ1NJR1NUT1AnLCAxOSk7CmRlZmluZSgnU0lHVFNUUCcsIDIwKTsKZGVmaW5lKCdTSUdUVElOJywgMjEpOwpkZWZpbmUoJ1NJR1RUT1UnLCAyMik7CmRlZmluZSgnU0lHVVJHJywgMjMpOwpkZWZpbmUoJ1NJR1hDUFUnLCAyNCk7CmRlZmluZSgnU0lHWEZTWicsIDI1KTsKZGVmaW5lKCdTSUdWVEFMUk0nLCAyNik7CmRlZmluZSgnU0lHUFJPRicsIDI3KTsKZGVmaW5lKCdTSUdXSU5DSCcsIDI4KTsKZGVmaW5lKCdTSUdQT0xMJywgMjkpOwpkZWZpbmUoJ1NJR0lPJywgMjkpOwpkZWZpbmUoJ1NJR1BXUicsIDMwKTsKZGVmaW5lKCdTSUdTWVMnLCAzMSk7CmRlZmluZSgnU0lHQkFCWScsIDMxKTsKZGVmaW5lKCdQUklPX1BHUlAnLCAxKTsKZGVmaW5lKCdQUklPX1VTRVInLCAyKTsKZGVmaW5lKCdQUklPX1BST0NFU1MnLCAwKTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU0lHX0JMT0NLJywgMCk7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NJR19VTkJMT0NLJywgMSk7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NJR19TRVRNQVNLJywgMik7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NJR1JUTUlOJywgMzUpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTSUdSVE1BWCcsIDY0KTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU0lfVVNFUicsIDApOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTSV9LRVJORUwnLCAxMjgpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTSV9RVUVVRScsIC0xKTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU0lfVElNRVInLCAtMik7CmRlZmluZSgnU0lfTUVTR1EnLCAtMyk7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NJX0FTWU5DSU8nLCAtNCk7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NJX1NJR0lPJywgLTUpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTSV9US0lMTCcsIC02KTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQ0xEX0VYSVRFRCcsIDEpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdDTERfS0lMTEVEJywgMik7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0NMRF9EVU1QRUQnLCAzKTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQ0xEX1RSQVBQRUQnLCA0KTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQ0xEX1NUT1BQRUQnLCA1KTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQ0xEX0NPTlRJTlVFRCcsIDYpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdUUkFQX0JSS1BUJywgMSk7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1RSQVBfVFJBQ0UnLCAyKTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUE9MTF9JTicsIDEpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQT0xMX09VVCcsIDIpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQT0xMX01TRycsIDMpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQT0xMX0VSUicsIDQpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQT0xMX1BSSScsIDUpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQT0xMX0hVUCcsIDYpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJTExfSUxMT1BDJywgMSk7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lMTF9JTExPUE4nLCAyKTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUxMX0lMTEFEUicsIDMpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJTExfSUxMVFJQJywgNCk7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lMTF9QUlZPUEMnLCA1KTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUxMX1BSVlJFRycsIDYpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJTExfQ09QUk9DJywgNyk7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lMTF9CQURTVEsnLCA4KTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRlBFX0lOVERJVicsIDEpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdGUEVfSU5UT1ZGJywgMik7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0ZQRV9GTFRESVYnLCAzKTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRlBFX0ZMVE9WRicsIDQpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdGUEVfRkxUVU5EJywgNSk7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0ZQRV9GTFRSRVMnLCA2KTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRlBFX0ZMVElOVicsIDcpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdGUEVfRkxUU1VCJywgOCk7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NFR1ZfTUFQRVJSJywgMSk7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NFR1ZfQUNDRVJSJywgMik7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY250bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0JVU19BRFJBTE4nLCAxKTsKCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQlVTX0FEUkVSUicsIDIpOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNudGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdCVVNfT0JKRVJSJywgMyk7CmRlZmluZSgnUENOVExfRUlOVFInLCA0KTsKZGVmaW5lKCdQQ05UTF9FQ0hJTEQnLCAxMCk7CmRlZmluZSgnUENOVExfRUlOVkFMJywgMjIpOwpkZWZpbmUoJ1BDTlRMX0VBR0FJTicsIDExKTsKZGVmaW5lKCdQQ05UTF9FU1JDSCcsIDMpOwpkZWZpbmUoJ1BDTlRMX0VBQ0NFUycsIDEzKTsKZGVmaW5lKCdQQ05UTF9FUEVSTScsIDEpOwpkZWZpbmUoJ1BDTlRMX0VOT01FTScsIDEyKTsKZGVmaW5lKCdQQ05UTF9FMkJJRycsIDcpOwpkZWZpbmUoJ1BDTlRMX0VGQVVMVCcsIDE0KTsKZGVmaW5lKCdQQ05UTF9FSU8nLCA1KTsKZGVmaW5lKCdQQ05UTF9FSVNESVInLCAyMSk7CmRlZmluZSgnUENOVExfRUxJQkJBRCcsIDgwKTsKZGVmaW5lKCdQQ05UTF9FTE9PUCcsIDQwKTsKZGVmaW5lKCdQQ05UTF9FTUZJTEUnLCAyNCk7CmRlZmluZSgnUENOVExfRU5BTUVUT09MT05HJywgMzYpOwpkZWZpbmUoJ1BDTlRMX0VORklMRScsIDIzKTsKZGVmaW5lKCdQQ05UTF9FTk9FTlQnLCAyKTsKZGVmaW5lKCdQQ05UTF9FTk9FWEVDJywgOCk7CmRlZmluZSgnUENOVExfRU5PVERJUicsIDIwKTsKZGVmaW5lKCdQQ05UTF9FVFhUQlNZJywgMjYpOwoKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnUENOVExfRU5PU1BDJywgMjgpOwoKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnUENOVExfRVVTRVJTJywgODcpOwoKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnQ0xPTkVfTkVXTlMnLCAxMzEwNzIpOwoKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnQ0xPTkVfTkVXSVBDJywgMTM0MjE3NzI4KTsKCi8qKgogKiBAc2luY2UgNy40CiAqLwpkZWZpbmUoJ0NMT05FX05FV1VUUycsIDY3MTA4ODY0KTsKCi8qKgogKiBAc2luY2UgNy40CiAqLwpkZWZpbmUoJ0NMT05FX05FV05FVCcsIDEwNzM3NDE4MjQpOwoKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnQ0xPTkVfTkVXUElEJywgNTM2ODcwOTEyKTsKCi8qKgogKiBAc2luY2UgNy40CiAqLwpkZWZpbmUoJ0NMT05FX05FV1VTRVInLCAyNjg0MzU0NTYpOwoKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnQ0xPTkVfTkVXQ0dST1VQJywgMzM1NTQ0MzIpOwovKioKICogQHNpbmNlIDguNAogKi8KZGVmaW5lKCdQX0FMTCcsIDApOwovKioKICogQHNpbmNlIDguNAogKi8KZGVmaW5lKCdXRVhJVEVEJywgNCk7Ci8qKgogKiBAc2luY2UgOC40CiAqLwpkZWZpbmUoJ1dTVE9QUEVEJywgMik7Ci8qKgogKiBAc2luY2UgOC40CiAqLwpkZWZpbmUoJ1dOT1dBSVQnLCAxNjc3NzIxNik7Ci8qKgogKiBAc2luY2UgOC40CiAqLwpkZWZpbmUoJ1BfUElEJywgMSk7Ci8qKgogKiBAc2luY2UgOC40CiAqLwpkZWZpbmUoJ1BfUEdJRCcsIDIpOwovKioKICogQHNpbmNlIDguNAogKi8KZGVmaW5lKCdQX1BJREZEJywgMyk7Ci8vIEVuZCBvZiBwY250bCB2Lgo8P3BocAoKbmFtZXNwYWNlIFBjbnRsOwoKLyoqCiAqIEBzaW5jZSA4LjQKICovCmVudW0gUW9zQ2xhc3MgaW1wbGVtZW50cyBcVW5pdEVudW0KewogICAgY2FzZSBCYWNrZ3JvdW5kOwogICAgY2FzZSBVdGlsaXR5OwogICAgY2FzZSBEZWZhdWx0OwogICAgY2FzZSBVc2VySW5pdGlhdGVkOwogICAgY2FzZSBVc2VySW50ZXJhY3RpdmU7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXNlcygpOiBhcnJheSB7fQp9Cjw/cGhwCgpuYW1lc3BhY2UgUFNwZWxsOwoKLyoqCiAqIEEgZnVsbHkgb3BhcXVlIGNsYXNzIHdoaWNoIHJlcGxhY2VzIGEgcHNwZWxsIHJlc291cmNlIGFzIG9mIFBIUCA4LjEuMC4KICogQHNpbmNlIDguMQogKi8KZmluYWwgY2xhc3MgRGljdGlvbmFyeSB7fQoKLyoqCiAqIEEgZnVsbHkgb3BhcXVlIGNsYXNzIHdoaWNoIHJlcGxhY2VzIGEgcHNwZWxsIGNvbmZpZyByZXNvdXJjZSBhcyBvZiBQSFAgOC4xLjAuCiAqIEBzaW5jZSA4LjEKICovCmZpbmFsIGNsYXNzIENvbmZpZyB7fQo8P3BocAoKLy8gU3RhcnQgb2YgcHNwZWxsIHYuCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZTsKCi8qKgogKiBMb2FkIGEgbmV3IGRpY3Rpb25hcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wc3BlbGwtbmV3LnBocAogKiBAcGFyYW0gc3RyaW5nICRsYW5ndWFnZSA8cD4KICogVGhlIGxhbmd1YWdlIHBhcmFtZXRlciBpcyB0aGUgbGFuZ3VhZ2UgY29kZSB3aGljaCBjb25zaXN0cyBvZiB0aGUKICogdHdvIGxldHRlciBJU08gNjM5IGxhbmd1YWdlIGNvZGUgYW5kIGFuIG9wdGlvbmFsIHR3byBsZXR0ZXIgSVNPCiAqIDMxNjYgY291bnRyeSBjb2RlIGFmdGVyIGEgZGFzaCBvciB1bmRlcnNjb3JlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHNwZWxsaW5nIDxwPgogKiBUaGUgc3BlbGxpbmcgcGFyYW1ldGVyIGlzIHRoZSByZXF1ZXN0ZWQgc3BlbGxpbmcgZm9yIGxhbmd1YWdlcwogKiB3aXRoIG1vcmUgdGhhbiBvbmUgc3BlbGxpbmcgc3VjaCBhcyBFbmdsaXNoLiBLbm93biB2YWx1ZXMgYXJlCiAqICdhbWVyaWNhbicsICdicml0aXNoJywgYW5kICdjYW5hZGlhbicuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkamFyZ29uIDxwPgogKiBUaGUgamFyZ29uIHBhcmFtZXRlciBjb250YWlucyBleHRyYSBpbmZvcm1hdGlvbiB0byBkaXN0aW5ndWlzaAogKiB0d28gZGlmZmVyZW50IHdvcmRzIGxpc3RzIHRoYXQgaGF2ZSB0aGUgc2FtZSBsYW5ndWFnZSBhbmQKICogc3BlbGxpbmcgcGFyYW1ldGVycy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZyA8cD4KICogVGhlIGVuY29kaW5nIHBhcmFtZXRlciBpcyB0aGUgZW5jb2RpbmcgdGhhdCB3b3JkcyBhcmUgZXhwZWN0ZWQgdG8KICogYmUgaW4uIFZhbGlkIHZhbHVlcyBhcmUgJ3V0Zi04JywgJ2lzbzg4NTktKicsICdrb2k4LXInLAogKiAndmlzY2lpJywgJ2NwMTI1MicsICdtYWNoaW5lIHVuc2lnbmVkIDE2JywgJ21hY2hpbmUgdW5zaWduZWQKICogMzInLiBUaGlzIHBhcmFtZXRlciBpcyBsYXJnZWx5IHVudGVzdGVkLCBzbyBiZSBjYXJlZnVsIHdoZW4KICogdXNpbmcuCiAqIDwvcD4KICogQHBhcmFtIGludCAkbW9kZSA8cD4KICogVGhlIG1vZGUgcGFyYW1ldGVyIGlzIHRoZSBtb2RlIGluIHdoaWNoIHNwZWxsY2hlY2tlciB3aWxsIHdvcmsuCiAqIFRoZXJlIGFyZSBzZXZlcmFsIG1vZGVzIGF2YWlsYWJsZToKICogPGI+UFNQRUxMX0ZBU1Q8L2I+IC0gRmFzdCBtb2RlIChsZWFzdCBudW1iZXIgb2YKICogc3VnZ2VzdGlvbnMpPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSB0aGUgZGljdGlvbmFyeSBsaW5rIGlkZW50aWZpZXIgb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BTcGVsbFxEaWN0aW9uYXJ5fGZhbHNlJ10sIGRlZmF1bHQ6ICdpbnR8ZmFsc2UnKV0KZnVuY3Rpb24gcHNwZWxsX25ldyhzdHJpbmcgJGxhbmd1YWdlLCBzdHJpbmcgJHNwZWxsaW5nID0gIiIsIHN0cmluZyAkamFyZ29uID0gIiIsIHN0cmluZyAkZW5jb2RpbmcgPSAiIiwgaW50ICRtb2RlID0gMCkge30KCi8qKgogKiBMb2FkIGEgbmV3IGRpY3Rpb25hcnkgd2l0aCBwZXJzb25hbCB3b3JkbGlzdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBzcGVsbC1uZXctcGVyc29uYWwucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIDxwPgogKiBUaGUgZmlsZSB3aGVyZSB3b3JkcyBhZGRlZCB0byB0aGUgcGVyc29uYWwgbGlzdCB3aWxsIGJlIHN0b3JlZC4KICogSXQgc2hvdWxkIGJlIGFuIGFic29sdXRlIGZpbGVuYW1lIGJlZ2lubmluZyB3aXRoICcvJyBiZWNhdXNlIG90aGVyd2lzZQogKiBpdCB3aWxsIGJlIHJlbGF0aXZlIHRvICRIT01FLCB3aGljaCBpcyAiL3Jvb3QiIGZvciBtb3N0IHN5c3RlbXMsIGFuZAogKiBpcyBwcm9iYWJseSBub3Qgd2hhdCB5b3Ugd2FudC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRsYW5ndWFnZSA8cD4KICogVGhlIGxhbmd1YWdlIGNvZGUgd2hpY2ggY29uc2lzdHMgb2YgdGhlIHR3byBsZXR0ZXIgSVNPIDYzOSBsYW5ndWFnZQogKiBjb2RlIGFuZCBhbiBvcHRpb25hbCB0d28gbGV0dGVyIElTTyAzMTY2IGNvdW50cnkgY29kZSBhZnRlciBhIGRhc2gKICogb3IgdW5kZXJzY29yZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRzcGVsbGluZyA8cD4KICogVGhlIHJlcXVlc3RlZCBzcGVsbGluZyBmb3IgbGFuZ3VhZ2VzIHdpdGggbW9yZSB0aGFuIG9uZSBzcGVsbGluZyBzdWNoCiAqIGFzIEVuZ2xpc2guIEtub3duIHZhbHVlcyBhcmUgJ2FtZXJpY2FuJywgJ2JyaXRpc2gnLCBhbmQgJ2NhbmFkaWFuJy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRqYXJnb24gPHA+CiAqIEV4dHJhIGluZm9ybWF0aW9uIHRvIGRpc3Rpbmd1aXNoIHR3byBkaWZmZXJlbnQgd29yZHMgbGlzdHMgdGhhdCBoYXZlCiAqIHRoZSBzYW1lIGxhbmd1YWdlIGFuZCBzcGVsbGluZyBwYXJhbWV0ZXJzLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIDxwPgogKiBUaGUgZW5jb2RpbmcgdGhhdCB3b3JkcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4uIFZhbGlkIHZhbHVlcyBhcmUKICogdXRmLTgsIGlzbzg4NTktKiwKICoga29pOC1yLCB2aXNjaWksCiAqIGNwMTI1MiwgbWFjaGluZSB1bnNpZ25lZCAxNiwKICogbWFjaGluZSB1bnNpZ25lZCAzMi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtb2RlIDxwPgogKiBUaGUgbW9kZSBpbiB3aGljaCBzcGVsbGNoZWNrZXIgd2lsbCB3b3JrLiBUaGVyZSBhcmUgc2V2ZXJhbCBtb2RlcyBhdmFpbGFibGU6CiAqIDxiPlBTUEVMTF9GQVNUPC9iPiAtIEZhc3QgbW9kZSAobGVhc3QgbnVtYmVyIG9mCiAqIHN1Z2dlc3Rpb25zKTwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgdGhlIGRpY3Rpb25hcnkgbGluayBpZGVudGlmaWVyIGZvciB1c2UgaW4gb3RoZXIgcHNwZWxsIGZ1bmN0aW9ucy4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BTcGVsbFxEaWN0aW9uYXJ5fGZhbHNlJ10sIGRlZmF1bHQ6ICdpbnR8ZmFsc2UnKV0KZnVuY3Rpb24gcHNwZWxsX25ld19wZXJzb25hbChzdHJpbmcgJGZpbGVuYW1lLCBzdHJpbmcgJGxhbmd1YWdlLCBzdHJpbmcgJHNwZWxsaW5nID0gIiIsIHN0cmluZyAkamFyZ29uID0gIiIsIHN0cmluZyAkZW5jb2RpbmcgPSAiIiwgaW50ICRtb2RlID0gMCkge30KCi8qKgogKiBMb2FkIGEgbmV3IGRpY3Rpb25hcnkgd2l0aCBzZXR0aW5ncyBiYXNlZCBvbiBhIGdpdmVuIGNvbmZpZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBzcGVsbC1uZXctY29uZmlnLnBocAogKiBAcGFyYW0gaW50ICRjb25maWcgPHA+CiAqIFRoZSA8aT5jb25maWc8L2k+IHBhcmFtZXRlciBpcyB0aGUgb25lIHJldHVybmVkIGJ5CiAqIDxiPnBzcGVsbF9jb25maWdfY3JlYXRlPC9iPiB3aGVuIHRoZSBjb25maWcgd2FzIGNyZWF0ZWQuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgYSBkaWN0aW9uYXJ5IGxpbmsgaWRlbnRpZmllciBvbiBzdWNjZXNzLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUFNwZWxsXERpY3Rpb25hcnl8ZmFsc2UnXSwgZGVmYXVsdDogJ2ludHxmYWxzZScpXQpmdW5jdGlvbiBwc3BlbGxfbmV3X2NvbmZpZygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQU3BlbGxcQ29uZmlnJ10sIGRlZmF1bHQ6ICdpbnQnKV0gJGNvbmZpZykge30KCi8qKgogKiBDaGVjayBhIHdvcmQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wc3BlbGwtY2hlY2sucGhwCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnkKICogQHBhcmFtIHN0cmluZyAkd29yZCA8cD4KICogVGhlIHRlc3RlZCB3b3JkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiB0aGUgc3BlbGxpbmcgaXMgY29ycmVjdCwgPGI+RkFMU0U8L2I+IGlmIG5vdC4KICovCmZ1bmN0aW9uIHBzcGVsbF9jaGVjaygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQU3BlbGxcRGljdGlvbmFyeSddLCBkZWZhdWx0OiAnaW50JyldICRkaWN0aW9uYXJ5LCBzdHJpbmcgJHdvcmQpOiBib29sIHt9CgovKioKICogU3VnZ2VzdCBzcGVsbGluZ3Mgb2YgYSB3b3JkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucHNwZWxsLXN1Z2dlc3QucGhwCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnkKICogQHBhcmFtIHN0cmluZyAkd29yZCA8cD4KICogVGhlIHRlc3RlZCB3b3JkLgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXJyYXkgb2YgcG9zc2libGUgc3BlbGxpbmdzLgogKi8KZnVuY3Rpb24gcHNwZWxsX3N1Z2dlc3QoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUFNwZWxsXERpY3Rpb25hcnknXSwgZGVmYXVsdDogJ2ludCcpXSAkZGljdGlvbmFyeSwgc3RyaW5nICR3b3JkKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBTdG9yZSBhIHJlcGxhY2VtZW50IHBhaXIgZm9yIGEgd29yZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBzcGVsbC1zdG9yZS1yZXBsYWNlbWVudC5waHAKICogQHBhcmFtIGludCAkZGljdGlvbmFyeSA8cD4KICogQSBkaWN0aW9uYXJ5IGxpbmsgaWRlbnRpZmllciwgb3BlbmVkIHdpdGgKICogPGI+cHNwZWxsX25ld19wZXJzb25hbDwvYj4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRtaXNzcGVsbGVkIDxwPgogKiBUaGUgbWlzc3BlbGxlZCB3b3JkLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGNvcnJlY3QgPHA+CiAqIFRoZSBmaXhlZCBzcGVsbGluZyBmb3IgdGhlIDxpPm1pc3NwZWxsZWQ8L2k+IHdvcmQuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwc3BlbGxfc3RvcmVfcmVwbGFjZW1lbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUFNwZWxsXERpY3Rpb25hcnknXSwgZGVmYXVsdDogJ2ludCcpXSAkZGljdGlvbmFyeSwgc3RyaW5nICRtaXNzcGVsbGVkLCBzdHJpbmcgJGNvcnJlY3QpOiBib29sIHt9CgovKioKICogQWRkIHRoZSB3b3JkIHRvIGEgcGVyc29uYWwgd29yZGxpc3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wc3BlbGwtYWRkLXRvLXBlcnNvbmFsLnBocAogKiBAcGFyYW0gaW50ICRkaWN0aW9uYXJ5CiAqIEBwYXJhbSBzdHJpbmcgJHdvcmQgPHA+CiAqIFRoZSBhZGRlZCB3b3JkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcHNwZWxsX2FkZF90b19wZXJzb25hbCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQU3BlbGxcRGljdGlvbmFyeSddLCBkZWZhdWx0OiAnaW50JyldICRkaWN0aW9uYXJ5LCBzdHJpbmcgJHdvcmQpOiBib29sIHt9CgovKioKICogQWRkIHRoZSB3b3JkIHRvIHRoZSB3b3JkbGlzdCBpbiB0aGUgY3VycmVudCBzZXNzaW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucHNwZWxsLWFkZC10by1zZXNzaW9uLnBocAogKiBAcGFyYW0gaW50ICRkaWN0aW9uYXJ5CiAqIEBwYXJhbSBzdHJpbmcgJHdvcmQgPHA+CiAqIFRoZSBhZGRlZCB3b3JkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcHNwZWxsX2FkZF90b19zZXNzaW9uKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BTcGVsbFxEaWN0aW9uYXJ5J10sIGRlZmF1bHQ6ICdpbnQnKV0gJGRpY3Rpb25hcnksIHN0cmluZyAkd29yZCk6IGJvb2wge30KCi8qKgogKiBDbGVhciB0aGUgY3VycmVudCBzZXNzaW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucHNwZWxsLWNsZWFyLXNlc3Npb24ucGhwCiAqIEBwYXJhbSBpbnQgJGRpY3Rpb25hcnkKICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwc3BlbGxfY2xlYXJfc2Vzc2lvbigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQU3BlbGxcRGljdGlvbmFyeSddLCBkZWZhdWx0OiAnaW50JyldICRkaWN0aW9uYXJ5KTogYm9vbCB7fQoKLyoqCiAqIFNhdmUgdGhlIHBlcnNvbmFsIHdvcmRsaXN0IHRvIGEgZmlsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBzcGVsbC1zYXZlLXdvcmRsaXN0LnBocAogKiBAcGFyYW0gaW50ICRkaWN0aW9uYXJ5IDxwPgogKiBBIGRpY3Rpb25hcnkgbGluayBpZGVudGlmaWVyIG9wZW5lZCB3aXRoCiAqIDxiPnBzcGVsbF9uZXdfcGVyc29uYWw8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcHNwZWxsX3NhdmVfd29yZGxpc3QoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUFNwZWxsXERpY3Rpb25hcnknXSwgZGVmYXVsdDogJ2ludCcpXSAkZGljdGlvbmFyeSk6IGJvb2wge30KCi8qKgogKiBDcmVhdGUgYSBjb25maWcgdXNlZCB0byBvcGVuIGEgZGljdGlvbmFyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBzcGVsbC1jb25maWctY3JlYXRlLnBocAogKiBAcGFyYW0gc3RyaW5nICRsYW5ndWFnZSA8cD4KICogVGhlIGxhbmd1YWdlIHBhcmFtZXRlciBpcyB0aGUgbGFuZ3VhZ2UgY29kZSB3aGljaCBjb25zaXN0cyBvZiB0aGUKICogdHdvIGxldHRlciBJU08gNjM5IGxhbmd1YWdlIGNvZGUgYW5kIGFuIG9wdGlvbmFsIHR3byBsZXR0ZXIgSVNPCiAqIDMxNjYgY291bnRyeSBjb2RlIGFmdGVyIGEgZGFzaCBvciB1bmRlcnNjb3JlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHNwZWxsaW5nIDxwPgogKiBUaGUgc3BlbGxpbmcgcGFyYW1ldGVyIGlzIHRoZSByZXF1ZXN0ZWQgc3BlbGxpbmcgZm9yIGxhbmd1YWdlcwogKiB3aXRoIG1vcmUgdGhhbiBvbmUgc3BlbGxpbmcgc3VjaCBhcyBFbmdsaXNoLiBLbm93biB2YWx1ZXMgYXJlCiAqICdhbWVyaWNhbicsICdicml0aXNoJywgYW5kICdjYW5hZGlhbicuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkamFyZ29uIDxwPgogKiBUaGUgamFyZ29uIHBhcmFtZXRlciBjb250YWlucyBleHRyYSBpbmZvcm1hdGlvbiB0byBkaXN0aW5ndWlzaAogKiB0d28gZGlmZmVyZW50IHdvcmRzIGxpc3RzIHRoYXQgaGF2ZSB0aGUgc2FtZSBsYW5ndWFnZSBhbmQKICogc3BlbGxpbmcgcGFyYW1ldGVycy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZyA8cD4KICogVGhlIGVuY29kaW5nIHBhcmFtZXRlciBpcyB0aGUgZW5jb2RpbmcgdGhhdCB3b3JkcyBhcmUgZXhwZWN0ZWQgdG8KICogYmUgaW4uIFZhbGlkIHZhbHVlcyBhcmUgJ3V0Zi04JywgJ2lzbzg4NTktKicsICdrb2k4LXInLAogKiAndmlzY2lpJywgJ2NwMTI1MicsICdtYWNoaW5lIHVuc2lnbmVkIDE2JywgJ21hY2hpbmUgdW5zaWduZWQKICogMzInLiBUaGlzIHBhcmFtZXRlciBpcyBsYXJnZWx5IHVudGVzdGVkLCBzbyBiZSBjYXJlZnVsIHdoZW4KICogdXNpbmcuCiAqIDwvcD4KICogQHJldHVybiBpbnQgUmV0dW5zIGEgcHNwZWxsIGNvbmZpZyBpZGVudGlmaWVyLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUFNwZWxsXENvbmZpZyddLCBkZWZhdWx0OiAnaW50JyldCmZ1bmN0aW9uIHBzcGVsbF9jb25maWdfY3JlYXRlKHN0cmluZyAkbGFuZ3VhZ2UsIHN0cmluZyAkc3BlbGxpbmcgPSAiIiwgc3RyaW5nICRqYXJnb24gPSAiIiwgc3RyaW5nICRlbmNvZGluZyA9ICIiKSB7fQoKLyoqCiAqIENvbnNpZGVyIHJ1bi10b2dldGhlciB3b3JkcyBhcyB2YWxpZCBjb21wb3VuZHMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wc3BlbGwtY29uZmlnLXJ1bnRvZ2V0aGVyLnBocAogKiBAcGFyYW0gaW50ICRjb25maWcKICogQHBhcmFtIGJvb2wgJGFsbG93IDxwPgogKiA8Yj5UUlVFPC9iPiBpZiBydW4tdG9nZXRoZXIgd29yZHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgbGVnYWwgY29tcG91bmRzLAogKiA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19ydW50b2dldGhlcigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQU3BlbGxcQ29uZmlnJ10sIGRlZmF1bHQ6ICdpbnQnKV0gJGNvbmZpZywgYm9vbCAkYWxsb3cpOiBib29sIHt9CgovKioKICogQ2hhbmdlIHRoZSBtb2RlIG51bWJlciBvZiBzdWdnZXN0aW9ucyByZXR1cm5lZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBzcGVsbC1jb25maWctbW9kZS5waHAKICogQHBhcmFtIGludCAkY29uZmlnCiAqIEBwYXJhbSBpbnQgJG1vZGUgPHA+CiAqIFRoZSBtb2RlIHBhcmFtZXRlciBpcyB0aGUgbW9kZSBpbiB3aGljaCBzcGVsbGNoZWNrZXIgd2lsbCB3b3JrLgogKiBUaGVyZSBhcmUgc2V2ZXJhbCBtb2RlcyBhdmFpbGFibGU6CiAqIDxiPlBTUEVMTF9GQVNUPC9iPiAtIEZhc3QgbW9kZSAobGVhc3QgbnVtYmVyIG9mCiAqIHN1Z2dlc3Rpb25zKTwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwc3BlbGxfY29uZmlnX21vZGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnUFNwZWxsXENvbmZpZyddLCBkZWZhdWx0OiAnaW50JyldICRjb25maWcsIGludCAkbW9kZSk6IGJvb2wge30KCi8qKgogKiBJZ25vcmUgd29yZHMgbGVzcyB0aGFuIE4gY2hhcmFjdGVycyBsb25nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucHNwZWxsLWNvbmZpZy1pZ25vcmUucGhwCiAqIEBwYXJhbSBpbnQgJGNvbmZpZwogKiBAcGFyYW0gaW50ICRtaW5fbGVuZ3RoIDxwPgogKiBXb3JkcyBsZXNzIHRoYW4gPGk+bjwvaT4gY2hhcmFjdGVycyB3aWxsIGJlIHNraXBwZWQuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwc3BlbGxfY29uZmlnX2lnbm9yZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQU3BlbGxcQ29uZmlnJ10sIGRlZmF1bHQ6ICdpbnQnKV0gJGNvbmZpZywgaW50ICRtaW5fbGVuZ3RoKTogYm9vbCB7fQoKLyoqCiAqIFNldCBhIGZpbGUgdGhhdCBjb250YWlucyBwZXJzb25hbCB3b3JkbGlzdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBzcGVsbC1jb25maWctcGVyc29uYWwucGhwCiAqIEBwYXJhbSBpbnQgJGNvbmZpZwogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICogVGhlIHBlcnNvbmFsIHdvcmRsaXN0LiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLgogKiBUaGUgZmlsZSBzaG91bGQgYmUgd3JpdGFibGUgYnkgd2hvZXZlciBQSFAgcnVucyBhcyAoZS5nLiBub2JvZHkpLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19wZXJzb25hbCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQU3BlbGxcQ29uZmlnJ10sIGRlZmF1bHQ6ICdpbnQnKV0gJGNvbmZpZywgc3RyaW5nICRmaWxlbmFtZSk6IGJvb2wge30KCi8qKgogKiBMb2NhdGlvbiBvZiB0aGUgbWFpbiB3b3JkIGxpc3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wc3BlbGwtY29uZmlnLWRpY3QtZGlyLnBocAogKiBAcGFyYW0gaW50ICRjb25maWcKICogQHBhcmFtIHN0cmluZyAkZGlyZWN0b3J5CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcHNwZWxsX2NvbmZpZ19kaWN0X2RpcigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQU3BlbGxcQ29uZmlnJ10sIGRlZmF1bHQ6ICdpbnQnKV0gJGNvbmZpZywgc3RyaW5nICRkaXJlY3RvcnkpOiBib29sIHt9CgovKioKICogbG9jYXRpb24gb2YgbGFuZ3VhZ2UgZGF0YSBmaWxlcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBzcGVsbC1jb25maWctZGF0YS1kaXIucGhwCiAqIEBwYXJhbSBpbnQgJGNvbmZpZwogKiBAcGFyYW0gc3RyaW5nICRkaXJlY3RvcnkKICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwc3BlbGxfY29uZmlnX2RhdGFfZGlyKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BTcGVsbFxDb25maWcnXSwgZGVmYXVsdDogJ2ludCcpXSAkY29uZmlnLCBzdHJpbmcgJGRpcmVjdG9yeSk6IGJvb2wge30KCi8qKgogKiBTZXQgYSBmaWxlIHRoYXQgY29udGFpbnMgcmVwbGFjZW1lbnQgcGFpcnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wc3BlbGwtY29uZmlnLXJlcGwucGhwCiAqIEBwYXJhbSBpbnQgJGNvbmZpZwogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICogVGhlIGZpbGUgc2hvdWxkIGJlIHdyaXRhYmxlIGJ5IHdob2V2ZXIgUEhQIHJ1bnMgYXMgKGUuZy4gbm9ib2R5KS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBzcGVsbF9jb25maWdfcmVwbCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdQU3BlbGxcQ29uZmlnJ10sIGRlZmF1bHQ6ICdpbnQnKV0gJGNvbmZpZywgc3RyaW5nICRmaWxlbmFtZSk6IGJvb2wge30KCi8qKgogKiBEZXRlcm1pbmUgd2hldGhlciB0byBzYXZlIGEgcmVwbGFjZW1lbnQgcGFpcnMgbGlzdAogKiBhbG9uZyB3aXRoIHRoZSB3b3JkbGlzdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBzcGVsbC1jb25maWctc2F2ZS1yZXBsLnBocAogKiBAcGFyYW0gaW50ICRjb25maWcKICogQHBhcmFtIGJvb2wgJHNhdmUgPHA+CiAqIDxiPlRSVUU8L2I+IGlmIHJlcGxhY2VtZW50IHBhaXJzIHNob3VsZCBiZSBzYXZlZCwgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBzcGVsbF9jb25maWdfc2F2ZV9yZXBsKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ1BTcGVsbFxDb25maWcnXSwgZGVmYXVsdDogJ2ludCcpXSAkY29uZmlnLCBib29sICRzYXZlKTogYm9vbCB7fQoKZGVmaW5lKCdQU1BFTExfRkFTVCcsIDEpOwpkZWZpbmUoJ1BTUEVMTF9OT1JNQUwnLCAyKTsKZGVmaW5lKCdQU1BFTExfQkFEX1NQRUxMRVJTJywgMyk7CmRlZmluZSgnUFNQRUxMX1JVTl9UT0dFVEhFUicsIDgpOwoKLy8gRW5kIG9mIHBzcGVsbCB2Lgo8P3BocAoKLy8gU3RhcnQgb2YgZXJlZyB2Lgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXERlcHJlY2F0ZWQ7CgovKioKICogUmVndWxhciBleHByZXNzaW9uIG1hdGNoCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZXJlZy5waHAKICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiA8cD4KICogQ2FzZSBzZW5zaXRpdmUgcmVndWxhciBleHByZXNzaW9uLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICogVGhlIGlucHV0IHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gbnVsbHxhcnJheSAmJHJlZ3MgW29wdGlvbmFsXSA8cD4KICogSWYgbWF0Y2hlcyBhcmUgZm91bmQgZm9yIHBhcmVudGhlc2l6ZWQgc3Vic3RyaW5ncyBvZgogKiA8aT5wYXR0ZXJuPC9pPiBhbmQgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZQogKiB0aGlyZCBhcmd1bWVudCA8aT5yZWdzPC9pPiwgdGhlIG1hdGNoZXMgd2lsbCBiZSBzdG9yZWQKICogaW4gdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheSA8aT5yZWdzPC9pPi4KICogPC9wPgogKiA8cD4KICogJHJlZ3NbMV0gd2lsbCBjb250YWluIHRoZSBzdWJzdHJpbmcgd2hpY2ggc3RhcnRzIGF0CiAqIHRoZSBmaXJzdCBsZWZ0IHBhcmVudGhlc2lzOyAkcmVnc1syXSB3aWxsIGNvbnRhaW4KICogdGhlIHN1YnN0cmluZyBzdGFydGluZyBhdCB0aGUgc2Vjb25kLCBhbmQgc28gb24uCiAqICRyZWdzWzBdIHdpbGwgY29udGFpbiBhIGNvcHkgb2YgdGhlIGNvbXBsZXRlIHN0cmluZwogKiBtYXRjaGVkLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoZWQgc3RyaW5nIGlmIGEgbWF0Y2ggZm9yCiAqIDxpPnBhdHRlcm48L2k+IHdhcyBmb3VuZCBpbiA8aT5zdHJpbmc8L2k+LAogKiBvciA8Yj5GQUxTRTwvYj4gaWYgbm8gbWF0Y2hlcyB3ZXJlIGZvdW5kIG9yIGFuIGVycm9yIG9jY3VycmVkLgogKiA8L3A+CiAqIDxwPgogKiBJZiB0aGUgb3B0aW9uYWwgcGFyYW1ldGVyIDxpPnJlZ3M8L2k+IHdhcyBub3QgcGFzc2VkIG9yCiAqIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoZWQgc3RyaW5nIGlzIDAsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAxLgogKiBAcmVtb3ZlZCA3LjAKICogQHNlZSBwcmVnX21hdGNoKCkKICovCiNbRGVwcmVjYXRlZChyZWFzb246ICJVc2UgcHJlZ19tYXRjaCgpIGluc3RlYWQiLCBzaW5jZTogIjUuMyIpXQpmdW5jdGlvbiBlcmVnKCRwYXR0ZXJuLCAkc3RyaW5nLCA/YXJyYXkgJiRyZWdzID0gbnVsbCkge30KCi8qKgogKiBSZXBsYWNlIHJlZ3VsYXIgZXhwcmVzc2lvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVyZWctcmVwbGFjZS5waHAKICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiA8cD4KICogQSBQT1NJWCBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcmVwbGFjZW1lbnQgPHA+CiAqIElmIDxpPnBhdHRlcm48L2k+IGNvbnRhaW5zIHBhcmVudGhlc2l6ZWQgc3Vic3RyaW5ncywKICogPGk+cmVwbGFjZW1lbnQ8L2k+IG1heSBjb250YWluIHN1YnN0cmluZ3Mgb2YgdGhlIGZvcm0KICogXGRpZ2l0LCB3aGljaCB3aWxsIGJlCiAqIHJlcGxhY2VkIGJ5IHRoZSB0ZXh0IG1hdGNoaW5nIHRoZSBkaWdpdCd0aCBwYXJlbnRoZXNpemVkIHN1YnN0cmluZzsKICogXDAgd2lsbCBwcm9kdWNlIHRoZSBlbnRpcmUgY29udGVudHMgb2Ygc3RyaW5nLgogKiBVcCB0byBuaW5lIHN1YnN0cmluZ3MgbWF5IGJlIHVzZWQuIFBhcmVudGhlc2VzIG1heSBiZSBuZXN0ZWQsIGluIHdoaWNoCiAqIGNhc2UgdGhleSBhcmUgY291bnRlZCBieSB0aGUgb3BlbmluZyBwYXJlbnRoZXNpcy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAqIFRoZSBpbnB1dCBzdHJpbmcuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgVGhlIG1vZGlmaWVkIHN0cmluZyBpcyByZXR1cm5lZC4gSWYgbm8gbWF0Y2hlcyBhcmUgZm91bmQgaW4KICogPGk+c3RyaW5nPC9pPiwgdGhlbiBpdCB3aWxsIGJlIHJldHVybmVkIHVuY2hhbmdlZC4KICogQHJlbW92ZWQgNy4wCiAqIEBzZWUgcHJlZ19yZXBsYWNlKCkKICovCiNbRGVwcmVjYXRlZChyZWFzb246ICJVc2UgcHJlZ19yZXBsYWNlKCkgaW5zdGVhZCIsIHNpbmNlOiAiNS4zIildCmZ1bmN0aW9uIGVyZWdfcmVwbGFjZSgkcGF0dGVybiwgJHJlcGxhY2VtZW50LCAkc3RyaW5nKSB7fQoKLyoqCiAqIENhc2UgaW5zZW5zaXRpdmUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZXJlZ2kucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gPHA+CiAqIENhc2UgaW5zZW5zaXRpdmUgcmVndWxhciBleHByZXNzaW9uLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICogVGhlIGlucHV0IHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gbnVsbHxhcnJheSAmJHJlZ3MgW29wdGlvbmFsXSA8cD4KICogSWYgbWF0Y2hlcyBhcmUgZm91bmQgZm9yIHBhcmVudGhlc2l6ZWQgc3Vic3RyaW5ncyBvZgogKiA8aT5wYXR0ZXJuPC9pPiBhbmQgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZQogKiB0aGlyZCBhcmd1bWVudCA8aT5yZWdzPC9pPiwgdGhlIG1hdGNoZXMgd2lsbCBiZSBzdG9yZWQKICogaW4gdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheSA8aT5yZWdzPC9pPi4KICogPC9wPgogKiA8cD4KICogJHJlZ3NbMV0gd2lsbCBjb250YWluIHRoZSBzdWJzdHJpbmcgd2hpY2ggc3RhcnRzIGF0IHRoZSBmaXJzdCBsZWZ0CiAqIHBhcmVudGhlc2lzOyAkcmVnc1syXSB3aWxsIGNvbnRhaW4gdGhlIHN1YnN0cmluZyBzdGFydGluZyBhdCB0aGUKICogc2Vjb25kLCBhbmQgc28gb24uICRyZWdzWzBdIHdpbGwgY29udGFpbiBhIGNvcHkgb2YgdGhlIGNvbXBsZXRlIHN0cmluZwogKiBtYXRjaGVkLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoZWQgc3RyaW5nIGlmIGEgbWF0Y2ggZm9yCiAqIDxpPnBhdHRlcm48L2k+IHdhcyBmb3VuZCBpbiA8aT5zdHJpbmc8L2k+LAogKiBvciA8Yj5GQUxTRTwvYj4gaWYgbm8gbWF0Y2hlcyB3ZXJlIGZvdW5kIG9yIGFuIGVycm9yIG9jY3VycmVkLgogKiA8L3A+CiAqIDxwPgogKiBJZiB0aGUgb3B0aW9uYWwgcGFyYW1ldGVyIDxpPnJlZ3M8L2k+IHdhcyBub3QgcGFzc2VkIG9yCiAqIHRoZSBsZW5ndGggb2YgdGhlIG1hdGNoZWQgc3RyaW5nIGlzIDAsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAxLgogKiBAcmVtb3ZlZCA3LjAKICogQHNlZSBwcmVnX21hdGNoKCkKICovCiNbRGVwcmVjYXRlZChyZWFzb246ICJVc2UgcHJlZ19tYXRjaCgpIGluc3RlYWQiLCBzaW5jZTogIjUuMyIpXQpmdW5jdGlvbiBlcmVnaSgkcGF0dGVybiwgJHN0cmluZywgYXJyYXkgJiRyZWdzID0gbnVsbCkge30KCi8qKgogKiBSZXBsYWNlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYXNlIGluc2Vuc2l0aXZlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZXJlZ2ktcmVwbGFjZS5waHAKICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiA8cD4KICogQSBQT1NJWCBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcmVwbGFjZW1lbnQgPHA+CiAqIElmIDxpPnBhdHRlcm48L2k+IGNvbnRhaW5zIHBhcmVudGhlc2l6ZWQgc3Vic3RyaW5ncywKICogPGk+cmVwbGFjZW1lbnQ8L2k+IG1heSBjb250YWluIHN1YnN0cmluZ3Mgb2YgdGhlIGZvcm0KICogXGRpZ2l0LCB3aGljaCB3aWxsIGJlCiAqIHJlcGxhY2VkIGJ5IHRoZSB0ZXh0IG1hdGNoaW5nIHRoZSBkaWdpdCd0aCBwYXJlbnRoZXNpemVkIHN1YnN0cmluZzsKICogXDAgd2lsbCBwcm9kdWNlIHRoZSBlbnRpcmUgY29udGVudHMgb2Ygc3RyaW5nLgogKiBVcCB0byBuaW5lIHN1YnN0cmluZ3MgbWF5IGJlIHVzZWQuIFBhcmVudGhlc2VzIG1heSBiZSBuZXN0ZWQsIGluIHdoaWNoCiAqIGNhc2UgdGhleSBhcmUgY291bnRlZCBieSB0aGUgb3BlbmluZyBwYXJlbnRoZXNpcy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAqIFRoZSBpbnB1dCBzdHJpbmcuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgVGhlIG1vZGlmaWVkIHN0cmluZyBpcyByZXR1cm5lZC4gSWYgbm8gbWF0Y2hlcyBhcmUgZm91bmQgaW4KICogPGk+c3RyaW5nPC9pPiwgdGhlbiBpdCB3aWxsIGJlIHJldHVybmVkIHVuY2hhbmdlZC4KICogQHJlbW92ZWQgNy4wCiAqIEBzZWUgcHJlZ19yZXBsYWNlKCkKICovCiNbRGVwcmVjYXRlZChyZWFzb246ICJVc2UgcHJlZ19yZXBsYWNlKCkgaW5zdGVhZCIsIHNpbmNlOiAiNS4zIildCmZ1bmN0aW9uIGVyZWdpX3JlcGxhY2UoJHBhdHRlcm4sICRyZXBsYWNlbWVudCwgJHN0cmluZykge30KCi8qKgogKiBTcGxpdCBzdHJpbmcgaW50byBhcnJheSBieSByZWd1bGFyIGV4cHJlc3Npb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcGxpdC5waHAKICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiA8cD4KICogQ2FzZSBzZW5zaXRpdmUgcmVndWxhciBleHByZXNzaW9uLgogKiA8L3A+CiAqIDxwPgogKiBJZiB5b3Ugd2FudCB0byBzcGxpdCBvbiBhbnkgb2YgdGhlIGNoYXJhY3RlcnMgd2hpY2ggYXJlIGNvbnNpZGVyZWQKICogc3BlY2lhbCBieSByZWd1bGFyIGV4cHJlc3Npb25zLCB5b3UnbGwgbmVlZCB0byBlc2NhcGUgdGhlbSBmaXJzdC4gSWYKICogeW91IHRoaW5rIDxiPnNwbGl0PC9iPiAob3IgYW55IG90aGVyIHJlZ2V4IGZ1bmN0aW9uLCBmb3IKICogdGhhdCBtYXR0ZXIpIGlzIGRvaW5nIHNvbWV0aGluZyB3ZWlyZCwgcGxlYXNlIHJlYWQgdGhlIGZpbGUKICogcmVnZXguNywgaW5jbHVkZWQgaW4gdGhlCiAqIHJlZ2V4LyBzdWJkaXJlY3Rvcnkgb2YgdGhlIFBIUCBkaXN0cmlidXRpb24uIEl0J3MKICogaW4gbWFucGFnZSBmb3JtYXQsIHNvIHlvdSdsbCB3YW50IHRvIGRvIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YKICogbWFuIC91c3IvbG9jYWwvc3JjL3JlZ2V4L3JlZ2V4LjcgaW4gb3JkZXIgdG8gcmVhZCBpdC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAqIFRoZSBpbnB1dCBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIGludCAkbGltaXQgW29wdGlvbmFsXSA8cD4KICogSWYgPGk+bGltaXQ8L2k+IGlzIHNldCwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwKICogY29udGFpbiBhIG1heGltdW0gb2YgPGk+bGltaXQ8L2k+IGVsZW1lbnRzIHdpdGggdGhlCiAqIGxhc3QgZWxlbWVudCBjb250YWluaW5nIHRoZSB3aG9sZSByZXN0IG9mCiAqIDxpPnN0cmluZzwvaT4uCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBhbiBhcnJheSBvZiBzdHJpbmdzLCBlYWNoIG9mIHdoaWNoIGlzIGEgc3Vic3RyaW5nIG9mCiAqIDxpPnN0cmluZzwvaT4gZm9ybWVkIGJ5IHNwbGl0dGluZyBpdCBvbiBib3VuZGFyaWVzIGZvcm1lZAogKiBieSB0aGUgY2FzZS1zZW5zaXRpdmUgcmVndWxhciBleHByZXNzaW9uIDxpPnBhdHRlcm48L2k+LgogKiA8L3A+CiAqIDxwPgogKiBJZiB0aGVyZSBhcmUgbiBvY2N1cnJlbmNlcyBvZgogKiA8aT5wYXR0ZXJuPC9pPiwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgY29udGFpbgogKiBuKzEgaXRlbXMuIEZvciBleGFtcGxlLCBpZgogKiB0aGVyZSBpcyBubyBvY2N1cnJlbmNlIG9mIDxpPnBhdHRlcm48L2k+LCBhbiBhcnJheSB3aXRoCiAqIG9ubHkgb25lIGVsZW1lbnQgd2lsbCBiZSByZXR1cm5lZC4gT2YgY291cnNlLCB0aGlzIGlzIGFsc28gdHJ1ZSBpZgogKiA8aT5zdHJpbmc8L2k+IGlzIGVtcHR5LiBJZiBhbiBlcnJvciBvY2N1cnMsCiAqIDxiPnNwbGl0PC9iPiByZXR1cm5zIDxiPkZBTFNFPC9iPi4KICogQHJlbW92ZWQgNy4wCiAqIEBzZWUgcHJlZ19zcGxpdCgpCiAqLwojW0RlcHJlY2F0ZWQocmVhc29uOiAiVXNlIHByZWdfc3BsaXQoKSBpbnN0ZWFkIiwgc2luY2U6ICI1LjMiKV0KZnVuY3Rpb24gc3BsaXQoJHBhdHRlcm4sICRzdHJpbmcsICRsaW1pdCA9IC0xKSB7fQoKLyoqCiAqIFNwbGl0IHN0cmluZyBpbnRvIGFycmF5IGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiBjYXNlIGluc2Vuc2l0aXZlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3BsaXRpLnBocAogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIDxwPgogKiBDYXNlIGluc2Vuc2l0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KICogPC9wPgogKiA8cD4KICogSWYgeW91IHdhbnQgdG8gc3BsaXQgb24gYW55IG9mIHRoZSBjaGFyYWN0ZXJzIHdoaWNoIGFyZSBjb25zaWRlcmVkCiAqIHNwZWNpYWwgYnkgcmVndWxhciBleHByZXNzaW9ucywgeW91J2xsIG5lZWQgdG8gZXNjYXBlIHRoZW0gZmlyc3QuIElmCiAqIHlvdSB0aGluayA8Yj5zcGxpdGk8L2I+IChvciBhbnkgb3RoZXIgcmVnZXggZnVuY3Rpb24sIGZvcgogKiB0aGF0IG1hdHRlcikgaXMgZG9pbmcgc29tZXRoaW5nIHdlaXJkLCBwbGVhc2UgcmVhZCB0aGUgZmlsZQogKiByZWdleC43LCBpbmNsdWRlZCBpbiB0aGUKICogcmVnZXgvIHN1YmRpcmVjdG9yeSBvZiB0aGUgUEhQIGRpc3RyaWJ1dGlvbi4gSXQncwogKiBpbiBtYW5wYWdlIGZvcm1hdCwgc28geW91J2xsIHdhbnQgdG8gZG8gc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZgogKiBtYW4gL3Vzci9sb2NhbC9zcmMvcmVnZXgvcmVnZXguNyBpbiBvcmRlciB0byByZWFkIGl0LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICogVGhlIGlucHV0IHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gaW50ICRsaW1pdCBbb3B0aW9uYWxdIDxwPgogKiBJZiA8aT5saW1pdDwvaT4gaXMgc2V0LCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbAogKiBjb250YWluIGEgbWF4aW11bSBvZiA8aT5saW1pdDwvaT4gZWxlbWVudHMgd2l0aCB0aGUKICogbGFzdCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHdob2xlIHJlc3Qgb2YKICogPGk+c3RyaW5nPC9pPi4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5IG9mIHN0cmluZ3MsIGVhY2ggb2Ygd2hpY2ggaXMgYSBzdWJzdHJpbmcgb2YKICogPGk+c3RyaW5nPC9pPiBmb3JtZWQgYnkgc3BsaXR0aW5nIGl0IG9uIGJvdW5kYXJpZXMgZm9ybWVkCiAqIGJ5IHRoZSBjYXNlIGluc2Vuc2l0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbiA8aT5wYXR0ZXJuPC9pPi4KICogPC9wPgogKiA8cD4KICogSWYgdGhlcmUgYXJlIG4gb2NjdXJyZW5jZXMgb2YKICogPGk+cGF0dGVybjwvaT4sIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGNvbnRhaW4KICogbisxIGl0ZW1zLiBGb3IgZXhhbXBsZSwgaWYKICogdGhlcmUgaXMgbm8gb2NjdXJyZW5jZSBvZiA8aT5wYXR0ZXJuPC9pPiwgYW4gYXJyYXkgd2l0aAogKiBvbmx5IG9uZSBlbGVtZW50IHdpbGwgYmUgcmV0dXJuZWQuIE9mIGNvdXJzZSwgdGhpcyBpcyBhbHNvIHRydWUgaWYKICogPGk+c3RyaW5nPC9pPiBpcyBlbXB0eS4gSWYgYW4gZXJyb3Igb2NjdXJzLAogKiA8Yj5zcGxpdGk8L2I+IHJldHVybnMgPGI+RkFMU0U8L2I+LgogKiBAcmVtb3ZlZCA3LjAKICogQHNlZSBwcmVnX3NwbGl0KCkKICovCiNbRGVwcmVjYXRlZChyZWFzb246ICJVc2UgcHJlZ19zcGxpdCgpIGluc3RlYWQiLCBzaW5jZTogIjUuMyIpXQpmdW5jdGlvbiBzcGxpdGkoJHBhdHRlcm4sICRzdHJpbmcsICRsaW1pdCA9IC0xKSB7fQoKLyoqCiAqIE1ha2UgcmVndWxhciBleHByZXNzaW9uIGZvciBjYXNlIGluc2Vuc2l0aXZlIG1hdGNoCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsLXJlZ2Nhc2UucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICogVGhlIGlucHV0IHN0cmluZy4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aGljaCB3aWxsIG1hdGNoCiAqIDxpPnN0cmluZzwvaT4sIGlnbm9yaW5nIGNhc2UuIFRoaXMgZXhwcmVzc2lvbiBpcwogKiA8aT5zdHJpbmc8L2k+IHdpdGggZWFjaCBhbHBoYWJldGljIGNoYXJhY3RlciBjb252ZXJ0ZWQgdG8KICogYSBicmFja2V0IGV4cHJlc3Npb247IHRoaXMgYnJhY2tldCBleHByZXNzaW9uIGNvbnRhaW5zIHRoYXQgY2hhcmFjdGVyJ3MKICogdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgZm9ybS4gT3RoZXIgY2hhcmFjdGVycyByZW1haW4gdW5jaGFuZ2VkLgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuMycpXQpmdW5jdGlvbiBzcWxfcmVnY2FzZSgkc3RyaW5nKSB7fQoKLy8gRW5kIG9mIGVyZWcgdi4KPD9waHAKCm5hbWVzcGFjZSBTYXhvbjsKCi8qKgogKiBAbGluayBodHRwczovL3d3dy5zYXhvbmljYS5jb20vc2F4b24tYy9kb2N1bWVudGF0aW9uL2luZGV4Lmh0bWwjIWFwaS9zYXhvbl9jX3BocF9hcGkKICovCmNsYXNzIFNheG9uUHJvY2Vzc29yCnsKICAgIC8qKgogICAgICogQ29uc3RydWN0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkbGljZW5zZSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgUHJvY2Vzc29yIHJlcXVpcmVzIGZlYXR1cmVzIG9mIFNheG9uIHRoYXQgbmVlZCBhIGxpY2Vuc2UgZmlsZS4gSWYgZmFsc2UsIHRoZSBtZXRob2Qgd2lsbCBjcmVhdGVzIGEgQ29uZmlndXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgU2F4b24gSEUgKEhvbWUgZWRpdGlvbikuIElmIHRydWUsIHRoZSBtZXRob2Qgd2lsbCBjcmVhdGUgYSBDb25maWd1cmF0aW9uIGFwcHJvcHJpYXRlIHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZSB0aGF0IGlzIHJ1bm5pbmcgU2F4b24tUEUgb3IgU2F4b24tRUUuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjd2QgVGhlIGN3ZCBhcmd1bWVudCBpcyB1c2VkIHRvIG1hbnVhbGx5IHNldCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB1c2VkIGZvciBleGVjdXRpb25zIG9mIHNvdXJjZSBmaWxlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGxpY2Vuc2UgPSBmYWxzZSwgJGN3ZCA9ICcnKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIGFuIFhkbSBBdG9taWMgdmFsdWUgZnJvbSBhbnkgb2YgdGhlIG1haW4gcHJpbWl0aXZlIHR5cGVzIChpLmUuIGJvb2wsIGludCwgZmxvYXQsIHN0cmluZykKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbHxpbnR8ZmxvYXR8c3RyaW5nICRwcmltaXRpdmVfdHlwZV92YWwKICAgICAqIEByZXR1cm4gWGRtVmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUF0b21pY1ZhbHVlKCRwcmltaXRpdmVfdHlwZV92YWwpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW4ge0BsaW5rIFhkbU5vZGV9IG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBUaGUgJHZhbHVlIGlzIGEgbGV4aWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgWE1MIGRvY3VtZW50LgogICAgICogQHJldHVybiBYZG1Ob2RlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJzZVhtbEZyb21TdHJpbmcoJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIGFuIHtAbGluayBYZG1Ob2RlfSBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZU5hbWUgVmFsdWUgaXMgYSBzdHJpbmcgdHlwZSBhbmQgdGhlIGZpbGUgbmFtZSB0byB0aGUgWE1MIGRvY3VtZW50LiBGaWxlIG5hbWUgY2FuIGJlIHJlbGF0aXZlIG9yIGFic29sdXRlLiBJRiByZWxhdGl2ZSB0aGUgY3dkIGlzIHVzZWQgdG8gcmVzb2x2ZSB0aGUgZmlsZS4KICAgICAqIEByZXR1cm4gWGRtTm9kZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2VYbWxGcm9tRmlsZSgkZmlsZU5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgdXNlZCB0byByZXNvbHZlIGFnYWluc3QgZmlsZXMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjd2QKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Y3dkKCRjd2QpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHJlc291cmNlcyBkaXJlY3Rvcnkgb2Ygd2hlcmUgU2F4b24gY2FuIGxvY2F0ZSBkYXRhIGZvbGRlcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRpcgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZXNvdXJjZURpcmVjdG9yeSgkZGlyKSB7fQoKICAgIC8qKgogICAgICogU2V0IGEgY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBzcGVjaWZpYyB0byB0aGUgcHJvY2Vzc29yIGluIHVzZS4gUHJvcGVydGllcyBzcGVjaWZpZWQgaGVyZSBhcmUgY29tbW9uIGFjcm9zcyBhbGwgdGhlIHByb2Nlc3NvcnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQGxpbmsgaHR0cHM6Ly9zYXhvbmljYS5jb20vZG9jdW1lbnRhdGlvbi9pbmRleC5odG1sIyFjb25maWd1cmF0aW9uL2NvbmZpZy1mZWF0dXJlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29uZmlndXJhdGlvblByb3BlcnR5KCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW4ge0BsaW5rIFhzbHRQcm9jZXNzb3J9IGluIHRoZSBQSFAgZW52aXJvbm1lbnQuIEFuIHtAbGluayBYc2x0UHJvY2Vzc29yfSBpcyB1c2VkIHRvIGNvbXBpbGUgYW5kIGV4ZWN1dGUgWFNMVCBzeXRsZXNoZWV0cwogICAgICoKICAgICAqIEByZXR1cm4gWHNsdFByb2Nlc3NvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV3WHNsdFByb2Nlc3NvcigpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW4ge0BsaW5rIFhzbHQzMFByb2Nlc3Nvcn0gaW4gdGhlIFBIUCBlbnZpcm9ubWVudC4gQW4ge0BsaW5rIFhzbHQzMFByb2Nlc3Nvcn0gaXMgdXNlZCB0byBjb21waWxlIGFuZCBleGVjdXRlIFhTTFQgMy4wIHN0eWxlc2hlZXRzLCBidXQgY2FuIGFsc28gYmUgdXNlZCBmb3IgWFNMVCAyLjAgb3IgMS4wIHN0eWxlc2hlZXRzLiBVc2UgYW4ge0BsaW5rIFhzbHQzMFByb2Nlc3Nvcn0gaW5zdGVhZCBvZiB7QGxpbmsgWHNsdFByb2Nlc3Nvcn0gZm9yIFhTTFQgMy4wIHByb2Nlc3NpbmcuCiAgICAgKgogICAgICogQHJldHVybiBYc2x0MzBQcm9jZXNzb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5ld1hzbHQzMFByb2Nlc3NvcigpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW4ge0BsaW5rIFhRdWVyeVByb2Nlc3Nvcn0gaW4gdGhlIFBIUCBlbnZpcm9ubWVudC4gQW4ge0BsaW5rIFhRdWVyeVByb2Nlc3Nvcn0gaXMgdXNlZCB0byBjb21waWxlIGFuZCBleGVjdXRlIFhRdWVyeSBxdWVyaWVzCiAgICAgKgogICAgICogQHJldHVybiBYUXVlcnlQcm9jZXNzb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5ld1hRdWVyeVByb2Nlc3NvcigpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW4ge0BsaW5rIFhQYXRoUHJvY2Vzc29yfSBpbiB0aGUgUEhQIGVudmlyb25tZW50LiBBbiB7QGxpbmsgWFBhdGhQcm9jZXNzb3J9IGlzIHVzZWQgdG8gY29tcGlsZSBhbmQgZXhlY3V0ZSBYUGF0aCBxdWVyaWVzCiAgICAgKgogICAgICogQHJldHVybiBYUGF0aFByb2Nlc3NvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV3WFBhdGhQcm9jZXNzb3IoKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEge0BsaW5rIFNjaGVtYVZhbGlkYXRvcn0gaW4gdGhlIFBIUCBlbnZpcm9ubWVudC4gQSB7QGxpbmsgU2NoZW1hVmFsaWRhdG9yfSBwcm92aWRlcyBjYXBhYmlsaXRpZXMgdG8gbG9hZCBhbmQgY2FjaGUgWE1MIHNjaGVtYSBkZWZpbml0aW9ucy4gWW91IGNhbiBhbHNvIHZhbGlkYXRlIHNvdXJjZSBkb2N1bWVudHMgd2l0aCByZWdpc3RlcmVkIFhNTCBzY2hlbWEgZGVmaW5pdGlvbnMKICAgICAqCiAgICAgKiBAcmV0dXJuIFNjaGVtYVZhbGlkYXRvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV3U2NoZW1hVmFsaWRhdG9yKCkge30KCiAgICAvKioKICAgICAqIFJlcG9ydCB0aGUgSmF2YSBTYXhvbiB2ZXJzaW9uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZlcnNpb24oKSB7fQoKICAgIC8qKgogICAgICogRW5hYmxlcyB0aGUgYWJpbGl0eSB0byB1c2UgUEhQIGZ1bmN0aW9ucyBhcyBYU0xUIGZ1bmN0aW9ucy4gQWNjZXB0cyBhcyBwYXJhbWV0ZXIgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgU2F4b24vQyBQSFAgRXh0ZW5zaW9uIGxpYnJhcnkuIFRoaXMgaXMgbmVlZGVkIHRvIGRvIHRoZSBjYWxsYmFja3MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbGlicmFyeSBUaGUgZnVsbCBwYXRoIG9mIHRoZSBTYXhvbi9DIFBIUCBFeHRlbnNpb24gbGlicmFyeS4gVGhpcyBpcyBuZWVkZWQgdG8gZG8gdGhlIGNhbGxiYWNrcy4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXJQSFBGdW5jdGlvbnMoJGxpYnJhcnkpIHt9Cn0KCi8qKgogKiBAbGluayBodHRwczovL3d3dy5zYXhvbmljYS5jb20vc2F4b24tYy9kb2N1bWVudGF0aW9uL2luZGV4Lmh0bWwjIWFwaS9zYXhvbl9jX3BocF9hcGkvc2F4b25fY19waHBfeHNsdHByb2Nlc3NvcgogKi8KY2xhc3MgWHNsdFByb2Nlc3Nvcgp7CiAgICAvKioKICAgICAqIFBlcmZvcm0gYSBvbmUgc2hvdCB0cmFuc2Zvcm1hdGlvbi4gVGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhlIHN1cHBsaWVkIG91dHB1dGZpbGUgbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzb3VyY2VGaWxlTmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkc3R5bGVzaGVldEZpbGVOYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvdXRwdXRmaWxlTmFtZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2Zvcm1GaWxlVG9GaWxlKCRzb3VyY2VGaWxlTmFtZSwgJHN0eWxlc2hlZXRGaWxlTmFtZSwgJG91dHB1dGZpbGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybSBhIG9uZSBzaG90IHRyYW5zZm9ybWF0aW9uLiBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGFzIGEgc3RyaW5nLiBJZiB0aGVyZSBhcmUgZmFpbHVyZXMgdGhlbiBhIG51bGwgaXMgcmV0dXJuZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc291cmNlRmlsZU5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0eWxlc2hlZXRGaWxlTmFtZQogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdHJhbnNmb3JtRmlsZVRvU3RyaW5nKCRzb3VyY2VGaWxlTmFtZSwgJHN0eWxlc2hlZXRGaWxlTmFtZSkge30KCiAgICAvKioKICAgICAqIFBlcmZvcm0gYSBvbmUgc2hvdCB0cmFuc2Zvcm1hdGlvbi4gVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBhcyBhbiB7QGxpbmsgWGRtVmFsdWV9LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lCiAgICAgKiBAcmV0dXJuIFhkbVZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2Zvcm1GaWxlVG9WYWx1ZSgkZmlsZU5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtIHRoZSB0cmFuc2Zvcm1hdGlvbiBiYXNlZCB1cG9uIGNhY2hlZCBzdHlsZXNoZWV0IGFuZCBzb3VyY2UgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2Zvcm1Ub0ZpbGUoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyYW5zZm9ybVRvU3RyaW5nKCkge30KCiAgICAvKioKICAgICAqIFBlcmZvcm0gdGhlIHRyYW5zZm9ybWF0aW9uIGJhc2VkIHVwb24gY2FjaGVkIHN0eWxlc2hlZXQgYW5kIGFueSBzb3VyY2UgZG9jdW1lbnQuIFJlc3VsdCByZXR1cm5lZCBhcyBhbiB7QGxpbmsgWGRtVmFsdWV9IG9iamVjdC4gSWYgdGhlcmUgYXJlIGZhaWx1cmVzIHRoZW4gYSBudWxsIGlzIHJldHVybmVkCiAgICAgKgogICAgICogQHJldHVybiBYZG1WYWx1ZXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2Zvcm1Ub1ZhbHVlKCkge30KCiAgICAvKioKICAgICAqIENvbXBpbGUgYSBzdHlsZXNoZWV0IHN1cHBsaWVkIGJ5IGZpbGUgbmFtZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBpbGVGcm9tRmlsZSgkZmlsZU5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBDb21waWxlIGEgc3R5bGVzaGVldCByZWNlaXZlZCBhcyBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGlsZUZyb21TdHJpbmcoJHN0cikge30KCiAgICAvKioKICAgICAqIENvbXBpbGUgYSBzdHlsZXNoZWV0IHJlY2VpdmVkIGFzIGFuIHtAbGluayBYZG1Ob2RlfS4KICAgICAqCiAgICAgKiBAcGFyYW0gWGRtTm9kZSAkbm9kZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21waWxlRnJvbVZhbHVlKCRub2RlKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIG9mIHdoZXJlIHRoZSB0cmFuc2Zvcm1hdGlvbiByZXN1bHQgaXMgc2VudAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE91dHB1dEZpbGUoJGZpbGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogVGhlIHNvdXJjZSB1c2VkIGZvciBhIHF1ZXJ5IG9yIHN0eWxlc2hlZXQuIFJlcXVpcmVzIGFuIHtAbGluayBYZG1WYWx1ZX0gb2JqZWN0CiAgICAgKgogICAgICogQHBhcmFtIFhkbVZhbHVlICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTb3VyY2VGcm9tWGRtVmFsdWUoJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogVGhlIHNvdXJjZSB1c2VkIGZvciBhIHF1ZXJ5IG9yIHN0eWxlc2hlZXQuIFJlcXVpcmVzIGEgZmlsZSBuYW1lIGFzIHN0cmluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFNvdXJjZUZyb21GaWxlKCRmaWxlbmFtZSkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgWFNMVCBzdHlsZXNoZWV0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIFhkbVZhbHVlICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXJhbWV0ZXIoJG5hbWUsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIFNldCBwcm9wZXJ0aWVzIGZvciB0aGUgc3R5bGVzaGVldC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQcm9wZXJ0eSgkbmFtZSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQ2xlYXIgcGFyYW1ldGVyIHZhbHVlcyBzZXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyUGFyYW1ldGVycygpIHt9CgogICAgLyoqCiAgICAgKiBDbGVhciBwcm9wZXJ0eSB2YWx1ZXMgc2V0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhclByb3BlcnRpZXMoKSB7fQoKICAgIC8qKgogICAgICogQ2xlYXIgYW55IGV4Y2VwdGlvbiB0aHJvd24KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4Y2VwdGlvbkNsZWFyKCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgJGkndGggZXJyb3IgY29kZSBpZiB0aGVyZSBhcmUgYW55IGVycm9ycwogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvckNvZGUoJGkpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlICRpJ3RoIGVycm9yIG1lc3NhZ2UgaWYgdGhlcmUgYXJlIGFueSBlcnJvcnMKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKCRpKSB7fQoKICAgIC8qKgogICAgICogR2V0IG51bWJlciBvZiBlcnJvciBkdXJpbmcgZXhlY3V0aW9uIG9yIGV2YWx1YXRlIG9mIHN0eWxlc2hlZXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhjZXB0aW9uQ291bnQoKSB7fQp9CgovKioKICogQGxpbmsgaHR0cHM6Ly93d3cuc2F4b25pY2EuY29tL3NheG9uLWMvZG9jdW1lbnRhdGlvbi9pbmRleC5odG1sIyFhcGkvc2F4b25fY19waHBfYXBpL3NheG9uX2NfcGhwX3hzbHQzMHByb2Nlc3NvcgogKi8KY2xhc3MgWHNsdDMwUHJvY2Vzc29yCnsKICAgIC8qKgogICAgICogRmlsZSBuYW1lcyB0byBYU0xUIHBhY2thZ2VzIHN0b3JlZCBvbiBmaWxlc3RvcmUgYXJlIGFkZGVkIHRvIGEgc2V0IG9mIHBhY2thZ2VzLCB3aGljaCB3aWxsIGJlIGltcG9ydGVkIGxhdGVyIGZvciB1c2Ugd2hlbiBjb21waWxpbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRwYWNrYWdlRmlsZU5hbWVzCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZFBhY2thZ2VzKCRwYWNrYWdlRmlsZU5hbWVzKSB7fQoKICAgIC8qKgogICAgICogSW52b2tlIHRoZSBtb3N0IHJlY2VudGx5IGNvbXBpbGVkIHN0eWxzaGVldCBieSBhcHBseWluZyB0ZW1wbGF0ZXMgdG8gYSBzdXBwbGllZCBpbnB1dCBzZXF1ZW5jZSAodGhlIGluaXRpYWwgbWF0Y2ggc2VsZWN0aW9uKSwgc2F2aW5nIHRoZSByZXN1bHRzIHRvIHRoZSBmaWxlIHNwZWNpZmllZCBpbiB0aGUgJGZpbGVOYW1lIGFyZ3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc3R5bGVzaGVldEZpbGVOYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlTmFtZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBseVRlbXBsYXRlc1JldHVybmluZ0ZpbGUoJHN0eWxlc2hlZXRGaWxlTmFtZSwgJGZpbGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogSW52b2tlIGEgc3R5bGVzaGVldCBieSBhcHBseWluZyB0ZW1wbGF0ZXMgdG8gYSBzdXBwbGllZCBpbnB1dCBzZXF1ZW5jZSAodGhlIGluaXRpYWwgbWF0Y2ggc2VsZWN0aW9uKS4gVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBhcyBhIHNlcmlhbGl6ZWQgc3RyaW5nLiBUaGUgc3R5bGVzaGVldCBmaWxlIG5hbWUgY2FuIGJlIHN1cHBsaWVkIGFzIGFuIGFyZ3VtZW50IGhlcmUuIElmIG51bGwgdGhlbiB0aGUgbW9zdCByZWNlbnRseSBjb21waWxlZCBzdHlsc2hlZXQgaXMgdXNlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHlsZXNoZWV0RmlsZU5hbWUKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBseVRlbXBsYXRlc1JldHVybmluZ1N0cmluZygkc3R5bGVzaGVldEZpbGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogSW52b2tlIGEgc3R5bGVzaGVldCBieSBhcHBseWluZyB0ZW1wbGF0ZXMgdG8gYSBzdXBwbGllZCBpbnB1dCBzZXF1ZW5jZSAodGhlIGluaXRpYWwgbWF0Y2ggc2VsZWN0aW9uKS4gVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBhcyBhbiBYZG1WYWx1ZSBvYmplY3QuIFRoZSBzdHlsZXNoZWV0IGZpbGUgbmFtZSBjYW4gYmUgc3VwcGxpZWQgYXMgYW4gYXJndW1lbnQgaGVyZS4gSWYgbnVsbCB0aGVuIHRoZSBtb3N0IHJlY2VudGx5IGNvbXBpbGVkIHN0eWxzaGVldCBpcyB1c2VkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0eWxlc2hlZXRGaWxlTmFtZQogICAgICogQHJldHVybiBYZG1WYWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwbHlUZW1wbGF0ZXNSZXR1cm5pbmdWYWx1ZSgkc3R5bGVzaGVldEZpbGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBzdHlsZXNoZWV0IGFzc29jaWF0ZWQgdmlhIHRoZSB4bWwtc3R5bGVzaGVldCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIChAbGluayBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwtc3R5bGVzaGVldC8pIGluIHRoZSBkb2N1bWVudCBzcGVjaWZpZWQgaW4gdGhlICR4bWxGaWxlTmFtZSBhcmd1bWVudCwgYW5kIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIGNyaXRlcmlhLiBJZiB0aGVyZSBhcmUgc2V2ZXJhbCBzdWl0YWJsZSB4bWwtc3R5bGVzaGVldCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucywgdGhlbiB0aGUgcmV0dXJuZWQgc291cmNlIHdpbGwgaWRlbnRpZnkgYSBzeW50aGVzaXplZCBzdHlsZXNoZWV0IG1vZHVsZSB0aGF0IGltcG9ydHMgYWxsIHRoZSByZWZlcmVuY2VkIHN0eWxlc2hlZXQgbW9kdWxlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR4bWxGaWxlTmFtZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21waWxlRnJvbUFzc29jaWF0ZWRGaWxlKCR4bWxGaWxlTmFtZSkge30KCiAgICAvKioKICAgICAqIENvbXBpbGUgYSBzdHlsZXNoZWV0IHN1cHBsaWVkIGFzIGEgZmlsZSBhcyBzcGVjaWZpZWQgYnkgdGhlICRmaWxlTmFtZSBhcmd1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlTmFtZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21waWxlRnJvbUZpbGUoJGZpbGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogQ29tcGlsZSBhIHN0eWxlc2hlZXQgcmVjZWl2ZWQgYXMgYSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBpbGVGcm9tU3RyaW5nKCRzdHIpIHt9CgogICAgLyoqCiAgICAgKiBDb21waWxlIGEgc3R5bGVzaGVldCByZWNlaXZlZCBhcyBhbiB7QGxpbmsgWGRtVmFsdWV9LgogICAgICoKICAgICAqIEBwYXJhbSBYZG1WYWx1ZSAkbm9kZQogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGlsZUZyb21WYWx1ZSgkbm9kZSkge30KCiAgICAvKioKICAgICAqIENvbXBpbGUgYSBzdHlsZXNoZWV0IHN1cHBsaWVkIGFzIGEgZmlsZSBhcyBzcGVjaWZpZWQgYnkgdGhlICRmaWxlTmFtZSBhcmd1bWVudCwgYW5kIHNhdmUgYXMgYW4gZXhwb3J0ZWQgZmlsZSAoU0VGKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlTmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkb3V0cHV0RmlsZU5hbWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGlsZUZyb21GaWxlQW5kU2F2ZSgkZmlsZU5hbWUsICRvdXRwdXRGaWxlTmFtZSkge30KCiAgICAvKioKICAgICAqIENvbXBpbGUgYSBzdHlsZXNoZWV0IHJlY2VpdmVkIGFzIGEgc3RyaW5nIGFuZCBzYXZlIGFzIGFuIGV4cG9ydGVkIGZpbGUgKFNFRikuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvdXRwdXRGaWxlTmFtZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21waWxlRnJvbVN0cmluZ0FuZFNhdmUoJHN0ciwgJG91dHB1dEZpbGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogQ29tcGlsZSBhIHN0eWxlc2hlZXQgcmVjZWl2ZWQgYXMgYW4ge0BsaW5rIFhkbU5vZGV9IGFuZCBzYXZlIGFzIGFuIGV4cG9ydGVkIGZpbGUgKFNFRikuCiAgICAgKgogICAgICogQHBhcmFtIFhkbU5vZGUgJG5vZGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG91dHB1dEZpbGVOYW1lCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBpbGVGcm9tVmFsdWVBbmRTYXZlKCRub2RlLCAkb3V0cHV0RmlsZU5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBDYWxsIGEgcHVibGljIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBpbiB0aGUgc3R5bGVzaGVldC4gSGVyZSB3ZSB3cmFwIHRoZSByZXN1bHQgaW4gYW4gWE1MIGRvY3VtZW50LCBhbmQgc2VuZCB0aGlzIGRvY3VtZW50IHRvIGEgc3BlY2lmaWVkIGZpbGUuIFRoZSBmdW5jdGlvbiBuYW1lIGlzIHN1cHBsaWVkIGFzIGEgc3RyaW5nLCBhbmQgdGhlIHZhbHVlcyBvZiB0aGUgYXJndW1lbnRzIHRvIGJlIHN1cHBsaWVkIHRvIHRoZSBmdW5jdGlvbiBhcmUgc3VwcGxpZWQgYXMgYW4gYXJyYXkgb2Yge0BsaW5rIFhkbVZhbHVlfSBvYmplY3RzLiBUaGVzZSB3aWxsIGJlIGNvbnZlcnRlZCBpZiBuZWNlc3NhcnkgdG8gdGhlIHR5cGUgYXMgZGVmaW5lZCBpbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCB1c2luZyB0aGUgZnVuY3Rpb24gY29udmVyc2lvbiBydWxlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmdW5jdGlvbk5hbWUKICAgICAqIEBwYXJhbSBYZG1WYWx1ZVtdICRhcmd1bWVudHMKICAgICAqIEBwYXJhbSBzdHJpbmcgJG91dHB1dEZpbGVOYW1lCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhbGxGdW5jdGlvblJldHVybmluZ0ZpbGUoJGZ1bmN0aW9uTmFtZSwgJGFyZ3VtZW50cywgJG91dHB1dEZpbGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogQ2FsbCBhIHB1YmxpYyB1c2VyLWRlZmluZWQgZnVuY3Rpb24gaW4gdGhlIHN0eWxlc2hlZXQuIEhlcmUgd2Ugd3JhcCB0aGUgcmVzdWx0IGluIGFuIFhNTCBkb2N1bWVudCwgYW5kIHNlcmlhbGl6ZSB0aGlzIGRvY3VtZW50IHRvIGEgc3RyaW5nIHZhbHVlLiBUaGUgZnVuY3Rpb24gbmFtZSBpcyBzdXBwbGllZCBhcyBhIHN0cmluZywgYW5kIHRoZSB2YWx1ZXMgb2YgdGhlIGFyZ3VtZW50cyB0byBiZSBzdXBwbGllZCB0byB0aGUgZnVuY3Rpb24gYXJlIHN1cHBsaWVkIGFzIGFuIGFycmF5IG9mIHtAbGluayBYZG1WYWx1ZX0gb2JqZWN0cy4gVGhlc2Ugd2lsbCBiZSBjb252ZXJ0ZWQgaWYgbmVjZXNzYXJ5IHRvIHRoZSB0eXBlIGFzIGRlZmluZWQgaW4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSwgdXNpbmcgdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZnVuY3Rpb25OYW1lCiAgICAgKiBAcGFyYW0gWGRtVmFsdWVbXSAkYXJndW1lbnRzCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FsbEZ1bmN0aW9uUmV0dXJuaW5nU3RyaW5nKCRmdW5jdGlvbk5hbWUsICRhcmd1bWVudHMpIHt9CgogICAgLyoqCiAgICAgKiBDYWxsIGEgcHVibGljIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBpbiB0aGUgc3R5bGVzaGVldC4gSGVyZSB3ZSB3cmFwIHRoZSByZXN1bHQgaW4gYW4gWE1MIGRvY3VtZW50LCBhbmQgcmV0dXJuIHRoZSBkb2N1bWVudCBhcyBhbiB7QGxpbmsgWGRtVmFsdWV9LiBUaGUgZnVuY3Rpb24gbmFtZSBpcyBzdXBwbGllZCBhcyBhIHN0cmluZywgYW5kIHRoZSB2YWx1ZXMgb2YgdGhlIGFyZ3VtZW50cyB0byBiZSBzdXBwbGllZCB0byB0aGUgZnVuY3Rpb24gYXJlIHN1cHBsaWVkIGFzIGFuIGFycmF5IG9mIHtAbGluayBYZG1WYWx1ZX0gb2JqZWN0cy4gVGhlc2Ugd2lsbCBiZSBjb252ZXJ0ZWQgaWYgbmVjZXNzYXJ5IHRvIHRoZSB0eXBlIGFzIGRlZmluZWQgaW4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSwgdXNpbmcgdGhlIGZ1bmN0aW9uIGNvbnZlcnNpb24gcnVsZXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZnVuY3Rpb25OYW1lCiAgICAgKiBAcGFyYW0gWGRtVmFsdWVbXSAkYXJndW1lbnRzCiAgICAgKiBAcmV0dXJuIFhkbVZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxsRnVuY3Rpb25SZXR1cm5pbmdWYWx1ZSgkZnVuY3Rpb25OYW1lLCAkYXJndW1lbnRzKSB7fQoKICAgIC8qKgogICAgICogSW52b2tlIGEgdHJhbnNmb3JtYXRpb24gYnkgY2FsbGluZyBhIG5hbWVkIHRlbXBsYXRlLCBzYXZpbmcgdGhlIHJlc3VsdHMgdG8gdGhlIGZpbGUgc3BlY2lmaWVkIGluIHRoZSAkb3V0cHV0RmlsZU5hbWUgYXJndW1lbnQuIElmIHRoZSAkdGVtcGxhdGVOYW1lIGFyZ3VtZW50IGlzIG51bGwgdGhlbiB0aGUgeHNsOmluaXRpYWwtdGVtcGxhdGUgaXMgdXNlZC4gUGFyYW1ldGVycyBzdXBwbGllZCB1c2luZyBzZXRJbml0aWFsVGVtcGxhdGVQYXJhbWV0ZXJzKCkgYXJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBjYWxsZWQgdGVtcGxhdGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3R5bGVzaGVldEZpbGVOYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHRlbXBsYXRlTmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkb3V0cHV0RmlsZU5hbWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FsbFRlbXBsYXRlUmV0dXJuaW5nRmlsZSgkc3R5bGVzaGVldEZpbGVOYW1lLCAkdGVtcGxhdGVOYW1lLCAkb3V0cHV0RmlsZU5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBJbnZva2UgYSB0cmFuc2Zvcm1hdGlvbiBieSBjYWxsaW5nIGEgbmFtZWQgdGVtcGxhdGUsIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIHN0cmluZy4gSWYgdGhlICR0ZW1wbGF0ZU5hbWUgYXJndW1lbnQgaXMgbnVsbCB0aGVuIHRoZSB4c2w6aW5pdGlhbC10ZW1wbGF0ZSBpcyB1c2VkLiBQYXJhbWV0ZXJzIHN1cHBsaWVkIHVzaW5nIHtAbGluayBzZXRJbml0aWFsVGVtcGxhdGVQYXJhbWV0ZXJzKCl9IGFyZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgY2FsbGVkIHRlbXBsYXRlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0eWxlc2hlZXRGaWxlTmFtZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICR0ZW1wbGF0ZU5hbWUKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxsVGVtcGxhdGVSZXR1cm5pbmdTdHJpbmcoJHN0eWxlc2hlZXRGaWxlTmFtZSwgJHRlbXBsYXRlTmFtZSkge30KCiAgICAvKioKICAgICAqIEludm9rZSBhIHRyYW5zZm9ybWF0aW9uIGJ5IGNhbGxpbmcgYSBuYW1lZCB0ZW1wbGF0ZSwgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGFuIHtAbGluayBYZG1WYWx1ZX0uIElmIHRoZSAkdGVtcGxhdGVOYW1lIGFyZ3VtZW50IGlzIG51bGwgdGhlbiB0aGUgeHNsOmluaXRpYWwtdGVtcGxhdGUgaXMgdXNlZC4gUGFyYW1ldGVycyBzdXBwbGllZCB1c2luZyB7QGxpbmsgc2V0SW5pdGlhbFRlbXBsYXRlUGFyYW1ldGVycygpfSBhcmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGNhbGxlZCB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHlsZXNoZWV0RmlsZU5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdGVtcGxhdGVOYW1lCiAgICAgKiBAcmV0dXJuIFhkbVZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxsVGVtcGxhdGVSZXR1cm5pbmdWYWx1ZSgkc3R5bGVzaGVldEZpbGVOYW1lLCAkdGVtcGxhdGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybSBhIG9uZSBzaG90IHRyYW5zZm9ybWF0aW9uLCBzYXZpbmcgdGhlIHJlc3VsdHMgdG8gdGhlIGZpbGUgc3BlY2lmaWVkIGluIHRoZSAkb3V0cHV0RmlsZU5hbWUgYXJndW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc291cmNlRmlsZU5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0eWxlc2hlZXRGaWxlTmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkb3V0cHV0RmlsZU5hbWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdHJhbnNmb3JtRmlsZVRvRmlsZSgkc291cmNlRmlsZU5hbWUsICRzdHlsZXNoZWV0RmlsZU5hbWUsICRvdXRwdXRGaWxlTmFtZSkge30KCiAgICAvKioKICAgICAqIFBlcmZvcm0gYSBvbmUgc2hvdCB0cmFuc2Zvcm1hdGlvbi4gVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBhcyBhbiB7QGxpbmsgWGRtVmFsdWV9LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lCiAgICAgKiBAcmV0dXJuIFhkbVZhbHVlfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVUb1ZhbHVlKCRmaWxlTmFtZSkge30KCiAgICAvKioKICAgICAqIFBlcmZvcm0gYSBvbmUgc2hvdCB0cmFuc2Zvcm1hdGlvbi4gVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBhcyBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlTmFtZQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVUb1N0cmluZygkZmlsZU5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtIGEgb25lIHNob3QgdHJhbnNmb3JtYXRpb24sIHNhdmluZyB0aGUgcmVzdWx0cyB0byB0aGUgZmlsZSBhcyBwcmV2aW91c2x5IHNldCAoZS5nLiB1c2luZyB7QGxpbmsgc2V0T3V0cHV0RmlsZSgpfSkuIFRoZSBnbG9iYWwgY29udGV4dCBpdGVtIG1heSBiZSBzdXBwbGllZCBpbiB0aGUgJGNvbnRleHQgYXJndW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIFhkbU5vZGV8bnVsbCAkY29udGV4dAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2Zvcm1Ub0ZpbGUoJGNvbnRleHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybSBhIG9uZSBzaG90IHRyYW5zZm9ybWF0aW9uLiBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGFzIGEgc2VyaWFsaXplZCBzdHJpbmcuIFRoZSBnbG9iYWwgY29udGV4dCBpdGVtIG1heSBiZSBzdXBwbGllZCBpbiB0aGUgJGNvbnRleHQgYXJndW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIFhkbU5vZGV8bnVsbCAkY29udGV4dAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyYW5zZm9ybVRvU3RyaW5nKCRjb250ZXh0ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFBlcmZvcm0gYSBvbmUgc2hvdCB0cmFuc2Zvcm1hdGlvbi4gVGhlIHJlc3VsdCBpcyByZXR1cm5lZCBhcyBhbiB7QGxpbmsgWGRtVmFsdWV9IG9iamVjdC4gSWYgdGhlcmUgYXJlIGZhaWx1cmVzIHRoZW4gYSBudWxsIGlzIHJldHVybmVkLiBUaGUgZ2xvYmFsIGNvbnRleHQgaXRlbSBtYXkgYmUgc3VwcGxpZWQgaW4gdGhlICRjb250ZXh0IGFyZ3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBYZG1Ob2RlfG51bGwgJGNvbnRleHQKICAgICAqIEByZXR1cm4gWGRtVmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyYW5zZm9ybVRvVmFsdWUoJGNvbnRleHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogU2V0IHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBpbml0aWFsIHRlbXBsYXRlLiBUaGVzZSBhcmUgdXNlZCB3aGV0aGVyIHRoZSB0cmFuc2Zvcm1hdGlvbiBpcyBpbnZva2VkIGJ5IGFwcGx5aW5nIHRlbXBsYXRlcyB0byBhbiBpbml0aWFsIGNvbnRleHQgaXRlbSwgb3IgYnkgaW52b2tpbmcgYSBuYW1lZCB0ZW1wbGF0ZS4gVGhlIHBhcmFtZXRlcnMgaW4gcXVlc3Rpb24gYXJlIHRoZSB4c2w6cGFyYW0gZWxlbWVudHMgYXBwZWFyaW5nIGFzIGNoaWxkcmVuIG9mIHRoZSB4c2w6dGVtcGxhdGUgZWxlbWVudC4gVGhlICR0dW5uZWwgYXJndW1lbnQgc2hvdWxkIGJlIHNldCB0byB0cnVlIGlmIHRoZXNlIHZhbHVlcyBhcmUgdG8gYmUgdXNlZCBmb3Igc2V0dGluZyB0dW5uZWwgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtZXRlcnMKICAgICAqIEBwYXJhbSBib29sICR0dW5uZWwKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW5pdGlhbFRlbXBsYXRlUGFyYW1ldGVycygkcGFyYW1ldGVycywgJHR1bm5lbCkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSB0byB3aGljaCB0ZW1wbGF0ZXMgYXJlIHRvIGJlIGFwcGxpZWQgKGVxdWl2YWxlbnQgdG8gdGhlICdzZWxlY3QnIGF0dHJpYnV0ZSBvZiB4c2w6YXBwbHktdGVtcGxhdGVzKS4KICAgICAqCiAgICAgKiBAcGFyYW0gWGRtVmFsdWUgJHZhbHVlCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEluaXRpYWxNYXRjaFNlbGVjdGlvbigkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGluaXRpYWwgdmFsdWUgdG8gd2hpY2ggdGVtcGxhdGVzIGFyZSB0byBiZSBhcHBsaWVkIChlcXVpdmFsZW50IHRvIHRoZSAnc2VsZWN0JyBhdHRyaWJ1dGUgb2YgeHNsOmFwcGx5LXRlbXBsYXRlcykuIFRoaXMgaW5pdGlhbCBtYXRjaCBzZWxlY3Rpb24gaXMgc3VwcGxpZWQgYXMgYSBmaWxlIGFzIHNwZWNpZmllZCBieSB0aGUgJGZpbGVOYW1lIGFyZ3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEluaXRpYWxNYXRjaFNlbGVjdGlvbkFzRmlsZSgkZmlsZU5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBTdXBwbHkgdGhlIGNvbnRleHQgaXRlbSB0byBiZSB1c2VkIHdoZW4gZXZhbHVhdGluZyBnbG9iYWwgdmFyaWFibGVzIGFuZCBwYXJhbWV0ZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBYZG1JdGVtICRpdGVtCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEdsb2JhbENvbnRleHRJdGVtKCRpdGVtKSB7fQoKICAgIC8qKgogICAgICogU3VwcGx5IHRoZSBjb250ZXh0IGl0ZW0gdG8gYmUgdXNlZCB3aGVuIGV2YWx1YXRpbmcgZ2xvYmFsIHZhcmlhYmxlcyBhbmQgcGFyYW1ldGVycywgYXMgYSBmaWxlIGFzIHNwZWNpZmllZCBieSB0aGUgJGZpbGVOYW1lIGFyZ3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEdsb2JhbENvbnRleHRGcm9tRmlsZSgkZmlsZU5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG91dHB1dCBmaWxlIHRvIHdoaWNoIHRoZSB0cmFuc2Zvcm1hdGlvbiByZXN1bHQgd2lsbCBiZSBzZW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE91dHB1dEZpbGUoJGZpbGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGZvciB0aGUgWFNMVCBzdHlsZXNoZWV0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBYZG1WYWx1ZSAkdmFsdWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGFyYW1ldGVyKCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgcHJvcGVydGllcyBmb3IgdGhlIFhTTFQgcHJvY2Vzc29yLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFByb3BlcnR5KCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTYXkgd2hldGhlciBqdXN0LWluLXRpbWUgY29tcGlsYXRpb24gb2YgdGVtcGxhdGUgcnVsZXMgc2hvdWxkIGJlIHVzZWQuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHZhbHVlCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEp1c3RJblRpbWVDb21waWxhdGlvbigkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdHJ1ZSBpZiB0aGUgcmVzdWx0IG9mIGEgdHJhbnNmb3JtYXRpb24gc2hvdWxkIGJlIHJldHVybmVkIGFzIGEgcmF3IHtAbGluayBYZG1WYWx1ZX0gcmVzdWx0LCByYXRoZXIgdGhhbiBhcyBhIHJlc3VsdCB0cmVlIChhbiB7QGxpbmsgWGRtTm9kZX0gb2JqZWN0IHdpdGggYSBEb2N1bWVudCBub2RlIGFzIGl0cyByb290KS4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkdmFsdWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVzdWx0QXNSYXdWYWx1ZSgkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBDbGVhciBwYXJhbWV0ZXIgdmFsdWVzIHNldC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyUGFyYW1ldGVycygpIHt9CgogICAgLyoqCiAgICAgKiBDbGVhciBwcm9wZXJ0eSB2YWx1ZXMgc2V0LgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXJQcm9wZXJ0aWVzKCkge30KCiAgICAvKioKICAgICAqIENsZWFyIGFueSBleGNlcHRpb25zIHRocm93bi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4Y2VwdGlvbkNsZWFyKCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgaSd0aCBlcnJvciBjb2RlIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3JzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvckNvZGUoJGkpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGkndGggZXJyb3IgbWVzc2FnZSBpZiB0aGVyZSBhcmUgYW55IGVycm9ycy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKCRpKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBudW1iZXIgb2YgZXJyb3JzIGR1cmluZyBleGVjdXRpb24gb3IgZXZhbHVhdGlvbiBvZiBhIHN0eWxlc2hlZXQuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEV4Y2VwdGlvbkNvdW50KCkge30KfQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnNheG9uaWNhLmNvbS9zYXhvbi1jL2RvY3VtZW50YXRpb24vaW5kZXguaHRtbCMhYXBpL3NheG9uX2NfcGhwX2FwaS9zYXhvbl9jX3BocF94cXVlcnlwcm9jZXNzb3IKICovCmNsYXNzIFhRdWVyeVByb2Nlc3Nvcgp7CiAgICAvKioKICAgICAqIENvbXBpbGUgYW5kIGV2YWx1YXRlIHRoZSBxdWVyeS4gUmVzdWx0IHJldHVybmVkIGFzIGFuIFhkbVZhbHVlIG9iamVjdC4gSWYgdGhlcmUgYXJlIGZhaWx1cmVzIHRoZW4gYSBudWxsIGlzIHJldHVybmVkCiAgICAgKgogICAgICogQHJldHVybiBYZG1WYWx1ZXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBydW5RdWVyeVRvVmFsdWUoKSB7fQoKICAgIC8qKgogICAgICogQ29tcGlsZSBhbmQgZXZhbHVhdGUgdGhlIHF1ZXJ5LiBSZXN1bHQgcmV0dXJuZWQgYXMgc3RyaW5nLiBJZiB0aGVyZSBhcmUgZmFpbHVyZXMgdGhlbiBhIG51bGwgaXMgcmV0dXJuZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBydW5RdWVyeVRvU3RyaW5nKCkge30KCiAgICAvKioKICAgICAqIENvbXBpbGUgYW5kIGV2YWx1YXRlIHRoZSBxdWVyeS4gU2F2ZSB0aGUgcmVzdWx0IHRvIGZpbGUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvdXRmaWxlbmFtZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBydW5RdWVyeVRvRmlsZSgkb3V0ZmlsZW5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBxdWVyeSBzdXBwbGllZCBhcyBhIHN0cmluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRRdWVyeUNvbnRlbnQoJHN0cikge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBYZG1JdGVtICRpdGVtCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFF1ZXJ5SXRlbSgkaXRlbSkge30KCiAgICAvKioKICAgICAqIHF1ZXJ5IHN1cHBsaWVkIGFzIGEgZmlsZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFF1ZXJ5RmlsZSgkZmlsZW5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGluaXRpYWwgY29udGV4dCBpdGVtIGZvciB0aGUgcXVlcnkuIFN1cHBsaWVkIGFzIGZpbGVuYW1lCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZU5hbWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29udGV4dEl0ZW1Gcm9tRmlsZSgkZmlsZU5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGluaXRpYWwgY29udGV4dCBpdGVtIGZvciB0aGUgcXVlcnkuCiAgICAgKiBBbnkgb25lIG9mIHRoZSBvYmplY3RzIGFyZSBhY2NlcHRlZDoge0BsaW5rIFhkbVZhbHVlfSwge0BsaW5rIFhkbUl0ZW19LCB7QGxpbmsgWGRtTm9kZX0gYW5kIHtAbGluayBYZG1BdG9taWNWYWx1ZX0uCiAgICAgKgogICAgICogQHBhcmFtIFhkbVZhbHVlfFhkbUl0ZW18WGRtTm9kZXxYZG1BdG9taWNWYWx1ZSAkb2JqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbnRleHRJdGVtKCRvYmopIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHN0YXRpYyBiYXNlIFVSSSBmb3IgYSBxdWVyeSBleHByZXNzaW9ucyBjb21waWxlZCB1c2luZyB0aGlzIFhRdWVyeSBQcm9jZXNzb3IuIFRoZSBiYXNlIFVSSSBpcyBwYXJ0IG9mIHRoZSBzdGF0aWMgY29udGV4dCwgYW5kIGlzIHVzZWQgdG8gcmVzb2x2ZSBhbnkgcmVsYXRpdmUgVVJJUyBhcHBlYXJpbmcgd2l0aGluIGEgcXVlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmkKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UXVlcnlCYXNlVVJJKCR1cmkpIHt9CgogICAgLyoqCiAgICAgKiBEZWNsYXJlIGEgbmFtZXNwYWNlIGJpbmRpbmcgYXMgcGFydCBvZiB0aGUgc3RhdGljIGNvbnRleHQgZm9yIFhQYXRoIGV4cHJlc3Npb25zIGNvbXBpbGVkIHVzaW5nIHRoaXMgWFF1ZXJ5IHByb2Nlc3NvcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlY2xhcmVOYW1lc3BhY2UoJHByZWZpeCwgJG5hbWVzcGFjZSkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgWFF1ZXJ5IFByb2Nlc3NvcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBYZG1WYWx1ZSAkdmFsdWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGFyYW1ldGVyKCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgcHJvcGVydGllcyBmb3IgUXVlcnkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UHJvcGVydHkoJG5hbWUsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIENsZWFyIHBhcmFtZXRlciB2YWx1ZXMgc2V0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhclBhcmFtZXRlcnMoKSB7fQoKICAgIC8qKgogICAgICogQ2xlYXIgcHJvcGVydHkgdmFsdWVzIHNldAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXJQcm9wZXJ0aWVzKCkge30KCiAgICAvKioKICAgICAqIENsZWFyIGFueSBleGNlcHRpb24gdGhyb3duCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGNlcHRpb25DbGVhcigpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlICRpJ3RoIGVycm9yIGNvZGUgaWYgdGhlcmUgYXJlIGFueSBlcnJvcnMKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JDb2RlKCRpKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSAkaSd0aCBlcnJvciBtZXNzYWdlIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3JzCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yTWVzc2FnZSgkaSkge30KCiAgICAvKioKICAgICAqIEdldCBudW1iZXIgb2YgZXJyb3IgZHVyaW5nIGV4ZWN1dGlvbiBvciBldmFsdWF0ZSBvZiBxdWVyeQogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeGNlcHRpb25Db3VudCgpIHt9Cn0KCi8qKgogKiBAbGluayBodHRwczovL3d3dy5zYXhvbmljYS5jb20vc2F4b24tYy9kb2N1bWVudGF0aW9uL2luZGV4Lmh0bWwjIWFwaS9zYXhvbl9jX3BocF9hcGkvc2F4b25fY19waHBfeHBhdGhwcm9jZXNzb3IKICovCmNsYXNzIFhQYXRoUHJvY2Vzc29yCnsKICAgIC8qKgogICAgICogU2V0IHRoZSBjb250ZXh0IGl0ZW0gZnJvbSBhIHtAbGluayBYZG1JdGVtfQogICAgICoKICAgICAqIEBwYXJhbSBYZG1JdGVtICRpdGVtCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbnRleHRJdGVtKCRpdGVtKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBjb250ZXh0IGl0ZW0gZnJvbSBmaWxlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZU5hbWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29udGV4dEZpbGUoJGZpbGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogRXZhbHVhdGUgdGhlIFhQYXRoIGV4cHJlc3Npb24sIHJldHVybmluZyB0aGUgZWZmZWN0aXZlIGJvb2xlYW4gdmFsdWUgb2YgdGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR4cGF0aFN0cgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlZmZlY3RpdmVCb29sZWFuVmFsdWUoJHhwYXRoU3RyKSB7fQoKICAgIC8qKgogICAgICogQ29tcGlsZSBhbmQgZXZhbHVhdGUgYW4gWFBhdGggZXhwcmVzc2lvbiwgc3VwcGxpZWQgYXMgYSBjaGFyYWN0ZXIgc3RyaW5nLiBSZXN1bHQgaXMgYW4ge0BsaW5rIFhkbVZhbHVlfQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHhwYXRoU3RyCiAgICAgKiBAcmV0dXJuIFhkbVZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBldmFsdWF0ZSgkeHBhdGhTdHIpIHt9CgogICAgLyoqCiAgICAgKiBDb21waWxlIGFuZCBldmFsdWF0ZSBhbiBYUGF0aCBleHByZXNzaW9uIHdob3NlIHJlc3VsdCBpcyBleHBlY3RlZCB0byBiZSBhIHNpbmdsZSBpdGVtLCB3aXRoIGEgZ2l2ZW4gY29udGV4dCBpdGVtLiBUaGUgZXhwcmVzc2lvbiBpcyBzdXBwbGllZCBhcyBhIGNoYXJhY3RlciBzdHJpbmcsIGFuZCB0aGUgcmVzdWx0IHJldHVybmVkIGFzIGFuIHtAbGluayBYZG1JdGVtfS4gUmV0dXJuIE5VTEwgaWYgdGhlIGV4cHJlc3Npb24gcmV0dXJucyBhbiBlbXB0eSBzZXF1ZW5jZS4gSWYgdGhlIGV4cHJlc3Npb24gcmV0dXJucyBhIHNlcXVlbmNlIG9mIG1vcmUgdGhhbiBvbmUgaXRlbSwgYW55IGl0ZW1zIGFmdGVyIHRoZSBmaXJzdCBhcmUgaWdub3JlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR4cGF0aFN0cgogICAgICogQHJldHVybiBYZG1JdGVtfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV2YWx1YXRlU2luZ2xlKCR4cGF0aFN0cikge30KCiAgICAvKioKICAgICAqIERlY2xhcmUgYSBuYW1lc3BhY2UgYmluZGluZyBhcyBwYXJ0IG9mIHRoZSBzdGF0aWMgY29udGV4dCBmb3IgWFBhdGggZXhwcmVzc2lvbnMgY29tcGlsZWQgdXNpbmcgdGhpcyB7QGxpbmsgWFBhdGhQcm9jZXNzb3J9CiAgICAgKgogICAgICogQHBhcmFtICRwcmVmaXgKICAgICAqIEBwYXJhbSAkbmFtZXNwYWNlCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlY2xhcmVOYW1lc3BhY2UoJHByZWZpeCwgJG5hbWVzcGFjZSkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgc3RhdGljIGJhc2UgVVJJIGZvciBYUGF0aCBleHByZXNzaW9ucyBjb21waWxlZCB1c2luZyB0aGlzIFhRdWVyeSBQcm9jZXNzb3IuIFRoZSBiYXNlIFVSSSBpcyBwYXJ0IG9mIHRoZSBzdGF0aWMgY29udGV4dCwgYW5kIGlzIHVzZWQgdG8gcmVzb2x2ZSBhbnkgcmVsYXRpdmUgVVJJUyBhcHBlYXJpbmcgd2l0aGluIGEgcXVlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmkKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QmFzZVVSSSgkdXJpKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGZvciBYUXVlcnkgUHJvY2Vzc29yCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIFhkbVZhbHVlICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXJhbWV0ZXIoJG5hbWUsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIFNldCBwcm9wZXJ0aWVzIGZvciBRdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQcm9wZXJ0eSgkbmFtZSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQ2xlYXIgcGFyYW1ldGVyIHZhbHVlcyBzZXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyUGFyYW1ldGVycygpIHt9CgogICAgLyoqCiAgICAgKiBDbGVhciBwcm9wZXJ0eSB2YWx1ZXMgc2V0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhclByb3BlcnRpZXMoKSB7fQoKICAgIC8qKgogICAgICogQ2xlYXIgYW55IGV4Y2VwdGlvbiB0aHJvd24KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4Y2VwdGlvbkNsZWFyKCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgJGkndGggZXJyb3IgY29kZSBpZiB0aGVyZSBhcmUgYW55IGVycm9ycwogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvckNvZGUoJGkpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlICRpJ3RoIGVycm9yIG1lc3NhZ2UgaWYgdGhlcmUgYXJlIGFueSBlcnJvcnMKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKCRpKSB7fQoKICAgIC8qKgogICAgICogR2V0IG51bWJlciBvZiBlcnJvciBkdXJpbmcgZXhlY3V0aW9uIG9yIGV2YWx1YXRlIG9mIHN0eWxlc2hlZXQgYW5kIHF1ZXJ5LCByZXNwZWN0aXZlbHkKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhjZXB0aW9uQ291bnQoKSB7fQp9CgovKioKICogQGxpbmsgaHR0cHM6Ly93d3cuc2F4b25pY2EuY29tL3NheG9uLWMvZG9jdW1lbnRhdGlvbi9pbmRleC5odG1sIyFhcGkvc2F4b25fY19waHBfYXBpL3NheG9uX2NfcGhwX3NjaGVtYXZhbGlkYXRvcgogKi8KY2xhc3MgU2NoZW1hVmFsaWRhdG9yCnsKICAgIC8qKgogICAgICogVGhlIGluc3RhbmNlIGRvY3VtZW50IHRvIGJlIHZhbGlkYXRlZC4gU3VwcGxpZWQgYXMgYW4gWGRtIE5vZGUKICAgICAqCiAgICAgKiBAcGFyYW0gWGRtTm9kZSAkbm9kZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTb3VyY2VOb2RlKCRub2RlKSB7fQoKICAgIC8qKgogICAgICogVGhlIGluc3RhbmNlIGRvY3VtZW50IHRvIGJlIHZhbGlkYXRlZC4gU3VwcGxpZWQgZmlsZSBuYW1lIGlzIHJlc29sdmVkIGFuZCBhY2Nlc3NlZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE91dHB1dEZpbGUoJGZpbGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogUmVnaXN0ZXIgdGhlIFNjaGVtYSB3aGljaCBpcyBnaXZlbiBhcyBmaWxlIG5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZU5hbWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXJTY2hlbWFGcm9tRmlsZSgkZmlsZU5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlciB0aGUgU2NoZW1hIHdoaWNoIGlzIGdpdmVuIGFzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNjaGVtYVN0cgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3RlclNjaGVtYUZyb21TdHJpbmcoJHNjaGVtYVN0cikge30KCiAgICAvKioKICAgICAqIFZhbGlkYXRlIGFuIGluc3RhbmNlIGRvY3VtZW50IHN1cHBsaWVkIGFzIGEgU291cmNlIG9iamVjdC4gQXNzdW1lIHNvdXJjZSBkb2N1bWVudCBoYXMgYWxyZWFkeSBiZWVuIHN1cHBsaWVkIHRocm91Z2ggYWNjZXNzb3IgbWV0aG9kcwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZmlsZW5hbWUgVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgdmFsaWRhdGVkLiAkZmlsZW5hbWUgY2FuIGJlIG51bGwsIGluIHRoYXQgY2FzZSBpdCBpcyBhc3N1bWVkIHNvdXJjZSBkb2N1bWVudCBoYXMgYWxyZWFkeSBiZWVuIHN1cHBsaWVkIHRocm91Z2ggYWNjZXNzb3IgbWV0aG9kcwogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZSgkZmlsZW5hbWUgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogVmFsaWRhdGUgYW4gaW5zdGFuY2UgZG9jdW1lbnQgc3VwcGxpZWQgYXMgYSBTb3VyY2Ugb2JqZWN0IHdpdGggdGhlIHZhbGlkYXRlZCBkb2N1bWVudCByZXR1cm5lZCB0byB0aGUgY2FsbGluZyBwcm9ncmFtLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZmlsZW5hbWUgVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgdmFsaWRhdGVkLiAkZmlsZW5hbWUgY2FuIGJlIG51bGwsIGluIHRoYXQgY2FzZSBpdCBpcyBhc3N1bWVkIHNvdXJjZSBkb2N1bWVudCBoYXMgYWxyZWFkeSBiZWVuIHN1cHBsaWVkIHRocm91Z2ggYWNjZXNzb3IgbWV0aG9kcwogICAgICogQHJldHVybiBYZG1Ob2RlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZVRvTm9kZSgkZmlsZW5hbWUgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSB2YWxpZGF0aW9uIHJlcG9ydCBwcm9kdWNlZCBhZnRlciB2YWxpZGF0aW5nIHRoZSBzb3VyY2UgZG9jdW1lbnQuIFRoZSByZXBvcnRpbmcgZmVhdHVyZSBpcyBzd2l0Y2hlZCBvbiB2aWEgc2V0dGluZyB0aGUgcHJvcGVydHkgb24gdGhlIHtAbGluayBTY2hlbWFWYWxpZGF0b3IpOiAkdmFsaWRhdG9yLT5zZXRQcm9wZXJ0eSgncmVwb3J0JywgJ3RydWUnKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFhkbU5vZGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbGlkYXRpb25SZXBvcnQoKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGZvciBYUXVlcnkgUHJvY2Vzc29yCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIFhkbVZhbHVlICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXJhbWV0ZXIoJG5hbWUsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIFNldCBwcm9wZXJ0aWVzIGZvciBTY2hlbWEgVmFsaWRhdG9yLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFByb3BlcnR5KCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBDbGVhciBwYXJhbWV0ZXIgdmFsdWVzIHNldAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXJQYXJhbWV0ZXJzKCkge30KCiAgICAvKioKICAgICAqIENsZWFyIHByb3BlcnR5IHZhbHVlcyBzZXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyUHJvcGVydGllcygpIHt9CgogICAgLyoqCiAgICAgKiBDbGVhciBhbnkgZXhjZXB0aW9uIHRocm93bgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhjZXB0aW9uQ2xlYXIoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSAkaSd0aCBlcnJvciBjb2RlIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3JzCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yQ29kZSgkaSkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgJGkndGggZXJyb3IgbWVzc2FnZSBpZiB0aGVyZSBhcmUgYW55IGVycm9ycwogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoJGkpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgbnVtYmVyIG9mIGVycm9yIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIHZhbGlkYXRvcgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeGNlcHRpb25Db3VudCgpIHt9Cn0KCi8qKgogKiBAbGluayBodHRwczovL3d3dy5zYXhvbmljYS5jb20vc2F4b24tYy9kb2N1bWVudGF0aW9uL2luZGV4Lmh0bWwjIWFwaS9zYXhvbl9jX3BocF9hcGkvc2F4b25fY19waHBfeGRtdmFsdWUKICovCmNsYXNzIFhkbVZhbHVlCnsKICAgIC8qKgogICAgICogR2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzZXF1ZW5jZQogICAgICoKICAgICAqIEByZXR1cm4gWGRtSXRlbQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG4ndGggaXRlbSBpbiB0aGUgdmFsdWUsIGNvdW50aW5nIGZyb20gemVybwogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4CiAgICAgKiBAcmV0dXJuIFhkbUl0ZW0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGl0ZW1BdCgkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2VxdWVuY2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2l6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBBZGQgaXRlbSB0byB0aGUgc2VxdWVuY2UgYXQgdGhlIGVuZC4KICAgICAqCiAgICAgKiBAcGFyYW0gWGRtSXRlbSAkaXRlbQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkWGRtSXRlbSgkaXRlbSkge30KfQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnNheG9uaWNhLmNvbS9zYXhvbi1jL2RvY3VtZW50YXRpb24vaW5kZXguaHRtbCMhYXBpL3NheG9uX2NfcGhwX2FwaS9zYXhvbl9jX3BocF94ZG1pdGVtCiAqLwpjbGFzcyBYZG1JdGVtIGV4dGVuZHMgWGRtVmFsdWUKewogICAgLyoqCiAgICAgKiBHZXQgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgaXRlbS4gRm9yIGEgbm9kZSwgdGhpcyBnZXRzIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIG5vZGUuIEZvciBhbiBhdG9taWMgdmFsdWUsIGl0IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgY2FzdGluZyB0aGUgdmFsdWUgdG8gYSBzdHJpbmcuIEluIGFsbCBjYXNlcyB0aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGFwcGx5aW5nIHRoZSBYUGF0aCBzdHJpbmcoKSBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RyaW5nVmFsdWUoKSB7fQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGl0ZW0gaXMgYSBub2RlIHZhbHVlIG9yIG5vdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzTm9kZSgpIHt9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgaXRlbSBpcyBhbiBhdG9taWMgdmFsdWUgb3Igbm90LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNBdG9taWMoKSB7fQoKICAgIC8qKgogICAgICogUHJvdmlkZWQgdGhlIGl0ZW0gaXMgYW4gYXRvbWljIHZhbHVlIHdlIHJldHVybiB0aGUge0BsaW5rIFhkbUF0b21pY1ZhbHVlfSBvdGhlcndpc2UgcmV0dXJuIG51bGwKICAgICAqCiAgICAgKiBAcmV0dXJuIFhkbUF0b21pY1ZhbHVlfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0b21pY1ZhbHVlKCkge30KCiAgICAvKioKICAgICAqIFByb3ZpZGVkIHRoZSBpdGVtIGlzIGEgbm9kZSB2YWx1ZSB3ZSByZXR1cm4gdGhlIHtAbGluayBYZG1Ob2RlfSBvdGhlcndpc2UgcmV0dXJuIG51bGwKICAgICAqCiAgICAgKiBAcmV0dXJuIFhkbU5vZGV8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZVZhbHVlKCkge30KfQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnNheG9uaWNhLmNvbS9zYXhvbi1jL2RvY3VtZW50YXRpb24vaW5kZXguaHRtbCMhYXBpL3NheG9uX2NfcGhwX2FwaS9zYXhvbl9jX3BocF94ZG1ub2RlCiAqLwpjbGFzcyBYZG1Ob2RlIGV4dGVuZHMgWGRtSXRlbQp7CiAgICAvKioKICAgICAqIEdldCB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBpdGVtLiBGb3IgYSBub2RlLCB0aGlzIGdldHMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgbm9kZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RyaW5nVmFsdWUoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBraW5kIG9mIG5vZGUKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Tm9kZUtpbmQoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBub2RlLCBhcyBhIEVRTmFtZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlTmFtZSgpIHt9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgaXRlbSBpcyBhbiBhdG9taWMgdmFsdWUgb3IgYSBub2RlLiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBGQUxTRSBhcyB0aGUgaXRlbSBpcyBub3QgYXRvbWljCiAgICAgKgogICAgICogQHJldHVybiBmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNBdG9taWMoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb3VudCBvZiBjaGlsZCBub2RlIGF0IHRoaXMgY3VycmVudCBub2RlCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENoaWxkQ291bnQoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb3VudCBvZiBhdHRyaWJ1dGUgbm9kZXMgYXQgdGhpcyBub2RlCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZUNvdW50KCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbid0aCBjaGlsZCBub2RlIGF0IHRoaXMgbm9kZS4gSWYgdGhlIGNoaWxkIG5vZGUgc2VsZWN0ZWQgZG9lcyBub3QgZXhpc3QgdGhlbiByZXR1cm4gbnVsbAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4CiAgICAgKiBAcmV0dXJuIFhkbU5vZGV8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hpbGROb2RlKCRpbmRleCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgcGFyZW50IG9mIHRoaXMgbm9kZS4gSWYgcGFyZW50IG5vZGUgZG9lcyBub3QgZXhpc3QgdGhlbiByZXR1cm4gbnVsbAogICAgICoKICAgICAqIEByZXR1cm4gWGRtTm9kZXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXJlbnQoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBuJ3RoIGF0dHJpYnV0ZSBub2RlIGF0IHRoaXMgbm9kZS4gSWYgdGhlIGF0dHJpYnV0ZSBub2RlIHNlbGVjdGVkIGRvZXMgbm90IGV4aXN0IHRoZW4gcmV0dXJuIG51bGwKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleAogICAgICogQHJldHVybiBYZG1Ob2RlfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZU5vZGUoJGluZGV4KSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBuJ3RoIGF0dHJpYnV0ZSBub2RlIHZhbHVlIGF0IHRoaXMgbm9kZS4gSWYgdGhlIGF0dHJpYnV0ZSBub2RlIHNlbGVjdGVkIGRvZXMgbm90IGV4aXN0IHRoZW4gcmV0dXJuIG51bGwKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleAogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlVmFsdWUoJGluZGV4KSB7fQp9CgovKioKICogQGxpbmsgaHR0cHM6Ly93d3cuc2F4b25pY2EuY29tL3NheG9uLWMvZG9jdW1lbnRhdGlvbi9pbmRleC5odG1sIyFhcGkvc2F4b25fY19waHBfYXBpL3NheG9uX2NfcGhwX3hkbWF0b21pY3ZhbHVlCiAqLwpjbGFzcyBYZG1BdG9taWNWYWx1ZSBleHRlbmRzIFhkbUl0ZW0KewogICAgLyoqCiAgICAgKiBHZXQgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgaXRlbS4gRm9yIGFuIGF0b21pYyB2YWx1ZSwgaXQgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBjYXN0aW5nIHRoZSB2YWx1ZSB0byBhIHN0cmluZy4gSW4gYWxsIGNhc2VzIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgYXBwbHlpbmcgdGhlIFhQYXRoIHN0cmluZygpIGZ1bmN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHJpbmdWYWx1ZSgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHZhbHVlIGNvbnZlcnRlZCB0byBhIGJvb2xlYW4gdXNpbmcgdGhlIFhQYXRoIGNhc3RpbmcgcnVsZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEJvb2xlYW5WYWx1ZSgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHZhbHVlIGNvbnZlcnRlZCB0byBhIGZsb2F0IHVzaW5nIHRoZSBYUGF0aCBjYXN0aW5nIHJ1bGVzLiBJZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcsIHRoZSBYU0QgMS4xIHJ1bGVzIGFyZSB1c2VkLCB3aGljaCBtZWFucyB0aGF0IHRoZSBzdHJpbmcgIitJTkYiIGlzIHJlY29nbmlzZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREb3VibGVWYWx1ZSgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyIHVzaW5nIHRoZSBYUGF0aCBjYXN0aW5nIHJ1bGVzCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExvbmdWYWx1ZSgpIHt9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgaXRlbSBpcyBhbiBhdG9taWMgdmFsdWUgb3IgYSBub2RlLiBSZXR1cm4gVFJVRSBpZiB0aGUgaXRlbSBpcyBhbiBhdG9taWMgdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHRydWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzQXRvbWljKCkge30KfQo8P3BocAovKioKICogU3R1YnMgZm9yIFdpbkNhY2hlIGV4dGVuc2lvbiBieSBNaWNyb3NvZnQgKHYxLjEuMCkKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vYm9vay53aW5jYWNoZS5waHAKICogV2luZG93cyBDYWNoZSBFeHRlbnNpb24gZm9yIFBIUCBpcyBhIFBIUCBhY2NlbGVyYXRvciB0aGF0IGlzIHVzZWQgdG8gaW5jcmVhc2UKICogdGhlIHNwZWVkIG9mIFBIUCBhcHBsaWNhdGlvbnMgcnVubmluZyBvbiBXaW5kb3dzIGFuZCBXaW5kb3dzIFNlcnZlci4KICogUmVxdWlyZW1lbnRzOgogKiAgIElJUyBXZWJTZXJ2ZXIKICogICBGYXN0Q0dJIG1vZGUKICogICBQSFAgNS4yLlgsIE5vbi10aHJlYWQtc2FmZSBidWlsZAogKiAgIFBIUCA1LjMgWDg2LCBOb24tdGhyZWFkLXNhZmUgVkM5IGJ1aWxkCiAqCiAqIEF1dGhvcjogQW5kcml5IEJhemFub3YKICogRGF0ZSAgOiAyMDEwLTA5LTMwCiAqLwoKLyoqCiAqIChQSFAgNS4yKzsgUEVDTCB3aW5jYWNoZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXMgY2FjaGVkIGluIHRoZSBmaWxlIGNhY2hlCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLndpbmNhY2hlLWZjYWNoZS1maWxlaW5mby5waHAKICogQHBhcmFtIGJvb2wgJHN1bW1hcnlvbmx5IFtvcHRpb25hbF0KICogPHA+Q29udHJvbHMgd2hldGhlciB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IGluZGl2aWR1YWwKICogY2FjaGUgZW50cmllcyBhbG9uZyB3aXRoIHRoZSBmaWxlIGNhY2hlIHN1bW1hcnkuPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFycmF5IG9mIG1ldGEgZGF0YSBhYm91dCBmaWxlIGNhY2hlIG9yIEZBTFNFIG9uIGZhaWx1cmUKICogPHA+VGhlIGFycmF5IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gY29udGFpbnMgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKICogPHVsPgogKiA8bGk+PGVtPnRvdGFsX2NhY2hlX3VwdGltZTwvZW0+IC0gdG90YWwgdGltZSBpbiBzZWNvbmRzIHRoYXQgdGhlIGZpbGUgY2FjaGUgaGFzIGJlZW4gYWN0aXZlPC9saT4KICogPGxpPjxlbT50b3RhbF9maWxlX2NvdW50PC9lbT4gLSB0b3RhbCBudW1iZXIgb2YgZmlsZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIHRoZSBmaWxlIGNhY2hlPC9saT4KICogPGxpPjxlbT50b3RhbF9oaXRfY291bnQ8L2VtPiAtIG51bWJlciBvZiB0aW1lcyB0aGUgZmlsZXMgaGF2ZSBiZWVuIHNlcnZlZCBmcm9tIHRoZSBmaWxlIGNhY2hlPC9saT4KICogPGxpPjxlbT50b3RhbF9taXNzX2NvdW50PC9lbT4gLSBudW1iZXIgb2YgdGltZXMgdGhlIGZpbGVzIGhhdmUgbm90IGJlZW4gZm91bmQgaW4gdGhlIGZpbGUgY2FjaGU8L2xpPgogKiA8bGk+PGVtPmZpbGVfZW50cmllczwvZW0+IC0gYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZSBjYWNoZWQgZmlsZXM6CiAqIDx1bD4KICogPGxpPjxlbT5maWxlX25hbWU8L2VtPiAtIGFic29sdXRlIGZpbGUgbmFtZSBvZiB0aGUgY2FjaGVkIGZpbGU8L2xpPgogKiA8bGk+PGVtPmFkZF90aW1lPC9lbT4gLSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGZpbGUgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGZpbGUgY2FjaGU8L2xpPgogKiA8bGk+PGVtPnVzZV90aW1lPC9lbT4gLSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGZpbGUgaGFzIGJlZW4gYWNjZXNzZWQgaW4gdGhlIGZpbGUgY2FjaGU8L2xpPgogKiA8bGk+PGVtPmxhc3RfY2hlY2s8L2VtPiAtIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgZmlsZSBoYXMgYmVlbiBjaGVja2VkIGZvciBtb2RpZmljYXRpb25zPC9saT4KICogPGxpPjxlbT5oaXRfY291bnQ8L2VtPiAtIG51bWJlciBvZiB0aW1lcyB0aGUgZmlsZSBoYXMgYmVlbiBzZXJ2ZWQgZnJvbSB0aGUgY2FjaGU8L2xpPgogKiA8bGk+PGVtPmZpbGVfc2l6ZTwvZW0+IC0gc2l6ZSBvZiB0aGUgY2FjaGVkIGZpbGUgaW4gYnl0ZXM8L2xpPgogKiA8L3VsPjwvbGk+CiAqIDwvdWw+PC9wPgogKi8KZnVuY3Rpb24gd2luY2FjaGVfZmNhY2hlX2ZpbGVpbmZvKCRzdW1tYXJ5b25seSA9IGZhbHNlKSB7fQoKLyoqCiAqIChQSFAgNS4yKzsgUEVDTCB3aW5jYWNoZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgbWVtb3J5IHVzYWdlIGJ5IGZpbGUgY2FjaGUuCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLndpbmNhY2hlLWZjYWNoZS1tZW1pbmZvLnBocAogKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFycmF5IG9mIG1ldGEgZGF0YSBhYm91dCBmaWxlIGNhY2hlIG1lbW9yeSB1c2FnZSBvciBGQUxTRSBvbiBmYWlsdXJlCiAqIDxwPlRoZSBhcnJheSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CiAqIDx1bD4KICogPGxpPjxlbT5tZW1vcnlfdG90YWw8L2VtPiAtIGFtb3VudCBvZiBtZW1vcnkgaW4gYnl0ZXMgYWxsb2NhdGVkIGZvciB0aGUgZmlsZSBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+bWVtb3J5X2ZyZWU8L2VtPiAtIGFtb3VudCBvZiBmcmVlIG1lbW9yeSBpbiBieXRlcyBhdmFpbGFibGUgZm9yIHRoZSBmaWxlIGNhY2hlPC9saT4KICogPGxpPjxlbT5udW1fdXNlZF9ibGtzPC9lbT4gLSBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyB1c2VkIGJ5IHRoZSBmaWxlIGNhY2hlPC9saT4KICogPGxpPjxlbT5udW1fZnJlZV9ibGtzPC9lbT4gLSBudW1iZXIgb2YgZnJlZSBtZW1vcnkgYmxvY2tzIGF2YWlsYWJsZSBmb3IgdGhlIGZpbGUgY2FjaGU8L2xpPgogKiA8bGk+PGVtPm1lbW9yeV9vdmVyaGVhZDwvZW0+IC0gYW1vdW50IG9mIG1lbW9yeSBpbiBieXRlcyB1c2VkIGZvciB0aGUgZmlsZSBjYWNoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzPC9saT4KICogPC91bD48L3A+CiAqLwpmdW5jdGlvbiB3aW5jYWNoZV9mY2FjaGVfbWVtaW5mbygpIHt9CgovKioKICogKFBIUCA1LjIrOyBQRUNMIHdpbmNhY2hlICZndDs9IDEuMS4wKTxici8+CiAqIE9idGFpbnMgYW4gZXhjbHVzaXZlIGxvY2sgb24gYSBnaXZlbiBrZXkuCiAqIDxwPlRoZSBleGVjdXRpb24gb2YgdGhlIGN1cnJlbnQgc2NyaXB0IHdpbGwgYmUgYmxvY2tlZCB1bnRpbCB0aGUgbG9jayBjYW4gYmUKICogb2J0YWluZWQuIE9uY2UgdGhlIGxvY2sgaXMgb2J0YWluZWQsIHRoZSBvdGhlciBzY3JpcHRzIHRoYXQgdHJ5IHRvIHJlcXVlc3QgdGhlCiAqIGxvY2sgYnkgdXNpbmcgdGhlIHNhbWUga2V5IHdpbGwgYmUgYmxvY2tlZCwgdW50aWwgdGhlIGN1cnJlbnQgc2NyaXB0IHJlbGVhc2VzCiAqIHRoZSBsb2NrIGJ5IHVzaW5nIHdpbmNhY2hlX3VubG9jaygpLjwvcD4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2luY2FjaGUtbG9jay5waHAKICogQHBhcmFtIHN0cmluZyAka2V5IE5hbWUgb2YgdGhlIGtleSBpbiB0aGUgY2FjaGUgdG8gZ2V0IHRoZSBsb2NrIG9uLgogKiBAcGFyYW0gYm9vbCAkaXNnbG9iYWwgW29wdGlvbmFsXQogKiA8cD5Db250cm9scyB3aGV0aGVyIHRoZSBzY29wZSBvZiB0aGUgbG9jayBpcyBzeXN0ZW0td2lkZSBvciBsb2NhbC4gTG9jYWwgbG9ja3MKICogYXJlIHNjb3BlZCB0byB0aGUgYXBwbGljYXRpb24gcG9vbCBpbiBJSVMgRmFzdENHSSBjYXNlIG9yIHRvIGFsbCBwaHAgcHJvY2Vzc2VzCiAqIHRoYXQgaGF2ZSB0aGUgc2FtZSBwYXJlbnQgcHJvY2VzcyBpZGVudGlmaWVyLiA8L3A+CiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gd2luY2FjaGVfbG9jaygka2V5LCAkaXNnbG9iYWwgPSBmYWxzZSkge30KCi8qKgogKiAoUEhQIDUuMis7IFBFQ0wgd2luY2FjaGUgJmd0Oz0gMS4wLjApPGJyLz4KICogUmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IG9wY29kZSBjYWNoZSBjb250ZW50IGFuZCBpdHMgdXNhZ2UKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2luY2FjaGUtb2NhY2hlLWZpbGVpbmZvLnBocAogKiBAcGFyYW0gYm9vbCAkc3VtbWFyeW9ubHkgW29wdGlvbmFsXQogKiA8cD5Db250cm9scyB3aGV0aGVyIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgaW5kaXZpZHVhbAogKiBjYWNoZSBlbnRyaWVzIGFsb25nIHdpdGggdGhlIG9wY29kZSBjYWNoZSBzdW1tYXJ5LjwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBcnJheSBvZiBtZXRhIGRhdGEgYWJvdXQgb3Bjb2RlIGNhY2hlIG9yIEZBTFNFIG9uIGZhaWx1cmUKICogPHA+VGhlIGFycmF5IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gY29udGFpbnMgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKICogPHVsPgogKiA8bGk+PGVtPnRvdGFsX2NhY2hlX3VwdGltZTwvZW0+IC0gdG90YWwgdGltZSBpbiBzZWNvbmRzIHRoYXQgdGhlIG9wY29kZSBjYWNoZSBoYXMgYmVlbiBhY3RpdmU8L2xpPgogKiA8bGk+PGVtPnRvdGFsX2ZpbGVfY291bnQ8L2VtPiAtIHRvdGFsIG51bWJlciBvZiBmaWxlcyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gdGhlIG9wY29kZSBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+dG90YWxfaGl0X2NvdW50PC9lbT4gLSBudW1iZXIgb2YgdGltZXMgdGhlIGNvbXBpbGVkIG9wY29kZSBoYXZlIGJlZW4gc2VydmVkIGZyb20gdGhlIGNhY2hlPC9saT4KICogPGxpPjxlbT50b3RhbF9taXNzX2NvdW50PC9lbT4gLSBudW1iZXIgb2YgdGltZXMgdGhlIGNvbXBpbGVkIG9wY29kZSBoYXZlIG5vdCBiZWVuIGZvdW5kIGluIHRoZSBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+aXNfbG9jYWxfY2FjaGU8L2VtPiAtIHRydWUgaXMgdGhlIGNhY2hlIG1ldGFkYXRhIGlzIGZvciBhIGxvY2FsIGNhY2hlIGluc3RhbmNlLCBmYWxzZQogKiBpZiB0aGUgbWV0YWRhdGEgaXMgZm9yIHRoZSBnbG9iYWwgY2FjaGU8L2xpPgogKiA8bGk+PGVtPmZpbGVfZW50cmllczwvZW0+IC0gYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZSBjYWNoZWQgZmlsZXM6CiAqIDx1bD4KICogPGxpPjxlbT5maWxlX25hbWU8L2VtPiAtIGFic29sdXRlIGZpbGUgbmFtZSBvZiB0aGUgY2FjaGVkIGZpbGU8L2xpPgogKiA8bGk+PGVtPmFkZF90aW1lPC9lbT4gLSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGZpbGUgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIG9wY29kZSBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+dXNlX3RpbWU8L2VtPiAtIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgZmlsZSBoYXMgYmVlbiBhY2Nlc3NlZCBpbiB0aGUgb3Bjb2RlIGNhY2hlPC9saT4KICogPGxpPjxlbT5sYXN0X2NoZWNrPC9lbT4gLSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGZpbGUgaGFzIGJlZW4gY2hlY2tlZCBmb3IgbW9kaWZpY2F0aW9uczwvbGk+CiAqIDxsaT48ZW0+aGl0X2NvdW50PC9lbT4gLSBudW1iZXIgb2YgdGltZXMgdGhlIGZpbGUgaGFzIGJlZW4gc2VydmVkIGZyb20gdGhlIGNhY2hlPC9saT4KICogPGxpPjxlbT5mdW5jdGlvbl9jb3VudDwvZW0+IC0gbnVtYmVyIG9mIGZ1bmN0aW9ucyBpbiB0aGUgY2FjaGVkIGZpbGU8L2xpPgogKiA8bGk+PGVtPmNsYXNzX2NvdW50PC9lbT4gLSBudW1iZXIgb2YgY2xhc3NlcyBpbiB0aGUgY2FjaGVkIGZpbGU8L2xpPgogKiA8L3VsPjwvbGk+CiAqIDwvdWw+PC9wPgogKi8KZnVuY3Rpb24gd2luY2FjaGVfb2NhY2hlX2ZpbGVpbmZvKCRzdW1tYXJ5b25seSA9IGZhbHNlKSB7fQoKLyoqCiAqIChQSFAgNS4yKzsgUEVDTCB3aW5jYWNoZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgbWVtb3J5IHVzYWdlIGJ5IG9wY29kZSBjYWNoZS4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2luY2FjaGUtb2NhY2hlLW1lbWluZm8ucGhwCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgQXJyYXkgb2YgbWV0YSBkYXRhIGFib3V0IG9wY29kZSBjYWNoZSBtZW1vcnkgdXNhZ2Ugb3IgRkFMU0Ugb24gZmFpbHVyZQogKiA8cD5UaGUgYXJyYXkgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBjb250YWlucyB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOgogKiA8dWw+CiAqIDxsaT48ZW0+bWVtb3J5X3RvdGFsPC9lbT4gLSBhbW91bnQgb2YgbWVtb3J5IGluIGJ5dGVzIGFsbG9jYXRlZCBmb3IgdGhlIG9wY29kZSBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+bWVtb3J5X2ZyZWU8L2VtPiAtIGFtb3VudCBvZiBmcmVlIG1lbW9yeSBpbiBieXRlcyBhdmFpbGFibGUgZm9yIHRoZSBvcGNvZGUgY2FjaGU8L2xpPgogKiA8bGk+PGVtPm51bV91c2VkX2Jsa3M8L2VtPiAtIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIHVzZWQgYnkgdGhlIG9wY29kZSBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+bnVtX2ZyZWVfYmxrczwvZW0+IC0gbnVtYmVyIG9mIGZyZWUgbWVtb3J5IGJsb2NrcyBhdmFpbGFibGUgZm9yIHRoZSBvcGNvZGUgY2FjaGU8L2xpPgogKiA8bGk+PGVtPm1lbW9yeV9vdmVyaGVhZDwvZW0+IC0gYW1vdW50IG9mIG1lbW9yeSBpbiBieXRlcyB1c2VkIGZvciB0aGUgb3Bjb2RlIGNhY2hlIGludGVybmFsIHN0cnVjdHVyZXM8L2xpPgogKiA8L3VsPjwvcD4KICovCmZ1bmN0aW9uIHdpbmNhY2hlX29jYWNoZV9tZW1pbmZvKCkge30KCi8qKgogKiAoUEhQIDUuMis7IFBFQ0wgd2luY2FjaGUgJmd0Oz0gMS4wLjApPGJyLz4KICogUmVmcmVzaGVzIHRoZSBjYWNoZSBlbnRyaWVzIGZvciB0aGUgZmlsZXMsIHdob3NlIG5hbWVzIHdlcmUgcGFzc2VkIGluIHRoZSBpbnB1dCBhcmd1bWVudC4KICogPHA+SWYgbm8gYXJndW1lbnQgaXMgc3BlY2lmaWVkIHRoZW4gcmVmcmVzaGVzIGFsbCB0aGUgZW50cmllcyBpbiB0aGUgY2FjaGUuPC9wPgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi53aW5jYWNoZS1yZWZyZXNoLWlmLWNoYW5nZWQucGhwCiAqIEBwYXJhbSBhcnJheSAkZmlsZXMgW29wdGlvbmFsXQogKiA8cD5BbiBhcnJheSBvZiBmaWxlIG5hbWVzIGZvciBmaWxlcyB0aGF0IG5lZWQgdG8gYmUgcmVmcmVzaGVkLiBBbiBhYnNvbHV0ZQogKiBvciByZWxhdGl2ZSBmaWxlIHBhdGhzIGNhbiBiZSB1c2VkLjwvcD4KICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB3aW5jYWNoZV9yZWZyZXNoX2lmX2NoYW5nZWQoYXJyYXkgJGZpbGVzKSB7fQoKLyoqCiAqIChQSFAgNS4yKzsgUEVDTCB3aW5jYWNoZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgY2FjaGVkIG1hcHBpbmdzIGJldHdlZW4gcmVsYXRpdmUgZmlsZSBwYXRocyBhbmQKICogY29ycmVzcG9uZGluZyBhYnNvbHV0ZSBmaWxlIHBhdGhzLgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi53aW5jYWNoZS1ycGxpc3QtZmlsZWluZm8ucGhwCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgQXJyYXkgb2YgbWV0YSBkYXRhIGFib3V0IHRoZSByZXNvbHZlIGZpbGUgcGF0aCBjYWNoZSBvciBGQUxTRSBvbiBmYWlsdXJlCiAqIDxwPlRoZSBhcnJheSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CiAqIDx1bD4KICogPGxpPjxlbT50b3RhbF9maWxlX2NvdW50PC9lbT4gLSB0b3RhbCBudW1iZXIgb2YgZmlsZSBwYXRoIG1hcHBpbmdzIHN0b3JlZCBpbiB0aGUgY2FjaGU8L2xpPgogKiA8bGk+PGVtPnJwbGlzdF9lbnRyaWVzPC9lbT4gLSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIGNhY2hlZCBmaWxlIHBhdGhzOgogKiA8dWw+CiAqIDxsaT48ZW0+cmVzb2x2ZV9wYXRoPC9lbT4gLSBwYXRoIHRvIGEgZmlsZTwvbGk+CiAqIDxsaT48ZW0+c3Via2V5X2RhdGE8L2VtPiAtIGNvcnJlc3BvbmRpbmcgYWJzb2x1dGUgcGF0aCB0byBhIGZpbGU8L2xpPgogKiA8L3VsPjwvbGk+CiAqIDwvdWw+PC9wPgogKi8KZnVuY3Rpb24gd2luY2FjaGVfcnBsaXN0X2ZpbGVpbmZvKCkge30KCi8qKgogKiAoUEhQIDUuMis7IFBFQ0wgd2luY2FjaGUgJmd0Oz0gMS4wLjApPGJyLz4KICogUmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IG1lbW9yeSB1c2FnZSBieSByZXNvbHZlIGZpbGUgcGF0aCBjYWNoZS4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2luY2FjaGUtcnBsaXN0LW1lbWluZm8ucGhwCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgQXJyYXkgb2YgbWV0YSBkYXRhIHRoYXQgZGVzY3JpYmVzIG1lbW9yeSB1c2FnZSBieSByZXNvbHZlIGZpbGUgcGF0aCBjYWNoZS4gb3IgRkFMU0Ugb24gZmFpbHVyZQogKiA8cD5UaGUgYXJyYXkgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBjb250YWlucyB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOgogKiA8dWw+CiAqIDxsaT48ZW0+bWVtb3J5X3RvdGFsPC9lbT4gLSBhbW91bnQgb2YgbWVtb3J5IGluIGJ5dGVzIGFsbG9jYXRlZCBmb3IgdGhlIHJlc29sdmUgZmlsZSBwYXRoIGNhY2hlPC9saT4KICogPGxpPjxlbT5tZW1vcnlfZnJlZTwvZW0+IC0gYW1vdW50IG9mIGZyZWUgbWVtb3J5IGluIGJ5dGVzIGF2YWlsYWJsZSBmb3IgdGhlIHJlc29sdmUgZmlsZSBwYXRoIGNhY2hlPC9saT4KICogPGxpPjxlbT5udW1fdXNlZF9ibGtzPC9lbT4gLSBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyB1c2VkIGJ5IHRoZSByZXNvbHZlIGZpbGUgcGF0aCBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+bnVtX2ZyZWVfYmxrczwvZW0+IC0gbnVtYmVyIG9mIGZyZWUgbWVtb3J5IGJsb2NrcyBhdmFpbGFibGUgZm9yIHRoZSByZXNvbHZlIGZpbGUgcGF0aCBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+bWVtb3J5X292ZXJoZWFkPC9lbT4gLSBhbW91bnQgb2YgbWVtb3J5IGluIGJ5dGVzIHVzZWQgZm9yIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIG9mIHJlc29sdmUgZmlsZSBwYXRoIGNhY2hlPC9saT4KICogPC91bD48L3A+CiAqLwpmdW5jdGlvbiB3aW5jYWNoZV9ycGxpc3RfbWVtaW5mbygpIHt9CgovKioKICogKFBIUCA1LjIrOyBQRUNMIHdpbmNhY2hlICZndDs9IDEuMS4wKTxici8+CiAqIFJldHJpZXZlcyBpbmZvcm1hdGlvbiBhYm91dCBzZXNzaW9uIGNhY2hlIGNvbnRlbnQgYW5kIGl0cyB1c2FnZS4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2luY2FjaGUtc2NhY2hlLWluZm8ucGhwCiAqIEBwYXJhbSBib29sICRzdW1tYXJ5b25seSBbb3B0aW9uYWxdCiAqIDxwPkNvbnRyb2xzIHdoZXRoZXIgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCBpbmRpdmlkdWFsCiAqIGNhY2hlIGVudHJpZXMgYWxvbmcgd2l0aCB0aGUgc2Vzc2lvbiBjYWNoZSBzdW1tYXJ5LjwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBcnJheSBvZiBtZXRhIGRhdGEgYWJvdXQgc2Vzc2lvbiBjYWNoZSBvciBGQUxTRSBvbiBmYWlsdXJlCiAqIDxwPlRoZSBhcnJheSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CiAqIDx1bD4KICogPGxpPjxlbT50b3RhbF9jYWNoZV91cHRpbWU8L2VtPiAtIHRvdGFsIHRpbWUgaW4gc2Vjb25kcyB0aGF0IHRoZSBzZXNzaW9uIGNhY2hlIGhhcyBiZWVuIGFjdGl2ZTwvbGk+CiAqIDxsaT48ZW0+dG90YWxfaXRlbV9jb3VudDwvZW0+IC0gdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB0aGUgc2Vzc2lvbiBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+aXNfbG9jYWxfY2FjaGU8L2VtPiAtIHRydWUgaXMgdGhlIGNhY2hlIG1ldGFkYXRhIGlzIGZvciBhIGxvY2FsIGNhY2hlIGluc3RhbmNlLCBmYWxzZQogKiBpZiB0aGUgbWV0YWRhdGEgaXMgZm9yIHRoZSBnbG9iYWwgY2FjaGU8L2xpPgogKiA8bGk+PGVtPnRvdGFsX2hpdF9jb3VudDwvZW0+IC0gbnVtYmVyIG9mIHRpbWVzIHRoZSBkYXRhIGhhcyBiZWVuIHNlcnZlZCBmcm9tIHRoZSBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+dG90YWxfbWlzc19jb3VudDwvZW0+IC0gbnVtYmVyIG9mIHRpbWVzIHRoZSBkYXRhIGhhcyBub3QgYmVlbiBmb3VuZCBpbiB0aGUgY2FjaGU8L2xpPgogKiA8bGk+PGVtPnNjYWNoZV9lbnRyaWVzPC9lbT4gLSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIGNhY2hlZCBpdGVtczoKICogPHVsPgogKiA8bGk+PGVtPmtleV9uYW1lPC9lbT4gLSBuYW1lIG9mIHRoZSBrZXkgd2hpY2ggaXMgdXNlZCB0byBzdG9yZSB0aGUgZGF0YTwvbGk+CiAqIDxsaT48ZW0+dmFsdWVfdHlwZTwvZW0+IC0gdHlwZSBvZiB2YWx1ZSBzdG9yZWQgYnkgdGhlIGtleTwvbGk+CiAqIDxsaT48ZW0+dXNlX3RpbWU8L2VtPiAtIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgZmlsZSBoYXMgYmVlbiBhY2Nlc3NlZCBpbiB0aGUgb3Bjb2RlIGNhY2hlPC9saT4KICogPGxpPjxlbT5sYXN0X2NoZWNrPC9lbT4gLSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGZpbGUgaGFzIGJlZW4gY2hlY2tlZCBmb3IgbW9kaWZpY2F0aW9uczwvbGk+CiAqIDxsaT48ZW0+dHRsX3NlY29uZHM8L2VtPiAtIHRpbWUgcmVtYWluaW5nIGZvciB0aGUgZGF0YSB0byBsaXZlIGluIHRoZSBjYWNoZSwgMCBtZWFuaW5nIGluZmluaXRlPC9saT4KICogPGxpPjxlbT5hZ2Vfc2Vjb25kczwvZW0+IC0gdGltZSBlbGFwc2VkIGZyb20gdGhlIHRpbWUgZGF0YSBoYXMgYmVlbiBhZGRlZCBpbiB0aGUgY2FjaGU8L2xpPgogKiA8bGk+PGVtPmhpdGNvdW50PC9lbT4gLSBudW1iZXIgb2YgdGltZXMgZGF0YSBoYXMgYmVlbiBzZXJ2ZWQgZnJvbSB0aGUgY2FjaGU8L2xpPgogKiA8L3VsPjwvbGk+CiAqIDwvdWw+PC9wPgogKi8KZnVuY3Rpb24gd2luY2FjaGVfc2NhY2hlX2luZm8oJHN1bW1hcnlvbmx5ID0gZmFsc2UpIHt9CgovKioKICogKFBIUCA1LjIrOyBQRUNMIHdpbmNhY2hlICZndDs9IDEuMS4wKTxici8+CiAqIFJldHJpZXZlcyBpbmZvcm1hdGlvbiBhYm91dCBtZW1vcnkgdXNhZ2UgYnkgc2Vzc2lvbiBjYWNoZS4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2luY2FjaGUtc2NhY2hlLW1lbWluZm8ucGhwCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgQXJyYXkgb2YgbWV0YSBkYXRhIGFib3V0IHNlc3Npb24gY2FjaGUgbWVtb3J5IHVzYWdlIG9yIEZBTFNFIG9uIGZhaWx1cmUKICogPHA+VGhlIGFycmF5IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gY29udGFpbnMgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKICogPHVsPgogKiA8bGk+PGVtPm1lbW9yeV90b3RhbDwvZW0+IC0gYW1vdW50IG9mIG1lbW9yeSBpbiBieXRlcyBhbGxvY2F0ZWQgZm9yIHRoZSBzZXNzaW9uIGNhY2hlPC9saT4KICogPGxpPjxlbT5tZW1vcnlfZnJlZTwvZW0+IC0gYW1vdW50IG9mIGZyZWUgbWVtb3J5IGluIGJ5dGVzIGF2YWlsYWJsZSBmb3IgdGhlIHNlc3Npb24gY2FjaGU8L2xpPgogKiA8bGk+PGVtPm51bV91c2VkX2Jsa3M8L2VtPiAtIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIHVzZWQgYnkgdGhlIHNlc3Npb24gY2FjaGU8L2xpPgogKiA8bGk+PGVtPm51bV9mcmVlX2Jsa3M8L2VtPiAtIG51bWJlciBvZiBmcmVlIG1lbW9yeSBibG9ja3MgYXZhaWxhYmxlIGZvciB0aGUgc2Vzc2lvbiBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+bWVtb3J5X292ZXJoZWFkPC9lbT4gLSBhbW91bnQgb2YgbWVtb3J5IGluIGJ5dGVzIHVzZWQgZm9yIHRoZSBzZXNzaW9uIGNhY2hlIGludGVybmFsIHN0cnVjdHVyZXM8L2xpPgogKiA8L3VsPjwvcD4KICovCmZ1bmN0aW9uIHdpbmNhY2hlX3NjYWNoZV9tZW1pbmZvKCkge30KCi8qKgogKiAoUEhQIDUuMis7IFBFQ0wgd2luY2FjaGUgJmd0Oz0gMS4xLjApPGJyLz4KICogQWRkcyBhIHZhcmlhYmxlIGluIHVzZXIgY2FjaGUsIG9ubHkgaWYgdGhpcyB2YXJpYWJsZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIGNhY2hlLgogKiA8cD5UaGUgYWRkZWQgdmFyaWFibGUgcmVtYWlucyBpbiB0aGUgdXNlciBjYWNoZSB1bmxlc3MgaXRzIHRpbWUgdG8gbGl2ZSBleHBpcmVzCiAqIG9yIGl0IGlzIGRlbGV0ZWQgYnkgdXNpbmcgd2luY2FjaGVfdWNhY2hlX2RlbGV0ZSgpIG9yIHdpbmNhY2hlX3VjYWNoZV9jbGVhcigpIGZ1bmN0aW9ucy48L3A+CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLndpbmNhY2hlLXVjYWNoZS1hZGQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGtleSA8cD5TdG9yZSB0aGUgdmFyaWFibGUgdXNpbmcgdGhpcyBrZXkgbmFtZS4gSWYgYSB2YXJpYWJsZSB3aXRoCiAqIHNhbWUga2V5IGlzIGFscmVhZHkgcHJlc2VudCB0aGUgZnVuY3Rpb24gd2lsbCBmYWlsIGFuZCByZXR1cm4gRkFMU0UuIGtleSBpcyBjYXNlCiAqIHNlbnNpdGl2ZS4gVG8gb3ZlcnJpZGUgdGhlIHZhbHVlIGV2ZW4gaWYga2V5IGlzIHByZXNlbnQgdXNlIHdpbmNhY2hlX3VjYWNoZV9zZXQoKQogKiBmdW5jdGlvbiBpbnN0YWQuIGtleSBjYW4gYWxzbyB0YWtlIGFycmF5IG9mIG5hbWUgPSZndDsgdmFsdWUgcGFpcnMgd2hlcmUgbmFtZXMgd2lsbAogKiBiZSB1c2VkIGFzIGtleXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIG11bHRpcGxlIHZhbHVlcyBpbiB0aGUgY2FjaGUgaW4gb25lCiAqIG9wZXJhdGlvbiwgdGh1cyBhdm9pZGluZyByYWNlIGNvbmRpdGlvbi48L3A+CiAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgPHA+VmFsdWUgb2YgYSB2YXJpYWJsZSB0byBzdG9yZS4gVmFsdWUgc3VwcG9ydHMgYWxsIGRhdGEKICogdHlwZXMgZXhjZXB0IHJlc291cmNlcywgc3VjaCBhcyBmaWxlIGhhbmRsZXMuIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgaWYKICogZmlyc3QgYXJndW1lbnQgaXMgYW4gYXJyYXkuIEEgZ2VuZXJhbCBndWlkYW5jZSBpcyB0byBwYXNzIE5VTEwgYXMgdmFsdWUgd2hpbGUKICogdXNpbmcgYXJyYXkgYXMga2V5LjwvcD4KICogQHBhcmFtIGludCAkdHRsIFtvcHRpb25hbF0KICogPHA+VGltZSBmb3IgdGhlIHZhcmlhYmxlIHRvIGxpdmUgaW4gdGhlIGNhY2hlIGluIHNlY29uZHMuIEFmdGVyIHRoZSB2YWx1ZQogKiBzcGVjaWZpZWQgaW4gdHRsIGhhcyBwYXNzZWQgdGhlIHN0b3JlZCB2YXJpYWJsZSB3aWxsIGJlIGRlbGV0ZWQgZnJvbSB0aGUKICogY2FjaGUuIFRoaXMgcGFyYW1ldGVyIHRha2VzIGEgZGVmYXVsdCB2YWx1ZSBvZiAwIHdoaWNoIG1lYW5zIHRoZSB2YXJpYWJsZQogKiB3aWxsIHN0YXkgaW4gdGhlIGNhY2hlIHVubGVzcyBleHBsaWNpdGx5IGRlbGV0ZWQgYnkgdXNpbmcgd2luY2FjaGVfdWNhY2hlX2RlbGV0ZSgpCiAqIG9yIHdpbmNhY2hlX3VjYWNoZV9jbGVhcigpIGZ1bmN0aW9ucy48L3A+CiAqIEByZXR1cm4gYm9vbCBJZiBrZXkgaXMgc3RyaW5nLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uIGZhaWx1cmUuCiAqIDxwPklmIGtleSBpcyBhbiBhcnJheSwgdGhlIGZ1bmN0aW9uIHJldHVybnM6CiAqIDx1bD4KICogPGxpPklmIGFsbCB0aGUgbmFtZSA9Jmd0OyB2YWx1ZSBwYWlycyBpbiB0aGUgYXJyYXkgY2FuIGJlIHNldCwgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBhcnJheTs8L2xpPgogKiA8bGk+SWYgYWxsIHRoZSBuYW1lID0mZ3Q7IHZhbHVlIHBhaXJzIGluIHRoZSBhcnJheSBjYW5ub3QgYmUgc2V0LCBmdW5jdGlvbiByZXR1cm5zIEZBTFNFOzwvbGk+CiAqIDxsaT5JZiBzb21lIGNhbiBiZSBzZXQgd2hpbGUgb3RoZXJzIGNhbm5vdCwgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIG5hbWU9Jmd0O3ZhbHVlIHBhaXIKICogZm9yIHdoaWNoIHRoZSBhZGRpdGlvbiBmYWlsZWQgaW4gdGhlIHVzZXIgY2FjaGUuPC9saT4KICogPC91bD48L3A+CiAqLwpmdW5jdGlvbiB3aW5jYWNoZV91Y2FjaGVfYWRkKCRrZXksICR2YWx1ZSwgJHR0bCA9IDApIHt9CgovKioKICogKFBIUCA1LjIrOyBQRUNMIHdpbmNhY2hlICZndDs9IDEuMS4wKTxici8+CiAqIENvbXBhcmVzIHRoZSB2YXJpYWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIDxlbT5rZXk8L2VtPiB3aXRoIDxlbT5vbGRfdmFsdWU8L2VtPgogKiBhbmQgaWYgaXQgbWF0Y2hlcyB0aGVuIGFzc2lnbnMgdGhlIDxlbT5uZXdfdmFsdWU8L2VtPiB0byBpdC4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2luY2FjaGUtdWNhY2hlLWNhcy5waHAKICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdGhhdCBpcyB1c2VkIHRvIHN0b3JlIHRoZSB2YXJpYWJsZSBpbiB0aGUgY2FjaGUuIGtleSBpcyBjYXNlIHNlbnNpdGl2ZS4KICogQHBhcmFtIGludCAkb2xkX3ZhbHVlIE9sZCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgcG9pbnRlZCBieSBrZXkgaW4gdGhlIHVzZXIgY2FjaGUuCiAqIFRoZSB2YWx1ZSBzaG91bGQgYmUgb2YgdHlwZSBsb25nLCBvdGhlcndpc2UgdGhlIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UuCiAqIEBwYXJhbSBpbnQgJG5ld192YWx1ZSBOZXcgdmFsdWUgd2hpY2ggd2lsbCBnZXQgYXNzaWduZWQgdG8gdmFyaWFibGUgcG9pbnRlciBieSBrZXkKICogaWYgYSBtYXRjaCBpcyBmb3VuZC4gVGhlIHZhbHVlIHNob3VsZCBiZSBvZiB0eXBlIGxvbmcsIG90aGVyd2lzZSB0aGUgZnVuY3Rpb24gcmV0dXJucyBGQUxTRS4KICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB3aW5jYWNoZV91Y2FjaGVfY2FzKCRrZXksICRvbGRfdmFsdWUsICRuZXdfdmFsdWUpIHt9CgovKioKICogKFBIUCA1LjIrOyBQRUNMIHdpbmNhY2hlICZndDs9IDEuMS4wKTxici8+CiAqIENsZWFycy9kZWxldGVzIGFsbCB0aGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgdXNlciBjYWNoZS4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2luY2FjaGUtdWNhY2hlLWNsZWFyLnBocAogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHdpbmNhY2hlX3VjYWNoZV9jbGVhcigpIHt9CgovKioKICogKFBIUCA1LjIrOyBQRUNMIHdpbmNhY2hlICZndDs9IDEuMS4wKTxici8+CiAqIERlY3JlbWVudHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5IGJ5IDEgb3IgYXMgc3BlY2lmaWVkIGJ5IGRlY19ieS4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2luY2FjaGUtdWNhY2hlLWRlYy5waHAKICogQHBhcmFtIHN0cmluZyAka2V5IDxwPlRoZSBrZXkgdGhhdCB3YXMgdXNlZCB0byBzdG9yZSB0aGUgdmFyaWFibGUgaW4gdGhlIGNhY2hlLgogKiBrZXkgaXMgY2FzZSBzZW5zaXRpdmUuPC9wPgogKiBAcGFyYW0gaW50ICRkZWNfYnkgPHA+VGhlIHZhbHVlIGJ5IHdoaWNoIHRoZSB2YXJpYWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSB3aWxsCiAqIGdldCBkZWNyZW1lbnRlZC4gSWYgdGhlIGFyZ3VtZW50IGlzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGl0IHdpbGwgYmUgdHJ1bmNhdGVkCiAqIHRvIG5lYXJlc3QgaW50ZWdlci4gVGhlIHZhcmlhYmxlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5IHNob3VsZCBiZSBvZiB0eXBlIGxvbmcsCiAqIG90aGVyd2lzZSB0aGUgZnVuY3Rpb24gZmFpbHMgYW5kIHJldHVybnMgRkFMU0UuPC9wPgogKiBAcGFyYW0gYm9vbHxudWxsICYkc3VjY2VzcyBbb3B0aW9uYWxdCiAqIDxwPldpbGwgYmUgc2V0IHRvIFRSVUUgb24gc3VjY2VzcyBhbmQgRkFMU0Ugb24gZmFpbHVyZS48L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIFJldHVybnMgdGhlIGRlY3JlbWVudGVkIHZhbHVlIG9uIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB3aW5jYWNoZV91Y2FjaGVfZGVjKCRrZXksICRkZWNfYnkgPSAxLCAmJHN1Y2Nlc3MpIHt9CgovKioKICogKFBIUCA1LjIrOyBQRUNMIHdpbmNhY2hlICZndDs9IDEuMS4wKTxici8+CiAqIERlbGV0ZXMgdGhlIGVsZW1lbnRzIGluIHRoZSB1c2VyIGNhY2hlIHBvaW50ZWQgYnkga2V5LgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi53aW5jYWNoZS11Y2FjaGUtZGVsZXRlLnBocAogKiBAcGFyYW0gc3RyaW5nfHN0cmluZ1tdICRrZXkgPHA+VGhlIGtleSB0aGF0IHdhcyB1c2VkIHRvIHN0b3JlIHRoZSB2YXJpYWJsZSBpbiB0aGUgY2FjaGUuCiAqIGtleSBpcyBjYXNlIHNlbnNpdGl2ZS4ga2V5IGNhbiBiZSBhbiBhcnJheSBvZiBrZXlzLjwvcD4KICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUuCiAqIDxwPklmIGtleSBpcyBhbiBhcnJheSB0aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIEZBTFNFIGlmIGV2ZXJ5IGVsZW1lbnQgb2YKICogdGhlIGFycmF5IGZhaWxzIHRvIGdldCBkZWxldGVkIGZyb20gdGhlIHVzZXIgY2FjaGUsIG90aGVyd2lzZSByZXR1cm5zIGFuCiAqIGFycmF5IHdoaWNoIGNvbnNpc3RzIG9mIGFsbCB0aGUga2V5cyB0aGF0IGFyZSBkZWxldGVkLjwvcD4KICovCmZ1bmN0aW9uIHdpbmNhY2hlX3VjYWNoZV9kZWxldGUoJGtleSkge30KCi8qKgogKiAoUEhQIDUuMis7IFBFQ0wgd2luY2FjaGUgJmd0Oz0gMS4xLjApPGJyLz4KICogQ2hlY2tzIGlmIGEgdmFyaWFibGUgd2l0aCB0aGUga2V5IGV4aXN0cyBpbiB0aGUgdXNlciBjYWNoZSBvciBub3QuCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLndpbmNhY2hlLXVjYWNoZS1leGlzdHMucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRoYXQgd2FzIHVzZWQgdG8gc3RvcmUgdGhlIHZhcmlhYmxlIGluIHRoZSBjYWNoZS4ga2V5IGlzIGNhc2Ugc2Vuc2l0aXZlLgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIGlmIHZhcmlhYmxlIHdpdGggdGhlIGtleSBleGl0c3RzLCBvdGhlcndpc2UgcmV0dXJucyBGQUxTRS4KICovCmZ1bmN0aW9uIHdpbmNhY2hlX3VjYWNoZV9leGlzdHMoJGtleSkge30KCi8qKgogKiAoUEhQIDUuMis7IFBFQ0wgd2luY2FjaGUgJmd0Oz0gMS4xLjApPGJyLz4KICogR2V0cyBhIHZhcmlhYmxlIHN0b3JlZCBpbiB0aGUgdXNlciBjYWNoZS4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2luY2FjaGUtdWNhY2hlLWdldC5waHAKICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAka2V5IDxwPlRoZSBrZXkgdGhhdCB3YXMgdXNlZCB0byBzdG9yZSB0aGUgdmFyaWFibGUgaW4gdGhlIGNhY2hlLgogKiBrZXkgaXMgY2FzZSBzZW5zaXRpdmUuIGtleSBjYW4gYmUgYW4gYXJyYXkgb2Yga2V5cy4gSW4gdGhpcyBjYXNlIHRoZSByZXR1cm4KICogdmFsdWUgd2lsbCBiZSBhbiBhcnJheSBvZiB2YWx1ZXMgb2YgZWFjaCBlbGVtZW50IGluIHRoZSBrZXkgYXJyYXkuPC9wPgogKiBAcGFyYW0gYm9vbHxudWxsICYkc3VjY2VzcyBbb3B0aW9uYWxdCiAqIDxwPldpbGwgYmUgc2V0IHRvIFRSVUUgb24gc3VjY2VzcyBhbmQgRkFMU0Ugb24gZmFpbHVyZS48L3A+CiAqIEByZXR1cm4gbWl4ZWQgPHA+SWYga2V5IGlzIGEgc3RyaW5nLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlCiAqIHN0b3JlZCB3aXRoIHRoYXQga2V5LiBUaGUgc3VjY2VzcyBpcyBzZXQgdG8gVFJVRSBvbiBzdWNjZXNzIGFuZCB0byBGQUxTRSBvbiBmYWlsdXJlLjwvcD4KICogPHA+VGhlIGtleSBpcyBhbiBhcnJheSwgdGhlIHBhcmFtZXRlciBzdWNjZXNzIGlzIGFsd2F5cyBzZXQgdG8gVFJVRS4gVGhlIHJldHVybmVkIGFycmF5CiAqIChuYW1lID0mZ3Q7IHZhbHVlIHBhaXJzKSB3aWxsIGNvbnRhaW4gb25seSB0aG9zZSBuYW1lID0mZ3Q7IHZhbHVlIHBhaXJzIGZvciB3aGljaCB0aGUgZ2V0CiAqIG9wZXJhdGlvbiBpbiB1c2VyIGNhY2hlIHdhcyBzdWNjZXNzZnVsLiBJZiBub25lIG9mIHRoZSBrZXlzIGluIHRoZSBrZXkgYXJyYXkgZmluZHMgYQogKiBtYXRjaCBpbiB0aGUgdXNlciBjYWNoZSBhbiBlbXB0eSBhcnJheSB3aWxsIGJlIHJldHVybmVkLjwvcD4KICovCmZ1bmN0aW9uIHdpbmNhY2hlX3VjYWNoZV9nZXQoJGtleSwgJiRzdWNjZXNzKSB7fQoKLyoqCiAqIChQSFAgNS4yKzsgUEVDTCB3aW5jYWNoZSAmZ3Q7PSAxLjEuMCk8YnIvPgogKiBJbmNyZW1lbnRzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSBieSAxIG9yIGFzIHNwZWNpZmllZCBieSBpbmNfYnkuCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLndpbmNhY2hlLXVjYWNoZS1pbmMucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGtleSA8cD5UaGUga2V5IHRoYXQgd2FzIHVzZWQgdG8gc3RvcmUgdGhlIHZhcmlhYmxlIGluIHRoZSBjYWNoZS4KICoga2V5IGlzIGNhc2Ugc2Vuc2l0aXZlLjwvcD4KICogQHBhcmFtIGludCAkaW5jX2J5IDxwPlRoZSB2YWx1ZSBieSB3aGljaCB0aGUgdmFyaWFibGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkgd2lsbAogKiBnZXQgaW5jcmVtZW50ZWQuIElmIHRoZSBhcmd1bWVudCBpcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBpdCB3aWxsIGJlIHRydW5jYXRlZAogKiB0byBuZWFyZXN0IGludGVnZXIuIFRoZSB2YXJpYWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSBzaG91bGQgYmUgb2YgdHlwZSBsb25nLAogKiBvdGhlcndpc2UgdGhlIGZ1bmN0aW9uIGZhaWxzIGFuZCByZXR1cm5zIEZBTFNFLjwvcD4KICogQHBhcmFtIGJvb2x8bnVsbCAmJHN1Y2Nlc3MgW29wdGlvbmFsXQogKiA8cD5XaWxsIGJlIHNldCB0byBUUlVFIG9uIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uIGZhaWx1cmUuPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSBSZXR1cm5zIHRoZSBpbmNyZW1lbnRlZCB2YWx1ZSBvbiBzdWNjZXNzIGFuZCBGQUxTRSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gd2luY2FjaGVfdWNhY2hlX2luYygka2V5LCAkaW5jX2J5ID0gMSwgJiRzdWNjZXNzKSB7fQoKLyoqCiAqIChQSFAgNS4yKzsgUEVDTCB3aW5jYWNoZSAmZ3Q7PSAxLjEuMCk8YnIvPgogKiBSZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgZGF0YSBzdG9yZWQgaW4gdGhlIHVzZXIgY2FjaGUuCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLndpbmNhY2hlLXVjYWNoZS1pbmZvLnBocAogKiBAcGFyYW0gYm9vbCAkc3VtbWFyeW9ubHkgW29wdGlvbmFsXQogKiA8cD5Db250cm9scyB3aGV0aGVyIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQKICogaW5kaXZpZHVhbCBjYWNoZSBlbnRyaWVzIGFsb25nIHdpdGggdGhlIHVzZXIgY2FjaGUgc3VtbWFyeS48L3A+CiAqIEBwYXJhbSBudWxsfHN0cmluZyAka2V5IFtvcHRpb25hbF0KICogPHA+VGhlIGtleSBvZiBhbiBlbnRyeSBpbiB0aGUgdXNlciBjYWNoZS4gSWYgc3BlY2lmaWVkIHRoZW4gdGhlIHJldHVybmVkIGFycmF5CiAqIHdpbGwgY29udGFpbiBpbmZvcm1hdGlvbiBvbmx5IGFib3V0IHRoYXQgY2FjaGUgZW50cnkuIElmIG5vdCBzcGVjaWZpZWQgYW5kCiAqIHN1bW1hcnlvbmx5IGlzIHNldCB0byBmYWxzZSB0aGVuIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGNvbnRhaW4gaW5mb3JtYXRpb24KICogYWJvdXQgYWxsIGVudHJpZXMgaW4gdGhlIGNhY2hlLjwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBcnJheSBvZiBtZXRhIGRhdGEgYWJvdXQgdXNlciBjYWNoZSBvciBGQUxTRSBvbiBmYWlsdXJlCiAqIDxwPlRoZSBhcnJheSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CiAqIDx1bD4KICogPGxpPjxlbT50b3RhbF9jYWNoZV91cHRpbWU8L2VtPiAtIHRvdGFsIHRpbWUgaW4gc2Vjb25kcyB0aGF0IHRoZSB1c2VyIGNhY2hlIGhhcyBiZWVuIGFjdGl2ZTwvbGk+CiAqIDxsaT48ZW0+dG90YWxfaXRlbV9jb3VudDwvZW0+IC0gdG90YWwgbnVtYmVyIG9mIGVsZW1lbnRzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB0aGUgdXNlciBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+aXNfbG9jYWxfY2FjaGU8L2VtPiAtIHRydWUgaXMgdGhlIGNhY2hlIG1ldGFkYXRhIGlzIGZvciBhIGxvY2FsIGNhY2hlIGluc3RhbmNlLCBmYWxzZQogKiBpZiB0aGUgbWV0YWRhdGEgaXMgZm9yIHRoZSBnbG9iYWwgY2FjaGU8L2xpPgogKiA8bGk+PGVtPnRvdGFsX2hpdF9jb3VudDwvZW0+IC0gbnVtYmVyIG9mIHRpbWVzIHRoZSBkYXRhIGhhcyBiZWVuIHNlcnZlZCBmcm9tIHRoZSBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+dG90YWxfbWlzc19jb3VudDwvZW0+IC0gbnVtYmVyIG9mIHRpbWVzIHRoZSBkYXRhIGhhcyBub3QgYmVlbiBmb3VuZCBpbiB0aGUgY2FjaGU8L2xpPgogKiA8bGk+PGVtPnVjYWNoZV9lbnRyaWVzPC9lbT4gLSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIGNhY2hlZCBpdGVtczoKICogPHVsPgogKiA8bGk+PGVtPmtleV9uYW1lPC9lbT4gLSBuYW1lIG9mIHRoZSBrZXkgd2hpY2ggaXMgdXNlZCB0byBzdG9yZSB0aGUgZGF0YTwvbGk+CiAqIDxsaT48ZW0+dmFsdWVfdHlwZTwvZW0+IC0gdHlwZSBvZiB2YWx1ZSBzdG9yZWQgYnkgdGhlIGtleTwvbGk+CiAqIDxsaT48ZW0+dXNlX3RpbWU8L2VtPiAtIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgZmlsZSBoYXMgYmVlbiBhY2Nlc3NlZCBpbiB0aGUgb3Bjb2RlIGNhY2hlPC9saT4KICogPGxpPjxlbT5sYXN0X2NoZWNrPC9lbT4gLSB0aW1lIGluIHNlY29uZHMgc2luY2UgdGhlIGZpbGUgaGFzIGJlZW4gY2hlY2tlZCBmb3IgbW9kaWZpY2F0aW9uczwvbGk+CiAqIDxsaT48ZW0+aXNfc2Vzc2lvbjwvZW0+IC0gaW5kaWNhdGVzIGlmIHRoZSBkYXRhIGlzIGEgc2Vzc2lvbiB2YXJpYWJsZTwvbGk+CiAqIDxsaT48ZW0+dHRsX3NlY29uZHM8L2VtPiAtIHRpbWUgcmVtYWluaW5nIGZvciB0aGUgZGF0YSB0byBsaXZlIGluIHRoZSBjYWNoZSwgMCBtZWFuaW5nIGluZmluaXRlPC9saT4KICogPGxpPjxlbT5hZ2Vfc2Vjb25kczwvZW0+IC0gdGltZSBlbGFwc2VkIGZyb20gdGhlIHRpbWUgZGF0YSBoYXMgYmVlbiBhZGRlZCBpbiB0aGUgY2FjaGU8L2xpPgogKiA8bGk+PGVtPmhpdGNvdW50PC9lbT4gLSBudW1iZXIgb2YgdGltZXMgZGF0YSBoYXMgYmVlbiBzZXJ2ZWQgZnJvbSB0aGUgY2FjaGU8L2xpPgogKiA8L3VsPjwvbGk+CiAqIDwvdWw+PC9wPgogKi8KZnVuY3Rpb24gd2luY2FjaGVfdWNhY2hlX2luZm8oYm9vbCAkc3VtbWFyeW9ubHkgPSBmYWxzZSwgJGtleSA9IG51bGwpIHt9CgovKioKICogKFBIUCA1LjIrOyBQRUNMIHdpbmNhY2hlICZndDs9IDEuMS4wKTxici8+CiAqIFJldHJpZXZlcyBpbmZvcm1hdGlvbiBhYm91dCBtZW1vcnkgdXNhZ2UgYnkgdXNlciBjYWNoZS4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2luY2FjaGUtdWNhY2hlLW1lbWluZm8ucGhwCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgQXJyYXkgb2YgbWV0YSBkYXRhIGFib3V0IHVzZXIgY2FjaGUgbWVtb3J5IHVzYWdlIG9yIEZBTFNFIG9uIGZhaWx1cmUKICogPHA+VGhlIGFycmF5IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gY29udGFpbnMgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKICogPHVsPgogKiA8bGk+PGVtPm1lbW9yeV90b3RhbDwvZW0+IC0gYW1vdW50IG9mIG1lbW9yeSBpbiBieXRlcyBhbGxvY2F0ZWQgZm9yIHRoZSB1c2VyIGNhY2hlPC9saT4KICogPGxpPjxlbT5tZW1vcnlfZnJlZTwvZW0+IC0gYW1vdW50IG9mIGZyZWUgbWVtb3J5IGluIGJ5dGVzIGF2YWlsYWJsZSBmb3IgdGhlIHVzZXIgY2FjaGU8L2xpPgogKiA8bGk+PGVtPm51bV91c2VkX2Jsa3M8L2VtPiAtIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIHVzZWQgYnkgdGhlIHVzZXIgY2FjaGU8L2xpPgogKiA8bGk+PGVtPm51bV9mcmVlX2Jsa3M8L2VtPiAtIG51bWJlciBvZiBmcmVlIG1lbW9yeSBibG9ja3MgYXZhaWxhYmxlIGZvciB0aGUgdXNlciBjYWNoZTwvbGk+CiAqIDxsaT48ZW0+bWVtb3J5X292ZXJoZWFkPC9lbT4gLSBhbW91bnQgb2YgbWVtb3J5IGluIGJ5dGVzIHVzZWQgZm9yIHRoZSB1c2VyIGNhY2hlIGludGVybmFsIHN0cnVjdHVyZXM8L2xpPgogKiA8L3VsPjwvcD4KICovCmZ1bmN0aW9uIHdpbmNhY2hlX3VjYWNoZV9tZW1pbmZvKCkge30KCi8qKgogKiAoUEhQIDUuMis7IFBFQ0wgd2luY2FjaGUgJmd0Oz0gMS4xLjApPGJyLz4KICogQWRkcyBhIHZhcmlhYmxlIGluIHVzZXIgY2FjaGUgYW5kIG92ZXJ3cml0ZXMgYSB2YXJpYWJsZSBpZiBpdCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgY2FjaGUuCiAqIDxwPlRoZSBhZGRlZCBvciB1cGRhdGVkIHZhcmlhYmxlIHJlbWFpbnMgaW4gdGhlIHVzZXIgY2FjaGUgdW5sZXNzIGl0cyB0aW1lIHRvCiAqIGxpdmUgZXhwaXJlcyBvciBpdCBpcyBkZWxldGVkIGJ5IHVzaW5nIHdpbmNhY2hlX3VjYWNoZV9kZWxldGUoKSBvcgogKiB3aW5jYWNoZV91Y2FjaGVfY2xlYXIoKSBmdW5jdGlvbnMuPC9wPgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi53aW5jYWNoZS11Y2FjaGUtc2V0LnBocAogKiBAcGFyYW0gc3RyaW5nfHN0cmluZ1tdICRrZXkgPHA+CiAqIFN0b3JlIHRoZSB2YXJpYWJsZSB1c2luZyB0aGlzIGtleSBuYW1lLiBJZiBhIHZhcmlhYmxlIHdpdGggc2FtZSBrZXkgaXMgYWxyZWFkeQogKiBwcmVzZW50IHRoZSBmdW5jdGlvbiB3aWxsIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgdmFsdWUgd2l0aCB0aGUgbmV3IG9uZS4ga2V5CiAqIGlzIGNhc2Ugc2Vuc2l0aXZlLiBrZXkgY2FuIGFsc28gdGFrZSBhcnJheSBvZiBuYW1lID0mZ3Q7IHZhbHVlIHBhaXJzIHdoZXJlCiAqIG5hbWVzIHdpbGwgYmUgdXNlZCBhcyBrZXlzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBtdWx0aXBsZSB2YWx1ZXMgaW4gdGhlCiAqIGNhY2hlIGluIG9uZSBvcGVyYXRpb24sIHRodXMgYXZvaWRpbmcgcmFjZSBjb25kaXRpb24uPC9wPgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIDxwPgogKiBWYWx1ZSBvZiBhIHZhcmlhYmxlIHRvIHN0b3JlLiBWYWx1ZSBzdXBwb3J0cyBhbGwgZGF0YSB0eXBlcyBleGNlcHQgcmVzb3VyY2VzLAogKiBzdWNoIGFzIGZpbGUgaGFuZGxlcy4gVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiBmaXJzdCBhcmd1bWVudCBpcyBhbiBhcnJheS4KICogQSBnZW5lcmFsIGd1aWRhbmNlIGlzIHRvIHBhc3MgTlVMTCBhcyB2YWx1ZSB3aGlsZSB1c2luZyBhcnJheSBhcyBrZXkuPC9wPgogKiBAcGFyYW0gaW50ICR0dGwgW29wdGlvbmFsXTxwPgogKiBUaW1lIGZvciB0aGUgdmFyaWFibGUgdG8gbGl2ZSBpbiB0aGUgY2FjaGUgaW4gc2Vjb25kcy4gQWZ0ZXIgdGhlIHZhbHVlIHNwZWNpZmllZAogKiBpbiB0dGwgaGFzIHBhc3NlZCB0aGUgc3RvcmVkIHZhcmlhYmxlIHdpbGwgYmUgZGVsZXRlZCBmcm9tIHRoZSBjYWNoZS4gVGhpcwogKiBwYXJhbWV0ZXIgdGFrZXMgYSBkZWZhdWx0IHZhbHVlIG9mIDAgd2hpY2ggbWVhbnMgdGhlIHZhcmlhYmxlIHdpbGwgc3RheSBpbiB0aGUKICogY2FjaGUgdW5sZXNzIGV4cGxpY2l0bHkgZGVsZXRlZCBieSB1c2luZyB3aW5jYWNoZV91Y2FjaGVfZGVsZXRlKCkgb3IKICogd2luY2FjaGVfdWNhY2hlX2NsZWFyKCkgZnVuY3Rpb25zLjwvcD4KICogQHJldHVybiBib29sIDxwPgogKiBJZiBrZXkgaXMgc3RyaW5nLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uIGZhaWx1cmUuPC9wPgogKiA8cD5JZiBrZXkgaXMgYW4gYXJyYXksIHRoZSBmdW5jdGlvbiByZXR1cm5zOgogKiA8dWwgc3R5bGU9Imxpc3Qtc3R5bGU6IHNxdWFyZTsiPgogKiA8bGk+SWYgYWxsIHRoZSBuYW1lID0mZ3Q7IHZhbHVlIHBhaXJzIGluIHRoZSBhcnJheSBjYW4gYmUgc2V0LCBmdW5jdGlvbgogKiByZXR1cm5zIGFuIGVtcHR5IGFycmF5OzwvbGk+CiAqIDxsaT5JZiBhbGwgdGhlIG5hbWUgPSZndDsgdmFsdWUgcGFpcnMgaW4gdGhlIGFycmF5IGNhbm5vdCBiZSBzZXQsIGZ1bmN0aW9uCiAqIHJldHVybnMgRkFMU0U7PC9saT4KICogPGxpPklmIHNvbWUgY2FuIGJlIHNldCB3aGlsZSBvdGhlcnMgY2Fubm90LCBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IHdpdGgKICogbmFtZT0mZ3Q7dmFsdWUgcGFpciBmb3Igd2hpY2ggdGhlIGFkZGl0aW9uIGZhaWxlZCBpbiB0aGUgdXNlciBjYWNoZS48L2xpPgogKiA8L3VsPjwvcD4KICovCmZ1bmN0aW9uIHdpbmNhY2hlX3VjYWNoZV9zZXQoJGtleSwgJHZhbHVlLCAkdHRsID0gMCkge30KCi8qKgogKiAoUEhQIDUuMis7IFBFQ0wgd2luY2FjaGUgJmd0Oz0gMS4xLjApPGJyLz4KICogUmVsZWFzZXMgYW4gZXhjbHVzaXZlIGxvY2sgdGhhdCB3YXMgb2J0YWluZWQgb24gYSBnaXZlbiBrZXkgYnkgdXNpbmcgd2luY2FjaGVfbG9jaygpLgogKiA8cD5JZiBhbnkgb3RoZXIgcHJvY2VzcyB3YXMgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGUgbG9jayBvbiB0aGlzIGtleSwgdGhhdCBwcm9jZXNzIHdpbGwgYmUgYWJsZSB0byBvYnRhaW4gdGhlIGxvY2suPC9wPgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi53aW5jYWNoZS11bmxvY2sucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBOYW1lIG9mIHRoZSBrZXkgaW4gdGhlIGNhY2hlIHRvIHJlbGVhc2UgdGhlIGxvY2sgb24uCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gd2luY2FjaGVfdW5sb2NrKCRrZXkpIHt9Cjw/cGhwCgpuYW1lc3BhY2UgT3BlblRlbGVtZXRyeVxJbnN0cnVtZW50YXRpb247Cgp1c2UgQ2xvc3VyZTsKCi8qKgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNsYXNzIFRoZSBob29rZWQgZnVuY3Rpb24ncyBjbGFzcy4gTnVsbCBmb3IgYSBnbG9iYWwvYnVpbHQtaW4gZnVuY3Rpb24uCiAqIEBwYXJhbSBzdHJpbmcgJGZ1bmN0aW9uIFRoZSBob29rZWQgZnVuY3Rpb24ncyBuYW1lLgogKiBAcGFyYW0gQ2xvc3VyZXxudWxsICRwcmUgZnVuY3Rpb24oJGNsYXNzLCBhcnJheSAkcGFyYW1zLCBzdHJpbmcgJGNsYXNzLCBzdHJpbmcgJGZ1bmN0aW9uLCA/c3RyaW5nICRmaWxlbmFtZSwgP2ludCAkbGluZW5vKTogJHBhcmFtcwogKiAgICAgICAgWW91IG1heSBvcHRpb25hbGx5IHJldHVybiBtb2RpZmllZCBwYXJhbWV0ZXJzLgogKiBAcGFyYW0gQ2xvc3VyZXxudWxsICRwb3N0IGZ1bmN0aW9uKCRjbGFzcywgYXJyYXkgJHBhcmFtcywgJHJldHVyblZhbHVlLCA/VGhyb3dhYmxlICRleGNlcHRpb24pOiAkcmV0dXJuVmFsdWUKICogICAgICAgIFlvdSBtYXkgb3B0aW9uYWxseSByZXR1cm4gbW9kaWZpZWQgcmV0dXJuIHZhbHVlLgogKiBAcmV0dXJuIGJvb2wgV2hldGhlciB0aGUgb2JzZXJ2ZXIgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZAogKgogKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLXRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LXBocC1pbnN0cnVtZW50YXRpb24KICovCmZ1bmN0aW9uIGhvb2soCiAgICBzdHJpbmd8bnVsbCAkY2xhc3MsCiAgICBzdHJpbmcgJGZ1bmN0aW9uLAogICAgP0Nsb3N1cmUgJHByZSA9IG51bGwsCiAgICA/Q2xvc3VyZSAkcG9zdCA9IG51bGwsCik6IGJvb2wge30KPD9waHAKLyoqCiAqIFN0dWJzIGZvciBzdG9tcAogKiBodHRwczovL3BlY2wucGhwLm5ldC9wYWNrYWdlL3N0b21wCiAqLwpjbGFzcyBTdG9tcAp7CiAgICAvKioKICAgICAqIENvbm5lY3QgdG8gc2VydmVyCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYnJva2VyIFRoZSBicm9rZXIgVVJJCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBUaGUgdXNlcm5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZAogICAgICogQHBhcmFtIGFycmF5ICAkaGVhZGVycyBhZGRpdGlvbmFsIGhlYWRlcnMgKGV4YW1wbGU6IHJlY2VpcHQpLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGJyb2tlciA9IG51bGwsICR1c2VybmFtZSA9IG51bGwsICRwYXNzd29yZCA9IG51bGwsIGFycmF5ICRoZWFkZXJzID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGN1cnJlbnQgc3RvbXAgc2Vzc2lvbiBJRAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHN0b21wIHNlc3Npb24gSUQgaWYgaXQgZXhpc3RzLCBvciBGQUxTRSBvdGhlcndpc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlc3Npb25JZCgpIHt9CgogICAgLyoqCiAgICAgKiBDbG9zZSBzdG9tcCBjb25uZWN0aW9uCiAgICAgKgogICAgICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2Vzcywgb3IgRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzY29ubmVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBTZW5kcyBhIG1lc3NhZ2UgdG8gYSBkZXN0aW5hdGlvbiBpbiB0aGUgbWVzc2FnaW5nIHN5c3RlbQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAkZGVzdGluYXRpb24gaW5kaWNhdGVzIHdoZXJlIHRvIHNlbmQgdGhlIG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmd8U3RvbXBGcmFtZSAkbXNnIG1lc3NhZ2UgdG8gYmUgc2VudAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICRoZWFkZXJzIGFkZGl0aW9uYWwgaGVhZGVycyAoZXhhbXBsZTogcmVjZWlwdCkuCiAgICAgKiBAcmV0dXJuIGJvb2wgVFJVRSBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBmYWlsdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZW5kKCRkZXN0aW5hdGlvbiwgJG1zZywgYXJyYXkgJGhlYWRlcnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFJlZ2lzdGVyIHRvIGxpc3RlbiB0byBhIGdpdmVuIGRlc3RpbmF0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGVzdGluYXRpb24gaW5kaWNhdGVzIHdoaWNoIGRlc3RpbmF0aW9uIHRvIHN1YnNjcmliZSB0bwogICAgICogQHBhcmFtIGFycmF5ICAkaGVhZGVycyBhZGRpdGlvbmFsIGhlYWRlcnMgKGV4YW1wbGU6IHJlY2VpcHQpLgogICAgICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2Vzcywgb3IgRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3Vic2NyaWJlKCRkZXN0aW5hdGlvbiwgYXJyYXkgJGhlYWRlcnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBhbiBleGlzdGluZyBzdWJzY3JpcHRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXN0aW5hdGlvbiBpbmRpY2F0ZXMgd2hpY2ggc3Vic2NyaXB0aW9uIHRvIHJlbW92ZQogICAgICogQHBhcmFtIGFycmF5ICAkaGVhZGVycyBhZGRpdGlvbmFsIGhlYWRlcnMgKGV4YW1wbGU6IHJlY2VpcHQpLgogICAgICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2Vzcywgb3IgRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zdWJzY3JpYmUoJGRlc3RpbmF0aW9uLCBhcnJheSAkaGVhZGVycyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogSW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlcmUgaXMgYSBmcmFtZSByZWFkeSB0byByZWFkCiAgICAgKgogICAgICogQHJldHVybiBib29sIFRSVUUgaWYgdGhlcmUgaXMgb25lLCBvciBGQUxTRSBvdGhlcndpc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc0ZyYW1lKCkge30KCiAgICAvKioKICAgICAqIFJlYWQgdGhlIG5leHQgZnJhbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzc05hbWUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gaW5zdGFudGlhdGUuCiAgICAgKiBAcmV0dXJuIG9iamVjdHxmYWxzZSBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBmYWlsdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkRnJhbWUoJGNsYXNzTmFtZSA9ICdzdG9tcEZyYW1lJykge30KCiAgICAvKioKICAgICAqIFN0YXJ0IGEgdHJhbnNhY3Rpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0cmFuc2FjdGlvbl9pZCB0cmFuc2FjdGlvbiBpZAogICAgICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2Vzcywgb3IgRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmVnaW4oJHRyYW5zYWN0aW9uX2lkKSB7fQoKICAgIC8qKgogICAgICogQ29tbWl0IGEgdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0cmFuc2FjdGlvbl9pZCB0cmFuc2FjdGlvbiBpZAogICAgICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2Vzcywgb3IgRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tbWl0KCR0cmFuc2FjdGlvbl9pZCkge30KCiAgICAvKioKICAgICAqIFJvbGwgYmFjayBhIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHJhbnNhY3Rpb25faWQgdHJhbnNhY3Rpb24gaWQKICAgICAqIEByZXR1cm4gYm9vbCBUUlVFIG9uIHN1Y2Nlc3MsIG9yIEZBTFNFIG9uIGZhaWx1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFib3J0KCR0cmFuc2FjdGlvbl9pZCkge30KCiAgICAvKioKICAgICAqIEFja25vd2xlZGdlIGNvbnN1bXB0aW9uIG9mIGEgbWVzc2FnZSBmcm9tIGEgc3Vic2NyaXB0aW9uIHVzaW5nIGNsaWVudCBhY2tub3dsZWRnbWVudAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8U3RvbXBGcmFtZSAkbXNnIG1lc3NhZ2UvbWVzc2FnZUlkIHRvIGJlIGFja25vd2xlZGdlZAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICRoZWFkZXJzIGFkZGl0aW9uYWwgaGVhZGVycyAoZXhhbXBsZTogcmVjZWlwdCkuCiAgICAgKiBAcmV0dXJuIGJvb2wgVFJVRSBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBmYWlsdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhY2soJG1zZywgYXJyYXkgJGhlYWRlcnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbGFzdCBzdG9tcCBlcnJvcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIEVycm9yIG1lc3NhZ2UsIG9yIEZBTFNFIGlmIG5vIGVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlcnJvcigpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGltZW91dAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHNlY29uZHMgdGhlIHNlY29uZHMgcGFydCBvZiB0aGUgdGltZW91dCB0byBiZSBzZXQKICAgICAqIEBwYXJhbSBpbnQgJG1pY3Jvc2Vjb25kcyB0aGUgbWljcm9zZWNvbmRzIHBhcnQgb2YgdGhlIHRpbWVvdXQgdG8gYmUgc2V0CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRpbWVvdXQoJHNlY29uZHMsICRtaWNyb3NlY29uZHMgPSAwKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRpbWVvdXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IEFycmF5IHdpdGggdGltZW91dCBpbmZvcm1hdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVvdXQoKSB7fQp9CgpjbGFzcyBTdG9tcEZyYW1lCnsKICAgIC8qKgogICAgICogRnJhbWUgQ29tbWFuZAogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRjb21tYW5kOwoKICAgIC8qKgogICAgICogRnJhbWUgaGVhZGVycwogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwdWJsaWMgJGhlYWRlcnM7CgogICAgLyoqCiAgICAgKiBGcmFtZSBib2R5CiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGJvZHk7Cn0KCmNsYXNzIFN0b21wRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogR2V0IHRoZSBzdG9tcCBzZXJ2ZXIgZXJyb3IgZGV0YWlscwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZXRhaWxzKCkge30KfQoKLyoqCiAqIEdldCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBzdG9tcCBleHRlbnNpb24KICoKICogQHJldHVybiBzdHJpbmcgdmVyc2lvbgogKi8KZnVuY3Rpb24gc3RvbXBfdmVyc2lvbigpIHt9CgovKioKICogT3BlbnMgYSBjb25uZWN0aW9uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGJyb2tlciBicm9rZXIgVVJJCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFRoZSB1c2VybmFtZQogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBUaGUgcGFzc3dvcmQKICogQHBhcmFtIGFycmF5ICAkaGVhZGVycyBhZGRpdGlvbmFsIGhlYWRlcnMgKGV4YW1wbGU6IHJlY2VpcHQpLgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIHN0b21wIGNvbm5lY3Rpb24gaWRlbnRpZmllciBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBmYWlsdXJlCiAqLwpmdW5jdGlvbiBzdG9tcF9jb25uZWN0KCRicm9rZXIgPSBudWxsLCAkdXNlcm5hbWUgPSBudWxsLCAkcGFzc3dvcmQgPSBudWxsLCBhcnJheSAkaGVhZGVycyA9IFtdKSB7fQoKLyoqCiAqIEdldHMgdGhlIGN1cnJlbnQgc3RvbXAgc2Vzc2lvbiBJRAogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmsgaWRlbnRpZmllciByZXR1cm5lZCBieSBzdG9tcF9jb25uZWN0CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHN0b21wIHNlc3Npb24gSUQgaWYgaXQgZXhpc3RzLCBvciBGQUxTRSBvdGhlcndpc2UKICovCmZ1bmN0aW9uIHN0b21wX2dldF9zZXNzaW9uX2lkKCRsaW5rKSB7fQoKLyoqCiAqIENsb3NlcyBzdG9tcCBjb25uZWN0aW9uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBpZGVudGlmaWVyIHJldHVybmVkIGJ5IHN0b21wX2Nvbm5lY3QKICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2Vzcywgb3IgRkFMU0Ugb24gZmFpbHVyZQogKi8KZnVuY3Rpb24gc3RvbXBfY2xvc2UoJGxpbmspIHt9CgovKioKICogU2VuZHMgYSBtZXNzYWdlIHRvIGEgZGVzdGluYXRpb24gaW4gdGhlIG1lc3NhZ2luZyBzeXN0ZW0KICoKICogQHBhcmFtIHJlc291cmNlICAgICAgICAgJGxpbmsgaWRlbnRpZmllciByZXR1cm5lZCBieSBzdG9tcF9jb25uZWN0CiAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAkZGVzdGluYXRpb24gaW5kaWNhdGVzIHdoZXJlIHRvIHNlbmQgdGhlIG1lc3NhZ2UKICogQHBhcmFtIHN0cmluZ3xTdG9tcEZyYW1lICRtc2cgbWVzc2FnZSB0byBiZSBzZW50CiAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAkaGVhZGVycyBhZGRpdGlvbmFsIGhlYWRlcnMgKGV4YW1wbGU6IHJlY2VpcHQpLgogKiBAcmV0dXJuIGJvb2wgVFJVRSBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBmYWlsdXJlCiAqLwpmdW5jdGlvbiBzdG9tcF9zZW5kKCRsaW5rLCAkZGVzdGluYXRpb24sICRtc2csIGFycmF5ICRoZWFkZXJzID0gW10pIHt9CgovKioKICogUmVnaXN0ZXJzIHRvIGxpc3RlbiB0byBhIGdpdmVuIGRlc3RpbmF0aW9uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBpZGVudGlmaWVyIHJldHVybmVkIGJ5IHN0b21wX2Nvbm5lY3QKICogQHBhcmFtIHN0cmluZyAgICAkZGVzdGluYXRpb24gaW5kaWNhdGVzIHdoaWNoIGRlc3RpbmF0aW9uIHRvIHN1YnNjcmliZSB0bwogKiBAcGFyYW0gYXJyYXkgICAgICRoZWFkZXJzIGFkZGl0aW9uYWwgaGVhZGVycyAoZXhhbXBsZTogcmVjZWlwdCkuCiAqIEByZXR1cm4gYm9vbCBUUlVFIG9uIHN1Y2Nlc3MsIG9yIEZBTFNFIG9uIGZhaWx1cmUKICovCmZ1bmN0aW9uIHN0b21wX3N1YnNjcmliZSgkbGluaywgJGRlc3RpbmF0aW9uLCBhcnJheSAkaGVhZGVycyA9IFtdKSB7fQoKLyoqCiAqIFJlbW92ZXMgYW4gZXhpc3Rpbmcgc3Vic2NyaXB0aW9uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBpZGVudGlmaWVyIHJldHVybmVkIGJ5IHN0b21wX2Nvbm5lY3QKICogQHBhcmFtIHN0cmluZyAgICAkZGVzdGluYXRpb24gaW5kaWNhdGVzIHdoaWNoIHN1YnNjcmlwdGlvbiB0byByZW1vdmUKICogQHBhcmFtIGFycmF5ICAgICAkaGVhZGVycyBhZGRpdGlvbmFsIGhlYWRlcnMgKGV4YW1wbGU6IHJlY2VpcHQpLgogKiBAcmV0dXJuIGJvb2wgVFJVRSBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBmYWlsdXJlCiAqLwpmdW5jdGlvbiBzdG9tcF91bnN1YnNjcmliZSgkbGluaywgJGRlc3RpbmF0aW9uLCBhcnJheSAkaGVhZGVycyA9IFtdKSB7fQoKLyoqCiAqIEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBhIGZyYW1lIHJlYWR5IHRvIHJlYWQKICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rIGlkZW50aWZpZXIgcmV0dXJuZWQgYnkgc3RvbXBfY29ubmVjdAogKiBAcmV0dXJuIGJvb2wgVFJVRSBpZiB0aGVyZSBpcyBvbmUsIG9yIEZBTFNFIG90aGVyd2lzZQogKi8KZnVuY3Rpb24gc3RvbXBfaGFzX2ZyYW1lKCRsaW5rKSB7fQoKLyoqCiAqIFJlYWRzIHRoZSBuZXh0IGZyYW1lCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBpZGVudGlmaWVyIHJldHVybmVkIGJ5IHN0b21wX2Nvbm5lY3QKICogQHJldHVybiBhcnJheXxmYWxzZSBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBmYWlsdXJlCiAqLwpmdW5jdGlvbiBzdG9tcF9yZWFkX2ZyYW1lKCRsaW5rKSB7fQoKLyoqCiAqIFN0YXJ0cyBhIHRyYW5zYWN0aW9uCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBpZGVudGlmaWVyIHJldHVybmVkIGJ5IHN0b21wX2Nvbm5lY3QKICogQHBhcmFtIHN0cmluZyAgICAkdHJhbnNhY3Rpb25faWQgdHJhbnNhY3Rpb24gaWQKICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2Vzcywgb3IgRkFMU0Ugb24gZmFpbHVyZQogKi8KZnVuY3Rpb24gc3RvbXBfYmVnaW4oJGxpbmssICR0cmFuc2FjdGlvbl9pZCkge30KCi8qKgogKiBDb21taXRzIGEgdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MKICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rIGlkZW50aWZpZXIgcmV0dXJuZWQgYnkgc3RvbXBfY29ubmVjdAogKiBAcGFyYW0gc3RyaW5nICAgICR0cmFuc2FjdGlvbl9pZCB0cmFuc2FjdGlvbiBpZAogKiBAcmV0dXJuIGJvb2wgVFJVRSBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBmYWlsdXJlCiAqLwpmdW5jdGlvbiBzdG9tcF9jb21taXQoJGxpbmssICR0cmFuc2FjdGlvbl9pZCkge30KCi8qKgogKiBSb2xscyBiYWNrIGEgdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MKICoKICogQHBhcmFtIHJlc291cmNlICRsaW5rIGlkZW50aWZpZXIgcmV0dXJuZWQgYnkgc3RvbXBfY29ubmVjdAogKiBAcGFyYW0gc3RyaW5nICAgICR0cmFuc2FjdGlvbl9pZCB0cmFuc2FjdGlvbiBpZAogKiBAcmV0dXJuIGJvb2wgVFJVRSBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBmYWlsdXJlCiAqLwpmdW5jdGlvbiBzdG9tcF9hYm9ydCgkbGluaywgJHRyYW5zYWN0aW9uX2lkKSB7fQoKLyoqCiAqIEFja25vd2xlZGdlIGNvbnN1bXB0aW9uIG9mIGEgbWVzc2FnZSBmcm9tIGEgc3Vic2NyaXB0aW9uIHVzaW5nIGNsaWVudCBhY2tub3dsZWRnbWVudAogKgogKiBAcGFyYW0gcmVzb3VyY2UgICAgICAgICAkbGluayBpZGVudGlmaWVyIHJldHVybmVkIGJ5IHN0b21wX2Nvbm5lY3QKICogQHBhcmFtIHN0cmluZ3xTdG9tcEZyYW1lICRtc2cgbWVzc2FnZS9tZXNzYWdlSWQgdG8gYmUgYWNrbm93bGVkZ2VkCiAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAkaGVhZGVycyBhZGRpdGlvbmFsIGhlYWRlcnMgKGV4YW1wbGU6IHJlY2VpcHQpLgogKiBAcmV0dXJuIGJvb2wgVFJVRSBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBmYWlsdXJlCiAqLwpmdW5jdGlvbiBzdG9tcF9hY2soJGxpbmssICRtc2csIGFycmF5ICRoZWFkZXJzID0gW10pIHt9CgovKioKICogR2V0cyB0aGUgbGFzdCBzdG9tcCBlcnJvcgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmsgaWRlbnRpZmllciByZXR1cm5lZCBieSBzdG9tcF9jb25uZWN0CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIEVycm9yIG1lc3NhZ2UsIG9yIEZBTFNFIGlmIG5vIGVycm9yCiAqLwpmdW5jdGlvbiBzdG9tcF9lcnJvcigkbGluaykge30KCi8qKgogKiBTZXQgdGltZW91dAogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmsgaWRlbnRpZmllciByZXR1cm5lZCBieSBzdG9tcF9jb25uZWN0CiAqIEBwYXJhbSBpbnQgICAgICAgJHNlY29uZHMgdGhlIHNlY29uZHMgcGFydCBvZiB0aGUgdGltZW91dCB0byBiZSBzZXQKICogQHBhcmFtIGludCAgICAgICAkbWljcm9zZWNvbmRzIHRoZSBtaWNyb3NlY29uZHMgcGFydCBvZiB0aGUgdGltZW91dCB0byBiZSBzZXQKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBzdG9tcF9zZXRfdGltZW91dCgkbGluaywgJHNlY29uZHMsICRtaWNyb3NlY29uZHMgPSAwKSB7fQoKLyoqCiAqIEdldCB0aW1lb3V0CiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkbGluayBpZGVudGlmaWVyIHJldHVybmVkIGJ5IHN0b21wX2Nvbm5lY3QKICogQHJldHVybiBhcnJheSBBcnJheSB3aXRoIHRpbWVvdXQgaW5mb3JtYXRpb25zCiAqLwpmdW5jdGlvbiBzdG9tcF9nZXRfdGltZW91dCgkbGluaykge30KPD9waHAKCi8qKgogKiBTdHVicyBmb3IgQVBDIChhcGN1X2JjIG5vd2FkYXlzKSBleHRlbnNpb24KICovCgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdBUENfQklOX1ZFUklGWV9NRDUnLCAxKTsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQVBDX0JJTl9WRVJJRllfQ1JDMzInLCAyKTsKCi8qKgogKiBSZXRyaWV2ZXMgY2FjaGVkIGluZm9ybWF0aW9uIGFuZCBtZXRhLWRhdGEgZnJvbSBBUEMncyBkYXRhIHN0b3JlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBjLWNhY2hlLWluZm8ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgSWYgY2FjaGVfdHlwZSBpcyAidXNlciIsIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1c2VyIGNhY2hlIHdpbGwgYmUgcmV0dXJuZWQuCiAqIElmIGNhY2hlX3R5cGUgaXMgImZpbGVoaXRzIiwgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggZmlsZXMgaGF2ZSBiZWVuIHNlcnZlZCBmcm9tIHRoZSBieXRlY29kZQogKiBjYWNoZSBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdCB3aWxsIGJlIHJldHVybmVkLiBUaGlzIGZlYXR1cmUgbXVzdCBiZSBlbmFibGVkIGF0IGNvbXBpbGUgdGltZQogKiB1c2luZyAtLWVuYWJsZS1maWxlaGl0cy4gSWYgYW4gaW52YWxpZCBvciBubyBjYWNoZV90eXBlIGlzIHNwZWNpZmllZCwgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAqIHN5c3RlbSBjYWNoZSAoY2FjaGVkIGZpbGVzKSB3aWxsIGJlIHJldHVybmVkLgogKiBAcGFyYW0gYm9vbCAkbGltaXRlZCBJZiBsaW1pdGVkIGlzIFRSVUUsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBleGNsdWRlIHRoZSBpbmRpdmlkdWFsIGxpc3QKICogb2YgY2FjaGUgZW50cmllcy4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0cnlpbmcgdG8gb3B0aW1pemUgY2FsbHMgZm9yIHN0YXRpc3RpY3MgZ2F0aGVyaW5nLgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFycmF5IG9mIGNhY2hlZCBkYXRhIChhbmQgbWV0YS1kYXRhKSBvciBGQUxTRSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gYXBjX2NhY2hlX2luZm8oJHR5cGUgPSAnJywgJGxpbWl0ZWQgPSBmYWxzZSkge30KCi8qKgogKiBDbGVhcnMgdGhlIEFQQyBjYWNoZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmFwYy1jbGVhci1jYWNoZS5waHAKICogQHBhcmFtIHN0cmluZyAkY2FjaGVfdHlwZSBJZiBjYWNoZV90eXBlIGlzICJ1c2VyIiwgdGhlIHVzZXIgY2FjaGUgd2lsbCBiZSBjbGVhcmVkOwogKiBvdGhlcndpc2UsIHRoZSBzeXN0ZW0gY2FjaGUgKGNhY2hlZCBmaWxlcykgd2lsbCBiZSBjbGVhcmVkLgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGFwY19jbGVhcl9jYWNoZSgkY2FjaGVfdHlwZSA9ICcnKSB7fQoKLyoqCiAqIFJldHJpZXZlcyBBUEMncyBTaGFyZWQgTWVtb3J5IEFsbG9jYXRpb24gaW5mb3JtYXRpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGMtc21hLWluZm8ucGhwCiAqIEBwYXJhbSBib29sICRsaW1pdGVkIFdoZW4gc2V0IHRvIEZBTFNFIChkZWZhdWx0KSBhcGNfc21hX2luZm8oKSB3aWxsCiAqIHJldHVybiBhIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggc2VnbWVudC4KICogQHJldHVybiBhcnJheXxmYWxzZSBBcnJheSBvZiBTaGFyZWQgTWVtb3J5IEFsbG9jYXRpb24gZGF0YTsgRkFMU0Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGFwY19zbWFfaW5mbygkbGltaXRlZCA9IGZhbHNlKSB7fQoKLyoqCiAqIENhY2hlIGEgdmFyaWFibGUgaW4gdGhlIGRhdGEgc3RvcmUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGMtc3RvcmUucGhwCiAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJGtleSBTdHJpbmc6IFN0b3JlIHRoZSB2YXJpYWJsZSB1c2luZyB0aGlzIG5hbWUuIEtleXMgYXJlIGNhY2hlLXVuaXF1ZSwKICogc28gc3RvcmluZyBhIHNlY29uZCB2YWx1ZSB3aXRoIHRoZSBzYW1lIGtleSB3aWxsIG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwgdmFsdWUuCiAqIEFycmF5OiBOYW1lcyBpbiBrZXksIHZhcmlhYmxlcyBpbiB2YWx1ZS4KICogQHBhcmFtIG1peGVkICR2YXIgW29wdGlvbmFsXSBUaGUgdmFyaWFibGUgdG8gc3RvcmUKICogQHBhcmFtIGludCAkdHRsIFtvcHRpb25hbF0gIFRpbWUgVG8gTGl2ZTsgc3RvcmUgdmFyIGluIHRoZSBjYWNoZSBmb3IgdHRsIHNlY29uZHMuIEFmdGVyIHRoZSB0dGwgaGFzIHBhc3NlZCwKICogdGhlIHN0b3JlZCB2YXJpYWJsZSB3aWxsIGJlIGV4cHVuZ2VkIGZyb20gdGhlIGNhY2hlIChvbiB0aGUgbmV4dCByZXF1ZXN0KS4gSWYgbm8gdHRsIGlzIHN1cHBsaWVkCiAqIChvciBpZiB0aGUgdHRsIGlzIDApLCB0aGUgdmFsdWUgd2lsbCBwZXJzaXN0IHVudGlsIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgbWFudWFsbHksCiAqIG9yIG90aGVyd2lzZSBmYWlscyB0byBleGlzdCBpbiB0aGUgY2FjaGUgKGNsZWFyLCByZXN0YXJ0LCBldGMuKS4KICogQHJldHVybiBib29sfGFycmF5IFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUgfCBhcnJheSB3aXRoIGVycm9yIGtleXMuCiAqLwpmdW5jdGlvbiBhcGNfc3RvcmUoJGtleSwgJHZhciwgJHR0bCA9IDApIHt9CgovKioKICogRmV0Y2ggYSBzdG9yZWQgdmFyaWFibGUgZnJvbSB0aGUgY2FjaGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGMtZmV0Y2gucGhwCiAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJGtleSBUaGUga2V5IHVzZWQgdG8gc3RvcmUgdGhlIHZhbHVlICh3aXRoIGFwY19zdG9yZSgpKS4KICogSWYgYW4gYXJyYXkgaXMgcGFzc2VkIHRoZW4gZWFjaCBlbGVtZW50IGlzIGZldGNoZWQgYW5kIHJldHVybmVkLgogKiBAcGFyYW0gYm9vbHxudWxsICYkc3VjY2VzcyBTZXQgdG8gVFJVRSBpbiBzdWNjZXNzIGFuZCBGQUxTRSBpbiBmYWlsdXJlLgogKiBAcmV0dXJuIG1peGVkfGZhbHNlIFRoZSBzdG9yZWQgdmFyaWFibGUgb3IgYXJyYXkgb2YgdmFyaWFibGVzIG9uIHN1Y2Nlc3M7IEZBTFNFIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBhcGNfZmV0Y2goJGtleSwgJiRzdWNjZXNzID0gbnVsbCkge30KCi8qKgogKiBSZW1vdmVzIGEgc3RvcmVkIHZhcmlhYmxlIGZyb20gdGhlIGNhY2hlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBjLWRlbGV0ZS5waHAKICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXXxBUENJdGVyYXRvciAka2V5IFRoZSBrZXkgdXNlZCB0byBzdG9yZSB0aGUgdmFsdWUgKHdpdGggYXBjX3N0b3JlKCkpLgogKiBAcmV0dXJuIGJvb2x8c3RyaW5nW10gUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4gRm9yIGFycmF5IG9mIGtleXMgcmV0dXJucyBsaXN0IG9mIGZhaWxlZCBrZXlzLgogKi8KZnVuY3Rpb24gYXBjX2RlbGV0ZSgka2V5KSB7fQoKLyoqCiAqIERlZmluZXMgYSBzZXQgb2YgY29uc3RhbnRzIGZvciByZXRyaWV2YWwgYW5kIG1hc3MtZGVmaW5pdGlvbgogKgogKiBkZWZpbmUoKSBpcyBub3RvcmlvdXNseSBzbG93LiBTaW5jZSB0aGUgbWFpbiBiZW5lZml0IG9mIEFQQyBpcyB0byBpbmNyZWFzZQogKiB0aGUgcGVyZm9ybWFuY2Ugb2Ygc2NyaXB0cy9hcHBsaWNhdGlvbnMsIHRoaXMgbWVjaGFuaXNtIGlzIHByb3ZpZGVkIHRvIHN0cmVhbWxpbmUKICogdGhlIHByb2Nlc3Mgb2YgbWFzcyBjb25zdGFudCBkZWZpbml0aW9uLiBIb3dldmVyLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBlcmZvcm0KICogYXMgd2VsbCBhcyBhbnRpY2lwYXRlZC4gRm9yIGEgYmV0dGVyLXBlcmZvcm1pbmcgc29sdXRpb24sIHRyeSB0aGUgaGlkZWYgZXh0ZW5zaW9uIGZyb20gUEVDTC4KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGMtZGVmaW5lLWNvbnN0YW50cy5waHAKICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgc2VydmVzIGFzIHRoZSBuYW1lIG9mIHRoZSBjb25zdGFudCBzZXQgYmVpbmcgc3RvcmVkLgogKiBUaGlzIGtleSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBzdG9yZWQgY29uc3RhbnRzIGluIGFwY19sb2FkX2NvbnN0YW50cygpLgogKiBAcGFyYW0gYXJyYXkgJGNvbnN0YW50cyBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjb25zdGFudF9uYW1lID0+IHZhbHVlIHBhaXJzLgogKiBUaGUgY29uc3RhbnRfbmFtZSBtdXN0IGZvbGxvdyB0aGUgbm9ybWFsIGNvbnN0YW50IG5hbWluZyBydWxlcy4gVmFsdWUgbXVzdCBldmFsdWF0ZSB0byBhIHNjYWxhciB2YWx1ZS4KICogQHBhcmFtIGJvb2wgJGNhc2Vfc2Vuc2l0aXZlIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBmb3IgY29uc3RhbnRzIGlzIHRvIGJlIGRlY2xhcmVkIGNhc2Utc2Vuc2l0aXZlOwogKiBpLmUuIENPTlNUQU5UIGFuZCBDb25zdGFudCByZXByZXNlbnQgZGlmZmVyZW50IHZhbHVlcy4gSWYgdGhpcyBwYXJhbWV0ZXIgZXZhbHVhdGVzIHRvIEZBTFNFCiAqIHRoZSBjb25zdGFudHMgd2lsbCBiZSBkZWNsYXJlZCBhcyBjYXNlLWluc2Vuc2l0aXZlIHN5bWJvbHMuCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gYXBjX2RlZmluZV9jb25zdGFudHMoJGtleSwgYXJyYXkgJGNvbnN0YW50cywgJGNhc2Vfc2Vuc2l0aXZlID0gdHJ1ZSkge30KCi8qKgogKiBDYWNoZXMgYSB2YXJpYWJsZSBpbiB0aGUgZGF0YSBzdG9yZSwgb25seSBpZiBpdCdzIG5vdCBhbHJlYWR5IHN0b3JlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmFwYy1hZGQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBTdG9yZSB0aGUgdmFyaWFibGUgdXNpbmcgdGhpcyBuYW1lLiBLZXlzIGFyZSBjYWNoZS11bmlxdWUsCiAqIHNvIGF0dGVtcHRpbmcgdG8gdXNlIGFwY19hZGQoKSB0byBzdG9yZSBkYXRhIHdpdGggYSBrZXkgdGhhdCBhbHJlYWR5IGV4aXN0cyB3aWxsIG5vdAogKiBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIGRhdGEsIGFuZCB3aWxsIGluc3RlYWQgcmV0dXJuIEZBTFNFLiAoVGhpcyBpcyB0aGUgb25seSBkaWZmZXJlbmNlCiAqIGJldHdlZW4gYXBjX2FkZCgpIGFuZCBhcGNfc3RvcmUoKS4pCiAqIEBwYXJhbSBtaXhlZCAkdmFyIFRoZSB2YXJpYWJsZSB0byBzdG9yZQogKiBAcGFyYW0gaW50ICR0dGwgVGltZSBUbyBMaXZlOyBzdG9yZSB2YXIgaW4gdGhlIGNhY2hlIGZvciB0dGwgc2Vjb25kcy4gQWZ0ZXIgdGhlIHR0bCBoYXMgcGFzc2VkLAogKiB0aGUgc3RvcmVkIHZhcmlhYmxlIHdpbGwgYmUgZXhwdW5nZWQgZnJvbSB0aGUgY2FjaGUgKG9uIHRoZSBuZXh0IHJlcXVlc3QpLiBJZiBubyB0dGwgaXMgc3VwcGxpZWQKICogKG9yIGlmIHRoZSB0dGwgaXMgMCksIHRoZSB2YWx1ZSB3aWxsIHBlcnNpc3QgdW50aWwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSBtYW51YWxseSwKICogb3Igb3RoZXJ3aXNlIGZhaWxzIHRvIGV4aXN0IGluIHRoZSBjYWNoZSAoY2xlYXIsIHJlc3RhcnQsIGV0Yy4pLgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGFwY19hZGQoJGtleSwgJHZhciwgJHR0bCA9IDApIHt9CgovKioKICogU3RvcmVzIGEgZmlsZSBpbiB0aGUgYnl0ZWNvZGUgY2FjaGUsIGJ5cGFzc2luZyBhbGwgZmlsdGVycwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmFwYy1jb21waWxlLWZpbGUucGhwCiAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJGZpbGVuYW1lIEZ1bGwgb3IgcmVsYXRpdmUgcGF0aCB0byBhIFBIUCBmaWxlIHRoYXQgd2lsbCBiZQogKiBjb21waWxlZCBhbmQgc3RvcmVkIGluIHRoZSBieXRlY29kZSBjYWNoZS4KICogQHBhcmFtIGJvb2wgJGF0b21pYwogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGFwY19jb21waWxlX2ZpbGUoJGZpbGVuYW1lLCAkYXRvbWljID0gdHJ1ZSkge30KCi8qKgogKiBMb2FkcyBhIHNldCBvZiBjb25zdGFudHMgZnJvbSB0aGUgY2FjaGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGMtbG9hZC1jb25zdGFudHMucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgbmFtZSBvZiB0aGUgY29uc3RhbnQgc2V0ICh0aGF0IHdhcyBzdG9yZWQKICogd2l0aCBhcGNfZGVmaW5lX2NvbnN0YW50cygpKSB0byBiZSByZXRyaWV2ZWQuCiAqIEBwYXJhbSBib29sICRjYXNlX3NlbnNpdGl2ZSBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgZm9yIGNvbnN0YW50cyBpcyB0byBiZSBkZWNsYXJlZCBjYXNlLXNlbnNpdGl2ZTsKICogaS5lLiBDT05TVEFOVCBhbmQgQ29uc3RhbnQgcmVwcmVzZW50IGRpZmZlcmVudCB2YWx1ZXMuIElmIHRoaXMgcGFyYW1ldGVyIGV2YWx1YXRlcyB0byBGQUxTRQogKiB0aGUgY29uc3RhbnRzIHdpbGwgYmUgZGVjbGFyZWQgYXMgY2FzZS1pbnNlbnNpdGl2ZSBzeW1ib2xzLgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGFwY19sb2FkX2NvbnN0YW50cygka2V5LCAkY2FzZV9zZW5zaXRpdmUgPSB0cnVlKSB7fQoKLyoqCiAqIENoZWNrcyBpZiBBUEMga2V5IGV4aXN0cwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmFwYy1leGlzdHMucGhwCiAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJGtleXMgQSBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MsIHRoYXQgY29udGFpbiBrZXlzLgogKiBAcmV0dXJuIGJvb2x8c3RyaW5nW10gUmV0dXJucyBUUlVFIGlmIHRoZSBrZXkgZXhpc3RzLCBvdGhlcndpc2UgRkFMU0UKICogT3IgaWYgYW4gYXJyYXkgd2FzIHBhc3NlZCB0byBrZXlzLCB0aGVuIGFuIGFycmF5IGlzIHJldHVybmVkIHRoYXQKICogY29udGFpbnMgYWxsIGV4aXN0aW5nIGtleXMsIG9yIGFuIGVtcHR5IGFycmF5IGlmIG5vbmUgZXhpc3QuCiAqLwpmdW5jdGlvbiBhcGNfZXhpc3RzKCRrZXlzKSB7fQoKLyoqCiAqIERlbGV0ZXMgdGhlIGdpdmVuIGZpbGVzIGZyb20gdGhlIG9wY29kZSBjYWNoZQogKgogKiBBY2NlcHRzIGEgc3RyaW5nLCBhcnJheSBvZiBzdHJpbmdzLCBvciBBUENJdGVyYXRvciBvYmplY3QuCiAqIFJldHVybnMgVHJ1ZS9GYWxzZSwgb3IgZm9yIGFuIEFycmF5IGFuIEFycmF5IG9mIGZhaWxlZCBmaWxlcy4KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGMtZGVsZXRlLWZpbGUucGhwCiAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW118QVBDSXRlcmF0b3IgJGtleXMKICogQHJldHVybiBib29sfHN0cmluZ1tdCiAqLwpmdW5jdGlvbiBhcGNfZGVsZXRlX2ZpbGUoJGtleXMpIHt9CgovKioKICogSW5jcmVhc2UgYSBzdG9yZWQgbnVtYmVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBjLWluYy5waHAKICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIGJlaW5nIGluY3JlYXNlZC4KICogQHBhcmFtIGludCAkc3RlcCBUaGUgc3RlcCwgb3IgdmFsdWUgdG8gaW5jcmVhc2UuCiAqIEBwYXJhbSBib29sfG51bGwgJiRzdWNjZXNzIE9wdGlvbmFsbHkgcGFzcyB0aGUgc3VjY2VzcyBvciBmYWlsIGJvb2xlYW4gdmFsdWUgdG8gdGhpcyByZWZlcmVuY2VkIHZhcmlhYmxlLgogKiBAcmV0dXJuIGludHxmYWxzZSBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIGtleSdzIHZhbHVlIG9uIHN1Y2Nlc3MsIG9yIEZBTFNFIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBhcGNfaW5jKCRrZXksICRzdGVwID0gMSwgJiRzdWNjZXNzID0gbnVsbCkge30KCi8qKgogKiBEZWNyZWFzZSBhIHN0b3JlZCBudW1iZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGMtZGVjLnBocAogKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgYmVpbmcgZGVjcmVhc2VkLgogKiBAcGFyYW0gaW50ICRzdGVwIFRoZSBzdGVwLCBvciB2YWx1ZSB0byBkZWNyZWFzZS4KICogQHBhcmFtIGJvb2x8bnVsbCAmJHN1Y2Nlc3MgT3B0aW9uYWxseSBwYXNzIHRoZSBzdWNjZXNzIG9yIGZhaWwgYm9vbGVhbiB2YWx1ZSB0byB0aGlzIHJlZmVyZW5jZWQgdmFyaWFibGUuCiAqIEByZXR1cm4gaW50fGZhbHNlIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2Yga2V5J3MgdmFsdWUgb24gc3VjY2Vzcywgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGFwY19kZWMoJGtleSwgJHN0ZXAgPSAxLCAmJHN1Y2Nlc3MgPSBudWxsKSB7fQoKLyoqCiAqIFVwZGF0ZXMgYW4gb2xkIHZhbHVlIHdpdGggYSBuZXcgdmFsdWUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGMtY2FzLnBocAogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHBhcmFtIGludCAkb2xkCiAqIEBwYXJhbSBpbnQgJG5ldwogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGFwY19jYXMoJGtleSwgJG9sZCwgJG5ldykge30KCi8qKgogKiBSZXR1cm5zIGEgYmluYXJ5IGR1bXAgb2YgdGhlIGdpdmVuIGZpbGVzIGFuZCB1c2VyIHZhcmlhYmxlcyBmcm9tIHRoZSBBUEMgY2FjaGUKICoKICogQSBOVUxMIGZvciBmaWxlcyBvciB1c2VyX3ZhcnMgc2lnbmFscyBhIGR1bXAgb2YgZXZlcnkgZW50cnksIHdoaWxlIGFycmF5KCkgd2lsbCBkdW1wIG5vdGhpbmcuCiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBjLWJpbi1kdW1wLnBocAogKiBAcGFyYW0gc3RyaW5nW118bnVsbCAkZmlsZXMgVGhlIGZpbGVzLiBQYXNzaW5nIGluIE5VTEwgc2lnbmFscyBhIGR1bXAgb2YgZXZlcnkgZW50cnksIHdoaWxlIHBhc3NpbmcgaW4gYXJyYXkoKSB3aWxsIGR1bXAgbm90aGluZy4KICogQHBhcmFtIHN0cmluZ1tdfG51bGwgJHVzZXJfdmFycyBUaGUgdXNlciB2YXJzLiBQYXNzaW5nIGluIE5VTEwgc2lnbmFscyBhIGR1bXAgb2YgZXZlcnkgZW50cnksIHdoaWxlIHBhc3NpbmcgaW4gYXJyYXkoKSB3aWxsIGR1bXAgbm90aGluZy4KICogQHJldHVybiBzdHJpbmd8ZmFsc2V8bnVsbCBSZXR1cm5zIGEgYmluYXJ5IGR1bXAgb2YgdGhlIGdpdmVuIGZpbGVzIGFuZCB1c2VyIHZhcmlhYmxlcyBmcm9tIHRoZSBBUEMgY2FjaGUsIEZBTFNFIGlmIEFQQyBpcyBub3QgZW5hYmxlZCwgb3IgTlVMTCBpZiBhbiB1bmtub3duIGVycm9yIGlzIGVuY291bnRlcmVkLgogKi8KZnVuY3Rpb24gYXBjX2Jpbl9kdW1wKCRmaWxlcyA9IG51bGwsICR1c2VyX3ZhcnMgPSBudWxsKSB7fQoKLyoqCiAqIE91dHB1dCBhIGJpbmFyeSBkdW1wIG9mIHRoZSBnaXZlbiBmaWxlcyBhbmQgdXNlciB2YXJpYWJsZXMgZnJvbSB0aGUgQVBDIGNhY2hlIHRvIHRoZSBuYW1lZCBmaWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBjLWJpbi1kdW1wZmlsZS5waHAKICogQHBhcmFtIHN0cmluZ1tdfG51bGwgJGZpbGVzIFRoZSBmaWxlIG5hbWVzIGJlaW5nIGR1bXBlZC4KICogQHBhcmFtIHN0cmluZ1tdfG51bGwgJHVzZXJfdmFycyBUaGUgdXNlciB2YXJpYWJsZXMgYmVpbmcgZHVtcGVkLgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZW5hbWUgd2hlcmUgdGhlIGR1bXAgaXMgYmVpbmcgc2F2ZWQuCiAqIEBwYXJhbSBpbnQgJGZsYWdzIEZsYWdzIHBhc3NlZCB0byB0aGUgZmlsZW5hbWUgc3RyZWFtLiBTZWUgdGhlIGZpbGVfcHV0X2NvbnRlbnRzKCkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0IFRoZSBjb250ZXh0IHBhc3NlZCB0byB0aGUgZmlsZW5hbWUgc3RyZWFtLiBTZWUgdGhlIGZpbGVfcHV0X2NvbnRlbnRzKCkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoZSBmaWxlLCBvdGhlcndpc2UgRkFMU0UgaWYgQVBDCiAqIGlzIG5vdCBlbmFibGVkLCBmaWxlbmFtZSBpcyBhbiBpbnZhbGlkIGZpbGUgbmFtZSwgZmlsZW5hbWUgY2FuJ3QgYmUgb3BlbmVkLAogKiB0aGUgZmlsZSBkdW1wIGNhbid0IGJlIGNvbXBsZXRlZCAoZS5nLiwgdGhlIGhhcmQgZHJpdmUgaXMgb3V0IG9mIGRpc2sgc3BhY2UpLAogKiBvciBhbiB1bmtub3duIGVycm9yIHdhcyBlbmNvdW50ZXJlZC4KICovCmZ1bmN0aW9uIGFwY19iaW5fZHVtcGZpbGUoJGZpbGVzLCAkdXNlcl92YXJzLCAkZmlsZW5hbWUsICRmbGFncyA9IDAsICRjb250ZXh0ID0gbnVsbCkge30KCi8qKgogKiBMb2FkIHRoZSBnaXZlbiBiaW5hcnkgZHVtcCBpbnRvIHRoZSBBUEMgZmlsZS91c2VyIGNhY2hlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBjLWJpbi1sb2FkLnBocAogKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBiaW5hcnkgZHVtcCBiZWluZyBsb2FkZWQsIGxpa2VseSBmcm9tIGFwY19iaW5fZHVtcCgpLgogKiBAcGFyYW0gaW50ICRmbGFncyBFaXRoZXIgQVBDX0JJTl9WRVJJRllfQ1JDMzIsIEFQQ19CSU5fVkVSSUZZX01ENSwgb3IgYm90aC4KICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBpZiB0aGUgYmluYXJ5IGR1bXAgZGF0YSB3YXMgbG9hZGVkIHdpdGggc3VjY2Vzcywgb3RoZXJ3aXNlIEZBTFNFIGlzIHJldHVybmVkLgogKiBGQUxTRSBpcyByZXR1cm5lZCBpZiBBUEMgaXMgbm90IGVuYWJsZWQsIG9yIGlmIHRoZSBkYXRhIGlzIG5vdCBhIHZhbGlkIEFQQyBiaW5hcnkgZHVtcCAoZS5nLiwgdW5leHBlY3RlZCBzaXplKS4KICovCmZ1bmN0aW9uIGFwY19iaW5fbG9hZCgkZGF0YSwgJGZsYWdzID0gMCkge30KCi8qKgogKiBMb2FkIHRoZSBnaXZlbiBiaW5hcnkgZHVtcCBmcm9tIHRoZSBuYW1lZCBmaWxlIGludG8gdGhlIEFQQyBmaWxlL3VzZXIgY2FjaGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGMtYmluLWxvYWRmaWxlLnBocAogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgZmlsZSBuYW1lIGNvbnRhaW5pbmcgdGhlIGR1bXAsIGxpa2VseSBmcm9tIGFwY19iaW5fZHVtcGZpbGUoKS4KICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0IFRoZSBmaWxlcyBjb250ZXh0LgogKiBAcGFyYW0gaW50ICRmbGFncyBFaXRoZXIgQVBDX0JJTl9WRVJJRllfQ1JDMzIsIEFQQ19CSU5fVkVSSUZZX01ENSwgb3IgYm90aC4KICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLCBvdGhlcndpc2UgRkFMU0UgUmVhc29ucyBpdCBtYXkgcmV0dXJuIEZBTFNFIGluY2x1ZGUgQVBDCiAqIGlzIG5vdCBlbmFibGVkLCBmaWxlbmFtZSBpcyBhbiBpbnZhbGlkIGZpbGUgbmFtZSBvciBlbXB0eSwgZmlsZW5hbWUgY2FuJ3QgYmUgb3BlbmVkLAogKiB0aGUgZmlsZSBkdW1wIGNhbid0IGJlIGNvbXBsZXRlZCwgb3IgaWYgdGhlIGRhdGEgaXMgbm90IGEgdmFsaWQgQVBDIGJpbmFyeSBkdW1wIChlLmcuLCB1bmV4cGVjdGVkIHNpemUpLgogKi8KZnVuY3Rpb24gYXBjX2Jpbl9sb2FkZmlsZSgkZmlsZW5hbWUsICRjb250ZXh0ID0gbnVsbCwgJGZsYWdzID0gMCkge30KCi8qKgogKiBUaGUgQVBDSXRlcmF0b3IgY2xhc3MKICoKICogVGhlIEFQQ0l0ZXJhdG9yIGNsYXNzIG1ha2VzIGl0IGVhc2llciB0byBpdGVyYXRlIG92ZXIgbGFyZ2UgQVBDIGNhY2hlcy4KICogVGhpcyBpcyBoZWxwZnVsIGFzIGl0IGFsbG93cyBpdGVyYXRpbmcgb3ZlciBsYXJnZSBjYWNoZXMgaW4gc3RlcHMsIHdoaWxlIGdyYWJiaW5nIGEgZGVmaW5lZCBudW1iZXIKICogb2YgZW50cmllcyBwZXIgbG9jayBpbnN0YW5jZSwgc28gaXQgZnJlZXMgdGhlIGNhY2hlIGxvY2tzIGZvciBvdGhlciBhY3Rpdml0aWVzIHJhdGhlciB0aGFuIGhvbGQgdXAKICogdGhlIGVudGlyZSBjYWNoZSB0byBncmFiIDEwMCAodGhlIGRlZmF1bHQpIGVudHJpZXMuIEFsc28sIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBpcyBtb3JlCiAqIGVmZmljaWVudCBhcyBpdCdzIGJlZW4gbW92ZWQgdG8gdGhlIEMgbGV2ZWwuCiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuYXBjaXRlcmF0b3IucGhwCiAqLwpjbGFzcyBBUENJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yCnsKICAgIC8qKgogICAgICogQ29uc3RydWN0cyBhbiBBUENJdGVyYXRvciBpdGVyYXRvciBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjaXRlcmF0b3IuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkY2FjaGUgVGhlIGNhY2hlIHR5cGUsIHdoaWNoIHdpbGwgYmUgJ3VzZXInIG9yICdmaWxlJy4KICAgICAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW118bnVsbCAkc2VhcmNoIEEgUENSRSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIGFnYWluc3QgQVBDIGtleSBuYW1lcywKICAgICAqIGVpdGhlciBhcyBhIHN0cmluZyBmb3IgYSBzaW5nbGUgcmVndWxhciBleHByZXNzaW9uLCBvciBhcyBhbiBhcnJheSBvZiByZWd1bGFyIGV4cHJlc3Npb25zLgogICAgICogT3IsIG9wdGlvbmFsbHkgcGFzcyBpbiBOVUxMIHRvIHNraXAgdGhlIHNlYXJjaC4KICAgICAqIEBwYXJhbSBpbnQgJGZvcm1hdCBUaGUgZGVzaXJlZCBmb3JtYXQsIGFzIGNvbmZpZ3VyZWQgd2l0aCBvbmUgb3JlIG1vcmUgb2YgdGhlIEFQQ19JVEVSXyogY29uc3RhbnRzLgogICAgICogQHBhcmFtIGludCAkY2h1bmtfc2l6ZSBUaGUgY2h1bmsgc2l6ZS4gTXVzdCBiZSBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAuCiAgICAgKiBAcGFyYW0gaW50ICRsaXN0IFRoZSB0eXBlIHRvIGxpc3QuIEVpdGhlciBwYXNzIGluIEFQQ19MSVNUX0FDVElWRSAgb3IgQVBDX0xJU1RfSU5BQ1RJVkUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY2FjaGUsICRzZWFyY2ggPSBudWxsLCAkZm9ybWF0ID0gQVBDX0lURVJfQUxMLCAkY2h1bmtfc2l6ZSA9IDEwMCwgJGxpc3QgPSBBUENfTElTVF9BQ1RJVkUpIHt9CgogICAgLyoqCiAgICAgKiBSZXdpbmRzIGJhY2sgdGhlIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwY2l0ZXJhdG9yLnJld2luZC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgaXRlcmF0b3IgcG9zaXRpb24gaXMgdmFsaWQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjaXRlcmF0b3IudmFsaWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIGlmIHRoZSBjdXJyZW50IGl0ZXJhdG9yIHBvc2l0aW9uIGlzIHZhbGlkLCBvdGhlcndpc2UgRkFMU0UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGl0ZW0gZnJvbSB0aGUgQVBDSXRlcmF0b3Igc3RhY2sKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjaXRlcmF0b3IuY3VycmVudC5waHAKICAgICAqIEByZXR1cm4gbWl4ZWR8ZmFsc2UgUmV0dXJucyB0aGUgY3VycmVudCBpdGVtIG9uIHN1Y2Nlc3MsIG9yIEZBTFNFIGlmIG5vIG1vcmUgaXRlbXMgb3IgZXhpc3QsIG9yIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGN1cnJlbnQgaXRlcmF0b3Iga2V5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwY2l0ZXJhdG9yLmtleS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGludHxmYWxzZSBSZXR1cm5zIHRoZSBrZXkgb24gc3VjY2Vzcywgb3IgRkFMU0UgdXBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkge30KCiAgICAvKioKICAgICAqIE1vdmVzIHRoZSBpdGVyYXRvciBwb2ludGVyIHRvIHRoZSBuZXh0IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjaXRlcmF0b3IubmV4dC5waHAKICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSB0b3RhbCBudW1iZXIgb2YgY2FjaGUgaGl0cwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGNpdGVyYXRvci5nZXR0b3RhbGhpdHMucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIGhpdHMgb24gc3VjY2Vzcywgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRvdGFsSGl0cygpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSB0b3RhbCBjYWNoZSBzaXplCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwY2l0ZXJhdG9yLmdldHRvdGFsc2l6ZS5waHAKICAgICAqIEByZXR1cm4gaW50fGJvb2wgVGhlIHRvdGFsIGNhY2hlIHNpemUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUb3RhbFNpemUoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSB0b3RhbCBjb3VudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGNpdGVyYXRvci5nZXR0b3RhbGNvdW50LnBocAogICAgICogQHJldHVybiBpbnR8Ym9vbCBUaGUgdG90YWwgY291bnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUb3RhbENvdW50KCkge30KfQoKLyoqCiAqIFN0dWJzIGZvciBBUEN1IDUuMC4wCiAqLwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjdS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0FQQ19MSVNUX0FDVElWRScsIDEpOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGN1LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQVBDX0xJU1RfREVMRVRFRCcsIDIpOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGN1LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQVBDX0lURVJfVFlQRScsIDEpOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGN1LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQVBDX0lURVJfS0VZJywgMik7Ci8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwY3UuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdBUENfSVRFUl9GSUxFTkFNRScsIDQpOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGN1LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQVBDX0lURVJfREVWSUNFJywgOCk7Ci8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwY3UuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdBUENfSVRFUl9JTk9ERScsIDE2KTsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjdS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0FQQ19JVEVSX1ZBTFVFJywgMzIpOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGN1LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQVBDX0lURVJfTUQ1JywgNjQpOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGN1LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQVBDX0lURVJfTlVNX0hJVFMnLCAxMjgpOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGN1LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQVBDX0lURVJfTVRJTUUnLCAyNTYpOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGN1LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQVBDX0lURVJfQ1RJTUUnLCA1MTIpOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGN1LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQVBDX0lURVJfRFRJTUUnLCAxMDI0KTsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjdS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0FQQ19JVEVSX0FUSU1FJywgMjA0OCk7Ci8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwY3UuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdBUENfSVRFUl9SRUZDT1VOVCcsIDQwOTYpOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGN1LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQVBDX0lURVJfTUVNX1NJWkUnLCA4MTkyKTsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjdS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0FQQ19JVEVSX1RUTCcsIDE2Mzg0KTsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjdS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0FQQ19JVEVSX05PTkUnLCAwKTsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjdS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0FQQ19JVEVSX0FMTCcsIC0xKTsKCi8qKgogKiBDbGVhcnMgdGhlIEFQQ3UgY2FjaGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGN1LWNsZWFyLWNhY2hlLnBocAogKgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIGFsd2F5cy4KICovCmZ1bmN0aW9uIGFwY3VfY2xlYXJfY2FjaGUoKSB7fQoKLyoqCiAqIFJldHJpZXZlcyBBUEN1IFNoYXJlZCBNZW1vcnkgQWxsb2NhdGlvbiBpbmZvcm1hdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmFwY3Utc21hLWluZm8ucGhwCiAqIEBwYXJhbSBib29sICRsaW1pdGVkIFdoZW4gc2V0IHRvIEZBTFNFIChkZWZhdWx0KSBhcGN1X3NtYV9pbmZvKCkgd2lsbAogKiByZXR1cm4gYSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHNlZ21lbnQuCiAqCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgQXJyYXkgb2YgU2hhcmVkIE1lbW9yeSBBbGxvY2F0aW9uIGRhdGE7IEZBTFNFIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBhcGN1X3NtYV9pbmZvKCRsaW1pdGVkID0gZmFsc2UpIHt9CgovKioKICogQ2FjaGUgYSB2YXJpYWJsZSBpbiB0aGUgZGF0YSBzdG9yZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmFwY3Utc3RvcmUucGhwCiAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJGtleSBTdHJpbmc6IFN0b3JlIHRoZSB2YXJpYWJsZSB1c2luZyB0aGlzIG5hbWUuIEtleXMgYXJlIGNhY2hlLXVuaXF1ZSwKICogc28gc3RvcmluZyBhIHNlY29uZCB2YWx1ZSB3aXRoIHRoZSBzYW1lIGtleSB3aWxsIG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwgdmFsdWUuCiAqIEFycmF5OiBOYW1lcyBpbiBrZXksIHZhcmlhYmxlcyBpbiB2YWx1ZS4KICogQHBhcmFtIG1peGVkICR2YXIgW29wdGlvbmFsXSBUaGUgdmFyaWFibGUgdG8gc3RvcmUKICogQHBhcmFtIGludCAkdHRsIFtvcHRpb25hbF0gIFRpbWUgVG8gTGl2ZTsgc3RvcmUgdmFyIGluIHRoZSBjYWNoZSBmb3IgdHRsIHNlY29uZHMuIEFmdGVyIHRoZSB0dGwgaGFzIHBhc3NlZCwKICogdGhlIHN0b3JlZCB2YXJpYWJsZSB3aWxsIGJlIGV4cHVuZ2VkIGZyb20gdGhlIGNhY2hlIChvbiB0aGUgbmV4dCByZXF1ZXN0KS4gSWYgbm8gdHRsIGlzIHN1cHBsaWVkCiAqIChvciBpZiB0aGUgdHRsIGlzIDApLCB0aGUgdmFsdWUgd2lsbCBwZXJzaXN0IHVudGlsIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgbWFudWFsbHksCiAqIG9yIG90aGVyd2lzZSBmYWlscyB0byBleGlzdCBpbiB0aGUgY2FjaGUgKGNsZWFyLCByZXN0YXJ0LCBldGMuKS4KICogQHJldHVybiBib29sfGFycmF5IFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUgfCBhcnJheSB3aXRoIGVycm9yIGtleXMuCiAqLwpmdW5jdGlvbiBhcGN1X3N0b3JlKCRrZXksICR2YXIsICR0dGwgPSAwKSB7fQoKLyoqCiAqIEZldGNoIGEgc3RvcmVkIHZhcmlhYmxlIGZyb20gdGhlIGNhY2hlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBjdS1mZXRjaC5waHAKICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAka2V5IFRoZSBrZXkgdXNlZCB0byBzdG9yZSB0aGUgdmFsdWUgKHdpdGggYXBjdV9zdG9yZSgpKS4KICogSWYgYW4gYXJyYXkgaXMgcGFzc2VkIHRoZW4gZWFjaCBlbGVtZW50IGlzIGZldGNoZWQgYW5kIHJldHVybmVkLgogKiBAcGFyYW0gYm9vbHxudWxsICYkc3VjY2VzcyBTZXQgdG8gVFJVRSBpbiBzdWNjZXNzIGFuZCBGQUxTRSBpbiBmYWlsdXJlLgogKiBAcmV0dXJuIG1peGVkfGZhbHNlIFRoZSBzdG9yZWQgdmFyaWFibGUgb3IgYXJyYXkgb2YgdmFyaWFibGVzIG9uIHN1Y2Nlc3M7IEZBTFNFIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBhcGN1X2ZldGNoKCRrZXksICYkc3VjY2VzcyA9IG51bGwpIHt9CgovKioKICogUmVtb3ZlcyBhIHN0b3JlZCB2YXJpYWJsZSBmcm9tIHRoZSBjYWNoZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmFwY3UtZGVsZXRlLnBocAogKiBAcGFyYW0gc3RyaW5nfHN0cmluZ1tdfEFQQ1VJdGVyYXRvciAka2V5IFRoZSBrZXkgdXNlZCB0byBzdG9yZSB0aGUgdmFsdWUgKHdpdGggYXBjdV9zdG9yZSgpKS4KICogQHJldHVybiBib29sfHN0cmluZ1tdIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUuIEZvciBhcnJheSBvZiBrZXlzIHJldHVybnMgbGlzdCBvZiBmYWlsZWQga2V5cy4KICovCmZ1bmN0aW9uIGFwY3VfZGVsZXRlKCRrZXkpIHt9CgovKioKICogQ2FjaGVzIGEgdmFyaWFibGUgaW4gdGhlIGRhdGEgc3RvcmUsIG9ubHkgaWYgaXQncyBub3QgYWxyZWFkeSBzdG9yZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGN1LWFkZC5waHAKICogQHBhcmFtIHN0cmluZ3xhcnJheSAka2V5IFN0b3JlIHRoZSB2YXJpYWJsZSB1c2luZyB0aGlzIG5hbWUuIEtleXMgYXJlIGNhY2hlLXVuaXF1ZSwKICogc28gYXR0ZW1wdGluZyB0byB1c2UgYXBjdV9hZGQoKSB0byBzdG9yZSBkYXRhIHdpdGggYSBrZXkgdGhhdCBhbHJlYWR5IGV4aXN0cyB3aWxsIG5vdAogKiBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIGRhdGEsIGFuZCB3aWxsIGluc3RlYWQgcmV0dXJuIEZBTFNFLiAoVGhpcyBpcyB0aGUgb25seSBkaWZmZXJlbmNlCiAqIGJldHdlZW4gYXBjdV9hZGQoKSBhbmQgYXBjdV9zdG9yZSgpLikKICogQXJyYXk6IE5hbWVzIGluIGtleSwgdmFyaWFibGVzIGluIHZhbHVlLgogKiBAcGFyYW0gbWl4ZWQgJHZhciBUaGUgdmFyaWFibGUgdG8gc3RvcmUKICogQHBhcmFtIGludCAkdHRsIFRpbWUgVG8gTGl2ZTsgc3RvcmUgdmFyIGluIHRoZSBjYWNoZSBmb3IgdHRsIHNlY29uZHMuIEFmdGVyIHRoZSB0dGwgaGFzIHBhc3NlZCwKICogdGhlIHN0b3JlZCB2YXJpYWJsZSB3aWxsIGJlIGV4cHVuZ2VkIGZyb20gdGhlIGNhY2hlIChvbiB0aGUgbmV4dCByZXF1ZXN0KS4gSWYgbm8gdHRsIGlzIHN1cHBsaWVkCiAqIChvciBpZiB0aGUgdHRsIGlzIDApLCB0aGUgdmFsdWUgd2lsbCBwZXJzaXN0IHVudGlsIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgbWFudWFsbHksCiAqIG9yIG90aGVyd2lzZSBmYWlscyB0byBleGlzdCBpbiB0aGUgY2FjaGUgKGNsZWFyLCByZXN0YXJ0LCBldGMuKS4KICogQHJldHVybiBib29sfGFycmF5IFJldHVybnMgVFJVRSBpZiBzb21ldGhpbmcgaGFzIGVmZmVjdGl2ZWx5IGJlZW4gYWRkZWQgaW50byB0aGUgY2FjaGUsIEZBTFNFIG90aGVyd2lzZS4KICogU2Vjb25kIHN5bnRheCByZXR1cm5zIGFycmF5IHdpdGggZXJyb3Iga2V5cy4KICovCmZ1bmN0aW9uIGFwY3VfYWRkKCRrZXksICR2YXIsICR0dGwgPSAwKSB7fQoKLyoqCiAqIENoZWNrcyBpZiBBUEN1IGtleSBleGlzdHMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGN1LWV4aXN0cy5waHAKICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAka2V5cyBBIHN0cmluZywgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdGhhdCBjb250YWluIGtleXMuCiAqIEByZXR1cm4gYm9vbHxzdHJpbmdbXSBSZXR1cm5zIFRSVUUgaWYgdGhlIGtleSBleGlzdHMsIG90aGVyd2lzZSBGQUxTRQogKiBPciBpZiBhbiBhcnJheSB3YXMgcGFzc2VkIHRvIGtleXMsIHRoZW4gYW4gYXJyYXkgaXMgcmV0dXJuZWQgdGhhdAogKiBjb250YWlucyBhbGwgZXhpc3Rpbmcga2V5cywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgbm9uZSBleGlzdC4KICovCmZ1bmN0aW9uIGFwY3VfZXhpc3RzKCRrZXlzKSB7fQoKLyoqCiAqIEluY3JlYXNlIGEgc3RvcmVkIG51bWJlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmFwY3UtaW5jLnBocAogKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgYmVpbmcgaW5jcmVhc2VkLgogKiBAcGFyYW0gaW50ICRzdGVwIFRoZSBzdGVwLCBvciB2YWx1ZSB0byBpbmNyZWFzZS4KICogQHBhcmFtIGludCAkdHRsIFRpbWUgVG8gTGl2ZTsgc3RvcmUgdmFyIGluIHRoZSBjYWNoZSBmb3IgdHRsIHNlY29uZHMuIEFmdGVyIHRoZSB0dGwgaGFzIHBhc3NlZCwKICogdGhlIHN0b3JlZCB2YXJpYWJsZSB3aWxsIGJlIGV4cHVuZ2VkIGZyb20gdGhlIGNhY2hlIChvbiB0aGUgbmV4dCByZXF1ZXN0KS4gSWYgbm8gdHRsIGlzIHN1cHBsaWVkCiAqIChvciBpZiB0aGUgdHRsIGlzIDApLCB0aGUgdmFsdWUgd2lsbCBwZXJzaXN0IHVudGlsIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgbWFudWFsbHksCiAqIG9yIG90aGVyd2lzZSBmYWlscyB0byBleGlzdCBpbiB0aGUgY2FjaGUgKGNsZWFyLCByZXN0YXJ0LCBldGMuKS4KICogQHBhcmFtIGJvb2x8bnVsbCAmJHN1Y2Nlc3MgT3B0aW9uYWxseSBwYXNzIHRoZSBzdWNjZXNzIG9yIGZhaWwgYm9vbGVhbiB2YWx1ZSB0byB0aGlzIHJlZmVyZW5jZWQgdmFyaWFibGUuCiAqIEByZXR1cm4gaW50fGZhbHNlIFJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2Yga2V5J3MgdmFsdWUgb24gc3VjY2Vzcywgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGFwY3VfaW5jKCRrZXksICRzdGVwID0gMSwgJiRzdWNjZXNzID0gbnVsbCwgJHR0bCA9IDApIHt9CgovKioKICogRGVjcmVhc2UgYSBzdG9yZWQgbnVtYmVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBjdS1kZWMucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSBiZWluZyBkZWNyZWFzZWQuCiAqIEBwYXJhbSBpbnQgJHN0ZXAgVGhlIHN0ZXAsIG9yIHZhbHVlIHRvIGRlY3JlYXNlLgogKiBAcGFyYW0gaW50ICR0dGwgVGltZSBUbyBMaXZlOyBzdG9yZSB2YXIgaW4gdGhlIGNhY2hlIGZvciB0dGwgc2Vjb25kcy4gQWZ0ZXIgdGhlIHR0bCBoYXMgcGFzc2VkLAogKiB0aGUgc3RvcmVkIHZhcmlhYmxlIHdpbGwgYmUgZXhwdW5nZWQgZnJvbSB0aGUgY2FjaGUgKG9uIHRoZSBuZXh0IHJlcXVlc3QpLiBJZiBubyB0dGwgaXMgc3VwcGxpZWQKICogKG9yIGlmIHRoZSB0dGwgaXMgMCksIHRoZSB2YWx1ZSB3aWxsIHBlcnNpc3QgdW50aWwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSBtYW51YWxseSwKICogb3Igb3RoZXJ3aXNlIGZhaWxzIHRvIGV4aXN0IGluIHRoZSBjYWNoZSAoY2xlYXIsIHJlc3RhcnQsIGV0Yy4pLgogKiBAcGFyYW0gYm9vbHxudWxsICYkc3VjY2VzcyBPcHRpb25hbGx5IHBhc3MgdGhlIHN1Y2Nlc3Mgb3IgZmFpbCBib29sZWFuIHZhbHVlIHRvIHRoaXMgcmVmZXJlbmNlZCB2YXJpYWJsZS4KICogQHJldHVybiBpbnR8ZmFsc2UgUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiBrZXkncyB2YWx1ZSBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gYXBjdV9kZWMoJGtleSwgJHN0ZXAgPSAxLCAmJHN1Y2Nlc3MgPSBudWxsLCAkdHRsID0gMCkge30KCi8qKgogKiBVcGRhdGVzIGFuIG9sZCB2YWx1ZSB3aXRoIGEgbmV3IHZhbHVlCiAqCiAqIGFwY3VfY2FzKCkgdXBkYXRlcyBhbiBhbHJlYWR5IGV4aXN0aW5nIGludGVnZXIgdmFsdWUgaWYgdGhlIG9sZCBwYXJhbWV0ZXIgbWF0Y2hlcyB0aGUgY3VycmVudGx5IHN0b3JlZCB2YWx1ZQogKiB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgbmV3IHBhcmFtZXRlci4KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGN1LWNhcy5waHAKICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIGJlaW5nIHVwZGF0ZWQuCiAqIEBwYXJhbSBpbnQgJG9sZCBUaGUgb2xkIHZhbHVlICh0aGUgdmFsdWUgY3VycmVudGx5IHN0b3JlZCkuCiAqIEBwYXJhbSBpbnQgJG5ldyBUaGUgbmV3IHZhbHVlIHRvIHVwZGF0ZSB0by4KICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBhcGN1X2Nhcygka2V5LCAkb2xkLCAkbmV3KSB7fQoKLyoqCiAqIEF0b21pY2FsbHkgZmV0Y2ggb3IgZ2VuZXJhdGUgYSBjYWNoZSBlbnRyeQogKgogKiA8cD5BdG9taWNhbGx5IGF0dGVtcHRzIHRvIGZpbmQga2V5IGluIHRoZSBjYWNoZSwgaWYgaXQgY2Fubm90IGJlIGZvdW5kIGdlbmVyYXRvciBpcyBjYWxsZWQsCiAqIHBhc3Npbmcga2V5IGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsIGlzIHRoZW4gY2FjaGVkIHdpdGggdGhlIG9wdGlvbmFsbHkKICogc3BlY2lmaWVkIHR0bCwgYW5kIHJldHVybmVkLgogKiA8L3A+CiAqCiAqIDxwPk5vdGU6IFdoZW4gY29udHJvbCBlbnRlcnMgPGk+YXBjdV9lbnRyeSgpPC9pPiB0aGUgbG9jayBmb3IgdGhlIGNhY2hlIGlzIGFjcXVpcmVkIGV4Y2x1c2l2ZWx5LCBpdCBpcyByZWxlYXNlZCB3aGVuCiAqIGNvbnRyb2wgbGVhdmVzIGFwY3VfZW50cnkoKTogSW4gZWZmZWN0LCB0aGlzIHR1cm5zIHRoZSBib2R5IG9mIGdlbmVyYXRvciBpbnRvIGEgY3JpdGljYWwgc2VjdGlvbiwKICogZGlzYWxsb3dpbmcgdHdvIHByb2Nlc3NlcyBmcm9tIGV4ZWN1dGluZyB0aGUgc2FtZSBjb2RlIHBhdGhzIGNvbmN1cnJlbnRseS4KICogSW4gYWRkaXRpb24sIGl0IHByb2hpYml0cyB0aGUgY29uY3VycmVudCBleGVjdXRpb24gb2YgYW55IG90aGVyIEFQQ3UgZnVuY3Rpb25zLAogKiBzaW5jZSB0aGV5IHdpbGwgYWNxdWlyZSB0aGUgc2FtZSBsb2NrLgogKiA8L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBjdS1lbnRyeS5waHAKICoKICogQHBhcmFtIHN0cmluZyAka2V5IElkZW50aXR5IG9mIGNhY2hlIGVudHJ5CiAqIEBwYXJhbSBjYWxsYWJsZSAkZ2VuZXJhdG9yIEEgY2FsbGFibGUgdGhhdCBhY2NlcHRzIGtleSBhcyB0aGUgb25seSBhcmd1bWVudCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgdG8gY2FjaGUuCiAqIDxwPldhcm5pbmcKICogVGhlIG9ubHkgQVBDdSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBjYWxsZWQgc2FmZWx5IGJ5IGdlbmVyYXRvciBpcyBhcGN1X2VudHJ5KCkuPC9wPgogKiBAcGFyYW0gaW50ICR0dGwgW29wdGlvbmFsXSBUaW1lIFRvIExpdmU7IHN0b3JlIHZhciBpbiB0aGUgY2FjaGUgZm9yIHR0bCBzZWNvbmRzLgogKiBBZnRlciB0aGUgdHRsIGhhcyBwYXNzZWQsIHRoZSBzdG9yZWQgdmFyaWFibGUgd2lsbCBiZSBleHB1bmdlZCBmcm9tIHRoZSBjYWNoZSAob24gdGhlIG5leHQgcmVxdWVzdCkuCiAqIElmIG5vIHR0bCBpcyBzdXBwbGllZCAob3IgaWYgdGhlIHR0bCBpcyAwKSwgdGhlIHZhbHVlIHdpbGwgcGVyc2lzdCB1bnRpbCBpdCBpcyByZW1vdmVkIGZyb20gdGhlIGNhY2hlIG1hbnVhbGx5LAogKiBvciBvdGhlcndpc2UgZmFpbHMgdG8gZXhpc3QgaW4gdGhlIGNhY2hlIChjbGVhciwgcmVzdGFydCwgZXRjLikuCiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyB0aGUgY2FjaGVkIHZhbHVlCiAqIEBzaW5jZSBBUEN1IDUuMS4wCiAqLwpmdW5jdGlvbiBhcGN1X2VudHJ5KCRrZXksIGNhbGxhYmxlICRnZW5lcmF0b3IsICR0dGwgPSAwKSB7fQoKLyoqCiAqIFJldHJpZXZlcyBjYWNoZWQgaW5mb3JtYXRpb24gZnJvbSBBUEN1J3MgZGF0YSBzdG9yZQogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmFwY3UtY2FjaGUtaW5mby5waHAKICoKICogQHBhcmFtIGJvb2wgJGxpbWl0ZWQgSWYgbGltaXRlZCBpcyBUUlVFLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgZXhjbHVkZSB0aGUgaW5kaXZpZHVhbCBsaXN0IG9mIGNhY2hlIGVudHJpZXMuCiAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdHJ5aW5nIHRvIG9wdGltaXplIGNhbGxzIGZvciBzdGF0aXN0aWNzIGdhdGhlcmluZy4KICogQHJldHVybiBhcnJheXxmYWxzZSBBcnJheSBvZiBjYWNoZWQgZGF0YSAoYW5kIG1ldGEtZGF0YSkgb3IgRkFMU0Ugb24gZmFpbHVyZQogKi8KZnVuY3Rpb24gYXBjdV9jYWNoZV9pbmZvKCRsaW1pdGVkID0gZmFsc2UpIHt9CgovKioKICogV2hldGhlciBBUEN1IGlzIHVzYWJsZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudAogKgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGN1LWVuYWJsZWQucGhwCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gYXBjdV9lbmFibGVkKCkge30KCi8qKgogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHJldHVybiBhcnJheXxudWxsCiAqLwpmdW5jdGlvbiBhcGN1X2tleV9pbmZvKCRrZXkpIHt9CgovKioKICogVGhlIEFQQ1VJdGVyYXRvciBjbGFzcwogKgogKiBUaGUgQVBDVUl0ZXJhdG9yIGNsYXNzIG1ha2VzIGl0IGVhc2llciB0byBpdGVyYXRlIG92ZXIgbGFyZ2UgQVBDdSBjYWNoZXMuCiAqIFRoaXMgaXMgaGVscGZ1bCBhcyBpdCBhbGxvd3MgaXRlcmF0aW5nIG92ZXIgbGFyZ2UgY2FjaGVzIGluIHN0ZXBzLCB3aGlsZSBncmFiYmluZyBhIGRlZmluZWQgbnVtYmVyCiAqIG9mIGVudHJpZXMgcGVyIGxvY2sgaW5zdGFuY2UsIHNvIGl0IGZyZWVzIHRoZSBjYWNoZSBsb2NrcyBmb3Igb3RoZXIgYWN0aXZpdGllcyByYXRoZXIgdGhhbiBob2xkIHVwCiAqIHRoZSBlbnRpcmUgY2FjaGUgdG8gZ3JhYiAxMDAgKHRoZSBkZWZhdWx0KSBlbnRyaWVzLiBBbHNvLCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgaXMgbW9yZQogKiBlZmZpY2llbnQgYXMgaXQncyBiZWVuIG1vdmVkIHRvIHRoZSBDIGxldmVsLgogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmFwY3VpdGVyYXRvci5waHAKICogQHNpbmNlIEFQQ3UgNS4wLjAKICovCmNsYXNzIEFQQ1VJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yCnsKICAgIC8qKgogICAgICogQ29uc3RydWN0cyBhbiBBUENVSXRlcmF0b3IgaXRlcmF0b3Igb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwY3VpdGVyYXRvci5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nfHN0cmluZ1tdfG51bGwgJHNlYXJjaCBBIFBDUkUgcmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBhZ2FpbnN0IEFQQ3Uga2V5IG5hbWVzLAogICAgICogZWl0aGVyIGFzIGEgc3RyaW5nIGZvciBhIHNpbmdsZSByZWd1bGFyIGV4cHJlc3Npb24sIG9yIGFzIGFuIGFycmF5IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAgICAgKiBPciwgb3B0aW9uYWxseSBwYXNzIGluIE5VTEwgdG8gc2tpcCB0aGUgc2VhcmNoLgogICAgICogQHBhcmFtIGludCAkZm9ybWF0IFRoZSBkZXNpcmVkIGZvcm1hdCwgYXMgY29uZmlndXJlZCB3aXRoIG9uZSBvcmUgbW9yZSBvZiB0aGUgQVBDX0lURVJfKiBjb25zdGFudHMuCiAgICAgKiBAcGFyYW0gaW50ICRjaHVua19zaXplIFRoZSBjaHVuayBzaXplLiBNdXN0IGJlIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMC4KICAgICAqIEBwYXJhbSBpbnQgJGxpc3QgVGhlIHR5cGUgdG8gbGlzdC4gRWl0aGVyIHBhc3MgaW4gQVBDX0xJU1RfQUNUSVZFICBvciBBUENfTElTVF9ERUxFVEVELgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHNlYXJjaCA9IG51bGwsICRmb3JtYXQgPSBBUENfSVRFUl9BTEwsICRjaHVua19zaXplID0gMTAwLCAkbGlzdCA9IEFQQ19MSVNUX0FDVElWRSkge30KCiAgICAvKioKICAgICAqIFJld2luZHMgYmFjayB0aGUgaXRlcmF0b3IgdG8gdGhlIGZpcnN0IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjdWl0ZXJhdG9yLnJld2luZC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgaXRlcmF0b3IgcG9zaXRpb24gaXMgdmFsaWQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBjdWl0ZXJhdG9yLnZhbGlkLnBocAogICAgICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBpZiB0aGUgY3VycmVudCBpdGVyYXRvciBwb3NpdGlvbiBpcyB2YWxpZCwgb3RoZXJ3aXNlIEZBTFNFLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgY3VycmVudCBpdGVtIGZyb20gdGhlIEFQQ1VJdGVyYXRvciBzdGFjawogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcGN1aXRlcmF0b3IuY3VycmVudC5waHAKICAgICAqIEByZXR1cm4gbWl4ZWR8ZmFsc2UgUmV0dXJucyB0aGUgY3VycmVudCBpdGVtIG9uIHN1Y2Nlc3MsIG9yIEZBTFNFIGlmIG5vIG1vcmUgaXRlbXMgb3IgZXhpc3QsIG9yIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGN1cnJlbnQgaXRlcmF0b3Iga2V5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwY3VpdGVyYXRvci5rZXkucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xpbnR8ZmFsc2UgUmV0dXJucyB0aGUga2V5IG9uIHN1Y2Nlc3MsIG9yIEZBTFNFIHVwb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpIHt9CgogICAgLyoqCiAgICAgKiBNb3ZlcyB0aGUgaXRlcmF0b3IgcG9pbnRlciB0byB0aGUgbmV4dCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwY3VpdGVyYXRvci5uZXh0LnBocAogICAgICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIHRvdGFsIG51bWJlciBvZiBjYWNoZSBoaXRzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwY3VpdGVyYXRvci5nZXR0b3RhbGhpdHMucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIGhpdHMgb24gc3VjY2Vzcywgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRvdGFsSGl0cygpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSB0b3RhbCBjYWNoZSBzaXplCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwY3VpdGVyYXRvci5nZXR0b3RhbHNpemUucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgdG90YWwgY2FjaGUgc2l6ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRvdGFsU2l6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHRvdGFsIGNvdW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwY3VpdGVyYXRvci5nZXR0b3RhbGNvdW50LnBocAogICAgICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIHRvdGFsIGNvdW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG90YWxDb3VudCgpIHt9Cn0KPD9waHAKCi8vIFN0YXJ0IG9mIHN2biB2LjEuMC4xCgpjbGFzcyBTdm4KewogICAgcHVibGljIGNvbnN0IE5PTl9SRUNVUlNJVkUgPSAxOwogICAgcHVibGljIGNvbnN0IERJU0NPVkVSX0NIQU5HRURfUEFUSFMgPSAyOwogICAgcHVibGljIGNvbnN0IE9NSVRfTUVTU0FHRVMgPSA0OwogICAgcHVibGljIGNvbnN0IFNUT1BfT05fQ09QWSA9IDg7CiAgICBwdWJsaWMgY29uc3QgQUxMID0gMTY7CiAgICBwdWJsaWMgY29uc3QgU0hPV19VUERBVEVTID0gMzI7CiAgICBwdWJsaWMgY29uc3QgTk9fSUdOT1JFID0gNjQ7CiAgICBwdWJsaWMgY29uc3QgSUdOT1JFX0VYVEVSTkFMUyA9IDEyODsKICAgIHB1YmxpYyBjb25zdCBJTklUSUFMID0gMTsKICAgIHB1YmxpYyBjb25zdCBIRUFEID0gLTE7CiAgICBwdWJsaWMgY29uc3QgQkFTRSA9IC0yOwogICAgcHVibGljIGNvbnN0IENPTU1JVFRFRCA9IC0zOwogICAgcHVibGljIGNvbnN0IFBSRVYgPSAtNDsKICAgIHB1YmxpYyBjb25zdCBVTlNQRUNJRklFRCA9IC01OwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tvdXQoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2F0KCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxzKCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvZygpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhdXRoX3NldF9wYXJhbWV0ZXIoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXV0aF9nZXRfcGFyYW1ldGVyKCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNsaWVudF92ZXJzaW9uKCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbmZpZ19lbnN1cmUoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGlmZigpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjbGVhbnVwKCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldmVydCgpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNvbHZlZCgpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21taXQoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9jaygpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1bmxvY2soKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWRkKCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0YXR1cygpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGUoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXBkYXRlMigpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbXBvcnQoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW5mbygpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBleHBvcnQoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29weSgpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzd2l0Y2goKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmxhbWUoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVsZXRlKCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1rZGlyKCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1vdmUoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJvcGxpc3QoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJvcGdldCgpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcm9wc2V0KCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHByb3BfZGVsZXRlKCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldnByb3BfZ2V0KCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldnByb3Bfc2V0KCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldnByb3BfZGVsZXRlKCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlcG9zX2NyZWF0ZSgpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXBvc19yZWNvdmVyKCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlcG9zX2hvdGNvcHkoKSB7fQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVwb3Nfb3BlbigpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXBvc19mcygpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXBvc19mc19iZWdpbl90eG5fZm9yX2NvbW1pdCgpIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXBvc19mc19jb21taXRfdHhuKCkge30KfQoKY2xhc3MgU3ZuV2MKewogICAgcHVibGljIGNvbnN0IE5PTkUgPSAxOwogICAgcHVibGljIGNvbnN0IFVOVkVSU0lPTkVEID0gMjsKICAgIHB1YmxpYyBjb25zdCBOT1JNQUwgPSAzOwogICAgcHVibGljIGNvbnN0IEFEREVEID0gNDsKICAgIHB1YmxpYyBjb25zdCBNSVNTSU5HID0gNTsKICAgIHB1YmxpYyBjb25zdCBERUxFVEVEID0gNjsKICAgIHB1YmxpYyBjb25zdCBSRVBMQUNFRCA9IDc7CiAgICBwdWJsaWMgY29uc3QgTU9ESUZJRUQgPSA4OwogICAgcHVibGljIGNvbnN0IE1FUkdFRCA9IDk7CiAgICBwdWJsaWMgY29uc3QgQ09ORkxJQ1RFRCA9IDEwOwogICAgcHVibGljIGNvbnN0IElHTk9SRUQgPSAxMTsKICAgIHB1YmxpYyBjb25zdCBPQlNUUlVDVEVEID0gMTI7CiAgICBwdWJsaWMgY29uc3QgRVhURVJOQUwgPSAxMzsKICAgIHB1YmxpYyBjb25zdCBJTkNPTVBMRVRFID0gMTQ7Cn0KCmNsYXNzIFN2bldjU2NoZWR1bGUKewogICAgcHVibGljIGNvbnN0IE5PUk1BTCA9IDA7CiAgICBwdWJsaWMgY29uc3QgQUREID0gMTsKICAgIHB1YmxpYyBjb25zdCBERUxFVEUgPSAyOwogICAgcHVibGljIGNvbnN0IFJFUExBQ0UgPSAzOwp9CgpjbGFzcyBTdm5Ob2RlCnsKICAgIHB1YmxpYyBjb25zdCBOT05FID0gMDsKICAgIHB1YmxpYyBjb25zdCBGSUxFID0gMTsKICAgIHB1YmxpYyBjb25zdCBESVIgPSAyOwogICAgcHVibGljIGNvbnN0IFVOS05PV04gPSAzOwp9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMS4wKTxici8+CiAqIENoZWNrcyBvdXQgYSB3b3JraW5nIGNvcHkgZnJvbSB0aGUgcmVwb3NpdG9yeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1jaGVja291dC5waHAKICogQHBhcmFtIHN0cmluZyAkcmVwb3MgPHA+CiAqIFN0cmluZyBVUkwgcGF0aCB0byBkaXJlY3RvcnkgaW4gcmVwb3NpdG9yeSB0byBjaGVjayBvdXQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdGFyZ2V0cGF0aCA8cD4KICogU3RyaW5nIGxvY2FsIHBhdGggdG8gZGlyZWN0b3J5IHRvIGNoZWNrIG91dCBpbiB0bwogKiA8L3A+CiAqIFJlbGF0aXZlIHBhdGhzIHdpbGwgYmUgcmVzb2x2ZWQgYXMgaWYgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgd2FzIHRoZSBvbmUgdGhhdCBjb250YWlucyB0aGUgUEhQIGJpbmFyeS4gVG8gdXNlIHRoZSBjYWxsaW5nIHNjcmlwdCYjeDAwMDI3O3Mgd29ya2luZyBkaXJlY3RvcnksIHVzZSA8Yj5yZWFscGF0aDwvYj4gb3IgZGlybmFtZShfX0ZJTEVfXykuCiAqIEBwYXJhbSBpbnQgJHJldmlzaW9uIFtvcHRpb25hbF0gPHA+CiAqIEludGVnZXIgcmV2aXNpb24gbnVtYmVyIG9mIHJlcG9zaXRvcnkgdG8gY2hlY2sgb3V0LiBEZWZhdWx0IGlzCiAqIEhFQUQsIHRoZSBtb3N0IHJlY2VudCByZXZpc2lvbi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogKiBBbnkgY29tYmluYXRpb24gb2YgPGI+U1ZOX05PTl9SRUNVUlNJVkU8L2I+IGFuZAogKiA8Yj5TVk5fSUdOT1JFX0VYVEVSTkFMUzwvYj4uCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fY2hlY2tvdXQoJHJlcG9zLCAkdGFyZ2V0cGF0aCwgJHJldmlzaW9uID0gU1ZOX1JFVklTSU9OX0hFQUQsICRmbGFncyA9IDApIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMS4wKTxici8+CiAqIFJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBpbiBhIHJlcG9zaXRvcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tY2F0LnBocAogKiBAcGFyYW0gc3RyaW5nICRyZXBvc191cmwgPHA+CiAqIFN0cmluZyBVUkwgcGF0aCB0byBpdGVtIGluIGEgcmVwb3NpdG9yeS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRyZXZpc2lvbl9ubyBbb3B0aW9uYWxdIDxwPgogKiBJbnRlZ2VyIHJldmlzaW9uIG51bWJlciBvZiBpdGVtIHRvIHJldHJpZXZlLCBkZWZhdWx0IGlzIHRoZSBIRUFECiAqIHJldmlzaW9uLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIHRoZSBzdHJpbmcgY29udGVudHMgb2YgdGhlIGl0ZW0gZnJvbSB0aGUgcmVwb3NpdG9yeSBvbgogKiBzdWNjZXNzLCBhbmQgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fY2F0KCRyZXBvc191cmwsICRyZXZpc2lvbl9ubyA9IFNWTl9SRVZJU0lPTl9IRUFEKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBSZXR1cm5zIGxpc3Qgb2YgZGlyZWN0b3J5IGNvbnRlbnRzIGluIHJlcG9zaXRvcnkgVVJMLCBvcHRpb25hbGx5IGF0IHJldmlzaW9uIG51bWJlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1scy5waHAKICogQHBhcmFtIHN0cmluZyAkcmVwb3NfdXJsCiAqIEBwYXJhbSBpbnQgJHJldmlzaW9uX25vIFtvcHRpb25hbF0KICogQHBhcmFtIGJvb2wgJHJlY3Vyc2UgW29wdGlvbmFsXSA8cD4KICogRW5hYmxlcyByZWN1cnNpb24uCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJHBlZyBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYXJyYXkgT24gc3VjY2VzcywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IGZpbGUgbGlzdGluZyBpbiB0aGUgZm9ybWF0CiAqIG9mOgogKiA8cHJlPgogKiBbMF0gPT4gQXJyYXkKICogKAogKiBbY3JlYXRlZF9yZXZdID0+IGludGVnZXIgcmV2aXNpb24gbnVtYmVyIG9mIGxhc3QgZWRpdAogKiBbbGFzdF9hdXRob3JdID0+IHN0cmluZyBhdXRob3IgbmFtZSBvZiBsYXN0IGVkaXQKICogW3NpemVdID0+IGludGVnZXIgYnl0ZSBmaWxlIHNpemUgb2YgZmlsZQogKiBbdGltZV0gPT4gc3RyaW5nIGRhdGUgb2YgbGFzdCBlZGl0IGluIGZvcm0gJ00gZCBIOmknCiAqIG9yICdNIGQgWScsIGRlcGVuZGluZyBvbiBob3cgb2xkIHRoZSBmaWxlIGlzCiAqIFt0aW1lX3RdID0+IGludGVnZXIgdW5peCB0aW1lc3RhbXAgb2YgbGFzdCBlZGl0CiAqIFtuYW1lXSA9PiBuYW1lIG9mIGZpbGUvZGlyZWN0b3J5CiAqIFt0eXBlXSA9PiB0eXBlLCBjYW4gYmUgJ2ZpbGUnIG9yICdkaXInCiAqICkKICogWzFdID0+IC4uLgogKiA8L3ByZT4KICovCmZ1bmN0aW9uIHN2bl9scygkcmVwb3NfdXJsLCAkcmV2aXNpb25fbm8gPSBTVk5fUkVWSVNJT05fSEVBRCwgJHJlY3Vyc2UgPSBmYWxzZSwgJHBlZyA9IGZhbHNlKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBSZXR1cm5zIHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzIG9mIGEgcmVwb3NpdG9yeSBVUkwKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tbG9nLnBocAogKiBAcGFyYW0gc3RyaW5nICRyZXBvc191cmwgPHA+CiAqIFJlcG9zaXRvcnkgVVJMIG9mIHRoZSBpdGVtIHRvIHJldHJpZXZlIGxvZyBoaXN0b3J5IGZyb20uCiAqIDwvcD4KICogQHBhcmFtIGludCAkc3RhcnRfcmV2aXNpb24gW29wdGlvbmFsXSA8cD4KICogUmV2aXNpb24gbnVtYmVyIG9mIHRoZSBmaXJzdCBsb2cgdG8gcmV0cmlldmUuIFVzZQogKiA8Yj5TVk5fUkVWSVNJT05fSEVBRDwvYj4gdG8gcmV0cmlldmUgdGhlIGxvZyBmcm9tCiAqIHRoZSBtb3N0IHJlY2VudCByZXZpc2lvbi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRlbmRfcmV2aXNpb24gW29wdGlvbmFsXSA8cD4KICogUmV2aXNpb24gbnVtYmVyIG9mIHRoZSBsYXN0IGxvZyB0byByZXRyaWV2ZS4gRGVmYXVsdHMgdG8KICogPGk+c3RhcnRfcmV2aXNpb248L2k+IGlmIHNwZWNpZmllZCBvciB0bwogKiA8Yj5TVk5fUkVWSVNJT05fSU5JVElBTDwvYj4gb3RoZXJ3aXNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGxpbWl0IFtvcHRpb25hbF0gPHA+CiAqIE51bWJlciBvZiBsb2dzIHRvIHJldHJpZXZlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIEFueSBjb21iaW5hdGlvbiBvZiA8Yj5TVk5fT01JVF9NRVNTQUdFUzwvYj4sCiAqIDxiPlNWTl9ESVNDT1ZFUl9DSEFOR0VEX1BBVEhTPC9iPiBhbmQKICogPGI+U1ZOX1NUT1BfT05fQ09QWTwvYj4uCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBPbiBzdWNjZXNzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgZmlsZSBsaXN0aW5nIGluIHRoZSBmb3JtYXQKICogb2Y6CiAqIDxwcmU+CiAqIFswXSA9PiBBcnJheSwgb3JkZXJlZCBtb3N0IHJlY2VudCAoaGlnaGVzdCkgcmV2aXNpb24gZmlyc3QKICogKAogKiBbcmV2XSA9PiBpbnRlZ2VyIHJldmlzaW9uIG51bWJlcgogKiBbYXV0aG9yXSA9PiBzdHJpbmcgYXV0aG9yIG5hbWUKICogW21zZ10gPT4gc3RyaW5nIGxvZyBtZXNzYWdlCiAqIFtkYXRlXSA9PiBzdHJpbmcgZGF0ZSBmb3JtYXR0ZWQgcGVyIElTTyA4NjAxLCBpLmUuIGRhdGUoJ2MnKQogKiBbcGF0aHNdID0+IEFycmF5LCBkZXNjcmliaW5nIGNoYW5nZWQgZmlsZXMKICogKAogKiBbMF0gPT4gQXJyYXkKICogKAogKiBbYWN0aW9uXSA9PiBzdHJpbmcgbGV0dGVyIHNpZ25pZnlpbmcgY2hhbmdlCiAqIFtwYXRoXSA9PiBhYnNvbHV0ZSByZXBvc2l0b3J5IHBhdGggb2YgY2hhbmdlZCBmaWxlCiAqICkKICogWzFdID0+IC4uLgogKiApCiAqICkKICogWzFdID0+IC4uLgogKiA8L3ByZT4KICogPC9wPgogKiA8cD4KICogVGhlIG91dHB1dCB3aWxsIGFsd2F5cyBiZSBhIG51bWVyaWNhbGx5IGluZGV4ZWQgYXJyYXkgb2YgYXJyYXlzLAogKiBldmVuIHdoZW4gdGhlcmUgYXJlIG5vbmUgb3Igb25seSBvbmUgbG9nIG1lc3NhZ2UocykuCiAqIDwvcD4KICogPHA+CiAqIFRoZSB2YWx1ZSBvZiBhY3Rpb24gaXMgYSBzdWJzZXQgb2YgdGhlCiAqIHN0YXR1cyBvdXRwdXQKICogaW4gdGhlIGZpcnN0IGNvbHVtbiwgd2hlcmUgcG9zc2libGUgdmFsdWVzIGFyZToKICogPC9wPgogKiA8dGFibGU+CiAqIEFjdGlvbnMKICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkxldHRlcjwvdGQ+CiAqIDx0ZD5EZXNjcmlwdGlvbjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5NPC90ZD4KICogPHRkPkl0ZW0vcHJvcHMgd2FzIG1vZGlmaWVkPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkE8L3RkPgogKiA8dGQ+SXRlbSB3YXMgYWRkZWQ8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+RDwvdGQ+CiAqIDx0ZD5JdGVtIHdhcyBkZWxldGVkPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlI8L3RkPgogKiA8dGQ+SXRlbSB3YXMgcmVwbGFjZWQ8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiA8cD4KICogSWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIGl0ZW0sIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkLgogKi8KZnVuY3Rpb24gc3ZuX2xvZygkcmVwb3NfdXJsLCAkc3RhcnRfcmV2aXNpb24gPSBudWxsLCAkZW5kX3JldmlzaW9uID0gbnVsbCwgJGxpbWl0ID0gMCwgJGZsYWdzID0gU1ZOX0RJU0NPVkVSX0NIQU5HRURfUEFUSFN8U1ZOX1NUT1BfT05fQ09QWSkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4xLjApPGJyLz4KICogU2V0cyBhbiBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tYXV0aC1zZXQtcGFyYW1ldGVyLnBocAogKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAqIFN0cmluZyBrZXkgbmFtZS4gVXNlIHRoZSBhdXRoZW50aWNhdGlvbiBjb25zdGFudHMKICogZGVmaW5lZCBieSB0aGlzIGV4dGVuc2lvbiB0byBzcGVjaWZ5IGEga2V5LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIDxwPgogKiBTdHJpbmcgdmFsdWUgdG8gc2V0IHRvIHBhcmFtZXRlciBhdCBrZXkuIEZvcm1hdCBvZiB2YWx1ZSB2YXJpZXMKICogd2l0aCB0aGUgcGFyYW1ldGVyLgogKiA8L3A+CiAqIEByZXR1cm4gdm9pZCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICovCmZ1bmN0aW9uIHN2bl9hdXRoX3NldF9wYXJhbWV0ZXIoJGtleSwgJHZhbHVlKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBSZXRyaWV2ZXMgYXV0aGVudGljYXRpb24gcGFyYW1ldGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLWF1dGgtZ2V0LXBhcmFtZXRlci5waHAKICogQHBhcmFtIHN0cmluZyAka2V5IDxwPgogKiBTdHJpbmcga2V5IG5hbWUuIFVzZSB0aGUgYXV0aGVudGljYXRpb24gY29uc3RhbnRzCiAqIGRlZmluZWQgYnkgdGhpcyBleHRlbnNpb24gdG8gc3BlY2lmeSBhIGtleS4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xudWxsIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciBhdCA8aT5rZXk8L2k+OwogKiByZXR1cm5zIDxiPk5VTEw8L2I+IGlmIHBhcmFtZXRlciBkb2VzIG5vdCBleGlzdC4KICovCmZ1bmN0aW9uIHN2bl9hdXRoX2dldF9wYXJhbWV0ZXIoJGtleSkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4xLjApPGJyLz4KICogUmV0dXJucyB0aGUgdmVyc2lvbiBvZiB0aGUgU1ZOIGNsaWVudCBsaWJyYXJpZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tY2xpZW50LXZlcnNpb24ucGhwCiAqIEByZXR1cm4gc3RyaW5nIFN0cmluZyB2ZXJzaW9uIG51bWJlciwgdXN1YWxseSBpbiBmb3JtIG9mIHgueS56LgogKi8KZnVuY3Rpb24gc3ZuX2NsaWVudF92ZXJzaW9uKCkge30KCmZ1bmN0aW9uIHN2bl9jb25maWdfZW5zdXJlKCkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4xLjApPGJyLz4KICogUmVjdXJzaXZlbHkgZGlmZnMgdHdvIHBhdGhzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLWRpZmYucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgxIDxwPgogKiBGaXJzdCBwYXRoIHRvIGRpZmYuIFRoaXMgY2FuIGJlIGEgVVJMIHRvIGEgZmlsZS9kaXJlY3RvcnkgaW4gYW4gU1ZOCiAqIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBmaWxlL2RpcmVjdG9yeSBwYXRoLgogKiA8L3A+CiAqIFJlbGF0aXZlIHBhdGhzIHdpbGwgYmUgcmVzb2x2ZWQgYXMgaWYgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgd2FzIHRoZSBvbmUgdGhhdCBjb250YWlucyB0aGUgUEhQIGJpbmFyeS4gVG8gdXNlIHRoZSBjYWxsaW5nIHNjcmlwdCYjeDAwMDI3O3Mgd29ya2luZyBkaXJlY3RvcnksIHVzZSA8Yj5yZWFscGF0aDwvYj4gb3IgZGlybmFtZShfX0ZJTEVfXykuCiAqIElmIGEgbG9jYWwgZmlsZSBwYXRoIGhhcyBvbmx5IGJhY2tzbGFzaGVzIGFuZCBubyBmb3J3YXJkIHNsYXNoZXMsCiAqIHRoaXMgZXh0ZW5zaW9uIHdpbGwgZmFpbCB0byBmaW5kIHRoZSBwYXRoLiBBbHdheXMKICogcmVwbGFjZSBhbGwgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkIHNsYXNoZXMgd2hlbiB1c2luZyB0aGlzCiAqIGZ1bmN0aW9uLgogKiBAcGFyYW0gaW50ICRyZXYxIDxwPgogKiBGaXJzdCBwYXRoJ3MgcmV2aXNpb24gbnVtYmVyLiBVc2UgPGI+U1ZOX1JFVklTSU9OX0hFQUQ8L2I+CiAqIHRvIHNwZWNpZnkgdGhlIG1vc3QgcmVjZW50IHJldmlzaW9uLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgyIDxwPgogKiBTZWNvbmQgcGF0aCB0byBkaWZmLiBTZWUgPGk+cGF0aDE8L2k+IGZvciBkZXNjcmlwdGlvbi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRyZXYyIDxwPgogKiBTZWNvbmQgcGF0aCdzIHJldmlzaW9uIG51bWJlci4gU2VlIDxpPnJldjE8L2k+CiAqIGZvciBkZXNjcmlwdGlvbi4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5LWxpc3QgY29uc2lzdGluZyBvZiB0d28gc3RyZWFtczogdGhlIGZpcnN0IGlzIHRoZSBkaWZmIG91dHB1dAogKiBhbmQgdGhlIHNlY29uZCBjb250YWlucyBlcnJvciBzdHJlYW0gb3V0cHV0LiBUaGUgc3RyZWFtcyBjYW4gYmUKICogcmVhZCB1c2luZyA8Yj5mcmVhZDwvYj4uIFJldHVybnMgPGI+RkFMU0U8L2I+IG9yIDxiPk5VTEw8L2I+IG9uCiAqIGVycm9yLgogKiA8L3A+CiAqIDxwPgogKiBUaGUgZGlmZiBvdXRwdXQgd2lsbCwgYnkgZGVmYXVsdCwgYmUgaW4gdGhlIGZvcm0gb2YgU3VidmVyc2lvbidzCiAqIGN1c3RvbSB1bmlmaWVkIGRpZmYgZm9ybWF0LCBidXQgYW4KICogZXh0ZXJuYWwKICogZGlmZiBlbmdpbmUgbWF5IGJlCiAqIHVzZWQgZGVwZW5kaW5nIG9uIFN1YnZlcnNpb24ncyBjb25maWd1cmF0aW9uLgogKi8KZnVuY3Rpb24gc3ZuX2RpZmYoJHBhdGgxLCAkcmV2MSwgJHBhdGgyLCAkcmV2Mikge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4xLjApPGJyLz4KICogUmVjdXJzaXZlbHkgY2xlYW51cCBhIHdvcmtpbmcgY29weSBkaXJlY3RvcnksIGZpbmlzaGluZyBpbmNvbXBsZXRlIG9wZXJhdGlvbnMgYW5kIHJlbW92aW5nIGxvY2tzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLWNsZWFudXAucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHdvcmtpbmdkaXIgPHA+CiAqIFN0cmluZyBwYXRoIHRvIGxvY2FsIHdvcmtpbmcgZGlyZWN0b3J5IHRvIGNsZWFudXAKICogPC9wPgogKiBSZWxhdGl2ZSBwYXRocyB3aWxsIGJlIHJlc29sdmVkIGFzIGlmIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHdhcyB0aGUgb25lIHRoYXQgY29udGFpbnMgdGhlIFBIUCBiaW5hcnkuIFRvIHVzZSB0aGUgY2FsbGluZyBzY3JpcHQmI3gwMDAyNztzIHdvcmtpbmcgZGlyZWN0b3J5LCB1c2UgPGI+cmVhbHBhdGg8L2I+IG9yIGRpcm5hbWUoX19GSUxFX18pLgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHN2bl9jbGVhbnVwKCR3b3JraW5nZGlyKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjMuMCk8YnIvPgogKiBSZXZlcnQgY2hhbmdlcyB0byB0aGUgd29ya2luZyBjb3B5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLXJldmVydC5waHAKICogQHBhcmFtIHN0cmluZyAkcGF0aCA8cD4KICogVGhlIHBhdGggdG8gdGhlIHdvcmtpbmcgcmVwb3NpdG9yeS4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkcmVjdXJzaXZlIFtvcHRpb25hbF0gPHA+CiAqIE9wdGlvbmFsbHkgbWFrZSByZWN1cnNpdmUgY2hhbmdlcy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHN2bl9yZXZlcnQoJHBhdGgsICRyZWN1cnNpdmUgPSBmYWxzZSkge30KCmZ1bmN0aW9uIHN2bl9yZXNvbHZlZCgpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMS4wKTxici8+CiAqIFNlbmRzIGNoYW5nZXMgZnJvbSB0aGUgbG9jYWwgd29ya2luZyBjb3B5IHRvIHRoZSByZXBvc2l0b3J5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLWNvbW1pdC5waHAKICogQHBhcmFtIHN0cmluZyAkbG9nIDxwPgogKiBTdHJpbmcgbG9nIHRleHQgdG8gY29tbWl0CiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICR0YXJnZXRzIDxwPgogKiBBcnJheSBvZiBsb2NhbCBwYXRocyBvZiBmaWxlcyB0byBiZSBjb21taXR0ZWQKICogPC9wPgogKiBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGFuIGFycmF5LCBhIHN0cmluZyBmb3IgYSBzaW5nbGUKICogdGFyZ2V0IGlzIG5vdCBhY2NlcHRhYmxlLgogKiBSZWxhdGl2ZSBwYXRocyB3aWxsIGJlIHJlc29sdmVkIGFzIGlmIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHdhcyB0aGUgb25lIHRoYXQgY29udGFpbnMgdGhlIFBIUCBiaW5hcnkuIFRvIHVzZSB0aGUgY2FsbGluZyBzY3JpcHQmI3gwMDAyNztzIHdvcmtpbmcgZGlyZWN0b3J5LCB1c2UgPGI+cmVhbHBhdGg8L2I+IG9yIGRpcm5hbWUoX19GSUxFX18pLgogKiBAcGFyYW0gYm9vbCAkcmVjdXJzaXZlIFtvcHRpb25hbF0gPHA+CiAqIEJvb2xlYW4gZmxhZyB0byBkaXNhYmxlIHJlY3Vyc2l2ZSBjb21taXR0aW5nIG9mCiAqIGRpcmVjdG9yaWVzIGluIHRoZSA8aT50YXJnZXRzPC9pPiBhcnJheS4KICogRGVmYXVsdCBpcyA8Yj5UUlVFPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5IGFycmF5IGluIGZvcm0gb2Y6CiAqIDxwcmU+CiAqIGFycmF5KAogKiAwID0+IGludGVnZXIgcmV2aXNpb24gbnVtYmVyIG9mIGNvbW1pdAogKiAxID0+IHN0cmluZyBJU08gODYwMSBkYXRlIGFuZCB0aW1lIG9mIGNvbW1pdAogKiAyID0+IG5hbWUgb2YgY29tbWl0dGVyCiAqICkKICogPC9wcmU+CiAqIDxwPgogKiBSZXR1cm5zIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiA8L3A+CiAqLwpmdW5jdGlvbiBzdm5fY29tbWl0KCRsb2csIGFycmF5ICR0YXJnZXRzLCAkcmVjdXJzaXZlID0gdHJ1ZSkge30KCmZ1bmN0aW9uIHN2bl9sb2NrKCkge30KCmZ1bmN0aW9uIHN2bl91bmxvY2soKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBTY2hlZHVsZXMgdGhlIGFkZGl0aW9uIG9mIGFuIGl0ZW0gaW4gYSB3b3JraW5nIGRpcmVjdG9yeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1hZGQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggPHA+CiAqIFBhdGggb2YgaXRlbSB0byBhZGQuCiAqIDwvcD4KICogUmVsYXRpdmUgcGF0aHMgd2lsbCBiZSByZXNvbHZlZCBhcyBpZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB3YXMgdGhlIG9uZSB0aGF0IGNvbnRhaW5zIHRoZSBQSFAgYmluYXJ5LiBUbyB1c2UgdGhlIGNhbGxpbmcgc2NyaXB0JiN4MDAwMjc7cyB3b3JraW5nIGRpcmVjdG9yeSwgdXNlIDxiPnJlYWxwYXRoPC9iPiBvciBkaXJuYW1lKF9fRklMRV9fKS4KICogQHBhcmFtIGJvb2wgJHJlY3Vyc2l2ZSBbb3B0aW9uYWxdIDxwPgogKiBJZiBpdGVtIGlzIGRpcmVjdG9yeSwgd2hldGhlciBvciBub3QgdG8gcmVjdXJzaXZlbHkgYWRkCiAqIGFsbCBvZiBpdHMgY29udGVudHMuIERlZmF1bHQgaXMgPGI+VFJVRTwvYj4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkZm9yY2UgW29wdGlvbmFsXSA8cD4KICogSWYgdHJ1ZSwgU3VidmVyc2lvbiB3aWxsIHJlY3Vyc2UgaW50byBhbHJlYWR5IHZlcnNpb25lZCBkaXJlY3RvcmllcwogKiBpbiBvcmRlciB0byBhZGQgdW52ZXJzaW9uZWQgZmlsZXMgdGhhdCBtYXkgYmUgaGlkaW5nIGluIHRob3NlCiAqIGRpcmVjdG9yaWVzLiBEZWZhdWx0IGlzIDxiPkZBTFNFPC9iPgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2FkZCgkcGF0aCwgJHJlY3Vyc2l2ZSA9IHRydWUsICRmb3JjZSA9IGZhbHNlKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBSZXR1cm5zIHRoZSBzdGF0dXMgb2Ygd29ya2luZyBjb3B5IGZpbGVzIGFuZCBkaXJlY3RvcmllcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1zdGF0dXMucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggPHA+CiAqIExvY2FsIHBhdGggdG8gZmlsZSBvciBkaXJlY3RvcnkgdG8gcmV0cmlldmUgc3RhdHVzIG9mLgogKiA8L3A+CiAqIFJlbGF0aXZlIHBhdGhzIHdpbGwgYmUgcmVzb2x2ZWQgYXMgaWYgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgd2FzIHRoZSBvbmUgdGhhdCBjb250YWlucyB0aGUgUEhQIGJpbmFyeS4gVG8gdXNlIHRoZSBjYWxsaW5nIHNjcmlwdCYjeDAwMDI3O3Mgd29ya2luZyBkaXJlY3RvcnksIHVzZSA8Yj5yZWFscGF0aDwvYj4gb3IgZGlybmFtZShfX0ZJTEVfXykuCiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIEFueSBjb21iaW5hdGlvbiBvZiA8Yj5TVk5fTk9OX1JFQ1VSU0lWRTwvYj4sCiAqIDxiPlNWTl9BTEw8L2I+IChyZWdhcmRsZXNzIG9mIG1vZGlmaWNhdGlvbiBzdGF0dXMpLAogKiA8Yj5TVk5fU0hPV19VUERBVEVTPC9iPiAoZW50cmllcyB3aWxsIGJlIGFkZGVkIGZvciBpdGVtcwogKiB0aGF0IGFyZSBvdXQtb2YtZGF0ZSksIDxiPlNWTl9OT19JR05PUkU8L2I+IChkaXNyZWdhcmQKICogc3ZuOmlnbm9yZSBwcm9wZXJ0aWVzIHdoZW4gc2Nhbm5pbmcgZm9yIG5ldyBmaWxlcykKICogYW5kIDxiPlNWTl9JR05PUkVfRVhURVJOQUxTPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5IGEgbnVtZXJpY2FsbHkgaW5kZXhlZCBhcnJheSBvZiBhc3NvY2lhdGl2ZSBhcnJheXMgZGV0YWlsaW5nCiAqIHRoZSBzdGF0dXMgb2YgaXRlbXMgaW4gdGhlIHJlcG9zaXRvcnk6CiAqIDwvcD4KICogPHByZT4KICogQXJyYXkgKAogKiBbMF0gPT4gQXJyYXkgKAogKiAvLyBpbmZvcm1hdGlvbiBvbiBpdGVtCiAqICkKICogWzFdID0+IC4uLgogKiApCiAqIDwvcHJlPgogKiA8cD4KICogVGhlIGluZm9ybWF0aW9uIG9uIHRoZSBpdGVtIGlzIGFuIGFzc29jaWF0aXZlIGFycmF5IHRoYXQgY2FuIGNvbnRhaW4KICogdGhlIGZvbGxvd2luZyBrZXlzOgogKiA8L3A+CiAqIHBhdGgKICogU3RyaW5nIHBhdGggdG8gZmlsZS9kaXJlY3Rvcnkgb2YgdGhpcyBlbnRyeSBvbiBsb2NhbCBmaWxlc3lzdGVtLgogKiB0ZXh0X3N0YXR1cwogKiBTdGF0dXMgb2YgaXRlbSdzIHRleHQuIFJlZmVyIHRvIHN0YXR1cyBjb25zdGFudHMgZm9yIHBvc3NpYmxlIHZhbHVlcy4KICogcmVwb3NfdGV4dF9zdGF0dXMKICogU3RhdHVzIG9mIGl0ZW0ncyB0ZXh0IGluIHJlcG9zaXRvcnkuIE9ubHkgYWNjdXJhdGUgaWYKICogPGk+dXBkYXRlPC9pPiB3YXMgc2V0IHRvIDxiPlRSVUU8L2I+LgogKiBSZWZlciB0byBzdGF0dXMgY29uc3RhbnRzIGZvciBwb3NzaWJsZSB2YWx1ZXMuCiAqIHByb3Bfc3RhdHVzCiAqIFN0YXR1cyBvZiBpdGVtJ3MgcHJvcGVydGllcy4gUmVmZXIgdG8gc3RhdHVzIGNvbnN0YW50cyBmb3IgcG9zc2libGUgdmFsdWVzLgogKiByZXBvc19wcm9wX3N0YXR1cwogKiBTdGF0dXMgb2YgaXRlbSdzIHByb3BlcnR5IGluIHJlcG9zaXRvcnkuIE9ubHkgYWNjdXJhdGUgaWYKICogPGk+dXBkYXRlPC9pPiB3YXMgc2V0IHRvIDxiPlRSVUU8L2I+LiBSZWZlciB0byBzdGF0dXMgY29uc3RhbnRzIGZvciBwb3NzaWJsZSB2YWx1ZXMuCiAqIGxvY2tlZAogKiBXaGV0aGVyIG9yIG5vdCB0aGUgaXRlbSBpcyBsb2NrZWQuIChPbmx5IHNldCBpZiA8Yj5UUlVFPC9iPi4pCiAqIGNvcGllZAogKiBXaGV0aGVyIG9yIG5vdCB0aGUgaXRlbSB3YXMgY29waWVkIChzY2hlZHVsZWQgZm9yIGFkZGl0aW9uIHdpdGgKICogaGlzdG9yeSkuIChPbmx5IHNldCBpZiA8Yj5UUlVFPC9iPi4pCiAqIHN3aXRjaGVkCiAqIFdoZXRoZXIgb3Igbm90IHRoZSBpdGVtIHdhcyBzd2l0Y2hlZCB1c2luZyB0aGUgc3dpdGNoIGNvbW1hbmQuCiAqIChPbmx5IHNldCBpZiA8Yj5UUlVFPC9iPikKICogPHA+CiAqIFRoZXNlIGtleXMgYXJlIG9ubHkgc2V0IGlmIHRoZSBpdGVtIGlzIHZlcnNpb25lZDoKICogPC9wPgogKiBuYW1lCiAqIEJhc2UgbmFtZSBvZiBpdGVtIGluIHJlcG9zaXRvcnkuCiAqIHVybAogKiBVUkwgb2YgaXRlbSBpbiByZXBvc2l0b3J5LgogKiByZXBvcwogKiBCYXNlIFVSTCBvZiByZXBvc2l0b3J5LgogKiByZXZpc2lvbgogKiBJbnRlZ2VyIHJldmlzaW9uIG9mIGl0ZW0gaW4gd29ya2luZyBjb3B5LgogKiBraW5kCiAqIFR5cGUgb2YgaXRlbSwgaS5lLiBmaWxlIG9yIGRpcmVjdG9yeS4gUmVmZXIgdG8gdHlwZSBjb25zdGFudHMgZm9yIHBvc3NpYmxlIHZhbHVlcy4KICogc2NoZWR1bGUKICogU2NoZWR1bGVkIGFjdGlvbiBmb3IgaXRlbSwgaS5lLiBhZGRpdGlvbiBvciBkZWxldGlvbi4gQ29uc3RhbnRzCiAqIGZvciB0aGVzZSBtYWdpYyBudW1iZXJzIGFyZSBub3QgYXZhaWxhYmxlLCB0aGV5IGNhbgogKiBiZSBlbXVsYXRlZCBieSB1c2luZzoKICogPGNvZGU+CiAqIGlmICghZGVmaW5lZCgnc3ZuX3djX3NjaGVkdWxlX25vcm1hbCcpKSB7CiAqIGRlZmluZSgnc3ZuX3djX3NjaGVkdWxlX25vcm1hbCcsIDApOyAvLyBub3RoaW5nIHNwZWNpYWwKICogZGVmaW5lKCdzdm5fd2Nfc2NoZWR1bGVfYWRkJywgMSk7IC8vIGl0ZW0gd2lsbCBiZSBhZGRlZAogKiBkZWZpbmUoJ3N2bl93Y19zY2hlZHVsZV9kZWxldGUnLCAyKTsgLy8gaXRlbSB3aWxsIGJlIGRlbGV0ZWQKICogZGVmaW5lKCdzdm5fd2Nfc2NoZWR1bGVfcmVwbGFjZScsIDMpOyAvLyBpdGVtIHdpbGwgYmUgYWRkZWQgYW5kIGRlbGV0ZWQKICogfQogKiA8L2NvZGU+CiAqIGRlbGV0ZWQKICogV2hldGhlciBvciBub3QgdGhlIGl0ZW0gd2FzIGRlbGV0ZWQsIGJ1dCBwYXJlbnQgcmV2aXNpb24gbGFncwogKiBiZWhpbmQuIChPbmx5IHNldCBpZiA8Yj5UUlVFPC9iPi4pCiAqIGFic2VudAogKiBXaGV0aGVyIG9yIG5vdCB0aGUgaXRlbSBpcyBhYnNlbnQsIHRoYXQgaXMsIFN1YnZlcnNpb24ga25vd3MgdGhhdAogKiB0aGVyZSBzaG91bGQgYmUgc29tZXRoaW5nIHRoZXJlIGJ1dCB0aGVyZSBpc24ndC4gKE9ubHkgc2V0IGlmCiAqIDxiPlRSVUU8L2I+LikKICogaW5jb21wbGV0ZQogKiBXaGV0aGVyIG9yIG5vdCB0aGUgZW50cmllcyBmaWxlIGZvciBhIGRpcmVjdG9yeSBpcyBpbmNvbXBsZXRlLgogKiAoT25seSBzZXQgaWYgPGI+VFJVRTwvYj4uKQogKiBjbXRfZGF0ZQogKiBJbnRlZ2VyIFVuaXggdGltZXN0YW1wIG9mIGxhc3QgY29tbWl0IGRhdGUuIChVbmFmZmVjdGVkIGJ5IDxpPnVwZGF0ZTwvaT4uKQogKiBjbXRfcmV2CiAqIEludGVnZXIgcmV2aXNpb24gb2YgbGFzdCBjb21taXQuIChVbmFmZmVjdGVkIGJ5IDxpPnVwZGF0ZTwvaT4uKQogKiBjbXRfYXV0aG9yCiAqIFN0cmluZyBhdXRob3Igb2YgbGFzdCBjb21taXQuIChVbmFmZmVjdGVkIGJ5IDxpPnVwZGF0ZQogKi8KZnVuY3Rpb24gc3ZuX3N0YXR1cygkcGF0aCwgJGZsYWdzID0gMCkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4xLjApPGJyLz4KICogVXBkYXRlIHdvcmtpbmcgY29weQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi11cGRhdGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggPHA+CiAqIFBhdGggdG8gbG9jYWwgd29ya2luZyBjb3B5LgogKiA8L3A+CiAqIFJlbGF0aXZlIHBhdGhzIHdpbGwgYmUgcmVzb2x2ZWQgYXMgaWYgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgd2FzIHRoZSBvbmUgdGhhdCBjb250YWlucyB0aGUgUEhQIGJpbmFyeS4gVG8gdXNlIHRoZSBjYWxsaW5nIHNjcmlwdCYjeDAwMDI3O3Mgd29ya2luZyBkaXJlY3RvcnksIHVzZSA8Yj5yZWFscGF0aDwvYj4gb3IgZGlybmFtZShfX0ZJTEVfXykuCiAqIEBwYXJhbSBpbnQgJHJldm5vIFtvcHRpb25hbF0gPHA+CiAqIFJldmlzaW9uIG51bWJlciB0byB1cGRhdGUgdG8sIGRlZmF1bHQgaXMgPGI+U1ZOX1JFVklTSU9OX0hFQUQ8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRyZWN1cnNlIFtvcHRpb25hbF0gPHA+CiAqIFdoZXRoZXIgb3Igbm90IHRvIHJlY3Vyc2l2ZWx5IHVwZGF0ZSBkaXJlY3Rvcmllcy4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSBuZXcgcmV2aXNpb24gbnVtYmVyIG9uIHN1Y2Nlc3MsIHJldHVybnMgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fdXBkYXRlKCRwYXRoLCAkcmV2bm8gPSBTVk5fUkVWSVNJT05fSEVBRCwgJHJlY3Vyc2UgPSB0cnVlKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjIuMCk8YnIvPgogKiBJbXBvcnRzIGFuIHVudmVyc2lvbmVkIHBhdGggaW50byBhIHJlcG9zaXRvcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4taW1wb3J0LnBocAogKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogKiBQYXRoIG9mIGZpbGUgb3IgZGlyZWN0b3J5IHRvIGltcG9ydC4KICogPC9wPgogKiBSZWxhdGl2ZSBwYXRocyB3aWxsIGJlIHJlc29sdmVkIGFzIGlmIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IHdhcyB0aGUgb25lIHRoYXQgY29udGFpbnMgdGhlIFBIUCBiaW5hcnkuIFRvIHVzZSB0aGUgY2FsbGluZyBzY3JpcHQmI3gwMDAyNztzIHdvcmtpbmcgZGlyZWN0b3J5LCB1c2UgPGI+cmVhbHBhdGg8L2I+IG9yIGRpcm5hbWUoX19GSUxFX18pLgogKiBAcGFyYW0gc3RyaW5nICR1cmwgPHA+CiAqIFJlcG9zaXRvcnkgVVJMIHRvIGltcG9ydCBpbnRvLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRub25yZWN1cnNpdmUgPHA+CiAqIFdoZXRoZXIgb3Igbm90IHRvIHJlZnJhaW4gZnJvbSByZWN1cnNpdmVseSBwcm9jZXNzaW5nIGRpcmVjdG9yaWVzLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2ltcG9ydCgkcGF0aCwgJHVybCwgJG5vbnJlY3Vyc2l2ZSkge30KCmZ1bmN0aW9uIHN2bl9pbmZvKCkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4zLjApPGJyLz4KICogRXhwb3J0IHRoZSBjb250ZW50cyBvZiBhIFNWTiBkaXJlY3RvcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tZXhwb3J0LnBocAogKiBAcGFyYW0gc3RyaW5nICRmcm9tcGF0aCA8cD4KICogVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR0b3BhdGggPHA+CiAqIFRoZSBwYXRoIHRvIHRoZSBuZXcgcmVwb3NpdG9yeS4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkd29ya2luZ19jb3B5IFtvcHRpb25hbF0gPHA+CiAqIElmIDxiPlRSVUU8L2I+LCBpdCB3aWxsIGV4cG9ydCB1bmNvbW1pdHRlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIGNvcHkuCiAqIDwvcD4KICogQHBhcmFtIGludCAkcmV2aXNpb25fbm8gW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHN2bl9leHBvcnQoJGZyb21wYXRoLCAkdG9wYXRoLCAkd29ya2luZ19jb3B5ID0gdHJ1ZSwgJHJldmlzaW9uX25vID0gLTEpIHt9CgpmdW5jdGlvbiBzdm5fY29weSgpIHt9CgpmdW5jdGlvbiBzdm5fc3dpdGNoKCkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4zLjApPGJyLz4KICogR2V0IHRoZSBTVk4gYmxhbWUgZm9yIGEgZmlsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1ibGFtZS5waHAKICogQHBhcmFtIHN0cmluZyAkcmVwb3NpdG9yeV91cmwgPHA+CiAqIFRoZSByZXBvc2l0b3J5IFVSTC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRyZXZpc2lvbl9ubyBbb3B0aW9uYWxdIDxwPgogKiBUaGUgcmV2aXNpb24gbnVtYmVyLgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgb2YgU1ZOIGJsYW1lIGluZm9ybWF0aW9uIHNlcGFyYXRlZCBieSBsaW5lCiAqIHdoaWNoIGluY2x1ZGVzIHRoZSByZXZpc2lvbiBudW1iZXIsIGxpbmUgbnVtYmVyLCBsaW5lIG9mIGNvZGUsCiAqIGF1dGhvciwgYW5kIGRhdGUuCiAqLwpmdW5jdGlvbiBzdm5fYmxhbWUoJHJlcG9zaXRvcnlfdXJsLCAkcmV2aXNpb25fbm8gPSBTVk5fUkVWSVNJT05fSEVBRCkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC40LjApPGJyLz4KICogRGVsZXRlIGl0ZW1zIGZyb20gYSB3b3JraW5nIGNvcHkgb3IgcmVwb3NpdG9yeS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tZGVsZXRlLnBocAogKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogKiBQYXRoIG9mIGl0ZW0gdG8gZGVsZXRlLgogKiA8L3A+CiAqIFJlbGF0aXZlIHBhdGhzIHdpbGwgYmUgcmVzb2x2ZWQgYXMgaWYgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgd2FzIHRoZSBvbmUgdGhhdCBjb250YWlucyB0aGUgUEhQIGJpbmFyeS4gVG8gdXNlIHRoZSBjYWxsaW5nIHNjcmlwdCYjeDAwMDI3O3Mgd29ya2luZyBkaXJlY3RvcnksIHVzZSA8Yj5yZWFscGF0aDwvYj4gb3IgZGlybmFtZShfX0ZJTEVfXykuCiAqIEBwYXJhbSBib29sICRmb3JjZSBbb3B0aW9uYWxdIDxwPgogKiBJZiA8Yj5UUlVFPC9iPiwgdGhlIGZpbGUgd2lsbCBiZSBkZWxldGVkIGV2ZW4gaWYgaXQgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnMuCiAqIE90aGVyd2lzZSwgbG9jYWwgbW9kaWZpY2F0aW9ucyB3aWxsIHJlc3VsdCBpbiBhIGZhaWx1cmUuIERlZmF1bHQgaXMKICogPGI+RkFMU0U8L2I+CiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fZGVsZXRlKCRwYXRoLCAkZm9yY2UgPSBmYWxzZSkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC40LjApPGJyLz4KICogQ3JlYXRlcyBhIGRpcmVjdG9yeSBpbiBhIHdvcmtpbmcgY29weSBvciByZXBvc2l0b3J5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLW1rZGlyLnBocAogKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogKiBUaGUgcGF0aCB0byB0aGUgd29ya2luZyBjb3B5IG9yIHJlcG9zaXRvcnkuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbG9nX21lc3NhZ2UgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHN2bl9ta2RpcigkcGF0aCwgJGxvZ19tZXNzYWdlID0gbnVsbCkge30KCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZi5zdm4ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHNyY19wYXRoCiAqIEBwYXJhbSBzdHJpbmcgJGRzdF9wYXRoCiAqIEBwYXJhbSBib29sICRmb3JjZSBbb3B0aW9uYWxdCiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIHN2bl9tb3ZlKCRzcmNfcGF0aCwgJGRzdF9wYXRoLCAkZm9yY2UgPSBmYWxzZSkge30KCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZi5zdm4ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICogQHBhcmFtIGJvb2wgJHJlY3Vyc2UgW29wdGlvbmFsXQogKiBAcGFyYW0gaW50ICRyZXZpc2lvbiBbb3B0aW9uYWxdCiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIHN2bl9wcm9wbGlzdCgkcGF0aCwgJHJlY3Vyc2UgPSBmYWxzZSwgJHJldmlzaW9uKSB7fQoKLyoqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICogQHBhcmFtIHN0cmluZyAkcHJvcGVydHlfbmFtZQogKiBAcGFyYW0gYm9vbCAkcmVjdXJzZSBbb3B0aW9uYWxdCiAqIEBwYXJhbSBpbnQgJHJldmlzaW9uIFtvcHRpb25hbF0KICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24gc3ZuX3Byb3BnZXQoJHBhdGgsICRwcm9wZXJ0eV9uYW1lLCAkcmVjdXJzZSA9IGZhbHNlLCAkcmV2aXNpb24pIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMS4wKTxici8+CiAqIENyZWF0ZSBhIG5ldyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYXQgcGF0aAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1yZXBvcy1jcmVhdGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBudWxsfGFycmF5ICRjb25maWcgW29wdGlvbmFsXSA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHBhcmFtIG51bGx8YXJyYXkgJGZzY29uZmlnIFtvcHRpb25hbF0gPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2UgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX3JlcG9zX2NyZWF0ZSgkcGF0aCwgP2FycmF5ICRjb25maWcgPSBudWxsLCA/YXJyYXkgJGZzY29uZmlnID0gbnVsbCkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4xLjApPGJyLz4KICogUnVuIHJlY292ZXJ5IHByb2NlZHVyZXMgb24gdGhlIHJlcG9zaXRvcnkgbG9jYXRlZCBhdCBwYXRoLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1yZXBvcy1yZWNvdmVyLnBocAogKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX3JlcG9zX3JlY292ZXIoJHBhdGgpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMS4wKTxici8+CiAqIE1ha2UgYSBob3QtY29weSBvZiB0aGUgcmVwb3MgYXQgcmVwb3NwYXRoOyBjb3B5IGl0IHRvIGRlc3RwYXRoCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLXJlcG9zLWhvdGNvcHkucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHJlcG9zcGF0aCA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZGVzdHBhdGggPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRjbGVhbmxvZ3MgPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCBXaGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zLCBmaXJzdCBvbiBzdWNjZXNzLCB0aGVuIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fcmVwb3NfaG90Y29weSgkcmVwb3NwYXRoLCAkZGVzdHBhdGgsICRjbGVhbmxvZ3MpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMS4wKTxici8+CiAqIE9wZW4gYSBzaGFyZWQgbG9jayBvbiBhIHJlcG9zaXRvcnkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLXJlcG9zLW9wZW4ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2UgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX3JlcG9zX29wZW4oJHBhdGgpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMS4wKTxici8+CiAqIEdldHMgYSBoYW5kbGUgb24gdGhlIGZpbGVzeXN0ZW0gZm9yIGEgcmVwb3NpdG9yeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1yZXBvcy1mcy5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXBvcyA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZSBXaGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zLCBmaXJzdCBvbiBzdWNjZXNzLCB0aGVuIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fcmVwb3NfZnMoJHJlcG9zKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjIuMCk8YnIvPgogKiBDcmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tcmVwb3MtZnMtYmVnaW4tdHhuLWZvci1jb21taXQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVwb3MgPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHJldiA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkYXV0aG9yIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRsb2dfbXNnIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlIFdoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMsIGZpcnN0IG9uIHN1Y2Nlc3MsIHRoZW4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHN2bl9yZXBvc19mc19iZWdpbl90eG5fZm9yX2NvbW1pdCgkcmVwb3MsICRyZXYsICRhdXRob3IsICRsb2dfbXNnKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjIuMCk8YnIvPgogKiBDb21taXRzIGEgdHJhbnNhY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyByZXZpc2lvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1yZXBvcy1mcy1jb21taXQtdHhuLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHR4biA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHJldHVybiBpbnQgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX3JlcG9zX2ZzX2NvbW1pdF90eG4oJHR4bikge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4xLjApPGJyLz4KICogR2V0IGEgaGFuZGxlIG9uIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgcmVwb3NpdG9yeSByb290CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLWZzLXJldmlzaW9uLXJvb3QucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZnMgPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHJldm51bSA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZSBXaGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zLCBmaXJzdCBvbiBzdWNjZXNzLCB0aGVuIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fZnNfcmV2aXNpb25fcm9vdCgkZnMsICRyZXZudW0pIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMS4wKTxici8+CiAqIERldGVybWluZXMgd2hhdCBraW5kIG9mIGl0ZW0gbGl2ZXMgYXQgcGF0aCBpbiBhIGdpdmVuIHJlcG9zaXRvcnkgZnNyb290CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLWZzLWNoZWNrLXBhdGgucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZnNyb290IDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcmV0dXJuIGludCBXaGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zLCBmaXJzdCBvbiBzdWNjZXNzLCB0aGVuIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fZnNfY2hlY2tfcGF0aCgkZnNyb290LCAkcGF0aCkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4xLjApPGJyLz4KICogRmV0Y2hlcyB0aGUgdmFsdWUgb2YgYSBuYW1lZCBwcm9wZXJ0eQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1mcy1yZXZpc2lvbi1wcm9wLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGZzIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gaW50ICRyZXZudW0gPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHByb3BuYW1lIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyBXaGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zLCBmaXJzdCBvbiBzdWNjZXNzLCB0aGVuIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fZnNfcmV2aXNpb25fcHJvcCgkZnMsICRyZXZudW0sICRwcm9wbmFtZSkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4xLjApPGJyLz4KICogRW51bWVyYXRlcyB0aGUgZGlyZWN0b3J5IGVudHJpZXMgdW5kZXIgcGF0aDsgcmV0dXJucyBhIGhhc2ggb2YgZGlyIG5hbWVzIHRvIGZpbGUgdHlwZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1mcy1kaXItZW50cmllcy5waHAKICogQHBhcmFtIHJlc291cmNlICRmc3Jvb3QgPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXkgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2ZzX2Rpcl9lbnRyaWVzKCRmc3Jvb3QsICRwYXRoKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBSZXR1cm5zIHRoZSByZXZpc2lvbiBpbiB3aGljaCBwYXRoIHVuZGVyIGZzcm9vdCB3YXMgY3JlYXRlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1mcy1ub2RlLWNyZWF0ZWQtcmV2LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGZzcm9vdCA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGF0aCA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHJldHVybiBpbnQgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2ZzX25vZGVfY3JlYXRlZF9yZXYoJGZzcm9vdCwgJHBhdGgpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMS4wKTxici8+CiAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgeW91bmdlc3QgcmV2aXNpb24gaW4gdGhlIGZpbGVzeXN0ZW0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tZnMteW91bmdlc3QtcmV2LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGZzIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcmV0dXJuIGludCBXaGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zLCBmaXJzdCBvbiBzdWNjZXNzLCB0aGVuIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fZnNfeW91bmdlc3RfcmV2KCRmcykge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4xLjApPGJyLz4KICogUmV0dXJucyBhIHN0cmVhbSB0byBhY2Nlc3MgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBmcm9tIGEgZ2l2ZW4gdmVyc2lvbiBvZiB0aGUgZnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tZnMtZmlsZS1jb250ZW50cy5waHAKICogQHBhcmFtIHJlc291cmNlICRmc3Jvb3QgPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2UgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2ZzX2ZpbGVfY29udGVudHMoJGZzcm9vdCwgJHBhdGgpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMS4wKTxici8+CiAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiBhIGZpbGUgZnJvbSBhIGdpdmVuIHZlcnNpb24gb2YgdGhlIGZzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLWZzLWZpbGUtbGVuZ3RoLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGZzcm9vdCA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGF0aCA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHJldHVybiBpbnQgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2ZzX2ZpbGVfbGVuZ3RoKCRmc3Jvb3QsICRwYXRoKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjIuMCk8YnIvPgogKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgdHJhbnNhY3Rpb24gcm9vdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1mcy10eG4tcm9vdC5waHAKICogQHBhcmFtIHJlc291cmNlICR0eG4gPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2UgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2ZzX3R4bl9yb290KCR0eG4pIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMi4wKTxici8+CiAqIENyZWF0ZXMgYSBuZXcgZW1wdHkgZmlsZSwgcmV0dXJucyB0cnVlIGlmIGFsbCBpcyBvaywgZmFsc2Ugb3RoZXJ3aXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLWZzLW1ha2UtZmlsZS5waHAKICogQHBhcmFtIHJlc291cmNlICRyb290IDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2ZzX21ha2VfZmlsZSgkcm9vdCwgJHBhdGgpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMi4wKTxici8+CiAqIENyZWF0ZXMgYSBuZXcgZW1wdHkgZGlyZWN0b3J5LCByZXR1cm5zIHRydWUgaWYgYWxsIGlzIG9rLCBmYWxzZSBvdGhlcndpc2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tZnMtbWFrZS1kaXIucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcm9vdCA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGF0aCA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHJldHVybiBib29sIFdoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMsIGZpcnN0IG9uIHN1Y2Nlc3MsIHRoZW4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHN2bl9mc19tYWtlX2Rpcigkcm9vdCwgJHBhdGgpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMi4wKTxici8+CiAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBzdHJlYW0gdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVwbGFjZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1mcy1hcHBseS10ZXh0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJvb3QgPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2UgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2ZzX2FwcGx5X3RleHQoJHJvb3QsICRwYXRoKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjIuMCk8YnIvPgogKiBDb3BpZXMgYSBmaWxlIG9yIGEgZGlyZWN0b3J5LCByZXR1cm5zIHRydWUgaWYgYWxsIGlzIG9rLCBmYWxzZSBvdGhlcndpc2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tZnMtY29weS5waHAKICogQHBhcmFtIHJlc291cmNlICRmcm9tX3Jvb3QgPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGZyb21fcGF0aCA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlICR0b19yb290IDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR0b19wYXRoIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2ZzX2NvcHkoJGZyb21fcm9vdCwgJGZyb21fcGF0aCwgJHRvX3Jvb3QsICR0b19wYXRoKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjIuMCk8YnIvPgogKiBEZWxldGVzIGEgZmlsZSBvciBhIGRpcmVjdG9yeSwgcmV0dXJuIHRydWUgaWYgYWxsIGlzIG9rLCBmYWxzZSBvdGhlcndpc2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tZnMtZGVsZXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJvb3QgPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCBXaGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zLCBmaXJzdCBvbiBzdWNjZXNzLCB0aGVuIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fZnNfZGVsZXRlKCRyb290LCAkcGF0aCkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4yLjApPGJyLz4KICogQ3JlYXRlIGEgbmV3IHRyYW5zYWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLWZzLWJlZ2luLXR4bjIucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVwb3MgPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHJldiA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZSBXaGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zLCBmaXJzdCBvbiBzdWNjZXNzLCB0aGVuIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fZnNfYmVnaW5fdHhuMigkcmVwb3MsICRyZXYpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMi4wKTxici8+CiAqIFJldHVybiB0cnVlIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIGRpcmVjdG9yeSwgZmFsc2Ugb3RoZXJ3aXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3ZuLWZzLWlzLWRpci5waHAKICogQHBhcmFtIHJlc291cmNlICRyb290IDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2ZzX2lzX2Rpcigkcm9vdCwgJHBhdGgpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMi4wKTxici8+CiAqIFJldHVybiB0cnVlIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIGZpbGUsIGZhbHNlIG90aGVyd2lzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1mcy1pcy1maWxlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJvb3QgPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCBXaGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zLCBmaXJzdCBvbiBzdWNjZXNzLCB0aGVuIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fZnNfaXNfZmlsZSgkcm9vdCwgJHBhdGgpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMS4wKTxici8+CiAqIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgZm9yIGEgbm9kZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1mcy1ub2RlLXByb3AucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZnNyb290IDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwcm9wbmFtZSA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2ZzX25vZGVfcHJvcCgkZnNyb290LCAkcGF0aCwgJHByb3BuYW1lKSB7fQoKLyoqCiAqIChQRUNMIHN2biAmZ3Q7PSAwLjIuMCk8YnIvPgogKiBSZXR1cm4gdHJ1ZSBpZiBldmVyeXRoaW5nIGlzIG9rLCBmYWxzZSBvdGhlcndpc2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zdm4tZnMtY2hhbmdlLW5vZGUtcHJvcC5waHAKICogQHBhcmFtIHJlc291cmNlICRyb290IDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHJldHVybiBib29sIFdoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMsIGZpcnN0IG9uIHN1Y2Nlc3MsIHRoZW4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHN2bl9mc19jaGFuZ2Vfbm9kZV9wcm9wKCRyb290LCAkcGF0aCwgJG5hbWUsICR2YWx1ZSkge30KCi8qKgogKiAoUEVDTCBzdm4gJmd0Oz0gMC4yLjApPGJyLz4KICogUmV0dXJuIHRydWUgaWYgY29udGVudCBpcyBkaWZmZXJlbnQsIGZhbHNlIG90aGVyd2lzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1mcy1jb250ZW50cy1jaGFuZ2VkLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJvb3QxIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXRoMSA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlICRyb290MiA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGF0aDIgPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCBXaGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zLCBmaXJzdCBvbiBzdWNjZXNzLCB0aGVuIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fZnNfY29udGVudHNfY2hhbmdlZCgkcm9vdDEsICRwYXRoMSwgJHJvb3QyLCAkcGF0aDIpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMi4wKTxici8+CiAqIFJldHVybiB0cnVlIGlmIHByb3BzIGFyZSBkaWZmZXJlbnQsIGZhbHNlIG90aGVyd2lzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1mcy1wcm9wcy1jaGFuZ2VkLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJvb3QxIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXRoMSA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlICRyb290MiA8cD4KICogSXRzIGRlc2NyaXB0aW9uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGF0aDIgPHA+CiAqIEl0cyBkZXNjcmlwdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCBXaGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zLCBmaXJzdCBvbiBzdWNjZXNzLCB0aGVuIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzdm5fZnNfcHJvcHNfY2hhbmdlZCgkcm9vdDEsICRwYXRoMSwgJHJvb3QyLCAkcGF0aDIpIHt9CgovKioKICogKFBFQ0wgc3ZuICZndDs9IDAuMi4wKTxici8+CiAqIEFib3J0IGEgdHJhbnNhY3Rpb24sIHJldHVybnMgdHJ1ZSBpZiBldmVyeXRoaW5nIGlzIG9rYXksIGZhbHNlIG90aGVyd2lzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN2bi1mcy1hYm9ydC10eG4ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkdHhuIDxwPgogKiBJdHMgZGVzY3JpcHRpb24KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgV2hhdCB0aGUgZnVuY3Rpb24gcmV0dXJucywgZmlyc3Qgb24gc3VjY2VzcywgdGhlbiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3ZuX2ZzX2Fib3J0X3R4bigkdHhuKSB7fQoKLyoqCiAqIFByb3BlcnR5IGZvciBkZWZhdWx0IHVzZXJuYW1lIHRvIHVzZSB3aGVuIHBlcmZvcm1pbmcgYmFzaWMgYXV0aGVudGljYXRpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zdm4uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTVk5fQVVUSF9QQVJBTV9ERUZBVUxUX1VTRVJOQU1FJywgInN2bjphdXRoOnVzZXJuYW1lIik7CgovKioKICogUHJvcGVydHkgZm9yIGRlZmF1bHQgcGFzc3dvcmQgdG8gdXNlIHdoZW4gcGVyZm9ybWluZyBiYXNpYyBhdXRoZW50aWNhdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3N2bi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NWTl9BVVRIX1BBUkFNX0RFRkFVTFRfUEFTU1dPUkQnLCAic3ZuOmF1dGg6cGFzc3dvcmQiKTsKZGVmaW5lKCdTVk5fQVVUSF9QQVJBTV9OT05fSU5URVJBQ1RJVkUnLCAic3ZuOmF1dGg6bm9uLWludGVyYWN0aXZlIik7CmRlZmluZSgnU1ZOX0FVVEhfUEFSQU1fRE9OVF9TVE9SRV9QQVNTV09SRFMnLCAic3ZuOmF1dGg6ZG9udC1zdG9yZS1wYXNzd29yZHMiKTsKZGVmaW5lKCdTVk5fQVVUSF9QQVJBTV9OT19BVVRIX0NBQ0hFJywgInN2bjphdXRoOm5vLWF1dGgtY2FjaGUiKTsKZGVmaW5lKCdTVk5fQVVUSF9QQVJBTV9TU0xfU0VSVkVSX0ZBSUxVUkVTJywgInN2bjphdXRoOnNzbDpmYWlsdXJlcyIpOwpkZWZpbmUoJ1NWTl9BVVRIX1BBUkFNX1NTTF9TRVJWRVJfQ0VSVF9JTkZPJywgInN2bjphdXRoOnNzbDpjZXJ0LWluZm8iKTsKZGVmaW5lKCdTVk5fQVVUSF9QQVJBTV9DT05GSUcnLCAic3ZuOmF1dGg6Y29uZmlnLWNhdGVnb3J5LXNlcnZlcnMiKTsKZGVmaW5lKCdTVk5fQVVUSF9QQVJBTV9TRVJWRVJfR1JPVVAnLCAic3ZuOmF1dGg6c2VydmVyLWdyb3VwIik7CmRlZmluZSgnU1ZOX0FVVEhfUEFSQU1fQ09ORklHX0RJUicsICJzdm46YXV0aDpjb25maWctZGlyIik7CgovKioKICogQ3VzdG9tIHByb3BlcnR5IGZvciBpZ25vcmluZyBTU0wgY2VydCB2ZXJpZmljYXRpb24gZXJyb3JzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3ZuLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUEhQX1NWTl9BVVRIX1BBUkFNX0lHTk9SRV9TU0xfVkVSSUZZX0VSUk9SUycsICJwaHA6c3ZuOmF1dGg6aWdub3JlLXNzbC12ZXJpZnktZXJyb3JzIik7CgovKioKICogQ29uZmlndXJhdGlvbiBrZXkgdGhhdCBkZXRlcm1pbmVzIGZpbGVzeXN0ZW0gdHlwZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3N2bi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NWTl9GU19DT05GSUdfRlNfVFlQRScsICJmcy10eXBlIik7CgovKioKICogRmlsZXN5c3RlbSBpcyBCZXJrZWxleS1EQiBpbXBsZW1lbnRhdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3N2bi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NWTl9GU19UWVBFX0JEQicsICJiZGIiKTsKCi8qKgogKiBGaWxlc3lzdGVtIGlzIG5hdGl2ZS1maWxlc3lzdGVtIGltcGxlbWVudGF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3ZuLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1ZOX0ZTX1RZUEVfRlNGUycsICJmc2ZzIik7CgovKioKICogc3ZuOmRhdGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zdm4uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTVk5fUFJPUF9SRVZJU0lPTl9EQVRFJywgInN2bjpkYXRlIik7CgovKioKICogc3ZuOm9yaWdpbmFsLWRhdGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zdm4uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTVk5fUFJPUF9SRVZJU0lPTl9PUklHX0RBVEUnLCAic3ZuOm9yaWdpbmFsLWRhdGUiKTsKCi8qKgogKiBzdm46YXV0aG9yCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3ZuLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1ZOX1BST1BfUkVWSVNJT05fQVVUSE9SJywgInN2bjphdXRob3IiKTsKCi8qKgogKiBzdm46bG9nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3ZuLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1ZOX1BST1BfUkVWSVNJT05fTE9HJywgInN2bjpsb2ciKTsKZGVmaW5lKCdTVk5fUkVWSVNJT05fSU5JVElBTCcsIDEpOwoKLyoqCiAqIE1hZ2ljIG51bWJlciAoLTEpIHNwZWNpZnlpbmcgdGhlIEhFQUQgcmV2aXNpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zdm4uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTVk5fUkVWSVNJT05fSEVBRCcsIC0xKTsKZGVmaW5lKCdTVk5fUkVWSVNJT05fQkFTRScsIC0yKTsKZGVmaW5lKCdTVk5fUkVWSVNJT05fQ09NTUlUVEVEJywgLTMpOwpkZWZpbmUoJ1NWTl9SRVZJU0lPTl9QUkVWJywgLTQpOwpkZWZpbmUoJ1NWTl9SRVZJU0lPTl9VTlNQRUNJRklFRCcsIC01KTsKZGVmaW5lKCdTVk5fTk9OX1JFQ1VSU0lWRScsIDEpOwpkZWZpbmUoJ1NWTl9ESVNDT1ZFUl9DSEFOR0VEX1BBVEhTJywgMik7CmRlZmluZSgnU1ZOX09NSVRfTUVTU0FHRVMnLCA0KTsKZGVmaW5lKCdTVk5fU1RPUF9PTl9DT1BZJywgOCk7CmRlZmluZSgnU1ZOX0FMTCcsIDE2KTsKZGVmaW5lKCdTVk5fU0hPV19VUERBVEVTJywgMzIpOwpkZWZpbmUoJ1NWTl9OT19JR05PUkUnLCA2NCk7CgovKioKICogU3RhdHVzIGRvZXMgbm90IGV4aXN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3ZuLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1ZOX1dDX1NUQVRVU19OT05FJywgMSk7CgovKioKICogSXRlbSBpcyBub3QgdmVyc2lvbmVkIGluIHdvcmtpbmcgY29weQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3N2bi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NWTl9XQ19TVEFUVVNfVU5WRVJTSU9ORUQnLCAyKTsKCi8qKgogKiBJdGVtIGV4aXN0cywgbm90aGluZyBlbHNlIGlzIGhhcHBlbmluZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3N2bi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NWTl9XQ19TVEFUVVNfTk9STUFMJywgMyk7CgovKioKICogSXRlbSBpcyBzY2hlZHVsZWQgZm9yIGFkZGl0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3ZuLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1ZOX1dDX1NUQVRVU19BRERFRCcsIDQpOwoKLyoqCiAqIEl0ZW0gaXMgdmVyc2lvbmVkIGJ1dCBtaXNzaW5nIGZyb20gdGhlIHdvcmtpbmcgY29weQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3N2bi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NWTl9XQ19TVEFUVVNfTUlTU0lORycsIDUpOwoKLyoqCiAqIEl0ZW0gaXMgc2NoZWR1bGVkIGZvciBkZWxldGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3N2bi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NWTl9XQ19TVEFUVVNfREVMRVRFRCcsIDYpOwoKLyoqCiAqIEl0ZW0gd2FzIGRlbGV0ZWQgYW5kIHRoZW4gcmUtYWRkZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zdm4uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTVk5fV0NfU1RBVFVTX1JFUExBQ0VEJywgNyk7CgovKioKICogSXRlbSAodGV4dCBvciBwcm9wZXJ0aWVzKSB3YXMgbW9kaWZpZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zdm4uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTVk5fV0NfU1RBVFVTX01PRElGSUVEJywgOCk7CgovKioKICogSXRlbSdzIGxvY2FsIG1vZGlmaWNhdGlvbnMgd2VyZSBtZXJnZWQgd2l0aCByZXBvc2l0b3J5IG1vZGlmaWNhdGlvbnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zdm4uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTVk5fV0NfU1RBVFVTX01FUkdFRCcsIDkpOwoKLyoqCiAqIEl0ZW0ncyBsb2NhbCBtb2RpZmljYXRpb25zIGNvbmZsaWN0ZWQgd2l0aCByZXBvc2l0b3J5IG1vZGlmaWNhdGlvbnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zdm4uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTVk5fV0NfU1RBVFVTX0NPTkZMSUNURUQnLCAxMCk7CgovKioKICogSXRlbSBpcyB1bnZlcnNpb25lZCBidXQgY29uZmlndXJlZCB0byBiZSBpZ25vcmVkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3ZuLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1ZOX1dDX1NUQVRVU19JR05PUkVEJywgMTEpOwoKLyoqCiAqIFVudmVyc2lvbmVkIGl0ZW0gaXMgaW4gdGhlIHdheSBvZiBhIHZlcnNpb25lZCByZXNvdXJjZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3N2bi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NWTl9XQ19TVEFUVVNfT0JTVFJVQ1RFRCcsIDEyKTsKCi8qKgogKiBVbnZlcnNpb25lZCBwYXRoIHRoYXQgaXMgcG9wdWxhdGVkIHVzaW5nIHN2bjpleHRlcm5hbHMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zdm4uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTVk5fV0NfU1RBVFVTX0VYVEVSTkFMJywgMTMpOwoKLyoqCiAqIERpcmVjdG9yeSBkb2VzIG5vdCBjb250YWluIGNvbXBsZXRlIGVudHJpZXMgbGlzdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3N2bi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NWTl9XQ19TVEFUVVNfSU5DT01QTEVURScsIDE0KTsKCi8qKgogKiBBYnNlbnQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zdm4uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTVk5fTk9ERV9OT05FJywgMCk7CgovKioKICogRmlsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3N2bi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NWTl9OT0RFX0ZJTEUnLCAxKTsKCi8qKgogKiBEaXJlY3RvcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zdm4uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTVk5fTk9ERV9ESVInLCAyKTsKCi8qKgogKiBTb21ldGhpbmcgU3VidmVyc2lvbiBjYW5ub3QgaWRlbnRpZnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zdm4uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTVk5fTk9ERV9VTktOT1dOJywgMyk7CmRlZmluZSgnU1ZOX1dDX1NDSEVEVUxFX05PUk1BTCcsIDApOwpkZWZpbmUoJ1NWTl9XQ19TQ0hFRFVMRV9BREQnLCAxKTsKZGVmaW5lKCdTVk5fV0NfU0NIRURVTEVfREVMRVRFJywgMik7CmRlZmluZSgnU1ZOX1dDX1NDSEVEVUxFX1JFUExBQ0UnLCAzKTsKPD9waHAKCi8vIFN0YXJ0IG9mIGV4aWYgdi4xLjQgJElkJAp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXERlcHJlY2F0ZWQ7CgovKioKICogUmVhZHMgdGhlIEVYSUYgaGVhZGVycyBmcm9tIEpQRUcgb3IgVElGRgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmV4aWYtcmVhZC1kYXRhLnBocAogKiBAcGFyYW0gc3RyaW5nICRmaWxlIDxwPgogKiBUaGUgbG9jYXRpb24gb2YgdGhlIGltYWdlIGZpbGUuIFRoaXMgY2Fubm90IGJlIGFuIFVSTC4KICogU2luY2UgNy4yLjAgdGhpcyBjYW4gZWl0aGVyIGJlIGEgcGF0aCB0byB0aGUgZmlsZSAoc3RyZWFtIHdyYXBwZXJzIGFyZSBhbHNvIHN1cHBvcnRlZCBhcyB1c3VhbCkKICogb3IgYSBzdHJlYW0gcmVzb3VyY2UuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXF1aXJlZF9zZWN0aW9ucyBbb3B0aW9uYWxdIDxwPgogKiBJcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHNlY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBwcmVzZW50IGluIGZpbGUKICogdG8gcHJvZHVjZSBhIHJlc3VsdCBhcnJheS4gSWYgbm9uZSBvZiB0aGUgcmVxdWVzdGVkCiAqIHNlY3Rpb25zIGNvdWxkIGJlIGZvdW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgPGI+RkFMU0U8L2I+LgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+RklMRTwvdGQ+CiAqIDx0ZD5GaWxlTmFtZSwgRmlsZVNpemUsIEZpbGVEYXRlVGltZSwgU2VjdGlvbnNGb3VuZDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5DT01QVVRFRDwvdGQ+CiAqIDx0ZD4KICogaHRtbCwgV2lkdGgsIEhlaWdodCwgSXNDb2xvciwgYW5kIG1vcmUgaWYgYXZhaWxhYmxlLiBIZWlnaHQgYW5kCiAqIFdpZHRoIGFyZSBjb21wdXRlZCB0aGUgc2FtZSB3YXkgPGI+Z2V0aW1hZ2VzaXplPC9iPgogKiBkb2VzIHNvIHRoZWlyIHZhbHVlcyBtdXN0IG5vdCBiZSBwYXJ0IG9mIGFueSBoZWFkZXIgcmV0dXJuZWQuCiAqIEFsc28sIGh0bWwgaXMgYSBoZWlnaHQvd2lkdGggdGV4dCBzdHJpbmcgdG8gYmUgdXNlZCBpbnNpZGUgbm9ybWFsCiAqIEhUTUwuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5BTllfVEFHPC90ZD4KICogPHRkPkFueSBpbmZvcm1hdGlvbiB0aGF0IGhhcyBhIFRhZyBlLmcuIElGRDAsIEVYSUYsIC4uLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5JRkQwPC90ZD4KICogPHRkPgogKiBBbGwgdGFnZ2VkIGRhdGEgb2YgSUZEMC4gSW4gbm9ybWFsIGltYWdlZmlsZXMgdGhpcyBjb250YWlucwogKiBpbWFnZSBzaXplIGFuZCBzbyBmb3J0aC4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlRIVU1CTkFJTDwvdGQ+CiAqIDx0ZD4KICogQSBmaWxlIGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4gYSB0aHVtYm5haWwgaWYgaXQgaGFzIGEgc2Vjb25kIElGRC4KICogQWxsIHRhZ2dlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW1iZWRkZWQgdGh1bWJuYWlsIGlzIHN0b3JlZCBpbgogKiB0aGlzIHNlY3Rpb24uCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5DT01NRU5UPC90ZD4KICogPHRkPkNvbW1lbnQgaGVhZGVycyBvZiBKUEVHIGltYWdlcy48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+RVhJRjwvdGQ+CiAqIDx0ZD4KICogVGhlIEVYSUYgc2VjdGlvbiBpcyBhIHN1YiBzZWN0aW9uIG9mIElGRDAuIEl0IGNvbnRhaW5zCiAqIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYW4gaW1hZ2UuIE1vc3Qgb2YgdGhlc2UgZW50cmllcwogKiBhcmUgZGlnaXRhbCBjYW1lcmEgcmVsYXRlZC4KICogPC90ZD4KICogPC90cj4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkYXNfYXJyYXlzIFtvcHRpb25hbF0gPHA+CiAqIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBlYWNoIHNlY3Rpb24gYmVjb21lcyBhbiBhcnJheS4gVGhlCiAqIDxpPnNlY3Rpb25zPC9pPiBDT01QVVRFRCwKICogVEhVTUJOQUlMLCBhbmQgQ09NTUVOVAogKiBhbHdheXMgYmVjb21lIGFycmF5cyBhcyB0aGV5IG1heSBjb250YWluIHZhbHVlcyB3aG9zZSBuYW1lcyBjb25mbGljdAogKiB3aXRoIG90aGVyIHNlY3Rpb25zLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRyZWFkX3RodW1ibmFpbCBbb3B0aW9uYWxdIDxwPgogKiBXaGVuIHNldCB0byA8Yj5UUlVFPC9iPiB0aGUgdGh1bWJuYWlsIGl0c2VsZiBpcyByZWFkLiBPdGhlcndpc2UsIG9ubHkgdGhlCiAqIHRhZ2dlZCBkYXRhIGlzIHJlYWQuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBJdCByZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IHdoZXJlIHRoZSBhcnJheSBpbmRleGVzIGFyZQogKiB0aGUgaGVhZGVyIG5hbWVzIGFuZCB0aGUgYXJyYXkgdmFsdWVzIGFyZSB0aGUgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aAogKiB0aG9zZSBoZWFkZXJzLiBJZiBubyBkYXRhIGNhbiBiZSByZXR1cm5lZCwKICogPGI+ZXhpZl9yZWFkX2RhdGE8L2I+IHdpbGwgcmV0dXJuIDxiPkZBTFNFPC9iPi4KICovCmZ1bmN0aW9uIGV4aWZfcmVhZF9kYXRhKCRmaWxlLCA/c3RyaW5nICRyZXF1aXJlZF9zZWN0aW9ucywgYm9vbCAkYXNfYXJyYXlzID0gZmFsc2UsIGJvb2wgJHJlYWRfdGh1bWJuYWlsID0gZmFsc2UpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEFsaWFzIG9mIDxiPmV4aWZfcmVhZF9kYXRhPC9iPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnJlYWQtZXhpZi1kYXRhLnBocAogKiBAcGFyYW0gJGZpbGVuYW1lCiAqIEBwYXJhbSAkc2VjdGlvbnMgW29wdGlvbmFsXQogKiBAcGFyYW0gJGFycmF5cyBbb3B0aW9uYWxdCiAqIEBwYXJhbSAkdGh1bWJuYWlsIFtvcHRpb25hbF0KICogQHJlbW92ZWQgOC4wCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICJleGlmX3JlYWRfZGF0YSglcGFyYW1ldGVyc0xpc3QlKSIsIHNpbmNlOiAiNy4yIildCmZ1bmN0aW9uIHJlYWRfZXhpZl9kYXRhKCRmaWxlbmFtZSwgJHNlY3Rpb25zID0gbnVsbCwgJGFycmF5cyA9IGZhbHNlLCAkdGh1bWJuYWlsID0gZmFsc2UpIHt9CgovKioKICogR2V0IHRoZSBoZWFkZXIgbmFtZSBmb3IgYW4gaW5kZXgKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5leGlmLXRhZ25hbWUucGhwCiAqIEBwYXJhbSBpbnQgJGluZGV4IDxwPgogKiBUaGUgVGFnIElEIGZvciB3aGljaCBhIFRhZyBOYW1lIHdpbGwgYmUgbG9va2VkIHVwLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBoZWFkZXIgbmFtZSwgb3IgPGI+RkFMU0U8L2I+IGlmIDxpPmluZGV4PC9pPiBpcwogKiBub3QgYSBkZWZpbmVkIEVYSUYgdGFnIGlkLgogKi8KZnVuY3Rpb24gZXhpZl90YWduYW1lKGludCAkaW5kZXgpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBSZXRyaWV2ZSB0aGUgZW1iZWRkZWQgdGh1bWJuYWlsIG9mIGEgVElGRiBvciBKUEVHIGltYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZXhpZi10aHVtYm5haWwucGhwCiAqIEBwYXJhbSBzdHJpbmd8cmVzb3VyY2UgJGZpbGUgPHA+CiAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgaW1hZ2UgZmlsZS4gVGhpcyBjYW5ub3QgYmUgYW4gVVJMLgogKiBTaW5jZSA3LjIuMCB0aGlzIGNhbiBlaXRoZXIgYmUgYSBwYXRoIHRvIHRoZSBmaWxlIChzdHJlYW0gd3JhcHBlcnMgYXJlIGFsc28gc3VwcG9ydGVkIGFzIHVzdWFsKQogKiBvciBhIHN0cmVhbSByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICYkd2lkdGggW29wdGlvbmFsXSA8cD4KICogVGhlIHJldHVybiB3aWR0aCBvZiB0aGUgcmV0dXJuZWQgdGh1bWJuYWlsLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJiRoZWlnaHQgW29wdGlvbmFsXSA8cD4KICogVGhlIHJldHVybmVkIGhlaWdodCBvZiB0aGUgcmV0dXJuZWQgdGh1bWJuYWlsLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJiRpbWFnZV90eXBlIFtvcHRpb25hbF0gPHA+CiAqIFRoZSByZXR1cm5lZCBpbWFnZSB0eXBlIG9mIHRoZSByZXR1cm5lZCB0aHVtYm5haWwuIFRoaXMgaXMgZWl0aGVyCiAqIFRJRkYgb3IgSlBFRy4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgZW1iZWRkZWQgdGh1bWJuYWlsLCBvciA8Yj5GQUxTRTwvYj4gaWYgdGhlIGltYWdlIGNvbnRhaW5zIG5vCiAqIHRodW1ibmFpbC4KICovCmZ1bmN0aW9uIGV4aWZfdGh1bWJuYWlsKCRmaWxlLCAmJHdpZHRoLCAmJGhlaWdodCwgJiRpbWFnZV90eXBlKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGFuIGltYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZXhpZi1pbWFnZXR5cGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBpbWFnZSBiZWluZyBjaGVja2VkLgogKiBAcmV0dXJuIGludHxmYWxzZSBXaGVuIGEgY29ycmVjdCBzaWduYXR1cmUgaXMgZm91bmQsIHRoZSBhcHByb3ByaWF0ZSBjb25zdGFudCB2YWx1ZSB3aWxsIGJlCiAqIHJldHVybmVkIG90aGVyd2lzZSB0aGUgcmV0dXJuIHZhbHVlIGlzIDxiPkZBTFNFPC9iPi4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUKICogc2FtZSB2YWx1ZSB0aGF0IDxiPmdldGltYWdlc2l6ZTwvYj4gcmV0dXJucyBpbiBpbmRleCAyIGJ1dAogKiA8Yj5leGlmX2ltYWdldHlwZTwvYj4gaXMgbXVjaCBmYXN0ZXIuCiAqIDwvcD4KICogPHA+CiAqIDxiPmV4aWZfaW1hZ2V0eXBlPC9iPiB3aWxsIGVtaXQgYW4gPGI+RV9OT1RJQ0U8L2I+CiAqIGFuZCByZXR1cm4gPGI+RkFMU0U8L2I+IGlmIGl0IGlzIHVuYWJsZSB0byByZWFkIGVub3VnaCBieXRlcyBmcm9tIHRoZSBmaWxlIHRvCiAqIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZS4KICovCmZ1bmN0aW9uIGV4aWZfaW1hZ2V0eXBlKHN0cmluZyAkZmlsZW5hbWUpOiBpbnR8ZmFsc2Uge30KCmRlZmluZSgnRVhJRl9VU0VfTUJTVFJJTkcnLCAxKTsKCi8vIEVuZCBvZiBleGlmIHYuMS40ICRJZCQKPD9waHAKCi8vIFN0dWJzIGZvciBleHQtdXY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbXBocC9waHAtdXYKCi8qKgogKiBEZWNyZW1lbnQgcmVmZXJlbmNlLgogKgogKiBAcGFyYW0gVVYgJHV2X3QgdXYgaGFuZGxlLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3VucmVmKCR1dl90KSB7fQoKLyoqCiAqIEdldCBsYXN0IGVycm9yIGNvZGUuCiAqCiAqIEBwYXJhbSBVVkxvb3B8bnVsbCAkdXZfbG9vcCB1diBsb29wIGhhbmRsZS4KICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHV2X2xhc3RfZXJyb3IoJHV2X2xvb3AgPSBudWxsKTogaW50IHt9CgovKioKICogR2V0IGVycm9yIGNvZGUgbmFtZS4KICoKICogQHBhcmFtIGludCAkZXJyb3JfY29kZSBsaWJ1diBlcnJvciBjb2RlLgogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gdXZfZXJyX25hbWUoaW50ICRlcnJvcl9jb2RlKTogc3RyaW5nIHt9CgovKioKICogR2V0IGVycm9yIG1lc3NhZ2UuCiAqCiAqIEBwYXJhbSBpbnQgJGVycm9yX2NvZGUgbGlidXYgZXJyb3IgY29kZQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gdXZfc3RyZXJyb3IoaW50ICRlcnJvcl9jb2RlKTogc3RyaW5nIHt9CgovKioKICogQHBhcmFtIFVWTG9vcCAkdXZfbG9vcCB1diBsb29wIGhhbmRsZS4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl91cGRhdGVfdGltZSgkdXZfbG9vcCkge30KCi8qKgogKiBJbmNyZW1lbnQgcmVmZXJlbmNlIGNvdW50LgogKgogKiBAcGFyYW0gVVYgJHV2X2hhbmRsZQogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3JlZigkdXZfaGFuZGxlKSB7fQoKLyoqCiAqIFJ1biBldmVudCBsb29wLgogKgogKiBAcGFyYW0gVVZMb29wfG51bGwgJHV2X2xvb3AKICogQHBhcmFtIGludCAkcnVuX21vZGUgUnVuIGZsYWdzLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3J1bigkdXZfbG9vcCA9IG51bGwsICRydW5fbW9kZSA9IFVWOjpSVU5fREVGQVVMVCkge30KCi8qKgogKiBAcGFyYW0gVVZMb29wfG51bGwgJHV2X2xvb3AKICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9ydW5fb25jZSgkdXZfbG9vcCA9IG51bGwpIHt9CgovKioKICogRGVsZXRlIHNwZWNpZmllZCBsb29wLgogKgogKiBAcGFyYW0gVVZMb29wICR1dl9sb29wCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfbG9vcF9kZWxldGUoJHV2X2xvb3ApIHt9CgovKioKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHV2X25vdygpOiBpbnQge30KCi8qKgogKiBCaW5kcyBhIG5hbWUgdG8gYSBzb2NrZXQuCiAqCiAqIEBwYXJhbSBVVlRjcCAkdXZfdGNwCiAqIEBwYXJhbSBVVlNvY2tBZGRyICR1dl9zb2NrYWRkcgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3RjcF9iaW5kKCR1dl90Y3AsICR1dl9zb2NrYWRkcikge30KCi8qKgogKiBCaW5kcyBhIG5hbWUgdG8gYSBzb2NrZXQuCiAqCiAqIEBwYXJhbSBVVlRjcCAkdXZfdGNwCiAqIEBwYXJhbSBVVlNvY2tBZGRyICR1dl9zb2NrYWRkcgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3RjcF9iaW5kNigkdXZfdGNwLCAkdXZfc29ja2FkZHIpIHt9CgovKioKICogU2VuZCBidWZmZXIgdG8gc3BlY2lmaWVkIHV2IHN0cmVhbS4KICoKICogQHBhcmFtIFVWU3RyZWFtICRoYW5kbGUgdXYgc3RyZWFtICh1dl90Y3AsIHV2X3VkcCwgdXZfcGlwZSAuLi5ldGMuKS4KICogQHBhcmFtIHN0cmluZyAkZGF0YSBidWZmZXIuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgY2FsbGFibGUgdmFyaWFibGVzLiBUaGlzIGNhbGxiYWNrIGV4cGVjdHMgKFVWU3RyZWFtICRoYW5kbGUsIGxvbmcgJHN0YXR1cykuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfd3JpdGUoJGhhbmRsZSwgc3RyaW5nICRkYXRhLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogQHBhcmFtIFVWU3RyZWFtICRoYW5kbGUKICogQHBhcmFtIHN0cmluZyAkZGF0YQogKiBAcGFyYW0gVVZUY3B8VXZQaXBlICRzZW5kCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl93cml0ZTIoJGhhbmRsZSwgc3RyaW5nICRkYXRhLCAkc2VuZCwgY2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKLyoqCiAqIFNldCBOYWdlbCdzIGZsYWdzIGZvciBzcGVjaWZpZWQgdGNwIHN0cmVhbS4KICoKICogQHBhcmFtIFVWVGNwICRoYW5kbGUgbGlidXYgdGNwIGhhbmRsZS4KICogQHBhcmFtIGJvb2wgJGVuYWJsZSB0cnVlIG1lYW5zIGVuYWJsZWQuIGZhbHNlIG1lYW5zIGRpc2FibGVkLgogKi8KZnVuY3Rpb24gdXZfdGNwX25vZGVsYXkoJGhhbmRsZSwgYm9vbCAkZW5hYmxlKSB7fQoKLyoqCiAqIEFjY2VwdHMgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0LgogKgogKiBAcGFyYW0gVVZUY3B8VVZQaXBlICRzZXJ2ZXIgdXZfdGNwIG9yIHV2X3BpcGUgc2VydmVyLgogKiBAcGFyYW0gVVZUY3B8VVZQaXBlICRjbGllbnQgdXZfdGNwIG9yIHV2X3BpcGUgY2xpZW50LgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2FjY2VwdCgkc2VydmVyLCAkY2xpZW50KSB7fQoKLyoqCiAqIFNodXRkb3duIHV2IGhhbmRsZS4KICoKICogQHBhcmFtIFVWU3RyZWFtICRoYW5kbGUgdXYgc3RyZWFtICh1dl90Y3AsIHV2X3VkcCwgdXZfcGlwZSAuLi5ldGMuKS4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBjYWxsYWJsZSB2YXJpYWJsZXMuIHRoaXMgY2FsbGJhY2sgZXhwZWN0cyAoVVZTdHJlYW0gJGhhbmRsZSwgbG9uZyAkc3RhdHVzKS4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9zaHV0ZG93bigkaGFuZGxlLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogQ2xvc2UgdXYgaGFuZGxlLgogKgogKiBAcGFyYW0gVVYgJGhhbmRsZSB1diBoYW5kbGUgKHV2X3RjcCwgdXZfdWRwLCB1dl9waXBlIC4uLmV0Yy4pLgogKiBAcGFyYW0gP2NhbGxhYmxlICRjYWxsYmFjayBjYWxsYWJsZSB2YXJpYWJsZXMuIHRoaXMgY2FsbGJhY2sgZXhwZWN0cyAoVVYgJGhhbmRsZSwgbG9uZyAkc3RhdHVzKS4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9jbG9zZSgkaGFuZGxlLCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsKSB7fQoKLyoqCiAqIFN0YXJ0cyByZWFkIGNhbGxiYWNrIGZvciB1diBzdHJlYW1zLgogKgogKiBOb3RlOiBZb3UgaGF2ZSB0byBoYW5kbGUgZXJyb3JzIGNvcnJlY3RseS4gb3RoZXJ3aXNlIHRoaXMgd2lsbCBsZWFrLgogKiBOb3RlOiBpZiB5b3Ugd2FudCB0byB1c2UgUEhQJ3Mgc3RyZWFtIG9yIHNvY2tldCByZXNvdXJjZS4gc2VlIHV2X2ZzX3BvbGxfaW5pdCBhbmQgdXZfZnNfcmVhZC4KICoKICogQHBhcmFtIFVWU3RyZWFtICRoYW5kbGUgdXYgc3RyZWFtICh1dl90Y3AsIHV2X3VkcCwgdXZfcGlwZSAuLi5ldGMuKQogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIGNhbGxhYmxlIHZhcmlhYmxlcy4gdGhpcyBjYWxsYmFjayBwYXJhbWV0ZXIgZXhwZWN0cyAoVVZTdHJlYW0gJGhhbmRsZSwgbG9uZyAkbnJlYWQsIHN0cmluZyBidWZmZXIpLgogKi8KZnVuY3Rpb24gdXZfcmVhZF9zdGFydCgkaGFuZGxlLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogU3RvcCByZWFkIGNhbGxiYWNrLgogKgogKiBAcGFyYW0gVVZTdHJlYW0gJGhhbmRsZSB1diBzdHJlYW0gaGFuZGxlIHdoaWNoIHN0YXJ0ZWQgdXZfcmVhZC4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9yZWFkX3N0b3AoJGhhbmRsZSkge30KCi8qKgogKiBDcmVhdGUgYSBpcHY0IHNvY2thZGRyLgogKgogKiBAcGFyYW0gc3RyaW5nICRpcHY0X2FkZHIgaXB2NCBhZGRyZXNzCiAqIEBwYXJhbSBpbnQgJHBvcnQgcG9ydCBudW1iZXIuCiAqCiAqIEByZXR1cm4gVVZTb2NrQWRkcklQdjQKICovCmZ1bmN0aW9uIHV2X2lwNF9hZGRyKHN0cmluZyAkaXB2NF9hZGRyLCBpbnQgJHBvcnQpIHt9CgovKioKICogQ3JlYXRlIGEgaXB2NiBzb2NrYWRkci4KICoKICogQHBhcmFtIHN0cmluZyAkaXB2Nl9hZGRyIGlwdjYgYWRkcmVzcy4KICogQHBhcmFtIGludCAkcG9ydCBwb3J0IG51bWJlci4KICoKICogQHJldHVybiBVVlNvY2tBZGRySVB2NgogKi8KZnVuY3Rpb24gdXZfaXA2X2FkZHIoc3RyaW5nICRpcHY2X2FkZHIsIGludCAkcG9ydCkge30KCi8qKgogKiBMaXN0ZW5zIGZvciBhIGNvbm5lY3Rpb24gb24gYSB1diBoYW5kbGUuCiAqCiAqIEBwYXJhbSBVVlRjcHxVVlBpcGUgJGhhbmRsZSB1diBoYW5kbGUgKHRjcCwgdWRwIGFuZCBwaXBlKS4KICogQHBhcmFtIGludCAkYmFja2xvZyBiYWNrbG9nLgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIHRoaXMgY2FsbGJhY2sgcGFyYW1ldGVyIGV4cGVjdHMgKFVWVGNwfFVWUGlwZSAkY29ubmVjdGlvbiwgbG9uZyAkc3RhdHVzKS4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9saXN0ZW4oJGhhbmRsZSwgaW50ICRiYWNrbG9nLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogQ29ubmVjdCB0byBzcGVjaWZpZWQgaXAgYWRkcmVzcyBhbmQgcG9ydC4KICoKICogQHBhcmFtIFVWVGNwICRoYW5kbGUgcmVxdWlyZXMgdXZfdGNwX2luaXQoKS4KICogQHBhcmFtIFVWU29ja0FkZHIgJGlwdjRfYWRkciByZXF1aXJlcyB1dl9zb2NrYWRkci4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBjYWxsYWJsZSB2YXJpYWJsZXMuIFRoaXMgY2FsbGJhY2sgZXhwZWN0cyAoVVZUY3AgJHRjcF9oYW5kbGUsICRzdGF0dXMpLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3RjcF9jb25uZWN0KCRoYW5kbGUsICRpcHY0X2FkZHIsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBDb25uZWN0IHRvIHNwZWNpZmllZCBpcCBhZGRyZXNzIGFuZCBwb3J0LgogKgogKiBAcGFyYW0gVVZUY3AgJGhhbmRsZSByZXF1aXJlcyB1dl90Y3BfaW5pdCgpLgogKiBAcGFyYW0gVVZTb2NrQWRkcklQdjYgJGlwdjZfYWRkciByZXF1aXJlcyB1dl9zb2NrYWRkci4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBjYWxsYWJsZSB2YXJpYWJsZXMuIFRoaXMgY2FsbGJhY2sgZXhwZWN0cyAoVVZUY3AgJHRjcF9oYW5kbGUsICRzdGF0dXMpLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3RjcF9jb25uZWN0NigkaGFuZGxlLCAkaXB2Nl9hZGRyLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogSW5pdGlhbGl6ZSB0aW1lciBoYW5kbGUuCiAqCiAqIEBwYXJhbSBVVkxvb3B8bnVsbCAkbG9vcCB1dl9sb29wIGhhbmRsZS4KICoKICogQHJldHVybiBVVlRpbWVyCiAqLwpmdW5jdGlvbiB1dl90aW1lcl9pbml0KCRsb29wID0gbnVsbCkge30KCi8qKgogKiBJbml0aWFsaXplIHRpbWVyIGhhbmRsZS4KICoKICogQHBhcmFtIFVWVGltZXIgJHRpbWVyIHRpbWVyLgogKiBAcGFyYW0gaW50ICR0aW1lb3V0IHBlcmlvZGljYWwgZXZlbnQgc3RhcnRzIHdoZW4gYWZ0ZXIgdGhpcyB0aW1lb3V0LiAxMDAwIGlzIDEgc2VjLgogKiBAcGFyYW0gaW50ICRyZXBlYXQgcmVwZWF0IGludGVydmFsLiAxMDAwIGlzIDEgc2VjLgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfdGltZXJfc3RhcnQoJHRpbWVyLCBpbnQgJHRpbWVvdXQsIGludCAkcmVwZWF0LCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogc3RvcCBzcGVjaWZpZWQgdGltZXIuCiAqCiAqIEBwYXJhbSBVVlRpbWVyICR0aW1lciB1diB0aW1lci4KICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHV2X3RpbWVyX3N0b3AoJHRpbWVyKTogaW50IHt9CgovKioKICogUmVzdGFydCB0aW1lci4KICoKICogQHBhcmFtIFVWVGltZXIgJHRpbWVyIHV2X3RpbWVyLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3RpbWVyX2FnYWluKCR0aW1lcikge30KCi8qKgogKiBTZXQgcmVwZWF0IGNvdW50LgogKgogKiBAcGFyYW0gVVZUaW1lciAkdGltZXIgdXZfdGltZXIuCiAqIEBwYXJhbSBpbnQgJHJlcGVhdCByZXBlYXQgY291bnQuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfdGltZXJfc2V0X3JlcGVhdCgkdGltZXIsIGludCAkcmVwZWF0KSB7fQoKLyoqCiAqIFJldHVybnMgcmVwZWF0IGludGVydmFsLgogKgogKiBAcGFyYW0gVVZUaW1lciAkdGltZXIgdXZfdGltZXIuCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB1dl90aW1lcl9nZXRfcmVwZWF0KCR0aW1lcik6IGludCB7fQoKLyoqCiAqIEluaXRpYWxpemUgdXYgaWRsZSBoYW5kbGUuCiAqCiAqIEBwYXJhbSBVVkxvb3AgJGxvb3AgdXZfbG9vcCBoYW5kbGUuCiAqCiAqIEByZXR1cm4gVVZJZGxlIGluaXRpYWxpemVkIGlkbGUgaGFuZGxlLgogKi8KZnVuY3Rpb24gdXZfaWRsZV9pbml0KCRsb29wID0gbnVsbCkge30KCi8qKgogKiBzdGFydCBpZGxlIGNhbGxiYWNrLgogKgogKiBAcGFyYW0gVVZJZGxlICRpZGxlIHV2X2lkbGUuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgaWRsZSBjYWxsYmFjay4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9pZGxlX3N0YXJ0KCRpZGxlLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogU3RvcCBpZGxlIGNhbGxiYWNrLgogKgogKiBAcGFyYW0gVVZJZGxlICRpZGxlIHV2X2lkbGUuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfaWRsZV9zdG9wKCRpZGxlKSB7fQoKLyoqCiAqIEBwYXJhbSBVVkxvb3AgJGxvb3AKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKiBAcGFyYW0gc3RyaW5nICRub2RlCiAqIEBwYXJhbSBzdHJpbmcgJHNlcnZpY2UKICogQHBhcmFtIGFycmF5ICRoaW50cwogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2dldGFkZHJpbmZvKCRsb29wLCBjYWxsYWJsZSAkY2FsbGJhY2ssIHN0cmluZyAkbm9kZSwgc3RyaW5nICRzZXJ2aWNlLCBhcnJheSAkaGludHMpIHt9CgovKioKICogQ3JlYXRlIGEgdGNwIHNvY2tldC4KICoKICogQHBhcmFtIFVWTG9vcHxudWxsICRsb29wIGxvb3Agb3IgbnVsbC4gaWYgbm90IHNwZWNpZmllZCBsb29wIHRoZW4gdXNlIHV2X2RlZmF1bHRfbG9vcC4KICoKICogQHJldHVybiBVVlRjcCB1diBoYW5kbGUgd2hpY2ggaW5pdGlhbGl6ZWQgZm9yIHRjcC4KICovCmZ1bmN0aW9uIHV2X3RjcF9pbml0KCRsb29wID0gbnVsbCkge30KCi8qKgogKiBSZXR1cm4gZGVmYXVsdCBsb29wIGhhbmRsZS4KICoKICogQHJldHVybiBVVkxvb3AKICovCmZ1bmN0aW9uIHV2X2RlZmF1bHRfbG9vcCgpIHt9CgovKioKICogQ3JlYXRlIGEgbmV3IGxvb3AgaGFuZGxlLgogKgogKiBAcmV0dXJuIFVWTG9vcAogKi8KZnVuY3Rpb24gdXZfbG9vcF9uZXcoKSB7fQoKLyoqCiAqIENyZWF0ZSBhIHVkcCBzb2NrZXQuCiAqCiAqIEBwYXJhbSBVVkxvb3B8bnVsbCAkbG9vcCBsb29wIG9yIG51bGwuIGlmIG5vdCBzcGVjaWZpZWQgbG9vcCB0aGVuIHVzZSB1dl9kZWZhdWx0X2xvb3AuCiAqCiAqIEByZXR1cm4gVVZVZHAgdXYgaGFuZGxlIHdoaWNoIGluaXRpYWxpemVkIGZvciB1ZHAuCiAqLwpmdW5jdGlvbiB1dl91ZHBfaW5pdCgkbG9vcCA9IG51bGwpIHt9CgovKioKICogTGlzdGVucyBmb3IgYSBjb25uZWN0aW9uIG9uIGEgdXYgdWRwIGhhbmRsZS4KICoKICogQHBhcmFtIFVWVWRwICRyZXNvdXJjZSB1diB1ZHAgaGFuZGxlLgogKiBAcGFyYW0gVVZTb2NrQWRkciAkYWRkcmVzcyB1diBzb2NrYWRkcihpcHY0KS4KICogQHBhcmFtIGludCAkZmxhZ3MgdW51c2VkLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3VkcF9iaW5kKCRyZXNvdXJjZSwgJGFkZHJlc3MsIGludCAkZmxhZ3MpIHt9CgovKioKICogTGlzdGVucyBmb3IgYSBjb25uZWN0aW9uIG9uIGEgdXYgdWRwIGhhbmRsZS4KICoKICogQHBhcmFtIFVWVWRwICRyZXNvdXJjZSB1diB1ZHAgaGFuZGxlLgogKiBAcGFyYW0gVVZTb2NrQWRkciAkYWRkcmVzcyB1diBzb2NrYWRkcihpcHY2KS4KICogQHBhcmFtIGludCAkZmxhZ3MgU2hvdWxkIGJlIDAgb3IgVVY6OlVEUF9JUFY2T05MWS4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl91ZHBfYmluZDYoJHJlc291cmNlLCAkYWRkcmVzcywgaW50ICRmbGFncykge30KCi8qKgogKiBTdGFydCByZWNlaXZlIGNhbGxiYWNrLgogKgogKiBAcGFyYW0gVVZVZHAgJGhhbmRsZSB1diB1ZHAgaGFuZGxlLgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIHRoaXMgY2FsbGJhY2sgcGFyYW1ldGVyIGV4cGVjdHMgKFVWVWRwICRzdHJlYW0sIGxvbmcgJG5yZWFkLCBzdHJpbmcgJGJ1ZmZlcikuLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3VkcF9yZWN2X3N0YXJ0KCRoYW5kbGUsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBTdG9wIHJlY2VpdmUgY2FsbGJhY2suCiAqCiAqIEBwYXJhbSBVVlVkcCAkaGFuZGxlCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfdWRwX3JlY3Zfc3RvcCgkaGFuZGxlKSB7fQoKLyoqCiAqIEpvaW4gb3IgbGVhdmUgdWRwIG11dGljYXN0IGdyb3VwLgogKgogKiBAcGFyYW0gVVZVZHAgJGhhbmRsZSB1diB1ZHAgaGFuZGxlLgogKiBAcGFyYW0gc3RyaW5nICRtdWx0aWNhc3RfYWRkciBtdWx0aWNhc3QgYWRkcmVzcy4KICogQHBhcmFtIHN0cmluZyAkaW50ZXJmYWNlX2FkZHIgaW50ZXJmYWNlIGFkZHJlc3MuCiAqIEBwYXJhbSBpbnQgJG1lbWJlcnNoaXAgVVY6OkpPSU5fR1JPVVAgb3IgVVY6OkxFQVZFX0dST1VQCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB1dl91ZHBfc2V0X21lbWJlcnNoaXAoJGhhbmRsZSwgc3RyaW5nICRtdWx0aWNhc3RfYWRkciwgc3RyaW5nICRpbnRlcmZhY2VfYWRkciwgaW50ICRtZW1iZXJzaGlwKTogaW50IHt9CgovKioKICogU2V0IG11bHRpY2FzdCBsb29wLgogKgogKiBAcGFyYW0gVVZVZHAgJGhhbmRsZSB1diB1ZHAgaGFuZGxlLgogKiBAcGFyYW0gaW50ICRlbmFibGVkCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfdWRwX3NldF9tdWx0aWNhc3RfbG9vcCgkaGFuZGxlLCBpbnQgJGVuYWJsZWQpIHt9CgovKioKICogU2V0IG11bHRpY2FzdCB0dGwuCiAqCiAqIEBwYXJhbSBVVlVkcCAkaGFuZGxlIHV2IHVkcCBoYW5kbGUuCiAqIEBwYXJhbSBpbnQgJHR0bCBtdWx0aWNhc3QgdHRsLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3VkcF9zZXRfbXVsdGljYXN0X3R0bCgkaGFuZGxlLCBpbnQgJHR0bCkge30KCi8qKgogKiBTZXQgdWRwIGJyb2FkY2FzdC4KICoKICogQHBhcmFtIFVWVWRwICRoYW5kbGUgdXYgdWRwIGhhbmRsZS4KICogQHBhcmFtIGJvb2wgJGVuYWJsZWQKICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl91ZHBfc2V0X2Jyb2FkY2FzdCgkaGFuZGxlLCBib29sICRlbmFibGVkKSB7fQoKLyoqCiAqIFNlbmQgYnVmZmVyIHRvIHNwZWNpZmllZCBhZGRyZXNzLgogKgogKiBAcGFyYW0gVVZVZHAgJGhhbmRsZSB1diB1ZHAgaGFuZGxlLgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIGRhdGEuCiAqIEBwYXJhbSBVVlNvY2tBZGRyICR1dl9hZGRyIHV2X2lwNF9hZGRyLgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIHRoaXMgY2FsbGJhY2sgcGFyYW1ldGVyIGV4cGVjdHMgKFVWVWRwICRzdHJlYW0sIGxvbmcgJHN0YXR1cykuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfdWRwX3NlbmQoJGhhbmRsZSwgc3RyaW5nICRkYXRhLCAkdXZfYWRkciwgY2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKLyoqCiAqIFNlbmQgYnVmZmVyIHRvIHNwZWNpZmllZCBhZGRyZXNzLgogKgogKiBAcGFyYW0gVVZVZHAgJGhhbmRsZSB1diB1ZHAgaGFuZGxlLgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIGRhdGEuCiAqIEBwYXJhbSBVVlNvY2tBZGRySVB2NiAkdXZfYWRkcjYgdXZfaXA2X2FkZHIuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgdGhpcyBjYWxsYmFjayBwYXJhbWV0ZXIgZXhwZWN0cyAoVVZVZHAgJHN0cmVhbSwgbG9uZyAkc3RhdHVzKS4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl91ZHBfc2VuZDYoJGhhbmRsZSwgc3RyaW5nICRkYXRhLCAkdXZfYWRkcjYsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBAcGFyYW0gVVYgJGhhbmRsZQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHV2X2lzX2FjdGl2ZSgkaGFuZGxlKTogYm9vbCB7fQoKLyoqCiAqIEBwYXJhbSBVViAkaGFuZGxlCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gdXZfaXNfY2xvc2luZygkaGFuZGxlKTogYm9vbCB7fQoKLyoqCiAqIEBwYXJhbSBVVlN0cmVhbSAkaGFuZGxlCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gdXZfaXNfcmVhZGFibGUoJGhhbmRsZSk6IGJvb2wge30KCi8qKgogKiBAcGFyYW0gVVZTdHJlYW0gJGhhbmRsZQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHV2X2lzX3dyaXRhYmxlKCRoYW5kbGUpOiBib29sIHt9CgovKioKICogQHBhcmFtIFVWTG9vcCAkbG9vcAogKiBAcGFyYW0gY2FsbGFibGUgJGNsb3N1cmUKICogQHBhcmFtIGFycmF5fG51bGwgJG9wYXF1ZQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHV2X3dhbGsoJGxvb3AsIGNhbGxhYmxlICRjbG9zdXJlLCBhcnJheSAkb3BhcXVlID0gbnVsbCk6IGJvb2wge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHV2CiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB1dl9ndWVzc19oYW5kbGUoJHV2KTogaW50IHt9CgovKioKICogSW5pdGlhbGl6ZSBwaXBlLgogKgogKiBAcGFyYW0gVVZMb29wICRsb29wIHV2X2xvb3AgaGFuZGxlLgogKiBAcGFyYW0gaW50ICRpcGMgd2hlbiB0aGlzIHBpcGUgdXNlIGZvciBpcGMsIHBsZWFzZSBzZXQgdHJ1ZSBvdGhlcndpc2UgZmFsc2UuCiAqCiAqIEByZXR1cm4gVVZQaXBlCiAqLwpmdW5jdGlvbiB1dl9waXBlX2luaXQoJGxvb3AsIGludCAkaXBjKSB7fQoKLyoqCiAqIE9wZW4gYSBwaXBlLgogKgogKiBAcGFyYW0gVVZQaXBlICRoYW5kbGUgdXYgcGlwZSBoYW5kbGUuCiAqIEBwYXJhbSBpbnQgJHBpcGUgZHVubm5vLiBtYXliZSBmaWxlIGRlc2NyaXB0b3IuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfcGlwZV9vcGVuKCRoYW5kbGUsIGludCAkcGlwZSkge30KCi8qKgogKiBDcmVhdGUgYSBuYW1lZCBwaXBlLgogKgogKiBAcGFyYW0gVVZQaXBlICRoYW5kbGUgdXYgcGlwZSBoYW5kbGUuCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgZHVubm5vLiBtYXliZSBmaWxlIGRlc2NyaXB0b3IuCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB1dl9waXBlX2JpbmQoJGhhbmRsZSwgc3RyaW5nICRuYW1lKTogaW50IHt9CgovKioKICogQ29ubmVjdCB0byBuYW1lZCBwaXBlLgogKgogKiBAcGFyYW0gVVZQaXBlICRoYW5kbGUgdXYgcGlwZSBoYW5kbGUuCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggbmFtZWQgcGlwZSBwYXRoLgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIHRoaXMgY2FsbGJhY2sgcGFyYW1ldGVyIGV4cGVjdHMgKFVWUGlwZSAkcGlwZSwgbG9uZyAkc3RhdHVzKS4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9waXBlX2Nvbm5lY3QoJGhhbmRsZSwgc3RyaW5nICRwYXRoLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogQHBhcmFtIFVWUGlwZSAkaGFuZGxlCiAqIEBwYXJhbSB2b2lkICRjb3VudAogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3BpcGVfcGVuZGluZ19pbnN0YW5jZXMoJGhhbmRsZSwgJGNvdW50KSB7fQoKLyoqCiAqIFJldHVybnMgY3VycmVudCBsb2FkYXZlcmFnZS4KICoKICogTm90ZTogcmV0dXJucyBhcnJheSBvbiB3aW5kb3dzIGJveC4gKGRvZXMgbm90IHN1cHBvcnQgbG9hZCBhdmVyYWdlIG9uIHdpbmRvd3MpLgogKgogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiB1dl9sb2FkYXZnKCk6IGFycmF5IHt9CgovKioKICogUmV0dXJucyBjdXJyZW50IHVwdGltZS4KICoKICogQHJldHVybiBmbG9hdAogKi8KZnVuY3Rpb24gdXZfdXB0aW1lKCk6IGZsb2F0IHt9CgovKioKICogUmV0dXJucyBjdXJyZW50IGZyZWUgbWVtb3J5IHNpemUuCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB1dl9nZXRfZnJlZV9tZW1vcnkoKTogaW50IHt9CgovKioKICogUmV0dXJucyB0b3RhbCBtZW1vcnkgc2l6ZS4KICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHV2X2dldF90b3RhbF9tZW1vcnkoKTogaW50IHt9CgovKioKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHV2X2hydGltZSgpOiBpbnQge30KCi8qKgogKiBSZXR1cm5zIGN1cnJlbnQgZXhlcGF0aC4gYmFzaWNhbGx5IHRoaXMgd2lsbCByZXR1cm5zIGN1cnJlbnQgcGhwIHBhdGguCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiB1dl9leGVwYXRoKCk6IHN0cmluZyB7fQoKLyoqCiAqIFJldHVybnMgY3VycmVudCBjcHUgaW5mb3JtYXRpb25zLgogKgogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiB1dl9jcHVfaW5mbygpOiBhcnJheSB7fQoKLyoqCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHV2X2ludGVyZmFjZV9hZGRyZXNzZXMoKTogYXJyYXkge30KCi8qKgogKiBAcGFyYW0gVVZ8cmVzb3VyY2V8bG9uZ3xudWxsICRmZAogKiBAcGFyYW0gaW50ICRmbGFncwogKgogKiBAcmV0dXJuIFVWU3RkaW8KICovCmZ1bmN0aW9uIHV2X3N0ZGlvX25ldygkZmQsIGludCAkZmxhZ3MpIHt9CgovKioKICogQHBhcmFtIFVWTG9vcCAkbG9vcAogKiBAcGFyYW0gc3RyaW5nICRjb21tYW5kCiAqIEBwYXJhbSBhcnJheSAkYXJncwogKiBAcGFyYW0gYXJyYXkgJHN0ZGlvCiAqIEBwYXJhbSBzdHJpbmcgJGN3ZAogKiBAcGFyYW0gYXJyYXkgJGVudgogKiBAcGFyYW0gY2FsbGFibGV8bnVsbCAkY2FsbGJhY2sKICogQHBhcmFtIGludHxudWxsICRmbGFncwogKiBAcGFyYW0gYXJyYXl8bnVsbCAkb3B0aW9ucwogKgogKiBAcmV0dXJuIFVWUHJvY2Vzc3xsb25nCiAqLwpmdW5jdGlvbiB1dl9zcGF3bigkbG9vcCwgc3RyaW5nICRjb21tYW5kLCBhcnJheSAkYXJncywgYXJyYXkgJHN0ZGlvLCBzdHJpbmcgJGN3ZCwgYXJyYXkgJGVudiA9IFtdLCA/Y2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgP2ludCAkZmxhZ3MgPSBudWxsLCA/YXJyYXkgJG9wdGlvbnMgPSBudWxsKSB7fQoKLyoqCiAqIFNlbmQgc2lnbmFsIHRvIHNwZWNpZmllZCB1diBwcm9jZXNzLgogKgogKiBAcGFyYW0gVVZQcm9jZXNzICRoYW5kbGUgdXYgcHJvY2VzcyBoYW5kbGUuCiAqIEBwYXJhbSBpbnQgJHNpZ25hbAogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3Byb2Nlc3Nfa2lsbCgkaGFuZGxlLCBpbnQgJHNpZ25hbCkge30KCi8qKgogKiBTZW5kIHNpZ25hbCB0byBzcGVjaWZpZWQgcGlkLgogKgogKiBAcGFyYW0gaW50ICRwaWQgcHJvY2VzcyBpZC4KICogQHBhcmFtIGludCAkc2lnbmFsCiAqLwpmdW5jdGlvbiB1dl9raWxsKGludCAkcGlkLCBpbnQgJHNpZ25hbCkge30KCi8qKgogKiBDaGFuZ2Ugd29ya2luZyBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeQogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHV2X2NoZGlyKHN0cmluZyAkZGlyZWN0b3J5KTogYm9vbCB7fQoKLyoqCiAqIEluaXRpYWxpemUgcndsb2NrLgogKgogKiBAcmV0dXJuIFVWTG9jayByZXR1cm5zIHV2IHJ3bG9jay4KICovCmZ1bmN0aW9uIHV2X3J3bG9ja19pbml0KCkge30KCi8qKgogKiBTZXQgcmVhZCBsb2NrLgogKgogKiBAcGFyYW0gVVZMb2NrICRoYW5kbGUgdXYgbG9jayBoYW5kbGUuCiAqLwpmdW5jdGlvbiB1dl9yd2xvY2tfcmRsb2NrKCRoYW5kbGUpIHt9CgovKioKICogQHBhcmFtIFVWTG9jayAkaGFuZGxlCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gdXZfcndsb2NrX3RyeXJkbG9jaygkaGFuZGxlKTogYm9vbCB7fQoKLyoqCiAqIFVubG9jayByZWFkIGxvY2suCiAqCiAqIEBwYXJhbSBVVkxvY2sgJGhhbmRsZSB1diBsb2NrIGhhbmRsZS4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9yd2xvY2tfcmR1bmxvY2soJGhhbmRsZSkge30KCi8qKgogKiBTZXQgd3JpdGUgbG9jay4KICoKICogQHBhcmFtIFVWTG9jayAkaGFuZGxlIHV2IGxvY2sgaGFuZGxlLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3J3bG9ja193cmxvY2soJGhhbmRsZSkge30KCi8qKgogKiBAcGFyYW0gVVZMb2NrICRoYW5kbGUgdXYgbG9jayBoYW5kbGUuCiAqLwpmdW5jdGlvbiB1dl9yd2xvY2tfdHJ5d3Jsb2NrKCRoYW5kbGUpIHt9CgovKioKICogVW5sb2NrIHdyaXRlIGxvY2suCiAqCiAqIEBwYXJhbSBVVkxvY2sgJGhhbmRsZSB1diBsb2NrIGhhbmRsZS4KICovCmZ1bmN0aW9uIHV2X3J3bG9ja193cnVubG9jaygkaGFuZGxlKSB7fQoKLyoqCiAqIEluaXRpYWxpemUgbXV0ZXguCiAqCiAqIEByZXR1cm4gVVZMb2NrIHV2IG11dGV4CiAqLwpmdW5jdGlvbiB1dl9tdXRleF9pbml0KCkge30KCi8qKgogKiBMb2NrIG11dGV4LgogKgogKiBAcGFyYW0gVVZMb2NrICRsb2NrIHV2IGxvY2sgaGFuZGxlLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X211dGV4X2xvY2soJGxvY2spIHt9CgovKioKICogQHBhcmFtIFVWTG9jayAkbG9jawogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHV2X211dGV4X3RyeWxvY2soJGxvY2spOiBib29sIHt9CgovKioKICogSW5pdGlhbGl6ZSBzZW1hcGhvcmUuCiAqCiAqIEBwYXJhbSBpbnQgJHZhbHVlCiAqIEByZXR1cm4gVVZMb2NrCiAqLwpmdW5jdGlvbiB1dl9zZW1faW5pdChpbnQgJHZhbHVlKSB7fQoKLyoqCiAqIFBvc3Qgc2VtYXBob3JlLgogKgogKiBAcGFyYW0gVVZMb2NrICRzZW0gdXYgbG9jayBoYW5kbGUuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfc2VtX3Bvc3QoJHNlbSkge30KCi8qKgogKiBAcGFyYW0gVVZMb2NrICRzZW0KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9zZW1fd2FpdCgkc2VtKSB7fQoKLyoqCiAqIEBwYXJhbSBVVkxvY2sgJHNlbQogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3NlbV90cnl3YWl0KCRzZW0pIHt9CgovKioKICogSW5pdGlhbGl6ZSBwcmVwYXJlLgogKgogKiBAcGFyYW0gVVZMb29wICRsb29wIHV2IGxvb3AgaGFuZGxlLgogKgogKiBAcmV0dXJuIFVWUHJlcGFyZQogKi8KZnVuY3Rpb24gdXZfcHJlcGFyZV9pbml0KCRsb29wKSB7fQoKLyoqCiAqIFNldHVwIHByZXBhcmUgbG9vcCBjYWxsYmFjay4gKHByZSBsb29wIGNhbGxiYWNrKQogKgogKiBAcGFyYW0gVVZQcmVwYXJlICRoYW5kbGUgdXYgcHJlcGFyZSBoYW5kbGUuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgdGhpcyBjYWxsYmFjayBwYXJhbWV0ZXIgZXhwZWN0cyAoVVZQcmVwYXJlICRwcmVwYXJlLCBsb25nICRzdGF0dXMpLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3ByZXBhcmVfc3RhcnQoJGhhbmRsZSwgY2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKLyoqCiAqIFN0b3AgcHJlcGFyZSBjYWxsYmFjay4KICoKICogQHBhcmFtIFVWUHJlcGFyZSAkaGFuZGxlIHV2IHByZXBhcmUgaGFuZGxlLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3ByZXBhcmVfc3RvcCgkaGFuZGxlKSB7fQoKLyoqCiAqIFNldHVwIGNoZWNrLgogKgogKiBAcGFyYW0gVVZMb29wICRsb29wIHV2IGxvb3AgaGFuZGxlCiAqCiAqIEByZXR1cm4gVVZDaGVjawogKi8KZnVuY3Rpb24gdXZfY2hlY2tfaW5pdCgkbG9vcCkge30KCi8qKgogKiBTdGF0cyBjaGVjayBsb29wIGNhbGxiYWNrLiAoYWZ0ZXIgbG9vcCBjYWxsYmFjaykKICoKICogQHBhcmFtIFVWQ2hlY2sgJGhhbmRsZSB1diBjaGVjayBoYW5kbGUuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgdGhpcyBjYWxsYmFjayBwYXJhbWV0ZXIgZXhwZWN0cyAoVVZDaGVjayAkY2hlY2ssIGxvbmcgJHN0YXR1cykuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfY2hlY2tfc3RhcnQoJGhhbmRsZSwgY2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKLyoqCiAqIFN0b3AgY2hlY2sgY2FsbGJhY2suCiAqCiAqIEBwYXJhbSBVVkNoZWNrICRoYW5kbGUgdXYgY2hlY2sgaGFuZGxlLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2NoZWNrX3N0b3AoJGhhbmRsZSkge30KCi8qKgogKiBTZXR1cCBhc3luYyBjYWxsYmFjay4KICoKICogQHBhcmFtIFVWTG9vcCAkbG9vcCB1diBsb29wCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICoKICogQHJldHVybiBVVkFzeW5jIHV2IGFzeW5jIGhhbmRsZS4KICovCmZ1bmN0aW9uIHV2X2FzeW5jX2luaXQoJGxvb3AsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBTZW5kIGFzeW5jIGNhbGxiYWNrIGltbWVkaWF0ZWx5LgogKgogKiBAcGFyYW0gVVZBc3luYyAkaGFuZGxlIHV2IGFzeW5jIGhhbmRsZS4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9hc3luY19zZW5kKCRoYW5kbGUpIHt9CgovKioKICogRXhlY3V0ZSBjYWxsYmFja3MgaW4gYW5vdGhlciB0aHJlYWQgKHJlcXVpcmVzIFRocmVhZCBTYWZlIGVuYWJsZWQgUEhQKS4KICoKICogQHBhcmFtIFVWTG9vcCAkbG9vcAogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqIEBwYXJhbSBjYWxsYWJsZSAkYWZ0ZXJfY2FsbGJhY2sKICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9xdWV1ZV93b3JrKCRsb29wLCBjYWxsYWJsZSAkY2FsbGJhY2ssIGNhbGxhYmxlICRhZnRlcl9jYWxsYmFjaykge30KCi8qKgogKiBPcGVuIHNwZWNpZmllZCBmaWxlLgogKgogKiBAcGFyYW0gVVZMb29wICRsb29wIHV2X2xvb3AgaGFuZGxlLgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIGZpbGUgcGF0aAogKiBAcGFyYW0gaW50ICRmbGFnIGZpbGUgZmxhZy4gdGhpcyBzaG91bGQgYmUgVVY6Ok9fUkRPTkxZIGFuZCBzb21lIGNvbnN0YW50cyBmbGFnLgogKiBAcGFyYW0gaW50ICRtb2RlIG1vZGUgZmxhZy4gdGhpcyBzaG91bGQgYmUgVVY6OlNfSVJXWFUgYW5kIHNvbWUgbW9kZSBmbGFnLgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIHRoaXMgY2FsbGJhY2sgcGFyYW1ldGVyIGV4cGVjdHMgKHJlc291cmNlICRzdHJlYW0pLgogKgogKiBAcmV0dXJuIHJlc291cmNlCiAqLwpmdW5jdGlvbiB1dl9mc19vcGVuKCRsb29wLCBzdHJpbmcgJHBhdGgsIGludCAkZmxhZywgaW50ICRtb2RlLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogQXN5bmMgcmVhZC4KICoKICogQHBhcmFtIFVWTG9vcCAkbG9vcCB1diBsb29wIGhhbmRsZQogKiBAcGFyYW0gcmVzb3VyY2UgJGZkIHRoaXMgZXhwZWN0cyBsb25nICRmZCwgcmVzb3VyY2UgJHBocF9zdHJlYW0gb3IgcmVzb3VyY2UgJHBocF9zb2NrZXQuCiAqIEBwYXJhbSBpbnQgJG9mZnNldCB0aGUgb2Zmc2V0IHBvc2l0aW9uIGluIHRoZSBmaWxlIGF0IHdoaWNoIHJlYWRpbmcgc2hvdWxkIGNvbW1lbmNlLgogKiBAcGFyYW0gaW50ICRsZW5ndGggdGhlIGxlbmd0aCBpbiBieXRlcyB0aGF0IHNob3VsZCBiZSByZWFkIHN0YXJ0aW5nIGF0IHBvc2l0aW9uICRvZmZzZXQuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgdGhpcyBjYWxsYmFjayBwYXJhbWV0ZXIgZXhwZWN0cyAoenZhbCAkZmQsIGxvbmcgJG5yZWFkLCBzdHJpbmcgJGJ1ZmZlcikuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfZnNfcmVhZCgkbG9vcCwgJGZkLCBpbnQgJG9mZnNldCwgaW50ICRsZW5ndGgsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBDbG9zZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLgogKgogKiBAcGFyYW0gVVZMb29wICRsb29wIHV2X2xvb3AgaGFuZGxlLgogKiBAcGFyYW0gcmVzb3VyY2UgJGZkIGZpbGUgZGVzY3JpcHRvci4gdGhpcyBleHBlY3RzIGxvbmcgJGZkLCByZXNvdXJjZSAkcGhwX3N0cmVhbSBvciByZXNvdXJjZSAkcGhwX3NvY2tldC4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayB0aGlzIGNhbGxiYWNrIHBhcmFtZXRlciBleHBlY3RzIChyZXNvdXJjZSAkc3RyZWFtKQogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2ZzX2Nsb3NlKCRsb29wLCAkZmQsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBXcml0ZSBidWZmZXIgdG8gc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4KICoKICogQHBhcmFtIFVWTG9vcCAkbG9vcCB1dl9sb29wIGhhbmRsZS4KICogQHBhcmFtIHJlc291cmNlICRmZCBmaWxlIGRlc2NyaXB0b3IuIHRoaXMgZXhwZWN0cyBsb25nICRmZCwgcmVzb3VyY2UgJHBocF9zdHJlYW0gb3IgcmVzb3VyY2UgJHBocF9zb2NrZXQuCiAqIEBwYXJhbSBzdHJpbmcgJGJ1ZmZlciBidWZmZXIuCiAqIEBwYXJhbSBpbnQgJG9mZnNldAogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIHRoaXMgY2FsbGJhY2sgcGFyYW1ldGVyIGV4cGVjdHMgKHJlc291cmNlICRzdHJlYW0sIGxvbmcgJHJlc3VsdCkKICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9mc193cml0ZSgkbG9vcCwgJGZkLCBzdHJpbmcgJGJ1ZmZlciwgaW50ICRvZmZzZXQsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBBc3luYyBmc3luYy4KICoKICogQHBhcmFtIFVWTG9vcCAkbG9vcCB1diBsb29wIGhhbmRsZS4KICogQHBhcmFtIHJlc291cmNlICRmZAogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfZnNfZnN5bmMoJGxvb3AsICRmZCwgY2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKLyoqCiAqIEFzeW5jIGZkYXRhc3luYy4KICoKICogQHBhcmFtIFVWTG9vcCAkbG9vcCB1diBsb29wIGhhbmRsZS4KICogQHBhcmFtIHJlc291cmNlICRmZAogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfZnNfZmRhdGFzeW5jKCRsb29wLCAkZmQsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBBc3luYyBmdHJ1bmNhdGUuCiAqCiAqIEBwYXJhbSBVVkxvb3AgJGxvb3AgdXYgbG9vcCBoYW5kbGUuCiAqIEBwYXJhbSByZXNvdXJjZSAkZmQKICogQHBhcmFtIGludCAkb2Zmc2V0CiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9mc19mdHJ1bmNhdGUoJGxvb3AsICRmZCwgaW50ICRvZmZzZXQsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBBc3luYyBta2Rpci4KICoKICogQHBhcmFtIFVWTG9vcCAkbG9vcCB1diBsb29wIGhhbmRsZQogKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAqIEBwYXJhbSBpbnQgJG1vZGUKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2ZzX21rZGlyKCRsb29wLCBzdHJpbmcgJHBhdGgsIGludCAkbW9kZSwgY2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKLyoqCiAqIEFzeW5jIHJtZGlyLgogKgogKiBAcGFyYW0gVVZMb29wICRsb29wIHV2IGxvb3AgaGFuZGxlCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2ZzX3JtZGlyKCRsb29wLCBzdHJpbmcgJHBhdGgsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBBc3luYyB1bmxpbmsuCiAqCiAqIEBwYXJhbSBVVkxvb3AgJGxvb3AgdXYgbG9vcCBoYW5kbGUKICogQHBhcmFtIHN0cmluZyAkcGF0aAogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfZnNfdW5saW5rKCRsb29wLCBzdHJpbmcgJHBhdGgsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBBc3luYyByZW5hbWUuCiAqCiAqIEBwYXJhbSBVVkxvb3AgJGxvb3AgdXYgbG9vcCBoYW5kbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGZyb20KICogQHBhcmFtIHN0cmluZyAkdG8KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2ZzX3JlbmFtZSgkbG9vcCwgc3RyaW5nICRmcm9tLCBzdHJpbmcgJHRvLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogQXN5bmMgdXRpbWUuCiAqCiAqIEBwYXJhbSBVVkxvb3AgJGxvb3AgdXYgbG9vcCBoYW5kbGUuCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICogQHBhcmFtIGludCAkdXRpbWUKICogQHBhcmFtIGludCAkYXRpbWUKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2ZzX3V0aW1lKCRsb29wLCBzdHJpbmcgJHBhdGgsIGludCAkdXRpbWUsIGludCAkYXRpbWUsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBBc3luYyBmdXRpbWUuCiAqCiAqIEBwYXJhbSBVVkxvb3AgJGxvb3AgdXYgbG9vcCBoYW5kbGUuCiAqIEBwYXJhbSByZXNvdXJjZSAkZmQKICogQHBhcmFtIGludCAkdXRpbWUKICogQHBhcmFtIGludCAkYXRpbWUKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2ZzX2Z1dGltZSgkbG9vcCwgJGZkLCBpbnQgJHV0aW1lLCBpbnQgJGF0aW1lLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogQXN5bmMgY2htb2QuCiAqCiAqIEBwYXJhbSBVVkxvb3AgJGxvb3AgdXYgbG9vcCBoYW5kbGUuCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICogQHBhcmFtIGludCAkbW9kZQogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfZnNfY2htb2QoJGxvb3AsIHN0cmluZyAkcGF0aCwgaW50ICRtb2RlLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogQXN5bmMgZmNobW9kLgogKgogKiBAcGFyYW0gVVZMb29wICRsb29wIHV2IGxvb3AgaGFuZGxlLgogKiBAcGFyYW0gcmVzb3VyY2UgJGZkCiAqIEBwYXJhbSBpbnQgJG1vZGUKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2ZzX2ZjaG1vZCgkbG9vcCwgJGZkLCBpbnQgJG1vZGUsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBBc3luYyBjaG93bi4KICoKICogQHBhcmFtIFVWTG9vcCAkbG9vcCB1diBsb29wIGhhbmRsZS4KICogQHBhcmFtIHN0cmluZyAkcGF0aAogKiBAcGFyYW0gaW50ICR1aWQKICogQHBhcmFtIGludCAkZ2lkCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9mc19jaG93bigkbG9vcCwgc3RyaW5nICRwYXRoLCBpbnQgJHVpZCwgaW50ICRnaWQsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBBc3luYyBmY2hvd24uCiAqCiAqIEBwYXJhbSBVVkxvb3AgJGxvb3AgdXYgbG9vcCBoYW5kbGUuCiAqIEBwYXJhbSByZXNvdXJjZSAkZmQKICogQHBhcmFtIGludCAkdWlkCiAqIEBwYXJhbSBpbnQgJGdpZAogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfZnNfZmNob3duKCRsb29wLCAkZmQsIGludCAkdWlkLCBpbnQgJGdpZCwgY2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKLyoqCiAqIEFzeW5jIGxpbmsuCiAqCiAqIEBwYXJhbSBVVkxvb3AgJGxvb3AgdXYgbG9vcCBoYW5kbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGZyb20KICogQHBhcmFtIHN0cmluZyAkdG8KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2ZzX2xpbmsoJGxvb3AsIHN0cmluZyAkZnJvbSwgc3RyaW5nICR0bywgY2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKLyoqCiAqIEFzeW5jIHN5bWxpbmsuCiAqCiAqIEBwYXJhbSBVVkxvb3AgJGxvb3AgdXYgbG9vcCBoYW5kbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGZyb20KICogQHBhcmFtIHN0cmluZyAkdG8KICogQHBhcmFtIGludCAkZmxhZ3MKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2ZzX3N5bWxpbmsoJGxvb3AsIHN0cmluZyAkZnJvbSwgc3RyaW5nICR0bywgaW50ICRmbGFncywgY2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKLyoqCiAqIEFzeW5jIHJlYWRsaW5rLgogKgogKiBAcGFyYW0gVVZMb29wICRsb29wIHV2IGxvb3AgaGFuZGxlCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2ZzX3JlYWRsaW5rKCRsb29wLCBzdHJpbmcgJHBhdGgsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBBc3luYyBzdGF0LgogKgogKiBAcGFyYW0gVVZMb29wICRsb29wIHV2IGxvb3AgaGFuZGxlCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayB0aGlzIGNhbGxiYWNrIHBhcmFtZXRlciBleHBlY3RzIChyZXNvdXJjZSAkc3RyZWFtLCBhcnJheSAkc3RhdCkKICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9mc19zdGF0KCRsb29wLCBzdHJpbmcgJHBhdGgsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBBc3luYyBsc3RhdC4KICoKICogQHBhcmFtIFVWTG9vcCAkbG9vcCB1diBsb29wIGhhbmRsZQogKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9mc19sc3RhdCgkbG9vcCwgc3RyaW5nICRwYXRoLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogQXN5bmMgZnN0YXQuCiAqCiAqIEBwYXJhbSBVVkxvb3AgJGxvb3AgdXYgbG9vcCBoYW5kbGUuCiAqIEBwYXJhbSByZXNvdXJjZSAkZmQKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2ZzX2ZzdGF0KCRsb29wLCAkZmQsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBBc3luYyByZWFkZGlyLgogKgogKiBAcGFyYW0gVVZMb29wICRsb29wICB1diBsb29wIGhhbmRsZQogKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAqIEBwYXJhbSBpbnQgJGZsYWdzCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1dl9mc19yZWFkZGlyKCRsb29wLCBzdHJpbmcgJHBhdGgsIGludCAkZmxhZ3MsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBBc3luYyBzZW5kZmlsZS4KICoKICogQHBhcmFtIFVWTG9vcCAkbG9vcCB1diBsb29wIGhhbmRsZQogKiBAcGFyYW0gcmVzb3VyY2UgJGluX2ZkCiAqIEBwYXJhbSByZXNvdXJjZSAkb3V0X2ZkCiAqIEBwYXJhbSBpbnQgJG9mZnNldAogKiBAcGFyYW0gaW50ICRsZW5ndGgKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogKi8KZnVuY3Rpb24gdXZfZnNfc2VuZGZpbGUoJGxvb3AsICRpbl9mZCwgJG91dF9mZCwgaW50ICRvZmZzZXQsIGludCAkbGVuZ3RoLCBjYWxsYWJsZSAkY2FsbGJhY2spIHt9CgovKioKICogSW5pdGlhbGl6ZSBmcyBldmVudC4KICoKICogQHBhcmFtIFVWTG9vcCAkbG9vcCB1diBsb29wIGhhbmRsZQogKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICogQHBhcmFtIGludCAkZmxhZ3MKICoKICogQHJldHVybiBVVkZzRXZlbnQKICovCmZ1bmN0aW9uIHV2X2ZzX2V2ZW50X2luaXQoJGxvb3AsIHN0cmluZyAkcGF0aCwgY2FsbGFibGUgJGNhbGxiYWNrLCBpbnQgJGZsYWdzID0gMCkge30KCi8qKgogKiBJbml0aWFsaXplIFRUWS4geW91IGhhdmUgdG8gb3BlbiB0dHkgeW91ciBoYW5kLgogKgogKiBAcGFyYW0gVVZMb29wICRsb29wIHV2IGxvb3AgaGFuZGxlLgogKiBAcGFyYW0gcmVzb3VyY2UgJGZkCiAqIEBwYXJhbSBpbnQgJHJlYWRhYmxlCiAqCiAqIEByZXR1cm4gVVZUdHkKICovCmZ1bmN0aW9uIHV2X3R0eV9pbml0KCRsb29wLCAkZmQsIGludCAkcmVhZGFibGUpIHt9CgovKioKICogQHBhcmFtIFVWVHR5ICR0dHkKICogQHBhcmFtIGludCAmJHdpZHRoCiAqIEBwYXJhbSBpbnQgJiRoZWlnaHQKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHV2X3R0eV9nZXRfd2luc2l6ZSgkdHR5LCBpbnQgJiR3aWR0aCwgaW50ICYkaGVpZ2h0KTogaW50IHt9CgovKioKICogQHBhcmFtIFVWVHR5ICR0dHkKICogQHBhcmFtIGludCAkbW9kZQogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gdXZfdHR5X3NldF9tb2RlKCR0dHksIGludCAkbW9kZSk6IGludCB7fQoKLyoqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfdHR5X3Jlc2V0X21vZGUoKSB7fQoKLyoqCiAqIEBwYXJhbSBVVlRjcCAkdXZfc29ja2FkZHIKICoKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHV2X3RjcF9nZXRzb2NrbmFtZSgkdXZfc29ja2FkZHIpOiBzdHJpbmcge30KCi8qKgogKiBAcGFyYW0gVVZUY3AgJHV2X3NvY2thZGRyCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiB1dl90Y3BfZ2V0cGVlcm5hbWUoJHV2X3NvY2thZGRyKTogc3RyaW5nIHt9CgovKioKICogQHBhcmFtIFVWVWRwICR1dl9zb2NrYWRkcgogKgogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gdXZfdWRwX2dldHNvY2tuYW1lKCR1dl9zb2NrYWRkcik6IHN0cmluZyB7fQoKLyoqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB1dl9yZXNpZGVudF9zZXRfbWVtb3J5KCk6IGludCB7fQoKLyoqCiAqIEBwYXJhbSBVVlNvY2tBZGRyICRhZGRyZXNzCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiB1dl9pcDRfbmFtZSgkYWRkcmVzcyk6IHN0cmluZyB7fQoKLyoqCiAqIEBwYXJhbSBVVlNvY2tBZGRyICRhZGRyZXNzCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiB1dl9pcDZfbmFtZSgkYWRkcmVzcyk6IHN0cmluZyB7fQoKLyoqCiAqIEluaXRpYWxpemUgcG9sbC4KICoKICogQHBhcmFtIFVWTG9vcCAkdXZfbG9vcCB1dl9sb29wLgogKiBAcGFyYW0gcmVzb3VyY2UgJGZkIHRoaXMgZXhwZWN0cyBsb25nIGZkLCBQSFAncyBzdHJlYW0gb3IgUEhQJ3Mgc29ja2V0IHJlc291cmNlLgogKgogKiBAcmV0dXJuIFVWUG9sbCB1diBoYW5kbGUgd2hpY2ggaW5pdGlhbGl6ZWQgcG9sbC4KICovCmZ1bmN0aW9uIHV2X3BvbGxfaW5pdCgkdXZfbG9vcCwgJGZkKSB7fQoKLyoqCiAqIFN0YXJ0IHBvbGxpbmcuCiAqCiAqIEBwYXJhbSBVVlBvbGwgJGhhbmRsZSB1diBwb2xsIGhhbmRsZS4KICogQHBhcmFtIGludCAkZXZlbnRzIFVWOjpSRUFEQkxFIGFuZCBVVjo6V1JJVEFCTEUgZmxhZ3MuCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgdGhpcyBjYWxsYmFjayBwYXJhbWV0ZXIgZXhwZWN0cyAoVVZQb2xsICRwb2xsLCBsb25nICRzdGF0dXMsIGxvbmcgJGV2ZW50cywgbWl4ZWQgJGNvbm5lY3Rpb24pLiB0aGUgY29ubmVjdGlvbiBwYXJhbWV0ZXIgcGFzc2VzIHV2X3BvbGxfaW5pdCdkIGZkLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X3BvbGxfc3RhcnQoJGhhbmRsZSwgaW50ICRldmVudHMsIGNhbGxhYmxlICRjYWxsYmFjaykge30KCi8qKgogKiBAcGFyYW0gVVZQb2xsICRwb2xsCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfcG9sbF9zdG9wKCRwb2xsKSB7fQoKLyoqCiAqIEBwYXJhbSBVVkxvb3B8bnVsbCAkdXZfbG9vcAogKgogKiBAcmV0dXJuIFVWRnNQb2xsCiAqLwpmdW5jdGlvbiB1dl9mc19wb2xsX2luaXQoJHV2X2xvb3AgPSBudWxsKSB7fQoKLyoqCiAqIEBwYXJhbSBVVkZzUG9sbCAkaGFuZGxlCiAqIEBwYXJhbSAkY2FsbGJhY2sKICogQHBhcmFtIHN0cmluZyAkcGF0aAogKiBAcGFyYW0gaW50ICRpbnRlcnZhbAogKgogKiBAcmV0dXJuIFVWCiAqLwpmdW5jdGlvbiB1dl9mc19wb2xsX3N0YXJ0KCRoYW5kbGUsICRjYWxsYmFjaywgc3RyaW5nICRwYXRoLCBpbnQgJGludGVydmFsKSB7fQoKLyoqCiAqIEBwYXJhbSBVVkZzUG9sbCAkcG9sbAogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHV2X2ZzX3BvbGxfc3RvcCgkcG9sbCkge30KCi8qKgogKiBAcGFyYW0gVVZMb29wICR1dl9sb29wIHV2IGxvb3AgaGFuZGxlCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdXZfc3RvcCgkdXZfbG9vcCkge30KCi8qKgogKiBAcGFyYW0gVVZTaWduYWwgJHNpZ19oYW5kbGUKICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHV2X3NpZ25hbF9zdG9wKCRzaWdfaGFuZGxlKTogaW50IHt9Cjw/cGhwCgphYnN0cmFjdCBjbGFzcyBVVgp7CiAgICBwdWJsaWMgY29uc3QgUlVOX0RFRkFVTFQgPSAwOwogICAgcHVibGljIGNvbnN0IFJVTl9PTkNFID0gMTsKICAgIHB1YmxpYyBjb25zdCBSVU5fTk9XQUlUID0gMjsKICAgIHB1YmxpYyBjb25zdCBDSEFOR0UgPSAyOwogICAgcHVibGljIGNvbnN0IFJFTkFNRSA9IDE7CiAgICBwdWJsaWMgY29uc3QgUkVBREFCTEUgPSAxOwogICAgcHVibGljIGNvbnN0IFdSSVRBQkxFID0gMjsKICAgIHB1YmxpYyBjb25zdCBPX1JET05MWSA9IDA7CiAgICBwdWJsaWMgY29uc3QgT19XUk9OTFkgPSAxOwogICAgcHVibGljIGNvbnN0IE9fUkRXUiA9IDI7CiAgICBwdWJsaWMgY29uc3QgT19DUkVBVCA9IDY0OwogICAgcHVibGljIGNvbnN0IE9fRVhDTCA9IDEyODsKICAgIHB1YmxpYyBjb25zdCBPX1RSVU5DID0gNTEyOwogICAgcHVibGljIGNvbnN0IE9fQVBQRU5EID0gMTAyNDsKICAgIHB1YmxpYyBjb25zdCBTX0lGRElSID0gMTYzODQ7CiAgICBwdWJsaWMgY29uc3QgU19JRlJFRyA9IDMyNzY4OwogICAgcHVibGljIGNvbnN0IE9fTk9DVFRZID0gMjU2OwogICAgcHVibGljIGNvbnN0IFNfSVJXWFUgPSA0NDg7CiAgICBwdWJsaWMgY29uc3QgU19JUlVTUiA9IDI1NjsKICAgIHB1YmxpYyBjb25zdCBTX0lXVVNSID0gMTI4OwogICAgcHVibGljIGNvbnN0IFNfSVhVU1IgPSA2NDsKICAgIHB1YmxpYyBjb25zdCBTX0lSV1hHID0gNTY7CiAgICBwdWJsaWMgY29uc3QgU19JUkdSUCA9IDMyOwogICAgcHVibGljIGNvbnN0IFNfSVdHUlAgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBTX0lYR1JQID0gODsKICAgIHB1YmxpYyBjb25zdCBTX0lSV1hPID0gNzsKICAgIHB1YmxpYyBjb25zdCBTX0lST1RIID0gNDsKICAgIHB1YmxpYyBjb25zdCBTX0lXT1RIID0gMjsKICAgIHB1YmxpYyBjb25zdCBTX0lYT1RIID0gMTsKICAgIHB1YmxpYyBjb25zdCBTSUdfSUdOID0gMTsKICAgIHB1YmxpYyBjb25zdCBTSUdfREZMID0gMDsKICAgIHB1YmxpYyBjb25zdCBTSUdfRVJSID0gLTE7CiAgICBwdWJsaWMgY29uc3QgU0lHSFVQID0gMTsKICAgIHB1YmxpYyBjb25zdCBTSUdJTlQgPSAyOwogICAgcHVibGljIGNvbnN0IFNJR1FVSVQgPSAzOwogICAgcHVibGljIGNvbnN0IFNJR0lMTCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgU0lHVFJBUCA9IDU7CiAgICBwdWJsaWMgY29uc3QgU0lHQUJSVCA9IDY7CiAgICBwdWJsaWMgY29uc3QgU0lHSU9UID0gNjsKICAgIHB1YmxpYyBjb25zdCBTSUdCVVMgPSA3OwogICAgcHVibGljIGNvbnN0IFNJR0ZQRSA9IDg7CiAgICBwdWJsaWMgY29uc3QgU0lHS0lMTCA9IDk7CiAgICBwdWJsaWMgY29uc3QgU0lHVVNSMSA9IDEwOwogICAgcHVibGljIGNvbnN0IFNJR1NFR1YgPSAxMTsKICAgIHB1YmxpYyBjb25zdCBTSUdVU1IyID0gMTI7CiAgICBwdWJsaWMgY29uc3QgU0lHUElQRSA9IDEzOwogICAgcHVibGljIGNvbnN0IFNJR0FMUk0gPSAxNDsKICAgIHB1YmxpYyBjb25zdCBTSUdURVJNID0gMTU7CiAgICBwdWJsaWMgY29uc3QgU0lHU1RLRkxUID0gMTY7CiAgICBwdWJsaWMgY29uc3QgU0lHQ0hMRCA9IDE3OwogICAgcHVibGljIGNvbnN0IFNJR0NPTlQgPSAxODsKICAgIHB1YmxpYyBjb25zdCBTSUdTVE9QID0gMTk7CiAgICBwdWJsaWMgY29uc3QgU0lHVFNUUCA9IDIwOwogICAgcHVibGljIGNvbnN0IFNJR1RUSU4gPSAyMTsKICAgIHB1YmxpYyBjb25zdCBTSUdUVE9VID0gMjI7CiAgICBwdWJsaWMgY29uc3QgU0lHVVJHID0gMjM7CiAgICBwdWJsaWMgY29uc3QgU0lHWENQVSA9IDI0OwogICAgcHVibGljIGNvbnN0IFNJR1hGU1ogPSAyNTsKICAgIHB1YmxpYyBjb25zdCBTSUdWVEFMUk0gPSAyNjsKICAgIHB1YmxpYyBjb25zdCBTSUdQUk9GID0gMjc7CiAgICBwdWJsaWMgY29uc3QgU0lHV0lOQ0ggPSAyODsKICAgIHB1YmxpYyBjb25zdCBTSUdQT0xMID0gMjk7CiAgICBwdWJsaWMgY29uc3QgU0lHSU8gPSAyOTsKICAgIHB1YmxpYyBjb25zdCBTSUdQV1IgPSAzMDsKICAgIHB1YmxpYyBjb25zdCBTSUdTWVMgPSAzMTsKICAgIHB1YmxpYyBjb25zdCBTSUdCQUJZID0gMzE7CiAgICBwdWJsaWMgY29uc3QgQUZfSU5FVCA9IDI7CiAgICBwdWJsaWMgY29uc3QgQUZfSU5FVDYgPSAxMDsKICAgIHB1YmxpYyBjb25zdCBBRl9VTlNQRUMgPSAwOwogICAgcHVibGljIGNvbnN0IExFQVZFX0dST1VQID0gMDsKICAgIHB1YmxpYyBjb25zdCBKT0lOX0dST1VQID0gMTsKICAgIHB1YmxpYyBjb25zdCBJU19VVl9UQ1AgPSAwOwogICAgcHVibGljIGNvbnN0IElTX1VWX1VEUCA9IDE7CiAgICBwdWJsaWMgY29uc3QgSVNfVVZfUElQRSA9IDI7CiAgICBwdWJsaWMgY29uc3QgSVNfVVZfSURMRSA9IDM7CiAgICBwdWJsaWMgY29uc3QgSVNfVVZfVElNRVIgPSA0OwogICAgcHVibGljIGNvbnN0IElTX1VWX0FTWU5DID0gNTsKICAgIHB1YmxpYyBjb25zdCBJU19VVl9MT09QID0gNjsKICAgIHB1YmxpYyBjb25zdCBJU19VVl9IQU5ETEUgPSA3OwogICAgcHVibGljIGNvbnN0IElTX1VWX1NUUkVBTSA9IDg7CiAgICBwdWJsaWMgY29uc3QgSVNfVVZfQUREUklORk8gPSA5OwogICAgcHVibGljIGNvbnN0IElTX1VWX1BST0NFU1MgPSAxMDsKICAgIHB1YmxpYyBjb25zdCBJU19VVl9QUkVQQVJFID0gMTE7CiAgICBwdWJsaWMgY29uc3QgSVNfVVZfQ0hFQ0sgPSAxMjsKICAgIHB1YmxpYyBjb25zdCBJU19VVl9XT1JLID0gMTM7CiAgICBwdWJsaWMgY29uc3QgSVNfVVZfRlMgPSAxNDsKICAgIHB1YmxpYyBjb25zdCBJU19VVl9GU19FVkVOVCA9IDE1OwogICAgcHVibGljIGNvbnN0IElTX1VWX1RUWSA9IDE2OwogICAgcHVibGljIGNvbnN0IElTX1VWX0ZTX1BPTEwgPSAxNzsKICAgIHB1YmxpYyBjb25zdCBJU19VVl9QT0xMID0gMTg7CiAgICBwdWJsaWMgY29uc3QgVU5LTk9XTl9IQU5ETEUgPSAwOwogICAgcHVibGljIGNvbnN0IEZJTEUgPSAxNzsKICAgIHB1YmxpYyBjb25zdCBBU1lOQyA9IDE7CiAgICBwdWJsaWMgY29uc3QgQ0hFQ0sgPSAyOwogICAgcHVibGljIGNvbnN0IEZTX0VWRU5UID0gMzsKICAgIHB1YmxpYyBjb25zdCBGU19QT0xMID0gNDsKICAgIHB1YmxpYyBjb25zdCBIQU5ETEUgPSA1OwogICAgcHVibGljIGNvbnN0IElETEUgPSA2OwogICAgcHVibGljIGNvbnN0IE5BTUVEX1BJUEUgPSA3OwogICAgcHVibGljIGNvbnN0IFBPTEwgPSA4OwogICAgcHVibGljIGNvbnN0IFBSRVBBUkUgPSA5OwogICAgcHVibGljIGNvbnN0IFBST0NFU1MgPSAxMDsKICAgIHB1YmxpYyBjb25zdCBTVFJFQU0gPSAxMTsKICAgIHB1YmxpYyBjb25zdCBUQ1AgPSAxMjsKICAgIHB1YmxpYyBjb25zdCBUSU1FUiA9IDEzOwogICAgcHVibGljIGNvbnN0IFRUWSA9IDE0OwogICAgcHVibGljIGNvbnN0IFVEUCA9IDE1OwogICAgcHVibGljIGNvbnN0IFNJR05BTCA9IDE2OwogICAgcHVibGljIGNvbnN0IEhBTkRMRV9UWVBFX01BWCA9IDE4OwogICAgcHVibGljIGNvbnN0IElHTk9SRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ1JFQVRFX1BJUEUgPSAxOwogICAgcHVibGljIGNvbnN0IElOSEVSSVRfRkQgPSAyOwogICAgcHVibGljIGNvbnN0IElOSEVSSVRfU1RSRUFNID0gNDsKICAgIHB1YmxpYyBjb25zdCBSRUFEQUJMRV9QSVBFID0gMTY7CiAgICBwdWJsaWMgY29uc3QgV1JJVEFCTEVfUElQRSA9IDMyOwogICAgcHVibGljIGNvbnN0IFBST0NFU1NfU0VUVUlEID0gMTsKICAgIHB1YmxpYyBjb25zdCBQUk9DRVNTX1NFVEdJRCA9IDI7CiAgICBwdWJsaWMgY29uc3QgUFJPQ0VTU19XSU5ET1dTX1ZFUkJBVElNX0FSR1VNRU5UUyA9IDQ7CiAgICBwdWJsaWMgY29uc3QgUFJPQ0VTU19ERVRBQ0hFRCA9IDg7CiAgICBwdWJsaWMgY29uc3QgRTJCSUcgPSAtNzsKICAgIHB1YmxpYyBjb25zdCBFQUNDRVMgPSAtMTM7CiAgICBwdWJsaWMgY29uc3QgRUFERFJJTlVTRSA9IC05ODsKICAgIHB1YmxpYyBjb25zdCBFQUREUk5PVEFWQUlMID0gLTk5OwogICAgcHVibGljIGNvbnN0IEVBRk5PU1VQUE9SVCA9IC05NzsKICAgIHB1YmxpYyBjb25zdCBFQUdBSU4gPSAtMTE7CiAgICBwdWJsaWMgY29uc3QgRUFJX0FERFJGQU1JTFkgPSAtMzAwMDsKICAgIHB1YmxpYyBjb25zdCBFQUlfQUdBSU4gPSAtMzAwMTsKICAgIHB1YmxpYyBjb25zdCBFQUlfQkFERkxBR1MgPSAtMzAwMjsKICAgIHB1YmxpYyBjb25zdCBFQUlfQkFESElOVFMgPSAtMzAxMzsKICAgIHB1YmxpYyBjb25zdCBFQUlfQ0FOQ0VMRUQgPSAtMzAwMzsKICAgIHB1YmxpYyBjb25zdCBFQUlfRkFJTCA9IC0zMDA0OwogICAgcHVibGljIGNvbnN0IEVBSV9GQU1JTFkgPSAtMzAwNTsKICAgIHB1YmxpYyBjb25zdCBFQUlfTUVNT1JZID0gLTMwMDY7CiAgICBwdWJsaWMgY29uc3QgRUFJX05PREFUQSA9IC0zMDA3OwogICAgcHVibGljIGNvbnN0IEVBSV9OT05BTUUgPSAtMzAwODsKICAgIHB1YmxpYyBjb25zdCBFQUlfT1ZFUkZMT1cgPSAtMzAwOTsKICAgIHB1YmxpYyBjb25zdCBFQUlfUFJPVE9DT0wgPSAtMzAxNDsKICAgIHB1YmxpYyBjb25zdCBFQUlfU0VSVklDRSA9IC0zMDEwOwogICAgcHVibGljIGNvbnN0IEVBSV9TT0NLVFlQRSA9IC0zMDExOwogICAgcHVibGljIGNvbnN0IEVBTFJFQURZID0gLTExNDsKICAgIHB1YmxpYyBjb25zdCBFQkFERiA9IC05OwogICAgcHVibGljIGNvbnN0IEVCVVNZID0gLTE2OwogICAgcHVibGljIGNvbnN0IEVDQU5DRUxFRCA9IC0xMjU7CiAgICBwdWJsaWMgY29uc3QgRUNIQVJTRVQgPSAtNDA4MDsKICAgIHB1YmxpYyBjb25zdCBFQ09OTkFCT1JURUQgPSAtMTAzOwogICAgcHVibGljIGNvbnN0IEVDT05OUkVGVVNFRCA9IC0xMTE7CiAgICBwdWJsaWMgY29uc3QgRUNPTk5SRVNFVCA9IC0xMDQ7CiAgICBwdWJsaWMgY29uc3QgRURFU1RBRERSUkVRID0gLTg5OwogICAgcHVibGljIGNvbnN0IEVFWElTVCA9IC0xNzsKICAgIHB1YmxpYyBjb25zdCBFRkFVTFQgPSAtMTQ7CiAgICBwdWJsaWMgY29uc3QgRUZCSUcgPSAtMjc7CiAgICBwdWJsaWMgY29uc3QgRUhPU1RVTlJFQUNIID0gLTExMzsKICAgIHB1YmxpYyBjb25zdCBFSU5UUiA9IC00OwogICAgcHVibGljIGNvbnN0IEVJTlZBTCA9IC0yMjsKICAgIHB1YmxpYyBjb25zdCBFSU8gPSAtNTsKICAgIHB1YmxpYyBjb25zdCBFSVNDT05OID0gLTEwNjsKICAgIHB1YmxpYyBjb25zdCBFSVNESVIgPSAtMjE7CiAgICBwdWJsaWMgY29uc3QgRUxPT1AgPSAtNDA7CiAgICBwdWJsaWMgY29uc3QgRU1GSUxFID0gLTI0OwogICAgcHVibGljIGNvbnN0IEVNU0dTSVpFID0gLTkwOwogICAgcHVibGljIGNvbnN0IEVOQU1FVE9PTE9ORyA9IC0zNjsKICAgIHB1YmxpYyBjb25zdCBFTkVURE9XTiA9IC0xMDA7CiAgICBwdWJsaWMgY29uc3QgRU5FVFVOUkVBQ0ggPSAtMTAxOwogICAgcHVibGljIGNvbnN0IEVORklMRSA9IC0yMzsKICAgIHB1YmxpYyBjb25zdCBFTk9CVUZTID0gLTEwNTsKICAgIHB1YmxpYyBjb25zdCBFTk9ERVYgPSAtMTk7CiAgICBwdWJsaWMgY29uc3QgRU5PRU5UID0gLTI7CiAgICBwdWJsaWMgY29uc3QgRU5PTUVNID0gLTEyOwogICAgcHVibGljIGNvbnN0IEVOT05FVCA9IC02NDsKICAgIHB1YmxpYyBjb25zdCBFTk9QUk9UT09QVCA9IC05MjsKICAgIHB1YmxpYyBjb25zdCBFTk9TUEMgPSAtMjg7CiAgICBwdWJsaWMgY29uc3QgRU5PU1lTID0gLTM4OwogICAgcHVibGljIGNvbnN0IEVOT1RDT05OID0gLTEwNzsKICAgIHB1YmxpYyBjb25zdCBFTk9URElSID0gLTIwOwogICAgcHVibGljIGNvbnN0IEVOT1RFTVBUWSA9IC0zOTsKICAgIHB1YmxpYyBjb25zdCBFTk9UU09DSyA9IC04ODsKICAgIHB1YmxpYyBjb25zdCBFTk9UU1VQID0gLTk1OwogICAgcHVibGljIGNvbnN0IEVQRVJNID0gLTE7CiAgICBwdWJsaWMgY29uc3QgRVBJUEUgPSAtMzI7CiAgICBwdWJsaWMgY29uc3QgRVBST1RPID0gLTcxOwogICAgcHVibGljIGNvbnN0IEVQUk9UT05PU1VQUE9SVCA9IC05MzsKICAgIHB1YmxpYyBjb25zdCBFUFJPVE9UWVBFID0gLTkxOwogICAgcHVibGljIGNvbnN0IEVSQU5HRSA9IC0zNDsKICAgIHB1YmxpYyBjb25zdCBFUk9GUyA9IC0zMDsKICAgIHB1YmxpYyBjb25zdCBFU0hVVERPV04gPSAtMTA4OwogICAgcHVibGljIGNvbnN0IEVTUElQRSA9IC0yOTsKICAgIHB1YmxpYyBjb25zdCBFU1JDSCA9IC0zOwogICAgcHVibGljIGNvbnN0IEVUSU1FRE9VVCA9IC0xMTA7CiAgICBwdWJsaWMgY29uc3QgRVRYVEJTWSA9IC0yNjsKICAgIHB1YmxpYyBjb25zdCBFWERFViA9IC0xODsKICAgIHB1YmxpYyBjb25zdCBVTktOT1dOID0gLTQwOTQ7CiAgICBwdWJsaWMgY29uc3QgRU9GID0gLTQwOTU7CiAgICBwdWJsaWMgY29uc3QgRU5YSU8gPSAtNjsKICAgIHB1YmxpYyBjb25zdCBFTUxJTksgPSAtMzE7CiAgICBwdWJsaWMgY29uc3QgRUhPU1RET1dOID0gLTExMjsKICAgIHB1YmxpYyBjb25zdCBFUkVNT1RFSU8gPSAtMTIxOwogICAgcHVibGljIGNvbnN0IEVOT1RUWSA9IC0yNTsKICAgIHB1YmxpYyBjb25zdCBFRlRZUEUgPSAtNDAyODsKfQoKYWJzdHJhY3QgY2xhc3MgVVZTdHJlYW0gZXh0ZW5kcyBVViB7fQoKY2xhc3MgVVZUY3AgZXh0ZW5kcyBVVlN0cmVhbSB7fQpjbGFzcyBVVlVkcCBleHRlbmRzIFVWIHt9CmNsYXNzIFVWUGlwZSBleHRlbmRzIFVWU3RyZWFtIHt9CmNsYXNzIFVWSWRsZSBleHRlbmRzIFVWIHt9CmNsYXNzIFVWVGltZXIgZXh0ZW5kcyBVViB7fQpjbGFzcyBVVkFzeW5jIGV4dGVuZHMgVVYge30KY2xhc3MgVVZBZGRyaW5mbyBleHRlbmRzIFVWIHt9CmNsYXNzIFVWUHJvY2VzcyBleHRlbmRzIFVWIHt9CmNsYXNzIFVWUHJlcGFyZSBleHRlbmRzIFVWIHt9CmNsYXNzIFVWQ2hlY2sgZXh0ZW5kcyBVViB7fQpjbGFzcyBVVldvcmsgZXh0ZW5kcyBVViB7fQpjbGFzcyBVVkZzIGV4dGVuZHMgVVYge30KY2xhc3MgVVZGc0V2ZW50IGV4dGVuZHMgVVYge30KY2xhc3MgVVZUdHkgZXh0ZW5kcyBVVlN0cmVhbSB7fQpjbGFzcyBVVkZzUG9sbCBleHRlbmRzIFVWIHt9CmNsYXNzIFVWUG9sbCBleHRlbmRzIFVWIHt9CmNsYXNzIFVWU2lnbmFsIGV4dGVuZHMgVVYge30KCmNsYXNzIFVWTG9vcCB7fQoKYWJzdHJhY3QgY2xhc3MgVVZTb2NrQWRkciB7fQpjbGFzcyBVVlNvY2tBZGRySVB2NCBleHRlbmRzIFVWU29ja0FkZHIge30KY2xhc3MgVVZTb2NrQWRkcklQdjYgZXh0ZW5kcyBVVlNvY2tBZGRyIHt9CgpjbGFzcyBVVkxvY2sge30KY2xhc3MgVVZTdGRpbyB7fQo8P3BocAoKLy8gU3RhcnQgb2YganVkeS4KCi8qKgogKiBDbGFzcyBKdWR5LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmp1ZHkucGhwCiAqLwpjbGFzcyBKdWR5IGltcGxlbWVudHMgQXJyYXlBY2Nlc3MKewogICAgLyoqCiAgICAgKiBEZWZpbmUgdGhlIEp1ZHkgQXJyYXkgYXMgYSBCaXRzZXQgd2l0aCBrZXlzIGFzIEludGVnZXIgYW5kIFZhbHVlcyBhcyBhIEJvb2xlYW4uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmp1ZHkucGhwI2p1ZHkuY29uc3RhbnRzLmJpdHNldAogICAgICovCiAgICBwdWJsaWMgY29uc3QgQklUU0VUID0gMTsKCiAgICAvKioKICAgICAqIERlZmluZSB0aGUgSnVkeSBBcnJheSB3aXRoIGtleS92YWx1ZXMgYXMgSW50ZWdlciwgYW5kIEludGVnZXIgb25seS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuanVkeS5waHAjanVkeS5jb25zdGFudHMuaW50LXRvLWludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgSU5UX1RPX0lOVCA9IDI7CgogICAgLyoqCiAgICAgKiBEZWZpbmUgdGhlIEp1ZHkgQXJyYXkgd2l0aCBrZXlzIGFzIEludGVnZXIgYW5kIFZhbHVlcyBvZiBhbnkgdHlwZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuanVkeS5waHAjanVkeS5jb25zdGFudHMuaW50LXRvLW1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJTlRfVE9fTUlYRUQgPSAzOwoKICAgIC8qKgogICAgICogRGVmaW5lIHRoZSBKdWR5IEFycmF5IHdpdGgga2V5cyBhcyBhIFN0cmluZyBhbmQgVmFsdWVzIGFzIEludGVnZXIsIGFuZCBJbnRlZ2VyIG9ubHkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmp1ZHkucGhwI2p1ZHkuY29uc3RhbnRzLnN0cmluZy10by1pbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNUUklOR19UT19JTlQgPSA0OwoKICAgIC8qKgogICAgICogRGVmaW5lIHRoZSBKdWR5IEFycmF5IHdpdGgga2V5cyBhcyBhIFN0cmluZyBhbmQgVmFsdWVzIG9mIGFueSB0eXBlLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5qdWR5LnBocCNqdWR5LmNvbnN0YW50cy5zdHJpbmctdG8tbWl4ZWQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNUUklOR19UT19NSVhFRCA9IDU7CgogICAgLyoqCiAgICAgKiAoUEVDTCBqdWR5ICZndDs9IDAuMS4xKTxici8+CiAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgSnVkeSBvYmplY3QuIEEgSnVkeSBvYmplY3QgY2FuIGJlIGFjY2Vzc2VkIGxpa2UgYSBQSFAgQXJyYXkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2p1ZHkuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIGludCAkanVkeV90eXBlIDxwPlRoZSBKdWR5IHR5cGUgdG8gYmUgdXNlZC48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkanVkeV90eXBlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wganVkeSAmZ3Q7PSAwLjEuMSk8YnIvPgogICAgICogRGVzdHJ1Y3QgYSBKdWR5IG9iamVjdC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vanVkeS5kZXN0cnVjdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wganVkeSAmZ3Q7PSAwLjEuMSk8YnIvPgogICAgICogTG9jYXRlIHRoZSBOdGggaW5kZXggcHJlc2VudCBpbiB0aGUgSnVkeSBhcnJheS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vanVkeS5ieWNvdW50LnBocAogICAgICogQHBhcmFtIGludCAkbnRoX2luZGV4IDxwPk50aCBpbmRleCB0byByZXR1cm4uIElmIG50aF9pbmRleCBlcXVhbCAxLCB0aGVuIGl0IHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBpbmRleCBpbiB0aGUgYXJyYXkuPC9wPgogICAgICogQHJldHVybiBpbnQgPHA+UmV0dXJuIHRoZSBpbmRleCBhdCB0aGUgZ2l2ZW4gTnRoIHBvc2l0aW9uLjwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJ5Q291bnQoJG50aF9pbmRleCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGp1ZHkgJmd0Oz0gMC4xLjEpPGJyLz4KICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIEp1ZHkgYXJyYXkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2p1ZHkuY291bnQucGhwCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleF9zdGFydCBbb3B0aW9uYWxdIDxwPlN0YXJ0IGNvdW50aW5nIGZyb20gdGhlIGdpdmVuIGluZGV4LiBEZWZhdWx0IGlzIGZpcnN0IGluZGV4LjwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGluZGV4X2VuZCBbb3B0aW9uYWxdIDxwPlN0b3AgY291bnRpbmcgd2hlbiByZWFjaGluZyB0aGlzIGluZGV4LiBEZWZhdWx0IGlzIGxhc3QgaW5kZXguPC9wPgogICAgICogQHJldHVybiBpbnQgPHA+UmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMuPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoJGluZGV4X3N0YXJ0ID0gMCwgJGluZGV4X2VuZCA9IC0xKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wganVkeSAmZ3Q7PSAwLjEuMSk8YnIvPgogICAgICogU2VhcmNoIChpbmNsdXNpdmUpIGZvciB0aGUgZmlyc3QgaW5kZXggcHJlc2VudCB0aGF0IGlzIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUgcGFzc2VkIEluZGV4LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9qdWR5LmZpcnN0LnBocAogICAgICogQHBhcmFtIG1peGVkICRpbmRleCBbb3B0aW9uYWxdIDxwPlRoZSBpbmRleCBjYW4gYmUgYW4gaW50ZWdlciBvciBhIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbmRleCB3aGVyZSB0byBzdGFydCB0aGUgc2VhcmNoLjwvcD4KICAgICAqIEByZXR1cm4gbWl4ZWQgPHA+UmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGluIHRoZSBhcnJheS48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaXJzdCgkaW5kZXggPSAwKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wganVkeSAmZ3Q7PSAwLjEuMSk8YnIvPgogICAgICogU2VhcmNoIChpbmNsdXNpdmUpIGZvciB0aGUgZmlyc3QgYWJzZW50IGluZGV4IHRoYXQgaXMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHRoZSBwYXNzZWQgSW5kZXguCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2p1ZHkuZmlyc3RlbXB0eS5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkaW5kZXggW29wdGlvbmFsXSA8cD5UaGUgaW5kZXggY2FuIGJlIGFuIGludGVnZXIgb3IgYSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGUgaW5kZXggd2hlcmUgdG8gc3RhcnQgdGhlIHNlYXJjaC48L3A+CiAgICAgKiBAcmV0dXJuIG1peGVkIDxwPlJldHVybiB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBpbiB0aGUgYXJyYXkuPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmlyc3RFbXB0eSgkaW5kZXggPSAwKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wganVkeSAmZ3Q7PSAwLjEuMSk8YnIvPgogICAgICogRnJlZSB0aGUgZW50aXJlIEp1ZHkgYXJyYXkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2p1ZHkuZnJlZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyZWUoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wganVkeSAmZ3Q7PSAwLjEuMSk8YnIvPgogICAgICogUmV0dXJuIGFuIGludGVnZXIgY29ycmVzcG9uZGluZyB0byB0aGUgSnVkeSB0eXBlIG9mIHRoZSBjdXJyZW50IG9iamVjdC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vanVkeS5nZXR0eXBlLnBocAogICAgICogQHJldHVybiBpbnQgPHA+UmV0dXJuIGFuIGludGVnZXIgY29ycmVzcG9uZGluZyB0byBhIEp1ZHkgdHlwZS48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGp1ZHkgJmd0Oz0gMC4xLjEpPGJyLz4KICAgICAqIFNlYXJjaCAoaW5jbHVzaXZlKSBmb3IgdGhlIGxhc3QgaW5kZXggcHJlc2VudCB0aGF0IGlzIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiB0aGUgcGFzc2VkIEluZGV4LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9qdWR5Lmxhc3QucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkaW5kZXggW29wdGlvbmFsXSA8cD5UaGUgaW5kZXggY2FuIGJlIGFuIGludGVnZXIgb3IgYSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGUgaW5kZXggd2hlcmUgdG8gc3RhcnQgdGhlIHNlYXJjaC48L3A+CiAgICAgKiBAcmV0dXJuIG1peGVkIDxwPlJldHVybiB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBpbiB0aGUgYXJyYXkuPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGFzdCgkaW5kZXggPSAtMSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGp1ZHkgJmd0Oz0gMC4xLjEpPGJyLz4KICAgICAqIFNlYXJjaCAoaW5jbHVzaXZlKSBmb3IgdGhlIGxhc3QgYWJzZW50IGluZGV4IHRoYXQgaXMgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIHRoZSBwYXNzZWQgSW5kZXguCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2p1ZHkubGFzdGVtcHR5LnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGluZGV4IFtvcHRpb25hbF0gPHA+VGhlIGluZGV4IGNhbiBiZSBhbiBpbnRlZ2VyIG9yIGEgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGluZGV4IHdoZXJlIHRvIHN0YXJ0IHRoZSBzZWFyY2guPC9wPgogICAgICogQHJldHVybiBtaXhlZCA8cD5SZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggaW4gdGhlIGFycmF5LjwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxhc3RFbXB0eSgkaW5kZXggPSAtMSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGp1ZHkgJmd0Oz0gMC4xLjEpPGJyLz4KICAgICAqIFJldHVybiB0aGUgbWVtb3J5IHVzZWQgYnkgdGhlIEp1ZHkgYXJyYXkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2p1ZHkubWVtb3J5dXNhZ2UucGhwCiAgICAgKiBAcmV0dXJuIGludCA8cD5SZXR1cm4gdGhlIG1lbW9yeSB1c2VkIGluIGJ5dGVzLjwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1lbW9yeVVzYWdlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGp1ZHkgJmd0Oz0gMC4xLjEpPGJyLz4KICAgICAqIFNlYXJjaCAoZXhjbHVzaXZlKSBmb3IgdGhlIG5leHQgaW5kZXggcHJlc2VudCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGFzc2VkIEluZGV4LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9qdWR5Lm5leHQucGhwCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGluZGV4IDxwPlRoZSBpbmRleCBjYW4gYmUgYW4gaW50ZWdlciBvciBhIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbmRleCB3aGVyZSB0byBzdGFydCB0aGUgc2VhcmNoLjwvcD4KICAgICAqIEByZXR1cm4gbWl4ZWQgPHA+UmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGluIHRoZSBhcnJheS48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCRpbmRleCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGp1ZHkgJmd0Oz0gMC4xLjEpPGJyLz4KICAgICAqIFNlYXJjaCAoZXhjbHVzaXZlKSBmb3IgdGhlIG5leHQgYWJzZW50IGluZGV4IHRoYXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBwYXNzZWQgSW5kZXguCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2p1ZHkubmV4dGVtcHR5LnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGluZGV4IDxwPlRoZSBpbmRleCBjYW4gYmUgYW4gaW50ZWdlciBvciBhIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbmRleCB3aGVyZSB0byBzdGFydCB0aGUgc2VhcmNoLjwvcD4KICAgICAqIEByZXR1cm4gbWl4ZWQgPHA+UmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGluIHRoZSBhcnJheS48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0RW1wdHkoJGluZGV4KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wganVkeSAmZ3Q7PSAwLjEuMSk8YnIvPgogICAgICogV2hldGhlciBvciBub3QgYW4gb2Zmc2V0IGV4aXN0cy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vanVkeS5vZmZzZXRleGlzdHMucGhwCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9mZnNldCA8cD5BbiBvZmZzZXQgdG8gY2hlY2sgZm9yLjwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8cD5SZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRvZmZzZXQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBqdWR5ICZndDs9IDAuMS4xKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhdCBzcGVjaWZpZWQgb2Zmc2V0LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9qdWR5Lm9mZnNldGdldC5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkb2Zmc2V0IDxwPkFuIG9mZnNldCB0byBjaGVjayBmb3IuPC9wPgogICAgICogQHJldHVybiBtaXhlZCA8cD5DYW4gcmV0dXJuIGFsbCB2YWx1ZSB0eXBlcy48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG9mZnNldCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGp1ZHkgJmd0Oz0gMC4xLjEpPGJyLz4KICAgICAqIEFzc2lnbnMgYSB2YWx1ZSB0byB0aGUgc3BlY2lmaWVkIG9mZnNldC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vanVkeS5vZmZzZXRzZXQucGhwCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9mZnNldCA8cD5UaGUgb2Zmc2V0IHRvIGFzc2lnbiB0aGUgdmFsdWUgdG8uPC9wPgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSA8cD5UaGUgdmFsdWUgdG8gc2V0LjwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkb2Zmc2V0LCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBqdWR5ICZndDs9IDAuMS4xKTxici8+CiAgICAgKiBVbnNldHMgYW4gb2Zmc2V0LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9qdWR5Lm9mZnNldHVuc2V0LnBocAogICAgICogQHBhcmFtIG1peGVkICRvZmZzZXQgPHA+VGhlIG9mZnNldCB0byBhc3NpZ24gdGhlIHZhbHVlIHRvLjwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRvZmZzZXQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBqdWR5ICZndDs9IDAuMS4xKTxici8+CiAgICAgKiBTZWFyY2ggKGV4Y2x1c2l2ZSkgZm9yIHRoZSBwcmV2aW91cyBpbmRleCBwcmVzZW50IHRoYXQgaXMgbGVzcyB0aGFuIHRoZSBwYXNzZWQgSW5kZXguCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2p1ZHkucHJldi5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkaW5kZXggPHA+VGhlIGluZGV4IGNhbiBiZSBhbiBpbnRlZ2VyIG9yIGEgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGluZGV4IHdoZXJlIHRvIHN0YXJ0IHRoZSBzZWFyY2guPC9wPgogICAgICogQHJldHVybiBtaXhlZCA8cD5SZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggaW4gdGhlIGFycmF5LjwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXYoJGluZGV4KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wganVkeSAmZ3Q7PSAwLjEuMSk8YnIvPgogICAgICogU2VhcmNoIChleGNsdXNpdmUpIGZvciB0aGUgcHJldmlvdXMgaW5kZXggYWJzZW50IHRoYXQgaXMgbGVzcyB0aGFuIHRoZSBwYXNzZWQgSW5kZXguCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2p1ZHkucHJldmVtcHR5LnBocAogICAgICogQHBhcmFtIG1peGVkICRpbmRleCA8cD5UaGUgaW5kZXggY2FuIGJlIGFuIGludGVnZXIgb3IgYSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGUgaW5kZXggd2hlcmUgdG8gc3RhcnQgdGhlIHNlYXJjaC48L3A+CiAgICAgKiBAcmV0dXJuIG1peGVkIDxwPlJldHVybiB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBpbiB0aGUgYXJyYXkuPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJldkVtcHR5KCRpbmRleCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGp1ZHkgJmd0Oz0gMC4xLjEpPGJyLz4KICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIEp1ZHkgYXJyYXkuPGJyLz4KICAgICAqIFRoaXMgbWV0aG9kIGlzIGFuIGFsaWFzIG9mICAgICAgY29uc3QgY291bnQuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2p1ZHkuc2l6ZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4X3N0YXJ0IFtvcHRpb25hbF0gPHA+U3RhcnQgY291bnRpbmcgZnJvbSB0aGUgZ2l2ZW4gaW5kZXguIERlZmF1bHQgaXMgZmlyc3QgaW5kZXguPC9wPgogICAgICogQHBhcmFtIGludCAkaW5kZXhfZW5kIFtvcHRpb25hbF0gPHA+U3RvcCBjb3VudGluZyB3aGVuIHJlYWNoaW5nIHRoaXMgaW5kZXguIERlZmF1bHQgaXMgbGFzdCBpbmRleC48L3A+CiAgICAgKiBAcmV0dXJuIGludCA8cD5SZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cy48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaXplKCRpbmRleF9zdGFydCA9IDAsICRpbmRleF9lbmQgPSAtMSkge30KfQoKLy8gRW5kIG9mIGp1ZHkuCjw/cGhwCgovLyBTdGFydCBvZiBpbm90aWZ5IHYuMC4xLjYKCi8qKgogKiAoUEhQICZndDs9IDUuMi4wLCBQRUNMIGlub3RpZnkgJmd0Oz0gMC4xLjIpPGJyLz4KICogQWRkIGEgd2F0Y2ggdG8gYW4gaW5pdGlhbGl6ZWQgaW5vdGlmeSBpbnN0YW5jZQogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmlub3RpZnktYWRkLXdhdGNoLnBocAogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGlub3RpZnlfaW5zdGFuY2UgPHA+cmVzb3VyY2UgcmV0dXJuZWQgYnkge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW5vdGlmeS1pbml0LnBocCBpbm90aWZ5X2luaXQoKX08L3A+CiAqIEBwYXJhbSBzdHJpbmcgICAkcGF0aG5hbWUgICAgICAgICA8cD5GaWxlIG9yIGRpcmVjdG9yeSB0byB3YXRjaDwvcD4KICogQHBhcmFtIGludCAgICAgICRtYXNrICAgICAgICAgICAgIDxwPkV2ZW50cyB0byB3YXRjaCBmb3IuIFNlZSB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbm90aWZ5LmNvbnN0YW50cy5waHAgUHJlZGVmaW5lZCBDb25zdGFudHN9LjwvcD4KICoKICogQHJldHVybiBpbnQgYSB1bmlxdWUgKDxpPmlub3RpZnk8L2k+IGluc3RhbmNlLXdpZGUpIHdhdGNoIGRlc2NyaXB0b3IuCiAqLwpmdW5jdGlvbiBpbm90aWZ5X2FkZF93YXRjaCgkaW5vdGlmeV9pbnN0YW5jZSwgJHBhdGhuYW1lLCAkbWFzaykge30KCi8qKgogKiAoUEhQICZndDs9IDUuMi4wLCBQRUNMIGlub3RpZnkgJmd0Oz0gMC4xLjIpPGJyLz4KICogSW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlIGZvciB1c2Ugd2l0aCB7QHNlZSBpbm90aWZ5X2FkZF93YXRjaH0KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbm90aWZ5LWluaXQucGhwCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgYSBzdHJlYW0gcmVzb3VyY2Ugb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KZnVuY3Rpb24gaW5vdGlmeV9pbml0KCkge30KCi8qKgogKiAoUEhQICZndDs9IDUuMi4wLCBQRUNMIGlub3RpZnkgJmd0Oz0gMC4xLjIpPGJyLz4KICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8ga25vdyBpZiB7QHNlZSBpbm90aWZ5X3JlYWR9IHdpbGwgYmxvY2sgb3Igbm90LgogKiBJZiBhIG51bWJlciB1cHBlciB0aGFuIHplcm8gaXMgcmV0dXJuZWQsIHRoZXJlIGFyZSBwZW5kaW5nIGV2ZW50cwogKiBhbmQge0BzZWUgaW5vdGlmeV9yZWFkfSB3aWxsIG5vdCBibG9jay4KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbm90aWZ5LXF1ZXVlLWxlbi5waHAKICoKICogQHBhcmFtIHJlc291cmNlICRpbm90aWZ5X2luc3RhbmNlIDxwPnJlc291cmNlIHJldHVybmVkIGJ5IHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmlub3RpZnktaW5pdC5waHAgaW5vdGlmeV9pbml0KCl9PC9wPgogKgogKiBAcmV0dXJuIGludCBhIG51bWJlciBncmVhdGVyIHRoYW4gemVybyBpZiBldmVudHMgYXJlIHBlbmRpbmcsIG90aGVyd2lzZSB6ZXJvLgogKi8KZnVuY3Rpb24gaW5vdGlmeV9xdWV1ZV9sZW4oJGlub3RpZnlfaW5zdGFuY2UpIHt9CgovKioKICogKFBIUCAmZ3Q7PSA1LjIuMCwgUEVDTCBpbm90aWZ5ICZndDs9IDAuMS4yKTxici8+CiAqIFJlYWQgaW5vdGlmeSBldmVudHMgZnJvbSBhbiBpbm90aWZ5IGluc3RhbmNlLgogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmlub3RpZnktcmVhZC5waHAKICoKICogQHBhcmFtIHJlc291cmNlICRpbm90aWZ5X2luc3RhbmNlIDxwPnJlc291cmNlIHJldHVybmVkIGJ5IHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmlub3RpZnktaW5pdC5waHAgaW5vdGlmeV9pbml0KCl9PC9wPgogKgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIGFuIGFycmF5IG9mIGlub3RpZnkgZXZlbnRzIG9yIDxiPkZBTFNFPC9iPiBpZiBubyBldmVudHMKICogd2VyZSBwZW5kaW5nIGFuZCA8aT5pbm90aWZ5X2luc3RhbmNlPC9pPiBpcyBub24tYmxvY2tpbmcuIEVhY2ggZXZlbnQKICogaXMgYW4gYXJyYXkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqCiAqIDx1bD4KICogIDxsaT48Yj53ZDwvYj4gaXMgYSB3YXRjaCBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGlub3RpZnlfYWRkX3dhdGNoKCk8L2xpPgogKiAgPGxpPjxiPm1hc2s8L2I+IGlzIGEgYml0IG1hc2sgb2YgZXZlbnRzPC9saT4KICogIDxsaT48Yj5jb29raWU8L2I+IGlzIGEgdW5pcXVlIGlkIHRvIGNvbm5lY3QgcmVsYXRlZCBldmVudHMgKGUuZy4gSU5fTU9WRV9GUk9NIGFuZCBJTl9NT1ZFX1RPKTwvbGk+CiAqICA8bGk+PGI+bmFtZTwvYj4gaXMgdGhlIG5hbWUgb2YgYSBmaWxlIChlLmcuIGlmIGEgZmlsZSB3YXMgbW9kaWZpZWQgaW4gYSB3YXRjaGVkIGRpcmVjdG9yeSk8L2xpPgogKiA8L3VsPgogKi8KZnVuY3Rpb24gaW5vdGlmeV9yZWFkKCRpbm90aWZ5X2luc3RhbmNlKSB7fQoKLyoqCiAqIChQSFAgJmd0Oz0gNS4yLjAsIFBFQ0wgaW5vdGlmeSAmZ3Q7PSAwLjEuMik8YnIvPgogKiBSZW1vdmVzIHRoZSB3YXRjaCA8aT4kd2F0Y2hfZGVzY3JpcHRvcjwvaT4gZnJvbSB0aGUgaW5vdGlmeSBpbnN0YW5jZSA8aT4kaW5vdGlmeV9pbnN0YW5jZTwvaT4uCiAqCiAqIEBsaW5rICAgICBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbm90aWZ5LXJtLXdhdGNoLnBocAogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGlub3RpZnlfaW5zdGFuY2UgPHA+cmVzb3VyY2UgcmV0dXJuZWQgYnkge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW5vdGlmeS1pbml0LnBocCBpbm90aWZ5X2luaXQoKX08L3A+CiAqIEBwYXJhbSBpbnQgICAgICAkbWFzayA8cD53YXRjaCB0byByZW1vdmUgZnJvbSB0aGUgaW5zdGFuY2U8L3A+CiAqCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaW5vdGlmeV9ybV93YXRjaCgkaW5vdGlmeV9pbnN0YW5jZSwgJG1hc2spIHt9CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbm90aWZ5LmNvbnN0YW50cy5waHAKICovCmNvbnN0IElOX0FDQ0VTUyA9IDE7Ci8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2lub3RpZnkuY29uc3RhbnRzLnBocAogKi8KY29uc3QgSU5fTU9ESUZZID0gMjsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW5vdGlmeS5jb25zdGFudHMucGhwCiAqLwpjb25zdCBJTl9BVFRSSUIgPSA0OwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbm90aWZ5LmNvbnN0YW50cy5waHAKICovCmNvbnN0IElOX0NMT1NFX1dSSVRFID0gODsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW5vdGlmeS5jb25zdGFudHMucGhwCiAqLwpjb25zdCBJTl9DTE9TRV9OT1dSSVRFID0gMTY7Ci8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2lub3RpZnkuY29uc3RhbnRzLnBocAogKi8KY29uc3QgSU5fT1BFTiA9IDMyOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbm90aWZ5LmNvbnN0YW50cy5waHAKICovCmNvbnN0IElOX01PVkVEX0ZST00gPSA2NDsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW5vdGlmeS5jb25zdGFudHMucGhwCiAqLwpjb25zdCBJTl9NT1ZFRF9UTyA9IDEyODsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW5vdGlmeS5jb25zdGFudHMucGhwCiAqLwpjb25zdCBJTl9DUkVBVEUgPSAyNTY7Ci8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2lub3RpZnkuY29uc3RhbnRzLnBocAogKi8KY29uc3QgSU5fREVMRVRFID0gNTEyOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbm90aWZ5LmNvbnN0YW50cy5waHAKICovCmNvbnN0IElOX0RFTEVURV9TRUxGID0gMTAyNDsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW5vdGlmeS5jb25zdGFudHMucGhwCiAqLwpjb25zdCBJTl9NT1ZFX1NFTEYgPSAyMDQ4OwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbm90aWZ5LmNvbnN0YW50cy5waHAKICovCmNvbnN0IElOX1VOTU9VTlQgPSA4MTkyOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbm90aWZ5LmNvbnN0YW50cy5waHAKICovCmNvbnN0IElOX1FfT1ZFUkZMT1cgPSAxNjM4NDsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW5vdGlmeS5jb25zdGFudHMucGhwCiAqLwpjb25zdCBJTl9JR05PUkVEID0gMzI3Njg7Ci8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2lub3RpZnkuY29uc3RhbnRzLnBocAogKi8KY29uc3QgSU5fQ0xPU0UgPSAyNDsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW5vdGlmeS5jb25zdGFudHMucGhwCiAqLwpjb25zdCBJTl9NT1ZFID0gMTkyOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbm90aWZ5LmNvbnN0YW50cy5waHAKICovCmNvbnN0IElOX0FMTF9FVkVOVFMgPSA0MDk1OwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbm90aWZ5LmNvbnN0YW50cy5waHAKICovCmNvbnN0IElOX09OTFlESVIgPSAxNjc3NzIxNjsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW5vdGlmeS5jb25zdGFudHMucGhwCiAqLwpjb25zdCBJTl9ET05UX0ZPTExPVyA9IDMzNTU0NDMyOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbm90aWZ5LmNvbnN0YW50cy5waHAKICovCmNvbnN0IElOX01BU0tfQUREID0gNTM2ODcwOTEyOwovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbm90aWZ5LmNvbnN0YW50cy5waHAKICovCmNvbnN0IElOX0lTRElSID0gMTA3Mzc0MTgyNDsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW5vdGlmeS5jb25zdGFudHMucGhwCiAqLwpjb25zdCBJTl9PTkVTSE9UID0gMjE0NzQ4MzY0ODsKCi8vIEVuZCBvZiBpbm90aWZ5IHYuMC4xLjYKPD9waHAKCi8vIFN0YXJ0IG9mIHlhbWwgdi4xLjIuMAoKLyoqCiAqIFNjYWxhciBlbnRpdHkgc3R5bGVzIHVzYWJsZSBieSB5YW1sX3BhcnNlKCkgY2FsbGJhY2sgbWV0aG9kcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi95YW1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnWUFNTF9BTllfU0NBTEFSX1NUWUxFJywgMCk7CmRlZmluZSgnWUFNTF9QTEFJTl9TQ0FMQVJfU1RZTEUnLCAxKTsKZGVmaW5lKCdZQU1MX1NJTkdMRV9RVU9URURfU0NBTEFSX1NUWUxFJywgMik7CmRlZmluZSgnWUFNTF9ET1VCTEVfUVVPVEVEX1NDQUxBUl9TVFlMRScsIDMpOwpkZWZpbmUoJ1lBTUxfTElURVJBTF9TQ0FMQVJfU1RZTEUnLCA0KTsKZGVmaW5lKCdZQU1MX0ZPTERFRF9TQ0FMQVJfU1RZTEUnLCA1KTsKCi8qKgogKiBDb21tb24gdGFncyB1c2FibGUgYnkgeWFtbF9wYXJzZSgpIGNhbGxiYWNrIG1ldGhvZHMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veWFtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1lBTUxfTlVMTF9UQUcnLCAndGFnOnlhbWwub3JnLDIwMDI6bnVsbCcpOwpkZWZpbmUoJ1lBTUxfQk9PTF9UQUcnLCAndGFnOnlhbWwub3JnLDIwMDI6Ym9vbCcpOwpkZWZpbmUoJ1lBTUxfU1RSX1RBRycsICd0YWc6eWFtbC5vcmcsMjAwMjpzdHInKTsKZGVmaW5lKCdZQU1MX0lOVF9UQUcnLCAndGFnOnlhbWwub3JnLDIwMDI6aW50Jyk7CmRlZmluZSgnWUFNTF9GTE9BVF9UQUcnLCAndGFnOnlhbWwub3JnLDIwMDI6ZmxvYXQnKTsKZGVmaW5lKCdZQU1MX1RJTUVTVEFNUF9UQUcnLCAndGFnOnlhbWwub3JnLDIwMDI6dGltZXN0YW1wJyk7CmRlZmluZSgnWUFNTF9TRVFfVEFHJywgJ3RhZzp5YW1sLm9yZywyMDAyOnNlcScpOwpkZWZpbmUoJ1lBTUxfTUFQX1RBRycsICd0YWc6eWFtbC5vcmcsMjAwMjptYXAnKTsKZGVmaW5lKCdZQU1MX1BIUF9UQUcnLCAnIXBocC9vYmplY3QnKTsKCi8qKgogKiBFbmNvZGluZyB0eXBlcyBmb3IgeWFtbF9lbWl0KCkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi95YW1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnWUFNTF9BTllfRU5DT0RJTkcnLCAwKTsKZGVmaW5lKCdZQU1MX1VURjhfRU5DT0RJTkcnLCAxKTsKZGVmaW5lKCdZQU1MX1VURjE2TEVfRU5DT0RJTkcnLCAyKTsKZGVmaW5lKCdZQU1MX1VURjE2QkVfRU5DT0RJTkcnLCAzKTsKCi8qKgogKiBMZXQgZW1pdHRlciBjaG9vc2UgbGluZWJyZWFrIGNoYXJhY3Rlci4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi95YW1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnWUFNTF9BTllfQlJFQUsnLCAwKTsKLyoqCiAqIFVzZSBcciBhcyBicmVhayBjaGFyYWN0ZXIgKE1hYyBzdHlsZSkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veWFtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1lBTUxfQ1JfQlJFQUsnLCAxKTsKLyoqCiAqIFVzZSBcbiBhcyBicmVhayBjaGFyYWN0ZXIgKFVuaXggc3R5bGUpLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3lhbWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdZQU1MX0xOX0JSRUFLJywgMik7Ci8qKgogKiBVc2UgXHJcbiBhcyBicmVhayBjaGFyYWN0ZXIgKERPUyBzdHlsZSkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veWFtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1lBTUxfQ1JMTl9CUkVBSycsIDMpOwoKZGVmaW5lKCdZQU1MX01FUkdFX1RBRycsICd0YWc6eWFtbC5vcmcsMjAwMjptZXJnZScpOwpkZWZpbmUoJ1lBTUxfQklOQVJZX1RBRycsICd0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnknKTsKCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgeWFtbCAmZ3Q7PSAwLjUuMCk8YnIvPgogKiBTZW5kIHRoZSBZQU1MIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFsdWUgdG8gYSBmaWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueWFtbC1lbWl0LWZpbGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFBhdGggdG8gdGhlIGZpbGUuCiAqIEBwYXJhbSBtaXhlZCAkZGF0YSBUaGUgZGF0YSBiZWluZyBlbmNvZGVkLiBDYW4gYmUgYW55IHR5cGUgZXhjZXB0IGEgcmVzb3VyY2UuCiAqIEBwYXJhbSBpbnQgJGVuY29kaW5nIE91dHB1dCBjaGFyYWN0ZXIgZW5jb2RpbmcgY2hvc2VuIGZyb20gWUFNTF9BTllfRU5DT0RJTkcsIFlBTUxfVVRGOF9FTkNPRElORywgWUFNTF9VVEYxNkxFX0VOQ09ESU5HLCBZQU1MX1VURjE2QkVfRU5DT0RJTkcuCiAqIEBwYXJhbSBpbnQgJGxpbmVicmVhayBPdXRwdXQgbGluZWJyZWFrIHN0eWxlIGNob3NlbiBmcm9tIFlBTUxfQU5ZX0JSRUFLLCBZQU1MX0NSX0JSRUFLLCBZQU1MX0xOX0JSRUFLLCBZQU1MX0NSTE5fQlJFQUsuCiAqIEBwYXJhbSBhcnJheSAkY2FsbGJhY2tzIFtvcHRpb25hbF0gQ29udGVudCBoYW5kbGVycyBmb3IgWUFNTCBub2Rlcy4gQXNzb2NpYXRpdmUgYXJyYXkgb2YgWUFNTCB0YWcgPT4gY2FsbGFibGUgbWFwcGluZ3MuIFNlZSBwYXJzZSBjYWxsYmFja3MgZm9yIG1vcmUgZGV0YWlscy4KICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzLgogKi8KZnVuY3Rpb24geWFtbF9lbWl0X2ZpbGUoJGZpbGVuYW1lLCAkZGF0YSwgJGVuY29kaW5nID0gWUFNTF9BTllfRU5DT0RJTkcsICRsaW5lYnJlYWsgPSBZQU1MX0FOWV9CUkVBSywgYXJyYXkgJGNhbGxiYWNrcyA9IFtdKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjIuMCwgUEVDTCB5YW1sICZndDs9IDAuNS4wKTxici8+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueWFtbC1lbWl0LnBocAogKiBAcGFyYW0gbWl4ZWQgJGRhdGEgVGhlIGRhdGEgYmVpbmcgZW5jb2RlZC4gQ2FuIGJlIGFueSB0eXBlIGV4Y2VwdCBhIHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRlbmNvZGluZyBbb3B0aW9uYWxdIE91dHB1dCBjaGFyYWN0ZXIgZW5jb2RpbmcgY2hvc2VuIGZyb20gWUFNTF9BTllfRU5DT0RJTkcsIFlBTUxfVVRGOF9FTkNPRElORywgWUFNTF9VVEYxNkxFX0VOQ09ESU5HLCBZQU1MX1VURjE2QkVfRU5DT0RJTkcuCiAqIEBwYXJhbSBpbnQgJGxpbmVicmVhayBbb3B0aW9uYWxdIE91dHB1dCBsaW5lYnJlYWsgc3R5bGUgY2hvc2VuIGZyb20gWUFNTF9BTllfQlJFQUssIFlBTUxfQ1JfQlJFQUssIFlBTUxfTE5fQlJFQUssIFlBTUxfQ1JMTl9CUkVBSy4KICogQHBhcmFtIGFycmF5ICRjYWxsYmFja3MgW29wdGlvbmFsXSBDb250ZW50IGhhbmRsZXJzIGZvciBZQU1MIG5vZGVzLiBBc3NvY2lhdGl2ZSBhcnJheSBvZiBZQU1MIHRhZyA9PiBjYWxsYWJsZSBtYXBwaW5ncy4gU2VlIHBhcnNlIGNhbGxiYWNrcyBmb3IgbW9yZSBkZXRhaWxzLgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgWUFNTCBlbmNvZGVkIHN0cmluZyBvbiBzdWNjZXNzLgogKi8KZnVuY3Rpb24geWFtbF9lbWl0KCRkYXRhLCAkZW5jb2RpbmcgPSBZQU1MX0FOWV9FTkNPRElORywgJGxpbmVicmVhayA9IFlBTUxfQU5ZX0JSRUFLLCBhcnJheSAkY2FsbGJhY2tzID0gW10pIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHlhbWwgJmd0Oz0gMC40LjApPGJyLz4KICogUGFyc2UgYSBZQU1MIHN0cmVhbSBmcm9tIGEgZmlsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnlhbWwtcGFyc2UtZmlsZS5waHAKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgUGF0aCB0byB0aGUgZmlsZS4KICogQHBhcmFtIGludCAkcG9zIFtvcHRpb25hbF0gRG9jdW1lbnQgdG8gZXh0cmFjdCBmcm9tIHN0cmVhbSAoLTEgZm9yIGFsbCBkb2N1bWVudHMsIDAgZm9yIGZpcnN0IGRvY3VtZW50LCAuLi4pLgogKiBAcGFyYW0gaW50ICYkbmRvY3MgW29wdGlvbmFsXSBJZiBuZG9jcyBpcyBwcm92aWRlZCwgdGhlbiBpdCBpcyBmaWxsZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGRvY3VtZW50cyBmb3VuZCBpbiBzdHJlYW0uCiAqIEBwYXJhbSBhcnJheSAkY2FsbGJhY2tzIFtvcHRpb25hbF0gQ29udGVudCBoYW5kbGVycyBmb3IgWUFNTCBub2Rlcy4gQXNzb2NpYXRpdmUgYXJyYXkgb2YgWUFNTCB0YWcgPT4gY2FsbGFibGUgbWFwcGluZ3MuIFNlZSBwYXJzZSBjYWxsYmFja3MgZm9yIG1vcmUgZGV0YWlscy4KICogQHJldHVybiBtaXhlZHxmYWxzZSBSZXR1cm5zIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGlucHV0IGluIGFwcHJvcHJpYXRlIFBIUCB0eXBlIG9yIEZBTFNFIG9uIGZhaWx1cmUuIElmIHBvcyBpcyAtMSBhbiBhcnJheSB3aWxsIGJlIHJldHVybmVkIHdpdGggb25lIGVudHJ5IGZvciBlYWNoIGRvY3VtZW50IGZvdW5kIGluIHRoZSBzdHJlYW0uCiAqLwpmdW5jdGlvbiB5YW1sX3BhcnNlX2ZpbGUoJGZpbGVuYW1lLCAkcG9zID0gMCwgJiRuZG9jcyA9IG51bGwsIGFycmF5ICRjYWxsYmFja3MgPSBbXSkge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgeWFtbCAmZ3Q7PSAwLjQuMCk8YnIvPgogKiBQYXJzZSBhIFlhbWwgc3RyZWFtIGZyb20gYSBVUkwKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi55YW1sLXBhcnNlLXVybC5waHAKICogQHBhcmFtIHN0cmluZyAkdXJsIHVybCBzaG91bGQgYmUgb2YgdGhlIGZvcm0gInNjaGVtZTovLy4uLiIuIFBIUCB3aWxsIHNlYXJjaCBmb3IgYSBwcm90b2NvbCBoYW5kbGVyIChhbHNvIGtub3duIGFzIGEgd3JhcHBlcikgZm9yIHRoYXQgc2NoZW1lLiBJZiBubyB3cmFwcGVycyBmb3IgdGhhdCBwcm90b2NvbCBhcmUgcmVnaXN0ZXJlZCwgUEhQIHdpbGwgZW1pdCBhIG5vdGljZSB0byBoZWxwIHlvdSB0cmFjayBwb3RlbnRpYWwgcHJvYmxlbXMgaW4geW91ciBzY3JpcHQgYW5kIHRoZW4gY29udGludWUgYXMgdGhvdWdoIGZpbGVuYW1lIHNwZWNpZmllcyBhIHJlZ3VsYXIgZmlsZS4KICogQHBhcmFtIGludCAkcG9zIFtvcHRpb25hbF0gRG9jdW1lbnQgdG8gZXh0cmFjdCBmcm9tIHN0cmVhbSAoLTEgZm9yIGFsbCBkb2N1bWVudHMsIDAgZm9yIGZpcnN0IGRvY3VtZW50LCAuLi4pLgogKiBAcGFyYW0gaW50ICYkbmRvY3MgW29wdGlvbmFsXSBJZiBuZG9jcyBpcyBwcm92aWRlZCwgdGhlbiBpdCBpcyBmaWxsZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGRvY3VtZW50cyBmb3VuZCBpbiBzdHJlYW0uCiAqIEBwYXJhbSBhcnJheSAkY2FsbGJhY2tzIFtvcHRpb25hbF0gQ29udGVudCBoYW5kbGVycyBmb3IgWUFNTCBub2Rlcy4gQXNzb2NpYXRpdmUgYXJyYXkgb2YgWUFNTCB0YWcgPT4gY2FsbGFibGUgbWFwcGluZ3MuIFNlZSBwYXJzZSBjYWxsYmFja3MgZm9yIG1vcmUgZGV0YWlscy4KICogQHJldHVybiBtaXhlZHxmYWxzZSBSZXR1cm5zIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGlucHV0IGluIGFwcHJvcHJpYXRlIFBIUCB0eXBlIG9yIEZBTFNFIG9uIGZhaWx1cmUuIElmIHBvcyBpcyAtMSBhbiBhcnJheSB3aWxsIGJlIHJldHVybmVkIHdpdGggb25lIGVudHJ5IGZvciBlYWNoIGRvY3VtZW50IGZvdW5kIGluIHRoZSBzdHJlYW0uCiAqLwpmdW5jdGlvbiB5YW1sX3BhcnNlX3VybCgkdXJsLCAkcG9zID0gMCwgJiRuZG9jcyA9IG51bGwsIGFycmF5ICRjYWxsYmFja3MgPSBbXSkge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgeWFtbCAmZ3Q7PSAwLjQuMCk8YnIvPgogKiBQYXJzZSBhIFlBTUwgc3RyZWFtCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueWFtbC1wYXJzZS5waHAKICogQHBhcmFtIHN0cmluZyAkaW5wdXQgVGhlIHN0cmluZyB0byBwYXJzZSBhcyBhIFlBTUwgZG9jdW1lbnQgc3RyZWFtLgogKiBAcGFyYW0gaW50ICRwb3MgW29wdGlvbmFsXSBEb2N1bWVudCB0byBleHRyYWN0IGZyb20gc3RyZWFtICgtMSBmb3IgYWxsIGRvY3VtZW50cywgMCBmb3IgZmlyc3QgZG9jdW1lbnQsIC4uLikuCiAqIEBwYXJhbSBpbnQgJiRuZG9jcyBbb3B0aW9uYWxdIElmIG5kb2NzIGlzIHByb3ZpZGVkLCB0aGVuIGl0IGlzIGZpbGxlZCB3aXRoIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIGZvdW5kIGluIHN0cmVhbS4KICogQHBhcmFtIGFycmF5ICRjYWxsYmFja3MgW29wdGlvbmFsXSBDb250ZW50IGhhbmRsZXJzIGZvciBZQU1MIG5vZGVzLiBBc3NvY2lhdGl2ZSBhcnJheSBvZiBZQU1MIHRhZyA9PiBjYWxsYWJsZSBtYXBwaW5ncy4gU2VlIHBhcnNlIGNhbGxiYWNrcyBmb3IgbW9yZSBkZXRhaWxzLgogKiBAcmV0dXJuIG1peGVkfGZhbHNlIFJldHVybnMgdGhlIHZhbHVlIGVuY29kZWQgaW4gaW5wdXQgaW4gYXBwcm9wcmlhdGUgUEhQIHR5cGUgb3IgRkFMU0Ugb24gZmFpbHVyZS4gSWYgcG9zIGlzIC0xIGFuIGFycmF5IHdpbGwgYmUgcmV0dXJuZWQgd2l0aCBvbmUgZW50cnkgZm9yIGVhY2ggZG9jdW1lbnQgZm91bmQgaW4gdGhlIHN0cmVhbS4KICovCmZ1bmN0aW9uIHlhbWxfcGFyc2UoJGlucHV0LCAkcG9zID0gMCwgJiRuZG9jcyA9IG51bGwsIGFycmF5ICRjYWxsYmFja3MgPSBbXSkge30KPD9waHAKCm5hbWVzcGFjZSB7CiAgICB1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEFycmF5U2hhcGU7CiAgICB1c2UgSmV0QnJhaW5zXFBocFN0b3JtXERlcHJlY2F0ZWQ7CiAgICB1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CiAgICB1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFBocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlOwogICAgdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxUZW50YXRpdmVUeXBlOwogICAgdXNlIEpldEJyYWluc1xQaHBTdG9ybVxQdXJlOwoKICAgIC8qKgogICAgICogUmVwcmVzZW50cyBhbiBlcnJvciByYWlzZWQgYnkgUERPLiBZb3Ugc2hvdWxkIG5vdCB0aHJvdyBhCiAgICAgKiA8Yj5QRE9FeGNlcHRpb248L2I+IGZyb20geW91ciBvd24gY29kZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS5leGNlcHRpb25zLnBocCBFeGNlcHRpb25zIGluIFBIUAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5wZG9leGNlcHRpb24ucGhwCiAgICAgKi8KICAgIGNsYXNzIFBET0V4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24KICAgIHsKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdhcnJheXxudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgICAgICBwdWJsaWMgJGVycm9ySW5mbzsKICAgICAgICBwcm90ZWN0ZWQgJGNvZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXByZXNlbnRzIGEgY29ubmVjdGlvbiBiZXR3ZWVuIFBIUCBhbmQgYSBkYXRhYmFzZSBzZXJ2ZXIuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnBkby5waHAKICAgICAqLwogICAgY2xhc3MgUERPCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogUmVwcmVzZW50cyB0aGUgU1FMIE5VTEwgZGF0YSB0eXBlLgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5wYXJhbS1udWxsCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IFBBUkFNX05VTEwgPSAwOwoKICAgICAgICAvKioKICAgICAgICAgKiBSZXByZXNlbnRzIHRoZSBTUUwgSU5URUdFUiBkYXRhIHR5cGUuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLnBhcmFtLWludAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBQQVJBTV9JTlQgPSAxOwoKICAgICAgICAvKioKICAgICAgICAgKiBSZXByZXNlbnRzIHRoZSBTUUwgQ0hBUiwgVkFSQ0hBUiwgb3Igb3RoZXIgc3RyaW5nIGRhdGEgdHlwZS4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMucGFyYW0tc3RyCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IFBBUkFNX1NUUiA9IDI7CgogICAgICAgIC8qKgogICAgICAgICAqIFJlcHJlc2VudHMgdGhlIFNRTCBsYXJnZSBvYmplY3QgZGF0YSB0eXBlLgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5wYXJhbS1sb2IKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgUEFSQU1fTE9CID0gMzsKCiAgICAgICAgLyoqCiAgICAgICAgICogUmVwcmVzZW50cyBhIHJlY29yZHNldCB0eXBlLiBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBhbnkgZHJpdmVycy4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMucGFyYW0tc3RtdAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBQQVJBTV9TVE1UID0gNDsKCiAgICAgICAgLyoqCiAgICAgICAgICogUmVwcmVzZW50cyBhIGJvb2xlYW4gZGF0YSB0eXBlLgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5wYXJhbS1ib29sCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IFBBUkFNX0JPT0wgPSA1OwoKICAgICAgICAvKioKICAgICAgICAgKiBGbGFnIHRvIGRlbm90ZSBhIHN0cmluZyB1c2VzIHRoZSBuYXRpb25hbCBjaGFyYWN0ZXIgc2V0LgogICAgICAgICAqIEBzaW5jZSA3LjIKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMucGFyYW0tc3RyLW5hdGwKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgUEFSQU1fU1RSX05BVEwgPSAxMDczNzQxODI0OwoKICAgICAgICAvKioKICAgICAgICAgKiBGbGFnIHRvIGRlbm90ZSBhIHN0cmluZyB1c2VzIHRoZSByZWd1bGFyIGNoYXJhY3RlciBzZXQuCiAgICAgICAgICogQHNpbmNlIDcuMgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5wYXJhbS1zdHItY2hhcgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBQQVJBTV9TVFJfQ0hBUiA9IDUzNjg3MDkxMjsKCiAgICAgICAgLyoqCiAgICAgICAgICogU2V0cyB0aGUgZGVmYXVsdCBzdHJpbmcgcGFyYW1ldGVyIHR5cGUsIHRoaXMgY2FuIGJlIG9uZSBvZiBQRE86OlBBUkFNX1NUUl9OQVRMIGFuZCBQRE86OlBBUkFNX1NUUl9DSEFSLgogICAgICAgICAqIEBzaW5jZSA3LjIKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuYXR0ci1kZWZhdWx0LXN0ci1wYXJhbQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBBVFRSX0RFRkFVTFRfU1RSX1BBUkFNID0gMjE7CgogICAgICAgIC8qKgogICAgICAgICAqIFNwZWNpZmllcyB0aGF0IGEgZnVuY3Rpb24gY3JlYXRlZCB3aXRoIFBETzo6c3FsaXRlQ3JlYXRlRnVuY3Rpb24oKSBpcyBkZXRlcm1pbmlzdGljLCBpLmUuIGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIHJlc3VsdCBnaXZlbiB0aGUgc2FtZSBpbnB1dHMgd2l0aGluIGEgc2luZ2xlIFNRTCBzdGF0ZW1lbnQuCiAgICAgICAgICogQHNpbmNlIDcuMS40CiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLnNxbGl0ZS1kZXRlcm1pbmlzdGljCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IFNRTElURV9ERVRFUk1JTklTVElDID0gMjA0ODsKCiAgICAgICAgLyoqCiAgICAgICAgICogQHNpbmNlIDcuMwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBTUUxJVEVfT1BFTl9SRUFET05MWSA9IDE7CgogICAgICAgIC8qKgogICAgICAgICAqIEBzaW5jZSA3LjMKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgU1FMSVRFX09QRU5fUkVBRFdSSVRFID0gMjsKCiAgICAgICAgLyoqCiAgICAgICAgICogQHNpbmNlIDcuMwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBTUUxJVEVfT1BFTl9DUkVBVEUgPSA0OwoKICAgICAgICAvKioKICAgICAgICAgKiBAc2luY2UgNy4zCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IFNRTElURV9BVFRSX09QRU5fRkxBR1MgPSAxMDAwOwoKICAgICAgICAvKioKICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgcGFyYW1ldGVyIGlzIGFuIElOT1VUIHBhcmFtZXRlciBmb3IgYSBzdG9yZWQKICAgICAgICAgKiBwcm9jZWR1cmUuIFlvdSBtdXN0IGJpdHdpc2UtT1IgdGhpcyB2YWx1ZSB3aXRoIGFuIGV4cGxpY2l0CiAgICAgICAgICogUERPOjpQQVJBTV8qIGRhdGEgdHlwZS4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMucGFyYW0taW5wdXQtb3V0cHV0CiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IFBBUkFNX0lOUFVUX09VVFBVVCA9IDIxNDc0ODM2NDg7CgogICAgICAgIC8qKgogICAgICAgICAqIEFsbG9jYXRpb24gZXZlbnQKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMucGFyYW0tZXZ0LWFsbG9jCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IFBBUkFNX0VWVF9BTExPQyA9IDA7CgogICAgICAgIC8qKgogICAgICAgICAqIERlYWxsb2NhdGlvbiBldmVudAogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5wYXJhbS1ldnQtZnJlZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBQQVJBTV9FVlRfRlJFRSA9IDE7CgogICAgICAgIC8qKgogICAgICAgICAqIEV2ZW50IHRyaWdnZXJlZCBwcmlvciB0byBleGVjdXRpb24gb2YgYSBwcmVwYXJlZCBzdGF0ZW1lbnQuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLnBhcmFtLWV2dC1leGVjLXByZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBQQVJBTV9FVlRfRVhFQ19QUkUgPSAyOwoKICAgICAgICAvKioKICAgICAgICAgKiBFdmVudCB0cmlnZ2VyZWQgc3Vic2VxdWVudCB0byBleGVjdXRpb24gb2YgYSBwcmVwYXJlZCBzdGF0ZW1lbnQuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLnBhcmFtLWV2dC1leGVjLXBvc3QKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgUEFSQU1fRVZUX0VYRUNfUE9TVCA9IDM7CgogICAgICAgIC8qKgogICAgICAgICAqIEV2ZW50IHRyaWdnZXJlZCBwcmlvciB0byBmZXRjaGluZyBhIHJlc3VsdCBmcm9tIGEgcmVzdWx0c2V0LgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5wYXJhbS1ldnQtZmV0Y2gtcHJlCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IFBBUkFNX0VWVF9GRVRDSF9QUkUgPSA0OwoKICAgICAgICAvKioKICAgICAgICAgKiBFdmVudCB0cmlnZ2VyZWQgc3Vic2VxdWVudCB0byBmZXRjaGluZyBhIHJlc3VsdCBmcm9tIGEgcmVzdWx0c2V0LgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5wYXJhbS1ldnQtZmV0Y2gtcG9zdAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBQQVJBTV9FVlRfRkVUQ0hfUE9TVCA9IDU7CgogICAgICAgIC8qKgogICAgICAgICAqIEV2ZW50IHRyaWdnZXJlZCBkdXJpbmcgYm91bmQgcGFyYW1ldGVyIHJlZ2lzdHJhdGlvbgogICAgICAgICAqIGFsbG93aW5nIHRoZSBkcml2ZXIgdG8gbm9ybWFsaXplIHRoZSBwYXJhbWV0ZXIgbmFtZS4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMucGFyYW0tZXZ0LW5vcm1hbGl6ZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBQQVJBTV9FVlRfTk9STUFMSVpFID0gNjsKCiAgICAgICAgLyoqCiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGZldGNoIG1ldGhvZCBzaGFsbCByZXR1cm4gZWFjaCByb3cgYXMgYW4gb2JqZWN0IHdpdGgKICAgICAgICAgKiB2YXJpYWJsZSBuYW1lcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIGNvbHVtbiBuYW1lcyByZXR1cm5lZCBpbiB0aGUgcmVzdWx0CiAgICAgICAgICogc2V0LiA8Yj5QRE86OkZFVENIX0xBWlk8L2I+IGNyZWF0ZXMgdGhlIG9iamVjdCB2YXJpYWJsZSBuYW1lcyBhcyB0aGV5IGFyZSBhY2Nlc3NlZC4KICAgICAgICAgKiBOb3QgdmFsaWQgaW5zaWRlIDxiPlBET1N0YXRlbWVudDo6ZmV0Y2hBbGw8L2I+LgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5mZXRjaC1sYXp5CiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZFVENIX0xBWlkgPSAxOwoKICAgICAgICAvKioKICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgZmV0Y2ggbWV0aG9kIHNoYWxsIHJldHVybiBlYWNoIHJvdyBhcyBhbiBhcnJheSBpbmRleGVkCiAgICAgICAgICogYnkgY29sdW1uIG5hbWUgYXMgcmV0dXJuZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzdWx0IHNldC4gSWYgdGhlIHJlc3VsdAogICAgICAgICAqIHNldCBjb250YWlucyBtdWx0aXBsZSBjb2x1bW5zIHdpdGggdGhlIHNhbWUgbmFtZSwKICAgICAgICAgKiA8Yj5QRE86OkZFVENIX0FTU09DPC9iPiByZXR1cm5zCiAgICAgICAgICogb25seSBhIHNpbmdsZSB2YWx1ZSBwZXIgY29sdW1uIG5hbWUuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmZldGNoLWFzc29jCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZFVENIX0FTU09DID0gMjsKCiAgICAgICAgLyoqCiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGZldGNoIG1ldGhvZCBzaGFsbCByZXR1cm4gZWFjaCByb3cgYXMgYW4gYXJyYXkgaW5kZXhlZAogICAgICAgICAqIGJ5IGNvbHVtbiBudW1iZXIgYXMgcmV0dXJuZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzdWx0IHNldCwgc3RhcnRpbmcgYXQKICAgICAgICAgKiBjb2x1bW4gMC4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuZmV0Y2gtbnVtCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZFVENIX05VTSA9IDM7CgogICAgICAgIC8qKgogICAgICAgICAqIFNwZWNpZmllcyB0aGF0IHRoZSBmZXRjaCBtZXRob2Qgc2hhbGwgcmV0dXJuIGVhY2ggcm93IGFzIGFuIGFycmF5IGluZGV4ZWQKICAgICAgICAgKiBieSBib3RoIGNvbHVtbiBuYW1lIGFuZCBudW1iZXIgYXMgcmV0dXJuZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzdWx0IHNldCwKICAgICAgICAgKiBzdGFydGluZyBhdCBjb2x1bW4gMC4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuZmV0Y2gtYm90aAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBGRVRDSF9CT1RIID0gNDsKCiAgICAgICAgLyoqCiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGZldGNoIG1ldGhvZCBzaGFsbCByZXR1cm4gZWFjaCByb3cgYXMgYW4gb2JqZWN0IHdpdGgKICAgICAgICAgKiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIGNvbHVtbiBuYW1lcyByZXR1cm5lZCBpbiB0aGUgcmVzdWx0CiAgICAgICAgICogc2V0LgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5mZXRjaC1vYmoKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgRkVUQ0hfT0JKID0gNTsKCiAgICAgICAgLyoqCiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGZldGNoIG1ldGhvZCBzaGFsbCByZXR1cm4gVFJVRSBhbmQgYXNzaWduIHRoZSB2YWx1ZXMgb2YKICAgICAgICAgKiB0aGUgY29sdW1ucyBpbiB0aGUgcmVzdWx0IHNldCB0byB0aGUgUEhQIHZhcmlhYmxlcyB0byB3aGljaCB0aGV5IHdlcmUKICAgICAgICAgKiBib3VuZCB3aXRoIHRoZSA8Yj5QRE9TdGF0ZW1lbnQ6OmJpbmRQYXJhbTwvYj4gb3IKICAgICAgICAgKiA8Yj5QRE9TdGF0ZW1lbnQ6OmJpbmRDb2x1bW48L2I+IG1ldGhvZHMuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmZldGNoLWJvdW5kCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZFVENIX0JPVU5EID0gNjsKCiAgICAgICAgLyoqCiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGZldGNoIG1ldGhvZCBzaGFsbCByZXR1cm4gb25seSBhIHNpbmdsZSByZXF1ZXN0ZWQKICAgICAgICAgKiBjb2x1bW4gZnJvbSB0aGUgbmV4dCByb3cgaW4gdGhlIHJlc3VsdCBzZXQuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmZldGNoLWNvbHVtbgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBGRVRDSF9DT0xVTU4gPSA3OwoKICAgICAgICAvKioKICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgZmV0Y2ggbWV0aG9kIHNoYWxsIHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiB0aGUKICAgICAgICAgKiByZXF1ZXN0ZWQgY2xhc3MsIG1hcHBpbmcgdGhlIGNvbHVtbnMgdG8gbmFtZWQgcHJvcGVydGllcyBpbiB0aGUgY2xhc3MuCiAgICAgICAgICogVGhlIG1hZ2ljCiAgICAgICAgICogPGI+X19zZXQ8L2I+CiAgICAgICAgICogbWV0aG9kIGlzIGNhbGxlZCBpZiB0aGUgcHJvcGVydHkgZG9lc24ndCBleGlzdCBpbiB0aGUgcmVxdWVzdGVkIGNsYXNzCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmZldGNoLWNsYXNzCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZFVENIX0NMQVNTID0gODsKCiAgICAgICAgLyoqCiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgdGhlIGZldGNoIG1ldGhvZCBzaGFsbCB1cGRhdGUgYW4gZXhpc3RpbmcgaW5zdGFuY2Ugb2YgdGhlCiAgICAgICAgICogcmVxdWVzdGVkIGNsYXNzLCBtYXBwaW5nIHRoZSBjb2x1bW5zIHRvIG5hbWVkIHByb3BlcnRpZXMgaW4gdGhlIGNsYXNzLgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5mZXRjaC1pbnRvCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZFVENIX0lOVE8gPSA5OwoKICAgICAgICAvKioKICAgICAgICAgKiBBbGxvd3MgY29tcGxldGVseSBjdXN0b21pemUgdGhlIHdheSBkYXRhIGlzIHRyZWF0ZWQgb24gdGhlIGZseSAob25seQogICAgICAgICAqIHZhbGlkIGluc2lkZSA8Yj5QRE9TdGF0ZW1lbnQ6OmZldGNoQWxsPC9iPikuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmZldGNoLWZ1bmMKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgRkVUQ0hfRlVOQyA9IDEwOwoKICAgICAgICAvKioKICAgICAgICAgKiBHcm91cCByZXR1cm4gYnkgdmFsdWVzLiBVc3VhbGx5IGNvbWJpbmVkIHdpdGgKICAgICAgICAgKiA8Yj5QRE86OkZFVENIX0NPTFVNTjwvYj4gb3IKICAgICAgICAgKiA8Yj5QRE86OkZFVENIX0tFWV9QQUlSPC9iPi4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuZmV0Y2gtZ3JvdXAKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgRkVUQ0hfR1JPVVAgPSA2NTUzNjsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmV0Y2ggb25seSB0aGUgdW5pcXVlIHZhbHVlcy4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuZmV0Y2gtdW5pcXVlCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZFVENIX1VOSVFVRSA9IDE5NjYwODsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmV0Y2ggYSB0d28tY29sdW1uIHJlc3VsdCBpbnRvIGFuIGFycmF5IHdoZXJlIHRoZSBmaXJzdCBjb2x1bW4gaXMgYSBrZXkgYW5kIHRoZSBzZWNvbmQgY29sdW1uCiAgICAgICAgICogaXMgdGhlIHZhbHVlLgogICAgICAgICAqIEBzaW5jZSA1LjIuMwogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5mZXRjaC1rZXktcGFpcgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBGRVRDSF9LRVlfUEFJUiA9IDEyOwoKICAgICAgICAvKioKICAgICAgICAgKiBEZXRlcm1pbmUgdGhlIGNsYXNzIG5hbWUgZnJvbSB0aGUgdmFsdWUgb2YgZmlyc3QgY29sdW1uLgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5mZXRjaC1jbGFzc3R5cGUKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgRkVUQ0hfQ0xBU1NUWVBFID0gMjYyMTQ0OwoKICAgICAgICAvKioKICAgICAgICAgKiBBcyA8Yj5QRE86OkZFVENIX0lOVE88L2I+IGJ1dCBvYmplY3QgaXMgcHJvdmlkZWQgYXMgYSBzZXJpYWxpemVkIHN0cmluZy4KICAgICAgICAgKiBBdmFpbGFibGUgc2luY2UgUEhQIDUuMS4wLiBTaW5jZSBQSFAgNS4zLjAgdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGlzIG5ldmVyIGNhbGxlZCBpZiB0aGlzCiAgICAgICAgICogZmxhZyBpcyBzZXQuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmZldGNoLXNlcmlhbGl6ZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBGRVRDSF9TRVJJQUxJWkUgPSA1MjQyODg7CgogICAgICAgIC8qKgogICAgICAgICAqIENhbGwgdGhlIGNvbnN0cnVjdG9yIGJlZm9yZSBzZXR0aW5nIHByb3BlcnRpZXMuCiAgICAgICAgICogQHNpbmNlIDUuMgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5mZXRjaC1wcm9wcy1sYXRlCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZFVENIX1BST1BTX0xBVEUgPSAxMDQ4NTc2OwoKICAgICAgICAvKioKICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgZmV0Y2ggbWV0aG9kIHNoYWxsIHJldHVybiBlYWNoIHJvdyBhcyBhbiBhcnJheSBpbmRleGVkCiAgICAgICAgICogYnkgY29sdW1uIG5hbWUgYXMgcmV0dXJuZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzdWx0IHNldC4gSWYgdGhlIHJlc3VsdAogICAgICAgICAqIHNldCBjb250YWlucyBtdWx0aXBsZSBjb2x1bW5zIHdpdGggdGhlIHNhbWUgbmFtZSwKICAgICAgICAgKiA8Yj5QRE86OkZFVENIX05BTUVEPC9iPiByZXR1cm5zCiAgICAgICAgICogYW4gYXJyYXkgb2YgdmFsdWVzIHBlciBjb2x1bW4gbmFtZS4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuZmV0Y2gtbmFtZWQKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgRkVUQ0hfTkFNRUQgPSAxMTsKCiAgICAgICAgLyoqCiAgICAgICAgICogSWYgdGhpcyB2YWx1ZSBpcyA8Yj5GQUxTRTwvYj4sIFBETyBhdHRlbXB0cyB0byBkaXNhYmxlIGF1dG9jb21taXQgc28gdGhhdCB0aGUKICAgICAgICAgKiBjb25uZWN0aW9uIGJlZ2lucyBhIHRyYW5zYWN0aW9uLgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5hdHRyLWF1dG9jb21taXQKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgQVRUUl9BVVRPQ09NTUlUID0gMDsKCiAgICAgICAgLyoqCiAgICAgICAgICogU2V0dGluZyB0aGUgcHJlZmV0Y2ggc2l6ZSBhbGxvd3MgeW91IHRvIGJhbGFuY2Ugc3BlZWQgYWdhaW5zdCBtZW1vcnkKICAgICAgICAgKiB1c2FnZSBmb3IgeW91ciBhcHBsaWNhdGlvbi4gTm90IGFsbCBkYXRhYmFzZS9kcml2ZXIgY29tYmluYXRpb25zIHN1cHBvcnQKICAgICAgICAgKiBzZXR0aW5nIG9mIHRoZSBwcmVmZXRjaCBzaXplLiBBIGxhcmdlciBwcmVmZXRjaCBzaXplIHJlc3VsdHMgaW4KICAgICAgICAgKiBpbmNyZWFzZWQgcGVyZm9ybWFuY2UgYXQgdGhlIGNvc3Qgb2YgaGlnaGVyIG1lbW9yeSB1c2FnZS4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuYXR0ci1wcmVmZXRjaAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBBVFRSX1BSRUZFVENIID0gMTsKCiAgICAgICAgLyoqCiAgICAgICAgICogU2V0cyB0aGUgdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzIGZvciBjb21tdW5pY2F0aW9ucyB3aXRoIHRoZSBkYXRhYmFzZS4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuYXR0ci10aW1lb3V0CiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEFUVFJfVElNRU9VVCA9IDI7CgogICAgICAgIC8qKgogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uZXJyb3ItaGFuZGxpbmcucGhwIEVycm9ycyBhbmQgZXJyb3IgaGFuZGxpbmcKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuYXR0ci1lcnJtb2RlCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEFUVFJfRVJSTU9ERSA9IDM7CgogICAgICAgIC8qKgogICAgICAgICAqIFRoaXMgaXMgYSByZWFkIG9ubHkgYXR0cmlidXRlOyBpdCB3aWxsIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICAgICAgICAgKiB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgdG8gd2hpY2ggUERPIGlzIGNvbm5lY3RlZC4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuYXR0ci0KICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgQVRUUl9TRVJWRVJfVkVSU0lPTiA9IDQ7CgogICAgICAgIC8qKgogICAgICAgICAqIFRoaXMgaXMgYSByZWFkIG9ubHkgYXR0cmlidXRlOyBpdCB3aWxsIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICAgICAgICAgKiB2ZXJzaW9uIG9mIHRoZSBjbGllbnQgbGlicmFyaWVzIHRoYXQgdGhlIFBETyBkcml2ZXIgaXMgdXNpbmcuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmF0dHItY2xpZW50LXZlcnNpb24KICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgQVRUUl9DTElFTlRfVkVSU0lPTiA9IDU7CgogICAgICAgIC8qKgogICAgICAgICAqIFRoaXMgaXMgYSByZWFkIG9ubHkgYXR0cmlidXRlOyBpdCB3aWxsIHJldHVybiBzb21lIG1ldGEgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAgICAgICAgICogZGF0YWJhc2Ugc2VydmVyIHRvIHdoaWNoIFBETyBpcyBjb25uZWN0ZWQuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmF0dHItc2VydmVyLWluZm8KICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgQVRUUl9TRVJWRVJfSU5GTyA9IDY7CiAgICAgICAgcHVibGljIGNvbnN0IEFUVFJfQ09OTkVDVElPTl9TVEFUVVMgPSA3OwoKICAgICAgICAvKioKICAgICAgICAgKiBGb3JjZSBjb2x1bW4gbmFtZXMgdG8gYSBzcGVjaWZpYyBjYXNlIHNwZWNpZmllZCBieSB0aGUgUERPOjpDQVNFXyoKICAgICAgICAgKiBjb25zdGFudHMuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmF0dHItY2FzZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBBVFRSX0NBU0UgPSA4OwoKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgb3Igc2V0IHRoZSBuYW1lIHRvIHVzZSBmb3IgYSBjdXJzb3IuIE1vc3QgdXNlZnVsIHdoZW4gdXNpbmcKICAgICAgICAgKiBzY3JvbGxhYmxlIGN1cnNvcnMgYW5kIHBvc2l0aW9uZWQgdXBkYXRlcy4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuYXR0ci1jdXJzb3ItbmFtZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBBVFRSX0NVUlNPUl9OQU1FID0gOTsKCiAgICAgICAgLyoqCiAgICAgICAgICogU2VsZWN0cyB0aGUgY3Vyc29yIHR5cGUuIFBETyBjdXJyZW50bHkgc3VwcG9ydHMgZWl0aGVyCiAgICAgICAgICogPGI+UERPOjpDVVJTT1JfRldET05MWTwvYj4gYW5kCiAgICAgICAgICogPGI+UERPOjpDVVJTT1JfU0NST0xMPC9iPi4gU3RpY2sgd2l0aAogICAgICAgICAqIDxiPlBETzo6Q1VSU09SX0ZXRE9OTFk8L2I+IHVubGVzcyB5b3Uga25vdyB0aGF0IHlvdSBuZWVkIGEKICAgICAgICAgKiBzY3JvbGxhYmxlIGN1cnNvci4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuYXR0ci1jdXJzb3IKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgQVRUUl9DVVJTT1IgPSAxMDsKCiAgICAgICAgLyoqCiAgICAgICAgICogQ29udmVydCBlbXB0eSBzdHJpbmdzIHRvIFNRTCBOVUxMIHZhbHVlcyBvbiBkYXRhIGZldGNoZXMuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmF0dHItb3JhY2xlLW51bGxzCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEFUVFJfT1JBQ0xFX05VTExTID0gMTE7CgogICAgICAgIC8qKgogICAgICAgICAqIFJlcXVlc3QgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24sIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgbmV3IGNvbm5lY3Rpb24uCiAgICAgICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25uZWN0aW9ucy5waHAgQ29ubmVjdGlvbnMgYW5kIENvbm5lY3Rpb24gTWFuYWdlbWVudAogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5hdHRyLXBlcnNpc3RlbnQKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgQVRUUl9QRVJTSVNURU5UID0gMTI7CgogICAgICAgIC8qKgogICAgICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgb2Ygd2hpY2ggc3RhdGVtZW50cyBhcmUgcmV0dXJuZWQgYXMuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmF0dHItc3RhdGVtZW50LWNsYXNzCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEFUVFJfU1RBVEVNRU5UX0NMQVNTID0gMTM7CgogICAgICAgIC8qKgogICAgICAgICAqIFByZXBlbmQgdGhlIGNvbnRhaW5pbmcgdGFibGUgbmFtZSB0byBlYWNoIGNvbHVtbiBuYW1lIHJldHVybmVkIGluIHRoZQogICAgICAgICAqIHJlc3VsdCBzZXQuIFRoZSB0YWJsZSBuYW1lIGFuZCBjb2x1bW4gbmFtZSBhcmUgc2VwYXJhdGVkIGJ5IGEgZGVjaW1hbCAoLikKICAgICAgICAgKiBjaGFyYWN0ZXIuIFN1cHBvcnQgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgYXQgdGhlIGRyaXZlciBsZXZlbDsgaXQgbWF5IG5vdAogICAgICAgICAqIGJlIHN1cHBvcnRlZCBieSB5b3VyIGRyaXZlci4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuYXR0ci1mZXRjaC10YWJsZS1uYW1lcwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBBVFRSX0ZFVENIX1RBQkxFX05BTUVTID0gMTQ7CgogICAgICAgIC8qKgogICAgICAgICAqIFByZXBlbmQgdGhlIGNvbnRhaW5pbmcgY2F0YWxvZyBuYW1lIHRvIGVhY2ggY29sdW1uIG5hbWUgcmV0dXJuZWQgaW4gdGhlCiAgICAgICAgICogcmVzdWx0IHNldC4gVGhlIGNhdGFsb2cgbmFtZSBhbmQgY29sdW1uIG5hbWUgYXJlIHNlcGFyYXRlZCBieSBhIGRlY2ltYWwKICAgICAgICAgKiAoLikgY2hhcmFjdGVyLiBTdXBwb3J0IG9mIHRoaXMgYXR0cmlidXRlIGlzIGF0IHRoZSBkcml2ZXIgbGV2ZWw7IGl0IG1heQogICAgICAgICAqIG5vdCBiZSBzdXBwb3J0ZWQgYnkgeW91ciBkcml2ZXIuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmF0dHItZmV0Y2gtY2F0YWxvZy1uYW1lcwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBBVFRSX0ZFVENIX0NBVEFMT0dfTkFNRVMgPSAxNTsKCiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyLgogICAgICAgICAqIDxwPgogICAgICAgICAqIHVzaW5nIDxiPlBETzo6QVRUUl9EUklWRVJfTkFNRTwvYj4KICAgICAgICAgKiA8Y29kZT4KICAgICAgICAgKiBpZiAoJGRiLT5nZXRBdHRyaWJ1dGUoUERPOjpBVFRSX0RSSVZFUl9OQU1FKSA9PSAnbXlzcWwnKSB7CiAgICAgICAgICogZWNobyAiUnVubmluZyBvbiBteXNxbDsgZG9pbmcgc29tZXRoaW5nIG15c3FsIHNwZWNpZmljIGhlcmVcbiI7CiAgICAgICAgICogfQogICAgICAgICAqIDwvY29kZT4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmF0dHItZHJpdmVyLW5hbWUKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgQVRUUl9EUklWRVJfTkFNRSA9IDE2OwoKICAgICAgICAvKioKICAgICAgICAgKiBGb3JjZXMgYWxsIHZhbHVlcyBmZXRjaGVkIHRvIGJlIHRyZWF0ZWQgYXMgc3RyaW5ncy4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuYXR0ci1zdHJpbmdpZnktZmV0Y2hlcwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBBVFRSX1NUUklOR0lGWV9GRVRDSEVTID0gMTc7CgogICAgICAgIC8qKgogICAgICAgICAqIFNldHMgdGhlIG1heGltdW0gY29sdW1uIG5hbWUgbGVuZ3RoLgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5hdHRyLW1heC1jb2x1bW4tbGVuCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEFUVFJfTUFYX0NPTFVNTl9MRU4gPSAxODsKCiAgICAgICAgLyoqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmF0dHItZW11bGF0ZS1wcmVwYXJlcwogICAgICAgICAqIEBzaW5jZSA1LjEuMwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBBVFRSX0VNVUxBVEVfUFJFUEFSRVMgPSAyMDsKCiAgICAgICAgLyoqCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmF0dHItZGVmYXVsdC1mZXRjaC1tb2RlCiAgICAgICAgICogQHNpbmNlIDUuMgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBBVFRSX0RFRkFVTFRfRkVUQ0hfTU9ERSA9IDE5OwoKICAgICAgICAvKioKICAgICAgICAgKiBEbyBub3QgcmFpc2UgYW4gZXJyb3Igb3IgZXhjZXB0aW9uIGlmIGFuIGVycm9yIG9jY3Vycy4gVGhlIGRldmVsb3BlciBpcwogICAgICAgICAqIGV4cGVjdGVkIHRvIGV4cGxpY2l0bHkgY2hlY2sgZm9yIGVycm9ycy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlLgogICAgICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uZXJyb3ItaGFuZGxpbmcucGhwICBFcnJvcnMgYW5kIEVycm9yIEhhbmRsaW5nCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmVycm1vZGUtc2lsZW50CiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEVSUk1PREVfU0lMRU5UID0gMDsKCiAgICAgICAgLyoqCiAgICAgICAgICogSXNzdWUgYSBQSFAgPGI+RV9XQVJOSU5HPC9iPiBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy4KICAgICAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmVycm9yLWhhbmRsaW5nLnBocCAgRXJyb3JzIGFuZCBFcnJvciBIYW5kbGluZwogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5lcnJtb2RlLXdhcm5pbmcKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgRVJSTU9ERV9XQVJOSU5HID0gMTsKCiAgICAgICAgLyoqCiAgICAgICAgICogVGhyb3cgYSA8Yj5QRE9FeGNlcHRpb248L2I+IGlmIGFuIGVycm9yIG9jY3Vycy4KICAgICAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmVycm9yLWhhbmRsaW5nLnBocCAgRXJyb3JzIGFuZCBFcnJvciBIYW5kbGluZwogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5lcnJtb2RlLWV4Y2VwdGlvbgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBFUlJNT0RFX0VYQ0VQVElPTiA9IDI7CgogICAgICAgIC8qKgogICAgICAgICAqIExlYXZlIGNvbHVtbiBuYW1lcyBhcyByZXR1cm5lZCBieSB0aGUgZGF0YWJhc2UgZHJpdmVyLgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5jYXNlLW5hdHVyYWwKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgQ0FTRV9OQVRVUkFMID0gMDsKCiAgICAgICAgLyoqCiAgICAgICAgICogRm9yY2UgY29sdW1uIG5hbWVzIHRvIGxvd2VyIGNhc2UuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmNhc2UtbG93ZXIKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgQ0FTRV9MT1dFUiA9IDI7CgogICAgICAgIC8qKgogICAgICAgICAqIEZvcmNlIGNvbHVtbiBuYW1lcyB0byB1cHBlciBjYXNlLgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5jYXNlLXVwcGVyCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IENBU0VfVVBQRVIgPSAxOwoKICAgICAgICAvKioKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMubnVsbC1uYXR1cmFsCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IE5VTExfTkFUVVJBTCA9IDA7CgogICAgICAgIC8qKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5udWxsLWVtcHR5LXN0cmluZwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBOVUxMX0VNUFRZX1NUUklORyA9IDE7CgogICAgICAgIC8qKgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5udWxsLXRvLXN0cmluZwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBOVUxMX1RPX1NUUklORyA9IDI7CgogICAgICAgIC8qKgogICAgICAgICAqIENvcnJlc3BvbmRzIHRvIFNRTFNUQVRFICcwMDAwMCcsIG1lYW5pbmcgdGhhdCB0aGUgU1FMIHN0YXRlbWVudCB3YXMKICAgICAgICAgKiBzdWNjZXNzZnVsbHkgaXNzdWVkIHdpdGggbm8gZXJyb3JzIG9yIHdhcm5pbmdzLiBUaGlzIGNvbnN0YW50IGlzIGZvcgogICAgICAgICAqIHlvdXIgY29udmVuaWVuY2Ugd2hlbiBjaGVja2luZyA8Yj5QRE86OmVycm9yQ29kZTwvYj4gb3IKICAgICAgICAgKiA8Yj5QRE9TdGF0ZW1lbnQ6OmVycm9yQ29kZTwvYj4gdG8gZGV0ZXJtaW5lIGlmIGFuIGVycm9yCiAgICAgICAgICogb2NjdXJyZWQuIFlvdSB3aWxsIHVzdWFsbHkga25vdyBpZiB0aGlzIGlzIHRoZSBjYXNlIGJ5IGV4YW1pbmluZyB0aGUKICAgICAgICAgKiByZXR1cm4gY29kZSBmcm9tIHRoZSBtZXRob2QgdGhhdCByYWlzZWQgdGhlIGVycm9yIGNvbmRpdGlvbiBhbnl3YXkuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmVyci1ub25lCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEVSUl9OT05FID0gJzAwMDAwJzsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmV0Y2ggdGhlIG5leHQgcm93IGluIHRoZSByZXN1bHQgc2V0LiBWYWxpZCBvbmx5IGZvciBzY3JvbGxhYmxlIGN1cnNvcnMuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmZldGNoLW9yaS1uZXh0CiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZFVENIX09SSV9ORVhUID0gMDsKCiAgICAgICAgLyoqCiAgICAgICAgICogRmV0Y2ggdGhlIHByZXZpb3VzIHJvdyBpbiB0aGUgcmVzdWx0IHNldC4gVmFsaWQgb25seSBmb3Igc2Nyb2xsYWJsZQogICAgICAgICAqIGN1cnNvcnMuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmZldGNoLW9yaS1wcmlvcgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBGRVRDSF9PUklfUFJJT1IgPSAxOwoKICAgICAgICAvKioKICAgICAgICAgKiBGZXRjaCB0aGUgZmlyc3Qgcm93IGluIHRoZSByZXN1bHQgc2V0LiBWYWxpZCBvbmx5IGZvciBzY3JvbGxhYmxlIGN1cnNvcnMuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmZldGNoLW9yaS1maXJzdAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBGRVRDSF9PUklfRklSU1QgPSAyOwoKICAgICAgICAvKioKICAgICAgICAgKiBGZXRjaCB0aGUgbGFzdCByb3cgaW4gdGhlIHJlc3VsdCBzZXQuIFZhbGlkIG9ubHkgZm9yIHNjcm9sbGFibGUgY3Vyc29ycy4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdGFudHMucGhwI3Bkby5jb25zdGFudHMuZmV0Y2gtb3JpLWxhc3QKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgRkVUQ0hfT1JJX0xBU1QgPSAzOwoKICAgICAgICAvKioKICAgICAgICAgKiBGZXRjaCB0aGUgcmVxdWVzdGVkIHJvdyBieSByb3cgbnVtYmVyIGZyb20gdGhlIHJlc3VsdCBzZXQuIFZhbGlkIG9ubHkKICAgICAgICAgKiBmb3Igc2Nyb2xsYWJsZSBjdXJzb3JzLgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5mZXRjaC1vcmktYWJzCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZFVENIX09SSV9BQlMgPSA0OwoKICAgICAgICAvKioKICAgICAgICAgKiBGZXRjaCB0aGUgcmVxdWVzdGVkIHJvdyBieSByZWxhdGl2ZSBwb3NpdGlvbiBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uCiAgICAgICAgICogb2YgdGhlIGN1cnNvciBpbiB0aGUgcmVzdWx0IHNldC4gVmFsaWQgb25seSBmb3Igc2Nyb2xsYWJsZSBjdXJzb3JzLgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5mZXRjaC1vcmktcmVsCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZFVENIX09SSV9SRUwgPSA1OwoKICAgICAgICAvKioKICAgICAgICAgKiBTcGVjaWZpZXMgdGhhdCB0aGUgZGVmYXVsdCBmZXRjaCBtb2RlIHNoYWxsIGJlIHVzZWQuCiAgICAgICAgICogQHNpbmNlIDguMC43CiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmZldGNoLWRlZmF1bHQKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgRkVUQ0hfREVGQVVMVCA9IDA7CgogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZSBhIDxiPlBET1N0YXRlbWVudDwvYj4gb2JqZWN0IHdpdGggYSBmb3J3YXJkLW9ubHkgY3Vyc29yLiBUaGlzIGlzIHRoZQogICAgICAgICAqIGRlZmF1bHQgY3Vyc29yIGNob2ljZSwgYXMgaXQgaXMgdGhlIGZhc3Rlc3QgYW5kIG1vc3QgY29tbW9uIGRhdGEgYWNjZXNzCiAgICAgICAgICogcGF0dGVybiBpbiBQSFAuCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29uc3RhbnRzLnBocCNwZG8uY29uc3RhbnRzLmN1cnNvci1md2Rvbmx5CiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IENVUlNPUl9GV0RPTkxZID0gMDsKCiAgICAgICAgLyoqCiAgICAgICAgICogQ3JlYXRlIGEgPGI+UERPU3RhdGVtZW50PC9iPiBvYmplY3Qgd2l0aCBhIHNjcm9sbGFibGUgY3Vyc29yLiBQYXNzIHRoZQogICAgICAgICAqIFBETzo6RkVUQ0hfT1JJXyogY29uc3RhbnRzIHRvIGNvbnRyb2wgdGhlIHJvd3MgZmV0Y2hlZCBmcm9tIHRoZSByZXN1bHQgc2V0LgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmNvbnN0YW50cy5waHAjcGRvLmNvbnN0YW50cy5jdXJzb3Itc2Nyb2xsCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IENVUlNPUl9TQ1JPTEwgPSAxOwoKICAgICAgICAvKioKICAgICAgICAgKiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBzZXQgdG8gPGI+VFJVRTwvYj4gb24gYQogICAgICAgICAqIDxiPlBET1N0YXRlbWVudDwvYj4sIHRoZSBNeVNRTCBkcml2ZXIgd2lsbCB1c2UgdGhlCiAgICAgICAgICogYnVmZmVyZWQgdmVyc2lvbnMgb2YgdGhlIE15U1FMIEFQSS4gSWYgeW91J3JlIHdyaXRpbmcgcG9ydGFibGUgY29kZSwgeW91CiAgICAgICAgICogc2hvdWxkIHVzZSA8Yj5QRE9TdGF0ZW1lbnQ6OmZldGNoQWxsPC9iPiBpbnN0ZWFkLgogICAgICAgICAqIDxwPgogICAgICAgICAqIEZvcmNpbmcgcXVlcmllcyB0byBiZSBidWZmZXJlZCBpbiBteXNxbAogICAgICAgICAqIDxjb2RlPgogICAgICAgICAqIGlmICgkZGItPmdldEF0dHJpYnV0ZShQRE86OkFUVFJfRFJJVkVSX05BTUUpID09ICdteXNxbCcpIHsKICAgICAgICAgKiAkc3RtdCA9ICRkYi0+cHJlcGFyZSgnc2VsZWN0ICogZnJvbSBmb28nLAogICAgICAgICAqIGFycmF5KFBETzo6TVlTUUxfQVRUUl9VU0VfQlVGRkVSRURfUVVFUlkgPT4gdHJ1ZSkpOwogICAgICAgICAqIH0gZWxzZSB7CiAgICAgICAgICogZGllKCJteSBhcHBsaWNhdGlvbiBvbmx5IHdvcmtzIHdpdGggbXlzcWw7IEkgc2hvdWxkIHVzZSBcJHN0bXQtPmZldGNoQWxsKCkgaW5zdGVhZCIpOwogICAgICAgICAqIH0KICAgICAgICAgKiA8L2NvZGU+CiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVmLnBkby1teXNxbC5waHAjcGRvLmNvbnN0YW50cy5teXNxbC1hdHRyLXVzZS1idWZmZXJlZC1xdWVyeQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBNWVNRTF9BVFRSX1VTRV9CVUZGRVJFRF9RVUVSWSA9IDEwMDA7CgogICAgICAgIC8qKgogICAgICAgICAqIDxwPgogICAgICAgICAqIEVuYWJsZSBMT0FEIExPQ0FMIElORklMRS4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogPHA+CiAgICAgICAgICogTm90ZSwgdGhpcyBjb25zdGFudCBjYW4gb25seSBiZSB1c2VkIGluIHRoZSA8aT5kcml2ZXJfb3B0aW9uczwvaT4KICAgICAgICAgKiBhcnJheSB3aGVuIGNvbnN0cnVjdGluZyBhIG5ldyBkYXRhYmFzZSBoYW5kbGUuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVmLnBkby1teXNxbC5waHAjcGRvLmNvbnN0YW50cy5teXNxbC1hdHRyLWxvY2FsLWluZmlsZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBNWVNRTF9BVFRSX0xPQ0FMX0lORklMRSA9IDEwMDE7CgogICAgICAgIC8qKgogICAgICAgICAqIDxwPgogICAgICAgICAqIENvbW1hbmQgdG8gZXhlY3V0ZSB3aGVuIGNvbm5lY3RpbmcgdG8gdGhlIE15U1FMIHNlcnZlci4gV2lsbAogICAgICAgICAqIGF1dG9tYXRpY2FsbHkgYmUgcmUtZXhlY3V0ZWQgd2hlbiByZWNvbm5lY3RpbmcuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIDxwPgogICAgICAgICAqIE5vdGUsIHRoaXMgY29uc3RhbnQgY2FuIG9ubHkgYmUgdXNlZCBpbiB0aGUgPGk+ZHJpdmVyX29wdGlvbnM8L2k+CiAgICAgICAgICogYXJyYXkgd2hlbiBjb25zdHJ1Y3RpbmcgYSBuZXcgZGF0YWJhc2UgaGFuZGxlLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZi5wZG8tbXlzcWwucGhwI3Bkby5jb25zdGFudHMubXlzcWwtYXR0ci1pbml0LWNvbW1hbmQKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgTVlTUUxfQVRUUl9JTklUX0NPTU1BTkQgPSAxMDAyOwoKICAgICAgICAvKioKICAgICAgICAgKiA8cD4KICAgICAgICAgKiBNYXhpbXVtIGJ1ZmZlciBzaXplLiBEZWZhdWx0cyB0byAxIE1pQi4gVGhpcyBjb25zdGFudCBpcyBub3Qgc3VwcG9ydGVkIHdoZW4KICAgICAgICAgKiBjb21waWxlZCBhZ2FpbnN0IG15c3FsbmQuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVmLnBkby1teXNxbC5waHAjcGRvLmNvbnN0YW50cy5teXNxbC1hdHRyLW1heC1idWZmZXItc2l6ZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBNWVNRTF9BVFRSX01BWF9CVUZGRVJfU0laRSA9IDEwMDU7CgogICAgICAgIC8qKgogICAgICAgICAqIDxwPgogICAgICAgICAqIFJlYWQgb3B0aW9ucyBmcm9tIHRoZSBuYW1lZCBvcHRpb24gZmlsZSBpbnN0ZWFkIG9mIGZyb20KICAgICAgICAgKiBteS5jbmYuIFRoaXMgb3B0aW9uIGlzIG5vdCBhdmFpbGFibGUgaWYKICAgICAgICAgKiBteXNxbG5kIGlzIHVzZWQsIGJlY2F1c2UgbXlzcWxuZCBkb2VzIG5vdCByZWFkIHRoZSBteXNxbAogICAgICAgICAqIGNvbmZpZ3VyYXRpb24gZmlsZXMuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVmLnBkby1teXNxbC5waHAjcGRvLmNvbnN0YW50cy5teXNxbC1hdHRyLXJlYWQtZGVmYXVsdC1maWxlCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IE1ZU1FMX0FUVFJfUkVBRF9ERUZBVUxUX0ZJTEUgPSAxMDAzOwoKICAgICAgICAvKioKICAgICAgICAgKiA8cD4KICAgICAgICAgKiBSZWFkIG9wdGlvbnMgZnJvbSB0aGUgbmFtZWQgZ3JvdXAgZnJvbSBteS5jbmYgb3IgdGhlCiAgICAgICAgICogZmlsZSBzcGVjaWZpZWQgd2l0aCA8Yj5NWVNRTF9SRUFEX0RFRkFVTFRfRklMRTwvYj4uIFRoaXMgb3B0aW9uCiAgICAgICAgICogaXMgbm90IGF2YWlsYWJsZSBpZiBteXNxbG5kIGlzIHVzZWQsIGJlY2F1c2UgbXlzcWxuZCBkb2VzIG5vdCByZWFkIHRoZSBteXNxbAogICAgICAgICAqIGNvbmZpZ3VyYXRpb24gZmlsZXMuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVmLnBkby1teXNxbC5waHAjcGRvLmNvbnN0YW50cy5teXNxbC1hdHRyLXJlYWQtZGVmYXVsdC1ncm91cAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBNWVNRTF9BVFRSX1JFQURfREVGQVVMVF9HUk9VUCA9IDEwMDQ7CgogICAgICAgIC8qKgogICAgICAgICAqIDxwPgogICAgICAgICAqIEVuYWJsZSBuZXR3b3JrIGNvbW11bmljYXRpb24gY29tcHJlc3Npb24uIFRoaXMgaXMgbm90IHN1cHBvcnRlZCB3aGVuCiAgICAgICAgICogY29tcGlsZWQgYWdhaW5zdCBteXNxbG5kLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZi5wZG8tbXlzcWwucGhwI3Bkby5jb25zdGFudHMubXlzcWwtYXR0ci1jb21wcmVzcwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBNWVNRTF9BVFRSX0NPTVBSRVNTID0gMTAwMzsKCiAgICAgICAgLyoqCiAgICAgICAgICogPHA+CiAgICAgICAgICogUGVyZm9ybSBkaXJlY3QgcXVlcmllcywgZG9uJ3QgdXNlIHByZXBhcmVkIHN0YXRlbWVudHMuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVmLnBkby1teXNxbC5waHAjcGRvLmNvbnN0YW50cy5teXNxbC1hdHRyLWRpcmVjdC1xdWVyeQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBNWVNRTF9BVFRSX0RJUkVDVF9RVUVSWSA9IDEwMDQ7CgogICAgICAgIC8qKgogICAgICAgICAqIDxwPgogICAgICAgICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGZvdW5kIChtYXRjaGVkKSByb3dzLCBub3QgdGhlCiAgICAgICAgICogbnVtYmVyIG9mIGNoYW5nZWQgcm93cy4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWYucGRvLW15c3FsLnBocCNwZG8uY29uc3RhbnRzLm15c3FsLWF0dHItZm91bmQtcm93cwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBNWVNRTF9BVFRSX0ZPVU5EX1JPV1MgPSAxMDA1OwoKICAgICAgICAvKioKICAgICAgICAgKiA8cD4KICAgICAgICAgKiBQZXJtaXQgc3BhY2VzIGFmdGVyIGZ1bmN0aW9uIG5hbWVzLiBNYWtlcyBhbGwgZnVuY3Rpb25zCiAgICAgICAgICogbmFtZXMgcmVzZXJ2ZWQgd29yZHMuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVmLnBkby1teXNxbC5waHAjcGRvLmNvbnN0YW50cy5teXNxbC1hdHRyLWlnbm9yZS1zcGFjZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBNWVNRTF9BVFRSX0lHTk9SRV9TUEFDRSA9IDEwMDY7CiAgICAgICAgcHVibGljIGNvbnN0IE1ZU1FMX0FUVFJfU0VSVkVSX1BVQkxJQ19LRVkgPSAxMDEyOwoKICAgICAgICAvKioKICAgICAgICAgKiA8cD4KICAgICAgICAgKiBUaGUgZmlsZSBwYXRoIHRvIHRoZSBTU0wga2V5LgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAc2luY2UgNS4zLjcKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZi5wZG8tbXlzcWwucGhwI3Bkby5jb25zdGFudHMubXlzcWwtYXR0ci1zc2wta2V5CiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IE1ZU1FMX0FUVFJfU1NMX0tFWSA9IDEwMDc7CgogICAgICAgIC8qKgogICAgICAgICAqIDxwPgogICAgICAgICAqIFRoZSBmaWxlIHBhdGggdG8gdGhlIFNTTCBjZXJ0aWZpY2F0ZS4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHNpbmNlIDUuMy43CiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWYucGRvLW15c3FsLnBocCNwZG8uY29uc3RhbnRzLm15c3FsLWF0dHItc3NsLWNlcnQKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgTVlTUUxfQVRUUl9TU0xfQ0VSVCA9IDEwMDg7CgogICAgICAgIC8qKgogICAgICAgICAqIDxwPgogICAgICAgICAqIFRoZSBmaWxlIHBhdGggdG8gdGhlIFNTTCBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBzaW5jZSA1LjMuNwogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVmLnBkby1teXNxbC5waHAjcGRvLmNvbnN0YW50cy5teXNxbC1hdHRyLXNzbC1jYQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBNWVNRTF9BVFRSX1NTTF9DQSA9IDEwMDk7CgogICAgICAgIC8qKgogICAgICAgICAqIDxwPgogICAgICAgICAqIFRoZSBmaWxlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSB0cnVzdGVkIFNTTAogICAgICAgICAqIENBIGNlcnRpZmljYXRlcywgd2hpY2ggYXJlIHN0b3JlZCBpbiBQRU0gZm9ybWF0LgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAc2luY2UgNS4zLjcKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZi5wZG8tbXlzcWwucGhwI3Bkby5jb25zdGFudHMubXlzcWwtYXR0ci1zc2wtY2FwYXRoCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IE1ZU1FMX0FUVFJfU1NMX0NBUEFUSCA9IDEwMTA7CgogICAgICAgIC8qKgogICAgICAgICAqIDxwPgogICAgICAgICAqIEEgbGlzdCBvZiBvbmUgb3IgbW9yZSBwZXJtaXNzaWJsZSBjaXBoZXJzIHRvIHVzZSBmb3IgU1NMIGVuY3J5cHRpb24sCiAgICAgICAgICogaW4gYSBmb3JtYXQgdW5kZXJzdG9vZCBieSBPcGVuU1NMLgogICAgICAgICAqIEZvciBleGFtcGxlOiBESEUtUlNBLUFFUzI1Ni1TSEE6QUVTMTI4LVNIQQogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAc2luY2UgNS4zLjcKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZi5wZG8tbXlzcWwucGhwI3Bkby5jb25zdGFudHMubXlzcWwtYXR0ci1jaXBoZXIKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgTVlTUUxfQVRUUl9TU0xfQ0lQSEVSID0gMTAxMTsKCiAgICAgICAgLyoqCiAgICAgICAgICogPHA+CiAgICAgICAgICogRGlzYWJsZXMgbXVsdGkgcXVlcnkgZXhlY3V0aW9uIGluIGJvdGgge0BzZWUgUERPOjpwcmVwYXJlKCl9IGFuZCB7QHNlZSBQRE86OnF1ZXJ5KCl9IHdoZW4gc2V0IHRvIEZBTFNFLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiA8cD4KICAgICAgICAgKiBOb3RlLCB0aGlzIGNvbnN0YW50IGNhbiBvbmx5IGJlIHVzZWQgaW4gdGhlIGRyaXZlcl9vcHRpb25zIGFycmF5IHdoZW4gY29uc3RydWN0aW5nIGEgbmV3IGRhdGFiYXNlIGhhbmRsZS4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHNpbmNlIDUuNS4yMQogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVmLnBkby1teXNxbC5waHAjcGRvLmNvbnN0YW50cy5teXNxbC1hdHRyLW11bHRpLXN0YXRlbWVudHMKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgTVlTUUxfQVRUUl9NVUxUSV9TVEFURU1FTlRTID0gMTAxMzsKCiAgICAgICAgLyoqCiAgICAgICAgICogPHA+CiAgICAgICAgICogRGlzYWJsZXMgU1NMIHBlZXIgdmVyaWZpY2F0aW9uIHdoZW4gc2V0IHRvIEZBTFNFLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAc2luY2UgNy4wLjE4CiAgICAgICAgICogQHNpbmNlIDcuMS40CiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9idWdzLnBocC5uZXQvYnVnLnBocD9pZD03MTAwMwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBNWVNRTF9BVFRSX1NTTF9WRVJJRllfU0VSVkVSX0NFUlQgPSAxMDE0OwoKICAgICAgICAvKioKICAgICAgICAgKiBAc2luY2UgOC4xCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IE1ZU1FMX0FUVFJfTE9DQUxfSU5GSUxFX0RJUkVDVE9SWSA9IDEwMTU7CgogICAgICAgICNbRGVwcmVjYXRlZCgiVXNlIFBETzo6QVRUUl9FTVVMQVRFX1BSRVBBUkVTIGluc3RlYWQiKV0KICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfQVNTT0MgPSAxOwoKICAgICAgICAvKioKICAgICAgICAgKiBAcmVtb3ZlZCA3LjEKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfQVRUUl9ESVNBQkxFX05BVElWRV9QUkVQQVJFRF9TVEFURU1FTlQgPSAxMDAwOwoKICAgICAgICAvKioKICAgICAgICAgKiBAc2luY2UgNS42CiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0FUVFJfRElTQUJMRV9QUkVQQVJFUyA9IDEwMDA7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0JBRF9SRVNQT05TRSA9IDU7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0JPVEggPSAzOwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9UUkFOU0FDVElPTl9JRExFID0gMDsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfVFJBTlNBQ1RJT05fQUNUSVZFID0gMTsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfVFJBTlNBQ1RJT05fSU5UUkFOUyA9IDI7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX1RSQU5TQUNUSU9OX0lORVJST1IgPSAzOwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9UUkFOU0FDVElPTl9VTktOT1dOID0gNDsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfQ09OTkVDVF9BU1lOQyA9IDQ7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0NPTk5FQ1RfRk9SQ0VfTkVXID0gMjsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfQ09OTkVDVElPTl9BVVRIX09LID0gNTsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfQ09OTkVDVElPTl9BV0FJVElOR19SRVNQT05TRSA9IDQ7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0NPTk5FQ1RJT05fQkFEID0gMTsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfQ09OTkVDVElPTl9PSyA9IDA7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0NPTk5FQ1RJT05fTUFERSA9IDM7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0NPTk5FQ1RJT05fU0VURU5WID0gNjsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfQ09OTkVDVElPTl9TU0xfU1RBUlRVUCA9IDc7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0NPTk5FQ1RJT05fU1RBUlRFRCA9IDI7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0NPTU1BTkRfT0sgPSAxOwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9DT05WX0ZPUkNFX05VTEwgPSA0OwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9DT05WX0lHTk9SRV9ERUZBVUxUID0gMjsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfQ09OVl9JR05PUkVfTk9UX05VTEwgPSA4OwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9DT1BZX0lOID0gNDsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfQ09QWV9PVVQgPSAzOwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9ESUFHX0NPTlRFWFQgPSA4NzsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfRElBR19JTlRFUk5BTF9QT1NJVElPTiA9IDExMjsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfRElBR19JTlRFUk5BTF9RVUVSWSA9IDExMzsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfRElBR19NRVNTQUdFX0RFVEFJTCA9IDY4OwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9ESUFHX01FU1NBR0VfSElOVCA9IDcyOwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9ESUFHX01FU1NBR0VfUFJJTUFSWSA9IDc3OwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9ESUFHX1NFVkVSSVRZID0gODM7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0RJQUdfU09VUkNFX0ZJTEUgPSA3MDsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfRElBR19TT1VSQ0VfRlVOQ1RJT04gPSA4MjsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfRElBR19TT1VSQ0VfTElORSA9IDc2OwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9ESUFHX1NRTFNUQVRFID0gNjc7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0RJQUdfU1RBVEVNRU5UX1BPU0lUSU9OID0gODA7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0RNTF9BU1lOQyA9IDEwMjQ7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0RNTF9FWEVDID0gNTEyOwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9ETUxfTk9fQ09OViA9IDI1NjsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfRE1MX1NUUklORyA9IDIwNDg7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0RNTF9FU0NBUEUgPSA0MDk2OwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9FTVBUWV9RVUVSWSA9IDA7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX0VSUk9SU19ERUZBVUxUID0gMTsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfRVJST1JTX1RFUlNFID0gMDsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfRVJST1JTX1ZFUkJPU0UgPSAyOwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9GQVRBTF9FUlJPUiA9IDc7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX05PTkZBVEFMX0VSUk9SID0gNjsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfTk9USUNFX0FMTCA9IDI7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX05PVElDRV9DTEVBUiA9IDM7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX05PVElDRV9MQVNUID0gMTsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfTlVNID0gMjsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfUE9MTElOR19BQ1RJVkUgPSA0OwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9QT0xMSU5HX0ZBSUxFRCA9IDA7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX1BPTExJTkdfT0sgPSAzOwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9QT0xMSU5HX1JFQURJTkcgPSAxOwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9QT0xMSU5HX1dSSVRJTkcgPSAyOwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9TRUVLX0NVUiA9IDE7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX1NFRUtfRU5EID0gMjsKICAgICAgICBwdWJsaWMgY29uc3QgUEdTUUxfU0VFS19TRVQgPSAwOwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9TVEFUVVNfTE9ORyA9IDE7CiAgICAgICAgcHVibGljIGNvbnN0IFBHU1FMX1NUQVRVU19TVFJJTkcgPSAyOwogICAgICAgIHB1YmxpYyBjb25zdCBQR1NRTF9UVVBMRVNfT0sgPSAyOwogICAgICAgIHB1YmxpYyBjb25zdCBTUUxTUlZfVFhOX1JFQURfVU5DT01NSVRURUQgPSAiUkVBRF9VTkNPTU1JVFRFRCI7CiAgICAgICAgcHVibGljIGNvbnN0IFNRTFNSVl9UWE5fUkVBRF9DT01NSVRURUQgPSAiUkVBRF9DT01NSVRURUQiOwogICAgICAgIHB1YmxpYyBjb25zdCBTUUxTUlZfVFhOX1JFUEVBVEFCTEVfUkVBRCA9ICJSRVBFQVRBQkxFX1JFQUQiOwogICAgICAgIHB1YmxpYyBjb25zdCBTUUxTUlZfVFhOX1NOQVBTSE9UID0gIlNOQVBTSE9UIjsKICAgICAgICBwdWJsaWMgY29uc3QgU1FMU1JWX1RYTl9TRVJJQUxJWkFCTEUgPSAiU0VSSUFMSVpBQkxFIjsKICAgICAgICBwdWJsaWMgY29uc3QgU1FMU1JWX0VOQ09ESU5HX0JJTkFSWSA9IDI7CiAgICAgICAgcHVibGljIGNvbnN0IFNRTFNSVl9FTkNPRElOR19TWVNURU0gPSAzOwogICAgICAgIHB1YmxpYyBjb25zdCBTUUxTUlZfRU5DT0RJTkdfVVRGOCA9IDY1MDAxOwogICAgICAgIHB1YmxpYyBjb25zdCBTUUxTUlZfRU5DT0RJTkdfREVGQVVMVCA9IDE7CiAgICAgICAgcHVibGljIGNvbnN0IFNRTFNSVl9BVFRSX0VOQ09ESU5HID0gMTAwMDsKICAgICAgICBwdWJsaWMgY29uc3QgU1FMU1JWX0FUVFJfUVVFUllfVElNRU9VVCA9IDEwMDE7CiAgICAgICAgcHVibGljIGNvbnN0IFNRTFNSVl9BVFRSX0RJUkVDVF9RVUVSWSA9IDEwMDI7CiAgICAgICAgcHVibGljIGNvbnN0IFNRTFNSVl9BVFRSX0NVUlNPUl9TQ1JPTExfVFlQRSA9IDEwMDM7CiAgICAgICAgcHVibGljIGNvbnN0IFNRTFNSVl9BVFRSX0NMSUVOVF9CVUZGRVJfTUFYX0tCX1NJWkUgPSAxMDA0OwogICAgICAgIHB1YmxpYyBjb25zdCBTUUxTUlZfQVRUUl9GRVRDSEVTX05VTUVSSUNfVFlQRSA9IDEwMDU7CiAgICAgICAgcHVibGljIGNvbnN0IFNRTFNSVl9BVFRSX0ZFVENIRVNfREFURVRJTUVfVFlQRSA9IDEwMDY7CiAgICAgICAgcHVibGljIGNvbnN0IFNRTFNSVl9BVFRSX0ZPUk1BVF9ERUNJTUFMUyA9IDEwMDc7CiAgICAgICAgcHVibGljIGNvbnN0IFNRTFNSVl9BVFRSX0RFQ0lNQUxfUExBQ0VTID0gMTAwODsKICAgICAgICBwdWJsaWMgY29uc3QgU1FMU1JWX0FUVFJfREFUQV9DTEFTU0lGSUNBVElPTiA9IDEwMDk7CiAgICAgICAgcHVibGljIGNvbnN0IFNRTFNSVl9QQVJBTV9PVVRfREVGQVVMVF9TSVpFID0gLTE7CiAgICAgICAgcHVibGljIGNvbnN0IFNRTFNSVl9DVVJTT1JfS0VZU0VUID0gMTsKICAgICAgICBwdWJsaWMgY29uc3QgU1FMU1JWX0NVUlNPUl9EWU5BTUlDID0gMjsKICAgICAgICBwdWJsaWMgY29uc3QgU1FMU1JWX0NVUlNPUl9TVEFUSUMgPSAzOwogICAgICAgIHB1YmxpYyBjb25zdCBTUUxTUlZfQ1VSU09SX0JVRkZFUkVEID0gNDI7CgogICAgICAgIC8qKgogICAgICAgICAqIEBzaW5jZSA3LjQKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgU1FMSVRFX0FUVFJfUkVBRE9OTFlfU1RBVEVNRU5UID0gMTAwMTsKCiAgICAgICAgLyoqCiAgICAgICAgICogQHNpbmNlIDcuNAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBTUUxJVEVfQVRUUl9FWFRFTkRFRF9SRVNVTFRfQ09ERVMgPSAxMDAyOwoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBhIHdheSB0byBzcGVjaWZ5IHRoZSBhY3Rpb24gb24gdGhlIGRhdGFiYXNlIHNlc3Npb24uCiAgICAgICAgICogQHNpbmNlIDcuMi4xNgogICAgICAgICAqIEBzaW5jZSA3LjMuMwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBPQ0lfQVRUUl9BQ1RJT04gPSAxMDAwOwoKICAgICAgICAvKioKICAgICAgICAgKiBQcm92aWRlcyBhIHdheSB0byBzcGVjaWZ5IHRoZSBjbGllbnQgaW5mbyBvbiB0aGUgZGF0YWJhc2Ugc2Vzc2lvbi4KICAgICAgICAgKiBAc2luY2UgNy4yLjE2CiAgICAgICAgICogQHNpbmNlIDcuMy4zCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IE9DSV9BVFRSX0NMSUVOVF9JTkZPID0gMTAwMTsKCiAgICAgICAgLyoqCiAgICAgICAgICogUHJvdmlkZXMgYSB3YXkgdG8gc3BlY2lmeSB0aGUgY2xpZW50IGlkZW50aWZpZXIgb24gdGhlIGRhdGFiYXNlIHNlc3Npb24uCiAgICAgICAgICogQHNpbmNlIDcuMi4xNgogICAgICAgICAqIEBzaW5jZSA3LjMuMwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBjb25zdCBPQ0lfQVRUUl9DTElFTlRfSURFTlRJRklFUiA9IDEwMDI7CgogICAgICAgIC8qKgogICAgICAgICAqIFByb3ZpZGVzIGEgd2F5IHRvIHNwZWNpZnkgdGhlIG1vZHVsZSBvbiB0aGUgZGF0YWJhc2Ugc2Vzc2lvbi4KICAgICAgICAgKiBAc2luY2UgNy4yLjE2CiAgICAgICAgICogQHNpbmNlIDcuMy4zCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IE9DSV9BVFRSX01PRFVMRSA9IDEwMDM7CgogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGluZGl2aWR1YWwgcm91bmQgdHJpcHMgdG8gdGhlIGRhdGFiYXNlIHRvIGNvbXBsZXRlIGJlZm9yZSB0aW1pbmcgb3V0LgogICAgICAgICAqIEBzaW5jZSA4LjAKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgT0NJX0FUVFJfQ0FMTF9USU1FT1VUID0gMTAwNDsKCiAgICAgICAgLyoqCiAgICAgICAgICogU2V0cyB0aGUgZGF0ZSBmb3JtYXQuCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZCX0FUVFJfREFURV9GT1JNQVQgPSAxMDAwOwoKICAgICAgICAvKioKICAgICAgICAgKiBTZXRzIHRoZSB0aW1lIGZvcm1hdC4KICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgY29uc3QgRkJfQVRUUl9USU1FX0ZPUk1BVCA9IDEwMDE7CgogICAgICAgIC8qKgogICAgICAgICAqIFNldHMgdGhlIHRpbWVzdGFtcCBmb3JtYXQuCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGNvbnN0IEZCX0FUVFJfVElNRVNUQU1QX0ZPUk1BVCA9IDEwMDI7CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMCwgUEhQIDcsIFBFQ0wgcGRvICZndDs9IDAuMS4wKTxici8+CiAgICAgICAgICogQ3JlYXRlcyBhIFBETyBpbnN0YW5jZSByZXByZXNlbnRpbmcgYSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5jb25zdHJ1Y3QucGhwCiAgICAgICAgICogQHBhcmFtIHN0cmluZyAkZHNuCiAgICAgICAgICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgW29wdGlvbmFsXQogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFtvcHRpb25hbF0KICAgICAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgW29wdGlvbmFsXQogICAgICAgICAqIEB0aHJvd3MgUERPRXhjZXB0aW9uIGlmIHRoZSBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhlIHJlcXVlc3RlZCBkYXRhYmFzZSBmYWlscy4KICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRkc24sCiAgICAgICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJHVzZXJuYW1lID0gbnVsbCwKICAgICAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkcGFzc3dvcmQgPSBudWxsLAogICAgICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdhcnJheXxudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJG9wdGlvbnMgPSBudWxsCiAgICAgICAgKSB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjAsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICAgICAqIFByZXBhcmVzIGEgc3RhdGVtZW50IGZvciBleGVjdXRpb24gYW5kIHJldHVybnMgYSBzdGF0ZW1lbnQgb2JqZWN0CiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8ucHJlcGFyZS5waHAKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWVyeSA8cD4KICAgICAgICAgKiBUaGlzIG11c3QgYmUgYSB2YWxpZCBTUUwgc3RhdGVtZW50IGZvciB0aGUgdGFyZ2V0IGRhdGFiYXNlIHNlcnZlci4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAgICAgICAgICogVGhpcyBhcnJheSBob2xkcyBvbmUgb3IgbW9yZSBrZXk9Jmd0O3ZhbHVlIHBhaXJzIHRvIHNldAogICAgICAgICAqIGF0dHJpYnV0ZSB2YWx1ZXMgZm9yIHRoZSA8Yj5QRE9TdGF0ZW1lbnQ8L2I+IG9iamVjdCB0aGF0IHRoaXMgbWV0aG9kCiAgICAgICAgICogcmV0dXJucy4gWW91IHdvdWxkIG1vc3QgY29tbW9ubHkgdXNlIHRoaXMgdG8gc2V0IHRoZQogICAgICAgICAqIDxiPlBETzo6QVRUUl9DVVJTT1I8L2I+IHZhbHVlIHRvCiAgICAgICAgICogPGI+UERPOjpDVVJTT1JfU0NST0xMPC9iPiB0byByZXF1ZXN0IGEgc2Nyb2xsYWJsZSBjdXJzb3IuCiAgICAgICAgICogU29tZSBkcml2ZXJzIGhhdmUgZHJpdmVyIHNwZWNpZmljIG9wdGlvbnMgdGhhdCBtYXkgYmUgc2V0IGF0CiAgICAgICAgICogcHJlcGFyZS10aW1lLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcmV0dXJuIFBET1N0YXRlbWVudHxmYWxzZSBJZiB0aGUgZGF0YWJhc2Ugc2VydmVyIHN1Y2Nlc3NmdWxseSBwcmVwYXJlcyB0aGUgc3RhdGVtZW50LAogICAgICAgICAqIDxiPlBETzo6cHJlcGFyZTwvYj4gcmV0dXJucyBhCiAgICAgICAgICogPGI+UERPU3RhdGVtZW50PC9iPiBvYmplY3QuCiAgICAgICAgICogSWYgdGhlIGRhdGFiYXNlIHNlcnZlciBjYW5ub3Qgc3VjY2Vzc2Z1bGx5IHByZXBhcmUgdGhlIHN0YXRlbWVudCwKICAgICAgICAgKiA8Yj5QRE86OnByZXBhcmU8L2I+IHJldHVybnMgPGI+RkFMU0U8L2I+IG9yIGVtaXRzCiAgICAgICAgICogPGI+UERPRXhjZXB0aW9uPC9iPiAoZGVwZW5kaW5nIG9uIGVycm9yIGhhbmRsaW5nKS4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogPHA+CiAgICAgICAgICogRW11bGF0ZWQgcHJlcGFyZWQgc3RhdGVtZW50cyBkb2VzIG5vdCBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkYXRhYmFzZSBzZXJ2ZXIKICAgICAgICAgKiBzbyA8Yj5QRE86OnByZXBhcmU8L2I+IGRvZXMgbm90IGNoZWNrIHRoZSBzdGF0ZW1lbnQuCiAgICAgICAgICovCiAgICAgICAgI1tUZW50YXRpdmVUeXBlXQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVwYXJlKAogICAgICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcXVlcnksCiAgICAgICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2FycmF5J10sIGRlZmF1bHQ6ICcnKV0gJG9wdGlvbnMgPSBbXQogICAgICAgICk6IFBET1N0YXRlbWVudHxmYWxzZSB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjAsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICAgICAqIEluaXRpYXRlcyBhIHRyYW5zYWN0aW9uCiAgICAgICAgICogPHA+CiAgICAgICAgICogVHVybnMgb2ZmIGF1dG9jb21taXQgbW9kZS4gV2hpbGUgYXV0b2NvbW1pdCBtb2RlIGlzIHR1cm5lZCBvZmYsCiAgICAgICAgICogY2hhbmdlcyBtYWRlIHRvIHRoZSBkYXRhYmFzZSB2aWEgdGhlIFBETyBvYmplY3QgaW5zdGFuY2UgYXJlIG5vdCBjb21taXR0ZWQKICAgICAgICAgKiB1bnRpbCB5b3UgZW5kIHRoZSB0cmFuc2FjdGlvbiBieSBjYWxsaW5nIHtAbGluayBQRE86OmNvbW1pdCgpfS4KICAgICAgICAgKiBDYWxsaW5nIHtAbGluayBQRE86OnJvbGxCYWNrKCl9IHdpbGwgcm9sbCBiYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBkYXRhYmFzZSBhbmQKICAgICAgICAgKiByZXR1cm4gdGhlIGNvbm5lY3Rpb24gdG8gYXV0b2NvbW1pdCBtb2RlLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiA8cD4KICAgICAgICAgKiBTb21lIGRhdGFiYXNlcywgaW5jbHVkaW5nIE15U1FMLCBhdXRvbWF0aWNhbGx5IGlzc3VlIGFuIGltcGxpY2l0IENPTU1JVAogICAgICAgICAqIHdoZW4gYSBkYXRhYmFzZSBkZWZpbml0aW9uIGxhbmd1YWdlIChEREwpIHN0YXRlbWVudAogICAgICAgICAqIHN1Y2ggYXMgRFJPUCBUQUJMRSBvciBDUkVBVEUgVEFCTEUgaXMgaXNzdWVkIHdpdGhpbiBhIHRyYW5zYWN0aW9uLgogICAgICAgICAqIFRoZSBpbXBsaWNpdCBDT01NSVQgd2lsbCBwcmV2ZW50IHlvdSBmcm9tIHJvbGxpbmcgYmFjayBhbnkgb3RoZXIgY2hhbmdlcwogICAgICAgICAqIHdpdGhpbiB0aGUgdHJhbnNhY3Rpb24gYm91bmRhcnkuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmJlZ2ludHJhbnNhY3Rpb24ucGhwCiAgICAgICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgICAgICogQHRocm93cyBQRE9FeGNlcHRpb24gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHRyYW5zYWN0aW9uIHN0YXJ0ZWQgb3IKICAgICAgICAgKiB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdHJhbnNhY3Rpb25zIDxici8+CiAgICAgICAgICogPGI+Tm90ZTwvYj46IEFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgZXZlbiB3aGVuIHRoZSA8Yj5QRE86OkFUVFJfRVJSTU9ERTwvYj4KICAgICAgICAgKiBhdHRyaWJ1dGUgaXMgbm90IDxiPlBETzo6RVJSTU9ERV9FWENFUFRJT048L2I+LgogICAgICAgICAqLwogICAgICAgICNbVGVudGF0aXZlVHlwZV0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gYmVnaW5UcmFuc2FjdGlvbigpOiBib29sIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMCwgUEhQIDcsIFBFQ0wgcGRvICZndDs9IDAuMS4wKTxici8+CiAgICAgICAgICogQ29tbWl0cyBhIHRyYW5zYWN0aW9uCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uY29tbWl0LnBocAogICAgICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICAgICAqIEB0aHJvd3MgUERPRXhjZXB0aW9uIGlmIHRoZXJlIGlzIG5vIGFjdGl2ZSB0cmFuc2FjdGlvbi4KICAgICAgICAgKi8KICAgICAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGNvbW1pdCgpOiBib29sIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMCwgUEhQIDcsIFBFQ0wgcGRvICZndDs9IDAuMS4wKTxici8+CiAgICAgICAgICogUm9sbHMgYmFjayBhIHRyYW5zYWN0aW9uCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8ucm9sbGJhY2sucGhwCiAgICAgICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgICAgICogQHRocm93cyBQRE9FeGNlcHRpb24gaWYgdGhlcmUgaXMgbm8gYWN0aXZlIHRyYW5zYWN0aW9uLgogICAgICAgICAqLwogICAgICAgICNbVGVudGF0aXZlVHlwZV0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gcm9sbEJhY2soKTogYm9vbCB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjMsIEJ1bmRsZWQgcGRvX3Bnc3FsLCBQSFAgNyk8YnIvPgogICAgICAgICAqIENoZWNrcyBpZiBpbnNpZGUgYSB0cmFuc2FjdGlvbgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmludHJhbnNhY3Rpb24ucGhwCiAgICAgICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIGEgdHJhbnNhY3Rpb24gaXMgY3VycmVudGx5IGFjdGl2ZSwgYW5kIDxiPkZBTFNFPC9iPiBpZiBub3QuCiAgICAgICAgICovCiAgICAgICAgI1tUZW50YXRpdmVUeXBlXQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBpblRyYW5zYWN0aW9uKCk6IGJvb2wge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMS4wLCBQSFAgNywgUEVDTCBwZG8gJmd0Oz0gMC4xLjApPGJyLz4KICAgICAgICAgKiBTZXQgYW4gYXR0cmlidXRlCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uc2V0YXR0cmlidXRlLnBocAogICAgICAgICAqIEBwYXJhbSBpbnQgJGF0dHJpYnV0ZQogICAgICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAgICAgKi8KICAgICAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHNldEF0dHJpYnV0ZSgKICAgICAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGF0dHJpYnV0ZSwKICAgICAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUKICAgICAgICApOiBib29sIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMCwgUEhQIDcsIFBFQ0wgcGRvICZndDs9IDAuMS4wKTxici8+CiAgICAgICAgICogRXhlY3V0ZSBhbiBTUUwgc3RhdGVtZW50IGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBhZmZlY3RlZCByb3dzCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uZXhlYy5waHAKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRzdGF0ZW1lbnQgPHA+CiAgICAgICAgICogVGhlIFNRTCBzdGF0ZW1lbnQgdG8gcHJlcGFyZSBhbmQgZXhlY3V0ZS4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogPHA+CiAgICAgICAgICogRGF0YSBpbnNpZGUgdGhlIHF1ZXJ5IHNob3VsZCBiZSBwcm9wZXJseSBlc2NhcGVkLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcmV0dXJuIGludHxmYWxzZSA8Yj5QRE86OmV4ZWM8L2I+IHJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIHRoYXQgd2VyZSBtb2RpZmllZAogICAgICAgICAqIG9yIGRlbGV0ZWQgYnkgdGhlIFNRTCBzdGF0ZW1lbnQgeW91IGlzc3VlZC4gSWYgbm8gcm93cyB3ZXJlIGFmZmVjdGVkLAogICAgICAgICAqIDxiPlBETzo6ZXhlYzwvYj4gcmV0dXJucyAwLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIG1heQogICAgICAgICAqIHJldHVybiBCb29sZWFuIDxiPkZBTFNFPC9iPiwgYnV0IG1heSBhbHNvIHJldHVybiBhIG5vbi1Cb29sZWFuIHZhbHVlIHdoaWNoCiAgICAgICAgICogZXZhbHVhdGVzIHRvIDxiPkZBTFNFPC9iPi4gUGxlYXNlIHJlYWQgdGhlIHNlY3Rpb24gb24gQm9vbGVhbnMgZm9yIG1vcmUKICAgICAgICAgKiBpbmZvcm1hdGlvbi4gVXNlIHRoZSA9PT0KICAgICAgICAgKiBvcGVyYXRvciBmb3IgdGVzdGluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMKICAgICAgICAgKiBmdW5jdGlvbi4KICAgICAgICAgKiA8cD4KICAgICAgICAgKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgaW5jb3JyZWN0bHkgcmVsaWVzIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YKICAgICAgICAgKiA8Yj5QRE86OmV4ZWM8L2I+LCB3aGVyZWluIGEgc3RhdGVtZW50IHRoYXQgYWZmZWN0ZWQgMCByb3dzCiAgICAgICAgICogcmVzdWx0cyBpbiBhIGNhbGwgdG8gPGI+ZGllPC9iPjoKICAgICAgICAgKiA8Y29kZT4KICAgICAgICAgKiAkZGItPmV4ZWMoKSBvciBkaWUocHJpbnRfcigkZGItPmVycm9ySW5mbygpLCB0cnVlKSk7CiAgICAgICAgICogPC9jb2RlPgogICAgICAgICAqLwogICAgICAgICNbVGVudGF0aXZlVHlwZV0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZXhlYygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkc3RhdGVtZW50KTogaW50fGZhbHNlIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMCwgUEhQIDcsIFBFQ0wgcGRvICZndDs9IDAuMi4wKTxici8+CiAgICAgICAgICogRXhlY3V0ZXMgYW4gU1FMIHN0YXRlbWVudCwgcmV0dXJuaW5nIGEgcmVzdWx0IHNldCBhcyBhIFBET1N0YXRlbWVudCBvYmplY3QKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5xdWVyeS5waHAKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWVyeSA8cD4KICAgICAgICAgKiBUaGUgU1FMIHN0YXRlbWVudCB0byBwcmVwYXJlIGFuZCBleGVjdXRlLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiA8cD4KICAgICAgICAgKiBEYXRhIGluc2lkZSB0aGUgcXVlcnkgc2hvdWxkIGJlIHByb3Blcmx5IGVzY2FwZWQuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBpbnQgJGZldGNoTW9kZSA8cD4KICAgICAgICAgKiBUaGUgZmV0Y2ggbW9kZSBtdXN0IGJlIG9uZSBvZiB0aGUgUERPOjpGRVRDSF8qIGNvbnN0YW50cy4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHBhcmFtIG1peGVkICRhcmczIDxwPgogICAgICAgICAqIFRoZSBzZWNvbmQgYW5kIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSB0aGUgc2FtZSBhcyB0aGUgcGFyYW1ldGVycyBmb3IgUERPU3RhdGVtZW50OjpzZXRGZXRjaE1vZGUuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBhcnJheSAkY3RvcmFyZ3MgW29wdGlvbmFsXSA8cD4KICAgICAgICAgKiBBcmd1bWVudHMgb2YgY3VzdG9tIGNsYXNzIGNvbnN0cnVjdG9yIHdoZW4gdGhlIDxpPm1vZGU8L2k+CiAgICAgICAgICogcGFyYW1ldGVyIGlzIHNldCB0byA8Yj5QRE86OkZFVENIX0NMQVNTPC9iPi4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHJldHVybiBQRE9TdGF0ZW1lbnR8ZmFsc2UgPGI+UERPOjpxdWVyeTwvYj4gcmV0dXJucyBhIFBET1N0YXRlbWVudCBvYmplY3QsIG9yIDxiPkZBTFNFPC9iPgogICAgICAgICAqIG9uIGZhaWx1cmUuCiAgICAgICAgICogQHNlZSBQRE9TdGF0ZW1lbnQ6OnNldEZldGNoTW9kZSBGb3IgYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBzZWNvbmQgYW5kIGZvbGxvd2luZyBwYXJhbWV0ZXJzLgogICAgICAgICAqLwogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUodG86ICc3LjQnKV0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gcXVlcnkoJHF1ZXJ5LCAkZmV0Y2hNb2RlID0gUERPOjpBVFRSX0RFRkFVTFRfRkVUQ0hfTU9ERSwgJGFyZzMgPSBudWxsLCAkY3RvcmFyZ3MgPSBbXSkge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ID49IDUuMS4wLCBQSFAgNywgUEhQIDgsIFBFQ0wgcGRvICZndDs9IDAuMi4wKTxici8+CiAgICAgICAgICogRXhlY3V0ZXMgYW4gU1FMIHN0YXRlbWVudCwgcmV0dXJuaW5nIGEgcmVzdWx0IHNldCBhcyBhIFBET1N0YXRlbWVudCBvYmplY3QKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5xdWVyeS5waHAKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWVyeSA8cD4KICAgICAgICAgKiBUaGUgU1FMIHN0YXRlbWVudCB0byBwcmVwYXJlIGFuZCBleGVjdXRlLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiA8cD4KICAgICAgICAgKiBEYXRhIGluc2lkZSB0aGUgcXVlcnkgc2hvdWxkIGJlIHByb3Blcmx5IGVzY2FwZWQuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkZmV0Y2hNb2RlIDxwPgogICAgICAgICAqIFRoZSBmZXRjaCBtb2RlIG11c3QgYmUgb25lIG9mIHRoZSBQRE86OkZFVENIXyogY29uc3RhbnRzLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gbWl4ZWQgLi4uJGZldGNoX21vZGVfYXJncyA8cD4KICAgICAgICAgKiBBcmd1bWVudHMgb2YgY3VzdG9tIGNsYXNzIGNvbnN0cnVjdG9yIHdoZW4gdGhlIDxpPm1vZGU8L2k+CiAgICAgICAgICogcGFyYW1ldGVyIGlzIHNldCB0byA8Yj5QRE86OkZFVENIX0NMQVNTPC9iPi4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHJldHVybiBQRE9TdGF0ZW1lbnR8ZmFsc2UgPGI+UERPOjpxdWVyeTwvYj4gcmV0dXJucyBhIFBET1N0YXRlbWVudCBvYmplY3QsIG9yIDxiPkZBTFNFPC9iPgogICAgICAgICAqIG9uIGZhaWx1cmUuCiAgICAgICAgICogQHNlZSBQRE9TdGF0ZW1lbnQ6OnNldEZldGNoTW9kZSBGb3IgYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBzZWNvbmQgYW5kIGZvbGxvd2luZyBwYXJhbWV0ZXJzLgogICAgICAgICAqLwogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoJzguMCcpXQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBxdWVyeSgKICAgICAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHF1ZXJ5LAogICAgICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8bnVsbCddLCBkZWZhdWx0OiAnJyldICRmZXRjaE1vZGUgPSBudWxsLAogICAgICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldIC4uLiRmZXRjaE1vZGVBcmdzCiAgICAgICAgKSB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjAsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICAgICAqIFJldHVybnMgdGhlIElEIG9mIHRoZSBsYXN0IGluc2VydGVkIHJvdyBvciBzZXF1ZW5jZSB2YWx1ZQogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmxhc3RpbnNlcnRpZC5waHAKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFtvcHRpb25hbF0gPHA+CiAgICAgICAgICogTmFtZSBvZiB0aGUgc2VxdWVuY2Ugb2JqZWN0IGZyb20gd2hpY2ggdGhlIElEIHNob3VsZCBiZSByZXR1cm5lZC4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgSWYgYSBzZXF1ZW5jZSBuYW1lIHdhcyBub3Qgc3BlY2lmaWVkIGZvciB0aGUgPGk+bmFtZTwvaT4KICAgICAgICAgKiBwYXJhbWV0ZXIsIDxiPlBETzo6bGFzdEluc2VydElkPC9iPiByZXR1cm5zIGEKICAgICAgICAgKiBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSByb3cgSUQgb2YgdGhlIGxhc3Qgcm93IHRoYXQgd2FzIGluc2VydGVkIGludG8KICAgICAgICAgKiB0aGUgZGF0YWJhc2UuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIDxwPgogICAgICAgICAqIElmIGEgc2VxdWVuY2UgbmFtZSB3YXMgc3BlY2lmaWVkIGZvciB0aGUgPGk+bmFtZTwvaT4KICAgICAgICAgKiBwYXJhbWV0ZXIsIDxiPlBETzo6bGFzdEluc2VydElkPC9iPiByZXR1cm5zIGEKICAgICAgICAgKiBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBsYXN0IHZhbHVlIHJldHJpZXZlZCBmcm9tIHRoZSBzcGVjaWZpZWQgc2VxdWVuY2UKICAgICAgICAgKiBvYmplY3QuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIDxwPgogICAgICAgICAqIElmIHRoZSBQRE8gZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBjYXBhYmlsaXR5LAogICAgICAgICAqIDxiPlBETzo6bGFzdEluc2VydElkPC9iPiB0cmlnZ2VycyBhbgogICAgICAgICAqIElNMDAxIFNRTFNUQVRFLgogICAgICAgICAqIEB0aHJvd3MgUERPRXhjZXB0aW9uIE9uIGVycm9yIGlmIFBETzo6RVJSTU9ERV9FWENFUFRJT04gb3B0aW9uIGlzIHRydWUuCiAgICAgICAgICovCiAgICAgICAgI1tUZW50YXRpdmVUeXBlXQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBsYXN0SW5zZXJ0SWQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbmFtZSA9IG51bGwpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMS4wLCBQSFAgNywgUEVDTCBwZG8gJmd0Oz0gMC4xLjApPGJyLz4KICAgICAgICAgKiBGZXRjaCB0aGUgU1FMU1RBVEUgYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXN0IG9wZXJhdGlvbiBvbiB0aGUgZGF0YWJhc2UgaGFuZGxlCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uZXJyb3Jjb2RlLnBocAogICAgICAgICAqIEByZXR1cm4gbWl4ZWQgYW4gU1FMU1RBVEUsIGEgZml2ZSBjaGFyYWN0ZXJzIGFscGhhbnVtZXJpYyBpZGVudGlmaWVyIGRlZmluZWQgaW4KICAgICAgICAgKiB0aGUgQU5TSSBTUUwtOTIgc3RhbmRhcmQuIEJyaWVmbHksIGFuIFNRTFNUQVRFIGNvbnNpc3RzIG9mIGEKICAgICAgICAgKiB0d28gY2hhcmFjdGVycyBjbGFzcyB2YWx1ZSBmb2xsb3dlZCBieSBhIHRocmVlIGNoYXJhY3RlcnMgc3ViY2xhc3MgdmFsdWUuIEEKICAgICAgICAgKiBjbGFzcyB2YWx1ZSBvZiAwMSBpbmRpY2F0ZXMgYSB3YXJuaW5nIGFuZCBpcyBhY2NvbXBhbmllZCBieSBhIHJldHVybiBjb2RlCiAgICAgICAgICogb2YgU1FMX1NVQ0NFU1NfV0lUSF9JTkZPLiBDbGFzcyB2YWx1ZXMgb3RoZXIgdGhhbiAnMDEnLCBleGNlcHQgZm9yIHRoZQogICAgICAgICAqIGNsYXNzICdJTScsIGluZGljYXRlIGFuIGVycm9yLiBUaGUgY2xhc3MgJ0lNJyBpcyBzcGVjaWZpYyB0byB3YXJuaW5ncwogICAgICAgICAqIGFuZCBlcnJvcnMgdGhhdCBkZXJpdmUgZnJvbSB0aGUgaW1wbGVtZW50YXRpb24gb2YgUERPIChvciBwZXJoYXBzIE9EQkMsCiAgICAgICAgICogaWYgeW91J3JlIHVzaW5nIHRoZSBPREJDIGRyaXZlcikgaXRzZWxmLiBUaGUgc3ViY2xhc3MgdmFsdWUgJzAwMCcgaW4gYW55CiAgICAgICAgICogY2xhc3MgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgbm8gc3ViY2xhc3MgZm9yIHRoYXQgU1FMU1RBVEUuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIDxwPgogICAgICAgICAqIDxiPlBETzo6ZXJyb3JDb2RlPC9iPiBvbmx5IHJldHJpZXZlcyBlcnJvciBjb2RlcyBmb3Igb3BlcmF0aW9ucwogICAgICAgICAqIHBlcmZvcm1lZCBkaXJlY3RseSBvbiB0aGUgZGF0YWJhc2UgaGFuZGxlLiBJZiB5b3UgY3JlYXRlIGEgUERPU3RhdGVtZW50CiAgICAgICAgICogb2JqZWN0IHRocm91Z2ggPGI+UERPOjpwcmVwYXJlPC9iPiBvcgogICAgICAgICAqIDxiPlBETzo6cXVlcnk8L2I+IGFuZCBpbnZva2UgYW4gZXJyb3Igb24gdGhlIHN0YXRlbWVudAogICAgICAgICAqIGhhbmRsZSwgPGI+UERPOjplcnJvckNvZGU8L2I+IHdpbGwgbm90IHJlZmxlY3QgdGhhdCBlcnJvci4KICAgICAgICAgKiBZb3UgbXVzdCBjYWxsIDxiPlBET1N0YXRlbWVudDo6ZXJyb3JDb2RlPC9iPiB0byByZXR1cm4gdGhlIGVycm9yCiAgICAgICAgICogY29kZSBmb3IgYW4gb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiBhIHBhcnRpY3VsYXIgc3RhdGVtZW50IGhhbmRsZS4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogPHA+CiAgICAgICAgICogUmV0dXJucyA8Yj5OVUxMPC9iPiBpZiBubyBvcGVyYXRpb24gaGFzIGJlZW4gcnVuIG9uIHRoZSBkYXRhYmFzZSBoYW5kbGUuCiAgICAgICAgICovCiAgICAgICAgI1tUZW50YXRpdmVUeXBlXQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBlcnJvckNvZGUoKTogP3N0cmluZyB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjAsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICAgICAqIEZldGNoIGV4dGVuZGVkIGVycm9yIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGFzdCBvcGVyYXRpb24gb24gdGhlIGRhdGFiYXNlIGhhbmRsZQogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmVycm9yaW5mby5waHAKICAgICAgICAgKiBAcmV0dXJuIGFycmF5IDxiPlBETzo6ZXJyb3JJbmZvPC9iPiByZXR1cm5zIGFuIGFycmF5IG9mIGVycm9yIGluZm9ybWF0aW9uCiAgICAgICAgICogYWJvdXQgdGhlIGxhc3Qgb3BlcmF0aW9uIHBlcmZvcm1lZCBieSB0aGlzIGRhdGFiYXNlIGhhbmRsZS4gVGhlIGFycmF5CiAgICAgICAgICogY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmaWVsZHM6CiAgICAgICAgICogPHRyIHZhbGlnbj0idG9wIj4KICAgICAgICAgKiA8dGQ+RWxlbWVudDwvdGQ+CiAgICAgICAgICogPHRkPkluZm9ybWF0aW9uPC90ZD4KICAgICAgICAgKiA8L3RyPgogICAgICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgICAgICogPHRkPjA8L3RkPgogICAgICAgICAqIDx0ZD5TUUxTVEFURSBlcnJvciBjb2RlIChhIGZpdmUgY2hhcmFjdGVycyBhbHBoYW51bWVyaWMgaWRlbnRpZmllciBkZWZpbmVkCiAgICAgICAgICogaW4gdGhlIEFOU0kgU1FMIHN0YW5kYXJkKS48L3RkPgogICAgICAgICAqIDwvdHI+CiAgICAgICAgICogPHRyIHZhbGlnbj0idG9wIj4KICAgICAgICAgKiA8dGQ+MTwvdGQ+CiAgICAgICAgICogPHRkPkRyaXZlci1zcGVjaWZpYyBlcnJvciBjb2RlLjwvdGQ+CiAgICAgICAgICogPC90cj4KICAgICAgICAgKiA8dHIgdmFsaWduPSJ0b3AiPgogICAgICAgICAqIDx0ZD4yPC90ZD4KICAgICAgICAgKiA8dGQ+RHJpdmVyLXNwZWNpZmljIGVycm9yIG1lc3NhZ2UuPC90ZD4KICAgICAgICAgKiA8L3RyPgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiA8cD4KICAgICAgICAgKiBJZiB0aGUgU1FMU1RBVEUgZXJyb3IgY29kZSBpcyBub3Qgc2V0IG9yIHRoZXJlIGlzIG5vIGRyaXZlci1zcGVjaWZpYwogICAgICAgICAqIGVycm9yLCB0aGUgZWxlbWVudHMgZm9sbG93aW5nIGVsZW1lbnQgMCB3aWxsIGJlIHNldCB0byA8Yj5OVUxMPC9iPi4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogPHA+CiAgICAgICAgICogPGI+UERPOjplcnJvckluZm88L2I+IG9ubHkgcmV0cmlldmVzIGVycm9yIGluZm9ybWF0aW9uIGZvcgogICAgICAgICAqIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGRpcmVjdGx5IG9uIHRoZSBkYXRhYmFzZSBoYW5kbGUuIElmIHlvdSBjcmVhdGUgYQogICAgICAgICAqIFBET1N0YXRlbWVudCBvYmplY3QgdGhyb3VnaCA8Yj5QRE86OnByZXBhcmU8L2I+IG9yCiAgICAgICAgICogPGI+UERPOjpxdWVyeTwvYj4gYW5kIGludm9rZSBhbiBlcnJvciBvbiB0aGUgc3RhdGVtZW50CiAgICAgICAgICogaGFuZGxlLCA8Yj5QRE86OmVycm9ySW5mbzwvYj4gd2lsbCBub3QgcmVmbGVjdCB0aGUgZXJyb3IKICAgICAgICAgKiBmcm9tIHRoZSBzdGF0ZW1lbnQgaGFuZGxlLiBZb3UgbXVzdCBjYWxsCiAgICAgICAgICogPGI+UERPU3RhdGVtZW50OjplcnJvckluZm88L2I+IHRvIHJldHVybiB0aGUgZXJyb3IKICAgICAgICAgKiBpbmZvcm1hdGlvbiBmb3IgYW4gb3BlcmF0aW9uIHBlcmZvcm1lZCBvbiBhIHBhcnRpY3VsYXIgc3RhdGVtZW50IGhhbmRsZS4KICAgICAgICAgKi8KICAgICAgICAjW0FycmF5U2hhcGUoWzAgPT4gInN0cmluZyIsIDEgPT4gImludCIsIDIgPT4gInN0cmluZyJdKV0KICAgICAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVycm9ySW5mbygpOiBhcnJheSB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjAsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAwLjIuMCk8YnIvPgogICAgICAgICAqIFJldHJpZXZlIGEgZGF0YWJhc2UgY29ubmVjdGlvbiBhdHRyaWJ1dGUKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5nZXRhdHRyaWJ1dGUucGhwCiAgICAgICAgICogQHBhcmFtIGludCAkYXR0cmlidXRlIDxwPgogICAgICAgICAqIE9uZSBvZiB0aGUgUERPOjpBVFRSXyogY29uc3RhbnRzLiBUaGUgY29uc3RhbnRzIHRoYXQKICAgICAgICAgKiBhcHBseSB0byBkYXRhYmFzZSBjb25uZWN0aW9ucyBhcmUgYXMgZm9sbG93czoKICAgICAgICAgKiBQRE86OkFUVFJfQVVUT0NPTU1JVAogICAgICAgICAqIFBETzo6QVRUUl9DQVNFCiAgICAgICAgICogUERPOjpBVFRSX0NMSUVOVF9WRVJTSU9OCiAgICAgICAgICogUERPOjpBVFRSX0NPTk5FQ1RJT05fU1RBVFVTCiAgICAgICAgICogUERPOjpBVFRSX0RSSVZFUl9OQU1FCiAgICAgICAgICogUERPOjpBVFRSX0VSUk1PREUKICAgICAgICAgKiBQRE86OkFUVFJfT1JBQ0xFX05VTExTCiAgICAgICAgICogUERPOjpBVFRSX1BFUlNJU1RFTlQKICAgICAgICAgKiBQRE86OkFUVFJfUFJFRkVUQ0gKICAgICAgICAgKiBQRE86OkFUVFJfU0VSVkVSX0lORk8KICAgICAgICAgKiBQRE86OkFUVFJfU0VSVkVSX1ZFUlNJT04KICAgICAgICAgKiBQRE86OkFUVFJfVElNRU9VVAogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcmV0dXJuIG1peGVkIEEgc3VjY2Vzc2Z1bCBjYWxsIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgUERPIGF0dHJpYnV0ZS4KICAgICAgICAgKiBBbiB1bnN1Y2Nlc3NmdWwgY2FsbCByZXR1cm5zIG51bGwuCiAgICAgICAgICovCiAgICAgICAgI1tUZW50YXRpdmVUeXBlXQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGF0dHJpYnV0ZSk6IG1peGVkIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMCwgUEhQIDcsIFBFQ0wgcGRvICZndDs9IDAuMi4xKTxici8+CiAgICAgICAgICogUXVvdGVzIGEgc3RyaW5nIGZvciB1c2UgaW4gYSBxdWVyeS4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5xdW90ZS5waHAKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAgICAgICAgICogVGhlIHN0cmluZyB0byBiZSBxdW90ZWQuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBpbnQgJHR5cGUgW29wdGlvbmFsXSA8cD4KICAgICAgICAgKiBQcm92aWRlcyBhIGRhdGEgdHlwZSBoaW50IGZvciBkcml2ZXJzIHRoYXQgaGF2ZSBhbHRlcm5hdGUgcXVvdGluZyBzdHlsZXMuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIGEgcXVvdGVkIHN0cmluZyB0aGF0IGlzIHRoZW9yZXRpY2FsbHkgc2FmZSB0byBwYXNzIGludG8gYW4KICAgICAgICAgKiBTUUwgc3RhdGVtZW50LiBSZXR1cm5zIDxiPkZBTFNFPC9iPiBpZiB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgcXVvdGluZyBpbgogICAgICAgICAqIHRoaXMgd2F5LgogICAgICAgICAqLwogICAgICAgICNbVGVudGF0aXZlVHlwZV0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gcXVvdGUoCiAgICAgICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRzdHJpbmcsCiAgICAgICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICR0eXBlID0gUERPOjpQQVJBTV9TVFIKICAgICAgICApOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAgICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIF9fd2FrZXVwKCkge30KCiAgICAgICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIF9fc2xlZXAoKSB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjMsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAxLjAuMyk8YnIvPgogICAgICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBhdmFpbGFibGUgUERPIGRyaXZlcnMKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5nZXRhdmFpbGFibGVkcml2ZXJzLnBocAogICAgICAgICAqIEByZXR1cm4gYXJyYXkgPGI+UERPOjpnZXRBdmFpbGFibGVEcml2ZXJzPC9iPiByZXR1cm5zIGFuIGFycmF5IG9mIFBETyBkcml2ZXIgbmFtZXMuIElmCiAgICAgICAgICogbm8gZHJpdmVycyBhcmUgYXZhaWxhYmxlLCBpdCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LgogICAgICAgICAqLwogICAgICAgICNbVGVudGF0aXZlVHlwZV0KICAgICAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEF2YWlsYWJsZURyaXZlcnMoKTogYXJyYXkge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMS4wLCBQSFAgNywgUEVDTCBwZG9fc3FsaXRlICZndDs9IDEuMC4wKTxici8+CiAgICAgICAgICogUmVnaXN0ZXJzIGFuIGFnZ3JlZ2F0aW5nIFVzZXIgRGVmaW5lZCBGdW5jdGlvbiBmb3IgdXNlIGluIFNRTCBzdGF0ZW1lbnRzCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG8uc3FsaXRlY3JlYXRlYWdncmVnYXRlLnBocAogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJGZ1bmN0aW9uX25hbWUgPHA+CiAgICAgICAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHVzZWQgaW4gU1FMIHN0YXRlbWVudHMuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkc3RlcF9mdW5jIDxwPgogICAgICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCByb3cgb2YgdGhlIHJlc3VsdCBzZXQuIFlvdXIgUEhQIGZ1bmN0aW9uIHNob3VsZCBhY2N1bXVsYXRlIHRoZSByZXN1bHQgYW5kIHN0b3JlIGl0IGluIHRoZSBhZ2dyZWdhdGlvbiBjb250ZXh0LgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGZpbmFsaXplX2Z1bmMgPHA+CiAgICAgICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYWdncmVnYXRlIHRoZSAic3RlcHBlZCIgZGF0YSBmcm9tIGVhY2ggcm93LiBPbmNlIGFsbCB0aGUgcm93cyBoYXZlIGJlZW4gcHJvY2Vzc2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFuZCBpdCBzaG91bGQgdGhlbiB0YWtlIHRoZSBkYXRhIGZyb20gdGhlIGFnZ3JlZ2F0aW9uIGNvbnRleHQgYW5kIHJldHVybiB0aGUgcmVzdWx0LiBUaGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSB0eXBlIHVuZGVyc3Rvb2QgYnkgU1FMaXRlIChpLmUuIHNjYWxhciB0eXBlKS4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHBhcmFtIGludCAkbnVtX2FyZ3MgW29wdGlvbmFsXSA8cD4KICAgICAgICAgKiBIaW50IHRvIHRoZSBTUUxpdGUgcGFyc2VyIGlmIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhY2NlcHRzIGEgcHJlZGV0ZXJtaW5lZCBudW1iZXIgb2YgYXJndW1lbnRzLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gc3FsaXRlQ3JlYXRlQWdncmVnYXRlKCRmdW5jdGlvbl9uYW1lLCAkc3RlcF9mdW5jLCAkZmluYWxpemVfZnVuYywgJG51bV9hcmdzID0gLTEpIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMTEsIFBIUCA3KTxici8+CiAgICAgICAgICogUmVnaXN0ZXJzIGEgVXNlciBEZWZpbmVkIEZ1bmN0aW9uIGZvciB1c2UgYXMgYSBjb2xsYXRpbmcgZnVuY3Rpb24gaW4gU1FMIHN0YXRlbWVudHMKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5zcWxpdGVjcmVhdGVjb2xsYXRpb24ucGhwCiAgICAgICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICAgICAgICAgKiBOYW1lIG9mIHRoZSBTUUwgY29sbGF0aW5nIGZ1bmN0aW9uIHRvIGJlIGNyZWF0ZWQgb3IgcmVkZWZpbmVkLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIDxwPgogICAgICAgICAqIFRoZSBuYW1lIG9mIGEgUEhQIGZ1bmN0aW9uIG9yIHVzZXItZGVmaW5lZCBmdW5jdGlvbiB0byBhcHBseSBhcyBhIGNhbGxiYWNrLCBkZWZpbmluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIGNvbGxhdGlvbi4gSXQgc2hvdWxkIGFjY2VwdCB0d28gc3RyaW5ncyBhbmQgcmV0dXJuIGFzIHN0cmNtcCgpIGRvZXMsIGkuZS4gaXQgc2hvdWxkIHJldHVybiAtMSwgMSwgb3IgMCBpZiB0aGUgZmlyc3Qgc3RyaW5nIHNvcnRzIGJlZm9yZSwgc29ydHMgYWZ0ZXIsIG9yIGlzIGVxdWFsIHRvIHRoZSBzZWNvbmQuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBzcWxpdGVDcmVhdGVDb2xsYXRpb24oJG5hbWUsICRjYWxsYmFjaykge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMS4wLCBQSFAgNywgUEVDTCBwZG9fc3FsaXRlICZndDs9IDEuMC4wKTxici8+CiAgICAgICAgICogUmVnaXN0ZXJzIGEgVXNlciBEZWZpbmVkIEZ1bmN0aW9uIGZvciB1c2UgaW4gU1FMIHN0YXRlbWVudHMKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkby5zcWxpdGVjcmVhdGVmdW5jdGlvbi5waHAKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRmdW5jdGlvbl9uYW1lIDxwPgogICAgICAgICAqIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB1c2VkIGluIFNRTCBzdGF0ZW1lbnRzLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIDxwPgogICAgICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZGVmaW5lZCBTUUwgZnVuY3Rpb24uCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBpbnQgJG51bV9hcmdzIFtvcHRpb25hbF0gPHA+CiAgICAgICAgICogVGhlIG51bWJlciBvZiBhcmd1bWVudHMgdGhhdCB0aGUgU1FMIGZ1bmN0aW9uIHRha2VzLiBJZiB0aGlzIHBhcmFtZXRlciBpcyAtMSwKICAgICAgICAgKiB0aGVuIHRoZSBTUUwgZnVuY3Rpb24gbWF5IHRha2UgYW55IG51bWJlciBvZiBhcmd1bWVudHMuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAgICAgICAgICogQSBiaXR3aXNlIGNvbmp1bmN0aW9uIG9mIGZsYWdzLiBDdXJyZW50bHksIG9ubHkgPGI+UERPOjpTUUxJVEVfREVURVJNSU5JU1RJQzwvYj4gaXMgc3VwcG9ydGVkLAogICAgICAgICAqIHdoaWNoIHNwZWNpZmllcyB0aGF0IHRoZSBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSByZXN1bHQgZ2l2ZW4gdGhlIHNhbWUgaW5wdXRzIHdpdGhpbgogICAgICAgICAqIGEgc2luZ2xlIFNRTCBzdGF0ZW1lbnQuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBzcWxpdGVDcmVhdGVGdW5jdGlvbigkZnVuY3Rpb25fbmFtZSwgJGNhbGxiYWNrLCAkbnVtX2FyZ3MgPSAtMSwgJGZsYWdzID0gMCkge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMy4zLCBQSFAgNywgUEhQIDgpPGJyLz4KICAgICAgICAgKiBDb3B5IGRhdGEgZnJvbSBQSFAgYXJyYXkgaW50byB0YWJsZQogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3Bkby5wZ3NxbGNvcHlmcm9tYXJyYXkucGhwCiAgICAgICAgICogQHBhcmFtIHN0cmluZyAkdGFibGVOYW1lIDxwPgogICAgICAgICAqIFN0cmluZyBjb250YWluaW5nIHRhYmxlIG5hbWUKICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHBhcmFtIGFycmF5ICRyb3dzIDxwPgogICAgICAgICAqIEFycmF5IG9mIHN0cmluZ3Mgd2l0aCBmaWVsZHMgc2VwYXJhdGVkIGJ5IDxpPnNlcGFyYXRvcjwvaT4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHBhcmFtIHN0cmluZyAkc2VwYXJhdG9yIDxwPgogICAgICAgICAqIFNlcGFyYXRvciB1c2VkIGluIDxpPnJvd3M8L2k+IGFycmF5CiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJG51bGxBcyA8cD4KICAgICAgICAgKiBIb3cgdG8gaW50ZXJwcmV0IG51bGwgdmFsdWVzCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZmllbGRzIDxwPgogICAgICAgICAqIExpc3Qgb2YgZmllbGRzIHRvIGluc2VydAogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gcGdzcWxDb3B5RnJvbUFycmF5KCR0YWJsZU5hbWUsIGFycmF5ICRyb3dzLCAkc2VwYXJhdG9yID0gIlx0IiwgJG51bGxBcyA9ICJcXFxcTiIsICRmaWVsZHMgPSBudWxsKSB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjMsIFBIUCA3LCBQSFAgOCk8YnIvPgogICAgICAgICAqIENvcHkgZGF0YSBmcm9tIGZpbGUgaW50byB0YWJsZQogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3Bkby5wZ3NxbGNvcHlmcm9tZmlsZS5waHAKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICR0YWJsZU5hbWUgPHA+CiAgICAgICAgICogU3RyaW5nIGNvbnRhaW5pbmcgdGFibGUgbmFtZQogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICAgICAgICAgKiBGaWxlbmFtZSBjb250YWluaW5nIGRhdGEgdG8gaW1wb3J0CiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcGFyYXRvciA8cD4KICAgICAgICAgKiBTZXBhcmF0b3IgdXNlZCBpbiBmaWxlIHNwZWNpZmllZCBieSA8aT5maWxlbmFtZTwvaT4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHBhcmFtIHN0cmluZyAkbnVsbEFzIDxwPgogICAgICAgICAqIEhvdyB0byBpbnRlcnByZXQgbnVsbCB2YWx1ZXMKICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRmaWVsZHMgPHA+CiAgICAgICAgICogTGlzdCBvZiBmaWVsZHMgdG8gaW5zZXJ0CiAgICAgICAgICogPC9wPgogICAgICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBwZ3NxbENvcHlGcm9tRmlsZSgkdGFibGVOYW1lLCAkZmlsZW5hbWUsICRzZXBhcmF0b3IgPSAiXHQiLCAkbnVsbEFzID0gIlxcXFxOIiwgJGZpZWxkcyA9IG51bGwpIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMywgUEhQIDcsIFBIUCA4KTxici8+CiAgICAgICAgICogQ29weSBkYXRhIGZyb20gZGF0YWJhc2UgdGFibGUgaW50byBQSFAgYXJyYXkKICAgICAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9wZG8ucGdzcWxjb3B5dG9hcnJheS5waHAKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICR0YWJsZU5hbWUgPHA+CiAgICAgICAgICogU3RyaW5nIGNvbnRhaW5pbmcgdGFibGUgbmFtZQogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXBhcmF0b3IgPHA+CiAgICAgICAgICogU2VwYXJhdG9yIHVzZWQgaW4gcm93cwogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRudWxsQXMgPHA+CiAgICAgICAgICogSG93IHRvIGludGVycHJldCBudWxsIHZhbHVlcwogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGZpZWxkcyA8cD4KICAgICAgICAgKiBMaXN0IG9mIGZpZWxkcyB0byBpbnNlcnQKICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHJldHVybiBhcnJheXxmYWxzZSByZXR1cm5zIGFuIGFycmF5IG9mIHJvd3MsIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBwZ3NxbENvcHlUb0FycmF5KCR0YWJsZU5hbWUsICRzZXBhcmF0b3IgPSAiXHQiLCAkbnVsbEFzID0gIlxcXFxOIiwgJGZpZWxkcyA9IG51bGwpIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMywgUEhQIDcsIFBIUCA4KTxici8+CiAgICAgICAgICogQ29weSBkYXRhIGZyb20gdGFibGUgaW50byBmaWxlCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcGRvLnBnc3FsY29weXRvZmlsZS5waHAKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICR0YWJsZU5hbWUgPHA+CiAgICAgICAgICogU3RyaW5nIGNvbnRhaW5pbmcgdGFibGUgbmFtZQogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICAgICAgICAgKiBGaWxlbmFtZSB0byBleHBvcnQgZGF0YQogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXBhcmF0b3IgPHA+CiAgICAgICAgICogU2VwYXJhdG9yIHVzZWQgaW4gZmlsZSBzcGVjaWZpZWQgYnkgPGk+ZmlsZW5hbWU8L2k+CiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJG51bGxBcyA8cD4KICAgICAgICAgKiBIb3cgdG8gaW50ZXJwcmV0IG51bGwgdmFsdWVzCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZmllbGRzIDxwPgogICAgICAgICAqIExpc3Qgb2YgZmllbGRzIHRvIGluc2VydAogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gcGdzcWxDb3B5VG9GaWxlKCR0YWJsZU5hbWUsICRmaWxlbmFtZSwgJHNlcGFyYXRvciA9ICJcdCIsICRudWxsQXMgPSAiXFxcXE4iLCAkZmllbGRzID0gbnVsbCkge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQSFAgNywgUEhQIDgsIFBFQ0wgcGRvX3Bnc3FsICZndDs9IDEuMC4yKTxici8+CiAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBsYXJnZSBvYmplY3QKICAgICAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9wZG8ucGdzcWxsb2JjcmVhdGUucGhwCiAgICAgICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgcmV0dXJucyB0aGUgT0lEIG9mIHRoZSBuZXdseSBjcmVhdGVkIGxhcmdlIG9iamVjdCBvbiBzdWNjZXNzLAogICAgICAgICAqIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBwZ3NxbExPQkNyZWF0ZSgpIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEhQIDcsIFBIUCA4LCBQRUNMIHBkb19wZ3NxbCAmZ3Q7PSAxLjAuMik8YnIvPgogICAgICAgICAqIE9wZW5zIGFuIGV4aXN0aW5nIGxhcmdlIG9iamVjdCBzdHJlYW0KICAgICAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9wZG8ucGdzcWxsb2JvcGVuLnBocAogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJG9pZCA8cD4KICAgICAgICAgKiBBIGxhcmdlIG9iamVjdCBpZGVudGlmaWVyLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2RlIDxwPgogICAgICAgICAqIElmIG1vZGUgaXMgciwgb3BlbiB0aGUgc3RyZWFtIGZvciByZWFkaW5nLiBJZiBtb2RlIGlzIHcsIG9wZW4gdGhlIHN0cmVhbSBmb3Igd3JpdGluZy4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHJldHVybiByZXNvdXJjZXxmYWxzZSByZXR1cm5zIGEgc3RyZWFtIHJlc291cmNlIG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHBnc3FsTE9CT3Blbigkb2lkLCAkbW9kZSA9ICJyYiIpIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEhQIDcsIFBIUCA4LCBQRUNMIHBkb19wZ3NxbCAmZ3Q7PSAxLjAuMik8YnIvPgogICAgICAgICAqIERlbGV0ZXMgdGhlIGxhcmdlIG9iamVjdAogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3Bkby5wZ3NxbGxvYnVubGluay5waHAKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRvaWQgPHA+CiAgICAgICAgICogQSBsYXJnZSBvYmplY3QgaWRlbnRpZmllci4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHBnc3FsTE9CVW5saW5rKCRvaWQpIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjYuMCwgUEhQIDcsIFBIUCA4KTxici8+CiAgICAgICAgICogR2V0IGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24KICAgICAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9wZG8ucGdzcWxnZXRub3RpZnkucGhwCiAgICAgICAgICogQHBhcmFtIGludCAkZmV0Y2hNb2RlIDxwPgogICAgICAgICAqIFRoZSBmb3JtYXQgdGhlIHJlc3VsdCBzZXQgc2hvdWxkIGJlIHJldHVybmVkIGFzLCByZXByZXNlbnRlZCBhcyBhIDxiPlBETzo6RkVUQ0hfKjwvYj4gY29uc3RhbnQuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBpbnQgJHRpbWVvdXRNaWxsaXNlY29uZHMgPHA+CiAgICAgICAgICogVGhlIGxlbmd0aCBvZiB0aW1lIHRvIHdhaXQgZm9yIGEgcmVzcG9uc2UsIGluIG1pbGxpc2Vjb25kcy4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHJldHVybiBhcnJheXxmYWxzZSBpZiBvbmUgb3IgbW9yZSBub3RpZmljYXRpb25zIGlzIHBlbmRpbmcsIHJldHVybnMgYSBzaW5nbGUgcm93LAogICAgICAgICAqIHdpdGggZmllbGRzIG1lc3NhZ2UgYW5kIHBpZCwgb3RoZXJ3aXNlIDxiPkZBTFNFPC9iPi4KICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gcGdzcWxHZXROb3RpZnkoJGZldGNoTW9kZSA9IDEsICR0aW1lb3V0TWlsbGlzZWNvbmRzID0gMCkge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuNi4wLCBQSFAgNywgUEhQIDgpPGJyLz4KICAgICAgICAgKiBHZXQgdGhlIHNlcnZlciBQSUQKICAgICAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9wZG8ucGdzcWxnZXRwaWQucGhwCiAgICAgICAgICogQHJldHVybiBpbnQgVGhlIHNlcnZlcidzIFBJRC4KICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gcGdzcWxHZXRQaWQoKSB7fQoKICAgICAgICAvKioKICAgICAgICAgKiBAc2luY2UgOC40CiAgICAgICAgICovCiAgICAgICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb25uZWN0KHN0cmluZyAkZHNuLCA/c3RyaW5nICR1c2VybmFtZSA9IG51bGwsID9zdHJpbmcgJHBhc3N3b3JkID0gbnVsbCwgP2FycmF5ICRvcHRpb25zID0gbnVsbCk6IHN0YXRpYyB7fQogICAgfQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4wLCBQSFAgNywgUEVDTCBwZG8gJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFJlcHJlc2VudHMgYSBwcmVwYXJlZCBzdGF0ZW1lbnQgYW5kLCBhZnRlciB0aGUgc3RhdGVtZW50IGlzIGV4ZWN1dGVkLCBhbgogICAgICogYXNzb2NpYXRlZCByZXN1bHQgc2V0LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5wZG9zdGF0ZW1lbnQucGhwCiAgICAgKi8KICAgIGNsYXNzIFBET1N0YXRlbWVudCBpbXBsZW1lbnRzIEl0ZXJhdG9yQWdncmVnYXRlCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogQHZhciBzdHJpbmcKICAgICAgICAgKi8KICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXQogICAgICAgIHB1YmxpYyAkcXVlcnlTdHJpbmc7CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMCwgUEhQIDcsIFBFQ0wgcGRvICZndDs9IDAuMS4wKTxici8+CiAgICAgICAgICogRXhlY3V0ZXMgYSBwcmVwYXJlZCBzdGF0ZW1lbnQKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkb3N0YXRlbWVudC5leGVjdXRlLnBocAogICAgICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIFtvcHRpb25hbF0gPHA+CiAgICAgICAgICogQW4gYXJyYXkgb2YgdmFsdWVzIHdpdGggYXMgbWFueSBlbGVtZW50cyBhcyB0aGVyZSBhcmUgYm91bmQKICAgICAgICAgKiBwYXJhbWV0ZXJzIGluIHRoZSBTUUwgc3RhdGVtZW50IGJlaW5nIGV4ZWN1dGVkLgogICAgICAgICAqIEFsbCB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgPGI+UERPOjpQQVJBTV9TVFI8L2I+LgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiA8cD4KICAgICAgICAgKiBZb3UgY2Fubm90IGJpbmQgbXVsdGlwbGUgdmFsdWVzIHRvIGEgc2luZ2xlIHBhcmFtZXRlcjsgZm9yIGV4YW1wbGUsCiAgICAgICAgICogeW91IGNhbm5vdCBiaW5kIHR3byB2YWx1ZXMgdG8gYSBzaW5nbGUgbmFtZWQgcGFyYW1ldGVyIGluIGFuIElOKCkKICAgICAgICAgKiBjbGF1c2UuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIDxwPgogICAgICAgICAqIFlvdSBjYW5ub3QgYmluZCBtb3JlIHZhbHVlcyB0aGFuIHNwZWNpZmllZDsgaWYgbW9yZSBrZXlzIGV4aXN0IGluCiAgICAgICAgICogPGk+aW5wdXRfcGFyYW1ldGVyczwvaT4gdGhhbiBpbiB0aGUgU1FMIHNwZWNpZmllZAogICAgICAgICAqIGluIHRoZSA8Yj5QRE86OnByZXBhcmU8L2I+LCB0aGVuIHRoZSBzdGF0ZW1lbnQgd2lsbAogICAgICAgICAqIGZhaWwgYW5kIGFuIGVycm9yIGlzIGVtaXR0ZWQuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICAgICAqIEB0aHJvd3MgUERPRXhjZXB0aW9uIE9uIGVycm9yIGlmIFBETzo6RVJSTU9ERV9FWENFUFRJT04gb3B0aW9uIGlzIHRydWUuCiAgICAgICAgICovCiAgICAgICAgI1tUZW50YXRpdmVUeXBlXQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2FycmF5fG51bGwnXSwgZGVmYXVsdDogJycpXSAkcGFyYW1zID0gbnVsbCk6IGJvb2wge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMS4wLCBQSFAgNywgUEVDTCBwZG8gJmd0Oz0gMC4xLjApPGJyLz4KICAgICAgICAgKiBGZXRjaGVzIHRoZSBuZXh0IHJvdyBmcm9tIGEgcmVzdWx0IHNldAogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvc3RhdGVtZW50LmZldGNoLnBocAogICAgICAgICAqIEBwYXJhbSBpbnQgJG1vZGUgW29wdGlvbmFsXSA8cD4KICAgICAgICAgKiBDb250cm9scyBob3cgdGhlIG5leHQgcm93IHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4gVGhpcyB2YWx1ZQogICAgICAgICAqIG11c3QgYmUgb25lIG9mIHRoZSBQRE86OkZFVENIXyogY29uc3RhbnRzLAogICAgICAgICAqIGRlZmF1bHRpbmcgdG8gdmFsdWUgb2YgUERPOjpBVFRSX0RFRkFVTFRfRkVUQ0hfTU9ERQogICAgICAgICAqICh3aGljaCBkZWZhdWx0cyB0byBQRE86OkZFVENIX0JPVEgpLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiA8cD4KICAgICAgICAgKiBQRE86OkZFVENIX0FTU09DOiByZXR1cm5zIGFuIGFycmF5IGluZGV4ZWQgYnkgY29sdW1uCiAgICAgICAgICogbmFtZSBhcyByZXR1cm5lZCBpbiB5b3VyIHJlc3VsdCBzZXQKICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHBhcmFtIGludCAkY3Vyc29yT3JpZW50YXRpb24gW29wdGlvbmFsXSA8cD4KICAgICAgICAgKiBGb3IgYSBQRE9TdGF0ZW1lbnQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHNjcm9sbGFibGUgY3Vyc29yLCB0aGlzCiAgICAgICAgICogdmFsdWUgZGV0ZXJtaW5lcyB3aGljaCByb3cgd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiBUaGlzIHZhbHVlCiAgICAgICAgICogbXVzdCBiZSBvbmUgb2YgdGhlIFBETzo6RkVUQ0hfT1JJXyogY29uc3RhbnRzLAogICAgICAgICAqIGRlZmF1bHRpbmcgdG8gUERPOjpGRVRDSF9PUklfTkVYVC4gVG8gcmVxdWVzdCBhCiAgICAgICAgICogc2Nyb2xsYWJsZSBjdXJzb3IgZm9yIHlvdXIgUERPU3RhdGVtZW50IG9iamVjdCwgeW91IG11c3Qgc2V0IHRoZQogICAgICAgICAqIFBETzo6QVRUUl9DVVJTT1IgYXR0cmlidXRlIHRvCiAgICAgICAgICogUERPOjpDVVJTT1JfU0NST0xMIHdoZW4geW91IHByZXBhcmUgdGhlIFNRTAogICAgICAgICAqIHN0YXRlbWVudCB3aXRoIDxiPlBETzo6cHJlcGFyZTwvYj4uCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBpbnQgJGN1cnNvck9mZnNldCBbb3B0aW9uYWxdCiAgICAgICAgICogQHJldHVybiBtaXhlZCBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gb24gc3VjY2VzcyBkZXBlbmRzIG9uIHRoZSBmZXRjaCB0eXBlLiBJbgogICAgICAgICAqIGFsbCBjYXNlcywgPGI+RkFMU0U8L2I+IGlzIHJldHVybmVkIG9uIGZhaWx1cmUuCiAgICAgICAgICovCiAgICAgICAgI1tUZW50YXRpdmVUeXBlXQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaCgKICAgICAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJG1vZGUgPSBQRE86OkZFVENIX0RFRkFVTFQsCiAgICAgICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRjdXJzb3JPcmllbnRhdGlvbiA9IFBETzo6RkVUQ0hfT1JJX05FWFQsCiAgICAgICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRjdXJzb3JPZmZzZXQgPSAwCiAgICAgICAgKTogbWl4ZWQge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMS4wLCBQSFAgNywgUEVDTCBwZG8gJmd0Oz0gMC4xLjApPGJyLz4KICAgICAgICAgKiBCaW5kcyBhIHBhcmFtZXRlciB0byB0aGUgc3BlY2lmaWVkIHZhcmlhYmxlIG5hbWUKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkb3N0YXRlbWVudC5iaW5kcGFyYW0ucGhwCiAgICAgICAgICogQHBhcmFtIG1peGVkICRwYXJhbSA8cD4KICAgICAgICAgKiBQYXJhbWV0ZXIgaWRlbnRpZmllci4gRm9yIGEgcHJlcGFyZWQgc3RhdGVtZW50IHVzaW5nIG5hbWVkCiAgICAgICAgICogcGxhY2Vob2xkZXJzLCB0aGlzIHdpbGwgYmUgYSBwYXJhbWV0ZXIgbmFtZSBvZiB0aGUgZm9ybQogICAgICAgICAqIDpuYW1lLiBGb3IgYSBwcmVwYXJlZCBzdGF0ZW1lbnQgdXNpbmcKICAgICAgICAgKiBxdWVzdGlvbiBtYXJrIHBsYWNlaG9sZGVycywgdGhpcyB3aWxsIGJlIHRoZSAxLWluZGV4ZWQgcG9zaXRpb24gb2YKICAgICAgICAgKiB0aGUgcGFyYW1ldGVyLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gbWl4ZWQgJiR2YXIgPHA+CiAgICAgICAgICogTmFtZSBvZiB0aGUgUEhQIHZhcmlhYmxlIHRvIGJpbmQgdG8gdGhlIFNRTCBzdGF0ZW1lbnQgcGFyYW1ldGVyLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gaW50ICR0eXBlIFtvcHRpb25hbF0gPHA+CiAgICAgICAgICogRXhwbGljaXQgZGF0YSB0eXBlIGZvciB0aGUgcGFyYW1ldGVyIHVzaW5nIHRoZSBQRE86OlBBUkFNXyoKICAgICAgICAgKiBjb25zdGFudHMuCiAgICAgICAgICogVG8gcmV0dXJuIGFuIElOT1VUIHBhcmFtZXRlciBmcm9tIGEgc3RvcmVkIHByb2NlZHVyZSwKICAgICAgICAgKiB1c2UgdGhlIGJpdHdpc2UgT1Igb3BlcmF0b3IgdG8gc2V0IHRoZSBQRE86OlBBUkFNX0lOUFVUX09VVFBVVCBiaXRzCiAgICAgICAgICogZm9yIHRoZSA8aT5kYXRhX3R5cGU8L2k+IHBhcmFtZXRlci4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHBhcmFtIGludCAkbWF4TGVuZ3RoIFtvcHRpb25hbF0gPHA+CiAgICAgICAgICogTGVuZ3RoIG9mIHRoZSBkYXRhIHR5cGUuIFRvIGluZGljYXRlIHRoYXQgYSBwYXJhbWV0ZXIgaXMgYW4gT1VUCiAgICAgICAgICogcGFyYW1ldGVyIGZyb20gYSBzdG9yZWQgcHJvY2VkdXJlLCB5b3UgbXVzdCBleHBsaWNpdGx5IHNldCB0aGUKICAgICAgICAgKiBsZW5ndGguCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBtaXhlZCAkZHJpdmVyT3B0aW9ucyBbb3B0aW9uYWxdIDxwPgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAgICAgKi8KICAgICAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGJpbmRQYXJhbSgKICAgICAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRwYXJhbSwKICAgICAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAmJHZhciwKICAgICAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHR5cGUgPSBQRE86OlBBUkFNX1NUUiwKICAgICAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJG1heExlbmd0aCA9IDAsCiAgICAgICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJGRyaXZlck9wdGlvbnMgPSBudWxsCiAgICAgICAgKTogYm9vbCB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjAsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICAgICAqIEJpbmQgYSBjb2x1bW4gdG8gYSBQSFAgdmFyaWFibGUKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkb3N0YXRlbWVudC5iaW5kY29sdW1uLnBocAogICAgICAgICAqIEBwYXJhbSBtaXhlZCAkY29sdW1uIDxwPgogICAgICAgICAqIE51bWJlciBvZiB0aGUgY29sdW1uICgxLWluZGV4ZWQpIG9yIG5hbWUgb2YgdGhlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IHNldC4KICAgICAgICAgKiBJZiB1c2luZyB0aGUgY29sdW1uIG5hbWUsIGJlIGF3YXJlIHRoYXQgdGhlIG5hbWUgc2hvdWxkIG1hdGNoIHRoZQogICAgICAgICAqIGNhc2Ugb2YgdGhlIGNvbHVtbiwgYXMgcmV0dXJuZWQgYnkgdGhlIGRyaXZlci4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHBhcmFtIG1peGVkICYkdmFyIDxwPgogICAgICAgICAqIE5hbWUgb2YgdGhlIFBIUCB2YXJpYWJsZSB0byB3aGljaCB0aGUgY29sdW1uIHdpbGwgYmUgYm91bmQuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBpbnQgJHR5cGUgW29wdGlvbmFsXSA8cD4KICAgICAgICAgKiBEYXRhIHR5cGUgb2YgdGhlIHBhcmFtZXRlciwgc3BlY2lmaWVkIGJ5IHRoZSBQRE86OlBBUkFNXyogY29uc3RhbnRzLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gaW50ICRtYXhMZW5ndGggW29wdGlvbmFsXSA8cD4KICAgICAgICAgKiBBIGhpbnQgZm9yIHByZS1hbGxvY2F0aW9uLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gbWl4ZWQgJGRyaXZlck9wdGlvbnMgW29wdGlvbmFsXSA8cD4KICAgICAgICAgKiBPcHRpb25hbCBwYXJhbWV0ZXIocykgZm9yIHRoZSBkcml2ZXIuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICAgICAqLwogICAgICAgICNbVGVudGF0aXZlVHlwZV0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gYmluZENvbHVtbigKICAgICAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2x1bW4sCiAgICAgICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJiR2YXIsCiAgICAgICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICR0eXBlID0gUERPOjpQQVJBTV9TVFIsCiAgICAgICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRtYXhMZW5ndGggPSAwLAogICAgICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRkcml2ZXJPcHRpb25zID0gbnVsbAogICAgICAgICk6IGJvb2wge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMS4wLCBQSFAgNywgUEVDTCBwZG8gJmd0Oz0gMS4wLjApPGJyLz4KICAgICAgICAgKiBCaW5kcyBhIHZhbHVlIHRvIGEgcGFyYW1ldGVyCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG9zdGF0ZW1lbnQuYmluZHZhbHVlLnBocAogICAgICAgICAqIEBwYXJhbSBtaXhlZCAkcGFyYW0gPHA+CiAgICAgICAgICogUGFyYW1ldGVyIGlkZW50aWZpZXIuIEZvciBhIHByZXBhcmVkIHN0YXRlbWVudCB1c2luZyBuYW1lZAogICAgICAgICAqIHBsYWNlaG9sZGVycywgdGhpcyB3aWxsIGJlIGEgcGFyYW1ldGVyIG5hbWUgb2YgdGhlIGZvcm0KICAgICAgICAgKiA6bmFtZS4gRm9yIGEgcHJlcGFyZWQgc3RhdGVtZW50IHVzaW5nCiAgICAgICAgICogcXVlc3Rpb24gbWFyayBwbGFjZWhvbGRlcnMsIHRoaXMgd2lsbCBiZSB0aGUgMS1pbmRleGVkIHBvc2l0aW9uIG9mCiAgICAgICAgICogdGhlIHBhcmFtZXRlci4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSA8cD4KICAgICAgICAgKiBUaGUgdmFsdWUgdG8gYmluZCB0byB0aGUgcGFyYW1ldGVyLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gaW50ICR0eXBlIFtvcHRpb25hbF0gPHA+CiAgICAgICAgICogRXhwbGljaXQgZGF0YSB0eXBlIGZvciB0aGUgcGFyYW1ldGVyIHVzaW5nIHRoZSBQRE86OlBBUkFNXyoKICAgICAgICAgKiBjb25zdGFudHMuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICAgICAqLwogICAgICAgICNbVGVudGF0aXZlVHlwZV0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gYmluZFZhbHVlKAogICAgICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHBhcmFtLAogICAgICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICR2YWx1ZSwKICAgICAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHR5cGUgPSBQRE86OlBBUkFNX1NUUgogICAgICAgICk6IGJvb2wge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMS4wLCBQSFAgNywgUEVDTCBwZG8gJmd0Oz0gMC4xLjApPGJyLz4KICAgICAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBieSB0aGUgbGFzdCBTUUwgc3RhdGVtZW50CiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG9zdGF0ZW1lbnQucm93Y291bnQucGhwCiAgICAgICAgICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiByb3dzLgogICAgICAgICAqLwogICAgICAgICNbVGVudGF0aXZlVHlwZV0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gcm93Q291bnQoKTogaW50IHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMCwgUEhQIDcsIFBFQ0wgcGRvICZndDs9IDAuOS4wKTxici8+CiAgICAgICAgICogUmV0dXJucyBhIHNpbmdsZSBjb2x1bW4gZnJvbSB0aGUgbmV4dCByb3cgb2YgYSByZXN1bHQgc2V0CiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG9zdGF0ZW1lbnQuZmV0Y2hjb2x1bW4ucGhwCiAgICAgICAgICogQHBhcmFtIGludCAkY29sdW1uIFtvcHRpb25hbF0gPHA+CiAgICAgICAgICogMC1pbmRleGVkIG51bWJlciBvZiB0aGUgY29sdW1uIHlvdSB3aXNoIHRvIHJldHJpZXZlIGZyb20gdGhlIHJvdy4gSWYKICAgICAgICAgKiBubyB2YWx1ZSBpcyBzdXBwbGllZCwgPGI+UERPU3RhdGVtZW50OjpmZXRjaENvbHVtbjwvYj4KICAgICAgICAgKiBmZXRjaGVzIHRoZSBmaXJzdCBjb2x1bW4uCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyBhIHNpbmdsZSBjb2x1bW4gZnJvbSB0aGUgbmV4dCByb3cgb2YgYSByZXN1bHQKICAgICAgICAgKiBzZXQgb3IgRkFMU0UgaWYgdGhlcmUgYXJlIG5vIG1vcmUgcm93cy4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogPHA+CiAgICAgICAgICogVGhlcmUgaXMgbm8gd2F5IHRvIHJldHVybiBhbm90aGVyIGNvbHVtbiBmcm9tIHRoZSBzYW1lIHJvdyBpZiB5b3UKICAgICAgICAgKiB1c2UgPGI+UERPU3RhdGVtZW50OjpmZXRjaENvbHVtbjwvYj4gdG8gcmV0cmlldmUgZGF0YS4KICAgICAgICAgKi8KICAgICAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGZldGNoQ29sdW1uKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRjb2x1bW4gPSAwKTogbWl4ZWQge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMS4wLCBQSFAgNywgUEVDTCBwZG8gJmd0Oz0gMC4xLjApPGJyLz4KICAgICAgICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSByZXN1bHQgc2V0IHJvd3MKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkb3N0YXRlbWVudC5mZXRjaGFsbC5waHAKICAgICAgICAgKiBAcGFyYW0gaW50ICRtb2RlIFtvcHRpb25hbF0gPHA+CiAgICAgICAgICogQ29udHJvbHMgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXR1cm5lZCBhcnJheSBhcyBkb2N1bWVudGVkIGluCiAgICAgICAgICogPGI+UERPU3RhdGVtZW50OjpmZXRjaDwvYj4uCiAgICAgICAgICogRGVmYXVsdHMgdG8gdmFsdWUgb2YgPGI+UERPOjpBVFRSX0RFRkFVTFRfRkVUQ0hfTU9ERTwvYj4KICAgICAgICAgKiAod2hpY2ggZGVmYXVsdHMgdG8gPGI+UERPOjpGRVRDSF9CT1RIPC9iPikKICAgICAgICAgKiA8L3A+CiAgICAgICAgICogPHA+CiAgICAgICAgICogVG8gcmV0dXJuIGFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgYWxsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb2x1bW4gZnJvbQogICAgICAgICAqIHRoZSByZXN1bHQgc2V0LCBzcGVjaWZ5IDxiPlBETzo6RkVUQ0hfQ09MVU1OPC9iPi4gWW91CiAgICAgICAgICogY2FuIHNwZWNpZnkgd2hpY2ggY29sdW1uIHlvdSB3YW50IHdpdGggdGhlCiAgICAgICAgICogPGk+Y29sdW1uLWluZGV4PC9pPiBwYXJhbWV0ZXIuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIDxwPgogICAgICAgICAqIFRvIGZldGNoIG9ubHkgdGhlIHVuaXF1ZSB2YWx1ZXMgb2YgYSBzaW5nbGUgY29sdW1uIGZyb20gdGhlIHJlc3VsdCBzZXQsCiAgICAgICAgICogYml0d2lzZS1PUiA8Yj5QRE86OkZFVENIX0NPTFVNTjwvYj4gd2l0aAogICAgICAgICAqIDxiPlBETzo6RkVUQ0hfVU5JUVVFPC9iPi4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogPHA+CiAgICAgICAgICogVG8gcmV0dXJuIGFuIGFzc29jaWF0aXZlIGFycmF5IGdyb3VwZWQgYnkgdGhlIHZhbHVlcyBvZiBhIHNwZWNpZmllZAogICAgICAgICAqIGNvbHVtbiwgYml0d2lzZS1PUiA8Yj5QRE86OkZFVENIX0NPTFVNTjwvYj4gd2l0aAogICAgICAgICAqIDxiPlBETzo6RkVUQ0hfR1JPVVA8L2I+LgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gbWl4ZWQgLi4uJGFyZ3MgPHA+CiAgICAgICAgICogQXJndW1lbnRzIG9mIGN1c3RvbSBjbGFzcyBjb25zdHJ1Y3RvciB3aGVuIHRoZSA8aT5mZXRjaF9zdHlsZTwvaT4KICAgICAgICAgKiBwYXJhbWV0ZXIgaXMgPGI+UERPOjpGRVRDSF9DTEFTUzwvYj4uCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEByZXR1cm4gYXJyYXkgPGI+UERPU3RhdGVtZW50OjpmZXRjaEFsbDwvYj4gcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nCiAgICAgICAgICogYWxsIG9mIHRoZSByZW1haW5pbmcgcm93cyBpbiB0aGUgcmVzdWx0IHNldC4gVGhlIGFycmF5IHJlcHJlc2VudHMgZWFjaAogICAgICAgICAqIHJvdyBhcyBlaXRoZXIgYW4gYXJyYXkgb2YgY29sdW1uIHZhbHVlcyBvciBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzCiAgICAgICAgICogY29ycmVzcG9uZGluZyB0byBlYWNoIGNvbHVtbiBuYW1lLgogICAgICAgICAqIEFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkIGlmIHRoZXJlIGFyZSB6ZXJvIHJlc3VsdHMgdG8gZmV0Y2gsIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIDxwPgogICAgICAgICAqIFVzaW5nIHRoaXMgbWV0aG9kIHRvIGZldGNoIGxhcmdlIHJlc3VsdCBzZXRzIHdpbGwgcmVzdWx0IGluIGEgaGVhdnkKICAgICAgICAgKiBkZW1hbmQgb24gc3lzdGVtIGFuZCBwb3NzaWJseSBuZXR3b3JrIHJlc291cmNlcy4gUmF0aGVyIHRoYW4gcmV0cmlldmluZwogICAgICAgICAqIGFsbCBvZiB0aGUgZGF0YSBhbmQgbWFuaXB1bGF0aW5nIGl0IGluIFBIUCwgY29uc2lkZXIgdXNpbmcgdGhlIGRhdGFiYXNlCiAgICAgICAgICogc2VydmVyIHRvIG1hbmlwdWxhdGUgdGhlIHJlc3VsdCBzZXRzLiBGb3IgZXhhbXBsZSwgdXNlIHRoZSBXSEVSRSBhbmQKICAgICAgICAgKiBPUkRFUiBCWSBjbGF1c2VzIGluIFNRTCB0byByZXN0cmljdCByZXN1bHRzIGJlZm9yZSByZXRyaWV2aW5nIGFuZAogICAgICAgICAqIHByb2Nlc3NpbmcgdGhlbSB3aXRoIFBIUC4KICAgICAgICAgKi8KICAgICAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGZldGNoQWxsKAogICAgICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbW9kZSA9IFBETzo6RkVUQ0hfREVGQVVMVCwKICAgICAgICAgICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGZldGNoX2FyZ3VtZW50ID0gbnVsbCwKICAgICAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAuLi4kYXJncwogICAgICAgICk6IGFycmF5IHt9CgogICAgICAgIC8qKgogICAgICAgICAqIEB0ZW1wbGF0ZSBUCiAgICAgICAgICoKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjAsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAwLjIuNCk8YnIvPgogICAgICAgICAqIEZldGNoZXMgdGhlIG5leHQgcm93IGFuZCByZXR1cm5zIGl0IGFzIGFuIG9iamVjdC4KICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkb3N0YXRlbWVudC5mZXRjaG9iamVjdC5waHAKICAgICAgICAgKiBAcGFyYW0gY2xhc3Mtc3RyaW5nPFQ+ICRjbGFzcyBbb3B0aW9uYWxdIDxwPgogICAgICAgICAqIE5hbWUgb2YgdGhlIGNyZWF0ZWQgY2xhc3MuCiAgICAgICAgICogPC9wPgogICAgICAgICAqIEBwYXJhbSBhcnJheSAkY29uc3RydWN0b3JBcmdzIFtvcHRpb25hbF0gPHA+CiAgICAgICAgICogRWxlbWVudHMgb2YgdGhpcyBhcnJheSBhcmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHJldHVybiBUfHN0ZENsYXNzfG51bGwgYW4gaW5zdGFuY2Ugb2YgdGhlIHJlcXVpcmVkIGNsYXNzIHdpdGggcHJvcGVydHkgbmFtZXMgdGhhdAogICAgICAgICAqIGNvcnJlc3BvbmQgdG8gdGhlIGNvbHVtbiBuYW1lcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAgICAgKi8KICAgICAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGZldGNoT2JqZWN0KAogICAgICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRjbGFzcyA9ICJzdGRDbGFzcyIsCiAgICAgICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2FycmF5J10sIGRlZmF1bHQ6ICcnKV0gJGNvbnN0cnVjdG9yQXJncyA9IFtdCiAgICAgICAgKTogb2JqZWN0fGZhbHNlIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMCwgUEhQIDcsIFBFQ0wgcGRvICZndDs9IDAuMS4wKTxici8+CiAgICAgICAgICogRmV0Y2ggdGhlIFNRTFNUQVRFIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGFzdCBvcGVyYXRpb24gb24gdGhlIHN0YXRlbWVudCBoYW5kbGUKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkb3N0YXRlbWVudC5lcnJvcmNvZGUucGhwCiAgICAgICAgICogQHJldHVybiBzdHJpbmcgSWRlbnRpY2FsIHRvIDxiPlBETzo6ZXJyb3JDb2RlPC9iPiwgZXhjZXB0IHRoYXQKICAgICAgICAgKiA8Yj5QRE9TdGF0ZW1lbnQ6OmVycm9yQ29kZTwvYj4gb25seSByZXRyaWV2ZXMgZXJyb3IgY29kZXMKICAgICAgICAgKiBmb3Igb3BlcmF0aW9ucyBwZXJmb3JtZWQgd2l0aCBQRE9TdGF0ZW1lbnQgb2JqZWN0cy4KICAgICAgICAgKi8KICAgICAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVycm9yQ29kZSgpOiA/c3RyaW5nIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMCwgUEhQIDcsIFBFQ0wgcGRvICZndDs9IDAuMS4wKTxici8+CiAgICAgICAgICogRmV0Y2ggZXh0ZW5kZWQgZXJyb3IgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXN0IG9wZXJhdGlvbiBvbiB0aGUgc3RhdGVtZW50IGhhbmRsZQogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvc3RhdGVtZW50LmVycm9yaW5mby5waHAKICAgICAgICAgKiBAcmV0dXJuIGFycmF5IDxiPlBET1N0YXRlbWVudDo6ZXJyb3JJbmZvPC9iPiByZXR1cm5zIGFuIGFycmF5IG9mCiAgICAgICAgICogZXJyb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxhc3Qgb3BlcmF0aW9uIHBlcmZvcm1lZCBieSB0aGlzCiAgICAgICAgICogc3RhdGVtZW50IGhhbmRsZS4gVGhlIGFycmF5IGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzOgogICAgICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgICAgICogPHRkPkVsZW1lbnQ8L3RkPgogICAgICAgICAqIDx0ZD5JbmZvcm1hdGlvbjwvdGQ+CiAgICAgICAgICogPC90cj4KICAgICAgICAgKiA8dHIgdmFsaWduPSJ0b3AiPgogICAgICAgICAqIDx0ZD4wPC90ZD4KICAgICAgICAgKiA8dGQ+U1FMU1RBVEUgZXJyb3IgY29kZSAoYSBmaXZlIGNoYXJhY3RlcnMgYWxwaGFudW1lcmljIGlkZW50aWZpZXIgZGVmaW5lZAogICAgICAgICAqIGluIHRoZSBBTlNJIFNRTCBzdGFuZGFyZCkuPC90ZD4KICAgICAgICAgKiA8L3RyPgogICAgICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgICAgICogPHRkPjE8L3RkPgogICAgICAgICAqIDx0ZD5Ecml2ZXIgc3BlY2lmaWMgZXJyb3IgY29kZS48L3RkPgogICAgICAgICAqIDwvdHI+CiAgICAgICAgICogPHRyIHZhbGlnbj0idG9wIj4KICAgICAgICAgKiA8dGQ+MjwvdGQ+CiAgICAgICAgICogPHRkPkRyaXZlciBzcGVjaWZpYyBlcnJvciBtZXNzYWdlLjwvdGQ+CiAgICAgICAgICogPC90cj4KICAgICAgICAgKi8KICAgICAgICAjW0FycmF5U2hhcGUoWzAgPT4gInN0cmluZyIsIDEgPT4gImludCIsIDIgPT4gInN0cmluZyJdKV0KICAgICAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGVycm9ySW5mbygpOiBhcnJheSB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjAsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAwLjIuMCk8YnIvPgogICAgICAgICAqIFNldCBhIHN0YXRlbWVudCBhdHRyaWJ1dGUKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkb3N0YXRlbWVudC5zZXRhdHRyaWJ1dGUucGhwCiAgICAgICAgICogQHBhcmFtIGludCAkYXR0cmlidXRlCiAgICAgICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICAgICAqLwogICAgICAgICNbVGVudGF0aXZlVHlwZV0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QXR0cmlidXRlKAogICAgICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkYXR0cmlidXRlLAogICAgICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICR2YWx1ZQogICAgICAgICk6IGJvb2wge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMS4wLCBQSFAgNywgUEVDTCBwZG8gJmd0Oz0gMC4yLjApPGJyLz4KICAgICAgICAgKiBSZXRyaWV2ZSBhIHN0YXRlbWVudCBhdHRyaWJ1dGUKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkb3N0YXRlbWVudC5nZXRhdHRyaWJ1dGUucGhwCiAgICAgICAgICogQHBhcmFtIGludCAkbmFtZQogICAgICAgICAqIEByZXR1cm4gbWl4ZWQgdGhlIGF0dHJpYnV0ZSB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbmFtZSk6IG1peGVkIHt9CgogICAgICAgIC8qKgogICAgICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMCwgUEhQIDcsIFBFQ0wgcGRvICZndDs9IDAuMi4wKTxici8+CiAgICAgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHJlc3VsdCBzZXQKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkb3N0YXRlbWVudC5jb2x1bW5jb3VudC5waHAKICAgICAgICAgKiBAcmV0dXJuIGludCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHJlc3VsdCBzZXQgcmVwcmVzZW50ZWQgYnkgdGhlCiAgICAgICAgICogUERPU3RhdGVtZW50IG9iamVjdC4gSWYgdGhlcmUgaXMgbm8gcmVzdWx0IHNldCwKICAgICAgICAgKiA8Yj5QRE9TdGF0ZW1lbnQ6OmNvbHVtbkNvdW50PC9iPiByZXR1cm5zIDAuCiAgICAgICAgICovCiAgICAgICAgI1tUZW50YXRpdmVUeXBlXQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBjb2x1bW5Db3VudCgpOiBpbnQge30KCiAgICAgICAgLyoqCiAgICAgICAgICogKFBIUCA1ICZndDs9IDUuMS4wLCBQSFAgNywgUEVDTCBwZG8gJmd0Oz0gMC4yLjApPGJyLz4KICAgICAgICAgKiBSZXR1cm5zIG1ldGFkYXRhIGZvciBhIGNvbHVtbiBpbiBhIHJlc3VsdCBzZXQKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkb3N0YXRlbWVudC5nZXRjb2x1bW5tZXRhLnBocAogICAgICAgICAqIEBwYXJhbSBpbnQgJGNvbHVtbiA8cD4KICAgICAgICAgKiBUaGUgMC1pbmRleGVkIGNvbHVtbiBpbiB0aGUgcmVzdWx0IHNldC4KICAgICAgICAgKiA8L3A+CiAgICAgICAgICogQHJldHVybiBhcnJheXxmYWxzZSBhbiBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHJlcHJlc2VudGluZwogICAgICAgICAqIHRoZSBtZXRhZGF0YSBmb3IgYSBzaW5nbGUgY29sdW1uOgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiA8dGFibGU+CiAgICAgICAgICogQ29sdW1uIG1ldGFkYXRhCiAgICAgICAgICogPHRyIHZhbGlnbj0idG9wIj4KICAgICAgICAgKiA8dGQ+TmFtZTwvdGQ+CiAgICAgICAgICogPHRkPlZhbHVlPC90ZD4KICAgICAgICAgKiA8L3RyPgogICAgICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgICAgICogPHRkPm5hdGl2ZV90eXBlPC90ZD4KICAgICAgICAgKiA8dGQ+VGhlIFBIUCBuYXRpdmUgdHlwZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgY29sdW1uIHZhbHVlLjwvdGQ+CiAgICAgICAgICogPC90cj4KICAgICAgICAgKiA8dHIgdmFsaWduPSJ0b3AiPgogICAgICAgICAqIDx0ZD5kcml2ZXI6ZGVjbF90eXBlPC90ZD4KICAgICAgICAgKiA8dGQ+VGhlIFNRTCB0eXBlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjb2x1bW4gdmFsdWUgaW4gdGhlIGRhdGFiYXNlLgogICAgICAgICAqIElmIHRoZSBjb2x1bW4gaW4gdGhlIHJlc3VsdCBzZXQgaXMgdGhlIHJlc3VsdCBvZiBhIGZ1bmN0aW9uLCB0aGlzIHZhbHVlCiAgICAgICAgICogaXMgbm90IHJldHVybmVkIGJ5IDxiPlBET1N0YXRlbWVudDo6Z2V0Q29sdW1uTWV0YTwvYj4uCiAgICAgICAgICogPC90ZD4KICAgICAgICAgKiA8L3RyPgogICAgICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgICAgICogPHRkPmZsYWdzPC90ZD4KICAgICAgICAgKiA8dGQ+QW55IGZsYWdzIHNldCBmb3IgdGhpcyBjb2x1bW4uPC90ZD4KICAgICAgICAgKiA8L3RyPgogICAgICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgICAgICogPHRkPm5hbWU8L3RkPgogICAgICAgICAqIDx0ZD5UaGUgbmFtZSBvZiB0aGlzIGNvbHVtbiBhcyByZXR1cm5lZCBieSB0aGUgZGF0YWJhc2UuPC90ZD4KICAgICAgICAgKiA8L3RyPgogICAgICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgICAgICogPHRkPnRhYmxlPC90ZD4KICAgICAgICAgKiA8dGQ+VGhlIG5hbWUgb2YgdGhpcyBjb2x1bW4ncyB0YWJsZSBhcyByZXR1cm5lZCBieSB0aGUgZGF0YWJhc2UuPC90ZD4KICAgICAgICAgKiA8L3RyPgogICAgICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgICAgICogPHRkPmxlbjwvdGQ+CiAgICAgICAgICogPHRkPlRoZSBsZW5ndGggb2YgdGhpcyBjb2x1bW4uIE5vcm1hbGx5IC0xIGZvcgogICAgICAgICAqIHR5cGVzIG90aGVyIHRoYW4gZmxvYXRpbmcgcG9pbnQgZGVjaW1hbHMuPC90ZD4KICAgICAgICAgKiA8L3RyPgogICAgICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgICAgICogPHRkPnByZWNpc2lvbjwvdGQ+CiAgICAgICAgICogPHRkPlRoZSBudW1lcmljIHByZWNpc2lvbiBvZiB0aGlzIGNvbHVtbi4gTm9ybWFsbHkKICAgICAgICAgKiAwIGZvciB0eXBlcyBvdGhlciB0aGFuIGZsb2F0aW5nIHBvaW50CiAgICAgICAgICogZGVjaW1hbHMuPC90ZD4KICAgICAgICAgKiA8L3RyPgogICAgICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgICAgICogPHRkPnBkb190eXBlPC90ZD4KICAgICAgICAgKiA8dGQ+VGhlIHR5cGUgb2YgdGhpcyBjb2x1bW4gYXMgcmVwcmVzZW50ZWQgYnkgdGhlCiAgICAgICAgICogUERPOjpQQVJBTV8qIGNvbnN0YW50cy48L3RkPgogICAgICAgICAqIDwvdHI+CiAgICAgICAgICogPC90YWJsZT4KICAgICAgICAgKiA8cD4KICAgICAgICAgKiBSZXR1cm5zIDxiPkZBTFNFPC9iPiBpZiB0aGUgcmVxdWVzdGVkIGNvbHVtbiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcmVzdWx0IHNldCwKICAgICAgICAgKiBvciBpZiBubyByZXN1bHQgc2V0IGV4aXN0cy4KICAgICAgICAgKi8KICAgICAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAgICAgI1tBcnJheVNoYXBlKFsKICAgICAgICAgICAgIm5hbWUiID0+ICJzdHJpbmciLAogICAgICAgICAgICAibGVuIiA9PiAiaW50IiwKICAgICAgICAgICAgInByZWNpc2lvbiIgPT4gImludCIsCiAgICAgICAgICAgICJvY2k6ZGVjbF90eXBlIiA9PiAiaW50fHN0cmluZyIsCiAgICAgICAgICAgICJuYXRpdmVfdHlwZSIgPT4gInN0cmluZyIsCiAgICAgICAgICAgICJzY2FsZSIgPT4gImludCIsCiAgICAgICAgICAgICJmbGFncyIgPT4gImFycmF5IiwKICAgICAgICAgICAgInBkb190eXBlIiA9PiAiaW50IgogICAgICAgIF0pXQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2x1bW5NZXRhKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRjb2x1bW4pOiBhcnJheXxmYWxzZSB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjAsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAwLjIuMCk8YnIvPgogICAgICAgICAqIFNldCB0aGUgZGVmYXVsdCBmZXRjaCBtb2RlIGZvciB0aGlzIHN0YXRlbWVudAogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvc3RhdGVtZW50LnNldGZldGNobW9kZS5waHAKICAgICAgICAgKiBAcGFyYW0gaW50ICRtb2RlIDxwPgogICAgICAgICAqIFRoZSBmZXRjaCBtb2RlIG11c3QgYmUgb25lIG9mIHRoZSBQRE86OkZFVENIXyogY29uc3RhbnRzLgogICAgICAgICAqIDwvcD4KICAgICAgICAgKiBAcGFyYW0gbWl4ZWQgLi4uJGFyZ3MgPHA+IENvbnN0cnVjdG9yIGFyZ3VtZW50cy4gPC9wPgogICAgICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGZXRjaE1vZGUoJG1vZGUsIC4uLiRhcmdzKSB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjAsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAwLjIuMCk8YnIvPgogICAgICAgICAqIEFkdmFuY2VzIHRvIHRoZSBuZXh0IHJvd3NldCBpbiBhIG11bHRpLXJvd3NldCBzdGF0ZW1lbnQgaGFuZGxlCiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wZG9zdGF0ZW1lbnQubmV4dHJvd3NldC5waHAKICAgICAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAgICAgKi8KICAgICAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG5leHRSb3dzZXQoKTogYm9vbCB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjAsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAwLjkuMCk8YnIvPgogICAgICAgICAqIENsb3NlcyB0aGUgY3Vyc29yLCBlbmFibGluZyB0aGUgc3RhdGVtZW50IHRvIGJlIGV4ZWN1dGVkIGFnYWluLgogICAgICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvc3RhdGVtZW50LmNsb3NlY3Vyc29yLnBocAogICAgICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICAgICAqLwogICAgICAgICNbVGVudGF0aXZlVHlwZV0KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2VDdXJzb3IoKTogYm9vbCB7fQoKICAgICAgICAvKioKICAgICAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjAsIFBIUCA3LCBQRUNMIHBkbyAmZ3Q7PSAwLjkuMCk8YnIvPgogICAgICAgICAqIER1bXAgYW4gU1FMIHByZXBhcmVkIGNvbW1hbmQKICAgICAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bkb3N0YXRlbWVudC5kZWJ1Z2R1bXBwYXJhbXMucGhwCiAgICAgICAgICogQHJldHVybiBib29sfG51bGwgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgICAgICovCiAgICAgICAgI1tUZW50YXRpdmVUeXBlXQogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBkZWJ1Z0R1bXBQYXJhbXMoKTogP2Jvb2wge30KCiAgICAgICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIF9fd2FrZXVwKCkge30KCiAgICAgICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIF9fc2xlZXAoKSB7fQoKICAgICAgICAvKioKICAgICAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yCiAgICAgICAgICogQHNpbmNlIDguMAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBJdGVyYXRvciB7fQoKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gY29ubmVjdCgpIHt9CiAgICB9CgogICAgZmluYWwgY2xhc3MgUERPUm93CiAgICB7CiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0KICAgICAgICBwdWJsaWMgJHF1ZXJ5U3RyaW5nOwogICAgfQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4zLCBQSFAgNywgUEVDTCBwZG8gJmd0Oz0gMS4wLjMpPGJyLz4KICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBhdmFpbGFibGUgUERPIGRyaXZlcnMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGRvLmdldGF2YWlsYWJsZWRyaXZlcnMucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5IDxiPlBETzo6Z2V0QXZhaWxhYmxlRHJpdmVyczwvYj4gcmV0dXJucyBhbiBhcnJheSBvZiBQRE8gZHJpdmVyIG5hbWVzLiBJZgogICAgICogbm8gZHJpdmVycyBhcmUgYXZhaWxhYmxlLCBpdCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LgogICAgICovCiAgICAjW1B1cmVdCiAgICBmdW5jdGlvbiBwZG9fZHJpdmVycygpOiBhcnJheSB7fQoKICAgIGZ1bmN0aW9uIGNvbmZpcm1fcGRvX2libV9jb21waWxlZCgpIHt9Cn0KCm5hbWVzcGFjZSBQZG8gewogICAgdXNlIFBETzsKCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjQKICAgICAqLwogICAgY2xhc3MgU3FsaXRlIGV4dGVuZHMgUERPIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC40CiAgICAgKi8KICAgIGNsYXNzIE15c3FsIGV4dGVuZHMgUERPIHt9Cn0KPD9waHAKCi8vIFN0YXJ0IG9mIFNQTCB2LjAuMgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcVGVudGF0aXZlVHlwZTsKCi8qKgogKiBFeGNlcHRpb24gdGhhdCByZXByZXNlbnRzIGVycm9yIGluIHRoZSBwcm9ncmFtIGxvZ2ljLiBUaGlzIGtpbmQgb2YKICogZXhjZXB0aW9uIHNob3VsZCBsZWFkIGRpcmVjdGx5IHRvIGEgZml4IGluIHlvdXIgY29kZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5sb2dpY2V4Y2VwdGlvbi5waHAKICovCmNsYXNzIExvZ2ljRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CgovKioKICogRXhjZXB0aW9uIHRocm93biBpZiBhIGNhbGxiYWNrIHJlZmVycyB0byBhbiB1bmRlZmluZWQgZnVuY3Rpb24gb3IgaWYgc29tZQogKiBhcmd1bWVudHMgYXJlIG1pc3NpbmcuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuYmFkZnVuY3Rpb25jYWxsZXhjZXB0aW9uLnBocAogKi8KY2xhc3MgQmFkRnVuY3Rpb25DYWxsRXhjZXB0aW9uIGV4dGVuZHMgTG9naWNFeGNlcHRpb24ge30KCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIGlmIGEgY2FsbGJhY2sgcmVmZXJzIHRvIGFuIHVuZGVmaW5lZCBtZXRob2Qgb3IgaWYgc29tZQogKiBhcmd1bWVudHMgYXJlIG1pc3NpbmcuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuYmFkbWV0aG9kY2FsbGV4Y2VwdGlvbi5waHAKICovCmNsYXNzIEJhZE1ldGhvZENhbGxFeGNlcHRpb24gZXh0ZW5kcyBCYWRGdW5jdGlvbkNhbGxFeGNlcHRpb24ge30KCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIGlmIGEgdmFsdWUgZG9lcyBub3QgYWRoZXJlIHRvIGEgZGVmaW5lZCB2YWxpZCBkYXRhIGRvbWFpbi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21haW5leGNlcHRpb24ucGhwCiAqLwpjbGFzcyBEb21haW5FeGNlcHRpb24gZXh0ZW5kcyBMb2dpY0V4Y2VwdGlvbiB7fQoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gaWYgYW4gYXJndW1lbnQgaXMgbm90IG9mIHRoZSBleHBlY3RlZCB0eXBlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludmFsaWRhcmd1bWVudGV4Y2VwdGlvbi5waHAKICovCmNsYXNzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBleHRlbmRzIExvZ2ljRXhjZXB0aW9uIHt9CgovKioKICogRXhjZXB0aW9uIHRocm93biBpZiBhIGxlbmd0aCBpcyBpbnZhbGlkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmxlbmd0aGV4Y2VwdGlvbi5waHAKICovCmNsYXNzIExlbmd0aEV4Y2VwdGlvbiBleHRlbmRzIExvZ2ljRXhjZXB0aW9uIHt9CgovKioKICogRXhjZXB0aW9uIHRocm93biB3aGVuIGFuIGlsbGVnYWwgaW5kZXggd2FzIHJlcXVlc3RlZC4gVGhpcyByZXByZXNlbnRzCiAqIGVycm9ycyB0aGF0IHNob3VsZCBiZSBkZXRlY3RlZCBhdCBjb21waWxlIHRpbWUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3Mub3V0b2ZyYW5nZWV4Y2VwdGlvbi5waHAKICovCmNsYXNzIE91dE9mUmFuZ2VFeGNlcHRpb24gZXh0ZW5kcyBMb2dpY0V4Y2VwdGlvbiB7fQoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gaWYgYW4gZXJyb3Igd2hpY2ggY2FuIG9ubHkgYmUgZm91bmQgb24gcnVudGltZSBvY2N1cnMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MucnVudGltZWV4Y2VwdGlvbi5waHAKICovCmNsYXNzIFJ1bnRpbWVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIGlmIGEgdmFsdWUgaXMgbm90IGEgdmFsaWQga2V5LiBUaGlzIHJlcHJlc2VudHMgZXJyb3JzCiAqIHRoYXQgY2Fubm90IGJlIGRldGVjdGVkIGF0IGNvbXBpbGUgdGltZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5vdXRvZmJvdW5kc2V4Y2VwdGlvbi5waHAKICovCmNsYXNzIE91dE9mQm91bmRzRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7fQoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhZGRpbmcgYW4gZWxlbWVudCB0byBhIGZ1bGwgY29udGFpbmVyLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm92ZXJmbG93ZXhjZXB0aW9uLnBocAogKi8KY2xhc3MgT3ZlcmZsb3dFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHt9CgovKioKICogRXhjZXB0aW9uIHRocm93biB0byBpbmRpY2F0ZSByYW5nZSBlcnJvcnMgZHVyaW5nIHByb2dyYW0gZXhlY3V0aW9uLgogKiBOb3JtYWxseSB0aGlzIG1lYW5zIHRoZXJlIHdhcyBhbiBhcml0aG1ldGljIGVycm9yIG90aGVyIHRoYW4KICogdW5kZXIvb3ZlcmZsb3cuIFRoaXMgaXMgdGhlIHJ1bnRpbWUgdmVyc2lvbiBvZgogKiA8Yj5Eb21haW5FeGNlcHRpb248L2I+LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnJhbmdlZXhjZXB0aW9uLnBocAogKi8KY2xhc3MgUmFuZ2VFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHt9CgovKioKICogRXhjZXB0aW9uIHRocm93biB3aGVuIHBlcmZvcm1pbmcgYW4gaW52YWxpZCBvcGVyYXRpb24gb24gYW4gZW1wdHkgY29udGFpbmVyLCBzdWNoIGFzIHJlbW92aW5nIGFuIGVsZW1lbnQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MudW5kZXJmbG93ZXhjZXB0aW9uLnBocAogKi8KY2xhc3MgVW5kZXJmbG93RXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7fQoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gaWYgYSB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB3aXRoIGEgc2V0IG9mIHZhbHVlcy4gVHlwaWNhbGx5CiAqIHRoaXMgaGFwcGVucyB3aGVuIGEgZnVuY3Rpb24gY2FsbHMgYW5vdGhlciBmdW5jdGlvbiBhbmQgZXhwZWN0cyB0aGUgcmV0dXJuCiAqIHZhbHVlIHRvIGJlIG9mIGEgY2VydGFpbiB0eXBlIG9yIHZhbHVlIG5vdCBpbmNsdWRpbmcgYXJpdGhtZXRpYyBvciBidWZmZXIKICogcmVsYXRlZCBlcnJvcnMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MudW5leHBlY3RlZHZhbHVlZXhjZXB0aW9uLnBocAogKi8KY2xhc3MgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7fQoKLyoqCiAqIFRoZSBFbXB0eUl0ZXJhdG9yIGNsYXNzIGZvciBhbiBlbXB0eSBpdGVyYXRvci4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZW1wdHlpdGVyYXRvci5waHAKICovCmNsYXNzIEVtcHR5SXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcgp7CiAgICAvKioKICAgICAqIFJldHVybiB0aGUgY3VycmVudCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2l0ZXJhdG9yLmN1cnJlbnQucGhwCiAgICAgKiBAcmV0dXJuIG1peGVkIENhbiByZXR1cm4gYW55IHR5cGUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCk6IG5ldmVyIHt9CgogICAgLyoqCiAgICAgKiBNb3ZlIGZvcndhcmQgdG8gbmV4dCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2l0ZXJhdG9yLm5leHQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQgQW55IHJldHVybmVkIHZhbHVlIGlzIGlnbm9yZWQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUga2V5IG9mIHRoZSBjdXJyZW50IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaXRlcmF0b3Iua2V5LnBocAogICAgICogQHJldHVybiBtaXhlZCBUaGUga2V5IG9mIHRoZSBjdXJyZW50IGVsZW1lbnQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKTogbmV2ZXIge30KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiBjdXJyZW50IHBvc2l0aW9uIGlzIHZhbGlkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2l0ZXJhdG9yLnZhbGlkLnBocAogICAgICogQHJldHVybiBib29sIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBjYXN0ZWQgdG8gYm9vbGVhbiBhbmQgdGhlbiBldmFsdWF0ZWQuCiAgICAgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjInID0+ICdmYWxzZSddLCBkZWZhdWx0OiAnYm9vbCcpXQogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkKCkge30KCiAgICAvKioKICAgICAqIFJld2luZCB0aGUgSXRlcmF0b3IgdG8gdGhlIGZpcnN0IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaXRlcmF0b3IucmV3aW5kLnBocAogICAgICogQHJldHVybiB2b2lkIEFueSByZXR1cm5lZCB2YWx1ZSBpcyBpZ25vcmVkLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQge30KfQoKLyoqCiAqIEZpbHRlcmVkIGl0ZXJhdG9yIHVzaW5nIHRoZSBjYWxsYmFjayB0byBkZXRlcm1pbmUgd2hpY2ggaXRlbXMgYXJlIGFjY2VwdGVkIG9yIHJlamVjdGVkLgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5jYWxsYmFja2ZpbHRlcml0ZXJhdG9yLnBocAogKiBAc2luY2UgNS40CiAqLwpjbGFzcyBDYWxsYmFja0ZpbHRlckl0ZXJhdG9yIGV4dGVuZHMgRmlsdGVySXRlcmF0b3IKewogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgZmlsdGVyZWQgaXRlcmF0b3IgdXNpbmcgdGhlIGNhbGxiYWNrIHRvIGRldGVybWluZSB3aGljaCBpdGVtcyBhcmUgYWNjZXB0ZWQgb3IgcmVqZWN0ZWQuCiAgICAgKiBAcGFyYW0gSXRlcmF0b3IgJGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBiZSBmaWx0ZXJlZC4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgVGhlIGNhbGxiYWNrLCB3aGljaCBzaG91bGQgcmV0dXJuIFRSVUUgdG8gYWNjZXB0IHRoZSBjdXJyZW50IGl0ZW0gb3IgRkFMU0Ugb3RoZXJ3aXNlLgogICAgICogTWF5IGJlIGFueSB2YWxpZCBjYWxsYWJsZSB2YWx1ZS4KICAgICAqIFRoZSBjYWxsYmFjayBzaG91bGQgYWNjZXB0IHVwIHRvIHRocmVlIGFyZ3VtZW50czogdGhlIGN1cnJlbnQgaXRlbSwgdGhlIGN1cnJlbnQga2V5IGFuZCB0aGUgaXRlcmF0b3IsIHJlc3BlY3RpdmVseS4KICAgICAqIDxjb2RlPiBmdW5jdGlvbiBteV9jYWxsYmFjaygkY3VycmVudCwgJGtleSwgJGl0ZXJhdG9yKSA8L2NvZGU+CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jYWxsYmFja2ZpbHRlcml0ZXJhdG9yLmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEl0ZXJhdG9yICRpdGVyYXRvciwgY2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgY2FsbHMgdGhlIGNhbGxiYWNrIHdpdGggdGhlIGN1cnJlbnQgdmFsdWUsIGN1cnJlbnQga2V5IGFuZCB0aGUgaW5uZXIgaXRlcmF0b3IuCiAgICAgKiBUaGUgY2FsbGJhY2sgaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIFRSVUUgaWYgdGhlIGN1cnJlbnQgaXRlbSBpcyB0byBiZSBhY2NlcHRlZCwgb3IgRkFMU0Ugb3RoZXJ3aXNlLgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2FsbGJhY2tmaWx0ZXJpdGVyYXRvci5hY2NlcHQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGFjY2VwdGFibGUsIG90aGVyd2lzZSBmYWxzZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGFjY2VwdCgpOiBib29sIHt9Cn0KCi8qKgogKiAoUEhQIDUgPj0gNS40LjApPGJyPgogKiBSZWN1cnNpdmVDYWxsYmFja0ZpbHRlckl0ZXJhdG9yIGZyb20gYSBSZWN1cnNpdmVJdGVyYXRvcgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5yZWN1cnNpdmVjYWxsYmFja2ZpbHRlcml0ZXJhdG9yLnBocAogKiBAc2luY2UgNS40CiAqLwpjbGFzcyBSZWN1cnNpdmVDYWxsYmFja0ZpbHRlckl0ZXJhdG9yIGV4dGVuZHMgQ2FsbGJhY2tGaWx0ZXJJdGVyYXRvciBpbXBsZW1lbnRzIFJlY3Vyc2l2ZUl0ZXJhdG9yCnsKICAgIC8qKgogICAgICogQ3JlYXRlIGEgUmVjdXJzaXZlQ2FsbGJhY2tGaWx0ZXJJdGVyYXRvciBmcm9tIGEgUmVjdXJzaXZlSXRlcmF0b3IKICAgICAqIEBwYXJhbSBSZWN1cnNpdmVJdGVyYXRvciAkaXRlcmF0b3IgVGhlIHJlY3Vyc2l2ZSBpdGVyYXRvciB0byBiZSBmaWx0ZXJlZC4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgVGhlIGNhbGxiYWNrLCB3aGljaCBzaG91bGQgcmV0dXJuIFRSVUUgdG8gYWNjZXB0IHRoZSBjdXJyZW50IGl0ZW0gb3IgRkFMU0Ugb3RoZXJ3aXNlLiBTZWUgRXhhbXBsZXMuCiAgICAgKiBNYXkgYmUgYW55IHZhbGlkIGNhbGxhYmxlIHZhbHVlLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlY2FsbGJhY2tmaWx0ZXJpdGVyYXRvci5jb25zdHJ1Y3QucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBSZWN1cnNpdmVJdGVyYXRvciAkaXRlcmF0b3IsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnY2FsbGFibGUnXSwgZGVmYXVsdDogJycpXSAkY2FsbGJhY2sKICAgICkge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGlubmVyIGl0ZXJhdG9yJ3MgY3VycmVudCBlbGVtZW50IGhhcyBjaGlsZHJlbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmVpdGVyYXRvci5oYXNjaGlsZHJlbi5waHAKICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgaWYgdGhlIGN1cnJlbnQgZWxlbWVudCBoYXMgY2hpbGRyZW4sIEZBTFNFIG90aGVyd2lzZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGhhc0NoaWxkcmVuKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaXRlcmF0b3IgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlY2FsbGJhY2tmaWx0ZXJpdGVyYXRvci5oYXNjaGlsZHJlbi5waHAKICAgICAqIEByZXR1cm4gUmVjdXJzaXZlQ2FsbGJhY2tGaWx0ZXJJdGVyYXRvciBjb250YWluaW5nIHRoZSBjaGlsZHJlbi4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENoaWxkcmVuKCk6IFJlY3Vyc2l2ZUNhbGxiYWNrRmlsdGVySXRlcmF0b3Ige30KfQoKLyoqCiAqIENsYXNzZXMgaW1wbGVtZW50aW5nIDxiPlJlY3Vyc2l2ZUl0ZXJhdG9yPC9iPiBjYW4gYmUgdXNlZCB0byBpdGVyYXRlCiAqIG92ZXIgaXRlcmF0b3JzIHJlY3Vyc2l2ZWx5LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnJlY3Vyc2l2ZWl0ZXJhdG9yLnBocAogKi8KaW50ZXJmYWNlIFJlY3Vyc2l2ZUl0ZXJhdG9yIGV4dGVuZHMgSXRlcmF0b3IKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIGlmIGFuIGl0ZXJhdG9yIGNhbiBiZSBjcmVhdGVkIGZvciB0aGUgY3VycmVudCBlbnRyeS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlaXRlcmF0b3IuaGFzY2hpbGRyZW4ucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgY3VycmVudCBlbnRyeSBjYW4gYmUgaXRlcmF0ZWQgb3Zlciwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNDaGlsZHJlbigpOiBib29sOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWl0ZXJhdG9yLmdldGNoaWxkcmVuLnBocAogICAgICogQHJldHVybiBSZWN1cnNpdmVJdGVyYXRvcnxudWxsIEFuIGl0ZXJhdG9yIGZvciB0aGUgY3VycmVudCBlbnRyeS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENoaWxkcmVuKCk6ID9SZWN1cnNpdmVJdGVyYXRvcjsKfQoKLyoqCiAqIENhbiBiZSB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCByZWN1cnNpdmUgaXRlcmF0b3JzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnJlY3Vyc2l2ZWl0ZXJhdG9yaXRlcmF0b3IucGhwCiAqLwpjbGFzcyBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yIGltcGxlbWVudHMgT3V0ZXJJdGVyYXRvcgp7CiAgICAvKioKICAgICAqIFRoZSBkZWZhdWx0LiBMaXN0cyBvbmx5IGxlYXZlcyBpbiBpdGVyYXRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBMRUFWRVNfT05MWSA9IDA7CgogICAgLyoqCiAgICAgKiBMaXN0cyBsZWF2ZXMgYW5kIHBhcmVudHMgaW4gaXRlcmF0aW9uIHdpdGggcGFyZW50cyBjb21pbmcgZmlyc3QuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTRUxGX0ZJUlNUID0gMTsKCiAgICAvKioKICAgICAqIExpc3RzIGxlYXZlcyBhbmQgcGFyZW50cyBpbiBpdGVyYXRpb24gd2l0aCBsZWF2ZXMgY29taW5nIGZpcnN0LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ0hJTERfRklSU1QgPSAyOwoKICAgIC8qKgogICAgICogU3BlY2lhbCBmbGFnOiBJZ25vcmUgZXhjZXB0aW9ucyB0aHJvd24gaW4gYWNjZXNzaW5nIGNoaWxkcmVuLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ0FUQ0hfR0VUX0NISUxEID0gMTY7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3QgYSBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWl0ZXJhdG9yaXRlcmF0b3IuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIFRyYXZlcnNhYmxlICRpdGVyYXRvcgogICAgICogQHBhcmFtIGludCAkbW9kZSBbb3B0aW9uYWxdIFRoZSBvcGVyYXRpb24gbW9kZS4gU2VlIGNsYXNzIGNvbnN0YW50cyBmb3IgZGV0YWlscy4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gQSBiaXRtYXNrIG9mIHNwZWNpYWwgZmxhZ3MuIFNlZSBjbGFzcyBjb25zdGFudHMgZm9yIGRldGFpbHMuCiAgICAgKiBAc2luY2UgNS4xLjMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFRyYXZlcnNhYmxlICRpdGVyYXRvciwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbW9kZSA9IHNlbGY6OkxFQVZFU19PTkxZLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IDAKICAgICkge30KCiAgICAvKioKICAgICAqIFJld2luZCB0aGUgaXRlcmF0b3IgdG8gdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHRvcCBsZXZlbCBpbm5lciBpdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmVpdGVyYXRvcml0ZXJhdG9yLnJld2luZC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgdmFsaWQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlaXRlcmF0b3JpdGVyYXRvci52YWxpZC5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIHZhbGlkLCBvdGhlcndpc2UgZmFsc2UKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEFjY2VzcyB0aGUgY3VycmVudCBrZXkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlaXRlcmF0b3JpdGVyYXRvci5rZXkucGhwCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgZWxlbWVudC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogQWNjZXNzIHRoZSBjdXJyZW50IGVsZW1lbnQgdmFsdWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlaXRlcmF0b3JpdGVyYXRvci5jdXJyZW50LnBocAogICAgICogQHJldHVybiBtaXhlZCBUaGUgY3VycmVudCBlbGVtZW50cyB2YWx1ZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIE1vdmUgZm9yd2FyZCB0byB0aGUgbmV4dCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWl0ZXJhdG9yaXRlcmF0b3IubmV4dC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGN1cnJlbnQgZGVwdGggb2YgdGhlIHJlY3Vyc2l2ZSBpdGVyYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlaXRlcmF0b3JpdGVyYXRvci5nZXRkZXB0aC5waHAKICAgICAqIEByZXR1cm4gaW50IFRoZSBjdXJyZW50IGRlcHRoIG9mIHRoZSByZWN1cnNpdmUgaXRlcmF0aW9uLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGVwdGgoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBUaGUgY3VycmVudCBhY3RpdmUgc3ViIGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWl0ZXJhdG9yaXRlcmF0b3IuZ2V0c3ViaXRlcmF0b3IucGhwCiAgICAgKiBAcGFyYW0gaW50ICRsZXZlbCBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIFJlY3Vyc2l2ZUl0ZXJhdG9yfG51bGwgVGhlIGN1cnJlbnQgYWN0aXZlIHN1YiBpdGVyYXRvci4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFN1Ykl0ZXJhdG9yKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGxldmVsKTogP1JlY3Vyc2l2ZUl0ZXJhdG9yIHt9CgogICAgLyoqCiAgICAgKiBHZXQgaW5uZXIgaXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlaXRlcmF0b3JpdGVyYXRvci5nZXRpbm5lcml0ZXJhdG9yLnBocAogICAgICogQHJldHVybiBSZWN1cnNpdmVJdGVyYXRvciBUaGUgY3VycmVudCBhY3RpdmUgc3ViIGl0ZXJhdG9yLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW5uZXJJdGVyYXRvcigpOiBSZWN1cnNpdmVJdGVyYXRvciB7fQoKICAgIC8qKgogICAgICogQmVnaW4gSXRlcmF0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWl0ZXJhdG9yaXRlcmF0b3IuYmVnaW5pdGVyYXRpb24ucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGJlZ2luSXRlcmF0aW9uKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEVuZCBJdGVyYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlaXRlcmF0b3JpdGVyYXRvci5lbmRpdGVyYXRpb24ucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGVuZEl0ZXJhdGlvbigpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBIYXMgY2hpbGRyZW4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlaXRlcmF0b3JpdGVyYXRvci5jYWxsaGFzY2hpbGRyZW4ucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgZWxlbWVudCBoYXMgY2hpbGRyZW4sIG90aGVyd2lzZSBmYWxzZQogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FsbEhhc0NoaWxkcmVuKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEdldCBjaGlsZHJlbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmVpdGVyYXRvcml0ZXJhdG9yLmNhbGxnZXRjaGlsZHJlbi5waHAKICAgICAqIEByZXR1cm4gUmVjdXJzaXZlSXRlcmF0b3J8bnVsbCBBIDxiPlJlY3Vyc2l2ZUl0ZXJhdG9yPC9iPi4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGNhbGxHZXRDaGlsZHJlbigpOiA/UmVjdXJzaXZlSXRlcmF0b3Ige30KCiAgICAvKioKICAgICAqIEJlZ2luIGNoaWxkcmVuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWl0ZXJhdG9yaXRlcmF0b3IuYmVnaW5jaGlsZHJlbi5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gYmVnaW5DaGlsZHJlbigpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBFbmQgY2hpbGRyZW4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlaXRlcmF0b3JpdGVyYXRvci5lbmRjaGlsZHJlbi5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5kQ2hpbGRyZW4oKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogTmV4dCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWl0ZXJhdG9yaXRlcmF0b3IubmV4dGVsZW1lbnQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG5leHRFbGVtZW50KCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFNldCBtYXggZGVwdGgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlaXRlcmF0b3JpdGVyYXRvci5zZXRtYXhkZXB0aC5waHAKICAgICAqIEBwYXJhbSBpbnQgJG1heERlcHRoIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgbWF4aW11bSBhbGxvd2VkIGRlcHRoLiBEZWZhdWx0IC0xIGlzIHVzZWQKICAgICAqIGZvciBhbnkgZGVwdGguCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldE1heERlcHRoKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRtYXhEZXB0aCA9IC0xKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogR2V0IG1heCBkZXB0aAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmVpdGVyYXRvcml0ZXJhdG9yLmdldG1heGRlcHRoLnBocAogICAgICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIG1heGltdW0gYWNjZXB0ZWQgZGVwdGgsIG9yIGZhbHNlIGlmIGFueSBkZXB0aCBpcyBhbGxvd2VkLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWF4RGVwdGgoKTogaW50fGZhbHNlIHt9Cn0KCi8qKgogKiBDbGFzc2VzIGltcGxlbWVudGluZyA8Yj5PdXRlckl0ZXJhdG9yPC9iPiBjYW4gYmUgdXNlZCB0byBpdGVyYXRlCiAqIG92ZXIgaXRlcmF0b3JzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm91dGVyaXRlcmF0b3IucGhwCiAqLwppbnRlcmZhY2UgT3V0ZXJJdGVyYXRvciBleHRlbmRzIEl0ZXJhdG9yCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW5uZXIgaXRlcmF0b3IgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vdXRlcml0ZXJhdG9yLmdldGlubmVyaXRlcmF0b3IucGhwCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yfG51bGwgVGhlIGlubmVyIGl0ZXJhdG9yIGZvciB0aGUgY3VycmVudCBlbnRyeS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldElubmVySXRlcmF0b3IoKTogP0l0ZXJhdG9yOwp9CgovKioKICogVGhpcyBpdGVyYXRvciB3cmFwcGVyIGFsbG93cyB0aGUgY29udmVyc2lvbiBvZiBhbnl0aGluZyB0aGF0IGlzCiAqIFRyYXZlcnNhYmxlIGludG8gYW4gSXRlcmF0b3IuCiAqIEl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoYXQgbW9zdCBjbGFzc2VzIHRoYXQgZG8gbm90IGltcGxlbWVudAogKiBJdGVyYXRvcnMgaGF2ZSByZWFzb25zIGFzIG1vc3QgbGlrZWx5IHRoZXkgZG8gbm90IGFsbG93IHRoZSBmdWxsCiAqIEl0ZXJhdG9yIGZlYXR1cmUgc2V0LiBJZiBzbywgdGVjaG5pcXVlcyBzaG91bGQgYmUgcHJvdmlkZWQgdG8gcHJldmVudAogKiBtaXN1c2UsIG90aGVyd2lzZSBleHBlY3QgZXhjZXB0aW9ucyBvciBmYXRhbCBlcnJvcnMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaXRlcmF0b3JpdGVyYXRvci5waHAKICovCmNsYXNzIEl0ZXJhdG9ySXRlcmF0b3IgaW1wbGVtZW50cyBPdXRlckl0ZXJhdG9yCnsKICAgIC8qKgogICAgICogQ3JlYXRlIGFuIGl0ZXJhdG9yIGZyb20gYW55dGhpbmcgdGhhdCBpcyB0cmF2ZXJzYWJsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pdGVyYXRvcml0ZXJhdG9yLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBUcmF2ZXJzYWJsZSAkaXRlcmF0b3IKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkY2xhc3MgW29wdGlvbmFsXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoVHJhdmVyc2FibGUgJGl0ZXJhdG9yLCAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gP3N0cmluZyAkY2xhc3MgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBpbm5lciBpdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pdGVyYXRvcml0ZXJhdG9yLmdldGlubmVyaXRlcmF0b3IucGhwCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yfG51bGwgVGhlIGlubmVyIGl0ZXJhdG9yIGFzIHBhc3NlZCB0byBJdGVyYXRvckl0ZXJhdG9yOjpfX2NvbnN0cnVjdC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldElubmVySXRlcmF0b3IoKTogP0l0ZXJhdG9yIHt9CgogICAgLyoqCiAgICAgKiBSZXdpbmQgdG8gdGhlIGZpcnN0IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaXRlcmF0b3JpdGVyYXRvci5yZXdpbmQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIGl0ZXJhdG9yIGlzIHZhbGlkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2l0ZXJhdG9yaXRlcmF0b3IudmFsaWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgaXRlcmF0b3IgaXMgdmFsaWQsIG90aGVyd2lzZSBmYWxzZQogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pdGVyYXRvcml0ZXJhdG9yLmtleS5waHAKICAgICAqIEByZXR1cm4gbWl4ZWQgVGhlIGtleSBvZiB0aGUgY3VycmVudCBlbGVtZW50LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaXRlcmF0b3JpdGVyYXRvci5jdXJyZW50LnBocAogICAgICogQHJldHVybiBtaXhlZCBUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEZvcndhcmQgdG8gdGhlIG5leHQgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pdGVyYXRvcml0ZXJhdG9yLm5leHQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7fQp9CgovKioKICogVGhpcyBhYnN0cmFjdCBpdGVyYXRvciBmaWx0ZXJzIG91dCB1bndhbnRlZCB2YWx1ZXMuIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGV4dGVuZGVkIHRvCiAqIGltcGxlbWVudCBjdXN0b20gaXRlcmF0b3IgZmlsdGVycy4gVGhlIDxiPkZpbHRlckl0ZXJhdG9yOjphY2NlcHQ8L2I+CiAqIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHN1YmNsYXNzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmZpbHRlcml0ZXJhdG9yLnBocAogKi8KYWJzdHJhY3QgY2xhc3MgRmlsdGVySXRlcmF0b3IgZXh0ZW5kcyBJdGVyYXRvckl0ZXJhdG9yCnsKICAgIC8qKgogICAgICogQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBlbGVtZW50IG9mIHRoZSBpdGVyYXRvciBpcyBhY2NlcHRhYmxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ZpbHRlcml0ZXJhdG9yLmFjY2VwdC5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGZhbHNlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3QgYSBmaWx0ZXJJdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9maWx0ZXJpdGVyYXRvci5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gSXRlcmF0b3IgJGl0ZXJhdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChJdGVyYXRvciAkaXRlcmF0b3IpIHt9CgogICAgLyoqCiAgICAgKiBSZXdpbmQgdGhlIGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ZpbHRlcml0ZXJhdG9yLnJld2luZC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyB2YWxpZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9maWx0ZXJpdGVyYXRvci52YWxpZC5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgdmFsaWQsIG90aGVyd2lzZSBmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjdXJyZW50IGtleQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9maWx0ZXJpdGVyYXRvci5rZXkucGhwCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgZWxlbWVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGN1cnJlbnQgZWxlbWVudCB2YWx1ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9maWx0ZXJpdGVyYXRvci5jdXJyZW50LnBocAogICAgICogQHJldHVybiBtaXhlZCBUaGUgY3VycmVudCBlbGVtZW50IHZhbHVlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpIHt9CgogICAgLyoqCiAgICAgKiBNb3ZlIHRoZSBpdGVyYXRvciBmb3J3YXJkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ZpbHRlcml0ZXJhdG9yLm5leHQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBpbm5lciBpdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9maWx0ZXJpdGVyYXRvci5nZXRpbm5lcml0ZXJhdG9yLnBocAogICAgICogQHJldHVybiBJdGVyYXRvciBUaGUgaW5uZXIgaXRlcmF0b3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbm5lckl0ZXJhdG9yKCkge30KfQoKLyoqCiAqIFRoaXMgYWJzdHJhY3QgaXRlcmF0b3IgZmlsdGVycyBvdXQgdW53YW50ZWQgdmFsdWVzIGZvciBhIDxiPlJlY3Vyc2l2ZUl0ZXJhdG9yPC9iPi4KICogVGhpcyBjbGFzcyBzaG91bGQgYmUgZXh0ZW5kZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBmaWx0ZXJzLgogKiBUaGUgPGI+UmVjdXJzaXZlRmlsdGVySXRlcmF0b3I6OmFjY2VwdDwvYj4gbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgc3ViY2xhc3MuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MucmVjdXJzaXZlZmlsdGVyaXRlcmF0b3IucGhwCiAqLwphYnN0cmFjdCBjbGFzcyBSZWN1cnNpdmVGaWx0ZXJJdGVyYXRvciBleHRlbmRzIEZpbHRlckl0ZXJhdG9yIGltcGxlbWVudHMgUmVjdXJzaXZlSXRlcmF0b3IKewogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBSZWN1cnNpdmVGaWx0ZXJJdGVyYXRvciBmcm9tIGEgUmVjdXJzaXZlSXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlZmlsdGVyaXRlcmF0b3IuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIFJlY3Vyc2l2ZUl0ZXJhdG9yICRpdGVyYXRvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUmVjdXJzaXZlSXRlcmF0b3IgJGl0ZXJhdG9yKSB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgd2hldGhlciB0aGUgaW5uZXIgaXRlcmF0b3IncyBjdXJyZW50IGVsZW1lbnQgaGFzIGNoaWxkcmVuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWZpbHRlcml0ZXJhdG9yLmhhc2NoaWxkcmVuLnBocAogICAgICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIGlubmVyIGl0ZXJhdG9yIGhhcyBjaGlsZHJlbiwgb3RoZXJ3aXNlIGZhbHNlCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNDaGlsZHJlbigpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGlubmVyIGl0ZXJhdG9yJ3MgY2hpbGRyZW4gY29udGFpbmVkIGluIGEgUmVjdXJzaXZlRmlsdGVySXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlZmlsdGVyaXRlcmF0b3IuZ2V0Y2hpbGRyZW4ucGhwCiAgICAgKiBAcmV0dXJuIFJlY3Vyc2l2ZUZpbHRlckl0ZXJhdG9yfG51bGwgY29udGFpbmluZyB0aGUgaW5uZXIgaXRlcmF0b3IncyBjaGlsZHJlbi4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENoaWxkcmVuKCk6ID9SZWN1cnNpdmVGaWx0ZXJJdGVyYXRvciB7fQp9CgovKioKICogVGhpcyBleHRlbmRlZCBGaWx0ZXJJdGVyYXRvciBhbGxvd3MgYSByZWN1cnNpdmUgaXRlcmF0aW9uIHVzaW5nIFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IgdGhhdCBvbmx5IHNob3dzIHRob3NlIGVsZW1lbnRzIHdoaWNoIGhhdmUgY2hpbGRyZW4uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MucGFyZW50aXRlcmF0b3IucGhwCiAqLwpjbGFzcyBQYXJlbnRJdGVyYXRvciBleHRlbmRzIFJlY3Vyc2l2ZUZpbHRlckl0ZXJhdG9yCnsKICAgIC8qKgogICAgICogRGV0ZXJtaW5lcyBhY2NlcHRhYmlsaXR5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmVudGl0ZXJhdG9yLmFjY2VwdC5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGZhbHNlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYSBQYXJlbnRJdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJlbnRpdGVyYXRvci5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gUmVjdXJzaXZlSXRlcmF0b3IgJGl0ZXJhdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChSZWN1cnNpdmVJdGVyYXRvciAkaXRlcmF0b3IpIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBpbm5lciBpdGVyYXRvcidzIGN1cnJlbnQgZWxlbWVudCBoYXMgY2hpbGRyZW4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlZmlsdGVyaXRlcmF0b3IuaGFzY2hpbGRyZW4ucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgaW5uZXIgaXRlcmF0b3IgaGFzIGNoaWxkcmVuLCBvdGhlcndpc2UgZmFsc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc0NoaWxkcmVuKCkge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgaW5uZXIgaXRlcmF0b3IncyBjaGlsZHJlbiBjb250YWluZWQgaW4gYSBSZWN1cnNpdmVGaWx0ZXJJdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmVmaWx0ZXJpdGVyYXRvci5nZXRjaGlsZHJlbi5waHAKICAgICAqIEByZXR1cm4gUGFyZW50SXRlcmF0b3IgY29udGFpbmluZyB0aGUgaW5uZXIgaXRlcmF0b3IncyBjaGlsZHJlbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENoaWxkcmVuKCkge30KfQoKLyoqCiAqIFRoZSBTZWVrYWJsZSBpdGVyYXRvci4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5zZWVrYWJsZWl0ZXJhdG9yLnBocAogKi8KaW50ZXJmYWNlIFNlZWthYmxlSXRlcmF0b3IgZXh0ZW5kcyBJdGVyYXRvcgp7CiAgICAvKioKICAgICAqIFNlZWtzIHRvIGEgcG9zaXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc2Vla2FibGVpdGVyYXRvci5zZWVrLnBocAogICAgICogQHBhcmFtIGludCAkb2Zmc2V0IDxwPgogICAgICogVGhlIHBvc2l0aW9uIHRvIHNlZWsgdG8uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJG9mZnNldCk6IHZvaWQ7Cn0KCi8qKgogKiBUaGUgPGI+TGltaXRJdGVyYXRvcjwvYj4gY2xhc3MgYWxsb3dzIGl0ZXJhdGlvbiBvdmVyCiAqIGEgbGltaXRlZCBzdWJzZXQgb2YgaXRlbXMgaW4gYW4gPGI+SXRlcmF0b3I8L2I+LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmxpbWl0aXRlcmF0b3IucGhwCiAqLwpjbGFzcyBMaW1pdEl0ZXJhdG9yIGV4dGVuZHMgSXRlcmF0b3JJdGVyYXRvcgp7CiAgICAvKioKICAgICAqIENvbnN0cnVjdCBhIExpbWl0SXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGltaXRpdGVyYXRvci5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gSXRlcmF0b3IgJGl0ZXJhdG9yIFRoZSBpdGVyYXRvciB0byBsaW1pdC4KICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldCBbb3B0aW9uYWxdIFRoZSBvZmZzZXQgdG8gc3RhcnQgYXQuIE11c3QgYmUgemVybyBvciBncmVhdGVyLgogICAgICogQHBhcmFtIGludCAkbGltaXQgW29wdGlvbmFsXSBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGl0ZXJhdGUuIE11c3QgYmUgLTEgb3IgZ3JlYXRlci4gLTEsIHRoZSBkZWZhdWx0LCBtZWFucyBubyBsaW1pdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIEl0ZXJhdG9yICRpdGVyYXRvciwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkb2Zmc2V0ID0gMCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbGltaXQgPSAtMQogICAgKSB7fQoKICAgIC8qKgogICAgICogUmV3aW5kIHRoZSBpdGVyYXRvciB0byB0aGUgc3BlY2lmaWVkIHN0YXJ0aW5nIG9mZnNldAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9saW1pdGl0ZXJhdG9yLnJld2luZC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyB2YWxpZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9saW1pdGl0ZXJhdG9yLnZhbGlkLnBocAogICAgICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogR2V0IGN1cnJlbnQga2V5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpbWl0aXRlcmF0b3Iua2V5LnBocAogICAgICogQHJldHVybiBtaXhlZCBUaGUga2V5IG9mIHRoZSBjdXJyZW50IGVsZW1lbnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKSB7fQoKICAgIC8qKgogICAgICogR2V0IGN1cnJlbnQgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9saW1pdGl0ZXJhdG9yLmN1cnJlbnQucGhwCiAgICAgKiBAcmV0dXJuIG1peGVkIHRoZSBjdXJyZW50IGVsZW1lbnQgb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpIHt9CgogICAgLyoqCiAgICAgKiBNb3ZlIHRoZSBpdGVyYXRvciBmb3J3YXJkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpbWl0aXRlcmF0b3IubmV4dC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBTZWVrIHRvIHRoZSBnaXZlbiBwb3NpdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9saW1pdGl0ZXJhdG9yLnNlZWsucGhwCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgPHA+CiAgICAgKiBUaGUgcG9zaXRpb24gdG8gc2VlayB0by4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gaW50IHRoZSBvZmZzZXQgcG9zaXRpb24gYWZ0ZXIgc2Vla2luZy4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJG9mZnNldCk6IGludCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBjdXJyZW50IHBvc2l0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpbWl0aXRlcmF0b3IuZ2V0cG9zaXRpb24ucGhwCiAgICAgKiBAcmV0dXJuIGludCBUaGUgY3VycmVudCBwb3NpdGlvbi4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvc2l0aW9uKCk6IGludCB7fQoKICAgIC8qKgogICAgICogR2V0IGlubmVyIGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpbWl0aXRlcmF0b3IuZ2V0aW5uZXJpdGVyYXRvci5waHAKICAgICAqIEByZXR1cm4gSXRlcmF0b3IgVGhlIGlubmVyIGl0ZXJhdG9yIHBhc3NlZCB0byA8Yj5MaW1pdEl0ZXJhdG9yOjpfX2NvbnN0cnVjdDwvYj4uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbm5lckl0ZXJhdG9yKCkge30KfQoKLyoqCiAqIFRoaXMgb2JqZWN0IHN1cHBvcnRzIGNhY2hlZCBpdGVyYXRpb24gb3ZlciBhbm90aGVyIGl0ZXJhdG9yLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmNhY2hpbmdpdGVyYXRvci5waHAKICovCmNsYXNzIENhY2hpbmdJdGVyYXRvciBleHRlbmRzIEl0ZXJhdG9ySXRlcmF0b3IgaW1wbGVtZW50cyBBcnJheUFjY2VzcywgQ291bnRhYmxlLCBTdHJpbmdhYmxlCnsKICAgIC8qKgogICAgICogU3RyaW5nIGNvbnZlcnNpb24gZmxhZyAobXV0dWFsbHkgZXhjbHVzaXZlKTogVXNlcyB0aGUgY3VycmVudCBlbGVtZW50IGZvciB0aGUgaXRlcmF0b3IncyBzdHJpbmcgY29udmVyc2lvbi4KICAgICAqIFRoaXMgY29udmVydHMgdGhlIGN1cnJlbnQgZWxlbWVudCB0byBhIHN0cmluZyBvbmx5IG9uY2UsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBuZWVkZWQgb3Igbm90LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ0FMTF9UT1NUUklORyA9IDE7CgogICAgLyoqCiAgICAgKiBTdHJpbmcgY29udmVyc2lvbiBmbGFnIChtdXR1YWxseSBleGNsdXNpdmUpLiBVc2VzIHRoZSBjdXJyZW50IGtleSBmb3IgdGhlIGl0ZXJhdG9yJ3Mgc3RyaW5nIGNvbnZlcnNpb24uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUT1NUUklOR19VU0VfS0VZID0gMjsKCiAgICAvKioKICAgICAqIFN0cmluZyBjb252ZXJzaW9uIGZsYWcgKG11dHVhbGx5IGV4Y2x1c2l2ZSkuIFVzZXMgdGhlIGN1cnJlbnQgZWxlbWVudCBmb3IgdGhlIGl0ZXJhdG9yJ3Mgc3RyaW5nIGNvbnZlcnNpb24uCiAgICAgKiBUaGlzIGNvbnZlcnRzIHRoZSBjdXJyZW50IGVsZW1lbnQgdG8gYSBzdHJpbmcgb25seSB3aGVuIChhbmQgZXZlcnkgdGltZSkgaXQgaXMgbmVlZGVkLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVE9TVFJJTkdfVVNFX0NVUlJFTlQgPSA0OwoKICAgIC8qKgogICAgICogU3RyaW5nIGNvbnZlcnNpb24gZmxhZyAobXV0dWFsbHkgZXhjbHVzaXZlKS4gRm9yd2FyZHMgdGhlIHN0cmluZyBjb252ZXJzaW9uIHRvIHRoZSBpbm5lciBpdGVyYXRvci4KICAgICAqIFRoaXMgY29udmVydHMgdGhlIGlubmVyIGl0ZXJhdG9yIHRvIGEgc3RyaW5nIG9ubHkgb25jZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIG5lZWRlZCBvciBub3QuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUT1NUUklOR19VU0VfSU5ORVIgPSA4OwoKICAgIC8qKgogICAgICogSWdub3JlIGV4Y2VwdGlvbnMgdGhyb3duIGluIGFjY2Vzc2luZyBjaGlsZHJlbi4gT25seSB1c2VkIHdpdGgge0BzZWUgUmVjdXJzaXZlQ2FjaGluZ0l0ZXJhdG9yfS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENBVENIX0dFVF9DSElMRCA9IDE2OwoKICAgIC8qKgogICAgICogQ2FjaGUgYWxsIHJlYWQgZGF0YS4gVGhpcyBpcyBuZWVkZWQgdG8gdXNlIHtAc2VlIENhY2hpbmdJdGVyYXRvcjo6Z2V0Q2FjaGV9LCBhbmQgQXJyYXlBY2Nlc3MgYW5kIENvdW50YWJsZSBtZXRob2RzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRlVMTF9DQUNIRSA9IDI1NjsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYSBuZXcgQ2FjaGluZ0l0ZXJhdG9yLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jYWNoaW5naXRlcmF0b3IuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIEl0ZXJhdG9yICRpdGVyYXRvciBUaGUgaXRlcmF0b3IgdG8gY2FjaGUuCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIEEgYml0bWFzayBvZiBmbGFncy4gU2VlIENhY2hpbmdJdGVyYXRvciBjbGFzcyBjb25zdGFudHMgZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChJdGVyYXRvciAkaXRlcmF0b3IsICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IHNlbGY6OkNBTExfVE9TVFJJTkcpIHt9CgogICAgLyoqCiAgICAgKiBSZXdpbmQgdGhlIGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NhY2hpbmdpdGVyYXRvci5yZXdpbmQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgdmFsaWQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2FjaGluZ2l0ZXJhdG9yLnZhbGlkLnBocAogICAgICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBrZXkgZm9yIHRoZSBjdXJyZW50IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2FjaGluZ2l0ZXJhdG9yLmtleS5waHAKICAgICAqIEByZXR1cm4gbWl4ZWQgVGhlIGtleSBvZiB0aGUgY3VycmVudCBlbGVtZW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgY3VycmVudCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NhY2hpbmdpdGVyYXRvci5jdXJyZW50LnBocAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpIHt9CgogICAgLyoqCiAgICAgKiBNb3ZlIHRoZSBpdGVyYXRvciBmb3J3YXJkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NhY2hpbmdpdGVyYXRvci5uZXh0LnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGlubmVyIGl0ZXJhdG9yIGhhcyBhIHZhbGlkIG5leHQgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jYWNoaW5naXRlcmF0b3IuaGFzbmV4dC5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGhhc05leHQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIGJhc2VkIG9uIHRoZSBmbGFnIGJlaW5nIHVzZWQuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NhY2hpbmdpdGVyYXRvci50b3N0cmluZy5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIGJhc2VkIG9uIHRoZSBmbGFnIGJlaW5nIHVzZWQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW5uZXIgaXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2FjaGluZ2l0ZXJhdG9yLmdldGlubmVyaXRlcmF0b3IucGhwCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIEl0ZXJhdG9yIGludGVyZmFjZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElubmVySXRlcmF0b3IoKSB7fQoKICAgIC8qKgogICAgICogR2V0IGZsYWdzIHVzZWQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2FjaGluZ2l0ZXJhdG9yLmdldGZsYWdzLnBocAogICAgICogQHJldHVybiBpbnQgQml0bWFzayBvZiB0aGUgZmxhZ3MKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZsYWdzKCk6IGludCB7fQoKICAgIC8qKgogICAgICogVGhlIHNldEZsYWdzIHB1cnBvc2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2FjaGluZ2l0ZXJhdG9yLnNldGZsYWdzLnBocAogICAgICogQHBhcmFtIGludCAkZmxhZ3MgQml0bWFzayBvZiB0aGUgZmxhZ3MgdG8gc2V0LgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGbGFncygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBJbnRlcm5hbCBjYWNoZSBhcnJheSBpbmRleCB0byByZXRyaWV2ZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2FjaGluZ2l0ZXJhdG9yLm9mZnNldGdldC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gcmV0cmlldmUuCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKiBAdGhyb3dzIEJhZE1ldGhvZENhbGxFeGNlcHRpb24gd2hlbiB0aGUge0BzZWUgQ2FjaGluZ0l0ZXJhdG9yOjpGVUxMX0NBQ0hFfSBmbGFnIGlzIG5vdCBiZWluZyB1c2VkLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRrZXkpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogU2V0IGFuIGVsZW1lbnQgb24gdGhlIGludGVybmFsIGNhY2hlIGFycmF5LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jYWNoaW5naXRlcmF0b3Iub2Zmc2V0c2V0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byBiZSBzZXQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBUaGUgbmV3IHZhbHVlIGZvciB0aGUgPGk+aW5kZXg8L2k+LgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIEJhZE1ldGhvZENhbGxFeGNlcHRpb24gd2hlbiB0aGUge0BzZWUgQ2FjaGluZ0l0ZXJhdG9yOjpGVUxMX0NBQ0hFfSBmbGFnIGlzIG5vdCBiZWluZyB1c2VkLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRrZXksICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJHZhbHVlKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSB0aGUgaW50ZXJuYWwgY2FjaGUgYXJyYXkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NhY2hpbmdpdGVyYXRvci5vZmZzZXR1bnNldC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gYmUgdW5zZXQuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbiB3aGVuIHRoZSB7QHNlZSBDYWNoaW5nSXRlcmF0b3I6OkZVTExfQ0FDSEV9IGZsYWcgaXMgbm90IGJlaW5nIHVzZWQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCgka2V5KTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHdoZXRoZXIgYW4gZWxlbWVudCBhdCB0aGUgaW5kZXggZXhpc3RzIG9uIHRoZSBpbnRlcm5hbCBjYWNoZSBhcnJheS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2FjaGluZ2l0ZXJhdG9yLm9mZnNldGV4aXN0cy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaW5kZXggYmVpbmcgY2hlY2tlZC4KICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIGFuIGVudHJ5IHJlZmVyZW5jZWQgYnkgdGhlIG9mZnNldCBleGlzdHMsIGZhbHNlIG90aGVyd2lzZS4KICAgICAqIEB0aHJvd3MgQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbiB3aGVuIHRoZSB7QHNlZSBDYWNoaW5nSXRlcmF0b3I6OkZVTExfQ0FDSEV9IGZsYWcgaXMgbm90IGJlaW5nIHVzZWQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJGtleSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBjb250ZW50cyBvZiB0aGUgY2FjaGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2FjaGluZ2l0ZXJhdG9yLmdldGNhY2hlLnBocAogICAgICogQHJldHVybiBhcnJheSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjYWNoZSBpdGVtcy4KICAgICAqIEB0aHJvd3MgQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbiB3aGVuIHRoZSB7QHNlZSBDYWNoaW5nSXRlcmF0b3I6OkZVTExfQ0FDSEV9IGZsYWcgaXMgbm90IGJlaW5nIHVzZWQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDYWNoZSgpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2FjaGluZ2l0ZXJhdG9yLmNvdW50LnBocAogICAgICogQHJldHVybiBpbnQgVGhlIGNvdW50IG9mIHRoZSBlbGVtZW50cyBpdGVyYXRlZCBvdmVyLgogICAgICogQHRocm93cyBCYWRNZXRob2RDYWxsRXhjZXB0aW9uIHdoZW4gdGhlIHtAc2VlIENhY2hpbmdJdGVyYXRvcjo6RlVMTF9DQUNIRX0gZmxhZyBpcyBub3QgYmVpbmcgdXNlZC4KICAgICAqIEBzaW5jZSA1LjIuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50IHt9Cn0KCi8qKgogKiAuLi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5yZWN1cnNpdmVjYWNoaW5naXRlcmF0b3IucGhwCiAqLwpjbGFzcyBSZWN1cnNpdmVDYWNoaW5nSXRlcmF0b3IgZXh0ZW5kcyBDYWNoaW5nSXRlcmF0b3IgaW1wbGVtZW50cyBSZWN1cnNpdmVJdGVyYXRvcgp7CiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYSBuZXcgUmVjdXJzaXZlQ2FjaGluZ0l0ZXJhdG9yLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmVjYWNoaW5naXRlcmF0b3IuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIEl0ZXJhdG9yICRpdGVyYXRvciBUaGUgaXRlcmF0b3IgdG8gY2FjaGUuCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIEEgYml0bWFzayBvZiBmbGFncy4gU2VlIENhY2hpbmdJdGVyYXRvciBjbGFzcyBjb25zdGFudHMgZm9yIGRldGFpbHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChJdGVyYXRvciAkaXRlcmF0b3IsICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IENhY2hpbmdJdGVyYXRvcjo6Q0FMTF9UT1NUUklORykge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgZWxlbWVudCBvZiB0aGUgaW5uZXIgaXRlcmF0b3IgaGFzIGNoaWxkcmVuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWNhY2hpbmdpdGVyYXRvci5oYXNjaGlsZHJlbi5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBpbm5lciBpdGVyYXRvciBoYXMgY2hpbGRyZW4sIG90aGVyd2lzZSBmYWxzZQogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzQ2hpbGRyZW4oKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBpbm5lciBpdGVyYXRvcidzIGNoaWxkcmVuIGFzIGEgUmVjdXJzaXZlQ2FjaGluZ0l0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWNhY2hpbmdpdGVyYXRvci5nZXRjaGlsZHJlbi5waHAKICAgICAqIEByZXR1cm4gUmVjdXJzaXZlQ2FjaGluZ0l0ZXJhdG9yfG51bGwgVGhlIGlubmVyIGl0ZXJhdG9yJ3MgY2hpbGRyZW4sIGFzIGEgUmVjdXJzaXZlQ2FjaGluZ0l0ZXJhdG9yLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hpbGRyZW4oKTogP1JlY3Vyc2l2ZUNhY2hpbmdJdGVyYXRvciB7fQp9CgovKioKICogVGhpcyBpdGVyYXRvciBjYW5ub3QgYmUgcmV3aW5kZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3Mubm9yZXdpbmRpdGVyYXRvci5waHAKICovCmNsYXNzIE5vUmV3aW5kSXRlcmF0b3IgZXh0ZW5kcyBJdGVyYXRvckl0ZXJhdG9yCnsKICAgIC8qKgogICAgICogQ29uc3RydWN0IGEgTm9SZXdpbmRJdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ub3Jld2luZGl0ZXJhdG9yLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBJdGVyYXRvciAkaXRlcmF0b3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEl0ZXJhdG9yICRpdGVyYXRvcikge30KCiAgICAvKioKICAgICAqIFByZXZlbnRzIHRoZSByZXdpbmQgb3BlcmF0aW9uIG9uIHRoZSBpbm5lciBpdGVyYXRvci4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbm9yZXdpbmRpdGVyYXRvci5yZXdpbmQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBWYWxpZGF0ZXMgdGhlIGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL25vcmV3aW5kaXRlcmF0b3IudmFsaWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGN1cnJlbnQga2V5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL25vcmV3aW5kaXRlcmF0b3Iua2V5LnBocAogICAgICogQHJldHVybiBtaXhlZCBUaGUga2V5IG9mIHRoZSBjdXJyZW50IGVsZW1lbnQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudCB2YWx1ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ub3Jld2luZGl0ZXJhdG9yLmN1cnJlbnQucGhwCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoZSBjdXJyZW50IHZhbHVlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogRm9yd2FyZCB0byB0aGUgbmV4dCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL25vcmV3aW5kaXRlcmF0b3IubmV4dC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGlubmVyIGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL25vcmV3aW5kaXRlcmF0b3IuZ2V0aW5uZXJpdGVyYXRvci5waHAKICAgICAqIEByZXR1cm4gSXRlcmF0b3IgVGhlIGlubmVyIGl0ZXJhdG9yLCBhcyBwYXNzZWQgdG8gPGI+Tm9SZXdpbmRJdGVyYXRvcjo6X19jb25zdHJ1Y3Q8L2I+LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW5uZXJJdGVyYXRvcigpIHt9Cn0KCi8qKgogKiBBbiBJdGVyYXRvciB0aGF0IGl0ZXJhdGVzIG92ZXIgc2V2ZXJhbCBpdGVyYXRvcnMgb25lIGFmdGVyIHRoZSBvdGhlci4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5hcHBlbmRpdGVyYXRvci5waHAKICovCmNsYXNzIEFwcGVuZEl0ZXJhdG9yIGV4dGVuZHMgSXRlcmF0b3JJdGVyYXRvcgp7CiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYW4gQXBwZW5kSXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBwZW5kaXRlcmF0b3IuY29uc3RydWN0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQXBwZW5kcyBhbiBpdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcHBlbmRpdGVyYXRvci5hcHBlbmQucGhwCiAgICAgKiBAcGFyYW0gSXRlcmF0b3IgJGl0ZXJhdG9yIDxwPgogICAgICogVGhlIGl0ZXJhdG9yIHRvIGFwcGVuZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKEl0ZXJhdG9yICRpdGVyYXRvcik6IHZvaWQge30KCiAgICAvKioKICAgICAqIFJld2luZHMgdGhlIEl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwcGVuZGl0ZXJhdG9yLnJld2luZC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIENoZWNrcyB2YWxpZGl0eSBvZiB0aGUgY3VycmVudCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwcGVuZGl0ZXJhdG9yLnZhbGlkLnBocAogICAgICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgY3VycmVudCBrZXkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBwZW5kaXRlcmF0b3Iua2V5LnBocAogICAgICogQHJldHVybiBtaXhlZCBUaGUga2V5IG9mIHRoZSBjdXJyZW50IGVsZW1lbnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgY3VycmVudCB2YWx1ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcHBlbmRpdGVyYXRvci5jdXJyZW50LnBocAogICAgICogQHJldHVybiBtaXhlZCBUaGUgY3VycmVudCB2YWx1ZSBpZiBpdCBpcyB2YWxpZCBvciBudWxsIG90aGVyd2lzZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIE1vdmVzIHRvIHRoZSBuZXh0IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBwZW5kaXRlcmF0b3IubmV4dC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIGFuIGlubmVyIGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FwcGVuZGl0ZXJhdG9yLmdldGlubmVyaXRlcmF0b3IucGhwCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yIHRoZSBjdXJyZW50IGlubmVyIEl0ZXJhdG9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW5uZXJJdGVyYXRvcigpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIGFuIGluZGV4IG9mIGl0ZXJhdG9ycwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcHBlbmRpdGVyYXRvci5nZXRpdGVyYXRvcmluZGV4LnBocAogICAgICogQHJldHVybiBpbnR8bnVsbCBUaGUgaW5kZXggb2YgaXRlcmF0b3JzLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3JJbmRleCgpOiA/aW50IHt9CgogICAgLyoqCiAgICAgKiBUaGUgZ2V0QXJyYXlJdGVyYXRvciBtZXRob2QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXBwZW5kaXRlcmF0b3IuZ2V0YXJyYXlpdGVyYXRvci5waHAKICAgICAqIEByZXR1cm4gQXJyYXlJdGVyYXRvciBjb250YWluaW5nIHRoZSBhcHBlbmRlZCBpdGVyYXRvcnMuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBcnJheUl0ZXJhdG9yKCk6IEFycmF5SXRlcmF0b3Ige30KfQoKLyoqCiAqIFRoZSA8Yj5JbmZpbml0ZUl0ZXJhdG9yPC9iPiBhbGxvd3Mgb25lIHRvCiAqIGluZmluaXRlbHkgaXRlcmF0ZSBvdmVyIGFuIGl0ZXJhdG9yIHdpdGhvdXQgaGF2aW5nIHRvIG1hbnVhbGx5CiAqIHJld2luZCB0aGUgaXRlcmF0b3IgdXBvbiByZWFjaGluZyBpdHMgZW5kLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmluZmluaXRlaXRlcmF0b3IucGhwCiAqLwpjbGFzcyBJbmZpbml0ZUl0ZXJhdG9yIGV4dGVuZHMgSXRlcmF0b3JJdGVyYXRvcgp7CiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYW4gSW5maW5pdGVJdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbmZpbml0ZWl0ZXJhdG9yLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBJdGVyYXRvciAkaXRlcmF0b3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEl0ZXJhdG9yICRpdGVyYXRvcikge30KCiAgICAvKioKICAgICAqIE1vdmVzIHRoZSBpbm5lciBJdGVyYXRvciBmb3J3YXJkIG9yIHJld2luZHMgaXQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW5maW5pdGVpdGVyYXRvci5uZXh0LnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCk6IHZvaWQge30KfQoKLyoqCiAqIFRoaXMgaXRlcmF0b3IgY2FuIGJlIHVzZWQgdG8gZmlsdGVyIGFub3RoZXIgaXRlcmF0b3IgYmFzZWQgb24gYSByZWd1bGFyIGV4cHJlc3Npb24uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MucmVnZXhpdGVyYXRvci5waHAKICovCmNsYXNzIFJlZ2V4SXRlcmF0b3IgZXh0ZW5kcyBGaWx0ZXJJdGVyYXRvcgp7CiAgICAvKioKICAgICAqIFJldHVybiBhbGwgbWF0Y2hlcyBmb3IgdGhlIGN1cnJlbnQgZW50cnkgQHNlZSBwcmVnX21hdGNoX2FsbAogICAgICovCiAgICBwdWJsaWMgY29uc3QgQUxMX01BVENIRVMgPSAyOwoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBmaXJzdCBtYXRjaCBmb3IgdGhlIGN1cnJlbnQgZW50cnkgQHNlZSBwcmVnX21hdGNoCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBHRVRfTUFUQ0ggPSAxOwoKICAgIC8qKgogICAgICogT25seSBleGVjdXRlIG1hdGNoIChmaWx0ZXIpIGZvciB0aGUgY3VycmVudCBlbnRyeSBAc2VlIHByZWdfbWF0Y2gKICAgICAqLwogICAgcHVibGljIGNvbnN0IE1BVENIID0gMDsKCiAgICAvKioKICAgICAqIFJlcGxhY2UgdGhlIGN1cnJlbnQgZW50cnkgKE5vdCBmdWxseSBpbXBsZW1lbnRlZCB5ZXQpIEBzZWUgcHJlZ19yZXBsYWNlCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVBMQUNFID0gNDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNwbGl0IHZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgZW50cnkgQHNlZSBwcmVnX3NwbGl0CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTUExJVCA9IDM7CgogICAgLyoqCiAgICAgKiBTcGVjaWFsIGZsYWc6IE1hdGNoIHRoZSBlbnRyeSBrZXkgaW5zdGVhZCBvZiB0aGUgZW50cnkgdmFsdWUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBVU0VfS0VZID0gMTsKICAgIHB1YmxpYyBjb25zdCBJTlZFUlRfTUFUQ0ggPSAyOwoKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkcmVwbGFjZW1lbnQ7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgUmVnZXhJdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWdleGl0ZXJhdG9yLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBJdGVyYXRvciAkaXRlcmF0b3IgVGhlIGl0ZXJhdG9yIHRvIGFwcGx5IHRoaXMgcmVnZXggZmlsdGVyIHRvLgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoLgogICAgICogQHBhcmFtIGludCAkbW9kZSBbb3B0aW9uYWxdIE9wZXJhdGlvbiBtb2RlLCBzZWUgUmVnZXhJdGVyYXRvcjo6c2V0TW9kZSgpIGZvciBhIGxpc3Qgb2YgbW9kZXMuCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIFNwZWNpYWwgZmxhZ3MsIHNlZSBSZWdleEl0ZXJhdG9yOjpzZXRGbGFncygpIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGZsYWdzLgogICAgICogQHBhcmFtIGludCAkcHJlZ0ZsYWdzIFtvcHRpb25hbF0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncy4gVGhlc2UgZmxhZ3MgZGVwZW5kIG9uIHRoZSBvcGVyYXRpb24gbW9kZSBwYXJhbWV0ZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIEl0ZXJhdG9yICRpdGVyYXRvciwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcGF0dGVybiwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbW9kZSA9IHNlbGY6Ok1BVENILAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IDAsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHByZWdGbGFncyA9IDAKICAgICkge30KCiAgICAvKioKICAgICAqIEdldCBhY2NlcHQgc3RhdHVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZ2V4aXRlcmF0b3IuYWNjZXB0LnBocAogICAgICogQHJldHVybiBib29sIHRydWUgaWYgYSBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybnMgb3BlcmF0aW9uIG1vZGUuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZ2V4aXRlcmF0b3IuZ2V0bW9kZS5waHAKICAgICAqIEByZXR1cm4gaW50IHRoZSBvcGVyYXRpb24gbW9kZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZGUoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBvcGVyYXRpb24gbW9kZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVnZXhpdGVyYXRvci5zZXRtb2RlLnBocAogICAgICogQHBhcmFtIGludCAkbW9kZSA8cD4KICAgICAqIFRoZSBvcGVyYXRpb24gbW9kZS4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogVGhlIGF2YWlsYWJsZSBtb2RlcyBhcmUgbGlzdGVkIGJlbG93LiBUaGUgYWN0dWFsCiAgICAgKiBtZWFuaW5ncyBvZiB0aGVzZSBtb2RlcyBhcmUgZGVzY3JpYmVkIGluIHRoZQogICAgICogcHJlZGVmaW5lZCBjb25zdGFudHMuCiAgICAgKiA8dGFibGU+CiAgICAgKiA8Yj5SZWdleEl0ZXJhdG9yPC9iPiBtb2RlcwogICAgICogPHRyIHZhbGlnbj0idG9wIj4KICAgICAqIDx0ZD52YWx1ZTwvdGQ+CiAgICAgKiA8dGQ+Y29uc3RhbnQ8L3RkPgogICAgICogPC90cj4KICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgKiA8dGQ+MDwvdGQ+CiAgICAgKiA8dGQ+CiAgICAgKiBSZWdleEl0ZXJhdG9yOjpNQVRDSAogICAgICogPC90ZD4KICAgICAqIDwvdHI+CiAgICAgKiA8dHIgdmFsaWduPSJ0b3AiPgogICAgICogPHRkPjE8L3RkPgogICAgICogPHRkPgogICAgICogUmVnZXhJdGVyYXRvcjo6R0VUX01BVENICiAgICAgKiA8L3RkPgogICAgICogPC90cj4KICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgKiA8dGQ+MjwvdGQ+CiAgICAgKiA8dGQ+CiAgICAgKiBSZWdleEl0ZXJhdG9yOjpBTExfTUFUQ0hFUwogICAgICogPC90ZD4KICAgICAqIDwvdHI+CiAgICAgKiA8dHIgdmFsaWduPSJ0b3AiPgogICAgICogPHRkPjM8L3RkPgogICAgICogPHRkPgogICAgICogUmVnZXhJdGVyYXRvcjo6U1BMSVQKICAgICAqIDwvdGQ+CiAgICAgKiA8L3RyPgogICAgICogPHRyIHZhbGlnbj0idG9wIj4KICAgICAqIDx0ZD40PC90ZD4KICAgICAqIDx0ZD4KICAgICAqIFJlZ2V4SXRlcmF0b3I6OlJFUExBQ0UKICAgICAqIDwvdGQ+CiAgICAgKiA8L3RyPgogICAgICogPC90YWJsZT4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TW9kZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbW9kZSk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEdldCBmbGFncwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWdleGl0ZXJhdG9yLmdldGZsYWdzLnBocAogICAgICogQHJldHVybiBpbnQgdGhlIHNldCBmbGFncy4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZsYWdzKCk6IGludCB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgZmxhZ3MuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZ2V4aXRlcmF0b3Iuc2V0ZmxhZ3MucGhwCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyA8cD4KICAgICAqIFRoZSBmbGFncyB0byBzZXQsIGEgYml0bWFzayBvZiBjbGFzcyBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIFRoZSBhdmFpbGFibGUgZmxhZ3MgYXJlIGxpc3RlZCBiZWxvdy4gVGhlIGFjdHVhbAogICAgICogbWVhbmluZ3Mgb2YgdGhlc2UgZmxhZ3MgYXJlIGRlc2NyaWJlZCBpbiB0aGUKICAgICAqIHByZWRlZmluZWQgY29uc3RhbnRzLgogICAgICogPHRhYmxlPgogICAgICogPGI+UmVnZXhJdGVyYXRvcjwvYj4gZmxhZ3MKICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgKiA8dGQ+dmFsdWU8L3RkPgogICAgICogPHRkPmNvbnN0YW50PC90ZD4KICAgICAqIDwvdHI+CiAgICAgKiA8dHIgdmFsaWduPSJ0b3AiPgogICAgICogPHRkPjE8L3RkPgogICAgICogPHRkPgogICAgICogUmVnZXhJdGVyYXRvcjo6VVNFX0tFWQogICAgICogPC90ZD4KICAgICAqIDwvdHI+CiAgICAgKiA8L3RhYmxlPgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGbGFncygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGN1cnJlbnQgcmVndWxhciBleHByZXNzaW9uCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZWdleGl0ZXJhdG9yLmdldHJlZ2V4LnBocAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEBzaW5jZSA1LjQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlZ2V4KCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVndWxhciBleHByZXNzaW9uIGZsYWdzLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWdleGl0ZXJhdG9yLmdldHByZWdmbGFncy5waHAKICAgICAqIEByZXR1cm4gaW50IGEgYml0bWFzayBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uIGZsYWdzLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJlZ0ZsYWdzKCk6IGludCB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgcmVndWxhciBleHByZXNzaW9uIGZsYWdzLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWdleGl0ZXJhdG9yLnNldHByZWdmbGFncy5waHAKICAgICAqIEBwYXJhbSBpbnQgJHByZWdGbGFncyA8cD4KICAgICAqIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ3MuIFNlZSA8Yj5SZWdleEl0ZXJhdG9yOjpfX2NvbnN0cnVjdDwvYj4KICAgICAqIGZvciBhbiBvdmVydmlldyBvZiBhdmFpbGFibGUgZmxhZ3MuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldFByZWdGbGFncygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkcHJlZ0ZsYWdzKTogdm9pZCB7fQp9CgovKioKICogVGhpcyByZWN1cnNpdmUgaXRlcmF0b3IgY2FuIGZpbHRlciBhbm90aGVyIHJlY3Vyc2l2ZSBpdGVyYXRvciB2aWEgYSByZWd1bGFyIGV4cHJlc3Npb24uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MucmVjdXJzaXZlcmVnZXhpdGVyYXRvci5waHAKICovCmNsYXNzIFJlY3Vyc2l2ZVJlZ2V4SXRlcmF0b3IgZXh0ZW5kcyBSZWdleEl0ZXJhdG9yIGltcGxlbWVudHMgUmVjdXJzaXZlSXRlcmF0b3IKewogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IFJlY3Vyc2l2ZVJlZ2V4SXRlcmF0b3IuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZXJlZ2V4aXRlcmF0b3IuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIFJlY3Vyc2l2ZUl0ZXJhdG9yICRpdGVyYXRvciBUaGUgaXRlcmF0b3IgdG8gYXBwbHkgdGhpcyByZWdleCBmaWx0ZXIgdG8uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2guCiAgICAgKiBAcGFyYW0gaW50ICRtb2RlIFtvcHRpb25hbF0gT3BlcmF0aW9uIG1vZGUsIHNlZSBSZWdleEl0ZXJhdG9yOjpzZXRNb2RlKCkgZm9yIGEgbGlzdCBvZiBtb2Rlcy4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gU3BlY2lhbCBmbGFncywgc2VlIFJlZ2V4SXRlcmF0b3I6OnNldEZsYWdzKCkgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgZmxhZ3MuCiAgICAgKiBAcGFyYW0gaW50ICRwcmVnRmxhZ3MgW29wdGlvbmFsXSBUaGUgcmVndWxhciBleHByZXNzaW9uIGZsYWdzLiBUaGVzZSBmbGFncyBkZXBlbmQgb24gdGhlIG9wZXJhdGlvbiBtb2RlIHBhcmFtZXRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgUmVjdXJzaXZlSXRlcmF0b3IgJGl0ZXJhdG9yLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRwYXR0ZXJuLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRtb2RlID0gUmVnZXhJdGVyYXRvcjo6TUFUQ0gsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gMCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkcHJlZ0ZsYWdzID0gMAogICAgKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIGFuIGl0ZXJhdG9yIGNhbiBiZSBvYnRhaW5lZCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZXJlZ2V4aXRlcmF0b3IuaGFzY2hpbGRyZW4ucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiBhbiBpdGVyYXRvciBjYW4gYmUgb2J0YWluZWQgZm9yIHRoZSBjdXJyZW50IGVudHJ5LCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGhhc0NoaWxkcmVuKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaXRlcmF0b3IgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmVyZWdleGl0ZXJhdG9yLmdldGNoaWxkcmVuLnBocAogICAgICogQHJldHVybiBSZWN1cnNpdmVSZWdleEl0ZXJhdG9yIEFuIGl0ZXJhdG9yIGZvciB0aGUgY3VycmVudCBlbnRyeSwgaWYgaXQgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgYnkgdGhlIGlubmVyIGl0ZXJhdG9yLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hpbGRyZW4oKTogUmVjdXJzaXZlUmVnZXhJdGVyYXRvciB7fQp9CgovKioKICogQWxsb3dzIGl0ZXJhdGluZyBvdmVyIGEgPGI+UmVjdXJzaXZlSXRlcmF0b3I8L2I+IHRvIGdlbmVyYXRlIGFuIEFTQ0lJIGdyYXBoaWMgdHJlZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5yZWN1cnNpdmV0cmVlaXRlcmF0b3IucGhwCiAqLwpjbGFzcyBSZWN1cnNpdmVUcmVlSXRlcmF0b3IgZXh0ZW5kcyBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yCnsKICAgIHB1YmxpYyBjb25zdCBCWVBBU1NfQ1VSUkVOVCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgQllQQVNTX0tFWSA9IDg7CiAgICBwdWJsaWMgY29uc3QgUFJFRklYX0xFRlQgPSAwOwogICAgcHVibGljIGNvbnN0IFBSRUZJWF9NSURfSEFTX05FWFQgPSAxOwogICAgcHVibGljIGNvbnN0IFBSRUZJWF9NSURfTEFTVCA9IDI7CiAgICBwdWJsaWMgY29uc3QgUFJFRklYX0VORF9IQVNfTkVYVCA9IDM7CiAgICBwdWJsaWMgY29uc3QgUFJFRklYX0VORF9MQVNUID0gNDsKICAgIHB1YmxpYyBjb25zdCBQUkVGSVhfUklHSFQgPSA1OwoKICAgIC8qKgogICAgICogQ29uc3RydWN0IGEgUmVjdXJzaXZlVHJlZUl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZXRyZWVpdGVyYXRvci5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gUmVjdXJzaXZlSXRlcmF0b3J8SXRlcmF0b3JBZ2dyZWdhdGUgJGl0ZXJhdG9yCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIEZsYWdzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoZSBSZWN1cnNpdmVUcmVlSXRlcmF0b3Igb2JqZWN0LgogICAgICogQHBhcmFtIGludCAkY2FjaGluZ0l0ZXJhdG9yRmxhZ3MgW29wdGlvbmFsXSBGbGFncyB0byBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSB7QHNlZSBSZWN1cnNpdmVDYWNoaW5nSXRlcmF0b3J9IHVzZWQgaW50ZXJuYWxseS4KICAgICAqIEBwYXJhbSBpbnQgJG1vZGUgW29wdGlvbmFsXSBGbGFncyB0byBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSB7QHNlZSBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yfSB1c2VkIGludGVybmFsbHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAkaXRlcmF0b3IsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gc2VsZjo6QllQQVNTX0tFWSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkY2FjaGluZ0l0ZXJhdG9yRmxhZ3MgPSBDYWNoaW5nSXRlcmF0b3I6OkNBVENIX0dFVF9DSElMRCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbW9kZSA9IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3I6OlNFTEZfRklSU1QKICAgICkge30KCiAgICAvKioKICAgICAqIFJld2luZCBpdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmV0cmVlaXRlcmF0b3IucmV3aW5kLnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKSB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgdmFsaWRpdHkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZldHJlZWl0ZXJhdG9yLnZhbGlkLnBocAogICAgICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgdmFsaWQsIG90aGVyd2lzZSBmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmV0cmVlaXRlcmF0b3Iua2V5LnBocAogICAgICogQHJldHVybiBzdHJpbmcgdGhlIGN1cnJlbnQga2V5IHByZWZpeGVkIGFuZCBwb3N0Zml4ZWQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEdldCBjdXJyZW50IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZldHJlZWl0ZXJhdG9yLmN1cnJlbnQucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgY3VycmVudCBlbGVtZW50IHByZWZpeGVkIGFuZCBwb3N0Zml4ZWQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBNb3ZlIHRvIG5leHQgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmV0cmVlaXRlcmF0b3IubmV4dC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpIHt9CgogICAgLyoqCiAgICAgKiBCZWdpbiBpdGVyYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZldHJlZWl0ZXJhdG9yLmJlZ2luaXRlcmF0aW9uLnBocAogICAgICogQHJldHVybiBSZWN1cnNpdmVJdGVyYXRvciBBIDxiPlJlY3Vyc2l2ZUl0ZXJhdG9yPC9iPi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJlZ2luSXRlcmF0aW9uKCkge30KCiAgICAvKioKICAgICAqIEVuZCBpdGVyYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZldHJlZWl0ZXJhdG9yLmVuZGl0ZXJhdGlvbi5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5kSXRlcmF0aW9uKCkge30KCiAgICAvKioKICAgICAqIEhhcyBjaGlsZHJlbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmV0cmVlaXRlcmF0b3IuY2FsbGhhc2NoaWxkcmVuLnBocAogICAgICogQHJldHVybiBib29sIHRydWUgaWYgdGhlcmUgYXJlIGNoaWxkcmVuLCBvdGhlcndpc2UgZmFsc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhbGxIYXNDaGlsZHJlbigpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgY2hpbGRyZW4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZldHJlZWl0ZXJhdG9yLmNhbGxnZXRjaGlsZHJlbi5waHAKICAgICAqIEByZXR1cm4gUmVjdXJzaXZlSXRlcmF0b3IgQSA8Yj5SZWN1cnNpdmVJdGVyYXRvcjwvYj4uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxsR2V0Q2hpbGRyZW4oKSB7fQoKICAgIC8qKgogICAgICogQmVnaW4gY2hpbGRyZW4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZldHJlZWl0ZXJhdG9yLmJlZ2luY2hpbGRyZW4ucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJlZ2luQ2hpbGRyZW4oKSB7fQoKICAgIC8qKgogICAgICogRW5kIGNoaWxkcmVuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZXRyZWVpdGVyYXRvci5lbmRjaGlsZHJlbi5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5kQ2hpbGRyZW4oKSB7fQoKICAgIC8qKgogICAgICogTmV4dCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZXRyZWVpdGVyYXRvci5uZXh0ZWxlbWVudC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dEVsZW1lbnQoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBwcmVmaXgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZldHJlZWl0ZXJhdG9yLmdldHByZWZpeC5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBzdHJpbmcgdG8gcGxhY2UgaW4gZnJvbnQgb2YgY3VycmVudCBlbGVtZW50CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcmVmaXgoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwb3N0Zml4CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQb3N0Zml4KCNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMycpXSBzdHJpbmcgJHBvc3RmaXgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBTZXQgYSBwYXJ0IG9mIHRoZSBwcmVmaXgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZldHJlZWl0ZXJhdG9yLnNldHByZWZpeHBhcnQucGhwCiAgICAgKiBAcGFyYW0gaW50ICRwYXJ0IDxwPgogICAgICogT25lIG9mIHRoZSBSZWN1cnNpdmVUcmVlSXRlcmF0b3I6OlBSRUZJWF8qIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgcGFydCBvZiB0aGUgcHJlZml4IHNwZWNpZmllZCBpbiA8aT5wYXJ0PC9pPi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UHJlZml4UGFydCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkcGFydCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUKICAgICk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEdldCBjdXJyZW50IGVudHJ5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZXRyZWVpdGVyYXRvci5nZXRlbnRyeS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBwYXJ0IG9mIHRoZSB0cmVlIGJ1aWx0IGZvciB0aGUgY3VycmVudCBlbGVtZW50LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RW50cnkoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHBvc3RmaXgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZldHJlZWl0ZXJhdG9yLmdldHBvc3RmaXgucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0byBwbGFjZSBhZnRlciB0aGUgY3VycmVudCBlbGVtZW50LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UG9zdGZpeCgpOiBzdHJpbmcge30KfQoKLyoqCiAqIFRoaXMgY2xhc3MgYWxsb3dzIG9iamVjdHMgdG8gd29yayBhcyBhcnJheXMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuYXJyYXlvYmplY3QucGhwCiAqIEB0ZW1wbGF0ZSBUS2V5CiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogQHRlbXBsYXRlLWltcGxlbWVudHMgSXRlcmF0b3JBZ2dyZWdhdGU8VEtleSwgVFZhbHVlPgogKiBAdGVtcGxhdGUtaW1wbGVtZW50cyBBcnJheUFjY2VzczxUS2V5LCBUVmFsdWU+CiAqLwpjbGFzcyBBcnJheU9iamVjdCBpbXBsZW1lbnRzIEl0ZXJhdG9yQWdncmVnYXRlLCBBcnJheUFjY2VzcywgU2VyaWFsaXphYmxlLCBDb3VudGFibGUKewogICAgLyoqCiAgICAgKiBQcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgaGF2ZSB0aGVpciBub3JtYWwgZnVuY3Rpb25hbGl0eSB3aGVuIGFjY2Vzc2VkIGFzIGxpc3QgKHZhcl9kdW1wLCBmb3JlYWNoLCBldGMuKS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFNURF9QUk9QX0xJU1QgPSAxOwoKICAgIC8qKgogICAgICogRW50cmllcyBjYW4gYmUgYWNjZXNzZWQgYXMgcHJvcGVydGllcyAocmVhZCBhbmQgd3JpdGUpLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQVJSQVlfQVNfUFJPUFMgPSAyOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0IGEgbmV3IGFycmF5IG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheW9iamVjdC5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gYXJyYXk8VFZhbHVlPnxvYmplY3QgJGFycmF5IFRoZSBpbnB1dCBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBhcnJheSBvciBhbiBPYmplY3QuCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBGbGFncyB0byBjb250cm9sIHRoZSBiZWhhdmlvdXIgb2YgdGhlIEFycmF5T2JqZWN0IG9iamVjdC4KICAgICAqIEBwYXJhbSBjbGFzcy1zdHJpbmc8QXJyYXlJdGVyYXRvcj4gJGl0ZXJhdG9yQ2xhc3MgU3BlY2lmeSB0aGUgY2xhc3MgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGl0ZXJhdGlvbiBvZiB0aGUgQXJyYXlPYmplY3Qgb2JqZWN0LiBBcnJheUl0ZXJhdG9yIGlzIHRoZSBkZWZhdWx0IGNsYXNzIHVzZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdvYmplY3R8YXJyYXknXSwgZGVmYXVsdDogJycpXSAkYXJyYXkgPSBbXSwKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnKV0gI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gMCwKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnKV0gI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGl0ZXJhdG9yQ2xhc3MgPSAiQXJyYXlJdGVyYXRvciIKICAgICkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcmVxdWVzdGVkIGluZGV4IGV4aXN0cwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheW9iamVjdC5vZmZzZXRleGlzdHMucGhwCiAgICAgKiBAcGFyYW0gVEtleSAka2V5IDxwPgogICAgICogVGhlIGluZGV4IGJlaW5nIGNoZWNrZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGluZGV4IGV4aXN0cywgb3RoZXJ3aXNlIGZhbHNlCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAka2V5KTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBpbmRleAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheW9iamVjdC5vZmZzZXRnZXQucGhwCiAgICAgKiBAcGFyYW0gVEtleSAka2V5IDxwPgogICAgICogVGhlIGluZGV4IHdpdGggdGhlIHZhbHVlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBUVmFsdWV8bnVsbCBUaGUgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBvciBudWxsLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJGtleSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IHRvIG5ld3ZhbAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheW9iamVjdC5vZmZzZXRzZXQucGhwCiAgICAgKiBAcGFyYW0gVEtleSAka2V5IDxwPgogICAgICogVGhlIGluZGV4IGJlaW5nIHNldC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlIDxwPgogICAgICogVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIDxpPmluZGV4PC9pPi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJGtleSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICR2YWx1ZQogICAgKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogVW5zZXRzIHRoZSB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5b2JqZWN0Lm9mZnNldHVuc2V0LnBocAogICAgICogQHBhcmFtIFRLZXkgJGtleSA8cD4KICAgICAqIFRoZSBpbmRleCBiZWluZyB1bnNldC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAka2V5KTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQXBwZW5kcyB0aGUgdmFsdWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlvYmplY3QuYXBwZW5kLnBocAogICAgICogQHBhcmFtIFRWYWx1ZSAkdmFsdWUgPHA+CiAgICAgKiBUaGUgdmFsdWUgYmVpbmcgYXBwZW5kZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICR2YWx1ZSk6IHZvaWQge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoZSBBcnJheU9iamVjdC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlvYmplY3QuZ2V0YXJyYXljb3B5LnBocAogICAgICogQHJldHVybiBhcnJheTxUVmFsdWU+IGEgY29weSBvZiB0aGUgYXJyYXkuIFdoZW4gdGhlIDxiPkFycmF5T2JqZWN0PC9iPiByZWZlcnMgdG8gYW4gb2JqZWN0CiAgICAgKiBhbiBhcnJheSBvZiB0aGUgcHVibGljIHByb3BlcnRpZXMgb2YgdGhhdCBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEFycmF5Q29weSgpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBudW1iZXIgb2YgcHVibGljIHByb3BlcnRpZXMgaW4gdGhlIEFycmF5T2JqZWN0CiAgICAgKiBXaGVuIHRoZSA8Yj5BcnJheU9iamVjdDwvYj4gaXMgY29uc3RydWN0ZWQgZnJvbSBhbiBhcnJheSBhbGwgcHJvcGVydGllcyBhcmUgcHVibGljLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheW9iamVjdC5jb3VudC5waHAKICAgICAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2YgcHVibGljIHByb3BlcnRpZXMgaW4gdGhlIEFycmF5T2JqZWN0LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBiZWhhdmlvciBmbGFncy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlvYmplY3QuZ2V0ZmxhZ3MucGhwCiAgICAgKiBAcmV0dXJuIGludCB0aGUgYmVoYXZpb3IgZmxhZ3Mgb2YgdGhlIEFycmF5T2JqZWN0LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmxhZ3MoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBiZWhhdmlvciBmbGFncy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlvYmplY3Quc2V0ZmxhZ3MucGhwCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyA8cD4KICAgICAqIFRoZSBuZXcgQXJyYXlPYmplY3QgYmVoYXZpb3IuCiAgICAgKiBJdCB0YWtlcyBvbiBlaXRoZXIgYSBiaXRtYXNrLCBvciBuYW1lZCBjb25zdGFudHMuIFVzaW5nIG5hbWVkCiAgICAgKiBjb25zdGFudHMgaXMgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBmb3IgZnV0dXJlCiAgICAgKiB2ZXJzaW9ucy4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogVGhlIGF2YWlsYWJsZSBiZWhhdmlvciBmbGFncyBhcmUgbGlzdGVkIGJlbG93LiBUaGUgYWN0dWFsCiAgICAgKiBtZWFuaW5ncyBvZiB0aGVzZSBmbGFncyBhcmUgZGVzY3JpYmVkIGluIHRoZQogICAgICogcHJlZGVmaW5lZCBjb25zdGFudHMuCiAgICAgKiA8dGFibGU+CiAgICAgKiBBcnJheU9iamVjdCBiZWhhdmlvciBmbGFncwogICAgICogPHRyIHZhbGlnbj0idG9wIj4KICAgICAqIDx0ZD52YWx1ZTwvdGQ+CiAgICAgKiA8dGQ+Y29uc3RhbnQ8L3RkPgogICAgICogPC90cj4KICAgICAqIDx0ciB2YWxpZ249InRvcCI+CiAgICAgKiA8dGQ+MTwvdGQ+CiAgICAgKiA8dGQ+CiAgICAgKiBBcnJheU9iamVjdDo6U1REX1BST1BfTElTVAogICAgICogPC90ZD4KICAgICAqIDwvdHI+CiAgICAgKiA8dHIgdmFsaWduPSJ0b3AiPgogICAgICogPHRkPjI8L3RkPgogICAgICogPHRkPgogICAgICogQXJyYXlPYmplY3Q6OkFSUkFZX0FTX1BST1BTCiAgICAgKiA8L3RkPgogICAgICogPC90cj4KICAgICAqIDwvdGFibGU+CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldEZsYWdzKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFNvcnQgdGhlIGVudHJpZXMgYnkgdmFsdWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlvYmplY3QuYXNvcnQucGhwCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBhc29ydCgjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gaW50ICRmbGFncyA9IFNPUlRfUkVHVUxBUikge30KCiAgICAvKioKICAgICAqIFNvcnQgdGhlIGVudHJpZXMgYnkga2V5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5b2JqZWN0Lmtzb3J0LnBocAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCiAgICBwdWJsaWMgZnVuY3Rpb24ga3NvcnQoI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIGludCAkZmxhZ3MgPSBTT1JUX1JFR1VMQVIpIHt9CgogICAgLyoqCiAgICAgKiBTb3J0IHRoZSBlbnRyaWVzIHdpdGggYSB1c2VyLWRlZmluZWQgY29tcGFyaXNvbiBmdW5jdGlvbiBhbmQgbWFpbnRhaW4ga2V5IGFzc29jaWF0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5b2JqZWN0LnVhc29ydC5waHAKICAgICAqIEBwYXJhbSBjYWxsYWJsZShUVmFsdWUsIFRWYWx1ZSk6aW50ICRjYWxsYmFjayA8cD4KICAgICAqIEZ1bmN0aW9uIDxpPmNtcF9mdW5jdGlvbjwvaT4gc2hvdWxkIGFjY2VwdCB0d28KICAgICAqIHBhcmFtZXRlcnMgd2hpY2ggd2lsbCBiZSBmaWxsZWQgYnkgcGFpcnMgb2YgZW50cmllcy4KICAgICAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGFuIGludGVnZXIgbGVzcyB0aGFuLCBlcXVhbAogICAgICogdG8sIG9yIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBjb25zaWRlcmVkIHRvCiAgICAgKiBiZSByZXNwZWN0aXZlbHkgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHRoZQogICAgICogc2Vjb25kLgogICAgICogPC9wPgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gdWFzb3J0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2NhbGxhYmxlJ10sIGRlZmF1bHQ6ICcnKV0gJGNhbGxiYWNrKSB7fQoKICAgIC8qKgogICAgICogU29ydCB0aGUgZW50cmllcyBieSBrZXlzIHVzaW5nIGEgdXNlci1kZWZpbmVkIGNvbXBhcmlzb24gZnVuY3Rpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlvYmplY3QudWtzb3J0LnBocAogICAgICogQHBhcmFtIGNhbGxhYmxlKFRWYWx1ZSwgVFZhbHVlKTppbnQgJGNhbGxiYWNrIDxwPgogICAgICogVGhlIGNhbGxiYWNrIGNvbXBhcmlzb24gZnVuY3Rpb24uCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIEZ1bmN0aW9uIDxpPmNtcF9mdW5jdGlvbjwvaT4gc2hvdWxkIGFjY2VwdCB0d28KICAgICAqIHBhcmFtZXRlcnMgd2hpY2ggd2lsbCBiZSBmaWxsZWQgYnkgcGFpcnMgb2YgZW50cnkga2V5cy4KICAgICAqIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGFuIGludGVnZXIgbGVzcyB0aGFuLCBlcXVhbAogICAgICogdG8sIG9yIGdyZWF0ZXIgdGhhbiB6ZXJvIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBjb25zaWRlcmVkIHRvCiAgICAgKiBiZSByZXNwZWN0aXZlbHkgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHRoZQogICAgICogc2Vjb25kLgogICAgICogPC9wPgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gdWtzb3J0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2NhbGxhYmxlJ10sIGRlZmF1bHQ6ICcnKV0gJGNhbGxiYWNrKSB7fQoKICAgIC8qKgogICAgICogU29ydCBlbnRyaWVzIHVzaW5nIGEgIm5hdHVyYWwgb3JkZXIiIGFsZ29yaXRobQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheW9iamVjdC5uYXRzb3J0LnBocAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gbmF0c29ydCgpIHt9CgogICAgLyoqCiAgICAgKiBTb3J0IGFuIGFycmF5IHVzaW5nIGEgY2FzZSBpbnNlbnNpdGl2ZSAibmF0dXJhbCBvcmRlciIgYWxnb3JpdGhtCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5b2JqZWN0Lm5hdGNhc2Vzb3J0LnBocAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gbmF0Y2FzZXNvcnQoKSB7fQoKICAgIC8qKgogICAgICogVW5zZXJpYWxpemUgYW4gQXJyYXlPYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlvYmplY3QudW5zZXJpYWxpemUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPgogICAgICogVGhlIHNlcmlhbGl6ZWQgPGI+QXJyYXlPYmplY3Q8L2I+LgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZGF0YSk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFNlcmlhbGl6ZSBhbiBBcnJheU9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheW9iamVjdC5zZXJpYWxpemUucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgc2VyaWFsaXplZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGI+QXJyYXlPYmplY3Q8L2I+LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VyaWFsaXplKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICogQHNpbmNlIDcuNAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZWJ1Z0luZm8oKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqIEBzaW5jZSA3LjQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fc2VyaWFsaXplKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGRhdGEKICAgICAqIEBzaW5jZSA3LjQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgaXRlcmF0b3IgZnJvbSBhbiBBcnJheU9iamVjdCBpbnN0YW5jZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheW9iamVjdC5nZXRpdGVyYXRvci5waHAKICAgICAqIEByZXR1cm4gQXJyYXlJdGVyYXRvcjxUS2V5LCBUVmFsdWU+IEFuIGl0ZXJhdG9yIGZyb20gYW4gPGI+QXJyYXlPYmplY3Q8L2I+LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKTogSXRlcmF0b3Ige30KCiAgICAvKioKICAgICAqIEV4Y2hhbmdlIHRoZSBhcnJheSBmb3IgYW5vdGhlciBvbmUuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5b2JqZWN0LmV4Y2hhbmdlYXJyYXkucGhwCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGFycmF5IDxwPgogICAgICogVGhlIG5ldyBhcnJheSBvciBvYmplY3QgdG8gZXhjaGFuZ2Ugd2l0aCB0aGUgY3VycmVudCBhcnJheS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYXJyYXkgdGhlIG9sZCBhcnJheS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGV4Y2hhbmdlQXJyYXkoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnb2JqZWN0fGFycmF5J10sIGRlZmF1bHQ6ICcnKV0gJGFycmF5KTogYXJyYXkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGl0ZXJhdG9yIGNsYXNzbmFtZSBmb3IgdGhlIEFycmF5T2JqZWN0LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheW9iamVjdC5zZXRpdGVyYXRvcmNsYXNzLnBocAogICAgICogQHBhcmFtIGNsYXNzLXN0cmluZzxBcnJheUl0ZXJhdG9yPiAkaXRlcmF0b3JDbGFzcyA8cD4KICAgICAqIFRoZSBjbGFzc25hbWUgb2YgdGhlIGFycmF5IGl0ZXJhdG9yIHRvIHVzZSB3aGVuIGl0ZXJhdGluZyBvdmVyIHRoaXMgb2JqZWN0LgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJdGVyYXRvckNsYXNzKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRpdGVyYXRvckNsYXNzKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgaXRlcmF0b3IgY2xhc3NuYW1lIGZvciB0aGUgQXJyYXlPYmplY3QuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5b2JqZWN0LmdldGl0ZXJhdG9yY2xhc3MucGhwCiAgICAgKiBAcmV0dXJuIGNsYXNzLXN0cmluZzxBcnJheUl0ZXJhdG9yPiB0aGUgaXRlcmF0b3IgY2xhc3MgbmFtZSB0aGF0IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoaXMgb2JqZWN0LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3JDbGFzcygpOiBzdHJpbmcge30KfQoKLyoqCiAqIFRoaXMgaXRlcmF0b3IgYWxsb3dzIHRvIHVuc2V0IGFuZCBtb2RpZnkgdmFsdWVzIGFuZCBrZXlzIHdoaWxlIGl0ZXJhdGluZwogKiBvdmVyIEFycmF5cyBhbmQgT2JqZWN0cy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5hcnJheWl0ZXJhdG9yLnBocAogKi8KY2xhc3MgQXJyYXlJdGVyYXRvciBpbXBsZW1lbnRzIFNlZWthYmxlSXRlcmF0b3IsIEFycmF5QWNjZXNzLCBTZXJpYWxpemFibGUsIENvdW50YWJsZQp7CiAgICBwdWJsaWMgY29uc3QgU1REX1BST1BfTElTVCA9IDE7CiAgICBwdWJsaWMgY29uc3QgQVJSQVlfQVNfUFJPUFMgPSAyOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0IGFuIEFycmF5SXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlpdGVyYXRvci5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFycmF5IFRoZSBhcnJheSBvciBvYmplY3QgdG8gYmUgaXRlcmF0ZWQgb24uCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBGbGFncyB0byBjb250cm9sIHRoZSBiZWhhdmlvdXIgb2YgdGhlIEFycmF5T2JqZWN0IG9iamVjdC4KICAgICAqIEBzZWUgQXJyYXlPYmplY3Q6OnNldEZsYWdzKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ29iamVjdHxhcnJheSddLCBkZWZhdWx0OiAnJyldICRhcnJheSA9IFtdLAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MgPSAwLAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMCcsIHRvOiAnNy4xJyldICRpdGVyYXRvcl9jbGFzcyA9IG51bGwKICAgICkge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIG9mZnNldCBleGlzdHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlpdGVyYXRvci5vZmZzZXRleGlzdHMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAgICAgKiBUaGUgb2Zmc2V0IGJlaW5nIGNoZWNrZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgb2Zmc2V0IGV4aXN0cywgb3RoZXJ3aXNlIGZhbHNlCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAka2V5KTogYm9vbCB7fQoKICAgIC8qKgogICAgICogR2V0IHZhbHVlIGZvciBhbiBvZmZzZXQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlpdGVyYXRvci5vZmZzZXRnZXQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAgICAgKiBUaGUgb2Zmc2V0IHRvIGdldCB0aGUgdmFsdWUgZnJvbS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gbWl4ZWQgVGhlIHZhbHVlIGF0IG9mZnNldCA8aT5pbmRleDwvaT4uCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAka2V5KTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFNldCB2YWx1ZSBmb3IgYW4gb2Zmc2V0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5aXRlcmF0b3Iub2Zmc2V0c2V0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAka2V5IDxwPgogICAgICogVGhlIGluZGV4IHRvIHNldCBmb3IuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSA8cD4KICAgICAqIFRoZSBuZXcgdmFsdWUgdG8gc3RvcmUgYXQgdGhlIGluZGV4LgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAka2V5LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJHZhbHVlCiAgICApOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBVbnNldCB2YWx1ZSBmb3IgYW4gb2Zmc2V0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5aXRlcmF0b3Iub2Zmc2V0dW5zZXQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAgICAgKiBUaGUgb2Zmc2V0IHRvIHVuc2V0LgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRrZXkpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBBcHBlbmQgYW4gZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWl0ZXJhdG9yLmFwcGVuZC5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgPHA+CiAgICAgKiBUaGUgdmFsdWUgdG8gYXBwZW5kLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBHZXQgYXJyYXkgY29weQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWl0ZXJhdG9yLmdldGFycmF5Y29weS5waHAKICAgICAqIEByZXR1cm4gYXJyYXkgQSBjb3B5IG9mIHRoZSBhcnJheSwgb3IgYXJyYXkgb2YgcHVibGljIHByb3BlcnRpZXMKICAgICAqIGlmIEFycmF5SXRlcmF0b3IgcmVmZXJzIHRvIGFuIG9iamVjdC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEFycmF5Q29weSgpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogQ291bnQgZWxlbWVudHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlpdGVyYXRvci5jb3VudC5waHAKICAgICAqIEByZXR1cm4gaW50PDAsbWF4PiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9yIHB1YmxpYyBwcm9wZXJ0aWVzIGluIHRoZSBhc3NvY2lhdGVkCiAgICAgKiBhcnJheSBvciBvYmplY3QsIHJlc3BlY3RpdmVseS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludCB7fQoKICAgIC8qKgogICAgICogR2V0IGZsYWdzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5aXRlcmF0b3IuZ2V0ZmxhZ3MucGhwCiAgICAgKiBAcmV0dXJuIGludCBUaGUgY3VycmVudCBmbGFncy4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZsYWdzKCk6IGludCB7fQoKICAgIC8qKgogICAgICogU2V0IGJlaGF2aW91ciBmbGFncwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWl0ZXJhdG9yLnNldGZsYWdzLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZmxhZ3MgPHA+CiAgICAgKiBBIGJpdG1hc2sgYXMgZm9sbG93czoKICAgICAqIDAgPSBQcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgaGF2ZSB0aGVpciBub3JtYWwgZnVuY3Rpb25hbGl0eQogICAgICogd2hlbiBhY2Nlc3NlZCBhcyBsaXN0ICh2YXJfZHVtcCwgZm9yZWFjaCwgZXRjLikuCiAgICAgKiAxID0gQXJyYXkgaW5kaWNlcyBjYW4gYmUgYWNjZXNzZWQgYXMgcHJvcGVydGllcyBpbiByZWFkL3dyaXRlLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGbGFncygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBTb3J0IGFycmF5IGJ5IHZhbHVlcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWl0ZXJhdG9yLmFzb3J0LnBocAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNvcnQoI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIGludCAkZmxhZ3MgPSBTT1JUX1JFR1VMQVIpIHt9CgogICAgLyoqCiAgICAgKiBTb3J0IGFycmF5IGJ5IGtleXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlpdGVyYXRvci5rc29ydC5waHAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4zJyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQogICAgcHVibGljIGZ1bmN0aW9uIGtzb3J0KCNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSBpbnQgJGZsYWdzID0gU09SVF9SRUdVTEFSKSB7fQoKICAgIC8qKgogICAgICogVXNlciBkZWZpbmVkIHNvcnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlpdGVyYXRvci51YXNvcnQucGhwCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIDxwPgogICAgICogVGhlIGNvbXBhcmUgZnVuY3Rpb24gdXNlZCBmb3IgdGhlIHNvcnQuCiAgICAgKiA8L3A+CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiB1YXNvcnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnY2FsbGFibGUnXSwgZGVmYXVsdDogJycpXSAkY2FsbGJhY2spIHt9CgogICAgLyoqCiAgICAgKiBVc2VyIGRlZmluZWQgc29ydAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWl0ZXJhdG9yLnVrc29ydC5waHAKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgPHA+CiAgICAgKiBUaGUgY29tcGFyZSBmdW5jdGlvbiB1c2VkIGZvciB0aGUgc29ydC4KICAgICAqIDwvcD4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4zJyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQogICAgcHVibGljIGZ1bmN0aW9uIHVrc29ydCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdjYWxsYWJsZSddLCBkZWZhdWx0OiAnJyldICRjYWxsYmFjaykge30KCiAgICAvKioKICAgICAqIFNvcnQgYW4gYXJyYXkgbmF0dXJhbGx5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5aXRlcmF0b3IubmF0c29ydC5waHAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4zJyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQogICAgcHVibGljIGZ1bmN0aW9uIG5hdHNvcnQoKSB7fQoKICAgIC8qKgogICAgICogU29ydCBhbiBhcnJheSBuYXR1cmFsbHksIGNhc2UgaW5zZW5zaXRpdmUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlpdGVyYXRvci5uYXRjYXNlc29ydC5waHAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4zJyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQogICAgcHVibGljIGZ1bmN0aW9uIG5hdGNhc2Vzb3J0KCkge30KCiAgICAvKioKICAgICAqIFVuc2VyaWFsaXplCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5aXRlcmF0b3IudW5zZXJpYWxpemUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPgogICAgICogVGhlIHNlcmlhbGl6ZWQgQXJyYXlJdGVyYXRvciBvYmplY3QgdG8gYmUgdW5zZXJpYWxpemVkLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZGF0YSk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFNlcmlhbGl6ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWl0ZXJhdG9yLnNlcmlhbGl6ZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBzZXJpYWxpemVkIDxiPkFycmF5SXRlcmF0b3I8L2I+LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VyaWFsaXplKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogUmV3aW5kIGFycmF5IGJhY2sgdG8gdGhlIHN0YXJ0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5aXRlcmF0b3IucmV3aW5kLnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIGN1cnJlbnQgYXJyYXkgZW50cnkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlpdGVyYXRvci5jdXJyZW50LnBocAogICAgICogQHJldHVybiBtaXhlZCBUaGUgY3VycmVudCBhcnJheSBlbnRyeS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJldHVybiBjdXJyZW50IGFycmF5IGtleQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWl0ZXJhdG9yLmtleS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGludHxudWxsIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgZWxlbWVudC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpOiBzdHJpbmd8aW50fG51bGwge30KCiAgICAvKioKICAgICAqIE1vdmUgdG8gbmV4dCBlbnRyeQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWl0ZXJhdG9yLm5leHQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgd2hldGhlciBhcnJheSBjb250YWlucyBtb3JlIGVudHJpZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlpdGVyYXRvci52YWxpZC5waHAKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogU2VlayB0byBwb3NpdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWl0ZXJhdG9yLnNlZWsucGhwCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgPHA+CiAgICAgKiBUaGUgcG9zaXRpb24gdG8gc2VlayB0by4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VlaygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkb2Zmc2V0KTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICogQHNpbmNlIDcuNAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZWJ1Z0luZm8oKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqIEBzaW5jZSA3LjQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fc2VyaWFsaXplKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGRhdGEKICAgICAqIEBzaW5jZSA3LjQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkIHt9Cn0KCi8qKgogKiBUaGlzIGl0ZXJhdG9yIGFsbG93cyB0byB1bnNldCBhbmQgbW9kaWZ5IHZhbHVlcyBhbmQga2V5cyB3aGlsZSBpdGVyYXRpbmcgb3ZlciBBcnJheXMgYW5kIE9iamVjdHMKICogaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBBcnJheUl0ZXJhdG9yLiBBZGRpdGlvbmFsbHkgaXQgaXMgcG9zc2libGUgdG8gaXRlcmF0ZQogKiBvdmVyIHRoZSBjdXJyZW50IGl0ZXJhdG9yIGVudHJ5LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnJlY3Vyc2l2ZWFycmF5aXRlcmF0b3IucGhwCiAqLwpjbGFzcyBSZWN1cnNpdmVBcnJheUl0ZXJhdG9yIGV4dGVuZHMgQXJyYXlJdGVyYXRvciBpbXBsZW1lbnRzIFJlY3Vyc2l2ZUl0ZXJhdG9yCnsKICAgIHB1YmxpYyBjb25zdCBDSElMRF9BUlJBWVNfT05MWSA9IDQ7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgY3VycmVudCBlbnRyeSBpcyBhbiBhcnJheSBvciBhbiBvYmplY3QuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWFycmF5aXRlcmF0b3IuaGFzY2hpbGRyZW4ucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgY3VycmVudCBlbnRyeSBpcyBhbiBhcnJheSBvciBhbiBvYmplY3QsCiAgICAgKiBvdGhlcndpc2UgZmFsc2UgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNDaGlsZHJlbigpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIGZvciB0aGUgY3VycmVudCBlbnRyeSBpZiBpdCBpcyBhbiBhcnJheSBvciBhbiBvYmplY3QuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWFycmF5aXRlcmF0b3IuZ2V0Y2hpbGRyZW4ucGhwCiAgICAgKiBAcmV0dXJuIFJlY3Vyc2l2ZUFycmF5SXRlcmF0b3J8bnVsbCBBbiBpdGVyYXRvciBmb3IgdGhlIGN1cnJlbnQgZW50cnksIGlmIGl0IGlzIGFuIGFycmF5IG9yIG9iamVjdC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENoaWxkcmVuKCk6ID9SZWN1cnNpdmVBcnJheUl0ZXJhdG9yIHt9Cn0KPD9waHAKCi8vIFN0YXJ0IG9mIFNQTCB2LjAuMgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cUHVyZTsKCi8qKgogKiBSZXR1cm4gYXZhaWxhYmxlIFNQTCBjbGFzc2VzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3BsLWNsYXNzZXMucGhwCiAqIEByZXR1cm4gYXJyYXkKICovCiNbUHVyZV0KZnVuY3Rpb24gc3BsX2NsYXNzZXMoKTogYXJyYXkge30KCi8qKgogKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBfX2F1dG9sb2FkKCkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcGwtYXV0b2xvYWQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIDxwPgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZmlsZV9leHRlbnNpb25zIFtvcHRpb25hbF0gPHA+CiAqIEJ5IGRlZmF1bHQgaXQgY2hlY2tzIGFsbCBpbmNsdWRlIHBhdGhzIHRvCiAqIGNvbnRhaW4gZmlsZW5hbWVzIGJ1aWx0IHVwIGJ5IHRoZSBsb3dlcmNhc2UgY2xhc3MgbmFtZSBhcHBlbmRlZCBieSB0aGUKICogZmlsZW5hbWUgZXh0ZW5zaW9ucyAuaW5jIGFuZCAucGhwLgogKiA8L3A+CiAqIEByZXR1cm4gdm9pZAogKiBAc2luY2UgNS4xLjIKICovCmZ1bmN0aW9uIHNwbF9hdXRvbG9hZChzdHJpbmcgJGNsYXNzLCA/c3RyaW5nICRmaWxlX2V4dGVuc2lvbnMpOiB2b2lkIHt9CgovKioKICogUmVnaXN0ZXIgYW5kIHJldHVybiBkZWZhdWx0IGZpbGUgZXh0ZW5zaW9ucyBmb3Igc3BsX2F1dG9sb2FkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3BsLWF1dG9sb2FkLWV4dGVuc2lvbnMucGhwCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZmlsZV9leHRlbnNpb25zIFtvcHRpb25hbF0gPHA+CiAqIFdoZW4gY2FsbGluZyB3aXRob3V0IGFuIGFyZ3VtZW50LCBpdCBzaW1wbHkgcmV0dXJucyB0aGUgY3VycmVudCBsaXN0CiAqIG9mIGV4dGVuc2lvbnMgZWFjaCBzZXBhcmF0ZWQgYnkgY29tbWEuIFRvIG1vZGlmeSB0aGUgbGlzdCBvZiBmaWxlCiAqIGV4dGVuc2lvbnMsIHNpbXBseSBpbnZva2UgdGhlIGZ1bmN0aW9ucyB3aXRoIHRoZSBuZXcgbGlzdCBvZiBmaWxlCiAqIGV4dGVuc2lvbnMgdG8gdXNlIGluIGEgc2luZ2xlIHN0cmluZyB3aXRoIGVhY2ggZXh0ZW5zaW9ucyBzZXBhcmF0ZWQKICogYnkgY29tbWEuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgQSBjb21tYSBkZWxpbWl0ZWQgbGlzdCBvZiBkZWZhdWx0IGZpbGUgZXh0ZW5zaW9ucyBmb3IKICogc3BsX2F1dG9sb2FkLgogKiBAc2luY2UgNS4xLjIKICovCmZ1bmN0aW9uIHNwbF9hdXRvbG9hZF9leHRlbnNpb25zKD9zdHJpbmcgJGZpbGVfZXh0ZW5zaW9ucyk6IHN0cmluZyB7fQoKLyoqCiAqIFJlZ2lzdGVyIGdpdmVuIGZ1bmN0aW9uIGFzIF9fYXV0b2xvYWQoKSBpbXBsZW1lbnRhdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNwbC1hdXRvbG9hZC1yZWdpc3Rlci5waHAKICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJGNhbGxiYWNrIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBhdXRvbG9hZCBmdW5jdGlvbiBiZWluZyByZWdpc3RlcmVkLgogKiBJZiBubyBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YKICogc3BsX2F1dG9sb2FkIHdpbGwgYmUgcmVnaXN0ZXJlZC4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkdGhyb3cgVGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoZXRoZXIgc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKCkgc2hvdWxkIHRocm93IGV4Y2VwdGlvbnMgd2hlbiB0aGUKICogYXV0b2xvYWRfZnVuY3Rpb24gY2Fubm90IGJlIHJlZ2lzdGVyZWQuIElnbm9yZWQgc2luY2Ugc2luY2UgOC4wLgogKiBAcGFyYW0gYm9vbCAkcHJlcGVuZCBJZiB0cnVlLCBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoKSB3aWxsIHByZXBlbmQgdGhlIGF1dG9sb2FkZXIgb24gdGhlIGF1dG9sb2FkIHN0YWNrIGluc3RlYWQgb2YKICogYXBwZW5kaW5nIGl0LgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqIEB0aHJvd3MgVHlwZUVycm9yIFNpbmNlIDguMC4KICogQHNpbmNlIDUuMS4yCiAqLwpmdW5jdGlvbiBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoP2NhbGxhYmxlICRjYWxsYmFjaywgYm9vbCAkdGhyb3cgPSB0cnVlLCBib29sICRwcmVwZW5kID0gZmFsc2UpOiBib29sIHt9CgovKioKICogVW5yZWdpc3RlciBnaXZlbiBmdW5jdGlvbiBhcyBfX2F1dG9sb2FkKCkgaW1wbGVtZW50YXRpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcGwtYXV0b2xvYWQtdW5yZWdpc3Rlci5waHAKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayA8cD4KICogVGhlIGF1dG9sb2FkIGZ1bmN0aW9uIGJlaW5nIHVucmVnaXN0ZXJlZC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA1LjEuMgogKi8KZnVuY3Rpb24gc3BsX2F1dG9sb2FkX3VucmVnaXN0ZXIoY2FsbGFibGUgJGNhbGxiYWNrKTogYm9vbCB7fQoKLyoqCiAqIFJldHVybiBhbGwgcmVnaXN0ZXJlZCBfX2F1dG9sb2FkKCkgZnVuY3Rpb25zCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3BsLWF1dG9sb2FkLWZ1bmN0aW9ucy5waHAKICogQHJldHVybiBhcnJheXxmYWxzZSBBbiBhcnJheSBvZiBhbGwgcmVnaXN0ZXJlZCBfX2F1dG9sb2FkIGZ1bmN0aW9ucy4KICogSWYgdGhlIGF1dG9sb2FkIHN0YWNrIGlzIG5vdCBhY3RpdmF0ZWQgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIGZhbHNlLgogKiBJZiBubyBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBhbiBlbXB0eSBhcnJheS4KICogQHNpbmNlIDUuMS4yCiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJhcnJheSJdLCBkZWZhdWx0OiAiYXJyYXl8ZmFsc2UiKV0KZnVuY3Rpb24gc3BsX2F1dG9sb2FkX2Z1bmN0aW9ucygpIHt9CgovKioKICogVHJ5IGFsbCByZWdpc3RlcmVkIF9fYXV0b2xvYWQoKSBmdW5jdGlvbnMgdG8gbG9hZCB0aGUgcmVxdWVzdGVkIGNsYXNzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3BsLWF1dG9sb2FkLWNhbGwucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIDxwPgogKiBUaGUgY2xhc3MgbmFtZSBiZWluZyBzZWFyY2hlZC4KICogPC9wPgogKiBAcmV0dXJuIHZvaWQKICogQHNpbmNlIDUuMS4yCiAqLwpmdW5jdGlvbiBzcGxfYXV0b2xvYWRfY2FsbChzdHJpbmcgJGNsYXNzKTogdm9pZCB7fQoKLyoqCiAqIFJldHVybiB0aGUgcGFyZW50IGNsYXNzZXMgb2YgdGhlIGdpdmVuIGNsYXNzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uY2xhc3MtcGFyZW50cy5waHAKICogQHBhcmFtIG9iamVjdHxzdHJpbmcgJG9iamVjdF9vcl9jbGFzcyA8cD4KICogQW4gb2JqZWN0IChjbGFzcyBpbnN0YW5jZSkgb3IgYSBzdHJpbmcgKGNsYXNzIG5hbWUpLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRhdXRvbG9hZCBbb3B0aW9uYWxdIDxwPgogKiBXaGV0aGVyIHRvIGFsbG93IHRoaXMgZnVuY3Rpb24gdG8gbG9hZCB0aGUgY2xhc3MgYXV0b21hdGljYWxseSB0aHJvdWdoCiAqIHRoZSBfX2F1dG9sb2FkIG1hZ2ljCiAqIG1ldGhvZC4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ1tdfGZhbHNlIEFuIGFycmF5IG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBjbGFzc19wYXJlbnRzKCRvYmplY3Rfb3JfY2xhc3MsIGJvb2wgJGF1dG9sb2FkID0gdHJ1ZSk6IGFycmF5fGZhbHNlIHt9CgovKioKICogUmV0dXJuIHRoZSBpbnRlcmZhY2VzIHdoaWNoIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUgZ2l2ZW4gY2xhc3MKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5jbGFzcy1pbXBsZW1lbnRzLnBocAogKiBAcGFyYW0gb2JqZWN0fHN0cmluZyAkb2JqZWN0X29yX2NsYXNzIDxwPgogKiBBbiBvYmplY3QgKGNsYXNzIGluc3RhbmNlKSBvciBhIHN0cmluZyAoY2xhc3MgbmFtZSkuCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJGF1dG9sb2FkIFtvcHRpb25hbF0gPHA+CiAqIFdoZXRoZXIgdG8gYWxsb3cgdGhpcyBmdW5jdGlvbiB0byBsb2FkIHRoZSBjbGFzcyBhdXRvbWF0aWNhbGx5IHRocm91Z2gKICogdGhlIF9fYXV0b2xvYWQgbWFnaWMKICogbWV0aG9kLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nW118ZmFsc2UgQW4gYXJyYXkgb24gc3VjY2Vzcywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGNsYXNzX2ltcGxlbWVudHMoJG9iamVjdF9vcl9jbGFzcywgYm9vbCAkYXV0b2xvYWQgPSB0cnVlKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBSZXR1cm4gaGFzaCBpZCBmb3IgZ2l2ZW4gb2JqZWN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3BsLW9iamVjdC1oYXNoLnBocAogKiBAcGFyYW0gb2JqZWN0ICRvYmplY3QKICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgdGhhdCBpcyB1bmlxdWUgZm9yIGVhY2ggb2JqZWN0IGFuZCBpcyBhbHdheXMgdGhlIHNhbWUgZm9yCiAqIHRoZSBzYW1lIG9iamVjdC4KICovCiNbUHVyZV0KZnVuY3Rpb24gc3BsX29iamVjdF9oYXNoKG9iamVjdCAkb2JqZWN0KTogc3RyaW5nIHt9CgovKioKICogQ29weSB0aGUgaXRlcmF0b3IgaW50byBhbiBhcnJheQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLml0ZXJhdG9yLXRvLWFycmF5LnBocAogKiBAcGFyYW0gVHJhdmVyc2FibGUgJGl0ZXJhdG9yIDxwPgogKiBUaGUgaXRlcmF0b3IgYmVpbmcgY29waWVkLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRwcmVzZXJ2ZV9rZXlzIFtvcHRpb25hbF0gPHA+CiAqIFdoZXRoZXIgdG8gdXNlIHRoZSBpdGVyYXRvciBlbGVtZW50IGtleXMgYXMgaW5kZXguCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGUgaXRlcmF0b3IuCiAqLwpmdW5jdGlvbiBpdGVyYXRvcl90b19hcnJheSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjInID0+ICdUcmF2ZXJzYWJsZXxhcnJheSddLCBkZWZhdWx0OiAnVHJhdmVyc2FibGUnKV0gJGl0ZXJhdG9yLCBib29sICRwcmVzZXJ2ZV9rZXlzID0gdHJ1ZSk6IGFycmF5IHt9CgovKioKICogQ291bnQgdGhlIGVsZW1lbnRzIGluIGFuIGl0ZXJhdG9yCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaXRlcmF0b3ItY291bnQucGhwCiAqIEBwYXJhbSBUcmF2ZXJzYWJsZSAkaXRlcmF0b3IgPHA+CiAqIFRoZSBpdGVyYXRvciBiZWluZyBjb3VudGVkLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gaXRlcmF0b3IuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGl0ZXJhdG9yX2NvdW50KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMicgPT4gJ1RyYXZlcnNhYmxlfGFycmF5J10sIGRlZmF1bHQ6ICdUcmF2ZXJzYWJsZScpXSAkaXRlcmF0b3IpOiBpbnQge30KCi8qKgogKiBDYWxsIGEgZnVuY3Rpb24gZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gYW4gaXRlcmF0b3IKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pdGVyYXRvci1hcHBseS5waHAKICogQHBhcmFtIFRyYXZlcnNhYmxlICRpdGVyYXRvciA8cD4KICogVGhlIGNsYXNzIHRvIGl0ZXJhdGUgb3Zlci4KICogPC9wPgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIDxwPgogKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCBvbiBldmVyeSBlbGVtZW50LgogKiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gdHJ1ZSBpbiBvcmRlciB0bwogKiBjb250aW51ZSBpdGVyYXRpbmcgb3ZlciB0aGUgaXRlcmF0b3IuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5fG51bGwgJGFyZ3MgW29wdGlvbmFsXSA8cD4KICogQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IHRoZSBpdGVyYXRpb24gY291bnQuCiAqLwpmdW5jdGlvbiBpdGVyYXRvcl9hcHBseShUcmF2ZXJzYWJsZSAkaXRlcmF0b3IsIGNhbGxhYmxlICRjYWxsYmFjaywgP2FycmF5ICRhcmdzKTogaW50IHt9CgovLyBFbmQgb2YgU1BMIHYuMC4yCgovKioKICogUmV0dXJuIHRoZSB0cmFpdHMgdXNlZCBieSB0aGUgZ2l2ZW4gY2xhc3MKICogQHBhcmFtIG9iamVjdHxzdHJpbmcgJG9iamVjdF9vcl9jbGFzcyBBbiBvYmplY3QgKGNsYXNzIGluc3RhbmNlKSBvciBhIHN0cmluZyAoY2xhc3MgbmFtZSkuCiAqIEBwYXJhbSBib29sICRhdXRvbG9hZCBXaGV0aGVyIHRvIGFsbG93IHRoaXMgZnVuY3Rpb24gdG8gbG9hZCB0aGUgY2xhc3MgYXV0b21hdGljYWxseSB0aHJvdWdoIHRoZSBfX2F1dG9sb2FkKCkgbWFnaWMgbWV0aG9kLgogKiBAcmV0dXJuIHN0cmluZ1tdfGZhbHNlIEFuIGFycmF5IG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIGVycm9yLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmNsYXNzLXVzZXMucGhwCiAqIEBzZWUgY2xhc3NfcGFyZW50cygpCiAqIEBzZWUgZ2V0X2RlY2xhcmVkX3RyYWl0cygpCiAqIEBzaW5jZSA1LjQKICovCmZ1bmN0aW9uIGNsYXNzX3VzZXMoJG9iamVjdF9vcl9jbGFzcywgYm9vbCAkYXV0b2xvYWQgPSB0cnVlKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiByZXR1cm4gdGhlIGludGVnZXIgb2JqZWN0IGhhbmRsZSBmb3IgZ2l2ZW4gb2JqZWN0CiAqIEBwYXJhbSBvYmplY3QgJG9iamVjdAogKiBAcmV0dXJuIGludAogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzcGxfb2JqZWN0X2lkKG9iamVjdCAkb2JqZWN0KTogaW50IHt9Cjw/cGhwCgovLyBTdGFydCBvZiBTUEwgdi4wLjIKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxEZXByZWNhdGVkOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcVGVudGF0aXZlVHlwZTsKCi8qKgogKiBUaGUgU3BsRmlsZUluZm8gY2xhc3Mgb2ZmZXJzIGEgaGlnaC1sZXZlbCBvYmplY3Qgb3JpZW50ZWQgaW50ZXJmYWNlIHRvCiAqIGluZm9ybWF0aW9uIGZvciBhbiBpbmRpdmlkdWFsIGZpbGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3Muc3BsZmlsZWluZm8ucGhwCiAqLwpjbGFzcyBTcGxGaWxlSW5mbyBpbXBsZW1lbnRzIFN0cmluZ2FibGUKewogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgU3BsRmlsZUluZm8gb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVpbmZvLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRmaWxlbmFtZSkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIHBhdGggd2l0aG91dCBmaWxlbmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlaW5mby5nZXRwYXRoLnBocAogICAgICogQHJldHVybiBzdHJpbmcgdGhlIHBhdGggdG8gdGhlIGZpbGUuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhdGgoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBmaWxlbmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlaW5mby5nZXRmaWxlbmFtZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBmaWxlbmFtZS4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmlsZW5hbWUoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBmaWxlIGV4dGVuc2lvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlaW5mby5nZXRleHRlbnNpb24ucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBmaWxlIGV4dGVuc2lvbiwgb3IgYW4KICAgICAqIGVtcHR5IHN0cmluZyBpZiB0aGUgZmlsZSBoYXMgbm8gZXh0ZW5zaW9uLgogICAgICogQHNpbmNlIDUuMy42CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHRlbnNpb24oKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBiYXNlIG5hbWUgb2YgdGhlIGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8uZ2V0YmFzZW5hbWUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdWZmaXggW29wdGlvbmFsXSA8cD4KICAgICAqIE9wdGlvbmFsIHN1ZmZpeCB0byBvbWl0IGZyb20gdGhlIGJhc2UgbmFtZSByZXR1cm5lZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBiYXNlIG5hbWUgd2l0aG91dCBwYXRoIGluZm9ybWF0aW9uLgogICAgICogQHNpbmNlIDUuMi4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCYXNlbmFtZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkc3VmZml4ID0gJycpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIHBhdGggdG8gdGhlIGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8uZ2V0cGF0aG5hbWUucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgcGF0aCB0byB0aGUgZmlsZS4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF0aG5hbWUoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIGZpbGUgcGVybWlzc2lvbnMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8uZ2V0cGVybXMucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgZmlsZSBwZXJtaXNzaW9ucyBvbiBzdWNjZXNzLCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGVybXMoKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBpbm9kZSBmb3IgdGhlIGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8uZ2V0aW5vZGUucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgaW5vZGUgbnVtYmVyIGZvciB0aGUgZmlsZXN5c3RlbSBvYmplY3Qgb24gc3VjY2Vzcywgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbm9kZSgpOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldHMgZmlsZSBzaXplCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVpbmZvLmdldHNpemUucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgZmlsZXNpemUgaW4gYnl0ZXMgb24gc3VjY2Vzcywgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgb3duZXIgb2YgdGhlIGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8uZ2V0b3duZXIucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgb3duZXIgaWQgaW4gbnVtZXJpY2FsIGZvcm1hdCBvbiBzdWNjZXNzLCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldE93bmVyKCk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgZmlsZSBncm91cAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlaW5mby5nZXRncm91cC5waHAKICAgICAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBncm91cCBpZCBpbiBudW1lcmljYWwgZm9ybWF0IG9uIHN1Y2Nlc3MsIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0R3JvdXAoKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIGxhc3QgYWNjZXNzIHRpbWUgb2YgdGhlIGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8uZ2V0YXRpbWUucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgdGltZSB0aGUgZmlsZSB3YXMgbGFzdCBhY2Nlc3NlZCBvbiBzdWNjZXNzLCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEFUaW1lKCk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgbGFzdCBtb2RpZmllZCB0aW1lCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVpbmZvLmdldG10aW1lLnBocAogICAgICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIGxhc3QgbW9kaWZpZWQgdGltZSBmb3IgdGhlIGZpbGUsIGluIGEgVW5peCB0aW1lc3RhbXAgb24gc3VjY2Vzcywgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldE1UaW1lKCk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgaW5vZGUgY2hhbmdlIHRpbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8uZ2V0Y3RpbWUucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgbGFzdCBjaGFuZ2UgdGltZSwgaW4gYSBVbml4IHRpbWVzdGFtcCBvbiBzdWNjZXNzLCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENUaW1lKCk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogR2V0cyBmaWxlIHR5cGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8uZ2V0dHlwZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdHlwZSBvZiB0aGUgZW50cnkuIE1heSBiZSBvbmUgb2YgZmlsZSwgbGluaywgZGlyLCBibG9jaywgZmlmbywgY2hhciwgc29ja2V0LCBvciB1bmtub3duLCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIE1heSBiZSBvbmUgb2YgZmlsZSwgbGluaywKICAgICAqIG9yIGRpcgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFRlbGxzIGlmIHRoZSBlbnRyeSBpcyB3cml0YWJsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlaW5mby5pc3dyaXRhYmxlLnBocAogICAgICogQHJldHVybiBib29sIHRydWUgaWYgd3JpdGFibGUsIGZhbHNlIG90aGVyd2lzZTsKICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNXcml0YWJsZSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBUZWxscyBpZiBmaWxlIGlzIHJlYWRhYmxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVpbmZvLmlzcmVhZGFibGUucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiByZWFkYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlYWRhYmxlKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFRlbGxzIGlmIHRoZSBmaWxlIGlzIGV4ZWN1dGFibGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8uaXNleGVjdXRhYmxlLnBocAogICAgICogQHJldHVybiBib29sIHRydWUgaWYgZXhlY3V0YWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0V4ZWN1dGFibGUoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogVGVsbHMgaWYgdGhlIG9iamVjdCByZWZlcmVuY2VzIGEgcmVndWxhciBmaWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVpbmZvLmlzZmlsZS5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgaXMgYSByZWd1bGFyIGZpbGUgKG5vdCBhIGxpbmspLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGlzRmlsZSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBUZWxscyBpZiB0aGUgZmlsZSBpcyBhIGRpcmVjdG9yeQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlaW5mby5pc2Rpci5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIGEgZGlyZWN0b3J5LCBmYWxzZSBvdGhlcndpc2UuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGlzRGlyKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFRlbGxzIGlmIHRoZSBmaWxlIGlzIGEgbGluawogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlaW5mby5pc2xpbmsucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgZmlsZSBpcyBhIGxpbmssIGZhbHNlIG90aGVyd2lzZS4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNMaW5rKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIHRhcmdldCBvZiBhIGxpbmsKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8uZ2V0bGlua3RhcmdldC5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSB0YXJnZXQgb2YgdGhlIGZpbGVzeXN0ZW0gbGluayBvbiBzdWNjZXNzLCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSA1LjIuMgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldExpbmtUYXJnZXQoKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIGFic29sdXRlIHBhdGggdG8gZmlsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlaW5mby5nZXRyZWFscGF0aC5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBwYXRoIHRvIHRoZSBmaWxlLCBvciA8Yj5GQUxTRTwvYj4gaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QuCiAgICAgKiBAc2luY2UgNS4yLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlYWxQYXRoKCk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogR2V0cyBhbiBTcGxGaWxlSW5mbyBvYmplY3QgZm9yIHRoZSBmaWxlCiAgICAgKiBAdGVtcGxhdGUgVCBvZiBTcGxGaWxlSW5mbwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlaW5mby5nZXRmaWxlaW5mby5waHAKICAgICAqIEBwYXJhbSBjbGFzcy1zdHJpbmc8VD4gJGNsYXNzIFtvcHRpb25hbF0gPHA+CiAgICAgKiBOYW1lIG9mIGFuIDxiPlNwbEZpbGVJbmZvPC9iPiBkZXJpdmVkIGNsYXNzIHRvIHVzZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gVCBBbiA8Yj5TcGxGaWxlSW5mbzwvYj4gb2JqZWN0IGNyZWF0ZWQgZm9yIHRoZSBmaWxlLgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlSW5mbygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRjbGFzcyA9IG51bGwpOiBTcGxGaWxlSW5mbyB7fQoKICAgIC8qKgogICAgICogR2V0cyBhbiBTcGxGaWxlSW5mbyBvYmplY3QgZm9yIHRoZSBwYXRoCiAgICAgKiBAdGVtcGxhdGUgVCBvZiBTcGxGaWxlSW5mbwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlaW5mby5nZXRwYXRoaW5mby5waHAKICAgICAqIEBwYXJhbSBjbGFzcy1zdHJpbmc8VD4gJGNsYXNzIFtvcHRpb25hbF0gPHA+CiAgICAgKiBOYW1lIG9mIGFuIDxiPlNwbEZpbGVJbmZvPC9iPiBkZXJpdmVkIGNsYXNzIHRvIHVzZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gVHxudWxsIEEgPGI+U3BsRmlsZUluZm88L2I+IG9iamVjdCBmb3IgdGhlIHBhcmVudCBwYXRoIG9mIHRoZSBmaWxlIG9uIHN1Y2Nlc3MsIG9yIDxiPk5VTEw8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhdGhJbmZvKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGNsYXNzID0gbnVsbCk6ID9TcGxGaWxlSW5mbyB7fQoKICAgIC8qKgogICAgICogR2V0cyBhbiBTcGxGaWxlT2JqZWN0IG9iamVjdCBmb3IgdGhlIGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8ub3BlbmZpbGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2RlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgbW9kZSBmb3Igb3BlbmluZyB0aGUgZmlsZS4gU2VlIHRoZSA8Yj5mb3BlbjwvYj4KICAgICAqIGRvY3VtZW50YXRpb24gZm9yIGRlc2NyaXB0aW9ucyBvZiBwb3NzaWJsZSBtb2Rlcy4gVGhlIGRlZmF1bHQKICAgICAqIGlzIHJlYWQgb25seS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBib29sICR1c2VJbmNsdWRlUGF0aCBbb3B0aW9uYWxdIDxwPgogICAgICogPC9wPgogICAgICogQHBhcmFtIHJlc291cmNlICRjb250ZXh0IFtvcHRpb25hbF0gPHA+CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIFNwbEZpbGVPYmplY3QgVGhlIG9wZW5lZCBmaWxlIGFzIGFuIDxiPlNwbEZpbGVPYmplY3Q8L2I+IG9iamVjdC4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBJZiB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkIChlLmcuIGluc3VmZmljaWVudCBhY2Nlc3MgcmlnaHRzKS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG9wZW5GaWxlKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRtb2RlID0gJ3InLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkdXNlSW5jbHVkZVBhdGggPSBmYWxzZSwKICAgICAgICAkY29udGV4dCA9IG51bGwKICAgICk6IFNwbEZpbGVPYmplY3Qge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGNsYXNzIG5hbWUgdXNlZCB3aXRoIDxiPlNwbEZpbGVJbmZvOjpvcGVuRmlsZTwvYj4KICAgICAqIEB0ZW1wbGF0ZSBUIG9mIFNwbEZpbGVPYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8uc2V0ZmlsZWNsYXNzLnBocAogICAgICogQHBhcmFtIGNsYXNzLXN0cmluZzxUPiAkY2xhc3MgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBjbGFzcyBuYW1lIHRvIHVzZSB3aGVuIG9wZW5GaWxlKCkgaXMgY2FsbGVkLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldEZpbGVDbGFzcygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY2xhc3MgPSBTcGxGaWxlT2JqZWN0OjpjbGFzcyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGNsYXNzIHVzZWQgd2l0aCBnZXRGaWxlSW5mbyBhbmQgZ2V0UGF0aEluZm8KICAgICAqIEB0ZW1wbGF0ZSBUIG9mIFNwbEZpbGVJbmZvCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVpbmZvLnNldGluZm9jbGFzcy5waHAKICAgICAqIEBwYXJhbSBjbGFzcy1zdHJpbmc8VD4gJGNsYXNzIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgY2xhc3MgbmFtZSB0byB1c2UuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW5mb0NsYXNzKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRjbGFzcyA9IFNwbEZpbGVJbmZvOjpjbGFzcyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHBhdGggdG8gdGhlIGZpbGUgYXMgYSBzdHJpbmcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZWluZm8udG9zdHJpbmcucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgcGF0aCB0byB0aGUgZmlsZS4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKSB7fQoKICAgICNbVGVudGF0aXZlVHlwZV0KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBfYmFkX3N0YXRlX2V4KCk6IHZvaWQge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX193YWtldXAoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICogQHNpbmNlIDcuNAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZWJ1Z0luZm8oKTogYXJyYXkge30KfQoKLyoqCiAqIFRoZSBEaXJlY3RvcnlJdGVyYXRvciBjbGFzcyBwcm92aWRlcyBhIHNpbXBsZSBpbnRlcmZhY2UgZm9yIHZpZXdpbmcKICogdGhlIGNvbnRlbnRzIG9mIGZpbGVzeXN0ZW0gZGlyZWN0b3JpZXMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZGlyZWN0b3J5aXRlcmF0b3IucGhwCiAqLwpjbGFzcyBEaXJlY3RvcnlJdGVyYXRvciBleHRlbmRzIFNwbEZpbGVJbmZvIGltcGxlbWVudHMgU2Vla2FibGVJdGVyYXRvcgp7CiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYSBuZXcgZGlyZWN0b3J5IGl0ZXJhdG9yIGZyb20gYSBwYXRoCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RpcmVjdG9yeWl0ZXJhdG9yLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeQogICAgICogQHRocm93cyBVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gaWYgdGhlIHBhdGggY2Fubm90IGJlIG9wZW5lZC4KICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgcGF0aCBpcyBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZGlyZWN0b3J5KSB7fQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lIGlmIGN1cnJlbnQgRGlyZWN0b3J5SXRlcmF0b3IgaXRlbSBpcyAnLicgb3IgJy4uJwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kaXJlY3RvcnlpdGVyYXRvci5pc2RvdC5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBlbnRyeSBpcyAuIG9yIC4uLAogICAgICogb3RoZXJ3aXNlIGZhbHNlCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0RvdCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXdpbmQgdGhlIERpcmVjdG9yeUl0ZXJhdG9yIGJhY2sgdG8gdGhlIHN0YXJ0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RpcmVjdG9yeWl0ZXJhdG9yLnJld2luZC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgY3VycmVudCBEaXJlY3RvcnlJdGVyYXRvciBwb3NpdGlvbiBpcyBhIHZhbGlkIGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZGlyZWN0b3J5aXRlcmF0b3IudmFsaWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gaXMgdmFsaWQsIG90aGVyd2lzZSBmYWxzZQogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBrZXkgZm9yIHRoZSBjdXJyZW50IERpcmVjdG9yeUl0ZXJhdG9yIGl0ZW0KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZGlyZWN0b3J5aXRlcmF0b3Iua2V5LnBocAogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGtleSBmb3IgdGhlIGN1cnJlbnQgPGI+RGlyZWN0b3J5SXRlcmF0b3I8L2I+IGl0ZW0uCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgY3VycmVudCBEaXJlY3RvcnlJdGVyYXRvciBpdGVtLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kaXJlY3RvcnlpdGVyYXRvci5jdXJyZW50LnBocAogICAgICogQHJldHVybiBEaXJlY3RvcnlJdGVyYXRvciBUaGUgY3VycmVudCA8Yj5EaXJlY3RvcnlJdGVyYXRvcjwvYj4gaXRlbS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIE1vdmUgZm9yd2FyZCB0byBuZXh0IERpcmVjdG9yeUl0ZXJhdG9yIGl0ZW0KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZGlyZWN0b3J5aXRlcmF0b3IubmV4dC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBTZWVrIHRvIGEgRGlyZWN0b3J5SXRlcmF0b3IgaXRlbQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kaXJlY3RvcnlpdGVyYXRvci5zZWVrLnBocAogICAgICogQHBhcmFtIGludCAkb2Zmc2V0IDxwPgogICAgICogVGhlIHplcm8tYmFzZWQgbnVtZXJpYyBwb3NpdGlvbiB0byBzZWVrIHRvLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRvZmZzZXQpOiB2b2lkIHt9Cn0KCi8qKgogKiBUaGUgRmlsZXN5c3RlbSBpdGVyYXRvcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmZpbGVzeXN0ZW1pdGVyYXRvci5waHAKICovCmNsYXNzIEZpbGVzeXN0ZW1JdGVyYXRvciBleHRlbmRzIERpcmVjdG9yeUl0ZXJhdG9yCnsKICAgIHB1YmxpYyBjb25zdCBDVVJSRU5UX01PREVfTUFTSyA9IDI0MDsKICAgIHB1YmxpYyBjb25zdCBDVVJSRU5UX0FTX1BBVEhOQU1FID0gMzI7CiAgICBwdWJsaWMgY29uc3QgQ1VSUkVOVF9BU19GSUxFSU5GTyA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ1VSUkVOVF9BU19TRUxGID0gMTY7CiAgICBwdWJsaWMgY29uc3QgS0VZX01PREVfTUFTSyA9IDM4NDA7CiAgICBwdWJsaWMgY29uc3QgS0VZX0FTX1BBVEhOQU1FID0gMDsKICAgIHB1YmxpYyBjb25zdCBGT0xMT1dfU1lNTElOS1MgPSAxNjM4NDsKICAgIHB1YmxpYyBjb25zdCBLRVlfQVNfRklMRU5BTUUgPSAyNTY7CiAgICBwdWJsaWMgY29uc3QgTkVXX0NVUlJFTlRfQU5EX0tFWSA9IDI1NjsKICAgIHB1YmxpYyBjb25zdCBTS0lQX0RPVFMgPSA0MDk2OwogICAgcHVibGljIGNvbnN0IFVOSVhfUEFUSFMgPSA4MTkyOwogICAgcHVibGljIGNvbnN0IE9USEVSX01PREVfTUFTSyA9IDI4NjcyOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyBhIG5ldyBmaWxlc3lzdGVtIGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ZpbGVzeXN0ZW1pdGVyYXRvci5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaXJlY3RvcnkKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0KICAgICAqIEB0aHJvd3MgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uIGlmIHRoZSBwYXRoIGNhbm5vdCBiZSBmb3VuZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRkaXJlY3RvcnksCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gRmlsZXN5c3RlbUl0ZXJhdG9yOjpLRVlfQVNfUEFUSE5BTUV8RmlsZXN5c3RlbUl0ZXJhdG9yOjpDVVJSRU5UX0FTX0ZJTEVJTkZPfEZpbGVzeXN0ZW1JdGVyYXRvcjo6U0tJUF9ET1RTCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBSZXdpbmRzIGJhY2sgdG8gdGhlIGJlZ2lubmluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9maWxlc3lzdGVtaXRlcmF0b3IucmV3aW5kLnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogTW92ZSB0byB0aGUgbmV4dCBmaWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ZpbGVzeXN0ZW1pdGVyYXRvci5uZXh0LnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCkge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBrZXkgZm9yIHRoZSBjdXJyZW50IGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZmlsZXN5c3RlbWl0ZXJhdG9yLmtleS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBwYXRobmFtZSBvciBmaWxlbmFtZSBkZXBlbmRpbmcgb24gdGhlIHNldCBmbGFncy4KICAgICAqIFNlZSB0aGUgRmlsZXN5c3RlbUl0ZXJhdG9yIGNvbnN0YW50cy4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIFRoZSBjdXJyZW50IGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZmlsZXN5c3RlbWl0ZXJhdG9yLmN1cnJlbnQucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xTcGxGaWxlSW5mb3xzZWxmIFRoZSBmaWxlbmFtZSwgZmlsZSBpbmZvcm1hdGlvbiwgb3IgJHRoaXMgZGVwZW5kaW5nIG9uIHRoZSBzZXQgZmxhZ3MuCiAgICAgKiBTZWUgdGhlIEZpbGVzeXN0ZW1JdGVyYXRvciBjb25zdGFudHMuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCk6IFNwbEZpbGVJbmZvfEZpbGVzeXN0ZW1JdGVyYXRvcnxzdHJpbmcge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgaGFuZGxpbmcgZmxhZ3MKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZmlsZXN5c3RlbWl0ZXJhdG9yLmdldGZsYWdzLnBocAogICAgICogQHJldHVybiBpbnQgVGhlIGludGVnZXIgdmFsdWUgb2YgdGhlIHNldCBmbGFncy4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZsYWdzKCk6IGludCB7fQoKICAgIC8qKgogICAgICogU2V0cyBoYW5kbGluZyBmbGFncwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9maWxlc3lzdGVtaXRlcmF0b3Iuc2V0ZmxhZ3MucGhwCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyA8cD4KICAgICAqIFRoZSBoYW5kbGluZyBmbGFncyB0byBzZXQuCiAgICAgKiBTZWUgdGhlIEZpbGVzeXN0ZW1JdGVyYXRvciBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldEZsYWdzKAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRmbGFncyA9IG51bGwsCiAgICAgICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIGludCAkZmxhZ3MKICAgICk6IHZvaWQge30KfQoKLyoqCiAqIFRoZSA8Yj5SZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcjwvYj4gcHJvdmlkZXMKICogYW4gaW50ZXJmYWNlIGZvciBpdGVyYXRpbmcgcmVjdXJzaXZlbHkgb3ZlciBmaWxlc3lzdGVtIGRpcmVjdG9yaWVzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnJlY3Vyc2l2ZWRpcmVjdG9yeWl0ZXJhdG9yLnBocAogKi8KY2xhc3MgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IgZXh0ZW5kcyBGaWxlc3lzdGVtSXRlcmF0b3IgaW1wbGVtZW50cyBSZWN1cnNpdmVJdGVyYXRvcgp7CiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYSBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmVkaXJlY3RvcnlpdGVyYXRvci5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaXJlY3RvcnkKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0KICAgICAqIEB0aHJvd3MgVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uIGlmIHRoZSBwYXRoIGNhbm5vdCBiZSBmb3VuZCBvciBpcyBub3QgYSBkaXJlY3RvcnkuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRkaXJlY3RvcnksCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gRmlsZXN5c3RlbUl0ZXJhdG9yOjpLRVlfQVNfUEFUSE5BTUV8RmlsZXN5c3RlbUl0ZXJhdG9yOjpDVVJSRU5UX0FTX0ZJTEVJTkZPCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgY3VycmVudCBlbnRyeSBpcyBhIGRpcmVjdG9yeSBhbmQgbm90ICcuJyBvciAnLi4nCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWRpcmVjdG9yeWl0ZXJhdG9yLmhhc2NoaWxkcmVuLnBocAogICAgICogQHBhcmFtIGJvb2wgJGFsbG93TGlua3MgW29wdGlvbmFsXSA8cD4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCB3aGV0aGVyIHRoZSBjdXJyZW50IGVudHJ5IGlzIGEgZGlyZWN0b3J5LCBidXQgbm90ICcuJyBvciAnLi4nCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNDaGlsZHJlbigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJGFsbG93TGlua3MgPSBmYWxzZSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gaXRlcmF0b3IgZm9yIHRoZSBjdXJyZW50IGVudHJ5IGlmIGl0IGlzIGEgZGlyZWN0b3J5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlY3Vyc2l2ZWRpcmVjdG9yeWl0ZXJhdG9yLmdldGNoaWxkcmVuLnBocAogICAgICogQHJldHVybiBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvciBBbiBpdGVyYXRvciBmb3IgdGhlIGN1cnJlbnQgZW50cnksIGlmIGl0IGlzIGEgZGlyZWN0b3J5LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hpbGRyZW4oKTogUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3Ige30KCiAgICAvKioKICAgICAqIEdldCBzdWIgcGF0aAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWN1cnNpdmVkaXJlY3RvcnlpdGVyYXRvci5nZXRzdWJwYXRoLnBocAogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHN1YiBwYXRoIChzdWIgZGlyZWN0b3J5KS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFN1YlBhdGgoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXQgc3ViIHBhdGggYW5kIG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVjdXJzaXZlZGlyZWN0b3J5aXRlcmF0b3IuZ2V0c3VicGF0aG5hbWUucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgc3ViIHBhdGggKHN1YiBkaXJlY3RvcnkpIGFuZCBmaWxlbmFtZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFN1YlBhdGhuYW1lKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogUmV3aW5kcyBiYWNrIHRvIHRoZSBiZWdpbm5pbmcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZmlsZXN5c3RlbWl0ZXJhdG9yLnJld2luZC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCkge30KCiAgICAvKioKICAgICAqIE1vdmUgdG8gdGhlIG5leHQgZmlsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9maWxlc3lzdGVtaXRlcmF0b3IubmV4dC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUga2V5IGZvciB0aGUgY3VycmVudCBmaWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ZpbGVzeXN0ZW1pdGVyYXRvci5rZXkucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgcGF0aG5hbWUgb3IgZmlsZW5hbWUgZGVwZW5kaW5nIG9uIHRoZSBzZXQgZmxhZ3MuCiAgICAgKiBTZWUgdGhlIEZpbGVzeXN0ZW1JdGVyYXRvciBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKSB7fQoKICAgIC8qKgogICAgICogVGhlIGN1cnJlbnQgZmlsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9maWxlc3lzdGVtaXRlcmF0b3IuY3VycmVudC5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfFNwbEZpbGVJbmZvfHNlbGYgVGhlIGZpbGVuYW1lLCBmaWxlIGluZm9ybWF0aW9uLCBvciAkdGhpcyBkZXBlbmRpbmcgb24gdGhlIHNldCBmbGFncy4KICAgICAqIFNlZSB0aGUgRmlsZXN5c3RlbUl0ZXJhdG9yIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKSB7fQp9CgovKioKICogSXRlcmF0ZXMgdGhyb3VnaCBhIGZpbGUgc3lzdGVtIGluIGEgc2ltaWxhciBmYXNoaW9uIHRvCiAqIDxiPmdsb2I8L2I+LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmdsb2JpdGVyYXRvci5waHAKICovCmNsYXNzIEdsb2JJdGVyYXRvciBleHRlbmRzIEZpbGVzeXN0ZW1JdGVyYXRvciBpbXBsZW1lbnRzIENvdW50YWJsZQp7CiAgICAvKioKICAgICAqIENvbnN0cnVjdCBhIGRpcmVjdG9yeSB1c2luZyBnbG9iCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dsb2JpdGVyYXRvci5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gJHBhdHRlcm4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRwYXR0ZXJuLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IEZpbGVzeXN0ZW1JdGVyYXRvcjo6S0VZX0FTX1BBVEhOQU1FfEZpbGVzeXN0ZW1JdGVyYXRvcjo6Q1VSUkVOVF9BU19GSUxFSU5GTwogICAgKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBudW1iZXIgb2YgZGlyZWN0b3JpZXMgYW5kIGZpbGVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dsb2JpdGVyYXRvci5jb3VudC5waHAKICAgICAqIEByZXR1cm4gaW50PDAsbWF4PiBUaGUgbnVtYmVyIG9mIHJldHVybmVkIGRpcmVjdG9yaWVzIGFuZCBmaWxlcywgYXMgYW4KICAgICAqIGludGVnZXIuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQge30KfQoKLyoqCiAqIFRoZSBTcGxGaWxlT2JqZWN0IGNsYXNzIG9mZmVycyBhbiBvYmplY3Qgb3JpZW50ZWQgaW50ZXJmYWNlIGZvciBhIGZpbGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3Muc3BsZmlsZW9iamVjdC5waHAKICovCmNsYXNzIFNwbEZpbGVPYmplY3QgZXh0ZW5kcyBTcGxGaWxlSW5mbyBpbXBsZW1lbnRzIFJlY3Vyc2l2ZUl0ZXJhdG9yLCBTZWVrYWJsZUl0ZXJhdG9yCnsKICAgIC8qKgogICAgICogRHJvcCBuZXdsaW5lcyBhdCB0aGUgZW5kIG9mIGEgbGluZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IERST1BfTkVXX0xJTkUgPSAxOwoKICAgIC8qKgogICAgICogUmVhZCBvbiByZXdpbmQvbmV4dC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFQURfQUhFQUQgPSAyOwoKICAgIC8qKgogICAgICogU2tpcCBlbXB0eSBsaW5lcyBpbiB0aGUgZmlsZS4gVGhpcyByZXF1aXJlcyB0aGUge0BzZWUgUkVBRF9BSEVBRH0gZmxhZyB0byB3b3JrIGFzIGV4cGVjdGVkLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0tJUF9FTVBUWSA9IDQ7CgogICAgLyoqCiAgICAgKiBSZWFkIGxpbmVzIGFzIENTViByb3dzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVBRF9DU1YgPSA4OwoKICAgIC8qKgogICAgICogQ29uc3RydWN0IGEgbmV3IGZpbGUgb2JqZWN0LgogICAgICoKICAgICAqIEBsaW5rICBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVvYmplY3QuY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBmaWxlIHRvIG9wZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZGUgW29wdGlvbmFsXSBUaGUgbW9kZSBpbiB3aGljaCB0byBvcGVuIHRoZSBmaWxlLiBTZWUge0BzZWUgZm9wZW59IGZvciBhIGxpc3Qgb2YgYWxsb3dlZCBtb2Rlcy4KICAgICAqIEBwYXJhbSBib29sICR1c2VJbmNsdWRlUGF0aCBbb3B0aW9uYWxdIFdoZXRoZXIgdG8gc2VhcmNoIGluIHRoZSBpbmNsdWRlX3BhdGggZm9yIGZpbGVuYW1lCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJGNvbnRleHQgW29wdGlvbmFsXSBBIHZhbGlkIGNvbnRleHQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIHtAc2VlIHN0cmVhbV9jb250ZXh0X2NyZWF0ZX0KICAgICAqCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gV2hlbiB0aGUgZmlsZW5hbWUgY2Fubm90IGJlIG9wZW5lZAogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBXaGVuIHRoZSBmaWxlbmFtZSBpcyBhIGRpcmVjdG9yeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGZpbGVuYW1lLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRtb2RlID0gJ3InLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkdXNlSW5jbHVkZVBhdGggPSBmYWxzZSwKICAgICAgICAkY29udGV4dCA9IG51bGwKICAgICkge30KCiAgICAvKioKICAgICAqIFJld2luZCB0aGUgZmlsZSB0byB0aGUgZmlyc3QgbGluZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlb2JqZWN0LnJld2luZC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBJZiBjYW5ub3QgYmUgcmV3b3VuZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFJlYWNoZWQgZW5kIG9mIGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC5lb2YucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiBmaWxlIGlzIGF0IEVPRiwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZW9mKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIE5vdCBhdCBFT0YKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC52YWxpZC5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIG5vdCByZWFjaGVkIEVPRiwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogR2V0cyBsaW5lIGZyb20gZmlsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlb2JqZWN0LmZnZXRzLnBocAogICAgICogQHJldHVybiBzdHJpbmcgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmV4dCBsaW5lIGZyb20gdGhlIGZpbGUuCiAgICAgKgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIElmIHRoZSBmaWxlIGNhbm5vdCBiZSByZWFkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBmZ2V0cygpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIFJlYWQgZnJvbSBmaWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVvYmplY3QuZnJlYWQucGhwCiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGggPHA+CiAgICAgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSByZXR1cm5zIHRoZSBzdHJpbmcgcmVhZCBmcm9tIHRoZSBmaWxlIG9yIEZBTFNFIG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS41LjExCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBmcmVhZCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbGVuZ3RoKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIGxpbmUgZnJvbSBmaWxlIGFuZCBwYXJzZSBhcyBDU1YgZmllbGRzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVvYmplY3QuZmdldGNzdi5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcGFyYXRvciBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGZpZWxkIGRlbGltaXRlciAob25lIGNoYXJhY3RlciBvbmx5KS4gRGVmYXVsdHMgYXMgYSBjb21tYSBvciB0aGUgdmFsdWUgc2V0IHVzaW5nIDxiPlNwbEZpbGVPYmplY3Q6OnNldENzdkNvbnRyb2w8L2I+LgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkZW5jbG9zdXJlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZmllbGQgZW5jbG9zdXJlIGNoYXJhY3RlciAob25lIGNoYXJhY3RlciBvbmx5KS4gRGVmYXVsdHMgYXMgYSBkb3VibGUgcXVvdGF0aW9uIG1hcmsgb3IgdGhlIHZhbHVlIHNldCB1c2luZyA8Yj5TcGxGaWxlT2JqZWN0OjpzZXRDc3ZDb250cm9sPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGVzY2FwZSBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGVzY2FwZSBjaGFyYWN0ZXIgKG9uZSBjaGFyYWN0ZXIgb25seSkuIERlZmF1bHRzIGFzIGEgYmFja3NsYXNoIChcKSBvciB0aGUgdmFsdWUgc2V0IHVzaW5nIDxiPlNwbEZpbGVPYmplY3Q6OnNldENzdkNvbnRyb2w8L2I+LgogICAgICogPC9wPgogICAgICogQHJldHVybiBhcnJheXxmYWxzZXxudWxsIGFuIGluZGV4ZWQgYXJyYXkgY29udGFpbmluZyB0aGUgZmllbGRzIHJlYWQsIG9yIGZhbHNlIG9uIGVycm9yLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBBIGJsYW5rIGxpbmUgaW4gYSBDU1YgZmlsZSB3aWxsIGJlIHJldHVybmVkIGFzIGFuIGFycmF5CiAgICAgKiBjb21wcmlzaW5nIGEgc2luZ2xlIG51bGwgZmllbGQgdW5sZXNzIHVzaW5nIDxiPlNwbEZpbGVPYmplY3Q6OlNLSVBfRU1QVFkgfCBTcGxGaWxlT2JqZWN0OjpEUk9QX05FV19MSU5FPC9iPiwKICAgICAqIGluIHdoaWNoIGNhc2UgZW1wdHkgbGluZXMgYXJlIHNraXBwZWQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2FycmF5fGZhbHNlJ10sIGRlZmF1bHQ6ICdhcnJheXxmYWxzZXxudWxsJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gZmdldGNzdigKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkc2VwYXJhdG9yID0gIiwiLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRlbmNsb3N1cmUgPSAiXCIiLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRlc2NhcGUgPSAiXFwiCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBXcml0ZSBhIGZpZWxkIGFycmF5IGFzIGEgQ1NWIGxpbmUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC5mcHV0Y3N2LnBocAogICAgICogQHBhcmFtIGFycmF5ICRmaWVsZHMgQW4gYXJyYXkgb2YgdmFsdWVzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXBhcmF0b3IgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBmaWVsZCBkZWxpbWl0ZXIgKG9uZSBjaGFyYWN0ZXIgb25seSkuIERlZmF1bHRzIGFzIGEgY29tbWEgb3IgdGhlIHZhbHVlIHNldCB1c2luZyA8Yj5TcGxGaWxlT2JqZWN0OjpzZXRDc3ZDb250cm9sPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY2xvc3VyZSBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGZpZWxkIGVuY2xvc3VyZSBjaGFyYWN0ZXIgKG9uZSBjaGFyYWN0ZXIgb25seSkuIERlZmF1bHRzIGFzIGEgZG91YmxlIHF1b3RhdGlvbiBtYXJrIG9yIHRoZSB2YWx1ZSBzZXQgdXNpbmcgPGI+U3BsRmlsZU9iamVjdDo6c2V0Q3N2Q29udHJvbDwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRlc2NhcGUgVGhlIG9wdGlvbmFsIGVzY2FwZSBwYXJhbWV0ZXIgc2V0cyB0aGUgZXNjYXBlIGNoYXJhY3RlciAob25lIGNoYXJhY3RlciBvbmx5KS4KICAgICAqIEByZXR1cm4gaW50fGZhbHNlIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgd3JpdHRlbiBzdHJpbmcgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSA1LjQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGZwdXRjc3YoCiAgICAgICAgYXJyYXkgJGZpZWxkcywKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkc2VwYXJhdG9yID0gJywnLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRlbmNsb3N1cmUgPSAnIicsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGVzY2FwZSA9ICJcXCIsCiAgICAgICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZSgnOC4xJyldIHN0cmluZyAkZW9sID0gUEhQX0VPTAogICAgKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGRlbGltaXRlciBhbmQgZW5jbG9zdXJlIGNoYXJhY3RlciBmb3IgQ1NWCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVvYmplY3Quc2V0Y3N2Y29udHJvbC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcGFyYXRvciBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGZpZWxkIGRlbGltaXRlciAob25lIGNoYXJhY3RlciBvbmx5KS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY2xvc3VyZSBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGZpZWxkIGVuY2xvc3VyZSBjaGFyYWN0ZXIgKG9uZSBjaGFyYWN0ZXIgb25seSkuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRlc2NhcGUgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBmaWVsZCBlc2NhcGUgY2hhcmFjdGVyIChvbmUgY2hhcmFjdGVyIG9ubHkpLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDc3ZDb250cm9sKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRzZXBhcmF0b3IgPSAiLCIsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGVuY2xvc3VyZSA9ICJcIiIsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGVzY2FwZSA9ICJcXCIKICAgICk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgZGVsaW1pdGVyIGFuZCBlbmNsb3N1cmUgY2hhcmFjdGVyIGZvciBDU1YKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC5nZXRjc3Zjb250cm9sLnBocAogICAgICogQHJldHVybiBhcnJheSBhbiBpbmRleGVkIGFycmF5IGNvbnRhaW5pbmcgdGhlIGRlbGltaXRlciBhbmQgZW5jbG9zdXJlIGNoYXJhY3Rlci4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENzdkNvbnRyb2woKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIFBvcnRhYmxlIGZpbGUgbG9ja2luZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlb2JqZWN0LmZsb2NrLnBocAogICAgICogQHBhcmFtIGludCAkb3BlcmF0aW9uIDxwPgogICAgICogPGk+b3BlcmF0aW9uPC9pPiBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgICAqIDxiPkxPQ0tfU0g8L2I+IHRvIGFjcXVpcmUgYSBzaGFyZWQgbG9jayAocmVhZGVyKS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJiR3b3VsZEJsb2NrIFtvcHRpb25hbF0gPHA+CiAgICAgKiBTZXQgdG8gMSBpZiB0aGUgbG9jayB3b3VsZCBibG9jayAoRVdPVUxEQkxPQ0sgZXJybm8gY29uZGl0aW9uKS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGZsb2NrKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRvcGVyYXRpb24sICYkd291bGRCbG9jayA9IG51bGwpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBGbHVzaGVzIHRoZSBvdXRwdXQgdG8gdGhlIGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC5mZmx1c2gucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBmZmx1c2goKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIGN1cnJlbnQgZmlsZSBwb3NpdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlb2JqZWN0LmZ0ZWxsLnBocAogICAgICogQHJldHVybiBpbnR8ZmFsc2UgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaWxlIHBvaW50ZXIgYXMgYW4gaW50ZWdlciwgb3IgZmFsc2Ugb24gZXJyb3IuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBmdGVsbCgpOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFNlZWsgdG8gYSBwb3NpdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlb2JqZWN0LmZzZWVrLnBocAogICAgICogQHBhcmFtIGludCAkb2Zmc2V0IDxwPgogICAgICogVGhlIG9mZnNldC4gQSBuZWdhdGl2ZSB2YWx1ZSBjYW4gYmUgdXNlZCB0byBtb3ZlIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBmaWxlIHdoaWNoCiAgICAgKiBpcyB1c2VmdWwgd2hlbiBTRUVLX0VORCBpcyB1c2VkIGFzIHRoZSA8aT53aGVuY2U8L2k+IHZhbHVlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkd2hlbmNlIFtvcHRpb25hbF0gPHA+CiAgICAgKiA8aT53aGVuY2U8L2k+IHZhbHVlcyBhcmU6CiAgICAgKiA8Yj5TRUVLX1NFVDwvYj4gLSBTZXQgcG9zaXRpb24gZXF1YWwgdG8gPGk+b2Zmc2V0PC9pPiBieXRlcy4KICAgICAqIDxiPlNFRUtfQ1VSPC9iPiAtIFNldCBwb3NpdGlvbiB0byBjdXJyZW50IGxvY2F0aW9uIHBsdXMgPGk+b2Zmc2V0PC9pPi4KICAgICAqIDxiPlNFRUtfRU5EPC9iPiAtIFNldCBwb3NpdGlvbiB0byBlbmQtb2YtZmlsZSBwbHVzIDxpPm9mZnNldDwvaT4uCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIElmIDxpPndoZW5jZTwvaT4gaXMgbm90IHNwZWNpZmllZCwgaXQgaXMgYXNzdW1lZCB0byBiZSA8Yj5TRUVLX1NFVDwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludCAwIGlmIHRoZSBzZWVrIHdhcyBzdWNjZXNzZnVsLCAtMSBvdGhlcndpc2UuIE5vdGUgdGhhdCBzZWVraW5nCiAgICAgKiBwYXN0IEVPRiBpcyBub3QgY29uc2lkZXJlZCBhbiBlcnJvci4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGZzZWVrKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRvZmZzZXQsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHdoZW5jZSA9IFNFRUtfU0VUCiAgICApOiBpbnQge30KCiAgICAvKioKICAgICAqIEdldHMgY2hhcmFjdGVyIGZyb20gZmlsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlb2JqZWN0LmZnZXRjLnBocAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgYSBzdHJpbmcgY29udGFpbmluZyBhIHNpbmdsZSBjaGFyYWN0ZXIgcmVhZCBmcm9tIHRoZSBmaWxlIG9yIGZhbHNlIG9uIEVPRi4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGZnZXRjKCk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogT3V0cHV0IGFsbCByZW1haW5pbmcgZGF0YSBvbiBhIGZpbGUgcG9pbnRlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlb2JqZWN0LmZwYXNzdGhydS5waHAKICAgICAqIEByZXR1cm4gaW50IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGZyb20gPGk+aGFuZGxlPC9pPgogICAgICogYW5kIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBmcGFzc3RocnUoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBHZXRzIGxpbmUgZnJvbSBmaWxlIGFuZCBzdHJpcCBIVE1MIHRhZ3MKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC5mZ2V0c3MucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhbGxvd2FibGVfdGFncyBbb3B0aW9uYWxdIDxwPgogICAgICogWW91IGNhbiB1c2UgdGhlIG9wdGlvbmFsIHRoaXJkIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRhZ3Mgd2hpY2ggc2hvdWxkCiAgICAgKiBub3QgYmUgc3RyaXBwZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuZXh0IGxpbmUgb2YgdGhlIGZpbGUgd2l0aCBIVE1MIGFuZCBQSFAKICAgICAqIGNvZGUgc3RyaXBwZWQsIG9yIGZhbHNlIG9uIGVycm9yLgogICAgICogQHJlbW92ZWQgOC4wCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZChzaW5jZTogJzcuMycpXQogICAgcHVibGljIGZ1bmN0aW9uIGZnZXRzcygkYWxsb3dhYmxlX3RhZ3MgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUGFyc2VzIGlucHV0IGZyb20gZmlsZSBhY2NvcmRpbmcgdG8gYSBmb3JtYXQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC5mc2NhbmYucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmb3JtYXQgPHA+CiAgICAgKiBUaGUgc3BlY2lmaWVkIGZvcm1hdCBhcyBkZXNjcmliZWQgaW4gdGhlIDxiPnNwcmludGY8L2I+IGRvY3VtZW50YXRpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gbWl4ZWQgJi4uLiR2YXJzIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgb3B0aW9uYWwgYXNzaWduZWQgdmFsdWVzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBhcnJheXxpbnR8bnVsbCBJZiBvbmx5IG9uZSBwYXJhbWV0ZXIgaXMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLCB0aGUgdmFsdWVzIHBhcnNlZCB3aWxsIGJlCiAgICAgKiByZXR1cm5lZCBhcyBhbiBhcnJheS4gT3RoZXJ3aXNlLCBpZiBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQsIHRoZQogICAgICogZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiBhc3NpZ25lZCB2YWx1ZXMuIFRoZSBvcHRpb25hbAogICAgICogcGFyYW1ldGVycyBtdXN0IGJlIHBhc3NlZCBieSByZWZlcmVuY2UuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBmc2NhbmYoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGZvcm1hdCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICYuLi4kdmFycwogICAgKTogYXJyYXl8aW50fG51bGwge30KCiAgICAvKioKICAgICAqIFdyaXRlIHRvIGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC5md3JpdGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPgogICAgICogVGhlIHN0cmluZyB0byBiZSB3cml0dGVuIHRvIHRoZSBmaWxlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkbGVuZ3RoIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJZiB0aGUgPGk+bGVuZ3RoPC9pPiBhcmd1bWVudCBpcyBnaXZlbiwgd3JpdGluZyB3aWxsCiAgICAgKiBzdG9wIGFmdGVyIDxpPmxlbmd0aDwvaT4gYnl0ZXMgaGF2ZSBiZWVuIHdyaXR0ZW4gb3IKICAgICAqIHRoZSBlbmQgb2YgPGk+c3RyaW5nPC9pPiBpcyByZWFjaGVkLCB3aGljaGV2ZXIgY29tZXMKICAgICAqIGZpcnN0LgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnR8ZmFsc2UgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCBvciAwIChmYWxzZSBzaW5jZSA3LjQpIG9uIGVycm9yLgogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc3LjQnID0+ICdpbnR8ZmFsc2UnXSwgZGVmYXVsdDogJ2ludCcpXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGZ3cml0ZSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZGF0YSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbGVuZ3RoID0gMAogICAgKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVvYmplY3QuZnN0YXQucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5IHdpdGggdGhlIHN0YXRpc3RpY3Mgb2YgdGhlIGZpbGU7IHRoZSBmb3JtYXQgb2YgdGhlIGFycmF5CiAgICAgKiBpcyBkZXNjcmliZWQgaW4gZGV0YWlsIG9uIHRoZSA8Yj5zdGF0PC9iPiBtYW51YWwgcGFnZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGZzdGF0KCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBUcnVuY2F0ZXMgdGhlIGZpbGUgdG8gYSBnaXZlbiBsZW5ndGgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC5mdHJ1bmNhdGUucGhwCiAgICAgKiBAcGFyYW0gaW50ICRzaXplIDxwPgogICAgICogVGhlIHNpemUgdG8gdHJ1bmNhdGUgdG8uCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIElmIDxpPnNpemU8L2k+IGlzIGxhcmdlciB0aGFuIHRoZSBmaWxlIGl0IGlzIGV4dGVuZGVkIHdpdGggbnVsbCBieXRlcy4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogSWYgPGk+c2l6ZTwvaT4gaXMgc21hbGxlciB0aGFuIHRoZSBmaWxlLCB0aGUgZXh0cmEgZGF0YSB3aWxsIGJlIGxvc3QuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBmdHJ1bmNhdGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHNpemUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBjdXJyZW50IGxpbmUgb2YgZmlsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlb2JqZWN0LmN1cnJlbnQucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xhcnJheXxmYWxzZSBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgZmlsZS4gSWYgdGhlIDxiPlNwbEZpbGVPYmplY3Q6OlJFQURfQ1NWPC9iPiBmbGFnIGlzIHNldCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBjdXJyZW50IGxpbmUgcGFyc2VkIGFzIENTViBkYXRhLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpOiBzdHJpbmd8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldCBsaW5lIG51bWJlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlb2JqZWN0LmtleS5waHAKICAgICAqIEByZXR1cm4gaW50IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCk6IGludCB7fQoKICAgIC8qKgogICAgICogUmVhZCBuZXh0IGxpbmUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC5uZXh0LnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFNldHMgZmxhZ3MgZm9yIHRoZSBTcGxGaWxlT2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVvYmplY3Quc2V0ZmxhZ3MucGhwCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyA8cD4KICAgICAqIEJpdCBtYXNrIG9mIHRoZSBmbGFncyB0byBzZXQuIFNlZQogICAgICogU3BsRmlsZU9iamVjdCBjb25zdGFudHMKICAgICAqIGZvciB0aGUgYXZhaWxhYmxlIGZsYWdzLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGbGFncygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIGZsYWdzIGZvciB0aGUgU3BsRmlsZU9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlb2JqZWN0LmdldGZsYWdzLnBocAogICAgICogQHJldHVybiBpbnQgYW4gaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGZsYWdzLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmxhZ3MoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBTZXQgbWF4aW11bSBsaW5lIGxlbmd0aAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlb2JqZWN0LnNldG1heGxpbmVsZW4ucGhwCiAgICAgKiBAcGFyYW0gaW50ICRtYXhMZW5ndGggPHA+CiAgICAgKiBUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBsaW5lLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKgogICAgICogQHRocm93cyBEb21haW5FeGNlcHRpb24gV2hlbiA8aT5tYXhMZW5ndGg8L2k+IGlzIGxlc3MgdGhhbiB6ZXJvLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TWF4TGluZUxlbigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbWF4TGVuZ3RoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogR2V0IG1heGltdW0gbGluZSBsZW5ndGgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC5nZXRtYXhsaW5lbGVuLnBocAogICAgICogQHJldHVybiBpbnQ8MCwgbWF4PiB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aCBpZiBvbmUgaGFzIGJlZW4gc2V0IHdpdGgKICAgICAqIDxiPlNwbEZpbGVPYmplY3Q6OnNldE1heExpbmVMZW48L2I+LCBkZWZhdWx0IGlzIDAuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYXhMaW5lTGVuKCk6IGludCB7fQoKICAgIC8qKgogICAgICogU3BsRmlsZU9iamVjdCBkb2VzIG5vdCBoYXZlIGNoaWxkcmVuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpbGVvYmplY3QuaGFzY2hpbGRyZW4ucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgZmFsc2UKICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjInID0+ICdmYWxzZSddLCBkZWZhdWx0OiAnYm9vbCcpXQogICAgcHVibGljIGZ1bmN0aW9uIGhhc0NoaWxkcmVuKCkge30KCiAgICAvKioKICAgICAqIE5vIHB1cnBvc2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC5nZXRjaGlsZHJlbi5waHAKICAgICAqIEByZXR1cm4gbnVsbHxSZWN1cnNpdmVJdGVyYXRvciBBbiBTcGxGaWxlT2JqZWN0IGRvZXMgbm90IGhhdmUgY2hpbGRyZW4gc28gdGhpcyBtZXRob2QgcmV0dXJucyBOVUxMLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjInID0+ICdudWxsJ10sIGRlZmF1bHQ6ICdudWxsfFJlY3Vyc2l2ZUl0ZXJhdG9yJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hpbGRyZW4oKSB7fQoKICAgIC8qKgogICAgICogU2VlayB0byBzcGVjaWZpZWQgbGluZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaWxlb2JqZWN0LnNlZWsucGhwCiAgICAgKiBAcGFyYW0gaW50ICRsaW5lIDxwPgogICAgICogVGhlIHplcm8tYmFzZWQgbGluZSBudW1iZXIgdG8gc2VlayB0by4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHRocm93cyBMb2dpY0V4Y2VwdGlvbiBJZiB0aGUgPGk+bGluZTwvaT4gaXMgbmVnYXRpdmUKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGxpbmUpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBBbGlhcyBvZiA8Yj5TcGxGaWxlT2JqZWN0OjpmZ2V0czwvYj4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC5nZXRjdXJyZW50bGluZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmV4dCBsaW5lIGZyb20gdGhlIGZpbGUuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEN1cnJlbnRMaW5lKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogQWxpYXMgb2YgPGI+U3BsRmlsZU9iamVjdDo6Y3VycmVudDwvYj4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZmlsZW9iamVjdC50b3N0cmluZy5waHAKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkge30KfQoKLyoqCiAqIFRoZSBTcGxUZW1wRmlsZU9iamVjdCBjbGFzcyBvZmZlcnMgYW4gb2JqZWN0IG9yaWVudGVkIGludGVyZmFjZSBmb3IgYSB0ZW1wb3JhcnkgZmlsZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5zcGx0ZW1wZmlsZW9iamVjdC5waHAKICovCmNsYXNzIFNwbFRlbXBGaWxlT2JqZWN0IGV4dGVuZHMgU3BsRmlsZU9iamVjdAp7CiAgICAvKioKICAgICAqIENvbnN0cnVjdCBhIG5ldyB0ZW1wb3JhcnkgZmlsZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsdGVtcGZpbGVvYmplY3QuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIGludCAkbWF4TWVtb3J5IFtvcHRpb25hbF0KICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiBhbiBlcnJvciBvY2N1cnMuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRtYXhNZW1vcnkgPSAyMDk3MTUyKSB7fQp9CgovKioKICogQHRlbXBsYXRlIFRWYWx1ZQogKiBUaGUgU3BsRG91Ymx5TGlua2VkTGlzdCBjbGFzcyBwcm92aWRlcyB0aGUgbWFpbiBmdW5jdGlvbmFsaXRpZXMgb2YgYSBkb3VibHkgbGlua2VkIGxpc3QuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3Muc3BsZG91Ymx5bGlua2VkbGlzdC5waHAKICogQHRlbXBsYXRlLWltcGxlbWVudHMgSXRlcmF0b3I8aW50LCBUVmFsdWU+CiAqIEB0ZW1wbGF0ZS1pbXBsZW1lbnRzIEFycmF5QWNjZXNzPGludCwgVFZhbHVlPgogKi8KY2xhc3MgU3BsRG91Ymx5TGlua2VkTGlzdCBpbXBsZW1lbnRzIEl0ZXJhdG9yLCBDb3VudGFibGUsIEFycmF5QWNjZXNzLCBTZXJpYWxpemFibGUKewogICAgcHVibGljIGNvbnN0IElUX01PREVfTElGTyA9IDI7CiAgICBwdWJsaWMgY29uc3QgSVRfTU9ERV9GSUZPID0gMDsKICAgIHB1YmxpYyBjb25zdCBJVF9NT0RFX0RFTEVURSA9IDE7CiAgICBwdWJsaWMgY29uc3QgSVRfTU9ERV9LRUVQID0gMDsKCiAgICAvKioKICAgICAqIEFkZC9pbnNlcnQgYSBuZXcgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBpbmRleAogICAgICogQHBhcmFtIG1peGVkICRpbmRleCBUaGUgaW5kZXggd2hlcmUgdGhlIG5ldyB2YWx1ZSBpcyB0byBiZSBpbnNlcnRlZC4KICAgICAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBpbmRleC4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L3NwbGRvdWJseWxpbmtlZGxpc3QuYWRkCiAgICAgKiBAc2luY2UgNS41CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGluZGV4LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJHZhbHVlCiAgICApOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBQb3BzIGEgbm9kZSBmcm9tIHRoZSBlbmQgb2YgdGhlIGRvdWJseSBsaW5rZWQgbGlzdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxkb3VibHlsaW5rZWRsaXN0LnBvcC5waHAKICAgICAqIEByZXR1cm4gVFZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcG9wcGVkIG5vZGUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3AoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFNoaWZ0cyBhIG5vZGUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb3VibHkgbGlua2VkIGxpc3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZG91Ymx5bGlua2VkbGlzdC5zaGlmdC5waHAKICAgICAqIEByZXR1cm4gVFZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgc2hpZnRlZCBub2RlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnQoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFB1c2hlcyBhbiBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIGRvdWJseSBsaW5rZWQgbGlzdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxkb3VibHlsaW5rZWRsaXN0LnB1c2gucGhwCiAgICAgKiBAcGFyYW0gVFZhbHVlICR2YWx1ZSA8cD4KICAgICAqIFRoZSB2YWx1ZSB0byBwdXNoLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXNoKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJHZhbHVlKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUHJlcGVuZHMgdGhlIGRvdWJseSBsaW5rZWQgbGlzdCB3aXRoIGFuIGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZG91Ymx5bGlua2VkbGlzdC51bnNoaWZ0LnBocAogICAgICogQHBhcmFtIFRWYWx1ZSAkdmFsdWUgPHA+CiAgICAgKiBUaGUgdmFsdWUgdG8gdW5zaGlmdC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zaGlmdCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICR2YWx1ZSk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFBlZWtzIGF0IHRoZSBub2RlIGZyb20gdGhlIGVuZCBvZiB0aGUgZG91Ymx5IGxpbmtlZCBsaXN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGRvdWJseWxpbmtlZGxpc3QudG9wLnBocAogICAgICogQHJldHVybiBUVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBsYXN0IG5vZGUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB0b3AoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFBlZWtzIGF0IHRoZSBub2RlIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZG91Ymx5IGxpbmtlZCBsaXN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGRvdWJseWxpbmtlZGxpc3QuYm90dG9tLnBocAogICAgICogQHJldHVybiBUVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBub2RlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gYm90dG9tKCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBDb3VudHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZG91Ymx5IGxpbmtlZCBsaXN0LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxkb3VibHlsaW5rZWRsaXN0LmNvdW50LnBocAogICAgICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZG91Ymx5IGxpbmtlZCBsaXN0LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgZG91Ymx5IGxpbmtlZCBsaXN0IGlzIGVtcHR5LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxkb3VibHlsaW5rZWRsaXN0LmlzZW1wdHkucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgd2hldGhlciB0aGUgZG91Ymx5IGxpbmtlZCBsaXN0IGlzIGVtcHR5LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBtb2RlIG9mIGl0ZXJhdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxkb3VibHlsaW5rZWRsaXN0LnNldGl0ZXJhdG9ybW9kZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJG1vZGUgPHA+CiAgICAgKiBUaGVyZSBhcmUgdHdvIG9ydGhvZ29uYWwgc2V0cyBvZiBtb2RlcyB0aGF0IGNhbiBiZSBzZXQ6CiAgICAgKiA8L3A+CiAgICAgKiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBpdGVyYXRpb24gKGVpdGhlciBvbmUgb3IgdGhlIG90aGVyKToKICAgICAqIDxiPlNwbERvdWJseUxpbmtlZExpc3Q6OklUX01PREVfTElGTzwvYj4gKFN0YWNrIHN0eWxlKQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldEl0ZXJhdG9yTW9kZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbW9kZSk6IGludCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbW9kZSBvZiBpdGVyYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZG91Ymx5bGlua2VkbGlzdC5nZXRpdGVyYXRvcm1vZGUucGhwCiAgICAgKiBAcmV0dXJuIGludCB0aGUgZGlmZmVyZW50IG1vZGVzIGFuZCBmbGFncyB0aGF0IGFmZmVjdCB0aGUgaXRlcmF0aW9uLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3JNb2RlKCk6IGludCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgJGluZGV4IGV4aXN0cwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxkb3VibHlsaW5rZWRsaXN0Lm9mZnNldGV4aXN0cy5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkaW5kZXggPHA+CiAgICAgKiBUaGUgaW5kZXggYmVpbmcgY2hlY2tlZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgPGk+aW5kZXg8L2k+IGV4aXN0cywgb3RoZXJ3aXNlIGZhbHNlCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJGluZGV4KTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCAkaW5kZXgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZG91Ymx5bGlua2VkbGlzdC5vZmZzZXRnZXQucGhwCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGluZGV4IDxwPgogICAgICogVGhlIGluZGV4IHdpdGggdGhlIHZhbHVlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBUVmFsdWUgVGhlIHZhbHVlIGF0IHRoZSBzcGVjaWZpZWQgPGk+aW5kZXg8L2k+LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRpbmRleCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkICRpbmRleCB0byAkbmV3dmFsCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGRvdWJseWxpbmtlZGxpc3Qub2Zmc2V0c2V0LnBocAogICAgICogQHBhcmFtIG1peGVkICRpbmRleCA8cD4KICAgICAqIFRoZSBpbmRleCBiZWluZyBzZXQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gVFZhbHVlICR2YWx1ZSA8cD4KICAgICAqIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSA8aT5pbmRleDwvaT4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkaW5kZXgsICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJHZhbHVlKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogVW5zZXRzIHRoZSB2YWx1ZSBhdCB0aGUgc3BlY2lmaWVkICRpbmRleAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxkb3VibHlsaW5rZWRsaXN0Lm9mZnNldHVuc2V0LnBocAogICAgICogQHBhcmFtIG1peGVkICRpbmRleCA8cD4KICAgICAqIFRoZSBpbmRleCBiZWluZyB1bnNldC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJGluZGV4KTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmV3aW5kIGl0ZXJhdG9yIGJhY2sgdG8gdGhlIHN0YXJ0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGRvdWJseWxpbmtlZGxpc3QucmV3aW5kLnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIGN1cnJlbnQgYXJyYXkgZW50cnkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZG91Ymx5bGlua2VkbGlzdC5jdXJyZW50LnBocAogICAgICogQHJldHVybiBUVmFsdWUgVGhlIGN1cnJlbnQgbm9kZSB2YWx1ZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJldHVybiBjdXJyZW50IG5vZGUgaW5kZXgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZG91Ymx5bGlua2VkbGlzdC5rZXkucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmbG9hdHxpbnR8Ym9vbHxudWxsIFRoZSBjdXJyZW50IG5vZGUgaW5kZXguCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBNb3ZlIHRvIG5leHQgZW50cnkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZG91Ymx5bGlua2VkbGlzdC5uZXh0LnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIE1vdmUgdG8gcHJldmlvdXMgZW50cnkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZG91Ymx5bGlua2VkbGlzdC5wcmV2LnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmV2KCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGRvdWJseSBsaW5rZWQgbGlzdCBjb250YWlucyBtb3JlIG5vZGVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGRvdWJseWxpbmtlZGxpc3QudmFsaWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgZG91Ymx5IGxpbmtlZCBsaXN0IGNvbnRhaW5zIGFueSBtb3JlIG5vZGVzLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBVbnNlcmlhbGl6ZXMgdGhlIHN0b3JhZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZG91Ymx5bGlua2VkbGlzdC5zZXJpYWxpemUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBzZXJpYWxpemVkIHN0cmluZy4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHNpbmNlIDUuNAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGRhdGEpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBTZXJpYWxpemVzIHRoZSBzdG9yYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGRvdWJseWxpbmtlZGxpc3QudW5zZXJpYWxpemUucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgc2VyaWFsaXplZCBzdHJpbmcuCiAgICAgKiBAc2luY2UgNS40CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemUoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKiBAc2luY2UgNy40CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2RlYnVnSW5mbygpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICogQHNpbmNlIDcuNAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXJpYWxpemUoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkZGF0YQogICAgICogQHNpbmNlIDcuNAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX191bnNlcmlhbGl6ZShhcnJheSAkZGF0YSk6IHZvaWQge30KfQoKLyoqCiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogVGhlIFNwbFF1ZXVlIGNsYXNzIHByb3ZpZGVzIHRoZSBtYWluIGZ1bmN0aW9uYWxpdGllcyBvZiBhIHF1ZXVlIGltcGxlbWVudGVkIHVzaW5nIGEgZG91Ymx5IGxpbmtlZCBsaXN0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnNwbHF1ZXVlLnBocAogKi8KY2xhc3MgU3BsUXVldWUgZXh0ZW5kcyBTcGxEb3VibHlMaW5rZWRMaXN0CnsKICAgIC8qKgogICAgICogQWRkcyBhbiBlbGVtZW50IHRvIHRoZSBxdWV1ZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BscXVldWUuZW5xdWV1ZS5waHAKICAgICAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIHRvIGVucXVldWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGVucXVldWUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBEZXF1ZXVlcyBhIG5vZGUgZnJvbSB0aGUgcXVldWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BscXVldWUuZGVxdWV1ZS5waHAKICAgICAqIEByZXR1cm4gVFZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZGVxdWV1ZWQgbm9kZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGRlcXVldWUoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG1vZGUgb2YgaXRlcmF0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGRvdWJseWxpbmtlZGxpc3Quc2V0aXRlcmF0b3Jtb2RlLnBocAogICAgICogQHBhcmFtIGludCAkbW9kZSA8cD4KICAgICAqIFRoZXJlIGFyZSB0d28gb3J0aG9nb25hbCBzZXRzIG9mIG1vZGVzIHRoYXQgY2FuIGJlIHNldDoKICAgICAqIDwvcD4KICAgICAqIFRoZSBkaXJlY3Rpb24gb2YgdGhlIGl0ZXJhdGlvbiAoZWl0aGVyIG9uZSBvciB0aGUgb3RoZXIpOgogICAgICogPGI+U3BsRG91Ymx5TGlua2VkTGlzdDo6SVRfTU9ERV9MSUZPPC9iPiAoU3RhY2sgc3R5bGUpCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEl0ZXJhdG9yTW9kZSgkbW9kZSkge30KfQoKLyoqCiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogVGhlIFNwbFN0YWNrIGNsYXNzIHByb3ZpZGVzIHRoZSBtYWluIGZ1bmN0aW9uYWxpdGllcyBvZiBhIHN0YWNrIGltcGxlbWVudGVkIHVzaW5nIGEgZG91Ymx5IGxpbmtlZCBsaXN0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnNwbHN0YWNrLnBocAogKiBAdGVtcGxhdGUtZXh0ZW5kcyBTcGxEb3VibHlMaW5rZWRMaXN0PFRWYWx1ZT4KICovCmNsYXNzIFNwbFN0YWNrIGV4dGVuZHMgU3BsRG91Ymx5TGlua2VkTGlzdAp7CiAgICAvKioKICAgICAqIFNldHMgdGhlIG1vZGUgb2YgaXRlcmF0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGRvdWJseWxpbmtlZGxpc3Quc2V0aXRlcmF0b3Jtb2RlLnBocAogICAgICogQHBhcmFtIGludCAkbW9kZSA8cD4KICAgICAqIFRoZXJlIGFyZSB0d28gb3J0aG9nb25hbCBzZXRzIG9mIG1vZGVzIHRoYXQgY2FuIGJlIHNldDoKICAgICAqIDwvcD4KICAgICAqIFRoZSBkaXJlY3Rpb24gb2YgdGhlIGl0ZXJhdGlvbiAoZWl0aGVyIG9uZSBvciB0aGUgb3RoZXIpOgogICAgICogPGI+U3BsRG91Ymx5TGlua2VkTGlzdDo6SVRfTU9ERV9MSUZPPC9iPiAoU3RhY2sgc3R5bGUpCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEl0ZXJhdG9yTW9kZSgkbW9kZSkge30KfQoKLyoqCiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogVGhlIFNwbEhlYXAgY2xhc3MgcHJvdmlkZXMgdGhlIG1haW4gZnVuY3Rpb25hbGl0aWVzIG9mIGFuIEhlYXAuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3Muc3BsaGVhcC5waHAKICogQHRlbXBsYXRlLWltcGxlbWVudHMgSXRlcmF0b3I8aW50LCBUVmFsdWU+CiAqLwphYnN0cmFjdCBjbGFzcyBTcGxIZWFwIGltcGxlbWVudHMgSXRlcmF0b3IsIENvdW50YWJsZQp7CiAgICAvKioKICAgICAqIEV4dHJhY3RzIGEgbm9kZSBmcm9tIHRvcCBvZiB0aGUgaGVhcCBhbmQgc2lmdCB1cC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsaGVhcC5leHRyYWN0LnBocAogICAgICogQHJldHVybiBUVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBleHRyYWN0ZWQgbm9kZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGV4dHJhY3QoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEluc2VydHMgYW4gZWxlbWVudCBpbiB0aGUgaGVhcCBieSBzaWZ0aW5nIGl0IHVwLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxoZWFwLmluc2VydC5waHAKICAgICAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIHRvIGluc2VydC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjQnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogUGVla3MgYXQgdGhlIG5vZGUgZnJvbSB0aGUgdG9wIG9mIHRoZSBoZWFwCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGhlYXAudG9wLnBocAogICAgICogQHJldHVybiBUVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBub2RlIG9uIHRoZSB0b3AuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB0b3AoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBoZWFwLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxoZWFwLmNvdW50LnBocAogICAgICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGVhcC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludCB7fQoKICAgIC8qKgogICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGhlYXAgaXMgZW1wdHkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGhlYXAuaXNlbXB0eS5waHAKICAgICAqIEByZXR1cm4gYm9vbCB3aGV0aGVyIHRoZSBoZWFwIGlzIGVtcHR5LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXdpbmQgaXRlcmF0b3IgYmFjayB0byB0aGUgc3RhcnQgKG5vLW9wKQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxoZWFwLnJld2luZC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFJldHVybiBjdXJyZW50IG5vZGUgcG9pbnRlZCBieSB0aGUgaXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsaGVhcC5jdXJyZW50LnBocAogICAgICogQHJldHVybiBUVmFsdWUgVGhlIGN1cnJlbnQgbm9kZSB2YWx1ZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJldHVybiBjdXJyZW50IG5vZGUgaW5kZXgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsaGVhcC5rZXkucGhwCiAgICAgKiBAcmV0dXJuIGludCBUaGUgY3VycmVudCBub2RlIGluZGV4LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCk6IGludCB7fQoKICAgIC8qKgogICAgICogTW92ZSB0byB0aGUgbmV4dCBub2RlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGhlYXAubmV4dC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBoZWFwIGNvbnRhaW5zIG1vcmUgbm9kZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsaGVhcC52YWxpZC5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBoZWFwIGNvbnRhaW5zIGFueSBtb3JlIG5vZGVzLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZWNvdmVyIGZyb20gdGhlIGNvcnJ1cHRlZCBzdGF0ZSBhbmQgYWxsb3cgZnVydGhlciBhY3Rpb25zIG9uIHRoZSBoZWFwLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxoZWFwLnJlY292ZXJmcm9tY29ycnVwdGlvbi5waHAKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjQnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVjb3ZlckZyb21Db3JydXB0aW9uKCkge30KCiAgICAvKioKICAgICAqIENvbXBhcmUgZWxlbWVudHMgaW4gb3JkZXIgdG8gcGxhY2UgdGhlbSBjb3JyZWN0bHkgaW4gdGhlIGhlYXAgd2hpbGUgc2lmdGluZyB1cC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsaGVhcC5jb21wYXJlLnBocAogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZTEgPHA+CiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGZpcnN0IG5vZGUgYmVpbmcgY29tcGFyZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlMiA8cD4KICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIG5vZGUgYmVpbmcgY29tcGFyZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludCBSZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24sIHBvc2l0aXZlIGludGVnZXIgaWYgPGk+dmFsdWUxPC9pPiBpcyBncmVhdGVyIHRoYW4gPGk+dmFsdWUyPC9pPiwgMCBpZiB0aGV5IGFyZSBlcXVhbCwgbmVnYXRpdmUgaW50ZWdlciBvdGhlcndpc2UuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIEhhdmluZyBtdWx0aXBsZSBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIHZhbHVlIGluIGEgSGVhcCBpcyBub3QgcmVjb21tZW5kZWQuIFRoZXkgd2lsbCBlbmQgdXAgaW4gYW4gYXJiaXRyYXJ5IHJlbGF0aXZlIHBvc2l0aW9uLgogICAgICovCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gY29tcGFyZSgkdmFsdWUxLCAkdmFsdWUyKTsKCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNDb3JydXB0ZWQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICogQHNpbmNlIDcuNAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZWJ1Z0luZm8oKTogYXJyYXkge30KfQoKLyoqCiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogVGhlIFNwbE1pbkhlYXAgY2xhc3MgcHJvdmlkZXMgdGhlIG1haW4gZnVuY3Rpb25hbGl0aWVzIG9mIGEgaGVhcCwga2VlcGluZyB0aGUgbWluaW11bSBvbiB0aGUgdG9wLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnNwbG1pbmhlYXAucGhwCiAqIEB0ZW1wbGF0ZS1leHRlbmRzIFNwbEhlYXA8VFZhbHVlPgogKi8KY2xhc3MgU3BsTWluSGVhcCBleHRlbmRzIFNwbEhlYXAKewogICAgLyoqCiAgICAgKiBDb21wYXJlIGVsZW1lbnRzIGluIG9yZGVyIHRvIHBsYWNlIHRoZW0gY29ycmVjdGx5IGluIHRoZSBoZWFwIHdoaWxlIHNpZnRpbmcgdXAuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbG1pbmhlYXAuY29tcGFyZS5waHAKICAgICAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlMSA8cD4KICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgZmlyc3Qgbm9kZSBiZWluZyBjb21wYXJlZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlMiA8cD4KICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIG5vZGUgYmVpbmcgY29tcGFyZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludCBSZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24sIHBvc2l0aXZlIGludGVnZXIgaWYgPGk+dmFsdWUxPC9pPiBpcyBsb3dlciB0aGFuIDxpPnZhbHVlMjwvaT4sIDAgaWYgdGhleSBhcmUgZXF1YWwsIG5lZ2F0aXZlIGludGVnZXIgb3RoZXJ3aXNlLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBIYXZpbmcgbXVsdGlwbGUgZWxlbWVudHMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBpbiBhIEhlYXAgaXMgbm90IHJlY29tbWVuZGVkLiBUaGV5IHdpbGwgZW5kIHVwIGluIGFuIGFyYml0cmFyeSByZWxhdGl2ZSBwb3NpdGlvbi4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbXBhcmUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUxLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJHZhbHVlMgogICAgKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBFeHRyYWN0cyBhIG5vZGUgZnJvbSB0b3Agb2YgdGhlIGhlYXAgYW5kIHNpZnQgdXAuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGhlYXAuZXh0cmFjdC5waHAKICAgICAqIEByZXR1cm4gVFZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZXh0cmFjdGVkIG5vZGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleHRyYWN0KCkge30KCiAgICAvKioKICAgICAqIEluc2VydHMgYW4gZWxlbWVudCBpbiB0aGUgaGVhcCBieSBzaWZ0aW5nIGl0IHVwLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxoZWFwLmluc2VydC5waHAKICAgICAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIHRvIGluc2VydC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdHJ1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0KCR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIFBlZWtzIGF0IHRoZSBub2RlIGZyb20gdGhlIHRvcCBvZiB0aGUgaGVhcAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxoZWFwLnRvcC5waHAKICAgICAqIEByZXR1cm4gVFZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgbm9kZSBvbiB0aGUgdG9wLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9wKCkge30KCiAgICAvKioKICAgICAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBoZWFwLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxoZWFwLmNvdW50LnBocAogICAgICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGVhcC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCkge30KCiAgICAvKioKICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBoZWFwIGlzIGVtcHR5LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxoZWFwLmlzZW1wdHkucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgd2hldGhlciB0aGUgaGVhcCBpcyBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzRW1wdHkoKSB7fQoKICAgIC8qKgogICAgICogUmV3aW5kIGl0ZXJhdG9yIGJhY2sgdG8gdGhlIHN0YXJ0IChuby1vcCkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsaGVhcC5yZXdpbmQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gY3VycmVudCBub2RlIHBvaW50ZWQgYnkgdGhlIGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGhlYXAuY3VycmVudC5waHAKICAgICAqIEByZXR1cm4gVFZhbHVlIFRoZSBjdXJyZW50IG5vZGUgdmFsdWUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkge30KCiAgICAvKioKICAgICAqIFJldHVybiBjdXJyZW50IG5vZGUgaW5kZXgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsaGVhcC5rZXkucGhwCiAgICAgKiBAcmV0dXJuIGludCBUaGUgY3VycmVudCBub2RlIGluZGV4LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkge30KCiAgICAvKioKICAgICAqIE1vdmUgdG8gdGhlIG5leHQgbm9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxoZWFwLm5leHQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKSB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgd2hldGhlciB0aGUgaGVhcCBjb250YWlucyBtb3JlIG5vZGVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGhlYXAudmFsaWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgaGVhcCBjb250YWlucyBhbnkgbW9yZSBub2RlcywgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKSB7fQoKICAgIC8qKgogICAgICogUmVjb3ZlciBmcm9tIHRoZSBjb3JydXB0ZWQgc3RhdGUgYW5kIGFsbG93IGZ1cnRoZXIgYWN0aW9ucyBvbiB0aGUgaGVhcC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsaGVhcC5yZWNvdmVyZnJvbWNvcnJ1cHRpb24ucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlY292ZXJGcm9tQ29ycnVwdGlvbigpIHt9Cn0KCi8qKgogKiBAdGVtcGxhdGUgVFZhbHVlCiAqIFRoZSBTcGxNYXhIZWFwIGNsYXNzIHByb3ZpZGVzIHRoZSBtYWluIGZ1bmN0aW9uYWxpdGllcyBvZiBhIGhlYXAsIGtlZXBpbmcgdGhlIG1heGltdW0gb24gdGhlIHRvcC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5zcGxtYXhoZWFwLnBocAogKiBAdGVtcGxhdGUtZXh0ZW5kcyBTcGxIZWFwPFRWYWx1ZT4KICovCmNsYXNzIFNwbE1heEhlYXAgZXh0ZW5kcyBTcGxIZWFwCnsKICAgIC8qKgogICAgICogQ29tcGFyZSBlbGVtZW50cyBpbiBvcmRlciB0byBwbGFjZSB0aGVtIGNvcnJlY3RseSBpbiB0aGUgaGVhcCB3aGlsZSBzaWZ0aW5nIHVwLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxtYXhoZWFwLmNvbXBhcmUucGhwCiAgICAgKiBAcGFyYW0gVFZhbHVlICR2YWx1ZTEgPHA+CiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGZpcnN0IG5vZGUgYmVpbmcgY29tcGFyZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gVFZhbHVlICR2YWx1ZTIgPHA+CiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIHNlY29uZCBub2RlIGJlaW5nIGNvbXBhcmVkLgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnQgUmVzdWx0IG9mIHRoZSBjb21wYXJpc29uLCBwb3NpdGl2ZSBpbnRlZ2VyIGlmIDxpPnZhbHVlMTwvaT4gaXMgZ3JlYXRlciB0aGFuIDxpPnZhbHVlMjwvaT4sIDAgaWYgdGhleSBhcmUgZXF1YWwsIG5lZ2F0aXZlIGludGVnZXIgb3RoZXJ3aXNlLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBIYXZpbmcgbXVsdGlwbGUgZWxlbWVudHMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBpbiBhIEhlYXAgaXMgbm90IHJlY29tbWVuZGVkLiBUaGV5IHdpbGwgZW5kIHVwIGluIGFuIGFyYml0cmFyeSByZWxhdGl2ZSBwb3NpdGlvbi4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbXBhcmUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUxLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJHZhbHVlMgogICAgKTogaW50IHt9Cn0KCi8qKgogKiBAdGVtcGxhdGUgVFByaW9yaXR5CiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogVGhlIFNwbFByaW9yaXR5UXVldWUgY2xhc3MgcHJvdmlkZXMgdGhlIG1haW4gZnVuY3Rpb25hbGl0aWVzIG9mIGFuCiAqIHByaW9yaXRpemVkIHF1ZXVlLCBpbXBsZW1lbnRlZCB1c2luZyBhIGhlYXAuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3Muc3BscHJpb3JpdHlxdWV1ZS5waHAKICogQHRlbXBsYXRlLWltcGxlbWVudHMgSXRlcmF0b3I8aW50LCBUVmFsdWU+CiAqLwpjbGFzcyBTcGxQcmlvcml0eVF1ZXVlIGltcGxlbWVudHMgSXRlcmF0b3IsIENvdW50YWJsZQp7CiAgICBwdWJsaWMgY29uc3QgRVhUUl9CT1RIID0gMzsKICAgIHB1YmxpYyBjb25zdCBFWFRSX1BSSU9SSVRZID0gMjsKICAgIHB1YmxpYyBjb25zdCBFWFRSX0RBVEEgPSAxOwoKICAgIC8qKgogICAgICogQ29tcGFyZSBwcmlvcml0aWVzIGluIG9yZGVyIHRvIHBsYWNlIGVsZW1lbnRzIGNvcnJlY3RseSBpbiB0aGUgaGVhcCB3aGlsZSBzaWZ0aW5nIHVwLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxwcmlvcml0eXF1ZXVlLmNvbXBhcmUucGhwCiAgICAgKiBAcGFyYW0gVFByaW9yaXR5ICRwcmlvcml0eTEgPHA+CiAgICAgKiBUaGUgcHJpb3JpdHkgb2YgdGhlIGZpcnN0IG5vZGUgYmVpbmcgY29tcGFyZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gVFByaW9yaXR5ICRwcmlvcml0eTIgPHA+CiAgICAgKiBUaGUgcHJpb3JpdHkgb2YgdGhlIHNlY29uZCBub2RlIGJlaW5nIGNvbXBhcmVkLgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnQgUmVzdWx0IG9mIHRoZSBjb21wYXJpc29uLCBwb3NpdGl2ZSBpbnRlZ2VyIGlmIDxpPnByaW9yaXR5MTwvaT4gaXMgZ3JlYXRlciB0aGFuIDxpPnByaW9yaXR5MjwvaT4sIDAgaWYgdGhleSBhcmUgZXF1YWwsIG5lZ2F0aXZlIGludGVnZXIgb3RoZXJ3aXNlLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBNdWx0aXBsZSBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIHByaW9yaXR5IHdpbGwgZ2V0IGRlcXVldWVkIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJHByaW9yaXR5MSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRwcmlvcml0eTIKICAgICk6IGludCB7fQoKICAgIC8qKgogICAgICogSW5zZXJ0cyBhbiBlbGVtZW50IGluIHRoZSBxdWV1ZSBieSBzaWZ0aW5nIGl0IHVwLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxwcmlvcml0eXF1ZXVlLmluc2VydC5waHAKICAgICAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIHRvIGluc2VydC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBUUHJpb3JpdHkgJHByaW9yaXR5IDxwPgogICAgICogVGhlIGFzc29jaWF0ZWQgcHJpb3JpdHkuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHRydWUKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGluc2VydCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICR2YWx1ZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRwcmlvcml0eQogICAgKTogdHJ1ZSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgbW9kZSBvZiBleHRyYWN0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbHByaW9yaXR5cXVldWUuc2V0ZXh0cmFjdGZsYWdzLnBocAogICAgICogQHBhcmFtIGludCAkZmxhZ3MgPHA+CiAgICAgKiBEZWZpbmVzIHdoYXQgaXMgZXh0cmFjdGVkIGJ5IDxiPlNwbFByaW9yaXR5UXVldWU6OmN1cnJlbnQ8L2I+LAogICAgICogPGI+U3BsUHJpb3JpdHlRdWV1ZTo6dG9wPC9iPiBhbmQKICAgICAqIDxiPlNwbFByaW9yaXR5UXVldWU6OmV4dHJhY3Q8L2I+LgogICAgICogPC9wPgogICAgICogPGI+U3BsUHJpb3JpdHlRdWV1ZTo6RVhUUl9EQVRBPC9iPiAoMHgwMDAwMDAwMSk6IEV4dHJhY3QgdGhlIGRhdGEKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFeHRyYWN0RmxhZ3MoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBQZWVrcyBhdCB0aGUgbm9kZSBmcm9tIHRoZSB0b3Agb2YgdGhlIHF1ZXVlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbHByaW9yaXR5cXVldWUudG9wLnBocAogICAgICogQHJldHVybiBUVmFsdWUgVGhlIHZhbHVlIG9yIHByaW9yaXR5IChvciBib3RoKSBvZiB0aGUgdG9wIG5vZGUsIGRlcGVuZGluZyBvbiB0aGUgZXh0cmFjdCBmbGFnLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9wKCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBFeHRyYWN0cyBhIG5vZGUgZnJvbSB0b3Agb2YgdGhlIGhlYXAgYW5kIHNpZnQgdXAuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbHByaW9yaXR5cXVldWUuZXh0cmFjdC5waHAKICAgICAqIEByZXR1cm4gVFZhbHVlIFRoZSB2YWx1ZSBvciBwcmlvcml0eSAob3IgYm90aCkgb2YgdGhlIGV4dHJhY3RlZCBub2RlLCBkZXBlbmRpbmcgb24gdGhlIGV4dHJhY3QgZmxhZy4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGV4dHJhY3QoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIENvdW50cyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBxdWV1ZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BscHJpb3JpdHlxdWV1ZS5jb3VudC5waHAKICAgICAqIEByZXR1cm4gaW50IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHF1ZXVlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgcXVldWUgaXMgZW1wdHkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbHByaW9yaXR5cXVldWUuaXNlbXB0eS5waHAKICAgICAqIEByZXR1cm4gYm9vbCB3aGV0aGVyIHRoZSBxdWV1ZSBpcyBlbXB0eS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGlzRW1wdHkoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV3aW5kIGl0ZXJhdG9yIGJhY2sgdG8gdGhlIHN0YXJ0IChuby1vcCkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BscHJpb3JpdHlxdWV1ZS5yZXdpbmQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gY3VycmVudCBub2RlIHBvaW50ZWQgYnkgdGhlIGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbHByaW9yaXR5cXVldWUuY3VycmVudC5waHAKICAgICAqIEByZXR1cm4gVFZhbHVlIFRoZSB2YWx1ZSBvciBwcmlvcml0eSAob3IgYm90aCkgb2YgdGhlIGN1cnJlbnQgbm9kZSwgZGVwZW5kaW5nIG9uIHRoZSBleHRyYWN0IGZsYWcuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gY3VycmVudCBub2RlIGluZGV4CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbHByaW9yaXR5cXVldWUua2V5LnBocAogICAgICogQHJldHVybiBpbnQgVGhlIGN1cnJlbnQgbm9kZSBpbmRleC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpOiBpbnQge30KCiAgICAvKioKICAgICAqIE1vdmUgdG8gdGhlIG5leHQgbm9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxwcmlvcml0eXF1ZXVlLm5leHQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgd2hldGhlciB0aGUgcXVldWUgY29udGFpbnMgbW9yZSBub2RlcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxwcmlvcml0eXF1ZXVlLnZhbGlkLnBocAogICAgICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIHF1ZXVlIGNvbnRhaW5zIGFueSBtb3JlIG5vZGVzLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZWNvdmVyIGZyb20gdGhlIGNvcnJ1cHRlZCBzdGF0ZSBhbmQgYWxsb3cgZnVydGhlciBhY3Rpb25zIG9uIHRoZSBxdWV1ZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BscHJpb3JpdHlxdWV1ZS5yZWNvdmVyZnJvbWNvcnJ1cHRpb24ucGhwCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiByZWNvdmVyRnJvbUNvcnJ1cHRpb24oKTogdHJ1ZSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0NvcnJ1cHRlZCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXh0cmFjdEZsYWdzKCk6IGludCB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICogQHNpbmNlIDcuNAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZWJ1Z0luZm8oKTogYXJyYXkge30KfQoKLyoqCiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogVGhlIFNwbEZpeGVkQXJyYXkgY2xhc3MgcHJvdmlkZXMgdGhlIG1haW4gZnVuY3Rpb25hbGl0aWVzIG9mIGFycmF5LiBUaGUKICogbWFpbiBkaWZmZXJlbmNlcyBiZXR3ZWVuIGEgU3BsRml4ZWRBcnJheSBhbmQgYSBub3JtYWwgUEhQIGFycmF5IGlzIHRoYXQKICogdGhlIFNwbEZpeGVkQXJyYXkgaXMgb2YgZml4ZWQgbGVuZ3RoIGFuZCBhbGxvd3Mgb25seSBpbnRlZ2VycyB3aXRoaW4KICogdGhlIHJhbmdlIGFzIGluZGV4ZXMuIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCBpdCBhbGxvd3MgYSBmYXN0ZXIgYXJyYXkKICogaW1wbGVtZW50YXRpb24uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3Muc3BsZml4ZWRhcnJheS5waHAKICogQHRlbXBsYXRlLWltcGxlbWVudHMgSXRlcmF0b3I8aW50LCBUVmFsdWU+CiAqIEB0ZW1wbGF0ZS1pbXBsZW1lbnRzIEFycmF5QWNjZXNzPGludCwgVFZhbHVlPgogKiBAdGVtcGxhdGUtaW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZTxpbnQsIFRWYWx1ZT4KICovCmNsYXNzIFNwbEZpeGVkQXJyYXkgaW1wbGVtZW50cyBJdGVyYXRvciwgQXJyYXlBY2Nlc3MsIENvdW50YWJsZSwgSXRlcmF0b3JBZ2dyZWdhdGUsIEpzb25TZXJpYWxpemFibGUKewogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGZpeGVkIGFycmF5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpeGVkYXJyYXkuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIGludCAkc2l6ZSBbb3B0aW9uYWxdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkc2l6ZSA9IDApIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBhcnJheQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaXhlZGFycmF5LmNvdW50LnBocAogICAgICogQHJldHVybiBpbnQgdGhlIHNpemUgb2YgdGhlIGFycmF5LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgUEhQIGFycmF5IGZyb20gdGhlIGZpeGVkIGFycmF5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpeGVkYXJyYXkudG9hcnJheS5waHAKICAgICAqIEByZXR1cm4gVFZhbHVlW10gYSBQSFAgYXJyYXksIHNpbWlsYXIgdG8gdGhlIGZpeGVkIGFycmF5LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogSW1wb3J0IGEgUEhQIGFycmF5IGluIGEgPGI+U3BsRml4ZWRBcnJheTwvYj4gaW5zdGFuY2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZml4ZWRhcnJheS5mcm9tYXJyYXkucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFycmF5IDxwPgogICAgICogVGhlIGFycmF5IHRvIGltcG9ydC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBib29sICRwcmVzZXJ2ZUtleXMgW29wdGlvbmFsXSA8cD4KICAgICAqIFRyeSB0byBzYXZlIHRoZSBudW1lcmljIGluZGV4ZXMgdXNlZCBpbiB0aGUgb3JpZ2luYWwgYXJyYXkuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIFNwbEZpeGVkQXJyYXkgYW4gaW5zdGFuY2Ugb2YgPGI+U3BsRml4ZWRBcnJheTwvYj4KICAgICAqIGNvbnRhaW5pbmcgdGhlIGFycmF5IGNvbnRlbnQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUFycmF5KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2FycmF5J10sIGRlZmF1bHQ6ICcnKV0gJGFycmF5LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkcHJlc2VydmVLZXlzID0gdHJ1ZQogICAgKTogU3BsRml4ZWRBcnJheSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZml4ZWRhcnJheS5nZXRzaXplLnBocAogICAgICogQHJldHVybiBpbnQgdGhlIHNpemUgb2YgdGhlIGFycmF5LCBhcyBhbiBpbnRlZ2VyLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpOiBpbnQge30KCiAgICAvKioKICAgICAqIENoYW5nZSB0aGUgc2l6ZSBvZiBhbiBhcnJheQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaXhlZGFycmF5LnNldHNpemUucGhwCiAgICAgKiBAcGFyYW0gaW50ICRzaXplIDxwPgogICAgICogVGhlIG5ldyBhcnJheSBzaXplLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguNCcgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTaXplKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRzaXplKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgaW5kZXggZXhpc3RzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpeGVkYXJyYXkub2Zmc2V0ZXhpc3RzLnBocAogICAgICogQHBhcmFtIGludCAkaW5kZXggPHA+CiAgICAgKiBUaGUgaW5kZXggYmVpbmcgY2hlY2tlZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgPGk+aW5kZXg8L2k+IGV4aXN0cywgb3RoZXJ3aXNlIGZhbHNlCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJGluZGV4KTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCBpbmRleAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaXhlZGFycmF5Lm9mZnNldGdldC5waHAKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4IDxwPgogICAgICogVGhlIGluZGV4IHdpdGggdGhlIHZhbHVlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBUVmFsdWUgVGhlIHZhbHVlIGF0IHRoZSBzcGVjaWZpZWQgPGk+aW5kZXg8L2k+LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRpbmRleCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIGEgbmV3IHZhbHVlIGF0IGEgc3BlY2lmaWVkIGluZGV4CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbGZpeGVkYXJyYXkub2Zmc2V0c2V0LnBocAogICAgICogQHBhcmFtIGludCAkaW5kZXggPHA+CiAgICAgKiBUaGUgaW5kZXggYmVpbmcgc2V0LgogICAgICogPC9wPgogICAgICogQHBhcmFtIFRWYWx1ZSAkdmFsdWUgPHA+CiAgICAgKiBUaGUgbmV3IHZhbHVlIGZvciB0aGUgPGk+aW5kZXg8L2k+LgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJGluZGV4LCAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICR2YWx1ZSk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFVuc2V0cyB0aGUgdmFsdWUgYXQgdGhlIHNwZWNpZmllZCAkaW5kZXgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZml4ZWRhcnJheS5vZmZzZXR1bnNldC5waHAKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4IDxwPgogICAgICogVGhlIGluZGV4IGJlaW5nIHVuc2V0LgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCgkaW5kZXgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBSZXdpbmQgaXRlcmF0b3IgYmFjayB0byB0aGUgc3RhcnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3BsZml4ZWRhcnJheS5yZXdpbmQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gY3VycmVudCBhcnJheSBlbnRyeQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaXhlZGFycmF5LmN1cnJlbnQucGhwCiAgICAgKiBAcmV0dXJuIFRWYWx1ZSBUaGUgY3VycmVudCBlbGVtZW50IHZhbHVlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gY3VycmVudCBhcnJheSBpbmRleAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaXhlZGFycmF5LmtleS5waHAKICAgICAqIEByZXR1cm4gaW50IFRoZSBjdXJyZW50IGFycmF5IGluZGV4LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkge30KCiAgICAvKioKICAgICAqIE1vdmUgdG8gbmV4dCBlbnRyeQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaXhlZGFycmF5Lm5leHQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKSB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgd2hldGhlciB0aGUgYXJyYXkgY29udGFpbnMgbW9yZSBlbGVtZW50cwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxmaXhlZGFycmF5LnZhbGlkLnBocAogICAgICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIGFycmF5IGNvbnRhaW5zIGFueSBtb3JlIGVsZW1lbnRzLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpOiBib29sIHt9CgogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fd2FrZXVwKCk6IHZvaWQge30KCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjInKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NlcmlhbGl6ZSgpOiBhcnJheSB7fQoKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMicpXQogICAgcHVibGljIGZ1bmN0aW9uIF9fdW5zZXJpYWxpemUoYXJyYXkgJGRhdGEpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC4wCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yPGludCwgVFZhbHVlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKTogSXRlcmF0b3Ige30KCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjEnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCk6IGFycmF5IHt9Cn0KCi8qKgogKiBUaGUgPGI+U3BsT2JzZXJ2ZXI8L2I+IGludGVyZmFjZSBpcyB1c2VkIGFsb25nc2lkZQogKiA8Yj5TcGxTdWJqZWN0PC9iPiB0byBpbXBsZW1lbnQgdGhlIE9ic2VydmVyIERlc2lnbiBQYXR0ZXJuLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnNwbG9ic2VydmVyLnBocAogKi8KaW50ZXJmYWNlIFNwbE9ic2VydmVyCnsKICAgIC8qKgogICAgICogUmVjZWl2ZSB1cGRhdGUgZnJvbSBzdWJqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbG9ic2VydmVyLnVwZGF0ZS5waHAKICAgICAqIEBwYXJhbSBTcGxTdWJqZWN0ICRzdWJqZWN0IDxwPgogICAgICogVGhlIDxiPlNwbFN1YmplY3Q8L2I+IG5vdGlmeWluZyB0aGUgb2JzZXJ2ZXIgb2YgYW4gdXBkYXRlLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB1cGRhdGUoU3BsU3ViamVjdCAkc3ViamVjdCk6IHZvaWQ7Cn0KCi8qKgogKiBUaGUgPGI+U3BsU3ViamVjdDwvYj4gaW50ZXJmYWNlIGlzIHVzZWQgYWxvbmdzaWRlCiAqIDxiPlNwbE9ic2VydmVyPC9iPiB0byBpbXBsZW1lbnQgdGhlIE9ic2VydmVyIERlc2lnbiBQYXR0ZXJuLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnNwbHN1YmplY3QucGhwCiAqLwppbnRlcmZhY2UgU3BsU3ViamVjdAp7CiAgICAvKioKICAgICAqIEF0dGFjaCBhbiBTcGxPYnNlcnZlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxzdWJqZWN0LmF0dGFjaC5waHAKICAgICAqIEBwYXJhbSBTcGxPYnNlcnZlciAkb2JzZXJ2ZXIgPHA+CiAgICAgKiBUaGUgPGI+U3BsT2JzZXJ2ZXI8L2I+IHRvIGF0dGFjaC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gYXR0YWNoKFNwbE9ic2VydmVyICRvYnNlcnZlcik6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBEZXRhY2ggYW4gb2JzZXJ2ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bsc3ViamVjdC5kZXRhY2gucGhwCiAgICAgKiBAcGFyYW0gU3BsT2JzZXJ2ZXIgJG9ic2VydmVyIDxwPgogICAgICogVGhlIDxiPlNwbE9ic2VydmVyPC9iPiB0byBkZXRhY2guCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGRldGFjaChTcGxPYnNlcnZlciAkb2JzZXJ2ZXIpOiB2b2lkOwoKICAgIC8qKgogICAgICogTm90aWZ5IGFuIG9ic2VydmVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbHN1YmplY3Qubm90aWZ5LnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBub3RpZnkoKTogdm9pZDsKfQoKLyoqCiAqIEB0ZW1wbGF0ZSBUT2JqZWN0IG9mIG9iamVjdAogKiBAdGVtcGxhdGUgVFZhbHVlCiAqIFRoZSBTcGxPYmplY3RTdG9yYWdlIGNsYXNzIHByb3ZpZGVzIGEgbWFwIGZyb20gb2JqZWN0cyB0byBkYXRhIG9yLCBieQogKiBpZ25vcmluZyBkYXRhLCBhbiBvYmplY3Qgc2V0LiBUaGlzIGR1YWwgcHVycG9zZSBjYW4gYmUgdXNlZnVsIGluIG1hbnkKICogY2FzZXMgaW52b2x2aW5nIHRoZSBuZWVkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IG9iamVjdHMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3Muc3Bsb2JqZWN0c3RvcmFnZS5waHAKICogQHRlbXBsYXRlLWltcGxlbWVudHMgSXRlcmF0b3I8aW50LCBUT2JqZWN0PgogKiBAdGVtcGxhdGUtaW1wbGVtZW50cyBBcnJheUFjY2VzczxUT2JqZWN0LCBUVmFsdWU+CiAqLwpjbGFzcyBTcGxPYmplY3RTdG9yYWdlIGltcGxlbWVudHMgQ291bnRhYmxlLCBTZWVrYWJsZUl0ZXJhdG9yLCBTZXJpYWxpemFibGUsIEFycmF5QWNjZXNzCnsKICAgIC8qKgogICAgICogQWRkcyBhbiBvYmplY3QgaW4gdGhlIHN0b3JhZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bsb2JqZWN0c3RvcmFnZS5hdHRhY2gucGhwCiAgICAgKiBAcGFyYW0gVE9iamVjdCAkb2JqZWN0IDxwPgogICAgICogVGhlIG9iamVjdCB0byBhZGQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gVFZhbHVlICRpbmZvIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZGF0YSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgb2JqZWN0LgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBhdHRhY2goCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnb2JqZWN0J10sIGRlZmF1bHQ6ICcnKV0gJG9iamVjdCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRpbmZvID0gbnVsbAogICAgKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhbiBvYmplY3QgZnJvbSB0aGUgc3RvcmFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxvYmplY3RzdG9yYWdlLmRldGFjaC5waHAKICAgICAqIEBwYXJhbSBUT2JqZWN0ICRvYmplY3QgPHA+CiAgICAgKiBUaGUgb2JqZWN0IHRvIHJlbW92ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZGV0YWNoKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ29iamVjdCddLCBkZWZhdWx0OiAnJyldICRvYmplY3QpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIHN0b3JhZ2UgY29udGFpbnMgYSBzcGVjaWZpYyBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bsb2JqZWN0c3RvcmFnZS5jb250YWlucy5waHAKICAgICAqIEBwYXJhbSBUT2JqZWN0ICRvYmplY3QgPHA+CiAgICAgKiBUaGUgb2JqZWN0IHRvIGxvb2sgZm9yLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIG9iamVjdCBpcyBpbiB0aGUgc3RvcmFnZSwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY29udGFpbnMoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnb2JqZWN0J10sIGRlZmF1bHQ6ICcnKV0gJG9iamVjdCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEFkZHMgYWxsIG9iamVjdHMgZnJvbSBhbm90aGVyIHN0b3JhZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bsb2JqZWN0c3RvcmFnZS5hZGRhbGwucGhwCiAgICAgKiBAcGFyYW0gU3BsT2JqZWN0U3RvcmFnZTxUT2JqZWN0LCBUVmFsdWU+ICRzdG9yYWdlIDxwPgogICAgICogVGhlIHN0b3JhZ2UgeW91IHdhbnQgdG8gaW1wb3J0LgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGFkZEFsbCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdTcGxPYmplY3RTdG9yYWdlJ10sIGRlZmF1bHQ6ICcnKV0gJHN0b3JhZ2UpOiBpbnQge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgb2JqZWN0cyBjb250YWluZWQgaW4gYW5vdGhlciBzdG9yYWdlIGZyb20gdGhlIGN1cnJlbnQgc3RvcmFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxvYmplY3RzdG9yYWdlLnJlbW92ZWFsbC5waHAKICAgICAqIEBwYXJhbSBTcGxPYmplY3RTdG9yYWdlPFRPYmplY3QsIFRWYWx1ZT4gJHN0b3JhZ2UgPHA+CiAgICAgKiBUaGUgc3RvcmFnZSBjb250YWluaW5nIHRoZSBlbGVtZW50cyB0byByZW1vdmUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQWxsKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ1NwbE9iamVjdFN0b3JhZ2UnXSwgZGVmYXVsdDogJycpXSAkc3RvcmFnZSk6IGludCB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhbGwgb2JqZWN0cyBleGNlcHQgZm9yIHRob3NlIGNvbnRhaW5lZCBpbiBhbm90aGVyIHN0b3JhZ2UgZnJvbSB0aGUgY3VycmVudCBzdG9yYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbG9iamVjdHN0b3JhZ2UucmVtb3ZlYWxsZXhjZXB0LnBocAogICAgICogQHBhcmFtIFNwbE9iamVjdFN0b3JhZ2U8VE9iamVjdCwgVFZhbHVlPiAkc3RvcmFnZSA8cD4KICAgICAqIFRoZSBzdG9yYWdlIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIHRvIHJldGFpbiBpbiB0aGUgY3VycmVudCBzdG9yYWdlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnQKICAgICAqIEBzaW5jZSA1LjMuNgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQWxsRXhjZXB0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ1NwbE9iamVjdFN0b3JhZ2UnXSwgZGVmYXVsdDogJycpXSAkc3RvcmFnZSk6IGludCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgaXRlcmF0b3IgZW50cnkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bsb2JqZWN0c3RvcmFnZS5nZXRpbmZvLnBocAogICAgICogQHJldHVybiBUVmFsdWUgVGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGl0ZXJhdG9yIHBvc2l0aW9uLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW5mbygpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgaXRlcmF0b3IgZW50cnkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bsb2JqZWN0c3RvcmFnZS5zZXRpbmZvLnBocAogICAgICogQHBhcmFtIFRWYWx1ZSAkaW5mbyA8cD4KICAgICAqIFRoZSBkYXRhIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBjdXJyZW50IGl0ZXJhdG9yIGVudHJ5LgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbmZvKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJGluZm8pOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3RvcmFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxvYmplY3RzdG9yYWdlLmNvdW50LnBocAogICAgICogQHBhcmFtIGludCAkbW9kZSBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIGludCBUaGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN0b3JhZ2UuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gaW50ICRtb2RlID0gQ09VTlRfTk9STUFMKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBSZXdpbmQgdGhlIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBzdG9yYWdlIGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bsb2JqZWN0c3RvcmFnZS5yZXdpbmQucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGlmIHRoZSBjdXJyZW50IGl0ZXJhdG9yIGVudHJ5IGlzIHZhbGlkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbG9iamVjdHN0b3JhZ2UudmFsaWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgaXRlcmF0b3IgZW50cnkgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBpdGVyYXRvciBjdXJyZW50bHkgaXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bsb2JqZWN0c3RvcmFnZS5rZXkucGhwCiAgICAgKiBAcmV0dXJuIGludCBUaGUgaW5kZXggY29ycmVzcG9uZGluZyB0byB0aGUgcG9zaXRpb24gb2YgdGhlIGl0ZXJhdG9yLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCk6IGludCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdG9yYWdlIGVudHJ5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbG9iamVjdHN0b3JhZ2UuY3VycmVudC5waHAKICAgICAqIEByZXR1cm4gVE9iamVjdCBUaGUgb2JqZWN0IGF0IHRoZSBjdXJyZW50IGl0ZXJhdG9yIHBvc2l0aW9uLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpOiBvYmplY3Qge30KCiAgICAvKioKICAgICAqIE1vdmUgdG8gdGhlIG5leHQgZW50cnkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bsb2JqZWN0c3RvcmFnZS5uZXh0LnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFVuc2VyaWFsaXplcyBhIHN0b3JhZ2UgZnJvbSBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbG9iamVjdHN0b3JhZ2UudW5zZXJpYWxpemUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPgogICAgICogVGhlIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgYSBzdG9yYWdlLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAc2luY2UgNS4yLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHVuc2VyaWFsaXplKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRkYXRhKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogU2VyaWFsaXplcyB0aGUgc3RvcmFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxvYmplY3RzdG9yYWdlLnNlcmlhbGl6ZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc3RvcmFnZS4KICAgICAqIEBzaW5jZSA1LjIuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VyaWFsaXplKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogQ2hlY2tzIHdoZXRoZXIgYW4gb2JqZWN0IGV4aXN0cyBpbiB0aGUgc3RvcmFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcGxvYmplY3RzdG9yYWdlLm9mZnNldGV4aXN0cy5waHAKICAgICAqIEBwYXJhbSBUT2JqZWN0ICRvYmplY3QgPHA+CiAgICAgKiBUaGUgb2JqZWN0IHRvIGxvb2sgZm9yLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIG9iamVjdCBleGlzdHMgaW4gdGhlIHN0b3JhZ2UsCiAgICAgKiBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRvYmplY3QpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBBc3NvY2lhdGVzIGRhdGEgdG8gYW4gb2JqZWN0IGluIHRoZSBzdG9yYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbG9iamVjdHN0b3JhZ2Uub2Zmc2V0c2V0LnBocAogICAgICogQHBhcmFtIFRPYmplY3QgJG9iamVjdCA8cD4KICAgICAqIFRoZSBvYmplY3QgdG8gYXNzb2NpYXRlIGRhdGEgd2l0aC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBUVmFsdWUgJGluZm8gW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBkYXRhIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBvYmplY3QuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRvYmplY3QsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkaW5mbyA9IG51bGwKICAgICk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYW4gb2JqZWN0IGZyb20gdGhlIHN0b3JhZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bsb2JqZWN0c3RvcmFnZS5vZmZzZXR1bnNldC5waHAKICAgICAqIEBwYXJhbSBUT2JqZWN0ICRvYmplY3QgPHA+CiAgICAgKiBUaGUgb2JqZWN0IHRvIHJlbW92ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9iamVjdCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGFuIDx0eXBlPm9iamVjdDwvdHlwZT4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bsb2JqZWN0c3RvcmFnZS5vZmZzZXRnZXQucGhwCiAgICAgKiBAcGFyYW0gVE9iamVjdCAkb2JqZWN0IDxwPgogICAgICogVGhlIG9iamVjdCB0byBsb29rIGZvci4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gVFZhbHVlIFRoZSBkYXRhIHByZXZpb3VzbHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QgaW4gdGhlIHN0b3JhZ2UuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG9iamVjdCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvbnRhaW5lZCBvYmplY3RzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NwbG9iamVjdHN0b3JhZ2UuZ2V0aGFzaC5waHAKICAgICAqIEBwYXJhbSBUT2JqZWN0ICRvYmplY3QgPHA+CiAgICAgKiBvYmplY3Qgd2hvc2UgaWRlbnRpZmllciBpcyB0byBiZSBjYWxjdWxhdGVkLgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgd2l0aCB0aGUgY2FsY3VsYXRlZCBpZGVudGlmaWVyLgogICAgICogQHNpbmNlIDUuNAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGFzaCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdvYmplY3QnXSwgZGVmYXVsdDogJycpXSAkb2JqZWN0KTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKiBAc2luY2UgNy40CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NlcmlhbGl6ZSgpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRkYXRhCiAgICAgKiBAc2luY2UgNy40CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2VyaWFsaXplKGFycmF5ICRkYXRhKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICogQHNpbmNlIDcuNAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZWJ1Z0luZm8oKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoaW50ICRvZmZzZXQpOiB2b2lkIHt9Cn0KCi8qKgogKiBBbiBJdGVyYXRvciB0aGF0IHNlcXVlbnRpYWxseSBpdGVyYXRlcyBvdmVyIGFsbCBhdHRhY2hlZCBpdGVyYXRvcnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5tdWx0aXBsZWl0ZXJhdG9yLnBocAogKi8KY2xhc3MgTXVsdGlwbGVJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yCnsKICAgIHB1YmxpYyBjb25zdCBNSVRfTkVFRF9BTlkgPSAwOwogICAgcHVibGljIGNvbnN0IE1JVF9ORUVEX0FMTCA9IDE7CiAgICBwdWJsaWMgY29uc3QgTUlUX0tFWVNfTlVNRVJJQyA9IDA7CiAgICBwdWJsaWMgY29uc3QgTUlUX0tFWVNfQVNTT0MgPSAyOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyBhIG5ldyBNdWx0aXBsZUl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL211bHRpcGxlaXRlcmF0b3IuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIGludCAkZmxhZ3MgRGVmYXVsdHMgdG8gTXVsdGlwbGVJdGVyYXRvcjo6TUlUX05FRURfQUxMIHwgTXVsdGlwbGVJdGVyYXRvcjo6TUlUX0tFWVNfTlVNRVJJQwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGZsYWdzLAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSBpbnQgJGZsYWdzID0gTXVsdGlwbGVJdGVyYXRvcjo6TUlUX05FRURfQUxMfE11bHRpcGxlSXRlcmF0b3I6Ok1JVF9LRVlTX05VTUVSSUMKICAgICkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGZsYWcgaW5mb3JtYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbXVsdGlwbGVpdGVyYXRvci5nZXRmbGFncy5waHAKICAgICAqIEByZXR1cm4gaW50IEluZm9ybWF0aW9uIGFib3V0IHRoZSBmbGFncywgYXMgYW4gaW50ZWdlci4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZsYWdzKCk6IGludCB7fQoKICAgIC8qKgogICAgICogU2V0cyBmbGFncwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tdWx0aXBsZWl0ZXJhdG9yLnNldGZsYWdzLnBocAogICAgICogQHBhcmFtIGludCAkZmxhZ3MgPHA+CiAgICAgKiBUaGUgZmxhZ3MgdG8gc2V0LCBhY2NvcmRpbmcgdG8gdGhlCiAgICAgKiBGbGFnIENvbnN0YW50cwogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGbGFncygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBBdHRhY2hlcyBpdGVyYXRvciBpbmZvcm1hdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tdWx0aXBsZWl0ZXJhdG9yLmF0dGFjaGl0ZXJhdG9yLnBocAogICAgICogQHBhcmFtIEl0ZXJhdG9yICRpdGVyYXRvciA8cD4KICAgICAqIFRoZSBuZXcgaXRlcmF0b3IgdG8gYXR0YWNoLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludHxzdHJpbmd8bnVsbCAkaW5mbyBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGFzc29jaWF0aXZlIGluZm9ybWF0aW9uIGZvciB0aGUgSXRlcmF0b3IsIHdoaWNoIG11c3QgYmUgYW4KICAgICAqIGludGVnZXIsIGEgc3RyaW5nLCBvciBudWxsLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkIERlc2NyaXB0aW9uLi4uCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBhdHRhY2hJdGVyYXRvcihJdGVyYXRvciAkaXRlcmF0b3IsICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRpbmZvID0gbnVsbCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIERldGFjaGVzIGFuIGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL211bHRpcGxlaXRlcmF0b3IuZGV0YWNoaXRlcmF0b3IucGhwCiAgICAgKiBAcGFyYW0gSXRlcmF0b3IgJGl0ZXJhdG9yIDxwPgogICAgICogVGhlIGl0ZXJhdG9yIHRvIGRldGFjaC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZGV0YWNoSXRlcmF0b3IoSXRlcmF0b3IgJGl0ZXJhdG9yKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIGFuIGl0ZXJhdG9yIGlzIGF0dGFjaGVkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL211bHRpcGxlaXRlcmF0b3IuY29udGFpbnNpdGVyYXRvci5waHAKICAgICAqIEBwYXJhbSBJdGVyYXRvciAkaXRlcmF0b3IgPHA+CiAgICAgKiBUaGUgaXRlcmF0b3IgdG8gY2hlY2suCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjb250YWluc0l0ZXJhdG9yKEl0ZXJhdG9yICRpdGVyYXRvcik6IGJvb2wge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIG51bWJlciBvZiBhdHRhY2hlZCBpdGVyYXRvciBpbnN0YW5jZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbXVsdGlwbGVpdGVyYXRvci5jb3VudGl0ZXJhdG9ycy5waHAKICAgICAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2YgYXR0YWNoZWQgaXRlcmF0b3IgaW5zdGFuY2VzIChhcyBhbiBpbnRlZ2VyKS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50SXRlcmF0b3JzKCk6IGludCB7fQoKICAgIC8qKgogICAgICogUmV3aW5kcyBhbGwgYXR0YWNoZWQgaXRlcmF0b3IgaW5zdGFuY2VzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL211bHRpcGxlaXRlcmF0b3IucmV3aW5kLnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiBzdWIgaXRlcmF0b3JzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL211bHRpcGxlaXRlcmF0b3IudmFsaWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiBvbmUgb3IgYWxsIHN1YiBpdGVyYXRvcnMgYXJlIHZhbGlkIGRlcGVuZGluZyBvbiBmbGFncywKICAgICAqIG90aGVyd2lzZSBmYWxzZQogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgcmVnaXN0ZXJlZCBpdGVyYXRvciBpbnN0YW5jZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbXVsdGlwbGVpdGVyYXRvci5rZXkucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IG9mIGFsbCByZWdpc3RlcmVkIGl0ZXJhdG9yIGluc3RhbmNlcywKICAgICAqIG9yIGZhbHNlIGlmIG5vIHN1YiBpdGVyYXRvciBpcyBhdHRhY2hlZC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgcmVnaXN0ZXJlZCBpdGVyYXRvciBpbnN0YW5jZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbXVsdGlwbGVpdGVyYXRvci5jdXJyZW50LnBocAogICAgICogQHJldHVybiBhcnJheSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBjdXJyZW50IHZhbHVlcyBvZiBlYWNoIGF0dGFjaGVkIGl0ZXJhdG9yLAogICAgICogb3IgZmFsc2UgaWYgbm8gaXRlcmF0b3JzIGFyZSBhdHRhY2hlZC4KICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiBtb2RlIE1JVF9ORUVEX0FMTCBpcyBzZXQgYW5kIGF0IGxlYXN0IG9uZSBhdHRhY2hlZCBpdGVyYXRvciBpcyBub3QgdmFsaWQuCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiBhIGtleSBpcyBOVUxMIGFuZCBNSVRfS0VZU19BU1NPQyBpcyBzZXQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBNb3ZlcyBhbGwgYXR0YWNoZWQgaXRlcmF0b3IgaW5zdGFuY2VzIGZvcndhcmQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbXVsdGlwbGVpdGVyYXRvci5uZXh0LnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqIEBzaW5jZSA3LjQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVidWdJbmZvKCk6IGFycmF5IHt9Cn0KPD9waHAKCi8qKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20va3Jha2pvZS9wY292L2Jsb2IvZGV2ZWxvcC9SRUFETUUubWQgKi8KCm5hbWVzcGFjZSB7CiAgICBkZWZpbmUoJ3Bjb3ZcYWxsJywgMCk7CiAgICBkZWZpbmUoJ3Bjb3ZcaW5jbHVzaXZlJywgMSk7CiAgICBkZWZpbmUoJ3Bjb3ZcZXhjbHVzaXZlJywgMik7CiAgICBkZWZpbmUoJ3Bjb3ZcdmVyc2lvbicsICcxLjAuNicpOwp9CgpuYW1lc3BhY2UgcGNvdgp7CiAgICAvKioKICAgICAqIChQSFAgJmd0Oz0gNy4wLCBQRUNMIHBjb3YgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFNoYWxsIHN0YXJ0IHJlY29yZGluZyBjb3ZlcmFnZSBpbmZvcm1hdGlvbgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZ1bmN0aW9uIHN0YXJ0KCkge30KCiAgICAvKioKICAgICAqIChQSFAgJmd0Oz0gNy4wLCBQRUNMIHBjb3YgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFNoYWxsIHN0b3AgcmVjb3JkaW5nIGNvdmVyYWdlIGluZm9ybWF0aW9uCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZnVuY3Rpb24gc3RvcCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQICZndDs9IDcuMCwgUEVDTCBwY292ICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBTaGFsbCBjb2xsZWN0IGNvdmVyYWdlIGluZm9ybWF0aW9uCiAgICAgKiBAcGFyYW0gaW50ICR0eXBlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBwY292XGFsbCBzaGFsbCBjb2xsZWN0IGNvdmVyYWdlIGluZm9ybWF0aW9uIGZvciBhbGwgZmlsZXMKICAgICAqIHBjb3ZcaW5jbHVzaXZlIHNoYWxsIGNvbGxlY3QgY292ZXJhZ2UgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgZmlsZXMKICAgICAqIHBjb3ZcZXhjbHVzaXZlIHNoYWxsIGNvbGxlY3QgY292ZXJhZ2UgaW5mb3JtYXRpb24gZm9yIGFsbCBidXQgdGhlIHNwZWNpZmllZCBmaWxlcwogICAgICogPC9wPgogICAgICogQHBhcmFtIGFycmF5ICRmaWx0ZXIgPHA+CiAgICAgKiBwYXRoIG9mIGZpbGVzIChyZWFscGF0aCkgdGhhdCBzaG91bGQgYmUgZmlsdGVyZWQKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgZnVuY3Rpb24gY29sbGVjdChpbnQgJHR5cGUgPSBhbGwsIGFycmF5ICRmaWx0ZXIgPSBbXSkge30KCiAgICAvKioKICAgICAqIChQSFAgJmd0Oz0gNy4wLCBQRUNMIHBjb3YgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFNoYWxsIGNsZWFyIHN0b3JlZCBpbmZvcm1hdGlvbgogICAgICogQHBhcmFtIGJvb2wgJGZpbGVzIFtvcHRpb25hbF0gPHA+CiAgICAgKiBzZXQgdHJ1ZSB0byBjbGVhciBmaWxlIHRhYmxlcwogICAgICogTm90ZTogY2xlYXJpbmcgdGhlIGZpbGUgdGFibGVzIG1heSBoYXZlIHN1cnByaXNpbmcgY29uc2VxdWVuY2VzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZnVuY3Rpb24gY2xlYXIoYm9vbCAkZmlsZXMgPSBmYWxzZSkge30KCiAgICAvKioKICAgICAqIChQSFAgJmd0Oz0gNy4wLCBQRUNMIHBjb3YgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFNoYWxsIHJldHVybiBsaXN0IG9mIGZpbGVzIHdhaXRpbmcgdG8gYmUgY29sbGVjdGVkCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIGZ1bmN0aW9uIHdhaXRpbmcoKSB7fQoKICAgIC8qKgogICAgICogKFBIUCAmZ3Q7PSA3LjAsIFBFQ0wgcGNvdiAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogU2hhbGwgcmV0dXJuIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIHRyYWNlIGFuZCBjZmcgYXJlbmEKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZ1bmN0aW9uIG1lbW9yeSgpIHt9Cn0KPD9waHAKCi8qKgogKiBUaGUgTUlUIExpY2Vuc2UgKE1JVCkKICoKICogQ29weXJpZ2h0IChjKSBUYXdhbmEgTXVzZXdlCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KICogVEhFIFNPRlRXQVJFLgogKgogKiA8aHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQ+LgogKi8KCi8qKgogKiBIZWxwZXIgYXV0b2NvbXBsZXRlIGZvciBwaHByZWRpcyBleHRlbnNpb24KICoKICogQGF1dGhvciAgVGF3YW5hIE11c2V3ZSA8dGF3YW5hQGFlb25pcy5jby56YT4KICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL3RidG11c2UvcGhwcmVkaXMtc2VudGluZWwtcGhwZG9jCiAqLwpjbGFzcyBSZWRpc1NlbnRpbmVsCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIFJlZGlzIFNlbnRpbmVsCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICRob3N0ICAgICAgICAgIFNlbnRpbmVsIElQIGFkZHJlc3Mgb3IgaG9zdG5hbWUKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAkcG9ydCAgICAgICAgICBTZW50aW5lbCBQb3J0CiAgICAgKiBAcGFyYW0gZmxvYXQgICAgICAgJHRpbWVvdXQgICAgICAgVmFsdWUgaW4gc2Vjb25kcyAob3B0aW9uYWwsIGRlZmF1bHQgaXMgMCBtZWFuaW5nIHVubGltaXRlZCkKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGVyc2lzdGVudCAgICBQZXJzaXN0ZW50IGNvbm5lY3Rpb24gaWQgKG9wdGlvbmFsLCBkZWZhdWx0IGlzIG51bGwgbWVhbmluZyBub3QgcGVyc2lzdGVudCkKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAkcmV0cnlJbnRlcnZhbCBWYWx1ZSBpbiBtaWxsaXNlY29uZHMgKG9wdGlvbmFsLCBkZWZhdWx0IGlzIDApCiAgICAgKiBAcGFyYW0gZmxvYXQgICAgICAgJHJlYWRUaW1lb3V0ICAgVmFsdWUgaW4gc2Vjb25kcyAob3B0aW9uYWwsIGRlZmF1bHQgaXMgMCBtZWFuaW5nIHVubGltaXRlZCkKICAgICAqCiAgICAgKiBAZXhhbXBsZQogICAgICogLy8gMXMgdGltZW91dCwgMTAwbXMgZGVsYXkgYmV0d2VlbiByZWNvbm5lY3Rpb24gYXR0ZW1wdHMuCiAgICAgKiAkc2VudGluZWwgPSBuZXcgUmVkaXNTZW50aW5lbCgnMTI3LjAuMC4xJywgMjYzNzksIDEsIG51bGwsIDEwMCk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBzdHJpbmcgJGhvc3QsCiAgICAgICAgaW50ICRwb3J0LAogICAgICAgIGZsb2F0ICR0aW1lb3V0ID0gMCwKICAgICAgICA/c3RyaW5nICRwZXJzaXN0ZW50ID0gbnVsbCwKICAgICAgICBpbnQgJHJldHJ5SW50ZXJ2YWwgPSAwLAogICAgICAgIGZsb2F0ICRyZWFkVGltZW91dCA9IDAKICAgICkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBSZWRpcyBTZW50aW5lbAogICAgICoKICAgICAqIEFjY2VwdHMgYW5kIGFycmF5IG9mIG9wdGlvbnMuCiAgICAgKgogICAgICogQXZhaWxhYmxlIG9wdGlvbnM6CiAgICAgKiAgIC0gJ2hvc3QnID0+IHN0cmluZywgU2VudGluZWwgSVAgYWRkcmVzcyBvciBob3N0bmFtZQogICAgICogICAtICdwb3J0JyA9PiBpbnQsIFNlbnRpbmVsIFBvcnQgKG9wdGlvbmFsLCBkZWZhdWx0IGlzIDI2Mzc5KQogICAgICogICAtICdjb25uZWN0VGltZW91dCcgPT4gZmxvYXQsIFZhbHVlIGluIHNlY29uZHMgKG9wdGlvbmFsLCBkZWZhdWx0IGlzIDAgbWVhbmluZyB1bmxpbWl0ZWQpCiAgICAgKiAgIC0gJ3BlcnNpc3RlbnQnID0+IHN0cmluZywgUGVyc2lzdGVudCBjb25uZWN0aW9uIGlkIChvcHRpb25hbCwgZGVmYXVsdCBpcyBOVUxMIG1lYW5pbmcgbm90IHBlcnNpc3RlbnQpCiAgICAgKiAgIC0gJ3JldHJ5SW50ZXJ2YWwnID0+IGludCwgVmFsdWUgaW4gbWlsbGlzZWNvbmRzIChvcHRpb25hbCwgZGVmYXVsdCBpcyAwKQogICAgICogICAtICdyZWFkVGltZW91dCcgPT4gZmxvYXQsIFZhbHVlIGluIHNlY29uZHMgKG9wdGlvbmFsLCBkZWZhdWx0IGlzIDAgbWVhbmluZyB1bmxpbWl0ZWQpCiAgICAgKiAgIC0gJ2F1dGgnID0+IHN0cmluZ3xhcnJheSwgQXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgKG9wdGlvbmFsLCBkZWZhdWx0IGlzIE5VTEwgbWVhbmluZyBOT0FVVEgpCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIEFzc29jaWF0aXZlIGFycmF5IG9mIG9wdGlvbnMKICAgICAqCiAgICAgKiBAZXhhbXBsZSAkc2VudGluZWwgPSBuZXcgUmVkaXNTZW50aW5lbChbJ2hvc3QnID0+ICcxMjcuMC4wLjEnXSk7IC8vIGRlZmF1bHQgcGFyYW1ldGVycwogICAgICoKICAgICAqIEBzaW5jZSA+PSA2LjAuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJG9wdGlvbnMpIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiB0aGUgY3VycmVudCBTZW50aW5lbCBjb25maWd1cmF0aW9uIGlzIGFibGUgdG8gcmVhY2ggdGhlIHF1b3J1bSBuZWVkZWQgdG8gZmFpbG92ZXIgYSBtYXN0ZXIsIGFuZCB0aGUKICAgICAqIG1ham9yaXR5IG5lZWRlZCB0byBhdXRob3JpemUgdGhlIGZhaWxvdmVyLiBUaGlzIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgaW4gbW9uaXRvcmluZyBzeXN0ZW1zIHRvIGNoZWNrIGlmIGEKICAgICAqIFNlbnRpbmVsIGRlcGxveW1lbnQgaXMgb2suCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWFzdGVyIE5hbWUgb2YgbWFzdGVyCiAgICAgKgogICAgICogQHJldHVybiBib29sIFRydWUgaW4gY2FzZSBvZiBzdWNjZXNzLCBGYWxzZSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgICAgKgogICAgICogQGV4YW1wbGUgJHNlbnRpbmVsLT5ja3F1b3J1bSgnbXltYXN0ZXInKTsKICAgICAqCiAgICAgKiBAc2luY2UgICA+PSA1LjIuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2txdW9ydW0oc3RyaW5nICRtYXN0ZXIpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBGb3JjZSBhIGZhaWxvdmVyIGFzIGlmIHRoZSBtYXN0ZXIgd2FzIG5vdCByZWFjaGFibGUsIGFuZCB3aXRob3V0IGFza2luZyBmb3IgYWdyZWVtZW50IHRvIG90aGVyIFNlbnRpbmVscwogICAgICogKGhvd2V2ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgY29uZmlndXJhdGlvbiB3aWxsIGJlIHB1Ymxpc2hlZCBzbyB0aGF0IHRoZSBvdGhlciBTZW50aW5lbHMgd2lsbCB1cGRhdGUKICAgICAqIHRoZWlyIGNvbmZpZ3VyYXRpb25zKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXN0ZXIgTmFtZSBvZiBtYXN0ZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgVHJ1ZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIEZhbHNlIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgICAqCiAgICAgKiBAZXhhbXBsZSAkc2VudGluZWwtPmZhaWxvdmVyKCdteW1hc3RlcicpOwogICAgICoKICAgICAqIEBzaW5jZSAgID49IDUuMi4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmYWlsb3ZlcihzdHJpbmcgJG1hc3Rlcik6IGJvb2wge30KCiAgICAvKioKICAgICAqIEZvcmNlIFNlbnRpbmVsIHRvIHJld3JpdGUgaXRzIGNvbmZpZ3VyYXRpb24gb24gZGlzaywgaW5jbHVkaW5nIHRoZSBjdXJyZW50IFNlbnRpbmVsIHN0YXRlLgogICAgICoKICAgICAqIE5vcm1hbGx5IFNlbnRpbmVsIHJld3JpdGVzIHRoZSBjb25maWd1cmF0aW9uIGV2ZXJ5IHRpbWUgc29tZXRoaW5nIGNoYW5nZXMgaW4gaXRzIHN0YXRlIChpbiB0aGUgY29udGV4dCBvZiB0aGUKICAgICAqIHN1YnNldCBvZiB0aGUgc3RhdGUgd2hpY2ggaXMgcGVyc2lzdGVkIG9uIGRpc2sgYWNyb3NzIHJlc3RhcnQpLiBIb3dldmVyIHNvbWV0aW1lcyBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZQogICAgICogY29uZmlndXJhdGlvbiBmaWxlIGlzIGxvc3QgYmVjYXVzZSBvZiBvcGVyYXRpb24gZXJyb3JzLCBkaXNrIGZhaWx1cmVzLCBwYWNrYWdlIHVwZ3JhZGUgc2NyaXB0cyBvciBjb25maWd1cmF0aW9uCiAgICAgKiBtYW5hZ2Vycy4gSW4gdGhvc2UgY2FzZXMgYSB3YXkgdG8gdG8gZm9yY2UgU2VudGluZWwgdG8gcmV3cml0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGlzIGhhbmR5LgogICAgICoKICAgICAqIFRoaXMgY29tbWFuZCB3b3JrcyBldmVuIGlmIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGZpbGUgaXMgY29tcGxldGVseSBtaXNzaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIGluIGNhc2Ugb2Ygc3VjY2VzcywgRmFsc2UgaW4gY2FzZSBvZiBmYWlsdXJlLgogICAgICoKICAgICAqIEBleGFtcGxlICRzZW50aW5lbC0+Zmx1c2hjb25maWcoKTsKICAgICAqCiAgICAgKiBAc2luY2UgICA+PSA1LjIuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmx1c2hjb25maWcoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBpcCBhbmQgcG9ydCBudW1iZXIgb2YgdGhlIG1hc3RlciB3aXRoIHRoYXQgbmFtZS4gSWYgYSBmYWlsb3ZlciBpcyBpbiBwcm9ncmVzcyBvciB0ZXJtaW5hdGVkCiAgICAgKiBzdWNjZXNzZnVsbHkgZm9yIHRoaXMgbWFzdGVyIGl0IHJldHVybnMgdGhlIGFkZHJlc3MgYW5kIHBvcnQgb2YgdGhlIHByb21vdGVkIHJlcGxpY2EuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWFzdGVyIE5hbWUgb2YgbWFzdGVyCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXxmYWxzZSBbJ2FkZHJlc3MnLCAncG9ydCddIGluIGNhc2Ugb2Ygc3VjY2VzcywgRmFsc2UgaW4gY2FzZSBvZiBmYWlsdXJlLgogICAgICoKICAgICAqIEBleGFtcGxlICRzZW50aW5lbC0+Z2V0TWFzdGVyQWRkckJ5TmFtZSgnbXltYXN0ZXInKTsKICAgICAqCiAgICAgKiBAc2luY2UgICA+PSA1LjIuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWFzdGVyQWRkckJ5TmFtZShzdHJpbmcgJG1hc3Rlcikge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgc3RhdGUgYW5kIGluZm8gb2YgdGhlIHNwZWNpZmllZCBtYXN0ZXIKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXN0ZXIgTmFtZSBvZiBtYXN0ZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFzc29jaWF0aXZlIGFycmF5IHdpdGggaW5mbyBpbiBjYXNlIG9mIHN1Y2Nlc3MsIEZhbHNlIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgICAqCiAgICAgKiBAZXhhbXBsZSAkc2VudGluZWwtPm1hc3RlcignbXltYXN0ZXInKTsKICAgICAqCiAgICAgKiBAc2luY2UgICA+PSA1LjIuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFzdGVyKHN0cmluZyAkbWFzdGVyKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIGEgbGlzdCBvZiBtb25pdG9yZWQgbWFzdGVycyBhbmQgdGhlaXIgc3RhdGUKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFycmF5IG9mIGFycmF5cyB3aXRoIGluZm8gZm9yIGVhY2ggbWFzdGVyIGluIGNhc2Ugb2Ygc3VjY2VzcywgRkFMU0UgaW4gY2FzZSBvZiBmYWlsdXJlLgogICAgICoKICAgICAqIEBleGFtcGxlICRzZW50aW5lbC0+bWFzdGVycygpOwogICAgICoKICAgICAqIEBzaW5jZSAgID49IDUuMi4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXN0ZXJzKCkge30KCiAgICAvKioKICAgICAqIFBpbmcgdGhlIHNlbnRpbmVsCiAgICAgKgogICAgICogQHJldHVybiBib29sIFRydWUgaW4gY2FzZSBvZiBzdWNjZXNzLCBGYWxzZSBpbiBjYXNlIG9mIGZhaWx1cmUKICAgICAqCiAgICAgKiBAZXhhbXBsZSAkc2VudGluZWwtPnBpbmcoKTsKICAgICAqCiAgICAgKiBAc2luY2UgICA+PSA1LjIuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGluZygpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXNldCBhbGwgdGhlIG1hc3RlcnMgd2l0aCBtYXRjaGluZyBuYW1lLiBUaGUgcGF0dGVybiBhcmd1bWVudCBpcyBhIGdsb2Itc3R5bGUgcGF0dGVybi4KICAgICAqIFRoZSByZXNldCBwcm9jZXNzIGNsZWFycyBhbnkgcHJldmlvdXMgc3RhdGUgaW4gYSBtYXN0ZXIgKGluY2x1ZGluZyBhIGZhaWxvdmVyIGluIHByb2dyZXNzKSwgYW5kIHJlbW92ZXMgZXZlcnkKICAgICAqIHJlcGxpY2EgYW5kIHNlbnRpbmVsIGFscmVhZHkgZGlzY292ZXJlZCBhbmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXN0ZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiBHbG9iLXN0eWxlIHBhdHRlcm4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgVHJ1ZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIEZhbHNlIGluIGNhc2Ugb2YgZmFpbHVyZQogICAgICoKICAgICAqIEBleGFtcGxlICRzZW50aW5lbC0+cmVzZXQoJyonKTsKICAgICAqCiAgICAgKiBAc2luY2UgICA+PSA1LjIuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXQoc3RyaW5nICRwYXR0ZXJuKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIGEgbGlzdCBvZiBzZW50aW5lbCBpbnN0YW5jZXMgZm9yIHRoaXMgbWFzdGVyLCBhbmQgdGhlaXIgc3RhdGUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXN0ZXIgTmFtZSBvZiBtYXN0ZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFycmF5IG9mIGFycmF5cyB3aXRoIGluZm8gZm9yIGVhY2ggc2VudGluZWwgaW4gY2FzZSBvZiBzdWNjZXNzLCBGYWxzZSBpbiBjYXNlIG9mIGZhaWx1cmUKICAgICAqCiAgICAgKiBAZXhhbXBsZSAkc2VudGluZWwtPnNlbnRpbmVscygnbXltYXN0ZXInKTsKICAgICAqCiAgICAgKiBAc2luY2UgICA+PSA1LjIuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VudGluZWxzKHN0cmluZyAkbWFzdGVyKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIGEgbGlzdCBvZiBzZW50aW5lbCBpbnN0YW5jZXMgZm9yIHRoaXMgbWFzdGVyLCBhbmQgdGhlaXIgc3RhdGUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXN0ZXIgTmFtZSBvZiBtYXN0ZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFycmF5IG9mIGFycmF5cyB3aXRoIGluZm8gZm9yIGVhY2ggcmVwbGljYSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIEZhbHNlIGluIGNhc2Ugb2YgZmFpbHVyZQogICAgICoKICAgICAqIEBleGFtcGxlICRzZW50aW5lbC0+c2xhdmVzKCdteW1hc3RlcicpOwogICAgICoKICAgICAqIEBzaW5jZSAgID49IDUuMi4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzbGF2ZXMoc3RyaW5nICRtYXN0ZXIpIHt9Cn0KPD9waHAKCi8qKgogKiBIZWxwZXIgYXV0b2NvbXBsZXRlIGZvciBwaHAgcmVkaXMgY2x1c3RlciBleHRlbnNpb24uCiAqIEJhc2VkIG9uIHRoZSBwaHByZWRpcy1waHBkb2MgYnkgTWF4IEthbWFzaGV2IChodHRwczovL2dpdGh1Yi5jb20vdWtrby9waHByZWRpcy1waHBkb2MpCiAqCiAqIEBhdXRob3IgVG9tbXkgWmhlbmcgPHRvbW15QHZsdi5wdz4KICogQGxpbmsgICBodHRwczovL2dpdGh1Yi5jb20vemdiN210ci9waHByZWRpc19jbHVzdGVyX3BocGRvYwogKgogKiBAbWV0aG9kIG1peGVkIGV2YWwoJHNjcmlwdCwgJGFyZ3MgPSBhcnJheSgpLCAkbnVtS2V5cyA9IDApCiAqLwpjbGFzcyBSZWRpc0NsdXN0ZXIKewogICAgcHVibGljIGNvbnN0IEFGVEVSID0gJ2FmdGVyJzsKICAgIHB1YmxpYyBjb25zdCBCRUZPUkUgPSAnYmVmb3JlJzsKCiAgICAvKioKICAgICAqIE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9TRVJJQUxJWkVSID0gMTsKICAgIHB1YmxpYyBjb25zdCBPUFRfUFJFRklYID0gMjsKICAgIHB1YmxpYyBjb25zdCBPUFRfUkVBRF9USU1FT1VUID0gMzsKICAgIHB1YmxpYyBjb25zdCBPUFRfU0NBTiA9IDQ7CiAgICBwdWJsaWMgY29uc3QgT1BUX1NMQVZFX0ZBSUxPVkVSID0gNTsKCiAgICAvKioKICAgICAqIENsdXN0ZXIgb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkFJTE9WRVJfTk9ORSA9IDA7CiAgICBwdWJsaWMgY29uc3QgRkFJTE9WRVJfRVJST1IgPSAxOwogICAgcHVibGljIGNvbnN0IEZBSUxPVkVSX0RJU1RSSUJVVEUgPSAyOwogICAgcHVibGljIGNvbnN0IEZBSUxPVkVSX0RJU1RSSUJVVEVfU0xBVkVTID0gMzsKCiAgICAvKioKICAgICAqIFNDQU4gb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0NBTl9OT1JFVFJZID0gMDsKICAgIHB1YmxpYyBjb25zdCBTQ0FOX1JFVFJZID0gMTsKCiAgICAvKioKICAgICAqIEBzaW5jZSA1LjMuMAogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0NBTl9QUkVGSVggPSAyOwoKICAgIC8qKgogICAgICogQHNpbmNlIDUuMy4wCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTQ0FOX05PUFJFRklYID0gMzsKCiAgICAvKioKICAgICAqIFNlcmlhbGl6ZXJzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTRVJJQUxJWkVSX05PTkUgPSAwOwogICAgcHVibGljIGNvbnN0IFNFUklBTElaRVJfUEhQID0gMTsKICAgIHB1YmxpYyBjb25zdCBTRVJJQUxJWkVSX0lHQklOQVJZID0gMjsKICAgIHB1YmxpYyBjb25zdCBTRVJJQUxJWkVSX01TR1BBQ0sgPSAzOwogICAgcHVibGljIGNvbnN0IFNFUklBTElaRVJfSlNPTiA9IDQ7CgogICAgLyoqCiAgICAgKiBNdWx0aQogICAgICovCiAgICBwdWJsaWMgY29uc3QgQVRPTUlDID0gMDsKICAgIHB1YmxpYyBjb25zdCBNVUxUSSA9IDE7CiAgICBwdWJsaWMgY29uc3QgUElQRUxJTkUgPSAyOwoKICAgIC8qKgogICAgICogVHlwZQogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVESVNfTk9UX0ZPVU5EID0gMDsKICAgIHB1YmxpYyBjb25zdCBSRURJU19TVFJJTkcgPSAxOwogICAgcHVibGljIGNvbnN0IFJFRElTX1NFVCA9IDI7CiAgICBwdWJsaWMgY29uc3QgUkVESVNfTElTVCA9IDM7CiAgICBwdWJsaWMgY29uc3QgUkVESVNfWlNFVCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgUkVESVNfSEFTSCA9IDU7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgUmVkaXMgQ2x1c3RlciBjbGllbnQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgICAkbmFtZQogICAgICogQHBhcmFtIGFycmF5fG51bGwgICAgJHNlZWRzCiAgICAgKiBAcGFyYW0gaW50fGZsb2F0ICAgICAkdGltZW91dAogICAgICogQHBhcmFtIGludHxmbG9hdCAgICAgJHJlYWRUaW1lb3V0CiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAgICAkcGVyc2lzdGVudAogICAgICogQHBhcmFtIG1peGVkICAgICAgICAgJGF1dGgKICAgICAqIEBwYXJhbSBhcnJheXxudWxsICAgICRjb250ZXh0CiAgICAgKiBAdGhyb3dzIFJlZGlzQ2x1c3RlckV4Y2VwdGlvbgogICAgICoKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogLy8gRGVjbGFyaW5nIGEgY2x1c3RlciB3aXRoIGFuIGFycmF5IG9mIHNlZWRzCiAgICAgKiAkcmVkaXNDbHVzdGVyID0gbmV3IFJlZGlzQ2x1c3RlcihudWxsLFsnMTI3LjAuMC4xOjYzNzknXSk7CiAgICAgKgogICAgICogLy8gTG9hZGluZyBhIGNsdXN0ZXIgY29uZmlndXJhdGlvbiBieSBuYW1lCiAgICAgKiAvLyBJbiBvcmRlciB0byBsb2FkIGEgbmFtZWQgYXJyYXksIG9uZSBtdXN0IGZpcnN0IGRlZmluZSB0aGUgc2VlZCBub2RlcyBpbiByZWRpcy5pbmkuCiAgICAgKiAvLyBUaGUgZm9sbG93aW5nIGxpbmVzIHdvdWxkIGRlZmluZSB0aGUgY2x1c3RlciAnbXljbHVzdGVyJywgYW5kIGJlIGxvYWRlZCBhdXRvbWF0aWNhbGx5IGJ5IHBocHJlZGlzLgogICAgICoKICAgICAqIC8vICMgSW4gcmVkaXMuaW5pCiAgICAgKiAvLyByZWRpcy5jbHVzdGVycy5zZWVkcyA9ICJteWNsdXN0ZXJbXT1sb2NhbGhvc3Q6NzAwMCZ0ZXN0W109bG9jYWxob3N0OjcwMDEiCiAgICAgKiAvLyByZWRpcy5jbHVzdGVycy50aW1lb3V0ID0gIm15Y2x1c3Rlcj01IgogICAgICogLy8gcmVkaXMuY2x1c3RlcnMucmVhZF90aW1lb3V0ID0gIm15Y2x1c3Rlcj0xMCIKICAgICAqIC8vIHJlZGlzLmNsdXN0ZXJzLmF1dGggPSAibXljbHVzdGVyPXBhc3N3b3JkIiBPUiBbJ3VzZXInID0+ICdmb28nLCAncGFzcycgPT4gJ2Jhcl0gYXMgZXhhbXBsZQogICAgICoKICAgICAqIC8vVGhlbiwgdGhpcyBjbHVzdGVyIGNhbiBiZSBsb2FkZWQgYnkgZG9pbmcgdGhlIGZvbGxvd2luZwogICAgICoKICAgICAqICRyZWRpc0NsdXN0ZXJQcm8gPSBuZXcgUmVkaXNDbHVzdGVyKCdteWNsdXN0ZXInKTsKICAgICAqICRyZWRpc0NsdXN0ZXJEZXYgPSBuZXcgUmVkaXNDbHVzdGVyKCd0ZXN0Jyk7CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRuYW1lLCAkc2VlZHMgPSBudWxsLCAkdGltZW91dCA9IG51bGwsICRyZWFkVGltZW91dCA9IG51bGwsICRwZXJzaXN0ZW50ID0gZmFsc2UsICRhdXRoID0gbnVsbCwgJGNvbnRleHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogRGlzY29ubmVjdHMgZnJvbSB0aGUgUmVkaXNDbHVzdGVyIGluc3RhbmNlLCBleGNlcHQgd2hlbiBwY29ubmVjdCBpcyB1c2VkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSB2YWx1ZSByZWxhdGVkIHRvIHRoZSBzcGVjaWZpZWQga2V5CiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBzdHJpbmd8ZmFsc2UgSWYga2V5IGRpZG4ndCBleGlzdCwgRkFMU0UgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgdGhlIHZhbHVlIHJlbGF0ZWQgdG8gdGhpcyBrZXkgaXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2dldAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5nZXQoJ2tleScpOwogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoJGtleSkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgc3RyaW5nIHZhbHVlIGluIGFyZ3VtZW50IGFzIHZhbHVlIG9mIHRoZSBrZXkuCiAgICAgKgogICAgICogQHNpbmNlICAgIElmIHlvdSdyZSB1c2luZyBSZWRpcyA+PSAyLjYuMTIsIHlvdSBjYW4gcGFzcyBleHRlbmRlZCBvcHRpb25zIGFzIGV4cGxhaW5lZCBpbiBleGFtcGxlCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICAgICRrZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAgICAkdmFsdWUKICAgICAqIEBwYXJhbSAgIGludHxhcnJheSAkdGltZW91dCBJZiB5b3UgcGFzcyBhbiBpbnRlZ2VyLCBwaHByZWRpcyB3aWxsIHJlZGlyZWN0IHRvIFNFVEVYLCBhbmQgd2lsbCB0cnkgdG8gdXNlIFJlZGlzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj0gMi42LjEyIGV4dGVuZGVkIG9wdGlvbnMgaWYgeW91IHBhc3MgYW4gYXJyYXkgd2l0aCB2YWxpZCB2YWx1ZXMuCiAgICAgKgogICAgICogQHJldHVybiAgYm9vbCBUUlVFIGlmIHRoZSBjb21tYW5kIGlzIHN1Y2Nlc3NmdWwuCiAgICAgKgogICAgICogQGxpbmsgICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc2V0CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqIC8vIFNpbXBsZSBrZXkgLT4gdmFsdWUgc2V0CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXQoJ2tleScsICd2YWx1ZScpOwogICAgICoKICAgICAqIC8vIFdpbGwgcmVkaXJlY3QsIGFuZCBhY3R1YWxseSBtYWtlIGFuIFNFVEVYIGNhbGwKICAgICAqICRyZWRpc0NsdXN0ZXItPnNldCgna2V5JywndmFsdWUnLCAxMCk7CiAgICAgKgogICAgICogLy8gV2lsbCBzZXQgdGhlIGtleSwgaWYgaXQgZG9lc24ndCBleGlzdCwgd2l0aCBhIHR0bCBvZiAxMCBzZWNvbmRzCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXQoJ2tleScsICd2YWx1ZScsIEFycmF5KCdueCcsICdleCc9PjEwKSk7CiAgICAgKgogICAgICogLy8gV2lsbCBzZXQgYSBrZXksIGlmIGl0IGRvZXMgZXhpc3QsIHdpdGggYSB0dGwgb2YgMTAwMCBtaWxsaXNlY29uZHMKICAgICAqICRyZWRpc0NsdXN0ZXItPnNldCgna2V5JywgJ3ZhbHVlJywgQXJyYXkoJ3h4JywgJ3B4Jz0+MTAwMCkpOwogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoJGtleSwgJHZhbHVlLCAkdGltZW91dCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZXMgb2YgYWxsIHNwZWNpZmllZCBrZXlzLgogICAgICoKICAgICAqIEZvciBldmVyeSBrZXkgdGhhdCBkb2VzIG5vdCBob2xkIGEgc3RyaW5nIHZhbHVlIG9yIGRvZXMgbm90IGV4aXN0LAogICAgICogdGhlIHNwZWNpYWwgdmFsdWUgZmFsc2UgaXMgcmV0dXJuZWQuIEJlY2F1c2Ugb2YgdGhpcywgdGhlIG9wZXJhdGlvbiBuZXZlciBmYWlscy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFycmF5CiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvbWdldAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ3gnLCAneScsICd6JywgJ2gnKTsgICAgLy8gcmVtb3ZlIHggeSB6CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5tc2V0KGFycmF5KCd4JyA9PiAnYScsICd5JyA9PiAnYicsICd6JyA9PiAnYycpKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmhzZXQoJ2gnLCAnZmllbGQnLCAndmFsdWUnKTsKICAgICAqIHZhcl9kdW1wKCRyZWRpc0NsdXN0ZXItPm1nZXQoYXJyYXkoJ3gnLCAneScsICd6JywgJ2gnKSkpOwogICAgICogLy8gT3V0cHV0OgogICAgICogLy8gYXJyYXkoMykgewogICAgICogLy8gWzBdPT4KICAgICAqIC8vIHN0cmluZygxKSAiYSIKICAgICAqIC8vIFsxXT0+CiAgICAgKiAvLyBzdHJpbmcoMSkgImIiCiAgICAgKiAvLyBbMl09PgogICAgICogLy8gc3RyaW5nKDEpICJjIgogICAgICogLy8gWzNdPT4KICAgICAqIC8vIGJvb2woZmFsc2UpCiAgICAgKiAvLyB9CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1nZXQoYXJyYXkgJGFycmF5KSB7fQoKICAgIC8qKgogICAgICogU2V0cyBtdWx0aXBsZSBrZXktdmFsdWUgcGFpcnMgaW4gb25lIGF0b21pYyBjb21tYW5kLgogICAgICogTVNFVE5YIG9ubHkgcmV0dXJucyBUUlVFIGlmIGFsbCB0aGUga2V5cyB3ZXJlIHNldCAoc2VlIFNFVE5YKS4KICAgICAqCiAgICAgKiBAcGFyYW0gICBhcnJheSAkYXJyYXkgUGFpcnM6IGFycmF5KGtleSA9PiB2YWx1ZSwgLi4uKQogICAgICoKICAgICAqIEByZXR1cm4gIGJvb2wgICAgVFJVRSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIEZBTFNFIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvbXNldAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5tc2V0KGFycmF5KCdrZXkwJyA9PiAndmFsdWUwJywgJ2tleTEnID0+ICd2YWx1ZTEnKSk7CiAgICAgKiB2YXJfZHVtcCgkcmVkaXNDbHVzdGVyLT5nZXQoJ2tleTAnKSk7CiAgICAgKiB2YXJfZHVtcCgkcmVkaXNDbHVzdGVyLT5nZXQoJ2tleTEnKSk7CiAgICAgKiAvLyBPdXRwdXQ6CiAgICAgKiAvLyBzdHJpbmcoNikgInZhbHVlMCIKICAgICAqIC8vIHN0cmluZyg2KSAidmFsdWUxIgogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtc2V0KGFycmF5ICRhcnJheSkge30KCiAgICAvKioKICAgICAqIEBzZWUgICAgIG1zZXQoKQogICAgICoKICAgICAqIEBwYXJhbSAgIGFycmF5ICRhcnJheQogICAgICoKICAgICAqIEByZXR1cm4gIGludCAxIChpZiB0aGUga2V5cyB3ZXJlIHNldCkgb3IgMCAobm8ga2V5IHdhcyBzZXQpCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL21zZXRueAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXNldG54KGFycmF5ICRhcnJheSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBzcGVjaWZpZWQga2V5cy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZ3xhcnJheSAka2V5MSBBbiBhcnJheSBvZiBrZXlzLCBvciBhbiB1bmRlZmluZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMsIGVhY2ggYSBrZXk6IGtleTEga2V5MiBrZXkzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4ga2V5TgogICAgICogQHBhcmFtIGludHxzdHJpbmcgLi4uJG90aGVyS2V5cwogICAgICoKICAgICAqIEByZXR1cm4gaW50IE51bWJlciBvZiBrZXlzIGRlbGV0ZWQuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2RlbAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXQoJ2tleTEnLCAndmFsMScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0KCdrZXkyJywgJ3ZhbDInKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNldCgna2V5MycsICd2YWwzJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXQoJ2tleTQnLCAndmFsNCcpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdrZXkxJywgJ2tleTInKTsgICAgICAgICAgLy8gcmV0dXJuIDIKICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbChhcnJheSgna2V5MycsICdrZXk0JykpOyAgIC8vIHJldHVybiAyCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlbCgka2V5MSwgLi4uJG90aGVyS2V5cykge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgc3RyaW5nIHZhbHVlIGluIGFyZ3VtZW50IGFzIHZhbHVlIG9mIHRoZSBrZXksIHdpdGggYSB0aW1lIHRvIGxpdmUuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkdHRsCiAgICAgKiBAcGFyYW0gICBtaXhlZCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuICBib29sICAgVFJVRSBpZiB0aGUgY29tbWFuZCBpcyBzdWNjZXNzZnVsLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zZXRleAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXRleCgna2V5JywgMzYwMCwgJ3ZhbHVlJyk7IC8vIHNldHMga2V5IOKGkiB2YWx1ZSwgd2l0aCAxaCBUVEwuCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGV4KCRrZXksICR0dGwsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIFBTRVRFWCB3b3JrcyBleGFjdGx5IGxpa2UgU0VURVggd2l0aCB0aGUgc29sZSBkaWZmZXJlbmNlIHRoYXQgdGhlIGV4cGlyZSB0aW1lIGlzIHNwZWNpZmllZCBpbiBtaWxsaXNlY29uZHMKICAgICAqIGluc3RlYWQgb2Ygc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgaW50ICAgICR0dGwKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuICBib29sICAgVFJVRSBpZiB0aGUgY29tbWFuZCBpcyBzdWNjZXNzZnVsLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9wc2V0ZXgKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+cHNldGV4KCdrZXknLCAxMDAwLCAndmFsdWUnKTsgLy8gc2V0cyBrZXkg4oaSIHZhbHVlLCB3aXRoIDFzIFRUTC4KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHNldGV4KCRrZXksICR0dGwsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgc3RyaW5nIHZhbHVlIGluIGFyZ3VtZW50IGFzIHZhbHVlIG9mIHRoZSBrZXkgaWYgdGhlIGtleSBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gdGhlIGRhdGFiYXNlLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiAgYm9vbCAgIFRSVUUgaW4gY2FzZSBvZiBzdWNjZXNzLCBGQUxTRSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NldG54CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNldG54KCdrZXknLCAndmFsdWUnKTsgICAvLyByZXR1cm4gVFJVRQogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0bngoJ2tleScsICd2YWx1ZScpOyAgIC8vIHJldHVybiBGQUxTRQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRueCgka2V5LCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIGEgdmFsdWUgYW5kIHJldHVybnMgdGhlIHByZXZpb3VzIGVudHJ5IGF0IHRoYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiAgc3RyaW5nICBBIHN0cmluZywgdGhlIHByZXZpb3VzIHZhbHVlIGxvY2F0ZWQgYXQgdGhpcyBrZXkuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2dldHNldAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXQoJ3gnLCAnNDInKTsKICAgICAqICRleFZhbHVlID0gJHJlZGlzQ2x1c3Rlci0+Z2V0U2V0KCd4JywgJ2xvbCcpOyAgIC8vIHJldHVybiAnNDInLCByZXBsYWNlcyB4IGJ5ICdsb2wnCiAgICAgKiAkbmV3VmFsdWUgPSAkcmVkaXNDbHVzdGVyLT5nZXQoJ3gnKTsgICAgICAgICAgICAvLyByZXR1cm4gJ2xvbCcKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2V0KCRrZXksICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIFZlcmlmeSBpZiB0aGUgc3BlY2lmaWVkIGtleSBleGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBib29sIElmIHRoZSBrZXkgZXhpc3RzLCByZXR1cm4gVFJVRSwgb3RoZXJ3aXNlIHJldHVybiBGQUxTRS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZXhpc3RzCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNldCgna2V5JywgJ3ZhbHVlJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5leGlzdHMoJ2tleScpOyAgICAgICAgICAgICAgIC8vICBUUlVFCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5leGlzdHMoJ05vbkV4aXN0aW5nS2V5Jyk7ICAgIC8vIEZBTFNFCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4aXN0cygka2V5KSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUga2V5cyB0aGF0IG1hdGNoIGEgY2VydGFpbiBwYXR0ZXJuLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkcGF0dGVybiBwYXR0ZXJuLCB1c2luZyAnKicgYXMgYSB3aWxkY2FyZC4KICAgICAqCiAgICAgKiBAcmV0dXJuICBhcnJheSAgIG9mIFNUUklORzogVGhlIGtleXMgdGhhdCBtYXRjaCBhIGNlcnRhaW4gcGF0dGVybi4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMva2V5cwogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkYWxsS2V5cyA9ICRyZWRpc0NsdXN0ZXItPmtleXMoJyonKTsgICAvLyBhbGwga2V5cyB3aWxsIG1hdGNoIHRoaXMuCiAgICAgKiAka2V5V2l0aFVzZXJQcmVmaXggPSAkcmVkaXNDbHVzdGVyLT5rZXlzKCd1c2VyKicpOwogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlzKCRwYXR0ZXJuKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdHlwZSBvZiBkYXRhIHBvaW50ZWQgYnkgYSBnaXZlbiBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQKICAgICAqCiAgICAgKiBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIGRhdGEgcG9pbnRlZCBieSB0aGUga2V5LAogICAgICogdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIGZvbGxvd2luZyB2YWx1ZToKICAgICAqIC0gc3RyaW5nOiBSZWRpc0NsdXN0ZXI6OlJFRElTX1NUUklORwogICAgICogLSBzZXQ6ICAgUmVkaXNDbHVzdGVyOjpSRURJU19TRVQKICAgICAqIC0gbGlzdDogIFJlZGlzQ2x1c3Rlcjo6UkVESVNfTElTVAogICAgICogLSB6c2V0OiAgUmVkaXNDbHVzdGVyOjpSRURJU19aU0VUCiAgICAgKiAtIGhhc2g6ICBSZWRpc0NsdXN0ZXI6OlJFRElTX0hBU0gKICAgICAqIC0gb3RoZXI6IFJlZGlzQ2x1c3Rlcjo6UkVESVNfTk9UX0ZPVU5ECiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3R5cGUKICAgICAqIEBleGFtcGxlICRyZWRpc0NsdXN0ZXItPnR5cGUoJ2tleScpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdHlwZSgka2V5KSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbmQgcmVtb3ZlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgbGlzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICoKICAgICAqIEByZXR1cm4gIHN0cmluZ3xmYWxzZSBpZiBjb21tYW5kIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSBCT09MIEZBTFNFIGluIGNhc2Ugb2YgZmFpbHVyZSAoZW1wdHkgbGlzdCkKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvbHBvcAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaCgna2V5MScsICdBJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaCgna2V5MScsICdCJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaCgna2V5MScsICdDJyk7CiAgICAgKiB2YXJfZHVtcCggJHJlZGlzQ2x1c3Rlci0+bFJhbmdlKCdrZXkxJywgMCwgLTEpICk7CiAgICAgKiAvLyBPdXRwdXQ6CiAgICAgKiAvLyBhcnJheSgzKSB7CiAgICAgKiAvLyAgIFswXT0+IHN0cmluZygxKSAiQSIKICAgICAqIC8vICAgWzFdPT4gc3RyaW5nKDEpICJCIgogICAgICogLy8gICBbMl09PiBzdHJpbmcoMSkgIkMiCiAgICAgKiAvLyB9CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sUG9wKCdrZXkxJyk7CiAgICAgKiB2YXJfZHVtcCggJHJlZGlzQ2x1c3Rlci0+bFJhbmdlKCdrZXkxJywgMCwgLTEpICk7CiAgICAgKiAvLyBPdXRwdXQ6CiAgICAgKiAvLyBhcnJheSgyKSB7CiAgICAgKiAvLyAgIFswXT0+IHN0cmluZygxKSAiQiIKICAgICAqIC8vICAgWzFdPT4gc3RyaW5nKDEpICJDIgogICAgICogLy8gfQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsUG9wKCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuZCByZW1vdmVzIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGxpc3QuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBzdHJpbmd8ZmFsc2UgaWYgY29tbWFuZCBleGVjdXRlZCBzdWNjZXNzZnVsbHkgQk9PTCBGQUxTRSBpbiBjYXNlIG9mIGZhaWx1cmUgKGVtcHR5IGxpc3QpCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3Jwb3AKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+clB1c2goJ2tleTEnLCAnQScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+clB1c2goJ2tleTEnLCAnQicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+clB1c2goJ2tleTEnLCAnQycpOwogICAgICogdmFyX2R1bXAoICRyZWRpc0NsdXN0ZXItPmxSYW5nZSgna2V5MScsIDAsIC0xKSApOwogICAgICogLy8gT3V0cHV0OgogICAgICogLy8gYXJyYXkoMykgewogICAgICogLy8gICBbMF09PiBzdHJpbmcoMSkgIkEiCiAgICAgKiAvLyAgIFsxXT0+IHN0cmluZygxKSAiQiIKICAgICAqIC8vICAgWzJdPT4gc3RyaW5nKDEpICJDIgogICAgICogLy8gfQogICAgICogJHJlZGlzQ2x1c3Rlci0+clBvcCgna2V5MScpOwogICAgICogdmFyX2R1bXAoICRyZWRpc0NsdXN0ZXItPmxSYW5nZSgna2V5MScsIDAsIC0xKSApOwogICAgICogLy8gT3V0cHV0OgogICAgICogLy8gYXJyYXkoMikgewogICAgICogLy8gICBbMF09PiBzdHJpbmcoMSkgIkEiCiAgICAgKiAvLyAgIFsxXT0+IHN0cmluZygxKSAiQiIKICAgICAqIC8vIH0KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gclBvcCgka2V5KSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBsaXN0IGF0IGluZGV4IHdpdGggdGhlIG5ldyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBpbnQgICAgJGluZGV4CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUUlVFIGlmIHRoZSBuZXcgdmFsdWUgaXMgc2V0dGVkLiBGQUxTRSBpZiB0aGUgaW5kZXggaXMgb3V0IG9mIHJhbmdlLCBvciBkYXRhIHR5cGUgaWRlbnRpZmllZCBieSBrZXkKICAgICAqIGlzIG5vdCBhIGxpc3QuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2xzZXQKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+clB1c2goJ2tleTEnLCAnQScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+clB1c2goJ2tleTEnLCAnQicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+clB1c2goJ2tleTEnLCAnQycpOyAgLy8ga2V5MSA9PiBbICdBJywgJ0InLCAnQycgXQogICAgICogJHJlZGlzQ2x1c3Rlci0+bEdldCgna2V5MScsIDApOyAgICAgLy8gJ0EnCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sU2V0KCdrZXkxJywgMCwgJ1gnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmxHZXQoJ2tleTEnLCAwKTsgICAgIC8vICdYJwogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsU2V0KCRrZXksICRpbmRleCwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhbmQgcmV0dXJucyBhIHJhbmRvbSBlbGVtZW50IGZyb20gdGhlIHNldCB2YWx1ZSBhdCBLZXkuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBzdHJpbmcgICJwb3BwZWQiIHZhbHVlCiAgICAgKiBib29sIEZBTFNFIGlmIHNldCBpZGVudGlmaWVkIGJ5IGtleSBpcyBlbXB0eSBvciBkb2Vzbid0IGV4aXN0LgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zcG9wCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2tleTEnICwgJ3NldDEnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2tleTEnICwgJ3NldDInKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2tleTEnICwgJ3NldDMnKTsKICAgICAqIHZhcl9kdW1wKCRyZWRpc0NsdXN0ZXItPnNNZW1iZXJzKCdrZXkxJykpOy8vICdrZXkxJyA9PiB7J3NldDMnLCAnc2V0MScsICdzZXQyJ30KICAgICAqICRyZWRpc0NsdXN0ZXItPnNQb3AoJ2tleTEnKTsvLyAnc2V0MScKICAgICAqIHZhcl9kdW1wKCRyZWRpc0NsdXN0ZXItPnNNZW1iZXJzKCdrZXkxJykpOy8vICdrZXkxJyA9PiB7J3NldDMnLCAnc2V0Mid9CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zUG9wKCdrZXkxJyk7Ly8gJ3NldDMnLAogICAgICogdmFyX2R1bXAoJHJlZGlzQ2x1c3Rlci0+c01lbWJlcnMoJ2tleTEnKSk7Ly8gJ2tleTEnID0+IHsnc2V0Mid9CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNQb3AoJGtleSkge30KCiAgICAvKioKICAgICAqIEFkZHMgdGhlIHN0cmluZyB2YWx1ZXMgdG8gdGhlIGhlYWQgKGxlZnQpIG9mIHRoZSBsaXN0LiBDcmVhdGVzIHRoZSBsaXN0IGlmIHRoZSBrZXkgZGlkbid0IGV4aXN0LgogICAgICogSWYgdGhlIGtleSBleGlzdHMgYW5kIGlzIG5vdCBhIGxpc3QsIEZBTFNFIGlzIHJldHVybmVkLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHZhbHVlMSBTdHJpbmcsIHZhbHVlIHRvIHB1c2ggaW4ga2V5CiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHZhbHVlMiBPcHRpb25hbAogICAgICogQHBhcmFtICAgc3RyaW5nICR2YWx1ZU4gT3B0aW9uYWwKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnR8ZmFsc2UgICAgVGhlIG5ldyBsZW5ndGggb2YgdGhlIGxpc3QgaW4gY2FzZSBvZiBzdWNjZXNzLCBGQUxTRSBpbiBjYXNlIG9mIEZhaWx1cmUuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2xwdXNoCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmxQdXNoKCdsJywgJ3YxJywgJ3YyJywgJ3YzJywgJ3Y0JykgICAvLyBpbnQoNCkKICAgICAqIHZhcl9kdW1wKCAkcmVkaXNDbHVzdGVyLT5sUmFuZ2UoJ2wnLCAwLCAtMSkgKTsKICAgICAqIC8vLy8gT3V0cHV0OgogICAgICogLy8gYXJyYXkoNCkgewogICAgICogLy8gICBbMF09PiBzdHJpbmcoMikgInY0IgogICAgICogLy8gICBbMV09PiBzdHJpbmcoMikgInYzIgogICAgICogLy8gICBbMl09PiBzdHJpbmcoMikgInYyIgogICAgICogLy8gICBbM109PiBzdHJpbmcoMikgInYxIgogICAgICogLy8gfQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsUHVzaCgka2V5LCAkdmFsdWUxLCAkdmFsdWUyID0gbnVsbCwgJHZhbHVlTiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIHRoZSBzdHJpbmcgdmFsdWVzIHRvIHRoZSB0YWlsIChyaWdodCkgb2YgdGhlIGxpc3QuIENyZWF0ZXMgdGhlIGxpc3QgaWYgdGhlIGtleSBkaWRuJ3QgZXhpc3QuCiAgICAgKiBJZiB0aGUga2V5IGV4aXN0cyBhbmQgaXMgbm90IGEgbGlzdCwgRkFMU0UgaXMgcmV0dXJuZWQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkdmFsdWUxIFN0cmluZywgdmFsdWUgdG8gcHVzaCBpbiBrZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkdmFsdWUyIE9wdGlvbmFsCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHZhbHVlTiBPcHRpb25hbAogICAgICoKICAgICAqIEByZXR1cm4gIGludHxmYWxzZSAgICAgVGhlIG5ldyBsZW5ndGggb2YgdGhlIGxpc3QgaW4gY2FzZSBvZiBzdWNjZXNzLCBGQUxTRSBpbiBjYXNlIG9mIEZhaWx1cmUuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3JwdXNoCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnJQdXNoKCdyJywgJ3YxJywgJ3YyJywgJ3YzJywgJ3Y0Jyk7ICAgIC8vIGludCg0KQogICAgICogdmFyX2R1bXAoICRyZWRpc0NsdXN0ZXItPmxSYW5nZSgncicsIDAsIC0xKSApOwogICAgICogLy8vLyBPdXRwdXQ6CiAgICAgKiAvLyBhcnJheSg0KSB7CiAgICAgKiAvLyAgIFswXT0+IHN0cmluZygyKSAidjEiCiAgICAgKiAvLyAgIFsxXT0+IHN0cmluZygyKSAidjIiCiAgICAgKiAvLyAgIFsyXT0+IHN0cmluZygyKSAidjMiCiAgICAgKiAvLyAgIFszXT0+IHN0cmluZygyKSAidjQiCiAgICAgKiAvLyB9CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJQdXNoKCRrZXksICR2YWx1ZTEsICR2YWx1ZTIgPSBudWxsLCAkdmFsdWVOID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEJMUE9QIGlzIGEgYmxvY2tpbmcgbGlzdCBwb3AgcHJpbWl0aXZlLgogICAgICogSXQgaXMgdGhlIGJsb2NraW5nIHZlcnNpb24gb2YgTFBPUCBiZWNhdXNlIGl0IGJsb2NrcyB0aGUgY29ubmVjdGlvbiB3aGVuCiAgICAgKiB0aGVyZSBhcmUgbm8gZWxlbWVudHMgdG8gcG9wIGZyb20gYW55IG9mIHRoZSBnaXZlbiBsaXN0cy4KICAgICAqIEFuIGVsZW1lbnQgaXMgcG9wcGVkIGZyb20gdGhlIGhlYWQgb2YgdGhlIGZpcnN0IGxpc3QgdGhhdCBpcyBub24tZW1wdHksCiAgICAgKiB3aXRoIHRoZSBnaXZlbiBrZXlzIGJlaW5nIGNoZWNrZWQgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBhcmUgZ2l2ZW4uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRrZXlzICAgIEFycmF5IGNvbnRhaW5pbmcgdGhlIGtleXMgb2YgdGhlIGxpc3RzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgT3IgU1RSSU5HIEtleTEgU1RSSU5HIEtleTIgU1RSSU5HIEtleTMgLi4uIFNUUklORyBLZXluCiAgICAgKiBAcGFyYW0gaW50ICAgJHRpbWVvdXQgVGltZW91dAogICAgICoKICAgICAqIEByZXR1cm4gIGFycmF5IGFycmF5KCdsaXN0TmFtZScsICdlbGVtZW50JykKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvYmxwb3AKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogLy8gTm9uIGJsb2NraW5nIGZlYXR1cmUKICAgICAqICRyZWRpc0NsdXN0ZXItPmxQdXNoKCdrZXkxJywgJ0EnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbCgna2V5MicpOwogICAgICoKICAgICAqICRyZWRpc0NsdXN0ZXItPmJsUG9wKCdrZXkxJywgJ2tleTInLCAxMCk7IC8vIGFycmF5KCdrZXkxJywgJ0EnKQogICAgICogLy8gT1IKICAgICAqICRyZWRpc0NsdXN0ZXItPmJsUG9wKGFycmF5KCdrZXkxJywgJ2tleTInKSwgMTApOyAvLyBhcnJheSgna2V5MScsICdBJykKICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5iclBvcCgna2V5MScsICdrZXkyJywgMTApOyAvLyBhcnJheSgna2V5MScsICdBJykKICAgICAqIC8vIE9SCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5iclBvcChhcnJheSgna2V5MScsICdrZXkyJyksIDEwKTsgLy8gYXJyYXkoJ2tleTEnLCAnQScpCiAgICAgKgogICAgICogLy8gQmxvY2tpbmcgZmVhdHVyZQogICAgICoKICAgICAqIC8vIHByb2Nlc3MgMQogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdrZXkxJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5ibFBvcCgna2V5MScsIDEwKTsKICAgICAqIC8vIGJsb2NraW5nIGZvciAxMCBzZWNvbmRzCiAgICAgKgogICAgICogLy8gcHJvY2VzcyAyCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sUHVzaCgna2V5MScsICdBJyk7CiAgICAgKgogICAgICogLy8gcHJvY2VzcyAxCiAgICAgKiAvLyBhcnJheSgna2V5MScsICdBJykgaXMgcmV0dXJuZWQKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmxQb3AoYXJyYXkgJGtleXMsICR0aW1lb3V0KSB7fQoKICAgIC8qKgogICAgICogQlJQT1AgaXMgYSBibG9ja2luZyBsaXN0IHBvcCBwcmltaXRpdmUuCiAgICAgKiBJdCBpcyB0aGUgYmxvY2tpbmcgdmVyc2lvbiBvZiBSUE9QIGJlY2F1c2UgaXQgYmxvY2tzIHRoZSBjb25uZWN0aW9uIHdoZW4KICAgICAqIHRoZXJlIGFyZSBubyBlbGVtZW50cyB0byBwb3AgZnJvbSBhbnkgb2YgdGhlIGdpdmVuIGxpc3RzLgogICAgICogQW4gZWxlbWVudCBpcyBwb3BwZWQgZnJvbSB0aGUgdGFpbCBvZiB0aGUgZmlyc3QgbGlzdCB0aGF0IGlzIG5vbi1lbXB0eSwKICAgICAqIHdpdGggdGhlIGdpdmVuIGtleXMgYmVpbmcgY2hlY2tlZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IGFyZSBnaXZlbi4KICAgICAqIFNlZSB0aGUgQkxQT1AgZG9jdW1lbnRhdGlvbihodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2JscG9wKSBmb3IgdGhlIGV4YWN0IHNlbWFudGljcywKICAgICAqIHNpbmNlIEJSUE9QIGlzIGlkZW50aWNhbCB0byBCTFBPUCB3aXRoIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmVpbmcgdGhhdAogICAgICogaXQgcG9wcyBlbGVtZW50cyBmcm9tIHRoZSB0YWlsIG9mIGEgbGlzdCBpbnN0ZWFkIG9mIHBvcHBpbmcgZnJvbSB0aGUgaGVhZC4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleXMgICAgQXJyYXkgY29udGFpbmluZyB0aGUga2V5cyBvZiB0aGUgbGlzdHMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICBPciBTVFJJTkcgS2V5MSBTVFJJTkcgS2V5MiBTVFJJTkcgS2V5MyAuLi4gU1RSSU5HIEtleW4KICAgICAqIEBwYXJhbSBpbnQgICAkdGltZW91dCBUaW1lb3V0CiAgICAgKgogICAgICogQHJldHVybiAgYXJyYXkgYXJyYXkoJ2xpc3ROYW1lJywgJ2VsZW1lbnQnKQogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9icnBvcAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAvLyBOb24gYmxvY2tpbmcgZmVhdHVyZQogICAgICogJHJlZGlzQ2x1c3Rlci0+bFB1c2goJ2tleTEnLCAnQScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdrZXkyJyk7CiAgICAgKgogICAgICogJHJlZGlzQ2x1c3Rlci0+YmxQb3AoJ2tleTEnLCAna2V5MicsIDEwKTsgLy8gYXJyYXkoJ2tleTEnLCAnQScpCiAgICAgKiAvLyBPUgogICAgICogJHJlZGlzQ2x1c3Rlci0+YmxQb3AoYXJyYXkoJ2tleTEnLCAna2V5MicpLCAxMCk7IC8vIGFycmF5KCdrZXkxJywgJ0EnKQogICAgICoKICAgICAqICRyZWRpc0NsdXN0ZXItPmJyUG9wKCdrZXkxJywgJ2tleTInLCAxMCk7IC8vIGFycmF5KCdrZXkxJywgJ0EnKQogICAgICogLy8gT1IKICAgICAqICRyZWRpc0NsdXN0ZXItPmJyUG9wKGFycmF5KCdrZXkxJywgJ2tleTInKSwgMTApOyAvLyBhcnJheSgna2V5MScsICdBJykKICAgICAqCiAgICAgKiAvLyBCbG9ja2luZyBmZWF0dXJlCiAgICAgKgogICAgICogLy8gcHJvY2VzcyAxCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ2tleTEnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmJsUG9wKCdrZXkxJywgMTApOwogICAgICogLy8gYmxvY2tpbmcgZm9yIDEwIHNlY29uZHMKICAgICAqCiAgICAgKiAvLyBwcm9jZXNzIDIKICAgICAqICRyZWRpc0NsdXN0ZXItPmxQdXNoKCdrZXkxJywgJ0EnKTsKICAgICAqCiAgICAgKiAvLyBwcm9jZXNzIDEKICAgICAqIC8vIGFycmF5KCdrZXkxJywgJ0EnKSBpcyByZXR1cm5lZAogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiclBvcChhcnJheSAka2V5cywgJHRpbWVvdXQpIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIHRoZSBzdHJpbmcgdmFsdWUgdG8gdGhlIHRhaWwgKHJpZ2h0KSBvZiB0aGUgbGlzdCBpZiB0aGUgaXN0IGV4aXN0cy4gRkFMU0UgaW4gY2FzZSBvZiBGYWlsdXJlLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHZhbHVlIFN0cmluZywgdmFsdWUgdG8gcHVzaCBpbiBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnR8ZmFsc2UgICAgIFRoZSBuZXcgbGVuZ3RoIG9mIHRoZSBsaXN0IGluIGNhc2Ugb2Ygc3VjY2VzcywgRkFMU0UgaW4gY2FzZSBvZiBGYWlsdXJlLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9ycHVzaHgKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdrZXkxJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaHgoJ2tleTEnLCAnQScpOyAvLyByZXR1cm5zIDAKICAgICAqICRyZWRpc0NsdXN0ZXItPnJQdXNoKCdrZXkxJywgJ0EnKTsgLy8gcmV0dXJucyAxCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaHgoJ2tleTEnLCAnQicpOyAvLyByZXR1cm5zIDIKICAgICAqICRyZWRpc0NsdXN0ZXItPnJQdXNoeCgna2V5MScsICdDJyk7IC8vIHJldHVybnMgMwogICAgICogLy8ga2V5MSBub3cgcG9pbnRzIHRvIHRoZSBmb2xsb3dpbmcgbGlzdDogWyAnQScsICdCJywgJ0MnIF0KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gclB1c2h4KCRrZXksICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIEFkZHMgdGhlIHN0cmluZyB2YWx1ZSB0byB0aGUgaGVhZCAobGVmdCkgb2YgdGhlIGxpc3QgaWYgdGhlIGxpc3QgZXhpc3RzLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHZhbHVlIFN0cmluZywgdmFsdWUgdG8gcHVzaCBpbiBrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnR8ZmFsc2UgICAgIFRoZSBuZXcgbGVuZ3RoIG9mIHRoZSBsaXN0IGluIGNhc2Ugb2Ygc3VjY2VzcywgRkFMU0UgaW4gY2FzZSBvZiBGYWlsdXJlLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9scHVzaHgKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdrZXkxJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sUHVzaHgoJ2tleTEnLCAnQScpOyAgICAgLy8gcmV0dXJucyAwCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sUHVzaCgna2V5MScsICdBJyk7ICAgICAgLy8gcmV0dXJucyAxCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sUHVzaHgoJ2tleTEnLCAnQicpOyAgICAgLy8gcmV0dXJucyAyCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sUHVzaHgoJ2tleTEnLCAnQycpOyAgICAgLy8gcmV0dXJucyAzCiAgICAgKiAvLyBrZXkxIG5vdyBwb2ludHMgdG8gdGhlIGZvbGxvd2luZyBsaXN0OiBbICdDJywgJ0InLCAnQScgXQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsUHVzaHgoJGtleSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogSW5zZXJ0IHZhbHVlIGluIHRoZSBsaXN0IGJlZm9yZSBvciBhZnRlciB0aGUgcGl2b3QgdmFsdWUuIHRoZSBwYXJhbWV0ZXIgb3B0aW9ucwogICAgICogc3BlY2lmeSB0aGUgcG9zaXRpb24gb2YgdGhlIGluc2VydCAoYmVmb3JlIG9yIGFmdGVyKS4gSWYgdGhlIGxpc3QgZGlkbid0IGV4aXN0cywKICAgICAqIG9yIHRoZSBwaXZvdCBkaWRuJ3QgZXhpc3RzLCB0aGUgdmFsdWUgaXMgbm90IGluc2VydGVkLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHBvc2l0aW9uIFJlZGlzQ2x1c3Rlcjo6QkVGT1JFIHwgUmVkaXNDbHVzdGVyOjpBRlRFUgogICAgICogQHBhcmFtICAgc3RyaW5nICRwaXZvdAogICAgICogQHBhcmFtICAgc3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gIGludCAgICAgVGhlIG51bWJlciBvZiB0aGUgZWxlbWVudHMgaW4gdGhlIGxpc3QsIC0xIGlmIHRoZSBwaXZvdCBkaWRuJ3QgZXhpc3RzLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9saW5zZXJ0CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbCgna2V5MScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+bEluc2VydCgna2V5MScsIFJlZGlzQ2x1c3Rlcjo6QUZURVIsICdBJywgJ1gnKTsgICAgLy8gMAogICAgICoKICAgICAqICRyZWRpc0NsdXN0ZXItPmxQdXNoKCdrZXkxJywgJ0EnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmxQdXNoKCdrZXkxJywgJ0InKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmxQdXNoKCdrZXkxJywgJ0MnKTsKICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sSW5zZXJ0KCdrZXkxJywgUmVkaXNDbHVzdGVyOjpCRUZPUkUsICdDJywgJ1gnKTsgICAvLyA0CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sUmFuZ2UoJ2tleTEnLCAwLCAtMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vIGFycmF5KCdYJywgJ0MnLCAnQicsICdBJykKICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sSW5zZXJ0KCdrZXkxJywgUmVkaXNDbHVzdGVyOjpBRlRFUiwgJ0MnLCAnWScpOyAgICAvLyA1CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sUmFuZ2UoJ2tleTEnLCAwLCAtMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vIGFycmF5KCdYJywgJ0MnLCAnWScsICdCJywgJ0EnKQogICAgICoKICAgICAqICRyZWRpc0NsdXN0ZXItPmxJbnNlcnQoJ2tleTEnLCBSZWRpc0NsdXN0ZXI6OkFGVEVSLCAnVycsICd2YWx1ZScpOyAvLyAtMQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsSW5zZXJ0KCRrZXksICRwb3NpdGlvbiwgJHBpdm90LCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHNwZWNpZmllZCBlbGVtZW50IG9mIHRoZSBsaXN0IHN0b3JlZCBhdCB0aGUgc3BlY2lmaWVkIGtleS4KICAgICAqIDAgdGhlIGZpcnN0IGVsZW1lbnQsIDEgdGhlIHNlY29uZCAuLi4gLTEgdGhlIGxhc3QgZWxlbWVudCwgLTIgdGhlIHBlbnVsdGltYXRlIC4uLgogICAgICogUmV0dXJuIEZBTFNFIGluIGNhc2Ugb2YgYSBiYWQgaW5kZXggb3IgYSBrZXkgdGhhdCBkb2Vzbid0IHBvaW50IHRvIGEgbGlzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBpbnQgICAgJGluZGV4CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIGVsZW1lbnQgYXQgdGhpcyBpbmRleAogICAgICogQm9vbCBGQUxTRSBpZiB0aGUga2V5IGlkZW50aWZpZXMgYSBub24tc3RyaW5nIGRhdGEgdHlwZSwgb3Igbm8gdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhpcyBpbmRleCBpbiB0aGUgbGlzdCBLZXkuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2xpbmRleAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaCgna2V5MScsICdBJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaCgna2V5MScsICdCJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaCgna2V5MScsICdDJyk7ICAvLyBrZXkxID0+IFsgJ0EnLCAnQicsICdDJyBdCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sR2V0KCdrZXkxJywgMCk7ICAgICAvLyAnQScKICAgICAqICRyZWRpc0NsdXN0ZXItPmxHZXQoJ2tleTEnLCAtMSk7ICAgIC8vICdDJwogICAgICogJHJlZGlzQ2x1c3Rlci0+bEdldCgna2V5MScsIDEwKTsgICAgLy8gYEZBTFNFYAogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsSW5kZXgoJGtleSwgJGluZGV4KSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyB0aGUgZmlyc3QgY291bnQgb2NjdXJyZW5jZXMgb2YgdGhlIHZhbHVlIGVsZW1lbnQgZnJvbSB0aGUgbGlzdC4KICAgICAqIElmIGNvdW50IGlzIHplcm8sIGFsbCB0aGUgbWF0Y2hpbmcgZWxlbWVudHMgYXJlIHJlbW92ZWQuIElmIGNvdW50IGlzIG5lZ2F0aXZlLAogICAgICogZWxlbWVudHMgYXJlIHJlbW92ZWQgZnJvbSB0YWlsIHRvIGhlYWQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSAgIGludCAgICAkY291bnQKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmVtb3ZlCiAgICAgKiBib29sIEZBTFNFIGlmIHRoZSB2YWx1ZSBpZGVudGlmaWVkIGJ5IGtleSBpcyBub3QgYSBsaXN0LgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9scmVtCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmxQdXNoKCdrZXkxJywgJ0EnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmxQdXNoKCdrZXkxJywgJ0InKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmxQdXNoKCdrZXkxJywgJ0MnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmxQdXNoKCdrZXkxJywgJ0EnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmxQdXNoKCdrZXkxJywgJ0EnKTsKICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sUmFuZ2UoJ2tleTEnLCAwLCAtMSk7ICAgLy8gYXJyYXkoJ0EnLCAnQScsICdDJywgJ0InLCAnQScpCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sUmVtKCdrZXkxJywgJ0EnLCAyKTsgICAgLy8gMgogICAgICogJHJlZGlzQ2x1c3Rlci0+bFJhbmdlKCdrZXkxJywgMCwgLTEpOyAgIC8vIGFycmF5KCdDJywgJ0InLCAnQScpCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxSZW0oJGtleSwgJHZhbHVlLCAkY291bnQpIHt9CgogICAgLyoqCiAgICAgKiBBIGJsb2NraW5nIHZlcnNpb24gb2YgcnBvcGxwdXNoLCB3aXRoIGFuIGludGVncmFsIHRpbWVvdXQgaW4gdGhlIHRoaXJkIHBhcmFtZXRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHNyY0tleQogICAgICogQHBhcmFtICAgc3RyaW5nICRkc3RLZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkdGltZW91dAogICAgICoKICAgICAqIEByZXR1cm4gIHN0cmluZ3xmYWxzZSAgVGhlIGVsZW1lbnQgdGhhdCB3YXMgbW92ZWQgaW4gY2FzZSBvZiBzdWNjZXNzLCBGQUxTRSBpbiBjYXNlIG9mIHRpbWVvdXQuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2JycG9wbHB1c2gKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJycG9wbHB1c2goJHNyY0tleSwgJGRzdEtleSwgJHRpbWVvdXQpIHt9CgogICAgLyoqCiAgICAgKiBQb3BzIGEgdmFsdWUgZnJvbSB0aGUgdGFpbCBvZiBhIGxpc3QsIGFuZCBwdXNoZXMgaXQgdG8gdGhlIGZyb250IG9mIGFub3RoZXIgbGlzdC4KICAgICAqIEFsc28gcmV0dXJuIHRoaXMgdmFsdWUuCiAgICAgKgogICAgICogQHNpbmNlICAgcmVkaXMgPj0gMS4yCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRzcmNLZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkZHN0S2V5CiAgICAgKgogICAgICogQHJldHVybiAgc3RyaW5nfGZhbHNlICBUaGUgZWxlbWVudCB0aGF0IHdhcyBtb3ZlZCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIEZBTFNFIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvcnBvcGxwdXNoCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbCgneCcsICd5Jyk7CiAgICAgKgogICAgICogJHJlZGlzQ2x1c3Rlci0+bFB1c2goJ3gnLCAnYWJjJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sUHVzaCgneCcsICdkZWYnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmxQdXNoKCd5JywgJzEyMycpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+bFB1c2goJ3knLCAnNDU2Jyk7CiAgICAgKgogICAgICogLy8gbW92ZSB0aGUgbGFzdCBvZiB4IHRvIHRoZSBmcm9udCBvZiB5LgogICAgICogdmFyX2R1bXAoJHJlZGlzQ2x1c3Rlci0+cnBvcGxwdXNoKCd4JywgJ3knKSk7CiAgICAgKiB2YXJfZHVtcCgkcmVkaXNDbHVzdGVyLT5sUmFuZ2UoJ3gnLCAwLCAtMSkpOwogICAgICogdmFyX2R1bXAoJHJlZGlzQ2x1c3Rlci0+bFJhbmdlKCd5JywgMCwgLTEpKTsKICAgICAqCiAgICAgKiAvLy8vT3V0cHV0OgogICAgICogLy8KICAgICAqIC8vc3RyaW5nKDMpICJhYmMiCiAgICAgKiAvL2FycmF5KDEpIHsKICAgICAqIC8vICBbMF09PgogICAgICogLy8gIHN0cmluZygzKSAiZGVmIgogICAgICogLy99CiAgICAgKiAvL2FycmF5KDMpIHsKICAgICAqIC8vICBbMF09PgogICAgICogLy8gIHN0cmluZygzKSAiYWJjIgogICAgICogLy8gIFsxXT0+CiAgICAgKiAvLyAgc3RyaW5nKDMpICI0NTYiCiAgICAgKiAvLyAgWzJdPT4KICAgICAqIC8vICBzdHJpbmcoMykgIjEyMyIKICAgICAqIC8vfQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBycG9wbHB1c2goJHNyY0tleSwgJGRzdEtleSkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNpemUgb2YgYSBsaXN0IGlkZW50aWZpZWQgYnkgS2V5LiBJZiB0aGUgbGlzdCBkaWRuJ3QgZXhpc3Qgb3IgaXMgZW1wdHksCiAgICAgKiB0aGUgY29tbWFuZCByZXR1cm5zIDAuIElmIHRoZSBkYXRhIHR5cGUgaWRlbnRpZmllZCBieSBLZXkgaXMgbm90IGEgbGlzdCwgdGhlIGNvbW1hbmQgcmV0dXJuIEZBTFNFLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKgogICAgICogQHJldHVybiAgaW50ICAgICBUaGUgc2l6ZSBvZiB0aGUgbGlzdCBpZGVudGlmaWVkIGJ5IEtleSBleGlzdHMuCiAgICAgKiBib29sIEZBTFNFIGlmIHRoZSBkYXRhIHR5cGUgaWRlbnRpZmllZCBieSBLZXkgaXMgbm90IGxpc3QKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvbGxlbgogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaCgna2V5MScsICdBJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaCgna2V5MScsICdCJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaCgna2V5MScsICdDJyk7ICAvLyBrZXkxID0+IFsgJ0EnLCAnQicsICdDJyBdCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sTGVuKCdrZXkxJyk7ICAgICAgIC8vIDMKICAgICAqICRyZWRpc0NsdXN0ZXItPnJQb3AoJ2tleTEnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmxMZW4oJ2tleTEnKTsgICAgICAgLy8gMgogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsTGVuKCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzZXQgY2FyZGluYWxpdHkgKG51bWJlciBvZiBlbGVtZW50cykgb2YgdGhlIHNldCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKgogICAgICogQHJldHVybiAgaW50ICAgdGhlIGNhcmRpbmFsaXR5IChudW1iZXIgb2YgZWxlbWVudHMpIG9mIHRoZSBzZXQsIG9yIDAgaWYga2V5IGRvZXMgbm90IGV4aXN0LgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zY2FyZAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkxJyAsICdzZXQxJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkxJyAsICdzZXQyJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkxJyAsICdzZXQzJyk7ICAgLy8gJ2tleTEnID0+IHsnc2V0MScsICdzZXQyJywgJ3NldDMnfQogICAgICogJHJlZGlzQ2x1c3Rlci0+c0NhcmQoJ2tleTEnKTsgICAgICAgICAgIC8vIDMKICAgICAqICRyZWRpc0NsdXN0ZXItPnNDYXJkKCdrZXlYJyk7ICAgICAgICAgICAvLyAwCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNDYXJkKCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCB0aGUgbWVtYmVycyBvZiB0aGUgc2V0IHZhbHVlIHN0b3JlZCBhdCBrZXkuCiAgICAgKiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgcnVubmluZyBTSU5URVIgd2l0aCBvbmUgYXJndW1lbnQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKgogICAgICogQHJldHVybiAgYXJyYXkgICBBbGwgZWxlbWVudHMgb2YgdGhlIHNldC4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc21lbWJlcnMKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdzJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdzJywgJ2EnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ3MnLCAnYicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgncycsICdhJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdzJywgJ2MnKTsKICAgICAqIHZhcl9kdW1wKCRyZWRpc0NsdXN0ZXItPnNNZW1iZXJzKCdzJykpOwogICAgICoKICAgICAqIC8vLy9PdXRwdXQ6CiAgICAgKiAvLwogICAgICogLy9hcnJheSgzKSB7CiAgICAgKiAvLyAgWzBdPT4KICAgICAqIC8vICBzdHJpbmcoMSkgImIiCiAgICAgKiAvLyAgWzFdPT4KICAgICAqIC8vICBzdHJpbmcoMSkgImMiCiAgICAgKiAvLyAgWzJdPT4KICAgICAqIC8vICBzdHJpbmcoMSkgImEiCiAgICAgKiAvL30KICAgICAqIC8vIFRoZSBvcmRlciBpcyByYW5kb20gYW5kIGNvcnJlc3BvbmRzIHRvIHJlZGlzJyBvd24gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNldCBzdHJ1Y3R1cmUuCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNNZW1iZXJzKCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGlmIG1lbWJlciBpcyBhIG1lbWJlciBvZiB0aGUgc2V0IHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuICBib29sICAgIFRSVUUgaWYgdmFsdWUgaXMgYSBtZW1iZXIgb2YgdGhlIHNldCBhdCBrZXkga2V5LCBGQUxTRSBvdGhlcndpc2UuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3Npc21lbWJlcgogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkxJyAsICdzZXQxJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkxJyAsICdzZXQyJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkxJyAsICdzZXQzJyk7IC8vICdrZXkxJyA9PiB7J3NldDEnLCAnc2V0MicsICdzZXQzJ30KICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zSXNNZW1iZXIoJ2tleTEnLCAnc2V0MScpOyAvLyBUUlVFCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zSXNNZW1iZXIoJ2tleTEnLCAnc2V0WCcpOyAvLyBGQUxTRQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzSXNNZW1iZXIoJGtleSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQWRkcyBhIHZhbHVlcyB0byB0aGUgc2V0IHZhbHVlIHN0b3JlZCBhdCBrZXkuCiAgICAgKiBJZiB0aGlzIHZhbHVlIGlzIGFscmVhZHkgaW4gdGhlIHNldCwgRkFMU0UgaXMgcmV0dXJuZWQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkgICAgUmVxdWlyZWQga2V5CiAgICAgKiBAcGFyYW0gICBtaXhlZCAkdmFsdWUxIFJlcXVpcmVkIHZhbHVlCiAgICAgKiBAcGFyYW0gICBtaXhlZCAkdmFsdWUyIE9wdGlvbmFsIHZhbHVlCiAgICAgKiBAcGFyYW0gICBtaXhlZCAkdmFsdWVOIE9wdGlvbmFsIHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiAgaW50fGZhbHNlICAgICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBzZXQKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc2FkZAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrJywgJ3YxJyk7ICAgICAgICAgICAgICAgIC8vIGludCgxKQogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnaycsICd2MScsICd2MicsICd2MycpOyAgICAvLyBpbnQoMikKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc0FkZCgka2V5LCAkdmFsdWUxLCAkdmFsdWUyID0gbnVsbCwgJHZhbHVlTiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIGEgdmFsdWVzIHRvIHRoZSBzZXQgdmFsdWUgc3RvcmVkIGF0IGtleS4KICAgICAqIElmIHRoaXMgdmFsdWUgaXMgYWxyZWFkeSBpbiB0aGUgc2V0LCBGQUxTRSBpcyByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleSBSZXF1aXJlZCBrZXkKICAgICAqIEBwYXJhbSAgIGFycmF5ICAkdmFsdWVBcnJheQogICAgICoKICAgICAqIEByZXR1cm4gIGludHxmYWxzZSAgICAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBhZGRlZCB0byB0aGUgc2V0CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGRBcnJheSgnaycsIFsndjEnLCAndjInLCAndjMnXSk7CiAgICAgKiAvL1RoaXMgaXMgYSBmZWF0dXJlIGluIHBocCBvbmx5LiBTYW1lIGFzICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2snLCAndjEnLCAndjInLCAndjMnKTsKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc0FkZEFycmF5KCRrZXksIGFycmF5ICR2YWx1ZUFycmF5KSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIG1lbWJlcnMgZnJvbSB0aGUgc2V0IHZhbHVlIHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkbWVtYmVyMQogICAgICogQHBhcmFtICAgc3RyaW5nICRtZW1iZXIyCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJG1lbWJlck4KICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgcmVtb3ZlZCBmcm9tIHRoZSBzZXQuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NyZW0KICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogdmFyX2R1bXAoICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2snLCAndjEnLCAndjInLCAndjMnKSApOyAgICAvLyBpbnQoMykKICAgICAqIHZhcl9kdW1wKCAkcmVkaXNDbHVzdGVyLT5zUmVtKCdrJywgJ3YyJywgJ3YzJykgKTsgICAgICAgICAgLy8gaW50KDIpCiAgICAgKiB2YXJfZHVtcCggJHJlZGlzQ2x1c3Rlci0+c01lbWJlcnMoJ2snKSApOwogICAgICogLy8vLyBPdXRwdXQ6CiAgICAgKiAvLyBhcnJheSgxKSB7CiAgICAgKiAvLyAgIFswXT0+IHN0cmluZygyKSAidjEiCiAgICAgKiAvLyB9CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNSZW0oJGtleSwgJG1lbWJlcjEsICRtZW1iZXIyID0gbnVsbCwgJG1lbWJlck4gPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgdGhlIHVuaW9uIGJldHdlZW4gTiBzZXRzIGFuZCByZXR1cm5zIGl0LgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5MSBBbnkgbnVtYmVyIG9mIGtleXMgY29ycmVzcG9uZGluZyB0byBzZXRzIGluIHJlZGlzLgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkyIC4uLgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXlOIC4uLgogICAgICoKICAgICAqIEByZXR1cm4gIGFycmF5ICAgb2Ygc3RyaW5nczogVGhlIHVuaW9uIG9mIGFsbCB0aGVzZSBzZXRzLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zdW5pb25zdG9yZQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ3MwJywgJ3MxJywgJ3MyJyk7CiAgICAgKgogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnczAnLCAnMScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnczAnLCAnMicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnczEnLCAnMycpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnczEnLCAnMScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnczInLCAnMycpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnczInLCAnNCcpOwogICAgICoKICAgICAqIHZhcl9kdW1wKCRyZWRpc0NsdXN0ZXItPnNVbmlvbignczAnLCAnczEnLCAnczInKSk7CiAgICAgKgogICAgICogLy8vLyBPdXRwdXQ6CiAgICAgKiAvLwogICAgICogLy9hcnJheSg0KSB7CiAgICAgKiAvLyAgWzBdPT4KICAgICAqIC8vICBzdHJpbmcoMSkgIjMiCiAgICAgKiAvLyAgWzFdPT4KICAgICAqIC8vICBzdHJpbmcoMSkgIjQiCiAgICAgKiAvLyAgWzJdPT4KICAgICAqIC8vICBzdHJpbmcoMSkgIjEiCiAgICAgKiAvLyAgWzNdPT4KICAgICAqIC8vICBzdHJpbmcoMSkgIjIiCiAgICAgKiAvL30KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc1VuaW9uKCRrZXkxLCAka2V5MiwgJGtleU4gPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgdGhlIHNhbWUgYWN0aW9uIGFzIHNVbmlvbiwgYnV0IHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBmaXJzdCBrZXkKICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGRzdEtleSB0aGUga2V5IHRvIHN0b3JlIHRoZSBkaWZmIGludG8uCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleTEgICBBbnkgbnVtYmVyIG9mIGtleXMgY29ycmVzcG9uZGluZyB0byBzZXRzIGluIHJlZGlzLgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkyICAgLi4uCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleU4gICAuLi4KICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgIEFueSBudW1iZXIgb2Yga2V5cyBjb3JyZXNwb25kaW5nIHRvIHNldHMgaW4gcmVkaXMuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3N1bmlvbnN0b3JlCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbCgnczAnLCAnczEnLCAnczInKTsKICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdzMCcsICcxJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdzMCcsICcyJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdzMScsICczJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdzMScsICcxJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdzMicsICczJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdzMicsICc0Jyk7CiAgICAgKgogICAgICogdmFyX2R1bXAoJHJlZGlzQ2x1c3Rlci0+c1VuaW9uU3RvcmUoJ2RzdCcsICdzMCcsICdzMScsICdzMicpKTsKICAgICAqIHZhcl9kdW1wKCRyZWRpc0NsdXN0ZXItPnNNZW1iZXJzKCdkc3QnKSk7CiAgICAgKgogICAgICogLy8vLyBPdXRwdXQ6CiAgICAgKiAvLwogICAgICogLy9pbnQoNCkKICAgICAqIC8vYXJyYXkoNCkgewogICAgICogLy8gIFswXT0+CiAgICAgKiAvLyAgc3RyaW5nKDEpICIzIgogICAgICogLy8gIFsxXT0+CiAgICAgKiAvLyAgc3RyaW5nKDEpICI0IgogICAgICogLy8gIFsyXT0+CiAgICAgKiAvLyAgc3RyaW5nKDEpICIxIgogICAgICogLy8gIFszXT0+CiAgICAgKiAvLyAgc3RyaW5nKDEpICIyIgogICAgICogLy99CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNVbmlvblN0b3JlKCRkc3RLZXksICRrZXkxLCAka2V5MiwgJGtleU4gPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbWVtYmVycyBvZiBhIHNldCByZXN1bHRpbmcgZnJvbSB0aGUgaW50ZXJzZWN0aW9uIG9mIGFsbCB0aGUgc2V0cwogICAgICogaGVsZCBhdCB0aGUgc3BlY2lmaWVkIGtleXMuIElmIGp1c3QgYSBzaW5nbGUga2V5IGlzIHNwZWNpZmllZCwgdGhlbiB0aGlzIGNvbW1hbmQKICAgICAqIHByb2R1Y2VzIHRoZSBtZW1iZXJzIG9mIHRoaXMgc2V0LiBJZiBvbmUgb2YgdGhlIGtleXMgaXMgbWlzc2luZywgRkFMU0UgaXMgcmV0dXJuZWQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkxIGtleXMgaWRlbnRpZnlpbmcgdGhlIGRpZmZlcmVudCBzZXRzIG9uIHdoaWNoIHdlIHdpbGwgYXBwbHkgdGhlIGludGVyc2VjdGlvbi4KICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5MiAuLi4KICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5TiAuLi4KICAgICAqCiAgICAgKiBAcmV0dXJuICBhcnJheSBjb250YWluIHRoZSByZXN1bHQgb2YgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIHRob3NlIGtleXMuCiAgICAgKiBJZiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gdGhlIGRpZmZlcmVudCBzZXRzIGlzIGVtcHR5LCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgZW1wdHkgYXJyYXkuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NpbnRlcnN0b3JlCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2tleTEnLCAndmFsMScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgna2V5MScsICd2YWwyJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkxJywgJ3ZhbDMnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2tleTEnLCAndmFsNCcpOwogICAgICoKICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2tleTInLCAndmFsMycpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgna2V5MicsICd2YWw0Jyk7CiAgICAgKgogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgna2V5MycsICd2YWwzJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkzJywgJ3ZhbDQnKTsKICAgICAqCiAgICAgKiB2YXJfZHVtcCgkcmVkaXNDbHVzdGVyLT5zSW50ZXIoJ2tleTEnLCAna2V5MicsICdrZXkzJykpOwogICAgICoKICAgICAqIC8vIE91dHB1dDoKICAgICAqIC8vCiAgICAgKiAvL2FycmF5KDIpIHsKICAgICAqIC8vICBbMF09PgogICAgICogLy8gIHN0cmluZyg0KSAidmFsNCIKICAgICAqIC8vICBbMV09PgogICAgICogLy8gIHN0cmluZyg0KSAidmFsMyIKICAgICAqIC8vfQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzSW50ZXIoJGtleTEsICRrZXkyLCAka2V5TiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtcyBhIHNJbnRlciBjb21tYW5kIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiBhIG5ldyBzZXQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRkc3RLZXkgdGhlIGtleSB0byBzdG9yZSB0aGUgZGlmZiBpbnRvLgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkxICAgYXJlIGludGVyc2VjdGVkIGFzIGluIHNJbnRlci4KICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5MiAgIC4uLgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXlOICAgLi4uCiAgICAgKgogICAgICogQHJldHVybiAgaW50fGZhbHNlICAgIFRoZSBjYXJkaW5hbGl0eSBvZiB0aGUgcmVzdWx0aW5nIHNldCwgb3IgRkFMU0UgaW4gY2FzZSBvZiBhIG1pc3Npbmcga2V5LgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zaW50ZXJzdG9yZQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkxJywgJ3ZhbDEnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2tleTEnLCAndmFsMicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgna2V5MScsICd2YWwzJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkxJywgJ3ZhbDQnKTsKICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkyJywgJ3ZhbDMnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2tleTInLCAndmFsNCcpOwogICAgICoKICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2tleTMnLCAndmFsMycpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgna2V5MycsICd2YWw0Jyk7CiAgICAgKgogICAgICogdmFyX2R1bXAoJHJlZGlzQ2x1c3Rlci0+c0ludGVyU3RvcmUoJ291dHB1dCcsICdrZXkxJywgJ2tleTInLCAna2V5MycpKTsKICAgICAqIHZhcl9kdW1wKCRyZWRpc0NsdXN0ZXItPnNNZW1iZXJzKCdvdXRwdXQnKSk7CiAgICAgKgogICAgICogLy8vLyBPdXRwdXQ6CiAgICAgKiAvLwogICAgICogLy9pbnQoMikKICAgICAqIC8vYXJyYXkoMikgewogICAgICogLy8gIFswXT0+CiAgICAgKiAvLyAgc3RyaW5nKDQpICJ2YWw0IgogICAgICogLy8gIFsxXT0+CiAgICAgKiAvLyAgc3RyaW5nKDQpICJ2YWwzIgogICAgICogLy99CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNJbnRlclN0b3JlKCRkc3RLZXksICRrZXkxLCAka2V5MiwgJGtleU4gPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBOIHNldHMgYW5kIHJldHVybnMgaXQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkxIEFueSBudW1iZXIgb2Yga2V5cyBjb3JyZXNwb25kaW5nIHRvIHNldHMgaW4gcmVkaXMuCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleTIgLi4uCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleU4gLi4uCiAgICAgKgogICAgICogQHJldHVybiAgYXJyYXkgICBvZiBzdHJpbmdzOiBUaGUgZGlmZmVyZW5jZSBvZiB0aGUgZmlyc3Qgc2V0IHdpbGwgYWxsIHRoZSBvdGhlcnMuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NkaWZmCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbCgnczAnLCAnczEnLCAnczInKTsKICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdzMCcsICcxJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdzMCcsICcyJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdzMCcsICczJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdzMCcsICc0Jyk7CiAgICAgKgogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnczEnLCAnMScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnczInLCAnMycpOwogICAgICoKICAgICAqIHZhcl9kdW1wKCRyZWRpc0NsdXN0ZXItPnNEaWZmKCdzMCcsICdzMScsICdzMicpKTsKICAgICAqCiAgICAgKiAvLy8vIE91dHB1dDoKICAgICAqIC8vCiAgICAgKiAvL2FycmF5KDIpIHsKICAgICAqIC8vICBbMF09PgogICAgICogLy8gIHN0cmluZygxKSAiNCIKICAgICAqIC8vICBbMV09PgogICAgICogLy8gIHN0cmluZygxKSAiMiIKICAgICAqIC8vfQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzRGlmZigka2V5MSwgJGtleTIsICRrZXlOID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFBlcmZvcm1zIHRoZSBzYW1lIGFjdGlvbiBhcyBzRGlmZiwgYnV0IHN0b3JlcyB0aGUgcmVzdWx0IGluIHRoZSBmaXJzdCBrZXkKICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGRzdEtleSB0aGUga2V5IHRvIHN0b3JlIHRoZSBkaWZmIGludG8uCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleTEgICBBbnkgbnVtYmVyIG9mIGtleXMgY29ycmVzcG9uZGluZyB0byBzZXRzIGluIHJlZGlzCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleTIgICAuLi4KICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5TiAgIC4uLgogICAgICoKICAgICAqIEByZXR1cm4gIGludHxmYWxzZSAgICBUaGUgY2FyZGluYWxpdHkgb2YgdGhlIHJlc3VsdGluZyBzZXQsIG9yIEZBTFNFIGluIGNhc2Ugb2YgYSBtaXNzaW5nIGtleS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc2RpZmZzdG9yZQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ3MwJywgJ3MxJywgJ3MyJyk7CiAgICAgKgogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnczAnLCAnMScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnczAnLCAnMicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnczAnLCAnMycpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgnczAnLCAnNCcpOwogICAgICoKICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ3MxJywgJzEnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ3MyJywgJzMnKTsKICAgICAqCiAgICAgKiB2YXJfZHVtcCgkcmVkaXNDbHVzdGVyLT5zRGlmZlN0b3JlKCdkc3QnLCAnczAnLCAnczEnLCAnczInKSk7CiAgICAgKiB2YXJfZHVtcCgkcmVkaXNDbHVzdGVyLT5zTWVtYmVycygnZHN0JykpOwogICAgICoKICAgICAqIC8vLy8gT3V0cHV0OgogICAgICogLy8KICAgICAqIC8vaW50KDIpCiAgICAgKiAvL2FycmF5KDIpIHsKICAgICAqIC8vICBbMF09PgogICAgICogLy8gIHN0cmluZygxKSAiNCIKICAgICAqIC8vICBbMV09PgogICAgICogLy8gIHN0cmluZygxKSAiMiIKICAgICAqIC8vfQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzRGlmZlN0b3JlKCRkc3RLZXksICRrZXkxLCAka2V5MiwgJGtleU4gPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHJhbmRvbSBlbGVtZW50KHMpIGZyb20gdGhlIHNldCB2YWx1ZSBhdCBLZXksIHdpdGhvdXQgcmVtb3ZpbmcgaXQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkY291bnQgW29wdGlvbmFsXQogICAgICoKICAgICAqIEByZXR1cm4gIHN0cmluZ3xhcnJheSAgdmFsdWUocykgZnJvbSB0aGUgc2V0CiAgICAgKiBib29sIEZBTFNFIGlmIHNldCBpZGVudGlmaWVkIGJ5IGtleSBpcyBlbXB0eSBvciBkb2Vzbid0IGV4aXN0IGFuZCBjb3VudCBhcmd1bWVudCBpc24ndCBwYXNzZWQuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NyYW5kbWVtYmVyCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2tleTEnICwgJ29uZScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgna2V5MScgLCAndHdvJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkxJyAsICd0aHJlZScpOyAgICAgICAgICAgICAgLy8gJ2tleTEnID0+IHsnb25lJywgJ3R3bycsICd0aHJlZSd9CiAgICAgKgogICAgICogdmFyX2R1bXAoICRyZWRpc0NsdXN0ZXItPnNSYW5kTWVtYmVyKCdrZXkxJykgKTsgICAgIC8vICdrZXkxJyA9PiB7J29uZScsICd0d28nLCAndGhyZWUnfQogICAgICoKICAgICAqIC8vIHN0cmluZyg1KSAidGhyZWUiCiAgICAgKgogICAgICogdmFyX2R1bXAoICRyZWRpc0NsdXN0ZXItPnNSYW5kTWVtYmVyKCdrZXkxJywgMikgKTsgIC8vICdrZXkxJyA9PiB7J29uZScsICd0d28nLCAndGhyZWUnfQogICAgICoKICAgICAqIC8vIGFycmF5KDIpIHsKICAgICAqIC8vICAgWzBdPT4gc3RyaW5nKDIpICJvbmUiCiAgICAgKiAvLyAgIFsxXT0+IHN0cmluZygyKSAidGhyZWUiCiAgICAgKiAvLyB9CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNSYW5kTWVtYmVyKCRrZXksICRjb3VudCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICoKICAgICAqIEByZXR1cm4gIGludAogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zdHJsZW4KICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0KCdrZXknLCAndmFsdWUnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnN0cmxlbigna2V5Jyk7IC8vIDUKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RybGVuKCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgdGhlIGV4cGlyYXRpb24gdGltZXIgZnJvbSBhIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICoKICAgICAqIEByZXR1cm4gIGJvb2wgICBUUlVFIGlmIGEgdGltZW91dCB3YXMgcmVtb3ZlZCwgRkFMU0UgaWYgdGhlIGtleSBkaWRu4oCZdCBleGlzdCBvciBkaWRu4oCZdCBoYXZlIGFuIGV4cGlyYXRpb24gdGltZXIuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3BlcnNpc3QKICAgICAqIEBleGFtcGxlICRyZWRpc0NsdXN0ZXItPnBlcnNpc3QoJ2tleScpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGVyc2lzdCgka2V5KSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVtYWluaW5nIHRpbWUgdG8gbGl2ZSBvZiBhIGtleSB0aGF0IGhhcyBhIHRpbWVvdXQuCiAgICAgKiBUaGlzIGludHJvc3BlY3Rpb24gY2FwYWJpbGl0eSBhbGxvd3MgYSBSZWRpcyBjbGllbnQgdG8gY2hlY2sgaG93IG1hbnkgc2Vjb25kcyBhIGdpdmVuIGtleSB3aWxsIGNvbnRpbnVlIHRvIGJlCiAgICAgKiBwYXJ0IG9mIHRoZSBkYXRhc2V0LiBJbiBSZWRpcyAyLjYgb3Igb2xkZXIgdGhlIGNvbW1hbmQgcmV0dXJucyAtMSBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZSBrZXkgZXhpc3QKICAgICAqIGJ1dCBoYXMgbm8gYXNzb2NpYXRlZCBleHBpcmUuIFN0YXJ0aW5nIHdpdGggUmVkaXMgMi44IHRoZSByZXR1cm4gdmFsdWUgaW4gY2FzZSBvZiBlcnJvciBjaGFuZ2VkOiBSZXR1cm5zIC0yIGlmCiAgICAgKiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LiBSZXR1cm5zIC0xIGlmIHRoZSBrZXkgZXhpc3RzIGJ1dCBoYXMgbm8gYXNzb2NpYXRlZCBleHBpcmUuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgdGhlIHRpbWUgbGVmdCB0byBsaXZlIGluIHNlY29uZHMuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3R0bAogICAgICogQGV4YW1wbGUgJHJlZGlzQ2x1c3Rlci0+dHRsKCdrZXknKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHR0bCgka2V5KSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVtYWluaW5nIHRpbWUgdG8gbGl2ZSBvZiBhIGtleSB0aGF0IGhhcyBhbiBleHBpcmUgc2V0LAogICAgICogd2l0aCB0aGUgc29sZSBkaWZmZXJlbmNlIHRoYXQgVFRMIHJldHVybnMgdGhlIGFtb3VudCBvZiByZW1haW5pbmcgdGltZSBpbiBzZWNvbmRzIHdoaWxlIFBUVEwgcmV0dXJucyBpdCBpbgogICAgICogbWlsbGlzZWNvbmRzLiBJbiBSZWRpcyAyLjYgb3Igb2xkZXIgdGhlIGNvbW1hbmQgcmV0dXJucyAtMSBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZSBrZXkgZXhpc3QgYnV0IGhhcwogICAgICogbm8gYXNzb2NpYXRlZCBleHBpcmUuIFN0YXJ0aW5nIHdpdGggUmVkaXMgMi44IHRoZSByZXR1cm4gdmFsdWUgaW4gY2FzZSBvZiBlcnJvciBjaGFuZ2VkOiBSZXR1cm5zIC0yIGlmIHRoZSBrZXkKICAgICAqIGRvZXMgbm90IGV4aXN0LiBSZXR1cm5zIC0xIGlmIHRoZSBrZXkgZXhpc3RzIGJ1dCBoYXMgbm8gYXNzb2NpYXRlZCBleHBpcmUuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgIHRoZSB0aW1lIGxlZnQgdG8gbGl2ZSBpbiBtaWxsaXNlY29uZHMuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3B0dGwKICAgICAqIEBleGFtcGxlICRyZWRpc0NsdXN0ZXItPnB0dGwoJ2tleScpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHR0bCgka2V5KSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY2FyZGluYWxpdHkgb2YgYW4gb3JkZXJlZCBzZXQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgIHRoZSBzZXQncyBjYXJkaW5hbGl0eQogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96c2l6ZQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrZXknLCAwLCAndmFsMCcpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+ekFkZCgna2V5JywgMiwgJ3ZhbDInKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2tleScsIDEwLCAndmFsMTAnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnpDYXJkKCdrZXknKTsgICAgICAgICAgICAvLyAzCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHpDYXJkKCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IHRoZSBzcGVjaWZpZWQga2V5IHdoaWNoIGhhdmUKICAgICAqIHNjb3JlcyBpbiB0aGUgcmFuZ2UgW3N0YXJ0LGVuZF0uIEFkZGluZyBhIHBhcmVudGhlc2lzIGJlZm9yZSBzdGFydCBvciBlbmQgZXhjbHVkZXMgaXQKICAgICAqIGZyb20gdGhlIHJhbmdlLiAraW5mIGFuZCAtaW5mIGFyZSBhbHNvIHZhbGlkIGxpbWl0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgc3RyaW5nICRzdGFydAogICAgICogQHBhcmFtICAgc3RyaW5nICRlbmQKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgIHRoZSBzaXplIG9mIGEgY29ycmVzcG9uZGluZyB6UmFuZ2VCeVNjb3JlLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96Y291bnQKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+ekFkZCgna2V5JywgMCwgJ3ZhbDAnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2tleScsIDIsICd2YWwyJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrZXknLCAxMCwgJ3ZhbDEwJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56Q291bnQoJ2tleScsIDAsIDMpOyAvLyAyLCBjb3JyZXNwb25kaW5nIHRvIGFycmF5KCd2YWwwJywgJ3ZhbDInKQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6Q291bnQoJGtleSwgJHN0YXJ0LCAkZW5kKSB7fQoKICAgIC8qKgogICAgICogRGVsZXRlcyB0aGUgZWxlbWVudHMgb2YgdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IHRoZSBzcGVjaWZpZWQga2V5IHdoaWNoIGhhdmUgc2NvcmVzIGluIHRoZSByYW5nZSBbc3RhcnQsZW5kXS4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgc3RyaW5nICRzdGFydCBkb3VibGUgb3IgIitpbmYiIG9yICItaW5mIiBhcyBhIHN0cmluZwogICAgICogQHBhcmFtICAgc3RyaW5nICRlbmQgZG91YmxlIG9yICIraW5mIiBvciAiLWluZiIgYXMgYSBzdHJpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgICAgICAgICAgVGhlIG51bWJlciBvZiB2YWx1ZXMgZGVsZXRlZCBmcm9tIHRoZSBzb3J0ZWQgc2V0CiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3pyZW1yYW5nZWJ5c2NvcmUKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+ekFkZCgna2V5JywgMCwgJ3ZhbDAnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2tleScsIDIsICd2YWwyJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrZXknLCAxMCwgJ3ZhbDEwJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56UmVtUmFuZ2VCeVNjb3JlKCdrZXknLCAnMCcsICczJyk7IC8vIDIKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJlbVJhbmdlQnlTY29yZSgka2V5LCAkc3RhcnQsICRlbmQpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzY29yZSBvZiBhIGdpdmVuIG1lbWJlciBpbiB0aGUgc3BlY2lmaWVkIHNvcnRlZCBzZXQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkbWVtYmVyCiAgICAgKgogICAgICogQHJldHVybiAgZmxvYXQKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenNjb3JlCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2tleScsIDIuNSwgJ3ZhbDInKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnpTY29yZSgna2V5JywgJ3ZhbDInKTsgLy8gMi41CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHpTY29yZSgka2V5LCAkbWVtYmVyKSB7fQoKICAgIC8qKgogICAgICogQWRkcyB0aGUgc3BlY2lmaWVkIG1lbWJlciB3aXRoIGEgZ2l2ZW4gc2NvcmUgdG8gdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleSAgICBSZXF1aXJlZCBrZXkKICAgICAqIEBwYXJhbSAgIGZsb2F0ICAkc2NvcmUxIFJlcXVpcmVkIHNjb3JlCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHZhbHVlMSBSZXF1aXJlZCB2YWx1ZQogICAgICogQHBhcmFtICAgZmxvYXQgICRzY29yZTIgT3B0aW9uYWwgc2NvcmUKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkdmFsdWUyIE9wdGlvbmFsIHZhbHVlCiAgICAgKiBAcGFyYW0gICBmbG9hdCAgJHNjb3JlTiBPcHRpb25hbCBzY29yZQogICAgICogQHBhcmFtICAgc3RyaW5nICR2YWx1ZU4gT3B0aW9uYWwgdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgIE51bWJlciBvZiB2YWx1ZXMgYWRkZWQKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvemFkZAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCd6JywgMSwgJ3YyJywgMiwgJ3YyJywgMywgJ3YzJywgNCwgJ3Y0JyApOyAgLy8gaW50KDMpCiAgICAgKiAkcmVkaXNDbHVzdGVyLT56UmVtKCd6JywgJ3YyJywgJ3YzJyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50KDIpCiAgICAgKiB2YXJfZHVtcCggJHJlZGlzQ2x1c3Rlci0+elJhbmdlKCd6JywgMCwgLTEpICk7CiAgICAgKgogICAgICogLy8vLyBPdXRwdXQ6CiAgICAgKiAvLyBhcnJheSgxKSB7CiAgICAgKiAvLyAgIFswXT0+IHN0cmluZygyKSAidjQiCiAgICAgKiAvLyB9CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHpBZGQoJGtleSwgJHNjb3JlMSwgJHZhbHVlMSwgJHNjb3JlMiA9IG51bGwsICR2YWx1ZTIgPSBudWxsLCAkc2NvcmVOID0gbnVsbCwgJHZhbHVlTiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnRzIHRoZSBzY29yZSBvZiBhIG1lbWJlciBmcm9tIGEgc29ydGVkIHNldCBieSBhIGdpdmVuIGFtb3VudC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgZmxvYXQgICR2YWx1ZSAoZG91YmxlKSB2YWx1ZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1lbWJlcidzIHNjb3JlCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJG1lbWJlcgogICAgICoKICAgICAqIEByZXR1cm4gIGZsb2F0ICAgdGhlIG5ldyB2YWx1ZQogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96aW5jcmJ5CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbCgna2V5Jyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56SW5jckJ5KCdrZXknLCAyLjUsICdtZW1iZXIxJyk7Ly8ga2V5IG9yIG1lbWJlcjEgZGlkbid0IGV4aXN0LCBzbyBtZW1iZXIxJ3Mgc2NvcmUgaXMgdG8gMCA7CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2JlZm9yZSB0aGUgaW5jcmVtZW50IGFuZCBub3cgaGFzIHRoZSB2YWx1ZSAyLjUKICAgICAqICRyZWRpc0NsdXN0ZXItPnpJbmNyQnkoJ2tleScsIDEsICdtZW1iZXIxJyk7ICAgIC8vIDMuNQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6SW5jckJ5KCRrZXksICR2YWx1ZSwgJG1lbWJlcikge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiBhIGhhc2gsIGluIG51bWJlciBvZiBpdGVtcwogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKgogICAgICogQHJldHVybiAgaW50fGZhbHNlICAgICB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgaGFzaCwgRkFMU0UgaWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0IG9yIGlzbid0IGEgaGFzaC4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaGxlbgogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ2gnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmhTZXQoJ2gnLCAna2V5MScsICdoZWxsbycpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+aFNldCgnaCcsICdrZXkyJywgJ3Bsb3AnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmhMZW4oJ2gnKTsgLy8gcmV0dXJucyAyCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhMZW4oJGtleSkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGtleXMgaW4gYSBoYXNoLCBhcyBhbiBhcnJheSBvZiBzdHJpbmdzLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKgogICAgICogQHJldHVybiAgYXJyYXkgICBBbiBhcnJheSBvZiBlbGVtZW50cywgdGhlIGtleXMgb2YgdGhlIGhhc2guIFRoaXMgd29ya3MgbGlrZSBQSFAncyBhcnJheV9rZXlzKCkuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2hrZXlzCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbCgnaCcpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+aFNldCgnaCcsICdhJywgJ3gnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmhTZXQoJ2gnLCAnYicsICd5Jyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5oU2V0KCdoJywgJ2MnLCAneicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+aFNldCgnaCcsICdkJywgJ3QnKTsKICAgICAqIHZhcl9kdW1wKCRyZWRpc0NsdXN0ZXItPmhLZXlzKCdoJykpOwogICAgICoKICAgICAqIC8vLy8gT3V0cHV0OgogICAgICogLy8KICAgICAqIC8vIGFycmF5KDQpIHsKICAgICAqIC8vIFswXT0+CiAgICAgKiAvLyBzdHJpbmcoMSkgImEiCiAgICAgKiAvLyBbMV09PgogICAgICogLy8gc3RyaW5nKDEpICJiIgogICAgICogLy8gWzJdPT4KICAgICAqIC8vIHN0cmluZygxKSAiYyIKICAgICAqIC8vIFszXT0+CiAgICAgKiAvLyBzdHJpbmcoMSkgImQiCiAgICAgKiAvLyB9CiAgICAgKiAvLyBUaGUgb3JkZXIgaXMgcmFuZG9tIGFuZCBjb3JyZXNwb25kcyB0byByZWRpcycgb3duIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZXQgc3RydWN0dXJlLgogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoS2V5cygka2V5KSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFsdWVzIGluIGEgaGFzaCwgYXMgYW4gYXJyYXkgb2Ygc3RyaW5ncy4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICoKICAgICAqIEByZXR1cm4gIGFycmF5ICAgQW4gYXJyYXkgb2YgZWxlbWVudHMsIHRoZSB2YWx1ZXMgb2YgdGhlIGhhc2guIFRoaXMgd29ya3MgbGlrZSBQSFAncyBhcnJheV92YWx1ZXMoKS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaHZhbHMKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdoJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5oU2V0KCdoJywgJ2EnLCAneCcpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+aFNldCgnaCcsICdiJywgJ3knKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmhTZXQoJ2gnLCAnYycsICd6Jyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5oU2V0KCdoJywgJ2QnLCAndCcpOwogICAgICogdmFyX2R1bXAoJHJlZGlzQ2x1c3Rlci0+aFZhbHMoJ2gnKSk7CiAgICAgKgogICAgICogLy8vLyBPdXRwdXQ6CiAgICAgKiAvLwogICAgICogLy8gYXJyYXkoNCkgewogICAgICogLy8gICBbMF09PgogICAgICogLy8gICBzdHJpbmcoMSkgIngiCiAgICAgKiAvLyAgIFsxXT0+CiAgICAgKiAvLyAgIHN0cmluZygxKSAieSIKICAgICAqIC8vICAgWzJdPT4KICAgICAqIC8vICAgc3RyaW5nKDEpICJ6IgogICAgICogLy8gICBbM109PgogICAgICogLy8gICBzdHJpbmcoMSkgInQiCiAgICAgKiAvLyB9CiAgICAgKiAvLyBUaGUgb3JkZXIgaXMgcmFuZG9tIGFuZCBjb3JyZXNwb25kcyB0byByZWRpcycgb3duIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZXQgc3RydWN0dXJlLgogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoVmFscygka2V5KSB7fQoKICAgIC8qKgogICAgICogR2V0cyBhIHZhbHVlIGZyb20gdGhlIGhhc2ggc3RvcmVkIGF0IGtleS4KICAgICAqIElmIHRoZSBoYXNoIHRhYmxlIGRvZXNuJ3QgZXhpc3QsIG9yIHRoZSBrZXkgZG9lc24ndCBleGlzdCwgRkFMU0UgaXMgcmV0dXJuZWQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkaGFzaEtleQogICAgICoKICAgICAqIEByZXR1cm4gIHN0cmluZ3xmYWxzZSAgVGhlIHZhbHVlLCBpZiB0aGUgY29tbWFuZCBleGVjdXRlZCBzdWNjZXNzZnVsbHkgQk9PTCBGQUxTRSBpbiBjYXNlIG9mIGZhaWx1cmUKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaGdldAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ2gnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmhTZXQoJ2gnLCAnYScsICd4Jyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5oR2V0KCdoJywgJ2EnKTsgLy8gJ1gnCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhHZXQoJGtleSwgJGhhc2hLZXkpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB3aG9sZSBoYXNoLCBhcyBhbiBhcnJheSBvZiBzdHJpbmdzIGluZGV4ZWQgYnkgc3RyaW5ncy4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICoKICAgICAqIEByZXR1cm4gIGFycmF5ICAgQW4gYXJyYXkgb2YgZWxlbWVudHMsIHRoZSBjb250ZW50cyBvZiB0aGUgaGFzaC4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaGdldGFsbAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ2gnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmhTZXQoJ2gnLCAnYScsICd4Jyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5oU2V0KCdoJywgJ2InLCAneScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+aFNldCgnaCcsICdjJywgJ3onKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmhTZXQoJ2gnLCAnZCcsICd0Jyk7CiAgICAgKiB2YXJfZHVtcCgkcmVkaXNDbHVzdGVyLT5oR2V0QWxsKCdoJykpOwogICAgICoKICAgICAqIC8vLy8gT3V0cHV0OgogICAgICogLy8KICAgICAqIC8vIGFycmF5KDQpIHsKICAgICAqIC8vICAgWyJhIl09PgogICAgICogLy8gICBzdHJpbmcoMSkgIngiCiAgICAgKiAvLyAgIFsiYiJdPT4KICAgICAqIC8vICAgc3RyaW5nKDEpICJ5IgogICAgICogLy8gICBbImMiXT0+CiAgICAgKiAvLyAgIHN0cmluZygxKSAieiIKICAgICAqIC8vICAgWyJkIl09PgogICAgICogLy8gICBzdHJpbmcoMSkgInQiCiAgICAgKiAvLyB9CiAgICAgKiAvLyBUaGUgb3JkZXIgaXMgcmFuZG9tIGFuZCBjb3JyZXNwb25kcyB0byByZWRpcycgb3duIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZXQgc3RydWN0dXJlLgogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoR2V0QWxsKCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiBWZXJpZnkgaWYgdGhlIHNwZWNpZmllZCBtZW1iZXIgZXhpc3RzIGluIGEga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGhhc2hLZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBib29sICAgSWYgdGhlIG1lbWJlciBleGlzdHMgaW4gdGhlIGhhc2ggdGFibGUsIHJldHVybiBUUlVFLCBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9oZXhpc3RzCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmhTZXQoJ2gnLCAnYScsICd4Jyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5oRXhpc3RzKCdoJywgJ2EnKTsgICAgICAgICAgICAgICAvLyAgVFJVRQogICAgICogJHJlZGlzQ2x1c3Rlci0+aEV4aXN0cygnaCcsICdOb25FeGlzdGluZ0tleScpOyAgLy8gRkFMU0UKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaEV4aXN0cygka2V5LCAkaGFzaEtleSkge30KCiAgICAvKioKICAgICAqIEluY3JlbWVudHMgdGhlIHZhbHVlIG9mIGEgbWVtYmVyIGZyb20gYSBoYXNoIGJ5IGEgZ2l2ZW4gYW1vdW50LgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGhhc2hLZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkdmFsdWUgKGludGVnZXIpIHZhbHVlIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWVtYmVyJ3MgdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgIHRoZSBuZXcgdmFsdWUKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaGluY3JieQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ2gnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmhJbmNyQnkoJ2gnLCAneCcsIDIpOyAvLyByZXR1cm5zIDI6IGhbeF0gPSAyIG5vdy4KICAgICAqICRyZWRpc0NsdXN0ZXItPmhJbmNyQnkoJ2gnLCAneCcsIDEpOyAvLyBoW3hdIOKGkCAyICsgMS4gUmV0dXJucyAzCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhJbmNyQnkoJGtleSwgJGhhc2hLZXksICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIEFkZHMgYSB2YWx1ZSB0byB0aGUgaGFzaCBzdG9yZWQgYXQga2V5LiBJZiB0aGlzIHZhbHVlIGlzIGFscmVhZHkgaW4gdGhlIGhhc2gsIEZBTFNFIGlzIHJldHVybmVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIHN0cmluZyAkaGFzaEtleQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiAxIGlmIHZhbHVlIGRpZG4ndCBleGlzdCBhbmQgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSwKICAgICAqIDAgaWYgdGhlIHZhbHVlIHdhcyBhbHJlYWR5IHByZXNlbnQgYW5kIHdhcyByZXBsYWNlZCwgRkFMU0UgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9oc2V0CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbCgnaCcpCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5oU2V0KCdoJywgJ2tleTEnLCAnaGVsbG8nKTsgIC8vIDEsICdrZXkxJyA9PiAnaGVsbG8nIGluIHRoZSBoYXNoIGF0ICJoIgogICAgICogJHJlZGlzQ2x1c3Rlci0+aEdldCgnaCcsICdrZXkxJyk7ICAgICAgICAgICAvLyByZXR1cm5zICJoZWxsbyIKICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5oU2V0KCdoJywgJ2tleTEnLCAncGxvcCcpOyAgIC8vIDAsIHZhbHVlIHdhcyByZXBsYWNlZC4KICAgICAqICRyZWRpc0NsdXN0ZXItPmhHZXQoJ2gnLCAna2V5MScpOyAgICAgICAgICAgLy8gcmV0dXJucyAicGxvcCIKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaFNldCgka2V5LCAkaGFzaEtleSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQWRkcyBhIHZhbHVlIHRvIHRoZSBoYXNoIHN0b3JlZCBhdCBrZXkgb25seSBpZiB0aGlzIGZpZWxkIGlzbid0IGFscmVhZHkgaW4gdGhlIGhhc2guCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkaGFzaEtleQogICAgICogQHBhcmFtICAgc3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gIGJvb2wgICAgVFJVRSBpZiB0aGUgZmllbGQgd2FzIHNldCwgRkFMU0UgaWYgaXQgd2FzIGFscmVhZHkgcHJlc2VudC4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaHNldG54CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbCgnaCcpCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5oU2V0TngoJ2gnLCAna2V5MScsICdoZWxsbycpOyAvLyBUUlVFLCAna2V5MScgPT4gJ2hlbGxvJyBpbiB0aGUgaGFzaCBhdCAiaCIKICAgICAqICRyZWRpc0NsdXN0ZXItPmhTZXROeCgnaCcsICdrZXkxJywgJ3dvcmxkJyk7IC8vIEZBTFNFLCAna2V5MScgPT4gJ2hlbGxvJyBpbiB0aGUgaGFzaCBhdCAiaCIuIE5vIGNoYW5nZSBzaW5jZSB0aGUKICAgICAqIGZpZWxkIHdhc24ndCByZXBsYWNlZC4KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaFNldE54KCRrZXksICRoYXNoS2V5LCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgdmFsdWVzIGFzc29jaWF0ZWQgdG8gdGhlIHNwZWNpZmllZCBmaWVsZHMgaW4gdGhlIGhhc2guCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIGFycmF5ICAkaGFzaEtleXMKICAgICAqCiAgICAgKiBAcmV0dXJuICBhcnJheSAgIEFycmF5IEFuIGFycmF5IG9mIGVsZW1lbnRzLCB0aGUgdmFsdWVzIG9mIHRoZSBzcGVjaWZpZWQgZmllbGRzIGluIHRoZSBoYXNoLAogICAgICogd2l0aCB0aGUgaGFzaCBrZXlzIGFzIGFycmF5IGtleXMuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2htZ2V0CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbCgnaCcpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+aFNldCgnaCcsICdmaWVsZDEnLCAndmFsdWUxJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5oU2V0KCdoJywgJ2ZpZWxkMicsICd2YWx1ZTInKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmhNR2V0KCdoJywgYXJyYXkoJ2ZpZWxkMScsICdmaWVsZDInKSk7IC8vIHJldHVybnMgYXJyYXkoJ2ZpZWxkMScgPT4gJ3ZhbHVlMScsICdmaWVsZDInID0+CiAgICAgKiAndmFsdWUyJykKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaE1HZXQoJGtleSwgJGhhc2hLZXlzKSB7fQoKICAgIC8qKgogICAgICogRmlsbHMgaW4gYSB3aG9sZSBoYXNoLiBOb24tc3RyaW5nIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIHN0cmluZywgdXNpbmcgdGhlIHN0YW5kYXJkIChzdHJpbmcpIGNhc3QuCiAgICAgKiBOVUxMIHZhbHVlcyBhcmUgc3RvcmVkIGFzIGVtcHR5IHN0cmluZ3MKICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgYXJyYXkgICRoYXNoS2V5cyBrZXkg4oaSIHZhbHVlIGFycmF5CiAgICAgKgogICAgICogQHJldHVybiAgYm9vbAogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9obXNldAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ3VzZXI6MScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+aE1TZXQoJ3VzZXI6MScsIGFycmF5KCduYW1lJyA9PiAnSm9lJywgJ3NhbGFyeScgPT4gMjAwMCkpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+aEluY3JCeSgndXNlcjoxJywgJ3NhbGFyeScsIDEwMCk7IC8vIEpvZSBlYXJucyAxMDAgbW9yZSBub3cuCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhNU2V0KCRrZXksICRoYXNoS2V5cykge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYSB2YWx1ZXMgZnJvbSB0aGUgaGFzaCBzdG9yZWQgYXQga2V5LgogICAgICogSWYgdGhlIGhhc2ggdGFibGUgZG9lc24ndCBleGlzdCwgb3IgdGhlIGtleSBkb2Vzbid0IGV4aXN0LCBGQUxTRSBpcyByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgc3RyaW5nICRoYXNoS2V5MQogICAgICogQHBhcmFtICAgc3RyaW5nICRoYXNoS2V5MgogICAgICogQHBhcmFtICAgc3RyaW5nICRoYXNoS2V5TgogICAgICoKICAgICAqIEByZXR1cm4gIGludCAgICAgTnVtYmVyIG9mIGRlbGV0ZWQgZmllbGRzCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2hkZWwKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+aE1TZXQoJ2gnLAogICAgICogICAgICAgICAgICAgICBhcnJheSgKICAgICAqICAgICAgICAgICAgICAgICAgICAnZjEnID0+ICd2MScsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgJ2YyJyA9PiAndjInLAogICAgICogICAgICAgICAgICAgICAgICAgICdmMycgPT4gJ3YzJywKICAgICAqICAgICAgICAgICAgICAgICAgICAnZjQnID0+ICd2NCcsCiAgICAgKiAgICAgICAgICAgICAgICkpOwogICAgICoKICAgICAqIHZhcl9kdW1wKCAkcmVkaXNDbHVzdGVyLT5oRGVsKCdoJywgJ2YxJykgKTsgICAgICAgIC8vIGludCgxKQogICAgICogdmFyX2R1bXAoICRyZWRpc0NsdXN0ZXItPmhEZWwoJ2gnLCAnZjInLCAnZjMnKSApOyAgLy8gaW50KDIpCiAgICAgKgogICAgICogdmFyX2R1bXAoICRyZWRpc0NsdXN0ZXItPmhHZXRBbGwoJ2gnKSApOwogICAgICoKICAgICAqIC8vLy8gT3V0cHV0OgogICAgICogLy8KICAgICAqIC8vICBhcnJheSgxKSB7CiAgICAgKiAvLyAgICBbImY0Il09PiBzdHJpbmcoMikgInY0IgogICAgICogLy8gIH0KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaERlbCgka2V5LCAkaGFzaEtleTEsICRoYXNoS2V5MiA9IG51bGwsICRoYXNoS2V5TiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnQgdGhlIGZsb2F0IHZhbHVlIG9mIGEgaGFzaCBmaWVsZCBieSB0aGUgZ2l2ZW4gYW1vdW50CiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkZmllbGQKICAgICAqIEBwYXJhbSAgIGZsb2F0ICAkaW5jcmVtZW50CiAgICAgKgogICAgICogQHJldHVybiAgZmxvYXQKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaGluY3JieWZsb2F0CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmhzZXQoJ2gnLCAnZmxvYXQnLCAzKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmhzZXQoJ2gnLCAnaW50JywgICAzKTsKICAgICAqIHZhcl9kdW1wKCAkcmVkaXNDbHVzdGVyLT5oSW5jckJ5RmxvYXQoJ2gnLCAnZmxvYXQnLCAxLjUpICk7IC8vIGZsb2F0KDQuNSkKICAgICAqCiAgICAgKiB2YXJfZHVtcCggJHJlZGlzQ2x1c3Rlci0+aEdldEFsbCgnaCcpICk7CiAgICAgKgogICAgICogLy8vLyBPdXRwdXQ6CiAgICAgKiAvLwogICAgICogLy8gYXJyYXkoMikgewogICAgICogLy8gICBbImZsb2F0Il09PgogICAgICogLy8gICBzdHJpbmcoMykgIjQuNSIKICAgICAqIC8vICAgWyJpbnQiXT0+CiAgICAgKiAvLyAgIHN0cmluZygxKSAiMyIKICAgICAqIC8vIH0KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaEluY3JCeUZsb2F0KCRrZXksICRmaWVsZCwgJGluY3JlbWVudCkge30KCiAgICAvKioKICAgICAqIER1bXAgYSBrZXkgb3V0IG9mIGEgcmVkaXMgZGF0YWJhc2UsIHRoZSB2YWx1ZSBvZiB3aGljaCBjYW4gbGF0ZXIgYmUgcGFzc2VkIGludG8gcmVkaXMgdXNpbmcgdGhlIFJFU1RPUkUgY29tbWFuZC4KICAgICAqIFRoZSBkYXRhIHRoYXQgY29tZXMgb3V0IG9mIERVTVAgaXMgYSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGtleSBhcyBSZWRpcyBzdG9yZXMgaXQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBzdHJpbmd8ZmFsc2UgIFRoZSBSZWRpcyBlbmNvZGVkIHZhbHVlIG9mIHRoZSBrZXksIG9yIEZBTFNFIGlmIHRoZSBrZXkgZG9lc24ndCBleGlzdAogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9kdW1wCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNldCgnZm9vJywgJ2JhcicpOwogICAgICogJHZhbCA9ICRyZWRpc0NsdXN0ZXItPmR1bXAoJ2ZvbycpOyAvLyAkdmFsIHdpbGwgYmUgdGhlIFJlZGlzIGVuY29kZWQga2V5IHZhbHVlCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGR1bXAoJGtleSkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJhbmsgb2YgYSBnaXZlbiBtZW1iZXIgaW4gdGhlIHNwZWNpZmllZCBzb3J0ZWQgc2V0LCBzdGFydGluZyBhdCAwIGZvciB0aGUgaXRlbQogICAgICogd2l0aCB0aGUgc21hbGxlc3Qgc2NvcmUuIHpSZXZSYW5rIHN0YXJ0cyBhdCAwIGZvciB0aGUgaXRlbSB3aXRoIHRoZSBsYXJnZXN0IHNjb3JlLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJG1lbWJlcgogICAgICoKICAgICAqIEByZXR1cm4gIGludCAgICAgdGhlIGl0ZW0ncyBzY29yZS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenJhbmsKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCd6Jyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrZXknLCAxLCAnb25lJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrZXknLCAyLCAndHdvJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56UmFuaygna2V5JywgJ29uZScpOyAgICAgLy8gMAogICAgICogJHJlZGlzQ2x1c3Rlci0+elJhbmsoJ2tleScsICd0d28nKTsgICAgIC8vIDEKICAgICAqICRyZWRpc0NsdXN0ZXItPnpSZXZSYW5rKCdrZXknLCAnb25lJyk7ICAvLyAxCiAgICAgKiAkcmVkaXNDbHVzdGVyLT56UmV2UmFuaygna2V5JywgJ3R3bycpOyAgLy8gMAogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6UmFuaygka2V5LCAkbWVtYmVyKSB7fQoKICAgIC8qKgogICAgICogQHNlZSAgICB6UmFuaygpCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgJG1lbWJlcgogICAgICoKICAgICAqIEByZXR1cm4gaW50ICAgIHRoZSBpdGVtJ3Mgc2NvcmUKICAgICAqIEBsaW5rICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96cmV2cmFuawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJldlJhbmsoJGtleSwgJG1lbWJlcikge30KCiAgICAvKioKICAgICAqIEluY3JlbWVudCB0aGUgbnVtYmVyIHN0b3JlZCBhdCBrZXkgYnkgb25lLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKgogICAgICogQHJldHVybiAgaW50ICAgIHRoZSBuZXcgdmFsdWUKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaW5jcgogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5pbmNyKCdrZXkxJyk7IC8vIGtleTEgZGlkbid0IGV4aXN0cywgc2V0IHRvIDAgYmVmb3JlIHRoZSBpbmNyZW1lbnQgYW5kIG5vdyBoYXMgdGhlIHZhbHVlIDEKICAgICAqICRyZWRpc0NsdXN0ZXItPmluY3IoJ2tleTEnKTsgLy8gMgogICAgICogJHJlZGlzQ2x1c3Rlci0+aW5jcigna2V5MScpOyAvLyAzCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5pbmNyKCdrZXkxJyk7IC8vIDQKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5jcigka2V5KSB7fQoKICAgIC8qKgogICAgICogRGVjcmVtZW50IHRoZSBudW1iZXIgc3RvcmVkIGF0IGtleSBieSBvbmUuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgdGhlIG5ldyB2YWx1ZQogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9kZWNyCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmRlY3IoJ2tleTEnKTsgLy8ga2V5MSBkaWRuJ3QgZXhpc3RzLCBzZXQgdG8gMCBiZWZvcmUgdGhlIGluY3JlbWVudCBhbmQgbm93IGhhcyB0aGUgdmFsdWUgLTEKICAgICAqICRyZWRpc0NsdXN0ZXItPmRlY3IoJ2tleTEnKTsgLy8gLTIKICAgICAqICRyZWRpc0NsdXN0ZXItPmRlY3IoJ2tleTEnKTsgLy8gLTMKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjcigka2V5KSB7fQoKICAgIC8qKgogICAgICogSW5jcmVtZW50IHRoZSBudW1iZXIgc3RvcmVkIGF0IGtleSBieSBvbmUuIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgZmlsbGVkLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGludGVnZXIKICAgICAqIHZhbHVlIG9mIHRoZSBpbmNyZW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkgICBrZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkdmFsdWUgdmFsdWUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIGtleSAob25seSBmb3IgaW5jckJ5KQogICAgICoKICAgICAqIEByZXR1cm4gIGludCAgICAgICAgIHRoZSBuZXcgdmFsdWUKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaW5jcmJ5CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmluY3IoJ2tleTEnKTsgICAgICAgIC8vIGtleTEgZGlkbid0IGV4aXN0cywgc2V0IHRvIDAgYmVmb3JlIHRoZSBpbmNyZW1lbnQgYW5kIG5vdyBoYXMgdGhlIHZhbHVlIDEKICAgICAqICRyZWRpc0NsdXN0ZXItPmluY3IoJ2tleTEnKTsgICAgICAgIC8vIDIKICAgICAqICRyZWRpc0NsdXN0ZXItPmluY3IoJ2tleTEnKTsgICAgICAgIC8vIDMKICAgICAqICRyZWRpc0NsdXN0ZXItPmluY3IoJ2tleTEnKTsgICAgICAgIC8vIDQKICAgICAqICRyZWRpc0NsdXN0ZXItPmluY3JCeSgna2V5MScsIDEwKTsgIC8vIDE0CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluY3JCeSgka2V5LCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBEZWNyZW1lbnQgdGhlIG51bWJlciBzdG9yZWQgYXQga2V5IGJ5IG9uZS4gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBmaWxsZWQsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW50ZWdlcgogICAgICogdmFsdWUgb2YgdGhlIGRlY3JlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgaW50ICAgICR2YWx1ZSB0aGF0IHdpbGwgYmUgc3VidHJhY3RlZCB0byBrZXkgKG9ubHkgZm9yIGRlY3JCeSkKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgICAgdGhlIG5ldyB2YWx1ZQogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9kZWNyYnkKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVjcigna2V5MScpOyAgICAgICAgLy8ga2V5MSBkaWRuJ3QgZXhpc3RzLCBzZXQgdG8gMCBiZWZvcmUgdGhlIGluY3JlbWVudCBhbmQgbm93IGhhcyB0aGUgdmFsdWUgLTEKICAgICAqICRyZWRpc0NsdXN0ZXItPmRlY3IoJ2tleTEnKTsgICAgICAgIC8vIC0yCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWNyKCdrZXkxJyk7ICAgICAgICAvLyAtMwogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVjckJ5KCdrZXkxJywgMTApOyAgLy8gLTEzCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlY3JCeSgka2V5LCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnQgdGhlIGZsb2F0IHZhbHVlIG9mIGEga2V5IGJ5IHRoZSBnaXZlbiBhbW91bnQKICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgZmxvYXQgICRpbmNyZW1lbnQKICAgICAqCiAgICAgKiBAcmV0dXJuICBmbG9hdAogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9pbmNyYnlmbG9hdAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXQoJ3gnLCAzKTsKICAgICAqIHZhcl9kdW1wKCAkcmVkaXNDbHVzdGVyLT5pbmNyQnlGbG9hdCgneCcsIDEuNSkgKTsgICAvLyBmbG9hdCg0LjUpCiAgICAgKgogICAgICogdmFyX2R1bXAoICRyZWRpc0NsdXN0ZXItPmdldCgneCcpICk7ICAgICAgICAgICAgICAgIC8vIHN0cmluZygzKSAiNC41IgogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmNyQnlGbG9hdCgka2V5LCAkaW5jcmVtZW50KSB7fQoKICAgIC8qKgogICAgICogU2V0cyBhbiBleHBpcmF0aW9uIGRhdGUgKGEgdGltZW91dCkgb24gYW4gaXRlbS4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleSBUaGUga2V5IHRoYXQgd2lsbCBkaXNhcHBlYXIuCiAgICAgKiBAcGFyYW0gICBpbnQgICAgJHR0bCBUaGUga2V5J3MgcmVtYWluaW5nIFRpbWUgVG8gTGl2ZSwgaW4gc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcmV0dXJuICBib29sICAgVFJVRSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIEZBTFNFIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZXhwaXJlCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNldCgneCcsICc0MicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+ZXhwaXJlKCd4JywgMyk7ICAvLyB4IHdpbGwgZGlzYXBwZWFyIGluIDMgc2Vjb25kcy4KICAgICAqIHNsZWVwKDUpOyAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCA1IHNlY29uZHMKICAgICAqICRyZWRpc0NsdXN0ZXItPmdldCgneCcpOyAgICAgICAgICAgIC8vIHdpbGwgcmV0dXJuIGBGQUxTRWAsIGFzICd4JyBoYXMgZXhwaXJlZC4KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwaXJlKCRrZXksICR0dGwpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIGFuIGV4cGlyYXRpb24gZGF0ZSAoYSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcykgb24gYW4gaXRlbS4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleSBUaGUga2V5IHRoYXQgd2lsbCBkaXNhcHBlYXIuCiAgICAgKiBAcGFyYW0gICBpbnQgICAgJHR0bCBUaGUga2V5J3MgcmVtYWluaW5nIFRpbWUgVG8gTGl2ZSwgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEByZXR1cm4gIGJvb2wgICBUUlVFIGluIGNhc2Ugb2Ygc3VjY2VzcywgRkFMU0UgaW4gY2FzZSBvZiBmYWlsdXJlLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9wZXhwaXJlCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNldCgneCcsICc0MicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+cEV4cGlyZSgneCcsIDExNTAwKTsgLy8geCB3aWxsIGRpc2FwcGVhciBpbiAxMTUwMCBtaWxsaXNlY29uZHMuCiAgICAgKiAkcmVkaXNDbHVzdGVyLT50dGwoJ3gnKTsgICAgICAgICAgICAvLyAxMgogICAgICogJHJlZGlzQ2x1c3Rlci0+cHR0bCgneCcpOyAgICAgICAgICAgLy8gMTE1MDAKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcEV4cGlyZSgka2V5LCAkdHRsKSB7fQoKICAgIC8qKgogICAgICogU2V0cyBhbiBleHBpcmF0aW9uIGRhdGUgKGEgdGltZXN0YW1wKSBvbiBhbiBpdGVtLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5ICAgICAgIFRoZSBrZXkgdGhhdCB3aWxsIGRpc2FwcGVhci4KICAgICAqIEBwYXJhbSAgIGludCAgICAkdGltZXN0YW1wIFVuaXggdGltZXN0YW1wLiBUaGUga2V5J3MgZGF0ZSBvZiBkZWF0aCwgaW4gc2Vjb25kcyBmcm9tIEVwb2NoIHRpbWUuCiAgICAgKgogICAgICogQHJldHVybiAgYm9vbCAgIFRSVUUgaW4gY2FzZSBvZiBzdWNjZXNzLCBGQUxTRSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2V4cGlyZWF0CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNldCgneCcsICc0MicpOwogICAgICogJG5vdyA9IHRpbWUoKTsgICAgICAgICAgICAgICAvLyBjdXJyZW50IHRpbWVzdGFtcAogICAgICogJHJlZGlzQ2x1c3Rlci0+ZXhwaXJlQXQoJ3gnLCAkbm93ICsgMyk7IC8vIHggd2lsbCBkaXNhcHBlYXIgaW4gMyBzZWNvbmRzLgogICAgICogc2xlZXAoNSk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdCA1IHNlY29uZHMKICAgICAqICRyZWRpc0NsdXN0ZXItPmdldCgneCcpOyAgICAgICAgICAgICAgICAvLyB3aWxsIHJldHVybiBgRkFMU0VgLCBhcyAneCcgaGFzIGV4cGlyZWQuCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cGlyZUF0KCRrZXksICR0aW1lc3RhbXApIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIGFuIGV4cGlyYXRpb24gZGF0ZSAoYSB0aW1lc3RhbXApIG9uIGFuIGl0ZW0uIFJlcXVpcmVzIGEgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcwogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5ICAgICAgIFRoZSBrZXkgdGhhdCB3aWxsIGRpc2FwcGVhci4KICAgICAqIEBwYXJhbSAgIGludCAgICAkdGltZXN0YW1wIFVuaXggdGltZXN0YW1wLiBUaGUga2V5J3MgZGF0ZSBvZiBkZWF0aCwgaW4gc2Vjb25kcyBmcm9tIEVwb2NoIHRpbWUuCiAgICAgKgogICAgICogQHJldHVybiAgYm9vbCAgIFRSVUUgaW4gY2FzZSBvZiBzdWNjZXNzLCBGQUxTRSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3BleHBpcmVhdAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXQoJ3gnLCAnNDInKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnBFeHBpcmVBdCgneCcsIDE1NTU1NTU1NTUwMDUpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+dHRsKCd4Jyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyAyMTgyNzAxMjEKICAgICAqICRyZWRpc0NsdXN0ZXItPnB0dGwoJ3gnKTsgICAgICAgICAgICAgICAgICAgICAgLy8gMjE4MjcwMTIwNTc1CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBFeHBpcmVBdCgka2V5LCAkdGltZXN0YW1wKSB7fQoKICAgIC8qKgogICAgICogQXBwZW5kIHNwZWNpZmllZCBzdHJpbmcgdG8gdGhlIHN0cmluZyBzdG9yZWQgaW4gc3BlY2lmaWVkIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgc3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gIGludCAgICBTaXplIG9mIHRoZSB2YWx1ZSBhZnRlciB0aGUgYXBwZW5kCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2FwcGVuZAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXQoJ2tleScsICd2YWx1ZTEnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmFwcGVuZCgna2V5JywgJ3ZhbHVlMicpOyAvLyAxMgogICAgICogJHJlZGlzQ2x1c3Rlci0+Z2V0KCdrZXknKTsgICAgICAgICAgICAgIC8vICd2YWx1ZTF2YWx1ZTInCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZCgka2V5LCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYSBzaW5nbGUgYml0IG91dCBvZiBhIGxhcmdlciBzdHJpbmcKICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgaW50ICAgICRvZmZzZXQKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgdGhlIGJpdCB2YWx1ZSAoMCBvciAxKQogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9nZXRiaXQKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0KCdrZXknLCAiXHg3ZiIpOyAgLy8gdGhpcyBpcyAwMTExIDExMTEKICAgICAqICRyZWRpc0NsdXN0ZXItPmdldEJpdCgna2V5JywgMCk7ICAgIC8vIDAKICAgICAqICRyZWRpc0NsdXN0ZXItPmdldEJpdCgna2V5JywgMSk7ICAgIC8vIDEKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qml0KCRrZXksICRvZmZzZXQpIHt9CgogICAgLyoqCiAgICAgKiBDaGFuZ2VzIGEgc2luZ2xlIGJpdCBvZiBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgICAka2V5CiAgICAgKiBAcGFyYW0gICBpbnQgICAgICAkb2Zmc2V0CiAgICAgKiBAcGFyYW0gICBib29sfGludCAkdmFsdWUgYm9vbCBvciBpbnQgKDEgb3IgMCkKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgMCBvciAxLCB0aGUgdmFsdWUgb2YgdGhlIGJpdCBiZWZvcmUgaXQgd2FzIHNldC4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc2V0Yml0CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNldCgna2V5JywgIioiKTsgICAgIC8vIG9yZCgiKiIpID0gNDIgPSAweDJmID0gIjAwMTAgMTAxMCIKICAgICAqICRyZWRpc0NsdXN0ZXItPnNldEJpdCgna2V5JywgNSwgMSk7IC8vIHJldHVybnMgMAogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0Qml0KCdrZXknLCA3LCAxKTsgLy8gcmV0dXJucyAwCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5nZXQoJ2tleScpOyAgICAgICAgICAvLyBjaHIoMHgyZikgPSAiLyIgPSBiKCIwMDEwIDExMTEiKQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRCaXQoJGtleSwgJG9mZnNldCwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQml0d2lzZSBvcGVyYXRpb24gb24gbXVsdGlwbGUga2V5cy4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJG9wZXJhdGlvbiBlaXRoZXIgIkFORCIsICJPUiIsICJOT1QiLCAiWE9SIgogICAgICogQHBhcmFtICAgc3RyaW5nICRyZXRLZXkgICAgcmV0dXJuIGtleQogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkxCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleTIKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5MwogICAgICoKICAgICAqIEByZXR1cm4gIGludCAgICAgVGhlIHNpemUgb2YgdGhlIHN0cmluZyBzdG9yZWQgaW4gdGhlIGRlc3RpbmF0aW9uIGtleS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvYml0b3AKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0KCdiaXQxJywgJzEnKTsgLy8gMTEgMDAwMQogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0KCdiaXQyJywgJzInKTsgLy8gMTEgMDAxMAogICAgICoKICAgICAqICRyZWRpc0NsdXN0ZXItPmJpdE9wKCdBTkQnLCAnYml0JywgJ2JpdDEnLCAnYml0MicpOyAvLyBiaXQgPSAxMTAwMDAKICAgICAqICRyZWRpc0NsdXN0ZXItPmJpdE9wKCdPUicsICAnYml0JywgJ2JpdDEnLCAnYml0MicpOyAvLyBiaXQgPSAxMTAwMTEKICAgICAqICRyZWRpc0NsdXN0ZXItPmJpdE9wKCdOT1QnLCAnYml0JywgJ2JpdDEnLCAnYml0MicpOyAvLyBiaXQgPSAxMTAwMTEKICAgICAqICRyZWRpc0NsdXN0ZXItPmJpdE9wKCdYT1InLCAnYml0JywgJ2JpdDEnLCAnYml0MicpOyAvLyBiaXQgPSAxMQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiaXRPcCgkb3BlcmF0aW9uLCAkcmV0S2V5LCAka2V5MSwgJGtleTIsICRrZXkzID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGJpdCBzZXQgdG8gMSBvciAwIGluIGEgc3RyaW5nLiBUaGUgcG9zaXRpb24gaXMgcmV0dXJuZWQsIHRoaW5raW5nIG9mIHRoZQogICAgICogc3RyaW5nIGFzIGFuIGFycmF5IG9mIGJpdHMgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB3aGVyZSB0aGUgZmlyc3QgYnl0ZSdzIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGlzIGF0IHBvc2l0aW9uIDAsCiAgICAgKiB0aGUgc2Vjb25kIGJ5dGUncyBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyBhdCBwb3NpdGlvbiA4LCBhbmQgc28gZm9ydGguCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkYml0CiAgICAgKiBAcGFyYW0gICBpbnQgICAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gICBpbnQgICAgJGVuZAogICAgICoKICAgICAqIEByZXR1cm4gIGludCAgICAgVGhlIGNvbW1hbmQgcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGJpdCBzZXQgdG8gMSBvciAwIGFjY29yZGluZyB0byB0aGUgcmVxdWVzdC4KICAgICAqICAgICAgICAgICAgICAgICAgSWYgd2UgbG9vayBmb3Igc2V0IGJpdHMgKHRoZSBiaXQgYXJndW1lbnQgaXMgMSkgYW5kIHRoZSBzdHJpbmcgaXMgZW1wdHkgb3IgY29tcG9zZWQgb2YganVzdAogICAgICogICAgICAgICAgICAgICAgICB6ZXJvIGJ5dGVzLCAtMSBpcyByZXR1cm5lZC4gSWYgd2UgbG9vayBmb3IgY2xlYXIgYml0cyAodGhlIGJpdCBhcmd1bWVudCBpcyAwKSBhbmQgdGhlIHN0cmluZwogICAgICogICAgICAgICAgICAgICAgICBvbmx5IGNvbnRhaW5zIGJpdCBzZXQgdG8gMSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IGJpdCBub3QgcGFydCBvZiB0aGUgc3RyaW5nIG9uIHRoZQogICAgICogICAgICAgICAgICAgICAgICByaWdodC4gU28gaWYgdGhlIHN0cmluZyBpcyB0aHJlZSBieXRlcyBzZXQgdG8gdGhlIHZhbHVlIDB4ZmYgdGhlIGNvbW1hbmQgQklUUE9TIGtleSAwIHdpbGwKICAgICAqICAgICAgICAgICAgICAgICAgcmV0dXJuIDI0LCBzaW5jZSB1cCB0byBiaXQgMjMgYWxsIHRoZSBiaXRzIGFyZSAxLiBCYXNpY2FsbHksIHRoZSBmdW5jdGlvbiBjb25zaWRlcnMgdGhlIHJpZ2h0CiAgICAgKiAgICAgICAgICAgICAgICAgIG9mIHRoZSBzdHJpbmcgYXMgcGFkZGVkIHdpdGggemVyb3MgaWYgeW91IGxvb2sgZm9yIGNsZWFyIGJpdHMgYW5kIHNwZWNpZnkgbm8gcmFuZ2Ugb3IgdGhlCiAgICAgKiAgICAgICAgICAgICAgICAgIHN0YXJ0IGFyZ3VtZW50IG9ubHkuIEhvd2V2ZXIsIHRoaXMgYmVoYXZpb3IgY2hhbmdlcyBpZiB5b3UgYXJlIGxvb2tpbmcgZm9yIGNsZWFyIGJpdHMgYW5kCiAgICAgKiAgICAgICAgICAgICAgICAgIHNwZWNpZnkgYSByYW5nZSB3aXRoIGJvdGggc3RhcnQgYW5kIGVuZC4gSWYgbm8gY2xlYXIgYml0IGlzIGZvdW5kIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UsIHRoZQogICAgICogICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXR1cm5zIC0xIGFzIHRoZSB1c2VyIHNwZWNpZmllZCBhIGNsZWFyIHJhbmdlIGFuZCB0aGVyZSBhcmUgbm8gMCBiaXRzIGluIHRoYXQgcmFuZ2UuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2JpdHBvcwogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXQoJ2tleScsICdceGZmXHhmZicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+Yml0cG9zKCdrZXknLCAxKTsgLy8gaW50KDApCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5iaXRwb3MoJ2tleScsIDEsIDEpOyAvLyBpbnQoOCkKICAgICAqICRyZWRpc0NsdXN0ZXItPmJpdHBvcygna2V5JywgMSwgMyk7IC8vIGludCgtMSkKICAgICAqICRyZWRpc0NsdXN0ZXItPmJpdHBvcygna2V5JywgMCk7IC8vIGludCgxNikKICAgICAqICRyZWRpc0NsdXN0ZXItPmJpdHBvcygna2V5JywgMCwgMSk7IC8vIGludCgxNikKICAgICAqICRyZWRpc0NsdXN0ZXItPmJpdHBvcygna2V5JywgMCwgMSwgNSk7IC8vIGludCgtMSkKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYml0cG9zKCRrZXksICRiaXQsICRzdGFydCA9IDAsICRlbmQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQ291bnQgYml0cyBpbiBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICoKICAgICAqIEByZXR1cm4gIGludCAgICAgVGhlIG51bWJlciBvZiBiaXRzIHNldCB0byAxIGluIHRoZSB2YWx1ZSBiZWhpbmQgdGhlIGlucHV0IGtleS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvYml0Y291bnQKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0KCdiaXQnLCAnMzQ1Jyk7IC8vIC8vIDExIDAwMTEgIDAwMTEgMDEwMCAgMDAxMSAwMTAxCiAgICAgKiB2YXJfZHVtcCggJHJlZGlzQ2x1c3Rlci0+Yml0Q291bnQoJ2JpdCcsIDAsIDApICk7IC8vIGludCg0KQogICAgICogdmFyX2R1bXAoICRyZWRpc0NsdXN0ZXItPmJpdENvdW50KCdiaXQnLCAxLCAxKSApOyAvLyBpbnQoMykKICAgICAqIHZhcl9kdW1wKCAkcmVkaXNDbHVzdGVyLT5iaXRDb3VudCgnYml0JywgMiwgMikgKTsgLy8gaW50KDQpCiAgICAgKiB2YXJfZHVtcCggJHJlZGlzQ2x1c3Rlci0+Yml0Q291bnQoJ2JpdCcsIDAsIDIpICk7IC8vIGludCgxMSkKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYml0Q291bnQoJGtleSkge30KCiAgICAvKioKICAgICAqIEBzZWUgICAgIGxJbmRleCgpCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkaW5kZXgKICAgICAqCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2xpbmRleAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbEdldCgka2V5LCAkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYSBzdWJzdHJpbmcgb2YgYSBsYXJnZXIgc3RyaW5nCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkc3RhcnQKICAgICAqIEBwYXJhbSAgIGludCAgICAkZW5kCiAgICAgKgogICAgICogQHJldHVybiAgc3RyaW5nIHRoZSBzdWJzdHJpbmcKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZ2V0cmFuZ2UKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0KCdrZXknLCAnc3RyaW5nIHZhbHVlJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5nZXRSYW5nZSgna2V5JywgMCwgNSk7ICAgLy8gJ3N0cmluZycKICAgICAqICRyZWRpc0NsdXN0ZXItPmdldFJhbmdlKCdrZXknLCAtNSwgLTEpOyAvLyAndmFsdWUnCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJhbmdlKCRrZXksICRzdGFydCwgJGVuZCkge30KCiAgICAvKioKICAgICAqIFRyaW1zIGFuIGV4aXN0aW5nIGxpc3Qgc28gdGhhdCBpdCB3aWxsIGNvbnRhaW4gb25seSBhIHNwZWNpZmllZCByYW5nZSBvZiBlbGVtZW50cy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBpbnQgICAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gaW50ICAgICRzdG9wCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXxmYWxzZSAgICBCb29sIHJldHVybiBGQUxTRSBpZiB0aGUga2V5IGlkZW50aWZ5IGEgbm9uLWxpc3QgdmFsdWUuCiAgICAgKiBAbGluayAgICAgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9sdHJpbQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaCgna2V5MScsICdBJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaCgna2V5MScsICdCJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yUHVzaCgna2V5MScsICdDJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sUmFuZ2UoJ2tleTEnLCAwLCAtMSk7IC8vIGFycmF5KCdBJywgJ0InLCAnQycpCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5sVHJpbSgna2V5MScsIDAsIDEpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+bFJhbmdlKCdrZXkxJywgMCwgLTEpOyAvLyBhcnJheSgnQScsICdCJykKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbFRyaW0oJGtleSwgJHN0YXJ0LCAkc3RvcCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNwZWNpZmllZCBlbGVtZW50cyBvZiB0aGUgbGlzdCBzdG9yZWQgYXQgdGhlIHNwZWNpZmllZCBrZXkgaW4KICAgICAqIHRoZSByYW5nZSBbc3RhcnQsIGVuZF0uIHN0YXJ0IGFuZCBzdG9wIGFyZSBpbnRlcnByZXRhdGVkIGFzIGluZGljZXM6IDAgdGhlIGZpcnN0IGVsZW1lbnQsCiAgICAgKiAxIHRoZSBzZWNvbmQgLi4uIC0xIHRoZSBsYXN0IGVsZW1lbnQsIC0yIHRoZSBwZW51bHRpbWF0ZSAuLi4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgaW50ICAgICRzdGFydAogICAgICogQHBhcmFtICAgaW50ICAgICRlbmQKICAgICAqCiAgICAgKiBAcmV0dXJuICBhcnJheSBjb250YWluaW5nIHRoZSB2YWx1ZXMgaW4gc3BlY2lmaWVkIHJhbmdlLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9scmFuZ2UKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+clB1c2goJ2tleTEnLCAnQScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+clB1c2goJ2tleTEnLCAnQicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+clB1c2goJ2tleTEnLCAnQycpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+bFJhbmdlKCdrZXkxJywgMCwgLTEpOyAvLyBhcnJheSgnQScsICdCJywgJ0MnKQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsUmFuZ2UoJGtleSwgJHN0YXJ0LCAkZW5kKSB7fQoKICAgIC8qKgogICAgICogRGVsZXRlcyB0aGUgZWxlbWVudHMgb2YgdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IHRoZSBzcGVjaWZpZWQga2V5IHdoaWNoIGhhdmUgcmFuayBpbiB0aGUgcmFuZ2UgW3N0YXJ0LGVuZF0uCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkc3RhcnQKICAgICAqIEBwYXJhbSAgIGludCAgICAkZW5kCiAgICAgKgogICAgICogQHJldHVybiAgaW50ICAgICBUaGUgbnVtYmVyIG9mIHZhbHVlcyBkZWxldGVkIGZyb20gdGhlIHNvcnRlZCBzZXQKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenJlbXJhbmdlYnlyYW5rCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2tleScsIDEsICdvbmUnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2tleScsIDIsICd0d28nKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2tleScsIDMsICd0aHJlZScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+elJlbVJhbmdlQnlSYW5rKCdrZXknLCAwLCAxKTsgLy8gMgogICAgICogJHJlZGlzQ2x1c3Rlci0+elJhbmdlKCdrZXknLCAwLCAtMSwgdHJ1ZSk7IC8vIGFycmF5KCd0aHJlZScgPT4gMykKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJlbVJhbmdlQnlSYW5rKCRrZXksICRzdGFydCwgJGVuZCkge30KCiAgICAvKioKICAgICAqIFB1Ymxpc2ggbWVzc2FnZXMgdG8gY2hhbm5lbHMuIFdhcm5pbmc6IHRoaXMgZnVuY3Rpb24gd2lsbCBwcm9iYWJseSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGNoYW5uZWwgYSBjaGFubmVsIHRvIHB1Ymxpc2ggdG8KICAgICAqIEBwYXJhbSAgIHN0cmluZyAkbWVzc2FnZSBzdHJpbmcKICAgICAqCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3B1Ymxpc2gKICAgICAqIEByZXR1cm4gIGludCBOdW1iZXIgb2YgY2xpZW50cyB0aGF0IHJlY2VpdmVkIHRoZSBtZXNzYWdlCiAgICAgKiBAZXhhbXBsZSAkcmVkaXNDbHVzdGVyLT5wdWJsaXNoKCdjaGFuLTEnLCAnaGVsbG8sIHdvcmxkIScpOyAvLyBzZW5kIG1lc3NhZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdWJsaXNoKCRjaGFubmVsLCAkbWVzc2FnZSkge30KCiAgICAvKioKICAgICAqIFJlbmFtZXMgYSBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRzcmNLZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkZHN0S2V5CiAgICAgKgogICAgICogQHJldHVybiAgYm9vbCAgIFRSVUUgaW4gY2FzZSBvZiBzdWNjZXNzLCBGQUxTRSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3JlbmFtZQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXQoJ3gnLCAnNDInKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnJlbmFtZSgneCcsICd5Jyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5nZXQoJ3knKTsgICAvLyDihpIgNDIKICAgICAqICRyZWRpc0NsdXN0ZXItPmdldCgneCcpOyAgIC8vIOKGkiBgRkFMU0VgCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbmFtZSgkc3JjS2V5LCAkZHN0S2V5KSB7fQoKICAgIC8qKgogICAgICogUmVuYW1lcyBhIGtleS4KICAgICAqCiAgICAgKiBTYW1lIGFzIHJlbmFtZSwgYnV0IHdpbGwgbm90IHJlcGxhY2UgYSBrZXkgaWYgdGhlIGRlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzLgogICAgICogVGhpcyBpcyB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgc2V0TnguCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRzcmNLZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkZHN0S2V5CiAgICAgKgogICAgICogQHJldHVybiAgYm9vbCAgIFRSVUUgaW4gY2FzZSBvZiBzdWNjZXNzLCBGQUxTRSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3JlbmFtZW54CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNldCgneCcsICc0MicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+cmVuYW1lTngoJ3gnLCAneScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+Z2V0KCd5Jyk7ICAgLy8g4oaSIDQyCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5nZXQoJ3gnKTsgICAvLyDihpIgYEZBTFNFYAogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW5hbWVOeCgkc3JjS2V5LCAkZHN0S2V5KSB7fQoKICAgIC8qKgogICAgICogV2hlbiBjYWxsZWQgd2l0aCBhIHNpbmdsZSBrZXksIHJldHVybnMgdGhlIGFwcHJveGltYXRlZCBjYXJkaW5hbGl0eSBjb21wdXRlZCBieSB0aGUgSHlwZXJMb2dMb2cgZGF0YQogICAgICogc3RydWN0dXJlIHN0b3JlZCBhdCB0aGUgc3BlY2lmaWVkIHZhcmlhYmxlLCB3aGljaCBpcyAwIGlmIHRoZSB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmd8YXJyYXkgJGtleQogICAgICoKICAgICAqIEByZXR1cm4gIGludAogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9wZmNvdW50CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnBmQWRkKCdrZXkxJywgYXJyYXkoJ2VsZW0xJywgJ2VsZW0yJykpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+cGZBZGQoJ2tleTInLCBhcnJheSgnZWxlbTMnLCAnZWxlbTInKSk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5wZkNvdW50KCdrZXkxJyk7IC8vIGludCgyKQogICAgICogJHJlZGlzQ2x1c3Rlci0+cGZDb3VudChhcnJheSgna2V5MScsICdrZXkyJykpOyAvLyBpbnQoMykKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGZDb3VudCgka2V5KSB7fQoKICAgIC8qKgogICAgICogQWRkcyBhbGwgdGhlIGVsZW1lbnQgYXJndW1lbnRzIHRvIHRoZSBIeXBlckxvZ0xvZyBkYXRhIHN0cnVjdHVyZSBzdG9yZWQgYXQgdGhlIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgYXJyYXkgICRlbGVtZW50cwogICAgICoKICAgICAqIEByZXR1cm4gIGJvb2wKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvcGZhZGQKICAgICAqIEBleGFtcGxlICRyZWRpc0NsdXN0ZXItPnBmQWRkKCdrZXknLCBhcnJheSgnZWxlbTEnLCAnZWxlbTInKSkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBmQWRkKCRrZXksIGFycmF5ICRlbGVtZW50cykge30KCiAgICAvKioKICAgICAqIE1lcmdlIG11bHRpcGxlIEh5cGVyTG9nTG9nIHZhbHVlcyBpbnRvIGFuIHVuaXF1ZSB2YWx1ZSB0aGF0IHdpbGwgYXBwcm94aW1hdGUgdGhlIGNhcmRpbmFsaXR5CiAgICAgKiBvZiB0aGUgdW5pb24gb2YgdGhlIG9ic2VydmVkIFNldHMgb2YgdGhlIHNvdXJjZSBIeXBlckxvZ0xvZyBzdHJ1Y3R1cmVzLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkZGVzdEtleQogICAgICogQHBhcmFtICAgYXJyYXkgICRzb3VyY2VLZXlzCiAgICAgKgogICAgICogQHJldHVybiAgYm9vbAogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9wZm1lcmdlCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnBmQWRkKCdrZXkxJywgYXJyYXkoJ2VsZW0xJywgJ2VsZW0yJykpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+cGZBZGQoJ2tleTInLCBhcnJheSgnZWxlbTMnLCAnZWxlbTInKSk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5wZk1lcmdlKCdrZXkzJywgYXJyYXkoJ2tleTEnLCAna2V5MicpKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnBmQ291bnQoJ2tleTMnKTsgLy8gaW50KDMpCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBmTWVyZ2UoJGRlc3RLZXksIGFycmF5ICRzb3VyY2VLZXlzKSB7fQoKICAgIC8qKgogICAgICogQ2hhbmdlcyBhIHN1YnN0cmluZyBvZiBhIGxhcmdlciBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkb2Zmc2V0CiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiAgc3RyaW5nIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBhZnRlciBpdCB3YXMgbW9kaWZpZWQuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NldHJhbmdlCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNldCgna2V5JywgJ0hlbGxvIHdvcmxkJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXRSYW5nZSgna2V5JywgNiwgInJlZGlzIik7IC8vIHJldHVybnMgMTEKICAgICAqICRyZWRpc0NsdXN0ZXItPmdldCgna2V5Jyk7ICAgICAgICAgICAgICAgICAgLy8gIkhlbGxvIHJlZGlzIgogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSYW5nZSgka2V5LCAkb2Zmc2V0LCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXN0b3JlIGEga2V5IGZyb20gdGhlIHJlc3VsdCBvZiBhIERVTVAgb3BlcmF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5ICAgVGhlIGtleSBuYW1lCiAgICAgKiBAcGFyYW0gICBpbnQgICAgJHR0bCAgIEhvdyBsb25nIHRoZSBrZXkgc2hvdWxkIGxpdmUgKGlmIHplcm8sIG5vIGV4cGlyZSB3aWxsIGJlIHNldCBvbiB0aGUga2V5KQogICAgICogQHBhcmFtICAgc3RyaW5nICR2YWx1ZSAoYmluYXJ5KS4gIFRoZSBSZWRpcyBlbmNvZGVkIGtleSB2YWx1ZSAoZnJvbSBEVU1QKQogICAgICoKICAgICAqIEByZXR1cm4gIGJvb2wKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvcmVzdG9yZQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXQoJ2ZvbycsICdiYXInKTsKICAgICAqICR2YWwgPSAkcmVkaXNDbHVzdGVyLT5kdW1wKCdmb28nKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnJlc3RvcmUoJ2JhcicsIDAsICR2YWwpOyAvLyBUaGUga2V5ICdiYXInLCB3aWxsIG5vdyBiZSBlcXVhbCB0byB0aGUga2V5ICdmb28nCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc3RvcmUoJGtleSwgJHR0bCwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogTW92ZXMgdGhlIHNwZWNpZmllZCBtZW1iZXIgZnJvbSB0aGUgc2V0IGF0IHNyY0tleSB0byB0aGUgc2V0IGF0IGRzdEtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHNyY0tleQogICAgICogQHBhcmFtICAgc3RyaW5nICRkc3RLZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkbWVtYmVyCiAgICAgKgogICAgICogQHJldHVybiAgYm9vbCAgICBJZiB0aGUgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwsIHJldHVybiBUUlVFLgogICAgICogSWYgdGhlIHNyY0tleSBhbmQvb3IgZHN0S2V5IGRpZG4ndCBleGlzdCwgYW5kL29yIHRoZSBtZW1iZXIgZGlkbid0IGV4aXN0IGluIHNyY0tleSwgRkFMU0UgaXMgcmV0dXJuZWQuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3Ntb3ZlCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2tleTEnICwgJ3NldDExJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zQWRkKCdrZXkxJyAsICdzZXQxMicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgna2V5MScgLCAnc2V0MTMnKTsgICAgICAgICAgLy8gJ2tleTEnID0+IHsnc2V0MTEnLCAnc2V0MTInLCAnc2V0MTMnfQogICAgICogJHJlZGlzQ2x1c3Rlci0+c0FkZCgna2V5MicgLCAnc2V0MjEnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNBZGQoJ2tleTInICwgJ3NldDIyJyk7ICAgICAgICAgIC8vICdrZXkyJyA9PiB7J3NldDIxJywgJ3NldDIyJ30KICAgICAqICRyZWRpc0NsdXN0ZXItPnNNb3ZlKCdrZXkxJywgJ2tleTInLCAnc2V0MTMnKTsgIC8vICdrZXkxJyA9PiAgeydzZXQxMScsICdzZXQxMid9CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICdrZXkyJyA9PiAgeydzZXQyMScsICdzZXQyMicsICdzZXQxMyd9CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNNb3ZlKCRzcmNLZXksICRkc3RLZXksICRtZW1iZXIpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgcmFuZ2Ugb2YgZWxlbWVudHMgZnJvbSB0aGUgb3JkZXJlZCBzZXQgc3RvcmVkIGF0IHRoZSBzcGVjaWZpZWQga2V5LAogICAgICogd2l0aCB2YWx1ZXMgaW4gdGhlIHJhbmdlIFtzdGFydCwgZW5kXS4gc3RhcnQgYW5kIHN0b3AgYXJlIGludGVycHJldGVkIGFzIHplcm8tYmFzZWQgaW5kaWNlczoKICAgICAqIDAgdGhlIGZpcnN0IGVsZW1lbnQsCiAgICAgKiAxIHRoZSBzZWNvbmQgLi4uCiAgICAgKiAtMSB0aGUgbGFzdCBlbGVtZW50LAogICAgICogLTIgdGhlIHBlbnVsdGltYXRlIC4uLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gICBpbnQgICAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gICBpbnQgICAgJGVuZAogICAgICogQHBhcmFtICAgYm9vbCAgICR3aXRoc2NvcmVzCiAgICAgKgogICAgICogQHJldHVybiAgYXJyYXkgICBBcnJheSBjb250YWluaW5nIHRoZSB2YWx1ZXMgaW4gc3BlY2lmaWVkIHJhbmdlLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96cmFuZ2UKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+ekFkZCgna2V5MScsIDAsICd2YWwwJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrZXkxJywgMiwgJ3ZhbDInKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2tleTEnLCAxMCwgJ3ZhbDEwJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56UmFuZ2UoJ2tleTEnLCAwLCAtMSk7IC8vIGFycmF5KCd2YWwwJywgJ3ZhbDInLCAndmFsMTAnKQogICAgICogLy8gd2l0aCBzY29yZXMKICAgICAqICRyZWRpc0NsdXN0ZXItPnpSYW5nZSgna2V5MScsIDAsIC0xLCB0cnVlKTsgLy8gYXJyYXkoJ3ZhbDAnID0+IDAsICd2YWwyJyA9PiAyLCAndmFsMTAnID0+IDEwKQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6UmFuZ2UoJGtleSwgJHN0YXJ0LCAkZW5kLCAkd2l0aHNjb3JlcyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBlbGVtZW50cyBvZiB0aGUgc29ydGVkIHNldCBzdG9yZWQgYXQgdGhlIHNwZWNpZmllZCBrZXkgaW4gdGhlIHJhbmdlIFtzdGFydCwgZW5kXQogICAgICogaW4gcmV2ZXJzZSBvcmRlci4gc3RhcnQgYW5kIHN0b3AgYXJlIGludGVycHJldGF0ZWQgYXMgemVyby1iYXNlZCBpbmRpY2VzOgogICAgICogMCB0aGUgZmlyc3QgZWxlbWVudCwKICAgICAqIDEgdGhlIHNlY29uZCAuLi4KICAgICAqIC0xIHRoZSBsYXN0IGVsZW1lbnQsCiAgICAgKiAtMiB0aGUgcGVudWx0aW1hdGUgLi4uCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkc3RhcnQKICAgICAqIEBwYXJhbSAgIGludCAgICAkZW5kCiAgICAgKiBAcGFyYW0gICBib29sICAgJHdpdGhzY29yZQogICAgICoKICAgICAqIEByZXR1cm4gIGFycmF5ICAgQXJyYXkgY29udGFpbmluZyB0aGUgdmFsdWVzIGluIHNwZWNpZmllZCByYW5nZS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenJldnJhbmdlCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2tleScsIDAsICd2YWwwJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrZXknLCAyLCAndmFsMicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+ekFkZCgna2V5JywgMTAsICd2YWwxMCcpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+elJldlJhbmdlKCdrZXknLCAwLCAtMSk7IC8vIGFycmF5KCd2YWwxMCcsICd2YWwyJywgJ3ZhbDAnKQogICAgICoKICAgICAqIC8vIHdpdGggc2NvcmVzCiAgICAgKiAkcmVkaXNDbHVzdGVyLT56UmV2UmFuZ2UoJ2tleScsIDAsIC0xLCB0cnVlKTsgLy8gYXJyYXkoJ3ZhbDEwJyA9PiAxMCwgJ3ZhbDInID0+IDIsICd2YWwwJyA9PiAwKQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6UmV2UmFuZ2UoJGtleSwgJHN0YXJ0LCAkZW5kLCAkd2l0aHNjb3JlID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGVsZW1lbnRzIG9mIHRoZSBzb3J0ZWQgc2V0IHN0b3JlZCBhdCB0aGUgc3BlY2lmaWVkIGtleSB3aGljaCBoYXZlIHNjb3JlcyBpbiB0aGUKICAgICAqIHJhbmdlIFtzdGFydCxlbmRdLiBBZGRpbmcgYSBwYXJlbnRoZXNpcyBiZWZvcmUgc3RhcnQgb3IgZW5kIGV4Y2x1ZGVzIGl0IGZyb20gdGhlIHJhbmdlLgogICAgICogK2luZiBhbmQgLWluZiBhcmUgYWxzbyB2YWxpZCBsaW1pdHMuCiAgICAgKgogICAgICogelJldlJhbmdlQnlTY29yZSByZXR1cm5zIHRoZSBzYW1lIGl0ZW1zIGluIHJldmVyc2Ugb3JkZXIsIHdoZW4gdGhlIHN0YXJ0IGFuZCBlbmQgcGFyYW1ldGVycyBhcmUgc3dhcHBlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgaW50ICAgICRzdGFydAogICAgICogQHBhcmFtICAgaW50ICAgICRlbmQKICAgICAqIEBwYXJhbSAgIGFycmF5ICAkb3B0aW9ucyBUd28gb3B0aW9ucyBhcmUgYXZhaWxhYmxlOgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gd2l0aHNjb3JlcyA9PiBUUlVFLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gYW5kIGxpbWl0ID0+IGFycmF5KCRvZmZzZXQsICRjb3VudCkKICAgICAqCiAgICAgKiBAcmV0dXJuICBhcnJheSAgIEFycmF5IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBpbiBzcGVjaWZpZWQgcmFuZ2UuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3pyYW5nZWJ5c2NvcmUKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+ekFkZCgna2V5JywgMCwgJ3ZhbDAnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2tleScsIDIsICd2YWwyJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrZXknLCAxMCwgJ3ZhbDEwJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56UmFuZ2VCeVNjb3JlKCdrZXknLCAwLCAzKTsKICAgICAqIC8vIGFycmF5KCd2YWwwJywgJ3ZhbDInKQogICAgICogJHJlZGlzQ2x1c3Rlci0+elJhbmdlQnlTY29yZSgna2V5JywgMCwgMywgYXJyYXkoJ3dpdGhzY29yZXMnID0+IFRSVUUpOwogICAgICogLy8gYXJyYXkoJ3ZhbDAnID0+IDAsICd2YWwyJyA9PiAyKQogICAgICogJHJlZGlzQ2x1c3Rlci0+elJhbmdlQnlTY29yZSgna2V5JywgMCwgMywgYXJyYXkoJ2xpbWl0JyA9PiBhcnJheSgxLCAxKSk7CiAgICAgKiAvLyBhcnJheSgndmFsMicgPT4gMikKICAgICAqICRyZWRpc0NsdXN0ZXItPnpSYW5nZUJ5U2NvcmUoJ2tleScsIDAsIDMsIGFycmF5KCdsaW1pdCcgPT4gYXJyYXkoMSwgMSkpOwogICAgICogLy8gYXJyYXkoJ3ZhbDInKQogICAgICogJHJlZGlzQ2x1c3Rlci0+elJhbmdlQnlTY29yZSgna2V5JywgMCwgMywgYXJyYXkoJ3dpdGhzY29yZXMnID0+IFRSVUUsICdsaW1pdCcgPT4gYXJyYXkoMSwgMSkpOwogICAgICogLy8gYXJyYXkoJ3ZhbDInPT4gMikKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJhbmdlQnlTY29yZSgka2V5LCAkc3RhcnQsICRlbmQsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIHpSYW5nZUJ5U2NvcmUoKQogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gICBpbnQgICAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gICBpbnQgICAgJGVuZAogICAgICogQHBhcmFtICAgYXJyYXkgICRvcHRpb25zCiAgICAgKgogICAgICogQHJldHVybiAgICBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJldlJhbmdlQnlTY29yZSgka2V5LCAkc3RhcnQsICRlbmQsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgcmFuZ2Ugb2YgbWVtYmVycyBpbiBhIHNvcnRlZCBzZXQsIGJ5IGxleGljb2dyYXBoaWNhbCByYW5nZQogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAka2V5ICAgIFRoZSBaU0VUIHlvdSB3aXNoIHRvIHJ1biBhZ2FpbnN0LgogICAgICogQHBhcmFtICAgaW50ICAgICRtaW4gICAgVGhlIG1pbmltdW0gYWxwaGFudW1lcmljIHZhbHVlIHlvdSB3aXNoIHRvIGdldC4KICAgICAqIEBwYXJhbSAgIGludCAgICAkbWF4ICAgIFRoZSBtYXhpbXVtIGFscGhhbnVtZXJpYyB2YWx1ZSB5b3Ugd2lzaCB0byBnZXQuCiAgICAgKiBAcGFyYW0gICBpbnQgICAgJG9mZnNldCBPcHRpb25hbCBhcmd1bWVudCBpZiB5b3Ugd2lzaCB0byBzdGFydCBzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGUgZmlyc3QgZWxlbWVudC4KICAgICAqIEBwYXJhbSAgIGludCAgICAkbGltaXQgIE9wdGlvbmFsIGFyZ3VtZW50IGlmIHlvdSB3aXNoIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgcmV0dXJuZWQuCiAgICAgKgogICAgICogQHJldHVybiAgYXJyYXkgICBBcnJheSBjb250YWluaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIHNwZWNpZmllZCByYW5nZS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenJhbmdlYnlsZXgKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogZm9yZWFjaCAoYXJyYXkoJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnKSBhcyAkayA9PiAkY2hhcikgewogICAgICogICAgICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2tleScsICRrLCAkY2hhcik7CiAgICAgKiB9CiAgICAgKgogICAgICogJHJlZGlzQ2x1c3Rlci0+elJhbmdlQnlMZXgoJ2tleScsICctJywgJ1tjJyk7IC8vIGFycmF5KCdhJywgJ2InLCAnYycpCiAgICAgKiAkcmVkaXNDbHVzdGVyLT56UmFuZ2VCeUxleCgna2V5JywgJy0nLCAnKGMnKTsgLy8gYXJyYXkoJ2EnLCAnYicpCiAgICAgKiAkcmVkaXNDbHVzdGVyLT56UmV2UmFuZ2VCeUxleCgna2V5JywgJyhjJywnLScpOyAvLyBhcnJheSgnYicsICdhJykKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJhbmdlQnlMZXgoJGtleSwgJG1pbiwgJG1heCwgJG9mZnNldCA9IG51bGwsICRsaW1pdCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlICAgICB6UmFuZ2VCeUxleCgpCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkbWluCiAgICAgKiBAcGFyYW0gICBpbnQgICAgJG1heAogICAgICogQHBhcmFtICAgaW50ICAgICRvZmZzZXQKICAgICAqIEBwYXJhbSAgIGludCAgICAkbGltaXQKICAgICAqCiAgICAgKiBAcmV0dXJuICBhcnJheQogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96cmV2cmFuZ2VieWxleAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJldlJhbmdlQnlMZXgoJGtleSwgJG1pbiwgJG1heCwgJG9mZnNldCA9IG51bGwsICRsaW1pdCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIG1lbWJlcnMgaW4gYSBzb3J0ZWQgc2V0IGJldHdlZW4gYSBnaXZlbiBsZXhpY29ncmFwaGljYWwgcmFuZ2UuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIGludCAgICAkbWluCiAgICAgKiBAcGFyYW0gICBpbnQgICAgJG1heAogICAgICoKICAgICAqIEByZXR1cm4gIGludCBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzcGVjaWZpZWQgc2NvcmUgcmFuZ2UuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3psZXhjb3VudAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiBmb3JlYWNoIChhcnJheSgnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycpIGFzICRrID0+ICRjaGFyKSB7CiAgICAgKiAgICAgJHJlZGlzQ2x1c3Rlci0+ekFkZCgna2V5JywgJGssICRjaGFyKTsKICAgICAqIH0KICAgICAqICRyZWRpc0NsdXN0ZXItPnpMZXhDb3VudCgna2V5JywgJ1tiJywgJ1tmJyk7IC8vIDUKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gekxleENvdW50KCRrZXksICRtaW4sICRtYXgpIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgYWxsIG1lbWJlcnMgaW4gYSBzb3J0ZWQgc2V0IGJldHdlZW4gdGhlIGdpdmVuIGxleGljb2dyYXBoaWNhbCByYW5nZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleSAgVGhlIFpTRVQgeW91IHdpc2ggdG8gcnVuIGFnYWluc3QuCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG1pbiAgVGhlIG1pbmltdW0gYWxwaGFudW1lcmljIHZhbHVlIHlvdSB3aXNoIHRvIGdldC4KICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWF4ICBUaGUgbWF4aW11bSBhbHBoYW51bWVyaWMgdmFsdWUgeW91IHdpc2ggdG8gZ2V0LgogICAgICoKICAgICAqIEByZXR1cm4gIGludHxmYWxzZSAgICB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHJlbW92ZWQuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3pyZW1yYW5nZWJ5bGV4CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqIGZvcmVhY2ggKGFycmF5KCdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJykgYXMgJGsgPT4gJGNoYXIpIHsKICAgICAqICAgICAkcmVkaXNDbHVzdGVyLT56QWRkKCdrZXknLCAkaywgJGNoYXIpOwogICAgICogfQogICAgICogJHJlZGlzQ2x1c3Rlci0+elJlbVJhbmdlQnlMZXgoJ2tleScsICcoYicsJ1tkJyk7IC8vIDIgLCByZW1vdmUgZWxlbWVudCAnYycgYW5kICdkJwogICAgICogJHJlZGlzQ2x1c3Rlci0+elJhbmdlKCdrZXknLDAsLTEpOy8vIGFycmF5KCdhJywnYicsJ2UnLCdmJywnZycpCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHpSZW1SYW5nZUJ5TGV4KHN0cmluZyAka2V5LCBzdHJpbmcgJG1pbiwgc3RyaW5nICRtYXgpIHt9CgogICAgLyoqCiAgICAgKiBBZGQgbXVsdGlwbGUgc29ydGVkIHNldHMgYW5kIHN0b3JlIHRoZSByZXN1bHRpbmcgc29ydGVkIHNldCBpbiBhIG5ldyBrZXkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRPdXRwdXQKICAgICAqIEBwYXJhbSBhcnJheSAgJFpTZXRLZXlzCiAgICAgKiBAcGFyYW0gbnVsbHxhcnJheSAkV2VpZ2h0cwogICAgICogQHBhcmFtIHN0cmluZyAkYWdncmVnYXRlRnVuY3Rpb24gRWl0aGVyICJTVU0iLCAiTUlOIiwgb3IgIk1BWCI6IGRlZmluZXMgdGhlIGJlaGF2aW91ciB0byB1c2Ugb24KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZSBlbnRyaWVzIGR1cmluZyB0aGUgelVuaW9uLgogICAgICoKICAgICAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2YgdmFsdWVzIGluIHRoZSBuZXcgc29ydGVkIHNldC4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenVuaW9uc3RvcmUKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdrMScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdrMicpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdrMycpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdrbzEnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbCgna28yJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ2tvMycpOwogICAgICoKICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2sxJywgMCwgJ3ZhbDAnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ2sxJywgMSwgJ3ZhbDEnKTsKICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrMicsIDIsICd2YWwyJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrMicsIDMsICd2YWwzJyk7CiAgICAgKgogICAgICogJHJlZGlzQ2x1c3Rlci0+elVuaW9uU3RvcmUoJ2tvMScsIGFycmF5KCdrMScsICdrMicpKTsgLy8gNCwgJ2tvMScgPT4gYXJyYXkoJ3ZhbDAnLCAndmFsMScsICd2YWwyJywgJ3ZhbDMnKQogICAgICoKICAgICAqIC8vIFdlaWdodGVkIHpVbmlvblN0b3JlCiAgICAgKiAkcmVkaXNDbHVzdGVyLT56VW5pb25TdG9yZSgna28yJywgYXJyYXkoJ2sxJywgJ2syJyksIGFycmF5KDEsIDEpKTsgLy8gNCwgJ2tvMicgPT4gYXJyYXkoJ3ZhbDAnLCAndmFsMScsICd2YWwyJywndmFsMycpCiAgICAgKiAkcmVkaXNDbHVzdGVyLT56VW5pb25TdG9yZSgna28zJywgYXJyYXkoJ2sxJywgJ2syJyksIGFycmF5KDUsIDEpKTsgLy8gNCwgJ2tvMycgPT4gYXJyYXkoJ3ZhbDAnLCAndmFsMicsICd2YWwzJywndmFsMScpCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHpVbmlvblN0b3JlKCRPdXRwdXQsICRaU2V0S2V5cywgP2FycmF5ICRXZWlnaHRzID0gbnVsbCwgJGFnZ3JlZ2F0ZUZ1bmN0aW9uID0gJ1NVTScpIHt9CgogICAgLyoqCiAgICAgKiBJbnRlcnNlY3QgbXVsdGlwbGUgc29ydGVkIHNldHMgYW5kIHN0b3JlIHRoZSByZXN1bHRpbmcgc29ydGVkIHNldCBpbiBhIG5ldyBrZXkKICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJE91dHB1dAogICAgICogQHBhcmFtICAgYXJyYXkgICRaU2V0S2V5cwogICAgICogQHBhcmFtICAgbnVsbHxhcnJheSAkV2VpZ2h0cwogICAgICogQHBhcmFtICAgc3RyaW5nICRhZ2dyZWdhdGVGdW5jdGlvbiBFaXRoZXIgIlNVTSIsICJNSU4iLCBvciAiTUFYIjoKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lcyB0aGUgYmVoYXZpb3VyIHRvIHVzZSBvbiBkdXBsaWNhdGUgZW50cmllcyBkdXJpbmcgdGhlIHpJbnRlclN0b3JlLgogICAgICoKICAgICAqIEByZXR1cm4gIGludCAgICAgVGhlIG51bWJlciBvZiB2YWx1ZXMgaW4gdGhlIG5ldyBzb3J0ZWQgc2V0LgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96aW50ZXJzdG9yZQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ2sxJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ2syJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ2szJyk7CiAgICAgKgogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdrbzEnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmRlbCgna28yJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ2tvMycpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdrbzQnKTsKICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrMScsIDAsICd2YWwwJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrMScsIDEsICd2YWwxJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT56QWRkKCdrMScsIDMsICd2YWwzJyk7CiAgICAgKgogICAgICogJHJlZGlzQ2x1c3Rlci0+ekFkZCgnazInLCAyLCAndmFsMScpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+ekFkZCgnazInLCAzLCAndmFsMycpOwogICAgICoKICAgICAqICRyZWRpc0NsdXN0ZXItPnpJbnRlclN0b3JlKCdrbzEnLCBhcnJheSgnazEnLCAnazInKSk7ICAgICAgICAgICAgICAgLy8gMiwgJ2tvMScgPT4gYXJyYXkoJ3ZhbDEnLCAndmFsMycpCiAgICAgKiAkcmVkaXNDbHVzdGVyLT56SW50ZXJTdG9yZSgna28yJywgYXJyYXkoJ2sxJywgJ2syJyksIGFycmF5KDEsIDEpKTsgIC8vIDIsICdrbzInID0+IGFycmF5KCd2YWwxJywgJ3ZhbDMnKQogICAgICoKICAgICAqIC8vIFdlaWdodGVkIHpJbnRlclN0b3JlCiAgICAgKiAkcmVkaXNDbHVzdGVyLT56SW50ZXJTdG9yZSgna28zJywgYXJyYXkoJ2sxJywgJ2syJyksIGFycmF5KDEsIDUpLCAnbWluJyk7IC8vIDIsICdrbzMnID0+IGFycmF5KCd2YWwxJywgJ3ZhbDMnKQogICAgICogJHJlZGlzQ2x1c3Rlci0+ekludGVyU3RvcmUoJ2tvNCcsIGFycmF5KCdrMScsICdrMicpLCBhcnJheSgxLCA1KSwgJ21heCcpOyAvLyAyLCAna280JyA9PiBhcnJheSgndmFsMycsICd2YWwxJykKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gekludGVyU3RvcmUoJE91dHB1dCwgJFpTZXRLZXlzLCBhcnJheSAkV2VpZ2h0cyA9IG51bGwsICRhZ2dyZWdhdGVGdW5jdGlvbiA9ICdTVU0nKSB7fQoKICAgIC8qKgogICAgICogRGVsZXRlcyBhIHNwZWNpZmllZCBtZW1iZXIgZnJvbSB0aGUgb3JkZXJlZCBzZXQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkbWVtYmVyMQogICAgICogQHBhcmFtICAgc3RyaW5nICRtZW1iZXIyCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJG1lbWJlck4KICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnQgICAgIE51bWJlciBvZiBkZWxldGVkIHZhbHVlcwogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96cmVtCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnpBZGQoJ3onLCAxLCAndjEnLCAyLCAndjInLCAzLCAndjMnLCA0LCAndjQnICk7ICAvLyBpbnQoMikKICAgICAqICRyZWRpc0NsdXN0ZXItPnpSZW0oJ3onLCAndjInLCAndjMnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnQoMikKICAgICAqIHZhcl9kdW1wKCAkcmVkaXNDbHVzdGVyLT56UmFuZ2UoJ3onLCAwLCAtMSkgKTsKICAgICAqIC8vLy8gT3V0cHV0OgogICAgICogLy8KICAgICAqIC8vIGFycmF5KDIpIHsKICAgICAqIC8vICAgWzBdPT4gc3RyaW5nKDIpICJ2MSIKICAgICAqIC8vICAgWzFdPT4gc3RyaW5nKDIpICJ2NCIKICAgICAqIC8vIH0KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJlbSgka2V5LCAkbWVtYmVyMSwgJG1lbWJlcjIgPSBudWxsLCAkbWVtYmVyTiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBTb3J0CiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgIGFycmF5ICAkb3B0aW9uIGFycmF5KGtleSA9PiB2YWx1ZSwgLi4uKSAtIG9wdGlvbmFsLCB3aXRoIHRoZSBmb2xsb3dpbmcga2V5cyBhbmQgdmFsdWVzOgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgLSAnYnknID0+ICdzb21lX3BhdHRlcm5fKicsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtICdsaW1pdCcgPT4gYXJyYXkoMCwgMSksCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtICdnZXQnID0+ICdzb21lX290aGVyX3BhdHRlcm5fKicgb3IgYW4gYXJyYXkgb2YgcGF0dGVybnMsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtICdzb3J0JyA9PiAnYXNjJyBvciAnZGVzYycsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtICdhbHBoYScgPT4gVFJVRSwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3N0b3JlJyA9PiAnZXh0ZXJuYWwta2V5JwogICAgICoKICAgICAqIEByZXR1cm4gIGFycmF5CiAgICAgKiBBbiBhcnJheSBvZiB2YWx1ZXMsIG9yIGEgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG51bWJlciBvZiBlbGVtZW50cyBzdG9yZWQgaWYgdGhhdCB3YXMgdXNlZC4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc29ydAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5kZWwoJ3MnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNhZGQoJ3MnLCA1KTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNhZGQoJ3MnLCA0KTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNhZGQoJ3MnLCAyKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNhZGQoJ3MnLCAxKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNhZGQoJ3MnLCAzKTsKICAgICAqCiAgICAgKiB2YXJfZHVtcCgkcmVkaXNDbHVzdGVyLT5zb3J0KCdzJykpOyAvLyAxLDIsMyw0LDUKICAgICAqIHZhcl9kdW1wKCRyZWRpc0NsdXN0ZXItPnNvcnQoJ3MnLCBhcnJheSgnc29ydCcgPT4gJ2Rlc2MnKSkpOyAvLyA1LDQsMywyLDEKICAgICAqIHZhcl9kdW1wKCRyZWRpc0NsdXN0ZXItPnNvcnQoJ3MnLCBhcnJheSgnc29ydCcgPT4gJ2Rlc2MnLCAnc3RvcmUnID0+ICdvdXQnKSkpOyAvLyAoaW50KTUKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc29ydCgka2V5LCAkb3B0aW9uID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIERlc2NyaWJlcyB0aGUgb2JqZWN0IHBvaW50ZWQgdG8gYnkgYSBrZXkuCiAgICAgKiBUaGUgaW5mb3JtYXRpb24gdG8gcmV0cmlldmUgKHN0cmluZykgYW5kIHRoZSBrZXkgKHN0cmluZykuCiAgICAgKiBJbmZvIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgICAqIC0gImVuY29kaW5nIgogICAgICogLSAicmVmY291bnQiCiAgICAgKiAtICJpZGxldGltZSIKICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHN0cmluZwogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkKICAgICAqCiAgICAgKiBAcmV0dXJuICBzdHJpbmd8ZmFsc2UgIGZvciAiZW5jb2RpbmciLCBpbnQgZm9yICJyZWZjb3VudCIgYW5kICJpZGxldGltZSIsIEZBTFNFIGlmIHRoZSBrZXkgZG9lc24ndCBleGlzdC4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvb2JqZWN0CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPm9iamVjdCgiZW5jb2RpbmciLCAibCIpOyAvLyDihpIgemlwbGlzdAogICAgICogJHJlZGlzQ2x1c3Rlci0+b2JqZWN0KCJyZWZjb3VudCIsICJsIik7IC8vIOKGkiAxCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5vYmplY3QoImlkbGV0aW1lIiwgImwiKTsgLy8g4oaSIDQwMCAoaW4gc2Vjb25kcywgd2l0aCBhIHByZWNpc2lvbiBvZiAxMCBzZWNvbmRzKS4KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2JqZWN0KCRzdHJpbmcgPSAnJywgJGtleSA9ICcnKSB7fQoKICAgIC8qKgogICAgICogU3Vic2NyaWJlIHRvIGNoYW5uZWxzLiBXYXJuaW5nOiB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvYmFibHkgY2hhbmdlIGluIHRoZSBmdXR1cmUuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAkY2hhbm5lbHMgYW4gYXJyYXkgb2YgY2hhbm5lbHMgdG8gc3Vic2NyaWJlIHRvCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRjYWxsYmFjayBlaXRoZXIgYSBzdHJpbmcgb3IgYW4gYXJyYXkoJGluc3RhbmNlLCAnbWV0aG9kX25hbWUnKS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHJlY2VpdmVzIDMgcGFyYW1ldGVyczogdGhlIHJlZGlzIGluc3RhbmNlLCB0aGUgY2hhbm5lbAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBhbmQgdGhlIG1lc3NhZ2UuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCAgICAgICAgICAgIEFueSBub24tbnVsbCByZXR1cm4gdmFsdWUgaW4gdGhlIGNhbGxiYWNrIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc3Vic2NyaWJlCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqIGZ1bmN0aW9uIGYoJHJlZGlzQ2x1c3RlciwgJGNoYW4sICRtc2cpIHsKICAgICAqICBzd2l0Y2goJGNoYW4pIHsKICAgICAqICAgICAgY2FzZSAnY2hhbi0xJzoKICAgICAqICAgICAgICAgIC4uLgogICAgICogICAgICAgICAgYnJlYWs7CiAgICAgKgogICAgICogICAgICBjYXNlICdjaGFuLTInOgogICAgICogICAgICAgICAgICAgICAgICAgICAuLi4KICAgICAqICAgICAgICAgIGJyZWFrOwogICAgICoKICAgICAqICAgICAgY2FzZSAnY2hhbi0yJzoKICAgICAqICAgICAgICAgIC4uLgogICAgICogICAgICAgICAgYnJlYWs7CiAgICAgKiAgICAgIH0KICAgICAqIH0KICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zdWJzY3JpYmUoYXJyYXkoJ2NoYW4tMScsICdjaGFuLTInLCAnY2hhbi0zJyksICdmJyk7IC8vIHN1YnNjcmliZSB0byAzIGNoYW5zCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1YnNjcmliZSgkY2hhbm5lbHMsICRjYWxsYmFjaykge30KCiAgICAvKioKICAgICAqIFN1YnNjcmliZSB0byBjaGFubmVscyBieSBwYXR0ZXJuCiAgICAgKgogICAgICogQHBhcmFtICAgYXJyYXkgICAgICAgICRwYXR0ZXJucyAgICAgVGhlIG51bWJlciBvZiBlbGVtZW50cyByZW1vdmVkIGZyb20gdGhlIHNldC4KICAgICAqIEBwYXJhbSAgIHN0cmluZ3xhcnJheSAkY2FsbGJhY2sgICAgIEVpdGhlciBhIHN0cmluZyBvciBhbiBhcnJheSB3aXRoIGFuIG9iamVjdCBhbmQgbWV0aG9kLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY2FsbGJhY2sgd2lsbCBnZXQgZm91ciBhcmd1bWVudHMgKCRyZWRpcywgJHBhdHRlcm4sICRjaGFubmVsLCAkbWVzc2FnZSkKICAgICAqCiAgICAgKiBAcmV0dXJuICBtaXhlZCAgICAgICAgICAgQW55IG5vbi1udWxsIHJldHVybiB2YWx1ZSBpbiB0aGUgY2FsbGJhY2sgd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgogICAgICoKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvcHN1YnNjcmliZQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiBmdW5jdGlvbiBwc3Vic2NyaWJlKCRyZWRpc0NsdXN0ZXIsICRwYXR0ZXJuLCAkY2hhbiwgJG1zZykgewogICAgICogIGVjaG8gIlBhdHRlcm46ICRwYXR0ZXJuXG4iOwogICAgICogIGVjaG8gIkNoYW5uZWw6ICRjaGFuXG4iOwogICAgICogIGVjaG8gIlBheWxvYWQ6ICRtc2dcbiI7CiAgICAgKiB9CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBzdWJzY3JpYmUoJHBhdHRlcm5zLCAkY2FsbGJhY2spIHt9CgogICAgLyoqCiAgICAgKiBVbnN1YnNjcmliZXMgdGhlIGNsaWVudCBmcm9tIHRoZSBnaXZlbiBjaGFubmVscywgb3IgZnJvbSBhbGwgb2YgdGhlbSBpZiBub25lIGlzIGdpdmVuLgogICAgICoKICAgICAqIEBwYXJhbSAkY2hhbm5lbHMKICAgICAqIEBwYXJhbSAkY2FsbGJhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuU3Vic2NyaWJlKCRjaGFubmVscywgJGNhbGxiYWNrKSB7fQoKICAgIC8qKgogICAgICogVW5zdWJzY3JpYmVzIHRoZSBjbGllbnQgZnJvbSB0aGUgZ2l2ZW4gcGF0dGVybnMsIG9yIGZyb20gYWxsIG9mIHRoZW0gaWYgbm9uZSBpcyBnaXZlbi4KICAgICAqCiAgICAgKiBAcGFyYW0gJGNoYW5uZWxzCiAgICAgKiBAcGFyYW0gJGNhbGxiYWNrCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdW5TdWJzY3JpYmUoJGNoYW5uZWxzLCAkY2FsbGJhY2spIHt9CgogICAgLyoqCiAgICAgKiBFdmFsdWF0ZSBhIExVQSBzY3JpcHQgc2VydmVyc2lkZSwgZnJvbSB0aGUgU0hBMSBoYXNoIG9mIHRoZSBzY3JpcHQgaW5zdGVhZCBvZiB0aGUgc2NyaXB0IGl0c2VsZi4KICAgICAqIEluIG9yZGVyIHRvIHJ1biB0aGlzIGNvbW1hbmQgUmVkaXMgd2lsbCBoYXZlIHRvIGhhdmUgYWxyZWFkeSBsb2FkZWQgdGhlIHNjcmlwdCwgZWl0aGVyIGJ5IHJ1bm5pbmcgaXQgb3IgdmlhCiAgICAgKiB0aGUgU0NSSVBUIExPQUQgY29tbWFuZC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHNjcmlwdFNoYQogICAgICogQHBhcmFtICAgYXJyYXkgICRhcmdzCiAgICAgKiBAcGFyYW0gICBpbnQgICAgJG51bUtleXMKICAgICAqCiAgICAgKiBAcmV0dXJuICBtaXhlZCAgIEBzZWUgZXZhbCgpCiAgICAgKiBAc2VlICAgICBldmFsKCkKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZXZhbHNoYQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkc2NyaXB0ID0gJ3JldHVybiAxJzsKICAgICAqICRzaGEgPSAkcmVkaXNDbHVzdGVyLT5zY3JpcHQoJ2xvYWQnLCAkc2NyaXB0KTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmV2YWxTaGEoJHNoYSk7IC8vIFJldHVybnMgMQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBldmFsU2hhKCRzY3JpcHRTaGEsICRhcmdzID0gW10sICRudW1LZXlzID0gMCkge30KCiAgICAvKioKICAgICAqIFNjYW4gdGhlIGtleXNwYWNlIGZvciBrZXlzLgogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICAgICAgICAgICYkaXRlcmF0b3IgSXRlcmF0b3IsIGluaXRpYWxpemVkIHRvIE5VTEwuCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xhcnJheSAkbm9kZSAgICAgIE5vZGUgaWRlbnRpZmllZCBieSBrZXkgb3IgaG9zdC9wb3J0IGFycmF5CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgICAgICAkcGF0dGVybiAgIFBhdHRlcm4gdG8gbWF0Y2guCiAgICAgKiBAcGFyYW0gIGludCAgICAgICAgICAkY291bnQgICAgIENvdW50IG9mIGtleXMgcGVyIGl0ZXJhdGlvbiAob25seSBhIHN1Z2dlc3Rpb24gdG8gUmVkaXMpLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBrZXlzIG9yIEZBTFNFIGlmIHRoZXJlIGFyZSBubyBtb3JlIGtleXMuCiAgICAgKiBAbGluayAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc2NhbgogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkaXRlcmF0b3IgPSBudWxsOwogICAgICogd2hpbGUoJGtleXMgPSAkcmVkaXNDbHVzdGVyLT5zY2FuKCRpdGVyYXRvcikpIHsKICAgICAqICAgICBmb3JlYWNoKCRrZXlzIGFzICRrZXkpIHsKICAgICAqICAgICAgICAgZWNobyAka2V5IC4gUEhQX0VPTDsKICAgICAqICAgICB9CiAgICAgKiB9CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNjYW4oJiRpdGVyYXRvciwgJG5vZGUsICRwYXR0ZXJuID0gbnVsbCwgJGNvdW50ID0gMCkge30KCiAgICAvKioKICAgICAqIFNjYW4gYSBzZXQgZm9yIG1lbWJlcnMuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkgICAgICBUaGUgc2V0IHRvIHNlYXJjaC4KICAgICAqIEBwYXJhbSAgIGludCAgICAmJGl0ZXJhdG9yIExPTkcgKHJlZmVyZW5jZSkgdG8gdGhlIGl0ZXJhdG9yIGFzIHdlIGdvLgogICAgICogQHBhcmFtICAgbnVsbCAgICRwYXR0ZXJuICBTdHJpbmcsIG9wdGlvbmFsIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdC4KICAgICAqIEBwYXJhbSAgIGludCAgICAkY291bnQgICAgSG93IG1hbnkgbWVtYmVycyB0byByZXR1cm4gYXQgYSB0aW1lIChSZWRpcyBtaWdodCByZXR1cm4gYSBkaWZmZXJlbnQgYW1vdW50KS4KICAgICAqCiAgICAgKiBAcmV0dXJuICBhcnJheXxmYWxzZSAgIFBIUFJlZGlzIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIGtleXMgb3IgRkFMU0Ugd2hlbiB3ZSdyZSBkb25lIGl0ZXJhdGluZy4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc3NjYW4KICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJGl0ZXJhdG9yID0gbnVsbDsKICAgICAqIHdoaWxlICgkbWVtYmVycyA9ICRyZWRpc0NsdXN0ZXItPnNTY2FuKCdzZXQnLCAkaXRlcmF0b3IpKSB7CiAgICAgKiAgICAgZm9yZWFjaCAoJG1lbWJlcnMgYXMgJG1lbWJlcikgewogICAgICogICAgICAgICBlY2hvICRtZW1iZXIgLiBQSFBfRU9MOwogICAgICogICAgIH0KICAgICAqIH0KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc1NjYW4oJGtleSwgJiRpdGVyYXRvciwgJHBhdHRlcm4gPSBudWxsLCAkY291bnQgPSAwKSB7fQoKICAgIC8qKgogICAgICogU2NhbiBhIHNvcnRlZCBzZXQgZm9yIG1lbWJlcnMsIHdpdGggb3B0aW9uYWwgcGF0dGVybiBhbmQgY291bnQuCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRrZXkgICAgICBTdHJpbmcsIHRoZSBzZXQgdG8gc2Nhbi4KICAgICAqIEBwYXJhbSAgIGludCAgICAmJGl0ZXJhdG9yIExvbmcgKHJlZmVyZW5jZSksIGluaXRpYWxpemVkIHRvIE5VTEwuCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJHBhdHRlcm4gIFN0cmluZyAob3B0aW9uYWwpLCB0aGUgcGF0dGVybiB0byBtYXRjaC4KICAgICAqIEBwYXJhbSAgIGludCAgICAkY291bnQgICAgSG93IG1hbnkga2V5cyB0byByZXR1cm4gcGVyIGl0ZXJhdGlvbiAoUmVkaXMgbWlnaHQgcmV0dXJuIGEgZGlmZmVyZW50IG51bWJlcikuCiAgICAgKgogICAgICogQHJldHVybiAgYXJyYXl8ZmFsc2UgICBQSFBSZWRpcyB3aWxsIHJldHVybiBtYXRjaGluZyBrZXlzIGZyb20gUmVkaXMsIG9yIEZBTFNFIHdoZW4gaXRlcmF0aW9uIGlzIGNvbXBsZXRlLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96c2NhbgogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkaXRlcmF0b3IgPSBudWxsOwogICAgICogd2hpbGUgKCRtZW1iZXJzID0gJHJlZGlzLXpzY2FuKCd6c2V0JywgJGl0ZXJhdG9yKSkgewogICAgICogICAgIGZvcmVhY2ggKCRtZW1iZXJzIGFzICRtZW1iZXIgPT4gJHNjb3JlKSB7CiAgICAgKiAgICAgICAgIGVjaG8gJG1lbWJlciAuICcgPT4gJyAuICRzY29yZSAuIFBIUF9FT0w7CiAgICAgKiAgICAgfQogICAgICogfQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6U2Nhbigka2V5LCAmJGl0ZXJhdG9yLCAkcGF0dGVybiA9IG51bGwsICRjb3VudCA9IDApIHt9CgogICAgLyoqCiAgICAgKiBTY2FuIGEgSEFTSCB2YWx1ZSBmb3IgbWVtYmVycywgd2l0aCBhbiBvcHRpb25hbCBwYXR0ZXJuIGFuZCBjb3VudC4KICAgICAqCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgJGtleQogICAgICogQHBhcmFtICAgaW50ICAgICYkaXRlcmF0b3IKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkcGF0dGVybiBPcHRpb25hbCBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QuCiAgICAgKiBAcGFyYW0gICBpbnQgICAgJGNvdW50ICAgSG93IG1hbnkga2V5cyB0byByZXR1cm4gaW4gYSBnbyAob25seSBhIHN1Z2VzdGlvbiB0byBSZWRpcykuCiAgICAgKgogICAgICogQHJldHVybiAgYXJyYXkgICAgIEFuIGFycmF5IG9mIG1lbWJlcnMgdGhhdCBtYXRjaCBvdXIgcGF0dGVybi4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaHNjYW4KICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJGl0ZXJhdG9yID0gbnVsbDsKICAgICAqIHdoaWxlKCRlbGVtZW50cyA9ICRyZWRpc0NsdXN0ZXItPmhzY2FuKCdoYXNoJywgJGl0ZXJhdG9yKSkgewogICAgICogICAgZm9yZWFjaCgkZWxlbWVudHMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAqICAgICAgICAgZWNobyAka2V5IC4gJyA9PiAnIC4gJHZhbHVlIC4gUEhQX0VPTDsKICAgICAqICAgICB9CiAgICAgKiB9CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhTY2FuKCRrZXksICYkaXRlcmF0b3IsICRwYXR0ZXJuID0gbnVsbCwgJGNvdW50ID0gMCkge30KCiAgICAvKioKICAgICAqIERldGVjdCB3aGV0aGVyIHdlJ3JlIGluIEFUT01JQy9NVUxUSS9QSVBFTElORSBtb2RlLgogICAgICoKICAgICAqIEByZXR1cm4gIGludCAgICAgRWl0aGVyIFJlZGlzQ2x1c3Rlcjo6QVRPTUlDLCBSZWRpc0NsdXN0ZXI6Ok1VTFRJIG9yIFJlZGlzQ2x1c3Rlcjo6UElQRUxJTkUKICAgICAqIEBleGFtcGxlICRyZWRpc0NsdXN0ZXItPmdldE1vZGUoKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZGUoKSB7fQoKICAgIC8qKgogICAgICogVGhlIGxhc3QgZXJyb3IgbWVzc2FnZSAoaWYgYW55KQogICAgICoKICAgICAqIEByZXR1cm4gIHN0cmluZ3xudWxsICBBIHN0cmluZyB3aXRoIHRoZSBsYXN0IHJldHVybmVkIHNjcmlwdCBiYXNlZCBlcnJvciBtZXNzYWdlLCBvciBOVUxMIGlmIHRoZXJlIGlzIG5vIGVycm9yCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmV2YWwoJ3RoaXMtaXMtbm90LWx1YScpOwogICAgICogJGVyciA9ICRyZWRpc0NsdXN0ZXItPmdldExhc3RFcnJvcigpOwogICAgICogLy8gIkVSUiBFcnJvciBjb21waWxpbmcgc2NyaXB0IChuZXcgZnVuY3Rpb24pOiB1c2VyX3NjcmlwdDoxOiAnPScgZXhwZWN0ZWQgbmVhciAnLSciCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RFcnJvcigpIHt9CgogICAgLyoqCiAgICAgKiBDbGVhciB0aGUgbGFzdCBlcnJvciBtZXNzYWdlCiAgICAgKgogICAgICogQHJldHVybiBib29sIHRydWUKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0KCd4JywgJ2EnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmluY3IoJ3gnKTsKICAgICAqICRlcnIgPSAkcmVkaXNDbHVzdGVyLT5nZXRMYXN0RXJyb3IoKTsKICAgICAqIC8vICJFUlIgdmFsdWUgaXMgbm90IGFuIGludGVnZXIgb3Igb3V0IG9mIHJhbmdlIgogICAgICogJHJlZGlzQ2x1c3Rlci0+Y2xlYXJMYXN0RXJyb3IoKTsKICAgICAqICRlcnIgPSAkcmVkaXNDbHVzdGVyLT5nZXRMYXN0RXJyb3IoKTsKICAgICAqIC8vIE5VTEwKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXJMYXN0RXJyb3IoKSB7fQoKICAgIC8qKgogICAgICogR2V0IGNsaWVudCBvcHRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gICBpbnQgJG9wdGlvbiBwYXJhbWV0ZXIKICAgICAqCiAgICAgKiBAcmV0dXJuICBpbnR8c3RyaW5nICAgICBQYXJhbWV0ZXIgdmFsdWUuCiAgICAgKiBAZXhhbXBsZQogICAgICogLy8gcmV0dXJuIFJlZGlzQ2x1c3Rlcjo6U0VSSUFMSVpFUl9OT05FLCBSZWRpc0NsdXN0ZXI6OlNFUklBTElaRVJfUEhQLCBvciBSZWRpc0NsdXN0ZXI6OlNFUklBTElaRVJfSUdCSU5BUlkuCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5nZXRPcHRpb24oUmVkaXNDbHVzdGVyOjpPUFRfU0VSSUFMSVpFUik7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcHRpb24oJG9wdGlvbikge30KCiAgICAvKioKICAgICAqIFNldCBjbGllbnQgb3B0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgIGludCAgICAgICAgJG9wdGlvbiBwYXJhbWV0ZXIKICAgICAqIEBwYXJhbSAgIGludHxzdHJpbmcgJHZhbHVlICBwYXJhbWV0ZXIgdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuICBib29sICAgVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvci4KICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0T3B0aW9uKFJlZGlzQ2x1c3Rlcjo6T1BUX1NFUklBTElaRVIsIFJlZGlzQ2x1c3Rlcjo6U0VSSUFMSVpFUl9OT05FKTsgICAgICAgIC8vIGRvbid0IHNlcmlhbGl6ZSBkYXRhCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXRPcHRpb24oUmVkaXNDbHVzdGVyOjpPUFRfU0VSSUFMSVpFUiwgUmVkaXNDbHVzdGVyOjpTRVJJQUxJWkVSX1BIUCk7ICAgICAgICAgLy8gdXNlIGJ1aWx0LWluIHNlcmlhbGl6ZS91bnNlcmlhbGl6ZQogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0T3B0aW9uKFJlZGlzQ2x1c3Rlcjo6T1BUX1NFUklBTElaRVIsIFJlZGlzQ2x1c3Rlcjo6U0VSSUFMSVpFUl9JR0JJTkFSWSk7ICAgIC8vIHVzZSBpZ0JpbmFyeSBzZXJpYWxpemUvdW5zZXJpYWxpemUKICAgICAqICRyZWRpc0NsdXN0ZXItPnNldE9wdGlvbihSZWRpc0NsdXN0ZXI6Ok9QVF9QUkVGSVgsICdteUFwcE5hbWU6Jyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgY3VzdG9tIHByZWZpeCBvbiBhbGwga2V5cwogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRPcHRpb24oJG9wdGlvbiwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQSB1dGlsaXR5IG1ldGhvZCB0byBwcmVmaXggdGhlIHZhbHVlIHdpdGggdGhlIHByZWZpeCBzZXR0aW5nIGZvciBwaHByZWRpcy4KICAgICAqCiAgICAgKiBAcGFyYW0gICBtaXhlZCAkdmFsdWUgVGhlIHZhbHVlIHlvdSB3aXNoIHRvIHByZWZpeAogICAgICoKICAgICAqIEByZXR1cm4gIHN0cmluZyAgSWYgYSBwcmVmaXggaXMgc2V0IHVwLCB0aGUgdmFsdWUgbm93IHByZWZpeGVkLiAgSWYgdGhlcmUgaXMgbm8gcHJlZml4LCB0aGUgdmFsdWUgd2lsbCBiZSByZXR1cm5lZCB1bmNoYW5nZWQuCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNldE9wdGlvbihSZWRpc0NsdXN0ZXI6Ok9QVF9QUkVGSVgsICdteS1wcmVmaXg6Jyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5fcHJlZml4KCdteS12YWx1ZScpOyAvLyBXaWxsIHJldHVybiAnbXktcHJlZml4Om15LXZhbHVlJwogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfcHJlZml4KCR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIEEgdXRpbGl0eSBtZXRob2QgdG8gc2VyaWFsaXplIHZhbHVlcyBtYW51YWxseS4gVGhpcyBtZXRob2QgYWxsb3dzIHlvdSB0byBzZXJpYWxpemUgYSB2YWx1ZSB3aXRoIHdoYXRldmVyCiAgICAgKiBzZXJpYWxpemVyIGlzIGNvbmZpZ3VyZWQsIG1hbnVhbGx5LiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIHNlcmlhbGl6YXRpb24vdW5zZXJpYWxpemF0aW9uIG9mIGRhdGEgZ29pbmcgaW4KICAgICAqIGFuZCBvdXQgb2YgRVZBTCBjb21tYW5kcyBhcyBwaHByZWRpcyBjYW4ndCBhdXRvbWF0aWNhbGx5IGRvIHRoaXMgaXRzZWxmLiAgTm90ZSB0aGF0IGlmIG5vIHNlcmlhbGl6ZXIgaXMKICAgICAqIHNldCwgcGhwcmVkaXMgd2lsbCBjaGFuZ2UgQXJyYXkgdmFsdWVzIHRvICdBcnJheScsIGFuZCBPYmplY3RzIHRvICdPYmplY3QnLgogICAgICoKICAgICAqIEBwYXJhbSAgIG1peGVkICR2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgc2VyaWFsaXplZC4KICAgICAqCiAgICAgKiBAcmV0dXJuICBtaXhlZAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXRPcHRpb24oUmVkaXNDbHVzdGVyOjpPUFRfU0VSSUFMSVpFUiwgUmVkaXNDbHVzdGVyOjpTRVJJQUxJWkVSX05PTkUpOwogICAgICogJHJlZGlzQ2x1c3Rlci0+X3NlcmlhbGl6ZSgiZm9vIik7IC8vIHJldHVybnMgImZvbyIKICAgICAqICRyZWRpc0NsdXN0ZXItPl9zZXJpYWxpemUoQXJyYXkoKSk7IC8vIFJldHVybnMgIkFycmF5IgogICAgICogJHJlZGlzQ2x1c3Rlci0+X3NlcmlhbGl6ZShuZXcgc3RkQ2xhc3MoKSk7IC8vIFJldHVybnMgIk9iamVjdCIKICAgICAqCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zZXRPcHRpb24oUmVkaXNDbHVzdGVyOjpPUFRfU0VSSUFMSVpFUiwgUmVkaXNDbHVzdGVyOjpTRVJJQUxJWkVSX1BIUCk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5fc2VyaWFsaXplKCJmb28iKTsgLy8gUmV0dXJucyAnczozOiJmb28iOycKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX3NlcmlhbGl6ZSgkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBBIHV0aWxpdHkgbWV0aG9kIHRvIHVuc2VyaWFsaXplIGRhdGEgd2l0aCB3aGF0ZXZlciBzZXJpYWxpemVyIGlzIHNldCB1cC4gIElmIHRoZXJlIGlzIG5vIHNlcmlhbGl6ZXIgc2V0LCB0aGUKICAgICAqIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQgdW5jaGFuZ2VkLiAgSWYgdGhlcmUgaXMgYSBzZXJpYWxpemVyIHNldCB1cCwgYW5kIHRoZSBkYXRhIHBhc3NlZCBpbiBpcyBtYWxmb3JtZWQsIGFuCiAgICAgKiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiBwaHByZWRpcyBpcyBzZXJpYWxpemluZyB2YWx1ZXMsIGFuZCB5b3UgcmV0dXJuIHNvbWV0aGluZyBmcm9tCiAgICAgKiByZWRpcyBpbiBhIExVQSBzY3JpcHQgdGhhdCBpcyBzZXJpYWxpemVkLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZyAkdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHVuc2VyaWFsaXplZAogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+c2V0T3B0aW9uKFJlZGlzQ2x1c3Rlcjo6T1BUX1NFUklBTElaRVIsIFJlZGlzQ2x1c3Rlcjo6U0VSSUFMSVpFUl9QSFApOwogICAgICogJHJlZGlzQ2x1c3Rlci0+X3Vuc2VyaWFsaXplKCdhOjM6e2k6MDtpOjE7aToxO2k6MjtpOjI7aTozO30nKTsgLy8gV2lsbCByZXR1cm4gQXJyYXkoMSwyLDMpCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF91bnNlcmlhbGl6ZSgkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYWxsIHJlZGlzIG1hc3RlciBub2RlcwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+X21hc3RlcnMoKTsgLy8gV2lsbCByZXR1cm4gW1swPT4nMTI3LjAuMC4xJywnNjM3OSddLFswPT4nMTI3LjAuMC4xJywnNjM4MCddXQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfbWFzdGVycygpIHt9CgogICAgLyoqCiAgICAgKiBFbnRlciBhbmQgZXhpdCB0cmFuc2FjdGlvbmFsIG1vZGUuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbW9kZSBSZWRpc0NsdXN0ZXI6Ok1VTFRJfFJlZGlzQ2x1c3Rlcjo6UElQRUxJTkUKICAgICAqICAgICAgICAgICAgRGVmYXVsdHMgdG8gUmVkaXNDbHVzdGVyOjpNVUxUSS4KICAgICAqICAgICAgICAgICAgQSBSZWRpc0NsdXN0ZXI6Ok1VTFRJIGJsb2NrIG9mIGNvbW1hbmRzIHJ1bnMgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb247CiAgICAgKiAgICAgICAgICAgIGEgUmVkaXNDbHVzdGVyOjpQSVBFTElORSBibG9jayBpcyBzaW1wbHkgdHJhbnNtaXR0ZWQgZmFzdGVyIHRvIHRoZSBzZXJ2ZXIsIGJ1dCB3aXRob3V0IGFueSBndWFyYW50ZWUKICAgICAqICAgICAgICAgICAgb2YgYXRvbWljaXR5LiBkaXNjYXJkIGNhbmNlbHMgYSB0cmFuc2FjdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlZGlzQ2x1c3RlciByZXR1cm5zIHRoZSBSZWRpc0NsdXN0ZXIgaW5zdGFuY2UgYW5kIGVudGVycyBtdWx0aS1tb2RlLgogICAgICogT25jZSBpbiBtdWx0aS1tb2RlLCBhbGwgc3Vic2VxdWVudCBtZXRob2QgY2FsbHMgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB1bnRpbCBleGVjKCkgaXMgY2FsbGVkLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9tdWx0aQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmV0ID0gJHJlZGlzQ2x1c3Rlci0+bXVsdGkoKQogICAgICogICAgICAtPnNldCgna2V5MScsICd2YWwxJykKICAgICAqICAgICAgLT5nZXQoJ2tleTEnKQogICAgICogICAgICAtPnNldCgna2V5MicsICd2YWwyJykKICAgICAqICAgICAgLT5nZXQoJ2tleTInKQogICAgICogICAgICAtPmV4ZWMoKTsKICAgICAqCiAgICAgKiAvLyRyZXQgPT0gYXJyYXkgKAogICAgICogLy8gICAgMCA9PiBUUlVFLAogICAgICogLy8gICAgMSA9PiAndmFsMScsCiAgICAgKiAvLyAgICAyID0+IFRSVUUsCiAgICAgKiAvLyAgICAzID0+ICd2YWwyJyk7CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bHRpKCRtb2RlID0gUmVkaXNDbHVzdGVyOjpNVUxUSSkge30KCiAgICAvKioKICAgICAqIEBzZWUgICAgIG11bHRpKCkKICAgICAqIEByZXR1cm4gdm9pZHxhcnJheQogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9leGVjCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjKCkge30KCiAgICAvKioKICAgICAqIEBzZWUgICAgIG11bHRpKCkKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZGlzY2FyZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzY2FyZCgpIHt9CgogICAgLyoqCiAgICAgKiBXYXRjaGVzIGEga2V5IGZvciBtb2RpZmljYXRpb25zIGJ5IGFub3RoZXIgY2xpZW50LiBJZiB0aGUga2V5IGlzIG1vZGlmaWVkIGJldHdlZW4gV0FUQ0ggYW5kIEVYRUMsCiAgICAgKiB0aGUgTVVMVEkvRVhFQyB0cmFuc2FjdGlvbiB3aWxsIGZhaWwgKHJldHVybiBGQUxTRSkuIHVud2F0Y2ggY2FuY2VscyBhbGwgdGhlIHdhdGNoaW5nIG9mIGFsbCBrZXlzIGJ5IHRoaXMgY2xpZW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJGtleSA6IGEgbGlzdCBvZiBrZXlzCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3dhdGNoCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPndhdGNoKCd4Jyk7CiAgICAgKiAvLyBsb25nIGNvZGUgaGVyZSBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiB3aGljaCBvdGhlciBjbGllbnRzIGNvdWxkIHdlbGwgbW9kaWZ5IGB4YAogICAgICogJHJldCA9ICRyZWRpc0NsdXN0ZXItPm11bHRpKCkKICAgICAqICAgICAgICAgIC0+aW5jcigneCcpCiAgICAgKiAgICAgICAgICAtPmV4ZWMoKTsKICAgICAqIC8vICRyZXQgPSBGQUxTRSBpZiB4IGhhcyBiZWVuIG1vZGlmaWVkIGJldHdlZW4gdGhlIGNhbGwgdG8gV0FUQ0ggYW5kIHRoZSBjYWxsIHRvIEVYRUMuCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdhdGNoKCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlICAgICB3YXRjaCgpCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3Vud2F0Y2gKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVud2F0Y2goKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgYSBzeW5jaHJvbm91cyBzYXZlIGF0IGEgc3BlY2lmaWMgbm9kZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRub2RlUGFyYW1zIGtleSBvciBbaG9zdCxwb3J0XQogICAgICoKICAgICAqIEByZXR1cm4gIGJvb2wgICBUUlVFIGluIGNhc2Ugb2Ygc3VjY2VzcywgRkFMU0UgaW4gY2FzZSBvZiBmYWlsdXJlLgogICAgICogSWYgYSBzYXZlIGlzIGFscmVhZHkgcnVubmluZywgdGhpcyBjb21tYW5kIHdpbGwgZmFpbCBhbmQgcmV0dXJuIEZBTFNFLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zYXZlCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzQ2x1c3Rlci0+c2F2ZSgneCcpOyAvL2tleQogICAgICogJHJlZGlzQ2x1c3Rlci0+c2F2ZShbJzEyNy4wLjAuMScsNjM3OV0pOyAvL1tob3N0LHBvcnRdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzYXZlKCRub2RlUGFyYW1zKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgYSBiYWNrZ3JvdW5kIHNhdmUgYXQgYSBzcGVjaWZpYyBub2RlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJG5vZGVQYXJhbXMga2V5IG9yIFtob3N0LHBvcnRdCiAgICAgKgogICAgICogQHJldHVybiAgYm9vbCAgICBUUlVFIGluIGNhc2Ugb2Ygc3VjY2VzcywgRkFMU0UgaW4gY2FzZSBvZiBmYWlsdXJlLgogICAgICogSWYgYSBzYXZlIGlzIGFscmVhZHkgcnVubmluZywgdGhpcyBjb21tYW5kIHdpbGwgZmFpbCBhbmQgcmV0dXJuIEZBTFNFLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9iZ3NhdmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJnc2F2ZSgkbm9kZVBhcmFtcykge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYWxsIGVudHJpZXMgZnJvbSB0aGUgY3VycmVudCBkYXRhYmFzZSBhdCBhIHNwZWNpZmljIG5vZGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAkbm9kZVBhcmFtcyBrZXkgb3IgW2hvc3QscG9ydF0KICAgICAqCiAgICAgKiBAcmV0dXJuICBib29sIEFsd2F5cyBUUlVFLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9mbHVzaGRiCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmbHVzaERCKCRub2RlUGFyYW1zKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhbGwgZW50cmllcyBmcm9tIGFsbCBkYXRhYmFzZXMgYXQgYSBzcGVjaWZpYyBub2RlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJG5vZGVQYXJhbXMga2V5IG9yIFtob3N0LHBvcnRdCiAgICAgKgogICAgICogQHJldHVybiAgYm9vbCBBbHdheXMgVFJVRS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZmx1c2hhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZsdXNoQWxsKCRub2RlUGFyYW1zKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBkYXRhYmFzZSdzIHNpemUgYXQgYSBzcGVjaWZpYyBub2RlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJG5vZGVQYXJhbXMga2V5IG9yIFtob3N0LHBvcnRdCiAgICAgKgogICAgICogQHJldHVybiBpbnQgICAgIERCIHNpemUsIGluIG51bWJlciBvZiBrZXlzLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9kYnNpemUKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJGNvdW50ID0gJHJlZGlzQ2x1c3Rlci0+ZGJTaXplKCd4Jyk7CiAgICAgKiBlY2hvICJSZWRpcyBoYXMgJGNvdW50IGtleXNcbiI7CiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRiU2l6ZSgkbm9kZVBhcmFtcykge30KCiAgICAvKioKICAgICAqIFN0YXJ0cyB0aGUgYmFja2dyb3VuZCByZXdyaXRlIG9mIEFPRiAoQXBwZW5kLU9ubHkgRmlsZSkgYXQgYSBzcGVjaWZpYyBub2RlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJG5vZGVQYXJhbXMga2V5IG9yIFtob3N0LHBvcnRdCiAgICAgKgogICAgICogQHJldHVybiAgYm9vbCAgIFRSVUUgaW4gY2FzZSBvZiBzdWNjZXNzLCBGQUxTRSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2JncmV3cml0ZWFvZgogICAgICogQGV4YW1wbGUgJHJlZGlzQ2x1c3Rlci0+YmdyZXdyaXRlYW9mKCd4Jyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiZ3Jld3JpdGVhb2YoJG5vZGVQYXJhbXMpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGxhc3QgZGlzayBzYXZlIGF0IGEgc3BlY2lmaWMgbm9kZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRub2RlUGFyYW1zIGtleSBvciBbaG9zdCxwb3J0XQogICAgICoKICAgICAqIEByZXR1cm4gIGludCAgICB0aW1lc3RhbXAuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2xhc3RzYXZlCiAgICAgKiBAZXhhbXBsZSAkcmVkaXNDbHVzdGVyLT5sYXN0U2F2ZSgneCcpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGFzdFNhdmUoJG5vZGVQYXJhbXMpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIHN0cmluZ3MgYW5kIGludGVnZXJzCiAgICAgKgogICAgICogQHBhcmFtICAgc3RyaW5nICRvcHRpb24gT3B0aW9uYWwuIFRoZSBvcHRpb24gdG8gcHJvdmlkZSByZWRpcy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIFNFUlZFUiB8IENMSUVOVFMgfCBNRU1PUlkgfCBQRVJTSVNURU5DRSB8IFNUQVRTIHwgUkVQTElDQVRJT04gfCBDUFUgfCBDTEFTVEVSIHwgS0VZU1BBQ0UKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ09NQU5EU1RBVFMKICAgICAqCiAgICAgKiBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIHN0cmluZ3MgYW5kIGludGVnZXJzLCB3aXRoIHRoZSBmb2xsb3dpbmcga2V5czoKICAgICAqIC0gcmVkaXNfdmVyc2lvbgogICAgICogLSByZWRpc19naXRfc2hhMQogICAgICogLSByZWRpc19naXRfZGlydHkKICAgICAqIC0gcmVkaXNfYnVpbGRfaWQKICAgICAqIC0gcmVkaXNfbW9kZQogICAgICogLSBvcwogICAgICogLSBhcmNoX2JpdHMKICAgICAqIC0gbXVsdGlwbGV4aW5nX2FwaQogICAgICogLSBhdG9taWN2YXJfYXBpCiAgICAgKiAtIGdjY192ZXJzaW9uCiAgICAgKiAtIHByb2Nlc3NfaWQKICAgICAqIC0gcnVuX2lkCiAgICAgKiAtIHRjcF9wb3J0CiAgICAgKiAtIHVwdGltZV9pbl9zZWNvbmRzCiAgICAgKiAtIHVwdGltZV9pbl9kYXlzCiAgICAgKiAtIGh6CiAgICAgKiAtIGxydV9jbG9jawogICAgICogLSBleGVjdXRhYmxlCiAgICAgKiAtIGNvbmZpZ19maWxlCiAgICAgKiAtIGNvbm5lY3RlZF9jbGllbnRzCiAgICAgKiAtIGNsaWVudF9sb25nZXN0X291dHB1dF9saXN0CiAgICAgKiAtIGNsaWVudF9iaWdnZXN0X2lucHV0X2J1ZgogICAgICogLSBibG9ja2VkX2NsaWVudHMKICAgICAqIC0gdXNlZF9tZW1vcnkKICAgICAqIC0gdXNlZF9tZW1vcnlfaHVtYW4KICAgICAqIC0gdXNlZF9tZW1vcnlfcnNzCiAgICAgKiAtIHVzZWRfbWVtb3J5X3Jzc19odW1hbgogICAgICogLSB1c2VkX21lbW9yeV9wZWFrCiAgICAgKiAtIHVzZWRfbWVtb3J5X3BlYWtfaHVtYW4KICAgICAqIC0gdXNlZF9tZW1vcnlfcGVha19wZXJjCiAgICAgKiAtIHVzZWRfbWVtb3J5X3BlYWsKICAgICAqIC0gdXNlZF9tZW1vcnlfb3ZlcmhlYWQKICAgICAqIC0gdXNlZF9tZW1vcnlfc3RhcnR1cAogICAgICogLSB1c2VkX21lbW9yeV9kYXRhc2V0CiAgICAgKiAtIHVzZWRfbWVtb3J5X2RhdGFzZXRfcGVyYwogICAgICogLSB0b3RhbF9zeXN0ZW1fbWVtb3J5CiAgICAgKiAtIHRvdGFsX3N5c3RlbV9tZW1vcnlfaHVtYW4KICAgICAqIC0gdXNlZF9tZW1vcnlfbHVhCiAgICAgKiAtIHVzZWRfbWVtb3J5X2x1YV9odW1hbgogICAgICogLSBtYXhtZW1vcnkKICAgICAqIC0gbWF4bWVtb3J5X2h1bWFuCiAgICAgKiAtIG1heG1lbW9yeV9wb2xpY3kKICAgICAqIC0gbWVtX2ZyYWdtZW50YXRpb25fcmF0aW8KICAgICAqIC0gbWVtX2FsbG9jYXRvcgogICAgICogLSBhY3RpdmVfZGVmcmFnX3J1bm5pbmcKICAgICAqIC0gbGF6eWZyZWVfcGVuZGluZ19vYmplY3RzCiAgICAgKiAtIG1lbV9mcmFnbWVudGF0aW9uX3JhdGlvCiAgICAgKiAtIGxvYWRpbmcKICAgICAqIC0gcmRiX2NoYW5nZXNfc2luY2VfbGFzdF9zYXZlCiAgICAgKiAtIHJkYl9iZ3NhdmVfaW5fcHJvZ3Jlc3MKICAgICAqIC0gcmRiX2xhc3Rfc2F2ZV90aW1lCiAgICAgKiAtIHJkYl9sYXN0X2Jnc2F2ZV9zdGF0dXMKICAgICAqIC0gcmRiX2xhc3RfYmdzYXZlX3RpbWVfc2VjCiAgICAgKiAtIHJkYl9jdXJyZW50X2Jnc2F2ZV90aW1lX3NlYwogICAgICogLSByZGJfbGFzdF9jb3dfc2l6ZQogICAgICogLSBhb2ZfZW5hYmxlZAogICAgICogLSBhb2ZfcmV3cml0ZV9pbl9wcm9ncmVzcwogICAgICogLSBhb2ZfcmV3cml0ZV9zY2hlZHVsZWQKICAgICAqIC0gYW9mX2xhc3RfcmV3cml0ZV90aW1lX3NlYwogICAgICogLSBhb2ZfY3VycmVudF9yZXdyaXRlX3RpbWVfc2VjCiAgICAgKiAtIGFvZl9sYXN0X2JncmV3cml0ZV9zdGF0dXMKICAgICAqIC0gYW9mX2xhc3Rfd3JpdGVfc3RhdHVzCiAgICAgKiAtIGFvZl9sYXN0X2Nvd19zaXplCiAgICAgKiAtIGNoYW5nZXNfc2luY2VfbGFzdF9zYXZlCiAgICAgKiAtIGFvZl9jdXJyZW50X3NpemUKICAgICAqIC0gYW9mX2Jhc2Vfc2l6ZQogICAgICogLSBhb2ZfcGVuZGluZ19yZXdyaXRlCiAgICAgKiAtIGFvZl9idWZmZXJfbGVuZ3RoCiAgICAgKiAtIGFvZl9yZXdyaXRlX2J1ZmZlcl9sZW5ndGgKICAgICAqIC0gYW9mX3BlbmRpbmdfYmlvX2ZzeW5jCiAgICAgKiAtIGFvZl9kZWxheWVkX2ZzeW5jCiAgICAgKiAtIGxvYWRpbmdfc3RhcnRfdGltZQogICAgICogLSBsb2FkaW5nX3RvdGFsX2J5dGVzCiAgICAgKiAtIGxvYWRpbmdfbG9hZGVkX2J5dGVzCiAgICAgKiAtIGxvYWRpbmdfbG9hZGVkX3BlcmMKICAgICAqIC0gbG9hZGluZ19ldGFfc2Vjb25kcwogICAgICogLSB0b3RhbF9jb25uZWN0aW9uc19yZWNlaXZlZAogICAgICogLSB0b3RhbF9jb21tYW5kc19wcm9jZXNzZWQKICAgICAqIC0gaW5zdGFudGFuZW91c19vcHNfcGVyX3NlYwogICAgICogLSB0b3RhbF9uZXRfaW5wdXRfYnl0ZXMKICAgICAqIC0gdG90YWxfbmV0X291dHB1dF9ieXRlcwogICAgICogLSBpbnN0YW50YW5lb3VzX2lucHV0X2ticHMKICAgICAqIC0gaW5zdGFudGFuZW91c19vdXRwdXRfa2JwcwogICAgICogLSByZWplY3RlZF9jb25uZWN0aW9ucwogICAgICogLSBtYXhjbGllbnRzCiAgICAgKiAtIHN5bmNfZnVsbAogICAgICogLSBzeW5jX3BhcnRpYWxfb2sKICAgICAqIC0gc3luY19wYXJ0aWFsX2VycgogICAgICogLSBleHBpcmVkX2tleXMKICAgICAqIC0gZXZpY3RlZF9rZXlzCiAgICAgKiAtIGtleXNwYWNlX2hpdHMKICAgICAqIC0ga2V5c3BhY2VfbWlzc2VzCiAgICAgKiAtIHB1YnN1Yl9jaGFubmVscwogICAgICogLSBwdWJzdWJfcGF0dGVybnMKICAgICAqIC0gbGF0ZXN0X2ZvcmtfdXNlYwogICAgICogLSBtaWdyYXRlX2NhY2hlZF9zb2NrZXRzCiAgICAgKiAtIHNsYXZlX2V4cGlyZXNfdHJhY2tlZF9rZXlzCiAgICAgKiAtIGFjdGl2ZV9kZWZyYWdfaGl0cwogICAgICogLSBhY3RpdmVfZGVmcmFnX21pc3NlcwogICAgICogLSBhY3RpdmVfZGVmcmFnX2tleV9oaXRzCiAgICAgKiAtIGFjdGl2ZV9kZWZyYWdfa2V5X21pc3NlcwogICAgICogLSByb2xlCiAgICAgKiAtIG1hc3Rlcl9yZXBsaWQKICAgICAqIC0gbWFzdGVyX3JlcGxpZDIKICAgICAqIC0gbWFzdGVyX3JlcGxfb2Zmc2V0CiAgICAgKiAtIHNlY29uZF9yZXBsX29mZnNldAogICAgICogLSByZXBsX2JhY2tsb2dfYWN0aXZlCiAgICAgKiAtIHJlcGxfYmFja2xvZ19zaXplCiAgICAgKiAtIHJlcGxfYmFja2xvZ19maXJzdF9ieXRlX29mZnNldAogICAgICogLSByZXBsX2JhY2tsb2dfaGlzdGxlbgogICAgICogLSBtYXN0ZXJfaG9zdAogICAgICogLSBtYXN0ZXJfcG9ydAogICAgICogLSBtYXN0ZXJfbGlua19zdGF0dXMKICAgICAqIC0gbWFzdGVyX2xhc3RfaW9fc2Vjb25kc19hZ28KICAgICAqIC0gbWFzdGVyX3N5bmNfaW5fcHJvZ3Jlc3MKICAgICAqIC0gc2xhdmVfcmVwbF9vZmZzZXQKICAgICAqIC0gc2xhdmVfcHJpb3JpdHkKICAgICAqIC0gc2xhdmVfcmVhZF9vbmx5CiAgICAgKiAtIG1hc3Rlcl9zeW5jX2xlZnRfYnl0ZXMKICAgICAqIC0gbWFzdGVyX3N5bmNfbGFzdF9pb19zZWNvbmRzX2FnbwogICAgICogLSBtYXN0ZXJfbGlua19kb3duX3NpbmNlX3NlY29uZHMKICAgICAqIC0gY29ubmVjdGVkX3NsYXZlcwogICAgICogLSBtaW4tc2xhdmVzLXRvLXdyaXRlCiAgICAgKiAtIG1pbi1yZXBsaWNhcy10by13cml0ZQogICAgICogLSBtaW5fc2xhdmVzX2dvb2Rfc2xhdmVzCiAgICAgKiAtIHVzZWRfY3B1X3N5cwogICAgICogLSB1c2VkX2NwdV91c2VyCiAgICAgKiAtIHVzZWRfY3B1X3N5c19jaGlsZHJlbgogICAgICogLSB1c2VkX2NwdV91c2VyX2NoaWxkcmVuCiAgICAgKiAtIGNsdXN0ZXJfZW5hYmxlZAogICAgICoKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaW5mbwogICAgICogQHJldHVybiAgYXJyYXkKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+aW5mbygpOwogICAgICoKICAgICAqIG9yCiAgICAgKgogICAgICogJHJlZGlzQ2x1c3Rlci0+aW5mbygiQ09NTUFORFNUQVRTIik7IC8vSW5mb3JtYXRpb24gb24gdGhlIGNvbW1hbmRzIHRoYXQgaGF2ZSBiZWVuIHJ1biAoPj0yLjYgb25seSkKICAgICAqICRyZWRpc0NsdXN0ZXItPmluZm8oIkNQVSIpOyAvLyBqdXN0IENQVSBpbmZvcm1hdGlvbiBmcm9tIFJlZGlzIElORk8KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5mbygkb3B0aW9uID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBzaW5jZSAgcmVkaXMgPj0gMi44LjEyLgogICAgICogIFJldHVybnMgdGhlIHJvbGUgb2YgdGhlIGluc3RhbmNlIGluIHRoZSBjb250ZXh0IG9mIHJlcGxpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAkbm9kZVBhcmFtcyBrZXkgb3IgW2hvc3QscG9ydF0KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKiBAbGluayAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvcm9sZQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5yb2xlKFsnMTI3LjAuMC4xJyw2Mzc5XSk7CiAgICAgKiAvLyBbIDA9PidtYXN0ZXInLDEgPT4gMzEyOTY1OSwgMiA9PiBbIFsnMTI3LjAuMC4xJywnOTAwMScsJzMxMjkyNDInXSwgWycxMjcuMC4wLjEnLCc5MDAyJywnMzEyOTU0MyddIF0gXQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb2xlKCRub2RlUGFyYW1zKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHJhbmRvbSBrZXkgYXQgdGhlIHNwZWNpZmllZCBub2RlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAkbm9kZVBhcmFtcyBrZXkgb3IgW2hvc3QscG9ydF0KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBhbiBleGlzdGluZyBrZXkgaW4gcmVkaXMuCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3JhbmRvbWtleQogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAka2V5ID0gJHJlZGlzQ2x1c3Rlci0+cmFuZG9tS2V5KCd4Jyk7CiAgICAgKiAkc3VycHJpc2UgPSAkcmVkaXNDbHVzdGVyLT5nZXQoJGtleSk7ICAvLyB3aG8ga25vd3Mgd2hhdCdzIGluIHRoZXJlLgogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByYW5kb21LZXkoJG5vZGVQYXJhbXMpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHNwZWNpZmllZCBub2RlIHNlcnZlciB0aW1lLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJG5vZGVQYXJhbXMga2V5IG9yIFtob3N0LHBvcnRdCiAgICAgKgogICAgICogQHJldHVybiAgYXJyYXkgSWYgc3VjY2Vzc2Z1bGx5LCB0aGUgdGltZSB3aWxsIGNvbWUgYmFjayBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIGVsZW1lbnQgemVybyBiZWluZyB0aGUKICAgICAqIHVuaXggdGltZXN0YW1wLCBhbmQgZWxlbWVudCBvbmUgYmVpbmcgbWljcm9zZWNvbmRzLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy90aW1lCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqIHZhcl9kdW1wKCAkcmVkaXNDbHVzdGVyLT50aW1lKCd4JykgKTsKICAgICAqIC8vLy8gT3V0cHV0OgogICAgICogLy8KICAgICAqIC8vIGFycmF5KDIpIHsKICAgICAqIC8vICAgWzBdID0+IHN0cmluZygxMCkgIjEzNDIzNjQzNTIiCiAgICAgKiAvLyAgIFsxXSA9PiBzdHJpbmcoNikgIjI1MzAwMiIKICAgICAqIC8vIH0KICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGltZSgkbm9kZVBhcmFtcykge30KCiAgICAvKioKICAgICAqIENoZWNrIHRoZSBzcGVjaWZpZWQgbm9kZSBzdGF0dXMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRub2RlUGFyYW1zIGtleSBvciBbaG9zdCxwb3J0XQogICAgICoKICAgICAqIEByZXR1cm4gIHN0cmluZyBTVFJJTkc6ICtQT05HIG9uIHN1Y2Nlc3MuIFRocm93cyBhIFJlZGlzQ2x1c3RlckV4Y2VwdGlvbiBvYmplY3Qgb24gY29ubmVjdGl2aXR5IGVycm9yLCBhcyBkZXNjcmliZWQKICAgICAqICAgICAgICAgICAgICAgICBhYm92ZS4KICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvcGluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGluZygkbm9kZVBhcmFtcykge30KCiAgICAvKioKICAgICAqIFJldHVybnMgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRub2RlUGFyYW1zIGtleSBvciBbaG9zdCxwb3J0XQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgJG1zZwogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVjaG8oJG5vZGVQYXJhbXMsICRtc2cpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIEFycmF5IHJlcGx5IG9mIGRldGFpbHMgYWJvdXQgYWxsIFJlZGlzIENsdXN0ZXIgY29tbWFuZHMuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBhcnJheSB8IGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbW1hbmQoKSB7fQoKICAgIC8qKgogICAgICogU2VuZCBhcmJpdHJhcnkgdGhpbmdzIHRvIHRoZSByZWRpcyBzZXJ2ZXIgYXQgdGhlIHNwZWNpZmllZCBub2RlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAkbm9kZVBhcmFtcyBrZXkgb3IgW2hvc3QscG9ydF0KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgJGNvbW1hbmQgICAgUmVxdWlyZWQgY29tbWFuZCB0byBzZW5kIHRvIHRoZSBzZXJ2ZXIuCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgICAgICRhcmd1bWVudHMgIE9wdGlvbmFsIHZhcmlhYmxlIGFtb3VudCBvZiBhcmd1bWVudHMgdG8gc2VuZCB0byB0aGUgc2VydmVyLgogICAgICoKICAgICAqIEByZXR1cm4gIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByYXdDb21tYW5kKCRub2RlUGFyYW1zLCAkY29tbWFuZCwgJGFyZ3VtZW50cykge30KCiAgICAvKioKICAgICAqIEBzaW5jZSByZWRpcyA+PSAzLjAKICAgICAqIEV4ZWN1dGVzIGNsdXN0ZXIgY29tbWFuZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJG5vZGVQYXJhbXMga2V5IG9yIFtob3N0LHBvcnRdCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICRjb21tYW5kICAgIFJlcXVpcmVkIGNvbW1hbmQgdG8gc2VuZCB0byB0aGUgc2VydmVyLgogICAgICogQHBhcmFtIG1peGVkICAgICAgICAkYXJndW1lbnRzICBPcHRpb25hbCB2YXJpYWJsZSBhbW91bnQgb2YgYXJndW1lbnRzIHRvIHNlbmQgdG8gdGhlIHNlcnZlci4KICAgICAqCiAgICAgKiBAcmV0dXJuICBtaXhlZAogICAgICogQGxpbmsgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMjY2x1c3RlcgogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5jbHVzdGVyKFsnMTI3LjAuMC4xJyw2Mzc5XSwnSU5GTycpOwogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbHVzdGVyKCRub2RlUGFyYW1zLCAkY29tbWFuZCwgJGFyZ3VtZW50cykge30KCiAgICAvKioKICAgICAqIEFsbG93cyB5b3UgdG8gZ2V0IGluZm9ybWF0aW9uIG9mIHRoZSBjbHVzdGVyIGNsaWVudAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJG5vZGVQYXJhbXMga2V5IG9yIFtob3N0LHBvcnRdCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICRzdWJDbWQgICAgIGNhbiBiZTogJ0xJU1QnLCAnS0lMTCcsICdHRVROQU1FJywgb3IgJ1NFVE5BTUUnCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICRhcmdzICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xpZW50KCRub2RlUGFyYW1zLCAkc3ViQ21kLCAkYXJncykge30KCiAgICAvKioKICAgICAqIEdldCBvciBTZXQgdGhlIHJlZGlzIGNvbmZpZyBrZXlzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJG5vZGVQYXJhbXMga2V5IG9yIFtob3N0LHBvcnRdCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICRvcGVyYXRpb24gIGVpdGhlciBgR0VUYCBvciBgU0VUYAogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAka2V5ICAgICAgICBmb3IgYFNFVGAsIGdsb2ItcGF0dGVybiBmb3IgYEdFVGAuIFNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2NvbmZpZy1nZXQgZm9yIGV4YW1wbGVzLgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAkdmFsdWUgICAgICBvcHRpb25hbCBzdHJpbmcgKG9ubHkgZm9yIGBTRVRgKQogICAgICoKICAgICAqIEByZXR1cm4gIGFycmF5ICAgQXNzb2NpYXRpdmUgYXJyYXkgZm9yIGBHRVRgLCBrZXkgLT4gdmFsdWUKICAgICAqIEBsaW5rICAgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvY29uZmlnLWdldAogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9jb25maWctc2V0CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmNvbmZpZyhbJzEyNy4wLjAuMScsNjM3OV0sICJHRVQiLCAiKm1heC0qLWVudHJpZXMqIik7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5jb25maWcoWycxMjcuMC4wLjEnLDYzNzldLCAiU0VUIiwgImRpciIsICIvdmFyL3J1bi9yZWRpcy9kdW1wcy8iKTsKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29uZmlnKCRub2RlUGFyYW1zLCAkb3BlcmF0aW9uLCAka2V5LCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBBIGNvbW1hbmQgYWxsb3dpbmcgeW91IHRvIGdldCBpbmZvcm1hdGlvbiBvbiB0aGUgUmVkaXMgcHViL3N1YiBzeXN0ZW0uCiAgICAgKgogICAgICogQHBhcmFtICAgIHN0cmluZ3xhcnJheSAkbm9kZVBhcmFtcyBrZXkgb3IgW2hvc3QscG9ydF0KICAgICAqCiAgICAgKiBAcGFyYW0gICAgc3RyaW5nICAgICAgICRrZXl3b3JkICAgIFN0cmluZywgd2hpY2ggY2FuIGJlOiAiY2hhbm5lbHMiLCAibnVtc3ViIiwgb3IgIm51bXBhdCIKICAgICAqIEBwYXJhbSAgICBzdHJpbmd8YXJyYXkgJGFyZ3VtZW50ICAgT3B0aW9uYWwsIHZhcmlhbnQuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciB0aGUgImNoYW5uZWxzIiBzdWJjb21tYW5kLCB5b3UgY2FuIHBhc3MgYSBzdHJpbmcgcGF0dGVybi4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yICJudW1zdWIiIGFuIGFycmF5IG9mIGNoYW5uZWwgbmFtZXMKICAgICAqCiAgICAgKiBAcmV0dXJuICAgIGFycmF5fGludCAgICAgICAgICAgICAgIEVpdGhlciBhbiBpbnRlZ2VyIG9yIGFuIGFycmF5LgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gY2hhbm5lbHMgIFJldHVybnMgYW4gYXJyYXkgd2hlcmUgdGhlIG1lbWJlcnMgYXJlIHRoZSBtYXRjaGluZyBjaGFubmVscy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIG51bXN1YiAgICBSZXR1cm5zIGEga2V5L3ZhbHVlIGFycmF5IHdoZXJlIHRoZSBrZXlzIGFyZSBjaGFubmVsIG5hbWVzIGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgdGhlaXIgY291bnRzLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gbnVtcGF0ICAgIEludGVnZXIgcmV0dXJuIGNvbnRhaW5pbmcgdGhlIG51bWJlciBhY3RpdmUgcGF0dGVybiBzdWJzY3JpcHRpb25zLgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9wdWJzdWIKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+cHVic3ViKFsnMTI3LjAuMC4xJyw2Mzc5XSwgJ2NoYW5uZWxzJyk7IC8vIEFsbCBjaGFubmVscwogICAgICogJHJlZGlzQ2x1c3Rlci0+cHVic3ViKFsnMTI3LjAuMC4xJyw2Mzc5XSwgJ2NoYW5uZWxzJywgJypwYXR0ZXJuKicpOyAvLyBKdXN0IGNoYW5uZWxzIG1hdGNoaW5nIHlvdXIgcGF0dGVybgogICAgICogJHJlZGlzQ2x1c3Rlci0+cHVic3ViKFsnMTI3LjAuMC4xJyw2Mzc5XSwgJ251bXN1YicsIGFycmF5KCdjaGFuMScsICdjaGFuMicpKTsgLy8gR2V0IHN1YnNjcmliZXIgY291bnRzIGZvcgogICAgICogJ2NoYW4xJyBhbmQgJ2NoYW4yJwogICAgICogJHJlZGlzQ2x1c3Rlci0+cHVic3ViKFsnMTI3LjAuMC4xJyw2Mzc5XSwgJ251bXBhdCcpOyAvLyBHZXQgdGhlIG51bWJlciBvZiBwYXR0ZXJuIHN1YnNjcmliZXJzCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1YnN1Yigkbm9kZVBhcmFtcywgJGtleXdvcmQsICRhcmd1bWVudCkge30KCiAgICAvKioKICAgICAqIEV4ZWN1dGUgdGhlIFJlZGlzIFNDUklQVCBjb21tYW5kIHRvIHBlcmZvcm0gdmFyaW91cyBvcGVyYXRpb25zIG9uIHRoZSBzY3JpcHRpbmcgc3Vic3lzdGVtLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZ3xhcnJheSAkbm9kZVBhcmFtcyBrZXkgb3IgW2hvc3QscG9ydF0KICAgICAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAkY29tbWFuZCAgICBsb2FkIHwgZmx1c2ggfCBraWxsIHwgZXhpc3RzCiAgICAgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgJHNjcmlwdAogICAgICoKICAgICAqIEByZXR1cm4gIG1peGVkCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NjcmlwdC1sb2FkCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NjcmlwdC1raWxsCiAgICAgKiBAbGluayAgICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NjcmlwdC1mbHVzaAogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zY3JpcHQtZXhpc3RzCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPnNjcmlwdChbJzEyNy4wLjAuMScsNjM3OV0sICdsb2FkJywgJHNjcmlwdCk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zY3JpcHQoWycxMjcuMC4wLjEnLDYzNzldLCAnZmx1c2gnKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPnNjcmlwdChbJzEyNy4wLjAuMScsNjM3OV0sICdraWxsJyk7CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5zY3JpcHQoWycxMjcuMC4wLjEnLDYzNzldLCAnZXhpc3RzJywgJHNjcmlwdDEsIFskc2NyaXB0MiwgJHNjcmlwdDMsIC4uLl0pOwogICAgICogPC9wcmU+CiAgICAgKgogICAgICogU0NSSVBUIExPQUQgd2lsbCByZXR1cm4gdGhlIFNIQTEgaGFzaCBvZiB0aGUgcGFzc2VkIHNjcmlwdCBvbiBzdWNjZXNzLCBhbmQgRkFMU0Ugb24gZmFpbHVyZS4KICAgICAqIFNDUklQVCBGTFVTSCBzaG91bGQgYWx3YXlzIHJldHVybiBUUlVFCiAgICAgKiBTQ1JJUFQgS0lMTCB3aWxsIHJldHVybiB0cnVlIGlmIGEgc2NyaXB0IHdhcyBhYmxlIHRvIGJlIGtpbGxlZCBhbmQgZmFsc2UgaWYgbm90CiAgICAgKiBTQ1JJUFQgRVhJU1RTIHdpbGwgcmV0dXJuIGFuIGFycmF5IHdpdGggVFJVRSBvciBGQUxTRSBmb3IgZWFjaCBwYXNzZWQgc2NyaXB0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzY3JpcHQoJG5vZGVQYXJhbXMsICRjb21tYW5kLCAkc2NyaXB0KSB7fQoKICAgIC8qKgogICAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIG9yZGVyIHRvIHJlYWQgYW5kIHJlc2V0IHRoZSBSZWRpcyBzbG93IHF1ZXJpZXMgbG9nLgogICAgICoKICAgICAqIEBwYXJhbSAgIHN0cmluZ3xhcnJheSAkbm9kZVBhcmFtcyBrZXkgb3IgW2hvc3QscG9ydF0KICAgICAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAkY29tbWFuZAogICAgICogQHBhcmFtICAgbWl4ZWQgICAgICAgICRhcmd1bWVudAogICAgICoKICAgICAqIEBsaW5rICBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3Nsb3dsb2cKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+c2xvd0xvZyhbJzEyNy4wLjAuMScsNjM3OV0sJ2dldCcsJzInKTsKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2xvd0xvZygkbm9kZVBhcmFtcywgJGNvbW1hbmQsICRhcmd1bWVudCkge30KCiAgICAvKioKICAgICAqIEFkZCBvbmUgb3IgbW9yZSBnZW9zcGF0aWFsIGl0ZW1zIGluIHRoZSBnZW9zcGF0aWFsIGluZGV4IHJlcHJlc2VudGVkIHVzaW5nIGEgc29ydGVkIHNldAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIGZsb2F0ICAkbG9uZ2l0dWRlCiAgICAgKiBAcGFyYW0gZmxvYXQgICRsYXRpdHVkZQogICAgICogQHBhcmFtIHN0cmluZyAkbWVtYmVyCiAgICAgKgogICAgICogQGxpbmsgIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZ2VvYWRkCiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpc0NsdXN0ZXItPmdlb0FkZCgnU2ljaWx5JywgMTMuMzYxMzg5LCAzOC4xMTU1NTYsICdQYWxlcm1vJyk7IC8vIGludCgxKQogICAgICogJHJlZGlzQ2x1c3Rlci0+Z2VvQWRkKCdTaWNpbHknLCAxNS4wODcyNjksIDM3LjUwMjY2OSwgIkNhdGFuaWEiKTsgLy8gaW50KDEpCiAgICAgKiA8L3ByZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlb0FkZCgka2V5LCAkbG9uZ2l0dWRlLCAkbGF0aXR1ZGUsICRtZW1iZXIpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIG1lbWJlcnMgb2YgYSBnZW9zcGF0aWFsIGluZGV4IGFzIHN0YW5kYXJkIGdlb2hhc2ggc3RyaW5ncwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIHN0cmluZyAkbWVtYmVyMQogICAgICogQHBhcmFtIHN0cmluZyAkbWVtYmVyMgogICAgICogQHBhcmFtIHN0cmluZyAkbWVtYmVyTgogICAgICoKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+Z2VvQWRkKCdTaWNpbHknLCAxMy4zNjEzODksIDM4LjExNTU1NiwgJ1BhbGVybW8nKTsgLy8gaW50KDEpCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5nZW9BZGQoJ1NpY2lseScsIDE1LjA4NzI2OSwgMzcuNTAyNjY5LCAiQ2F0YW5pYSIpOyAvLyBpbnQoMSkKICAgICAqICRyZWRpc0NsdXN0ZXItPmdlb2hhc2goJ1NpY2lseScsJ1BhbGVybW8nLCdDYXRhbmlhJyk7Ly9bJ3NxYzhiNDlybnkwJywnc3FkdHI3NGh5dTAnXQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW9oYXNoKCRrZXksICRtZW1iZXIxLCAkbWVtYmVyMiA9IG51bGwsICRtZW1iZXJOID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBvZiBtZW1iZXJzIG9mIGEgZ2Vvc3BhdGlhbCBpbmRleAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIHN0cmluZyAkbWVtYmVyMQogICAgICogQHBhcmFtIHN0cmluZyAkbWVtYmVyMgogICAgICogQHBhcmFtIHN0cmluZyAkbWVtYmVyTgogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5nZW9BZGQoJ1NpY2lseScsIDE1LjA4NzI2OSwgMzcuNTAyNjY5LCAiQ2F0YW5pYSIpOyAvLyBpbnQoMSkKICAgICAqICRyZWRpc0NsdXN0ZXItPmdlb3BvcygnU2ljaWx5JywnUGFsZXJtbycpOy8vW1snMTMuMzYxMzg5MzM4OTcwMTg0MzMnLCczOC4xMTU1NTYzOTU0OTYyOTg1OSddXQogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW9wb3MoJGtleSwgJG1lbWJlcjEsICRtZW1iZXIyID0gbnVsbCwgJG1lbWJlck4gPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gbWVtYmVycyBvZiBhIGdlb3NwYXRpYWwgaW5kZXgKICAgICAqCiAgICAgKiBAcGFyYW0gICAgc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSAgICBzdHJpbmcgJG1lbWJlcjEKICAgICAqIEBwYXJhbSAgICBzdHJpbmcgJG1lbWJlcjIKICAgICAqIEBwYXJhbSAgICBzdHJpbmcgJHVuaXQgVGhlIHVuaXQgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZywgYW5kIGRlZmF1bHRzIHRvIG1ldGVyczoKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbSBmb3IgbWV0ZXJzLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICBrbSBmb3Iga2lsb21ldGVycy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbWkgZm9yIG1pbGVzLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICBmdCBmb3IgZmVldC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2dlb2FkZAogICAgICogQGV4YW1wbGUKICAgICAqIDxwcmU+CiAgICAgKiAkcmVkaXNDbHVzdGVyLT5nZW9BZGQoJ1NpY2lseScsIDEzLjM2MTM4OSwgMzguMTE1NTU2LCAnUGFsZXJtbycpOyAvLyBpbnQoMSkKICAgICAqICRyZWRpc0NsdXN0ZXItPmdlb0FkZCgnU2ljaWx5JywgMTUuMDg3MjY5LCAzNy41MDI2NjksICJDYXRhbmlhIik7IC8vIGludCgxKQogICAgICogJHJlZGlzQ2x1c3Rlci0+Z2VvRGlzdCgnU2ljaWx5JywgJ1BhbGVybW8nICwnQ2F0YW5pYScpOyAvLyBmbG9hdCgxNjYyNzQuMTUxNikKICAgICAqICRyZWRpc0NsdXN0ZXItPmdlb0Rpc3QoJ1NpY2lseScsICdQYWxlcm1vJywnQ2F0YW5pYScsICdrbScpOyAvLyBmbG9hdCgxNjYuMjc0MikKICAgICAqIDwvcHJlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VvRGlzdCgka2V5LCAkbWVtYmVyMSwgJG1lbWJlcjIsICR1bml0ID0gJ20nKSB7fQoKICAgIC8qKgogICAgICogUXVlcnkgYSBzb3J0ZWQgc2V0IHJlcHJlc2VudGluZyBhIGdlb3NwYXRpYWwgaW5kZXggdG8gZmV0Y2ggbWVtYmVycyBtYXRjaGluZyBhIGdpdmVuIG1heGltdW0gZGlzdGFuY2UgZnJvbSBhIHBvaW50CiAgICAgKgogICAgICogQHBhcmFtICAgIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gICAgZmxvYXQgICRsb25naXR1ZGUKICAgICAqIEBwYXJhbSAgICBmbG9hdCAgJGxhdGl0dWRlCiAgICAgKiBAcGFyYW0gICAgZmxvYXQgICRyYWRpdXMKICAgICAqIEBwYXJhbSAgICBzdHJpbmcgJHJhZGl1c1VuaXQgU3RyaW5nIGNhbiBiZTogIm0iIGZvciBtZXRlcnM7ICJrbSIgZm9yIGtpbG9tZXRlcnMgLCAibWkiIGZvciBtaWxlcywgb3IgImZ0IiBmb3IgZmVldC4KICAgICAqIEBwYXJhbSAgICBhcnJheSAgJG9wdGlvbnMKICAgICAqCiAgICAgKiBAbGluayAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9nZW9yYWRpdXMKICAgICAqIEBleGFtcGxlCiAgICAgKiA8cHJlPgogICAgICogJHJlZGlzQ2x1c3Rlci0+ZGVsKCdTaWNpbHknKTsKICAgICAqICRyZWRpc0NsdXN0ZXItPmdlb0FkZCgnU2ljaWx5JywgMTIuMzYxMzg5LCAzNS4xMTU1NTYsICdQYWxlcm1vJyk7IC8vIGludCgxKQogICAgICogJHJlZGlzQ2x1c3Rlci0+Z2VvQWRkKCdTaWNpbHknLCAxNS4wODcyNjksIDM3LjUwMjY2OSwgIkNhdGFuaWEiKTsgLy8gaW50KDEpCiAgICAgKiAkcmVkaXNDbHVzdGVyLT5nZW9BZGQoJ1NpY2lseScsIDEzLjM1ODUsIDM1LjMzMDAyMiwgIkFncmlnZW50byIpOyAvLyBpbnQoMSkKICAgICAqCiAgICAgKiB2YXJfZHVtcCggJHJlZGlzQ2x1c3Rlci0+Z2VvUmFkaXVzKCdTaWNpbHknLDEzLjM1ODUsIDM1LjMzMDAyMiwgMzAwLCAna20nLCBbJ1dJVEhESVNUJyAsJ0RFU0MnXSkgKTsKICAgICAqCiAgICAgKiBhcnJheSgzKSB7CiAgICAgKiAgICBbMF09PgogICAgICogICBhcnJheSgyKSB7CiAgICAgKiAgICAgICAgWzBdPT4KICAgICAqICAgICBzdHJpbmcoNykgIkNhdGFuaWEiCiAgICAgKiAgICAgICAgWzFdPT4KICAgICAqICAgICBzdHJpbmcoOCkgIjI4Ni45MzYyIgogICAgICogICB9CiAgICAgKiAgIFsxXT0+CiAgICAgKiAgIGFycmF5KDIpIHsKICAgICAqICAgICAgICBbMF09PgogICAgICogICAgIHN0cmluZyg3KSAiUGFsZXJtbyIKICAgICAqICAgICAgICBbMV09PgogICAgICogICAgIHN0cmluZyg3KSAiOTMuNjg3NCIKICAgICAqICAgfQogICAgICogICBbMl09PgogICAgICogICBhcnJheSgyKSB7CiAgICAgKiAgICAgICAgWzBdPT4KICAgICAqICAgICBzdHJpbmcoOSkgIkFncmlnZW50byIKICAgICAqICAgICAgICBbMV09PgogICAgICogICAgIHN0cmluZyg2KSAiMC4wMDAyIgogICAgICogICB9CiAgICAgKiB9CiAgICAgKiB2YXJfZHVtcCggJHJlZGlzQ2x1c3Rlci0+Z2VvUmFkaXVzQnlNZW1iZXIoJ1NpY2lseScsJ0FncmlnZW50bycsIDEwMCwgJ2ttJywgWydXSVRIRElTVCcgLCdERVNDJ10pICk7CiAgICAgKgogICAgICogKiBhcnJheSgyKSB7CiAgICAgKiAgICBbMF09PgogICAgICogICBhcnJheSgyKSB7CiAgICAgKiAgICAgICAgWzBdPT4KICAgICAqICAgICBzdHJpbmcoNykgIlBhbGVybW8iCiAgICAgKiAgICAgICAgWzFdPT4KICAgICAqICAgICBzdHJpbmcoNykgIjkzLjY4NzIiCiAgICAgKiAgIH0KICAgICAqICAgWzFdPT4KICAgICAqICAgYXJyYXkoMikgewogICAgICogICAgICAgIFswXT0+CiAgICAgKiAgICAgc3RyaW5nKDkpICJBZ3JpZ2VudG8iCiAgICAgKiAgICAgICAgWzFdPT4KICAgICAqICAgICBzdHJpbmcoNikgIjAuMDAwMCIKICAgICAqICAgfQogICAgICogfQogICAgICoKICAgICAqIDxwcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW9SYWRpdXMoJGtleSwgJGxvbmdpdHVkZSwgJGxhdGl0dWRlLCAkcmFkaXVzLCAkcmFkaXVzVW5pdCwgYXJyYXkgJG9wdGlvbnMpIHt9CgogICAgLyoqCiAgICAgKiBRdWVyeSBhIHNvcnRlZCBzZXQgcmVwcmVzZW50aW5nIGEgZ2Vvc3BhdGlhbCBpbmRleCB0byBmZXRjaCBtZW1iZXJzIG1hdGNoaW5nIGEgZ2l2ZW4gbWF4aW11bSBkaXN0YW5jZSBmcm9tIGEgbWVtYmVyCiAgICAgKgogICAgICogQHNlZSBnZW9SYWRpdXMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lbWJlcgogICAgICogQHBhcmFtIGZsb2F0ICAkcmFkaXVzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyYWRpdXNVbml0CiAgICAgKiBAcGFyYW0gYXJyYXkgICRvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW9SYWRpdXNCeU1lbWJlcigka2V5LCAkbWVtYmVyLCAkcmFkaXVzLCAkcmFkaXVzVW5pdCwgYXJyYXkgJG9wdGlvbnMpIHt9Cn0KCmNsYXNzIFJlZGlzQ2x1c3RlckV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQo8P3BocAoKLyoqCiAqIEhlbHBlciBhdXRvY29tcGxldGUgZm9yIHBocCByZWRpcyBleHRlbnNpb24KICoKICogQG1peGluIFxSZWRpcwogKgogKiBAbGluayAgIGh0dHBzOi8vZ2l0aHViLmNvbS9waHByZWRpcy9waHByZWRpcy9ibG9iL2RldmVsb3AvcmVkaXNfYXJyYXkuc3R1Yi5waHAKICovCmNsYXNzIFJlZGlzQXJyYXkKewogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJGhvc3RzIE5hbWUgb2YgdGhlIHJlZGlzIGFycmF5IGZyb20gcmVkaXMuaW5pIG9yIGFycmF5IG9mIGhvc3RzIHRvIGNvbnN0cnVjdCB0aGUgYXJyYXkgd2l0aAogICAgICogQHBhcmFtIG51bGx8YXJyYXkgICAgICAkb3B0cyAgQXJyYXkgb2Ygb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nfGFycmF5ICRob3N0cywgP2FycmF5ICRvcHRzID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbHxhcnJheSByZXR1cm5zIGEgbGlzdCBvZiBwb2ludHMgb24gY29udGludXVtOyBtYXkgYmUgdXNlZnVsIHdpdGggY3VzdG9tIGRpc3RyaWJ1dG9yIGZ1bmN0aW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX2NvbnRpbnV1bSgpOiBib29sfGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2x8YXJyYXkgcmV0dXJucyBhIGN1c3RvbSBkaXN0cmlidXRvciBmdW5jdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9kaXN0cmlidXRvcigpOiBib29sfGNhbGxhYmxlIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2x8Y2FsbGFibGUgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gZXh0cmFjdCBrZXkgcGFydHMgZHVyaW5nIGNvbnNpc3RlbnQgaGFzaGluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9mdW5jdGlvbigpOiBib29sfGNhbGxhYmxlIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2x8YXJyYXkgbGlzdCBvZiBob3N0cyBmb3IgdGhlIHNlbGVjdGVkIGFycmF5IG9yIGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfaG9zdHMoKTogYm9vbHxhcnJheSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkaG9zdCBUaGUgaG9zdCB5b3Ugd2FudCB0byByZXRyaWV2ZSB0aGUgaW5zdGFuY2UgZm9yCiAgICAgKgogICAgICogQHJldHVybiBib29sfG51bGx8XFJlZGlzIGEgcmVkaXMgaW5zdGFuY2UgY29ubmVjdGVkIHRvIGEgc3BlY2lmaWMgbm9kZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX2luc3RhbmNlKHN0cmluZyAkaG9zdCk6IGJvb2x8bnVsbHxSZWRpcyB7fQoKICAgIC8qKgogICAgICogVXNlIHRoaXMgZnVuY3Rpb24gd2hlbiBhIG5ldyBub2RlIGlzIGFkZGVkIGFuZCBrZXlzIG5lZWQgdG8gYmUgcmVoYXNoZWQuCiAgICAgKgogICAgICogQHJldHVybiBib29sfG51bGwgcmVoYXNoIHJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX3JlaGFzaChjYWxsYWJsZSAkZm4gPSBudWxsKTogYm9vbHxudWxsIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gbG9va3VwIHRoZSBob3N0CiAgICAgKgogICAgICogQHJldHVybiBib29sfHN0cmluZ3xudWxsIHRoZSBob3N0IHRvIGJlIHVzZWQgZm9yIGEgY2VydGFpbiBrZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF90YXJnZXQoc3RyaW5nICRrZXkpOiBib29sfHN0cmluZ3xudWxsIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRob3N0IEhvc3QKICAgICAqIEBwYXJhbSBpbnQgICAgJG1vZGUgXFJlZGlzOjpNVUxUSXxcUmVkaXM6OlBJUEVMSU5FCiAgICAgKgogICAgICogQHJldHVybiBib29sfHN0cmluZ3xudWxsIHRoZSBob3N0IHRvIGJlIHVzZWQgZm9yIGEgY2VydGFpbiBrZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11bHRpKHN0cmluZyAkaG9zdCwgaW50ICRtb2RlID0gUmVkaXM6Ok1VTFRJKTogYm9vbHxSZWRpc0FycmF5IHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgaG9zdHMgYXJyYXkgb2YgYXNzb2NpYXRpdmUgYXJyYXkgb2Ygc3RyaW5ncyBhbmQgaW50ZWdlcnMsIHdpdGggdGhlIGZvbGxvd2luZyBrZXlzOgogICAgICogLSByZWRpc192ZXJzaW9uCiAgICAgKiAtIHJlZGlzX2dpdF9zaGExCiAgICAgKiAtIHJlZGlzX2dpdF9kaXJ0eQogICAgICogLSByZWRpc19idWlsZF9pZAogICAgICogLSByZWRpc19tb2RlCiAgICAgKiAtIG9zCiAgICAgKiAtIGFyY2hfYml0cwogICAgICogLSBtdWx0aXBsZXhpbmdfYXBpCiAgICAgKiAtIGF0b21pY3Zhcl9hcGkKICAgICAqIC0gZ2NjX3ZlcnNpb24KICAgICAqIC0gcHJvY2Vzc19pZAogICAgICogLSBydW5faWQKICAgICAqIC0gdGNwX3BvcnQKICAgICAqIC0gdXB0aW1lX2luX3NlY29uZHMKICAgICAqIC0gdXB0aW1lX2luX2RheXMKICAgICAqIC0gaHoKICAgICAqIC0gbHJ1X2Nsb2NrCiAgICAgKiAtIGV4ZWN1dGFibGUKICAgICAqIC0gY29uZmlnX2ZpbGUKICAgICAqIC0gY29ubmVjdGVkX2NsaWVudHMKICAgICAqIC0gY2xpZW50X2xvbmdlc3Rfb3V0cHV0X2xpc3QKICAgICAqIC0gY2xpZW50X2JpZ2dlc3RfaW5wdXRfYnVmCiAgICAgKiAtIGJsb2NrZWRfY2xpZW50cwogICAgICogLSB1c2VkX21lbW9yeQogICAgICogLSB1c2VkX21lbW9yeV9odW1hbgogICAgICogLSB1c2VkX21lbW9yeV9yc3MKICAgICAqIC0gdXNlZF9tZW1vcnlfcnNzX2h1bWFuCiAgICAgKiAtIHVzZWRfbWVtb3J5X3BlYWsKICAgICAqIC0gdXNlZF9tZW1vcnlfcGVha19odW1hbgogICAgICogLSB1c2VkX21lbW9yeV9wZWFrX3BlcmMKICAgICAqIC0gdXNlZF9tZW1vcnlfcGVhawogICAgICogLSB1c2VkX21lbW9yeV9vdmVyaGVhZAogICAgICogLSB1c2VkX21lbW9yeV9zdGFydHVwCiAgICAgKiAtIHVzZWRfbWVtb3J5X2RhdGFzZXQKICAgICAqIC0gdXNlZF9tZW1vcnlfZGF0YXNldF9wZXJjCiAgICAgKiAtIHRvdGFsX3N5c3RlbV9tZW1vcnkKICAgICAqIC0gdG90YWxfc3lzdGVtX21lbW9yeV9odW1hbgogICAgICogLSB1c2VkX21lbW9yeV9sdWEKICAgICAqIC0gdXNlZF9tZW1vcnlfbHVhX2h1bWFuCiAgICAgKiAtIG1heG1lbW9yeQogICAgICogLSBtYXhtZW1vcnlfaHVtYW4KICAgICAqIC0gbWF4bWVtb3J5X3BvbGljeQogICAgICogLSBtZW1fZnJhZ21lbnRhdGlvbl9yYXRpbwogICAgICogLSBtZW1fYWxsb2NhdG9yCiAgICAgKiAtIGFjdGl2ZV9kZWZyYWdfcnVubmluZwogICAgICogLSBsYXp5ZnJlZV9wZW5kaW5nX29iamVjdHMKICAgICAqIC0gbWVtX2ZyYWdtZW50YXRpb25fcmF0aW8KICAgICAqIC0gbG9hZGluZwogICAgICogLSByZGJfY2hhbmdlc19zaW5jZV9sYXN0X3NhdmUKICAgICAqIC0gcmRiX2Jnc2F2ZV9pbl9wcm9ncmVzcwogICAgICogLSByZGJfbGFzdF9zYXZlX3RpbWUKICAgICAqIC0gcmRiX2xhc3RfYmdzYXZlX3N0YXR1cwogICAgICogLSByZGJfbGFzdF9iZ3NhdmVfdGltZV9zZWMKICAgICAqIC0gcmRiX2N1cnJlbnRfYmdzYXZlX3RpbWVfc2VjCiAgICAgKiAtIHJkYl9sYXN0X2Nvd19zaXplCiAgICAgKiAtIGFvZl9lbmFibGVkCiAgICAgKiAtIGFvZl9yZXdyaXRlX2luX3Byb2dyZXNzCiAgICAgKiAtIGFvZl9yZXdyaXRlX3NjaGVkdWxlZAogICAgICogLSBhb2ZfbGFzdF9yZXdyaXRlX3RpbWVfc2VjCiAgICAgKiAtIGFvZl9jdXJyZW50X3Jld3JpdGVfdGltZV9zZWMKICAgICAqIC0gYW9mX2xhc3RfYmdyZXdyaXRlX3N0YXR1cwogICAgICogLSBhb2ZfbGFzdF93cml0ZV9zdGF0dXMKICAgICAqIC0gYW9mX2xhc3RfY293X3NpemUKICAgICAqIC0gY2hhbmdlc19zaW5jZV9sYXN0X3NhdmUKICAgICAqIC0gYW9mX2N1cnJlbnRfc2l6ZQogICAgICogLSBhb2ZfYmFzZV9zaXplCiAgICAgKiAtIGFvZl9wZW5kaW5nX3Jld3JpdGUKICAgICAqIC0gYW9mX2J1ZmZlcl9sZW5ndGgKICAgICAqIC0gYW9mX3Jld3JpdGVfYnVmZmVyX2xlbmd0aAogICAgICogLSBhb2ZfcGVuZGluZ19iaW9fZnN5bmMKICAgICAqIC0gYW9mX2RlbGF5ZWRfZnN5bmMKICAgICAqIC0gbG9hZGluZ19zdGFydF90aW1lCiAgICAgKiAtIGxvYWRpbmdfdG90YWxfYnl0ZXMKICAgICAqIC0gbG9hZGluZ19sb2FkZWRfYnl0ZXMKICAgICAqIC0gbG9hZGluZ19sb2FkZWRfcGVyYwogICAgICogLSBsb2FkaW5nX2V0YV9zZWNvbmRzCiAgICAgKiAtIHRvdGFsX2Nvbm5lY3Rpb25zX3JlY2VpdmVkCiAgICAgKiAtIHRvdGFsX2NvbW1hbmRzX3Byb2Nlc3NlZAogICAgICogLSBpbnN0YW50YW5lb3VzX29wc19wZXJfc2VjCiAgICAgKiAtIHRvdGFsX25ldF9pbnB1dF9ieXRlcwogICAgICogLSB0b3RhbF9uZXRfb3V0cHV0X2J5dGVzCiAgICAgKiAtIGluc3RhbnRhbmVvdXNfaW5wdXRfa2JwcwogICAgICogLSBpbnN0YW50YW5lb3VzX291dHB1dF9rYnBzCiAgICAgKiAtIHJlamVjdGVkX2Nvbm5lY3Rpb25zCiAgICAgKiAtIG1heGNsaWVudHMKICAgICAqIC0gc3luY19mdWxsCiAgICAgKiAtIHN5bmNfcGFydGlhbF9vawogICAgICogLSBzeW5jX3BhcnRpYWxfZXJyCiAgICAgKiAtIGV4cGlyZWRfa2V5cwogICAgICogLSBldmljdGVkX2tleXMKICAgICAqIC0ga2V5c3BhY2VfaGl0cwogICAgICogLSBrZXlzcGFjZV9taXNzZXMKICAgICAqIC0gcHVic3ViX2NoYW5uZWxzCiAgICAgKiAtIHB1YnN1Yl9wYXR0ZXJucwogICAgICogLSBsYXRlc3RfZm9ya191c2VjCiAgICAgKiAtIG1pZ3JhdGVfY2FjaGVkX3NvY2tldHMKICAgICAqIC0gc2xhdmVfZXhwaXJlc190cmFja2VkX2tleXMKICAgICAqIC0gYWN0aXZlX2RlZnJhZ19oaXRzCiAgICAgKiAtIGFjdGl2ZV9kZWZyYWdfbWlzc2VzCiAgICAgKiAtIGFjdGl2ZV9kZWZyYWdfa2V5X2hpdHMKICAgICAqIC0gYWN0aXZlX2RlZnJhZ19rZXlfbWlzc2VzCiAgICAgKiAtIHJvbGUKICAgICAqIC0gbWFzdGVyX3JlcGxpZAogICAgICogLSBtYXN0ZXJfcmVwbGlkMgogICAgICogLSBtYXN0ZXJfcmVwbF9vZmZzZXQKICAgICAqIC0gc2Vjb25kX3JlcGxfb2Zmc2V0CiAgICAgKiAtIHJlcGxfYmFja2xvZ19hY3RpdmUKICAgICAqIC0gcmVwbF9iYWNrbG9nX3NpemUKICAgICAqIC0gcmVwbF9iYWNrbG9nX2ZpcnN0X2J5dGVfb2Zmc2V0CiAgICAgKiAtIHJlcGxfYmFja2xvZ19oaXN0bGVuCiAgICAgKiAtIG1hc3Rlcl9ob3N0CiAgICAgKiAtIG1hc3Rlcl9wb3J0CiAgICAgKiAtIG1hc3Rlcl9saW5rX3N0YXR1cwogICAgICogLSBtYXN0ZXJfbGFzdF9pb19zZWNvbmRzX2FnbwogICAgICogLSBtYXN0ZXJfc3luY19pbl9wcm9ncmVzcwogICAgICogLSBzbGF2ZV9yZXBsX29mZnNldAogICAgICogLSBzbGF2ZV9wcmlvcml0eQogICAgICogLSBzbGF2ZV9yZWFkX29ubHkKICAgICAqIC0gbWFzdGVyX3N5bmNfbGVmdF9ieXRlcwogICAgICogLSBtYXN0ZXJfc3luY19sYXN0X2lvX3NlY29uZHNfYWdvCiAgICAgKiAtIG1hc3Rlcl9saW5rX2Rvd25fc2luY2Vfc2Vjb25kcwogICAgICogLSBjb25uZWN0ZWRfc2xhdmVzCiAgICAgKiAtIG1pbi1zbGF2ZXMtdG8td3JpdGUKICAgICAqIC0gbWluLXJlcGxpY2FzLXRvLXdyaXRlCiAgICAgKiAtIG1pbl9zbGF2ZXNfZ29vZF9zbGF2ZXMKICAgICAqIC0gdXNlZF9jcHVfc3lzCiAgICAgKiAtIHVzZWRfY3B1X3VzZXIKICAgICAqIC0gdXNlZF9jcHVfc3lzX2NoaWxkcmVuCiAgICAgKiAtIHVzZWRfY3B1X3VzZXJfY2hpbGRyZW4KICAgICAqIC0gY2x1c3Rlcl9lbmFibGVkCiAgICAgKgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9pbmZvCiAgICAgKiBAcmV0dXJuICBib29sfGFycmF5CiAgICAgKiBAZXhhbXBsZQogICAgICogPHByZT4KICAgICAqICRyZWRpcy0+aW5mbygpOwogICAgICogPC9wcmU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvKCk6IGJvb2x8YXJyYXkge30KfQo8P3BocAoKLyoqCiAqIEhlbHBlciBhdXRvY29tcGxldGUgZm9yIHBocCByZWRpcyBleHRlbnNpb24KICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BocHJlZGlzL3BocHJlZGlzL2Jsb2IvZGV2ZWxvcC9yZWRpcy5zdHViLnBocAogKi8KY2xhc3MgUmVkaXMKewogICAgcHVibGljIGNvbnN0IFJFRElTX05PVF9GT1VORCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUkVESVNfU1RSSU5HID0gMTsKICAgIHB1YmxpYyBjb25zdCBSRURJU19TRVQgPSAyOwogICAgcHVibGljIGNvbnN0IFJFRElTX0xJU1QgPSAzOwogICAgcHVibGljIGNvbnN0IFJFRElTX1pTRVQgPSA0OwogICAgcHVibGljIGNvbnN0IFJFRElTX0hBU0ggPSA1OwogICAgcHVibGljIGNvbnN0IFJFRElTX1NUUkVBTSA9IDY7CiAgICBwdWJsaWMgY29uc3QgQVRPTUlDID0gMDsKICAgIHB1YmxpYyBjb25zdCBNVUxUSSA9IDE7CiAgICBwdWJsaWMgY29uc3QgUElQRUxJTkUgPSAyOwogICAgcHVibGljIGNvbnN0IE9QVF9TRVJJQUxJWkVSID0gMTsKICAgIHB1YmxpYyBjb25zdCBPUFRfUFJFRklYID0gMjsKICAgIHB1YmxpYyBjb25zdCBPUFRfUkVBRF9USU1FT1VUID0gMzsKICAgIHB1YmxpYyBjb25zdCBPUFRfU0NBTiA9IDQ7CiAgICBwdWJsaWMgY29uc3QgT1BUX1NMQVZFX0ZBSUxPVkVSID0gNTsKICAgIHB1YmxpYyBjb25zdCBPUFRfVENQX0tFRVBBTElWRSA9IDY7CiAgICBwdWJsaWMgY29uc3QgT1BUX0NPTVBSRVNTSU9OID0gNzsKICAgIHB1YmxpYyBjb25zdCBPUFRfUkVQTFlfTElURVJBTCA9IDg7CiAgICBwdWJsaWMgY29uc3QgT1BUX0NPTVBSRVNTSU9OX0xFVkVMID0gOTsKICAgIHB1YmxpYyBjb25zdCBPUFRfTlVMTF9NVUxUSUJVTEtfQVNfTlVMTCA9IDEwOwogICAgcHVibGljIGNvbnN0IFNFUklBTElaRVJfTk9ORSA9IDA7CiAgICBwdWJsaWMgY29uc3QgU0VSSUFMSVpFUl9QSFAgPSAxOwogICAgcHVibGljIGNvbnN0IFNFUklBTElaRVJfSUdCSU5BUlkgPSAyOwogICAgcHVibGljIGNvbnN0IFNFUklBTElaRVJfTVNHUEFDSyA9IDM7CiAgICBwdWJsaWMgY29uc3QgU0VSSUFMSVpFUl9KU09OID0gNDsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9OT05FID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9MWkYgPSAxOwogICAgcHVibGljIGNvbnN0IENPTVBSRVNTSU9OX1pTVEQgPSAyOwogICAgcHVibGljIGNvbnN0IENPTVBSRVNTSU9OX1pTVERfREVGQVVMVCA9IDM7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fWlNURF9NQVggPSAyMjsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9MWjQgPSAzOwogICAgcHVibGljIGNvbnN0IFNDQU5fUkVUUlkgPSAxOwogICAgcHVibGljIGNvbnN0IFNDQU5fTk9SRVRSWSA9IDA7CiAgICBwdWJsaWMgY29uc3QgU0NBTl9QUkVGSVggPSAyOwogICAgcHVibGljIGNvbnN0IFNDQU5fTk9QUkVGSVggPSAzOwogICAgcHVibGljIGNvbnN0IEJFRk9SRSA9ICJiZWZvcmUiOwogICAgcHVibGljIGNvbnN0IEFGVEVSID0gImFmdGVyIjsKICAgIHB1YmxpYyBjb25zdCBMRUZUID0gImxlZnQiOwogICAgcHVibGljIGNvbnN0IFJJR0hUID0gInJpZ2h0IjsKICAgIHB1YmxpYyBjb25zdCBPUFRfTUFYX1JFVFJJRVMgPSAxMTsKICAgIHB1YmxpYyBjb25zdCBPUFRfQkFDS09GRl9BTEdPUklUSE0gPSAxMjsKICAgIHB1YmxpYyBjb25zdCBCQUNLT0ZGX0FMR09SSVRITV9ERUZBVUxUID0gMDsKICAgIHB1YmxpYyBjb25zdCBCQUNLT0ZGX0FMR09SSVRITV9DT05TVEFOVCA9IDY7CiAgICBwdWJsaWMgY29uc3QgQkFDS09GRl9BTEdPUklUSE1fVU5JRk9STSA9IDU7CiAgICBwdWJsaWMgY29uc3QgQkFDS09GRl9BTEdPUklUSE1fRVhQT05FTlRJQUwgPSA0OwogICAgcHVibGljIGNvbnN0IEJBQ0tPRkZfQUxHT1JJVEhNX0ZVTExfSklUVEVSID0gMjsKICAgIHB1YmxpYyBjb25zdCBCQUNLT0ZGX0FMR09SSVRITV9FUVVBTF9KSVRURVIgPSAzOwogICAgcHVibGljIGNvbnN0IEJBQ0tPRkZfQUxHT1JJVEhNX0RFQ09SUkVMQVRFRF9KSVRURVIgPSAxOwogICAgcHVibGljIGNvbnN0IE9QVF9CQUNLT0ZGX0JBU0UgPSAxMzsKICAgIHB1YmxpYyBjb25zdCBPUFRfQkFDS09GRl9DQVAgPSAxNDsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBSZWRpcyBpbnN0YW5jZS4gIElmIHBhc3NlZCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIGluIHRoZQogICAgICogb3B0aW9ucyBhcnJheSBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNvbm5lY3QgdG8gYW4gaW5zdGFuY2UgYXQgdGhlIHNhbWUKICAgICAqIHRpbWUuCiAgICAgKiAqKk5PVEUqKjogIEJlbG93IGlzIGFuIGV4YW1wbGUgb3B0aW9ucyBhcnJheSB3aXRoIHZhcmlvdXMgc2V0dGluZwogICAgICogICAgICRvcHRpb25zID0gWwogICAgICogICAgICAgICAnaG9zdCcgICAgICAgICAgID0+ICdsb2NhbGhvc3QnLAogICAgICogICAgICAgICAncG9ydCcgICAgICAgICAgID0+IDYzNzksCiAgICAgKiAgICAgICAgICdyZWFkVGltZW91dCcgICAgPT4gMi41LAogICAgICogICAgICAgICAnY29ubmVjdFRpbWVvdXQnID0+IDIuNSwKICAgICAqICAgICAgICAgJ3BlcnNpc3RlbnQnICAgICA9PiB0cnVlLAogICAgICogICAgICAgICAvLyBWYWxpZCBmb3JtYXRzOiBOVUxMLCBbJ3VzZXInLCAncGFzcyddLCAncGFzcycsIG9yIFsncGFzcyddCiAgICAgKiAgICAgICAgICdhdXRoJyA9PiBbJ3BocHJlZGlzJywgJ3BocHJlZGlzJ10sCiAgICAgKiAgICAgICAgIC8vIFNlZSBQSFAgc3RyZWFtIG9wdGlvbnMgZm9yIHZhbGlkIFNTTCBjb25maWd1cmF0aW9uIHNldHRpbmdzLgogICAgICogICAgICAgICAnc3NsJyA9PiBbJ3ZlcmlmeV9wZWVyJyA9PiBmYWxzZV0sCiAgICAgKiAgICAgICAgIC8vIEhvdyBxdWlja2x5IHRvIHJldHJ5IGEgY29ubmVjdGlvbiBhZnRlciB3ZSB0aW1lIG91dCBvciBpdCAgY2xvc2VzLgogICAgICogICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBzZXR0aW5nIGlzIG92ZXJyaWRkZW4gYnkgJ2JhY2tvZmYnIHN0cmF0ZWdpZXMuCiAgICAgKiAgICAgICAgICdyZXRyeUludGVydmFsJyAgPT4gMTAwLAogICAgICogICAgICAgICAgLy8gV2hpY2ggYmFja29mZiBhbGdvcml0aG0gdG8gdXNlLiAgJ2RlY29ycmVsYXRlZCBqaXR0ZXInIGlzCiAgICAgKiAgICAgICAgICAvLyBsaWtlbHkgdGhlIGJlc3Qgb25lIGZvciBtb3N0IHNvbHV0aW9uLCBidXQgdGhlcmUgYXJlIG1hbnkKICAgICAqICAgICAgICAgIC8vIHRvIGNob29zZSBmcm9tOgogICAgICogICAgICAgICAgLy8gICAgIFJFRElTX0JBQ0tPRkZfQUxHT1JJVEhNX0RFRkFVTFQKICAgICAqICAgICAgICAgIC8vICAgICBSRURJU19CQUNLT0ZGX0FMR09SSVRITV9DT05TVEFOVAogICAgICogICAgICAgICAgLy8gICAgIFJFRElTX0JBQ0tPRkZfQUxHT1JJVEhNX1VOSUZPUk0KICAgICAqICAgICAgICAgIC8vICAgICBSRURJU19CQUNLT0ZGX0FMR09SSVRITV9FWFBPTkVOVElBTAogICAgICogICAgICAgICAgLy8gICAgIFJFRElTX0JBQ0tPRkZfQUxHT1JJVEhNX0ZVTExfSklUVEVSCiAgICAgKiAgICAgICAgICAvLyAgICAgUkVESVNfQkFDS09GRl9BTEdPUklUSE1fRVFVQUxfSklUVEVSCiAgICAgKiAgICAgICAgICAvLyAgICAgUkVESVNfQkFDS09GRl9BTEdPUklUSE1fREVDT1JSRUxBVEVEX0pJVFRFUgogICAgICogICAgICAgICAgLy8gJ2Jhc2UnLCBhbmQgJ2NhcCcgYXJlIGluIG1pbGxpc2Vjb25kcyBhbmQgcmVwcmVzZW50IHRoZSBmaXJzdAogICAgICogICAgICAgICAgLy8gZGVsYXkgcmVkaXMgd2lsbCB1c2Ugd2hlbiByZWNvbm5lY3RpbmcsIGFuZCB0aGUgbWF4aW11bSBkZWxheQogICAgICogICAgICAgICAgLy8gd2Ugd2lsbCByZWFjaCB3aGlsZSByZXRyeWluZy4KICAgICAqICAgICAgICAgJ2JhY2tvZmYnID0+IFsKICAgICAqICAgICAgICAgICAgICdhbGdvcml0aG0nID0+IFJlZGlzOjpCQUNLT0ZGX0FMR09SSVRITV9ERUNPUlJFTEFURURfSklUVEVSLAogICAgICogICAgICAgICAgICAgJ2Jhc2UnICAgICAgPT4gNTAwLAogICAgICogICAgICAgICAgICAgJ2NhcCcgICAgICAgPT4gNzUwLAogICAgICogICAgICAgICBdCiAgICAgKiAgICAgXTsKICAgICAqIE5vdGU6IElmIHlvdSBkbyB3aXNoIHRvIGNvbm5lY3QgdmlhIHRoZSBjb25zdHJ1Y3Rvciwgb25seSAnaG9zdCcgaXMKICAgICAqICAgICAgIHN0cmljdGx5IHJlcXVpcmVkLCB3aGljaCB3aWxsIGNhdXNlIFBocFJlZGlzIHRvIGNvbm5lY3QgdG8gdGhhdAogICAgICogICAgICAgaG9zdCBvbiBSZWRpcycgZGVmYXVsdCBwb3J0ICg2Mzc5KS4KICAgICAqIEBwYXJhbSBhcnJheXxudWxsICRvcHRpb25zCiAgICAgKiBAc2VlIGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vYmxvZ3MvYXJjaGl0ZWN0dXJlL2V4cG9uZW50aWFsLWJhY2tvZmYtYW5kLWppdHRlci8KICAgICAqIEBzZWUgUmVkaXM6OmNvbm5lY3QoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP2FycmF5ICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBDb21wcmVzcyBhIHZhbHVlIHdpdGggdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGNvbXByZXNzb3IgYXMgc2V0IHdpdGgKICAgICAqIFJlZGlzOjpzZXRPcHRpb24oKS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSB2YWx1ZSB0byBiZSBjb21wcmVzc2VkCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgVGhlIGNvbXByZXNzZWQgcmVzdWx0CiAgICAgKiBAc2VlIFJlZGlzOjpzZXRPcHRpb24oKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX2NvbXByZXNzKHN0cmluZyAkdmFsdWUpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIFVuY29tcHJlc3MgdGhlIHByb3ZpZGVkIGFyZ3VtZW50IHRoYXQgaGFzIGJlZW4gY29tcHJlc3NlZCB3aXRoIHRoZQogICAgICogY3VycmVudGx5IGNvbmZpZ3VyZWQgY29tcHJlc3NvciBhcyBzZXQgd2l0aCBSZWRpczo6c2V0T3B0aW9uKCkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBUaGUgY29tcHJlc3NlZCB2YWx1ZSB0byB1bmNvbXByZXNzLgogICAgICogQHJldHVybiBzdHJpbmcgICAgICAgICBUaGUgdW5jb21wcmVzc2VkIHJlc3VsdC4KICAgICAqIEBzZWUgUmVkaXM6OnNldE9wdGlvbigpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfdW5jb21wcmVzcyhzdHJpbmcgJHZhbHVlKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBQcmVmaXggdGhlIHBhc3NlZCBhcmd1bWVudCB3aXRoIHRoZSBjdXJyZW50bHkgc2V0IGtleSBwcmVmaXggYXMgc2V0CiAgICAgKiB3aXRoIFJlZGlzOjpzZXRPcHRpb24oKS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5L3N0cmluZyB0byBwcmVmaXgKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBwcmVmaXhlZCBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9wcmVmaXgoc3RyaW5nICRrZXkpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIFNlcmlhbGl6ZSB0aGUgcHJvdmlkZWQgdmFsdWUgd2l0aCB0aGUgY3VycmVudGx5IHNldCBzZXJpYWxpemVyIGFzIHNldAogICAgICogd2l0aCBSZWRpczo6c2V0T3B0aW9uKCkuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSB0byBzZXJpYWxpemUKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBzZXJpYWxpemVkIHJlc3VsdAogICAgICogQHNlZSBSZWRpczo6c2V0T3B0aW9uKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9zZXJpYWxpemUobWl4ZWQgJHZhbHVlKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBVbnNlcmlhbGl6ZSB0aGUgcGFzc2VkIGFyZ3VtZW50IHdpdGggdGhlIGN1cnJlbnRseSBzZXQgc2VyaWFsaXplciBhcyBzZXQKICAgICAqIHdpdGggUmVkaXM6OnNldE9wdGlvbigpLgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUgVGhlIHZhbHVlIHRvIHVuc2VyaWFsaXplCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoZSB1bnNlcmlhbGl6ZWQgcmVzdWx0CiAgICAgKiBAc2VlIFJlZGlzOjpzZXRPcHRpb24oKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX3Vuc2VyaWFsaXplKHN0cmluZyAkdmFsdWUpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUGFjayB0aGUgcHJvdmlkZWQgdmFsdWUgd2l0aCB0aGUgY29uZmlndXJlZCBzZXJpYWxpemVyIGFuZCBjb21wcmVzc29yCiAgICAgKiBhcyBzZXQgd2l0aCBSZWRpczo6c2V0T3B0aW9uKCkuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSB0byBwYWNrCiAgICAgKiBAcmV0dXJuIHN0cmluZyAgICAgICAgVGhlIHBhY2tlZCByZXN1bHQgaGF2aW5nIGJlZW4gc2VyaWFsaXplZCBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX3BhY2sobWl4ZWQgJHZhbHVlKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBVbnBhY2sgdGhlIHByb3ZpZGVkIHZhbHVlIHdpdGggdGhlIGNvbmZpZ3VyZWQgY29tcHJlc3NvciBhbmQgc2VyaWFsaXplcgogICAgICogYXMgc2V0IHdpdGggUmVkaXM6OnNldE9wdGlvbigpLgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUgVGhlIHZhbHVlIHdoaWNoIGhhcyBiZWVuIHNlcmlhbGl6ZWQgYW5kIGNvbXByZXNzZWQuCiAgICAgKiBAcmV0dXJuIG1peGVkICAgICAgICAgIFRoZSB1bmNvbXByZXNzZWQgYW5kIGVzZXJpYWxpemVkIHZhbHVlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX3VucGFjayhzdHJpbmcgJHZhbHVlKTogbWl4ZWQge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWNsKHN0cmluZyAkc3ViY21kLCBzdHJpbmcgLi4uJGFyZ3MpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogQXBwZW5kIGRhdGEgdG8gYSBSZWRpcyBTVFJJTkcga2V5LgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgaW4gcXVlc3Rpb24KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIGRhdGEgdG8gYXBwZW5kIHRvIHRoZSBrZXkuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbmV3IHN0cmluZyBsZW5ndGggb2YgdGhlIGtleSBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2FwcGVuZAogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+c2V0KCdmb28nLCAnaGVsbG8pOwogICAgICogJHJlZGlzLT5hcHBlbmQoJ2ZvbycsICd3b3JsZCcpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKHN0cmluZyAka2V5LCBtaXhlZCAkdmFsdWUpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEF1dGhlbnRpY2F0ZSBhIFJlZGlzIGNvbm5lY3Rpb24gYWZ0ZXIgaXRzIGJlZW4gZXN0YWJsaXNoZWQuCiAgICAgKiAgICAgJHJlZGlzLT5hdXRoKCdwYXNzd29yZCcpOwogICAgICogICAgICRyZWRpcy0+YXV0aChbJ3Bhc3N3b3JkJ10pOwogICAgICogICAgICRyZWRpcy0+YXV0aChbJ3VzZXJuYW1lJywgJ3Bhc3N3b3JkJ10pOwogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2F1dGgKICAgICAqIEBwYXJhbSBtaXhlZCAkY3JlZGVudGlhbHMgQSBzdHJpbmcgcGFzc3dvcmQsIG9yIGFuIGFycmF5IHdpdGggb25lIG9yIHR3byBzdHJpbmcgZWxlbWVudHMuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGJvb2wgV2hldGhlciB0aGUgQVVUSCB3YXMgc3VjY2Vzc2Z1bC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGF1dGgoI1tcU2Vuc2l0aXZlUGFyYW1ldGVyXSBtaXhlZCAkY3JlZGVudGlhbHMpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIGEgc2F2ZSBvZiB0aGUgUmVkaXMgZGF0YWJhc2UgaW4gdGhlIGJhY2tncm91bmQuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvYmdzYXZlCiAgICAgKiBAcmV0dXJuIFJlZGlzfGJvb2wgV2hldGhlciB0aGUgY29tbWFuZCB3YXMgc3VjY2Vzc2Z1bC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJnU2F2ZSgpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBBc3luY2hyb25vdXNseSByZXdyaXRlIFJlZGlzJyBhcHBlbmQtb25seSBmaWxlCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvYmdyZXdyaXRlYW9mCiAgICAgKiBAcmV0dXJuIFJlZGlzfGJvb2wgV2hldGhlciB0aGUgY29tbWFuZCB3YXMgc3VjY2Vzc2Z1bC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJncmV3cml0ZWFvZigpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIHNldCBiaXRzIGluIGEgUmVkaXMgc3RyaW5nLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2JpdGNvdW50LwogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgaW4gcXVlc3Rpb24gKG11c3QgYmUgYSBzdHJpbmcga2V5KQogICAgICogQHBhcmFtIGludCAkc3RhcnQgVGhlIGluZGV4IHdoZXJlIFJlZGlzIHNob3VsZCBzdGFydCBjb3VudGluZy4gIElmIG9taXR0ZWQgaXQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gemVybywgd2hpY2ggbWVhbnMgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcuCiAgICAgKiBAcGFyYW0gaW50ICRlbmQgVGhlIGluZGV4IHdoZXJlIFJlZGlzIHNob3VsZCBzdG9wIGNvdW50aW5nLiAgSWYgb21pdHRlZCBpdAogICAgICogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byAtMSwgbWVhbmluZyB0aGUgdmVyeSBlbmQgb2YgdGhlIHN0cmluZy4KICAgICAqIEBwYXJhbSBib29sICRieWJpdCBXaGV0aGVyIG9yIG5vdCBSZWRpcyBzaG91bGQgdHJlYXQgJHN0YXJ0IGFuZCAkZW5kIGFzIGJpdAogICAgICogICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnMsIHJhdGhlciB0aGFuIGJ5dGVzLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBiaXRzIHNldCBpbiB0aGUgcmVxdWVzdGVkIHJhbmdlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYml0Y291bnQoc3RyaW5nICRrZXksIGludCAkc3RhcnQgPSAwLCBpbnQgJGVuZCA9IC0xLCBib29sICRieWJpdCA9IGZhbHNlKTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGJpdG9wKHN0cmluZyAkb3BlcmF0aW9uLCBzdHJpbmcgJGRlc2tleSwgc3RyaW5nICRzcmNrZXksIHN0cmluZyAuLi4kb3RoZXJfa2V5cyk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYml0IHNldCB0byAwIG9yIDEgaW4gYSBzdHJpbmcuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvYml0cG9zLwogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gY2hlY2sgKG11c3QgYmUgYSBzdHJpbmcpCiAgICAgKiBAcGFyYW0gYm9vbCAkYml0IFdoZXRoZXIgdG8gbG9vayBmb3IgYW4gdW5zZXQgKDApIG9yIHNldCAoMSkgYml0LgogICAgICogQHBhcmFtIGludCAkc3RhcnQgV2hlcmUgaW4gdGhlIHN0cmluZyB0byBzdGFydCBsb29raW5nLgogICAgICogQHBhcmFtIGludCAkZW5kIFdoZXJlIGluIHRoZSBzdHJpbmcgdG8gc3RvcCBsb29raW5nLgogICAgICogQHBhcmFtIGJvb2wgJGJ5Yml0IElmIHRydWUsIFJlZGlzIHdpbGwgdHJlYXQgJHN0YXJ0IGFuZCAkZW5kIGFzIEJJVCB2YWx1ZXMgYW5kIG5vdCBieXRlcywgc28gaWYgc3RhcnQKICAgICAqICAgICAgICAgICAgICAgICAgICAgIHdhcyAwIGFuZCBlbmQgd2FzIDIsIFJlZGlzIHdvdWxkIG9ubHkgc2VhcmNoIHRoZSBmaXJzdCB0d28gYml0cy4KICAgICAqIEByZXR1cm4gUmVkaXN8aW50fGZhbHNlIFRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgc2V0IG9yIHVuc2V0IGJpdC4KICAgICAqKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiaXRwb3Moc3RyaW5nICRrZXksIGJvb2wgJGJpdCwgaW50ICRzdGFydCA9IDAsIGludCAkZW5kID0gLTEsIGJvb2wgJGJ5Yml0ID0gZmFsc2UpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFBvcCBhbiBlbGVtZW50IG9mZiB0aGUgYmVnaW5uaW5nIG9mIGEgUmVkaXMgbGlzdCBvciBsaXN0cywgcG90ZW50aWFsbHkgYmxvY2tpbmcgdXAgdG8gYSBzcGVjaWZpZWQKICAgICAqIHRpbWVvdXQuICBUaGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIGluIHR3byBkaXN0aW5jdCB3YXlzLCBvZiB3aGljaCBleGFtcGxlcyBhcmUgcHJvdmlkZWQgYmVsb3cuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvYmxwb3AvCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRrZXlfb3Jfa2V5cyBUaGlzIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcga2V5IG9yIGFuIGFycmF5IG9mIG9uZSBvciBtb3JlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5cy4KICAgICAqIEBwYXJhbSBzdHJpbmd8ZmxvYXR8aW50ICR0aW1lb3V0X29yX2tleSBJZiB0aGUgcHJldmlvdXMgYXJndW1lbnQgd2FzIGEgc3RyaW5nIGtleSwgdGhpcyBjYW4gZWl0aGVyCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYW4gYWRkaXRpb25hbCBrZXksIG9yIHRoZSB0aW1lb3V0IHlvdSB3aXNoIHRvIHNlbmQgdG8KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tbWFuZC4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8bnVsbHxmYWxzZSBDYW4gcmV0dXJuIHZhcmlvdXMgdGhpbmdzIGRlcGVuZGluZyBvbiBjb21tYW5kIGFuZCBkYXRhIGluIFJlZGlzLgogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+YmxQb3AoJ2xpc3QxJywgJ2xpc3QyJywgJ2xpc3QzJywgMS41KTsKICAgICAqICRyZWxheS0+YmxQb3AoWydsaXN0MScsICdsaXN0MicsICdsaXN0MyddLCAxLjUpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmxQb3Aoc3RyaW5nfGFycmF5ICRrZXlfb3Jfa2V5cywgc3RyaW5nfGZsb2F0fGludCAkdGltZW91dF9vcl9rZXksIG1peGVkIC4uLiRleHRyYV9hcmdzKTogUmVkaXN8YXJyYXl8bnVsbHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUG9wIGFuIGVsZW1lbnQgb2ZmIG9mIHRoZSBlbmQgb2YgYSBSZWRpcyBsaXN0IG9yIGxpc3RzLCBwb3RlbnRpYWxseSBibG9ja2luZyB1cCB0byBhIHNwZWNpZmllZCB0aW1lb3V0LgogICAgICogVGhlIGNhbGxpbmcgY29udmVudGlvbiBpcyBpZGVudGljYWwgdG8gUmVkaXM6OmJsUG9wKCkgc28gc2VlIHRoYXQgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2JycG9wLwogICAgICogQHNlZSBSZWRpczo6YmxQb3AoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnJQb3Aoc3RyaW5nfGFycmF5ICRrZXlfb3Jfa2V5cywgc3RyaW5nfGZsb2F0fGludCAkdGltZW91dF9vcl9rZXksIG1peGVkIC4uLiRleHRyYV9hcmdzKTogUmVkaXN8YXJyYXl8bnVsbHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUG9wIGFuIGVsZW1lbnQgZnJvbSB0aGUgZW5kIG9mIGEgUmVkaXMgbGlzdCwgcHVzaGluZyBpdCB0byB0aGUgYmVnaW5uaW5nIG9mIGFub3RoZXIgUmVkaXMgbGlzdCwKICAgICAqIG9wdGlvbmFsbHkgYmxvY2tpbmcgdXAgdG8gYSBzcGVjaWZpZWQgdGltZW91dC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9icnBvcGxwdXNoLwogICAgICogQHBhcmFtIHN0cmluZyAkc3JjIFRoZSBzb3VyY2UgbGlzdAogICAgICogQHBhcmFtIHN0cmluZyAkZHN0IFRoZSBkZXN0aW5hdGlvbiBsaXN0CiAgICAgKiBAcGFyYW0gaW50fGZsb2F0ICR0aW1lb3V0IFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0LiAgTm90ZSB0aGF0IHlvdSBtdXN0IGJlIGNvbm5lY3RlZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBSZWRpcyA+PSA2LjAuMCB0byBzZW5kIGEgZmxvYXRpbmcgcG9pbnQgdGltZW91dC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJycG9wbHB1c2goc3RyaW5nICRzcmMsIHN0cmluZyAkZHN0LCBpbnR8ZmxvYXQgJHRpbWVvdXQpOiBSZWRpc3xzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFBPUCB0aGUgbWF4aW11bSBzY29yaW5nIGVsZW1lbnQgb2ZmIG9mIG9uZSBvciBtb3JlIHNvcnRlZCBzZXRzLCBibG9ja2luZyB1cCB0byBhIHNwZWNpZmllZAogICAgICogdGltZW91dCBpZiBubyBlbGVtZW50cyBhcmUgYXZhaWxhYmxlLgogICAgICogRm9sbG93aW5nIGFyZSBleGFtcGxlcyBvZiB0aGUgdHdvIG1haW4gd2F5cyB0byBjYWxsIHRoaXMgbWV0aG9kLgogICAgICogKipOT1RFKio6ICBXZSByZWNjb21lbmQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggYW4gYXJyYXkgYW5kIGEgdGltZW91dCBhcyB0aGUgb3RoZXIgc3RyYXRlZ3kKICAgICAqICAgICAgICAgICAgbWF5IGJlIGRlcHJlY2F0ZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIFBocFJlZGlzCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvYnpwb3BtYXgKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJGtleSBFaXRoZXIgYSBzdHJpbmcga2V5IG9yIGFuIGFycmF5IG9mIG9uZSBvciBtb3JlIGtleXMuCiAgICAgKiBAcGFyYW0gc3RyaW5nfGludCAkdGltZW91dF9vcl9rZXkgSWYgdGhlIHByZXZpb3VzIGFyZ3VtZW50IHdhcyBhbiBhcnJheSwgdGhpcyBhcmd1bWVudAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSBhIHRpbWVvdXQgdmFsdWUuICBPdGhlcndpc2UgaXQgY291bGQgYWxzbyBiZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5vdGhlciBrZXkuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGV4dHJhX2FyZ3MgQ2FuIGNvbnNpc3Qgb2YgYWRkaXRpb25hbCBrZXlzLCB1bnRpbCB0aGUgbGFzdCBhcmd1bWVudAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggbmVlZHMgdG8gYmUgYSB0aW1lb3V0LgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxmYWxzZSBUaGUgcG9wcGVkIGVsZW1lbnRzLgogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+YnpQb3BNYXgoJ2tleTEnLCAna2V5MicsICdrZXkzJywgMS41KTsKICAgICAqICRyZWRpcy0+YnpQb3BNYXgoWydrZXkxJywgJ2tleTInLCAna2V5MyddLCAxLjUpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnpQb3BNYXgoc3RyaW5nfGFycmF5ICRrZXksIHN0cmluZ3xpbnQgJHRpbWVvdXRfb3Jfa2V5LCBtaXhlZCAuLi4kZXh0cmFfYXJncyk6IFJlZGlzfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQT1AgdGhlIG1pbmltdW0gc2NvcmluZyBlbGVtZW50IG9mZiBvZiBvbmUgb3IgbW9yZSBzb3J0ZWQgc2V0cywgYmxvY2tpbmcgdXAgdG8gYSBzcGVjaWZpZWQgdGltZW91dAogICAgICogaWYgbm8gZWxlbWVudHMgYXJlIGF2YWlsYWJsZQogICAgICogVGhpcyBjb21tYW5kIGlzIGlkZW50aWNhbCBpbiBzZW1hbnRpY3MgdG8gYnpQb3BNYXggc28gcGxlYXNlIHNlZSB0aGF0IG1ldGhvZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9ienBvcG1pbgogICAgICogQHNlZSBSZWRpczo6YnpQb3BNYXgoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnpQb3BNaW4oc3RyaW5nfGFycmF5ICRrZXksIHN0cmluZ3xpbnQgJHRpbWVvdXRfb3Jfa2V5LCBtaXhlZCAuLi4kZXh0cmFfYXJncyk6IFJlZGlzfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQT1Agb25lIG9yIG1vcmUgZWxlbWVudHMgZnJvbSBvbmUgb3IgbW9yZSBzb3J0ZWQgc2V0cywgYmxvY2tpbmcgdXAgdG8gYSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUKICAgICAqIHdoZW4gbm8gZWxlbWVudHMgYXJlIGF2YWlsYWJsZS4KICAgICAqIEBwYXJhbSBmbG9hdCAkdGltZW91dCBIb3cgbG9uZyB0byBibG9jayBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudCBhdmFpbGFibGUKICAgICAqIEBwYXJhbSBhcnJheSAka2V5cyBUaGUgc29ydGVkIHNldHMgdG8gcG9wIGZyb20KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZyb20gVGhlIHN0cmluZyAnTUlOJyBvciAnTUFYJyAoY2FzZSBpbnNlbnNpdGl2ZSkgdGVsbGluZyBSZWRpcyB3aGV0aGVyIHlvdSB3aXNoIHRvCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHBvcCB0aGUgbG93ZXN0IG9yIGhpZ2hlc3Qgc2NvcmluZyBtZW1iZXJzIGZyb20gdGhlIHNldChzKS4KICAgICAqIEBwYXJhbSBpbnQgJGNvdW50IFBvcCB1cCB0byBob3cgbWFueSBlbGVtZW50cy4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8bnVsbHxmYWxzZSBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIHBvcHBlZCBlbGVtZW50cywgb3IgZmFsc2UKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gd2hldGhlciBhbnkgZWxlbWVudHMgY291bGQgYmUgcG9wcGVkIHdpdGhpbiB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgdGltZW91dC4KICAgICAqIE5PVEU6ICBJZiBSZWRpczo6T1BUX05VTExfTVVMVElCVUxLX0FTX05VTEwgaXMgc2V0IHRvIHRydWUgdmlhIFJlZGlzOjpzZXRPcHRpb24oKSwgdGhpcyBtZXRob2Qgd2lsbAogICAgICogICAgICAgIGluc3RlYWQgcmV0dXJuIE5VTEwgd2hlbiBSZWRpcyBkb2Vzbid0IHBvcCBhbnkgZWxlbWVudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiem1wb3AoZmxvYXQgJHRpbWVvdXQsIGFycmF5ICRrZXlzLCBzdHJpbmcgJGZyb20sIGludCAkY291bnQgPSAxKTogUmVkaXN8YXJyYXl8bnVsbHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUE9QIG9uZSBvciBtb3JlIG9mIHRoZSBoaWdoZXN0IG9yIGxvd2VzdCBzY29yaW5nIGVsZW1lbnRzIGZyb20gb25lIG9yIG1vcmUgc29ydGVkIHNldHMuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvem1wb3AKICAgICAqIEBwYXJhbSBhcnJheSAka2V5cyBPbmUgb3IgbW9yZSBzb3J0ZWQgc2V0cwogICAgICogQHBhcmFtIHN0cmluZyAkZnJvbSBUaGUgc3RyaW5nICdNSU4nIG9yICdNQVgnIChjYXNlIGluc2Vuc2l0aXZlKSB0ZWxsaW5nIFJlZGlzIHdoZXRoZXIgeW91IHdhbnQgdG8KICAgICAqICAgICAgICAgICAgICAgICAgICAgIHBvcCB0aGUgbG93ZXN0IG9yIGhpZ2hlc3Qgc2NvcmluZyBlbGVtZW50cy4KICAgICAqIEBwYXJhbSBpbnQgJGNvdW50IFBvcCB1cCB0byBob3cgbWFueSBlbGVtZW50cyBhdCBvbmNlLgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxudWxsfGZhbHNlIEFuIGFycmF5IG9mIHBvcHBlZCBlbGVtZW50cyBvciBmYWxzZSBpZiBub25lIGNvdWxkIGJlIHBvcHBlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHptcG9wKGFycmF5ICRrZXlzLCBzdHJpbmcgJGZyb20sIGludCAkY291bnQgPSAxKTogUmVkaXN8YXJyYXl8bnVsbHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUG9wIG9uZSBvciBtb3JlIGVsZW1lbnRzIGZyb20gb25lIG9yIG1vcmUgUmVkaXMgTElTVHMsIGJsb2NraW5nIHVwIHRvIGEgc3BlY2lmaWVkIHRpbWVvdXQgd2hlbgogICAgICogbm8gZWxlbWVudHMgYXJlIGF2YWlsYWJsZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9ibG1wb3AKICAgICAqIEBwYXJhbSBmbG9hdCAkdGltZW91dCBUaGUgbnVtYmVyIG9mIHNlY29uZHMgUmVkaXMgd2lsbCBibG9jayB3aGVuIG5vIGVsZW1lbnRzIGFyZSBhdmFpbGFibGUuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleXMgT25lIG9yIG1vcmUgUmVkaXMgTElTVHMgdG8gcG9wIGZyb20uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmcm9tIFRoZSBzdHJpbmcgJ0xFRlQnIG9yICdSSUdIVCcgKGNhc2UgaW5zZW5zaXRpdmUpLCB0ZWxsaW5nIFJlZGlzIHdoZXRoZXIKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgdG8gcG9wIGVsZW1lbnRzIGZyb20gdGhlIGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIExJU1RzLgogICAgICogQHBhcmFtIGludCAkY291bnQgUG9wIHVwIHRvIGhvdyBtYW55IGVsZW1lbnRzIGF0IG9uY2UuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fG51bGx8ZmFsc2UgT25lIG9yIG1vcmUgZWxlbWVudHMgcG9wcGVkIGZyb20gdGhlIGxpc3Qocykgb3IgZmFsc2UgaWYgYWxsIExJU1RzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VyZSBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJsbXBvcChmbG9hdCAkdGltZW91dCwgYXJyYXkgJGtleXMsIHN0cmluZyAkZnJvbSwgaW50ICRjb3VudCA9IDEpOiBSZWRpc3xhcnJheXxudWxsfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQb3Agb25lIG9yIG1vcmUgZWxlbWVudHMgb2ZmIG9mIG9uZSBvciBtb3JlIFJlZGlzIExJU1RzLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2xtcG9wCiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleXMgQW4gYXJyYXkgd2l0aCBvbmUgb3IgbW9yZSBSZWRpcyBMSVNUIGtleSBuYW1lcy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZyb20gVGhlIHN0cmluZyAnTEVGVCcgb3IgJ1JJR0hUJyAoY2FzZSBpbnNlbnNpdGl2ZSksIHRlbGxpbmcgUmVkaXMgd2hldGhlciB0byBwb3BcCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyBmcm9tIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZSBMSVNUcy4KICAgICAqIEBwYXJhbSBpbnQgJGNvdW50IFRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyB0byBwb3AgYXQgb25jZS4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8bnVsbHxmYWxzZSBPbmUgb3IgbW9yZSBlbGVtZW50cyBwb3BwZWQgZnJvbSB0aGUgTElTVChzKSBvciBmYWxzZSBpZiBhbGwgdGhlIExJU1RzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VyZSBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxtcG9wKGFycmF5ICRrZXlzLCBzdHJpbmcgJGZyb20sIGludCAkY291bnQgPSAxKTogUmVkaXN8YXJyYXl8bnVsbHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmVzZXQgYW55IGxhc3QgZXJyb3Igb24gdGhlIGNvbm5lY3Rpb24gdG8gTlVMTAogICAgICogQHJldHVybiBib29sIFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdHJ1ZSBvciB0aHJvdyBhbiBleGNlcHRpb24gaWYgd2UncmUgbm90IGNvbm5lY3RlZC4KICAgICAqIEBzZWUgUmVkaXM6OmdldExhc3RFcnJvcigpCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzID0gbmV3IFJlZGlzKFsnaG9zdCcgPT4gJ2xvY2FsaG9zdCddKTsKICAgICAqICRyZWRpcy0+c2V0KCdzdHJpbmcnLCAndGhpc19pc19hX3N0cmluZycpOwogICAgICogJHJlZGlzLT5zbWVtYmVycygnc3RyaW5nJyk7CiAgICAgKiB2YXJfZHVtcCgkcmVkaXMtPmdldExhc3RFcnJvcigpKTsKICAgICAqICRyZWRpcy0+Y2xlYXJMYXN0RXJyb3IoKTsKICAgICAqIHZhcl9kdW1wKCRyZWRpcy0+Z2V0TGFzdEVycm9yKCkpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXJMYXN0RXJyb3IoKTogYm9vbCB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbGllbnQoc3RyaW5nICRvcHQsIG1peGVkIC4uLiRhcmdzKTogbWl4ZWQge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTogYm9vbCB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb21tYW5kKD9zdHJpbmcgJG9wdCA9IG51bGwsIG1peGVkIC4uLiRhcmdzKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqICBFeGVjdXRlIHRoZSBSZWRpcyBDT05GSUcgY29tbWFuZCBpbiBhIHZhcmlldHkgb2Ygd2F5cy4KICAgICAqICBXaGF0IHRoZSBjb21tYW5kIGRvZXMgaW4gcGFydGljdWxhciBkZXBlbmRzIG9uIHRoZSBgJG9wZXJhdGlvbmAgcXVhbGlmaWVyLgogICAgICogIE9wZXJhdGlvbnMgdGhhdCBQaHBSZWRpcyBzdXBwb3J0cyBhcmU6IFJFU0VUU1RBVCwgUkVXUklURSwgR0VULCBhbmQgU0VULgogICAgICogQHBhcmFtIHN0cmluZyAkb3BlcmF0aW9uIFRoZSBDT05GSUcgb3BlcmF0aW9uIHRvIGV4ZWN1dGUgKGUuZy4gR0VULCBTRVQsIFJFV1JJVEUpLgogICAgICogQHBhcmFtIGFycmF5fHN0cmluZ3xudWxsICRrZXlfb3Jfc2V0dGluZ3MgT25lIG9yIG1vcmUga2V5cyBvciB2YWx1ZXMuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHZhbHVlIFRoZSB2YWx1ZSBpZiB0aGlzIGlzIGEgYENPTkZJRyBTRVRgIG9wZXJhdGlvbi4KICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9jb25maWcKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPmNvbmZpZygnR0VUJywgJ3RpbWVvdXQnKTsKICAgICAqICRyZWRpcy0+Y29uZmlnKCdHRVQnLCBbJ3RpbWVvdXQnLCAnZGF0YWJhc2VzJ10pOwogICAgICogJHJlZGlzLT5jb25maWcoJ1NFVCcsICd0aW1lb3V0JywgMzApOwogICAgICogJHJlZGlzLT5jb25maWcoJ1NFVCcsIFsndGltZW91dCcgPT4gMzAsICdsb2dsZXZlbCcgPT4gJ3dhcm5pbmcnXSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb25maWcoc3RyaW5nICRvcGVyYXRpb24sIGFycmF5fHN0cmluZ3xudWxsICRrZXlfb3Jfc2V0dGluZ3MgPSBudWxsLCA/c3RyaW5nICR2YWx1ZSA9IG51bGwpOiBtaXhlZCB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb25uZWN0KAogICAgICAgIHN0cmluZyAkaG9zdCwKICAgICAgICBpbnQgJHBvcnQgPSA2Mzc5LAogICAgICAgIGZsb2F0ICR0aW1lb3V0ID0gMCwKICAgICAgICA/c3RyaW5nICRwZXJzaXN0ZW50X2lkID0gbnVsbCwKICAgICAgICBpbnQgJHJldHJ5X2ludGVydmFsID0gMCwKICAgICAgICBmbG9hdCAkcmVhZF90aW1lb3V0ID0gMCwKICAgICAgICA/YXJyYXkgJGNvbnRleHQgPSBudWxsCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBNYWtlIGEgY29weSBvZiBhIGtleS4KICAgICAqICRyZWRpcyA9IG5ldyBSZWRpcyhbJ2hvc3QnID0+ICdsb2NhbGhvc3QnXSk7CiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcmMgVGhlIGtleSB0byBjb3B5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRkc3QgVGhlIG5hbWUgb2YgdGhlIG5ldyBrZXkgY3JlYXRlZCBmcm9tIHRoZSBzb3VyY2Uga2V5LgogICAgICogQHBhcmFtIGFycmF5fG51bGwgJG9wdGlvbnMgQW4gYXJyYXkgd2l0aCBtb2RpZmllcnMgb24gaG93IENPUFkgc2hvdWxkIG9wZXJhdGUuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAkb3B0aW9ucyA9IFsKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSRVBMQUNFJyA9PiB0cnVlfGZhbHNlICMgV2hldGhlciB0byByZXBsYWNlIGFuIGV4aXN0aW5nIGtleS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEQicgPT4gaW50ICAgICAgICAgICAgICMgQ29weSBrZXkgdG8gc3BlY2lmaWMgZGIuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCBUcnVlIGlmIHRoZSBjb3B5IHdhcyBjb21wbGV0ZWQgYW5kIGZhbHNlIGlmIG5vdC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9jb3B5CiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT5waXBlbGluZSgpCiAgICAgKiAgICAgICAtPnNlbGVjdCgxKQogICAgICogICAgICAgLT5kZWwoJ25ld2tleScpCiAgICAgKiAgICAgICAtPnNlbGVjdCgwKQogICAgICogICAgICAgLT5kZWwoJ25ld2tleScpCiAgICAgKiAgICAgICAtPm1zZXQoWydzb3VyY2UxJyA9PiAndmFsdWUxJywgJ2V4aXN0cycgPT4gJ29sZF92YWx1ZSddKQogICAgICogICAgICAgLT5leGVjKCk7CiAgICAgKiB2YXJfZHVtcCgkcmVkaXMtPmNvcHkoJ3NvdXJjZTEnLCAnbmV3a2V5JykpOwogICAgICogdmFyX2R1bXAoJHJlZGlzLT5jb3B5KCdzb3VyY2UxJywgJ25ld2tleScsIFsnZGInID0+IDFdKSk7CiAgICAgKiB2YXJfZHVtcCgkcmVkaXMtPmNvcHkoJ3NvdXJjZTEnLCAnZXhpc3RzJykpOwogICAgICogdmFyX2R1bXAoJHJlZGlzLT5jb3B5KCdzb3VyY2UxJywgJ2V4aXN0cycsIFsnUkVQTEFDRScgPT4gdHJ1ZV0pKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvcHkoc3RyaW5nICRzcmMsIHN0cmluZyAkZHN0LCA/YXJyYXkgJG9wdGlvbnMgPSBudWxsKTogUmVkaXN8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Yga2V5cyBpbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIFJlZGlzIGRhdGFiYXNlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2Ric2l6ZQogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBrZXlzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzID0gbmV3IFJlZGlzKFsnaG9zdCcgPT4gJ2xvY2FsaG9zdCddKTsKICAgICAqICRyZWRpcy0+Zmx1c2hkYigpOwogICAgICogJHJlZGlzLT5zZXQoJ2ZvbycsICdiYXInKTsKICAgICAqIHZhcl9kdW1wKCRyZWRpcy0+ZGJzaXplKCkpOwogICAgICogJHJlZGlzLT5tc2V0KFsnYScgPT4gJ2EnLCAnYicgPT4gJ2InLCAnYycgPT4gJ2MnLCAnZCcgPT4gJ2QnXSk7CiAgICAgKiB2YXJfZHVtcCgkcmVkaXMtPmRic2l6ZSgpKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRiU2l6ZSgpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVidWcoc3RyaW5nICRrZXkpOiBSZWRpc3xzdHJpbmcge30KCiAgICAvKioKICAgICAqIERlY3JlbWVudCBhIFJlZGlzIGludGVnZXIgYnkgMSBvciBhIHByb3ZpZGVkIHZhbHVlLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gZGVjcmVtZW50CiAgICAgKiBAcGFyYW0gaW50ICRieSBIb3cgbXVjaCB0byBkZWNyZW1lbnQgdGhlIGtleS4gIE5vdGUgdGhhdCBpZiB0aGlzIHZhbHVlIGlzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgbm90IHNlbnQgb3IgaXMgc2V0IHRvIGAxYCwgUGhwUmVkaXMgd2lsbCBhY3R1YWxseSBpbnZva2UKICAgICAqICAgICAgICAgICAgICAgICAgICB0aGUgJ0RFQ1InIGNvbW1hbmQuICBJZiBpdCBpcyBhbnkgdmFsdWUgb3RoZXIgdGhhbiBgMWAKICAgICAqICAgICAgICAgICAgICAgICAgICBQaHBSZWRpcyB3aWxsIGFjdHVhbGx5IHNlbmQgdGhlIGBERUNSQllgIGNvbW1hbmQuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBrZXkgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9kZWNyCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZGVjcmJ5CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmRlY3IoJ2NvdW50ZXInKTsKICAgICAqIEBleGFtcGxlICRyZWRpcy0+ZGVjcignY291bnRlcicsIDIpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjcihzdHJpbmcgJGtleSwgaW50ICRieSA9IDEpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIERlY3JlbWVudCBhIHJlZGlzIGludGVnZXIgYnkgYSB2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBpbnRlZ2VyIGtleSB0byBkZWNyZW1lbnQuCiAgICAgKiBAcGFyYW0gaW50ICR2YWx1ZSBIb3cgbXVjaCB0byBkZWNyZW1lbnQgdGhlIGtleS4KICAgICAqIEByZXR1cm4gUmVkaXN8aW50fGZhbHNlIFRoZSBuZXcgdmFsdWUgb2YgdGhlIGtleSBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2RlY3JieQogICAgICogQGV4YW1wbGUgJHJlZGlzLT5kZWNyYnkoJ2NvdW50ZXInLCAxKTsKICAgICAqIEBleGFtcGxlICRyZWRpcy0+ZGVjcmJ5KCdjb3VudGVyJywgMik7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNyQnkoc3RyaW5nICRrZXksIGludCAkdmFsdWUpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIERlbGV0ZSBvbmUgb3IgbW9yZSBrZXlzIGZyb20gUmVkaXMuCiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIGluIHR3byBkaXN0aW5jdCB3YXlzLiAgVGhlIGZpcnN0IGlzIHRvIHBhc3MgYSBzaW5nbGUgYXJyYXkKICAgICAqIG9mIGtleXMgdG8gZGVsZXRlLCBhbmQgdGhlIHNlY29uZCBpcyB0byBwYXNzIE4gYXJndW1lbnRzLCBhbGwgbmFtZXMgb2Yga2V5cy4gIFNlZQogICAgICogYmVsb3cgZm9yIGFuIGV4YW1wbGUgb2YgYm90aCBzdHJhdGVnaWVzLgogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAka2V5IEVpdGhlciBhbiBhcnJheSB3aXRoIG9uZSBvciBtb3JlIGtleSBuYW1lcyBvciBhIHN0cmluZyB3aXRoCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZiBhIGtleS4KICAgICAqIEBwYXJhbSBzdHJpbmcgLi4uJG90aGVyX2tleXMgT25lIG9yIG1vcmUgYWRkaXRpb25hbCBrZXlzIHBhc3NlZCBpbiBhIHZhcmlhZGljIGZhc2hpb24uCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIGtleXMgdGhhdCB3ZXJlIGRlbGV0ZWQKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9kZWwKICAgICAqIEBleGFtcGxlICRyZWRpcy0+ZGVsKCdrZXk6MCcsICdrZXk6MScpOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT5kZWwoWydrZXk6MicsICdrZXk6MycsICdrZXk6NCddKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlbChhcnJheXxzdHJpbmcgJGtleSwgc3RyaW5nIC4uLiRvdGhlcl9rZXlzKTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlKGFycmF5fHN0cmluZyAka2V5LCBzdHJpbmcgLi4uJG90aGVyX2tleXMpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIERpc2NhcmQgYSB0cmFuc2FjdGlvbiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGJvb2wgIFRydWUgaWYgd2UgY291bGQgZGlzY2FyZCB0aGUgdHJhbnNhY3Rpb24uCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT5nZXRNb2RlKCk7CiAgICAgKiAkcmVkaXMtPnNldCgnZm9vJywgJ2JhcicpOwogICAgICogJHJlZGlzLT5kaXNjYXJkKCk7CiAgICAgKiAkcmVkaXMtPmdldE1vZGUoKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc2NhcmQoKTogUmVkaXN8Ym9vbCB7fQoKICAgIC8qKgogICAgICogRHVtcCBSZWRpcycgaW50ZXJuYWwgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGEga2V5LgogICAgICogJHJlZGlzLT56UmFuZ2UoJ25ldy16c2V0JywgMCwgLTEsIHRydWUpOwogICAgICogPC9jb2RlPgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gZHVtcC4KICAgICAqIEByZXR1cm4gUmVkaXN8c3RyaW5nIEEgYmluYXJ5IHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGtleSdzIHZhbHVlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2R1bXAKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnphZGQoJ3pzZXQnLCAwLCAnemVybycsIDEsICdvbmUnLCAyLCAndHdvJyk7CiAgICAgKiAkYmluYXJ5ID0gJHJlZGlzLT5kdW1wKCd6c2V0Jyk7CiAgICAgKiAkcmVkaXMtPnJlc3RvcmUoJ25ldy16c2V0JywgMCwgJGJpbmFyeSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkdW1wKHN0cmluZyAka2V5KTogUmVkaXN8c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBIYXZlIFJlZGlzIHJlcGVhdCBiYWNrIGFuIGFyYml0cmFyeSBzdHJpbmcgdG8gdGhlIGNsaWVudC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0ciBUaGUgc3RyaW5nIHRvIGVjaG8KICAgICAqIEByZXR1cm4gUmVkaXN8c3RyaW5nfGZhbHNlIFRoZSBzdHJpbmcgc2VudCB0byBSZWRpcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2VjaG8KICAgICAqIEBleGFtcGxlICRyZWRpcy0+ZWNobygnSGVsbG8sIFdvcmxkJyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlY2hvKHN0cmluZyAkc3RyKTogUmVkaXN8c3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIGEgTFVBIHNjcmlwdCBvbiB0aGUgcmVkaXMgc2VydmVyLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2V2YWwvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzY3JpcHQgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgTFVBIHNjcmlwdAogICAgICogQHBhcmFtIGFycmF5ICRhcmdzIEFuIGFycmF5IG9mIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoaXMgc2NyaXB0CiAgICAgKiBAcGFyYW0gaW50ICRudW1fa2V5cyBIb3cgbWFueSBvZiB0aGUgYXJndW1lbnRzIGFyZSBrZXlzLiAgVGhpcyBpcyBuZWVkZWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHJlZGlzIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBrZXkgbmFtZSBhcmd1bWVudHMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvdGhlciBkYXRhLgogICAgICogQHJldHVybiBtaXhlZCBMVUEgc2NyaXB0cyBtYXkgcmV0dXJuIGFyYml0cmFyeSBkYXRhIHNvIHRoaXMgbWV0aG9kIGNhbiByZXR1cm4KICAgICAqICAgICAgICAgICAgICAgc3RyaW5ncywgYXJyYXlzLCBuZXN0ZWQgYXJyYXlzLCBldGMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBldmFsKHN0cmluZyAkc2NyaXB0LCBhcnJheSAkYXJncyA9IFtdLCBpbnQgJG51bV9rZXlzID0gMCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBUaGlzIGlzIHNpbXBseSB0aGUgcmVhZC1vbmx5IHZhcmlhbnQgb2YgZXZhbCwgbWVhbmluZyB0aGUgdW5kZXJseWluZyBzY3JpcHQKICAgICAqIG1heSBub3QgbW9kaWZ5IGRhdGEgaW4gcmVkaXMuCiAgICAgKiBAc2VlIFJlZGlzOjpldmFsX3JvKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV2YWxfcm8oc3RyaW5nICRzY3JpcHRfc2hhLCBhcnJheSAkYXJncyA9IFtdLCBpbnQgJG51bV9rZXlzID0gMCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIGEgTFVBIHNjcmlwdCBvbiB0aGUgc2VydmVyIGJ1dCBpbnN0ZWFkIG9mIHNlbmRpbmcgdGhlIHNjcmlwdCwgc2VuZAogICAgICogdGhlIFNIQTEgaGFzaCBvZiB0aGUgc2NyaXB0LgogICAgICogQHBhcmFtIHN0cmluZyAkc2hhMSBUaGUgU0hBMSBoYXNoIG9mIHRoZSBsdWEgY29kZS4gIE5vdGUgdGhhdCB0aGUgc2NyaXB0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYWxyZWFkeSBleGlzdCBvbiB0aGUgc2VydmVyLCBlaXRoZXIgaGF2aW5nIGJlZW4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkIHdpdGggYFNDUklQVCBMT0FEYCBvciBoYXZpbmcgYmVlbiBleGVjdXRlZCBkaXJlY3RseQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGBFVkFMYCBmaXJzdC4KICAgICAqIEBwYXJhbSBhcnJheSAkYXJncyBBcmd1bWVudHMgdG8gc2VuZCB0byB0aGUgc2NyaXB0LgogICAgICogQHBhcmFtIGludCAkbnVtX2tleXMgVGhlIG51bWJlciBvZiBhcmd1bWVudHMgdGhhdCBhcmUga2V5cwogICAgICogQHJldHVybiBtaXhlZCBSZXR1cm5zIHdoYXRldmVyIHRoZSBzcGVjaWZpYyBzY3JpcHQgZG9lcy4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9ldmFsc2hhLwogICAgICogQHNlZSBSZWRpczo6ZXZhbCgpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXZhbHNoYShzdHJpbmcgJHNoYTEsIGFycmF5ICRhcmdzID0gW10sIGludCAkbnVtX2tleXMgPSAwKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFRoaXMgaXMgc2ltcGx5IHRoZSByZWFkLW9ubHkgdmFyaWFudCBvZiBldmFsc2hhLCBtZWFuaW5nIHRoZSB1bmRlcmx5aW5nIHNjcmlwdAogICAgICogbWF5IG5vdCBtb2RpZnkgZGF0YSBpbiByZWRpcy4KICAgICAqIEBzZWUgUmVkaXM6OmV2YWxzaGEoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXZhbHNoYV9ybyhzdHJpbmcgJHNoYTEsIGFycmF5ICRhcmdzID0gW10sIGludCAkbnVtX2tleXMgPSAwKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEV4ZWN1dGUgZWl0aGVyIGEgTVVMVEkgb3IgUElQRUxJTkUgYmxvY2sgYW5kIHJldHVybiB0aGUgYXJyYXkgb2YgcmVwbGllcy4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8ZmFsc2UgVGhlIGFycmF5IG9mIHBpcGVsaW5lJ2Qgb3IgbXVsdGkgcmVwbGllcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2V4ZWMKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9tdWx0aQogICAgICogQHNlZSBSZWRpczo6cGlwZWxpbmUoKQogICAgICogQHNlZSBSZWRpczo6bXVsdGkoKQogICAgICogQGV4YW1wbGUKICAgICAqICRyZXMgPSAkcmVkaXMtPm11bHRpKCkKICAgICAqICAgICAgICAgICAgICAtPnNldCgnZm9vJywgJ2JhcicpCiAgICAgKiAgICAgICAgICAgICAgLT5nZXQoJ2ZvbycpCiAgICAgKiAgICAgICAgICAgICAgLT5kZWwoJ2xpc3QnKQogICAgICogICAgICAgICAgICAgIC0+cnB1c2goJ2xpc3QnLCAnb25lJywgJ3R3bycsICd0aHJlZScpCiAgICAgKiAgICAgICAgICAgICAgLT5leGVjKCk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjKCk6IFJlZGlzfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBUZXN0IGlmIG9uZSBvciBtb3JlIGtleXMgZXhpc3QuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGtleSBFaXRoZXIgYW4gYXJyYXkgb2Yga2V5cyBvciBhIHN0cmluZyBrZXkKICAgICAqIEBwYXJhbSBtaXhlZCAkb3RoZXJfa2V5cyBJZiB0aGUgcHJldmlvdXMgYXJndW1lbnQgd2FzIGEgc3RyaW5nLCB5b3UgbWF5IHNlbmQgYW55IG51bWJlciBvZgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIGtleXMgdG8gdGVzdC4KICAgICAqIEByZXR1cm4gUmVkaXN8aW50fGJvb2wgICAgVGhlIG51bWJlciBvZiBrZXlzIHRoYXQgZG8gZXhpc3QgYW5kIGZhbHNlIG9uIGZhaWx1cmUKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9leGlzdHMKICAgICAqIEBleGFtcGxlICRyZWRpcy0+ZXhpc3RzKFsnazEnLCAnazInLCAnazMnXSk7CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmV4aXN0cygnazQnLCAnazUnLCAnbm90YWtleScpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhpc3RzKG1peGVkICRrZXksIG1peGVkIC4uLiRvdGhlcl9rZXlzKTogUmVkaXN8aW50fGJvb2wge30KCiAgICAvKioKICAgICAqIFNldHMgYW4gZXhwaXJhdGlvbiBpbiBzZWNvbmRzIG9uIHRoZSBrZXkgaW4gcXVlc3Rpb24uICBJZiBjb25uZWN0ZWQgdG8KICAgICAqIHJlZGlzLXNlcnZlciA+PSA3LjAuMCB5b3UgbWF5IHNlbmQgYW4gYWRkaXRpb25hbCAibW9kZSIgYXJndW1lbnQgd2hpY2gKICAgICAqIG1vZGlmaWVzIGhvdyB0aGUgY29tbWFuZCB3aWxsIGV4ZWN1dGUuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBzZXQgYW4gZXhwaXJhdGlvbiBvbi4KICAgICAqIEBwYXJhbSBpbnQgJHRpbWVvdXQgVGhlIG51bWJlciBvZiBzZWNvbmRzIGFmdGVyIHdoaWNoIGtleSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZC4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbW9kZSBBIHR3byBjaGFyYWN0ZXIgbW9kaWZpZXIgdGhhdCBjaGFuZ2VzIGhvdyB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgd29ya3MuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4KICAgICAqICAgICAgICAgICAgICAgICAgICAgIE5YIC0gU2V0IGV4cGlyeSBvbmx5IGlmIGtleSBoYXMgbm8gZXhwaXJ5CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBYWCAtIFNldCBleHBpcnkgb25seSBpZiBrZXkgaGFzIGFuIGV4cGlyeQogICAgICogICAgICAgICAgICAgICAgICAgICAgTFQgLSBTZXQgZXhwaXJ5IG9ubHkgd2hlbiBuZXcgZXhwaXJ5IGlzIDwgY3VycmVudCBleHBpcnkKICAgICAqICAgICAgICAgICAgICAgICAgICAgIEdUIC0gU2V0IGV4cGlyeSBvbmx5IHdoZW4gbmV3IGV4cGlyeSBpcyA+IGN1cnJlbnQgZXhwaXJ5CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CiAgICAgKiBAcmV0dXJuIFJlZGlzfGJvb2wgVHJ1ZSBpZiBhbiBleHBpcmF0aW9uIHdhcyBzZXQgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9leHBpcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cGlyZShzdHJpbmcgJGtleSwgaW50ICR0aW1lb3V0LCA/c3RyaW5nICRtb2RlID0gbnVsbCk6IFJlZGlzfGJvb2wge30KCiAgICAvKgogICAgICogU2V0IGEga2V5J3MgZXhwaXJhdGlvbiB0byBhIHNwZWNpZmljIFVuaXggdGltZXN0YW1wIGluIHNlY29uZHMuCiAgICAgKgogICAgICogSWYgY29ubmVjdGVkIHRvIFJlZGlzID49IDcuMC4wIHlvdSBjYW4gcGFzcyBhbiBvcHRpb25hbCAnbW9kZScgYXJndW1lbnQuCiAgICAgKiBAc2VlIFJlZGlzOjpleHBpcmUoKSBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbW9kZSBhcmd1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBzZXQgYW4gZXhwaXJhdGlvbiBvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlZGlzfGJvb2wgVHJ1ZSBpZiBhbiBleHBpcmF0aW9uIHdhcyBzZXQsIGZhbHNlIGlmIG5vdC4KICAgICAqCiAgICAgKi8KCiAgICAvKioKICAgICAqIFNldCBhIGtleSB0byBleHBpcmUgYXQgYW4gZXhhY3QgdW5peCB0aW1lc3RhbXAuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBzZXQgYW4gZXhwaXJhdGlvbiBvbi4KICAgICAqIEBwYXJhbSBpbnQgJHRpbWVzdGFtcCBUaGUgdW5peCB0aW1lc3RhbXAgdG8gZXhwaXJlIGF0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRtb2RlIEFuIG9wdGlvbiAnbW9kZScgdGhhdCBtb2RpZmllcyBob3cgdGhlIGNvbW1hbmQgYWN0cyAoc2VlIHtAbGluayBSZWRpczo6ZXhwaXJlfSkuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGJvb2wgVHJ1ZSBpZiBhbiBleHBpcmF0aW9uIHdhcyBzZXQsIGZhbHNlIGlmIG5vdC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9leHBpcmVhdAogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2V4cGlyZQogICAgICogQHNlZSBSZWRpczo6ZXhwaXJlKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cGlyZUF0KHN0cmluZyAka2V5LCBpbnQgJHRpbWVzdGFtcCwgP3N0cmluZyAkbW9kZSA9IG51bGwpOiBSZWRpc3xib29sIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGZhaWxvdmVyKD9hcnJheSAkdG8gPSBudWxsLCBib29sICRhYm9ydCA9IGZhbHNlLCBpbnQgJHRpbWVvdXQgPSAwKTogUmVkaXN8Ym9vbCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBleHBpcmF0aW9uIG9mIGEgZ2l2ZW4ga2V5IGFzIGEgdW5peCB0aW1lc3RhbXAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRvIGNoZWNrLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBrZXkgZXhwaXJlcywgb3IgLTEgaWYgdGhlIGtleSBoYXMgbm8gZXhwaXJ5CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgLTIgaWYgdGhlIGtleSBkb2Vzbid0IGV4aXN0LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2V4cGlyZXRpbWUKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnNldEV4KCdteWtleScsIDYwLCAnbXl2YWwnKTsKICAgICAqICRyZWRpcy0+ZXhwaXJldGltZSgnbXlrZXknKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cGlyZXRpbWUoc3RyaW5nICRrZXkpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgZXhwcmlhdGlvbiB0aW1lc3RhbXAgb2YgYSBnaXZlbiBSZWRpcyBrZXkgYnV0IGluIG1pbGxpc2Vjb25kcy4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9wZXhwaXJldGltZQogICAgICogQHNlZSBSZWRpczo6ZXhwaXJldGltZSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBjaGVjawogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIGV4cGlyYXRpb24gdGltZXN0YW1wIG9mIHRoaXMga2V5IChpbiBtaWxsaXNlY29uZHMpIG9yIC0xIGlmIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAga2V5IGhhcyBubyBleHBpcmF0aW9uLCBhbmQgLTIgaWYgaXQgZG9lcyBub3QgZXhpc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwZXhwaXJldGltZShzdHJpbmcgJGtleSk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSW52b2tlIGEgZnVuY3Rpb24uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmbiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24KICAgICAqIEBwYXJhbSBhcnJheSAka2V5cyBPcHRpb25hbCBsaXN0IG9mIGtleXMKICAgICAqIEBwYXJhbSBhcnJheSAkYXJncyBPcHRpb25hbCBsaXN0IG9mIGFyZ3MKICAgICAqIEByZXR1cm4gbWl4ZWQgICAgICAgIEZ1bmN0aW9uIG1heSByZXR1cm4gYXJiaXRyYXJ5IGRhdGEgc28gdGhpcyBtZXRob2QgY2FuIHJldHVybgogICAgICogICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncywgYXJyYXlzLCBuZXN0ZWQgYXJyYXlzLCBldGMuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZmNhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZjYWxsKHN0cmluZyAkZm4sIGFycmF5ICRrZXlzID0gW10sIGFycmF5ICRhcmdzID0gW10pOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogVGhpcyBpcyBhIHJlYWQtb25seSB2YXJpYW50IG9mIHRoZSBGQ0FMTCBjb21tYW5kIHRoYXQgY2Fubm90IGV4ZWN1dGUgY29tbWFuZHMgdGhhdCBtb2RpZnkgZGF0YS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZuIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbgogICAgICogQHBhcmFtIGFycmF5ICRrZXlzIE9wdGlvbmFsIGxpc3Qgb2Yga2V5cwogICAgICogQHBhcmFtIGFycmF5ICRhcmdzIE9wdGlvbmFsIGxpc3Qgb2YgYXJncwogICAgICogQHJldHVybiBtaXhlZCAgICAgICAgRnVuY3Rpb24gbWF5IHJldHVybiBhcmJpdHJhcnkgZGF0YSBzbyB0aGlzIG1ldGhvZCBjYW4gcmV0dXJuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLCBhcnJheXMsIG5lc3RlZCBhcnJheXMsIGV0Yy4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9mY2FsbF9ybwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmNhbGxfcm8oc3RyaW5nICRmbiwgYXJyYXkgJGtleXMgPSBbXSwgYXJyYXkgJGFyZ3MgPSBbXSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBEZWxldGVzIGV2ZXJ5IGtleSBpbiBhbGwgUmVkaXMgZGF0YWJhc2VzCiAgICAgKiBAcGFyYW0gYm9vbCAkc3luYyBXaGV0aGVyIHRvIHBlcmZvcm0gdGhlIHRhc2sgaW4gYSBibG9ja2luZyBvciBub24tYmxvY2tpbmcgd2F5LgogICAgICogQHJldHVybiBSZWRpc3xib29sCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZmx1c2hhbGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZsdXNoQWxsKD9ib29sICRzeW5jID0gbnVsbCk6IFJlZGlzfGJvb2wge30KCiAgICAvKioKICAgICAqIERlbGV0ZXMgYWxsIHRoZSBrZXlzIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0YWJhc2UuCiAgICAgKiBAcGFyYW0gYm9vbCAkc3luYyBXaGV0aGVyIHRvIHBlcmZvcm0gdGhlIHRhc2sgaW4gYSBibG9ja2luZyBvciBub24tYmxvY2tpbmcgd2F5LgogICAgICogQHJldHVybiBSZWRpc3xib29sCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZmx1c2hkYgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmx1c2hEQig/Ym9vbCAkc3luYyA9IG51bGwpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBGdW5jdGlvbnMgaXMgYW4gQVBJIGZvciBtYW5hZ2luZyBjb2RlIHRvIGJlIGV4ZWN1dGVkIG9uIHRoZSBzZXJ2ZXIuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcGVyYXRpb24gVGhlIHN1YmNvbW1hbmQgeW91IGludGVuZCB0byBleGVjdXRlLiAgVmFsaWQgb3B0aW9ucyBhcmUgYXMgZm9sbG93cwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0xPQUQnICAgICAgLSBDcmVhdGUgYSBuZXcgbGlicmFyeSB3aXRoIHRoZSBnaXZlbiBsaWJyYXJ5IG5hbWUgYW5kIGNvZGUuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnREVMRVRFJyAgICAtIERlbGV0ZSB0aGUgZ2l2ZW4gbGlicmFyeS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMSVNUJyAgICAgIC0gUmV0dXJuIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gYWxsIHRoZSBsaWJyYXJpZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTVEFUUycgICAgIC0gUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGZ1bmN0aW9uIHJ1bm5pbmcKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdLSUxMJyAgICAgIC0gS2lsbCB0aGUgY3VycmVudCBydW5uaW5nIGZ1bmN0aW9uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRkxVU0gnICAgICAtIERlbGV0ZSBhbGwgdGhlIGxpYnJhcmllcwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RVTVAnICAgICAgLSBSZXR1cm4gYSBzZXJpYWxpemVkIHBheWxvYWQgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGxpYnJhcmllcwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JFU1RPUkUnICAgLSBSZXN0b3JlIHRoZSBsaWJyYXJpZXMgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIHBheWxvYWQKICAgICAqIEBwYXJhbSBtaXhlZCAuLi4kYXJncyBBZGRpdGlvbmFsIGFyZ3VtZW50cwogICAgICogQHJldHVybiBSZWRpc3xib29sfHN0cmluZ3xhcnJheSAgRGVwZW5kcyBvbiBzdWJjb21tYW5kLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2Z1bmN0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmdW5jdGlvbihzdHJpbmcgJG9wZXJhdGlvbiwgbWl4ZWQgLi4uJGFyZ3MpOiBSZWRpc3xib29sfHN0cmluZ3xhcnJheSB7fQoKICAgIC8qKgogICAgICogQWRkIG9uZSBvciBtb3JlIG1lbWJlcnMgdG8gYSBnZW9zcGFjaWFsIHNvcnRlZCBzZXQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgc29ydGVkIHNldCB0byBhZGQgZGF0YSB0by4KICAgICAqIEBwYXJhbSBmbG9hdCAkbG5nIFRoZSBsb25naXR1ZGUgb2YgdGhlIGZpcnN0IG1lbWJlcgogICAgICogQHBhcmFtIGZsb2F0ICRsYXQgVGhlIGxhdHRpdHVkZSBvZiB0aGUgZmlyc3QgbWVtYmVyLgogICAgICogQHBhcmFtIG1peGVkIC4uLiRvdGhlcl90cmlwbGVzX2FuZF9vcHRpb25zIFlvdSBjYW4gY29udGludWUgdG8gcGFzcyBsb25naXR1ZGUsIGxhdHRpdHVkZSwgYW5kIG1lbWJlcgogICAgICogICAgICAgICAgICAgICBhcmd1bWVudHMgdG8gYWRkIGFzIG1hbnkgbWVtYmVycyBhcyB5b3Ugd2lzaC4gIE9wdGlvbmFsbHksIHRoZSBmaW5hbCBhcmd1bWVudCBtYXkgYmUKICAgICAqICAgICAgICAgICAgICAgYSBzdHJpbmcgd2l0aCBvcHRpb25zIGZvciB0aGUgY29tbWFuZCBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIGFkZGVkIGVsZW1lbnRzIGlzIHJldHVybmVkLiAgSWYgdGhlICdDSCcgb3B0aW9uIGlzIHNwZWNpZmllZCwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBtZW1iZXJzICpjaGFuZ2VkKi4KICAgICAqIEBzZWUgUmVkaXMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIG9wdGlvbnMuCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmdlb0FkZCgnY2l0aWVzJywgLTEyMS44Mzc0LCAzOS43Mjg0LCAnQ2hpY28nLCAtMTIyLjAzMjE4LCAzNy4zMjIsICdDdXBlcnRpbm8nKTsKICAgICAqIEBleGFtcGxlICRyZWRpcy0+Z2VvYWRkKCdjaXRpZXMnLCAtMTIxLjgzNzQ3OCwgMzkuNzI4NDk0LCAnQ2hpY28nLCBbJ1hYJywgJ0NIJ10pOwogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2dlb2FkZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VvYWRkKHN0cmluZyAka2V5LCBmbG9hdCAkbG5nLCBmbG9hdCAkbGF0LCBzdHJpbmcgJG1lbWJlciwgbWl4ZWQgLi4uJG90aGVyX3RyaXBsZXNfYW5kX29wdGlvbnMpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gbWVtYmVycyBvZiBhIGdlb3NwYWNpYWxseSBlbmNvZGVkIHNvcnRlZCBzZXQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIFNvcnRlZCBzZXQgdG8gcXVlcnkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcmMgVGhlIGZpcnN0IG1lbWJlci4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRzdCBUaGUgc2Vjb25kIG1lbWJlci4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdW5pdCBXaGljaCB1bml0IHRvIHVzZSB3aGVuIGNvbXB1dGluZyBkaXN0YW5jZSwgZGVmYXVsdGluZyB0byBtZXRlcnMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIDxjb2RlPgogICAgICogICAgICAgICAgICAgICAgICAgICBNICAtIG1ldGVycwogICAgICogICAgICAgICAgICAgICAgICAgICBLTSAtIGtpbG9tZXRlcnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgRlQgLSBmZWV0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgIE1JIC0gbWlsZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgogICAgICogQHJldHVybiBSZWRpc3xmbG9hdHxmYWxzZSBUaGUgY2FsY3VsYXRlZCBkaXN0YW5jZSBpbiB3aGljaGV2ZXIgdW5pdHMgd2VyZSBzcGVjaWZpZWQgb3IgZmFsc2UKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb25lIG9yIGJvdGggbWVtYmVycyBkaWQgbm90IGV4aXN0LgogICAgICogQGV4YW1wbGUgJHJlZGlzLT5nZW9kaXN0KCdjaXRpZXMnLCAnQ2hpY28nLCAnQ3VwZXJ0aW5vJywgJ21pJyk7CiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZ2VvZGlzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VvZGlzdChzdHJpbmcgJGtleSwgc3RyaW5nICRzcmMsIHN0cmluZyAkZHN0LCA/c3RyaW5nICR1bml0ID0gbnVsbCk6IFJlZGlzfGZsb2F0fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBvbmUgb3IgbW9yZSBHZW9IYXNoIGVuY29kZWQgc3RyaW5ncyBmb3IgbWVtYmVycyBvZiB0aGUgc2V0LgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gcXVlcnkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lbWJlciBUaGUgZmlyc3QgbWVtYmVyIHRvIHJlcXVlc3QKICAgICAqIEBwYXJhbSBzdHJpbmcgLi4uJG90aGVyX21lbWJlcnMgT25lIG9yIG1vcmUgYWRkaXRpb25hbCBtZW1iZXJzIHRvIHJlcXVlc3QuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGZhbHNlICAgIEFuIGFycmF5IG9mIEdlb0hhc2ggZW5jb2RlZCB2YWx1ZXMuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZ2VvaGFzaAogICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HZW9oYXNoCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmdlb2hhc2goJ2NpdGllcycsICdDaGljbycsICdDdXBlcnRpbm8nKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlb2hhc2goc3RyaW5nICRrZXksIHN0cmluZyAkbWVtYmVyLCBzdHJpbmcgLi4uJG90aGVyX21lbWJlcnMpOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBsb25naXR1ZGUgYW5kIGxhdHRpdHVkZSBmb3Igb25lIG9yIG1vcmUgbWVtYmVycyBvZiBhIGdlb3NwYWNpYWxseSBlbmNvZGVkIHNvcnRlZCBzZXQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHNldCB0byBxdWVyeS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lbWJlciBUaGUgZmlyc3QgbWVtYmVyIHRvIHF1ZXJ5LgogICAgICogQHBhcmFtIHN0cmluZyAuLi4kb3RoZXJfbWVtYmVycyBPbmUgb3IgbW9yZSBtZW1iZXJzIHRvIHF1ZXJ5LgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxmYWxzZSBhcnJheSBvZiBsb25naXR1ZGUgYW5kIGxhdHRpdHVkZSBwYWlycy4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9nZW9wb3MKICAgICAqIEBleGFtcGxlICRyZWRpcy0+Z2VvcG9zKCdjaXRpZXMnLCAnU2VhdHRsZScsICdOZXcgWW9yaycpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VvcG9zKHN0cmluZyAka2V5LCBzdHJpbmcgJG1lbWJlciwgc3RyaW5nIC4uLiRvdGhlcl9tZW1iZXJzKTogUmVkaXN8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIG1lbWJlcnMgb2YgYSBnZW9zcGFjaWFsbHkgc29ydGVkIHNldCB0aGF0IGFyZSB3aXRoaW4gYSBjZXJ0YWluIHJhZGl1cyBvZiBhIGxvY2F0aW9uLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzZXQgdG8gcXVlcnkKICAgICAqIEBwYXJhbSBmbG9hdCAkbG5nIFRoZSBsb25naXR1ZGUgb2YgdGhlIGxvY2F0aW9uIHRvIHF1ZXJ5LgogICAgICogQHBhcmFtIGZsb2F0ICRsYXQgVGhlIGxhdGl0dWRlIG9mIHRoZSBsb2NhdGlvbiB0byBxdWVyeS4KICAgICAqIEBwYXJhbSBmbG9hdCAkcmFkaXVzIFRoZSByYWRpdXMgb2YgdGhlIGFyZWEgdG8gaW5jbHVkZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHVuaXQgVGhlIHVuaXQgb2YgdGhlIHByb3ZpZGVkIHJhZGl1cyAoZGVmYXVsdHMgdG8gJ21ldGVycykuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB7QGxpbmsgUmVkaXM6Omdlb2Rpc3R9IGZvciBwb3NzaWJsZSB1bml0cy4KICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBhcnJheSBvZiBvcHRpb25zIHRoYXQgbW9kaWZpZXMgaG93IHRoZSBjb21tYW5kIGJlaGF2ZXMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAkb3B0aW9ucyA9IFsKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXSVRIQ09PUkQnLCAgICAgIyBSZXR1cm4gbWVtYmVycyBhbmQgdGhlaXIgY29vcmRpbmF0ZXMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV0lUSERJU1QnLCAgICAgICMgUmV0dXJuIG1lbWJlcnMgYW5kIHRoZWlyIGRpc3RhbmNlcyBmcm9tIHRoZSBjZW50ZXIuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV0lUSEhBU0gnLCAgICAgICMgUmV0dXJuIG1lbWJlcnMgR2VvSGFzaCBzdHJpbmcuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQVNDJyB8ICdERVNDJywgICMgVGhlIHNvcnQgb3JkZXIgb2YgcmV0dXJuZWQgbWVtYmVycwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBMaW1pdCB0byBOIHJldHVybmVkIG1lbWJlcnMuICBPcHRpb25hbGx5IGEgdHdvIGVsZW1lbnQgYXJyYXkgbWF5IGJlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBhc3NlZCBhcyB0aGUgYExJTUlUYCBhcmd1bWVudCwgYW5kIHRoZSBgQU5ZYCBhcmd1bWVudC4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDT1VOVCcgPT4gWzxpbnQ+XSwgb3IgWzxpbnQ+LCA8Ym9vbD5dCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluc3RlYWQgb2YgcmV0dXJuaW5nIG1lbWJlcnMsIHN0b3JlIHRoZW0gaW4gdGhlIHNwZWNpZmllZCBrZXkuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU1RPUkUnID0+IDxzdHJpbmc+CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFN0b3JlIHRoZSBkaXN0YW5jZXMgaW4gdGhlIHNwZWNpZmllZCBrZXkKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTVE9SRURJU1QnID0+IDxzdHJpbmc+CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KICAgICAqIEByZXR1cm4gbWl4ZWQgVGhpcyBjb21tYW5kIGNhbiByZXR1cm4gdmFyaW91cyB0aGluZ3MsIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyBwYXNzZWQuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZ2VvcmFkaXVzCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmdlb3JhZGl1cygnY2l0aWVzJywgNDcuNjA4MDEzLCAtMTIyLjMzNTE2NywgMTAwMCwgJ2ttJyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW9yYWRpdXMoc3RyaW5nICRrZXksIGZsb2F0ICRsbmcsIGZsb2F0ICRsYXQsIGZsb2F0ICRyYWRpdXMsIHN0cmluZyAkdW5pdCwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBBIHJlYWRvbmx5IHZhcmlhbnQgb2YgYEdFT1JBRElVU2AgdGhhdCBtYXkgYmUgZXhlY3V0ZWQgb24gcmVwbGljYXMuCiAgICAgKiBAc2VlIFJlZGlzOjpnZW9yYWRpdXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdlb3JhZGl1c19ybyhzdHJpbmcgJGtleSwgZmxvYXQgJGxuZywgZmxvYXQgJGxhdCwgZmxvYXQgJHJhZGl1cywgc3RyaW5nICR1bml0LCBhcnJheSAkb3B0aW9ucyA9IFtdKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFNpbWlsYXIgdG8gYEdFT1JBRElVU2AgZXhjZXB0IGl0IHVzZXMgYSBtZW1iZXIgYXMgdGhlIGNlbnRlciBvZiB0aGUgcXVlcnkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBxdWVyeS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lbWJlciBUaGUgbWVtYmVyIHRvIHRyZWF0IGFzIHRoZSBjZW50ZXIgb2YgdGhlIHF1ZXJ5LgogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgVGhlIHJhZGl1cyBmcm9tIHRoZSBtZW1iZXIgdG8gaW5jbHVkZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHVuaXQgVGhlIHVuaXQgb2YgdGhlIHByb3ZpZGVkIHJhZGl1cwogICAgICogICAgICAgICAgICAgICAgICAgICAgICBTZWUge0BsaW5rIFJlZGlzOjpnZW9kaXN0fSBmb3IgcG9zc2libGUgdW5pdHMuCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgQW4gYXJyYXkgd2l0aCB2YXJpb3VzIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBjb21tYW5kJ3MgYmVoYXZpb3IuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB7QGxpbmsgUmVkaXM6Omdlb3JhZGl1c30gZm9yIG9wdGlvbnMuCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoaXMgY29tbWFuZCBjYW4gcmV0dXJuIHZhcmlvdXMgdGhpbmdzIGRlcGVuZGluZyBvbiBvcHRpb25zLgogICAgICogQGV4YW1wbGUgJHJlZGlzLT5nZW9yYWRpdXNieW1lbWJlcignY2l0aWVzJywgJ1NlYXR0bGUnLCAyMDAsICdtaScpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VvcmFkaXVzYnltZW1iZXIoc3RyaW5nICRrZXksIHN0cmluZyAkbWVtYmVyLCBmbG9hdCAkcmFkaXVzLCBzdHJpbmcgJHVuaXQsIGFycmF5ICRvcHRpb25zID0gW10pOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogVGhpcyBpcyB0aGUgcmVhZC1vbmx5IHZhcmlhbnQgb2YgYEdFT1JBRElVU0JZTUVNQkVSYCB0aGF0IGNhbiBiZSBydW4gb24gcmVwbGljYXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW9yYWRpdXNieW1lbWJlcl9ybyhzdHJpbmcgJGtleSwgc3RyaW5nICRtZW1iZXIsIGZsb2F0ICRyYWRpdXMsIHN0cmluZyAkdW5pdCwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBTZWFyY2ggYSBnZW9zcGFjaWFsIHNvcnRlZCBzZXQgZm9yIG1lbWJlcnMgaW4gdmFyaW91cyB3YXlzLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzZXQgdG8gcXVlcnkuCiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRwb3NpdGlvbiBFaXRoZXIgYSB0d28gZWxlbWVudCBhcnJheSB3aXRoIGxvbmdpdHVkZSBhbmQgbGF0dGl0dWRlLCBvcgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbWVtYmVyIG9mIHRoZSBzZXQuCiAgICAgKiBAcGFyYW0gYXJyYXl8aW50fGZsb2F0ICRzaGFwZSBFaXRoZXIgYSBudW1iZXIgcmVwcmVzZW50aW5lIHRoZSByYWRpdXMgb2YgYSBjaXJjbGUgdG8gc2VhcmNoLCBvcgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSB0d28gZWxlbWVudCBhcnJheSByZXByZXNlbnRpbmcgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgYSBib3gKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNlYXJjaC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHVuaXQgVGhlIHVuaXQgb2Ygb3VyIHNoYXBlLiAgU2VlIHtAbGluayBSZWRpczo6Z2VvZGlzdH0gZm9yIHBvc3NpYmxlIHVuaXRzLgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIEBzZWUge0BsaW5rIFJlZGlzOjpnZW9yYWRpdXN9IGZvciBvcHRpb25zLiAgTm90ZSB0aGF0IHRoZSBgU1RPUkVgCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyBjb21tYW5kLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2Vvc2VhcmNoKHN0cmluZyAka2V5LCBhcnJheXxzdHJpbmcgJHBvc2l0aW9uLCBhcnJheXxpbnR8ZmxvYXQgJHNoYXBlLCBzdHJpbmcgJHVuaXQsIGFycmF5ICRvcHRpb25zID0gW10pOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogU2VhcmNoIGEgZ2Vvc3BhY2lhbCBzb3J0ZWQgc2V0IGZvciBtZW1iZXJzIHdpdGhpbiBhIGdpdmVuIGFyZWEgb3IgcmFuZ2UsIHN0b3JpbmcgdGhlIHJlc3VsdHMgaW50bwogICAgICogYSBuZXcgc2V0LgogICAgICogQHBhcmFtIHN0cmluZyAkZHN0IFRoZSBkZXN0aW5hdGlvbiB3aGVyZSByZXN1bHRzIHdpbGwgYmUgc3RvcmVkLgogICAgICogQHBhcmFtIHN0cmluZyAkc3JjIFRoZSBrZXkgdG8gcXVlcnkuCiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRwb3NpdGlvbiBFaXRoZXIgYSB0d28gZWxlbWVudCBhcnJheSB3aXRoIGxvbmdpdHVkZSBhbmQgbGF0dGl0dWRlLCBvcgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbWVtYmVyIG9mIHRoZSBzZXQuCiAgICAgKiBAcGFyYW0gYXJyYXl8aW50fGZsb2F0ICRzaGFwZSBFaXRoZXIgYSBudW1iZXIgcmVwcmVzZW50aW5lIHRoZSByYWRpdXMgb2YgYSBjaXJjbGUgdG8gc2VhcmNoLCBvcgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSB0d28gZWxlbWVudCBhcnJheSByZXByZXNlbnRpbmcgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgYSBib3gKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNlYXJjaC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHVuaXQgVGhlIHVuaXQgb2Ygb3VyIHNoYXBlLiAgU2VlIHtAbGluayBSZWRpczo6Z2VvZGlzdH0gZm9yIHBvc3NpYmxlIHVuaXRzLgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAkb3B0aW9ucyA9IFsKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBU0MnIHwgJ0RFU0MnLCAgIyBUaGUgc29ydCBvcmRlciBvZiByZXR1cm5lZCBtZW1iZXJzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV0lUSERJU1QnICAgICAgICMgQWxzbyBzdG9yZSBkaXN0YW5jZXMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIExpbWl0IHRvIE4gcmV0dXJuZWQgbWVtYmVycy4gIE9wdGlvbmFsbHkgYSB0d28gZWxlbWVudCBhcnJheSBtYXkgYmUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGFzc2VkIGFzIHRoZSBgTElNSVRgIGFyZ3VtZW50LCBhbmQgdGhlIGBBTllgIGFyZ3VtZW50LgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NPVU5UJyA9PiBbPGludD5dLCBvciBbPGludD4sIDxib29sPl0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2Vvc2VhcmNoc3RvcmUoc3RyaW5nICRkc3QsIHN0cmluZyAkc3JjLCBhcnJheXxzdHJpbmcgJHBvc2l0aW9uLCBhcnJheXxpbnR8ZmxvYXQgJHNoYXBlLCBzdHJpbmcgJHVuaXQsIGFycmF5ICRvcHRpb25zID0gW10pOiBSZWRpc3xhcnJheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIGEgc3RyaW5nIGtleXMgdmFsdWUuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBxdWVyeQogICAgICogQHJldHVybiBtaXhlZCAgIFRoZSBrZXlzIHZhbHVlIG9yIGZhbHNlIGlmIGl0IGRpZCBub3QgZXhpc3QuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZ2V0CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmdldCgnZm9vJyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoc3RyaW5nICRrZXkpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiBvbiB0aGUgY29ubmVjdGlvbiwgaWYgYW55LgogICAgICogQHJldHVybiBtaXhlZCBUaGUgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gdXNlZCB0byBhdXRoZW50aWNhdGUgdGhlIGNvbm5lY3Rpb24uCiAgICAgKiBAc2VlIFJlZGlzOjphdXRoKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGgoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgYml0IGF0IGEgZ2l2ZW4gaW5kZXggaW4gYSBzdHJpbmcga2V5LgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gcXVlcnkuCiAgICAgKiBAcGFyYW0gaW50ICRpZHggVGhlIE50aCBiaXQgdGhhdCB3ZSB3YW50IHRvIHF1ZXJ5LgogICAgICogQGV4YW1wbGUgJHJlZGlzLT5nZXRiaXQoJ2JpdG1hcCcsIDEzMzcpOwogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2dldGJpdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qml0KHN0cmluZyAka2V5LCBpbnQgJGlkeCk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSB2YWx1ZSBvZiBhIGtleSBhbmQgb3B0aW9uYWxseSBzZXQgaXQncyBleHBpcmF0aW9uLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gcXVlcnkKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBPcHRpb25zIHRvIG1vZGlmeSBob3cgdGhlIGNvbW1hbmQgd29ya3MuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnMgPSBbCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICdFWCcgICAgID0+IDxzZWNvbmRzPiAgICAgICMgRXhwaXJlIGluIE4gc2Vjb25kcwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAnUFgnICAgICA9PiA8bWlsbGlzZWNvbmRzPiAjIEV4cGlyZSBpbiBOIG1pbGxpc2Vjb25kcwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAnRVhBVCcgICA9PiA8dGltZXN0YW1wPiAgICAjIEV4cGlyZSBhdCBhIHVuaXggdGltZXN0YW1wIChpbiBzZWNvbmRzKQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAnUFhBVCcgICA9PiA8bXN0aW1lc3RhbXA+ICAjIEV4cGlyZSBhdCBhIHVuaXggdGltZXN0YW1wIChpbiBtaWxsaXNlY29uZHMpOwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAnUEVSU0lTVCcgICAgICAgICAgICAgICAgICAjIFJlbW92ZSBhbnkgY29uZmlndXJlZCBleHBpcmF0aW9uIG9uIHRoZSBrZXkuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAqICAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CiAgICAgKiBAcmV0dXJuIFJlZGlzfHN0cmluZ3xib29sIFRoZSBrZXkncyB2YWx1ZSBvciBmYWxzZSBpZiBpdCBkaWRuJ3QgZXhpc3QuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tYW5kcy9nZXRleAogICAgICogQGV4YW1wbGUgJHJlZGlzLT5nZXRFeCgnbXlrZXknLCBbJ0VYJyA9PiA2MF0pOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXgoc3RyaW5nICRrZXksIGFycmF5ICRvcHRpb25zID0gW10pOiBSZWRpc3xzdHJpbmd8Ym9vbCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBkYXRhYmFzZSBudW1iZXIgUGhwUmVkaXMgdGhpbmtzIHdlJ3JlIGNvbm5lY3RlZCB0by4KICAgICAqIFRoaXMgdmFsdWUgaXMgdXBkYXRlZCBpbnRlcm5hbGx5IGluIFBocFJlZGlzIGVhY2ggdGltZSB7QGxpbmsgUmVkaXM6OnNlbGVjdH0gaXMgY2FsbGVkLgogICAgICogQHJldHVybiBpbnQgVGhlIGRhdGFiYXNlIHdlJ3JlIGNvbm5lY3RlZCB0by4KICAgICAqIEBzZWUgUmVkaXM6OnNlbGVjdCgpCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc2VsZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREQk51bSgpOiBpbnQge30KCiAgICAvKioKICAgICAqIEdldCBhIGtleSBmcm9tIFJlZGlzIGFuZCBkZWxldGUgaXQgaW4gYW4gYXRvbWljIG9wZXJhdGlvbi4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRvIGdldC9kZWxldGUuCiAgICAgKiBAcmV0dXJuIFJlZGlzfHN0cmluZ3xib29sIFRoZSB2YWx1ZSBvZiB0aGUga2V5IG9yIGZhbHNlIGlmIGl0IGRpZG4ndCBleGlzdC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9nZXRkZWwKICAgICAqIEBleGFtcGxlICRyZWRpcy0+Z2V0ZGVsKCd0b2tlbjoxMjMnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERlbChzdHJpbmcgJGtleSk6IFJlZGlzfHN0cmluZ3xib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGhvc3Qgb3IgVW5peCBzb2NrZXQgd2UgYXJlIGNvbm5lY3RlZCB0by4KICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBob3N0IG9yIFVuaXggc29ja2V0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SG9zdCgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbGFzdCBlcnJvciByZXR1cm5lZCB0byB1cyBmcm9tIFJlZGlzLCBpZiBhbnkuCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBlcnJvciBzdHJpbmcgb3IgTlVMTCBpZiB0aGVyZSBpcyBub25lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdEVycm9yKCk6ID9zdHJpbmcge30KCiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgY29ubmVjdGlvbiBpcyBpbiBBVE9NSUMsIE1VTFRJLCBvciBQSVBFTElORSBtb2RlCiAgICAgKiBAcmV0dXJuIGludCBUaGUgbW9kZSB3ZSdyZSBpbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZGUoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYSBjb25maWd1cmF0aW9uIHNldHRpbmcgYXMgc2V0IGJ5IFJlZGlzOjpzZXRPcHRpb24oKQogICAgICogQHJldHVybiBtaXhlZCBUaGUgc2V0dGluZyBpdHNlbGYgb3IgZmFsc2Ugb24gZmFpbHVyZQogICAgICogQHNlZSBSZWRpczo6c2V0T3B0aW9uKCkgZm9yIGEgZGV0YWlsZWQgbGlzdCBvZiBvcHRpb25zIGFuZCB0aGVpciB2YWx1ZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcHRpb24oaW50ICRvcHRpb24pOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gSUQsIGlmIHRoZXJlIGlzIG9uZS4KICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIElEIG9yIE5VTEwgaWYgd2UgZG9uJ3QgaGF2ZSBvbmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQZXJzaXN0ZW50SUQoKTogP3N0cmluZyB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBwb3J0IHdlIGFyZSBjb25uZWN0ZWQgdG8uICBUaGlzIG51bWJlciB3aWxsIGJlIHplcm8gaWYgd2UgYXJlIGNvbm5lY3RlZCB0byBhIHVuaXggc29ja2V0LgogICAgICogQHJldHVybiBpbnQgVGhlIHBvcnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQb3J0KCk6IGludCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgYSBzdWJzdHJpbmcgb2YgYSBzdHJpbmcgYnkgaW5kZXguCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHN0cmluZyB0byBxdWVyeS4KICAgICAqIEBwYXJhbSBpbnQgJHN0YXJ0IFRoZSB6ZXJvLWJhc2VkIHN0YXJ0aW5nIGluZGV4LgogICAgICogQHBhcmFtIGludCAkZW5kIFRoZSB6ZXJvLWJhc2VkIGVuZGluZyBpbmRleC4KICAgICAqIEByZXR1cm4gUmVkaXN8c3RyaW5nfGZhbHNlIFRoZSBzdWJzdHJpbmcgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9nZXRyYW5nZQogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+c2V0KCdzaWxseS13b3JkJywgJ1N1cGVyY2FsaWZyYWdpbGlzdGljZXhwaWFsaWRvY2lvdXMnKTsKICAgICAqIGVjaG8gJHJlZGlzLT5nZXRSYW5nZSgnc2lsbHktd29yZCcsIDAsIDQpIC4gIlxuIjsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJhbmdlKHN0cmluZyAka2V5LCBpbnQgJHN0YXJ0LCBpbnQgJGVuZCk6IFJlZGlzfHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBsb25nZXN0IGNvbW1vbiBzdWJzZXF1ZW5jZSBiZXR3ZWVuIHR3byBzdHJpbmcga2V5cy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleTEgVGhlIGZpcnN0IGtleSB0byBjaGVjawogICAgICogQHBhcmFtIHN0cmluZyAka2V5MiBUaGUgc2Vjb25kIGtleSB0byBjaGVjawogICAgICogQHBhcmFtIGFycmF5fG51bGwgJG9wdGlvbnMgQW4gb3B0aW9uYWwgYXJyYXkgb2YgbW9kaWZpZXJzIGZvciB0aGUgY29tYW5kLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnMgPSBbCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUlOTUFUQ0hMRU4nICA9PiBpbnQgICMgRXhjbHVkZSBtYXRjaGluZyBzdWJzdHJpbmdzIHRoYXQgYXJlIGxlc3MgdGhhbiB0aGlzIHZhbHVlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV0lUSE1BVENITEVOJyA9PiBib29sICMgV2hldGhlciBlYWNoIG1hdGNoIHNob3VsZCBhbHNvIGluY2x1ZGUgaXRzIGxlbmd0aC4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMRU4nICAgICAgICAgICAgICAgICAgIyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBzdWJzZXF1ZW5jZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lEWCcgICAgICAgICAgICAgICAgICAjIEVhY2ggcmV0dXJuZWQgbWF0Y2ggd2lsbCBpbmNsdWRlIHRoZSBpbmRleGVzIHdoZXJlIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1hdGNoIG9jY3VycyBpbiBlYWNoIHN0cmluZy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgogICAgICogICAgICAgICAgICAgICAgICAgICAgICBOT1RFOiAgJ0xFTicgY2Fubm90IGJlIHVzZWQgd2l0aCAnSURYJy4KICAgICAqIEByZXR1cm4gUmVkaXN8c3RyaW5nfGFycmF5fGludHxmYWxzZSBWYXJpb3VzIHJlcGx5IHR5cGVzIGRlcGVuZGluZyBvbiBvcHRpb25zLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2xjcwogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+c2V0KCdzZXExJywgJ2d0YWdnY2NjZ2NhY2dndGN0dHRhYXRndGF0Y2NjdGd0dHRhY2NhdGdjY2F0YWNjdGdhZ2NnY2F0YWNnYycpOwogICAgICogJHJlZGlzLT5zZXQoJ3NlcTInLCAnYWFjdGNnZ2NnY2dhZ3RhY2NhZ2djY2FhZ2d0Y2d0dGNjYWdhZ2NhYWFnYWN0Y2d0Z2NjY2NnY3RnYWdjJyk7CiAgICAgKiBlY2hvICRyZWRpcy0+bGNzKCdzZXExJywgJ3NlcTInKSAuICJcbiI7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsY3Moc3RyaW5nICRrZXkxLCBzdHJpbmcgJGtleTIsID9hcnJheSAkb3B0aW9ucyA9IG51bGwpOiBSZWRpc3xzdHJpbmd8YXJyYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGN1cnJlbnRseSBzZXQgcmVhZCB0aW1lb3V0IG9uIHRoZSBjb25uZWN0aW9uLgogICAgICogQHJldHVybiBmbG9hdCBUaGUgdGltZW91dC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlYWRUaW1lb3V0KCk6IGZsb2F0IHt9CgogICAgLyoqCiAgICAgKiBTZXRzIGEga2V5IGFuZCByZXR1cm5zIGFueSBwcmV2aW91c2x5IHNldCB2YWx1ZSwgaWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0ZWQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBzZXQuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIGtleSB0by4KICAgICAqIEByZXR1cm4gUmVkaXN8c3RyaW5nfGZhbHNlIFRoZSBvbGQgdmFsdWUgb2YgdGhlIGtleSBvciBmYWxzZSBpZiBpdCBkaWRuJ3QgZXhpc3QuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvZ2V0c2V0CiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT5nZXRzZXQoJ2NhcHRhaW4nLCAnUGlrZScpOwogICAgICogJHJlZGlzLT5nZXRzZXQoJ2NhcHRhaW4nLCAnS2lyaycpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0c2V0KHN0cmluZyAka2V5LCBtaXhlZCAkdmFsdWUpOiBSZWRpc3xzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIGFueSBzZXQgY29ubmVjdGlvbiB0aW1lb3V0CiAgICAgKiBAcmV0dXJuIGZsb2F0fGZhbHNlIFRoZSBjdXJyZW50bHkgc2V0IHRpbWVvdXQgb3IgZmFsc2Ugb24gZmFpbHVyZSAoZS5nLiB3ZSBhcmVuJ3QgY29ubmVjdGVkKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVvdXQoKTogZmxvYXR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQgYW5kIHJlY2VpdmVkIG9uIHRoZSBzb2NrZXQuCiAgICAgKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IGluIHRoZSBmb3JtIFskc2VudF9ieXRlcywgJHJlY2VpdmVkX2J5dGVzXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHJhbnNmZXJyZWRCeXRlcygpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogUmVzZXQgdGhlIG51bWJlciBvZiBieXRlcyBzZW50IGFuZCByZWNlaXZlZCBvbiB0aGUgc29ja2V0LgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhclRyYW5zZmVycmVkQnl0ZXMoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIG9uZSBvciBtb3JlIGZpZWxkcyBmcm9tIGEgaGFzaC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaGFzaCBrZXkgaW4gcXVlc3Rpb24uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZCBUaGUgZmlyc3QgZmllbGQgdG8gcmVtb3ZlCiAgICAgKiBAcGFyYW0gc3RyaW5nIC4uLiRvdGhlcl9maWVsZHMgT25lIG9yIG1vcmUgYWRkaXRpb25hbCBmaWVsZHMgdG8gcmVtb3ZlLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgICAgIFRoZSBudW1iZXIgb2YgZmllbGRzIGFjdHVhbGx5IHJlbW92ZWQuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaGRlbAogICAgICogQGV4YW1wbGUgJHJlZGlzLT5oRGVsKCdjb21tdW5pY2F0aW9uJywgJ0FsaWNlJywgJ0JvYicpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaERlbChzdHJpbmcgJGtleSwgc3RyaW5nICRmaWVsZCwgc3RyaW5nIC4uLiRvdGhlcl9maWVsZHMpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIENoZWNrcyB3aGV0aGVyIGEgZmllbGQgZXhpc3RzIGluIGEgaGFzaC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaGFzaCB0byBxdWVyeS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkIFRoZSBmaWVsZCB0byBjaGVjawogICAgICogQHJldHVybiBSZWRpc3xib29sICAgVHJ1ZSBpZiBpdCBleGlzdHMsIGZhbHNlIGlmIG5vdC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9oZXhpc3RzCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmhFeGlzdHMoJ2NvbW11bmljYXRpb24nLCAnQWxpY2UnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhFeGlzdHMoc3RyaW5nICRrZXksIHN0cmluZyAkZmllbGQpOiBSZWRpc3xib29sIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGhHZXQoc3RyaW5nICRrZXksIHN0cmluZyAkbWVtYmVyKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJlYWQgZXZlcnkgZmllbGQgYW5kIHZhbHVlIGZyb20gYSBoYXNoLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBoYXNoIHRvIHF1ZXJ5LgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxmYWxzZSBBbGwgZmllbGRzIGFuZCB2YWx1ZXMgb3IgZmFsc2UgaWYgdGhlIGtleSBkaWRuJ3QgZXhpc3QuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaGdldGFsbAogICAgICogQGV4YW1wbGUgJHJlZGlzLT5oZ2V0YWxsKCdteWhhc2gnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhHZXRBbGwoc3RyaW5nICRrZXkpOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSW5jcmVtZW50IGEgaGFzaCBmaWVsZCdzIHZhbHVlIGJ5IGFuIGludGVnZXIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaGFzaCB0byBtb2RpZnkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkIFRoZSBmaWVsZCB0byBpbmNyZW1lbnQKICAgICAqIEBwYXJhbSBpbnQgJHZhbHVlIEhvdyBtdWNoIHRvIGluY3JlbWVudCB0aGUgdmFsdWUuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBmaWVsZC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9oaW5jcmJ5CiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT5oTVNldCgncGxheWVyOjEnLCBbJ25hbWUnID0+ICdBbGljZScsICdzY29yZScgPT4gMF0pOwogICAgICogJHJlZGlzLT5oaW5jcmJ5KCdwbGF5ZXI6MScsICdzY29yZScsIDEwKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhJbmNyQnkoc3RyaW5nICRrZXksIHN0cmluZyAkZmllbGQsIGludCAkdmFsdWUpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEluY3JlbWVudCBhIGhhc2ggZmllbGQgYnkgYSBmbG9hdGluZyBwb2ludCB2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBoYXNoIHdpdGggdGhlIGZpZWxkIHRvIGluY3JlbWVudC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkIFRoZSBmaWVsZCB0byBpbmNyZW1lbnQuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGZsb2F0fGZhbHNlIFRoZSBmaWVsZCB2YWx1ZSBhZnRlciBpbmNyZW1lbnRlZC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9oaW5jcmJ5ZmxvYXQKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPmhpbmNyYnlmbG9hdCgnbnVtYmVycycsICd0YXUnLCAyICogMy4xNDE1OTI2KTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhJbmNyQnlGbG9hdChzdHJpbmcgJGtleSwgc3RyaW5nICRmaWVsZCwgZmxvYXQgJHZhbHVlKTogUmVkaXN8ZmxvYXR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIGFsbCBvZiB0aGUgZmllbGRzIG9mIGEgaGFzaC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaGFzaCB0byBxdWVyeS4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8ZmFsc2UgVGhlIGZpZWxkcyBpbiB0aGUgaGFzaCBvciBmYWxzZSBpZiB0aGUgaGFzaCBkb2Vzbid0IGV4aXN0LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2hrZXlzCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmhrZXlzKCdteWhhc2gnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhLZXlzKHN0cmluZyAka2V5KTogUmVkaXN8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpbiBhIGhhc2guCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaGxlbgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBoYXNoIHRvIGNoZWNrLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBmaWVsZHMgb3IgZmFsc2UgaWYgdGhlIGtleSBkaWRuJ3QgZXhpc3QuCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmhsZW4oJ215aGFzaCcpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaExlbihzdHJpbmcgJGtleSk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogR2V0IG9uZSBvciBtb3JlIGZpZWxkcyBmcm9tIGEgaGFzaC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaGFzaCB0byBxdWVyeS4KICAgICAqIEBwYXJhbSBhcnJheSAkZmllbGRzIE9uZSBvciBtb3JlIGZpZWxkcyB0byBxdWVyeSBpbiB0aGUgaGFzaC4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8ZmFsc2UgVGhlIGZpZWxkcyBhbmQgdmFsdWVzIG9yIGZhbHNlIGlmIHRoZSBrZXkgZGlkbid0IGV4aXN0LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2htZ2V0CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmhNR2V0KCdwbGF5ZXI6MScsIFsnbmFtZScsICdzY29yZSddKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhNZ2V0KHN0cmluZyAka2V5LCBhcnJheSAkZmllbGRzKTogUmVkaXN8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEFkZCBvciB1cGRhdGUgb25lIG9yIG1vcmUgaGFzaCBmaWVsZHMgYW5kIHZhbHVlcwogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBoYXNoIHRvIGNyZWF0ZS91cGRhdGUKICAgICAqIEBwYXJhbSBhcnJheSAkZmllbGR2YWxzIEFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggZmllbGRzIGFuZCB0aGVpciB2YWx1ZXMuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGJvb2wgVHJ1ZSBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaG1zZXQKICAgICAqIEBleGFtcGxlICRyZWRpcy0+aG1zZXQoJ3VwZGF0ZXMnLCBbJ3N0YXR1cycgPT4gJ3N0YXJ0aW5nJywgJ2VsYXBzZWQnID0+IDBdKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhNc2V0KHN0cmluZyAka2V5LCBhcnJheSAkZmllbGR2YWxzKTogUmVkaXN8Ym9vbCB7fQoKICAgIC8qKgogICAgICogR2V0IG9uZSBvciBtb3JlIHJhbmRvbSBmaWVsZCBmcm9tIGEgaGFzaC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaGFzaCB0byBxdWVyeS4KICAgICAqIEBwYXJhbSBhcnJheXxudWxsICRvcHRpb25zIEFuIGFycmF5IG9mIG9wdGlvbnMgdG8gbW9kaWZ5IGhvdyB0aGUgY29tbWFuZCBiZWhhdmVzLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnMgPSBbCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ09VTlQnICAgICAgPT4gaW50ICAjIEFuIG9wdGlvbmFsIG51bWJlciBvZiBmaWVsZHMgdG8gcmV0dXJuLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dJVEhWQUxVRVMnID0+IGJvb2wgIyBBbHNvIHJldHVybiB0aGUgZmllbGQgdmFsdWVzLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICBdOwogICAgICogICAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fHN0cmluZyBPbmUgb3IgbW9yZSByYW5kb20gZmllbGRzIChhbmQgcG9zc2libHkgdmFsdWVzKS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9ocmFuZGZpZWxkCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmhyYW5kZmllbGQoJ3NldHRpbmdzJyk7CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmhyYW5kZmllbGQoJ3NldHRpbmdzJywgWydjb3VudCcgPT4gMiwgJ3dpdGh2YWx1ZXMnID0+IHRydWVdKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhSYW5kRmllbGQoc3RyaW5nICRrZXksID9hcnJheSAkb3B0aW9ucyA9IG51bGwpOiBSZWRpc3xzdHJpbmd8YXJyYXkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gaFNldChzdHJpbmcgJGtleSwgc3RyaW5nICRtZW1iZXIsIG1peGVkICR2YWx1ZSk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogU2V0IGEgaGFzaCBmaWVsZCBhbmQgdmFsdWUsIGJ1dCBvbmx5IGlmIHRoYXQgZmllbGQgZG9lcyBub3QgZXhpc3QKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaGFzaCB0byB1cGRhdGUuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZCBUaGUgdmFsdWUgdG8gc2V0LgogICAgICogQHJldHVybiBSZWRpc3xib29sIFRydWUgaWYgdGhlIGZpZWxkIHdhcyBzZXQgYW5kIGZhbHNlIGlmIG5vdC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9oc2V0bngKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPmhzZXRueCgncGxheWVyOjEnLCAnbG9jaycsICdlbmFibGVkJyk7CiAgICAgKiAkcmVkaXMtPmhzZXRueCgncGxheWVyOjEnLCAnbG9jaycsICdlbmFibGVkJyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoU2V0Tngoc3RyaW5nICRrZXksIHN0cmluZyAkZmllbGQsIHN0cmluZyAkdmFsdWUpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHN0cmluZyBsZW5ndGggb2YgYSBoYXNoIGZpZWxkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGhhc2ggdG8gcXVlcnkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZCBUaGUgZmllbGQgdG8gcXVlcnkuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgZmllbGQgb3IgZmFsc2UuCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzID0gbmV3IFJlZGlzKFsnaG9zdCcgPT4gJ2xvY2FsaG9zdCddKTsKICAgICAqICRyZWRpcy0+ZGVsKCdoYXNoJyk7CiAgICAgKiAkcmVkaXMtPmhtc2V0KCdoYXNoJywgWyc1MGJ5dGVzJyA9PiBzdHJfcmVwZWF0KCdhJywgNTApXSk7CiAgICAgKiAkcmVkaXMtPmhzdHJsZW4oJ2hhc2gnLCAnNTBieXRlcycpOwogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2hzdHJsZW4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhTdHJMZW4oc3RyaW5nICRrZXksIHN0cmluZyAkZmllbGQpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldCBhbGwgb2YgdGhlIHZhbHVlcyBmcm9tIGEgaGFzaC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaGFzaCB0byBxdWVyeS4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8ZmFsc2UgVGhlIHZhbHVlcyBmcm9tIHRoZSBoYXNoLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2h2YWxzCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmh2YWxzKCdwbGF5ZXI6MScpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaFZhbHMoc3RyaW5nICRrZXkpOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSXRlcmF0ZSBvdmVyIHRoZSBmaWVsZHMgYW5kIHZhbHVlcyBvZiBhIGhhc2ggaW4gYW4gaW5jcmVtZW50YWwgZmFzaGlvbi4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9oc2NhbgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NjYW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgaGFzaCB0byBxdWVyeS4KICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkaXRlcmF0b3IgVGhlIHNjYW4gaXRlcmF0b3IsIHdoaWNoIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byBOVUxMIGJlZm9yZSB0aGUgZmlyc3QgY2FsbC4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHZhbHVlIHdpbGwgYmUgdXBkYXRlZCBhZnRlciBldmVyeSBjYWxsIHRvIGhzY2FuLCB1bnRpbCBpdCByZWFjaGVzIHplcm8KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFuaW5nIHRoZSBzY2FuIGlzIGNvbXBsZXRlLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwYXR0ZXJuIEFuIG9wdGlvbmFsIGdsb2Itc3R5bGUgcGF0dGVybiB0byBmaWx0ZXIgZmllbGRzIHdpdGguCiAgICAgKiBAcGFyYW0gaW50ICRjb3VudCBBbiBvcHRpb25hbCBoaW50IHRvIFJlZGlzIGFib3V0IGhvdyBtYW55IGZpZWxkcyBhbmQgdmFsdWVzIHRvIHJldHVybiBwZXIgSFNDQU4uCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGJvb2wgQW4gYXJyYXkgd2l0aCBhIHN1YnNldCBvZiBmaWVsZHMgYW5kIHZhbHVlcy4KICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMgPSBuZXcgUmVkaXMoWydob3N0JyA9PiAnbG9jYWxob3N0J10pOwogICAgICogJHJlZGlzLT5kZWwoJ2JpZy1oYXNoJyk7CiAgICAgKiBmb3IgKCRpID0gMDsgJGkgPCAxMDAwOyAkaSsrKSB7CiAgICAgKiAgICAgJGZpZWxkc1siZmllbGQ6JGkiXSA9ICJ2YWx1ZTokaSI7CiAgICAgKiB9CiAgICAgKiAkcmVkaXMtPmhtc2V0KCdiaWctaGFzaCcsICRmaWVsZHMpOwogICAgICogJGl0ID0gbnVsbDsKICAgICAqIGRvIHsKICAgICAqICAgICAvLyBTY2FuIHRoZSBoYXNoIGJ1dCBsaW1pdCBpdCB0byBmaWVsZHMgdGhhdCBtYXRjaCAnKjoxPzMnCiAgICAgKiAgICAgJGZpZWxkcyA9ICRyZWRpcy0+aHNjYW4oJ2JpZy1oYXNoJywgJGl0LCAnKjoxPzMnKTsKICAgICAqICAgICBmb3JlYWNoICgkZmllbGRzIGFzICRmaWVsZCA9PiAkdmFsdWUpIHsKICAgICAqICAgICAgICAgZWNobyAiWyRmaWVsZF0gPT4gJHZhbHVlXG4iOwogICAgICogICAgIH0KICAgICAqIH0gd2hpbGUgKCRpdCAhPSAwKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhzY2FuKHN0cmluZyAka2V5LCA/aW50ICYkaXRlcmF0b3IsID9zdHJpbmcgJHBhdHRlcm4gPSBudWxsLCBpbnQgJGNvdW50ID0gMCk6IFJlZGlzfGFycmF5fGJvb2wge30KCiAgICAvKioKICAgICAqIEluY3JlbWVudCBhIGtleSdzIHZhbHVlLCBvcHRpb25hbGx5IGJ5IGEgc3BlY2lmYyBhbW91bnQuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaW5jcgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2luY3JieQogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gaW5jcmVtZW50CiAgICAgKiBAcGFyYW0gaW50ICRieSBBbiBvcHRpb25hbCBhbW91bnQgdG8gaW5jcmVtZW50IGJ5LgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgIFRoZSBuZXcgdmFsdWUgb2YgdGhlIGtleSBhZnRlciBpbmNyZW1lbnRlZC4KICAgICAqIEBleGFtcGxlICRyZWRpcy0+aW5jcignbXljb3VudGVyJyk7CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmluY3IoJ215Y291bnRlcicsIDEwKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluY3Ioc3RyaW5nICRrZXksIGludCAkYnkgPSAxKTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnQgYSBrZXkgYnkgYSBzcGVjaWZpYyBpbnRlZ2VyIHZhbHVlCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaW5jcmJ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBpbmNyZW1lbnQuCiAgICAgKiBAcGFyYW0gaW50ICR2YWx1ZSBUaGUgYW1vdW50IHRvIGluY3JlbWVudC4KICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnNldCgncHJpbWVzJywgMik7CiAgICAgKiAkcmVkaXMtPmluY3JieSgncHJpbWVzJywgMSk7CiAgICAgKiAkcmVkaXMtPmluY3JieSgncHJpbWVzJywgMik7CiAgICAgKiAkcmVkaXMtPmluY3JieSgncHJpbWVzJywgMik7CiAgICAgKiAkcmVkaXMtPmluY3JieSgncHJpbWVzJywgNCk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmNyQnkoc3RyaW5nICRrZXksIGludCAkdmFsdWUpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEluY3JlbWVudCBhIG51bWVyaWMga2V5IGJ5IGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBpbmNyZW1lbnQKICAgICAqIEBwYXJhbSBmbG9hdCAkdmFsdWUgSG93IG11Y2ggdG8gaW5jcmVtZW50IChvciBkZWNyZW1lbnQpIHRoZSB2YWx1ZS4KICAgICAqIEByZXR1cm4gUmVkaXN8ZmxvYXR8ZmFsc2UgVGhlIG5ldyB2YWx1ZSBvZiB0aGUga2V5IG9yIGZhbHNlIGlmIHRoZSBrZXkgZGlkbid0IGNvbnRhaW4gYSBzdHJpbmcuCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT5pbmNyYnlmbG9hdCgndGF1JywgMy4xNDE1OTI2KTsKICAgICAqICRyZWRpcy0+aW5jcmJ5ZmxvYXQoJ3RhdScsIDMuMTQxNTkyNik7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmNyQnlGbG9hdChzdHJpbmcgJGtleSwgZmxvYXQgJHZhbHVlKTogUmVkaXN8ZmxvYXR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb25uZWN0ZWQgcmVkaXMtc2VydmVyLiAgSWYgbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8KICAgICAqIHRoaXMgZnVuY3Rpb24sIHJlZGlzIHdpbGwgcmV0dXJuIGV2ZXJ5IGluZm8gZmllbGQuICBBbHRlcm5hdGl2ZWx5IHlvdSBtYXkgcGFzcyBhIHNwZWNpZmljCiAgICAgKiBzZWN0aW9uIHlvdSB3YW50IHJldHVybmVkIChlLmcuICdzZXJ2ZXInLCBvciAnbWVtb3J5JykgdG8gcmVjZWl2ZSBvbmx5IGluZm9ybWF0aW9uIHBlcnRhaW5pbmcKICAgICAqIHRvIHRoYXQgc2VjdGlvbi4KICAgICAqIElmIGNvbm5lY3RlZCB0byBSZWRpcyBzZXJ2ZXIgPj0gNy4wLjAgeW91IG1heSBwYXNzIG11bHRpcGxlIG9wdGlvbmFsIHNlY3Rpb25zLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2luZm8vCiAgICAgKiBAcGFyYW0gc3RyaW5nIC4uLiRzZWN0aW9ucyBPcHRpb25hbCBzZWN0aW9uKHMpIHlvdSB3aXNoIFJlZGlzIHNlcnZlciB0byByZXR1cm4uCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvKHN0cmluZyAuLi4kc2VjdGlvbnMpOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgd2UgYXJlIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8gYSBSZWRpcyBpbnN0YW5jZS4KICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHdlIGFyZSwgZmFsc2UgaWYgbm90CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0Nvbm5lY3RlZCgpOiBib29sIHt9CgogICAgLyoqIEByZXR1cm4gUmVkaXN8YXJyYXl8ZmFsc2UgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlzKHN0cmluZyAkcGF0dGVybikge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gbEluc2VydChzdHJpbmcgJGtleSwgc3RyaW5nICRwb3MsIG1peGVkICRwaXZvdCwgbWl4ZWQgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGxlbmdodCBvZiBhIGxpc3QuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGxpc3QKICAgICAqIEByZXR1cm4gUmVkaXN8aW50fGZhbHNlIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3Qgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxMZW4oc3RyaW5nICRrZXkpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIE1vdmUgYW4gZWxlbWVudCBmcm9tIG9uZSBsaXN0IGludG8gYW5vdGhlci4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHNyYyBUaGUgc291cmNlIGxpc3QuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkc3QgVGhlIGRlc3RpbmF0aW9uIGxpc3QKICAgICAqIEBwYXJhbSBzdHJpbmcgJHdoZXJlZnJvbSBXaGVyZSBpbiB0aGUgc291cmNlIGxpc3QgdG8gcmV0cmlldmUgdGhlIGVsZW1lbnQuICBUaGlzIGNhbiBiZSBlaXRoZXIKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIGBSZWRpczo6TEVGVGAsIG9yIGBSZWRpczo6UklHSFRgLgogICAgICogQHBhcmFtIHN0cmluZyAkd2hlcmV0byBXaGVyZSBpbiB0aGUgZGVzdGluYXRpb24gbGlzdCB0byBwdXQgdGhlIGVsZW1lbnQuICBUaGlzIGNhbiBiZSBlaXRoZXIKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIGBSZWRpczo6TEVGVGAsIG9yIGBSZWRpczo6UklHSFRgLgogICAgICogQHJldHVybiBSZWRpc3xzdHJpbmd8ZmFsc2UgVGhlIGVsZW1lbnQgcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2UgbGlzdC4KICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnJQdXNoKCdudW1iZXJzJywgJ29uZScsICd0d28nLCAndGhyZWUnKTsKICAgICAqICRyZWRpcy0+bE1vdmUoJ251bWJlcnMnLCAnb2RkcycsIFJlZGlzOjpMRUZULCBSZWRpczo6TEVGVCk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsTW92ZShzdHJpbmcgJHNyYywgc3RyaW5nICRkc3QsIHN0cmluZyAkd2hlcmVmcm9tLCBzdHJpbmcgJHdoZXJldG8pOiBSZWRpc3xzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIE1vdmUgYW4gZWxlbWVudCBmcm9tIG9uZSBsaXN0IHRvIGFub3RoZXIsIGJsb2NraW5nIHVwIHRvIGEgdGltZW91dCB1bnRpbCBhbiBlbGVtZW50IGlzIGF2YWlsYWJsZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHNyYyBUaGUgc291cmNlIGxpc3QKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRzdCBUaGUgZGVzdGluYXRpb24gbGlzdAogICAgICogQHBhcmFtIHN0cmluZyAkd2hlcmVmcm9tIFdoZXJlIGluIHRoZSBzb3VyY2UgbGlzdCB0byBleHRyYWN0IHRoZSBlbGVtZW50LgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIC0gYFJlZGlzOjpMRUZUYCwgb3IgYFJlZGlzOjpSSUdIVGAuCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3aGVyZXRvIFdoZXJlIGluIHRoZSBkZXN0aW5hdGlvbiBsaXN0IHRvIHB1dCB0aGUgZWxlbWVudC4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAtIGBSZWRpczo6TEVGVGAsIG9yIGBSZWRpczo6UklHSFRgLgogICAgICogQHBhcmFtIGZsb2F0ICR0aW1lb3V0IEhvdyBsb25nIHRvIGJsb2NrIGZvciBhbiBlbGVtZW50LgogICAgICogQHJldHVybiBSZWRpc3xzdHJpbmd8ZmFsc2UKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPmxQdXNoKCdudW1iZXJzJywgJ29uZScpOwogICAgICogJHJlZGlzLT5ibG1vdmUoJ251bWJlcnMnLCAnb2RkcycsIFJlZGlzOjpMRUZULCBSZWRpczo6TEVGVCAxLjApOwogICAgICogLy8gVGhpcyBjYWxsIHdpbGwgYmxvY2ssIGlmIG5vIGFkZGl0aW9uYWwgZWxlbWVudHMgYXJlIGluICdudW1iZXJzJwogICAgICogJHJlZGlzLT5ibG1vdmUoJ251bWJlcnMnLCAnb2RkcycsIFJlZGlzOjpMRUZULCBSZWRpczo6TEVGVCwgMS4wKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJsbW92ZShzdHJpbmcgJHNyYywgc3RyaW5nICRkc3QsIHN0cmluZyAkd2hlcmVmcm9tLCBzdHJpbmcgJHdoZXJldG8sIGZsb2F0ICR0aW1lb3V0KTogUmVkaXN8c3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQb3Agb25lIG9yIG1vcmUgZWxlbWVudHMgb2ZmIGEgbGlzdC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgbGlzdCB0byBwb3AgZnJvbS4KICAgICAqIEBwYXJhbSBpbnQgJGNvdW50IE9wdGlvbmFsIG51bWJlciBvZiBlbGVtZW50cyB0byByZW1vdmUuICBCeSBkZWZhdWx0IG9uZSBlbGVtZW50IGlzIHBvcHBlZC4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbHxzdHJpbmd8YXJyYXkgV2lsbCByZXR1cm4gdGhlIGVsZW1lbnQocykgcG9wcGVkIGZyb20gdGhlIGxpc3Qgb3IgZmFsc2UvTlVMTAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vbmUgd2FzIHJlbW92ZWQuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvbHBvcAogICAgICogQGV4YW1wbGUgJHJlZGlzLT5scG9wKCdteWxpc3QnKTsKICAgICAqIEBleGFtcGxlICRyZWRpcy0+bHBvcCgnbXlsaXN0JywgNCk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsUG9wKHN0cmluZyAka2V5LCBpbnQgJGNvdW50ID0gMCk6IFJlZGlzfGJvb2x8c3RyaW5nfGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgaW5kZXggb2YgYW4gZWxlbWVudCBpbiBhIGxpc3QuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGxpc3QgdG8gcXVlcnkuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLgogICAgICogQHBhcmFtIGFycmF5fG51bGwgJG9wdGlvbnMgT3B0aW9ucyB0byBjb25maWd1cmUgaG93IHRoZSBjb21tYW5kIG9wZXJhdGVzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAkb3B0aW9ucyA9IFsKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSG93IG1hbnkgbWF0Y2hlcyB0byByZXR1cm4uICBCeSBkZWZhdWx0IGEgc2luZ2xlIG1hdGNoIGlzIHJldHVybmVkLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJZiBjb3VudCBpcyBzZXQgdG8gemVybywgaXQgbWVhbnMgdW5saW1pdGVkLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NPVU5UJyA9PiA8bnVtLW1hdGNoZXM+CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNwZWNpZnkgd2hpY2ggbWF0Y2ggeW91IHdhbnQgcmV0dXJuZWQuICBgUkFOS2AgMSBtZWFucyAidGhlIGZpcnN0IG1hdGNoIgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyIG1lYW5zIHRoZSBzZWNvbmQsIGFuZCBzbyBvbi4gIElmIHBhc3NlZCBhcyBhIG5lZ2F0aXZlIG51bWJlciB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUkFOSyBpcyBjb21wdXRlZCByaWdodCB0byBsZWZ0LCBzbyBhIGBSQU5LYCBvZiAtMSBtZWFucyAidGhlIGxhc3QgbWF0Y2giLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JBTksnICA9PiA8cmFuaz4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBhcmd1bWVudCBhbGxvd3MgeW91IHRvIGxpbWl0IGhvdyBtYW55IGVsZW1lbnRzIFJlZGlzIHdpbGwgc2VhcmNoIGJlZm9yZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm5pbmcuICBUaGlzIGlzIHVzZWZ1bCB0byBwcmV2ZW50IFJlZGlzIHNlYXJjaGluZyB2ZXJ5IGxvbmcgbGlzdHMgd2hpbGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYmxvY2tpbmcgdGhlIGNsaWVudC4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNQVhMRU4gPT4gPG1heC1sZW4+CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KICAgICAqIEByZXR1cm4gUmVkaXN8bnVsbHxib29sfGludHxhcnJheSBSZXR1cm5zIG9uZSBvciBtb3JlIG9mIHRoZSBtYXRjaGluZyBpbmRleGVzLCBvciBudWxsL2ZhbHNlIGlmIG5vbmUgd2VyZSBmb3VuZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxQb3Moc3RyaW5nICRrZXksIG1peGVkICR2YWx1ZSwgP2FycmF5ICRvcHRpb25zID0gbnVsbCk6IFJlZGlzfG51bGx8Ym9vbHxpbnR8YXJyYXkge30KCiAgICAvKioKICAgICAqIFByZXBlbmQgb25lIG9yIG1vcmUgZWxlbWVudHMgdG8gYSBsaXN0LgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBsaXN0IHRvIHByZXBlbmQuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGVsZW1lbnRzIE9uZSBvciBtb3JlIGVsZW1lbnRzIHRvIHByZXBlbmQuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbmV3IGxlbmd0aCBvZiB0aGUgbGlzdCBhZnRlciBwcmVwZW5kaW5nLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2xwdXNoCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmxQdXNoKCdteWxpc3QnLCAnY2F0JywgJ2JlYXInLCAnYWxpZ2F0b3InKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxQdXNoKHN0cmluZyAka2V5LCBtaXhlZCAuLi4kZWxlbWVudHMpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEFwcGVuZCBvbmUgb3IgbW9yZSBlbGVtZW50cyB0byBhIGxpc3QuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGxpc3QgdG8gYXBwZW5kIHRvLgogICAgICogQHBhcmFtIG1peGVkICRlbGVtZW50cyBvbmUgb3IgbW9yZSBlbGVtZW50cyB0byBhcHBlbmQuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbmV3IGxlbmd0aCBvZiB0aGUgbGlzdAogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3JwdXNoCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnJQdXNoKCdteWxpc3QnLCAneHJheScsICd5YW5rZWUnLCAnemVicmEnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJQdXNoKHN0cmluZyAka2V5LCBtaXhlZCAuLi4kZWxlbWVudHMpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFByZXBlbmQgYW4gZWxlbWVudCB0byBhIGxpc3QgYnV0IG9ubHkgaWYgdGhlIGxpc3QgZXhpc3RzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBwcmVwZW5kIHRvLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgdmFsdWUgdG8gcHJlcGVuZC4KICAgICAqIEByZXR1cm4gUmVkaXN8aW50fGZhbHNlIFRoZSBuZXcgbGVuZ3RoIG9mIHRoZSBsaXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbFB1c2h4KHN0cmluZyAka2V5LCBtaXhlZCAkdmFsdWUpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEFwcGVuZCBhbiBlbGVtZW50IHRvIGEgbGlzdCBidXQgb25seSBpZiB0aGUgbGlzdCBleGlzdHMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRvIHByZXBlbmQgdG8uCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSB0byBwcmVwZW5kLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIG5ldyBsZW5ndGggb2YgdGhlIGxpc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByUHVzaHgoc3RyaW5nICRrZXksIG1peGVkICR2YWx1ZSk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogU2V0IGEgbGlzdCBlbGVtZW50IGF0IGFuIGluZGV4IHRvIGEgc3BlY2lmaWMgdmFsdWUuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGxpc3QgdG8gbW9kaWZ5LgogICAgICogQHBhcmFtIGludCAkaW5kZXggVGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IHRvIGNoYW5nZS4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIG5ldyB2YWx1ZS4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCBUcnVlIGlmIHRoZSBsaXN0IHdhcyBtb2RpZmllZC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9sc2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsU2V0KHN0cmluZyAka2V5LCBpbnQgJGluZGV4LCBtaXhlZCAkdmFsdWUpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgbGFzdCB0aW1lIFJlZGlzJyBkYXRhYmFzZSB3YXMgcGVyc2lzdGVkIHRvIGRpc2suCiAgICAgKiBAcmV0dXJuIGludCBUaGUgdW5peCB0aW1lc3RhbXAgb2YgdGhlIGxhc3Qgc2F2ZSB0aW1lCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvbGFzdHNhdmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxhc3RTYXZlKCk6IGludCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBlbGVtZW50IG9mIGEgbGlzdCBieSBpdHMgaW5kZXguCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBxdWVyeQogICAgICogQHBhcmFtIGludCAkaW5kZXggVGhlIGluZGV4IHRvIGNoZWNrLgogICAgICogQHJldHVybiBtaXhlZCBUaGUgaW5kZXggb3IgTlVMTC9mYWxzZSBpZiB0aGUgZWxlbWVudCB3YXMgbm90IGZvdW5kLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGluZGV4KHN0cmluZyAka2V5LCBpbnQgJGluZGV4KTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIGVsZW1lbnRzIGZyb20gYSBsaXN0LgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBsaXN0IHRvIHF1ZXJ5LgogICAgICogQHBhcmFtIGludCAkc3RhcnQgVGhlIGJlZ2lubmluZyBpbmRleCB0byByZXRyaWV2ZS4gIFRoaXMgbnVtYmVyIGNhbiBiZSBuZWdhdGl2ZQogICAgICogICAgICAgICAgICAgICAgICAgICAgbWVhbmluZyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgICAgKiBAcGFyYW0gaW50ICRlbmQgVGhlIGVuZCBpbmRleCB0byByZXRyaWV2ZS4gIFRoaXMgY2FuIGFsc28gYmUgbmVnYXRpdmUgdG8gc3RhcnQKICAgICAqICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8ZmFsc2UgVGhlIHJhbmdlIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIGluZGV4ZXMuCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPmxyYW5nZSgnbXlsaXN0JywgMCwgLTEpOyAgLy8gdGhlIHdob2xlIGxpc3QKICAgICAqIEBleGFtcGxlICRyZWRpcy0+bHJhbmdlKCdteWxpc3QnLCAtMiwgLTEpOyAvLyB0aGUgbGFzdCB0d28gZWxlbWVudHMgaW4gdGhlIGxpc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBscmFuZ2Uoc3RyaW5nICRrZXksIGludCAkc3RhcnQsIGludCAkZW5kKTogUmVkaXN8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBvbmUgb3IgbW9yZSBtYXRjaGluZyBlbGVtZW50cyBmcm9tIGEgbGlzdC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgbGlzdCB0byB0cnVuY2F0ZS4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIHZhbHVlIHRvIHJlbW92ZS4KICAgICAqIEBwYXJhbSBpbnQgJGNvdW50IEhvdyBtYW55IGVsZW1lbnRzIG1hdGNoaW5nIHRoZSB2YWx1ZSB0byByZW1vdmUuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHJlbW92ZWQuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvbHJlbQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbHJlbShzdHJpbmcgJGtleSwgbWl4ZWQgJHZhbHVlLCBpbnQgJGNvdW50ID0gMCk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVHJpbSBhIGxpc3QgdG8gYSBzdWJyYW5nZSBvZiBlbGVtZW50cy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgbGlzdCB0byB0cmltCiAgICAgKiBAcGFyYW0gaW50ICRzdGFydCBUaGUgc3RhcnRpbmcgaW5kZXggdG8ga2VlcAogICAgICogQHBhcmFtIGludCAkZW5kIFRoZSBlbmRpbmcgaW5kZXggdG8ga2VlcC4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCB0cnVlIGlmIHRoZSBsaXN0IHdhcyB0cmltbWVkLgogICAgICogQGV4YW1wbGUgJHJlZGlzLT5sdHJpbSgnbXlsaXN0JywgMCwgMyk7ICAvLyBLZWVwIHRoZSBmaXJzdCBmb3VyIGVsZW1lbnRzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsdHJpbShzdHJpbmcgJGtleSwgaW50ICRzdGFydCwgaW50ICRlbmQpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBHZXQgb25lIG9yZSBtb3JlIHN0cmluZyBrZXlzLgogICAgICogQHBhcmFtIGFycmF5ICRrZXlzIFRoZSBrZXlzIHRvIHJldHJpZXZlCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5IGFuIGFycmF5IG9mIGtleXMgd2l0aCB0aGVpciB2YWx1ZXMuCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPm1nZXQoWydrZXkxJywgJ2tleTInXSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtZ2V0KGFycmF5ICRrZXlzKTogUmVkaXN8YXJyYXkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gbWlncmF0ZSgKICAgICAgICBzdHJpbmcgJGhvc3QsCiAgICAgICAgaW50ICRwb3J0LAogICAgICAgIHN0cmluZ3xhcnJheSAka2V5LAogICAgICAgIGludCAkZHN0ZGIsCiAgICAgICAgaW50ICR0aW1lb3V0LAogICAgICAgIGJvb2wgJGNvcHkgPSBmYWxzZSwKICAgICAgICBib29sICRyZXBsYWNlID0gZmFsc2UsCiAgICAgICAgI1tcU2Vuc2l0aXZlUGFyYW1ldGVyXSBtaXhlZCAkY3JlZGVudGlhbHMgPSBudWxsCiAgICApOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBNb3ZlIGEga2V5IHRvIGEgZGlmZmVyZW50IGRhdGFiYXNlIG9uIHRoZSBzYW1lIHJlZGlzIGluc3RhbmNlLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gbW92ZQogICAgICogQHJldHVybiBSZWRpc3xib29sIFRydWUgaWYgdGhlIGtleSB3YXMgbW92ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vdmUoc3RyaW5nICRrZXksIGludCAkaW5kZXgpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXQgb25lIG9yZSBtb3JlIHN0cmluZyBrZXlzLgogICAgICogQHBhcmFtIGFycmF5ICRrZXlfdmFsdWVzIEFuIGFycmF5IHdpdGgga2V5cyBhbmQgdGhlaXIgdmFsdWVzLgogICAgICogQHJldHVybiBSZWRpc3xib29sIFRydWUgaWYgdGhlIGtleXMgY291bGQgYmUgc2V0LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL21zZXQKICAgICAqIEBleGFtcGxlICRyZWRpcy0+bVNldChbJ2ZvbycgPT4gJ2JhcicsICdiYXonID0+ICdib3AnXSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtc2V0KGFycmF5ICRrZXlfdmFsdWVzKTogUmVkaXN8Ym9vbCB7fQoKICAgIC8qKgogICAgICogU2V0IG9uZSBvcmUgbW9yZSBzdHJpbmcga2V5cyBidXQgb25seSBpZiBub25lIG9mIHRoZSBrZXkgZXhpc3QuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleV92YWx1ZXMgQW4gYXJyYXkgb2Yga2V5cyB3aXRoIHRoZWlyIHZhbHVlcy4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCBUcnVlIGlmIHRoZSBrZXlzIHdlcmUgc2V0IGFuZCBmYWxzZSBpZiBub3QuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvbXNldG54CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPm1zZXRueChbJ2ZvbycgPT4gJ2JhcicsICdiYXonID0+ICdib3AnXSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtc2V0bngoYXJyYXkgJGtleV92YWx1ZXMpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBCZWdpbiBhIHRyYW5zYWN0aW9uLgogICAgICogQHBhcmFtIGludCAkdmFsdWUgVGhlIHR5cGUgb2YgdHJhbnNhY3Rpb24gdG8gc3RhcnQuICBUaGlzIGNhbiBlaXRoZXIgYmUgYFJlZGlzOjpNVUxUSWAgb3IKICAgICAqICAgICAgICAgICAgICAgICAgICBgUmVkaXM6OlBJUEVMSU5FJy4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCBUcnVlIGlmIHRoZSB0cmFuc2FjdGlvbiBjb3VsZCBiZSBzdGFydGVkLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL211bHRpCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT5tdWx0aSgpOwogICAgICogJHJlZGlzLT5zZXQoJ2ZvbycsICdiYXInKTsKICAgICAqICRyZWRpcy0+Z2V0KCdmb28nKTsKICAgICAqICRyZWRpcy0+ZXhlYygpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVsdGkoaW50ICR2YWx1ZSA9IFJlZGlzOjpNVUxUSSk6IGJvb2x8UmVkaXMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2JqZWN0KHN0cmluZyAkc3ViY29tbWFuZCwgc3RyaW5nICRrZXkpOiBSZWRpc3xpbnR8c3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3BlbihzdHJpbmcgJGhvc3QsIGludCAkcG9ydCA9IDYzNzksIGZsb2F0ICR0aW1lb3V0ID0gMCwgP3N0cmluZyAkcGVyc2lzdGVudF9pZCA9IG51bGwsIGludCAkcmV0cnlfaW50ZXJ2YWwgPSAwLCBmbG9hdCAkcmVhZF90aW1lb3V0ID0gMCwgP2FycmF5ICRjb250ZXh0ID0gbnVsbCk6IGJvb2wge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gcGNvbm5lY3Qoc3RyaW5nICRob3N0LCBpbnQgJHBvcnQgPSA2Mzc5LCBmbG9hdCAkdGltZW91dCA9IDAsID9zdHJpbmcgJHBlcnNpc3RlbnRfaWQgPSBudWxsLCBpbnQgJHJldHJ5X2ludGVydmFsID0gMCwgZmxvYXQgJHJlYWRfdGltZW91dCA9IDAsID9hcnJheSAkY29udGV4dCA9IG51bGwpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgdGhlIGV4cGlyYXRpb24gZnJvbSBhIGtleS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRvIG9wZXJhdGUgYWdhaW5zdC4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCBUcnVlIGlmIGEgdGltZW91dCB3YXMgcmVtb3ZlZCBhbmQgZmFsc2UgaWYgaXQgd2FzIG5vdCBvciB0aGUga2V5IGRpZG4ndCBleGlzdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBlcnNpc3Qoc3RyaW5nICRrZXkpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiAgU2V0cyBhbiBleHBpcmF0aW9uIGluIG1pbGxpc2Vjb25kcyBvbiBhIGdpdmVuIGtleS4gIElmIGNvbm5lY3RlZCB0byBSZWRpcyA+PSA3LjAuMAogICAgICogIHlvdSBjYW4gcGFzcyBhbiBvcHRpb25hbCBtb2RlIGFyZ3VtZW50IHRoYXQgbW9kaWZpZXMgaG93IHRoZSBjb21tYW5kIHdpbGwgZXhlY3V0ZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRvIHNldCBhbiBleHBpcmF0aW9uIG9uLgogICAgICogQHBhcmFtIGludCAkdGltZW91dCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBhZnRlciB3aGljaCBrZXkgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG1vZGUgQSB0d28gY2hhcmFjdGVyIG1vZGlmaWVyIHRoYXQgY2hhbmdlcyBob3cgdGhlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCB3b3Jrcy4KICAgICAqIEByZXR1cm4gYm9vbCAgIFRydWUgaWYgYW4gZXhwaXJ5IHdhcyBzZXQgb24gdGhlIGtleSwgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAqIEBzZWUgUmVkaXM6OmV4cGlyZSgpIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBtb2RlIGFyZ3VtZW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGV4cGlyZShzdHJpbmcgJGtleSwgaW50ICR0aW1lb3V0LCA/c3RyaW5nICRtb2RlID0gbnVsbCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFNldCBhIGtleSdzIGV4cGlyYXRpb24gdG8gYSBzcGVjaWZpYyBVbml4IFRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMuICBJZiBjb25uZWN0ZWQgdG8KICAgICAqIFJlZGlzID49IDcuMC4wIHlvdSBjYW4gcGFzcyBhbiBvcHRpb25hbCAnbW9kZScgYXJndW1lbnQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBzZXQgYW4gZXhwaXJhdGlvbiBvbi4KICAgICAqIEBwYXJhbSBpbnQgJHRpbWVzdGFtcCBUaGUgdW5peCB0aW1lc3RhbXAgdG8gZXhwaXJlIGF0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRtb2RlIEEgdHdvIGNoYXJhY3RlciBtb2RpZmllciB0aGF0IGNoYW5nZXMgaG93IHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgd29ya3MuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGJvb2wgICBUcnVlIGlmIGFuIGV4cGlyYXRpb24gd2FzIHNldCBvbiB0aGUga2V5LCBmYWxzZSBvdGhlcndpc2UuCiAgICAgKiBAc2VlIFJlZGlzOjpleHBpcmUoKSBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbW9kZSBhcmd1bWVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBleHBpcmVBdChzdHJpbmcgJGtleSwgaW50ICR0aW1lc3RhbXAsID9zdHJpbmcgJG1vZGUgPSBudWxsKTogUmVkaXN8Ym9vbCB7fQoKICAgIC8qKgogICAgICogQWRkIG9uZSBvciBtb3JlIGVsZW1lbnRzIHRvIGEgUmVkaXMgSHlwZXJMb2dMb2cga2V5CiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvcGZhZGQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IGluIHF1ZXN0aW9uLgogICAgICogQHBhcmFtIGFycmF5ICRlbGVtZW50cyBPbmUgb3IgbW9yZSBlbGVtZW50cyB0byBhZGQuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludCBSZXR1cm5zIDEgaWYgdGhlIHNldCB3YXMgYWx0ZXJlZCwgYW5kIHplcm8gaWYgbm90LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGZhZGQoc3RyaW5nICRrZXksIGFycmF5ICRlbGVtZW50cyk6IFJlZGlzfGludCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGNhcmRpbmFsaXR5IG9mIGEgUmVkaXMgSHlwZXJMb2dMb2cga2V5LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3BmY291bnQKICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGtleV9vcl9rZXlzIEVpdGhlciBvbmUga2V5IG9yIGFuIGFycmF5IG9mIGtleXMKICAgICAqIEByZXR1cm4gUmVkaXN8aW50fGZhbHNlIFRoZSBlc3RpbWF0ZWQgY2FyZGluYWxpdHkgb2YgdGhlIHNldC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBmY291bnQoYXJyYXl8c3RyaW5nICRrZXlfb3Jfa2V5cyk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogTWVyZ2Ugb25lIG9yIG1vcmUgc291cmNlIEh5cGVyTG9nTG9nIHNldHMgaW50byBhIGRlc3RpbmF0aW9uIHNldC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9wZm1lcmdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkc3QgVGhlIGRlc3RpbmF0aW9uIGtleS4KICAgICAqIEBwYXJhbSBhcnJheSAkc3Jja2V5cyBPbmUgb3IgbW9yZSBzb3VyY2Uga2V5cy4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCBBbHdheXMgcmV0dXJucyB0cnVlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGZtZXJnZShzdHJpbmcgJGRzdCwgYXJyYXkgJHNyY2tleXMpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBQSU5HIHRoZSByZWRpcyBzZXJ2ZXIgd2l0aCBhbiBvcHRpb25hbCBzdHJpbmcgYXJndW1lbnQuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvcGluZwogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRtZXNzYWdlIEFuIG9wdGlvbmFsIHN0cmluZyBtZXNzYWdlIHRoYXQgUmVkaXMgd2lsbCByZXBseSB3aXRoLCBpZiBwYXNzZWQuCiAgICAgKiBAcmV0dXJuIFJlZGlzfHN0cmluZ3xmYWxzZSBJZiBwYXNzZWQgbm8gbWVzc2FnZSwgdGhpcyBjb21tYW5kIHdpbGwgc2ltcGx5IHJldHVybiBgdHJ1ZWAuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBhIG1lc3NhZ2UgaXMgcGFzc2VkLCBpdCB3aWxsIHJldHVybiB0aGUgbWVzc2FnZS4KICAgICAqIEBleGFtcGxlICRyZWRpcy0+cGluZygpOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT5waW5nKCdiZWVwIGJvb3AnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBpbmcoP3N0cmluZyAkbWVzc2FnZSA9IG51bGwpOiBSZWRpc3xzdHJpbmd8Ym9vbCB7fQoKICAgIC8qKgogICAgICogRW50ZXIgaW50byBwaXBlbGluZSBtb2RlLgogICAgICogUGlwZWxpbmUgbW9kZSBpcyB0aGUgaGlnaGVzdCBwZXJmb3JtYW5jZSB3YXkgdG8gc2VuZCBtYW55IGNvbW1hbmRzIHRvIFJlZGlzCiAgICAgKiBhcyB0aGV5IGFyZSBhZ2dyZWdhdGVkIGludG8gb25lIHN0cmVhbSBvZiBjb21tYW5kcyBhbmQgdGhlbiBhbGwgc2VudCBhdCBvbmNlCiAgICAgKiB3aGVuIHRoZSB1c2VyIGNhbGxzIFJlZGlzOjpleGVjKCkuCiAgICAgKiBOT1RFOiAgVGhhdCB0aGlzIGlzIHNob3J0aGFuZCBmb3IgUmVkaXM6Om11bHRpKFJlZGlzOjpQSVBFTElORSkKICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCBUaGUgcmVkaXMgb2JqZWN0IGlzIHJldHVybmVkLCB0byBmYWNpbGl0YXRlIG1ldGhvZCBjaGFpbmluZy4KICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnBpcGVsaW5lKCkKICAgICAqICAgICAgIC0+c2V0KCdmb28nLCAnYmFyJykKICAgICAqICAgICAgIC0+ZGVsKCdteWxpc3QnKQogICAgICogICAgICAgLT5ycHVzaCgnbXlsaXN0JywgJ2EnLCAnYicsICdjJykKICAgICAqICAgICAgIC0+ZXhlYygpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGlwZWxpbmUoKTogYm9vbHxSZWRpcyB7fQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBvcGVuKHN0cmluZyAkaG9zdCwgaW50ICRwb3J0ID0gNjM3OSwgZmxvYXQgJHRpbWVvdXQgPSAwLCA/c3RyaW5nICRwZXJzaXN0ZW50X2lkID0gbnVsbCwgaW50ICRyZXRyeV9pbnRlcnZhbCA9IDAsIGZsb2F0ICRyZWFkX3RpbWVvdXQgPSAwLCA/YXJyYXkgJGNvbnRleHQgPSBudWxsKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogU2V0IGEga2V5IHdpdGggYW4gZXhwaXJhdGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcwogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gc2V0CiAgICAgKiBAcGFyYW0gaW50ICRleHBpcmUgVGhlIFRUTCB0byBzZXQsIGluIG1pbGxpc2Vjb25kcy4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIHZhbHVlIHRvIHNldCB0aGUga2V5IHRvLgogICAgICogQHJldHVybiBSZWRpc3xib29sIFRydWUgaWYgdGhlIGtleSBjb3VsZCBiZSBzZXQuCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnBzZXRleCgnbXlrZXknLCAxMDAwLCAnbXl2YWwnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBzZXRleChzdHJpbmcgJGtleSwgaW50ICRleHBpcmUsIG1peGVkICR2YWx1ZSk6IFJlZGlzfGJvb2wge30KCiAgICAvKioKICAgICAqIFN1YnNjcmliZSB0byBvbmUgb3IgbW9yZSBnbG9iLXN0eWxlIHBhdHRlcm5zCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhdHRlcm5zIE9uZSBvciBtb3JlIHBhdHRlcm5zIHRvIHN1YnNjcmliZSB0by4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2IgQSBjYWxsYmFjayB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHJlZGlzLCAkY2hhbm5lbCwgJG1lc3NhZ2UpIHsgfQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2RlPgogICAgICogQHJldHVybiBib29sIFRydWUgaWYgd2Ugd2VyZSBzdWJzY3JpYmVkLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3BzdWJzY3JpYmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBzdWJzY3JpYmUoYXJyYXkgJHBhdHRlcm5zLCBjYWxsYWJsZSAkY2IpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBHZXQgYSBrZXlzIHRpbWUgdG8gbGl2ZSBpbiBtaWxsaXNlY29uZHMuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBjaGVjay4KICAgICAqIEByZXR1cm4gUmVkaXN8aW50fGZhbHNlIFRoZSBrZXkncyBUVEwgb3Igb25lIG9mIHR3byBzcGVjaWFsIHZhbHVlcyBpZiBpdCBoYXMgbm9uZS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgLTEgLSBUaGUga2V5IGhhcyBubyBUVEwuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtMiAtIFRoZSBrZXkgZGlkIG5vdCBleGlzdC4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9wdHRsCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnB0dGwoJ3R0bC1rZXknKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB0dGwoc3RyaW5nICRrZXkpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFB1Ymxpc2ggYSBtZXNzYWdlIHRvIGEgcHVic3ViIGNoYW5uZWwKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9wdWJsaXNoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjaGFubmVsIFRoZSBjaGFubmVsIHRvIHB1Ymxpc2ggdG8uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIFRoZSBtZXNzYWdlIGl0c2VsZi4KICAgICAqIEByZXR1cm4gUmVkaXN8aW50fGZhbHNlIFRoZSBudW1iZXIgb2Ygc3Vic2NyaWJlZCBjbGllbnRzIHRvIHRoZSBnaXZlbiBjaGFubmVsLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHVibGlzaChzdHJpbmcgJGNoYW5uZWwsIHN0cmluZyAkbWVzc2FnZSk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwdWJzdWIoc3RyaW5nICRjb21tYW5kLCBtaXhlZCAkYXJnID0gbnVsbCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBVbnN1YnNjcmliZSBmcm9tIG9uZSBvciBtb3JlIGNoYW5uZWxzIGJ5IHBhdHRlcm4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9wdW5zdWJzY3JpYmUKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zdWJzY3JpYmUKICAgICAqIEBzZWUgUmVkaXM6OnN1YnNjcmliZSgpCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhdHRlcm5zIE9uZSBvciBtb3JlIGdsb2Itc3R5bGUgcGF0dGVybnMgb2YgY2hhbm5lbCBuYW1lcy4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8Ym9vbCAgVGhlIGFycmF5IG9mIHN1YnNjcmliZWQgcGF0dGVybnMgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1bnN1YnNjcmliZShhcnJheSAkcGF0dGVybnMpOiBSZWRpc3xhcnJheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBQb3Agb25lIG9yIG1vcmUgZWxlbWVudHMgZnJvbSB0aGUgZW5kIG9mIGEgbGlzdC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBBIHJlZGlzIExJU1Qga2V5IG5hbWUuCiAgICAgKiBAcGFyYW0gaW50ICRjb3VudCBUaGUgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gcG9wIGF0IG9uY2UuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBOT1RFOiAgVGhlIGBjb3VudGAgYXJndW1lbnQgcmVxdWlyZXMgUmVkaXMgPj0gNi4yLjAKICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8c3RyaW5nfGJvb2wgT25lIG9yZSBtb3JlIHBvcHBlZCBlbGVtZW50cyBvciBmYWxzZSBpZiBhbGwgd2VyZSBlbXB0eS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9ycG9wCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnJQb3AoJ215bGlzdCcpOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT5yUG9wKCdteWxpc3QnLCA0KTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJQb3Aoc3RyaW5nICRrZXksIGludCAkY291bnQgPSAwKTogUmVkaXN8YXJyYXl8c3RyaW5nfGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybiBhIHJhbmRvbSBrZXkgZnJvbSB0aGUgY3VycmVudCBkYXRhYmFzZQogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3JhbmRvbWtleQogICAgICogQHJldHVybiBSZWRpc3xzdHJpbmd8ZmFsc2UgQSByYW5kb20ga2V5IG5hbWUgb3IgZmFsc2UgaWYgbm8ga2V5cyBleGlzdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmFuZG9tS2V5KCk6IFJlZGlzfHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZSBhbnkgYXJiaXRyYXJ5IFJlZGlzIGNvbW1hbmQgYnkgbmFtZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbW1hbmQgVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZQogICAgICogQHBhcmFtIG1peGVkICRhcmdzIE9uZSBvciBtb3JlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjb21tYW5kLgogICAgICogQHJldHVybiBtaXhlZCBDYW4gcmV0dXJuIGFueSBudW1iZXIgb2YgdGhpbmdzIGRlcGVuZGluZyBvbiBjb21tYW5kIGV4ZWN1dGVkLgogICAgICogQGV4YW1wbGUgJHJlZGlzLT5yYXdDb21tYW5kKCdkZWwnLCAnbXlzdHJpbmcnLCAnbXlsaXN0Jyk7CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnJhd0NvbW1hbmQoJ3NldCcsICdteXN0cmluZycsICdteXZhbHVlJyk7CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnJhd0NvbW1hbmQoJ3JwdXNoJywgJ215bGlzdCcsICdvbmUnLCAndHdvJywgJ3RocmVlJyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByYXdjb21tYW5kKHN0cmluZyAkY29tbWFuZCwgbWl4ZWQgLi4uJGFyZ3MpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogVW5jb25kaXRpb25hbGx5IHJlbmFtZSBhIGtleSBmcm9tICRvbGRfbmFtZSB0byAkbmV3X25hbWUKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9yZW5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9sZF9uYW1lIFRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZSBrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5ld19uYW1lIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGtleQogICAgICogQHJldHVybiBSZWRpc3xib29sIFRydWUgaWYgdGhlIGtleSB3YXMgcmVuYW1lZCBvciBmYWxzZSBpZiBub3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW5hbWUoc3RyaW5nICRvbGRfbmFtZSwgc3RyaW5nICRuZXdfbmFtZSk6IFJlZGlzfGJvb2wge30KCiAgICAvKioKICAgICAqIFJlbmFtZXMgJGtleV9zcmMgdG8gJGtleV9kc3QgYnV0IG9ubHkgaWYgbmV3a2V5IGRvZXMgbm90IGV4aXN0LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3JlbmFtZW54CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXlfc3JjIFRoZSBzb3VyY2Uga2V5IG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleV9kc3QgVGhlIGRlc3RpbmF0aW9uIGtleSBuYW1lLgogICAgICogQHJldHVybiBSZWRpc3xib29sIFRydWUgaWYgdGhlIGtleSB3YXMgcmVuYW1lZCwgZmFsc2UgaWYgbm90LgogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+c2V0KCdzcmMnLCAnc3JjX2tleScpOwogICAgICogJHJlZGlzLT5zZXQoJ2V4aXN0aW5nLWRzdCcsICdpX2V4aXN0Jyk7CiAgICAgKiAkcmVkaXMtPnJlbmFtZW54KCdzcmMnLCAnZHN0Jyk7CiAgICAgKiAkcmVkaXMtPnJlbmFtZW54KCdkc3QnLCAnZXhpc3RpbmctZHN0Jyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW5hbWVOeChzdHJpbmcgJGtleV9zcmMsIHN0cmluZyAka2V5X2RzdCk6IFJlZGlzfGJvb2wge30KCiAgICAvKioKICAgICAqIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbi4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCBTaG91bGQgYWx3YXlzIHJldHVybiB0cnVlIHVubGVzcyB0aGVyZSBpcyBhbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc2V0KCk6IFJlZGlzfGJvb2wge30KCiAgICAvKioKICAgICAqIFJlc3RvcmUgYSBrZXkgYnkgdGhlIGJpbmFyeSBwYXlsb2FkIGdlbmVyYXRlZCBieSB0aGUgRFVNUCBjb21tYW5kLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBuYW1lIG9mIHRoZSBrZXkgeW91IHdpc2ggdG8gY3JlYXRlLgogICAgICogQHBhcmFtIGludCAkdHRsIFdoYXQgUmVkaXMgc2hvdWxkIHNldCB0aGUga2V5J3MgVFRMIChpbiBtaWxsaXNlY29uZHMpIHRvIG9uY2UgaXQgaXMgY3JlYXRlZC4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgWmVybyBtZWFucyBubyBUVEwgYXQgYWxsLgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUgVGhlIHNlcmlhbGl6ZWQgYmluYXJ5IHZhbHVlIG9mIHRoZSBzdHJpbmcgKGdlbmVyYXRlZCBieSBEVU1QKS4KICAgICAqIEBwYXJhbSBhcnJheXxudWxsICRvcHRpb25zIEFuIGFycmF5IG9mIGFkZGl0aW9uYWwgb3B0aW9ucyB0aGF0IG1vZGlmaWVzIGhvdyB0aGUgY29tbWFuZCBvcGVyYXRlcy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICRvcHRpb25zID0gWwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FCU1RUTCcgICAgICAgICAgIyBJZiB0aGlzIGlzIHByZXNlbnQsIHRoZSBgJHR0bGAgcHJvdmlkZWQgYnkgdGhlIHVzZXIgc2hvdWxkCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJlIGFuIGFic29sdXRlIHRpbWVzdGFtcCwgaW4gbWlsbGlzZWNvbmRzKCkKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSRVBMQUNFJyAgICAgICAgICMgVGhpcyBmbGFnIGluc3RydWN0cyBSZWRpcyB0byBzdG9yZSB0aGUga2V5IGV2ZW4gaWYgYSBrZXkgd2l0aAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSURMRVRJTUUnID0+IGludCAjIFRlbGxzIFJlZGlzIHRvIHNldCB0aGUga2V5cyBpbnRlcm5hbCAnaWRsZXRpbWUnIHZhbHVlIHRvIGEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3BlY2lmaWMgbnVtYmVyIChzZWUgdGhlIFJlZGlzIGNvbW1hbmQgT0JKRUNUIGZvciBtb3JlIGluZm8pLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZSRVEnICAgICA9PiBpbnQgIyBUZWxscyBSZWRpcyB0byBzZXQgdGhlIGtleXMgaW50ZXJuYWwgJ0ZSRVEnIHZhbHVlIHRvIGEgc3BlY2lmaWMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbnVtYmVyICh0aGlzIHJlbGF0ZXMgdG8gUmVkaXMnIExGVSBldmljdGlvbiBhbGdvcml0aG0pLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICBdOwogICAgICogICAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CiAgICAgKiBAcmV0dXJuIFJlZGlzfGJvb2wgICAgIFRydWUgaWYgdGhlIGtleSB3YXMgc3RvcmVkLCBmYWxzZSBpZiBub3QuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvcmVzdG9yZQogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2R1bXAKICAgICAqIEBzZWUgUmVkaXM6OmR1bXAoKQogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+c0FkZCgnY2FwdGFpbnMnLCAnSmFuZXdheScsICdQaWNhcmQnLCAnU2lza28nLCAnS2lyaycsICdBcmNoZXInKTsKICAgICAqICRzZXJpYWxpemVkID0gJHJlZGlzLT5kdW1wKCdjYXB0YWlucycpOwogICAgICogJHJlZGlzLT5yZXN0b3JlKCdjYXB0YWlucy1iYWNrdXAnLCAwLCAkc2VyaWFsaXplZCk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXN0b3JlKHN0cmluZyAka2V5LCBpbnQgJHR0bCwgc3RyaW5nICR2YWx1ZSwgP2FycmF5ICRvcHRpb25zID0gbnVsbCk6IFJlZGlzfGJvb2wge30KCiAgICAvKioKICAgICAqIFF1ZXJ5IHdoZXRoZXIgdGhlIGNvbm5lY3RlZCBpbnN0YW5jZSBpcyBhIHByaW1hcnkgb3IgcmVwbGljYQogICAgICogQHJldHVybiBtaXhlZCBXaWxsIHJldHVybiBhbiBhcnJheSB3aXRoIHRoZSByb2xlIG9mIHRoZSBjb25uZWN0ZWQgaW5zdGFuY2UgdW5sZXNzIHRoZXJlIGlzCiAgICAgKiAgICAgICAgICAgICAgIGFuIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm9sZSgpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogQXRvbWljYWxseSBwb3AgYW4gZWxlbWVudCBvZmYgdGhlIGVuZCBvZiBhIFJlZGlzIExJU1QgYW5kIHB1c2ggaXQgdG8gdGhlIGJlZ2lubmluZyBvZgogICAgICogYW5vdGhlci4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHNyY2tleSBUaGUgc291cmNlIGtleSB0byBwb3AgZnJvbS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRzdGtleSBUaGUgZGVzdGluYXRpb24ga2V5IHRvIHB1c2ggdG8uCiAgICAgKiBAcmV0dXJuIFJlZGlzfHN0cmluZ3xmYWxzZSBUaGUgcG9wcGVkIGVsZW1lbnQgb3IgZmFsc2UgaWYgdGhlIHNvdXJjZSBrZXkgd2FzIGVtcHR5LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3Jwb3BscHVzaAogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+cGlwZWxpbmUoKQogICAgICogICAgICAgLT5kZWwoJ2xpc3QxJywgJ2xpc3QyJykKICAgICAqICAgICAgIC0+cnB1c2goJ2xpc3QxJywgJ2xpc3QxLTEnLCAnbGlzdDEtMicpCiAgICAgKiAgICAgICAtPnJwdXNoKCdsaXN0MicsICdsaXN0Mi0xJywgJ2xpc3QyLTInKQogICAgICogICAgICAgLT5leGVjKCk7CiAgICAgKiAkcmVkaXMtPnJwb3BscHVzaCgnbGlzdDInLCAnbGlzdDEnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJwb3BscHVzaChzdHJpbmcgJHNyY2tleSwgc3RyaW5nICRkc3RrZXkpOiBSZWRpc3xzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEFkZCBvbmUgb3IgbW9yZSB2YWx1ZXMgdG8gYSBSZWRpcyBTRVQga2V5LgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgbmFtZQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBBIHZhbHVlIHRvIGFkZCB0byB0aGUgc2V0LgogICAgICogQHBhcmFtIG1peGVkIC4uLiRvdGhlcl92YWx1ZXMgT25lIG9yIG1vcmUgYWRkaXRpb25hbCB2YWx1ZXMgdG8gYWRkCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIHZhbHVlcyBhZGRlZCB0byB0aGUgc2V0LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NhZGQKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPmRlbCgnbXlzZXQnKTsKICAgICAqICRyZWRpcy0+c2FkZCgnbXlzZXQnLCAnZm9vJywgJ2JhcicsICdiYXonKTsKICAgICAqICRyZWRpcy0+c2FkZCgnbXlzZXQnLCAnZm9vJywgJ25ldycpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc0FkZChzdHJpbmcgJGtleSwgbWl4ZWQgJHZhbHVlLCBtaXhlZCAuLi4kb3RoZXJfdmFsdWVzKTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBBZGQgb25lIG9yZSBtb3JlIHZhbHVlcyB0byBhIFJlZGlzIFNFVCBrZXkuICBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIFJlZGlzOjpzYWRkKCkgYnV0CiAgICAgKiBpbnN0ZWFkIG9mIGJlaW5nIHZhcmlhZGljLCB0YWtlcyBhIHNpbmdsZSBhcnJheSBvZiB2YWx1ZXMuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc2FkZAogICAgICogQHNlZSBSZWRpczo6c2FkZCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHNldCB0byBhZGQgdmFsdWVzIHRvLgogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZXMgT25lIG9yIG1vcmUgbWVtYmVycyB0byBhZGQgdG8gdGhlIHNldC4KICAgICAqIEByZXR1cm4gaW50ICBUaGUgbnVtYmVyIG9mIG1lbWJlcnMgYWRkZWQgdG8gdGhlIHNldC4KICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPmRlbCgnbXlzZXQnKTsKICAgICAqICRyZWRpcy0+c0FkZEFycmF5KCdteXNldCcsIFsnZm9vJywgJ2JhcicsICdiYXonXSk7CiAgICAgKiAkcmVkaXMtPnNBZGRBcnJheSgnbXlzZXQnLCBbJ2ZvbycsICduZXcnXSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzQWRkQXJyYXkoc3RyaW5nICRrZXksIGFycmF5ICR2YWx1ZXMpOiBpbnQge30KCiAgICAvKioKICAgICAqIEdpdmVuIG9uZSBvciBtb3JlIFJlZGlzIFNFVFMsIHRoaXMgY29tbWFuZCByZXR1cm5zIGFsbCBvZiB0aGUgbWVtYmVycyBmcm9tIHRoZSBmaXJzdAogICAgICogc2V0IHRoYXQgYXJlIG5vdCBpbiBhbnkgc3Vic2VxdWVudCBzZXQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGZpcnN0IHNldAogICAgICogQHBhcmFtIHN0cmluZyAuLi4kb3RoZXJfa2V5cyBPbmUgb3IgbW9yZSBhZGRpdGlvbmFsIHNldHMKICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8ZmFsc2UgUmV0dXJucyB0aGUgZWxlbWVudHMgZnJvbSBrZXlzIDIuLk4gdGhhdCBkb24ndCBleGlzdCBpbiB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Qgc29ydGVkIHNldCwgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zZGlmZgogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+cGlwZWxpbmUoKQogICAgICogICAgICAgLT5kZWwoJ3NldDEnLCAnc2V0MicsICdzZXQzJykKICAgICAqICAgICAgIC0+c2FkZCgnc2V0MScsICdhcHBsZScsICdiYW5hbmEnLCAnY2Fycm90JywgJ2RhdGUnKQogICAgICogICAgICAgLT5zYWRkKCdzZXQyJywgJ2NhcnJvdCcpCiAgICAgKiAgICAgICAtPnNhZGQoJ3NldDMnLCAnYXBwbGUnLCAnY2Fycm90JywgJ2VnZ3BsYW50JykKICAgICAqICAgICAgIC0+ZXhlYygpOwogICAgICogJHJlZGlzLT5zZGlmZignc2V0MScsICdzZXQyJywgJ3NldDMnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNEaWZmKHN0cmluZyAka2V5LCBzdHJpbmcgLi4uJG90aGVyX2tleXMpOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgcGVyZm9ybXMgdGhlIHNhbWUgb3BlcmF0aW9uIGFzIFNESUZGIGV4Y2VwdCBpdCBzdG9yZXMgdGhlIHJlc3VsdGluZyBkaWZmCiAgICAgKiB2YWx1ZXMgaW4gYSBzcGVjaWZpZWQgZGVzdGluYXRpb24ga2V5LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NkaWZmc3RvcmUKICAgICAqIEBzZWUgUmVkaXM6OnNkaWZmKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRzdCBUaGUga2V5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgZmlyc3Qga2V5IHRvIHBlcmZvcm0gdGhlIERJRkYgb24KICAgICAqIEBwYXJhbSBzdHJpbmcgLi4uJG90aGVyX2tleXMgT25lIG9yIG1vcmUgYWRkaXRpb25hbCBrZXlzLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiB2YWx1ZXMgc3RvcmVkIGluIHRoZSBkZXN0aW5hdGlvbiBzZXQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNEaWZmU3RvcmUoc3RyaW5nICRkc3QsIHN0cmluZyAka2V5LCBzdHJpbmcgLi4uJG90aGVyX2tleXMpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdpdmVuIG9uZSBvciBtb3JlIFJlZGlzIFNFVCBrZXlzLCB0aGlzIGNvbW1hbmQgd2lsbCByZXR1cm4gYWxsIG9mIHRoZSBlbGVtZW50cyB0aGF0IGFyZQogICAgICogaW4gZXZlcnkgb25lLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NpbnRlcgogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAka2V5IFRoZSBmaXJzdCBTRVQga2V5IHRvIGludGVyc2VjdC4KICAgICAqIEBwYXJhbSBzdHJpbmcgLi4uJG90aGVyX2tleXMgT25lIG9yIG1vcmUgUmVkaXMgU0VUIGtleXMuCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT5waXBlbGluZSgpCiAgICAgKiAgICAgICAtPmRlbCgnYWxpY2VfbGlrZXMnLCAnYm9iX2xpa2VzJywgJ2JpbGxfbGlrZXMnKQogICAgICogICAgICAgLT5zYWRkKCdhbGljZV9saWtlcycsICdhc3BhcmFndXMnLCAnYnJvY2NvbGknLCAnY2Fycm90JywgJ3BvdGF0bycpCiAgICAgKiAgICAgICAtPnNhZGQoJ2JvYl9saWtlcycsICdhc3BhcmFndXMnLCAnY2Fycm90JywgJ3BvdGF0bycpCiAgICAgKiAgICAgICAtPnNhZGQoJ2JpbGxfbGlrZXMnLCAnYnJvY2NvbGknLCAncG90YXRvJykKICAgICAqICAgICAgIC0+ZXhlYygpOwogICAgICogdmFyX2R1bXAoJHJlZGlzLT5zaW50ZXIoJ2FsaWNlX2xpa2VzJywgJ2JvYl9saWtlcycsICdiaWxsX2xpa2VzJykpOwogICAgICogPC9jb2RlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc0ludGVyKGFycmF5fHN0cmluZyAka2V5LCBzdHJpbmcgLi4uJG90aGVyX2tleXMpOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQ29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIG9uZSBvciBtb3JlIHNldHMgYW5kIHJldHVybiB0aGUgY2FyZGluYWxpdHkgb2YgdGhlIHJlc3VsdC4KICAgICAqIEBwYXJhbSBhcnJheSAka2V5cyBPbmUgb3IgbW9yZSBzZXQga2V5IG5hbWVzLgogICAgICogQHBhcmFtIGludCAkbGltaXQgQSBtYXhpbXVtIGNhcmRpbmFsaXR5IHRvIHJldHVybi4gIFRoaXMgaXMgdXNlZnVsIHRvIHB1dCBhbiB1cHBlciBib3VuZAogICAgICogICAgICAgICAgICAgICAgICAgICBvbiB0aGUgYW1vdW50IG9mIHdvcmsgUmVkaXMgd2lsbCBkby4KICAgICAqIEByZXR1cm4gUmVkaXN8aW50fGZhbHNlIFRoZQogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NpbnRlcmNhcmQKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnNBZGQoJ3NldDEnLCAnYXBwbGUnLCAncGVhcicsICdiYW5hbmEnLCAnY2Fycm90Jyk7CiAgICAgKiAkcmVkaXMtPnNBZGQoJ3NldDInLCAnYXBwbGUnLCAgICAgICAgICdiYW5hbmEnKTsKICAgICAqICRyZWRpcy0+c0FkZCgnc2V0MycsICAgICAgICAgICdwZWFyJywgJ2JhbmFuYScpOwogICAgICogJHJlZGlzLT5zSW50ZXJDYXJkKFsnc2V0MScsICdzZXQyJywgJ3NldDMnXSk7CiAgICAgKiA/PgogICAgICogPC9jb2RlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2ludGVyY2FyZChhcnJheSAka2V5cywgaW50ICRsaW1pdCA9IC0xKTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtIHRoZSBpbnRlcnNlY3Rpb24gb2Ygb25lIG9yIG1vcmUgUmVkaXMgU0VUcywgc3RvcmluZyB0aGUgcmVzdWx0IGluIGEgZGVzdGluYXRpb24KICAgICAqIGtleSwgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIHRoZW0uCiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRrZXkgRWl0aGVyIGEgc3RyaW5nIGtleSwgb3IgYW4gYXJyYXkgb2Yga2V5cyAod2l0aCBhdCBsZWFzdCB0d28KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLCBjb25zaXN0aW5nIG9mIHRoZSBkZXN0aW5hdGlvbiBrZXkgbmFtZSBhbmQgb25lCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBtb3JlIHNvdXJjZSBrZXlzIG5hbWVzLgogICAgICogQHBhcmFtIHN0cmluZyAuLi4kb3RoZXJfa2V5cyBJZiB0aGUgZmlyc3QgYXJndW1lbnQgd2FzIGEgc3RyaW5nLCBzdWJzZXF1ZW50IGFyZ3VtZW50cyBzaG91bGQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHNvdXJjZSBrZXkgbmFtZXMuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSAgICAgICAgICBUaGUgbnVtYmVyIG9mIHZhbHVlcyBzdG9yZWQgaW4gdGhlIGRlc3RpbmF0aW9uIGtleSBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NpbnRlcnN0b3JlCiAgICAgKiBAc2VlIFJlZGlzOjpzaW50ZXIoKQogICAgICogQGV4YW1wbGUgJHJlZGlzLT5zSW50ZXJTdG9yZShbJ2RzdCcsICdzcmMxJywgJ3NyYzInLCAnc3JjMyddKTsKICAgICAqIEBleGFtcGxlICRyZWRpcy0+c0ludGVyU3RvcmUoJ2RzdCcsICdzcmMxJywgJ3NyYycyJywgJ3NyYzMnKTsKICAgICAqID8+CiAgICAgKiA8L2NvZGU+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzSW50ZXJTdG9yZShhcnJheXxzdHJpbmcgJGtleSwgc3RyaW5nIC4uLiRvdGhlcl9rZXlzKTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBldmVyeSBtZW1iZXIgZnJvbSBhIHNldCBrZXkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHNldCBuYW1lLgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxmYWxzZSBFdmVyeSBlbGVtZW50IGluIHRoZSBzZXQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zbWVtYmVycwogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+c0FkZCgndG5nLWNyZXcnLCAuLi5bJ1BpY2FyZCcsICdSaWtlcicsICdEYXRhJywgJ1dvcmYnLCAnTGEgRm9yZ2UnLCAnVHJvaScsICdDcnVzaGVyJywgJ0Jyb2Njb2xpJ10pOwogICAgICogJHJlZGlzLT5zTWVtYmVycygndG5nLWNyZXcnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNNZW1iZXJzKHN0cmluZyAka2V5KTogUmVkaXN8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIG9uZSBvciBtb3JlIHZhbHVlcyBhcmUgbWVtYmVycyBvZiBhIHNldC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zbWlzbWVtYmVyCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc21lbWJlcgogICAgICogQHNlZSBSZWRpczo6c21lbWJlcigpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHNldCB0byBxdWVyeS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lbWJlciBUaGUgZmlyc3QgdmFsdWUgdG8gdGVzdCBpZiBleGlzdHMgaW4gdGhlIHNldC4KICAgICAqIEBwYXJhbSBzdHJpbmcgLi4uJG90aGVyX21lbWJlcnMgQW55IG51bWJlciBvZiBhZGRpdGlvbmFsIHZhbHVlcyB0byBjaGVjay4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8ZmFsc2UgQW4gYXJyYXkgb2YgaW50ZWdlcnMgcmVwcmVzZW50aW5nIHdoZXRoZXIgZWFjaCBwYXNzZWQgdmFsdWUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIGEgbWVtYmVyIG9mIHRoZSBzZXQuCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT5zQWRkKCdkczktY3JldycsIC4uLlsiU2lza28iLCAiS2lyYSIsICJEYXgiLCAiV29yZiIsICJCYXNoaXIiLCAiTydCcmllbiJdKTsKICAgICAqICRtZW1iZXJzID0gJHJlZGlzLT5zTUlzTWVtYmVyKCdkczktY3JldycsIC4uLlsnU2lza28nLCAnUGljYXJkJywgJ0RhdGEnLCAnV29yZiddKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNNaXNNZW1iZXIoc3RyaW5nICRrZXksIHN0cmluZyAkbWVtYmVyLCBzdHJpbmcgLi4uJG90aGVyX21lbWJlcnMpOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUG9wIGEgbWVtYmVyIGZyb20gb25lIHNldCBhbmQgcHVzaCBpdCBvbnRvIGFub3RoZXIuICBUaGlzIGNvbW1hbmQgd2lsbCBjcmVhdGUgdGhlCiAgICAgKiBkZXN0aW5hdGlvbiBzZXQgaWYgaXQgZG9lcyBub3QgY3VycmVudGx5IGV4aXN0LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3Ntb3ZlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcmMgVGhlIHNvdXJjZSBzZXQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkc3QgVGhlIGRlc3RpbmF0aW9uIHNldC4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIG1lbWJlciB5b3Ugd2lzaCB0byBtb3ZlLgogICAgICogQHJldHVybiBSZWRpc3xib29sICAgVHJ1ZSBpZiB0aGUgbWVtYmVyIHdhcyBtb3ZlZCwgYW5kIGZhbHNlIGlmIGl0IHdhc24ndCBpbiB0aGUgc2V0LgogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+c0FkZCgnbnVtYmVycycsICd6ZXJvJywgJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91cicpOwogICAgICogJHJlZGlzLT5zTW92ZSgnbnVtYmVycycsICdldmVucycsICd6ZXJvJyk7CiAgICAgKiAkcmVkaXMtPnNNb3ZlKCdudW1iZXJzJywgJ2V2ZW5zJywgJ3R3bycpOwogICAgICogJHJlZGlzLT5zTW92ZSgnbnVtYmVycycsICdldmVucycsICdmb3VyJyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzTW92ZShzdHJpbmcgJHNyYywgc3RyaW5nICRkc3QsIG1peGVkICR2YWx1ZSk6IFJlZGlzfGJvb2wge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBvbmUgb3IgbW9yZSBlbGVtZW50cyBmcm9tIGEgc2V0LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3Nwb3AKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgc2V0IGluIHF1ZXN0aW9uLgogICAgICogQHBhcmFtIGludCAkY291bnQgQW4gb3B0aW9uYWwgbnVtYmVyIG9mIG1lbWJlcnMgdG8gcG9wLiAgIFRoaXMgZGVmYXVsdHMgdG8KICAgICAqICAgICAgICAgICAgICAgICAgICAgICByZW1vdmluZyBvbmUgZWxlbWVudC4KICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPmRlbCgnbnVtYmVycycsICdldmVucycpOwogICAgICogJHJlZGlzLT5zQWRkKCdudW1iZXJzJywgJ3plcm8nLCAnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJyk7CiAgICAgKiAkcmVkaXMtPnNQb3AoJ251bWJlcnMnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNQb3Aoc3RyaW5nICRrZXksIGludCAkY291bnQgPSAwKTogUmVkaXN8c3RyaW5nfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBvbmUgb3IgbW9yZSByYW5kb20gbWVtYmVycyBvZiBhIHNldC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgc2V0IHRvIHF1ZXJ5LgogICAgICogQHBhcmFtIGludCAkY291bnQgQW4gb3B0aW9uYWwgY291bnQgb2YgbWVtYmVycyB0byByZXR1cm4uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiB0aGlzIHZhbHVlIGlzIHBvc2l0aXZlLCBSZWRpcyB3aWxsIHJldHVybiAqdXAgdG8qIHRoZSByZXF1ZXN0ZWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBidXQgd2l0aCB1bmlxdWUgZWxlbWVudHMgdGhhdCB3aWxsIG5ldmVyIHJlcGVhdC4gIFRoaXMgbWVhbnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgIHlvdSBtYXkgcmVjaWV2ZSBmZXdlciB0aGVuIGAkY291bnRgIHJlcGxpZXMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgbnVtYmVyIGlzIG5lZ2F0aXZlLCBSZWRpcyB3aWxsIHJldHVybiB0aGUgZXhhY3QgbnVtYmVyIHJlcXVlc3RlZAogICAgICogICAgICAgICAgICAgICAgICAgICAgYnV0IHRoZSByZXN1bHQgbWF5IGNvbnRhaW4gZHVwbGljYXRlIGVsZW1lbnRzLgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxzdHJpbmd8ZmFsc2UgT25lIG9yIG1vcmUgcmFuZG9tIG1lbWJlcnMgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zcmFuZG1lbWJlcgogICAgICogQGV4YW1wbGUgJHJlZGlzLT5zUmFuZE1lbWJlcignbXlzZXQnKTsKICAgICAqIEBleGFtcGxlICRyZWRpcy0+c1JhbmRNZW1iZXIoJ215c2V0JywgMTApOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT5zUmFuZE1lbWJlcignbXlzZXQnLCAtMTApOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc1JhbmRNZW1iZXIoc3RyaW5nICRrZXksIGludCAkY291bnQgPSAwKTogUmVkaXN8c3RyaW5nfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB1bmlvbiBvZiBvbmUgb3IgbW9yZSBSZWRpcyBTRVQga2V5cy4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zdW5pb24KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgZmlyc3QgU0VUIHRvIGRvIGEgdW5pb24gd2l0aAogICAgICogQHBhcmFtIHN0cmluZyAuLi4kb3RoZXJfa2V5cyBPbmUgb3IgbW9yZSBzdWJzZXF1ZW50IGtleXMKICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8ZmFsc2UgIFRoZSB1bmlvbiBvZiB0aGUgb25lIG9yIG1vcmUgaW5wdXQgc2V0cyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogQGV4YW1wbGUgJHJlZGlzLT5zdW5pb24oJ3NldDEnLCAnc2V0MicpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc1VuaW9uKHN0cmluZyAka2V5LCBzdHJpbmcgLi4uJG90aGVyX2tleXMpOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybSBhIHVuaW9uIG9mIG9uZSBvciBtb3JlIFJlZGlzIFNFVCBrZXlzIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIGEgbmV3IHNldAogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3N1bmlvbnN0b3JlCiAgICAgKiBAc2VlIFJlZGlzOjpzdW5pb24oKQogICAgICogQHBhcmFtIHN0cmluZyAkZHN0IFRoZSBkZXN0aW5hdGlvbiBrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgZmlyc3Qgc291cmNlIGtleQogICAgICogQHBhcmFtIHN0cmluZyAuLi4kb3RoZXJfa2V5cyBPbmUgb3IgbW9yZSBhZGRpdGlvbmFsIHNvdXJjZSBrZXlzCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgc3RvcmVkIGluIHRoZSBkZXN0aW5hdGlvbiBTRVQgb3IKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNVbmlvblN0b3JlKHN0cmluZyAkZHN0LCBzdHJpbmcgJGtleSwgc3RyaW5nIC4uLiRvdGhlcl9rZXlzKTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQZXJzaXN0IHRoZSBSZWRpcyBkYXRhYmFzZSB0byBkaXNrLiAgVGhpcyBjb21tYW5kIHdpbGwgYmxvY2sgdGhlIHNlcnZlciB1bnRpbCB0aGUgc2F2ZSBpcwogICAgICogY29tcGxldGVkLiAgRm9yIGEgbm9uYmxvY2tpbmcgYWx0ZXJuYXRpdmUsIHNlZSBSZWRpczo6YmdzYXZlKCkuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc2F2ZQogICAgICogQHNlZSBSZWRpczo6YmdzYXZlKCkKICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCBSZXR1cm5zIHRydWUgdW5sZXNzIGFuIGVycm9yIG9jY3Vycy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoKTogUmVkaXN8Ym9vbCB7fQoKICAgIC8qKgogICAgICogSW5jcmVtZW50YWxseSBzY2FuIHRoZSBSZWRpcyBrZXlzcGFjZSwgd2l0aCBvcHRpb25hbCBwYXR0ZXJuIGFuZCB0eXBlIG1hdGNoaW5nLgogICAgICogQSBub3RlIGFib3V0IFJlZGlzOjpTQ0FOX05PUkVUUlkgYW5kIFJlZGlzOjpTQ0FOX1JFVFJZLgogICAgICogRm9yIGNvbnZlbmllbmNlLCBQaHBSZWRpcyBjYW4gcmV0cnkgU0NBTiBjb21tYW5kcyBpdHNlbGYgd2hlbiBSZWRpcyByZXR1cm5zIGFuIGVtcHR5IGFycmF5IG9mCiAgICAgKiBrZXlzIHdpdGggYSBub256ZXJvIGl0ZXJhdG9yLiAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gbWF0Y2hpbmcgYWdhaW5zdCBhIHBhdHRlcm4gdGhhdCB2ZXJ5IGZldwogICAgICoga2V5cyBtYXRjaCBpbnNpZGUgYSBrZXkgc3BhY2Ugd2l0aCBhIGdyZWF0IG1hbnkga2V5cy4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgaG93CiAgICAgKiB0byB1c2UgUmVkaXM6OnNjYW4oKSB3aXRoIHRoZSBvcHRpb24gZGlzYWJsZWQgYW5kIGVuYWJsZWQuCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGl0ZXJhdG9yIFRoZSBjdXJzb3IgcmV0dXJuZWQgYnkgUmVkaXMgZm9yIGV2ZXJ5IHN1YnNlcXVlbnQgY2FsbCB0byBTQ0FOLiAgT24KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbml0aWFsIGludm9jYXRpb24gb2YgdGhlIGNhbGwsIGl0IHNob3VsZCBiZSBpbml0aWFsaXplZCBieSB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlciB0byBOVUxMLiAgRWFjaCB0aW1lIFNDQU4gaXMgaW52b2tlZCwgdGhlIGl0ZXJhdG9yIHdpbGwgYmUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgdG8gYSBuZXcgbnVtYmVyLCB1bnRpbCBmaW5hbGx5IFJlZGlzIHdpbGwgc2V0IHRoZSB2YWx1ZSB0bwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgemVybywgaW5kaWNhdGluZyB0aGF0IHRoZSBzY2FuIGlzIGNvbXBsZXRlLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwYXR0ZXJuIEFuIG9wdGlvbmFsIGdsb2Itc3R5bGUgcGF0dGVybiBmb3IgbWF0Y2hpbmcga2V5IG5hbWVzLiAgSWYgcGFzc2VkIGFzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBpdCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZW5kaW5nICcqJyAobWF0Y2ggZXZlcnkga2V5KS4KICAgICAqIEBwYXJhbSBpbnQgJGNvdW50IEEgaGludCB0byByZWRpcyB0aGF0IHRlbGxzIGl0IGhvdyBtYW55IGtleXMgdG8gcmV0dXJuIGluIGEgc2luZ2xlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsIHRvIFNDQU4uICBUaGUgbGFyZ2VyIHRoZSBudW1iZXIsIHRoZSBsb25nZXIgUmVkaXMgbWF5IGJsb2NrCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRzIHdoaWxlIGl0ZXJhdGluZyB0aGUga2V5IHNwYWNlLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICR0eXBlIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIHNwZWNpZnkgd2hpY2gga2V5IHR5cGVzIHRvIHNjYW4gKGUuZy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICdTVFJJTkcnLCAnTElTVCcsICdTRVQnKQogICAgICogQHJldHVybiBhcnJheXxmYWxzZSAgICAgQW4gYXJyYXkgb2Yga2V5cywgb3IgZmFsc2UgaWYgbm8ga2V5cyB3ZXJlIHJldHVybmVkIGZvciB0aGlzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uIG9mIHNjYW4uICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIFJlZGlzIHRvIHJldHVybgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgemVybyBrZXlzIGJlZm9yZSBoYXZpbmcgc2Nhbm5lZCB0aGUgZW50aXJlIGtleSBzcGFjZSwgc28gdGhlIGNhbGxlcgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGluc3RlYWQgY29udGludWUgdG8gU0NBTiB1bnRpbCB0aGUgaXRlcmF0b3IgcmVmZXJlbmNlIGlzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCB0byB6ZXJvLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NjYW4KICAgICAqIEBzZWUgUmVkaXM6OnNldE9wdGlvbigpCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzID0gbmV3IFJlZGlzKFsnaG9zdCcgPT4gJ2xvY2FsaG9zdCddKTsKICAgICAqICRyZWRpcy0+c2V0T3B0aW9uKFJlZGlzOjpPUFRfU0NBTiwgUmVkaXM6OlNDQU5fTk9SRVRSWSk7CiAgICAgKiAkaXQgPSBudWxsOwogICAgICogZG8gewogICAgICogICAgICRrZXlzID0gJHJlZGlzLT5zY2FuKCRpdCwgJyp6b3JnKicpOwogICAgICogICAgIGZvcmVhY2ggKCRrZXlzIGFzICRrZXkpIHsKICAgICAqICAgICAgICAgZWNobyAiS0VZOiAka2V5XG4iOwogICAgICogICAgIH0KICAgICAqIH0gd2hpbGUgKCRpdCAhPSAwKTsKICAgICAqICRyZWRpcy0+c2V0T3B0aW9uKFJlZGlzOjpPUFRfU0NBTiwgUmVkaXM6OlNDQU5fUkVUUlkpOwogICAgICogJGl0ID0gbnVsbDsKICAgICAqIC8vIFdoZW4gUmVkaXM6OlNDQU5fUkVUUlkgaXMgZW5hYmxlZCwgd2UgY2FuIHVzZSBzaW1wbGVyIGxvZ2ljLCBhcyB3ZSB3aWxsIG5ldmVyIHJlY2VpdmUgYW4KICAgICAqIC8vIGVtcHR5IGFycmF5IG9mIGtleXMgd2hlbiB0aGUgaXRlcmF0b3IgaXMgbm9uemVyby4KICAgICAqIHdoaWxlICgka2V5cyA9ICRyZWRpcy0+c2NhbigkaXQsICcqem9yZyonKSkgewogICAgICogICAgIGZvcmVhY2ggKCRrZXlzIGFzICRrZXkpIHsKICAgICAqICAgICAgICAgZWNobyAiS0VZOiAka2V5XG4iOwogICAgICogICAgIH0KICAgICAqIH0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNjYW4oP2ludCAmJGl0ZXJhdG9yLCA/c3RyaW5nICRwYXR0ZXJuID0gbnVsbCwgaW50ICRjb3VudCA9IDAsID9zdHJpbmcgJHR5cGUgPSBudWxsKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiBhIFJlZGlzIHNldC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgc2V0IHRvIGdldCB0aGUgY2FyZGluYWxpdHkgb2YuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgY2FyZGluYWxpdHkgb2YgdGhlIHNldCBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NjYXJkCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnNjYXJkKCdzZXQnKTsKICAgICAqIDwvY29kZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNjYXJkKHN0cmluZyAka2V5KTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBBbiBhZG1pbmlzdHJhdGl2ZSBjb21tYW5kIHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCBMVUEgc2NyaXB0cyBzdG9yZWQgb24gdGhlIHNlcnZlci4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zY3JpcHQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbW1hbmQgVGhlIHNjcmlwdCBzdWJvcGVyYXRpb24gdG8gZXhlY3V0ZS4KICAgICAqIEBwYXJhbSBtaXhlZCAkYXJncyBPbmUgb3JlIG1vcmUgYWRkaXRpb25hbCBhcmd1bWVudAogICAgICogQHJldHVybiBtaXhlZCBUaGlzIGNvbW1hbmQgcmV0dXJucyB2YXJpb3VzIHRoaW5ncyBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIG9wZXJhdGlvbiBleGVjdXRlZC4KICAgICAqIEBleGFtcGxlICRyZWRpcy0+c2NyaXB0KCdsb2FkJywgJ3JldHVybiAxJyk7CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnNjcmlwdCgnZXhpc3RzJywgc2hhMSgncmV0dXJuIDEnKSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzY3JpcHQoc3RyaW5nICRjb21tYW5kLCBtaXhlZCAuLi4kYXJncyk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBTZWxlY3QgYSBzcGVjaWZpYyBSZWRpcyBkYXRhYmFzZS4KICAgICAqIEBwYXJhbSBpbnQgJGRiIFRoZSBkYXRhYmFzZSB0byBzZWxlY3QuICBOb3RlIHRoYXQgYnkgZGVmYXVsdCBSZWRpcyBoYXMgMTYgZGF0YWJhc2VzICgwLTE1KS4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCB0cnVlIG9uIHN1Y2Nlc3MgYW5kIGZhbHNlIG9uIGZhaWx1cmUKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zZWxlY3QKICAgICAqIEBleGFtcGxlICRyZWRpcy0+c2VsZWN0KDEpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VsZWN0KGludCAkZGIpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgb3Igc2V0IGEgUmVkaXMgU1RSSU5HIGtleSB0byBhIHZhbHVlLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgbmFtZSB0byBzZXQuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIGtleSB0by4KICAgICAqIEBwYXJhbSBhcnJheXxpbnQgJG9wdGlvbnMgRWl0aGVyIGFuIGFycmF5IHdpdGggb3B0aW9ucyBmb3IgaG93IHRvIHBlcmZvcm0gdGhlIHNldCBvciBhbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyIHdpdGggYW4gZXhwaXJhdGlvbi4gIElmIGFuIGV4cGlyYXRpb24gaXMgc2V0IFBocFJlZGlzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYWN0dWFsbHkgc2VuZCB0aGUgYFNFVEVYYCBjb21tYW5kLgogICAgICogT1BUSU9OICAgICAgICAgICAgICAgICAgICAgICAgIERFU0NSSVBUSU9OCiAgICAgKiAtLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAqIFsnRVgnID0+IDYwXSAgICAgICAgICAgICAgICAgICBleHBpcmUgNjAgc2Vjb25kcy4KICAgICAqIFsnUFgnID0+IDYwMDBdICAgICAgICAgICAgICAgICBleHBpcmUgaW4gNjAwMCBtaWxsaXNlY29uZHMuCiAgICAgKiBbJ0VYQVQnID0+IHRpbWUoKSArIDEwXSAgICAgICAgZXhwaXJlIGluIDEwIHNlY29uZHMuCiAgICAgKiBbJ1BYQVQnID0+IHRpbWUoKSoxMDAwICsgMTAwMF0gZXhwaXJlIGluIDEgc2Vjb25kLgogICAgICogWydLRUVQVFRMJyA9PiB0cnVlXSAgICAgICAgICAgIFJlZGlzIHdpbGwgbm90IHVwZGF0ZSB0aGUga2V5J3MgY3VycmVudCBUVEwuCiAgICAgKiBbJ1hYJ10gICAgICAgICAgICAgICAgICAgICAgICAgT25seSBzZXQgdGhlIGtleSBpZiBpdCBhbHJlYWR5IGV4aXN0cy4KICAgICAqIFsnTlgnXSAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHNldCB0aGUga2V5IGlmIGl0IGRvZXNuJ3QgZXhpc3QuCiAgICAgKiBbJ0dFVCddICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGVhZCBvZiByZXR1cm5pbmcgYCtPS2AgcmV0dXJuIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgb3IgTlVMTCBpZiB0aGUga2V5IGRpZG4ndCBleGlzdC4KICAgICAqIEByZXR1cm4gUmVkaXN8c3RyaW5nfGJvb2wgVHJ1ZSBpZiB0aGUga2V5IHdhcyBzZXQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zZXQKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zZXRleAogICAgICogQGV4YW1wbGUgJHJlZGlzLT5zZXQoJ2tleScsICd2YWx1ZScpOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT5zZXQoJ2tleScsICdleHBpcmVzX2luXzYwX3NlY29uZHMnLCA2MCk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoc3RyaW5nICRrZXksIG1peGVkICR2YWx1ZSwgbWl4ZWQgJG9wdGlvbnMgPSBudWxsKTogUmVkaXN8c3RyaW5nfGJvb2wge30KCiAgICAvKioKICAgICAqIFNldCBhIHNwZWNpZmljIGJpdCBpbiBhIFJlZGlzIHN0cmluZyB0byB6ZXJvIG9yIG9uZQogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NldGJpdAogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBSZWRpcyBTVFJJTkcga2V5IHRvIG1vZGlmeQogICAgICogQHBhcmFtIGJvb2wgJHZhbHVlIFdoZXRoZXIgdG8gc2V0IHRoZSBiaXQgdG8gemVybyBvciBvbmUuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGJpdCBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+c2V0KCdmb28nLCAnYmFyJyk7CiAgICAgKiAkcmVkaXMtPnNldGJpdCgnZm9vJywgNywgMSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRCaXQoc3RyaW5nICRrZXksIGludCAkaWR4LCBib29sICR2YWx1ZSk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVXBkYXRlIG9yIGFwcGVuZCB0byBhIFJlZGlzIHN0cmluZyBhdCBhIHNwZWNpZmljIHN0YXJ0aW5nIGluZGV4CiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc2V0cmFuZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IHRvIHVwZGF0ZQogICAgICogQHBhcmFtIGludCAkaW5kZXggV2hlcmUgdG8gaW5zZXJ0IHRoZSBwcm92aWRlZCB2YWx1ZQogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUgVGhlIHZhbHVlIHRvIGNvcHkgaW50byB0aGUgc3RyaW5nLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIG5ldyBsZW5ndGggb2YgdGhlIHN0cmluZyBvciBmYWxzZSBvbiBmYWlsdXJlCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT5zZXQoJ21lc3NhZ2UnLCAnSGVsbG8gV29ybGQnKTsKICAgICAqICRyZWRpcy0+c2V0UmFuZ2UoJ21lc3NhZ2UnLCA2LCAnUmVkaXMnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFJhbmdlKHN0cmluZyAka2V5LCBpbnQgJGluZGV4LCBzdHJpbmcgJHZhbHVlKTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTZXQgYSBjb25maWd1cmFibGUgb3B0aW9uIG9uIHRoZSBSZWRpcyBvYmplY3QuCiAgICAgKiBGb2xsb3dpbmcgYXJlIGEgbGlzdCBvZiBvcHRpb25zIHlvdSBjYW4gc2V0OgogICAgICogfCBPUFRJT04gICAgICAgICAgfCBUWVBFIHwgREVTQ1JJUFRJT04gfAogICAgICogfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tIHwgLS0tLS0tLS0tLS0gfAogICAgICogfCBPUFRfTUFYX1JFVFJJRVMgfCBpbnQgIHwgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIFJlZGlzIHdpbGwgYXR0ZW1wdCB0byByZWNvbm5lY3QgaWYgaXQgZ2V0cyBkaXNjb25uZWN0ZWQsIGJlZm9yZSB0aHJvd2luZyBhbiBleGNlcHRpb24uIHwKICAgICAqIHwgT1BUX1NDQU4gICAgICAgIHwgZW51bSB8IFJlZGlzOjpPUFRfU0NBTl9SRVRSWSwgb3IgUmVkaXM6Ok9QVF9TQ0FOX05PUkVUUlkuICBXaGV0aGVyIFBocFJlZGlzIHNob3VsZCBhdXRvbWF0aWNhbGx5IFNDQU4gYWdhaW4gd2hlbiB6ZXJvIGtleXMgYnV0IGEgbm9uemVybyBpdGVyYXRvciBhcmUgcmV0dXJuZWQuIHwKICAgICAqIHwgT1BUX1NFUklBTElaRVIgIHwgZW51bSB8IFNldCB0aGUgYXV0b21hdGljIGRhdGEgc2VyaWFsaXplci48YnI+YFJlZGlzOjpTRVJJQUxJWkVSX05PTkVgPGJyPmBSZWRpczo6U0VSSUFMSVpFUl9QSFBgPGJyPmBSZWRpczo6U0VSSUFMSVpFUl9JR0JJTkFSWWA8YnI+YFJlZGlzOjpTRVJJQUxJWkVSX01TR1BBQ0tgLCBgUmVkaXM6OlNFUklBTElaRVJfSlNPTmB8CiAgICAgKiB8IE9QVF9QUkVGSVggfCBzdHJpbmcgfCBBIHN0cmluZyBQaHBSZWRpcyB3aWxsIHVzZSB0byBwcmVmaXggZXZlcnkga2V5IHdlIHJlYWQgb3Igd3JpdGUuIHwKICAgICAqIHwgT1BUX1JFQURfVElNRU9VVCB8IGZsb2F0IHwgSG93IGxvbmcgUGhwUmVkaXMgd2lsbCBibG9jayBmb3IgYSByZXNwb25zZSBmcm9tIFJlZGlzIGJlZm9yZSB0aHJvd2luZyBhICdyZWFkIGVycm9yIG9uIGNvbm5lY3Rpb24nIGV4Y2VwdGlvbi4gfAogICAgICogfCBPUFRfVENQX0tFRVBBTElWRSB8IGJvb2wgfCAgIFNldCBvciBkaXNhYmxlIFRDUF9LRUVQQUxJVkUgb24gdGhlIGNvbm5lY3Rpb24uIHwKICAgICAqIHwgT1BUX0NPTVBSRVNTSU9OIHwgZW51bSB8IFNldCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtPGJyPmBSZWRpczo6Q09NUFJFU1NJT05fTk9ORWA8YnI+YFJlZGlzOjpDT01QUkVTU0lPTl9MWkZgPGJyPmBSZWRpczo6Q09NUFJFU1NJT05fTFo0YDxicj4gYFJlZGlzOjpDT01QUkVTU0lPTl9aU1REYCB8CiAgICAgKiB8IE9QVF9SRVBMWV9MSVRFUkFMIHwgYm9vbCB8IElmIHNldCB0byB0cnVlLCBQaHBSZWRpcyB3aWxsIHJldHVybiB0aGUgbGl0ZXJhbCBzdHJpbmcgUmVkaXMgcmV0dXJucyBmb3IgTElORSByZXBsaWVzIChlLmcuICcrT0snKSwgcmF0aGVyIHRoYW4gYHRydWVgLiB8CiAgICAgKiB8IE9QVF9DT01QUkVTU0lPTl9MRVZFTCB8IGludCB8IFNldCBhIHNwZWNpZmljIGNvbXByZXNzaW9uIGxldmVsIGlmIFJlZGlzIGlzIGNvbXByZXNzaW5nIGRhdGEuIHwKICAgICAqIHwgT1BUX05VTExfTVVMVElCVUxLX0FTX05VTEwgfCBib29sIHwgQ2F1c2VzIFBocFJlZGlzIHRvIHJldHVybiBgTlVMTGAgcmF0aGVyIHRoYW4gYGZhbHNlYCBmb3IgTlVMTCBNVUxUSUJVTEsgcmVwbGllcyB8CiAgICAgKiB8IE9QVF9CQUNLT0ZGX0FMR09SSVRITSB8IGVudW0gfCBUaGUgZXhwb25lbnRpYWwgYmFja29mZiBzdHJhdGVneSB0byB1c2UuIHwKICAgICAqIHwgT1BUX0JBQ0tPRkZfQkFTRSB8IGludCB8IFRoZSBtaW5pbXVtIGRlbGF5IGJldHdlZW4gcmV0cmllcyB3aGVuIGJhY2tpbmcgb2ZmLiB8CiAgICAgKiB8IE9QVF9CQUNLT0ZGX0NBUCAgfCBpbnQgfCBUaGUgbWF4aW11bSBkZWxheSBiZXR3ZWVuIHJlcGxpZXMgd2hlbiBiYWNraW5nIG9mZi4gfAogICAgICogQHBhcmFtIGludCAkb3B0aW9uIFRoZSBvcHRpb24gY29uc3RhbnQuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSBvcHRpb24gdmFsdWUuCiAgICAgKiBAcmV0dXJuIGJvb2wgIHRydWUgaWYgdGhlIHNldHRpbmcgd2FzIHVwZGF0ZWQsIGZhbHNlIGlmIG5vdC4KICAgICAqIEBzZWUgUmVkaXM6Ol9fY29uc3RydWN0KCkgZm9yIGRldGFpbHMgYWJvdXQgYmFja29mZiBzdHJhdGVnaWVzLgogICAgICogQHNlZSBSZWRpczo6Z2V0T3B0aW9uKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE9wdGlvbihpbnQgJG9wdGlvbiwgbWl4ZWQgJHZhbHVlKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogU2V0IGEgUmVkaXMgU1RSSU5HIGtleSB3aXRoIGEgc3BlY2lmaWMgZXhwaXJhdGlvbiBpbiBzZWNvbmRzLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBuYW1lIG9mIHRoZSBrZXkgdG8gc2V0LgogICAgICogQHBhcmFtIGludCAkZXhwaXJlIFRoZSBrZXkncyBleHBpcmF0aW9uIGluIHNlY29uZHMuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgdGhlIGtleS4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCBUcnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBleGFtcGxlICRyZWRpcy0+c2V0ZXgoJzYwcy10dGwnLCA2MCwgJ3NvbWUtdmFsdWUnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGV4KHN0cmluZyAka2V5LCBpbnQgJGV4cGlyZSwgbWl4ZWQgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogU2V0IGEga2V5IHRvIGEgdmFsdWUsIGJ1dCBvbmx5IGlmIHRoYXQga2V5IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc2V0bngKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUga2V5IG5hbWUgdG8gc2V0LgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBXaGF0IHRvIHNldCB0aGUga2V5IHRvLgogICAgICogQHJldHVybiBSZWRpc3xib29sIFJldHVybnMgdHJ1ZSBpZiB0aGUga2V5IHdhcyBzZXQgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgICAqIEBleGFtcGxlICRyZWRpcy0+c2V0bngoJ2V4aXN0aW5nLWtleScsICdleGlzdGluZy12YWx1ZScpOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT5zZXRueCgnbmV3LWtleScsICduZXctdmFsdWUnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldG54KHN0cmluZyAka2V5LCBtaXhlZCAkdmFsdWUpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gdmFsdWUgaXMgdGhlIG1lbWJlciBvZiBhIFJlZGlzIFNFVC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgcmVkaXMgc2V0IHRvIGNoZWNrLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgdmFsdWUgdG8gdGVzdC4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbCBUcnVlIGlmIHRoZSBtZW1iZXIgZXhpc3RzIGFuZCBmYWxzZSBpZiBub3QuCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnNpc21lbWJlcignbXlzZXQnLCAnbWVtMScsICdtZW0yJyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaXNtZW1iZXIoc3RyaW5nICRrZXksIG1peGVkICR2YWx1ZSk6IFJlZGlzfGJvb2wge30KCiAgICAvKioKICAgICAqIFR1cm4gYSByZWRpcyBpbnN0YW5jZSBpbnRvIGEgcmVwbGljYSBvZiBhbm90aGVyIG9yIHByb21vdGUgYSByZXBsaWNhCiAgICAgKiB0byBhIHByaW1hcnkuCiAgICAgKiBUaGlzIG1ldGhvZCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWFuZCBpbiBSZWRpcyBoYXMgYmVlbiBtYXJrZWQgZGVwcmVjYXRlZAogICAgICogYW5kIHVzZXJzIHNob3VsZCBpbnN0ZWFkIHVzZSBSZWRpczo6cmVwbGljYW9mKCkgaWYgY29ubmVjdGluZyB0byByZWRpcy1zZXJ2ZXIKICAgICAqID49IDUuMC4wLgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zbGF2ZW9mCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvcmVwbGljYW9mCiAgICAgKiBAc2VlIFJlZGlzOjpyZXBsaWNhb2YoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2xhdmVvZig/c3RyaW5nICRob3N0ID0gbnVsbCwgaW50ICRwb3J0ID0gNjM3OSk6IFJlZGlzfGJvb2wge30KCiAgICAvKioKICAgICAqIFVzZWQgdG8gdHVybiBhIFJlZGlzIGluc3RhbmNlIGludG8gYSByZXBsaWNhIG9mIGFub3RoZXIsIG9yIHRvIHJlbW92ZQogICAgICogcmVwbGljYSBzdGF0dXMgcHJvbW90aW5nIHRoZSBpbnN0YW5jZSB0byBhIHByaW1hcnkuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvcmVwbGljYW9mCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc2xhdmVvZgogICAgICogQHNlZSBSZWRpczo6c2xhdmVvZigpCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGhvc3QgVGhlIGhvc3Qgb2YgdGhlIHByaW1hcnkgdG8gc3RhcnQgcmVwbGljYXRpbmcuCiAgICAgKiBAcGFyYW0gaW50ICRwb3J0IFRoZSBwb3J0IG9mIHRoZSBwcmltYXJ5IHRvIHN0YXJ0IHJlcGxpY2F0aW5nLgogICAgICogQHJldHVybiBSZWRpc3xib29sIFN1Y2Nlc3MgaWYgd2Ugd2VyZSBzdWNjZXNzZnVsbHkgYWJsZSB0byBzdGFydCByZXBsaWNhdGluZyBhIHByaW1hcnkgb3IKICAgICAqICAgICAgICAgICAgICAgICAgICB3ZXJlIGFibGUgdG8gcHJvbW90ZSB0ZWggcmVwbGljYXQgdG8gYSBwcmltYXJ5LgogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcyA9IG5ldyBSZWRpcyhbJ2hvc3QnID0+ICdsb2NhbGhvc3QnXSk7CiAgICAgKiAvLyBBdHRlbXB0IHRvIGJlY29tZSBhIHJlcGxpY2Egb2YgYSBSZWRpcyBpbnN0YW5jZSBhdCAxMjcuMC4wLjE6OTk5OQogICAgICogJHJlZGlzLT5yZXBsaWNhb2YoJzEyNy4wLjAuMScsIDk5OTkpOwogICAgICogLy8gV2hlbiBwYXNzZWQgbm8gYXJndW1lbnRzLCBQaHBSZWRpcyB3aWxsIGRlbGl2ZXIgdGhlIGNvbW1hbmQgYFJFUExJQ0FPRiBOTyBPTkVgCiAgICAgKiAvLyBhdHRlbXB0aW5nIHRvIHByb21vdGUgdGhlIGluc3RhbmNlIHRvIGEgcHJpbWFyeS4KICAgICAqICRyZWRpcy0+cmVwbGljYW9mKCk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsaWNhb2YoP3N0cmluZyAkaG9zdCA9IG51bGwsIGludCAkcG9ydCA9IDYzNzkpOiBSZWRpc3xib29sIHt9CgogICAgLyoqCiAgICAgKiBVcGRhdGUgb25lIG9yIG1vcmUga2V5cyBsYXN0IG1vZGlmaWVkIG1ldGFkYXRhLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3RvdWNoLwogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAka2V5X29yX2FycmF5CiAgICAgKiBAcGFyYW0gc3RyaW5nIC4uLiRtb3JlX2tleXMgT25lIG9yIG1vcmUga2V5cyB0byBzZW5kIHRvIHRoZSBjb21tYW5kLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgICAgIFRoaXMgY29tbWFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2Yga2V5cyB0aGF0IGV4aXN0IGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhZCB0aGVpciBsYXN0IG1vZGlmaWVkIHRpbWUgcmVzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvdWNoKGFycmF5fHN0cmluZyAka2V5X29yX2FycmF5LCBzdHJpbmcgLi4uJG1vcmVfa2V5cyk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSW50ZXJhY3Qgd2l0aCBSZWRpcycgc2xvd2xvZyBmdW5jdGlvbmFsaXR5IGluIHZhcmlvdXMgd2F5cywgZGVwZW5kaW5nCiAgICAgKiBvbiB0aGUgdmFsdWUgb2YgJ29wZXJhdGlvbicuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcGVyYXRpb24gVGhlIG9wZXJhdGlvbiB5b3Ugd2lzaCB0byBwZXJmb3JtLiAgVGhpcyBjYW4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAnR0VUJyAgIC0gUmV0cmlldmUgdGhlIFJlZGlzIHNsb3dsb2cgYXMgYW4gYXJyYXkuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICdMRU4nICAgLSBSZXRyaWV2ZSB0aGUgbGVuZ3RoIG9mIHRoZSBzbG93bG9nLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAnUkVTRVQnIC0gUmVtb3ZlIGFsbCBzbG93bG9nIGVudHJpZXMuCiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGggVGhpcyBvcHRpb25hbCBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIHdoZW4gb3BlcmF0aW9uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzICdnZXQnIGFuZCB3aWxsIHNwZWNpZnkgaG93IG1hbnkgZWxlbWVudHMgdG8gcmV0cmlldmUuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG9taXR0ZWQgUmVkaXMgd2lsbCBzZW5kIHVwIHRvIGEgZGVmYXVsdCBudW1iZXIgb2YKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcywgd2hpY2ggaXMgY29uZmlndXJhYmxlLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiAgV2l0aCBSZWRpcyA+PSA3LjAuMCB5b3UgY2FuIHNlbmQgLTEgdG8gbWVhbiAiYWxsIi4KICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zbG93bG9nLwogICAgICogQGV4YW1wbGUgJHJlZGlzLT5zbG93bG9nKCdnZXQnLCAtMSk7ICAgLy8gUmV0cmlldmUgYWxsIHNsb3dsb2cgZW50cmllcy4KICAgICAqIEBleGFtcGxlICRyZWRpcy0+c2xvd2xvZygnbGVuJyk7ICAgICAgIC8vIFJldHJpZXZlIHNsb3dsb2cgbGVuZ3RoLgogICAgICogQGV4YW1wbGUgJHJlZGlzLT5zbG93bG9nKCdyZXNldCcpOyAgICAgLy8gUmVzZXQgdGhlIHNsb3dsb2cuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzbG93bG9nKHN0cmluZyAkb3BlcmF0aW9uLCBpbnQgJGxlbmd0aCA9IDApOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogU29ydCB0aGUgY29udGVudHMgb2YgYSBSZWRpcyBrZXkgaW4gdmFyaW91cyB3YXlzLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NvcnQvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB5b3Ugd2lzaCB0byBzb3J0CiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkb3B0aW9ucyBWYXJpb3VzIG9wdGlvbnMgY29udHJvbGxpbmcgaG93IHlvdSB3b3VsZCBsaWtlIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHNvcnRlZC4gIFNlZSBibG93IGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoaXMgb3B0aW9ucyBhcnJheS4KICAgICAqIEByZXR1cm4gbWl4ZWQgVGhpcyBjb21tYW5kIGNhbiBlaXRoZXIgcmV0dXJuIGFuIGFycmF5IHdpdGggdGhlIHNvcnRlZCBkYXRhCiAgICAgKiAgICAgICAgICAgICAgIG9yIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgcGxhY2VkIGluIGEgZGVzdGluYXRpb24gc2V0IHdoZW4KICAgICAqICAgICAgICAgICAgICAgdXNpbmcgdGhlIFNUT1JFIG9wdGlvbi4KICAgICAqIEBleGFtcGxlCiAgICAgKiAkb3B0aW9ucyA9IFsKICAgICAqICAgICAnU09SVCcgID0+ICdBU0MnfHwgJ0RFU0MnIC8vIFNvcnQgaW4gZGVzY2VuZGluZyBvciBkZXNjZW5kaW5nIG9yZGVyLgogICAgICogICAgICdBTFBIQScgPT4gdHJ1ZSB8fCBmYWxzZSAgLy8gV2hldGhlciB0byBzb3J0IGFscGhhbnVtZXJpY2FsbHkuCiAgICAgKiAgICAgJ0xJTUlUJyA9PiBbMCwgMTBdICAgICAgICAvLyBSZXR1cm4gYSBzdWJzZXQgb2YgdGhlIGRhdGEgYXQgb2Zmc2V0LCBjb3VudAogICAgICogICAgICdCWScgICAgPT4gJ3dlaWdodF8qJyAgICAgLy8gRm9yIGVhY2ggZWxlbWVudCBpbiB0aGUga2V5LCByZWFkIGRhdGEgZnJvbSB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsIGtleSB3ZWlnaHRfKiBhbmQgc29ydCBiYXNlZCBvbiB0aGF0IHZhbHVlLgogICAgICogICAgICdHRVQnICAgPT4gJ3dlaWdodF8qJyAgICAgLy8gRm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgc291cmNlIGtleSwgcmV0cmlldmUgdGhlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIGZyb20ga2V5IHdlaWdodF8qIGFuZCByZXR1cm4gdGhhdCBpbiB0aGUgcmVzdWx0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiB0aGUgc291cmNlIGtleXMnIGVsZW1lbnQuICBUaGlzIGNhbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoICdCWScKICAgICAqIF07CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0KHN0cmluZyAka2V5LCA/YXJyYXkgJG9wdGlvbnMgPSBudWxsKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFRoaXMgaXMgc2ltcGx5IGEgcmVhZC1vbmx5IHZhcmlhbnQgb2YgdGhlIHNvcnQgY29tbWFuZAogICAgICogQHNlZSBSZWRpczo6c29ydCgpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0X3JvKHN0cmluZyAka2V5LCA/YXJyYXkgJG9wdGlvbnMgPSBudWxsKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0QXNjKHN0cmluZyAka2V5LCA/c3RyaW5nICRwYXR0ZXJuID0gbnVsbCwgbWl4ZWQgJGdldCA9IG51bGwsIGludCAkb2Zmc2V0ID0gLTEsIGludCAkY291bnQgPSAtMSwgP3N0cmluZyAkc3RvcmUgPSBudWxsKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0QXNjQWxwaGEoc3RyaW5nICRrZXksID9zdHJpbmcgJHBhdHRlcm4gPSBudWxsLCBtaXhlZCAkZ2V0ID0gbnVsbCwgaW50ICRvZmZzZXQgPSAtMSwgaW50ICRjb3VudCA9IC0xLCA/c3RyaW5nICRzdG9yZSA9IG51bGwpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNvcnREZXNjKHN0cmluZyAka2V5LCA/c3RyaW5nICRwYXR0ZXJuID0gbnVsbCwgbWl4ZWQgJGdldCA9IG51bGwsIGludCAkb2Zmc2V0ID0gLTEsIGludCAkY291bnQgPSAtMSwgP3N0cmluZyAkc3RvcmUgPSBudWxsKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0RGVzY0FscGhhKHN0cmluZyAka2V5LCA/c3RyaW5nICRwYXR0ZXJuID0gbnVsbCwgbWl4ZWQgJGdldCA9IG51bGwsIGludCAkb2Zmc2V0ID0gLTEsIGludCAkY291bnQgPSAtMSwgP3N0cmluZyAkc3RvcmUgPSBudWxsKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBvbmUgb3IgbW9yZSB2YWx1ZXMgZnJvbSBhIFJlZGlzIFNFVCBrZXkuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc3JlbQogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBSZWRpcyBTRVQga2V5IGluIHF1ZXN0aW9uLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgZmlyc3QgdmFsdWUgdG8gcmVtb3ZlLgogICAgICogQHBhcmFtIG1peGVkIC4uLiRvdGhlcl92YWx1ZXMgT25lIG9yIG1vcmUgYWRkaXRpb25hbCB2YWx1ZXMgdG8gcmVtb3ZlLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgICAgVGhlIG51bWJlciBvZiB2YWx1ZXMgcmVtb3ZlZCBmcm9tIHRoZSBzZXQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBleGFtcGxlICRyZWRpcy0+c1JlbSgnc2V0MScsICdtZW0xJywgJ21lbTInLCAnbm90LWluLXNldCcpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3JlbShzdHJpbmcgJGtleSwgbWl4ZWQgJHZhbHVlLCBtaXhlZCAuLi4kb3RoZXJfdmFsdWVzKTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTY2FuIHRoZSBtZW1iZXJzIG9mIGEgcmVkaXMgU0VUIGtleS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zc2NhbgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NjYW4KICAgICAqIEBzZWUgUmVkaXM6OnNldE9wdGlvbigpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIFJlZGlzIFNFVCBrZXkgaW4gcXVlc3Rpb24uCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGl0ZXJhdG9yIEEgcmVmZXJlbmNlIHRvIGFuIGl0ZXJhdG9yIHdoaWNoIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byBOVUxMIHRoYXQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBQaHBSZWRpcyB3aWxsIHVwZGF0ZSB3aXRoIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIFJlZGlzIGFmdGVyIGVhY2gKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50IGNhbGwgdG8gU1NDQU4uICBPbmNlIHRoaXMgY3Vyc29yIGlzIHplcm8geW91IGtub3cgYWxsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVycyBoYXZlIGJlZW4gdHJhdmVyc2VkLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwYXR0ZXJuIEFuIG9wdGlvbmFsIGdsb2Igc3R5bGUgcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0LCBzbyBSZWRpcyBvbmx5CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyB0aGUgc3Vic2V0IG9mIG1lbWJlcnMgbWF0Y2hpbmcgdGhpcyBwYXR0ZXJuLgogICAgICogQHBhcmFtIGludCAkY291bnQgQSBoaW50IHRvIFJlZGlzIGFzIHRvIGhvdyBtYW55IG1lbWJlcnMgaXQgc2hvdWxkIHNjYW4gaW4gb25lIGNvbW1hbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgcmV0dXJuaW5nIG1lbWJlcnMgZm9yIHRoYXQgaXRlcmF0aW9uLgogICAgICogQHJldHVybiBhcnJheXxmYWxzZQogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+ZGVsKCdteXNldCcpOwogICAgICogZm9yICgkaSA9IDA7ICRpIDwgMTAwMDA7ICRpKyspIHsKICAgICAqICAgICAkcmVkaXMtPnNBZGQoJ215c2V0JywgIm1lbWJlcjokaSIpOwogICAgICogfQogICAgICogJHJlZGlzLT5zYWRkKCdteXNldCcsICdmb29mb28nKTsKICAgICAqICRyZWRpcy0+c2V0T3B0aW9uKFJlZGlzOjpPUFRfU0NBTiwgUmVkaXM6OlNDQU5fTk9SRVRSWSk7CiAgICAgKiAkc2Nhbm5lZCA9IDA7CiAgICAgKiAkaXQgPSBudWxsOwogICAgICogLy8gV2l0aG91dCBSZWRpczo6U0NBTl9SRVRSWSB3ZSBtYXkgcmVjZWl2ZSBlbXB0eSByZXN1bHRzIGFuZAogICAgICogLy8gYSBub256ZXJvIGl0ZXJhdG9yLgogICAgICogZG8gewogICAgICogICAgIC8vIFNjYW4gbWVtYmVycyBjb250YWluaW5nICc1JwogICAgICogICAgICRtZW1iZXJzID0gJHJlZGlzLT5zc2NhbignbXlzZXQnLCAkaXQsICcqNSonKTsKICAgICAqICAgICBmb3JlYWNoICgkbWVtYmVycyBhcyAkbWVtYmVyKSB7CiAgICAgKiAgICAgICAgICBlY2hvICJOT1JFVFJZOiAkbWVtYmVyXG4iOwogICAgICogICAgICAgICAgJHNjYW5uZWQrKzsKICAgICAqICAgICB9CiAgICAgKiB9IHdoaWxlICgkaXQgIT0gMCk7CiAgICAgKiBlY2hvICJUT1RBTDogJHNjYW5uZWRcbiI7CiAgICAgKiAkcmVkaXMtPnNldE9wdGlvbihSZWRpczo6T1BUX1NDQU4sIFJlZGlzOjpTQ0FOX1JFVFJZKTsKICAgICAqICRzY2FubmVkID0gMDsKICAgICAqICRpdCA9IG51bGw7CiAgICAgKiAvLyBXaXRoIFJlZGlzOjpTQ0FOX1JFVFJZIFBocFJlZGlzIHdpbGwgbmV2ZXIgcmV0dXJuIGFuIGVtcHR5IGFycmF5CiAgICAgKiAvLyB3aGVuIHRoZSBjdXJzb3IgaXMgbm9uLXplcm8KICAgICAqIHdoaWxlICgoJG1lbWJlcnMgPSAkcmVkaXMtPnNzY2FuKCdteXNldCcsICRpdCwgJyo1KicpKSkgewogICAgICogICAgIGZvcmVhY2ggKCRtZW1iZXJzIGFzICRtZW1iZXIpIHsKICAgICAqICAgICAgICAgZWNobyAiUkVUUlk6ICRtZW1iZXJcbiI7CiAgICAgKiAgICAgICAgICRzY2FubmVkKys7CiAgICAgKiAgICAgfQogICAgICogfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3NjYW4oc3RyaW5nICRrZXksID9pbnQgJiRpdGVyYXRvciwgP3N0cmluZyAkcGF0dGVybiA9IG51bGwsIGludCAkY291bnQgPSAwKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFN1YnNjcmliZXMgdGhlIGNsaWVudCB0byB0aGUgc3BlY2lmaWVkIHNoYXJkIGNoYW5uZWxzLgogICAgICogQHBhcmFtIGFycmF5ICRjaGFubmVscyBPbmUgb3IgbW9yZSBjaGFubmVsIG5hbWVzLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYiBUaGUgY2FsbGJhY2sgUGhwUmVkaXMgd2lsbCBpbnZva2Ugd2hlbiB3ZSByZWNlaXZlIGEgbWVzc2FnZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIG9uZSBvZiB0aGUgc3Vic2NyaWJlZCBjaGFubmVscy4KICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWlsdXJlLiAgTm90ZSB0aGF0IHRoaXMgY29tbWFuZCB3aWxsIGJsb2NrIHRoZQogICAgICogICAgICAgICAgICAgIGNsaWVudCBpbiBhIHN1YnNjcmliZSBsb29wLCB3YWl0aW5nIGZvciBtZXNzYWdlcyB0byBhcnJpdmUuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc3N1YnNjcmliZQogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcyA9IG5ldyBSZWRpcyhbJ2hvc3QnID0+ICdsb2NhbGhvc3QnXSk7CiAgICAgKiAkcmVkaXMtPnNzdWJzY3JpYmUoWydjaGFubmVsLTEnLCAnY2hhbm5lbC0yJ10sIGZ1bmN0aW9uICgkcmVkaXMsICRjaGFubmVsLCAkbWVzc2FnZSkgewogICAgICogICAgIGVjaG8gIlskY2hhbm5lbF06ICRtZXNzYWdlXG4iOwogICAgICogICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gdGhlIG1lc3NhZ2UgY2hhbm5lbCB3aGVuIHdlIHJlYWQgJ3F1aXQnCiAgICAgKiAgICAgaWYgKCRtZXNzYWdlID09ICdxdWl0JykgewogICAgICogICAgICAgICBlY2hvICJVbnN1YnNjcmliaW5nIGZyb20gJyRjaGFubmVsJ1xuIjsKICAgICAqICAgICAgICAgJHJlZGlzLT5zdW5zdWJzY3JpYmUoWyRjaGFubmVsXSk7CiAgICAgKiAgICAgfQogICAgICogfSk7CiAgICAgKiAvLyBPbmNlIHdlIHJlYWQgJ3F1aXQnIGZyb20gYm90aCBjaGFubmVsLTEgYW5kIGNoYW5uZWwtMiB0aGUgc3Vic2NyaWJlIGxvb3Agd2lsbCBiZQogICAgICogLy8gYnJva2VuIGFuZCB0aGlzIGNvbW1hbmQgd2lsbCBleGVjdXRlLgogICAgICogZWNobyAiU3Vic2NyaWJlIGxvb3AgZW5kZWRcbiI7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzc3Vic2NyaWJlKGFycmF5ICRjaGFubmVscywgY2FsbGFibGUgJGNiKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGxlbmd0aCBvZiBhIFJlZGlzIFNUUklORyBrZXkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB3ZSB3YW50IHRoZSBsZW5ndGggb2YuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcga2V5IGlmIGl0IGV4aXN0cywgemVybyBpZiBpdCBkb2VzIG5vdCwgYW5kCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3N0cmxlbgogICAgICogQGV4YW1wbGUgJHJlZGlzLT5zdHJsZW4oJ215a2V5Jyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJsZW4oc3RyaW5nICRrZXkpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFN1YnNjcmliZSB0byBvbmUgb3IgbW9yZSBSZWRpcyBwdWJzdWIgY2hhbm5lbHMuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNoYW5uZWxzIE9uZSBvciBtb3JlIGNoYW5uZWwgbmFtZXMuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNiIFRoZSBjYWxsYmFjayBQaHBSZWRpcyB3aWxsIGludm9rZSB3aGVuIHdlIHJlY2VpdmUgYSBtZXNzYWdlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gb25lIG9mIHRoZSBzdWJzY3JpYmVkIGNoYW5uZWxzLgogICAgICogQHJldHVybiBib29sIFRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpaWx1cmUuICBOb3RlIHRoYXQgdGhpcyBjb21tYW5kIHdpbGwgYmxvY2sgdGhlCiAgICAgKiAgICAgICAgICAgICAgY2xpZW50IGluIGEgc3Vic2NyaWJlIGxvb3AsIHdhaXRpbmcgZm9yIG1lc3NhZ2VzIHRvIGFycml2ZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9zdWJzY3JpYmUKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMgPSBuZXcgUmVkaXMoWydob3N0JyA9PiAnbG9jYWxob3N0J10pOwogICAgICogJHJlZGlzLT5zdWJzY3JpYmUoWydjaGFubmVsLTEnLCAnY2hhbm5lbC0yJ10sIGZ1bmN0aW9uICgkcmVkaXMsICRjaGFubmVsLCAkbWVzc2FnZSkgewogICAgICogICAgIGVjaG8gIlskY2hhbm5lbF06ICRtZXNzYWdlXG4iOwogICAgICogICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gdGhlIG1lc3NhZ2UgY2hhbm5lbCB3aGVuIHdlIHJlYWQgJ3F1aXQnCiAgICAgKiAgICAgaWYgKCRtZXNzYWdlID09ICdxdWl0JykgewogICAgICogICAgICAgICBlY2hvICJVbnN1YnNjcmliaW5nIGZyb20gJyRjaGFubmVsJ1xuIjsKICAgICAqICAgICAgICAgJHJlZGlzLT51bnN1YnNjcmliZShbJGNoYW5uZWxdKTsKICAgICAqICAgICB9CiAgICAgKiB9KTsKICAgICAqIC8vIE9uY2Ugd2UgcmVhZCAncXVpdCcgZnJvbSBib3RoIGNoYW5uZWwtMSBhbmQgY2hhbm5lbC0yIHRoZSBzdWJzY3JpYmUgbG9vcCB3aWxsIGJlCiAgICAgKiAvLyBicm9rZW4gYW5kIHRoaXMgY29tbWFuZCB3aWxsIGV4ZWN1dGUuCiAgICAgKiBlY2hvICJTdWJzY3JpYmUgbG9vcCBlbmRlZFxuIjsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1YnNjcmliZShhcnJheSAkY2hhbm5lbHMsIGNhbGxhYmxlICRjYik6IGJvb2wge30KCiAgICAvKioKICAgICAqIFVuc3Vic2NyaWJlcyB0aGUgY2xpZW50IGZyb20gdGhlIGdpdmVuIHNoYXJkIGNoYW5uZWxzLAogICAgICogb3IgZnJvbSBhbGwgb2YgdGhlbSBpZiBub25lIGlzIGdpdmVuLgogICAgICogQHBhcmFtIGFycmF5ICRjaGFubmVscyBPbmUgb3IgbW9yZSBjaGFubmVscyB0byB1bnN1YnNjcmliZSBmcm9tLgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxib29sIFRoZSBhcnJheSBvZiB1bnN1YnNjcmliZWQgY2hhbm5lbHMuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc3Vuc3Vic2NyaWJlCiAgICAgKiBAc2VlIFJlZGlzOjpzc3Vic2NyaWJlKCkKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnNzdWJzY3JpYmUoWydjaGFubmVsLTEnLCAnY2hhbm5lbC0yJ10sIGZ1bmN0aW9uICgkcmVkaXMsICRjaGFubmVsLCAkbWVzc2FnZSkgewogICAgICogICAgIGlmICgkbWVzc2FnZSA9PSAncXVpdCcpIHsKICAgICAqICAgICAgICAgZWNobyAiJGNoYW5uZWwgPT4gJ3F1aXQnIGRldGVjdGVkLCB1bnN1YnNjcmliaW5nIVxuIjsKICAgICAqICAgICAgICAgJHJlZGlzLT5zdW5zdWJzY3JpYmUoWyRjaGFubmVsXSk7CiAgICAgKiAgICAgfSBlbHNlIHsKICAgICAqICAgICAgICAgZWNobyAiJGNoYW5uZWwgPT4gJG1lc3NhZ2VcbiI7CiAgICAgKiAgICAgfQogICAgICogfSk7CiAgICAgKiBlY2hvICJXZSd2ZSB1bnN1YnNjcmliZWQgZnJvbSBib3RoIGNoYW5uZWxzLCBleGl0aW5nXG4iOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3Vuc3Vic2NyaWJlKGFycmF5ICRjaGFubmVscyk6IFJlZGlzfGFycmF5fGJvb2wge30KCiAgICAvKioKICAgICAqIEF0b21pY2FsbHkgc3dhcCB0d28gUmVkaXMgZGF0YWJhc2VzIHNvIHRoYXQgYWxsIG9mIHRoZSBrZXlzIGluIHRoZSBzb3VyY2UgZGF0YWJhc2Ugd2lsbAogICAgICogbm93IGJlIGluIHRoZSBkZXN0aW5hdGlvbiBkYXRhYmFzZSBhbmQgdmljZS12ZXJzYS4KICAgICAqIE5vdGU6IFRoaXMgY29tbWFuZCBzaW1wbHkgc3dhcHMgUmVkaXMnIGludGVybmFsIHBvaW50ZXIgdG8gdGhlIGRhdGFiYXNlIGFuZCBpcyB0aGVyZWZvcmUKICAgICAqIHZlcnkgZmFzdCwgcmVnYXJkbGVzcyBvZiB0aGUgc2l6ZSBvZiB0aGUgdW5kZXJseWluZyBkYXRhYmFzZXMuCiAgICAgKiBAcGFyYW0gaW50ICRzcmMgVGhlIHNvdXJjZSBkYXRhYmFzZSBudW1iZXIKICAgICAqIEBwYXJhbSBpbnQgJGRzdCBUaGUgZGVzdGluYXRpb24gZGF0YWJhc2UgbnVtYmVyCiAgICAgKiBAcmV0dXJuIFJlZGlzfGJvb2wgU3VjY2VzcyBpZiB0aGUgZGF0YWJhc2VzIGNvdWxkIGJlIHN3YXBwZWQgYW5kIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvc3dhcGRiCiAgICAgKiBAc2VlIFJlZGlzOjpkZWwoKQogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+c2VsZWN0KDApOwogICAgICogJHJlZGlzLT5zZXQoJ2RiMC1rZXknLCAnZGIwLXZhbHVlJyk7CiAgICAgKiAkcmVkaXMtPnN3YXBkYigwLCAxKTsKICAgICAqICRyZWRpcy0+Z2V0KCdkYjAta2V5Jyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzd2FwZGIoaW50ICRzcmMsIGludCAkZHN0KTogUmVkaXN8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIHNlcnZlciB0aW1lIGZyb20gdGhlIGNvbm5lY3RlZCBSZWRpcyBpbnN0YW5jZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy90aW1lCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5IEEgdHdvIGVsZW1lbnQgYXJyYXkgY29uc2lzdGluZyBvZiBhIFVuaXggVGltZXN0YW1wIGFuZCB0aGUgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcwogICAgICogICAgICAgICBlbGFwc2VkIHNpbmNlIHRoZSBzZWNvbmQuCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnRpbWUoKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpbWUoKTogUmVkaXN8YXJyYXkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgYW1vdW50IG9mIHRpbWUgYSBSZWRpcyBrZXkgaGFzIGJlZm9yZSBpdCB3aWxsIGV4cGlyZSwgaW4gc2Vjb25kcy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgS2V5IHdlIHdhbnQgdGhlIFRUTCBmb3IuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSAoYSkgVGhlIG51bWJlciBvZiBzZWNvbmRzIHVudGlsIHRoZSBrZXkgZXhwaXJlcywgb3IgLTEgaWYgdGhlIGtleSBoYXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIG5vIGV4cGlyYXRpb24sIGFuZCAtMiBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LiAgSW4gdGhlIGV2ZW50IG9mIGFuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwgdGhpcyBjb21tYW5kIHdpbGwgcmV0dXJuIGZhbHNlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3R0bAogICAgICogQGV4YW1wbGUgJHJlZGlzLT50dGwoJ215a2V5Jyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0dGwoc3RyaW5nICRrZXkpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgdHlwZSBvZiBhIGdpdmVuIFJlZGlzIGtleS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy90eXBlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBjaGVjawogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIFJlZGlzIHR5cGUgY29uc3RhbnQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIFRoZSBSZWRpcyBjbGFzcyBkZWZpbmVzIHNldmVyYWwgdHlwZSBjb25zdGFudHMgdGhhdCBjb3JyZXNwb25kIHdpdGggUmVkaXMga2V5IHR5cGVzLgogICAgICogICAgIFJlZGlzOjpSRURJU19OT1RfRk9VTkQKICAgICAqICAgICBSZWRpczo6UkVESVNfU1RSSU5HCiAgICAgKiAgICAgUmVkaXM6OlJFRElTX1NFVAogICAgICogICAgIFJlZGlzOjpSRURJU19MSVNUCiAgICAgKiAgICAgUmVkaXM6OlJFRElTX1pTRVQKICAgICAqICAgICBSZWRpczo6UkVESVNfSEFTSAogICAgICogICAgIFJlZGlzOjpSRURJU19TVFJFQU0KICAgICAqIEBleGFtcGxlCiAgICAgKiBmb3JlYWNoICgkcmVkaXMtPmtleXMoJyonKSBhcyAka2V5KSB7CiAgICAgKiAgICAgZWNobyAiJGtleSA9PiAiIC4gJHJlZGlzLT50eXBlKCRrZXkpIC4gIlxuIjsKICAgICAqIH0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHR5cGUoc3RyaW5nICRrZXkpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIERlbGV0ZSBvbmUgb3IgbW9yZSBrZXlzIGZyb20gdGhlIFJlZGlzIGRhdGFiYXNlLiAgVW5saWtlIHRoaXMgb3BlcmF0aW9uLCB0aGUgYWN0dWFsCiAgICAgKiBkZWxldGlvbiBpcyBhc3luY2hyb25vdXMsIG1lYW5pbmcgaXQgaXMgc2FmZSB0byBkZWxldGUgbGFyZ2Uga2V5cyB3aXRob3V0IGZlYXIgb2YKICAgICAqIFJlZGlzIGJsb2NraW5nIGZvciBhIGxvbmcgcGVyaW9kIG9mIHRpbWUuCiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRrZXkgRWl0aGVyIGFuIGFycmF5IHdpdGggb25lIG9yIG1vcmUga2V5cyBvciBhIHN0cmluZyB3aXRoCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmlyc3Qga2V5IHRvIGRlbGV0ZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgLi4uJG90aGVyX2tleXMgSWYgdGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIG1ldGhvZCB3YXMgYSBzdHJpbmcKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBtYXkgcGFzcyBhbnkgbnVtYmVyIG9mIGFkZGl0aW9uYWwga2V5IG5hbWVzLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBrZXlzIGRlbGV0ZWQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy91bmxpbmsKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9kZWwKICAgICAqIEBzZWUgUmVkaXM6OmRlbCgpCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnVubGluaygna2V5MScsICdrZXkyJywgJ2tleTMnKTsKICAgICAqIEBleGFtcGxlICRyZWRpcy0+dW5saW5rKFsna2V5MScsICdrZXkyJywgJ2tleTMnXSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bmxpbmsoYXJyYXl8c3RyaW5nICRrZXksIHN0cmluZyAuLi4kb3RoZXJfa2V5cyk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVW5zdWJzY3JpYmUgZnJvbSBvbmUgb3IgbW9yZSBzdWJzY3JpYmVkIGNoYW5uZWxzLgogICAgICogQHBhcmFtIGFycmF5ICRjaGFubmVscyBPbmUgb3IgbW9yZSBjaGFubmVscyB0byB1bnN1YnNjcmliZSBmcm9tLgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxib29sIFRoZSBhcnJheSBvZiB1bnN1YnNjcmliZWQgY2hhbm5lbHMuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvdW5zdWJzY3JpYmUKICAgICAqIEBzZWUgUmVkaXM6OnN1YnNjcmliZSgpCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT5zdWJzY3JpYmUoWydjaGFubmVsLTEnLCAnY2hhbm5lbC0yJ10sIGZ1bmN0aW9uICgkcmVkaXMsICRjaGFubmVsLCAkbWVzc2FnZSkgewogICAgICogICAgIGlmICgkbWVzc2FnZSA9PSAncXVpdCcpIHsKICAgICAqICAgICAgICAgZWNobyAiJGNoYW5uZWwgPT4gJ3F1aXQnIGRldGVjdGVkLCB1bnN1YnNjcmliaW5nIVxuIjsKICAgICAqICAgICAgICAgJHJlZGlzLT51bnN1YnNjcmliZShbJGNoYW5uZWxdKTsKICAgICAqICAgICB9IGVsc2UgewogICAgICogICAgICAgICBlY2hvICIkY2hhbm5lbCA9PiAkbWVzc2FnZVxuIjsKICAgICAqICAgICB9CiAgICAgKiB9KTsKICAgICAqIGVjaG8gIldlJ3ZlIHVuc3Vic2NyaWJlZCBmcm9tIGJvdGggY2hhbm5lbHMsIGV4aXRpbmdcbiI7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnN1YnNjcmliZShhcnJheSAkY2hhbm5lbHMpOiBSZWRpc3xhcnJheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgYW55IHByZXZpb3VzbHkgV0FUQ0gnZWQga2V5cyBpbiBhIHRyYW5zYWN0aW9uLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3Vud2F0Y2gKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy91bndhdGNoCiAgICAgKiBAc2VlIFJlZGlzOjp3YXRjaCgpCiAgICAgKiBAcmV0dXJuIFJlZGlzfGJvb2wgb24gc3VjY2VzcyBhbmQgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVud2F0Y2goKTogUmVkaXN8Ym9vbCB7fQoKICAgIC8qKgogICAgICogV2F0Y2ggb25lIG9yIG1vcmUga2V5cyBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uIG9mIGEgdHJhbnNhY3Rpb24uCiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRrZXkgRWl0aGVyIGFuIGFycmF5IHdpdGggb25lIG9yIG1vcmUga2V5IG5hbWVzLCBvciBhIHN0cmluZyBrZXkgbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAuLi4kb3RoZXJfa2V5cyBJZiB0aGUgZmlyc3QgYXJndW1lbnQgd2FzIHBhc3NlZCBhcyBhIHN0cmluZywgYW55IG51bWJlciBvZiBhZGRpdGlvbmFsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGtleSBuYW1lcyBtYXkgYmUgcGFzc2VkIHZhcmlhZGljYWxseS4KICAgICAqIEByZXR1cm4gUmVkaXN8Ym9vbAogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3dhdGNoCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvdW53YXRjaAogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpczEgPSBuZXcgUmVkaXMoWydob3N0JyA9PiAnbG9jYWxob3N0J10pOwogICAgICogJHJlZGlzMiA9IG5ldyBSZWRpcyhbJ2hvc3QnID0+ICdsb2NhbGhvc3QnXSk7CiAgICAgKiAvLyBTdGFydCB3YXRjaGluZyAnaW5jci1rZXknCiAgICAgKiAkcmVkaXMxLT53YXRjaCgnaW5jci1rZXknKTsKICAgICAqIC8vIFJldHJpZXZlIGl0cyB2YWx1ZS4KICAgICAqICR2YWwgPSAkcmVkaXMxLT5nZXQoJ2luY3Ita2V5Jyk7CiAgICAgKiAvLyBBIHNlY29uZCBjbGllbnQgbW9kaWZpZXMgJ2luY3Ita2V5JyBhZnRlciB3ZSByZWFkIGl0LgogICAgICogJHJlZGlzMi0+c2V0KCdpbmNyLWtleScsIDApOwogICAgICogLy8gQmVjYXVzZSBhbm90aGVyIGNsaWVudCBjaGFuZ2VkIHRoZSB2YWx1ZSBvZiAnaW5jci1rZXknIGFmdGVyIHdlIHJlYWQgaXQsIHRoaXMKICAgICAqIC8vIGlzIG5vIGxvbmdlciBhIHByb3BlciBpbmNyZW1lbnQgb3BlcmF0aW9uLCBidXQgYmVjYXVzZSB3ZSBhcmUgYFdBVENIYGluZyB0aGUKICAgICAqIC8vIGtleSwgdGhpcyB0cmFuc2FjdGlvbiB3aWxsIGZhaWwgYW5kIHdlIGNhbiB0cnkgYWdhaW4uCiAgICAgKiAvLwogICAgICogLy8gSWYgd2VyZSB0byBjb21tZW50IG91dCB0aGUgYWJvdmUgYCRyZWRpczItPnNldCgnaW5jci1rZXknLCAwKWAgbGluZSB0aGUKICAgICAqIC8vIHRyYW5zYWN0aW9uIHdvdWxkIHN1Y2NlZWQuCiAgICAgKiAkcmVkaXMxLT5tdWx0aSgpOwogICAgICogJHJlZGlzMS0+c2V0KCdpbmNyLWtleScsICR2YWwgKyAxKTsKICAgICAqICRyZXMgPSAkcmVkaXMxLT5leGVjKCk7CiAgICAgKiAvLyBib29sKGZhbHNlKQogICAgICogdmFyX2R1bXAoJHJlcyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3YXRjaChhcnJheXxzdHJpbmcgJGtleSwgc3RyaW5nIC4uLiRvdGhlcl9rZXlzKTogUmVkaXN8Ym9vbCB7fQoKICAgIC8qKgogICAgICogQmxvY2sgdGhlIGNsaWVudCB1cCB0byB0aGUgcHJvdmlkZWQgdGltZW91dCB1bnRpbCBhIGNlcnRhaW4gbnVtYmVyIG9mIHJlcGxpY2FzIGhhdmUgY29uZmlybWVkCiAgICAgKiByZWNpZXZpbmcgdGhlbS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy93YWl0CiAgICAgKiBAcGFyYW0gaW50ICRudW1yZXBsaWNhcyBUaGUgbnVtYmVyIG9mIHJlcGxpY2FzIHdlIHdhbnQgdG8gY29uZmlybSB3cml0ZSBvcGVyYWlvbnMKICAgICAqIEBwYXJhbSBpbnQgJHRpbWVvdXQgSG93IGxvbmcgdG8gd2FpdCAoemVybyBtZWFuaW5nIGZvcmV2ZXIpLgogICAgICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiByZXBsaWNhcyB0aGF0IGhhdmUgY29uZmlybWVkIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3YWl0KGludCAkbnVtcmVwbGljYXMsIGludCAkdGltZW91dCk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQWNrbm93bGVkZ2Ugb25lIG9yZSBtb3JlIG1lc3NhZ2VzIHRoYXQgYXJlIHBlbmRpbmcgKGhhdmUgYmVlbiBjb25zdW1lZCB1c2luZyBYUkVBREdST1VQIGJ1dAogICAgICogbm90IHlldCBhY2tub3dsZWRnZWQgYnkgWEFDSy4pCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHN0cmVhbSB0byBxdWVyeS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGdyb3VwIFRoZSBjb25zdW1lciBncm91cCB0byB1c2UuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGlkcyBBbiBhcnJheSBvZiBzdHJlYW0gZW50cnkgSURzLgogICAgICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBhY2tub3dsZWRnZWQgbWVzc2FnZXMKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy94YWNrCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMveHJlYWRncm91cAogICAgICogQHNlZSBSZWRpczo6eGFjaygpCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT54QWRkKCdzaGlwcycsICcqJywgWyduYW1lJyA9PiAnRW50ZXJwcmlzZSddKTsKICAgICAqICRyZWRpcy0+eEFkZCgnc2hpcHMnLCAnKicsIFsnbmFtZScgPT4gJ0RlZmlhbnQnXSk7CiAgICAgKiAkcmVkaXMtPnhHcm91cCgnQ1JFQVRFJywgJ3NoaXBzJywgJ0ZlZGVyYXRpb24nLCAnMC0wJyk7CiAgICAgKiAvLyBDb25zdW1lIGEgc2luZ2xlIG1lc3NhZ2Ugd2l0aCB0aGUgY29uc3VtZXIgZ3JvdXAgJ0ZlZGVyYXRpb24nCiAgICAgKiAkc2hpcCA9ICRyZWRpcy0+eFJlYWRHcm91cCgnRmVkZXJhdGlvbicsICdQaWNhcmQnLCBbJ3NoaXBzJyA9PiAnPiddLCAxKTsKICAgICAqIC8qIFJldHJpZXZlIHRoZSBJRCBvZiB0aGUgbWVzc2FnZSB3ZSByZWFkLgogICAgICogYXNzZXJ0KGlzc2V0KCRzaGlwWydzaGlwcyddKSk7CiAgICAgKiAkaWQgPSBrZXkoJHNoaXBbJ3NoaXBzJ10pOwogICAgICogLy8gVGhlIG1lc3NhZ2Ugd2UganVzdCByZWFkIGlzIG5vdyBwZW5kaW5nLgogICAgICogJHJlcyA9ICRyZWRpcy0+eFBlbmRpbmcoJ3NoaXBzJywgJ0ZlZGVyYXRpb24nKSk7CiAgICAgKiB2YXJfZHVtcCgkcmVzKTsKICAgICAqIC8vIFdlIGNhbiB0ZWxsIFJlZGlzIHdlIHdlcmUgYWJsZSB0byBwcm9jZXNzIHRoZSBtZXNzYWdlIGJ5IHVzaW5nIFhBQ0sKICAgICAqICRyZXMgPSAkcmVkaXMtPnhBY2soJ3NoaXBzJywgJ0ZlZGVyYXRpb24nLCBbJGlkXSk7CiAgICAgKiBhc3NlcnQoJHJlcyA9PT0gMSk7CiAgICAgKiAvLyBUaGUgbWVzc2FnZSBzaG91bGQgbm8gbG9uZ2VyIGJlIHBlbmRpbmcuCiAgICAgKiAkcmVzID0gJHJlZGlzLT54UGVuZGluZygnc2hpcHMnLCAnRmVkZXJhdGlvbicpOwogICAgICogdmFyX2R1bXAoJHJlcyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB4YWNrKHN0cmluZyAka2V5LCBzdHJpbmcgJGdyb3VwLCBhcnJheSAkaWRzKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBBcHBlbmQgYSBtZXNzYWdlIHRvIGEgc3RyZWFtLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzdHJlYW0gbmFtZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIFRoZSBJRCBmb3IgdGhlIG1lc3NhZ2Ugd2Ugd2FudCB0byBhZGQuICBUaGlzIGNhbiBiZSB0aGUgc3BlY2lhbCB2YWx1ZSAnKicKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggbWVhbnMgUmVkaXMgd2lsbCBnZW5lcmF0ZSB0aGUgSUQgdGhhdCBhcHBlbmRzIHRoZSBtZXNzYWdlIHRvIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgb2YgdGhlIHN0cmVhbS4gIEl0IGNhbiBhbHNvIGJlIGEgdmFsdWUgaW4gdGhlIGZvcm0gPG1zPi0qIHdoaWNoIHdpbGwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGUgYW4gSUQgdGhhdCBhcHBlbmRzIHRvIHRoZSBlbmQgb3QgZW50cmllcyB3aXRoIHRoZSBzYW1lIDxtcz4gdmFsdWUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIGFueSBleGlzdCkuCiAgICAgKiBAcGFyYW0gaW50ICRtYXhsZW4gSWYgc3BlY2lmaWVkIFJlZGlzIHdpbGwgYXBwZW5kIHRoZSBuZXcgbWVzc2FnZSBidXQgdHJpbSBhbnkgbnVtYmVyIG9mIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRlc3QgbWVzc2FnZXMgaW4gdGhlIHN0cmVhbSB1bnRpbCB0aGUgbGVuZ3RoIGlzIDw9ICRtYXhsZW4uCiAgICAgKiBAcGFyYW0gYm9vbCAkYXBwcm94IFVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgJG1heGxlbmAsIHRoaXMgZmxhZyB0ZWxscyBSZWRpcyB0byB0cmltIHRoZSBzdHJlYW0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGluIGEgbW9yZSBlZmZpY2llbnQgd2F5LCBtZWFuaW5nIHRoZSB0cmltbWluZyBtYXkgbm90IGJlIGV4YWN0bHkgdG8KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYCRtYXhsZW5gIHZhbHVlcy4KICAgICAqIEBwYXJhbSBib29sICRub21rc3RyZWFtIElmIHBhc3NlZCBhcyBgVFJVRWAsIHRoZSBzdHJlYW0gbXVzdCBleGlzdCBmb3IgUmVkaXMgdG8gYXBwZW5kIHRoZSBtZXNzYWdlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3hhZGQKICAgICAqIEBleGFtcGxlICRyZWRpcy0+eEFkZCgnZHM5LXNlYXNvbi0xJywgJzEtMScsIFsndGl0bGUnID0+ICdFbWlzc2FyeSBQYXJ0IDEnXSk7CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnhBZGQoJ2RzOS1zZWFzb24tMScsICcxLTInLCBbJ3RpdGxlJyA9PiAnQSBNYW4gQWxvbmUnXSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB4YWRkKHN0cmluZyAka2V5LCBzdHJpbmcgJGlkLCBhcnJheSAkdmFsdWVzLCBpbnQgJG1heGxlbiA9IDAsIGJvb2wgJGFwcHJveCA9IGZhbHNlLCBib29sICRub21rc3RyZWFtID0gZmFsc2UpOiBSZWRpc3xzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFRoaXMgY29tbWFuZCBhbGxvd3MgYSBjb25zdW1lciB0byBjbGFpbSBwZW5kaW5nIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIGlkbGUgZm9yIGEgc3BlY2lmaWVkIHBlcmlvZCBvZiB0aW1lLgogICAgICogSXRzIHB1cnBvc2UgaXMgdG8gcHJvdmlkZSBhIG1lY2hhbmlzbSBmb3IgcGlja2luZyB1cCBtZXNzYWdlcyB0aGF0IG1heSBoYXZlIGhhZCBhIGZhaWxlZCBjb25zdW1lci4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy94YXV0b2NsYWltCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMveGNsYWltCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vZG9jcy9kYXRhLXR5cGVzL3N0cmVhbXMtdHV0b3JpYWwvCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHN0cmVhbSB0byBjaGVjay4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGdyb3VwIFRoZSBjb25zdW1lciBncm91cCB0byBxdWVyeS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnN1bWVyIFdoaWNoIGNvbnN1bWVyIHRvIGNoZWNrLgogICAgICogQHBhcmFtIGludCAkbWluX2lkbGUgVGhlIG1pbmltdW0gdGltZSBpbiBtaWxsaXNlY29uZHMgZm9yIHRoZSBtZXNzYWdlIHRvIGhhdmUgYmVlbiBwZW5kaW5nLgogICAgICogQHBhcmFtIHN0cmluZyAkc3RhcnQgVGhlIG1pbmltdW0gbWVzc2FnZSBpZCB0byBjaGVjay4KICAgICAqIEBwYXJhbSBpbnQgJGNvdW50IEFuIG9wdGlvbmFsIGxpbWl0IG9uIGhvdyBtYW55IG1lc3NhZ2VzIGFyZSByZXR1cm5lZC4KICAgICAqIEBwYXJhbSBib29sICRqdXN0aWQgSWYgdGhlIGNsaWVudCBvbmx5IHdhbnRzIG1lc3NhZ2UgSURzIGFuZCBub3QgYWxsIG9mIHRoZWlyIGRhdGEuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGJvb2wgQW4gYXJyYXkgb2YgcGVuZGluZyBJRHMgb3IgZmFsc2UgaWYgdGhlcmUgYXJlIG5vbmUsIG9yIG9uIGZhaWx1cmUuCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT54R3JvdXAoJ0NSRUFURScsICdzaGlwcycsICdjb21iYXRhbnRzJywgJzAtMCcsIHRydWUpOwogICAgICogJHJlZGlzLT54QWRkKCdzaGlwcycsICcxNDI0LTc0MjA1JywgWyduYW1lJyA9PiAnRGVmaWFudCddKTsKICAgICAqIC8vIENvbnN1bWUgdGhlIFsnbmFtZScgPT4gJ0RlZmlhbnQnXSBtZXNzYWdlCiAgICAgKiAkbXNncyA9ICRyZWRpcy0+eFJlYWRHcm91cCgnY29tYmF0YW50cycsICJKZW0nSGFkYXIiLCBbJ3NoaXBzJyA9PiAnPiddLCAxKTsKICAgICAqIC8vIFRoZSAiSmVtJ0hhZGFyIiBjb25zdW1lciBoYXMgdGhlIG1lc3NhZ2UgcHJlc2VudGx5CiAgICAgKiAkcGVuZGluZyA9ICRyZWRpcy0+eFBlbmRpbmcoJ3NoaXBzJywgJ2NvbWJhdGFudHMnKTsKICAgICAqIHZhcl9kdW1wKCRwZW5kaW5nKTsKICAgICAqIC8vIEFzc3N1bWUgY29udHJvbCBvZiB0aGUgcGVuZGluZyBtZXNzYWdlIHdpdGggYSBkaWZmZXJlbnQgY29uc3VtZXIuCiAgICAgKiAkcmVzID0gJHJlZGlzLT54QXV0b0NsYWltKCdzaGlwcycsICdjb21iYXRhbnRzJywgJ1Npc2tvJywgMCwgJzAtMCcpOwogICAgICogLy8gTm93IHRoZSAnU2lza28nIGNvbnN1bWVyIG93bnMgdGhlIG1lc3NhZ2UKICAgICAqICRwZW5kaW5nID0gJHJlZGlzLT54UGVuZGluZygnc2hpcHMnLCAnY29tYmF0YW50cycpOwogICAgICogdmFyX2R1bXAoJHBlbmRpbmcpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24geGF1dG9jbGFpbShzdHJpbmcgJGtleSwgc3RyaW5nICRncm91cCwgc3RyaW5nICRjb25zdW1lciwgaW50ICRtaW5faWRsZSwgc3RyaW5nICRzdGFydCwgaW50ICRjb3VudCA9IC0xLCBib29sICRqdXN0aWQgPSBmYWxzZSk6IFJlZGlzfGJvb2x8YXJyYXkge30KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIGFsbG93cyBhIGNvbnN1bWVyIHRvIHRha2Ugb3duZXJzaGlwIG9mIHBlbmRpbmcgc3RyZWFtIGVudHJpZXMsIGJ5IElELiAgQW5vdGhlcgogICAgICogY29tbWFuZCB0aGF0IGRvZXMgbXVjaCB0aGUgc2FtZSB0aGluZyBidXQgZG9lcyBub3QgcmVxdWlyZSBwYXNzaW5nIHNwZWNpZmljIElEcyBpcyBgUmVkaXM6OnhBdXRvQ2xhaW1gLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3hjbGFpbQogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3hhdXRvY2xhaW0uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHN0cmVhbSB3ZSB3aXNoIHRvIGNsYWltIG1lc3NhZ2VzIGZvci4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGdyb3VwIE91ciBjb25zdW1lciBncm91cC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnN1bWVyIE91ciBjb25zdW1lci4KICAgICAqIEBwYXJhbSBpbnQgJG1pbl9pZGxlIFRoZSBtaW5pbXVtIGlkbGUtdGltZSBpbiBtaWxsaXNlY29uZHMgYSBtZXNzYWdlIG11c3QgaGF2ZSBmb3Igb3duZXJzaGlwIHRvIGJlIHRyYW5zZmVycmVkLgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIEFuIG9wdGlvbnMgYXJyYXkgdGhhdCBtb2RpZmllcyBob3cgdGhlIGNvbW1hbmQgb3BlcmF0ZXMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRm9sbG93aW5nIGlzIGFuIG9wdGlvbnMgYXJyYXkgZGVzY3JpYmluZyBldmVyeSBvcHRpb24geW91IGNhbiBwYXNzLiAgTm90ZSB0aGF0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICdJRExFJywgYW5kICdUSU1FJyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnMgPSBbCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lETEUnICAgICAgID0+IDMgICAgICAgICAgICAjIFNldCB0aGUgaWRsZSB0aW1lIG9mIHRoZSBtZXNzYWdlIHRvIGEgMy4gIEJ5IGRlZmF1bHQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIGlkbGUgdGltZSBpcyBzZXQgdG8gemVyby4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVElNRScgICAgICAgPT4gMTAwMCp0aW1lKCkgICMgU2FtZSBhcyBJRExFIGV4Y2VwdCBpdCB0YWtlcyBhIHVuaXggdGltZXN0YW1wIGluCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1pbGxpc2Vjb25kcy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUkVUUllDT1VOVCcgPT4gMCAgICAgICAgICAgICMgU2V0IHRoZSByZXRyeSBjb3VudGVyIHRvIHplcm8uICBCeSBkZWZhdWx0IFhDTEFJTQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkb2Vzbid0IG1vZGlmeSB0aGUgY291bnRlci4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRk9SQ0UnICAgICAgICAgICAgICAgICAgICAgICMgQ3JlYXRlcyB0aGUgcGVuZGluZyBtZXNzYWdlIGVudHJ5IGV2ZW4gaWYgSURzIGFyZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBub3QgYWxyZWFkeQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiB0aGUgUEVMIHdpdGggYW5vdGhlciBjbGllbnQuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0pVU1RJRCcgICAgICAgICAgICAgICAgICAgICAjIFJldHVybiBvbmx5IGFuIGFycmF5IG9mIElEcyByYXRoZXIgdGhhbiB0aGUgbWVzc2FnZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlbXNlbHZlcy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvZGU+CiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGJvb2wgICAgICBBbiBhcnJheSBvZiBjbGFpbWVkIG1lc3NhZ3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnhHcm91cCgnQ1JFQVRFJywgJ3NoaXBzJywgJ2NvbWJhdGFudHMnLCAnMC0wJywgdHJ1ZSk7CiAgICAgKiAkcmVkaXMtPnhBZGQoJ3NoaXBzJywgJzE0MjQtNzQyMDUnLCBbJ25hbWUnID0+ICdEZWZpYW50J10pOwogICAgICogLy8gQ29uc3VtZSB0aGUgWyduYW1lJyA9PiAnRGVmaWFudCddIG1lc3NhZ2UKICAgICAqICRtc2dzID0gJHJlZGlzLT54UmVhZEdyb3VwKCdjb21iYXRhbnRzJywgIkplbSdIYWRhciIsIFsnc2hpcHMnID0+ICc+J10sIDEpOwogICAgICogLy8gVGhlICJKZW0nSGFkYXIiIGNvbnN1bWVyIGhhcyB0aGUgbWVzc2FnZSBwcmVzZW50bHkKICAgICAqICRwZW5kaW5nID0gJHJlZGlzLT54UGVuZGluZygnc2hpcHMnLCAnY29tYmF0YW50cycpOwogICAgICogdmFyX2R1bXAoJHBlbmRpbmcpOwogICAgICogYXNzZXJ0KCRwZW5kaW5nICYmIGlzc2V0KCRwZW5kaW5nWzFdKSk7CiAgICAgKiAvLyBDbGFpbSB0aGUgbWVzc2FnZSBieSBJRC4KICAgICAqICRjbGFpbWVkID0gJHJlZGlzLT54Q2xhaW0oJ3NoaXBzJywgJ2NvbWJhdGFudHMnLCAnU2lza28nLCAwLCBbJHBlbmRpbmdbMV1dLCBbJ0pVU1RJRCddKTsKICAgICAqIHZhcl9kdW1wKCRjbGFpbWVkKTsKICAgICAqIC8vIE5vdyB0aGUgJ1Npc2tvJyBjb25zdW1lciBvd25zIHRoZSBtZXNzYWdlCiAgICAgKiAkcGVuZGluZyA9ICRyZWRpcy0+eFBlbmRpbmcoJ3NoaXBzJywgJ2NvbWJhdGFudHMnKTsKICAgICAqIHZhcl9kdW1wKCRwZW5kaW5nKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHhjbGFpbShzdHJpbmcgJGtleSwgc3RyaW5nICRncm91cCwgc3RyaW5nICRjb25zdW1lciwgaW50ICRtaW5faWRsZSwgYXJyYXkgJGlkcywgYXJyYXkgJG9wdGlvbnMpOiBSZWRpc3xhcnJheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgb25lIG9yIG1vcmUgc3BlY2lmaWMgSURzIGZyb20gYSBzdHJlYW0uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHN0cmVhbSB0byBtb2RpZnkuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGlkcyBPbmUgb3IgbW9yZSBtZXNzYWdlIElEcyB0byByZW1vdmUuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHJlbW92ZWQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBleGFtcGxlICRyZWRpcy0+eERlbCgnc3RyZWFtJywgWycxLTEnLCAnMi0xJywgJzMtMSddKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHhkZWwoc3RyaW5nICRrZXksIGFycmF5ICRpZHMpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFhHUk9VUAogICAgICogUGVyZm9ybSB2YXJpb3VzIG9wZXJhdGlvbiBvbiBjb25zdW1lciBncm91cHMgZm9yIGEgcGFydGljdWxhciBSZWRpcyBTVFJFQU0uICBXaGF0IHRoZSBjb21tYW5kIGRvZXMKICAgICAqIGlzIHByaW1hcmlseSBiYXNlZCBvbiB3aGljaCBvcGVyYXRpb24gaXMgcGFzc2VkLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3hncm91cC8KICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wZXJhdGlvbiBUaGUgc3ViY29tbWFuZCB5b3UgaW50ZW5kIHRvIGV4ZWN1dGUuICBWYWxpZCBvcHRpb25zIGFyZSBhcyBmb2xsb3dzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSEVMUCcgICAgICAgICAgIC0gUmVkaXMgd2lsbCByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbW1hbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1aXJlczogbm9uZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NSRUFURScgICAgICAgICAtIENyZWF0ZSBhIGNvbnN1bWVyIGdyb3VwLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVpcmVzOiAgS2V5LCBncm91cCwgY29uc3VtZXIuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU0VUSUQnICAgICAgICAgIC0gU2V0IHRoZSBJRCBvZiBhbiBleGlzdGluZyBjb25zdW1lciBncm91cCBmb3IgdGhlIHN0cmVhbS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1aXJlczogIEtleSwgZ3JvdXAsIGlkLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NSRUFURUNPTlNVTUVSJyAtIENyZWF0ZSBhIG5ldyBjb25zdW1lciBncm91cCBmb3IgdGhlIHN0cmVhbS4gIFlvdSBtdXN0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyBwYXNzIGtleSwgZ3JvdXAsIGFuZCB0aGUgY29uc3VtZXIgbmFtZSB5b3Ugd2lzaCB0bwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1aXJlczogIEtleSwgZ3JvdXAsIGNvbnN1bWVyLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RFTENPTlNVTUVSJyAgICAtIERlbGV0ZSBhIGNvbnN1bWVyIGZyb20gZ3JvdXAgYXR0YWNoZWQgdG8gdGhlIHN0cmVhbS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXF1aXJlczogIEtleSwgZ3JvdXAsIGNvbnN1bWVyLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RFU1RST1knICAgICAgICAtIERlbGV0ZSBhIGNvbnN1bWVyIGdyb3VwIGZyb20gYSBzdHJlYW0uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWlyZXM6ICBLZXksIGdyb3VwLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRrZXkgVGhlIFNUUkVBTSB3ZSdyZSBvcGVyYXRpbmcgb24uCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGdyb3VwIFRoZSBjb25zdW1lciBncm91cCB3ZSB3YW50IHRvIGNyZWF0ZS9tb2RpZnkvZGVsZXRlLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRpZF9vcl9jb25zdW1lciBUaGUgU1RSRUFNIGlkIChlLmcuICckJykgb3IgY29uc3VtZXIgZ3JvdXAuICBTZWUgdGhlIG9wZXJhdGlvbiBzZWN0aW9uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggdG8gc2VuZC4KICAgICAqIEBwYXJhbSBib29sICRta3N0cmVhbSBUaGlzIGZsYWcgbWF5IGJlIHNlbnQgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgJ0NSRUFURScgb3BlcmF0aW9uLCBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlIFJlZGlzIHRvIGFsc28gY3JlYXRlIHRoZSBTVFJFQU0gaWYgaXQgZG9lc24ndCBjdXJyZW50bHkgZXhpc3QuCiAgICAgKiBAcGFyYW0gaW50ICRlbnRyaWVzX3JlYWQKICAgICAqIEByZXR1cm4gbWl4ZWQgICAgICAgICAgICAgICAgIFRoaXMgY29tbWFuZCByZXR1cm4gdmFyaW91cyByZXN1bHRzIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0aW9uIHBlcmZvcm1lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHhncm91cCgKICAgICAgICBzdHJpbmcgJG9wZXJhdGlvbiwKICAgICAgICA/c3RyaW5nICRrZXkgPSBudWxsLAogICAgICAgID9zdHJpbmcgJGdyb3VwID0gbnVsbCwKICAgICAgICA/c3RyaW5nICRpZF9vcl9jb25zdW1lciA9IG51bGwsCiAgICAgICAgYm9vbCAkbWtzdHJlYW0gPSBmYWxzZSwKICAgICAgICBpbnQgJGVudHJpZXNfcmVhZCA9IC0yCiAgICApOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgYSBzdHJlYW0ga2V5LgogICAgICogQHBhcmFtIHN0cmluZyAkb3BlcmF0aW9uIFRoZSBzcGVjaWZpYyBpbmZvIG9wZXJhdGlvbiB0byBwZXJmb3JtLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRhcmcxIFRoZSBmaXJzdCBhcmd1bWVudCAoZGVwZW5kcyBvbiBvcGVyYXRpb24pCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGFyZzIgVGhlIHNlY29uZCBhcmd1bWVudAogICAgICogQHBhcmFtIGludCAkY291bnQgVGhlIENPVU5UIGFyZ3VtZW50IHRvIGBYSU5GTyBTVFJFQU1gCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoaXMgY29tbWFuZCBjYW4gcmV0dXJuIGRpZmZlcmVudCB0aGluZ3MgZGVwZW5kaW5nIG9uIHRoZSBvcGVyYXRpb24gYmVpbmcgY2FsbGVkLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3hpbmZvCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnhJbmZvKCdDT05TVU1FUlMnLCAnc3RyZWFtJyk7CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnhJbmZvKCdHUk9VUFMnLCAnc3RyZWFtJyk7CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnhJbmZvKCdTVFJFQU0nLCAnc3RyZWFtJyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB4aW5mbyhzdHJpbmcgJG9wZXJhdGlvbiwgP3N0cmluZyAkYXJnMSA9IG51bGwsID9zdHJpbmcgJGFyZzIgPSBudWxsLCBpbnQgJGNvdW50ID0gLTEpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gYSBSZWRpcyBTVFJFQU0ga2V5LgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBTdHJlYW0gdG8gY2hlY2suCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMveGxlbgogICAgICogQGV4YW1wbGUgJHJlZGlzLT54TGVuKCdzdHJlYW0nKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHhsZW4oc3RyaW5nICRrZXkpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEludGVyYWN0IHdpdGggc3RyZWFtIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIGNvbnN1bWVkIGJ5IGEgY29uc3VtZXIgZ3JvdXAgYnV0IG5vdCB5ZXQKICAgICAqIGFja25vd2xlZGdlZCB3aXRoIFhBQ0suCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMveHBlbmRpbmcKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy94cmVhZGdyb3VwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHN0cmVhbSB0byBpbnNwZWN0LgogICAgICogQHBhcmFtIHN0cmluZyAkZ3JvdXAgVGhlIHVzZXIgZ3JvdXAgd2Ugd2FudCB0byBzZWUgcGVuZGluZyBtZXNzYWdlcyBmcm9tLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRzdGFydCBUaGUgbWluaW11bSBJRCB0byBjb25zaWRlci4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZW5kIFRoZSBtYXhpbXVtIElEIHRvIGNvbnNpZGVyLgogICAgICogQHBhcmFtIGludCAkY291bnQgT3B0aW9uYWwgbWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZXMgdG8gcmV0dXJuLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRjb25zdW1lciBJZiBwcm92aWRlZCwgbGltaXQgdGhlIHJldHVybmVkIG1lc3NhZ2VzIHRvIGEgc3BlY2lmaWMgY29uc3VtZXIuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGZhbHNlIFRoZSBwZW5kaW5nIG1lc3NhZ2VzIGJlbG9uZ2luZyB0byB0aGUgc3RyZWFtIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB4cGVuZGluZyhzdHJpbmcgJGtleSwgc3RyaW5nICRncm91cCwgP3N0cmluZyAkc3RhcnQgPSBudWxsLCA/c3RyaW5nICRlbmQgPSBudWxsLCBpbnQgJGNvdW50ID0gLTEsID9zdHJpbmcgJGNvbnN1bWVyID0gbnVsbCk6IFJlZGlzfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBHZXQgYSByYW5nZSBvZiBlbnRyaWVzIGZyb20gYSBTVFJFQU0ga2V5LgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzdHJlYW0ga2V5IG5hbWUgdG8gbGlzdC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YXJ0IFRoZSBtaW5pbXVtIElEIHRvIHJldHVybi4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuZCBUaGUgbWF4aW11bSBJRCB0byByZXR1cm4uCiAgICAgKiBAcGFyYW0gaW50ICRjb3VudCBBbiBvcHRpb25hbCBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIHRvIHJldHVybi4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8Ym9vbCBUaGUgZW50cmllcyBpbiB0aGUgc3RyZWFtIHdpdGhpbiB0aGUgcmVxdWVzdGVkIHJhbmdlIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMveHJhbmdlCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnhSYW5nZSgnc3RyZWFtJywgJzAtMScsICcwLTInKTsKICAgICAqIEBleGFtcGxlICRyZWRpcy0+eFJhbmdlKCdzdHJlYW0nLCAnLScsICcrJyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB4cmFuZ2Uoc3RyaW5nICRrZXksIHN0cmluZyAkc3RhcnQsIHN0cmluZyAkZW5kLCBpbnQgJGNvdW50ID0gLTEpOiBSZWRpc3xhcnJheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBDb25zdW1lIG9uZSBvciBtb3JlIHVuY29uc3VtZWQgZWxlbWVudHMgaW4gb25lIG9yIG1vcmUgc3RyZWFtcy4KICAgICAqIEBwYXJhbSBhcnJheSAkc3RyZWFtcyBBbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHN0cmVhbSBuYW1lIGtleXMgYW5kIG1pbmltdW0gaWQgdmFsdWVzLgogICAgICogQHBhcmFtIGludCAkY291bnQgQW4gb3B0aW9uYWwgbGltaXQgdG8gaG93IG1hbnkgZW50cmllcyBhcmUgcmV0dXJuZCAqcGVyIHN0cmVhbSoKICAgICAqIEBwYXJhbSBpbnQgJGJsb2NrIEFuIG9wdGlvbmFsIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBibG9jayB0aGUgY2FsbGVyIGlmIG5vCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgZGF0YSBpcyBhdmFpbGFibGUgb24gYW55IG9mIHRoZSBwcm92aWRlZCBzdHJlYW1zLgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxib29sIEFuIGFycmF5IG9mIHJlYWQgZWxlbWVudHMgb3IgZmFsc2UgaWYgdGhlcmUgYXJlbid0IGFueS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy94cmVhZAogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+eEFkZCgnczAzJywgJzMtMScsIFsndGl0bGUnID0+ICdUaGUgU2VhcmNoLCBQYXJ0IEknXSk7CiAgICAgKiAkcmVkaXMtPnhBZGQoJ3MwMycsICczLTInLCBbJ3RpdGxlJyA9PiAnVGhlIFNlYXJjaCwgUGFydCBJSSddKTsKICAgICAqICRyZWRpcy0+eEFkZCgnczAzJywgJzMtMycsIFsndGl0bGUnID0+ICdUaGUgSG91c2UgT2YgUXVhcmsnXSk7CiAgICAgKiAkcmVkaXMtPnhBZGQoJ3MwNCcsICc0LTEnLCBbJ3RpdGxlJyA9PiAnVGhlIFdheSBvZiB0aGUgV2FycmlvciddKTsKICAgICAqICRyZWRpcy0+eEFkZCgnczA0JywgJzQtMycsIFsndGl0bGUnID0+ICdUaGUgVmlzaXRvciddKTsKICAgICAqICRyZWRpcy0+eEFkZCgnczA0JywgJzQtNCcsIFsndGl0bGUnID0+ICdIaXBwb2NyYXRpYyBPYXRoJ10pOwogICAgICogJHJlZGlzLT54UmVhZChbJ3MwMycgPT4gJzMtMicsICdzMDQnID0+ICc0LTEnXSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB4cmVhZChhcnJheSAkc3RyZWFtcywgaW50ICRjb3VudCA9IC0xLCBpbnQgJGJsb2NrID0gLTEpOiBSZWRpc3xhcnJheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZWFkIG9uZSBvciBtb3JlIG1lc3NhZ2VzIHVzaW5nIGEgY29uc3VtZXIgZ3JvdXAuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRncm91cCBUaGUgY29uc3VtZXIgZ3JvdXAgdG8gdXNlLgogICAgICogQHBhcmFtIHN0cmluZyAkY29uc3VtZXIgVGhlIGNvbnN1bWVyIHRvIHVzZS4KICAgICAqIEBwYXJhbSBhcnJheSAkc3RyZWFtcyBBbiBhcnJheSBvZiBzdHJlYW0gbmFtZXMgYW5kIG1lc3NhZ2UgSURzCiAgICAgKiBAcGFyYW0gaW50ICRjb3VudCBPcHRpb25hbCBtYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcyB0byByZXR1cm4KICAgICAqIEBwYXJhbSBpbnQgJGJsb2NrIEhvdyBsb25nIHRvIGJsb2NrIGlmIHRoZXJlIGFyZSBubyBtZXNzYWdlcyBhdmFpbGFibGUuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGJvb2wgWmVybyBvciBtb3JlIHVucmVhZCBtZXNzYWdlcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3hyZWFkZ3JvdXAKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnhHcm91cCgnQ1JFQVRFJywgJ2VwaXNvZGVzJywgJ2RzOScsICcwLTAnLCB0cnVlKTsKICAgICAqICRyZWRpcy0+eEFkZCgnZXBpc29kZXMnLCAnMS0xJywgWyd0aXRsZScgPT4gJ0VtaXNzYXJ5OiBQYXJ0IDEnXSk7CiAgICAgKiAkcmVkaXMtPnhBZGQoJ2VwaXNvZGVzJywgJzEtMicsIFsndGl0bGUnID0+ICdBIE1hbiBBbG9uZSddKTsKICAgICAqICRtZXNzYWdlcyA9ICRyZWRpcy0+eFJlYWRHcm91cCgnZHM5JywgJ3Npc2tvJywgWydlcGlzb2RlcycgPT4gJz4nXSk7CiAgICAgKiAvLyBBZnRlciBoYXZpbmcgcmVhZCB0aGUgdHdvIG1lc3NhZ2VzLCBhZGQgYW5vdGhlcgogICAgICogJHJlZGlzLT54QWRkKCdlcGlzb2RlcycsICcxLTMnLCBbJ3RpdGxlJyA9PiAnRW1pc3Nhcnk6IFBhcnQgMiddKTsKICAgICAqIC8vIEFja25vd2xlZGdlIHRoZSBmaXJzdCB0d28gcmVhZCBtZXNzYWdlcwogICAgICogZm9yZWFjaCAoJG1lc3NhZ2VzIGFzICRzdHJlYW0gPT4gJHN0cmVhbV9tZXNzYWdlcykgewogICAgICogICAgICRpZHMgPSBhcnJheV9rZXlzKCRzdHJlYW1fbWVzc2FnZXMpOwogICAgICogICAgICRyZWRpcy0+eEFjaygnc3RyZWFtJywgJ2RzOScsICRpZHMpOwogICAgICogfQogICAgICogLy8gV2UgY2FuIG5vdyBwaWNrIHVwIHdoZXJlIHdlIGxlZnQgb2ZmLCBhbmQgd2lsbCBvbmx5IGdldCB0aGUgZmluYWwgbWVzc2FnZQogICAgICogJG1zZ3MgPSAkcmVkaXMtPnhSZWFkR3JvdXAoJ2RzOScsICdzaXNrbycsIFsnZXBpc29kZXMnID0+ICc+J10pOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24geHJlYWRncm91cChzdHJpbmcgJGdyb3VwLCBzdHJpbmcgJGNvbnN1bWVyLCBhcnJheSAkc3RyZWFtcywgaW50ICRjb3VudCA9IDEsIGludCAkYmxvY2sgPSAxKTogUmVkaXN8YXJyYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogR2V0IGEgcmFuZ2Ugb2YgZW50cmllcyBmcm9tIGEgU1RSRUFNIGtlIGluIHJldmVyc2UgY3Jvbm9sb2dpY2FsIG9yZGVyLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzdHJlYW0ga2V5IHRvIHF1ZXJ5LgogICAgICogQHBhcmFtIHN0cmluZyAkZW5kIFRoZSBtYXhpbXVtIG1lc3NhZ2UgSUQgdG8gaW5jbHVkZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YXJ0IFRoZSBtaW5pbXVtIG1lc3NhZ2UgSUQgdG8gaW5jbHVkZS4KICAgICAqIEBwYXJhbSBpbnQgJGNvdW50IEFuIG9wdGlvbmFsIG1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIHRvIGluY2x1ZGUuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGJvb2wgVGhlIGVudHJpZXMgd2l0aGluIHRoZSByZXF1ZXN0ZWQgcmFuZ2UsIGZyb20gbmV3ZXN0IHRvIG9sZGVzdC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy94cmV2cmFuZ2UKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy94cmFuZ2UKICAgICAqIEBleGFtcGxlICRyZWRpcy0+eFJldlJhbmdlKCdzdHJlYW0nLCAnMC0yJywgJzAtMScpOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT54UmV2UmFuZ2UoJ3N0cmVhbScsICcrJywgJy0nKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHhyZXZyYW5nZShzdHJpbmcgJGtleSwgc3RyaW5nICRlbmQsIHN0cmluZyAkc3RhcnQsIGludCAkY291bnQgPSAtMSk6IFJlZGlzfGFycmF5fGJvb2wge30KCiAgICAvKioKICAgICAqIFRydW5jYXRlIGEgU1RSRUFNIGtleSBpbiB2YXJpb3VzIHdheXMuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIFNUUkVBTSBrZXkgdG8gdHJpbS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHRocmVzaG9sZCBUaGlzIGNhbiBlaXRoZXIgYmUgYSBtYXhpbXVtIGxlbmd0aCwgb3IgYSBtaW5pbXVtIGlkLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIE1BWExFTiAtIEFuIGludGVnZXIgZGVzY3JpYmluZyB0aGUgbWF4aW11bSBkZXNpcmVkIGxlbmd0aCBvZiB0aGUgc3RyZWFtIGFmdGVyIHRoZSBjb21tYW5kLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIE1JTklEICAtIEFuIElEIHRoYXQgd2lsbCBiZWNvbWUgdGhlIG5ldyBtaW5pbXVtIElEIGluIHRoZSBzdHJlYW0sIGFzIFJlZGlzIHdpbGwgdHJpbSBhbGwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcyBvbGRlciB0aGFuIHRoaXMgSUQuCiAgICAgKiBAcGFyYW0gYm9vbCAkYXBwcm94IFdoZXRoZXIgcmVkaXMgaXMgYWxsb3dlZCB0byBkbyBhbiBhcHByb3hpbWF0ZSB0cmltbWluZyBvZiB0aGUgc3RyZWFtLiAgVGhpcyBpcwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUgZWZmaWNpZW50IGZvciBSZWRpcyBnaXZlbiBob3cgc3RyZWFtcyBhcmUgc3RvcmVkIGludGVybmFsbHkuCiAgICAgKiBAcGFyYW0gYm9vbCAkbWluaWQgV2hlbiBzZXQgdG8gYHRydWVgLCB1c2VycyBzaG91bGQgcGFzcyBhIG1pbmltdW0gSUQgdG8gdGhlIGAkdGhyZXNob2xkYCBhcmd1bWVudC4KICAgICAqIEBwYXJhbSBpbnQgJGxpbWl0IEFuIG9wdGlvbmFsIHVwcGVyIGJvdW5kIG9uIGhvdyBtYW55IGVudHJpZXMgdG8gdHJpbSBkdXJpbmcgdGhlIGNvbW1hbmQuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSAgVGhlIG51bWJlciBvZiBlbnRyaWVzIGRlbGV0ZWQgZnJvbSB0aGUgc3RyZWFtLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3h0cmltCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnhUcmltKCdzdHJlYW0nLCAzKTsKICAgICAqIEBleGFtcGxlICRyZWRpcy0+eFRyaW0oJ3N0cmVhbScsICcyLTEnLCBmYWxzZSwgdHJ1ZSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB4dHJpbShzdHJpbmcgJGtleSwgc3RyaW5nICR0aHJlc2hvbGQsIGJvb2wgJGFwcHJveCA9IGZhbHNlLCBib29sICRtaW5pZCA9IGZhbHNlLCBpbnQgJGxpbWl0ID0gLTEpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEFkZCBvbmUgb3IgbW9yZSBlbGVtZW50cyBhbmQgc2NvcmVzIHRvIGEgUmVkaXMgc29ydGVkIHNldC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgc29ydGVkIHNldCBpbiBxdWVzdGlvbi4KICAgICAqIEBwYXJhbSBhcnJheXxmbG9hdCAkc2NvcmVfb3Jfb3B0aW9ucyBFaXRoZXIgdGhlIHNjb3JlIGZvciB0aGUgZmlyc3QgZWxlbWVudCwgb3IgYW4gYXJyYXkgb2Ygb3B0aW9ucy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvcHRpb25zID0gWwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTlgnLCAgICAgICAjIE9ubHkgdXBkYXRlIGVsZW1lbnRzIHRoYXQgYWxyZWFkeSBleGlzdAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTlgnLCAgICAgICAjIE9ubHkgYWRkIG5ldyBlbGVtZW50cyBidXQgZG9uJ3QgdXBkYXRlIGV4aXN0aW5nIG9uZXMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMVCcgICAgICAgICMgT25seSB1cGRhdGUgZXhpc3RpbmcgZWxlbWVudHMgaWYgdGhlIG5ldyBzY29yZSBpcwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxlc3MgdGhhbiB0aGUgZXhpc3Rpbmcgb25lLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnR1QnICAgICAgICAjIE9ubHkgdXBkYXRlIGV4aXN0aW5nIGVsZW1lbnRzIGlmIHRoZSBuZXcgc2NvcmUgaXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBncmVhdGVyIHRoYW4gdGhlIGV4aXN0aW5nIG9uZS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NIJyAgICAgICAgIyBJbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGFkZGVkLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJlZGlzIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgT2YgZWxlbWVudHMgdGhhdCB3ZXJlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdlZCBpbiB0aGUgb3BlcmF0aW9uLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSU5DUicgICAgICAjIEluc3RlYWQgb2Ygc2V0dGluZyBlYWNoIGVsZW1lbnQgdG8gdGhlIHByb3ZpZGUgc2NvcmUsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5jcmVtZW50IHRoZSBlbGVtZW50IGJ5IHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHByb3ZpZGVkIHNjb3JlLCBtdWNoIGxpa2UgWklOQ1JCWS4gIFdoZW4gdGhpcyBvcHRpb24KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpcyBwYXNzZWQsIHlvdSBtYXkgb25seSBzZW5kIGEgc2luZ2xlIHNjb3JlIGFuZCBtZW1iZXIuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiAgJ0dYJywgJ0xUJywgYW5kICdOWCcgY2Fubm90IGJlIHBhc3NlZCB0b2dldGhlciwgYW5kIFBocFJlZGlzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgc2VuZCB3aGljaGV2ZXIgb25lIGlzIGxhc3QgaW4gdGhlIG9wdGlvbnMgYXJyYXkuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG1vcmVfc2NvcmVzX2FuZF9tZW1zIEEgdmFyaWFkaWMgbnVtYmVyIG9mIGFkZGl0aW9uYWwgc2NvcmVzIGFuZCBtZW1iZXJzLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmxvYXR8ZmFsc2UgVGhlIHJldHVybiB2YWx1ZSB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBvcHRpb25zIHBhc3NlZC4KICAgICAqIEZvbGxvd2luZyBpcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3B0aW9ucyB0aGF0IG1heSBiZSBwYXNzZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudDoKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96YWRkCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnphZGQoJ3pzJywgMSwgJ2ZpcnN0JywgMiwgJ3NlY29uZCcsIDMsICd0aGlyZCcpOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT56QWRkKCd6cycsIFsnWFgnXSwgOCwgJ3NlY29uZCcsIDk5LCAnbmV3LWVsZW1lbnQnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHpBZGQoc3RyaW5nICRrZXksIGFycmF5fGZsb2F0ICRzY29yZV9vcl9vcHRpb25zLCBtaXhlZCAuLi4kbW9yZV9zY29yZXNfYW5kX21lbXMpOiBSZWRpc3xpbnR8ZmxvYXR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgc29ydGVkIHNldC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgc29ydGVkIHNldCB0byByZXRyZWl2ZSBjYXJkaW5hbGl0eSBmcm9tLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc2V0IG9yIGZhbHNlIG9uIGZhaWx1cmUKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96Y2FyZAogICAgICogQGV4YW1wbGUgJHJlZGlzLT56Q2FyZCgnenMnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHpDYXJkKHN0cmluZyAka2V5KTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIG1lbWJlcnMgaW4gYSBzb3J0ZWQgc2V0IHdpdGggc2NvcmVzIGluc2lkZSBhIHByb3ZpZGVkIHJhbmdlLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzb3J0ZWQgc2V0IHRvIGNoZWNrLgogICAgICogQHBhcmFtIHN0cmluZyAkc3RhcnQgVGhlIG1pbmltdW0gc2NvcmUgdG8gaW5jbHVkZSBpbiB0aGUgY291bnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuZCBUaGUgbWF4aW11bSBzY29yZSB0byBpbmNsdWRlIGluIHRoZSBjb3VudAogICAgICogTk9URTogIEluIGFkZGl0aW9uIHRvIGEgZmxvYXRpbmcgcG9pbnQgc2NvcmUgeW91IG1heSBwYXNzIHRoZSBzcGVjaWFsIHZhbHVlcyBvZiAnLWluZicgYW5kCiAgICAgKiAgICAgICAgJytpbmYnIG1lYW5pbmcgbmVnYXRpdmUgYW5kIHBvc2l0aXZlIGluZmluaXR5LCByZXNwZWN0aXZlbHkuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvemNvdW50CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnpDb3VudCgnZnJ1aXQtcmFua2luZ3MnLCAnMCcsICcraW5mJyk7CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnpDb3VudCgnZnJ1aXQtcmFua2luZ3MnLCA1MCwgNjApOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT56Q291bnQoJ2ZydWl0LXJhbmtpbmdzJywgJy1pbmYnLCAwKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHpDb3VudChzdHJpbmcgJGtleSwgc3RyaW5nICRzdGFydCwgc3RyaW5nICRlbmQpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIENyZWF0ZSBvciBpbmNyZW1lbnQgdGhlIHNjb3JlIG9mIGEgbWVtYmVyIGluIGEgUmVkaXMgc29ydGVkIHNldAogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzb3J0ZWQgc2V0IGluIHF1ZXN0aW9uLgogICAgICogQHBhcmFtIGZsb2F0ICR2YWx1ZSBIb3cgbXVjaCB0byBpbmNyZW1lbnQgdGhlIHNjb3JlLgogICAgICogQHJldHVybiBSZWRpc3xmbG9hdHxmYWxzZSBUaGUgbmV3IHNjb3JlIG9mIHRoZSBtZW1iZXIgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96aW5jcmJ5CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnpJbmNyQnkoJ3pzJywgNS4wLCAnYmFuYW5hcycpOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT56SW5jckJ5KCd6cycsIDIuMCwgJ2VnZ3BsYW50cycpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gekluY3JCeShzdHJpbmcgJGtleSwgZmxvYXQgJHZhbHVlLCBtaXhlZCAkbWVtYmVyKTogUmVkaXN8ZmxvYXR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBzb3J0ZWQgc2V0IHdob3MgbWVtYmVycyBmYWxsIHdpdGhpbiB0aGUgcHJvdmlkZWQKICAgICAqIGxleG9ncmFwaGljYWwgcmFuZ2UuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHNvcnRlZCBzZXQgdG8gY2hlY2suCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtaW4gVGhlIG1pbmltdW0gbWF0Y2hpbmcgbGV4b2dyYXBoaWNhbCBzdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1heCBUaGUgbWF4aW11bSBtYXRjaGluZyBsZXhvZ3JhcGhpY2FsIHN0cmluZwogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBtZW1iZXJzIHRoYXQgZmFsbCB3aXRoaW4gdGhlIHJhbmdlIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvemxleGNvdW50CiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT56QWRkKCdjYXB0YWlucycsIDAsICdKYW5ld2F5JywgMCwgJ0tpcmsnLCAwLCAnUGljYXJkJywgMCwgJ1Npc2tvJywgMCwgJ0FyY2hlcicpOwogICAgICogJHJlZGlzLT56TGV4Q291bnQoJ2NhcHRhaW5zJywgJ1tBJywgJ1tTJyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6TGV4Q291bnQoc3RyaW5nICRrZXksIHN0cmluZyAkbWluLCBzdHJpbmcgJG1heCk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIHNjb3JlIG9mIG9uZSBvciBtb3JlIG1lbWJlcnMgaW4gYSBzb3J0ZWQgc2V0LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3ptc2NvcmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgc29ydGVkIHNldAogICAgICogQHBhcmFtIG1peGVkICRtZW1iZXIgVGhlIGZpcnN0IG1lbWJlciB0byByZXR1cm4gdGhlIHNjb3JlIGZyb20KICAgICAqIEBwYXJhbSBtaXhlZCAkb3RoZXJfbWVtYmVycyBPbmUgb3IgbW9yZSBhZGRpdGlvbmFsIG1lbWJlcnMgdG8gcmV0dXJuIHRoZSBzY29yZXMgb2YuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGZhbHNlIEFuIGFycmF5IG9mIHRoZSBzY29yZXMgb2YgdGhlIHJlcXVlc3RlZCBlbGVtZW50cy4KICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnpBZGQoJ3pzJywgMCwgJ3plcm8nLCAxLCAnb25lJywgMiwgJ3R3bycsIDMsICd0aHJlZScpOwogICAgICogJHJlZGlzLT56TVNjb3JlKCd6cycsICd6ZXJvJywgJ3R3bycpOwogICAgICogJHJlZGlzLT56TVNjb3JlKCd6cycsICdvbmUnLCAnbm90LWEtbWVtYmVyJyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6TXNjb3JlKHN0cmluZyAka2V5LCBtaXhlZCAkbWVtYmVyLCBtaXhlZCAuLi4kb3RoZXJfbWVtYmVycyk6IFJlZGlzfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQb3Agb25lIG9yIG1vcmUgb2YgdGhlIGhpZ2hlc3Qgc2NvcmluZyBlbGVtZW50cyBmcm9tIGEgc29ydGVkIHNldC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgc29ydGVkIHNldCB0byBwb3AgZWxlbWVudHMgZnJvbS4KICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkY291bnQgQW4gb3B0aW9uYWwgY291bnQgb2YgZWxlbWVudHMgdG8gcG9wLgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxmYWxzZSBBbGwgb2YgdGhlIHBvcHBlZCBlbGVtZW50cyB3aXRoIHNjb3JlcyBvciBmYWxzZSBvbiBmaWFsdXJlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3pwb3BtYXgKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnpBZGQoJ3pzJywgMCwgJ3plcm8nLCAxLCAnb25lJywgMiwgJ3R3bycsIDMsICd0aHJlZScpOwogICAgICogJHJlZGlzLT56UG9wTWF4KCd6cycpOwogICAgICogJHJlZGlzLT56UG9wTWF4KCd6cycsIDIpOy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHpQb3BNYXgoc3RyaW5nICRrZXksID9pbnQgJGNvdW50ID0gbnVsbCk6IFJlZGlzfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQb3Agb25lIG9yIG1vcmUgb2YgdGhlIGxvd2VzdCBzY29yaW5nIGVsZW1lbnRzIGZyb20gYSBzb3J0ZWQgc2V0LgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzb3J0ZWQgc2V0IHRvIHBvcCBlbGVtZW50cyBmcm9tLgogICAgICogQHBhcmFtIGludHxudWxsICRjb3VudCBBbiBvcHRpb25hbCBjb3VudCBvZiBlbGVtZW50cyB0byBwb3AuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGZhbHNlIFRoZSBwb3BwZWQgZWxlbWVudHMgd2l0aCB0aGVpciBzY29yZXMgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96cG9wbWluCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT56QWRkKCd6cycsIDAsICd6ZXJvJywgMSwgJ29uZScsIDIsICd0d28nLCAzLCAndGhyZWUnKTsKICAgICAqICRyZWRpcy0+elBvcE1pbignenMnKTsKICAgICAqICRyZWRpcy0+elBvcE1pbignenMnLCAyKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHpQb3BNaW4oc3RyaW5nICRrZXksID9pbnQgJGNvdW50ID0gbnVsbCk6IFJlZGlzfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBhIHJhbmdlIG9mIGVsZW1lbnRzIG9mIGEgc29ydGVkIHNldCBiZXR3ZWVuIGEgc3RhcnQgYW5kIGVuZCBwb2ludC4KICAgICAqIEhvdyB0aGUgY29tbWFuZCB3b3JrcyBpbiBwYXJ0aWN1bGFyIGlzIGdyZWF0bHkgYWZmZWN0ZWQgYnkgdGhlIG9wdGlvbnMgdGhhdAogICAgICogYXJlIHBhc3NlZCBpbi4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgc29ydGVkIHNldCBpbiBxdWVzdGlvbi4KICAgICAqIEBwYXJhbSBtaXhlZCAkc3RhcnQgVGhlIHN0YXJ0aW5nIGluZGV4IHdlIHdhbnQgdG8gcmV0dXJuLgogICAgICogQHBhcmFtIG1peGVkICRlbmQgVGhlIGZpbmFsIGluZGV4IHdlIHdhbnQgdG8gcmV0dXJuLgogICAgICogQHBhcmFtIGFycmF5fGJvb2x8bnVsbCAkb3B0aW9ucyBUaGlzIHZhbHVlIG1heSBlaXRoZXIgYmUgYW4gYXJyYXkgb2Ygb3B0aW9ucyB0byBwYXNzIHRvCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kLCBvciBmb3IgaGlzdG9yaWNhbCBwdXJwb3NlcyBhIGJvb2xlYW4gd2hpY2gKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbHMganVzdCB0aGUgJ1dJVEhTQ09SRVMnIG9wdGlvbi4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGU+CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvcHRpb25zID0gWwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dJVEhTQ09SRVMnID0+IHRydWUsICAgICAjIFJldHVybiBib3RoIHNjb3JlcyBhbmQgbWVtYmVycy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMSU1JVCcgICAgICA9PiBbMTAsIDEwXSwgIyBTdGFydCBhdCBvZmZzZXQgMTAgYW5kIHJldHVybiAxMCBlbGVtZW50cy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSRVYnICAgICAgICAgICAgICAgICAgICAgIyBSZXR1cm4gdGhlIGVsZW1lbnRzIGluIHJldmVyc2Ugb3JkZXIKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCWVNDT1JFJywgICAgICAgICAgICAgICAgIyBUcmVhdCBgc3RhcnRgIGFuZCBgZW5kYCBhcyBzY29yZXMgaW5zdGVhZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JZTEVYJyAgICAgICAgICAgICAgICAgICAjIFRyZWF0IGBzdGFydGAgYW5kIGBlbmRgIGFzIGxleGljb2dyYXBoaWNhbCB2YWx1ZXMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZTogICdCWUxFWCcgYW5kICdCWVNDT1JFJyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxmYWxzZSAgQW4gYXJyYXkgd2l0aCBtYXRjaGluZyBlbGVtZW50cyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3pyYW5nZS8KICAgICAqIEBleGFtcGxlICRyZWRpcy0+elJhbmdlKCd6c2V0JywgMCwgLTEpOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT56UmFuZ2UoJ3pzZXQnLCAnLWluZicsICdpbmYnLCBbJ2J5c2NvcmUnXSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6UmFuZ2Uoc3RyaW5nICRrZXksIHN0cmluZ3xpbnQgJHN0YXJ0LCBzdHJpbmd8aW50ICRlbmQsIGFycmF5fGJvb2x8bnVsbCAkb3B0aW9ucyA9IG51bGwpOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgYSByYW5nZSBvZiBlbGVtZW50cyBmcm9tIGEgc29ydGVkIHNldCBieSBsZWdvZ3JhcGhpY2FsIHJhbmdlLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzb3J0ZWQgc2V0IHRvIHJldHJlaXZlIGVsZW1lbnRzIGZyb20KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1pbiBUaGUgbWluaW11bSBsZWdvZ3JhcGhpY2FsIHZhbHVlIHRvIHJldHVybgogICAgICogQHBhcmFtIHN0cmluZyAkbWF4IFRoZSBtYXhpbXVtIGxlZ29ncmFwaGljYWwgdmFsdWUgdG8gcmV0dXJuCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgQW4gb3B0aW9uYWwgb2Zmc2V0IHdpdGhpbiB0aGUgbWF0Y2hpbmcgdmFsdWVzIHRvIHJldHVybgogICAgICogQHBhcmFtIGludCAkY291bnQgQW4gb3B0aW9uYWwgY291bnQgdG8gbGltaXQgdGhlIHJlcGxpZXMgdG8gKHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvZmZzZXQpCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGZhbHNlIEFuIGFycmF5IG9mIG1hdGNoaW5nIGVsZW1lbnRzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenJhbmdlYnlsZXgKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMgPSBuZXcgUmVkaXMoWydob3N0JyA9PiAnbG9jYWxob3N0J10pOwogICAgICogJHJlZGlzLT56QWRkKCdjYXB0YWlucycsIDAsICdKYW5ld2F5JywgMCwgJ0tpcmsnLCAwLCAnUGljYXJkJywgMCwgJ1Npc2tvJywgMCwgJ0FyY2hlcicpOwogICAgICogJHJlZGlzLT56UmFuZ2VCeUxleCgnY2FwdGFpbnMnLCAnW0EnLCAnW1MnKTsKICAgICAqICRyZWRpcy0+elJhbmdlQnlMZXgoJ2NhcHRhaW5zJywgJ1tBJywgJ1tTJywgMiwgMik7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6UmFuZ2VCeUxleChzdHJpbmcgJGtleSwgc3RyaW5nICRtaW4sIHN0cmluZyAkbWF4LCBpbnQgJG9mZnNldCA9IC0xLCBpbnQgJGNvdW50ID0gLTEpOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgYSByYW5nZSBvZiBtZW1iZXJzIGZyb20gYSBzb3J0ZWQgc2V0IGJ5IHRoZWlyIHNjb3JlLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzb3J0ZWQgc2V0IHRvIHF1ZXJ5LgogICAgICogQHBhcmFtIHN0cmluZyAkc3RhcnQgVGhlIG1pbmltdW0gc2NvcmUgb2YgZWxlbWVudHMgdGhhdCBSZWRpcyBzaG91bGQgcmV0dXJuLgogICAgICogQHBhcmFtIHN0cmluZyAkZW5kIFRoZSBtYXhpbXVtIHNjb3JlIG9mIGVsZW1lbnRzIHRoYXQgUmVkaXMgc2hvdWxkIHJldHVybi4KICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyBSZWRpcyB3aWxsIGV4ZWN1dGUgdGhlIGNvbW1hbmQuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIE9QVElPTiAgICAgICBUWVBFICAgICAgICAgICAgTUVBTklORwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAnV0lUSFNDT1JFUycgYm9vbCAgICAgICAgICAgIFdoZXRoZXIgdG8gYWxzbyByZXR1cm4gc2NvcmVzLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAnTElNSVQnICAgICAgW29mZnNldCwgY291bnRdIExpbWl0IHRoZSByZXBseSB0byBhIHN1YnNldCBvZiBlbGVtZW50cy4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8ZmFsc2UgVGhlIG51bWJlciBvZiBtYXRjaGluZyBlbGVtZW50cyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3pyYW5nZWJ5c2NvcmUKICAgICAqIEBleGFtcGxlICRyZWRpcy0+elJhbmdlQnlTY29yZSgnenMnLCAyMCwgMzAsIFsnV0lUSFNDT1JFUycgPT4gdHJ1ZV0pOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT56UmFuZ2VCeVNjb3JlKCd6cycsIDIwLCAzMCwgWydXSVRIU0NPUkVTJyA9PiB0cnVlLCAnTElNSVQnID0+IFs1LCA1XV0pOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJhbmdlQnlTY29yZShzdHJpbmcgJGtleSwgc3RyaW5nICRzdGFydCwgc3RyaW5nICRlbmQsIGFycmF5ICRvcHRpb25zID0gW10pOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVGhpcyBjb21tYW5kIGlzIHNpbWlsYXIgdG8gWlJBTkdFIGV4Y2VwdCB0aGF0IGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSB2YWx1ZXMgZGlyZWN0bHkKICAgICAqIGl0IHdpbGwgc3RvcmUgdGhlbSBpbiBhIGRlc3RpbmF0aW9uIGtleSBwcm92aWRlZCBieSB0aGUgdXNlcgogICAgICogQHBhcmFtIHN0cmluZyAkZHN0a2V5IFRoZSBrZXkgdG8gc3RvcmUgdGhlIHJlc3VsdGluZyBlbGVtZW50KHMpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcmNrZXkgVGhlIHNvdXJjZSBrZXkgd2l0aCBlbGVtZW50KHMpIHRvIHJldHJpZXZlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdGFydCBUaGUgc3RhcnRpbmcgaW5kZXggdG8gc3RvcmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuZCBUaGUgZW5kaW5nIGluZGV4IHRvIHN0b3JlCiAgICAgKiBAcGFyYW0gYXJyYXl8Ym9vbHxudWxsICRvcHRpb25zIE91ciBvcHRpb25zIGFycmF5IHRoYXQgY29udHJvbHMgaG93IHRoZSBjb21tYW5kIHdpbGwgZnVuY3Rpb24uCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHN0b3JlZCBpbiAkZHN0a2V5IG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenJhbmdlLwogICAgICogQHNlZSBSZWRpczo6elJhbmdlCiAgICAgKiBTZWUge0BsaW5rIFJlZGlzOjp6UmFuZ2V9IGZvciBhIGZ1bGwgZGVzY3JpcHRpb24gb2YgdGhlIHBvc3NpYmxlIG9wdGlvbnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6cmFuZ2VzdG9yZSgKICAgICAgICBzdHJpbmcgJGRzdGtleSwKICAgICAgICBzdHJpbmcgJHNyY2tleSwKICAgICAgICBzdHJpbmcgJHN0YXJ0LAogICAgICAgIHN0cmluZyAkZW5kLAogICAgICAgIGFycmF5fGJvb2x8bnVsbCAkb3B0aW9ucyA9IG51bGwKICAgICk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgb25lIG9yIG1vcmUgcmFuZG9tIG1lbWJlcnMgZnJvbSBhIFJlZGlzIHNvcnRlZCBzZXQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHNvcnRlZCBzZXQgdG8gcHVsbCByYW5kb20gbWVtYmVycyBmcm9tLgogICAgICogQHBhcmFtIGFycmF5fG51bGwgJG9wdGlvbnMgT25lIG9yIG1vcmUgb3B0aW9ucyB0aGF0IGRldGVybWluZSBleGFjdGx5IGhvdyB0aGUgY29tbWFuZCBvcGVyYXRlcy4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU9OICAgICAgIFRZUEUgICAgIE1FQU5JTkcKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgJ0NPVU5UJyAgICAgIGludCAgICAgIFRoZSBudW1iZXIgb2YgcmFuZG9tIG1lbWJlcnMgdG8gcmV0dXJuLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAnV0lUSFNDT1JFUycgYm9vbCAgICAgV2hldGhlciB0byByZXR1cm4gc2NvcmVzIGFuZCBtZW1iZXJzIGluc3RlYWQgb2YKICAgICAqIEByZXR1cm4gUmVkaXN8c3RyaW5nfGFycmF5IE9uZSBvcmUgbW9yZSByYW5kb20gZWxlbWVudHMuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenJhbmRtZW1iZXIKICAgICAqIEBleGFtcGxlICRyZWRpcy0+elJhbmRNZW1iZXIoJ3pzJywgWydDT1VOVCcgPT4gMiwgJ1dJVEhTQ09SRVMnID0+IHRydWVdKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHpSYW5kTWVtYmVyKHN0cmluZyAka2V5LCA/YXJyYXkgJG9wdGlvbnMgPSBudWxsKTogUmVkaXN8c3RyaW5nfGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHJhbmsgb2YgYSBtZW1iZXIgb2YgYSBzb3J0ZWQgc2V0LCBieSBzY29yZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgc29ydGVkIHNldCB0byBjaGVjay4KICAgICAqIEBwYXJhbSBtaXhlZCAkbWVtYmVyIFRoZSBtZW1iZXIgdG8gdGVzdC4KICAgICAqIEByZXR1cm4gUmVkaXN8aW50fGZhbHNlIFRoZSByYW5rIG9mIHRoZSByZXF1ZXN0ZWQgbWVtYmVyLgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3pyYW5rCiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnpSYW5rKCd6cycsICd6ZXJvJyk7CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnpSYW5rKCd6cycsICd0aHJlZScpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJhbmsoc3RyaW5nICRrZXksIG1peGVkICRtZW1iZXIpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBvbmUgb3IgbW9yZSBtZW1iZXJzIGZyb20gYSBSZWRpcyBzb3J0ZWQgc2V0LgogICAgICogQHBhcmFtIG1peGVkICRrZXkgVGhlIHNvcnRlZCBzZXQgaW4gcXVlc3Rpb24uCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG1lbWJlciBUaGUgZmlyc3QgbWVtYmVyIHRvIHJlbW92ZS4KICAgICAqIEBwYXJhbSBtaXhlZCAkb3RoZXJfbWVtYmVycyBPbmUgb3IgbW9yZSBtZW1iZXJzIHRvIHJlbW92ZSBwYXNzZWQgaW4gYSB2YXJpYWRpYyBmYXNoaW9uLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBtZW1iZXJzIHRoYXQgd2VyZSBhY3R1YWxseSByZW1vdmVkIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenJlbQogICAgICogQGV4YW1wbGUgJHJlZGlzLT56UmVtKCd6cycsICdtZW06MCcsICdtZW06MScsICdtZW06MicsICdtZW06NicsICdtZW06NycsICdtZW06OCcsICdtZW06OScpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJlbShtaXhlZCAka2V5LCBtaXhlZCAkbWVtYmVyLCBtaXhlZCAuLi4kb3RoZXJfbWVtYmVycyk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIHplcm8gb3IgbW9yZSBlbGVtZW50cyBmcm9tIGEgUmVkaXMgc29ydGVkIHNldCBieSBsZWdvZ3JhcGhpY2FsIHJhbmdlLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzb3J0ZWQgc2V0IHRvIHJlbW92ZSBlbGVtZW50cyBmcm9tLgogICAgICogQHBhcmFtIHN0cmluZyAkbWluIFRoZSBzdGFydCBvZiB0aGUgbGV4b2dyYXBoaWNhbCByYW5nZSB0byByZW1vdmUuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXggVGhlIGVuZCBvZiB0aGUgbGV4b2dyYXBoaWNhbCByYW5nZSB0byByZW1vdmUKICAgICAqIEByZXR1cm4gUmVkaXN8aW50fGZhbHNlIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgcmVtb3ZlZCBmcm9tIHRoZSBzZXQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96cmVtcmFuZ2VieWxleAogICAgICogQHNlZSBSZWRpczo6enJhbmdlYnlsZXgoKQogICAgICogQGV4YW1wbGUgJHJlZGlzLT56UmVtUmFuZ2VCeUxleCgnenMnLCAnW2EnLCAnKGInKTsKICAgICAqIEBleGFtcGxlICRyZWRpcy0+elJlbVJhbmdlQnlMZXgoJ3pzJywgJyhiYW5hbmEnLCAnKGVnZ3BsYW50Jyk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6UmVtUmFuZ2VCeUxleChzdHJpbmcgJGtleSwgc3RyaW5nICRtaW4sIHN0cmluZyAkbWF4KTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgb25lIG9yIG1vcmUgbWVtYmVycyBvZiBhIHNvcnRlZCBzZXQgYnkgdGhlaXIgcmFuay4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgc29ydGVkIHNldCB3aGVyZSB3ZSB3bmF0IHRvIHJlbW92ZSBtZW1iZXJzLgogICAgICogQHBhcmFtIGludCAkc3RhcnQgVGhlIHJhbmsgd2hlbiB3ZSB3YW50IHRvIHN0YXJ0IHJlbW92aW5nIG1lbWJlcnMKICAgICAqIEBwYXJhbSBpbnQgJGVuZCBUaGUgcmFuayB3ZSB3YW50IHRvIHN0b3AgcmVtb3ZpbmcgbWVtYmVyc2suCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIG1lbWJlcnMgcmVtb3ZlZCBmcm9tIHRoZSBzZXQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96cmVtcmFuZ2VieXJhbmsKICAgICAqIEBleGFtcGxlICRyZWRpcy0+elJlbVJhbmdlQnlSYW5rKCd6cycsIDAsIDMpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJlbVJhbmdlQnlSYW5rKHN0cmluZyAka2V5LCBpbnQgJHN0YXJ0LCBpbnQgJGVuZCk6IFJlZGlzfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIG9uZSBvciBtb3JlIG1lbWJlcnMgb2YgYSBzb3J0ZWQgc2V0IGJ5IHRoZWlyIHNjb3JlLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzb3J0ZWQgc2V0IHdoZXJlIHdlIHduYXQgdG8gcmVtb3ZlIG1lbWJlcnMuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdGFydCBUaGUgbG93ZXN0IHNjb3JlIHRvIHJlbW92ZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuZCBUaGUgaGlnaGVzdCBzY29yZSB0byByZW1vdmUuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIG1lbWJlcnMgcmVtb3ZlZCBmcm9tIHRoZSBzZXQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96cmVtcmFuZ2VieXJhbmsKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnpBZGQoJ3pzJywgMiwgJ3R3bycsIDQsICdmb3VyJywgNiwgJ3NpeCcpOwogICAgICogJHJlZGlzLT56UmVtUmFuZ2VCeVNjb3JlKCd6cycsIDIsIDQpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJlbVJhbmdlQnlTY29yZShzdHJpbmcgJGtleSwgc3RyaW5nICRzdGFydCwgc3RyaW5nICRlbmQpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIExpc3QgdGhlIG1lbWJlcnMgb2YgYSBSZWRpcyBzb3J0ZWQgc2V0IGluIHJldmVyc2Ugb3JkZXIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgc29ydGVkIHNldCBpbiBxdWVzdGlvbi4KICAgICAqIEBwYXJhbSBpbnQgJHN0YXJ0IFRoZSBpbmRleCB0byBzdGFydCBsaXN0aW5nIGVsZW1lbnRzCiAgICAgKiBAcGFyYW0gaW50ICRlbmQgVGhlIGluZGV4IHRvIHN0b3AgbGlzdGluZyBlbGVtZW50cy4KICAgICAqIEBwYXJhbSBtaXhlZCAkc2NvcmVzIFdoZXRoZXIgb3Igbm90IFJlZGlzIHNob3VsZCBhbHNvIHJldHVybiBlYWNoIG1lbWJlcnMgc2NvcmUuICBTZWUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGV4YW1wbGUgYmVsb3cgZGVtb25zdHJhdGluZyBob3cgaXQgbWF5IGJlIHVzZWQuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGZhbHNlIFRoZSBtZW1iZXJzIChhbmQgcG9zc2libHkgc2NvcmVzKSBvZiB0aGUgbWF0Y2hpbmcgZWxlbWVudHMgb3IgZmFsc2UKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96cmV2cmFuZ2UKICAgICAqIEBleGFtcGxlICRyZWRpcy0+elJldlJhbmdlKCd6cycsIDAsIC0xKTsKICAgICAqIEBleGFtcGxlICRyZWRpcy0+elJldlJhbmdlKCd6cycsIDIsIDMpOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT56UmV2UmFuZ2UoJ3pzJywgMCwgLTEsIHRydWUpOwogICAgICogQGV4YW1wbGUgJHJlZGlzLT56UmV2UmFuZ2UoJ3pzJywgMCwgLTEsIFsnd2l0aHNjb3JlcycgPT4gdHJ1ZV0pOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJldlJhbmdlKHN0cmluZyAka2V5LCBpbnQgJHN0YXJ0LCBpbnQgJGVuZCwgbWl4ZWQgJHNjb3JlcyA9IG51bGwpOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogTGlzdCBtZW1iZXJzIG9mIGEgUmVkaXMgc29ydGVkIHNldCB3aXRoaW4gYSBsZWdvZ3JhcGhpY2FsIHJhbmdlLCBpbiByZXZlcnNlIG9yZGVyLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzb3J0ZWQgc2V0IHRvIGxpc3QKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1heCBUaGUgbWF4aW11bSBsZWdvZ3JhcGhpY2FsIGVsZW1lbnQgdG8gaW5jbHVkZSBpbiB0aGUgcmVzdWx0LgogICAgICogQHBhcmFtIHN0cmluZyAkbWluIFRoZSBtaW5pbXVtIGxleG9ncmFwaGljYWwgZWxlbWVudCB0byBpbmNsdWRlIGluIHRoZSByZXN1bHQuCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgQW4gb3B0aW9uIG9mZnNldCB3aXRoaW4gdGhlIG1hdGNoaW5nIGVsZW1lbnRzIHRvIHN0YXJ0IGF0LgogICAgICogQHBhcmFtIGludCAkY291bnQgQW4gb3B0aW9uYWwgY291bnQgdG8gbGltaXQgdGhlIHJlcGxpZXMgdG8uCiAgICAgKiBAcmV0dXJuIFJlZGlzfGFycmF5fGZhbHNlIFRoZSBtYXRjaGluZyBtZW1iZXJzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenJldnJhbmdlYnlsZXgKICAgICAqIEBzZWUgUmVkaXM6OnpyYW5nZWJ5bGV4KCkKICAgICAqIEBleGFtcGxlICRyZWRpcy0+elJldlJhbmdlQnlMZXgoJ2NhcHRhaW5zJywgJ1tRJywgJ1tKJyk7CiAgICAgKiBAZXhhbXBsZSAkcmVkaXMtPnpSZXZSYW5nZUJ5TGV4KCdjYXB0YWlucycsICdbUScsICdbSicsIDEsIDIpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJldlJhbmdlQnlMZXgoc3RyaW5nICRrZXksIHN0cmluZyAkbWF4LCBzdHJpbmcgJG1pbiwgaW50ICRvZmZzZXQgPSAtMSwgaW50ICRjb3VudCA9IC0xKTogUmVkaXN8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIExpc3QgZWxlbWVudHMgZnJvbSBhIFJlZGlzIHNvcnRlZCBzZXQgYnkgc2NvcmUsIGhpZ2hlc3QgdG8gbG93ZXN0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIHNvcnRlZCBzZXQgdG8gcXVlcnkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXggVGhlIGhpZ2hlc3Qgc2NvcmUgdG8gaW5jbHVkZSBpbiB0aGUgcmVzdWx0cy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1pbiBUaGUgbG93ZXN0IHNjb3JlIHRvIGluY2x1ZGUgaW4gdGhlIHJlc3VsdHMuCiAgICAgKiBAcGFyYW0gYXJyYXl8Ym9vbCAkb3B0aW9ucyBBbiBvcHRpb25zIGFycmF5IHRoYXQgbW9kaWZpZXMgaG93IHRoZSBjb21tYW5kIGV4ZWN1dGVzLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICA8Y29kZT4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnMgPSBbCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV0lUSFNDT1JFUycgPT4gdHJ1ZXxmYWxzZSAjIFdoZXRoZXIgb3Igbm90IHRvIHJldHVybiBzY29yZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMSU1JVCcgPT4gW29mZnNldCwgY291bnRdICMgUmV0dXJuIGEgc3Vic2V0IG9mIHRoZSBtYXRjaGluZyBtZW1iZXJzCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogIEZvciBsZWdhY3kgcmVhc29uLCB5b3UgbWF5IGFsc28gc2ltcGx5IHBhc3MgYHRydWVgIGZvciB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgYXJndW1lbnQsIHRvIG1lYW4gYFdJVEhTQ09SRVNgLgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxmYWxzZSBUaGUgbWF0Y2hpbmcgbWVtYmVycyBpbiByZXZlcnNlIG9yZGVyIG9mIHNjb3JlIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenJldnJhbmdlYnlzY29yZQogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+emFkZCgnb2xkZXN0LXBlb3BsZScsIDEyMi40NDkzLCAnSmVhbm5lIENhbG1lbnQnLCAxMTkuMjkzMiwgJ0thbmUgVGFuYWthJywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOS4yNjU4LCAnU2FyYWggS25hdXNzJywgICAxMTguNzIwNSwgJ0x1Y2lsZSBSYW5kb24nLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE3LjcxMjMsICdOYWJpIFRhamltYScsICAgIDExNy42MzAxLCAnTWFyaWUtTG91aXNlIE1laWxsZXVyJywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNy41MTc4LCAnVmlvbGV0IEJyb3duJywgICAxMTcuMzc1MywgJ0VtbWEgTW9yYW5vJywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNy4yMjE5LCAnQ2hpeW8gTWl5YWtvJywgICAxMTcuMDc0MCwgJ01pc2FvIE9rYXdhJyk7CiAgICAgKiAkcmVkaXMtPnpSZXZSYW5nZUJ5U2NvcmUoJ29sZGVzdC1wZW9wbGUnLCAxMjIsIDExOSk7CiAgICAgKiAkcmVkaXMtPnpSZXZSYW5nZUJ5U2NvcmUoJ29sZGVzdC1wZW9wbGUnLCAnaW5mJywgMTE4KTsKICAgICAqICRyZWRpcy0+elJldlJhbmdlQnlTY29yZSgnb2xkZXN0LXBlb3BsZScsICcxMTcuNScsICctaW5mJywgWydMSU1JVCcgPT4gWzAsIDFdXSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6UmV2UmFuZ2VCeVNjb3JlKHN0cmluZyAka2V5LCBzdHJpbmcgJG1heCwgc3RyaW5nICRtaW4sIGFycmF5fGJvb2wgJG9wdGlvbnMgPSBbXSk6IFJlZGlzfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBhIG1lbWJlciBvZiBhIHNvcnRlZCBzZXQgYnkgcmV2ZXJzZSByYW5rLgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzb3J0ZWQgc2V0IHRvIHF1ZXJ5LgogICAgICogQHBhcmFtIG1peGVkICRtZW1iZXIgVGhlIG1lbWJlciB0byBsb29rIHVwLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIHJldmVyc2UgcmFuayAodGhlIHJhbmsgaWYgY291bnRlZCBoaWdoIHRvIGxvdykgb2YgdGhlIG1lbWJlciBvcgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96cmV2cmFuawogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+ekFkZCgnZHM5LWNoYXJhY3RlcnMnLCAxMCwgJ1Npc2tvJywgOSwgJ0dhcmFrJywgOCwgJ0RheCcsIDcsICdPZG8nKTsKICAgICAqICRyZWRpcy0+enJldnJhbmsoJ2RzOS1jaGFyYWN0ZXJzJywgJ1Npc2tvJyk7CiAgICAgKiAkcmVkaXMtPnpyZXZyYW5rKCdkczktY2hhcmFjdGVycycsICdHYXJhaycpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gelJldlJhbmsoc3RyaW5nICRrZXksIG1peGVkICRtZW1iZXIpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgc2NvcmUgb2YgYSBtZW1iZXIgb2YgYSBzb3J0ZWQgc2V0LgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzb3J0ZWQgc2V0IHRvIHF1ZXJ5LgogICAgICogQHBhcmFtIG1peGVkICRtZW1iZXIgVGhlIG1lbWJlciB3ZSB3aXNoIHRvIHF1ZXJ5LgogICAgICogQHJldHVybiBSZWRpc3xmbG9hdHxmYWxzZSBUaGUgc2NvcmUgb2YgdGhlIHJlcXVlc3RlZCBlbGVtZW50IG9yIGZhbHNlIGlmIGl0IGlzIG5vdCBmb3VuZC4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96c2NvcmUKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnpBZGQoJ3RlbGVzY29wZXMnLCAxMS45LCAnTEJUJywgMTAuNCwgJ0dUQycsIDEwLCAnSEVUJyk7CiAgICAgKiAkcmVkaXMtPnpTY29yZSgndGVsZXNjb3BlcycsICdMQlQnKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHpTY29yZShzdHJpbmcgJGtleSwgbWl4ZWQgJG1lbWJlcik6IFJlZGlzfGZsb2F0fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBHaXZlbiBvbmUgb3IgbW9yZSBzb3J0ZWQgc2V0IGtleSBuYW1lcywgcmV0dXJuIGV2ZXJ5IGVsZW1lbnQgdGhhdCBpcyBpbiB0aGUgZmlyc3QKICAgICAqIHNldCBidXQgbm90IGFueSBvZiB0aGUgb3RoZXJzLgogICAgICogQHBhcmFtIGFycmF5ICRrZXlzIE9uZSBvcmUgbW9yZSBzb3J0ZWQgc2V0cy4KICAgICAqIEBwYXJhbSBhcnJheXxudWxsICRvcHRpb25zIEFuIGFycmF5IHdoaWNoIGNhbiBjb250YWluIFsnV0lUSFNDT1JFUycgPT4gdHJ1ZV0gaWYgeW91IHdhbnQgUmVkaXMgdG8KICAgICAqICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtYmVycyBhbmQgc2NvcmVzLgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxmYWxzZSBBbiBhcnJheSBvZiBtZW1iZXJzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvemRpZmYKICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnpBZGQoJ3ByaW1lcycsIDEsICdvbmUnLCAzLCAndGhyZWUnLCA1LCAnZml2ZScpOwogICAgICogJHJlZGlzLT56QWRkKCdldmVucycsIDIsICd0d28nLCA0LCAnZm91cicpOwogICAgICogJHJlZGlzLT56QWRkKCdtb2QzJywgMywgJ3RocmVlJywgNiwgJ3NpeCcpOwogICAgICogJHJlZGlzLT56RGlmZihbJ3ByaW1lcycsICdldmVucycsICdtb2QzJ10pOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gemRpZmYoYXJyYXkgJGtleXMsID9hcnJheSAkb3B0aW9ucyA9IG51bGwpOiBSZWRpc3xhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogU3RvcmUgdGhlIGRpZmZlcmVuY2Ugb2Ygb25lIG9yIG1vcmUgc29ydGVkIHNldHMgaW4gYSBkZXN0aW5hdGlvbiBzb3J0ZWQgc2V0LgogICAgICogU2VlIHtAbGluayBSZWRpczo6emRpZmZ9IGZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgaG93IHRoZSBkaWZmIG9wZXJhdGlvbiB3b3Jrcy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRzdCBUaGUgZGVzdGluYXRpb24gc2V0IG5hbWUuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleXMgT25lIG9yIG1vcmUgc291cmNlIGtleSBuYW1lcwogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBlbGVtZW50cyBzdG9yZWQgaW4gdGhlIGRlc3RpbmF0aW9uIHNldCBvciBmYWxzZSBvbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96ZGlmZgogICAgICogQHNlZSBSZWRpczo6emRpZmYoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gemRpZmZzdG9yZShzdHJpbmcgJGRzdCwgYXJyYXkgJGtleXMpOiBSZWRpc3xpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIENvbXB1dGUgdGhlIGludGVyc2VjdGlvbiBvZiBvbmUgb3IgbW9yZSBzb3J0ZWQgc2V0cyBhbmQgcmV0dXJuIHRoZSBtZW1iZXJzCiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleXMgT25lIG9yZSBtb3JlIHNvcnRlZCBzZXRzLgogICAgICogQHBhcmFtIGFycmF5fG51bGwgJHdlaWdodHMgQW4gb3B0aW9uYWwgYXJyYXkgb2Ygd2VpZ2h0cyB0byBiZSBhcHBsaWVkIHRvIGVhY2ggc2V0IHdoZW4gcGVyZm9ybWluZwogICAgICogICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnRlcnNlY3Rpb24uCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkb3B0aW9ucyBPcHRpb25zIGZvciBob3cgUmVkaXMgc2hvdWxkIGNvbWJpbmUgZHVwbGljYXRlIGVsZW1lbnRzIHdoZW4gcGVyZm9ybWluZyB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb24uICBTZWUgUmVkaXM6Onp1bmlvbigpIGZvciBkZXRhaWxzLgogICAgICogQHJldHVybiBSZWRpc3xhcnJheXxmYWxzZSBBbGwgb2YgdGhlIG1lbWJlcnMgdGhhdCBleGlzdCBpbiBldmVyeSBzZXQuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvemludGVyCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT56QWRkKCdUTkcnLCAyLCAnV29yZicsIDIuNSwgJ0RhdGEnLCA0LjAsICdQaWNhcmQnKTsKICAgICAqICRyZWRpcy0+ekFkZCgnRFM5JywgMi41LCAnV29yZicsIDMuMCwgJ0tpcmEnLCA0LjAsICdTaXNrbycpOwogICAgICogJHJlZGlzLT56SW50ZXIoWydUTkcnLCAnRFM5J10pOwogICAgICogJHJlZGlzLT56SW50ZXIoWydUTkcnLCAnRFM5J10sIE5VTEwsIFsnd2l0aHNjb3JlcycgPT4gdHJ1ZV0pOwogICAgICogJHJlZGlzLT56SW50ZXIoWydUTkcnLCAnRFM5J10sIE5VTEwsIFsnd2l0aHNjb3JlcycgPT4gdHJ1ZSwgJ2FnZ3JlZ2F0ZScgPT4gJ21heCddKTsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHppbnRlcihhcnJheSAka2V5cywgP2FycmF5ICR3ZWlnaHRzID0gbnVsbCwgP2FycmF5ICRvcHRpb25zID0gbnVsbCk6IFJlZGlzfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTaW1pbGFyIHRvIFpJTlRFUiBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIGludGVyc2VjdGVkIHZhbHVlcywgdGhpcyBjb21tYW5kIHJldHVybnMgdGhlCiAgICAgKiBjYXJkaW5hbGl0eSBvZiB0aGUgaW50ZXJzZWN0ZWQgc2V0LgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3ppbnRlcmNhcmQKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96aW50ZXIKICAgICAqIEBzZWUgUmVkaXM6OnppbnRlcigpCiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleXMgT25lIG9yZSBtb3JlIHNvcnRlZCBzZXQga2V5IG5hbWVzLgogICAgICogQHBhcmFtIGludCAkbGltaXQgQW4gb3B0aW9uYWwgdXBwZXIgYm91bmQgb24gdGhlIHJldHVybmVkIGNhcmRpbmFsaXR5LiAgSWYgc2V0IHRvIGEgdmFsdWUKICAgICAqICAgICAgICAgICAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiB6ZXJvLCBSZWRpcyB3aWxsIHN0b3AgcHJvY2Vzc2luZyB0aGUgaW50ZXJzZWN0aW9uIG9uY2UgdGhlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmcgY2FyZGluYWxpdHkgcmVhY2hlcyB0aGlzIGxpbWl0LgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIGNhcmRpbmFsaXR5IG9mIHRoZSBpbnRlcnNlY3Rpb24gb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBleGFtcGxlCiAgICAgKiAkcmVkaXMtPnpBZGQoJ3pzMScsIDEsICdvbmUnLCAyLCAndHdvJywgMywgJ3RocmVlJywgNCwgJ2ZvdXInKTsKICAgICAqICRyZWRpcy0+ekFkZCgnenMyJywgMiwgJ3R3bycsIDQsICdmb3VyJyk7CiAgICAgKiAkcmVkaXMtPnpJbnRlckNhcmQoWyd6czEnLCAnenMyJ10pOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gemludGVyY2FyZChhcnJheSAka2V5cywgaW50ICRsaW1pdCA9IC0xKTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBDb21wdXRlIHRoZSBpbnRlcnNlY3Rpb24gb2Ygb25lIG9yZSBtb3JlIHNvcnRlZCBzZXRzIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBhIG5ldyBzb3J0ZWQgc2V0LgogICAgICogQHBhcmFtIHN0cmluZyAkZHN0IFRoZSBkZXN0aW5hdGlvbiBzb3J0ZWQgc2V0IHRvIHN0b3JlIHRoZSBpbnRlcnNlY3RlZCB2YWx1ZXMuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleXMgT25lIG9yZSBtb3JlIHNvcnRlZCBzZXQga2V5IG5hbWVzLgogICAgICogQHBhcmFtIGFycmF5fG51bGwgJHdlaWdodHMgQW4gb3B0aW9uYWwgYXJyYXkgb2YgZmxvYXRzIHRvIHdlaWdodCBlYWNoIHBhc3NlZCBpbnB1dCBzZXQuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGFnZ3JlZ2F0ZSBBbiBvcHRpb25hbCBhZ2dyZWdhdGlvbiBtZXRob2QgdG8gdXNlLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICdTVU0nIC0gU3RvcmUgc3VtIG9mIGFsbCBpbnRlcnNlY3RlZCBtZW1iZXJzICh0aGlzIGlzIHRoZSBkZWZhdWx0KS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAnTUlOJyAtIFN0b3JlIG1pbmltdW0gdmFsdWUgZm9yIGVhY2ggaW50ZXJzZWN0ZWQgbWVtYmVyLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICdNQVgnIC0gU3RvcmUgbWF4aW11bSB2YWx1ZSBmb3IgZWFjaCBpbnRlcnNlY3RlZCBtZW1iZXIuCiAgICAgKiBAcmV0dXJuIFJlZGlzfGludHxmYWxzZSAgVGhlIHRvdGFsIG51bWJlciBvZiBtZW1iZXJzIHdyaXR0ZXJuIHRvIHRoZSBkZXN0aW5hdGlvbiBzZXQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96aW50ZXJzdG9yZQogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3ppbnRlcgogICAgICogQGV4YW1wbGUKICAgICAqICRyZWRpcy0+ekFkZCgnenMxJywgMywgJ2FwcGxlcycsIDIsICdwZWFycycpOwogICAgICogJHJlZGlzLT56QWRkKCd6czInLCA0LCAncGVhcnMnLCAzLCAnYmFuYW5hcycpOwogICAgICogJHJlZGlzLT56QWRkKCd6czMnLCAyLCAnZmlncycsIDMsICdwZWFycycpOwogICAgICogJHJlZGlzLT56SW50ZXJTdG9yZSgnZnJ1aXQtc3VtJywgWyd6czEnLCAnenMyJywgJ3pzMyddKTsKICAgICAqICRyZWRpcy0+ekludGVyU3RvcmUoJ2ZydWl0LW1heCcsIFsnenMxJywgJ3pzMicsICd6czMnXSwgTlVMTCwgJ01BWCcpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gemludGVyc3RvcmUoc3RyaW5nICRkc3QsIGFycmF5ICRrZXlzLCA/YXJyYXkgJHdlaWdodHMgPSBudWxsLCA/c3RyaW5nICRhZ2dyZWdhdGUgPSBudWxsKTogUmVkaXN8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTY2FuIHRoZSBtZW1iZXJzIG9mIGEgc29ydGVkIHNldCBpbmNyZW1lbnRhbGx5LCB1c2luZyBhIGN1cnNvcgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBzb3J0ZWQgc2V0IHRvIHNjYW4uCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGl0ZXJhdG9yIEEgcmVmZXJlbmNlIHRvIGFuIGl0ZXJhdG9yIHRoYXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIE5VTEwgaW5pdGlhbGx5LCB0aGF0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdXBkYXRlZCBhZnRlciBlYWNoIHN1YnNlcXVlbnQgY2FsbCB0byBaU0NBTi4gIE9uY2UgdGhlIGl0ZXJhdG9yCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcyByZXR1cm5lZCB0byB6ZXJvIHRoZSBzY2FuIGlzIGNvbXBsZXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHBhdHRlcm4gQW4gb3B0aW9uYWwgZ2xvYi1zdHlsZSBwYXR0ZXJuIHRoYXQgbGltaXRzIHdoaWNoIG1lbWJlcnMgYXJlIHJldHVybmVkIGR1cmluZwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2Nhbm5pbmcgcHJvY2Vzcy4KICAgICAqIEBwYXJhbSBpbnQgJGNvdW50IEEgaGludCBmb3IgUmVkaXMgdGhhdCB0ZWxscyBpdCBob3cgbWFueSBlbGVtZW50cyBpdCBzaG91bGQgdGVzdCBiZWZvcmUgcmV0dXJuaW5nCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGNhbGwuICBUaGUgaGlnaGVyIHRoZSBtb3JlIHdvcmsgUmVkaXMgbWF5IGRvIGluIGFueSBvbmUgZ2l2ZW4gY2FsbCB0bwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBaU0NBTiBwb3RlbnRpYWxseSBibG9ja2luZyBmb3IgbG9uZ2VyIHBlcmlvZHMgb2YgdGltZS4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8ZmFsc2UgQW4gYXJyYXkgb2YgZWxlbWVudHMgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy96c2NhbgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL3NjYW4KICAgICAqIEBzZWUgUmVkaXM6OnNjYW4oKQogICAgICogTk9URTogIFNlZSBSZWRpczo6c2NhbigpIGZvciBkZXRhaWxlZCBleGFtcGxlIGNvZGUgb24gaG93IHRvIGNhbGwgU0NBTiBsaWtlIGNvbW1hbmRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24genNjYW4oc3RyaW5nICRrZXksID9pbnQgJiRpdGVyYXRvciwgP3N0cmluZyAkcGF0dGVybiA9IG51bGwsIGludCAkY291bnQgPSAwKTogUmVkaXN8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSB1bmlvbiBvZiBvbmUgb3IgbW9yZSBzb3J0ZWQgc2V0cwogICAgICogQHBhcmFtIGFycmF5ICRrZXlzIE9uZSBvcmUgbW9yZSBzb3J0ZWQgc2V0IGtleSBuYW1lcwogICAgICogQHBhcmFtIGFycmF5fG51bGwgJHdlaWdodHMgQW4gb3B0aW9uYWwgYXJyYXkgd2l0aCBmbG9hdGluZyBwb2ludCB3ZWlnaHRzIHVzZWQgd2hlbiBwZXJmb3JtaW5nIHRoZSB1bmlvbi4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGlmIHRoaXMgYXJndW1lbnQgaXMgcGFzc2VkLCBpdCBtdXN0IGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIGFzIHRoZSAka2V5cyBhcnJheS4KICAgICAqIEBwYXJhbSBhcnJheXxudWxsICRvcHRpb25zIEFuIGFycmF5IHRoYXQgbW9kaWZpZXMgaG93IHRoaXMgY29tbWFuZCBmdW5jdGlvbnMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlPgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAkb3B0aW9ucyA9IFsKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQnkgZGVmYXVsdCB3aGVuIG1lbWJlcnMgZXhpc3QgaW4gbW9yZSB0aGFuIG9uZSBzZXQgUmVkaXMgd2lsbCBTVU0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdG90YWwgc2NvcmUgZm9yIGVhY2ggbWF0Y2guICBJbnN0ZWFkLCBpdCBjYW4gcmV0dXJuIHRoZSBBVkcsIE1JTiwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3IgTUFYIHZhbHVlIGJhc2VkIG9uIHRoaXMgb3B0aW9uLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FHR1JFR0FURScgPT4gJ3N1bScgfCAnbWluJyB8ICdtYXgnCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdoZXRoZXIgUmVkaXMgc2hvdWxkIGFsc28gcmV0dXJuIGVhY2ggbWVtYmVycyBhZ2dyZWdhdGVkIHNjb3JlLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dJVEhTQ09SRVMnID0+IHRydWUgfCBmYWxzZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIDwvY29kZT4KICAgICAqIEByZXR1cm4gUmVkaXN8YXJyYXl8ZmFsc2UgVGhlIHVuaW9uIG9mIGVhY2ggc29ydGVkIHNldCBvciBmYWxzZSBvbiBmYWlsdXJlCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT5kZWwoJ3N0b3JlMScsICdzdG9yZTInLCAnc3RvcmUzJyk7CiAgICAgKiAkcmVkaXMtPnpBZGQoJ3N0b3JlMScsIDEsICdhcHBsZXMnLCAzLCAncGVhcnMnLCA2LCAnYmFuYW5hcycpOwogICAgICogJHJlZGlzLT56QWRkKCdzdG9yZTInLCAzLCAnYXBwbGVzJywgNSwgJ2NvY29udXRzJywgMiwgJ2JhbmFuYXMnKTsKICAgICAqICRyZWRpcy0+ekFkZCgnc3RvcmUzJywgMiwgJ2JhbmFuYXMnLCA2LCAnYXBwbGVzJywgNCwgJ2ZpZ3MnKTsKICAgICAqICRyZWRpcy0+elVuaW9uKFsnc3RvcmUxJywgJ3N0b3JlMicsICdzdG9yZTMnXSwgTlVMTCwgWyd3aXRoc2NvcmVzJyA9PiB0cnVlXSk7CiAgICAgKiAkcmVkaXMtPnpVbmlvbihbJ3N0b3JlMScsICdzdG9yZTMnXSwgWzIsIC41XSwgWyd3aXRoc2NvcmVzJyA9PiB0cnVlXSk7CiAgICAgKiAkcmVkaXMtPnpVbmlvbihbJ3N0b3JlMScsICdzdG9yZTMnXSwgWzIsIC41XSwgWyd3aXRoc2NvcmVzJyA9PiB0cnVlLCAnYWdncmVnYXRlJyA9PiAnTUlOJ10pOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24genVuaW9uKGFycmF5ICRrZXlzLCA/YXJyYXkgJHdlaWdodHMgPSBudWxsLCA/YXJyYXkgJG9wdGlvbnMgPSBudWxsKTogUmVkaXN8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFBlcmZvcm0gYSB1bmlvbiBvbiBvbmUgb3IgbW9yZSBSZWRpcyBzZXRzIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIGEgZGVzdGluYXRpb24gc29ydGVkIHNldC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRzdCBUaGUgZGVzdGluYXRpb24gc2V0IHRvIHN0b3JlIHRoZSB1bmlvbi4KICAgICAqIEBwYXJhbSBhcnJheSAka2V5cyBPbmUgb3IgbW9yZSBpbnB1dCBrZXlzIG9uIHdoaWNoIHRvIHBlcmZvcm0gb3VyIHVuaW9uLgogICAgICogQHBhcmFtIGFycmF5fG51bGwgJHdlaWdodHMgQW4gb3B0aW9uYWwgd2VpZ2h0cyBhcnJheSB1c2VkIHRvIHdlaWdodCBlYWNoIGlucHV0IHNldC4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkYWdncmVnYXRlIEFuIG9wdGlvbmFsIG1vZGlmaWVyIGluIGhvdyBSZWRpcyB3aWxsIGNvbWJpbmUgZHVwbGljYXRlIG1lbWJlcnMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQ6ICAnTUlOJywgJ01BWCcsICdTVU0nLgogICAgICogQHJldHVybiBSZWRpc3xpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBtZW1iZXJzIHN0b3JlZCBpbiB0aGUgZGVzdGluYXRpb24gc2V0IG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvenVuaW9uc3RvcmUKICAgICAqIEBzZWUgUmVkaXM6Onp1bmlvbigpCiAgICAgKiBAZXhhbXBsZQogICAgICogJHJlZGlzLT56QWRkKCd6czEnLCAxLCAnb25lJywgMywgJ3RocmVlJyk7CiAgICAgKiAkcmVkaXMtPnpBZGQoJ3pzMScsIDIsICd0d28nLCA0LCAnZm91cicpOwogICAgICogJHJlZGlzLT56YWRkKCd6czMnLCAxLCAnb25lJywgNywgJ2ZpdmUnKTsKICAgICAqICRyZWRpcy0+elVuaW9uU3RvcmUoJ2RzdCcsIFsnenMxJywgJ3pzMicsICd6czMnXSk7CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6dW5pb25zdG9yZShzdHJpbmcgJGRzdCwgYXJyYXkgJGtleXMsID9hcnJheSAkd2VpZ2h0cyA9IG51bGwsID9zdHJpbmcgJGFnZ3JlZ2F0ZSA9IG51bGwpOiBSZWRpc3xpbnR8ZmFsc2Uge30KfQoKY2xhc3MgUmVkaXNFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHt9Cjw/cGhwCgovLyBTdGFydCBvZiBDb3JlIHYuNS4zLjYtMTN1YnVudHUzLjIKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxFeHBlY3RlZFZhbHVlczsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxMYW5ndWFnZUxldmVsVHlwZUF3YXJlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFBocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFRlbnRhdGl2ZVR5cGU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cUHVyZTsKCi8qKgogKiBDcmVhdGVkIGJ5IHR5cGVjYXN0aW5nIHRvIG9iamVjdC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC5jbGFzc2VzLnBocAogKi8KY2xhc3Mgc3RkQ2xhc3Mge30KCi8qKgogKiBAbGluayBodHRwczovL3dpa2kucGhwLm5ldC9yZmMvaXRlcmFibGUKICovCmludGVyZmFjZSBpdGVyYWJsZSB7fQoKLyoqCiAqIEludGVyZmFjZSB0byBkZXRlY3QgaWYgYSBjbGFzcyBpcyB0cmF2ZXJzYWJsZSB1c2luZyBmb3JlYWNoLgogKiBBYnN0cmFjdCBiYXNlIGludGVyZmFjZSB0aGF0IGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBhbG9uZS4KICogSW5zdGVhZCBpdCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVpdGhlciB7QHNlZSBJdGVyYXRvckFnZ3JlZ2F0ZX0gb3Ige0BzZWUgSXRlcmF0b3J9LgogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnRyYXZlcnNhYmxlLnBocAogKiBAdGVtcGxhdGUgVEtleQogKiBAdGVtcGxhdGUtY292YXJpYW50IFRWYWx1ZQogKgogKiBAdGVtcGxhdGUtZXh0ZW5kcyBpdGVyYWJsZTxUS2V5LCBUVmFsdWU+CiAqLwppbnRlcmZhY2UgVHJhdmVyc2FibGUgZXh0ZW5kcyBpdGVyYWJsZSB7fQoKLyoqCiAqIEludGVyZmFjZSB0byBjcmVhdGUgYW4gZXh0ZXJuYWwgSXRlcmF0b3IuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaXRlcmF0b3JhZ2dyZWdhdGUucGhwCiAqIEB0ZW1wbGF0ZSBUS2V5CiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVFZhbHVlCiAqIEB0ZW1wbGF0ZS1leHRlbmRzIFRyYXZlcnNhYmxlPFRLZXksIFRWYWx1ZT4KICovCmludGVyZmFjZSBJdGVyYXRvckFnZ3JlZ2F0ZSBleHRlbmRzIFRyYXZlcnNhYmxlCnsKICAgIC8qKgogICAgICogUmV0cmlldmUgYW4gZXh0ZXJuYWwgaXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaXRlcmF0b3JhZ2dyZWdhdGUuZ2V0aXRlcmF0b3IucGhwCiAgICAgKiBAcmV0dXJuIFRyYXZlcnNhYmxlPFRLZXksIFRWYWx1ZT58VFZhbHVlW10gQW4gaW5zdGFuY2Ugb2YgYW4gb2JqZWN0IGltcGxlbWVudGluZyA8Yj5JdGVyYXRvcjwvYj4gb3IKICAgICAqIDxiPlRyYXZlcnNhYmxlPC9iPgogICAgICogQHRocm93cyBFeGNlcHRpb24gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCk6IFRyYXZlcnNhYmxlOwp9CgovKioKICogSW50ZXJmYWNlIGZvciBleHRlcm5hbCBpdGVyYXRvcnMgb3Igb2JqZWN0cyB0aGF0IGNhbiBiZSBpdGVyYXRlZAogKiB0aGVtc2VsdmVzIGludGVybmFsbHkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaXRlcmF0b3IucGhwCiAqIEB0ZW1wbGF0ZSBUS2V5CiAqIEB0ZW1wbGF0ZS1jb3ZhcmlhbnQgVFZhbHVlCiAqIEB0ZW1wbGF0ZS1leHRlbmRzIFRyYXZlcnNhYmxlPFRLZXksIFRWYWx1ZT4KICovCmludGVyZmFjZSBJdGVyYXRvciBleHRlbmRzIFRyYXZlcnNhYmxlCnsKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBjdXJyZW50IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaXRlcmF0b3IuY3VycmVudC5waHAKICAgICAqIEByZXR1cm4gVFZhbHVlIENhbiByZXR1cm4gYW55IHR5cGUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCk6IG1peGVkOwoKICAgIC8qKgogICAgICogTW92ZSBmb3J3YXJkIHRvIG5leHQgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pdGVyYXRvci5uZXh0LnBocAogICAgICogQHJldHVybiB2b2lkIEFueSByZXR1cm5lZCB2YWx1ZSBpcyBpZ25vcmVkLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpOiB2b2lkOwoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pdGVyYXRvci5rZXkucGhwCiAgICAgKiBAcmV0dXJuIFRLZXl8bnVsbCBUS2V5IG9uIHN1Y2Nlc3MsIG9yIG51bGwgb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpOiBtaXhlZDsKCiAgICAvKioKICAgICAqIENoZWNrcyBpZiBjdXJyZW50IHBvc2l0aW9uIGlzIHZhbGlkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2l0ZXJhdG9yLnZhbGlkLnBocAogICAgICogQHJldHVybiBib29sIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSBjYXN0ZWQgdG8gYm9vbGVhbiBhbmQgdGhlbiBldmFsdWF0ZWQuCiAgICAgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKTogYm9vbDsKCiAgICAvKioKICAgICAqIFJld2luZCB0aGUgSXRlcmF0b3IgdG8gdGhlIGZpcnN0IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaXRlcmF0b3IucmV3aW5kLnBocAogICAgICogQHJldHVybiB2b2lkIEFueSByZXR1cm5lZCB2YWx1ZSBpcyBpZ25vcmVkLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQ7Cn0KCi8qKgogKiBJbnRlcmZhY2UgdG8gcHJvdmlkZSBhY2Nlc3Npbmcgb2JqZWN0cyBhcyBhcnJheXMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuYXJyYXlhY2Nlc3MucGhwCiAqIEB0ZW1wbGF0ZSBUS2V5CiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICovCmludGVyZmFjZSBBcnJheUFjY2Vzcwp7CiAgICAvKioKICAgICAqIFdoZXRoZXIgYSBvZmZzZXQgZXhpc3RzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2FycmF5YWNjZXNzLm9mZnNldGV4aXN0cy5waHAKICAgICAqIEBwYXJhbSBUS2V5ICRvZmZzZXQgPHA+CiAgICAgKiBBbiBvZmZzZXQgdG8gY2hlY2sgZm9yLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgY2FzdGVkIHRvIGJvb2xlYW4gaWYgbm9uLWJvb2xlYW4gd2FzIHJldHVybmVkLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJG9mZnNldCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBPZmZzZXQgdG8gcmV0cmlldmUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlhY2Nlc3Mub2Zmc2V0Z2V0LnBocAogICAgICogQHBhcmFtIFRLZXkgJG9mZnNldCA8cD4KICAgICAqIFRoZSBvZmZzZXQgdG8gcmV0cmlldmUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIFRWYWx1ZSBDYW4gcmV0dXJuIGFsbCB2YWx1ZSB0eXBlcy4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRvZmZzZXQpOiBtaXhlZDsKCiAgICAvKioKICAgICAqIE9mZnNldCB0byBzZXQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vYXJyYXlhY2Nlc3Mub2Zmc2V0c2V0LnBocAogICAgICogQHBhcmFtIFRLZXkgJG9mZnNldCA8cD4KICAgICAqIFRoZSBvZmZzZXQgdG8gYXNzaWduIHRoZSB2YWx1ZSB0by4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIHRvIHNldC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJG9mZnNldCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICR2YWx1ZQogICAgKTogdm9pZDsKCiAgICAvKioKICAgICAqIE9mZnNldCB0byB1bnNldAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9hcnJheWFjY2Vzcy5vZmZzZXR1bnNldC5waHAKICAgICAqIEBwYXJhbSBUS2V5ICRvZmZzZXQgPHA+CiAgICAgKiBUaGUgb2Zmc2V0IHRvIHVuc2V0LgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRvZmZzZXQpOiB2b2lkOwp9CgovKioKICogSW50ZXJmYWNlIGZvciBjdXN0b21pemVkIHNlcmlhbGl6aW5nLjxicj4KICogQXMgb2YgUEhQIDguMS4wLCBhIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgU2VyaWFsaXphYmxlIHdpdGhvdXQgYWxzbyBpbXBsZW1lbnRpbmcgYF9fc2VyaWFsaXplKClgIGFuZCBgX191bnNlcmlhbGl6ZSgpYAogKiB3aWxsIGdlbmVyYXRlIGEgZGVwcmVjYXRpb24gd2FybmluZy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5zZXJpYWxpemFibGUucGhwCiAqLwppbnRlcmZhY2UgU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIG9iamVjdC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc2VyaWFsaXphYmxlLnNlcmlhbGl6ZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IG9yIG51bGwKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIFJldHVybmluZyBvdGhlciB0eXBlIHRoYW4gc3RyaW5nIG9yIG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyB0aGUgb2JqZWN0LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zZXJpYWxpemFibGUudW5zZXJpYWxpemUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdC4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGRhdGEpOwp9CgovKioKICogVGhyb3dhYmxlIGlzIHRoZSBiYXNlIGludGVyZmFjZSBmb3IgYW55IG9iamVjdCB0aGF0IGNhbiBiZSB0aHJvd24gdmlhIGEgdGhyb3cgc3RhdGVtZW50IGluIFBIUCA3LAogKiBpbmNsdWRpbmcgRXJyb3IgYW5kIEV4Y2VwdGlvbi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy50aHJvd2FibGUucGhwCiAqIEBzaW5jZSA3LjAKICovCmludGVyZmFjZSBUaHJvd2FibGUgZXh0ZW5kcyBTdHJpbmdhYmxlCnsKICAgIC8qKgogICAgICogR2V0cyB0aGUgbWVzc2FnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aHJvd2FibGUuZ2V0bWVzc2FnZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXNzYWdlKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIEdldHMgdGhlIGV4Y2VwdGlvbiBjb2RlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Rocm93YWJsZS5nZXRjb2RlLnBocAogICAgICogQHJldHVybiBpbnQgPHA+CiAgICAgKiBSZXR1cm5zIHRoZSBleGNlcHRpb24gY29kZSBhcyBpbnRlZ2VyIGluCiAgICAgKiB7QHNlZSBFeGNlcHRpb259IGJ1dCBwb3NzaWJseSBhcyBvdGhlciB0eXBlIGluCiAgICAgKiB7QHNlZSBFeGNlcHRpb259IGRlc2NlbmRhbnRzIChmb3IgZXhhbXBsZSBhcwogICAgICogc3RyaW5nIGluIHtAc2VlIFBET0V4Y2VwdGlvbn0pLgogICAgICogPC9wPgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29kZSgpOwoKICAgIC8qKgogICAgICogR2V0cyB0aGUgZmlsZSBpbiB3aGljaCB0aGUgZXhjZXB0aW9uIG9jY3VycmVkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Rocm93YWJsZS5nZXRmaWxlLnBocAogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoIHRoZSBvYmplY3Qgd2FzIHRocm93bi4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpbGUoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogR2V0cyB0aGUgbGluZSBvbiB3aGljaCB0aGUgb2JqZWN0IHdhcyBpbnN0YW50aWF0ZWQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGhyb3dhYmxlLmdldGxpbmUucGhwCiAgICAgKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgdGhyb3duIG9iamVjdCB3YXMgaW5zdGFudGlhdGVkLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGluZSgpOiBpbnQ7CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBzdGFjayB0cmFjZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aHJvd2FibGUuZ2V0dHJhY2UucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5IDxwPgogICAgICogUmV0dXJucyB0aGUgc3RhY2sgdHJhY2UgYXMgYW4gYXJyYXkgaW4gdGhlIHNhbWUgZm9ybWF0IGFzCiAgICAgKiB7QHNlZSBkZWJ1Z19iYWNrdHJhY2UoKX0uCiAgICAgKiA8L3A+CiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUcmFjZSgpOiBhcnJheTsKCiAgICAvKioKICAgICAqIEdldHMgdGhlIHN0YWNrIHRyYWNlIGFzIGEgc3RyaW5nCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Rocm93YWJsZS5nZXR0cmFjZWFzc3RyaW5nLnBocAogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgc3RhY2sgdHJhY2UgYXMgYSBzdHJpbmcuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUcmFjZUFzU3RyaW5nKCk6IHN0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIFRocm93YWJsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aHJvd2FibGUuZ2V0cHJldmlvdXMucGhwCiAgICAgKiBAcmV0dXJuIG51bGx8VGhyb3dhYmxlIFJldHVybnMgdGhlIHByZXZpb3VzIHtAc2VlIFRocm93YWJsZX0gaWYgYXZhaWxhYmxlLCBvciA8Yj5OVUxMPC9iPiBvdGhlcndpc2UuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ1Rocm93YWJsZXxudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcmV2aW91cygpOwoKICAgIC8qKgogICAgICogR2V0cyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGhyb3duIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aHJvd2FibGUudG9zdHJpbmcucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyA8cD5SZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRocm93biBvYmplY3QuPC9wPgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOwp9CgovKioKICogRXhjZXB0aW9uIGlzIHRoZSBiYXNlIGNsYXNzIGZvcgogKiBhbGwgRXhjZXB0aW9ucy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5leGNlcHRpb24ucGhwCiAqLwpjbGFzcyBFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUKewogICAgLyoqIFRoZSBlcnJvciBtZXNzYWdlICovCiAgICBwcm90ZWN0ZWQgJG1lc3NhZ2U7CgogICAgLyoqIFRoZSBlcnJvciBjb2RlICovCiAgICBwcm90ZWN0ZWQgJGNvZGU7CgogICAgLyoqIFRoZSBmaWxlbmFtZSB3aGVyZSB0aGUgZXJyb3IgaGFwcGVuZWQgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXQogICAgcHJvdGVjdGVkICRmaWxlOwoKICAgIC8qKiBUaGUgbGluZSB3aGVyZSB0aGUgZXJyb3IgaGFwcGVuZWQgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldCiAgICBwcm90ZWN0ZWQgJGxpbmU7CgogICAgLyoqCiAgICAgKiBDbG9uZSB0aGUgZXhjZXB0aW9uCiAgICAgKiBUcmllcyB0byBjbG9uZSB0aGUgRXhjZXB0aW9uLCB3aGljaCByZXN1bHRzIGluIEZhdGFsIGVycm9yLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9leGNlcHRpb24uY2xvbmUucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAiNS40IiwgdG86ICI4LjAiKV0KICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jbG9uZSgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBDbG9uZSB0aGUgZXhjZXB0aW9uCiAgICAgKiBUcmllcyB0byBjbG9uZSB0aGUgRXhjZXB0aW9uLCB3aGljaCByZXN1bHRzIGluIEZhdGFsIGVycm9yLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9leGNlcHRpb24uY2xvbmUucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZSgiOC4xIildCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY2xvbmUoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQ29uc3RydWN0IHRoZSBleGNlcHRpb24uIE5vdGU6IFRoZSBtZXNzYWdlIGlzIE5PVCBiaW5hcnkgc2FmZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXhjZXB0aW9uLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgW29wdGlvbmFsXSBUaGUgRXhjZXB0aW9uIG1lc3NhZ2UgdG8gdGhyb3cuCiAgICAgKiBAcGFyYW0gaW50ICRjb2RlIFtvcHRpb25hbF0gVGhlIEV4Y2VwdGlvbiBjb2RlLgogICAgICogQHBhcmFtIG51bGx8VGhyb3dhYmxlICRwcmV2aW91cyBbb3B0aW9uYWxdIFRoZSBwcmV2aW91cyB0aHJvd2FibGUgdXNlZCBmb3IgdGhlIGV4Y2VwdGlvbiBjaGFpbmluZy4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRtZXNzYWdlID0gIiIsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGNvZGUgPSAwLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ1Rocm93YWJsZXxudWxsJ10sIGRlZmF1bHQ6ICdUaHJvd2FibGUnKV0gJHByZXZpb3VzID0gbnVsbAogICAgKSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgRXhjZXB0aW9uIG1lc3NhZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXhjZXB0aW9uLmdldG1lc3NhZ2UucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgRXhjZXB0aW9uIG1lc3NhZ2UgYXMgYSBzdHJpbmcuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXNzYWdlKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgRXhjZXB0aW9uIGNvZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXhjZXB0aW9uLmdldGNvZGUucGhwCiAgICAgKiBAcmV0dXJuIG1peGVkfGludCB0aGUgZXhjZXB0aW9uIGNvZGUgYXMgaW50ZWdlciBpbgogICAgICogPGI+RXhjZXB0aW9uPC9iPiBidXQgcG9zc2libHkgYXMgb3RoZXIgdHlwZSBpbgogICAgICogPGI+RXhjZXB0aW9uPC9iPiBkZXNjZW5kYW50cyAoZm9yIGV4YW1wbGUgYXMKICAgICAqIHN0cmluZyBpbiA8Yj5QRE9FeGNlcHRpb248L2I+KS4KICAgICAqLwogICAgI1tQdXJlXQogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldENvZGUoKSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgZmlsZSBpbiB3aGljaCB0aGUgZXhjZXB0aW9uIG9jY3VycmVkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V4Y2VwdGlvbi5nZXRmaWxlLnBocAogICAgICogQHJldHVybiBzdHJpbmcgdGhlIGZpbGVuYW1lIGluIHdoaWNoIHRoZSBleGNlcHRpb24gd2FzIGNyZWF0ZWQuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgbGluZSBpbiB3aGljaCB0aGUgZXhjZXB0aW9uIG9jY3VycmVkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V4Y2VwdGlvbi5nZXRsaW5lLnBocAogICAgICogQHJldHVybiBpbnQgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBleGNlcHRpb24gd2FzIGNyZWF0ZWQuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRMaW5lKCk6IGludCB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgc3RhY2sgdHJhY2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXhjZXB0aW9uLmdldHRyYWNlLnBocAogICAgICogQHJldHVybiBhcnJheSB0aGUgRXhjZXB0aW9uIHN0YWNrIHRyYWNlIGFzIGFuIGFycmF5LgogICAgICovCiAgICAjW1B1cmVdCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0VHJhY2UoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgcHJldmlvdXMgRXhjZXB0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V4Y2VwdGlvbi5nZXRwcmV2aW91cy5waHAKICAgICAqIEByZXR1cm4gbnVsbHxUaHJvd2FibGUgUmV0dXJucyB0aGUgcHJldmlvdXMge0BzZWUgVGhyb3dhYmxlfSBpZiBhdmFpbGFibGUsIG9yIDxiPk5VTEw8L2I+IG90aGVyd2lzZS4KICAgICAqIG9yIG51bGwgb3RoZXJ3aXNlLgogICAgICovCiAgICAjW1B1cmVdCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJldmlvdXMoKTogP1Rocm93YWJsZSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgc3RhY2sgdHJhY2UgYXMgYSBzdHJpbmcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXhjZXB0aW9uLmdldHRyYWNlYXNzdHJpbmcucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgRXhjZXB0aW9uIHN0YWNrIHRyYWNlIGFzIGEgc3RyaW5nLgogICAgICovCiAgICAjW1B1cmVdCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0VHJhY2VBc1N0cmluZygpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXhjZXB0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V4Y2VwdGlvbi50b3N0cmluZy5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGV4Y2VwdGlvbi4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nIHt9CgogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fd2FrZXVwKCk6IHZvaWQge30KfQoKLyoqCiAqIEVycm9yIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgaW50ZXJuYWwgUEhQIGVycm9yIGV4Y2VwdGlvbnMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZXJyb3IucGhwCiAqIEBzaW5jZSA3LjAKICovCmNsYXNzIEVycm9yIGltcGxlbWVudHMgVGhyb3dhYmxlCnsKICAgIC8qKiBUaGUgZXJyb3IgbWVzc2FnZSAqLwogICAgcHJvdGVjdGVkICRtZXNzYWdlOwoKICAgIC8qKiBUaGUgZXJyb3IgY29kZSAqLwogICAgcHJvdGVjdGVkICRjb2RlOwoKICAgIC8qKiBUaGUgZmlsZW5hbWUgd2hlcmUgdGhlIGVycm9yIGhhcHBlbmVkICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHByb3RlY3RlZCAkZmlsZTsKCiAgICAvKiogVGhlIGxpbmUgd2hlcmUgdGhlIGVycm9yIGhhcHBlbmVkICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXQogICAgcHJvdGVjdGVkICRsaW5lOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0IHRoZSBlcnJvciBvYmplY3QuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Vycm9yLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgW29wdGlvbmFsXSBUaGUgRXJyb3IgbWVzc2FnZSB0byB0aHJvdy4KICAgICAqIEBwYXJhbSBpbnQgJGNvZGUgW29wdGlvbmFsXSBUaGUgRXJyb3IgY29kZS4KICAgICAqIEBwYXJhbSBudWxsfFRocm93YWJsZSAkcHJldmlvdXMgW29wdGlvbmFsXSBUaGUgcHJldmlvdXMgdGhyb3dhYmxlIHVzZWQgZm9yIHRoZSBleGNlcHRpb24gY2hhaW5pbmcuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbWVzc2FnZSA9ICIiLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRjb2RlID0gMCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdUaHJvd2FibGV8bnVsbCddLCBkZWZhdWx0OiAnVGhyb3dhYmxlJyldICRwcmV2aW91cyA9IG51bGwKICAgICkge30KCiAgICAvKioqCiAgICAgKiBHZXRzIHRoZSBtZXNzYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Rocm93YWJsZS5nZXRtZXNzYWdlLnBocAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldE1lc3NhZ2UoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBleGNlcHRpb24gY29kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aHJvd2FibGUuZ2V0Y29kZS5waHAKICAgICAqIEByZXR1cm4gaW50IDxwPgogICAgICogUmV0dXJucyB0aGUgZXhjZXB0aW9uIGNvZGUgYXMgaW50ZWdlciBpbgogICAgICoge0BzZWUgRXhjZXB0aW9ufSBidXQgcG9zc2libHkgYXMgb3RoZXIgdHlwZSBpbgogICAgICoge0BzZWUgRXhjZXB0aW9ufSBkZXNjZW5kYW50cyAoZm9yIGV4YW1wbGUgYXMKICAgICAqIHN0cmluZyBpbiB7QHNlZSBQRE9FeGNlcHRpb259KS4KICAgICAqIDwvcD4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldENvZGUoKSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgZmlsZSBpbiB3aGljaCB0aGUgZXhjZXB0aW9uIG9jY3VycmVkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Rocm93YWJsZS5nZXRmaWxlLnBocAogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoIHRoZSBvYmplY3Qgd2FzIHRocm93bi4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldEZpbGUoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBsaW5lIG9uIHdoaWNoIHRoZSBvYmplY3Qgd2FzIGluc3RhbnRpYXRlZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aHJvd2FibGUuZ2V0bGluZS5waHAKICAgICAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSB0aHJvd24gb2JqZWN0IHdhcyBpbnN0YW50aWF0ZWQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRMaW5lKCk6IGludCB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgc3RhY2sgdHJhY2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGhyb3dhYmxlLmdldHRyYWNlLnBocAogICAgICogQHJldHVybiBhcnJheSA8cD4KICAgICAqIFJldHVybnMgdGhlIHN0YWNrIHRyYWNlIGFzIGFuIGFycmF5IGluIHRoZSBzYW1lIGZvcm1hdCBhcwogICAgICoge0BzZWUgZGVidWdfYmFja3RyYWNlKCl9LgogICAgICogPC9wPgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0VHJhY2UoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIHN0YWNrIHRyYWNlIGFzIGEgc3RyaW5nCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Rocm93YWJsZS5nZXR0cmFjZWFzc3RyaW5nLnBocAogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgc3RhY2sgdHJhY2UgYXMgYSBzdHJpbmcuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRUcmFjZUFzU3RyaW5nKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcHJldmlvdXMgVGhyb3dhYmxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Rocm93YWJsZS5nZXRwcmV2aW91cy5waHAKICAgICAqIEByZXR1cm4gbnVsbHxUaHJvd2FibGUgUmV0dXJucyB0aGUgcHJldmlvdXMge0BzZWUgVGhyb3dhYmxlfSBpZiBhdmFpbGFibGUsIG9yIDxiPk5VTEw8L2I+IG90aGVyd2lzZS4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldFByZXZpb3VzKCk6ID9UaHJvd2FibGUge30KCiAgICAvKioKICAgICAqIEdldHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRocm93biBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGhyb3dhYmxlLnRvc3RyaW5nLnBocAogICAgICogQHJldHVybiBzdHJpbmcgPHA+UmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aHJvd24gb2JqZWN0LjwvcD4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBDbG9uZSB0aGUgZXJyb3IKICAgICAqIEVycm9yIGNhbiBub3QgYmUgY2xvbmUsIHNvIHRoaXMgbWV0aG9kIHJlc3VsdHMgaW4gZmF0YWwgZXJyb3IuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXJyb3IuY2xvbmUucGhwCiAgICAgKi8KICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogIjcuMCIsIHRvOiAiOC4wIildCiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY2xvbmUoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQ2xvbmUgdGhlIGVycm9yCiAgICAgKiBFcnJvciBjYW4gbm90IGJlIGNsb25lLCBzbyB0aGlzIG1ldGhvZCByZXN1bHRzIGluIGZhdGFsIGVycm9yLgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Vycm9yLmNsb25lLnBocAogICAgICovCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKCc4LjEnKV0KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jbG9uZSgpOiB2b2lkIHt9CgogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fd2FrZXVwKCk6IHZvaWQge30KfQoKY2xhc3MgVmFsdWVFcnJvciBleHRlbmRzIEVycm9yIHt9CgovKioKICogVGhlcmUgYXJlIHRocmVlIHNjZW5hcmlvcyB3aGVyZSBhIFR5cGVFcnJvciBtYXkgYmUgdGhyb3duLgogKiBUaGUgZmlyc3QgaXMgd2hlcmUgdGhlIGFyZ3VtZW50IHR5cGUgYmVpbmcgcGFzc2VkIHRvIGEgZnVuY3Rpb24gZG9lcyBub3QgbWF0Y2ggaXRzIGNvcnJlc3BvbmRpbmcgZGVjbGFyZWQKICogcGFyYW1ldGVyIHR5cGUuIFRoZSBzZWNvbmQgaXMgd2hlcmUgYSB2YWx1ZSBiZWluZyByZXR1cm5lZCBmcm9tIGEgZnVuY3Rpb24gZG9lcyBub3QgbWF0Y2ggdGhlIGRlY2xhcmVkIGZ1bmN0aW9uIHJldHVybiB0eXBlLiBUaGUgdGhpcmQgaXMgd2hlcmUgYW4KICogaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gYSBidWlsdC1pbiBQSFAgZnVuY3Rpb24gKHN0cmljdCBtb2RlIG9ubHkpLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnR5cGVlcnJvci5waHAKICogQHNpbmNlIDcuMAogKi8KY2xhc3MgVHlwZUVycm9yIGV4dGVuZHMgRXJyb3Ige30KCi8qKgogKiBQYXJzZUVycm9yIGlzIHRocm93biB3aGVuIGFuIGVycm9yIG9jY3VycyB3aGlsZSBwYXJzaW5nIFBIUCBjb2RlLCBzdWNoIGFzIHdoZW4ge0BzZWUgZXZhbCgpfSBpcyBjYWxsZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MucGFyc2VlcnJvci5waHAKICogQHNpbmNlIDcuMAogKi8KY2xhc3MgUGFyc2VFcnJvciBleHRlbmRzIENvbXBpbGVFcnJvciB7fQoKLyoqCiAqIEFyZ3VtZW50Q291bnRFcnJvciBpcyB0aHJvd24gd2hlbiB0b28gZmV3IGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIGEgdXNlcgogKiBkZWZpbmVkIHJvdXRpbmUuCiAqCiAqIEBzaW5jZSA3LjEKICogQHNlZSBodHRwczovL3BocC5uZXQvbWlncmF0aW9uNzEuaW5jb21wYXRpYmxlI21pZ3JhdGlvbjcxLmluY29tcGF0aWJsZS50b28tZmV3LWFyZ3VtZW50cy1leGNlcHRpb24KICovCmNsYXNzIEFyZ3VtZW50Q291bnRFcnJvciBleHRlbmRzIFR5cGVFcnJvciB7fQoKLyoqCiAqIEFyaXRobWV0aWNFcnJvciBpcyB0aHJvd24gd2hlbiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgcGVyZm9ybWluZyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucy4KICogSW4gUEhQIDcuMCwgdGhlc2UgZXJyb3JzIGluY2x1ZGUgYXR0ZW1wdGluZyB0byBwZXJmb3JtIGEgYml0c2hpZnQgYnkgYSBuZWdhdGl2ZSBhbW91bnQsCiAqIGFuZCBhbnkgY2FsbCB0byB7QHNlZSBpbnRkaXYoKX0gdGhhdCB3b3VsZCByZXN1bHQgaW4gYSB2YWx1ZSBvdXRzaWRlIHRoZSBwb3NzaWJsZSBib3VuZHMgb2YgYW4gaW50ZWdlci4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5hcml0aG1ldGljZXJyb3IucGhwCiAqIEBzaW5jZSA3LjAKICovCmNsYXNzIEFyaXRobWV0aWNFcnJvciBleHRlbmRzIEVycm9yIHt9CgovKioKICogQ2xhc3MgQ29tcGlsZUVycm9yCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmNvbXBpbGVlcnJvci5waHAKICogQHNpbmNlIDcuMwogKi8KY2xhc3MgQ29tcGlsZUVycm9yIGV4dGVuZHMgRXJyb3Ige30KCi8qKgogKiBEaXZpc2lvbkJ5WmVyb0Vycm9yIGlzIHRocm93biB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBkaXZpZGUgYSBudW1iZXIgYnkgemVyby4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kaXZpc2lvbmJ5emVyb2Vycm9yLnBocAogKiBAc2luY2UgNy4wCiAqLwpjbGFzcyBEaXZpc2lvbkJ5WmVyb0Vycm9yIGV4dGVuZHMgQXJpdGhtZXRpY0Vycm9yIHt9CgovKioKICogQHNpbmNlIDguMAogKi8KY2xhc3MgVW5oYW5kbGVkTWF0Y2hFcnJvciBleHRlbmRzIEVycm9yIHt9CgovKioKICogQHNpbmNlIDguNAogKi8KY2xhc3MgUmVxdWVzdFBhcnNlQm9keUV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQoKLyoqCiAqIEFuIEVycm9yIEV4Y2VwdGlvbi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5lcnJvcmV4Y2VwdGlvbi5waHAKICovCmNsYXNzIEVycm9yRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCnsKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldCiAgICBwcm90ZWN0ZWQgJHNldmVyaXR5OwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyB0aGUgZXhjZXB0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Vycm9yZXhjZXB0aW9uLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgW29wdGlvbmFsXSBUaGUgRXhjZXB0aW9uIG1lc3NhZ2UgdG8gdGhyb3cuCiAgICAgKiBAcGFyYW0gaW50ICRjb2RlIFtvcHRpb25hbF0gVGhlIEV4Y2VwdGlvbiBjb2RlLgogICAgICogQHBhcmFtIGludCAkc2V2ZXJpdHkgW29wdGlvbmFsXSBUaGUgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIGV4Y2VwdGlvbi4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFtvcHRpb25hbF0gVGhlIGZpbGVuYW1lIHdoZXJlIHRoZSBleGNlcHRpb24gaXMgdGhyb3duLgogICAgICogQHBhcmFtIGludCAkbGluZSBbb3B0aW9uYWxdIFRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgZXhjZXB0aW9uIGlzIHRocm93bi4KICAgICAqIEBwYXJhbSBFeGNlcHRpb24gJHByZXZpb3VzIFtvcHRpb25hbF0gVGhlIHByZXZpb3VzIGV4Y2VwdGlvbiB1c2VkIGZvciB0aGUgZXhjZXB0aW9uIGNoYWluaW5nLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG1lc3NhZ2UgPSAiIiwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkY29kZSA9IDAsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHNldmVyaXR5ID0gMSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRmaWxlbmFtZSA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fG51bGwnXSwgZGVmYXVsdDogJycpXSAkbGluZSA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnVGhyb3dhYmxlfG51bGwnXSwgZGVmYXVsdDogJ1Rocm93YWJsZScpXSAkcHJldmlvdXMgPSBudWxsCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBleGNlcHRpb24gc2V2ZXJpdHkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXJyb3JleGNlcHRpb24uZ2V0c2V2ZXJpdHkucGhwCiAgICAgKiBAcmV0dXJuIGludCB0aGUgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIGV4Y2VwdGlvbi4KICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldFNldmVyaXR5KCk6IGludCB7fQp9CgovKioKICogQ2xhc3MgdXNlZCB0byByZXByZXNlbnQgYW5vbnltb3VzIGZ1bmN0aW9ucy4KICogPHA+QW5vbnltb3VzIGZ1bmN0aW9ucywgaW1wbGVtZW50ZWQgaW4gUEhQIDUuMywgeWllbGQgb2JqZWN0cyBvZiB0aGlzIHR5cGUuCiAqIFRoaXMgZmFjdCB1c2VkIHRvIGJlIGNvbnNpZGVyZWQgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBidXQgaXQgY2FuIG5vdyBiZSByZWxpZWQgdXBvbi4KICogU3RhcnRpbmcgd2l0aCBQSFAgNS40LCB0aGlzIGNsYXNzIGhhcyBtZXRob2RzIHRoYXQgYWxsb3cgZnVydGhlciBjb250cm9sIG9mIHRoZSBhbm9ueW1vdXMgZnVuY3Rpb24gYWZ0ZXIgaXQgaGFzIGJlZW4gY3JlYXRlZC4KICogPHA+QmVzaWRlcyB0aGUgbWV0aG9kcyBsaXN0ZWQgaGVyZSwgdGhpcyBjbGFzcyBhbHNvIGhhcyBhbiBfX2ludm9rZSBtZXRob2QuCiAqIFRoaXMgaXMgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgY2xhc3NlcyB0aGF0IGltcGxlbWVudCBjYWxsaW5nIG1hZ2ljLCBhcyB0aGlzIG1ldGhvZCBpcyBub3QgdXNlZCBmb3IgY2FsbGluZyB0aGUgZnVuY3Rpb24uCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmNsb3N1cmUucGhwCiAqLwpmaW5hbCBjbGFzcyBDbG9zdXJlCnsKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgZXhpc3RzIG9ubHkgdG8gZGlzYWxsb3cgaW5zdGFudGlhdGlvbiBvZiB0aGUgQ2xvc3VyZSBjbGFzcy4KICAgICAqIE9iamVjdHMgb2YgdGhpcyBjbGFzcyBhcmUgY3JlYXRlZCBpbiB0aGUgZmFzaGlvbiBkZXNjcmliZWQgb24gdGhlIGFub255bW91cyBmdW5jdGlvbnMgcGFnZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Nsb3N1cmUuY29uc3RydWN0LnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIFRoaXMgaXMgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgY2xhc3NlcyB0aGF0IGltcGxlbWVudCBjYWxsaW5nIG1hZ2ljLAogICAgICogYXMgdGhpcyBtZXRob2QgaXMgbm90IHVzZWQgZm9yIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLgogICAgICogQHBhcmFtIG1peGVkIC4uLiRfIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmNsb3N1cmUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2ludm9rZSguLi4kXykge30KCiAgICAvKioKICAgICAqIER1cGxpY2F0ZXMgdGhlIGNsb3N1cmUgd2l0aCBhIG5ldyBib3VuZCBvYmplY3QgYW5kIGNsYXNzIHNjb3BlCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbG9zdXJlLmJpbmR0by5waHAKICAgICAqIEBwYXJhbSBvYmplY3R8bnVsbCAkbmV3VGhpcyBUaGUgb2JqZWN0IHRvIHdoaWNoIHRoZSBnaXZlbiBhbm9ueW1vdXMgZnVuY3Rpb24gc2hvdWxkIGJlIGJvdW5kLCBvciBOVUxMIGZvciB0aGUgY2xvc3VyZSB0byBiZSB1bmJvdW5kLgogICAgICogQHBhcmFtIG9iamVjdHxjbGFzcy1zdHJpbmd8bnVsbCAkbmV3U2NvcGUgVGhlIGNsYXNzIHNjb3BlIHRvIHdoaWNoIGFzc29jaWF0ZSB0aGUgY2xvc3VyZSBpcyB0byBiZSBhc3NvY2lhdGVkLCBvciAnc3RhdGljJyB0byBrZWVwIHRoZSBjdXJyZW50IG9uZS4KICAgICAqIElmIGFuIG9iamVjdCBpcyBnaXZlbiwgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KICAgICAqIFRoaXMgZGV0ZXJtaW5lcyB0aGUgdmlzaWJpbGl0eSBvZiBwcm90ZWN0ZWQgYW5kIHByaXZhdGUgbWV0aG9kcyBvZiB0aGUgYm91bmQgb2JqZWN0LgogICAgICogQHJldHVybiBDbG9zdXJlfG51bGwgUmV0dXJucyB0aGUgbmV3bHkgY3JlYXRlZCBDbG9zdXJlIG9iamVjdCBvciBudWxsIG9uIGZhaWx1cmUKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGJpbmRUbyg/b2JqZWN0ICRuZXdUaGlzLCBvYmplY3R8c3RyaW5nfG51bGwgJG5ld1Njb3BlID0gJ3N0YXRpYycpOiA/Q2xvc3VyZSB7fQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgaXMgYSBzdGF0aWMgdmVyc2lvbiBvZiBDbG9zdXJlOjpiaW5kVG8oKS4KICAgICAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IG1ldGhvZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Nsb3N1cmUuYmluZC5waHAKICAgICAqIEBwYXJhbSBDbG9zdXJlICRjbG9zdXJlIFRoZSBhbm9ueW1vdXMgZnVuY3Rpb25zIHRvIGJpbmQuCiAgICAgKiBAcGFyYW0gb2JqZWN0fG51bGwgJG5ld1RoaXMgVGhlIG9iamVjdCB0byB3aGljaCB0aGUgZ2l2ZW4gYW5vbnltb3VzIGZ1bmN0aW9uIHNob3VsZCBiZSBib3VuZCwgb3IgTlVMTCBmb3IgdGhlIGNsb3N1cmUgdG8gYmUgdW5ib3VuZC4KICAgICAqIEBwYXJhbSBvYmplY3R8Y2xhc3Mtc3RyaW5nfG51bGwgJG5ld1Njb3BlIFRoZSBjbGFzcyBzY29wZSB0byB3aGljaCBhc3NvY2lhdGUgdGhlIGNsb3N1cmUgaXMgdG8gYmUgYXNzb2NpYXRlZCwgb3IgJ3N0YXRpYycgdG8ga2VlcCB0aGUgY3VycmVudCBvbmUuCiAgICAgKiBJZiBhbiBvYmplY3QgaXMgZ2l2ZW4sIHRoZSB0eXBlIG9mIHRoZSBvYmplY3Qgd2lsbCBiZSB1c2VkIGluc3RlYWQuCiAgICAgKiBUaGlzIGRldGVybWluZXMgdGhlIHZpc2liaWxpdHkgb2YgcHJvdGVjdGVkIGFuZCBwcml2YXRlIG1ldGhvZHMgb2YgdGhlIGJvdW5kIG9iamVjdC4KICAgICAqIEByZXR1cm4gQ2xvc3VyZXxudWxsIFJldHVybnMgdGhlIG5ld2x5IGNyZWF0ZWQgQ2xvc3VyZSBvYmplY3Qgb3IgbnVsbCBvbiBmYWlsdXJlCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmluZChDbG9zdXJlICRjbG9zdXJlLCA/b2JqZWN0ICRuZXdUaGlzLCBvYmplY3R8c3RyaW5nfG51bGwgJG5ld1Njb3BlID0gJ3N0YXRpYycpOiA/Q2xvc3VyZSB7fQoKICAgIC8qKgogICAgICogVGVtcG9yYXJpbHkgYmluZHMgdGhlIGNsb3N1cmUgdG8gbmV3dGhpcywgYW5kIGNhbGxzIGl0IHdpdGggYW55IGdpdmVuIHBhcmFtZXRlcnMuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Nsb3N1cmUuY2FsbC5waHAKICAgICAqIEBwYXJhbSBvYmplY3QgJG5ld1RoaXMgVGhlIG9iamVjdCB0byBiaW5kIHRoZSBjbG9zdXJlIHRvIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNhbGwuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGFyZ3MgW29wdGlvbmFsXSBaZXJvIG9yIG1vcmUgcGFyYW1ldGVycywgd2hpY2ggd2lsbCBiZSBnaXZlbiBhcyBwYXJhbWV0ZXJzIHRvIHRoZSBjbG9zdXJlLgogICAgICogQHJldHVybiBtaXhlZAogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FsbChvYmplY3QgJG5ld1RoaXMsIG1peGVkIC4uLiRhcmdzKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gQ2xvc3VyZQogICAgICogQHNpbmNlIDcuMQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21DYWxsYWJsZShjYWxsYWJsZSAkY2FsbGJhY2spOiBDbG9zdXJlIHt9Cn0KCi8qKgogKiBDbGFzc2VzIGltcGxlbWVudGluZyA8Yj5Db3VudGFibGU8L2I+IGNhbiBiZSB1c2VkIHdpdGggdGhlCiAqIDxiPmNvdW50PC9iPiBmdW5jdGlvbi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5jb3VudGFibGUucGhwCiAqLwppbnRlcmZhY2UgQ291bnRhYmxlCnsKICAgIC8qKgogICAgICogQ291bnQgZWxlbWVudHMgb2YgYW4gb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NvdW50YWJsZS5jb3VudC5waHAKICAgICAqIEByZXR1cm4gaW50PDAsbWF4PiBUaGUgY3VzdG9tIGNvdW50IGFzIGFuIGludGVnZXIuCiAgICAgKiA8cD4KICAgICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgY2FzdCB0byBhbiBpbnRlZ2VyLgogICAgICogPC9wPgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50Owp9CgovKioKICogV2VhayByZWZlcmVuY2VzIGFsbG93IHRoZSBwcm9ncmFtbWVyIHRvIHJldGFpbiBhIHJlZmVyZW5jZSB0byBhbgogKiBvYmplY3Qgd2hpY2ggZG9lcyBub3QgcHJldmVudCB0aGUgb2JqZWN0IGZyb20gYmVpbmcgZGVzdHJveWVkLgogKiBUaGV5IGFyZSB1c2VmdWwgZm9yIGltcGxlbWVudGluZyBjYWNoZSBsaWtlIHN0cnVjdHVyZXMuCiAqIEB0ZW1wbGF0ZSBUIG9mIG9iamVjdAogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy53ZWFrcmVmZXJlbmNlLnBocAogKiBAc2luY2UgNy40CiAqLwpmaW5hbCBjbGFzcyBXZWFrUmVmZXJlbmNlCnsKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgZXhpc3RzIG9ubHkgdG8gZGlzYWxsb3cgaW5zdGFudGlhdGlvbiBvZiB0aGUgV2Vha1JlZmVyZW5jZQogICAgICogY2xhc3MuIFdlYWsgcmVmZXJlbmNlcyBhcmUgdG8gYmUgaW5zdGFudGlhdGVkIHdpdGggdGhlIGZhY3RvcnkgbWV0aG9kCiAgICAgKiA8Yj5XZWFrUmVmZXJlbmNlOjpjcmVhdGUoKTwvYj4uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgd2VhayByZWZlcmVuY2UuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi93ZWFrcmVmZXJlbmNlLmNyZWF0ZS5waHAKICAgICAqIEB0ZW1wbGF0ZSBUSW4gb2Ygb2JqZWN0CiAgICAgKiBAcGFyYW0gVEluICRvYmplY3QgQW55IG9iamVjdC4KICAgICAqIEByZXR1cm4gV2Vha1JlZmVyZW5jZTxUSW4+IFRoZSBmcmVzaGx5IGluc3RhbnRpYXRlZCBvYmplY3QuCiAgICAgKiBAc2luY2UgNy40CiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKG9iamVjdCAkb2JqZWN0KTogV2Vha1JlZmVyZW5jZSB7fQoKICAgIC8qKgogICAgICogR2V0cyBhIHdlYWtseSByZWZlcmVuY2VkIG9iamVjdC4gSWYgdGhlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuCiAgICAgKiBkZXN0cm95ZWQsIE5VTEwgaXMgcmV0dXJuZWQuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi93ZWFrcmVmZXJlbmNlLmdldC5waHAKICAgICAqIEByZXR1cm4gVHxudWxsCiAgICAgKiBAc2luY2UgNy40CiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoKTogP29iamVjdCB7fQp9CgovKioKICogV2VhayBtYXBzIGFsbG93IGNyZWF0aW5nIGEgbWFwIGZyb20gb2JqZWN0cyB0byBhcmJpdHJhcnkgdmFsdWVzCiAqIChzaW1pbGFyIHRvIFNwbE9iamVjdFN0b3JhZ2UpIHdpdGhvdXQgcHJldmVudGluZyB0aGUgb2JqZWN0cyB0aGF0IGFyZSB1c2VkCiAqIGFzIGtleXMgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZC4gSWYgYW4gb2JqZWN0IGtleSBpcyBnYXJiYWdlIGNvbGxlY3RlZCwKICogaXQgd2lsbCBzaW1wbHkgYmUgcmVtb3ZlZCBmcm9tIHRoZSBtYXAuCiAqCiAqIEBzaW5jZSA4LjAKICoKICogQHRlbXBsYXRlIFRLZXkgb2Ygb2JqZWN0CiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICogQHRlbXBsYXRlLWltcGxlbWVudHMgSXRlcmF0b3JBZ2dyZWdhdGU8VEtleSwgVFZhbHVlPgogKi8KZmluYWwgY2xhc3MgV2Vha01hcCBpbXBsZW1lbnRzIEFycmF5QWNjZXNzLCBDb3VudGFibGUsIEl0ZXJhdG9yQWdncmVnYXRlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB7QHNlZSB0cnVlfSBpZiB0aGUgdmFsdWUgZm9yIHRoZSBvYmplY3QgaXMgY29udGFpbmVkIGluCiAgICAgKiB0aGUge0BzZWUgV2Vha01hcH0gYW5kIHtAc2VlIGZhbHNlfSBpbnN0ZWFkLgogICAgICoKICAgICAqIEBwYXJhbSBUS2V5ICRvYmplY3QgQW55IG9iamVjdAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG9iamVjdCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGV4aXN0c2luZyB2YWx1ZSBieSBhbiBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIFRLZXkgJG9iamVjdCBBbnkgb2JqZWN0CiAgICAgKiBAcmV0dXJuIFRWYWx1ZSBWYWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSBvYmplY3QKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgkb2JqZWN0KTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFNldHMgYSBuZXcgdmFsdWUgZm9yIGFuIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gVEtleSAkb2JqZWN0IEFueSBvYmplY3QKICAgICAqIEBwYXJhbSBUVmFsdWUgJHZhbHVlIEFueSB2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9iamVjdCwgbWl4ZWQgJHZhbHVlKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogRm9yY2UgcmVtb3ZlcyBhbiBvYmplY3QgdmFsdWUgZnJvbSB0aGUge0BzZWUgV2Vha01hcH0gaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtIFRLZXkgJG9iamVjdCBBbnkgb2JqZWN0CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRvYmplY3QpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIGluIHRoZSAiW29iamVjdCA9PiBtaXhlZF0iIGZvcm1hdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yPFRLZXksIFRWYWx1ZT4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCk6IEl0ZXJhdG9yIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHtAc2VlIFdlYWtNYXB9IGluc3RhbmNlLgogICAgICoKICAgICAqIEByZXR1cm4gaW50PDAsbWF4PgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50IHt9Cn0KCi8qKgogKiBTdHJpbmdhYmxlIGludGVyZmFjZSBkZW5vdGVzIGEgY2xhc3MgYXMgaGF2aW5nIGEgX190b1N0cmluZygpIG1ldGhvZC4KICoKICogQHNpbmNlIDguMAogKi8KaW50ZXJmYWNlIFN0cmluZ2FibGUKewogICAgLyoqCiAgICAgKiBNYWdpYyBtZXRob2Qge0BzZWUgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2Uub29wNS5tYWdpYy5waHAjb2JqZWN0LnRvc3RyaW5nfQogICAgICogYWxsb3dzIGEgY2xhc3MgdG8gZGVjaWRlIGhvdyBpdCB3aWxsIHJlYWN0IHdoZW4gaXQgaXMgdHJlYXRlZCBsaWtlIGEgc3RyaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgdGhhdAogICAgICogaW1wbGVtZW50cyB0aGlzIGludGVyZmFjZSAoYW5kL29yICJfX3RvU3RyaW5nIiBtYWdpYyBtZXRob2QpLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmc7Cn0KCi8qKgogKiBAc2luY2UgOC4wCiAqLwojW0F0dHJpYnV0ZShBdHRyaWJ1dGU6OlRBUkdFVF9DTEFTUyldCmZpbmFsIGNsYXNzIEF0dHJpYnV0ZQp7CiAgICBwdWJsaWMgaW50ICRmbGFnczsKCiAgICAvKioKICAgICAqIE1hcmtzIHRoYXQgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGlzIGFsbG93ZWQgb25seSBpbiBjbGFzc2VzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVEFSR0VUX0NMQVNTID0gMTsKCiAgICAvKioKICAgICAqIE1hcmtzIHRoYXQgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGlzIGFsbG93ZWQgb25seSBpbiBmdW5jdGlvbnMuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUQVJHRVRfRlVOQ1RJT04gPSAyOwoKICAgIC8qKgogICAgICogTWFya3MgdGhhdCBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gaXMgYWxsb3dlZCBvbmx5IGluIGNsYXNzIG1ldGhvZHMuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUQVJHRVRfTUVUSE9EID0gNDsKCiAgICAvKioKICAgICAqIE1hcmtzIHRoYXQgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGlzIGFsbG93ZWQgb25seSBpbiBjbGFzcyBwcm9wZXJ0aWVzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVEFSR0VUX1BST1BFUlRZID0gODsKCiAgICAvKioKICAgICAqIE1hcmtzIHRoYXQgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGlzIGFsbG93ZWQgb25seSBpbiBjbGFzcyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUQVJHRVRfQ0xBU1NfQ09OU1RBTlQgPSAxNjsKCiAgICAvKioKICAgICAqIE1hcmtzIHRoYXQgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGlzIGFsbG93ZWQgb25seSBpbiBmdW5jdGlvbiBvciBtZXRob2QgcGFyYW1ldGVycy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFRBUkdFVF9QQVJBTUVURVIgPSAzMjsKCiAgICAvKioKICAgICAqIE1hcmtzIHRoYXQgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGlzIGFsbG93ZWQgYW55d2hlcmUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUQVJHRVRfQUxMID0gNjM7CgogICAgLyoqCiAgICAgKiBOb3RlcyB0aGF0IGFuIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBpbiB0aGUgc2FtZSBwbGFjZSBpcwogICAgICogYWxsb3dlZCBtdWx0aXBsZSB0aW1lcy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElTX1JFUEVBVEFCTEUgPSA2NDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIEEgdmFsdWUgaW4gdGhlIGZvcm0gb2YgYSBiaXRtYXNrIGluZGljYXRpbmcgdGhlIHBsYWNlcwogICAgICogd2hlcmUgYXR0cmlidXRlcyBjYW4gYmUgZGVmaW5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCNbRXhwZWN0ZWRWYWx1ZXMoZmxhZ3NGcm9tQ2xhc3M6IEF0dHJpYnV0ZTo6Y2xhc3MpXSBpbnQgJGZsYWdzID0gc2VsZjo6VEFSR0VUX0FMTCkge30KfQoKLyoqCiAqIEBzaW5jZSA4LjAKICovCmZpbmFsIGNsYXNzIEludGVybmFsSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcgp7CiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpOiBtaXhlZCB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCk6IHZvaWQge30KCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCk6IG1peGVkIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkKCk6IGJvb2wge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQge30KfQoKLyoqCiAqIEBzaW5jZSA4LjEKICovCmludGVyZmFjZSBVbml0RW51bQp7CiAgICBwdWJsaWMgcmVhZG9ubHkgc3RyaW5nICRuYW1lOwoKICAgIC8qKgogICAgICogQHJldHVybiBzdGF0aWNbXQogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc2VzKCk6IGFycmF5Owp9CgovKioKICogQHNpbmNlIDguMQogKi8KaW50ZXJmYWNlIEJhY2tlZEVudW0gZXh0ZW5kcyBVbml0RW51bQp7CiAgICBwdWJsaWMgcmVhZG9ubHkgaW50fHN0cmluZyAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBUcmFuc2xhdGVzIGEgc3RyaW5nIG9yIGludCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIDxjb2RlPkVudW08L2NvZGU+CiAgICAgKiBjYXNlLCBpZiBhbnkuIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIGNhc2UgZGVmaW5lZCwgaXQgd2lsbCB0aHJvdyBhCiAgICAgKiA8Y29kZT5WYWx1ZUVycm9yPC9jb2RlPi4KICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICR2YWx1ZQogICAgICogQHRocm93cyBWYWx1ZUVycm9yCiAgICAgKiBAdGhyb3dzIFR5cGVFcnJvcgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2JhY2tlZGVudW0uZnJvbS5waHAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tKGludHxzdHJpbmcgJHZhbHVlKTogc3RhdGljOwoKICAgIC8qKgogICAgICogVHJhbnNsYXRlcyBhIHN0cmluZyBvciBpbnQgaW50byB0aGUgY29ycmVzcG9uZGluZyA8Y29kZT5FbnVtPC9jb2RlPgogICAgICogY2FzZSwgaWYgYW55LiBJZiB0aGVyZSBpcyBubyBtYXRjaGluZyBjYXNlIGRlZmluZWQsIGl0IHdpbGwgcmV0dXJuIG51bGwuCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkdmFsdWUKICAgICAqIEByZXR1cm4gc3RhdGljfG51bGwgQSBjYXNlIGluc3RhbmNlIG9mIHRoaXMgZW51bWVyYXRpb24sIG9yIG51bGwgaWYgbm90CiAgICAgKiBmb3VuZC4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2JhY2tlZGVudW0udHJ5ZnJvbS5waHAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0cnlGcm9tKGludHxzdHJpbmcgJHZhbHVlKTogP3N0YXRpYzsKfQoKLyoqCiAqIEBzaW5jZSA4LjEKICogQGludGVybmFsCiAqCiAqIEludGVybmFsIGludGVyZmFjZSB0byBlbnN1cmUgcHJlY2lzZSB0eXBlIGluZmVyZW5jZQogKi8KaW50ZXJmYWNlIEludEJhY2tlZEVudW0gZXh0ZW5kcyBCYWNrZWRFbnVtCnsKICAgIHB1YmxpYyByZWFkb25seSBpbnQgJHZhbHVlOwoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdmFsdWUKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbShpbnQgJHZhbHVlKTogc3RhdGljOwoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdmFsdWUKICAgICAqIEByZXR1cm4gc3RhdGljfG51bGwKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0cnlGcm9tKGludCAkdmFsdWUpOiA/c3RhdGljOwp9CgovKioKICogQHNpbmNlIDguMQogKiBAaW50ZXJuYWwKICoKICogSW50ZXJuYWwgaW50ZXJmYWNlIHRvIGVuc3VyZSBwcmVjaXNlIHR5cGUgaW5mZXJlbmNlCiAqLwppbnRlcmZhY2UgU3RyaW5nQmFja2VkRW51bSBleHRlbmRzIEJhY2tlZEVudW0KewogICAgcHVibGljIHJlYWRvbmx5IHN0cmluZyAkdmFsdWU7CgogICAgI1tQdXJlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tKHN0cmluZyAkdmFsdWUpOiBzdGF0aWM7CgogICAgI1tQdXJlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0cnlGcm9tKHN0cmluZyAkdmFsdWUpOiA/c3RhdGljOwp9CgovKioKICogQHNpbmNlIDguMQogKgogKiBAdGVtcGxhdGUgVFN0YXJ0CiAqIEB0ZW1wbGF0ZSBUUmVzdW1lCiAqIEB0ZW1wbGF0ZSBUUmV0dXJuCiAqIEB0ZW1wbGF0ZSBUU3VzcGVuZAogKi8KZmluYWwgY2xhc3MgRmliZXIKewogICAgLyoqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIEZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIHN0YXJ0aW5nIHRoZSBmaWJlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGNhbGxhYmxlICRjYWxsYmFjaykge30KCiAgICAvKioKICAgICAqIFN0YXJ0cyBleGVjdXRpb24gb2YgdGhlIGZpYmVyLiBSZXR1cm5zIHdoZW4gdGhlIGZpYmVyIHN1c3BlbmRzIG9yIHRlcm1pbmF0ZXMuCiAgICAgKgogICAgICogQHBhcmFtIFRTdGFydCAuLi4kYXJncyBBcmd1bWVudHMgcGFzc2VkIHRvIGZpYmVyIGZ1bmN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gVFN1c3BlbmR8bnVsbCBWYWx1ZSBmcm9tIHRoZSBmaXJzdCBzdXNwZW5zaW9uIHBvaW50IG9yIE5VTEwgaWYgdGhlIGZpYmVyIHJldHVybnMuCiAgICAgKgogICAgICogQHRocm93cyBGaWJlckVycm9yIElmIHRoZSBmaWJlciBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQuCiAgICAgKiBAdGhyb3dzIFRocm93YWJsZSBJZiB0aGUgZmliZXIgY2FsbGFibGUgdGhyb3dzIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0YXJ0KG1peGVkIC4uLiRhcmdzKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJlc3VtZXMgdGhlIGZpYmVyLCByZXR1cm5pbmcgdGhlIGdpdmVuIHZhbHVlIGZyb20ge0BzZWUgRmliZXI6OnN1c3BlbmQoKX0uCiAgICAgKiBSZXR1cm5zIHdoZW4gdGhlIGZpYmVyIHN1c3BlbmRzIG9yIHRlcm1pbmF0ZXMuCiAgICAgKgogICAgICogQHBhcmFtIFRSZXN1bWUgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBUU3VzcGVuZHxudWxsIFZhbHVlIGZyb20gdGhlIG5leHQgc3VzcGVuc2lvbiBwb2ludCBvciBOVUxMIGlmIHRoZSBmaWJlciByZXR1cm5zLgogICAgICoKICAgICAqIEB0aHJvd3MgRmliZXJFcnJvciBJZiB0aGUgZmliZXIgaGFzIG5vdCBzdGFydGVkLCBpcyBydW5uaW5nLCBvciBoYXMgdGVybWluYXRlZC4KICAgICAqIEB0aHJvd3MgVGhyb3dhYmxlIElmIHRoZSBmaWJlciBjYWxsYWJsZSB0aHJvd3MgYW4gdW5jYXVnaHQgZXhjZXB0aW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzdW1lKG1peGVkICR2YWx1ZSA9IG51bGwpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogVGhyb3dzIHRoZSBnaXZlbiBleGNlcHRpb24gaW50byB0aGUgZmliZXIgZnJvbSB7QHNlZSBGaWJlcjo6c3VzcGVuZCgpfS4KICAgICAqIFJldHVybnMgd2hlbiB0aGUgZmliZXIgc3VzcGVuZHMgb3IgdGVybWluYXRlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gVGhyb3dhYmxlICRleGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFRTdXNwZW5kfG51bGwgVmFsdWUgZnJvbSB0aGUgbmV4dCBzdXNwZW5zaW9uIHBvaW50IG9yIE5VTEwgaWYgdGhlIGZpYmVyIHJldHVybnMuCiAgICAgKgogICAgICogQHRocm93cyBGaWJlckVycm9yIElmIHRoZSBmaWJlciBoYXMgbm90IHN0YXJ0ZWQsIGlzIHJ1bm5pbmcsIG9yIGhhcyB0ZXJtaW5hdGVkLgogICAgICogQHRocm93cyBUaHJvd2FibGUgSWYgdGhlIGZpYmVyIGNhbGxhYmxlIHRocm93cyBhbiB1bmNhdWdodCBleGNlcHRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aHJvdyhUaHJvd2FibGUgJGV4Y2VwdGlvbik6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wgVHJ1ZSBpZiB0aGUgZmliZXIgaGFzIGJlZW4gc3RhcnRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzU3RhcnRlZCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wgVHJ1ZSBpZiB0aGUgZmliZXIgaXMgc3VzcGVuZGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTdXNwZW5kZWQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sIFRydWUgaWYgdGhlIGZpYmVyIGlzIGN1cnJlbnRseSBydW5uaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSdW5uaW5nKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBmaWJlciBoYXMgY29tcGxldGVkIGV4ZWN1dGlvbiAocmV0dXJuZWQgb3IgdGhyZXcpLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNUZXJtaW5hdGVkKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gVFJldHVybiBSZXR1cm4gdmFsdWUgb2YgdGhlIGZpYmVyIGNhbGxiYWNrLiBOVUxMIGlzIHJldHVybmVkIGlmIHRoZSBmaWJlciBkb2VzIG5vdCBoYXZlIGEgcmV0dXJuIHN0YXRlbWVudC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEZpYmVyRXJyb3IgSWYgdGhlIGZpYmVyIGhhcyBub3QgdGVybWluYXRlZCBvciB0aGUgZmliZXIgdGhyZXcgYW4gZXhjZXB0aW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmV0dXJuKCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEZpYmVyfG51bGwgUmV0dXJucyB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBmaWJlciBpbnN0YW5jZSBvciBOVUxMIGlmIGluIHttYWlufS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDdXJyZW50KCk6ID9GaWJlciB7fQoKICAgIC8qKgogICAgICogU3VzcGVuZCBleGVjdXRpb24gb2YgdGhlIGZpYmVyLiBUaGUgZmliZXIgbWF5IGJlIHJlc3VtZWQgd2l0aCB7QHNlZSBGaWJlcjo6cmVzdW1lKCl9IG9yIHtAc2VlIEZpYmVyOjp0aHJvdygpfS4KICAgICAqCiAgICAgKiBDYW5ub3QgYmUgY2FsbGVkIGZyb20ge21haW59LgogICAgICoKICAgICAqIEBwYXJhbSBUU3VzcGVuZCAkdmFsdWUgVmFsdWUgdG8gcmV0dXJuIGZyb20ge0BzZWUgRmliZXI6OnJlc3VtZSgpfSBvciB7QHNlZSBGaWJlcjo6dGhyb3coKX0uCiAgICAgKgogICAgICogQHJldHVybiBUUmVzdW1lIFZhbHVlIHByb3ZpZGVkIHRvIHtAc2VlIEZpYmVyOjpyZXN1bWUoKX0uCiAgICAgKgogICAgICogQHRocm93cyBGaWJlckVycm9yIFRocm93biBpZiBub3Qgd2l0aGluIGEgZmliZXIgKGkuZS4sIGlmIGNhbGxlZCBmcm9tIHttYWlufSkuCiAgICAgKiBAdGhyb3dzIFRocm93YWJsZSBFeGNlcHRpb24gcHJvdmlkZWQgdG8ge0BzZWUgRmliZXI6OnRocm93KCl9LgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1c3BlbmQobWl4ZWQgJHZhbHVlID0gbnVsbCk6IG1peGVkIHt9Cn0KCi8qKgogKiBAc2luY2UgOC4xCiAqLwpmaW5hbCBjbGFzcyBGaWJlckVycm9yIGV4dGVuZHMgRXJyb3IKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KfQoKLyoqCiAqIEBzaW5jZSA4LjEKICovCiNbQXR0cmlidXRlKEF0dHJpYnV0ZTo6VEFSR0VUX01FVEhPRCldCmZpbmFsIGNsYXNzIFJldHVyblR5cGVXaWxsQ2hhbmdlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9Cn0KCi8qKgogKiBAc2luY2UgOC4yCiAqLwojW0F0dHJpYnV0ZShBdHRyaWJ1dGU6OlRBUkdFVF9DTEFTUyldCmZpbmFsIGNsYXNzIEFsbG93RHluYW1pY1Byb3BlcnRpZXMKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KfQoKLyoqCiAqIEBzaW5jZSA4LjIKICovCiNbQXR0cmlidXRlKEF0dHJpYnV0ZTo6VEFSR0VUX1BBUkFNRVRFUildCmZpbmFsIGNsYXNzIFNlbnNpdGl2ZVBhcmFtZXRlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQp9CgovKioKICogQHNpbmNlIDguMgogKi8KZmluYWwgY2xhc3MgU2Vuc2l0aXZlUGFyYW1ldGVyVmFsdWUKewogICAgcHJpdmF0ZSByZWFkb25seSBtaXhlZCAkdmFsdWU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KG1peGVkICR2YWx1ZSkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWUoKTogbWl4ZWQge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZWJ1Z0luZm8oKTogYXJyYXkge30KfQoKLyoqCiAqIEBzaW5jZSA4LjMKICovCiNbQXR0cmlidXRlKEF0dHJpYnV0ZTo6VEFSR0VUX01FVEhPRCldCmZpbmFsIGNsYXNzIE92ZXJyaWRlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9Cn0KCi8qKgogKiBAc2luY2UgOC40CiAqLwojW0F0dHJpYnV0ZShBdHRyaWJ1dGU6OlRBUkdFVF9NRVRIT0R8QXR0cmlidXRlOjpUQVJHRVRfRlVOQ1RJT058QXR0cmlidXRlOjpUQVJHRVRfQ0xBU1NfQ09OU1RBTlQpXQpmaW5hbCBjbGFzcyBEZXByZWNhdGVkCnsKICAgIHB1YmxpYyByZWFkb25seSA/c3RyaW5nICRtZXNzYWdlOwogICAgcHVibGljIHJlYWRvbmx5ID9zdHJpbmcgJHNpbmNlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/c3RyaW5nICRtZXNzYWdlID0gbnVsbCwgP3N0cmluZyAkc2luY2UgPSBudWxsKSB7fQp9Cjw/cGhwCgovLyBTdGFydCBvZiBDb3JlIHYuNS4zLjYtMTN1YnVudHUzLjIKCi8qKgogKiBGYXRhbCBydW4tdGltZSBlcnJvcnMuIFRoZXNlIGluZGljYXRlIGVycm9ycyB0aGF0IGNhbiBub3QgYmUKICogcmVjb3ZlcmVkIGZyb20sIHN1Y2ggYXMgYSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9ibGVtLgogKiBFeGVjdXRpb24gb2YgdGhlIHNjcmlwdCBpcyBoYWx0ZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXJyb3JmdW5jLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRV9FUlJPUicsIDEpOwoKLyoqCiAqIENhdGNoYWJsZSBmYXRhbCBlcnJvci4gSXQgaW5kaWNhdGVzIHRoYXQgYSBwcm9iYWJseSBkYW5nZXJvdXMgZXJyb3IKICogb2NjdXJyZWQsIGJ1dCBkaWQgbm90IGxlYXZlIHRoZSBFbmdpbmUgaW4gYW4gdW5zdGFibGUgc3RhdGUuIElmIHRoZSBlcnJvcgogKiBpcyBub3QgY2F1Z2h0IGJ5IGEgdXNlciBkZWZpbmVkIGhhbmRsZSAoc2VlIGFsc28KICogPGI+c2V0X2Vycm9yX2hhbmRsZXI8L2I+KSwgdGhlIGFwcGxpY2F0aW9uIGFib3J0cyBhcyBpdAogKiB3YXMgYW4gPGI+RV9FUlJPUjwvYj4uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXJyb3JmdW5jLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRV9SRUNPVkVSQUJMRV9FUlJPUicsIDQwOTYpOwoKLyoqCiAqIFJ1bi10aW1lIHdhcm5pbmdzIChub24tZmF0YWwgZXJyb3JzKS4gRXhlY3V0aW9uIG9mIHRoZSBzY3JpcHQgaXMgbm90CiAqIGhhbHRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9lcnJvcmZ1bmMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdFX1dBUk5JTkcnLCAyKTsKCi8qKgogKiBDb21waWxlLXRpbWUgcGFyc2UgZXJyb3JzLiBQYXJzZSBlcnJvcnMgc2hvdWxkIG9ubHkgYmUgZ2VuZXJhdGVkIGJ5CiAqIHRoZSBwYXJzZXIuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXJyb3JmdW5jLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRV9QQVJTRScsIDQpOwoKLyoqCiAqIFJ1bi10aW1lIG5vdGljZXMuIEluZGljYXRlIHRoYXQgdGhlIHNjcmlwdCBlbmNvdW50ZXJlZCBzb21ldGhpbmcgdGhhdAogKiBjb3VsZCBpbmRpY2F0ZSBhbiBlcnJvciwgYnV0IGNvdWxkIGFsc28gaGFwcGVuIGluIHRoZSBub3JtYWwgY291cnNlIG9mCiAqIHJ1bm5pbmcgYSBzY3JpcHQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXJyb3JmdW5jLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRV9OT1RJQ0UnLCA4KTsKCi8qKgogKiBFbmFibGUgdG8gaGF2ZSBQSFAgc3VnZ2VzdCBjaGFuZ2VzCiAqIHRvIHlvdXIgY29kZSB3aGljaCB3aWxsIGVuc3VyZSB0aGUgYmVzdCBpbnRlcm9wZXJhYmlsaXR5CiAqIGFuZCBmb3J3YXJkIGNvbXBhdGliaWxpdHkgb2YgeW91ciBjb2RlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Vycm9yZnVuYy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0VfU1RSSUNUJywgMjA0OCk7CgovKioKICogUnVuLXRpbWUgbm90aWNlcy4gRW5hYmxlIHRoaXMgdG8gcmVjZWl2ZSB3YXJuaW5ncyBhYm91dCBjb2RlCiAqIHRoYXQgd2lsbCBub3Qgd29yayBpbiBmdXR1cmUgdmVyc2lvbnMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXJyb3JmdW5jLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRV9ERVBSRUNBVEVEJywgODE5Mik7CgovKioKICogRmF0YWwgZXJyb3JzIHRoYXQgb2NjdXIgZHVyaW5nIFBIUCdzIGluaXRpYWwgc3RhcnR1cC4gVGhpcyBpcyBsaWtlIGFuCiAqIDxiPkVfRVJST1I8L2I+LCBleGNlcHQgaXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBjb3JlIG9mIFBIUC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9lcnJvcmZ1bmMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdFX0NPUkVfRVJST1InLCAxNik7CgovKioKICogV2FybmluZ3MgKG5vbi1mYXRhbCBlcnJvcnMpIHRoYXQgb2NjdXIgZHVyaW5nIFBIUCdzIGluaXRpYWwgc3RhcnR1cC4KICogVGhpcyBpcyBsaWtlIGFuIDxiPkVfV0FSTklORzwvYj4sIGV4Y2VwdCBpdCBpcyBnZW5lcmF0ZWQKICogYnkgdGhlIGNvcmUgb2YgUEhQLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Vycm9yZnVuYy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0VfQ09SRV9XQVJOSU5HJywgMzIpOwoKLyoqCiAqIEZhdGFsIGNvbXBpbGUtdGltZSBlcnJvcnMuIFRoaXMgaXMgbGlrZSBhbiA8Yj5FX0VSUk9SPC9iPiwKICogZXhjZXB0IGl0IGlzIGdlbmVyYXRlZCBieSB0aGUgWmVuZCBTY3JpcHRpbmcgRW5naW5lLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Vycm9yZnVuYy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0VfQ09NUElMRV9FUlJPUicsIDY0KTsKCi8qKgogKiBDb21waWxlLXRpbWUgd2FybmluZ3MgKG5vbi1mYXRhbCBlcnJvcnMpLiBUaGlzIGlzIGxpa2UgYW4KICogPGI+RV9XQVJOSU5HPC9iPiwgZXhjZXB0IGl0IGlzIGdlbmVyYXRlZCBieSB0aGUgWmVuZAogKiBTY3JpcHRpbmcgRW5naW5lLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Vycm9yZnVuYy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0VfQ09NUElMRV9XQVJOSU5HJywgMTI4KTsKCi8qKgogKiBVc2VyLWdlbmVyYXRlZCBlcnJvciBtZXNzYWdlLiBUaGlzIGlzIGxpa2UgYW4KICogPGI+RV9FUlJPUjwvYj4sIGV4Y2VwdCBpdCBpcyBnZW5lcmF0ZWQgaW4gUEhQIGNvZGUgYnkKICogdXNpbmcgdGhlIFBIUCBmdW5jdGlvbiA8Yj50cmlnZ2VyX2Vycm9yPC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9lcnJvcmZ1bmMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdFX1VTRVJfRVJST1InLCAyNTYpOwoKLyoqCiAqIFVzZXItZ2VuZXJhdGVkIHdhcm5pbmcgbWVzc2FnZS4gVGhpcyBpcyBsaWtlIGFuCiAqIDxiPkVfV0FSTklORzwvYj4sIGV4Y2VwdCBpdCBpcyBnZW5lcmF0ZWQgaW4gUEhQIGNvZGUgYnkKICogdXNpbmcgdGhlIFBIUCBmdW5jdGlvbiA8Yj50cmlnZ2VyX2Vycm9yPC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9lcnJvcmZ1bmMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdFX1VTRVJfV0FSTklORycsIDUxMik7CgovKioKICogVXNlci1nZW5lcmF0ZWQgbm90aWNlIG1lc3NhZ2UuIFRoaXMgaXMgbGlrZSBhbgogKiA8Yj5FX05PVElDRTwvYj4sIGV4Y2VwdCBpdCBpcyBnZW5lcmF0ZWQgaW4gUEhQIGNvZGUgYnkKICogdXNpbmcgdGhlIFBIUCBmdW5jdGlvbiA8Yj50cmlnZ2VyX2Vycm9yPC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9lcnJvcmZ1bmMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdFX1VTRVJfTk9USUNFJywgMTAyNCk7CgovKioKICogVXNlci1nZW5lcmF0ZWQgd2FybmluZyBtZXNzYWdlLiBUaGlzIGlzIGxpa2UgYW4KICogPGI+RV9ERVBSRUNBVEVEPC9iPiwgZXhjZXB0IGl0IGlzIGdlbmVyYXRlZCBpbiBQSFAgY29kZSBieQogKiB1c2luZyB0aGUgUEhQIGZ1bmN0aW9uIDxiPnRyaWdnZXJfZXJyb3I8L2I+LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Vycm9yZnVuYy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0VfVVNFUl9ERVBSRUNBVEVEJywgMTYzODQpOwoKLyoqCiAqIEFsbCBlcnJvcnMgYW5kIHdhcm5pbmdzLCBhcyBzdXBwb3J0ZWQsIGV4Y2VwdCBvZiBsZXZlbAogKiA8Yj5FX1NUUklDVDwvYj4gcHJpb3IgdG8gUEhQIDUuNC4wLgogKiBWYWx1ZSBvZiA8Yj5FX0FMTDwvYj4gaXMgMzI3Njcgc2luY2UgUEhQIDUuNC54LAogKiAzMDcxOSBpbiBQSFAgNS4zLngsIDYxNDMgaW4gUEhQIDUuMi54LCAyMDQ3IHByZXZpb3VzbHkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9lcnJvcmZ1bmMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdFX0FMTCcsIDMyNzY3KTsKZGVmaW5lKCdERUJVR19CQUNLVFJBQ0VfUFJPVklERV9PQkpFQ1QnLCAxKTsKZGVmaW5lKCdERUJVR19CQUNLVFJBQ0VfSUdOT1JFX0FSR1MnLCAyKTsKZGVmaW5lKCdTX01FTU9SWScsIDEpOwpkZWZpbmUoJ1NfVkFSUycsIDQpOwpkZWZpbmUoJ1NfRklMRVMnLCA4KTsKZGVmaW5lKCdTX0lOQ0xVREUnLCAxNik7CmRlZmluZSgnU19TUUwnLCAzMik7CmRlZmluZSgnU19FWEVDVVRPUicsIDY0KTsKZGVmaW5lKCdTX01BSUwnLCAxMjgpOwpkZWZpbmUoJ1NfU0VTU0lPTicsIDI1Nik7CmRlZmluZSgnU19NSVNDJywgMik7CmRlZmluZSgnU19JTlRFUk5BTCcsIDUzNjg3MDkxMik7CmRlZmluZSgnU19BTEwnLCA1MTEpOwoKZGVmaW5lKCd0cnVlJywgKGJvb2wpMSwgdHJ1ZSk7CmRlZmluZSgnZmFsc2UnLCAoYm9vbCkwLCB0cnVlKTsKZGVmaW5lKCdudWxsJywgbnVsbCwgdHJ1ZSk7CmRlZmluZSgnWkVORF9USFJFQURfU0FGRScsIGZhbHNlKTsKZGVmaW5lKCdaRU5EX0RFQlVHX0JVSUxEJywgZmFsc2UpOwpkZWZpbmUoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fQlVJTEQnLCAwKTsKZGVmaW5lKCdQSFBfV0lORE9XU19WRVJTSU9OX01BSk9SJywgMCk7CmRlZmluZSgnUEhQX1dJTkRPV1NfVkVSU0lPTl9NSU5PUicsIDApOwpkZWZpbmUoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fUExBVEZPUk0nLCAwKTsKZGVmaW5lKCdQSFBfV0lORE9XU19WRVJTSU9OX1BST0RVQ1RUWVBFJywgMCk7CmRlZmluZSgnUEhQX1dJTkRPV1NfVkVSU0lPTl9TUF9NQUpPUicsIDApOwpkZWZpbmUoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fU1BfTUlOT1InLCAwKTsKZGVmaW5lKCdQSFBfV0lORE9XU19WRVJTSU9OX1NVSVRFTUFTSycsIDApOwpkZWZpbmUoJ1BIUF9XSU5ET1dTX05UX0RPTUFJTl9DT05UUk9MTEVSJywgMik7CmRlZmluZSgnUEhQX1dJTkRPV1NfTlRfU0VSVkVSJywgMyk7CmRlZmluZSgnUEhQX1dJTkRPV1NfTlRfV09SS1NUQVRJT04nLCAxKTsKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnUEhQX1dJTkRPV1NfRVZFTlRfQ1RSTF9DJywgMCk7Ci8qKgogKiBAc2luY2UgNy40CiAqLwpkZWZpbmUoJ1BIUF9XSU5ET1dTX0VWRU5UX0NUUkxfQlJFQUsnLCAxKTsKZGVmaW5lKCdQSFBfVkVSU0lPTicsICI1LjMuNi0xM3VidW50dTMuMiIpOwpkZWZpbmUoJ1BIUF9NQUpPUl9WRVJTSU9OJywgNSk7CmRlZmluZSgnUEhQX01JTk9SX1ZFUlNJT04nLCAzKTsKZGVmaW5lKCdQSFBfUkVMRUFTRV9WRVJTSU9OJywgNik7CmRlZmluZSgnUEhQX0VYVFJBX1ZFUlNJT04nLCAiLTEzdWJ1bnR1My4yIik7CmRlZmluZSgnUEhQX1ZFUlNJT05fSUQnLCA1MDMwNik7CmRlZmluZSgnUEhQX1pUUycsIDApOwpkZWZpbmUoJ1BIUF9ERUJVRycsIDApOwpkZWZpbmUoJ1BIUF9PUycsICJMaW51eCIpOwovKioKICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gZmFtaWx5IFBIUCB3YXMgYnVpbHQgZm9yLiBFaXRoZXIgb2YgJ1dpbmRvd3MnLCAnQlNEJywgJ0RhcndpbicsICdTb2xhcmlzJywgJ0xpbnV4JyBvciAnVW5rbm93bicuIEF2YWlsYWJsZSBhcyBvZiBQSFAgNy4yLjAuCiAqIEBzaW5jZSA3LjIKICovCmRlZmluZSgnUEhQX09TX0ZBTUlMWScsICJMaW51eCIpOwpkZWZpbmUoJ1BIUF9TQVBJJywgImNsaSIpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdQSFBfQ0xJX1BST0NFU1NfVElUTEUnLCAxKTsKZGVmaW5lKCdERUZBVUxUX0lOQ0xVREVfUEFUSCcsICIuOi91c3Ivc2hhcmUvcGhwOi91c3Ivc2hhcmUvcGVhciIpOwpkZWZpbmUoJ1BFQVJfSU5TVEFMTF9ESVInLCAiL3Vzci9zaGFyZS9waHAiKTsKZGVmaW5lKCdQRUFSX0VYVEVOU0lPTl9ESVInLCAiL3Vzci9saWIvcGhwNS8yMDA5MDYyNiIpOwpkZWZpbmUoJ1BIUF9FWFRFTlNJT05fRElSJywgIi91c3IvbGliL3BocDUvMjAwOTA2MjYiKTsKLyoqCiAqIFNwZWNpZmllcyB3aGVyZSB0aGUgYmluYXJpZXMgd2VyZSBpbnN0YWxsZWQgaW50by4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BIUF9CSU5BUlknLCAnL3Vzci9sb2NhbC9waHAvYmluL3BocCcpOwpkZWZpbmUoJ1BIUF9QUkVGSVgnLCAiL3VzciIpOwpkZWZpbmUoJ1BIUF9CSU5ESVInLCAiL3Vzci9iaW4iKTsKZGVmaW5lKCdQSFBfTElCRElSJywgIi91c3IvbGliL3BocDUiKTsKZGVmaW5lKCdQSFBfREFUQURJUicsICIvdXNyL3NoYXJlIik7CmRlZmluZSgnUEhQX1NZU0NPTkZESVInLCAiL2V0YyIpOwpkZWZpbmUoJ1BIUF9MT0NBTFNUQVRFRElSJywgIi92YXIiKTsKZGVmaW5lKCdQSFBfQ09ORklHX0ZJTEVfUEFUSCcsICIvZXRjL3BocDUvY2xpIik7CmRlZmluZSgnUEhQX0NPTkZJR19GSUxFX1NDQU5fRElSJywgIi9ldGMvcGhwNS9jbGkvY29uZi5kIik7CmRlZmluZSgnUEhQX1NITElCX1NVRkZJWCcsICJzbyIpOwpkZWZpbmUoJ1BIUF9FT0wnLCAiXG4iKTsKZGVmaW5lKCdTVUhPU0lOX1BBVENIJywgMSk7CmRlZmluZSgnU1VIT1NJTl9QQVRDSF9WRVJTSU9OJywgIjAuOS4xMCIpOwpkZWZpbmUoJ1BIUF9NQVhQQVRITEVOJywgNDA5Nik7CmRlZmluZSgnUEhQX0lOVF9NQVgnLCA5MjIzMzcyMDM2ODU0Nzc1ODA3KTsKZGVmaW5lKCdQSFBfSU5UX01JTicsIC05MjIzMzcyMDM2ODU0Nzc1ODA4KTsKZGVmaW5lKCdQSFBfSU5UX1NJWkUnLCA4KTsKLyoqCiAqIE51bWJlciBvZiBkZWNpbWFsIGRpZ2l0cyB0aGF0IGNhbiBiZSByb3VuZGVkIGludG8gYSBmbG9hdCBhbmQgYmFjayB3aXRob3V0IHByZWNpc2lvbiBsb3NzLiBBdmFpbGFibGUgYXMgb2YgUEhQIDcuMi4wLgogKiBAc2luY2UgNy4yCiAqLwpkZWZpbmUoJ1BIUF9GTE9BVF9ESUcnLCAxNSk7Ci8qKgogKiBTbWFsbGVzdCByZXByZXNlbnRhYmxlIHBvc2l0aXZlIG51bWJlciB4LCBzbyB0aGF0IHggKyAxLjAgIT0gMS4wLiBBdmFpbGFibGUgYXMgb2YgUEhQIDcuMi4wLgogKiBAc2luY2UgNy4yCiAqLwpkZWZpbmUoJ1BIUF9GTE9BVF9FUFNJTE9OJywgMi4yMjA0NDYwNDkyNTAzZS0xNik7CgovKioKICogTGFyZ2VzdCByZXByZXNlbnRhYmxlIGZsb2F0aW5nIHBvaW50IG51bWJlci4gQXZhaWxhYmxlIGFzIG9mIFBIUCA3LjIuMC4KICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCdQSFBfRkxPQVRfTUFYJywgMS43OTc2OTMxMzQ4NjIzZSszMDgpOwovKioKICogU21hbGxlc3QgcmVwcmVzZW50YWJsZSBmbG9hdGluZyBwb2ludCBudW1iZXIuIEF2YWlsYWJsZSBhcyBvZiBQSFAgNy4yLjAuCiAqIEBzaW5jZSA3LjIKICovCmRlZmluZSgnUEhQX0ZMT0FUX01JTicsIDIuMjI1MDczODU4NTA3MmUtMzA4KTsKZGVmaW5lKCdaRU5EX01VTFRJQllURScsIDApOwpkZWZpbmUoJ1BIUF9PVVRQVVRfSEFORExFUl9TVEFSVCcsIDEpOwpkZWZpbmUoJ1BIUF9PVVRQVVRfSEFORExFUl9DT05UJywgMik7CmRlZmluZSgnUEhQX09VVFBVVF9IQU5ETEVSX0VORCcsIDQpOwpkZWZpbmUoJ1VQTE9BRF9FUlJfT0snLCAwKTsKZGVmaW5lKCdVUExPQURfRVJSX0lOSV9TSVpFJywgMSk7CmRlZmluZSgnVVBMT0FEX0VSUl9GT1JNX1NJWkUnLCAyKTsKZGVmaW5lKCdVUExPQURfRVJSX1BBUlRJQUwnLCAzKTsKZGVmaW5lKCdVUExPQURfRVJSX05PX0ZJTEUnLCA0KTsKZGVmaW5lKCdVUExPQURfRVJSX05PX1RNUF9ESVInLCA2KTsKZGVmaW5lKCdVUExPQURfRVJSX0NBTlRfV1JJVEUnLCA3KTsKZGVmaW5lKCdVUExPQURfRVJSX0VYVEVOU0lPTicsIDgpOwpkZWZpbmUoJ1NURElOJywgZm9wZW4oJ3BocDovL3N0ZGluJywgJ3InKSk7CmRlZmluZSgnU1RET1VUJywgZm9wZW4oJ3BocDovL3N0ZG91dCcsICd3JykpOwpkZWZpbmUoJ1NUREVSUicsIGZvcGVuKCdwaHA6Ly9zdGRlcnInLCAndycpKTsKCmRlZmluZSgnUEhQX0ZEX1NFVFNJWkUnLCAxMDI0KTsKCi8qKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL291dGNvbnRyb2wuY29uc3RhbnRzLnBocCAqLwpkZWZpbmUoJ1BIUF9PVVRQVVRfSEFORExFUl9XUklURScsIDApOwovKiogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vdXRjb250cm9sLmNvbnN0YW50cy5waHAgKi8KZGVmaW5lKCdQSFBfT1VUUFVUX0hBTkRMRVJfRkxVU0gnLCA0KTsKLyoqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb3V0Y29udHJvbC5jb25zdGFudHMucGhwICovCmRlZmluZSgnUEhQX09VVFBVVF9IQU5ETEVSX0NMRUFOJywgMik7Ci8qKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL291dGNvbnRyb2wuY29uc3RhbnRzLnBocCAqLwpkZWZpbmUoJ1BIUF9PVVRQVVRfSEFORExFUl9GSU5BTCcsIDgpOwovKiogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vdXRjb250cm9sLmNvbnN0YW50cy5waHAgKi8KZGVmaW5lKCdQSFBfT1VUUFVUX0hBTkRMRVJfQ0xFQU5BQkxFJywgMTYpOwovKiogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vdXRjb250cm9sLmNvbnN0YW50cy5waHAgKi8KZGVmaW5lKCdQSFBfT1VUUFVUX0hBTkRMRVJfRkxVU0hBQkxFJywgMzIpOwovKiogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vdXRjb250cm9sLmNvbnN0YW50cy5waHAgKi8KZGVmaW5lKCdQSFBfT1VUUFVUX0hBTkRMRVJfUkVNT1ZBQkxFJywgNjQpOwovKiogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vdXRjb250cm9sLmNvbnN0YW50cy5waHAgKi8KZGVmaW5lKCdQSFBfT1VUUFVUX0hBTkRMRVJfU1RERkxBR1MnLCAxMTIpOwovKiogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vdXRjb250cm9sLmNvbnN0YW50cy5waHAgKi8KZGVmaW5lKCdQSFBfT1VUUFVUX0hBTkRMRVJfU1RBUlRFRCcsIDQwOTYpOwovKiogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vdXRjb250cm9sLmNvbnN0YW50cy5waHAgKi8KZGVmaW5lKCdQSFBfT1VUUFVUX0hBTkRMRVJfRElTQUJMRUQnLCA4MTkyKTsKCi8qKgogKiBAc2luY2UgOC40CiAqLwpjb25zdCBQSFBfU0JJTkRJUiA9ICcvdXNyL2xvY2FsL3NiaW4nLCBQSFBfT1VUUFVUX0hBTkRMRVJfUFJPQ0VTU0VEID0gMTYzODQ7CgovKioKICogU3BlY2lmaWVzIHdoZXJlIHRoZSBtYW5wYWdlcyB3ZXJlIGluc3RhbGxlZCBpbnRvLgogKiBAc2luY2UgNS4zLjcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BIUF9NQU5ESVInLCAnL3Vzci9sb2NhbC9waHAvcGhwL21hbicpOwo8P3BocAoKLy8gU3RhcnQgb2YgQ29yZSB2LjUuMy42LTEzdWJ1bnR1My4yCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cQXJyYXlTaGFwZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxEZXByZWNhdGVkOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cUHVyZTsKCi8qKgogKiBHZXRzIHRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IFplbmQgZW5naW5lCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uemVuZC12ZXJzaW9uLnBocAogKiBAcmV0dXJuIHN0cmluZyB0aGUgWmVuZCBFbmdpbmUgdmVyc2lvbiBudW1iZXIsIGFzIGEgc3RyaW5nLgogKi8KI1tQdXJlXQpmdW5jdGlvbiB6ZW5kX3ZlcnNpb24oKTogc3RyaW5nIHt9CgovKioKICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZnVuYy1udW0tYXJncy5waHAKICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIGludG8gdGhlIGN1cnJlbnQgdXNlci1kZWZpbmVkCiAqIGZ1bmN0aW9uLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBmdW5jX251bV9hcmdzKCk6IGludCB7fQoKLyoqCiAqIFJldHVybiBhbiBpdGVtIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mdW5jLWdldC1hcmcucGhwCiAqIEBwYXJhbSBpbnQgJHBvc2l0aW9uIDxwPgogKiBUaGUgYXJndW1lbnQgb2Zmc2V0LiBGdW5jdGlvbiBhcmd1bWVudHMgYXJlIGNvdW50ZWQgc3RhcnRpbmcgZnJvbQogKiB6ZXJvLgogKiA8L3A+CiAqIEByZXR1cm4gbWl4ZWR8ZmFsc2UgdGhlIHNwZWNpZmllZCBhcmd1bWVudCwgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGZ1bmNfZ2V0X2FyZyhpbnQgJHBvc2l0aW9uKTogbWl4ZWQge30KCi8qKgogKiBSZXR1cm5zIGFuIGFycmF5IGNvbXByaXNpbmcgYSBmdW5jdGlvbidzIGFyZ3VtZW50IGxpc3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mdW5jLWdldC1hcmdzLnBocAogKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5IGluIHdoaWNoIGVhY2ggZWxlbWVudCBpcyBhIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcKICogbWVtYmVyIG9mIHRoZSBjdXJyZW50IHVzZXItZGVmaW5lZCBmdW5jdGlvbidzIGFyZ3VtZW50IGxpc3QuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGZ1bmNfZ2V0X2FyZ3MoKTogYXJyYXkge30KCi8qKgogKiBHZXQgc3RyaW5nIGxlbmd0aAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN0cmxlbi5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogKiBUaGUgc3RyaW5nIGJlaW5nIG1lYXN1cmVkIGZvciBsZW5ndGguCiAqIDwvcD4KICogQHJldHVybiBpbnQ8MCxtYXg+IFRoZSBsZW5ndGggb2YgdGhlIDxpPnN0cmluZzwvaT4gb24gc3VjY2VzcywKICogYW5kIDAgaWYgdGhlIDxpPnN0cmluZzwvaT4gaXMgZW1wdHkuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIHN0cmxlbihzdHJpbmcgJHN0cmluZyk6IGludCB7fQoKLyoqCiAqIEJpbmFyeSBzYWZlIHN0cmluZyBjb21wYXJpc29uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3RyY21wLnBocAogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcxIDxwPgogKiBUaGUgZmlyc3Qgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZzIgPHA+CiAqIFRoZSBzZWNvbmQgc3RyaW5nLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IGxlc3MgMCBpZiA8aT5zdHIxPC9pPiBpcyBsZXNzIHRoYW4KICogPGk+c3RyMjwvaT47ICZndDsgMCBpZiA8aT5zdHIxPC9pPgogKiBpcyBncmVhdGVyIHRoYW4gPGk+c3RyMjwvaT4sIGFuZCAwIGlmIHRoZXkgYXJlCiAqIGVxdWFsLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBzdHJjbXAoc3RyaW5nICRzdHJpbmcxLCBzdHJpbmcgJHN0cmluZzIpOiBpbnQge30KCi8qKgogKiBCaW5hcnkgc2FmZSBzdHJpbmcgY29tcGFyaXNvbiBvZiB0aGUgZmlyc3QgbiBjaGFyYWN0ZXJzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3RybmNtcC5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nMSA8cD4KICogVGhlIGZpcnN0IHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcyIDxwPgogKiBUaGUgc2Vjb25kIHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gaW50ICRsZW5ndGggPHA+CiAqIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHVzZSBpbiB0aGUgY29tcGFyaXNvbi4KICogPC9wPgogKiBAcmV0dXJuIGludCBsZXNzIDAgaWYgPGk+c3RyMTwvaT4gaXMgbGVzcyB0aGFuCiAqIDxpPnN0cjI8L2k+OyAmZ3Q7IDAgaWYgPGk+c3RyMTwvaT4KICogaXMgZ3JlYXRlciB0aGFuIDxpPnN0cjI8L2k+LCBhbmQgMCBpZiB0aGV5IGFyZQogKiBlcXVhbC4KICovCiNbUHVyZV0KZnVuY3Rpb24gc3RybmNtcChzdHJpbmcgJHN0cmluZzEsIHN0cmluZyAkc3RyaW5nMiwgaW50ICRsZW5ndGgpOiBpbnQge30KCi8qKgogKiBCaW5hcnkgc2FmZSBjYXNlLWluc2Vuc2l0aXZlIHN0cmluZyBjb21wYXJpc29uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3RyY2FzZWNtcC5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nMSA8cD4KICogVGhlIGZpcnN0IHN0cmluZwogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZzIgPHA+CiAqIFRoZSBzZWNvbmQgc3RyaW5nCiAqIDwvcD4KICogQHJldHVybiBpbnQgbGVzcyB0aGFuIDAgaWYgPGk+c3RyMTwvaT4gaXMgbGVzcyB0aGFuCiAqIDxpPnN0cjI8L2k+OyAmZ3Q7IDAgaWYgPGk+c3RyMTwvaT4KICogaXMgZ3JlYXRlciB0aGFuIDxpPnN0cjI8L2k+LCBhbmQgMCBpZiB0aGV5IGFyZQogKiBlcXVhbC4KICovCiNbUHVyZV0KZnVuY3Rpb24gc3RyY2FzZWNtcChzdHJpbmcgJHN0cmluZzEsIHN0cmluZyAkc3RyaW5nMik6IGludCB7fQoKLyoqCiAqIEJpbmFyeSBzYWZlIGNhc2UtaW5zZW5zaXRpdmUgc3RyaW5nIGNvbXBhcmlzb24gb2YgdGhlIGZpcnN0IG4gY2hhcmFjdGVycwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN0cm5jYXNlY21wLnBocAogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcxIDxwPgogKiBUaGUgZmlyc3Qgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZzIgPHA+CiAqIFRoZSBzZWNvbmQgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGxlbmd0aCA8cD4KICogVGhlIGxlbmd0aCBvZiBzdHJpbmdzIHRvIGJlIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24uCiAqIDwvcD4KICogQHJldHVybiBpbnQgbGVzcyB0aGFuIDAgaWYgPGk+c3RyMTwvaT4gaXMgbGVzcyB0aGFuCiAqIDxpPnN0cjI8L2k+OyAmZ3Q7IDAgaWYgPGk+c3RyMTwvaT4gaXMKICogZ3JlYXRlciB0aGFuIDxpPnN0cjI8L2k+LCBhbmQgMCBpZiB0aGV5IGFyZSBlcXVhbC4KICovCiNbUHVyZV0KZnVuY3Rpb24gc3RybmNhc2VjbXAoc3RyaW5nICRzdHJpbmcxLCBzdHJpbmcgJHN0cmluZzIsIGludCAkbGVuZ3RoKTogaW50IHt9CgovKioKICogVGhlIGZ1bmN0aW9uIHJldHVybnMge0BzZWUgdHJ1ZX0gaWYgdGhlIHBhc3NlZCAkaGF5c3RhY2sgc3RhcnRzIGZyb20gdGhlCiAqICRuZWVkbGUgc3RyaW5nIG9yIHtAc2VlIGZhbHNlfSBvdGhlcndpc2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGhheXN0YWNrCiAqIEBwYXJhbSBzdHJpbmcgJG5lZWRsZQogKiBAcmV0dXJuIGJvb2wKICogQHNpbmNlIDguMAogKi8KI1tQdXJlXQpmdW5jdGlvbiBzdHJfc3RhcnRzX3dpdGgoc3RyaW5nICRoYXlzdGFjaywgc3RyaW5nICRuZWVkbGUpOiBib29sIHt9CgovKioKICogVGhlIGZ1bmN0aW9uIHJldHVybnMge0BzZWUgdHJ1ZX0gaWYgdGhlIHBhc3NlZCAkaGF5c3RhY2sgZW5kcyB3aXRoIHRoZQogKiAkbmVlZGxlIHN0cmluZyBvciB7QHNlZSBmYWxzZX0gb3RoZXJ3aXNlLgogKgogKiBAcGFyYW0gc3RyaW5nICRoYXlzdGFjawogKiBAcGFyYW0gc3RyaW5nICRuZWVkbGUKICogQHJldHVybiBib29sCiAqIEBzaW5jZSA4LjAKICovCiNbUHVyZV0KZnVuY3Rpb24gc3RyX2VuZHNfd2l0aChzdHJpbmcgJGhheXN0YWNrLCBzdHJpbmcgJG5lZWRsZSk6IGJvb2wge30KCi8qKgogKiBDaGVja3MgaWYgJG5lZWRsZSBpcyBmb3VuZCBpbiAkaGF5c3RhY2sgYW5kIHJldHVybnMgYSBib29sZWFuIHZhbHVlCiAqICh0cnVlL2ZhbHNlKSB3aGV0aGVyIG9yIG5vdCB0aGUgJG5lZWRsZSB3YXMgZm91bmQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGhheXN0YWNrCiAqIEBwYXJhbSBzdHJpbmcgJG5lZWRsZQogKiBAcmV0dXJuIGJvb2wKICogQHNpbmNlIDguMAogKi8KI1tQdXJlXQpmdW5jdGlvbiBzdHJfY29udGFpbnMoc3RyaW5nICRoYXlzdGFjaywgc3RyaW5nICRuZWVkbGUpOiBib29sIHt9CgovKioKICogQHNpbmNlIDguMwogKi8KZnVuY3Rpb24gc3RyX2RlY3JlbWVudChzdHJpbmcgJHN0cmluZyk6IHN0cmluZyB7fQoKLyoqCiAqIEBzaW5jZSA4LjMKICovCmZ1bmN0aW9uIHN0cl9pbmNyZW1lbnQoc3RyaW5nICRzdHJpbmcpOiBzdHJpbmcge30KCi8qKgogKiBSZXR1cm4gdGhlIGN1cnJlbnQga2V5IGFuZCB2YWx1ZSBwYWlyIGZyb20gYW4gYXJyYXkgYW5kIGFkdmFuY2UgdGhlIGFycmF5IGN1cnNvcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmVhY2gucGhwCiAqIEBwYXJhbSBhcnJheXxBcnJheU9iamVjdCAmJGFycmF5IDxwPgogKiBUaGUgaW5wdXQgYXJyYXkuCiAqIDwvcD4KICogQHJldHVybiBhcnJheSB0aGUgY3VycmVudCBrZXkgYW5kIHZhbHVlIHBhaXIgZnJvbSB0aGUgYXJyYXkKICogPGk+YXJyYXk8L2k+LiBUaGlzIHBhaXIgaXMgcmV0dXJuZWQgaW4gYSBmb3VyLWVsZW1lbnQKICogYXJyYXksIHdpdGggdGhlIGtleXMgMCwgMSwKICoga2V5LCBhbmQgdmFsdWUuIEVsZW1lbnRzCiAqIDAgYW5kIGtleSBjb250YWluIHRoZSBrZXkgbmFtZSBvZgogKiB0aGUgYXJyYXkgZWxlbWVudCwgYW5kIDEgYW5kIHZhbHVlCiAqIGNvbnRhaW4gdGhlIGRhdGEuCiAqIDwvcD4KICogPHA+CiAqIElmIHRoZSBpbnRlcm5hbCBwb2ludGVyIGZvciB0aGUgYXJyYXkgcG9pbnRzIHBhc3QgdGhlIGVuZCBvZiB0aGUKICogYXJyYXkgY29udGVudHMsIDxiPmVhY2g8L2I+IHJldHVybnMKICogZmFsc2UuCiAqIEByZW1vdmVkIDguMAogKi8KI1tEZXByZWNhdGVkKHJlYXNvbjogIlVzZSBhIGZvcmVhY2ggbG9vcCBpbnN0ZWFkIiwgc2luY2U6ICI3LjIiKV0KZnVuY3Rpb24gZWFjaCgmJGFycmF5KTogYXJyYXkge30KCi8qKgogKiBTZXRzIHdoaWNoIFBIUCBlcnJvcnMgYXJlIHJlcG9ydGVkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZXJyb3ItcmVwb3J0aW5nLnBocAogKiBAcGFyYW0gaW50fG51bGwgJGVycm9yX2xldmVsIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBuZXcgZXJyb3JfcmVwb3J0aW5nCiAqIGxldmVsLiBJdCB0YWtlcyBvbiBlaXRoZXIgYSBiaXRtYXNrLCBvciBuYW1lZCBjb25zdGFudHMuIFVzaW5nIG5hbWVkCiAqIGNvbnN0YW50cyBpcyBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IGZvciBmdXR1cmUKICogdmVyc2lvbnMuIEFzIGVycm9yIGxldmVscyBhcmUgYWRkZWQsIHRoZSByYW5nZSBvZiBpbnRlZ2VycyBpbmNyZWFzZXMsCiAqIHNvIG9sZGVyIGludGVnZXItYmFzZWQgZXJyb3IgbGV2ZWxzIHdpbGwgbm90IGFsd2F5cyBiZWhhdmUgYXMgZXhwZWN0ZWQuCiAqIDwvcD4KICogPHA+CiAqIFRoZSBhdmFpbGFibGUgZXJyb3IgbGV2ZWwgY29uc3RhbnRzIGFuZCB0aGUgYWN0dWFsCiAqIG1lYW5pbmdzIG9mIHRoZXNlIGVycm9yIGxldmVscyBhcmUgZGVzY3JpYmVkIGluIHRoZQogKiBwcmVkZWZpbmVkIGNvbnN0YW50cy4KICogPHRhYmxlPgogKiBlcnJvcl9yZXBvcnRpbmcgbGV2ZWwgY29uc3RhbnRzIGFuZCBiaXQgdmFsdWVzCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD52YWx1ZTwvdGQ+CiAqIDx0ZD5jb25zdGFudDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4xPC90ZD4KICogPHRkPgogKiBFX0VSUk9SCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4yPC90ZD4KICogPHRkPgogKiBFX1dBUk5JTkcKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjQ8L3RkPgogKiA8dGQ+CiAqIEVfUEFSU0UKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjg8L3RkPgogKiA8dGQ+CiAqIEVfTk9USUNFCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4xNjwvdGQ+CiAqIDx0ZD4KICogRV9DT1JFX0VSUk9SCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4zMjwvdGQ+CiAqIDx0ZD4KICogRV9DT1JFX1dBUk5JTkcKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjY0PC90ZD4KICogPHRkPgogKiBFX0NPTVBJTEVfRVJST1IKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjEyODwvdGQ+CiAqIDx0ZD4KICogRV9DT01QSUxFX1dBUk5JTkcKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjI1NjwvdGQ+CiAqIDx0ZD4KICogRV9VU0VSX0VSUk9SCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD41MTI8L3RkPgogKiA8dGQ+CiAqIEVfVVNFUl9XQVJOSU5HCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4xMDI0PC90ZD4KICogPHRkPgogKiBFX1VTRVJfTk9USUNFCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4zMjc2NzwvdGQ+CiAqIDx0ZD4KICogRV9BTEwKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjIwNDg8L3RkPgogKiA8dGQ+CiAqIEVfU1RSSUNUCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD40MDk2PC90ZD4KICogPHRkPgogKiBFX1JFQ09WRVJBQkxFX0VSUk9SCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD44MTkyPC90ZD4KICogPHRkPgogKiBFX0RFUFJFQ0FURUQKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjE2Mzg0PC90ZD4KICogPHRkPgogKiBFX1VTRVJfREVQUkVDQVRFRAogKiA8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiA8L3A+CiAqIEByZXR1cm4gaW50IHRoZSBvbGQgZXJyb3JfcmVwb3J0aW5nCiAqIGxldmVsIG9yIHRoZSBjdXJyZW50IGxldmVsIGlmIG5vIDxpPmxldmVsPC9pPiBwYXJhbWV0ZXIgaXMKICogZ2l2ZW4uCiAqLwpmdW5jdGlvbiBlcnJvcl9yZXBvcnRpbmcoP2ludCAkZXJyb3JfbGV2ZWwpOiBpbnQge30KCi8qKgogKiBEZWZpbmVzIGEgbmFtZWQgY29uc3RhbnQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kZWZpbmUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNvbnN0YW50X25hbWUgPHA+CiAqIFRoZSBuYW1lIG9mIHRoZSBjb25zdGFudC4KICogPC9wPgogKiBAcGFyYW0gbnVsbHxhcnJheXxib29sfGludHxmbG9hdHxzdHJpbmcgJHZhbHVlIDxwPgogKiBUaGUgdmFsdWUgb2YgdGhlIGNvbnN0YW50LgogKiBJbiBQSFAgNSwgdmFsdWUgbXVzdCBiZSBhIHNjYWxhciB2YWx1ZSAoaW50ZWdlciwgZmxvYXQsIHN0cmluZywgYm9vbGVhbiwgb3IgbnVsbCkuCiAqIEluIFBIUCA3LCBhcnJheSB2YWx1ZXMgYXJlIGFsc28gYWNjZXB0ZWQuCiAqIEl0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSByZXNvdXJjZSBjb25zdGFudHMsCiAqIGhvd2V2ZXIgaXQgaXMgbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgY2F1c2UgdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkY2FzZV9pbnNlbnNpdGl2ZSBbb3B0aW9uYWxdIDxwPgogKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGNvbnN0YW50IHdpbGwgYmUgZGVmaW5lZCBjYXNlLWluc2Vuc2l0aXZlLgogKiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyBjYXNlLXNlbnNpdGl2ZTsgaS5lLgogKiBDT05TVEFOVCBhbmQgQ29uc3RhbnQgcmVwcmVzZW50CiAqIGRpZmZlcmVudCB2YWx1ZXMuCiAqIERlZmluaW5nIGNhc2UtaW5zZW5zaXRpdmUgY29uc3RhbnRzIGlzIGRlcHJlY2F0ZWQgYXMgb2YgUEhQIDcuMy4wLgogKiA8L3A+CiAqIDxwPgogKiBDYXNlLWluc2Vuc2l0aXZlIGNvbnN0YW50cyBhcmUgc3RvcmVkIGFzIGxvd2VyLWNhc2UuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZGVmaW5lKAogICAgc3RyaW5nICRjb25zdGFudF9uYW1lLAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJ251bGx8YXJyYXl8Ym9vbHxpbnR8ZmxvYXR8c3RyaW5nJyldICR2YWx1ZSwKICAgICNbRGVwcmVjYXRlZChzaW5jZTogIjcuMyIpXSBib29sICRjYXNlX2luc2Vuc2l0aXZlID0gZmFsc2UKKTogYm9vbCB7fQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gbmFtZWQgY29uc3RhbnQgZXhpc3RzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGVmaW5lZC5waHAKICogQHBhcmFtIHN0cmluZyAkY29uc3RhbnRfbmFtZSA8cD4KICogVGhlIGNvbnN0YW50IG5hbWUuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIG5hbWVkIGNvbnN0YW50IGdpdmVuIGJ5IDxpPm5hbWU8L2k+CiAqIGhhcyBiZWVuIGRlZmluZWQsIGZhbHNlIG90aGVyd2lzZS4KICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gZGVmaW5lZChzdHJpbmcgJGNvbnN0YW50X25hbWUpOiBib29sIHt9CgovKioKICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2xhc3Mgb2YgYW4gb2JqZWN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ2V0LWNsYXNzLnBocAogKiBAcGFyYW0gb2JqZWN0ICRvYmplY3QgW29wdGlvbmFsXSA8cD4KICogVGhlIHRlc3RlZCBvYmplY3QuIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBvbWl0dGVkIHdoZW4gaW5zaWRlIGEgY2xhc3MuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgPHA+VGhlIG5hbWUgb2YgdGhlIGNsYXNzIG9mIHdoaWNoIDxpPm9iamVjdDwvaT4gaXMgYW4KICogaW5zdGFuY2UuCiAqIElmIDxpPm9iamVjdDwvaT4gaXMgb21pdHRlZCB3aGVuIGluc2lkZSBhIGNsYXNzLCB0aGUKICogbmFtZSBvZiB0aGF0IGNsYXNzIGlzIHJldHVybmVkLjwvcD4KICovCiNbUHVyZV0KZnVuY3Rpb24gZ2V0X2NsYXNzKG9iamVjdCAkb2JqZWN0KTogc3RyaW5nIHt9CgovKioKICogdGhlICJMYXRlIFN0YXRpYyBCaW5kaW5nIiBjbGFzcyBuYW1lCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ2V0LWNhbGxlZC1jbGFzcy5waHAKICogQHJldHVybiBzdHJpbmcKICovCiNbUHVyZV0KZnVuY3Rpb24gZ2V0X2NhbGxlZF9jbGFzcygpOiBzdHJpbmcge30KCi8qKgogKiBSZXRyaWV2ZXMgdGhlIHBhcmVudCBjbGFzcyBuYW1lIGZvciBvYmplY3Qgb3IgY2xhc3MKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXQtcGFyZW50LWNsYXNzLnBocAogKiBAcGFyYW0gb2JqZWN0fHN0cmluZyAkb2JqZWN0X29yX2NsYXNzIFtvcHRpb25hbF0gPHA+CiAqIFRoZSB0ZXN0ZWQgb2JqZWN0IG9yIGNsYXNzIG5hbWUKICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSA8cD5UaGUgbmFtZSBvZiB0aGUgcGFyZW50IGNsYXNzIG9mIHRoZSBjbGFzcyBvZiB3aGljaAogKiA8aT5vYmplY3Q8L2k+IGlzIGFuIGluc3RhbmNlIG9yIHRoZSBuYW1lLgogKiA8L3A+CiAqIDxwPgogKiBJZiB0aGUgb2JqZWN0IGRvZXMgbm90IGhhdmUgYSBwYXJlbnQgZmFsc2Ugd2lsbCBiZSByZXR1cm5lZC4KICogPC9wPgogKiA8cD4KICogSWYgY2FsbGVkIHdpdGhvdXQgcGFyYW1ldGVyIG91dHNpZGUgb2JqZWN0LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuPC9wPgogKi8KI1tQdXJlXQpmdW5jdGlvbiBnZXRfcGFyZW50X2NsYXNzKG9iamVjdHxzdHJpbmcgJG9iamVjdF9vcl9jbGFzcyk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIENoZWNrcyBpZiB0aGUgY2xhc3MgbWV0aG9kIGV4aXN0cwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1ldGhvZC1leGlzdHMucGhwCiAqIEBwYXJhbSBvYmplY3R8c3RyaW5nICRvYmplY3Rfb3JfY2xhc3MgPHA+CiAqIEFuIG9iamVjdCBpbnN0YW5jZSBvciBhIGNsYXNzIG5hbWUKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRtZXRob2QgPHA+CiAqIFRoZSBtZXRob2QgbmFtZQogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBtZXRob2QgZ2l2ZW4gYnkgPGk+bWV0aG9kX25hbWU8L2k+CiAqIGhhcyBiZWVuIGRlZmluZWQgZm9yIHRoZSBnaXZlbiA8aT5vYmplY3Q8L2k+LCBmYWxzZQogKiBvdGhlcndpc2UuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIG1ldGhvZF9leGlzdHMoJG9iamVjdF9vcl9jbGFzcywgc3RyaW5nICRtZXRob2QpOiBib29sIHt9CgovKioKICogQ2hlY2tzIGlmIHRoZSBvYmplY3Qgb3IgY2xhc3MgaGFzIGEgcHJvcGVydHkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wcm9wZXJ0eS1leGlzdHMucGhwCiAqIEBwYXJhbSBvYmplY3R8c3RyaW5nICRvYmplY3Rfb3JfY2xhc3MgPHA+CiAqIFRoZSBjbGFzcyBuYW1lIG9yIGFuIG9iamVjdCBvZiB0aGUgY2xhc3MgdG8gdGVzdCBmb3IKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eSA8cD4KICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5CiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIHByb3BlcnR5IGV4aXN0cywgZmFsc2UgaWYgaXQgZG9lc24ndCBleGlzdCBvcgogKiBudWxsIGluIGNhc2Ugb2YgYW4gZXJyb3IuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIHByb3BlcnR5X2V4aXN0cygkb2JqZWN0X29yX2NsYXNzLCBzdHJpbmcgJHByb3BlcnR5KTogYm9vbCB7fQoKLyoqCiAqIENoZWNrcyBpZiB0aGUgdHJhaXQgZXhpc3RzCiAqIEBwYXJhbSBzdHJpbmcgJHRyYWl0IE5hbWUgb2YgdGhlIHRyYWl0IHRvIGNoZWNrCiAqIEBwYXJhbSBib29sICRhdXRvbG9hZCBbb3B0aW9uYWxdIFdoZXRoZXIgdG8gYXV0b2xvYWQgaWYgbm90IGFscmVhZHkgbG9hZGVkLgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIGlmIHRyYWl0IGV4aXN0cywgRkFMU0UgaWYgbm90LCBOVUxMIGluIGNhc2Ugb2YgYW4gZXJyb3IuCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnRyYWl0LWV4aXN0cy5waHAKICogQHNpbmNlIDUuNAogKi8KZnVuY3Rpb24gdHJhaXRfZXhpc3RzKHN0cmluZyAkdHJhaXQsIGJvb2wgJGF1dG9sb2FkID0gdHJ1ZSk6IGJvb2wge30KCi8qKgogKiBDaGVja3MgaWYgdGhlIGNsYXNzIGhhcyBiZWVuIGRlZmluZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5jbGFzcy1leGlzdHMucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIDxwPgogKiBUaGUgY2xhc3MgbmFtZS4gVGhlIG5hbWUgaXMgbWF0Y2hlZCBpbiBhIGNhc2UtaW5zZW5zaXRpdmUgbWFubmVyLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRhdXRvbG9hZCBbb3B0aW9uYWxdIDxwPgogKiBXaGV0aGVyIG9yIG5vdCB0byBjYWxsIGF1dG9sb2FkIGJ5IGRlZmF1bHQuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgaWYgPGk+Y2xhc3NfbmFtZTwvaT4gaXMgYSBkZWZpbmVkIGNsYXNzLAogKiBmYWxzZSBvdGhlcndpc2UuCiAqLwpmdW5jdGlvbiBjbGFzc19leGlzdHMoc3RyaW5nICRjbGFzcywgYm9vbCAkYXV0b2xvYWQgPSB0cnVlKTogYm9vbCB7fQoKLyoqCiAqIENoZWNrcyBpZiB0aGUgaW50ZXJmYWNlIGhhcyBiZWVuIGRlZmluZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbnRlcmZhY2UtZXhpc3RzLnBocAogKiBAcGFyYW0gc3RyaW5nICRpbnRlcmZhY2UgPHA+CiAqIFRoZSBpbnRlcmZhY2UgbmFtZQogKiA8L3A+CiAqIEBwYXJhbSBib29sICRhdXRvbG9hZCBbb3B0aW9uYWxdIDxwPgogKiBXaGV0aGVyIHRvIGNhbGwgYXV0b2xvYWQgb3Igbm90IGJ5IGRlZmF1bHQuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIGludGVyZmFjZSBnaXZlbiBieQogKiA8aT5pbnRlcmZhY2VfbmFtZTwvaT4gaGFzIGJlZW4gZGVmaW5lZCwgZmFsc2Ugb3RoZXJ3aXNlLgogKiBAc2luY2UgNS4wLjIKICovCmZ1bmN0aW9uIGludGVyZmFjZV9leGlzdHMoc3RyaW5nICRpbnRlcmZhY2UsIGJvb2wgJGF1dG9sb2FkID0gdHJ1ZSk6IGJvb2wge30KCi8qKgogKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gaGFzIGJlZW4gZGVmaW5lZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZ1bmN0aW9uLWV4aXN0cy5waHAKICogQHBhcmFtIHN0cmluZyAkZnVuY3Rpb24gPHA+CiAqIFRoZSBmdW5jdGlvbiBuYW1lLCBhcyBhIHN0cmluZy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiA8aT5mdW5jdGlvbl9uYW1lPC9pPiBleGlzdHMgYW5kIGlzIGEKICogZnVuY3Rpb24sIGZhbHNlIG90aGVyd2lzZS4KICogPC9wPgogKiA8cD4KICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBmYWxzZSBmb3IgY29uc3RydWN0cywgc3VjaCBhcwogKiA8Yj5pbmNsdWRlX29uY2U8L2I+IGFuZCA8Yj5lY2hvPC9iPi4KICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gZnVuY3Rpb25fZXhpc3RzKHN0cmluZyAkZnVuY3Rpb24pOiBib29sIHt9CgovKioKICogQ2hlY2tzIGlmIHRoZSBlbnVtIGhhcyBiZWVuIGRlZmluZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5lbnVtLWV4aXN0cy5waHAKICogQHBhcmFtIHN0cmluZyAkZW51bSA8cD4KICogVGhlIGVudW0gbmFtZS4gVGhlIG5hbWUgaXMgbWF0Y2hlZCBpbiBhIGNhc2UtaW5zZW5zaXRpdmUgbWFubmVyLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRhdXRvbG9hZCBbb3B0aW9uYWxdIDxwPgogKiBXaGV0aGVyIG9yIG5vdCB0byBjYWxsIGF1dG9sb2FkIGJ5IGRlZmF1bHQuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgaWYgPGk+ZW51bTwvaT4gaXMgYSBkZWZpbmVkIGVudW0sCiAqIGZhbHNlIG90aGVyd2lzZS4KICogQHNpbmNlIDguMQogKi8KZnVuY3Rpb24gZW51bV9leGlzdHMoc3RyaW5nICRlbnVtLCBib29sICRhdXRvbG9hZCA9IHRydWUpOiBib29sIHt9CgovKioKICogQ3JlYXRlcyBhbiBhbGlhcyBmb3IgYSBjbGFzcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmNsYXNzLWFsaWFzLnBocAogKiBAcGFyYW0gc3RyaW5nICRjbGFzcyBUaGUgb3JpZ2luYWwgY2xhc3MuCiAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzIFRoZSBhbGlhcyBuYW1lIGZvciB0aGUgY2xhc3MuCiAqIEBwYXJhbSBib29sICRhdXRvbG9hZCBbb3B0aW9uYWxdIFdoZXRoZXIgdG8gYXV0b2xvYWQgaWYgdGhlIG9yaWdpbmFsIGNsYXNzIGlzIG5vdCBmb3VuZC4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gY2xhc3NfYWxpYXMoc3RyaW5nICRjbGFzcywgc3RyaW5nICRhbGlhcywgYm9vbCAkYXV0b2xvYWQgPSB0cnVlKTogYm9vbCB7fQoKLyoqCiAqIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgbmFtZXMgb2YgaW5jbHVkZWQgb3IgcmVxdWlyZWQgZmlsZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXQtaW5jbHVkZWQtZmlsZXMucGhwCiAqIEByZXR1cm4gc3RyaW5nW10gYW4gYXJyYXkgb2YgdGhlIG5hbWVzIG9mIGFsbCBmaWxlcy4KICogPHA+CiAqIFRoZSBzY3JpcHQgb3JpZ2luYWxseSBjYWxsZWQgaXMgY29uc2lkZXJlZCBhbiAiaW5jbHVkZWQgZmlsZSwiIHNvIGl0IHdpbGwKICogYmUgbGlzdGVkIHRvZ2V0aGVyIHdpdGggdGhlIGZpbGVzIHJlZmVyZW5jZWQgYnkKICogPGI+aW5jbHVkZTwvYj4gYW5kIGZhbWlseS4KICogPC9wPgogKiA8cD4KICogRmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgb3IgcmVxdWlyZWQgbXVsdGlwbGUgdGltZXMgb25seSBzaG93IHVwIG9uY2UgaW4KICogdGhlIHJldHVybmVkIGFycmF5LgogKiA8L3A+CiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIGdldF9pbmNsdWRlZF9maWxlcygpOiBhcnJheSB7fQoKLyoqCiAqIEFsaWFzIG9mIDxiPmdldF9pbmNsdWRlZF9maWxlczwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXQtcmVxdWlyZWQtZmlsZXMucGhwCiAqIEByZXR1cm4gc3RyaW5nW10KICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gZ2V0X3JlcXVpcmVkX2ZpbGVzKCk6IGFycmF5IHt9CgovKioKICogY2hlY2tzIGlmIHRoZSBvYmplY3QgaGFzIHRoaXMgY2xhc3MgYXMgb25lIG9mIGl0cyBwYXJlbnRzIG9yIGltcGxlbWVudHMgaXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pcy1zdWJjbGFzcy1vZi5waHAKICogQHBhcmFtIG9iamVjdHxzdHJpbmcgJG9iamVjdF9vcl9jbGFzcyA8cD4KICogQSBjbGFzcyBuYW1lIG9yIGFuIG9iamVjdCBpbnN0YW5jZQogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIDxwPgogKiBUaGUgY2xhc3MgbmFtZQogKiA8L3A+CiAqIEBwYXJhbSBib29sICRhbGxvd19zdHJpbmcgW29wdGlvbmFsXSA8cD4KICogSWYgdGhpcyBwYXJhbWV0ZXIgc2V0IHRvIGZhbHNlLCBzdHJpbmcgY2xhc3MgbmFtZSBhcyBvYmplY3QgaXMgbm90IGFsbG93ZWQuCiAqIFRoaXMgYWxzbyBwcmV2ZW50cyBmcm9tIGNhbGxpbmcgYXV0b2xvYWRlciBpZiB0aGUgY2xhc3MgZG9lc24ndCBleGlzdC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCA8aT5vYmplY3Q8L2k+LAogKiBiZWxvbmdzIHRvIGEgY2xhc3Mgd2hpY2ggaXMgYSBzdWJjbGFzcyBvZgogKiA8aT5jbGFzc19uYW1lPC9pPiwgZmFsc2Ugb3RoZXJ3aXNlLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBpc19zdWJjbGFzc19vZihtaXhlZCAkb2JqZWN0X29yX2NsYXNzLCBzdHJpbmcgJGNsYXNzLCBib29sICRhbGxvd19zdHJpbmcgPSB0cnVlKTogYm9vbCB7fQoKLyoqCiAqIENoZWNrcyBpZiB0aGUgb2JqZWN0IGlzIG9mIHRoaXMgY2xhc3Mgb3IgaGFzIHRoaXMgY2xhc3MgYXMgb25lIG9mIGl0cyBwYXJlbnRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaXMtYS5waHAKICogQHBhcmFtIG9iamVjdHxzdHJpbmcgJG9iamVjdF9vcl9jbGFzcyA8cD4KICogVGhlIHRlc3RlZCBvYmplY3QKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRjbGFzcyA8cD4KICogVGhlIGNsYXNzIG5hbWUKICogPC9wPgogKiBAcGFyYW0gYm9vbCAkYWxsb3dfc3RyaW5nIFtvcHRpb25hbF0gPHA+CiAqIElmIHRoaXMgcGFyYW1ldGVyIHNldCB0byA8Yj5GQUxTRTwvYj4sIHN0cmluZyBjbGFzcyBuYW1lIGFzIDxlbT48Yj5vYmplY3Q8L2I+PC9lbT4KICogaXMgbm90IGFsbG93ZWQuIFRoaXMgYWxzbyBwcmV2ZW50cyBmcm9tIGNhbGxpbmcgYXV0b2xvYWRlciBpZiB0aGUgY2xhc3MgZG9lc24ndCBleGlzdC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlIG9iamVjdCBpcyBvZiB0aGlzIGNsYXNzIG9yIGhhcyB0aGlzIGNsYXNzIGFzIG9uZSBvZgogKiBpdHMgcGFyZW50cywgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICovCiNbUHVyZV0KZnVuY3Rpb24gaXNfYShtaXhlZCAkb2JqZWN0X29yX2NsYXNzLCBzdHJpbmcgJGNsYXNzLCBib29sICRhbGxvd19zdHJpbmcgPSBmYWxzZSk6IGJvb2wge30KCi8qKgogKiBHZXQgdGhlIGRlZmF1bHQgcHJvcGVydGllcyBvZiB0aGUgY2xhc3MKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXQtY2xhc3MtdmFycy5waHAKICogQHBhcmFtIHN0cmluZyAkY2xhc3MgPHA+CiAqIFRoZSBjbGFzcyBuYW1lCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBkZWNsYXJlZCBwcm9wZXJ0aWVzIHZpc2libGUgZnJvbSB0aGUKICogY3VycmVudCBzY29wZSwgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlLgogKiBUaGUgcmVzdWx0aW5nIGFycmF5IGVsZW1lbnRzIGFyZSBpbiB0aGUgZm9ybSBvZgogKiB2YXJuYW1lID0+IHZhbHVlLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBnZXRfY2xhc3NfdmFycyhzdHJpbmcgJGNsYXNzKTogYXJyYXkge30KCi8qKgogKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbiBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXQtb2JqZWN0LXZhcnMucGhwCiAqIEBwYXJhbSBvYmplY3QgJG9iamVjdCA8cD4KICogQW4gb2JqZWN0IGluc3RhbmNlLgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXkgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgZGVmaW5lZCBvYmplY3QgYWNjZXNzaWJsZSBub24tc3RhdGljIHByb3BlcnRpZXMKICogZm9yIHRoZSBzcGVjaWZpZWQgPGk+b2JqZWN0PC9pPiBpbiBzY29wZS4gSWYgYSBwcm9wZXJ0eSBoYXZlCiAqIG5vdCBiZWVuIGFzc2lnbmVkIGEgdmFsdWUsIGl0IHdpbGwgYmUgcmV0dXJuZWQgd2l0aCBhIG51bGwgdmFsdWUuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGdldF9vYmplY3RfdmFycyhvYmplY3QgJG9iamVjdCk6IGFycmF5IHt9CgovKioKICogR2V0cyB0aGUgY2xhc3MgbWV0aG9kcycgbmFtZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXQtY2xhc3MtbWV0aG9kcy5waHAKICogQHBhcmFtIG9iamVjdHxzdHJpbmcgJG9iamVjdF9vcl9jbGFzcyA8cD4KICogVGhlIGNsYXNzIG5hbWUgb3IgYW4gb2JqZWN0IGluc3RhbmNlCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmdbXSBhbiBhcnJheSBvZiBtZXRob2QgbmFtZXMgZGVmaW5lZCBmb3IgdGhlIGNsYXNzIHNwZWNpZmllZCBieQogKiA8aT5jbGFzc19uYW1lPC9pPi4gSW4gY2FzZSBvZiBhbiBlcnJvciwgaXQgcmV0dXJucyBudWxsLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBnZXRfY2xhc3NfbWV0aG9kcyhvYmplY3R8c3RyaW5nICRvYmplY3Rfb3JfY2xhc3MpOiBhcnJheSB7fQoKLyoqCiAqIEdlbmVyYXRlcyBhIHVzZXItbGV2ZWwgZXJyb3Ivd2FybmluZy9ub3RpY2UgbWVzc2FnZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnRyaWdnZXItZXJyb3IucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgPHA+CiAqIFRoZSBkZXNpZ25hdGVkIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgZXJyb3IuIEl0J3MgbGltaXRlZCB0byAxMDI0CiAqIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLiBBbnkgYWRkaXRpb25hbCBjaGFyYWN0ZXJzIGJleW9uZCAxMDI0IHdpbGwgYmUKICogdHJ1bmNhdGVkLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGVycm9yX2xldmVsIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBkZXNpZ25hdGVkIGVycm9yIHR5cGUgZm9yIHRoaXMgZXJyb3IuIEl0IG9ubHkgd29ya3Mgd2l0aCB0aGUgRV9VU0VSCiAqIGZhbWlseSBvZiBjb25zdGFudHMsIGFuZCB3aWxsIGRlZmF1bHQgdG8gPGI+RV9VU0VSX05PVElDRTwvYj4uCiAqIDwvcD4KICogQHJldHVybiBib29sIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBpZiB3cm9uZyA8aT5lcnJvcl90eXBlPC9pPiBpcwogKiBzcGVjaWZpZWQsIHRydWUgb3RoZXJ3aXNlLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC40JyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQpmdW5jdGlvbiB0cmlnZ2VyX2Vycm9yKHN0cmluZyAkbWVzc2FnZSwgaW50ICRlcnJvcl9sZXZlbCA9IEVfVVNFUl9OT1RJQ0UpIHt9CgovKioKICogQWxpYXMgb2YgPGI+dHJpZ2dlcl9lcnJvcjwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi51c2VyLWVycm9yLnBocAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAqIEBwYXJhbSBpbnQgJGVycm9yX2xldmVsIFtvcHRpb25hbF0KICogQHJldHVybiBib29sIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBpZiB3cm9uZyA8aT5lcnJvcl90eXBlPC9pPiBpcwogKiBzcGVjaWZpZWQsIHRydWUgb3RoZXJ3aXNlLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC40JyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQpmdW5jdGlvbiB1c2VyX2Vycm9yKHN0cmluZyAkbWVzc2FnZSwgaW50ICRlcnJvcl9sZXZlbCA9IEVfVVNFUl9OT1RJQ0UpIHt9CgovKioKICogU2V0cyBhIHVzZXItZGVmaW5lZCBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc2V0LWVycm9yLWhhbmRsZXIucGhwCiAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICRjYWxsYmFjayA8cD4KICogVGhlIHVzZXIgZnVuY3Rpb24gbmVlZHMgdG8gYWNjZXB0IHR3byBwYXJhbWV0ZXJzOiB0aGUgZXJyb3IgY29kZSwgYW5kIGEKICogc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGVycm9yLiBUaGVuIHRoZXJlIGFyZSB0aHJlZSBvcHRpb25hbCBwYXJhbWV0ZXJzCiAqIHRoYXQgbWF5IGJlIHN1cHBsaWVkOiB0aGUgZmlsZW5hbWUgaW4gd2hpY2ggdGhlIGVycm9yIG9jY3VycmVkLCB0aGUKICogbGluZSBudW1iZXIgaW4gd2hpY2ggdGhlIGVycm9yIG9jY3VycmVkLCBhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlCiAqIGVycm9yIG9jY3VycmVkIChhbiBhcnJheSB0aGF0IHBvaW50cyB0byB0aGUgYWN0aXZlIHN5bWJvbCB0YWJsZSBhdCB0aGUKICogcG9pbnQgdGhlIGVycm9yIG9jY3VycmVkKS4gVGhlIGZ1bmN0aW9uIGNhbiBiZSBzaG93biBhczoKICogPC9wPgogKiA8cD4KICogPGI+aGFuZGxlcjwvYj4KICogPGI+aW50PGk+ZXJybm88L2k+PC9iPgogKiA8Yj5zdHJpbmc8aT5lcnJzdHI8L2k+PC9iPgogKiA8Yj5zdHJpbmc8aT5lcnJmaWxlPC9pPjwvYj4KICogPGI+aW50PGk+ZXJybGluZTwvaT48L2I+CiAqIDxiPmFycmF5PGk+ZXJyY29udGV4dDwvaT48L2I+CiAqIDxpPmVycm5vPC9pPgogKiBUaGUgZmlyc3QgcGFyYW1ldGVyLCA8aT5lcnJubzwvaT4sIGNvbnRhaW5zIHRoZQogKiBsZXZlbCBvZiB0aGUgZXJyb3IgcmFpc2VkLCBhcyBhbiBpbnRlZ2VyLjwvcD4KICogVGhlIHVzZXIgZnVuY3Rpb24gc2hvdWxkIHN0b3AgZXhlY3V0aW9uIGlmIG5lY2Vzc2FyeSBieSBjYWxsaW5nIGBleGl0KClgLgogKiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHZhbHVlIG90aGVyIHRoYW4gZmFsc2UsIHNjcmlwdCBleGVjdXRpb24gd2lsbAogKiBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0YXRlbWVudCBhZnRlciB0aGUgb25lIHRoYXQgY2F1c2VkIGFuIGVycm9yLgogKiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSwgdGhlIHN0YW5kYXJkIFBIUCBlcnJvciBoYW5kbGVyIGlzIGNhbGxlZC4KICogQHBhcmFtIGludCAkZXJyb3JfbGV2ZWxzIFtvcHRpb25hbF0gPHA+CiAqIENhbiBiZSB1c2VkIHRvIG1hc2sgdGhlIHRyaWdnZXJpbmcgb2YgdGhlCiAqIDxpPmVycm9yX2hhbmRsZXI8L2k+IGZ1bmN0aW9uIGp1c3QgbGlrZSB0aGUgZXJyb3JfcmVwb3J0aW5nIGluaSBzZXR0aW5nCiAqIGNvbnRyb2xzIHdoaWNoIGVycm9ycyBhcmUgc2hvd24uIFdpdGhvdXQgdGhpcyBtYXNrIHNldCB0aGUKICogPGk+ZXJyb3JfaGFuZGxlcjwvaT4gd2lsbCBiZSBjYWxsZWQgZm9yIGV2ZXJ5IGVycm9yCiAqIHJlZ2FyZGxlc3MgdG8gdGhlIHNldHRpbmcgb2YgdGhlIGVycm9yX3JlcG9ydGluZyBzZXR0aW5nLgogKiA8L3A+CiAqIEByZXR1cm4gY2FsbGFibGV8bnVsbCBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgZXJyb3IgaGFuZGxlciAoaWYgYW55KS4gSWYKICogdGhlIGJ1aWx0LWluIGVycm9yIGhhbmRsZXIgaXMgdXNlZCBudWxsIGlzIHJldHVybmVkLiBudWxsIGlzIGFsc28gcmV0dXJuZWQKICogaW4gY2FzZSBvZiBhbiBlcnJvciBzdWNoIGFzIGFuIGludmFsaWQgY2FsbGJhY2suIElmIHRoZSBwcmV2aW91cyBlcnJvciBoYW5kbGVyCiAqIHdhcyBhIGNsYXNzIG1ldGhvZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBpbmRleGVkIGFycmF5IHdpdGggdGhlIGNsYXNzCiAqIGFuZCB0aGUgbWV0aG9kIG5hbWUuCiAqCiAqIE5vdGUgdGhhdCBlcnJvcl9oYW5kbGVyIGNoYWluaW5nIGlzIHBvc3NpYmxlIGJ5IHBhc3NpbmcgdGhlIG91dHB1dCB2YWx1ZSBhcyBhIHJlZmVyZW5jZToKICogYGBgCiAqICRwcmV2aW91c0Vycm9ySGFuZGxlciA9IHNldF9lcnJvcl9oYW5kbGVyKAogKiAgICAgc3RhdGljIGZ1bmN0aW9uIChpbnQgJGVyck5vLCBzdHJpbmcgJGVycnN0ciwgc3RyaW5nICRlcnJGaWxlLCBpbnQgJGVyckxpbmUpIHVzZSAoJiRwcmV2aW91c0Vycm9ySGFuZGxlcik6IGJvb2wgewogKiAgICAgICAgIC8vIEhhbmRsZSBzcGVjaWZpYyBzY2VuYXJpb3MKICoKICogICAgICAgICByZXR1cm4gJHByZXZpb3VzRXJyb3JIYW5kbGVyICE9PSBudWxsID8gKGJvb2wpICRwcmV2aW91c0Vycm9ySGFuZGxlciguLi5mdW5jX2dldF9hcmdzKCkpIDogZmFsc2U7CiAqICAgICB9CiAqICk7CiAqIGBgYAogKi8KZnVuY3Rpb24gc2V0X2Vycm9yX2hhbmRsZXIoP2NhbGxhYmxlICRjYWxsYmFjaywgaW50ICRlcnJvcl9sZXZlbHMgPSBFX0FMTHxFX1NUUklDVCkge30KCi8qKgogKiBSZXN0b3JlcyB0aGUgcHJldmlvdXMgZXJyb3IgaGFuZGxlciBmdW5jdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnJlc3RvcmUtZXJyb3ItaGFuZGxlci5waHAKICogQHJldHVybiBib29sIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgdHJ1ZS4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMicgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KZnVuY3Rpb24gcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk6IGJvb2wge30KCi8qKgogKiBTZXRzIGEgdXNlci1kZWZpbmVkIGV4Y2VwdGlvbiBoYW5kbGVyIGZ1bmN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc2V0LWV4Y2VwdGlvbi1oYW5kbGVyLnBocAogKiBAcGFyYW0gY2FsbGFibGV8bnVsbCAkY2FsbGJhY2sgPHA+CiAqIE5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGFuIHVuY2F1Z2h0IGV4Y2VwdGlvbiBvY2N1cnMuCiAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBkZWZpbmVkIGJlZm9yZSBjYWxsaW5nCiAqIDxiPnNldF9leGNlcHRpb25faGFuZGxlcjwvYj4uIFRoaXMgaGFuZGxlciBmdW5jdGlvbgogKiBuZWVkcyB0byBhY2NlcHQgb25lIHBhcmFtZXRlciwgd2hpY2ggd2lsbCBiZSB0aGUgZXhjZXB0aW9uIG9iamVjdCB0aGF0CiAqIHdhcyB0aHJvd24uCiAqIE5VTEwgbWF5IGJlIHBhc3NlZCBpbnN0ZWFkLCB0byByZXNldCB0aGlzIGhhbmRsZXIgdG8gaXRzIGRlZmF1bHQgc3RhdGUuCiAqIDwvcD4KICogQHJldHVybiBjYWxsYWJsZXxudWxsIHRoZSBuYW1lIG9mIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgZXhjZXB0aW9uIGhhbmRsZXIsIG9yIG51bGwgb24gZXJyb3IuIElmCiAqIG5vIHByZXZpb3VzIGhhbmRsZXIgd2FzIGRlZmluZWQsIG51bGwgaXMgYWxzbyByZXR1cm5lZC4KICovCmZ1bmN0aW9uIHNldF9leGNlcHRpb25faGFuZGxlcig/Y2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKLyoqCiAqIFJlc3RvcmVzIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgZXhjZXB0aW9uIGhhbmRsZXIgZnVuY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5yZXN0b3JlLWV4Y2VwdGlvbi1oYW5kbGVyLnBocAogKiBAcmV0dXJuIGJvb2wgVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyB0cnVlLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4yJyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQpmdW5jdGlvbiByZXN0b3JlX2V4Y2VwdGlvbl9oYW5kbGVyKCk6IGJvb2wge30KCi8qKgogKiBSZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIG5hbWUgb2YgdGhlIGRlZmluZWQgY2xhc3NlcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmdldC1kZWNsYXJlZC1jbGFzc2VzLnBocAogKiBAcmV0dXJuIHN0cmluZ1tdIGFuIGFycmF5IG9mIHRoZSBuYW1lcyBvZiB0aGUgZGVjbGFyZWQgY2xhc3NlcyBpbiB0aGUgY3VycmVudCBzY3JpcHQuCiAqIDxwPgogKiBOb3RlIHRoYXQgZGVwZW5kaW5nIG9uIHdoYXQgZXh0ZW5zaW9ucyB5b3UgaGF2ZSBjb21waWxlZCBvcgogKiBsb2FkZWQgaW50byBQSFAsIGFkZGl0aW9uYWwgY2xhc3NlcyBjb3VsZCBiZSBwcmVzZW50LiBUaGlzIG1lYW5zIHRoYXQKICogeW91IHdpbGwgbm90IGJlIGFibGUgdG8gZGVmaW5lIHlvdXIgb3duIGNsYXNzZXMgdXNpbmcgdGhlc2UKICogbmFtZXMuIFRoZXJlIGlzIGEgbGlzdCBvZiBwcmVkZWZpbmVkIGNsYXNzZXMgaW4gdGhlIFByZWRlZmluZWQgQ2xhc3NlcyBzZWN0aW9uIG9mCiAqIHRoZSBhcHBlbmRpY2VzLgogKiA8L3A+CiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIGdldF9kZWNsYXJlZF9jbGFzc2VzKCk6IGFycmF5IHt9CgovKioKICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgZGVjbGFyZWQgaW50ZXJmYWNlcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmdldC1kZWNsYXJlZC1pbnRlcmZhY2VzLnBocAogKiBAcmV0dXJuIHN0cmluZ1tdIGFuIGFycmF5IG9mIHRoZSBuYW1lcyBvZiB0aGUgZGVjbGFyZWQgaW50ZXJmYWNlcyBpbiB0aGUgY3VycmVudAogKiBzY3JpcHQuCiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIGdldF9kZWNsYXJlZF9pbnRlcmZhY2VzKCk6IGFycmF5IHt9CgovKioKICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgZGVjbGFyZWQgdHJhaXRzCiAqIEByZXR1cm4gYXJyYXkgd2l0aCBuYW1lcyBvZiBhbGwgZGVjbGFyZWQgdHJhaXRzIGluIHZhbHVlcy4gUmV0dXJucyBOVUxMIGluIGNhc2Ugb2YgYSBmYWlsdXJlLgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXQtZGVjbGFyZWQtdHJhaXRzLnBocAogKiBAc2VlIGNsYXNzX3VzZXMoKQogKiBAc2luY2UgNS40CiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIGdldF9kZWNsYXJlZF90cmFpdHMoKTogYXJyYXkge30KCi8qKgogKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBkZWZpbmVkIGZ1bmN0aW9ucwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmdldC1kZWZpbmVkLWZ1bmN0aW9ucy5waHAKICogQHBhcmFtIGJvb2wgJGV4Y2x1ZGVfZGlzYWJsZWQgW29wdGlvbmFsXSBXaGV0aGVyIGRpc2FibGVkIGZ1bmN0aW9ucyBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlLgogKiBAcmV0dXJuIGFycmF5IGFuIG11bHRpZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyBhIGxpc3Qgb2YgYWxsIGRlZmluZWQKICogZnVuY3Rpb25zLCBib3RoIGJ1aWx0LWluIChpbnRlcm5hbCkgYW5kIHVzZXItZGVmaW5lZC4gVGhlIGludGVybmFsCiAqIGZ1bmN0aW9ucyB3aWxsIGJlIGFjY2Vzc2libGUgdmlhICRhcnJbImludGVybmFsIl0sIGFuZAogKiB0aGUgdXNlciBkZWZpbmVkIG9uZXMgdXNpbmcgJGFyclsidXNlciJdIChzZWUgZXhhbXBsZQogKiBiZWxvdykuCiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIGdldF9kZWZpbmVkX2Z1bmN0aW9ucygjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjEnKV0gYm9vbCAkZXhjbHVkZV9kaXNhYmxlZCA9IHRydWUpOiBhcnJheSB7fQoKLyoqCiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGRlZmluZWQgdmFyaWFibGVzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ2V0LWRlZmluZWQtdmFycy5waHAKICogQHJldHVybiBhcnJheSBBIG11bHRpZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBhbGwgdGhlIHZhcmlhYmxlcy4KICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gZ2V0X2RlZmluZWRfdmFycygpOiBhcnJheSB7fQoKLyoqCiAqIENyZWF0ZSBhbiBhbm9ueW1vdXMgKGxhbWJkYS1zdHlsZSkgZnVuY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5jcmVhdGUtZnVuY3Rpb24ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGFyZ3MgPHA+CiAqIFRoZSBmdW5jdGlvbiBhcmd1bWVudHMuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY29kZSA8cD4KICogVGhlIGZ1bmN0aW9uIGNvZGUuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgYSB1bmlxdWUgZnVuY3Rpb24gbmFtZSBhcyBhIHN0cmluZywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqIEByZW1vdmVkIDguMAogKi8KI1tEZXByZWNhdGVkKHJlYXNvbjogIlVzZSBhbm9ueW1vdXMgZnVuY3Rpb25zIGluc3RlYWQiLCBzaW5jZTogIjcuMiIpXQpmdW5jdGlvbiBjcmVhdGVfZnVuY3Rpb24oc3RyaW5nICRhcmdzLCBzdHJpbmcgJGNvZGUpOiBmYWxzZXxzdHJpbmcge30KCi8qKgogKiBSZXR1cm5zIHRoZSByZXNvdXJjZSB0eXBlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ2V0LXJlc291cmNlLXR5cGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzb3VyY2UgPHA+CiAqIFRoZSBldmFsdWF0ZWQgcmVzb3VyY2UgaGFuZGxlLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIElmIHRoZSBnaXZlbiA8aT5oYW5kbGU8L2k+IGlzIGEgcmVzb3VyY2UsIHRoaXMgZnVuY3Rpb24KICogd2lsbCByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIGl0cyB0eXBlLiBJZiB0aGUgdHlwZSBpcyBub3QgaWRlbnRpZmllZAogKiBieSB0aGlzIGZ1bmN0aW9uLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIHN0cmluZwogKiBVbmtub3duLgogKi8KZnVuY3Rpb24gZ2V0X3Jlc291cmNlX3R5cGUoJHJlc291cmNlKTogc3RyaW5nIHt9CgovKioKICogUmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBuYW1lcyBvZiBhbGwgbW9kdWxlcyBjb21waWxlZCBhbmQgbG9hZGVkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ2V0LWxvYWRlZC1leHRlbnNpb25zLnBocAogKiBAcGFyYW0gYm9vbCAkemVuZF9leHRlbnNpb25zIFtvcHRpb25hbF0gPHA+CiAqIE9ubHkgcmV0dXJuIFplbmQgZXh0ZW5zaW9ucywgaWYgbm90IHRoZW4gcmVndWxhciBleHRlbnNpb25zLCBsaWtlCiAqIG15c3FsaSBhcmUgbGlzdGVkLiBEZWZhdWx0cyB0byBmYWxzZSAocmV0dXJuIHJlZ3VsYXIgZXh0ZW5zaW9ucykuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmdbXSBhbiBpbmRleGVkIGFycmF5IG9mIGFsbCB0aGUgbW9kdWxlcyBuYW1lcy4KICovCiNbUHVyZV0KZnVuY3Rpb24gZ2V0X2xvYWRlZF9leHRlbnNpb25zKGJvb2wgJHplbmRfZXh0ZW5zaW9ucyA9IGZhbHNlKTogYXJyYXkge30KCi8qKgogKiBGaW5kIG91dCB3aGV0aGVyIGFuIGV4dGVuc2lvbiBpcyBsb2FkZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5leHRlbnNpb24tbG9hZGVkLnBocAogKiBAcGFyYW0gc3RyaW5nICRleHRlbnNpb24gPHA+CiAqIFRoZSBleHRlbnNpb24gbmFtZS4KICogPC9wPgogKiA8cD4KICogWW91IGNhbiBzZWUgdGhlIG5hbWVzIG9mIHZhcmlvdXMgZXh0ZW5zaW9ucyBieSB1c2luZwogKiA8Yj5waHBpbmZvPC9iPiBvciBpZiB5b3UncmUgdXNpbmcgdGhlCiAqIENHSSBvciBDTEkgdmVyc2lvbiBvZgogKiBQSFAgeW91IGNhbiB1c2UgdGhlIC1tIHN3aXRjaCB0bwogKiBsaXN0IGFsbCBhdmFpbGFibGUgZXh0ZW5zaW9uczoKICogPHByZT4KICogJCBwaHAgLW0KICogW1BIUCBNb2R1bGVzXQogKiB4bWwKICogdG9rZW5pemVyCiAqIHN0YW5kYXJkCiAqIHNvY2tldHMKICogc2Vzc2lvbgogKiBwb3NpeAogKiBwY3JlCiAqIG92ZXJsb2FkCiAqIG15c3FsCiAqIG1ic3RyaW5nCiAqIGN0eXBlCiAqIFtaZW5kIE1vZHVsZXNdCiAqIDwvcHJlPgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBleHRlbnNpb24gaWRlbnRpZmllZCBieSA8aT5uYW1lPC9pPgogKiBpcyBsb2FkZWQsIGZhbHNlIG90aGVyd2lzZS4KICovCiNbUHVyZV0KZnVuY3Rpb24gZXh0ZW5zaW9uX2xvYWRlZChzdHJpbmcgJGV4dGVuc2lvbik6IGJvb2wge30KCi8qKgogKiBSZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIG5hbWVzIG9mIHRoZSBmdW5jdGlvbnMgb2YgYSBtb2R1bGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXQtZXh0ZW5zaW9uLWZ1bmNzLnBocAogKiBAcGFyYW0gc3RyaW5nICRleHRlbnNpb24gPHA+CiAqIFRoZSBtb2R1bGUgbmFtZS4KICogPC9wPgogKiA8cD4KICogVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBpbiBsb3dlcmNhc2UuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmdbXXxmYWxzZSBhbiBhcnJheSB3aXRoIGFsbCB0aGUgZnVuY3Rpb25zLCBvciBmYWxzZSBpZgogKiA8aT5tb2R1bGVfbmFtZTwvaT4gaXMgbm90IGEgdmFsaWQgZXh0ZW5zaW9uLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBnZXRfZXh0ZW5zaW9uX2Z1bmNzKHN0cmluZyAkZXh0ZW5zaW9uKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggdGhlIG5hbWVzIG9mIGFsbCB0aGUgY29uc3RhbnRzIGFuZCB0aGVpciB2YWx1ZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXQtZGVmaW5lZC1jb25zdGFudHMucGhwCiAqIEBwYXJhbSBib29sICRjYXRlZ29yaXplIFtvcHRpb25hbF0gPHA+CiAqIENhdXNpbmcgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYSBtdWx0aS1kaW1lbnNpb25hbAogKiBhcnJheSB3aXRoIGNhdGVnb3JpZXMgaW4gdGhlIGtleXMgb2YgdGhlIGZpcnN0IGRpbWVuc2lvbiBhbmQgY29uc3RhbnRzCiAqIGFuZCB0aGVpciB2YWx1ZXMgaW4gdGhlIHNlY29uZCBkaW1lbnNpb24uCiAqIDxjb2RlPgogKiBkZWZpbmUoIk1ZX0NPTlNUQU5UIiwgMSk7CiAqIHByaW50X3IoZ2V0X2RlZmluZWRfY29uc3RhbnRzKHRydWUpKTsKICogPC9jb2RlPgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dCBzb21ldGhpbmcgc2ltaWxhciB0bzoKICogPHByZT4KICogQXJyYXkKICogKAogKiBbQ29yZV0gPT4gQXJyYXkKICogKAogKiBbRV9FUlJPUl0gPT4gMQogKiBbRV9XQVJOSU5HXSA9PiAyCiAqIFtFX1BBUlNFXSA9PiA0CiAqIFtFX05PVElDRV0gPT4gOAogKiBbRV9DT1JFX0VSUk9SXSA9PiAxNgogKiBbRV9DT1JFX1dBUk5JTkddID0+IDMyCiAqIFtFX0NPTVBJTEVfRVJST1JdID0+IDY0CiAqIFtFX0NPTVBJTEVfV0FSTklOR10gPT4gMTI4CiAqIFtFX1VTRVJfRVJST1JdID0+IDI1NgogKiBbRV9VU0VSX1dBUk5JTkddID0+IDUxMgogKiBbRV9VU0VSX05PVElDRV0gPT4gMTAyNAogKiBbRV9TVFJJQ1RdID0+IDIwNDgKICogW0VfUkVDT1ZFUkFCTEVfRVJST1JdID0+IDQwOTYKICogW0VfREVQUkVDQVRFRF0gPT4gODE5MgogKiBbRV9VU0VSX0RFUFJFQ0FURURdID0+IDE2Mzg0CiAqIFtFX0FMTF0gPT4gMzI3NjcKICogW1RSVUVdID0+IDEKICogKQogKiBbcGNyZV0gPT4gQXJyYXkKICogKAogKiBbUFJFR19QQVRURVJOX09SREVSXSA9PiAxCiAqIFtQUkVHX1NFVF9PUkRFUl0gPT4gMgogKiBbUFJFR19PRkZTRVRfQ0FQVFVSRV0gPT4gMjU2CiAqIFtQUkVHX1NQTElUX05PX0VNUFRZXSA9PiAxCiAqIFtQUkVHX1NQTElUX0RFTElNX0NBUFRVUkVdID0+IDIKICogW1BSRUdfU1BMSVRfT0ZGU0VUX0NBUFRVUkVdID0+IDQKICogW1BSRUdfR1JFUF9JTlZFUlRdID0+IDEKICogKQogKiBbdXNlcl0gPT4gQXJyYXkKICogKAogKiBbTVlfQ09OU1RBTlRdID0+IDEKICogKQogKiApCiAqIDwvcHJlPgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXkKICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gZ2V0X2RlZmluZWRfY29uc3RhbnRzKGJvb2wgJGNhdGVnb3JpemUgPSBmYWxzZSk6IGFycmF5IHt9CgovKioKICogR2VuZXJhdGVzIGEgYmFja3RyYWNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGVidWctYmFja3RyYWNlLnBocAogKiBAcGFyYW0gaW50ICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAqIEFzIG9mIDUuMy42LCB0aGlzIHBhcmFtZXRlciBpcyBhIGJpdG1hc2sgZm9yIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8L3A+CiAqIDxiPmRlYnVnX2JhY2t0cmFjZTwvYj4gb3B0aW9ucwogKiA8dGFibGU+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5ERUJVR19CQUNLVFJBQ0VfUFJPVklERV9PQkpFQ1Q8L3RkPgogKiA8dGQ+CiAqIFdoZXRoZXIgb3Igbm90IHRvIHBvcHVsYXRlIHRoZSAib2JqZWN0IiBpbmRleC4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkRFQlVHX0JBQ0tUUkFDRV9JR05PUkVfQVJHUzwvdGQ+CiAqIDx0ZD4KICogV2hldGhlciBvciBub3QgdG8gb21pdCB0aGUgImFyZ3MiIGluZGV4LCBhbmQgdGh1cyBhbGwgdGhlIGZ1bmN0aW9uL21ldGhvZCBhcmd1bWVudHMsCiAqIHRvIHNhdmUgbWVtb3J5LgogKiA8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiA8cD4KICogQmVmb3JlIDUuMy42LCB0aGUgb25seSB2YWx1ZXMgcmVjb2duaXplZCBhcmUgdHJ1ZSBvciBmYWxzZSwgd2hpY2ggYXJlIHRoZSBzYW1lIGFzCiAqIHNldHRpbmcgb3Igbm90IHNldHRpbmcgdGhlIDxiPkRFQlVHX0JBQ0tUUkFDRV9QUk9WSURFX09CSkVDVDwvYj4gb3B0aW9uIHJlc3BlY3RpdmVseS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRsaW1pdCBbb3B0aW9uYWxdIDxwPgogKiBBcyBvZiA1LjQuMCwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gbGltaXQgdGhlIG51bWJlciBvZiBzdGFjayBmcmFtZXMgcmV0dXJuZWQuCiAqIEJ5IGRlZmF1bHQgKDxpPmxpbWl0PC9pPj0wKSBpdCByZXR1cm5zIGFsbCBzdGFjayBmcmFtZXMuCiAqIDwvcD4KICogQHJldHVybiBhcnJheSA8cD5hbiBhcnJheSBvZiBhc3NvY2lhdGl2ZSBhcnJheXMuIFRoZSBwb3NzaWJsZSByZXR1cm5lZCBlbGVtZW50cwogKiBhcmUgYXMgZm9sbG93czoKICogPC9wPgogKiA8cD4KICogUG9zc2libGUgcmV0dXJuZWQgZWxlbWVudHMgZnJvbSA8Yj5kZWJ1Z19iYWNrdHJhY2U8L2I+CiAqIDwvcD4KICogPHRhYmxlPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+TmFtZTwvdGQ+CiAqIDx0ZD5UeXBlPC90ZD4KICogPHRkPkRlc2NyaXB0aW9uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmZ1bmN0aW9uPC90ZD4KICogPHRkPnN0cmluZzwvdGQ+CiAqIDx0ZD4KICogVGhlIGN1cnJlbnQgZnVuY3Rpb24gbmFtZS4gU2VlIGFsc28KICogX19GVU5DVElPTl9fLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+bGluZTwvdGQ+CiAqIDx0ZD5pbnRlZ2VyPC90ZD4KICogPHRkPgogKiBUaGUgY3VycmVudCBsaW5lIG51bWJlci4gU2VlIGFsc28KICogX19MSU5FX18uCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5maWxlPC90ZD4KICogPHRkPnN0cmluZzwvdGQ+CiAqIDx0ZD4KICogVGhlIGN1cnJlbnQgZmlsZSBuYW1lLiBTZWUgYWxzbwogKiBfX0ZJTEVfXy4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmNsYXNzPC90ZD4KICogPHRkPnN0cmluZzwvdGQ+CiAqIDx0ZD4KICogVGhlIGN1cnJlbnQgY2xhc3MgbmFtZS4gU2VlIGFsc28KICogX19DTEFTU19fCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5vYmplY3Q8L3RkPgogKiA8dGQ+b2JqZWN0PC90ZD4KICogPHRkPgogKiBUaGUgY3VycmVudCBvYmplY3QuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD50eXBlPC90ZD4KICogPHRkPnN0cmluZzwvdGQ+CiAqIDx0ZD4KICogVGhlIGN1cnJlbnQgY2FsbCB0eXBlLiBJZiBhIG1ldGhvZCBjYWxsLCAiLT4iIGlzIHJldHVybmVkLiBJZiBhIHN0YXRpYwogKiBtZXRob2QgY2FsbCwgIjo6IiBpcyByZXR1cm5lZC4gSWYgYSBmdW5jdGlvbiBjYWxsLCBub3RoaW5nIGlzIHJldHVybmVkLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+YXJnczwvdGQ+CiAqIDx0ZD5hcnJheTwvdGQ+CiAqIDx0ZD4KICogSWYgaW5zaWRlIGEgZnVuY3Rpb24sIHRoaXMgbGlzdHMgdGhlIGZ1bmN0aW9ucyBhcmd1bWVudHMuIElmCiAqIGluc2lkZSBhbiBpbmNsdWRlZCBmaWxlLCB0aGlzIGxpc3RzIHRoZSBpbmNsdWRlZCBmaWxlIG5hbWUocykuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqLwpmdW5jdGlvbiBkZWJ1Z19iYWNrdHJhY2UoaW50ICRvcHRpb25zID0gREVCVUdfQkFDS1RSQUNFX1BST1ZJREVfT0JKRUNULCBpbnQgJGxpbWl0ID0gMCk6IGFycmF5IHt9CgovKioKICogUHJpbnRzIGEgYmFja3RyYWNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGVidWctcHJpbnQtYmFja3RyYWNlLnBocAogKiBAcGFyYW0gaW50ICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAqIEFzIG9mIDUuMy42LCB0aGlzIHBhcmFtZXRlciBpcyBhIGJpdG1hc2sgZm9yIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKICogPGI+ZGVidWdfcHJpbnRfYmFja3RyYWNlPC9iPiBvcHRpb25zCiAqIDx0YWJsZT4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPkRFQlVHX0JBQ0tUUkFDRV9JR05PUkVfQVJHUzwvYj48L3RkPgogKiA8dGQ+CiAqIFdoZXRoZXIgb3Igbm90IHRvIG9taXQgdGhlICJhcmdzIiBpbmRleCwgYW5kIHRodXMgYWxsIHRoZSBmdW5jdGlvbi9tZXRob2QgYXJndW1lbnRzLAogKiB0byBzYXZlIG1lbW9yeS4KICogPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICogPC9wPgogKiBAcGFyYW0gaW50ICRsaW1pdCBbb3B0aW9uYWxdIDxwPgogKiBBcyBvZiA1LjQuMCwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gbGltaXQgdGhlIG51bWJlciBvZiBzdGFjayBmcmFtZXMgcHJpbnRlZC4KICogQnkgZGVmYXVsdCAoPGk+bGltaXQ8L2k+ID0gMCkgaXQgcHJpbnRzIGFsbCBzdGFjayBmcmFtZXMuCiAqIDwvcD4KICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBkZWJ1Z19wcmludF9iYWNrdHJhY2UoCiAgICBpbnQgJG9wdGlvbnMgPSAwLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4wJyldIGludCAkbGltaXQgPSAwCik6IHZvaWQge30KCi8qKgogKiBGb3JjZXMgY29sbGVjdGlvbiBvZiBhbnkgZXhpc3RpbmcgZ2FyYmFnZSBjeWNsZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nYy1jb2xsZWN0LWN5Y2xlcy5waHAKICogQHJldHVybiBpbnQgbnVtYmVyIG9mIGNvbGxlY3RlZCBjeWNsZXMuCiAqLwpmdW5jdGlvbiBnY19jb2xsZWN0X2N5Y2xlcygpOiBpbnQge30KCi8qKgogKiBSZXR1cm5zIHN0YXR1cyBvZiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNvbGxlY3RvcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmdjLWVuYWJsZWQucGhwCiAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuCiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIGdjX2VuYWJsZWQoKTogYm9vbCB7fQoKLyoqCiAqIEFjdGl2YXRlcyB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNvbGxlY3RvcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmdjLWVuYWJsZS5waHAKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBnY19lbmFibGUoKTogdm9pZCB7fQoKLyoqCiAqIERlYWN0aXZhdGVzIHRoZSBjaXJjdWxhciByZWZlcmVuY2UgY29sbGVjdG9yCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ2MtZGlzYWJsZS5waHAKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBnY19kaXNhYmxlKCk6IHZvaWQge30KCi8qKgogKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnYXJiYWdlIGNvbGxlY3RvcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmdjLXN0YXR1cy5waHAKICogQHJldHVybiBpbnRbXSBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CiAqIDx1bD4KICogPGxpPiJydW5zIjwvbGk+CiAqIDxsaT4iY29sbGVjdGVkIjwvbGk+CiAqIDxsaT4idGhyZXNob2xkIjwvbGk+CiAqIDxsaT4icm9vdHMiPC9saT4KICogPC91bD4KICogQHNpbmNlIDcuMwogKi8KI1tBcnJheVNoYXBlKFsicnVucyIgPT4gImludCIsICJjb2xsZWN0ZWQiID0+ICJpbnQiLCAidGhyZXNob2xkIiA9PiAiaW50IiwgInJvb3RzIiA9PiAiaW50Il0pXQojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIGdjX3N0YXR1cygpOiBhcnJheSB7fQoKLyoqCiAqIFJlY2xhaW1zIG1lbW9yeSB1c2VkIGJ5IHRoZSBaZW5kIEVuZ2luZSBtZW1vcnkgbWFuYWdlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmdjLW1lbS1jYWNoZXMucGhwCiAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBmcmVlZC4KICogQHNpbmNlIDcuMAogKi8KZnVuY3Rpb24gZ2NfbWVtX2NhY2hlcygpOiBpbnQge30KCi8qKgogKiBSZXR1cm5zIGFjdGl2ZSByZXNvdXJjZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXQtcmVzb3VyY2VzLnBocAogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHR5cGUgW29wdGlvbmFsXTxwPgogKgogKiBJZiBkZWZpbmVkLCB0aGlzIHdpbGwgY2F1c2UgZ2V0X3Jlc291cmNlcygpIHRvIG9ubHkgcmV0dXJuIHJlc291cmNlcyBvZiB0aGUgZ2l2ZW4gdHlwZS4gQSBsaXN0IG9mIHJlc291cmNlIHR5cGVzIGlzIGF2YWlsYWJsZS4KICoKICogSWYgdGhlIHN0cmluZyBVbmtub3duIGlzIHByb3ZpZGVkIGFzIHRoZSB0eXBlLCB0aGVuIG9ubHkgcmVzb3VyY2VzIHRoYXQgYXJlIG9mIGFuIHVua25vd24gdHlwZSB3aWxsIGJlIHJldHVybmVkLgogKgogKiBJZiBvbWl0dGVkLCBhbGwgcmVzb3VyY2VzIHdpbGwgYmUgcmV0dXJuZWQuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZVtdIFJldHVybnMgYW4gYXJyYXkgb2YgY3VycmVudGx5IGFjdGl2ZSByZXNvdXJjZXMsIGluZGV4ZWQgYnkgcmVzb3VyY2UgbnVtYmVyLgogKiBAc2luY2UgNy4wCiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIGdldF9yZXNvdXJjZXMoP3N0cmluZyAkdHlwZSk6IGFycmF5IHt9Cjw/cGhwCgovLyBTdGFydCBvZiByZWFkbGluZSB2LjUuNS4zLTF1YnVudHUyLjEKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxBcnJheVNoYXBlOwoKLyoqCiAqIFJlYWRzIGEgbGluZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnJlYWRsaW5lLnBocAogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByb21wdCBbb3B0aW9uYWxdIDxwPgogKiBZb3UgbWF5IHNwZWNpZnkgYSBzdHJpbmcgd2l0aCB3aGljaCB0byBwcm9tcHQgdGhlIHVzZXIuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgYSBzaW5nbGUgc3RyaW5nIGZyb20gdGhlIHVzZXIuIFRoZSBsaW5lIHJldHVybmVkIGhhcyB0aGUgZW5kaW5nIG5ld2xpbmUgcmVtb3ZlZC4KICogSWYgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvIHJlYWQsIHRoZW4gRkFMU0UgaXMgcmV0dXJuZWQuCiAqLwpmdW5jdGlvbiByZWFkbGluZSg/c3RyaW5nICRwcm9tcHQpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBHZXRzL3NldHMgdmFyaW91cyBpbnRlcm5hbCByZWFkbGluZSB2YXJpYWJsZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5yZWFkbGluZS1pbmZvLnBocAogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHZhcl9uYW1lIFtvcHRpb25hbF0gPHA+CiAqIEEgdmFyaWFibGUgbmFtZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBbb3B0aW9uYWxdIDxwPgogKiBJZiBwcm92aWRlZCwgdGhpcyB3aWxsIGJlIHRoZSBuZXcgdmFsdWUgb2YgdGhlIHNldHRpbmcuCiAqIDwvcD4KICogQHJldHVybiBtaXhlZCBJZiBjYWxsZWQgd2l0aCBubyBwYXJhbWV0ZXJzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgb2YKICogdmFsdWVzIGZvciBhbGwgdGhlIHNldHRpbmcgcmVhZGxpbmUgdXNlcy4gVGhlIGVsZW1lbnRzIHdpbGwKICogYmUgaW5kZXhlZCBieSB0aGUgZm9sbG93aW5nIHZhbHVlczogZG9uZSwgZW5kLCBlcmFzZV9lbXB0eV9saW5lLAogKiBsaWJyYXJ5X3ZlcnNpb24sIGxpbmVfYnVmZmVyLCBtYXJrLCBwZW5kaW5nX2lucHV0LCBwb2ludCwgcHJvbXB0LAogKiByZWFkbGluZV9uYW1lLCBhbmQgdGVybWluYWxfbmFtZS4KICogPC9wPgogKiA8cD4KICogSWYgY2FsbGVkIHdpdGggb25lIG9yIHR3byBwYXJhbWV0ZXJzLCB0aGUgb2xkIHZhbHVlIGlzIHJldHVybmVkLgogKi8KI1tBcnJheVNoYXBlKFsKICAgICdsaW5lX2J1ZmZlcicgPT4gJ3N0cmluZycsCiAgICAncG9pbnQnID0+ICdpbnQnLAogICAgJ2VuZCcgPT4gJ2ludCcsCiAgICAnbWFyaycgPT4gJ2ludCcsCiAgICAnZG9uZScgPT4gJ2ludCcsCiAgICAncGVuZGluZ19pbnB1dCcgPT4gJ2ludCcsCiAgICAncHJvbXB0JyA9PiAnc3RyaW5nJywKICAgICd0ZXJtaW5hbF9uYW1lJyA9PiAnc3RyaW5nJywKICAgICdjb21wbGV0aW9uX2FwcGVuZF9jaGFyYWN0ZXInID0+ICdzdHJpbmcnLAogICAgJ2NvbXBsZXRpb25fc3VwcHJlc3NfYXBwZW5kJyA9PiAnYm9vbCcsCiAgICAnZXJhc2VfZW1wdHlfbGluZScgPT4gJ2ludCcsCiAgICAnbGlicmFyeV92ZXJzaW9uJyA9PiAnc3RyaW5nJywKICAgICdyZWFkbGluZV9uYW1lJyA9PiAnc3RyaW5nJywKICAgICdhdHRlbXB0ZWRfY29tcGxldGlvbl9vdmVyJyA9PiAnaW50JywKXSldCmZ1bmN0aW9uIHJlYWRsaW5lX2luZm8oP3N0cmluZyAkdmFyX25hbWUsICR2YWx1ZSk6IG1peGVkIHt9CgovKioKICogQWRkcyBhIGxpbmUgdG8gdGhlIGhpc3RvcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5yZWFkbGluZS1hZGQtaGlzdG9yeS5waHAKICogQHBhcmFtIHN0cmluZyAkcHJvbXB0IDxwPgogKiBUaGUgbGluZSB0byBiZSBhZGRlZCBpbiB0aGUgaGlzdG9yeS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHJlYWRsaW5lX2FkZF9oaXN0b3J5KHN0cmluZyAkcHJvbXB0KTogYm9vbCB7fQoKLyoqCiAqIENsZWFycyB0aGUgaGlzdG9yeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnJlYWRsaW5lLWNsZWFyLWhpc3RvcnkucGhwCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcmVhZGxpbmVfY2xlYXJfaGlzdG9yeSgpOiBib29sIHt9CgovKioKICogTGlzdHMgdGhlIGhpc3RvcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5yZWFkbGluZS1saXN0LWhpc3RvcnkucGhwCiAqIEByZXR1cm4gYXJyYXkgYW4gYXJyYXkgb2YgdGhlIGVudGlyZSBjb21tYW5kIGxpbmUgaGlzdG9yeS4gVGhlIGVsZW1lbnRzIGFyZQogKiBpbmRleGVkIGJ5IGludGVnZXJzIHN0YXJ0aW5nIGF0IHplcm8uCiAqLwpmdW5jdGlvbiByZWFkbGluZV9saXN0X2hpc3RvcnkoKTogYXJyYXkge30KCi8qKgogKiBSZWFkcyB0aGUgaGlzdG9yeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnJlYWRsaW5lLXJlYWQtaGlzdG9yeS5waHAKICogQHBhcmFtIHN0cmluZ3xudWxsICRmaWxlbmFtZSBbb3B0aW9uYWxdIDxwPgogKiBQYXRoIHRvIHRoZSBmaWxlbmFtZSBjb250YWluaW5nIHRoZSBjb21tYW5kIGhpc3RvcnkuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiByZWFkbGluZV9yZWFkX2hpc3RvcnkoP3N0cmluZyAkZmlsZW5hbWUpOiBib29sIHt9CgovKioKICogV3JpdGVzIHRoZSBoaXN0b3J5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucmVhZGxpbmUtd3JpdGUtaGlzdG9yeS5waHAKICogQHBhcmFtIHN0cmluZ3xudWxsICRmaWxlbmFtZSBbb3B0aW9uYWxdIDxwPgogKiBQYXRoIHRvIHRoZSBzYXZlZCBmaWxlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcmVhZGxpbmVfd3JpdGVfaGlzdG9yeSg/c3RyaW5nICRmaWxlbmFtZSk6IGJvb2wge30KCi8qKgogKiBSZWdpc3RlcnMgYSBjb21wbGV0aW9uIGZ1bmN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucmVhZGxpbmUtY29tcGxldGlvbi1mdW5jdGlvbi5waHAKICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayA8cD4KICogWW91IG11c3Qgc3VwcGx5IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgYQogKiBwYXJ0aWFsIGNvbW1hbmQgbGluZSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBwb3NzaWJsZSBtYXRjaGVzLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcmVhZGxpbmVfY29tcGxldGlvbl9mdW5jdGlvbihjYWxsYWJsZSAkY2FsbGJhY2spOiBib29sIHt9CgovKioKICogSW5pdGlhbGl6ZXMgdGhlIHJlYWRsaW5lIGNhbGxiYWNrIGludGVyZmFjZSBhbmQgdGVybWluYWwsIHByaW50cyB0aGUgcHJvbXB0IGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucmVhZGxpbmUtY2FsbGJhY2staGFuZGxlci1pbnN0YWxsLnBocAogKiBAcGFyYW0gc3RyaW5nICRwcm9tcHQgPHA+CiAqIFRoZSBwcm9tcHQgbWVzc2FnZS4KICogPC9wPgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIDxwPgogKiBUaGUgPGk+Y2FsbGJhY2s8L2k+IGZ1bmN0aW9uIHRha2VzIG9uZSBwYXJhbWV0ZXI7IHRoZQogKiB1c2VyIGlucHV0IHJldHVybmVkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsKHN0cmluZyAkcHJvbXB0LCBjYWxsYWJsZSAkY2FsbGJhY2spOiBib29sIHt9CgovKioKICogUmVhZHMgYSBjaGFyYWN0ZXIgYW5kIGluZm9ybXMgdGhlIHJlYWRsaW5lIGNhbGxiYWNrIGludGVyZmFjZSB3aGVuIGEgbGluZSBpcyByZWNlaXZlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnJlYWRsaW5lLWNhbGxiYWNrLXJlYWQtY2hhci5waHAKICogQHJldHVybiB2b2lkIE5vIHZhbHVlIGlzIHJldHVybmVkLgogKi8KZnVuY3Rpb24gcmVhZGxpbmVfY2FsbGJhY2tfcmVhZF9jaGFyKCk6IHZvaWQge30KCi8qKgogKiBSZW1vdmVzIGEgcHJldmlvdXNseSBpbnN0YWxsZWQgY2FsbGJhY2sgaGFuZGxlciBhbmQgcmVzdG9yZXMgdGVybWluYWwgc2V0dGluZ3MKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5yZWFkbGluZS1jYWxsYmFjay1oYW5kbGVyLXJlbW92ZS5waHAKICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIGEgcHJldmlvdXNseSBpbnN0YWxsZWQgY2FsbGJhY2sgaGFuZGxlciB3YXMgcmVtb3ZlZCwgb3IKICogPGI+RkFMU0U8L2I+IGlmIG9uZSBjb3VsZCBub3QgYmUgZm91bmQuCiAqLwpmdW5jdGlvbiByZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX3JlbW92ZSgpOiBib29sIHt9CgovKioKICogUmVkcmF3cyB0aGUgZGlzcGxheQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnJlYWRsaW5lLXJlZGlzcGxheS5waHAKICogQHJldHVybiB2b2lkIE5vIHZhbHVlIGlzIHJldHVybmVkLgogKi8KZnVuY3Rpb24gcmVhZGxpbmVfcmVkaXNwbGF5KCk6IHZvaWQge30KCi8qKgogKiBJbmZvcm0gcmVhZGxpbmUgdGhhdCB0aGUgY3Vyc29yIGhhcyBtb3ZlZCB0byBhIG5ldyBsaW5lCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucmVhZGxpbmUtb24tbmV3LWxpbmUucGhwCiAqIEByZXR1cm4gdm9pZCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICovCmZ1bmN0aW9uIHJlYWRsaW5lX29uX25ld19saW5lKCk6IHZvaWQge30KCmRlZmluZSgnUkVBRExJTkVfTElCJywgInJlYWRsaW5lIik7CgovLyBFbmQgb2YgcmVhZGxpbmUgdi41LjUuMy0xdWJ1bnR1Mi4xCjw/cGhwCgovLyBTdGFydCBvZiBaZW5kVXRpbHMgdi4KCmZ1bmN0aW9uIHplbV9nZXRfZXh0ZW5zaW9uX2luZm9fYnlfaWQoKSB7fQoKZnVuY3Rpb24gemVtX2dldF9leHRlbnNpb25faW5mb19ieV9uYW1lKCkge30KCmZ1bmN0aW9uIHplbV9nZXRfZXh0ZW5zaW9uc19pbmZvKCkge30KCmZ1bmN0aW9uIHplbV9nZXRfbGljZW5zZV9pbmZvKCkge30KCmZ1bmN0aW9uIHplbmRfaXNfY29uZmlndXJhdGlvbl9jaGFuZ2VkKCkge30KCmZ1bmN0aW9uIHplbmRfc2V0X2NvbmZpZ3VyYXRpb25fY2hhbmdlZCgpIHt9CgovLyBFbmQgb2YgWmVuZFV0aWxzIHYuCjw/cGhwCgovLyBTdGFydCBvZiBpY29udiB2Lgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEFycmF5U2hhcGU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cUHVyZTsKCi8qKgogKiBDb252ZXJ0IHN0cmluZyB0byByZXF1ZXN0ZWQgY2hhcmFjdGVyIGVuY29kaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWNvbnYucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZyb21fZW5jb2RpbmcgPHA+CiAqIFRoZSBpbnB1dCBjaGFyc2V0LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHRvX2VuY29kaW5nIDxwPgogKiBUaGUgb3V0cHV0IGNoYXJzZXQuCiAqIDwvcD4KICogPHA+CiAqIElmIHlvdSBhcHBlbmQgdGhlIHN0cmluZyAvL1RSQU5TTElUIHRvCiAqIDxpPm91dF9jaGFyc2V0PC9pPiB0cmFuc2xpdGVyYXRpb24gaXMgYWN0aXZhdGVkLiBUaGlzCiAqIG1lYW5zIHRoYXQgd2hlbiBhIGNoYXJhY3RlciBjYW4ndCBiZSByZXByZXNlbnRlZCBpbiB0aGUgdGFyZ2V0IGNoYXJzZXQsCiAqIGl0IGNhbiBiZSBhcHByb3hpbWF0ZWQgdGhyb3VnaCBvbmUgb3Igc2V2ZXJhbCBzaW1pbGFybHkgbG9va2luZwogKiBjaGFyYWN0ZXJzLiBJZiB5b3UgYXBwZW5kIHRoZSBzdHJpbmcgLy9JR05PUkUsCiAqIGNoYXJhY3RlcnMgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gdGhlIHRhcmdldCBjaGFyc2V0IGFyZSBzaWxlbnRseQogKiBkaXNjYXJkZWQuIE90aGVyd2lzZSwgPGk+c3RyPC9pPiBpcyBjdXQgZnJvbSB0aGUgZmlyc3QKICogaWxsZWdhbCBjaGFyYWN0ZXIgYW5kIGFuIDxiPkVfTk9USUNFPC9iPiBpcyBnZW5lcmF0ZWQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogKiBUaGUgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgY29udmVydGVkIHN0cmluZyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCiNbUHVyZV0KZnVuY3Rpb24gaWNvbnYoc3RyaW5nICRmcm9tX2VuY29kaW5nLCBzdHJpbmcgJHRvX2VuY29kaW5nLCBzdHJpbmcgJHN0cmluZyk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIENvbnZlcnQgY2hhcmFjdGVyIGVuY29kaW5nIGFzIG91dHB1dCBidWZmZXIgaGFuZGxlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9iLWljb252LWhhbmRsZXIucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnRzCiAqIEBwYXJhbSBpbnQgJHN0YXR1cwogKiBAcmV0dXJuIHN0cmluZyBTZWUgPGI+b2Jfc3RhcnQ8L2I+IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGhhbmRsZXIKICogcmV0dXJuIHZhbHVlcy4KICovCiNbUHVyZV0KZnVuY3Rpb24gb2JfaWNvbnZfaGFuZGxlcihzdHJpbmcgJGNvbnRlbnRzLCBpbnQgJHN0YXR1cyk6IHN0cmluZyB7fQoKLyoqCiAqIFJldHJpZXZlIGludGVybmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9mIGljb252IGV4dGVuc2lvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmljb252LWdldC1lbmNvZGluZy5waHAKICogQHBhcmFtIHN0cmluZyAkdHlwZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgdmFsdWUgb2YgdGhlIG9wdGlvbmFsIDxpPnR5cGU8L2k+IGNhbiBiZToKICogYWxsCiAqIGlucHV0X2VuY29kaW5nCiAqIG91dHB1dF9lbmNvZGluZwogKiBpbnRlcm5hbF9lbmNvZGluZwogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfHN0cmluZ1tdfGZhbHNlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpbnRlcm5hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlmCiAqIHN1Y2Nlc3NmdWwgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqIDxwPgogKiBJZiA8aT50eXBlPC9pPiBpcyBvbWl0dGVkIG9yIHNldCB0byAiYWxsIiwKICogPGI+aWNvbnZfZ2V0X2VuY29kaW5nPC9iPiByZXR1cm5zIGFuIGFycmF5IHRoYXQKICogc3RvcmVzIGFsbCB0aGVzZSB2YXJpYWJsZXMuCiAqIDwvcD4KICovCiNbUHVyZV0KI1tBcnJheVNoYXBlKFsiaW5wdXRfZW5jb2RpbmciID0+ICJzdHJpbmciLCAib3V0cHV0X2VuY29kaW5nIiA9PiAic3RyaW5nIiwgImludGVybmFsX2VuY29kaW5nIiA9PiAic3RyaW5nIl0pXQpmdW5jdGlvbiBpY29udl9nZXRfZW5jb2Rpbmcoc3RyaW5nICR0eXBlID0gImFsbCIpOiBhcnJheXxzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBTZXQgY3VycmVudCBzZXR0aW5nIGZvciBjaGFyYWN0ZXIgZW5jb2RpbmcgY29udmVyc2lvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmljb252LXNldC1lbmNvZGluZy5waHAKICogQHBhcmFtIHN0cmluZyAkdHlwZSA8cD4KICogVGhlIHZhbHVlIG9mIDxpPnR5cGU8L2k+IGNhbiBiZSBhbnkgb25lIG9mIHRoZXNlOgogKiBpbnB1dF9lbmNvZGluZwogKiBvdXRwdXRfZW5jb2RpbmcKICogaW50ZXJuYWxfZW5jb2RpbmcKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZyA8cD4KICogVGhlIGNoYXJhY3RlciBzZXQuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpY29udl9zZXRfZW5jb2Rpbmcoc3RyaW5nICR0eXBlLCBzdHJpbmcgJGVuY29kaW5nKTogYm9vbCB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGNoYXJhY3RlciBjb3VudCBvZiBzdHJpbmcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pY29udi1zdHJsZW4ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICogVGhlIHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGVuY29kaW5nIDxwPgogKiBJZiA8aT5jaGFyc2V0PC9pPiBwYXJhbWV0ZXIgaXMgb21pdHRlZCwKICogPGk+c3RyPC9pPiBpcyBhc3N1bWVkIHRvIGJlIGVuY29kZWQgaW4KICogaWNvbnYuaW50ZXJuYWxfZW5jb2RpbmcuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgdGhlIGNoYXJhY3RlciBjb3VudCBvZiA8aT5zdHI8L2k+LCBhcyBhbiBpbnRlZ2VyLiBGYWxzZSBvbiBlcnJvci4KICovCiNbUHVyZV0KZnVuY3Rpb24gaWNvbnZfc3RybGVuKHN0cmluZyAkc3RyaW5nLCA/c3RyaW5nICRlbmNvZGluZyA9IG51bGwpOiBpbnR8ZmFsc2Uge30KCi8qKgogKiBDdXQgb3V0IHBhcnQgb2YgYSBzdHJpbmcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pY29udi1zdWJzdHIucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICogVGhlIG9yaWdpbmFsIHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvZmZzZXQgPHA+CiAqIElmIDxpPm9mZnNldDwvaT4gaXMgbm9uLW5lZ2F0aXZlLAogKiA8Yj5pY29udl9zdWJzdHI8L2I+IGN1dHMgdGhlIHBvcnRpb24gb3V0IG9mCiAqIDxpPnN0cjwvaT4gYmVnaW5uaW5nIGF0IDxpPm9mZnNldDwvaT4ndGgKICogY2hhcmFjdGVyLCBjb3VudGluZyBmcm9tIHplcm8uCiAqIDwvcD4KICogPHA+CiAqIElmIDxpPm9mZnNldDwvaT4gaXMgbmVnYXRpdmUsCiAqIDxiPmljb252X3N1YnN0cjwvYj4gY3V0cyBvdXQgdGhlIHBvcnRpb24gYmVnaW5uaW5nCiAqIGF0IHRoZSBwb3NpdGlvbiwgPGk+b2Zmc2V0PC9pPiBjaGFyYWN0ZXJzCiAqIGF3YXkgZnJvbSB0aGUgZW5kIG9mIDxpPnN0cjwvaT4uCiAqIDwvcD4KICogQHBhcmFtIGludHxudWxsICRsZW5ndGggW29wdGlvbmFsXSA8cD4KICogSWYgPGk+bGVuZ3RoPC9pPiBpcyBnaXZlbiBhbmQgaXMgcG9zaXRpdmUsIHRoZSByZXR1cm4KICogdmFsdWUgd2lsbCBjb250YWluIGF0IG1vc3QgPGk+bGVuZ3RoPC9pPiBjaGFyYWN0ZXJzCiAqIG9mIHRoZSBwb3J0aW9uIHRoYXQgYmVnaW5zIGF0IDxpPm9mZnNldDwvaT4KICogKGRlcGVuZGluZyBvbiB0aGUgbGVuZ3RoIG9mIDxpPnN0cmluZzwvaT4pLgogKiA8L3A+CiAqIDxwPgogKiBJZiBuZWdhdGl2ZSA8aT5sZW5ndGg8L2k+IGlzIHBhc3NlZCwKICogPGI+aWNvbnZfc3Vic3RyPC9iPiBjdXRzIHRoZSBwb3J0aW9uIG91dCBvZgogKiA8aT5zdHI8L2k+IGZyb20gdGhlIDxpPm9mZnNldDwvaT4ndGgKICogY2hhcmFjdGVyIHVwIHRvIHRoZSBjaGFyYWN0ZXIgdGhhdCBpcwogKiA8aT5sZW5ndGg8L2k+IGNoYXJhY3RlcnMgYXdheSBmcm9tIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KICogSW4gY2FzZSA8aT5vZmZzZXQ8L2k+IGlzIGFsc28gbmVnYXRpdmUsIHRoZSBzdGFydCBwb3NpdGlvbgogKiBpcyBjYWxjdWxhdGVkIGJlZm9yZWhhbmQgYWNjb3JkaW5nIHRvIHRoZSBydWxlIGV4cGxhaW5lZCBhYm92ZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGVuY29kaW5nIDxwPgogKiBJZiA8aT5jaGFyc2V0PC9pPiBwYXJhbWV0ZXIgaXMgb21pdHRlZCwKICogPGk+c3RyaW5nPC9pPiBhcmUgYXNzdW1lZCB0byBiZSBlbmNvZGVkIGluCiAqIGljb252LmludGVybmFsX2VuY29kaW5nLgogKiA8L3A+CiAqIDxwPgogKiBOb3RlIHRoYXQgPGk+b2Zmc2V0PC9pPiBhbmQgPGk+bGVuZ3RoPC9pPgogKiBwYXJhbWV0ZXJzIGFyZSBhbHdheXMgZGVlbWVkIHRvIHJlcHJlc2VudCBvZmZzZXRzIHRoYXQgYXJlCiAqIGNhbGN1bGF0ZWQgb24gdGhlIGJhc2lzIG9mIHRoZSBjaGFyYWN0ZXIgc2V0IGRldGVybWluZWQgYnkKICogPGk+Y2hhcnNldDwvaT4sIHdoaWxzdCB0aGUgY291bnRlcnBhcnQKICogPGI+c3Vic3RyPC9iPiBhbHdheXMgdGFrZXMgdGhlc2UgZm9yIGJ5dGUgb2Zmc2V0cy4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgcG9ydGlvbiBvZiA8aT5zdHI8L2k+IHNwZWNpZmllZCBieSB0aGUKICogPGk+b2Zmc2V0PC9pPiBhbmQgPGk+bGVuZ3RoPC9pPiBwYXJhbWV0ZXJzLgogKiA8cD4KICogSWYgPGk+c3RyPC9pPiBpcyBzaG9ydGVyIHRoYW4gPGk+b2Zmc2V0PC9pPgogKiBjaGFyYWN0ZXJzIGxvbmcsIDxiPkZBTFNFPC9iPiB3aWxsIGJlIHJldHVybmVkLgogKiA8L3A+CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGljb252X3N1YnN0cihzdHJpbmcgJHN0cmluZywgaW50ICRvZmZzZXQsID9pbnQgJGxlbmd0aCwgP3N0cmluZyAkZW5jb2RpbmcgPSBudWxsKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogRmluZHMgcG9zaXRpb24gb2YgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIG5lZWRsZSB3aXRoaW4gYSBoYXlzdGFjawogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmljb252LXN0cnBvcy5waHAKICogQHBhcmFtIHN0cmluZyAkaGF5c3RhY2sgPHA+CiAqIFRoZSBlbnRpcmUgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5lZWRsZSA8cD4KICogVGhlIHNlYXJjaGVkIHN1YnN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvZmZzZXQgW29wdGlvbmFsXSA8cD4KICogVGhlIG9wdGlvbmFsIDxpPm9mZnNldDwvaT4gcGFyYW1ldGVyIHNwZWNpZmllcwogKiB0aGUgcG9zaXRpb24gZnJvbSB3aGljaCB0aGUgc2VhcmNoIHNob3VsZCBiZSBwZXJmb3JtZWQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRlbmNvZGluZyA8cD4KICogSWYgPGk+Y2hhcnNldDwvaT4gcGFyYW1ldGVyIGlzIG9taXR0ZWQsCiAqIDxpPnN0cmluZzwvaT4gYXJlIGFzc3VtZWQgdG8gYmUgZW5jb2RlZCBpbgogKiBpY29udi5pbnRlcm5hbF9lbmNvZGluZy4KICogPC9wPgogKiBAcmV0dXJuIGludDwwLG1heD58ZmFsc2UgdGhlIG51bWVyaWMgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YKICogPGk+bmVlZGxlPC9pPiBpbiA8aT5oYXlzdGFjazwvaT4uCiAqIDxwPgogKiBJZiA8aT5uZWVkbGU8L2k+IGlzIG5vdCBmb3VuZCwKICogPGI+aWNvbnZfc3RycG9zPC9iPiB3aWxsIHJldHVybiA8Yj5GQUxTRTwvYj4uCiAqIDwvcD4KICovCiNbUHVyZV0KZnVuY3Rpb24gaWNvbnZfc3RycG9zKHN0cmluZyAkaGF5c3RhY2ssIHN0cmluZyAkbmVlZGxlLCBpbnQgJG9mZnNldCA9IDAsID9zdHJpbmcgJGVuY29kaW5nID0gbnVsbCk6IGludHxmYWxzZSB7fQoKLyoqCiAqIEZpbmRzIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSBuZWVkbGUgd2l0aGluIGEgaGF5c3RhY2sKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pY29udi1zdHJycG9zLnBocAogKiBAcGFyYW0gc3RyaW5nICRoYXlzdGFjayA8cD4KICogVGhlIGVudGlyZSBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbmVlZGxlIDxwPgogKiBUaGUgc2VhcmNoZWQgc3Vic3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZW5jb2RpbmcgPHA+CiAqIElmIDxpPmNoYXJzZXQ8L2k+IHBhcmFtZXRlciBpcyBvbWl0dGVkLAogKiA8aT5zdHJpbmc8L2k+IGFyZSBhc3N1bWVkIHRvIGJlIGVuY29kZWQgaW4KICogaWNvbnYuaW50ZXJuYWxfZW5jb2RpbmcuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgdGhlIG51bWVyaWMgcG9zaXRpb24gb2YgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZgogKiA8aT5uZWVkbGU8L2k+IGluIDxpPmhheXN0YWNrPC9pPi4KICogPHA+CiAqIElmIDxpPm5lZWRsZTwvaT4gaXMgbm90IGZvdW5kLAogKiA8Yj5pY29udl9zdHJycG9zPC9iPiB3aWxsIHJldHVybiA8Yj5GQUxTRTwvYj4uCiAqIDwvcD4KICovCiNbUHVyZV0KZnVuY3Rpb24gaWNvbnZfc3RycnBvcyhzdHJpbmcgJGhheXN0YWNrLCBzdHJpbmcgJG5lZWRsZSwgP3N0cmluZyAkZW5jb2RpbmcgPSBudWxsKTogaW50fGZhbHNlIHt9CgovKioKICogQ29tcG9zZXMgYSBNSU1FIGhlYWRlciBmaWVsZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmljb252LW1pbWUtZW5jb2RlLnBocAogKiBAcGFyYW0gc3RyaW5nICRmaWVsZF9uYW1lIDxwPgogKiBUaGUgZmllbGQgbmFtZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRmaWVsZF92YWx1ZSA8cD4KICogVGhlIGZpZWxkIHZhbHVlLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyA8cD4KICogWW91IGNhbiBjb250cm9sIHRoZSBiZWhhdmlvdXIgb2YgPGI+aWNvbnZfbWltZV9lbmNvZGU8L2I+CiAqIGJ5IHNwZWNpZnlpbmcgYW4gYXNzb2NpYXRpdmUgYXJyYXkgdGhhdCBjb250YWlucyBjb25maWd1cmF0aW9uIGl0ZW1zCiAqIHRvIHRoZSBvcHRpb25hbCB0aGlyZCBwYXJhbWV0ZXIgPGk+cHJlZmVyZW5jZXM8L2k+LgogKiBUaGUgaXRlbXMgc3VwcG9ydGVkIGJ5IDxiPmljb252X21pbWVfZW5jb2RlPC9iPiBhcmUKICogbGlzdGVkIGJlbG93LiBOb3RlIHRoYXQgaXRlbSBuYW1lcyBhcmUgdHJlYXRlZCBjYXNlLXNlbnNpdGl2ZS4KICogPHRhYmxlPgogKiBDb25maWd1cmF0aW9uIGl0ZW1zIHN1cHBvcnRlZCBieSA8Yj5pY29udl9taW1lX2VuY29kZTwvYj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkl0ZW08L3RkPgogKiA8dGQ+VHlwZTwvdGQ+CiAqIDx0ZD5EZXNjcmlwdGlvbjwvdGQ+CiAqIDx0ZD5EZWZhdWx0IHZhbHVlPC90ZD4KICogPHRkPkV4YW1wbGU8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+c2NoZW1lPC90ZD4KICogPHRkPnN0cmluZzwvdGQ+CiAqIDx0ZD4KICogU3BlY2lmaWVzIHRoZSBtZXRob2QgdG8gZW5jb2RlIGEgZmllbGQgdmFsdWUgYnkuIFRoZSB2YWx1ZSBvZgogKiB0aGlzIGl0ZW0gbWF5IGJlIGVpdGhlciAiQiIgb3IgIlEiLCB3aGVyZSAiQiIgc3RhbmRzIGZvcgogKiBiYXNlNjQgZW5jb2Rpbmcgc2NoZW1lIGFuZCAiUSIgc3RhbmRzIGZvcgogKiBxdW90ZWQtcHJpbnRhYmxlIGVuY29kaW5nIHNjaGVtZS4KICogPC90ZD4KICogPHRkPkI8L3RkPgogKiA8dGQ+QjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5pbnB1dC1jaGFyc2V0PC90ZD4KICogPHRkPnN0cmluZzwvdGQ+CiAqIDx0ZD4KICogU3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXIgc2V0IGluIHdoaWNoIHRoZSBmaXJzdCBwYXJhbWV0ZXIKICogPGk+ZmllbGRfbmFtZTwvaT4gYW5kIHRoZSBzZWNvbmQgcGFyYW1ldGVyCiAqIDxpPmZpZWxkX3ZhbHVlPC9pPiBhcmUgcHJlc2VudGVkLiBJZiBub3QgZ2l2ZW4sCiAqIDxiPmljb252X21pbWVfZW5jb2RlPC9iPiBhc3N1bWVzIHRob3NlIHBhcmFtZXRlcnMKICogYXJlIHByZXNlbnRlZCB0byBpdCBpbiB0aGUKICogaWNvbnYuaW50ZXJuYWxfZW5jb2RpbmcKICogaW5pIHNldHRpbmcuCiAqIDwvdGQ+CiAqIDx0ZD4KICogaWNvbnYuaW50ZXJuYWxfZW5jb2RpbmcKICogPC90ZD4KICogPHRkPklTTy04ODU5LTE8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+b3V0cHV0LWNoYXJzZXQ8L3RkPgogKiA8dGQ+c3RyaW5nPC90ZD4KICogPHRkPgogKiBTcGVjaWZpZXMgdGhlIGNoYXJhY3RlciBzZXQgdG8gdXNlIHRvIGNvbXBvc2UgdGhlCiAqIE1JTUUgaGVhZGVyLgogKiA8L3RkPgogKiA8dGQ+CiAqIGljb252LmludGVybmFsX2VuY29kaW5nCiAqIDwvdGQ+CiAqIDx0ZD5VVEYtODwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5saW5lLWxlbmd0aDwvdGQ+CiAqIDx0ZD5pbnRlZ2VyPC90ZD4KICogPHRkPgogKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBoZWFkZXIgbGluZXMuIFRoZSByZXN1bHRpbmcKICogaGVhZGVyIGlzICJmb2xkZWQiIHRvIGEgc2V0IG9mIG11bHRpcGxlIGxpbmVzIGluIGNhc2UKICogdGhlIHJlc3VsdGluZyBoZWFkZXIgZmllbGQgd291bGQgYmUgbG9uZ2VyIHRoYW4gdGhlIHZhbHVlIG9mIHRoaXMKICogcGFyYW1ldGVyLCBhY2NvcmRpbmcgdG8KICogUkZDMjgyMiAtIEludGVybmV0IE1lc3NhZ2UgRm9ybWF0LgogKiBJZiBub3QgZ2l2ZW4sIHRoZSBsZW5ndGggd2lsbCBiZSBsaW1pdGVkIHRvIDc2IGNoYXJhY3RlcnMuCiAqIDwvdGQ+CiAqIDx0ZD43NjwvdGQ+CiAqIDx0ZD45OTY8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+bGluZS1icmVhay1jaGFyczwvdGQ+CiAqIDx0ZD5zdHJpbmc8L3RkPgogKiA8dGQ+CiAqIFNwZWNpZmllcyB0aGUgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0byBhcHBlbmQgdG8gZWFjaCBsaW5lCiAqIGFzIGFuIGVuZC1vZi1saW5lIHNpZ24gd2hlbiAiZm9sZGluZyIgaXMgcGVyZm9ybWVkIG9uIGEgbG9uZyBoZWFkZXIKICogZmllbGQuIElmIG5vdCBnaXZlbiwgdGhpcyBkZWZhdWx0cyB0byAiXHJcbiIKICogKENSIExGKS4gTm90ZSB0aGF0CiAqIHRoaXMgcGFyYW1ldGVyIGlzIGFsd2F5cyB0cmVhdGVkIGFzIGFuIEFTQ0lJIHN0cmluZyByZWdhcmRsZXNzCiAqIG9mIHRoZSB2YWx1ZSBvZiBpbnB1dC1jaGFyc2V0LgogKiA8L3RkPgogKiA8dGQ+XHJcbjwvdGQ+CiAqIDx0ZD5cbjwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgYW4gZW5jb2RlZCBNSU1FIGZpZWxkIG9uIHN1Y2Nlc3MsCiAqIG9yIDxiPkZBTFNFPC9iPiBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBlbmNvZGluZy4KICovCiNbUHVyZV0KZnVuY3Rpb24gaWNvbnZfbWltZV9lbmNvZGUoc3RyaW5nICRmaWVsZF9uYW1lLCBzdHJpbmcgJGZpZWxkX3ZhbHVlLCBhcnJheSAkb3B0aW9ucyA9IFtdKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogRGVjb2RlcyBhIE1JTUUgaGVhZGVyIGZpZWxkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWNvbnYtbWltZS1kZWNvZGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICogVGhlIGVuY29kZWQgaGVhZGVyLCBhcyBhIHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtb2RlIFtvcHRpb25hbF0gPHA+CiAqIDxpPm1vZGU8L2k+IGRldGVybWluZXMgdGhlIGJlaGF2aW91ciBpbiB0aGUgZXZlbnQKICogPGI+aWNvbnZfbWltZV9kZWNvZGU8L2I+IGVuY291bnRlcnMgYSBtYWxmb3JtZWQKICogTUlNRSBoZWFkZXIgZmllbGQuIFlvdSBjYW4gc3BlY2lmeSBhbnkgY29tYmluYXRpb24KICogb2YgdGhlIGZvbGxvd2luZyBiaXRtYXNrcy4KICogPHRhYmxlPgogKiBCaXRtYXNrcyBhY2NlcHRhYmxlIHRvIDxiPmljb252X21pbWVfZGVjb2RlPC9iPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VmFsdWU8L3RkPgogKiA8dGQ+Q29uc3RhbnQ8L3RkPgogKiA8dGQ+RGVzY3JpcHRpb248L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+MTwvdGQ+CiAqIDx0ZD5JQ09OVl9NSU1FX0RFQ09ERV9TVFJJQ1Q8L3RkPgogKiA8dGQ+CiAqIElmIHNldCwgdGhlIGdpdmVuIGhlYWRlciBpcyBkZWNvZGVkIGluIGZ1bGwgY29uZm9ybWFuY2Ugd2l0aCB0aGUKICogc3RhbmRhcmRzIGRlZmluZWQgaW4gUkZDMjA0Ny4KICogVGhpcyBvcHRpb24gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIHRoZXJlIGFyZSBhIGxvdCBvZgogKiBicm9rZW4gbWFpbCB1c2VyIGFnZW50cyB0aGF0IGRvbid0IGZvbGxvdyB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgZG9uJ3QKICogcHJvZHVjZSBjb3JyZWN0IE1JTUUgaGVhZGVycy4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjI8L3RkPgogKiA8dGQ+SUNPTlZfTUlNRV9ERUNPREVfQ09OVElOVUVfT05fRVJST1I8L3RkPgogKiA8dGQ+CiAqIElmIHNldCwgPGI+aWNvbnZfbWltZV9kZWNvZGVfaGVhZGVyczwvYj4KICogYXR0ZW1wdHMgdG8gaWdub3JlIGFueSBncmFtbWF0aWNhbCBlcnJvcnMgYW5kIGNvbnRpbnVlIHRvIHByb2Nlc3MKICogYSBnaXZlbiBoZWFkZXIuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRlbmNvZGluZyA8cD4KICogVGhlIG9wdGlvbmFsIDxpPmNoYXJzZXQ8L2k+IHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlCiAqIGNoYXJhY3RlciBzZXQgdG8gcmVwcmVzZW50IHRoZSByZXN1bHQgYnkuIElmIG9taXR0ZWQsCiAqIGljb252LmludGVybmFsX2VuY29kaW5nCiAqIHdpbGwgYmUgdXNlZC4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBhIGRlY29kZWQgTUlNRSBmaWVsZCBvbiBzdWNjZXNzLAogKiBvciA8Yj5GQUxTRTwvYj4gaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZGVjb2RpbmcuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGljb252X21pbWVfZGVjb2RlKHN0cmluZyAkc3RyaW5nLCBpbnQgJG1vZGUgPSAwLCA/c3RyaW5nICRlbmNvZGluZyA9IG51bGwpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBEZWNvZGVzIG11bHRpcGxlIE1JTUUgaGVhZGVyIGZpZWxkcyBhdCBvbmNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWNvbnYtbWltZS1kZWNvZGUtaGVhZGVycy5waHAKICogQHBhcmFtIHN0cmluZyAkaGVhZGVycyA8cD4KICogVGhlIGVuY29kZWQgaGVhZGVycywgYXMgYSBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIGludCAkbW9kZSBbb3B0aW9uYWxdIDxwPgogKiA8aT5tb2RlPC9pPiBkZXRlcm1pbmVzIHRoZSBiZWhhdmlvdXIgaW4gdGhlIGV2ZW50CiAqIDxiPmljb252X21pbWVfZGVjb2RlX2hlYWRlcnM8L2I+IGVuY291bnRlcnMgYSBtYWxmb3JtZWQKICogTUlNRSBoZWFkZXIgZmllbGQuIFlvdSBjYW4gc3BlY2lmeSBhbnkgY29tYmluYXRpb24KICogb2YgdGhlIGZvbGxvd2luZyBiaXRtYXNrcy4KICogPGJyPgogKiBCaXRtYXNrcyBhY2NlcHRhYmxlIHRvIDxiPmljb252X21pbWVfZGVjb2RlX2hlYWRlcnM8L2I+PC9wPgogKiA8dGFibGU+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5WYWx1ZTwvdGQ+CiAqIDx0ZD5Db25zdGFudDwvdGQ+CiAqIDx0ZD5EZXNjcmlwdGlvbjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4xPC90ZD4KICogPHRkPklDT05WX01JTUVfREVDT0RFX1NUUklDVDwvdGQ+CiAqIDx0ZD4KICogSWYgc2V0LCB0aGUgZ2l2ZW4gaGVhZGVyIGlzIGRlY29kZWQgaW4gZnVsbCBjb25mb3JtYW5jZSB3aXRoIHRoZQogKiBzdGFuZGFyZHMgZGVmaW5lZCBpbiBSRkMyMDQ3LgogKiBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhlcmUgYXJlIGEgbG90IG9mCiAqIGJyb2tlbiBtYWlsIHVzZXIgYWdlbnRzIHRoYXQgZG9uJ3QgZm9sbG93IHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBkb24ndAogKiBwcm9kdWNlIGNvcnJlY3QgTUlNRSBoZWFkZXJzLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+MjwvdGQ+CiAqIDx0ZD5JQ09OVl9NSU1FX0RFQ09ERV9DT05USU5VRV9PTl9FUlJPUjwvdGQ+CiAqIDx0ZD4KICogSWYgc2V0LCA8Yj5pY29udl9taW1lX2RlY29kZV9oZWFkZXJzPC9iPgogKiBhdHRlbXB0cyB0byBpZ25vcmUgYW55IGdyYW1tYXRpY2FsIGVycm9ycyBhbmQgY29udGludWUgdG8gcHJvY2VzcwogKiBhIGdpdmVuIGhlYWRlci4KICogPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICogQHBhcmFtIHN0cmluZ3xudWxsICRlbmNvZGluZyA8cD4KICogVGhlIG9wdGlvbmFsIDxpPmNoYXJzZXQ8L2k+IHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlCiAqIGNoYXJhY3RlciBzZXQgdG8gcmVwcmVzZW50IHRoZSByZXN1bHQgYnkuIElmIG9taXR0ZWQsCiAqIGljb252LmludGVybmFsX2VuY29kaW5nCiAqIHdpbGwgYmUgdXNlZC4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIGFuIGFzc29jaWF0aXZlIGFycmF5IHRoYXQgaG9sZHMgYSB3aG9sZSBzZXQgb2YKICogTUlNRSBoZWFkZXIgZmllbGRzIHNwZWNpZmllZCBieQogKiA8aT5lbmNvZGVkX2hlYWRlcnM8L2k+IG9uIHN1Y2Nlc3MsIG9yIDxiPkZBTFNFPC9iPgogKiBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBkZWNvZGluZy4KICogPHA+CiAqIEVhY2gga2V5IG9mIHRoZSByZXR1cm4gdmFsdWUgcmVwcmVzZW50cyBhbiBpbmRpdmlkdWFsCiAqIGZpZWxkIG5hbWUgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgcmVwcmVzZW50cyBhIGZpZWxkIHZhbHVlLgogKiBJZiBtb3JlIHRoYW4gb25lIGZpZWxkIG9mIHRoZSBzYW1lIG5hbWUgYXJlIHByZXNlbnQsCiAqIDxiPmljb252X21pbWVfZGVjb2RlX2hlYWRlcnM8L2I+IGF1dG9tYXRpY2FsbHkgaW5jb3Jwb3JhdGVzCiAqIHRoZW0gaW50byBhIG51bWVyaWNhbGx5IGluZGV4ZWQgYXJyYXkgaW4gdGhlIG9yZGVyIG9mIG9jY3VycmVuY2UuCiAqIDwvcD4KICovCiNbUHVyZV0KZnVuY3Rpb24gaWNvbnZfbWltZV9kZWNvZGVfaGVhZGVycyhzdHJpbmcgJGhlYWRlcnMsIGludCAkbW9kZSA9IDAsID9zdHJpbmcgJGVuY29kaW5nID0gbnVsbCk6IGFycmF5fGZhbHNlIHt9CgovKioKICogc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaWNvbnYuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJQ09OVl9JTVBMJywgImxpYmljb252Iik7CgovKioKICogc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaWNvbnYuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJQ09OVl9WRVJTSU9OJywgMi4xNyk7CgovKioKICogaW50ZWdlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ljb252LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUNPTlZfTUlNRV9ERUNPREVfU1RSSUNUJywgMSk7CgovKioKICogaW50ZWdlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ljb252LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUNPTlZfTUlNRV9ERUNPREVfQ09OVElOVUVfT05fRVJST1InLCAyKTsKCi8vIEVuZCBvZiBpY29udiB2Lgo8P3BocAoKLy8gU3RhcnQgb2YgUEVDTCBsaWJldmVudCB2LjAuMC40CgovLyBMaWJldmVudCBkb2N1bWVudGF0aW9uOgovLyBodHRwOi8vd3d3LndhbmdhZnUubmV0L35uaWNrbS9saWJldmVudC1ib29rLwoKLy8gUEhQIExpYmV2ZW50IGV4dGVuc2lvbiBkb2N1bWVudGF0aW9uOgovLyBodHRwczovL3BocC5uZXQvbGliZXZlbnQKCi8vIEV2ZW50IGZsYWdzCgovKioKICogVGhpcyBmbGFnIGluZGljYXRlcyBhbiBldmVudCB0aGF0IGJlY29tZXMgYWN0aXZlIGFmdGVyIGEgdGltZW91dCBlbGFwc2VzLgogKgogKiBUaGUgRVZfVElNRU9VVCBmbGFnIGlzIGlnbm9yZWQgd2hlbiBjb25zdHJ1Y3RpbmcgYW4gZXZlbnQ6IHlvdQogKiBjYW4gZWl0aGVyIHNldCBhIHRpbWVvdXQgd2hlbiB5b3UgYWRkIHRoZSBldmVudCwgb3Igbm90LiAgSXQgaXMKICogc2V0IGluIHRoZSAnd2hhdCcgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gYSB0aW1lb3V0CiAqIGhhcyBvY2N1cnJlZC4KICovCmRlZmluZSgnRVZfVElNRU9VVCcsIDEpOwoKLyoqCiAqIFRoaXMgZmxhZyBpbmRpY2F0ZXMgYW4gZXZlbnQgdGhhdCBiZWNvbWVzIGFjdGl2ZSB3aGVuIHRoZSBwcm92aWRlZAogKiBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZHkgZm9yIHJlYWRpbmcuCiAqLwpkZWZpbmUoJ0VWX1JFQUQnLCAyKTsKCi8qKgogKiBUaGlzIGZsYWcgaW5kaWNhdGVzIGFuIGV2ZW50IHRoYXQgYmVjb21lcyBhY3RpdmUgd2hlbiB0aGUgcHJvdmlkZWQKICogZmlsZSBkZXNjcmlwdG9yIGlzIHJlYWR5IGZvciB3cml0aW5nLgogKi8KZGVmaW5lKCdFVl9XUklURScsIDQpOwoKLyoqCiAqIFVzZWQgdG8gaW1wbGVtZW50IHNpZ25hbCBkZXRlY3Rpb24uCiAqLwpkZWZpbmUoJ0VWX1NJR05BTCcsIDgpOwoKLyoqCiAqIEluZGljYXRlcyB0aGF0IHRoZSBldmVudCBpcyBwZXJzaXN0ZW50LgogKgogKiBCeSBkZWZhdWx0LCB3aGVuZXZlciBhIHBlbmRpbmcgZXZlbnQgYmVjb21lcyBhY3RpdmUKICogKGJlY2F1c2UgaXRzIGZkIGlzIHJlYWR5IHRvIHJlYWQgb3Igd3JpdGUsIG9yIGJlY2F1c2UgaXRzIHRpbWVvdXQgZXhwaXJlcyksCiAqIGl0IGJlY29tZXMgbm9uLXBlbmRpbmcgcmlnaHQgYmVmb3JlIGl0cyBjYWxsYmFjayBpcyBleGVjdXRlZC4KICogVGh1cywgaWYgeW91IHdhbnQgdG8gbWFrZSB0aGUgZXZlbnQgcGVuZGluZyBhZ2FpbiwgeW91IGNhbiBjYWxsIGV2ZW50X2FkZCgpCiAqIG9uIGl0IGFnYWluIGZyb20gaW5zaWRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KICoKICogSWYgdGhlIEVWX1BFUlNJU1QgZmxhZyBpcyBzZXQgb24gYW4gZXZlbnQsIGhvd2V2ZXIsIHRoZSBldmVudCBpcyBwZXJzaXN0ZW50LgogKiBUaGlzIG1lYW5zIHRoYXQgZXZlbnQgcmVtYWlucyBwZW5kaW5nIGV2ZW4gd2hlbiBpdHMgY2FsbGJhY2sgaXMgYWN0aXZhdGVkLgogKiBJZiB5b3Ugd2FudCB0byBtYWtlIGl0IG5vbi1wZW5kaW5nIGZyb20gd2l0aGluIGl0cyBjYWxsYmFjaywgeW91IGNhbiBjYWxsCiAqIGV2ZW50X2RlbCgpIG9uIGl0LgogKgogKiBUaGUgdGltZW91dCBvbiBhIHBlcnNpc3RlbnQgZXZlbnQgcmVzZXRzIHdoZW5ldmVyIHRoZSBldmVudCdzIGNhbGxiYWNrIHJ1bnMuCiAqIFRodXMsIGlmIHlvdSBoYXZlIGFuIGV2ZW50IHdpdGggZmxhZ3MgRVZfUkVBRHxFVl9QRVJTSVNUIGFuZCBhIHRpbWVvdXQgb2YgZml2ZQogKiBzZWNvbmRzLCB0aGUgZXZlbnQgd2lsbCBiZWNvbWUgYWN0aXZlOgogKgogKiBXaGVuZXZlciB0aGUgc29ja2V0IGlzIHJlYWR5IGZvciByZWFkaW5nLgogKgogKiBXaGVuZXZlciBmaXZlIHNlY29uZHMgaGF2ZSBwYXNzZWQgc2luY2UgdGhlIGV2ZW50IGxhc3QgYmVjYW1lIGFjdGl2ZS4KICovCmRlZmluZSgnRVZfUEVSU0lTVCcsIDE2KTsKCi8vIEV2ZW50IGxvb3AgbW9kZXMKCi8qKgogKiBFdmVudCBiYXNlIGxvb3AgbW9kZS4KICogU3RhcnRzIG9ubHkgb25lIGl0ZXJhdGlvbiBvZiBsb29wLgogKgogKiBAc2VlIGV2ZW50X2Jhc2VfbG9vcAogKi8KZGVmaW5lKCdFVkxPT1BfT05DRScsIDEpOwoKLyoqCiAqIEV2ZW50IGJhc2UgbG9vcCBtb2RlLgogKiBOb3Qgd2FpdCBmb3IgZXZlbnRzIHRvIHRyaWdnZXIsIG9ubHkgY2hlY2sgd2hldGhlcgogKiBhbnkgZXZlbnRzIGFyZSByZWFkeSB0byB0cmlnZ2VyIGltbWVkaWF0ZWx5LgogKgogKiBAc2VlIGV2ZW50X2Jhc2VfbG9vcAogKi8KZGVmaW5lKCdFVkxPT1BfTk9OQkxPQ0snLCAyKTsKCi8vIEJ1ZmZlcmVkIGV2ZW50IGVycm9yIGNvZGVzIChzZWNvbmQgYXJndW1lbnQgaW4gYnVmZmVyJ3MgZXJyb3ItY2FsbGJhY2spCgovKioKICogQW4gZXZlbnQgb2NjdXJyZWQgZHVyaW5nIGEgcmVhZCBvcGVyYXRpb24gb24gdGhlCiAqIGJ1ZmZlcmV2ZW50LiBTZWUgdGhlIG90aGVyIGZsYWdzIGZvciB3aGljaCBldmVudCBpdCB3YXMuCiAqLwpkZWZpbmUoJ0VWQlVGRkVSX1JFQUQnLCAxKTsKCi8qKgogKiBBbiBldmVudCBvY2N1cnJlZCBkdXJpbmcgYSB3cml0ZSBvcGVyYXRpb24gb24gdGhlIGJ1ZmZlcmV2ZW50LgogKiBTZWUgdGhlIG90aGVyIGZsYWdzIGZvciB3aGljaCBldmVudCBpdCB3YXMuCiAqLwpkZWZpbmUoJ0VWQlVGRkVSX1dSSVRFJywgMik7CgovKioKICogV2UgZmluaXNoZWQgYSByZXF1ZXN0ZWQgY29ubmVjdGlvbiBvbiB0aGUgYnVmZmVyZXZlbnQuCiAqLwpkZWZpbmUoJ0VWQlVGRkVSX0VPRicsIDE2KTsKCi8qKgogKiBBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgYSBidWZmZXJldmVudCBvcGVyYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uCiAqIG9uIHdoYXQgdGhlIGVycm9yIHdhcywgY2FsbCB7QGxpbmsgc29ja2V0X3N0cmVycm9yfSgpLgogKi8KZGVmaW5lKCdFVkJVRkZFUl9FUlJPUicsIDMyKTsKCi8qKgogKiBBIHRpbWVvdXQgZXhwaXJlZCBvbiB0aGUgYnVmZmVyZXZlbnQuCiAqLwpkZWZpbmUoJ0VWQlVGRkVSX1RJTUVPVVQnLCA2NCk7CgovKioKICogPHA+Q3JlYXRlIGFuZCBpbml0aWFsaXplIG5ldyBldmVudCBiYXNlPC9wPgogKgogKiA8cD5SZXR1cm5zIG5ldyBldmVudCBiYXNlLCB3aGljaCBjYW4gYmUgdXNlZCBsYXRlciBpbiB7QGxpbmsgZXZlbnRfYmFzZV9zZXR9KCksIHtAbGluayBldmVudF9iYXNlX2xvb3B9KCkgYW5kIG90aGVyIGZ1bmN0aW9ucy48L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9ldmVudF9iYXNlX25ldwogKgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIHJldHVybnMgdmFsaWQgZXZlbnQgYmFzZSByZXNvdXJjZSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZXZlbnRfYmFzZV9uZXcoKSB7fQoKLyoqCiAqIDxwPkRlc3Ryb3kgZXZlbnQgYmFzZTwvcD4KICogPHA+KFBFQ0wgbGliZXZlbnQgPj0gMC4wLjEpPC9wPgogKgogKiA8cD5EZXN0cm95cyB0aGUgc3BlY2lmaWVkIGV2ZW50X2Jhc2UgYW5kIGZyZWVzIGFsbCB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQuCiAqIE5vdGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byBkZXN0cm95IGFuIGV2ZW50IGJhc2Ugd2l0aCBldmVudHMgYXR0YWNoZWQgdG8gaXQuPC9wPgogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvZXZlbnRfYmFzZV9mcmVlCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXZlbnRfYmFzZSBWYWxpZCBldmVudCBiYXNlIHJlc291cmNlLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIGV2ZW50X2Jhc2VfZnJlZSgkZXZlbnRfYmFzZSkge30KCi8qKgogKiA8cD5IYW5kbGUgZXZlbnRzPC9wPgogKiA8cD4oUEVDTCBsaWJldmVudCA+PSAwLjAuMSk8L3A+CiAqCiAqIDxwPlN0YXJ0cyBldmVudCBsb29wIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50IGJhc2UuPC9wPgogKgogKiA8cD5CeSBkZWZhdWx0LCB0aGUge0BsaW5rIGV2ZW50X2Jhc2VfbG9vcH0oKSBmdW5jdGlvbiBydW5zIGFuIGV2ZW50X2Jhc2UgdW50aWwKICogdGhlcmUgYXJlIG5vIG1vcmUgZXZlbnRzIHJlZ2lzdGVyZWQgaW4gaXQuIFRvIHJ1biB0aGUgbG9vcCwgaXQgcmVwZWF0ZWRseQogKiBjaGVja3Mgd2hldGhlciBhbnkgb2YgdGhlIHJlZ2lzdGVyZWQgZXZlbnRzIGhhcyB0cmlnZ2VyZWQgKGZvciBleGFtcGxlLAogKiBpZiBhIHJlYWQgZXZlbnQncyBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZHkgdG8gcmVhZCwgb3IgaWYgYSB0aW1lb3V0IGV2ZW50J3MKICogdGltZW91dCBpcyByZWFkeSB0byBleHBpcmUpLiBPbmNlIHRoaXMgaGFwcGVucywgaXQgbWFya3MgYWxsIHRyaWdnZXJlZCBldmVudHMKICogYXMgImFjdGl2ZSIsIGFuZCBzdGFydHMgdG8gcnVuIHRoZW0uCiAqIDwvcD4KICoKICogPHA+WW91IGNhbiBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGV2ZW50X2Jhc2VfbG9vcCgpIGJ5IHNldHRpbmcgb25lIG9yIG1vcmUgZmxhZ3MKICogaW4gaXRzIGZsYWdzIGFyZ3VtZW50LiBJZiBFVkxPT1BfT05DRSBpcyBzZXQsIHRoZW4gdGhlIGxvb3Agd2lsbCB3YWl0IHVudGlsIHNvbWUKICogZXZlbnRzIGJlY29tZSBhY3RpdmUsIHRoZW4gcnVuIGFjdGl2ZSBldmVudHMgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgdG8gcnVuLCB0aGVuCiAqIHJldHVybi4gSWYgRVZMT09QX05PTkJMT0NLIGlzIHNldCwgdGhlbiB0aGUgbG9vcCB3aWxsIG5vdCB3YWl0IGZvciBldmVudHMgdG8gdHJpZ2dlcjoKICogaXQgd2lsbCBvbmx5IGNoZWNrIHdoZXRoZXIgYW55IGV2ZW50cyBhcmUgcmVhZHkgdG8gdHJpZ2dlciBpbW1lZGlhdGVseSwKICogYW5kIHJ1biB0aGVpciBjYWxsYmFja3MgaWYgc28uCiAqIDwvcD4KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L2V2ZW50X2Jhc2VfbG9vcAogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50X2Jhc2UgVmFsaWQgZXZlbnQgYmFzZSByZXNvdXJjZS4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSBPcHRpb25hbCBwYXJhbWV0ZXIsIHdoaWNoIGNhbiB0YWtlIGFueSBjb21iaW5hdGlvbiBvZiBFVkxPT1BfT05DRSBhbmQgRVZMT09QX05PTkJMT0NLLgogKgogKiBAcmV0dXJuIGludCA8cD4KICogUmV0dXJucyAwIGlmIGl0IGV4aXRlZCBub3JtYWxseSwKICogLTEgaWYgaXQgZXhpdGVkIGJlY2F1c2Ugb2Ygc29tZSB1bmhhbmRsZWQgZXJyb3IgaW4gdGhlIGJhY2tlbmQKICogYW5kIDEgaWYgbm8gZXZlbnRzIHdlcmUgcmVnaXN0ZXJlZC4KICogPC9wPgogKi8KZnVuY3Rpb24gZXZlbnRfYmFzZV9sb29wKCRldmVudF9iYXNlLCAkZmxhZ3MgPSBudWxsKSB7fQoKLyoqCiAqIDxwPlRlbGxzIHRoZSBldmVudF9iYXNlIHRvIGV4aXQgaXRzIGxvb3AgaW1tZWRpYXRlbHkuPC9wPgogKiA8cD4oUEVDTCBsaWJldmVudCA+PSAwLjAuMSk8L3A+CiAqCiAqIDxwPkl0IGRpZmZlcnMgZnJvbSB7QGxpbmsgZXZlbnRfYmFzZV9sb29wZXhpdH0oKSBpbiB0aGF0IGlmIHRoZSBldmVudF9iYXNlIGlzIGN1cnJlbnRseQogKiBydW5uaW5nIGNhbGxiYWNrcyBmb3IgYW55IGFjdGl2ZSBldmVudHMsIGl0IHdpbGwgZXhpdCBpbW1lZGlhdGVseSBhZnRlciBmaW5pc2hpbmcgdGhlCiAqIG9uZSBpdCdzIGN1cnJlbnRseSBwcm9jZXNzaW5nLiBUaGUgYmVoYXZpb3VyIGlzIHNpbWlsYXIgdG8gYnJlYWsgc3RhdGVtZW50LjwvcD4KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L2V2ZW50X2Jhc2VfbG9vcGJyZWFrCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXZlbnRfYmFzZSBWYWxpZCBldmVudCBiYXNlIHJlc291cmNlLgogKgogKiBAcmV0dXJuIGJvb2wgcmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBldmVudF9iYXNlX2xvb3BicmVhaygkZXZlbnRfYmFzZSkge30KCi8qKgogKiA8cD5UZWxscyBhbiBldmVudF9iYXNlIHRvIHN0b3AgbG9vcGluZyBhZnRlciBhIGdpdmVuIHRpbWUgaGFzIGVsYXBzZWQ8L3A+CiAqIDxwPihQRUNMIGxpYmV2ZW50ID49IDAuMC4xKTwvcD4KICoKICogPHA+SWYgdGhlIGV2ZW50X2Jhc2UgaXMgY3VycmVudGx5IHJ1bm5pbmcgY2FsbGJhY2tzIGZvciBhbnkgYWN0aXZlIGV2ZW50cywKICogaXQgd2lsbCBjb250aW51ZSBydW5uaW5nIHRoZW0sIGFuZCBub3QgZXhpdCB1bnRpbCB0aGV5IGhhdmUgYWxsIGJlZW4gcnVuLjwvcD4KICoKICogPHA+SWYgZXZlbnQgbG9vcCBpc24ndCBydW5uaW5nIHtAbGluayBldmVudF9iYXNlX2xvb3BleGl0fSgpIHNjaGVkdWxlcyB0aGUgbmV4dCBpbnN0YW5jZQogKiBvZiB0aGUgZXZlbnQgbG9vcCB0byBzdG9wIHJpZ2h0IGFmdGVyIHRoZSBuZXh0IHJvdW5kIG9mIGNhbGxiYWNrcyBhcmUgcnVuIChhcyBpZiBpdCBoYWQKICogYmVlbiBpbnZva2VkIHdpdGggRVZMT09QX09OQ0UpLjwvcD4KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L2V2ZW50X2Jhc2VfbG9vcGV4aXQKICoKICogQHBhcmFtIHJlc291cmNlICRldmVudF9iYXNlIDxwPgogKiBWYWxpZCBldmVudCBiYXNlIHJlc291cmNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHRpbWVvdXQgW29wdGlvbmFsXSA8cD4KICogT3B0aW9uYWwgdGltZW91dCBwYXJhbWV0ZXIgKGluIG1pY3Jvc2Vjb25kcykuIElmIGxvd2VyIHRoYW4gMSwKICogdGhlIGV2ZW50X2Jhc2Ugc3RvcHMgbG9vcGluZyB3aXRob3V0IGEgZGVsYXkuCiAqIDwvcD4KICoKICogQHJldHVybiBib29sIHJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZXZlbnRfYmFzZV9sb29wZXhpdCgkZXZlbnRfYmFzZSwgJHRpbWVvdXQgPSAtMSkge30KCi8qKgogKiA8cD5Bc3NvY2lhdGUgZXZlbnQgYmFzZSB3aXRoIGFuIGV2ZW50PC9wPgogKiA8cD4oUEVDTCBsaWJldmVudCA+PSAwLjAuMSk8L3A+CiAqCiAqIDxwPkFzc29jaWF0ZXMgdGhlIGV2ZW50X2Jhc2Ugd2l0aCB0aGUgZXZlbnQuPC9wPgogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvZXZlbnRfYmFzZV9zZXQKICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBWYWxpZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIHJlc291cmNlICRiYXNlIFZhbGlkIGV2ZW50IGJhc2UgcmVzb3VyY2UuCiAqCiAqIEByZXR1cm4gYm9vbCByZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGV2ZW50X2Jhc2Vfc2V0KCRldmVudCwgJGJhc2UpIHt9CgovKioKICogPHA+U2V0IHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IGV2ZW50IHByaW9yaXR5IGxldmVsczwvcD4KICogPHA+KFBFQ0wgbGliZXZlbnQgPj0gMC4wLjIpPC9wPgogKgogKiA8cD5CeSBkZWZhdWx0IGFsbCBldmVudHMgYXJlIHNjaGVkdWxlZCB3aXRoIHRoZSBzYW1lIHByaW9yaXR5IChucHJpb3JpdGllcy8yKS4KICogVXNpbmcge0BsaW5rIGV2ZW50X2Jhc2VfcHJpb3JpdHlfaW5pdH0oKSB5b3UgY2FuIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGV2ZW50IHByaW9yaXR5CiAqIGxldmVscyBhbmQgdGhlbiBzZXQgYSBkZXNpcmVkIHByaW9yaXR5IGZvciBlYWNoIGV2ZW50LjwvcD4KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L2V2ZW50X2Jhc2VfcHJpb3JpdHlfaW5pdAogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50X2Jhc2UgVmFsaWQgZXZlbnQgYmFzZSByZXNvdXJjZS4KICogQHBhcmFtIGludCAkbnByaW9yaXRpZXMgVGhlIG51bWJlciBvZiBldmVudCBwcmlvcml0eSBsZXZlbHMuCiAqCiAqIEByZXR1cm4gYm9vbCByZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGV2ZW50X2Jhc2VfcHJpb3JpdHlfaW5pdCgkZXZlbnRfYmFzZSwgJG5wcmlvcml0aWVzKSB7fQoKLyoqCiAqIDxwPkNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgZXZlbnQgcmVzb3VyY2UuPC9wPgogKiA8cD4oUEVDTCBsaWJldmVudCA+PSAwLjAuMSk8L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9ldmVudF9uZXcKICoKICogQHJldHVybiByZXNvdXJjZXxmYWxzZSByZXR1cm5zIGEgbmV3IGV2ZW50IHJlc291cmNlIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBldmVudF9uZXcoKSB7fQoKLyoqCiAqIDxwPkZyZWUgZXZlbnQgcmVzb3VyY2UuPC9wPgogKiA8cD4oUEVDTCBsaWJldmVudCA+PSAwLjAuMSk8L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9ldmVudF9mcmVlCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXZlbnQgVmFsaWQgZXZlbnQgcmVzb3VyY2UuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gZXZlbnRfZnJlZSgkZXZlbnQpIHt9CgovKioKICogPHA+QWRkIGFuIGV2ZW50IHRvIHRoZSBzZXQgb2YgbW9uaXRvcmVkIGV2ZW50czwvcD4KICogPHA+KFBFQ0wgbGliZXZlbnQgPj0gMC4wLjEpPC9wPgogKgogKiA8cD5TY2hlZHVsZXMgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbm9uLXBlbmRpbmcgZXZlbnQgKG1ha2VzIGl0IHBlbmRpbmcgaW4gaXQncwogKiBjb25maWd1cmVkIGJhc2UpIHdoZW4gdGhlIGV2ZW50IHNwZWNpZmllZCBpbiB7QGxpbmsgZXZlbnRfc2V0fSgpIG9jY3VycyBvciBpbgogKiBhdCBsZWFzdCB0aGUgdGltZSBzcGVjaWZpZWQgYnkgdGhlIHRpbWVvdXQgYXJndW1lbnQuIElmIHRpbWVvdXQgd2FzIG5vdCBzcGVjaWZpZWQsCiAqIG5vdCB0aW1lb3V0IGlzIHNldC4gVGhlIGV2ZW50IG11c3QgYmUgYWxyZWFkeSBpbml0aWFsaXplZCBieQogKiB7QGxpbmsgZXZlbnRfc2V0fSgpIGFuZCB7QGxpbmsgZXZlbnRfYmFzZV9zZXR9KCkgZnVuY3Rpb25zLgogKiBJZiB0aGUgZXZlbnQgYWxyZWFkeSBoYXMgYSB0aW1lb3V0IHNldCwKICogaXQgaXMgcmVwbGFjZWQgYnkgdGhlIG5ldyBvbmUuPC9wPgogKgogKiA8cD5JZiB5b3UgY2FsbCB7QGxpbmsgZXZlbnRfYWRkfSgpIG9uIGFuIGV2ZW50IHRoYXQgaXMgYWxyZWFkeSBwZW5kaW5nLAogKiBpdCB3aWxsIGxlYXZlIGl0IHBlbmRpbmcsIGFuZCByZXNjaGVkdWxlIGl0IHdpdGggdGhlIHByb3ZpZGVkIHRpbWVvdXQuPC9wPgogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvZXZlbnRfYWRkCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXZlbnQgPHA+CiAqIFZhbGlkIGV2ZW50IHJlc291cmNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHRpbWVvdXQgW29wdGlvbmFsXSA8cD4KICogT3B0aW9uYWwgdGltZW91dCAoaW4gbWljcm9zZWNvbmRzKS4KICogPC9wPgogKgogKiBAcmV0dXJuIGJvb2wgcmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBldmVudF9hZGQoJGV2ZW50LCAkdGltZW91dCA9IC0xKSB7fQoKLyoqCiAqIDxwPlByZXBhcmVzIHRoZSBldmVudCB0byBiZSB1c2VkIGluIHtAbGluayBldmVudF9hZGR9KCkuPC9wPgogKiA8cD4oUEVDTCBsaWJldmVudCA+PSAwLjAuMSk8L3A+CiAqCiAqIDxwPlRoZSBldmVudCBpcyBwcmVwYXJlZCB0byBjYWxsIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGNhbGxiYWNrCiAqIG9uIHRoZSBldmVudHMgc3BlY2lmaWVkIGluIHBhcmFtZXRlciBldmVudHMsIHdoaWNoIGlzIGEgc2V0IG9mIHRoZSBmb2xsb3dpbmcKICogZmxhZ3M6IEVWX1RJTUVPVVQsIEVWX1NJR05BTCwgRVZfUkVBRCwgRVZfV1JJVEUgYW5kIEVWX1BFUlNJU1QuPC9wPgogKgogKiA8cD5FVl9TSUdOQUwgc3VwcG9ydCB3YXMgYWRkZWQgaW4gdmVyc2lvbiAwLjAuNDwvcD4KICoKICogPHA+QWZ0ZXIgaW5pdGlhbGl6aW5nIHRoZSBldmVudCwgdXNlIHtAbGluayBldmVudF9iYXNlX3NldH0oKSB0byBhc3NvY2lhdGUgdGhlIGV2ZW50IHdpdGggaXRzIGV2ZW50IGJhc2UuPC9wPgogKgogKiA8cD5JbiBjYXNlIG9mIG1hdGNoaW5nIGV2ZW50LCB0aGVzZSB0aHJlZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb246CiAqIDx0YWJsZT4KICogCTx0cj4KICogCQk8dGQ+PGI+JGZkPC9iPjwvdGQ+CiAqIAkJPHRkPlNpZ25hbCBudW1iZXIgb3IgcmVzb3VyY2UgaW5kaWNhdGluZyB0aGUgc3RyZWFtLjwvdGQ+CiAqIAk8L3RyPgogKiAJPHRyPgogKiAJCTx0ZD48Yj4kZXZlbnRzPC9iPjwvdGQ+CiAqIAkJPHRkPkEgZmxhZyBpbmRpY2F0aW5nIHRoZSBldmVudC4gQ29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmbGFnczogRVZfVElNRU9VVCwgRVZfU0lHTkFMLCBFVl9SRUFELCBFVl9XUklURSBhbmQgRVZfUEVSU0lTVC48L3RkPgogKiAJPC90cj4KICogCTx0cj4KICogCQk8dGQ+PGI+JGFyZzwvYj48L3RkPgogKiAJCTx0ZD5PcHRpb25hbCBwYXJhbWV0ZXIsIHByZXZpb3VzbHkgcGFzc2VkIHRvIHtAbGluayBldmVudF9zZXR9KCkgYXMgYXJnLjwvdGQ+CiAqIAk8L3RyPgogKiA8L3RhYmxlPgogKiA8L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9ldmVudF9zZXQKICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCA8cD4KICogVmFsaWQgZXZlbnQgcmVzb3VyY2UuCiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlfGludCAkZmQgPHA+CiAqIFZhbGlkIFBIUCBzdHJlYW0gcmVzb3VyY2UuIFRoZSBzdHJlYW0gbXVzdCBiZSBjYXN0YWJsZSB0byBmaWxlIGRlc2NyaXB0b3IsCiAqIHNvIHlvdSBtb3N0IGxpa2VseSB3b24ndCBiZSBhYmxlIHRvIHVzZSBhbnkgb2YgZmlsdGVyZWQgc3RyZWFtcy4KICogPC9wPgogKiBAcGFyYW0gaW50ICRldmVudHMgPHA+CiAqIEEgc2V0IG9mIGZsYWdzIGluZGljYXRpbmcgdGhlIGRlc2lyZWQgZXZlbnQsIGNhbiBiZSBFVl9SRUFEIGFuZC9vciBFVl9XUklURS4KICogVGhlIGFkZGl0aW9uYWwgZmxhZyBFVl9QRVJTSVNUIG1ha2VzIHRoZSBldmVudCB0byBwZXJzaXN0IHVudGlsIHtAbGluayBldmVudF9kZWx9KCkgaXMKICogY2FsbGVkLCBvdGhlcndpc2UgdGhlIGNhbGxiYWNrIGlzIGludm9rZWQgb25seSBvbmNlLgogKiA8L3A+CiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgPHA+CiAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBtYXRjaGluZyBldmVudCBvY2N1cnMuCiAqIDwvcD4KICogQHBhcmFtIG1peGVkICRhcmcgW29wdGlvbmFsXSA8cD4KICogT3B0aW9uYWwgY2FsbGJhY2sgcGFyYW1ldGVyLgogKiA8L3A+CiAqCiAqIEByZXR1cm4gYm9vbCByZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGV2ZW50X3NldCgkZXZlbnQsICRmZCwgJGV2ZW50cywgJGNhbGxiYWNrLCAkYXJnID0gbnVsbCkge30KCi8qKgogKiA8cD5SZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgc2V0IG9mIG1vbml0b3JlZCBldmVudHMuPC9wPgogKiA8cD4oUEVDTCBsaWJldmVudCA+PSAwLjAuMSk8L3A+CiAqCiAqIDxwPkNhbGxpbmcge0BsaW5rIGV2ZW50X2RlbH0oKSBvbiBhbiBpbml0aWFsaXplZCBldmVudCBtYWtlcyBpdCBub24tcGVuZGluZwogKiBhbmQgbm9uLWFjdGl2ZS4gSWYgdGhlIGV2ZW50IHdhcyBub3QgcGVuZGluZyBvciBhY3RpdmUsIHRoZXJlIGlzIG5vIGVmZmVjdC48L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9ldmVudF9kZWwKICoKICogQHBhcmFtIHJlc291cmNlICRldmVudCBWYWxpZCBldmVudCByZXNvdXJjZS4KICoKICogQHJldHVybiBib29sIHJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZXZlbnRfZGVsKCRldmVudCkge30KCi8qKgogKiA8cD5DcmVhdGUgbmV3IGJ1ZmZlcmVkIGV2ZW50PC9wPgogKiA8cD4oUEVDTCBsaWJldmVudCA+PSAwLjAuMSk8L3A+CiAqCiAqIDxwPkxpYmV2ZW50IHByb3ZpZGVzIGFuIGFic3RyYWN0aW9uIGxheWVyIG9uIHRvcCBvZiB0aGUgcmVndWxhciBldmVudCBBUEkuCiAqIFVzaW5nIGJ1ZmZlcmVkIGV2ZW50IHlvdSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCB0aGUgSS9PIG1hbnVhbGx5LCBpbnN0ZWFkCiAqIGl0IHByb3ZpZGVzIGlucHV0IGFuZCBvdXRwdXQgYnVmZmVycyB0aGF0IGdldCBmaWxsZWQgYW5kIGRyYWluZWQgYXV0b21hdGljYWxseS48L3A+CiAqCiAqIDxwPkV2ZXJ5IGJ1ZmZlcmV2ZW50IGhhcyB0d28gZGF0YS1yZWxhdGVkIGNhbGxiYWNrczogYSByZWFkIGNhbGxiYWNrIGFuZCBhIHdyaXRlCiAqIGNhbGxiYWNrLiBCeSBkZWZhdWx0LCB0aGUgcmVhZCBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgYW55IGRhdGEgaXMgcmVhZCBmcm9tCiAqIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCwgYW5kIHRoZSB3cml0ZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgZW5vdWdoIGRhdGEKICogZnJvbSB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBlbXB0aWVkIHRvIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydC4gWW91IGNhbiBvdmVycmlkZQogKiB0aGUgYmVoYXZpb3Igb2YgdGhlc2UgZnVuY3Rpb25zIGJ5IGFkanVzdGluZyB0aGUgcmVhZCBhbmQgd3JpdGUgIndhdGVybWFya3MiCiAqIG9mIHRoZSBidWZmZXJldmVudCAoc2VlIHtAbGluayBldmVudF9idWZmZXJfd2F0ZXJtYXJrX3NldH0oKSkuPC9wPgogKgogKiA8cD5BIGJ1ZmZlcmV2ZW50IGFsc28gaGFzIGFuICJlcnJvciIgb3IgImV2ZW50IiBjYWxsYmFjayB0aGF0IGdldHMgaW52b2tlZCB0byB0ZWxsCiAqIHRoZSBhcHBsaWNhdGlvbiBhYm91dCBub24tZGF0YS1vcmllbnRlZCBldmVudHMsIGxpa2Ugd2hlbiBhIGNvbm5lY3Rpb24gaXMgY2xvc2VkIG9yCiAqIGFuIGVycm9yIG9jY3Vycy48L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9ldmVudF9idWZmZXJfbmV3CiAqCiAqIEBwYXJhbSByZXNvdXJjZSAgICAgICRzdHJlYW0gIFZhbGlkIFBIUCBzdHJlYW0gcmVzb3VyY2UuIE11c3QgYmUgY2FzdGFibGUgdG8gZmlsZSBkZXNjcmlwdG9yLgogKiBAcGFyYW0gY2FsbGFibGV8bnVsbCAkcmVhZGNiICBDYWxsYmFjayB0byBpbnZva2Ugd2hlcmUgdGhlcmUgaXMgZGF0YSB0byByZWFkLCBvciBOVUxMIGlmIG5vIGNhbGxiYWNrIGlzIGRlc2lyZWQuCiAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICR3cml0ZWNiIENhbGxiYWNrIHRvIGludm9rZSB3aGVyZSB0aGUgZGVzY3JpcHRvciBpcyByZWFkeSBmb3Igd3JpdGluZywgb3IgTlVMTCBpZiBubyBjYWxsYmFjayBpcyBkZXNpcmVkLgogKiBAcGFyYW0gY2FsbGFibGUgICAgICAkZXJyb3JjYiBDYWxsYmFjayB0byBpbnZva2Ugd2hlcmUgdGhlcmUgaXMgYW4gZXJyb3Igb24gdGhlIGRlc2NyaXB0b3IsIGNhbm5vdCBiZSBOVUxMLgogKiBAcGFyYW0gbWl4ZWQgICAgICAgICAkYXJnICAgICBBbiBhcmd1bWVudCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIGVhY2ggb2YgdGhlIGNhbGxiYWNrcyAob3B0aW9uYWwpLgogKgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIHJldHVybnMgbmV3IGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBldmVudF9idWZmZXJfbmV3KCRzdHJlYW0sICRyZWFkY2IsICR3cml0ZWNiLCAkZXJyb3JjYiwgJGFyZyA9IG51bGwpIHt9CgovKioKICogPHA+RGVzdHJveXMgdGhlIHNwZWNpZmllZCBidWZmZXJlZCBldmVudCBhbmQgZnJlZXMgYWxsIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZC48L3A+CiAqIDxwPihQRUNMIGxpYmV2ZW50ID49IDAuMC4xKTwvcD4KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L2V2ZW50X2J1ZmZlcl9mcmVlCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIGV2ZW50X2J1ZmZlcl9mcmVlKCRiZXZlbnQpIHt9CgovKioKICogPHA+QXNzb2NpYXRlIGJ1ZmZlcmVkIGV2ZW50IHdpdGggYW4gZXZlbnQgYmFzZTwvcD4KICogPHA+KFBFQ0wgbGliZXZlbnQgPj0gMC4wLjEpPC9wPgogKgogKiA8cD5Bc3NpZ24gdGhlIHNwZWNpZmllZCBiZXZlbnQgdG8gdGhlIGV2ZW50X2Jhc2UuPC9wPgogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvZXZlbnRfYnVmZmVyX2Jhc2Vfc2V0CiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50X2Jhc2UgVmFsaWQgZXZlbnQgYmFzZSByZXNvdXJjZS4KICoKICogQHJldHVybiBib29sIHJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZXZlbnRfYnVmZmVyX2Jhc2Vfc2V0KCRiZXZlbnQsICRldmVudF9iYXNlKSB7fQoKLyoqCiAqIDxwPkFzc2lnbiBhIHByaW9yaXR5IHRvIGEgYnVmZmVyZWQgZXZlbnQuIFVzZSBpdCBhZnRlcgogKiBpbml0aWFsaXppbmcgZXZlbnQsIGJ1dCBiZWZvcmUgYWRkaW5nIGFuIGV2ZW50IHRvIHRoZSBldmVudF9iYXNlLjwvcD4KICogPHA+KFBFQ0wgbGliZXZlbnQgPj0gMC4wLjEpPC9wPgogKgogKiA8cD5XaGVuIG11bHRpcGxlIGV2ZW50cyB0cmlnZ2VyIGF0IHRoZSBzYW1lIHRpbWUsIExpYmV2ZW50CiAqIGRvZXMgbm90IGRlZmluZSBhbnkgb3JkZXIgd2l0aCByZXNwZWN0IHRvIHdoZW4gdGhlaXIgY2FsbGJhY2tzCiAqIHdpbGwgYmUgZXhlY3V0ZWQuIFlvdSBjYW4gZGVmaW5lIHNvbWUgZXZlbnRzIGFzIG1vcmUgaW1wb3J0YW50CiAqIHRoYW4gb3RoZXJzIGJ5IHVzaW5nIHByaW9yaXRpZXMuPC9wPgogKgogKiA8cD5XaGVuIG11bHRpcGxlIGV2ZW50cyBvZiBtdWx0aXBsZSBwcmlvcml0aWVzIGJlY29tZSBhY3RpdmUsCiAqIHRoZSBsb3ctcHJpb3JpdHkgZXZlbnRzIGFyZSBub3QgcnVuLiBJbnN0ZWFkLCBMaWJldmVudCBydW5zCiAqIHRoZSBoaWdoIHByaW9yaXR5IGV2ZW50cywgdGhlbiBjaGVja3MgZm9yIGV2ZW50cyBhZ2Fpbi4gT25seQogKiB3aGVuIG5vIGhpZ2gtcHJpb3JpdHkgZXZlbnRzIGFyZSBhY3RpdmUgYXJlIHRoZSBsb3ctcHJpb3JpdHkKICogZXZlbnRzIHJ1bi48L3A+CiAqCiAqIDxwPldoZW4geW91IGRvIG5vdCBzZXQgdGhlIHByaW9yaXR5IGZvciBhbiBldmVudCwgdGhlIGRlZmF1bHQKICogaXMgdGhlIG51bWJlciBvZiBxdWV1ZXMgaW4gdGhlIGV2ZW50IGJhc2UsIGRpdmlkZWQgYnkgMi48L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9ldmVudF9idWZmZXJfcHJpb3JpdHlfc2V0CiAqCiAqIEBzZWUgZXZlbnRfYmFzZV9wcmlvcml0eV9pbml0CiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IDxwPgogKiBWYWxpZCBidWZmZXJlZCBldmVudCByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRwcmlvcml0eSA8cD4KICogUHJpb3JpdHkgbGV2ZWwuIENhbm5vdCBiZSBsZXNzIHRoYW4gMCBhbmQgY2Fubm90IGV4Y2VlZAogKiBtYXhpbXVtIHByaW9yaXR5IGxldmVsIG9mIHRoZSBldmVudCBiYXNlIChzZWUge0BsaW5rIGV2ZW50X2Jhc2VfcHJpb3JpdHlfaW5pdH0oKSkuCiAqIDwvcD4KICoKICogQHJldHVybiBib29sIHJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZXZlbnRfYnVmZmVyX3ByaW9yaXR5X3NldCgkYmV2ZW50LCAkcHJpb3JpdHkpIHt9CgovKioKICogPHA+V3JpdGVzIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBidWZmZXJlZCBldmVudC48L3A+CiAqIDxwPihQRUNMIGxpYmV2ZW50ID49IDAuMC4xKTwvcD4KICoKICogPHA+VGhlIGRhdGEgaXMgYXBwZW5kZWQgdG8gdGhlIG91dHB1dCBidWZmZXIgYW5kIHdyaXR0ZW4KICogdG8gdGhlIGRlc2NyaXB0b3Igd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZSBmb3Igd3JpdGluZy48L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9ldmVudF9idWZmZXJfd3JpdGUKICoKICogQHBhcmFtIHJlc291cmNlICRiZXZlbnQgVmFsaWQgYnVmZmVyZWQgZXZlbnQgcmVzb3VyY2UuCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGRhdGEgdG8gYmUgd3JpdHRlbi4KICogQHBhcmFtIGludCAkZGF0YV9zaXplIE9wdGlvbmFsIHNpemUgcGFyYW1ldGVyLiB7QGxpbmsgZXZlbnRfYnVmZmVyX3dyaXRlfSgpIHdyaXRlcyBhbGwgdGhlIGRhdGEgYnkgZGVmYXVsdAogKgogKiBAcmV0dXJuIGJvb2wgcmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBldmVudF9idWZmZXJfd3JpdGUoJGJldmVudCwgJGRhdGEsICRkYXRhX3NpemUgPSAtMSkge30KCi8qKgogKiA8cD5SZWFkcyBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciBvZiB0aGUgYnVmZmVyZWQgZXZlbnQuPC9wPgogKiA8cD4oUEVDTCBsaWJldmVudCA+PSAwLjAuMSk8L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9ldmVudF9idWZmZXJfcmVhZAogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGJldmVudCBWYWxpZCBidWZmZXJlZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIGludCAkZGF0YV9zaXplIERhdGEgc2l6ZSBpbiBieXRlcy4KICoKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGV2ZW50X2J1ZmZlcl9yZWFkKCRiZXZlbnQsICRkYXRhX3NpemUpIHt9CgovKioKICogPHA+RW5hYmxlcyB0aGUgc3BlY2lmaWVkIGJ1ZmZlcmVkIGV2ZW50LjwvcD4KICogPHA+KFBFQ0wgbGliZXZlbnQgPj0gMC4wLjEpPC9wPgogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvZXZlbnRfYnVmZmVyX2VuYWJsZQogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGJldmVudCBWYWxpZCBidWZmZXJlZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIGludCAkZXZlbnRzIEFueSBjb21iaW5hdGlvbiBvZiBFVl9SRUFEIGFuZCBFVl9XUklURS4KICoKICogQHJldHVybiBib29sIHJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZXZlbnRfYnVmZmVyX2VuYWJsZSgkYmV2ZW50LCAkZXZlbnRzKSB7fQoKLyoqCiAqIDxwPkRpc2FibGUgYSBidWZmZXJlZCBldmVudDwvcD4KICogPHA+KFBFQ0wgbGliZXZlbnQgPj0gMC4wLjEpPC9wPgogKgogKiA8cD5EaXNhYmxlcyB0aGUgc3BlY2lmaWVkIGJ1ZmZlcmVkIGV2ZW50LjwvcD4KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L2V2ZW50X2J1ZmZlcl9kaXNhYmxlCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRldmVudHMgQW55IGNvbWJpbmF0aW9uIG9mIEVWX1JFQUQgYW5kIEVWX1dSSVRFLgogKgogKiBAcmV0dXJuIGJvb2wgcmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBldmVudF9idWZmZXJfZGlzYWJsZSgkYmV2ZW50LCAkZXZlbnRzKSB7fQoKLyoqCiAqIDxwPlNldHMgdGhlIHJlYWQgYW5kIHdyaXRlIHRpbWVvdXRzIGZvciB0aGUgc3BlY2lmaWVkIGJ1ZmZlcmVkIGV2ZW50LjwvcD4KICogPHA+KFBFQ0wgbGliZXZlbnQgPj0gMC4wLjEpPC9wPgogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvZXZlbnRfYnVmZmVyX3RpbWVvdXRfc2V0CiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYmV2ZW50IFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKiBAcGFyYW0gaW50ICRyZWFkX3RpbWVvdXQgUmVhZCB0aW1lb3V0IChpbiBzZWNvbmRzKS4KICogQHBhcmFtIGludCAkd3JpdGVfdGltZW91dCBXcml0ZSB0aW1lb3V0IChpbiBzZWNvbmRzKS4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBldmVudF9idWZmZXJfdGltZW91dF9zZXQoJGJldmVudCwgJHJlYWRfdGltZW91dCwgJHdyaXRlX3RpbWVvdXQpIHt9CgovKioKICogPHA+U2V0IHRoZSB3YXRlcm1hcmtzIGZvciByZWFkIGFuZCB3cml0ZSBldmVudHMuPC9wPgogKiA8cD4oUEVDTCBsaWJldmVudCA+PSAwLjAuMSk8L3A+CiAqCiAqIDxwPkV2ZXJ5IGJ1ZmZlcmV2ZW50IGhhcyBmb3VyIHdhdGVybWFya3M6PC9wPgogKgogKiA8cD48Yj5SZWFkIGxvdy13YXRlciBtYXJrPC9iPjxici8+CiAqIFdoZW5ldmVyIGEgcmVhZCBvY2N1cnMgdGhhdCBsZWF2ZXMgdGhlIGJ1ZmZlcmV2ZW50J3MgaW5wdXQgYnVmZmVyIGF0IHRoaXMKICogbGV2ZWwgb3IgaGlnaGVyLCB0aGUgYnVmZmVyZXZlbnQncyByZWFkIGNhbGxiYWNrIGlzIGludm9rZWQuIERlZmF1bHRzIHRvIDAsCiAqIHNvIHRoYXQgZXZlcnkgcmVhZCByZXN1bHRzIGluIHRoZSByZWFkIGNhbGxiYWNrIGJlaW5nIGludm9rZWQuPC9wPgogKgogKiA8cD48Yj5SZWFkIGhpZ2gtd2F0ZXIgbWFyazwvYj48YnIvPgogKiBJZiB0aGUgYnVmZmVyZXZlbnQncyBpbnB1dCBidWZmZXIgZXZlciBnZXRzIHRvIHRoaXMgbGV2ZWwsIHRoZSBidWZmZXJldmVudAogKiBzdG9wcyByZWFkaW5nIHVudGlsIGVub3VnaCBkYXRhIGlzIGRyYWluZWQgZnJvbSB0aGUgaW5wdXQgYnVmZmVyIHRvIHRha2UgdXMKICogYmVsb3cgaXQgYWdhaW4uIERlZmF1bHRzIHRvIHVubGltaXRlZCwgc28gdGhhdCB3ZSBuZXZlciBzdG9wIHJlYWRpbmcgYmVjYXVzZQogKiBvZiB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgYnVmZmVyLjwvcD4KICoKICogPHA+PGI+V3JpdGUgbG93LXdhdGVyIG1hcms8L2I+PGJyLz4KICogV2hlbmV2ZXIgYSB3cml0ZSBvY2N1cnMgdGhhdCB0YWtlcyB1cyB0byB0aGlzIGxldmVsIG9yIGJlbG93LCB3ZSBpbnZva2UgdGhlIHdyaXRlCiAqIGNhbGxiYWNrLiBEZWZhdWx0cyB0byAwLCBzbyB0aGF0IGEgd3JpdGUgY2FsbGJhY2sgaXMgbm90IGludm9rZWQgdW5sZXNzIHRoZSBvdXRwdXQKICogYnVmZmVyIGlzIGVtcHRpZWQuPC9wPgogKgogKiA8cD48Yj5Xcml0ZSBoaWdoLXdhdGVyIG1hcms8L2I+PGJyLz4KICogTm90IHVzZWQgYnkgYSBidWZmZXJldmVudCBkaXJlY3RseSwgdGhpcyB3YXRlcm1hcmsgY2FuIGhhdmUgc3BlY2lhbCBtZWFuaW5nIHdoZW4KICogYSBidWZmZXJldmVudCBpcyB1c2VkIGFzIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBvZiBhbm90aGVyIGJ1ZmZlcmV2ZW50LjwvcD4KICoKICogPHA+TGliZXZlbnQgZG9lcyBub3QgaW52b2tlIHJlYWQgY2FsbGJhY2sgdW5sZXNzIHRoZXJlIGlzIGF0IGxlYXN0IGxvd21hcmsKICogYnl0ZXMgaW4gdGhlIGlucHV0IGJ1ZmZlcjsgaWYgdGhlIHJlYWQgYnVmZmVyIGlzIGJleW9uZCB0aGUgaGlnaG1hcmssCiAqIHJlYWRpbmcgaXMgc3RvcHBlZC4gT24gb3V0cHV0LCB0aGUgd3JpdGUgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuZXZlcgogKiB0aGUgYnVmZmVyZWQgZGF0YSBmYWxscyBiZWxvdyB0aGUgbG93bWFyay48L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9ldmVudF9idWZmZXJfd2F0ZXJtYXJrX3NldAogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGJldmVudCAgIFZhbGlkIGJ1ZmZlcmVkIGV2ZW50IHJlc291cmNlLgogKiBAcGFyYW0gaW50ICAgICAgJGV2ZW50cyAgIEFueSBjb21iaW5hdGlvbiBvZiBFVl9SRUFEIGFuZCBFVl9XUklURS4KICogQHBhcmFtIGludCAgICAgICRsb3dtYXJrICBMb3cgd2F0ZXJtYXJrLgogKiBAcGFyYW0gaW50ICAgICAgJGhpZ2htYXJrIEhpZ2ggd2F0ZXJtYXJrLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIGV2ZW50X2J1ZmZlcl93YXRlcm1hcmtfc2V0KCRiZXZlbnQsICRldmVudHMsICRsb3dtYXJrLCAkaGlnaG1hcmspIHt9CgovKioKICogPHA+Q2hhbmdlcyB0aGUgZmlsZSBkZXNjcmlwdG9yIG9uIHdoaWNoIHRoZSBidWZmZXJlZCBldmVudCBvcGVyYXRlcy48L3A+CiAqIDxwPihQRUNMIGxpYmV2ZW50ID49IDAuMC4xKTwvcD4KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L2V2ZW50X2J1ZmZlcl9mZF9zZXQKICoKICogQHBhcmFtIHJlc291cmNlICRiZXZlbnQgVmFsaWQgYnVmZmVyZWQgZXZlbnQgcmVzb3VyY2UuCiAqIEBwYXJhbSByZXNvdXJjZSAkZmQgVmFsaWQgUEhQIHN0cmVhbSwgbXVzdCBiZSBjYXN0YWJsZSB0byBmaWxlIGRlc2NyaXB0b3IuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gZXZlbnRfYnVmZmVyX2ZkX3NldCgkYmV2ZW50LCAkZmQpIHt9CgovKioKICogPHA+U2V0IG9yIHJlc2V0IGNhbGxiYWNrcyBmb3IgYSBidWZmZXJlZCBldmVudDwvcD4KICogPHA+KFBFQ0wgbGliZXZlbnQgPj0gMC4wLjQpPC9wPgogKgogKiA8cD5TZXRzIG9yIGNoYW5nZXMgZXhpc3RpbmcgY2FsbGJhY2tzIGZvciB0aGUgYnVmZmVyZWQgZXZlbnQuPC9wPgogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvZXZlbnRfYnVmZmVyX3NldF9jYWxsYmFjawogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGJldmVudCBWYWxpZCBidWZmZXJlZCBldmVudCByZXNvdXJjZS4KICogQHBhcmFtIGNhbGxhYmxlfG51bGwgJHJlYWRjYiBDYWxsYmFjayB0byBpbnZva2Ugd2hlcmUgdGhlcmUgaXMgZGF0YSB0byByZWFkLCBvciBOVUxMIGlmIG5vIGNhbGxiYWNrIGlzIGRlc2lyZWQuCiAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICR3cml0ZWNiIENhbGxiYWNrIHRvIGludm9rZSB3aGVyZSB0aGUgZGVzY3JpcHRvciBpcyByZWFkeSBmb3Igd3JpdGluZywgb3IgTlVMTCBpZiBubyBjYWxsYmFjayBpcyBkZXNpcmVkLgogKiBAcGFyYW0gY2FsbGFibGUgJGVycm9yY2IgQ2FsbGJhY2sgdG8gaW52b2tlIHdoZXJlIHRoZXJlIGlzIGFuIGVycm9yIG9uIHRoZSBkZXNjcmlwdG9yLCBjYW5ub3QgYmUgTlVMTC4KICogQHBhcmFtIG1peGVkICRhcmcgQW4gYXJndW1lbnQgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBlYWNoIG9mIHRoZSBjYWxsYmFja3MgKG9wdGlvbmFsKS4KICoKICogQHJldHVybiBib29sIHJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZXZlbnRfYnVmZmVyX3NldF9jYWxsYmFjaygkYmV2ZW50LCAkcmVhZGNiLCAkd3JpdGVjYiwgJGVycm9yY2IsICRhcmcgPSBudWxsKSB7fQoKLyoqCiAqIDxwPkFsaWFzIG9mIHtAbGluayBldmVudF9uZXd9KCkuPC9wPgogKgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIHJldHVybnMgdmFsaWQgZXZlbnQgYmFzZSByZXNvdXJjZSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZXZlbnRfdGltZXJfbmV3KCkge30KCi8qKgogKiA8cD5QcmVwYXJlcyB0aGUgdGltZXIgZXZlbnQgdG8gYmUgdXNlZCBpbiB7QGxpbmsgZXZlbnRfYWRkfSgpLjwvcD4KICoKICogPHA+VGhlIGV2ZW50IGlzIHByZXBhcmVkIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBieSB0aGUgY2FsbGJhY2sKICogb24gdGhlIHRpbWVvdXQgZXZlbnQgKEVWX1RJTUVPVVQpLjwvcD4KICoKICogPHA+QWZ0ZXIgaW5pdGlhbGl6aW5nIHRoZSBldmVudCwgdXNlIHtAbGluayBldmVudF9iYXNlX3NldH0oKSB0byBhc3NvY2lhdGUgdGhlIGV2ZW50IHdpdGggaXRzIGV2ZW50IGJhc2UuPC9wPgogKgogKiA8cD5JbiBjYXNlIG9mIG1hdGNoaW5nIGV2ZW50LCB0aGVzZSB0aHJlZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb246CiAqIDx0YWJsZT4KICogCTx0cj4KICogCQk8dGQ+PGI+JGZkPC9iPjwvdGQ+CiAqIAkJPHRkPm51bGw8L3RkPgogKiAJPC90cj4KICogCTx0cj4KICogCQk8dGQ+PGI+JGV2ZW50czwvYj48L3RkPgogKiAJCTx0ZD5BIGZsYWcgaW5kaWNhdGluZyB0aGUgZXZlbnQuIEVWX1RJTUVPVVQuPC90ZD4KICogCTwvdHI+CiAqIAk8dHI+CiAqIAkJPHRkPjxiPiRhcmc8L2I+PC90ZD4KICogCQk8dGQ+T3B0aW9uYWwgcGFyYW1ldGVyLCBwcmV2aW91c2x5IHBhc3NlZCB0byB7QGxpbmsgZXZlbnRfdGltZXJfc2V0fSgpIGFzIGFyZy48L3RkPgogKiAJPC90cj4KICogPC90YWJsZT4KICogPC9wPgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50IDxwPgogKiBWYWxpZCBldmVudCByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIDxwPgogKiBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgbWF0Y2hpbmcgZXZlbnQgb2NjdXJzLgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAkYXJnIFtvcHRpb25hbF0gPHA+CiAqIE9wdGlvbmFsIGNhbGxiYWNrIHBhcmFtZXRlci4KICogPC9wPgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIGV2ZW50X3RpbWVyX3NldCgkZXZlbnQsICRjYWxsYmFjaywgJGFyZyA9IG51bGwpIHt9CgovKioKICogPHA+Q2hlY2tzIGlmIGEgc3BlY2lmaWMgZXZlbnQgaXMgcGVuZGluZyBvciBzY2hlZHVsZWQuPC9wPgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50IDxwPgogKiBWYWxpZCBldmVudCByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICR0aW1lb3V0IFtvcHRpb25hbF0gPHA+CiAqIE9wdGlvbmFsIHRpbWVvdXQgKGluIG1pY3Jvc2Vjb25kcykuCiAqIDwvcD4KICoKICogQHJldHVybiBib29sIFRSVUUgaWYgZXZlbnQgaXMgbm90IHNjaGVkdWxlZCAoYWRkZWQpIEZBTFNFIG90aGVyd2lzZQogKi8KZnVuY3Rpb24gZXZlbnRfdGltZXJfcGVuZGluZygkZXZlbnQsICR0aW1lb3V0ID0gLTEpIHt9CgovKioKICogPHA+QWxpYXMgb2Yge0BsaW5rIGV2ZW50X2FkZH0oKS48L3A+CiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXZlbnQgPHA+CiAqIFZhbGlkIGV2ZW50IHJlc291cmNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHRpbWVvdXQgW29wdGlvbmFsXSA8cD4KICogT3B0aW9uYWwgdGltZW91dCAoaW4gbWljcm9zZWNvbmRzKS4KICogPC9wPgogKgogKiBAcmV0dXJuIGJvb2wgcmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBldmVudF90aW1lcl9hZGQoJGV2ZW50LCAkdGltZW91dCA9IC0xKSB7fQoKLyoqCiAqIDxwPkFsaWFzIG9mIHtAbGluayBldmVudF9kZWx9KCkuPC9wPgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50IFZhbGlkIGV2ZW50IHJlc291cmNlLgogKgogKiBAcmV0dXJuIGJvb2wgcmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBldmVudF90aW1lcl9kZWwoJGV2ZW50KSB7fQoKLy8gRW5kIG9mIFBFQ0wgbGliZXZlbnQgdi4wLjAuNAo8P3BocApjbGFzcyBmZm1wZWdfbW92aWUKewogICAgLyoqICBPcGVuIGEgdmlkZW8gb3IgYXVkaW8gZmlsZSBhbmQgcmV0dXJuIGl0IGFzIGFuIG9iamVjdC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhfdG9fbWVkaWEgLSBGaWxlIHBhdGggb2YgdmlkZW8gb3IgYXVkaW8gZmlsZSB0byBvcGVuLgogICAgICogQHBhcmFtIGJvb2wgJHBlcnNpc3RlbnQgLSBXaGV0aGVyIHRvIG9wZW4gdGhpcyBtZWRpYSBhcyBhIHBlcnNpc3RlbnQgcmVzb3VyY2UuIFNlZSB0aGUgUEhQIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mbyBhYm91dCBwZXJzaXN0ZW50IHJlc291cmNlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHBhdGhfdG9fbWVkaWEsICRwZXJzaXN0ZW50KSB7fQoKICAgIC8qKiBSZXR1cm4gdGhlIGR1cmF0aW9uIG9mIGEgbW92aWUgb3IgYXVkaW8gZmlsZSBpbiBzZWNvbmRzLgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldER1cmF0aW9uKCkge30KCiAgICAvKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJhbWVzIGluIGEgbW92aWUgb3IgYXVkaW8gZmlsZS4KICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGcmFtZUNvdW50KCkge30KCiAgICAvKiogUmV0dXJuIHRoZSBmcmFtZSByYXRlIG9mIGEgbW92aWUgaW4gZnBzLgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyYW1lUmF0ZSgpIHt9CgogICAgLyoqIFJldHVybiB0aGUgcGF0aCBhbmQgbmFtZSBvZiB0aGUgbW92aWUgZmlsZSBvciBhdWRpbyBmaWxlLgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpbGVuYW1lKCkge30KCiAgICAvKiogUmV0dXJuIHRoZSBjb21tZW50IGZpZWxkIGZyb20gdGhlIG1vdmllIG9yIGF1ZGlvIGZpbGUuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29tbWVudCgpIHt9CgogICAgLyoqIFJldHVybiB0aGUgdGl0bGUgZmllbGQgZnJvbSB0aGUgbW92aWUgb3IgYXVkaW8gZmlsZS4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaXRsZSgpIHt9CgogICAgLyoqIFJldHVybiB0aGUgYXV0aG9yIGZpZWxkIGZyb20gdGhlIG1vdmllIG9yIHRoZSBhcnRpc3QgSUQzIGZpZWxkIGZyb20gYW4gbXAzIGZpbGUuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aG9yKCkge30KCiAgICAvKiogUmV0dXJuIHRoZSBhdXRob3IgZmllbGQgZnJvbSB0aGUgbW92aWUgb3IgdGhlIGFydGlzdCBJRDMgZmllbGQgZnJvbSBhbiBtcDMgZmlsZS4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBcnRpc3QoKSB7fQoKICAgIC8qKiBSZXR1cm4gdGhlIGNvcHlyaWdodCBmaWVsZCBmcm9tIHRoZSBtb3ZpZSBvciBhdWRpbyBmaWxlLgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvcHlyaWdodCgpIHt9CgogICAgLyoqIFJldHVybiB0aGUgZ2VucmUgSUQzIGZpZWxkIGZyb20gYW4gbXAzIGZpbGUuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0R2VucmUoKSB7fQoKICAgIC8qKiBSZXR1cm4gdGhlIHRyYWNrIElEMyBmaWVsZCBmcm9tIGFuIG1wMyBmaWxlLgogICAgICogQHJldHVybiBzdHJpbmd8aW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUcmFja051bWJlcigpIHt9CgogICAgLyoqIFJldHVybiB0aGUgeWVhciBJRDMgZmllbGQgZnJvbSBhbiBtcDMgZmlsZS4KICAgICAqIEByZXR1cm4gc3RyaW5nfGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0WWVhcigpIHt9CgogICAgLyoqIFJldHVybiB0aGUgaGVpZ2h0IG9mIHRoZSBtb3ZpZSBpbiBwaXhlbHMuCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RnJhbWVIZWlnaHQoKSB7fQoKICAgIC8qKiBSZXR1cm4gdGhlIHdpZHRoIG9mIHRoZSBtb3ZpZSBpbiBwaXhlbHMuCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RnJhbWVXaWR0aCgpIHt9CgogICAgLyoqIFJldHVybiB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSBtb3ZpZS4qLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBpeGVsRm9ybWF0KCkge30KCiAgICAvKiogUmV0dXJuIHRoZSBiaXQgcmF0ZSBvZiB0aGUgbW92aWUgb3IgYXVkaW8gZmlsZSBpbiBiaXRzIHBlciBzZWNvbmQuCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qml0UmF0ZSgpIHt9CgogICAgLyoqIFJldHVybiB0aGUgYml0IHJhdGUgb2YgdGhlIHZpZGVvIGluIGJpdHMgcGVyIHNlY29uZC4KICAgICAqIE5PVEU6IFRoaXMgb25seSB3b3JrcyBmb3IgZmlsZXMgd2l0aCBjb25zdGFudCBiaXQgcmF0ZS4KICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWaWRlb0JpdFJhdGUoKSB7fQoKICAgIC8qKiBSZXR1cm4gdGhlIGF1ZGlvIGJpdCByYXRlIG9mIHRoZSBtZWRpYSBmaWxlIGluIGJpdHMgcGVyIHNlY29uZC4KICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdWRpb0JpdFJhdGUoKSB7fQoKICAgIC8qKiBSZXR1cm4gdGhlIGF1ZGlvIHNhbXBsZSByYXRlIG9mIHRoZSBtZWRpYSBmaWxlIGluIGJpdHMgcGVyIHNlY29uZC4KICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdWRpb1NhbXBsZVJhdGUoKSB7fQoKICAgIC8qKiBSZXR1cm4gdGhlIGN1cnJlbnQgZnJhbWUgaW5kZXguCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RnJhbWVOdW1iZXIoKSB7fQoKICAgIC8qKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHZpZGVvIGNvZGVjIHVzZWQgdG8gZW5jb2RlIHRoaXMgbW92aWUgYXMgYSBzdHJpbmcuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmlkZW9Db2RlYygpIHt9CgogICAgLyoqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgYXVkaW8gY29kZWMgdXNlZCB0byBlbmNvZGUgdGhpcyBtb3ZpZSBhcyBhIHN0cmluZy4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdWRpb0NvZGVjKCkge30KCiAgICAvKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgYXVkaW8gY2hhbm5lbHMgaW4gdGhpcyBtb3ZpZSBhcyBhbiBpbnRlZ2VyLgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1ZGlvQ2hhbm5lbHMoKSB7fQoKICAgIC8qKiBSZXR1cm4gYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1vdmllIGhhcyBhbiBhdWRpbyBzdHJlYW0uCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc0F1ZGlvKCkge30KCiAgICAvKiogUmV0dXJuIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtb3ZpZSBoYXMgYSB2aWRlbyBzdHJlYW0uCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc1ZpZGVvKCkge30KCiAgICAvKiogUmV0dXJucyBhIGZyYW1lIGZyb20gdGhlIG1vdmllIGFzIGFuIGZmbXBlZ19mcmFtZSBvYmplY3QuIFJldHVybnMgZmFsc2UgaWYgdGhlIGZyYW1lIHdhcyBub3QgZm91bmQuCiAgICAgKiBAcGFyYW0gaW50ICRmcmFtZW51bWJlciAtIEZyYW1lIGZyb20gdGhlIG1vdmllIHRvIHJldHVybi4gSWYgbm8gZnJhbWVudW1iZXIgaXMgc3BlY2lmaWVkLCByZXR1cm5zIHRoZSBuZXh0IGZyYW1lIG9mIHRoZSBtb3ZpZS4KICAgICAqIEByZXR1cm4gZmZtcGVnX2ZyYW1lCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGcmFtZSgkZnJhbWVudW1iZXIpIHt9CgogICAgLyoqIFJldHVybnMgdGhlIG5leHQga2V5IGZyYW1lIGZyb20gdGhlIG1vdmllIGFzIGFuIGZmbXBlZ19mcmFtZSBvYmplY3QuIFJldHVybnMgZmFsc2UgaWYgdGhlIGZyYW1lIHdhcyBub3QgZm91bmQuCiAgICAgKiBAcmV0dXJuIGZmbXBlZ19mcmFtZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmV4dEtleUZyYW1lKCkge30KfQoKY2xhc3MgZmZtcGVnX2ZyYW1lCnsKICAgIC8qKgogICAgICogTk9URTogVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBiZSBhdmFpbGFibGUgaWYgR0QgaXMgbm90IGVuYWJsZWQuCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJGdkX2ltYWdlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZ2RfaW1hZ2UpIHt9CgogICAgLyoqIFJldHVybiB0aGUgd2lkdGggb2YgdGhlIGZyYW1lLgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFdpZHRoKCkge30KCiAgICAvKiogUmV0dXJuIHRoZSBoZWlnaHQgb2YgdGhlIGZyYW1lLgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlaWdodCgpIHt9CgogICAgLyoqIFJldHVybiB0aGUgcHJlc2VudGF0aW9uIHRpbWUgc3RhbXAgb2YgdGhlIGZyYW1lLgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBUUygpIHt9CgogICAgLyoqIFJldHVybiB0aGUgcHJlc2VudGF0aW9uIHRpbWUgc3RhbXAgb2YgdGhlIGZyYW1lLgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByZXNlbnRhdGlvblRpbWVzdGFtcCgpIHt9CgogICAgLyoqIFJlc2l6ZSBhbmQgb3B0aW9uYWxseSBjcm9wIHRoZSBmcmFtZS4gKENyb3BwaW5nIGlzIGJ1aWx0IGludG8gZmZtcGVnIHJlc2l6aW5nIHNvIEknbSBwcm92aWRpbmcgaXQgaGVyZSBmb3IgY29tcGxldGVuZXNzLikKICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoIC0gTmV3IHdpZHRoIG9mIHRoZSBmcmFtZSAobXVzdCBiZSBhbiBldmVuIG51bWJlcikuCiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQgLSBOZXcgaGVpZ2h0IG9mIHRoZSBmcmFtZSAobXVzdCBiZSBhbiBldmVuIG51bWJlcikuCiAgICAgKiBAcGFyYW0gaW50ICRjcm9wX3RvcCAtIFJlbW92ZSBbY3JvcHRvcF0gcm93cyBvZiBwaXhlbHMgZnJvbSB0aGUgdG9wIG9mIHRoZSBmcmFtZS4KICAgICAqIEBwYXJhbSBpbnQgJGNyb3BfYm90dG9tIC0gUmVtb3ZlIFtjcm9wYm90dG9tXSByb3dzIG9mIHBpeGVscyBmcm9tIHRoZSBib3R0b20gb2YgdGhlIGZyYW1lLgogICAgICogQHBhcmFtIGludCAkY3JvcF9sZWZ0IC0gUmVtb3ZlIFtjcm9wbGVmdF0gcm93cyBvZiBwaXhlbHMgZnJvbSB0aGUgbGVmdCBvZiB0aGUgZnJhbWUuCiAgICAgKiBAcGFyYW0gaW50ICRjcm9wX3JpZ2h0IC0gUmVtb3ZlIFtjcm9wcmlnaHRdIHJvd3Mgb2YgcGl4ZWxzIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBmcmFtZS4KICAgICAqIE5PVEU6IENyb3BwaW5nIGlzIGFsd2F5cyBhcHBsaWVkIHRvIHRoZSBmcmFtZSBiZWZvcmUgaXQgaXMgcmVzaXplZC4gQ3JvcCB2YWx1ZXMgbXVzdCBiZSBldmVuIG51bWJlcnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNpemUoJHdpZHRoLCAkaGVpZ2h0LCAkY3JvcF90b3AgPSAwLCAkY3JvcF9ib3R0b20gPSAwLCAkY3JvcF9sZWZ0ID0gMCwgJGNyb3BfcmlnaHQgPSAwKSB7fQoKICAgIC8qKiBDcm9wIHRoZSBmcmFtZS4KICAgICAqIEBwYXJhbSBpbnQgJGNyb3BfdG9wIC0gUmVtb3ZlIFtjcm9wdG9wXSByb3dzIG9mIHBpeGVscyBmcm9tIHRoZSB0b3Agb2YgdGhlIGZyYW1lLgogICAgICogQHBhcmFtIGludCAkY3JvcF9ib3R0b20gLSBSZW1vdmUgW2Nyb3Bib3R0b21dIHJvd3Mgb2YgcGl4ZWxzIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgZnJhbWUuCiAgICAgKiBAcGFyYW0gaW50ICRjcm9wX2xlZnQgLSBSZW1vdmUgW2Nyb3BsZWZ0XSByb3dzIG9mIHBpeGVscyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBmcmFtZS4KICAgICAqIEBwYXJhbSBpbnQgJGNyb3BfcmlnaHQgLSBSZW1vdmUgW2Nyb3ByaWdodF0gcm93cyBvZiBwaXhlbHMgZnJvbSB0aGUgcmlnaHQgb2YgdGhlIGZyYW1lLgogICAgICogTk9URTogQ3JvcCB2YWx1ZXMgbXVzdCBiZSBldmVuIG51bWJlcnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcm9wKCRjcm9wX3RvcCwgJGNyb3BfYm90dG9tID0gMCwgJGNyb3BfbGVmdCA9IDAsICRjcm9wX3JpZ2h0ID0gMCkge30KCiAgICAvKiogUmV0dXJucyBhIHRydWVjb2xvciBHRCBpbWFnZSBvZiB0aGUgZnJhbWUuCiAgICAgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBpZiBHRCBpcyBub3QgZW5hYmxlZC4KICAgICAqIEByZXR1cm4gcmVzb3VyY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvR0RJbWFnZSgpIHt9Cn0KCmNsYXNzIGZmbXBlZ19hbmltYXRlZF9naWYKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvdXRwdXRfZmlsZV9wYXRoIC0gTG9jYXRpb24gaW4gdGhlIGZpbGVzeXN0ZW0gd2hlcmUgdGhlIGFuaW1hdGVkIGdpZiB3aWxsIGJlIHdyaXR0ZW4uCiAgICAgKiBAcGFyYW0gaW50ICR3aWR0aCAtIFdpZHRoIG9mIHRoZSBhbmltYXRlZCBnaWYuCiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQgLSBIZWlnaHQgb2YgdGhlIGFuaW1hdGVkIGdpZi4KICAgICAqIEBwYXJhbSBpbnQgJGZyYW1lX3JhdGUgLSBGcmFtZSByYXRlIG9mIHRoZSBhbmltYXRlZCBnaWYgaW4gZnJhbWVzIHBlciBzZWNvbmQuCiAgICAgKiBAcGFyYW0gaW50ICRsb29wX2NvdW50IC0gTnVtYmVyIG9mIHRpbWVzIHRvIGxvb3AgdGhlIGFuaW1hdGlvbi4gUHV0IGEgemVybyBoZXJlIHRvIGxvb3AgZm9yZXZlciBvciBvbWl0IHRoaXMgcGFyYW1ldGVyIHRvIGRpc2FibGUgbG9vcGluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvdXRwdXRfZmlsZV9wYXRoLCAkd2lkdGgsICRoZWlnaHQsICRmcmFtZV9yYXRlLCAkbG9vcF9jb3VudCA9IDApIHt9CgogICAgLyoqIEFkZCBhIGZyYW1lIHRvIHRoZSBlbmQgb2YgdGhlIGFuaW1hdGVkIGdpZi4KICAgICAqIEBwYXJhbSBmZm1wZWdfZnJhbWUgJGZyYW1lX3RvX2FkZCAtIFRoZSBmZm1wZWdfZnJhbWUgb2JqZWN0IHRvIGFkZCB0byB0aGUgZW5kIG9mIHRoZSBhbmltYXRlZCBnaWYuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRGcmFtZShmZm1wZWdfZnJhbWUgJGZyYW1lX3RvX2FkZCkge30KfQo8P3BocAoKLy8gU3RhcnQgb2YgaWJtX2RiMiB2LjEuNi4wCgovKioKICogUmV0dXJucyBhIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1jb25uZWN0LnBocAogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZSA8cD4KICogRm9yIGEgY2F0YWxvZ2VkIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSwgdGhpcyBwYXJhbWV0ZXIKICogcmVwcmVzZW50cyB0aGUgY29ubmVjdGlvbiBhbGlhcyBpbiB0aGUgREIyIGNsaWVudCBjYXRhbG9nLgogKiA8L3A+CiAqIDxwPgogKiBGb3IgYW4gdW5jYXRhbG9nZWQgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlLAogKiB0aGlzIHBhcmFtZXRlciByZXByZXNlbnRzIGEgY29tcGxldGUgRFNOIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgogKiBEUklWRVI9ZHJpdmVyO0RBVEFCQVNFPWRhdGFiYXNlO0hPU1ROQU1FPWhvc3RuYW1lO1BPUlQ9cG9ydDtQUk9UT0NPTD1UQ1BJUDtVSUQ9dXNlcm5hbWU7UFdEPXBhc3N3b3JkOwogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdXNlcm5hbWUgPHA+CiAqIFRoZSB1c2VybmFtZSB3aXRoIHdoaWNoIHlvdSBhcmUgY29ubmVjdGluZyB0byB0aGUgZGF0YWJhc2UsIG9yIG51bGwgaWYKICogdGhlICRkYXRhYmFzZSBwYXJhbWV0ZXIgY29udGFpbnMgYSBEU04gd2hpY2ggYWxyZWFkeSBwcm92aWRlcyB0aGUgdXNlcm5hbWUgZm9yCiAqIHRoZSBjb25uZWN0aW9uLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGFzc3dvcmQgPHA+CiAqIFRoZSBwYXNzd29yZCB3aXRoIHdoaWNoIHlvdSBhcmUgY29ubmVjdGluZyB0byB0aGUgZGF0YWJhc2UsIG9yIG51bGwgaWYKICogdGhlICRkYXRhYmFzZSBwYXJhbWV0ZXIgY29udGFpbnMgYSBEU04gd2hpY2ggYWxyZWFkeSBwcm92aWRlcyB0aGUgcGFzc3dvcmQgZm9yCiAqIHRoZSBjb25uZWN0aW9uLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyA8cD4KICogQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgY29ubmVjdGlvbiBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBiZWhhdmlvcgogKiBvZiB0aGUgY29ubmVjdGlvbiwgd2hlcmUgdmFsaWQgYXJyYXkga2V5cyBpbmNsdWRlOgogKiBhdXRvY29tbWl0CiAqIDxwPgogKiBQYXNzaW5nIHRoZSBEQjJfQVVUT0NPTU1JVF9PTiB2YWx1ZSB0dXJucwogKiBhdXRvY29tbWl0IG9uIGZvciB0aGlzIGNvbm5lY3Rpb24gaGFuZGxlLgogKiA8L3A+CiAqIDxwPgogKiBQYXNzaW5nIHRoZSBEQjJfQVVUT0NPTU1JVF9PRkYgdmFsdWUgdHVybnMKICogYXV0b2NvbW1pdCBvZmYgZm9yIHRoaXMgY29ubmVjdGlvbiBoYW5kbGUuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIGNvbm5lY3Rpb24gaGFuZGxlIHJlc291cmNlIGlmIHRoZSBjb25uZWN0aW9uIGF0dGVtcHQgaXMKICogc3VjY2Vzc2Z1bC4gSWYgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdCBmYWlscywgZGIyX2Nvbm5lY3QKICogcmV0dXJucyBmYWxzZS4KICovCmZ1bmN0aW9uIGRiMl9jb25uZWN0KCNbXFNlbnNpdGl2ZVBhcmFtZXRlcl0gc3RyaW5nICRkYXRhYmFzZSwgP3N0cmluZyAkdXNlcm5hbWUsICNbXFNlbnNpdGl2ZVBhcmFtZXRlcl0gP3N0cmluZyAkcGFzc3dvcmQsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgovKioKICogQ29tbWl0cyBhIHRyYW5zYWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLWNvbW1pdC5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBBIHZhbGlkIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UgdmFyaWFibGUgYXMgcmV0dXJuZWQgZnJvbQogKiBkYjJfY29ubmVjdCBvciBkYjJfcGNvbm5lY3QuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZGIyX2NvbW1pdCgkY29ubmVjdGlvbik6IGJvb2wge30KCi8qKgogKiBSZXR1cm5zIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItcGNvbm5lY3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIDxwPgogKiBGb3IgYSBjYXRhbG9nZWQgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlLCB0aGlzIHBhcmFtZXRlcgogKiByZXByZXNlbnRzIHRoZSBjb25uZWN0aW9uIGFsaWFzIGluIHRoZSBEQjIgY2xpZW50IGNhdGFsb2cuCiAqIDwvcD4KICogPHA+CiAqIEZvciBhbiB1bmNhdGFsb2dlZCBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UsCiAqIHRoaXMgcGFyYW1ldGVyIHJlcHJlc2VudHMgYSBjb21wbGV0ZSBEU04gaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CiAqIERSSVZFUj1kcml2ZXI7REFUQUJBU0U9ZGF0YWJhc2U7SE9TVE5BTUU9aG9zdG5hbWU7UE9SVD1wb3J0O1BST1RPQ09MPVRDUElQO1VJRD11c2VybmFtZTtQV0Q9cGFzc3dvcmQ7CiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICR1c2VybmFtZSA8cD4KICogVGhlIHVzZXJuYW1lIHdpdGggd2hpY2ggeW91IGFyZSBjb25uZWN0aW5nIHRvIHRoZSBkYXRhYmFzZSwgb3IgbnVsbCBpZgogKiB0aGUgJGRhdGFiYXNlIHBhcmFtZXRlciBjb250YWlucyBhIERTTiB3aGljaCBhbHJlYWR5IHByb3ZpZGVzIHRoZSB1c2VybmFtZSBmb3IKICogdGhlIGNvbm5lY3Rpb24uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRwYXNzd29yZCA8cD4KICogVGhlIHBhc3N3b3JkIHdpdGggd2hpY2ggeW91IGFyZSBjb25uZWN0aW5nIHRvIHRoZSBkYXRhYmFzZSwgb3IgbnVsbCBpZgogKiB0aGUgJGRhdGFiYXNlIHBhcmFtZXRlciBjb250YWlucyBhIERTTiB3aGljaCBhbHJlYWR5IHByb3ZpZGVzIHRoZSBwYXNzd29yZCBmb3IKICogdGhlIGNvbm5lY3Rpb24uCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRvcHRpb25zIDxwPgogKiBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjb25uZWN0aW9uIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGJlaGF2aW9yCiAqIG9mIHRoZSBjb25uZWN0aW9uLCB3aGVyZSB2YWxpZCBhcnJheSBrZXlzIGluY2x1ZGU6CiAqIGF1dG9jb21taXQKICogPC9wPgogKiA8cD4KICogUGFzc2luZyB0aGUgREIyX0FVVE9DT01NSVRfT04gdmFsdWUgdHVybnMKICogYXV0b2NvbW1pdCBvbiBmb3IgdGhpcyBjb25uZWN0aW9uIGhhbmRsZS4KICogPC9wPgogKiA8cD4KICogUGFzc2luZyB0aGUgREIyX0FVVE9DT01NSVRfT0ZGIHZhbHVlIHR1cm5zCiAqIGF1dG9jb21taXQgb2ZmIGZvciB0aGlzIGNvbm5lY3Rpb24gaGFuZGxlLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgQSBjb25uZWN0aW9uIGhhbmRsZSByZXNvdXJjZSBpZiB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IGlzCiAqIHN1Y2Nlc3NmdWwuIGRiMl9wY29ubmVjdCB0cmllcyB0byByZXVzZSBhbiBleGlzdGluZwogKiBjb25uZWN0aW9uIHJlc291cmNlIHRoYXQgZXhhY3RseSBtYXRjaGVzIHRoZQogKiBkYXRhYmFzZSwgdXNlcm5hbWUsIGFuZAogKiBwYXNzd29yZCBwYXJhbWV0ZXJzLiBJZiB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IGZhaWxzLAogKiBkYjJfcGNvbm5lY3QgcmV0dXJucyBmYWxzZS4KICovCmZ1bmN0aW9uIGRiMl9wY29ubmVjdCgjW1xTZW5zaXRpdmVQYXJhbWV0ZXJdIHN0cmluZyAkZGF0YWJhc2UsID9zdHJpbmcgJHVzZXJuYW1lLCAjW1xTZW5zaXRpdmVQYXJhbWV0ZXJdID9zdHJpbmcgJHBhc3N3b3JkLCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKLyoqCiAqIENsb3NlcyBhIHBlcnNpc3RlbnQgZGF0YWJhc2UgY29ubmVjdGlvbgogKgogKiBUaGlzIGZ1bmN0aW9uIGNsb3NlcyBhIHBlcnNpc3RlbnQgREIyIGNsaWVudCBjb25uZWN0aW9uLgogKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1wY2xvc2UucGhwCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBTcGVjaWZpZXMgYSBwZXJzaXN0ZW50IERCMiBjbGllbnQgY29ubmVjdGlvbi4KICoKICogQHJldHVybiBib29sIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBkYjJfcGNsb3NlKCRjb25uZWN0aW9uKTogYm9vbCB7fQoKLyoqCiAqIFJldHVybnMgb3Igc2V0cyB0aGUgQVVUT0NPTU1JVCBzdGF0ZSBmb3IgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLWF1dG9jb21taXQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogQSB2YWxpZCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlIHZhcmlhYmxlIGFzIHJldHVybmVkIGZyb20KICogZGIyX2Nvbm5lY3Qgb3IgZGIyX3Bjb25uZWN0LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHZhbHVlIDxwPgogKiBPbmUgb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudHM6PC9wPgogKiA8cD4KICogREIyX0FVVE9DT01NSVRfT0ZGCiAqIFR1cm5zIEFVVE9DT01NSVQgb2ZmLgogKiA8L3A+CiAqIDxwPgogKiBEQjJfQVVUT0NPTU1JVF9PTgogKiBUdXJucyBBVVRPQ09NTUlUIG9uLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGJvb2wgPHA+V2hlbiBkYjJfYXV0b2NvbW1pdCByZWNlaXZlcyBvbmx5IHRoZQogKiBjb25uZWN0aW9uIHBhcmFtZXRlciwgaXQgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZQogKiBvZiBBVVRPQ09NTUlUIGZvciB0aGUgcmVxdWVzdGVkIGNvbm5lY3Rpb24gYXMgYW4gaW50ZWdlciB2YWx1ZS4gQSB2YWx1ZSBvZgogKiAwIGluZGljYXRlcyB0aGF0IEFVVE9DT01NSVQgaXMgb2ZmLCB3aGlsZSBhIHZhbHVlIG9mIDEgaW5kaWNhdGVzIHRoYXQKICogQVVUT0NPTU1JVCBpcyBvbi4KICogPC9wPgogKiA8cD4KICogV2hlbiBkYjJfYXV0b2NvbW1pdCByZWNlaXZlcyBib3RoIHRoZQogKiBjb25uZWN0aW9uIHBhcmFtZXRlciBhbmQKICogYXV0b2NvbW1pdCBwYXJhbWV0ZXIsIGl0IGF0dGVtcHRzIHRvIHNldCB0aGUKICogQVVUT0NPTU1JVCBzdGF0ZSBvZiB0aGUgcmVxdWVzdGVkIGNvbm5lY3Rpb24gdG8gdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGUuCiAqIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLjwvcD4KICovCmZ1bmN0aW9uIGRiMl9hdXRvY29tbWl0KCRjb25uZWN0aW9uLCBpbnQgJHZhbHVlID0gbnVsbCk6IGludHxib29sIHt9CgovKioKICogQmluZHMgYSBQSFAgdmFyaWFibGUgdG8gYW4gU1FMIHN0YXRlbWVudCBwYXJhbWV0ZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItYmluZC1wYXJhbS5waHAKICogQHBhcmFtIHJlc291cmNlICRzdG10IDxwPgogKiBBIHByZXBhcmVkIHN0YXRlbWVudCByZXR1cm5lZCBmcm9tIGRiMl9wcmVwYXJlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHBhcmFtZXRlcl9udW1iZXIKICogQHBhcmFtIHN0cmluZyAkdmFyaWFibGVfbmFtZQogKiBAcGFyYW0gaW50ICRwYXJhbWV0ZXJfdHlwZQogKiBAcGFyYW0gaW50ICRkYXRhX3R5cGUKICogQHBhcmFtIGludCAkcHJlY2lzaW9uIDxwPgogKiBTcGVjaWZpZXMgdGhlIHByZWNpc2lvbiB3aXRoIHdoaWNoIHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgYm91bmQgdG8gdGhlCiAqIGRhdGFiYXNlLiBUaGlzIHBhcmFtZXRlciBjYW4gYWxzbyBiZSB1c2VkIGZvciByZXRyaWV2aW5nIFhNTCBvdXRwdXQgdmFsdWVzCiAqIGZyb20gc3RvcmVkIHByb2NlZHVyZXMuIEEgbm9uLW5lZ2F0aXZlIHZhbHVlIHNwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIG9mCiAqIHRoZSBYTUwgZGF0YSB0aGF0IHdpbGwgYmUgcmV0cmlldmVkIGZyb20gdGhlIGRhdGFiYXNlLiBJZiB0aGlzIHBhcmFtZXRlcgogKiBpcyBub3QgdXNlZCwgYSBkZWZhdWx0IG9mIDFNQiB3aWxsIGJlIGFzc3VtZWQgZm9yIHJldHJpZXZpbmcgdGhlIFhNTAogKiBvdXRwdXQgdmFsdWUgZnJvbSB0aGUgc3RvcmVkIHByb2NlZHVyZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRzY2FsZSA8cD4KICogU3BlY2lmaWVzIHRoZSBzY2FsZSB3aXRoIHdoaWNoIHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgYm91bmQgdG8gdGhlCiAqIGRhdGFiYXNlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGRiMl9iaW5kX3BhcmFtKCRzdG10LCBpbnQgJHBhcmFtZXRlcl9udW1iZXIsIHN0cmluZyAkdmFyaWFibGVfbmFtZSwgaW50ICRwYXJhbWV0ZXJfdHlwZSA9IERCMl9QQVJBTV9JTiwgaW50ICRkYXRhX3R5cGUgPSAwLCBpbnQgJHByZWNpc2lvbiA9IC0xLCBpbnQgJHNjYWxlID0gMCk6IGJvb2wge30KCi8qKgogKiBDbG9zZXMgYSBkYXRhYmFzZSBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLWNsb3NlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIFNwZWNpZmllcyBhbiBhY3RpdmUgREIyIGNsaWVudCBjb25uZWN0aW9uLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGRiMl9jbG9zZSgkY29ubmVjdGlvbik6IGJvb2wge30KCi8qKgogKiBSZXR1cm5zIGEgcmVzdWx0IHNldCBsaXN0aW5nIHRoZSBjb2x1bW5zIGFuZCBhc3NvY2lhdGVkIHByaXZpbGVnZXMgZm9yIGEgdGFibGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItY29sdW1uLXByaXZpbGVnZXMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogQSB2YWxpZCBjb25uZWN0aW9uIHRvIGFuIElCTSBEQjIsIENsb3Vkc2NhcGUsIG9yIEFwYWNoZSBEZXJieSBkYXRhYmFzZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHF1YWxpZmllciA8cD4KICogQSBxdWFsaWZpZXIgZm9yIERCMiBkYXRhYmFzZXMgcnVubmluZyBvbiBPUy8zOTAgb3Igei9PUyBzZXJ2ZXJzLiBGb3IKICogb3RoZXIgZGF0YWJhc2VzLCBwYXNzIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2NoZW1hIDxwPgogKiBUaGUgc2NoZW1hIHdoaWNoIGNvbnRhaW5zIHRoZSB0YWJsZXMuIFRvIG1hdGNoIGFsbCBzY2hlbWFzLCBwYXNzIG51bGwKICogb3IgYW4gZW1wdHkgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdGFibGVfbmFtZQogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNvbHVtbl9uYW1lCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgYSBzdGF0ZW1lbnQgcmVzb3VyY2Ugd2l0aCBhIHJlc3VsdCBzZXQgY29udGFpbmluZyByb3dzIGRlc2NyaWJpbmcKICogdGhlIGNvbHVtbiBwcml2aWxlZ2VzIGZvciBjb2x1bW5zIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4gVGhlCiAqIHJvd3MgYXJlIGNvbXBvc2VkIG9mIHRoZSBmb2xsb3dpbmcgY29sdW1uczoKICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkNvbHVtbiBuYW1lPC90ZD4KICogPHRkPkRlc2NyaXB0aW9uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlRBQkxFX0NBVDwvdGQ+CiAqIDx0ZD5OYW1lIG9mIHRoZSBjYXRhbG9nLiBUaGUgdmFsdWUgaXMgTlVMTCBpZiB0aGlzIHRhYmxlIGRvZXMgbm90CiAqIGhhdmUgY2F0YWxvZ3MuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlRBQkxFX1NDSEVNPC90ZD4KICogPHRkPk5hbWUgb2YgdGhlIHNjaGVtYS48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VEFCTEVfTkFNRTwvdGQ+CiAqIDx0ZD5OYW1lIG9mIHRoZSB0YWJsZSBvciB2aWV3LjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5DT0xVTU5fTkFNRTwvdGQ+CiAqIDx0ZD5OYW1lIG9mIHRoZSBjb2x1bW4uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkdSQU5UT1I8L3RkPgogKiA8dGQ+QXV0aG9yaXphdGlvbiBJRCBvZiB0aGUgdXNlciB3aG8gZ3JhbnRlZCB0aGUgcHJpdmlsZWdlLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5HUkFOVEVFPC90ZD4KICogPHRkPkF1dGhvcml6YXRpb24gSUQgb2YgdGhlIHVzZXIgdG8gd2hvbSB0aGUgcHJpdmlsZWdlIHdhcwogKiBncmFudGVkLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5QUklWSUxFR0U8L3RkPgogKiA8dGQ+VGhlIHByaXZpbGVnZSBmb3IgdGhlIGNvbHVtbi48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+SVNfR1JBTlRBQkxFPC90ZD4KICogPHRkPldoZXRoZXIgdGhlIEdSQU5URUUgaXMgcGVybWl0dGVkIHRvIGdyYW50IHRoaXMgcHJpdmlsZWdlIHRvCiAqIG90aGVyIHVzZXJzLjwvdGQ+CiAqIDwvdHI+CiAqLwpmdW5jdGlvbiBkYjJfY29sdW1uX3ByaXZpbGVnZXMoJGNvbm5lY3Rpb24sID9zdHJpbmcgJHF1YWxpZmllciA9IG51bGwsID9zdHJpbmcgJHNjaGVtYSA9IG51bGwsID9zdHJpbmcgJHRhYmxlX25hbWUgPSBudWxsLCA/c3RyaW5nICRjb2x1bW5fbmFtZSA9IG51bGwpIHt9CgpmdW5jdGlvbiBkYjJfY29sdW1ucHJpdmlsZWdlcygpIHt9CgovKioKICogUmV0dXJucyBhIHJlc3VsdCBzZXQgbGlzdGluZyB0aGUgY29sdW1ucyBhbmQgYXNzb2NpYXRlZCBtZXRhZGF0YSBmb3IgYSB0YWJsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1jb2x1bW5zLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIEEgdmFsaWQgY29ubmVjdGlvbiB0byBhbiBJQk0gREIyLCBDbG91ZHNjYXBlLCBvciBBcGFjaGUgRGVyYnkgZGF0YWJhc2UuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcXVhbGlmaWVyIDxwPgogKiBBIHF1YWxpZmllciBmb3IgREIyIGRhdGFiYXNlcyBydW5uaW5nIG9uIE9TLzM5MCBvciB6L09TIHNlcnZlcnMuIEZvcgogKiBvdGhlciBkYXRhYmFzZXMsIHBhc3MgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc2NoZW1hIDxwPgogKiBUaGUgc2NoZW1hIHdoaWNoIGNvbnRhaW5zIHRoZSB0YWJsZXMuIFRvIG1hdGNoIGFsbCBzY2hlbWFzLCBwYXNzCiAqICclJy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lCiAqIEBwYXJhbSBzdHJpbmcgJGNvbHVtbl9uYW1lCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgQSBzdGF0ZW1lbnQgcmVzb3VyY2Ugd2l0aCBhIHJlc3VsdCBzZXQgY29udGFpbmluZyByb3dzIGRlc2NyaWJpbmcKICogdGhlIGNvbHVtbnMgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLiBUaGUgcm93cyBhcmUgY29tcG9zZWQgb2YKICogdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Q29sdW1uIG5hbWU8L3RkPgogKiA8dGQ+RGVzY3JpcHRpb248L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VEFCTEVfQ0FUPC90ZD4KICogPHRkPk5hbWUgb2YgdGhlIGNhdGFsb2cuIFRoZSB2YWx1ZSBpcyBOVUxMIGlmIHRoaXMgdGFibGUgZG9lcyBub3QKICogaGF2ZSBjYXRhbG9ncy48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VEFCTEVfU0NIRU08L3RkPgogKiA8dGQ+TmFtZSBvZiB0aGUgc2NoZW1hLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5UQUJMRV9OQU1FPC90ZD4KICogPHRkPk5hbWUgb2YgdGhlIHRhYmxlIG9yIHZpZXcuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkNPTFVNTl9OQU1FPC90ZD4KICogPHRkPk5hbWUgb2YgdGhlIGNvbHVtbi48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+REFUQV9UWVBFPC90ZD4KICogPHRkPlRoZSBTUUwgZGF0YSB0eXBlIGZvciB0aGUgY29sdW1uIHJlcHJlc2VudGVkIGFzIGFuIGludGVnZXIgdmFsdWUuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlRZUEVfTkFNRTwvdGQ+CiAqIDx0ZD5BIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRhdGEgdHlwZSBmb3IgdGhlIGNvbHVtbi48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Q09MVU1OX1NJWkU8L3RkPgogKiA8dGQ+QW4gaW50ZWdlciB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIHNpemUgb2YgdGhlIGNvbHVtbi48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+QlVGRkVSX0xFTkdUSDwvdGQ+CiAqIDx0ZD4KICogTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgbmVjZXNzYXJ5IHRvIHN0b3JlIGRhdGEgZnJvbSB0aGlzIGNvbHVtbi4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkRFQ0lNQUxfRElHSVRTPC90ZD4KICogPHRkPgogKiBUaGUgc2NhbGUgb2YgdGhlIGNvbHVtbiwgb3IgbnVsbCB3aGVyZSBzY2FsZSBpcyBub3QgYXBwbGljYWJsZS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPk5VTV9QUkVDX1JBRElYPC90ZD4KICogPHRkPgogKiBBbiBpbnRlZ2VyIHZhbHVlIG9mIGVpdGhlciAxMCAocmVwcmVzZW50aW5nCiAqIGFuIGV4YWN0IG51bWVyaWMgZGF0YSB0eXBlKSwgMiAocmVwcmVzZW50aW5nIGFuCiAqIGFwcHJveGltYXRlIG51bWVyaWMgZGF0YSB0eXBlKSwgb3IgbnVsbCAocmVwcmVzZW50aW5nIGEgZGF0YSB0eXBlIGZvcgogKiB3aGljaCByYWRpeCBpcyBub3QgYXBwbGljYWJsZSkuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5OVUxMQUJMRTwvdGQ+CiAqIDx0ZD5BbiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB3aGV0aGVyIHRoZSBjb2x1bW4gaXMgbnVsbGFibGUgb3IKICogbm90LjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5SRU1BUktTPC90ZD4KICogPHRkPkRlc2NyaXB0aW9uIG9mIHRoZSBjb2x1bW4uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkNPTFVNTl9ERUY8L3RkPgogKiA8dGQ+RGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+U1FMX0RBVEFfVFlQRTwvdGQ+CiAqIDx0ZD5BbiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgc2l6ZSBvZiB0aGUgY29sdW1uLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5TUUxfREFURVRJTUVfU1VCPC90ZD4KICogPHRkPgogKiBSZXR1cm5zIGFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIGEgZGF0ZXRpbWUgc3VidHlwZSBjb2RlLAogKiBvciBudWxsIGZvciBTUUwgZGF0YSB0eXBlcyB0byB3aGljaCB0aGlzIGRvZXMgbm90IGFwcGx5LgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Q0hBUl9PQ1RFVF9MRU5HVEg8L3RkPgogKiA8dGQ+CiAqIE1heGltdW0gbGVuZ3RoIGluIG9jdGV0cyBmb3IgYSBjaGFyYWN0ZXIgZGF0YSB0eXBlIGNvbHVtbiwgd2hpY2gKICogbWF0Y2hlcyBDT0xVTU5fU0laRSBmb3Igc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIHNldCBkYXRhLCBvciBudWxsIGZvcgogKiBub24tY2hhcmFjdGVyIGRhdGEgdHlwZXMuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5PUkRJTkFMX1BPU0lUSU9OPC90ZD4KICogPHRkPlRoZSAxLWluZGV4ZWQgcG9zaXRpb24gb2YgdGhlIGNvbHVtbiBpbiB0aGUgdGFibGUuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPklTX05VTExBQkxFPC90ZD4KICogPHRkPgogKiBBIHN0cmluZyB2YWx1ZSB3aGVyZSAnWUVTJyBtZWFucyB0aGF0IHRoZSBjb2x1bW4gaXMgbnVsbGFibGUgYW5kCiAqICdOTycgbWVhbnMgdGhhdCB0aGUgY29sdW1uIGlzIG5vdCBudWxsYWJsZS4KICogPC90ZD4KICogPC90cj4KICovCmZ1bmN0aW9uIGRiMl9jb2x1bW5zKCRjb25uZWN0aW9uLCAkcXVhbGlmaWVyID0gbnVsbCwgJHNjaGVtYSA9IG51bGwsICR0YWJsZV9uYW1lID0gbnVsbCwgJGNvbHVtbl9uYW1lID0gbnVsbCkge30KCi8qKgogKiBSZXR1cm5zIGEgcmVzdWx0IHNldCBsaXN0aW5nIHRoZSBmb3JlaWduIGtleXMgZm9yIGEgdGFibGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItZm9yZWlnbi1rZXlzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIEEgdmFsaWQgY29ubmVjdGlvbiB0byBhbiBJQk0gREIyLCBDbG91ZHNjYXBlLCBvciBBcGFjaGUgRGVyYnkgZGF0YWJhc2UuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRxdWFsaWZpZXIgPHA+CiAqIEEgcXVhbGlmaWVyIGZvciBEQjIgZGF0YWJhc2VzIHJ1bm5pbmcgb24gT1MvMzkwIG9yIHovT1Mgc2VydmVycy4gRm9yCiAqIG90aGVyIGRhdGFiYXNlcywgcGFzcyBudWxsIG9yIGFuIGVtcHR5IHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHNjaGVtYSA8cD4KICogVGhlIHNjaGVtYSB3aGljaCBjb250YWlucyB0aGUgdGFibGVzLiBJZiBzY2hlbWEKICogaXMgbnVsbCwgZGIyX2ZvcmVpZ25fa2V5cyBtYXRjaGVzIHRoZSBzY2hlbWEgZm9yCiAqIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZQogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIEEgc3RhdGVtZW50IHJlc291cmNlIHdpdGggYSByZXN1bHQgc2V0IGNvbnRhaW5pbmcgcm93cyBkZXNjcmliaW5nCiAqIHRoZSBmb3JlaWduIGtleXMgZm9yIHRoZSBzcGVjaWZpZWQgdGFibGUuIFRoZSByZXN1bHQgc2V0IGlzIGNvbXBvc2VkIG9mIHRoZQogKiBmb2xsb3dpbmcgY29sdW1uczoKICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkNvbHVtbiBuYW1lPC90ZD4KICogPHRkPkRlc2NyaXB0aW9uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlBLVEFCTEVfQ0FUPC90ZD4KICogPHRkPgogKiBOYW1lIG9mIHRoZSBjYXRhbG9nIGZvciB0aGUgdGFibGUgY29udGFpbmluZyB0aGUgcHJpbWFyeSBrZXkuIFRoZQogKiB2YWx1ZSBpcyBOVUxMIGlmIHRoaXMgdGFibGUgZG9lcyBub3QgaGF2ZSBjYXRhbG9ncy4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlBLVEFCTEVfU0NIRU08L3RkPgogKiA8dGQ+CiAqIE5hbWUgb2YgdGhlIHNjaGVtYSBmb3IgdGhlIHRhYmxlIGNvbnRhaW5pbmcgdGhlIHByaW1hcnkga2V5LgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+UEtUQUJMRV9OQU1FPC90ZD4KICogPHRkPk5hbWUgb2YgdGhlIHRhYmxlIGNvbnRhaW5pbmcgdGhlIHByaW1hcnkga2V5LjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5QS0NPTFVNTl9OQU1FPC90ZD4KICogPHRkPk5hbWUgb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBwcmltYXJ5IGtleS48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+RktUQUJMRV9DQVQ8L3RkPgogKiA8dGQ+CiAqIE5hbWUgb2YgdGhlIGNhdGFsb2cgZm9yIHRoZSB0YWJsZSBjb250YWluaW5nIHRoZSBmb3JlaWduIGtleS4gVGhlCiAqIHZhbHVlIGlzIE5VTEwgaWYgdGhpcyB0YWJsZSBkb2VzIG5vdCBoYXZlIGNhdGFsb2dzLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+RktUQUJMRV9TQ0hFTTwvdGQ+CiAqIDx0ZD4KICogTmFtZSBvZiB0aGUgc2NoZW1hIGZvciB0aGUgdGFibGUgY29udGFpbmluZyB0aGUgZm9yZWlnbiBrZXkuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5GS1RBQkxFX05BTUU8L3RkPgogKiA8dGQ+TmFtZSBvZiB0aGUgdGFibGUgY29udGFpbmluZyB0aGUgZm9yZWlnbiBrZXkuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkZLQ09MVU1OX05BTUU8L3RkPgogKiA8dGQ+TmFtZSBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIGZvcmVpZ24ga2V5LjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5LRVlfU0VRPC90ZD4KICogPHRkPjEtaW5kZXhlZCBwb3NpdGlvbiBvZiB0aGUgY29sdW1uIGluIHRoZSBrZXkuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlVQREFURV9SVUxFPC90ZD4KICogPHRkPgogKiBJbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgYWN0aW9uIGFwcGxpZWQgdG8gdGhlIGZvcmVpZ24ga2V5CiAqIHdoZW4gdGhlIFNRTCBvcGVyYXRpb24gaXMgVVBEQVRFLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+REVMRVRFX1JVTEU8L3RkPgogKiA8dGQ+CiAqIEludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBhY3Rpb24gYXBwbGllZCB0byB0aGUgZm9yZWlnbiBrZXkKICogd2hlbiB0aGUgU1FMIG9wZXJhdGlvbiBpcyBERUxFVEUuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5GS19OQU1FPC90ZD4KICogPHRkPlRoZSBuYW1lIG9mIHRoZSBmb3JlaWduIGtleS48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+UEtfTkFNRTwvdGQ+CiAqIDx0ZD5UaGUgbmFtZSBvZiB0aGUgcHJpbWFyeSBrZXkuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkRFRkVSUkFCSUxJVFk8L3RkPgogKiA8dGQ+CiAqIEFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIHdoZXRoZXIgdGhlIGZvcmVpZ24ga2V5IGRlZmVycmFiaWxpdHkgaXMKICogU1FMX0lOSVRJQUxMWV9ERUZFUlJFRCwgU1FMX0lOSVRJQUxMWV9JTU1FRElBVEUsIG9yCiAqIFNRTF9OT1RfREVGRVJSQUJMRS4KICogPC90ZD4KICogPC90cj4KICovCmZ1bmN0aW9uIGRiMl9mb3JlaWduX2tleXMoJGNvbm5lY3Rpb24sID9zdHJpbmcgJHF1YWxpZmllciwgP3N0cmluZyAkc2NoZW1hLCBzdHJpbmcgJHRhYmxlX25hbWUpIHt9CgpmdW5jdGlvbiBkYjJfZm9yZWlnbmtleXMoKSB7fQoKLyoqCiAqIFJldHVybnMgYSByZXN1bHQgc2V0IGxpc3RpbmcgcHJpbWFyeSBrZXlzIGZvciBhIHRhYmxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLXByaW1hcnkta2V5cy5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBBIHZhbGlkIGNvbm5lY3Rpb24gdG8gYW4gSUJNIERCMiwgQ2xvdWRzY2FwZSwgb3IgQXBhY2hlIERlcmJ5IGRhdGFiYXNlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcXVhbGlmaWVyIDxwPgogKiBBIHF1YWxpZmllciBmb3IgREIyIGRhdGFiYXNlcyBydW5uaW5nIG9uIE9TLzM5MCBvciB6L09TIHNlcnZlcnMuIEZvcgogKiBvdGhlciBkYXRhYmFzZXMsIHBhc3MgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRzY2hlbWEgPHA+CiAqIFRoZSBzY2hlbWEgd2hpY2ggY29udGFpbnMgdGhlIHRhYmxlcy4gSWYgc2NoZW1hCiAqIGlzIG51bGwsIGRiMl9wcmltYXJ5X2tleXMgbWF0Y2hlcyB0aGUgc2NoZW1hIGZvcgogKiB0aGUgY3VycmVudCBjb25uZWN0aW9uLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlX25hbWUKICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIHN0YXRlbWVudCByZXNvdXJjZSB3aXRoIGEgcmVzdWx0IHNldCBjb250YWluaW5nIHJvd3MgZGVzY3JpYmluZwogKiB0aGUgcHJpbWFyeSBrZXlzIGZvciB0aGUgc3BlY2lmaWVkIHRhYmxlLiBUaGUgcmVzdWx0IHNldCBpcyBjb21wb3NlZCBvZiB0aGUKICogZm9sbG93aW5nIGNvbHVtbnM6CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5Db2x1bW4gbmFtZTwvdGQ+CiAqIDx0ZD5EZXNjcmlwdGlvbjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5UQUJMRV9DQVQ8L3RkPgogKiA8dGQ+CiAqIE5hbWUgb2YgdGhlIGNhdGFsb2cgZm9yIHRoZSB0YWJsZSBjb250YWluaW5nIHRoZSBwcmltYXJ5IGtleS4gVGhlCiAqIHZhbHVlIGlzIE5VTEwgaWYgdGhpcyB0YWJsZSBkb2VzIG5vdCBoYXZlIGNhdGFsb2dzLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VEFCTEVfU0NIRU08L3RkPgogKiA8dGQ+CiAqIE5hbWUgb2YgdGhlIHNjaGVtYSBmb3IgdGhlIHRhYmxlIGNvbnRhaW5pbmcgdGhlIHByaW1hcnkga2V5LgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VEFCTEVfTkFNRTwvdGQ+CiAqIDx0ZD5OYW1lIG9mIHRoZSB0YWJsZSBjb250YWluaW5nIHRoZSBwcmltYXJ5IGtleS48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Q09MVU1OX05BTUU8L3RkPgogKiA8dGQ+TmFtZSBvZiB0aGUgY29sdW1uIGNvbnRhaW5pbmcgdGhlIHByaW1hcnkga2V5LjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5LRVlfU0VRPC90ZD4KICogPHRkPjEtaW5kZXhlZCBwb3NpdGlvbiBvZiB0aGUgY29sdW1uIGluIHRoZSBrZXkuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlBLX05BTUU8L3RkPgogKiA8dGQ+VGhlIG5hbWUgb2YgdGhlIHByaW1hcnkga2V5LjwvdGQ+CiAqIDwvdHI+CiAqLwpmdW5jdGlvbiBkYjJfcHJpbWFyeV9rZXlzKCRjb25uZWN0aW9uLCA/c3RyaW5nICRxdWFsaWZpZXIsID9zdHJpbmcgJHNjaGVtYSwgc3RyaW5nICR0YWJsZV9uYW1lKSB7fQoKZnVuY3Rpb24gZGIyX3ByaW1hcnlrZXlzKCkge30KCi8qKgogKiBSZXR1cm5zIGEgcmVzdWx0IHNldCBsaXN0aW5nIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVycwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1wcm9jZWR1cmUtY29sdW1ucy5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBBIHZhbGlkIGNvbm5lY3Rpb24gdG8gYW4gSUJNIERCMiwgQ2xvdWRzY2FwZSwgb3IgQXBhY2hlIERlcmJ5IGRhdGFiYXNlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcXVhbGlmaWVyIDxwPgogKiBBIHF1YWxpZmllciBmb3IgREIyIGRhdGFiYXNlcyBydW5uaW5nIG9uIE9TLzM5MCBvciB6L09TIHNlcnZlcnMuIEZvcgogKiBvdGhlciBkYXRhYmFzZXMsIHBhc3MgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc2NoZW1hIDxwPgogKiBUaGUgc2NoZW1hIHdoaWNoIGNvbnRhaW5zIHRoZSBwcm9jZWR1cmVzLiBUaGlzIHBhcmFtZXRlciBhY2NlcHRzIGEKICogc2VhcmNoIHBhdHRlcm4gY29udGFpbmluZyBfIGFuZCAlCiAqIGFzIHdpbGRjYXJkcy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwcm9jZWR1cmUgPHA+CiAqIFRoZSBuYW1lIG9mIHRoZSBwcm9jZWR1cmUuIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgYQogKiBzZWFyY2ggcGF0dGVybiBjb250YWluaW5nIF8gYW5kICUKICogYXMgd2lsZGNhcmRzLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGFyYW1ldGVyIDxwPgogKiBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLiBUaGlzIHBhcmFtZXRlciBhY2NlcHRzIGEgc2VhcmNoIHBhdHRlcm4KICogY29udGFpbmluZyBfIGFuZCAlIGFzIHdpbGRjYXJkcy4KICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbnVsbCwgYWxsIHBhcmFtZXRlcnMgZm9yIHRoZSBzcGVjaWZpZWQgc3RvcmVkCiAqIHByb2NlZHVyZXMgYXJlIHJldHVybmVkLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgQSBzdGF0ZW1lbnQgcmVzb3VyY2Ugd2l0aCBhIHJlc3VsdCBzZXQgY29udGFpbmluZyByb3dzIGRlc2NyaWJpbmcKICogdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBzdG9yZWQgcHJvY2VkdXJlcyBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMuCiAqIFRoZSByb3dzIGFyZSBjb21wb3NlZCBvZiB0aGUgZm9sbG93aW5nIGNvbHVtbnM6CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5Db2x1bW4gbmFtZTwvdGQ+CiAqIDx0ZD5EZXNjcmlwdGlvbjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5QUk9DRURVUkVfQ0FUPC90ZD4KICogPHRkPlRoZSBjYXRhbG9nIHRoYXQgY29udGFpbnMgdGhlIHByb2NlZHVyZS4gVGhlIHZhbHVlIGlzIG51bGwgaWYKICogdGhpcyB0YWJsZSBkb2VzIG5vdCBoYXZlIGNhdGFsb2dzLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5QUk9DRURVUkVfU0NIRU08L3RkPgogKiA8dGQ+TmFtZSBvZiB0aGUgc2NoZW1hIHRoYXQgY29udGFpbnMgdGhlIHN0b3JlZCBwcm9jZWR1cmUuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlBST0NFRFVSRV9OQU1FPC90ZD4KICogPHRkPk5hbWUgb2YgdGhlIHByb2NlZHVyZS48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Q09MVU1OX05BTUU8L3RkPgogKiA8dGQ+TmFtZSBvZiB0aGUgcGFyYW1ldGVyLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5DT0xVTU5fVFlQRTwvdGQ+CiAqIDx0ZD4KICogPHA+CiAqIEFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXI6CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5SZXR1cm4gdmFsdWU8L3RkPgogKiA8dGQ+UGFyYW1ldGVyIHR5cGU8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+MSAoU1FMX1BBUkFNX0lOUFVUKTwvdGQ+CiAqIDx0ZD5JbnB1dCAoSU4pIHBhcmFtZXRlci48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+MiAoU1FMX1BBUkFNX0lOUFVUX09VVFBVVCk8L3RkPgogKiA8dGQ+SW5wdXQvb3V0cHV0IChJTk9VVCkgcGFyYW1ldGVyLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4zIChTUUxfUEFSQU1fT1VUUFVUKTwvdGQ+CiAqIDx0ZD5PdXRwdXQgKE9VVCkgcGFyYW1ldGVyLjwvdGQ+CiAqIDwvdHI+CiAqIDwvcD4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkRBVEFfVFlQRTwvdGQ+CiAqIDx0ZD5UaGUgU1FMIGRhdGEgdHlwZSBmb3IgdGhlIHBhcmFtZXRlciByZXByZXNlbnRlZCBhcyBhbiBpbnRlZ2VyCiAqIHZhbHVlLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5UWVBFX05BTUU8L3RkPgogKiA8dGQ+QSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBkYXRhIHR5cGUgZm9yIHRoZSBwYXJhbWV0ZXIuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkNPTFVNTl9TSVpFPC90ZD4KICogPHRkPkFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkJVRkZFUl9MRU5HVEg8L3RkPgogKiA8dGQ+CiAqIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG5lY2Vzc2FyeSB0byBzdG9yZSBkYXRhIGZvciB0aGlzIHBhcmFtZXRlci4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkRFQ0lNQUxfRElHSVRTPC90ZD4KICogPHRkPgogKiBUaGUgc2NhbGUgb2YgdGhlIHBhcmFtZXRlciwgb3IgbnVsbCB3aGVyZSBzY2FsZSBpcyBub3QgYXBwbGljYWJsZS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPk5VTV9QUkVDX1JBRElYPC90ZD4KICogPHRkPgogKiBBbiBpbnRlZ2VyIHZhbHVlIG9mIGVpdGhlciAxMCAocmVwcmVzZW50aW5nCiAqIGFuIGV4YWN0IG51bWVyaWMgZGF0YSB0eXBlKSwgMiAocmVwcmVzZW50aW5nIGFuCiAqIGFwcHJveGltYXRlIG51bWVyaWMgZGF0YSB0eXBlKSwgb3IgbnVsbCAocmVwcmVzZW50aW5nIGEgZGF0YSB0eXBlIGZvcgogKiB3aGljaCByYWRpeCBpcyBub3QgYXBwbGljYWJsZSkuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5OVUxMQUJMRTwvdGQ+CiAqIDx0ZD5BbiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB3aGV0aGVyIHRoZSBwYXJhbWV0ZXIgaXMgbnVsbGFibGUKICogb3Igbm90LjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5SRU1BUktTPC90ZD4KICogPHRkPkRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXIuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkNPTFVNTl9ERUY8L3RkPgogKiA8dGQ+RGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlci48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+U1FMX0RBVEFfVFlQRTwvdGQ+CiAqIDx0ZD5BbiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgc2l6ZSBvZiB0aGUgcGFyYW1ldGVyLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5TUUxfREFURVRJTUVfU1VCPC90ZD4KICogPHRkPgogKiBSZXR1cm5zIGFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIGEgZGF0ZXRpbWUgc3VidHlwZSBjb2RlLAogKiBvciBudWxsIGZvciBTUUwgZGF0YSB0eXBlcyB0byB3aGljaCB0aGlzIGRvZXMgbm90IGFwcGx5LgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Q0hBUl9PQ1RFVF9MRU5HVEg8L3RkPgogKiA8dGQ+CiAqIE1heGltdW0gbGVuZ3RoIGluIG9jdGV0cyBmb3IgYSBjaGFyYWN0ZXIgZGF0YSB0eXBlIHBhcmFtZXRlciwgd2hpY2gKICogbWF0Y2hlcyBDT0xVTU5fU0laRSBmb3Igc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIHNldCBkYXRhLCBvciBudWxsIGZvcgogKiBub24tY2hhcmFjdGVyIGRhdGEgdHlwZXMuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5PUkRJTkFMX1BPU0lUSU9OPC90ZD4KICogPHRkPlRoZSAxLWluZGV4ZWQgcG9zaXRpb24gb2YgdGhlIHBhcmFtZXRlciBpbiB0aGUgQ0FMTAogKiBzdGF0ZW1lbnQuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPklTX05VTExBQkxFPC90ZD4KICogPHRkPgogKiBBIHN0cmluZyB2YWx1ZSB3aGVyZSAnWUVTJyBtZWFucyB0aGF0IHRoZSBwYXJhbWV0ZXIgYWNjZXB0cyBvcgogKiByZXR1cm5zIG51bGwgdmFsdWVzIGFuZCAnTk8nIG1lYW5zIHRoYXQgdGhlIHBhcmFtZXRlciBkb2VzIG5vdAogKiBhY2NlcHQgb3IgcmV0dXJuIG51bGwgdmFsdWVzLgogKiA8L3RkPgogKiA8L3RyPgogKi8KZnVuY3Rpb24gZGIyX3Byb2NlZHVyZV9jb2x1bW5zKCRjb25uZWN0aW9uLCA/c3RyaW5nICRxdWFsaWZpZXIsIHN0cmluZyAkc2NoZW1hLCBzdHJpbmcgJHByb2NlZHVyZSwgP3N0cmluZyAkcGFyYW1ldGVyKSB7fQoKZnVuY3Rpb24gZGIyX3Byb2NlZHVyZWNvbHVtbnMoKSB7fQoKLyoqCiAqIFJldHVybnMgYSByZXN1bHQgc2V0IGxpc3RpbmcgdGhlIHN0b3JlZCBwcm9jZWR1cmVzIHJlZ2lzdGVyZWQgaW4gYSBkYXRhYmFzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1wcm9jZWR1cmVzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIEEgdmFsaWQgY29ubmVjdGlvbiB0byBhbiBJQk0gREIyLCBDbG91ZHNjYXBlLCBvciBBcGFjaGUgRGVyYnkgZGF0YWJhc2UuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRxdWFsaWZpZXIgPHA+CiAqIEEgcXVhbGlmaWVyIGZvciBEQjIgZGF0YWJhc2VzIHJ1bm5pbmcgb24gT1MvMzkwIG9yIHovT1Mgc2VydmVycy4gRm9yCiAqIG90aGVyIGRhdGFiYXNlcywgcGFzcyBudWxsIG9yIGFuIGVtcHR5IHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRzY2hlbWEgPHA+CiAqIFRoZSBzY2hlbWEgd2hpY2ggY29udGFpbnMgdGhlIHByb2NlZHVyZXMuIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgYQogKiBzZWFyY2ggcGF0dGVybiBjb250YWluaW5nIF8gYW5kICUKICogYXMgd2lsZGNhcmRzLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHByb2NlZHVyZSA8cD4KICogVGhlIG5hbWUgb2YgdGhlIHByb2NlZHVyZS4gVGhpcyBwYXJhbWV0ZXIgYWNjZXB0cyBhCiAqIHNlYXJjaCBwYXR0ZXJuIGNvbnRhaW5pbmcgXyBhbmQgJQogKiBhcyB3aWxkY2FyZHMuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIHN0YXRlbWVudCByZXNvdXJjZSB3aXRoIGEgcmVzdWx0IHNldCBjb250YWluaW5nIHJvd3MgZGVzY3JpYmluZwogKiB0aGUgc3RvcmVkIHByb2NlZHVyZXMgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLiBUaGUgcm93cyBhcmUKICogY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Q29sdW1uIG5hbWU8L3RkPgogKiA8dGQ+RGVzY3JpcHRpb248L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+UFJPQ0VEVVJFX0NBVDwvdGQ+CiAqIDx0ZD5UaGUgY2F0YWxvZyB0aGF0IGNvbnRhaW5zIHRoZSBwcm9jZWR1cmUuIFRoZSB2YWx1ZSBpcyBudWxsIGlmCiAqIHRoaXMgdGFibGUgZG9lcyBub3QgaGF2ZSBjYXRhbG9ncy48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+UFJPQ0VEVVJFX1NDSEVNPC90ZD4KICogPHRkPk5hbWUgb2YgdGhlIHNjaGVtYSB0aGF0IGNvbnRhaW5zIHRoZSBzdG9yZWQgcHJvY2VkdXJlLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5QUk9DRURVUkVfTkFNRTwvdGQ+CiAqIDx0ZD5OYW1lIG9mIHRoZSBwcm9jZWR1cmUuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPk5VTV9JTlBVVF9QQVJBTVM8L3RkPgogKiA8dGQ+TnVtYmVyIG9mIGlucHV0IChJTikgcGFyYW1ldGVycyBmb3IgdGhlIHN0b3JlZCBwcm9jZWR1cmUuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPk5VTV9PVVRQVVRfUEFSQU1TPC90ZD4KICogPHRkPk51bWJlciBvZiBvdXRwdXQgKE9VVCkgcGFyYW1ldGVycyBmb3IgdGhlIHN0b3JlZCBwcm9jZWR1cmUuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPk5VTV9SRVNVTFRfU0VUUzwvdGQ+CiAqIDx0ZD5OdW1iZXIgb2YgcmVzdWx0IHNldHMgcmV0dXJuZWQgYnkgdGhlIHN0b3JlZCBwcm9jZWR1cmUuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlJFTUFSS1M8L3RkPgogKiA8dGQ+QW55IGNvbW1lbnRzIGFib3V0IHRoZSBzdG9yZWQgcHJvY2VkdXJlLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5QUk9DRURVUkVfVFlQRTwvdGQ+CiAqIDx0ZD5BbHdheXMgcmV0dXJucyAxLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHN0b3JlZAogKiBwcm9jZWR1cmUgZG9lcyBub3QgcmV0dXJuIGEgcmV0dXJuIHZhbHVlLjwvdGQ+CiAqIDwvdHI+CiAqLwpmdW5jdGlvbiBkYjJfcHJvY2VkdXJlcygkY29ubmVjdGlvbiwgP3N0cmluZyAkcXVhbGlmaWVyLCBzdHJpbmcgJHNjaGVtYSwgc3RyaW5nICRwcm9jZWR1cmUpIHt9CgovKioKICogUmV0dXJucyBhIHJlc3VsdCBzZXQgbGlzdGluZyB0aGUgdW5pcXVlIHJvdyBpZGVudGlmaWVyIGNvbHVtbnMgZm9yIGEgdGFibGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItc3BlY2lhbC1jb2x1bW5zLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIEEgdmFsaWQgY29ubmVjdGlvbiB0byBhbiBJQk0gREIyLCBDbG91ZHNjYXBlLCBvciBBcGFjaGUgRGVyYnkgZGF0YWJhc2UuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRxdWFsaWZpZXIgPHA+CiAqIEEgcXVhbGlmaWVyIGZvciBEQjIgZGF0YWJhc2VzIHJ1bm5pbmcgb24gT1MvMzkwIG9yIHovT1Mgc2VydmVycy4gRm9yCiAqIG90aGVyIGRhdGFiYXNlcywgcGFzcyBudWxsIG9yIGFuIGVtcHR5IHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRzY2hlbWEgPHA+CiAqIFRoZSBzY2hlbWEgd2hpY2ggY29udGFpbnMgdGhlIHRhYmxlcy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9uYW1lIDxwPgogKiBUaGUgbmFtZSBvZiB0aGUgdGFibGUuCiAqIDwvcD4KICogQHBhcmFtIGludCAkc2NvcGUgPHA+CiAqIEludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBtaW5pbXVtIGR1cmF0aW9uIGZvciB3aGljaCB0aGUKICogdW5pcXVlIHJvdyBpZGVudGlmaWVyIGlzIHZhbGlkLiBUaGlzIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZwogKiB2YWx1ZXM6CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5JbnRlZ2VyIHZhbHVlPC90ZD4KICogPHRkPlNRTCBjb25zdGFudDwvdGQ+CiAqIDx0ZD5EZXNjcmlwdGlvbjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4wPC90ZD4KICogPHRkPlNRTF9TQ09QRV9DVVJST1c8L3RkPgogKiA8dGQ+Um93IGlkZW50aWZpZXIgaXMgdmFsaWQgb25seSB3aGlsZSB0aGUgY3Vyc29yIGlzIHBvc2l0aW9uZWQKICogb24gdGhlIHJvdy48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+MTwvdGQ+CiAqIDx0ZD5TUUxfU0NPUEVfVFJBTlNBQ1RJT048L3RkPgogKiA8dGQ+Um93IGlkZW50aWZpZXIgaXMgdmFsaWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUKICogdHJhbnNhY3Rpb24uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjI8L3RkPgogKiA8dGQ+U1FMX1NDT1BFX1NFU1NJT048L3RkPgogKiA8dGQ+Um93IGlkZW50aWZpZXIgaXMgdmFsaWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUKICogY29ubmVjdGlvbi48L3RkPgogKiA8L3RyPgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgQSBzdGF0ZW1lbnQgcmVzb3VyY2Ugd2l0aCBhIHJlc3VsdCBzZXQgY29udGFpbmluZyByb3dzIHdpdGggdW5pcXVlCiAqIHJvdyBpZGVudGlmaWVyIGluZm9ybWF0aW9uIGZvciBhIHRhYmxlLiBUaGUgcm93cyBhcmUgY29tcG9zZWQgb2YgdGhlCiAqIGZvbGxvd2luZyBjb2x1bW5zOgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Q29sdW1uIG5hbWU8L3RkPgogKiA8dGQ+RGVzY3JpcHRpb248L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+U0NPUEU8L3RkPgogKiA8dGQ+CiAqIDxwPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+SW50ZWdlciB2YWx1ZTwvdGQ+CiAqIDx0ZD5TUUwgY29uc3RhbnQ8L3RkPgogKiA8dGQ+RGVzY3JpcHRpb248L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+MDwvdGQ+CiAqIDx0ZD5TUUxfU0NPUEVfQ1VSUk9XPC90ZD4KICogPHRkPlJvdyBpZGVudGlmaWVyIGlzIHZhbGlkIG9ubHkgd2hpbGUgdGhlIGN1cnNvciBpcyBwb3NpdGlvbmVkCiAqIG9uIHRoZSByb3cuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjE8L3RkPgogKiA8dGQ+U1FMX1NDT1BFX1RSQU5TQUNUSU9OPC90ZD4KICogPHRkPlJvdyBpZGVudGlmaWVyIGlzIHZhbGlkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlCiAqIHRyYW5zYWN0aW9uLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4yPC90ZD4KICogPHRkPlNRTF9TQ09QRV9TRVNTSU9OPC90ZD4KICogPHRkPlJvdyBpZGVudGlmaWVyIGlzIHZhbGlkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlCiAqIGNvbm5lY3Rpb24uPC90ZD4KICogPC90cj4KICogPC9wPgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Q09MVU1OX05BTUU8L3RkPgogKiA8dGQ+TmFtZSBvZiB0aGUgdW5pcXVlIGNvbHVtbi48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+REFUQV9UWVBFPC90ZD4KICogPHRkPlNRTCBkYXRhIHR5cGUgZm9yIHRoZSBjb2x1bW4uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlRZUEVfTkFNRTwvdGQ+CiAqIDx0ZD5DaGFyYWN0ZXIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBTUUwgZGF0YSB0eXBlIGZvciB0aGUKICogY29sdW1uLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5DT0xVTU5fU0laRTwvdGQ+CiAqIDx0ZD5BbiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgc2l6ZSBvZiB0aGUgY29sdW1uLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5CVUZGRVJfTEVOR1RIPC90ZD4KICogPHRkPgogKiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyBuZWNlc3NhcnkgdG8gc3RvcmUgZGF0YSBmcm9tIHRoaXMgY29sdW1uLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+REVDSU1BTF9ESUdJVFM8L3RkPgogKiA8dGQ+CiAqIFRoZSBzY2FsZSBvZiB0aGUgY29sdW1uLCBvciBudWxsIHdoZXJlIHNjYWxlIGlzIG5vdCBhcHBsaWNhYmxlLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+TlVNX1BSRUNfUkFESVg8L3RkPgogKiA8dGQ+CiAqIEFuIGludGVnZXIgdmFsdWUgb2YgZWl0aGVyIDEwIChyZXByZXNlbnRpbmcKICogYW4gZXhhY3QgbnVtZXJpYyBkYXRhIHR5cGUpLCAyIChyZXByZXNlbnRpbmcgYW4KICogYXBwcm94aW1hdGUgbnVtZXJpYyBkYXRhIHR5cGUpLCBvciBudWxsIChyZXByZXNlbnRpbmcgYSBkYXRhIHR5cGUgZm9yCiAqIHdoaWNoIHJhZGl4IGlzIG5vdCBhcHBsaWNhYmxlKS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlBTRVVET19DT0xVTU48L3RkPgogKiA8dGQ+QWx3YXlzIHJldHVybnMgMS48L3RkPgogKiA8L3RyPgogKi8KZnVuY3Rpb24gZGIyX3NwZWNpYWxfY29sdW1ucygkY29ubmVjdGlvbiwgP3N0cmluZyAkcXVhbGlmaWVyLCBzdHJpbmcgJHNjaGVtYSwgc3RyaW5nICR0YWJsZV9uYW1lLCBpbnQgJHNjb3BlKSB7fQoKZnVuY3Rpb24gZGIyX3NwZWNpYWxjb2x1bW5zKCkge30KCi8qKgogKiBSZXR1cm5zIGEgcmVzdWx0IHNldCBsaXN0aW5nIHRoZSBpbmRleCBhbmQgc3RhdGlzdGljcyBmb3IgYSB0YWJsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1zdGF0aXN0aWNzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIEEgdmFsaWQgY29ubmVjdGlvbiB0byBhbiBJQk0gREIyLCBDbG91ZHNjYXBlLCBvciBBcGFjaGUgRGVyYnkgZGF0YWJhc2UuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRxdWFsaWZpZXIgPHA+CiAqIEEgcXVhbGlmaWVyIGZvciBEQjIgZGF0YWJhc2VzIHJ1bm5pbmcgb24gT1MvMzkwIG9yIHovT1Mgc2VydmVycy4gRm9yCiAqIG90aGVyIGRhdGFiYXNlcywgcGFzcyBudWxsIG9yIGFuIGVtcHR5IHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHNjaGVtYSA8cD4KICogVGhlIHNjaGVtYSB0aGF0IGNvbnRhaW5zIHRoZSB0YXJnZXRlZCB0YWJsZS4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMKICogbnVsbCwgdGhlIHN0YXRpc3RpY3MgYW5kIGluZGV4ZXMgYXJlIHJldHVybmVkIGZvciB0aGUgc2NoZW1hIG9mIHRoZQogKiBjdXJyZW50IHVzZXIuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZSA8cD4KICogVGhlIG5hbWUgb2YgdGhlIHRhYmxlLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICR1bmlxdWUgPHA+CiAqIFdoZXRoZXIgdG8gcmV0dXJuIHRoZSBvbmx5IHRoZSB1bmlxdWUgaW5kZXhlcyBvciBhbGwgdGhlIGluZGV4ZXMgaW4gdGhlIHRhYmxlLgogKiA8L3A+CiAqIDxwPgogKiBSZXR1cm4gb25seSB0aGUgaW5mb3JtYXRpb24gZm9yIHVuaXF1ZSBpbmRleGVzIG9uIHRoZSB0YWJsZS4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIEEgc3RhdGVtZW50IHJlc291cmNlIHdpdGggYSByZXN1bHQgc2V0IGNvbnRhaW5pbmcgcm93cyBkZXNjcmliaW5nCiAqIHRoZSBzdGF0aXN0aWNzIGFuZCBpbmRleGVzIGZvciB0aGUgYmFzZSB0YWJsZXMgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZAogKiBwYXJhbWV0ZXJzLiBUaGUgcm93cyBhcmUgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKiA8dGFibGU+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5Db2x1bW4gbmFtZTwvdGQ+CiAqIDx0ZD5EZXNjcmlwdGlvbjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5UQUJMRV9DQVQ8L3RkPgogKiA8dGQ+VGhlIGNhdGFsb2cgdGhhdCBjb250YWlucyB0aGUgdGFibGUuIFRoZSB2YWx1ZSBpcyBudWxsIGlmCiAqIHRoaXMgdGFibGUgZG9lcyBub3QgaGF2ZSBjYXRhbG9ncy48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VEFCTEVfU0NIRU08L3RkPgogKiA8dGQ+TmFtZSBvZiB0aGUgc2NoZW1hIHRoYXQgY29udGFpbnMgdGhlIHRhYmxlLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5UQUJMRV9OQU1FPC90ZD4KICogPHRkPk5hbWUgb2YgdGhlIHRhYmxlLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5OT05fVU5JUVVFPC90ZD4KICogPHRkPgogKiA8dGFibGU+CiAqIDxwPgogKiBBbiBib29sZWFuIHZhbHVlIHJlcHJlc2VudGluZyB3aGV0aGVyIHRoZSBpbmRleCBwcm9oaWJpdHMgdW5pcXVlCiAqIHZhbHVlcywgb3Igd2hldGhlciB0aGUgcm93IHJlcHJlc2VudHMgc3RhdGlzdGljcyBvbiB0aGUgdGFibGUgaXRzZWxmOjwvcD4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlJldHVybiB2YWx1ZTwvdGQ+CiAqIDx0ZD5QYXJhbWV0ZXIgdHlwZTwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5mYWxzZSAoU1FMX0ZBTFNFKTwvdGQ+CiAqIDx0ZD5UaGUgaW5kZXggYWxsb3dzIGR1cGxpY2F0ZSB2YWx1ZXMuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPnRydWUgKFNRTF9UUlVFKTwvdGQ+CiAqIDx0ZD5UaGUgaW5kZXggdmFsdWVzIG11c3QgYmUgdW5pcXVlLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5udWxsPC90ZD4KICogPHRkPlRoaXMgcm93IGlzIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gZm9yIHRoZSB0YWJsZSBpdHNlbGYuPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPklOREVYX1FVQUxJRklFUjwvdGQ+CiAqIDx0ZD5BIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIHF1YWxpZmllciB0aGF0IHdvdWxkIGhhdmUgdG8gYmUKICogcHJlcGVuZGVkIHRvIElOREVYX05BTUUgdG8gZnVsbHkgcXVhbGlmeSB0aGUgaW5kZXguPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPklOREVYX05BTUU8L3RkPgogKiA8dGQ+QSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBpbmRleC48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VFlQRTwvdGQ+CiAqIDx0ZD4KICogPHA+CiAqIEFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbgogKiB0aGlzIHJvdyBvZiB0aGUgcmVzdWx0IHNldDo8L3A+CiAqIDx0YWJsZT4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlJldHVybiB2YWx1ZTwvdGQ+CiAqIDx0ZD5QYXJhbWV0ZXIgdHlwZTwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4wIChTUUxfVEFCTEVfU1RBVCk8L3RkPgogKiA8dGQ+VGhlIHJvdyBjb250YWlucyBzdGF0aXN0aWNzIGFib3V0IHRoZSB0YWJsZSBpdHNlbGYuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjEgKFNRTF9JTkRFWF9DTFVTVEVSRUQpPC90ZD4KICogPHRkPlRoZSByb3cgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBjbHVzdGVyZWQgaW5kZXguPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjIgKFNRTF9JTkRFWF9IQVNIKTwvdGQ+CiAqIDx0ZD5UaGUgcm93IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgaGFzaGVkIGluZGV4LjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4zIChTUUxfSU5ERVhfT1RIRVIpPC90ZD4KICogPHRkPlRoZSByb3cgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSB0eXBlIG9mIGluZGV4IHRoYXQKICogaXMgbmVpdGhlciBjbHVzdGVyZWQgbm9yIGhhc2hlZC48L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+T1JESU5BTF9QT1NJVElPTjwvdGQ+CiAqIDx0ZD5UaGUgMS1pbmRleGVkIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4gaW4gdGhlIGluZGV4LiBudWxsIGlmCiAqIHRoZSByb3cgY29udGFpbnMgc3RhdGlzdGljcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFibGUgaXRzZWxmLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5DT0xVTU5fTkFNRTwvdGQ+CiAqIDx0ZD5UaGUgbmFtZSBvZiB0aGUgY29sdW1uIGluIHRoZSBpbmRleC4gbnVsbCBpZiB0aGUgcm93CiAqIGNvbnRhaW5zIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhYmxlIGl0c2VsZi48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+QVNDX09SX0RFU0M8L3RkPgogKiA8dGQ+CiAqIEEgaWYgdGhlIGNvbHVtbiBpcyBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLAogKiBEIGlmIHRoZSBjb2x1bW4gaXMgc29ydGVkIGluIGRlc2NlbmRpbmcgb3JkZXIsCiAqIG51bGwgaWYgdGhlIHJvdyBjb250YWlucyBzdGF0aXN0aWNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YWJsZQogKiBpdHNlbGYuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5DQVJESU5BTElUWTwvdGQ+CiAqIDx0ZD4KICogPHA+CiAqIElmIHRoZSByb3cgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYW4gaW5kZXgsIHRoaXMgY29sdW1uIGNvbnRhaW5zCiAqIGFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YgdW5pcXVlIHZhbHVlcyBpbiB0aGUKICogaW5kZXguCiAqIDwvcD4KICogPHA+CiAqIElmIHRoZSByb3cgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhYmxlIGl0c2VsZiwgdGhpcyBjb2x1bW4KICogY29udGFpbnMgYW4gaW50ZWdlciB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZQogKiB0YWJsZS4KICogPC9wPgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+UEFHRVM8L3RkPgogKiA8dGQ+CiAqIDxwPgogKiBJZiB0aGUgcm93IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGFuIGluZGV4LCB0aGlzIGNvbHVtbiBjb250YWlucwogKiBhbiBpbnRlZ2VyIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHVzZWQgdG8gc3RvcmUgdGhlCiAqIGluZGV4LgogKiA8L3A+CiAqIDxwPgogKiBJZiB0aGUgcm93IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YWJsZSBpdHNlbGYsIHRoaXMgY29sdW1uCiAqIGNvbnRhaW5zIGFuIGludGVnZXIgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YgcGFnZXMgdXNlZCB0bwogKiBzdG9yZSB0aGUgdGFibGUuCiAqIDwvcD4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkZJTFRFUl9DT05ESVRJT048L3RkPgogKiA8dGQ+QWx3YXlzIHJldHVybnMgbnVsbC48L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKi8KZnVuY3Rpb24gZGIyX3N0YXRpc3RpY3MoJGNvbm5lY3Rpb24sID9zdHJpbmcgJHF1YWxpZmllciwgP3N0cmluZyAkc2NoZW1hLCBzdHJpbmcgJHRhYmxlX25hbWUsIGJvb2wgJHVuaXF1ZSkge30KCi8qKgogKiBSZXR1cm5zIGEgcmVzdWx0IHNldCBsaXN0aW5nIHRoZSB0YWJsZXMgYW5kIGFzc29jaWF0ZWQgcHJpdmlsZWdlcyBpbiBhIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLXRhYmxlLXByaXZpbGVnZXMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogQSB2YWxpZCBjb25uZWN0aW9uIHRvIGFuIElCTSBEQjIsIENsb3Vkc2NhcGUsIG9yIEFwYWNoZSBEZXJieSBkYXRhYmFzZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHF1YWxpZmllciA8cD4KICogQSBxdWFsaWZpZXIgZm9yIERCMiBkYXRhYmFzZXMgcnVubmluZyBvbiBPUy8zOTAgb3Igei9PUyBzZXJ2ZXJzLiBGb3IKICogb3RoZXIgZGF0YWJhc2VzLCBwYXNzIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2NoZW1hIDxwPgogKiBUaGUgc2NoZW1hIHdoaWNoIGNvbnRhaW5zIHRoZSB0YWJsZXMuIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgYQogKiBzZWFyY2ggcGF0dGVybiBjb250YWluaW5nIF8gYW5kICUKICogYXMgd2lsZGNhcmRzLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdGFibGVfbmFtZSA8cD4KICogVGhlIG5hbWUgb2YgdGhlIHRhYmxlLiBUaGlzIHBhcmFtZXRlciBhY2NlcHRzIGEgc2VhcmNoIHBhdHRlcm4KICogY29udGFpbmluZyBfIGFuZCAlIGFzIHdpbGRjYXJkcy4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIEEgc3RhdGVtZW50IHJlc291cmNlIHdpdGggYSByZXN1bHQgc2V0IGNvbnRhaW5pbmcgcm93cyBkZXNjcmliaW5nCiAqIHRoZSBwcml2aWxlZ2VzIGZvciB0aGUgdGFibGVzIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLiBUaGUgcm93cwogKiBhcmUgY29tcG9zZWQgb2YgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Q29sdW1uIG5hbWU8L3RkPgogKiA8dGQ+RGVzY3JpcHRpb248L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VEFCTEVfQ0FUPC90ZD4KICogPHRkPlRoZSBjYXRhbG9nIHRoYXQgY29udGFpbnMgdGhlIHRhYmxlLiBUaGUgdmFsdWUgaXMgbnVsbCBpZgogKiB0aGlzIHRhYmxlIGRvZXMgbm90IGhhdmUgY2F0YWxvZ3MuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlRBQkxFX1NDSEVNPC90ZD4KICogPHRkPk5hbWUgb2YgdGhlIHNjaGVtYSB0aGF0IGNvbnRhaW5zIHRoZSB0YWJsZS48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VEFCTEVfTkFNRTwvdGQ+CiAqIDx0ZD5OYW1lIG9mIHRoZSB0YWJsZS48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+R1JBTlRPUjwvdGQ+CiAqIDx0ZD5BdXRob3JpemF0aW9uIElEIG9mIHRoZSB1c2VyIHdobyBncmFudGVkIHRoZSBwcml2aWxlZ2UuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkdSQU5URUU8L3RkPgogKiA8dGQ+QXV0aG9yaXphdGlvbiBJRCBvZiB0aGUgdXNlciB0byB3aG9tIHRoZSBwcml2aWxlZ2Ugd2FzCiAqIGdyYW50ZWQuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlBSSVZJTEVHRTwvdGQ+CiAqIDx0ZD4KICogVGhlIHByaXZpbGVnZSB0aGF0IGhhcyBiZWVuIGdyYW50ZWQuIFRoaXMgY2FuIGJlIG9uZSBvZiBBTFRFUiwKICogQ09OVFJPTCwgREVMRVRFLCBJTkRFWCwgSU5TRVJULCBSRUZFUkVOQ0VTLCBTRUxFQ1QsIG9yIFVQREFURS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPklTX0dSQU5UQUJMRTwvdGQ+CiAqIDx0ZD4KICogQSBzdHJpbmcgdmFsdWUgb2YgIllFUyIgb3IgIk5PIiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGdyYW50ZWUKICogY2FuIGdyYW50IHRoZSBwcml2aWxlZ2UgdG8gb3RoZXIgdXNlcnMuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqLwpmdW5jdGlvbiBkYjJfdGFibGVfcHJpdmlsZWdlcygkY29ubmVjdGlvbiwgP3N0cmluZyAkcXVhbGlmaWVyID0gbnVsbCwgP3N0cmluZyAkc2NoZW1hID0gbnVsbCwgP3N0cmluZyAkdGFibGVfbmFtZSA9IG51bGwpIHt9CgpmdW5jdGlvbiBkYjJfdGFibGVwcml2aWxlZ2VzKCkge30KCi8qKgogKiBSZXR1cm5zIGEgcmVzdWx0IHNldCBsaXN0aW5nIHRoZSB0YWJsZXMgYW5kIGFzc29jaWF0ZWQgbWV0YWRhdGEgaW4gYSBkYXRhYmFzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi10YWJsZXMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogQSB2YWxpZCBjb25uZWN0aW9uIHRvIGFuIElCTSBEQjIsIENsb3Vkc2NhcGUsIG9yIEFwYWNoZSBEZXJieSBkYXRhYmFzZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHF1YWxpZmllciA8cD4KICogQSBxdWFsaWZpZXIgZm9yIERCMiBkYXRhYmFzZXMgcnVubmluZyBvbiBPUy8zOTAgb3Igei9PUyBzZXJ2ZXJzLiBGb3IKICogb3RoZXIgZGF0YWJhc2VzLCBwYXNzIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2NoZW1hIDxwPgogKiBUaGUgc2NoZW1hIHdoaWNoIGNvbnRhaW5zIHRoZSB0YWJsZXMuIFRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgYQogKiBzZWFyY2ggcGF0dGVybiBjb250YWluaW5nIF8gYW5kICUKICogYXMgd2lsZGNhcmRzLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdGFibGVfbmFtZQogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHRhYmxlX3R5cGUKICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIHN0YXRlbWVudCByZXNvdXJjZSB3aXRoIGEgcmVzdWx0IHNldCBjb250YWluaW5nIHJvd3MgZGVzY3JpYmluZwogKiB0aGUgdGFibGVzIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLiBUaGUgcm93cyBhcmUgY29tcG9zZWQgb2YKICogdGhlIGZvbGxvd2luZyBjb2x1bW5zOgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Q29sdW1uIG5hbWU8L3RkPgogKiA8dGQ+RGVzY3JpcHRpb248L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VEFCTEVfQ0FUPC90ZD4KICogPHRkPlRoZSBjYXRhbG9nIHRoYXQgY29udGFpbnMgdGhlIHRhYmxlLiBUaGUgdmFsdWUgaXMgbnVsbCBpZgogKiB0aGlzIHRhYmxlIGRvZXMgbm90IGhhdmUgY2F0YWxvZ3MuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlRBQkxFX1NDSEVNPC90ZD4KICogPHRkPk5hbWUgb2YgdGhlIHNjaGVtYSB0aGF0IGNvbnRhaW5zIHRoZSB0YWJsZS48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VEFCTEVfTkFNRTwvdGQ+CiAqIDx0ZD5OYW1lIG9mIHRoZSB0YWJsZS48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VEFCTEVfVFlQRTwvdGQ+CiAqIDx0ZD5UYWJsZSB0eXBlIGlkZW50aWZpZXIgZm9yIHRoZSB0YWJsZS48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+UkVNQVJLUzwvdGQ+CiAqIDx0ZD5EZXNjcmlwdGlvbiBvZiB0aGUgdGFibGUuPC90ZD4KICogPC90cj4KICovCmZ1bmN0aW9uIGRiMl90YWJsZXMoJGNvbm5lY3Rpb24sID9zdHJpbmcgJHF1YWxpZmllciA9IG51bGwsID9zdHJpbmcgJHNjaGVtYSA9IG51bGwsID9zdHJpbmcgJHRhYmxlX25hbWUgPSBudWxsLCA/c3RyaW5nICR0YWJsZV90eXBlID0gbnVsbCkge30KCi8qKgogKiBFeGVjdXRlcyBhbiBTUUwgc3RhdGVtZW50IGRpcmVjdGx5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLWV4ZWMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogQSB2YWxpZCBkYXRhYmFzZSBjb25uZWN0aW9uIHJlc291cmNlIHZhcmlhYmxlIGFzIHJldHVybmVkIGZyb20KICogZGIyX2Nvbm5lY3Qgb3IgZGIyX3Bjb25uZWN0LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHN0YXRlbWVudCA8cD4KICogQW4gU1FMIHN0YXRlbWVudC4gVGhlIHN0YXRlbWVudCBjYW5ub3QgY29udGFpbiBhbnkgcGFyYW1ldGVyIG1hcmtlcnMuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRvcHRpb25zIDxwPgogKiBBbiBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIHN0YXRlbWVudCBvcHRpb25zLiBZb3UgY2FuIHVzZSB0aGlzCiAqIHBhcmFtZXRlciB0byByZXF1ZXN0IGEgc2Nyb2xsYWJsZSBjdXJzb3Igb24gZGF0YWJhc2Ugc2VydmVycyB0aGF0CiAqIHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5LgogKiBjdXJzb3IKICogPC9wPgogKiA8cD4KICogUGFzc2luZyB0aGUgREIyX0ZPUldBUkRfT05MWSB2YWx1ZSByZXF1ZXN0cyBhCiAqIGZvcndhcmQtb25seSBjdXJzb3IgZm9yIHRoaXMgU1FMIHN0YXRlbWVudC4gVGhpcyBpcyB0aGUgZGVmYXVsdAogKiB0eXBlIG9mIGN1cnNvciwgYW5kIGl0IGlzIHN1cHBvcnRlZCBieSBhbGwgZGF0YWJhc2Ugc2VydmVycy4gSXQgaXMKICogYWxzbyBtdWNoIGZhc3RlciB0aGFuIGEgc2Nyb2xsYWJsZSBjdXJzb3IuCiAqIDwvcD4KICogPHA+CiAqIFBhc3NpbmcgdGhlIERCMl9TQ1JPTExBQkxFIHZhbHVlIHJlcXVlc3RzIGEKICogc2Nyb2xsYWJsZSBjdXJzb3IgZm9yIHRoaXMgU1FMIHN0YXRlbWVudC4gVGhpcyB0eXBlIG9mIGN1cnNvcgogKiBlbmFibGVzIHlvdSB0byBmZXRjaCByb3dzIG5vbi1zZXF1ZW50aWFsbHkgZnJvbSB0aGUgZGF0YWJhc2UKICogc2VydmVyLiBIb3dldmVyLCBpdCBpcyBvbmx5IHN1cHBvcnRlZCBieSBEQjIgc2VydmVycywgYW5kIGlzIG11Y2gKICogc2xvd2VyIHRoYW4gZm9yd2FyZC1vbmx5IGN1cnNvcnMuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIHN0YXRlbWVudCByZXNvdXJjZSBpZiB0aGUgU1FMIHN0YXRlbWVudCB3YXMgaXNzdWVkIHN1Y2Nlc3NmdWxseSwKICogb3IgZmFsc2UgaWYgdGhlIGRhdGFiYXNlIGZhaWxlZCB0byBleGVjdXRlIHRoZSBTUUwgc3RhdGVtZW50LgogKi8KZnVuY3Rpb24gZGIyX2V4ZWMoJGNvbm5lY3Rpb24sIHN0cmluZyAkc3RhdGVtZW50LCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKLyoqCiAqIFByZXBhcmVzIGFuIFNRTCBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItcHJlcGFyZS5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBBIHZhbGlkIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UgdmFyaWFibGUgYXMgcmV0dXJuZWQgZnJvbQogKiBkYjJfY29ubmVjdCBvciBkYjJfcGNvbm5lY3QuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc3RhdGVtZW50IDxwPgogKiBBbiBTUUwgc3RhdGVtZW50LCBvcHRpb25hbGx5IGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgcGFyYW1ldGVyIG1hcmtlcnMuLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyA8cD4KICogQW4gYXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbmluZyBzdGF0ZW1lbnQgb3B0aW9ucy4gWW91IGNhbiB1c2UgdGhpcwogKiBwYXJhbWV0ZXIgdG8gcmVxdWVzdCBhIHNjcm9sbGFibGUgY3Vyc29yIG9uIGRhdGFiYXNlIHNlcnZlcnMgdGhhdAogKiBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eS4KICogY3Vyc29yCiAqIDwvcD4KICogPC9wPgogKiBQYXNzaW5nIHRoZSBEQjJfRk9SV0FSRF9PTkxZIHZhbHVlIHJlcXVlc3RzIGEKICogZm9yd2FyZC1vbmx5IGN1cnNvciBmb3IgdGhpcyBTUUwgc3RhdGVtZW50LiBUaGlzIGlzIHRoZSBkZWZhdWx0CiAqIHR5cGUgb2YgY3Vyc29yLCBhbmQgaXQgaXMgc3VwcG9ydGVkIGJ5IGFsbCBkYXRhYmFzZSBzZXJ2ZXJzLiBJdCBpcwogKiBhbHNvIG11Y2ggZmFzdGVyIHRoYW4gYSBzY3JvbGxhYmxlIGN1cnNvci4KICogPC9wPgogKiA8cD4KICogUGFzc2luZyB0aGUgREIyX1NDUk9MTEFCTEUgdmFsdWUgcmVxdWVzdHMgYQogKiBzY3JvbGxhYmxlIGN1cnNvciBmb3IgdGhpcyBTUUwgc3RhdGVtZW50LiBUaGlzIHR5cGUgb2YgY3Vyc29yCiAqIGVuYWJsZXMgeW91IHRvIGZldGNoIHJvd3Mgbm9uLXNlcXVlbnRpYWxseSBmcm9tIHRoZSBkYXRhYmFzZQogKiBzZXJ2ZXIuIEhvd2V2ZXIsIGl0IGlzIG9ubHkgc3VwcG9ydGVkIGJ5IERCMiBzZXJ2ZXJzLCBhbmQgaXMgbXVjaAogKiBzbG93ZXIgdGhhbiBmb3J3YXJkLW9ubHkgY3Vyc29ycy4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIEEgc3RhdGVtZW50IHJlc291cmNlIGlmIHRoZSBTUUwgc3RhdGVtZW50IHdhcyBzdWNjZXNzZnVsbHkgcGFyc2VkIGFuZAogKiBwcmVwYXJlZCBieSB0aGUgZGF0YWJhc2Ugc2VydmVyLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBkYXRhYmFzZSBzZXJ2ZXIKICogcmV0dXJuZWQgYW4gZXJyb3IuIFlvdSBjYW4gZGV0ZXJtaW5lIHdoaWNoIGVycm9yIHdhcyByZXR1cm5lZCBieSBjYWxsaW5nCiAqIGRiMl9zdG10X2Vycm9yIG9yIGRiMl9zdG10X2Vycm9ybXNnLgogKi8KZnVuY3Rpb24gZGIyX3ByZXBhcmUoJGNvbm5lY3Rpb24sIHN0cmluZyAkc3RhdGVtZW50LCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKLyoqCiAqIEV4ZWN1dGVzIGEgcHJlcGFyZWQgU1FMIHN0YXRlbWVudAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1leGVjdXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgPHA+CiAqIEEgcHJlcGFyZWQgc3RhdGVtZW50IHJldHVybmVkIGZyb20gZGIyX3ByZXBhcmUuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRwYXJhbWV0ZXJzIDxwPgogKiBBbiBhcnJheSBvZiBpbnB1dCBwYXJhbWV0ZXJzIG1hdGNoaW5nIGFueSBwYXJhbWV0ZXIgbWFya2VycyBjb250YWluZWQKICogaW4gdGhlIHByZXBhcmVkIHN0YXRlbWVudC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBkYjJfZXhlY3V0ZSgkc3RtdCwgYXJyYXkgJHBhcmFtZXRlcnMgPSBbXSk6IGJvb2wge30KCi8qKgogKiBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGxhc3QgU1FMIHN0YXRlbWVudCBlcnJvciBtZXNzYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLXN0bXQtZXJyb3Jtc2cucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxudWxsICRzdG10IDxwPgogKiBBIHZhbGlkIHN0YXRlbWVudCByZXNvdXJjZSBvciBOVUxMLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIFNRTENPREUgdmFsdWUgZm9yIHRoZQogKiBsYXN0IGVycm9yIHRoYXQgb2NjdXJyZWQgaXNzdWluZyBhbiBTUUwgc3RhdGVtZW50LgogKi8KZnVuY3Rpb24gZGIyX3N0bXRfZXJyb3Jtc2coJHN0bXQgPSBudWxsKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGxhc3QgY29ubmVjdGlvbiBlcnJvciBtZXNzYWdlIGFuZCBTUUxDT0RFIHZhbHVlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLWNvbm4tZXJyb3Jtc2cucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxudWxsICRjb25uZWN0aW9uIDxwPgogKiBBIGNvbm5lY3Rpb24gcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIGEgY29ubmVjdGlvbiB0aGF0IGluaXRpYWxseQogKiBzdWNjZWVkZWQsIGJ1dCB3aGljaCBvdmVyIHRpbWUgYmVjYW1lIGludmFsaWQuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZXJyb3IgbWVzc2FnZSBhbmQgU1FMQ09ERSB2YWx1ZSByZXN1bHRpbmcKICogZnJvbSBhIGZhaWxlZCBjb25uZWN0aW9uIGF0dGVtcHQuIElmIHRoZXJlIGlzIG5vIGVycm9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGFzdAogKiBjb25uZWN0aW9uIGF0dGVtcHQsIGRiMl9jb25uX2Vycm9ybXNnIHJldHVybnMgYW4gZW1wdHkKICogc3RyaW5nLgogKi8KZnVuY3Rpb24gZGIyX2Nvbm5fZXJyb3Jtc2coJGNvbm5lY3Rpb24gPSBudWxsKSB7fQoKLyoqCiAqIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgU1FMU1RBVEUgcmV0dXJuZWQgYnkgdGhlIGxhc3QgY29ubmVjdGlvbiBhdHRlbXB0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLWNvbm4tZXJyb3IucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxudWxsICRjb25uZWN0aW9uIDxwPgogKiBBIGNvbm5lY3Rpb24gcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIGEgY29ubmVjdGlvbiB0aGF0IGluaXRpYWxseQogKiBzdWNjZWVkZWQsIGJ1dCB3aGljaCBvdmVyIHRpbWUgYmVjYW1lIGludmFsaWQuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgdGhlIFNRTFNUQVRFIHZhbHVlIHJlc3VsdGluZyBmcm9tIGEgZmFpbGVkIGNvbm5lY3Rpb24gYXR0ZW1wdC4KICogUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gZXJyb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBsYXN0CiAqIGNvbm5lY3Rpb24gYXR0ZW1wdC4KICovCmZ1bmN0aW9uIGRiMl9jb25uX2Vycm9yKCRjb25uZWN0aW9uID0gbnVsbCkge30KCi8qKgogKiBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFNRTFNUQVRFIHJldHVybmVkIGJ5IGFuIFNRTCBzdGF0ZW1lbnQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItc3RtdC1lcnJvci5waHAKICogQHBhcmFtIHJlc291cmNlfG51bGwgJHN0bXQgPHA+CiAqIEEgdmFsaWQgc3RhdGVtZW50IHJlc291cmNlIG9yIE5VTEwuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgYSBzdHJpbmcgY29udGFpbmluZyBhbiBTUUxTVEFURSB2YWx1ZS4KICovCmZ1bmN0aW9uIGRiMl9zdG10X2Vycm9yKCRzdG10ID0gbnVsbCkge30KCi8qKgogKiBSZXF1ZXN0cyB0aGUgbmV4dCByZXN1bHQgc2V0IGZyb20gYSBzdG9yZWQgcHJvY2VkdXJlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLW5leHQtcmVzdWx0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgPHA+CiAqIEEgcHJlcGFyZWQgc3RhdGVtZW50IHJldHVybmVkIGZyb20gZGIyX2V4ZWMgb3IKICogZGIyX2V4ZWN1dGUuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIG5ldyBzdGF0ZW1lbnQgcmVzb3VyY2UgY29udGFpbmluZyB0aGUgbmV4dCByZXN1bHQgc2V0IGlmIHRoZQogKiBzdG9yZWQgcHJvY2VkdXJlIHJldHVybmVkIGFub3RoZXIgcmVzdWx0IHNldC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgc3RvcmVkCiAqIHByb2NlZHVyZSBkaWQgbm90IHJldHVybiBhbm90aGVyIHJlc3VsdCBzZXQuCiAqLwpmdW5jdGlvbiBkYjJfbmV4dF9yZXN1bHQoJHN0bXQpIHt9CgovKioKICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZpZWxkcyBjb250YWluZWQgaW4gYSByZXN1bHQgc2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLW51bS1maWVsZHMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCA8cD4KICogQSB2YWxpZCBzdGF0ZW1lbnQgcmVzb3VyY2UgY29udGFpbmluZyBhIHJlc3VsdCBzZXQuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgQW4gaW50ZWdlciB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBmaWVsZHMgaW4gdGhlIHJlc3VsdAogKiBzZXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgc3RhdGVtZW50IHJlc291cmNlLiBSZXR1cm5zIGZhbHNlIGlmCiAqIHRoZSBzdGF0ZW1lbnQgcmVzb3VyY2UgaXMgbm90IGEgdmFsaWQgaW5wdXQgdmFsdWUuCiAqLwpmdW5jdGlvbiBkYjJfbnVtX2ZpZWxkcygkc3RtdCk6IGludHxmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGFmZmVjdGVkIGJ5IGFuIFNRTCBzdGF0ZW1lbnQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItbnVtLXJvd3MucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCA8cD4KICogQSB2YWxpZCBzdG10IHJlc291cmNlIGNvbnRhaW5pbmcgYSByZXN1bHQgc2V0LgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIHRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBieSB0aGUgbGFzdCBTUUwgc3RhdGVtZW50IGlzc3VlZCBieQogKiB0aGUgc3BlY2lmaWVkIHN0YXRlbWVudCBoYW5kbGUsIG9yIGZhbHNlIGluIGNhc2Ugb2YgZmFpbHVyZS4KICovCmZ1bmN0aW9uIGRiMl9udW1fcm93cygkc3RtdCk6IGludHxmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IHNldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1maWVsZC1uYW1lLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgPHA+CiAqIFNwZWNpZmllcyBhIHN0YXRlbWVudCByZXNvdXJjZSBjb250YWluaW5nIGEgcmVzdWx0IHNldC4KICogPC9wPgogKiBAcGFyYW0gaW50fHN0cmluZyAkY29sdW1uIDxwPgogKiBTcGVjaWZpZXMgdGhlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IHNldC4gVGhpcyBjYW4gZWl0aGVyIGJlIGFuIGludGVnZXIKICogcmVwcmVzZW50aW5nIHRoZSAwLWluZGV4ZWQgcG9zaXRpb24gb2YgdGhlIGNvbHVtbiwgb3IgYSBzdHJpbmcKICogY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgY29sdW1uLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmllZCBjb2x1bW4uIElmIHRoZQogKiBzcGVjaWZpZWQgY29sdW1uIGRvZXMgbm90IGV4aXN0IGluIHRoZSByZXN1bHQKICogc2V0LCBkYjJfZmllbGRfbmFtZSByZXR1cm5zIGZhbHNlLgogKi8KZnVuY3Rpb24gZGIyX2ZpZWxkX25hbWUoJHN0bXQsIGludHxzdHJpbmcgJGNvbHVtbik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkIHRvIGRpc3BsYXkgYSBjb2x1bW4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItZmllbGQtZGlzcGxheS1zaXplLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgPHA+CiAqIFNwZWNpZmllcyBhIHN0YXRlbWVudCByZXNvdXJjZSBjb250YWluaW5nIGEgcmVzdWx0IHNldC4KICogPC9wPgogKiBAcGFyYW0gaW50fHN0cmluZyAkY29sdW1uIDxwPgogKiBTcGVjaWZpZXMgdGhlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IHNldC4gVGhpcyBjYW4gZWl0aGVyIGJlIGFuIGludGVnZXIKICogcmVwcmVzZW50aW5nIHRoZSAwLWluZGV4ZWQgcG9zaXRpb24gb2YgdGhlIGNvbHVtbiwgb3IgYSBzdHJpbmcKICogY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgY29sdW1uLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIEFuIGludGVnZXIgdmFsdWUgd2l0aCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8KICogZGlzcGxheSB0aGUgc3BlY2lmaWVkIGNvbHVtbi4gSWYgdGhlIGNvbHVtbiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcmVzdWx0CiAqIHNldCwgZGIyX2ZpZWxkX2Rpc3BsYXlfc2l6ZSByZXR1cm5zIGZhbHNlLgogKi8KZnVuY3Rpb24gZGIyX2ZpZWxkX2Rpc3BsYXlfc2l6ZSgkc3RtdCwgaW50fHN0cmluZyAkY29sdW1uKTogaW50fGZhbHNlIHt9CgovKioKICogUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIG5hbWVkIGNvbHVtbiBpbiBhIHJlc3VsdCBzZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItZmllbGQtbnVtLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgPHA+CiAqIFNwZWNpZmllcyBhIHN0YXRlbWVudCByZXNvdXJjZSBjb250YWluaW5nIGEgcmVzdWx0IHNldC4KICogPC9wPgogKiBAcGFyYW0gaW50fHN0cmluZyAkY29sdW1uIDxwPgogKiBTcGVjaWZpZXMgdGhlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IHNldC4gVGhpcyBjYW4gZWl0aGVyIGJlIGFuIGludGVnZXIKICogcmVwcmVzZW50aW5nIHRoZSAwLWluZGV4ZWQgcG9zaXRpb24gb2YgdGhlIGNvbHVtbiwgb3IgYSBzdHJpbmcKICogY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgY29sdW1uLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgMC1pbmRleGVkIHBvc2l0aW9uIG9mIHRoZSBuYW1lZCBjb2x1bW4gaW4KICogdGhlIHJlc3VsdCBzZXQuIElmIHRoZSBzcGVjaWZpZWQgY29sdW1uIGRvZXMgbm90IGV4aXN0IGluIHRoZSByZXN1bHQgc2V0LAogKiBkYjJfZmllbGRfbnVtIHJldHVybnMgZmFsc2UuCiAqLwpmdW5jdGlvbiBkYjJfZmllbGRfbnVtKCRzdG10LCBpbnR8c3RyaW5nICRjb2x1bW4pOiBpbnR8ZmFsc2Uge30KCi8qKgogKiBSZXR1cm5zIHRoZSBwcmVjaXNpb24gb2YgdGhlIGluZGljYXRlZCBjb2x1bW4gaW4gYSByZXN1bHQgc2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLWZpZWxkLXByZWNpc2lvbi5waHAKICogQHBhcmFtIHJlc291cmNlICRzdG10IDxwPgogKiBTcGVjaWZpZXMgYSBzdGF0ZW1lbnQgcmVzb3VyY2UgY29udGFpbmluZyBhIHJlc3VsdCBzZXQuCiAqIDwvcD4KICogQHBhcmFtIGludHxzdHJpbmcgJGNvbHVtbiA8cD4KICogU3BlY2lmaWVzIHRoZSBjb2x1bW4gaW4gdGhlIHJlc3VsdCBzZXQuIFRoaXMgY2FuIGVpdGhlciBiZSBhbiBpbnRlZ2VyCiAqIHJlcHJlc2VudGluZyB0aGUgMC1pbmRleGVkIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4sIG9yIGEgc3RyaW5nCiAqIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbi4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHByZWNpc2lvbiBvZiB0aGUgc3BlY2lmaWVkIGNvbHVtbi4gSWYgdGhlCiAqIHNwZWNpZmllZCBjb2x1bW4gZG9lcyBub3QgZXhpc3QgaW4gdGhlIHJlc3VsdCBzZXQsCiAqIGRiMl9maWVsZF9wcmVjaXNpb24gcmV0dXJucyBmYWxzZS4KICovCmZ1bmN0aW9uIGRiMl9maWVsZF9wcmVjaXNpb24oJHN0bXQsIGludHxzdHJpbmcgJGNvbHVtbik6IGludHxmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIHNjYWxlIG9mIHRoZSBpbmRpY2F0ZWQgY29sdW1uIGluIGEgcmVzdWx0IHNldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1maWVsZC1zY2FsZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzdG10IDxwPgogKiBTcGVjaWZpZXMgYSBzdGF0ZW1lbnQgcmVzb3VyY2UgY29udGFpbmluZyBhIHJlc3VsdCBzZXQuCiAqIDwvcD4KICogQHBhcmFtIGludHxzdHJpbmcgJGNvbHVtbiA8cD4KICogU3BlY2lmaWVzIHRoZSBjb2x1bW4gaW4gdGhlIHJlc3VsdCBzZXQuIFRoaXMgY2FuIGVpdGhlciBiZSBhbiBpbnRlZ2VyCiAqIHJlcHJlc2VudGluZyB0aGUgMC1pbmRleGVkIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4sIG9yIGEgc3RyaW5nCiAqIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbi4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSBBbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNjYWxlIG9mIHRoZSBzcGVjaWZpZWQgY29sdW1uLiBJZiB0aGUKICogc3BlY2lmaWVkIGNvbHVtbiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcmVzdWx0IHNldCwKICogZGIyX2ZpZWxkX3NjYWxlIHJldHVybnMgZmFsc2UuCiAqLwpmdW5jdGlvbiBkYjJfZmllbGRfc2NhbGUoJHN0bXQsIGludHxzdHJpbmcgJGNvbHVtbik6IGludHxmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgaW5kaWNhdGVkIGNvbHVtbiBpbiBhIHJlc3VsdCBzZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItZmllbGQtdHlwZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzdG10IDxwPgogKiBTcGVjaWZpZXMgYSBzdGF0ZW1lbnQgcmVzb3VyY2UgY29udGFpbmluZyBhIHJlc3VsdCBzZXQuCiAqIDwvcD4KICogQHBhcmFtIGludHxzdHJpbmcgJGNvbHVtbiA8cD4KICogU3BlY2lmaWVzIHRoZSBjb2x1bW4gaW4gdGhlIHJlc3VsdCBzZXQuIFRoaXMgY2FuIGVpdGhlciBiZSBhbiBpbnRlZ2VyCiAqIHJlcHJlc2VudGluZyB0aGUgMC1pbmRleGVkIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4sIG9yIGEgc3RyaW5nCiAqIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbi4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBkZWZpbmVkIGRhdGEgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNvbHVtbi4KICogSWYgdGhlIHNwZWNpZmllZCBjb2x1bW4gZG9lcyBub3QgZXhpc3QgaW4gdGhlIHJlc3VsdCBzZXQsCiAqIGRiMl9maWVsZF90eXBlIHJldHVybnMgZmFsc2UuCiAqLwpmdW5jdGlvbiBkYjJfZmllbGRfdHlwZSgkc3RtdCwgaW50fHN0cmluZyAkY29sdW1uKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGluZGljYXRlZCBjb2x1bW4gaW4gYSByZXN1bHQgc2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLWZpZWxkLXdpZHRoLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgPHA+CiAqIFNwZWNpZmllcyBhIHN0YXRlbWVudCByZXNvdXJjZSBjb250YWluaW5nIGEgcmVzdWx0IHNldC4KICogPC9wPgogKiBAcGFyYW0gaW50fHN0cmluZyAkY29sdW1uIDxwPgogKiBTcGVjaWZpZXMgdGhlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IHNldC4gVGhpcyBjYW4gZWl0aGVyIGJlIGFuIGludGVnZXIKICogcmVwcmVzZW50aW5nIHRoZSAwLWluZGV4ZWQgcG9zaXRpb24gb2YgdGhlIGNvbHVtbiwgb3IgYSBzdHJpbmcKICogY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgY29sdW1uLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIEFuIGludGVnZXIgY29udGFpbmluZyB0aGUgd2lkdGggb2YgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgb3IKICogYmluYXJ5IGRhdGEgdHlwZSBjb2x1bW4gaW4gYSByZXN1bHQgc2V0LiBJZiB0aGUgc3BlY2lmaWVkIGNvbHVtbiBkb2VzIG5vdAogKiBleGlzdCBpbiB0aGUgcmVzdWx0IHNldCwgZGIyX2ZpZWxkX3dpZHRoIHJldHVybnMKICogZmFsc2UuCiAqLwpmdW5jdGlvbiBkYjJfZmllbGRfd2lkdGgoJHN0bXQsIGludHxzdHJpbmcgJGNvbHVtbik6IGludHxmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGN1cnNvciB0eXBlIHVzZWQgYnkgYSBzdGF0ZW1lbnQgcmVzb3VyY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItY3Vyc29yLXR5cGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCA8cD4KICogQSB2YWxpZCBzdGF0ZW1lbnQgcmVzb3VyY2UuCiAqIDwvcD4KICogQHJldHVybiBpbnQgZWl0aGVyIERCMl9GT1JXQVJEX09OTFkgaWYgdGhlIHN0YXRlbWVudAogKiByZXNvdXJjZSB1c2VzIGEgZm9yd2FyZC1vbmx5IGN1cnNvciBvciBEQjJfU0NST0xMQUJMRSBpZgogKiB0aGUgc3RhdGVtZW50IHJlc291cmNlIHVzZXMgYSBzY3JvbGxhYmxlIGN1cnNvci4KICovCmZ1bmN0aW9uIGRiMl9jdXJzb3JfdHlwZSgkc3RtdCk6IGludCB7fQoKLyoqCiAqIFJvbGxzIGJhY2sgYSB0cmFuc2FjdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1yb2xsYmFjay5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBBIHZhbGlkIGRhdGFiYXNlIGNvbm5lY3Rpb24gcmVzb3VyY2UgdmFyaWFibGUgYXMgcmV0dXJuZWQgZnJvbQogKiBkYjJfY29ubmVjdCBvciBkYjJfcGNvbm5lY3QuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZGIyX3JvbGxiYWNrKCRjb25uZWN0aW9uKTogYm9vbCB7fQoKLyoqCiAqIEZyZWVzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGljYXRlZCBzdGF0ZW1lbnQgcmVzb3VyY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItZnJlZS1zdG10LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgPHA+CiAqIEEgdmFsaWQgc3RhdGVtZW50IHJlc291cmNlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGRiMl9mcmVlX3N0bXQoJHN0bXQpOiBib29sIHt9CgovKioKICogUmV0dXJucyBhIHNpbmdsZSBjb2x1bW4gZnJvbSBhIHJvdyBpbiB0aGUgcmVzdWx0IHNldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1yZXN1bHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCA8cD4KICogQSB2YWxpZCBzdG10IHJlc291cmNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnR8c3RyaW5nICRjb2x1bW4gPHA+CiAqIEVpdGhlciBhbiBpbnRlZ2VyIG1hcHBpbmcgdG8gdGhlIDAtaW5kZXhlZCBmaWVsZCBpbiB0aGUgcmVzdWx0IHNldCwgb3IKICogYSBzdHJpbmcgbWF0Y2hpbmcgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbi4KICogPC9wPgogKiBAcmV0dXJuIG1peGVkIHRoZSB2YWx1ZSBvZiB0aGUgcmVxdWVzdGVkIGZpZWxkIGlmIHRoZSBmaWVsZCBleGlzdHMgaW4gdGhlIHJlc3VsdAogKiBzZXQuIFJldHVybnMgTlVMTCBpZiB0aGUgZmllbGQgZG9lcyBub3QgZXhpc3QsIGFuZCBpc3N1ZXMgYSB3YXJuaW5nLgogKi8KZnVuY3Rpb24gZGIyX3Jlc3VsdCgkc3RtdCwgaW50fHN0cmluZyAkY29sdW1uKTogbWl4ZWQge30KCi8qKgogKiBTZXRzIHRoZSByZXN1bHQgc2V0IHBvaW50ZXIgdG8gdGhlIG5leHQgcm93IG9yIHJlcXVlc3RlZCByb3cKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItZmV0Y2gtcm93LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgPHA+CiAqIEEgdmFsaWQgc3RtdCByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRyb3dfbnVtYmVyIDxwPgogKiBXaXRoIHNjcm9sbGFibGUgY3Vyc29ycywgeW91IGNhbiByZXF1ZXN0IGEgc3BlY2lmaWMgcm93IG51bWJlciBpbiB0aGUKICogcmVzdWx0IHNldC4gUm93IG51bWJlcmluZyBpcyAxLWluZGV4ZWQuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIHJlcXVlc3RlZCByb3cgZXhpc3RzIGluIHRoZSByZXN1bHQgc2V0LiBSZXR1cm5zCiAqIGZhbHNlIGlmIHRoZSByZXF1ZXN0ZWQgcm93IGRvZXMgbm90IGV4aXN0IGluIHRoZSByZXN1bHQgc2V0LgogKi8KZnVuY3Rpb24gZGIyX2ZldGNoX3Jvdygkc3RtdCwgaW50ICRyb3dfbnVtYmVyID0gbnVsbCkge30KCi8qKgogKiBSZXR1cm5zIGFuIGFycmF5LCBpbmRleGVkIGJ5IGNvbHVtbiBuYW1lLCByZXByZXNlbnRpbmcgYSByb3cgaW4gYSByZXN1bHQgc2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLWZldGNoLWFzc29jLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgPHA+CiAqIEEgdmFsaWQgc3RtdCByZXNvdXJjZSBjb250YWluaW5nIGEgcmVzdWx0IHNldC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRyb3dfbnVtYmVyIDxwPgogKiBSZXF1ZXN0cyBhIHNwZWNpZmljIDEtaW5kZXhlZCByb3cgZnJvbSB0aGUgcmVzdWx0IHNldC4gUGFzc2luZyB0aGlzCiAqIHBhcmFtZXRlciByZXN1bHRzIGluIGEgUEhQIHdhcm5pbmcgaWYgdGhlIHJlc3VsdCBzZXQgdXNlcyBhCiAqIGZvcndhcmQtb25seSBjdXJzb3IuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIGNvbHVtbiB2YWx1ZXMgaW5kZXhlZCBieSB0aGUgY29sdW1uIG5hbWUKICogcmVwcmVzZW50aW5nIHRoZSBuZXh0IG9yIHJlcXVlc3RlZCByb3cgaW4gdGhlIHJlc3VsdCBzZXQuIFJldHVybnMgZmFsc2UgaWYKICogdGhlcmUgYXJlIG5vIHJvd3MgbGVmdCBpbiB0aGUgcmVzdWx0IHNldCwgb3IgaWYgdGhlIHJvdyByZXF1ZXN0ZWQgYnkKICogcm93X251bWJlciBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcmVzdWx0IHNldC4KICovCmZ1bmN0aW9uIGRiMl9mZXRjaF9hc3NvYygkc3RtdCwgaW50ICRyb3dfbnVtYmVyID0gbnVsbCk6IGFycmF5fGZhbHNlIHt9CgovKioKICogUmV0dXJucyBhbiBhcnJheSwgaW5kZXhlZCBieSBjb2x1bW4gcG9zaXRpb24sIHJlcHJlc2VudGluZyBhIHJvdyBpbiBhIHJlc3VsdCBzZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItZmV0Y2gtYXJyYXkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCA8cD4KICogQSB2YWxpZCBzdG10IHJlc291cmNlIGNvbnRhaW5pbmcgYSByZXN1bHQgc2V0LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHJvd19udW1iZXIgPHA+CiAqIFJlcXVlc3RzIGEgc3BlY2lmaWMgMS1pbmRleGVkIHJvdyBmcm9tIHRoZSByZXN1bHQgc2V0LiBQYXNzaW5nIHRoaXMKICogcGFyYW1ldGVyIHJlc3VsdHMgaW4gYSBQSFAgd2FybmluZyBpZiB0aGUgcmVzdWx0IHNldCB1c2VzIGEKICogZm9yd2FyZC1vbmx5IGN1cnNvci4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIEEgMC1pbmRleGVkIGFycmF5IHdpdGggY29sdW1uIHZhbHVlcyBpbmRleGVkIGJ5IHRoZSBjb2x1bW4gcG9zaXRpb24KICogcmVwcmVzZW50aW5nIHRoZSBuZXh0IG9yIHJlcXVlc3RlZCByb3cgaW4gdGhlIHJlc3VsdCBzZXQuIFJldHVybnMgZmFsc2UgaWYKICogdGhlcmUgYXJlIG5vIHJvd3MgbGVmdCBpbiB0aGUgcmVzdWx0IHNldCwgb3IgaWYgdGhlIHJvdyByZXF1ZXN0ZWQgYnkKICogcm93X251bWJlciBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcmVzdWx0IHNldC4KICovCmZ1bmN0aW9uIGRiMl9mZXRjaF9hcnJheSgkc3RtdCwgaW50ICRyb3dfbnVtYmVyID0gbnVsbCk6IGFycmF5fGZhbHNlIHt9CgovKioKICogUmV0dXJucyBhbiBhcnJheSwgaW5kZXhlZCBieSBib3RoIGNvbHVtbiBuYW1lIGFuZCBwb3NpdGlvbiwgcmVwcmVzZW50aW5nIGEgcm93IGluIGEgcmVzdWx0IHNldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1mZXRjaC1ib3RoLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0bXQgPHA+CiAqIEEgdmFsaWQgc3RtdCByZXNvdXJjZSBjb250YWluaW5nIGEgcmVzdWx0IHNldC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRyb3dfbnVtYmVyIDxwPgogKiBSZXF1ZXN0cyBhIHNwZWNpZmljIDEtaW5kZXhlZCByb3cgZnJvbSB0aGUgcmVzdWx0IHNldC4gUGFzc2luZyB0aGlzCiAqIHBhcmFtZXRlciByZXN1bHRzIGluIGEgUEhQIHdhcm5pbmcgaWYgdGhlIHJlc3VsdCBzZXQgdXNlcyBhCiAqIGZvcndhcmQtb25seSBjdXJzb3IuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIGNvbHVtbiB2YWx1ZXMgaW5kZXhlZCBieSBib3RoIHRoZSBjb2x1bW4KICogbmFtZSBhbmQgMC1pbmRleGVkIGNvbHVtbiBudW1iZXIuIFRoZSBhcnJheSByZXByZXNlbnRzIHRoZSBuZXh0IG9yCiAqIHJlcXVlc3RlZCByb3cgaW4gdGhlIHJlc3VsdCBzZXQuIFJldHVybnMgZmFsc2UgaWYgdGhlcmUgYXJlIG5vIHJvd3MgbGVmdAogKiBpbiB0aGUgcmVzdWx0IHNldCwgb3IgaWYgdGhlIHJvdyByZXF1ZXN0ZWQgYnkKICogcm93X251bWJlciBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcmVzdWx0IHNldC4KICovCmZ1bmN0aW9uIGRiMl9mZXRjaF9ib3RoKCRzdG10LCBpbnQgJHJvd19udW1iZXIgPSBudWxsKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBGcmVlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzdWx0IHNldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1mcmVlLXJlc3VsdC5waHAKICogQHBhcmFtIHJlc291cmNlICRzdG10IDxwPgogKiBBIHZhbGlkIHN0YXRlbWVudCByZXNvdXJjZS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBkYjJfZnJlZV9yZXN1bHQoJHN0bXQpOiBib29sIHt9CgovKioKICogU2V0IG9wdGlvbnMgZm9yIGNvbm5lY3Rpb24gb3Igc3RhdGVtZW50IHJlc291cmNlcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1zZXQtb3B0aW9uLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc291cmNlIDxwPgogKiBBIHZhbGlkIHN0YXRlbWVudCByZXNvdXJjZSBhcyByZXR1cm5lZCBmcm9tCiAqIGRiMl9wcmVwYXJlIG9yIGEgdmFsaWQgY29ubmVjdGlvbiByZXNvdXJjZSBhcwogKiByZXR1cm5lZCBmcm9tIGRiMl9jb25uZWN0IG9yCiAqIGRiMl9wY29ubmVjdC4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgPHA+CiAqIEFuIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcgdmFsaWQgc3RhdGVtZW50IG9yIGNvbm5lY3Rpb24KICogb3B0aW9ucy4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIGF1dG9jb21taXQgdmFsdWVzLAogKiBjdXJzb3IgdHlwZXMgKHNjcm9sbGFibGUgb3IgZm9yd2FyZCksIGFuZCB0byBzcGVjaWZ5IHRoZSBjYXNlIG9mCiAqIHRoZSBjb2x1bW4gbmFtZXMgKGxvd2VyLCB1cHBlciwgb3IgbmF0dXJhbCkgdGhhdCB3aWxsIGFwcGVhciBpbiBhCiAqIHJlc3VsdCBzZXQuCiAqIGF1dG9jb21taXQKICogPHA+CiAqIFBhc3NpbmcgREIyX0FVVE9DT01NSVRfT04gdHVybnMKICogYXV0b2NvbW1pdCBvbiBmb3IgdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHJlc291cmNlLgogKiA8L3A+CiAqIDxwPgogKiBQYXNzaW5nIERCMl9BVVRPQ09NTUlUX09GRiB0dXJucwogKiBhdXRvY29tbWl0IG9mZiBmb3IgdGhlIHNwZWNpZmllZCBjb25uZWN0aW9uIHJlc291cmNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHR5cGUgPHA+CiAqIEFuIGludGVnZXIgdmFsdWUgdGhhdCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgcmVzb3VyY2UgdGhhdCB3YXMKICogcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLiBUaGUgdHlwZSBvZiByZXNvdXJjZSBhbmQgdGhpcyB2YWx1ZQogKiBtdXN0IGNvcnJlc3BvbmQuCiAqIDxwPgogKiBQYXNzaW5nIDEgYXMgdGhlIHZhbHVlIHNwZWNpZmllcyB0aGF0CiAqIGEgY29ubmVjdGlvbiByZXNvdXJjZSBoYXMgYmVlbiBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb24uCiAqIDwvcD4KICogPHA+CiAqIFBhc3NpbmcgYW55IGludGVnZXIgbm90IGVxdWFsIHRvIDEgYXMKICogdGhlIHZhbHVlIHNwZWNpZmllcyB0aGF0IGEgc3RhdGVtZW50IHJlc291cmNlIGhhcyBiZWVuCiAqIHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbi4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBkYjJfc2V0X29wdGlvbigkcmVzb3VyY2UsIGFycmF5ICRvcHRpb25zLCBpbnQgJHR5cGUpOiBib29sIHt9CgpmdW5jdGlvbiBkYjJfc2V0b3B0aW9uKCk6IGJvb2wge30KCi8qKgogKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgcmVwcmVzZW50aW5nIGNvbHVtbnMgaW4gdGhlIGZldGNoZWQgcm93CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLWZldGNoLW9iamVjdC5waHAKICogQHBhcmFtIHJlc291cmNlICRzdG10IDxwPgogKiBBIHZhbGlkIHN0bXQgcmVzb3VyY2UgY29udGFpbmluZyBhIHJlc3VsdCBzZXQuCiAqIDwvcD4KICogQHBhcmFtIGludCAkcm93X251bWJlciA8cD4KICogUmVxdWVzdHMgYSBzcGVjaWZpYyAxLWluZGV4ZWQgcm93IGZyb20gdGhlIHJlc3VsdCBzZXQuIFBhc3NpbmcgdGhpcwogKiBwYXJhbWV0ZXIgcmVzdWx0cyBpbiBhIFBIUCB3YXJuaW5nIGlmIHRoZSByZXN1bHQgc2V0IHVzZXMgYQogKiBmb3J3YXJkLW9ubHkgY3Vyc29yLgogKiA8L3A+CiAqIEByZXR1cm4gc3RkQ2xhc3N8ZmFsc2UgQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSByb3cgaW4gdGhlIHJlc3VsdCBzZXQuIFRoZQogKiBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgbWFwIHRvIHRoZSBuYW1lcyBvZiB0aGUgY29sdW1ucyBpbiB0aGUgcmVzdWx0IHNldC4KICogPC9wPgogKiA8cD4KICogVGhlIElCTSBEQjIsIENsb3Vkc2NhcGUsIGFuZCBBcGFjaGUgRGVyYnkgZGF0YWJhc2Ugc2VydmVycyB0eXBpY2FsbHkgZm9sZAogKiBjb2x1bW4gbmFtZXMgdG8gdXBwZXItY2FzZSwgc28gdGhlIG9iamVjdCBwcm9wZXJ0aWVzIHdpbGwgcmVmbGVjdCB0aGF0IGNhc2UuCiAqIDwvcD4KICogPHA+CiAqIElmIHlvdXIgU0VMRUNUIHN0YXRlbWVudCBjYWxscyBhIHNjYWxhciBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHZhbHVlCiAqIG9mIGEgY29sdW1uLCB0aGUgZGF0YWJhc2Ugc2VydmVycyByZXR1cm4gdGhlIGNvbHVtbiBudW1iZXIgYXMgdGhlIG5hbWUgb2YKICogdGhlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IHNldC4gSWYgeW91IHByZWZlciBhIG1vcmUgZGVzY3JpcHRpdmUgY29sdW1uIG5hbWUKICogYW5kIG9iamVjdCBwcm9wZXJ0eSwgeW91IGNhbiB1c2UgdGhlIEFTIGNsYXVzZSB0byBhc3NpZ24gYSBuYW1lIHRvIHRoZQogKiBjb2x1bW4gaW4gdGhlIHJlc3VsdCBzZXQuCiAqIDwvcD4KICogPHA+CiAqIFJldHVybnMgZmFsc2UgaWYgbm8gcm93IHdhcyByZXRyaWV2ZWQuCiAqLwpmdW5jdGlvbiBkYjJfZmV0Y2hfb2JqZWN0KCRzdG10LCBpbnQgJHJvd19udW1iZXIgPSBudWxsKTogc3RkQ2xhc3N8ZmFsc2Uge30KCi8qKgogKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSB0aGUgREIyIGRhdGFiYXNlIHNlcnZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1zZXJ2ZXItaW5mby5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBTcGVjaWZpZXMgYW4gYWN0aXZlIERCMiBjbGllbnQgY29ubmVjdGlvbi4KICogPC9wPgogKiBAcmV0dXJuIHN0ZENsYXNzfGZhbHNlIEFuIG9iamVjdCBvbiBhIHN1Y2Nlc3NmdWwgY2FsbC4gUmV0dXJucyBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZGIyX3NlcnZlcl9pbmZvKCRjb25uZWN0aW9uKTogc3RkQ2xhc3N8ZmFsc2Uge30KCi8qKgogKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSB0aGUgREIyIGRhdGFiYXNlIGNsaWVudAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRiMi1jbGllbnQtaW5mby5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBTcGVjaWZpZXMgYW4gYWN0aXZlIERCMiBjbGllbnQgY29ubmVjdGlvbi4KICogPC9wPgogKiBAcmV0dXJuIHN0ZENsYXNzfGZhbHNlIEFuIG9iamVjdCBvbiBhIHN1Y2Nlc3NmdWwgY2FsbC4gUmV0dXJucyBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZGIyX2NsaWVudF9pbmZvKCRjb25uZWN0aW9uKTogc3RkQ2xhc3N8ZmFsc2Uge30KCi8qKgogKiBVc2VkIHRvIGVzY2FwZSBjZXJ0YWluIGNoYXJhY3RlcnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItZXNjYXBlLXN0cmluZy5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nX2xpdGVyYWwgPHA+CiAqIFRoZSBzdHJpbmcgdGhhdCBjb250YWlucyBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJlIG1vZGlmaWVkLgogKiBDaGFyYWN0ZXJzIHRoYXQgYXJlIHByZXBlbmRlZCB3aXRoIGEgYmFja3NsYXNoIGFyZSBceDAwLAogKiBcbiwgXHIsIFwsCiAqICcsICIgYW5kIFx4MWEuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgc3RyaW5nX2xpdGVyYWwgd2l0aCB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzCiAqIG5vdGVkIGFib3ZlIHByZXBlbmRlZCB3aXRoIGJhY2tzbGFzaGVzLgogKi8KZnVuY3Rpb24gZGIyX2VzY2FwZV9zdHJpbmcoc3RyaW5nICRzdHJpbmdfbGl0ZXJhbCk6IHN0cmluZyB7fQoKLyoqCiAqIEdldHMgYSB1c2VyIGRlZmluZWQgc2l6ZSBvZiBMT0IgZmlsZXMgd2l0aCBlYWNoIGludm9jYXRpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItbG9iLXJlYWQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RtdCA8cD4KICogQSB2YWxpZCBzdG10IHJlc291cmNlIGNvbnRhaW5pbmcgTE9CIGRhdGEuCiAqIDwvcD4KICogQHBhcmFtIGludCAkY29sbnVtIDxwPgogKiBBIHZhbGlkIGNvbHVtbiBudW1iZXIgaW4gdGhlIHJlc3VsdCBzZXQgb2YgdGhlIHN0bXQgcmVzb3VyY2UuCiAqIDwvcD4KICogQHBhcmFtIGludCAkbGVuZ3RoIDxwPgogKiBUaGUgc2l6ZSBvZiB0aGUgTE9CIGRhdGEgdG8gYmUgcmV0cmlldmVkIGZyb20gdGhlIHN0bXQgcmVzb3VyY2UuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGFtb3VudCBvZiBkYXRhIHRoZSB1c2VyIHNwZWNpZmllcy4gUmV0dXJucwogKiBmYWxzZSBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgcmV0cmlldmVkLgogKi8KZnVuY3Rpb24gZGIyX2xvYl9yZWFkKCRzdG10LCBpbnQgJGNvbG51bSwgaW50ICRsZW5ndGgpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBSZXRyaWV2ZXMgYW4gb3B0aW9uIHZhbHVlIGZvciBhIHN0YXRlbWVudCByZXNvdXJjZSBvciBhIGNvbm5lY3Rpb24gcmVzb3VyY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYjItZ2V0LW9wdGlvbi5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXNvdXJjZSA8cD4KICogQSB2YWxpZCBzdGF0ZW1lbnQgcmVzb3VyY2UgYXMgcmV0dXJuZWQgZnJvbQogKiBkYjJfcHJlcGFyZSBvciBhIHZhbGlkIGNvbm5lY3Rpb24gcmVzb3VyY2UgYXMKICogcmV0dXJuZWQgZnJvbSBkYjJfY29ubmVjdCBvcgogKiBkYjJfcGNvbm5lY3QuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkb3B0aW9uIDxwPgogKiBBIHZhbGlkIHN0YXRlbWVudCBvciBjb25uZWN0aW9uIG9wdGlvbnMuIFRoZSBmb2xsb3dpbmcgbmV3IG9wdGlvbnMgYXJlIGF2YWlsYWJsZQogKiBhcyBvZiBpYm1fZGIyIHZlcnNpb24gMS42LjAuIFRoZXkgcHJvdmlkZSB1c2VmdWwgdHJhY2tpbmcgaW5mb3JtYXRpb24KICogdGhhdCBjYW4gYmUgc2V0IGR1cmluZyBleGVjdXRpb24gd2l0aCBkYjJfZ2V0X29wdGlvbi4KICogPC9wPgogKiA8cD4KICogTm90ZTogUHJpb3IgdmVyc2lvbnMgb2YgaWJtX2RiMiBkbyBub3Qgc3VwcG9ydCB0aGVzZSBuZXcgb3B0aW9ucy4KICogPC9wPgogKiA8cD4KICogV2hlbiB0aGUgdmFsdWUgaW4gZWFjaCBvcHRpb24gaXMgYmVpbmcgc2V0LCBzb21lIHNlcnZlcnMgbWlnaHQgbm90IGhhbmRsZQogKiB0aGUgZW50aXJlIGxlbmd0aCBwcm92aWRlZCBhbmQgbWlnaHQgdHJ1bmNhdGUgdGhlIHZhbHVlLgogKiA8L3A+CiAqIDxwPgogKiBUbyBlbnN1cmUgdGhhdCB0aGUgZGF0YSBzcGVjaWZpZWQgaW4gZWFjaCBvcHRpb24gaXMgY29udmVydGVkIGNvcnJlY3RseQogKiB3aGVuIHRyYW5zbWl0dGVkIHRvIGEgaG9zdCBzeXN0ZW0sIHVzZSBvbmx5IHRoZSBjaGFyYWN0ZXJzIEEgdGhyb3VnaCBaLAogKiAwIHRocm91Z2ggOSwgYW5kIHRoZSB1bmRlcnNjb3JlIChfKSBvciBwZXJpb2QgKC4pLgogKiA8L3A+CiAqIDxwPgogKiBTUUxfQVRUUl9JTkZPX1VTRVJJRCAtIEEgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZAogKiBjaGFyYWN0ZXIgc3RyaW5nIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNsaWVudCB1c2VyIElEIHNlbnQgdG8gdGhlIGhvc3QKICogZGF0YWJhc2Ugc2VydmVyIHdoZW4gdXNpbmcgREIyIENvbm5lY3QuCiAqIDwvcD4KICogPHA+CiAqIE5vdGU6IERCMiBmb3Igei9PUyBhbmQgT1MvMzkwIHNlcnZlcnMgc3VwcG9ydCB1cCB0byBhIGxlbmd0aCBvZiAxNiBjaGFyYWN0ZXJzLgogKiBUaGlzIHVzZXItaWQgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIHVzZXItaWQsIGl0IGlzIGZvcgogKiBpZGVudGlmaWNhdGlvbiBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgdXNlZCBmb3IgYW55IGF1dGhvcml6YXRpb24uCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGN1cnJlbnQgc2V0dGluZyBvZiB0aGUgY29ubmVjdGlvbiBhdHRyaWJ1dGUgcHJvdmlkZWQgb24gc3VjY2VzcwogKiBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZGIyX2dldF9vcHRpb24oJHJlc291cmNlLCBzdHJpbmcgJG9wdGlvbik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGF1dG8gZ2VuZXJhdGVkIElEIG9mIHRoZSBsYXN0IGluc2VydCBxdWVyeSB0aGF0IHN1Y2Nlc3NmdWxseSBleGVjdXRlZCBvbiB0aGlzIGNvbm5lY3Rpb24uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGIyLWxhc3QtaW5zZXJ0LWlkLnBocAogKiBUaGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgbm90IGFmZmVjdGVkIGJ5IGFueSBvZiB0aGUgZm9sbG93aW5nOgogKiA8dWw+PGxpPkEgc2luZ2xlIHJvdyBJTlNFUlQgc3RhdGVtZW50IHdpdGggYSBWQUxVRVMgY2xhdXNlIGZvciBhIHRhYmxlIHdpdGhvdXQgYW4gaWRlbnRpdHkgY29sdW1uLgogKiA8bGk+QSBtdWx0aXBsZSByb3cgSU5TRVJUIHN0YXRlbWVudCB3aXRoIGEgVkFMVUVTIGNsYXVzZS4KICogPGxpPkFuIElOU0VSVCBzdGF0ZW1lbnQgd2l0aCBhIGZ1bGxzZWxlY3QuCiAqIDxsaT5BIFJPTExCQUNLIFRPIFNBVkVQT0lOVCBzdGF0ZW1lbnQuCiAqIDwvdWw+CiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzb3VyY2UgQSB2YWxpZCBjb25uZWN0aW9uIHJlc291cmNlIGFzIHJldHVybmVkIGZyb20gZGIyX2Nvbm5lY3QoKSBvciBkYjJfcGNvbm5lY3QoKS4KICogVGhlIHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGNhbm5vdCBiZSBhIHN0YXRlbWVudCByZXNvdXJjZSBvciByZXN1bHQgc2V0IHJlc291cmNlLgogKiBAcmV0dXJuIHN0cmluZ3xudWxsIFJldHVybnMgdGhlIGF1dG8gZ2VuZXJhdGVkIElEIG9mIGxhc3QgaW5zZXJ0IHF1ZXJ5IHRoYXQgc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkIG9uIHRoaXMgY29ubmVjdGlvbgogKiAgICAgICAgICAgICAgICAgICAgIG9yIE5VTEwgaWYgbm8gSUQgd2FzIGZvdW5kLgogKi8KZnVuY3Rpb24gZGIyX2xhc3RfaW5zZXJ0X2lkKCRyZXNvdXJjZSk6ID9zdHJpbmcge30KCi8qKgogKiBTcGVjaWZpZXMgdGhhdCBiaW5hcnkgZGF0YSBzaGFsbCBiZSByZXR1cm5lZCBhcyBpcy4gVGhpcyBpcyB0aGUgZGVmYXVsdAogKiBtb2RlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2libS1kYjIuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdEQjJfQklOQVJZJywgMSk7CgovKioKICogU3BlY2lmaWVzIHRoYXQgYmluYXJ5IGRhdGEgc2hhbGwgYmUgY29udmVydGVkIHRvIGEgaGV4YWRlY2ltYWwgZW5jb2RpbmcKICogYW5kIHJldHVybmVkIGFzIGFuIEFTQ0lJIHN0cmluZy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pYm0tZGIyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnREIyX0NPTlZFUlQnLCAyKTsKCi8qKgogKiBTcGVjaWZpZXMgdGhhdCBiaW5hcnkgZGF0YSBzaGFsbCBiZSBjb252ZXJ0ZWQgdG8gYSBudWxsIHZhbHVlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2libS1kYjIuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdEQjJfUEFTU1RIUlUnLCAzKTsKCi8qKgogKiBTcGVjaWZpZXMgYSBzY3JvbGxhYmxlIGN1cnNvciBmb3IgYSBzdGF0ZW1lbnQgcmVzb3VyY2UuIFRoaXMgbW9kZSBlbmFibGVzCiAqIHJhbmRvbSBhY2Nlc3MgdG8gcm93cyBpbiBhIHJlc3VsdCBzZXQsIGJ1dCBjdXJyZW50bHkgaXMgc3VwcG9ydGVkIG9ubHkgYnkKICogSUJNIERCMiBVbml2ZXJzYWwgRGF0YWJhc2UuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaWJtLWRiMi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0RCMl9TQ1JPTExBQkxFJywgMSk7CgovKioKICogU3BlY2lmaWVzIGEgZm9yd2FyZC1vbmx5IGN1cnNvciBmb3IgYSBzdGF0ZW1lbnQgcmVzb3VyY2UuIFRoaXMgaXMgdGhlCiAqIGRlZmF1bHQgY3Vyc29yIHR5cGUgYW5kIGlzIHN1cHBvcnRlZCBvbiBhbGwgZGF0YWJhc2Ugc2VydmVycy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pYm0tZGIyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnREIyX0ZPUldBUkRfT05MWScsIDApOwoKLyoqCiAqIFNwZWNpZmllcyB0aGUgUEhQIHZhcmlhYmxlIHNob3VsZCBiZSBib3VuZCBhcyBhbiBJTiBwYXJhbWV0ZXIgZm9yIGEKICogc3RvcmVkIHByb2NlZHVyZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pYm0tZGIyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnREIyX1BBUkFNX0lOJywgMSk7CgovKioKICogU3BlY2lmaWVzIHRoZSBQSFAgdmFyaWFibGUgc2hvdWxkIGJlIGJvdW5kIGFzIGFuIE9VVCBwYXJhbWV0ZXIgZm9yIGEKICogc3RvcmVkIHByb2NlZHVyZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pYm0tZGIyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnREIyX1BBUkFNX09VVCcsIDQpOwoKLyoqCiAqIFNwZWNpZmllcyB0aGUgUEhQIHZhcmlhYmxlIHNob3VsZCBiZSBib3VuZCBhcyBhbiBJTk9VVCBwYXJhbWV0ZXIgZm9yIGEKICogc3RvcmVkIHByb2NlZHVyZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pYm0tZGIyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnREIyX1BBUkFNX0lOT1VUJywgMik7CgovKioKICogU3BlY2lmaWVzIHRoYXQgdGhlIGNvbHVtbiBzaG91bGQgYmUgYm91bmQgZGlyZWN0bHkgdG8gYSBmaWxlIGZvciBpbnB1dC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pYm0tZGIyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnREIyX1BBUkFNX0ZJTEUnLCAxMSk7CgovKioKICogU3BlY2lmaWVzIHRoYXQgYXV0b2NvbW1pdCBzaG91bGQgYmUgdHVybmVkIG9uLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2libS1kYjIuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdEQjJfQVVUT0NPTU1JVF9PTicsIDEpOwoKLyoqCiAqIFNwZWNpZmllcyB0aGF0IGF1dG9jb21taXQgc2hvdWxkIGJlIHR1cm5lZCBvZmYuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaWJtLWRiMi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0RCMl9BVVRPQ09NTUlUX09GRicsIDApOwoKLyoqCiAqIFNwZWNpZmllcyB0aGF0IGRlZmVycmVkIHByZXBhcmUgc2hvdWxkIGJlIHR1cm5lZCBvbiBmb3IgdGhlIHNwZWNpZmllZCBzdGF0ZW1lbnQgcmVzb3VyY2UuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaWJtLWRiMi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0RCMl9ERUZFUlJFRF9QUkVQQVJFX09OJywgMSk7CgovKioKICogU3BlY2lmaWVzIHRoYXQgZGVmZXJyZWQgcHJlcGFyZSBzaG91bGQgYmUgdHVybmVkIG9mZiBmb3IgdGhlIHNwZWNpZmllZCBzdGF0ZW1lbnQgcmVzb3VyY2UuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaWJtLWRiMi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0RCMl9ERUZFUlJFRF9QUkVQQVJFX09GRicsIDApOwoKLyoqCiAqIFNwZWNpZmllcyB0aGF0IHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgYm91bmQgYXMgYSBET1VCTEUsIEZMT0FULCBvciBSRUFMCiAqIGRhdGEgdHlwZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pYm0tZGIyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnREIyX0RPVUJMRScsIDgpOwoKLyoqCiAqIFNwZWNpZmllcyB0aGF0IHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgYm91bmQgYXMgYSBTTUFMTElOVCwgSU5URUdFUiwgb3IKICogQklHSU5UIGRhdGEgdHlwZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pYm0tZGIyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnREIyX0xPTkcnLCA0KTsKCi8qKgogKiBTcGVjaWZpZXMgdGhhdCB0aGUgdmFyaWFibGUgc2hvdWxkIGJlIGJvdW5kIGFzIGEgQ0hBUiBvciBWQVJDSEFSIGRhdGEgdHlwZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pYm0tZGIyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnREIyX0NIQVInLCAxKTsKZGVmaW5lKCdEQjJfWE1MJywgLTM3MCk7CgovKioKICogU3BlY2lmaWVzIHRoYXQgY29sdW1uIG5hbWVzIHdpbGwgYmUgcmV0dXJuZWQgaW4gdGhlaXIgbmF0dXJhbCBjYXNlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2libS1kYjIuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdEQjJfQ0FTRV9OQVRVUkFMJywgMCk7CgovKioKICogU3BlY2lmaWVzIHRoYXQgY29sdW1uIG5hbWVzIHdpbGwgYmUgcmV0dXJuZWQgaW4gbG93ZXIgY2FzZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pYm0tZGIyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnREIyX0NBU0VfTE9XRVInLCAxKTsKCi8qKgogKiBTcGVjaWZpZXMgdGhhdCBjb2x1bW4gbmFtZXMgd2lsbCBiZSByZXR1cm5lZCBpbiB1cHBlciBjYXNlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2libS1kYjIuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdEQjJfQ0FTRV9VUFBFUicsIDIpOwoKLy8gRW5kIG9mIGlibV9kYjIgdi4xLjYuMAo8P3BocAoKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxQdXJlOwoKLyoqCiAqIFRlcm1pbmF0ZSBhcGFjaGUgcHJvY2VzcyBhZnRlciB0aGlzIHJlcXVlc3QKICogYXBhY2hlX2NoaWxkX3Rlcm1pbmF0ZSgpIHdpbGwgcmVnaXN0ZXIgdGhlIEFwYWNoZSBwcm9jZXNzIGV4ZWN1dGluZyB0aGUgY3VycmVudCBQSFAgcmVxdWVzdCBmb3IgdGVybWluYXRpb24gb25jZSBleGVjdXRpb24gb2YgUEhQIGNvZGUgaXMgY29tcGxldGVkLiBJdCBtYXkgYmUgdXNlZCB0byB0ZXJtaW5hdGUgYSBwcm9jZXNzIGFmdGVyIGEgc2NyaXB0IHdpdGggaGlnaCBtZW1vcnkgY29uc3VtcHRpb24gaGFzIGJlZW4gcnVuIGFzIG1lbW9yeSB3aWxsIHVzdWFsbHkgb25seSBiZSBmcmVlZCBpbnRlcm5hbGx5IGJ1dCBub3QgZ2l2ZW4gYmFjayB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGFjaGUtY2hpbGQtdGVybWluYXRlLnBocAogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgUEhQIGlzIHJ1bm5pbmcgYXMgYW4gQXBhY2hlIDEgbW9kdWxlLCB0aGUgQXBhY2hlIHZlcnNpb24gaXMgbm9uLW11bHRpdGhyZWFkZWQsIGFuZCB0aGUgY2hpbGRfdGVybWluYXRlIFBIUCBkaXJlY3RpdmUgaXMgZW5hYmxlZCAoZGlzYWJsZWQgYnkgZGVmYXVsdCkuIElmIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQsIDxiPkZBTFNFPC9iPiBpcyByZXR1cm5lZCBhbmQgYW4gZXJyb3Igb2YgbGV2ZWwgPGI+RV9XQVJOSU5HPC9iPiBpcyBnZW5lcmF0ZWQuCiAqLwpmdW5jdGlvbiBhcGFjaGVfY2hpbGRfdGVybWluYXRlKCkge30KCi8qKgogKiBHZXQgYSBsaXN0IG9mIGxvYWRlZCBBcGFjaGUgbW9kdWxlcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmFwYWNoZS1nZXQtbW9kdWxlcy5waHAKICogQHJldHVybiBhcnJheSBvZiBsb2FkZWQgQXBhY2hlIG1vZHVsZXMuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGFwYWNoZV9nZXRfbW9kdWxlcygpIHt9CgovKioKICogRmV0Y2ggdGhlIEFwYWNoZSB2ZXJzaW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBhY2hlLWdldC12ZXJzaW9uLnBocAogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgQXBhY2hlIHZlcnNpb24gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCiNbUHVyZV0KZnVuY3Rpb24gYXBhY2hlX2dldF92ZXJzaW9uKCkge30KCi8qKgogKiBHZXQgYW4gQXBhY2hlIHN1YnByb2Nlc3NfZW52IHZhcmlhYmxlCiAqIFJldHJpZXZlIGFuIEFwYWNoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgJHZhcmlhYmxlLgogKiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIEFwYWNoZSAyIG90aGVyd2lzZSBpdCdzIHVuZGVmaW5lZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGFjaGUtZ2V0ZW52LnBocAogKiBAcGFyYW0gc3RyaW5nICR2YXJpYWJsZSA8cD4KICogVGhlIEFwYWNoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkd2Fsa190b190b3AgPHA+CiAqIFdoZXRoZXIgdG8gZ2V0IHRoZSB0b3AtbGV2ZWwgdmFyaWFibGUgYXZhaWxhYmxlIHRvIGFsbCBBcGFjaGUgbGF5ZXJzLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSB2YWx1ZSBvZiB0aGUgQXBhY2hlIGVudmlyb25tZW50IHZhcmlhYmxlIG9uIHN1Y2Nlc3MsIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBhcGFjaGVfZ2V0ZW52KCR2YXJpYWJsZSwgJHdhbGtfdG9fdG9wID0gZmFsc2UpIHt9CgovKioKICogUGVyZm9ybSBhIHBhcnRpYWwgcmVxdWVzdCBmb3IgdGhlIHNwZWNpZmllZCBVUkkgYW5kIHJldHVybiBhbGwgaW5mbyBhYm91dCBpdAogKiBUaGlzIHBlcmZvcm1zIGEgcGFydGlhbCByZXF1ZXN0IGZvciBhIFVSSS4gSXQgZ29lcyBqdXN0IGZhciBlbm91Z2ggdG8gb2J0YWluIGFsbCB0aGUgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBnaXZlbiByZXNvdXJjZS4KICogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgd2hlbiBQSFAgaXMgaW5zdGFsbGVkIGFzIGFuIEFwYWNoZSBtb2R1bGUgb3IgYnkgdGhlIE5TQVBJIHNlcnZlciBtb2R1bGUgaW4gTmV0c2NhcGUvaVBsYW5ldC9TdW5PTkUgd2Vic2VydmVycy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGFjaGUtbG9va3VwLXVyaS5waHAKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAqIFRoZSBmaWxlbmFtZSAoVVJJKSB0aGF0J3MgYmVpbmcgcmVxdWVzdGVkLgogKiA8L3A+CiAqIEByZXR1cm4gb2JqZWN0IG9mIHJlbGF0ZWQgVVJJIGluZm9ybWF0aW9uLgogKi8KZnVuY3Rpb24gYXBhY2hlX2xvb2t1cF91cmkoJGZpbGVuYW1lKSB7fQoKLyoqCiAqIEdldCBhbmQgc2V0IGFwYWNoZSByZXF1ZXN0IG5vdGVzCiAqIFRoaXMgZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGZvciBBcGFjaGUncyB0YWJsZV9nZXQgYW5kIHRhYmxlX3NldC4gSXQgZWRpdHMgdGhlIHRhYmxlIG9mIG5vdGVzIHRoYXQgZXhpc3RzIGR1cmluZyBhIHJlcXVlc3QuIFRoZSB0YWJsZSdzIHB1cnBvc2UgaXMgdG8gYWxsb3cgQXBhY2hlIG1vZHVsZXMgdG8gY29tbXVuaWNhdGUuCiAqIFRoZSBtYWluIHVzZSBmb3IgYXBhY2hlX25vdGUoKSBpcyB0byBwYXNzIGluZm9ybWF0aW9uIGZyb20gb25lIG1vZHVsZSB0byBhbm90aGVyIHdpdGhpbiB0aGUgc2FtZSByZXF1ZXN0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmFwYWNoZS1ub3RlLnBocAogKiBAcGFyYW0gc3RyaW5nICRub3RlX25hbWUgPHA+CiAqIFRoZSBuYW1lIG9mIHRoZSBub3RlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5vdGVfdmFsdWUgPHA+CiAqIFRoZSB2YWx1ZSBvZiB0aGUgbm90ZS4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBJZiBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGl0IHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2Ygbm90ZSBub3RlX25hbWUuIElmIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHMsIGl0IHNldHMgdGhlIHZhbHVlIG9mIG5vdGUgbm90ZV9uYW1lIHRvIG5vdGVfdmFsdWUgYW5kIHJldHVybnMgdGhlIHByZXZpb3VzIHZhbHVlIG9mIG5vdGUgbm90ZV9uYW1lLiBJZiB0aGUgbm90ZSBjYW5ub3QgYmUgcmV0cmlldmVkLCA8Yj5GQUxTRTwvYj4gaXMgcmV0dXJuZWQuCiAqLwpmdW5jdGlvbiBhcGFjaGVfbm90ZSgkbm90ZV9uYW1lLCAkbm90ZV92YWx1ZSA9ICcnKSB7fQoKLyoqCiAqIFJlc2V0IHRoZSBBcGFjaGUgd3JpdGUgdGltZXIKICogYXBhY2hlX3Jlc2V0X3RpbWVvdXQoKSByZXNldHMgdGhlIEFwYWNoZSB3cml0ZSB0aW1lciwgd2hpY2ggZGVmYXVsdHMgdG8gMzAwIHNlY29uZHMuIFdpdGggc2V0X3RpbWVfbGltaXQoMCk7IGlnbm9yZV91c2VyX2Fib3J0KHRydWUpIGFuZCBwZXJpb2RpYyBhcGFjaGVfcmVzZXRfdGltZW91dCgpIGNhbGxzLCBBcGFjaGUgY2FuIHRoZW9yZXRpY2FsbHkgcnVuIGZvcmV2ZXIuCiAqIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgQXBhY2hlIDEuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBhY2hlLXJlc2V0LXRpbWVvdXQucGhwCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gYXBhY2hlX3Jlc2V0X3RpbWVvdXQoKSB7fQoKLyoqCiAqIEZldGNoIGFsbCBIVFRQIHJlc3BvbnNlIGhlYWRlcnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGFjaGUtcmVzcG9uc2UtaGVhZGVycy5waHAKICogQHJldHVybiBhcnJheXxmYWxzZSBBbiBhcnJheSBvZiBhbGwgQXBhY2hlIHJlc3BvbnNlIGhlYWRlcnMgb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGFwYWNoZV9yZXNwb25zZV9oZWFkZXJzKCkge30KCi8qKgogKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgQXBhY2hlIGVudmlyb25tZW50IHZhcmlhYmxlIHNwZWNpZmllZCBieSB2YXJpYWJsZS4KICogTm90ZTogV2hlbiBzZXR0aW5nIGFuIEFwYWNoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIGNvcnJlc3BvbmRpbmcgJF9TRVJWRVIgdmFyaWFibGUgaXMgbm90IGNoYW5nZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBhY2hlLXNldGVudi5waHAKICogQHBhcmFtIHN0cmluZyAkdmFyaWFibGUgPHA+CiAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0J3MgYmVpbmcgc2V0LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIDxwPgogKiBUaGUgbmV3IHZhcmlhYmxlIHZhbHVlLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICR3YWxrX3RvX3RvcCA8cD4KICogV2hldGhlciB0byBzZXQgdGhlIHRvcC1sZXZlbCB2YXJpYWJsZSBhdmFpbGFibGUgdG8gYWxsIEFwYWNoZSBsYXllcnMuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBhcGFjaGVfc2V0ZW52KCR2YXJpYWJsZSwgJHZhbHVlLCAkd2Fsa190b190b3AgPSBmYWxzZSkge30KCi8qKgogKiBQZXJmb3JtIGFuIEFwYWNoZSBzdWItcmVxdWVzdAogKiB2aXJ0dWFsKCkgaXMgYW4gQXBhY2hlLXNwZWNpZmljIGZ1bmN0aW9uIHdoaWNoIGlzIHNpbWlsYXIgdG8gPCEtLSNpbmNsdWRlIHZpcnR1YWwuLi4tLT4gaW4gbW9kX2luY2x1ZGUuIEl0IHBlcmZvcm1zIGFuIEFwYWNoZSBzdWItcmVxdWVzdC4gSXQgaXMgdXNlZnVsIGZvciBpbmNsdWRpbmcgQ0dJIHNjcmlwdHMgb3IgLnNodG1sIGZpbGVzLCBvciBhbnl0aGluZyBlbHNlIHRoYXQgeW91IHdvdWxkIHBhcnNlIHRocm91Z2ggQXBhY2hlLiBOb3RlIHRoYXQgZm9yIGEgQ0dJIHNjcmlwdCwgdGhlIHNjcmlwdCBtdXN0IGdlbmVyYXRlIHZhbGlkIENHSSBoZWFkZXJzLiBBdCB0aGUgbWluaW11bSB0aGF0IG1lYW5zIGl0IG11c3QgZ2VuZXJhdGUgYSBDb250ZW50LVR5cGUgaGVhZGVyLgogKiBUbyBydW4gdGhlIHN1Yi1yZXF1ZXN0LCBhbGwgYnVmZmVycyBhcmUgdGVybWluYXRlZCBhbmQgZmx1c2hlZCB0byB0aGUgYnJvd3NlciwgcGVuZGluZyBoZWFkZXJzIGFyZSBzZW50IHRvby4KICogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgd2hlbiBQSFAgaXMgaW5zdGFsbGVkIGFzIGFuIEFwYWNoZSBtb2R1bGUgb3IgYnkgdGhlIE5TQVBJIHNlcnZlciBtb2R1bGUgaW4gTmV0c2NhcGUvaVBsYW5ldC9TdW5PTkUgd2Vic2VydmVycy4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmlydHVhbC5waHAKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAqIFRoZSBmaWxlIHRoYXQgdGhlIHZpcnR1YWwgY29tbWFuZCB3aWxsIGJlIHBlcmZvcm1lZCBvbi4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgUGVyZm9ybXMgdGhlIHZpcnR1YWwgY29tbWFuZCBvbiBzdWNjZXNzLCBvciByZXR1cm5zIEZBTFNFIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB2aXJ0dWFsKCRmaWxlbmFtZSkge30KPD9waHAKCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxUZW50YXRpdmVUeXBlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXFB1cmU7CgovKioKICogPHA+SW50bENoYXIgcHJvdmlkZXMgYWNjZXNzIHRvIGEgbnVtYmVyIG9mIHV0aWxpdHkgbWV0aG9kcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyBpbmZvcm1hdGlvbiBhYm91dCBVbmljb2RlIGNoYXJhY3RlcnMuPC9wPgogKiA8cD5UaGUgbWV0aG9kcyBhbmQgY29uc3RhbnRzIGFkaGVyZSBjbG9zZWx5IHRvIHRoZSBuYW1lcyBhbmQgYmVoYXZpb3IgdXNlZCBieSB0aGUgdW5kZXJseWluZyBJQ1UgbGlicmFyeS48L3A+CiAqIEBzaW5jZSA3LjAKICovCmNsYXNzIEludGxDaGFyCnsKICAgIHB1YmxpYyBjb25zdCBVTklDT0RFX1ZFUlNJT04gPSAxMy4wOwogICAgcHVibGljIGNvbnN0IENPREVQT0lOVF9NSU4gPSAwOwogICAgcHVibGljIGNvbnN0IENPREVQT0lOVF9NQVggPSAxMTE0MTExOwogICAgcHVibGljIGNvbnN0IEZPTERfQ0FTRV9ERUZBVUxUID0gMDsKICAgIHB1YmxpYyBjb25zdCBGT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kgPSAxOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0FMUEhBQkVUSUMgPSAwOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0JJTkFSWV9TVEFSVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfQVNDSUlfSEVYX0RJR0lUID0gMTsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9CSURJX0NPTlRST0wgPSAyOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0JJRElfTUlSUk9SRUQgPSAzOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0RBU0ggPSA0OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0RFRkFVTFRfSUdOT1JBQkxFX0NPREVfUE9JTlQgPSA1OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0RFUFJFQ0FURUQgPSA2OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0RJQUNSSVRJQyA9IDc7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfRVhURU5ERVIgPSA4OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0ZVTExfQ09NUE9TSVRJT05fRVhDTFVTSU9OID0gOTsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9HUkFQSEVNRV9CQVNFID0gMTA7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfR1JBUEhFTUVfRVhURU5EID0gMTE7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfR1JBUEhFTUVfTElOSyA9IDEyOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0hFWF9ESUdJVCA9IDEzOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0hZUEhFTiA9IDE0OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0lEX0NPTlRJTlVFID0gMTU7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfSURfU1RBUlQgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9JREVPR1JBUEhJQyA9IDE3OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0lEU19CSU5BUllfT1BFUkFUT1IgPSAxODsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9JRFNfVFJJTkFSWV9PUEVSQVRPUiA9IDE5OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0pPSU5fQ09OVFJPTCA9IDIwOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0xPR0lDQUxfT1JERVJfRVhDRVBUSU9OID0gMjE7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfTE9XRVJDQVNFID0gMjI7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfTUFUSCA9IDIzOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX05PTkNIQVJBQ1RFUl9DT0RFX1BPSU5UID0gMjQ7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfUVVPVEFUSU9OX01BUksgPSAyNTsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9SQURJQ0FMID0gMjY7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfU09GVF9ET1RURUQgPSAyNzsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9URVJNSU5BTF9QVU5DVFVBVElPTiA9IDI4OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX1VOSUZJRURfSURFT0dSQVBIID0gMjk7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfVVBQRVJDQVNFID0gMzA7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfV0hJVEVfU1BBQ0UgPSAzMTsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9YSURfQ09OVElOVUUgPSAzMjsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9YSURfU1RBUlQgPSAzMzsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9DQVNFX1NFTlNJVElWRSA9IDM0OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX1NfVEVSTSA9IDM1OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX1ZBUklBVElPTl9TRUxFQ1RPUiA9IDM2OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX05GRF9JTkVSVCA9IDM3OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX05GS0RfSU5FUlQgPSAzODsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9ORkNfSU5FUlQgPSAzOTsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9ORktDX0lORVJUID0gNDA7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfU0VHTUVOVF9TVEFSVEVSID0gNDE7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfUEFUVEVSTl9TWU5UQVggPSA0MjsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9QQVRURVJOX1dISVRFX1NQQUNFID0gNDM7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfUE9TSVhfQUxOVU0gPSA0NDsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9QT1NJWF9CTEFOSyA9IDQ1OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX1BPU0lYX0dSQVBIID0gNDY7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfUE9TSVhfUFJJTlQgPSA0NzsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9QT1NJWF9YRElHSVQgPSA0ODsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9DQVNFRCA9IDQ5OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0NBU0VfSUdOT1JBQkxFID0gNTA7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfQ0hBTkdFU19XSEVOX0xPV0VSQ0FTRUQgPSA1MTsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9DSEFOR0VTX1dIRU5fVVBQRVJDQVNFRCA9IDUyOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0NIQU5HRVNfV0hFTl9USVRMRUNBU0VEID0gNTM7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfQ0hBTkdFU19XSEVOX0NBU0VGT0xERUQgPSA1NDsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9DSEFOR0VTX1dIRU5fQ0FTRU1BUFBFRCA9IDU1OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0NIQU5HRVNfV0hFTl9ORktDX0NBU0VGT0xERUQgPSA1NjsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9CSU5BUllfTElNSVQgPSA2NTsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9CSURJX0NMQVNTID0gNDA5NjsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9JTlRfU1RBUlQgPSA0MDk2OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0JMT0NLID0gNDA5NzsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9DQU5PTklDQUxfQ09NQklOSU5HX0NMQVNTID0gNDA5ODsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9ERUNPTVBPU0lUSU9OX1RZUEUgPSA0MDk5OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0VBU1RfQVNJQU5fV0lEVEggPSA0MTAwOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0dFTkVSQUxfQ0FURUdPUlkgPSA0MTAxOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0pPSU5JTkdfR1JPVVAgPSA0MTAyOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0pPSU5JTkdfVFlQRSA9IDQxMDM7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfTElORV9CUkVBSyA9IDQxMDQ7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfTlVNRVJJQ19UWVBFID0gNDEwNTsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9TQ1JJUFQgPSA0MTA2OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0hBTkdVTF9TWUxMQUJMRV9UWVBFID0gNDEwNzsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9ORkRfUVVJQ0tfQ0hFQ0sgPSA0MTA4OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX05GS0RfUVVJQ0tfQ0hFQ0sgPSA0MTA5OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX05GQ19RVUlDS19DSEVDSyA9IDQxMTA7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfTkZLQ19RVUlDS19DSEVDSyA9IDQxMTE7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfTEVBRF9DQU5PTklDQUxfQ09NQklOSU5HX0NMQVNTID0gNDExMjsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9UUkFJTF9DQU5PTklDQUxfQ09NQklOSU5HX0NMQVNTID0gNDExMzsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9HUkFQSEVNRV9DTFVTVEVSX0JSRUFLID0gNDExNDsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9TRU5URU5DRV9CUkVBSyA9IDQxMTU7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfV09SRF9CUkVBSyA9IDQxMTY7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfQklESV9QQUlSRURfQlJBQ0tFVF9UWVBFID0gNDExNzsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9JTlRfTElNSVQgPSA0MTIxOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0dFTkVSQUxfQ0FURUdPUllfTUFTSyA9IDgxOTI7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfTUFTS19TVEFSVCA9IDgxOTI7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfTUFTS19MSU1JVCA9IDgxOTM7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfTlVNRVJJQ19WQUxVRSA9IDEyMjg4OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0RPVUJMRV9TVEFSVCA9IDEyMjg4OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0RPVUJMRV9MSU1JVCA9IDEyMjg5OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0FHRSA9IDE2Mzg0OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX1NUUklOR19TVEFSVCA9IDE2Mzg0OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0JJRElfTUlSUk9SSU5HX0dMWVBIID0gMTYzODU7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfQ0FTRV9GT0xESU5HID0gMTYzODY7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfSVNPX0NPTU1FTlQgPSAxNjM4NzsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9MT1dFUkNBU0VfTUFQUElORyA9IDE2Mzg4OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX05BTUUgPSAxNjM4OTsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9TSU1QTEVfQ0FTRV9GT0xESU5HID0gMTYzOTA7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfU0lNUExFX0xPV0VSQ0FTRV9NQVBQSU5HID0gMTYzOTE7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfU0lNUExFX1RJVExFQ0FTRV9NQVBQSU5HID0gMTYzOTI7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfU0lNUExFX1VQUEVSQ0FTRV9NQVBQSU5HID0gMTYzOTM7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfVElUTEVDQVNFX01BUFBJTkcgPSAxNjM5NDsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9VTklDT0RFXzFfTkFNRSA9IDE2Mzk1OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX1VQUEVSQ0FTRV9NQVBQSU5HID0gMTYzOTY7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfQklESV9QQUlSRURfQlJBQ0tFVCA9IDE2Mzk3OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX1NUUklOR19MSU1JVCA9IDE2Mzk4OwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX1NDUklQVF9FWFRFTlNJT05TID0gMjg2NzI7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfT1RIRVJfUFJPUEVSVFlfU1RBUlQgPSAyODY3MjsKICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9PVEhFUl9QUk9QRVJUWV9MSU1JVCA9IDI4NjczOwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0lOVkFMSURfQ09ERSA9IC0xOwogICAgcHVibGljIGNvbnN0IENIQVJfQ0FURUdPUllfVU5BU1NJR05FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9DQVRFR09SWV9HRU5FUkFMX09USEVSX1RZUEVTID0gMDsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0NBVEVHT1JZX1VQUEVSQ0FTRV9MRVRURVIgPSAxOwogICAgcHVibGljIGNvbnN0IENIQVJfQ0FURUdPUllfTE9XRVJDQVNFX0xFVFRFUiA9IDI7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9DQVRFR09SWV9USVRMRUNBU0VfTEVUVEVSID0gMzsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0NBVEVHT1JZX01PRElGSUVSX0xFVFRFUiA9IDQ7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9DQVRFR09SWV9PVEhFUl9MRVRURVIgPSA1OwogICAgcHVibGljIGNvbnN0IENIQVJfQ0FURUdPUllfTk9OX1NQQUNJTkdfTUFSSyA9IDY7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9DQVRFR09SWV9FTkNMT1NJTkdfTUFSSyA9IDc7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9DQVRFR09SWV9DT01CSU5JTkdfU1BBQ0lOR19NQVJLID0gODsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0NBVEVHT1JZX0RFQ0lNQUxfRElHSVRfTlVNQkVSID0gOTsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0NBVEVHT1JZX0xFVFRFUl9OVU1CRVIgPSAxMDsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0NBVEVHT1JZX09USEVSX05VTUJFUiA9IDExOwogICAgcHVibGljIGNvbnN0IENIQVJfQ0FURUdPUllfU1BBQ0VfU0VQQVJBVE9SID0gMTI7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9DQVRFR09SWV9MSU5FX1NFUEFSQVRPUiA9IDEzOwogICAgcHVibGljIGNvbnN0IENIQVJfQ0FURUdPUllfUEFSQUdSQVBIX1NFUEFSQVRPUiA9IDE0OwogICAgcHVibGljIGNvbnN0IENIQVJfQ0FURUdPUllfQ09OVFJPTF9DSEFSID0gMTU7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9DQVRFR09SWV9GT1JNQVRfQ0hBUiA9IDE2OwogICAgcHVibGljIGNvbnN0IENIQVJfQ0FURUdPUllfUFJJVkFURV9VU0VfQ0hBUiA9IDE3OwogICAgcHVibGljIGNvbnN0IENIQVJfQ0FURUdPUllfU1VSUk9HQVRFID0gMTg7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9DQVRFR09SWV9EQVNIX1BVTkNUVUFUSU9OID0gMTk7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9DQVRFR09SWV9TVEFSVF9QVU5DVFVBVElPTiA9IDIwOwogICAgcHVibGljIGNvbnN0IENIQVJfQ0FURUdPUllfRU5EX1BVTkNUVUFUSU9OID0gMjE7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9DQVRFR09SWV9DT05ORUNUT1JfUFVOQ1RVQVRJT04gPSAyMjsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0NBVEVHT1JZX09USEVSX1BVTkNUVUFUSU9OID0gMjM7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9DQVRFR09SWV9NQVRIX1NZTUJPTCA9IDI0OwogICAgcHVibGljIGNvbnN0IENIQVJfQ0FURUdPUllfQ1VSUkVOQ1lfU1lNQk9MID0gMjU7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9DQVRFR09SWV9NT0RJRklFUl9TWU1CT0wgPSAyNjsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0NBVEVHT1JZX09USEVSX1NZTUJPTCA9IDI3OwogICAgcHVibGljIGNvbnN0IENIQVJfQ0FURUdPUllfSU5JVElBTF9QVU5DVFVBVElPTiA9IDI4OwogICAgcHVibGljIGNvbnN0IENIQVJfQ0FURUdPUllfRklOQUxfUFVOQ1RVQVRJT04gPSAyOTsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0NBVEVHT1JZX0NIQVJfQ0FURUdPUllfQ09VTlQgPSAzMDsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0RJUkVDVElPTl9MRUZUX1RPX1JJR0hUID0gMDsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0RJUkVDVElPTl9SSUdIVF9UT19MRUZUID0gMTsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0RJUkVDVElPTl9FVVJPUEVBTl9OVU1CRVIgPSAyOwogICAgcHVibGljIGNvbnN0IENIQVJfRElSRUNUSU9OX0VVUk9QRUFOX05VTUJFUl9TRVBBUkFUT1IgPSAzOwogICAgcHVibGljIGNvbnN0IENIQVJfRElSRUNUSU9OX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SID0gNDsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0RJUkVDVElPTl9BUkFCSUNfTlVNQkVSID0gNTsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0RJUkVDVElPTl9DT01NT05fTlVNQkVSX1NFUEFSQVRPUiA9IDY7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9ESVJFQ1RJT05fQkxPQ0tfU0VQQVJBVE9SID0gNzsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0RJUkVDVElPTl9TRUdNRU5UX1NFUEFSQVRPUiA9IDg7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9ESVJFQ1RJT05fV0hJVEVfU1BBQ0VfTkVVVFJBTCA9IDk7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9ESVJFQ1RJT05fT1RIRVJfTkVVVFJBTCA9IDEwOwogICAgcHVibGljIGNvbnN0IENIQVJfRElSRUNUSU9OX0xFRlRfVE9fUklHSFRfRU1CRURESU5HID0gMTE7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9ESVJFQ1RJT05fTEVGVF9UT19SSUdIVF9PVkVSUklERSA9IDEyOwogICAgcHVibGljIGNvbnN0IENIQVJfRElSRUNUSU9OX1JJR0hUX1RPX0xFRlRfQVJBQklDID0gMTM7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9ESVJFQ1RJT05fUklHSFRfVE9fTEVGVF9FTUJFRERJTkcgPSAxNDsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0RJUkVDVElPTl9SSUdIVF9UT19MRUZUX09WRVJSSURFID0gMTU7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9ESVJFQ1RJT05fUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCA9IDE2OwogICAgcHVibGljIGNvbnN0IENIQVJfRElSRUNUSU9OX0RJUl9OT05fU1BBQ0lOR19NQVJLID0gMTc7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9ESVJFQ1RJT05fQk9VTkRBUllfTkVVVFJBTCA9IDE4OwogICAgcHVibGljIGNvbnN0IENIQVJfRElSRUNUSU9OX0ZJUlNUX1NUUk9OR19JU09MQVRFID0gMTk7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9ESVJFQ1RJT05fTEVGVF9UT19SSUdIVF9JU09MQVRFID0gMjA7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9ESVJFQ1RJT05fUklHSFRfVE9fTEVGVF9JU09MQVRFID0gMjE7CiAgICBwdWJsaWMgY29uc3QgQ0hBUl9ESVJFQ1RJT05fUE9QX0RJUkVDVElPTkFMX0lTT0xBVEUgPSAyMjsKICAgIHB1YmxpYyBjb25zdCBDSEFSX0RJUkVDVElPTl9DSEFSX0RJUkVDVElPTl9DT1VOVCA9IDIzOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTk9fQkxPQ0sgPSAwOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQkFTSUNfTEFUSU4gPSAxOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTEFUSU5fMV9TVVBQTEVNRU5UID0gMjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0xBVElOX0VYVEVOREVEX0EgPSAzOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTEFUSU5fRVhURU5ERURfQiA9IDQ7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9JUEFfRVhURU5TSU9OUyA9IDU7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9TUEFDSU5HX01PRElGSUVSX0xFVFRFUlMgPSA2OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQ09NQklOSU5HX0RJQUNSSVRJQ0FMX01BUktTID0gNzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0dSRUVLID0gODsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0NZUklMTElDID0gOTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0FSTUVOSUFOID0gMTA7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9IRUJSRVcgPSAxMTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0FSQUJJQyA9IDEyOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfU1lSSUFDID0gMTM7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9USEFBTkEgPSAxNDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0RFVkFOQUdBUkkgPSAxNTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0JFTkdBTEkgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0dVUk1VS0hJID0gMTc7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9HVUpBUkFUSSA9IDE4OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfT1JJWUEgPSAxOTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1RBTUlMID0gMjA7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9URUxVR1UgPSAyMTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0tBTk5BREEgPSAyMjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01BTEFZQUxBTSA9IDIzOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfU0lOSEFMQSA9IDI0OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfVEhBSSA9IDI1OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTEFPID0gMjY7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9USUJFVEFOID0gMjc7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9NWUFOTUFSID0gMjg7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9HRU9SR0lBTiA9IDI5OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfSEFOR1VMX0pBTU8gPSAzMDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0VUSElPUElDID0gMzE7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DSEVST0tFRSA9IDMyOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfVU5JRklFRF9DQU5BRElBTl9BQk9SSUdJTkFMX1NZTExBQklDUyA9IDMzOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfT0dIQU0gPSAzNDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1JVTklDID0gMzU7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9LSE1FUiA9IDM2OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTU9OR09MSUFOID0gMzc7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9MQVRJTl9FWFRFTkRFRF9BRERJVElPTkFMID0gMzg7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9HUkVFS19FWFRFTkRFRCA9IDM5OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfR0VORVJBTF9QVU5DVFVBVElPTiA9IDQwOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfU1VQRVJTQ1JJUFRTX0FORF9TVUJTQ1JJUFRTID0gNDE7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DVVJSRU5DWV9TWU1CT0xTID0gNDI7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DT01CSU5JTkdfTUFSS1NfRk9SX1NZTUJPTFMgPSA0MzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0xFVFRFUkxJS0VfU1lNQk9MUyA9IDQ0OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTlVNQkVSX0ZPUk1TID0gNDU7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9BUlJPV1MgPSA0NjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01BVEhFTUFUSUNBTF9PUEVSQVRPUlMgPSA0NzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01JU0NFTExBTkVPVVNfVEVDSE5JQ0FMID0gNDg7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DT05UUk9MX1BJQ1RVUkVTID0gNDk7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9PUFRJQ0FMX0NIQVJBQ1RFUl9SRUNPR05JVElPTiA9IDUwOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfRU5DTE9TRURfQUxQSEFOVU1FUklDUyA9IDUxOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQk9YX0RSQVdJTkcgPSA1MjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0JMT0NLX0VMRU1FTlRTID0gNTM7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9HRU9NRVRSSUNfU0hBUEVTID0gNTQ7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9NSVNDRUxMQU5FT1VTX1NZTUJPTFMgPSA1NTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0RJTkdCQVRTID0gNTY7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9CUkFJTExFX1BBVFRFUk5TID0gNTc7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DSktfUkFESUNBTFNfU1VQUExFTUVOVCA9IDU4OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfS0FOR1hJX1JBRElDQUxTID0gNTk7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9JREVPR1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTID0gNjA7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DSktfU1lNQk9MU19BTkRfUFVOQ1RVQVRJT04gPSA2MTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0hJUkFHQU5BID0gNjI7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9LQVRBS0FOQSA9IDYzOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQk9QT01PRk8gPSA2NDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0hBTkdVTF9DT01QQVRJQklMSVRZX0pBTU8gPSA2NTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0tBTkJVTiA9IDY2OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQk9QT01PRk9fRVhURU5ERUQgPSA2NzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0VOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFMgPSA2ODsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0NKS19DT01QQVRJQklMSVRZID0gNjk7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9BID0gNzA7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DSktfVU5JRklFRF9JREVPR1JBUEhTID0gNzE7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9ZSV9TWUxMQUJMRVMgPSA3MjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1lJX1JBRElDQUxTID0gNzM7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9IQU5HVUxfU1lMTEFCTEVTID0gNzQ7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9ISUdIX1NVUlJPR0FURVMgPSA3NTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0hJR0hfUFJJVkFURV9VU0VfU1VSUk9HQVRFUyA9IDc2OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTE9XX1NVUlJPR0FURVMgPSA3NzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1BSSVZBVEVfVVNFX0FSRUEgPSA3ODsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1BSSVZBVEVfVVNFID0gNzg7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTID0gNzk7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9BTFBIQUJFVElDX1BSRVNFTlRBVElPTl9GT1JNUyA9IDgwOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQVJBQklDX1BSRVNFTlRBVElPTl9GT1JNU19BID0gODE7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DT01CSU5JTkdfSEFMRl9NQVJLUyA9IDgyOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQ0pLX0NPTVBBVElCSUxJVFlfRk9STVMgPSA4MzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1NNQUxMX0ZPUk1fVkFSSUFOVFMgPSA4NDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0FSQUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQiA9IDg1OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfU1BFQ0lBTFMgPSA4NjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0hBTEZXSURUSF9BTkRfRlVMTFdJRFRIX0ZPUk1TID0gODc7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9PTERfSVRBTElDID0gODg7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9HT1RISUMgPSA4OTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0RFU0VSRVQgPSA5MDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0JZWkFOVElORV9NVVNJQ0FMX1NZTUJPTFMgPSA5MTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01VU0lDQUxfU1lNQk9MUyA9IDkyOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTUFUSEVNQVRJQ0FMX0FMUEhBTlVNRVJJQ19TWU1CT0xTID0gOTM7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DSktfVU5JRklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9CID0gOTQ7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTX1NVUFBMRU1FTlQgPSA5NTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1RBR1MgPSA5NjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0NZUklMTElDX1NVUFBMRU1FTlQgPSA5NzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0NZUklMTElDX1NVUFBMRU1FTlRBUlkgPSA5NzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1RBR0FMT0cgPSA5ODsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0hBTlVOT08gPSA5OTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0JVSElEID0gMTAwOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfVEFHQkFOV0EgPSAxMDE7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9NSVNDRUxMQU5FT1VTX01BVEhFTUFUSUNBTF9TWU1CT0xTX0EgPSAxMDI7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9TVVBQTEVNRU5UQUxfQVJST1dTX0EgPSAxMDM7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9TVVBQTEVNRU5UQUxfQVJST1dTX0IgPSAxMDQ7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9NSVNDRUxMQU5FT1VTX01BVEhFTUFUSUNBTF9TWU1CT0xTX0IgPSAxMDU7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9TVVBQTEVNRU5UQUxfTUFUSEVNQVRJQ0FMX09QRVJBVE9SUyA9IDEwNjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0tBVEFLQU5BX1BIT05FVElDX0VYVEVOU0lPTlMgPSAxMDc7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9WQVJJQVRJT05fU0VMRUNUT1JTID0gMTA4OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfU1VQUExFTUVOVEFSWV9QUklWQVRFX1VTRV9BUkVBX0EgPSAxMDk7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9TVVBQTEVNRU5UQVJZX1BSSVZBVEVfVVNFX0FSRUFfQiA9IDExMDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0xJTUJVID0gMTExOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfVEFJX0xFID0gMTEyOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfS0hNRVJfU1lNQk9MUyA9IDExMzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1BIT05FVElDX0VYVEVOU0lPTlMgPSAxMTQ7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9NSVNDRUxMQU5FT1VTX1NZTUJPTFNfQU5EX0FSUk9XUyA9IDExNTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1lJSklOR19IRVhBR1JBTV9TWU1CT0xTID0gMTE2OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTElORUFSX0JfU1lMTEFCQVJZID0gMTE3OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTElORUFSX0JfSURFT0dSQU1TID0gMTE4OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQUVHRUFOX05VTUJFUlMgPSAxMTk7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9VR0FSSVRJQyA9IDEyMDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1NIQVZJQU4gPSAxMjE7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9PU01BTllBID0gMTIyOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQ1lQUklPVF9TWUxMQUJBUlkgPSAxMjM7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9UQUlfWFVBTl9KSU5HX1NZTUJPTFMgPSAxMjQ7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9WQVJJQVRJT05fU0VMRUNUT1JTX1NVUFBMRU1FTlQgPSAxMjU7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9BTkNJRU5UX0dSRUVLX01VU0lDQUxfTk9UQVRJT04gPSAxMjY7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9BTkNJRU5UX0dSRUVLX05VTUJFUlMgPSAxMjc7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9BUkFCSUNfU1VQUExFTUVOVCA9IDEyODsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0JVR0lORVNFID0gMTI5OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQ0pLX1NUUk9LRVMgPSAxMzA7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DT01CSU5JTkdfRElBQ1JJVElDQUxfTUFSS1NfU1VQUExFTUVOVCA9IDEzMTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0NPUFRJQyA9IDEzMjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0VUSElPUElDX0VYVEVOREVEID0gMTMzOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfRVRISU9QSUNfU1VQUExFTUVOVCA9IDEzNDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0dFT1JHSUFOX1NVUFBMRU1FTlQgPSAxMzU7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9HTEFHT0xJVElDID0gMTM2OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfS0hBUk9TSFRISSA9IDEzNzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01PRElGSUVSX1RPTkVfTEVUVEVSUyA9IDEzODsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX05FV19UQUlfTFVFID0gMTM5OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfT0xEX1BFUlNJQU4gPSAxNDA7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9QSE9ORVRJQ19FWFRFTlNJT05TX1NVUFBMRU1FTlQgPSAxNDE7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9TVVBQTEVNRU5UQUxfUFVOQ1RVQVRJT04gPSAxNDI7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9TWUxPVElfTkFHUkkgPSAxNDM7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9USUZJTkFHSCA9IDE0NDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1ZFUlRJQ0FMX0ZPUk1TID0gMTQ1OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTktPID0gMTQ2OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQkFMSU5FU0UgPSAxNDc7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9MQVRJTl9FWFRFTkRFRF9DID0gMTQ4OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTEFUSU5fRVhURU5ERURfRCA9IDE0OTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1BIQUdTX1BBID0gMTUwOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfUEhPRU5JQ0lBTiA9IDE1MTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0NVTkVJRk9STSA9IDE1MjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0NVTkVJRk9STV9OVU1CRVJTX0FORF9QVU5DVFVBVElPTiA9IDE1MzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0NPVU5USU5HX1JPRF9OVU1FUkFMUyA9IDE1NDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1NVTkRBTkVTRSA9IDE1NTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0xFUENIQSA9IDE1NjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX09MX0NISUtJID0gMTU3OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQ1lSSUxMSUNfRVhURU5ERURfQSA9IDE1ODsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1ZBSSA9IDE1OTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0NZUklMTElDX0VYVEVOREVEX0IgPSAxNjA7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9TQVVSQVNIVFJBID0gMTYxOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfS0FZQUhfTEkgPSAxNjI7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9SRUpBTkcgPSAxNjM7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DSEFNID0gMTY0OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQU5DSUVOVF9TWU1CT0xTID0gMTY1OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfUEhBSVNUT1NfRElTQyA9IDE2NjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0xZQ0lBTiA9IDE2NzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0NBUklBTiA9IDE2ODsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0xZRElBTiA9IDE2OTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01BSEpPTkdfVElMRVMgPSAxNzA7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9ET01JTk9fVElMRVMgPSAxNzE7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9TQU1BUklUQU4gPSAxNzI7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9VTklGSUVEX0NBTkFESUFOX0FCT1JJR0lOQUxfU1lMTEFCSUNTX0VYVEVOREVEID0gMTczOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfVEFJX1RIQU0gPSAxNzQ7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9WRURJQ19FWFRFTlNJT05TID0gMTc1OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTElTVSA9IDE3NjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0JBTVVNID0gMTc3OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQ09NTU9OX0lORElDX05VTUJFUl9GT1JNUyA9IDE3ODsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0RFVkFOQUdBUklfRVhURU5ERUQgPSAxNzk7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9IQU5HVUxfSkFNT19FWFRFTkRFRF9BID0gMTgwOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfSkFWQU5FU0UgPSAxODE7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9NWUFOTUFSX0VYVEVOREVEX0EgPSAxODI7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9UQUlfVklFVCA9IDE4MzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01FRVRFSV9NQVlFSyA9IDE4NDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0hBTkdVTF9KQU1PX0VYVEVOREVEX0IgPSAxODU7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9JTVBFUklBTF9BUkFNQUlDID0gMTg2OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfT0xEX1NPVVRIX0FSQUJJQU4gPSAxODc7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9BVkVTVEFOID0gMTg4OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfSU5TQ1JJUFRJT05BTF9QQVJUSElBTiA9IDE4OTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0lOU0NSSVBUSU9OQUxfUEFITEFWSSA9IDE5MDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX09MRF9UVVJLSUMgPSAxOTE7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9SVU1JX05VTUVSQUxfU1lNQk9MUyA9IDE5MjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0tBSVRISSA9IDE5MzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0VHWVBUSUFOX0hJRVJPR0xZUEhTID0gMTk0OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfRU5DTE9TRURfQUxQSEFOVU1FUklDX1NVUFBMRU1FTlQgPSAxOTU7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9FTkNMT1NFRF9JREVPR1JBUEhJQ19TVVBQTEVNRU5UID0gMTk2OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fQyA9IDE5NzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01BTkRBSUMgPSAxOTg7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9CQVRBSyA9IDE5OTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0VUSElPUElDX0VYVEVOREVEX0EgPSAyMDA7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9CUkFITUkgPSAyMDE7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9CQU1VTV9TVVBQTEVNRU5UID0gMjAyOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfS0FOQV9TVVBQTEVNRU5UID0gMjAzOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfUExBWUlOR19DQVJEUyA9IDIwNDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01JU0NFTExBTkVPVVNfU1lNQk9MU19BTkRfUElDVE9HUkFQSFMgPSAyMDU7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9FTU9USUNPTlMgPSAyMDY7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9UUkFOU1BPUlRfQU5EX01BUF9TWU1CT0xTID0gMjA3OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQUxDSEVNSUNBTF9TWU1CT0xTID0gMjA4OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19FWFRFTlNJT05fRCA9IDIwOTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0FSQUJJQ19FWFRFTkRFRF9BID0gMjEwOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQVJBQklDX01BVEhFTUFUSUNBTF9BTFBIQUJFVElDX1NZTUJPTFMgPSAyMTE7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DSEFLTUEgPSAyMTI7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9NRUVURUlfTUFZRUtfRVhURU5TSU9OUyA9IDIxMzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01FUk9JVElDX0NVUlNJVkUgPSAyMTQ7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9NRVJPSVRJQ19ISUVST0dMWVBIUyA9IDIxNTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01JQU8gPSAyMTY7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9TSEFSQURBID0gMjE3OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfU09SQV9TT01QRU5HID0gMjE4OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfU1VOREFORVNFX1NVUFBMRU1FTlQgPSAyMTk7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9UQUtSSSA9IDIyMDsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0JBU1NBX1ZBSCA9IDIyMTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0NBVUNBU0lBTl9BTEJBTklBTiA9IDIyMjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0NPUFRJQ19FUEFDVF9OVU1CRVJTID0gMjIzOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfQ09NQklOSU5HX0RJQUNSSVRJQ0FMX01BUktTX0VYVEVOREVEID0gMjI0OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfRFVQTE9ZQU4gPSAyMjU7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9FTEJBU0FOID0gMjI2OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfR0VPTUVUUklDX1NIQVBFU19FWFRFTkRFRCA9IDIyNzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0dSQU5USEEgPSAyMjg7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9LSE9KS0kgPSAyMjk7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9LSFVEQVdBREkgPSAyMzA7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9MQVRJTl9FWFRFTkRFRF9FID0gMjMxOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTElORUFSX0EgPSAyMzI7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9NQUhBSkFOSSA9IDIzMzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01BTklDSEFFQU4gPSAyMzQ7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9NRU5ERV9LSUtBS1VJID0gMjM1OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfTU9ESSA9IDIzNjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01STyA9IDIzNzsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX01ZQU5NQVJfRVhURU5ERURfQiA9IDIzODsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX05BQkFUQUVBTiA9IDIzOTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX09MRF9OT1JUSF9BUkFCSUFOID0gMjQwOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfT0xEX1BFUk1JQyA9IDI0MTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX09STkFNRU5UQUxfRElOR0JBVFMgPSAyNDI7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9QQUhBV0hfSE1PTkcgPSAyNDM7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9QQUxNWVJFTkUgPSAyNDQ7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9QQVVfQ0lOX0hBVSA9IDI0NTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1BTQUxURVJfUEFITEFWSSA9IDI0NjsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX1NIT1JUSEFORF9GT1JNQVRfQ09OVFJPTFMgPSAyNDc7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9TSURESEFNID0gMjQ4OwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfU0lOSEFMQV9BUkNIQUlDX05VTUJFUlMgPSAyNDk7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9TVVBQTEVNRU5UQUxfQVJST1dTX0MgPSAyNTA7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9USVJIVVRBID0gMjUxOwogICAgcHVibGljIGNvbnN0IEJMT0NLX0NPREVfV0FSQU5HX0NJVEkgPSAyNTI7CiAgICBwdWJsaWMgY29uc3QgQkxPQ0tfQ09ERV9DT1VOVCA9IDMwOTsKICAgIHB1YmxpYyBjb25zdCBCTE9DS19DT0RFX0lOVkFMSURfQ09ERSA9IC0xOwogICAgcHVibGljIGNvbnN0IEJQVF9OT05FID0gMDsKICAgIHB1YmxpYyBjb25zdCBCUFRfT1BFTiA9IDE7CiAgICBwdWJsaWMgY29uc3QgQlBUX0NMT1NFID0gMjsKICAgIHB1YmxpYyBjb25zdCBCUFRfQ09VTlQgPSAzOwogICAgcHVibGljIGNvbnN0IEVBX05FVVRSQUwgPSAwOwogICAgcHVibGljIGNvbnN0IEVBX0FNQklHVU9VUyA9IDE7CiAgICBwdWJsaWMgY29uc3QgRUFfSEFMRldJRFRIID0gMjsKICAgIHB1YmxpYyBjb25zdCBFQV9GVUxMV0lEVEggPSAzOwogICAgcHVibGljIGNvbnN0IEVBX05BUlJPVyA9IDQ7CiAgICBwdWJsaWMgY29uc3QgRUFfV0lERSA9IDU7CiAgICBwdWJsaWMgY29uc3QgRUFfQ09VTlQgPSA2OwogICAgcHVibGljIGNvbnN0IFVOSUNPREVfQ0hBUl9OQU1FID0gMDsKICAgIHB1YmxpYyBjb25zdCBVTklDT0RFXzEwX0NIQVJfTkFNRSA9IDE7CiAgICBwdWJsaWMgY29uc3QgRVhURU5ERURfQ0hBUl9OQU1FID0gMjsKICAgIHB1YmxpYyBjb25zdCBDSEFSX05BTUVfQUxJQVMgPSAzOwogICAgcHVibGljIGNvbnN0IENIQVJfTkFNRV9DSE9JQ0VfQ09VTlQgPSA0OwogICAgcHVibGljIGNvbnN0IFNIT1JUX1BST1BFUlRZX05BTUUgPSAwOwogICAgcHVibGljIGNvbnN0IExPTkdfUFJPUEVSVFlfTkFNRSA9IDE7CiAgICBwdWJsaWMgY29uc3QgUFJPUEVSVFlfTkFNRV9DSE9JQ0VfQ09VTlQgPSAyOwogICAgcHVibGljIGNvbnN0IERUX05PTkUgPSAwOwogICAgcHVibGljIGNvbnN0IERUX0NBTk9OSUNBTCA9IDE7CiAgICBwdWJsaWMgY29uc3QgRFRfQ09NUEFUID0gMjsKICAgIHB1YmxpYyBjb25zdCBEVF9DSVJDTEUgPSAzOwogICAgcHVibGljIGNvbnN0IERUX0ZJTkFMID0gNDsKICAgIHB1YmxpYyBjb25zdCBEVF9GT05UID0gNTsKICAgIHB1YmxpYyBjb25zdCBEVF9GUkFDVElPTiA9IDY7CiAgICBwdWJsaWMgY29uc3QgRFRfSU5JVElBTCA9IDc7CiAgICBwdWJsaWMgY29uc3QgRFRfSVNPTEFURUQgPSA4OwogICAgcHVibGljIGNvbnN0IERUX01FRElBTCA9IDk7CiAgICBwdWJsaWMgY29uc3QgRFRfTkFSUk9XID0gMTA7CiAgICBwdWJsaWMgY29uc3QgRFRfTk9CUkVBSyA9IDExOwogICAgcHVibGljIGNvbnN0IERUX1NNQUxMID0gMTI7CiAgICBwdWJsaWMgY29uc3QgRFRfU1FVQVJFID0gMTM7CiAgICBwdWJsaWMgY29uc3QgRFRfU1VCID0gMTQ7CiAgICBwdWJsaWMgY29uc3QgRFRfU1VQRVIgPSAxNTsKICAgIHB1YmxpYyBjb25zdCBEVF9WRVJUSUNBTCA9IDE2OwogICAgcHVibGljIGNvbnN0IERUX1dJREUgPSAxNzsKICAgIHB1YmxpYyBjb25zdCBEVF9DT1VOVCA9IDE4OwogICAgcHVibGljIGNvbnN0IEpUX05PTl9KT0lOSU5HID0gMDsKICAgIHB1YmxpYyBjb25zdCBKVF9KT0lOX0NBVVNJTkcgPSAxOwogICAgcHVibGljIGNvbnN0IEpUX0RVQUxfSk9JTklORyA9IDI7CiAgICBwdWJsaWMgY29uc3QgSlRfTEVGVF9KT0lOSU5HID0gMzsKICAgIHB1YmxpYyBjb25zdCBKVF9SSUdIVF9KT0lOSU5HID0gNDsKICAgIHB1YmxpYyBjb25zdCBKVF9UUkFOU1BBUkVOVCA9IDU7CiAgICBwdWJsaWMgY29uc3QgSlRfQ09VTlQgPSA2OwogICAgcHVibGljIGNvbnN0IEpHX05PX0pPSU5JTkdfR1JPVVAgPSAwOwogICAgcHVibGljIGNvbnN0IEpHX0FJTiA9IDE7CiAgICBwdWJsaWMgY29uc3QgSkdfQUxBUEggPSAyOwogICAgcHVibGljIGNvbnN0IEpHX0FMRUYgPSAzOwogICAgcHVibGljIGNvbnN0IEpHX0JFSCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgSkdfQkVUSCA9IDU7CiAgICBwdWJsaWMgY29uc3QgSkdfREFMID0gNjsKICAgIHB1YmxpYyBjb25zdCBKR19EQUxBVEhfUklTSCA9IDc7CiAgICBwdWJsaWMgY29uc3QgSkdfRSA9IDg7CiAgICBwdWJsaWMgY29uc3QgSkdfRkVIID0gOTsKICAgIHB1YmxpYyBjb25zdCBKR19GSU5BTF9TRU1LQVRIID0gMTA7CiAgICBwdWJsaWMgY29uc3QgSkdfR0FGID0gMTE7CiAgICBwdWJsaWMgY29uc3QgSkdfR0FNQUwgPSAxMjsKICAgIHB1YmxpYyBjb25zdCBKR19IQUggPSAxMzsKICAgIHB1YmxpYyBjb25zdCBKR19URUhfTUFSQlVUQV9HT0FMID0gMTQ7CiAgICBwdWJsaWMgY29uc3QgSkdfSEFNWkFfT05fSEVIX0dPQUwgPSAxNDsKICAgIHB1YmxpYyBjb25zdCBKR19IRSA9IDE1OwogICAgcHVibGljIGNvbnN0IEpHX0hFSCA9IDE2OwogICAgcHVibGljIGNvbnN0IEpHX0hFSF9HT0FMID0gMTc7CiAgICBwdWJsaWMgY29uc3QgSkdfSEVUSCA9IDE4OwogICAgcHVibGljIGNvbnN0IEpHX0tBRiA9IDE5OwogICAgcHVibGljIGNvbnN0IEpHX0tBUEggPSAyMDsKICAgIHB1YmxpYyBjb25zdCBKR19LTk9UVEVEX0hFSCA9IDIxOwogICAgcHVibGljIGNvbnN0IEpHX0xBTSA9IDIyOwogICAgcHVibGljIGNvbnN0IEpHX0xBTUFESCA9IDIzOwogICAgcHVibGljIGNvbnN0IEpHX01FRU0gPSAyNDsKICAgIHB1YmxpYyBjb25zdCBKR19NSU0gPSAyNTsKICAgIHB1YmxpYyBjb25zdCBKR19OT09OID0gMjY7CiAgICBwdWJsaWMgY29uc3QgSkdfTlVOID0gMjc7CiAgICBwdWJsaWMgY29uc3QgSkdfUEUgPSAyODsKICAgIHB1YmxpYyBjb25zdCBKR19RQUYgPSAyOTsKICAgIHB1YmxpYyBjb25zdCBKR19RQVBIID0gMzA7CiAgICBwdWJsaWMgY29uc3QgSkdfUkVIID0gMzE7CiAgICBwdWJsaWMgY29uc3QgSkdfUkVWRVJTRURfUEUgPSAzMjsKICAgIHB1YmxpYyBjb25zdCBKR19TQUQgPSAzMzsKICAgIHB1YmxpYyBjb25zdCBKR19TQURIRSA9IDM0OwogICAgcHVibGljIGNvbnN0IEpHX1NFRU4gPSAzNTsKICAgIHB1YmxpYyBjb25zdCBKR19TRU1LQVRIID0gMzY7CiAgICBwdWJsaWMgY29uc3QgSkdfU0hJTiA9IDM3OwogICAgcHVibGljIGNvbnN0IEpHX1NXQVNIX0tBRiA9IDM4OwogICAgcHVibGljIGNvbnN0IEpHX1NZUklBQ19XQVcgPSAzOTsKICAgIHB1YmxpYyBjb25zdCBKR19UQUggPSA0MDsKICAgIHB1YmxpYyBjb25zdCBKR19UQVcgPSA0MTsKICAgIHB1YmxpYyBjb25zdCBKR19URUhfTUFSQlVUQSA9IDQyOwogICAgcHVibGljIGNvbnN0IEpHX1RFVEggPSA0MzsKICAgIHB1YmxpYyBjb25zdCBKR19XQVcgPSA0NDsKICAgIHB1YmxpYyBjb25zdCBKR19ZRUggPSA0NTsKICAgIHB1YmxpYyBjb25zdCBKR19ZRUhfQkFSUkVFID0gNDY7CiAgICBwdWJsaWMgY29uc3QgSkdfWUVIX1dJVEhfVEFJTCA9IDQ3OwogICAgcHVibGljIGNvbnN0IEpHX1lVREggPSA0ODsKICAgIHB1YmxpYyBjb25zdCBKR19ZVURIX0hFID0gNDk7CiAgICBwdWJsaWMgY29uc3QgSkdfWkFJTiA9IDUwOwogICAgcHVibGljIGNvbnN0IEpHX0ZFID0gNTE7CiAgICBwdWJsaWMgY29uc3QgSkdfS0hBUEggPSA1MjsKICAgIHB1YmxpYyBjb25zdCBKR19aSEFJTiA9IDUzOwogICAgcHVibGljIGNvbnN0IEpHX0JVUlVTSEFTS0lfWUVIX0JBUlJFRSA9IDU0OwogICAgcHVibGljIGNvbnN0IEpHX0ZBUlNJX1lFSCA9IDU1OwogICAgcHVibGljIGNvbnN0IEpHX05ZQSA9IDU2OwogICAgcHVibGljIGNvbnN0IEpHX1JPSElOR1lBX1lFSCA9IDU3OwogICAgcHVibGljIGNvbnN0IEpHX01BTklDSEFFQU5fQUxFUEggPSA1ODsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX0FZSU4gPSA1OTsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX0JFVEggPSA2MDsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX0RBTEVUSCA9IDYxOwogICAgcHVibGljIGNvbnN0IEpHX01BTklDSEFFQU5fREhBTUVESCA9IDYyOwogICAgcHVibGljIGNvbnN0IEpHX01BTklDSEFFQU5fRklWRSA9IDYzOwogICAgcHVibGljIGNvbnN0IEpHX01BTklDSEFFQU5fR0lNRUwgPSA2NDsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX0hFVEggPSA2NTsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX0hVTkRSRUQgPSA2NjsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX0tBUEggPSA2NzsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX0xBTUVESCA9IDY4OwogICAgcHVibGljIGNvbnN0IEpHX01BTklDSEFFQU5fTUVNID0gNjk7CiAgICBwdWJsaWMgY29uc3QgSkdfTUFOSUNIQUVBTl9OVU4gPSA3MDsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX09ORSA9IDcxOwogICAgcHVibGljIGNvbnN0IEpHX01BTklDSEFFQU5fUEUgPSA3MjsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX1FPUEggPSA3MzsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX1JFU0ggPSA3NDsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX1NBREhFID0gNzU7CiAgICBwdWJsaWMgY29uc3QgSkdfTUFOSUNIQUVBTl9TQU1FS0ggPSA3NjsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX1RBVyA9IDc3OwogICAgcHVibGljIGNvbnN0IEpHX01BTklDSEFFQU5fVEVOID0gNzg7CiAgICBwdWJsaWMgY29uc3QgSkdfTUFOSUNIQUVBTl9URVRIID0gNzk7CiAgICBwdWJsaWMgY29uc3QgSkdfTUFOSUNIQUVBTl9USEFNRURIID0gODA7CiAgICBwdWJsaWMgY29uc3QgSkdfTUFOSUNIQUVBTl9UV0VOVFkgPSA4MTsKICAgIHB1YmxpYyBjb25zdCBKR19NQU5JQ0hBRUFOX1dBVyA9IDgyOwogICAgcHVibGljIGNvbnN0IEpHX01BTklDSEFFQU5fWU9ESCA9IDgzOwogICAgcHVibGljIGNvbnN0IEpHX01BTklDSEFFQU5fWkFZSU4gPSA4NDsKICAgIHB1YmxpYyBjb25zdCBKR19TVFJBSUdIVF9XQVcgPSA4NTsKICAgIHB1YmxpYyBjb25zdCBKR19DT1VOVCA9IDEwMjsKICAgIHB1YmxpYyBjb25zdCBHQ0JfT1RIRVIgPSAwOwogICAgcHVibGljIGNvbnN0IEdDQl9DT05UUk9MID0gMTsKICAgIHB1YmxpYyBjb25zdCBHQ0JfQ1IgPSAyOwogICAgcHVibGljIGNvbnN0IEdDQl9FWFRFTkQgPSAzOwogICAgcHVibGljIGNvbnN0IEdDQl9MID0gNDsKICAgIHB1YmxpYyBjb25zdCBHQ0JfTEYgPSA1OwogICAgcHVibGljIGNvbnN0IEdDQl9MViA9IDY7CiAgICBwdWJsaWMgY29uc3QgR0NCX0xWVCA9IDc7CiAgICBwdWJsaWMgY29uc3QgR0NCX1QgPSA4OwogICAgcHVibGljIGNvbnN0IEdDQl9WID0gOTsKICAgIHB1YmxpYyBjb25zdCBHQ0JfU1BBQ0lOR19NQVJLID0gMTA7CiAgICBwdWJsaWMgY29uc3QgR0NCX1BSRVBFTkQgPSAxMTsKICAgIHB1YmxpYyBjb25zdCBHQ0JfUkVHSU9OQUxfSU5ESUNBVE9SID0gMTI7CiAgICBwdWJsaWMgY29uc3QgR0NCX0NPVU5UID0gMTg7CiAgICBwdWJsaWMgY29uc3QgV0JfT1RIRVIgPSAwOwogICAgcHVibGljIGNvbnN0IFdCX0FMRVRURVIgPSAxOwogICAgcHVibGljIGNvbnN0IFdCX0ZPUk1BVCA9IDI7CiAgICBwdWJsaWMgY29uc3QgV0JfS0FUQUtBTkEgPSAzOwogICAgcHVibGljIGNvbnN0IFdCX01JRExFVFRFUiA9IDQ7CiAgICBwdWJsaWMgY29uc3QgV0JfTUlETlVNID0gNTsKICAgIHB1YmxpYyBjb25zdCBXQl9OVU1FUklDID0gNjsKICAgIHB1YmxpYyBjb25zdCBXQl9FWFRFTkROVU1MRVQgPSA3OwogICAgcHVibGljIGNvbnN0IFdCX0NSID0gODsKICAgIHB1YmxpYyBjb25zdCBXQl9FWFRFTkQgPSA5OwogICAgcHVibGljIGNvbnN0IFdCX0xGID0gMTA7CiAgICBwdWJsaWMgY29uc3QgV0JfTUlETlVNTEVUID0gMTE7CiAgICBwdWJsaWMgY29uc3QgV0JfTkVXTElORSA9IDEyOwogICAgcHVibGljIGNvbnN0IFdCX1JFR0lPTkFMX0lORElDQVRPUiA9IDEzOwogICAgcHVibGljIGNvbnN0IFdCX0hFQlJFV19MRVRURVIgPSAxNDsKICAgIHB1YmxpYyBjb25zdCBXQl9TSU5HTEVfUVVPVEUgPSAxNTsKICAgIHB1YmxpYyBjb25zdCBXQl9ET1VCTEVfUVVPVEUgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBXQl9DT1VOVCA9IDIzOwogICAgcHVibGljIGNvbnN0IFNCX09USEVSID0gMDsKICAgIHB1YmxpYyBjb25zdCBTQl9BVEVSTSA9IDE7CiAgICBwdWJsaWMgY29uc3QgU0JfQ0xPU0UgPSAyOwogICAgcHVibGljIGNvbnN0IFNCX0ZPUk1BVCA9IDM7CiAgICBwdWJsaWMgY29uc3QgU0JfTE9XRVIgPSA0OwogICAgcHVibGljIGNvbnN0IFNCX05VTUVSSUMgPSA1OwogICAgcHVibGljIGNvbnN0IFNCX09MRVRURVIgPSA2OwogICAgcHVibGljIGNvbnN0IFNCX1NFUCA9IDc7CiAgICBwdWJsaWMgY29uc3QgU0JfU1AgPSA4OwogICAgcHVibGljIGNvbnN0IFNCX1NURVJNID0gOTsKICAgIHB1YmxpYyBjb25zdCBTQl9VUFBFUiA9IDEwOwogICAgcHVibGljIGNvbnN0IFNCX0NSID0gMTE7CiAgICBwdWJsaWMgY29uc3QgU0JfRVhURU5EID0gMTI7CiAgICBwdWJsaWMgY29uc3QgU0JfTEYgPSAxMzsKICAgIHB1YmxpYyBjb25zdCBTQl9TQ09OVElOVUUgPSAxNDsKICAgIHB1YmxpYyBjb25zdCBTQl9DT1VOVCA9IDE1OwogICAgcHVibGljIGNvbnN0IExCX1VOS05PV04gPSAwOwogICAgcHVibGljIGNvbnN0IExCX0FNQklHVU9VUyA9IDE7CiAgICBwdWJsaWMgY29uc3QgTEJfQUxQSEFCRVRJQyA9IDI7CiAgICBwdWJsaWMgY29uc3QgTEJfQlJFQUtfQk9USCA9IDM7CiAgICBwdWJsaWMgY29uc3QgTEJfQlJFQUtfQUZURVIgPSA0OwogICAgcHVibGljIGNvbnN0IExCX0JSRUFLX0JFRk9SRSA9IDU7CiAgICBwdWJsaWMgY29uc3QgTEJfTUFOREFUT1JZX0JSRUFLID0gNjsKICAgIHB1YmxpYyBjb25zdCBMQl9DT05USU5HRU5UX0JSRUFLID0gNzsKICAgIHB1YmxpYyBjb25zdCBMQl9DTE9TRV9QVU5DVFVBVElPTiA9IDg7CiAgICBwdWJsaWMgY29uc3QgTEJfQ09NQklOSU5HX01BUksgPSA5OwogICAgcHVibGljIGNvbnN0IExCX0NBUlJJQUdFX1JFVFVSTiA9IDEwOwogICAgcHVibGljIGNvbnN0IExCX0VYQ0xBTUFUSU9OID0gMTE7CiAgICBwdWJsaWMgY29uc3QgTEJfR0xVRSA9IDEyOwogICAgcHVibGljIGNvbnN0IExCX0hZUEhFTiA9IDEzOwogICAgcHVibGljIGNvbnN0IExCX0lERU9HUkFQSElDID0gMTQ7CiAgICBwdWJsaWMgY29uc3QgTEJfSU5TRVBBUkFCTEUgPSAxNTsKICAgIHB1YmxpYyBjb25zdCBMQl9JTlNFUEVSQUJMRSA9IDE1OwogICAgcHVibGljIGNvbnN0IExCX0lORklYX05VTUVSSUMgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBMQl9MSU5FX0ZFRUQgPSAxNzsKICAgIHB1YmxpYyBjb25zdCBMQl9OT05TVEFSVEVSID0gMTg7CiAgICBwdWJsaWMgY29uc3QgTEJfTlVNRVJJQyA9IDE5OwogICAgcHVibGljIGNvbnN0IExCX09QRU5fUFVOQ1RVQVRJT04gPSAyMDsKICAgIHB1YmxpYyBjb25zdCBMQl9QT1NURklYX05VTUVSSUMgPSAyMTsKICAgIHB1YmxpYyBjb25zdCBMQl9QUkVGSVhfTlVNRVJJQyA9IDIyOwogICAgcHVibGljIGNvbnN0IExCX1FVT1RBVElPTiA9IDIzOwogICAgcHVibGljIGNvbnN0IExCX0NPTVBMRVhfQ09OVEVYVCA9IDI0OwogICAgcHVibGljIGNvbnN0IExCX1NVUlJPR0FURSA9IDI1OwogICAgcHVibGljIGNvbnN0IExCX1NQQUNFID0gMjY7CiAgICBwdWJsaWMgY29uc3QgTEJfQlJFQUtfU1lNQk9MUyA9IDI3OwogICAgcHVibGljIGNvbnN0IExCX1pXU1BBQ0UgPSAyODsKICAgIHB1YmxpYyBjb25zdCBMQl9ORVhUX0xJTkUgPSAyOTsKICAgIHB1YmxpYyBjb25zdCBMQl9XT1JEX0pPSU5FUiA9IDMwOwogICAgcHVibGljIGNvbnN0IExCX0gyID0gMzE7CiAgICBwdWJsaWMgY29uc3QgTEJfSDMgPSAzMjsKICAgIHB1YmxpYyBjb25zdCBMQl9KTCA9IDMzOwogICAgcHVibGljIGNvbnN0IExCX0pUID0gMzQ7CiAgICBwdWJsaWMgY29uc3QgTEJfSlYgPSAzNTsKICAgIHB1YmxpYyBjb25zdCBMQl9DTE9TRV9QQVJFTlRIRVNJUyA9IDM2OwogICAgcHVibGljIGNvbnN0IExCX0NPTkRJVElPTkFMX0pBUEFORVNFX1NUQVJURVIgPSAzNzsKICAgIHB1YmxpYyBjb25zdCBMQl9IRUJSRVdfTEVUVEVSID0gMzg7CiAgICBwdWJsaWMgY29uc3QgTEJfUkVHSU9OQUxfSU5ESUNBVE9SID0gMzk7CiAgICBwdWJsaWMgY29uc3QgTEJfQ09VTlQgPSA0MzsKICAgIHB1YmxpYyBjb25zdCBOVF9OT05FID0gMDsKICAgIHB1YmxpYyBjb25zdCBOVF9ERUNJTUFMID0gMTsKICAgIHB1YmxpYyBjb25zdCBOVF9ESUdJVCA9IDI7CiAgICBwdWJsaWMgY29uc3QgTlRfTlVNRVJJQyA9IDM7CiAgICBwdWJsaWMgY29uc3QgTlRfQ09VTlQgPSA0OwogICAgcHVibGljIGNvbnN0IEhTVF9OT1RfQVBQTElDQUJMRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgSFNUX0xFQURJTkdfSkFNTyA9IDE7CiAgICBwdWJsaWMgY29uc3QgSFNUX1ZPV0VMX0pBTU8gPSAyOwogICAgcHVibGljIGNvbnN0IEhTVF9UUkFJTElOR19KQU1PID0gMzsKICAgIHB1YmxpYyBjb25zdCBIU1RfTFZfU1lMTEFCTEUgPSA0OwogICAgcHVibGljIGNvbnN0IEhTVF9MVlRfU1lMTEFCTEUgPSA1OwogICAgcHVibGljIGNvbnN0IEhTVF9DT1VOVCA9IDY7CiAgICBwdWJsaWMgY29uc3QgTk9fTlVNRVJJQ19WQUxVRSA9IC0xMjM0NTY3ODk7CiAgICAvKioKICAgICAqIEBzaW5jZSA4LjQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBST1BFUlRZX0lEU19VTkFSWV9PUEVSQVRPUiA9IDcyOwogICAgLyoqCiAgICAgKiBAc2luY2UgOC40CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9JRF9DT01QQVRfTUFUSF9TVEFSVCA9IDczOwogICAgLyoqCiAgICAgKiBAc2luY2UgOC40CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQUk9QRVJUWV9JRF9DT01QQVRfTUFUSF9DT05USU5VRSA9IDc0OwoKICAgIC8qKgogICAgICogQ2hlY2sgYSBiaW5hcnkgVW5pY29kZSBwcm9wZXJ0eSBmb3IgYSBjb2RlIHBvaW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmhhc2JpbmFyeXByb3BlcnR5LnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHBhcmFtIGludCAkcHJvcGVydHkgVGhlIFVuaWNvZGUgcHJvcGVydHkgdG8gbG9va3VwIChzZWUgdGhlIEludGxDaGFyOjpQUk9QRVJUWV8qIGNvbnN0YW50cykuCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgb3IgRkFMU0UgYWNjb3JkaW5nIHRvIHRoZSBiaW5hcnkgVW5pY29kZSBwcm9wZXJ0eSB2YWx1ZSBmb3IgY29kZXBvaW50LgogICAgICogQWxzbyBGQUxTRSBpZiBwcm9wZXJ0eSBpcyBvdXQgb2YgYm91bmRzIG9yIGlmIHRoZSBVbmljb2RlIHZlcnNpb24gZG9lcyBub3QgaGF2ZSBkYXRhIGZvciB0aGUgcHJvcGVydHkgYXQgYWxsLCBvciBub3QgZm9yIHRoaXMgY29kZSBwb2ludC4KICAgICAqIE9yIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZHMuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzQmluYXJ5UHJvcGVydHkoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHByb3BlcnR5CiAgICApOiA/Ym9vbCB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5jaGFyYWdlLnBocAogICAgICogR2V0IHRoZSAiYWdlIiBvZiB0aGUgY29kZSBwb2ludAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBhcnJheXxudWxsIFRoZSBVbmljb2RlIHZlcnNpb24gbnVtYmVyLCBhcyBhbiBhcnJheS4gRm9yIGV4YW1wbGUsIHZlcnNpb24gMS4zLjMxLjIgd291bGQgYmUgcmVwcmVzZW50ZWQgYXMgWzEsIDMsIDMxLCAyXS4KICAgICAqIE9yIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZHMuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hhckFnZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6ID9hcnJheSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5jaGFyZGlnaXR2YWx1ZS5waHAKICAgICAqIEdldCB0aGUgZGVjaW1hbCBkaWdpdCB2YWx1ZSBvZiBhIGRlY2ltYWwgZGlnaXQgY2hhcmFjdGVyCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGludHxudWxsIFRoZSBkZWNpbWFsIGRpZ2l0IHZhbHVlIG9mIGNvZGVwb2ludCwgb3IgLTEgaWYgaXQgaXMgbm90IGEgZGVjaW1hbCBkaWdpdCBjaGFyYWN0ZXIuCiAgICAgKiBPciBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmRzLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoYXJEaWdpdFZhbHVlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2ludCB7fQoKICAgIC8qKgogICAgICogR2V0IGJpZGlyZWN0aW9uYWwgY2F0ZWdvcnkgdmFsdWUgZm9yIGEgY29kZSBwb2ludAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5jaGFyZGlyZWN0aW9uLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCA8cD5UaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKTwvcD4KICAgICAqIEByZXR1cm4gaW50fG51bGwgPHA+VGhlIGJpZGlyZWN0aW9uYWwgY2F0ZWdvcnkgdmFsdWU7IG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICAgICAqIDwvcD4KICAgICAqIDx1bD4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0RJUkVDVElPTl9SSUdIVF9UT19MRUZUIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fRVVST1BFQU5fTlVNQkVSIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRPUiA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfRElSRUNUSU9OX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fQVJBQklDX05VTUJFUiA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfRElSRUNUSU9OX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fQkxPQ0tfU0VQQVJBVE9SIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fU0VHTUVOVF9TRVBBUkFUT1IgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0RJUkVDVElPTl9XSElURV9TUEFDRV9ORVVUUkFMIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fT1RIRVJfTkVVVFJBTCA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfRElSRUNUSU9OX0xFRlRfVE9fUklHSFRfRU1CRURESU5HIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fTEVGVF9UT19SSUdIVF9PVkVSUklERSA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfRElSRUNUSU9OX1JJR0hUX1RPX0xFRlRfQVJBQklDIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fUklHSFRfVE9fTEVGVF9FTUJFRERJTkcgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0RJUkVDVElPTl9SSUdIVF9UT19MRUZUX09WRVJSSURFIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfRElSRUNUSU9OX0RJUl9OT05fU1BBQ0lOR19NQVJLIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fQk9VTkRBUllfTkVVVFJBTCA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfRElSRUNUSU9OX0ZJUlNUX1NUUk9OR19JU09MQVRFIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fTEVGVF9UT19SSUdIVF9JU09MQVRFIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fUklHSFRfVE9fTEVGVF9JU09MQVRFIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9ESVJFQ1RJT05fUE9QX0RJUkVDVElPTkFMX0lTT0xBVEUgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0RJUkVDVElPTl9DSEFSX0RJUkVDVElPTl9DT1VOVCA8L2I+PC9saT4KICAgICAqIDwvdWw+CiAgICAgKiBPciBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmRzLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoYXJEaXJlY3Rpb24oI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQpOiA/aW50IHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmNoYXJmcm9tbmFtZS5waHAKICAgICAqIEZpbmQgVW5pY29kZSBjaGFyYWN0ZXIgYnkgbmFtZSBhbmQgcmV0dXJuIGl0cyBjb2RlIHBvaW50IHZhbHVlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPkZ1bGwgbmFtZSBvZiB0aGUgVW5pY29kZSBjaGFyYWN0ZXIuPC9wPgogICAgICogQHBhcmFtIGludCAkdHlwZSBbb3B0aW9uYWxdIDxwPgogICAgICogV2hpY2ggc2V0IG9mIG5hbWVzIHRvIHVzZSBmb3IgdGhlIGxvb2t1cC4gQ2FuIGJlIGFueSBvZiB0aGVzZSBjb25zdGFudHM6CiAgICAgKiA8L3A+PHVsPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6VU5JQ09ERV9DSEFSX05BTUUgPC9iPiAoZGVmYXVsdCk8L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6VU5JQ09ERV8xMF9DSEFSX05BTUUgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpFWFRFTkRFRF9DSEFSX05BTUUgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX05BTUVfQUxJQVMgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX05BTUVfQ0hPSUNFX0NPVU5UIDwvYj48L2xpPgogICAgICogPC91bD4KICAgICAqIEByZXR1cm4gaW50fG51bGwgVGhlIFVuaWNvZGUgdmFsdWUgb2YgdGhlIGNvZGUgcG9pbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSAoYXMgYW4gaW50ZWdlciksIG9yIE5VTEwgaWYgdGhlcmUgaXMgbm8gc3VjaCBjb2RlIHBvaW50LgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoYXJGcm9tTmFtZSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkdHlwZSA9IEludGxDaGFyOjpVTklDT0RFX0NIQVJfTkFNRQogICAgKTogP2ludCB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5jaGFybWlycm9yLnBocAogICAgICogR2V0IHRoZSAibWlycm9yLWltYWdlIiBjaGFyYWN0ZXIgZm9yIGEgY29kZSBwb2ludAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBpbnR8c3RyaW5nfG51bGwgUmV0dXJucyBhbm90aGVyIFVuaWNvZGUgY29kZSBwb2ludCB0aGF0IG1heSBzZXJ2ZSBhcyBhIG1pcnJvci1pbWFnZSBzdWJzdGl0dXRlLCBvciBjb2RlcG9pbnQgaXRzZWxmIGlmIHRoZXJlIGlzIG5vIHN1Y2ggbWFwcGluZyBvciBjb2RlcG9pbnQgZG9lcyBub3QgaGF2ZSB0aGUgQmlkaV9NaXJyb3JlZCBwcm9wZXJ0eS4KICAgICAqIFRoZSByZXR1cm4gdHlwZSB3aWxsIGJlIGludGVnZXIgdW5sZXNzIHRoZSBjb2RlIHBvaW50IHdhcyBwYXNzZWQgYXMgYSBVVEYtOCBzdHJpbmcsIGluIHdoaWNoIGNhc2UgYSBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZC4KICAgICAqIE9yIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IHdpbGwgYmUgb3V0IG9mIGJvdW5kLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoYXJNaXJyb3IoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQpOiBzdHJpbmd8aW50fG51bGwge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBuYW1lIG9mIGEgVW5pY29kZSBjaGFyYWN0ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuY2hhcm5hbWUucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcGFyYW0gaW50ICR0eXBlIFtvcHRpb25hbF0gV2hpY2ggc2V0IG9mIG5hbWVzIHRvIHVzZSBmb3IgdGhlIGxvb2t1cC4gQ2FuIGJlIGFueSBvZiB0aGVzZSBjb25zdGFudHM6CiAgICAgKiA8dWw+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpVTklDT0RFX0NIQVJfTkFNRSA8L2I+IChkZWZhdWx0KTwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpVTklDT0RFXzEwX0NIQVJfTkFNRSA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkVYVEVOREVEX0NIQVJfTkFNRSA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfTkFNRV9BTElBUyA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfTkFNRV9DSE9JQ0VfQ09VTlQgPC9iPjwvbGk+CiAgICAgKiA8L3VsPgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgY29ycmVzcG9uZGluZyBuYW1lLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gbmFtZSBmb3IgdGhpcyBjaGFyYWN0ZXIsIG9yIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZHMuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hhck5hbWUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHR5cGUgPSBJbnRsQ2hhcjo6VU5JQ09ERV9DSEFSX05BTUUKICAgICk6ID9zdHJpbmcge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgZ2VuZXJhbCBjYXRlZ29yeSB2YWx1ZSBmb3IgYSBjb2RlIHBvaW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmNoYXJ0eXBlLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBpbnR8bnVsbCBSZXR1cm5zIHRoZSBnZW5lcmFsIGNhdGVnb3J5IHR5cGUsIHdoaWNoIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudHM6CiAgICAgKiA8L3A+PHVsPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9DQVRFR09SWV9VTkFTU0lHTkVEIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9DQVRFR09SWV9HRU5FUkFMX09USEVSX1RZUEVTIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9DQVRFR09SWV9VUFBFUkNBU0VfTEVUVEVSIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9DQVRFR09SWV9MT1dFUkNBU0VfTEVUVEVSIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9DQVRFR09SWV9USVRMRUNBU0VfTEVUVEVSIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9DQVRFR09SWV9NT0RJRklFUl9MRVRURVIgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0NBVEVHT1JZX09USEVSX0xFVFRFUiA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfQ0FURUdPUllfTk9OX1NQQUNJTkdfTUFSSyA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfQ0FURUdPUllfRU5DTE9TSU5HX01BUksgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0NBVEVHT1JZX0NPTUJJTklOR19TUEFDSU5HX01BUksgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0NBVEVHT1JZX0RFQ0lNQUxfRElHSVRfTlVNQkVSIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9DQVRFR09SWV9MRVRURVJfTlVNQkVSIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9DQVRFR09SWV9PVEhFUl9OVU1CRVIgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0NBVEVHT1JZX1NQQUNFX1NFUEFSQVRPUiA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfQ0FURUdPUllfTElORV9TRVBBUkFUT1IgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0NBVEVHT1JZX1BBUkFHUkFQSF9TRVBBUkFUT1IgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0NBVEVHT1JZX0NPTlRST0xfQ0hBUiA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfQ0FURUdPUllfRk9STUFUX0NIQVIgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0NBVEVHT1JZX1BSSVZBVEVfVVNFX0NIQVIgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0NBVEVHT1JZX1NVUlJPR0FURSA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfQ0FURUdPUllfREFTSF9QVU5DVFVBVElPTiA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfQ0FURUdPUllfU1RBUlRfUFVOQ1RVQVRJT04gPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0NBVEVHT1JZX0VORF9QVU5DVFVBVElPTiA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfQ0FURUdPUllfQ09OTkVDVE9SX1BVTkNUVUFUSU9OIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9DQVRFR09SWV9PVEhFUl9QVU5DVFVBVElPTiA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfQ0FURUdPUllfTUFUSF9TWU1CT0wgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0NBVEVHT1JZX0NVUlJFTkNZX1NZTUJPTCA8L2I+PC9saT4KICAgICAqIDxsaT48Yj4gSW50bENoYXI6OkNIQVJfQ0FURUdPUllfTU9ESUZJRVJfU1lNQk9MIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9DQVRFR09SWV9PVEhFUl9TWU1CT0wgPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0NBVEVHT1JZX0lOSVRJQUxfUFVOQ1RVQVRJT04gPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+IEludGxDaGFyOjpDSEFSX0NBVEVHT1JZX0ZJTkFMX1BVTkNUVUFUSU9OIDwvYj48L2xpPgogICAgICogPGxpPjxiPiBJbnRsQ2hhcjo6Q0hBUl9DQVRFR09SWV9DSEFSX0NBVEVHT1JZX0NPVU5UIDwvYj48L2xpPjwvdWw+CiAgICAgKiA8cD5PciBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuPC9wCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hhclR5cGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQpOiA/aW50IHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gVW5pY29kZSBjaGFyYWN0ZXIgYnkgY29kZSBwb2ludCB2YWx1ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5jaHIucGhwCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGNvZGVwb2ludCA8cD5UaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKTwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgc2luZ2xlIGNoYXJhY3RlciBzcGVjaWZpZWQgYnkgdGhlIFVuaWNvZGUgY29kZSBwb2ludCB2YWx1ZS4KICAgICAqIE9yIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaHIoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQpOiA/c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGRlY2ltYWwgZGlnaXQgdmFsdWUgb2YgYSBjb2RlIHBvaW50IGZvciBhIGdpdmVuIHJhZGl4CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmRpZ2l0LnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCA8cD5UaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gPGVtPjB4MjYwMzwvZW0+IGZvciA8ZW0+VSsyNjAzIFNOT1dNQU48L2VtPiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiA8ZW0+Ilx1ezI2MDN9IjwvZW0+KTwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGJhc2UgPHA+VGhlIHJhZGl4IChkZWZhdWx0cyB0byAxMCkuPC9wPgogICAgICogQHJldHVybiBpbnR8ZmFsc2V8bnVsbCBSZXR1cm5zIHRoZSBudW1lcmljIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBjaGFyYWN0ZXIgaW4gdGhlIHNwZWNpZmllZCByYWRpeCwKICAgICAqIG9yIDxiPkZBTFNFPC9iPiBpZiB0aGVyZSBpcyBubyB2YWx1ZSBvciBpZiB0aGUgdmFsdWUgZXhjZWVkcyB0aGUgcmFkaXgsCiAgICAgKiBvciA8Yj5OVUxMPC9iPiBpZiA8ZW0+Y29kZXBvaW50PC9lbT4gaXMgb3V0IG9mIGJvdW5kLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRpZ2l0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRiYXNlID0gMTAKICAgICk6IGludHxmYWxzZXxudWxsIHt9CgogICAgLyoqCiAgICAgKiBFbnVtZXJhdGUgYWxsIGFzc2lnbmVkIFVuaWNvZGUgY2hhcmFjdGVycyB3aXRoaW4gYSByYW5nZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5lbnVtY2hhcm5hbWVzLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJHN0YXJ0IFRoZSBmaXJzdCBjb2RlIHBvaW50IGluIHRoZSBlbnVtZXJhdGlvbiByYW5nZS4KICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRlbmQgT25lIG1vcmUgdGhhbiB0aGUgbGFzdCBjb2RlIHBvaW50IGluIHRoZSBlbnVtZXJhdGlvbiByYW5nZSAodGhlIGZpcnN0IG9uZSBhZnRlciB0aGUgcmFuZ2UpLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayA8cD4KICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IGlzIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBjaGFyYWN0ZXIgbmFtZS4gIFRoZSBmb2xsb3dpbmcgdGhyZWUgYXJndW1lbnRzIHdpbGwgYmUgcGFzc2VkIGludG8gaXQ6CiAgICAgKiA8L3A+PHVsPgogICAgICogPGxpPmludGVnZXIgPGVtPiRjb2RlcG9pbnQ8L2VtPiAtIFRoZSBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWU8L2xpPgogICAgICogPGxpPmludGVnZXIgPGVtPiRuYW1lQ2hvaWNlPC9lbT4gLSBUaGUgc2FtZSB2YWx1ZSBhcyB0aGUgPGI+bmFtZUNob2ljZTwvYj4gcGFyYW1ldGVyIGJlbG93PC9saT4KICAgICAqIDxsaT5zdHJpbmcgPGVtPiRuYW1lPC9lbT4gLSBUaGUgbmFtZSBvZiB0aGUgY2hhcmFjdGVyPC9saT4KICAgICAqIDwvdWw+CiAgICAgKiBAcGFyYW0gaW50ICR0eXBlIFtvcHRpb25hbF0gIDxwPgogICAgICogU2VsZWN0b3IgZm9yIHdoaWNoIGtpbmQgb2YgbmFtZXMgdG8gZW51bWVyYXRlLiAgQ2FuIGJlIGFueSBvZiB0aGVzZSBjb25zdGFudHM6CiAgICAgKiA8L3A+PHVsPgogICAgICogPGxpPjxiPkludGxDaGFyOjpVTklDT0RFX0NIQVJfTkFNRTwvYj4gKGRlZmF1bHQpPC9saT4KICAgICAqIDxsaT48Yj5JbnRsQ2hhcjo6VU5JQ09ERV8xMF9DSEFSX05BTUU8L2I+PC9saT4KICAgICAqIDxsaT48Yj5JbnRsQ2hhcjo6RVhURU5ERURfQ0hBUl9OQU1FPC9iPjwvbGk+CiAgICAgKiA8bGk+PGI+SW50bENoYXI6OkNIQVJfTkFNRV9BTElBUzwvYj48L2xpPgogICAgICogPGxpPjxiPkludGxDaGFyOjpDSEFSX05BTUVfQ0hPSUNFX0NPVU5UPC9iPjwvbGk+CiAgICAgKiA8L3VsPgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICdib29sJ10sIGRlZmF1bHQ6ICdib29sfG51bGwnKV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW51bUNoYXJOYW1lcygKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHN0YXJ0LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZW5kLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2NhbGxhYmxlJ10sIGRlZmF1bHQ6ICcnKV0gJGNhbGxiYWNrLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICR0eXBlID0gSW50bENoYXI6OlVOSUNPREVfQ0hBUl9OQU1FCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBFbnVtZXJhdGUgYWxsIGNvZGUgcG9pbnRzIHdpdGggdGhlaXIgVW5pY29kZSBnZW5lcmFsIGNhdGVnb3JpZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuZW51bWNoYXJ0eXBlcy5waHAKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sgPHA+CiAgICAgKiBUaGUgZnVuY3Rpb24gdGhhdCBpcyB0byBiZSBjYWxsZWQgZm9yIGVhY2ggY29udGlndW91cyByYW5nZSBvZiBjb2RlIHBvaW50cyB3aXRoIHRoZSBzYW1lIGdlbmVyYWwgY2F0ZWdvcnkuCiAgICAgKiBUaGUgZm9sbG93aW5nIHRocmVlIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCBpbnRvIGl0OgogICAgICogPC9wPjx1bD4KICAgICAqIDxsaT5pbnRlZ2VyIDxlbT4kc3RhcnQ8L2VtPiAtIFRoZSBzdGFydGluZyBjb2RlIHBvaW50IG9mIHRoZSByYW5nZTwvbGk+CiAgICAgKiA8bGk+aW50ZWdlciA8ZW0+JGVuZDwvZW0+IC0gVGhlIGVuZGluZyBjb2RlIHBvaW50IG9mIHRoZSByYW5nZTwvbGk+CiAgICAgKiA8bGk+aW50ZWdlciA8ZW0+JG5hbWU8L2VtPiAtIFRoZSBjYXRlZ29yeSB0eXBlIChvbmUgb2YgdGhlIDxlbT5JbnRsQ2hhcjo6Q0hBUl9DQVRFR09SWV8qPC9lbT4gY29uc3RhbnRzKTwvbGk+CiAgICAgKiA8L3VsPgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVudW1DaGFyVHlwZXMoCiAgICAgICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4wJywgdG86ICc3LjQnKV0gJGNhbGxiYWNrID0gbnVsbCwKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICApOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtIGNhc2UgZm9sZGluZyBvbiBhIGNvZGUgcG9pbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuZm9sZGNhc2UucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcGFyYW0gaW50ICRvcHRpb25zIFtvcHRpb25hbF0gRWl0aGVyIEludGxDaGFyOjpGT0xEX0NBU0VfREVGQVVMVCAoZGVmYXVsdCkgb3IgSW50bENoYXI6OkZPTERfQ0FTRV9FWENMVURFX1NQRUNJQUxfSS4KICAgICAqIEByZXR1cm4gaW50fHN0cmluZ3xudWxsIFJldHVybnMgdGhlIFNpbXBsZV9DYXNlX0ZvbGRpbmcgb2YgdGhlIGNvZGUgcG9pbnQsIGlmIGFueTsgb3RoZXJ3aXNlIHRoZSBjb2RlIHBvaW50IGl0c2VsZi4KICAgICAqIFJldHVybnMgTlVMTCBpZiA8ZW0+Y29kZXBvaW50PC9lbT4gaXMgb3V0IG9mIGJvdW5kLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZvbGRDYXNlKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRvcHRpb25zID0gSW50bENoYXI6OkZPTERfQ0FTRV9ERUZBVUxUCiAgICApOiBzdHJpbmd8aW50fG51bGwge30KCiAgICAvKioKICAgICAqIEdldCBjaGFyYWN0ZXIgcmVwcmVzZW50YXRpb24gZm9yIGEgZ2l2ZW4gZGlnaXQgYW5kIHJhZGl4CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmZvcmRpZ2l0LnBocAogICAgICogQHBhcmFtIGludCAkZGlnaXQgPHA+VGhlIG51bWJlciB0byBjb252ZXJ0IHRvIGEgY2hhcmFjdGVyLjwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGJhc2UgW29wdGlvbmFsXSA8cD5UaGUgcmFkaXggKGRlZmF1bHRzIHRvIDEwKS48L3A+CiAgICAgKiBAcmV0dXJuIGludCBUaGUgY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9uIChhcyBhIHN0cmluZykgb2YgdGhlIHNwZWNpZmllZCBkaWdpdCBpbiB0aGUgc3BlY2lmaWVkIHJhZGl4LgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZvckRpZ2l0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRkaWdpdCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkYmFzZSA9IDEwCiAgICApOiBpbnQge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgcGFpcmVkIGJyYWNrZXQgY2hhcmFjdGVyIGZvciBhIGNvZGUgcG9pbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuZ2V0YmlkaXBhaXJlZGJyYWNrZXQucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IDxwPlRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpPC9wPgogICAgICogQHJldHVybiBpbnR8c3RyaW5nfG51bGwgIFJldHVybnMgdGhlIHBhaXJlZCBicmFja2V0IGNvZGUgcG9pbnQsIG9yIDxlbT5jb2RlcG9pbnQ8L2VtPiBpdHNlbGYgaWYgdGhlcmUgaXMgbm8gc3VjaCBtYXBwaW5nLgogICAgICogVGhlIHJldHVybiB0eXBlIHdpbGwgYmUgaW50ZWdlciB1bmxlc3MgdGhlIGNvZGUgcG9pbnQgd2FzIHBhc3NlZCBhcyBhIFVURi04IHN0cmluZywgaW4gd2hpY2ggY2FzZSBhIHN0cmluZyB3aWxsIGJlIHJldHVybmVkLgogICAgICogT3IgTlVMTCBpZiA8ZW0+Y29kZXBvaW50PC9lbT4gaXMgb3V0IG9mIGJvdW5kLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEJpZGlQYWlyZWRCcmFja2V0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogc3RyaW5nfGludHxudWxsIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIFVuaWNvZGUgYWxsb2NhdGlvbiBibG9jayBjb250YWluaW5nIGEgY29kZSBwb2ludAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5nZXRibG9ja2NvZGUucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGludHxudWxsIFJldHVybnMgdGhlIGJsb2NrIHZhbHVlIGZvciA8ZW0+Y29kZXBvaW50PC9lbT4sIG9yIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIFNlZSB0aGUgPGVtPkludGxDaGFyOjpCTE9DS19DT0RFXyo8L2VtPiBjb25zdGFudHMgZm9yIHBvc3NpYmxlIHJldHVybiB2YWx1ZXMuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QmxvY2tDb2RlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2ludCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb21iaW5pbmcgY2xhc3Mgb2YgYSBjb2RlIHBvaW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmdldGNvbWJpbmluZ2NsYXNzLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBpbnR8bnVsbCBSZXR1cm5zIHRoZSBjb21iaW5pbmcgY2xhc3Mgb2YgdGhlIGNoYXJhY3Rlci4KICAgICAqIE9yIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDb21iaW5pbmdDbGFzcygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6ID9pbnQge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgRkNfTkZLQ19DbG9zdXJlIHByb3BlcnR5IGZvciBhIGNvZGUgcG9pbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuZ2V0ZmMtbmZrYy1jbG9zdXJlLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2V8bnVsbCBSZXR1cm5zIHRoZSBGQ19ORktDX0Nsb3N1cmUgcHJvcGVydHkgc3RyaW5nIGZvciB0aGUgY29kZXBvaW50LCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm9uZSwKICAgICAqIG9yIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZCwKICAgICAqIG9yIEZBTFNFIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGQ19ORktDX0Nsb3N1cmUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQpOiBzdHJpbmd8ZmFsc2V8bnVsbCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBtYXggdmFsdWUgZm9yIGEgVW5pY29kZSBwcm9wZXJ0eQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5nZXRpbnRwcm9wZXJ0eW1heHZhbHVlLnBocAogICAgICogQHBhcmFtIGludCAkcHJvcGVydHkgVGhlIFVuaWNvZGUgcHJvcGVydHkgdG8gbG9va3VwIChzZWUgdGhlIEludGxDaGFyOjpQUk9QRVJUWV8qIGNvbnN0YW50cykuCiAgICAgKiBAcmV0dXJuIGludCBUaGUgbWF4aW11bSB2YWx1ZSByZXR1cm5lZCBieSB7QHNlZSBJbnRsQ2hhcjo6Z2V0SW50UHJvcGVydHlWYWx1ZSgpfSBmb3IgYSBVbmljb2RlIHByb3BlcnR5LiA8PTAgaWYgdGhlIHByb3BlcnR5IHNlbGVjdG9yIGlzIG91dCBvZiByYW5nZS4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbnRQcm9wZXJ0eU1heFZhbHVlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRwcm9wZXJ0eSk6IGludCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBtaW4gdmFsdWUgZm9yIGEgVW5pY29kZSBwcm9wZXJ0eQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5nZXRpbnRwcm9wZXJ0eW1pbnZhbHVlLnBocAogICAgICogQHBhcmFtIGludCAkcHJvcGVydHkgVGhlIFVuaWNvZGUgcHJvcGVydHkgdG8gbG9va3VwIChzZWUgdGhlIEludGxDaGFyOjpQUk9QRVJUWV8qIGNvbnN0YW50cykuCiAgICAgKiBAcmV0dXJuIGludCBUaGUgbWluaW11bSB2YWx1ZSByZXR1cm5lZCBieSB7QHNlZSBJbnRsQ2hhcjo6Z2V0SW50UHJvcGVydHlWYWx1ZSgpfSBmb3IgYSBVbmljb2RlIHByb3BlcnR5LiAwIGlmIHRoZSBwcm9wZXJ0eSBzZWxlY3RvciBpcyBvdXQgb2YgcmFuZ2UuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW50UHJvcGVydHlNaW5WYWx1ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkcHJvcGVydHkpOiBpbnQge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgdmFsdWUgZm9yIGEgVW5pY29kZSBwcm9wZXJ0eSBmb3IgYSBjb2RlIHBvaW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmdldGludHByb3BlcnR5dmFsdWUucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcGFyYW0gaW50ICRwcm9wZXJ0eSBUaGUgVW5pY29kZSBwcm9wZXJ0eSB0byBsb29rdXAgKHNlZSB0aGUgSW50bENoYXI6OlBST1BFUlRZXyogY29uc3RhbnRzKS4KICAgICAqIEByZXR1cm4gaW50fG51bGwgPHA+CiAgICAgKiBSZXR1cm5zIHRoZSBudW1lcmljIHZhbHVlIHRoYXQgaXMgZGlyZWN0bHkgdGhlIHByb3BlcnR5IHZhbHVlIG9yLCBmb3IgZW51bWVyYXRlZCBwcm9wZXJ0aWVzLCBjb3JyZXNwb25kcyB0byB0aGUKICAgICAqIG51bWVyaWMgdmFsdWUgb2YgdGhlIGVudW1lcmF0ZWQgY29uc3RhbnQgb2YgdGhlIHJlc3BlY3RpdmUgcHJvcGVydHkgdmFsdWUgZW51bWVyYXRpb24gdHlwZS4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogUmV0dXJucyA8ZW0+MDwvZW0+IG9yIDxlbT4xPC9lbT4gKGZvciA8Yj5GQUxTRTwvYj48Yj4vPC9iPjxiPlRSVUU8L0I+KSBmb3IgYmluYXJ5IFVuaWNvZGUgcHJvcGVydGllcy4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogUmV0dXJucyBhIGJpdC1tYXNrIGZvciBtYXNrIHByb3BlcnRpZXMuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIFJldHVybnMgPGVtPjA8L2VtPiBpZiA8ZW0+cHJvcGVydHk8L2VtPiBpcyBvdXQgb2YgYm91bmRzIG9yIGlmIHRoZSBVbmljb2RlIHZlcnNpb24gZG9lcyBub3QKICAgICAqIGhhdmUgZGF0YSBmb3IgdGhlIHByb3BlcnR5IGF0IGFsbCwgb3Igbm90IGZvciB0aGlzIGNvZGUgcG9pbnQuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIFJldHVybnMgTlVMTCBpZiA8ZW0+Y29kZXBvaW50PC9lbT4gaXMgb3V0IG9mIGJvdW5kLgogICAgICogPC9wPgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEludFByb3BlcnR5VmFsdWUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHByb3BlcnR5CiAgICApOiA/aW50IHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG51bWVyaWMgdmFsdWUgZm9yIGEgVW5pY29kZSBjb2RlIHBvaW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmdldG51bWVyaWN2YWx1ZS5waHAKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRjb2RlcG9pbnQgVGhlIGludGVnZXIgY29kZXBvaW50IHZhbHVlIChlLmcuIDB4MjYwMyBmb3IgVSsyNjAzIFNOT1dNQU4pLCBvciB0aGUgY2hhcmFjdGVyIGVuY29kZWQgYXMgYSBVVEYtOCBzdHJpbmcgKGUuZy4gIlx1ezI2MDN9IikKICAgICAqIEByZXR1cm4gZmxvYXR8bnVsbCBOdW1lcmljIHZhbHVlIG9mIGNvZGVwb2ludCwgb3IgZmxvYXQoLTEyMzQ1Njc4OSkgaWYgbm9uZSBpcyBkZWZpbmVkLCBvciBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TnVtZXJpY1ZhbHVlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Zsb2F0IHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHByb3BlcnR5IGNvbnN0YW50IHZhbHVlIGZvciBhIGdpdmVuIHByb3BlcnR5IG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuZ2V0cHJvcGVydHllbnVtLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMgVGhlIHByb3BlcnR5IG5hbWUgdG8gYmUgbWF0Y2hlZC4gVGhlIG5hbWUgaXMgY29tcGFyZWQgdXNpbmcgImxvb3NlIG1hdGNoaW5nIiBhcyBkZXNjcmliZWQgaW4gUHJvcGVydHlBbGlhc2VzLnR4dC4KICAgICAqIEByZXR1cm4gaW50IFJldHVybnMgYW4gSW50bENoYXI6OlBST1BFUlRZXyBjb25zdGFudCB2YWx1ZSwgb3IgPGI+SW50bENoYXI6OlBST1BFUlRZX0lOVkFMSURfQ09ERTwvYj4gaWYgdGhlIGdpdmVuIG5hbWUgZG9lcyBub3QgbWF0Y2ggYW55IHByb3BlcnR5LgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFByb3BlcnR5RW51bSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkYWxpYXMpOiBpbnQge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgVW5pY29kZSBuYW1lIGZvciBhIHByb3BlcnR5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmdldHByb3BlcnR5bmFtZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJHByb3BlcnR5IDxwPlRoZSBVbmljb2RlIHByb3BlcnR5IHRvIGxvb2t1cCAoc2VlIHRoZSBJbnRsQ2hhcjo6UFJPUEVSVFlfKiBjb25zdGFudHMpLjwvcD4KICAgICAqIDxwPjxiPkludGxDaGFyOjpQUk9QRVJUWV9JTlZBTElEX0NPREU8L2I+IHNob3VsZCBub3QgYmUgdXNlZC4gQWxzbywgaWYgcHJvcGVydHkgaXMgb3V0IG9mIHJhbmdlLCBGQUxTRSBpcyByZXR1cm5lZC48L3A+CiAgICAgKiBAcGFyYW0gaW50ICR0eXBlIDxwPiBTZWxlY3RvciBmb3Igd2hpY2ggbmFtZSB0byBnZXQuIElmIG91dCBvZiByYW5nZSwgRkFMU0UgaXMgcmV0dXJuZWQuPC9wPgogICAgICogPHA+QWxsIHByb3BlcnRpZXMgaGF2ZSBhIGxvbmcgbmFtZS4gTW9zdCBoYXZlIGEgc2hvcnQgbmFtZSwgYnV0IHNvbWUgZG8gbm90LiBVbmljb2RlIGFsbG93cyBmb3IgYWRkaXRpb25hbCBuYW1lczsgaWYgcHJlc2VudCB0aGVzZSB3aWxsIGJlIHJldHVybmVkIGJ5IGFkZGluZyAxLCAyLCBldGMuIHRvIDxiPkludGxDaGFyOjpMT05HX1BST1BFUlRZX05BTUU8L2I+LjwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIDxwPgogICAgICogUmV0dXJucyB0aGUgbmFtZSwgb3IgPGI+RkFMU0U8L2I+IGlmIGVpdGhlciB0aGUgPGVtPnByb3BlcnR5PC9lbT4gb3IgdGhlIDxlbT5uYW1lQ2hvaWNlPC9lbT4KICAgICAqIGlzIG91dCBvZiByYW5nZS4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogSWYgYSBnaXZlbiA8ZW0+bmFtZUNob2ljZTwvZW0+IHJldHVybnMgPGI+RkFMU0U8L2I+LCB0aGVuIGFsbCBsYXJnZXIgdmFsdWVzIG9mCiAgICAgKiA8ZW0+bmFtZUNob2ljZTwvZW0+IHdpbGwgcmV0dXJuIDxiPkZBTFNFPC9iPiwgd2l0aCBvbmUgZXhjZXB0aW9uOiBpZiA8Yj5GQUxTRTwvYj4gaXMgcmV0dXJuZWQgZm9yCiAgICAgKiA8Yj5JbnRsQ2hhcjo6U0hPUlRfUFJPUEVSVFlfTkFNRTwvYj4sIHRoZW4gPGI+SW50bENoYXI6OkxPTkdfUFJPUEVSVFlfTkFNRTwvYj4KICAgICAqIChhbmQgaGlnaGVyKSBtYXkgc3RpbGwgcmV0dXJuIGEgbm9uLTxiPkZBTFNFPC9iPiB2YWx1ZS4KICAgICAqIDwvcD4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQcm9wZXJ0eU5hbWUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHByb3BlcnR5LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICR0eXBlID0gSW50bENoYXI6OkxPTkdfUFJPUEVSVFlfTkFNRQogICAgKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHByb3BlcnR5IHZhbHVlIGZvciBhIGdpdmVuIHZhbHVlIG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuZ2V0cHJvcGVydHl2YWx1ZWVudW0ucGhwCiAgICAgKiBAcGFyYW0gaW50ICRwcm9wZXJ0eSA8cD5UaGUgVW5pY29kZSBwcm9wZXJ0eSB0byBsb29rdXAgKHNlZSB0aGUgSW50bENoYXI6OlBST1BFUlRZXyogY29uc3RhbnRzKS4KICAgICAqIElmIG91dCBvZiByYW5nZSwgb3IgdGhpcyBtZXRob2QgZG9lc24ndCB3b3JrIHdpdGggdGhlIGdpdmVuIHZhbHVlLCBJbnRsQ2hhcjo6UFJPUEVSVFlfSU5WQUxJRF9DT0RFIGlzIHJldHVybmVkPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4gVGhlIHZhbHVlIG5hbWUgdG8gYmUgbWF0Y2hlZC4gVGhlIG5hbWUgaXMgY29tcGFyZWQgdXNpbmcgImxvb3NlIG1hdGNoaW5nIiBhcyBkZXNjcmliZWQgaW4gUHJvcGVydHlWYWx1ZUFsaWFzZXMudHh0LjwvcD4KICAgICAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW50ZWdlciwgb3IgSW50bENoYXI6OlBST1BFUlRZX0lOVkFMSURfQ09ERSBpZiB0aGUgZ2l2ZW4gbmFtZSBkb2VzIG5vdCBtYXRjaCBhbnkgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LCBvciBpZiB0aGUgcHJvcGVydHkgaXMgaW52YWxpZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRQcm9wZXJ0eVZhbHVlRW51bSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkcHJvcGVydHksCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUKICAgICk6IGludCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBVbmljb2RlIG5hbWUgZm9yIGEgcHJvcGVydHkgdmFsdWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuZ2V0cHJvcGVydHl2YWx1ZW5hbWUucGhwCiAgICAgKiBAcGFyYW0gaW50ICRwcm9wZXJ0eSA8cD4KICAgICAqIFRoZSBVbmljb2RlIHByb3BlcnR5IHRvIGxvb2t1cCAoc2VlIHRoZSBJbnRsQ2hhcjo6UFJPUEVSVFlfKiBjb25zdGFudHMpLgogICAgICogSWYgb3V0IG9mIHJhbmdlLCBvciB0aGlzIG1ldGhvZCBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUsIEZBTFNFIGlzIHJldHVybmVkLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkdmFsdWUgPHA+CiAgICAgKiBTZWxlY3RvciBmb3IgYSB2YWx1ZSBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LiBJZiBvdXQgb2YgcmFuZ2UsIDxiPkZBTFNFPC9iPiBpcyByZXR1cm5lZC4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogSW4gZ2VuZXJhbCwgdmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gPGVtPjA8L2VtPiB1cCB0byBzb21lIG1heGltdW0uIFRoZXJlIGFyZSBhIGNvdXBsZSBleGNlcHRpb25zOgogICAgICogPC9wPjx1bD4KICAgICAqIDxsaT4KICAgICAqIDxiPkludGxDaGFyOjpQUk9QRVJUWV9CTE9DSzwvYj4gdmFsdWVzIGJlZ2luIGF0IHRoZSBub24temVybyB2YWx1ZSA8Yj5JbnRsQ2hhcjo6QkxPQ0tfQ09ERV9CQVNJQ19MQVRJTjwvYj4KICAgICAqIDwvbGk+CiAgICAgKiA8bGk+CiAgICAgKiA8Yj5JbnRsQ2hhcjo6UFJPUEVSVFlfQ0FOT05JQ0FMX0NPTUJJTklOR19DTEFTUzwvYj4gdmFsdWVzIGFyZSBub3QgY29udGlndW91cyBhbmQgcmFuZ2UgZnJvbSAwLi4yNDAuCiAgICAgKiA8L2xpPgogICAgICogPC91bD4KICAgICAqIEBwYXJhbSBpbnQgJHR5cGUgW29wdGlvbmFsXSA8cD4KICAgICAqIFNlbGVjdG9yIGZvciB3aGljaCBuYW1lIHRvIGdldC4gSWYgb3V0IG9mIHJhbmdlLCBGQUxTRSBpcyByZXR1cm5lZC4KICAgICAqIEFsbCB2YWx1ZXMgaGF2ZSBhIGxvbmcgbmFtZS4gTW9zdCBoYXZlIGEgc2hvcnQgbmFtZSwgYnV0IHNvbWUgZG8gbm90LiBVbmljb2RlIGFsbG93cyBmb3IgYWRkaXRpb25hbCBuYW1lczsgaWYgcHJlc2VudCB0aGVzZSB3aWxsIGJlIHJldHVybmVkIGJ5IGFkZGluZyAxLCAyLCBldGMuIHRvIEludGxDaGFyOjpMT05HX1BST1BFUlRZX05BTUUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuICBzdHJpbmd8ZmFsc2UgUmV0dXJucyB0aGUgbmFtZSwgb3IgRkFMU0UgaWYgZWl0aGVyIHRoZSBwcm9wZXJ0eSBvciB0aGUgbmFtZUNob2ljZSBpcyBvdXQgb2YgcmFuZ2UuCiAgICAgKiBJZiBhIGdpdmVuIG5hbWVDaG9pY2UgcmV0dXJucyBGQUxTRSwgdGhlbiBhbGwgbGFyZ2VyIHZhbHVlcyBvZiBuYW1lQ2hvaWNlIHdpbGwgcmV0dXJuIEZBTFNFLCB3aXRoIG9uZSBleGNlcHRpb246IGlmIEZBTFNFIGlzIHJldHVybmVkIGZvciBJbnRsQ2hhcjo6U0hPUlRfUFJPUEVSVFlfTkFNRSwgdGhlbiBJbnRsQ2hhcjo6TE9OR19QUk9QRVJUWV9OQU1FIChhbmQgaGlnaGVyKSBtYXkgc3RpbGwgcmV0dXJuIGEgbm9uLUZBTFNFIHZhbHVlLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFByb3BlcnR5VmFsdWVOYW1lKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRwcm9wZXJ0eSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHR5cGUgPSBJbnRsQ2hhcjo6TE9OR19QUk9QRVJUWV9OQU1FCiAgICApOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgVW5pY29kZSB2ZXJzaW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmdldHVuaWNvZGV2ZXJzaW9uLnBocAogICAgICogQHJldHVybiBhcnJheSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBVbmljb2RlIHZlcnNpb24gbnVtYmVyLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVuaWNvZGVWZXJzaW9uKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBjb2RlIHBvaW50IGlzIGFuIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuaXNhbG51bS5waHAKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRjb2RlcG9pbnQgVGhlIGludGVnZXIgY29kZXBvaW50IHZhbHVlIChlLmcuIDB4MjYwMyBmb3IgVSsyNjAzIFNOT1dNQU4pLCBvciB0aGUgY2hhcmFjdGVyIGVuY29kZWQgYXMgYSBVVEYtOCBzdHJpbmcgKGUuZy4gIlx1ezI2MDN9IikKICAgICAqIEByZXR1cm4gYm9vbHxudWxsIFJldHVybnMgVFJVRSBpZiBjb2RlcG9pbnQgaXMgYW4gYWxwaGFudW1lcmljIGNoYXJhY3RlciwgRkFMU0UgaWYgbm90LCBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNhbG51bSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6ID9ib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBjb2RlIHBvaW50IGlzIGEgbGV0dGVyIGNoYXJhY3RlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5pc2FscGhhLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBib29sfG51bGwgUmV0dXJucyBUUlVFIGlmIGNvZGVwb2ludCBpcyBhIGxldHRlciBjaGFyYWN0ZXIsIEZBTFNFIGlmIG5vdCwgTlVMTCBpZiA8ZW0+Y29kZXBvaW50PC9lbT4gaXMgb3V0IG9mIGJvdW5kLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzYWxwaGEoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQpOiA/Ym9vbCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgY29kZSBwb2ludCBpcyBhIGJhc2UgY2hhcmFjdGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmlzYmFzZS5waHAKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRjb2RlcG9pbnQgVGhlIGludGVnZXIgY29kZXBvaW50IHZhbHVlIChlLmcuIDB4MjYwMyBmb3IgVSsyNjAzIFNOT1dNQU4pLCBvciB0aGUgY2hhcmFjdGVyIGVuY29kZWQgYXMgYSBVVEYtOCBzdHJpbmcgKGUuZy4gIlx1ezI2MDN9IikKICAgICAqIEByZXR1cm4gYm9vbHxudWxsIFJldHVybnMgVFJVRSBpZiBjb2RlcG9pbnQgaXMgYSBiYXNlIGNoYXJhY3RlciwgRkFMU0UgaWYgbm90LCBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNiYXNlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGNvZGUgcG9pbnQgaXMgYSAiYmxhbmsiIG9yICJob3Jpem9udGFsIHNwYWNlIiBjaGFyYWN0ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuaXNibGFuay5waHAKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRjb2RlcG9pbnQgVGhlIGludGVnZXIgY29kZXBvaW50IHZhbHVlIChlLmcuIDB4MjYwMyBmb3IgVSsyNjAzIFNOT1dNQU4pLCBvciB0aGUgY2hhcmFjdGVyIGVuY29kZWQgYXMgYSBVVEYtOCBzdHJpbmcgKGUuZy4gIlx1ezI2MDN9IikKICAgICAqIEByZXR1cm4gYm9vbHxudWxsIFJldHVybnMgVFJVRSBpZiBjb2RlcG9pbnQgaXMgZWl0aGVyIGEgImJsYW5rIiBvciAiaG9yaXpvbnRhbCBzcGFjZSIgY2hhcmFjdGVyLCBGQUxTRSBpZiBub3QsIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc2JsYW5rKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGNvZGUgcG9pbnQgaXMgYSBjb250cm9sIGNoYXJhY3RlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5pc2NudHJsLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBib29sfG51bGwgUmV0dXJucyBUUlVFIGlmIGNvZGVwb2ludCBpcyBhIGNvbnRyb2wgY2hhcmFjdGVyLCBGQUxTRSBpZiBub3QsIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc2NudHJsKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGNvZGUgcG9pbnQgaXMgZGVmaW5lZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5pc2RlZmluZWQucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgaWYgY29kZXBvaW50IGlzIGEgZGVmaW5lZCBjaGFyYWN0ZXIsIEZBTFNFIGlmIG5vdCwgTlVMTCBpZiA8ZW0+Y29kZXBvaW50PC9lbT4gaXMgb3V0IG9mIGJvdW5kLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzZGVmaW5lZCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6ID9ib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBjb2RlIHBvaW50IGlzIGEgZGlnaXQgY2hhcmFjdGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmlzZGlnaXQucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgaWYgY29kZXBvaW50IGlzIGEgZGlnaXQgY2hhcmFjdGVyLCBGQUxTRSBpZiBub3QsIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc2RpZ2l0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGNvZGUgcG9pbnQgaXMgYSBncmFwaGljIGNoYXJhY3RlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5pc2dyYXBoLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBib29sfG51bGwgUmV0dXJucyBUUlVFIGlmIGNvZGVwb2ludCBpcyBhICJncmFwaGljIiBjaGFyYWN0ZXIsIEZBTFNFIGlmIG5vdCwgTlVMTCBpZiA8ZW0+Y29kZXBvaW50PC9lbT4gaXMgb3V0IG9mIGJvdW5kLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzZ3JhcGgoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQpOiA/Ym9vbCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgY29kZSBwb2ludCBpcyBhbiBpZ25vcmFibGUgY2hhcmFjdGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmlzaWRpZ25vcmFibGUucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgaWYgY29kZXBvaW50IGlzIGlnbm9yYWJsZSBpbiBpZGVudGlmaWVycywgRkFMU0UgaWYgbm90LCBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNJRElnbm9yYWJsZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6ID9ib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBjb2RlIHBvaW50IGlzIHBlcm1pc3NpYmxlIGluIGFuIGlkZW50aWZpZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuaXNpZHBhcnQucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgaWYgY29kZXBvaW50IGlzIHRoZSBjb2RlIHBvaW50IG1heSBvY2N1ciBpbiBhbiBpZGVudGlmaWVyLCBGQUxTRSBpZiBub3QsIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0lEUGFydCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6ID9ib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBjb2RlIHBvaW50IGlzIHBlcm1pc3NpYmxlIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gYW4gaWRlbnRpZmllcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5pc2lkc3RhcnQucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgaWYgY29kZXBvaW50IG1heSBzdGFydCBhbiBpZGVudGlmaWVyLCBGQUxTRSBpZiBub3QsIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0lEU3RhcnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQpOiA/Ym9vbCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgY29kZSBwb2ludCBpcyBhbiBJU08gY29udHJvbCBjb2RlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmlzaXNvY29udHJvbC5waHAKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRjb2RlcG9pbnQgVGhlIGludGVnZXIgY29kZXBvaW50IHZhbHVlIChlLmcuIDB4MjYwMyBmb3IgVSsyNjAzIFNOT1dNQU4pLCBvciB0aGUgY2hhcmFjdGVyIGVuY29kZWQgYXMgYSBVVEYtOCBzdHJpbmcgKGUuZy4gIlx1ezI2MDN9IikKICAgICAqIEByZXR1cm4gYm9vbHxudWxsIFJldHVybnMgVFJVRSBpZiBjb2RlcG9pbnQgaXMgYW4gSVNPIGNvbnRyb2wgY29kZSwgRkFMU0UgaWYgbm90LCBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNJU09Db250cm9sKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGNvZGUgcG9pbnQgaXMgcGVybWlzc2libGUgaW4gYSBKYXZhIGlkZW50aWZpZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuaXNqYXZhaWRwYXJ0LnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBib29sfG51bGwgUmV0dXJucyBUUlVFIGlmIGNvZGVwb2ludCBtYXkgb2NjdXIgaW4gYSBKYXZhIGlkZW50aWZpZXIsIEZBTFNFIGlmIG5vdCwgTlVMTCBpZiA8ZW0+Y29kZXBvaW50PC9lbT4gaXMgb3V0IG9mIGJvdW5kLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzSmF2YUlEUGFydCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6ID9ib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBjb2RlIHBvaW50IGlzIHBlcm1pc3NpYmxlIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gYSBKYXZhIGlkZW50aWZpZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuaXNqYXZhaWRzdGFydC5waHAKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRjb2RlcG9pbnQgVGhlIGludGVnZXIgY29kZXBvaW50IHZhbHVlIChlLmcuIDB4MjYwMyBmb3IgVSsyNjAzIFNOT1dNQU4pLCBvciB0aGUgY2hhcmFjdGVyIGVuY29kZWQgYXMgYSBVVEYtOCBzdHJpbmcgKGUuZy4gIlx1ezI2MDN9IikKICAgICAqIEByZXR1cm4gYm9vbHxudWxsIFJldHVybnMgVFJVRSBpZiBjb2RlcG9pbnQgbWF5IHN0YXJ0IGEgSmF2YSBpZGVudGlmaWVyLCBGQUxTRSBpZiBub3QsIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0phdmFJRFN0YXJ0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGNvZGUgcG9pbnQgaXMgYSBzcGFjZSBjaGFyYWN0ZXIgYWNjb3JkaW5nIHRvIEphdmEKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuaXNqYXZhc3BhY2VjaGFyLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBib29sfG51bGwgUmV0dXJucyBUUlVFIGlmIGNvZGVwb2ludCBpcyBhIHNwYWNlIGNoYXJhY3RlciBhY2NvcmRpbmcgdG8gSmF2YSwgRkFMU0UgaWYgbm90LCBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNKYXZhU3BhY2VDaGFyKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGNvZGUgcG9pbnQgaXMgYSBsb3dlcmNhc2UgbGV0dGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmlzbG93ZXIucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IDxwPlRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwKICAgICAqIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKTwvcD4KICAgICAqIEByZXR1cm4gYm9vbHxudWxsIFJldHVybnMgVFJVRSBpZiBjb2RlcG9pbnQgaXMgYW4gTGwgbG93ZXJjYXNlIGxldHRlciwgRkFMU0UgaWYgbm90LCBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNsb3dlcigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6ID9ib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBjb2RlIHBvaW50IGhhcyB0aGUgQmlkaV9NaXJyb3JlZCBwcm9wZXJ0eQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5pc21pcnJvcmVkLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCA8cD5UaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gPGVtPjB4MjYwMzwvZW0+IGZvciA8ZW0+VSsyNjAzIFNOT1dNQU48L2VtPiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiA8ZW0+Ilx1ezI2MDN9IjwvZW0+KTwvcD4KICAgICAqIEByZXR1cm4gYm9vbHxudWxsIFJldHVybnMgVFJVRSBpZiBjb2RlcG9pbnQgaGFzIHRoZSBCaWRpX01pcnJvcmVkIHByb3BlcnR5LCBGQUxTRSBpZiBub3QsIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc01pcnJvcmVkKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGNvZGUgcG9pbnQgaXMgYSBwcmludGFibGUgY2hhcmFjdGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmlzcHJpbnQucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IDxwPlRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiA8ZW0+MHgyNjAzPC9lbT4gZm9yIDxlbT5VKzI2MDMgU05PV01BTjwvZW0+KSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuIDxlbT4iXHV7MjYwM30iPC9lbT4pPC9wPgogICAgICogQHJldHVybiBib29sfG51bGwgUmV0dXJucyBUUlVFIGlmIGNvZGVwb2ludCBpcyBhIHByaW50YWJsZSBjaGFyYWN0ZXIsIEZBTFNFIGlmIG5vdCwgTlVMTCBpZiA8ZW0+Y29kZXBvaW50PC9lbT4gaXMgb3V0IG9mIGJvdW5kLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzcHJpbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQpOiA/Ym9vbCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgY29kZSBwb2ludCBpcyBwdW5jdHVhdGlvbiBjaGFyYWN0ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIuaXNwdW5jdC5waHAKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRjb2RlcG9pbnQgPHA+VGhlIGludGVnZXIgY29kZXBvaW50IHZhbHVlIChlLmcuIDxlbT4weDI2MDM8L2VtPiBmb3IgPGVtPlUrMjYwMyBTTk9XTUFOPC9lbT4pLAogICAgICogb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuIDxlbT4iXHV7MjYwM30iPC9lbT4pPC9wPgogICAgICogQHJldHVybiBib29sfG51bGwgUmV0dXJucyBUUlVFIGlmIGNvZGVwb2ludCBpcyBhIHB1bmN0dWF0aW9uIGNoYXJhY3RlciwgRkFMU0UgaWYgbm90LCBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNwdW5jdCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6ID9ib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBjb2RlIHBvaW50IGlzIGEgc3BhY2UgY2hhcmFjdGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmlzc3BhY2UucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgaWYgY29kZXBvaW50IGlzIGEgc3BhY2UgY2hhcmFjdGVyLCBGQUxTRSBpZiBub3QsIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc3NwYWNlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGNvZGUgcG9pbnQgaXMgYSB0aXRsZWNhc2UgbGV0dGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmlzdGl0bGUucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgaWYgY29kZXBvaW50IGlzIGEgdGl0bGVjYXNlIGxldHRlciwgRkFMU0UgaWYgbm90LCBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXN0aXRsZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6ID9ib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBjb2RlIHBvaW50IGhhcyB0aGUgQWxwaGFiZXRpYyBVbmljb2RlIHByb3BlcnR5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmlzdWFscGhhYmV0aWMucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgaWYgY29kZXBvaW50IGhhcyB0aGUgQWxwaGFiZXRpYyBVbmljb2RlIHByb3BlcnR5LCBGQUxTRSBpZiBub3QsIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc1VBbHBoYWJldGljKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGNvZGUgcG9pbnQgaGFzIHRoZSBMb3dlcmNhc2UgVW5pY29kZSBwcm9wZXJ0eQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5pc3Vsb3dlcmNhc2UucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgaWYgY29kZXBvaW50IGhhcyB0aGUgTG93ZXJjYXNlIFVuaWNvZGUgcHJvcGVydHksIEZBTFNFIGlmIG5vdCwgTlVMTCBpZiA8ZW0+Y29kZXBvaW50PC9lbT4gaXMgb3V0IG9mIGJvdW5kLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzVUxvd2VyY2FzZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6ID9ib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBjb2RlIHBvaW50IGhhcyB0aGUgZ2VuZXJhbCBjYXRlZ29yeSAiTHUiICh1cHBlcmNhc2UgbGV0dGVyKQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5pc3VwcGVyLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCA8cD5UaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gPGVtPjB4MjYwMzwvZW0+IGZvciA8ZW0+VSsyNjAzIFNOT1dNQU48L2VtPiksCiAgICAgKiBvciB0aGUgY2hhcmFjdGVyIGVuY29kZWQgYXMgYSBVVEYtOCBzdHJpbmcgKGUuZy4gPGVtPiJcdXsyNjAzfSI8L2VtPik8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgaWYgY29kZXBvaW50IGlzIGFuIEx1IHVwcGVyY2FzZSBsZXR0ZXIsIEZBTFNFIGlmIG5vdCwgTlVMTCBpZiA8ZW0+Y29kZXBvaW50PC9lbT4gaXMgb3V0IG9mIGJvdW5kLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzdXBwZXIoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQpOiA/Ym9vbCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgY29kZSBwb2ludCBoYXMgdGhlIFVwcGVyY2FzZSBVbmljb2RlIHByb3BlcnR5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmlzdXVwcGVyY2FzZS5waHAKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRjb2RlcG9pbnQgVGhlIGludGVnZXIgY29kZXBvaW50IHZhbHVlIChlLmcuIDB4MjYwMyBmb3IgVSsyNjAzIFNOT1dNQU4pLCBvciB0aGUgY2hhcmFjdGVyIGVuY29kZWQgYXMgYSBVVEYtOCBzdHJpbmcgKGUuZy4gIlx1ezI2MDN9IikKICAgICAqIEByZXR1cm4gYm9vbHxudWxsIFJldHVybnMgVFJVRSBpZiBjb2RlcG9pbnQgaGFzIHRoZSBVcHBlcmNhc2UgVW5pY29kZSBwcm9wZXJ0eSwgRkFMU0UgaWYgbm90LCBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNVVXBwZXJjYXNlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGNvZGUgcG9pbnQgaGFzIHRoZSBXaGl0ZV9TcGFjZSBVbmljb2RlIHByb3BlcnR5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxjaGFyLmlzdXdoaXRlc3BhY2UucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgaWYgY29kZXBvaW50IGhhcyB0aGUgV2hpdGVfU3BhY2UgVW5pY29kZSBwcm9wZXJ0eSwgRkFMU0UgaWYgbm90LCBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNVV2hpdGVTcGFjZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6ID9ib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBjb2RlIHBvaW50IGlzIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgYWNjb3JkaW5nIHRvIElDVQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci5pc3doaXRlc3BhY2UucGhwCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkY29kZXBvaW50IFRoZSBpbnRlZ2VyIGNvZGVwb2ludCB2YWx1ZSAoZS5nLiAweDI2MDMgZm9yIFUrMjYwMyBTTk9XTUFOKSwgb3IgdGhlIGNoYXJhY3RlciBlbmNvZGVkIGFzIGEgVVRGLTggc3RyaW5nIChlLmcuICJcdXsyNjAzfSIpCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbCBSZXR1cm5zIFRSVUUgaWYgY29kZXBvaW50IGlzIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgYWNjb3JkaW5nIHRvIElDVSwgRkFMU0UgaWYgbm90LCBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGNvZGUgcG9pbnQgaXMgYSBoZXhhZGVjaW1hbCBkaWdpdAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBib29sfG51bGwgUmV0dXJucyBUUlVFIGlmIGNvZGVwb2ludCBpcyBhIGhleGFkZWNpbWFsIGNoYXJhY3RlciwgRkFMU0UgaWYgbm90LCBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXN4ZGlnaXQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlcG9pbnQpOiA/Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIFVuaWNvZGUgY29kZSBwb2ludCB2YWx1ZSBvZiBjaGFyYWN0ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIub3JkLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNoYXJhY3RlciA8cD5BIFVuaWNvZGUgY2hhcmFjdGVyLjwvcD4KICAgICAqIEByZXR1cm4gaW50fG51bGwgUmV0dXJucyB0aGUgVW5pY29kZSBjb2RlIHBvaW50IHZhbHVlIGFzIGFuIGludGVnZXIsIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvcmQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50fHN0cmluZyddLCBkZWZhdWx0OiAnJyldICRjaGFyYWN0ZXIpOiA/aW50IHt9CgogICAgLyoqCiAgICAgKiBNYWtlIFVuaWNvZGUgY2hhcmFjdGVyIGxvd2VyY2FzZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci50b2xvd2VyLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBpbnR8c3RyaW5nfG51bGwgUmV0dXJucyB0aGUgU2ltcGxlX0xvd2VyY2FzZV9NYXBwaW5nIG9mIHRoZSBjb2RlIHBvaW50LCBpZiBhbnk7IG90aGVyd2lzZSB0aGUgY29kZSBwb2ludCBpdHNlbGYuCiAgICAgKiBUaGUgcmV0dXJuIHR5cGUgd2lsbCBiZSBpbnRlZ2VyIHVubGVzcyB0aGUgY29kZSBwb2ludCB3YXMgcGFzc2VkIGFzIGEgVVRGLTggc3RyaW5nLCBpbiB3aGljaCBjYXNlIGEgc3RyaW5nIHdpbGwgYmUgcmV0dXJuZWQuCiAgICAgKiBPciBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9sb3dlcigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6IHN0cmluZ3xpbnR8bnVsbCB7fQoKICAgIC8qKgogICAgICogTWFrZSBVbmljb2RlIGNoYXJhY3RlciB0aXRsZWNhc2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGNoYXIudG90aXRsZS5waHAKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRjb2RlcG9pbnQgVGhlIGludGVnZXIgY29kZXBvaW50IHZhbHVlIChlLmcuIDB4MjYwMyBmb3IgVSsyNjAzIFNOT1dNQU4pLCBvciB0aGUgY2hhcmFjdGVyIGVuY29kZWQgYXMgYSBVVEYtOCBzdHJpbmcgKGUuZy4gIlx1ezI2MDN9IikKICAgICAqIEByZXR1cm4gaW50fHN0cmluZ3xudWxsICBSZXR1cm5zIHRoZSBTaW1wbGVfVGl0bGVjYXNlX01hcHBpbmcgb2YgdGhlIGNvZGUgcG9pbnQsIGlmIGFueTsgb3RoZXJ3aXNlIHRoZSBjb2RlIHBvaW50IGl0c2VsZi4KICAgICAqIFRoZSByZXR1cm4gdHlwZSB3aWxsIGJlIGludGVnZXIgdW5sZXNzIHRoZSBjb2RlIHBvaW50IHdhcyBwYXNzZWQgYXMgYSBVVEYtOCBzdHJpbmcsIGluIHdoaWNoIGNhc2UgYSBzdHJpbmcgd2lsbCBiZSByZXR1cm5lZC4KICAgICAqIE9yIE5VTEwgaWYgPGVtPmNvZGVwb2ludDwvZW0+IGlzIG91dCBvZiBib3VuZC4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0b3RpdGxlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29kZXBvaW50KTogc3RyaW5nfGludHxudWxsIHt9CgogICAgLyoqCiAgICAgKiBNYWtlIFVuaWNvZGUgY2hhcmFjdGVyIHVwcGVyY2FzZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsY2hhci50b3VwcGVyLnBocAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGNvZGVwb2ludCBUaGUgaW50ZWdlciBjb2RlcG9pbnQgdmFsdWUgKGUuZy4gMHgyNjAzIGZvciBVKzI2MDMgU05PV01BTiksIG9yIHRoZSBjaGFyYWN0ZXIgZW5jb2RlZCBhcyBhIFVURi04IHN0cmluZyAoZS5nLiAiXHV7MjYwM30iKQogICAgICogQHJldHVybiBpbnR8c3RyaW5nfG51bGwgUmV0dXJucyB0aGUgU2ltcGxlX1VwcGVyY2FzZV9NYXBwaW5nIG9mIHRoZSBjb2RlIHBvaW50LCBpZiBhbnk7IG90aGVyd2lzZSB0aGUgY29kZSBwb2ludCBpdHNlbGYuCiAgICAgKiBUaGUgcmV0dXJuIHR5cGUgd2lsbCBiZSBpbnRlZ2VyIHVubGVzcyB0aGUgY29kZSBwb2ludCB3YXMgcGFzc2VkIGFzIGEgVVRGLTggc3RyaW5nLCBpbiB3aGljaCBjYXNlIGEgc3RyaW5nIHdpbGwgYmUgcmV0dXJuZWQuCiAgICAgKiBPciBOVUxMIGlmIDxlbT5jb2RlcG9pbnQ8L2VtPiBpcyBvdXQgb2YgYm91bmQuCiAgICAgKiBAc2luY2UgNy4wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG91cHBlcigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnR8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvZGVwb2ludCk6IHN0cmluZ3xpbnR8bnVsbCB7fQp9Cjw/cGhwCgovLyBTdGFydCBvZiBpbnRsIHYuMS4xLjAKCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cRGVwcmVjYXRlZDsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxFeHBlY3RlZFZhbHVlcyBhcyBFVjsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxMYW5ndWFnZUxldmVsVHlwZUF3YXJlIGFzIExhbmd1YWdlQXdhcmU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUgYXMgRWxlbWVudEF2YWlsYWJsZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxUZW50YXRpdmVUeXBlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXFB1cmU7CgpjbGFzcyBDb2xsYXRvcgp7CiAgICBwdWJsaWMgY29uc3QgREVGQVVMVF9WQUxVRSA9IC0xOwogICAgcHVibGljIGNvbnN0IFBSSU1BUlkgPSAwOwogICAgcHVibGljIGNvbnN0IFNFQ09OREFSWSA9IDE7CiAgICBwdWJsaWMgY29uc3QgVEVSVElBUlkgPSAyOwogICAgcHVibGljIGNvbnN0IERFRkFVTFRfU1RSRU5HVEggPSAyOwogICAgcHVibGljIGNvbnN0IFFVQVRFUk5BUlkgPSAzOwogICAgcHVibGljIGNvbnN0IElERU5USUNBTCA9IDE1OwogICAgcHVibGljIGNvbnN0IE9GRiA9IDE2OwogICAgcHVibGljIGNvbnN0IE9OID0gMTc7CiAgICBwdWJsaWMgY29uc3QgU0hJRlRFRCA9IDIwOwogICAgcHVibGljIGNvbnN0IE5PTl9JR05PUkFCTEUgPSAyMTsKICAgIHB1YmxpYyBjb25zdCBMT1dFUl9GSVJTVCA9IDI0OwogICAgcHVibGljIGNvbnN0IFVQUEVSX0ZJUlNUID0gMjU7CgogICAgLyoqCiAgICAgKiA8cD4KICAgICAqIFNvcnQgc3RyaW5ncyB3aXRoIGRpZmZlcmVudCBhY2NlbnRzIGZyb20gdGhlIGJhY2sgb2YgdGhlIHN0cmluZy4gVGhpcwogICAgICogYXR0cmlidXRlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvCiAgICAgKiBPbgogICAgICogZm9yIHRoZSBGcmVuY2ggbG9jYWxlcyBhbmQgYSBmZXcgb3RoZXJzLiBVc2VycyBub3JtYWxseSB3b3VsZCBub3QgbmVlZAogICAgICogdG8gZXhwbGljaXRseSBzZXQgdGhpcyBhdHRyaWJ1dGUuIFRoZXJlIGlzIGEgc3RyaW5nIGNvbXBhcmlzb24KICAgICAqIHBlcmZvcm1hbmNlIGNvc3Qgd2hlbiBpdCBpcyBzZXQgT24sCiAgICAgKiBidXQgc29ydCBrZXkgbGVuZ3RoIGlzIHVuYWZmZWN0ZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CiAgICAgKiA8Yj5Db2xsYXRvcjo6T048L2I+CiAgICAgKiA8Yj5Db2xsYXRvcjo6T0ZGPC9iPihkZWZhdWx0KQogICAgICogPGI+Q29sbGF0b3I6OkRFRkFVTFRfVkFMVUU8L2I+CiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIEZSRU5DSF9DT0xMQVRJT04gcnVsZXMKICAgICAqIDxwPgogICAgICogRj1PRkYgY290ZSAmbHQ7IGNvdMOpICZsdDsgY8O0dGUgJmx0OyBjw7R0w6kKICAgICAqIEY9T04gY290ZSAmbHQ7IGPDtHRlICZsdDsgY290w6kgJmx0OyBjw7R0w6kKICAgICAqIDwvcD4KICAgICAqIDwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuY29sbGF0b3IucGhwI2ludGwuY29sbGF0b3ItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBGUkVOQ0hfQ09MTEFUSU9OID0gMDsKCiAgICAvKioKICAgICAqIDxwPgogICAgICogVGhlIEFsdGVybmF0ZSBhdHRyaWJ1dGUgaXMgdXNlZCB0byBjb250cm9sIHRoZSBoYW5kbGluZyBvZiB0aGUgc28gY2FsbGVkCiAgICAgKiB2YXJpYWJsZSBjaGFyYWN0ZXJzIGluIHRoZSBVQ0E6IHdoaXRlc3BhY2UsIHB1bmN0dWF0aW9uIGFuZCBzeW1ib2xzLiBJZgogICAgICogQWx0ZXJuYXRlIGlzIHNldCB0byBOb25JZ25vcmFibGUKICAgICAqIChOKSwgdGhlbiBkaWZmZXJlbmNlcyBhbW9uZyB0aGVzZSBjaGFyYWN0ZXJzIGFyZSBvZiB0aGUgc2FtZSBpbXBvcnRhbmNlCiAgICAgKiBhcyBkaWZmZXJlbmNlcyBhbW9uZyBsZXR0ZXJzLiBJZiBBbHRlcm5hdGUgaXMgc2V0IHRvCiAgICAgKiBTaGlmdGVkCiAgICAgKiAoUyksIHRoZW4gdGhlc2UgY2hhcmFjdGVycyBhcmUgb2Ygb25seSBtaW5vciBpbXBvcnRhbmNlLiBUaGUKICAgICAqIFNoaWZ0ZWQgdmFsdWUgaXMgb2Z0ZW4gdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoCiAgICAgKiBTdHJlbmd0aAogICAgICogc2V0IHRvIFF1YXRlcm5hcnkuIEluIHN1Y2ggYSBjYXNlLCB3aGl0ZXNwYWNlLCBwdW5jdHVhdGlvbiwgYW5kIHN5bWJvbHMKICAgICAqIGFyZSBjb25zaWRlcmVkIHdoZW4gY29tcGFyaW5nIHN0cmluZ3MsIGJ1dCBvbmx5IGlmIGFsbCBvdGhlciBhc3BlY3RzIG9mCiAgICAgKiB0aGUgc3RyaW5ncyAoYmFzZSBsZXR0ZXJzLCBhY2NlbnRzLCBhbmQgY2FzZSkgYXJlIGlkZW50aWNhbC4gSWYKICAgICAqIEFsdGVybmF0ZSBpcyBub3Qgc2V0IHRvIFNoaWZ0ZWQsIHRoZW4gdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGEKICAgICAqIFN0cmVuZ3RoIG9mIDMgYW5kIGEgU3RyZW5ndGggb2YgNC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLAogICAgICogc2VlIFZhcmlhYmxlX1dlaWdodGluZyBpbiB0aGUKICAgICAqIFVDQS4KICAgICAqIFRoZSByZWFzb24gdGhlIEFsdGVybmF0ZSB2YWx1ZXMgYXJlIG5vdCBzaW1wbHkKICAgICAqIE9uIGFuZCBPZmYKICAgICAqIGlzIHRoYXQgYWRkaXRpb25hbCBBbHRlcm5hdGUgdmFsdWVzIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLiBUaGUgVUNBCiAgICAgKiBvcHRpb24gQmxhbmtlZCBpcyBleHByZXNzZWQgd2l0aCBTdHJlbmd0aCBzZXQgdG8gMywgYW5kIEFsdGVybmF0ZSBzZXQgdG8KICAgICAqIFNoaWZ0ZWQuIFRoZSBkZWZhdWx0IGZvciBtb3N0IGxvY2FsZXMgaXMgTm9uSWdub3JhYmxlLiBJZiBTaGlmdGVkIGlzCiAgICAgKiBzZWxlY3RlZCwgaXQgbWF5IGJlIHNsb3dlciBpZiB0aGVyZSBhcmUgbWFueSBzdHJpbmdzIHRoYXQgYXJlIHRoZSBzYW1lCiAgICAgKiBleGNlcHQgZm9yIHB1bmN0dWF0aW9uOyBzb3J0IGtleSBsZW5ndGggd2lsbCBub3QgYmUgYWZmZWN0ZWQgdW5sZXNzIHRoZQogICAgICogc3RyZW5ndGggbGV2ZWwgaXMgYWxzbyBpbmNyZWFzZWQuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIFBvc3NpYmxlIHZhbHVlcyBhcmU6CiAgICAgKiA8Yj5Db2xsYXRvcjo6Tk9OX0lHTk9SQUJMRTwvYj4oZGVmYXVsdCkKICAgICAqIDxiPkNvbGxhdG9yOjpTSElGVEVEPC9iPgogICAgICogPGI+Q29sbGF0b3I6OkRFRkFVTFRfVkFMVUU8L2I+CiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIEFMVEVSTkFURV9IQU5ETElORyBydWxlcwogICAgICogPHA+CiAgICAgKiBTPTMsIEE9TiBkaSBTaWx2YSAmbHQ7IERpIFNpbHZhICZsdDsgZGlTaWx2YSAmbHQ7IFUuUy5BLiAmbHQ7IFVTQQogICAgICogUz0zLCBBPVMgZGkgU2lsdmEgPSBkaVNpbHZhICZsdDsgRGkgU2lsdmEgJmx0OyBVLlMuQS4gPSBVU0EKICAgICAqIFM9NCwgQT1TIGRpIFNpbHZhICZsdDsgZGlTaWx2YSAmbHQ7IERpIFNpbHZhICZsdDsgVS5TLkEuICZsdDsgVVNBCiAgICAgKiA8L3A+CiAgICAgKiA8L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmNvbGxhdG9yLnBocCNpbnRsLmNvbGxhdG9yLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgQUxURVJOQVRFX0hBTkRMSU5HID0gMTsKCiAgICAvKioKICAgICAqIDxwPgogICAgICogVGhlIENhc2VfRmlyc3QgYXR0cmlidXRlIGlzIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIHVwcGVyY2FzZSBsZXR0ZXJzCiAgICAgKiBjb21lIGJlZm9yZSBsb3dlcmNhc2UgbGV0dGVycyBvciB2aWNlIHZlcnNhLCBpbiB0aGUgYWJzZW5jZSBvZiBvdGhlcgogICAgICogZGlmZmVyZW5jZXMgaW4gdGhlIHN0cmluZ3MuIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlCiAgICAgKiBVcHBlcmNhc2VfRmlyc3QKICAgICAqIChVKSBhbmQgTG93ZXJjYXNlX0ZpcnN0CiAgICAgKiAoTCksIHBsdXMgdGhlIHN0YW5kYXJkIERlZmF1bHQKICAgICAqIGFuZCBPZmYuCiAgICAgKiBUaGVyZSBpcyBhbG1vc3Qgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBPZmYgYW5kIExvd2VyY2FzZV9GaXJzdAogICAgICogb3B0aW9ucyBpbiB0ZXJtcyBvZiByZXN1bHRzLCBzbyB0eXBpY2FsbHkgdXNlcnMgd2lsbCBub3QgdXNlCiAgICAgKiBMb3dlcmNhc2VfRmlyc3Q6IG9ubHkgT2ZmIG9yIFVwcGVyY2FzZV9GaXJzdC4gKFBlb3BsZSBpbnRlcmVzdGVkIGluIHRoZQogICAgICogZGV0YWlsZWQgZGlmZmVyZW5jZXMgYmV0d2VlbiBYIGFuZCBMIHNob3VsZCBjb25zdWx0IHRoZSBDb2xsYXRpb24KICAgICAqIEN1c3RvbWl6YXRpb24pLiBTcGVjaWZ5aW5nIGVpdGhlciBMIG9yIFUgd29uJ3QgYWZmZWN0IHN0cmluZyBjb21wYXJpc29uCiAgICAgKiBwZXJmb3JtYW5jZSwgYnV0IHdpbGwgYWZmZWN0IHRoZSBzb3J0IGtleSBsZW5ndGguCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIFBvc3NpYmxlIHZhbHVlcyBhcmU6CiAgICAgKiA8Yj5Db2xsYXRvcjo6T0ZGPC9iPihkZWZhdWx0KQogICAgICogPGI+Q29sbGF0b3I6OkxPV0VSX0ZJUlNUPC9iPgogICAgICogPGI+Q29sbGF0b3I6OlVQUEVSX0ZJUlNUPC9iPgogICAgICogPGI+Q29sbGF0b3I6REVGQVVMVDwvYj4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogQ0FTRV9GSVJTVCBydWxlcwogICAgICogPHA+CiAgICAgKiBDPVggb3IgQz1MICJjaGluYSIgJmx0OyAiQ2hpbmEiICZsdDsgImRlbm1hcmsiICZsdDsgIkRlbm1hcmsiCiAgICAgKiBDPVUgIkNoaW5hIiAmbHQ7ICJjaGluYSIgJmx0OyAiRGVubWFyayIgJmx0OyAiZGVubWFyayIKICAgICAqIDwvcD4KICAgICAqIDwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuY29sbGF0b3IucGhwI2ludGwuY29sbGF0b3ItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDQVNFX0ZJUlNUID0gMjsKCiAgICAvKioKICAgICAqIDxwPgogICAgICogVGhlIENhc2VfTGV2ZWwgYXR0cmlidXRlIGlzIHVzZWQgd2hlbiBpZ25vcmluZyBhY2NlbnRzIGJ1dCBub3QgY2FzZS4gSW4KICAgICAqIHN1Y2ggYSBzaXR1YXRpb24sIHNldCBTdHJlbmd0aCB0byBiZSBQcmltYXJ5LAogICAgICogYW5kIENhc2VfTGV2ZWwgdG8gYmUgT24uCiAgICAgKiBJbiBtb3N0IGxvY2FsZXMsIHRoaXMgc2V0dGluZyBpcyBPZmYgYnkgZGVmYXVsdC4gVGhlcmUgaXMgYSBzbWFsbAogICAgICogc3RyaW5nIGNvbXBhcmlzb24gcGVyZm9ybWFuY2UgYW5kIHNvcnQga2V5IGltcGFjdCBpZiB0aGlzIGF0dHJpYnV0ZSBpcwogICAgICogc2V0IHRvIGJlIE9uLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgogICAgICogPGI+Q29sbGF0b3I6Ok9GRjwvYj4oZGVmYXVsdCkKICAgICAqIDxiPkNvbGxhdG9yOjpPTjwvYj4KICAgICAqIDxiPkNvbGxhdG9yOjpERUZBVUxUX1ZBTFVFPC9iPgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBDQVNFX0xFVkVMIHJ1bGVzCiAgICAgKiA8cD4KICAgICAqIFM9MSwgRT1YIHJvbGUgPSBSb2xlID0gcsO0bGUKICAgICAqIFM9MSwgRT1PIHJvbGUgPSByw7RsZSAmbHQ7IFJvbGUKICAgICAqIDwvcD4KICAgICAqIDwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuY29sbGF0b3IucGhwI2ludGwuY29sbGF0b3ItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDQVNFX0xFVkVMID0gMzsKCiAgICAvKioKICAgICAqIDxwPgogICAgICogVGhlIE5vcm1hbGl6YXRpb24gc2V0dGluZyBkZXRlcm1pbmVzIHdoZXRoZXIgdGV4dCBpcyB0aG9yb3VnaGx5CiAgICAgKiBub3JtYWxpemVkIG9yIG5vdCBpbiBjb21wYXJpc29uLiBFdmVuIGlmIHRoZSBzZXR0aW5nIGlzIG9mZiAod2hpY2ggaXMKICAgICAqIHRoZSBkZWZhdWx0IGZvciBtYW55IGxvY2FsZXMpLCB0ZXh0IGFzIHJlcHJlc2VudGVkIGluIGNvbW1vbiB1c2FnZSB3aWxsCiAgICAgKiBjb21wYXJlIGNvcnJlY3RseSAoZm9yIGRldGFpbHMsIHNlZSBVVE4gIzUpLiBPbmx5IGlmIHRoZSBhY2NlbnQgbWFya3MKICAgICAqIGFyZSBpbiBub25jYW5vbmljYWwgb3JkZXIgd2lsbCB0aGVyZSBiZSBhIHByb2JsZW0uIElmIHRoZSBzZXR0aW5nIGlzCiAgICAgKiBPbiwKICAgICAqIHRoZW4gdGhlIGJlc3QgcmVzdWx0cyBhcmUgZ3VhcmFudGVlZCBmb3IgYWxsIHBvc3NpYmxlIHRleHQgaW5wdXQuCiAgICAgKiBUaGVyZSBpcyBhIG1lZGl1bSBzdHJpbmcgY29tcGFyaXNvbiBwZXJmb3JtYW5jZSBjb3N0IGlmIHRoaXMgYXR0cmlidXRlCiAgICAgKiBpcyBPbiwKICAgICAqIGRlcGVuZGluZyBvbiB0aGUgZnJlcXVlbmN5IG9mIHNlcXVlbmNlcyB0aGF0IHJlcXVpcmUgbm9ybWFsaXphdGlvbi4KICAgICAqIFRoZXJlIGlzIG5vIHNpZ25pZmljYW50IGVmZmVjdCBvbiBzb3J0IGtleSBsZW5ndGguIElmIHRoZSBpbnB1dCB0ZXh0IGlzCiAgICAgKiBrbm93biB0byBiZSBpbiBORkQgb3IgTkZLRCBub3JtYWxpemF0aW9uIGZvcm1zLCB0aGVyZSBpcyBubyBuZWVkIHRvCiAgICAgKiBlbmFibGUgdGhpcyBOb3JtYWxpemF0aW9uIG9wdGlvbi4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogUG9zc2libGUgdmFsdWVzIGFyZToKICAgICAqIDxiPkNvbGxhdG9yOjpPRkY8L2I+KGRlZmF1bHQpCiAgICAgKiA8Yj5Db2xsYXRvcjo6T048L2I+CiAgICAgKiA8Yj5Db2xsYXRvcjo6REVGQVVMVF9WQUxVRTwvYj4KICAgICAqIDwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuY29sbGF0b3IucGhwI2ludGwuY29sbGF0b3ItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBOT1JNQUxJWkFUSU9OX01PREUgPSA0OwoKICAgIC8qKgogICAgICogPHA+CiAgICAgKiBUaGUgSUNVIENvbGxhdGlvbiBTZXJ2aWNlIHN1cHBvcnRzIG1hbnkgbGV2ZWxzIG9mIGNvbXBhcmlzb24gKG5hbWVkCiAgICAgKiAiTGV2ZWxzIiwgYnV0IGFsc28ga25vd24gYXMgIlN0cmVuZ3RocyIpLiBIYXZpbmcgdGhlc2UgY2F0ZWdvcmllcwogICAgICogZW5hYmxlcyBJQ1UgdG8gc29ydCBzdHJpbmdzIHByZWNpc2VseSBhY2NvcmRpbmcgdG8gbG9jYWwgY29udmVudGlvbnMuCiAgICAgKiBIb3dldmVyLCBieSBhbGxvd2luZyB0aGUgbGV2ZWxzIHRvIGJlIHNlbGVjdGl2ZWx5IGVtcGxveWVkLCBzZWFyY2hpbmcKICAgICAqIGZvciBhIHN0cmluZyBpbiB0ZXh0IGNhbiBiZSBwZXJmb3JtZWQgd2l0aCB2YXJpb3VzIG1hdGNoaW5nIGNvbmRpdGlvbnMuCiAgICAgKiBGb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiwgc2VlCiAgICAgKiA8Yj5jb2xsYXRvcl9zZXRfc3RyZW5ndGg8L2I+IGNoYXB0ZXIuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIFBvc3NpYmxlIHZhbHVlcyBhcmU6CiAgICAgKiA8Yj5Db2xsYXRvcjo6UFJJTUFSWTwvYj4KICAgICAqIDxiPkNvbGxhdG9yOjpTRUNPTkRBUlk8L2I+CiAgICAgKiA8Yj5Db2xsYXRvcjo6VEVSVElBUlk8L2I+KGRlZmF1bHQpCiAgICAgKiA8Yj5Db2xsYXRvcjo6UVVBVEVSTkFSWTwvYj4KICAgICAqIDxiPkNvbGxhdG9yOjpJREVOVElDQUw8L2I+CiAgICAgKiA8Yj5Db2xsYXRvcjo6REVGQVVMVF9WQUxVRTwvYj4KICAgICAqIDwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuY29sbGF0b3IucGhwI2ludGwuY29sbGF0b3ItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTVFJFTkdUSCA9IDU7CgogICAgLyoqCiAgICAgKiA8cD4KICAgICAqIENvbXBhdGliaWxpdHkgd2l0aCBKSVMgeCA0MDYxIHJlcXVpcmVzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYW4gYWRkaXRpb25hbAogICAgICogbGV2ZWwgdG8gZGlzdGluZ3Vpc2ggSGlyYWdhbmEgYW5kIEthdGFrYW5hIGNoYXJhY3RlcnMuIElmIGNvbXBhdGliaWxpdHkKICAgICAqIHdpdGggdGhhdCBzdGFuZGFyZCBpcyByZXF1aXJlZCwgdGhlbiB0aGlzIGF0dHJpYnV0ZSBzaG91bGQgYmUgc2V0CiAgICAgKiBPbiwKICAgICAqIGFuZCB0aGUgc3RyZW5ndGggc2V0IHRvIFF1YXRlcm5hcnkuIFRoaXMgd2lsbCBhZmZlY3Qgc29ydCBrZXkgbGVuZ3RoCiAgICAgKiBhbmQgc3RyaW5nIGNvbXBhcmlzb24gc3RyaW5nIGNvbXBhcmlzb24gcGVyZm9ybWFuY2UuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIFBvc3NpYmxlIHZhbHVlcyBhcmU6CiAgICAgKiA8Yj5Db2xsYXRvcjo6T0ZGPC9iPihkZWZhdWx0KQogICAgICogPGI+Q29sbGF0b3I6Ok9OPC9iPgogICAgICogPGI+Q29sbGF0b3I6OkRFRkFVTFRfVkFMVUU8L2I+CiAgICAgKiA8L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmNvbGxhdG9yLnBocCNpbnRsLmNvbGxhdG9yLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgSElSQUdBTkFfUVVBVEVSTkFSWV9NT0RFID0gNjsKCiAgICAvKioKICAgICAqIDxwPgogICAgICogV2hlbiB0dXJuZWQgb24sIHRoaXMgYXR0cmlidXRlIGdlbmVyYXRlcyBhIGNvbGxhdGlvbiBrZXkgZm9yIHRoZSBudW1lcmljCiAgICAgKiB2YWx1ZSBvZiBzdWJzdHJpbmdzIG9mIGRpZ2l0cy4gVGhpcyBpcyBhIHdheSB0byBnZXQgJzEwMCcgdG8gc29ydCBBRlRFUgogICAgICogJzInLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgogICAgICogPGI+Q29sbGF0b3I6Ok9GRjwvYj4oZGVmYXVsdCkKICAgICAqIDxiPkNvbGxhdG9yOjpPTjwvYj4KICAgICAqIDxiPkNvbGxhdG9yOjpERUZBVUxUX1ZBTFVFPC9iPgogICAgICogPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5jb2xsYXRvci5waHAjaW50bC5jb2xsYXRvci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE5VTUVSSUNfQ09MTEFUSU9OID0gNzsKICAgIHB1YmxpYyBjb25zdCBTT1JUX1JFR1VMQVIgPSAwOwogICAgcHVibGljIGNvbnN0IFNPUlRfU1RSSU5HID0gMTsKICAgIHB1YmxpYyBjb25zdCBTT1JUX05VTUVSSUMgPSAyOwoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIENyZWF0ZSBhIGNvbGxhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NvbGxhdG9yLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZQogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBDcmVhdGUgYSBjb2xsYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jb2xsYXRvci5jcmVhdGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAgICAgKiBUaGUgbG9jYWxlIGNvbnRhaW5pbmcgdGhlIHJlcXVpcmVkIGNvbGxhdGlvbiBydWxlcy4gU3BlY2lhbCB2YWx1ZXMgZm9yCiAgICAgKiBsb2NhbGVzIGNhbiBiZSBwYXNzZWQgaW4gLSBpZiBudWxsIGlzIHBhc3NlZCBmb3IgdGhlIGxvY2FsZSwgdGhlCiAgICAgKiBkZWZhdWx0IGxvY2FsZSBjb2xsYXRpb24gcnVsZXMgd2lsbCBiZSB1c2VkLiBJZiBlbXB0eSBzdHJpbmcgKCIiKSBvcgogICAgICogInJvb3QiIGFyZSBwYXNzZWQsIFVDQSBydWxlcyB3aWxsIGJlIHVzZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIENvbGxhdG9yfG51bGwgUmV0dXJuIG5ldyBpbnN0YW5jZSBvZiA8Yj5Db2xsYXRvcjwvYj4gb2JqZWN0LCBvciA8Yj5OVUxMPC9iPgogICAgICogb24gZXJyb3IuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbGUpOiA/Q29sbGF0b3Ige30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBDb21wYXJlIHR3byBVbmljb2RlIHN0cmluZ3MKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY29sbGF0b3IuY29tcGFyZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZzEgPHA+CiAgICAgKiBUaGUgZmlyc3Qgc3RyaW5nIHRvIGNvbXBhcmUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcyIDxwPgogICAgICogVGhlIHNlY29uZCBzdHJpbmcgdG8gY29tcGFyZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gaW50fGZhbHNlIFJldHVybiBjb21wYXJpc29uIHJlc3VsdDo8L3A+CiAgICAgKiA8cD4KICAgICAqIDxwPgogICAgICogMSBpZiA8aT5zdHIxPC9pPiBpcyBncmVhdGVyIHRoYW4KICAgICAqIDxpPnN0cjI8L2k+IDsKICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogMCBpZiA8aT5zdHIxPC9pPiBpcyBlcXVhbCB0bwogICAgICogPGk+c3RyMjwvaT47CiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIC0xIGlmIDxpPnN0cjE8L2k+IGlzIGxlc3MgdGhhbgogICAgICogPGk+c3RyMjwvaT4gLgogICAgICogPC9wPgogICAgICogT24gZXJyb3IKICAgICAqIGJvb2xlYW4KICAgICAqIDxiPkZBTFNFPC9iPgogICAgICogaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlKAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRzdHJpbmcxLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRzdHJpbmcyCiAgICApOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBTb3J0IGFycmF5IHVzaW5nIHNwZWNpZmllZCBjb2xsYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jb2xsYXRvci5zb3J0LnBocAogICAgICogQHBhcmFtIHN0cmluZ1tdICYkYXJyYXkgPHA+CiAgICAgKiBBcnJheSBvZiBzdHJpbmdzIHRvIHNvcnQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogICAgICogT3B0aW9uYWwgc29ydGluZyB0eXBlLCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogPGI+Q29sbGF0b3I6OlNPUlRfUkVHVUxBUjwvYj4KICAgICAqIC0gY29tcGFyZSBpdGVtcyBub3JtYWxseSAoZG9uJ3QgY2hhbmdlIHR5cGVzKQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0KAogICAgICAgIGFycmF5ICYkYXJyYXksCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gI1tFVihbQ29sbGF0b3I6OlNPUlRfUkVHVUxBUl0pXSAkZmxhZ3MgPSAwCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogU29ydCBhcnJheSB1c2luZyBzcGVjaWZpZWQgY29sbGF0b3IgYW5kIHNvcnQga2V5cwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jb2xsYXRvci5zb3J0d2l0aHNvcnRrZXlzLnBocAogICAgICogQHBhcmFtIHN0cmluZ1tdICYkYXJyYXkgPHA+QXJyYXkgb2Ygc3RyaW5ncyB0byBzb3J0PC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0V2l0aFNvcnRLZXlzKAogICAgICAgIGFycmF5ICYkYXJyYXksCiAgICAgICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzUuNicpXSAkZmxhZ3MgPSBbXQogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFNvcnQgYXJyYXkgbWFpbnRhaW5pbmcgaW5kZXggYXNzb2NpYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY29sbGF0b3IuYXNvcnQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJiRhcnJheSA8cD5BcnJheSBvZiBzdHJpbmdzIHRvIHNvcnQuPC9wPgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICAgICAqIE9wdGlvbmFsIHNvcnRpbmcgdHlwZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgICAgKiA8Yj5Db2xsYXRvcjo6U09SVF9SRUdVTEFSPC9iPgogICAgICogLSBjb21wYXJlIGl0ZW1zIG5vcm1hbGx5IChkb24ndCBjaGFuZ2UgdHlwZXMpCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGFzb3J0KAogICAgICAgIGFycmF5ICYkYXJyYXksCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gI1tFVihbQ29sbGF0b3I6OlNPUlRfUkVHVUxBUl0pXSAkZmxhZ3MgPSAwCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogR2V0IGNvbGxhdGlvbiBhdHRyaWJ1dGUgdmFsdWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY29sbGF0b3IuZ2V0YXR0cmlidXRlLnBocAogICAgICogQHBhcmFtIGludCAkYXR0cmlidXRlIDxwPgogICAgICogQXR0cmlidXRlIHRvIGdldCB2YWx1ZSBmb3IuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBBdHRyaWJ1dGUgdmFsdWUsIG9yIGJvb2xlYW4gPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRhdHRyaWJ1dGUpOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBTZXQgY29sbGF0aW9uIGF0dHJpYnV0ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jb2xsYXRvci5zZXRhdHRyaWJ1dGUucGhwCiAgICAgKiBAcGFyYW0gaW50ICRhdHRyaWJ1dGUgPHA+QXR0cmlidXRlLjwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHZhbHVlIDxwPgogICAgICogQXR0cmlidXRlIHZhbHVlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGF0dHJpYnV0ZSwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXQgY3VycmVudCBjb2xsYXRpb24gc3RyZW5ndGgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY29sbGF0b3IuZ2V0c3RyZW5ndGgucGhwCiAgICAgKiBAcmV0dXJuIGludCBjdXJyZW50IGNvbGxhdGlvbiBzdHJlbmd0aCwgb3IgYm9vbGVhbiA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHJlbmd0aCgpOiBpbnQge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBTZXQgY29sbGF0aW9uIHN0cmVuZ3RoCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NvbGxhdG9yLnNldHN0cmVuZ3RoLnBocAogICAgICogQHBhcmFtIGludCAkc3RyZW5ndGggPHA+U3RyZW5ndGggdG8gc2V0LjwvcD4KICAgICAqIDxwPgogICAgICogUG9zc2libGUgdmFsdWVzIGFyZToKICAgICAqIDxiPkNvbGxhdG9yOjpQUklNQVJZPC9iPgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguNCcgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTdHJlbmd0aCgjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAjW0VWKFtDb2xsYXRvcjo6UFJJTUFSWV0pXSAkc3RyZW5ndGgpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogR2V0IGNvbGxhdG9yJ3MgbGFzdCBlcnJvciBjb2RlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NvbGxhdG9yLmdldGVycm9yY29kZS5waHAKICAgICAqIEByZXR1cm4gaW50fGZhbHNlIEVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIGxhc3QgQ29sbGF0b3IgQVBJIGZ1bmN0aW9uIGNhbGwuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvckNvZGUoKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogR2V0IHRoZSBsb2NhbGUgbmFtZSBvZiB0aGUgY29sbGF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY29sbGF0b3IuZ2V0bG9jYWxlLnBocAogICAgICogQHBhcmFtIGludCAkdHlwZSA8cD4KICAgICAqIFlvdSBjYW4gY2hvb3NlIGJldHdlZW4gdmFsaWQgYW5kIGFjdHVhbCBsb2NhbGUgKAogICAgICogPGI+TG9jYWxlOjpWQUxJRF9MT0NBTEU8L2I+IGFuZAogICAgICogPGI+TG9jYWxlOjpBQ1RVQUxfTE9DQUxFPC9iPiwKICAgICAqIHJlc3BlY3RpdmVseSkuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBSZWFsIGxvY2FsZSBuYW1lIGZyb20gd2hpY2ggdGhlIGNvbGxhdGlvbiBkYXRhIGNvbWVzLiBJZiB0aGUgY29sbGF0b3Igd2FzCiAgICAgKiBpbnN0YW50aWF0ZWQgZnJvbSBydWxlcyBvciBhbiBlcnJvciBvY2N1cnJlZCwgcmV0dXJucwogICAgICogYm9vbGVhbiA8Yj5GQUxTRTwvYj4uCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbGUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gI1tFVihbTG9jYWxlOjpWQUxJRF9MT0NBTEUsIExvY2FsZTo6QUNUVUFMX0xPQ0FMRV0pXSAkdHlwZQogICAgKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogR2V0IHRleHQgZm9yIGNvbGxhdG9yJ3MgbGFzdCBlcnJvciBjb2RlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NvbGxhdG9yLmdldGVycm9ybWVzc2FnZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIERlc2NyaXB0aW9uIG9mIGFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBsYXN0IENvbGxhdG9yIEFQSSBmdW5jdGlvbiBjYWxsLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4yLCBQRUNMIGludGwgJmd0Oz0gMS4wLjMpPGJyLz4KICAgICAqIEdldCBzb3J0aW5nIGtleSBmb3IgYSBzdHJpbmcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY29sbGF0b3IuZ2V0c29ydGtleS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICAgICAqIFRoZSBzdHJpbmcgdG8gcHJvZHVjZSB0aGUga2V5IGZyb20uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgY29sbGF0aW9uIGtleSBmb3IgdGhlIHN0cmluZy4gQ29sbGF0aW9uIGtleXMgY2FuIGJlIGNvbXBhcmVkIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RyaW5ncy4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFNvcnRLZXkoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHN0cmluZywKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNS42JyldICRhcmcyCiAgICApOiBzdHJpbmd8ZmFsc2Uge30KfQoKY2xhc3MgTnVtYmVyRm9ybWF0dGVyCnsKICAgIHB1YmxpYyBjb25zdCBDVVJSRU5DWV9BQ0NPVU5USU5HID0gMTI7CgogICAgLyoqCiAgICAgKiBEZWNpbWFsIGZvcm1hdCBkZWZpbmVkIGJ5IHBhdHRlcm4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBBVFRFUk5fREVDSU1BTCA9IDA7CgogICAgLyoqCiAgICAgKiBEZWNpbWFsIGZvcm1hdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgREVDSU1BTCA9IDE7CgogICAgLyoqCiAgICAgKiBDdXJyZW5jeSBmb3JtYXQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IENVUlJFTkNZID0gMjsKCiAgICAvKioKICAgICAqIFBlcmNlbnQgZm9ybWF0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQRVJDRU5UID0gMzsKCiAgICAvKioKICAgICAqIFNjaWVudGlmaWMgZm9ybWF0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTQ0lFTlRJRklDID0gNDsKCiAgICAvKioKICAgICAqIFNwZWxsb3V0IHJ1bGUtYmFzZWQgZm9ybWF0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTUEVMTE9VVCA9IDU7CgogICAgLyoqCiAgICAgKiBPcmRpbmFsIHJ1bGUtYmFzZWQgZm9ybWF0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUkRJTkFMID0gNjsKCiAgICAvKioKICAgICAqIER1cmF0aW9uIHJ1bGUtYmFzZWQgZm9ybWF0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBEVVJBVElPTiA9IDc7CgogICAgLyoqCiAgICAgKiBSdWxlLWJhc2VkIGZvcm1hdCBkZWZpbmVkIGJ5IHBhdHRlcm4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubG9jYWxlLnBocCNpbnRsLmxvY2FsZS1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBBVFRFUk5fUlVMRUJBU0VEID0gOTsKCiAgICAvKioKICAgICAqIEFsaWFzIGZvciBQQVRURVJOX0RFQ0lNQUwKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IElHTk9SRSA9IDA7CgogICAgLyoqCiAgICAgKiBEZWZhdWx0IGZvcm1hdCBmb3IgdGhlIGxvY2FsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgREVGQVVMVF9TVFlMRSA9IDE7CgogICAgLyoqCiAgICAgKiBSb3VuZGluZyBtb2RlIHRvIHJvdW5kIHRvd2FyZHMgcG9zaXRpdmUgaW5maW5pdHkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBST1VORF9DRUlMSU5HID0gMDsKCiAgICAvKioKICAgICAqIFJvdW5kaW5nIG1vZGUgdG8gcm91bmQgdG93YXJkcyBuZWdhdGl2ZSBpbmZpbml0eS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJPVU5EX0ZMT09SID0gMTsKCiAgICAvKioKICAgICAqIFJvdW5kaW5nIG1vZGUgdG8gcm91bmQgdG93YXJkcyB6ZXJvLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgUk9VTkRfRE9XTiA9IDI7CgogICAgLyoqCiAgICAgKiBSb3VuZGluZyBtb2RlIHRvIHJvdW5kIGF3YXkgZnJvbSB6ZXJvLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgUk9VTkRfVVAgPSAzOwoKICAgIC8qKgogICAgICogUm91bmRpbmcgbW9kZSB0byByb3VuZCB0b3dhcmRzIHRoZSAibmVhcmVzdCBuZWlnaGJvciIgdW5sZXNzIGJvdGgKICAgICAqIG5laWdoYm9ycyBhcmUgZXF1aWRpc3RhbnQsIGluIHdoaWNoIGNhc2UsIHJvdW5kIHRvd2FyZHMgdGhlIGV2ZW4KICAgICAqIG5laWdoYm9yLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgUk9VTkRfSEFMRkVWRU4gPSA0OwoKICAgIC8qKgogICAgICogUm91bmRpbmcgbW9kZSB0byByb3VuZCB0b3dhcmRzICJuZWFyZXN0IG5laWdoYm9yIiB1bmxlc3MgYm90aCBuZWlnaGJvcnMKICAgICAqIGFyZSBlcXVpZGlzdGFudCwgaW4gd2hpY2ggY2FzZSByb3VuZCBkb3duLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgUk9VTkRfSEFMRkRPV04gPSA1OwoKICAgIC8qKgogICAgICogUm91bmRpbmcgbW9kZSB0byByb3VuZCB0b3dhcmRzICJuZWFyZXN0IG5laWdoYm9yIiB1bmxlc3MgYm90aCBuZWlnaGJvcnMKICAgICAqIGFyZSBlcXVpZGlzdGFudCwgaW4gd2hpY2ggY2FzZSByb3VuZCB1cC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJPVU5EX0hBTEZVUCA9IDY7CgogICAgLyoqCiAgICAgKiBQYWQgY2hhcmFjdGVycyBpbnNlcnRlZCBiZWZvcmUgdGhlIHByZWZpeC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBBRF9CRUZPUkVfUFJFRklYID0gMDsKCiAgICAvKioKICAgICAqIFBhZCBjaGFyYWN0ZXJzIGluc2VydGVkIGFmdGVyIHRoZSBwcmVmaXguCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQQURfQUZURVJfUFJFRklYID0gMTsKCiAgICAvKioKICAgICAqIFBhZCBjaGFyYWN0ZXJzIGluc2VydGVkIGJlZm9yZSB0aGUgc3VmZml4LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgUEFEX0JFRk9SRV9TVUZGSVggPSAyOwoKICAgIC8qKgogICAgICogUGFkIGNoYXJhY3RlcnMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIHN1ZmZpeC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBBRF9BRlRFUl9TVUZGSVggPSAzOwoKICAgIC8qKgogICAgICogUGFyc2UgaW50ZWdlcnMgb25seS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBBUlNFX0lOVF9PTkxZID0gMDsKCiAgICAvKioKICAgICAqIFVzZSBncm91cGluZyBzZXBhcmF0b3IuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBHUk9VUElOR19VU0VEID0gMTsKCiAgICAvKioKICAgICAqIEFsd2F5cyBzaG93IGRlY2ltYWwgcG9pbnQuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBERUNJTUFMX0FMV0FZU19TSE9XTiA9IDI7CgogICAgLyoqCiAgICAgKiBNYXhpbXVtIGludGVnZXIgZGlnaXRzLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgTUFYX0lOVEVHRVJfRElHSVRTID0gMzsKCiAgICAvKioKICAgICAqIE1pbmltdW0gaW50ZWdlciBkaWdpdHMuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNSU5fSU5URUdFUl9ESUdJVFMgPSA0OwoKICAgIC8qKgogICAgICogSW50ZWdlciBkaWdpdHMuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJTlRFR0VSX0RJR0lUUyA9IDU7CgogICAgLyoqCiAgICAgKiBNYXhpbXVtIGZyYWN0aW9uIGRpZ2l0cy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE1BWF9GUkFDVElPTl9ESUdJVFMgPSA2OwoKICAgIC8qKgogICAgICogTWluaW11bSBmcmFjdGlvbiBkaWdpdHMuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNSU5fRlJBQ1RJT05fRElHSVRTID0gNzsKCiAgICAvKioKICAgICAqIEZyYWN0aW9uIGRpZ2l0cy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IEZSQUNUSU9OX0RJR0lUUyA9IDg7CgogICAgLyoqCiAgICAgKiBNdWx0aXBsaWVyLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgTVVMVElQTElFUiA9IDk7CgogICAgLyoqCiAgICAgKiBHcm91cGluZyBzaXplLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgR1JPVVBJTkdfU0laRSA9IDEwOwoKICAgIC8qKgogICAgICogUm91bmRpbmcgTW9kZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJPVU5ESU5HX01PREUgPSAxMTsKCiAgICAvKioKICAgICAqIFJvdW5kaW5nIGluY3JlbWVudC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJPVU5ESU5HX0lOQ1JFTUVOVCA9IDEyOwoKICAgIC8qKgogICAgICogVGhlIHdpZHRoIHRvIHdoaWNoIHRoZSBvdXRwdXQgb2YgZm9ybWF0KCkgaXMgcGFkZGVkLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgRk9STUFUX1dJRFRIID0gMTM7CgogICAgLyoqCiAgICAgKiBUaGUgcG9zaXRpb24gYXQgd2hpY2ggcGFkZGluZyB3aWxsIHRha2UgcGxhY2UuIFNlZSBwYWQgcG9zaXRpb24KICAgICAqIGNvbnN0YW50cyBmb3IgcG9zc2libGUgYXJndW1lbnQgdmFsdWVzLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgUEFERElOR19QT1NJVElPTiA9IDE0OwoKICAgIC8qKgogICAgICogU2Vjb25kYXJ5IGdyb3VwaW5nIHNpemUuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTRUNPTkRBUllfR1JPVVBJTkdfU0laRSA9IDE1OwoKICAgIC8qKgogICAgICogVXNlIHNpZ25pZmljYW50IGRpZ2l0cy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNJR05JRklDQU5UX0RJR0lUU19VU0VEID0gMTY7CgogICAgLyoqCiAgICAgKiBNaW5pbXVtIHNpZ25pZmljYW50IGRpZ2l0cy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE1JTl9TSUdOSUZJQ0FOVF9ESUdJVFMgPSAxNzsKCiAgICAvKioKICAgICAqIE1heGltdW0gc2lnbmlmaWNhbnQgZGlnaXRzLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgTUFYX1NJR05JRklDQU5UX0RJR0lUUyA9IDE4OwoKICAgIC8qKgogICAgICogTGVuaWVudCBwYXJzZSBtb2RlIHVzZWQgYnkgcnVsZS1iYXNlZCBmb3JtYXRzLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgTEVOSUVOVF9QQVJTRSA9IDE5OwoKICAgIC8qKgogICAgICogUG9zaXRpdmUgcHJlZml4LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgUE9TSVRJVkVfUFJFRklYID0gMDsKCiAgICAvKioKICAgICAqIFBvc2l0aXZlIHN1ZmZpeC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPU0lUSVZFX1NVRkZJWCA9IDE7CgogICAgLyoqCiAgICAgKiBOZWdhdGl2ZSBwcmVmaXguCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBORUdBVElWRV9QUkVGSVggPSAyOwoKICAgIC8qKgogICAgICogTmVnYXRpdmUgc3VmZml4LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgTkVHQVRJVkVfU1VGRklYID0gMzsKCiAgICAvKioKICAgICAqIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBwYWQgdG8gdGhlIGZvcm1hdCB3aWR0aC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBBRERJTkdfQ0hBUkFDVEVSID0gNDsKCiAgICAvKioKICAgICAqIFRoZSBJU08gY3VycmVuY3kgY29kZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IENVUlJFTkNZX0NPREUgPSA1OwoKICAgIC8qKgogICAgICogVGhlIGRlZmF1bHQgcnVsZSBzZXQuIFRoaXMgaXMgb25seSBhdmFpbGFibGUgd2l0aCBydWxlLWJhc2VkCiAgICAgKiBmb3JtYXR0ZXJzLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgREVGQVVMVF9SVUxFU0VUID0gNjsKCiAgICAvKioKICAgICAqIFRoZSBwdWJsaWMgcnVsZSBzZXRzLiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGggcnVsZS1iYXNlZAogICAgICogZm9ybWF0dGVycy4gVGhpcyBpcyBhIHJlYWQtb25seSBhdHRyaWJ1dGUuIFRoZSBwdWJsaWMgcnVsZXNldHMgYXJlCiAgICAgKiByZXR1cm5lZCBhcyBhIHNpbmdsZSBzdHJpbmcsIHdpdGggZWFjaCBydWxlc2V0IG5hbWUgZGVsaW1pdGVkIGJ5ICc7JwogICAgICogKHNlbWljb2xvbikuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQVUJMSUNfUlVMRVNFVFMgPSA3OwoKICAgIC8qKgogICAgICogVGhlIGRlY2ltYWwgc2VwYXJhdG9yLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgREVDSU1BTF9TRVBBUkFUT1JfU1lNQk9MID0gMDsKCiAgICAvKioKICAgICAqIFRoZSBncm91cGluZyBzZXBhcmF0b3IuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBHUk9VUElOR19TRVBBUkFUT1JfU1lNQk9MID0gMTsKCiAgICAvKioKICAgICAqIFRoZSBwYXR0ZXJuIHNlcGFyYXRvci4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBBVFRFUk5fU0VQQVJBVE9SX1NZTUJPTCA9IDI7CgogICAgLyoqCiAgICAgKiBUaGUgcGVyY2VudCBzaWduLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgUEVSQ0VOVF9TWU1CT0wgPSAzOwoKICAgIC8qKgogICAgICogWmVyby4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFpFUk9fRElHSVRfU1lNQk9MID0gNDsKCiAgICAvKioKICAgICAqIENoYXJhY3RlciByZXByZXNlbnRpbmcgYSBkaWdpdCBpbiB0aGUgcGF0dGVybi4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IERJR0lUX1NZTUJPTCA9IDU7CgogICAgLyoqCiAgICAgKiBUaGUgbWludXMgc2lnbi4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE1JTlVTX1NJR05fU1lNQk9MID0gNjsKCiAgICAvKioKICAgICAqIFRoZSBwbHVzIHNpZ24uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQTFVTX1NJR05fU1lNQk9MID0gNzsKCiAgICAvKioKICAgICAqIFRoZSBjdXJyZW5jeSBzeW1ib2wuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDVVJSRU5DWV9TWU1CT0wgPSA4OwoKICAgIC8qKgogICAgICogVGhlIGludGVybmF0aW9uYWwgY3VycmVuY3kgc3ltYm9sLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgSU5UTF9DVVJSRU5DWV9TWU1CT0wgPSA5OwoKICAgIC8qKgogICAgICogVGhlIG1vbmV0YXJ5IHNlcGFyYXRvci4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE1PTkVUQVJZX1NFUEFSQVRPUl9TWU1CT0wgPSAxMDsKCiAgICAvKioKICAgICAqIFRoZSBleHBvbmVudGlhbCBzeW1ib2wuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFWFBPTkVOVElBTF9TWU1CT0wgPSAxMTsKCiAgICAvKioKICAgICAqIFBlciBtaWxsIHN5bWJvbC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBFUk1JTExfU1lNQk9MID0gMTI7CgogICAgLyoqCiAgICAgKiBFc2NhcGUgcGFkZGluZyBjaGFyYWN0ZXIuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQQURfRVNDQVBFX1NZTUJPTCA9IDEzOwoKICAgIC8qKgogICAgICogSW5maW5pdHkgc3ltYm9sLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgSU5GSU5JVFlfU1lNQk9MID0gMTQ7CgogICAgLyoqCiAgICAgKiBOb3QtYS1udW1iZXIgc3ltYm9sLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgTkFOX1NZTUJPTCA9IDE1OwoKICAgIC8qKgogICAgICogU2lnbmlmaWNhbnQgZGlnaXQgc3ltYm9sLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0lHTklGSUNBTlRfRElHSVRfU1lNQk9MID0gMTY7CgogICAgLyoqCiAgICAgKiBUaGUgbW9uZXRhcnkgZ3JvdXBpbmcgc2VwYXJhdG9yLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgTU9ORVRBUllfR1JPVVBJTkdfU0VQQVJBVE9SX1NZTUJPTCA9IDE3OwoKICAgIC8qKgogICAgICogRGVyaXZlIHRoZSB0eXBlIGZyb20gdmFyaWFibGUgdHlwZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgVFlQRV9ERUZBVUxUID0gMDsKCiAgICAvKioKICAgICAqIEZvcm1hdC9wYXJzZSBhcyAzMi1iaXQgaW50ZWdlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgVFlQRV9JTlQzMiA9IDE7CgogICAgLyoqCiAgICAgKiBGb3JtYXQvcGFyc2UgYXMgNjQtYml0IGludGVnZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFRZUEVfSU5UNjQgPSAyOwoKICAgIC8qKgogICAgICogRm9ybWF0L3BhcnNlIGFzIGZsb2F0aW5nIHBvaW50IHZhbHVlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUWVBFX0RPVUJMRSA9IDM7CgogICAgLyoqCiAgICAgKiBGb3JtYXQvcGFyc2UgYXMgY3VycmVuY3kgdmFsdWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqIEBkZXByZWNhdGVkIDguMwogICAgICovCiAgICBwdWJsaWMgY29uc3QgVFlQRV9DVVJSRU5DWSA9IDQ7CiAgICAvKioKICAgICAqIEBzaW5jZSA4LjQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJPVU5EX1RPV0FSRF9aRVJPID0gMjsKICAgIC8qKgogICAgICogQHNpbmNlIDguNAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUk9VTkRfQVdBWV9GUk9NX1pFUk8gPSAzOwogICAgLyoqCiAgICAgKiBAc2luY2UgOC40CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBST1VORF9IQUxGT0REID0gODsKCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZQogICAgICogQHBhcmFtIGludCAkc3R5bGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gW29wdGlvbmFsXQogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAjW0VWKFtOdW1iZXJGb3JtYXR0ZXI6OkRFQ0lNQUwsIE51bWJlckZvcm1hdHRlcjo6UEFUVEVSTl9ERUNJTUFMLAogICAgICAgICAgICBOdW1iZXJGb3JtYXR0ZXI6OlBBVFRFUk5fUlVMRUJBU0VELCBOdW1iZXJGb3JtYXR0ZXI6OkNVUlJFTkNZLCBOdW1iZXJGb3JtYXR0ZXI6OlBFUkNFTlQsCiAgICAgICAgICAgIE51bWJlckZvcm1hdHRlcjo6U0NJRU5USUZJQywgTnVtYmVyRm9ybWF0dGVyOjpTUEVMTE9VVCwgTnVtYmVyRm9ybWF0dGVyOjpPUkRJTkFMLAogICAgICAgICAgICBOdW1iZXJGb3JtYXR0ZXI6OkRVUkFUSU9OLCBOdW1iZXJGb3JtYXR0ZXI6OlBBVFRFUk5fUlVMRUJBU0VELCBOdW1iZXJGb3JtYXR0ZXI6OkNVUlJFTkNZX0FDQ09VTlRJTkcsCiAgICAgICAgICAgIE51bWJlckZvcm1hdHRlcjo6REVGQVVMVF9TVFlMRSwgTnVtYmVyRm9ybWF0dGVyOjpJR05PUkVdKV0gJHN0eWxlLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJHBhdHRlcm4gPSBudWxsCiAgICApIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogQ3JlYXRlIGEgbnVtYmVyIGZvcm1hdHRlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuY3JlYXRlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIDxwPgogICAgICogTG9jYWxlIGluIHdoaWNoIHRoZSBudW1iZXIgd291bGQgYmUgZm9ybWF0dGVkIChsb2NhbGUgbmFtZSwgZS5nLiBlbl9DQSkuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRzdHlsZSA8cD4KICAgICAqIFN0eWxlIG9mIHRoZSBmb3JtYXR0aW5nLCBvbmUgb2YgdGhlCiAgICAgKiBmb3JtYXQgc3R5bGUgY29uc3RhbnRzLiBJZgogICAgICogPGI+TnVtYmVyRm9ybWF0dGVyOjpQQVRURVJOX0RFQ0lNQUw8L2I+CiAgICAgKiBvciA8Yj5OdW1iZXJGb3JtYXR0ZXI6OlBBVFRFUk5fUlVMRUJBU0VEPC9iPgogICAgICogaXMgcGFzc2VkIHRoZW4gdGhlIG51bWJlciBmb3JtYXQgaXMgb3BlbmVkIHVzaW5nIHRoZSBnaXZlbiBwYXR0ZXJuLAogICAgICogd2hpY2ggbXVzdCBjb25mb3JtIHRvIHRoZSBzeW50YXggZGVzY3JpYmVkIGluCiAgICAgKiBJQ1UgRGVjaW1hbEZvcm1hdAogICAgICogZG9jdW1lbnRhdGlvbiBvcgogICAgICogSUNVIFJ1bGVCYXNlZE51bWJlckZvcm1hdAogICAgICogZG9jdW1lbnRhdGlvbiwgcmVzcGVjdGl2ZWx5LgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiBbb3B0aW9uYWxdIDxwPgogICAgICogUGF0dGVybiBzdHJpbmcgaWYgdGhlIGNob3NlbiBzdHlsZSByZXF1aXJlcyBhIHBhdHRlcm4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIE51bWJlckZvcm1hdHRlcnxmYWxzZSA8Yj5OdW1iZXJGb3JtYXR0ZXI8L2I+IG9iamVjdCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbGUsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gI1tFVihbTnVtYmVyRm9ybWF0dGVyOjpQQVRURVJOX0RFQ0lNQUwsCiAgICAgICAgICAgIE51bWJlckZvcm1hdHRlcjo6UEFUVEVSTl9SVUxFQkFTRUQsIE51bWJlckZvcm1hdHRlcjo6Q1VSUkVOQ1ksIE51bWJlckZvcm1hdHRlcjo6UEVSQ0VOVCwKICAgICAgICAgICAgTnVtYmVyRm9ybWF0dGVyOjpTQ0lFTlRJRklDLCBOdW1iZXJGb3JtYXR0ZXI6OlNQRUxMT1VULCBOdW1iZXJGb3JtYXR0ZXI6Ok9SRElOQUwsCiAgICAgICAgICAgIE51bWJlckZvcm1hdHRlcjo6RFVSQVRJT04sIE51bWJlckZvcm1hdHRlcjo6UEFUVEVSTl9SVUxFQkFTRUQsIE51bWJlckZvcm1hdHRlcjo6Q1VSUkVOQ1lfQUNDT1VOVElORywKICAgICAgICAgICAgTnVtYmVyRm9ybWF0dGVyOjpERUZBVUxUX1NUWUxFLCBOdW1iZXJGb3JtYXR0ZXI6OklHTk9SRV0pXSAkc3R5bGUsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkcGF0dGVybiA9IG51bGwKICAgICk6ID9OdW1iZXJGb3JtYXR0ZXIge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBGb3JtYXQgYSBudW1iZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbnVtYmVyZm9ybWF0dGVyLmZvcm1hdC5waHAKICAgICAqIEBwYXJhbSBpbnR8ZmxvYXQgJG51bSA8cD4KICAgICAqIFRoZSB2YWx1ZSB0byBmb3JtYXQuIENhbiBiZSBpbnRlZ2VyIG9yIGZsb2F0LAogICAgICogb3RoZXIgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgbnVtZXJpYyB2YWx1ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHR5cGUgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZQogICAgICogZm9ybWF0dGluZyB0eXBlIHRvIHVzZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBzdHJpbmcgY29udGFpbmluZyBmb3JtYXR0ZWQgdmFsdWUsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGZvcm1hdCgKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnR8ZmxvYXQnXSwgZGVmYXVsdDogJycpXSAkbnVtLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICR0eXBlID0gMAogICAgKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogUGFyc2UgYSBudW1iZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbnVtYmVyZm9ybWF0dGVyLnBhcnNlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAgICAgKiBAcGFyYW0gaW50ICR0eXBlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUKICAgICAqIGZvcm1hdHRpbmcgdHlwZSB0byB1c2UuIEJ5IGRlZmF1bHQsCiAgICAgKiA8Yj5OdW1iZXJGb3JtYXR0ZXI6OlRZUEVfRE9VQkxFPC9iPiBpcyB1c2VkLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAmJG9mZnNldCBbb3B0aW9uYWxdIDxwPgogICAgICogT2Zmc2V0IGluIHRoZSBzdHJpbmcgYXQgd2hpY2ggdG8gYmVnaW4gcGFyc2luZy4gT24gcmV0dXJuLCB0aGlzIHZhbHVlCiAgICAgKiB3aWxsIGhvbGQgdGhlIG9mZnNldCBhdCB3aGljaCBwYXJzaW5nIGVuZGVkLgogICAgICogPC9wPgogICAgICogQHJldHVybiBtaXhlZCBUaGUgdmFsdWUgb2YgdGhlIHBhcnNlZCBudW1iZXIgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2UoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHN0cmluZywKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkdHlwZSA9IE51bWJlckZvcm1hdHRlcjo6VFlQRV9ET1VCTEUsCiAgICAgICAgJiRvZmZzZXQgPSBudWxsCiAgICApOiBpbnR8ZmxvYXR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBGb3JtYXQgYSBjdXJyZW5jeSB2YWx1ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuZm9ybWF0Y3VycmVuY3kucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJGFtb3VudCA8cD4KICAgICAqIFRoZSBudW1lcmljIGN1cnJlbmN5IHZhbHVlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkY3VycmVuY3kgPHA+CiAgICAgKiBUaGUgMy1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBpbmRpY2F0aW5nIHRoZSBjdXJyZW5jeSB0byB1c2UuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBTdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmb3JtYXR0ZWQgY3VycmVuY3kgdmFsdWUuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXRDdXJyZW5jeSgKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdmbG9hdCddLCBkZWZhdWx0OiAnJyldICRhbW91bnQsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGN1cnJlbmN5CiAgICApOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBQYXJzZSBhIGN1cnJlbmN5IG51bWJlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIucGFyc2VjdXJyZW5jeS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogICAgICogQHBhcmFtIHN0cmluZyAmJGN1cnJlbmN5IDxwPgogICAgICogUGFyYW1ldGVyIHRvIHJlY2VpdmUgdGhlIGN1cnJlbmN5IG5hbWUgKDMtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5CiAgICAgKiBjb2RlKS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJiRvZmZzZXQgW29wdGlvbmFsXSA8cD4KICAgICAqIE9mZnNldCBpbiB0aGUgc3RyaW5nIGF0IHdoaWNoIHRvIGJlZ2luIHBhcnNpbmcuIE9uIHJldHVybiwgdGhpcyB2YWx1ZQogICAgICogd2lsbCBob2xkIHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gZmxvYXR8ZmFsc2UgVGhlIHBhcnNlZCBudW1lcmljIHZhbHVlIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHBhcnNlQ3VycmVuY3koI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHN0cmluZywgJiRjdXJyZW5jeSwgJiRvZmZzZXQgPSBudWxsKTogZmxvYXR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBTZXQgYW4gYXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL251bWJlcmZvcm1hdHRlci5zZXRhdHRyaWJ1dGUucGhwCiAgICAgKiBAcGFyYW0gaW50ICRhdHRyaWJ1dGUgPHA+CiAgICAgKiBBdHRyaWJ1dGUgc3BlY2lmaWVyIC0gb25lIG9mIHRoZQogICAgICogbnVtZXJpYyBhdHRyaWJ1dGUgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkdmFsdWUgPHA+CiAgICAgKiBUaGUgYXR0cmlidXRlIHZhbHVlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGF0dHJpYnV0ZSwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnR8ZmxvYXQnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXQgYW4gYXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL251bWJlcmZvcm1hdHRlci5nZXRhdHRyaWJ1dGUucGhwCiAgICAgKiBAcGFyYW0gaW50ICRhdHRyaWJ1dGUgPHA+CiAgICAgKiBBdHRyaWJ1dGUgc3BlY2lmaWVyIC0gb25lIG9mIHRoZQogICAgICogbnVtZXJpYyBhdHRyaWJ1dGUgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnR8ZmxvYXR8ZmFsc2UgUmV0dXJuIGF0dHJpYnV0ZSB2YWx1ZSBvbiBzdWNjZXNzLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGF0dHJpYnV0ZSk6IGludHxmbG9hdHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFNldCBhIHRleHQgYXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL251bWJlcmZvcm1hdHRlci5zZXR0ZXh0YXR0cmlidXRlLnBocAogICAgICogQHBhcmFtIGludCAkYXR0cmlidXRlIDxwPgogICAgICogQXR0cmlidXRlIHNwZWNpZmllciAtIG9uZSBvZiB0aGUKICAgICAqIHRleHQgYXR0cmlidXRlCiAgICAgKiBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSA8cD4KICAgICAqIFRleHQgZm9yIHRoZSBhdHRyaWJ1dGUgdmFsdWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldFRleHRBdHRyaWJ1dGUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGF0dHJpYnV0ZSwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXQgYSB0ZXh0IGF0dHJpYnV0ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuZ2V0dGV4dGF0dHJpYnV0ZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGF0dHJpYnV0ZSA8cD4KICAgICAqIEF0dHJpYnV0ZSBzcGVjaWZpZXIgLSBvbmUgb2YgdGhlCiAgICAgKiB0ZXh0IGF0dHJpYnV0ZSBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBSZXR1cm4gYXR0cmlidXRlIHZhbHVlIG9uIHN1Y2Nlc3MsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFRleHRBdHRyaWJ1dGUoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGF0dHJpYnV0ZSk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFNldCBhIHN5bWJvbCB2YWx1ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuc2V0c3ltYm9sLnBocAogICAgICogQHBhcmFtIGludCAkc3ltYm9sIDxwPgogICAgICogU3ltYm9sIHNwZWNpZmllciwgb25lIG9mIHRoZQogICAgICogZm9ybWF0IHN5bWJvbCBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSA8cD4KICAgICAqIFRleHQgZm9yIHRoZSBzeW1ib2wuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldFN5bWJvbCgKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkc3ltYm9sLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR2YWx1ZQogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIEdldCBhIHN5bWJvbCB2YWx1ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuZ2V0c3ltYm9sLnBocAogICAgICogQHBhcmFtIGludCAkc3ltYm9sIDxwPgogICAgICogU3ltYm9sIHNwZWNpZmllciwgb25lIG9mIHRoZQogICAgICogZm9ybWF0IHN5bWJvbCBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgc3ltYm9sIHN0cmluZyBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTeW1ib2woI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHN5bWJvbCk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFNldCBmb3JtYXR0ZXIgcGF0dGVybgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuc2V0cGF0dGVybi5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gPHA+CiAgICAgKiBQYXR0ZXJuIGluIHN5bnRheCBkZXNjcmliZWQgaW4KICAgICAqIElDVSBEZWNpbWFsRm9ybWF0CiAgICAgKiBkb2N1bWVudGF0aW9uLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXR0ZXJuKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRwYXR0ZXJuKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIEdldCBmb3JtYXR0ZXIgcGF0dGVybgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuZ2V0cGF0dGVybi5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFBhdHRlcm4gc3RyaW5nIHRoYXQgaXMgdXNlZCBieSB0aGUgZm9ybWF0dGVyLCBvciA8Yj5GQUxTRTwvYj4gaWYgYW4gZXJyb3IgaGFwcGVucy4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhdHRlcm4oKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogR2V0IGZvcm1hdHRlciBsb2NhbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbnVtYmVyZm9ybWF0dGVyLmdldGxvY2FsZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJHR5cGUgW29wdGlvbmFsXSA8cD4KICAgICAqIFlvdSBjYW4gY2hvb3NlIGJldHdlZW4gdmFsaWQgYW5kIGFjdHVhbCBsb2NhbGUgKAogICAgICogPGI+TG9jYWxlOjpWQUxJRF9MT0NBTEU8L2I+LAogICAgICogPGI+TG9jYWxlOjpBQ1RVQUxfTE9DQUxFPC9iPiwKICAgICAqIHJlc3BlY3RpdmVseSkuIFRoZSBkZWZhdWx0IGlzIHRoZSBhY3R1YWwgbG9jYWxlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGxvY2FsZSBuYW1lIHVzZWQgdG8gY3JlYXRlIHRoZSBmb3JtYXR0ZXIuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbGUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gI1tFVihbTG9jYWxlOjpWQUxJRF9MT0NBTEUsIExvY2FsZTo6QUNUVUFMX0xPQ0FMRV0pXSAkdHlwZSA9IDAKICAgICk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIEdldCBmb3JtYXR0ZXIncyBsYXN0IGVycm9yIGNvZGUuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL251bWJlcmZvcm1hdHRlci5nZXRlcnJvcmNvZGUucGhwCiAgICAgKiBAcmV0dXJuIGludCBlcnJvciBjb2RlIGZyb20gbGFzdCBmb3JtYXR0ZXIgY2FsbC4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yQ29kZSgpOiBpbnQge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXQgZm9ybWF0dGVyJ3MgbGFzdCBlcnJvciBtZXNzYWdlLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuZ2V0ZXJyb3JtZXNzYWdlLnBocAogICAgICogQHJldHVybiBzdHJpbmcgZXJyb3IgbWVzc2FnZSBmcm9tIGxhc3QgZm9ybWF0dGVyIGNhbGwuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHt9Cn0KCmNsYXNzIE5vcm1hbGl6ZXIKewogICAgcHVibGljIGNvbnN0IE5GS0NfQ0YgPSA0ODsKICAgIHB1YmxpYyBjb25zdCBGT1JNX0tDX0NGID0gNDg7CgogICAgLyoqCiAgICAgKiBEZWZhdWx0IG5vcm1hbGl6YXRpb24gb3B0aW9ucwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3Mubm9ybWFsaXplci5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVElPTl9ERUZBVUxUID0gIiI7CgogICAgLyoqCiAgICAgKiBObyBkZWNvbXBvc2l0aW9uL2NvbXBvc2l0aW9uCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5ub3JtYWxpemVyLnBocAogICAgICogQHJlbW92ZWQgOC4wCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBOT05FID0gIjEiOwoKICAgIC8qKgogICAgICogTm9ybWFsaXphdGlvbiBGb3JtIEQgKE5GRCkgLSBDYW5vbmljYWwgRGVjb21wb3NpdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3Mubm9ybWFsaXplci5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEZPUk1fRCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgTkZEID0gNDsKCiAgICAvKioKICAgICAqIE5vcm1hbGl6YXRpb24gRm9ybSBLRCAoTkZLRCkgLSBDb21wYXRpYmlsaXR5IERlY29tcG9zaXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLm5vcm1hbGl6ZXIucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBGT1JNX0tEID0gODsKICAgIHB1YmxpYyBjb25zdCBORktEID0gODsKCiAgICAvKioKICAgICAqIE5vcm1hbGl6YXRpb24gRm9ybSBDIChORkMpIC0gQ2Fub25pY2FsIERlY29tcG9zaXRpb24gZm9sbG93ZWQgYnkKICAgICAqIENhbm9uaWNhbCBDb21wb3NpdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3Mubm9ybWFsaXplci5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEZPUk1fQyA9IDE2OwogICAgcHVibGljIGNvbnN0IE5GQyA9IDE2OwoKICAgIC8qKgogICAgICogTm9ybWFsaXphdGlvbiBGb3JtIEtDIChORktDKSAtIENvbXBhdGliaWxpdHkgRGVjb21wb3NpdGlvbiwgZm9sbG93ZWQgYnkKICAgICAqIENhbm9uaWNhbCBDb21wb3NpdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3Mubm9ybWFsaXplci5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEZPUk1fS0MgPSAzMjsKICAgIHB1YmxpYyBjb25zdCBORktDID0gMzI7CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogTm9ybWFsaXplcyB0aGUgaW5wdXQgcHJvdmlkZWQgYW5kIHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgc3RyaW5nCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL25vcm1hbGl6ZXIubm9ybWFsaXplLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPlRoZSBpbnB1dCBzdHJpbmcgdG8gbm9ybWFsaXplPC9wPgogICAgICogQHBhcmFtIGludCAkZm9ybSA8cD5PbmUgb2YgdGhlIG5vcm1hbGl6YXRpb24gZm9ybXMuPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIG5vcm1hbGl6ZWQgc3RyaW5nIG9yIDxiPkZBTFNFPC9iPiBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHN0cmluZywKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNS42JyldICRmb3JtLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4wJyldICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmb3JtID0gTm9ybWFsaXplcjo6Rk9STV9DLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc1LjYnKV0gJGFyZzMKICAgICk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgc3RyaW5nIGlzIGFscmVhZHkgaW4gdGhlIHNwZWNpZmllZCBub3JtYWxpemF0aW9uIGZvcm0uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL25vcm1hbGl6ZXIuaXNub3JtYWxpemVkLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPlRoZSBpbnB1dCBzdHJpbmcgdG8gbm9ybWFsaXplPC9wPgogICAgICogQHBhcmFtIGludCAkZm9ybSA8cD4KICAgICAqIE9uZSBvZiB0aGUgbm9ybWFsaXphdGlvbiBmb3Jtcy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiBub3JtYWxpemVkLCA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlIG9yIGlmIHRoZXJlIGFuIGVycm9yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNOb3JtYWxpemVkKAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRzdHJpbmcsCiAgICAgICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzUuNicpXSAkZm9ybSwKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMCcpXSAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZm9ybSA9IE5vcm1hbGl6ZXI6OkZPUk1fQywKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNS42JyldICRhcmczCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+VGhlIGlucHV0IHN0cmluZyB0byBub3JtYWxpemU8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRmb3JtCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIDxwPlJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgRGVjb21wb3NpdGlvbl9NYXBwaW5nIHByb3BlcnR5LCBpZiBwcmVzZW50IGluIHRoZSBVQ0QuCiAgICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gRGVjb21wb3NpdGlvbl9NYXBwaW5nIHByb3BlcnR5IGZvciB0aGUgY2hhcmFjdGVyLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL25vcm1hbGl6ZXIuZ2V0cmF3ZGVjb21wb3NpdGlvbi5waHAKICAgICAqIEBzaW5jZSA3LjMKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSYXdEZWNvbXBvc2l0aW9uKAogICAgICAgIHN0cmluZyAkc3RyaW5nLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIGludCAkZm9ybSA9IDE2CiAgICApOiA/c3RyaW5nIHt9Cn0KCmNsYXNzIExvY2FsZQp7CiAgICAvKioKICAgICAqIFRoaXMgaXMgbG9jYWxlIHRoZSBkYXRhIGFjdHVhbGx5IGNvbWVzIGZyb20uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBBQ1RVQUxfTE9DQUxFID0gMDsKCiAgICAvKioKICAgICAqIFRoaXMgaXMgdGhlIG1vc3Qgc3BlY2lmaWMgbG9jYWxlIHN1cHBvcnRlZCBieSBJQ1UuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBWQUxJRF9MT0NBTEUgPSAxOwoKICAgIC8qKgogICAgICogVXNlZCBhcyBsb2NhbGUgcGFyYW1ldGVyIHdpdGggdGhlIG1ldGhvZHMgb2YgdGhlIHZhcmlvdXMgbG9jYWxlIGFmZmVjdGVkIGNsYXNzZXMsCiAgICAgKiBzdWNoIGFzIE51bWJlckZvcm1hdHRlci4gVGhpcyBjb25zdGFudCB3b3VsZCBtYWtlIHRoZSBtZXRob2RzIHRvIHVzZSBkZWZhdWx0CiAgICAgKiBsb2NhbGUuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBERUZBVUxUX0xPQ0FMRSA9IG51bGw7CgogICAgLyoqCiAgICAgKiBMYW5ndWFnZSBzdWJ0YWcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubnVtYmVyZm9ybWF0dGVyLnBocCNpbnRsLm51bWJlcmZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IExBTkdfVEFHID0gImxhbmd1YWdlIjsKCiAgICAvKioKICAgICAqIEV4dGVuZGVkIGxhbmd1YWdlIHN1YnRhZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVhUTEFOR19UQUcgPSAiZXh0bGFuZyI7CgogICAgLyoqCiAgICAgKiBTY3JpcHQgc3VidGFnCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTQ1JJUFRfVEFHID0gInNjcmlwdCI7CgogICAgLyoqCiAgICAgKiBSZWdpb24gc3VidGFnCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUdJT05fVEFHID0gInJlZ2lvbiI7CgogICAgLyoqCiAgICAgKiBWYXJpYW50IHN1YnRhZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgVkFSSUFOVF9UQUcgPSAidmFyaWFudCI7CgogICAgLyoqCiAgICAgKiBHcmFuZGZhdGhlcmVkIExhbmd1YWdlIHN1YnRhZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5udW1iZXJmb3JtYXR0ZXIucGhwI2ludGwubnVtYmVyZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgR1JBTkRGQVRIRVJFRF9MQU5HX1RBRyA9ICJncmFuZGZhdGhlcmVkIjsKCiAgICAvKioKICAgICAqIFByaXZhdGUgc3VidGFnCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLm51bWJlcmZvcm1hdHRlci5waHAjaW50bC5udW1iZXJmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQUklWQVRFX1RBRyA9ICJwcml2YXRlIjsKCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXRzIHRoZSBkZWZhdWx0IGxvY2FsZSB2YWx1ZSBmcm9tIHRoZSBJTlRMIGdsb2JhbCAnZGVmYXVsdF9sb2NhbGUnCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xvY2FsZS5nZXRkZWZhdWx0LnBocAogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGN1cnJlbnQgcnVudGltZSBsb2NhbGUKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREZWZhdWx0KCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIHNldHMgdGhlIGRlZmF1bHQgcnVudGltZSBsb2NhbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLnNldGRlZmF1bHQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAgICAgKiBJcyBhIEJDUCA0NyBjb21wbGlhbnQgbGFuZ3VhZ2UgdGFnIGNvbnRhaW5pbmcgdGhlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tMYW5ndWFnZUF3YXJlKFsnOC40JyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXREZWZhdWx0KCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbGUpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogR2V0cyB0aGUgcHJpbWFyeSBsYW5ndWFnZSBmb3IgdGhlIGlucHV0IGxvY2FsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sb2NhbGUuZ2V0cHJpbWFyeWxhbmd1YWdlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIDxwPgogICAgICogVGhlIGxvY2FsZSB0byBleHRyYWN0IHRoZSBwcmltYXJ5IGxhbmd1YWdlIGNvZGUgZnJvbQogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgbGFuZ3VhZ2UgY29kZSBhc3NvY2lhdGVkIHdpdGggdGhlIGxhbmd1YWdlIG9yIDxiPk5VTEw8L2I+IGluIGNhc2Ugb2YgZXJyb3IuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJpbWFyeUxhbmd1YWdlKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbGUpOiA/c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogR2V0cyB0aGUgc2NyaXB0IGZvciB0aGUgaW5wdXQgbG9jYWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xvY2FsZS5nZXRzY3JpcHQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAgICAgKiBUaGUgbG9jYWxlIHRvIGV4dHJhY3QgdGhlIHNjcmlwdCBjb2RlIGZyb20KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIHNjcmlwdCBzdWJ0YWcgZm9yIHRoZSBsb2NhbGUgb3IgPGI+TlVMTDwvYj4gaWYgbm90IHByZXNlbnQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTY3JpcHQoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSk6ID9zdHJpbmcge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXRzIHRoZSByZWdpb24gZm9yIHRoZSBpbnB1dCBsb2NhbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLmdldHJlZ2lvbi5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSA8cD4KICAgICAqIFRoZSBsb2NhbGUgdG8gZXh0cmFjdCB0aGUgcmVnaW9uIGNvZGUgZnJvbQogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgcmVnaW9uIHN1YnRhZyBmb3IgdGhlIGxvY2FsZSBvciA8Yj5OVUxMPC9iPiBpZiBub3QgcHJlc2VudAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlZ2lvbigjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbG9jYWxlKTogP3N0cmluZyB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIGtleXdvcmRzIGZvciB0aGUgaW5wdXQgbG9jYWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xvY2FsZS5nZXRrZXl3b3Jkcy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSA8cD4KICAgICAqIFRoZSBsb2NhbGUgdG8gZXh0cmFjdCB0aGUga2V5d29yZHMgZnJvbQogICAgICogPC9wPgogICAgICogQHJldHVybiBhcnJheXxmYWxzZXxudWxsIEFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcgdGhlIGtleXdvcmQtdmFsdWUgcGFpcnMgZm9yIHRoaXMgbG9jYWxlCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0S2V5d29yZHMoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSk6IGFycmF5fGZhbHNlfG51bGwge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIGFuIGFwcHJvcHJpYXRlbHkgbG9jYWxpemVkIGRpc3BsYXkgbmFtZSBmb3Igc2NyaXB0IG9mIHRoZSBpbnB1dCBsb2NhbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLmdldGRpc3BsYXlzY3JpcHQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAgICAgKiBUaGUgbG9jYWxlIHRvIHJldHVybiBhIGRpc3BsYXkgc2NyaXB0IGZvcgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkZGlzcGxheUxvY2FsZSA8cD4KICAgICAqIE9wdGlvbmFsIGZvcm1hdCBsb2NhbGUgdG8gdXNlIHRvIGRpc3BsYXkgdGhlIHNjcmlwdCBuYW1lCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBEaXNwbGF5IG5hbWUgb2YgdGhlIHNjcmlwdCBmb3IgdGhlICRsb2NhbGUgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBmb3IKICAgICAqICRpbl9sb2NhbGUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RGlzcGxheVNjcmlwdCgKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbG9jYWxlLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc1LjYnKV0gJGRpc3BsYXlMb2NhbGUsCiAgICAgICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjAnKV0gI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkZGlzcGxheUxvY2FsZSA9IG51bGwKICAgICk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFJldHVybnMgYW4gYXBwcm9wcmlhdGVseSBsb2NhbGl6ZWQgZGlzcGxheSBuYW1lIGZvciByZWdpb24gb2YgdGhlIGlucHV0IGxvY2FsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sb2NhbGUuZ2V0ZGlzcGxheXJlZ2lvbi5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSA8cD4KICAgICAqIFRoZSBsb2NhbGUgdG8gcmV0dXJuIGEgZGlzcGxheSByZWdpb24gZm9yLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkZGlzcGxheUxvY2FsZSA8cD4KICAgICAqIE9wdGlvbmFsIGZvcm1hdCBsb2NhbGUgdG8gdXNlIHRvIGRpc3BsYXkgdGhlIHJlZ2lvbiBuYW1lCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHJlZ2lvbiBmb3IgdGhlICRsb2NhbGUgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBmb3IKICAgICAqICRpbl9sb2NhbGUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RGlzcGxheVJlZ2lvbigKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbG9jYWxlLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc1LjYnKV0gJGRpc3BsYXlMb2NhbGUsCiAgICAgICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjAnKV0gI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkZGlzcGxheUxvY2FsZSA9IG51bGwKICAgICk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFJldHVybnMgYW4gYXBwcm9wcmlhdGVseSBsb2NhbGl6ZWQgZGlzcGxheSBuYW1lIGZvciB0aGUgaW5wdXQgbG9jYWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xvY2FsZS5nZXRkaXNwbGF5bmFtZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSA8cD4KICAgICAqIFRoZSBsb2NhbGUgdG8gcmV0dXJuIGEgZGlzcGxheSBuYW1lIGZvci4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRpc3BsYXlMb2NhbGUgPHA+b3B0aW9uYWwgZm9ybWF0IGxvY2FsZTwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIERpc3BsYXkgbmFtZSBvZiB0aGUgbG9jYWxlIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlhdGUgZm9yICRpbl9sb2NhbGUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSwKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNS42JyldICRkaXNwbGF5TG9jYWxlLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4wJyldICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGRpc3BsYXlMb2NhbGUgPSBudWxsCiAgICApOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIGFuIGFwcHJvcHJpYXRlbHkgbG9jYWxpemVkIGRpc3BsYXkgbmFtZSBmb3IgbGFuZ3VhZ2Ugb2YgdGhlIGlucHV0bG9jYWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xvY2FsZS5nZXRkaXNwbGF5bGFuZ3VhZ2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAgICAgKiBUaGUgbG9jYWxlIHRvIHJldHVybiBhIGRpc3BsYXkgbGFuZ3VhZ2UgZm9yCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaXNwbGF5TG9jYWxlIDxwPgogICAgICogT3B0aW9uYWwgZm9ybWF0IGxvY2FsZSB0byB1c2UgdG8gZGlzcGxheSB0aGUgbGFuZ3VhZ2UgbmFtZQogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgZGlzcGxheSBuYW1lIG9mIHRoZSBsYW5ndWFnZSBmb3IgdGhlICRsb2NhbGUgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBmb3IKICAgICAqICRpbl9sb2NhbGUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RGlzcGxheUxhbmd1YWdlKAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbGUsCiAgICAgICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzUuNicpXSAkZGlzcGxheUxvY2FsZSwKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMCcpXSAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRkaXNwbGF5TG9jYWxlID0gbnVsbAogICAgKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogUmV0dXJucyBhbiBhcHByb3ByaWF0ZWx5IGxvY2FsaXplZCBkaXNwbGF5IG5hbWUgZm9yIHZhcmlhbnRzIG9mIHRoZSBpbnB1dCBsb2NhbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLmdldGRpc3BsYXl2YXJpYW50LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIDxwPgogICAgICogVGhlIGxvY2FsZSB0byByZXR1cm4gYSBkaXNwbGF5IHZhcmlhbnQgZm9yCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaXNwbGF5TG9jYWxlIDxwPgogICAgICogT3B0aW9uYWwgZm9ybWF0IGxvY2FsZSB0byB1c2UgdG8gZGlzcGxheSB0aGUgdmFyaWFudCBuYW1lCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBEaXNwbGF5IG5hbWUgb2YgdGhlIHZhcmlhbnQgZm9yIHRoZSAkbG9jYWxlIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlhdGUgZm9yCiAgICAgKiAkaW5fbG9jYWxlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldERpc3BsYXlWYXJpYW50KAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbGUsCiAgICAgICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzUuNicpXSAkZGlzcGxheUxvY2FsZSwKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMCcpXSAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRkaXNwbGF5TG9jYWxlID0gbnVsbAogICAgKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogUmV0dXJucyBhIGNvcnJlY3RseSBvcmRlcmVkIGFuZCBkZWxpbWl0ZWQgbG9jYWxlIElECiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xvY2FsZS5jb21wb3NlbG9jYWxlLnBocAogICAgICogQHBhcmFtIGFycmF5ICRzdWJ0YWdzIDxwPgogICAgICogYW4gYXJyYXkgY29udGFpbmluZyBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzLCB3aGVyZSB0aGUga2V5cyBpZGVudGlmeQogICAgICogdGhlIHBhcnRpY3VsYXIgbG9jYWxlIElEIHN1YnRhZ3MsIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgYXNzb2NpYXRlZAogICAgICogc3VidGFnIHZhbHVlcy4KICAgICAqIDxwPgogICAgICogVGhlICd2YXJpYW50JyBhbmQgJ3ByaXZhdGUnIHN1YnRhZ3MgY2FuIHRha2UgbWF4aW11bSAxNSB2YWx1ZXMKICAgICAqIHdoZXJlYXMgJ2V4dGxhbmcnIGNhbiB0YWtlIG1heGltdW0gMyB2YWx1ZXMuZS5nLiBWYXJpYW50cyBhcmUgYWxsb3dlZAogICAgICogd2l0aCB0aGUgc3VmZml4IHJhbmdpbmcgZnJvbSAwLTE0LiBIZW5jZSB0aGUga2V5cyBmb3IgdGhlIGlucHV0IGFycmF5CiAgICAgKiBjYW4gYmUgdmFyaWFudDAsIHZhcmlhbnQxLCAuLi4sdmFyaWFudDE0LiBJbiB0aGUgcmV0dXJuZWQgbG9jYWxlIGlkLAogICAgICogdGhlIHN1YnRhZyBpcyBvcmRlcmVkIGJ5IHN1ZmZpeCByZXN1bHRpbmcgaW4gdmFyaWFudDAgZm9sbG93ZWQgYnkKICAgICAqIHZhcmlhbnQxIGZvbGxvd2VkIGJ5IHZhcmlhbnQyIGFuZCBzbyBvbi4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogVGhlICd2YXJpYW50JywgJ3ByaXZhdGUnIGFuZCAnZXh0bGFuZycgbXVsdGlwbGUgdmFsdWVzIGNhbiBiZSBzcGVjaWZpZWQgYm90aAogICAgICogYXMgYXJyYXkgdW5kZXIgc3BlY2lmaWMga2V5IChlLmcuICd2YXJpYW50JykgYW5kIGFzIG11bHRpcGxlIG51bWJlcmVkIGtleXMKICAgICAqIChlLmcuICd2YXJpYW50MCcsICd2YXJpYW50MScsIGV0Yy4pLgogICAgICogPC9wPgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGNvcnJlc3BvbmRpbmcgbG9jYWxlIGlkZW50aWZpZXIuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29tcG9zZUxvY2FsZShhcnJheSAkc3VidGFncyk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFJldHVybnMgYSBrZXktdmFsdWUgYXJyYXkgb2YgbG9jYWxlIElEIHN1YnRhZyBlbGVtZW50cy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLnBhcnNlbG9jYWxlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIDxwPgogICAgICogVGhlIGxvY2FsZSB0byBleHRyYWN0IHRoZSBzdWJ0YWcgYXJyYXkgZnJvbS4gTm90ZTogVGhlICd2YXJpYW50JyBhbmQKICAgICAqICdwcml2YXRlJyBzdWJ0YWdzIGNhbiB0YWtlIG1heGltdW0gMTUgdmFsdWVzIHdoZXJlYXMgJ2V4dGxhbmcnIGNhbiB0YWtlCiAgICAgKiBtYXhpbXVtIDMgdmFsdWVzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBhcnJheXxudWxsIGFuIGFycmF5IGNvbnRhaW5pbmcgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycywgd2hlcmUgdGhlIGtleXMKICAgICAqIGlkZW50aWZ5IHRoZSBwYXJ0aWN1bGFyIGxvY2FsZSBJRCBzdWJ0YWdzLCBhbmQgdGhlIHZhbHVlcyBhcmUgdGhlCiAgICAgKiBhc3NvY2lhdGVkIHN1YnRhZyB2YWx1ZXMuIFRoZSBhcnJheSB3aWxsIGJlIG9yZGVyZWQgYXMgdGhlIGxvY2FsZSBpZAogICAgICogc3VidGFncyBlLmcuIGluIHRoZSBsb2NhbGUgaWQgaWYgdmFyaWFudHMgYXJlICctdmFyWC12YXJZLXZhclonIHRoZW4gdGhlCiAgICAgKiByZXR1cm5lZCBhcnJheSB3aWxsIGhhdmUgdmFyaWFudDA9Jmd0O3ZhclggLCB2YXJpYW50MT0mZ3Q7dmFyWSAsCiAgICAgKiB2YXJpYW50Mj0mZ3Q7dmFyWgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlTG9jYWxlKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbGUpOiA/YXJyYXkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXRzIHRoZSB2YXJpYW50cyBmb3IgdGhlIGlucHV0IGxvY2FsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sb2NhbGUuZ2V0YWxsdmFyaWFudHMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAgICAgKiBUaGUgbG9jYWxlIHRvIGV4dHJhY3QgdGhlIHZhcmlhbnRzIGZyb20KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbCBUaGUgYXJyYXkgY29udGFpbmluZyB0aGUgbGlzdCBvZiBhbGwgdmFyaWFudHMgc3VidGFnIGZvciB0aGUgbG9jYWxlCiAgICAgKiBvciA8Yj5OVUxMPC9iPiBpZiBub3QgcHJlc2VudAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEFsbFZhcmlhbnRzKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbGUpOiA/YXJyYXkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBDaGVja3MgaWYgYSBsYW5ndWFnZSB0YWcgZmlsdGVyIG1hdGNoZXMgd2l0aCBsb2NhbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLmZpbHRlcm1hdGNoZXMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYW5ndWFnZVRhZyA8cD4KICAgICAqIFRoZSBsYW5ndWFnZSB0YWcgdG8gY2hlY2sKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSA8cD4KICAgICAqIFRoZSBsYW5ndWFnZSByYW5nZSB0byBjaGVjayBhZ2FpbnN0CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkY2Fub25pY2FsaXplIDxwPgogICAgICogSWYgdHJ1ZSwgdGhlIGFyZ3VtZW50cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBjYW5vbmljYWwgZm9ybSBiZWZvcmUKICAgICAqIG1hdGNoaW5nLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sfG51bGwgPGI+VFJVRTwvYj4gaWYgJGxvY2FsZSBtYXRjaGVzICRsYW5ndGFnIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmlsdGVyTWF0Y2hlcygKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbGFuZ3VhZ2VUYWcsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSwKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNS42JyldICRjYW5vbmljYWxpemUsCiAgICAgICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjAnKV0gI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRjYW5vbmljYWxpemUgPSBmYWxzZQogICAgKTogP2Jvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBTZWFyY2hlcyB0aGUgbGFuZ3VhZ2UgdGFnIGxpc3QgZm9yIHRoZSBiZXN0IG1hdGNoIHRvIHRoZSBsYW5ndWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sb2NhbGUubG9va3VwLnBocAogICAgICogQHBhcmFtIGFycmF5ICRsYW5ndWFnZVRhZyA8cD4KICAgICAqIEFuIGFycmF5IGNvbnRhaW5pbmcgYSBsaXN0IG9mIGxhbmd1YWdlIHRhZ3MgdG8gY29tcGFyZSB0bwogICAgICogPGk+bG9jYWxlPC9pPi4gTWF4aW11bSAxMDAgaXRlbXMgYWxsb3dlZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSA8cD4KICAgICAqIFRoZSBsb2NhbGUgdG8gdXNlIGFzIHRoZSBsYW5ndWFnZSByYW5nZSB3aGVuIG1hdGNoaW5nLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGJvb2wgJGNhbm9uaWNhbGl6ZSA8cD4KICAgICAqIElmIHRydWUsIHRoZSBhcmd1bWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gY2Fub25pY2FsIGZvcm0gYmVmb3JlCiAgICAgKiBtYXRjaGluZy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlZmF1bHRMb2NhbGUgPHA+CiAgICAgKiBUaGUgbG9jYWxlIHRvIHVzZSBpZiBubyBtYXRjaCBpcyBmb3VuZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIGNsb3Nlc3QgbWF0Y2hpbmcgbGFuZ3VhZ2UgdGFnIG9yIGRlZmF1bHQgdmFsdWUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9va3VwKAogICAgICAgIGFycmF5ICRsYW5ndWFnZVRhZywKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbG9jYWxlLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc1LjYnKV0gJGNhbm9uaWNhbGl6ZSwKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNS42JyldICRkZWZhdWx0TG9jYWxlLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4wJyldICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkY2Fub25pY2FsaXplID0gZmFsc2UsCiAgICAgICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjAnKV0gI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkZGVmYXVsdExvY2FsZSA9IG51bGwKICAgICk6ID9zdHJpbmcge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLmNhbm9uaWNhbGl6ZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZQogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbm9uaWNhbGl6ZSgjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbG9jYWxlKTogP3N0cmluZyB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFRyaWVzIHRvIGZpbmQgb3V0IGJlc3QgYXZhaWxhYmxlIGxvY2FsZSBiYXNlZCBvbiBIVFRQICJBY2NlcHQtTGFuZ3VhZ2UiIGhlYWRlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sb2NhbGUuYWNjZXB0ZnJvbWh0dHAucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoZWFkZXIgPHA+CiAgICAgKiBUaGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlICJBY2NlcHQtTGFuZ3VhZ2UiIGhlYWRlciBhY2NvcmRpbmcgdG8gZm9ybWF0IGluIFJGQyAyNjE2LgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGNvcnJlc3BvbmRpbmcgbG9jYWxlIGlkZW50aWZpZXIuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWNjZXB0RnJvbUh0dHAoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGhlYWRlcik6IHN0cmluZ3xmYWxzZSB7fQp9CgpjbGFzcyBNZXNzYWdlRm9ybWF0dGVyCnsKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIENvbnN0cnVjdHMgYSBuZXcgTWVzc2FnZSBGb3JtYXR0ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVzc2FnZWZvcm1hdHRlci5jcmVhdGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAgICAgKiBUaGUgbG9jYWxlIHRvIHVzZSB3aGVuIGZvcm1hdHRpbmcgYXJndW1lbnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIDxwPgogICAgICogVGhlIHBhdHRlcm4gc3RyaW5nIHRvIHN0aWNrIGFyZ3VtZW50cyBpbnRvLgogICAgICogVGhlIHBhdHRlcm4gdXNlcyBhbiAnYXBvc3Ryb3BoZS1mcmllbmRseScgc3ludGF4OyBpdCBpcyBydW4gdGhyb3VnaAogICAgICogdW1zZ19hdXRvUXVvdGVBcG9zdHJvcGhlCiAgICAgKiBiZWZvcmUgYmVpbmcgaW50ZXJwcmV0ZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAdGhyb3dzIEludGxFeGNlcHRpb24gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbGUsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHBhdHRlcm4KICAgICkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IE1lc3NhZ2UgRm9ybWF0dGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lc3NhZ2Vmb3JtYXR0ZXIuY3JlYXRlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIDxwPgogICAgICogVGhlIGxvY2FsZSB0byB1c2Ugd2hlbiBmb3JtYXR0aW5nIGFyZ3VtZW50cwogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiA8cD4KICAgICAqIFRoZSBwYXR0ZXJuIHN0cmluZyB0byBzdGljayBhcmd1bWVudHMgaW50by4KICAgICAqIFRoZSBwYXR0ZXJuIHVzZXMgYW4gJ2Fwb3N0cm9waGUtZnJpZW5kbHknIHN5bnRheDsgaXQgaXMgcnVuIHRocm91Z2gKICAgICAqIHVtc2dfYXV0b1F1b3RlQXBvc3Ryb3BoZQogICAgICogYmVmb3JlIGJlaW5nIGludGVycHJldGVkLgogICAgICogPC9wPgogICAgICogQHJldHVybiBNZXNzYWdlRm9ybWF0dGVyfG51bGwgVGhlIGZvcm1hdHRlciBvYmplY3QKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcGF0dGVybgogICAgKTogP01lc3NhZ2VGb3JtYXR0ZXIge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBGb3JtYXQgdGhlIG1lc3NhZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVzc2FnZWZvcm1hdHRlci5mb3JtYXQucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJHZhbHVlcyA8cD4KICAgICAqIEFyZ3VtZW50cyB0byBpbnNlcnQgaW50byB0aGUgZm9ybWF0IHN0cmluZwogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGZvcm1hdHRlZCBzdHJpbmcsIG9yIDxiPkZBTFNFPC9iPiBpZiBhbiBlcnJvciBvY2N1cnJlZAogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9ybWF0KGFycmF5ICR2YWx1ZXMpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBRdWljayBmb3JtYXQgbWVzc2FnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZXNzYWdlZm9ybWF0dGVyLmZvcm1hdG1lc3NhZ2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAgICAgKiBUaGUgbG9jYWxlIHRvIHVzZSBmb3IgZm9ybWF0dGluZyBsb2NhbGUtZGVwZW5kZW50IHBhcnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIDxwPgogICAgICogVGhlIHBhdHRlcm4gc3RyaW5nIHRvIGluc2VydCB0aGluZ3MgaW50by4KICAgICAqIFRoZSBwYXR0ZXJuIHVzZXMgYW4gJ2Fwb3N0cm9waGUtZnJpZW5kbHknIHN5bnRheDsgaXQgaXMgcnVuIHRocm91Z2gKICAgICAqIHVtc2dfYXV0b1F1b3RlQXBvc3Ryb3BoZQogICAgICogYmVmb3JlIGJlaW5nIGludGVycHJldGVkLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZXMgPHA+CiAgICAgKiBUaGUgYXJyYXkgb2YgdmFsdWVzIHRvIGluc2VydCBpbnRvIHRoZSBmb3JtYXQgc3RyaW5nCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgZm9ybWF0dGVkIHBhdHRlcm4gc3RyaW5nIG9yIDxiPkZBTFNFPC9iPiBpZiBhbiBlcnJvciBvY2N1cnJlZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2UoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcGF0dGVybiwKICAgICAgICBhcnJheSAkdmFsdWVzCiAgICApOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBQYXJzZSBpbnB1dCBzdHJpbmcgYWNjb3JkaW5nIHRvIHBhdHRlcm4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVzc2FnZWZvcm1hdHRlci5wYXJzZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICAgICAqIFRoZSBzdHJpbmcgdG8gcGFyc2UKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgQW4gYXJyYXkgY29udGFpbmluZyB0aGUgaXRlbXMgZXh0cmFjdGVkLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHBhcnNlKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRzdHJpbmcpOiBhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFF1aWNrIHBhcnNlIGlucHV0IHN0cmluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZXNzYWdlZm9ybWF0dGVyLnBhcnNlbWVzc2FnZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSA8cD4KICAgICAqIFRoZSBsb2NhbGUgdG8gdXNlIGZvciBwYXJzaW5nIGxvY2FsZS1kZXBlbmRlbnQgcGFydHMKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gPHA+CiAgICAgKiBUaGUgcGF0dGVybiB3aXRoIHdoaWNoIHRvIHBhcnNlIHRoZSA8aT52YWx1ZTwvaT4uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIDxwPgogICAgICogVGhlIHN0cmluZyB0byBwYXJzZSwgY29uZm9ybWluZyB0byB0aGUgPGk+cGF0dGVybjwvaT4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFuIGFycmF5IGNvbnRhaW5pbmcgaXRlbXMgZXh0cmFjdGVkLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZU1lc3NhZ2UoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcGF0dGVybiwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbWVzc2FnZQogICAgKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBTZXQgdGhlIHBhdHRlcm4gdXNlZCBieSB0aGUgZm9ybWF0dGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lc3NhZ2Vmb3JtYXR0ZXIuc2V0cGF0dGVybi5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gPHA+CiAgICAgKiBUaGUgcGF0dGVybiBzdHJpbmcgdG8gdXNlIGluIHRoaXMgbWVzc2FnZSBmb3JtYXR0ZXIuCiAgICAgKiBUaGUgcGF0dGVybiB1c2VzIGFuICdhcG9zdHJvcGhlLWZyaWVuZGx5JyBzeW50YXg7IGl0IGlzIHJ1biB0aHJvdWdoCiAgICAgKiB1bXNnX2F1dG9RdW90ZUFwb3N0cm9waGUKICAgICAqIGJlZm9yZSBiZWluZyBpbnRlcnByZXRlZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGF0dGVybigjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcGF0dGVybik6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXQgdGhlIHBhdHRlcm4gdXNlZCBieSB0aGUgZm9ybWF0dGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lc3NhZ2Vmb3JtYXR0ZXIuZ2V0cGF0dGVybi5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBwYXR0ZXJuIHN0cmluZyBmb3IgdGhpcyBtZXNzYWdlIGZvcm1hdHRlcgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF0dGVybigpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXQgdGhlIGxvY2FsZSBmb3Igd2hpY2ggdGhlIGZvcm1hdHRlciB3YXMgY3JlYXRlZC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVzc2FnZWZvcm1hdHRlci5nZXRsb2NhbGUucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgbG9jYWxlIG5hbWUKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldExvY2FsZSgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXQgdGhlIGVycm9yIGNvZGUgZnJvbSBsYXN0IG9wZXJhdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZXNzYWdlZm9ybWF0dGVyLmdldGVycm9yY29kZS5waHAKICAgICAqIEByZXR1cm4gaW50IFRoZSBlcnJvciBjb2RlLCBvbmUgb2YgVUVycm9yQ29kZSB2YWx1ZXMuIEluaXRpYWwgdmFsdWUgaXMgVV9aRVJPX0VSUk9SLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JDb2RlKCk6IGludCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIEdldCB0aGUgZXJyb3IgdGV4dCBmcm9tIHRoZSBsYXN0IG9wZXJhdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZXNzYWdlZm9ybWF0dGVyLmdldGVycm9ybWVzc2FnZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIERlc2NyaXB0aW9uIG9mIHRoZSBsYXN0IGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7fQp9CgpjbGFzcyBJbnRsRGF0ZUZvcm1hdHRlcgp7CiAgICAvKioKICAgICAqIENvbXBsZXRlbHkgc3BlY2lmaWVkIHN0eWxlIChUdWVzZGF5LCBBcHJpbCAxMiwgMTk1MiBBRCBvciAzOjMwOjQycG0gUFNUKQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsZGF0ZWZvcm1hdHRlci5waHAjaW50bC5pbnRsZGF0ZWZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IEZVTEwgPSAwOwoKICAgIC8qKgogICAgICogTG9uZyBzdHlsZSAoSmFudWFyeSAxMiwgMTk1MiBvciAzOjMwOjMycG0pCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxkYXRlZm9ybWF0dGVyLnBocCNpbnRsLmludGxkYXRlZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgTE9ORyA9IDE7CgogICAgLyoqCiAgICAgKiBNZWRpdW0gc3R5bGUgKEphbiAxMiwgMTk1MikKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGRhdGVmb3JtYXR0ZXIucGhwI2ludGwuaW50bGRhdGVmb3JtYXR0ZXItY29uc3RhbnRzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNRURJVU0gPSAyOwoKICAgIC8qKgogICAgICogTW9zdCBhYmJyZXZpYXRlZCBzdHlsZSwgb25seSBlc3NlbnRpYWwgZGF0YSAoMTIvMTMvNTIgb3IgMzozMHBtKQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsZGF0ZWZvcm1hdHRlci5waHAjaW50bC5pbnRsZGF0ZWZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNIT1JUID0gMzsKCiAgICAvKioKICAgICAqIERvIG5vdCBpbmNsdWRlIHRoaXMgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsZGF0ZWZvcm1hdHRlci5waHAjaW50bC5pbnRsZGF0ZWZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE5PTkUgPSAtMTsKCiAgICAvKioKICAgICAqIEdyZWdvcmlhbiBDYWxlbmRhcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsZGF0ZWZvcm1hdHRlci5waHAjaW50bC5pbnRsZGF0ZWZvcm1hdHRlci1jb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IEdSRUdPUklBTiA9IDE7CgogICAgLyoqCiAgICAgKiBOb24tR3JlZ29yaWFuIENhbGVuZGFyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxkYXRlZm9ybWF0dGVyLnBocCNpbnRsLmludGxkYXRlZm9ybWF0dGVyLWNvbnN0YW50cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgVFJBRElUSU9OQUwgPSAwOwogICAgcHVibGljIGNvbnN0IFJFTEFUSVZFX0ZVTEwgPSAxMjg7CiAgICBwdWJsaWMgY29uc3QgUkVMQVRJVkVfTE9ORyA9IDEyOTsKICAgIHB1YmxpYyBjb25zdCBSRUxBVElWRV9NRURJVU0gPSAxMzA7CiAgICBwdWJsaWMgY29uc3QgUkVMQVRJVkVfU0hPUlQgPSAxMzE7CiAgICBwdWJsaWMgY29uc3QgUEFUVEVSTiA9IC0yOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRsb2NhbGUKICAgICAqIEBwYXJhbSBpbnQgJGRhdGVUeXBlCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lVHlwZQogICAgICogQHBhcmFtIG1peGVkfG51bGwgJHRpbWV6b25lIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSBtaXhlZHxudWxsICRjYWxlbmRhciBbb3B0aW9uYWxdCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIFtvcHRpb25hbF0KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSwKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnOC4wJyldICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRkYXRlVHlwZSwKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnOC4wJyldICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICR0aW1lVHlwZSwKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMScpXSBpbnQgJGRhdGVUeXBlID0gMCwKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMScpXSBpbnQgJHRpbWVUeXBlID0gMCwKICAgICAgICAkdGltZXpvbmUgPSBudWxsLAogICAgICAgICRjYWxlbmRhciA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkcGF0dGVybiA9IG51bGwKICAgICkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBDcmVhdGUgYSBkYXRlIGZvcm1hdHRlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5jcmVhdGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAgICAgKiBMb2NhbGUgdG8gdXNlIHdoZW4gZm9ybWF0dGluZyBvciBwYXJzaW5nOyBkZWZhdWx0IGlzIHNwZWNpZmllZCBpbiB0aGUgaW5pIHNldHRpbmcgaW50bC5kZWZhdWx0X2xvY2FsZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGRhdGVUeXBlIDxwPgogICAgICogRGF0ZSB0eXBlIHRvIHVzZSAoPGI+bm9uZTwvYj4sCiAgICAgKiA8Yj5zaG9ydDwvYj4sIDxiPm1lZGl1bTwvYj4sCiAgICAgKiA8Yj5sb25nPC9iPiwgPGI+ZnVsbDwvYj4pLgogICAgICogVGhpcyBpcyBvbmUgb2YgdGhlCiAgICAgKiBJbnRsRGF0ZUZvcm1hdHRlciBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR0aW1lVHlwZSA8cD4KICAgICAqIFRpbWUgdHlwZSB0byB1c2UgKDxiPm5vbmU8L2I+LAogICAgICogPGI+c2hvcnQ8L2I+LCA8Yj5tZWRpdW08L2I+LAogICAgICogPGI+bG9uZzwvYj4sIDxiPmZ1bGw8L2I+KS4KICAgICAqIFRoaXMgaXMgb25lIG9mIHRoZQogICAgICogSW50bERhdGVGb3JtYXR0ZXIgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkdGltZXpvbmUgW29wdGlvbmFsXSA8cD4KICAgICAqIFRpbWUgem9uZSBJRCwgZGVmYXVsdCBpcyBzeXN0ZW0gZGVmYXVsdC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNhbGVuZGFyIFtvcHRpb25hbF0gPHA+CiAgICAgKiBDYWxlbmRhciB0byB1c2UgZm9yIGZvcm1hdHRpbmcgb3IgcGFyc2luZzsgZGVmYXVsdCBpcyBHcmVnb3JpYW4uCiAgICAgKiBUaGlzIGlzIG9uZSBvZiB0aGUKICAgICAqIEludGxEYXRlRm9ybWF0dGVyIGNhbGVuZGFyIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gW29wdGlvbmFsXSA8cD4KICAgICAqIE9wdGlvbmFsIHBhdHRlcm4gdG8gdXNlIHdoZW4gZm9ybWF0dGluZyBvciBwYXJzaW5nLgogICAgICogUG9zc2libGUgcGF0dGVybnMgYXJlIGRvY3VtZW50ZWQgYXQgaHR0cDovL3VzZXJndWlkZS5pY3UtcHJvamVjdC5vcmcvZm9ybWF0cGFyc2UvZGF0ZXRpbWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIEludGxEYXRlRm9ybWF0dGVyfG51bGwKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbG9jYWxlLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc4LjAnKV0gI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGRhdGVUeXBlLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc4LjAnKV0gI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHRpbWVUeXBlLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4xJyldIGludCAkZGF0ZVR5cGUgPSAwLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4xJyldIGludCAkdGltZVR5cGUgPSAwLAogICAgICAgICR0aW1lem9uZSA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnSW50bENhbGVuZGFyfGludHxudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGNhbGVuZGFyID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRwYXR0ZXJuID0gbnVsbAogICAgKTogP0ludGxEYXRlRm9ybWF0dGVyIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogR2V0IHRoZSBkYXRldHlwZSB1c2VkIGZvciB0aGUgSW50bERhdGVGb3JtYXR0ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuZ2V0ZGF0ZXR5cGUucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgY3VycmVudCBkYXRlIHR5cGUgdmFsdWUgb2YgdGhlIGZvcm1hdHRlci4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldERhdGVUeXBlKCk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIEdldCB0aGUgdGltZXR5cGUgdXNlZCBmb3IgdGhlIEludGxEYXRlRm9ybWF0dGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxkYXRlZm9ybWF0dGVyLmdldHRpbWV0eXBlLnBocAogICAgICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIGN1cnJlbnQgZGF0ZSB0eXBlIHZhbHVlIG9mIHRoZSBmb3JtYXR0ZXIuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lVHlwZSgpOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXQgdGhlIGNhbGVuZGFyIHVzZWQgZm9yIHRoZSBJbnRsRGF0ZUZvcm1hdHRlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5nZXRjYWxlbmRhci5waHAKICAgICAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBjYWxlbmRhciBiZWluZyB1c2VkIGJ5IHRoZSBmb3JtYXR0ZXIuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDYWxlbmRhcigpOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBzZXRzIHRoZSBjYWxlbmRhciB1c2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBjYWxlbmRhciwgd2hpY2ggbXVzdCBiZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5zZXRjYWxlbmRhci5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNhbGVuZGFyIDxwPgogICAgICogVGhlIGNhbGVuZGFyIHRvIHVzZS4KICAgICAqIERlZmF1bHQgaXMgPGI+SW50bERhdGVGb3JtYXR0ZXI6OkdSRUdPUklBTjwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldENhbGVuZGFyKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ0ludGxDYWxlbmRhcnxpbnR8bnVsbCddLCBkZWZhdWx0OiAnJyldICRjYWxlbmRhcik6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXQgdGhlIHRpbWV6b25lLWlkIHVzZWQgZm9yIHRoZSBJbnRsRGF0ZUZvcm1hdHRlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5nZXR0aW1lem9uZWlkLnBocAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgSUQgc3RyaW5nIGZvciB0aGUgdGltZSB6b25lIHVzZWQgYnkgdGhpcyBmb3JtYXR0ZXIuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lWm9uZUlkKCk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuNS4wLCBQRUNMIGludGwgJmd0Oz0gMy4wLjApPGJyLz4KICAgICAqIEdldCBjb3B5IG9mIGZvcm1hdHRlcidzIGNhbGVuZGFyIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuZ2V0Y2FsZW5kYXJvYmplY3QucGhwCiAgICAgKiBAcmV0dXJuIEludGxDYWxlbmRhcnxmYWxzZXxudWxsIEEgY29weSBvZiB0aGUgaW50ZXJuYWwgY2FsZW5kYXIgb2JqZWN0IHVzZWQgYnkgdGhpcyBmb3JtYXR0ZXIuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDYWxlbmRhck9iamVjdCgpOiBJbnRsQ2FsZW5kYXJ8ZmFsc2V8bnVsbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuNS4wLCBQRUNMIGludGwgJmd0Oz0gMy4wLjApPGJyLz4KICAgICAqICBHZXQgZm9ybWF0dGVyJ3MgdGltZXpvbmUKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxkYXRlZm9ybWF0dGVyLmdldHRpbWV6b25lLnBocAogICAgICogQHJldHVybiBJbnRsVGltZVpvbmV8ZmFsc2UgVGhlIGFzc29jaWF0ZWQgSW50bFRpbWVab25lIG9iamVjdCBvciBGQUxTRSBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZVpvbmUoKTogSW50bFRpbWVab25lfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgdGltZSB6b25lIHRvIHVzZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5zZXR0aW1lem9uZWlkLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkem9uZSA8cD4KICAgICAqIFRoZSB0aW1lIHpvbmUgSUQgc3RyaW5nIG9mIHRoZSB0aW1lIHpvbmUgdG8gdXNlLgogICAgICogSWYgPGI+TlVMTDwvYj4gb3IgdGhlIGVtcHR5IHN0cmluZywgdGhlIGRlZmF1bHQgdGltZSB6b25lIGZvciB0aGUgcnVudGltZSBpcyB1c2VkLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBAcmVtb3ZlZCA3LjAKICAgICAqIEBzZWUgSW50bERhdGVGb3JtYXR0ZXI6OnNldFRpbWVab25lKCkKICAgICAqLwogICAgI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAiJWNsYXNzJS0+c2V0VGltZVpvbmUoJXBhcmFtZXRlcnNMaXN0JSkiLCBzaW5jZTogIjUuNSIpXQogICAgcHVibGljIGZ1bmN0aW9uIHNldFRpbWVab25lSWQoJHpvbmUpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS41LjAsIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMCk8YnIvPgogICAgICogU2V0cyBmb3JtYXR0ZXIncyB0aW1lem9uZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5zZXR0aW1lem9uZS5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkdGltZXpvbmUgPHA+CiAgICAgKiBUaGUgdGltZXpvbmUgdG8gdXNlIGZvciB0aGlzIGZvcm1hdHRlci4gVGhpcyBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZQogICAgICogZm9sbG93aW5nIGZvcm1zOgogICAgICogPHVsPgogICAgICogPGxpPgogICAgICogPHA+CiAgICAgKiA8Yj5OVUxMPC9iPiwgaW4gd2hpY2ggY2FzZSB0aGUgZGVmYXVsdCB0aW1lem9uZSB3aWxsIGJlIHVzZWQsIGFzIHNwZWNpZmllZCBpbgogICAgICogdGhlIGluaSBzZXR0aW5nIHtAbGluayAiaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZGF0ZXRpbWUuY29uZmlndXJhdGlvbi5waHAjaW5pLmRhdGUudGltZXpvbmUiIGRhdGUudGltZXpvbmV9IG9yCiAgICAgKiB0aHJvdWdoIHRoZSBmdW5jdGlvbiAge0BsaW5rICJodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYXRlLWRlZmF1bHQtdGltZXpvbmUtc2V0LnBocCIgZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgpfSBhbmQgYXMKICAgICAqIHJldHVybmVkIGJ5IHtAbGluayAiaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGF0ZS1kZWZhdWx0LXRpbWV6b25lLWdldC5waHAiIGRhdGVfZGVmYXVsdF90aW1lem9uZV9nZXQoKX0uCiAgICAgKiA8L3A+CiAgICAgKiA8L2xpPgogICAgICogPGxpPgogICAgICogPHA+CiAgICAgKiBBbiB7QGxpbmsgImh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGx0aW1lem9uZS5waHAiIEludGxUaW1lWm9uZX0sIHdoaWNoIHdpbGwgYmUgdXNlZCBkaXJlY3RseS4KICAgICAqIDwvcD4KICAgICAqIDwvbGk+CiAgICAgKiA8bGk+CiAgICAgKiA8cD4KICAgICAqIEEge0BsaW5rICJodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kYXRldGltZXpvbmUucGhwIiBEYXRlVGltZVpvbmV9LiBJdHMgaWRlbnRpZmllciB3aWxsIGJlIGV4dHJhY3RlZAogICAgICogYW5kIGFuIElDVSB0aW1lem9uZSBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkOyB0aGUgdGltZXpvbmUgd2lsbCBiZSBiYWNrZWQKICAgICAqIGJ5IElDVSdzIGRhdGFiYXNlLCBub3QgUEhQJ3MuCiAgICAgKiA8L3A+CiAgICAgKiA8L2xpPgogICAgICogPGxpPgogICAgICogPHA+CiAgICAgKiBBIHtAbGluayAiaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuc3RyaW5nLnBocCIgc3RyaW5nfSwgd2hpY2ggc2hvdWxkIGJlIGEgdmFsaWQgSUNVIHRpbWV6b25lIGlkZW50aWZpZXIuCiAgICAgKiBTZWUgPGI+SW50bFRpbWVab25lOjpjcmVhdGVUaW1lWm9uZUlERW51bWVyYXRpb24oKTwvYj4uIFJhdyBvZmZzZXRzIHN1Y2ggYXMgPGVtPiJHTVQrMDg6MzAiPC9lbT4gYXJlIGFsc28gYWNjZXB0ZWQuCiAgICAgKiA8L3A+CiAgICAgKiA8L2xpPgogICAgICogPC91bD4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbHxudWxsIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMycgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJ2Jvb2x8bnVsbCcpXQogICAgcHVibGljIGZ1bmN0aW9uIHNldFRpbWVab25lKCR0aW1lem9uZSkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBTZXQgdGhlIHBhdHRlcm4gdXNlZCBmb3IgdGhlIEludGxEYXRlRm9ybWF0dGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxkYXRlZm9ybWF0dGVyLnNldHBhdHRlcm4ucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIDxwPgogICAgICogTmV3IHBhdHRlcm4gc3RyaW5nIHRvIHVzZS4KICAgICAqIFBvc3NpYmxlIHBhdHRlcm5zIGFyZSBkb2N1bWVudGVkIGF0IGh0dHA6Ly91c2VyZ3VpZGUuaWN1LXByb2plY3Qub3JnL2Zvcm1hdHBhcnNlL2RhdGV0aW1lLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBCYWQgZm9ybWF0c3RyaW5ncyBhcmUgdXN1YWxseSB0aGUgY2F1c2Ugb2YgdGhlIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXR0ZXJuKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRwYXR0ZXJuKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIEdldCB0aGUgcGF0dGVybiB1c2VkIGZvciB0aGUgSW50bERhdGVGb3JtYXR0ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuZ2V0cGF0dGVybi5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBwYXR0ZXJuIHN0cmluZyBiZWluZyB1c2VkIHRvIGZvcm1hdC9wYXJzZS4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhdHRlcm4oKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogR2V0IHRoZSBsb2NhbGUgdXNlZCBieSBmb3JtYXR0ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuZ2V0bG9jYWxlLnBocAogICAgICogQHBhcmFtIGludCAkdHlwZSBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgbG9jYWxlIG9mIHRoaXMgZm9ybWF0dGVyIG9yICdmYWxzZScgaWYgZXJyb3IKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldExvY2FsZSgKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkdHlwZSA9IDAKICAgICk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFNldCB0aGUgbGVuaWVuY3kgb2YgdGhlIHBhcnNlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5zZXRsZW5pZW50LnBocAogICAgICogQHBhcmFtIGJvb2wgJGxlbmllbnQgPHA+CiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIHBhcnNlciBpcyBsZW5pZW50IG9yIG5vdCwgZGVmYXVsdCBpcyA8Yj5UUlVFPC9iPiAobGVuaWVudCkuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldExlbmllbnQoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRsZW5pZW50KTogdm9pZCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIEdldCB0aGUgbGVuaWVudCB1c2VkIGZvciB0aGUgSW50bERhdGVGb3JtYXR0ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuaXNsZW5pZW50LnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIHBhcnNlciBpcyBsZW5pZW50LCA8Yj5GQUxTRTwvYj4gaWYgcGFyc2VyIGlzIHN0cmljdC4gQnkgZGVmYXVsdCB0aGUgcGFyc2VyIGlzIGxlbmllbnQuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0xlbmllbnQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIEZvcm1hdCB0aGUgZGF0ZS90aW1lIHZhbHVlIGFzIGEgc3RyaW5nCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxkYXRlZm9ybWF0dGVyLmZvcm1hdC5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0ZXRpbWUgPHA+CiAgICAgKiBWYWx1ZSB0byBmb3JtYXQuIFRoaXMgbWF5IGJlIGEgPGI+RGF0ZVRpbWU8L2I+IG9iamVjdCwKICAgICAqIGFuIGludGVnZXIgcmVwcmVzZW50aW5nIGEgVW5peCB0aW1lc3RhbXAgdmFsdWUgKHNlY29uZHMKICAgICAqIHNpbmNlIGVwb2NoLCBVVEMpIG9yIGFuIGFycmF5IGluIHRoZSBmb3JtYXQgb3V0cHV0IGJ5CiAgICAgKiA8Yj5sb2NhbHRpbWU8L2I+LgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGZvcm1hdHRlZCBzdHJpbmcgb3IsIGlmIGFuIGVycm9yIG9jY3VycmVkLCA8Yj5GQUxTRTwvYj4uCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXQoCiAgICAgICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSAkZGF0ZXRpbWUgPSBudWxsLAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICRkYXRldGltZSwKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRhcnJheSA9IG51bGwKICAgICk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuNS4wLCBQRUNMIGludGwgJmd0Oz0gMy4wLjApPGJyLz4KICAgICAqIEZvcm1hdHMgYW4gb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5mb3JtYXRvYmplY3QucGhwCiAgICAgKiBAcGFyYW0gb2JqZWN0ICRkYXRldGltZSA8cD4KICAgICAqIEFuIG9iamVjdCBvZiB0eXBlIHtAbGluayAiaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCIgSW50bENhbGVuZGFyfSBvciB7QGxpbmsgImh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRhdGV0aW1lLnBocCIgRGF0ZVRpbWV9LiBUaGUgdGltZXpvbmUgaW5mb3JtYXRpb24gaW4gdGhlIG9iamVjdCB3aWxsIGJlIHVzZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gbWl4ZWQgJGZvcm1hdCBbb3B0aW9uYWxdIDxwPgogICAgICogSG93IHRvIGZvcm1hdCB0aGUgZGF0ZS90aW1lLiBUaGlzIGNhbiBlaXRoZXIgYmUgYW4ge0BsaW5rICJodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5hcnJheS5waHAiIGFycmF5fSB3aXRoCiAgICAgKiB0d28gZWxlbWVudHMgKGZpcnN0IHRoZSBkYXRlIHN0eWxlLCB0aGVuIHRoZSB0aW1lIHN0eWxlLCB0aGVzZSBiZWluZyBvbmUKICAgICAqIG9mIHRoZSBjb25zdGFudHMgPGI+SW50bERhdGVGb3JtYXR0ZXI6Ok5PTkU8L2I+LAogICAgICogPGI+SW50bERhdGVGb3JtYXR0ZXI6OlNIT1JUPC9iPiwKICAgICAqIDxiPkludGxEYXRlRm9ybWF0dGVyOjpNRURJVU08L2I+LAogICAgICogPGI+SW50bERhdGVGb3JtYXR0ZXI6OkxPTkc8L2I+LAogICAgICogPGI+SW50bERhdGVGb3JtYXR0ZXI6OkZVTEw8L2I+KSwgYSBsb25nIHdpdGgKICAgICAqIHRoZSB2YWx1ZSBvZiBvbmUgb2YgdGhlc2UgY29uc3RhbnRzIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgdXNlZCBib3RoCiAgICAgKiBmb3IgdGhlIHRpbWUgYW5kIHRoZSBkYXRlKSBvciBhIHtAbGluayAiaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuc3RyaW5nLnBocCIgc3RyaW5nfSB3aXRoIHRoZSBmb3JtYXQKICAgICAqIGRlc2NyaWJlZCBpbiB7QGxpbmsgImh0dHA6Ly93d3cuaWN1LXByb2plY3Qub3JnL2FwaXJlZi9pY3U0Yy9jbGFzc1NpbXBsZURhdGVGb3JtYXQuaHRtbCNkZXRhaWxzIiB0aGUgSUNVIGRvY3VtZW50YXRpb259LgogICAgICogSWYgPGI+TlVMTDwvYj4sIHRoZSBkZWZhdWx0IHN0eWxlIHdpbGwgYmUgdXNlZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbG9jYWxlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgbG9jYWxlIHRvIHVzZSwgb3IgPGI+TlVMTDwvYj4gdG8gdXNlIHRoZSB7QGxpbmsgImh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGwuY29uZmlndXJhdGlvbi5waHAjaW5pLmludGwuZGVmYXVsdC1sb2NhbGUiIGRlZmF1bHQgb25lfS48L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBBIHN0cmluZyB3aXRoIHJlc3VsdCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmb3JtYXRPYmplY3QoJGRhdGV0aW1lLCAkZm9ybWF0ID0gbnVsbCwgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbG9jYWxlID0gbnVsbCk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICAgICAqIFBhcnNlIHN0cmluZyB0byBhIHRpbWVzdGFtcCB2YWx1ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5wYXJzZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICAgICAqIHN0cmluZyB0byBjb252ZXJ0IHRvIGEgdGltZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAmJG9mZnNldCBbb3B0aW9uYWxdIDxwPgogICAgICogUG9zaXRpb24gYXQgd2hpY2ggdG8gc3RhcnQgdGhlIHBhcnNpbmcgaW4gJHZhbHVlICh6ZXJvLWJhc2VkKS4KICAgICAqIElmIG5vIGVycm9yIG9jY3VycyBiZWZvcmUgJHZhbHVlIGlzIGNvbnN1bWVkLCAkcGFyc2VfcG9zIHdpbGwgY29udGFpbiAtMQogICAgICogb3RoZXJ3aXNlIGl0IHdpbGwgY29udGFpbiB0aGUgcG9zaXRpb24gYXQgd2hpY2ggcGFyc2luZyBlbmRlZCAoYW5kIHRoZSBlcnJvciBvY2N1cnJlZCkuCiAgICAgKiBUaGlzIHZhcmlhYmxlIHdpbGwgY29udGFpbiB0aGUgZW5kIHBvc2l0aW9uIGlmIHRoZSBwYXJzZSBmYWlscy4KICAgICAqIElmICRwYXJzZV9wb3MgPiBzdHJsZW4oJHZhbHVlKSwgdGhlIHBhcnNlIGZhaWxzIGltbWVkaWF0ZWx5LgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnR8ZmxvYXR8ZmFsc2UgdGltZXN0YW1wIHBhcnNlZCB2YWx1ZQogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2UoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHN0cmluZywgJiRvZmZzZXQgPSBudWxsKTogaW50fGZsb2F0fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogUGFyc2Ugc3RyaW5nIHRvIGEgZmllbGQtYmFzZWQgdGltZSB2YWx1ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5sb2NhbHRpbWUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAgICAgKiBzdHJpbmcgdG8gY29udmVydCB0byBhIHRpbWUKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJiRvZmZzZXQgW29wdGlvbmFsXSA8cD4KICAgICAqIFBvc2l0aW9uIGF0IHdoaWNoIHRvIHN0YXJ0IHRoZSBwYXJzaW5nIGluICR2YWx1ZSAoemVyby1iYXNlZCkuCiAgICAgKiBJZiBubyBlcnJvciBvY2N1cnMgYmVmb3JlICR2YWx1ZSBpcyBjb25zdW1lZCwgJHBhcnNlX3BvcyB3aWxsIGNvbnRhaW4gLTEKICAgICAqIG90aGVyd2lzZSBpdCB3aWxsIGNvbnRhaW4gdGhlIHBvc2l0aW9uIGF0IHdoaWNoIHBhcnNpbmcgZW5kZWQgLgogICAgICogSWYgJHBhcnNlX3BvcyA+IHN0cmxlbigkdmFsdWUpLCB0aGUgcGFyc2UgZmFpbHMgaW1tZWRpYXRlbHkuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlIExvY2FsdGltZSBjb21wYXRpYmxlIGFycmF5IG9mIGludGVnZXJzIDogY29udGFpbnMgMjQgaG91ciBjbG9jayB2YWx1ZSBpbiB0bV9ob3VyIGZpZWxkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2NhbHRpbWUoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHN0cmluZywgJiRvZmZzZXQgPSBudWxsKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXQgdGhlIGVycm9yIGNvZGUgZnJvbSBsYXN0IG9wZXJhdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5nZXRlcnJvcmNvZGUucGhwCiAgICAgKiBAcmV0dXJuIGludCBUaGUgZXJyb3IgY29kZSwgb25lIG9mIFVFcnJvckNvZGUgdmFsdWVzLiBJbml0aWFsIHZhbHVlIGlzIFVfWkVST19FUlJPUi4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yQ29kZSgpOiBpbnQge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBHZXQgdGhlIGVycm9yIHRleHQgZnJvbSB0aGUgbGFzdCBvcGVyYXRpb24uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxkYXRlZm9ybWF0dGVyLmdldGVycm9ybWVzc2FnZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIERlc2NyaXB0aW9uIG9mIHRoZSBsYXN0IGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogQHNpbmNlIDguNAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2VUb0NhbGVuZGFyKHN0cmluZyAkc3RyaW5nLCAmJG9mZnNldCA9IG51bGwpOiBpbnR8ZmxvYXR8ZmFsc2Uge30KfQoKY2xhc3MgUmVzb3VyY2VCdW5kbGUgaW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZSwgQ291bnRhYmxlCnsKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVzb3VyY2VidW5kbGUuY3JlYXRlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIDxwPkxvY2FsZSBmb3Igd2hpY2ggdGhlIHJlc291cmNlcyBzaG91bGQgYmUgbG9hZGVkIChsb2NhbGUgbmFtZSwgZS5nLiBlbl9DQSkuPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkYnVuZGxlIDxwPlRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGRhdGEgaXMgc3RvcmVkIG9yIHRoZSBuYW1lIG9mIHRoZSAuZGF0IGZpbGUuPC9wPgogICAgICogQHBhcmFtIGJvb2wgJGZhbGxiYWNrIFtvcHRpb25hbF0gPHA+V2hldGhlciBsb2NhbGUgc2hvdWxkIG1hdGNoIGV4YWN0bHkgb3IgZmFsbGJhY2sgdG8gcGFyZW50IGxvY2FsZSBpcyBhbGxvd2VkLjwvcD4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRidW5kbGUsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRmYWxsYmFjayA9IHRydWUKICAgICkge30KCiAgICAvKioKICAgICAqIChQSFAgJmd0Oz0gNS4zLjIsIFBFQ0wgaW50bCAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogQ3JlYXRlIGEgcmVzb3VyY2UgYnVuZGxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Jlc291cmNlYnVuZGxlLmNyZWF0ZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSA8cD4KICAgICAqIExvY2FsZSBmb3Igd2hpY2ggdGhlIHJlc291cmNlcyBzaG91bGQgYmUgbG9hZGVkIChsb2NhbGUgbmFtZSwgZS5nLiBlbl9DQSkuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRidW5kbGUgPHA+CiAgICAgKiBUaGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBkYXRhIGlzIHN0b3JlZCBvciB0aGUgbmFtZSBvZiB0aGUgLmRhdCBmaWxlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGJvb2wgJGZhbGxiYWNrIFtvcHRpb25hbF0gPHA+CiAgICAgKiBXaGV0aGVyIGxvY2FsZSBzaG91bGQgbWF0Y2ggZXhhY3RseSBvciBmYWxsYmFjayB0byBwYXJlbnQgbG9jYWxlIGlzIGFsbG93ZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIFJlc291cmNlQnVuZGxlfG51bGwgPGI+UmVzb3VyY2VCdW5kbGU8L2I+IG9iamVjdCBvciA8Yj5udWxsPC9iPiBvbiBlcnJvci4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbG9jYWxlLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGJ1bmRsZSwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJGZhbGxiYWNrID0gdHJ1ZQogICAgKTogP1Jlc291cmNlQnVuZGxlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQICZndDs9IDUuMy4yLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIEdldCBkYXRhIGZyb20gdGhlIGJ1bmRsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZXNvdXJjZWJ1bmRsZS5nZXQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nfGludCAkaW5kZXggPHA+CiAgICAgKiBEYXRhIGluZGV4LCBtdXN0IGJlIHN0cmluZyBvciBpbnRlZ2VyLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGJvb2wgJGZhbGxiYWNrCiAgICAgKiBAcmV0dXJuIG1peGVkIHRoZSBkYXRhIGxvY2F0ZWQgYXQgdGhlIGluZGV4IG9yIDxiPk5VTEw8L2I+IG9uIGVycm9yLiBTdHJpbmdzLCBpbnRlZ2VycyBhbmQgYmluYXJ5IGRhdGEgc3RyaW5ncwogICAgICogYXJlIHJldHVybmVkIGFzIGNvcnJlc3BvbmRpbmcgUEhQIHR5cGVzLCBpbnRlZ2VyIGFycmF5IGlzIHJldHVybmVkIGFzIFBIUCBhcnJheS4gQ29tcGxleCB0eXBlcyBhcmUKICAgICAqIHJldHVybmVkIGFzIDxiPlJlc291cmNlQnVuZGxlPC9iPiBvYmplY3QuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguNCcgPT4gJ1Jlc291cmNlQnVuZGxlfGFycmF5fHN0cmluZ3xpbnR8bnVsbCddLCBkZWZhdWx0OiAnbWl4ZWQnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoI1tMYW5ndWFnZUF3YXJlKFsnOC40JyA9PiAnc3RyaW5nfGludCddLCBkZWZhdWx0OiAnJyldICRpbmRleCwgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRmYWxsYmFjayA9IHRydWUpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQICZndDs9IDUuMy4yLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIEdldCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGJ1bmRsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZXNvdXJjZWJ1bmRsZS5jb3VudC5waHAKICAgICAqIEByZXR1cm4gaW50PDAsbWF4PiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGJ1bmRsZS4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludCB7fQoKICAgIC8qKgogICAgICogKFBIUCAmZ3Q7PSA1LjMuMiwgUEVDTCBpbnRsICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBHZXQgc3VwcG9ydGVkIGxvY2FsZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVzb3VyY2VidW5kbGUubG9jYWxlcy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJ1bmRsZSA8cD4KICAgICAqIFBhdGggb2YgUmVzb3VyY2VCdW5kbGUgZm9yIHdoaWNoIHRvIGdldCBhdmFpbGFibGUgbG9jYWxlcywgb3IKICAgICAqIGVtcHR5IHN0cmluZyBmb3IgZGVmYXVsdCBsb2NhbGVzIGxpc3QuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlIHRoZSBsaXN0IG9mIGxvY2FsZXMgc3VwcG9ydGVkIGJ5IHRoZSBidW5kbGUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TG9jYWxlcygjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkYnVuZGxlKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgJmd0Oz0gNS4zLjIsIFBFQ0wgaW50bCAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogR2V0IGJ1bmRsZSdzIGxhc3QgZXJyb3IgY29kZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVzb3VyY2VidW5kbGUuZ2V0ZXJyb3Jjb2RlLnBocAogICAgICogQHJldHVybiBpbnQgZXJyb3IgY29kZSBmcm9tIGxhc3QgYnVuZGxlIG9iamVjdCBjYWxsLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JDb2RlKCk6IGludCB7fQoKICAgIC8qKgogICAgICogKFBIUCAmZ3Q7PSA1LjMuMiwgUEVDTCBpbnRsICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBHZXQgYnVuZGxlJ3MgbGFzdCBlcnJvciBtZXNzYWdlLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZXNvdXJjZWJ1bmRsZS5nZXRlcnJvcm1lc3NhZ2UucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBlcnJvciBtZXNzYWdlIGZyb20gbGFzdCBidW5kbGUgb2JqZWN0J3MgY2FsbC4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yTWVzc2FnZSgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gSXRlcmF0b3IKICAgICAqIEBzaW5jZSA4LjAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCk6IEl0ZXJhdG9yIHt9Cn0KCi8qKgogKiBAc2luY2UgNS40CiAqLwpjbGFzcyBUcmFuc2xpdGVyYXRvcgp7CiAgICBwdWJsaWMgY29uc3QgRk9SV0FSRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUkVWRVJTRSA9IDE7CgogICAgLyoqCiAgICAgKiBTdGFydGluZyA4LjIgJGlkIGlzIHJlYWRvbmx5IHRvIHVubG9jayBzdWJjbGFzc2luZyBpdAogICAgICovCiAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljIHJlYWRvbmx5IHN0cmluZyAkaWQ7CgogICAgLyoqCiAgICAgKiAoUEhQICZndDs9IDUuNC4wLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIFByaXZhdGUgY29uc3RydWN0b3IgdG8gZGVueSBpbnN0YW50aWF0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RyYW5zbGl0ZXJhdG9yLmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgZmluYWwgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQICZndDs9IDUuNC4wLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIENyZWF0ZSBhIHRyYW5zbGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RyYW5zbGl0ZXJhdG9yLmNyZWF0ZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIDxwPgogICAgICogVGhlIGlkLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZGlyZWN0aW9uIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZGlyZWN0aW9uLCBkZWZhdWx0cyB0bwogICAgICogVHJhbnNsaXRlcmF0b3I6OkZPUldBUkQuCiAgICAgKiBNYXkgYWxzbyBiZSBzZXQgdG8KICAgICAqIFRyYW5zbGl0ZXJhdG9yOjpSRVZFUlNFLgogICAgICogPC9wPgogICAgICogQHJldHVybiBUcmFuc2xpdGVyYXRvcnxudWxsIGEgPGI+VHJhbnNsaXRlcmF0b3I8L2I+IG9iamVjdCBvbiBzdWNjZXNzLAogICAgICogb3IgPGI+TlVMTDwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGlkLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICNbRVYoW1RyYW5zbGl0ZXJhdG9yOjpGT1JXQVJELCBUcmFuc2xpdGVyYXRvcjo6UkVWRVJTRV0pXSAkZGlyZWN0aW9uID0gMAogICAgKTogP1RyYW5zbGl0ZXJhdG9yIHt9CgogICAgLyoqCiAgICAgKiAoUEhQICZndDs9IDUuNC4wLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIENyZWF0ZSB0cmFuc2xpdGVyYXRvciBmcm9tIHJ1bGVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RyYW5zbGl0ZXJhdG9yLmNyZWF0ZWZyb21ydWxlcy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJ1bGVzIDxwPgogICAgICogVGhlIHJ1bGVzLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZGlyZWN0aW9uIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZGlyZWN0aW9uLCBkZWZhdWx0cyB0bwogICAgICoge0BzZWUgVHJhbnNsaXRlcmF0b3I6OkZPUldBUkR9LgogICAgICogTWF5IGFsc28gYmUgc2V0IHRvCiAgICAgKiB7QHNlZSBUcmFuc2xpdGVyYXRvcjo6UkVWRVJTRX0uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIFRyYW5zbGl0ZXJhdG9yfG51bGwgYSA8Yj5UcmFuc2xpdGVyYXRvcjwvYj4gb2JqZWN0IG9uIHN1Y2Nlc3MsCiAgICAgKiBvciA8Yj5OVUxMPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUZyb21SdWxlcygKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcnVsZXMsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gI1tFVihbVHJhbnNsaXRlcmF0b3I6OkZPUldBUkQsIFRyYW5zbGl0ZXJhdG9yOjpSRVZFUlNFXSldICRkaXJlY3Rpb24gPSAwCiAgICApOiA/VHJhbnNsaXRlcmF0b3Ige30KCiAgICAvKioKICAgICAqIChQSFAgJmd0Oz0gNS40LjAsIFBFQ0wgaW50bCAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogQ3JlYXRlIGFuIGludmVyc2UgdHJhbnNsaXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdHJhbnNsaXRlcmF0b3IuY3JlYXRlaW52ZXJzZS5waHAKICAgICAqIEByZXR1cm4gVHJhbnNsaXRlcmF0b3J8bnVsbCBhIDxiPlRyYW5zbGl0ZXJhdG9yPC9iPiBvYmplY3Qgb24gc3VjY2VzcywKICAgICAqIG9yIDxiPk5VTEw8L2I+IG9uIGZhaWx1cmUKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUludmVyc2UoKTogP1RyYW5zbGl0ZXJhdG9yIHt9CgogICAgLyoqCiAgICAgKiAoUEhQICZndDs9IDUuNC4wLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIEdldCB0cmFuc2xpdGVyYXRvciBJRHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdHJhbnNsaXRlcmF0b3IubGlzdGlkcy5waHAKICAgICAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgQW4gYXJyYXkgb2YgcmVnaXN0ZXJlZCB0cmFuc2xpdGVyYXRvciBJRHMgb24gc3VjY2VzcywKICAgICAqIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxpc3RJRHMoKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgJmd0Oz0gNS40LjAsIFBFQ0wgaW50bCAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogVHJhbnNsaXRlcmF0ZSBhIHN0cmluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90cmFuc2xpdGVyYXRvci50cmFuc2xpdGVyYXRlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogICAgICogVGhlIHN0cmluZyB0byBiZSB0cmFuc2Zvcm1lZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHN0YXJ0IFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgc3RhcnQgaW5kZXggKGluIFVURi0xNiBjb2RlIHVuaXRzKSBmcm9tIHdoaWNoIHRoZSBzdHJpbmcgd2lsbCBzdGFydAogICAgICogdG8gYmUgdHJhbnNmb3JtZWQsIGluY2x1c2l2ZS4gSW5kZXhpbmcgc3RhcnRzIGF0IDAuIFRoZSB0ZXh0IGJlZm9yZSB3aWxsCiAgICAgKiBiZSBsZWZ0IGFzIGlzLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZW5kIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZW5kIGluZGV4IChpbiBVVEYtMTYgY29kZSB1bml0cykgdW50aWwgd2hpY2ggdGhlIHN0cmluZyB3aWxsIGJlCiAgICAgKiB0cmFuc2Zvcm1lZCwgZXhjbHVzaXZlLiBJbmRleGluZyBzdGFydHMgYXQgMC4gVGhlIHRleHQgYWZ0ZXIgd2lsbCBiZQogICAgICogbGVmdCBhcyBpcy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSB0cmFuc2ZvbWVkIHN0cmluZyBvbiBzdWNjZXNzLCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHRyYW5zbGl0ZXJhdGUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHN0cmluZywKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkc3RhcnQgPSAwLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRlbmQgPSAtMQogICAgKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQICZndDs9IDUuNC4wLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIEdldCBsYXN0IGVycm9yIGNvZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdHJhbnNsaXRlcmF0b3IuZ2V0ZXJyb3Jjb2RlLnBocAogICAgICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIGVycm9yIGNvZGUgb24gc3VjY2VzcywKICAgICAqIG9yIDxiPkZBTFNFPC9iPiBpZiBub25lIGV4aXN0cywgb3Igb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yQ29kZSgpOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgJmd0Oz0gNS40LjAsIFBFQ0wgaW50bCAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogR2V0IGxhc3QgZXJyb3IgbWVzc2FnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90cmFuc2xpdGVyYXRvci5nZXRlcnJvcm1lc3NhZ2UucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgZXJyb3IgY29kZSBvbiBzdWNjZXNzLAogICAgICogb3IgPGI+RkFMU0U8L2I+IGlmIG5vbmUgZXhpc3RzLCBvciBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZ3xmYWxzZSB7fQp9CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5zcG9vZmNoZWNrZXIucGhwCiAqLwpjbGFzcyBTcG9vZmNoZWNrZXIKewogICAgcHVibGljIGNvbnN0IFNJTkdMRV9TQ1JJUFRfQ09ORlVTQUJMRSA9IDE7CiAgICBwdWJsaWMgY29uc3QgTUlYRURfU0NSSVBUX0NPTkZVU0FCTEUgPSAyOwogICAgcHVibGljIGNvbnN0IFdIT0xFX1NDUklQVF9DT05GVVNBQkxFID0gNDsKICAgIHB1YmxpYyBjb25zdCBBTllfQ0FTRSA9IDg7CiAgICBwdWJsaWMgY29uc3QgU0lOR0xFX1NDUklQVCA9IDE2OwogICAgcHVibGljIGNvbnN0IElOVklTSUJMRSA9IDMyOwogICAgcHVibGljIGNvbnN0IENIQVJfTElNSVQgPSA2NDsKICAgIHB1YmxpYyBjb25zdCBBU0NJSSA9IDI2ODQzNTQ1NjsKICAgIHB1YmxpYyBjb25zdCBISUdITFlfUkVTVFJJQ1RJVkUgPSA4MDUzMDYzNjg7CiAgICBwdWJsaWMgY29uc3QgTU9ERVJBVEVMWV9SRVNUUklDVElWRSA9IDEwNzM3NDE4MjQ7CiAgICBwdWJsaWMgY29uc3QgTUlOSU1BTExZX1JFU1RSSUNUSVZFID0gMTM0MjE3NzI4MDsKICAgIHB1YmxpYyBjb25zdCBVTlJFU1RSSUNUSVZFID0gMTYxMDYxMjczNjsKICAgIHB1YmxpYyBjb25zdCBTSU5HTEVfU0NSSVBUX1JFU1RSSUNUSVZFID0gNTM2ODcwOTEyOwogICAgcHVibGljIGNvbnN0IE1JWEVEX05VTUJFUlMgPSAxOwogICAgcHVibGljIGNvbnN0IEhJRERFTl9PVkVSTEFZID0gMjsKICAgIC8qKgogICAgICogQHNpbmNlIDguNAogICAgICovCiAgICBwdWJsaWMgY29uc3QgSUdOT1JFX1NQQUNFID0gMTsKICAgIC8qKgogICAgICogQHNpbmNlIDguNAogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ0FTRV9JTlNFTlNJVElWRSA9IDI7CiAgICAvKioKICAgICAqIEBzaW5jZSA4LjQKICAgICAqLwogICAgcHVibGljIGNvbnN0IEFERF9DQVNFX01BUFBJTkdTID0gNDsKICAgIC8qKgogICAgICogQHNpbmNlIDguNAogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0lNUExFX0NBU0VfSU5TRU5TSVRJVkUgPSA2OwoKICAgIC8qKgogICAgICogKFBIUCAmZ3Q7PSA1LjQuMCwgUEVDTCBpbnRsICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBDb25zdHJ1Y3RvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcG9vZmNoZWNrZXIuY29uc3RydWN0LnBocAogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogKFBIUCAmZ3Q7PSA1LjQuMCwgUEVDTCBpbnRsICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBDaGVja3MgaWYgYSBnaXZlbiB0ZXh0IGNvbnRhaW5zIGFueSBzdXNwaWNpb3VzIGNoYXJhY3RlcnMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bvb2ZjaGVja2VyLmlzc3VzcGljaW91cy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJiRlcnJvckNvZGUgW29wdGlvbmFsXSA8cD4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTdXNwaWNpb3VzKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRzdHJpbmcsICYkZXJyb3JDb2RlID0gbnVsbCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgJmd0Oz0gNS40LjAsIFBFQ0wgaW50bCAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gdGV4dCBjb250YWlucyBhbnkgY29uZnVzYWJsZSBjaGFyYWN0ZXJzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Nwb29mY2hlY2tlci5hcmVjb25mdXNhYmxlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nMSA8cD4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZzIgPHA+CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICYkZXJyb3JDb2RlIFtvcHRpb25hbF0gPHA+CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGFyZUNvbmZ1c2FibGUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHN0cmluZzEsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHN0cmluZzIsCiAgICAgICAgJiRlcnJvckNvZGUgPSBudWxsCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQICZndDs9IDUuNC4wLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIExvY2FsZXMgdG8gdXNlIHdoZW4gcnVubmluZyBjaGVja3MKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3Bvb2ZjaGVja2VyLnNldGFsbG93ZWRsb2NhbGVzLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxlcyA8cD4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QWxsb3dlZExvY2FsZXMoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZXMpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiAoUEhQICZndDs9IDUuNC4wLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIFNldCB0aGUgY2hlY2tzIHRvIHJ1bgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcG9vZmNoZWNrZXIuc2V0Y2hlY2tzLnBocAogICAgICogQHBhcmFtIGludCAkY2hlY2tzIDxwPgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDaGVja3MoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGNoZWNrcyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGxldmVsCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZXN0cmljdGlvbkxldmVsKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRsZXZlbCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEFsbG93ZWRDaGFycyhzdHJpbmcgJHBhdHRlcm4sIGludCAkcGF0dGVybk9wdGlvbnMgPSAwKTogdm9pZCB7fQp9CgovKioKICogQHNpbmNlIDUuNQogKi8KY2xhc3MgSW50bEdyZWdvcmlhbkNhbGVuZGFyIGV4dGVuZHMgSW50bENhbGVuZGFyCnsKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vaW50bGdyZWdvcmlhbmNhbGVuZGFyLmNvbnN0cnVjdAogICAgICogQHBhcmFtIGludCAkdGltZXpvbmVPclllYXIgW29wdGlvbmFsXQogICAgICogQHBhcmFtIGludCAkbG9jYWxlT3JNb250aCBbb3B0aW9uYWxdCiAgICAgKiBAcGFyYW0gaW50ICRkYXkgW29wdGlvbmFsXQogICAgICogQHBhcmFtIGludCAkaG91ciBbb3B0aW9uYWxdCiAgICAgKiBAcGFyYW0gaW50ICRtaW51dGUgW29wdGlvbmFsXQogICAgICogQHBhcmFtIGludCAkc2Vjb25kIFtvcHRpb25hbF0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR0aW1lem9uZU9yWWVhciwgJGxvY2FsZU9yTW9udGgsICRkYXksICRob3VyLCAkbWludXRlLCAkc2Vjb25kKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIEBwYXJhbSBtaXhlZCAkdGltZVpvbmUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZQogICAgICogQHJldHVybiBJbnRsR3JlZ29yaWFuQ2FsZW5kYXIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVJbnN0YW5jZSgkdGltZVpvbmUgPSBudWxsLCAkbG9jYWxlID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkdGltZXN0YW1wCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRHcmVnb3JpYW5DaGFuZ2UoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnZmxvYXQnXSwgZGVmYXVsdDogJycpXSAkdGltZXN0YW1wKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBmbG9hdAogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0R3JlZ29yaWFuQ2hhbmdlKCk6IGZsb2F0IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR5ZWFyCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGlzTGVhcFllYXIoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHllYXIpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC4zCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRnJvbURhdGUoaW50ICR5ZWFyLCBpbnQgJG1vbnRoLCBpbnQgJGRheU9mTW9udGgpOiBzdGF0aWMge30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGcm9tRGF0ZVRpbWUoaW50ICR5ZWFyLCBpbnQgJG1vbnRoLCBpbnQgJGRheU9mTW9udGgsIGludCAkaG91ciwgaW50ICRtaW51dGUsID9pbnQgJHNlY29uZCA9IG51bGwpOiBzdGF0aWMge30KfQoKLyoqCiAqIEBzaW5jZSA1LjUKICovCmNsYXNzIEludGxDYWxlbmRhcgp7CiAgICAvKiBDb25zdGFudHMgKi8KICAgIHB1YmxpYyBjb25zdCBGSUVMRF9FUkEgPSAwOwogICAgcHVibGljIGNvbnN0IEZJRUxEX1lFQVIgPSAxOwogICAgcHVibGljIGNvbnN0IEZJRUxEX01PTlRIID0gMjsKICAgIHB1YmxpYyBjb25zdCBGSUVMRF9XRUVLX09GX1lFQVIgPSAzOwogICAgcHVibGljIGNvbnN0IEZJRUxEX1dFRUtfT0ZfTU9OVEggPSA0OwogICAgcHVibGljIGNvbnN0IEZJRUxEX0RBVEUgPSA1OwogICAgcHVibGljIGNvbnN0IEZJRUxEX0RBWV9PRl9ZRUFSID0gNjsKICAgIHB1YmxpYyBjb25zdCBGSUVMRF9EQVlfT0ZfV0VFSyA9IDc7CiAgICBwdWJsaWMgY29uc3QgRklFTERfREFZX09GX1dFRUtfSU5fTU9OVEggPSA4OwogICAgcHVibGljIGNvbnN0IEZJRUxEX0FNX1BNID0gOTsKICAgIHB1YmxpYyBjb25zdCBGSUVMRF9IT1VSID0gMTA7CiAgICBwdWJsaWMgY29uc3QgRklFTERfSE9VUl9PRl9EQVkgPSAxMTsKICAgIHB1YmxpYyBjb25zdCBGSUVMRF9NSU5VVEUgPSAxMjsKICAgIHB1YmxpYyBjb25zdCBGSUVMRF9TRUNPTkQgPSAxMzsKICAgIHB1YmxpYyBjb25zdCBGSUVMRF9NSUxMSVNFQ09ORCA9IDE0OwogICAgcHVibGljIGNvbnN0IEZJRUxEX1pPTkVfT0ZGU0VUID0gMTU7CiAgICBwdWJsaWMgY29uc3QgRklFTERfRFNUX09GRlNFVCA9IDE2OwogICAgcHVibGljIGNvbnN0IEZJRUxEX1lFQVJfV09ZID0gMTc7CiAgICBwdWJsaWMgY29uc3QgRklFTERfRE9XX0xPQ0FMID0gMTg7CiAgICBwdWJsaWMgY29uc3QgRklFTERfRVhURU5ERURfWUVBUiA9IDE5OwogICAgcHVibGljIGNvbnN0IEZJRUxEX0pVTElBTl9EQVkgPSAyMDsKICAgIHB1YmxpYyBjb25zdCBGSUVMRF9NSUxMSVNFQ09ORFNfSU5fREFZID0gMjE7CiAgICBwdWJsaWMgY29uc3QgRklFTERfSVNfTEVBUF9NT05USCA9IDIyOwogICAgcHVibGljIGNvbnN0IEZJRUxEX0ZJRUxEX0NPVU5UID0gMjM7CiAgICBwdWJsaWMgY29uc3QgRklFTERfREFZX09GX01PTlRIID0gNTsKICAgIHB1YmxpYyBjb25zdCBET1dfU1VOREFZID0gMTsKICAgIHB1YmxpYyBjb25zdCBET1dfTU9OREFZID0gMjsKICAgIHB1YmxpYyBjb25zdCBET1dfVFVFU0RBWSA9IDM7CiAgICBwdWJsaWMgY29uc3QgRE9XX1dFRE5FU0RBWSA9IDQ7CiAgICBwdWJsaWMgY29uc3QgRE9XX1RIVVJTREFZID0gNTsKICAgIHB1YmxpYyBjb25zdCBET1dfRlJJREFZID0gNjsKICAgIHB1YmxpYyBjb25zdCBET1dfU0FUVVJEQVkgPSA3OwogICAgcHVibGljIGNvbnN0IERPV19UWVBFX1dFRUtEQVkgPSAwOwogICAgcHVibGljIGNvbnN0IERPV19UWVBFX1dFRUtFTkQgPSAxOwogICAgcHVibGljIGNvbnN0IERPV19UWVBFX1dFRUtFTkRfT0ZGU0VUID0gMjsKICAgIHB1YmxpYyBjb25zdCBET1dfVFlQRV9XRUVLRU5EX0NFQVNFID0gMzsKICAgIHB1YmxpYyBjb25zdCBXQUxMVElNRV9GSVJTVCA9IDE7CiAgICBwdWJsaWMgY29uc3QgV0FMTFRJTUVfTEFTVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgV0FMTFRJTUVfTkVYVF9WQUxJRCA9IDI7CgogICAgLyogTWV0aG9kcyAqLwoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIEFkZCBhIChzaWduZWQpIGFtb3VudCBvZiB0aW1lIHRvIGEgZmllbGQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5hZGQucGhwCiAgICAgKiBAcGFyYW0gaW50ICRmaWVsZCA8cD4KICAgICAqIE9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBkYXRlL3RpbWUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAjaW50bGNhbGVuZGFyLmNvbnN0YW50cyBmaWVsZCBjb25zdGFudHN9LgogICAgICogVGhlc2UgYXJlIGludGVnZXIgdmFsdWVzIGJldHdlZW4gPGVtPjA8L2VtPiBhbmQKICAgICAqIDxiPkludGxDYWxlbmRhcjo6RklFTERfQ09VTlQ8L2I+LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkdmFsdWUgPHA+VGhlIHNpZ25lZCBhbW91bnQgdG8gYWRkIHRvIHRoZSBjdXJyZW50IGZpZWxkLiBJZiB0aGUgYW1vdW50IGlzIHBvc2l0aXZlLCB0aGUgaW5zdGFudCB3aWxsIGJlIG1vdmVkIGZvcndhcmQ7IGlmIGl0IGlzIG5lZ2F0aXZlLCB0aGUgaW5zdGFudCB3aWwgYmUgbW92ZWQgaW50byB0aGUgcGFzdC4gVGhlIHVuaXQgaXMgaW1wbGljaXQgdG8gdGhlIGZpZWxkIHR5cGUuCiAgICAgKiBGb3IgaW5zdGFuY2UsIGhvdXJzIGZvciA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0hPVVJfT0ZfREFZPC9iPi48L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGFkZCgKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmllbGQsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHZhbHVlCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogV2hldGhlciB0aGlzIG9iamVjdCdzIHRpbWUgaXMgYWZ0ZXIgdGhhdCBvZiB0aGUgcGFzc2VkIG9iamVjdAogICAgICogaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmFmdGVyLnBocAogICAgICogQHBhcmFtIEludGxDYWxlbmRhciAkb3RoZXIgPHA+VGhlIGNhbGVuZGFyIHdob3NlIHRpbWUgd2lsbCBiZSBjaGVja2VkIGFnYWluc3QgdGhpcyBvYmplY3QncyB0aW1lLjwvcD4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICogUmV0dXJucyA8Yj5UUlVFPC9iPiBpZiB0aGlzIG9iamVjdCdzIGN1cnJlbnQgdGltZSBpcyBhZnRlciB0aGF0IG9mIHRoZQogICAgICogPGVtPmNhbGVuZGFyPC9lbT4gYXJndW1lbnQncyB0aW1lLiBSZXR1cm5zIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAgICAgKiBBbHNvIHJldHVybnMgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuIFlvdSBjYW4gdXNlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsLmNvbmZpZ3VyYXRpb24ucGhwI2luaS5pbnRsLnVzZS1leGNlcHRpb25zIGV4Y2VwdGlvbnN9IG9yCiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW50bC1nZXQtZXJyb3ItY29kZS5waHAgaW50bF9nZXRfZXJyb3JfY29kZSgpfSB0byBkZXRlY3QgZXJyb3IgY29uZGl0aW9ucy4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGFmdGVyKEludGxDYWxlbmRhciAkb3RoZXIpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogV2hldGhlciB0aGlzIG9iamVjdCdzIHRpbWUgaXMgYmVmb3JlIHRoYXQgb2YgdGhlIHBhc3NlZCBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5iZWZvcmUucGhwCiAgICAgKiBAcGFyYW0gSW50bENhbGVuZGFyICRvdGhlciA8cD4gVGhlIGNhbGVuZGFyIHdob3NlIHRpbWUgd2lsbCBiZSBjaGVja2VkIGFnYWluc3QgdGhpcyBvYmplY3QncyB0aW1lLjwvcD4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICogUmV0dXJucyA8Yj5UUlVFPC9CPiBpZiB0aGlzIG9iamVjdCdzIGN1cnJlbnQgdGltZSBpcyBiZWZvcmUgdGhhdCBvZiB0aGUKICAgICAqIDxlbT5jYWxlbmRhcjwvZW0+IGFyZ3VtZW50J3MgdGltZS4gUmV0dXJucyA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlLgogICAgICogQWxzbyByZXR1cm5zIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLiBZb3UgY2FuIHVzZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bC5jb25maWd1cmF0aW9uLnBocCNpbmkuaW50bC51c2UtZXhjZXB0aW9ucyBleGNlcHRpb25zfSBvcgogICAgICoge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmludGwtZ2V0LWVycm9yLWNvZGUucGhwIGludGxfZ2V0X2Vycm9yX2NvZGUoKX0gdG8gZGV0ZWN0IGVycm9yIGNvbmRpdGlvbnMuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBiZWZvcmUoSW50bENhbGVuZGFyICRvdGhlcik6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBDbGVhciBhIGZpZWxkIG9yIGFsbCBmaWVsZHMKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5jbGVhci5waHAKICAgICAqIEBwYXJhbSBpbnQgJGZpZWxkIFtvcHRpb25hbF0gPHA+CiAgICAgKiBPbmUgb2YgdGhlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwIEludGxDYWxlbmRhcn0gZGF0ZS90aW1lIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwI2ludGxjYWxlbmRhci5jb25zdGFudHMgZmllbGQgY29uc3RhbnRzfS4gVGhlc2UgYXJlIGludGVnZXIKICAgICAqIHZhbHVlcyBiZXR3ZWVuIDxlbT4wPC9lbT4gYW5kCiAgICAgKiA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0NPVU5UPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuIEZhaWx1cmUgY2FuIG9ubHkgb2NjdXIgaXMgaW52YWxpZCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLgogICAgICovCiAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjQnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50fG51bGwnXSwgZGVmYXVsdDogJycpXSAkZmllbGQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIFByaXZhdGUgY29uc3RydWN0b3IgZm9yIGRpc2FsbG93aW5nIGluc3RhbnRpYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5jb25zdHJ1Y3QucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIENyZWF0ZSBhIG5ldyBJbnRsQ2FsZW5kYXIKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5jcmVhdGVpbnN0YW5jZS5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkdGltZXpvbmUgW29wdGlvbmFsXSA8cD4gPHA+CiAgICAgKiBUaGUgdGltZXpvbmUgdG8gdXNlLgogICAgICogPC9wPgogICAgICoKICAgICAqIDx1bD4KICAgICAqIDxsaT4KICAgICAqIDxwPgogICAgICogPGI+TlVMTDwvYj4sIGluIHdoaWNoIGNhc2UgdGhlIGRlZmF1bHQgdGltZXpvbmUgd2lsbCBiZSB1c2VkLCBhcyBzcGVjaWZpZWQgaW4KICAgICAqIHRoZSBpbmkgc2V0dGluZyB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZGF0ZXRpbWUuY29uZmlndXJhdGlvbi5waHAjaW5pLmRhdGUudGltZXpvbmUgZGF0ZS50aW1lem9uZX0gb3IKICAgICAqIHRocm91Z2ggdGhlIGZ1bmN0aW9uICB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGF0ZS1kZWZhdWx0LXRpbWV6b25lLXNldC5waHAgZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgpfSBhbmQgYXMKICAgICAqIHJldHVybmVkIGJ5IHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYXRlLWRlZmF1bHQtdGltZXpvbmUtZ2V0LnBocCBkYXRlX2RlZmF1bHRfdGltZXpvbmVfZ2V0KCl9LgogICAgICogPC9wPgogICAgICogPC9saT4KICAgICAqIDxsaT4KICAgICAqIDxwPgogICAgICogQW4ge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGx0aW1lem9uZS5waHAgSW50bFRpbWVab25lfSwgd2hpY2ggd2lsbCBiZSB1c2VkIGRpcmVjdGx5LgogICAgICogPC9wPgogICAgICogPC9saT4KICAgICAqIDxsaT4KICAgICAqIDxwPgogICAgICogQSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZGF0ZXRpbWV6b25lLnBocCBEYXRlVGltZVpvbmV9LiBJdHMgaWRlbnRpZmllciB3aWxsIGJlIGV4dHJhY3RlZAogICAgICogYW5kIGFuIElDVSB0aW1lem9uZSBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkOyB0aGUgdGltZXpvbmUgd2lsbCBiZSBiYWNrZWQKICAgICAqIGJ5IElDVSdzIGRhdGFiYXNlLCBub3QgUEhQJ3MuCiAgICAgKiA8L3A+CiAgICAgKiA8L2xpPgogICAgICogPGxpPgogICAgICogPHA+CiAgICAgKiBBIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5zdHJpbmcucGhwIHN0cmluZ30sIHdoaWNoIHNob3VsZCBiZSBhIHZhbGlkIElDVSB0aW1lem9uZSBpZGVudGlmaWVyLgogICAgICogU2VlICA8Yj5JbnRsVGltZVpvbmU6OmNyZWF0ZVRpbWVab25lSURFbnVtZXJhdGlvbigpPC9iPi4gUmF3CiAgICAgKiBvZmZzZXRzIHN1Y2ggYXMgPGVtPiJHTVQrMDg6MzAiPC9lbT4gYXJlIGFsc28gYWNjZXB0ZWQuCiAgICAgKiA8L3A+CiAgICAgKiA8L2xpPgogICAgICogPC91bD4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbG9jYWxlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBBIGxvY2FsZSB0byB1c2Ugb3IgPGI+TlVMTDwvYj4gdG8gdXNlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsLmNvbmZpZ3VyYXRpb24ucGhwI2luaS5pbnRsLmRlZmF1bHQtbG9jYWxlIHRoZSBkZWZhdWx0IGxvY2FsZX0uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIEludGxDYWxlbmRhcnxudWxsCiAgICAgKiBUaGUgY3JlYXRlZCB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCBJbnRsQ2FsZW5kYXJ9IGluc3RhbmNlIG9yIDxiPk5VTEw8L2I+IG9uCiAgICAgKiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKCR0aW1lem9uZSA9IG51bGwsICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSA9IG51bGwpOiA/SW50bENhbGVuZGFyIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogQ29tcGFyZSB0aW1lIG9mIHR3byBJbnRsQ2FsZW5kYXIgb2JqZWN0cyBmb3IgZXF1YWxpdHkKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5lcXVhbHMucGhwCiAgICAgKiBAcGFyYW0gSW50bENhbGVuZGFyICRvdGhlcgogICAgICogQHJldHVybiBib29sIDxwPgogICAgICogUmV0dXJucyA8Yj5UUlVFPC9iPiBpZiB0aGUgY3VycmVudCB0aW1lIG9mIGJvdGggdGhpcyBhbmQgdGhlIHBhc3NlZCBpbgogICAgICoge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBvYmplY3QgYXJlIHRoZSBzYW1lLCBvciA8Yj5GQUxTRTwvYj4KICAgICAqIG90aGVyd2lzZS4gVGhlIHZhbHVlIDxiPkZBTFNFPC9iPiBjYW4gYWxzbyBiZSByZXR1cm5lZCBvbiBmYWlsdXJlLiBUaGlzIGNhbiBvbmx5CiAgICAgKiBoYXBwZW4gaWYgYmFkIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLiBJbiBhbnkgY2FzZSwgdGhlIHR3byBjYXNlcyBjYW4gYmUKICAgICAqIGRpc3Rpbmd1aXNoZWQgYnkgY2FsbGluZyAge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmludGwtZ2V0LWVycm9yLWNvZGUucGhwIGludGxfZ2V0X2Vycm9yX2NvZGUoKX0uCiAgICAgKiA8L3A+CiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBlcXVhbHMoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnSW50bENhbGVuZGFyJ10sIGRlZmF1bHQ6ICcnKV0gJG90aGVyKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIENhbGN1bGF0ZSBkaWZmZXJlbmNlIGJldHdlZW4gZ2l2ZW4gdGltZSBhbmQgdGhpcyBvYmplY3QncyB0aW1lCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZmllbGRkaWZmZXJlbmNlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICR0aW1lc3RhbXAgPHA+CiAgICAgKiBUaGUgdGltZSBhZ2FpbnN0IHdoaWNoIHRvIGNvbXBhcmUgdGhlIHF1YW50aXR5IHJlcHJlc2VudGVkIGJ5IHRoZQogICAgICogPGVtPmZpZWxkPC9lbT4uIEZvciB0aGUgcmVzdWx0IHRvIGJlIHBvc2l0aXZlLCB0aGUgdGltZQogICAgICogZ2l2ZW4gZm9yIHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYWhlYWQgb2YgdGhlIHRpbWUgb2YgdGhlIG9iamVjdCB0aGUKICAgICAqIG1ldGhvZCBpcyBiZWluZyBpbnZva2VkIG9uLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZmllbGQgPHA+CiAgICAgKiBUaGUgZmllbGQgdGhhdCByZXByZXNlbnRzIHRoZSBxdWFudGl0eSBiZWluZyBjb21wYXJlZC4KICAgICAqIDwvcD4KICAgICAqCiAgICAgKiA8cD4KICAgICAqIE9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBkYXRlL3RpbWUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAjaW50bGNhbGVuZGFyLmNvbnN0YW50cyBmaWVsZCBjb25zdGFudHN9LiBUaGVzZSBhcmUgaW50ZWdlcgogICAgICogdmFsdWVzIGJldHdlZW4gPGVtPjA8L2VtPiBhbmQKICAgICAqIDxiPkludGxDYWxlbmRhcjo6RklFTERfQ09VTlQ8L2I+LgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnR8ZmFsc2UgUmV0dXJucyBhIChzaWduZWQpIGRpZmZlcmVuY2Ugb2YgdGltZSBpbiB0aGUgdW5pdCBhc3NvY2lhdGVkIHdpdGggdGhlCiAgICAgKiBzcGVjaWZpZWQgZmllbGQgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWVsZERpZmZlcmVuY2UoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnZmxvYXQnXSwgZGVmYXVsdDogJycpXSAkdGltZXN0YW1wLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmaWVsZAogICAgKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMik8YnIvPgogICAgICogQ3JlYXRlIGFuIEludGxDYWxlbmRhciBmcm9tIGEgRGF0ZVRpbWUgb2JqZWN0IG9yIHN0cmluZwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmZyb21kYXRldGltZS5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0ZXRpbWUgPHA+CiAgICAgKiBBIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kYXRldGltZS5waHAgRGF0ZVRpbWV9IG9iamVjdCBvciBhIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5zdHJpbmcucGhwIHN0cmluZ30gdGhhdAogICAgICogY2FuIGJlIHBhc3NlZCB0byAge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2RhdGV0aW1lLmNvbnN0cnVjdC5waHAgRGF0ZVRpbWU6Ol9fY29uc3RydWN0KCl9LgogICAgICogPC9wPgogICAgICogQHBhcmFtICRsb2NhbGUgW29wdGlvbmFsXQogICAgICogQHJldHVybiBJbnRsQ2FsZW5kYXJ8bnVsbAogICAgICogVGhlIGNyZWF0ZWQge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBvYmplY3Qgb3IgPGI+TlVMTDwvYj4gaW4gY2FzZSBvZgogICAgICogZmFpbHVyZS4gSWYgYSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuc3RyaW5nLnBocCBzdHJpbmd9IGlzIHBhc3NlZCwgYW55IGV4Y2VwdGlvbiB0aGF0IG9jY3VycwogICAgICogaW5zaWRlIHRoZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZGF0ZXRpbWUucGhwIERhdGVUaW1lfSBjb25zdHJ1Y3RvciBpcyBwcm9wYWdhdGVkLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21EYXRlVGltZSgKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdEYXRlVGltZXxzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZGF0ZXRpbWUsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAkbG9jYWxlCiAgICApOiA/SW50bENhbGVuZGFyIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IHRoZSB2YWx1ZSBmb3IgYSBmaWVsZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldC5waHAKICAgICAqIEBwYXJhbSBpbnQgJGZpZWxkIDxwPgogICAgICogT25lIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCBJbnRsQ2FsZW5kYXJ9IGRhdGUvdGltZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCNpbnRsY2FsZW5kYXIuY29uc3RhbnRzIGZpZWxkIGNvbnN0YW50c30uIFRoZXNlIGFyZSBpbnRlZ2VyCiAgICAgKiB2YWx1ZXMgYmV0d2VlbiA8ZW0+MDwvZW0+IGFuZAogICAgICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBBbiBpbnRlZ2VyIHdpdGggdGhlIHZhbHVlIG9mIHRoZSB0aW1lIGZpZWxkLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmaWVsZCk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIFRoZSBtYXhpbXVtIHZhbHVlIGZvciBhIGZpZWxkLCBjb25zaWRlcmluZyB0aGUgb2JqZWN0J3MgY3VycmVudCB0aW1lCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0YWN0dWFsbWF4aW11bS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGZpZWxkIDxwPgogICAgICogT25lIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCBJbnRsQ2FsZW5kYXJ9IGRhdGUvdGltZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCNpbnRsY2FsZW5kYXIuY29uc3RhbnRzIGZpZWxkIGNvbnN0YW50c30uIFRoZXNlIGFyZSBpbnRlZ2VyCiAgICAgKiB2YWx1ZXMgYmV0d2VlbiA8ZW0+MDwvZW0+IGFuZAogICAgICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludHxmYWxzZQogICAgICogQW4ge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLmludGVnZXIucGhwIGludH0gcmVwcmVzZW50aW5nIHRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSB1bml0cyBhc3NvY2lhdGVkCiAgICAgKiB3aXRoIHRoZSBnaXZlbiA8ZW0+ZmllbGQ8L2VtPiBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEFjdHVhbE1heGltdW0oI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZpZWxkKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogVGhlIG1pbmltdW0gdmFsdWUgZm9yIGEgZmllbGQsIGNvbnNpZGVyaW5nIHRoZSBvYmplY3QncyBjdXJyZW50IHRpbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5nZXRhY3R1YWxtaW5pbXVtLnBocAogICAgICogQHBhcmFtIGludCAkZmllbGQgPHA+CiAgICAgKiBPbmUgb2YgdGhlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwIEludGxDYWxlbmRhcn0gZGF0ZS90aW1lIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwI2ludGxjYWxlbmRhci5jb25zdGFudHMgZmllbGQgY29uc3RhbnRzfS4KICAgICAqIFRoZXNlIGFyZSBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDxlbT4wPC9lbT4gYW5kCiAgICAgKiA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0NPVU5UPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gaW50fGZhbHNlCiAgICAgKiBBbiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuaW50ZWdlci5waHAgaW50fSByZXByZXNlbnRpbmcgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIGZpZWxkJ3MKICAgICAqIHVuaXQgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBY3R1YWxNaW5pbXVtKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmaWVsZCk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIEdldCBhcnJheSBvZiBsb2NhbGVzIGZvciB3aGljaCB0aGVyZSBpcyBkYXRhCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0YXZhaWxhYmxlbG9jYWxlcy5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nW10gQW4gYXJyYXkgb2Ygc3RyaW5ncywgb25lIGZvciB3aGljaCBsb2NhbGUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlTG9jYWxlcygpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIFRlbGwgd2hldGhlciBhIGRheSBpcyBhIHdlZWtkYXksIHdlZWtlbmQgb3IgYSBkYXkgdGhhdCBoYXMgYSB0cmFuc2l0aW9uIGJldHdlZW4gdGhlIHR3bwogICAgICogQHBhcmFtIGludCAkZGF5T2ZXZWVrIDxwPgogICAgICogT25lIG9mIHRoZSBjb25zdGFudHMgPGI+SW50bENhbGVuZGFyOjpET1dfU1VOREFZPC9iPiwKICAgICAqIDxiPkludGxDYWxlbmRhcjo6RE9XX01PTkRBWTwvYj4sIC4uLiwKICAgICAqIDxiPkludGxDYWxlbmRhcjo6RE9XX1NBVFVSREFZPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gaW50fGZhbHNlCiAgICAgKiBSZXR1cm5zIG9uZSBvZiB0aGUgY29uc3RhbnRzCiAgICAgKiA8Yj5JbnRsQ2FsZW5kYXI6OkRPV19UWVBFX1dFRUtEQVk8L2I+LAogICAgICogPGI+SW50bENhbGVuZGFyOjpET1dfVFlQRV9XRUVLRU5EPC9iPiwKICAgICAqIDxiPkludGxDYWxlbmRhcjo6RE9XX1RZUEVfV0VFS0VORF9PRkZTRVQ8L2I+IG9yCiAgICAgKiA8Yj5JbnRsQ2FsZW5kYXI6OkRPV19UWVBFX1dFRUtFTkRfQ0VBU0U8L2I+IG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGF5T2ZXZWVrVHlwZSgjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZGF5T2ZXZWVrKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IGxhc3QgZXJyb3IgY29kZSBvbiB0aGUgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0ZXJyb3Jjb2RlLnBocAogICAgICogQHJldHVybiBpbnR8ZmFsc2UgQW4gSUNVIGVycm9yIGNvZGUgaW5kaWNhdGluZyBlaXRoZXIgc3VjY2VzcywgZmFpbHVyZSBvciBhIHdhcm5pbmcuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvckNvZGUoKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IGxhc3QgZXJyb3IgbWVzc2FnZSBvbiB0aGUgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0ZXJyb3JtZXNzYWdlLnBocAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGVycm9yIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIGxhc3QgZXJyb3IgdGhhdCBvY2N1cnJlZCBpbiBhIGZ1bmN0aW9uIGNhbGwgb24gdGhpcyBvYmplY3QsIG9yIGEgc3RyaW5nIGluZGljYXRpbmcgdGhlIG5vbi1leGlzdGFuY2Ugb2YgYW4gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgZm9yIHRoZSBjYWxlbmRhcidzIGxvY2FsZQogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldGZpcnN0ZGF5b2Z3ZWVrLnBocAogICAgICogQHJldHVybiBpbnR8ZmFsc2UKICAgICAqIE9uZSBvZiB0aGUgY29uc3RhbnRzIDxiPkludGxDYWxlbmRhcjo6RE9XX1NVTkRBWTwvYj4sCiAgICAgKiA8Yj5JbnRsQ2FsZW5kYXI6OkRPV19NT05EQVk8L2I+LCAuLi4sCiAgICAgKiA8Yj5JbnRsQ2FsZW5kYXI6OkRPV19TQVRVUkRBWTwvYj4gb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaXJzdERheU9mV2VlaygpOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBHZXQgdGhlIGxhcmdlc3QgbG9jYWwgbWluaW11bSB2YWx1ZSBmb3IgYSBmaWVsZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldGdyZWF0ZXN0bWluaW11bS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGZpZWxkCiAgICAgKiBPbmUgb2YgdGhlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwIEludGxDYWxlbmRhcn0gZGF0ZS90aW1lIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwI2ludGxjYWxlbmRhci5jb25zdGFudHMgZmllbGQgY29uc3RhbnRzfS4gVGhlc2UgYXJlIGludGVnZXIKICAgICAqIHZhbHVlcyBiZXR3ZWVuIDxlbT4wPC9lbT4gYW5kCiAgICAgKiA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0NPVU5UPC9iPi4KICAgICAqIEByZXR1cm4gaW50fGZhbHNlCiAgICAgKiBBbiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuaW50ZWdlci5waHAgaW50fSByZXByZXNlbnRpbmcgYSBmaWVsZCB2YWx1ZSwgaW4gdGhlIGZpZWxkJ3MKICAgICAqIHVuaXQsIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0R3JlYXRlc3RNaW5pbXVtKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmaWVsZCk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIEdldCBzZXQgb2YgbG9jYWxlIGtleXdvcmQgdmFsdWVzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXl3b3JkIDxwPgogICAgICogVGhlIGxvY2FsZSBrZXl3b3JkIGZvciB3aGljaCByZWxldmFudCB2YWx1ZXMgYXJlIHRvIGJlIHF1ZXJpZWQuIE9ubHkKICAgICAqIDxlbT4nY2FsZW5kYXInPC9lbT4gaXMgc3VwcG9ydGVkLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIDxwPgogICAgICogVGhlIGxvY2FsZSBvbnRvIHdoaWNoIHRoZSBrZXl3b3JkL3ZhbHVlIHBhaXIgYXJlIHRvIGJlIGFwcGVuZGVkLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGJvb2wgJG9ubHlDb21tb24KICAgICAqIDxwPgogICAgICogV2hldGhlciB0byBzaG93IG9ubHkgdGhlIHZhbHVlcyBjb21tb25seSB1c2VkIGZvciB0aGUgc3BlY2lmaWVkIGxvY2FsZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gSXRlcmF0b3J8ZmFsc2UgQW4gaXRlcmF0b3IgdGhhdCB5aWVsZHMgc3RyaW5ncyB3aXRoIHRoZSBsb2NhbGUga2V5d29yZCB2YWx1ZXMgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0S2V5d29yZFZhbHVlc0ZvckxvY2FsZSgKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAka2V5d29yZCwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbG9jYWxlLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkb25seUNvbW1vbgogICAgKTogSW50bEl0ZXJhdG9yfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IHRoZSBzbWFsbGVzdCBsb2NhbCBtYXhpbXVtIGZvciBhIGZpZWxkCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0bGVhc3RtYXhpbXVtLnBocAogICAgICogQHBhcmFtIGludCAkZmllbGQgPHA+CiAgICAgKiBPbmUgb2YgdGhlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwIEludGxDYWxlbmRhcn0gZGF0ZS90aW1lIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwI2ludGxjYWxlbmRhci5jb25zdGFudHMgZmllbGQgY29uc3RhbnRzfS4gVGhlc2UgYXJlIGludGVnZXIKICAgICAqIHZhbHVlcyBiZXR3ZWVuIDxlbT4wPC9lbT4gYW5kCiAgICAgKiA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0NPVU5UPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gaW50fGZhbHNlCiAgICAgKiBBbiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuaW50ZWdlci5waCBpbnR9IHJlcHJlc2VudGluZyBhIGZpZWxkIHZhbHVlIGluIHRoZSBmaWVsZCdzCiAgICAgKiB1bml0IG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGVhc3RNYXhpbXVtKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmaWVsZCk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIEdldCB0aGUgbG9jYWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0bG9jYWxlLnBocAogICAgICogQHBhcmFtIGludCAkdHlwZSA8cD4KICAgICAqIFdoZXRoZXIgdG8gZmV0Y2ggdGhlIGFjdHVhbCBsb2NhbGUgKHRoZSBsb2NhbGUgZnJvbSB3aGljaCB0aGUgY2FsZW5kYXIKICAgICAqIGRhdGEgb3JpZ2luYXRlcywgd2l0aCA8Yj5Mb2NhbGU6OkFDVFVBTF9MT0NBTEU8L2I+KSBvciB0aGUKICAgICAqIHZhbGlkIGxvY2FsZSwgaS5lLiwgdGhlIG1vc3Qgc3BlY2lmaWMgbG9jYWxlIHN1cHBvcnRlZCBieSBJQ1UgcmVsYXRpdmVseQogICAgICogdG8gdGhlIHJlcXVlc3RlZCBsb2NhbGUg4oCTIHNlZSA8Yj5Mb2NhbGU6OlZBTElEX0xPQ0FMRTwvYj4uCiAgICAgKiBGcm9tIHRoZSBtb3N0IGdlbmVyYWwgdG8gdGhlIG1vc3Qgc3BlY2lmaWMsIHRoZSBsb2NhbGVzIGFyZSBvcmRlcmVkIGluCiAgICAgKiB0aGlzIGZhc2hpb24g4oCTIGFjdHVhbCBsb2NhbGUsIHZhbGlkIGxvY2FsZSwgcmVxdWVzdGVkIGxvY2FsZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbGUoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHR5cGUpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBHZXQgdGhlIGdsb2JhbCBtYXhpbXVtIHZhbHVlIGZvciBhIGZpZWxkCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0bWF4aW11bS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGZpZWxkIDxwPgogICAgICogT25lIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCBJbnRsQ2FsZW5kYXJ9IGRhdGUvdGltZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCNpbnRsY2FsZW5kYXIuY29uc3RhbnRzIGZpZWxkIGNvbnN0YW50c30uIFRoZXNlIGFyZSBpbnRlZ2VyCiAgICAgKiB2YWx1ZXMgYmV0d2VlbiA8ZW0+MDwvZW0+IGFuZAogICAgICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludHxmYWxzZQogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWF4aW11bSgjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmllbGQpOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBHZXQgbWluaW1hbCBudW1iZXIgb2YgZGF5cyB0aGUgZmlyc3Qgd2VlayBpbiBhIHllYXIgb3IgbW9udGggY2FuIGhhdmUKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5nZXRtaW5pbWFsZGF5c2luZmlyc3R3ZWVrLnBocAogICAgICogQHJldHVybiBpbnR8ZmFsc2UKICAgICAqIEFuIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5pbnRlZ2VyLnBocCAgaW50fSByZXByZXNlbnRpbmcgYSBudW1iZXIgb2YgZGF5cyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IHRoZSBnbG9iYWwgbWluaW11bSB2YWx1ZSBmb3IgYSBmaWVsZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldG1pbmltdW0ucGhwCiAgICAgKiBAcGFyYW0gaW50ICRmaWVsZCA8cD4KICAgICAqIE9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBkYXRlL3RpbWUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAjaW50bGNhbGVuZGFyLmNvbnN0YW50cyBmaWVsZH0uIFRoZXNlIGFyZSBpbnRlZ2VyCiAgICAgKiB2YWx1ZXMgYmV0d2VlbiA8ZW0+MDwvZW0+IGFuZAogICAgICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludHxmYWxzZQogICAgICogQW4gaW50IHJlcHJlc2VudGluZyBhIHZhbHVlIGZvciB0aGUgZ2l2ZW4gZmllbGQgaW4gdGhlIGZpZWxkJ3MgdW5pdCBvciBGQUxTRSBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWluaW11bSgjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmllbGQpOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBHZXQgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCB0aW1lCiAgICAgKiBAcmV0dXJuIGZsb2F0IEEgZmxvYXQgcmVwcmVzZW50aW5nIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2gsIG5vdCBjb3VudGluZyBsZWFwIHNlY29uZHMuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Tm93KCk6IGZsb2F0IHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IGJlaGF2aW9yIGZvciBoYW5kbGluZyByZXBlYXRpbmcgd2FsbCB0aW1lCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0cmVwZWF0ZWR3YWxsdGltZW9wdGlvbi5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBPbmUgb2YgdGhlIGNvbnN0YW50cyA8Yj5JbnRsQ2FsZW5kYXI6OldBTExUSU1FX0ZJUlNUPC9iPiBvcgogICAgICogPGI+SW50bENhbGVuZGFyOjpXQUxMVElNRV9MQVNUPC9iPi4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlcGVhdGVkV2FsbFRpbWVPcHRpb24oKTogaW50IHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IGJlaGF2aW9yIGZvciBoYW5kbGluZyBza2lwcGVkIHdhbGwgdGltZQogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldHNraXBwZWR3YWxsdGltZW9wdGlvbi5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBPbmUgb2YgdGhlIGNvbnN0YW50cyA8Yj5JbnRsQ2FsZW5kYXI6OldBTExUSU1FX0ZJUlNUPC9iPiwKICAgICAqIDxiPkludGxDYWxlbmRhcjo6V0FMTFRJTUVfTEFTVDwvYj4gb3IKICAgICAqIDxiPkludGxDYWxlbmRhcjo6V0FMTFRJTUVfTkVYVF9WQUxJRDwvYj4uCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTa2lwcGVkV2FsbFRpbWVPcHRpb24oKTogaW50IHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IHRpbWUgY3VycmVudGx5IHJlcHJlc2VudGVkIGJ5IHRoZSBvYmplY3QKICAgICAqIEByZXR1cm4gZmxvYXR8ZmFsc2UKICAgICAqIEEge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLmZsb2F0LnBocCBmbG9hdH0gcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGVsYXBzZWQgc2luY2UgdGhlCiAgICAgKiByZWZlcmVuY2UgdGltZSAoMSBKYW4gMTk3MCAwMDowMDowMCBVVEMpLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZSgpOiBmbG9hdHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIEdldCB0aGUgb2JqZWN0J3MgdGltZXpvbmUKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5nZXR0aW1lem9uZS5waHAKICAgICAqIEByZXR1cm4gSW50bFRpbWVab25lfGZhbHNlCiAgICAgKiBBbiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bHRpbWV6b25lLnBocCBJbnRsVGltZVpvbmV9IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBvbmUgdXNlZAogICAgICogaW50ZXJuYWxseSBpbiB0aGlzIG9iamVjdC4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVab25lKCk6IEludGxUaW1lWm9uZXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIEdldCB0aGUgY2FsZW5kYXIgdHlwZQogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldHR5cGUucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuc3RyaW5nLnBocCBzdHJpbmd9IHJlcHJlc2VudGluZyB0aGUgY2FsZW5kYXIgdHlwZSwgc3VjaCBhcwogICAgICogPGVtPidncmVnb3JpYW4nPC9lbT4sIDxlbT4naXNsYW1pYyc8L2VtPiwgZXRjLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBHZXQgdGltZSBvZiB0aGUgZGF5IGF0IHdoaWNoIHdlZWtlbmQgYmVnaW5zIG9yIGVuZHMKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5nZXR3ZWVrZW5kdHJhbnNpdGlvbi5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRheU9mV2VlayA8cD4KICAgICAqIE9uZSBvZiB0aGUgY29uc3RhbnRzIDxiPkludGxDYWxlbmRhcjo6RE9XX1NVTkRBWTwvYj4sCiAgICAgKiA8Yj5JbnRsQ2FsZW5kYXI6OkRPV19NT05EQVk8L2I+LCAuLi4sCiAgICAgKiA8Yj5JbnRsQ2FsZW5kYXI6OkRPV19TQVRVUkRBWTwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludHxmYWxzZQogICAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW50byB0aGUgZGF5IGF0IHdoaWNoIHRoZSB0aGUgd2Vla2VuZCBiZWdpbnMgb3IKICAgICAqIGVuZHMgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRXZWVrZW5kVHJhbnNpdGlvbigjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZGF5T2ZXZWVrKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogV2hldGhlciB0aGUgb2JqZWN0J3MgdGltZSBpcyBpbiBEYXlsaWdodCBTYXZpbmdzIFRpbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5pbmRheWxpZ2h0dGltZS5waHAKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogUmV0dXJucyA8Yj5UUlVFPC9iPiBpZiB0aGUgZGF0ZSBpcyBpbiBEYXlsaWdodCBTYXZpbmdzIFRpbWUsIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAgICAgKiBUaGUgdmFsdWUgPGI+RkFMU0U8L2I+IG1heSBhbHNvIGJlIHJldHVybmVkIG9uIGZhaWx1cmUsIGZvciBpbnN0YW5jZSBhZnRlcgogICAgICogc3BlY2lmeWluZyBpbnZhbGlkIGZpZWxkIHZhbHVlcyBvbiBub24tbGVuaWVudCBtb2RlOyB1c2Uge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGwuY29uZmlndXJhdGlvbi5waHAjaW5pLmludGwudXNlLWV4Y2VwdGlvbnMgZXhjZXB0aW9uc30gb3IgcXVlcnkKICAgICAqIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbnRsLWdldC1lcnJvci1jb2RlLnBocCBpbnRsX2dldF9lcnJvcl9jb2RlKCl9IHRvIGRpc2FtYmlndWF0ZS4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGluRGF5bGlnaHRUaW1lKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBXaGV0aGVyIGFub3RoZXIgY2FsZW5kYXIgaXMgZXF1YWwgYnV0IGZvciBhIGRpZmZlcmVudCB0aW1lCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuaXNlcXVpdmFsZW50dG8ucGhwCiAgICAgKiBAcGFyYW0gSW50bENhbGVuZGFyICRvdGhlciBUaGUgb3RoZXIgY2FsZW5kYXIgYWdhaW5zdCB3aGljaCB0aGUgY29tcGFyaXNvbiBpcyB0byBiZSBtYWRlLgogICAgICogQHJldHVybiBib29sCiAgICAgKiBBc3N1bWluZyB0aGVyZSBhcmUgbm8gYXJndW1lbnQgZXJyb3JzLCByZXR1cm5zIDxiPlRSVUU8L2I+IGlpZiB0aGUgY2FsZW5kYXJzIGFyZSBlcXVpdmFsZW50IGV4Y2VwdCBwb3NzaWJseSBmb3IgdGhlaXIgc2V0IHRpbWUuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0VxdWl2YWxlbnRUbyhJbnRsQ2FsZW5kYXIgJG90aGVyKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIFdoZXRoZXIgZGF0ZS90aW1lIGludGVycHJldGF0aW9uIGlzIGluIGxlbmllbnQgbW9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmlzbGVuaWVudC5waHAKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuYm9vbGVhbi5waHAgYm9vbH0gcmVwcmVzZW50aW5nIHdoZXRoZXIgdGhlIGNhbGVuZGFyIGlzIHNldCB0byBsZW5pZW50IG1vZGUuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0xlbmllbnQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIFdoZXRoZXIgYSBjZXJ0YWluIGRhdGUvdGltZSBpcyBpbiB0aGUgd2Vla2VuZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmlzd2Vla2VuZC5waHAKICAgICAqIEBwYXJhbSBmbG9hdHxudWxsICR0aW1lc3RhbXAgW29wdGlvbmFsXSA8cD4KICAgICAqIEFuIG9wdGlvbmFsIHRpbWVzdGFtcCByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlCiAgICAgKiBlcG9jaCwgZXhjbHVkaW5nIGxlYXAgc2Vjb25kcy4gSWYgPGI+TlVMTDwvYj4sIHRoaXMgb2JqZWN0J3MgY3VycmVudCB0aW1lIGlzCiAgICAgKiB1c2VkIGluc3RlYWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIDxwPiBBIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5ib29sZWFuLnBocCBib29sfSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGdpdmVuIG9yIHRoaXMgb2JqZWN0J3MgdGltZSBvY2N1cnMKICAgICAqIGluIGEgd2Vla2VuZC4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogVGhlIHZhbHVlIDxiPkZBTFNFPC9iPiBtYXkgYWxzbyBiZSByZXR1cm5lZCBvbiBmYWlsdXJlLCBmb3IgaW5zdGFuY2UgYWZ0ZXIgZ2l2aW5nCiAgICAgKiBhIGRhdGUgb3V0IG9mIGJvdW5kcyBvbiBub24tbGVuaWVudCBtb2RlOyB1c2Uge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGwuY29uZmlndXJhdGlvbi5waHAjaW5pLmludGwudXNlLWV4Y2VwdGlvbnMgZXhjZXB0aW9uc30gb3IgcXVlcnkKICAgICAqIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbnRsLWdldC1lcnJvci1jb2RlLnBocCBpbnRsX2dldF9lcnJvcl9jb2RlKCl9IHRvIGRpc2FtYmlndWF0ZS48L3A+CiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1dlZWtlbmQoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnZmxvYXR8bnVsbCddLCBkZWZhdWx0OiAnJyldICR0aW1lc3RhbXAgPSBudWxsKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIEFkZCB2YWx1ZSB0byBmaWVsZCB3aXRob3V0IGNhcnJ5aW5nIGludG8gbW9yZSBzaWduaWZpY2FudCBmaWVsZHMKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5yb2xsLnBocAogICAgICogQHBhcmFtIGludCAkZmllbGQKICAgICAqIDxwPk9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBkYXRlL3RpbWUKICAgICAqIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwI2ludGxjYWxlbmRhci5jb25zdGFudHMgZmllbGQgY29uc3RhbnRzfS4gVGhlc2UgYXJlIGludGVnZXIKICAgICAqIHZhbHVlcyBiZXR3ZWVuIDxlbT4wPC9lbT4gYW5kCiAgICAgKiA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0NPVU5UPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgPHA+CiAgICAgKiBUaGUgKHNpZ25lZCkgYW1vdW50IHRvIGFkZCB0byB0aGUgZmllbGQsIDxiPlRSVUU8L2I+IGZvciByb2xsaW5nIHVwIChhZGRpbmcKICAgICAqIDxlbT4xPC9lbT4pLCBvciA8Yj5GQUxTRTwvYj4gZm9yIHJvbGxpbmcgZG93biAoc3VidHJhY3RpbmcKICAgICAqIDxlbT4xPC9lbT4pLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIFJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJvbGwoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZpZWxkLCAkdmFsdWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogV2hldGhlciBhIGZpZWxkIGlzIHNldAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmlzc2V0LnBocAogICAgICogQHBhcmFtIGludCAkZmllbGQgPHA+CiAgICAgKiBPbmUgb2YgdGhlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwIEludGxDYWxlbmRhcn0gZGF0ZS90aW1lCiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCNpbnRsY2FsZW5kYXIuY29uc3RhbnRzIGZpZWxkIGNvbnN0YW50c30uCiAgICAgKiBUaGVzZSBhcmUgaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiA8ZW0+MDwvZW0+IGFuZAogICAgICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgQXNzdW1pbmcgdGhlcmUgYXJlIG5vIGFyZ3VtZW50IGVycm9ycywgcmV0dXJucyA8Yj5UUlVFPC9iPiBpaWYgdGhlIGZpZWxkIGlzIHNldC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIFBTX1VOUkVTRVJWRV9QUkVGSVhfaXNTZXQoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZpZWxkKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIFNldCBhIHRpbWUgZmllbGQgb3Igc2V2ZXJhbCBjb21tb24gZmllbGRzIGF0IG9uY2UKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5zZXQucGhwCiAgICAgKiBAcGFyYW0gaW50ICR5ZWFyIDxwPgogICAgICogT25lIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCBJbnRsQ2FsZW5kYXJ9IGRhdGUvdGltZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCNpbnRsY2FsZW5kYXIuY29uc3RhbnRzIGZpZWxkIGNvbnN0YW50c30uIFRoZXNlIGFyZSBpbnRlZ2VyCiAgICAgKiB2YWx1ZXMgYmV0d2VlbiA8ZW0+MDwvZW0+IGFuZAogICAgICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRtb250aCA8cD4KICAgICAqIFRoZSBuZXcgdmFsdWUgZm9yIDxiPkludGxDYWxlbmRhcjo6RklFTERfTU9OVEg8L2I+LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZGF5T2ZNb250aCBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIG5ldyB2YWx1ZSBmb3IgPGI+SW50bENhbGVuZGFyOjpGSUVMRF9EQVlfT0ZfTU9OVEg8L2I+LgogICAgICogVGhlIG1vbnRoIHNlcXVlbmNlIGlzIHplcm8tYmFzZWQsIGkuZS4sIEphbnVhcnkgaXMgcmVwcmVzZW50ZWQgYnkgMCwKICAgICAqIEZlYnJ1YXJ5IGJ5IDEsIC4uLiwgRGVjZW1iZXIgaXMgMTEgYW5kIFVuZGVjZW1iZXIgKGlmIHRoZSBjYWxlbmRhciBoYXMKICAgICAqIGl0KSBpcyAxMi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGhvdXIgW29wdGlvbmFsXQogICAgICogPHA+CiAgICAgKiBUaGUgbmV3IHZhbHVlIGZvciA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0hPVVJfT0ZfREFZPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJG1pbnV0ZSBbb3B0aW9uYWxdCiAgICAgKiA8cD4KICAgICAqIFRoZSBuZXcgdmFsdWUgZm9yIDxiPkludGxDYWxlbmRhcjo6RklFTERfTUlOVVRFPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHNlY29uZCBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIG5ldyB2YWx1ZSBmb3IgPGI+SW50bENhbGVuZGFyOjpGSUVMRF9TRUNPTkQ8L2I+LgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIFJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBhbmQgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoJHllYXIsICRtb250aCwgJGRheU9mTW9udGggPSBudWxsLCAkaG91ciA9IG51bGwsICRtaW51dGUgPSBudWxsLCAkc2Vjb25kID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSA+PSA1LjUuMCBQRUNMIGludGwgPj0gMy4wLjBhMSk8YnIvPgogICAgICogU2V0IGEgdGltZSBmaWVsZCBvciBzZXZlcmFsIGNvbW1vbiBmaWVsZHMgYXQgb25jZQogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLnNldC5waHAKICAgICAqIEBwYXJhbSBpbnQgJGZpZWxkIE9uZSBvZiB0aGUgSW50bENhbGVuZGFyIGRhdGUvdGltZSBmaWVsZCBjb25zdGFudHMuIFRoZXNlIGFyZSBpbnRlZ2VyIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIEludGxDYWxlbmRhcjo6RklFTERfQ09VTlQuCiAgICAgKiBAcGFyYW0gaW50ICR2YWx1ZSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBnaXZlbiBmaWVsZC4KICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MgYW5kIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogQHNpbmNlIDUuNQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KCRmaWVsZCwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIFNldCB0aGUgZGF5IG9uIHdoaWNoIHRoZSB3ZWVrIGlzIGRlZW1lZCB0byBzdGFydAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLnNldGZpcnN0ZGF5b2Z3ZWVrLnBocAogICAgICogQHBhcmFtIGludCAkZGF5T2ZXZWVrIDxwPgogICAgICogT25lIG9mIHRoZSBjb25zdGFudHMgPGI+SW50bENhbGVuZGFyOjpET1dfU1VOREFZPC9iPiwKICAgICAqIDxiPkludGxDYWxlbmRhcjo6RE9XX01PTkRBWTwvYj4sIC4uLiwKICAgICAqIDxiPkludGxDYWxlbmRhcjo6RE9XX1NBVFVSREFZPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4gRmFpbHVyZSBjYW4gb25seSBoYXBwZW4gZHVlIHRvIGludmFsaWQgcGFyYW1ldGVycy4KICAgICAqLwogICAgI1tMYW5ndWFnZUF3YXJlKFsnOC40JyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldEZpcnN0RGF5T2ZXZWVrKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRkYXlPZldlZWspIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogU2V0IHdoZXRoZXIgZGF0ZS90aW1lIGludGVycHJldGF0aW9uIGlzIHRvIGJlIGxlbmllbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5zZXRsZW5pZW50LnBocAogICAgICogQHBhcmFtIGJvb2wgJGxlbmllbnQgPHA+CiAgICAgKiBVc2UgPGI+VFJVRTwvYj4gdG8gYWN0aXZhdGUgdGhlIGxlbmllbnQgbW9kZTsgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuIEZhaWx1cmUgY2FuIG9ubHkgaGFwcGVuIGR1ZSB0byBpbnZhbGlkIHBhcmFtZXRlcnMuCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguNCcgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRMZW5pZW50KCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkbGVuaWVudCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBTZXQgYmVoYXZpb3IgZm9yIGhhbmRsaW5nIHJlcGVhdGluZyB3YWxsIHRpbWVzIGF0IG5lZ2F0aXZlIHRpbWV6b25lIG9mZnNldCB0cmFuc2l0aW9ucwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLnNldHJlcGVhdGVkd2FsbHRpbWVvcHRpb24ucGhwCiAgICAgKiBAcGFyYW0gaW50ICRvcHRpb24gPHA+CiAgICAgKiBPbmUgb2YgdGhlIGNvbnN0YW50cyA8Yj5JbnRsQ2FsZW5kYXI6OldBTExUSU1FX0ZJUlNUPC9iPiBvcgogICAgICogPGI+SW50bENhbGVuZGFyOjpXQUxMVElNRV9MQVNUPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICogUmV0dXJucyA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLiBGYWlsdXJlIGNhbiBvbmx5IGhhcHBlbiBkdWUgdG8gaW52YWxpZCBwYXJhbWV0ZXJzLgogICAgICovCiAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjQnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVwZWF0ZWRXYWxsVGltZU9wdGlvbigjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkb3B0aW9uKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIFNldCBiZWhhdmlvciBmb3IgaGFuZGxpbmcgc2tpcHBlZCB3YWxsIHRpbWVzIGF0IHBvc2l0aXZlIHRpbWV6b25lIG9mZnNldCB0cmFuc2l0aW9ucwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLnNldHNraXBwZWR3YWxsdGltZW9wdGlvbi5waHAKICAgICAqIEBwYXJhbSBpbnQgJG9wdGlvbiA8cD4KICAgICAqIE9uZSBvZiB0aGUgY29uc3RhbnRzIDxiPkludGxDYWxlbmRhcjo6V0FMTFRJTUVfRklSU1Q8L2I+LAogICAgICogPGI+SW50bENhbGVuZGFyOjpXQUxMVElNRV9MQVNUPC9iPiBvcgogICAgICogPGI+SW50bENhbGVuZGFyOjpXQUxMVElNRV9ORVhUX1ZBTElEPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICogPHA+CiAgICAgKiBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuIEZhaWx1cmUgY2FuIG9ubHkgaGFwcGVuIGR1ZSB0byBpbnZhbGlkIHBhcmFtZXRlcnMuCiAgICAgKiA8L3A+CiAgICAgKi8KICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguNCcgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTa2lwcGVkV2FsbFRpbWVPcHRpb24oI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJG9wdGlvbikge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBTZXQgdGhlIGNhbGVuZGFyIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLnNldHRpbWUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHRpbWVzdGFtcCA8cD4KICAgICAqIEFuIGluc3RhbnQgcmVwcmVzZW50ZWQgYnkgdGhlIG51bWJlciBvZiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJldHdlZW4KICAgICAqIHN1Y2ggaW5zdGFudCBhbmQgdGhlIGVwb2NoLCBpZ25vcmluZyBsZWFwIHNlY29uZHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIFJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBhbmQgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2Zsb2F0J10sIGRlZmF1bHQ6ICcnKV0gJHRpbWVzdGFtcCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBTZXQgdGhlIHRpbWV6b25lIHVzZWQgYnkgdGhpcyBjYWxlbmRhcgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLnNldHRpbWV6b25lLnBocAogICAgICogQHBhcmFtIG1peGVkICR0aW1lem9uZSA8cD4KICAgICAqIFRoZSBuZXcgdGltZXpvbmUgdG8gYmUgdXNlZCBieSB0aGlzIGNhbGVuZGFyLiBJdCBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZQogICAgICogZm9sbG93aW5nIHdheXM6CiAgICAgKgogICAgICogPC9wPjx1bD4KICAgICAqIDxsaT4KICAgICAqIDxwPgogICAgICogPGI+TlVMTDwvYj4sIGluIHdoaWNoIGNhc2UgdGhlIGRlZmF1bHQgdGltZXpvbmUgd2lsbCBiZSB1c2VkLCBhcyBzcGVjaWZpZWQgaW4KICAgICAqIHRoZSBpbmkgc2V0dGluZyB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZGF0ZXRpbWUuY29uZmlndXJhdGlvbi5waHAjaW5pLmRhdGUudGltZXpvbmUgZGF0ZS50aW1lem9uZX0gb3IKICAgICAqIHRocm91Z2ggdGhlIGZ1bmN0aW9uICB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGF0ZS1kZWZhdWx0LXRpbWV6b25lLXNldC5waHAgZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgpfSBhbmQgYXMKICAgICAqIHJldHVybmVkIGJ5ICB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGF0ZS1kZWZhdWx0LXRpbWV6b25lLWdldC5waHAgZGF0ZV9kZWZhdWx0X3RpbWV6b25lX2dldCgpfS4KICAgICAqIDwvcD4KICAgICAqIDwvbGk+CiAgICAgKiA8bGk+CiAgICAgKiA8cD4KICAgICAqIEFuIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsdGltZXpvbmUucGhwIEludGxUaW1lWm9uZX0sIHdoaWNoIHdpbGwgYmUgdXNlZCBkaXJlY3RseS4KICAgICAqIDwvcD4KICAgICAqIDwvbGk+CiAgICAgKiA8bGk+CiAgICAgKiA8cD4KICAgICAqIEEge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRhdGV0aW1lem9uZS5waHAgRGF0ZVRpbWVab25lfS4gSXRzIGlkZW50aWZpZXIgd2lsbCBiZSBleHRyYWN0ZWQKICAgICAqIGFuZCBhbiBJQ1UgdGltZXpvbmUgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZDsgdGhlIHRpbWV6b25lIHdpbGwgYmUgYmFja2VkCiAgICAgKiBieSBJQ1UncyBkYXRhYmFzZSwgbm90IFBIUCdzLgogICAgICogPC9wPgogICAgICogPC9saT4KICAgICAqIDxsaT4KICAgICAqIDxwPgogICAgICogQSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuc3RyaW5nLnBocCBzdHJpbmd9LCB3aGljaCBzaG91bGQgYmUgYSB2YWxpZCBJQ1UgdGltZXpvbmUgaWRlbnRpZmllci4KICAgICAqIFNlZSAgYj5JbnRsVGltZVpvbmU6OmNyZWF0ZVRpbWVab25lSURFbnVtZXJhdGlvbigpPC9iPi4gUmF3CiAgICAgKiBvZmZzZXRzIHN1Y2ggYXMgPGVtPiJHTVQrMDg6MzAiPC9lbT4gYXJlIGFsc28gYWNjZXB0ZWQuCiAgICAgKiA8L3A+CiAgICAgKiA8L2xpPgogICAgICogPC91bD4KICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MgYW5kIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGltZVpvbmUoJHRpbWV6b25lKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTIpPGJyLz4KICAgICAqIENvbnZlcnQgYW4gSW50bENhbGVuZGFyIGludG8gYSBEYXRlVGltZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci50b2RhdGV0aW1lLnBocAogICAgICogQHJldHVybiBEYXRlVGltZXxmYWxzZQogICAgICogQSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZGF0ZXRpbWUucGhwIERhdGVUaW1lfSBvYmplY3Qgd2l0aCB0aGUgc2FtZSB0aW1lem9uZSBhcyB0aGlzCiAgICAgKiBvYmplY3QgKHRob3VnaCB1c2luZyBQSFAncyBkYXRhYmFzZSBpbnN0ZWFkIG9mIElDVSdzKSBhbmQgdGhlIHNhbWUgdGltZSwKICAgICAqIGV4Y2VwdCBmb3IgdGhlIHNtYWxsZXIgcHJlY2lzaW9uIChzZWNvbmQgcHJlY2lzaW9uIGluc3RlYWQgb2YgbWlsbGlzZWNvbmQpLgogICAgICogUmV0dXJucyA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHRvRGF0ZVRpbWUoKTogRGF0ZVRpbWV8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5zZXRtaW5pbWFsZGF5c2luZmlyc3R3ZWVrLnBocAogICAgICogQHBhcmFtIGludCAkZGF5cwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguNCcgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRkYXlzKSB7fQoKICAgIC8qKgogICAgICogQHNpbmNlIDguMwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RGF0ZShpbnQgJHllYXIsIGludCAkbW9udGgsIGludCAkZGF5T2ZNb250aCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldERhdGVUaW1lKGludCAkeWVhciwgaW50ICRtb250aCwgaW50ICRkYXlPZk1vbnRoLCBpbnQgJGhvdXIsIGludCAkbWludXRlLCA/aW50ICRzZWNvbmQgPSBudWxsKTogdm9pZCB7fQp9CgovKioKICogQHNpbmNlIDUuNQogKi8KY2xhc3MgSW50bEl0ZXJhdG9yIGltcGxlbWVudHMgSXRlcmF0b3IKewogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKTogbWl4ZWQge30KCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCk6IG1peGVkIHt9CgogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7fQoKICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTogdm9pZCB7fQoKICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpOiBib29sIHt9Cn0KCi8qKgogKiBAc2luY2UgNS41CiAqLwpjbGFzcyBJbnRsRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CgovKioKICogQHNpbmNlIDUuNQogKi8KY2xhc3MgSW50bFRpbWVab25lCnsKICAgIC8qIENvbnN0YW50cyAqLwogICAgcHVibGljIGNvbnN0IERJU1BMQVlfU0hPUlQgPSAxOwogICAgcHVibGljIGNvbnN0IERJU1BMQVlfTE9ORyA9IDI7CiAgICBwdWJsaWMgY29uc3QgRElTUExBWV9TSE9SVF9HRU5FUklDID0gMzsKICAgIHB1YmxpYyBjb25zdCBESVNQTEFZX0xPTkdfR0VORVJJQyA9IDQ7CiAgICBwdWJsaWMgY29uc3QgRElTUExBWV9TSE9SVF9HTVQgPSA1OwogICAgcHVibGljIGNvbnN0IERJU1BMQVlfTE9OR19HTVQgPSA2OwogICAgcHVibGljIGNvbnN0IERJU1BMQVlfU0hPUlRfQ09NTU9OTFlfVVNFRCA9IDc7CiAgICBwdWJsaWMgY29uc3QgRElTUExBWV9HRU5FUklDX0xPQ0FUSU9OID0gODsKICAgIHB1YmxpYyBjb25zdCBUWVBFX0FOWSA9IDA7CiAgICBwdWJsaWMgY29uc3QgVFlQRV9DQU5PTklDQUwgPSAxOwogICAgcHVibGljIGNvbnN0IFRZUEVfQ0FOT05JQ0FMX0xPQ0FUSU9OID0gMjsKCiAgICAvKiBNZXRob2RzICovCgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IHRoZSBudW1iZXIgb2YgSURzIGluIHRoZSBlcXVpdmFsZW5jeSBncm91cCB0aGF0IGluY2x1ZGVzIHRoZSBnaXZlbiBJRAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLmNvdW50ZXF1aXZhbGVudGlkcy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRpbWV6b25lSWQKICAgICAqIEByZXR1cm4gaW50fGZhbHNlIG51bWJlciBvZiBJRHMgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb3VudEVxdWl2YWxlbnRJRHMoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHRpbWV6b25lSWQpOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBDcmVhdGUgYSBuZXcgY29weSBvZiB0aGUgZGVmYXVsdCB0aW1lem9uZSBmb3IgdGhpcyBob3N0CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUuY3JlYXRlZGVmYXVsdC5waHAKICAgICAqIEByZXR1cm4gSW50bFRpbWVab25lCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdCgpOiBJbnRsVGltZVpvbmUge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBHZXQgYW4gZW51bWVyYXRpb24gb3ZlciB0aW1lIHpvbmUgSURzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY291bnRyeSBvciBvZmZzZXQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS5jcmVhdGVlbnVtZXJhdGlvbi5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkY291bnRyeU9yUmF3T2Zmc2V0IFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gSW50bEl0ZXJhdG9yfGZhbHNlIGFuIGl0ZXJhdG9yIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRW51bWVyYXRpb24oJGNvdW50cnlPclJhd09mZnNldCk6IEludGxJdGVyYXRvcnxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIENyZWF0ZSBhIHRpbWV6b25lIG9iamVjdCBmb3IgdGhlIGdpdmVuIElECiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUuY3JlYXRldGltZXpvbmUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0aW1lem9uZUlkCiAgICAgKiBAcmV0dXJuIEludGxUaW1lWm9uZXxudWxsIGEgdGltZXpvbmUgb2JqZWN0IG9yIDxiPk5VTEw8L2I+IG9uIGZhaWx1cmUKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVUaW1lWm9uZSgjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkdGltZXpvbmVJZCk6ID9JbnRsVGltZVpvbmUge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBHZXQgYW4gZW51bWVyYXRpb24gb3ZlciBzeXN0ZW0gdGltZSB6b25lIElEcyB3aXRoIHRoZSBnaXZlbiBmaWx0ZXIgY29uZGl0aW9ucwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLmNyZWF0ZXRpbWV6b25laWRlbnVtZXJhdGlvbi5waHAKICAgICAqIEBwYXJhbSBpbnQgJHR5cGUKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcmVnaW9uIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSBpbnQgJHJhd09mZnNldCBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIEludGxJdGVyYXRvcnxmYWxzZSBhbiBpdGVyYXRvciBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZQogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVRpbWVab25lSURFbnVtZXJhdGlvbigKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkdHlwZSwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRyZWdpb24gPSBudWxsLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludHxudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJHJhd09mZnNldCA9IG51bGwKICAgICk6IEludGxJdGVyYXRvcnxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIENyZWF0ZSBhIHRpbWV6b25lIG9iamVjdCBmcm9tIERhdGVUaW1lWm9uZQogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLmZyb21kYXRldGltZXpvbmUucGhwCiAgICAgKiBAcGFyYW0gRGF0ZVRpbWVab25lICR0aW1lem9uZQogICAgICogQHJldHVybiBJbnRsVGltZVpvbmV8bnVsbCBhIHRpbWV6b25lIG9iamVjdCBvciA8Yj5OVUxMPC9iPiBvbiBmYWlsdXJlCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbURhdGVUaW1lWm9uZSgjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdEYXRlVGltZVpvbmUnXSwgZGVmYXVsdDogJycpXSAkdGltZXpvbmUpOiA/SW50bFRpbWVab25lIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IHRoZSBjYW5vbmljYWwgc3lzdGVtIHRpbWV6b25lIElEIG9yIHRoZSBub3JtYWxpemVkIGN1c3RvbSB0aW1lIHpvbmUgSUQgZm9yIHRoZSBnaXZlbiB0aW1lIHpvbmUgSUQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS5nZXRjYW5vbmljYWxpZC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRpbWV6b25lSWQKICAgICAqIEBwYXJhbSBib29sICYkaXNTeXN0ZW1JZCBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgdGltZXpvbmUgSUQgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDYW5vbmljYWxJRCgjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkdGltZXpvbmVJZCwgJiRpc1N5c3RlbUlkKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IGEgbmFtZSBvZiB0aGlzIHRpbWUgem9uZSBzdWl0YWJsZSBmb3IgcHJlc2VudGF0aW9uIHRvIHRoZSB1c2VyCiAgICAgKiBAcGFyYW0gYm9vbCAkZHN0IFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSBpbnQgJHN0eWxlIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgdGltZXpvbmUgbmFtZSBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZQogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRkc3QgPSBmYWxzZSwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkc3R5bGUgPSAyLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZQogICAgKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IHRoZSBhbW91bnQgb2YgdGltZSB0byBiZSBhZGRlZCB0byBsb2NhbCBzdGFuZGFyZCB0aW1lIHRvIGdldCBsb2NhbCB3YWxsIGNsb2NrIHRpbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS5nZXRlcXVpdmFsZW50aWQucGhwCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RFNUU2F2aW5ncygpOiBpbnQge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBHZXQgYW4gSUQgaW4gdGhlIGVxdWl2YWxlbmN5IGdyb3VwIHRoYXQgaW5jbHVkZXMgdGhlIGdpdmVuIElECiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUuZ2V0ZXF1aXZhbGVudGlkLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkdGltZXpvbmVJZAogICAgICogQHBhcmFtIGludCAkb2Zmc2V0CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgdGltZSB6b25lIElEIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RXF1aXZhbGVudElEKAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR0aW1lem9uZUlkLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRvZmZzZXQKICAgICk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIEdldCBsYXN0IGVycm9yIGNvZGUgb24gdGhlIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLmdldGVycm9yY29kZS5waHAKICAgICAqIEByZXR1cm4gaW50fGZhbHNlCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvckNvZGUoKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IGxhc3QgZXJyb3IgbWVzc2FnZSBvbiB0aGUgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUuZ2V0ZXJyb3JtZXNzYWdlLnBocAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yTWVzc2FnZSgpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBDcmVhdGUgR01UIChVVEMpIHRpbWV6b25lCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUuZ2V0Z210LnBocAogICAgICogQHJldHVybiBJbnRsVGltZVpvbmUKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRHTVQoKTogSW50bFRpbWVab25lIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IHRpbWV6b25lIElECiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SUQoKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IHRoZSB0aW1lIHpvbmUgcmF3IGFuZCBHTVQgb2Zmc2V0IGZvciB0aGUgZ2l2ZW4gbW9tZW50IGluIHRpbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS5nZXRvZmZzZXQucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHRpbWVzdGFtcAogICAgICogICBtb21lbnQgaW4gdGltZSBmb3Igd2hpY2ggdG8gcmV0dXJuIG9mZnNldHMsIGluIHVuaXRzIG9mIG1pbGxpc2Vjb25kcyBmcm9tCiAgICAgKiAgIEphbnVhcnkgMSwgMTk3MCAwOjAwIEdNVCwgZWl0aGVyIEdNVCB0aW1lIG9yIGxvY2FsIHdhbGwgdGltZSwgZGVwZW5kaW5nIG9uCiAgICAgKiAgIGBsb2NhbCcuCiAgICAgKiBAcGFyYW0gYm9vbCAkbG9jYWwKICAgICAqICAgaWYgdHJ1ZSwgYGRhdGUnIGlzIGxvY2FsIHdhbGwgdGltZTsgb3RoZXJ3aXNlIGl0IGlzIGluIEdNVCB0aW1lLgogICAgICogQHBhcmFtIGludCAmJHJhd09mZnNldAogICAgICogICBvdXRwdXQgcGFyYW1ldGVyIHRvIHJlY2VpdmUgdGhlIHJhdyBvZmZzZXQsIHRoYXQgaXMsIHRoZSBvZmZzZXQgbm90CiAgICAgKiAgIGluY2x1ZGluZyBEU1QgYWRqdXN0bWVudHMKICAgICAqIEBwYXJhbSBpbnQgJiRkc3RPZmZzZXQKICAgICAqICAgb3V0cHV0IHBhcmFtZXRlciB0byByZWNlaXZlIHRoZSBEU1Qgb2Zmc2V0LCB0aGF0IGlzLCB0aGUgb2Zmc2V0IHRvIGJlIGFkZGVkCiAgICAgKiAgIHRvIGByYXdPZmZzZXQnIHRvIG9idGFpbiB0aGUgdG90YWwgb2Zmc2V0IGJldHdlZW4gbG9jYWwgYW5kIEdNVCB0aW1lLiBJZgogICAgICogICBEU1QgaXMgbm90IGluIGVmZmVjdCwgdGhpcyB2YWx1ZSBpcyB6ZXJvOyBvdGhlcndpc2UgaXQgaXMgYSBwb3NpdGl2ZSB2YWx1ZSwKICAgICAqICAgdHlwaWNhbGx5IG9uZSBob3VyLgogICAgICogQHJldHVybiBib29sIGJvb2xlYW4gaW5kaWNhdGlvbiBvZiBzdWNjZXNzCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPZmZzZXQoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnZmxvYXQnXSwgZGVmYXVsdDogJycpXSAkdGltZXN0YW1wLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkbG9jYWwsCiAgICAgICAgJiRyYXdPZmZzZXQsCiAgICAgICAgJiRkc3RPZmZzZXQKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAgICAgKiBHZXQgdGhlIHJhdyBHTVQgb2Zmc2V0IChiZWZvcmUgdGFraW5nIGRheWxpZ2h0IHNhdmluZ3MgdGltZSBpbnRvIGFjY291bnQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS5nZXRyYXdvZmZzZXQucGhwCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmF3T2Zmc2V0KCk6IGludCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIEdldCB0aGUgcmVnaW9uIGNvZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBzeXN0ZW0gdGltZSB6b25lIElECiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUuZ2V0cmVnaW9uLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkdGltZXpvbmVJZAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgcmVnaW9uIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVnaW9uKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR0aW1lem9uZUlkKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogR2V0IHRoZSB0aW1lem9uZSBkYXRhIHZlcnNpb24gY3VycmVudGx5IHVzZWQgYnkgSUNVCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUuZ2V0dHpkYXRhdmVyc2lvbi5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VFpEYXRhVmVyc2lvbigpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBHZXQgdGhlICJ1bmtub3duIiB0aW1lIHpvbmUKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS5nZXR1bmtub3duLnBocAogICAgICogQHJldHVybiBJbnRsVGltZVpvbmUKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVbmtub3duKCk6IEludGxUaW1lWm9uZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA3ICZndDs9Ny4xLjApPGJyLz4KICAgICAqIFRyYW5zbGF0ZXMgYSBzeXN0ZW0gdGltZXpvbmUgKGUuZy4gIkFtZXJpY2EvTG9zX0FuZ2VsZXMiKSBpbnRvIGEgV2luZG93cwogICAgICogdGltZXpvbmUgKGUuZy4gIlBhY2lmaWMgU3RhbmRhcmQgVGltZSIpLgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLmdldHdpbmRvd3NpZC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRpbWV6b25lSWQKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBXaW5kb3dzIHRpbWV6b25lIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlCiAgICAgKiBAc2luY2UgNy4xCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0V2luZG93c0lEKHN0cmluZyAkdGltZXpvbmVJZCk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLmdldGlkZm9yd2luZG93c2lkLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkdGltZXpvbmVJZAogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRyZWdpb24KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBXaW5kb3dzIHRpbWV6b25lIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlCiAgICAgKiBAc2luY2UgNy4xCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SURGb3JXaW5kb3dzSUQoc3RyaW5nICR0aW1lem9uZUlkLCA/c3RyaW5nICRyZWdpb24gPSBudWxsKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogICAgICogQ2hlY2sgaWYgdGhpcyB6b25lIGhhcyB0aGUgc2FtZSBydWxlcyBhbmQgb2Zmc2V0IGFzIGFub3RoZXIgem9uZQogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLmhhc3NhbWVydWxlcy5waHAKICAgICAqIEBwYXJhbSBJbnRsVGltZVpvbmUgJG90aGVyCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGhhc1NhbWVSdWxlcyhJbnRsVGltZVpvbmUgJG90aGVyKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIENvbnZlcnQgdG8gRGF0ZVRpbWVab25lIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLnRvZGF0ZXRpbWV6b25lLnBocAogICAgICogQHJldHVybiBEYXRlVGltZVpvbmV8ZmFsc2UgdGhlIERhdGVUaW1lWm9uZSBvYmplY3Qgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHRvRGF0ZVRpbWVab25lKCk6IERhdGVUaW1lWm9uZXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICAgICAqIENoZWNrIGlmIHRoaXMgdGltZSB6b25lIHVzZXMgZGF5bGlnaHQgc2F2aW5ncyB0aW1lCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUudXNlZGF5bGlnaHR0aW1lLnBocAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB1c2VEYXlsaWdodFRpbWUoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQHNpbmNlIDguNAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldElhbmFJRChzdHJpbmcgJHRpbWV6b25lSWQpOiBzdHJpbmd8ZmFsc2Uge30KfQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIENyZWF0ZSBhIGNvbGxhdG9yCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY29sbGF0b3IuY3JlYXRlLnBocAogKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAqIFRoZSBsb2NhbGUgY29udGFpbmluZyB0aGUgcmVxdWlyZWQgY29sbGF0aW9uIHJ1bGVzLiBTcGVjaWFsIHZhbHVlcyBmb3IKICogbG9jYWxlcyBjYW4gYmUgcGFzc2VkIGluIC0gaWYgbnVsbCBpcyBwYXNzZWQgZm9yIHRoZSBsb2NhbGUsIHRoZQogKiBkZWZhdWx0IGxvY2FsZSBjb2xsYXRpb24gcnVsZXMgd2lsbCBiZSB1c2VkLiBJZiBlbXB0eSBzdHJpbmcgKCIiKSBvcgogKiAicm9vdCIgYXJlIHBhc3NlZCwgVUNBIHJ1bGVzIHdpbGwgYmUgdXNlZC4KICogPC9wPgogKiBAcmV0dXJuIENvbGxhdG9yfG51bGwgUmV0dXJuIG5ldyBpbnN0YW5jZSBvZiA8Yj5Db2xsYXRvcjwvYj4gb2JqZWN0LCBvciA8Yj5OVUxMPC9iPgogKiBvbiBlcnJvci4KICovCiNbUHVyZV0KZnVuY3Rpb24gY29sbGF0b3JfY3JlYXRlKHN0cmluZyAkbG9jYWxlKTogP0NvbGxhdG9yIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogQ29tcGFyZSB0d28gVW5pY29kZSBzdHJpbmdzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY29sbGF0b3IuY29tcGFyZS5waHAKICogQHBhcmFtIENvbGxhdG9yICRvYmplY3QKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nMSA8cD4KICogVGhlIGZpcnN0IHN0cmluZyB0byBjb21wYXJlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZzIgPHA+CiAqIFRoZSBzZWNvbmQgc3RyaW5nIHRvIGNvbXBhcmUuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgUmV0dXJuIGNvbXBhcmlzb24gcmVzdWx0OjwvcD4KICogPHA+CiAqIDxwPgogKiAxIGlmIDxpPnN0cmluZzE8L2k+IGlzIGdyZWF0ZXIgdGhhbgogKiA8aT5zdHJpbmcyPC9pPiA7CiAqIDwvcD4KICogPHA+CiAqIDAgaWYgPGk+c3RyaW5nMTwvaT4gaXMgZXF1YWwgdG8KICogPGk+c3RyaW5nMjwvaT47CiAqIDwvcD4KICogPHA+CiAqIC0xIGlmIDxpPnN0cmluZzE8L2k+IGlzIGxlc3MgdGhhbgogKiA8aT5zdHJpbmcyPC9pPiAuCiAqIDwvcD4KICogT24gZXJyb3IKICogYm9vbGVhbgogKiA8Yj5GQUxTRTwvYj4KICogaXMgcmV0dXJuZWQuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGNvbGxhdG9yX2NvbXBhcmUoQ29sbGF0b3IgJG9iamVjdCwgc3RyaW5nICRzdHJpbmcxLCBzdHJpbmcgJHN0cmluZzIpOiBpbnR8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBHZXQgY29sbGF0aW9uIGF0dHJpYnV0ZSB2YWx1ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NvbGxhdG9yLmdldGF0dHJpYnV0ZS5waHAKICogQHBhcmFtIENvbGxhdG9yICRvYmplY3QKICogQHBhcmFtIGludCAkYXR0cmlidXRlIDxwPgogKiBBdHRyaWJ1dGUgdG8gZ2V0IHZhbHVlIGZvci4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSBBdHRyaWJ1dGUgdmFsdWUsIG9yIGJvb2xlYW4gPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBjb2xsYXRvcl9nZXRfYXR0cmlidXRlKENvbGxhdG9yICRvYmplY3QsIGludCAkYXR0cmlidXRlKTogaW50fGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogU2V0IGNvbGxhdGlvbiBhdHRyaWJ1dGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jb2xsYXRvci5zZXRhdHRyaWJ1dGUucGhwCiAqIEBwYXJhbSBDb2xsYXRvciAkb2JqZWN0CiAqIEBwYXJhbSBpbnQgJGF0dHJpYnV0ZSA8cD5BdHRyaWJ1dGUuPC9wPgogKiBAcGFyYW0gaW50ICR2YWx1ZSA8cD4KICogQXR0cmlidXRlIHZhbHVlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gY29sbGF0b3Jfc2V0X2F0dHJpYnV0ZShDb2xsYXRvciAkb2JqZWN0LCBpbnQgJGF0dHJpYnV0ZSwgaW50ICR2YWx1ZSk6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBHZXQgY3VycmVudCBjb2xsYXRpb24gc3RyZW5ndGgKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jb2xsYXRvci5nZXRzdHJlbmd0aC5waHAKICogQHBhcmFtIENvbGxhdG9yICRvYmplY3QKICogQHJldHVybiBpbnQgY3VycmVudCBjb2xsYXRpb24gc3RyZW5ndGgKICovCiNbUHVyZV0KZnVuY3Rpb24gY29sbGF0b3JfZ2V0X3N0cmVuZ3RoKENvbGxhdG9yICRvYmplY3QpOiBpbnQge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBTZXQgY29sbGF0aW9uIHN0cmVuZ3RoCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY29sbGF0b3Iuc2V0c3RyZW5ndGgucGhwCiAqIEBwYXJhbSBDb2xsYXRvciAkb2JqZWN0CiAqIEBwYXJhbSBpbnQgJHN0cmVuZ3RoIDxwPlN0cmVuZ3RoIHRvIHNldC48L3A+CiAqIDxwPgogKiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgogKiA8Yj5Db2xsYXRvcjo6UFJJTUFSWTwvYj4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCiNbTGFuZ3VhZ2VBd2FyZShbJzguNCcgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KZnVuY3Rpb24gY29sbGF0b3Jfc2V0X3N0cmVuZ3RoKENvbGxhdG9yICRvYmplY3QsIGludCAkc3RyZW5ndGgpIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogU29ydCBhcnJheSB1c2luZyBzcGVjaWZpZWQgY29sbGF0b3IKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jb2xsYXRvci5zb3J0LnBocAogKiBAcGFyYW0gQ29sbGF0b3IgJG9iamVjdAogKiBAcGFyYW0gc3RyaW5nW10gJiRhcnJheSA8cD4KICogQXJyYXkgb2Ygc3RyaW5ncyB0byBzb3J0LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIDxwPgogKiBPcHRpb25hbCBzb3J0aW5nIHR5cGUsIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKiA8L3A+CiAqIDxwPgogKiA8Yj5Db2xsYXRvcjo6U09SVF9SRUdVTEFSPC9iPgogKiAtIGNvbXBhcmUgaXRlbXMgbm9ybWFsbHkgKGRvbid0IGNoYW5nZSB0eXBlcykKICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGNvbGxhdG9yX3NvcnQoQ29sbGF0b3IgJG9iamVjdCwgYXJyYXkgJiRhcnJheSwgaW50ICRmbGFncyA9IDApOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogU29ydCBhcnJheSB1c2luZyBzcGVjaWZpZWQgY29sbGF0b3IgYW5kIHNvcnQga2V5cwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NvbGxhdG9yLnNvcnR3aXRoc29ydGtleXMucGhwCiAqIEBwYXJhbSBDb2xsYXRvciAkb2JqZWN0CiAqIEBwYXJhbSBzdHJpbmdbXSAmJGFycmF5IDxwPkFycmF5IG9mIHN0cmluZ3MgdG8gc29ydDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBjb2xsYXRvcl9zb3J0X3dpdGhfc29ydF9rZXlzKAogICAgQ29sbGF0b3IgJG9iamVjdCwKICAgIGFycmF5ICYkYXJyYXksCiAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNS42JyldICRzb3J0X2ZsYWdzID0gW10KKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFNvcnQgYXJyYXkgbWFpbnRhaW5pbmcgaW5kZXggYXNzb2NpYXRpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jb2xsYXRvci5hc29ydC5waHAKICogQHBhcmFtIENvbGxhdG9yICRvYmplY3QKICogQHBhcmFtIHN0cmluZ1tdICYkYXJyYXkgPHA+QXJyYXkgb2Ygc3RyaW5ncyB0byBzb3J0LjwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgPHA+CiAqIE9wdGlvbmFsIHNvcnRpbmcgdHlwZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAqIDxiPkNvbGxhdG9yOjpTT1JUX1JFR1VMQVI8L2I+CiAqIC0gY29tcGFyZSBpdGVtcyBub3JtYWxseSAoZG9uJ3QgY2hhbmdlIHR5cGVzKQogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gY29sbGF0b3JfYXNvcnQoQ29sbGF0b3IgJG9iamVjdCwgYXJyYXkgJiRhcnJheSwgaW50ICRmbGFncyA9IDApOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogR2V0IHRoZSBsb2NhbGUgbmFtZSBvZiB0aGUgY29sbGF0b3IKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jb2xsYXRvci5nZXRsb2NhbGUucGhwCiAqIEBwYXJhbSBDb2xsYXRvciAkb2JqZWN0CiAqIEBwYXJhbSBpbnQgJHR5cGUgPHA+CiAqIFlvdSBjYW4gY2hvb3NlIGJldHdlZW4gdmFsaWQgYW5kIGFjdHVhbCBsb2NhbGUgKAogKiA8Yj5Mb2NhbGU6OlZBTElEX0xPQ0FMRTwvYj4gYW5kCiAqIDxiPkxvY2FsZTo6QUNUVUFMX0xPQ0FMRTwvYj4sCiAqIHJlc3BlY3RpdmVseSkuIFRoZSBkZWZhdWx0IGlzIHRoZSBhY3R1YWwgbG9jYWxlLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFJlYWwgbG9jYWxlIG5hbWUgZnJvbSB3aGljaCB0aGUgY29sbGF0aW9uIGRhdGEgY29tZXMuIElmIHRoZSBjb2xsYXRvciB3YXMKICogaW5zdGFudGlhdGVkIGZyb20gcnVsZXMgb3IgYW4gZXJyb3Igb2NjdXJyZWQsIHJldHVybnMKICogYm9vbGVhbiA8Yj5GQUxTRTwvYj4uCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGNvbGxhdG9yX2dldF9sb2NhbGUoQ29sbGF0b3IgJG9iamVjdCwgaW50ICR0eXBlKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogR2V0IGNvbGxhdG9yJ3MgbGFzdCBlcnJvciBjb2RlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY29sbGF0b3IuZ2V0ZXJyb3Jjb2RlLnBocAogKiBAcGFyYW0gQ29sbGF0b3IgJG9iamVjdAogKiBAcmV0dXJuIGludHxmYWxzZSBFcnJvciBjb2RlIHJldHVybmVkIGJ5IHRoZSBsYXN0IENvbGxhdG9yIEFQSSBmdW5jdGlvbiBjYWxsLgogKi8KI1tQdXJlKHRydWUpXQpmdW5jdGlvbiBjb2xsYXRvcl9nZXRfZXJyb3JfY29kZShDb2xsYXRvciAkb2JqZWN0KTogaW50fGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogR2V0IHRleHQgZm9yIGNvbGxhdG9yJ3MgbGFzdCBlcnJvciBjb2RlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY29sbGF0b3IuZ2V0ZXJyb3JtZXNzYWdlLnBocAogKiBAcGFyYW0gQ29sbGF0b3IgJG9iamVjdAogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBEZXNjcmlwdGlvbiBvZiBhbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgbGFzdCBDb2xsYXRvciBBUEkgZnVuY3Rpb24gY2FsbC4KICovCiNbUHVyZV0KZnVuY3Rpb24gY29sbGF0b3JfZ2V0X2Vycm9yX21lc3NhZ2UoQ29sbGF0b3IgJG9iamVjdCk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMiwgUEhQIDcsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMyk8YnIvPgogKiBHZXQgc29ydGluZyBrZXkgZm9yIGEgc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY29sbGF0b3IuZ2V0c29ydGtleS5waHAKICogQHBhcmFtIENvbGxhdG9yICRvYmplY3QKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogKiBUaGUgc3RyaW5nIHRvIHByb2R1Y2UgdGhlIGtleSBmcm9tLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBjb2xsYXRpb24ga2V5IGZvciB0aGUgc3RyaW5nLiBDb2xsYXRpb24ga2V5cyBjYW4gYmUgY29tcGFyZWQgZGlyZWN0bHkgaW5zdGVhZCBvZiBzdHJpbmdzLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBjb2xsYXRvcl9nZXRfc29ydF9rZXkoCiAgICBDb2xsYXRvciAkb2JqZWN0LAogICAgc3RyaW5nICRzdHJpbmcsCiAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNS42JyldICRhcmczCik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIENyZWF0ZSBhIG51bWJlciBmb3JtYXR0ZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuY3JlYXRlLnBocAogKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAqIExvY2FsZSBpbiB3aGljaCB0aGUgbnVtYmVyIHdvdWxkIGJlIGZvcm1hdHRlZCAobG9jYWxlIG5hbWUsIGUuZy4gZW5fQ0EpLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHN0eWxlIDxwPgogKiBTdHlsZSBvZiB0aGUgZm9ybWF0dGluZywgb25lIG9mIHRoZQogKiBmb3JtYXQgc3R5bGUgY29uc3RhbnRzLiBJZgogKiA8Yj5OdW1iZXJGb3JtYXR0ZXI6OlBBVFRFUk5fREVDSU1BTDwvYj4KICogb3IgPGI+TnVtYmVyRm9ybWF0dGVyOjpQQVRURVJOX1JVTEVCQVNFRDwvYj4KICogaXMgcGFzc2VkIHRoZW4gdGhlIG51bWJlciBmb3JtYXQgaXMgb3BlbmVkIHVzaW5nIHRoZSBnaXZlbiBwYXR0ZXJuLAogKiB3aGljaCBtdXN0IGNvbmZvcm0gdG8gdGhlIHN5bnRheCBkZXNjcmliZWQgaW4KICogSUNVIERlY2ltYWxGb3JtYXQKICogZG9jdW1lbnRhdGlvbiBvcgogKiBJQ1UgUnVsZUJhc2VkTnVtYmVyRm9ybWF0CiAqIGRvY3VtZW50YXRpb24sIHJlc3BlY3RpdmVseS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHBhdHRlcm4gW29wdGlvbmFsXSA8cD4KICogUGF0dGVybiBzdHJpbmcgaWYgdGhlIGNob3NlbiBzdHlsZSByZXF1aXJlcyBhIHBhdHRlcm4uCiAqIDwvcD4KICogQHJldHVybiBOdW1iZXJGb3JtYXR0ZXJ8bnVsbCA8Yj5OdW1iZXJGb3JtYXR0ZXI8L2I+IG9iamVjdCBvciA8Yj5OVUxMPC9iPiBvbiBlcnJvci4KICovCiNbUHVyZV0KZnVuY3Rpb24gbnVtZm10X2NyZWF0ZShzdHJpbmcgJGxvY2FsZSwgaW50ICRzdHlsZSwgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJ3N0cmluZycpXSAkcGF0dGVybiA9IG51bGwpOiA/TnVtYmVyRm9ybWF0dGVyIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogRm9ybWF0IGEgbnVtYmVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbnVtYmVyZm9ybWF0dGVyLmZvcm1hdC5waHAKICogQHBhcmFtIE51bWJlckZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEBwYXJhbSBpbnR8ZmxvYXQgJG51bSA8cD4KICogVGhlIHZhbHVlIHRvIGZvcm1hdC4gQ2FuIGJlIGludGVnZXIgb3IgZmxvYXQsCiAqIG90aGVyIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIG51bWVyaWMgdmFsdWUuCiAqIDwvcD4KICogQHBhcmFtIGludCAkdHlwZSA8cD4KICogVGhlCiAqIGZvcm1hdHRpbmcgdHlwZSB0byB1c2UuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIHN0cmluZyBjb250YWluaW5nIGZvcm1hdHRlZCB2YWx1ZSwgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBudW1mbXRfZm9ybWF0KE51bWJlckZvcm1hdHRlciAkZm9ybWF0dGVyLCBpbnR8ZmxvYXQgJG51bSwgaW50ICR0eXBlID0gMCk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFBhcnNlIGEgbnVtYmVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbnVtYmVyZm9ybWF0dGVyLnBhcnNlLnBocAogKiBAcGFyYW0gTnVtYmVyRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAqIEBwYXJhbSBpbnQgJHR5cGUgW29wdGlvbmFsXSA8cD4KICogVGhlCiAqIGZvcm1hdHRpbmcgdHlwZSB0byB1c2UuIEJ5IGRlZmF1bHQsCiAqIDxiPk51bWJlckZvcm1hdHRlcjo6VFlQRV9ET1VCTEU8L2I+IGlzIHVzZWQuCiAqIDwvcD4KICogQHBhcmFtIGludCAmJG9mZnNldCBbb3B0aW9uYWxdIDxwPgogKiBPZmZzZXQgaW4gdGhlIHN0cmluZyBhdCB3aGljaCB0byBiZWdpbiBwYXJzaW5nLiBPbiByZXR1cm4sIHRoaXMgdmFsdWUKICogd2lsbCBob2xkIHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4KICogPC9wPgogKiBAcmV0dXJuIGludHxmbG9hdHxmYWxzZSBUaGUgdmFsdWUgb2YgdGhlIHBhcnNlZCBudW1iZXIgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBudW1mbXRfcGFyc2UoTnVtYmVyRm9ybWF0dGVyICRmb3JtYXR0ZXIsIHN0cmluZyAkc3RyaW5nLCBpbnQgJHR5cGUgPSBOdW1iZXJGb3JtYXR0ZXI6OlRZUEVfRE9VQkxFLCAmJG9mZnNldCA9IG51bGwpOiBpbnR8ZmxvYXR8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBGb3JtYXQgYSBjdXJyZW5jeSB2YWx1ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL251bWJlcmZvcm1hdHRlci5mb3JtYXRjdXJyZW5jeS5waHAKICogQHBhcmFtIE51bWJlckZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEBwYXJhbSBmbG9hdCAkYW1vdW50IDxwPgogKiBUaGUgbnVtZXJpYyBjdXJyZW5jeSB2YWx1ZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRjdXJyZW5jeSA8cD4KICogVGhlIDMtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgaW5kaWNhdGluZyB0aGUgY3VycmVuY3kgdG8gdXNlLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZvcm1hdHRlZCBjdXJyZW5jeSB2YWx1ZS4KICovCiNbUHVyZV0KZnVuY3Rpb24gbnVtZm10X2Zvcm1hdF9jdXJyZW5jeShOdW1iZXJGb3JtYXR0ZXIgJGZvcm1hdHRlciwgZmxvYXQgJGFtb3VudCwgc3RyaW5nICRjdXJyZW5jeSk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFBhcnNlIGEgY3VycmVuY3kgbnVtYmVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbnVtYmVyZm9ybWF0dGVyLnBhcnNlY3VycmVuY3kucGhwCiAqIEBwYXJhbSBOdW1iZXJGb3JtYXR0ZXIgJGZvcm1hdHRlcgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICogQHBhcmFtIHN0cmluZyAmJGN1cnJlbmN5IDxwPgogKiBQYXJhbWV0ZXIgdG8gcmVjZWl2ZSB0aGUgY3VycmVuY3kgbmFtZSAoMy1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kKICogY29kZSkuCiAqIDwvcD4KICogQHBhcmFtIGludCAmJG9mZnNldCBbb3B0aW9uYWxdIDxwPgogKiBPZmZzZXQgaW4gdGhlIHN0cmluZyBhdCB3aGljaCB0byBiZWdpbiBwYXJzaW5nLiBPbiByZXR1cm4sIHRoaXMgdmFsdWUKICogd2lsbCBob2xkIHRoZSBvZmZzZXQgYXQgd2hpY2ggcGFyc2luZyBlbmRlZC4KICogPC9wPgogKiBAcmV0dXJuIGZsb2F0fGZhbHNlIFRoZSBwYXJzZWQgbnVtZXJpYyB2YWx1ZSBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBudW1mbXRfcGFyc2VfY3VycmVuY3koTnVtYmVyRm9ybWF0dGVyICRmb3JtYXR0ZXIsIHN0cmluZyAkc3RyaW5nLCAmJGN1cnJlbmN5LCAmJG9mZnNldCA9IG51bGwpOiBmbG9hdHxmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFNldCBhbiBhdHRyaWJ1dGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuc2V0YXR0cmlidXRlLnBocAogKiBAcGFyYW0gTnVtYmVyRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHBhcmFtIGludCAkYXR0cmlidXRlIDxwPgogKiBBdHRyaWJ1dGUgc3BlY2lmaWVyIC0gb25lIG9mIHRoZQogKiBudW1lcmljIGF0dHJpYnV0ZSBjb25zdGFudHMuCiAqIDwvcD4KICogQHBhcmFtIGludHxmbG9hdCAkdmFsdWUgPHA+CiAqIFRoZSBhdHRyaWJ1dGUgdmFsdWUuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBudW1mbXRfc2V0X2F0dHJpYnV0ZShOdW1iZXJGb3JtYXR0ZXIgJGZvcm1hdHRlciwgaW50ICRhdHRyaWJ1dGUsIGludHxmbG9hdCAkdmFsdWUpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogR2V0IGFuIGF0dHJpYnV0ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL251bWJlcmZvcm1hdHRlci5nZXRhdHRyaWJ1dGUucGhwCiAqIEBwYXJhbSBOdW1iZXJGb3JtYXR0ZXIgJGZvcm1hdHRlcgogKiBAcGFyYW0gaW50ICRhdHRyaWJ1dGUgPHA+CiAqIEF0dHJpYnV0ZSBzcGVjaWZpZXIgLSBvbmUgb2YgdGhlCiAqIG51bWVyaWMgYXR0cmlidXRlIGNvbnN0YW50cy4KICogPC9wPgogKiBAcmV0dXJuIGludHxmbG9hdHxmYWxzZSBSZXR1cm4gYXR0cmlidXRlIHZhbHVlIG9uIHN1Y2Nlc3MsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCiNbUHVyZV0KZnVuY3Rpb24gbnVtZm10X2dldF9hdHRyaWJ1dGUoTnVtYmVyRm9ybWF0dGVyICRmb3JtYXR0ZXIsIGludCAkYXR0cmlidXRlKTogaW50fGZsb2F0fGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogU2V0IGEgdGV4dCBhdHRyaWJ1dGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuc2V0dGV4dGF0dHJpYnV0ZS5waHAKICogQHBhcmFtIE51bWJlckZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEBwYXJhbSBpbnQgJGF0dHJpYnV0ZSA8cD4KICogQXR0cmlidXRlIHNwZWNpZmllciAtIG9uZSBvZiB0aGUKICogdGV4dCBhdHRyaWJ1dGUKICogY29uc3RhbnRzLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIDxwPgogKiBUZXh0IGZvciB0aGUgYXR0cmlidXRlIHZhbHVlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gbnVtZm10X3NldF90ZXh0X2F0dHJpYnV0ZShOdW1iZXJGb3JtYXR0ZXIgJGZvcm1hdHRlciwgaW50ICRhdHRyaWJ1dGUsIHN0cmluZyAkdmFsdWUpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogR2V0IGEgdGV4dCBhdHRyaWJ1dGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuZ2V0dGV4dGF0dHJpYnV0ZS5waHAKICogQHBhcmFtIE51bWJlckZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEBwYXJhbSBpbnQgJGF0dHJpYnV0ZSA8cD4KICogQXR0cmlidXRlIHNwZWNpZmllciAtIG9uZSBvZiB0aGUKICogdGV4dCBhdHRyaWJ1dGUgY29uc3RhbnRzLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFJldHVybiBhdHRyaWJ1dGUgdmFsdWUgb24gc3VjY2Vzcywgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBudW1mbXRfZ2V0X3RleHRfYXR0cmlidXRlKE51bWJlckZvcm1hdHRlciAkZm9ybWF0dGVyLCBpbnQgJGF0dHJpYnV0ZSk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFNldCBhIHN5bWJvbCB2YWx1ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL251bWJlcmZvcm1hdHRlci5zZXRzeW1ib2wucGhwCiAqIEBwYXJhbSBOdW1iZXJGb3JtYXR0ZXIgJGZvcm1hdHRlcgogKiBAcGFyYW0gaW50ICRzeW1ib2wgPHA+CiAqIFN5bWJvbCBzcGVjaWZpZXIsIG9uZSBvZiB0aGUKICogZm9ybWF0IHN5bWJvbCBjb25zdGFudHMuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdmFsdWUgPHA+CiAqIFRleHQgZm9yIHRoZSBzeW1ib2wuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBudW1mbXRfc2V0X3N5bWJvbChOdW1iZXJGb3JtYXR0ZXIgJGZvcm1hdHRlciwgaW50ICRzeW1ib2wsIHN0cmluZyAkdmFsdWUpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogR2V0IGEgc3ltYm9sIHZhbHVlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbnVtYmVyZm9ybWF0dGVyLmdldHN5bWJvbC5waHAKICogQHBhcmFtIE51bWJlckZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEBwYXJhbSBpbnQgJHN5bWJvbCA8cD4KICogU3ltYm9sIHNwZWNpZmllciwgb25lIG9mIHRoZQogKiBmb3JtYXQgc3ltYm9sIGNvbnN0YW50cy4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgc3ltYm9sIHN0cmluZyBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIG51bWZtdF9nZXRfc3ltYm9sKE51bWJlckZvcm1hdHRlciAkZm9ybWF0dGVyLCBpbnQgJHN5bWJvbCk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFNldCBmb3JtYXR0ZXIgcGF0dGVybgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL251bWJlcmZvcm1hdHRlci5zZXRwYXR0ZXJuLnBocAogKiBAcGFyYW0gTnVtYmVyRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiA8cD4KICogUGF0dGVybiBpbiBzeW50YXggZGVzY3JpYmVkIGluCiAqIElDVSBEZWNpbWFsRm9ybWF0CiAqIGRvY3VtZW50YXRpb24uCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBudW1mbXRfc2V0X3BhdHRlcm4oTnVtYmVyRm9ybWF0dGVyICRmb3JtYXR0ZXIsIHN0cmluZyAkcGF0dGVybik6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBHZXQgZm9ybWF0dGVyIHBhdHRlcm4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuZ2V0cGF0dGVybi5waHAKICogQHBhcmFtIE51bWJlckZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFBhdHRlcm4gc3RyaW5nIHRoYXQgaXMgdXNlZCBieSB0aGUgZm9ybWF0dGVyLCBvciA8Yj5GQUxTRTwvYj4gaWYgYW4gZXJyb3IgaGFwcGVucy4KICovCiNbUHVyZV0KZnVuY3Rpb24gbnVtZm10X2dldF9wYXR0ZXJuKE51bWJlckZvcm1hdHRlciAkZm9ybWF0dGVyKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogR2V0IGZvcm1hdHRlciBsb2NhbGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuZ2V0bG9jYWxlLnBocAogKiBAcGFyYW0gTnVtYmVyRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHBhcmFtIGludCAkdHlwZSA8cD4KICogWW91IGNhbiBjaG9vc2UgYmV0d2VlbiB2YWxpZCBhbmQgYWN0dWFsIGxvY2FsZSAoCiAqIDxiPkxvY2FsZTo6VkFMSURfTE9DQUxFPC9iPiwKICogPGI+TG9jYWxlOjpBQ1RVQUxfTE9DQUxFPC9iPiwKICogcmVzcGVjdGl2ZWx5KS4gVGhlIGRlZmF1bHQgaXMgdGhlIGFjdHVhbCBsb2NhbGUuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGxvY2FsZSBuYW1lIHVzZWQgdG8gY3JlYXRlIHRoZSBmb3JtYXR0ZXIuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIG51bWZtdF9nZXRfbG9jYWxlKE51bWJlckZvcm1hdHRlciAkZm9ybWF0dGVyLCBpbnQgJHR5cGUgPSAwKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogR2V0IGZvcm1hdHRlcidzIGxhc3QgZXJyb3IgY29kZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9udW1iZXJmb3JtYXR0ZXIuZ2V0ZXJyb3Jjb2RlLnBocAogKiBAcGFyYW0gTnVtYmVyRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHJldHVybiBpbnQgZXJyb3IgY29kZSBmcm9tIGxhc3QgZm9ybWF0dGVyIGNhbGwuCiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIG51bWZtdF9nZXRfZXJyb3JfY29kZShOdW1iZXJGb3JtYXR0ZXIgJGZvcm1hdHRlcik6IGludCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEdldCBmb3JtYXR0ZXIncyBsYXN0IGVycm9yIG1lc3NhZ2UuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbnVtYmVyZm9ybWF0dGVyLmdldGVycm9ybWVzc2FnZS5waHAKICogQHBhcmFtIE51bWJlckZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEByZXR1cm4gc3RyaW5nIGVycm9yIG1lc3NhZ2UgZnJvbSBsYXN0IGZvcm1hdHRlciBjYWxsLgogKi8KI1tQdXJlKHRydWUpXQpmdW5jdGlvbiBudW1mbXRfZ2V0X2Vycm9yX21lc3NhZ2UoTnVtYmVyRm9ybWF0dGVyICRmb3JtYXR0ZXIpOiBzdHJpbmcge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBOb3JtYWxpemVzIHRoZSBpbnB1dCBwcm92aWRlZCBhbmQgcmV0dXJucyB0aGUgbm9ybWFsaXplZCBzdHJpbmcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ub3JtYWxpemVyLm5vcm1hbGl6ZS5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPlRoZSBpbnB1dCBzdHJpbmcgdG8gbm9ybWFsaXplPC9wPgogKiBAcGFyYW0gaW50ICRmb3JtIFtvcHRpb25hbF0gPHA+T25lIG9mIHRoZSBub3JtYWxpemF0aW9uIGZvcm1zLjwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIG5vcm1hbGl6ZWQgc3RyaW5nIG9yIDxiPkZBTFNFPC9iPiBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICovCiNbUHVyZV0KZnVuY3Rpb24gbm9ybWFsaXplcl9ub3JtYWxpemUoc3RyaW5nICRzdHJpbmcsIGludCAkZm9ybSA9IE5vcm1hbGl6ZXI6OkZPUk1fQyk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgc3RyaW5nIGlzIGFscmVhZHkgaW4gdGhlIHNwZWNpZmllZCBub3JtYWxpemF0aW9uCiAqIGZvcm0uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbm9ybWFsaXplci5pc25vcm1hbGl6ZWQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD5UaGUgaW5wdXQgc3RyaW5nIHRvIG5vcm1hbGl6ZTwvcD4KICogQHBhcmFtIGludCAkZm9ybSBbb3B0aW9uYWxdIDxwPgogKiBPbmUgb2YgdGhlIG5vcm1hbGl6YXRpb24gZm9ybXMuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIG5vcm1hbGl6ZWQsIDxiPkZBTFNFPC9iPiBvdGhlcndpc2Ugb3IgaWYgdGhlcmUgYW4gZXJyb3IKICovCiNbUHVyZV0KZnVuY3Rpb24gbm9ybWFsaXplcl9pc19ub3JtYWxpemVkKHN0cmluZyAkc3RyaW5nLCBpbnQgJGZvcm0gPSBOb3JtYWxpemVyOjpGT1JNX0MpOiBib29sIHt9CgovKioKICogR2V0cyB0aGUgZGVmYXVsdCBsb2NhbGUgdmFsdWUgZnJvbSB0aGUgaW50bCBnbG9iYWwgJ2RlZmF1bHRfbG9jYWxlJwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxvY2FsZS1nZXQtZGVmYXVsdC5waHAKICogQHJldHVybiBzdHJpbmcgYSBzdHJpbmcgd2l0aCB0aGUgY3VycmVudCBMb2NhbGUuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGxvY2FsZV9nZXRfZGVmYXVsdCgpOiBzdHJpbmcge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBTZXQgdGhlIGRlZmF1bHQgcnVudGltZSBMb2NhbGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sb2NhbGUtc2V0LWRlZmF1bHQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSA8cD4KICogVGhlIG5ldyBMb2NhbGUgbmFtZS4gQSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCBsb2NhbGVzIGlzCiAqIGF2YWlsYWJsZSBhdCAuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwojW0xhbmd1YWdlQXdhcmUoWyc4LjQnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCmZ1bmN0aW9uIGxvY2FsZV9zZXRfZGVmYXVsdChzdHJpbmcgJGxvY2FsZSkge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBHZXRzIHRoZSBwcmltYXJ5IGxhbmd1YWdlIGZvciB0aGUgaW5wdXQgbG9jYWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLmdldHByaW1hcnlsYW5ndWFnZS5waHAKICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIDxwPgogKiBUaGUgbG9jYWxlIHRvIGV4dHJhY3QgdGhlIHByaW1hcnkgbGFuZ3VhZ2UgY29kZSBmcm9tCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgbGFuZ3VhZ2UgY29kZSBhc3NvY2lhdGVkIHdpdGggdGhlIGxhbmd1YWdlIG9yIDxiPk5VTEw8L2I+IGluIGNhc2Ugb2YgZXJyb3IuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGxvY2FsZV9nZXRfcHJpbWFyeV9sYW5ndWFnZShzdHJpbmcgJGxvY2FsZSk6ID9zdHJpbmcge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBHZXRzIHRoZSBzY3JpcHQgZm9yIHRoZSBpbnB1dCBsb2NhbGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sb2NhbGUuZ2V0c2NyaXB0LnBocAogKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAqIFRoZSBsb2NhbGUgdG8gZXh0cmFjdCB0aGUgc2NyaXB0IGNvZGUgZnJvbQogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIHNjcmlwdCBzdWJ0YWcgZm9yIHRoZSBsb2NhbGUgb3IgPGI+TlVMTDwvYj4gaWYgbm90IHByZXNlbnQKICovCiNbUHVyZV0KZnVuY3Rpb24gbG9jYWxlX2dldF9zY3JpcHQoc3RyaW5nICRsb2NhbGUpOiA/c3RyaW5nIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogR2V0cyB0aGUgcmVnaW9uIGZvciB0aGUgaW5wdXQgbG9jYWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLmdldHJlZ2lvbi5waHAKICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIDxwPgogKiBUaGUgbG9jYWxlIHRvIGV4dHJhY3QgdGhlIHJlZ2lvbiBjb2RlIGZyb20KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSByZWdpb24gc3VidGFnIGZvciB0aGUgbG9jYWxlIG9yIDxiPk5VTEw8L2I+IGlmIG5vdCBwcmVzZW50CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGxvY2FsZV9nZXRfcmVnaW9uKHN0cmluZyAkbG9jYWxlKTogP3N0cmluZyB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEdldHMgdGhlIGtleXdvcmRzIGZvciB0aGUgaW5wdXQgbG9jYWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLmdldGtleXdvcmRzLnBocAogKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAqIFRoZSBsb2NhbGUgdG8gZXh0cmFjdCB0aGUga2V5d29yZHMgZnJvbQogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2V8bnVsbCBBc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIHRoZSBrZXl3b3JkLXZhbHVlIHBhaXJzIGZvciB0aGlzIGxvY2FsZQogKi8KI1tQdXJlXQpmdW5jdGlvbiBsb2NhbGVfZ2V0X2tleXdvcmRzKHN0cmluZyAkbG9jYWxlKTogYXJyYXl8ZmFsc2V8bnVsbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFJldHVybnMgYW4gYXBwcm9wcmlhdGVseSBsb2NhbGl6ZWQgZGlzcGxheSBuYW1lIGZvciBzY3JpcHQgb2YgdGhlIGlucHV0IGxvY2FsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xvY2FsZS5nZXRkaXNwbGF5c2NyaXB0LnBocAogKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAqIFRoZSBsb2NhbGUgdG8gcmV0dXJuIGEgZGlzcGxheSBzY3JpcHQgZm9yCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRkaXNwbGF5TG9jYWxlIDxwPgogKiBPcHRpb25hbCBmb3JtYXQgbG9jYWxlIHRvIHVzZSB0byBkaXNwbGF5IHRoZSBzY3JpcHQgbmFtZQogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIERpc3BsYXkgbmFtZSBvZiB0aGUgc2NyaXB0IGZvciB0aGUgJGxvY2FsZSBpbiB0aGUgZm9ybWF0IGFwcHJvcHJpYXRlIGZvcgogKiAkaW5fbG9jYWxlLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBsb2NhbGVfZ2V0X2Rpc3BsYXlfc2NyaXB0KAogICAgc3RyaW5nICRsb2NhbGUsCiAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNS42JyldID9zdHJpbmcgJGRpc3BsYXlMb2NhbGUsCiAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMCcpXSA/c3RyaW5nICRkaXNwbGF5TG9jYWxlID0gbnVsbAopOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXR1cm5zIGFuIGFwcHJvcHJpYXRlbHkgbG9jYWxpemVkIGRpc3BsYXkgbmFtZSBmb3IgcmVnaW9uIG9mIHRoZSBpbnB1dCBsb2NhbGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sb2NhbGUuZ2V0ZGlzcGxheXJlZ2lvbi5waHAKICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIDxwPgogKiBUaGUgbG9jYWxlIHRvIHJldHVybiBhIGRpc3BsYXkgcmVnaW9uIGZvci4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGRpc3BsYXlMb2NhbGUgPHA+CiAqIE9wdGlvbmFsIGZvcm1hdCBsb2NhbGUgdG8gdXNlIHRvIGRpc3BsYXkgdGhlIHJlZ2lvbiBuYW1lCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgZGlzcGxheSBuYW1lIG9mIHRoZSByZWdpb24gZm9yIHRoZSAkbG9jYWxlIGluIHRoZSBmb3JtYXQgYXBwcm9wcmlhdGUgZm9yCiAqICRpbl9sb2NhbGUuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGxvY2FsZV9nZXRfZGlzcGxheV9yZWdpb24oCiAgICBzdHJpbmcgJGxvY2FsZSwKICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc1LjYnKV0gP3N0cmluZyAkZGlzcGxheUxvY2FsZSwKICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4wJyldID9zdHJpbmcgJGRpc3BsYXlMb2NhbGUgPSBudWxsCik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFJldHVybnMgYW4gYXBwcm9wcmlhdGVseSBsb2NhbGl6ZWQgZGlzcGxheSBuYW1lIGZvciB0aGUgaW5wdXQgbG9jYWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLmdldGRpc3BsYXluYW1lLnBocAogKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAqIFRoZSBsb2NhbGUgdG8gcmV0dXJuIGEgZGlzcGxheSBuYW1lIGZvci4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGRpc3BsYXlMb2NhbGUgPHA+b3B0aW9uYWwgZm9ybWF0IGxvY2FsZTwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgRGlzcGxheSBuYW1lIG9mIHRoZSBsb2NhbGUgaW4gdGhlIGZvcm1hdCBhcHByb3ByaWF0ZSBmb3IgJGluX2xvY2FsZS4KICovCiNbUHVyZV0KZnVuY3Rpb24gbG9jYWxlX2dldF9kaXNwbGF5X25hbWUoCiAgICBzdHJpbmcgJGxvY2FsZSwKICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc1LjYnKV0gP3N0cmluZyAkZGlzcGxheUxvY2FsZSwKICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4wJyldID9zdHJpbmcgJGRpc3BsYXlMb2NhbGUgPSBudWxsCik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFJldHVybnMgYW4gYXBwcm9wcmlhdGVseSBsb2NhbGl6ZWQgZGlzcGxheSBuYW1lIGZvciBsYW5ndWFnZSBvZiB0aGUgaW5wdXRsb2NhbGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sb2NhbGUuZ2V0ZGlzcGxheWxhbmd1YWdlLnBocAogKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAqIFRoZSBsb2NhbGUgdG8gcmV0dXJuIGEgZGlzcGxheSBsYW5ndWFnZSBmb3IKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGRpc3BsYXlMb2NhbGUgPHA+CiAqIE9wdGlvbmFsIGZvcm1hdCBsb2NhbGUgdG8gdXNlIHRvIGRpc3BsYXkgdGhlIGxhbmd1YWdlIG5hbWUKICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBkaXNwbGF5IG5hbWUgb2YgdGhlIGxhbmd1YWdlIGZvciB0aGUgJGxvY2FsZSBpbiB0aGUgZm9ybWF0IGFwcHJvcHJpYXRlIGZvcgogKiAkaW5fbG9jYWxlLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBsb2NhbGVfZ2V0X2Rpc3BsYXlfbGFuZ3VhZ2UoCiAgICBzdHJpbmcgJGxvY2FsZSwKICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc1LjYnKV0gP3N0cmluZyAkZGlzcGxheUxvY2FsZSwKICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4wJyldID9zdHJpbmcgJGRpc3BsYXlMb2NhbGUgPSBudWxsCik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFJldHVybnMgYW4gYXBwcm9wcmlhdGVseSBsb2NhbGl6ZWQgZGlzcGxheSBuYW1lIGZvciB2YXJpYW50cyBvZiB0aGUgaW5wdXQgbG9jYWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLmdldGRpc3BsYXl2YXJpYW50LnBocAogKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAqIFRoZSBsb2NhbGUgdG8gcmV0dXJuIGEgZGlzcGxheSB2YXJpYW50IGZvcgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZGlzcGxheUxvY2FsZSA8cD4KICogT3B0aW9uYWwgZm9ybWF0IGxvY2FsZSB0byB1c2UgdG8gZGlzcGxheSB0aGUgdmFyaWFudCBuYW1lCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgRGlzcGxheSBuYW1lIG9mIHRoZSB2YXJpYW50IGZvciB0aGUgJGxvY2FsZSBpbiB0aGUgZm9ybWF0IGFwcHJvcHJpYXRlIGZvcgogKiAkaW5fbG9jYWxlLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBsb2NhbGVfZ2V0X2Rpc3BsYXlfdmFyaWFudCgKICAgIHN0cmluZyAkbG9jYWxlLAogICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzUuNicpXSA/c3RyaW5nICRkaXNwbGF5TG9jYWxlLAogICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjAnKV0gP3N0cmluZyAkZGlzcGxheUxvY2FsZSA9IG51bGwKKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogUmV0dXJucyBhIGNvcnJlY3RseSBvcmRlcmVkIGFuZCBkZWxpbWl0ZWQgbG9jYWxlIElECiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLmNvbXBvc2Vsb2NhbGUucGhwCiAqIEBwYXJhbSBzdHJpbmdbXSAkc3VidGFncyA8cD4KICogYW4gYXJyYXkgY29udGFpbmluZyBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzLCB3aGVyZSB0aGUga2V5cyBpZGVudGlmeQogKiB0aGUgcGFydGljdWxhciBsb2NhbGUgSUQgc3VidGFncywgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBhc3NvY2lhdGVkCiAqIHN1YnRhZyB2YWx1ZXMuCiAqIDxwPgogKiBUaGUgJ3ZhcmlhbnQnIGFuZCAncHJpdmF0ZScgc3VidGFncyBjYW4gdGFrZSBtYXhpbXVtIDE1IHZhbHVlcwogKiB3aGVyZWFzICdleHRsYW5nJyBjYW4gdGFrZSBtYXhpbXVtIDMgdmFsdWVzLmUuZy4gVmFyaWFudHMgYXJlIGFsbG93ZWQKICogd2l0aCB0aGUgc3VmZml4IHJhbmdpbmcgZnJvbSAwLTE0LiBIZW5jZSB0aGUga2V5cyBmb3IgdGhlIGlucHV0IGFycmF5CiAqIGNhbiBiZSB2YXJpYW50MCwgdmFyaWFudDEsIC4uLix2YXJpYW50MTQuIEluIHRoZSByZXR1cm5lZCBsb2NhbGUgaWQsCiAqIHRoZSBzdWJ0YWcgaXMgb3JkZXJlZCBieSBzdWZmaXggcmVzdWx0aW5nIGluIHZhcmlhbnQwIGZvbGxvd2VkIGJ5CiAqIHZhcmlhbnQxIGZvbGxvd2VkIGJ5IHZhcmlhbnQyIGFuZCBzbyBvbi4KICogPC9wPgogKiA8cD4KICogVGhlICd2YXJpYW50JywgJ3ByaXZhdGUnIGFuZCAnZXh0bGFuZycgbXVsdGlwbGUgdmFsdWVzIGNhbiBiZSBzcGVjaWZpZWQgYm90aAogKiBhcyBhcnJheSB1bmRlciBzcGVjaWZpYyBrZXkgKGUuZy4gJ3ZhcmlhbnQnKSBhbmQgYXMgbXVsdGlwbGUgbnVtYmVyZWQga2V5cwogKiAoZS5nLiAndmFyaWFudDAnLCAndmFyaWFudDEnLCBldGMuKS4KICogPC9wPgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBjb3JyZXNwb25kaW5nIGxvY2FsZSBpZGVudGlmaWVyLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBsb2NhbGVfY29tcG9zZShhcnJheSAkc3VidGFncyk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFJldHVybnMgYSBrZXktdmFsdWUgYXJyYXkgb2YgbG9jYWxlIElEIHN1YnRhZyBlbGVtZW50cy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sb2NhbGUucGFyc2Vsb2NhbGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSA8cD4KICogVGhlIGxvY2FsZSB0byBleHRyYWN0IHRoZSBzdWJ0YWcgYXJyYXkgZnJvbS4gTm90ZTogVGhlICd2YXJpYW50JyBhbmQKICogJ3ByaXZhdGUnIHN1YnRhZ3MgY2FuIHRha2UgbWF4aW11bSAxNSB2YWx1ZXMgd2hlcmVhcyAnZXh0bGFuZycgY2FuIHRha2UKICogbWF4aW11bSAzIHZhbHVlcy4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ1tdfG51bGwgYW4gYXJyYXkgY29udGFpbmluZyBhIGxpc3Qgb2Yga2V5LXZhbHVlIHBhaXJzLCB3aGVyZSB0aGUga2V5cwogKiBpZGVudGlmeSB0aGUgcGFydGljdWxhciBsb2NhbGUgSUQgc3VidGFncywgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZQogKiBhc3NvY2lhdGVkIHN1YnRhZyB2YWx1ZXMuIFRoZSBhcnJheSB3aWxsIGJlIG9yZGVyZWQgYXMgdGhlIGxvY2FsZSBpZAogKiBzdWJ0YWdzIGUuZy4gaW4gdGhlIGxvY2FsZSBpZCBpZiB2YXJpYW50cyBhcmUgJy12YXJYLXZhclktdmFyWicgdGhlbiB0aGUKICogcmV0dXJuZWQgYXJyYXkgd2lsbCBoYXZlIHZhcmlhbnQwPSZndDt2YXJYICwgdmFyaWFudDE9Jmd0O3ZhclkgLAogKiB2YXJpYW50Mj0mZ3Q7dmFyWgogKi8KI1tQdXJlXQpmdW5jdGlvbiBsb2NhbGVfcGFyc2Uoc3RyaW5nICRsb2NhbGUpOiA/YXJyYXkge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBHZXRzIHRoZSB2YXJpYW50cyBmb3IgdGhlIGlucHV0IGxvY2FsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xvY2FsZS5nZXRhbGx2YXJpYW50cy5waHAKICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIDxwPgogKiBUaGUgbG9jYWxlIHRvIGV4dHJhY3QgdGhlIHZhcmlhbnRzIGZyb20KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fG51bGwgVGhlIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgYWxsIHZhcmlhbnRzIHN1YnRhZyBmb3IgdGhlIGxvY2FsZQogKiBvciA8Yj5OVUxMPC9iPiBpZiBub3QgcHJlc2VudAogKi8KI1tQdXJlXQpmdW5jdGlvbiBsb2NhbGVfZ2V0X2FsbF92YXJpYW50cyhzdHJpbmcgJGxvY2FsZSk6ID9hcnJheSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIENoZWNrcyBpZiBhIGxhbmd1YWdlIHRhZyBmaWx0ZXIgbWF0Y2hlcyB3aXRoIGxvY2FsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xvY2FsZS5maWx0ZXJtYXRjaGVzLnBocAogKiBAcGFyYW0gc3RyaW5nICRsYW5ndWFnZVRhZyA8cD4KICogVGhlIGxhbmd1YWdlIHRhZyB0byBjaGVjawogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSA8cD4KICogVGhlIGxhbmd1YWdlIHJhbmdlIHRvIGNoZWNrIGFnYWluc3QKICogPC9wPgogKiBAcGFyYW0gYm9vbCAkY2Fub25pY2FsaXplIDxwPgogKiBJZiB0cnVlLCB0aGUgYXJndW1lbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIGNhbm9uaWNhbCBmb3JtIGJlZm9yZQogKiBtYXRjaGluZy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2x8bnVsbCA8Yj5UUlVFPC9iPiBpZiAkbG9jYWxlIG1hdGNoZXMgJGxhbmd0YWcgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICovCiNbUHVyZV0KZnVuY3Rpb24gbG9jYWxlX2ZpbHRlcl9tYXRjaGVzKAogICAgc3RyaW5nICRsYW5ndWFnZVRhZywKICAgIHN0cmluZyAkbG9jYWxlLAogICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzUuNicpXSBib29sICRjYW5vbmljYWxpemUsCiAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMCcpXSBib29sICRjYW5vbmljYWxpemUgPSBmYWxzZQopOiA/Ym9vbCB7fQoKLyoqCiAqIENhbm9uaWNhbGl6ZSB0aGUgbG9jYWxlIHN0cmluZwogKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUKICoKICogQHJldHVybiBudWxsfHN0cmluZwogKi8KI1tQdXJlXQpmdW5jdGlvbiBsb2NhbGVfY2Fub25pY2FsaXplKHN0cmluZyAkbG9jYWxlKTogP3N0cmluZyB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFNlYXJjaGVzIHRoZSBsYW5ndWFnZSB0YWcgbGlzdCBmb3IgdGhlIGJlc3QgbWF0Y2ggdG8gdGhlIGxhbmd1YWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbG9jYWxlLmxvb2t1cC5waHAKICogQHBhcmFtIHN0cmluZ1tdICRsYW5ndWFnZVRhZyA8cD4KICogQW4gYXJyYXkgY29udGFpbmluZyBhIGxpc3Qgb2YgbGFuZ3VhZ2UgdGFncyB0byBjb21wYXJlIHRvCiAqIDxpPmxvY2FsZTwvaT4uIE1heGltdW0gMTAwIGl0ZW1zIGFsbG93ZWQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIDxwPgogKiBUaGUgbG9jYWxlIHRvIHVzZSBhcyB0aGUgbGFuZ3VhZ2UgcmFuZ2Ugd2hlbiBtYXRjaGluZy4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkY2Fub25pY2FsaXplIDxwPgogKiBJZiB0cnVlLCB0aGUgYXJndW1lbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIGNhbm9uaWNhbCBmb3JtIGJlZm9yZQogKiBtYXRjaGluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGRlZmF1bHRMb2NhbGUgPHA+CiAqIFRoZSBsb2NhbGUgdG8gdXNlIGlmIG5vIG1hdGNoIGlzIGZvdW5kLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIGNsb3Nlc3QgbWF0Y2hpbmcgbGFuZ3VhZ2UgdGFnIG9yIGRlZmF1bHQgdmFsdWUuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGxvY2FsZV9sb29rdXAoCiAgICBhcnJheSAkbGFuZ3VhZ2VUYWcsCiAgICBzdHJpbmcgJGxvY2FsZSwKICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc1LjYnKV0gYm9vbCAkY2Fub25pY2FsaXplLAogICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzUuNicpXSA/c3RyaW5nICRkZWZhdWx0TG9jYWxlLAogICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjAnKV0gYm9vbCAkY2Fub25pY2FsaXplID0gZmFsc2UsCiAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMCcpXSA/c3RyaW5nICRkZWZhdWx0TG9jYWxlID0gbnVsbCwKKTogP3N0cmluZyB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFRyaWVzIHRvIGZpbmQgb3V0IGJlc3QgYXZhaWxhYmxlIGxvY2FsZSBiYXNlZCBvbiBIVFRQICJBY2NlcHQtTGFuZ3VhZ2UiIGhlYWRlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xvY2FsZS5hY2NlcHRmcm9taHR0cC5waHAKICogQHBhcmFtIHN0cmluZyAkaGVhZGVyIDxwPgogKiBUaGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlICJBY2NlcHQtTGFuZ3VhZ2UiIGhlYWRlciBhY2NvcmRpbmcgdG8gZm9ybWF0IGluIFJGQyAyNjE2LgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBjb3JyZXNwb25kaW5nIGxvY2FsZSBpZGVudGlmaWVyLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBsb2NhbGVfYWNjZXB0X2Zyb21faHR0cChzdHJpbmcgJGhlYWRlcik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIENvbnN0cnVjdHMgYSBuZXcgbWVzc2FnZSBmb3JtYXR0ZXIKICogQHBhcmFtIHN0cmluZyAkbG9jYWxlCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4KICogQHJldHVybiBNZXNzYWdlRm9ybWF0dGVyfG51bGwKICovCiNbUHVyZV0KZnVuY3Rpb24gbXNnZm10X2NyZWF0ZShzdHJpbmcgJGxvY2FsZSwgc3RyaW5nICRwYXR0ZXJuKTogP01lc3NhZ2VGb3JtYXR0ZXIge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBGb3JtYXQgdGhlIG1lc3NhZ2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZXNzYWdlZm9ybWF0dGVyLmZvcm1hdC5waHAKICogQHBhcmFtIE1lc3NhZ2VGb3JtYXR0ZXIgJGZvcm1hdHRlcgogKiBAcGFyYW0gYXJyYXkgJHZhbHVlcyA8cD4KICogQXJndW1lbnRzIHRvIGluc2VydCBpbnRvIHRoZSBmb3JtYXQgc3RyaW5nCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGZvcm1hdHRlZCBzdHJpbmcsIG9yIDxiPkZBTFNFPC9iPiBpZiBhbiBlcnJvciBvY2N1cnJlZAogKi8KI1tQdXJlXQpmdW5jdGlvbiBtc2dmbXRfZm9ybWF0KE1lc3NhZ2VGb3JtYXR0ZXIgJGZvcm1hdHRlciwgYXJyYXkgJHZhbHVlcyk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFF1aWNrIGZvcm1hdCBtZXNzYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVzc2FnZWZvcm1hdHRlci5mb3JtYXRtZXNzYWdlLnBocAogKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAqIFRoZSBsb2NhbGUgdG8gdXNlIGZvciBmb3JtYXR0aW5nIGxvY2FsZS1kZXBlbmRlbnQgcGFydHMKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIDxwPgogKiBUaGUgcGF0dGVybiBzdHJpbmcgdG8gaW5zZXJ0IHRoaW5ncyBpbnRvLgogKiBUaGUgcGF0dGVybiB1c2VzIGFuICdhcG9zdHJvcGhlLWZyaWVuZGx5JyBzeW50YXg7IGl0IGlzIHJ1biB0aHJvdWdoCiAqIHVtc2dfYXV0b1F1b3RlQXBvc3Ryb3BoZQogKiBiZWZvcmUgYmVpbmcgaW50ZXJwcmV0ZWQuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICR2YWx1ZXMgPHA+CiAqIFRoZSBhcnJheSBvZiB2YWx1ZXMgdG8gaW5zZXJ0IGludG8gdGhlIGZvcm1hdCBzdHJpbmcKICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgZm9ybWF0dGVkIHBhdHRlcm4gc3RyaW5nIG9yIDxiPkZBTFNFPC9iPiBpZiBhbiBlcnJvciBvY2N1cnJlZAogKi8KI1tQdXJlXQpmdW5jdGlvbiBtc2dmbXRfZm9ybWF0X21lc3NhZ2Uoc3RyaW5nICRsb2NhbGUsIHN0cmluZyAkcGF0dGVybiwgYXJyYXkgJHZhbHVlcyk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFBhcnNlIGlucHV0IHN0cmluZyBhY2NvcmRpbmcgdG8gcGF0dGVybgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lc3NhZ2Vmb3JtYXR0ZXIucGFyc2UucGhwCiAqIEBwYXJhbSBNZXNzYWdlRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogKiBUaGUgc3RyaW5nIHRvIHBhcnNlCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBbiBhcnJheSBjb250YWluaW5nIHRoZSBpdGVtcyBleHRyYWN0ZWQsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvcgogKi8KI1tQdXJlXQpmdW5jdGlvbiBtc2dmbXRfcGFyc2UoTWVzc2FnZUZvcm1hdHRlciAkZm9ybWF0dGVyLCBzdHJpbmcgJHN0cmluZyk6IGFycmF5fGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogUXVpY2sgcGFyc2UgaW5wdXQgc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVzc2FnZWZvcm1hdHRlci5wYXJzZW1lc3NhZ2UucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSA8cD4KICogVGhlIGxvY2FsZSB0byB1c2UgZm9yIHBhcnNpbmcgbG9jYWxlLWRlcGVuZGVudCBwYXJ0cwogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gPHA+CiAqIFRoZSBwYXR0ZXJuIHdpdGggd2hpY2ggdG8gcGFyc2UgdGhlIDxpPnZhbHVlPC9pPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIDxwPgogKiBUaGUgc3RyaW5nIHRvIHBhcnNlLCBjb25mb3JtaW5nIHRvIHRoZSA8aT5wYXR0ZXJuPC9pPi4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFuIGFycmF5IGNvbnRhaW5pbmcgaXRlbXMgZXh0cmFjdGVkLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IKICovCiNbUHVyZV0KZnVuY3Rpb24gbXNnZm10X3BhcnNlX21lc3NhZ2Uoc3RyaW5nICRsb2NhbGUsIHN0cmluZyAkcGF0dGVybiwgc3RyaW5nICRtZXNzYWdlKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBTZXQgdGhlIHBhdHRlcm4gdXNlZCBieSB0aGUgZm9ybWF0dGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVzc2FnZWZvcm1hdHRlci5zZXRwYXR0ZXJuLnBocAogKiBAcGFyYW0gTWVzc2FnZUZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gPHA+CiAqIFRoZSBwYXR0ZXJuIHN0cmluZyB0byB1c2UgaW4gdGhpcyBtZXNzYWdlIGZvcm1hdHRlci4KICogVGhlIHBhdHRlcm4gdXNlcyBhbiAnYXBvc3Ryb3BoZS1mcmllbmRseScgc3ludGF4OyBpdCBpcyBydW4gdGhyb3VnaAogKiB1bXNnX2F1dG9RdW90ZUFwb3N0cm9waGUKICogYmVmb3JlIGJlaW5nIGludGVycHJldGVkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gbXNnZm10X3NldF9wYXR0ZXJuKE1lc3NhZ2VGb3JtYXR0ZXIgJGZvcm1hdHRlciwgc3RyaW5nICRwYXR0ZXJuKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEdldCB0aGUgcGF0dGVybiB1c2VkIGJ5IHRoZSBmb3JtYXR0ZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZXNzYWdlZm9ybWF0dGVyLmdldHBhdHRlcm4ucGhwCiAqIEBwYXJhbSBNZXNzYWdlRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIHBhdHRlcm4gc3RyaW5nIGZvciB0aGlzIG1lc3NhZ2UgZm9ybWF0dGVyCiAqLwojW1B1cmVdCmZ1bmN0aW9uIG1zZ2ZtdF9nZXRfcGF0dGVybihNZXNzYWdlRm9ybWF0dGVyICRmb3JtYXR0ZXIpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBHZXQgdGhlIGxvY2FsZSBmb3Igd2hpY2ggdGhlIGZvcm1hdHRlciB3YXMgY3JlYXRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZXNzYWdlZm9ybWF0dGVyLmdldGxvY2FsZS5waHAKICogQHBhcmFtIE1lc3NhZ2VGb3JtYXR0ZXIgJGZvcm1hdHRlcgogKiBAcmV0dXJuIHN0cmluZyBUaGUgbG9jYWxlIG5hbWUKICovCiNbUHVyZV0KZnVuY3Rpb24gbXNnZm10X2dldF9sb2NhbGUoTWVzc2FnZUZvcm1hdHRlciAkZm9ybWF0dGVyKTogc3RyaW5nIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogR2V0IHRoZSBlcnJvciBjb2RlIGZyb20gbGFzdCBvcGVyYXRpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZXNzYWdlZm9ybWF0dGVyLmdldGVycm9yY29kZS5waHAKICogQHBhcmFtIE1lc3NhZ2VGb3JtYXR0ZXIgJGZvcm1hdHRlcgogKiBAcmV0dXJuIGludCBUaGUgZXJyb3IgY29kZSwgb25lIG9mIFVFcnJvckNvZGUgdmFsdWVzLiBJbml0aWFsIHZhbHVlIGlzIFVfWkVST19FUlJPUi4KICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gbXNnZm10X2dldF9lcnJvcl9jb2RlKE1lc3NhZ2VGb3JtYXR0ZXIgJGZvcm1hdHRlcik6IGludCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEdldCB0aGUgZXJyb3IgdGV4dCBmcm9tIHRoZSBsYXN0IG9wZXJhdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lc3NhZ2Vmb3JtYXR0ZXIuZ2V0ZXJyb3JtZXNzYWdlLnBocAogKiBAcGFyYW0gTWVzc2FnZUZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEByZXR1cm4gc3RyaW5nIERlc2NyaXB0aW9uIG9mIHRoZSBsYXN0IGVycm9yLgogKi8KI1tQdXJlKHRydWUpXQpmdW5jdGlvbiBtc2dmbXRfZ2V0X2Vycm9yX21lc3NhZ2UoTWVzc2FnZUZvcm1hdHRlciAkZm9ybWF0dGVyKTogc3RyaW5nIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogQ3JlYXRlIGEgZGF0ZSBmb3JtYXR0ZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5jcmVhdGUucGhwCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbG9jYWxlIDxwPgogKiBMb2NhbGUgdG8gdXNlIHdoZW4gZm9ybWF0dGluZyBvciBwYXJzaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGRhdGVUeXBlIDxwPgogKiBEYXRlIHR5cGUgdG8gdXNlICg8Yj5ub25lPC9iPiwKICogPGI+c2hvcnQ8L2I+LCA8Yj5tZWRpdW08L2I+LAogKiA8Yj5sb25nPC9iPiwgPGI+ZnVsbDwvYj4pLgogKiBUaGlzIGlzIG9uZSBvZiB0aGUKICogSW50bERhdGVGb3JtYXR0ZXIgY29uc3RhbnRzLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHRpbWVUeXBlIDxwPgogKiBUaW1lIHR5cGUgdG8gdXNlICg8Yj5ub25lPC9iPiwKICogPGI+c2hvcnQ8L2I+LCA8Yj5tZWRpdW08L2I+LAogKiA8Yj5sb25nPC9iPiwgPGI+ZnVsbDwvYj4pLgogKiBUaGlzIGlzIG9uZSBvZiB0aGUKICogSW50bERhdGVGb3JtYXR0ZXIgY29uc3RhbnRzLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdGltZXpvbmUgW29wdGlvbmFsXSA8cD4KICogVGltZSB6b25lIElELCBkZWZhdWx0IGlzIHN5c3RlbSBkZWZhdWx0LgogKiA8L3A+CiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXJ8aW50fG51bGwgJGNhbGVuZGFyIFtvcHRpb25hbF0gPHA+CiAqIENhbGVuZGFyIHRvIHVzZSBmb3IgZm9ybWF0dGluZyBvciBwYXJzaW5nOyBkZWZhdWx0IGlzIEdyZWdvcmlhbi4KICogVGhpcyBpcyBvbmUgb2YgdGhlCiAqIEludGxEYXRlRm9ybWF0dGVyIGNhbGVuZGFyIGNvbnN0YW50cy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHBhdHRlcm4gW29wdGlvbmFsXSA8cD4KICogT3B0aW9uYWwgcGF0dGVybiB0byB1c2Ugd2hlbiBmb3JtYXR0aW5nIG9yIHBhcnNpbmcuCiAqIFBvc3NpYmxlIHBhdHRlcm5zIGFyZSBkb2N1bWVudGVkIGF0IGh0dHA6Ly91c2VyZ3VpZGUuaWN1LXByb2plY3Qub3JnL2Zvcm1hdHBhcnNlL2RhdGV0aW1lLgogKiA8L3A+CiAqIEByZXR1cm4gSW50bERhdGVGb3JtYXR0ZXJ8bnVsbAogKi8KI1tQdXJlXQpmdW5jdGlvbiBkYXRlZm10X2NyZWF0ZSgKICAgID9zdHJpbmcgJGxvY2FsZSwKICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc4LjAnKV0gaW50ICRkYXRlVHlwZSwKICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4xJyldIGludCAkZGF0ZVR5cGUgPSAwLAogICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzguMCcpXSBpbnQgJHRpbWVUeXBlLAogICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjEnKV0gaW50ICR0aW1lVHlwZSA9IDAsCiAgICAkdGltZXpvbmUgPSBudWxsLAogICAgSW50bENhbGVuZGFyfGludHxudWxsICRjYWxlbmRhciA9IG51bGwsCiAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnc3RyaW5nJyldICRwYXR0ZXJuID0gbnVsbAopOiA/SW50bERhdGVGb3JtYXR0ZXIge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBHZXQgdGhlIGRhdGV0eXBlIHVzZWQgZm9yIHRoZSBJbnRsRGF0ZUZvcm1hdHRlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxkYXRlZm9ybWF0dGVyLmdldGRhdGV0eXBlLnBocAogKiBAcGFyYW0gSW50bERhdGVGb3JtYXR0ZXIgJGZvcm1hdHRlcgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgY3VycmVudCBkYXRlIHR5cGUgdmFsdWUgb2YgdGhlIGZvcm1hdHRlci4KICovCiNbUHVyZV0KZnVuY3Rpb24gZGF0ZWZtdF9nZXRfZGF0ZXR5cGUoSW50bERhdGVGb3JtYXR0ZXIgJGZvcm1hdHRlcik6IGludHxmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEdldCB0aGUgdGltZXR5cGUgdXNlZCBmb3IgdGhlIEludGxEYXRlRm9ybWF0dGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuZ2V0dGltZXR5cGUucGhwCiAqIEBwYXJhbSBJbnRsRGF0ZUZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBjdXJyZW50IGRhdGUgdHlwZSB2YWx1ZSBvZiB0aGUgZm9ybWF0dGVyLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBkYXRlZm10X2dldF90aW1ldHlwZShJbnRsRGF0ZUZvcm1hdHRlciAkZm9ybWF0dGVyKTogaW50fGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogR2V0IHRoZSBjYWxlbmRhciB0eXBlIHVzZWQgZm9yIHRoZSBJbnRsRGF0ZUZvcm1hdHRlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxkYXRlZm9ybWF0dGVyLmdldGNhbGVuZGFyLnBocAogKiBAcGFyYW0gSW50bERhdGVGb3JtYXR0ZXIgJGZvcm1hdHRlcgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgY2FsZW5kYXIgYmVpbmcgdXNlZCBieSB0aGUgZm9ybWF0dGVyLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBkYXRlZm10X2dldF9jYWxlbmRhcihJbnRsRGF0ZUZvcm1hdHRlciAkZm9ybWF0dGVyKTogaW50fGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogc2V0cyB0aGUgY2FsZW5kYXIgdXNlZCB0byB0aGUgYXBwcm9wcmlhdGUgY2FsZW5kYXIsIHdoaWNoIG11c3QgYmUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5zZXRjYWxlbmRhci5waHAKICogQHBhcmFtIEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIgJG1mCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXJ8aW50fG51bGwgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgdG8gdXNlLgogKiBEZWZhdWx0IGlzIDxiPkludGxEYXRlRm9ybWF0dGVyOjpHUkVHT1JJQU48L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZGF0ZWZtdF9zZXRfY2FsZW5kYXIoSW50bERhdGVGb3JtYXR0ZXIgJGZvcm1hdHRlciwgSW50bENhbGVuZGFyfGludHxudWxsICRjYWxlbmRhcik6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBHZXQgdGhlIGxvY2FsZSB1c2VkIGJ5IGZvcm1hdHRlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxkYXRlZm9ybWF0dGVyLmdldGxvY2FsZS5waHAKICogQHBhcmFtIEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHBhcmFtIGludCAkdHlwZSBbb3B0aW9uYWxdCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBsb2NhbGUgb2YgdGhpcyBmb3JtYXR0ZXIgb3IgJ2ZhbHNlJyBpZiBlcnJvcgogKi8KI1tQdXJlXQpmdW5jdGlvbiBkYXRlZm10X2dldF9sb2NhbGUoCiAgICBJbnRsRGF0ZUZvcm1hdHRlciAkZm9ybWF0dGVyLAogICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gaW50ICR0eXBlID0gVUxPQ19BQ1RVQUxfTE9DQUxFCik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEdldCB0aGUgdGltZXpvbmUtaWQgdXNlZCBmb3IgdGhlIEludGxEYXRlRm9ybWF0dGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuZ2V0dGltZXpvbmVpZC5waHAKICogQHBhcmFtIEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHJldHVybiBzdHJpbmd8ZmFsc2UgSUQgc3RyaW5nIGZvciB0aGUgdGltZSB6b25lIHVzZWQgYnkgdGhpcyBmb3JtYXR0ZXIuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGRhdGVmbXRfZ2V0X3RpbWV6b25lX2lkKEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMCk8YnIvPgogKiBHZXQgY29weSBvZiBmb3JtYXR0ZXIncyBjYWxlbmRhciBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuZ2V0Y2FsZW5kYXJvYmplY3QucGhwCiAqIEBwYXJhbSBJbnRsRGF0ZUZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEByZXR1cm4gSW50bENhbGVuZGFyfGZhbHNlfG51bGwgQSBjb3B5IG9mIHRoZSBpbnRlcm5hbCBjYWxlbmRhciBvYmplY3QgdXNlZCBieSB0aGlzIGZvcm1hdHRlci4KICovCiNbUHVyZV0KZnVuY3Rpb24gZGF0ZWZtdF9nZXRfY2FsZW5kYXJfb2JqZWN0KEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIpOiBJbnRsQ2FsZW5kYXJ8ZmFsc2V8bnVsbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjUuMCwgUEVDTCBpbnRsICZndDs9IDMuMC4wKTxici8+CiAqICBHZXQgZm9ybWF0dGVyJ3MgdGltZXpvbmUKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuZ2V0dGltZXpvbmUucGhwCiAqIEBwYXJhbSBJbnRsRGF0ZUZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEByZXR1cm4gSW50bFRpbWVab25lfGZhbHNlIFRoZSBhc3NvY2lhdGVkIEludGxUaW1lWm9uZSBvYmplY3Qgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICovCiNbUHVyZV0KZnVuY3Rpb24gZGF0ZWZtdF9nZXRfdGltZXpvbmUoSW50bERhdGVGb3JtYXR0ZXIgJGZvcm1hdHRlcik6IEludGxUaW1lWm9uZXxmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFNldHMgdGhlIHRpbWUgem9uZSB0byB1c2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5zZXR0aW1lem9uZWlkLnBocAogKiBAcGFyYW0gTWVzc2FnZUZvcm1hdHRlciAkbWYKICogQHBhcmFtIHN0cmluZyAkem9uZSA8cD4KICogVGhlIHRpbWUgem9uZSBJRCBzdHJpbmcgb2YgdGhlIHRpbWUgem9uZSB0byB1c2UuCiAqIElmIDxiPk5VTEw8L2I+IG9yIHRoZSBlbXB0eSBzdHJpbmcsIHRoZSBkZWZhdWx0IHRpbWUgem9uZSBmb3IgdGhlIHJ1bnRpbWUgaXMgdXNlZC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogQHJlbW92ZWQgNy4wCiAqIEBzZWUgZGF0ZWZtdF9zZXRfdGltZXpvbmUoKQogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAiZGF0ZWZtdF9zZXRfdGltZXpvbmUoJXBhcmFtZXRlcnNMaXN0JSkiLCBzaW5jZTogIjUuNSIpXQpmdW5jdGlvbiBkYXRlZm10X3NldF90aW1lem9uZV9pZChNZXNzYWdlRm9ybWF0dGVyICRtZiwgJHpvbmUpIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuNS4wLCBQRUNMIGludGwgJmd0Oz0gMy4wLjApPGJyLz4KICogU2V0cyBmb3JtYXR0ZXIncyB0aW1lem9uZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxkYXRlZm9ybWF0dGVyLnNldHRpbWV6b25lLnBocAogKiBAcGFyYW0gSW50bERhdGVGb3JtYXR0ZXIgJGZvcm1hdHRlcgogKiBAcGFyYW0gSW50bFRpbWVab25lfERhdGVUaW1lWm9uZXxzdHJpbmd8bnVsbCAkdGltZXpvbmUgPHA+CiAqIFRoZSB0aW1lem9uZSB0byB1c2UgZm9yIHRoaXMgZm9ybWF0dGVyLiBUaGlzIGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlCiAqIGZvbGxvd2luZyBmb3JtczoKICogPHVsPgogKiA8bGk+CiAqIDxwPgogKiA8Yj5OVUxMPC9iPiwgaW4gd2hpY2ggY2FzZSB0aGUgZGVmYXVsdCB0aW1lem9uZSB3aWxsIGJlIHVzZWQsIGFzIHNwZWNpZmllZCBpbgogKiB0aGUgaW5pIHNldHRpbmcge0BsaW5rICJodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9kYXRldGltZS5jb25maWd1cmF0aW9uLnBocCNpbmkuZGF0ZS50aW1lem9uZSIgZGF0ZS50aW1lem9uZX0gb3IKICogdGhyb3VnaCB0aGUgZnVuY3Rpb24gIHtAbGluayAiaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGF0ZS1kZWZhdWx0LXRpbWV6b25lLXNldC5waHAiIGRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoKX0gYW5kIGFzCiAqIHJldHVybmVkIGJ5IHtAbGluayAiaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGF0ZS1kZWZhdWx0LXRpbWV6b25lLWdldC5waHAiIGRhdGVfZGVmYXVsdF90aW1lem9uZV9nZXQoKX0uCiAqIDwvcD4KICogPC9saT4KICogPGxpPgogKiA8cD4KICogQW4ge0BsaW5rICJodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsdGltZXpvbmUucGhwIiBJbnRsVGltZVpvbmV9LCB3aGljaCB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCiAqIDwvcD4KICogPC9saT4KICogPGxpPgogKiA8cD4KICogQSB7QGxpbmsgImh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRhdGV0aW1lem9uZS5waHAiIERhdGVUaW1lWm9uZX0uIEl0cyBpZGVudGlmaWVyIHdpbGwgYmUgZXh0cmFjdGVkCiAqIGFuZCBhbiBJQ1UgdGltZXpvbmUgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZDsgdGhlIHRpbWV6b25lIHdpbGwgYmUgYmFja2VkCiAqIGJ5IElDVSdzIGRhdGFiYXNlLCBub3QgUEhQJ3MuCiAqIDwvcD4KICogPC9saT4KICogPGxpPgogKiA8cD4KICogQSB7QGxpbmsgImh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnN0cmluZy5waHAiIHN0cmluZ30sIHdoaWNoIHNob3VsZCBiZSBhIHZhbGlkIElDVSB0aW1lem9uZSBpZGVudGlmaWVyLgogKiBTZWUgPGI+SW50bFRpbWVab25lOjpjcmVhdGVUaW1lWm9uZUlERW51bWVyYXRpb24oKTwvYj4uIFJhdyBvZmZzZXRzIHN1Y2ggYXMgPGVtPiJHTVQrMDg6MzAiPC9lbT4gYXJlIGFsc28gYWNjZXB0ZWQuCiAqIDwvcD4KICogPC9saT4KICogPC91bD4KICogPC9wPgogKiBAcmV0dXJuIGJvb2x8bnVsbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KI1tMYW5ndWFnZUF3YXJlKFsnOC4zJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnYm9vbHxudWxsJyldCmZ1bmN0aW9uIGRhdGVmbXRfc2V0X3RpbWV6b25lKEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIsICR0aW1lem9uZSkge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBHZXQgdGhlIHBhdHRlcm4gdXNlZCBmb3IgdGhlIEludGxEYXRlRm9ybWF0dGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuZ2V0cGF0dGVybi5waHAKICogQHBhcmFtIEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIHBhdHRlcm4gc3RyaW5nIGJlaW5nIHVzZWQgdG8gZm9ybWF0L3BhcnNlLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBkYXRlZm10X2dldF9wYXR0ZXJuKEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBTZXQgdGhlIHBhdHRlcm4gdXNlZCBmb3IgdGhlIEludGxEYXRlRm9ybWF0dGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuc2V0cGF0dGVybi5waHAKICogQHBhcmFtIEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiA8cD4KICogTmV3IHBhdHRlcm4gc3RyaW5nIHRvIHVzZS4KICogUG9zc2libGUgcGF0dGVybnMgYXJlIGRvY3VtZW50ZWQgYXQgaHR0cDovL3VzZXJndWlkZS5pY3UtcHJvamVjdC5vcmcvZm9ybWF0cGFyc2UvZGF0ZXRpbWUuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqIEJhZCBmb3JtYXRzdHJpbmdzIGFyZSB1c3VhbGx5IHRoZSBjYXVzZSBvZiB0aGUgZmFpbHVyZS4KICovCmZ1bmN0aW9uIGRhdGVmbXRfc2V0X3BhdHRlcm4oSW50bERhdGVGb3JtYXR0ZXIgJGZvcm1hdHRlciwgc3RyaW5nICRwYXR0ZXJuKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEdldCB0aGUgbGVuaWVudCB1c2VkIGZvciB0aGUgSW50bERhdGVGb3JtYXR0ZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5pc2xlbmllbnQucGhwCiAqIEBwYXJhbSBJbnRsRGF0ZUZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiBwYXJzZXIgaXMgbGVuaWVudCwgPGI+RkFMU0U8L2I+IGlmIHBhcnNlciBpcyBzdHJpY3QuIEJ5IGRlZmF1bHQgdGhlIHBhcnNlciBpcyBsZW5pZW50LgogKi8KI1tQdXJlXQpmdW5jdGlvbiBkYXRlZm10X2lzX2xlbmllbnQoSW50bERhdGVGb3JtYXR0ZXIgJGZvcm1hdHRlcik6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBTZXQgdGhlIGxlbmllbmN5IG9mIHRoZSBwYXJzZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5zZXRsZW5pZW50LnBocAogKiBAcGFyYW0gSW50bERhdGVGb3JtYXR0ZXIgJGZvcm1hdHRlcgogKiBAcGFyYW0gYm9vbCAkbGVuaWVudCA8cD4KICogU2V0cyB3aGV0aGVyIHRoZSBwYXJzZXIgaXMgbGVuaWVudCBvciBub3QsIGRlZmF1bHQgaXMgPGI+VFJVRTwvYj4gKGxlbmllbnQpLgogKiA8L3A+CiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gZGF0ZWZtdF9zZXRfbGVuaWVudCgKICAgIEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIsCiAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSBib29sICRsZW5pZW50Cik6IHZvaWQge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBGb3JtYXQgdGhlIGRhdGUvdGltZSB2YWx1ZSBhcyBhIHN0cmluZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxkYXRlZm9ybWF0dGVyLmZvcm1hdC5waHAKICogQHBhcmFtIEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHBhcmFtIG9iamVjdHxhcnJheXxzdHJpbmd8aW50fGZsb2F0ICRkYXRldGltZSA8cD4KICogVmFsdWUgdG8gZm9ybWF0LiBUaGlzIG1heSBiZSBhIDxiPkRhdGVUaW1lPC9iPiBvYmplY3QsCiAqIGFuIGludGVnZXIgcmVwcmVzZW50aW5nIGEgVW5peCB0aW1lc3RhbXAgdmFsdWUgKHNlY29uZHMKICogc2luY2UgZXBvY2gsIFVUQykgb3IgYW4gYXJyYXkgaW4gdGhlIGZvcm1hdCBvdXRwdXQgYnkKICogPGI+bG9jYWx0aW1lPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgZm9ybWF0dGVkIHN0cmluZyBvciwgaWYgYW4gZXJyb3Igb2NjdXJyZWQsIDxiPkZBTFNFPC9iPi4KICovCiNbUHVyZV0KZnVuY3Rpb24gZGF0ZWZtdF9mb3JtYXQoCiAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdJbnRsRGF0ZUZvcm1hdHRlciddLCBkZWZhdWx0OiAnJyldICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGZvcm1hdHRlciA9IG51bGwsCiAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdJbnRsRGF0ZUZvcm1hdHRlciddLCBkZWZhdWx0OiAnJyldICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldICRmb3JtYXR0ZXIsCiAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICRkYXRldGltZSA9IG51bGwsCiAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAkZGF0ZXRpbWUKKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuNS4wLCBQRUNMIGludGwgJmd0Oz0gMy4wLjApPGJyLz4KICogRm9ybWF0cyBhbiBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuZm9ybWF0b2JqZWN0LnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyfERhdGVUaW1lSW50ZXJmYWNlICRkYXRldGltZSA8cD4KICogQW4gb2JqZWN0IG9mIHR5cGUgSW50bENhbGVuZGFyIG9yIERhdGVUaW1lLiBUaGUgdGltZXpvbmUgaW5mb3JtYXRpb24gaW4gdGhlIG9iamVjdCB3aWxsIGJlIHVzZWQuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5fGludHxzdHJpbmd8bnVsbCAkZm9ybWF0IFtvcHRpb25hbF0gPHA+CiAqIEhvdyB0byBmb3JtYXQgdGhlIGRhdGUvdGltZS4gVGhpcyBjYW4gZWl0aGVyIGJlIGFuIHtodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5hcnJheS5waHAgYXJyYXl9ICB3aXRoCiAqIHR3byBlbGVtZW50cyAoZmlyc3QgdGhlIGRhdGUgc3R5bGUsIHRoZW4gdGhlIHRpbWUgc3R5bGUsIHRoZXNlIGJlaW5nIG9uZQogKiBvZiB0aGUgY29uc3RhbnRzIDxiPkludGxEYXRlRm9ybWF0dGVyOjpOT05FPC9iPiwKICogPGI+SW50bERhdGVGb3JtYXR0ZXI6OlNIT1JUPC9iPiwKICogPGI+SW50bERhdGVGb3JtYXR0ZXI6Ok1FRElVTTwvYj4sCiAqIDxiPkludGxEYXRlRm9ybWF0dGVyOjpMT05HPC9iPiwKICogPGI+SW50bERhdGVGb3JtYXR0ZXI6OkZVTEw8L2I+KSwgYSBsb25nIHdpdGgKICogdGhlIHZhbHVlIG9mIG9uZSBvZiB0aGVzZSBjb25zdGFudHMgKGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSB1c2VkIGJvdGgKICogZm9yIHRoZSB0aW1lIGFuZCB0aGUgZGF0ZSkgb3IgYSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuc3RyaW5nLnBocH0gd2l0aCB0aGUgZm9ybWF0CiAqIGRlc2NyaWJlZCBpbiB7QGxpbmsgaHR0cDovL3d3dy5pY3UtcHJvamVjdC5vcmcvYXBpcmVmL2ljdTRjL2NsYXNzU2ltcGxlRGF0ZUZvcm1hdC5odG1sI2RldGFpbHMgdGhlIElDVSBkb2N1bWVudGF0aW9ufQogKiBkb2N1bWVudGF0aW9uLiBJZiA8Yj5OVUxMPC9iPiwgdGhlIGRlZmF1bHQgc3R5bGUgd2lsbCBiZSB1c2VkLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbG9jYWxlIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBsb2NhbGUgdG8gdXNlLCBvciBOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBvbmUuPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgZm9ybWF0dGVkIHN0cmluZyBvciwgaWYgYW4gZXJyb3Igb2NjdXJyZWQsIDxiPkZBTFNFPC9iPi4KICovCiNbUHVyZV0KZnVuY3Rpb24gZGF0ZWZtdF9mb3JtYXRfb2JqZWN0KCRkYXRldGltZSwgJGZvcm1hdCA9IG51bGwsID9zdHJpbmcgJGxvY2FsZSA9IG51bGwpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBQYXJzZSBzdHJpbmcgdG8gYSB0aW1lc3RhbXAgdmFsdWUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5wYXJzZS5waHAKICogQHBhcmFtIEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogKiBzdHJpbmcgdG8gY29udmVydCB0byBhIHRpbWUKICogPC9wPgogKiBAcGFyYW0gaW50ICYkb2Zmc2V0IFtvcHRpb25hbF0gPHA+CiAqIFBvc2l0aW9uIGF0IHdoaWNoIHRvIHN0YXJ0IHRoZSBwYXJzaW5nIGluICR2YWx1ZSAoemVyby1iYXNlZCkuCiAqIElmIG5vIGVycm9yIG9jY3VycyBiZWZvcmUgJHZhbHVlIGlzIGNvbnN1bWVkLCAkcGFyc2VfcG9zIHdpbGwgY29udGFpbiAtMQogKiBvdGhlcndpc2UgaXQgd2lsbCBjb250YWluIHRoZSBwb3NpdGlvbiBhdCB3aGljaCBwYXJzaW5nIGVuZGVkIChhbmQgdGhlIGVycm9yIG9jY3VycmVkKS4KICogVGhpcyB2YXJpYWJsZSB3aWxsIGNvbnRhaW4gdGhlIGVuZCBwb3NpdGlvbiBpZiB0aGUgcGFyc2UgZmFpbHMuCiAqIElmICRwYXJzZV9wb3MgPiBzdHJsZW4oJHZhbHVlKSwgdGhlIHBhcnNlIGZhaWxzIGltbWVkaWF0ZWx5LgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZsb2F0fGZhbHNlIHRpbWVzdGFtcCBwYXJzZWQgdmFsdWUKICovCmZ1bmN0aW9uIGRhdGVmbXRfcGFyc2UoSW50bERhdGVGb3JtYXR0ZXIgJGZvcm1hdHRlciwgc3RyaW5nICRzdHJpbmcsICYkb2Zmc2V0ID0gbnVsbCk6IGludHxmbG9hdHxmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIFBhcnNlIHN0cmluZyB0byBhIGZpZWxkLWJhc2VkIHRpbWUgdmFsdWUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsZGF0ZWZvcm1hdHRlci5sb2NhbHRpbWUucGhwCiAqIEBwYXJhbSBJbnRsRGF0ZUZvcm1hdHRlciAkZm9ybWF0dGVyCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICogc3RyaW5nIHRvIGNvbnZlcnQgdG8gYSB0aW1lCiAqIDwvcD4KICogQHBhcmFtIGludCAmJG9mZnNldCBbb3B0aW9uYWxdIDxwPgogKiBQb3NpdGlvbiBhdCB3aGljaCB0byBzdGFydCB0aGUgcGFyc2luZyBpbiAkdmFsdWUgKHplcm8tYmFzZWQpLgogKiBJZiBubyBlcnJvciBvY2N1cnMgYmVmb3JlICR2YWx1ZSBpcyBjb25zdW1lZCwgJHBhcnNlX3BvcyB3aWxsIGNvbnRhaW4gLTEKICogb3RoZXJ3aXNlIGl0IHdpbGwgY29udGFpbiB0aGUgcG9zaXRpb24gYXQgd2hpY2ggcGFyc2luZyBlbmRlZCAuCiAqIElmICRwYXJzZV9wb3MgPiBzdHJsZW4oJHZhbHVlKSwgdGhlIHBhcnNlIGZhaWxzIGltbWVkaWF0ZWx5LgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgTG9jYWx0aW1lIGNvbXBhdGlibGUgYXJyYXkgb2YgaW50ZWdlcnMgOiBjb250YWlucyAyNCBob3VyIGNsb2NrIHZhbHVlIGluIHRtX2hvdXIgZmllbGQKICovCmZ1bmN0aW9uIGRhdGVmbXRfbG9jYWx0aW1lKEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIsIHN0cmluZyAkc3RyaW5nLCAmJG9mZnNldCA9IG51bGwpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEdldCB0aGUgZXJyb3IgY29kZSBmcm9tIGxhc3Qgb3BlcmF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bGRhdGVmb3JtYXR0ZXIuZ2V0ZXJyb3Jjb2RlLnBocAogKiBAcGFyYW0gSW50bERhdGVGb3JtYXR0ZXIgJGZvcm1hdHRlcgogKiBAcmV0dXJuIGludCBUaGUgZXJyb3IgY29kZSwgb25lIG9mIFVFcnJvckNvZGUgdmFsdWVzLiBJbml0aWFsIHZhbHVlIGlzIFVfWkVST19FUlJPUi4KICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gZGF0ZWZtdF9nZXRfZXJyb3JfY29kZShJbnRsRGF0ZUZvcm1hdHRlciAkZm9ybWF0dGVyKTogaW50IHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogR2V0IHRoZSBlcnJvciB0ZXh0IGZyb20gdGhlIGxhc3Qgb3BlcmF0aW9uLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGxkYXRlZm9ybWF0dGVyLmdldGVycm9ybWVzc2FnZS5waHAKICogQHBhcmFtIEludGxEYXRlRm9ybWF0dGVyICRmb3JtYXR0ZXIKICogQHJldHVybiBzdHJpbmcgRGVzY3JpcHRpb24gb2YgdGhlIGxhc3QgZXJyb3IuCiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIGRhdGVmbXRfZ2V0X2Vycm9yX21lc3NhZ2UoSW50bERhdGVGb3JtYXR0ZXIgJGZvcm1hdHRlcik6IHN0cmluZyB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEdldCBzdHJpbmcgbGVuZ3RoIGluIGdyYXBoZW1lIHVuaXRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ3JhcGhlbWUtc3RybGVuLnBocAogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAqIFRoZSBzdHJpbmcgYmVpbmcgbWVhc3VyZWQgZm9yIGxlbmd0aC4gSXQgbXVzdCBiZSBhIHZhbGlkIFVURi04IHN0cmluZy4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZXxudWxsIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBvbiBzdWNjZXNzLCBhbmQgMCBpZiB0aGUgc3RyaW5nIGlzIGVtcHR5LgogKi8KI1tQdXJlXQpmdW5jdGlvbiBncmFwaGVtZV9zdHJsZW4oc3RyaW5nICRzdHJpbmcpOiBpbnR8ZmFsc2V8bnVsbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEZpbmQgcG9zaXRpb24gKGluIGdyYXBoZW1lIHVuaXRzKSBvZiBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ3JhcGhlbWUtc3RycG9zLnBocAogKiBAcGFyYW0gc3RyaW5nICRoYXlzdGFjayA8cD4KICogVGhlIHN0cmluZyB0byBsb29rIGluLiBNdXN0IGJlIHZhbGlkIFVURi04LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5lZWRsZSA8cD4KICogVGhlIHN0cmluZyB0byBsb29rIGZvci4gTXVzdCBiZSB2YWxpZCBVVEYtOC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvZmZzZXQgW29wdGlvbmFsXSA8cD4KICogVGhlIG9wdGlvbmFsICRvZmZzZXQgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB3aGVyZSBpbiAkaGF5c3RhY2sgdG8KICogc3RhcnQgc2VhcmNoaW5nIGFzIGFuIG9mZnNldCBpbiBncmFwaGVtZSB1bml0cyAobm90IGJ5dGVzIG9yIGNoYXJhY3RlcnMpLgogKiBUaGUgcG9zaXRpb24gcmV0dXJuZWQgaXMgc3RpbGwgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiBoYXlzdGFjawogKiByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiAkb2Zmc2V0LgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIHRoZSBwb3NpdGlvbiBhcyBhbiBpbnRlZ2VyLiBJZiBuZWVkbGUgaXMgbm90IGZvdW5kLCBzdHJwb3MoKSB3aWxsIHJldHVybiBib29sZWFuIEZBTFNFLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBncmFwaGVtZV9zdHJwb3Moc3RyaW5nICRoYXlzdGFjaywgc3RyaW5nICRuZWVkbGUsIGludCAkb2Zmc2V0ID0gMCk6IGludHxmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEZpbmQgcG9zaXRpb24gKGluIGdyYXBoZW1lIHVuaXRzKSBvZiBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgY2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5ncmFwaGVtZS1zdHJpcG9zLnBocAogKiBAcGFyYW0gc3RyaW5nICRoYXlzdGFjayA8cD4KICogVGhlIHN0cmluZyB0byBsb29rIGluLiBNdXN0IGJlIHZhbGlkIFVURi04LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5lZWRsZSA8cD4KICogVGhlIHN0cmluZyB0byBsb29rIGZvci4gTXVzdCBiZSB2YWxpZCBVVEYtOC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvZmZzZXQgW29wdGlvbmFsXSA8cD4KICogVGhlIG9wdGlvbmFsICRvZmZzZXQgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB3aGVyZSBpbiBoYXlzdGFjayB0bwogKiBzdGFydCBzZWFyY2hpbmcgYXMgYW4gb2Zmc2V0IGluIGdyYXBoZW1lIHVuaXRzIChub3QgYnl0ZXMgb3IgY2hhcmFjdGVycykuCiAqIFRoZSBwb3NpdGlvbiByZXR1cm5lZCBpcyBzdGlsbCByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIGhheXN0YWNrCiAqIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mICRvZmZzZXQuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgdGhlIHBvc2l0aW9uIGFzIGFuIGludGVnZXIuIElmIG5lZWRsZSBpcyBub3QgZm91bmQsIGdyYXBoZW1lX3N0cmlwb3MoKSB3aWxsIHJldHVybiBib29sZWFuIEZBTFNFLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBncmFwaGVtZV9zdHJpcG9zKHN0cmluZyAkaGF5c3RhY2ssIHN0cmluZyAkbmVlZGxlLCBpbnQgJG9mZnNldCA9IDApOiBpbnR8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBGaW5kIHBvc2l0aW9uIChpbiBncmFwaGVtZSB1bml0cykgb2YgbGFzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ3JhcGhlbWUtc3RycnBvcy5waHAKICogQHBhcmFtIHN0cmluZyAkaGF5c3RhY2sgPHA+CiAqIFRoZSBzdHJpbmcgdG8gbG9vayBpbi4gTXVzdCBiZSB2YWxpZCBVVEYtOC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRuZWVkbGUgPHA+CiAqIFRoZSBzdHJpbmcgdG8gbG9vayBmb3IuIE11c3QgYmUgdmFsaWQgVVRGLTguCiAqIDwvcD4KICogQHBhcmFtIGludCAkb2Zmc2V0IFtvcHRpb25hbF0gPHA+CiAqIFRoZSBvcHRpb25hbCAkb2Zmc2V0IHBhcmFtZXRlciBhbGxvd3MgeW91IHRvIHNwZWNpZnkgd2hlcmUgaW4gJGhheXN0YWNrIHRvCiAqIHN0YXJ0IHNlYXJjaGluZyBhcyBhbiBvZmZzZXQgaW4gZ3JhcGhlbWUgdW5pdHMgKG5vdCBieXRlcyBvciBjaGFyYWN0ZXJzKS4KICogVGhlIHBvc2l0aW9uIHJldHVybmVkIGlzIHN0aWxsIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgaGF5c3RhY2sKICogcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgJG9mZnNldC4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSB0aGUgcG9zaXRpb24gYXMgYW4gaW50ZWdlci4gSWYgbmVlZGxlIGlzIG5vdCBmb3VuZCwgZ3JhcGhlbWVfc3RycnBvcygpIHdpbGwgcmV0dXJuIGJvb2xlYW4gRkFMU0UuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGdyYXBoZW1lX3N0cnJwb3Moc3RyaW5nICRoYXlzdGFjaywgc3RyaW5nICRuZWVkbGUsIGludCAkb2Zmc2V0ID0gMCk6IGludHxmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEZpbmQgcG9zaXRpb24gKGluIGdyYXBoZW1lIHVuaXRzKSBvZiBsYXN0IG9jY3VycmVuY2Ugb2YgYSBjYXNlLWluc2Vuc2l0aXZlIHN0cmluZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmdyYXBoZW1lLXN0cnJpcG9zLnBocAogKiBAcGFyYW0gc3RyaW5nICRoYXlzdGFjayA8cD4KICogVGhlIHN0cmluZyB0byBsb29rIGluLiBNdXN0IGJlIHZhbGlkIFVURi04LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5lZWRsZSA8cD4KICogVGhlIHN0cmluZyB0byBsb29rIGZvci4gTXVzdCBiZSB2YWxpZCBVVEYtOC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvZmZzZXQgW29wdGlvbmFsXSA8cD4KICogVGhlIG9wdGlvbmFsICRvZmZzZXQgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB3aGVyZSBpbiAkaGF5c3RhY2sgdG8KICogc3RhcnQgc2VhcmNoaW5nIGFzIGFuIG9mZnNldCBpbiBncmFwaGVtZSB1bml0cyAobm90IGJ5dGVzIG9yIGNoYXJhY3RlcnMpLgogKiBUaGUgcG9zaXRpb24gcmV0dXJuZWQgaXMgc3RpbGwgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiBoYXlzdGFjawogKiByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiAkb2Zmc2V0LgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIHRoZSBwb3NpdGlvbiBhcyBhbiBpbnRlZ2VyLiBJZiBuZWVkbGUgaXMgbm90IGZvdW5kLCBncmFwaGVtZV9zdHJyaXBvcygpIHdpbGwgcmV0dXJuIGJvb2xlYW4gRkFMU0UuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGdyYXBoZW1lX3N0cnJpcG9zKHN0cmluZyAkaGF5c3RhY2ssIHN0cmluZyAkbmVlZGxlLCBpbnQgJG9mZnNldCA9IDApOiBpbnR8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXR1cm4gcGFydCBvZiBhIHN0cmluZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmdyYXBoZW1lLXN1YnN0ci5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogKiBUaGUgaW5wdXQgc3RyaW5nLiBNdXN0IGJlIHZhbGlkIFVURi04LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG9mZnNldCA8cD4KICogU3RhcnQgcG9zaXRpb24gaW4gZGVmYXVsdCBncmFwaGVtZSB1bml0cy4KICogSWYgJHN0YXJ0IGlzIG5vbi1uZWdhdGl2ZSwgdGhlIHJldHVybmVkIHN0cmluZyB3aWxsIHN0YXJ0IGF0IHRoZQogKiAkc3RhcnQndGggcG9zaXRpb24gaW4gJHN0cmluZywgY291bnRpbmcgZnJvbSB6ZXJvLiBJZiAkc3RhcnQgaXMgbmVnYXRpdmUsCiAqIHRoZSByZXR1cm5lZCBzdHJpbmcgd2lsbCBzdGFydCBhdCB0aGUgJHN0YXJ0J3RoIGdyYXBoZW1lIHVuaXQgZnJvbSB0aGUKICogZW5kIG9mIHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gaW50fG51bGwgJGxlbmd0aCBbb3B0aW9uYWxdIDxwPgogKiBMZW5ndGggaW4gZ3JhcGhlbWUgdW5pdHMuCiAqIElmICRsZW5ndGggaXMgZ2l2ZW4gYW5kIGlzIHBvc2l0aXZlLCB0aGUgc3RyaW5nIHJldHVybmVkIHdpbGwgY29udGFpbgogKiBhdCBtb3N0ICRsZW5ndGggZ3JhcGhlbWUgdW5pdHMgYmVnaW5uaW5nIGZyb20gJHN0YXJ0IChkZXBlbmRpbmcgb24gdGhlCiAqIGxlbmd0aCBvZiBzdHJpbmcpLiBJZiAkbGVuZ3RoIGlzIGdpdmVuIGFuZCBpcyBuZWdhdGl2ZSwgdGhlbgogKiB0aGF0IG1hbnkgZ3JhcGhlbWUgdW5pdHMgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIGVuZCBvZiBzdHJpbmcgKGFmdGVyIHRoZQogKiBzdGFydCBwb3NpdGlvbiBoYXMgYmVlbiBjYWxjdWxhdGVkIHdoZW4gYSBzdGFydCBpcyBuZWdhdGl2ZSkuIElmICRzdGFydAogKiBkZW5vdGVzIGEgcG9zaXRpb24gYmV5b25kIHRoaXMgdHJ1bmNhdGlvbiwgPGI+RkFMU0U8L2I+IHdpbGwgYmUgcmV0dXJuZWQuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgPHA+dGhlIGV4dHJhY3RlZCBwYXJ0IG9mICRzdHJpbmcsPGJyIC8+CiAqIG9yIDxzdHJvbmc+RkFMU0U8L3N0cm9uZz4gaWYgJGxlbmd0aCBpcyBuZWdhdGl2ZSBhbmQgJHN0YXJ0IGRlbm90ZXMgYSBwb3NpdGlvbiBiZXlvbmQgdHJ1bmNhdGlvbiAkbGVuZ3RoLDxiciAvPgogKiBvciBhbHNvIDxzdHJvbmc+RkFMU0U8L3N0cm9uZz4gaWYgJHN0YXJ0IGRlbm90ZXMgYSBwb3NpdGlvbiBiZXlvbmQgJHN0cmluZyBsZW5ndGg8L3A+CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGdyYXBoZW1lX3N1YnN0cihzdHJpbmcgJHN0cmluZywgaW50ICRvZmZzZXQsID9pbnQgJGxlbmd0aCA9IG51bGwpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXR1cm5zIHBhcnQgb2YgaGF5c3RhY2sgc3RyaW5nIGZyb20gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgbmVlZGxlIHRvIHRoZSBlbmQgb2YgaGF5c3RhY2suCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ3JhcGhlbWUtc3Ryc3RyLnBocAogKiBAcGFyYW0gc3RyaW5nICRoYXlzdGFjayA8cD4KICogVGhlIGlucHV0IHN0cmluZy4gTXVzdCBiZSB2YWxpZCBVVEYtOC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRuZWVkbGUgPHA+CiAqIFRoZSBzdHJpbmcgdG8gbG9vayBmb3IuIE11c3QgYmUgdmFsaWQgVVRGLTguCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJGJlZm9yZU5lZWRsZSBbb3B0aW9uYWxdIDxwPgogKiBJZiA8Yj5UUlVFPC9iPiwgZ3JhcGhlbWVfc3Ryc3RyKCkgcmV0dXJucyB0aGUgcGFydCBvZiB0aGUKICogaGF5c3RhY2sgYmVmb3JlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBuZWVkbGUgKGV4Y2x1ZGluZyB0aGUgbmVlZGxlKS4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgcG9ydGlvbiBvZiBzdHJpbmcsIG9yIEZBTFNFIGlmIG5lZWRsZSBpcyBub3QgZm91bmQuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGdyYXBoZW1lX3N0cnN0cihzdHJpbmcgJGhheXN0YWNrLCBzdHJpbmcgJG5lZWRsZSwgYm9vbCAkYmVmb3JlTmVlZGxlID0gZmFsc2UpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXR1cm5zIHBhcnQgb2YgaGF5c3RhY2sgc3RyaW5nIGZyb20gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgY2FzZS1pbnNlbnNpdGl2ZSBuZWVkbGUgdG8gdGhlIGVuZCBvZiBoYXlzdGFjay4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5ncmFwaGVtZS1zdHJpc3RyLnBocAogKiBAcGFyYW0gc3RyaW5nICRoYXlzdGFjayA8cD4KICogVGhlIGlucHV0IHN0cmluZy4gTXVzdCBiZSB2YWxpZCBVVEYtOC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRuZWVkbGUgPHA+CiAqIFRoZSBzdHJpbmcgdG8gbG9vayBmb3IuIE11c3QgYmUgdmFsaWQgVVRGLTguCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJGJlZm9yZU5lZWRsZSBbb3B0aW9uYWxdIDxwPgogKiBJZiA8Yj5UUlVFPC9iPiwgZ3JhcGhlbWVfc3Ryc3RyKCkgcmV0dXJucyB0aGUgcGFydCBvZiB0aGUKICogaGF5c3RhY2sgYmVmb3JlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBuZWVkbGUgKGV4Y2x1ZGluZyBuZWVkbGUpLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBwb3J0aW9uIG9mICRoYXlzdGFjaywgb3IgRkFMU0UgaWYgJG5lZWRsZSBpcyBub3QgZm91bmQuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGdyYXBoZW1lX3N0cmlzdHIoc3RyaW5nICRoYXlzdGFjaywgc3RyaW5nICRuZWVkbGUsIGJvb2wgJGJlZm9yZU5lZWRsZSA9IGZhbHNlKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIGludGwgJmd0Oz0gMS4wLjApPGJyLz4KICogRnVuY3Rpb24gdG8gZXh0cmFjdCBhIHNlcXVlbmNlIG9mIGRlZmF1bHQgZ3JhcGhlbWUgY2x1c3RlcnMgZnJvbSBhIHRleHQgYnVmZmVyLCB3aGljaCBtdXN0IGJlIGVuY29kZWQgaW4gVVRGLTguCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZ3JhcGhlbWUtZXh0cmFjdC5waHAKICogQHBhcmFtIHN0cmluZyAkaGF5c3RhY2sgPHA+CiAqIFN0cmluZyB0byBzZWFyY2guCiAqIDwvcD4KICogQHBhcmFtIGludCAkc2l6ZSA8cD4KICogTWF4aW11bSBudW1iZXIgaXRlbXMgLSBiYXNlZCBvbiB0aGUgJGV4dHJhY3RfdHlwZSAtIHRvIHJldHVybi4KICogPC9wPgogKiBAcGFyYW0gaW50ICR0eXBlIDxwPgogKiBEZWZpbmVzIHRoZSB0eXBlIG9mIHVuaXRzIHJlZmVycmVkIHRvIGJ5IHRoZSAkc2l6ZSBwYXJhbWV0ZXI6CiAqIDwvcD4KICogPHA+CiAqIEdSQVBIRU1FX0VYVFJfQ09VTlQgKGRlZmF1bHQpIC0gJHNpemUgaXMgdGhlIG51bWJlciBvZiBkZWZhdWx0CiAqIGdyYXBoZW1lIGNsdXN0ZXJzIHRvIGV4dHJhY3QuCiAqIEdSQVBIRU1FX0VYVFJfTUFYQllURVMgLSAkc2l6ZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMKICogcmV0dXJuZWQuCiAqIEdSQVBIRU1FX0VYVFJfTUFYQ0hBUlMgLSAkc2l6ZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgVVRGLTgKICogY2hhcmFjdGVycyByZXR1cm5lZC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvZmZzZXQgW29wdGlvbmFsXSA8cD4KICogU3RhcnRpbmcgcG9zaXRpb24gaW4gJGhheXN0YWNrIGluIGJ5dGVzIC0gaWYgZ2l2ZW4sIGl0IG11c3QgYmUgemVybyBvciBhCiAqIHBvc2l0aXZlIHZhbHVlIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgJGhheXN0YWNrIGluCiAqIGJ5dGVzLiBJZiAkc3RhcnQgZG9lcyBub3QgcG9pbnQgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgYSBVVEYtOAogKiBjaGFyYWN0ZXIsIHRoZSBzdGFydCBwb3NpdGlvbiBpcyBtb3ZlZCB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYm91bmRhcnkuCiAqIDwvcD4KICogQHBhcmFtIGludCAmJG5leHQgW29wdGlvbmFsXSA8cD4KICogUmVmZXJlbmNlIHRvIGEgdmFsdWUgdGhhdCB3aWxsIGJlIHNldCB0byB0aGUgbmV4dCBzdGFydGluZyBwb3NpdGlvbi4KICogV2hlbiB0aGUgY2FsbCByZXR1cm5zLCB0aGlzIG1heSBwb2ludCB0byB0aGUgZmlyc3QgYnl0ZSBwb3NpdGlvbiBwYXN0IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBBIHN0cmluZyBzdGFydGluZyBhdCBvZmZzZXQgJHN0YXJ0IGFuZCBlbmRpbmcgb24gYSBkZWZhdWx0IGdyYXBoZW1lIGNsdXN0ZXIKICogYm91bmRhcnkgdGhhdCBjb25mb3JtcyB0byB0aGUgJHNpemUgYW5kICRleHRyYWN0X3R5cGUgc3BlY2lmaWVkLgogKi8KZnVuY3Rpb24gZ3JhcGhlbWVfZXh0cmFjdChzdHJpbmcgJGhheXN0YWNrLCBpbnQgJHNpemUsIGludCAkdHlwZSA9IDAsIGludCAkb2Zmc2V0ID0gMCwgJiRuZXh0ID0gbnVsbCk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEhQIDcsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMiwgUEhQIDcsIFBFQ0wgaWRuICZndDs9IDAuMSk8YnIvPgogKiBDb252ZXJ0IGRvbWFpbiBuYW1lIHRvIElETkEgQVNDSUkgZm9ybS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pZG4tdG8tYXNjaWkucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGRvbWFpbiA8cD4KICogRG9tYWluIHRvIGNvbnZlcnQuIEluIFBIUCA1IG11c3QgYmUgVVRGLTggZW5jb2RlZC4KICogSWYgZS5nLiBhbiBJU08tODg1OS0xIChha2EgV2VzdGVybiBFdXJvcGUgbGF0aW4xKSBlbmNvZGVkIHN0cmluZyBpcwogKiBwYXNzZWQgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBhbiBBQ0UgZW5jb2RlZCAieG4tLSIgc3RyaW5nLgogKiBJdCB3aWxsIG5vdCBiZSB0aGUgb25lIHlvdSBleHBlY3RlZCB0aG91Z2ghCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICogQ29udmVyc2lvbiBvcHRpb25zIC0gY29tYmluYXRpb24gb2YgSUROQV8qIGNvbnN0YW50cyAoZXhjZXB0IElETkFfRVJST1JfKiBjb25zdGFudHMpLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHZhcmlhbnQgW29wdGlvbmFsXSA8cD4KICogRWl0aGVyIElOVExfSUROQV9WQVJJQU5UXzIwMDMgZm9yIElETkEgMjAwMyBvciBJTlRMX0lETkFfVkFSSUFOVF9VVFM0NiBmb3IgVVRTICM0Ni4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJiRpZG5hX2luZm8gW29wdGlvbmFsXSA8cD4KICogVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgb25seSBpZiBJTlRMX0lETkFfVkFSSUFOVF9VVFM0NiB3YXMgdXNlZCBmb3IgdmFyaWFudC4KICogSW4gdGhhdCBjYXNlLCBpdCB3aWxsIGJlIGZpbGxlZCB3aXRoIGFuIGFycmF5IHdpdGggdGhlIGtleXMgJ3Jlc3VsdCcsCiAqIHRoZSBwb3NzaWJseSBpbGxlZ2FsIHJlc3VsdCBvZiB0aGUgdHJhbnNmb3JtYXRpb24sICdpc1RyYW5zaXRpb25hbERpZmZlcmVudCcsCiAqIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHVzYWdlIG9mIHRoZSB0cmFuc2l0aW9uYWwgbWVjaGFuaXNtcyBvZiBVVFMgIzQ2CiAqIGVpdGhlciBoYXMgb3Igd291bGQgaGF2ZSBjaGFuZ2VkIHRoZSByZXN1bHQgYW5kICdlcnJvcnMnLAogKiB3aGljaCBpcyBhbiBpbnQgcmVwcmVzZW50aW5nIGEgYml0c2V0IG9mIHRoZSBlcnJvciBjb25zdGFudHMgSUROQV9FUlJPUl8qLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBBQ0UgZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBkb21haW4gbmFtZSBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGlkbl90b19hc2NpaShzdHJpbmcgJGRvbWFpbiwgaW50ICRmbGFncyA9IDAsIGludCAkdmFyaWFudCA9IElOVExfSUROQV9WQVJJQU5UX1VUUzQ2LCAmJGlkbmFfaW5mbyk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEhQIDcsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMiwgUEhQIDcsIFBFQ0wgaWRuICZndDs9IDAuMSk8YnIvPgogKiBDb252ZXJ0IGRvbWFpbiBuYW1lIGZyb20gSUROQSBBU0NJSSB0byBVbmljb2RlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmlkbi10by11dGY4LnBocAogKiBAcGFyYW0gc3RyaW5nICRkb21haW4gPHA+CiAqIERvbWFpbiB0byBjb252ZXJ0IGluIElETkEgQVNDSUktY29tcGF0aWJsZSBmb3JtYXQuCiAqIFRoZSBBU0NJSSBlbmNvZGVkIGRvbWFpbiBuYW1lLiBMb29rcyBsaWtlICJ4bi0tLi4uIiBpZiB0aGUgaXQgb3JpZ2luYWxseSBjb250YWluZWQgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICogQ29udmVyc2lvbiBvcHRpb25zIC0gY29tYmluYXRpb24gb2YgSUROQV8qIGNvbnN0YW50cyAoZXhjZXB0IElETkFfRVJST1JfKiBjb25zdGFudHMpLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHZhcmlhbnQgW29wdGlvbmFsXSA8cD4KICogRWl0aGVyIElOVExfSUROQV9WQVJJQU5UXzIwMDMgZm9yIElETkEgMjAwMyBvciBJTlRMX0lETkFfVkFSSUFOVF9VVFM0NiBmb3IgVVRTICM0Ni4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJiRpZG5hX2luZm8gW29wdGlvbmFsXSA8cD4KICogVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgb25seSBpZiBJTlRMX0lETkFfVkFSSUFOVF9VVFM0NiB3YXMgdXNlZCBmb3IgdmFyaWFudC4KICogSW4gdGhhdCBjYXNlLCBpdCB3aWxsIGJlIGZpbGxlZCB3aXRoIGFuIGFycmF5IHdpdGggdGhlIGtleXMgJ3Jlc3VsdCcsCiAqIHRoZSBwb3NzaWJseSBpbGxlZ2FsIHJlc3VsdCBvZiB0aGUgdHJhbnNmb3JtYXRpb24sICdpc1RyYW5zaXRpb25hbERpZmZlcmVudCcsCiAqIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHVzYWdlIG9mIHRoZSB0cmFuc2l0aW9uYWwgbWVjaGFuaXNtcyBvZiBVVFMgIzQ2CiAqIGVpdGhlciBoYXMgb3Igd291bGQgaGF2ZSBjaGFuZ2VkIHRoZSByZXN1bHQgYW5kICdlcnJvcnMnLAogKiB3aGljaCBpcyBhbiBpbnQgcmVwcmVzZW50aW5nIGEgYml0c2V0IG9mIHRoZSBlcnJvciBjb25zdGFudHMgSUROQV9FUlJPUl8qLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBVVEYtOCBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIGRvbWFpbiBuYW1lIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBSRkMgMzQ5MCA0LjIgc3RhdGVzIHRob3VnaCAiVG9Vbmljb2RlIG5ldmVyIGZhaWxzLiBJZiBhbnkgc3RlcCBmYWlscywgdGhlbiB0aGUgb3JpZ2luYWwgaW5wdXQKICogc2VxdWVuY2UgaXMgcmV0dXJuZWQgaW1tZWRpYXRlbHkgaW4gdGhhdCBzdGVwLiIKICovCmZ1bmN0aW9uIGlkbl90b191dGY4KHN0cmluZyAkZG9tYWluLCBpbnQgJGZsYWdzID0gMCwgaW50ICR2YXJpYW50ID0gSU5UTF9JRE5BX1ZBUklBTlRfVVRTNDYsICYkaWRuYV9pbmZvKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogQ3JlYXRlIGEgbmV3IEludGxDYWxlbmRhcgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuY3JlYXRlaW5zdGFuY2UucGhwCiAqIEBwYXJhbSBJbnRsVGltZVpvbmV8RGF0ZVRpbWVab25lfHN0cmluZ3xudWxsICR0aW1lem9uZSBbb3B0aW9uYWxdIDxwPiA8cD4KICogVGhlIHRpbWV6b25lIHRvIHVzZS4KICogPC9wPgogKgogKiA8dWw+CiAqIDxsaT4KICogPHA+CiAqIDxiPk5VTEw8L2I+LCBpbiB3aGljaCBjYXNlIHRoZSBkZWZhdWx0IHRpbWV6b25lIHdpbGwgYmUgdXNlZCwgYXMgc3BlY2lmaWVkIGluCiAqIHRoZSBpbmkgc2V0dGluZyB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZGF0ZXRpbWUuY29uZmlndXJhdGlvbi5waHAjaW5pLmRhdGUudGltZXpvbmUgZGF0ZS50aW1lem9uZX0gb3IKICogdGhyb3VnaCB0aGUgZnVuY3Rpb24gIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYXRlLWRlZmF1bHQtdGltZXpvbmUtc2V0LnBocCBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCl9IGFuZCBhcwogKiByZXR1cm5lZCBieSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGF0ZS1kZWZhdWx0LXRpbWV6b25lLWdldC5waHAgZGF0ZV9kZWZhdWx0X3RpbWV6b25lX2dldCgpfS4KICogPC9wPgogKiA8L2xpPgogKiA8bGk+CiAqIDxwPgogKiBBbiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bHRpbWV6b25lLnBocCBJbnRsVGltZVpvbmV9LCB3aGljaCB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCiAqIDwvcD4KICogPC9saT4KICogPGxpPgogKiA8cD4KICogQSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZGF0ZXRpbWV6b25lLnBocCBEYXRlVGltZVpvbmV9LiBJdHMgaWRlbnRpZmllciB3aWxsIGJlIGV4dHJhY3RlZAogKiBhbmQgYW4gSUNVIHRpbWV6b25lIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQ7IHRoZSB0aW1lem9uZSB3aWxsIGJlIGJhY2tlZAogKiBieSBJQ1UncyBkYXRhYmFzZSwgbm90IFBIUCdzLgogKiA8L3A+CiAqIDwvbGk+CiAqIDxsaT4KICogPHA+CiAqIEEge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnN0cmluZy5waHAgc3RyaW5nfSwgd2hpY2ggc2hvdWxkIGJlIGEgdmFsaWQgSUNVIHRpbWV6b25lIGlkZW50aWZpZXIuCiAqIFNlZSAgPGI+SW50bFRpbWVab25lOjpjcmVhdGVUaW1lWm9uZUlERW51bWVyYXRpb24oKTwvYj4uIFJhdwogKiBvZmZzZXRzIHN1Y2ggYXMgPGVtPiJHTVQrMDg6MzAiPC9lbT4gYXJlIGFsc28gYWNjZXB0ZWQuCiAqIDwvcD4KICogPC9saT4KICogPC91bD4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGxvY2FsZSBbb3B0aW9uYWxdIDxwPgogKiBBIGxvY2FsZSB0byB1c2Ugb3IgPGI+TlVMTDwvYj4gdG8gdXNlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsLmNvbmZpZ3VyYXRpb24ucGhwI2luaS5pbnRsLmRlZmF1bHQtbG9jYWxlIHRoZSBkZWZhdWx0IGxvY2FsZX0uCiAqIDwvcD4KICogQHJldHVybiBJbnRsQ2FsZW5kYXJ8bnVsbAogKiBUaGUgY3JlYXRlZCB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCBJbnRsQ2FsZW5kYXJ9IGluc3RhbmNlIG9yIDxiPk5VTEw8L2I+IG9uCiAqIGZhaWx1cmUuCiAqIEBzaW5jZSA1LjUKICovCiNbUHVyZV0KZnVuY3Rpb24gaW50bGNhbF9jcmVhdGVfaW5zdGFuY2UoJHRpbWV6b25lID0gbnVsbCwgP3N0cmluZyAkbG9jYWxlID0gbnVsbCk6ID9JbnRsQ2FsZW5kYXIge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBHZXQgc2V0IG9mIGxvY2FsZSBrZXl3b3JkIHZhbHVlcwogKiBAcGFyYW0gc3RyaW5nICRrZXl3b3JkIDxwPgogKiBUaGUgbG9jYWxlIGtleXdvcmQgZm9yIHdoaWNoIHJlbGV2YW50IHZhbHVlcyBhcmUgdG8gYmUgcXVlcmllZC4gT25seQogKiA8ZW0+J2NhbGVuZGFyJzwvZW0+IGlzIHN1cHBvcnRlZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgPHA+CiAqIFRoZSBsb2NhbGUgb250byB3aGljaCB0aGUga2V5d29yZC92YWx1ZSBwYWlyIGFyZSB0byBiZSBhcHBlbmRlZC4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkb25seUNvbW1vbgogKiA8cD4KICogV2hldGhlciB0byBzaG93IG9ubHkgdGhlIHZhbHVlcyBjb21tb25seSB1c2VkIGZvciB0aGUgc3BlY2lmaWVkIGxvY2FsZS4KICogPC9wPgogKiBAcmV0dXJuIEludGxJdGVyYXRvcnxmYWxzZSBBbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBzdHJpbmdzIHdpdGggdGhlIGxvY2FsZSBrZXl3b3JkIHZhbHVlcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsY2FsX2dldF9rZXl3b3JkX3ZhbHVlc19mb3JfbG9jYWxlKHN0cmluZyAka2V5d29yZCwgc3RyaW5nICRsb2NhbGUsIGJvb2wgJG9ubHlDb21tb24pOiBJbnRsSXRlcmF0b3J8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBHZXQgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCB0aW1lCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5nZXRub3cucGhwCiAqIEByZXR1cm4gZmxvYXQgQSBmbG9hdCByZXByZXNlbnRpbmcgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCwgbm90IGNvdW50aW5nIGxlYXAgc2Vjb25kcy4KICogQHNpbmNlIDUuNQogKi8KI1tQdXJlKHRydWUpXQpmdW5jdGlvbiBpbnRsY2FsX2dldF9ub3coKTogZmxvYXQge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBHZXQgYXJyYXkgb2YgbG9jYWxlcyBmb3Igd2hpY2ggdGhlcmUgaXMgZGF0YQogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0YXZhaWxhYmxlbG9jYWxlcy5waHAKICogQHJldHVybiBzdHJpbmdbXSBBbiBhcnJheSBvZiBzdHJpbmdzLCBvbmUgZm9yIHdoaWNoIGxvY2FsZS4KICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsY2FsX2dldF9hdmFpbGFibGVfbG9jYWxlcygpOiBhcnJheSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCB0aGUgdmFsdWUgZm9yIGEgZmllbGQKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldC5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmaWVsZCA8cD4KICogT25lIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCBJbnRsQ2FsZW5kYXJ9IGRhdGUvdGltZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCNpbnRsY2FsZW5kYXIuY29uc3RhbnRzIGZpZWxkIGNvbnN0YW50c30uIFRoZXNlIGFyZSBpbnRlZ2VyCiAqIHZhbHVlcyBiZXR3ZWVuIDxlbT4wPC9lbT4gYW5kCiAqIDxiPkludGxDYWxlbmRhcjo6RklFTERfQ09VTlQ8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gaW50IEFuIGludGVnZXIgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHRpbWUgZmllbGQuCiAqIEBzaW5jZSA1LjUKICovCiNbUHVyZV0KZnVuY3Rpb24gaW50bF9nZXQoJGNhbGVuZGFyLCAkZmllbGQpIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogR2V0IHRpbWUgY3VycmVudGx5IHJlcHJlc2VudGVkIGJ5IHRoZSBvYmplY3QKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+VGhlIGNhbGVuZGFyIHdob3NlIHRpbWUgd2lsbCBiZSBjaGVja2VkIGFnYWluc3QgdGhpcyBvYmplY3QncyB0aW1lLjwvcD4KICogQHJldHVybiBmbG9hdAogKiBBIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5mbG9hdC5waHAgZmxvYXR9IHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBlbGFwc2VkIHNpbmNlIHRoZQogKiByZWZlcmVuY2UgdGltZSAoMSBKYW4gMTk3MCAwMDowMDowMCBVVEMpLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCiNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2Zsb2F0fGZhbHNlJ10sIGRlZmF1bHQ6ICdmbG9hdCcpXQpmdW5jdGlvbiBpbnRsY2FsX2dldF90aW1lKEludGxDYWxlbmRhciAkY2FsZW5kYXIpIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogU2V0IHRoZSBjYWxlbmRhciB0aW1lIGluIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2gKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLnNldHRpbWUucGhwCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgSW50bENhbGVuZGFyIHJlc291cmNlLgogKiA8L3A+CiAqIEBwYXJhbSBmbG9hdCAkdGltZXN0YW1wIDxwPgogKiBBbiBpbnN0YW50IHJlcHJlc2VudGVkIGJ5IHRoZSBudW1iZXIgb2YgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZXR3ZWVuCiAqIHN1Y2ggaW5zdGFudCBhbmQgdGhlIGVwb2NoLCBpZ25vcmluZyBsZWFwIHNlY29uZHMuCiAqIDwvcD4KICogQHJldHVybiBib29sCiAqIFJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBhbmQgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA1LjUKICovCmZ1bmN0aW9uIGludGxjYWxfc2V0X3RpbWUoSW50bENhbGVuZGFyICRjYWxlbmRhciwgZmxvYXQgJHRpbWVzdGFtcCk6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBBZGQgYSAoc2lnbmVkKSBhbW91bnQgb2YgdGltZSB0byBhIGZpZWxkCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5hZGQucGhwCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmllbGQgPHA+CiAqIE9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBkYXRlL3RpbWUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAjaW50bGNhbGVuZGFyLmNvbnN0YW50cyBmaWVsZCBjb25zdGFudHN9LgogKiBUaGVzZSBhcmUgaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiA8ZW0+MDwvZW0+IGFuZAogKiA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0NPVU5UPC9iPi4KICogPC9wPgogKiBAcGFyYW0gaW50ICR2YWx1ZSA8cD5UaGUgc2lnbmVkIGFtb3VudCB0byBhZGQgdG8gdGhlIGN1cnJlbnQgZmllbGQuIElmIHRoZSBhbW91bnQgaXMgcG9zaXRpdmUsIHRoZSBpbnN0YW50IHdpbGwgYmUgbW92ZWQgZm9yd2FyZDsgaWYgaXQgaXMgbmVnYXRpdmUsIHRoZSBpbnN0YW50IHdpbCBiZSBtb3ZlZCBpbnRvIHRoZSBwYXN0LiBUaGUgdW5pdCBpcyBpbXBsaWNpdCB0byB0aGUgZmllbGQgdHlwZS4KICogRm9yIGluc3RhbmNlLCBob3VycyBmb3IgSW50bENhbGVuZGFyOjpGSUVMRF9IT1VSX09GX0RBWS48L3A+CiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA1LjUKICovCmZ1bmN0aW9uIGludGxjYWxfYWRkKEludGxDYWxlbmRhciAkY2FsZW5kYXIsIGludCAkZmllbGQsIGludCAkdmFsdWUpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogU2V0IHRoZSB0aW1lem9uZSB1c2VkIGJ5IHRoaXMgY2FsZW5kYXIKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLnNldHRpbWV6b25lLnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyICRjYWxlbmRhciA8cD4KICogVGhlIGNhbGVuZGFyIG9iamVjdCwgb24gdGhlIHByb2NlZHVyYWwgc3R5bGUgaW50ZXJmYWNlLgogKiA8L3A+CiAqIEBwYXJhbSBJbnRsVGltZVpvbmV8RGF0ZVRpbWVab25lfHN0cmluZ3xudWxsICR0aW1lem9uZSA8cD4KICogVGhlIG5ldyB0aW1lem9uZSB0byBiZSB1c2VkIGJ5IHRoaXMgY2FsZW5kYXIuIEl0IGNhbiBiZSBzcGVjaWZpZWQgaW4gdGhlCiAqIGZvbGxvd2luZyB3YXlzOgogKgogKiA8L3A+PHVsPgogKiA8bGk+CiAqIDxwPgogKiA8Yj5OVUxMPC9iPiwgaW4gd2hpY2ggY2FzZSB0aGUgZGVmYXVsdCB0aW1lem9uZSB3aWxsIGJlIHVzZWQsIGFzIHNwZWNpZmllZCBpbgogKiB0aGUgaW5pIHNldHRpbmcge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2RhdGV0aW1lLmNvbmZpZ3VyYXRpb24ucGhwI2luaS5kYXRlLnRpbWV6b25lIGRhdGUudGltZXpvbmV9IG9yCiAqIHRocm91Z2ggdGhlIGZ1bmN0aW9uICB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGF0ZS1kZWZhdWx0LXRpbWV6b25lLXNldC5waHAgZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgpfSBhbmQgYXMKICogcmV0dXJuZWQgYnkgIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kYXRlLWRlZmF1bHQtdGltZXpvbmUtZ2V0LnBocCBkYXRlX2RlZmF1bHRfdGltZXpvbmVfZ2V0KCl9LgogKiA8L3A+CiAqIDwvbGk+CiAqIDxsaT4KICogPHA+CiAqIEFuIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsdGltZXpvbmUucGhwIEludGxUaW1lWm9uZX0sIHdoaWNoIHdpbGwgYmUgdXNlZCBkaXJlY3RseS4KICogPC9wPgogKiA8L2xpPgogKiA8bGk+CiAqIDxwPgogKiBBIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kYXRldGltZXpvbmUucGhwIERhdGVUaW1lWm9uZX0uIEl0cyBpZGVudGlmaWVyIHdpbGwgYmUgZXh0cmFjdGVkCiAqIGFuZCBhbiBJQ1UgdGltZXpvbmUgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZDsgdGhlIHRpbWV6b25lIHdpbGwgYmUgYmFja2VkCiAqIGJ5IElDVSdzIGRhdGFiYXNlLCBub3QgUEhQJ3MuCiAqIDwvcD4KICogPC9saT4KICogPGxpPgogKiA8cD4KICogQSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuc3RyaW5nLnBocCBzdHJpbmd9LCB3aGljaCBzaG91bGQgYmUgYSB2YWxpZCBJQ1UgdGltZXpvbmUgaWRlbnRpZmllci4KICogU2VlICA8Yj5JbnRsVGltZVpvbmU6OmNyZWF0ZVRpbWVab25lSURFbnVtZXJhdGlvbigpPC9iPi4gUmF3CiAqIG9mZnNldHMgc3VjaCBhcyA8ZW0+IkdNVCswODozMCI8L2VtPiBhcmUgYWxzbyBhY2NlcHRlZC4KICogPC9wPgogKiA8L2xpPgogKiA8L3VsPgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIGFuZCA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogQHNpbmNlIDUuNQogKi8KZnVuY3Rpb24gaW50bGNhbF9zZXRfdGltZV96b25lKEludGxDYWxlbmRhciAkY2FsZW5kYXIsICR0aW1lem9uZSk6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBXaGV0aGVyIHRoaXMgb2JqZWN0J3MgdGltZSBpcyBhZnRlciB0aGF0IG9mIHRoZSBwYXNzZWQgb2JqZWN0CiAqIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5hZnRlci5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gSW50bENhbGVuZGFyICRvdGhlciA8cD5UaGUgY2FsZW5kYXIgd2hvc2UgdGltZSB3aWxsIGJlIGNoZWNrZWQgYWdhaW5zdCB0aGlzIG9iamVjdCdzIHRpbWUuPC9wPgogKiBAcmV0dXJuIGJvb2wKICogUmV0dXJucyA8Yj5UUlVFPC9iPiBpZiB0aGlzIG9iamVjdCdzIGN1cnJlbnQgdGltZSBpcyBhZnRlciB0aGF0IG9mIHRoZQogKiA8ZW0+Y2FsZW5kYXI8L2VtPiBhcmd1bWVudCdzIHRpbWUuIFJldHVybnMgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICogQWxzbyByZXR1cm5zIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLiBZb3UgY2FuIHVzZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bC5jb25maWd1cmF0aW9uLnBocCNpbmkuaW50bC51c2UtZXhjZXB0aW9ucyBleGNlcHRpb25zfSBvcgogKiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW50bC1nZXQtZXJyb3ItY29kZS5waHAgaW50bF9nZXRfZXJyb3JfY29kZSgpfSB0byBkZXRlY3QgZXJyb3IgY29uZGl0aW9ucy4KICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsY2FsX2FmdGVyKEludGxDYWxlbmRhciAkY2FsZW5kYXIsIEludGxDYWxlbmRhciAkb3RoZXIpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogV2hldGhlciB0aGlzIG9iamVjdCdzIHRpbWUgaXMgYmVmb3JlIHRoYXQgb2YgdGhlIHBhc3NlZCBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmJlZm9yZS5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gSW50bENhbGVuZGFyICRvdGhlciA8cD4gVGhlIGNhbGVuZGFyIHdob3NlIHRpbWUgd2lsbCBiZSBjaGVja2VkIGFnYWluc3QgdGhpcyBvYmplY3QncyB0aW1lLjwvcD4KICogQHJldHVybiBib29sCiAqIDxwPgogKiBSZXR1cm5zIDxiPlRSVUU8L0I+IGlmIHRoaXMgb2JqZWN0J3MgY3VycmVudCB0aW1lIGlzIGJlZm9yZSB0aGF0IG9mIHRoZQogKiA8ZW0+Y2FsZW5kYXI8L2VtPiBhcmd1bWVudCdzIHRpbWUuIFJldHVybnMgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICogQWxzbyByZXR1cm5zIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLiBZb3UgY2FuIHVzZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bC5jb25maWd1cmF0aW9uLnBocCNpbmkuaW50bC51c2UtZXhjZXB0aW9ucyBleGNlcHRpb25zfSBvcgogKiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW50bC1nZXQtZXJyb3ItY29kZS5waHAgaW50bF9nZXRfZXJyb3JfY29kZSgpfSB0byBkZXRlY3QgZXJyb3IgY29uZGl0aW9ucy4KICogPC9wPgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGxjYWxfYmVmb3JlKEludGxDYWxlbmRhciAkY2FsZW5kYXIsIEludGxDYWxlbmRhciAkb3RoZXIpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogU2V0IGEgdGltZSBmaWVsZCBvciBzZXZlcmFsIGNvbW1vbiBmaWVsZHMgYXQgb25jZQogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuc2V0LnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyICRjYWxlbmRhciA8cD4KICogVGhlIGNhbGVuZGFyIG9iamVjdCwgb24gdGhlIHByb2NlZHVyYWwgc3R5bGUgaW50ZXJmYWNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHllYXIgPHA+CiAqIE9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBkYXRlL3RpbWUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAjaW50bGNhbGVuZGFyLmNvbnN0YW50cyBmaWVsZCBjb25zdGFudHN9LiBUaGVzZSBhcmUgaW50ZWdlcgogKiB2YWx1ZXMgYmV0d2VlbiA8ZW0+MDwvZW0+IGFuZAogKiA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0NPVU5UPC9iPi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtb250aCA8cD4KICogVGhlIG5ldyB2YWx1ZSBmb3IgPGI+SW50bENhbGVuZGFyOjpGSUVMRF9NT05USDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkZGF5T2ZNb250aCBbb3B0aW9uYWxdIDxwPgogKiBUaGUgbmV3IHZhbHVlIGZvciA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0RBWV9PRl9NT05USDwvYj4uCiAqIFRoZSBtb250aCBzZXF1ZW5jZSBpcyB6ZXJvLWJhc2VkLCBpLmUuLCBKYW51YXJ5IGlzIHJlcHJlc2VudGVkIGJ5IDAsCiAqIEZlYnJ1YXJ5IGJ5IDEsIC4uLiwgRGVjZW1iZXIgaXMgMTEgYW5kIFVuZGVjZW1iZXIgKGlmIHRoZSBjYWxlbmRhciBoYXMKICogaXQpIGlzIDEyLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGhvdXIgW29wdGlvbmFsXQogKiA8cD4KICogVGhlIG5ldyB2YWx1ZSBmb3IgPGI+SW50bENhbGVuZGFyOjpGSUVMRF9IT1VSX09GX0RBWTwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkbWludXRlIFtvcHRpb25hbF0KICogPHA+CiAqIFRoZSBuZXcgdmFsdWUgZm9yIDxiPkludGxDYWxlbmRhcjo6RklFTERfTUlOVVRFPC9iPi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRzZWNvbmQgW29wdGlvbmFsXSA8cD4KICogVGhlIG5ldyB2YWx1ZSBmb3IgPGI+SW50bENhbGVuZGFyOjpGSUVMRF9TRUNPTkQ8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MgYW5kIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS41CiAqLwojW0xhbmd1YWdlQXdhcmUoWyc4LjMnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCiNbRGVwcmVjYXRlZCggcmVhc29uOiAndXNlIEludGxDYWxlbmRhcjo6c2V0KCksIEludGxDYWxlbmRhcjo6c2V0RGF0ZSgpLCBvciBJbnRsQ2FsZW5kYXI6OnNldERhdGVUaW1lKCkgaW5zdGVhZCcsIHNpbmNlOiAnOC40JyApXQpmdW5jdGlvbiBpbnRsY2FsX3NldChJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyLCBpbnQgJHllYXIsIGludCAkbW9udGgsIGludCAkZGF5T2ZNb250aCwgaW50ICRob3VyLCBpbnQgJG1pbnV0ZSwgaW50ICRzZWNvbmQpIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogQWRkIHZhbHVlIHRvIGZpZWxkIHdpdGhvdXQgY2FycnlpbmcgaW50byBtb3JlIHNpZ25pZmljYW50IGZpZWxkcwogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIucm9sbC5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmaWVsZCA8cD5PbmUgb2YgdGhlCiAqIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwIEludGxDYWxlbmRhcn0gZGF0ZS90aW1lCiAqIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwI2ludGxjYWxlbmRhci5jb25zdGFudHMgZmllbGQgY29uc3RhbnRzfS4KICogVGhlc2UgYXJlIGludGVnZXIgdmFsdWVzIGJldHdlZW4gPGVtPjA8L2VtPiBhbmQKICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludHxib29sICR2YWx1ZSA8cD4KICogVGhlIChzaWduZWQpIGFtb3VudCB0byBhZGQgdG8gdGhlIGZpZWxkLCA8Yj5UUlVFPC9iPiBmb3Igcm9sbGluZyB1cCAoYWRkaW5nCiAqIDxlbT4xPC9lbT4pLCBvciA8Yj5GQUxTRTwvYj4gZm9yIHJvbGxpbmcgZG93biAoc3VidHJhY3RpbmcKICogPGVtPjE8L2VtPikuCiAqIDwvcD4KICogQHJldHVybiBib29sIFJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogQHNpbmNlIDUuNQogKi8KZnVuY3Rpb24gaW50bGNhbF9yb2xsKAogICAgSW50bENhbGVuZGFyICRjYWxlbmRhciwKICAgIGludCAkZmllbGQsCiAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy40JyldICR2YWx1ZSA9IG51bGwsCiAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAkdmFsdWUKKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIENsZWFyIGEgZmllbGQgb3IgYWxsIGZpZWxkcwogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuY2xlYXIucGhwCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHBhcmFtIGludHxudWxsICRmaWVsZCBbb3B0aW9uYWxdIDxwPgogKiBPbmUgb2YgdGhlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwIEludGxDYWxlbmRhcn0gZGF0ZS90aW1lIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwI2ludGxjYWxlbmRhci5jb25zdGFudHMgZmllbGQgY29uc3RhbnRzfS4gVGhlc2UgYXJlIGludGVnZXIKICogdmFsdWVzIGJldHdlZW4gPGVtPjA8L2VtPiBhbmQKICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBib29sIFJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4gRmFpbHVyZSBjYW4gb25seSBvY2N1ciBpcyBpbnZhbGlkIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQuCiAqIEBzaW5jZSA1LjUKICovCiNbTGFuZ3VhZ2VBd2FyZShbJzguMycgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KZnVuY3Rpb24gaW50bGNhbF9jbGVhcihJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyLCA/aW50ICRmaWVsZCA9IG51bGwpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogQ2FsY3VsYXRlIGRpZmZlcmVuY2UgYmV0d2VlbiBnaXZlbiB0aW1lIGFuZCB0aGlzIG9iamVjdCdzIHRpbWUKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmZpZWxkZGlmZmVyZW5jZS5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gZmxvYXQgJHRpbWVzdGFtcCA8cD4KICogVGhlIHRpbWUgYWdhaW5zdCB3aGljaCB0byBjb21wYXJlIHRoZSBxdWFudGl0eSByZXByZXNlbnRlZCBieSB0aGUKICogPGVtPmZpZWxkPC9lbT4uIEZvciB0aGUgcmVzdWx0IHRvIGJlIHBvc2l0aXZlLCB0aGUgdGltZQogKiBnaXZlbiBmb3IgdGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhaGVhZCBvZiB0aGUgdGltZSBvZiB0aGUgb2JqZWN0IHRoZQogKiBtZXRob2QgaXMgYmVpbmcgaW52b2tlZCBvbi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmaWVsZCA8cD4KICogVGhlIGZpZWxkIHRoYXQgcmVwcmVzZW50cyB0aGUgcXVhbnRpdHkgYmVpbmcgY29tcGFyZWQuCiAqIDwvcD4KICoKICogPHA+CiAqIE9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBkYXRlL3RpbWUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAjaW50bGNhbGVuZGFyLmNvbnN0YW50cyBmaWVsZCBjb25zdGFudHN9LiBUaGVzZSBhcmUgaW50ZWdlcgogKiB2YWx1ZXMgYmV0d2VlbiA8ZW0+MDwvZW0+IGFuZAogKiA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0NPVU5UPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGludCBSZXR1cm5zIGEgKHNpZ25lZCkgZGlmZmVyZW5jZSBvZiB0aW1lIGluIHRoZSB1bml0IGFzc29jaWF0ZWQgd2l0aCB0aGUKICogc3BlY2lmaWVkIGZpZWxkIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCiNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludHxmYWxzZSddLCBkZWZhdWx0OiAnaW50JyldCmZ1bmN0aW9uIGludGxjYWxfZmllbGRfZGlmZmVyZW5jZShJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyLCBmbG9hdCAkdGltZXN0YW1wLCBpbnQgJGZpZWxkKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIFRoZSBtYXhpbXVtIHZhbHVlIGZvciBhIGZpZWxkLCBjb25zaWRlcmluZyB0aGUgb2JqZWN0J3MgY3VycmVudCB0aW1lCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5nZXRhY3R1YWxtYXhpbXVtLnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyICRjYWxlbmRhciA8cD4KICogVGhlIGNhbGVuZGFyIG9iamVjdCwgb24gdGhlIHByb2NlZHVyYWwgc3R5bGUgaW50ZXJmYWNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZpZWxkIDxwPgogKiBPbmUgb2YgdGhlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwIEludGxDYWxlbmRhcn0gZGF0ZS90aW1lIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwI2ludGxjYWxlbmRhci5jb25zdGFudHMgZmllbGQgY29uc3RhbnRzfS4gVGhlc2UgYXJlIGludGVnZXIKICogdmFsdWVzIGJldHdlZW4gPGVtPjA8L2VtPiBhbmQKICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBpbnQKICogQW4ge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLmludGVnZXIucGhwIGludH0gcmVwcmVzZW50aW5nIHRoZSBtYXhpbXVtIHZhbHVlIGluIHRoZSB1bml0cyBhc3NvY2lhdGVkCiAqIHdpdGggdGhlIGdpdmVuIDxlbT5maWVsZDwvZW0+IG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCiNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludHxmYWxzZSddLCBkZWZhdWx0OiAnaW50JyldCmZ1bmN0aW9uIGludGxjYWxfZ2V0X2FjdHVhbF9tYXhpbXVtKEludGxDYWxlbmRhciAkY2FsZW5kYXIsIGludCAkZmllbGQpIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogVGhlIG1pbmltdW0gdmFsdWUgZm9yIGEgZmllbGQsIGNvbnNpZGVyaW5nIHRoZSBvYmplY3QncyBjdXJyZW50IHRpbWUKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldGFjdHVhbG1pbmltdW0ucGhwCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmllbGQgPHA+CiAqIE9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBkYXRlL3RpbWUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAjaW50bGNhbGVuZGFyLmNvbnN0YW50cyBmaWVsZCBjb25zdGFudHN9LgogKiBUaGVzZSBhcmUgaW50ZWdlciB2YWx1ZXMgYmV0d2VlbiA8ZW0+MDwvZW0+IGFuZAogKiA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0NPVU5UPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGludAogKiBBbiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuaW50ZWdlci5waHAgaW50fSByZXByZXNlbnRpbmcgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIGZpZWxkJ3MKICogdW5pdCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQojW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnR8ZmFsc2UnXSwgZGVmYXVsdDogJ2ludCcpXQpmdW5jdGlvbiBpbnRsY2FsX2dldF9hY3R1YWxfbWluaW11bShJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyLCBpbnQgJGZpZWxkKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5nZXRkYXlvZndlZWt0eXBlLnBocAogKiBUZWxsIHdoZXRoZXIgYSBkYXkgaXMgYSB3ZWVrZGF5LCB3ZWVrZW5kIG9yIGEgZGF5IHRoYXQgaGFzIGEgdHJhbnNpdGlvbiBiZXR3ZWVuIHRoZSB0d28KICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRkYXlPZldlZWsgPHA+CiAqIE9uZSBvZiB0aGUgY29uc3RhbnRzIDxiPkludGxDYWxlbmRhcjo6RE9XX1NVTkRBWTwvYj4sCiAqIDxiPkludGxDYWxlbmRhcjo6RE9XX01PTkRBWTwvYj4sIC4uLiwKICogPGI+SW50bENhbGVuZGFyOjpET1dfU0FUVVJEQVk8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gaW50CiAqIFJldHVybnMgb25lIG9mIHRoZSBjb25zdGFudHMKICogPGI+SW50bENhbGVuZGFyOjpET1dfVFlQRV9XRUVLREFZPC9iPiwKICogPGI+SW50bENhbGVuZGFyOjpET1dfVFlQRV9XRUVLRU5EPC9iPiwKICogPGI+SW50bENhbGVuZGFyOjpET1dfVFlQRV9XRUVLRU5EX09GRlNFVDwvYj4gb3IKICogPGI+SW50bENhbGVuZGFyOjpET1dfVFlQRV9XRUVLRU5EX0NFQVNFPC9iPiBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQojW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnR8ZmFsc2UnXSwgZGVmYXVsdDogJ2ludCcpXQpmdW5jdGlvbiBpbnRsY2FsX2dldF9kYXlfb2Zfd2Vla190eXBlKEludGxDYWxlbmRhciAkY2FsZW5kYXIsIGludCAkZGF5T2ZXZWVrKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIGZvciB0aGUgY2FsZW5kYXIncyBsb2NhbGUKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldGZpcnN0ZGF5b2Z3ZWVrLnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyICRjYWxlbmRhciA8cD4KICogVGhlIGNhbGVuZGFyIG9iamVjdCwgb24gdGhlIHByb2NlZHVyYWwgc3R5bGUgaW50ZXJmYWNlLgogKiA8L3A+CiAqIEByZXR1cm4gaW50CiAqIE9uZSBvZiB0aGUgY29uc3RhbnRzIDxiPkludGxDYWxlbmRhcjo6RE9XX1NVTkRBWTwvYj4sCiAqIDxiPkludGxDYWxlbmRhcjo6RE9XX01PTkRBWTwvYj4sIC4uLiwKICogPGI+SW50bENhbGVuZGFyOjpET1dfU0FUVVJEQVk8L2I+IG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCiNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludHxmYWxzZSddLCBkZWZhdWx0OiAnaW50JyldCmZ1bmN0aW9uIGludGxjYWxfZ2V0X2ZpcnN0X2RheV9vZl93ZWVrKEludGxDYWxlbmRhciAkY2FsZW5kYXIpIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogR2V0IHRoZSBsYXJnZXN0IGxvY2FsIG1pbmltdW0gdmFsdWUgZm9yIGEgZmllbGQKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldGdyZWF0ZXN0bWluaW11bS5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmaWVsZCA8cD4KICogT25lIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCBJbnRsQ2FsZW5kYXJ9IGRhdGUvdGltZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCNpbnRsY2FsZW5kYXIuY29uc3RhbnRzIGZpZWxkIGNvbnN0YW50c30uIFRoZXNlIGFyZSBpbnRlZ2VyCiAqIHZhbHVlcyBiZXR3ZWVuIDxlbT4wPC9lbT4gYW5kCiAqIDxiPkludGxDYWxlbmRhcjo6RklFTERfQ09VTlQ8L2I+LjwvcD4KICogQHJldHVybiBpbnQKICogQW4ge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLmludGVnZXIucGhwIGludH0gcmVwcmVzZW50aW5nIGEgZmllbGQgdmFsdWUsIGluIHRoZSBmaWVsZCdzCiAqIHVuaXQsIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGxjYWxfZ3JlYXRlc19taW5pbXVtKCRjYWxlbmRhciwgJGZpZWxkKSB7fQoKLyoqCiAqIChQSFAgJmd0Oz0gNS41LjAsIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldHMgdGhlIHZhbHVlIGZvciBhIHNwZWNpZmljIGZpZWxkLgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0LnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyICRjYWxlbmRhciA8cD4KICogVGhlIEludGxDYWxlbmRhciByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmaWVsZCA8cD4KICogT25lIG9mIHRoZSBJbnRsQ2FsZW5kYXIgZGF0ZS90aW1lIGZpZWxkIGNvbnN0YW50cy4gVGhlc2UgYXJlIGludGVnZXIgdmFsdWVzIGJldHdlZW4gMCBhbmQgSW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVC4KICogPC9wPgogKiBAcmV0dXJuIGludCBBbiBpbnRlZ2VyIHdpdGggdGhlIHZhbHVlIG9mIHRoZSB0aW1lIGZpZWxkLgogKi8KI1tQdXJlXQojW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnR8ZmFsc2UnXSwgZGVmYXVsdDogJ2ludCcpXQpmdW5jdGlvbiBpbnRsY2FsX2dldChJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyLCBpbnQgJGZpZWxkKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCB0aGUgc21hbGxlc3QgbG9jYWwgbWF4aW11bSBmb3IgYSBmaWVsZAogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0bGVhc3RtYXhpbXVtLnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyICRjYWxlbmRhciA8cD4KICogVGhlIGNhbGVuZGFyIG9iamVjdCwgb24gdGhlIHByb2NlZHVyYWwgc3R5bGUgaW50ZXJmYWNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZpZWxkIDxwPgogKiBPbmUgb2YgdGhlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwIEludGxDYWxlbmRhcn0gZGF0ZS90aW1lIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwI2ludGxjYWxlbmRhci5jb25zdGFudHMgZmllbGQgY29uc3RhbnRzfS4gVGhlc2UgYXJlIGludGVnZXIKICogdmFsdWVzIGJldHdlZW4gPGVtPjA8L2VtPiBhbmQKICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBpbnQKICogPHA+QW4ge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLmludGVnZXIucGggaW50fSByZXByZXNlbnRpbmcgYSBmaWVsZCB2YWx1ZSBpbiB0aGUgZmllbGQncwogKiB1bml0IG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiA8L3A+CiAqIEBzaW5jZSA1LjUKICovCiNbUHVyZV0KI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50fGZhbHNlJ10sIGRlZmF1bHQ6ICdpbnQnKV0KZnVuY3Rpb24gaW50bGNhbF9nZXRfbGVhc3RfbWF4aW11bShJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyLCBpbnQgJGZpZWxkKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCB0aGUgbGFyZ2VzdCBsb2NhbCBtaW5pbXVtIHZhbHVlIGZvciBhIGZpZWxkCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5nZXRncmVhdGVzdG1pbmltdW0ucGhwCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmllbGQgPHA+CiAqIE9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBkYXRlL3RpbWUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAjaW50bGNhbGVuZGFyLmNvbnN0YW50cyBmaWVsZCBjb25zdGFudHN9LiBUaGVzZSBhcmUgaW50ZWdlcgogKiB2YWx1ZXMgYmV0d2VlbiA8ZW0+MDwvZW0+IGFuZAogKiA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0NPVU5UPC9iPi48L3A+CiAqIEByZXR1cm4gaW50CiAqIEFuIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5pbnRlZ2VyLnBocCBpbnR9IHJlcHJlc2VudGluZyBhIGZpZWxkIHZhbHVlLCBpbiB0aGUgZmllbGQncwogKiB1bml0LCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQojW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnR8ZmFsc2UnXSwgZGVmYXVsdDogJ2ludCcpXQpmdW5jdGlvbiBpbnRsY2FsX2dldF9ncmVhdGVzdF9taW5pbXVtKEludGxDYWxlbmRhciAkY2FsZW5kYXIsIGludCAkZmllbGQpIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogR2V0IHRoZSBsb2NhbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldGxvY2FsZS5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICR0eXBlIDxwPgogKiBXaGV0aGVyIHRvIGZldGNoIHRoZSBhY3R1YWwgbG9jYWxlICh0aGUgbG9jYWxlIGZyb20gd2hpY2ggdGhlIGNhbGVuZGFyCiAqIGRhdGEgb3JpZ2luYXRlcywgd2l0aCA8Yj5Mb2NhbGU6OkFDVFVBTF9MT0NBTEU8L2I+KSBvciB0aGUKICogdmFsaWQgbG9jYWxlLCBpLmUuLCB0aGUgbW9zdCBzcGVjaWZpYyBsb2NhbGUgc3VwcG9ydGVkIGJ5IElDVSByZWxhdGl2ZWx5CiAqIHRvIHRoZSByZXF1ZXN0ZWQgbG9jYWxlIOKAkyBzZWUgPGI+TG9jYWxlOjpWQUxJRF9MT0NBTEU8L2I+LgogKiBGcm9tIHRoZSBtb3N0IGdlbmVyYWwgdG8gdGhlIG1vc3Qgc3BlY2lmaWMsIHRoZSBsb2NhbGVzIGFyZSBvcmRlcmVkIGluCiAqIHRoaXMgZmFzaGlvbiDigJMgYWN0dWFsIGxvY2FsZSwgdmFsaWQgbG9jYWxlLCByZXF1ZXN0ZWQgbG9jYWxlLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nCiAqIEEgbG9jYWxlIHN0cmluZyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQojW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8ZmFsc2UnXSwgZGVmYXVsdDogJ3N0cmluZycpXQpmdW5jdGlvbiBpbnRsY2FsX2dldF9sb2NhbGUoSW50bENhbGVuZGFyICRjYWxlbmRhciwgaW50ICR0eXBlKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCB0aGUgZ2xvYmFsIG1heGltdW0gdmFsdWUgZm9yIGEgZmllbGQKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldG1heGltdW0ucGhwCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmllbGQgPHA+CiAqIE9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBkYXRlL3RpbWUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAjaW50bGNhbGVuZGFyLmNvbnN0YW50cyBmaWVsZCBjb25zdGFudHN9LiBUaGVzZSBhcmUgaW50ZWdlcgogKiB2YWx1ZXMgYmV0d2VlbiA8ZW0+MDwvZW0+IGFuZAogKiA8Yj5JbnRsQ2FsZW5kYXI6OkZJRUxEX0NPVU5UPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZQogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGNhbF9nZXRfbWF4aW11bSgkY2FsZW5kYXIsICRmaWVsZCkge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0bWluaW1hbGRheXNpbmZpcnN0d2Vlay5waHAKICogR2V0IG1pbmltYWwgbnVtYmVyIG9mIGRheXMgdGhlIGZpcnN0IHdlZWsgaW4gYSB5ZWFyIG9yIG1vbnRoIGNhbiBoYXZlCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHJldHVybiBpbnQKICogQW4ge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLmludGVnZXIucGhwICBpbnR9IHJlcHJlc2VudGluZyBhIG51bWJlciBvZiBkYXlzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCiNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludHxmYWxzZSddLCBkZWZhdWx0OiAnaW50JyldCmZ1bmN0aW9uIGludGxjYWxfZ2V0X21pbmltYWxfZGF5c19pbl9maXJzdF93ZWVrKEludGxDYWxlbmRhciAkY2FsZW5kYXIpIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogR2V0IHRoZSBnbG9iYWwgbWluaW11bSB2YWx1ZSBmb3IgYSBmaWVsZAogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0bWluaW11bS5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmaWVsZCA8cD4KICogT25lIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCBJbnRsQ2FsZW5kYXJ9IGRhdGUvdGltZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bGNhbGVuZGFyLnBocCNpbnRsY2FsZW5kYXIuY29uc3RhbnRzIGZpZWxkfS4gVGhlc2UgYXJlIGludGVnZXIKICogdmFsdWVzIGJldHdlZW4gPGVtPjA8L2VtPiBhbmQKICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBpbnQKICogQW4gaW50IHJlcHJlc2VudGluZyBhIHZhbHVlIGZvciB0aGUgZ2l2ZW4gZmllbGQgaW4gdGhlIGZpZWxkJ3MgdW5pdCBvciBGQUxTRSBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCiNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludHxmYWxzZSddLCBkZWZhdWx0OiAnaW50JyldCmZ1bmN0aW9uIGludGxjYWxfZ2V0X21pbmltdW0oSW50bENhbGVuZGFyICRjYWxlbmRhciwgaW50ICRmaWVsZCkge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBHZXQgdGhlIG9iamVjdCdzIHRpbWV6b25lCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5nZXR0aW1lem9uZS5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcmV0dXJuIEludGxUaW1lWm9uZXxmYWxzZQogKiBBbiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bHRpbWV6b25lLnBocCBJbnRsVGltZVpvbmV9IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBvbmUgdXNlZAogKiBpbnRlcm5hbGx5IGluIHRoaXMgb2JqZWN0LgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGxjYWxfZ2V0X3RpbWVfem9uZShJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyKTogSW50bFRpbWVab25lfGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogR2V0IHRoZSBjYWxlbmRhciB0eXBlCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5nZXR0eXBlLnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyICRjYWxlbmRhciA8cD4KICogVGhlIGNhbGVuZGFyIG9iamVjdCwgb24gdGhlIHByb2NlZHVyYWwgc3R5bGUgaW50ZXJmYWNlLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nCiAqIEEge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnN0cmluZy5waHAgc3RyaW5nfSByZXByZXNlbnRpbmcgdGhlIGNhbGVuZGFyIHR5cGUsIHN1Y2ggYXMKICogPGVtPidncmVnb3JpYW4nPC9lbT4sIDxlbT4naXNsYW1pYyc8L2VtPiwgZXRjLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGxjYWxfZ2V0X3R5cGUoSW50bENhbGVuZGFyICRjYWxlbmRhcik6IHN0cmluZyB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCB0aW1lIG9mIHRoZSBkYXkgYXQgd2hpY2ggd2Vla2VuZCBiZWdpbnMgb3IgZW5kcwogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0d2Vla2VuZHRyYW5zaXRpb24ucGhwCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZGF5T2ZXZWVrIDxwPgogKiBPbmUgb2YgdGhlIGNvbnN0YW50cyA8Yj5JbnRsQ2FsZW5kYXI6OkRPV19TVU5EQVk8L2I+LAogKiA8Yj5JbnRsQ2FsZW5kYXI6OkRPV19NT05EQVk8L2I+LCAuLi4sCiAqIDxiPkludGxDYWxlbmRhcjo6RE9XX1NBVFVSREFZPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGludAogKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpbnRvIHRoZSBkYXkgYXQgd2hpY2ggdGhlIHRoZSB3ZWVrZW5kIGJlZ2lucyBvcgogKiBlbmRzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCiNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludHxmYWxzZSddLCBkZWZhdWx0OiAnaW50JyldCmZ1bmN0aW9uIGludGxjYWxfZ2V0X3dlZWtlbmRfdHJhbnNpdGlvbihJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyLCBpbnQgJGRheU9mV2Vlaykge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBXaGV0aGVyIHRoZSBvYmplY3QncyB0aW1lIGlzIGluIERheWxpZ2h0IFNhdmluZ3MgVGltZQogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuaW5kYXlsaWdodHRpbWUucGhwCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHJldHVybiBib29sCiAqIFJldHVybnMgPGI+VFJVRTwvYj4gaWYgdGhlIGRhdGUgaXMgaW4gRGF5bGlnaHQgU2F2aW5ncyBUaW1lLCA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlLgogKiBUaGUgdmFsdWUgPGI+RkFMU0U8L2I+IG1heSBhbHNvIGJlIHJldHVybmVkIG9uIGZhaWx1cmUsIGZvciBpbnN0YW5jZSBhZnRlcgogKiBzcGVjaWZ5aW5nIGludmFsaWQgZmllbGQgdmFsdWVzIG9uIG5vbi1sZW5pZW50IG1vZGU7IHVzZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bC5jb25maWd1cmF0aW9uLnBocCNpbmkuaW50bC51c2UtZXhjZXB0aW9ucyBleGNlcHRpb25zfSBvciBxdWVyeQogKiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW50bC1nZXQtZXJyb3ItY29kZS5waHAgaW50bF9nZXRfZXJyb3JfY29kZSgpfSB0byBkaXNhbWJpZ3VhdGUuCiAqIEBzaW5jZSA1LjUKICovCiNbUHVyZV0KZnVuY3Rpb24gaW50bGNhbF9pbl9kYXlsaWdodF90aW1lKEludGxDYWxlbmRhciAkY2FsZW5kYXIpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogV2hldGhlciBkYXRlL3RpbWUgaW50ZXJwcmV0YXRpb24gaXMgaW4gbGVuaWVudCBtb2RlCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5pc2xlbmllbnQucGhwCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHJldHVybiBib29sCiAqIEEge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLmJvb2xlYW4ucGhwIGJvb2x9IHJlcHJlc2VudGluZyB3aGV0aGVyIHRoZSBjYWxlbmRhciBpcyBzZXQgdG8gbGVuaWVudCBtb2RlLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGxjYWxfaXNfbGVuaWVudChJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIFdoZXRoZXIgYSBmaWVsZCBpcyBzZXQKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmlzc2V0LnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyICRjYWxlbmRhciA8cD4KICogVGhlIGNhbGVuZGFyIG9iamVjdCwgb24gdGhlIHByb2NlZHVyYWwgc3R5bGUgaW50ZXJmYWNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZpZWxkIDxwPgogKiBPbmUgb2YgdGhlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwIEludGxDYWxlbmRhcn0gZGF0ZS90aW1lIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwI2ludGxjYWxlbmRhci5jb25zdGFudHMgZmllbGQgY29uc3RhbnRzfS4gVGhlc2UgYXJlIGludGVnZXIKICogdmFsdWVzIGJldHdlZW4gPGVtPjA8L2VtPiBhbmQKICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBib29sIEFzc3VtaW5nIHRoZXJlIGFyZSBubyBhcmd1bWVudCBlcnJvcnMsIHJldHVybnMgPGI+VFJVRTwvYj4gaWlmIHRoZSBmaWVsZCBpcyBzZXQuCiAqIEBzaW5jZSA1LjUKICovCiNbUHVyZV0KZnVuY3Rpb24gaW50bGNhbF9pc19zZXQoSW50bENhbGVuZGFyICRjYWxlbmRhciwgaW50ICRmaWVsZCk6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBHZXQgdGhlIGdsb2JhbCBtYXhpbXVtIHZhbHVlIGZvciBhIGZpZWxkCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5nZXRtYXhpbXVtLnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyICRjYWxlbmRhciA8cD4KICogVGhlIGNhbGVuZGFyIG9iamVjdCwgb24gdGhlIHByb2NlZHVyYWwgc3R5bGUgaW50ZXJmYWNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZpZWxkIDxwPgogKiBPbmUgb2YgdGhlIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwIEludGxDYWxlbmRhcn0gZGF0ZS90aW1lIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbnRsY2FsZW5kYXIucGhwI2ludGxjYWxlbmRhci5jb25zdGFudHMgZmllbGQgY29uc3RhbnRzfS4gVGhlc2UgYXJlIGludGVnZXIKICogdmFsdWVzIGJldHdlZW4gPGVtPjA8L2VtPiBhbmQKICogPGI+SW50bENhbGVuZGFyOjpGSUVMRF9DT1VOVDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UKICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQojW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnR8ZmFsc2UnXSwgZGVmYXVsdDogJ2ludCcpXQpmdW5jdGlvbiBpbnRsY2FsX2dldF9tYXhpbXVtKEludGxDYWxlbmRhciAkY2FsZW5kYXIsIGludCAkZmllbGQpIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogV2hldGhlciBhbm90aGVyIGNhbGVuZGFyIGlzIGVxdWFsIGJ1dCBmb3IgYSBkaWZmZXJlbnQgdGltZQogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuaXNlcXVpdmFsZW50dG8ucGhwCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHBhcmFtIEludGxDYWxlbmRhciAkb3RoZXIgVGhlIG90aGVyIGNhbGVuZGFyIGFnYWluc3Qgd2hpY2ggdGhlIGNvbXBhcmlzb24gaXMgdG8gYmUgbWFkZS4KICogQHJldHVybiBib29sCiAqIEFzc3VtaW5nIHRoZXJlIGFyZSBubyBhcmd1bWVudCBlcnJvcnMsIHJldHVybnMgPGI+VFJVRTwvYj4gaWlmIHRoZSBjYWxlbmRhcnMgYXJlIGVxdWl2YWxlbnQgZXhjZXB0IHBvc3NpYmx5IGZvciB0aGVpciBzZXQgdGltZS4KICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsY2FsX2lzX2VxdWl2YWxlbnRfdG8oSW50bENhbGVuZGFyICRjYWxlbmRhciwgSW50bENhbGVuZGFyICRvdGhlcik6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBXaGV0aGVyIGEgY2VydGFpbiBkYXRlL3RpbWUgaXMgaW4gdGhlIHdlZWtlbmQKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmlzd2Vla2VuZC5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gZmxvYXR8bnVsbCAkdGltZXN0YW1wIFtvcHRpb25hbF0gPHA+CiAqIEFuIG9wdGlvbmFsIHRpbWVzdGFtcCByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlCiAqIGVwb2NoLCBleGNsdWRpbmcgbGVhcCBzZWNvbmRzLiBJZiA8Yj5OVUxMPC9iPiwgdGhpcyBvYmplY3QncyBjdXJyZW50IHRpbWUgaXMKICogdXNlZCBpbnN0ZWFkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbAogKiA8cD4gQSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuYm9vbGVhbi5waHAgYm9vbH0gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBnaXZlbiBvciB0aGlzIG9iamVjdCdzIHRpbWUgb2NjdXJzCiAqIGluIGEgd2Vla2VuZC4KICogPC9wPgogKiA8cD4KICogVGhlIHZhbHVlIDxiPkZBTFNFPC9iPiBtYXkgYWxzbyBiZSByZXR1cm5lZCBvbiBmYWlsdXJlLCBmb3IgaW5zdGFuY2UgYWZ0ZXIgZ2l2aW5nCiAqIGEgZGF0ZSBvdXQgb2YgYm91bmRzIG9uIG5vbi1sZW5pZW50IG1vZGU7IHVzZSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bC5jb25maWd1cmF0aW9uLnBocCNpbmkuaW50bC51c2UtZXhjZXB0aW9ucyBleGNlcHRpb25zfSBvciBxdWVyeQogKiB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW50bC1nZXQtZXJyb3ItY29kZS5waHAgaW50bF9nZXRfZXJyb3JfY29kZSgpfSB0byBkaXNhbWJpZ3VhdGUuPC9wPgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGxjYWxfaXNfd2Vla2VuZChJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyLCA/ZmxvYXQgJHRpbWVzdGFtcCA9IG51bGwpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogU2V0IHRoZSBkYXkgb24gd2hpY2ggdGhlIHdlZWsgaXMgZGVlbWVkIHRvIHN0YXJ0CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5zZXRmaXJzdGRheW9md2Vlay5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRkYXlPZldlZWsgPHA+CiAqIE9uZSBvZiB0aGUgY29uc3RhbnRzIDxiPkludGxDYWxlbmRhcjo6RE9XX1NVTkRBWTwvYj4sCiAqIDxiPkludGxDYWxlbmRhcjo6RE9XX01PTkRBWTwvYj4sIC4uLiwKICogPGI+SW50bENhbGVuZGFyOjpET1dfU0FUVVJEQVk8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4gRmFpbHVyZSBjYW4gb25seSBoYXBwZW4gZHVlIHRvIGludmFsaWQgcGFyYW1ldGVycy4KICogQHNpbmNlIDUuNQogKi8KI1tMYW5ndWFnZUF3YXJlKFsnOC4zJyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQpmdW5jdGlvbiBpbnRsY2FsX3NldF9maXJzdF9kYXlfb2Zfd2VlayhJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyLCBpbnQgJGRheU9mV2Vlaykge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBTZXQgd2hldGhlciBkYXRlL3RpbWUgaW50ZXJwcmV0YXRpb24gaXMgdG8gYmUgbGVuaWVudAogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuc2V0bGVuaWVudC5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkbGVuaWVudCA8cD4KICogVXNlIDxiPlRSVUU8L2I+IHRvIGFjdGl2YXRlIHRoZSBsZW5pZW50IG1vZGU7IDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAqIDwvcD4KICogQHJldHVybiBib29sIFJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4gRmFpbHVyZSBjYW4gb25seSBoYXBwZW4gZHVlIHRvIGludmFsaWQgcGFyYW1ldGVycy4KICogQHNpbmNlIDUuNQogKi8KI1tMYW5ndWFnZUF3YXJlKFsnOC4zJyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQpmdW5jdGlvbiBpbnRsY2FsX3NldF9sZW5pZW50KEludGxDYWxlbmRhciAkY2FsZW5kYXIsIGJvb2wgJGxlbmllbnQpIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogR2V0IGJlaGF2aW9yIGZvciBoYW5kbGluZyByZXBlYXRpbmcgd2FsbCB0aW1lCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjYWxlbmRhci5nZXRyZXBlYXRlZHdhbGx0aW1lb3B0aW9uLnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyICRjYWxlbmRhciA8cD4KICogVGhlIGNhbGVuZGFyIG9iamVjdCwgb24gdGhlIHByb2NlZHVyYWwgc3R5bGUgaW50ZXJmYWNlLgogKiA8L3A+CiAqIEByZXR1cm4gaW50CiAqIE9uZSBvZiB0aGUgY29uc3RhbnRzIDxiPkludGxDYWxlbmRhcjo6V0FMTFRJTUVfRklSU1Q8L2I+IG9yCiAqIDxiPkludGxDYWxlbmRhcjo6V0FMTFRJTUVfTEFTVDwvYj4uCiAqIEBzaW5jZSA1LjUKICovCiNbUHVyZV0KZnVuY3Rpb24gaW50bGNhbF9nZXRfcmVwZWF0ZWRfd2FsbF90aW1lX29wdGlvbihJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyKTogaW50IHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogQ29tcGFyZSB0aW1lIG9mIHR3byBJbnRsQ2FsZW5kYXIgb2JqZWN0cyBmb3IgZXF1YWxpdHkKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmVxdWFscy5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gSW50bENhbGVuZGFyICRvdGhlcgogKiBAcmV0dXJuIGJvb2wgPHA+CiAqIFJldHVybnMgPGI+VFJVRTwvYj4gaWYgdGhlIGN1cnJlbnQgdGltZSBvZiBib3RoIHRoaXMgYW5kIHRoZSBwYXNzZWQgaW4KICoge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBvYmplY3QgYXJlIHRoZSBzYW1lLCBvciA8Yj5GQUxTRTwvYj4KICogb3RoZXJ3aXNlLiBUaGUgdmFsdWUgPGI+RkFMU0U8L2I+IGNhbiBhbHNvIGJlIHJldHVybmVkIG9uIGZhaWx1cmUuIFRoaXMgY2FuIG9ubHkKICogaGFwcGVuIGlmIGJhZCBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbi4gSW4gYW55IGNhc2UsIHRoZSB0d28gY2FzZXMgY2FuIGJlCiAqIGRpc3Rpbmd1aXNoZWQgYnkgY2FsbGluZyAge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmludGwtZ2V0LWVycm9yLWNvZGUucGhwIGludGxfZ2V0X2Vycm9yX2NvZGUoKX0uCiAqIDwvcD4KICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsY2FsX2VxdWFscyhJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyLCBJbnRsQ2FsZW5kYXIgJG90aGVyKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCBiZWhhdmlvciBmb3IgaGFuZGxpbmcgc2tpcHBlZCB3YWxsIHRpbWUKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLmdldHNraXBwZWR3YWxsdGltZW9wdGlvbi5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcmV0dXJuIGludAogKiBPbmUgb2YgdGhlIGNvbnN0YW50cyA8Yj5JbnRsQ2FsZW5kYXI6OldBTExUSU1FX0ZJUlNUPC9iPiwKICogPGI+SW50bENhbGVuZGFyOjpXQUxMVElNRV9MQVNUPC9iPiBvcgogKiA8Yj5JbnRsQ2FsZW5kYXI6OldBTExUSU1FX05FWFRfVkFMSUQ8L2I+LgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGxjYWxfZ2V0X3NraXBwZWRfd2FsbF90aW1lX29wdGlvbihJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyKTogaW50IHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogU2V0IGJlaGF2aW9yIGZvciBoYW5kbGluZyByZXBlYXRpbmcgd2FsbCB0aW1lcyBhdCBuZWdhdGl2ZSB0aW1lem9uZSBvZmZzZXQgdHJhbnNpdGlvbnMKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLnNldHJlcGVhdGVkd2FsbHRpbWVvcHRpb24ucGhwCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHBhcmFtIGludCAkb3B0aW9uIDxwPgogKiBPbmUgb2YgdGhlIGNvbnN0YW50cyA8Yj5JbnRsQ2FsZW5kYXI6OldBTExUSU1FX0ZJUlNUPC9iPiBvcgogKiA8Yj5JbnRsQ2FsZW5kYXI6OldBTExUSU1FX0xBU1Q8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbAogKiBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuIEZhaWx1cmUgY2FuIG9ubHkgaGFwcGVuIGR1ZSB0byBpbnZhbGlkIHBhcmFtZXRlcnMuCiAqIEBzaW5jZSA1LjUKICovCiNbTGFuZ3VhZ2VBd2FyZShbJzguMycgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KZnVuY3Rpb24gaW50bGNhbF9zZXRfcmVwZWF0ZWRfd2FsbF90aW1lX29wdGlvbihJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyLCBpbnQgJG9wdGlvbikge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBTZXQgYmVoYXZpb3IgZm9yIGhhbmRsaW5nIHNraXBwZWQgd2FsbCB0aW1lcyBhdCBwb3NpdGl2ZSB0aW1lem9uZSBvZmZzZXQgdHJhbnNpdGlvbnMKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLnNldHNraXBwZWR3YWxsdGltZW9wdGlvbi5waHAKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIgPHA+CiAqIFRoZSBjYWxlbmRhciBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvcHRpb24gPHA+CiAqIE9uZSBvZiB0aGUgY29uc3RhbnRzIDxiPkludGxDYWxlbmRhcjo6V0FMTFRJTUVfRklSU1Q8L2I+LAogKiA8Yj5JbnRsQ2FsZW5kYXI6OldBTExUSU1FX0xBU1Q8L2I+IG9yCiAqIDxiPkludGxDYWxlbmRhcjo6V0FMTFRJTUVfTkVYVF9WQUxJRDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBib29sCiAqIDxwPgogKiBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuIEZhaWx1cmUgY2FuIG9ubHkgaGFwcGVuIGR1ZSB0byBpbnZhbGlkIHBhcmFtZXRlcnMuCiAqIDwvcD4KICogQHNpbmNlIDUuNQogKi8KI1tMYW5ndWFnZUF3YXJlKFsnOC4zJyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQpmdW5jdGlvbiBpbnRsY2FsX3NldF9za2lwcGVkX3dhbGxfdGltZV9vcHRpb24oSW50bENhbGVuZGFyICRjYWxlbmRhciwgaW50ICRvcHRpb24pIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTIpPGJyLz4KICogQ3JlYXRlIGFuIEludGxDYWxlbmRhciBmcm9tIGEgRGF0ZVRpbWUgb2JqZWN0IG9yIHN0cmluZwogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZnJvbWRhdGV0aW1lLnBocAogKiBAcGFyYW0gRGF0ZVRpbWV8c3RyaW5nICRkYXRldGltZSA8cD4KICogQSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZGF0ZXRpbWUucGhwIERhdGVUaW1lfSBvYmplY3Qgb3IgYSB7QGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuc3RyaW5nLnBocCBzdHJpbmd9IHRoYXQKICogY2FuIGJlIHBhc3NlZCB0byAge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2RhdGV0aW1lLmNvbnN0cnVjdC5waHAgRGF0ZVRpbWU6Ol9fY29uc3RydWN0KCl9LgogKiA8L3A+CiAqIEBwYXJhbSBudWxsfHN0cmluZyAkbG9jYWxlCiAqIEByZXR1cm4gSW50bENhbGVuZGFyfG51bGwKICogVGhlIGNyZWF0ZWQge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmludGxjYWxlbmRhci5waHAgSW50bENhbGVuZGFyfSBvYmplY3Qgb3IgPGI+TlVMTDwvYj4gaW4gY2FzZSBvZgogKiBmYWlsdXJlLiBJZiBhIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5zdHJpbmcucGhwIHN0cmluZ30gaXMgcGFzc2VkLCBhbnkgZXhjZXB0aW9uIHRoYXQgb2NjdXJzCiAqIGluc2lkZSB0aGUge0BsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRhdGV0aW1lLnBocCBEYXRlVGltZX0gY29uc3RydWN0b3IgaXMgcHJvcGFnYXRlZC4KICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsY2FsX2Zyb21fZGF0ZV90aW1lKAogICAgRGF0ZVRpbWV8c3RyaW5nICRkYXRldGltZSwKICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldID9zdHJpbmcgJGxvY2FsZSA9IG51bGwKKTogP0ludGxDYWxlbmRhciB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGEyKTxici8+CiAqIENvbnZlcnQgYW4gSW50bENhbGVuZGFyIGludG8gYSBEYXRlVGltZSBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGNhbGVuZGFyLnRvZGF0ZXRpbWUucGhwCiAqIEBwYXJhbSBJbnRsQ2FsZW5kYXIgJGNhbGVuZGFyIDxwPgogKiBUaGUgY2FsZW5kYXIgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHJldHVybiBEYXRlVGltZXxmYWxzZQogKiBBIHtAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kYXRldGltZS5waHAgRGF0ZVRpbWV9IG9iamVjdCB3aXRoIHRoZSBzYW1lIHRpbWV6b25lIGFzIHRoaXMKICogb2JqZWN0ICh0aG91Z2ggdXNpbmcgUEhQJ3MgZGF0YWJhc2UgaW5zdGVhZCBvZiBJQ1UncykgYW5kIHRoZSBzYW1lIHRpbWUsCiAqIGV4Y2VwdCBmb3IgdGhlIHNtYWxsZXIgcHJlY2lzaW9uIChzZWNvbmQgcHJlY2lzaW9uIGluc3RlYWQgb2YgbWlsbGlzZWNvbmQpLgogKiBSZXR1cm5zIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGxjYWxfdG9fZGF0ZV90aW1lKEludGxDYWxlbmRhciAkY2FsZW5kYXIpOiBEYXRlVGltZXxmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCBsYXN0IGVycm9yIGNvZGUgb24gdGhlIG9iamVjdAogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0ZXJyb3Jjb2RlLnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyICRjYWxlbmRhciA8cD4KICogVGhlIGNhbGVuZGFyIG9iamVjdCwgb24gdGhlIHByb2NlZHVyYWwgc3R5bGUgaW50ZXJmYWNlLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIEFuIElDVSBlcnJvciBjb2RlIGluZGljYXRpbmcgZWl0aGVyIHN1Y2Nlc3MsIGZhaWx1cmUgb3IgYSB3YXJuaW5nLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIGludGxjYWxfZ2V0X2Vycm9yX2NvZGUoSW50bENhbGVuZGFyICRjYWxlbmRhcik6IGludHxmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCBsYXN0IGVycm9yIG1lc3NhZ2Ugb24gdGhlIG9iamVjdAogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuZ2V0ZXJyb3JtZXNzYWdlLnBocAogKiBAcGFyYW0gSW50bENhbGVuZGFyICRjYWxlbmRhciA8cD4KICogVGhlIGNhbGVuZGFyIG9iamVjdCwgb24gdGhlIHByb2NlZHVyYWwgc3R5bGUgaW50ZXJmYWNlLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBlcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCBsYXN0IGVycm9yIHRoYXQgb2NjdXJyZWQgaW4gYSBmdW5jdGlvbiBjYWxsIG9uIHRoaXMgb2JqZWN0LCBvciBhIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBub24tZXhpc3RhbmNlIG9mIGFuIGVycm9yLgogKiBAc2luY2UgNS41CiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIGludGxjYWxfZ2V0X2Vycm9yX21lc3NhZ2UoSW50bENhbGVuZGFyICRjYWxlbmRhcik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCB0aGUgbnVtYmVyIG9mIElEcyBpbiB0aGUgZXF1aXZhbGVuY3kgZ3JvdXAgdGhhdCBpbmNsdWRlcyB0aGUgZ2l2ZW4gSUQKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLmNvdW50ZXF1aXZhbGVudGlkcy5waHAKICogQHBhcmFtIHN0cmluZyAkdGltZXpvbmVJZAogKiBAcmV0dXJuIGludHxmYWxzZQogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGx0el9jb3VudF9lcXVpdmFsZW50X2lkcyhzdHJpbmcgJHRpbWV6b25lSWQpOiBpbnR8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBDcmVhdGUgYSBuZXcgY29weSBvZiB0aGUgZGVmYXVsdCB0aW1lem9uZSBmb3IgdGhpcyBob3N0CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS5jcmVhdGVkZWZhdWx0LnBocAogKiBAcmV0dXJuIEludGxUaW1lWm9uZQogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGx6X2NyZWF0ZV9kZWZhdWx0KCkge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUuY3JlYXRlZW51bWVyYXRpb24ucGhwCiAqIEBwYXJhbSBJbnRsVGltZVpvbmV8c3RyaW5nfGludHxmbG9hdHxudWxsICRjb3VudHJ5T3JSYXdPZmZzZXQgW29wdGlvbmFsXQogKiBAcmV0dXJuIEludGxJdGVyYXRvcnxmYWxzZQogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGx0el9jcmVhdGVfZW51bWVyYXRpb24oJGNvdW50cnlPclJhd09mZnNldCk6IEludGxJdGVyYXRvcnxmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS5jcmVhdGV0aW1lem9uZS5waHAKICogQHBhcmFtIHN0cmluZyAkdGltZXpvbmVJZAogKiBAcmV0dXJuIEludGxUaW1lWm9uZXxudWxsCiAqIEBzaW5jZSA1LjUKICovCiNbUHVyZV0KZnVuY3Rpb24gaW50bHR6X2NyZWF0ZV90aW1lX3pvbmUoc3RyaW5nICR0aW1lem9uZUlkKTogP0ludGxUaW1lWm9uZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS5mcm9tZGF0ZXRpbWV6b25lLnBocAogKiBAcGFyYW0gRGF0ZVRpbWVab25lICR0aW1lem9uZQogKiBAcmV0dXJuIEludGxUaW1lWm9uZXxudWxsCiAqIEBzaW5jZSA1LjUKICovCiNbUHVyZV0KZnVuY3Rpb24gaW50bHR6X2Zyb21fZGF0ZV90aW1lX3pvbmUoRGF0ZVRpbWVab25lICR0aW1lem9uZSk6ID9JbnRsVGltZVpvbmUge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBHZXQgdGhlIGNhbm9uaWNhbCBzeXN0ZW0gdGltZXpvbmUgSUQgb3IgdGhlIG5vcm1hbGl6ZWQgY3VzdG9tIHRpbWUgem9uZSBJRCBmb3IgdGhlIGdpdmVuIHRpbWUgem9uZSBJRAogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUuZ2V0Y2Fub25pY2FsaWQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHRpbWV6b25lSWQKICogQHBhcmFtIGJvb2wgJiRpc1N5c3RlbUlkIFtvcHRpb25hbF0KICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsdHpfZ2V0X2Nhbm9uaWNhbF9pZChzdHJpbmcgJHRpbWV6b25lSWQsICYkaXNTeXN0ZW1JZCk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCBhIG5hbWUgb2YgdGhpcyB0aW1lIHpvbmUgc3VpdGFibGUgZm9yIHByZXNlbnRhdGlvbiB0byB0aGUgdXNlcgogKiBAcGFyYW0gSW50bFRpbWVab25lICR0aW1lem9uZSAtIDxwPgogKiBUaGUgdGltZSB6b25lIG9iamVjdCwgb24gdGhlIHByb2NlZHVyYWwgc3R5bGUgaW50ZXJmYWNlLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRkc3QgW29wdGlvbmFsXQogKiBAcGFyYW0gaW50ICRzdHlsZSBbb3B0aW9uYWxdCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbG9jYWxlIFtvcHRpb25hbF0KICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsdHpfZ2V0X2Rpc3BsYXlfbmFtZShJbnRsVGltZVpvbmUgJHRpbWV6b25lLCBib29sICRkc3QgPSBmYWxzZSwgaW50ICRzdHlsZSA9IDIsID9zdHJpbmcgJGxvY2FsZSk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCB0aGUgYW1vdW50IG9mIHRpbWUgdG8gYmUgYWRkZWQgdG8gbG9jYWwgc3RhbmRhcmQgdGltZSB0byBnZXQgbG9jYWwgd2FsbCBjbG9jayB0aW1lCiAqIEBwYXJhbSBJbnRsVGltZVpvbmUgJHRpbWV6b25lIC0gPHA+CiAqIFRoZSB0aW1lIHpvbmUgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHJldHVybiBpbnQKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLmdldGVxdWl2YWxlbnRpZC5waHAKICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsdHpfZ2V0X2RzdF9zYXZpbmdzKEludGxUaW1lWm9uZSAkdGltZXpvbmUpOiBpbnQge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBHZXQgYW4gSUQgaW4gdGhlIGVxdWl2YWxlbmN5IGdyb3VwIHRoYXQgaW5jbHVkZXMgdGhlIGdpdmVuIElECiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS5nZXRlcXVpdmFsZW50aWQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHRpbWV6b25lSWQKICogQHBhcmFtIGludCAkb2Zmc2V0CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAqIEBzaW5jZSA1LjUKICovCiNbUHVyZV0KZnVuY3Rpb24gaW50bHR6X2dldF9lcXVpdmFsZW50X2lkKHN0cmluZyAkdGltZXpvbmVJZCwgaW50ICRvZmZzZXQpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBHZXQgbGFzdCBlcnJvciBjb2RlIG9uIHRoZSBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLmdldGVycm9yY29kZS5waHAKICogQHBhcmFtIEludGxUaW1lWm9uZSAkdGltZXpvbmUgLSA8cD4KICogVGhlIHRpbWUgem9uZSBvYmplY3QsIG9uIHRoZSBwcm9jZWR1cmFsIHN0eWxlIGludGVyZmFjZS4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZQogKiBAc2luY2UgNS41CiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIGludGx0el9nZXRfZXJyb3JfY29kZShJbnRsVGltZVpvbmUgJHRpbWV6b25lKTogaW50fGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogR2V0IGxhc3QgZXJyb3IgbWVzc2FnZSBvbiB0aGUgb2JqZWN0CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS5nZXRlcnJvcm1lc3NhZ2UucGhwCiAqIEBwYXJhbSBJbnRsVGltZVpvbmUgJHRpbWV6b25lIC0gPHA+CiAqIFRoZSB0aW1lIHpvbmUgb2JqZWN0LCBvbiB0aGUgcHJvY2VkdXJhbCBzdHlsZSBpbnRlcmZhY2UuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICogQHNpbmNlIDUuNQogKi8KI1tQdXJlKHRydWUpXQpmdW5jdGlvbiBpbnRsdHpfZ2V0X2Vycm9yX21lc3NhZ2UoSW50bFRpbWVab25lICR0aW1lem9uZSk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIENyZWF0ZSBHTVQgKFVUQykgdGltZXpvbmUKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLmdldGdtdC5waHAKICogQHJldHVybiBJbnRsVGltZVpvbmUKICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsdHpfZ2V0R01UKCk6IEludGxUaW1lWm9uZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCB0aW1lem9uZSBJRAogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUuZ2V0aWQucGhwCiAqIEBwYXJhbSBJbnRsVGltZVpvbmUgJHRpbWV6b25lCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAqIEBzaW5jZSA1LjUKICovCiNbUHVyZV0KZnVuY3Rpb24gaW50bHR6X2dldF9pZChJbnRsVGltZVpvbmUgJHRpbWV6b25lKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogR2V0IHRoZSB0aW1lIHpvbmUgcmF3IGFuZCBHTVQgb2Zmc2V0IGZvciB0aGUgZ2l2ZW4gbW9tZW50IGluIHRpbWUKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bHRpbWV6b25lLmdldG9mZnNldC5waHAKICogQHBhcmFtIEludGxUaW1lWm9uZSAkdGltZXpvbmUKICogQHBhcmFtIGZsb2F0ICR0aW1lc3RhbXAKICogQHBhcmFtIGJvb2wgJGxvY2FsCiAqIEBwYXJhbSBpbnQgJiRyYXdPZmZzZXQKICogQHBhcmFtIGludCAmJGRzdE9mZnNldAogKiBAcmV0dXJuIGJvb2wKICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsdHpfZ2V0X29mZnNldChJbnRsVGltZVpvbmUgJHRpbWV6b25lLCBmbG9hdCAkdGltZXN0YW1wLCBib29sICRsb2NhbCwgJiRyYXdPZmZzZXQsICYkZHN0T2Zmc2V0KTogYm9vbCB7fQoKLyoqCiAqIEdldCB0aGUgcmF3IEdNVCBvZmZzZXQgKGJlZm9yZSB0YWtpbmcgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGludG8gYWNjb3VudAogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUuZ2V0cmF3b2Zmc2V0LnBocAogKiBAcGFyYW0gSW50bFRpbWVab25lICR0aW1lem9uZQogKiBAcmV0dXJuIGludAogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsdHpfZ2V0X3Jhd19vZmZzZXQoSW50bFRpbWVab25lICR0aW1lem9uZSk6IGludCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEdldCB0aGUgdGltZXpvbmUgZGF0YSB2ZXJzaW9uIGN1cnJlbnRseSB1c2VkIGJ5IElDVQogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsdGltZXpvbmUuZ2V0dHpkYXRhdmVyc2lvbi5waHAKICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsdHpfZ2V0X3R6X2RhdGFfdmVyc2lvbigpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCBQRUNMIGludGwgJmd0Oz0gMy4wLjBhMSk8YnIvPgogKiBDaGVjayBpZiB0aGlzIHpvbmUgaGFzIHRoZSBzYW1lIHJ1bGVzIGFuZCBvZmZzZXQgYXMgYW5vdGhlciB6b25lCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS5oYXNzYW1lcnVsZXMucGhwCiAqIEBwYXJhbSBJbnRsVGltZVpvbmUgJHRpbWV6b25lCiAqIEBwYXJhbSBJbnRsVGltZVpvbmUgJG90aGVyCiAqIEByZXR1cm4gYm9vbAogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGx0el9oYXNfc2FtZV9ydWxlcygKICAgIEludGxUaW1lWm9uZSAkdGltZXpvbmUsCiAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuNScsIHRvOiAnNy40JyldIEludGxUaW1lWm9uZSAkb3RoZXIgPSBudWxsLAogICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gSW50bFRpbWVab25lICRvdGhlcgopOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9NS41LjAgUEVDTCBpbnRsICZndDs9IDMuMC4wYTEpPGJyLz4KICogQ29udmVydCB0byBEYXRlVGltZVpvbmUgb2JqZWN0CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS50b2RhdGV0aW1lem9uZS5waHAKICogQHBhcmFtIEludGxUaW1lWm9uZSAkdGltZXpvbmUKICogQHJldHVybiBEYXRlVGltZVpvbmV8ZmFsc2UKICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsdHpfdG9fZGF0ZV90aW1lX3pvbmUoSW50bFRpbWVab25lICR0aW1lem9uZSk6IERhdGVUaW1lWm9uZXxmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIENoZWNrIGlmIHRoaXMgdGltZSB6b25lIHVzZXMgZGF5bGlnaHQgc2F2aW5ncyB0aW1lCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGx0aW1lem9uZS51c2VkYXlsaWdodHRpbWUucGhwCiAqIEBwYXJhbSBJbnRsVGltZVpvbmUgJHRpbWV6b25lCiAqIEByZXR1cm4gYm9vbAogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGx0el91c2VfZGF5bGlnaHRfdGltZShJbnRsVGltZVpvbmUgJHRpbWV6b25lKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PTUuNS4wIFBFQ0wgaW50bCAmZ3Q7PSAzLjAuMGExKTxici8+CiAqIEBwYXJhbSBEYXRlVGltZVpvbmV8SW50bFRpbWVab25lfHN0cmluZ3xpbnR8bnVsbCAkdGltZXpvbmVPclllYXIgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGxvY2FsZU9yTW9udGggW29wdGlvbmFsXQogKiBAcGFyYW0gaW50ICRkYXkgW29wdGlvbmFsXQogKiBAcGFyYW0gaW50ICRob3VyIFtvcHRpb25hbF0KICogQHBhcmFtIGludCAkbWludXRlIFtvcHRpb25hbF0KICogQHBhcmFtIGludCAkc2Vjb25kIFtvcHRpb25hbF0KICogQHJldHVybiBJbnRsR3JlZ29yaWFuQ2FsZW5kYXJ8bnVsbAogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCiNbRGVwcmVjYXRlZCggcmVhc29uOiAndXNlIEludGxHcmVnb3JpYW5DYWxlbmRhcjo6X19jb25zdHJ1Y3QoKSwgSW50bEdyZWdvcmlhbkNhbGVuZGFyOjpjcmVhdGVGcm9tRGF0ZSgpLCBvciBJbnRsR3JlZ29yaWFuQ2FsZW5kYXI6OmNyZWF0ZUZyb21EYXRlVGltZSgpIGluc3RlYWQnLCBzaW5jZTogJzguNCcgKV0KZnVuY3Rpb24gaW50bGdyZWdjYWxfY3JlYXRlX2luc3RhbmNlKCR0aW1lem9uZU9yWWVhciwgJGxvY2FsZU9yTW9udGgsICRkYXksICRob3VyLCAkbWludXRlLCAkc2Vjb25kKTogP0ludGxHcmVnb3JpYW5DYWxlbmRhciB7fQoKLyoqCiAqIEBwYXJhbSBJbnRsR3JlZ29yaWFuQ2FsZW5kYXIgJGNhbGVuZGFyCiAqIEBwYXJhbSBmbG9hdCAkdGltZXN0YW1wCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gaW50bGdyZWdjYWxfc2V0X2dyZWdvcmlhbl9jaGFuZ2UoSW50bEdyZWdvcmlhbkNhbGVuZGFyICRjYWxlbmRhciwgZmxvYXQgJHRpbWVzdGFtcCk6IGJvb2wge30KCi8qKgogKiBAcGFyYW0gSW50bEdyZWdvcmlhbkNhbGVuZGFyICRjYWxlbmRhcgogKiBAcmV0dXJuIGZsb2F0CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGxncmVnY2FsX2dldF9ncmVnb3JpYW5fY2hhbmdlKEludGxHcmVnb3JpYW5DYWxlbmRhciAkY2FsZW5kYXIpOiBmbG9hdCB7fQoKLyoqCiAqIEBwYXJhbSBJbnRsR3JlZ29yaWFuQ2FsZW5kYXIgJGNhbGVuZGFyCiAqIEBwYXJhbSBpbnQgJHllYXIKICogQHJldHVybiBib29sCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGxncmVnY2FsX2lzX2xlYXBfeWVhcihJbnRsR3JlZ29yaWFuQ2FsZW5kYXIgJGNhbGVuZGFyLCBpbnQgJHllYXIpOiBib29sIHt9CgovKioKICogKFBIUCAmZ3Q7PSA1LjMuMiwgUEVDTCBpbnRsICZndDs9IDIuMC4wKTxici8+CiAqIENyZWF0ZSBhIHJlc291cmNlIGJ1bmRsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Jlc291cmNlYnVuZGxlLmNyZWF0ZS5waHAKICogQHBhcmFtIHN0cmluZ3xudWxsICRsb2NhbGUgPHA+CiAqIExvY2FsZSBmb3Igd2hpY2ggdGhlIHJlc291cmNlcyBzaG91bGQgYmUgbG9hZGVkIChsb2NhbGUgbmFtZSwgZS5nLiBlbl9DQSkuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRidW5kbGUgPHA+CiAqIFRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGRhdGEgaXMgc3RvcmVkIG9yIHRoZSBuYW1lIG9mIHRoZSAuZGF0IGZpbGUuCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJGZhbGxiYWNrIFtvcHRpb25hbF0gPHA+CiAqIFdoZXRoZXIgbG9jYWxlIHNob3VsZCBtYXRjaCBleGFjdGx5IG9yIGZhbGxiYWNrIHRvIHBhcmVudCBsb2NhbGUgaXMgYWxsb3dlZC4KICogPC9wPgogKiBAcmV0dXJuIFJlc291cmNlQnVuZGxlfG51bGwgPGI+UmVzb3VyY2VCdW5kbGU8L2I+IG9iamVjdCBvciA8Yj5OVUxMPC9iPiBvbiBlcnJvci4KICovCiNbUHVyZV0KZnVuY3Rpb24gcmVzb3VyY2VidW5kbGVfY3JlYXRlKD9zdHJpbmcgJGxvY2FsZSwgP3N0cmluZyAkYnVuZGxlLCBib29sICRmYWxsYmFjayA9IHRydWUpOiA/UmVzb3VyY2VCdW5kbGUge30KCi8qKgogKiAoUEhQICZndDs9IDUuMy4yLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICogR2V0IGRhdGEgZnJvbSB0aGUgYnVuZGxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVzb3VyY2VidW5kbGUuZ2V0LnBocAogKiBAcGFyYW0gUmVzb3VyY2VCdW5kbGUgJGJ1bmRsZQogKiBAcGFyYW0gc3RyaW5nfGludCAkaW5kZXggPHA+CiAqIERhdGEgaW5kZXgsIG11c3QgYmUgc3RyaW5nIG9yIGludGVnZXIuCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJGZhbGxiYWNrCiAqIEByZXR1cm4gbWl4ZWQgdGhlIGRhdGEgbG9jYXRlZCBhdCB0aGUgaW5kZXggb3IgPGI+TlVMTDwvYj4gb24gZXJyb3IuIFN0cmluZ3MsIGludGVnZXJzIGFuZCBiaW5hcnkgZGF0YSBzdHJpbmdzCiAqIGFyZSByZXR1cm5lZCBhcyBjb3JyZXNwb25kaW5nIFBIUCB0eXBlcywgaW50ZWdlciBhcnJheSBpcyByZXR1cm5lZCBhcyBQSFAgYXJyYXkuIENvbXBsZXggdHlwZXMgYXJlCiAqIHJldHVybmVkIGFzIDxiPlJlc291cmNlQnVuZGxlPC9iPiBvYmplY3QuCiAqLwojW1B1cmVdCiNbTGFuZ3VhZ2VBd2FyZShbJzguNCcgPT4gJ1Jlc291cmNlQnVuZGxlfGFycmF5fHN0cmluZ3xpbnR8bnVsbCddLCBkZWZhdWx0OiAnbWl4ZWQnKV0KZnVuY3Rpb24gcmVzb3VyY2VidW5kbGVfZ2V0KFJlc291cmNlQnVuZGxlICRidW5kbGUsIHN0cmluZ3xpbnQgJGluZGV4LCBib29sICRmYWxsYmFjayA9IHRydWUpIHt9CgovKioKICogKFBIUCAmZ3Q7PSA1LjMuMiwgUEVDTCBpbnRsICZndDs9IDIuMC4wKTxici8+CiAqIEdldCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGJ1bmRsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Jlc291cmNlYnVuZGxlLmNvdW50LnBocAogKiBAcGFyYW0gUmVzb3VyY2VCdW5kbGUgJGJ1bmRsZQogKiBAcmV0dXJuIGludCBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGJ1bmRsZS4KICovCiNbUHVyZV0KZnVuY3Rpb24gcmVzb3VyY2VidW5kbGVfY291bnQoUmVzb3VyY2VCdW5kbGUgJGJ1bmRsZSk6IGludCB7fQoKLyoqCiAqIChQSFAgJmd0Oz0gNS4zLjIsIFBFQ0wgaW50bCAmZ3Q7PSAyLjAuMCk8YnIvPgogKiBHZXQgc3VwcG9ydGVkIGxvY2FsZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZXNvdXJjZWJ1bmRsZS5sb2NhbGVzLnBocAogKiBAcGFyYW0gc3RyaW5nICRidW5kbGUgPHA+CiAqIFBhdGggb2YgUmVzb3VyY2VCdW5kbGUgZm9yIHdoaWNoIHRvIGdldCBhdmFpbGFibGUgbG9jYWxlcywgb3IKICogZW1wdHkgc3RyaW5nIGZvciBkZWZhdWx0IGxvY2FsZXMgbGlzdC4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIHRoZSBsaXN0IG9mIGxvY2FsZXMgc3VwcG9ydGVkIGJ5IHRoZSBidW5kbGUuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIHJlc291cmNlYnVuZGxlX2xvY2FsZXMoc3RyaW5nICRidW5kbGUpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIChQSFAgJmd0Oz0gNS4zLjIsIFBFQ0wgaW50bCAmZ3Q7PSAyLjAuMCk8YnIvPgogKiBHZXQgYnVuZGxlJ3MgbGFzdCBlcnJvciBjb2RlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Jlc291cmNlYnVuZGxlLmdldGVycm9yY29kZS5waHAKICogQHBhcmFtIFJlc291cmNlQnVuZGxlICRidW5kbGUKICogQHJldHVybiBpbnQgZXJyb3IgY29kZSBmcm9tIGxhc3QgYnVuZGxlIG9iamVjdCBjYWxsLgogKi8KI1tQdXJlKHRydWUpXQpmdW5jdGlvbiByZXNvdXJjZWJ1bmRsZV9nZXRfZXJyb3JfY29kZShSZXNvdXJjZUJ1bmRsZSAkYnVuZGxlKTogaW50IHt9CgovKioKICogKFBIUCAmZ3Q7PSA1LjMuMiwgUEVDTCBpbnRsICZndDs9IDIuMC4wKTxici8+CiAqIEdldCBidW5kbGUncyBsYXN0IGVycm9yIG1lc3NhZ2UuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVzb3VyY2VidW5kbGUuZ2V0ZXJyb3JtZXNzYWdlLnBocAogKiBAcGFyYW0gUmVzb3VyY2VCdW5kbGUgJGJ1bmRsZQogKiBAcmV0dXJuIHN0cmluZyBlcnJvciBtZXNzYWdlIGZyb20gbGFzdCBidW5kbGUgb2JqZWN0J3MgY2FsbC4KICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gcmVzb3VyY2VidW5kbGVfZ2V0X2Vycm9yX21lc3NhZ2UoUmVzb3VyY2VCdW5kbGUgJGJ1bmRsZSk6IHN0cmluZyB7fQoKLyoqCiAqIChQSFAgJmd0Oz0gNS40LjAsIFBFQ0wgaW50bCAmZ3Q7PSAyLjAuMCk8YnIvPgogKiBDcmVhdGUgYSB0cmFuc2xpdGVyYXRvcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RyYW5zbGl0ZXJhdG9yLmNyZWF0ZS5waHAKICogQHBhcmFtIHN0cmluZyAkaWQgPHA+CiAqIFRoZSBpZC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRkaXJlY3Rpb24gPHA+CiAqIFRoZSBkaXJlY3Rpb24sIGRlZmF1bHRzIHRvCiAqIFRyYW5zbGl0ZXJhdG9yOjpGT1JXQVJELgogKiBNYXkgYWxzbyBiZSBzZXQgdG8KICogVHJhbnNsaXRlcmF0b3I6OlJFVkVSU0UuCiAqIDwvcD4KICogQHJldHVybiBUcmFuc2xpdGVyYXRvcnxudWxsIGEgPGI+VHJhbnNsaXRlcmF0b3I8L2I+IG9iamVjdCBvbiBzdWNjZXNzLAogKiBvciA8Yj5OVUxMPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS40CiAqLwojW1B1cmVdCmZ1bmN0aW9uIHRyYW5zbGl0ZXJhdG9yX2NyZWF0ZShzdHJpbmcgJGlkLCBpbnQgJGRpcmVjdGlvbiA9IDApOiA/VHJhbnNsaXRlcmF0b3Ige30KCi8qKgogKiAoUEhQICZndDs9IDUuNC4wLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICogQ3JlYXRlIHRyYW5zbGl0ZXJhdG9yIGZyb20gcnVsZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90cmFuc2xpdGVyYXRvci5jcmVhdGVmcm9tcnVsZXMucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHJ1bGVzIDxwPgogKiBUaGUgcnVsZXMuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZGlyZWN0aW9uIDxwPgogKiBUaGUgZGlyZWN0aW9uLCBkZWZhdWx0cyB0bwogKiBUcmFuc2xpdGVyYXRvcjo6Rk9SV0FSRC4KICogTWF5IGFsc28gYmUgc2V0IHRvCiAqIFRyYW5zbGl0ZXJhdG9yOjpSRVZFUlNFLgogKiA8L3A+CiAqIEByZXR1cm4gVHJhbnNsaXRlcmF0b3J8bnVsbCBhIDxiPlRyYW5zbGl0ZXJhdG9yPC9iPiBvYmplY3Qgb24gc3VjY2VzcywKICogb3IgPGI+TlVMTDwvYj4gb24gZmFpbHVyZS4KICogQHNpbmNlIDUuNAogKi8KI1tQdXJlXQpmdW5jdGlvbiB0cmFuc2xpdGVyYXRvcl9jcmVhdGVfZnJvbV9ydWxlcyhzdHJpbmcgJHJ1bGVzLCBpbnQgJGRpcmVjdGlvbiA9IDApOiA/VHJhbnNsaXRlcmF0b3Ige30KCi8qKgogKiAoUEhQICZndDs9IDUuNC4wLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICogR2V0IHRyYW5zbGl0ZXJhdG9yIElEcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RyYW5zbGl0ZXJhdG9yLmxpc3RpZHMucGhwCiAqIEByZXR1cm4gc3RyaW5nW118ZmFsc2UgQW4gYXJyYXkgb2YgcmVnaXN0ZXJlZCB0cmFuc2xpdGVyYXRvciBJRHMgb24gc3VjY2VzcywKICogb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA1LjQKICovCiNbUHVyZV0KZnVuY3Rpb24gdHJhbnNsaXRlcmF0b3JfbGlzdF9pZHMoKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiAoUEhQICZndDs9IDUuNC4wLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICogQ3JlYXRlIGFuIGludmVyc2UgdHJhbnNsaXRlcmF0b3IKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90cmFuc2xpdGVyYXRvci5jcmVhdGVpbnZlcnNlLnBocAogKiBAcGFyYW0gVHJhbnNsaXRlcmF0b3IgJHRyYW5zbGl0ZXJhdG9yCiAqIEByZXR1cm4gVHJhbnNsaXRlcmF0b3J8bnVsbCBhIDxiPlRyYW5zbGl0ZXJhdG9yPC9iPiBvYmplY3Qgb24gc3VjY2VzcywKICogb3IgPGI+TlVMTDwvYj4gb24gZmFpbHVyZQogKiBAc2luY2UgNS40CiAqLwojW1B1cmVdCmZ1bmN0aW9uIHRyYW5zbGl0ZXJhdG9yX2NyZWF0ZV9pbnZlcnNlKFRyYW5zbGl0ZXJhdG9yICR0cmFuc2xpdGVyYXRvcik6ID9UcmFuc2xpdGVyYXRvciB7fQoKLyoqCiAqIChQSFAgJmd0Oz0gNS40LjAsIFBFQ0wgaW50bCAmZ3Q7PSAyLjAuMCk8YnIvPgogKiBUcmFuc2xpdGVyYXRlIGEgc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdHJhbnNsaXRlcmF0b3IudHJhbnNsaXRlcmF0ZS5waHAKICogQHBhcmFtIFRyYW5zbGl0ZXJhdG9yfHN0cmluZyAkdHJhbnNsaXRlcmF0b3IKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogKiBUaGUgc3RyaW5nIHRvIGJlIHRyYW5zZm9ybWVkLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHN0YXJ0IDxwPgogKiBUaGUgc3RhcnQgaW5kZXggKGluIFVURi0xNiBjb2RlIHVuaXRzKSBmcm9tIHdoaWNoIHRoZSBzdHJpbmcgd2lsbCBzdGFydAogKiB0byBiZSB0cmFuc2Zvcm1lZCwgaW5jbHVzaXZlLiBJbmRleGluZyBzdGFydHMgYXQgMC4gVGhlIHRleHQgYmVmb3JlIHdpbGwKICogYmUgbGVmdCBhcyBpcy4KICogPC9wPgogKiBAcGFyYW0gaW50ICRlbmQgPHA+CiAqIFRoZSBlbmQgaW5kZXggKGluIFVURi0xNiBjb2RlIHVuaXRzKSB1bnRpbCB3aGljaCB0aGUgc3RyaW5nIHdpbGwgYmUKICogdHJhbnNmb3JtZWQsIGV4Y2x1c2l2ZS4gSW5kZXhpbmcgc3RhcnRzIGF0IDAuIFRoZSB0ZXh0IGFmdGVyIHdpbGwgYmUKICogbGVmdCBhcyBpcy4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgdHJhbnNmb21lZCBzdHJpbmcgb24gc3VjY2Vzcywgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA1LjQKICovCiNbUHVyZV0KZnVuY3Rpb24gdHJhbnNsaXRlcmF0b3JfdHJhbnNsaXRlcmF0ZShUcmFuc2xpdGVyYXRvcnxzdHJpbmcgJHRyYW5zbGl0ZXJhdG9yLCBzdHJpbmcgJHN0cmluZywgaW50ICRzdGFydCA9IDAsIGludCAkZW5kID0gLTEpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQICZndDs9IDUuNC4wLCBQRUNMIGludGwgJmd0Oz0gMi4wLjApPGJyLz4KICogR2V0IGxhc3QgZXJyb3IgY29kZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RyYW5zbGl0ZXJhdG9yLmdldGVycm9yY29kZS5waHAKICogQHBhcmFtIFRyYW5zbGl0ZXJhdG9yICR0cmFuc2xpdGVyYXRvcgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgZXJyb3IgY29kZSBvbiBzdWNjZXNzLAogKiBvciA8Yj5GQUxTRTwvYj4gaWYgbm9uZSBleGlzdHMsIG9yIG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA1LjQKICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gdHJhbnNsaXRlcmF0b3JfZ2V0X2Vycm9yX2NvZGUoVHJhbnNsaXRlcmF0b3IgJHRyYW5zbGl0ZXJhdG9yKTogaW50fGZhbHNlIHt9CgovKioKICogKFBIUCAmZ3Q7PSA1LjQuMCwgUEVDTCBpbnRsICZndDs9IDIuMC4wKTxici8+CiAqIEdldCBsYXN0IGVycm9yIG1lc3NhZ2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90cmFuc2xpdGVyYXRvci5nZXRlcnJvcm1lc3NhZ2UucGhwCiAqIEBwYXJhbSBUcmFuc2xpdGVyYXRvciAkdHJhbnNsaXRlcmF0b3IKICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGVycm9yIGNvZGUgb24gc3VjY2VzcywKICogb3IgPGI+RkFMU0U8L2I+IGlmIG5vbmUgZXhpc3RzLCBvciBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS40CiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIHRyYW5zbGl0ZXJhdG9yX2dldF9lcnJvcl9tZXNzYWdlKFRyYW5zbGl0ZXJhdG9yICR0cmFuc2xpdGVyYXRvcik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBpbnRsICZndDs9IDEuMC4wKTxici8+CiAqIEdldCB0aGUgbGFzdCBlcnJvciBjb2RlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW50bC1nZXQtZXJyb3ItY29kZS5waHAKICogQHJldHVybiBpbnQgRXJyb3IgY29kZSByZXR1cm5lZCBieSB0aGUgbGFzdCBBUEkgZnVuY3Rpb24gY2FsbC4KICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gaW50bF9nZXRfZXJyb3JfY29kZSgpOiBpbnQge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBHZXQgZGVzY3JpcHRpb24gb2YgdGhlIGxhc3QgZXJyb3IKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbnRsLWdldC1lcnJvci1tZXNzYWdlLnBocAogKiBAcmV0dXJuIHN0cmluZyBEZXNjcmlwdGlvbiBvZiBhbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgbGFzdCBBUEkgZnVuY3Rpb24gY2FsbC4KICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gaW50bF9nZXRfZXJyb3JfbWVzc2FnZSgpOiBzdHJpbmcge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBlcnJvciBjb2RlIGluZGljYXRlcyBmYWlsdXJlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW50bC1pcy1mYWlsdXJlLnBocAogKiBAcGFyYW0gaW50ICRlcnJvckNvZGUgPHA+CiAqIGlzIGEgdmFsdWUgdGhhdCByZXR1cm5lZCBieSBmdW5jdGlvbnM6CiAqIDxiPmludGxfZ2V0X2Vycm9yX2NvZGU8L2I+LAogKiA8Yj5jb2xsYXRvcl9nZXRfZXJyb3JfY29kZTwvYj4gLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiBpdCB0aGUgY29kZSBpbmRpY2F0ZXMgc29tZSBmYWlsdXJlLCBhbmQgPGI+RkFMU0U8L2I+CiAqIGluIGNhc2Ugb2Ygc3VjY2VzcyBvciBhIHdhcm5pbmcuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGxfaXNfZmFpbHVyZShpbnQgJGVycm9yQ29kZSk6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgaW50bCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBHZXQgc3ltYm9saWMgbmFtZSBmb3IgYSBnaXZlbiBlcnJvciBjb2RlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW50bC1lcnJvci1uYW1lLnBocAogKiBAcGFyYW0gaW50ICRlcnJvckNvZGUgPHA+CiAqIElDVSBlcnJvciBjb2RlLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIFRoZSByZXR1cm5lZCBzdHJpbmcgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgZXJyb3IgY29kZQogKiBjb25zdGFudC4KICovCiNbUHVyZV0KZnVuY3Rpb24gaW50bF9lcnJvcl9uYW1lKGludCAkZXJyb3JDb2RlKTogc3RyaW5nIHt9CgovKioKICogR2V0cyB0aGUgRGVjb21wb3NpdGlvbl9NYXBwaW5nIHByb3BlcnR5IGZvciB0aGUgZ2l2ZW4gVVRGLTggZW5jb2RlZCBjb2RlIHBvaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL25vcm1hbGl6ZXIuZ2V0cmF3ZGVjb21wb3NpdGlvbi5waHAKICoKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAqIEBwYXJhbSBpbnQgJGZvcm0KICogQHJldHVybiBzdHJpbmd8bnVsbAogKgogKiBAc2luY2UgNy4zCiAqLwojW1B1cmVdCmZ1bmN0aW9uIG5vcm1hbGl6ZXJfZ2V0X3Jhd19kZWNvbXBvc2l0aW9uKHN0cmluZyAkc3RyaW5nLCAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSBpbnQgJGZvcm0gPSBOb3JtYWxpemVyOjpGT1JNX0MpOiA/c3RyaW5nIHt9CgovKioKICogQHJldHVybiBJbnRsVGltZVpvbmUKICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsdHpfY3JlYXRlX2RlZmF1bHQoKTogSW50bFRpbWVab25lIHt9CgovKioKICogQHJldHVybiBJbnRsVGltZVpvbmUKICogQHNpbmNlIDUuNQogKi8KI1tQdXJlXQpmdW5jdGlvbiBpbnRsdHpfZ2V0X2dtdCgpOiBJbnRsVGltZVpvbmUge30KCi8qKgogKiBAcmV0dXJuIEludGxUaW1lWm9uZQogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGx0el9nZXRfdW5rbm93bigpOiBJbnRsVGltZVpvbmUge30KCi8qKgogKiBAcGFyYW0gaW50ICR0eXBlCiAqIEBwYXJhbSBudWxsfHN0cmluZyAkcmVnaW9uCiAqIEBwYXJhbSBudWxsfGludCAkcmF3T2Zmc2V0CiAqIEByZXR1cm4gSW50bEl0ZXJhdG9yfGZhbHNlCiAqIEBzaW5jZSA1LjUKICovCiNbUHVyZV0KZnVuY3Rpb24gaW50bHR6X2NyZWF0ZV90aW1lX3pvbmVfaWRfZW51bWVyYXRpb24oaW50ICR0eXBlLCA/c3RyaW5nICRyZWdpb24gPSBudWxsLCA/aW50ICRyYXdPZmZzZXQgPSBudWxsKTogSW50bEl0ZXJhdG9yfGZhbHNlIHt9CgovKioKICogQHBhcmFtIHN0cmluZyAkdGltZXpvbmVJZAogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogKiBAc2luY2UgNS41CiAqLwojW1B1cmVdCmZ1bmN0aW9uIGludGx0el9nZXRfcmVnaW9uKHN0cmluZyAkdGltZXpvbmVJZCk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIFNldCBtaW5pbWFsIG51bWJlciBvZiBkYXlzIHRoZSBmaXJzdCB3ZWVrIGluIGEgeWVhciBvciBtb250aCBjYW4gaGF2ZQogKgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9pbnRsY2FsZW5kYXIuc2V0bWluaW1hbGRheXNpbmZpcnN0d2Vlay5waHAKICoKICogQHBhcmFtIEludGxDYWxlbmRhciAkY2FsZW5kYXIKICogQHBhcmFtIGludCAkZGF5cwogKiBAcmV0dXJuIGJvb2wKICoKICogQHNpbmNlIDUuNS4xCiAqLwojW0xhbmd1YWdlQXdhcmUoWyc4LjMnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCmZ1bmN0aW9uIGludGxjYWxfc2V0X21pbmltYWxfZGF5c19pbl9maXJzdF93ZWVrKEludGxDYWxlbmRhciAkY2FsZW5kYXIsIGludCAkZGF5cykge30KCmZ1bmN0aW9uIGludGx0el9nZXRfd2luZG93c19pZChzdHJpbmcgJHRpbWV6b25lSWQpOiBzdHJpbmd8ZmFsc2Uge30KCmZ1bmN0aW9uIGludGx0el9nZXRfaWRfZm9yX3dpbmRvd3NfaWQoc3RyaW5nICR0aW1lem9uZUlkLCA/c3RyaW5nICRyZWdpb24gPSBudWxsKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogQHNpbmNlIDguNAogKi8KZnVuY3Rpb24gZ3JhcGhlbWVfc3RyX3NwbGl0KHN0cmluZyAkc3RyaW5nLCBpbnQgJGxlbmd0aCA9IDEpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEBzaW5jZSAgOC40CiAqLwpmdW5jdGlvbiBpbnRsdHpfZ2V0X2lhbmFfaWQoc3RyaW5nICR0aW1lem9uZUlkKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogTGltaXQgb24gbG9jYWxlIGxlbmd0aCwgc2V0IHRvIDgwIGluIFBIUCBjb2RlLiBMb2NhbGUgbmFtZXMgbG9uZ2VyCiAqIHRoYW4gdGhpcyBsaW1pdCB3aWxsIG5vdCBiZSBhY2NlcHRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSU5UTF9NQVhfTE9DQUxFX0xFTicsIDE1Nik7CmRlZmluZSgnSU5UTF9JQ1VfVkVSU0lPTicsICI3NC4xIik7CmRlZmluZSgnSU5UTF9JQ1VfREFUQV9WRVJTSU9OJywgIjc0LjEiKTsKZGVmaW5lKCdVTE9DX0FDVFVBTF9MT0NBTEUnLCAwKTsKZGVmaW5lKCdVTE9DX1ZBTElEX0xPQ0FMRScsIDEpOwpkZWZpbmUoJ0dSQVBIRU1FX0VYVFJfQ09VTlQnLCAwKTsKZGVmaW5lKCdHUkFQSEVNRV9FWFRSX01BWEJZVEVTJywgMSk7CmRlZmluZSgnR1JBUEhFTUVfRVhUUl9NQVhDSEFSUycsIDIpOwpkZWZpbmUoJ1VfVVNJTkdfRkFMTEJBQ0tfV0FSTklORycsIC0xMjgpOwpkZWZpbmUoJ1VfRVJST1JfV0FSTklOR19TVEFSVCcsIC0xMjgpOwpkZWZpbmUoJ1VfVVNJTkdfREVGQVVMVF9XQVJOSU5HJywgLTEyNyk7CmRlZmluZSgnVV9TQUZFQ0xPTkVfQUxMT0NBVEVEX1dBUk5JTkcnLCAtMTI2KTsKZGVmaW5lKCdVX1NUQVRFX09MRF9XQVJOSU5HJywgLTEyNSk7CmRlZmluZSgnVV9TVFJJTkdfTk9UX1RFUk1JTkFURURfV0FSTklORycsIC0xMjQpOwpkZWZpbmUoJ1VfU09SVF9LRVlfVE9PX1NIT1JUX1dBUk5JTkcnLCAtMTIzKTsKZGVmaW5lKCdVX0FNQklHVU9VU19BTElBU19XQVJOSU5HJywgLTEyMik7CmRlZmluZSgnVV9ESUZGRVJFTlRfVUNBX1ZFUlNJT04nLCAtMTIxKTsKZGVmaW5lKCdVX0VSUk9SX1dBUk5JTkdfTElNSVQnLCAtMTE5KTsKZGVmaW5lKCdVX1pFUk9fRVJST1InLCAwKTsKZGVmaW5lKCdVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1InLCAxKTsKZGVmaW5lKCdVX01JU1NJTkdfUkVTT1VSQ0VfRVJST1InLCAyKTsKZGVmaW5lKCdVX0lOVkFMSURfRk9STUFUX0VSUk9SJywgMyk7CmRlZmluZSgnVV9GSUxFX0FDQ0VTU19FUlJPUicsIDQpOwpkZWZpbmUoJ1VfSU5URVJOQUxfUFJPR1JBTV9FUlJPUicsIDUpOwpkZWZpbmUoJ1VfTUVTU0FHRV9QQVJTRV9FUlJPUicsIDYpOwpkZWZpbmUoJ1VfTUVNT1JZX0FMTE9DQVRJT05fRVJST1InLCA3KTsKZGVmaW5lKCdVX0lOREVYX09VVE9GQk9VTkRTX0VSUk9SJywgOCk7CmRlZmluZSgnVV9QQVJTRV9FUlJPUicsIDkpOwpkZWZpbmUoJ1VfSU5WQUxJRF9DSEFSX0ZPVU5EJywgMTApOwpkZWZpbmUoJ1VfVFJVTkNBVEVEX0NIQVJfRk9VTkQnLCAxMSk7CmRlZmluZSgnVV9JTExFR0FMX0NIQVJfRk9VTkQnLCAxMik7CmRlZmluZSgnVV9JTlZBTElEX1RBQkxFX0ZPUk1BVCcsIDEzKTsKZGVmaW5lKCdVX0lOVkFMSURfVEFCTEVfRklMRScsIDE0KTsKZGVmaW5lKCdVX0JVRkZFUl9PVkVSRkxPV19FUlJPUicsIDE1KTsKZGVmaW5lKCdVX1VOU1VQUE9SVEVEX0VSUk9SJywgMTYpOwpkZWZpbmUoJ1VfUkVTT1VSQ0VfVFlQRV9NSVNNQVRDSCcsIDE3KTsKZGVmaW5lKCdVX0lMTEVHQUxfRVNDQVBFX1NFUVVFTkNFJywgMTgpOwpkZWZpbmUoJ1VfVU5TVVBQT1JURURfRVNDQVBFX1NFUVVFTkNFJywgMTkpOwpkZWZpbmUoJ1VfTk9fU1BBQ0VfQVZBSUxBQkxFJywgMjApOwpkZWZpbmUoJ1VfQ0VfTk9UX0ZPVU5EX0VSUk9SJywgMjEpOwpkZWZpbmUoJ1VfUFJJTUFSWV9UT09fTE9OR19FUlJPUicsIDIyKTsKZGVmaW5lKCdVX1NUQVRFX1RPT19PTERfRVJST1InLCAyMyk7CmRlZmluZSgnVV9UT09fTUFOWV9BTElBU0VTX0VSUk9SJywgMjQpOwpkZWZpbmUoJ1VfRU5VTV9PVVRfT0ZfU1lOQ19FUlJPUicsIDI1KTsKZGVmaW5lKCdVX0lOVkFSSUFOVF9DT05WRVJTSU9OX0VSUk9SJywgMjYpOwpkZWZpbmUoJ1VfSU5WQUxJRF9TVEFURV9FUlJPUicsIDI3KTsKZGVmaW5lKCdVX0NPTExBVE9SX1ZFUlNJT05fTUlTTUFUQ0gnLCAyOCk7CmRlZmluZSgnVV9VU0VMRVNTX0NPTExBVE9SX0VSUk9SJywgMjkpOwpkZWZpbmUoJ1VfTk9fV1JJVEVfUEVSTUlTU0lPTicsIDMwKTsKZGVmaW5lKCdVX1NUQU5EQVJEX0VSUk9SX0xJTUlUJywgMzIpOwpkZWZpbmUoJ1VfQkFEX1ZBUklBQkxFX0RFRklOSVRJT04nLCA2NTUzNik7CmRlZmluZSgnVV9QQVJTRV9FUlJPUl9TVEFSVCcsIDY1NTM2KTsKZGVmaW5lKCdVX01BTEZPUk1FRF9SVUxFJywgNjU1MzcpOwpkZWZpbmUoJ1VfTUFMRk9STUVEX1NFVCcsIDY1NTM4KTsKZGVmaW5lKCdVX01BTEZPUk1FRF9TWU1CT0xfUkVGRVJFTkNFJywgNjU1MzkpOwpkZWZpbmUoJ1VfTUFMRk9STUVEX1VOSUNPREVfRVNDQVBFJywgNjU1NDApOwpkZWZpbmUoJ1VfTUFMRk9STUVEX1ZBUklBQkxFX0RFRklOSVRJT04nLCA2NTU0MSk7CmRlZmluZSgnVV9NQUxGT1JNRURfVkFSSUFCTEVfUkVGRVJFTkNFJywgNjU1NDIpOwpkZWZpbmUoJ1VfTUlTTUFUQ0hFRF9TRUdNRU5UX0RFTElNSVRFUlMnLCA2NTU0Myk7CmRlZmluZSgnVV9NSVNQTEFDRURfQU5DSE9SX1NUQVJUJywgNjU1NDQpOwpkZWZpbmUoJ1VfTUlTUExBQ0VEX0NVUlNPUl9PRkZTRVQnLCA2NTU0NSk7CmRlZmluZSgnVV9NSVNQTEFDRURfUVVBTlRJRklFUicsIDY1NTQ2KTsKZGVmaW5lKCdVX01JU1NJTkdfT1BFUkFUT1InLCA2NTU0Nyk7CmRlZmluZSgnVV9NSVNTSU5HX1NFR01FTlRfQ0xPU0UnLCA2NTU0OCk7CmRlZmluZSgnVV9NVUxUSVBMRV9BTlRFX0NPTlRFWFRTJywgNjU1NDkpOwpkZWZpbmUoJ1VfTVVMVElQTEVfQ1VSU09SUycsIDY1NTUwKTsKZGVmaW5lKCdVX01VTFRJUExFX1BPU1RfQ09OVEVYVFMnLCA2NTU1MSk7CmRlZmluZSgnVV9UUkFJTElOR19CQUNLU0xBU0gnLCA2NTU1Mik7CmRlZmluZSgnVV9VTkRFRklORURfU0VHTUVOVF9SRUZFUkVOQ0UnLCA2NTU1Myk7CmRlZmluZSgnVV9VTkRFRklORURfVkFSSUFCTEUnLCA2NTU1NCk7CmRlZmluZSgnVV9VTlFVT1RFRF9TUEVDSUFMJywgNjU1NTUpOwpkZWZpbmUoJ1VfVU5URVJNSU5BVEVEX1FVT1RFJywgNjU1NTYpOwpkZWZpbmUoJ1VfUlVMRV9NQVNLX0VSUk9SJywgNjU1NTcpOwpkZWZpbmUoJ1VfTUlTUExBQ0VEX0NPTVBPVU5EX0ZJTFRFUicsIDY1NTU4KTsKZGVmaW5lKCdVX01VTFRJUExFX0NPTVBPVU5EX0ZJTFRFUlMnLCA2NTU1OSk7CmRlZmluZSgnVV9JTlZBTElEX1JCVF9TWU5UQVgnLCA2NTU2MCk7CmRlZmluZSgnVV9JTlZBTElEX1BST1BFUlRZX1BBVFRFUk4nLCA2NTU2MSk7CmRlZmluZSgnVV9NQUxGT1JNRURfUFJBR01BJywgNjU1NjIpOwpkZWZpbmUoJ1VfVU5DTE9TRURfU0VHTUVOVCcsIDY1NTYzKTsKZGVmaW5lKCdVX0lMTEVHQUxfQ0hBUl9JTl9TRUdNRU5UJywgNjU1NjQpOwpkZWZpbmUoJ1VfVkFSSUFCTEVfUkFOR0VfRVhIQVVTVEVEJywgNjU1NjUpOwpkZWZpbmUoJ1VfVkFSSUFCTEVfUkFOR0VfT1ZFUkxBUCcsIDY1NTY2KTsKZGVmaW5lKCdVX0lMTEVHQUxfQ0hBUkFDVEVSJywgNjU1NjcpOwpkZWZpbmUoJ1VfSU5URVJOQUxfVFJBTlNMSVRFUkFUT1JfRVJST1InLCA2NTU2OCk7CmRlZmluZSgnVV9JTlZBTElEX0lEJywgNjU1NjkpOwpkZWZpbmUoJ1VfSU5WQUxJRF9GVU5DVElPTicsIDY1NTcwKTsKZGVmaW5lKCdVX1BBUlNFX0VSUk9SX0xJTUlUJywgNjU1NzEpOwpkZWZpbmUoJ1VfVU5FWFBFQ1RFRF9UT0tFTicsIDY1NzkyKTsKZGVmaW5lKCdVX0ZNVF9QQVJTRV9FUlJPUl9TVEFSVCcsIDY1NzkyKTsKZGVmaW5lKCdVX01VTFRJUExFX0RFQ0lNQUxfU0VQQVJBVE9SUycsIDY1NzkzKTsKZGVmaW5lKCdVX01VTFRJUExFX0RFQ0lNQUxfU0VQRVJBVE9SUycsIDY1NzkzKTsKZGVmaW5lKCdVX01VTFRJUExFX0VYUE9ORU5USUFMX1NZTUJPTFMnLCA2NTc5NCk7CmRlZmluZSgnVV9NQUxGT1JNRURfRVhQT05FTlRJQUxfUEFUVEVSTicsIDY1Nzk1KTsKZGVmaW5lKCdVX01VTFRJUExFX1BFUkNFTlRfU1lNQk9MUycsIDY1Nzk2KTsKZGVmaW5lKCdVX01VTFRJUExFX1BFUk1JTExfU1lNQk9MUycsIDY1Nzk3KTsKZGVmaW5lKCdVX01VTFRJUExFX1BBRF9TUEVDSUZJRVJTJywgNjU3OTgpOwpkZWZpbmUoJ1VfUEFUVEVSTl9TWU5UQVhfRVJST1InLCA2NTc5OSk7CmRlZmluZSgnVV9JTExFR0FMX1BBRF9QT1NJVElPTicsIDY1ODAwKTsKZGVmaW5lKCdVX1VOTUFUQ0hFRF9CUkFDRVMnLCA2NTgwMSk7CmRlZmluZSgnVV9VTlNVUFBPUlRFRF9QUk9QRVJUWScsIDY1ODAyKTsKZGVmaW5lKCdVX1VOU1VQUE9SVEVEX0FUVFJJQlVURScsIDY1ODAzKTsKZGVmaW5lKCdVX0ZNVF9QQVJTRV9FUlJPUl9MSU1JVCcsIDY1ODEyKTsKZGVmaW5lKCdVX0JSS19JTlRFUk5BTF9FUlJPUicsIDY2MDQ4KTsKZGVmaW5lKCdVX0JSS19FUlJPUl9TVEFSVCcsIDY2MDQ4KTsKZGVmaW5lKCdVX0JSS19IRVhfRElHSVRTX0VYUEVDVEVEJywgNjYwNDkpOwpkZWZpbmUoJ1VfQlJLX1NFTUlDT0xPTl9FWFBFQ1RFRCcsIDY2MDUwKTsKZGVmaW5lKCdVX0JSS19SVUxFX1NZTlRBWCcsIDY2MDUxKTsKZGVmaW5lKCdVX0JSS19VTkNMT1NFRF9TRVQnLCA2NjA1Mik7CmRlZmluZSgnVV9CUktfQVNTSUdOX0VSUk9SJywgNjYwNTMpOwpkZWZpbmUoJ1VfQlJLX1ZBUklBQkxFX1JFREZJTklUSU9OJywgNjYwNTQpOwpkZWZpbmUoJ1VfQlJLX01JU01BVENIRURfUEFSRU4nLCA2NjA1NSk7CmRlZmluZSgnVV9CUktfTkVXX0xJTkVfSU5fUVVPVEVEX1NUUklORycsIDY2MDU2KTsKZGVmaW5lKCdVX0JSS19VTkRFRklORURfVkFSSUFCTEUnLCA2NjA1Nyk7CmRlZmluZSgnVV9CUktfSU5JVF9FUlJPUicsIDY2MDU4KTsKZGVmaW5lKCdVX0JSS19SVUxFX0VNUFRZX1NFVCcsIDY2MDU5KTsKZGVmaW5lKCdVX0JSS19VTlJFQ09HTklaRURfT1BUSU9OJywgNjYwNjApOwpkZWZpbmUoJ1VfQlJLX01BTEZPUk1FRF9SVUxFX1RBRycsIDY2MDYxKTsKZGVmaW5lKCdVX0JSS19FUlJPUl9MSU1JVCcsIDY2MDYyKTsKZGVmaW5lKCdVX1JFR0VYX0lOVEVSTkFMX0VSUk9SJywgNjYzMDQpOwpkZWZpbmUoJ1VfUkVHRVhfRVJST1JfU1RBUlQnLCA2NjMwNCk7CmRlZmluZSgnVV9SRUdFWF9SVUxFX1NZTlRBWCcsIDY2MzA1KTsKZGVmaW5lKCdVX1JFR0VYX0lOVkFMSURfU1RBVEUnLCA2NjMwNik7CmRlZmluZSgnVV9SRUdFWF9CQURfRVNDQVBFX1NFUVVFTkNFJywgNjYzMDcpOwpkZWZpbmUoJ1VfUkVHRVhfUFJPUEVSVFlfU1lOVEFYJywgNjYzMDgpOwpkZWZpbmUoJ1VfUkVHRVhfVU5JTVBMRU1FTlRFRCcsIDY2MzA5KTsKZGVmaW5lKCdVX1JFR0VYX01JU01BVENIRURfUEFSRU4nLCA2NjMxMCk7CmRlZmluZSgnVV9SRUdFWF9OVU1CRVJfVE9PX0JJRycsIDY2MzExKTsKZGVmaW5lKCdVX1JFR0VYX0JBRF9JTlRFUlZBTCcsIDY2MzEyKTsKZGVmaW5lKCdVX1JFR0VYX01BWF9MVF9NSU4nLCA2NjMxMyk7CmRlZmluZSgnVV9SRUdFWF9JTlZBTElEX0JBQ0tfUkVGJywgNjYzMTQpOwpkZWZpbmUoJ1VfUkVHRVhfSU5WQUxJRF9GTEFHJywgNjYzMTUpOwpkZWZpbmUoJ1VfUkVHRVhfTE9PS19CRUhJTkRfTElNSVQnLCA2NjMxNik7CmRlZmluZSgnVV9SRUdFWF9TRVRfQ09OVEFJTlNfU1RSSU5HJywgNjYzMTcpOwpkZWZpbmUoJ1VfUkVHRVhfRVJST1JfTElNSVQnLCA2NjMyNik7CmRlZmluZSgnVV9JRE5BX1BST0hJQklURURfRVJST1InLCA2NjU2MCk7CmRlZmluZSgnVV9JRE5BX0VSUk9SX1NUQVJUJywgNjY1NjApOwpkZWZpbmUoJ1VfSUROQV9VTkFTU0lHTkVEX0VSUk9SJywgNjY1NjEpOwpkZWZpbmUoJ1VfSUROQV9DSEVDS19CSURJX0VSUk9SJywgNjY1NjIpOwpkZWZpbmUoJ1VfSUROQV9TVEQzX0FTQ0lJX1JVTEVTX0VSUk9SJywgNjY1NjMpOwpkZWZpbmUoJ1VfSUROQV9BQ0VfUFJFRklYX0VSUk9SJywgNjY1NjQpOwpkZWZpbmUoJ1VfSUROQV9WRVJJRklDQVRJT05fRVJST1InLCA2NjU2NSk7CmRlZmluZSgnVV9JRE5BX0xBQkVMX1RPT19MT05HX0VSUk9SJywgNjY1NjYpOwpkZWZpbmUoJ1VfSUROQV9aRVJPX0xFTkdUSF9MQUJFTF9FUlJPUicsIDY2NTY3KTsKZGVmaW5lKCdVX0lETkFfRE9NQUlOX05BTUVfVE9PX0xPTkdfRVJST1InLCA2NjU2OCk7CmRlZmluZSgnVV9JRE5BX0VSUk9SX0xJTUlUJywgNjY1NjkpOwpkZWZpbmUoJ1VfU1RSSU5HUFJFUF9QUk9ISUJJVEVEX0VSUk9SJywgNjY1NjApOwpkZWZpbmUoJ1VfU1RSSU5HUFJFUF9VTkFTU0lHTkVEX0VSUk9SJywgNjY1NjEpOwpkZWZpbmUoJ1VfU1RSSU5HUFJFUF9DSEVDS19CSURJX0VSUk9SJywgNjY1NjIpOwpkZWZpbmUoJ1VfRVJST1JfTElNSVQnLCA2NjgxOCk7CgovKioKICogUHJvaGliaXQgcHJvY2Vzc2luZyBvZiB1bmFzc2lnbmVkIGNvZGVwb2ludHMgaW4gdGhlIGlucHV0IGZvciBJRE4KICogZnVuY3Rpb25zIGFuZCBkbyBub3QgY2hlY2sgaWYgdGhlIGlucHV0IGNvbmZvcm1zIHRvIGRvbWFpbiBuYW1lIEFTQ0lJIHJ1bGVzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJRE5BX0RFRkFVTFQnLCAwKTsKCi8qKgogKiBBbGxvdyBwcm9jZXNzaW5nIG9mIHVuYXNzaWduZWQgY29kZXBvaW50cyBpbiB0aGUgaW5wdXQgZm9yIElETiBmdW5jdGlvbnMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lETkFfQUxMT1dfVU5BU1NJR05FRCcsIDEpOwoKLyoqCiAqIENoZWNrIGlmIHRoZSBpbnB1dCBmb3IgSUROIGZ1bmN0aW9ucyBjb25mb3JtcyB0byBkb21haW4gbmFtZSBBU0NJSSBydWxlcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUROQV9VU0VfU1REM19SVUxFUycsIDIpOwoKLyoqCiAqIENoZWNrIHdoZXRoZXIgdGhlIGlucHV0IGNvbmZvcm1zIHRvIHRoZSBCaURpIHJ1bGVzLgogKiBJZ25vcmVkIGJ5IHRoZSBJRE5BMjAwMyBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggYWx3YXlzIHBlcmZvcm1zIHRoaXMgY2hlY2suCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lETkFfQ0hFQ0tfQklESScsIDQpOwoKLyoqCiAqIENoZWNrIHdoZXRoZXIgdGhlIGlucHV0IGNvbmZvcm1zIHRvIHRoZSBDT05URVhUSiBydWxlcy4KICogSWdub3JlZCBieSB0aGUgSUROQTIwMDMgaW1wbGVtZW50YXRpb24sIGFzIHRoaXMgY2hlY2sgaXMgbmV3IGluIElETkEyMDA4LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJRE5BX0NIRUNLX0NPTlRFWFRKJywgOCk7CgovKioKICogT3B0aW9uIGZvciBub250cmFuc2l0aW9uYWwgcHJvY2Vzc2luZyBpbgogKiA8Yj5pZG5fdG9fYXNjaWk8L2I+LiBUcmFuc2l0aW9uYWwgcHJvY2Vzc2luZyBpcyBhY3RpdmF0ZWQKICogYnkgZGVmYXVsdC4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBieSB0aGUgSUROQTIwMDMgaW1wbGVtZW50YXRpb24uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lETkFfTk9OVFJBTlNJVElPTkFMX1RPX0FTQ0lJJywgMTYpOwoKLyoqCiAqIE9wdGlvbiBmb3Igbm9udHJhbnNpdGlvbmFsIHByb2Nlc3NpbmcgaW4KICogPGI+aWRuX3RvX3V0Zjg8L2I+LiBUcmFuc2l0aW9uYWwgcHJvY2Vzc2luZyBpcyBhY3RpdmF0ZWQKICogYnkgZGVmYXVsdC4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBieSB0aGUgSUROQTIwMDMgaW1wbGVtZW50YXRpb24uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW50bC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lETkFfTk9OVFJBTlNJVElPTkFMX1RPX1VOSUNPREUnLCAzMik7CgovKioKICogVXNlIElETkEgMjAwMyBhbGdvcml0aG0gaW4ge0BzZWUgaWRuX3RvX3V0Zjh9IGFuZAogKiB7QHNlZSBpZG5fdG9fYXNjaWl9LiBUaGlzIGlzIHRoZSBkZWZhdWx0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ludGwuY29uc3RhbnRzLnBocAogKiBAZGVwcmVjYXRlZCA3LjIgVXNlIHtAc2VlIElOVExfSUROQV9WQVJJQU5UX1VUUzQ2fSBpbnN0ZWFkLgogKi8KZGVmaW5lKCdJTlRMX0lETkFfVkFSSUFOVF8yMDAzJywgMCk7CgovKioKICogVXNlIFVUUyAjNDYgYWxnb3JpdGhtIGluIDxiPmlkbl90b191dGY4PC9iPiBhbmQKICogPGI+aWRuX3RvX2FzY2lpPC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSU5UTF9JRE5BX1ZBUklBTlRfVVRTNDYnLCAxKTsKCi8qKgogKiBFcnJvcnMgcmVwb3J0ZWQgaW4gYSBiaXRzZXQgcmV0dXJuZWQgYnkgdGhlIFVUUyAjNDYgYWxnb3JpdGhtIGluCiAqIDxiPmlkbl90b191dGY4PC9iPiBhbmQKICogPGI+aWRuX3RvX2FzY2lpPC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbnRsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUROQV9FUlJPUl9FTVBUWV9MQUJFTCcsIDEpOwovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbWlncmF0aW9uNTQuZ2xvYmFsLWNvbnN0YW50cy5waHAKICogQHNpbmNlIDUuNAogKi8KZGVmaW5lKCdJRE5BX0VSUk9SX0xBQkVMX1RPT19MT05HJywgMik7Ci8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9taWdyYXRpb241NC5nbG9iYWwtY29uc3RhbnRzLnBocAogKiBAc2luY2UgNS40CiAqLwpkZWZpbmUoJ0lETkFfRVJST1JfRE9NQUlOX05BTUVfVE9PX0xPTkcnLCA0KTsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL21pZ3JhdGlvbjU0Lmdsb2JhbC1jb25zdGFudHMucGhwCiAqIEBzaW5jZSA1LjQKICovCmRlZmluZSgnSUROQV9FUlJPUl9MRUFESU5HX0hZUEhFTicsIDgpOwovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbWlncmF0aW9uNTQuZ2xvYmFsLWNvbnN0YW50cy5waHAKICogQHNpbmNlIDUuNAogKi8KZGVmaW5lKCdJRE5BX0VSUk9SX1RSQUlMSU5HX0hZUEhFTicsIDE2KTsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL21pZ3JhdGlvbjU0Lmdsb2JhbC1jb25zdGFudHMucGhwCiAqIEBzaW5jZSA1LjQKICovCmRlZmluZSgnSUROQV9FUlJPUl9IWVBIRU5fM180JywgMzIpOwovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbWlncmF0aW9uNTQuZ2xvYmFsLWNvbnN0YW50cy5waHAKICogQHNpbmNlIDUuNAogKi8KZGVmaW5lKCdJRE5BX0VSUk9SX0xFQURJTkdfQ09NQklOSU5HX01BUksnLCA2NCk7Ci8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9taWdyYXRpb241NC5nbG9iYWwtY29uc3RhbnRzLnBocAogKiBAc2luY2UgNS40CiAqLwpkZWZpbmUoJ0lETkFfRVJST1JfRElTQUxMT1dFRCcsIDEyOCk7Ci8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9taWdyYXRpb241NC5nbG9iYWwtY29uc3RhbnRzLnBocAogKiBAc2luY2UgNS40CiAqLwpkZWZpbmUoJ0lETkFfRVJST1JfUFVOWUNPREUnLCAyNTYpOwovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbWlncmF0aW9uNTQuZ2xvYmFsLWNvbnN0YW50cy5waHAKICogQHNpbmNlIDUuNAogKi8KZGVmaW5lKCdJRE5BX0VSUk9SX0xBQkVMX0hBU19ET1QnLCA1MTIpOwovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbWlncmF0aW9uNTQuZ2xvYmFsLWNvbnN0YW50cy5waHAKICogQHNpbmNlIDUuNAogKi8KZGVmaW5lKCdJRE5BX0VSUk9SX0lOVkFMSURfQUNFX0xBQkVMJywgMTAyNCk7Ci8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9taWdyYXRpb241NC5nbG9iYWwtY29uc3RhbnRzLnBocAogKiBAc2luY2UgNS40CiAqLwpkZWZpbmUoJ0lETkFfRVJST1JfQklESScsIDIwNDgpOwovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbWlncmF0aW9uNTQuZ2xvYmFsLWNvbnN0YW50cy5waHAKICogQHNpbmNlIDUuNAogKi8KZGVmaW5lKCdJRE5BX0VSUk9SX0NPTlRFWFRKJywgNDA5Nik7CgovKioKICogQHNpbmNlIDUuNQogKi8KY2xhc3MgSW50bEJyZWFrSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZQp7CiAgICAvKiBDb25zdGFudHMgKi8KICAgIHB1YmxpYyBjb25zdCBET05FID0gLTE7CiAgICBwdWJsaWMgY29uc3QgV09SRF9OT05FID0gMDsKICAgIHB1YmxpYyBjb25zdCBXT1JEX05PTkVfTElNSVQgPSAxMDA7CiAgICBwdWJsaWMgY29uc3QgV09SRF9OVU1CRVIgPSAxMDA7CiAgICBwdWJsaWMgY29uc3QgV09SRF9OVU1CRVJfTElNSVQgPSAyMDA7CiAgICBwdWJsaWMgY29uc3QgV09SRF9MRVRURVIgPSAyMDA7CiAgICBwdWJsaWMgY29uc3QgV09SRF9MRVRURVJfTElNSVQgPSAzMDA7CiAgICBwdWJsaWMgY29uc3QgV09SRF9LQU5BID0gMzAwOwogICAgcHVibGljIGNvbnN0IFdPUkRfS0FOQV9MSU1JVCA9IDQwMDsKICAgIHB1YmxpYyBjb25zdCBXT1JEX0lERU8gPSA0MDA7CiAgICBwdWJsaWMgY29uc3QgV09SRF9JREVPX0xJTUlUID0gNTAwOwogICAgcHVibGljIGNvbnN0IExJTkVfU09GVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgTElORV9TT0ZUX0xJTUlUID0gMTAwOwogICAgcHVibGljIGNvbnN0IExJTkVfSEFSRCA9IDEwMDsKICAgIHB1YmxpYyBjb25zdCBMSU5FX0hBUkRfTElNSVQgPSAyMDA7CiAgICBwdWJsaWMgY29uc3QgU0VOVEVOQ0VfVEVSTSA9IDA7CiAgICBwdWJsaWMgY29uc3QgU0VOVEVOQ0VfVEVSTV9MSU1JVCA9IDEwMDsKICAgIHB1YmxpYyBjb25zdCBTRU5URU5DRV9TRVAgPSAxMDA7CiAgICBwdWJsaWMgY29uc3QgU0VOVEVOQ0VfU0VQX0xJTUlUID0gMjAwOwoKICAgIC8qIE1ldGhvZHMgKi8KICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIFByaXZhdGUgY29uc3RydWN0b3IgZm9yIGRpc2FsbG93aW5nIGluc3RhbnRpYXRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogQ3JlYXRlIGJyZWFrIGl0ZXJhdG9yIGZvciBib3VuZGFyaWVzIG9mIGNvbWJpbmluZyBjaGFyYWN0ZXIgc2VxdWVuY2VzCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsYnJlYWtpdGVyYXRvci5jcmVhdGVjaGFyYWN0ZXJpbnN0YW5jZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZQogICAgICogQHJldHVybiBJbnRsQnJlYWtJdGVyYXRvcnxudWxsCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQ2hhcmFjdGVySW5zdGFuY2UoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbG9jYWxlID0gbnVsbCk6ID9JbnRsQnJlYWtJdGVyYXRvciB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIENyZWF0ZSBicmVhayBpdGVyYXRvciBmb3IgYm91bmRhcmllcyBvZiBjb2RlIHBvaW50cwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGJyZWFraXRlcmF0b3IuY3JlYXRlY29kZXBvaW50aW5zdGFuY2UucGhwCiAgICAgKiBAcmV0dXJuIEludGxDb2RlUG9pbnRCcmVha0l0ZXJhdG9yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQ29kZVBvaW50SW5zdGFuY2UoKTogSW50bENvZGVQb2ludEJyZWFrSXRlcmF0b3Ige30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBDcmVhdGUgYnJlYWsgaXRlcmF0b3IgZm9yIGxvZ2ljYWxseSBwb3NzaWJsZSBsaW5lIGJyZWFrcwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGJyZWFraXRlcmF0b3IuY3JlYXRlbGluZWluc3RhbmNlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gSW50bEJyZWFrSXRlcmF0b3J8bnVsbAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUxpbmVJbnN0YW5jZSgjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRsb2NhbGUpOiA/SW50bEJyZWFrSXRlcmF0b3Ige30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBDcmVhdGUgYnJlYWsgaXRlcmF0b3IgZm9yIHNlbnRlbmNlIGJyZWFrcwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGJyZWFraXRlcmF0b3IuY3JlYXRlc2VudGVuY2VpbnN0YW5jZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIEludGxCcmVha0l0ZXJhdG9yfG51bGwKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVTZW50ZW5jZUluc3RhbmNlKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSk6ID9JbnRsQnJlYWtJdGVyYXRvciB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIENyZWF0ZSBicmVhayBpdGVyYXRvciBmb3IgdGl0bGUtY2FzaW5nIGJyZWFrcwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGJyZWFraXRlcmF0b3IuY3JlYXRldGl0bGVpbnN0YW5jZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIEludGxCcmVha0l0ZXJhdG9yfG51bGwKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVUaXRsZUluc3RhbmNlKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsZSk6ID9JbnRsQnJlYWtJdGVyYXRvciB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIENyZWF0ZSBicmVhayBpdGVyYXRvciBmb3Igd29yZCBicmVha3MKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxicmVha2l0ZXJhdG9yLmNyZWF0ZXdvcmRpbnN0YW5jZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsZSBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIEludGxCcmVha0l0ZXJhdG9yfG51bGwKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVXb3JkSW5zdGFuY2UoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbG9jYWxlKTogP0ludGxCcmVha0l0ZXJhdG9yIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogR2V0IGluZGV4IG9mIGN1cnJlbnQgcG9zaXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxicmVha2l0ZXJhdG9yLmN1cnJlbnQucGhwCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpOiBpbnQge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBTZXQgcG9zaXRpb24gdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgdGV4dAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGJyZWFraXRlcmF0b3IuZmlyc3QucGhwCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBmaXJzdCgpOiBpbnQge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBBZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgZmlyc3QgYm91bmRhcnkgZm9sbG93aW5nIHNwZWNpZmllZCBvZmZzZXQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxicmVha2l0ZXJhdG9yLmZvbGxvd2luZy5waHAKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9sbG93aW5nKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRvZmZzZXQpOiBpbnQge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBHZXQgbGFzdCBlcnJvciBjb2RlIG9uIHRoZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxicmVha2l0ZXJhdG9yLmdldGVycm9yY29kZS5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvckNvZGUoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogR2V0IGxhc3QgZXJyb3IgbWVzc2FnZSBvbiB0aGUgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsYnJlYWtpdGVyYXRvci5nZXRlcnJvcm1lc3NhZ2UucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIEdldCB0aGUgbG9jYWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsYnJlYWtpdGVyYXRvci5nZXRsb2NhbGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbGUoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHR5cGUpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBDcmVhdGUgaXRlcmF0b3IgZm9yIG5hdmlnYXRpbmcgZnJhZ21lbnRzIGJldHdlZW4gYm91bmRhcmllcwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGJyZWFraXRlcmF0b3IuZ2V0cGFydHNpdGVyYXRvci5waHAKICAgICAqIEBwYXJhbSBpbnQgJHR5cGUgW29wdGlvbmFsXQogICAgICogPHA+CiAgICAgKiBPcHRpb25hbCBrZXkgdHlwZS4gUG9zc2libGUgdmFsdWVzIGFyZToKICAgICAqIDwvcD48dWw+CiAgICAgKiA8bGk+CiAgICAgKiB7QHNlZSBJbnRsUGFydHNJdGVyYXRvcjo6S0VZX1NFUVVFTlRJQUx9CiAgICAgKiAtIFRoZSBkZWZhdWx0LiBTZXF1ZW50aWFsbHkgaW5jcmVhc2luZyBpbnRlZ2VycyB1c2VkIGFzIGtleS4KICAgICAqIDwvbGk+CiAgICAgKiA8bGk+CiAgICAgKiB7QHNlZSBJbnRsUGFydHNJdGVyYXRvcjo6S0VZX0xFRlR9CiAgICAgKiAtIEJ5dGUgb2Zmc2V0IGxlZnQgb2YgY3VycmVudCBwYXJ0IHVzZWQgYXMga2V5LgogICAgICogPC9saT4KICAgICAqIDxsaT4KICAgICAqIHtAc2VlIEludGxQYXJ0c0l0ZXJhdG9yOjpLRVlfUklHSFR9CiAgICAgKiAtIEJ5dGUgb2Zmc2V0IHJpZ2h0IG9mIGN1cnJlbnQgcGFydCB1c2VkIGFzIGtleS4KICAgICAqIDwvbGk+CiAgICAgKiA8L3VsPgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFydHNJdGVyYXRvcigKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjMnID0+ICdzdHJpbmcnLCAnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gI1tFVihbSW50bFBhcnRzSXRlcmF0b3I6OktFWV9TRVFVRU5USUFMLCBJbnRsUGFydHNJdGVyYXRvcjo6S0VZX0xFRlQsIEludGxQYXJ0c0l0ZXJhdG9yOjpLRVlfUklHSFRdKV0gJHR5cGUgPSBJbnRsUGFydHNJdGVyYXRvcjo6S0VZX1NFUVVFTlRJQUwKICAgICk6IEludGxQYXJ0c0l0ZXJhdG9yIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogR2V0IHRoZSB0ZXh0IGJlaW5nIHNjYW5uZWQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxicmVha2l0ZXJhdG9yLmdldHRleHQucGhwCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUZXh0KCk6ID9zdHJpbmcge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBUZWxsIHdoZXRoZXIgYW4gb2Zmc2V0IGlzIGEgYm91bmRhcnkncyBvZmZzZXQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxicmVha2l0ZXJhdG9yLmlzYm91bmRhcnkucGhwCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGlzQm91bmRhcnkoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJG9mZnNldCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBTZXQgdGhlIGl0ZXJhdG9yIHBvc2l0aW9uIHRvIGluZGV4IGJleW9uZCB0aGUgbGFzdCBjaGFyYWN0ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxicmVha2l0ZXJhdG9yLmxhc3QucGhwCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gbGFzdCgpOiBpbnQge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsYnJlYWtpdGVyYXRvci5uZXh0LnBocAogICAgICogQHBhcmFtIGludCAkb2Zmc2V0IFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2ludHxudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJG9mZnNldCA9IG51bGwpOiBpbnQge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsYnJlYWtpdGVyYXRvci5wcmVjZWRpbmcucGhwCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHByZWNlZGluZygjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkb2Zmc2V0KTogaW50IHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogU2V0IHRoZSBpdGVyYXRvciBwb3NpdGlvbiB0byB0aGUgYm91bmRhcnkgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjdXJyZW50CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsYnJlYWtpdGVyYXRvci5wcmV2aW91cy5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmV2aW91cygpOiBpbnQge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBTZXQgdGhlIHRleHQgYmVpbmcgc2Nhbm5lZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGJyZWFraXRlcmF0b3Iuc2V0dGV4dC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4zJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnYm9vbHxudWxsJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGV4dCgjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkdGV4dCkge30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjAKICAgICAqIEByZXR1cm4gSXRlcmF0b3IKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCk6IEl0ZXJhdG9yIHt9Cn0KCmNsYXNzIEludGxSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIGV4dGVuZHMgSW50bEJyZWFrSXRlcmF0b3IgaW1wbGVtZW50cyBUcmF2ZXJzYWJsZQp7CiAgICAvKiBNZXRob2RzICovCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsYnJlYWtpdGVyYXRvci5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRydWxlcwogICAgICogQHBhcmFtIHN0cmluZyAkY29tcGlsZWQgW29wdGlvbmFsXQogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHJ1bGVzLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkY29tcGlsZWQgPSBmYWxzZQogICAgKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIENyZWF0ZSBicmVhayBpdGVyYXRvciBmb3IgYm91bmRhcmllcyBvZiBjb21iaW5pbmcgY2hhcmFjdGVyIHNlcXVlbmNlcwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGJyZWFraXRlcmF0b3IuY3JlYXRlY2hhcmFjdGVyaW5zdGFuY2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUKICAgICAqIEByZXR1cm4gSW50bFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVDaGFyYWN0ZXJJbnN0YW5jZSgkbG9jYWxlKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIENyZWF0ZSBicmVhayBpdGVyYXRvciBmb3IgYm91bmRhcmllcyBvZiBjb2RlIHBvaW50cwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGJyZWFraXRlcmF0b3IuY3JlYXRlY29kZXBvaW50aW5zdGFuY2UucGhwCiAgICAgKiBAcmV0dXJuIEludGxSdWxlQmFzZWRCcmVha0l0ZXJhdG9yCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQ29kZVBvaW50SW5zdGFuY2UoKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIENyZWF0ZSBicmVhayBpdGVyYXRvciBmb3IgbG9naWNhbGx5IHBvc3NpYmxlIGxpbmUgYnJlYWtzCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsYnJlYWtpdGVyYXRvci5jcmVhdGVsaW5laW5zdGFuY2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgW29wdGlvbmFsXQogICAgICogQHJldHVybiBJbnRsUnVsZUJhc2VkQnJlYWtJdGVyYXRvcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUxpbmVJbnN0YW5jZSgkbG9jYWxlKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIENyZWF0ZSBicmVhayBpdGVyYXRvciBmb3Igc2VudGVuY2UgYnJlYWtzCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsYnJlYWtpdGVyYXRvci5jcmVhdGVzZW50ZW5jZWluc3RhbmNlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gSW50bFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVTZW50ZW5jZUluc3RhbmNlKCRsb2NhbGUpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogQ3JlYXRlIGJyZWFrIGl0ZXJhdG9yIGZvciB0aXRsZS1jYXNpbmcgYnJlYWtzCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRsYnJlYWtpdGVyYXRvci5jcmVhdGV0aXRsZWluc3RhbmNlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gSW50bFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVUaXRsZUluc3RhbmNlKCRsb2NhbGUpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogQ3JlYXRlIGJyZWFrIGl0ZXJhdG9yIGZvciB3b3JkIGJyZWFrcwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vaW50bGJyZWFraXRlcmF0b3IuY3JlYXRld29yZGluc3RhbmNlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxlIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gSW50bFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVXb3JkSW5zdGFuY2UoJGxvY2FsZSkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRscnVsZWJhc2VkYnJlYWtpdGVyYXRvci5nZXRiaW5hcnlydWxlcy5waHAKICAgICAqIEdldCB0aGUgYmluYXJ5IGZvcm0gb2YgY29tcGlsZWQgcnVsZXMKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCaW5hcnlSdWxlcygpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRscnVsZWJhc2VkYnJlYWtpdGVyYXRvci5nZXRydWxlcy5waHAKICAgICAqIEdldCB0aGUgcnVsZSBzZXQgdXNlZCB0byBjcmVhdGUgdGhpcyBvYmplY3QKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSdWxlcygpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRscnVsZWJhc2VkYnJlYWtpdGVyYXRvci5nZXRydWxlc3N0YXR1cy5waHAKICAgICAqIEdldCB0aGUgbGFyZ2VzdCBzdGF0dXMgdmFsdWUgZnJvbSB0aGUgYnJlYWsgcnVsZXMgdGhhdCBkZXRlcm1pbmVkIHRoZSBjdXJyZW50IGJyZWFrIHBvc2l0aW9uCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UnVsZVN0YXR1cygpOiBpbnQge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbnRscnVsZWJhc2VkYnJlYWtpdGVyYXRvci5nZXRydWxlc3RhdHVzdmVjLnBocAogICAgICogR2V0IHRoZSBzdGF0dXMgdmFsdWVzIGZyb20gdGhlIGJyZWFrIHJ1bGVzIHRoYXQgZGV0ZXJtaW5lZCB0aGUgY3VycmVudCBicmVhayBwb3NpdGlvbgogICAgICogQHJldHVybiBhcnJheXxmYWxzZQogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UnVsZVN0YXR1c1ZlYygpOiBhcnJheXxmYWxzZSB7fQp9CgovKioKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW50bHBhcnRzaXRlcmF0b3IucGhwCiAqIEBzaW5jZSA1LjUKICovCmNsYXNzIEludGxQYXJ0c0l0ZXJhdG9yIGV4dGVuZHMgSW50bEl0ZXJhdG9yIGltcGxlbWVudHMgSXRlcmF0b3IKewogICAgcHVibGljIGNvbnN0IEtFWV9TRVFVRU5USUFMID0gMDsKICAgIHB1YmxpYyBjb25zdCBLRVlfTEVGVCA9IDE7CiAgICBwdWJsaWMgY29uc3QgS0VZX1JJR0hUID0gMjsKCiAgICAvKioKICAgICAqIEByZXR1cm4gSW50bEJyZWFrSXRlcmF0b3IKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEJyZWFrSXRlcmF0b3IoKTogSW50bEJyZWFrSXRlcmF0b3Ige30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjEKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFJ1bGVTdGF0dXMoKTogaW50IHt9Cn0KCmNsYXNzIEludGxDb2RlUG9pbnRCcmVha0l0ZXJhdG9yIGV4dGVuZHMgSW50bEJyZWFrSXRlcmF0b3IgaW1wbGVtZW50cyBUcmF2ZXJzYWJsZQp7CiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBHZXQgbGFzdCBjb2RlIHBvaW50IHBhc3NlZCBvdmVyIGFmdGVyIGFkdmFuY2luZyBvciByZWNlZGluZyB0aGUgaXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2ludGxjb2RlcG9pbnRicmVha2l0ZXJhdG9yLmdldGxhc3Rjb2RlcG9pbnQucGhwCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdENvZGVQb2ludCgpOiBpbnQge30KfQoKY2xhc3MgVUNvbnZlcnRlcgp7CiAgICAvKiBDb25zdGFudHMgKi8KICAgIHB1YmxpYyBjb25zdCBSRUFTT05fVU5BU1NJR05FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUkVBU09OX0lMTEVHQUwgPSAxOwogICAgcHVibGljIGNvbnN0IFJFQVNPTl9JUlJFR1VMQVIgPSAyOwogICAgcHVibGljIGNvbnN0IFJFQVNPTl9SRVNFVCA9IDM7CiAgICBwdWJsaWMgY29uc3QgUkVBU09OX0NMT1NFID0gNDsKICAgIHB1YmxpYyBjb25zdCBSRUFTT05fQ0xPTkUgPSA1OwogICAgcHVibGljIGNvbnN0IFVOU1VQUE9SVEVEX0NPTlZFUlRFUiA9IC0xOwogICAgcHVibGljIGNvbnN0IFNCQ1MgPSAwOwogICAgcHVibGljIGNvbnN0IERCQ1MgPSAxOwogICAgcHVibGljIGNvbnN0IE1CQ1MgPSAyOwogICAgcHVibGljIGNvbnN0IExBVElOXzEgPSAzOwogICAgcHVibGljIGNvbnN0IFVURjggPSA0OwogICAgcHVibGljIGNvbnN0IFVURjE2X0JpZ0VuZGlhbiA9IDU7CiAgICBwdWJsaWMgY29uc3QgVVRGMTZfTGl0dGxlRW5kaWFuID0gNjsKICAgIHB1YmxpYyBjb25zdCBVVEYzMl9CaWdFbmRpYW4gPSA3OwogICAgcHVibGljIGNvbnN0IFVURjMyX0xpdHRsZUVuZGlhbiA9IDg7CiAgICBwdWJsaWMgY29uc3QgRUJDRElDX1NUQVRFRlVMID0gOTsKICAgIHB1YmxpYyBjb25zdCBJU09fMjAyMiA9IDEwOwogICAgcHVibGljIGNvbnN0IExNQkNTXzEgPSAxMTsKICAgIHB1YmxpYyBjb25zdCBMTUJDU18yID0gMTI7CiAgICBwdWJsaWMgY29uc3QgTE1CQ1NfMyA9IDEzOwogICAgcHVibGljIGNvbnN0IExNQkNTXzQgPSAxNDsKICAgIHB1YmxpYyBjb25zdCBMTUJDU181ID0gMTU7CiAgICBwdWJsaWMgY29uc3QgTE1CQ1NfNiA9IDE2OwogICAgcHVibGljIGNvbnN0IExNQkNTXzggPSAxNzsKICAgIHB1YmxpYyBjb25zdCBMTUJDU18xMSA9IDE4OwogICAgcHVibGljIGNvbnN0IExNQkNTXzE2ID0gMTk7CiAgICBwdWJsaWMgY29uc3QgTE1CQ1NfMTcgPSAyMDsKICAgIHB1YmxpYyBjb25zdCBMTUJDU18xOCA9IDIxOwogICAgcHVibGljIGNvbnN0IExNQkNTXzE5ID0gMjI7CiAgICBwdWJsaWMgY29uc3QgTE1CQ1NfTEFTVCA9IDIyOwogICAgcHVibGljIGNvbnN0IEhaID0gMjM7CiAgICBwdWJsaWMgY29uc3QgU0NTVSA9IDI0OwogICAgcHVibGljIGNvbnN0IElTQ0lJID0gMjU7CiAgICBwdWJsaWMgY29uc3QgVVNfQVNDSUkgPSAyNjsKICAgIHB1YmxpYyBjb25zdCBVVEY3ID0gMjc7CiAgICBwdWJsaWMgY29uc3QgQk9DVTEgPSAyODsKICAgIHB1YmxpYyBjb25zdCBVVEYxNiA9IDI5OwogICAgcHVibGljIGNvbnN0IFVURjMyID0gMzA7CiAgICBwdWJsaWMgY29uc3QgQ0VTVTggPSAzMTsKICAgIHB1YmxpYyBjb25zdCBJTUFQX01BSUxCT1ggPSAzMjsKCiAgICAvKiBNZXRob2RzICovCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBDcmVhdGUgVUNvbnZlcnRlciBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdWNvbnZlcnRlci5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXN0aW5hdGlvbl9lbmNvZGluZwogICAgICogQHBhcmFtIHN0cmluZyAkc291cmNlX2VuY29kaW5nCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRkZXN0aW5hdGlvbl9lbmNvZGluZyA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkc291cmNlX2VuY29kaW5nID0gbnVsbAogICAgKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIENvbnZlcnQgc3RyaW5nIGZyb20gb25lIGNoYXJzZXQgdG8gYW5vdGhlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Vjb252ZXJ0ZXIuY29udmVydC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cgogICAgICogQHBhcmFtIGJvb2wgJHJldmVyc2UgW29wdGlvbmFsXQogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnQoCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHN0ciwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJHJldmVyc2UgPSBmYWxzZQogICAgKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogRGVmYXVsdCAiZnJvbSIgY2FsbGJhY2sgZnVuY3Rpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdWNvbnZlcnRlci5mcm9tdWNhbGxiYWNrLnBocAogICAgICogQHBhcmFtIGludCAkcmVhc29uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzb3VyY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvZGVQb2ludAogICAgICogQHBhcmFtIGludCAmJGVycm9yCiAgICAgKiBAcmV0dXJuIGFycmF5fHN0cmluZ3xpbnR8bnVsbAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJvbVVDYWxsYmFjaygKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkcmVhc29uLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ2FycmF5J10sIGRlZmF1bHQ6ICcnKV0gJHNvdXJjZSwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkY29kZVBvaW50LAogICAgICAgICYkZXJyb3IKICAgICk6IGFycmF5fHN0cmluZ3xpbnR8bnVsbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIEdldCB0aGUgYWxpYXNlcyBvZiB0aGUgZ2l2ZW4gbmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi91Y29udmVydGVyLmdldGFsaWFzZXMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlfG51bGwKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRBbGlhc2VzKAogICAgICAgICNbRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS41JywgdG86ICc1LjYnKV0gJG5hbWUgPSAnJywKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMCcpXSAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZQogICAgKTogYXJyYXl8ZmFsc2V8bnVsbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIEdldCB0aGUgYXZhaWxhYmxlIGNhbm9uaWNhbCBjb252ZXJ0ZXIgbmFtZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdWNvbnZlcnRlci5nZXRhdmFpbGFibGUucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QXZhaWxhYmxlKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogR2V0IHRoZSBkZXN0aW5hdGlvbiBlbmNvZGluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi91Y29udmVydGVyLmdldGRlc3RpbmF0aW9uZW5jb2RpbmcucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZXxudWxsCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZXN0aW5hdGlvbkVuY29kaW5nKCk6IHN0cmluZ3xmYWxzZXxudWxsIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogR2V0IHRoZSBkZXN0aW5hdGlvbiBjb252ZXJ0ZXIgdHlwZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi91Y29udmVydGVyLmdldGRlc3RpbmF0aW9udHlwZS5waHAKICAgICAqIEByZXR1cm4gaW50fGZhbHNlfG51bGwKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldERlc3RpbmF0aW9uVHlwZSgpOiBpbnR8ZmFsc2V8bnVsbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIEdldCBsYXN0IGVycm9yIGNvZGUgb24gdGhlIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi91Y29udmVydGVyLmdldGVycm9yY29kZS5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvckNvZGUoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogR2V0IGxhc3QgZXJyb3IgbWVzc2FnZSBvbiB0aGUgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Vjb252ZXJ0ZXIuZ2V0ZXJyb3JtZXNzYWdlLnBocAogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKCk6ID9zdHJpbmcge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBHZXQgdGhlIHNvdXJjZSBlbmNvZGluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi91Y29udmVydGVyLmdldHNvdXJjZWVuY29kaW5nLnBocAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2V8bnVsbAogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U291cmNlRW5jb2RpbmcoKTogc3RyaW5nfGZhbHNlfG51bGwge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBHZXQgdGhlIHNvdXJjZSBjb252ZXJ0b3IgdHlwZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi91Y29udmVydGVyLmdldHNvdXJjZXR5cGUucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZXxudWxsCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTb3VyY2VUeXBlKCk6IGludHxmYWxzZXxudWxsIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogR2V0IHN0YW5kYXJkcyBhc3NvY2lhdGVkIHRvIGNvbnZlcnRlciBuYW1lcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi91Y29udmVydGVyLmdldHN0YW5kYXJkcy5waHAKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbAogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN0YW5kYXJkcygpOiA/YXJyYXkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBHZXQgc3Vic3RpdHV0aW9uIGNoYXJzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Vjb252ZXJ0ZXIuZ2V0c3Vic3RjaGFycy5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlfG51bGwKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFN1YnN0Q2hhcnMoKTogc3RyaW5nfGZhbHNlfG51bGwge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjYWxsYmFjayByZWFzb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdWNvbnZlcnRlci5yZWFzb250ZXh0LnBocAogICAgICogQHBhcmFtIGludCAkcmVhc29uCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlYXNvblRleHQoCiAgICAgICAgI1tFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSAkcmVhc29uID0gMCwKICAgICAgICAjW0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSBpbnQgJHJlYXNvbgogICAgKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogU2V0IHRoZSBkZXN0aW5hdGlvbiBlbmNvZGluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi91Y29udmVydGVyLnNldGRlc3RpbmF0aW9uZW5jb2RpbmcucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREZXN0aW5hdGlvbkVuY29kaW5nKCNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRlbmNvZGluZyk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PTUuNS4wKTxici8+CiAgICAgKiBTZXQgdGhlIHNvdXJjZSBlbmNvZGluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi91Y29udmVydGVyLnNldHNvdXJjZWVuY29kaW5nLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U291cmNlRW5jb2RpbmcoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGVuY29kaW5nKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIFNldCB0aGUgc3Vic3RpdHV0aW9uIGNoYXJzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Vjb252ZXJ0ZXIuc2V0c3Vic3RjaGFycy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNoYXJzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldFN1YnN0Q2hhcnMoI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNoYXJzKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9NS41LjApPGJyLz4KICAgICAqIERlZmF1bHQgInRvIiBjYWxsYmFjayBmdW5jdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi91Y29udmVydGVyLnRvdWNhbGxiYWNrLnBocAogICAgICogQHBhcmFtIGludCAkcmVhc29uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzb3VyY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvZGVVbml0cwogICAgICogQHBhcmFtIGludCAmJGVycm9yCiAgICAgKiBAcmV0dXJuIGFycmF5fHN0cmluZ3xpbnR8bnVsbAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9VQ2FsbGJhY2soCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHJlYXNvbiwKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkc291cmNlLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb2RlVW5pdHMsCiAgICAgICAgJiRlcnJvcgogICAgKTogYXJyYXl8c3RyaW5nfGludHxudWxsIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogICAgICogQ29udmVydCBzdHJpbmcgZnJvbSBvbmUgY2hhcnNldCB0byBhbm90aGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Vjb252ZXJ0ZXIudHJhbnNjb2RlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc3RyCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0b0VuY29kaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmcm9tRW5jb2RpbmcKICAgICAqIEBwYXJhbSBhcnJheXxudWxsICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRyYW5zY29kZSgKICAgICAgICAjW0xhbmd1YWdlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkc3RyLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR0b0VuY29kaW5nLAogICAgICAgICNbTGFuZ3VhZ2VBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRmcm9tRW5jb2RpbmcsCiAgICAgICAgI1tMYW5ndWFnZUF3YXJlKFsnOC4wJyA9PiAnYXJyYXl8bnVsbCddLCBkZWZhdWx0OiAnJyldICRvcHRpb25zID0gbnVsbAogICAgKTogc3RyaW5nfGZhbHNlIHt9Cn0KLy8gRW5kIG9mIGludGwgdi4xLjEuMAo8P3BocAoKLyoqCiAqIEBzaW5jZSA4LjEKICovCmNsYXNzIEludGxEYXRlUGF0dGVybkdlbmVyYXRvcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoP3N0cmluZyAkbG9jYWxlID0gbnVsbCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZSg/c3RyaW5nICRsb2NhbGUgPSBudWxsKTogP0ludGxEYXRlUGF0dGVybkdlbmVyYXRvciB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCZXN0UGF0dGVybihzdHJpbmcgJHNrZWxldG9uKTogc3RyaW5nfGZhbHNlIHt9Cn0KPD9waHAKCi8vIFN0YXJ0IG9mIGltYWdpY2sgdi4zLjQuMwoKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxBcnJheVNoYXBlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXERlcHJlY2F0ZWQ7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cUHVyZTsKCmNsYXNzIEltYWdpY2tFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KCmNsYXNzIEltYWdpY2tEcmF3RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CgpjbGFzcyBJbWFnaWNrUGl4ZWxJdGVyYXRvckV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQoKY2xhc3MgSW1hZ2lja1BpeGVsRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CgpjbGFzcyBJbWFnaWNrS2VybmVsRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CgovKioKICogQG1ldGhvZCBJbWFnaWNrIGNsb25lKCkgKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPk1ha2VzIGFuIGV4YWN0IGNvcHkgb2YgdGhlIEltYWdpY2sgb2JqZWN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuaW1hZ2ljay5waHAKICovCmNsYXNzIEltYWdpY2sgaW1wbGVtZW50cyBJdGVyYXRvciwgQ291bnRhYmxlCnsKICAgIHB1YmxpYyBjb25zdCBDT0xPUl9CTEFDSyA9IDExOwogICAgcHVibGljIGNvbnN0IENPTE9SX0JMVUUgPSAxMjsKICAgIHB1YmxpYyBjb25zdCBDT0xPUl9DWUFOID0gMTM7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JfR1JFRU4gPSAxNDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUl9SRUQgPSAxNTsKICAgIHB1YmxpYyBjb25zdCBDT0xPUl9ZRUxMT1cgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBDT0xPUl9NQUdFTlRBID0gMTc7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JfT1BBQ0lUWSA9IDE4OwogICAgcHVibGljIGNvbnN0IENPTE9SX0FMUEhBID0gMTk7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JfRlVaWiA9IDIwOwogICAgcHVibGljIGNvbnN0IElNQUdJQ0tfRVhUTlVNID0gMzA0MDM7CiAgICBwdWJsaWMgY29uc3QgSU1BR0lDS19FWFRWRVIgPSAiMy40LjMiOwogICAgcHVibGljIGNvbnN0IFFVQU5UVU1fUkFOR0UgPSA2NTUzNTsKICAgIHB1YmxpYyBjb25zdCBVU0VfWkVORF9NTSA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0RFRkFVTFQgPSA0MDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfTk8gPSAxOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9BREQgPSAyOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9BVE9QID0gMzsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQkxFTkQgPSA0OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9CVU1QTUFQID0gNTsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQ0xFQVIgPSA3OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9DT0xPUkJVUk4gPSA4OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9DT0xPUkRPREdFID0gOTsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQ09MT1JJWkUgPSAxMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQ09QWUJMQUNLID0gMTE7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0NPUFlCTFVFID0gMTI7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0NPUFkgPSAxMzsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQ09QWUNZQU4gPSAxNDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQ09QWUdSRUVOID0gMTU7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0NPUFlNQUdFTlRBID0gMTY7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0NPUFlPUEFDSVRZID0gMTc7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0NPUFlSRUQgPSAxODsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQ09QWVlFTExPVyA9IDE5OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9EQVJLRU4gPSAyMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfRFNUQVRPUCA9IDIxOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9EU1QgPSAyMjsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfRFNUSU4gPSAyMzsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfRFNUT1VUID0gMjQ7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0RTVE9WRVIgPSAyNTsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfRElGRkVSRU5DRSA9IDI2OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9ESVNQTEFDRSA9IDI3OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9ESVNTT0xWRSA9IDI4OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9FWENMVVNJT04gPSAyOTsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfSEFSRExJR0hUID0gMzA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0hVRSA9IDMxOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9JTiA9IDMyOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9MSUdIVEVOID0gMzM7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0xVTUlOSVpFID0gMzU7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX01JTlVTID0gMzY7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX01PRFVMQVRFID0gMzc7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX01VTFRJUExZID0gMzg7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX09VVCA9IDM5OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9PVkVSID0gNDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX09WRVJMQVkgPSA0MTsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfUExVUyA9IDQyOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9SRVBMQUNFID0gNDM7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX1NBVFVSQVRFID0gNDQ7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX1NDUkVFTiA9IDQ1OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9TT0ZUTElHSFQgPSA0NjsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfU1JDQVRPUCA9IDQ3OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9TUkMgPSA0ODsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfU1JDSU4gPSA0OTsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfU1JDT1VUID0gNTA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX1NSQ09WRVIgPSA1MTsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfU1VCVFJBQ1QgPSA1MjsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfVEhSRVNIT0xEID0gNTM7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX1hPUiA9IDU0OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9DSEFOR0VNQVNLID0gNjsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfTElORUFSTElHSFQgPSAzNDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfRElWSURFID0gNTU7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0RJU1RPUlQgPSA1NjsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQkxVUiA9IDU3OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9QRUdUT1BMSUdIVCA9IDU4OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9WSVZJRExJR0hUID0gNTk7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX1BJTkxJR0hUID0gNjA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0xJTkVBUkRPREdFID0gNjE7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0xJTkVBUkJVUk4gPSA2MjsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfTUFUSEVNQVRJQ1MgPSA2MzsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfTU9EVUxVU0FERCA9IDI7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX01PRFVMVVNTVUJUUkFDVCA9IDUyOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9NSU5VU0RTVCA9IDM2OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9ESVZJREVEU1QgPSA1NTsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfRElWSURFU1JDID0gNjQ7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX01JTlVTU1JDID0gNjU7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0RBUktFTklOVEVOU0lUWSA9IDY2OwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9MSUdIVEVOSU5URU5TSVRZID0gNjc7CiAgICBwdWJsaWMgY29uc3QgTU9OVEFHRU1PREVfRlJBTUUgPSAxOwogICAgcHVibGljIGNvbnN0IE1PTlRBR0VNT0RFX1VORlJBTUUgPSAyOwogICAgcHVibGljIGNvbnN0IE1PTlRBR0VNT0RFX0NPTkNBVEVOQVRFID0gMzsKICAgIHB1YmxpYyBjb25zdCBTVFlMRV9OT1JNQUwgPSAxOwogICAgcHVibGljIGNvbnN0IFNUWUxFX0lUQUxJQyA9IDI7CiAgICBwdWJsaWMgY29uc3QgU1RZTEVfT0JMSVFVRSA9IDM7CiAgICBwdWJsaWMgY29uc3QgU1RZTEVfQU5ZID0gNDsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfUE9JTlQgPSAxOwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9CT1ggPSAyOwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9UUklBTkdMRSA9IDM7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX0hFUk1JVEUgPSA0OwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9IQU5OSU5HID0gNTsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfSEFNTUlORyA9IDY7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX0JMQUNLTUFOID0gNzsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfR0FVU1NJQU4gPSA4OwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9RVUFEUkFUSUMgPSA5OwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9DVUJJQyA9IDEwOwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9DQVRST00gPSAxMTsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfTUlUQ0hFTEwgPSAxMjsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfTEFOQ1pPUyA9IDIyOwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9CRVNTRUwgPSAxMzsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfU0lOQyA9IDE0OwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9LQUlTRVIgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfV0VMU0ggPSAxNzsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfUEFSWkVOID0gMTg7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX0xBR1JBTkdFID0gMjE7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX1NFTlRJTkVMID0gMzE7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX0JPSE1BTiA9IDE5OwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9CQVJUTEVUVCA9IDIwOwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9KSU5DID0gMTM7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX1NJTkNGQVNUID0gMTU7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX1JPQklET1VYID0gMjY7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX0xBTkNaT1NTSEFSUCA9IDIzOwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9MQU5DWk9TMiA9IDI0OwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9MQU5DWk9TMlNIQVJQID0gMjU7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX1JPQklET1VYU0hBUlAgPSAyNzsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfQ09TSU5FID0gMjg7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX1NQTElORSA9IDI5OwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9MQU5DWk9TUkFESVVTID0gMzA7CiAgICBwdWJsaWMgY29uc3QgSU1HVFlQRV9VTkRFRklORUQgPSAwOwogICAgcHVibGljIGNvbnN0IElNR1RZUEVfQklMRVZFTCA9IDE7CiAgICBwdWJsaWMgY29uc3QgSU1HVFlQRV9HUkFZU0NBTEUgPSAyOwogICAgcHVibGljIGNvbnN0IElNR1RZUEVfR1JBWVNDQUxFTUFUVEUgPSAzOwogICAgcHVibGljIGNvbnN0IElNR1RZUEVfUEFMRVRURSA9IDQ7CiAgICBwdWJsaWMgY29uc3QgSU1HVFlQRV9QQUxFVFRFTUFUVEUgPSA1OwogICAgcHVibGljIGNvbnN0IElNR1RZUEVfVFJVRUNPTE9SID0gNjsKICAgIHB1YmxpYyBjb25zdCBJTUdUWVBFX1RSVUVDT0xPUk1BVFRFID0gNzsKICAgIHB1YmxpYyBjb25zdCBJTUdUWVBFX0NPTE9SU0VQQVJBVElPTiA9IDg7CiAgICBwdWJsaWMgY29uc3QgSU1HVFlQRV9DT0xPUlNFUEFSQVRJT05NQVRURSA9IDk7CiAgICBwdWJsaWMgY29uc3QgSU1HVFlQRV9PUFRJTUlaRSA9IDEwOwogICAgcHVibGljIGNvbnN0IElNR1RZUEVfUEFMRVRURUJJTEVWRUxNQVRURSA9IDExOwogICAgcHVibGljIGNvbnN0IFJFU09MVVRJT05fVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBSRVNPTFVUSU9OX1BJWEVMU1BFUklOQ0ggPSAxOwogICAgcHVibGljIGNvbnN0IFJFU09MVVRJT05fUElYRUxTUEVSQ0VOVElNRVRFUiA9IDI7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9OTyA9IDE7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fQlpJUCA9IDI7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fRkFYID0gNjsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9HUk9VUDQgPSA3OwogICAgcHVibGljIGNvbnN0IENPTVBSRVNTSU9OX0pQRUcgPSA4OwogICAgcHVibGljIGNvbnN0IENPTVBSRVNTSU9OX0pQRUcyMDAwID0gOTsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9MT1NTTEVTU0pQRUcgPSAxMDsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9MWlcgPSAxMTsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9STEUgPSAxMjsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9aSVAgPSAxMzsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9EWFQxID0gMzsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9EWFQzID0gNDsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9EWFQ1ID0gNTsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9aSVBTID0gMTQ7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fUElaID0gMTU7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fUFhSMjQgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9CNDQgPSAxNzsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9CNDRBID0gMTg7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fTFpNQSA9IDE5OwogICAgcHVibGljIGNvbnN0IENPTVBSRVNTSU9OX0pCSUcxID0gMjA7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fSkJJRzIgPSAyMTsKICAgIHB1YmxpYyBjb25zdCBQQUlOVF9QT0lOVCA9IDE7CiAgICBwdWJsaWMgY29uc3QgUEFJTlRfUkVQTEFDRSA9IDI7CiAgICBwdWJsaWMgY29uc3QgUEFJTlRfRkxPT0RGSUxMID0gMzsKICAgIHB1YmxpYyBjb25zdCBQQUlOVF9GSUxMVE9CT1JERVIgPSA0OwogICAgcHVibGljIGNvbnN0IFBBSU5UX1JFU0VUID0gNTsKICAgIHB1YmxpYyBjb25zdCBHUkFWSVRZX05PUlRIV0VTVCA9IDE7CiAgICBwdWJsaWMgY29uc3QgR1JBVklUWV9OT1JUSCA9IDI7CiAgICBwdWJsaWMgY29uc3QgR1JBVklUWV9OT1JUSEVBU1QgPSAzOwogICAgcHVibGljIGNvbnN0IEdSQVZJVFlfV0VTVCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgR1JBVklUWV9DRU5URVIgPSA1OwogICAgcHVibGljIGNvbnN0IEdSQVZJVFlfRUFTVCA9IDY7CiAgICBwdWJsaWMgY29uc3QgR1JBVklUWV9TT1VUSFdFU1QgPSA3OwogICAgcHVibGljIGNvbnN0IEdSQVZJVFlfU09VVEggPSA4OwogICAgcHVibGljIGNvbnN0IEdSQVZJVFlfU09VVEhFQVNUID0gOTsKICAgIHB1YmxpYyBjb25zdCBHUkFWSVRZX0ZPUkdFVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgR1JBVklUWV9TVEFUSUMgPSAxMDsKICAgIHB1YmxpYyBjb25zdCBTVFJFVENIX05PUk1BTCA9IDE7CiAgICBwdWJsaWMgY29uc3QgU1RSRVRDSF9VTFRSQUNPTkRFTlNFRCA9IDI7CiAgICBwdWJsaWMgY29uc3QgU1RSRVRDSF9FWFRSQUNPTkRFTlNFRCA9IDM7CiAgICBwdWJsaWMgY29uc3QgU1RSRVRDSF9DT05ERU5TRUQgPSA0OwogICAgcHVibGljIGNvbnN0IFNUUkVUQ0hfU0VNSUNPTkRFTlNFRCA9IDU7CiAgICBwdWJsaWMgY29uc3QgU1RSRVRDSF9TRU1JRVhQQU5ERUQgPSA2OwogICAgcHVibGljIGNvbnN0IFNUUkVUQ0hfRVhQQU5ERUQgPSA3OwogICAgcHVibGljIGNvbnN0IFNUUkVUQ0hfRVhUUkFFWFBBTkRFRCA9IDg7CiAgICBwdWJsaWMgY29uc3QgU1RSRVRDSF9VTFRSQUVYUEFOREVEID0gOTsKICAgIHB1YmxpYyBjb25zdCBTVFJFVENIX0FOWSA9IDEwOwogICAgcHVibGljIGNvbnN0IEFMSUdOX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgQUxJR05fTEVGVCA9IDE7CiAgICBwdWJsaWMgY29uc3QgQUxJR05fQ0VOVEVSID0gMjsKICAgIHB1YmxpYyBjb25zdCBBTElHTl9SSUdIVCA9IDM7CiAgICBwdWJsaWMgY29uc3QgREVDT1JBVElPTl9OTyA9IDE7CiAgICBwdWJsaWMgY29uc3QgREVDT1JBVElPTl9VTkRFUkxJTkUgPSAyOwogICAgcHVibGljIGNvbnN0IERFQ09SQVRJT05fT1ZFUkxJTkUgPSAzOwogICAgcHVibGljIGNvbnN0IERFQ09SQVRJT05fTElORVRST1VHSCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgREVDT1JBVElPTl9MSU5FVEhST1VHSCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgTk9JU0VfVU5JRk9STSA9IDE7CiAgICBwdWJsaWMgY29uc3QgTk9JU0VfR0FVU1NJQU4gPSAyOwogICAgcHVibGljIGNvbnN0IE5PSVNFX01VTFRJUExJQ0FUSVZFR0FVU1NJQU4gPSAzOwogICAgcHVibGljIGNvbnN0IE5PSVNFX0lNUFVMU0UgPSA0OwogICAgcHVibGljIGNvbnN0IE5PSVNFX0xBUExBQ0lBTiA9IDU7CiAgICBwdWJsaWMgY29uc3QgTk9JU0VfUE9JU1NPTiA9IDY7CiAgICBwdWJsaWMgY29uc3QgTk9JU0VfUkFORE9NID0gNzsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ0hBTk5FTF9SRUQgPSAxOwogICAgcHVibGljIGNvbnN0IENIQU5ORUxfR1JBWSA9IDE7CiAgICBwdWJsaWMgY29uc3QgQ0hBTk5FTF9DWUFOID0gMTsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX0dSRUVOID0gMjsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX01BR0VOVEEgPSAyOwogICAgcHVibGljIGNvbnN0IENIQU5ORUxfQkxVRSA9IDQ7CiAgICBwdWJsaWMgY29uc3QgQ0hBTk5FTF9ZRUxMT1cgPSA0OwogICAgcHVibGljIGNvbnN0IENIQU5ORUxfQUxQSEEgPSA4OwogICAgcHVibGljIGNvbnN0IENIQU5ORUxfT1BBQ0lUWSA9IDg7CiAgICBwdWJsaWMgY29uc3QgQ0hBTk5FTF9NQVRURSA9IDg7CiAgICBwdWJsaWMgY29uc3QgQ0hBTk5FTF9CTEFDSyA9IDMyOwogICAgcHVibGljIGNvbnN0IENIQU5ORUxfSU5ERVggPSAzMjsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX0FMTCA9IDEzNDIxNzcyNzsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX0RFRkFVTFQgPSAxMzQyMTc3MTk7CiAgICBwdWJsaWMgY29uc3QgQ0hBTk5FTF9SR0JBID0gMTU7CiAgICBwdWJsaWMgY29uc3QgQ0hBTk5FTF9UUlVFQUxQSEEgPSA2NDsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX1JHQlMgPSAxMjg7CiAgICBwdWJsaWMgY29uc3QgQ0hBTk5FTF9HUkFZX0NIQU5ORUxTID0gMTI4OwogICAgcHVibGljIGNvbnN0IENIQU5ORUxfU1lOQyA9IDI1NjsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX0NPTVBPU0lURVMgPSA0NzsKICAgIHB1YmxpYyBjb25zdCBNRVRSSUNfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBNRVRSSUNfQUJTT0xVVEVFUlJPUk1FVFJJQyA9IDE7CiAgICBwdWJsaWMgY29uc3QgTUVUUklDX01FQU5BQlNPTFVURUVSUk9SID0gMjsKICAgIHB1YmxpYyBjb25zdCBNRVRSSUNfTUVBTkVSUk9SUEVSUElYRUxNRVRSSUMgPSAzOwogICAgcHVibGljIGNvbnN0IE1FVFJJQ19NRUFOU1FVQVJFRVJST1IgPSA0OwogICAgcHVibGljIGNvbnN0IE1FVFJJQ19QRUFLQUJTT0xVVEVFUlJPUiA9IDU7CiAgICBwdWJsaWMgY29uc3QgTUVUUklDX1BFQUtTSUdOQUxUT05PSVNFUkFUSU8gPSA2OwogICAgcHVibGljIGNvbnN0IE1FVFJJQ19ST09UTUVBTlNRVUFSRURFUlJPUiA9IDc7CiAgICBwdWJsaWMgY29uc3QgTUVUUklDX05PUk1BTElaRURDUk9TU0NPUlJFTEFUSU9ORVJST1JNRVRSSUMgPSA4OwogICAgcHVibGljIGNvbnN0IE1FVFJJQ19GVVpaRVJST1IgPSA5OwogICAgcHVibGljIGNvbnN0IFBJWEVMX0NIQVIgPSAxOwogICAgcHVibGljIGNvbnN0IFBJWEVMX0RPVUJMRSA9IDI7CiAgICBwdWJsaWMgY29uc3QgUElYRUxfRkxPQVQgPSAzOwogICAgcHVibGljIGNvbnN0IFBJWEVMX0lOVEVHRVIgPSA0OwogICAgcHVibGljIGNvbnN0IFBJWEVMX0xPTkcgPSA1OwogICAgcHVibGljIGNvbnN0IFBJWEVMX1FVQU5UVU0gPSA2OwogICAgcHVibGljIGNvbnN0IFBJWEVMX1NIT1JUID0gNzsKICAgIHB1YmxpYyBjb25zdCBFVkFMVUFURV9VTkRFRklORUQgPSAwOwogICAgcHVibGljIGNvbnN0IEVWQUxVQVRFX0FERCA9IDE7CiAgICBwdWJsaWMgY29uc3QgRVZBTFVBVEVfQU5EID0gMjsKICAgIHB1YmxpYyBjb25zdCBFVkFMVUFURV9ESVZJREUgPSAzOwogICAgcHVibGljIGNvbnN0IEVWQUxVQVRFX0xFRlRTSElGVCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgRVZBTFVBVEVfTUFYID0gNTsKICAgIHB1YmxpYyBjb25zdCBFVkFMVUFURV9NSU4gPSA2OwogICAgcHVibGljIGNvbnN0IEVWQUxVQVRFX01VTFRJUExZID0gNzsKICAgIHB1YmxpYyBjb25zdCBFVkFMVUFURV9PUiA9IDg7CiAgICBwdWJsaWMgY29uc3QgRVZBTFVBVEVfUklHSFRTSElGVCA9IDk7CiAgICBwdWJsaWMgY29uc3QgRVZBTFVBVEVfU0VUID0gMTA7CiAgICBwdWJsaWMgY29uc3QgRVZBTFVBVEVfU1VCVFJBQ1QgPSAxMTsKICAgIHB1YmxpYyBjb25zdCBFVkFMVUFURV9YT1IgPSAxMjsKICAgIHB1YmxpYyBjb25zdCBFVkFMVUFURV9QT1cgPSAxMzsKICAgIHB1YmxpYyBjb25zdCBFVkFMVUFURV9MT0cgPSAxNDsKICAgIHB1YmxpYyBjb25zdCBFVkFMVUFURV9USFJFU0hPTEQgPSAxNTsKICAgIHB1YmxpYyBjb25zdCBFVkFMVUFURV9USFJFU0hPTERCTEFDSyA9IDE2OwogICAgcHVibGljIGNvbnN0IEVWQUxVQVRFX1RIUkVTSE9MRFdISVRFID0gMTc7CiAgICBwdWJsaWMgY29uc3QgRVZBTFVBVEVfR0FVU1NJQU5OT0lTRSA9IDE4OwogICAgcHVibGljIGNvbnN0IEVWQUxVQVRFX0lNUFVMU0VOT0lTRSA9IDE5OwogICAgcHVibGljIGNvbnN0IEVWQUxVQVRFX0xBUExBQ0lBTk5PSVNFID0gMjA7CiAgICBwdWJsaWMgY29uc3QgRVZBTFVBVEVfTVVMVElQTElDQVRJVkVOT0lTRSA9IDIxOwogICAgcHVibGljIGNvbnN0IEVWQUxVQVRFX1BPSVNTT05OT0lTRSA9IDIyOwogICAgcHVibGljIGNvbnN0IEVWQUxVQVRFX1VOSUZPUk1OT0lTRSA9IDIzOwogICAgcHVibGljIGNvbnN0IEVWQUxVQVRFX0NPU0lORSA9IDI0OwogICAgcHVibGljIGNvbnN0IEVWQUxVQVRFX1NJTkUgPSAyNTsKICAgIHB1YmxpYyBjb25zdCBFVkFMVUFURV9BRERNT0RVTFVTID0gMjY7CiAgICBwdWJsaWMgY29uc3QgRVZBTFVBVEVfTUVBTiA9IDI3OwogICAgcHVibGljIGNvbnN0IEVWQUxVQVRFX0FCUyA9IDI4OwogICAgcHVibGljIGNvbnN0IEVWQUxVQVRFX0VYUE9ORU5USUFMID0gMjk7CiAgICBwdWJsaWMgY29uc3QgRVZBTFVBVEVfTUVESUFOID0gMzA7CiAgICBwdWJsaWMgY29uc3QgRVZBTFVBVEVfU1VNID0gMzE7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9VTkRFRklORUQgPSAwOwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfUkdCID0gMTsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX0dSQVkgPSAyOwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfVFJBTlNQQVJFTlQgPSAzOwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfT0hUQSA9IDQ7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9MQUIgPSA1OwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfWFlaID0gNjsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1lDQkNSID0gNzsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1lDQyA9IDg7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9ZSVEgPSA5OwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfWVBCUFIgPSAxMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1lVViA9IDExOwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfQ01ZSyA9IDEyOwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfU1JHQiA9IDEzOwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfSFNCID0gMTQ7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9IU0wgPSAxNTsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX0hXQiA9IDE2OwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfUkVDNjAxTFVNQSA9IDE3OwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfUkVDNzA5TFVNQSA9IDE5OwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfTE9HID0gMjE7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9DTVkgPSAyMjsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX0xVViA9IDIzOwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfSENMID0gMjQ7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9MQ0ggPSAyNTsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX0xNUyA9IDI2OwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfTENIQUIgPSAyNzsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX0xDSFVWID0gMjg7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9TQ1JHQiA9IDI5OwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfSFNJID0gMzA7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9IU1YgPSAzMTsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX0hDTFAgPSAzMjsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1lEQkRSID0gMzM7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9SRUM2MDFZQ0JDUiA9IDE4OwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfUkVDNzA5WUNCQ1IgPSAyMDsKICAgIHB1YmxpYyBjb25zdCBWSVJUVUFMUElYRUxNRVRIT0RfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBWSVJUVUFMUElYRUxNRVRIT0RfQkFDS0dST1VORCA9IDE7CiAgICBwdWJsaWMgY29uc3QgVklSVFVBTFBJWEVMTUVUSE9EX0NPTlNUQU5UID0gMjsKICAgIHB1YmxpYyBjb25zdCBWSVJUVUFMUElYRUxNRVRIT0RfRURHRSA9IDQ7CiAgICBwdWJsaWMgY29uc3QgVklSVFVBTFBJWEVMTUVUSE9EX01JUlJPUiA9IDU7CiAgICBwdWJsaWMgY29uc3QgVklSVFVBTFBJWEVMTUVUSE9EX1RJTEUgPSA3OwogICAgcHVibGljIGNvbnN0IFZJUlRVQUxQSVhFTE1FVEhPRF9UUkFOU1BBUkVOVCA9IDg7CiAgICBwdWJsaWMgY29uc3QgVklSVFVBTFBJWEVMTUVUSE9EX01BU0sgPSA5OwogICAgcHVibGljIGNvbnN0IFZJUlRVQUxQSVhFTE1FVEhPRF9CTEFDSyA9IDEwOwogICAgcHVibGljIGNvbnN0IFZJUlRVQUxQSVhFTE1FVEhPRF9HUkFZID0gMTE7CiAgICBwdWJsaWMgY29uc3QgVklSVFVBTFBJWEVMTUVUSE9EX1dISVRFID0gMTI7CiAgICBwdWJsaWMgY29uc3QgVklSVFVBTFBJWEVMTUVUSE9EX0hPUklaT05UQUxUSUxFID0gMTM7CiAgICBwdWJsaWMgY29uc3QgVklSVFVBTFBJWEVMTUVUSE9EX1ZFUlRJQ0FMVElMRSA9IDE0OwogICAgcHVibGljIGNvbnN0IFZJUlRVQUxQSVhFTE1FVEhPRF9IT1JJWk9OVEFMVElMRUVER0UgPSAxNTsKICAgIHB1YmxpYyBjb25zdCBWSVJUVUFMUElYRUxNRVRIT0RfVkVSVElDQUxUSUxFRURHRSA9IDE2OwogICAgcHVibGljIGNvbnN0IFZJUlRVQUxQSVhFTE1FVEhPRF9DSEVDS0VSVElMRSA9IDE3OwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX1JPVEFURSA9IDE7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19TSEVBUiA9IDI7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19ST0xMID0gMzsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX0hVRSA9IDQ7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19TQVRVUkFUSU9OID0gNTsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX0JSSUdIVE5FU1MgPSA2OwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfR0FNTUEgPSA3OwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfU1BJRkYgPSA4OwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfRFVMTCA9IDk7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19HUkFZU0NBTEUgPSAxMDsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX1FVQU5USVpFID0gMTE7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19ERVNQRUNLTEUgPSAxMjsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX1JFRFVDRU5PSVNFID0gMTM7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19BREROT0lTRSA9IDE0OwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfU0hBUlBFTiA9IDE1OwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfQkxVUiA9IDE2OwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfVEhSRVNIT0xEID0gMTc7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19FREdFREVURUNUID0gMTg7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19TUFJFQUQgPSAxOTsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX1NPTEFSSVpFID0gMjA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19TSEFERSA9IDIxOwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfUkFJU0UgPSAyMjsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX1NFR01FTlQgPSAyMzsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX1NXSVJMID0gMjQ7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19JTVBMT0RFID0gMjU7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19XQVZFID0gMjY7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19PSUxQQUlOVCA9IDI3OwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfQ0hBUkNPQUxEUkFXSU5HID0gMjg7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19KUEVHID0gMjk7CiAgICBwdWJsaWMgY29uc3QgUkVOREVSSU5HSU5URU5UX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUkVOREVSSU5HSU5URU5UX1NBVFVSQVRJT04gPSAxOwogICAgcHVibGljIGNvbnN0IFJFTkRFUklOR0lOVEVOVF9QRVJDRVBUVUFMID0gMjsKICAgIHB1YmxpYyBjb25zdCBSRU5ERVJJTkdJTlRFTlRfQUJTT0xVVEUgPSAzOwogICAgcHVibGljIGNvbnN0IFJFTkRFUklOR0lOVEVOVF9SRUxBVElWRSA9IDQ7CiAgICBwdWJsaWMgY29uc3QgSU5URVJMQUNFX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgSU5URVJMQUNFX05PID0gMTsKICAgIHB1YmxpYyBjb25zdCBJTlRFUkxBQ0VfTElORSA9IDI7CiAgICBwdWJsaWMgY29uc3QgSU5URVJMQUNFX1BMQU5FID0gMzsKICAgIHB1YmxpYyBjb25zdCBJTlRFUkxBQ0VfUEFSVElUSU9OID0gNDsKICAgIHB1YmxpYyBjb25zdCBJTlRFUkxBQ0VfR0lGID0gNTsKICAgIHB1YmxpYyBjb25zdCBJTlRFUkxBQ0VfSlBFRyA9IDY7CiAgICBwdWJsaWMgY29uc3QgSU5URVJMQUNFX1BORyA9IDc7CiAgICBwdWJsaWMgY29uc3QgRklMTFJVTEVfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBGSUxMUlVMRV9FVkVOT0REID0gMTsKICAgIHB1YmxpYyBjb25zdCBGSUxMUlVMRV9OT05aRVJPID0gMjsKICAgIHB1YmxpYyBjb25zdCBQQVRIVU5JVFNfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBQQVRIVU5JVFNfVVNFUlNQQUNFID0gMTsKICAgIHB1YmxpYyBjb25zdCBQQVRIVU5JVFNfVVNFUlNQQUNFT05VU0UgPSAyOwogICAgcHVibGljIGNvbnN0IFBBVEhVTklUU19PQkpFQ1RCT1VORElOR0JPWCA9IDM7CiAgICBwdWJsaWMgY29uc3QgTElORUNBUF9VTkRFRklORUQgPSAwOwogICAgcHVibGljIGNvbnN0IExJTkVDQVBfQlVUVCA9IDE7CiAgICBwdWJsaWMgY29uc3QgTElORUNBUF9ST1VORCA9IDI7CiAgICBwdWJsaWMgY29uc3QgTElORUNBUF9TUVVBUkUgPSAzOwogICAgcHVibGljIGNvbnN0IExJTkVKT0lOX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgTElORUpPSU5fTUlURVIgPSAxOwogICAgcHVibGljIGNvbnN0IExJTkVKT0lOX1JPVU5EID0gMjsKICAgIHB1YmxpYyBjb25zdCBMSU5FSk9JTl9CRVZFTCA9IDM7CiAgICBwdWJsaWMgY29uc3QgUkVTT1VSQ0VUWVBFX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUkVTT1VSQ0VUWVBFX0FSRUEgPSAxOwogICAgcHVibGljIGNvbnN0IFJFU09VUkNFVFlQRV9ESVNLID0gMjsKICAgIHB1YmxpYyBjb25zdCBSRVNPVVJDRVRZUEVfRklMRSA9IDM7CiAgICBwdWJsaWMgY29uc3QgUkVTT1VSQ0VUWVBFX01BUCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgUkVTT1VSQ0VUWVBFX01FTU9SWSA9IDU7CiAgICBwdWJsaWMgY29uc3QgUkVTT1VSQ0VUWVBFX1RJTUUgPSA3OwogICAgcHVibGljIGNvbnN0IFJFU09VUkNFVFlQRV9USFJPVFRMRSA9IDg7CiAgICBwdWJsaWMgY29uc3QgUkVTT1VSQ0VUWVBFX1RIUkVBRCA9IDY7CiAgICBwdWJsaWMgY29uc3QgRElTUE9TRV9VTlJFQ09HTklaRUQgPSAwOwogICAgcHVibGljIGNvbnN0IERJU1BPU0VfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBESVNQT1NFX05PTkUgPSAxOwogICAgcHVibGljIGNvbnN0IERJU1BPU0VfQkFDS0dST1VORCA9IDI7CiAgICBwdWJsaWMgY29uc3QgRElTUE9TRV9QUkVWSU9VUyA9IDM7CiAgICBwdWJsaWMgY29uc3QgSU5URVJQT0xBVEVfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBJTlRFUlBPTEFURV9BVkVSQUdFID0gMTsKICAgIHB1YmxpYyBjb25zdCBJTlRFUlBPTEFURV9CSUNVQklDID0gMjsKICAgIHB1YmxpYyBjb25zdCBJTlRFUlBPTEFURV9CSUxJTkVBUiA9IDM7CiAgICBwdWJsaWMgY29uc3QgSU5URVJQT0xBVEVfRklMVEVSID0gNDsKICAgIHB1YmxpYyBjb25zdCBJTlRFUlBPTEFURV9JTlRFR0VSID0gNTsKICAgIHB1YmxpYyBjb25zdCBJTlRFUlBPTEFURV9NRVNIID0gNjsKICAgIHB1YmxpYyBjb25zdCBJTlRFUlBPTEFURV9ORUFSRVNUTkVJR0hCT1IgPSA3OwogICAgcHVibGljIGNvbnN0IElOVEVSUE9MQVRFX1NQTElORSA9IDg7CiAgICBwdWJsaWMgY29uc3QgTEFZRVJNRVRIT0RfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBMQVlFUk1FVEhPRF9DT0FMRVNDRSA9IDE7CiAgICBwdWJsaWMgY29uc3QgTEFZRVJNRVRIT0RfQ09NUEFSRUFOWSA9IDI7CiAgICBwdWJsaWMgY29uc3QgTEFZRVJNRVRIT0RfQ09NUEFSRUNMRUFSID0gMzsKICAgIHB1YmxpYyBjb25zdCBMQVlFUk1FVEhPRF9DT01QQVJFT1ZFUkxBWSA9IDQ7CiAgICBwdWJsaWMgY29uc3QgTEFZRVJNRVRIT0RfRElTUE9TRSA9IDU7CiAgICBwdWJsaWMgY29uc3QgTEFZRVJNRVRIT0RfT1BUSU1JWkUgPSA2OwogICAgcHVibGljIGNvbnN0IExBWUVSTUVUSE9EX09QVElNSVpFUExVUyA9IDg7CiAgICBwdWJsaWMgY29uc3QgTEFZRVJNRVRIT0RfT1BUSU1JWkVUUkFOUyA9IDk7CiAgICBwdWJsaWMgY29uc3QgTEFZRVJNRVRIT0RfQ09NUE9TSVRFID0gMTI7CiAgICBwdWJsaWMgY29uc3QgTEFZRVJNRVRIT0RfT1BUSU1JWkVJTUFHRSA9IDc7CiAgICBwdWJsaWMgY29uc3QgTEFZRVJNRVRIT0RfUkVNT1ZFRFVQUyA9IDEwOwogICAgcHVibGljIGNvbnN0IExBWUVSTUVUSE9EX1JFTU9WRVpFUk8gPSAxMTsKICAgIHB1YmxpYyBjb25zdCBMQVlFUk1FVEhPRF9UUklNQk9VTkRTID0gMTY7CiAgICBwdWJsaWMgY29uc3QgT1JJRU5UQVRJT05fVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBPUklFTlRBVElPTl9UT1BMRUZUID0gMTsKICAgIHB1YmxpYyBjb25zdCBPUklFTlRBVElPTl9UT1BSSUdIVCA9IDI7CiAgICBwdWJsaWMgY29uc3QgT1JJRU5UQVRJT05fQk9UVE9NUklHSFQgPSAzOwogICAgcHVibGljIGNvbnN0IE9SSUVOVEFUSU9OX0JPVFRPTUxFRlQgPSA0OwogICAgcHVibGljIGNvbnN0IE9SSUVOVEFUSU9OX0xFRlRUT1AgPSA1OwogICAgcHVibGljIGNvbnN0IE9SSUVOVEFUSU9OX1JJR0hUVE9QID0gNjsKICAgIHB1YmxpYyBjb25zdCBPUklFTlRBVElPTl9SSUdIVEJPVFRPTSA9IDc7CiAgICBwdWJsaWMgY29uc3QgT1JJRU5UQVRJT05fTEVGVEJPVFRPTSA9IDg7CiAgICBwdWJsaWMgY29uc3QgRElTVE9SVElPTl9VTkRFRklORUQgPSAwOwogICAgcHVibGljIGNvbnN0IERJU1RPUlRJT05fQUZGSU5FID0gMTsKICAgIHB1YmxpYyBjb25zdCBESVNUT1JUSU9OX0FGRklORVBST0pFQ1RJT04gPSAyOwogICAgcHVibGljIGNvbnN0IERJU1RPUlRJT05fQVJDID0gOTsKICAgIHB1YmxpYyBjb25zdCBESVNUT1JUSU9OX0JJTElORUFSID0gNjsKICAgIHB1YmxpYyBjb25zdCBESVNUT1JUSU9OX1BFUlNQRUNUSVZFID0gNDsKICAgIHB1YmxpYyBjb25zdCBESVNUT1JUSU9OX1BFUlNQRUNUSVZFUFJPSkVDVElPTiA9IDU7CiAgICBwdWJsaWMgY29uc3QgRElTVE9SVElPTl9TQ0FMRVJPVEFURVRSQU5TTEFURSA9IDM7CiAgICBwdWJsaWMgY29uc3QgRElTVE9SVElPTl9QT0xZTk9NSUFMID0gODsKICAgIHB1YmxpYyBjb25zdCBESVNUT1JUSU9OX1BPTEFSID0gMTA7CiAgICBwdWJsaWMgY29uc3QgRElTVE9SVElPTl9ERVBPTEFSID0gMTE7CiAgICBwdWJsaWMgY29uc3QgRElTVE9SVElPTl9CQVJSRUwgPSAxNDsKICAgIHB1YmxpYyBjb25zdCBESVNUT1JUSU9OX1NIRVBBUkRTID0gMTY7CiAgICBwdWJsaWMgY29uc3QgRElTVE9SVElPTl9TRU5USU5FTCA9IDE4OwogICAgcHVibGljIGNvbnN0IERJU1RPUlRJT05fQkFSUkVMSU5WRVJTRSA9IDE1OwogICAgcHVibGljIGNvbnN0IERJU1RPUlRJT05fQklMSU5FQVJGT1JXQVJEID0gNjsKICAgIHB1YmxpYyBjb25zdCBESVNUT1JUSU9OX0JJTElORUFSUkVWRVJTRSA9IDc7CiAgICBwdWJsaWMgY29uc3QgRElTVE9SVElPTl9SRVNJWkUgPSAxNzsKICAgIHB1YmxpYyBjb25zdCBESVNUT1JUSU9OX0NZTElOREVSMlBMQU5FID0gMTI7CiAgICBwdWJsaWMgY29uc3QgRElTVE9SVElPTl9QTEFORTJDWUxJTkRFUiA9IDEzOwogICAgcHVibGljIGNvbnN0IExBWUVSTUVUSE9EX01FUkdFID0gMTM7CiAgICBwdWJsaWMgY29uc3QgTEFZRVJNRVRIT0RfRkxBVFRFTiA9IDE0OwogICAgcHVibGljIGNvbnN0IExBWUVSTUVUSE9EX01PU0FJQyA9IDE1OwogICAgcHVibGljIGNvbnN0IEFMUEhBQ0hBTk5FTF9BQ1RJVkFURSA9IDE7CiAgICBwdWJsaWMgY29uc3QgQUxQSEFDSEFOTkVMX1JFU0VUID0gNzsKICAgIHB1YmxpYyBjb25zdCBBTFBIQUNIQU5ORUxfU0VUID0gODsKICAgIHB1YmxpYyBjb25zdCBBTFBIQUNIQU5ORUxfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBBTFBIQUNIQU5ORUxfQ09QWSA9IDM7CiAgICBwdWJsaWMgY29uc3QgQUxQSEFDSEFOTkVMX0RFQUNUSVZBVEUgPSA0OwogICAgcHVibGljIGNvbnN0IEFMUEhBQ0hBTk5FTF9FWFRSQUNUID0gNTsKICAgIHB1YmxpYyBjb25zdCBBTFBIQUNIQU5ORUxfT1BBUVVFID0gNjsKICAgIHB1YmxpYyBjb25zdCBBTFBIQUNIQU5ORUxfU0hBUEUgPSA5OwogICAgcHVibGljIGNvbnN0IEFMUEhBQ0hBTk5FTF9UUkFOU1BBUkVOVCA9IDEwOwogICAgcHVibGljIGNvbnN0IFNQQVJTRUNPTE9STUVUSE9EX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgU1BBUlNFQ09MT1JNRVRIT0RfQkFSWUNFTlRSSUMgPSAxOwogICAgcHVibGljIGNvbnN0IFNQQVJTRUNPTE9STUVUSE9EX0JJTElORUFSID0gNzsKICAgIHB1YmxpYyBjb25zdCBTUEFSU0VDT0xPUk1FVEhPRF9QT0xZTk9NSUFMID0gODsKICAgIHB1YmxpYyBjb25zdCBTUEFSU0VDT0xPUk1FVEhPRF9TUEVQQVJEUyA9IDE2OwogICAgcHVibGljIGNvbnN0IFNQQVJTRUNPTE9STUVUSE9EX1ZPUk9OT0kgPSAxODsKICAgIHB1YmxpYyBjb25zdCBTUEFSU0VDT0xPUk1FVEhPRF9JTlZFUlNFID0gMTk7CiAgICBwdWJsaWMgY29uc3QgRElUSEVSTUVUSE9EX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgRElUSEVSTUVUSE9EX05PID0gMTsKICAgIHB1YmxpYyBjb25zdCBESVRIRVJNRVRIT0RfUklFTUVSU01BID0gMjsKICAgIHB1YmxpYyBjb25zdCBESVRIRVJNRVRIT0RfRkxPWURTVEVJTkJFUkcgPSAzOwogICAgcHVibGljIGNvbnN0IEZVTkNUSU9OX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgRlVOQ1RJT05fUE9MWU5PTUlBTCA9IDE7CiAgICBwdWJsaWMgY29uc3QgRlVOQ1RJT05fU0lOVVNPSUQgPSAyOwogICAgcHVibGljIGNvbnN0IEFMUEhBQ0hBTk5FTF9CQUNLR1JPVU5EID0gMjsKICAgIHB1YmxpYyBjb25zdCBGVU5DVElPTl9BUkNTSU4gPSAzOwogICAgcHVibGljIGNvbnN0IEZVTkNUSU9OX0FSQ1RBTiA9IDQ7CiAgICBwdWJsaWMgY29uc3QgQUxQSEFDSEFOTkVMX0ZMQVRURU4gPSAxMTsKICAgIHB1YmxpYyBjb25zdCBBTFBIQUNIQU5ORUxfUkVNT1ZFID0gMTI7CiAgICBwdWJsaWMgY29uc3QgU1RBVElTVElDX0dSQURJRU5UID0gMTsKICAgIHB1YmxpYyBjb25zdCBTVEFUSVNUSUNfTUFYSU1VTSA9IDI7CiAgICBwdWJsaWMgY29uc3QgU1RBVElTVElDX01FQU4gPSAzOwogICAgcHVibGljIGNvbnN0IFNUQVRJU1RJQ19NRURJQU4gPSA0OwogICAgcHVibGljIGNvbnN0IFNUQVRJU1RJQ19NSU5JTVVNID0gNTsKICAgIHB1YmxpYyBjb25zdCBTVEFUSVNUSUNfTU9ERSA9IDY7CiAgICBwdWJsaWMgY29uc3QgU1RBVElTVElDX05PTlBFQUsgPSA3OwogICAgcHVibGljIGNvbnN0IFNUQVRJU1RJQ19TVEFOREFSRF9ERVZJQVRJT04gPSA4OwogICAgcHVibGljIGNvbnN0IE1PUlBIT0xPR1lfQ09OVk9MVkUgPSAxOwogICAgcHVibGljIGNvbnN0IE1PUlBIT0xPR1lfQ09SUkVMQVRFID0gMjsKICAgIHB1YmxpYyBjb25zdCBNT1JQSE9MT0dZX0VST0RFID0gMzsKICAgIHB1YmxpYyBjb25zdCBNT1JQSE9MT0dZX0RJTEFURSA9IDQ7CiAgICBwdWJsaWMgY29uc3QgTU9SUEhPTE9HWV9FUk9ERV9JTlRFTlNJVFkgPSA1OwogICAgcHVibGljIGNvbnN0IE1PUlBIT0xPR1lfRElMQVRFX0lOVEVOU0lUWSA9IDY7CiAgICBwdWJsaWMgY29uc3QgTU9SUEhPTE9HWV9ESVNUQU5DRSA9IDc7CiAgICBwdWJsaWMgY29uc3QgTU9SUEhPTE9HWV9PUEVOID0gODsKICAgIHB1YmxpYyBjb25zdCBNT1JQSE9MT0dZX0NMT1NFID0gOTsKICAgIHB1YmxpYyBjb25zdCBNT1JQSE9MT0dZX09QRU5fSU5URU5TSVRZID0gMTA7CiAgICBwdWJsaWMgY29uc3QgTU9SUEhPTE9HWV9DTE9TRV9JTlRFTlNJVFkgPSAxMTsKICAgIHB1YmxpYyBjb25zdCBNT1JQSE9MT0dZX1NNT09USCA9IDEyOwogICAgcHVibGljIGNvbnN0IE1PUlBIT0xPR1lfRURHRV9JTiA9IDEzOwogICAgcHVibGljIGNvbnN0IE1PUlBIT0xPR1lfRURHRV9PVVQgPSAxNDsKICAgIHB1YmxpYyBjb25zdCBNT1JQSE9MT0dZX0VER0UgPSAxNTsKICAgIHB1YmxpYyBjb25zdCBNT1JQSE9MT0dZX1RPUF9IQVQgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBNT1JQSE9MT0dZX0JPVFRPTV9IQVQgPSAxNzsKICAgIHB1YmxpYyBjb25zdCBNT1JQSE9MT0dZX0hJVF9BTkRfTUlTUyA9IDE4OwogICAgcHVibGljIGNvbnN0IE1PUlBIT0xPR1lfVEhJTk5JTkcgPSAxOTsKICAgIHB1YmxpYyBjb25zdCBNT1JQSE9MT0dZX1RISUNLRU4gPSAyMDsKICAgIHB1YmxpYyBjb25zdCBNT1JQSE9MT0dZX1ZPUk9OT0kgPSAyMTsKICAgIHB1YmxpYyBjb25zdCBNT1JQSE9MT0dZX0lURVJBVElWRSA9IDIyOwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9VTklUWSA9IDE7CiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX0dBVVNTSUFOID0gMjsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfRElGRkVSRU5DRV9PRl9HQVVTU0lBTlMgPSAzOwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9MQVBMQUNJQU5fT0ZfR0FVU1NJQU5TID0gNDsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfQkxVUiA9IDU7CiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX0NPTUVUID0gNjsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfTEFQTEFDSUFOID0gNzsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfU09CRUwgPSA4OwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9GUkVJX0NIRU4gPSA5OwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9ST0JFUlRTID0gMTA7CiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX1BSRVdJVFQgPSAxMTsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfQ09NUEFTUyA9IDEyOwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9LSVJTQ0ggPSAxMzsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfRElBTU9ORCA9IDE0OwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9TUVVBUkUgPSAxNTsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfUkVDVEFOR0xFID0gMTY7CiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX09DVEFHT04gPSAxNzsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfRElTSyA9IDE4OwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9QTFVTID0gMTk7CiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX0NST1NTID0gMjA7CiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX1JJTkcgPSAyMTsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfUEVBS1MgPSAyMjsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfRURHRVMgPSAyMzsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfQ09STkVSUyA9IDI0OwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9ESUFHT05BTFMgPSAyNTsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfTElORV9FTkRTID0gMjY7CiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX0xJTkVfSlVOQ1RJT05TID0gMjc7CiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX1JJREdFUyA9IDI4OwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9DT05WRVhfSFVMTCA9IDI5OwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9USElOX1NFID0gMzA7CiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX1NLRUxFVE9OID0gMzE7CiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX0NIRUJZU0hFViA9IDMyOwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9NQU5IQVRUQU4gPSAzMzsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfT0NUQUdPTkFMID0gMzQ7CiAgICBwdWJsaWMgY29uc3QgS0VSTkVMX0VVQ0xJREVBTiA9IDM1OwogICAgcHVibGljIGNvbnN0IEtFUk5FTF9VU0VSX0RFRklORUQgPSAzNjsKICAgIHB1YmxpYyBjb25zdCBLRVJORUxfQklOT01JQUwgPSAzNzsKICAgIHB1YmxpYyBjb25zdCBESVJFQ1RJT05fTEVGVF9UT19SSUdIVCA9IDI7CiAgICBwdWJsaWMgY29uc3QgRElSRUNUSU9OX1JJR0hUX1RPX0xFRlQgPSAxOwogICAgcHVibGljIGNvbnN0IE5PUk1BTElaRV9LRVJORUxfTk9ORSA9IDA7CiAgICBwdWJsaWMgY29uc3QgTk9STUFMSVpFX0tFUk5FTF9WQUxVRSA9IDgxOTI7CiAgICBwdWJsaWMgY29uc3QgTk9STUFMSVpFX0tFUk5FTF9DT1JSRUxBVEUgPSA2NTUzNjsKICAgIHB1YmxpYyBjb25zdCBOT1JNQUxJWkVfS0VSTkVMX1BFUkNFTlQgPSA0MDk2OwoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmVtb3ZlcyByZXBlYXRlZCBwb3J0aW9ucyBvZiBpbWFnZXMgdG8gb3B0aW1pemUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5vcHRpbWl6ZWltYWdlbGF5ZXJzLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcHRpbWl6ZUltYWdlTGF5ZXJzKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gYm91bmRpbmcgcmVnaW9uIGJldHdlZW4gaW1hZ2VzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suY29tcGFyZWltYWdlbGF5ZXJzLnBocAogICAgICogQHBhcmFtIGludCAkbWV0aG9kIDxwPgogICAgICogT25lIG9mIHRoZSBsYXllciBtZXRob2QgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBJbWFnaWNrIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlSW1hZ2VMYXllcnMoJG1ldGhvZCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFF1aWNrbHkgZmV0Y2ggYXR0cmlidXRlcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnBpbmdpbWFnZWJsb2IucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbWFnZSA8cD4KICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGltYWdlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwaW5nSW1hZ2VCbG9iKCRpbWFnZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldCBiYXNpYyBpbWFnZSBhdHRyaWJ1dGVzIGluIGEgbGlnaHR3ZWlnaHQgbWFubmVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sucGluZ2ltYWdlZmlsZS5waHAKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkZmlsZWhhbmRsZSA8cD4KICAgICAqIEFuIG9wZW4gZmlsZWhhbmRsZSB0byB0aGUgaW1hZ2UuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlTmFtZSBbb3B0aW9uYWxdIDxwPgogICAgICogT3B0aW9uYWwgZmlsZW5hbWUgZm9yIHRoaXMgaW1hZ2UuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBpbmdJbWFnZUZpbGUoJGZpbGVoYW5kbGUsICRmaWxlTmFtZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDcmVhdGVzIGEgdmVydGljYWwgbWlycm9yIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sudHJhbnNwb3NlaW1hZ2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyYW5zcG9zZUltYWdlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENyZWF0ZXMgYSBob3Jpem9udGFsIG1pcnJvciBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnRyYW5zdmVyc2VpbWFnZS5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdHJhbnN2ZXJzZUltYWdlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJlbW92ZSBlZGdlcyBmcm9tIHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnRyaW1pbWFnZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkZnV6eiA8cD4KICAgICAqIEJ5IGRlZmF1bHQgdGFyZ2V0IG11c3QgbWF0Y2ggYSBwYXJ0aWN1bGFyIHBpeGVsIGNvbG9yIGV4YWN0bHkuCiAgICAgKiBIb3dldmVyLCBpbiBtYW55IGNhc2VzIHR3byBjb2xvcnMgbWF5IGRpZmZlciBieSBhIHNtYWxsIGFtb3VudC4KICAgICAqIFRoZSBmdXp6IG1lbWJlciBvZiBpbWFnZSBkZWZpbmVzIGhvdyBtdWNoIHRvbGVyYW5jZSBpcyBhY2NlcHRhYmxlCiAgICAgKiB0byBjb25zaWRlciB0d28gY29sb3JzIGFzIHRoZSBzYW1lLiBUaGlzIHBhcmFtZXRlciByZXByZXNlbnRzIHRoZSB2YXJpYXRpb24KICAgICAqIG9uIHRoZSBxdWFudHVtIHJhbmdlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmltSW1hZ2UoJGZ1enopIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBcHBsaWVzIHdhdmUgZmlsdGVyIHRvIHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLndhdmVpbWFnZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkYW1wbGl0dWRlIDxwPgogICAgICogVGhlIGFtcGxpdHVkZSBvZiB0aGUgd2F2ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkbGVuZ3RoIDxwPgogICAgICogVGhlIGxlbmd0aCBvZiB0aGUgd2F2ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2F2ZUltYWdlKCRhbXBsaXR1ZGUsICRsZW5ndGgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBZGRzIHZpZ25ldHRlIGZpbHRlciB0byB0aGUgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay52aWduZXR0ZWltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRibGFja1BvaW50IDxwPgogICAgICogVGhlIGJsYWNrIHBvaW50LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR3aGl0ZVBvaW50IDxwPgogICAgICogVGhlIHdoaXRlIHBvaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR4IDxwPgogICAgICogWCBvZmZzZXQgb2YgdGhlIGVsbGlwc2UKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHkgPHA+CiAgICAgKiBZIG9mZnNldCBvZiB0aGUgZWxsaXBzZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2aWduZXR0ZUltYWdlKCRibGFja1BvaW50LCAkd2hpdGVQb2ludCwgJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRGlzY2FyZHMgYWxsIGJ1dCBvbmUgb2YgYW55IHBpeGVsIGNvbG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sudW5pcXVlaW1hZ2Vjb2xvcnMucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuaXF1ZUltYWdlQ29sb3JzKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybiBpZiB0aGUgaW1hZ2UgaGFzIGEgbWF0dGUgY2hhbm5lbAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlbWF0dGUucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tEZXByZWNhdGVkXQogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlTWF0dGUoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgaW1hZ2UgbWF0dGUgY2hhbm5lbAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlbWF0dGUucGhwCiAgICAgKiBAcGFyYW0gYm9vbCAkbWF0dGUgPHA+CiAgICAgKiBUcnVlIGFjdGl2YXRlcyB0aGUgbWF0dGUgY2hhbm5lbCBhbmQgZmFsc2UgZGlzYWJsZXMgaXQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlTWF0dGUoJG1hdHRlKSB7fQoKICAgIC8qKgogICAgICogQWRhcHRpdmVseSByZXNpemUgaW1hZ2Ugd2l0aCBkYXRhIGRlcGVuZGVudCB0cmlhbmd1bGF0aW9uCiAgICAgKgogICAgICogSWYgbGVnYWN5IGlzIHRydWUsIHRoZSBjYWxjdWxhdGlvbnMgYXJlIGRvbmUgd2l0aCB0aGUgc21hbGwgcm91bmRpbmcgYnVnIHRoYXQgZXhpc3RlZCBpbiBJbWFnaWNrIGJlZm9yZSAzLjQuMC48YnI+CiAgICAgKiBJZiBmYWxzZSwgdGhlIGNhbGN1bGF0aW9ucyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSByZXN1bHRzIGFzIEltYWdlTWFnaWNrIENMSSBkb2VzLjxicj4KICAgICAqIDxicj4KICAgICAqIDxiPk5vdGU6PC9iPiBUaGUgYmVoYXZpb3Igb2YgdGhlIHBhcmFtZXRlciBiZXN0Zml0IGNoYW5nZWQgaW4gSW1hZ2ljayAzLjAuMC4gQmVmb3JlIHRoaXMgdmVyc2lvbiBnaXZlbiBkaW1lbnNpb25zIDQwMHg0MDAgYW4gaW1hZ2Ugb2YgZGltZW5zaW9ucyAyMDB4MTUwIHdvdWxkIGJlIGxlZnQgdW50b3VjaGVkLgogICAgICogSW4gSW1hZ2ljayAzLjAuMCBhbmQgbGF0ZXIgdGhlIGltYWdlIHdvdWxkIGJlIHNjYWxlZCB1cCB0byBzaXplIDQwMHgzMDAgYXMgdGhpcyBpcyB0aGUgImJlc3QgZml0IiBmb3IgdGhlIGdpdmVuIGRpbWVuc2lvbnMuIElmIGJlc3RmaXQgcGFyYW1ldGVyIGlzIHVzZWQgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgZ2l2ZW4uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suYWRhcHRpdmVyZXNpemVpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNvbHVtbnMgVGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBzY2FsZWQgaW1hZ2UuCiAgICAgKiBAcGFyYW0gaW50ICRyb3dzIFRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgc2NhbGVkIGltYWdlLgogICAgICogQHBhcmFtIGJvb2wgJGJlc3RmaXQgW29wdGlvbmFsXSBXaGV0aGVyIHRvIGZpdCB0aGUgaW1hZ2UgaW5zaWRlIGEgYm91bmRpbmcgYm94Ljxicj4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGJlaGF2aW9yIG9mIHRoZSBwYXJhbWV0ZXIgYmVzdGZpdCBjaGFuZ2VkIGluIEltYWdpY2sgMy4wLjAuIEJlZm9yZSB0aGlzIHZlcnNpb24gZ2l2ZW4gZGltZW5zaW9ucyA0MDB4NDAwIGFuIGltYWdlIG9mIGRpbWVuc2lvbnMgMjAweDE1MCB3b3VsZCBiZSBsZWZ0IHVudG91Y2hlZC4gSW4gSW1hZ2ljayAzLjAuMCBhbmQgbGF0ZXIgdGhlIGltYWdlIHdvdWxkIGJlIHNjYWxlZCB1cCB0byBzaXplIDQwMHgzMDAgYXMgdGhpcyBpcyB0aGUgImJlc3QgZml0IiBmb3IgdGhlIGdpdmVuIGRpbWVuc2lvbnMuIElmIGJlc3RmaXQgcGFyYW1ldGVyIGlzIHVzZWQgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgZ2l2ZW4uCiAgICAgKiBAcGFyYW0gYm9vbCAkbGVnYWN5IFtvcHRpb25hbF0gQWRkZWQgc2luY2UgMy40LjAuIERlZmF1bHQgdmFsdWUgRkFMU0UKICAgICAqIEByZXR1cm4gYm9vbCBUUlVFIG9uIHN1Y2Nlc3MKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBUaHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvcgogICAgICogQHNpbmNlIDIuMC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGFwdGl2ZVJlc2l6ZUltYWdlKCRjb2x1bW5zLCAkcm93cywgJGJlc3RmaXQgPSBmYWxzZSwgJGxlZ2FjeSA9IGZhbHNlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2ltdWxhdGVzIGEgcGVuY2lsIHNrZXRjaAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNrZXRjaGltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgPHA+CiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBHYXVzc2lhbiwgaW4gcGl4ZWxzLCBub3QgY291bnRpbmcgdGhlIGNlbnRlciBwaXhlbAogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRzaWdtYSA8cD4KICAgICAqIFRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIEdhdXNzaWFuLCBpbiBwaXhlbHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJGFuZ2xlIDxwPgogICAgICogQXBwbHkgdGhlIGVmZmVjdCBhbG9uZyB0aGlzIGFuZ2xlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBza2V0Y2hJbWFnZSgkcmFkaXVzLCAkc2lnbWEsICRhbmdsZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENyZWF0ZXMgYSAzRCBlZmZlY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zaGFkZWltYWdlLnBocAogICAgICogQHBhcmFtIGJvb2wgJGdyYXkgPHA+CiAgICAgKiBBIHZhbHVlIG90aGVyIHRoYW4gemVybyBzaGFkZXMgdGhlIGludGVuc2l0eSBvZiBlYWNoIHBpeGVsLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRhemltdXRoIDxwPgogICAgICogRGVmaW5lcyB0aGUgbGlnaHQgc291cmNlIGRpcmVjdGlvbi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkZWxldmF0aW9uIDxwPgogICAgICogRGVmaW5lcyB0aGUgbGlnaHQgc291cmNlIGRpcmVjdGlvbi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hhZGVJbWFnZSgkZ3JheSwgJGF6aW11dGgsICRlbGV2YXRpb24pIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBzaXplIG9mZnNldAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldHNpemVvZmZzZXQucGhwCiAgICAgKiBAcmV0dXJuIGludCB0aGUgc2l6ZSBvZmZzZXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBJbWFnaWNrIG9iamVjdC4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemVPZmZzZXQoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgc2l6ZSBhbmQgb2Zmc2V0IG9mIHRoZSBJbWFnaWNrIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldHNpemVvZmZzZXQucGhwCiAgICAgKiBAcGFyYW0gaW50ICRjb2x1bW5zIDxwPgogICAgICogVGhlIHdpZHRoIGluIHBpeGVscy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHJvd3MgPHA+CiAgICAgKiBUaGUgaGVpZ2h0IGluIHBpeGVscy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldCA8cD4KICAgICAqIFRoZSBpbWFnZSBvZmZzZXQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFNpemVPZmZzZXQoJGNvbHVtbnMsICRyb3dzLCAkb2Zmc2V0KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQWRkcyBhZGFwdGl2ZSBibHVyIGZpbHRlciB0byBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmFkYXB0aXZlYmx1cmltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgPHA+CiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBHYXVzc2lhbiwgaW4gcGl4ZWxzLCBub3QgY291bnRpbmcgdGhlIGNlbnRlciBwaXhlbC4KICAgICAqIFByb3ZpZGUgYSB2YWx1ZSBvZiAwIGFuZCB0aGUgcmFkaXVzIHdpbGwgYmUgY2hvc2VuIGF1dG9tYWdpY2FsbHkuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHNpZ21hIDxwPgogICAgICogVGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgR2F1c3NpYW4sIGluIHBpeGVscy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXSA8cD4KICAgICAqIFByb3ZpZGUgYW55IGNoYW5uZWwgY29uc3RhbnQgdGhhdCBpcyB2YWxpZCBmb3IgeW91ciBjaGFubmVsIG1vZGUuIFRvIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsIGNvbnN0YW50cyB1c2luZyBiaXR3aXNlIG9wZXJhdG9ycy4gRGVmYXVsdHMgdG8gPGI+SW1hZ2ljazo6Q0hBTk5FTF9ERUZBVUxUPC9iPi4gUmVmZXIgdG8gdGhpcyBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkYXB0aXZlQmx1ckltYWdlKCRyYWRpdXMsICRzaWdtYSwgJGNoYW5uZWwgPSBJbWFnaWNrOjpDSEFOTkVMX0RFRkFVTFQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBFbmhhbmNlcyB0aGUgY29udHJhc3Qgb2YgYSBjb2xvciBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmNvbnRyYXN0c3RyZXRjaGltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRibGFja19wb2ludCA8cD4KICAgICAqIFRoZSBibGFjayBwb2ludC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkd2hpdGVfcG9pbnQgPHA+CiAgICAgKiBUaGUgd2hpdGUgcG9pbnQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0gPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbwogICAgICogYXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBjaGFubmVsLCBjb21iaW5lIGNoYW5uZWx0eXBlIGNvbnN0YW50cyB1c2luZwogICAgICogYml0d2lzZSBvcGVyYXRvcnMuIDxiPkltYWdpY2s6OkNIQU5ORUxfQUxMPC9iPi4gUmVmZXIgdG8gdGhpcwogICAgICogbGlzdCBvZiBjaGFubmVsIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29udHJhc3RTdHJldGNoSW1hZ2UoJGJsYWNrX3BvaW50LCAkd2hpdGVfcG9pbnQsICRjaGFubmVsID0gSW1hZ2ljazo6Q0hBTk5FTF9BTEwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBZGFwdGl2ZWx5IHNoYXJwZW4gdGhlIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suYWRhcHRpdmVzaGFycGVuaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJhZGl1cyA8cD4KICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIEdhdXNzaWFuLCBpbiBwaXhlbHMsIG5vdCBjb3VudGluZyB0aGUgY2VudGVyIHBpeGVsLiBVc2UgMCBmb3IgYXV0by1zZWxlY3QuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHNpZ21hIDxwPgogICAgICogVGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgR2F1c3NpYW4sIGluIHBpeGVscy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXSA8cD4KICAgICAqIFByb3ZpZGUgYW55IGNoYW5uZWwgY29uc3RhbnQgdGhhdCBpcyB2YWxpZCBmb3IgeW91ciBjaGFubmVsIG1vZGUuIFRvIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsIGNvbnN0YW50cyB1c2luZyBiaXR3aXNlIG9wZXJhdG9ycy4gRGVmYXVsdHMgdG8gPGI+SW1hZ2ljazo6Q0hBTk5FTF9ERUZBVUxUPC9iPi4gUmVmZXIgdG8gdGhpcyBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkYXB0aXZlU2hhcnBlbkltYWdlKCRyYWRpdXMsICRzaWdtYSwgJGNoYW5uZWwgPSBJbWFnaWNrOjpDSEFOTkVMX0RFRkFVTFQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDcmVhdGVzIGEgaGlnaC1jb250cmFzdCwgdHdvLWNvbG9yIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sucmFuZG9tdGhyZXNob2xkaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJGxvdyA8cD4KICAgICAqIFRoZSBsb3cgcG9pbnQKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkaGlnaCA8cD4KICAgICAqIFRoZSBoaWdoIHBvaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0gPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbwogICAgICogYXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBjaGFubmVsLCBjb21iaW5lIGNoYW5uZWx0eXBlIGNvbnN0YW50cyB1c2luZwogICAgICogYml0d2lzZSBvcGVyYXRvcnMuIFJlZmVyIHRvIHRoaXMKICAgICAqIGxpc3Qgb2YgY2hhbm5lbCBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJhbmRvbVRocmVzaG9sZEltYWdlKCRsb3csICRoaWdoLCAkY2hhbm5lbCA9IEltYWdpY2s6OkNIQU5ORUxfQUxMKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtICR4Um91bmRpbmcKICAgICAqIEBwYXJhbSAkeVJvdW5kaW5nCiAgICAgKiBAcGFyYW0gJHN0cm9rZVdpZHRoIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSAkZGlzcGxhY2UgW29wdGlvbmFsXQogICAgICogQHBhcmFtICRzaXplQ29ycmVjdGlvbiBbb3B0aW9uYWxdCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb3VuZENvcm5lcnNJbWFnZSgkeFJvdW5kaW5nLCAkeVJvdW5kaW5nLCAkc3Ryb2tlV2lkdGgsICRkaXNwbGFjZSwgJHNpemVDb3JyZWN0aW9uKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUm91bmRzIGltYWdlIGNvcm5lcnMKICAgICAqIEFsaWFzIHRvIHtAc2VlIEltYWdpY2s6OnJvdW5kQ29ybmVyc0ltYWdlfQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnJvdW5kY29ybmVycy5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeF9yb3VuZGluZyA8cD4KICAgICAqIHggcm91bmRpbmcKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeV9yb3VuZGluZyA8cD4KICAgICAqIHkgcm91bmRpbmcKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkc3Ryb2tlX3dpZHRoIFtvcHRpb25hbF0gPHA+CiAgICAgKiBzdHJva2Ugd2lkdGgKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkZGlzcGxhY2UgW29wdGlvbmFsXSA8cD4KICAgICAqIGltYWdlIGRpc3BsYWNlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHNpemVfY29ycmVjdGlvbiBbb3B0aW9uYWxdIDxwPgogICAgICogc2l6ZSBjb3JyZWN0aW9uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAiJWNsYXNzJS0+cm91bmRDb3JuZXJzSW1hZ2UoJXBhcmFtZXRlcnNMaXN0JSkiKV0KICAgIHB1YmxpYyBmdW5jdGlvbiByb3VuZENvcm5lcnMoJHhfcm91bmRpbmcsICR5X3JvdW5kaW5nLCAkc3Ryb2tlX3dpZHRoID0gMTAuMCwgJGRpc3BsYWNlID0gNS4wLCAkc2l6ZV9jb3JyZWN0aW9uID0gLTYuMCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldCB0aGUgaXRlcmF0b3IgcG9zaXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpdGVyYXRvcmluZGV4LnBocAogICAgICogQHBhcmFtIGludCAkaW5kZXggPHA+CiAgICAgKiBUaGUgcG9zaXRpb24gdG8gc2V0IHRoZSBpdGVyYXRvciB0bwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJdGVyYXRvckluZGV4KCRpbmRleCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGFjdGl2ZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGl0ZXJhdG9yaW5kZXgucGhwCiAgICAgKiBAcmV0dXJuIGludCBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGluZGV4IG9mIHRoZSBpbWFnZSBpbiB0aGUgc3RhY2suCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvckluZGV4KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3Igc2V0dGluZyBjcm9wIHNpemUgYW5kIHRoZSBpbWFnZSBnZW9tZXRyeQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnRyYW5zZm9ybWltYWdlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkY3JvcCA8cD4KICAgICAqIEEgY3JvcCBnZW9tZXRyeSBzdHJpbmcuIFRoaXMgZ2VvbWV0cnkgZGVmaW5lcyBhIHN1YnJlZ2lvbiBvZiB0aGUgaW1hZ2UgdG8gY3JvcC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGdlb21ldHJ5IDxwPgogICAgICogQW4gaW1hZ2UgZ2VvbWV0cnkgc3RyaW5nLiBUaGlzIGdlb21ldHJ5IGRlZmluZXMgdGhlIGZpbmFsIHNpemUgb2YgdGhlIGltYWdlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBJbWFnaWNrIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2Zvcm1JbWFnZSgkY3JvcCwgJGdlb21ldHJ5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgaW1hZ2Ugb3BhY2l0eSBsZXZlbAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlb3BhY2l0eS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkb3BhY2l0eSA8cD4KICAgICAqIFRoZSBsZXZlbCBvZiB0cmFuc3BhcmVuY3k6IDEuMCBpcyBmdWxseSBvcGFxdWUgYW5kIDAuMCBpcyBmdWxseQogICAgICogdHJhbnNwYXJlbnQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlT3BhY2l0eSgkb3BhY2l0eSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4yLjIpPGJyLz4KICAgICAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgZGl0aGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sub3JkZXJlZHBvc3Rlcml6ZWltYWdlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkdGhyZXNob2xkX21hcCA8cD4KICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHRocmVzaG9sZCBkaXRoZXIgbWFwIHRvIHVzZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkY2hhbm5lbCBbb3B0aW9uYWxdIDxwPgogICAgICogUHJvdmlkZSBhbnkgY2hhbm5lbCBjb25zdGFudCB0aGF0IGlzIHZhbGlkIGZvciB5b3VyIGNoYW5uZWwgbW9kZS4gVG8KICAgICAqIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsdHlwZSBjb25zdGFudHMgdXNpbmcKICAgICAqIGJpdHdpc2Ugb3BlcmF0b3JzLiBSZWZlciB0byB0aGlzCiAgICAgKiBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcmRlcmVkUG9zdGVyaXplSW1hZ2UoJHRocmVzaG9sZF9tYXAsICRjaGFubmVsID0gSW1hZ2ljazo6Q0hBTk5FTF9BTEwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTaW11bGF0ZXMgYSBQb2xhcm9pZCBwaWN0dXJlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sucG9sYXJvaWRpbWFnZS5waHAKICAgICAqIEBwYXJhbSBJbWFnaWNrRHJhdyAkcHJvcGVydGllcyA8cD4KICAgICAqIFRoZSBwb2xhcm9pZCBwcm9wZXJ0aWVzCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJGFuZ2xlIDxwPgogICAgICogVGhlIHBvbGFyb2lkIGFuZ2xlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBvbGFyb2lkSW1hZ2UoSW1hZ2lja0RyYXcgJHByb3BlcnRpZXMsICRhbmdsZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIG5hbWVkIGltYWdlIHByb3BlcnR5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2Vwcm9wZXJ0eS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBuYW1lIG9mIHRoZSBwcm9wZXJ0eSAoZm9yIGV4YW1wbGUgRXhpZjpEYXRlVGltZSkKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGltYWdlIHByb3BlcnR5LCBmYWxzZSBpZiBhCiAgICAgKiBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiBuYW1lIGRvZXMgbm90IGV4aXN0LgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VQcm9wZXJ0eSgkbmFtZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgYW4gaW1hZ2UgcHJvcGVydHkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZXByb3BlcnR5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VQcm9wZXJ0eSgkbmFtZSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgaW1hZ2UgaW50ZXJwb2xhdGUgcGl4ZWwgbWV0aG9kCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0aW1hZ2VpbnRlcnBvbGF0ZW1ldGhvZC5waHAKICAgICAqIEBwYXJhbSBpbnQgJG1ldGhvZCA8cD4KICAgICAqIFRoZSBtZXRob2QgaXMgb25lIG9mIHRoZSA8Yj5JbWFnaWNrOjpJTlRFUlBPTEFURV8qPC9iPiBjb25zdGFudHMKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VJbnRlcnBvbGF0ZU1ldGhvZCgkbWV0aG9kKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgaW50ZXJwb2xhdGlvbiBtZXRob2QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWludGVycG9sYXRlbWV0aG9kLnBocAogICAgICogQHJldHVybiBpbnQgdGhlIGludGVycG9sYXRlIG1ldGhvZCBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VJbnRlcnBvbGF0ZU1ldGhvZCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTdHJldGNoZXMgd2l0aCBzYXR1cmF0aW9uIHRoZSBpbWFnZSBpbnRlbnNpdHkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5saW5lYXJzdHJldGNoaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJsYWNrUG9pbnQgPHA+CiAgICAgKiBUaGUgaW1hZ2UgYmxhY2sgcG9pbnQKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkd2hpdGVQb2ludCA8cD4KICAgICAqIFRoZSBpbWFnZSB3aGl0ZSBwb2ludAogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaW5lYXJTdHJldGNoSW1hZ2UoJGJsYWNrUG9pbnQsICR3aGl0ZVBvaW50KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgaW1hZ2UgbGVuZ3RoIGluIGJ5dGVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VsZW5ndGgucGhwCiAgICAgKiBAcmV0dXJuIGludCBhbiBpbnQgY29udGFpbmluZyB0aGUgY3VycmVudCBpbWFnZSBzaXplLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VMZW5ndGgoKSB7fQoKICAgIC8qKgogICAgICogKE5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBtaWdodCBvbmx5IGJlIGluIFNWTik8YnIvPgogICAgICogU2V0IGltYWdlIHNpemUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5leHRlbnRpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoIDxwPgogICAgICogVGhlIG5ldyB3aWR0aAogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkaGVpZ2h0IDxwPgogICAgICogVGhlIG5ldyBoZWlnaHQKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHggPHA+CiAgICAgKiBYIHBvc2l0aW9uIGZvciB0aGUgbmV3IHNpemUKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHkgPHA+CiAgICAgKiBZIHBvc2l0aW9uIGZvciB0aGUgbmV3IHNpemUKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXh0ZW50SW1hZ2UoJHdpZHRoLCAkaGVpZ2h0LCAkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBHZXRzIHRoZSBpbWFnZSBvcmllbnRhdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlb3JpZW50YXRpb24ucGhwCiAgICAgKiBAcmV0dXJuIGludCBhbiBpbnQgb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlT3JpZW50YXRpb24oKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgaW1hZ2Ugb3JpZW50YXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZW9yaWVudGF0aW9uLnBocAogICAgICogQHBhcmFtIGludCAkb3JpZW50YXRpb24gPHA+CiAgICAgKiBPbmUgb2YgdGhlIG9yaWVudGF0aW9uIGNvbnN0YW50cwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZU9yaWVudGF0aW9uKCRvcmllbnRhdGlvbikge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4xLjApPGJyLz4KICAgICAqIENoYW5nZXMgdGhlIGNvbG9yIHZhbHVlIG9mIGFueSBwaXhlbCB0aGF0IG1hdGNoZXMgdGFyZ2V0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sucGFpbnRmbG9vZGZpbGxpbWFnZS5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkZmlsbCA8cD4KICAgICAqIEltYWdpY2tQaXhlbCBvYmplY3Qgb3IgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZmlsbCBjb2xvcgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRmdXp6IDxwPgogICAgICogVGhlIGFtb3VudCBvZiBmdXp6LiBGb3IgZXhhbXBsZSwgc2V0IGZ1enogdG8gMTAgYW5kIHRoZSBjb2xvciByZWQgYXQKICAgICAqIGludGVuc2l0aWVzIG9mIDEwMCBhbmQgMTAyIHJlc3BlY3RpdmVseSBhcmUgbm93IGludGVycHJldGVkIGFzIHRoZQogICAgICogc2FtZSBjb2xvciBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSBmbG9vZGZpbGwuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gbWl4ZWQgJGJvcmRlcmNvbG9yIDxwPgogICAgICogSW1hZ2lja1BpeGVsIG9iamVjdCBvciBhIHN0cmluZyBjb250YWluaW5nIHRoZSBib3JkZXIgY29sb3IKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHggPHA+CiAgICAgKiBYIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBmbG9vZGZpbGwKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHkgPHA+CiAgICAgKiBZIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBmbG9vZGZpbGwKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXSA8cD4KICAgICAqIFByb3ZpZGUgYW55IGNoYW5uZWwgY29uc3RhbnQgdGhhdCBpcyB2YWxpZCBmb3IgeW91ciBjaGFubmVsIG1vZGUuIFRvIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsIGNvbnN0YW50cyB1c2luZyBiaXR3aXNlIG9wZXJhdG9ycy4gRGVmYXVsdHMgdG8gPGI+SW1hZ2ljazo6Q0hBTk5FTF9ERUZBVUxUPC9iPi4gUmVmZXIgdG8gdGhpcyBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tEZXByZWNhdGVkXQogICAgcHVibGljIGZ1bmN0aW9uIHBhaW50Rmxvb2RmaWxsSW1hZ2UoJGZpbGwsICRmdXp6LCAkYm9yZGVyY29sb3IsICR4LCAkeSwgJGNoYW5uZWwgPSBJbWFnaWNrOjpDSEFOTkVMX0FMTCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJlcGxhY2VzIGNvbG9ycyBpbiB0aGUgaW1hZ2UgZnJvbSBhIGNvbG9yIGxvb2t1cCB0YWJsZS4gT3B0aW9uYWwgc2Vjb25kIHBhcmFtZXRlciB0byByZXBsYWNlIGNvbG9ycyBpbiBhIHNwZWNpZmljIGNoYW5uZWwuIFRoaXMgbWV0aG9kIGlzIGF2YWlsYWJsZSBpZiBJbWFnaWNrIGhhcyBiZWVuIGNvbXBpbGVkIGFnYWluc3QgSW1hZ2VNYWdpY2sgdmVyc2lvbiA2LjMuNiBvciBuZXdlci4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5jbHV0aW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2ljayAkbG9va3VwX3RhYmxlIDxwPgogICAgICogSW1hZ2ljayBvYmplY3QgY29udGFpbmluZyB0aGUgY29sb3IgbG9va3VwIHRhYmxlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgQ2hhbm5lbHR5cGUKICAgICAqIGNvbnN0YW50LiBXaGVuIG5vdCBzdXBwbGllZCwgZGVmYXVsdCBjaGFubmVscyBhcmUgcmVwbGFjZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEBzaW5jZSAyLjAuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2x1dEltYWdlKEltYWdpY2sgJGxvb2t1cF90YWJsZSwgJGNoYW5uZWwgPSBJbWFnaWNrOjpDSEFOTkVMX0RFRkFVTFQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBpbWFnZSBwcm9wZXJ0aWVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2Vwcm9wZXJ0aWVzLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIHBhdHRlcm4gZm9yIHByb3BlcnR5IG5hbWVzLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGJvb2wgJG9ubHlfbmFtZXMgW29wdGlvbmFsXSA8cD4KICAgICAqIFdoZXRoZXIgdG8gcmV0dXJuIG9ubHkgcHJvcGVydHkgbmFtZXMuIElmIDxiPkZBTFNFPC9iPiB0aGVuIGFsc28gdGhlIHZhbHVlcyBhcmUgcmV0dXJuZWQKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYXJyYXkgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgaW1hZ2UgcHJvcGVydGllcyBvciBwcm9wZXJ0eSBuYW1lcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlUHJvcGVydGllcygkcGF0dGVybiA9ICIqIiwgJG9ubHlfbmFtZXMgPSB0cnVlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjIuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgaW1hZ2UgcHJvZmlsZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZXByb2ZpbGVzLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIHBhdHRlcm4gZm9yIHByb2ZpbGUgbmFtZXMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkaW5jbHVkZV92YWx1ZXMgW29wdGlvbmFsXSA8cD4KICAgICAqIFdoZXRoZXIgdG8gcmV0dXJuIG9ubHkgcHJvZmlsZSBuYW1lcy4gSWYgPGI+RkFMU0U8L2I+IHRoZW4gb25seSBwcm9maWxlIG5hbWVzIHdpbGwgYmUgcmV0dXJuZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGltYWdlIHByb2ZpbGVzIG9yIHByb2ZpbGUgbmFtZXMuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZVByb2ZpbGVzKCRwYXR0ZXJuID0gIioiLCAkaW5jbHVkZV92YWx1ZXMgPSB0cnVlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMSk8YnIvPgogICAgICogRGlzdG9ydHMgYW4gaW1hZ2UgdXNpbmcgdmFyaW91cyBkaXN0b3J0aW9uIG1ldGhvZHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5kaXN0b3J0aW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gaW50ICRtZXRob2QgPHA+CiAgICAgKiBUaGUgbWV0aG9kIG9mIGltYWdlIGRpc3RvcnRpb24uIFNlZSBkaXN0b3J0aW9uIGNvbnN0YW50cwogICAgICogPC9wPgogICAgICogQHBhcmFtIGFycmF5ICRhcmd1bWVudHMgPHA+CiAgICAgKiBUaGUgYXJndW1lbnRzIGZvciB0aGlzIGRpc3RvcnRpb24gbWV0aG9kCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkYmVzdGZpdCA8cD4KICAgICAqIEF0dGVtcHQgdG8gcmVzaXplIGRlc3RpbmF0aW9uIHRvIGZpdCBkaXN0b3J0ZWQgc291cmNlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc3RvcnRJbWFnZSgkbWV0aG9kLCBhcnJheSAkYXJndW1lbnRzLCAkYmVzdGZpdCkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIFdyaXRlcyBhbiBpbWFnZSB0byBhIGZpbGVoYW5kbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay53cml0ZWltYWdlZmlsZS5waHAKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkZmlsZWhhbmRsZSA8cD4KICAgICAqIEZpbGVoYW5kbGUgd2hlcmUgdG8gd3JpdGUgdGhlIGltYWdlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlSW1hZ2VGaWxlKCRmaWxlaGFuZGxlKSB7fQoKICAgIC8qKgogICAgICogKE5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBtaWdodCBvbmx5IGJlIGluIFNWTik8YnIvPgogICAgICogV3JpdGVzIGZyYW1lcyB0byBhIGZpbGVoYW5kbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay53cml0ZWltYWdlc2ZpbGUucGhwCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJGZpbGVoYW5kbGUgPHA+CiAgICAgKiBGaWxlaGFuZGxlIHdoZXJlIHRvIHdyaXRlIHRoZSBpbWFnZXMKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGVJbWFnZXNGaWxlKCRmaWxlaGFuZGxlKSB7fQoKICAgIC8qKgogICAgICogKE5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBtaWdodCBvbmx5IGJlIGluIFNWTik8YnIvPgogICAgICogUmVzZXQgaW1hZ2UgcGFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnJlc2V0aW1hZ2VwYWdlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcGFnZSA8cD4KICAgICAqIFRoZSBwYWdlIGRlZmluaXRpb24uIEZvciBleGFtcGxlIDcxNjh4NTE0NyswKzAKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXRJbWFnZVBhZ2UoJHBhZ2UpIHt9CgogICAgLyoqCiAgICAgKiAoTm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIG1pZ2h0IG9ubHkgYmUgaW4gU1ZOKTxici8+CiAgICAgKiBTZXRzIGltYWdlIGNsaXAgbWFzawogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlY2xpcG1hc2sucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2ljayAkY2xpcF9tYXNrIDxwPgogICAgICogVGhlIEltYWdpY2sgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNsaXAgbWFzawogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZUNsaXBNYXNrKEltYWdpY2sgJGNsaXBfbWFzaykge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIEdldHMgaW1hZ2UgY2xpcCBtYXNrCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VjbGlwbWFzay5waHAKICAgICAqIEByZXR1cm4gSW1hZ2ljayBhbiBJbWFnaWNrIG9iamVjdCBjb250YWluaW5nIHRoZSBjbGlwIG1hc2suCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZUNsaXBNYXNrKCkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIEFuaW1hdGVzIGFuIGltYWdlIG9yIGltYWdlcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmFuaW1hdGVpbWFnZXMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR4X3NlcnZlciA8cD4KICAgICAqIFggc2VydmVyIGFkZHJlc3MKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYW5pbWF0ZUltYWdlcygkeF9zZXJ2ZXIpIHt9CgogICAgLyoqCiAgICAgKiAoTm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIG1pZ2h0IG9ubHkgYmUgaW4gU1ZOKTxici8+CiAgICAgKiBSZWNvbG9ycyBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnJlY29sb3JpbWFnZS5waHAKICAgICAqIEBwYXJhbSBhcnJheSAkbWF0cml4IDxwPgogICAgICogVGhlIG1hdHJpeCBjb250YWluaW5nIHRoZSBjb2xvciB2YWx1ZXMKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW0RlcHJlY2F0ZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVjb2xvckltYWdlKGFycmF5ICRtYXRyaXgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMS4wKTxici8+CiAgICAgKiBTZXRzIGZvbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRmb250LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZm9udCA8cD4KICAgICAqIEZvbnQgbmFtZSBvciBhIGZpbGVuYW1lCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEZvbnQoJGZvbnQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMS4wKTxici8+CiAgICAgKiBHZXRzIGZvbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRmb250LnBocAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBmb250IG5hbWUgb3IgPGI+RkFMU0U8L2I+IGlmIG5vdCBmb250IGlzIHNldC4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZvbnQoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjEuMCk8YnIvPgogICAgICogU2V0cyBwb2ludCBzaXplCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0cG9pbnRzaXplLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRwb2ludF9zaXplIDxwPgogICAgICogUG9pbnQgc2l6ZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQb2ludFNpemUoJHBvaW50X3NpemUpIHt9CgogICAgLyoqCiAgICAgKiAoTm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIG1pZ2h0IG9ubHkgYmUgaW4gU1ZOKTxici8+CiAgICAgKiBHZXRzIHBvaW50IHNpemUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRwb2ludHNpemUucGhwCiAgICAgKiBAcmV0dXJuIGZsb2F0IGEgZmxvYXQgY29udGFpbmluZyB0aGUgcG9pbnQgc2l6ZS4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvaW50U2l6ZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMS4wKTxici8+CiAgICAgKiBNZXJnZXMgaW1hZ2UgbGF5ZXJzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2subWVyZ2VpbWFnZWxheWVycy5waHAKICAgICAqIEBwYXJhbSBpbnQgJGxheWVyX21ldGhvZCA8cD4KICAgICAqIE9uZSBvZiB0aGUgPGI+SW1hZ2ljazo6TEFZRVJNRVRIT0RfKjwvYj4gY29uc3RhbnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIEltYWdpY2sgUmV0dXJucyBhbiBJbWFnaWNrIG9iamVjdCBjb250YWluaW5nIHRoZSBtZXJnZWQgaW1hZ2UuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1lcmdlSW1hZ2VMYXllcnMoJGxheWVyX21ldGhvZCkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIFNldHMgaW1hZ2UgYWxwaGEgY2hhbm5lbAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlYWxwaGFjaGFubmVsLnBocAogICAgICogQHBhcmFtIGludCAkbW9kZSA8cD4KICAgICAqIE9uZSBvZiB0aGUgPGI+SW1hZ2ljazo6QUxQSEFDSEFOTkVMXyo8L2I+IGNvbnN0YW50cwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZUFscGhhQ2hhbm5lbCgkbW9kZSkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIENoYW5nZXMgdGhlIGNvbG9yIHZhbHVlIG9mIGFueSBwaXhlbCB0aGF0IG1hdGNoZXMgdGFyZ2V0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZmxvb2RmaWxscGFpbnRpbWFnZS5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkZmlsbCA8cD4KICAgICAqIEltYWdpY2tQaXhlbCBvYmplY3Qgb3IgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZmlsbCBjb2xvcgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRmdXp6IDxwPgogICAgICogVGhlIGFtb3VudCBvZiBmdXp6LiBGb3IgZXhhbXBsZSwgc2V0IGZ1enogdG8gMTAgYW5kIHRoZSBjb2xvciByZWQgYXQgaW50ZW5zaXRpZXMgb2YgMTAwIGFuZCAxMDIgcmVzcGVjdGl2ZWx5IGFyZSBub3cgaW50ZXJwcmV0ZWQgYXMgdGhlIHNhbWUgY29sb3IuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHRhcmdldCA8cD4KICAgICAqIEltYWdpY2tQaXhlbCBvYmplY3Qgb3IgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgdGFyZ2V0IGNvbG9yIHRvIHBhaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR4IDxwPgogICAgICogWCBzdGFydCBwb3NpdGlvbiBvZiB0aGUgZmxvb2RmaWxsCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR5IDxwPgogICAgICogWSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgZmxvb2RmaWxsCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkaW52ZXJ0IDxwPgogICAgICogSWYgPGI+VFJVRTwvYj4gcGFpbnRzIGFueSBwaXhlbCB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSB0YXJnZXQgY29sb3IuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0gPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbyBhcHBseSB0byBtb3JlIHRoYW4gb25lIGNoYW5uZWwsIGNvbWJpbmUgY2hhbm5lbCBjb25zdGFudHMgdXNpbmcgYml0d2lzZSBvcGVyYXRvcnMuIERlZmF1bHRzIHRvIDxiPkltYWdpY2s6OkNIQU5ORUxfREVGQVVMVDwvYj4uIFJlZmVyIHRvIHRoaXMgbGlzdCBvZiBjaGFubmVsIGNvbnN0YW50cwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmbG9vZEZpbGxQYWludEltYWdlKCRmaWxsLCAkZnV6eiwgJHRhcmdldCwgJHgsICR5LCAkaW52ZXJ0LCAkY2hhbm5lbCA9IEltYWdpY2s6OkNIQU5ORUxfREVGQVVMVCkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIENoYW5nZXMgdGhlIGNvbG9yIHZhbHVlIG9mIGFueSBwaXhlbCB0aGF0IG1hdGNoZXMgdGFyZ2V0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sub3BhcXVlcGFpbnRpbWFnZS5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkdGFyZ2V0IDxwPgogICAgICogSW1hZ2lja1BpeGVsIG9iamVjdCBvciBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb2xvciB0byBjaGFuZ2UKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBtaXhlZCAkZmlsbCA8cD4KICAgICAqIFRoZSByZXBsYWNlbWVudCBjb2xvcgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRmdXp6IDxwPgogICAgICogVGhlIGFtb3VudCBvZiBmdXp6LiBGb3IgZXhhbXBsZSwgc2V0IGZ1enogdG8gMTAgYW5kIHRoZSBjb2xvciByZWQgYXQgaW50ZW5zaXRpZXMgb2YgMTAwIGFuZCAxMDIgcmVzcGVjdGl2ZWx5IGFyZSBub3cgaW50ZXJwcmV0ZWQgYXMgdGhlIHNhbWUgY29sb3IuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkaW52ZXJ0IDxwPgogICAgICogSWYgPGI+VFJVRTwvYj4gcGFpbnRzIGFueSBwaXhlbCB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSB0YXJnZXQgY29sb3IuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0gPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbyBhcHBseSB0byBtb3JlIHRoYW4gb25lIGNoYW5uZWwsIGNvbWJpbmUgY2hhbm5lbCBjb25zdGFudHMgdXNpbmcgYml0d2lzZSBvcGVyYXRvcnMuIERlZmF1bHRzIHRvIDxiPkltYWdpY2s6OkNIQU5ORUxfREVGQVVMVDwvYj4uIFJlZmVyIHRvIHRoaXMgbGlzdCBvZiBjaGFubmVsIGNvbnN0YW50cwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcGFxdWVQYWludEltYWdlKCR0YXJnZXQsICRmaWxsLCAkZnV6eiwgJGludmVydCwgJGNoYW5uZWwgPSBJbWFnaWNrOjpDSEFOTkVMX0RFRkFVTFQpIHt9CgogICAgLyoqCiAgICAgKiAoTm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIG1pZ2h0IG9ubHkgYmUgaW4gU1ZOKTxici8+CiAgICAgKiBQYWludHMgcGl4ZWxzIHRyYW5zcGFyZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sudHJhbnNwYXJlbnRwYWludGltYWdlLnBocAogICAgICogQHBhcmFtIG1peGVkICR0YXJnZXQgPHA+CiAgICAgKiBUaGUgdGFyZ2V0IGNvbG9yIHRvIHBhaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJGFscGhhIDxwPgogICAgICogVGhlIGxldmVsIG9mIHRyYW5zcGFyZW5jeTogMS4wIGlzIGZ1bGx5IG9wYXF1ZSBhbmQgMC4wIGlzIGZ1bGx5IHRyYW5zcGFyZW50LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRmdXp6IDxwPgogICAgICogVGhlIGFtb3VudCBvZiBmdXp6LiBGb3IgZXhhbXBsZSwgc2V0IGZ1enogdG8gMTAgYW5kIHRoZSBjb2xvciByZWQgYXQgaW50ZW5zaXRpZXMgb2YgMTAwIGFuZCAxMDIgcmVzcGVjdGl2ZWx5IGFyZSBub3cgaW50ZXJwcmV0ZWQgYXMgdGhlIHNhbWUgY29sb3IuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkaW52ZXJ0IDxwPgogICAgICogSWYgPGI+VFJVRTwvYj4gcGFpbnRzIGFueSBwaXhlbCB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSB0YXJnZXQgY29sb3IuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyYW5zcGFyZW50UGFpbnRJbWFnZSgkdGFyZ2V0LCAkYWxwaGEsICRmdXp6LCAkaW52ZXJ0KSB7fQoKICAgIC8qKgogICAgICogKE5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBtaWdodCBvbmx5IGJlIGluIFNWTik8YnIvPgogICAgICogQW5pbWF0ZXMgYW4gaW1hZ2Ugb3IgaW1hZ2VzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2subGlxdWlkcmVzY2FsZWltYWdlLnBocAogICAgICogQHBhcmFtIGludCAkd2lkdGggPHA+CiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHRhcmdldCBzaXplCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQgPHA+CiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0YXJnZXQgc2l6ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRkZWx0YV94IDxwPgogICAgICogSG93IG11Y2ggdGhlIHNlYW0gY2FuIHRyYXZlcnNlIG9uIHgtYXhpcy4KICAgICAqIFBhc3NpbmcgMCBjYXVzZXMgdGhlIHNlYW1zIHRvIGJlIHN0cmFpZ2h0LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRyaWdpZGl0eSA8cD4KICAgICAqIEludHJvZHVjZXMgYSBiaWFzIGZvciBub24tc3RyYWlnaHQgc2VhbXMuIFRoaXMgcGFyYW1ldGVyIGlzCiAgICAgKiB0eXBpY2FsbHkgMC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlxdWlkUmVzY2FsZUltYWdlKCR3aWR0aCwgJGhlaWdodCwgJGRlbHRhX3gsICRyaWdpZGl0eSkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIEVuY2lwaGVycyBhbiBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmVuY2lwaGVyaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXNzcGhyYXNlIDxwPgogICAgICogVGhlIHBhc3NwaHJhc2UKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jaXBoZXJJbWFnZSgkcGFzc3BocmFzZSkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIERlY2lwaGVycyBhbiBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmRlY2lwaGVyaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXNzcGhyYXNlIDxwPgogICAgICogVGhlIHBhc3NwaHJhc2UKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjaXBoZXJJbWFnZSgkcGFzc3BocmFzZSkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIFNldHMgdGhlIGdyYXZpdHkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRncmF2aXR5LnBocAogICAgICogQHBhcmFtIGludCAkZ3Jhdml0eSA8cD4KICAgICAqIFRoZSBncmF2aXR5IHByb3BlcnR5LiBSZWZlciB0byB0aGUgbGlzdCBvZgogICAgICogZ3Jhdml0eSBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRHcmF2aXR5KCRncmF2aXR5KSB7fQoKICAgIC8qKgogICAgICogKE5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBtaWdodCBvbmx5IGJlIGluIFNWTik8YnIvPgogICAgICogR2V0cyB0aGUgZ3Jhdml0eQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGdyYXZpdHkucGhwCiAgICAgKiBAcmV0dXJuIGludCB0aGUgZ3Jhdml0eSBwcm9wZXJ0eS4gUmVmZXIgdG8gdGhlIGxpc3Qgb2YKICAgICAqIGdyYXZpdHkgY29uc3RhbnRzLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0R3Jhdml0eSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMi4xKTxici8+CiAgICAgKiBHZXRzIGNoYW5uZWwgcmFuZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWNoYW5uZWxyYW5nZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbyBhcHBseSB0byBtb3JlIHRoYW4gb25lIGNoYW5uZWwsIGNvbWJpbmUgY2hhbm5lbCBjb25zdGFudHMgdXNpbmcgYml0d2lzZSBvcGVyYXRvcnMuIERlZmF1bHRzIHRvIDxiPkltYWdpY2s6OkNIQU5ORUxfREVGQVVMVDwvYj4uIFJlZmVyIHRvIHRoaXMgbGlzdCBvZiBjaGFubmVsIGNvbnN0YW50cwogICAgICogPC9wPgogICAgICogQHJldHVybiBmbG9hdFtdIGFuIGFycmF5IGNvbnRhaW5pbmcgbWluaW1hIGFuZCBtYXhpbWEgdmFsdWVzIG9mIHRoZSBjaGFubmVsKHMpLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW0FycmF5U2hhcGUoWyJtaW5pbWEiID0+ICJmbG9hdCIsICJtYXhpbWEiID0+ICJmbG9hdCJdKV0KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZUNoYW5uZWxSYW5nZSgkY2hhbm5lbCkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIEdldHMgdGhlIGltYWdlIGFscGhhIGNoYW5uZWwKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWFscGhhY2hhbm5lbC5waHAKICAgICAqIEByZXR1cm4gaW50IGEgY29uc3RhbnQgZGVmaW5pbmcgdGhlIGN1cnJlbnQgYWxwaGEgY2hhbm5lbCB2YWx1ZS4gUmVmZXIgdG8gdGhpcwogICAgICogbGlzdCBvZiBhbHBoYSBjaGFubmVsIGNvbnN0YW50cy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlQWxwaGFDaGFubmVsKCkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIEdldHMgY2hhbm5lbCBkaXN0b3J0aW9ucwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlY2hhbm5lbGRpc3RvcnRpb25zLnBocAogICAgICogQHBhcmFtIEltYWdpY2sgJHJlZmVyZW5jZSA8cD4KICAgICAqIEltYWdpY2sgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZmVyZW5jZSBpbWFnZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkbWV0cmljIDxwPgogICAgICogUmVmZXIgdG8gdGhpcyBsaXN0IG9mIG1ldHJpYyB0eXBlIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXSA8cD4KICAgICAqIFByb3ZpZGUgYW55IGNoYW5uZWwgY29uc3RhbnQgdGhhdCBpcyB2YWxpZCBmb3IgeW91ciBjaGFubmVsIG1vZGUuIFRvIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsIGNvbnN0YW50cyB1c2luZyBiaXR3aXNlIG9wZXJhdG9ycy4gRGVmYXVsdHMgdG8gPGI+SW1hZ2ljazo6Q0hBTk5FTF9ERUZBVUxUPC9iPi4gUmVmZXIgdG8gdGhpcyBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGZsb2F0IGEgZmxvYXQgZGVzY3JpYmluZyB0aGUgY2hhbm5lbCBkaXN0b3J0aW9uLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VDaGFubmVsRGlzdG9ydGlvbnMoSW1hZ2ljayAkcmVmZXJlbmNlLCAkbWV0cmljLCAkY2hhbm5lbCA9IEltYWdpY2s6OkNIQU5ORUxfREVGQVVMVCkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIGdyYXZpdHkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZWdyYXZpdHkucGhwCiAgICAgKiBAcGFyYW0gaW50ICRncmF2aXR5IDxwPgogICAgICogVGhlIGdyYXZpdHkgcHJvcGVydHkuIFJlZmVyIHRvIHRoZSBsaXN0IG9mCiAgICAgKiBncmF2aXR5IGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlR3Jhdml0eSgkZ3Jhdml0eSkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIEdldHMgdGhlIGltYWdlIGdyYXZpdHkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWdyYXZpdHkucGhwCiAgICAgKiBAcmV0dXJuIGludCB0aGUgaW1hZ2VzIGdyYXZpdHkgcHJvcGVydHkuIFJlZmVyIHRvIHRoZSBsaXN0IG9mCiAgICAgKiBncmF2aXR5IGNvbnN0YW50cy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlR3Jhdml0eSgpIHt9CgogICAgLyoqCiAgICAgKiAoTm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIG1pZ2h0IG9ubHkgYmUgaW4gU1ZOKTxici8+CiAgICAgKiBJbXBvcnRzIGltYWdlIHBpeGVscwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmltcG9ydGltYWdlcGl4ZWxzLnBocAogICAgICogQHBhcmFtIGludCAkeCA8cD4KICAgICAqIFRoZSBpbWFnZSB4IHBvc2l0aW9uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR5IDxwPgogICAgICogVGhlIGltYWdlIHkgcG9zaXRpb24KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoIDxwPgogICAgICogVGhlIGltYWdlIHdpZHRoCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQgPHA+CiAgICAgKiBUaGUgaW1hZ2UgaGVpZ2h0CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXAgPHA+CiAgICAgKiBNYXAgb2YgcGl4ZWwgb3JkZXJpbmcgYXMgYSBzdHJpbmcuIFRoaXMgY2FuIGJlIGZvciBleGFtcGxlIFJHQi4KICAgICAqIFRoZSB2YWx1ZSBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9yIG9yZGVyIG9mIFIgPSByZWQsIEcgPSBncmVlbiwgQiA9IGJsdWUsIEEgPSBhbHBoYSAoMCBpcyB0cmFuc3BhcmVudCksCiAgICAgKiBPID0gb3BhY2l0eSAoMCBpcyBvcGFxdWUpLCBDID0gY3lhbiwgWSA9IHllbGxvdywgTSA9IG1hZ2VudGEsIEsgPSBibGFjaywgSSA9IGludGVuc2l0eSAoZm9yIGdyYXlzY2FsZSksIFAgPSBwYWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRzdG9yYWdlIDxwPgogICAgICogVGhlIHBpeGVsIHN0b3JhZ2UgbWV0aG9kLgogICAgICogUmVmZXIgdG8gdGhpcyBsaXN0IG9mIHBpeGVsIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBhcnJheSAkcGl4ZWxzIDxwPgogICAgICogVGhlIGFycmF5IG9mIHBpeGVscwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbXBvcnRJbWFnZVBpeGVscygkeCwgJHksICR3aWR0aCwgJGhlaWdodCwgJG1hcCwgJHN0b3JhZ2UsIGFycmF5ICRwaXhlbHMpIHt9CgogICAgLyoqCiAgICAgKiAoTm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIG1pZ2h0IG9ubHkgYmUgaW4gU1ZOKTxici8+CiAgICAgKiBSZW1vdmVzIHNrZXcgZnJvbSB0aGUgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5kZXNrZXdpbWFnZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkdGhyZXNob2xkIDxwPgogICAgICogRGVza2V3IHRocmVzaG9sZAogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNrZXdJbWFnZSgkdGhyZXNob2xkKSB7fQoKICAgIC8qKgogICAgICogKE5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBtaWdodCBvbmx5IGJlIGluIFNWTik8YnIvPgogICAgICogU2VnbWVudHMgYW4gaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZWdtZW50aW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gaW50ICRDT0xPUlNQQUNFIDxwPgogICAgICogT25lIG9mIHRoZSBDT0xPUlNQQUNFIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkY2x1c3Rlcl90aHJlc2hvbGQgPHA+CiAgICAgKiBBIHBlcmNlbnRhZ2UgZGVzY3JpYmluZyBtaW5pbXVtIG51bWJlciBvZiBwaXhlbHMKICAgICAqIGNvbnRhaW5lZCBpbiBoZXhlZHJhIGJlZm9yZSBpdCBpcyBjb25zaWRlcmVkIHZhbGlkLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRzbW9vdGhfdGhyZXNob2xkIDxwPgogICAgICogRWxpbWluYXRlcyBub2lzZSBmcm9tIHRoZSBoaXN0b2dyYW0uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkdmVyYm9zZSBbb3B0aW9uYWxdIDxwPgogICAgICogV2hldGhlciB0byBvdXRwdXQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgcmVjb2duaXNlZCBjbGFzc2VzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZWdtZW50SW1hZ2UoJENPTE9SU1BBQ0UsICRjbHVzdGVyX3RocmVzaG9sZCwgJHNtb290aF90aHJlc2hvbGQsICR2ZXJib3NlID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiAoTm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIG1pZ2h0IG9ubHkgYmUgaW4gU1ZOKTxici8+CiAgICAgKiBJbnRlcnBvbGF0ZXMgY29sb3JzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc3BhcnNlY29sb3JpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJFNQQVJTRV9NRVRIT0QgPHA+CiAgICAgKiBSZWZlciB0byB0aGlzIGxpc3Qgb2Ygc3BhcnNlIG1ldGhvZCBjb25zdGFudHMKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBhcnJheSAkYXJndW1lbnRzIDxwPgogICAgICogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMuCiAgICAgKiBUaGUgYXJyYXkgaXMgaW4gZm9ybWF0IGFycmF5KDEsMSwgMiw0NSkKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzcGFyc2VDb2xvckltYWdlKCRTUEFSU0VfTUVUSE9ELCBhcnJheSAkYXJndW1lbnRzLCAkY2hhbm5lbCA9IEltYWdpY2s6OkNIQU5ORUxfREVGQVVMVCkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIFJlbWFwcyBpbWFnZSBjb2xvcnMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5yZW1hcGltYWdlLnBocAogICAgICogQHBhcmFtIEltYWdpY2sgJHJlcGxhY2VtZW50IDxwPgogICAgICogQW4gSW1hZ2ljayBvYmplY3QgY29udGFpbmluZyB0aGUgcmVwbGFjZW1lbnQgY29sb3JzCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRESVRIRVIgPHA+CiAgICAgKiBSZWZlciB0byB0aGlzIGxpc3Qgb2YgZGl0aGVyIG1ldGhvZCBjb25zdGFudHMKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtYXBJbWFnZShJbWFnaWNrICRyZXBsYWNlbWVudCwgJERJVEhFUikge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIEV4cG9ydHMgcmF3IGltYWdlIHBpeGVscwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmV4cG9ydGltYWdlcGl4ZWxzLnBocAogICAgICogQHBhcmFtIGludCAkeCA8cD4KICAgICAqIFgtY29vcmRpbmF0ZSBvZiB0aGUgZXhwb3J0ZWQgYXJlYQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkeSA8cD4KICAgICAqIFktY29vcmRpbmF0ZSBvZiB0aGUgZXhwb3J0ZWQgYXJlYQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkd2lkdGggPHA+CiAgICAgKiBXaWR0aCBvZiB0aGUgZXhwb3J0ZWQgYXJlYWQKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGhlaWdodCA8cD4KICAgICAqIEhlaWdodCBvZiB0aGUgZXhwb3J0ZWQgYXJlYQogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkbWFwIDxwPgogICAgICogT3JkZXJpbmcgb2YgdGhlIGV4cG9ydGVkIHBpeGVscy4gRm9yIGV4YW1wbGUgIlJHQiIuCiAgICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGZvciB0aGUgbWFwIGFyZSBSLCBHLCBCLCBBLCBPLCBDLCBZLCBNLCBLLCBJIGFuZCBQLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkU1RPUkFHRSA8cD4KICAgICAqIFJlZmVyIHRvIHRoaXMgbGlzdCBvZiBwaXhlbCB0eXBlIGNvbnN0YW50cwogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnRbXSBhbiBhcnJheSBjb250YWluaW5nIHRoZSBwaXhlbHMgdmFsdWVzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwb3J0SW1hZ2VQaXhlbHMoJHgsICR5LCAkd2lkdGgsICRoZWlnaHQsICRtYXAsICRTVE9SQUdFKSB7fQoKICAgIC8qKgogICAgICogKE5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBtaWdodCBvbmx5IGJlIGluIFNWTik8YnIvPgogICAgICogVGhlIGdldEltYWdlQ2hhbm5lbEt1cnRvc2lzIHB1cnBvc2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWNoYW5uZWxrdXJ0b3Npcy5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXSA8cD4KICAgICAqIFByb3ZpZGUgYW55IGNoYW5uZWwgY29uc3RhbnQgdGhhdCBpcyB2YWxpZCBmb3IgeW91ciBjaGFubmVsIG1vZGUuIFRvIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsIGNvbnN0YW50cyB1c2luZyBiaXR3aXNlIG9wZXJhdG9ycy4gRGVmYXVsdHMgdG8gPGI+SW1hZ2ljazo6Q0hBTk5FTF9ERUZBVUxUPC9iPi4gUmVmZXIgdG8gdGhpcyBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGZsb2F0W10gYW4gYXJyYXkgd2l0aCBrdXJ0b3NpcyBhbmQgc2tld25lc3MKICAgICAqIG1lbWJlcnMuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbQXJyYXlTaGFwZShbImt1cnRvc2lzIiA9PiAiZmxvYXQiLCAic2tld25lc3MiID0+ICJmbG9hdCJdKV0KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZUNoYW5uZWxLdXJ0b3NpcygkY2hhbm5lbCA9IEltYWdpY2s6OkNIQU5ORUxfREVGQVVMVCkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIEFwcGxpZXMgYSBmdW5jdGlvbiBvbiB0aGUgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5mdW5jdGlvbmltYWdlLnBocAogICAgICogQHBhcmFtIGludCAkZnVuY3Rpb24gPHA+CiAgICAgKiBSZWZlciB0byB0aGlzIGxpc3Qgb2YgZnVuY3Rpb24gY29uc3RhbnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3VtZW50cyA8cD4KICAgICAqIEFycmF5IG9mIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoaXMgZnVuY3Rpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZnVuY3Rpb25JbWFnZSgkZnVuY3Rpb24sIGFycmF5ICRhcmd1bWVudHMsICRjaGFubmVsID0gSW1hZ2ljazo6Q0hBTk5FTF9ERUZBVUxUKSB7fQoKICAgIC8qKgogICAgICogVHJhbnNmb3JtIGltYWdlIGNvbG9yc3BhY2UKICAgICAqIEBwYXJhbSAkQ09MT1JTUEFDRQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2Zvcm1JbWFnZUNvbG9yc3BhY2UoJENPTE9SU1BBQ0UpIHt9CgogICAgLyoqCiAgICAgKiAoTm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIG1pZ2h0IG9ubHkgYmUgaW4gU1ZOKTxici8+CiAgICAgKiBSZXBsYWNlcyBjb2xvcnMgaW4gdGhlIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suaGFsZGNsdXRpbWFnZS5waHAKICAgICAqIEBwYXJhbSBJbWFnaWNrICRjbHV0IDxwPgogICAgICogSW1hZ2ljayBvYmplY3QgY29udGFpbmluZyB0aGUgSGFsZCBsb29rdXAgaW1hZ2UuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0gPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbyBhcHBseSB0byBtb3JlIHRoYW4gb25lIGNoYW5uZWwsIGNvbWJpbmUgY2hhbm5lbCBjb25zdGFudHMgdXNpbmcgYml0d2lzZSBvcGVyYXRvcnMuIERlZmF1bHRzIHRvIDxiPkltYWdpY2s6OkNIQU5ORUxfREVGQVVMVDwvYj4uIFJlZmVyIHRvIHRoaXMgbGlzdCBvZiBjaGFubmVsIGNvbnN0YW50cwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYWxkQ2x1dEltYWdlKEltYWdpY2sgJGNsdXQsICRjaGFubmVsID0gSW1hZ2ljazo6Q0hBTk5FTF9ERUZBVUxUKSB7fQoKICAgIC8qKgogICAgICogQWRqdXN0cyB0aGUgbGV2ZWxzIG9mIGEgcGFydGljdWxhciBpbWFnZSBjaGFubmVsIGJ5IHNjYWxpbmcgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIHRvIHRoZSBmdWxsIHF1YW50dW0gcmFuZ2UuCiAgICAgKiBAcGFyYW0gJENIQU5ORUwgW29wdGlvbmFsXQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhdXRvTGV2ZWxJbWFnZSgkQ0hBTk5FTCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suYmx1ZXNoaWZ0aW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJGZhY3RvciBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJsdWVTaGlmdEltYWdlKCRmYWN0b3IpIHt9CgogICAgLyoqCiAgICAgKiAoTm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIG1pZ2h0IG9ubHkgYmUgaW4gU1ZOKTxici8+CiAgICAgKiBHZXQgaW1hZ2UgYXJ0aWZhY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWFydGlmYWN0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkYXJ0aWZhY3QgPHA+CiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYXJ0aWZhY3QKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBhcnRpZmFjdCB2YWx1ZSBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VBcnRpZmFjdCgkYXJ0aWZhY3QpIHt9CgogICAgLyoqCiAgICAgKiAoTm8gdmVyc2lvbiBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIG1pZ2h0IG9ubHkgYmUgaW4gU1ZOKTxici8+CiAgICAgKiBTZXQgaW1hZ2UgYXJ0aWZhY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZWFydGlmYWN0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkYXJ0aWZhY3QgPHA+CiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYXJ0aWZhY3QKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIG9mIHRoZSBhcnRpZmFjdAogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZUFydGlmYWN0KCRhcnRpZmFjdCwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogKE5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBtaWdodCBvbmx5IGJlIGluIFNWTik8YnIvPgogICAgICogRGVsZXRlIGltYWdlIGFydGlmYWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZGVsZXRlaW1hZ2VhcnRpZmFjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFydGlmYWN0IDxwPgogICAgICogVGhlIG5hbWUgb2YgdGhlIGFydGlmYWN0IHRvIGRlbGV0ZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVJbWFnZUFydGlmYWN0KCRhcnRpZmFjdCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMC45LjEwLTAuOS45KTxici8+CiAgICAgKiBHZXRzIHRoZSBjb2xvcnNwYWNlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0Y29sb3JzcGFjZS5waHAKICAgICAqIEByZXR1cm4gaW50IGFuIGludGVnZXIgd2hpY2ggY2FuIGJlIGNvbXBhcmVkIGFnYWluc3QgQ09MT1JTUEFDRSBjb25zdGFudHMuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2xvcnNwYWNlKCkge30KCiAgICAvKioKICAgICAqIChObyB2ZXJzaW9uIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgbWlnaHQgb25seSBiZSBpbiBTVk4pPGJyLz4KICAgICAqIFNldCBjb2xvcnNwYWNlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0Y29sb3JzcGFjZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJENPTE9SU1BBQ0UgPHA+CiAgICAgKiBPbmUgb2YgdGhlIENPTE9SU1BBQ0UgY29uc3RhbnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbG9yc3BhY2UoJENPTE9SU1BBQ0UpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJENIQU5ORUwgW29wdGlvbmFsXQogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xhbXBJbWFnZSgkQ0hBTk5FTCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBib29sICRzdGFjawogICAgICogQHBhcmFtIGludCAkb2Zmc2V0CiAgICAgKiBAcmV0dXJuIEltYWdpY2sKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNtdXNoSW1hZ2VzKCRzdGFjaywgJG9mZnNldCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFRoZSBJbWFnaWNrIGNvbnN0cnVjdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIG1peGVkICRmaWxlcyA8cD4KICAgICAqIFRoZSBwYXRoIHRvIGFuIGltYWdlIHRvIGxvYWQgb3IgYW4gYXJyYXkgb2YgcGF0aHMuIFBhdGhzIGNhbiBpbmNsdWRlCiAgICAgKiB3aWxkY2FyZHMgZm9yIGZpbGUgbmFtZXMsIG9yIGNhbiBiZSBVUkxzLgogICAgICogPC9wPgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIFRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZpbGVzID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyBhIE1hZ2lja1BpeGVsSXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRwaXhlbGl0ZXJhdG9yLnBocAogICAgICogQHJldHVybiBJbWFnaWNrUGl4ZWxJdGVyYXRvciBhbiBJbWFnaWNrUGl4ZWxJdGVyYXRvciBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxJdGVyYXRvckV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFBpeGVsSXRlcmF0b3IoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogR2V0IGFuIEltYWdpY2tQaXhlbEl0ZXJhdG9yIGZvciBhbiBpbWFnZSBzZWN0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0cGl4ZWxyZWdpb25pdGVyYXRvci5waHAKICAgICAqIEBwYXJhbSBpbnQgJHggPHA+CiAgICAgKiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSByZWdpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR5IDxwPgogICAgICogVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcmVnaW9uLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkY29sdW1ucyA8cD4KICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgcmVnaW9uLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkcm93cyA8cD4KICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHJlZ2lvbi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gSW1hZ2lja1BpeGVsSXRlcmF0b3IgYW4gSW1hZ2lja1BpeGVsSXRlcmF0b3IgZm9yIGFuIGltYWdlIHNlY3Rpb24uCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tQaXhlbEl0ZXJhdG9yRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGl4ZWxSZWdpb25JdGVyYXRvcigkeCwgJHksICRjb2x1bW5zLCAkcm93cykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMC45LjAtMC45LjkpPGJyLz4KICAgICAqIFJlYWRzIGltYWdlIGZyb20gZmlsZW5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5yZWFkaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gVGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkSW1hZ2UoJGZpbGVuYW1lKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtICRmaWxlbmFtZXMKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBUaHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRJbWFnZXMoJGZpbGVuYW1lcykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJlYWRzIGltYWdlIGZyb20gYSBiaW5hcnkgc3RyaW5nCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sucmVhZGltYWdlYmxvYi5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGltYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBUaHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRJbWFnZUJsb2IoJGltYWdlLCAkZmlsZW5hbWUgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgZm9ybWF0IG9mIGEgcGFydGljdWxhciBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlZm9ybWF0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZm9ybWF0IDxwPgogICAgICogU3RyaW5nIHByZXNlbnRhdGlvbiBvZiB0aGUgaW1hZ2UgZm9ybWF0LiBGb3JtYXQgc3VwcG9ydAogICAgICogZGVwZW5kcyBvbiB0aGUgSW1hZ2VNYWdpY2sgaW5zdGFsbGF0aW9uLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZUZvcm1hdCgkZm9ybWF0KSB7fQoKICAgIC8qKgogICAgICogU2NhbGVzIHRoZSBzaXplIG9mIGFuIGltYWdlIHRvIHRoZSBnaXZlbiBkaW1lbnNpb25zLiBQYXNzaW5nIHplcm8gYXMgZWl0aGVyIG9mIHRoZSBhcmd1bWVudHMgd2lsbCBwcmVzZXJ2ZSBkaW1lbnNpb24gd2hpbGUgc2NhbGluZy48YnI+CiAgICAgKiBJZiBsZWdhY3kgaXMgdHJ1ZSwgdGhlIGNhbGN1bGF0aW9ucyBhcmUgZG9uZSB3aXRoIHRoZSBzbWFsbCByb3VuZGluZyBidWcgdGhhdCBleGlzdGVkIGluIEltYWdpY2sgYmVmb3JlIDMuNC4wLjxicj4KICAgICAqIElmIGZhbHNlLCB0aGUgY2FsY3VsYXRpb25zIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIHJlc3VsdHMgYXMgSW1hZ2VNYWdpY2sgQ0xJIGRvZXMuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2NhbGVpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNvbHVtbnMKICAgICAqIEBwYXJhbSBpbnQgJHJvd3MKICAgICAqIEBwYXJhbSBib29sICRiZXN0Zml0IFtvcHRpb25hbF0gVGhlIGJlaGF2aW9yIG9mIHRoZSBwYXJhbWV0ZXIgYmVzdGZpdCBjaGFuZ2VkIGluIEltYWdpY2sgMy4wLjAuIEJlZm9yZSB0aGlzIHZlcnNpb24gZ2l2ZW4gZGltZW5zaW9ucyA0MDB4NDAwIGFuIGltYWdlIG9mIGRpbWVuc2lvbnMgMjAweDE1MCB3b3VsZCBiZSBsZWZ0IHVudG91Y2hlZC4gSW4gSW1hZ2ljayAzLjAuMCBhbmQgbGF0ZXIgdGhlIGltYWdlIHdvdWxkIGJlIHNjYWxlZCB1cCB0byBzaXplIDQwMHgzMDAgYXMgdGhpcyBpcyB0aGUgImJlc3QgZml0IiBmb3IgdGhlIGdpdmVuIGRpbWVuc2lvbnMuIElmIGJlc3RmaXQgcGFyYW1ldGVyIGlzIHVzZWQgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgZ2l2ZW4uCiAgICAgKiBAcGFyYW0gYm9vbCAkbGVnYWN5IFtvcHRpb25hbF0gQWRkZWQgc2luY2UgMy40LjAuIERlZmF1bHQgdmFsdWUgRkFMU0UKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIFRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yCiAgICAgKiBAc2luY2UgMi4wLjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNjYWxlSW1hZ2UoJGNvbHVtbnMsICRyb3dzLCAkYmVzdGZpdCA9IGZhbHNlLCAkbGVnYWN5ID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDAuOS4wLTAuOS45KTxici8+CiAgICAgKiBXcml0ZXMgYW4gaW1hZ2UgdG8gdGhlIHNwZWNpZmllZCBmaWxlbmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLndyaXRlaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBbb3B0aW9uYWxdIDxwPgogICAgICogRmlsZW5hbWUgd2hlcmUgdG8gd3JpdGUgdGhlIGltYWdlLiBUaGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlbmFtZQogICAgICogZGVmaW5lcyB0aGUgdHlwZSBvZiB0aGUgZmlsZS4KICAgICAqIEZvcm1hdCBjYW4gYmUgZm9yY2VkIHJlZ2FyZGxlc3Mgb2YgZmlsZSBleHRlbnNpb24gdXNpbmcgZm9ybWF0OiBwcmVmaXgsCiAgICAgKiBmb3IgZXhhbXBsZSAianBnOnRlc3QucG5nIi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGVJbWFnZSgkZmlsZW5hbWUgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAwLjkuMC0wLjkuOSk8YnIvPgogICAgICogV3JpdGVzIGFuIGltYWdlIG9yIGltYWdlIHNlcXVlbmNlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sud3JpdGVpbWFnZXMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIGJvb2wgJGFkam9pbgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZUltYWdlcygkZmlsZW5hbWUsICRhZGpvaW4pIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBZGRzIGJsdXIgZmlsdGVyIHRvIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suYmx1cmltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgPHA+CiAgICAgKiBCbHVyIHJhZGl1cwogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRzaWdtYSA8cD4KICAgICAqIFN0YW5kYXJkIGRldmlhdGlvbgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkY2hhbm5lbCBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIENoYW5uZWx0eXBlCiAgICAgKiBjb25zdGFudC4gV2hlbiBub3Qgc3VwcGxpZWQsIGFsbCBjaGFubmVscyBhcmUgYmx1cnJlZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmx1ckltYWdlKCRyYWRpdXMsICRzaWdtYSwgJGNoYW5uZWwgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQ2hhbmdlcyB0aGUgc2l6ZSBvZiBhbiBpbWFnZSB0byB0aGUgZ2l2ZW4gZGltZW5zaW9ucyBhbmQgcmVtb3ZlcyBhbnkgYXNzb2NpYXRlZCBwcm9maWxlcy48YnI+CiAgICAgKiBJZiBsZWdhY3kgaXMgdHJ1ZSwgdGhlIGNhbGN1bGF0aW9ucyBhcmUgZG9uZSB3aXRoIHRoZSBzbWFsbCByb3VuZGluZyBidWcgdGhhdCBleGlzdGVkIGluIEltYWdpY2sgYmVmb3JlIDMuNC4wLjxicj4KICAgICAqIElmIGZhbHNlLCB0aGUgY2FsY3VsYXRpb25zIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIHJlc3VsdHMgYXMgSW1hZ2VNYWdpY2sgQ0xJIGRvZXMuPGJyPgogICAgICogPGJyPgogICAgICogPGI+Tm90ZTo8L2I+IFRoZSBiZWhhdmlvciBvZiB0aGUgcGFyYW1ldGVyIGJlc3RmaXQgY2hhbmdlZCBpbiBJbWFnaWNrIDMuMC4wLiBCZWZvcmUgdGhpcyB2ZXJzaW9uIGdpdmVuIGRpbWVuc2lvbnMgNDAweDQwMCBhbiBpbWFnZSBvZiBkaW1lbnNpb25zIDIwMHgxNTAgd291bGQgYmUgbGVmdCB1bnRvdWNoZWQuIEluIEltYWdpY2sgMy4wLjAgYW5kIGxhdGVyIHRoZSBpbWFnZSB3b3VsZCBiZSBzY2FsZWQgdXAgdG8gc2l6ZSA0MDB4MzAwIGFzIHRoaXMgaXMgdGhlICJiZXN0IGZpdCIgZm9yIHRoZSBnaXZlbiBkaW1lbnNpb25zLiBJZiBiZXN0Zml0IHBhcmFtZXRlciBpcyB1c2VkIGJvdGggd2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIGdpdmVuLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnRodW1ibmFpbGltYWdlLnBocAogICAgICogQHBhcmFtIGludCAkY29sdW1ucyA8cD4KICAgICAqIEltYWdlIHdpZHRoCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRyb3dzIDxwPgogICAgICogSW1hZ2UgaGVpZ2h0CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkYmVzdGZpdCBbb3B0aW9uYWxdIDxwPgogICAgICogV2hldGhlciB0byBmb3JjZSBtYXhpbXVtIHZhbHVlcwogICAgICogPC9wPgogICAgICogVGhlIGJlaGF2aW9yIG9mIHRoZSBwYXJhbWV0ZXIgYmVzdGZpdCBjaGFuZ2VkIGluIEltYWdpY2sgMy4wLjAuIEJlZm9yZSB0aGlzIHZlcnNpb24gZ2l2ZW4gZGltZW5zaW9ucyA0MDB4NDAwIGFuIGltYWdlIG9mIGRpbWVuc2lvbnMgMjAweDE1MCB3b3VsZCBiZSBsZWZ0IHVudG91Y2hlZC4gSW4gSW1hZ2ljayAzLjAuMCBhbmQgbGF0ZXIgdGhlIGltYWdlIHdvdWxkIGJlIHNjYWxlZCB1cCB0byBzaXplIDQwMHgzMDAgYXMgdGhpcyBpcyB0aGUgImJlc3QgZml0IiBmb3IgdGhlIGdpdmVuIGRpbWVuc2lvbnMuIElmIGJlc3RmaXQgcGFyYW1ldGVyIGlzIHVzZWQgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgZ2l2ZW4uCiAgICAgKiBAcGFyYW0gYm9vbCAkZmlsbCBbb3B0aW9uYWxdCiAgICAgKiBAcGFyYW0gYm9vbCAkbGVnYWN5IFtvcHRpb25hbF0gQWRkZWQgc2luY2UgMy40LjAuIERlZmF1bHQgdmFsdWUgRkFMU0UKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHNpbmNlIDIuMC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aHVtYm5haWxJbWFnZSgkY29sdW1ucywgJHJvd3MsICRiZXN0Zml0ID0gZmFsc2UsICRmaWxsID0gZmFsc2UsICRsZWdhY3kgPSBmYWxzZSkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBjcm9wcGVkIHRodW1ibmFpbCBhdCB0aGUgcmVxdWVzdGVkIHNpemUuCiAgICAgKiBJZiBsZWdhY3kgaXMgdHJ1ZSwgdXNlcyB0aGUgaW5jb3JyZWN0IGJlaGF2aW91ciB0aGF0IHdhcyBwcmVzZW50IHVudGlsIEltYWdpY2sgMy40LjAuCiAgICAgKiBJZiBmYWxzZSBpdCB1c2VzIHRoZSBjb3JyZWN0IGJlaGF2aW91ci4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5jcm9wdGh1bWJuYWlsaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gaW50ICR3aWR0aCBUaGUgd2lkdGggb2YgdGhlIHRodW1ibmFpbAogICAgICogQHBhcmFtIGludCAkaGVpZ2h0IFRoZSBIZWlnaHQgb2YgdGhlIHRodW1ibmFpbAogICAgICogQHBhcmFtIGJvb2wgJGxlZ2FjeSBbb3B0aW9uYWxdIEFkZGVkIHNpbmNlIDMuNC4wLiBEZWZhdWx0IHZhbHVlIEZBTFNFCiAgICAgKiBAcmV0dXJuIGJvb2wgVFJVRSBvbiBzdWNjZXMKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBUaHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvcgogICAgICogQHNpbmNlIDIuMC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcm9wVGh1bWJuYWlsSW1hZ2UoJHdpZHRoLCAkaGVpZ2h0LCAkbGVnYWN5ID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBmaWxlbmFtZSBvZiBhIHBhcnRpY3VsYXIgaW1hZ2UgaW4gYSBzZXF1ZW5jZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlZmlsZW5hbWUucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBhIHN0cmluZyB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUgaW1hZ2UuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZUZpbGVuYW1lKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGZpbGVuYW1lIG9mIGEgcGFydGljdWxhciBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlZmlsZW5hbWUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZUZpbGVuYW1lKCRmaWxlbmFtZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGZvcm1hdCBvZiBhIHBhcnRpY3VsYXIgaW1hZ2UgaW4gYSBzZXF1ZW5jZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlZm9ybWF0LnBocAogICAgICogQHJldHVybiBzdHJpbmcgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgaW1hZ2UgZm9ybWF0IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZUZvcm1hdCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlbWltZXR5cGUucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBpbWFnZSBtaW1lLXR5cGUuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZU1pbWVUeXBlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJlbW92ZXMgYW4gaW1hZ2UgZnJvbSB0aGUgaW1hZ2UgbGlzdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnJlbW92ZWltYWdlLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVJbWFnZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBEZXN0cm95cyB0aGUgSW1hZ2ljayBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5kZXN0cm95LnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIiVjbGFzcyUtPmNsZWFyKCkiKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXN0cm95KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENsZWFycyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgdG8gSW1hZ2ljayBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5jbGVhci5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgaW1hZ2UgbGVuZ3RoIGluIGJ5dGVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VzaXplLnBocAogICAgICogQHJldHVybiBpbnQgYW4gaW50IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgaW1hZ2Ugc2l6ZS4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAiJWNsYXNzJS0+Z2V0SW1hZ2VMZW5ndGgoKSIpXQogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlU2l6ZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBpbWFnZSBzZXF1ZW5jZSBhcyBhIGJsb2IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWJsb2IucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBpbWFnZS4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlQmxvYigpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIGFsbCBpbWFnZSBzZXF1ZW5jZXMgYXMgYSBibG9iCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VzYmxvYi5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGltYWdlcy4gT24gZmFpbHVyZSwgdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZmFpbHVyZQogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGZhaWx1cmUKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlc0Jsb2IoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgSW1hZ2ljayBpdGVyYXRvciB0byB0aGUgZmlyc3QgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRmaXJzdGl0ZXJhdG9yLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGaXJzdEl0ZXJhdG9yKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjEpPGJyLz4KICAgICAqIFNldHMgdGhlIEltYWdpY2sgaXRlcmF0b3IgdG8gdGhlIGxhc3QgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRsYXN0aXRlcmF0b3IucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExhc3RJdGVyYXRvcigpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlc2V0SXRlcmF0b3IoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogTW92ZSB0byB0aGUgcHJldmlvdXMgaW1hZ2UgaW4gdGhlIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnByZXZpb3VzaW1hZ2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXZpb3VzSW1hZ2UoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogTW92ZXMgdG8gdGhlIG5leHQgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5uZXh0aW1hZ2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5leHRJbWFnZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDaGVja3MgaWYgdGhlIG9iamVjdCBoYXMgYSBwcmV2aW91cyBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmhhc3ByZXZpb3VzaW1hZ2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlIG9iamVjdCBoYXMgbW9yZSBpbWFnZXMgd2hlbiB0cmF2ZXJzaW5nIHRoZSBsaXN0IGluIHRoZQogICAgICogcmV2ZXJzZSBkaXJlY3Rpb24sIHJldHVybnMgPGI+RkFMU0U8L2I+IGlmIHRoZXJlIGFyZSBub25lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzUHJldmlvdXNJbWFnZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDaGVja3MgaWYgdGhlIG9iamVjdCBoYXMgbW9yZSBpbWFnZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5oYXNuZXh0aW1hZ2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlIG9iamVjdCBoYXMgbW9yZSBpbWFnZXMgd2hlbiB0cmF2ZXJzaW5nIHRoZSBsaXN0IGluIHRoZQogICAgICogZm9yd2FyZCBkaXJlY3Rpb24sIHJldHVybnMgPGI+RkFMU0U8L2I+IGlmIHRoZXJlIGFyZSBub25lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzTmV4dEltYWdlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldCB0aGUgaXRlcmF0b3IgcG9zaXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZWluZGV4LnBocAogICAgICogQHBhcmFtIGludCAkaW5kZXggPHA+CiAgICAgKiBUaGUgcG9zaXRpb24gdG8gc2V0IHRoZSBpdGVyYXRvciB0bwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZUluZGV4KCRpbmRleCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGFjdGl2ZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlaW5kZXgucGhwCiAgICAgKiBAcmV0dXJuIGludCBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGluZGV4IG9mIHRoZSBpbWFnZSBpbiB0aGUgc3RhY2suCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZF0KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZUluZGV4KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEFkZHMgYSBjb21tZW50IHRvIHlvdXIgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5jb21tZW50aW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb21tZW50IDxwPgogICAgICogVGhlIGNvbW1lbnQgdG8gYWRkCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbW1lbnRJbWFnZSgkY29tbWVudCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEV4dHJhY3RzIGEgcmVnaW9uIG9mIHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmNyb3BpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoIDxwPgogICAgICogVGhlIHdpZHRoIG9mIHRoZSBjcm9wCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQgPHA+CiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjcm9wCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR4IDxwPgogICAgICogVGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgY3JvcHBlZCByZWdpb24ncyB0b3AgbGVmdCBjb3JuZXIKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHkgPHA+CiAgICAgKiBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjcm9wcGVkIHJlZ2lvbidzIHRvcCBsZWZ0IGNvcm5lcgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcm9wSW1hZ2UoJHdpZHRoLCAkaGVpZ2h0LCAkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBZGRzIGEgbGFiZWwgdG8gYW4gaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5sYWJlbGltYWdlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbGFiZWwgPHA+CiAgICAgKiBUaGUgbGFiZWwgdG8gYWRkCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxhYmVsSW1hZ2UoJGxhYmVsKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogR2V0cyB0aGUgd2lkdGggYW5kIGhlaWdodCBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlZ2VvbWV0cnkucGhwCiAgICAgKiBAcmV0dXJuIGludFtdIGFuIGFycmF5IHdpdGggdGhlIHdpZHRoL2hlaWdodCBvZiB0aGUgaW1hZ2UuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbQXJyYXlTaGFwZShbIndpZHRoIiA9PiAiaW50IiwgImhlaWdodCIgPT4gImludCJdKV0KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZUdlb21ldHJ5KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJlbmRlcnMgdGhlIEltYWdpY2tEcmF3IG9iamVjdCBvbiB0aGUgY3VycmVudCBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmRyYXdpbWFnZS5waHAKICAgICAqIEBwYXJhbSBJbWFnaWNrRHJhdyAkZHJhdyA8cD4KICAgICAqIFRoZSBkcmF3aW5nIG9wZXJhdGlvbnMgdG8gcmVuZGVyIG9uIHRoZSBpbWFnZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJhd0ltYWdlKEltYWdpY2tEcmF3ICRkcmF3KSB7fQoKICAgIC8qKgogICAgICogKE5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBtaWdodCBvbmx5IGJlIGluIFNWTik8YnIvPgogICAgICogU2V0cyB0aGUgaW1hZ2UgY29tcHJlc3Npb24gcXVhbGl0eQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlY29tcHJlc3Npb25xdWFsaXR5LnBocAogICAgICogQHBhcmFtIGludCAkcXVhbGl0eSA8cD4KICAgICAqIFRoZSBpbWFnZSBjb21wcmVzc2lvbiBxdWFsaXR5IGFzIGFuIGludGVnZXIKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VDb21wcmVzc2lvblF1YWxpdHkoJHF1YWxpdHkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMi4yKTxici8+CiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGltYWdlJ3MgY29tcHJlc3Npb24gcXVhbGl0eQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlY29tcHJlc3Npb25xdWFsaXR5LnBocAogICAgICogQHJldHVybiBpbnQgaW50ZWdlciBkZXNjcmliaW5nIHRoZSBpbWFnZXMgY29tcHJlc3Npb24gcXVhbGl0eQogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VDb21wcmVzc2lvblF1YWxpdHkoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQW5ub3RhdGVzIGFuIGltYWdlIHdpdGggdGV4dAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmFubm90YXRlaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2lja0RyYXcgJGRyYXdfc2V0dGluZ3MgPHA+CiAgICAgKiBUaGUgSW1hZ2lja0RyYXcgb2JqZWN0IHRoYXQgY29udGFpbnMgc2V0dGluZ3MgZm9yIGRyYXdpbmcgdGhlIHRleHQKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeCA8cD4KICAgICAqIEhvcml6b250YWwgb2Zmc2V0IGluIHBpeGVscyB0byB0aGUgbGVmdCBvZiB0ZXh0CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkgPHA+CiAgICAgKiBWZXJ0aWNhbCBvZmZzZXQgaW4gcGl4ZWxzIHRvIHRoZSBiYXNlbGluZSBvZiB0ZXh0CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJGFuZ2xlIDxwPgogICAgICogVGhlIGFuZ2xlIGF0IHdoaWNoIHRvIHdyaXRlIHRoZSB0ZXh0CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZXh0IDxwPgogICAgICogVGhlIHN0cmluZyB0byBkcmF3CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFubm90YXRlSW1hZ2UoSW1hZ2lja0RyYXcgJGRyYXdfc2V0dGluZ3MsICR4LCAkeSwgJGFuZ2xlLCAkdGV4dCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENvbXBvc2l0ZSBvbmUgaW1hZ2Ugb250byBhbm90aGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suY29tcG9zaXRlaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2ljayAkY29tcG9zaXRlX29iamVjdCA8cD4KICAgICAqIEltYWdpY2sgb2JqZWN0IHdoaWNoIGhvbGRzIHRoZSBjb21wb3NpdGUgaW1hZ2UKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNvbXBvc2l0ZSBDb21wb3NpdGUgb3BlcmF0b3IKICAgICAqIEBwYXJhbSBpbnQgJHggPHA+CiAgICAgKiBUaGUgY29sdW1uIG9mZnNldCBvZiB0aGUgY29tcG9zaXRlZCBpbWFnZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkeSA8cD4KICAgICAqIFRoZSByb3cgb2Zmc2V0IG9mIHRoZSBjb21wb3NpdGVkIGltYWdlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0gPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbwogICAgICogYXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBjaGFubmVsLCBjb21iaW5lIGNoYW5uZWx0eXBlIGNvbnN0YW50cyB1c2luZwogICAgICogYml0d2lzZSBvcGVyYXRvcnMuIFJlZmVyIHRvIHRoaXMgbGlzdCBvZiBjaGFubmVsIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcG9zaXRlSW1hZ2UoSW1hZ2ljayAkY29tcG9zaXRlX29iamVjdCwgJGNvbXBvc2l0ZSwgJHgsICR5LCAkY2hhbm5lbCA9IEltYWdpY2s6OkNIQU5ORUxfQUxMKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQ29udHJvbCB0aGUgYnJpZ2h0bmVzcywgc2F0dXJhdGlvbiwgYW5kIGh1ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLm1vZHVsYXRlaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJyaWdodG5lc3MKICAgICAqIEBwYXJhbSBmbG9hdCAkc2F0dXJhdGlvbgogICAgICogQHBhcmFtIGZsb2F0ICRodWUKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kdWxhdGVJbWFnZSgkYnJpZ2h0bmVzcywgJHNhdHVyYXRpb24sICRodWUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgdW5pcXVlIGNvbG9ycyBpbiB0aGUgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWNvbG9ycy5waHAKICAgICAqIEByZXR1cm4gaW50IDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZUNvbG9ycygpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDcmVhdGVzIGEgY29tcG9zaXRlIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2subW9udGFnZWltYWdlLnBocAogICAgICogQHBhcmFtIEltYWdpY2tEcmF3ICRkcmF3IDxwPgogICAgICogVGhlIGZvbnQgbmFtZSwgc2l6ZSwgYW5kIGNvbG9yIGFyZSBvYnRhaW5lZCBmcm9tIHRoaXMgb2JqZWN0LgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkdGlsZV9nZW9tZXRyeSA8cD4KICAgICAqIFRoZSBudW1iZXIgb2YgdGlsZXMgcGVyIHJvdyBhbmQgcGFnZSAoZS5nLiA2eDQrMCswKS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHRodW1ibmFpbF9nZW9tZXRyeSA8cD4KICAgICAqIFByZWZlcnJlZCBpbWFnZSBzaXplIGFuZCBib3JkZXIgc2l6ZSBvZiBlYWNoIHRodW1ibmFpbAogICAgICogKGUuZy4gMTIweDEyMCs0KzMmI3gzRTspLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkbW9kZSA8cD4KICAgICAqIFRodW1ibmFpbCBmcmFtaW5nIG1vZGUsIHNlZSBNb250YWdlIE1vZGUgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkZnJhbWUgPHA+CiAgICAgKiBTdXJyb3VuZCB0aGUgaW1hZ2Ugd2l0aCBhbiBvcm5hbWVudGFsIGJvcmRlciAoZS5nLiAxNXgxNSszKzMpLiBUaGUKICAgICAqIGZyYW1lIGNvbG9yIGlzIHRoYXQgb2YgdGhlIHRodW1ibmFpbCdzIG1hdHRlIGNvbG9yLgogICAgICogPC9wPgogICAgICogQHJldHVybiBJbWFnaWNrIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb250YWdlSW1hZ2UoSW1hZ2lja0RyYXcgJGRyYXcsICR0aWxlX2dlb21ldHJ5LCAkdGh1bWJuYWlsX2dlb21ldHJ5LCAkbW9kZSwgJGZyYW1lKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogSWRlbnRpZmllcyBhbiBpbWFnZSBhbmQgZmV0Y2hlcyBhdHRyaWJ1dGVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suaWRlbnRpZnlpbWFnZS5waHAKICAgICAqIEBwYXJhbSBib29sICRhcHBlbmRSYXdPdXRwdXQgW29wdGlvbmFsXQogICAgICogQHJldHVybiBhcnJheSBJZGVudGlmaWVzIGFuIGltYWdlIGFuZCByZXR1cm5zIHRoZSBhdHRyaWJ1dGVzLiBBdHRyaWJ1dGVzIGluY2x1ZGUKICAgICAqIHRoZSBpbWFnZSB3aWR0aCwgaGVpZ2h0LCBzaXplLCBhbmQgb3RoZXJzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaWRlbnRpZnlJbWFnZSgkYXBwZW5kUmF3T3V0cHV0ID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDaGFuZ2VzIHRoZSB2YWx1ZSBvZiBpbmRpdmlkdWFsIHBpeGVscyBiYXNlZCBvbiBhIHRocmVzaG9sZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnRocmVzaG9sZGltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICR0aHJlc2hvbGQKICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aHJlc2hvbGRJbWFnZSgkdGhyZXNob2xkLCAkY2hhbm5lbCA9IEltYWdpY2s6OkNIQU5ORUxfQUxMKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2VsZWN0cyBhIHRocmVzaG9sZCBmb3IgZWFjaCBwaXhlbCBiYXNlZCBvbiBhIHJhbmdlIG9mIGludGVuc2l0eQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmFkYXB0aXZldGhyZXNob2xkaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gaW50ICR3aWR0aCA8cD4KICAgICAqIFdpZHRoIG9mIHRoZSBsb2NhbCBuZWlnaGJvcmhvb2QuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQgPHA+CiAgICAgKiBIZWlnaHQgb2YgdGhlIGxvY2FsIG5laWdoYm9yaG9vZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldCA8cD4KICAgICAqIFRoZSBtZWFuIG9mZnNldAogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGFwdGl2ZVRocmVzaG9sZEltYWdlKCR3aWR0aCwgJGhlaWdodCwgJG9mZnNldCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEZvcmNlcyBhbGwgcGl4ZWxzIGJlbG93IHRoZSB0aHJlc2hvbGQgaW50byBibGFjawogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmJsYWNrdGhyZXNob2xkaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHRocmVzaG9sZCA8cD4KICAgICAqIFRoZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggZXZlcnl0aGluZyB0dXJucyBibGFjawogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBibGFja1RocmVzaG9sZEltYWdlKCR0aHJlc2hvbGQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBGb3JjZSBhbGwgcGl4ZWxzIGFib3ZlIHRoZSB0aHJlc2hvbGQgaW50byB3aGl0ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLndoaXRldGhyZXNob2xkaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHRocmVzaG9sZAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aGl0ZVRocmVzaG9sZEltYWdlKCR0aHJlc2hvbGQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBcHBlbmQgYSBzZXQgb2YgaW1hZ2VzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suYXBwZW5kaW1hZ2VzLnBocAogICAgICogQHBhcmFtIGJvb2wgJHN0YWNrIFtvcHRpb25hbF0gPHA+CiAgICAgKiBXaGV0aGVyIHRvIHN0YWNrIHRoZSBpbWFnZXMgdmVydGljYWxseS4KICAgICAqIEJ5IGRlZmF1bHQgKG9yIGlmIDxiPkZBTFNFPC9iPiBpcyBzcGVjaWZpZWQpIGltYWdlcyBhcmUgc3RhY2tlZCBsZWZ0LXRvLXJpZ2h0LgogICAgICogSWYgPGk+c3RhY2s8L2k+IGlzIDxiPlRSVUU8L2I+LCBpbWFnZXMgYXJlIHN0YWNrZWQgdG9wLXRvLWJvdHRvbS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gSW1hZ2ljayBJbWFnaWNrIGluc3RhbmNlIG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmRJbWFnZXMoJHN0YWNrID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTaW11bGF0ZXMgYSBjaGFyY29hbCBkcmF3aW5nCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suY2hhcmNvYWxpbWFnZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkcmFkaXVzIDxwPgogICAgICogVGhlIHJhZGl1cyBvZiB0aGUgR2F1c3NpYW4sIGluIHBpeGVscywgbm90IGNvdW50aW5nIHRoZSBjZW50ZXIgcGl4ZWwKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkc2lnbWEgPHA+CiAgICAgKiBUaGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBHYXVzc2lhbiwgaW4gcGl4ZWxzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoYXJjb2FsSW1hZ2UoJHJhZGl1cywgJHNpZ21hKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRW5oYW5jZXMgdGhlIGNvbnRyYXN0IG9mIGEgY29sb3IgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5ub3JtYWxpemVpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXSA8cD4KICAgICAqIFByb3ZpZGUgYW55IGNoYW5uZWwgY29uc3RhbnQgdGhhdCBpcyB2YWxpZCBmb3IgeW91ciBjaGFubmVsIG1vZGUuIFRvCiAgICAgKiBhcHBseSB0byBtb3JlIHRoYW4gb25lIGNoYW5uZWwsIGNvbWJpbmUgY2hhbm5lbHR5cGUgY29uc3RhbnRzIHVzaW5nCiAgICAgKiBiaXR3aXNlIG9wZXJhdG9ycy4gUmVmZXIgdG8gdGhpcwogICAgICogbGlzdCBvZiBjaGFubmVsIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplSW1hZ2UoJGNoYW5uZWwgPSBJbWFnaWNrOjpDSEFOTkVMX0FMTCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNpbXVsYXRlcyBhbiBvaWwgcGFpbnRpbmcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5vaWxwYWludGltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgPHA+CiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBjaXJjdWxhciBuZWlnaGJvcmhvb2QuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9pbFBhaW50SW1hZ2UoJHJhZGl1cykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJlZHVjZXMgdGhlIGltYWdlIHRvIGEgbGltaXRlZCBudW1iZXIgb2YgY29sb3IgbGV2ZWwKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5wb3N0ZXJpemVpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGxldmVscwogICAgICogQHBhcmFtIGJvb2wgJGRpdGhlcgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3N0ZXJpemVJbWFnZSgkbGV2ZWxzLCAkZGl0aGVyKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmFkaWFsIGJsdXJzIGFuIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sucmFkaWFsYmx1cmltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRhbmdsZQogICAgICogQHBhcmFtIGludCAkY2hhbm5lbCBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJhZGlhbEJsdXJJbWFnZSgkYW5nbGUsICRjaGFubmVsID0gSW1hZ2ljazo6Q0hBTk5FTF9BTEwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDcmVhdGVzIGEgc2ltdWxhdGVkIDNkIGJ1dHRvbi1saWtlIGVmZmVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnJhaXNlaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gaW50ICR3aWR0aAogICAgICogQHBhcmFtIGludCAkaGVpZ2h0CiAgICAgKiBAcGFyYW0gaW50ICR4CiAgICAgKiBAcGFyYW0gaW50ICR5CiAgICAgKiBAcGFyYW0gYm9vbCAkcmFpc2UKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmFpc2VJbWFnZSgkd2lkdGgsICRoZWlnaHQsICR4LCAkeSwgJHJhaXNlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmVzYW1wbGUgaW1hZ2UgdG8gZGVzaXJlZCByZXNvbHV0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sucmVzYW1wbGVpbWFnZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeF9yZXNvbHV0aW9uCiAgICAgKiBAcGFyYW0gZmxvYXQgJHlfcmVzb2x1dGlvbgogICAgICogQHBhcmFtIGludCAkZmlsdGVyCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJsdXIKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzYW1wbGVJbWFnZSgkeF9yZXNvbHV0aW9uLCAkeV9yZXNvbHV0aW9uLCAkZmlsdGVyLCAkYmx1cikge30KCiAgICAvKioKICAgICAqIFNjYWxlcyBhbiBpbWFnZSB0byB0aGUgZGVzaXJlZCBkaW1lbnNpb25zIHdpdGggb25lIG9mIHRoZXNlIGZpbHRlcnM6PGJyPgogICAgICogSWYgbGVnYWN5IGlzIHRydWUsIHRoZSBjYWxjdWxhdGlvbnMgYXJlIGRvbmUgd2l0aCB0aGUgc21hbGwgcm91bmRpbmcgYnVnIHRoYXQgZXhpc3RlZCBpbiBJbWFnaWNrIGJlZm9yZSAzLjQuMC48YnI+CiAgICAgKiBJZiBmYWxzZSwgdGhlIGNhbGN1bGF0aW9ucyBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSByZXN1bHRzIGFzIEltYWdlTWFnaWNrIENMSSBkb2VzLjxicj4KICAgICAqIDxicj4KICAgICAqIDxiPk5vdGU6PC9iPiBUaGUgYmVoYXZpb3Igb2YgdGhlIHBhcmFtZXRlciBiZXN0Zml0IGNoYW5nZWQgaW4gSW1hZ2ljayAzLjAuMC4gQmVmb3JlIHRoaXMgdmVyc2lvbiBnaXZlbiBkaW1lbnNpb25zIDQwMHg0MDAgYW4gaW1hZ2Ugb2YgZGltZW5zaW9ucyAyMDB4MTUwIHdvdWxkIGJlIGxlZnQgdW50b3VjaGVkLjxicj4KICAgICAqIEluIEltYWdpY2sgMy4wLjAgYW5kIGxhdGVyIHRoZSBpbWFnZSB3b3VsZCBiZSBzY2FsZWQgdXAgdG8gc2l6ZSA0MDB4MzAwIGFzIHRoaXMgaXMgdGhlICJiZXN0IGZpdCIgZm9yIHRoZSBnaXZlbiBkaW1lbnNpb25zLiBJZiBiZXN0Zml0IHBhcmFtZXRlciBpcyB1c2VkIGJvdGggd2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIGdpdmVuLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnJlc2l6ZWltYWdlLnBocAogICAgICogQHBhcmFtIGludCAkY29sdW1ucyBXaWR0aCBvZiB0aGUgaW1hZ2UKICAgICAqIEBwYXJhbSBpbnQgJHJvd3MgSGVpZ2h0IG9mIHRoZSBpbWFnZQogICAgICogQHBhcmFtIGludCAkZmlsdGVyIFJlZmVyIHRvIHRoZSBsaXN0IG9mIGZpbHRlciBjb25zdGFudHMuCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJsdXIgVGhlIGJsdXIgZmFjdG9yIHdoZXJlID4gMSBpcyBibHVycnksIDwgMSBpcyBzaGFycC4KICAgICAqIEBwYXJhbSBib29sICRiZXN0Zml0IFtvcHRpb25hbF0gQWRkZWQgc2luY2UgMi4xLjAuIEFkZGVkIG9wdGlvbmFsIGZpdCBwYXJhbWV0ZXIuIFRoaXMgbWV0aG9kIG5vdyBzdXBwb3J0cyBwcm9wb3J0aW9uYWwgc2NhbGluZy4gUGFzcyB6ZXJvIGFzIGVpdGhlciBwYXJhbWV0ZXIgZm9yIHByb3BvcnRpb25hbCBzY2FsaW5nCiAgICAgKiBAcGFyYW0gYm9vbCAkbGVnYWN5IFtvcHRpb25hbF0gQWRkZWQgc2luY2UgMy40LjAuIERlZmF1bHQgdmFsdWUgRkFMU0UKICAgICAqIEByZXR1cm4gYm9vbCBUUlVFIG9uIHN1Y2Nlc3MKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEBzaW5jZSAyLjAuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzaXplSW1hZ2UoJGNvbHVtbnMsICRyb3dzLCAkZmlsdGVyLCAkYmx1ciwgJGJlc3RmaXQgPSBmYWxzZSwgJGxlZ2FjeSA9IGZhbHNlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogT2Zmc2V0cyBhbiBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnJvbGxpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJHggPHA+CiAgICAgKiBUaGUgWCBvZmZzZXQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR5IDxwPgogICAgICogVGhlIFkgb2Zmc2V0LgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb2xsSW1hZ2UoJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUm90YXRlcyBhbiBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnJvdGF0ZWltYWdlLnBocAogICAgICogQHBhcmFtIG1peGVkICRiYWNrZ3JvdW5kIDxwPgogICAgICogVGhlIGJhY2tncm91bmQgY29sb3IKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkZGVncmVlcyA8cD4KICAgICAqIFRoZSBudW1iZXIgb2YgZGVncmVlcyB0byByb3RhdGUgdGhlIGltYWdlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJvdGF0ZUltYWdlKCRiYWNrZ3JvdW5kLCAkZGVncmVlcykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNjYWxlcyBhbiBpbWFnZSB3aXRoIHBpeGVsIHNhbXBsaW5nCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2FtcGxlaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gaW50ICRjb2x1bW5zCiAgICAgKiBAcGFyYW0gaW50ICRyb3dzCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhbXBsZUltYWdlKCRjb2x1bW5zLCAkcm93cykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEFwcGxpZXMgYSBzb2xhcml6aW5nIGVmZmVjdCB0byB0aGUgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zb2xhcml6ZWltYWdlLnBocAogICAgICogQHBhcmFtIGludCAkdGhyZXNob2xkCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNvbGFyaXplSW1hZ2UoJHRocmVzaG9sZCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNpbXVsYXRlcyBhbiBpbWFnZSBzaGFkb3cKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zaGFkb3dpbWFnZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkb3BhY2l0eQogICAgICogQHBhcmFtIGZsb2F0ICRzaWdtYQogICAgICogQHBhcmFtIGludCAkeAogICAgICogQHBhcmFtIGludCAkeQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaGFkb3dJbWFnZSgkb3BhY2l0eSwgJHNpZ21hLCAkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tEZXByZWNhdGVkXQogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlQXR0cmlidXRlKCRrZXksICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIGJhY2tncm91bmQgY29sb3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZWJhY2tncm91bmRjb2xvci5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkYmFja2dyb3VuZAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZUJhY2tncm91bmRDb2xvcigkYmFja2dyb3VuZCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIGNvbXBvc2l0ZSBvcGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlY29tcG9zZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNvbXBvc2UKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VDb21wb3NlKCRjb21wb3NlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgaW1hZ2UgY29tcHJlc3Npb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZWNvbXByZXNzaW9uLnBocAogICAgICogQHBhcmFtIGludCAkY29tcHJlc3Npb24gPHA+CiAgICAgKiBPbmUgb2YgdGhlIDxiPkNPTVBSRVNTSU9OPC9iPiBjb25zdGFudHMKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VDb21wcmVzc2lvbigkY29tcHJlc3Npb24pIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbWFnZSBkZWxheQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlZGVsYXkucGhwCiAgICAgKiBAcGFyYW0gaW50ICRkZWxheSA8cD4KICAgICAqIFRoZSBhbW91bnQgb2YgdGltZSBleHByZXNzZWQgaW4gJ3RpY2tzJyB0aGF0IHRoZSBpbWFnZSBzaG91bGQgYmUKICAgICAqIGRpc3BsYXllZCBmb3IuIEZvciBhbmltYXRlZCBHSUZzIHRoZXJlIGFyZSAxMDAgdGlja3MgcGVyIHNlY29uZCwgc28gYQogICAgICogdmFsdWUgb2YgMjAgd291bGQgYmUgMjAvMTAwIG9mIGEgc2Vjb25kIGFrYSAxLzV0aCBvZiBhIHNlY29uZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VEZWxheSgkZGVsYXkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbWFnZSBkZXB0aAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlZGVwdGgucGhwCiAgICAgKiBAcGFyYW0gaW50ICRkZXB0aAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZURlcHRoKCRkZXB0aCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIGdhbW1hCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0aW1hZ2VnYW1tYS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkZ2FtbWEKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VHYW1tYSgkZ2FtbWEpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbWFnZSBpdGVyYXRpb25zCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0aW1hZ2VpdGVyYXRpb25zLnBocAogICAgICogQHBhcmFtIGludCAkaXRlcmF0aW9ucyA8cD4KICAgICAqIFRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyB0aGUgaW1hZ2Ugc2hvdWxkIGxvb3Agb3Zlci4gU2V0IHRvICcwJyB0byBsb29wCiAgICAgKiBjb250aW51b3VzbHkuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlSXRlcmF0aW9ucygkaXRlcmF0aW9ucykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIG1hdHRlIGNvbG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0aW1hZ2VtYXR0ZWNvbG9yLnBocAogICAgICogQHBhcmFtIG1peGVkICRtYXR0ZQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZU1hdHRlQ29sb3IoJG1hdHRlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgcGFnZSBnZW9tZXRyeSBvZiB0aGUgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZXBhZ2UucGhwCiAgICAgKiBAcGFyYW0gaW50ICR3aWR0aAogICAgICogQHBhcmFtIGludCAkaGVpZ2h0CiAgICAgKiBAcGFyYW0gaW50ICR4CiAgICAgKiBAcGFyYW0gaW50ICR5CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlUGFnZSgkd2lkdGgsICRoZWlnaHQsICR4LCAkeSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSAkZmlsZW5hbWUKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlUHJvZ3Jlc3NNb25pdG9yKCRmaWxlbmFtZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIHJlc29sdXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZXJlc29sdXRpb24ucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHhfcmVzb2x1dGlvbgogICAgICogQHBhcmFtIGZsb2F0ICR5X3Jlc29sdXRpb24KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VSZXNvbHV0aW9uKCR4X3Jlc29sdXRpb24sICR5X3Jlc29sdXRpb24pIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbWFnZSBzY2VuZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlc2NlbmUucGhwCiAgICAgKiBAcGFyYW0gaW50ICRzY2VuZQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZVNjZW5lKCRzY2VuZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIHRpY2tzLXBlci1zZWNvbmQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZXRpY2tzcGVyc2Vjb25kLnBocAogICAgICogQHBhcmFtIGludCAkdGlja3NfcGVyX3NlY29uZCA8cD4KICAgICAqIFRoZSBkdXJhdGlvbiBmb3Igd2hpY2ggYW4gaW1hZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZCBleHByZXNzZWQgaW4gdGlja3MKICAgICAqIHBlciBzZWNvbmQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlVGlja3NQZXJTZWNvbmQoJHRpY2tzX3Blcl9zZWNvbmQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbWFnZSB0eXBlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0aW1hZ2V0eXBlLnBocAogICAgICogQHBhcmFtIGludCAkaW1hZ2VfdHlwZQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZVR5cGUoJGltYWdlX3R5cGUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbWFnZSB1bml0cyBvZiByZXNvbHV0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0aW1hZ2V1bml0cy5waHAKICAgICAqIEBwYXJhbSBpbnQgJHVuaXRzCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlVW5pdHMoJHVuaXRzKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2hhcnBlbnMgYW4gaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zaGFycGVuaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJhZGl1cwogICAgICogQHBhcmFtIGZsb2F0ICRzaWdtYQogICAgICogQHBhcmFtIGludCAkY2hhbm5lbCBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNoYXJwZW5JbWFnZSgkcmFkaXVzLCAkc2lnbWEsICRjaGFubmVsID0gSW1hZ2ljazo6Q0hBTk5FTF9BTEwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTaGF2ZXMgcGl4ZWxzIGZyb20gdGhlIGltYWdlIGVkZ2VzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2hhdmVpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNvbHVtbnMKICAgICAqIEBwYXJhbSBpbnQgJHJvd3MKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hhdmVJbWFnZSgkY29sdW1ucywgJHJvd3MpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDcmVhdGluZyBhIHBhcmFsbGVsb2dyYW0KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zaGVhcmltYWdlLnBocAogICAgICogQHBhcmFtIG1peGVkICRiYWNrZ3JvdW5kIDxwPgogICAgICogVGhlIGJhY2tncm91bmQgY29sb3IKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeF9zaGVhciA8cD4KICAgICAqIFRoZSBudW1iZXIgb2YgZGVncmVlcyB0byBzaGVhciBvbiB0aGUgeCBheGlzCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHlfc2hlYXIgPHA+CiAgICAgKiBUaGUgbnVtYmVyIG9mIGRlZ3JlZXMgdG8gc2hlYXIgb24gdGhlIHkgYXhpcwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaGVhckltYWdlKCRiYWNrZ3JvdW5kLCAkeF9zaGVhciwgJHlfc2hlYXIpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTcGxpY2VzIGEgc29saWQgY29sb3IgaW50byB0aGUgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zcGxpY2VpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoCiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQKICAgICAqIEBwYXJhbSBpbnQgJHgKICAgICAqIEBwYXJhbSBpbnQgJHkKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3BsaWNlSW1hZ2UoJHdpZHRoLCAkaGVpZ2h0LCAkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBGZXRjaCBiYXNpYyBhdHRyaWJ1dGVzIGFib3V0IHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnBpbmdpbWFnZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIDxwPgogICAgICogVGhlIGZpbGVuYW1lIHRvIHJlYWQgdGhlIGluZm9ybWF0aW9uIGZyb20uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBpbmdJbWFnZSgkZmlsZW5hbWUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZWFkcyBpbWFnZSBmcm9tIG9wZW4gZmlsZWhhbmRsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnJlYWRpbWFnZWZpbGUucGhwCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJGZpbGVoYW5kbGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZEltYWdlRmlsZSgkZmlsZWhhbmRsZSwgJGZpbGVOYW1lID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERpc3BsYXlzIGFuIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZGlzcGxheWltYWdlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc2VydmVybmFtZSA8cD4KICAgICAqIFRoZSBYIHNlcnZlciBuYW1lCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc3BsYXlJbWFnZSgkc2VydmVybmFtZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERpc3BsYXlzIGFuIGltYWdlIG9yIGltYWdlIHNlcXVlbmNlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZGlzcGxheWltYWdlcy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcm5hbWUgPHA+CiAgICAgKiBUaGUgWCBzZXJ2ZXIgbmFtZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwbGF5SW1hZ2VzKCRzZXJ2ZXJuYW1lKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmFuZG9tbHkgZGlzcGxhY2VzIGVhY2ggcGl4ZWwgaW4gYSBibG9jawogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNwcmVhZGltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3ByZWFkSW1hZ2UoJHJhZGl1cykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFN3aXJscyB0aGUgcGl4ZWxzIGFib3V0IHRoZSBjZW50ZXIgb2YgdGhlIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc3dpcmxpbWFnZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkZGVncmVlcwogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzd2lybEltYWdlKCRkZWdyZWVzKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU3RyaXBzIGFuIGltYWdlIG9mIGFsbCBwcm9maWxlcyBhbmQgY29tbWVudHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zdHJpcGltYWdlLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJpcEltYWdlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgSW1hZ2ljawogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnF1ZXJ5Zm9ybWF0cy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gW29wdGlvbmFsXQogICAgICogQHJldHVybiBhcnJheSBhbiBhcnJheSBjb250YWluaW5nIHRoZSBmb3JtYXRzIHN1cHBvcnRlZCBieSBJbWFnaWNrLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHF1ZXJ5Rm9ybWF0cygkcGF0dGVybiA9ICIqIikge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyZWQgZm9udHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5xdWVyeWZvbnRzLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIHF1ZXJ5IHBhdHRlcm4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYXJyYXkgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29uZmlndXJlZCBmb250cy4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBxdWVyeUZvbnRzKCRwYXR0ZXJuID0gIioiKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyBhbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIGZvbnQgbWV0cmljcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnF1ZXJ5Zm9udG1ldHJpY3MucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2lja0RyYXcgJHByb3BlcnRpZXMgPHA+CiAgICAgKiBJbWFnaWNrRHJhdyBvYmplY3QgY29udGFpbmluZyBmb250IHByb3BlcnRpZXMKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHRleHQgPHA+CiAgICAgKiBUaGUgdGV4dAogICAgICogPC9wPgogICAgICogQHBhcmFtIGJvb2wgJG11bHRpbGluZSBbb3B0aW9uYWxdIDxwPgogICAgICogTXVsdGlsaW5lIHBhcmFtZXRlci4gSWYgbGVmdCBlbXB0eSBpdCBpcyBhdXRvZGV0ZWN0ZWQKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYXJyYXkgYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSByZXByZXNlbnRpbmcgdGhlIGZvbnQgbWV0cmljcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHF1ZXJ5Rm9udE1ldHJpY3MoSW1hZ2lja0RyYXcgJHByb3BlcnRpZXMsICR0ZXh0LCAkbXVsdGlsaW5lID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEhpZGVzIGEgZGlnaXRhbCB3YXRlcm1hcmsgd2l0aGluIHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnN0ZWdhbm9pbWFnZS5waHAKICAgICAqIEBwYXJhbSBJbWFnaWNrICR3YXRlcm1hcmtfd2FuZAogICAgICogQHBhcmFtIGludCAkb2Zmc2V0CiAgICAgKiBAcmV0dXJuIEltYWdpY2sgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0ZWdhbm9JbWFnZShJbWFnaWNrICR3YXRlcm1hcmtfd2FuZCwgJG9mZnNldCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEFkZHMgcmFuZG9tIG5vaXNlIHRvIHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmFkZG5vaXNlaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gaW50ICRub2lzZV90eXBlIDxwPgogICAgICogVGhlIHR5cGUgb2YgdGhlIG5vaXNlLiBSZWZlciB0byB0aGlzIGxpc3Qgb2YKICAgICAqIG5vaXNlIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXSA8cD4KICAgICAqIFByb3ZpZGUgYW55IGNoYW5uZWwgY29uc3RhbnQgdGhhdCBpcyB2YWxpZCBmb3IgeW91ciBjaGFubmVsIG1vZGUuIFRvIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsIGNvbnN0YW50cyB1c2luZyBiaXR3aXNlIG9wZXJhdG9ycy4gRGVmYXVsdHMgdG8gPGI+SW1hZ2ljazo6Q0hBTk5FTF9ERUZBVUxUPC9iPi4gUmVmZXIgdG8gdGhpcyBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZE5vaXNlSW1hZ2UoJG5vaXNlX3R5cGUsICRjaGFubmVsID0gSW1hZ2ljazo6Q0hBTk5FTF9ERUZBVUxUKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2ltdWxhdGVzIG1vdGlvbiBibHVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2subW90aW9uYmx1cmltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgPHA+CiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBHYXVzc2lhbiwgaW4gcGl4ZWxzLCBub3QgY291bnRpbmcgdGhlIGNlbnRlciBwaXhlbC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkc2lnbWEgPHA+CiAgICAgKiBUaGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBHYXVzc2lhbiwgaW4gcGl4ZWxzLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRhbmdsZSA8cD4KICAgICAqIEFwcGx5IHRoZSBlZmZlY3QgYWxvbmcgdGhpcyBhbmdsZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXSA8cD4KICAgICAqIFByb3ZpZGUgYW55IGNoYW5uZWwgY29uc3RhbnQgdGhhdCBpcyB2YWxpZCBmb3IgeW91ciBjaGFubmVsIG1vZGUuIFRvCiAgICAgKiBhcHBseSB0byBtb3JlIHRoYW4gb25lIGNoYW5uZWwsIGNvbWJpbmUgY2hhbm5lbHR5cGUgY29uc3RhbnRzIHVzaW5nCiAgICAgKiBiaXR3aXNlIG9wZXJhdG9ycy4gUmVmZXIgdG8gdGhpcwogICAgICogbGlzdCBvZiBjaGFubmVsIGNvbnN0YW50cy4KICAgICAqIFRoZSBjaGFubmVsIGFyZ3VtZW50IGFmZmVjdHMgb25seSBpZiBJbWFnaWNrIGlzIGNvbXBpbGVkIGFnYWluc3QgSW1hZ2VNYWdpY2sgdmVyc2lvbgogICAgICogNi40LjQgb3IgZ3JlYXRlci4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW90aW9uQmx1ckltYWdlKCRyYWRpdXMsICRzaWdtYSwgJGFuZ2xlLCAkY2hhbm5lbCA9IEltYWdpY2s6OkNIQU5ORUxfREVGQVVMVCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEZvcm1zIGEgbW9zYWljIGZyb20gaW1hZ2VzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2subW9zYWljaW1hZ2VzLnBocAogICAgICogQHJldHVybiBJbWFnaWNrIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBtb3NhaWNJbWFnZXMoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogTWV0aG9kIG1vcnBocyBhIHNldCBvZiBpbWFnZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5tb3JwaGltYWdlcy5waHAKICAgICAqIEBwYXJhbSBpbnQgJG51bWJlcl9mcmFtZXMgPHA+CiAgICAgKiBUaGUgbnVtYmVyIG9mIGluLWJldHdlZW4gaW1hZ2VzIHRvIGdlbmVyYXRlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBJbWFnaWNrIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgSW1hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqIFRocm93IGFuIDxiPkltYWdpY2tFeGNlcHRpb248L2I+IG9uIGVycm9yLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb3JwaEltYWdlcygkbnVtYmVyX2ZyYW1lcykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNjYWxlcyBhbiBpbWFnZSBwcm9wb3J0aW9uYWxseSB0byBoYWxmIGl0cyBzaXplCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2subWluaWZ5aW1hZ2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1pbmlmeUltYWdlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFRyYW5zZm9ybXMgYW4gaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5hZmZpbmV0cmFuc2Zvcm1pbWFnZS5waHAKICAgICAqIEBwYXJhbSBJbWFnaWNrRHJhdyAkbWF0cml4IDxwPgogICAgICogVGhlIGFmZmluZSBtYXRyaXgKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWZmaW5lVHJhbnNmb3JtSW1hZ2UoSW1hZ2lja0RyYXcgJG1hdHJpeCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEF2ZXJhZ2UgYSBzZXQgb2YgaW1hZ2VzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suYXZlcmFnZWltYWdlcy5waHAKICAgICAqIEByZXR1cm4gSW1hZ2ljayBhIG5ldyBJbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW0RlcHJlY2F0ZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gYXZlcmFnZUltYWdlcygpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTdXJyb3VuZHMgdGhlIGltYWdlIHdpdGggYSBib3JkZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5ib3JkZXJpbWFnZS5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkYm9yZGVyY29sb3IgPHA+CiAgICAgKiBJbWFnaWNrUGl4ZWwgb2JqZWN0IG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJvcmRlciBjb2xvcgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkd2lkdGggPHA+CiAgICAgKiBCb3JkZXIgd2lkdGgKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGhlaWdodCA8cD4KICAgICAqIEJvcmRlciBoZWlnaHQKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9yZGVySW1hZ2UoJGJvcmRlcmNvbG9yLCAkd2lkdGgsICRoZWlnaHQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZW1vdmVzIGEgcmVnaW9uIG9mIGFuIGltYWdlIGFuZCB0cmltcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmNob3BpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoIDxwPgogICAgICogV2lkdGggb2YgdGhlIGNob3BwZWQgYXJlYQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkaGVpZ2h0IDxwPgogICAgICogSGVpZ2h0IG9mIHRoZSBjaG9wcGVkIGFyZWEKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHggPHA+CiAgICAgKiBYIG9yaWdvIG9mIHRoZSBjaG9wcGVkIGFyZWEKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHkgPHA+CiAgICAgKiBZIG9yaWdvIG9mIHRoZSBjaG9wcGVkIGFyZWEKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hvcEltYWdlKCR3aWR0aCwgJGhlaWdodCwgJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQ2xpcHMgYWxvbmcgdGhlIGZpcnN0IHBhdGggZnJvbSB0aGUgOEJJTSBwcm9maWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suY2xpcGltYWdlLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGlwSW1hZ2UoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQ2xpcHMgYWxvbmcgdGhlIG5hbWVkIHBhdGhzIGZyb20gdGhlIDhCSU0gcHJvZmlsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmNsaXBwYXRoaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRobmFtZSA8cD4KICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwYXRoCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkaW5zaWRlIDxwPgogICAgICogSWYgPGI+VFJVRTwvYj4gbGF0ZXIgb3BlcmF0aW9ucyB0YWtlIGVmZmVjdCBpbnNpZGUgY2xpcHBpbmcgcGF0aC4KICAgICAqIE90aGVyd2lzZSBsYXRlciBvcGVyYXRpb25zIHRha2UgZWZmZWN0IG91dHNpZGUgY2xpcHBpbmcgcGF0aC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xpcFBhdGhJbWFnZSgkcGF0aG5hbWUsICRpbnNpZGUpIHt9CgogICAgLyoqCiAgICAgKiBBbGlhcyB0byB7QHNlZSBJbWFnaWNrOjpjbGlwUGF0aEltYWdlfQogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGluc2lkZQogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xpcEltYWdlUGF0aCgkcGF0aG5hbWUsICRpbnNpZGUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDb21wb3NpdGVzIGEgc2V0IG9mIGltYWdlcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmNvYWxlc2NlaW1hZ2VzLnBocAogICAgICogQHJldHVybiBJbWFnaWNrIGEgbmV3IEltYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb2FsZXNjZUltYWdlcygpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDaGFuZ2VzIHRoZSBjb2xvciB2YWx1ZSBvZiBhbnkgcGl4ZWwgdGhhdCBtYXRjaGVzIHRhcmdldAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmNvbG9yZmxvb2RmaWxsaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGZpbGwgPHA+CiAgICAgKiBJbWFnaWNrUGl4ZWwgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbGwgY29sb3IKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkZnV6eiA8cD4KICAgICAqIFRoZSBhbW91bnQgb2YgZnV6ei4gRm9yIGV4YW1wbGUsIHNldCBmdXp6IHRvIDEwIGFuZCB0aGUgY29sb3IgcmVkIGF0CiAgICAgKiBpbnRlbnNpdGllcyBvZiAxMDAgYW5kIDEwMiByZXNwZWN0aXZlbHkgYXJlIG5vdyBpbnRlcnByZXRlZCBhcyB0aGUKICAgICAqIHNhbWUgY29sb3IgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgZmxvb2RmaWxsLgogICAgICogPC9wPgogICAgICogQHBhcmFtIG1peGVkICRib3JkZXJjb2xvciA8cD4KICAgICAqIEltYWdpY2tQaXhlbCBvYmplY3QgY29udGFpbmluZyB0aGUgYm9yZGVyIGNvbG9yCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR4IDxwPgogICAgICogWCBzdGFydCBwb3NpdGlvbiBvZiB0aGUgZmxvb2RmaWxsCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR5IDxwPgogICAgICogWSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgZmxvb2RmaWxsCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tEZXByZWNhdGVkXQogICAgcHVibGljIGZ1bmN0aW9uIGNvbG9yRmxvb2RmaWxsSW1hZ2UoJGZpbGwsICRmdXp6LCAkYm9yZGVyY29sb3IsICR4LCAkeSkge30KCiAgICAvKioKICAgICAqIEJsZW5kcyB0aGUgZmlsbCBjb2xvciB3aXRoIGVhY2ggcGl4ZWwgaW4gdGhlIGltYWdlLiBUaGUgJ29wYWNpdHknIGNvbG9yIGlzIGEgcGVyIGNoYW5uZWwgc3RyZW5ndGggZmFjdG9yIGZvciBob3cgc3Ryb25nbHkgdGhlIGNvbG9yIHNob3VsZCBiZSBhcHBsaWVkLjxicj4KICAgICAqIElmIGxlZ2FjeSBpcyB0cnVlLCB0aGUgYmVoYXZpb3VyIG9mIHRoaXMgZnVuY3Rpb24gaXMgaW5jb3JyZWN0LCBidXQgY29uc2lzdGVudCB3aXRoIGhvdyBpdCBiZWhhdmVkIGJlZm9yZSBJbWFnaWNrIHZlcnNpb24gMy40LjAKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5jb2xvcml6ZWltYWdlLnBocAogICAgICogQHBhcmFtIG1peGVkICRjb2xvcml6ZSA8cD4KICAgICAqIEltYWdpY2tQaXhlbCBvYmplY3Qgb3IgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29sb3JpemUgY29sb3IKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBtaXhlZCAkb3BhY2l0eSA8cD4KICAgICAqIEltYWdpY2tQaXhlbCBvYmplY3Qgb3IgYW4gZmxvYXQgY29udGFpbmluZyB0aGUgb3BhY2l0eSB2YWx1ZS4KICAgICAqIDEuMCBpcyBmdWxseSBvcGFxdWUgYW5kIDAuMCBpcyBmdWxseSB0cmFuc3BhcmVudC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBib29sICRsZWdhY3kgW29wdGlvbmFsXSBBZGRlZCBzaW5jZSAzLjQuMC4gRGVmYXVsdCB2YWx1ZSBGQUxTRQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gVGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IKICAgICAqIEBzaW5jZSAyLjAuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29sb3JpemVJbWFnZSgkY29sb3JpemUsICRvcGFjaXR5LCAkbGVnYWN5ID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGluIG9uZSBvciBtb3JlIGltYWdlcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmNvbXBhcmVpbWFnZWNoYW5uZWxzLnBocAogICAgICogQHBhcmFtIEltYWdpY2sgJGltYWdlIDxwPgogICAgICogSW1hZ2ljayBvYmplY3QgY29udGFpbmluZyB0aGUgaW1hZ2UgdG8gY29tcGFyZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWxUeXBlIDxwPgogICAgICogUHJvdmlkZSBhbnkgY2hhbm5lbCBjb25zdGFudCB0aGF0IGlzIHZhbGlkIGZvciB5b3VyIGNoYW5uZWwgbW9kZS4gVG8KICAgICAqIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsdHlwZSBjb25zdGFudHMgdXNpbmcKICAgICAqIGJpdHdpc2Ugb3BlcmF0b3JzLiBSZWZlciB0byB0aGlzCiAgICAgKiBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkbWV0cmljVHlwZSA8cD4KICAgICAqIE9uZSBvZiB0aGUgbWV0cmljIHR5cGUgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBhcnJheSBBcnJheSBjb25zaXN0aW5nIG9mIG5ld193YW5kIGFuZAogICAgICogZGlzdG9ydGlvbi4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBhcmVJbWFnZUNoYW5uZWxzKEltYWdpY2sgJGltYWdlLCAkY2hhbm5lbFR5cGUsICRtZXRyaWNUeXBlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQ29tcGFyZXMgYW4gaW1hZ2UgdG8gYSByZWNvbnN0cnVjdGVkIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suY29tcGFyZWltYWdlcy5waHAKICAgICAqIEBwYXJhbSBJbWFnaWNrICRjb21wYXJlIDxwPgogICAgICogQW4gaW1hZ2UgdG8gY29tcGFyZSB0by4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJG1ldHJpYyA8cD4KICAgICAqIFByb3ZpZGUgYSB2YWxpZCBtZXRyaWMgdHlwZSBjb25zdGFudC4gUmVmZXIgdG8gdGhpcwogICAgICogbGlzdCBvZiBtZXRyaWMgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBhcnJheSBBcnJheSBjb25zaXN0aW5nIG9mIGFuIEltYWdpY2sgb2JqZWN0IG9mIHRoZQogICAgICogcmVjb25zdHJ1Y3RlZCBpbWFnZSBhbmQgYSBmbG9hdCByZXByZXNlbnRpbmcgdGhlIGRpZmZlcmVuY2UuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gVGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYXJlSW1hZ2VzKEltYWdpY2sgJGNvbXBhcmUsICRtZXRyaWMpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDaGFuZ2UgdGhlIGNvbnRyYXN0IG9mIHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmNvbnRyYXN0aW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gYm9vbCAkc2hhcnBlbiA8cD4KICAgICAqIFRoZSBzaGFycGVuIHZhbHVlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnRyYXN0SW1hZ2UoJHNoYXJwZW4pIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDb21iaW5lcyBvbmUgb3IgbW9yZSBpbWFnZXMgaW50byBhIHNpbmdsZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmNvbWJpbmVpbWFnZXMucGhwCiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsVHlwZSA8cD4KICAgICAqIFByb3ZpZGUgYW55IGNoYW5uZWwgY29uc3RhbnQgdGhhdCBpcyB2YWxpZCBmb3IgeW91ciBjaGFubmVsIG1vZGUuIFRvCiAgICAgKiBhcHBseSB0byBtb3JlIHRoYW4gb25lIGNoYW5uZWwsIGNvbWJpbmUgY2hhbm5lbHR5cGUgY29uc3RhbnRzIHVzaW5nCiAgICAgKiBiaXR3aXNlIG9wZXJhdG9ycy4gUmVmZXIgdG8gdGhpcwogICAgICogbGlzdCBvZiBjaGFubmVsIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gSW1hZ2ljayA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tYmluZUltYWdlcygkY2hhbm5lbFR5cGUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBcHBsaWVzIGEgY3VzdG9tIGNvbnZvbHV0aW9uIGtlcm5lbCB0byB0aGUgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5jb252b2x2ZWltYWdlLnBocAogICAgICogQHBhcmFtIGFycmF5ICRrZXJuZWwgPHA+CiAgICAgKiBUaGUgY29udm9sdXRpb24ga2VybmVsCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0gPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbwogICAgICogYXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBjaGFubmVsLCBjb21iaW5lIGNoYW5uZWx0eXBlIGNvbnN0YW50cyB1c2luZwogICAgICogYml0d2lzZSBvcGVyYXRvcnMuIFJlZmVyIHRvIHRoaXMKICAgICAqIGxpc3Qgb2YgY2hhbm5lbCBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnZvbHZlSW1hZ2UoYXJyYXkgJGtlcm5lbCwgJGNoYW5uZWwgPSBJbWFnaWNrOjpDSEFOTkVMX0FMTCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERpc3BsYWNlcyBhbiBpbWFnZSdzIGNvbG9ybWFwCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suY3ljbGVjb2xvcm1hcGltYWdlLnBocAogICAgICogQHBhcmFtIGludCAkZGlzcGxhY2UgPHA+CiAgICAgKiBUaGUgYW1vdW50IHRvIGRpc3BsYWNlIHRoZSBjb2xvcm1hcC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3ljbGVDb2xvcm1hcEltYWdlKCRkaXNwbGFjZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgY2VydGFpbiBwaXhlbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGltYWdlcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmRlY29uc3RydWN0aW1hZ2VzLnBocAogICAgICogQHJldHVybiBJbWFnaWNrIGEgbmV3IEltYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvbnN0cnVjdEltYWdlcygpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZWR1Y2VzIHRoZSBzcGVja2xlIG5vaXNlIGluIGFuIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZGVzcGVja2xlaW1hZ2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlc3BlY2tsZUltYWdlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEVuaGFuY2UgZWRnZXMgd2l0aGluIHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmVkZ2VpbWFnZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkcmFkaXVzIDxwPgogICAgICogVGhlIHJhZGl1cyBvZiB0aGUgb3BlcmF0aW9uLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlZGdlSW1hZ2UoJHJhZGl1cykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgYSBncmF5c2NhbGUgaW1hZ2Ugd2l0aCBhIHRocmVlLWRpbWVuc2lvbmFsIGVmZmVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmVtYm9zc2ltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgPHA+CiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBlZmZlY3QKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkc2lnbWEgPHA+CiAgICAgKiBUaGUgc2lnbWEgb2YgdGhlIGVmZmVjdAogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbWJvc3NJbWFnZSgkcmFkaXVzLCAkc2lnbWEpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBJbXByb3ZlcyB0aGUgcXVhbGl0eSBvZiBhIG5vaXN5IGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZW5oYW5jZWltYWdlLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmhhbmNlSW1hZ2UoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRXF1YWxpemVzIHRoZSBpbWFnZSBoaXN0b2dyYW0KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5lcXVhbGl6ZWltYWdlLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlcXVhbGl6ZUltYWdlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEFwcGxpZXMgYW4gZXhwcmVzc2lvbiB0byBhbiBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmV2YWx1YXRlaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gaW50ICRvcCA8cD4KICAgICAqIFRoZSBldmFsdWF0aW9uIG9wZXJhdG9yCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJGNvbnN0YW50IDxwPgogICAgICogVGhlIHZhbHVlIG9mIHRoZSBvcGVyYXRvcgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkY2hhbm5lbCBbb3B0aW9uYWxdIDxwPgogICAgICogUHJvdmlkZSBhbnkgY2hhbm5lbCBjb25zdGFudCB0aGF0IGlzIHZhbGlkIGZvciB5b3VyIGNoYW5uZWwgbW9kZS4gVG8KICAgICAqIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsdHlwZSBjb25zdGFudHMgdXNpbmcKICAgICAqIGJpdHdpc2Ugb3BlcmF0b3JzLiBSZWZlciB0byB0aGlzCiAgICAgKiBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBldmFsdWF0ZUltYWdlKCRvcCwgJGNvbnN0YW50LCAkY2hhbm5lbCA9IEltYWdpY2s6OkNIQU5ORUxfQUxMKSB7fQoKICAgIC8qKgogICAgICogTWVyZ2VzIGEgc2VxdWVuY2Ugb2YgaW1hZ2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY29tYmluaW5nIFBob3Rvc2hvcCBsYXllcnMgaW50byBhIHNpbmdsZSBpbWFnZS4KICAgICAqIFRoaXMgaXMgcmVwbGFjZWQgYnk6CiAgICAgKiA8cHJlPgogICAgICogJGltID0gJGltLT5tZXJnZUltYWdlTGF5ZXJzKFxJbWFnaWNrOjpMQVlFUk1FVEhPRF9GTEFUVEVOKQogICAgICogPC9wcmU+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZmxhdHRlbmltYWdlcy5waHAKICAgICAqIEByZXR1cm4gSW1hZ2ljayBSZXR1cm5zIGFuIEltYWdpY2sgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG1lcmdlZCBpbWFnZS4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBUaHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEBzaW5jZSAyLjAuMAogICAgICovCiAgICAjW0RlcHJlY2F0ZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZmxhdHRlbkltYWdlcygpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDcmVhdGVzIGEgdmVydGljYWwgbWlycm9yIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZmxpcGltYWdlLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmbGlwSW1hZ2UoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQ3JlYXRlcyBhIGhvcml6b250YWwgbWlycm9yIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZmxvcGltYWdlLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmbG9wSW1hZ2UoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQWRkcyBhIHNpbXVsYXRlZCB0aHJlZS1kaW1lbnNpb25hbCBib3JkZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5mcmFtZWltYWdlLnBocAogICAgICogQHBhcmFtIG1peGVkICRtYXR0ZV9jb2xvciA8cD4KICAgICAqIEltYWdpY2tQaXhlbCBvYmplY3Qgb3IgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBtYXR0ZSBjb2xvcgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkd2lkdGggPHA+CiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGJvcmRlcgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkaGVpZ2h0IDxwPgogICAgICogVGhlIGhlaWdodCBvZiB0aGUgYm9yZGVyCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRpbm5lcl9iZXZlbCA8cD4KICAgICAqIFRoZSBpbm5lciBiZXZlbCB3aWR0aAogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkb3V0ZXJfYmV2ZWwgPHA+CiAgICAgKiBUaGUgb3V0ZXIgYmV2ZWwgd2lkdGgKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJhbWVJbWFnZSgkbWF0dGVfY29sb3IsICR3aWR0aCwgJGhlaWdodCwgJGlubmVyX2JldmVsLCAkb3V0ZXJfYmV2ZWwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBFdmFsdWF0ZSBleHByZXNzaW9uIGZvciBlYWNoIHBpeGVsIGluIHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmZ4aW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRleHByZXNzaW9uIDxwPgogICAgICogVGhlIGV4cHJlc3Npb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0gPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbwogICAgICogYXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBjaGFubmVsLCBjb21iaW5lIGNoYW5uZWx0eXBlIGNvbnN0YW50cyB1c2luZwogICAgICogYml0d2lzZSBvcGVyYXRvcnMuIFJlZmVyIHRvIHRoaXMKICAgICAqIGxpc3Qgb2YgY2hhbm5lbCBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIEltYWdpY2sgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZ4SW1hZ2UoJGV4cHJlc3Npb24sICRjaGFubmVsID0gSW1hZ2ljazo6Q0hBTk5FTF9BTEwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBHYW1tYS1jb3JyZWN0cyBhbiBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdhbW1haW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJGdhbW1hIDxwPgogICAgICogVGhlIGFtb3VudCBvZiBnYW1tYS1jb3JyZWN0aW9uLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkY2hhbm5lbCBbb3B0aW9uYWxdIDxwPgogICAgICogUHJvdmlkZSBhbnkgY2hhbm5lbCBjb25zdGFudCB0aGF0IGlzIHZhbGlkIGZvciB5b3VyIGNoYW5uZWwgbW9kZS4gVG8KICAgICAqIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsdHlwZSBjb25zdGFudHMgdXNpbmcKICAgICAqIGJpdHdpc2Ugb3BlcmF0b3JzLiBSZWZlciB0byB0aGlzCiAgICAgKiBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnYW1tYUltYWdlKCRnYW1tYSwgJGNoYW5uZWwgPSBJbWFnaWNrOjpDSEFOTkVMX0FMTCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEJsdXJzIGFuIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2F1c3NpYW5ibHVyaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJhZGl1cyA8cD4KICAgICAqIFRoZSByYWRpdXMgb2YgdGhlIEdhdXNzaWFuLCBpbiBwaXhlbHMsIG5vdCBjb3VudGluZyB0aGUgY2VudGVyIHBpeGVsLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRzaWdtYSA8cD4KICAgICAqIFRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIEdhdXNzaWFuLCBpbiBwaXhlbHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0gPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbwogICAgICogYXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBjaGFubmVsLCBjb21iaW5lIGNoYW5uZWx0eXBlIGNvbnN0YW50cyB1c2luZwogICAgICogYml0d2lzZSBvcGVyYXRvcnMuIFJlZmVyIHRvIHRoaXMKICAgICAqIGxpc3Qgb2YgY2hhbm5lbCBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdhdXNzaWFuQmx1ckltYWdlKCRyYWRpdXMsICRzaWdtYSwgJGNoYW5uZWwgPSBJbWFnaWNrOjpDSEFOTkVMX0FMTCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VhdHRyaWJ1dGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+VGhlIGtleSBvZiB0aGUgYXR0cmlidXRlIHRvIGdldC48L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICAjW0RlcHJlY2F0ZWRdCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VBdHRyaWJ1dGUoJGtleSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGltYWdlIGJhY2tncm91bmQgY29sb3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWJhY2tncm91bmRjb2xvci5waHAKICAgICAqIEByZXR1cm4gSW1hZ2lja1BpeGVsIGFuIEltYWdpY2tQaXhlbCBzZXQgdG8gdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGltYWdlLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VCYWNrZ3JvdW5kQ29sb3IoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgY2hyb21hdGljeSBibHVlIHByaW1hcnkgcG9pbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWJsdWVwcmltYXJ5LnBocAogICAgICogQHJldHVybiBmbG9hdFtdIEFycmF5IGNvbnNpc3Rpbmcgb2YgIngiIGFuZCAieSIgY29vcmRpbmF0ZXMgb2YgcG9pbnQuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbQXJyYXlTaGFwZShbIngiID0+ICJmbG9hdCIsICJ5IiA9PiAiZmxvYXQiXSldCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VCbHVlUHJpbWFyeSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBpbWFnZSBib3JkZXIgY29sb3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWJvcmRlcmNvbG9yLnBocAogICAgICogQHJldHVybiBJbWFnaWNrUGl4ZWwgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlQm9yZGVyQ29sb3IoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogR2V0cyB0aGUgZGVwdGggZm9yIGEgcGFydGljdWxhciBpbWFnZSBjaGFubmVsCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VjaGFubmVsZGVwdGgucGhwCiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIDxwPgogICAgICogUHJvdmlkZSBhbnkgY2hhbm5lbCBjb25zdGFudCB0aGF0IGlzIHZhbGlkIGZvciB5b3VyIGNoYW5uZWwgbW9kZS4gVG8gYXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBjaGFubmVsLCBjb21iaW5lIGNoYW5uZWwgY29uc3RhbnRzIHVzaW5nIGJpdHdpc2Ugb3BlcmF0b3JzLiBEZWZhdWx0cyB0byA8Yj5JbWFnaWNrOjpDSEFOTkVMX0RFRkFVTFQ8L2I+LiBSZWZlciB0byB0aGlzIGxpc3Qgb2YgY2hhbm5lbCBjb25zdGFudHMKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gaW50IDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZUNoYW5uZWxEZXB0aCgkY2hhbm5lbCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENvbXBhcmVzIGltYWdlIGNoYW5uZWxzIG9mIGFuIGltYWdlIHRvIGEgcmVjb25zdHJ1Y3RlZCBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlY2hhbm5lbGRpc3RvcnRpb24ucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2ljayAkcmVmZXJlbmNlIDxwPgogICAgICogSW1hZ2ljayBvYmplY3QgdG8gY29tcGFyZSB0by4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbwogICAgICogYXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBjaGFubmVsLCBjb21iaW5lIGNoYW5uZWx0eXBlIGNvbnN0YW50cyB1c2luZwogICAgICogYml0d2lzZSBvcGVyYXRvcnMuIFJlZmVyIHRvIHRoaXMKICAgICAqIGxpc3Qgb2YgY2hhbm5lbCBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRtZXRyaWMgPHA+CiAgICAgKiBPbmUgb2YgdGhlIG1ldHJpYyB0eXBlIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gZmxvYXQgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlQ2hhbm5lbERpc3RvcnRpb24oSW1hZ2ljayAkcmVmZXJlbmNlLCAkY2hhbm5lbCwgJG1ldHJpYykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIGV4dHJlbWEgZm9yIG9uZSBvciBtb3JlIGltYWdlIGNoYW5uZWxzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VjaGFubmVsZXh0cmVtYS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbwogICAgICogYXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBjaGFubmVsLCBjb21iaW5lIGNoYW5uZWx0eXBlIGNvbnN0YW50cyB1c2luZwogICAgICogYml0d2lzZSBvcGVyYXRvcnMuIFJlZmVyIHRvIHRoaXMKICAgICAqIGxpc3Qgb2YgY2hhbm5lbCBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludFtdCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbQXJyYXlTaGFwZShbIm1pbmltYSIgPT4gImludCIsICJtYXhpbWEiID0+ICJpbnQiXSldCiAgICAjW0RlcHJlY2F0ZWRdCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VDaGFubmVsRXh0cmVtYSgkY2hhbm5lbCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIG1lYW4gYW5kIHN0YW5kYXJkIGRldmlhdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlY2hhbm5lbG1lYW4ucGhwCiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIDxwPgogICAgICogUHJvdmlkZSBhbnkgY2hhbm5lbCBjb25zdGFudCB0aGF0IGlzIHZhbGlkIGZvciB5b3VyIGNoYW5uZWwgbW9kZS4gVG8KICAgICAqIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsdHlwZSBjb25zdGFudHMgdXNpbmcKICAgICAqIGJpdHdpc2Ugb3BlcmF0b3JzLiBSZWZlciB0byB0aGlzCiAgICAgKiBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBmbG9hdFtdCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbQXJyYXlTaGFwZShbIm1lYW4iID0+ICJmbG9hdCIsICJzdGFuZGFyZERldmlhdGlvbiIgPT4gImZsb2F0Il0pXQogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlQ2hhbm5lbE1lYW4oJGNoYW5uZWwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHN0YXRpc3RpY3MgZm9yIGVhY2ggY2hhbm5lbCBpbiB0aGUgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWNoYW5uZWxzdGF0aXN0aWNzLnBocAogICAgICogQHJldHVybiBhcnJheQogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VDaGFubmVsU3RhdGlzdGljcygpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBjb2xvciBvZiB0aGUgc3BlY2lmaWVkIGNvbG9ybWFwIGluZGV4CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2Vjb2xvcm1hcGNvbG9yLnBocAogICAgICogQHBhcmFtIGludCAkaW5kZXggPHA+CiAgICAgKiBUaGUgb2Zmc2V0IGludG8gdGhlIGltYWdlIGNvbG9ybWFwLgogICAgICogPC9wPgogICAgICogQHJldHVybiBJbWFnaWNrUGl4ZWwgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlQ29sb3JtYXBDb2xvcigkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBHZXRzIHRoZSBpbWFnZSBjb2xvcnNwYWNlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2Vjb2xvcnNwYWNlLnBocAogICAgICogQHJldHVybiBpbnQgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlQ29sb3JzcGFjZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBjb21wb3NpdGUgb3BlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlY29tcG9zZS5waHAKICAgICAqIEByZXR1cm4gaW50IDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZUNvbXBvc2UoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogR2V0cyB0aGUgaW1hZ2UgZGVsYXkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWRlbGF5LnBocAogICAgICogQHJldHVybiBpbnQgdGhlIGltYWdlIGRlbGF5LgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VEZWxheSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDAuOS4xLTAuOS45KTxici8+CiAgICAgKiBHZXRzIHRoZSBpbWFnZSBkZXB0aAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlZGVwdGgucGhwCiAgICAgKiBAcmV0dXJuIGludCBUaGUgaW1hZ2UgZGVwdGguCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZURlcHRoKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENvbXBhcmVzIGFuIGltYWdlIHRvIGEgcmVjb25zdHJ1Y3RlZCBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlZGlzdG9ydGlvbi5waHAKICAgICAqIEBwYXJhbSBJbWFnaWNrICRyZWZlcmVuY2UgPHA+CiAgICAgKiBJbWFnaWNrIG9iamVjdCB0byBjb21wYXJlIHRvLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkbWV0cmljIDxwPgogICAgICogT25lIG9mIHRoZSBtZXRyaWMgdHlwZSBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGZsb2F0IHRoZSBkaXN0b3J0aW9uIG1ldHJpYyB1c2VkIG9uIHRoZSBpbWFnZSAob3IgdGhlIGJlc3QgZ3Vlc3MKICAgICAqIHRoZXJlb2YpLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VEaXN0b3J0aW9uKEltYWdpY2sgJHJlZmVyZW5jZSwgJG1ldHJpYykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIGV4dHJlbWEgZm9yIHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlZXh0cmVtYS5waHAKICAgICAqIEByZXR1cm4gaW50W10gYW4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCB0aGUga2V5cyAibWluIiBhbmQgIm1heCIuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbQXJyYXlTaGFwZShbIm1pbiIgPT4gImludCIsICJtYXgiID0+ICJpbnQiXSldCiAgICAjW0RlcHJlY2F0ZWRdCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VFeHRyZW1hKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIGltYWdlIGRpc3Bvc2FsIG1ldGhvZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlZGlzcG9zZS5waHAKICAgICAqIEByZXR1cm4gaW50IHRoZSBkaXNwb3NlIG1ldGhvZCBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VEaXNwb3NlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIGltYWdlIGdhbW1hCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VnYW1tYS5waHAKICAgICAqIEByZXR1cm4gZmxvYXQgdGhlIGltYWdlIGdhbW1hIG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZUdhbW1hKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGNocm9tYXRpY3kgZ3JlZW4gcHJpbWFyeSBwb2ludAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlZ3JlZW5wcmltYXJ5LnBocAogICAgICogQHJldHVybiBmbG9hdFtdIGFuIGFycmF5IHdpdGggdGhlIGtleXMgIngiIGFuZCAieSIgb24gc3VjY2VzcywgdGhyb3dzIGFuIEltYWdpY2tFeGNlcHRpb24gb24gZmFpbHVyZS4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBmYWlsdXJlCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbQXJyYXlTaGFwZShbIngiID0+ICJmbG9hdCIsICJ5IiA9PiAiZmxvYXQiXSldCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VHcmVlblByaW1hcnkoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgaW1hZ2UgaGVpZ2h0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VoZWlnaHQucGhwCiAgICAgKiBAcmV0dXJuIGludCB0aGUgaW1hZ2UgaGVpZ2h0IGluIHBpeGVscy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlSGVpZ2h0KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIGltYWdlIGhpc3RvZ3JhbQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlaGlzdG9ncmFtLnBocAogICAgICogQHJldHVybiBhcnJheSB0aGUgaW1hZ2UgaGlzdG9ncmFtIGFzIGFuIGFycmF5IG9mIEltYWdpY2tQaXhlbCBvYmplY3RzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VIaXN0b2dyYW0oKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogR2V0cyB0aGUgaW1hZ2UgaW50ZXJsYWNlIHNjaGVtZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlaW50ZXJsYWNlc2NoZW1lLnBocAogICAgICogQHJldHVybiBpbnQgdGhlIGludGVybGFjZSBzY2hlbWUgYXMgYW4gaW50ZWdlciBvbiBzdWNjZXNzLgogICAgICogVHJob3cgYW4gPGI+SW1hZ2lja0V4Y2VwdGlvbjwvYj4gb24gZXJyb3IuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IKICAgICAqLwogICAgI1tEZXByZWNhdGVkXQogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlSW50ZXJsYWNlU2NoZW1lKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIGltYWdlIGl0ZXJhdGlvbnMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZWl0ZXJhdGlvbnMucGhwCiAgICAgKiBAcmV0dXJuIGludCB0aGUgaW1hZ2UgaXRlcmF0aW9ucyBhcyBhbiBpbnRlZ2VyLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VJdGVyYXRpb25zKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGltYWdlIG1hdHRlIGNvbG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VtYXR0ZWNvbG9yLnBocAogICAgICogQHJldHVybiBJbWFnaWNrUGl4ZWwgSW1hZ2lja1BpeGVsIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VNYXR0ZUNvbG9yKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIHBhZ2UgZ2VvbWV0cnkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZXBhZ2UucGhwCiAgICAgKiBAcmV0dXJuIGludFtdIHRoZSBwYWdlIGdlb21ldHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UgaW4gYW4gYXJyYXkgd2l0aCB0aGUKICAgICAqIGtleXMgIndpZHRoIiwgImhlaWdodCIsICJ4IiwgYW5kICJ5Ii4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tBcnJheVNoYXBlKFsid2lkdGgiID0+ICJpbnQiLCAiaGVpZ2h0IiA9PiAiaW50IiwgIngiID0+ICJpbnQiLCAieSIgPT4gImludCJdKV0KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZVBhZ2UoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgY29sb3Igb2YgdGhlIHNwZWNpZmllZCBwaXhlbAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlcGl4ZWxjb2xvci5waHAKICAgICAqIEBwYXJhbSBpbnQgJHggPHA+CiAgICAgKiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBwaXhlbAogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkeSA8cD4KICAgICAqIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHBpeGVsCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIEltYWdpY2tQaXhlbCBhbiBJbWFnaWNrUGl4ZWwgaW5zdGFuY2UgZm9yIHRoZSBjb2xvciBhdCB0aGUgY29vcmRpbmF0ZXMgZ2l2ZW4uCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZVBpeGVsQ29sb3IoJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgbmFtZWQgaW1hZ2UgcHJvZmlsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlcHJvZmlsZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvZmlsZSB0byByZXR1cm4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBpbWFnZSBwcm9maWxlLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VQcm9maWxlKCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgY2hyb21hdGljaXR5IHJlZCBwcmltYXJ5IHBvaW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VyZWRwcmltYXJ5LnBocAogICAgICogQHJldHVybiBmbG9hdFtdIHRoZSBjaHJvbWF0aWNpdHkgcmVkIHByaW1hcnkgcG9pbnQgYXMgYW4gYXJyYXkgd2l0aCB0aGUga2V5cyAieCIKICAgICAqIGFuZCAieSIuCiAgICAgKiBUaHJvdyBhbiA8Yj5JbWFnaWNrRXhjZXB0aW9uPC9iPiBvbiBlcnJvci4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvcgogICAgICovCiAgICAjW0FycmF5U2hhcGUoWyJ4IiA9PiAiZmxvYXQiLCAieSIgPT4gImZsb2F0Il0pXQogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlUmVkUHJpbWFyeSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBHZXRzIHRoZSBpbWFnZSByZW5kZXJpbmcgaW50ZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VyZW5kZXJpbmdpbnRlbnQucGhwCiAgICAgKiBAcmV0dXJuIGludCB0aGUgaW1hZ2UgcmVuZGVyaW5nIGludGVudC4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlUmVuZGVyaW5nSW50ZW50KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIGltYWdlIFggYW5kIFkgcmVzb2x1dGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlcmVzb2x1dGlvbi5waHAKICAgICAqIEByZXR1cm4gZmxvYXRbXSB0aGUgcmVzb2x1dGlvbiBhcyBhbiBhcnJheS4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tBcnJheVNoYXBlKFsieCIgPT4gImZsb2F0IiwgInkiID0+ICJmbG9hdCJdKV0KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZVJlc29sdXRpb24oKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogR2V0cyB0aGUgaW1hZ2Ugc2NlbmUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZXNjZW5lLnBocAogICAgICogQHJldHVybiBpbnQgdGhlIGltYWdlIHNjZW5lLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VTY2VuZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBHZW5lcmF0ZXMgYW4gU0hBLTI1NiBtZXNzYWdlIGRpZ2VzdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdlc2lnbmF0dXJlLnBocAogICAgICogQHJldHVybiBzdHJpbmcgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBmaWxlLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VTaWduYXR1cmUoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogR2V0cyB0aGUgaW1hZ2UgdGlja3MtcGVyLXNlY29uZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdldGlja3NwZXJzZWNvbmQucGhwCiAgICAgKiBAcmV0dXJuIGludCB0aGUgaW1hZ2UgdGlja3MtcGVyLXNlY29uZC4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlVGlja3NQZXJTZWNvbmQoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAwLjkuMTAtMC45LjkpPGJyLz4KICAgICAqIEdldHMgdGhlIHBvdGVudGlhbCBpbWFnZSB0eXBlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2V0eXBlLnBocAogICAgICogQHJldHVybiBpbnQgdGhlIHBvdGVudGlhbCBpbWFnZSB0eXBlLgogICAgICogPGI+aW1hZ2ljazo6SU1HVFlQRV9VTkRFRklORUQ8L2I+CiAgICAgKiA8Yj5pbWFnaWNrOjpJTUdUWVBFX0JJTEVWRUw8L2I+CiAgICAgKiA8Yj5pbWFnaWNrOjpJTUdUWVBFX0dSQVlTQ0FMRTwvYj4KICAgICAqIDxiPmltYWdpY2s6OklNR1RZUEVfR1JBWVNDQUxFTUFUVEU8L2I+CiAgICAgKiA8Yj5pbWFnaWNrOjpJTUdUWVBFX1BBTEVUVEU8L2I+CiAgICAgKiA8Yj5pbWFnaWNrOjpJTUdUWVBFX1BBTEVUVEVNQVRURTwvYj4KICAgICAqIDxiPmltYWdpY2s6OklNR1RZUEVfVFJVRUNPTE9SPC9iPgogICAgICogPGI+aW1hZ2ljazo6SU1HVFlQRV9UUlVFQ09MT1JNQVRURTwvYj4KICAgICAqIDxiPmltYWdpY2s6OklNR1RZUEVfQ09MT1JTRVBBUkFUSU9OPC9iPgogICAgICogPGI+aW1hZ2ljazo6SU1HVFlQRV9DT0xPUlNFUEFSQVRJT05NQVRURTwvYj4KICAgICAqIDxiPmltYWdpY2s6OklNR1RZUEVfT1BUSU1JWkU8L2I+CiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZVR5cGUoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogR2V0cyB0aGUgaW1hZ2UgdW5pdHMgb2YgcmVzb2x1dGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGltYWdldW5pdHMucGhwCiAgICAgKiBAcmV0dXJuIGludCB0aGUgaW1hZ2UgdW5pdHMgb2YgcmVzb2x1dGlvbi4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlVW5pdHMoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgdmlydHVhbCBwaXhlbCBtZXRob2QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbWFnZXZpcnR1YWxwaXhlbG1ldGhvZC5waHAKICAgICAqIEByZXR1cm4gaW50IHRoZSB2aXJ0dWFsIHBpeGVsIG1ldGhvZCBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VWaXJ0dWFsUGl4ZWxNZXRob2QoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgY2hyb21hdGljaXR5IHdoaXRlIHBvaW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2V3aGl0ZXBvaW50LnBocAogICAgICogQHJldHVybiBmbG9hdFtdIHRoZSBjaHJvbWF0aWNpdHkgd2hpdGUgcG9pbnQgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCB0aGUga2V5cwogICAgICogIngiIGFuZCAieSIuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbQXJyYXlTaGFwZShbIngiID0+ICJmbG9hdCIsICJ5IiA9PiAiZmxvYXQiXSldCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VXaGl0ZVBvaW50KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGltYWdlIHdpZHRoCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2V3aWR0aC5waHAKICAgICAqIEByZXR1cm4gaW50IHRoZSBpbWFnZSB3aWR0aC4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlV2lkdGgoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGltYWdlcyBpbiB0aGUgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0bnVtYmVyaW1hZ2VzLnBocAogICAgICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBpbWFnZXMgYXNzb2NpYXRlZCB3aXRoIEltYWdpY2sgb2JqZWN0LgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TnVtYmVySW1hZ2VzKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIGltYWdlIHRvdGFsIGluayBkZW5zaXR5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2V0b3RhbGlua2RlbnNpdHkucGhwCiAgICAgKiBAcmV0dXJuIGZsb2F0IHRoZSBpbWFnZSB0b3RhbCBpbmsgZGVuc2l0eSBvZiB0aGUgaW1hZ2UuCiAgICAgKiBUaHJvdyBhbiA8Yj5JbWFnaWNrRXhjZXB0aW9uPC9iPiBvbiBlcnJvci4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvcgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VUb3RhbElua0RlbnNpdHkoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRXh0cmFjdHMgYSByZWdpb24gb2YgdGhlIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2VyZWdpb24ucGhwCiAgICAgKiBAcGFyYW0gaW50ICR3aWR0aCA8cD4KICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgZXh0cmFjdGVkIHJlZ2lvbi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGhlaWdodCA8cD4KICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGV4dHJhY3RlZCByZWdpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR4IDxwPgogICAgICogWC1jb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGV4dHJhY3RlZCByZWdpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR5IDxwPgogICAgICogWS1jb29yZGluYXRlIG9mIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGV4dHJhY3RlZCByZWdpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIEltYWdpY2sgRXh0cmFjdHMgYSByZWdpb24gb2YgdGhlIGltYWdlIGFuZCByZXR1cm5zIGl0IGFzIGEgbmV3IHdhbmQuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZVJlZ2lvbigkd2lkdGgsICRoZWlnaHQsICR4LCAkeSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENyZWF0ZXMgYSBuZXcgaW1hZ2UgYXMgYSBjb3B5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suaW1wbG9kZWltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgPHA+CiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBpbXBsb2RlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGltcGxvZGVJbWFnZSgkcmFkaXVzKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQWRqdXN0cyB0aGUgbGV2ZWxzIG9mIGFuIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2subGV2ZWxpbWFnZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkYmxhY2tQb2ludCA8cD4KICAgICAqIFRoZSBpbWFnZSBibGFjayBwb2ludAogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRnYW1tYSA8cD4KICAgICAqIFRoZSBnYW1tYSB2YWx1ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR3aGl0ZVBvaW50IDxwPgogICAgICogVGhlIGltYWdlIHdoaXRlIHBvaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0gPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbwogICAgICogYXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBjaGFubmVsLCBjb21iaW5lIGNoYW5uZWx0eXBlIGNvbnN0YW50cyB1c2luZwogICAgICogYml0d2lzZSBvcGVyYXRvcnMuIFJlZmVyIHRvIHRoaXMKICAgICAqIGxpc3Qgb2YgY2hhbm5lbCBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxldmVsSW1hZ2UoJGJsYWNrUG9pbnQsICRnYW1tYSwgJHdoaXRlUG9pbnQsICRjaGFubmVsID0gSW1hZ2ljazo6Q0hBTk5FTF9BTEwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTY2FsZXMgYW4gaW1hZ2UgcHJvcG9ydGlvbmFsbHkgMngKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5tYWduaWZ5aW1hZ2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1hZ25pZnlJbWFnZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXBsYWNlcyB0aGUgY29sb3JzIG9mIGFuIGltYWdlIHdpdGggdGhlIGNsb3Nlc3QgY29sb3IgZnJvbSBhIHJlZmVyZW5jZSBpbWFnZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5tYXBpbWFnZS5waHAKICAgICAqIEBwYXJhbSBJbWFnaWNrICRtYXAKICAgICAqIEBwYXJhbSBib29sICRkaXRoZXIKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW0RlcHJlY2F0ZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFwSW1hZ2UoSW1hZ2ljayAkbWFwLCAkZGl0aGVyKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQ2hhbmdlcyB0aGUgdHJhbnNwYXJlbmN5IHZhbHVlIG9mIGEgY29sb3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5tYXR0ZWZsb29kZmlsbGltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRhbHBoYSA8cD4KICAgICAqIFRoZSBsZXZlbCBvZiB0cmFuc3BhcmVuY3k6IDEuMCBpcyBmdWxseSBvcGFxdWUgYW5kIDAuMCBpcyBmdWxseQogICAgICogdHJhbnNwYXJlbnQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJGZ1enogPHA+CiAgICAgKiBUaGUgZnV6eiBtZW1iZXIgb2YgaW1hZ2UgZGVmaW5lcyBob3cgbXVjaCB0b2xlcmFuY2UgaXMgYWNjZXB0YWJsZSB0bwogICAgICogY29uc2lkZXIgdHdvIGNvbG9ycyBhcyB0aGUgc2FtZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBtaXhlZCAkYm9yZGVyY29sb3IgPHA+CiAgICAgKiBBbiA8Yj5JbWFnaWNrUGl4ZWw8L2I+IG9iamVjdCBvciBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBib3JkZXIgY29sb3IuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR4IDxwPgogICAgICogVGhlIHN0YXJ0aW5nIHggY29vcmRpbmF0ZSBvZiB0aGUgb3BlcmF0aW9uLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkeSA8cD4KICAgICAqIFRoZSBzdGFydGluZyB5IGNvb3JkaW5hdGUgb2YgdGhlIG9wZXJhdGlvbi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW0RlcHJlY2F0ZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbWF0dGVGbG9vZGZpbGxJbWFnZSgkYWxwaGEsICRmdXp6LCAkYm9yZGVyY29sb3IsICR4LCAkeSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEFwcGxpZXMgYSBkaWdpdGFsIGZpbHRlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLm1lZGlhbmZpbHRlcmltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgPHA+CiAgICAgKiBUaGUgcmFkaXVzIG9mIHRoZSBwaXhlbCBuZWlnaGJvcmhvb2QuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tEZXByZWNhdGVkXQogICAgcHVibGljIGZ1bmN0aW9uIG1lZGlhbkZpbHRlckltYWdlKCRyYWRpdXMpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBOZWdhdGVzIHRoZSBjb2xvcnMgaW4gdGhlIHJlZmVyZW5jZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLm5lZ2F0ZWltYWdlLnBocAogICAgICogQHBhcmFtIGJvb2wgJGdyYXkgPHA+CiAgICAgKiBXaGV0aGVyIHRvIG9ubHkgbmVnYXRlIGdyYXlzY2FsZSBwaXhlbHMgd2l0aGluIHRoZSBpbWFnZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXSA8cD4KICAgICAqIFByb3ZpZGUgYW55IGNoYW5uZWwgY29uc3RhbnQgdGhhdCBpcyB2YWxpZCBmb3IgeW91ciBjaGFubmVsIG1vZGUuIFRvCiAgICAgKiBhcHBseSB0byBtb3JlIHRoYW4gb25lIGNoYW5uZWwsIGNvbWJpbmUgY2hhbm5lbHR5cGUgY29uc3RhbnRzIHVzaW5nCiAgICAgKiBiaXR3aXNlIG9wZXJhdG9ycy4gUmVmZXIgdG8gdGhpcwogICAgICogbGlzdCBvZiBjaGFubmVsIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmVnYXRlSW1hZ2UoJGdyYXksICRjaGFubmVsID0gSW1hZ2ljazo6Q0hBTk5FTF9BTEwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDaGFuZ2UgYW55IHBpeGVsIHRoYXQgbWF0Y2hlcyBjb2xvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnBhaW50b3BhcXVlaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHRhcmdldCA8cD4KICAgICAqIENoYW5nZSB0aGlzIHRhcmdldCBjb2xvciB0byB0aGUgZmlsbCBjb2xvciB3aXRoaW4gdGhlIGltYWdlLiBBbgogICAgICogSW1hZ2lja1BpeGVsIG9iamVjdCBvciBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHRhcmdldCBjb2xvci4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBtaXhlZCAkZmlsbCA8cD4KICAgICAqIEFuIEltYWdpY2tQaXhlbCBvYmplY3Qgb3IgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmaWxsIGNvbG9yLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRmdXp6IDxwPgogICAgICogVGhlIGZ1enogbWVtYmVyIG9mIGltYWdlIGRlZmluZXMgaG93IG11Y2ggdG9sZXJhbmNlIGlzIGFjY2VwdGFibGUgdG8KICAgICAqIGNvbnNpZGVyIHR3byBjb2xvcnMgYXMgdGhlIHNhbWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0gPHA+CiAgICAgKiBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbwogICAgICogYXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBjaGFubmVsLCBjb21iaW5lIGNoYW5uZWx0eXBlIGNvbnN0YW50cyB1c2luZwogICAgICogYml0d2lzZSBvcGVyYXRvcnMuIFJlZmVyIHRvIHRoaXMKICAgICAqIGxpc3Qgb2YgY2hhbm5lbCBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tEZXByZWNhdGVkXQogICAgcHVibGljIGZ1bmN0aW9uIHBhaW50T3BhcXVlSW1hZ2UoJHRhcmdldCwgJGZpbGwsICRmdXp6LCAkY2hhbm5lbCA9IEltYWdpY2s6OkNIQU5ORUxfQUxMKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQ2hhbmdlcyBhbnkgcGl4ZWwgdGhhdCBtYXRjaGVzIGNvbG9yIHdpdGggdGhlIGNvbG9yIGRlZmluZWQgYnkgZmlsbAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnBhaW50dHJhbnNwYXJlbnRpbWFnZS5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkdGFyZ2V0IDxwPgogICAgICogQ2hhbmdlIHRoaXMgdGFyZ2V0IGNvbG9yIHRvIHNwZWNpZmllZCBvcGFjaXR5IHZhbHVlIHdpdGhpbiB0aGUgaW1hZ2UuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJGFscGhhIDxwPgogICAgICogVGhlIGxldmVsIG9mIHRyYW5zcGFyZW5jeTogMS4wIGlzIGZ1bGx5IG9wYXF1ZSBhbmQgMC4wIGlzIGZ1bGx5CiAgICAgKiB0cmFuc3BhcmVudC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkZnV6eiA8cD4KICAgICAqIFRoZSBmdXp6IG1lbWJlciBvZiBpbWFnZSBkZWZpbmVzIGhvdyBtdWNoIHRvbGVyYW5jZSBpcyBhY2NlcHRhYmxlIHRvCiAgICAgKiBjb25zaWRlciB0d28gY29sb3JzIGFzIHRoZSBzYW1lLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwYWludFRyYW5zcGFyZW50SW1hZ2UoJHRhcmdldCwgJGFscGhhLCAkZnV6eikge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFF1aWNrbHkgcGluLXBvaW50IGFwcHJvcHJpYXRlIHBhcmFtZXRlcnMgZm9yIGltYWdlIHByb2Nlc3NpbmcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5wcmV2aWV3aW1hZ2VzLnBocAogICAgICogQHBhcmFtIGludCAkcHJldmlldyA8cD4KICAgICAqIFByZXZpZXcgdHlwZS4gU2VlIFByZXZpZXcgdHlwZSBjb25zdGFudHMKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJldmlld0ltYWdlcygkcHJldmlldykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEFkZHMgb3IgcmVtb3ZlcyBhIHByb2ZpbGUgZnJvbSBhbiBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnByb2ZpbGVpbWFnZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByb2ZpbGUKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvZmlsZUltYWdlKCRuYW1lLCAkcHJvZmlsZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEFuYWx5emVzIHRoZSBjb2xvcnMgd2l0aGluIGEgcmVmZXJlbmNlIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sucXVhbnRpemVpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJG51bWJlckNvbG9ycwogICAgICogQHBhcmFtIGludCAkY29sb3JzcGFjZQogICAgICogQHBhcmFtIGludCAkdHJlZWRlcHRoCiAgICAgKiBAcGFyYW0gYm9vbCAkZGl0aGVyCiAgICAgKiBAcGFyYW0gYm9vbCAkbWVhc3VyZUVycm9yCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHF1YW50aXplSW1hZ2UoJG51bWJlckNvbG9ycywgJGNvbG9yc3BhY2UsICR0cmVlZGVwdGgsICRkaXRoZXIsICRtZWFzdXJlRXJyb3IpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBbmFseXplcyB0aGUgY29sb3JzIHdpdGhpbiBhIHNlcXVlbmNlIG9mIGltYWdlcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnF1YW50aXplaW1hZ2VzLnBocAogICAgICogQHBhcmFtIGludCAkbnVtYmVyQ29sb3JzCiAgICAgKiBAcGFyYW0gaW50ICRjb2xvcnNwYWNlCiAgICAgKiBAcGFyYW0gaW50ICR0cmVlZGVwdGgKICAgICAqIEBwYXJhbSBib29sICRkaXRoZXIKICAgICAqIEBwYXJhbSBib29sICRtZWFzdXJlRXJyb3IKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVhbnRpemVJbWFnZXMoJG51bWJlckNvbG9ycywgJGNvbG9yc3BhY2UsICR0cmVlZGVwdGgsICRkaXRoZXIsICRtZWFzdXJlRXJyb3IpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTbW9vdGhzIHRoZSBjb250b3VycyBvZiBhbiBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnJlZHVjZW5vaXNlaW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJhZGl1cwogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiByZWR1Y2VOb2lzZUltYWdlKCRyYWRpdXMpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZW1vdmVzIHRoZSBuYW1lZCBpbWFnZSBwcm9maWxlIGFuZCByZXR1cm5zIGl0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2sucmVtb3ZlaW1hZ2Vwcm9maWxlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHJldHVybiBzdHJpbmcgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcHJvZmlsZSBvZiB0aGUgaW1hZ2UuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVJbWFnZVByb2ZpbGUoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXBhcmF0ZXMgYSBjaGFubmVsIGZyb20gdGhlIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2VwYXJhdGVpbWFnZWNoYW5uZWwucGhwCiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlcGFyYXRlSW1hZ2VDaGFubmVsKCRjaGFubmVsKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2VwaWEgdG9uZXMgYW4gaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXBpYXRvbmVpbWFnZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkdGhyZXNob2xkCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlcGlhVG9uZUltYWdlKCR0aHJlc2hvbGQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbWFnZSBiaWFzIGZvciBhbnkgbWV0aG9kIHRoYXQgY29udm9sdmVzIGFuIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0aW1hZ2ViaWFzLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRiaWFzCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlQmlhcygkYmlhcykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIGNocm9tYXRpY2l0eSBibHVlIHByaW1hcnkgcG9pbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZWJsdWVwcmltYXJ5LnBocAogICAgICogQHBhcmFtIGZsb2F0ICR4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VCbHVlUHJpbWFyeSgkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbWFnZSBib3JkZXIgY29sb3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZWJvcmRlcmNvbG9yLnBocAogICAgICogQHBhcmFtIG1peGVkICRib3JkZXIgPHA+CiAgICAgKiBUaGUgYm9yZGVyIGNvbG9yCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlQm9yZGVyQ29sb3IoJGJvcmRlcikge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGRlcHRoIG9mIGEgcGFydGljdWxhciBpbWFnZSBjaGFubmVsCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0aW1hZ2VjaGFubmVsZGVwdGgucGhwCiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsCiAgICAgKiBAcGFyYW0gaW50ICRkZXB0aAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZUNoYW5uZWxEZXB0aCgkY2hhbm5lbCwgJGRlcHRoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgY29sb3Igb2YgdGhlIHNwZWNpZmllZCBjb2xvcm1hcCBpbmRleAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlY29sb3JtYXBjb2xvci5waHAKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4CiAgICAgKiBAcGFyYW0gSW1hZ2lja1BpeGVsICRjb2xvcgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZUNvbG9ybWFwQ29sb3IoJGluZGV4LCBJbWFnaWNrUGl4ZWwgJGNvbG9yKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgaW1hZ2UgY29sb3JzcGFjZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlY29sb3JzcGFjZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNvbG9yc3BhY2UgPHA+CiAgICAgKiBPbmUgb2YgdGhlIENPTE9SU1BBQ0UgY29uc3RhbnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlQ29sb3JzcGFjZSgkY29sb3JzcGFjZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIGRpc3Bvc2FsIG1ldGhvZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlZGlzcG9zZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGRpc3Bvc2UKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VEaXNwb3NlKCRkaXNwb3NlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgaW1hZ2Ugc2l6ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlZXh0ZW50LnBocAogICAgICogQHBhcmFtIGludCAkY29sdW1ucwogICAgICogQHBhcmFtIGludCAkcm93cwogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZUV4dGVudCgkY29sdW1ucywgJHJvd3MpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbWFnZSBjaHJvbWF0aWNpdHkgZ3JlZW4gcHJpbWFyeSBwb2ludAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlZ3JlZW5wcmltYXJ5LnBocAogICAgICogQHBhcmFtIGZsb2F0ICR4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VHcmVlblByaW1hcnkoJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgaW1hZ2UgY29tcHJlc3Npb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZWludGVybGFjZXNjaGVtZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGludGVybGFjZV9zY2hlbWUKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VJbnRlcmxhY2VTY2hlbWUoJGludGVybGFjZV9zY2hlbWUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBZGRzIGEgbmFtZWQgcHJvZmlsZSB0byB0aGUgSW1hZ2ljayBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZXByb2ZpbGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9maWxlCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlUHJvZmlsZSgkbmFtZSwgJHByb2ZpbGUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbWFnZSBjaHJvbWF0aWNpdHkgcmVkIHByaW1hcnkgcG9pbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZXJlZHByaW1hcnkucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgKICAgICAqIEBwYXJhbSBmbG9hdCAkeQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZVJlZFByaW1hcnkoJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgaW1hZ2UgcmVuZGVyaW5nIGludGVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdlcmVuZGVyaW5naW50ZW50LnBocAogICAgICogQHBhcmFtIGludCAkcmVuZGVyaW5nX2ludGVudAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZVJlbmRlcmluZ0ludGVudCgkcmVuZGVyaW5nX2ludGVudCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIHZpcnR1YWwgcGl4ZWwgbWV0aG9kCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0aW1hZ2V2aXJ0dWFscGl4ZWxtZXRob2QucGhwCiAgICAgKiBAcGFyYW0gaW50ICRtZXRob2QKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VWaXJ0dWFsUGl4ZWxNZXRob2QoJG1ldGhvZCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIGNocm9tYXRpY2l0eSB3aGl0ZSBwb2ludAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGltYWdld2hpdGVwb2ludC5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeAogICAgICogQHBhcmFtIGZsb2F0ICR5CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlV2hpdGVQb2ludCgkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBZGp1c3RzIHRoZSBjb250cmFzdCBvZiBhbiBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNpZ21vaWRhbGNvbnRyYXN0aW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gYm9vbCAkc2hhcnBlbgogICAgICogQHBhcmFtIGZsb2F0ICRhbHBoYQogICAgICogQHBhcmFtIGZsb2F0ICRiZXRhCiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbW9pZGFsQ29udHJhc3RJbWFnZSgkc2hhcnBlbiwgJGFscGhhLCAkYmV0YSwgJGNoYW5uZWwgPSBJbWFnaWNrOjpDSEFOTkVMX0FMTCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENvbXBvc2l0ZXMgdHdvIGltYWdlcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnN0ZXJlb2ltYWdlLnBocAogICAgICogQHBhcmFtIEltYWdpY2sgJG9mZnNldF93YW5kCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0ZXJlb0ltYWdlKEltYWdpY2sgJG9mZnNldF93YW5kKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmVwZWF0ZWRseSB0aWxlcyB0aGUgdGV4dHVyZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnRleHR1cmVpbWFnZS5waHAKICAgICAqIEBwYXJhbSBJbWFnaWNrICR0ZXh0dXJlX3dhbmQKICAgICAqIEByZXR1cm4gSW1hZ2ljayBhIG5ldyBJbWFnaWNrIG9iamVjdCB0aGF0IGhhcyB0aGUgcmVwZWF0ZWQgdGV4dHVyZSBhcHBsaWVkLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGV4dHVyZUltYWdlKEltYWdpY2sgJHRleHR1cmVfd2FuZCkge30KCiAgICAvKioKICAgICAqIHBwbGllcyBhIGNvbG9yIHZlY3RvciB0byBlYWNoIHBpeGVsIGluIHRoZSBpbWFnZS4gVGhlICdvcGFjaXR5JyBjb2xvciBpcyBhIHBlciBjaGFubmVsIHN0cmVuZ3RoIGZhY3RvciBmb3IgaG93IHN0cm9uZ2x5IHRoZSBjb2xvciBzaG91bGQgYmUgYXBwbGllZC4KICAgICAqIElmIGxlZ2FjeSBpcyB0cnVlLCB0aGUgYmVoYXZpb3VyIG9mIHRoaXMgZnVuY3Rpb24gaXMgaW5jb3JyZWN0LCBidXQgY29uc2lzdGVudCB3aXRoIGhvdyBpdCBiZWhhdmVkIGJlZm9yZSBJbWFnaWNrIHZlcnNpb24gMy40LjAKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay50aW50aW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHRpbnQKICAgICAqIEBwYXJhbSBtaXhlZCAkb3BhY2l0eQogICAgICogQHBhcmFtIGJvb2wgJGxlZ2FjeSBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBUaHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvcgogICAgICogQHNpbmNlIDIuMC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aW50SW1hZ2UoJHRpbnQsICRvcGFjaXR5LCAkbGVnYWN5ID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTaGFycGVucyBhbiBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnVuc2hhcnBtYXNraW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJhZGl1cwogICAgICogQHBhcmFtIGZsb2F0ICRzaWdtYQogICAgICogQHBhcmFtIGZsb2F0ICRhbW91bnQKICAgICAqIEBwYXJhbSBmbG9hdCAkdGhyZXNob2xkCiAgICAgKiBAcGFyYW0gaW50ICRjaGFubmVsIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zaGFycE1hc2tJbWFnZSgkcmFkaXVzLCAkc2lnbWEsICRhbW91bnQsICR0aHJlc2hvbGQsICRjaGFubmVsID0gSW1hZ2ljazo6Q0hBTk5FTF9BTEwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIGEgbmV3IEltYWdpY2sgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2UucGhwCiAgICAgKiBAcmV0dXJuIEltYWdpY2sgYSBuZXcgSW1hZ2ljayBvYmplY3Qgd2l0aCB0aGUgY3VycmVudCBpbWFnZSBzZXF1ZW5jZS4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEFkZHMgbmV3IGltYWdlIHRvIEltYWdpY2sgb2JqZWN0IGltYWdlIGxpc3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5hZGRpbWFnZS5waHAKICAgICAqIEBwYXJhbSBJbWFnaWNrICRzb3VyY2UgPHA+CiAgICAgKiBUaGUgc291cmNlIEltYWdpY2sgb2JqZWN0CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZEltYWdlKEltYWdpY2sgJHNvdXJjZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJlcGxhY2VzIGltYWdlIGluIHRoZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZS5waHAKICAgICAqIEBwYXJhbSBJbWFnaWNrICRyZXBsYWNlIDxwPgogICAgICogVGhlIHJlcGxhY2UgSW1hZ2ljayBvYmplY3QKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2UoSW1hZ2ljayAkcmVwbGFjZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENyZWF0ZXMgYSBuZXcgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5uZXdpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNvbHMgPHA+CiAgICAgKiBDb2x1bW5zIGluIHRoZSBuZXcgaW1hZ2UKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHJvd3MgPHA+CiAgICAgKiBSb3dzIGluIHRoZSBuZXcgaW1hZ2UKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBtaXhlZCAkYmFja2dyb3VuZCA8cD4KICAgICAqIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIHVzZWQgZm9yIHRoaXMgaW1hZ2UKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdCBbb3B0aW9uYWxdIDxwPgogICAgICogSW1hZ2UgZm9ybWF0LiBUaGlzIHBhcmFtZXRlciB3YXMgYWRkZWQgaW4gSW1hZ2ljayB2ZXJzaW9uIDIuMC4xLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXdJbWFnZSgkY29scywgJHJvd3MsICRiYWNrZ3JvdW5kLCAkZm9ybWF0ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENyZWF0ZXMgYSBuZXcgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5uZXdwc2V1ZG9pbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNvbHVtbnMgPHA+CiAgICAgKiBjb2x1bW5zIGluIHRoZSBuZXcgaW1hZ2UKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHJvd3MgPHA+CiAgICAgKiByb3dzIGluIHRoZSBuZXcgaW1hZ2UKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBzZXVkb1N0cmluZyA8cD4KICAgICAqIHN0cmluZyBjb250YWluaW5nIHBzZXVkbyBpbWFnZSBkZWZpbml0aW9uLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXdQc2V1ZG9JbWFnZSgkY29sdW1ucywgJHJvd3MsICRwc2V1ZG9TdHJpbmcpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBHZXRzIHRoZSBvYmplY3QgY29tcHJlc3Npb24gdHlwZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGNvbXByZXNzaW9uLnBocAogICAgICogQHJldHVybiBpbnQgdGhlIGNvbXByZXNzaW9uIGNvbnN0YW50CiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb21wcmVzc2lvbigpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBHZXRzIHRoZSBvYmplY3QgY29tcHJlc3Npb24gcXVhbGl0eQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGNvbXByZXNzaW9ucXVhbGl0eS5waHAKICAgICAqIEByZXR1cm4gaW50IGludGVnZXIgZGVzY3JpYmluZyB0aGUgY29tcHJlc3Npb24gcXVhbGl0eQogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29tcHJlc3Npb25RdWFsaXR5KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIEltYWdlTWFnaWNrIEFQSSBjb3B5cmlnaHQgYXMgYSBzdHJpbmcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRjb3B5cmlnaHQucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIEltYWdlbWFnaWNrIGFuZAogICAgICogTWFnaWNrd2FuZCBDIEFQSS4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDb3B5cmlnaHQoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogVGhlIGZpbGVuYW1lIGFzc29jaWF0ZWQgd2l0aCBhbiBpbWFnZSBzZXF1ZW5jZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGZpbGVuYW1lLnBocAogICAgICogQHJldHVybiBzdHJpbmcgYSBzdHJpbmcgb24gc3VjY2Vzcy4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpbGVuYW1lKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGZvcm1hdCBvZiB0aGUgSW1hZ2ljayBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRmb3JtYXQucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgZm9ybWF0IG9mIHRoZSBpbWFnZS4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZvcm1hdCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBJbWFnZU1hZ2ljayBob21lIFVSTAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldGhvbWV1cmwucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBhIGxpbmsgdG8gdGhlIGltYWdlbWFnaWNrIGhvbWVwYWdlLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEhvbWVVUkwoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogR2V0cyB0aGUgb2JqZWN0IGludGVybGFjZSBzY2hlbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRpbnRlcmxhY2VzY2hlbWUucGhwCiAgICAgKiBAcmV0dXJuIGludCBHZXRzIHRoZSB3YW5kIGludGVybGFjZQogICAgICogc2NoZW1lLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW50ZXJsYWNlU2NoZW1lKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgYSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBrZXkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRvcHRpb24ucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgb3B0aW9uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZyBhIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIHdhbmQgYW5kIHRoZSBzcGVjaWZpZWQga2V5LgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0aW9uKCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBJbWFnZU1hZ2ljayBwYWNrYWdlIG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRwYWNrYWdlbmFtZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBJbWFnZU1hZ2ljayBwYWNrYWdlIG5hbWUgYXMgYSBzdHJpbmcuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGFja2FnZU5hbWUoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgcGFnZSBnZW9tZXRyeQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldHBhZ2UucGhwCiAgICAgKiBAcmV0dXJuIGludFtdIHRoZSBwYWdlIGdlb21ldHJ5IGFzc29jaWF0ZWQgd2l0aCB0aGUgSW1hZ2ljayBvYmplY3QgaW4KICAgICAqIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggdGhlIGtleXMgIndpZHRoIiwgImhlaWdodCIsICJ4IiwgYW5kICJ5IiwKICAgICAqIHRocm93aW5nIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IKICAgICAqLwogICAgLy93aWR0aDppbnQsIGhlaWdodDppbnQsIHg6aW50LCB5OmludAogICAgI1tBcnJheVNoYXBlKFsid2lkdGgiID0+ICJpbnQiLCAiaGVpZ2h0IiA9PiAiaW50IiwgIngiID0+ICJpbnQiLCAieSIgPT4gImludCJdKV0KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYWdlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIHF1YW50dW0gZGVwdGgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRxdWFudHVtZGVwdGgucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5IHRoZSBJbWFnaWNrIHF1YW50dW0gZGVwdGggYXMgYSBzdHJpbmcuCiAgICAgKi8KICAgIC8vIHF1YW50dW1EZXB0aExvbmc6aW50LCBxdWFudHVtRGVwdGhTdHJpbmc6c3RyaW5nCiAgICAjW0FycmF5U2hhcGUoWyJxdWFudHVtRGVwdGhMb25nIiA9PiAiaW50IiwgInF1YW50dW1EZXB0aFN0cmluZyIgPT4gInN0cmluZyJdKV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UXVhbnR1bURlcHRoKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIEltYWdpY2sgcXVhbnR1bSByYW5nZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldHF1YW50dW1yYW5nZS5waHAKICAgICAqIEByZXR1cm4gYXJyYXkgdGhlIEltYWdpY2sgcXVhbnR1bSByYW5nZSBhcyBhIHN0cmluZy4KICAgICAqLwogICAgI1tBcnJheVNoYXBlKFsicXVhbnR1bVJhbmdlTG9uZyIgPT4gImludCIsICJxdWFudHVtUmFuZ2VTdHJpbmciID0+ICJzdHJpbmciXSldCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFF1YW50dW1SYW5nZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBJbWFnZU1hZ2ljayByZWxlYXNlIGRhdGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5nZXRyZWxlYXNlZGF0ZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBJbWFnZU1hZ2ljayByZWxlYXNlIGRhdGUgYXMgYSBzdHJpbmcuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVsZWFzZURhdGUoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgc3BlY2lmaWVkIHJlc291cmNlJ3MgbWVtb3J5IHVzYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0cmVzb3VyY2UucGhwCiAgICAgKiBAcGFyYW0gaW50ICR0eXBlIDxwPgogICAgICogUmVmZXIgdG8gdGhlIGxpc3Qgb2YgcmVzb3VyY2V0eXBlIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gaW50IHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UncyBtZW1vcnkgdXNhZ2UgaW4gbWVnYWJ5dGVzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlc291cmNlKCR0eXBlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGxpbWl0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0cmVzb3VyY2VsaW1pdC5waHAKICAgICAqIEBwYXJhbSBpbnQgJHR5cGUgPHA+CiAgICAgKiBSZWZlciB0byB0aGUgbGlzdCBvZiByZXNvdXJjZXR5cGUgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnQgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBsaW1pdCBpbiBtZWdhYnl0ZXMuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VMaW1pdCgkdHlwZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEdldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNhbXBsaW5nIGZhY3RvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldHNhbXBsaW5nZmFjdG9ycy5waHAKICAgICAqIEByZXR1cm4gYXJyYXkgYW4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc2FtcGxpbmcKICAgICAqIGZhY3RvcnMgb2YgdGhlIGltYWdlLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2FtcGxpbmdGYWN0b3JzKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIHNpemUgYXNzb2NpYXRlZCB3aXRoIHRoZSBJbWFnaWNrIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldHNpemUucGhwCiAgICAgKiBAcmV0dXJuIGludFtdIHRoZSBzaXplIGFzc29jaWF0ZWQgd2l0aCB0aGUgSW1hZ2ljayBvYmplY3QgYXMgYW4gYXJyYXkgd2l0aCB0aGUKICAgICAqIGtleXMgImNvbHVtbnMiIGFuZCAicm93cyIuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbQXJyYXlTaGFwZShbImNvbHVtbnMiID0+ICJpbnQiLCAicm93cyIgPT4gImludCJdKV0KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIEltYWdlTWFnaWNrIEFQSSB2ZXJzaW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0dmVyc2lvbi5waHAKICAgICAqIEByZXR1cm4gYXJyYXkgdGhlIEltYWdlTWFnaWNrIEFQSSB2ZXJzaW9uIGFzIGEgc3RyaW5nIGFuZCBhcyBhIG51bWJlci4KICAgICAqLwogICAgI1tBcnJheVNoYXBlKFsidmVyc2lvbk51bWJlciIgPT4gImludCIsICJ2ZXJzaW9uU3RyaW5nIiA9PiAic3RyaW5nIl0pXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIG9iamVjdCdzIGRlZmF1bHQgYmFja2dyb3VuZCBjb2xvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGJhY2tncm91bmRjb2xvci5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkYmFja2dyb3VuZAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRCYWNrZ3JvdW5kQ29sb3IoJGJhY2tncm91bmQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBvYmplY3QncyBkZWZhdWx0IGNvbXByZXNzaW9uIHR5cGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRjb21wcmVzc2lvbi5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNvbXByZXNzaW9uCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbXByZXNzaW9uKCRjb21wcmVzc2lvbikge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMC45LjEwLTAuOS45KTxici8+CiAgICAgKiBTZXRzIHRoZSBvYmplY3QncyBkZWZhdWx0IGNvbXByZXNzaW9uIHF1YWxpdHkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRjb21wcmVzc2lvbnF1YWxpdHkucGhwCiAgICAgKiBAcGFyYW0gaW50ICRxdWFsaXR5CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbXByZXNzaW9uUXVhbGl0eSgkcXVhbGl0eSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGZpbGVuYW1lIGJlZm9yZSB5b3UgcmVhZCBvciB3cml0ZSB0aGUgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRmaWxlbmFtZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEZpbGVuYW1lKCRmaWxlbmFtZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGZvcm1hdCBvZiB0aGUgSW1hZ2ljayBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRmb3JtYXQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmb3JtYXQKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Rm9ybWF0KCRmb3JtYXQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbWFnZSBjb21wcmVzc2lvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldGludGVybGFjZXNjaGVtZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGludGVybGFjZV9zY2hlbWUKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW50ZXJsYWNlU2NoZW1lKCRpbnRlcmxhY2Vfc2NoZW1lKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0IGFuIG9wdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNldG9wdGlvbi5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9uKCRrZXksICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIHBhZ2UgZ2VvbWV0cnkgb2YgdGhlIEltYWdpY2sgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0cGFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoCiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQKICAgICAqIEBwYXJhbSBpbnQgJHgKICAgICAqIEBwYXJhbSBpbnQgJHkKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGFnZSgkd2lkdGgsICRoZWlnaHQsICR4LCAkeSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGxpbWl0IGZvciBhIHBhcnRpY3VsYXIgcmVzb3VyY2UgaW4gbWVnYWJ5dGVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0cmVzb3VyY2VsaW1pdC5waHAKICAgICAqIEBwYXJhbSBpbnQgJHR5cGUgPHA+CiAgICAgKiBSZWZlciB0byB0aGUgbGlzdCBvZiByZXNvdXJjZXR5cGUgY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkbGltaXQgPHA+CiAgICAgKiBUaGUgcmVzb3VyY2UgbGltaXQuIFRoZSB1bml0IGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgdGhlIHJlc291cmNlIGJlaW5nIGxpbWl0ZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRSZXNvdXJjZUxpbWl0KCR0eXBlLCAkbGltaXQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbWFnZSByZXNvbHV0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0cmVzb2x1dGlvbi5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeF9yZXNvbHV0aW9uIDxwPgogICAgICogVGhlIGhvcml6b250YWwgcmVzb2x1dGlvbi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeV9yZXNvbHV0aW9uIDxwPgogICAgICogVGhlIHZlcnRpY2FsIHJlc29sdXRpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFJlc29sdXRpb24oJHhfcmVzb2x1dGlvbiwgJHlfcmVzb2x1dGlvbikge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIHNhbXBsaW5nIGZhY3RvcnMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRzYW1wbGluZ2ZhY3RvcnMucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZhY3RvcnMKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2FtcGxpbmdGYWN0b3JzKGFycmF5ICRmYWN0b3JzKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgc2l6ZSBvZiB0aGUgSW1hZ2ljayBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRzaXplLnBocAogICAgICogQHBhcmFtIGludCAkY29sdW1ucwogICAgICogQHBhcmFtIGludCAkcm93cwogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTaXplKCRjb2x1bW5zLCAkcm93cykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGltYWdlIHR5cGUgYXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suc2V0dHlwZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGltYWdlX3R5cGUKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VHlwZSgkaW1hZ2VfdHlwZSkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgaXRlbSBpcyB2YWxpZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnZhbGlkLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IEltYWdpY2sgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suY3VycmVudC5waHAKICAgICAqIEByZXR1cm4gSW1hZ2ljayBzZWxmIG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkge30KCiAgICAvKioKICAgICAqIENoYW5nZSB0aGUgYnJpZ2h0bmVzcyBhbmQvb3IgY29udHJhc3Qgb2YgYW4gaW1hZ2UuIEl0IGNvbnZlcnRzIHRoZSBicmlnaHRuZXNzIGFuZCBjb250cmFzdCBwYXJhbWV0ZXJzIGludG8gc2xvcGUgYW5kIGludGVyY2VwdCBhbmQgY2FsbHMgYSBwb2x5bm9taWNhbCBmdW5jdGlvbiB0byBhcHBseSB0byB0aGUgaW1hZ2UuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suYnJpZ2h0bmVzc2NvbnRyYXN0aW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJyaWdodG5lc3MKICAgICAqIEBwYXJhbSBmbG9hdCAkY29udHJhc3QKICAgICAqIEBwYXJhbSBpbnQgJENIQU5ORUwgW29wdGlvbmFsXQogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAc2luY2UgMy4zLjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJyaWdodG5lc3NDb250cmFzdEltYWdlKCRicmlnaHRuZXNzLCAkY29udHJhc3QsICRDSEFOTkVMID0gSW1hZ2ljazo6Q0hBTk5FTF9ERUZBVUxUKSB7fQoKICAgIC8qKgogICAgICogQXBwbGllcyBhIHVzZXIgc3VwcGxpZWQga2VybmVsIHRvIHRoZSBpbWFnZSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIG1vcnBob2xvZ3kgbWV0aG9kLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLm1vcnBob2xvZ3kucGhwCiAgICAgKiBAcGFyYW0gaW50ICRtb3JwaG9sb2d5TWV0aG9kIFdoaWNoIG1vcnBob2xvZ3kgbWV0aG9kIHRvIHVzZSBvbmUgb2YgdGhlIFxJbWFnaWNrOjpNT1JQSE9MT0dZXyogY29uc3RhbnRzLgogICAgICogQHBhcmFtIGludCAkaXRlcmF0aW9ucyBUaGUgbnVtYmVyIG9mIGl0ZXJhdGlvbiB0byBhcHBseSB0aGUgbW9ycGhvbG9neSBmdW5jdGlvbi4gQSB2YWx1ZSBvZiAtMSBtZWFucyBsb29wIHVudGlsIG5vIGNoYW5nZSBmb3VuZC4gSG93IHRoaXMgaXMgYXBwbGllZCBtYXkgZGVwZW5kIG9uIHRoZSBtb3JwaG9sb2d5IG1ldGhvZC4gVHlwaWNhbGx5IHRoaXMgaXMgYSB2YWx1ZSBvZiAxLgogICAgICogQHBhcmFtIEltYWdpY2tLZXJuZWwgJEltYWdpY2tLZXJuZWwKICAgICAqIEBwYXJhbSBpbnQgJENIQU5ORUwgW29wdGlvbmFsXQogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tLZXJuZWxFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAc2luY2UgMy4zLjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vcnBob2xvZ3koJG1vcnBob2xvZ3lNZXRob2QsICRpdGVyYXRpb25zLCBJbWFnaWNrS2VybmVsICRJbWFnaWNrS2VybmVsLCAkQ0hBTk5FTCA9IEltYWdpY2s6OkNIQU5ORUxfREVGQVVMVCkge30KCiAgICAvKioKICAgICAqIEFwcGxpZXMgYSBjdXN0b20gY29udm9sdXRpb24ga2VybmVsIHRvIHRoZSBpbWFnZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5maWx0ZXIucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2lja0tlcm5lbCAkSW1hZ2lja0tlcm5lbCBBbiBpbnN0YW5jZSBvZiBJbWFnaWNrS2VybmVsIHRoYXQgcmVwcmVzZW50cyBlaXRoZXIgYSBzaW5nbGUga2VybmVsIG9yIGEgbGlua2VkIHNlcmllcyBvZiBrZXJuZWxzLgogICAgICogQHBhcmFtIGludCAkQ0hBTk5FTCBbb3B0aW9uYWxdIFByb3ZpZGUgYW55IGNoYW5uZWwgY29uc3RhbnQgdGhhdCBpcyB2YWxpZCBmb3IgeW91ciBjaGFubmVsIG1vZGUuIFRvIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsIGNvbnN0YW50cyB1c2luZyBiaXR3aXNlIG9wZXJhdG9ycy4gRGVmYXVsdHMgdG8gSW1hZ2ljazo6Q0hBTk5FTF9ERUZBVUxULiBSZWZlciB0byB0aGlzIGxpc3Qgb2YgY2hhbm5lbCBjb25zdGFudHMKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHNpbmNlIDMuMy4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWx0ZXIoSW1hZ2lja0tlcm5lbCAkSW1hZ2lja0tlcm5lbCwgJENIQU5ORUwgPSBJbWFnaWNrOjpDSEFOTkVMX0RFRkFVTFQpIHt9CgogICAgLyoqCiAgICAgKiBBcHBseSBjb2xvciB0cmFuc2Zvcm1hdGlvbiB0byBhbiBpbWFnZS4gVGhlIG1ldGhvZCBwZXJtaXRzIHNhdHVyYXRpb24gY2hhbmdlcywgaHVlIHJvdGF0aW9uLCBsdW1pbmFuY2UgdG8gYWxwaGEsIGFuZCB2YXJpb3VzIG90aGVyIGVmZmVjdHMuIEFsdGhvdWdoIHZhcmlhYmxlLXNpemVkIHRyYW5zZm9ybWF0aW9uIG1hdHJpY2VzIGNhbiBiZSB1c2VkLCB0eXBpY2FsbHkgb25lIHVzZXMgYSA1eDUgbWF0cml4IGZvciBhbiBSR0JBIGltYWdlIGFuZCBhIDZ4NiBmb3IgQ01ZS0EgKG9yIFJHQkEgd2l0aCBvZmZzZXRzKS4KICAgICAqIFRoZSBtYXRyaXggaXMgc2ltaWxhciB0byB0aG9zZSB1c2VkIGJ5IEFkb2JlIEZsYXNoIGV4Y2VwdCBvZmZzZXRzIGFyZSBpbiBjb2x1bW4gNiByYXRoZXIgdGhhbiA1IChpbiBzdXBwb3J0IG9mIENNWUtBIGltYWdlcykgYW5kIG9mZnNldHMgYXJlIG5vcm1hbGl6ZWQgKGRpdmlkZSBGbGFzaCBvZmZzZXQgYnkgMjU1KQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmNvbG9ybWF0cml4aW1hZ2UucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNvbG9yX21hdHJpeAogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAc2luY2UgMy4zLjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbG9yTWF0cml4SW1hZ2UoJGNvbG9yX21hdHJpeCA9IEltYWdpY2s6OkNIQU5ORUxfREVGQVVMVCkge30KCiAgICAvKioKICAgICAqIERlbGV0ZXMgYW4gaW1hZ2UgcHJvcGVydHkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZGVsZXRlaW1hZ2Vwcm9wZXJ0eS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRlbGV0ZS4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHNpbmNlIDMuMy4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVJbWFnZVByb3BlcnR5KCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogSW1wbGVtZW50cyB0aGUgZGlzY3JldGUgRm91cmllciB0cmFuc2Zvcm0gKERGVCkgb2YgdGhlIGltYWdlIGVpdGhlciBhcyBhIG1hZ25pdHVkZSAvIHBoYXNlIG9yIHJlYWwgLyBpbWFnaW5hcnkgaW1hZ2UgcGFpci4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5mb3J3YXJkZm91cmllcnRyYW5zZm9ybWltYWdlLnBocAogICAgICogQHBhcmFtIGJvb2wgJG1hZ25pdHVkZSBJZiB0cnVlLCByZXR1cm4gYXMgbWFnbml0dWRlIC8gcGhhc2UgcGFpciBvdGhlcndpc2UgYSByZWFsIC8gaW1hZ2luYXJ5IGltYWdlIHBhaXIuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEBzaW5jZSAzLjMuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9yd2FyZEZvdXJpZXJUcmFuc2Zvcm1pbWFnZSgkbWFnbml0dWRlKSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgY3VycmVudCBpbWFnZSdzIGNvbXByZXNzaW9uIHR5cGUuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suZ2V0aW1hZ2Vjb21wcmVzc2lvbi5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAc2luY2UgMy4zLjAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEltYWdlQ29tcHJlc3Npb24oKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBTdHJpbmdSZWdpc3RyeSBlbnRyeSBmb3IgdGhlIG5hbWVkIGtleSBvciBmYWxzZSBpZiBub3Qgc2V0LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldHJlZ2lzdHJ5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIFNpbmNlIHZlcnNpb24gPj0gMy40LjMuIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCwgcmF0aGVyIHRoYW4gdGVybWluYXRpbmcgdGhlIHByb2dyYW0uCiAgICAgKiBAc2luY2UgMy4zLjAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSZWdpc3RyeSgka2V5KSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgSW1hZ2VNYWdpY2sgcXVhbnR1bSByYW5nZSBhcyBhbiBpbnRlZ2VyLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmdldHF1YW50dW0ucGhwCiAgICAgKiBAcmV0dXJuIGludAogICAgICogQHNpbmNlIDMuMy4wCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UXVhbnR1bSgpIHt9CgogICAgLyoqCiAgICAgKiBSZXBsYWNlcyBhbnkgZW1iZWRkZWQgZm9ybWF0dGluZyBjaGFyYWN0ZXJzIHdpdGggdGhlIGFwcHJvcHJpYXRlIGltYWdlIHByb3BlcnR5IGFuZCByZXR1cm5zIHRoZSBpbnRlcnByZXRlZCB0ZXh0LiBTZWUgaHR0cHM6Ly93d3cuaW1hZ2VtYWdpY2sub3JnL3NjcmlwdC9lc2NhcGUucGhwIGZvciBlc2NhcGUgc2VxdWVuY2VzLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLmlkZW50aWZ5Zm9ybWF0LnBocAogICAgICogQHNlZSBodHRwczovL3d3dy5pbWFnZW1hZ2ljay5vcmcvc2NyaXB0L2VzY2FwZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVtYmVkVGV4dCBBIHN0cmluZyBjb250YWluaW5nIGZvcm1hdHRpbmcgc2VxdWVuY2VzIGUuZy4gIlRyaW0gYm94OiAlQCBudW1iZXIgb2YgdW5pcXVlIGNvbG9yczogJWsiLgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAc2luY2UgMy4zLjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlkZW50aWZ5Rm9ybWF0KCRlbWJlZFRleHQpIHt9CgogICAgLyoqCiAgICAgKiBJbXBsZW1lbnRzIHRoZSBpbnZlcnNlIGRpc2NyZXRlIEZvdXJpZXIgdHJhbnNmb3JtIChERlQpIG9mIHRoZSBpbWFnZSBlaXRoZXIgYXMgYSBtYWduaXR1ZGUgLyBwaGFzZSBvciByZWFsIC8gaW1hZ2luYXJ5IGltYWdlIHBhaXIuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2suaW52ZXJzZWZvdXJpZXJ0cmFuc2Zvcm1pbWFnZS5waHAKICAgICAqIEBwYXJhbSBJbWFnaWNrICRjb21wbGVtZW50IFRoZSBzZWNvbmQgaW1hZ2UgdG8gY29tYmluZSB3aXRoIHRoaXMgb25lIHRvIGZvcm0gZWl0aGVyIHRoZSBtYWduaXR1ZGUgLyBwaGFzZSBvciByZWFsIC8gaW1hZ2luYXJ5IGltYWdlIHBhaXIuCiAgICAgKiBAcGFyYW0gYm9vbCAkbWFnbml0dWRlIElmIHRydWUsIGNvbWJpbmUgYXMgbWFnbml0dWRlIC8gcGhhc2UgcGFpciBvdGhlcndpc2UgYSByZWFsIC8gaW1hZ2luYXJ5IGltYWdlIHBhaXIuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEBzaW5jZSAzLjMuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW52ZXJzZUZvdXJpZXJUcmFuc2Zvcm1JbWFnZSgkY29tcGxlbWVudCwgJG1hZ25pdHVkZSkge30KCiAgICAvKioKICAgICAqIExpc3QgYWxsIHRoZSByZWdpc3RyeSBzZXR0aW5ncy4gUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIGtleS92YWx1ZSBwYWlycyBpbiB0aGUgcmVnaXN0cnkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5saXN0cmVnaXN0cnkucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGtleS92YWx1ZXMgZnJvbSB0aGUgcmVnaXN0cnkuCiAgICAgKiBAc2luY2UgMy4zLjAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsaXN0UmVnaXN0cnkoKSB7fQoKICAgIC8qKgogICAgICogUm90YXRpb25hbCBibHVycyBhbiBpbWFnZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5yb3RhdGlvbmFsYmx1cmltYWdlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRhbmdsZQogICAgICogQHBhcmFtIGludCAkQ0hBTk5FTAogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAc2luY2UgMy4zLjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJvdGF0aW9uYWxCbHVySW1hZ2UoJGFuZ2xlLCAkQ0hBTk5FTCA9IEltYWdpY2s6OkNIQU5ORUxfREVGQVVMVCkge30KCiAgICAvKioKICAgICAqIFNlbGVjdGl2ZWx5IGJsdXIgYW4gaW1hZ2Ugd2l0aGluIGEgY29udHJhc3QgdGhyZXNob2xkLiBJdCBpcyBzaW1pbGFyIHRvIHRoZSB1bnNoYXJwZW4gbWFzayB0aGF0IHNoYXJwZW5zIGV2ZXJ5dGhpbmcgd2l0aCBjb250cmFzdCBhYm92ZSBhIGNlcnRhaW4gdGhyZXNob2xkLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnNlbGVjdGl2ZWJsdXJpbWFnZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkcmFkaXVzCiAgICAgKiBAcGFyYW0gZmxvYXQgJHNpZ21hCiAgICAgKiBAcGFyYW0gZmxvYXQgJHRocmVzaG9sZAogICAgICogQHBhcmFtIGludCAkQ0hBTk5FTCBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLiBUbyBhcHBseSB0byBtb3JlIHRoYW4gb25lIGNoYW5uZWwsIGNvbWJpbmUgY2hhbm5lbCBjb25zdGFudHMgdXNpbmcgYml0d2lzZSBvcGVyYXRvcnMuIERlZmF1bHRzIHRvIEltYWdpY2s6OkNIQU5ORUxfREVGQVVMVC4gUmVmZXIgdG8gdGhpcyBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEBzaW5jZSAzLjMuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VsZWN0aXZlQmx1ckltYWdlKCRyYWRpdXMsICRzaWdtYSwgJHRocmVzaG9sZCwgJENIQU5ORUwgPSBJbWFnaWNrOjpDSEFOTkVMX0RFRkFVTFQpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgd2hldGhlciBhbnRpYWxpYXNpbmcgc2hvdWxkIGJlIHVzZWQgZm9yIG9wZXJhdGlvbnMuIE9uIGJ5IGRlZmF1bHQuCiAgICAgKiBAcGFyYW0gYm9vbCAkYW50aWFsaWFzCiAgICAgKiBAcmV0dXJuIGludAogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHNpbmNlIDMuMy4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBbnRpQWxpYXMoJGFudGlhbGlhcykge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRpbWFnZWJpYXNxdWFudHVtLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkYmlhcwogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAc2luY2UgMy4zLjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEltYWdlQmlhc1F1YW50dW0oJGJpYXMpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgSW1hZ2ljayBpbWFnZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRwcm9ncmVzc21vbml0b3IucGhwCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIFRoZSBwcm9ncmVzcyBmdW5jdGlvbiB0byBjYWxsLiBJdCBzaG91bGQgcmV0dXJuIHRydWUgaWYgaW1hZ2UgcHJvY2Vzc2luZyBzaG91bGQgY29udGludWUsIG9yIGZhbHNlIGlmIGl0IHNob3VsZCBiZSBjYW5jZWxsZWQuCiAgICAgKiBUaGUgb2Zmc2V0IHBhcmFtZXRlciBpbmRpY2F0ZXMgdGhlIHByb2dyZXNzIGFuZCB0aGUgc3BhbiBwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSB0b3RhbCBhbW91bnQgb2Ygd29yayBuZWVkZWQgdG8gYmUgZG9uZS4KICAgICAqIDxwcmU+IGJvb2wgY2FsbGJhY2sgKCBtaXhlZCAkb2Zmc2V0ICwgbWl4ZWQgJHNwYW4gKSA8L3ByZT4KICAgICAqIDxiPkNhdXRpb248L2I+CiAgICAgKiBUaGUgdmFsdWVzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gYXJlIG5vdCBjb25zaXN0ZW50LiBJbiBwYXJ0aWN1bGFyIHRoZSBzcGFuIHBhcmFtZXRlciBjYW4gaW5jcmVhc2UgZHVyaW5nIGltYWdlIHByb2Nlc3NpbmcuIEJlY2F1c2Ugb2YgdGhpcyBjYWxjdWxhdGluZyB0aGUgcGVyY2VudGFnZSBjb21wbGV0ZSBvZiBhbiBpbWFnZSBvcGVyYXRpb24gaXMgbm90IHRyaXZpYWwuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEBzaW5jZSAzLjMuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UHJvZ3Jlc3NNb25pdG9yKCRjYWxsYmFjaykge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIEltYWdlTWFnaWNrIHJlZ2lzdHJ5IGVudHJ5IG5hbWVkIGtleSB0byB2YWx1ZS4gVGhpcyBpcyBtb3N0IHVzZWZ1bCBmb3Igc2V0dGluZyAidGVtcG9yYXJ5LXBhdGgiIHdoaWNoIGNvbnRyb2xzIHdoZXJlIEltYWdlTWFnaWNrIGNyZWF0ZXMgdGVtcG9yYXJ5IGltYWdlcyBlLmcuIHdoaWxlIHByb2Nlc3NpbmcgUERGcy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zZXRyZWdpc3RyeS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHNpbmNlIDMuMy4wCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0UmVnaXN0cnkoJGtleSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogUmVwbGFjZSBlYWNoIHBpeGVsIHdpdGggY29ycmVzcG9uZGluZyBzdGF0aXN0aWMgZnJvbSB0aGUgbmVpZ2hib3Job29kIG9mIHRoZSBzcGVjaWZpZWQgd2lkdGggYW5kIGhlaWdodC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2ljay5zdGF0aXN0aWNpbWFnZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJHR5cGUKICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoCiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQKICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXQogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAc2luY2UgMy4zLjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0YXRpc3RpY0ltYWdlKCR0eXBlLCAkd2lkdGgsICRoZWlnaHQsICRjaGFubmVsID0gSW1hZ2ljazo6Q0hBTk5FTF9ERUZBVUxUKSB7fQoKICAgIC8qKgogICAgICogU2VhcmNoZXMgZm9yIGEgc3ViaW1hZ2UgaW4gdGhlIGN1cnJlbnQgaW1hZ2UgYW5kIHJldHVybnMgYSBzaW1pbGFyaXR5IGltYWdlIHN1Y2ggdGhhdCBhbiBleGFjdCBtYXRjaCBsb2NhdGlvbiBpcwogICAgICogY29tcGxldGVseSB3aGl0ZSBhbmQgaWYgbm9uZSBvZiB0aGUgcGl4ZWxzIG1hdGNoLCBibGFjaywgb3RoZXJ3aXNlIHNvbWUgZ3JheSBsZXZlbCBpbi1iZXR3ZWVuLgogICAgICogWW91IGNhbiBhbHNvIHBhc3MgaW4gdGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMgYmVzdE1hdGNoIGFuZCBzaW1pbGFyaXR5LiBBZnRlciBjYWxsaW5nIHRoZSBmdW5jdGlvbiBzaW1pbGFyaXR5IHdpbGwKICAgICAqIGJlIHNldCB0byB0aGUgJ3Njb3JlJyBvZiB0aGUgc2ltaWxhcml0eSBiZXR3ZWVuIHRoZSBzdWJpbWFnZSBhbmQgdGhlIG1hdGNoaW5nIHBvc2l0aW9uIGluIHRoZSBsYXJnZXIgaW1hZ2UsCiAgICAgKiBiZXN0TWF0Y2ggd2lsbCBjb250YWluIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggZWxlbWVudHMgeCwgeSwgd2lkdGgsIGhlaWdodCB0aGF0IGRlc2NyaWJlIHRoZSBtYXRjaGluZyByZWdpb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrLnN1YmltYWdlbWF0Y2gucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2ljayAkaW1hZ2ljawogICAgICogQHBhcmFtIGFycmF5ICYkYmVzdE1hdGNoIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSBmbG9hdCAmJHNpbWlsYXJpdHkgW29wdGlvbmFsXSBBIG5ldyBpbWFnZSB0aGF0IGRpc3BsYXlzIHRoZSBhbW91bnQgb2Ygc2ltaWxhcml0eSBhdCBlYWNoIHBpeGVsLgogICAgICogQHBhcmFtIGZsb2F0ICRzaW1pbGFyaXR5X3RocmVzaG9sZCBbb3B0aW9uYWxdIE9ubHkgdXNlZCBpZiBjb21waWxlZCB3aXRoIEltYWdlTWFnaWNrIChsaWJyYXJ5KSA+IDcKICAgICAqIEBwYXJhbSBpbnQgJG1ldHJpYyBbb3B0aW9uYWxdIE9ubHkgdXNlZCBpZiBjb21waWxlZCB3aXRoIEltYWdlTWFnaWNrIChsaWJyYXJ5KSA+IDcKICAgICAqIEByZXR1cm4gSW1hZ2ljawogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHNpbmNlIDMuMy4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdWJJbWFnZU1hdGNoKEltYWdpY2sgJGltYWdpY2ssIGFycmF5ICYkYmVzdE1hdGNoLCAmJHNpbWlsYXJpdHksICRzaW1pbGFyaXR5X3RocmVzaG9sZCwgJG1ldHJpYykge30KCiAgICAvKioKICAgICAqIElzIGFuIGFsaWFzIG9mIEltYWdpY2s6OnN1YkltYWdlTWF0Y2gKICAgICAqCiAgICAgKiBAcGFyYW0gSW1hZ2ljayAkaW1hZ2ljawogICAgICogQHBhcmFtIGFycmF5ICYkYmVzdE1hdGNoIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSBmbG9hdCAmJHNpbWlsYXJpdHkgW29wdGlvbmFsXSBBIG5ldyBpbWFnZSB0aGF0IGRpc3BsYXlzIHRoZSBhbW91bnQgb2Ygc2ltaWxhcml0eSBhdCBlYWNoIHBpeGVsLgogICAgICogQHBhcmFtIGZsb2F0ICRzaW1pbGFyaXR5X3RocmVzaG9sZCBbb3B0aW9uYWxdCiAgICAgKiBAcGFyYW0gaW50ICRtZXRyaWMgW29wdGlvbmFsXQogICAgICogQHJldHVybiBJbWFnaWNrCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAc2VlIEltYWdpY2s6OnN1YkltYWdlTWF0Y2goKSBUaGlzIGZ1bmN0aW9uIGlzIGFuIGFsaWFzIG9mIHN1YkltYWdlTWF0Y2goKQogICAgICogQHNpbmNlIDMuNC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaW1pbGFyaXR5SW1hZ2UoSW1hZ2ljayAkaW1hZ2ljaywgYXJyYXkgJiRiZXN0TWF0Y2gsICYkc2ltaWxhcml0eSwgJHNpbWlsYXJpdHlfdGhyZXNob2xkLCAkbWV0cmljKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbnkgSW1hZ2VNYWdpY2sgIGNvbmZpZ3VyZSBvcHRpb25zIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBwYXR0ZXJuIChlLmcuICIqIiBmb3IgYWxsKS4gT3B0aW9ucyBpbmNsdWRlIE5BTUUsIFZFUlNJT04sIExJQl9WRVJTSU9OLCBldGMuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHNpbmNlIDMuNC4wCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25maWd1cmVPcHRpb25zKCkge30KCiAgICAvKioKICAgICAqIEdldEZlYXR1cmVzKCkgcmV0dXJucyB0aGUgSW1hZ2VNYWdpY2sgZmVhdHVyZXMgdGhhdCBoYXZlIGJlZW4gY29tcGlsZWQgaW50byB0aGUgcnVudGltZS4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAc2luY2UgMy40LjAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZlYXR1cmVzKCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAc2luY2UgMy40LjAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEhEUklFbmFibGVkKCkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGltYWdlIGNoYW5uZWwgbWFzay4gUmV0dXJucyB0aGUgcHJldmlvdXMgc2V0IGNoYW5uZWwgbWFzay4KICAgICAqIE9ubHkgd29ya3Mgd2l0aCBJbWFnaWNrID49IDcKICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEBzaW5jZSAzLjQuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VDaGFubmVsTWFzaygkY2hhbm5lbCkge30KCiAgICAvKioKICAgICAqIE1lcmdlIG11bHRpcGxlIGltYWdlcyBvZiB0aGUgc2FtZSBzaXplIHRvZ2V0aGVyIHdpdGggdGhlIHNlbGVjdGVkIG9wZXJhdG9yLiBodHRwczovL3d3dy5pbWFnZW1hZ2ljay5vcmcvVXNhZ2UvbGF5ZXJzLyNldmFsdWF0ZS1zZXF1ZW5jZQogICAgICogQHBhcmFtIGludCAkRVZBTFVBVEVfQ09OU1RBTlQKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHNlZSBodHRwczovL3d3dy5pbWFnZW1hZ2ljay5vcmcvVXNhZ2UvbGF5ZXJzLyNldmFsdWF0ZS1zZXF1ZW5jZQogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHNpbmNlIDMuNC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBldmFsdWF0ZUltYWdlcygkRVZBTFVBVEVfQ09OU1RBTlQpIHt9CgogICAgLyoqCiAgICAgKiBFeHRyYWN0cyB0aGUgJ21lYW4nIGZyb20gdGhlIGltYWdlIGFuZCBhZGp1c3QgdGhlIGltYWdlIHRvIHRyeSBtYWtlIHNldCBpdHMgZ2FtbWEgYXBwcm9wcmlhdGVseS4KICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgW29wdGlvbmFsXSBEZWZhdWx0IHZhbHVlIEltYWdpY2s6OkNIQU5ORUxfQUxMCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEBzaW5jZSAzLjQuMQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXV0b0dhbW1hSW1hZ2UoJGNoYW5uZWwgPSBJbWFnaWNrOjpDSEFOTkVMX0FMTCkge30KCiAgICAvKioKICAgICAqIEFkanVzdHMgYW4gaW1hZ2Ugc28gdGhhdCBpdHMgb3JpZW50YXRpb24gaXMgc3VpdGFibGUgJCBmb3Igdmlld2luZyAoaS5lLiB0b3AtbGVmdCBvcmllbnRhdGlvbikuCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEBzaW5jZSAzLjQuMQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXV0b09yaWVudCgpIHt9CgogICAgLyoqCiAgICAgKiBDb21wb3NpdGUgb25lIGltYWdlIG9udG8gYW5vdGhlciB1c2luZyB0aGUgc3BlY2lmaWVkIGdyYXZpdHkuCiAgICAgKgogICAgICogQHBhcmFtIEltYWdpY2sgJGltYWdpY2sKICAgICAqIEBwYXJhbSBpbnQgJENPTVBPU0lURV9DT05TVEFOVAogICAgICogQHBhcmFtIGludCAkR1JBVklUWV9DT05TVEFOVAogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAc2luY2UgMy40LjEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBvc2l0ZUltYWdlR3Jhdml0eShJbWFnaWNrICRpbWFnaWNrLCAkQ09NUE9TSVRFX0NPTlNUQU5ULCAkR1JBVklUWV9DT05TVEFOVCkge30KCiAgICAvKioKICAgICAqIEF0dGVtcHRzIHRvIGluY3JlYXNlIHRoZSBhcHBlYXJhbmNlIG9mIGxhcmdlLXNjYWxlIGxpZ2h0LWRhcmsgdHJhbnNpdGlvbnMuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMKICAgICAqIEBwYXJhbSBmbG9hdCAkc3RyZW5ndGgKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHNpbmNlIDMuNC4xCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2NhbENvbnRyYXN0SW1hZ2UoJHJhZGl1cywgJHN0cmVuZ3RoKSB7fQoKICAgIC8qKgogICAgICogSWRlbnRpZmllcyB0aGUgcG90ZW50aWFsIGltYWdlIHR5cGUsIHJldHVybnMgb25lIG9mIHRoZSBJbWFnaWNrOjpJTUdUWVBFXyogY29uc3RhbnRzCiAgICAgKiBAcmV0dXJuIGludAogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHNpbmNlIDMuNC4zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpZGVudGlmeUltYWdlVHlwZSgpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBpbWFnZSB0byB0aGUgc3BlY2lmaWVkIGFscGhhIGxldmVsLiBXaWxsIHJlcGxhY2UgSW1hZ2lja0RyYXc6OnNldE9wYWNpdHkoKQogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkYWxwaGEKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHNpbmNlIDMuNC4zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZUFscGhhKCRhbHBoYSkge30KfQoKLyoqCiAqIEBtZXRob2QgSW1hZ2lja0RyYXcgY2xvbmUoKSAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+TWFrZXMgYW4gZXhhY3QgY29weSBvZiB0aGUgc3BlY2lmaWVkIEltYWdpY2tEcmF3IG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmltYWdpY2tkcmF3LnBocAogKi8KY2xhc3MgSW1hZ2lja0RyYXcKewogICAgcHVibGljIGZ1bmN0aW9uIHJlc2V0VmVjdG9yR3JhcGhpY3MoKSB7fQoKICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUZXh0S2VybmluZygpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGtlcm5pbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRleHRLZXJuaW5nKCRrZXJuaW5nKSB7fQoKICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUZXh0SW50ZXJXb3JkU3BhY2luZygpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJHNwYWNpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRleHRJbnRlcldvcmRTcGFjaW5nKCRzcGFjaW5nKSB7fQoKICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUZXh0SW50ZXJMaW5lU3BhY2luZygpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJHNwYWNpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRleHRJbnRlckxpbmVTcGFjaW5nKCRzcGFjaW5nKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogVGhlIEltYWdpY2tEcmF3IGNvbnN0cnVjdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3IgdG8gYmUgdXNlZCBmb3IgZHJhd2luZyBmaWxsZWQgb2JqZWN0cwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRmaWxsY29sb3IucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2lja1BpeGVsICRmaWxsX3BpeGVsIDxwPgogICAgICogSW1hZ2lja1BpeGVsIHRvIHVzZSB0byBzZXQgdGhlIGNvbG9yCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tEcmF3RXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RmlsbENvbG9yKEltYWdpY2tQaXhlbCAkZmlsbF9waXhlbCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIG9wYWNpdHkgdG8gdXNlIHdoZW4gZHJhd2luZyB1c2luZyB0aGUgZmlsbCBjb2xvciBvciBmaWxsIHRleHR1cmUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2V0ZmlsbGFscGhhLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRvcGFjaXR5IDxwPgogICAgICogZmlsbCBhbHBoYQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICAjW0RlcHJlY2F0ZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RmlsbEFscGhhKCRvcGFjaXR5KSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW1hZ2UgcmVzb2x1dGlvbgogICAgICogQHBhcmFtIGZsb2F0ICR4X3Jlc29sdXRpb24gPHA+VGhlIGhvcml6b250YWwgcmVzb2x1dGlvbi48L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHlfcmVzb2x1dGlvbiA8cD5UaGUgdmVydGljYWwgcmVzb2x1dGlvbi48L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgSW1hZ2lja0RyYXdFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZXNvbHV0aW9uKCR4X3Jlc29sdXRpb24sICR5X3Jlc29sdXRpb24pIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBjb2xvciB1c2VkIGZvciBzdHJva2luZyBvYmplY3Qgb3V0bGluZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2V0c3Ryb2tlY29sb3IucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2lja1BpeGVsICRzdHJva2VfcGl4ZWwgPHA+CiAgICAgKiB0aGUgc3Ryb2tlIGNvbG9yCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tEcmF3RXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3Ryb2tlQ29sb3IoSW1hZ2lja1BpeGVsICRzdHJva2VfcGl4ZWwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTcGVjaWZpZXMgdGhlIG9wYWNpdHkgb2Ygc3Ryb2tlZCBvYmplY3Qgb3V0bGluZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2V0c3Ryb2tlYWxwaGEucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJG9wYWNpdHkgPHA+CiAgICAgKiBvcGFjaXR5CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTdHJva2VBbHBoYSgkb3BhY2l0eSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIHdpZHRoIG9mIHRoZSBzdHJva2UgdXNlZCB0byBkcmF3IG9iamVjdCBvdXRsaW5lcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRzdHJva2V3aWR0aC5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkc3Ryb2tlX3dpZHRoIDxwPgogICAgICogc3Ryb2tlIHdpZHRoCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTdHJva2VXaWR0aCgkc3Ryb2tlX3dpZHRoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQ2xlYXJzIHRoZSBJbWFnaWNrRHJhdwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5jbGVhci5waHAKICAgICAqIEByZXR1cm4gYm9vbCBhbiBJbWFnaWNrRHJhdyBvYmplY3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhcigpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBEcmF3cyBhIGNpcmNsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5jaXJjbGUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJG94IDxwPgogICAgICogb3JpZ2luIHggY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRveSA8cD4KICAgICAqIG9yaWdpbiB5IGNvb3JkaW5hdGUKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkcHggPHA+CiAgICAgKiBwZXJpbWV0ZXIgeCBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHB5IDxwPgogICAgICogcGVyaW1ldGVyIHkgY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2lyY2xlKCRveCwgJG95LCAkcHgsICRweSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERyYXdzIHRleHQgb24gdGhlIGltYWdlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmFubm90YXRpb24ucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHggPHA+CiAgICAgKiBUaGUgeCBjb29yZGluYXRlIHdoZXJlIHRleHQgaXMgZHJhd24KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeSA8cD4KICAgICAqIFRoZSB5IGNvb3JkaW5hdGUgd2hlcmUgdGV4dCBpcyBkcmF3bgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkdGV4dCA8cD4KICAgICAqIFRoZSB0ZXh0IHRvIGRyYXcgb24gdGhlIGltYWdlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tEcmF3RXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYW5ub3RhdGlvbigkeCwgJHksICR0ZXh0KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQ29udHJvbHMgd2hldGhlciB0ZXh0IGlzIGFudGlhbGlhc2VkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnNldHRleHRhbnRpYWxpYXMucGhwCiAgICAgKiBAcGFyYW0gYm9vbCAkYW50aUFsaWFzCiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUZXh0QW50aWFsaWFzKCRhbnRpQWxpYXMpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTcGVjaWZpZXMgc3BlY2lmaWVzIHRoZSB0ZXh0IGNvZGUgc2V0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnNldHRleHRlbmNvZGluZy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIDxwPgogICAgICogdGhlIGVuY29kaW5nIG5hbWUKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRleHRFbmNvZGluZygkZW5jb2RpbmcpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBmdWxseS1zcGVjaWZpZWQgZm9udCB0byB1c2Ugd2hlbiBhbm5vdGF0aW5nIHdpdGggdGV4dAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRmb250LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZm9udF9uYW1lCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0RyYXdFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGb250KCRmb250X25hbWUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBmb250IGZhbWlseSB0byB1c2Ugd2hlbiBhbm5vdGF0aW5nIHdpdGggdGV4dAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRmb250ZmFtaWx5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZm9udF9mYW1pbHkgPHA+CiAgICAgKiB0aGUgZm9udCBmYW1pbHkKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRHJhd0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEZvbnRGYW1pbHkoJGZvbnRfZmFtaWx5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgZm9udCBwb2ludHNpemUgdG8gdXNlIHdoZW4gYW5ub3RhdGluZyB3aXRoIHRleHQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2V0Zm9udHNpemUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHBvaW50c2l6ZSA8cD4KICAgICAqIHRoZSBwb2ludCBzaXplCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGb250U2l6ZSgkcG9pbnRzaXplKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgZm9udCBzdHlsZSB0byB1c2Ugd2hlbiBhbm5vdGF0aW5nIHdpdGggdGV4dAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRmb250c3R5bGUucGhwCiAgICAgKiBAcGFyYW0gaW50ICRzdHlsZSA8cD4KICAgICAqIFNUWUxFVFlQRV8gY29uc3RhbnQKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEZvbnRTdHlsZSgkc3R5bGUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBmb250IHdlaWdodAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRmb250d2VpZ2h0LnBocAogICAgICogQHBhcmFtIGludCAkZm9udF93ZWlnaHQKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBJbWFnaWNrRHJhd0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEZvbnRXZWlnaHQoJGZvbnRfd2VpZ2h0KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgZm9udAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5nZXRmb250LnBocAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgYSBzdHJpbmcgb24gc3VjY2VzcyBhbmQgZmFsc2UgaWYgbm8gZm9udCBpcyBzZXQuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGb250KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGZvbnQgZmFtaWx5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmdldGZvbnRmYW1pbHkucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgZm9udCBmYW1pbHkgY3VycmVudGx5IHNlbGVjdGVkIG9yIGZhbHNlIGlmIGZvbnQgZmFtaWx5IGlzIG5vdCBzZXQuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGb250RmFtaWx5KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGZvbnQgcG9pbnRzaXplCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmdldGZvbnRzaXplLnBocAogICAgICogQHJldHVybiBmbG9hdCB0aGUgZm9udCBzaXplIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBJbWFnaWNrRHJhdyBvYmplY3QuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGb250U2l6ZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBmb250IHN0eWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmdldGZvbnRzdHlsZS5waHAKICAgICAqIEByZXR1cm4gaW50IHRoZSBmb250IHN0eWxlIGNvbnN0YW50IChTVFlMRV8pIGFzc29jaWF0ZWQgd2l0aCB0aGUgSW1hZ2lja0RyYXcgb2JqZWN0CiAgICAgKiBvciAwIGlmIG5vIHN0eWxlIGlzIHNldC4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZvbnRTdHlsZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBmb250IHdlaWdodAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5nZXRmb250d2VpZ2h0LnBocAogICAgICogQHJldHVybiBpbnQgYW4gaW50IG9uIHN1Y2Nlc3MgYW5kIDAgaWYgbm8gd2VpZ2h0IGlzIHNldC4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZvbnRXZWlnaHQoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRnJlZXMgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmRlc3Ryb3kucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXN0cm95KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERyYXdzIGEgcmVjdGFuZ2xlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnJlY3RhbmdsZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeDEgPHA+CiAgICAgKiB4IGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lcgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5MSA8cD4KICAgICAqIHkgY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHgyIDxwPgogICAgICogeCBjb29yZGluYXRlIG9mIHRoZSBib3R0b20gcmlnaHQgY29ybmVyCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkyIDxwPgogICAgICogeSBjb29yZGluYXRlIG9mIHRoZSBib3R0b20gcmlnaHQgY29ybmVyCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWN0YW5nbGUoJHgxLCAkeTEsICR4MiwgJHkyKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRHJhd3MgYSByb3VuZGVkIHJlY3RhbmdsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5yb3VuZHJlY3RhbmdsZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeDEgPHA+CiAgICAgKiB4IGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lcgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5MSA8cD4KICAgICAqIHkgY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHgyIDxwPgogICAgICogeCBjb29yZGluYXRlIG9mIHRoZSBib3R0b20gcmlnaHQKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeTIgPHA+CiAgICAgKiB5IGNvb3JkaW5hdGUgb2YgdGhlIGJvdHRvbSByaWdodAogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRyeCA8cD4KICAgICAqIHggcm91bmRpbmcKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkcnkgPHA+CiAgICAgKiB5IHJvdW5kaW5nCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb3VuZFJlY3RhbmdsZSgkeDEsICR5MSwgJHgyLCAkeTIsICRyeCwgJHJ5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRHJhd3MgYW4gZWxsaXBzZSBvbiB0aGUgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuZWxsaXBzZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkb3gKICAgICAqIEBwYXJhbSBmbG9hdCAkb3kKICAgICAqIEBwYXJhbSBmbG9hdCAkcngKICAgICAqIEBwYXJhbSBmbG9hdCAkcnkKICAgICAqIEBwYXJhbSBmbG9hdCAkc3RhcnQKICAgICAqIEBwYXJhbSBmbG9hdCAkZW5kCiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbGxpcHNlKCRveCwgJG95LCAkcngsICRyeSwgJHN0YXJ0LCAkZW5kKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2tld3MgdGhlIGN1cnJlbnQgY29vcmRpbmF0ZSBzeXN0ZW0gaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnNrZXd4LnBocAogICAgICogQHBhcmFtIGZsb2F0ICRkZWdyZWVzIDxwPgogICAgICogZGVncmVlcyB0byBza2V3CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBza2V3WCgkZGVncmVlcykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNrZXdzIHRoZSBjdXJyZW50IGNvb3JkaW5hdGUgc3lzdGVtIGluIHRoZSB2ZXJ0aWNhbCBkaXJlY3Rpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2tld3kucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJGRlZ3JlZXMgPHA+CiAgICAgKiBkZWdyZWVzIHRvIHNrZXcKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNrZXdZKCRkZWdyZWVzKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQXBwbGllcyBhIHRyYW5zbGF0aW9uIHRvIHRoZSBjdXJyZW50IGNvb3JkaW5hdGUgc3lzdGVtCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnRyYW5zbGF0ZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeCA8cD4KICAgICAqIGhvcml6b250YWwgdHJhbnNsYXRpb24KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeSA8cD4KICAgICAqIHZlcnRpY2FsIHRyYW5zbGF0aW9uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2xhdGUoJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRHJhd3MgYSBsaW5lCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmxpbmUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHN4IDxwPgogICAgICogc3RhcnRpbmcgeCBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHN5IDxwPgogICAgICogc3RhcnRpbmcgeSBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJGV4IDxwPgogICAgICogZW5kaW5nIHggY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRleSA8cD4KICAgICAqIGVuZGluZyB5IGNvb3JkaW5hdGUKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpbmUoJHN4LCAkc3ksICRleCwgJGV5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRHJhd3MgYW4gYXJjCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmFyYy5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkc3ggPHA+CiAgICAgKiBTdGFydGluZyB4IG9yZGluYXRlIG9mIGJvdW5kaW5nIHJlY3RhbmdsZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRzeSA8cD4KICAgICAqIHN0YXJ0aW5nIHkgb3JkaW5hdGUgb2YgYm91bmRpbmcgcmVjdGFuZ2xlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJGV4IDxwPgogICAgICogZW5kaW5nIHggb3JkaW5hdGUgb2YgYm91bmRpbmcgcmVjdGFuZ2xlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJGV5IDxwPgogICAgICogZW5kaW5nIHkgb3JkaW5hdGUgb2YgYm91bmRpbmcgcmVjdGFuZ2xlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHNkIDxwPgogICAgICogc3RhcnRpbmcgZGVncmVlcyBvZiByb3RhdGlvbgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRlZCA8cD4KICAgICAqIGVuZGluZyBkZWdyZWVzIG9mIHJvdGF0aW9uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcmMoJHN4LCAkc3ksICRleCwgJGV5LCAkc2QsICRlZCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFBhaW50cyBvbiB0aGUgaW1hZ2UncyBvcGFjaXR5IGNoYW5uZWwKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcubWF0dGUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHggPHA+CiAgICAgKiB4IGNvb3JkaW5hdGUgb2YgdGhlIG1hdHRlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkgPHA+CiAgICAgKiB5IGNvb3JkaW5hdGUgb2YgdGhlIG1hdHRlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRwYWludE1ldGhvZCA8cD4KICAgICAqIFBBSU5UXyBjb25zdGFudAogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXR0ZSgkeCwgJHksICRwYWludE1ldGhvZCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERyYXdzIGEgcG9seWdvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5wb2x5Z29uLnBocAogICAgICogQHBhcmFtIGFycmF5ICRjb29yZGluYXRlcyA8cD4KICAgICAqIG11bHRpZGltZW5zaW9uYWwgYXJyYXkgbGlrZSBhcnJheSggYXJyYXkoICd4JyA9PiAzLCAneScgPT4gNCApLCBhcnJheSggJ3gnID0+IDIsICd5JyA9PiA2ICkgKTsKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrRHJhd0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBvbHlnb24oYXJyYXkgJGNvb3JkaW5hdGVzKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRHJhd3MgYSBwb2ludAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5wb2ludC5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeCA8cD4KICAgICAqIHBvaW50J3MgeCBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkgPHA+CiAgICAgKiBwb2ludCdzIHkgY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9pbnQoJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgdGV4dCBkZWNvcmF0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmdldHRleHRkZWNvcmF0aW9uLnBocAogICAgICogQHJldHVybiBpbnQgb25lIG9mIHRoZSBERUNPUkFUSU9OXyBjb25zdGFudHMKICAgICAqIGFuZCAwIGlmIG5vIGRlY29yYXRpb24gaXMgc2V0LgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGV4dERlY29yYXRpb24oKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgY29kZSBzZXQgdXNlZCBmb3IgdGV4dCBhbm5vdGF0aW9ucwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5nZXR0ZXh0ZW5jb2RpbmcucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBjb2RlIHNldAogICAgICogb3IgZmFsc2UgaWYgdGV4dCBlbmNvZGluZyBpcyBub3Qgc2V0LgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGV4dEVuY29kaW5nKCkge30KCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Rm9udFN0cmV0Y2goKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgZm9udCBzdHJldGNoIHRvIHVzZSB3aGVuIGFubm90YXRpbmcgd2l0aCB0ZXh0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnNldGZvbnRzdHJldGNoLnBocAogICAgICogQHBhcmFtIGludCAkZm9udFN0cmV0Y2ggPHA+CiAgICAgKiBTVFJFVENIXyBjb25zdGFudAogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Rm9udFN0cmV0Y2goJGZvbnRTdHJldGNoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQ29udHJvbHMgd2hldGhlciBzdHJva2VkIG91dGxpbmVzIGFyZSBhbnRpYWxpYXNlZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRzdHJva2VhbnRpYWxpYXMucGhwCiAgICAgKiBAcGFyYW0gYm9vbCAkc3Ryb2tlX2FudGlhbGlhcyA8cD4KICAgICAqIHRoZSBhbnRpYWxpYXMgc2V0dGluZwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3Ryb2tlQW50aWFsaWFzKCRzdHJva2VfYW50aWFsaWFzKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU3BlY2lmaWVzIGEgdGV4dCBhbGlnbm1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2V0dGV4dGFsaWdubWVudC5waHAKICAgICAqIEBwYXJhbSBpbnQgJGFsaWdubWVudCA8cD4KICAgICAqIEFMSUdOXyBjb25zdGFudAogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGV4dEFsaWdubWVudCgkYWxpZ25tZW50KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU3BlY2lmaWVzIGEgZGVjb3JhdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXR0ZXh0ZGVjb3JhdGlvbi5waHAKICAgICAqIEBwYXJhbSBpbnQgJGRlY29yYXRpb24gPHA+CiAgICAgKiBERUNPUkFUSU9OXyBjb25zdGFudAogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGV4dERlY29yYXRpb24oJGRlY29yYXRpb24pIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTcGVjaWZpZXMgdGhlIGNvbG9yIG9mIGEgYmFja2dyb3VuZCByZWN0YW5nbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2V0dGV4dHVuZGVyY29sb3IucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2lja1BpeGVsICR1bmRlcl9jb2xvciA8cD4KICAgICAqIHRoZSB1bmRlciBjb2xvcgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICogQHRocm93cyBJbWFnaWNrRHJhd0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRleHRVbmRlckNvbG9yKEltYWdpY2tQaXhlbCAkdW5kZXJfY29sb3IpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBvdmVyYWxsIGNhbnZhcyBzaXplCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnNldHZpZXdib3gucGhwCiAgICAgKiBAcGFyYW0gaW50ICR4MSA8cD4KICAgICAqIGxlZnQgeCBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR5MSA8cD4KICAgICAqIGxlZnQgeSBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR4MiA8cD4KICAgICAqIHJpZ2h0IHggY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkeTIgPHA+CiAgICAgKiByaWdodCB5IGNvb3JkaW5hdGUKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFZpZXdib3goJHgxLCAkeTEsICR4MiwgJHkyKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQWRqdXN0cyB0aGUgY3VycmVudCBhZmZpbmUgdHJhbnNmb3JtYXRpb24gbWF0cml4CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmFmZmluZS5waHAKICAgICAqIEBwYXJhbSBhcnJheSAkYWZmaW5lIDxwPgogICAgICogQWZmaW5lIG1hdHJpeCBwYXJhbWV0ZXJzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tEcmF3RXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWZmaW5lKGFycmF5ICRhZmZpbmUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBEcmF3cyBhIGJlemllciBjdXJ2ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5iZXppZXIucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNvb3JkaW5hdGVzIDxwPgogICAgICogTXVsdGlkaW1lbnNpb25hbCBhcnJheSBsaWtlIGFycmF5KCBhcnJheSggJ3gnID0+IDEsICd5JyA9PiAyICksCiAgICAgKiBhcnJheSggJ3gnID0+IDMsICd5JyA9PiA0ICkgKQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICogQHRocm93cyBJbWFnaWNrRHJhd0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJlemllcihhcnJheSAkY29vcmRpbmF0ZXMpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDb21wb3NpdGVzIGFuIGltYWdlIG9udG8gdGhlIGN1cnJlbnQgaW1hZ2UKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuY29tcG9zaXRlLnBocAogICAgICogQHBhcmFtIGludCAkY29tcG9zZSA8cD4KICAgICAqIGNvbXBvc2l0aW9uIG9wZXJhdG9yLiBPbmUgb2YgQ09NUE9TSVRFXyBjb25zdGFudHMKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeCA8cD4KICAgICAqIHggY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkgPHA+CiAgICAgKiB5IGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lcgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR3aWR0aCA8cD4KICAgICAqIHdpZHRoIG9mIHRoZSBjb21wb3NpdGlvbiBpbWFnZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICRoZWlnaHQgPHA+CiAgICAgKiBoZWlnaHQgb2YgdGhlIGNvbXBvc2l0aW9uIGltYWdlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gSW1hZ2ljayAkY29tcG9zaXRlV2FuZCA8cD4KICAgICAqIHRoZSBJbWFnaWNrIG9iamVjdCB3aGVyZSBjb21wb3NpdGlvbiBpbWFnZSBpcyB0YWtlbiBmcm9tCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBvc2l0ZSgkY29tcG9zZSwgJHgsICR5LCAkd2lkdGgsICRoZWlnaHQsIEltYWdpY2sgJGNvbXBvc2l0ZVdhbmQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBEcmF3cyBjb2xvciBvbiBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5jb2xvci5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeCA8cD4KICAgICAqIHggY29vcmRpbmF0ZSBvZiB0aGUgcGFpbnQKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeSA8cD4KICAgICAqIHkgY29vcmRpbmF0ZSBvZiB0aGUgcGFpbnQKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHBhaW50TWV0aG9kIDxwPgogICAgICogb25lIG9mIHRoZSBQQUlOVF8gY29uc3RhbnRzCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb2xvcigkeCwgJHksICRwYWludE1ldGhvZCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEFkZHMgYSBjb21tZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmNvbW1lbnQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb21tZW50IDxwPgogICAgICogVGhlIGNvbW1lbnQgc3RyaW5nIHRvIGFkZCB0byB2ZWN0b3Igb3V0cHV0IHN0cmVhbQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tbWVudCgkY29tbWVudCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIE9idGFpbnMgdGhlIGN1cnJlbnQgY2xpcHBpbmcgcGF0aCBJRAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5nZXRjbGlwcGF0aC5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNsaXAgcGF0aCBJRCBvciBmYWxzZSBpZiBubyBjbGlwIHBhdGggZXhpc3RzLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xpcFBhdGgoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBwb2x5Z29uIGZpbGwgcnVsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5nZXRjbGlwcnVsZS5waHAKICAgICAqIEByZXR1cm4gaW50IG9uZSBvZiB0aGUgRklMTFJVTEVfIGNvbnN0YW50cy4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENsaXBSdWxlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGludGVycHJldGF0aW9uIG9mIGNsaXAgcGF0aCB1bml0cwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5nZXRjbGlwdW5pdHMucGhwCiAgICAgKiBAcmV0dXJuIGludCBhbiBpbnQgb24gc3VjY2Vzcy4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENsaXBVbml0cygpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBmaWxsIGNvbG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmdldGZpbGxjb2xvci5waHAKICAgICAqIEByZXR1cm4gSW1hZ2lja1BpeGVsIGFuIEltYWdpY2tQaXhlbCBvYmplY3QuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxsQ29sb3IoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgb3BhY2l0eSB1c2VkIHdoZW4gZHJhd2luZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5nZXRmaWxsb3BhY2l0eS5waHAKICAgICAqIEByZXR1cm4gZmxvYXQgVGhlIG9wYWNpdHkuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxsT3BhY2l0eSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBmaWxsIHJ1bGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuZ2V0ZmlsbHJ1bGUucGhwCiAgICAgKiBAcmV0dXJuIGludCBhIEZJTExSVUxFXyBjb25zdGFudAogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmlsbFJ1bGUoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgdGV4dCBwbGFjZW1lbnQgZ3Jhdml0eQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5nZXRncmF2aXR5LnBocAogICAgICogQHJldHVybiBpbnQgYSBHUkFWSVRZXyBjb25zdGFudCBvbiBzdWNjZXNzIGFuZCAwIGlmIG5vIGdyYXZpdHkgaXMgc2V0LgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0R3Jhdml0eSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0cm9rZSBhbnRpYWxpYXMgc2V0dGluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5nZXRzdHJva2VhbnRpYWxpYXMucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgYW50aWFsaWFzaW5nIGlzIG9uIGFuZCBmYWxzZSBpZiBpdCBpcyBvZmYuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHJva2VBbnRpYWxpYXMoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgY29sb3IgdXNlZCBmb3Igc3Ryb2tpbmcgb2JqZWN0IG91dGxpbmVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmdldHN0cm9rZWNvbG9yLnBocAogICAgICogQHJldHVybiBJbWFnaWNrUGl4ZWwgYW4gSW1hZ2lja1BpeGVsIG9iamVjdCB3aGljaCBkZXNjcmliZXMgdGhlIGNvbG9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3Ryb2tlQ29sb3IoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyBhbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIHBhdHRlcm4gb2YgZGFzaGVzIGFuZCBnYXBzIHVzZWQgdG8gc3Ryb2tlIHBhdGhzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmdldHN0cm9rZWRhc2hhcnJheS5waHAKICAgICAqIEByZXR1cm4gYXJyYXkgYW4gYXJyYXkgb24gc3VjY2VzcyBhbmQgZW1wdHkgYXJyYXkgaWYgbm90IHNldC4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0cm9rZURhc2hBcnJheSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBvZmZzZXQgaW50byB0aGUgZGFzaCBwYXR0ZXJuIHRvIHN0YXJ0IHRoZSBkYXNoCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmdldHN0cm9rZWRhc2hvZmZzZXQucGhwCiAgICAgKiBAcmV0dXJuIGZsb2F0IGEgZmxvYXQgcmVwcmVzZW50aW5nIHRoZSBvZmZzZXQgYW5kIDAgaWYgaXQncyBub3Qgc2V0LgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3Ryb2tlRGFzaE9mZnNldCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBzaGFwZSB0byBiZSB1c2VkIGF0IHRoZSBlbmQgb2Ygb3BlbiBzdWJwYXRocyB3aGVuIHRoZXkgYXJlIHN0cm9rZWQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuZ2V0c3Ryb2tlbGluZWNhcC5waHAKICAgICAqIEByZXR1cm4gaW50IG9uZSBvZiB0aGUgTElORUNBUF8gY29uc3RhbnRzIG9yIDAgaWYgc3Ryb2tlIGxpbmVjYXAgaXMgbm90IHNldC4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0cm9rZUxpbmVDYXAoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgc2hhcGUgdG8gYmUgdXNlZCBhdCB0aGUgY29ybmVycyBvZiBwYXRocyB3aGVuIHRoZXkgYXJlIHN0cm9rZWQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuZ2V0c3Ryb2tlbGluZWpvaW4ucGhwCiAgICAgKiBAcmV0dXJuIGludCBvbmUgb2YgdGhlIExJTkVKT0lOXyBjb25zdGFudHMgb3IgMCBpZiBzdHJva2UgbGluZSBqb2luIGlzIG5vdCBzZXQuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHJva2VMaW5lSm9pbigpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBzdHJva2UgbWl0ZXIgbGltaXQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuZ2V0c3Ryb2tlbWl0ZXJsaW1pdC5waHAKICAgICAqIEByZXR1cm4gaW50IGFuIGludCBkZXNjcmliaW5nIHRoZSBtaXRlciBsaW1pdAogICAgICogYW5kIDAgaWYgbm8gbWl0ZXIgbGltaXQgaXMgc2V0LgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3Ryb2tlTWl0ZXJMaW1pdCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBvcGFjaXR5IG9mIHN0cm9rZWQgb2JqZWN0IG91dGxpbmVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmdldHN0cm9rZW9wYWNpdHkucGhwCiAgICAgKiBAcmV0dXJuIGZsb2F0IGEgZmxvYXQgZGVzY3JpYmluZyB0aGUgb3BhY2l0eS4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0cm9rZU9wYWNpdHkoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIHN0cm9rZSB1c2VkIHRvIGRyYXcgb2JqZWN0IG91dGxpbmVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmdldHN0cm9rZXdpZHRoLnBocAogICAgICogQHJldHVybiBmbG9hdCBhIGZsb2F0IGRlc2NyaWJpbmcgdGhlIHN0cm9rZSB3aWR0aC4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0cm9rZVdpZHRoKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIHRleHQgYWxpZ25tZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmdldHRleHRhbGlnbm1lbnQucGhwCiAgICAgKiBAcmV0dXJuIGludCBvbmUgb2YgdGhlIEFMSUdOXyBjb25zdGFudHMgYW5kIDAgaWYgbm8gYWxpZ24gaXMgc2V0LgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGV4dEFsaWdubWVudCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRleHQgYW50aWFsaWFzIHNldHRpbmcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuZ2V0dGV4dGFudGlhbGlhcy5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiB0ZXh0IGlzIGFudGlhbGlhc2VkIGFuZCBmYWxzZSBpZiBub3QuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUZXh0QW50aWFsaWFzKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB2ZWN0b3IgZ3JhcGhpY3MKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuZ2V0dmVjdG9yZ3JhcGhpY3MucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBhIHN0cmluZyBjb250YWluaW5nIHRoZSB2ZWN0b3IgZ3JhcGhpY3MuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZWN0b3JHcmFwaGljcygpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSB0ZXh0IHVuZGVyIGNvbG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LmdldHRleHR1bmRlcmNvbG9yLnBocAogICAgICogQHJldHVybiBJbWFnaWNrUGl4ZWwgYW4gSW1hZ2lja1BpeGVsIG9iamVjdCBkZXNjcmliaW5nIHRoZSBjb2xvci4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0RyYXdFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUZXh0VW5kZXJDb2xvcigpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBZGRzIGEgcGF0aCBlbGVtZW50IHRvIHRoZSBjdXJyZW50IHBhdGgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcucGF0aGNsb3NlLnBocAogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF0aENsb3NlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERyYXdzIGEgY3ViaWMgQmV6aWVyIGN1cnZlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnBhdGhjdXJ2ZXRvYWJzb2x1dGUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgxIDxwPgogICAgICogeCBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBjb250cm9sIHBvaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkxIDxwPgogICAgICogeSBjb29yZGluYXRlIG9mIHRoZSBmaXJzdCBjb250cm9sIHBvaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHgyIDxwPgogICAgICogeCBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgY29udHJvbCBwb2ludAogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5MiA8cD4KICAgICAqIHkgY29vcmRpbmF0ZSBvZiB0aGUgZmlyc3QgY29udHJvbCBwb2ludAogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR4IDxwPgogICAgICogeCBjb29yZGluYXRlIG9mIHRoZSBjdXJ2ZSBlbmQKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeSA8cD4KICAgICAqIHkgY29vcmRpbmF0ZSBvZiB0aGUgY3VydmUgZW5kCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXRoQ3VydmVUb0Fic29sdXRlKCR4MSwgJHkxLCAkeDIsICR5MiwgJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRHJhd3MgYSBjdWJpYyBCZXppZXIgY3VydmUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcucGF0aGN1cnZldG9yZWxhdGl2ZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeDEgPHA+CiAgICAgKiB4IGNvb3JkaW5hdGUgb2Ygc3RhcnRpbmcgY29udHJvbCBwb2ludAogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5MSA8cD4KICAgICAqIHkgY29vcmRpbmF0ZSBvZiBzdGFydGluZyBjb250cm9sIHBvaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHgyIDxwPgogICAgICogeCBjb29yZGluYXRlIG9mIGVuZGluZyBjb250cm9sIHBvaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkyIDxwPgogICAgICogeSBjb29yZGluYXRlIG9mIGVuZGluZyBjb250cm9sIHBvaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHggPHA+CiAgICAgKiBlbmRpbmcgeCBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkgPHA+CiAgICAgKiBlbmRpbmcgeSBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXRoQ3VydmVUb1JlbGF0aXZlKCR4MSwgJHkxLCAkeDIsICR5MiwgJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRHJhd3MgYSBxdWFkcmF0aWMgQmV6aWVyIGN1cnZlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnBhdGhjdXJ2ZXRvcXVhZHJhdGljYmV6aWVyYWJzb2x1dGUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgxIDxwPgogICAgICogeCBjb29yZGluYXRlIG9mIHRoZSBjb250cm9sIHBvaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkxIDxwPgogICAgICogeSBjb29yZGluYXRlIG9mIHRoZSBjb250cm9sIHBvaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHggPHA+CiAgICAgKiB4IGNvb3JkaW5hdGUgb2YgdGhlIGVuZCBwb2ludAogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5IDxwPgogICAgICogeSBjb29yZGluYXRlIG9mIHRoZSBlbmQgcG9pbnQKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBhdGhDdXJ2ZVRvUXVhZHJhdGljQmV6aWVyQWJzb2x1dGUoJHgxLCAkeTEsICR4LCAkeSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERyYXdzIGEgcXVhZHJhdGljIEJlemllciBjdXJ2ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5wYXRoY3VydmV0b3F1YWRyYXRpY2JlemllcnJlbGF0aXZlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICR4MSA8cD4KICAgICAqIHN0YXJ0aW5nIHggY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5MSA8cD4KICAgICAqIHN0YXJ0aW5nIHkgY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR4IDxwPgogICAgICogZW5kaW5nIHggY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5IDxwPgogICAgICogZW5kaW5nIHkgY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF0aEN1cnZlVG9RdWFkcmF0aWNCZXppZXJSZWxhdGl2ZSgkeDEsICR5MSwgJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRHJhd3MgYSBxdWFkcmF0aWMgQmV6aWVyIGN1cnZlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnBhdGhjdXJ2ZXRvcXVhZHJhdGljYmV6aWVyc21vb3RoYWJzb2x1dGUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHggPHA+CiAgICAgKiBlbmRpbmcgeCBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkgPHA+CiAgICAgKiBlbmRpbmcgeSBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXRoQ3VydmVUb1F1YWRyYXRpY0JlemllclNtb290aEFic29sdXRlKCR4LCAkeSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERyYXdzIGEgcXVhZHJhdGljIEJlemllciBjdXJ2ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5wYXRoY3VydmV0b3F1YWRyYXRpY2JlemllcnNtb290aHJlbGF0aXZlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICR4IDxwPgogICAgICogZW5kaW5nIHggY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5IDxwPgogICAgICogZW5kaW5nIHkgY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF0aEN1cnZlVG9RdWFkcmF0aWNCZXppZXJTbW9vdGhSZWxhdGl2ZSgkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBEcmF3cyBhIGN1YmljIEJlemllciBjdXJ2ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5wYXRoY3VydmV0b3Ntb290aGFic29sdXRlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICR4MiA8cD4KICAgICAqIHggY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIGNvbnRyb2wgcG9pbnQKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeTIgPHA+CiAgICAgKiB5IGNvb3JkaW5hdGUgb2YgdGhlIHNlY29uZCBjb250cm9sIHBvaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHggPHA+CiAgICAgKiB4IGNvb3JkaW5hdGUgb2YgdGhlIGVuZGluZyBwb2ludAogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5IDxwPgogICAgICogeSBjb29yZGluYXRlIG9mIHRoZSBlbmRpbmcgcG9pbnQKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBhdGhDdXJ2ZVRvU21vb3RoQWJzb2x1dGUoJHgyLCAkeTIsICR4LCAkeSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERyYXdzIGEgY3ViaWMgQmV6aWVyIGN1cnZlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnBhdGhjdXJ2ZXRvc21vb3RocmVsYXRpdmUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgyIDxwPgogICAgICogeCBjb29yZGluYXRlIG9mIHRoZSBzZWNvbmQgY29udHJvbCBwb2ludAogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5MiA8cD4KICAgICAqIHkgY29vcmRpbmF0ZSBvZiB0aGUgc2Vjb25kIGNvbnRyb2wgcG9pbnQKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeCA8cD4KICAgICAqIHggY29vcmRpbmF0ZSBvZiB0aGUgZW5kaW5nIHBvaW50CiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkgPHA+CiAgICAgKiB5IGNvb3JkaW5hdGUgb2YgdGhlIGVuZGluZyBwb2ludAogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF0aEN1cnZlVG9TbW9vdGhSZWxhdGl2ZSgkeDIsICR5MiwgJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRHJhd3MgYW4gZWxsaXB0aWNhbCBhcmMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcucGF0aGVsbGlwdGljYXJjYWJzb2x1dGUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJ4IDxwPgogICAgICogeCByYWRpdXMKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkcnkgPHA+CiAgICAgKiB5IHJhZGl1cwogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR4X2F4aXNfcm90YXRpb24gPHA+CiAgICAgKiB4IGF4aXMgcm90YXRpb24KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBib29sICRsYXJnZV9hcmNfZmxhZyA8cD4KICAgICAqIGxhcmdlIGFyYyBmbGFnCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkc3dlZXBfZmxhZyA8cD4KICAgICAqIHN3ZWVwIGZsYWcKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeCA8cD4KICAgICAqIHggY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5IDxwPgogICAgICogeSBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXRoRWxsaXB0aWNBcmNBYnNvbHV0ZSgkcngsICRyeSwgJHhfYXhpc19yb3RhdGlvbiwgJGxhcmdlX2FyY19mbGFnLCAkc3dlZXBfZmxhZywgJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRHJhd3MgYW4gZWxsaXB0aWNhbCBhcmMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcucGF0aGVsbGlwdGljYXJjcmVsYXRpdmUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJ4IDxwPgogICAgICogeCByYWRpdXMKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkcnkgPHA+CiAgICAgKiB5IHJhZGl1cwogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR4X2F4aXNfcm90YXRpb24gPHA+CiAgICAgKiB4IGF4aXMgcm90YXRpb24KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBib29sICRsYXJnZV9hcmNfZmxhZyA8cD4KICAgICAqIGxhcmdlIGFyYyBmbGFnCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkc3dlZXBfZmxhZyA8cD4KICAgICAqIHN3ZWVwIGZsYWcKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeCA8cD4KICAgICAqIHggY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5IDxwPgogICAgICogeSBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXRoRWxsaXB0aWNBcmNSZWxhdGl2ZSgkcngsICRyeSwgJHhfYXhpc19yb3RhdGlvbiwgJGxhcmdlX2FyY19mbGFnLCAkc3dlZXBfZmxhZywgJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogVGVybWluYXRlcyB0aGUgY3VycmVudCBwYXRoCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnBhdGhmaW5pc2gucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXRoRmluaXNoKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERyYXdzIGEgbGluZSBwYXRoCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnBhdGhsaW5ldG9hYnNvbHV0ZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeCA8cD4KICAgICAqIHN0YXJ0aW5nIHggY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5IDxwPgogICAgICogZW5kaW5nIHggY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF0aExpbmVUb0Fic29sdXRlKCR4LCAkeSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERyYXdzIGEgbGluZSBwYXRoCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnBhdGhsaW5ldG9yZWxhdGl2ZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeCA8cD4KICAgICAqIHN0YXJ0aW5nIHggY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5IDxwPgogICAgICogc3RhcnRpbmcgeSBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXRoTGluZVRvUmVsYXRpdmUoJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRHJhd3MgYSBob3Jpem9udGFsIGxpbmUgcGF0aAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5wYXRobGluZXRvaG9yaXpvbnRhbGFic29sdXRlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICR4IDxwPgogICAgICogeCBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXRoTGluZVRvSG9yaXpvbnRhbEFic29sdXRlKCR4KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRHJhd3MgYSBob3Jpem9udGFsIGxpbmUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcucGF0aGxpbmV0b2hvcml6b250YWxyZWxhdGl2ZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeCA8cD4KICAgICAqIHggY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF0aExpbmVUb0hvcml6b250YWxSZWxhdGl2ZSgkeCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERyYXdzIGEgdmVydGljYWwgbGluZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5wYXRobGluZXRvdmVydGljYWxhYnNvbHV0ZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeSA8cD4KICAgICAqIHkgY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF0aExpbmVUb1ZlcnRpY2FsQWJzb2x1dGUoJHkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBEcmF3cyBhIHZlcnRpY2FsIGxpbmUgcGF0aAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5wYXRobGluZXRvdmVydGljYWxyZWxhdGl2ZS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkeSA8cD4KICAgICAqIHkgY29vcmRpbmF0ZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF0aExpbmVUb1ZlcnRpY2FsUmVsYXRpdmUoJHkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTdGFydHMgYSBuZXcgc3ViLXBhdGgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcucGF0aG1vdmV0b2Fic29sdXRlLnBocAogICAgICogQHBhcmFtIGZsb2F0ICR4IDxwPgogICAgICogeCBjb29yZGluYXRlIG9mIHRoZSBzdGFydGluZyBwb2ludAogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5IDxwPgogICAgICogeSBjb29yZGluYXRlIG9mIHRoZSBzdGFydGluZyBwb2ludAogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF0aE1vdmVUb0Fic29sdXRlKCR4LCAkeSkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFN0YXJ0cyBhIG5ldyBzdWItcGF0aAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5wYXRobW92ZXRvcmVsYXRpdmUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHggPHA+CiAgICAgKiB0YXJnZXQgeCBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkgPHA+CiAgICAgKiB0YXJnZXQgeSBjb29yZGluYXRlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXRoTW92ZVRvUmVsYXRpdmUoJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRGVjbGFyZXMgdGhlIHN0YXJ0IG9mIGEgcGF0aCBkcmF3aW5nIGxpc3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcucGF0aHN0YXJ0LnBocAogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF0aFN0YXJ0KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERyYXdzIGEgcG9seWxpbmUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcucG9seWxpbmUucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNvb3JkaW5hdGVzIDxwPgogICAgICogYXJyYXkgb2YgeCBhbmQgeSBjb29yZGluYXRlczogYXJyYXkoIGFycmF5KCAneCcgPT4gNCwgJ3knID0+IDYgKSwgYXJyYXkoICd4JyA9PiA4LCAneScgPT4gMTAgKSApCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0RyYXdFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb2x5bGluZShhcnJheSAkY29vcmRpbmF0ZXMpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBUZXJtaW5hdGVzIGEgY2xpcCBwYXRoIGRlZmluaXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcucG9wY2xpcHBhdGgucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3BDbGlwUGF0aCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBUZXJtaW5hdGVzIGEgZGVmaW5pdGlvbiBsaXN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnBvcGRlZnMucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3BEZWZzKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFRlcm1pbmF0ZXMgYSBwYXR0ZXJuIGRlZmluaXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcucG9wcGF0dGVybi5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9wUGF0dGVybigpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTdGFydHMgYSBjbGlwIHBhdGggZGVmaW5pdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5wdXNoY2xpcHBhdGgucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGlwX21hc2tfaWQgPHA+CiAgICAgKiBDbGlwIG1hc2sgSWQKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1c2hDbGlwUGF0aCgkY2xpcF9tYXNrX2lkKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogSW5kaWNhdGVzIHRoYXQgZm9sbG93aW5nIGNvbW1hbmRzIGNyZWF0ZSBuYW1lZCBlbGVtZW50cyBmb3IgZWFybHkgcHJvY2Vzc2luZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5wdXNoZGVmcy5waHAKICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1c2hEZWZzKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIEluZGljYXRlcyB0aGF0IHN1YnNlcXVlbnQgY29tbWFuZHMgdXAgdG8gYSBJbWFnaWNrRHJhdzo6b3BQYXR0ZXJuKCkgY29tbWFuZCBjb21wcmlzZSB0aGUgZGVmaW5pdGlvbiBvZiBhIG5hbWVkIHBhdHRlcm4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcucHVzaHBhdHRlcm4ucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuX2lkIDxwPgogICAgICogdGhlIHBhdHRlcm4gSWQKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkeCA8cD4KICAgICAqIHggY29vcmRpbmF0ZSBvZiB0aGUgdG9wLWxlZnQgY29ybmVyCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkgPHA+CiAgICAgKiB5IGNvb3JkaW5hdGUgb2YgdGhlIHRvcC1sZWZ0IGNvcm5lcgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR3aWR0aCA8cD4KICAgICAqIHdpZHRoIG9mIHRoZSBwYXR0ZXJuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJGhlaWdodCA8cD4KICAgICAqIGhlaWdodCBvZiB0aGUgcGF0dGVybgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXNoUGF0dGVybigkcGF0dGVybl9pZCwgJHgsICR5LCAkd2lkdGgsICRoZWlnaHQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZW5kZXJzIGFsbCBwcmVjZWRpbmcgZHJhd2luZyBjb21tYW5kcyBvbnRvIHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5yZW5kZXIucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbmRlcigpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBcHBsaWVzIHRoZSBzcGVjaWZpZWQgcm90YXRpb24gdG8gdGhlIGN1cnJlbnQgY29vcmRpbmF0ZSBzcGFjZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5yb3RhdGUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJGRlZ3JlZXMgPHA+CiAgICAgKiBkZWdyZWVzIHRvIHJvdGF0ZQogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm90YXRlKCRkZWdyZWVzKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQWRqdXN0cyB0aGUgc2NhbGluZyBmYWN0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2NhbGUucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHggPHA+CiAgICAgKiBob3Jpem9udGFsIGZhY3RvcgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR5IDxwPgogICAgICogdmVydGljYWwgZmFjdG9yCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzY2FsZSgkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBBc3NvY2lhdGVzIGEgbmFtZWQgY2xpcHBpbmcgcGF0aCB3aXRoIHRoZSBpbWFnZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRjbGlwcGF0aC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsaXBfbWFzayA8cD4KICAgICAqIHRoZSBjbGlwcGluZyBwYXRoIG5hbWUKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldENsaXBQYXRoKCRjbGlwX21hc2spIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXQgdGhlIHBvbHlnb24gZmlsbCBydWxlIHRvIGJlIHVzZWQgYnkgdGhlIGNsaXBwaW5nIHBhdGgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2V0Y2xpcHJ1bGUucGhwCiAgICAgKiBAcGFyYW0gaW50ICRmaWxsX3J1bGUgPHA+CiAgICAgKiBGSUxMUlVMRV8gY29uc3RhbnQKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldENsaXBSdWxlKCRmaWxsX3J1bGUpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBjbGlwIHBhdGggdW5pdHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2V0Y2xpcHVuaXRzLnBocAogICAgICogQHBhcmFtIGludCAkY2xpcF91bml0cyA8cD4KICAgICAqIHRoZSBudW1iZXIgb2YgY2xpcCB1bml0cwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q2xpcFVuaXRzKCRjbGlwX3VuaXRzKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgb3BhY2l0eSB0byB1c2Ugd2hlbiBkcmF3aW5nIHVzaW5nIHRoZSBmaWxsIGNvbG9yIG9yIGZpbGwgdGV4dHVyZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRmaWxsb3BhY2l0eS5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkZmlsbE9wYWNpdHkgPHA+CiAgICAgKiB0aGUgZmlsbCBvcGFjaXR5CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGaWxsT3BhY2l0eSgkZmlsbE9wYWNpdHkpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBVUkwgdG8gdXNlIGFzIGEgZmlsbCBwYXR0ZXJuIGZvciBmaWxsaW5nIG9iamVjdHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2V0ZmlsbHBhdHRlcm51cmwucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxsX3VybCA8cD4KICAgICAqIFVSTCB0byB1c2UgdG8gb2J0YWluIGZpbGwgcGF0dGVybi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RmlsbFBhdHRlcm5VUkwoJGZpbGxfdXJsKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgZmlsbCBydWxlIHRvIHVzZSB3aGlsZSBkcmF3aW5nIHBvbHlnb25zCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnNldGZpbGxydWxlLnBocAogICAgICogQHBhcmFtIGludCAkZmlsbF9ydWxlIDxwPgogICAgICogRklMTFJVTEVfIGNvbnN0YW50CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGaWxsUnVsZSgkZmlsbF9ydWxlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgdGV4dCBwbGFjZW1lbnQgZ3Jhdml0eQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRncmF2aXR5LnBocAogICAgICogQHBhcmFtIGludCAkZ3Jhdml0eSA8cD4KICAgICAqIEdSQVZJVFlfIGNvbnN0YW50CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRHcmF2aXR5KCRncmF2aXR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgcGF0dGVybiB1c2VkIGZvciBzdHJva2luZyBvYmplY3Qgb3V0bGluZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2V0c3Ryb2tlcGF0dGVybnVybC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cm9rZV91cmwgPHA+CiAgICAgKiBzdHJva2UgVVJMCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgaW1hZ2ljay5pbWFnaWNrZHJhdy5yZXR1cm4uc3VjY2VzczsKICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFN0cm9rZVBhdHRlcm5VUkwoJHN0cm9rZV91cmwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTcGVjaWZpZXMgdGhlIG9mZnNldCBpbnRvIHRoZSBkYXNoIHBhdHRlcm4gdG8gc3RhcnQgdGhlIGRhc2gKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcuc2V0c3Ryb2tlZGFzaG9mZnNldC5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkZGFzaF9vZmZzZXQgPHA+CiAgICAgKiBkYXNoIG9mZnNldAogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3Ryb2tlRGFzaE9mZnNldCgkZGFzaF9vZmZzZXQpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTcGVjaWZpZXMgdGhlIHNoYXBlIHRvIGJlIHVzZWQgYXQgdGhlIGVuZCBvZiBvcGVuIHN1YnBhdGhzIHdoZW4gdGhleSBhcmUgc3Ryb2tlZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRzdHJva2VsaW5lY2FwLnBocAogICAgICogQHBhcmFtIGludCAkbGluZWNhcCA8cD4KICAgICAqIExJTkVDQVBfIGNvbnN0YW50CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTdHJva2VMaW5lQ2FwKCRsaW5lY2FwKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU3BlY2lmaWVzIHRoZSBzaGFwZSB0byBiZSB1c2VkIGF0IHRoZSBjb3JuZXJzIG9mIHBhdGhzIHdoZW4gdGhleSBhcmUgc3Ryb2tlZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRzdHJva2VsaW5lam9pbi5waHAKICAgICAqIEBwYXJhbSBpbnQgJGxpbmVqb2luIDxwPgogICAgICogTElORUpPSU5fIGNvbnN0YW50CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTdHJva2VMaW5lSm9pbigkbGluZWpvaW4pIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTcGVjaWZpZXMgdGhlIG1pdGVyIGxpbWl0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnNldHN0cm9rZW1pdGVybGltaXQucGhwCiAgICAgKiBAcGFyYW0gaW50ICRtaXRlcmxpbWl0IDxwPgogICAgICogdGhlIG1pdGVyIGxpbWl0CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTdHJva2VNaXRlckxpbWl0KCRtaXRlcmxpbWl0KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU3BlY2lmaWVzIHRoZSBvcGFjaXR5IG9mIHN0cm9rZWQgb2JqZWN0IG91dGxpbmVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnNldHN0cm9rZW9wYWNpdHkucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHN0cm9rZV9vcGFjaXR5IDxwPgogICAgICogc3Ryb2tlIG9wYWNpdHkuIDEuMCBpcyBmdWxseSBvcGFxdWUKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFN0cm9rZU9wYWNpdHkoJHN0cm9rZV9vcGFjaXR5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0cyB0aGUgdmVjdG9yIGdyYXBoaWNzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnNldHZlY3RvcmdyYXBoaWNzLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkeG1sIDxwPgogICAgICogeG1sIGNvbnRhaW5pbmcgdGhlIHZlY3RvciBncmFwaGljcwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRWZWN0b3JHcmFwaGljcygkeG1sKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRGVzdHJveXMgdGhlIGN1cnJlbnQgSW1hZ2lja0RyYXcgaW4gdGhlIHN0YWNrLCBhbmQgcmV0dXJucyB0byB0aGUgcHJldmlvdXNseSBwdXNoZWQgSW1hZ2lja0RyYXcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2RyYXcucG9wLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MgYW5kIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3AoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogQ2xvbmVzIHRoZSBjdXJyZW50IEltYWdpY2tEcmF3IGFuZCBwdXNoZXMgaXQgdG8gdGhlIHN0YWNrCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2tkcmF3LnB1c2gucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1c2goKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU3BlY2lmaWVzIHRoZSBwYXR0ZXJuIG9mIGRhc2hlcyBhbmQgZ2FwcyB1c2VkIHRvIHN0cm9rZSBwYXRocwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrZHJhdy5zZXRzdHJva2VkYXNoYXJyYXkucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJGRhc2hBcnJheSA8cD4KICAgICAqIGFycmF5IG9mIGZsb2F0cwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTdHJva2VEYXNoQXJyYXkoYXJyYXkgJGRhc2hBcnJheSkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG9wYWNpdHkgdG8gdXNlIHdoZW4gZHJhd2luZyB1c2luZyB0aGUgZmlsbCBvciBzdHJva2UgY29sb3Igb3IgdGV4dHVyZS4gRnVsbHkgb3BhcXVlIGlzIDEuMC4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJG9wYWNpdHkKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHNpbmNlIDMuNC4xCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRPcGFjaXR5KCRvcGFjaXR5KSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgb3BhY2l0eSB1c2VkIHdoZW4gZHJhd2luZyB3aXRoIHRoZSBmaWxsIG9yIHN0cm9rZSBjb2xvciBvciB0ZXh0dXJlLiBGdWxseSBvcGFxdWUgaXMgMS4wLgogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqIEBzaW5jZSAzLjQuMQogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3BhY2l0eSgpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBpbWFnZSBmb250IHJlc29sdXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHNpbmNlIDMuNC4xCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGb250UmVzb2x1dGlvbigkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBpbWFnZSBYIGFuZCBZIHJlc29sdXRpb24uCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICogQHRocm93cyBJbWFnaWNrRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHNpbmNlIDMuNC4xCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGb250UmVzb2x1dGlvbigpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBkaXJlY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiBhbm5vdGF0aW5nIHdpdGggdGV4dC4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHNpbmNlIDMuNC4xCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUZXh0RGlyZWN0aW9uKCkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGZvbnQgc3R5bGUgdG8gdXNlIHdoZW4gYW5ub3RhdGluZyB3aXRoIHRleHQuIFRoZSBBbnlTdHlsZSBlbnVtZXJhdGlvbiBhY3RzIGFzIGEgd2lsZC1jYXJkICJkb24ndCBjYXJlIiBvcHRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkZGlyZWN0aW9uCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEBzaW5jZSAzLjQuMQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGV4dERpcmVjdGlvbigkZGlyZWN0aW9uKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYm9yZGVyIGNvbG9yIHVzZWQgZm9yIGRyYXdpbmcgYm9yZGVyZWQgb2JqZWN0cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIEltYWdpY2tQaXhlbAogICAgICogQHNpbmNlIDMuNC4xCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCb3JkZXJDb2xvcigpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBib3JkZXIgY29sb3IgdG8gYmUgdXNlZCBmb3IgZHJhd2luZyBib3JkZXJlZCBvYmplY3RzLgogICAgICogQHBhcmFtIEltYWdpY2tQaXhlbCAkY29sb3IKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBJbWFnaWNrRHJhd0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEBzaW5jZSAzLjQuMQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Qm9yZGVyQ29sb3IoSW1hZ2lja1BpeGVsICRjb2xvcikge30KCiAgICAvKioKICAgICAqIE9idGFpbnMgdGhlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHJlc29sdXRpb24uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICogQHNpbmNlIDMuNC4xCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZW5zaXR5KCkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHJlc29sdXRpb24uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZW5zaXR5X3N0cmluZwogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAc2luY2UgMy40LjEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldERlbnNpdHkoJGRlbnNpdHlfc3RyaW5nKSB7fQp9CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbWFnaWNrcGl4ZWxpdGVyYXRvci5waHAKICovCmNsYXNzIEltYWdpY2tQaXhlbEl0ZXJhdG9yIGltcGxlbWVudHMgSXRlcmF0b3IKewogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBUaGUgSW1hZ2lja1BpeGVsSXRlcmF0b3IgY29uc3RydWN0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja3BpeGVsaXRlcmF0b3IuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIEltYWdpY2sgJHdhbmQKICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChJbWFnaWNrICR3YW5kKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyBhIG5ldyBwaXhlbCBpdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWxpdGVyYXRvci5uZXdwaXhlbGl0ZXJhdG9yLnBocAogICAgICogQHBhcmFtIEltYWdpY2sgJHdhbmQKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLiBUaHJvd2luZyBJbWFnaWNrUGl4ZWxJdGVyYXRvckV4Y2VwdGlvbi4KICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbgogICAgICovCiAgICAjW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICIlY2xhc3MlLT5nZXRQaXhlbEl0ZXJhdG9yKCVwYXJhbWV0ZXJzTGlzdCUpIildCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV3UGl4ZWxJdGVyYXRvcihJbWFnaWNrICR3YW5kKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyBhIG5ldyBwaXhlbCBpdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWxpdGVyYXRvci5uZXdwaXhlbHJlZ2lvbml0ZXJhdG9yLnBocAogICAgICogQHBhcmFtIEltYWdpY2sgJHdhbmQKICAgICAqIEBwYXJhbSBpbnQgJHgKICAgICAqIEBwYXJhbSBpbnQgJHkKICAgICAqIEBwYXJhbSBpbnQgJGNvbHVtbnMKICAgICAqIEBwYXJhbSBpbnQgJHJvd3MKICAgICAqIEByZXR1cm4gYm9vbCBhIG5ldyBJbWFnaWNrUGl4ZWxJdGVyYXRvciBvbiBzdWNjZXNzOyBvbiBmYWlsdXJlLCB0aHJvd3MgSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbgogICAgICovCiAgICAjW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICIlY2xhc3MlLT5nZXRQaXhlbFJlZ2lvbkl0ZXJhdG9yKCVwYXJhbWV0ZXJzTGlzdCUpIildCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV3UGl4ZWxSZWdpb25JdGVyYXRvcihJbWFnaWNrICR3YW5kLCAkeCwgJHksICRjb2x1bW5zLCAkcm93cykge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGl4ZWwgaXRlcmF0b3Igcm93CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2twaXhlbGl0ZXJhdG9yLmdldGl0ZXJhdG9ycm93LnBocAogICAgICogQHJldHVybiBpbnQgdGhlIGludGVnZXIgb2Zmc2V0IG9mIHRoZSByb3csIHRocm93aW5nIEltYWdpY2tQaXhlbEl0ZXJhdG9yRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxJdGVyYXRvckV4Y2VwdGlvbiBvbiBlcnJvcgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3JSb3coKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogU2V0IHRoZSBwaXhlbCBpdGVyYXRvciByb3cKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja3BpeGVsaXRlcmF0b3Iuc2V0aXRlcmF0b3Jyb3cucGhwCiAgICAgKiBAcGFyYW0gaW50ICRyb3cKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxJdGVyYXRvckV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEl0ZXJhdG9yUm93KCRyb3cpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBwaXhlbCBpdGVyYXRvciB0byB0aGUgZmlyc3QgcGl4ZWwgcm93CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2twaXhlbGl0ZXJhdG9yLnNldGl0ZXJhdG9yZmlyc3Ryb3cucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJdGVyYXRvckZpcnN0Um93KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFNldHMgdGhlIHBpeGVsIGl0ZXJhdG9yIHRvIHRoZSBsYXN0IHBpeGVsIHJvdwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWxpdGVyYXRvci5zZXRpdGVyYXRvcmxhc3Ryb3cucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJdGVyYXRvckxhc3RSb3coKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgcHJldmlvdXMgcm93CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2twaXhlbGl0ZXJhdG9yLmdldHByZXZpb3VzaXRlcmF0b3Jyb3cucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5IHRoZSBwcmV2aW91cyByb3cgYXMgYW4gYXJyYXkgb2YgSW1hZ2lja1BpeGVsV2FuZCBvYmplY3RzIGZyb20gdGhlCiAgICAgKiBJbWFnaWNrUGl4ZWxJdGVyYXRvciwgdGhyb3dpbmcgSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tQaXhlbEl0ZXJhdG9yRXhjZXB0aW9uIG9uIGVycm9yCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcmV2aW91c0l0ZXJhdG9yUm93KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcm93IG9mIEltYWdpY2tQaXhlbCBvYmplY3RzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2twaXhlbGl0ZXJhdG9yLmdldGN1cnJlbnRpdGVyYXRvcnJvdy5waHAKICAgICAqIEByZXR1cm4gYXJyYXkgYSByb3cgYXMgYW4gYXJyYXkgb2YgSW1hZ2lja1BpeGVsIG9iamVjdHMgdGhhdCBjYW4gdGhlbXNlbHZlcyBiZSBpdGVyYXRlZC4KICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDdXJyZW50SXRlcmF0b3JSb3coKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgbmV4dCByb3cgb2YgdGhlIHBpeGVsIGl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2twaXhlbGl0ZXJhdG9yLmdldG5leHRpdGVyYXRvcnJvdy5waHAKICAgICAqIEByZXR1cm4gYXJyYXkgdGhlIG5leHQgcm93IGFzIGFuIGFycmF5IG9mIEltYWdpY2tQaXhlbCBvYmplY3RzLCB0aHJvd2luZwogICAgICogSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tQaXhlbEl0ZXJhdG9yRXhjZXB0aW9uIG9uIGVycm9yCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROZXh0SXRlcmF0b3JSb3coKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogUmVzZXRzIHRoZSBwaXhlbCBpdGVyYXRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWxpdGVyYXRvci5yZXNldGl0ZXJhdG9yLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tQaXhlbEl0ZXJhdG9yRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXRJdGVyYXRvcigpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTeW5jcyB0aGUgcGl4ZWwgaXRlcmF0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja3BpeGVsaXRlcmF0b3Iuc3luY2l0ZXJhdG9yLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tQaXhlbEl0ZXJhdG9yRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3luY0l0ZXJhdG9yKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIERlYWxsb2NhdGVzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBQaXhlbEl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2twaXhlbGl0ZXJhdG9yLmRlc3Ryb3kucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2Vzcy4KICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXN0cm95KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENsZWFyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBQaXhlbEl0ZXJhdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2twaXhlbGl0ZXJhdG9yLmNsZWFyLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tQaXhlbEl0ZXJhdG9yRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIEltYWdpY2sgJEltYWdpY2sKICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0cGl4ZWxpdGVyYXRvcihJbWFnaWNrICRJbWFnaWNrKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIEltYWdpY2sgJEltYWdpY2sKICAgICAqIEBwYXJhbSAkeAogICAgICogQHBhcmFtICR5CiAgICAgKiBAcGFyYW0gJGNvbHVtbnMKICAgICAqIEBwYXJhbSAkcm93cwogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxJdGVyYXRvckV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0V4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRwaXhlbHJlZ2lvbml0ZXJhdG9yKEltYWdpY2sgJEltYWdpY2ssICR4LCAkeSwgJGNvbHVtbnMsICRyb3dzKSB7fQoKICAgIC8qKgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxJdGVyYXRvckV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpIHt9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIEltYWdpY2tQaXhlbEl0ZXJhdG9yRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpIHt9CgogICAgLyoqCiAgICAgKiBAdGhyb3dzIEltYWdpY2tQaXhlbEl0ZXJhdG9yRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCkge30KCiAgICAvKioKICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkge30KCiAgICAvKioKICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsSXRlcmF0b3JFeGNlcHRpb24gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpIHt9Cn0KCi8qKgogKiBAbWV0aG9kIGNsb25lKCkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbWFnaWNrcGl4ZWwucGhwCiAqLwpjbGFzcyBJbWFnaWNrUGl4ZWwKewogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBub3JtYWxpemVkIEhTTCBjb2xvciBvZiB0aGUgSW1hZ2lja1BpeGVsIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWwuZ2V0aHNsLnBocAogICAgICogQHJldHVybiBmbG9hdFtdIHRoZSBIU0wgdmFsdWUgaW4gYW4gYXJyYXkgd2l0aCB0aGUga2V5cyAiaHVlIiwKICAgICAqICJzYXR1cmF0aW9uIiwgYW5kICJsdW1pbm9zaXR5Ii4gVGhyb3dzIEltYWdpY2tQaXhlbEV4Y2VwdGlvbiBvbiBmYWlsdXJlLgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxFeGNlcHRpb24gb24gZmFpbHVyZQogICAgICovCiAgICAjW0FycmF5U2hhcGUoWyJodWUiID0+ICJmbG9hdCIsICJzYXR1cmF0aW9uIiA9PiAiZmxvYXQiLCAibHVtaW5vc2l0eSIgPT4gImZsb2F0Il0pXQogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEhTTCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBub3JtYWxpemVkIEhTTCBjb2xvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWwuc2V0aHNsLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRodWUgPHA+CiAgICAgKiBUaGUgbm9ybWFsaXplZCB2YWx1ZSBmb3IgaHVlLCBkZXNjcmliZWQgYXMgYSBmcmFjdGlvbmFsIGFyYwogICAgICogKGJldHdlZW4gMCBhbmQgMSkgb2YgdGhlIGh1ZSBjaXJjbGUsIHdoZXJlIHRoZSB6ZXJvIHZhbHVlIGlzCiAgICAgKiByZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gZmxvYXQgJHNhdHVyYXRpb24gPHA+CiAgICAgKiBUaGUgbm9ybWFsaXplZCB2YWx1ZSBmb3Igc2F0dXJhdGlvbiwgd2l0aCAxIGFzIGZ1bGwgc2F0dXJhdGlvbi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkbHVtaW5vc2l0eSA8cD4KICAgICAqIFRoZSBub3JtYWxpemVkIHZhbHVlIGZvciBsdW1pbm9zaXR5LCBvbiBhIHNjYWxlIGZyb20gYmxhY2sgYXQKICAgICAqIDAgdG8gd2hpdGUgYXQgMSwgd2l0aCB0aGUgZnVsbCBIUyB2YWx1ZSBhdCAwLjUgbHVtaW5vc2l0eS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxFeGNlcHRpb24gb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SFNMKCRodWUsICRzYXR1cmF0aW9uLCAkbHVtaW5vc2l0eSkge30KCiAgICAvKioKICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsRXhjZXB0aW9uIG9uIGZhaWx1cmUKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbG9yVmFsdWVRdWFudHVtKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSAkY29sb3JfdmFsdWUKICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsRXhjZXB0aW9uIG9uIGZhaWx1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbG9yVmFsdWVRdWFudHVtKCRjb2xvcl92YWx1ZSkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGNvbG9ybWFwIGluZGV4IG9mIHRoZSBwaXhlbCB3YW5kLgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxFeGNlcHRpb24gb24gZmFpbHVyZQogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW5kZXgoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkaW5kZXgKICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsRXhjZXB0aW9uIG9uIGZhaWx1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEluZGV4KCRpbmRleCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIFRoZSBJbWFnaWNrUGl4ZWwgY29uc3RydWN0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja3BpeGVsLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbG9yIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgb3B0aW9uYWwgY29sb3Igc3RyaW5nIHRvIHVzZSBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGlzIG9iamVjdC4KICAgICAqIDwvcD4KICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsRXhjZXB0aW9uIG9uIGZhaWx1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb2xvciA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBjb2xvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWwuc2V0Y29sb3IucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb2xvciA8cD4KICAgICAqIFRoZSBjb2xvciBkZWZpbml0aW9uIHRvIHVzZSBpbiBvcmRlciB0byBpbml0aWFsaXNlIHRoZQogICAgICogSW1hZ2lja1BpeGVsIG9iamVjdC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiB0aGUgc3BlY2lmaWVkIGNvbG9yIHdhcyBzZXQsIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tQaXhlbEV4Y2VwdGlvbiBvbiBmYWlsdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb2xvcigkY29sb3IpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIG9uZSBvZiB0aGUgY2hhbm5lbHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja3BpeGVsLnNldGNvbG9ydmFsdWUucGhwCiAgICAgKiBAcGFyYW0gaW50ICRjb2xvciA8cD4KICAgICAqIE9uZSBvZiB0aGUgSW1hZ2ljayBjb2xvciBjb25zdGFudHMgZS5nLiBcSW1hZ2ljazo6Q09MT1JfR1JFRU4gb3IgXEltYWdpY2s6OkNPTE9SX0FMUEhBLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGZsb2F0ICR2YWx1ZSA8cD4KICAgICAqIFRoZSB2YWx1ZSB0byBzZXQgdGhpcyBjaGFubmVsIHRvLCByYW5naW5nIGZyb20gMCB0byAxLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tQaXhlbEV4Y2VwdGlvbiBvbiBmYWlsdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb2xvclZhbHVlKCRjb2xvciwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogR2V0cyB0aGUgbm9ybWFsaXplZCB2YWx1ZSBvZiB0aGUgcHJvdmlkZWQgY29sb3IgY2hhbm5lbAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWwuZ2V0Y29sb3J2YWx1ZS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGNvbG9yIDxwPgogICAgICogVGhlIGNvbG9yIHRvIGdldCB0aGUgdmFsdWUgb2YsIHNwZWNpZmllZCBhcyBvbmUgb2YgdGhlIEltYWdpY2sgY29sb3IKICAgICAqIGNvbnN0YW50cy4gVGhpcyBjYW4gYmUgb25lIG9mIHRoZSBSR0IgY29sb3JzLCBDTVlLIGNvbG9ycywgYWxwaGEgYW5kCiAgICAgKiBvcGFjaXR5IGUuZyAoSW1hZ2ljazo6Q09MT1JfQkxVRSwgSW1hZ2ljazo6Q09MT1JfTUFHRU5UQSkuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGZsb2F0IFRoZSB2YWx1ZSBvZiB0aGUgY2hhbm5lbCwgYXMgYSBub3JtYWxpemVkIGZsb2F0aW5nLXBvaW50IG51bWJlciwgdGhyb3dpbmcKICAgICAqIEltYWdpY2tQaXhlbEV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsRXhjZXB0aW9uIG9uIGVycm9yCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2xvclZhbHVlKCRjb2xvcikge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4wLjApPGJyLz4KICAgICAqIENsZWFycyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2twaXhlbC5jbGVhci5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxFeGNlcHRpb24gb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgaW1hZ2ljayAyLjAuMCk8YnIvPgogICAgICogRGVhbGxvY2F0ZXMgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWwuZGVzdHJveS5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxFeGNlcHRpb24gb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVzdHJveSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBDaGVjayB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGlzIGNvbG9yIGFuZCBhbm90aGVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2twaXhlbC5pc3NpbWlsYXIucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2lja1BpeGVsICRjb2xvciA8cD4KICAgICAqIFRoZSBJbWFnaWNrUGl4ZWwgb2JqZWN0IHRvIGNvbXBhcmUgdGhpcyBvYmplY3QgYWdhaW5zdC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkZnV6eiA8cD4KICAgICAqIFRoZSBtYXhpbXVtIGRpc3RhbmNlIHdpdGhpbiB3aGljaCB0byBjb25zaWRlciB0aGVzZSBjb2xvcnMgYXMgc2ltaWxhci4KICAgICAqIFRoZSB0aGVvcmV0aWNhbCBtYXhpbXVtIGZvciB0aGlzIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aHJlZQogICAgICogKDEuNzMyKS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxFeGNlcHRpb24gb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTaW1pbGFyKEltYWdpY2tQaXhlbCAkY29sb3IsICRmdXp6KSB7fQoKICAgIC8qKgogICAgICogKE5vIHZlcnNpb24gaW5mb3JtYXRpb24gYXZhaWxhYmxlLCBtaWdodCBvbmx5IGJlIGluIFNWTik8YnIvPgogICAgICogQ2hlY2sgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhpcyBjb2xvciBhbmQgYW5vdGhlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWwuaXNwaXhlbHNpbWlsYXIucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2lja1BpeGVsICRjb2xvciA8cD4KICAgICAqIFRoZSBJbWFnaWNrUGl4ZWwgb2JqZWN0IHRvIGNvbXBhcmUgdGhpcyBvYmplY3QgYWdhaW5zdC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBmbG9hdCAkZnV6eiA8cD4KICAgICAqIFRoZSBtYXhpbXVtIGRpc3RhbmNlIHdpdGhpbiB3aGljaCB0byBjb25zaWRlciB0aGVzZSBjb2xvcnMgYXMgc2ltaWxhci4KICAgICAqIFRoZSB0aGVvcmV0aWNhbCBtYXhpbXVtIGZvciB0aGlzIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aHJlZQogICAgICogKDEuNzMyKS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzLgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxFeGNlcHRpb24gb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQaXhlbFNpbWlsYXIoSW1hZ2lja1BpeGVsICRjb2xvciwgJGZ1enopIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBjb2xvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWwuZ2V0Y29sb3IucGhwCiAgICAgKiBAcGFyYW0gaW50ICRub3JtYWxpemVkIFtvcHRpb25hbF0gPHA+CiAgICAgKiBOb3JtYWxpemUgdGhlIGNvbG9yIHZhbHVlcwogICAgICogPC9wPgogICAgICogQHJldHVybiBhcnJheSBBbiBhcnJheSBvZiBjaGFubmVsIHZhbHVlcywgZWFjaCBub3JtYWxpemVkIGlmIDxiPlRSVUU8L2I+IGlzIGdpdmVuIGFzIHBhcmFtLiBUaHJvd3MKICAgICAqIEltYWdpY2tQaXhlbEV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqIEB0aHJvd3MgSW1hZ2lja1BpeGVsRXhjZXB0aW9uIG9uIGVycm9yLgogICAgICovCiAgICAjW0FycmF5U2hhcGUoWyJyIiA9PiAiaW50fGZsb2F0IiwgImciID0+ICJpbnR8ZmxvYXQiLCAiYiIgPT4gImludHxmbG9hdCIsICJhIiA9PiAiaW50fGZsb2F0Il0pXQogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbG9yKCRub3JtYWxpemVkID0gMCkge30KCiAgICAvKioKICAgICAqIChQRUNMIGltYWdpY2sgMi4xLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIGNvbG9yIGFzIGEgc3RyaW5nCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2twaXhlbC5nZXRjb2xvcmFzc3RyaW5nLnBocAogICAgICogQHJldHVybiBzdHJpbmcgdGhlIGNvbG9yIG9mIHRoZSBJbWFnaWNrUGl4ZWwgb2JqZWN0IGFzIGEgc3RyaW5nLgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxFeGNlcHRpb24gb24gZmFpbHVyZQogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29sb3JBc1N0cmluZygpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBpbWFnaWNrIDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBjb2xvciBjb3VudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2xvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWwuZ2V0Y29sb3Jjb3VudC5waHAKICAgICAqIEByZXR1cm4gaW50IHRoZSBjb2xvciBjb3VudCBhcyBhbiBpbnRlZ2VyIG9uIHN1Y2Nlc3MsIHRocm93cwogICAgICogSW1hZ2lja1BpeGVsRXhjZXB0aW9uIG9uIGZhaWx1cmUuCiAgICAgKiBAdGhyb3dzIEltYWdpY2tQaXhlbEV4Y2VwdGlvbiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29sb3JDb3VudCgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRjb2xvckNvdW50CiAgICAgKiBAdGhyb3dzIEltYWdpY2tQaXhlbEV4Y2VwdGlvbiBvbiBmYWlsdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb2xvckNvdW50KCRjb2xvckNvdW50KSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBjb2xvcnMgaXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQgZGlzdGFuY2UuIFRoZSBmdXp6IHZhbHVlIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgMC1RdWFudHVtUmFuZ2UuPGJyPgogICAgICogVGhlIG1heGltdW0gdmFsdWUgcmVwcmVzZW50cyB0aGUgbG9uZ2VzdCBwb3NzaWJsZSBkaXN0YW5jZSBpbiB0aGUgY29sb3JzcGFjZS4gZS5nLiBmcm9tIFJHQigwLCAwLCAwKSB0byBSR0IoMjU1LCAyNTUsIDI1NSkgZm9yIHRoZSBSR0IgY29sb3JzcGFjZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNrcGl4ZWwuaXNwaXhlbHNpbWlsYXJxdWFudHVtLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkY29sb3IKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZ1enoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxFeGNlcHRpb24gb24gZmFpbHVyZQogICAgICogQHNpbmNlIDMuMy4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1BpeGVsU2ltaWxhclF1YW50dW0oJGNvbG9yLCAkZnV6eikge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGNvbG9yIG9mIHRoZSBwaXhlbCBpbiBhbiBhcnJheSBhcyBRdWFudHVtIHZhbHVlcy4gSWYgSW1hZ2VNYWdpY2sgd2FzIGNvbXBpbGVkIGFzIEhEUkkgdGhlc2Ugd2lsbCBiZSBmbG9hdHMsIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgaW50ZWdlcnMuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2twaXhlbC5nZXRjb2xvcnF1YW50dW0ucGhwCiAgICAgKiBAcmV0dXJuIG1peGVkIFRoZSBxdWFudHVtIHZhbHVlIG9mIHRoZSBjb2xvciBlbGVtZW50LiBGbG9hdCBpZiBJbWFnZU1hZ2ljayB3YXMgY29tcGlsZWQgd2l0aCBIRFJJLCBvdGhlcndpc2UgYW4gaW50LgogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxFeGNlcHRpb24gb24gZmFpbHVyZQogICAgICogQHNpbmNlIDMuMy4wCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2xvclF1YW50dW0oKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgY29sb3IgY291bnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29sb3IgZnJvbSBhbm90aGVyIEltYWdpY2tQaXhlbCBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIEltYWdpY2tQaXhlbCAkc3JjUGl4ZWwKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBJbWFnaWNrUGl4ZWxFeGNlcHRpb24gb24gZmFpbHVyZQogICAgICogQHNpbmNlIDMuNC4xCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb2xvckZyb21QaXhlbChJbWFnaWNrUGl4ZWwgJHNyY1BpeGVsKSB7fQp9Ci8vIEVuZCBvZiBpbWFnaWNrIHYuMy4yLjBSQzEKCi8vIFN0YXJ0IG9mIEltYWdpY2sgdjMuMy4wUkMxCgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5pbWFnaWNra2VybmVsLnBocAogKi8KY2xhc3MgSW1hZ2lja0tlcm5lbAp7CiAgICAvKioKICAgICAqIEF0dGFjaCBhbm90aGVyIGtlcm5lbCB0byB0aGlzIGtlcm5lbCB0byBhbGxvdyB0aGVtIHRvIGJvdGggYmUgYXBwbGllZCBpbiBhIHNpbmdsZSBtb3JwaG9sb2d5IG9yIGZpbHRlciBmdW5jdGlvbi4gUmV0dXJucyB0aGUgbmV3IGNvbWJpbmVkIGtlcm5lbC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2tlcm5lbC5hZGRrZXJuZWwucGhwCiAgICAgKiBAcGFyYW0gSW1hZ2lja0tlcm5lbCAkaW1hZ2lja0tlcm5lbAogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIEltYWdpY2tLZXJuZWxFeGNlcHRpb24gb24gZXJyb3IKICAgICAqIEBzaW5jZSAzLjMuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkS2VybmVsKEltYWdpY2tLZXJuZWwgJGltYWdpY2tLZXJuZWwpIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIGEgZ2l2ZW4gYW1vdW50IG9mIHRoZSAnVW5pdHknIENvbnZvbHV0aW9uIEtlcm5lbCB0byB0aGUgZ2l2ZW4gcHJlLXNjYWxlZCBhbmQgbm9ybWFsaXplZCBLZXJuZWwuIFRoaXMgaW4gZWZmZWN0IGFkZHMgdGhhdCBhbW91bnQgb2YgdGhlIG9yaWdpbmFsIGltYWdlIGludG8gdGhlIHJlc3VsdGluZyBjb252b2x1dGlvbiBrZXJuZWwuIFRoZSByZXN1bHRpbmcgZWZmZWN0IGlzIHRvIGNvbnZlcnQgdGhlIGRlZmluZWQga2VybmVscyBpbnRvIGJsZW5kZWQgc29mdC1ibHVycywgdW5zaGFycCBrZXJuZWxzIG9yIGludG8gc2hhcnBlbmluZyBrZXJuZWxzLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFnaWNra2VybmVsLmFkZHVuaXR5a2VybmVsLnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIEltYWdpY2tLZXJuZWxFeGNlcHRpb24gb24gZXJyb3IKICAgICAqIEBzaW5jZSAzLjMuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkVW5pdHlLZXJuZWwoKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEga2VybmVsIGZyb20gYSBidWlsdGluIGluIGtlcm5lbC4gU2VlIGh0dHBzOi8vd3d3LmltYWdlbWFnaWNrLm9yZy9Vc2FnZS9tb3JwaG9sb2d5LyNrZXJuZWwgZm9yIGV4YW1wbGVzLjxicj4KICAgICAqIEN1cnJlbnRseSB0aGUgJ3JvdGF0aW9uJyBzeW1ib2xzIGFyZSBub3Qgc3VwcG9ydGVkLiBFeGFtcGxlOiAkZGlhbW9uZEtlcm5lbCA9IEltYWdpY2tLZXJuZWw6OmZyb21CdWlsdEluKFxJbWFnaWNrOjpLRVJORUxfRElBTU9ORCwgIjIiKTsKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2tlcm5lbC5mcm9tYnVpbHRpbi5waHAKICAgICAqIEBwYXJhbSBpbnQgJGtlcm5lbFR5cGUgVGhlIHR5cGUgb2Yga2VybmVsIHRvIGJ1aWxkIGUuZy4gXEltYWdpY2s6OktFUk5FTF9ESUFNT05ECiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXJuZWxTdHJpbmcgQSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIHBhcmFtZXRlcnMgZS5nLiAiNCwyLjUiCiAgICAgKiBAcmV0dXJuIEltYWdpY2tLZXJuZWwKICAgICAqIEBzaW5jZSAzLjMuMAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21CdWlsdGluKCRrZXJuZWxUeXBlLCAka2VybmVsU3RyaW5nKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEga2VybmVsIGZyb20gYSBidWlsdGluIGluIGtlcm5lbC4gU2VlIGh0dHBzOi8vd3d3LmltYWdlbWFnaWNrLm9yZy9Vc2FnZS9tb3JwaG9sb2d5LyNrZXJuZWwgZm9yIGV4YW1wbGVzLjxicj4KICAgICAqIEN1cnJlbnRseSB0aGUgJ3JvdGF0aW9uJyBzeW1ib2xzIGFyZSBub3Qgc3VwcG9ydGVkLiBFeGFtcGxlOiAkZGlhbW9uZEtlcm5lbCA9IEltYWdpY2tLZXJuZWw6OmZyb21CdWlsdEluKFxJbWFnaWNrOjpLRVJORUxfRElBTU9ORCwgIjIiKTsKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hZ2lja2tlcm5lbC5mcm9tYnVpbHRpbi5waHAKICAgICAqIEBzZWUgaHR0cHM6Ly93d3cuaW1hZ2VtYWdpY2sub3JnL1VzYWdlL21vcnBob2xvZ3kvI2tlcm5lbAogICAgICogQHBhcmFtIGFycmF5ICRtYXRyaXggQSBtYXRyaXggKGkuZS4gMmQgYXJyYXkpIG9mIHZhbHVlcyB0aGF0IGRlZmluZSB0aGUga2VybmVsLiBFYWNoIGVsZW1lbnQgc2hvdWxkIGJlIGVpdGhlciBhIGZsb2F0IHZhbHVlLCBvciBGQUxTRSBpZiB0aGF0IGVsZW1lbnQgc2hvdWxkbid0IGJlIHVzZWQgYnkgdGhlIGtlcm5lbC4KICAgICAqIEBwYXJhbSBhcnJheSAkb3JpZ2luIFtvcHRpb25hbF0gV2hpY2ggZWxlbWVudCBvZiB0aGUga2VybmVsIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBvcmlnaW4gcGl4ZWwuIGUuZy4gRm9yIGEgM3gzIG1hdHJpeCBzcGVjaWZ5aW5nIHRoZSBvcmlnaW4gYXMgWzIsIDJdIHdvdWxkIHNwZWNpZnkgdGhhdCB0aGUgYm90dG9tIHJpZ2h0IGVsZW1lbnQgc2hvdWxkIGJlIHRoZSBvcmlnaW4gcGl4ZWwuCiAgICAgKiBAcmV0dXJuIEltYWdpY2tLZXJuZWwKICAgICAqIEB0aHJvd3MgSW1hZ2lja0tlcm5lbEV4Y2VwdGlvbiBvbiBlcnJvcgogICAgICogQHNpbmNlIDMuMy4wCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbU1hdHJpeCgkbWF0cml4LCAkb3JpZ2luKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSAyZCBtYXRyaXggb2YgdmFsdWVzIHVzZWQgaW4gdGhpcyBrZXJuZWwuIFRoZSBlbGVtZW50cyBhcmUgZWl0aGVyIGZsb2F0IGZvciBlbGVtZW50cyB0aGF0IGFyZSB1c2VkIG9yICdmYWxzZScgaWYgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHNraXBwZWQuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2trZXJuZWwuZ2V0bWF0cml4LnBocAogICAgICogQHJldHVybiBhcnJheSBBIG1hdHJpeCAoMmQgYXJyYXkpIG9mIHRoZSB2YWx1ZXMgdGhhdCByZXByZXNlbnQgdGhlIGtlcm5lbC4KICAgICAqIEB0aHJvd3MgSW1hZ2lja0tlcm5lbEV4Y2VwdGlvbiBvbiBlcnJvcgogICAgICogQHNpbmNlIDMuMy4wCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYXRyaXgoKSB7fQoKICAgIC8qKgogICAgICogU2NhbGVLZXJuZWxJbmZvKCkgc2NhbGVzIHRoZSBnaXZlbiBrZXJuZWwgbGlzdCBieSB0aGUgZ2l2ZW4gYW1vdW50LCB3aXRoIG9yIHdpdGhvdXQgbm9ybWFsaXphdGlvbiBvZiB0aGUgc3VtIG9mIHRoZSBrZXJuZWwgdmFsdWVzIChhcyBwZXIgZ2l2ZW4gZmxhZ3MpLjxicj4KICAgICAqIFRoZSBleGFjdCBiZWhhdmlvdXIgb2YgdGhpcyBmdW5jdGlvbiBkZXBlbmRzIG9uIHRoZSBub3JtYWxpemF0aW9uIHR5cGUgYmVpbmcgdXNlZCBwbGVhc2Ugc2VlIGh0dHBzOi8vd3d3LmltYWdlbWFnaWNrLm9yZy9hcGkvbW9ycGhvbG9neS5waHAjU2NhbGVLZXJuZWxJbmZvIGZvciBkZXRhaWxzLjxicj4KICAgICAqIEZsYWcgc2hvdWxkIGJlIG9uZSBvZiBJbWFnaWNrOjpOT1JNQUxJWkVfS0VSTkVMX1ZBTFVFLCBJbWFnaWNrOjpOT1JNQUxJWkVfS0VSTkVMX0NPUlJFTEFURSwgSW1hZ2ljazo6Tk9STUFMSVpFX0tFUk5FTF9QRVJDRU5UIG9yIG5vdCBzZXQuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2trZXJuZWwuc2NhbGUucGhwCiAgICAgKiBAc2VlIGh0dHBzOi8vd3d3LmltYWdlbWFnaWNrLm9yZy9hcGkvbW9ycGhvbG9neS5waHAjU2NhbGVLZXJuZWxJbmZvCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgSW1hZ2lja0tlcm5lbEV4Y2VwdGlvbiBvbiBlcnJvcgogICAgICogQHNpbmNlIDMuMy4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzY2FsZSgpIHt9CgogICAgLyoqCiAgICAgKiBTZXBhcmF0ZXMgYSBsaW5rZWQgc2V0IG9mIGtlcm5lbHMgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgSW1hZ2lja0tlcm5lbHMuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYWdpY2trZXJuZWwuc2VwYXJhdGUucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgSW1hZ2lja0tlcm5lbEV4Y2VwdGlvbiBvbiBlcnJvcgogICAgICogQHNpbmNlIDMuMy4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXBlcmF0ZSgpIHt9Cn0Kc2VydmljZXM6CiAgcGhwX3VuZGVyX3Rlc3Q6CiAgICBidWlsZDogdGVzdHMvRG9ja2VySW1hZ2VzLyR7UEhQX1ZFUlNJT059CiAgICB2b2x1bWVzOgogICAgICAtIC46L29wdC9wcm9qZWN0L3BocHN0b3JtLXN0dWJzCiAgdGVzdF9ydW5uZXI6CiAgICBidWlsZDogdGVzdHMvRG9ja2VySW1hZ2VzL3Rlc3RSdW5uZXIKICAgIHZvbHVtZXM6CiAgICAgIC0gLjovb3B0L3Byb2plY3QvcGhwc3Rvcm0tc3R1YnMKICBwZWNsX2V4dGVuc2lvbnM6CiAgICBidWlsZDogdGVzdHMvRG9ja2VySW1hZ2VzL3BlY2xFeHRlbnNpb25zCiAgICB2b2x1bWVzOgogICAgICAtIC46L29wdC9wcm9qZWN0L3BocHN0b3JtLXN0dWJzCjw/cGhwCgovLyBTdGFydCBvZiBnZXR0ZXh0IHYuCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxQdXJlOwoKLyoqCiAqIFNldHMgdGhlIGRlZmF1bHQgZG9tYWluCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udGV4dGRvbWFpbi5waHAKICogQHBhcmFtIHN0cmluZ3xudWxsICRkb21haW4gPHA+CiAqIFRoZSBuZXcgbWVzc2FnZSBkb21haW4sIG9yIDxiPk5VTEw8L2I+IHRvIGdldCB0aGUgY3VycmVudCBzZXR0aW5nIHdpdGhvdXQKICogY2hhbmdpbmcgaXQKICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyBJZiBzdWNjZXNzZnVsLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgbWVzc2FnZQogKiBkb21haW4sIGFmdGVyIHBvc3NpYmx5IGNoYW5naW5nIGl0LgogKi8KZnVuY3Rpb24gdGV4dGRvbWFpbig/c3RyaW5nICRkb21haW4gPSBudWxsKTogc3RyaW5nIHt9CgovKioKICogTG9va3VwIGEgbWVzc2FnZSBpbiB0aGUgY3VycmVudCBkb21haW4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5nZXR0ZXh0LnBocAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIDxwPgogKiBUaGUgbWVzc2FnZSBiZWluZyB0cmFuc2xhdGVkLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIGEgdHJhbnNsYXRlZCBzdHJpbmcgaWYgb25lIGlzIGZvdW5kIGluIHRoZQogKiB0cmFuc2xhdGlvbiB0YWJsZSwgb3IgdGhlIHN1Ym1pdHRlZCBtZXNzYWdlIGlmIG5vdCBmb3VuZC4KICovCiNbUHVyZV0KZnVuY3Rpb24gXyhzdHJpbmcgJG1lc3NhZ2UpOiBzdHJpbmcge30KCi8qKgogKiBMb29rdXAgYSBtZXNzYWdlIGluIHRoZSBjdXJyZW50IGRvbWFpbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmdldHRleHQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgPHA+CiAqIFRoZSBtZXNzYWdlIGJlaW5nIHRyYW5zbGF0ZWQuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgYSB0cmFuc2xhdGVkIHN0cmluZyBpZiBvbmUgaXMgZm91bmQgaW4gdGhlCiAqIHRyYW5zbGF0aW9uIHRhYmxlLCBvciB0aGUgc3VibWl0dGVkIG1lc3NhZ2UgaWYgbm90IGZvdW5kLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBnZXR0ZXh0KHN0cmluZyAkbWVzc2FnZSk6IHN0cmluZyB7fQoKLyoqCiAqIE92ZXJyaWRlIHRoZSBjdXJyZW50IGRvbWFpbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRnZXR0ZXh0LnBocAogKiBAcGFyYW0gc3RyaW5nICRkb21haW4gPHA+CiAqIFRoZSBkb21haW4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIDxwPgogKiBUaGUgbWVzc2FnZQogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIG9uIHN1Y2Nlc3MuCiAqLwpmdW5jdGlvbiBkZ2V0dGV4dChzdHJpbmcgJGRvbWFpbiwgc3RyaW5nICRtZXNzYWdlKTogc3RyaW5nIHt9CgovKioKICogT3ZlcnJpZGVzIHRoZSBkb21haW4gZm9yIGEgc2luZ2xlIGxvb2t1cAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRjZ2V0dGV4dC5waHAKICogQHBhcmFtIHN0cmluZyAkZG9tYWluIDxwPgogKiBUaGUgZG9tYWluCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSA8cD4KICogVGhlIG1lc3NhZ2UKICogPC9wPgogKiBAcGFyYW0gaW50ICRjYXRlZ29yeSA8cD4KICogVGhlIGNhdGVnb3J5CiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgQSBzdHJpbmcgb24gc3VjY2Vzcy4KICovCmZ1bmN0aW9uIGRjZ2V0dGV4dChzdHJpbmcgJGRvbWFpbiwgc3RyaW5nICRtZXNzYWdlLCBpbnQgJGNhdGVnb3J5KTogc3RyaW5nIHt9CgovKioKICogU2V0cyB0aGUgcGF0aCBmb3IgYSBkb21haW4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5iaW5kdGV4dGRvbWFpbi5waHAKICogQHBhcmFtIHN0cmluZyAkZG9tYWluIDxwPgogKiBUaGUgZG9tYWluCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRkaXJlY3RvcnkgPHA+CiAqIFRoZSBkaXJlY3RvcnkgcGF0aC4gU2luY2UgUEhQIDguMC4zIGRpcmVjdG9yeSBpcyBudWxsYWJsZS4gSWYgbnVsbCBpcyBwYXNzZWQsIHRoZSBjdXJyZW50bHkgc2V0IGRpcmVjdG9yeSBpcyByZXR1cm5lZC4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgZnVsbCBwYXRobmFtZSBmb3IgdGhlIDxpPmRvbWFpbjwvaT4gY3VycmVudGx5IGJlaW5nIHNldC4KICovCmZ1bmN0aW9uIGJpbmR0ZXh0ZG9tYWluKHN0cmluZyAkZG9tYWluLCAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnc3RyaW5nJyldICRkaXJlY3RvcnkgPSBudWxsKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogUGx1cmFsIHZlcnNpb24gb2YgZ2V0dGV4dAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm5nZXR0ZXh0LnBocAogKiBAcGFyYW0gc3RyaW5nICRzaW5ndWxhcgogKiBAcGFyYW0gc3RyaW5nICRwbHVyYWwKICogQHBhcmFtIGludCAkY291bnQKICogQHJldHVybiBzdHJpbmcgY29ycmVjdCBwbHVyYWwgZm9ybSBvZiBtZXNzYWdlIGlkZW50aWZpZWQgYnkKICogPGk+bXNnaWQxPC9pPiBhbmQgPGk+bXNnaWQyPC9pPgogKiBmb3IgY291bnQgPGk+bjwvaT4uCiAqLwojW1B1cmVdCmZ1bmN0aW9uIG5nZXR0ZXh0KHN0cmluZyAkc2luZ3VsYXIsIHN0cmluZyAkcGx1cmFsLCBpbnQgJGNvdW50KTogc3RyaW5nIHt9CgovKioKICogUGx1cmFsIHZlcnNpb24gb2YgZGdldHRleHQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kbmdldHRleHQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGRvbWFpbiA8cD4KICogVGhlIGRvbWFpbgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHNpbmd1bGFyCiAqIEBwYXJhbSBzdHJpbmcgJHBsdXJhbAogKiBAcGFyYW0gaW50ICRjb3VudAogKiBAcmV0dXJuIHN0cmluZyBBIHN0cmluZyBvbiBzdWNjZXNzLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBkbmdldHRleHQoc3RyaW5nICRkb21haW4sIHN0cmluZyAkc2luZ3VsYXIsIHN0cmluZyAkcGx1cmFsLCBpbnQgJGNvdW50KTogc3RyaW5nIHt9CgovKioKICogUGx1cmFsIHZlcnNpb24gb2YgZGNnZXR0ZXh0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGNuZ2V0dGV4dC5waHAKICogQHBhcmFtIHN0cmluZyAkZG9tYWluIDxwPgogKiBUaGUgZG9tYWluCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc2luZ3VsYXIKICogQHBhcmFtIHN0cmluZyAkcGx1cmFsCiAqIEBwYXJhbSBpbnQgJGNvdW50CiAqIEBwYXJhbSBpbnQgJGNhdGVnb3J5CiAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIG9uIHN1Y2Nlc3MuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGRjbmdldHRleHQoc3RyaW5nICRkb21haW4sIHN0cmluZyAkc2luZ3VsYXIsIHN0cmluZyAkcGx1cmFsLCBpbnQgJGNvdW50LCBpbnQgJGNhdGVnb3J5KTogc3RyaW5nIHt9CgovKioKICogU3BlY2lmeSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGluIHdoaWNoIHRoZSBtZXNzYWdlcyBmcm9tIHRoZSBET01BSU4gbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgcmV0dXJuZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5iaW5kLXRleHRkb21haW4tY29kZXNldC5waHAKICogQHBhcmFtIHN0cmluZyAkZG9tYWluIDxwPgogKiBUaGUgZG9tYWluCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRjb2Rlc2V0IDxwPgogKiBUaGUgY29kZSBzZXQuIFNpbmNlIDguMC4zIGlzIG51bGxhYmxlLiAgSWYgbnVsbCBpcyBwYXNzZWQsIHRoZSBjdXJyZW50bHkgc2V0IGVuY29kaW5nIGlzIHJldHVybmVkLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIEEgc3RyaW5nIG9uIHN1Y2Nlc3MuCiAqLwpmdW5jdGlvbiBiaW5kX3RleHRkb21haW5fY29kZXNldChzdHJpbmcgJGRvbWFpbiwgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJ3N0cmluZycpXSAkY29kZXNldCA9IG51bGwpOiBzdHJpbmd8ZmFsc2Uge30KCi8vIEVuZCBvZiBnZXR0ZXh0IHYuCjw/cGhwCgovLyBTdGFydCBvZiBjb21fZG90bmV0IHYuCgovKioKICogVGhlIENPTSBjbGFzcyBhbGxvd3MgeW91IHRvIGluc3RhbnRpYXRlIGFuIE9MRSBjb21wYXRpYmxlIENPTSBvYmplY3QgYW5kIGNhbGwgaXRzIG1ldGhvZHMgYW5kIGFjY2VzcyBpdHMgcHJvcGVydGllcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5jb20ucGhwCiAqLwpjbGFzcyBDT00KewogICAgLyoqCiAgICAgKiAoUEhQIDQgJmd0Oz0gNC4xLjAsIFBIUCA1LCBQSFAgNyk8YnIvPgogICAgICogQ09NIGNsYXNzIGNvbnN0cnVjdG9yLgogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlX25hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcl9uYW1lIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSBpbnQgJGNvZGVwYWdlIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHR5cGVsaWIgW29wdGlvbmFsXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1vZHVsZV9uYW1lLCAkc2VydmVyX25hbWUgPSBudWxsLCAkY29kZXBhZ2UgPSBDUF9BQ1AsICR0eXBlbGliID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRuYW1lLCAkdmFsdWUpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY2FsbCgkbmFtZSwgJGFyZ3MpIHt9Cn0KCi8qKgogKiBUaGUgRE9UTkVUIGNsYXNzIGFsbG93cyB5b3UgdG8gaW5zdGFudGlhdGUgYSBjbGFzcyBmcm9tIGEgLk5ldCBhc3NlbWJseSBhbmQgY2FsbCBpdHMgbWV0aG9kcyBhbmQgYWNjZXNzIGl0cyBwcm9wZXJ0aWVzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvdG5ldC5waHAKICovCmNsYXNzIERPVE5FVAp7CiAgICAvKioKICAgICAqIChQSFAgNCAmZ3Q7PSA0LjEuMCwgUEhQIDUsIFBIUCA3KTxici8+CiAgICAgKiBDT00gY2xhc3MgY29uc3RydWN0b3IuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhc3NlbWJseV9uYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzc19uYW1lCiAgICAgKiBAcGFyYW0gaW50ICRjb2RlcGFnZSBbb3B0aW9uYWxdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkYXNzZW1ibHlfbmFtZSwgc3RyaW5nICRjbGFzc19uYW1lLCAkY29kZXBhZ2UgPSBDUF9BQ1ApIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRuYW1lKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgkbmFtZSwgJHZhbHVlKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG5hbWUsICRhcmdzKSB7fQp9CgovKioKICogVGhlIFZBUklBTlQgaXMgQ09NJ3MgZXF1aXZhbGVudCBvZiB0aGUgUEhQIHp2YWw7IGl0IGlzIGEgc3RydWN0dXJlIHRoYXQgY2FuIGNvbnRhaW4gYSB2YWx1ZSB3aXRoIGEgcmFuZ2Ugb2YgZGlmZmVyZW50IHBvc3NpYmxlIHR5cGVzLiBUaGUgVkFSSUFOVCBjbGFzcyBwcm92aWRlZCBieSB0aGUgQ09NIGV4dGVuc2lvbiBhbGxvd3MgeW91IHRvIGhhdmUgbW9yZSBjb250cm9sIG92ZXIgdGhlIHdheSB0aGF0IFBIUCBwYXNzZXMgdmFsdWVzIHRvIGFuZCBmcm9tIENPTS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy52YXJpYW50LnBocAogKi8KY2xhc3MgVkFSSUFOVAp7CiAgICAvKioKICAgICAqIChQSFAgNCAmZ3Q7PSA0LjEuMCwgUEhQIDUsIFBIUCA3KTxici8+CiAgICAgKiBDT00gY2xhc3MgY29uc3RydWN0b3IuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSBpbnQgJHR5cGUgW29wdGlvbmFsXQogICAgICogQHBhcmFtIGludCAkY29kZXBhZ2UgW29wdGlvbmFsXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlID0gbnVsbCwgaW50ICR0eXBlID0gVlRfRU1QVFksICRjb2RlcGFnZSA9IENQX0FDUCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRuYW1lLCAkdmFsdWUpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY2FsbCgkbmFtZSwgJGFyZ3MpIHt9Cn0KCi8qKgogKiBUaGlzIGV4dGVuc2lvbiB3aWxsIHRocm93IGluc3RhbmNlcyBvZiB0aGUgY2xhc3MgY29tX2V4Y2VwdGlvbiB3aGVuZXZlciB0aGVyZSBpcyBhIHBvdGVudGlhbGx5IGZhdGFsIGVycm9yIHJlcG9ydGVkIGJ5IENPTS4gQWxsIENPTSBleGNlcHRpb25zIGhhdmUgYSB3ZWxsLWRlZmluZWQgY29kZSBwcm9wZXJ0eSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBIUkVTVUxUIHJldHVybiB2YWx1ZSBmcm9tIHRoZSB2YXJpb3VzIENPTSBvcGVyYXRpb25zLiBZb3UgbWF5IHVzZSB0aGlzIGNvZGUgdG8gbWFrZSBwcm9ncmFtbWF0aWMgZGVjaXNpb25zIG9uIGhvdyB0byBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jb20uZXJyb3ItaGFuZGxpbmcucGhwCiAqLwpjbGFzcyBjb21fZXhjZXB0aW9uIGV4dGVuZHMgXEV4Y2VwdGlvbiB7fQoKLyoqCiAqIChQSFAgNSwgUEhQIDcpPGJyLz4KICogR2VuZXJhdGUgYSBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllciAoR1VJRCkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5jb20tY3JlYXRlLWd1aWQucGhwCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjb21fY3JlYXRlX2d1aWQoKSB7fQoKLyoqCiAqIChQSFAgNCAmZ3Q7PSA0LjIuMCwgUEhQIDUsIFBIUCA3KTxici8+CiAqIENvbm5lY3QgZXZlbnRzIGZyb20gYSBDT00gb2JqZWN0IHRvIGEgUEhQIG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmNvbS1ldmVudC1zaW5rLnBocAogKiBAcGFyYW0gXFZBUklBTlQgJGNvbW9iamVjdAogKiBAcGFyYW0gb2JqZWN0ICRzaW5rb2JqZWN0CiAqIEBwYXJhbSBzdHJpbmcgJHNpbmtpbnRlcmZhY2UgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGNvbV9ldmVudF9zaW5rKCRjb21vYmplY3QsICRzaW5rb2JqZWN0LCAkc2lua2ludGVyZmFjZSA9IG51bGwpIHt9CgovKioKICogKFBIUCA1LCBQSFAgNyk8YnIvPgogKiBSZXR1cm5zIGEgaGFuZGxlIHRvIGFuIGFscmVhZHkgcnVubmluZyBpbnN0YW5jZSBvZiBhIENPTSBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5jb20tZ2V0LWFjdGl2ZS1vYmplY3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHByb2dpZAogKiBAcGFyYW0gaW50ICRjb2RlX3BhZ2UgW29wdGlvbmFsXQogKiBAcmV0dXJuIFxWQVJJQU5UCiAqLwpmdW5jdGlvbiBjb21fZ2V0X2FjdGl2ZV9vYmplY3QoJHByb2dpZCwgJGNvZGVfcGFnZSA9IENQX0FDUCkge30KCi8qKgogKiAoUEhQIDQgJmd0Oz0gNC4xLjAsIFBIUCA1LCBQSFAgNyk8YnIvPgogKiBMb2FkcyBhIFR5cGVsaWIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5jb20tZ2V0LWFjdGl2ZS1vYmplY3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGVsaWJfbmFtZQogKiBAcGFyYW0gYm9vbCAkY2FzZV9pbnNlbnNpdGl2ZSBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gY29tX2xvYWRfdHlwZWxpYigkdHlwZWxpYl9uYW1lLCAkY2FzZV9pbnNlbnNpdGl2ZSA9IHRydWUpIHt9CgovKioKICogKFBIUCA0ICZndDs9IDQuMi4wLCBQSFAgNSwgUEhQIDcpPGJyLz4KICogUHJvY2VzcyBDT00gbWVzc2FnZXMsIHNsZWVwaW5nIGZvciB1cCB0byB0aW1lb3V0bXMgbWlsbGlzZWNvbmRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uY29tLW1lc3NhZ2UtcHVtcC5waHAKICogQHBhcmFtIGludCAkdGltZW91dG1zIFtvcHRpb25hbF0KICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBjb21fbWVzc2FnZV9wdW1wKCR0aW1lb3V0bXMgPSAwKSB7fQoKLyoqCiAqIChQSFAgNCAmZ3Q7PSA0LjIuMCwgUEhQIDUsIFBIUCA3KTxici8+CiAqIFByaW50IG91dCBhIFBIUCBjbGFzcyBkZWZpbml0aW9uIGZvciBhIGRpc3BhdGNoYWJsZSBpbnRlcmZhY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5jb20tcHJpbnQtdHlwZWluZm8ucGhwCiAqIEBwYXJhbSBvYmplY3QgJGNvbW9iamVjdAogKiBAcGFyYW0gc3RyaW5nICRkaXNwaW50ZXJmYWNlIFtvcHRpb25hbF0KICogQHBhcmFtIGJvb2wgJHdhbnRzaW5rIFtvcHRpb25hbF0KICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBjb21fcHJpbnRfdHlwZWluZm8oJGNvbW9iamVjdCwgJGRpc3BpbnRlcmZhY2UgPSBudWxsLCAkd2FudHNpbmsgPSBmYWxzZSkge30KCi8qKgogKiAoUEhQIDUsIFBIUCA3KTxici8+CiAqIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGEgdmFyaWFudAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnZhcmlhbnQtYWJzLnBocAogKiBAcGFyYW0gbWl4ZWQgJHZhbAogKiBAcmV0dXJuIG1peGVkCiAqLwpmdW5jdGlvbiB2YXJpYW50X2FicygkdmFsKSB7fQoKLyoqCiAqIChQSFAgNSwgUEhQIDcpPGJyLz4KICogIkFkZHMiIHR3byB2YXJpYW50IHZhbHVlcyB0b2dldGhlciBhbmQgcmV0dXJucyB0aGUgcmVzdWx0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1hYnMucGhwCiAqIEBwYXJhbSBtaXhlZCAkbGVmdAogKiBAcGFyYW0gbWl4ZWQgJHJpZ2h0CiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIHZhcmlhbnRfYWRkKCRsZWZ0LCAkcmlnaHQpIHt9CgovKioKICogKFBIUCA1LCBQSFAgNyk8YnIvPgogKiBQZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9wZXJhdGlvbiBiZXR3ZWVuIHR3byB2YXJpYW50cwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnZhcmlhbnQtYW5kLnBocAogKiBAcGFyYW0gbWl4ZWQgJGxlZnQKICogQHBhcmFtIG1peGVkICRyaWdodAogKiBAcmV0dXJuIG1peGVkCiAqLwpmdW5jdGlvbiB2YXJpYW50X2FuZCgkbGVmdCwgJHJpZ2h0KSB7fQoKLyoqCiAqIChQSFAgNSwgUEhQIDcpPGJyLz4KICogQ29udmVydCBhIHZhcmlhbnQgaW50byBhIG5ldyB2YXJpYW50IG9iamVjdCBvZiBhbm90aGVyIHR5cGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi52YXJpYW50LWNhc3QucGhwCiAqIEBwYXJhbSBcVkFSSUFOVCAkdmFyaWFudAogKiBAcGFyYW0gaW50ICR0eXBlCiAqIEByZXR1cm4gXFZBUklBTlQKICovCmZ1bmN0aW9uIHZhcmlhbnRfY2FzdCgkdmFyaWFudCwgJHR5cGUpIHt9CgovKioKICogKFBIUCA1LCBQSFAgNyk8YnIvPgogKiBDb25jYXRlbmF0ZXMgdHdvIHZhcmlhbnQgdmFsdWVzIHRvZ2V0aGVyIGFuZCByZXR1cm5zIHRoZSByZXN1bHQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi52YXJpYW50LWNhdC5waHAKICogQHBhcmFtIG1peGVkICRsZWZ0CiAqIEBwYXJhbSBtaXhlZCAkcmlnaHQKICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24gdmFyaWFudF9jYXQoJGxlZnQsICRyaWdodCkge30KCi8qKgogKiAoUEhQIDUsIFBIUCA3KTxici8+CiAqIENvbXBhcmVzIHR3byB2YXJpYW50cwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnZhcmlhbnQtY21wLnBocAogKiBAcGFyYW0gbWl4ZWQgJGxlZnQKICogQHBhcmFtIG1peGVkICRyaWdodAogKiBAcGFyYW0gaW50ICRsY2lkIFtvcHRpb25hbF0KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXQogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gdmFyaWFudF9jbXAoJGxlZnQsICRyaWdodCwgJGxjaWQgPSBudWxsLCAkZmxhZ3MgPSBudWxsKSB7fQoKLyoqCiAqIChQSFAgNSwgUEhQIDcpPGJyLz4KICogUmV0dXJucyBhIHZhcmlhbnQgZGF0ZSByZXByZXNlbnRhdGlvbiBvZiBhIFVuaXggdGltZXN0YW1wCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1kYXRlLWZyb20tdGltZXN0YW1wLnBocAogKiBAcGFyYW0gaW50ICR0aW1lc3RhbXAKICogQHJldHVybiBcVkFSSUFOVAogKi8KZnVuY3Rpb24gdmFyaWFudF9kYXRlX2Zyb21fdGltZXN0YW1wKCR0aW1lc3RhbXApIHt9CgovKioKICogKFBIUCA1LCBQSFAgNyk8YnIvPgogKiBDb252ZXJ0cyBhIHZhcmlhbnQgZGF0ZS90aW1lIHZhbHVlIHRvIFVuaXggdGltZXN0YW1wCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1kYXRlLXRvLXRpbWVzdGFtcC5waHAKICogQHBhcmFtIFxWQVJJQU5UICR2YXJpYW50CiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB2YXJpYW50X2RhdGVfdG9fdGltZXN0YW1wKCR2YXJpYW50KSB7fQoKLyoqCiAqIChQSFAgNSwgUEhQIDcpPGJyLz4KICogUmV0dXJucyB0aGUgcmVzdWx0IGZyb20gZGl2aWRpbmcgdHdvIHZhcmlhbnRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1kaXYucGhwCiAqIEBwYXJhbSBtaXhlZCAkbGVmdAogKiBAcGFyYW0gbWl4ZWQgJHJpZ2h0CiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIHZhcmlhbnRfZGl2KCRsZWZ0LCAkcmlnaHQpIHt9CgovKioKICogKFBIUCA1LCBQSFAgNyk8YnIvPgogKiBQZXJmb3JtcyBhIGJpdHdpc2UgZXF1aXZhbGVuY2Ugb24gdHdvIHZhcmlhbnRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1lcXYucGhwCiAqIEBwYXJhbSBtaXhlZCAkbGVmdAogKiBAcGFyYW0gbWl4ZWQgJHJpZ2h0CiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIHZhcmlhbnRfZXF2KCRsZWZ0LCAkcmlnaHQpIHt9CgovKioKICogKFBIUCA1LCBQSFAgNyk8YnIvPgogKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIHBvcnRpb24gb2YgYSB2YXJpYW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1maXgucGhwCiAqIEBwYXJhbSBtaXhlZCAkdmFyaWFudAogKiBAcmV0dXJuIG1peGVkCiAqLwpmdW5jdGlvbiB2YXJpYW50X2ZpeCgkdmFyaWFudCkge30KCi8qKgogKiAoUEhQIDUsIFBIUCA3KTxici8+CiAqIFJldHVybnMgdGhlIHR5cGUgb2YgYSB2YXJpYW50IG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnZhcmlhbnQtZ2V0LXR5cGUucGhwCiAqIEBwYXJhbSBWQVJJQU5UICR2YXJpYW50CiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB2YXJpYW50X2dldF90eXBlKCR2YXJpYW50KSB7fQoKLyoqCiAqIChQSFAgNSwgUEhQIDcpPGJyLz4KICogQ29udmVydHMgdmFyaWFudHMgdG8gaW50ZWdlcnMgYW5kIHRoZW4gcmV0dXJucyB0aGUgcmVzdWx0IGZyb20gZGl2aWRpbmcgdGhlbQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnZhcmlhbnQtaWRpdi5waHAKICogQHBhcmFtIG1peGVkICRsZWZ0CiAqIEBwYXJhbSBtaXhlZCAkcmlnaHQKICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24gdmFyaWFudF9pZGl2KCRsZWZ0LCAkcmlnaHQpIHt9CgovKioKICogKFBIUCA1LCBQSFAgNyk8YnIvPgogKiBQZXJmb3JtcyBhIGJpdHdpc2UgaW1wbGljYXRpb24gb24gdHdvIHZhcmlhbnRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1pbXAucGhwCiAqIEBwYXJhbSBtaXhlZCAkbGVmdAogKiBAcGFyYW0gbWl4ZWQgJHJpZ2h0CiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIHZhcmlhbnRfaW1wKCRsZWZ0LCAkcmlnaHQpIHt9CgovKioKICogKFBIUCA1LCBQSFAgNyk8YnIvPgogKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIHBvcnRpb24gb2YgYSB2YXJpYW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1pbnQucGhwCiAqIEBwYXJhbSBtaXhlZCAkdmFyaWFudAogKiBAcmV0dXJuIG1peGVkCiAqLwpmdW5jdGlvbiB2YXJpYW50X2ludCgkdmFyaWFudCkge30KCi8qKgogKiAoUEhQIDUsIFBIUCA3KTxici8+CiAqIERpdmlkZXMgdHdvIHZhcmlhbnRzIGFuZCByZXR1cm5zIG9ubHkgdGhlIHJlbWFpbmRlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnZhcmlhbnQtbW9kLnBocAogKiBAcGFyYW0gbWl4ZWQgJGxlZnQKICogQHBhcmFtIG1peGVkICRyaWdodAogKiBAcmV0dXJuIG1peGVkCiAqLwpmdW5jdGlvbiB2YXJpYW50X21vZCgkbGVmdCwgJHJpZ2h0KSB7fQoKLyoqCiAqIChQSFAgNSwgUEhQIDcpPGJyLz4KICogTXVsdGlwbGllcyB0aGUgdmFsdWVzIG9mIHRoZSB0d28gdmFyaWFudHMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi52YXJpYW50LW11bC5waHAKICogQHBhcmFtIG1peGVkICRsZWZ0CiAqIEBwYXJhbSBtaXhlZCAkcmlnaHQKICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24gdmFyaWFudF9tdWwoJGxlZnQsICRyaWdodCkge30KCi8qKgogKiAoUEhQIDUsIFBIUCA3KTxici8+CiAqIFBlcmZvcm1zIGxvZ2ljYWwgbmVnYXRpb24gb24gYSB2YXJpYW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1uZWcucGhwCiAqIEBwYXJhbSBtaXhlZCAkdmFyaWFudAogKiBAcmV0dXJuIG1peGVkCiAqLwpmdW5jdGlvbiB2YXJpYW50X25lZygkdmFyaWFudCkge30KCi8qKgogKiAoUEhQIDUsIFBIUCA3KTxici8+CiAqIFBlcmZvcm1zIGJpdHdpc2Ugbm90IG5lZ2F0aW9uIG9uIGEgdmFyaWFudAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnZhcmlhbnQtbm90LnBocAogKiBAcGFyYW0gbWl4ZWQgJHZhcmlhbnQKICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24gdmFyaWFudF9ub3QoJHZhcmlhbnQpIHt9CgovKioKICogKFBIUCA1LCBQSFAgNyk8YnIvPgogKiBQZXJmb3JtcyBhIGxvZ2ljYWwgZGlzanVuY3Rpb24gb24gdHdvIHZhcmlhbnRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1vci5waHAKICogQHBhcmFtIG1peGVkICRsZWZ0CiAqIEBwYXJhbSBtaXhlZCAkcmlnaHQKICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24gdmFyaWFudF9vcigkbGVmdCwgJHJpZ2h0KSB7fQoKLyoqCiAqIChQSFAgNSwgUEhQIDcpPGJyLz4KICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIHBlcmZvcm1pbmcgdGhlIHBvd2VyIGZ1bmN0aW9uIHdpdGggdHdvIHZhcmlhbnRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1wb3cucGhwCiAqIEBwYXJhbSBtaXhlZCAkbGVmdAogKiBAcGFyYW0gbWl4ZWQgJHJpZ2h0CiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIHZhcmlhbnRfcG93KCRsZWZ0LCAkcmlnaHQpIHt9CgovKioKICogKFBIUCA1LCBQSFAgNyk8YnIvPgogKiBSb3VuZHMgYSB2YXJpYW50IHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1yb3VuZC5waHAKICogQHBhcmFtIG1peGVkICR2YXJpYW50CiAqIEBwYXJhbSBpbnQgJGRlY2ltYWxzCiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIHZhcmlhbnRfcm91bmQoJHZhcmlhbnQsICRkZWNpbWFscykge30KCi8qKgogKiAoUEhQIDUsIFBIUCA3KTxici8+CiAqIENvbnZlcnQgYSB2YXJpYW50IGludG8gYW5vdGhlciB0eXBlICJpbi1wbGFjZSIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi52YXJpYW50LXNldC10eXBlLnBocAogKiBAcGFyYW0gVkFSSUFOVCAkdmFyaWFudAogKiBAcGFyYW0gaW50ICR0eXBlCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdmFyaWFudF9zZXRfdHlwZSgkdmFyaWFudCwgJHR5cGUpIHt9CgovKioKICogKFBIUCA1LCBQSFAgNyk8YnIvPgogKiBBc3NpZ25zIGEgbmV3IHZhbHVlIGZvciBhIHZhcmlhbnQgb2JqZWN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC1zZXQucGhwCiAqIEBwYXJhbSBWQVJJQU5UICR2YXJpYW50CiAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB2YXJpYW50X3NldCgkdmFyaWFudCwgJHZhbHVlKSB7fQoKLyoqCiAqIChQSFAgNSwgUEhQIDcpPGJyLz4KICogU3VidHJhY3RzIHRoZSB2YWx1ZSBvZiB0aGUgcmlnaHQgdmFyaWFudCBmcm9tIHRoZSBsZWZ0IHZhcmlhbnQgdmFsdWUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi52YXJpYW50LXN1Yi5waHAKICogQHBhcmFtIG1peGVkICRsZWZ0CiAqIEBwYXJhbSBtaXhlZCAkcmlnaHQKICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24gdmFyaWFudF9zdWIoJGxlZnQsICRyaWdodCkge30KCi8qKgogKiAoUEhQIDUsIFBIUCA3KTxici8+CiAqIFBlcmZvcm1zIGEgbG9naWNhbCBleGNsdXNpb24gb24gdHdvIHZhcmlhbnRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udmFyaWFudC14b3IucGhwCiAqIEBwYXJhbSBtaXhlZCAkbGVmdAogKiBAcGFyYW0gbWl4ZWQgJHJpZ2h0CiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIHZhcmlhbnRfeG9yKCRsZWZ0LCAkcmlnaHQpIHt9CgpkZWZpbmUoJ0NMU0NUWF9JTlBST0NfU0VSVkVSJywgMSk7CmRlZmluZSgnQ0xTQ1RYX0lOUFJPQ19IQU5ETEVSJywgMik7CmRlZmluZSgnQ0xTQ1RYX0xPQ0FMX1NFUlZFUicsIDQpOwpkZWZpbmUoJ0NMU0NUWF9SRU1PVEVfU0VSVkVSJywgMTYpOwpkZWZpbmUoJ0NMU0NUWF9TRVJWRVInLCAyMSk7CmRlZmluZSgnQ0xTQ1RYX0FMTCcsIDIzKTsKCmRlZmluZSgnVlRfTlVMTCcsIDEpOwpkZWZpbmUoJ1ZUX0VNUFRZJywgMCk7CmRlZmluZSgnVlRfVUkxJywgMTcpOwpkZWZpbmUoJ1ZUX0kyJywgMik7CmRlZmluZSgnVlRfSTQnLCAzKTsKZGVmaW5lKCdWVF9SNCcsIDQpOwpkZWZpbmUoJ1ZUX1I4JywgNSk7CmRlZmluZSgnVlRfQk9PTCcsIDExKTsKZGVmaW5lKCdWVF9FUlJPUicsIDEwKTsKZGVmaW5lKCdWVF9DWScsIDYpOwpkZWZpbmUoJ1ZUX0RBVEUnLCA3KTsKZGVmaW5lKCdWVF9CU1RSJywgOCk7CmRlZmluZSgnVlRfREVDSU1BTCcsIDE0KTsKZGVmaW5lKCdWVF9VTktOT1dOJywgMTMpOwpkZWZpbmUoJ1ZUX0RJU1BBVENIJywgOSk7CmRlZmluZSgnVlRfVkFSSUFOVCcsIDEyKTsKZGVmaW5lKCdWVF9JMScsIDE2KTsKZGVmaW5lKCdWVF9VSTInLCAxOCk7CmRlZmluZSgnVlRfVUk0JywgMTkpOwpkZWZpbmUoJ1ZUX0lOVCcsIDIyKTsKZGVmaW5lKCdWVF9VSU5UJywgMjMpOwpkZWZpbmUoJ1ZUX0FSUkFZJywgODE5Mik7CmRlZmluZSgnVlRfQllSRUYnLCAxNjM4NCk7CgpkZWZpbmUoJ0NQX0FDUCcsIDApOwpkZWZpbmUoJ0NQX01BQ0NQJywgMik7CmRlZmluZSgnQ1BfT0VNQ1AnLCAxKTsKZGVmaW5lKCdDUF9VVEY3JywgNjUwMDApOwpkZWZpbmUoJ0NQX1VURjgnLCA2NTAwMSk7CmRlZmluZSgnQ1BfU1lNQk9MJywgNDIpOwpkZWZpbmUoJ0NQX1RIUkVBRF9BQ1AnLCAzKTsKCmRlZmluZSgnVkFSQ01QX0xUJywgMCk7CmRlZmluZSgnVkFSQ01QX0VRJywgMSk7CmRlZmluZSgnVkFSQ01QX0dUJywgMik7CmRlZmluZSgnVkFSQ01QX05VTEwnLCAzKTsKCmRlZmluZSgnTk9STV9JR05PUkVDQVNFJywgMSk7CmRlZmluZSgnTk9STV9JR05PUkVOT05TUEFDRScsIDIpOwpkZWZpbmUoJ05PUk1fSUdOT1JFU1lNQk9MUycsIDQpOwpkZWZpbmUoJ05PUk1fSUdOT1JFV0lEVEgnLCAxMzEwNzIpOwpkZWZpbmUoJ05PUk1fSUdOT1JFS0FOQVRZUEUnLCA2NTUzNik7CmRlZmluZSgnTk9STV9JR05PUkVLQVNISURBJywgMjYyMTQ0KTsKCmRlZmluZSgnRElTUF9FX0RJVkJZWkVSTycsIC0yMTQ3MzUyNTU4KTsKZGVmaW5lKCdESVNQX0VfT1ZFUkZMT1cnLCAtMjE0NzM1MjU2Nik7CmRlZmluZSgnTUtfRV9VTkFWQUlMQUJMRScsIC0yMTQ3MjIxMDIxKTsKCi8vIEVuZCBvZiBjb20gdi4KPD9waHAKCi8vIFN0YXJ0IG9mIFBFQ0wgcHRocmVhZHMgMy4xLjYKCi8qKgogKiBUaGUgZGVmYXVsdCBvcHRpb25zIGZvciBhbGwgVGhyZWFkcywgY2F1c2VzIHB0aHJlYWRzIHRvIGNvcHkgdGhlIGVudmlyb25tZW50CiAqIHdoZW4gbmV3IFRocmVhZHMgYXJlIHN0YXJ0ZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wdGhyZWFkcy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BUSFJFQURTX0lOSEVSSVRfQUxMJywgMTExODQ4MSk7CgovKioKICogRG8gbm90IGluaGVyaXQgYW55dGhpbmcgd2hlbiBuZXcgVGhyZWFkcyBhcmUgc3RhcnRlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3B0aHJlYWRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUFRIUkVBRFNfSU5IRVJJVF9OT05FJywgMCk7CgovKioKICogSW5oZXJpdCBJTkkgZW50cmllcyB3aGVuIG5ldyBUaHJlYWRzIGFyZSBzdGFydGVkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcHRocmVhZHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQVEhSRUFEU19JTkhFUklUX0lOSScsIDEpOwoKLyoqCiAqIEluaGVyaXQgdXNlciBkZWNsYXJlZCBjb25zdGFudHMgd2hlbiBuZXcgVGhyZWFkcyBhcmUgc3RhcnRlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3B0aHJlYWRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUFRIUkVBRFNfSU5IRVJJVF9DT05TVEFOVFMnLCAxNik7CgovKioKICogSW5oZXJpdCB1c2VyIGRlY2xhcmVkIGNsYXNzZXMgd2hlbiBuZXcgVGhyZWFkcyBhcmUgc3RhcnRlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3B0aHJlYWRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUFRIUkVBRFNfSU5IRVJJVF9DTEFTU0VTJywgNDA5Nik7CgovKioKICogSW5oZXJpdCB1c2VyIGRlY2xhcmVkIGZ1bmN0aW9ucyB3aGVuIG5ldyBUaHJlYWRzIGFyZSBzdGFydGVkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcHRocmVhZHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQVEhSRUFEU19JTkhFUklUX0ZVTkNUSU9OUycsIDI1Nik7CgovKioKICogSW5oZXJpdCBpbmNsdWRlZCBmaWxlIGluZm9ybWF0aW9uIHdoZW4gbmV3IFRocmVhZHMgYXJlIHN0YXJ0ZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wdGhyZWFkcy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BUSFJFQURTX0lOSEVSSVRfSU5DTFVERVMnLCA2NTUzNik7CgovKioKICogSW5oZXJpdCBhbGwgY29tbWVudHMgd2hlbiBuZXcgVGhyZWFkcyBhcmUgc3RhcnRlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3B0aHJlYWRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUFRIUkVBRFNfSU5IRVJJVF9DT01NRU5UUycsIDEwNDg1NzYpOwoKLyoqCiAqIEFsbG93IG5ldyBUaHJlYWRzIHRvIHNlbmQgaGVhZGVycyB0byBzdGFuZGFyZCBvdXRwdXQgKG5vcm1hbGx5IHByb2hpYml0ZWQpCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcHRocmVhZHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQVEhSRUFEU19BTExPV19IRUFERVJTJywgMjY4NDM1NDU2KTsKCi8qKgogKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogKiBBIFBvb2wgaXMgYSBjb250YWluZXIgZm9yLCBhbmQgY29udHJvbGxlciBvZiwgYW4gYWRqdXN0YWJsZSBudW1iZXIgb2YKICogV29ya2Vycy48YnIvPgogKiBQb29saW5nIHByb3ZpZGVzIGEgaGlnaGVyIGxldmVsIGFic3RyYWN0aW9uIG9mIHRoZSBXb3JrZXIgZnVuY3Rpb25hbGl0eSwKICogaW5jbHVkaW5nIHRoZSBtYW5hZ2VtZW50IG9mIHJlZmVyZW5jZXMgaW4gdGhlIHdheSByZXF1aXJlZCBieSBwdGhyZWFkcy4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MucG9vbC5waHAKICovCmNsYXNzIFBvb2wKewogICAgLyoqCiAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBXb3JrZXJzIHRoaXMgUG9vbCBjYW4gdXNlCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcm90ZWN0ZWQgJHNpemU7CgogICAgLyoqCiAgICAgKiBUaGUgY2xhc3Mgb2YgdGhlIFdvcmtlcgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRjbGFzczsKCiAgICAvKioKICAgICAqIFRoZSBhcmd1bWVudHMgZm9yIGNvbnN0cnVjdG9yIG9mIG5ldyBXb3JrZXJzCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkY3RvcjsKCiAgICAvKioKICAgICAqIFJlZmVyZW5jZXMgdG8gV29ya2VycwogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJHdvcmtlcnM7CgogICAgLyoqCiAgICAgKiBPZmZzZXQgaW4gd29ya2VycyBvZiB0aGUgbGFzdCBXb3JrZXIgdXNlZAogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJvdGVjdGVkICRsYXN0OwoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIENvbnN0cnVjdCBhIG5ldyBwb29sIG9mIHdvcmtlcnMuIFBvb2xzIGxhemlseSBjcmVhdGUgdGhlaXIgdGhyZWFkcywgd2hpY2ggbWVhbnMKICAgICAqIG5ldyB0aHJlYWRzIHdpbGwgb25seSBiZSBzcGF3bmVkIHdoZW4gdGhleSBhcmUgcmVxdWlyZWQgdG8gZXhlY3V0ZSB0YXNrcy4KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3Bvb2wuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIGludCAkc2l6ZSA8cD5UaGUgbWF4aW11bSBudW1iZXIgb2Ygd29ya2VycyBmb3IgdGhpcyBwb29sIHRvIGNyZWF0ZTwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIFtvcHRpb25hbF0gPHA+VGhlIGNsYXNzIGZvciBuZXcgV29ya2Vycy4gSWYgbm8gY2xhc3MgaXMKICAgICAqIGdpdmVuLCB0aGVuIGl0IGRlZmF1bHRzIHRvIHRoZSB7QGxpbmsgV29ya2VyfSBjbGFzcy48L3A+CiAgICAgKiBAcGFyYW0gYXJyYXkgJGN0b3IgW29wdGlvbmFsXSA8cD5BbiBhcnJheSBvZiBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIG5ldwogICAgICogV29ya2VyczwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkc2l6ZSwgc3RyaW5nICRjbGFzcyA9ICdXb3JrZXInLCBhcnJheSAkY3RvciA9IFtdKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIEFsbG93cyB0aGUgcG9vbCB0byBjb2xsZWN0IHJlZmVyZW5jZXMgZGV0ZXJtaW5lZCB0byBiZSBnYXJiYWdlIGJ5IHRoZQogICAgICogb3B0aW9uYWxseSBnaXZlbiBjb2xsZWN0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3Bvb2wuY29sbGVjdC5waHAKICAgICAqIEBwYXJhbSBudWxsfGNhbGxhYmxlICRjb2xsZWN0b3IgW29wdGlvbmFsXSA8cD5BIENhbGxhYmxlIGNvbGxlY3RvciB0aGF0IHJldHVybnMgYQogICAgICogYm9vbGVhbiBvbiB3aGV0aGVyIHRoZSB0YXNrIGNhbiBiZSBjb2xsZWN0ZWQgb3Igbm90LiBPbmx5IGluIHJhcmUgY2FzZXMgc2hvdWxkCiAgICAgKiBhIGN1c3RvbSBjb2xsZWN0b3IgbmVlZCB0byBiZSB1c2VkLjwvcD4KICAgICAqIEByZXR1cm4gaW50IDxwPlRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHRhc2tzIGluIHRoZSBwb29sIHRvIGJlIGNvbGxlY3RlZDwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbGxlY3QoP2NhbGxhYmxlICRjb2xsZWN0b3IgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIFJlc2l6ZSB0aGUgUG9vbAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vcG9vbC5yZXNpemUucGhwCiAgICAgKiBAcGFyYW0gaW50ICRzaXplIDxwPlRoZSBtYXhpbXVtIG51bWJlciBvZiBXb3JrZXJzIHRoaXMgUG9vbCBjYW4gY3JlYXRlPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNpemUoaW50ICRzaXplKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIFNodXRzIGRvd24gYWxsIG9mIHRoZSB3b3JrZXJzIGluIHRoZSBwb29sLiBUaGlzIHdpbGwgYmxvY2sgdW50aWwgYWxsIHN1Ym1pdHRlZAogICAgICogdGFza3MgaGF2ZSBiZWVuIGV4ZWN1dGVkLgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vcG9vbC5zaHV0ZG93bi5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2h1dGRvd24oKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIFN1Ym1pdCB0aGUgdGFzayB0byB0aGUgbmV4dCBXb3JrZXIgaW4gdGhlIFBvb2wKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3Bvb2wuc3VibWl0LnBocAogICAgICogQHBhcmFtIFRocmVhZGVkICR0YXNrIDxwPlRoZSB0YXNrIGZvciBleGVjdXRpb248L3A+CiAgICAgKiBAcmV0dXJuIGludCA8cD50aGUgaWRlbnRpZmllciBvZiB0aGUgV29ya2VyIGV4ZWN1dGluZyB0aGUgb2JqZWN0PC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3VibWl0KFRocmVhZGVkICR0YXNrKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIFN1Ym1pdCBhIHRhc2sgdG8gdGhlIHNwZWNpZmllZCB3b3JrZXIgaW4gdGhlIHBvb2wuIFRoZSB3b3JrZXJzIGFyZSBpbmRleGVkCiAgICAgKiBmcm9tIDAsIGFuZCB3aWxsIG9ubHkgZXhpc3QgaWYgdGhlIHBvb2wgaGFzIG5lZWRlZCB0byBjcmVhdGUgdGhlbSAoc2luY2UKICAgICAqIHRocmVhZHMgYXJlIGxhemlseSBzcGF3bmVkKS4KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3Bvb2wuc3VibWl0VG8ucGhwCiAgICAgKiBAcGFyYW0gaW50ICR3b3JrZXIgPHA+VGhlIHdvcmtlciB0byBzdGFjayB0aGUgdGFzayBvbnRvLCBpbmRleGVkIGZyb20gMDwvcD4KICAgICAqIEBwYXJhbSBUaHJlYWRlZCAkdGFzayA8cD5UaGUgdGFzayBmb3IgZXhlY3V0aW9uPC9wPgogICAgICogQHJldHVybiBpbnQgPHA+VGhlIGlkZW50aWZpZXIgb2YgdGhlIHdvcmtlciB0aGF0IGFjY2VwdGVkIHRoZSB0YXNrPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3VibWl0VG8oaW50ICR3b3JrZXIsIFRocmVhZGVkICR0YXNrKSB7fQp9CgovKioKICogVGhyZWFkZWQgb2JqZWN0cyBmb3JtIHRoZSBiYXNpcyBvZiBwdGhyZWFkcyBhYmlsaXR5IHRvIGV4ZWN1dGUgdXNlciBjb2RlCiAqIGluIHBhcmFsbGVsOyB0aGV5IGV4cG9zZSBzeW5jaHJvbml6YXRpb24gbWV0aG9kcyBhbmQgdmFyaW91cyB1c2VmdWwKICogaW50ZXJmYWNlcy48YnIvPgogKiBUaHJlYWRlZCBvYmplY3RzLCBtb3N0IGltcG9ydGFudGx5LCBwcm92aWRlIGltcGxpY2l0IHNhZmV0eSBmb3IgdGhlIHByb2dyYW1tZXI7CiAqIGFsbCBvcGVyYXRpb25zIG9uIHRoZSBvYmplY3Qgc2NvcGUgYXJlIHNhZmUuCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnRocmVhZGVkLnBocAogKi8KY2xhc3MgVGhyZWFkZWQgaW1wbGVtZW50cyBDb2xsZWN0YWJsZSwgVHJhdmVyc2FibGUsIENvdW50YWJsZSwgQXJyYXlBY2Nlc3MKewogICAgLyoqCiAgICAgKiBXb3JrZXIgb2JqZWN0IGluIHdoaWNoIHRoaXMgVGhyZWFkZWQgaXMgYmVpbmcgZXhlY3V0ZWQKICAgICAqIEB2YXIgV29ya2VyCiAgICAgKi8KICAgIHByb3RlY3RlZCAkd29ya2VyOwoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMy4wLjApPGJyLz4KICAgICAqIEluY3JlbWVudHMgdGhlIGludGVybmFsIG51bWJlciBvZiByZWZlcmVuY2VzIHRvIGEgVGhyZWFkZWQgb2JqZWN0CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZFJlZigpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogRmV0Y2hlcyBhIGNodW5rIG9mIHRoZSBvYmplY3RzIHByb3BlcnR5IHRhYmxlIG9mIHRoZSBnaXZlbiBzaXplLAogICAgICogb3B0aW9uYWxseSBwcmVzZXJ2aW5nIGtleXMKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3RocmVhZGVkLmNodW5rLnBocAogICAgICogQHBhcmFtIGludCAkc2l6ZSA8cD5UaGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGZldGNoPC9wPgogICAgICogQHBhcmFtIGJvb2wgJHByZXNlcnZlIFtvcHRpb25hbF0gPHA+UHJlc2VydmUgdGhlIGtleXMgb2YgbWVtYmVycywgYnkgZGVmYXVsdCBmYWxzZTwvcD4KICAgICAqIEByZXR1cm4gYXJyYXkgPHA+QW4gYXJyYXkgb2YgaXRlbXMgZnJvbSB0aGUgb2JqZWN0cyBwcm9wZXJ0eSB0YWJsZTwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNodW5rKCRzaXplLCAkcHJlc2VydmUgPSBmYWxzZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIHB0aHJlYWRzICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcHJvcGVydGllcyBmb3IgdGhpcyBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3RocmVhZGVkLmNvdW50LnBocAogICAgICogQHJldHVybiBpbnQgPHA+VGhlIG51bWJlciBvZiBwcm9wZXJ0aWVzIGZvciB0aGlzIG9iamVjdDwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIHB0aHJlYWRzICZndDs9IDMuMC4wKTxici8+CiAgICAgKiBEZWNyZW1lbnRzIHRoZSBpbnRlcm5hbCBudW1iZXIgb2YgcmVmZXJlbmNlcyB0byBhIFRocmVhZGVkIG9iamVjdAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxSZWYoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjgpPGJyLz4KICAgICAqIE1ha2VzIHRocmVhZCBzYWZlIHN0YW5kYXJkIGNsYXNzIGF0IHJ1bnRpbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3RocmVhZGVkLmV4dGVuZC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIDxwPlRoZSBjbGFzcyB0byBleHRlbmQ8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPHA+QSBib29sZWFuIGluZGljYXRpb24gb2Ygc3VjY2VzczwvcD4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBleHRlbmQoJGNsYXNzKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMy4wLjApPGJyLz4KICAgICAqIFJldHJpZXZlcyB0aGUgaW50ZXJuYWwgbnVtYmVyIG9mIHJlZmVyZW5jZXMgdG8gYSBUaHJlYWRlZCBvYmplY3QKICAgICAqIEByZXR1cm4gaW50IDxwPlRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyB0byB0aGUgVGhyZWFkZWQgb2JqZWN0PC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVmQ291bnQoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIFRlbGwgaWYgdGhlIHJlZmVyZW5jZWQgb2JqZWN0IGlzIGV4ZWN1dGluZwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vdGhyZWFkLmlzcnVubmluZy5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8cD5BIGJvb2xlYW4gaW5kaWNhdGlvbiBvZiBzdGF0ZTwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzUnVubmluZygpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAzLjEuMCk8YnIvPgogICAgICogQGluaGVyaXRkb2MKICAgICAqIEBzZWUgQ29sbGVjdGFibGU6OmlzR2FyYmFnZSgpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0dhcmJhZ2UoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIFRlbGwgaWYgdGhlIHJlZmVyZW5jZWQgb2JqZWN0IHdhcyB0ZXJtaW5hdGVkIGR1cmluZyBleGVjdXRpb247IHN1ZmZlcmVkCiAgICAgKiBmYXRhbCBlcnJvcnMsIG9yIHRocmV3IHVuY2F1Z2h0IGV4Y2VwdGlvbnMKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3RocmVhZGVkLmlzdGVybWluYXRlZC5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8cD5BIGJvb2xlYW4gaW5kaWNhdGlvbiBvZiBzdGF0ZTwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzVGVybWluYXRlZCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogTWVyZ2VzIGRhdGEgaW50byB0aGUgY3VycmVudCBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3RocmVhZGVkLm1lcmdlLnBocAogICAgICogQHZhciBtaXhlZCA8cD5UaGUgZGF0YSB0byBtZXJnZTwvcD4KICAgICAqIEB2YXIgYm9vbCBbb3B0aW9uYWxdIDxwPk92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLCBieSBkZWZhdWx0IHRydWU8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPHA+QSBib29sZWFuIGluZGljYXRpb24gb2Ygc3VjY2VzczwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1lcmdlKCRmcm9tLCAkb3ZlcndyaXRlID0gdHJ1ZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIHB0aHJlYWRzICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBTZW5kIG5vdGlmaWNhdGlvbiB0byB0aGUgcmVmZXJlbmNlZCBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3RocmVhZGVkLm5vdGlmeS5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8cD5BIGJvb2xlYW4gaW5kaWNhdGlvbiBvZiBzdWNjZXNzPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbm90aWZ5KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIHB0aHJlYWRzICZndDs9IDMuMC4wKTxici8+CiAgICAgKiBTZW5kIG5vdGlmaWNhdGlvbiB0byB0aGUgcmVmZXJlbmNlZCBvYmplY3QuIFRoaXMgdW5ibG9ja3MgYXQgbGVhc3Qgb25lCiAgICAgKiBvZiB0aGUgYmxvY2tlZCB0aHJlYWRzIChhcyBvcHBvc2VkIHRvIHVuYmxvY2tpbmcgYWxsIG9mIHRoZW0sIGFzIHNlZW4gd2l0aAogICAgICogVGhyZWFkZWQ6Om5vdGlmeSgpKS4KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3RocmVhZGVkLm5vdGlmeW9uZS5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8cD5BIGJvb2xlYW4gaW5kaWNhdGlvbiBvZiBzdWNjZXNzPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbm90aWZ5T25lKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIHB0aHJlYWRzICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBQb3BzIGFuIGl0ZW0gZnJvbSB0aGUgb2JqZWN0cyBwcm9wZXJ0eSB0YWJsZQogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vdGhyZWFkZWQucG9wLnBocAogICAgICogQHJldHVybiBtaXhlZCA8cD5UaGUgbGFzdCBpdGVtIGZyb20gdGhlIG9iamVjdHMgcHJvcGVydHkgdGFibGU8L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3AoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIFRoZSBwcm9ncmFtbWVyIHNob3VsZCBhbHdheXMgaW1wbGVtZW50IHRoZSBydW4gbWV0aG9kIGZvciBvYmplY3RzCiAgICAgKiB0aGF0IGFyZSBpbnRlbmRlZCBmb3IgZXhlY3V0aW9uLgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vdGhyZWFkZWQucnVuLnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBydW4oKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIFNoaWZ0cyBhbiBpdGVtIGZyb20gdGhlIG9iamVjdHMgcHJvcGVydHkgdGFibGUKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3RocmVhZGVkLnNoaWZ0LnBocAogICAgICogQHJldHVybiBtaXhlZCA8cD5UaGUgZmlyc3QgaXRlbSBmcm9tIHRoZSBvYmplY3RzIHByb3BlcnR5IHRhYmxlPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnQoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIEV4ZWN1dGVzIHRoZSBibG9jayB3aGlsZSByZXRhaW5pbmcgdGhlIHJlZmVyZW5jZWQgb2JqZWN0cwogICAgICogc3luY2hyb25pemF0aW9uIGxvY2sgZm9yIHRoZSBjYWxsaW5nIGNvbnRleHQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3RocmVhZGVkLnN5bmNocm9uaXplZC5waHAKICAgICAqIEBwYXJhbSBDbG9zdXJlICRibG9jayA8cD5UaGUgYmxvY2sgb2YgY29kZSB0byBleGVjdXRlPC9wPgogICAgICogQHBhcmFtIG1peGVkIC4uLiRfIFtvcHRpb25hbF0gPHA+VmFyaWFibGUgbGVuZ3RoIGxpc3Qgb2YgYXJndW1lbnRzCiAgICAgKiB0byB1c2UgYXMgZnVuY3Rpb24gYXJndW1lbnRzIHRvIHRoZSBibG9jazwvcD4KICAgICAqIEByZXR1cm4gbWl4ZWQgPHA+VGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBibG9jazwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN5bmNocm9uaXplZChDbG9zdXJlICRibG9jaywgLi4uJF8pIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogV2lsbCBjYXVzZSB0aGUgY2FsbGluZyBjb250ZXh0IHRvIHdhaXQgZm9yIG5vdGlmaWNhdGlvbiBmcm9tIHRoZQogICAgICogcmVmZXJlbmNlZCBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3RocmVhZGVkLndhaXQucGhwCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lb3V0IFtvcHRpb25hbF0gPHA+QW4gb3B0aW9uYWwgdGltZW91dCBpbiBtaWNyb3NlY29uZHM8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPHA+QSBib29sZWFuIGluZGljYXRpb24gb2Ygc3VjY2VzczwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdhaXQoaW50ICR0aW1lb3V0ID0gMCkge30KCiAgICAvKioKICAgICAqIEBpbmhlcml0ZG9jCiAgICAgKiBAc2VlIEFycmF5QWNjZXNzOjpvZmZzZXRFeGlzdHMoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRvZmZzZXQpIHt9CgogICAgLyoqCiAgICAgKiBAaW5oZXJpdGRvYwogICAgICogQHNlZSBBcnJheUFjY2Vzczo6b2Zmc2V0R2V0KCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgkb2Zmc2V0KSB7fQoKICAgIC8qKgogICAgICogQGluaGVyaXRkb2MKICAgICAqIEBzZWUgQXJyYXlBY2Nlc3M6Om9mZnNldFNldCgpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQGluaGVyaXRkb2MKICAgICAqIEBzZWUgQXJyYXlBY2Nlc3M6Om9mZnNldFVuc2V0KCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRvZmZzZXQpIHt9Cn0KCi8qKgogKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogKiBXaGVuIHRoZSBzdGFydCBtZXRob2Qgb2YgYSBUaHJlYWQgaXMgaW52b2tlZCwgdGhlIHJ1biBtZXRob2QgY29kZSB3aWxsIGJlCiAqIGV4ZWN1dGVkIGluIHNlcGFyYXRlIFRocmVhZCwgaW4gcGFyYWxsZWwuPGJyLz4KICogQWZ0ZXIgdGhlIHJ1biBtZXRob2QgaXMgZXhlY3V0ZWQgdGhlIFRocmVhZCB3aWxsIGV4aXQgaW1tZWRpYXRlbHksIGl0IHdpbGwKICogYmUgam9pbmVkIHdpdGggdGhlIGNyZWF0aW5nIFRocmVhZCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZS4KICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MudGhyZWFkLnBocAogKi8KY2xhc3MgVGhyZWFkIGV4dGVuZHMgVGhyZWFkZWQgaW1wbGVtZW50cyBDb3VudGFibGUsIFRyYXZlcnNhYmxlLCBBcnJheUFjY2Vzcwp7CiAgICAvKioKICAgICAqIChQRUNMIHB0aHJlYWRzICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBXaWxsIHJldHVybiB0aGUgaWRlbnRpdHkgb2YgdGhlIFRocmVhZCB0aGF0IGNyZWF0ZWQgdGhlIHJlZmVyZW5jZWQgVGhyZWFkCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi90aHJlYWQuZ2V0Y3JlYXRvcmlkLnBocAogICAgICogQHJldHVybiBpbnQgPHA+QSBudW1lcmljIGlkZW50aXR5PC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q3JlYXRvcklkKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIHB0aHJlYWRzICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgVGhyZWFkCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi90aHJlYWQuZ2V0Y3VycmVudHRocmVhZC5waHAKICAgICAqIEByZXR1cm4gVGhyZWFkIDxwPkFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgVGhyZWFkPC9wPgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEN1cnJlbnRUaHJlYWQoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIFdpbGwgcmV0dXJuIHRoZSBpZGVudGl0eSBvZiB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBUaHJlYWQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3RocmVhZC5nZXRjdXJyZW50dGhyZWFkaWQucGhwCiAgICAgKiBAcmV0dXJuIGludCA8cD5BIG51bWVyaWMgaWRlbnRpdHk8L3A+CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VycmVudFRocmVhZElkKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIHB0aHJlYWRzICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBXaWxsIHJldHVybiB0aGUgaWRlbnRpdHkgb2YgdGhlIHJlZmVyZW5jZWQgVGhyZWFkCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi90aHJlYWQuZ2V0dGhyZWFkaWQucGhwCiAgICAgKiBAcmV0dXJuIGludCA8cD5BIG51bWVyaWMgaWRlbnRpdHk8L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaHJlYWRJZCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogVGVsbCBpZiB0aGUgcmVmZXJlbmNlZCBUaHJlYWQgaGFzIGJlZW4gam9pbmVkCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi90aHJlYWQuaXNqb2luZWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPHA+QSBib29sZWFuIGluZGljYXRpb24gb2Ygc3RhdGU8L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0pvaW5lZCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogVGVsbCBpZiB0aGUgcmVmZXJlbmNlZCBUaHJlYWQgd2FzIHN0YXJ0ZWQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3RocmVhZC5pc3N0YXJ0ZWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPHA+QSBib29sZWFuIGluZGljYXRpb24gb2Ygc3RhdGU8L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1N0YXJ0ZWQoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIENhdXNlcyB0aGUgY2FsbGluZyBjb250ZXh0IHRvIHdhaXQgZm9yIHRoZSByZWZlcmVuY2VkIFRocmVhZCB0byBmaW5pc2ggZXhlY3V0aW5nCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi90aHJlYWQuam9pbi5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8cD5BIGJvb2xlYW4gaW5kaWNhdGlvbiBvZiBzdWNjZXNzPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gam9pbigpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogV2lsbCBzdGFydCBhIG5ldyBUaHJlYWQgdG8gZXhlY3V0ZSB0aGUgaW1wbGVtZW50ZWQgcnVuIG1ldGhvZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vdGhyZWFkLnN0YXJ0LnBocAogICAgICogQHBhcmFtIGludCAkb3B0aW9ucyBbb3B0aW9uYWxdIDxwPkFuIG9wdGlvbmFsIG1hc2sgb2YgaW5oZXJpdGFuY2UKICAgICAqIGNvbnN0YW50cywgYnkgZGVmYXVsdCA8Yj57QGxpbmsgUFRIUkVBRFNfSU5IRVJJVF9BTEx9PC9iPjwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8cD5BIGJvb2xlYW4gaW5kaWNhdGlvbiBvZiBzdWNjZXNzPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnQoaW50ICRvcHRpb25zID0gUFRIUkVBRFNfSU5IRVJJVF9BTEwpIHt9Cn0KCi8qKgogKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogKiBXb3JrZXIgVGhyZWFkcyBoYXZlIGEgcGVyc2lzdGVudCBjb250ZXh0LCBhcyBzdWNoIHNob3VsZCBiZSB1c2VkIG92ZXIKICogVGhyZWFkcyBpbiBtb3N0IGNhc2VzLjxici8+CiAqIFdoZW4gYSBXb3JrZXIgaXMgc3RhcnRlZCwgdGhlIHJ1biBtZXRob2Qgd2lsbCBiZSBleGVjdXRlZCwgYnV0IHRoZSBUaHJlYWQgd2lsbAogKiBub3QgbGVhdmUgdW50aWwgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Ojxici8+PHVsPgogKiA8bGk+dGhlIFdvcmtlciBnb2VzIG91dCBvZiBzY29wZSAobm8gbW9yZSByZWZlcmVuY2VzIHJlbWFpbik8L2xpPgogKiA8bGk+dGhlIHByb2dyYW1tZXIgY2FsbHMgc2h1dGRvd248L2xpPgogKiA8bGk+dGhlIHNjcmlwdCBkaWVzPC9saT48L3VsPgogKiBUaGlzIG1lYW5zIHRoZSBwcm9ncmFtbWVyIGNhbiByZXVzZSB0aGUgY29udGV4dCB0aHJvdWdob3V0IGV4ZWN1dGlvbjsgcGxhY2luZwogKiBvYmplY3RzIG9uIHRoZSBzdGFjayBvZiB0aGUgV29ya2VyIHdpbGwgY2F1c2UgdGhlIFdvcmtlciB0byBleGVjdXRlIHRoZSBzdGFja2VkCiAqIG9iamVjdHMgcnVuIG1ldGhvZC4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3Mud29ya2VyLnBocAogKi8KY2xhc3MgV29ya2VyIGV4dGVuZHMgVGhyZWFkIGltcGxlbWVudHMgVHJhdmVyc2FibGUsIENvdW50YWJsZSwgQXJyYXlBY2Nlc3MKewogICAgLyoqCiAgICAgKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAzLjAuMCk8YnIvPgogICAgICogQWxsb3dzIHRoZSB3b3JrZXIgdG8gY29sbGVjdCByZWZlcmVuY2VzIGRldGVybWluZWQgdG8gYmUgZ2FyYmFnZSBieSB0aGUKICAgICAqIG9wdGlvbmFsbHkgZ2l2ZW4gY29sbGVjdG9yCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi93b3JrZXIuY29sbGVjdC5waHAKICAgICAqIEBwYXJhbSBudWxsfGNhbGxhYmxlICRjb2xsZWN0b3IgW29wdGlvbmFsXSA8cD5BIENhbGxhYmxlIGNvbGxlY3RvciB0aGF0IHJldHVybnMKICAgICAqIGEgYm9vbGVhbiBvbiB3aGV0aGVyIHRoZSB0YXNrIGNhbiBiZSBjb2xsZWN0ZWQgb3Igbm90LiBPbmx5IGluIHJhcmUgY2FzZXMKICAgICAqIHNob3VsZCBhIGN1c3RvbSBjb2xsZWN0b3IgbmVlZCB0byBiZSB1c2VkPC9wPgogICAgICogQHJldHVybiBpbnQgPHA+VGhlIG51bWJlciBvZiByZW1haW5pbmcgdGFza3Mgb24gdGhlIHdvcmtlcidzIHN0YWNrIHRvIGJlCiAgICAgKiBjb2xsZWN0ZWQ8L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb2xsZWN0KD9jYWxsYWJsZSAkY29sbGVjdG9yID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIChQRUNMIHB0aHJlYWRzICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGFza3MgbGVmdCBvbiB0aGUgc3RhY2sKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3dvcmtlci5nZXRzdGFja2VkLnBocAogICAgICogQHJldHVybiBpbnQgPHA+UmV0dXJucyB0aGUgbnVtYmVyIG9mIHRhc2tzIGN1cnJlbnRseSB3YWl0aW5nIHRvIGJlCiAgICAgKiBleGVjdXRlZCBieSB0aGUgd29ya2VyPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhY2tlZCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogV2hldGhlciB0aGUgd29ya2VyIGhhcyBiZWVuIHNodXRkb3duIG9yIG5vdAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vd29ya2VyLmlzc2h1dGRvd24ucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPHA+UmV0dXJucyB3aGV0aGVyIHRoZSB3b3JrZXIgaGFzIGJlZW4gc2h1dGRvd24gb3Igbm90PC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTaHV0ZG93bigpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogU2h1dHMgZG93biB0aGUgV29ya2VyIGFmdGVyIGV4ZWN1dGluZyBhbGwgb2YgdGhlIHN0YWNrZWQgdGFza3MKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3dvcmtlci5zaHV0ZG93bi5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8cD5XaGV0aGVyIHRoZSB3b3JrZXIgd2FzIHN1Y2Nlc3NmdWxseSBzaHV0ZG93biBvciBub3Q8L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaHV0ZG93bigpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogQXBwZW5kcyB0aGUgbmV3IHdvcmsgdG8gdGhlIHN0YWNrIG9mIHRoZSByZWZlcmVuY2VkIHdvcmtlcgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vd29ya2VyLnN0YWNrLnBocAogICAgICogQHBhcmFtIFRocmVhZGVkICR3b3JrIDxwPkEgVGhyZWFkZWQgb2JqZWN0IHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZSBXb3JrZXI8L3A+CiAgICAgKiBAcmV0dXJuIGludCA8cD5UaGUgbmV3IHNpemUgb2YgdGhlIHN0YWNrPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhY2soVGhyZWFkZWQgJHdvcmspIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBwdGhyZWFkcyAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogUmVtb3ZlcyB0aGUgZmlyc3QgdGFzayAodGhlIG9sZGVzdCBvbmUpIGluIHRoZSBzdGFjawogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vd29ya2VyLnVuc3RhY2sucGhwCiAgICAgKiBAcmV0dXJuIFRocmVhZGVkfG51bGwgPHA+VGhlIGl0ZW0gcmVtb3ZlZCBmcm9tIHRoZSBzdGFjazwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuc3RhY2soKSB7fQp9CgovKioKICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMi4wLjgpPGJyLz4KICogUmVwcmVzZW50cyBhIGdhcmJhZ2UtY29sbGVjdGFibGUgb2JqZWN0LgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5jb2xsZWN0YWJsZS5waHAKICovCmludGVyZmFjZSBDb2xsZWN0YWJsZQp7CiAgICAvKioKICAgICAqIChQRUNMIHB0aHJlYWRzICZndDs9IDIuMC44KTxici8+CiAgICAgKiBDYW4gYmUgY2FsbGVkIGluIHtAbGluayBQb29sOjpjb2xsZWN0KCl9IHRvIGRldGVybWluZSBpZiB0aGlzIG9iamVjdCBpcyBnYXJiYWdlCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jb2xsZWN0YWJsZS5pc2dhcmJhZ2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPHA+V2hldGhlciB0aGlzIG9iamVjdCBpcyBnYXJiYWdlIG9yIG5vdDwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzR2FyYmFnZSgpOiBib29sOwp9CgovKioKICogKFBFQ0wgcHRocmVhZHMgJmd0Oz0gMy4wLjApPGJyLz4KICogVGhlIFZvbGF0aWxlIGNsYXNzIGlzIG5ldyB0byBwdGhyZWFkcyB2My4gSXRzIGludHJvZHVjdGlvbiBpcyBhIGNvbnNlcXVlbmNlIG9mCiAqIHRoZSBuZXcgaW1tdXRhYmlsaXR5IHNlbWFudGljcyBvZiBUaHJlYWRlZCBtZW1iZXJzIG9mIFRocmVhZGVkIGNsYXNzZXMuIFRoZQogKiBWb2xhdGlsZSBjbGFzcyBlbmFibGVzIGZvciBtdXRhYmlsaXR5IG9mIGl0cyBUaHJlYWRlZCBtZW1iZXJzLCBhbmQgaXMgYWxzbwogKiB1c2VkIHRvIHN0b3JlIFBIUCBhcnJheXMgaW4gVGhyZWFkZWQgY29udGV4dHMuCiAqIEBzZWUgVGhyZWFkZWQKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3Mudm9sYXRpbGUucGhwCiAqLwpjbGFzcyBWb2xhdGlsZSBleHRlbmRzIFRocmVhZGVkIGltcGxlbWVudHMgQ29sbGVjdGFibGUsIFRyYXZlcnNhYmxlIHt9Cjw/cGhwCgovLyBTdGFydCBvZiBvcGVuc3NsIHYuCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cQXJyYXlTaGFwZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxEZXByZWNhdGVkOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGU7CgovKioKICogRnJlZXMgYSBwcml2YXRlIGtleQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtcGtleS1mcmVlLnBocAogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8cmVzb3VyY2UgJGtleSA8cD4KICogUmVzb3VyY2UgaG9sZGluZyB0aGUga2V5LgogKiA8L3A+CiAqIEByZXR1cm4gdm9pZAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnOC4wJyldCmZ1bmN0aW9uIG9wZW5zc2xfcGtleV9mcmVlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIk9wZW5TU0xBc3ltbWV0cmljS2V5Il0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAka2V5KTogdm9pZCB7fQoKLyoqCiAqIEdlbmVyYXRlcyBhIG5ldyBwcml2YXRlIGtleQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtcGtleS1uZXcucGhwCiAqIEBwYXJhbSBhcnJheXxudWxsICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAqIFlvdSBjYW4gZmluZXR1bmUgdGhlIGtleSBnZW5lcmF0aW9uIChzdWNoIGFzIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZgogKiBiaXRzKSB1c2luZyA8aT5jb25maWdhcmdzPC9pPi4gU2VlCiAqIDxiPm9wZW5zc2xfY3NyX25ldzwvYj4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKICogPGk+Y29uZmlnYXJnczwvaT4uCiAqIDwvcD4KICogQHJldHVybiBPcGVuU1NMQXN5bW1ldHJpY0tleXxyZXNvdXJjZXxmYWxzZSBhIHJlc291cmNlIGlkZW50aWZpZXIgZm9yIHRoZSBwa2V5IG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uCiAqIGVycm9yLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiT3BlblNTTEFzeW1tZXRyaWNLZXl8ZmFsc2UiXSwgZGVmYXVsdDogInJlc291cmNlfGZhbHNlIildCmZ1bmN0aW9uIG9wZW5zc2xfcGtleV9uZXcoP2FycmF5ICRvcHRpb25zKSB7fQoKLyoqCiAqIEdldHMgYW4gZXhwb3J0YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIGtleSBpbnRvIGEgc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1wa2V5LWV4cG9ydC5waHAKICogQHBhcmFtIE9wZW5TU0xBc3ltbWV0cmljS2V5fE9wZW5TU0xDZXJ0aWZpY2F0ZXxhcnJheXxzdHJpbmcgJGtleQogKiBAcGFyYW0gc3RyaW5nICYkb3V0cHV0CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGFzc3BocmFzZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUga2V5IGlzIG9wdGlvbmFsbHkgcHJvdGVjdGVkIGJ5IDxpPnBhc3NwaHJhc2U8L2k+LgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheXxudWxsICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAqIDxpPmNvbmZpZ2FyZ3M8L2k+IGNhbiBiZSB1c2VkIHRvIGZpbmUtdHVuZSB0aGUgZXhwb3J0CiAqIHByb2Nlc3MgYnkgc3BlY2lmeWluZyBhbmQvb3Igb3ZlcnJpZGluZyBvcHRpb25zIGZvciB0aGUgb3BlbnNzbAogKiBjb25maWd1cmF0aW9uIGZpbGUuIFNlZSA8Yj5vcGVuc3NsX2Nzcl9uZXc8L2I+IGZvciBtb3JlCiAqIGluZm9ybWF0aW9uIGFib3V0IDxpPmNvbmZpZ2FyZ3M8L2k+LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9wZW5zc2xfcGtleV9leHBvcnQoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxhcnJheXxzdHJpbmcnKV0gJGtleSwKICAgICYkb3V0cHV0LAogICAgP3N0cmluZyAkcGFzc3BocmFzZSwKICAgID9hcnJheSAkb3B0aW9ucwopOiBib29sIHt9CgovKioKICogR2V0cyBhbiBleHBvcnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEga2V5IGludG8gYSBmaWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1wa2V5LWV4cG9ydC10by1maWxlLnBocAogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyAka2V5CiAqIEBwYXJhbSBzdHJpbmcgJG91dHB1dF9maWxlbmFtZSA8cD4KICogUGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRwYXNzcGhyYXNlIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBrZXkgY2FuIGJlIG9wdGlvbmFsbHkgcHJvdGVjdGVkIGJ5IGEKICogPGk+cGFzc3BocmFzZTwvaT4uCiAqIDwvcD4KICogQHBhcmFtIGFycmF5fG51bGwgJG9wdGlvbnMgW29wdGlvbmFsXSA8cD4KICogPGk+Y29uZmlnYXJnczwvaT4gY2FuIGJlIHVzZWQgdG8gZmluZS10dW5lIHRoZSBleHBvcnQKICogcHJvY2VzcyBieSBzcGVjaWZ5aW5nIGFuZC9vciBvdmVycmlkaW5nIG9wdGlvbnMgZm9yIHRoZSBvcGVuc3NsCiAqIGNvbmZpZ3VyYXRpb24gZmlsZS4gU2VlIDxiPm9wZW5zc2xfY3NyX25ldzwvYj4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24gYWJvdXQgPGk+Y29uZmlnYXJnczwvaT4uCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlKAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyddLCBkZWZhdWx0OiAncmVzb3VyY2V8YXJyYXl8c3RyaW5nJyldICRrZXksCiAgICBzdHJpbmcgJG91dHB1dF9maWxlbmFtZSwKICAgID9zdHJpbmcgJHBhc3NwaHJhc2UsCiAgICA/YXJyYXkgJG9wdGlvbnMKKTogYm9vbCB7fQoKLyoqCiAqIEdldCBhIHByaXZhdGUga2V5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1wa2V5LWdldC1wcml2YXRlLnBocAogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyAkcHJpdmF0ZV9rZXkKICogPHA+CiAqIDxiPjxlbT5rZXk8L2VtPjwvYj4gY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKiA8b2w+CiAqIDxsaT5hIHN0cmluZyBoYXZpbmcgdGhlIGZvcm1hdAogKiA8dmFyPmZpbGU6Ly9wYXRoL3RvL2ZpbGUucGVtPC92YXI+LiBUaGUgbmFtZWQgZmlsZSBtdXN0CiAqIGNvbnRhaW4gYSBQRU0gZW5jb2RlZCBjZXJ0aWZpY2F0ZS9wcml2YXRlIGtleSAoaXQgbWF5IGNvbnRhaW4gYm90aCkuCiAqIDwvbGk+CiAqIDxsaT5BIFBFTSBmb3JtYXR0ZWQgcHJpdmF0ZSBrZXkuPC9saT4KICogPC9vbD48L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGFzc3BocmFzZSA8cD4KICogVGhlIG9wdGlvbmFsIHBhcmFtZXRlciA8Yj48ZW0+cGFzc3BocmFzZTwvZW0+PC9iPiBtdXN0IGJlIHVzZWQKICogaWYgdGhlIHNwZWNpZmllZCBrZXkgaXMgZW5jcnlwdGVkIChwcm90ZWN0ZWQgYnkgYSBwYXNzcGhyYXNlKS4KICogPC9wPgogKiBAcmV0dXJuIE9wZW5TU0xBc3ltbWV0cmljS2V5fHJlc291cmNlfGZhbHNlIFJldHVybnMgYSBwb3NpdGl2ZSBrZXkgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQXN5bW1ldHJpY0tleXxmYWxzZSJdLCBkZWZhdWx0OiAicmVzb3VyY2V8ZmFsc2UiKV0KZnVuY3Rpb24gb3BlbnNzbF9wa2V5X2dldF9wcml2YXRlKAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyddLCBkZWZhdWx0OiAncmVzb3VyY2V8YXJyYXl8c3RyaW5nJyldICRwcml2YXRlX2tleSwKICAgID9zdHJpbmcgJHBhc3NwaHJhc2UgPSBudWxsCikge30KCi8qKgogKiBFeHRyYWN0IHB1YmxpYyBrZXkgZnJvbSBjZXJ0aWZpY2F0ZSBhbmQgcHJlcGFyZSBpdCBmb3IgdXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1wa2V5LWdldC1wdWJsaWMucGhwCiAqIEBwYXJhbSBPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nICRwdWJsaWNfa2V5IDxwPjxlbT48Yj5jZXJ0aWZpY2F0ZTwvYj48L2VtPiBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAqIDxvbD4KICogPGxpPmFuIFguNTA5IGNlcnRpZmljYXRlIHJlc291cmNlPC9saT4KICogPGxpPmEgc3RyaW5nIGhhdmluZyB0aGUgZm9ybWF0CiAqIDx2YXI+ZmlsZTovL3BhdGgvdG8vZmlsZS5wZW08L3Zhcj4uIFRoZSBuYW1lZCBmaWxlIG11c3QKICogY29udGFpbiBhIFBFTSBlbmNvZGVkIGNlcnRpZmljYXRlL3B1YmxpYyBrZXkgKGl0IG1heSBjb250YWluIGJvdGgpLgogKiA8L2xpPgogKiA8bGk+QSBQRU0gZm9ybWF0dGVkIHB1YmxpYyBrZXkuPC9saT4KICogPC9vbD48L3A+CiAqIEByZXR1cm4gT3BlblNTTEFzeW1tZXRyaWNLZXl8cmVzb3VyY2V8ZmFsc2UgYSBwb3NpdGl2ZSBrZXkgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbiBlcnJvci4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIk9wZW5TU0xBc3ltbWV0cmljS2V5fGZhbHNlIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZXxmYWxzZSIpXQpmdW5jdGlvbiBvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxhcnJheXxzdHJpbmcnKV0gJHB1YmxpY19rZXkpIHt9CgovKioKICogUmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBrZXkgZGV0YWlscwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtcGtleS1nZXQtZGV0YWlscy5waHAKICogQHBhcmFtIE9wZW5TU0xBc3ltbWV0cmljS2V5fHJlc291cmNlICRrZXkgPHA+CiAqIFJlc291cmNlIGhvbGRpbmcgdGhlIGtleS4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIGFuIGFycmF5IHdpdGggdGhlIGtleSBkZXRhaWxzIGluIHN1Y2Nlc3Mgb3IgZmFsc2UgaW4gZmFpbHVyZS4KICogUmV0dXJuZWQgYXJyYXkgaGFzIGluZGV4ZXMgYml0cyAobnVtYmVyIG9mIGJpdHMpLAogKiBrZXkgKHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHVibGljIGtleSkgYW5kCiAqIHR5cGUgKHR5cGUgb2YgdGhlIGtleSB3aGljaCBpcyBvbmUgb2YKICogPGI+T1BFTlNTTF9LRVlUWVBFX1JTQTwvYj4sCiAqIDxiPk9QRU5TU0xfS0VZVFlQRV9EU0E8L2I+LAogKiA8Yj5PUEVOU1NMX0tFWVRZUEVfREg8L2I+LAogKiA8Yj5PUEVOU1NMX0tFWVRZUEVfRUM8L2I+IG9yIC0xIG1lYW5pbmcgdW5rbm93bikuCiAqIDwvcD4KICogPHA+CiAqIERlcGVuZGluZyBvbiB0aGUga2V5IHR5cGUgdXNlZCwgYWRkaXRpb25hbCBkZXRhaWxzIG1heSBiZSByZXR1cm5lZC4gTm90ZSB0aGF0CiAqIHNvbWUgZWxlbWVudHMgbWF5IG5vdCBhbHdheXMgYmUgYXZhaWxhYmxlLgogKi8KI1tBcnJheVNoYXBlKFsiYml0cyIgPT4gImludCIsICJrZXkiID0+ICJzdHJpbmciLCAicnNhIiA9PiAiYXJyYXkiLCAiZHNhIiA9PiAiYXJyYXkiLCAiZGgiID0+ICJhcnJheSIsICJlYyIgPT4gImFycmF5IiwgInR5cGUiID0+ICJpbnQiXSldCmZ1bmN0aW9uIG9wZW5zc2xfcGtleV9nZXRfZGV0YWlscygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQXN5bW1ldHJpY0tleSJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJGtleSk6IGFycmF5fGZhbHNlIHt9CgovKioKICogRnJlZSBrZXkgcmVzb3VyY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLWZyZWUta2V5LnBocAogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8cmVzb3VyY2UgJGtleQogKiBAcmV0dXJuIHZvaWQKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzguMCcpXQpmdW5jdGlvbiBvcGVuc3NsX2ZyZWVfa2V5KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIk9wZW5TU0xBc3ltbWV0cmljS2V5Il0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAka2V5KTogdm9pZCB7fQoKLyoqCiAqIEFsaWFzIG9mIDxiPm9wZW5zc2xfcGtleV9nZXRfcHJpdmF0ZTwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLWdldC1wcml2YXRla2V5LnBocAogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyAkcHJpdmF0ZV9rZXkKICogPHA+CiAqIDxiPjxlbT5rZXk8L2VtPjwvYj4gY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKiA8b2w+CiAqIDxsaT5hIHN0cmluZyBoYXZpbmcgdGhlIGZvcm1hdAogKiA8dmFyPmZpbGU6Ly9wYXRoL3RvL2ZpbGUucGVtPC92YXI+LiBUaGUgbmFtZWQgZmlsZSBtdXN0CiAqIGNvbnRhaW4gYSBQRU0gZW5jb2RlZCBjZXJ0aWZpY2F0ZS9wcml2YXRlIGtleSAoaXQgbWF5IGNvbnRhaW4gYm90aCkuCiAqIDwvbGk+CiAqIDxsaT5BIFBFTSBmb3JtYXR0ZWQgcHJpdmF0ZSBrZXkuPC9saT4KICogPC9vbD48L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGFzc3BocmFzZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIDxiPjxlbT5wYXNzcGhyYXNlPC9lbT48L2I+IG11c3QgYmUgdXNlZAogKiBpZiB0aGUgc3BlY2lmaWVkIGtleSBpcyBlbmNyeXB0ZWQgKHByb3RlY3RlZCBieSBhIHBhc3NwaHJhc2UpLgogKiA8L3A+CiAqIEByZXR1cm4gT3BlblNTTEFzeW1tZXRyaWNLZXl8cmVzb3VyY2V8ZmFsc2UgUmV0dXJucyBhIHBvc2l0aXZlIGtleSByZXNvdXJjZSBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIk9wZW5TU0xBc3ltbWV0cmljS2V5fGZhbHNlIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZXxmYWxzZSIpXQpmdW5jdGlvbiBvcGVuc3NsX2dldF9wcml2YXRla2V5KAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyddLCBkZWZhdWx0OiAncmVzb3VyY2V8YXJyYXl8c3RyaW5nJyldICRwcml2YXRlX2tleSwKICAgID9zdHJpbmcgJHBhc3NwaHJhc2UKKSB7fQoKLyoqCiAqIEFsaWFzIG9mIDxiPm9wZW5zc2xfcGtleV9nZXRfcHVibGljPC9iPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtZ2V0LXB1YmxpY2tleS5waHAKICogQHBhcmFtIE9wZW5TU0xBc3ltbWV0cmljS2V5fE9wZW5TU0xDZXJ0aWZpY2F0ZXxhcnJheXxzdHJpbmcgJHB1YmxpY19rZXkgPHA+CiAqIDxlbT48Yj5jZXJ0aWZpY2F0ZTwvYj48L2VtPiBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAqIDxvbD4KICogPGxpPmFuIFguNTA5IGNlcnRpZmljYXRlIHJlc291cmNlPC9saT4KICogPGxpPmEgc3RyaW5nIGhhdmluZyB0aGUgZm9ybWF0CiAqIDx2YXI+ZmlsZTovL3BhdGgvdG8vZmlsZS5wZW08L3Zhcj4uIFRoZSBuYW1lZCBmaWxlIG11c3QKICogY29udGFpbiBhIFBFTSBlbmNvZGVkIGNlcnRpZmljYXRlL3B1YmxpYyBrZXkgKGl0IG1heSBjb250YWluIGJvdGgpLgogKiA8L2xpPgogKiA8bGk+QSBQRU0gZm9ybWF0dGVkIHB1YmxpYyBrZXkuPC9saT4KICogPC9vbD48L3A+CiAqIEByZXR1cm4gT3BlblNTTEFzeW1tZXRyaWNLZXl8ZmFsc2UgYSBwb3NpdGl2ZSBrZXkgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBvciBGQUxTRSBvbiBlcnJvci4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIk9wZW5TU0xBc3ltbWV0cmljS2V5fGZhbHNlIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZXxmYWxzZSIpXQpmdW5jdGlvbiBvcGVuc3NsX2dldF9wdWJsaWNrZXkoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyddLCBkZWZhdWx0OiAncmVzb3VyY2V8YXJyYXl8c3RyaW5nJyldICRwdWJsaWNfa2V5KSB7fQoKLyoqCiAqIEdlbmVyYXRlIGEgbmV3IHNpZ25lZCBwdWJsaWMga2V5IGFuZCBjaGFsbGVuZ2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLXNwa2ktbmV3LnBocAogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8cmVzb3VyY2UgJHByaXZhdGVfa2V5IDxwPgogKiA8Yj5wcml2a2V5PC9iPiBzaG91bGQgYmUgc2V0IHRvIGEgcHJpdmF0ZSBrZXkgdGhhdCB3YXMKICogcHJldmlvdXNseSBnZW5lcmF0ZWQgYnkge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9lbi9tYW51YWwvZnVuY3Rpb24ub3BlbnNzbC1wa2V5LW5ldy5waHAgb3BlbnNzbF9wa2V5X25ldygpfSAob3IKICogb3RoZXJ3aXNlIG9idGFpbmVkIGZyb20gdGhlIG90aGVyIG9wZW5zc2xfcGtleSBmYW1pbHkgb2YgZnVuY3Rpb25zKS4KICogVGhlIGNvcnJlc3BvbmRpbmcgcHVibGljIHBvcnRpb24gb2YgdGhlIGtleSB3aWxsIGJlIHVzZWQgdG8gc2lnbiB0aGUKICogQ1NSLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGNoYWxsZW5nZSA8cD5UaGUgY2hhbGxlbmdlIGFzc29jaWF0ZWQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIFNQS0FDPC9wPgogKiBAcGFyYW0gaW50ICRkaWdlc3RfYWxnbyA8cD5UaGUgZGlnZXN0IGFsZ29yaXRobS4gU2VlIG9wZW5zc2xfZ2V0X21kX21ldGhvZCgpLjwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgUmV0dXJucyBhIHNpZ25lZCBwdWJsaWMga2V5IGFuZCBjaGFsbGVuZ2Ugc3RyaW5nIG9yIE5VTEwgb24gZmFpbHVyZS4KICogQHNpbmNlIDUuNgogKi8KZnVuY3Rpb24gb3BlbnNzbF9zcGtpX25ldygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQXN5bW1ldHJpY0tleSJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHByaXZhdGVfa2V5LCBzdHJpbmcgJGNoYWxsZW5nZSwgaW50ICRkaWdlc3RfYWxnbyA9IDIpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBWZXJpZmllcyBhIHNpZ25lZCBwdWJsaWMga2V5IGFuZCBjaGFsbGVuZ2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLXNwa2ktdmVyaWZ5LnBocAogKiBAcGFyYW0gc3RyaW5nICRzcGtpIDxwPkV4cGVjdHMgYSB2YWxpZCBzaWduZWQgcHVibGljIGtleSBhbmQgY2hhbGxlbmdlPC9wPgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBhIGJvb2xlYW4gb24gc3VjY2VzcyBvciBmYWlsdXJlLgogKiBAc2luY2UgNS42CiAqLwpmdW5jdGlvbiBvcGVuc3NsX3Nwa2lfdmVyaWZ5KHN0cmluZyAkc3BraSk6IGJvb2wge30KCi8qKgogKiBFeHBvcnRzIHRoZSBjaGFsbGVuZ2UgYXNzb2NpYXRlZCB3aXRoIGEgc2lnbmVkIHB1YmxpYyBrZXkgYW5kIGNoYWxsZW5nZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtc3BraS1leHBvcnQtY2hhbGxlbmdlLnBocAogKiBAcGFyYW0gc3RyaW5nICRzcGtpIDxwPkV4cGVjdHMgYSB2YWxpZCBzaWduZWQgcHVibGljIGtleSBhbmQgY2hhbGxlbmdlPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBSZXR1cm5zIHRoZSBhc3NvY2lhdGVkIGNoYWxsZW5nZSBzdHJpbmcgb3IgTlVMTCBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS42CiAqLwpmdW5jdGlvbiBvcGVuc3NsX3Nwa2lfZXhwb3J0X2NoYWxsZW5nZShzdHJpbmcgJHNwa2kpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBFeHBvcnRzIGEgdmFsaWQgUEVNIGZvcm1hdHRlZCBwdWJsaWMga2V5IHNpZ25lZCBwdWJsaWMga2V5IGFuZCBjaGFsbGVuZ2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLXNwa2ktZXhwb3J0LnBocAogKiBAcGFyYW0gc3RyaW5nICRzcGtpIDxwPkV4cGVjdHMgYSB2YWxpZCBzaWduZWQgcHVibGljIGtleSBhbmQgY2hhbGxlbmdlPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBSZXR1cm5zIHRoZSBhc3NvY2lhdGVkIFBFTSBmb3JtYXR0ZWQgcHVibGljIGtleSBvciBOVUxMIG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA1LjYKICovCmZ1bmN0aW9uIG9wZW5zc2xfc3BraV9leHBvcnQoc3RyaW5nICRzcGtpKTogc3RyaW5nfGZhbHNlIHt9Ci8qKgogKiBQYXJzZSBhbiBYLjUwOSBjZXJ0aWZpY2F0ZSBhbmQgcmV0dXJuIGEgcmVzb3VyY2UgaWRlbnRpZmllciBmb3IKICogaXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLXg1MDktcmVhZC5waHAKICogQHBhcmFtIE9wZW5TU0xDZXJ0aWZpY2F0ZXxzdHJpbmd8cmVzb3VyY2UgJGNlcnRpZmljYXRlCiAqIEByZXR1cm4gT3BlblNTTENlcnRpZmljYXRlfHJlc291cmNlfGZhbHNlIGEgcmVzb3VyY2UgaWRlbnRpZmllciBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQ2VydGlmaWNhdGV8ZmFsc2UiXSwgZGVmYXVsdDogInJlc291cmNlfGZhbHNlIildCmZ1bmN0aW9uIG9wZW5zc2xfeDUwOV9yZWFkKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIk9wZW5TU0xDZXJ0aWZpY2F0ZXxzdHJpbmciXSwgZGVmYXVsdDogInJlc291cmNlfHN0cmluZyIpXSAkY2VydGlmaWNhdGUpIHt9CgovKioKICogQHBhcmFtIHN0cmluZyAkY2VydGlmaWNhdGUKICogQHBhcmFtIHN0cmluZyAkZGlnZXN0X2FsZ28gW29wdGlvbmFsXSBoYXNoIG1ldGhvZAogKiBAcGFyYW0gYm9vbCAkYmluYXJ5IFtvcHRpb25hbF0KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUKICogQHNpbmNlIDUuNgogKi8KZnVuY3Rpb24gb3BlbnNzbF94NTA5X2ZpbmdlcnByaW50KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIk9wZW5TU0xDZXJ0aWZpY2F0ZXxzdHJpbmciXSwgZGVmYXVsdDogInJlc291cmNlfHN0cmluZyIpXSAkY2VydGlmaWNhdGUsIHN0cmluZyAkZGlnZXN0X2FsZ28gPSAnc2hhMScsIGJvb2wgJGJpbmFyeSA9IGZhbHNlKTogc3RyaW5nfGZhbHNlIHt9Ci8qKgogKiBGcmVlIGNlcnRpZmljYXRlIHJlc291cmNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC14NTA5LWZyZWUucGhwCiAqIEBwYXJhbSBPcGVuU1NMQ2VydGlmaWNhdGV8cmVzb3VyY2V8c3RyaW5nICRjZXJ0aWZpY2F0ZQogKiBAcmV0dXJuIHZvaWQKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzguMCcpXQpmdW5jdGlvbiBvcGVuc3NsX3g1MDlfZnJlZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQ2VydGlmaWNhdGUiXSwgZGVmYXVsdDogInJlc291cmNlfHN0cmluZyIpXSAkY2VydGlmaWNhdGUpOiB2b2lkIHt9CgovKioKICogUGFyc2UgYW4gWDUwOSBjZXJ0aWZpY2F0ZSBhbmQgcmV0dXJuIHRoZSBpbmZvcm1hdGlvbiBhcyBhbiBhcnJheQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wteDUwOS1wYXJzZS5waHAKICogQHBhcmFtIE9wZW5TU0xDZXJ0aWZpY2F0ZXxzdHJpbmd8cmVzb3VyY2UgJGNlcnRpZmljYXRlCiAqIEBwYXJhbSBib29sICRzaG9ydF9uYW1lcyBbb3B0aW9uYWxdIDxwPgogKiA8aT5zaG9ydG5hbWVzPC9pPiBjb250cm9scyBob3cgdGhlIGRhdGEgaXMgaW5kZXhlZCBpbiB0aGUKICogYXJyYXkgLSBpZiA8aT5zaG9ydG5hbWVzPC9pPiBpcyB0cnVlICh0aGUgZGVmYXVsdCkgdGhlbgogKiBmaWVsZHMgd2lsbCBiZSBpbmRleGVkIHdpdGggdGhlIHNob3J0IG5hbWUgZm9ybSwgb3RoZXJ3aXNlLCB0aGUgbG9uZyBuYW1lCiAqIGZvcm0gd2lsbCBiZSB1c2VkIC0gZS5nLjogQ04gaXMgdGhlIHNob3J0bmFtZSBmb3JtIG9mIGNvbW1vbk5hbWUuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBUaGUgc3RydWN0dXJlIG9mIHRoZSByZXR1cm5lZCBkYXRhIGlzIChkZWxpYmVyYXRlbHkpIG5vdAogKiB5ZXQgZG9jdW1lbnRlZCwgYXMgaXQgaXMgc3RpbGwgc3ViamVjdCB0byBjaGFuZ2UuCiAqLwojW0FycmF5U2hhcGUoWwogICAgJ25hbWUnID0+ICdzdHJpbmcnLAogICAgJ3N1YmplY3QnID0+ICdzdHJpbmcnLAogICAgJ2hhc2gnID0+ICdzdHJpbmcnLAogICAgJ2lzc3VlcicgPT4gJ3N0cmluZycsCiAgICAndmVyc2lvbicgPT4gJ2ludCcsCiAgICAnc2VyaWFsTnVtYmVyJyA9PiAnc3RyaW5nJywKICAgICdzZXJpYWxOdW1iZXJIZXgnID0+ICdzdHJpbmcnLAogICAgJ3ZhbGlkRnJvbScgPT4gJ3N0cmluZycsCiAgICAndmFsaWRUbycgPT4gJ3N0cmluZycsCiAgICAndmFsaWRGcm9tX3RpbWVfdCcgPT4gJ2ludCcsCiAgICAndmFsaWRUb190aW1lX3QnID0+ICdpbnQnLAogICAgJ2FsaWFzJyA9PiAnc3RyaW5nJywKICAgICdzaWduYXR1cmVUeXBlU04nID0+ICdzdHJpbmcnLAogICAgJ3NpZ25hdHVyZVR5cGVMTicgPT4gJ3N0cmluZycsCiAgICAnc2lnbmF0dXJlVHlwZU5JRCcgPT4gJ2ludCcsCiAgICAncHVycG9zZXMnID0+ICdhcnJheScsCiAgICAnZXh0ZW5zaW9ucycgPT4gJ2FycmF5JwpdKV0KZnVuY3Rpb24gb3BlbnNzbF94NTA5X3BhcnNlKAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiT3BlblNTTENlcnRpZmljYXRlfHN0cmluZyJdLCBkZWZhdWx0OiAicmVzb3VyY2V8c3RyaW5nIildICRjZXJ0aWZpY2F0ZSwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy4wJyldIGJvb2wgJHNob3J0bmFtZSwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMScpXSBib29sICRzaG9ydF9uYW1lcyA9IHRydWUKKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBWZXJpZmllcyBpZiBhIGNlcnRpZmljYXRlIGNhbiBiZSB1c2VkIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wteDUwOS1jaGVja3B1cnBvc2UucGhwCiAqIEBwYXJhbSBPcGVuU1NMQ2VydGlmaWNhdGV8c3RyaW5nfHJlc291cmNlICRjZXJ0aWZpY2F0ZSA8cD4KICogVGhlIGV4YW1pbmVkIGNlcnRpZmljYXRlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHB1cnBvc2UgPHA+CiAqIDx0YWJsZT4KICogPGI+b3BlbnNzbF94NTA5X2NoZWNrcHVycG9zZTwvYj4gcHVycG9zZXMKICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkNvbnN0YW50PC90ZD4KICogPHRkPkRlc2NyaXB0aW9uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlg1MDlfUFVSUE9TRV9TU0xfQ0xJRU5UPC90ZD4KICogPHRkPkNhbiB0aGUgY2VydGlmaWNhdGUgYmUgdXNlZCBmb3IgdGhlIGNsaWVudCBzaWRlIG9mIGFuIFNTTAogKiBjb25uZWN0aW9uPzwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5YNTA5X1BVUlBPU0VfU1NMX1NFUlZFUjwvdGQ+CiAqIDx0ZD5DYW4gdGhlIGNlcnRpZmljYXRlIGJlIHVzZWQgZm9yIHRoZSBzZXJ2ZXIgc2lkZSBvZiBhbiBTU0wKICogY29ubmVjdGlvbj88L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+WDUwOV9QVVJQT1NFX05TX1NTTF9TRVJWRVI8L3RkPgogKiA8dGQ+Q2FuIHRoZSBjZXJ0IGJlIHVzZWQgZm9yIE5ldHNjYXBlIFNTTCBzZXJ2ZXI/PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlg1MDlfUFVSUE9TRV9TTUlNRV9TSUdOPC90ZD4KICogPHRkPkNhbiB0aGUgY2VydCBiZSB1c2VkIHRvIHNpZ24gUy9NSU1FIGVtYWlsPzwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5YNTA5X1BVUlBPU0VfU01JTUVfRU5DUllQVDwvdGQ+CiAqIDx0ZD5DYW4gdGhlIGNlcnQgYmUgdXNlZCB0byBlbmNyeXB0IFMvTUlNRSBlbWFpbD88L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+WDUwOV9QVVJQT1NFX0NSTF9TSUdOPC90ZD4KICogPHRkPkNhbiB0aGUgY2VydCBiZSB1c2VkIHRvIHNpZ24gYSBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3QKICogKENSTCk/PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlg1MDlfUFVSUE9TRV9BTlk8L3RkPgogKiA8dGQ+Q2FuIHRoZSBjZXJ0IGJlIHVzZWQgZm9yIEFueS9BbGwgcHVycG9zZXM/PC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICogVGhlc2Ugb3B0aW9ucyBhcmUgbm90IGJpdGZpZWxkcyAtIHlvdSBtYXkgc3BlY2lmeSBvbmUgb25seSEKICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJGNhX2luZm8gPHA+CiAqIDxpPmNhaW5mbzwvaT4gc2hvdWxkIGJlIGFuIGFycmF5IG9mIHRydXN0ZWQgQ0EgZmlsZXMvZGlycwogKiBhcyBkZXNjcmliZWQgaW4gQ2VydGlmaWNhdGUKICogVmVyaWZpY2F0aW9uLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdW50cnVzdGVkX2NlcnRpZmljYXRlc19maWxlIFtvcHRpb25hbF0gPHA+CiAqIElmIHNwZWNpZmllZCwgdGhpcyBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSBQRU0gZW5jb2RlZCBmaWxlIGhvbGRpbmcKICogY2VydGlmaWNhdGVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gaGVscCB2ZXJpZnkgdGhlIGNlcnRpZmljYXRlLCBhbHRob3VnaAogKiBubyB0cnVzdCBpcyBwbGFjZWQgaW4gdGhlIGNlcnRpZmljYXRlcyB0aGF0IGNvbWUgZnJvbSB0aGF0IGZpbGUuCiAqIDwvcD4KICogQHJldHVybiBpbnR8Ym9vbCB0cnVlIGlmIHRoZSBjZXJ0aWZpY2F0ZSBjYW4gYmUgdXNlZCBmb3IgdGhlIGludGVuZGVkIHB1cnBvc2UsCiAqIGZhbHNlIGlmIGl0IGNhbm5vdCwgb3IgLTEgb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3g1MDlfY2hlY2twdXJwb3NlKAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiT3BlblNTTENlcnRpZmljYXRlfHN0cmluZyJdLCBkZWZhdWx0OiAicmVzb3VyY2V8c3RyaW5nIildICRjZXJ0aWZpY2F0ZSwKICAgIGludCAkcHVycG9zZSwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy4wJyldIGFycmF5ICRjYV9pbmZvLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4xJyldIGFycmF5ICRjYV9pbmZvID0gW10sCiAgICA/c3RyaW5nICR1bnRydXN0ZWRfY2VydGlmaWNhdGVzX2ZpbGUKKTogaW50fGJvb2wge30KCi8qKgogKiBDaGVja3MgaWYgYSBwcml2YXRlIGtleSBjb3JyZXNwb25kcyB0byBhIGNlcnRpZmljYXRlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC14NTA5LWNoZWNrLXByaXZhdGUta2V5LnBocAogKiBAcGFyYW0gT3BlblNTTENlcnRpZmljYXRlfHN0cmluZ3xyZXNvdXJjZSAkY2VydGlmaWNhdGUgPHA+CiAqIFRoZSBjZXJ0aWZpY2F0ZS4KICogPC9wPgogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyAkcHJpdmF0ZV9rZXkgPHA+CiAqIFRoZSBwcml2YXRlIGtleS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiA8aT5rZXk8L2k+IGlzIHRoZSBwcml2YXRlIGtleSB0aGF0CiAqIGNvcnJlc3BvbmRzIHRvIDxpPmNlcnQ8L2k+LCBvciBmYWxzZSBvdGhlcndpc2UuCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3g1MDlfY2hlY2tfcHJpdmF0ZV9rZXkoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQ2VydGlmaWNhdGV8c3RyaW5nIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZXxzdHJpbmciKV0gJGNlcnRpZmljYXRlLAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyddLCBkZWZhdWx0OiAncmVzb3VyY2V8YXJyYXl8c3RyaW5nJyldICRwcml2YXRlX2tleQopOiBib29sIHt9CgovKioKICogRXhwb3J0cyBhIGNlcnRpZmljYXRlIGFzIGEgc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC14NTA5LWV4cG9ydC5waHAKICogQHBhcmFtIE9wZW5TU0xDZXJ0aWZpY2F0ZXxzdHJpbmd8cmVzb3VyY2UgJGNlcnRpZmljYXRlCiAqIEBwYXJhbSBzdHJpbmcgJiRvdXRwdXQgPHA+CiAqIE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBob2xkIHRoZSBQRU0uCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJG5vX3RleHQgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3g1MDlfZXhwb3J0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIk9wZW5TU0xDZXJ0aWZpY2F0ZXxzdHJpbmciXSwgZGVmYXVsdDogInJlc291cmNlfHN0cmluZyIpXSAkY2VydGlmaWNhdGUsICYkb3V0cHV0LCBib29sICRub190ZXh0ID0gdHJ1ZSk6IGJvb2wge30KCi8qKgogKiBFeHBvcnRzIGEgY2VydGlmaWNhdGUgdG8gZmlsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wteDUwOS1leHBvcnQtdG8tZmlsZS5waHAKICogQHBhcmFtIE9wZW5TU0xDZXJ0aWZpY2F0ZXxzdHJpbmd8cmVzb3VyY2UgJGNlcnRpZmljYXRlCiAqIEBwYXJhbSBzdHJpbmcgJG91dHB1dF9maWxlbmFtZSA8cD4KICogUGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJG5vX3RleHQgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3g1MDlfZXhwb3J0X3RvX2ZpbGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiT3BlblNTTENlcnRpZmljYXRlfHN0cmluZyJdLCBkZWZhdWx0OiAicmVzb3VyY2V8c3RyaW5nIildICRjZXJ0aWZpY2F0ZSwgc3RyaW5nICRvdXRwdXRfZmlsZW5hbWUsIGJvb2wgJG5vX3RleHQgPSB0cnVlKTogYm9vbCB7fQoKLyoqCiAqIFZlcmlmaWVzIGRpZ2l0YWwgc2lnbmF0dXJlIG9mIHg1MDkgY2VydGlmaWNhdGUgYWdhaW5zdCBhIHB1YmxpYyBrZXkKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC14NTA5LXZlcmlmeS5waHAKICogQHBhcmFtIE9wZW5TU0xDZXJ0aWZpY2F0ZXxzdHJpbmd8cmVzb3VyY2UgJGNlcnRpZmljYXRlCiAqIEBwYXJhbSBPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nICRwdWJsaWNfa2V5CiAqIEByZXR1cm4gaW50IFJldHVybnMgMSBpZiB0aGUgc2lnbmF0dXJlIGlzIGNvcnJlY3QsIDAgaWYgaXQgaXMgaW5jb3JyZWN0LCBhbmQgLTEgb24gZXJyb3IuCiAqIEBzaW5jZSA3LjQKICovCmZ1bmN0aW9uIG9wZW5zc2xfeDUwOV92ZXJpZnkoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQ2VydGlmaWNhdGV8c3RyaW5nIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZXxzdHJpbmciKV0gJGNlcnRpZmljYXRlLAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyddLCBkZWZhdWx0OiAncmVzb3VyY2V8YXJyYXl8c3RyaW5nJyldICRwdWJsaWNfa2V5Cik6IGludCB7fQoKLyoqCiAqIEV4cG9ydHMgYSBQS0NTIzEyIENvbXBhdGlibGUgQ2VydGlmaWNhdGUgU3RvcmUgRmlsZSB0byB2YXJpYWJsZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLXBrY3MxMi1leHBvcnQucGhwCiAqIEBwYXJhbSBPcGVuU1NMQ2VydGlmaWNhdGV8c3RyaW5nfHJlc291cmNlICRjZXJ0aWZpY2F0ZQogKiBAcGFyYW0gc3RyaW5nICYkb3V0cHV0IDxwPgogKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgaG9sZCB0aGUgUEtDUyMxMi4KICogPC9wPgogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyAkcHJpdmF0ZV9rZXkgPHA+CiAqIFByaXZhdGUga2V5IGNvbXBvbmVudCBvZiBQS0NTIzEyIGZpbGUuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGFzc3BocmFzZSA8cD4KICogRW5jcnlwdGlvbiBwYXNzd29yZCBmb3IgdW5sb2NraW5nIHRoZSBQS0NTIzEyIGZpbGUuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRvcHRpb25zCiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICogQHNpbmNlIDUuMi4yCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrY3MxMl9leHBvcnQoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQ2VydGlmaWNhdGV8c3RyaW5nIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZXxzdHJpbmciKV0gJGNlcnRpZmljYXRlLAogICAgJiRvdXRwdXQsCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxhcnJheXxzdHJpbmcnKV0gJHByaXZhdGVfa2V5LAogICAgc3RyaW5nICRwYXNzcGhyYXNlLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjAnKV0gJGFyZ3MsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjEnKV0gYXJyYXkgJG9wdGlvbnMgPSBbXQopOiBib29sIHt9CgovKioKICogRXhwb3J0cyBhIFBLQ1MjMTIgQ29tcGF0aWJsZSBDZXJ0aWZpY2F0ZSBTdG9yZSBGaWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1wa2NzMTItZXhwb3J0LXRvLWZpbGUucGhwCiAqIEBwYXJhbSBPcGVuU1NMQ2VydGlmaWNhdGV8c3RyaW5nfHJlc291cmNlICRjZXJ0aWZpY2F0ZQogKiBAcGFyYW0gc3RyaW5nICRvdXRwdXRfZmlsZW5hbWUgPHA+CiAqIFBhdGggdG8gdGhlIG91dHB1dCBmaWxlLgogKiA8L3A+CiAqIEBwYXJhbSBPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nICRwcml2YXRlX2tleSA8cD4KICogUHJpdmF0ZSBrZXkgY29tcG9uZW50IG9mIFBLQ1MjMTIgZmlsZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXNzcGhyYXNlIDxwPgogKiBFbmNyeXB0aW9uIHBhc3N3b3JkIGZvciB1bmxvY2tpbmcgdGhlIFBLQ1MjMTIgZmlsZS4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMKICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS4yLjIKICovCmZ1bmN0aW9uIG9wZW5zc2xfcGtjczEyX2V4cG9ydF90b19maWxlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIk9wZW5TU0xDZXJ0aWZpY2F0ZXxzdHJpbmciXSwgZGVmYXVsdDogInJlc291cmNlfHN0cmluZyIpXSAkY2VydGlmaWNhdGUsIHN0cmluZyAkb3V0cHV0X2ZpbGVuYW1lLCAkcHJpdmF0ZV9rZXksIHN0cmluZyAkcGFzc3BocmFzZSwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IGJvb2wge30KCi8qKgogKiBQYXJzZSBhIFBLQ1MjMTIgQ2VydGlmaWNhdGUgU3RvcmUgaW50byBhbiBhcnJheQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtcGtjczEyLXJlYWQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHBrY3MxMgogKiBAcGFyYW0gYXJyYXkgJiRjZXJ0aWZpY2F0ZXMgPHA+CiAqIE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBob2xkIHRoZSBDZXJ0aWZpY2F0ZSBTdG9yZSBEYXRhLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhc3NwaHJhc2UgPHA+CiAqIEVuY3J5cHRpb24gcGFzc3dvcmQgZm9yIHVubG9ja2luZyB0aGUgUEtDUyMxMiBmaWxlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICogQHNpbmNlIDUuMi4yCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrY3MxMl9yZWFkKHN0cmluZyAkcGtjczEyLCAmJGNlcnRpZmljYXRlcywgc3RyaW5nICRwYXNzcGhyYXNlKTogYm9vbCB7fQoKLyoqCiAqIEdlbmVyYXRlcyBhIENTUgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtY3NyLW5ldy5waHAKICogQHBhcmFtIGFycmF5ICRkaXN0aW5ndWlzaGVkX25hbWVzIDxwPgogKiBUaGUgRGlzdGluZ3Vpc2hlZCBOYW1lIHRvIGJlIHVzZWQgaW4gdGhlIGNlcnRpZmljYXRlLgogKiA8L3A+CiAqIEBwYXJhbSBPcGVuU1NMQXN5bW1ldHJpY0tleSAmJHByaXZhdGVfa2V5IDxwPgogKiA8aT5wcml2a2V5PC9pPiBzaG91bGQgYmUgc2V0IHRvIGEgcHJpdmF0ZSBrZXkgdGhhdCB3YXMKICogcHJldmlvdXNseSBnZW5lcmF0ZWQgYnkgPGI+b3BlbnNzbF9wa2V5X25ldzwvYj4gKG9yCiAqIG90aGVyd2lzZSBvYnRhaW5lZCBmcm9tIHRoZSBvdGhlciBvcGVuc3NsX3BrZXkgZmFtaWx5IG9mIGZ1bmN0aW9ucykuCiAqIFRoZSBjb3JyZXNwb25kaW5nIHB1YmxpYyBwb3J0aW9uIG9mIHRoZSBrZXkgd2lsbCBiZSB1c2VkIHRvIHNpZ24gdGhlCiAqIENTUi4KICogPC9wPgogKiBAcGFyYW0gYXJyYXl8bnVsbCAkb3B0aW9ucyBbb3B0aW9uYWxdIDxwPgogKiBCeSBkZWZhdWx0LCB0aGUgaW5mb3JtYXRpb24gaW4geW91ciBzeXN0ZW0gb3BlbnNzbC5jb25mCiAqIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmVxdWVzdDsgeW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiBmaWxlCiAqIHNlY3Rpb24gYnkgc2V0dGluZyB0aGUgY29uZmlnX3NlY3Rpb25fc2VjdGlvbiBrZXkgb2YKICogPGk+Y29uZmlnYXJnczwvaT4uIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlCiAqIG9wZW5zc2wgY29uZmlndXJhdGlvbiBmaWxlIGJ5IHNldHRpbmcgdGhlIHZhbHVlIG9mIHRoZQogKiBjb25maWcga2V5IHRvIHRoZSBwYXRoIG9mIHRoZSBmaWxlIHlvdSB3YW50IHRvIHVzZS4KICogVGhlIGZvbGxvd2luZyBrZXlzLCBpZiBwcmVzZW50IGluIDxpPmNvbmZpZ2FyZ3M8L2k+CiAqIGJlaGF2ZSBhcyB0aGVpciBlcXVpdmFsZW50cyBpbiB0aGUgb3BlbnNzbC5jb25mLCBhcwogKiBsaXN0ZWQgaW4gdGhlIHRhYmxlIGJlbG93LgogKiA8dGFibGU+CiAqIENvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48aT5jb25maWdhcmdzPC9pPiBrZXk8L3RkPgogKiA8dGQ+dHlwZTwvdGQ+CiAqIDx0ZD5vcGVuc3NsLmNvbmYgZXF1aXZhbGVudDwvdGQ+CiAqIDx0ZD5kZXNjcmlwdGlvbjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5kaWdlc3RfYWxnPC90ZD4KICogPHRkPnN0cmluZzwvdGQ+CiAqIDx0ZD5kZWZhdWx0X21kPC90ZD4KICogPHRkPlNlbGVjdHMgd2hpY2ggZGlnZXN0IG1ldGhvZCB0byB1c2U8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+eDUwOV9leHRlbnNpb25zPC90ZD4KICogPHRkPnN0cmluZzwvdGQ+CiAqIDx0ZD54NTA5X2V4dGVuc2lvbnM8L3RkPgogKiA8dGQ+U2VsZWN0cyB3aGljaCBleHRlbnNpb25zIHNob3VsZCBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYW4geDUwOQogKiBjZXJ0aWZpY2F0ZTwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5yZXFfZXh0ZW5zaW9uczwvdGQ+CiAqIDx0ZD5zdHJpbmc8L3RkPgogKiA8dGQ+cmVxX2V4dGVuc2lvbnM8L3RkPgogKiA8dGQ+U2VsZWN0cyB3aGljaCBleHRlbnNpb25zIHNob3VsZCBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSBDU1I8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+cHJpdmF0ZV9rZXlfYml0czwvdGQ+CiAqIDx0ZD5pbnRlZ2VyPC90ZD4KICogPHRkPmRlZmF1bHRfYml0czwvdGQ+CiAqIDx0ZD5TcGVjaWZpZXMgaG93IG1hbnkgYml0cyBzaG91bGQgYmUgdXNlZCB0byBnZW5lcmF0ZSBhIHByaXZhdGUKICoga2V5PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPnByaXZhdGVfa2V5X3R5cGU8L3RkPgogKiA8dGQ+aW50ZWdlcjwvdGQ+CiAqIDx0ZD5ub25lPC90ZD4KICogPHRkPlNwZWNpZmllcyB0aGUgdHlwZSBvZiBwcml2YXRlIGtleSB0byBjcmVhdGUuIFRoaXMgY2FuIGJlIG9uZQogKiBvZiA8Yj5PUEVOU1NMX0tFWVRZUEVfRFNBPC9iPiwKICogPGI+T1BFTlNTTF9LRVlUWVBFX0RIPC9iPiBvcgogKiA8Yj5PUEVOU1NMX0tFWVRZUEVfUlNBPC9iPi4KICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGI+T1BFTlNTTF9LRVlUWVBFX1JTQTwvYj4gd2hpY2gKICogaXMgY3VycmVudGx5IHRoZSBvbmx5IHN1cHBvcnRlZCBrZXkgdHlwZS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmVuY3J5cHRfa2V5PC90ZD4KICogPHRkPmJvb2xlYW48L3RkPgogKiA8dGQ+ZW5jcnlwdF9rZXk8L3RkPgogKiA8dGQ+U2hvdWxkIGFuIGV4cG9ydGVkIGtleSAod2l0aCBwYXNzcGhyYXNlKSBiZSBlbmNyeXB0ZWQ/PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmVuY3J5cHRfa2V5X2NpcGhlcjwvdGQ+CiAqIDx0ZD5pbnRlZ2VyPC90ZD4KICogPHRkPm5vbmU8L3RkPgogKiA8dGQ+CiAqIE9uZSBvZiBjaXBoZXIgY29uc3RhbnRzLgogKiA8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheXxudWxsICRleHRyYV9hdHRyaWJ1dGVzIFtvcHRpb25hbF0gPHA+CiAqIDxpPmV4dHJhYXR0cmliczwvaT4gaXMgdXNlZCB0byBzcGVjaWZ5IGFkZGl0aW9uYWwKICogY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ1NSLiBCb3RoIDxpPmRuPC9pPiBhbmQKICogPGk+ZXh0cmFhdHRyaWJzPC9pPiBhcmUgYXNzb2NpYXRpdmUgYXJyYXlzIHdob3NlIGtleXMgYXJlCiAqIGNvbnZlcnRlZCB0byBPSURzIGFuZCBhcHBsaWVkIHRvIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSByZXF1ZXN0LgogKiA8L3A+CiAqIEByZXR1cm4gT3BlblNTTENlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3R8cmVzb3VyY2V8ZmFsc2UgdGhlIENTUi4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIk9wZW5TU0xDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0fGZhbHNlIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZXxmYWxzZSIpXQpmdW5jdGlvbiBvcGVuc3NsX2Nzcl9uZXcoCiAgICBhcnJheSAkZGlzdGluZ3Vpc2hlZF9uYW1lcywKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09wZW5TU0xBc3ltbWV0cmljS2V5J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAmJHByaXZhdGVfa2V5LAogICAgP2FycmF5ICRvcHRpb25zLAogICAgP2FycmF5ICRleHRyYV9hdHRyaWJ1dGVzCikge30KCi8qKgogKiBFeHBvcnRzIGEgQ1NSIGFzIGEgc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1jc3ItZXhwb3J0LnBocAogKiBAcGFyYW0gT3BlblNTTENlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3R8c3RyaW5nfHJlc291cmNlICRjc3IKICogQHBhcmFtIHN0cmluZyAmJG91dHB1dAogKiBAcGFyYW0gYm9vbCAkbm9fdGV4dCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9wZW5zc2xfY3NyX2V4cG9ydCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdHxzdHJpbmciXSwgZGVmYXVsdDogInJlc291cmNlfHN0cmluZyIpXSAkY3NyLCAmJG91dHB1dCwgYm9vbCAkbm9fdGV4dCA9IHRydWUpOiBib29sIHt9CgovKioKICogRXhwb3J0cyBhIENTUiB0byBhIGZpbGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLWNzci1leHBvcnQtdG8tZmlsZS5waHAKICogQHBhcmFtIE9wZW5TU0xDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0fHN0cmluZ3xyZXNvdXJjZSAkY3NyCiAqIEBwYXJhbSBzdHJpbmcgJG91dHB1dF9maWxlbmFtZSA8cD4KICogUGF0aCB0byB0aGUgb3V0cHV0IGZpbGUuCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJG5vX3RleHQgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2Nzcl9leHBvcnRfdG9fZmlsZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdHxzdHJpbmciXSwgZGVmYXVsdDogInJlc291cmNlfHN0cmluZyIpXSAkY3NyLCBzdHJpbmcgJG91dHB1dF9maWxlbmFtZSwgYm9vbCAkbm9fdGV4dCA9IHRydWUpOiBib29sIHt9CgovKioKICogU2lnbiBhIENTUiB3aXRoIGFub3RoZXIgY2VydGlmaWNhdGUgKG9yIGl0c2VsZikgYW5kIGdlbmVyYXRlIGEgY2VydGlmaWNhdGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLWNzci1zaWduLnBocAogKiBAcGFyYW0gT3BlblNTTENlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3R8c3RyaW5nfHJlc291cmNlICRjc3IgPHA+CiAqIEEgQ1NSIHByZXZpb3VzbHkgZ2VuZXJhdGVkIGJ5IDxiPm9wZW5zc2xfY3NyX25ldzwvYj4uCiAqIEl0IGNhbiBhbHNvIGJlIHRoZSBwYXRoIHRvIGEgUEVNIGVuY29kZWQgQ1NSIHdoZW4gc3BlY2lmaWVkIGFzCiAqIGZpbGU6Ly9wYXRoL3RvL2NzciBvciBhbiBleHBvcnRlZCBzdHJpbmcgZ2VuZXJhdGVkCiAqIGJ5IDxiPm9wZW5zc2xfY3NyX2V4cG9ydDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIE9wZW5TU0xDZXJ0aWZpY2F0ZXxyZXNvdXJjZXxzdHJpbmd8bnVsbCAkY2FfY2VydGlmaWNhdGUgPHA+CiAqIFRoZSBnZW5lcmF0ZWQgY2VydGlmaWNhdGUgd2lsbCBiZSBzaWduZWQgYnkgPGk+Y2FjZXJ0PC9pPi4KICogSWYgPGk+Y2FjZXJ0PC9pPiBpcyBudWxsLCB0aGUgZ2VuZXJhdGVkIGNlcnRpZmljYXRlCiAqIHdpbGwgYmUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZS4KICogPC9wPgogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyAkcHJpdmF0ZV9rZXkgPHA+CiAqIDxpPnByaXZfa2V5PC9pPiBpcyB0aGUgcHJpdmF0ZSBrZXkgdGhhdCBjb3JyZXNwb25kcyB0bwogKiA8aT5jYWNlcnQ8L2k+LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGRheXMgPHA+CiAqIDxpPmRheXM8L2k+IHNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIHRpbWUgZm9yIHdoaWNoIHRoZQogKiBnZW5lcmF0ZWQgY2VydGlmaWNhdGUgd2lsbCBiZSB2YWxpZCwgaW4gZGF5cy4KICogPC9wPgogKiBAcGFyYW0gYXJyYXl8bnVsbCAkb3B0aW9ucyBbb3B0aW9uYWxdIDxwPgogKiBZb3UgY2FuIGZpbmV0dW5lIHRoZSBDU1Igc2lnbmluZyBieSA8aT5jb25maWdhcmdzPC9pPi4KICogU2VlIDxiPm9wZW5zc2xfY3NyX25ldzwvYj4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKICogPGk+Y29uZmlnYXJnczwvaT4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkc2VyaWFsIFtvcHRpb25hbF0gPHA+CiAqIEFuIG9wdGlvbmFsIHRoZSBzZXJpYWwgbnVtYmVyIG9mIGlzc3VlZCBjZXJ0aWZpY2F0ZS4gSWYgbm90IHNwZWNpZmllZAogKiBpdCB3aWxsIGRlZmF1bHQgdG8gMC4KICogPC9wPgogKiBAcmV0dXJuIE9wZW5TU0xDZXJ0aWZpY2F0ZXxyZXNvdXJjZXxmYWxzZSBhbiB4NTA5IGNlcnRpZmljYXRlIHJlc291cmNlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQ2VydGlmaWNhdGV8ZmFsc2UiXSwgZGVmYXVsdDogInJlc291cmNlfGZhbHNlIildCmZ1bmN0aW9uIG9wZW5zc2xfY3NyX3NpZ24oCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdHxzdHJpbmciXSwgZGVmYXVsdDogInJlc291cmNlfHN0cmluZyIpXSAkY3NyLAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiT3BlblNTTENlcnRpZmljYXRlfHN0cmluZ3xudWxsIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZXxzdHJpbmd8bnVsbCIpXSAkY2FfY2VydGlmaWNhdGUsCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZXxhcnJheXxzdHJpbmciKV0gJHByaXZhdGVfa2V5LAogICAgaW50ICRkYXlzLAogICAgP2FycmF5ICRvcHRpb25zLAogICAgaW50ICRzZXJpYWwgPSAwLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC40JyldID9zdHJpbmcgJHNlcmlhbF9oZXggPSBudWxsCikge30KCi8qKgogKiBSZXR1cm5zIHRoZSBzdWJqZWN0IG9mIGEgQ0VSVAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtY3NyLWdldC1zdWJqZWN0LnBocAogKiBAcGFyYW0gT3BlblNTTENlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3R8c3RyaW5nfHJlc291cmNlICRjc3IKICogQHBhcmFtIGJvb2wgJHNob3J0X25hbWVzIFtvcHRpb25hbF0KICogQHJldHVybiBhcnJheXxmYWxzZQogKi8KZnVuY3Rpb24gb3BlbnNzbF9jc3JfZ2V0X3N1YmplY3QoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdHxzdHJpbmciXSwgZGVmYXVsdDogInJlc291cmNlfHN0cmluZyIpXSAkY3NyLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4xJyldIGJvb2wgJHNob3J0X25hbWVzID0gdHJ1ZQopOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIHB1YmxpYyBrZXkgb2YgYSBDRVJUCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1jc3ItZ2V0LXB1YmxpYy1rZXkucGhwCiAqIEBwYXJhbSBPcGVuU1NMQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdHxzdHJpbmd8cmVzb3VyY2UgJGNzcgogKiBAcGFyYW0gYm9vbCAkc2hvcnRfbmFtZXMgW29wdGlvbmFsXQogKiBAcmV0dXJuIE9wZW5TU0xBc3ltbWV0cmljS2V5fHJlc291cmNlfGZhbHNlCiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQXN5bW1ldHJpY0tleXxmYWxzZSJdLCBkZWZhdWx0OiAicmVzb3VyY2V8ZmFsc2UiKV0KZnVuY3Rpb24gb3BlbnNzbF9jc3JfZ2V0X3B1YmxpY19rZXkoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdHxzdHJpbmciXSwgZGVmYXVsdDogInJlc291cmNlfHN0cmluZyIpXSAkY3NyLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4xJyldIGJvb2wgJHNob3J0X25hbWVzID0gdHJ1ZQopIHt9CgovKioKICogQ29tcHV0ZXMgYSBkaWdlc3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLWRpZ2VzdC5waHAKICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICogVGhlIGRhdGEuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZGlnZXN0X2FsZ28gPHA+CiAqIFRoZSBkaWdlc3QgbWV0aG9kLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRiaW5hcnkgW29wdGlvbmFsXSA8cD4KICogU2V0dGluZyB0byB0cnVlIHdpbGwgcmV0dXJuIGFzIHJhdyBvdXRwdXQgZGF0YSwgb3RoZXJ3aXNlIHRoZSByZXR1cm4KICogdmFsdWUgaXMgYmluaGV4IGVuY29kZWQuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIGRpZ2VzdGVkIGhhc2ggdmFsdWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gb3BlbnNzbF9kaWdlc3Qoc3RyaW5nICRkYXRhLCBzdHJpbmcgJGRpZ2VzdF9hbGdvLCBib29sICRiaW5hcnkgPSBmYWxzZSk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIEVuY3J5cHRzIGRhdGEKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLWVuY3J5cHQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgPHA+CiAqIFRoZSBkYXRhLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGNpcGhlcl9hbGdvIDxwPgogKiBUaGUgY2lwaGVyIG1ldGhvZC4gRm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgY2lwaGVyIG1ldGhvZHMsIHVzZSB7QHNlZSBvcGVuc3NsX2dldF9jaXBoZXJfbWV0aG9kcygpfS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXNzcGhyYXNlIDxwPgogKiBUaGUga2V5LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgW29wdGlvbmFsXSA8cD4KICogb3B0aW9ucyBpcyBhIGJpdHdpc2UgZGlzanVuY3Rpb24gb2YgdGhlIGZsYWdzIE9QRU5TU0xfUkFXX0RBVEEgYW5kIE9QRU5TU0xfWkVST19QQURESU5HLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGl2IFtvcHRpb25hbF0gPHA+CiAqIEEgbm9uLU5VTEwgSW5pdGlhbGl6YXRpb24gVmVjdG9yLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJiR0YWcgW29wdGlvbmFsXSA8cD5UaGUgYXV0aGVudGljYXRpb24gdGFnIHBhc3NlZCBieSByZWZlcmVuY2Ugd2hlbiB1c2luZyBBRUFEIGNpcGhlciBtb2RlIChHQ00gb3IgQ0NNKS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGFhZCBbb3B0aW9uYWxdIDxwPkFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YS48L3A+CiAqIEBwYXJhbSBpbnQgJHRhZ19sZW5ndGggW29wdGlvbmFsXSA8cD4KICogVGhlIGxlbmd0aCBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnLiBJdHMgdmFsdWUgY2FuIGJlIGJldHdlZW4gNCBhbmQgMTYgZm9yIEdDTSBtb2RlLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBlbmNyeXB0ZWQgc3RyaW5nIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9wZW5zc2xfZW5jcnlwdCgKICAgIHN0cmluZyAkZGF0YSwKICAgIHN0cmluZyAkY2lwaGVyX2FsZ28sCiAgICBzdHJpbmcgJHBhc3NwaHJhc2UsCiAgICBpbnQgJG9wdGlvbnMgPSAwLAogICAgc3RyaW5nICRpdiA9ICIiLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4xJyldICYkdGFnLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4xJyldIHN0cmluZyAkYWFkID0gIiIsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjEnKV0gaW50ICR0YWdfbGVuZ3RoID0gMTYKKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogRGVjcnlwdHMgZGF0YQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtZGVjcnlwdC5waHAKICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICogVGhlIGRhdGEuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY2lwaGVyX2FsZ28gPHA+CiAqIFRoZSBjaXBoZXIgbWV0aG9kLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhc3NwaHJhc2UgPHA+CiAqIFRoZSBwYXNzd29yZC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAqIFNldHRpbmcgdG8gdHJ1ZSB3aWxsIHRha2UgYSByYXcgZW5jb2RlZCBzdHJpbmcsCiAqIG90aGVyd2lzZSBhIGJhc2U2NCBzdHJpbmcgaXMgYXNzdW1lZCBmb3IgdGhlCiAqIDxpPmRhdGE8L2k+IHBhcmFtZXRlci4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRpdiBbb3B0aW9uYWxdIDxwPgogKiBBIG5vbi1OVUxMIEluaXRpYWxpemF0aW9uIFZlY3Rvci4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHRhZyA8cD4KICogVGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBpbiBBRUFEIGNpcGhlciBtb2RlLiBJZiBpdCBpcyBpbmNvcnJlY3QsIHRoZSBhdXRoZW50aWNhdGlvbiBmYWlscyBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgPGI+RkFMU0U8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGFhZCBbb3B0aW9uYWxdIDxwPkFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YS48L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBkZWNyeXB0ZWQgc3RyaW5nIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9wZW5zc2xfZGVjcnlwdCgKICAgIHN0cmluZyAkZGF0YSwKICAgIHN0cmluZyAkY2lwaGVyX2FsZ28sCiAgICBzdHJpbmcgJHBhc3NwaHJhc2UsCiAgICBpbnQgJG9wdGlvbnMgPSAwLAogICAgc3RyaW5nICRpdiA9ICIiLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4xJyldICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICdzdHJpbmcnKV0gJHRhZyA9IG51bGwsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjEnKV0gc3RyaW5nICRhYWQgPSAiIgopOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gUEhQIDUuMy4zKTxici8+CiAqIEdldHMgdGhlIGNpcGhlciBpdiBsZW5ndGgKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLWNpcGhlci1pdi1sZW5ndGgucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNpcGhlcl9hbGdvIDxwPgogKiBUaGUgbWV0aG9kLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIHRoZSBjaXBoZXIgbGVuZ3RoIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2NpcGhlcl9pdl9sZW5ndGgoc3RyaW5nICRjaXBoZXJfYWxnbyk6IGludHxmYWxzZSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gd29ya3MgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgb3BlbnNzbF9jaXBoZXJfaXZfbGVuZ3RoIGJ1dCBmb3IgYSBrZXkgbGVuZ3RoLiBUaGlzIGlzIGVzcGVjaWFsbHkKICogdXNlZnVsIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByaWdodCBrZXkgbGVuZ3RoIGlzIHByb3ZpZGVkIHRvIG9wZW5zc2xfZW5jcnlwdCBhbmQgb3BlbnNzbF9kZWNyeXB0LgogKiBAcGFyYW0gc3RyaW5nICRjaXBoZXJfYWxnbwogKiBAcmV0dXJuIGludHxmYWxzZQogKiBAc2luY2UgOC4yCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2NpcGhlcl9rZXlfbGVuZ3RoKHN0cmluZyAkY2lwaGVyX2FsZ28pOiBpbnR8ZmFsc2Uge30KCi8qKgogKiBHZW5lcmF0ZSBzaWduYXR1cmUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLXNpZ24ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICogQHBhcmFtIHN0cmluZyAmJHNpZ25hdHVyZSA8cD4KICogSWYgdGhlIGNhbGwgd2FzIHN1Y2Nlc3NmdWwgdGhlIHNpZ25hdHVyZSBpcyByZXR1cm5lZCBpbgogKiA8aT5zaWduYXR1cmU8L2k+LgogKiA8L3A+CiAqIEBwYXJhbSBPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nICRwcml2YXRlX2tleQogKiBAcGFyYW0gc3RyaW5nfGludCAkYWxnb3JpdGhtIFtvcHRpb25hbF0gPHA+CiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgbGlzdCBvZiBTaWduYXR1cmUgQWxnb3JpdGhtcy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3NpZ24oCiAgICBzdHJpbmcgJGRhdGEsCiAgICAmJHNpZ25hdHVyZSwKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09wZW5TU0xBc3ltbWV0cmljS2V5fE9wZW5TU0xDZXJ0aWZpY2F0ZXxhcnJheXxzdHJpbmcnXSwgZGVmYXVsdDogJ3Jlc291cmNlfGFycmF5fHN0cmluZycpXSAkcHJpdmF0ZV9rZXksCiAgICBzdHJpbmd8aW50ICRhbGdvcml0aG0gPSBPUEVOU1NMX0FMR09fU0hBMQopOiBib29sIHt9CgovKioKICogVmVyaWZ5IHNpZ25hdHVyZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtdmVyaWZ5LnBocAogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEBwYXJhbSBzdHJpbmcgJHNpZ25hdHVyZQogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyAkcHVibGljX2tleQogKiBAcGFyYW0gc3RyaW5nfGludCAkYWxnb3JpdGhtIFtvcHRpb25hbF0gPHA+CiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgbGlzdCBvZiBTaWduYXR1cmUgQWxnb3JpdGhtcy4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSAxIGlmIHRoZSBzaWduYXR1cmUgaXMgY29ycmVjdCwgMCBpZiBpdCBpcyBpbmNvcnJlY3QsIGFuZAogKiAtMSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIG9wZW5zc2xfdmVyaWZ5KAogICAgc3RyaW5nICRkYXRhLAogICAgc3RyaW5nICRzaWduYXR1cmUsCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxhcnJheXxzdHJpbmcnKV0gJHB1YmxpY19rZXksCiAgICBzdHJpbmd8aW50ICRhbGdvcml0aG0gPSBPUEVOU1NMX0FMR09fU0hBMQopOiBpbnR8ZmFsc2Uge30KCi8qKgogKiBTZWFsIChlbmNyeXB0KSBkYXRhCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1zZWFsLnBocAogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEBwYXJhbSBzdHJpbmcgJiRzZWFsZWRfZGF0YQogKiBAcGFyYW0gYXJyYXkgJiRlbmNyeXB0ZWRfa2V5cwogKiBAcGFyYW0gYXJyYXkgJHB1YmxpY19rZXkKICogQHBhcmFtIHN0cmluZyAkY2lwaGVyX2FsZ28KICogQHBhcmFtIHN0cmluZyAmJGl2CiAqIEByZXR1cm4gaW50fGZhbHNlIHRoZSBsZW5ndGggb2YgdGhlIHNlYWxlZCBkYXRhIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIGVycm9yLgogKiBJZiBzdWNjZXNzZnVsIHRoZSBzZWFsZWQgZGF0YSBpcyByZXR1cm5lZCBpbgogKiA8aT5zZWFsZWRfZGF0YTwvaT4sIGFuZCB0aGUgZW52ZWxvcGUga2V5cyBpbgogKiA8aT5lbnZfa2V5czwvaT4uCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3NlYWwoCiAgICBzdHJpbmcgJGRhdGEsCiAgICAmJHNlYWxlZF9kYXRhLAogICAgJiRlbmNyeXB0ZWRfa2V5cywKICAgIGFycmF5ICRwdWJsaWNfa2V5LAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gc3RyaW5nICRjaXBoZXJfYWxnbyA9ICcnLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIHN0cmluZyAkY2lwaGVyX2FsZ28sCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjAnKV0gJiRpdiA9IG51bGwKKTogaW50fGZhbHNlIHt9CgovKioKICogT3BlbiBzZWFsZWQgZGF0YQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtb3Blbi5waHAKICogQHBhcmFtIHN0cmluZyAkZGF0YQogKiBAcGFyYW0gc3RyaW5nICYkb3V0cHV0IDxwPgogKiBJZiB0aGUgY2FsbCBpcyBzdWNjZXNzZnVsIHRoZSBvcGVuZWQgZGF0YSBpcyByZXR1cm5lZCBpbiB0aGlzCiAqIHBhcmFtZXRlci4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRlbmNyeXB0ZWRfa2V5CiAqIEBwYXJhbSBPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nICRwcml2YXRlX2tleQogKiBAcGFyYW0gc3RyaW5nICRjaXBoZXJfYWxnbyBUaGUgY2lwaGVyIG1ldGhvZC4KICogQHBhcmFtIHN0cmluZ3xudWxsICRpdiBbb3B0aW9uYWxdIFRoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IuCiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9wZW5zc2xfb3BlbigKICAgIHN0cmluZyAkZGF0YSwKICAgICYkb3V0cHV0LAogICAgc3RyaW5nICRlbmNyeXB0ZWRfa2V5LAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyddLCBkZWZhdWx0OiAncmVzb3VyY2V8YXJyYXl8c3RyaW5nJyldICRwcml2YXRlX2tleSwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMCcsIHRvOiAnNy40JyldIHN0cmluZyAkY2lwaGVyX2FsZ28gPSAnJywKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSBzdHJpbmcgJGNpcGhlcl9hbGdvLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4wJyldID9zdHJpbmcgJGl2Cik6IGJvb2wge30KCi8qKgogKiBHZW5lcmF0ZXMgYSBQS0NTNSB2MiBQQktERjIgc3RyaW5nLCBkZWZhdWx0cyB0byBTSEEtMQogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLXBia2RmMi5waHAKICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQKICogQHBhcmFtIHN0cmluZyAkc2FsdAogKiBAcGFyYW0gaW50ICRrZXlfbGVuZ3RoCiAqIEBwYXJhbSBpbnQgJGl0ZXJhdGlvbnMKICogQHBhcmFtIHN0cmluZyAkZGlnZXN0X2FsZ28gW29wdGlvbmFsXQogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBSZXR1cm5zIHN0cmluZyBvciBGQUxTRSBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS41CiAqLwpmdW5jdGlvbiBvcGVuc3NsX3Bia2RmMihzdHJpbmcgJHBhc3N3b3JkLCBzdHJpbmcgJHNhbHQsIGludCAka2V5X2xlbmd0aCwgaW50ICRpdGVyYXRpb25zLCBzdHJpbmcgJGRpZ2VzdF9hbGdvID0gJ3NoYTEnKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogVmVyaWZpZXMgdGhlIHNpZ25hdHVyZSBvZiBhbiBTL01JTUUgc2lnbmVkIG1lc3NhZ2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLXBrY3M3LXZlcmlmeS5waHAKICogQHBhcmFtIHN0cmluZyAkaW5wdXRfZmlsZW5hbWUgPHA+CiAqIFBhdGggdG8gdGhlIG1lc3NhZ2UuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgPHA+CiAqIDxpPmZsYWdzPC9pPiBjYW4gYmUgdXNlZCB0byBhZmZlY3QgaG93IHRoZSBzaWduYXR1cmUgaXMKICogdmVyaWZpZWQgLSBzZWUgUEtDUzcgY29uc3RhbnRzCiAqIGZvciBtb3JlIGluZm9ybWF0aW9uLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2lnbmVyc19jZXJ0aWZpY2F0ZXNfZmlsZW5hbWUgW29wdGlvbmFsXSA8cD4KICogSWYgdGhlIDxpPm91dGZpbGVuYW1lPC9pPiBpcyBzcGVjaWZpZWQsIGl0IHNob3VsZCBiZSBhCiAqIHN0cmluZyBob2xkaW5nIHRoZSBuYW1lIG9mIGEgZmlsZSBpbnRvIHdoaWNoIHRoZSBjZXJ0aWZpY2F0ZXMgb2YgdGhlCiAqIHBlcnNvbnMgdGhhdCBzaWduZWQgdGhlIG1lc3NhZ2VzIHdpbGwgYmUgc3RvcmVkIGluIFBFTSBmb3JtYXQuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRjYV9pbmZvIDxwPgogKiBJZiB0aGUgPGk+Y2FpbmZvPC9pPiBpcyBzcGVjaWZpZWQsIGl0IHNob3VsZCBob2xkCiAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cnVzdGVkIENBIGNlcnRpZmljYXRlcyB0byB1c2UgaW4gdGhlIHZlcmlmaWNhdGlvbgogKiBwcm9jZXNzIC0gc2VlIGNlcnRpZmljYXRlCiAqIHZlcmlmaWNhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhcmFtZXRlci4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHVudHJ1c3RlZF9jZXJ0aWZpY2F0ZXNfZmlsZW5hbWUgW29wdGlvbmFsXSA8cD4KICogSWYgdGhlIDxpPmV4dHJhY2VydHM8L2k+IGlzIHNwZWNpZmllZCwgaXQgaXMgdGhlIGZpbGVuYW1lCiAqIG9mIGEgZmlsZSBjb250YWluaW5nIGEgYnVuY2ggb2YgY2VydGlmaWNhdGVzIHRvIHVzZSBhcyB1bnRydXN0ZWQgQ0FzLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkY29udGVudCBbb3B0aW9uYWxdIDxwPgogKiBZb3UgY2FuIHNwZWNpZnkgYSBmaWxlbmFtZSB3aXRoIDxpPmNvbnRlbnQ8L2k+IHRoYXQgd2lsbAogKiBiZSBmaWxsZWQgd2l0aCB0aGUgdmVyaWZpZWQgZGF0YSwgYnV0IHdpdGggdGhlIHNpZ25hdHVyZSBpbmZvcm1hdGlvbgogKiBzdHJpcHBlZC4KICogQHBhcmFtIHN0cmluZ3xudWxsICRvdXRwdXRfZmlsZW5hbWUgW29wdGlvbmFsXQogKiA8L3A+CiAqIEByZXR1cm4gYm9vbHxpbnQgdHJ1ZSBpZiB0aGUgc2lnbmF0dXJlIGlzIHZlcmlmaWVkLCBmYWxzZSBpZiBpdCBpcyBub3QgY29ycmVjdAogKiAodGhlIG1lc3NhZ2UgaGFzIGJlZW4gdGFtcGVyZWQgd2l0aCwgb3IgdGhlIHNpZ25pbmcgY2VydGlmaWNhdGUgaXMgaW52YWxpZCksCiAqIG9yIC0xIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2NzN192ZXJpZnkoCiAgICBzdHJpbmcgJGlucHV0X2ZpbGVuYW1lLAogICAgaW50ICRmbGFncywKICAgID9zdHJpbmcgJHNpZ25lcnNfY2VydGlmaWNhdGVzX2ZpbGVuYW1lLAogICAgYXJyYXkgJGNhX2luZm8gPSBbXSwKICAgID9zdHJpbmcgJHVudHJ1c3RlZF9jZXJ0aWZpY2F0ZXNfZmlsZW5hbWUsCiAgICA/c3RyaW5nICRjb250ZW50LAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZSgiNy4yIildID9zdHJpbmcgJG91dHB1dF9maWxlbmFtZQopOiBpbnR8Ym9vbCB7fQoKLyoqCiAqIERlY3J5cHRzIGFuIFMvTUlNRSBlbmNyeXB0ZWQgbWVzc2FnZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtcGtjczctZGVjcnlwdC5waHAKICogQHBhcmFtIHN0cmluZyAkaW5wdXRfZmlsZW5hbWUKICogQHBhcmFtIHN0cmluZyAkb3V0cHV0X2ZpbGVuYW1lIDxwPgogKiBUaGUgZGVjcnlwdGVkIG1lc3NhZ2UgaXMgd3JpdHRlbiB0byB0aGUgZmlsZSBzcGVjaWZpZWQgYnkKICogPGk+b3V0ZmlsZW5hbWU8L2k+LgogKiA8L3A+CiAqIEBwYXJhbSBPcGVuU1NMQ2VydGlmaWNhdGV8c3RyaW5nfHJlc291cmNlICRjZXJ0aWZpY2F0ZQogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZ3xudWxsICRwcml2YXRlX2tleSBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9wZW5zc2xfcGtjczdfZGVjcnlwdCgKICAgIHN0cmluZyAkaW5wdXRfZmlsZW5hbWUsCiAgICBzdHJpbmcgJG91dHB1dF9maWxlbmFtZSwKICAgICRjZXJ0aWZpY2F0ZSwKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09wZW5TU0xBc3ltbWV0cmljS2V5fE9wZW5TU0xDZXJ0aWZpY2F0ZXxhcnJheXxzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAncmVzb3VyY2V8YXJyYXl8c3RyaW5nfG51bGwnKV0gJHByaXZhdGVfa2V5Cik6IGJvb2wge30KCi8qKgogKiBTaWduIGFuIFMvTUlNRSBtZXNzYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1wa2NzNy1zaWduLnBocAogKiBAcGFyYW0gc3RyaW5nICRpbnB1dF9maWxlbmFtZQogKiBAcGFyYW0gc3RyaW5nICRvdXRwdXRfZmlsZW5hbWUKICogQHBhcmFtIE9wZW5TU0xDZXJ0aWZpY2F0ZXxzdHJpbmd8cmVzb3VyY2UgJGNlcnRpZmljYXRlCiAqIEBwYXJhbSBPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nICRwcml2YXRlX2tleQogKiBAcGFyYW0gYXJyYXl8bnVsbCAkaGVhZGVycyA8cD4KICogPGk+aGVhZGVyczwvaT4gaXMgYW4gYXJyYXkgb2YgaGVhZGVycyB0aGF0CiAqIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoZSBkYXRhIGFmdGVyIGl0IGhhcyBiZWVuIHNpZ25lZCAoc2VlCiAqIDxiPm9wZW5zc2xfcGtjczdfZW5jcnlwdDwvYj4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQKICogdGhlIGZvcm1hdCBvZiB0aGlzIHBhcmFtZXRlcikuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICogPGk+ZmxhZ3M8L2k+IGNhbiBiZSB1c2VkIHRvIGFsdGVyIHRoZSBvdXRwdXQgLSBzZWUgUEtDUzcgY29uc3RhbnRzLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdW50cnVzdGVkX2NlcnRpZmljYXRlc19maWxlbmFtZSBbb3B0aW9uYWxdIDxwPgogKiA8aT5leHRyYWNlcnRzPC9pPiBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcKICogYSBidW5jaCBvZiBleHRyYSBjZXJ0aWZpY2F0ZXMgdG8gaW5jbHVkZSBpbiB0aGUgc2lnbmF0dXJlIHdoaWNoIGNhbiBmb3IKICogZXhhbXBsZSBiZSB1c2VkIHRvIGhlbHAgdGhlIHJlY2lwaWVudCB0byB2ZXJpZnkgdGhlIGNlcnRpZmljYXRlIHRoYXQgeW91IHVzZWQuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2NzN19zaWduKAogICAgc3RyaW5nICRpbnB1dF9maWxlbmFtZSwKICAgIHN0cmluZyAkb3V0cHV0X2ZpbGVuYW1lLAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiT3BlblNTTENlcnRpZmljYXRlfHN0cmluZyJdLCBkZWZhdWx0OiAicmVzb3VyY2V8c3RyaW5nIildICRjZXJ0aWZpY2F0ZSwKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09wZW5TU0xBc3ltbWV0cmljS2V5fE9wZW5TU0xDZXJ0aWZpY2F0ZXxhcnJheXxzdHJpbmcnXSwgZGVmYXVsdDogJ3Jlc291cmNlfGFycmF5fHN0cmluZycpXSAkcHJpdmF0ZV9rZXksCiAgICA/YXJyYXkgJGhlYWRlcnMsCiAgICBpbnQgJGZsYWdzID0gUEtDUzdfREVUQUNIRUQsCiAgICA/c3RyaW5nICR1bnRydXN0ZWRfY2VydGlmaWNhdGVzX2ZpbGVuYW1lCik6IGJvb2wge30KCi8qKgogKiBFbmNyeXB0IGFuIFMvTUlNRSBtZXNzYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1wa2NzNy1lbmNyeXB0LnBocAogKiBAcGFyYW0gc3RyaW5nICRpbnB1dF9maWxlbmFtZQogKiBAcGFyYW0gc3RyaW5nICRvdXRwdXRfZmlsZW5hbWUKICogQHBhcmFtIE9wZW5TU0xDZXJ0aWZpY2F0ZXxhcnJheXxzdHJpbmd8cmVzb3VyY2UgJGNlcnRpZmljYXRlIDxwPgogKiBFaXRoZXIgYSBsb25lIFguNTA5IGNlcnRpZmljYXRlLCBvciBhbiBhcnJheSBvZiBYLjUwOSBjZXJ0aWZpY2F0ZXMuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5fG51bGwgJGhlYWRlcnMgPHA+CiAqIDxpPmhlYWRlcnM8L2k+IGlzIGFuIGFycmF5IG9mIGhlYWRlcnMgdGhhdAogKiB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUgZGF0YSBhZnRlciBpdCBoYXMgYmVlbiBlbmNyeXB0ZWQuCiAqIDwvcD4KICogPHA+CiAqIDxpPmhlYWRlcnM8L2k+IGNhbiBiZSBlaXRoZXIgYW4gYXNzb2NpYXRpdmUgYXJyYXkKICoga2V5ZWQgYnkgaGVhZGVyIG5hbWUsIG9yIGFuIGluZGV4ZWQgYXJyYXksIHdoZXJlIGVhY2ggZWxlbWVudCBjb250YWlucwogKiBhIHNpbmdsZSBoZWFkZXIgbGluZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogKiA8aT5mbGFnczwvaT4gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvcHRpb25zIHRoYXQgYWZmZWN0CiAqIHRoZSBlbmNvZGluZyBwcm9jZXNzIC0gc2VlIFBLQ1M3CiAqIGNvbnN0YW50cy4KICogPC9wPgogKiBAcGFyYW0gaW50ICRjaXBoZXJfYWxnbyBbb3B0aW9uYWxdIDxwPgogKiBPbmUgb2YgY2lwaGVyIGNvbnN0YW50cy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrY3M3X2VuY3J5cHQoCiAgICBzdHJpbmcgJGlucHV0X2ZpbGVuYW1lLAogICAgc3RyaW5nICRvdXRwdXRfZmlsZW5hbWUsCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZXxhcnJheXxzdHJpbmciKV0gJGNlcnRpZmljYXRlLAogICAgP2FycmF5ICRoZWFkZXJzLAogICAgaW50ICRmbGFncyA9IDAsCiAgICBpbnQgJGNpcGhlcl9hbGdvID0gT1BFTlNTTF9DSVBIRVJfQUVTXzEyOF9DQkMKKTogYm9vbCB7fQoKLyoqCiAqIEVuY3J5cHRzIGRhdGEgd2l0aCBwcml2YXRlIGtleQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtcHJpdmF0ZS1lbmNyeXB0LnBocAogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEBwYXJhbSBzdHJpbmcgJiRlbmNyeXB0ZWRfZGF0YQogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyAkcHJpdmF0ZV9rZXkKICogQHBhcmFtIGludCAkcGFkZGluZyBbb3B0aW9uYWxdIDxwPgogKiA8aT5wYWRkaW5nPC9pPiBjYW4gYmUgb25lIG9mCiAqIDxiPk9QRU5TU0xfUEtDUzFfUEFERElORzwvYj4sCiAqIDxiPk9QRU5TU0xfTk9fUEFERElORzwvYj4uCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gb3BlbnNzbF9wcml2YXRlX2VuY3J5cHQoCiAgICBzdHJpbmcgJGRhdGEsCiAgICAmJGVuY3J5cHRlZF9kYXRhLAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyddLCBkZWZhdWx0OiAncmVzb3VyY2V8YXJyYXl8c3RyaW5nJyldICRwcml2YXRlX2tleSwKICAgIGludCAkcGFkZGluZyA9IE9QRU5TU0xfUEtDUzFfUEFERElORwopOiBib29sIHt9CgovKioKICogRGVjcnlwdHMgZGF0YSB3aXRoIHByaXZhdGUga2V5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1wcml2YXRlLWRlY3J5cHQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICogQHBhcmFtIHN0cmluZyAmJGRlY3J5cHRlZF9kYXRhCiAqIEBwYXJhbSBPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nICRwcml2YXRlX2tleSA8cD4KICogPGk+a2V5PC9pPiBtdXN0IGJlIHRoZSBwcml2YXRlIGtleSBjb3JyZXNwb25kaW5nIHRoYXQKICogd2FzIHVzZWQgdG8gZW5jcnlwdCB0aGUgZGF0YS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRwYWRkaW5nIFtvcHRpb25hbF0gPHA+CiAqIDxpPnBhZGRpbmc8L2k+IGNhbiBiZSBvbmUgb2YKICogPGI+T1BFTlNTTF9QS0NTMV9QQURESU5HPC9iPiwKICogPGI+T1BFTlNTTF9TU0xWMjNfUEFERElORzwvYj4sCiAqIDxiPk9QRU5TU0xfUEtDUzFfT0FFUF9QQURESU5HPC9iPiwKICogPGI+T1BFTlNTTF9OT19QQURESU5HPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3ByaXZhdGVfZGVjcnlwdCgKICAgIHN0cmluZyAkZGF0YSwKICAgICYkZGVjcnlwdGVkX2RhdGEsCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxhcnJheXxzdHJpbmcnKV0gJHByaXZhdGVfa2V5LAogICAgaW50ICRwYWRkaW5nID0gT1BFTlNTTF9QS0NTMV9QQURESU5HCik6IGJvb2wge30KCi8qKgogKiBFbmNyeXB0cyBkYXRhIHdpdGggcHVibGljIGtleQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtcHVibGljLWVuY3J5cHQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICogQHBhcmFtIHN0cmluZyAmJGVuY3J5cHRlZF9kYXRhIDxwPgogKiBUaGlzIHdpbGwgaG9sZCB0aGUgcmVzdWx0IG9mIHRoZSBlbmNyeXB0aW9uLgogKiA8L3A+CiAqIEBwYXJhbSBPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nICRwdWJsaWNfa2V5IDxwPgogKiBUaGUgcHVibGljIGtleS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRwYWRkaW5nIFtvcHRpb25hbF0gPHA+CiAqIDxpPnBhZGRpbmc8L2k+IGNhbiBiZSBvbmUgb2YKICogPGI+T1BFTlNTTF9QS0NTMV9QQURESU5HPC9iPiwKICogPGI+T1BFTlNTTF9TU0xWMjNfUEFERElORzwvYj4sCiAqIDxiPk9QRU5TU0xfUEtDUzFfT0FFUF9QQURESU5HPC9iPiwKICogPGI+T1BFTlNTTF9OT19QQURESU5HPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3B1YmxpY19lbmNyeXB0KAogICAgc3RyaW5nICRkYXRhLAogICAgJiRlbmNyeXB0ZWRfZGF0YSwKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09wZW5TU0xBc3ltbWV0cmljS2V5fE9wZW5TU0xDZXJ0aWZpY2F0ZXxhcnJheXxzdHJpbmcnXSwgZGVmYXVsdDogJ3Jlc291cmNlfGFycmF5fHN0cmluZycpXSAkcHVibGljX2tleSwKICAgIGludCAkcGFkZGluZyA9IE9QRU5TU0xfUEtDUzFfUEFERElORwopOiBib29sIHt9CgovKioKICogRGVjcnlwdHMgZGF0YSB3aXRoIHB1YmxpYyBrZXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vcGVuc3NsLXB1YmxpYy1kZWNyeXB0LnBocAogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEBwYXJhbSBzdHJpbmcgJiRkZWNyeXB0ZWRfZGF0YQogKiBAcGFyYW0gT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyAkcHVibGljX2tleSA8cD4KICogPGk+a2V5PC9pPiBtdXN0IGJlIHRoZSBwdWJsaWMga2V5IGNvcnJlc3BvbmRpbmcgdGhhdAogKiB3YXMgdXNlZCB0byBlbmNyeXB0IHRoZSBkYXRhLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHBhZGRpbmcgW29wdGlvbmFsXSA8cD4KICogPGk+cGFkZGluZzwvaT4gY2FuIGJlIG9uZSBvZgogKiA8Yj5PUEVOU1NMX1BLQ1MxX1BBRERJTkc8L2I+LAogKiA8Yj5PUEVOU1NMX05PX1BBRERJTkc8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9wZW5zc2xfcHVibGljX2RlY3J5cHQoCiAgICBzdHJpbmcgJGRhdGEsCiAgICAmJGRlY3J5cHRlZF9kYXRhLAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyddLCBkZWZhdWx0OiAncmVzb3VyY2V8YXJyYXl8c3RyaW5nJyldICRwdWJsaWNfa2V5LAogICAgaW50ICRwYWRkaW5nID0gT1BFTlNTTF9QS0NTMV9QQURESU5HCik6IGJvb2wge30KCi8qKgogKiBHZXRzIGF2YWlsYWJsZSBkaWdlc3QgbWV0aG9kcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtZ2V0LW1kLW1ldGhvZHMucGhwCiAqIEBwYXJhbSBib29sICRhbGlhc2VzIFtvcHRpb25hbF0gPHA+CiAqIFNldCB0byB0cnVlIGlmIGRpZ2VzdCBhbGlhc2VzIHNob3VsZCBiZSBpbmNsdWRlZCB3aXRoaW4gdGhlCiAqIHJldHVybmVkIGFycmF5LgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgb2YgYXZhaWxhYmxlIGRpZ2VzdCBtZXRob2RzLgogKi8KZnVuY3Rpb24gb3BlbnNzbF9nZXRfbWRfbWV0aG9kcyhib29sICRhbGlhc2VzID0gZmFsc2UpOiBhcnJheSB7fQoKLyoqCiAqIEdldHMgYXZhaWxhYmxlIGNpcGhlciBtZXRob2RzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1nZXQtY2lwaGVyLW1ldGhvZHMucGhwCiAqIEBwYXJhbSBib29sICRhbGlhc2VzIFtvcHRpb25hbF0gPHA+CiAqIFNldCB0byB0cnVlIGlmIGNpcGhlciBhbGlhc2VzIHNob3VsZCBiZSBpbmNsdWRlZCB3aXRoaW4gdGhlCiAqIHJldHVybmVkIGFycmF5LgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgb2YgYXZhaWxhYmxlIGNpcGhlciBtZXRob2RzLgogKi8KZnVuY3Rpb24gb3BlbnNzbF9nZXRfY2lwaGVyX21ldGhvZHMoYm9vbCAkYWxpYXNlcyA9IGZhbHNlKTogYXJyYXkge30KCi8qKgogKiBDb21wdXRlcyBzaGFyZWQgc2VjcmV0IGZvciBwdWJsaWMgdmFsdWUgb2YgcmVtb3RlIERIIGtleSBhbmQgbG9jYWwgREgga2V5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1kaC1jb21wdXRlLWtleS5waHAKICogQHBhcmFtIHN0cmluZyAkcHVibGljX2tleSA8cD4KICogUHVibGljIGtleQogKiA8L3A+CiAqIEBwYXJhbSBPcGVuU1NMQXN5bW1ldHJpY0tleXxyZXNvdXJjZSAkcHJpdmF0ZV9rZXkgPHA+CiAqIERIIGtleQogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIGNvbXB1dGVkIGtleSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA1LjMKICovCmZ1bmN0aW9uIG9wZW5zc2xfZGhfY29tcHV0ZV9rZXkoc3RyaW5nICRwdWJsaWNfa2V5LCAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJPcGVuU1NMQXN5bW1ldHJpY0tleSJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHByaXZhdGVfa2V5KTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogQHBhcmFtIE9wZW5TU0xBc3ltbWV0cmljS2V5fE9wZW5TU0xDZXJ0aWZpY2F0ZXxhcnJheXxzdHJpbmcgJHB1YmxpY19rZXkKICogQHBhcmFtIE9wZW5TU0xBc3ltbWV0cmljS2V5fE9wZW5TU0xDZXJ0aWZpY2F0ZXxhcnJheXxzdHJpbmcgJHByaXZhdGVfa2V5CiAqIEBwYXJhbSBpbnQgJGtleV9sZW5ndGgKICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICogQHNpbmNlIDcuMwogKi8KZnVuY3Rpb24gb3BlbnNzbF9wa2V5X2Rlcml2ZSgKICAgICRwdWJsaWNfa2V5LAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT3BlblNTTEFzeW1tZXRyaWNLZXl8T3BlblNTTENlcnRpZmljYXRlfGFycmF5fHN0cmluZyddLCBkZWZhdWx0OiAncmVzb3VyY2V8YXJyYXl8c3RyaW5nJyldICRwcml2YXRlX2tleSwKICAgIGludCAka2V5X2xlbmd0aCA9IDAKKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogR2VuZXJhdGVzIGEgc3RyaW5nIG9mIHBzZXVkby1yYW5kb20gYnl0ZXMsIHdpdGggdGhlIG51bWJlciBvZiBieXRlcyBkZXRlcm1pbmVkIGJ5IHRoZSBsZW5ndGggcGFyYW1ldGVyLgogKiA8cD5JdCBhbHNvIGluZGljYXRlcyBpZiBhIGNyeXB0b2dyYXBoaWNhbGx5IHN0cm9uZyBhbGdvcml0aG0gd2FzIHVzZWQgdG8gcHJvZHVjZSB0aGUgcHNldWRvLXJhbmRvbSBieXRlcywKICogYW5kIGRvZXMgdGhpcyB2aWEgdGhlIG9wdGlvbmFsIGNyeXB0b19zdHJvbmcgcGFyYW1ldGVyLiBJdCdzIHJhcmUgZm9yIHRoaXMgdG8gYmUgRkFMU0UsIGJ1dCBzb21lIHN5c3RlbXMgbWF5IGJlIGJyb2tlbiBvciBvbGQuPC9wPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtcmFuZG9tLXBzZXVkby1ieXRlcy5waHAKICogQHBhcmFtIHBvc2l0aXZlLWludCAkbGVuZ3RoIDxwPgogKiBUaGUgbGVuZ3RoIG9mIHRoZSBkZXNpcmVkIHN0cmluZyBvZiBieXRlcy4gTXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIFBIUCB3aWxsCiAqIHRyeSB0byBjYXN0IHRoaXMgcGFyYW1ldGVyIHRvIGEgbm9uLW51bGwgaW50ZWdlciB0byB1c2UgaXQuCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJiRzdHJvbmdfcmVzdWx0IFtvcHRpb25hbF08cD4KICogSWYgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLCB0aGlzIHdpbGwgaG9sZCBhIGJvb2xlYW4gdmFsdWUgdGhhdCBkZXRlcm1pbmVzCiAqIGlmIHRoZSBhbGdvcml0aG0gdXNlZCB3YXMgImNyeXB0b2dyYXBoaWNhbGx5IHN0cm9uZyIsIGUuZy4sIHNhZmUgZm9yIHVzYWdlIHdpdGggR1BHLAogKiBwYXNzd29yZHMsIGV0Yy4gdHJ1ZSBpZiBpdCBkaWQsIG90aGVyd2lzZSBmYWxzZQogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBnZW5lcmF0ZWQgc3RyaW5nIG9mIGJ5dGVzIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI3LjQiID0+ICJzdHJpbmciXSwgZGVmYXVsdDogInN0cmluZ3xmYWxzZSIpXQpmdW5jdGlvbiBvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMoaW50ICRsZW5ndGgsICYkc3Ryb25nX3Jlc3VsdCkge30KCi8qKgogKiBSZXR1cm4gb3BlblNTTCBlcnJvciBtZXNzYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BlbnNzbC1lcnJvci1zdHJpbmcucGhwCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIGFuIGVycm9yIG1lc3NhZ2Ugc3RyaW5nLCBvciBmYWxzZSBpZiB0aGVyZSBhcmUgbm8gbW9yZSBlcnJvcgogKiBtZXNzYWdlcyB0byByZXR1cm4uCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2Vycm9yX3N0cmluZygpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBSZXRyaWV2ZSB0aGUgYXZhaWxhYmxlIGNlcnRpZmljYXRlIGxvY2F0aW9ucwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wZW5zc2wtZ2V0LWNlcnQtbG9jYXRpb25zLnBocAogKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5IHdpdGggdGhlIGF2YWlsYWJsZSBjZXJ0aWZpY2F0ZSBsb2NhdGlvbnMKICogQHNpbmNlIDUuNgogKi8KI1tBcnJheVNoYXBlKFsKICAgICdkZWZhdWx0X2NlcnRfZmlsZScgPT4gJ3N0cmluZycsCiAgICAnZGVmYXVsdF9jZXJ0X2ZpbGVfZW52JyA9PiAnc3RyaW5nJywKICAgICdkZWZhdWx0X2NlcnRfZGlyJyA9PiAnc3RyaW5nJywKICAgICdkZWZhdWx0X2NlcnRfZGlyX2VudicgPT4gJ3N0cmluZycsCiAgICAnZGVmYXVsdF9wcml2YXRlX2RpcicgPT4gJ3N0cmluZycsCiAgICAnZGVmYXVsdF9kZWZhdWx0X2NlcnRfYXJlYScgPT4gJ3N0cmluZycsCiAgICAnaW5pX2NhZmlsZScgPT4gJ3N0cmluZycsCiAgICAnaW5pX2NhcGF0aCcgPT4gJ3N0cmluZycKXSldCmZ1bmN0aW9uIG9wZW5zc2xfZ2V0X2NlcnRfbG9jYXRpb25zKCk6IGFycmF5IHt9CgpmdW5jdGlvbiBvcGVuc3NsX2dldF9jdXJ2ZV9uYW1lcygpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICogQHBhcmFtIGFycmF5ICYkY2VydGlmaWNhdGVzCiAqIEByZXR1cm4gYm9vbAogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBvcGVuc3NsX3BrY3M3X3JlYWQoc3RyaW5nICRkYXRhLCAmJGNlcnRpZmljYXRlcyk6IGJvb2wge30KCi8qKgogKiBWZXJpZmllcyB0aGF0IHRoZSBkYXRhIGJsb2NrIGlzIGludGFjdCwgdGhlIHNpZ25lciBpcyB3aG8gdGhleSBzYXkgdGhleSBhcmUsIGFuZCByZXR1cm5zIHRoZSBjZXJ0cyBvZiB0aGUgc2lnbmVycy4KICogQHBhcmFtIHN0cmluZyAkaW5wdXRfZmlsZW5hbWUKICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNlcnRpZmljYXRlcyBbb3B0aW9uYWxdCiAqIEBwYXJhbSBhcnJheSAkY2FfaW5mbwogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHVudHJ1c3RlZF9jZXJ0aWZpY2F0ZXNfZmlsZW5hbWUgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNvbnRlbnQgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHBrNyBbb3B0aW9uYWxdCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2lnZmlsZSBbb3B0aW9uYWxdCiAqIEBwYXJhbSBpbnQgJGVuY29kaW5nIFtvcHRpb25hbF0KICogQHJldHVybiBib29sCiAqIEBzaW5jZSA4LjAKICovCmZ1bmN0aW9uIG9wZW5zc2xfY21zX3ZlcmlmeShzdHJpbmcgJGlucHV0X2ZpbGVuYW1lLCBpbnQgJGZsYWdzID0gMCwgP3N0cmluZyAkY2VydGlmaWNhdGVzLCBhcnJheSAkY2FfaW5mbyA9IFtdLCA/c3RyaW5nICR1bnRydXN0ZWRfY2VydGlmaWNhdGVzX2ZpbGVuYW1lLCA/c3RyaW5nICRjb250ZW50LCA/c3RyaW5nICRwazcsID9zdHJpbmcgJHNpZ2ZpbGUsIGludCAkZW5jb2RpbmcgPSBPUEVOU1NMX0VOQ09ESU5HX1NNSU1FKTogYm9vbCB7fQoKLyoqCiAqIEVuY3J5cHRzIHRoZSBtZXNzYWdlIGluIHRoZSBmaWxlIHdpdGggdGhlIGNlcnRpZmljYXRlcyBhbmQgb3V0cHV0cyB0aGUgcmVzdWx0IHRvIHRoZSBzdXBwbGllZCBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRpbnB1dF9maWxlbmFtZQogKiBAcGFyYW0gc3RyaW5nICRvdXRwdXRfZmlsZW5hbWUKICogQHBhcmFtIHJlc291cmNlfHN0cmluZ3xhcnJheSAkY2VydGlmaWNhdGUKICogQHBhcmFtIG51bGx8YXJyYXkgJGhlYWRlcnMKICogQHBhcmFtIGludCAkZmxhZ3MKICogQHBhcmFtIGludCAkZW5jb2RpbmcKICogQHBhcmFtIGludCAkY2lwaGVyX2FsZ28KICogQHJldHVybiBib29sCiAqIEBzaW5jZSA4LjAKICovCmZ1bmN0aW9uIG9wZW5zc2xfY21zX2VuY3J5cHQoc3RyaW5nICRpbnB1dF9maWxlbmFtZSwgc3RyaW5nICRvdXRwdXRfZmlsZW5hbWUsICRjZXJ0aWZpY2F0ZSwgP2FycmF5ICRoZWFkZXJzLCBpbnQgJGZsYWdzID0gMCwgaW50ICRlbmNvZGluZyA9IE9QRU5TU0xfRU5DT0RJTkdfU01JTUUsIGludCAkY2lwaGVyX2FsZ28gPSBPUEVOU1NMX0NJUEhFUl9BRVNfMTI4X0NCQyk6IGJvb2wge30KCi8qKgogKiBTaWducyB0aGUgTUlNRSBtZXNzYWdlIGluIHRoZSBmaWxlIHdpdGggYSBjZXJ0IGFuZCBrZXkgYW5kIG91dHB1dCB0aGUgcmVzdWx0IHRvIHRoZSBzdXBwbGllZCBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRpbnB1dF9maWxlbmFtZQogKiBAcGFyYW0gc3RyaW5nICRvdXRwdXRfZmlsZW5hbWUKICogQHBhcmFtIE9wZW5TU0xDZXJ0aWZpY2F0ZXxzdHJpbmcgJGNlcnRpZmljYXRlCiAqIEBwYXJhbSBPcGVuU1NMQXN5bW1ldHJpY0tleXxPcGVuU1NMQ2VydGlmaWNhdGV8YXJyYXl8c3RyaW5nICRwcml2YXRlX2tleQogKiBAcGFyYW0gYXJyYXl8bnVsbCAkaGVhZGVycwogKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdCiAqIEBwYXJhbSBpbnQgJGVuY29kaW5nIFtvcHRpb25hbF0KICogQHBhcmFtIHN0cmluZ3xudWxsICR1bnRydXN0ZWRfY2VydGlmaWNhdGVzX2ZpbGVuYW1lIFtvcHRpb25hbF0KICogQHJldHVybiBib29sCiAqIEBzaW5jZSA4LjAKICovCmZ1bmN0aW9uIG9wZW5zc2xfY21zX3NpZ24oc3RyaW5nICRpbnB1dF9maWxlbmFtZSwgc3RyaW5nICRvdXRwdXRfZmlsZW5hbWUsIE9wZW5TU0xDZXJ0aWZpY2F0ZXxzdHJpbmcgJGNlcnRpZmljYXRlLCAkcHJpdmF0ZV9rZXksID9hcnJheSAkaGVhZGVycywgaW50ICRmbGFncyA9IDAsIGludCAkZW5jb2RpbmcgPSBPUEVOU1NMX0VOQ09ESU5HX1NNSU1FLCA/c3RyaW5nICR1bnRydXN0ZWRfY2VydGlmaWNhdGVzX2ZpbGVuYW1lKTogYm9vbCB7fQoKLyoqCiAqIERlY3J5cHRzIHRoZSBTL01JTUUgbWVzc2FnZSBpbiB0aGUgZmlsZSBhbmQgb3V0cHV0cyB0aGUgcmVzdWx0cyB0byB0aGUgc3VwcGxpZWQgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkaW5wdXRfZmlsZW5hbWUKICogQHBhcmFtIHN0cmluZyAkb3V0cHV0X2ZpbGVuYW1lCiAqIEBwYXJhbSByZXNvdXJjZXxzdHJpbmcgJGNlcnRpZmljYXRlCiAqIEBwYXJhbSByZXNvdXJjZXxzdHJpbmd8YXJyYXkgJHByaXZhdGVfa2V5CiAqIEBwYXJhbSBpbnQgJGVuY29kaW5nCiAqIEByZXR1cm4gYm9vbAogKiBAc2luY2UgOC4wCiAqLwpmdW5jdGlvbiBvcGVuc3NsX2Ntc19kZWNyeXB0KHN0cmluZyAkaW5wdXRfZmlsZW5hbWUsIHN0cmluZyAkb3V0cHV0X2ZpbGVuYW1lLCAkY2VydGlmaWNhdGUsICRwcml2YXRlX2tleSA9IG51bGwsIGludCAkZW5jb2RpbmcgPSBPUEVOU1NMX0VOQ09ESU5HX1NNSU1FKTogYm9vbCB7fQoKLyoqCiAqIEV4cG9ydHMgdGhlIENNUyBmaWxlIHRvIGFuIGFycmF5IG9mIFBFTSBjZXJ0aWZpY2F0ZXMuCiAqIEBwYXJhbSBzdHJpbmcgJGlucHV0X2ZpbGVuYW1lCiAqIEBwYXJhbSBhcnJheSAmJGNlcnRpZmljYXRlcwogKiBAcmV0dXJuIGJvb2wKICogQHNpbmNlIDguMAogKi8KZnVuY3Rpb24gb3BlbnNzbF9jbXNfcmVhZChzdHJpbmcgJGlucHV0X2ZpbGVuYW1lLCAmJGNlcnRpZmljYXRlcyk6IGJvb2wge30KCmRlZmluZSgnT1BFTlNTTF9WRVJTSU9OX1RFWFQnLCAiT3BlblNTTCAxLjAuMGUgNiBTZXAgMjAxMSIpOwpkZWZpbmUoJ09QRU5TU0xfVkVSU0lPTl9OVU1CRVInLCAyNjg0MzU1NTEpOwpkZWZpbmUoJ1g1MDlfUFVSUE9TRV9TU0xfQ0xJRU5UJywgMSk7CmRlZmluZSgnWDUwOV9QVVJQT1NFX1NTTF9TRVJWRVInLCAyKTsKZGVmaW5lKCdYNTA5X1BVUlBPU0VfTlNfU1NMX1NFUlZFUicsIDMpOwpkZWZpbmUoJ1g1MDlfUFVSUE9TRV9TTUlNRV9TSUdOJywgNCk7CmRlZmluZSgnWDUwOV9QVVJQT1NFX1NNSU1FX0VOQ1JZUFQnLCA1KTsKZGVmaW5lKCdYNTA5X1BVUlBPU0VfQ1JMX1NJR04nLCA2KTsKZGVmaW5lKCdYNTA5X1BVUlBPU0VfQU5ZJywgNyk7Ci8qKgogKiBAc2luY2UgOC40CiAqLwpkZWZpbmUoJ1g1MDlfUFVSUE9TRV9PQ1NQX0hFTFBFUicsIDgpOwovKioKICogQHNpbmNlIDguNAogKi8KZGVmaW5lKCdYNTA5X1BVUlBPU0VfVElNRVNUQU1QX1NJR04nLCA5KTsKCi8qKgogKiBVc2VkIGFzIGRlZmF1bHQgYWxnb3JpdGhtIGJ5IDxiPm9wZW5zc2xfc2lnbjwvYj4gYW5kCiAqIDxiPm9wZW5zc2xfdmVyaWZ5PC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vcGVuc3NsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT1BFTlNTTF9BTEdPX1NIQTEnLCAxKTsKZGVmaW5lKCdPUEVOU1NMX0FMR09fTUQ1JywgMik7CmRlZmluZSgnT1BFTlNTTF9BTEdPX01ENCcsIDMpOwpkZWZpbmUoJ09QRU5TU0xfQUxHT19NRDInLCA0KTsKZGVmaW5lKCdPUEVOU1NMX0FMR09fRFNTMScsIDUpOwpkZWZpbmUoJ09QRU5TU0xfQUxHT19TSEEyMjQnLCA2KTsKZGVmaW5lKCdPUEVOU1NMX0FMR09fU0hBMjU2JywgNyk7CmRlZmluZSgnT1BFTlNTTF9BTEdPX1NIQTM4NCcsIDgpOwpkZWZpbmUoJ09QRU5TU0xfQUxHT19TSEE1MTInLCA5KTsKZGVmaW5lKCdPUEVOU1NMX0FMR09fUk1EMTYwJywgMTApOwovKioKICogV2hlbiBzaWduaW5nIGEgbWVzc2FnZSwgdXNlIGNsZWFydGV4dCBzaWduaW5nIHdpdGggdGhlIE1JTUUKICogdHlwZSAibXVsdGlwYXJ0L3NpZ25lZCIuIFRoaXMgaXMgdGhlIGRlZmF1bHQKICogaWYgeW91IGRvIG5vdCBzcGVjaWZ5IGFueSA8aT5mbGFnczwvaT4gdG8KICogPGI+b3BlbnNzbF9wa2NzN19zaWduPC9iPi4KICogSWYgeW91IHR1cm4gdGhpcyBvcHRpb24gb2ZmLCB0aGUgbWVzc2FnZSB3aWxsIGJlIHNpZ25lZCB1c2luZwogKiBvcGFxdWUgc2lnbmluZywgd2hpY2ggaXMgbW9yZSByZXNpc3RhbnQgdG8gdHJhbnNsYXRpb24gYnkgbWFpbCByZWxheXMKICogYnV0IGNhbm5vdCBiZSByZWFkIGJ5IG1haWwgYWdlbnRzIHRoYXQgZG8gbm90IHN1cHBvcnQgUy9NSU1FLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29wZW5zc2wuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQS0NTN19ERVRBQ0hFRCcsIDY0KTsKCi8qKgogKiBBZGRzIHRleHQvcGxhaW4gY29udGVudCB0eXBlIGhlYWRlcnMgdG8gZW5jcnlwdGVkL3NpZ25lZAogKiBtZXNzYWdlLiBJZiBkZWNyeXB0aW5nIG9yIHZlcmlmeWluZywgaXQgc3RyaXBzIHRob3NlIGhlYWRlcnMgZnJvbQogKiB0aGUgb3V0cHV0IC0gaWYgdGhlIGRlY3J5cHRlZCBvciB2ZXJpZmllZCBtZXNzYWdlIGlzIG5vdCBvZiBNSU1FIHR5cGUKICogdGV4dC9wbGFpbiB0aGVuIGFuIGVycm9yIHdpbGwgb2NjdXIuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb3BlbnNzbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BLQ1M3X1RFWFQnLCAxKTsKCi8qKgogKiBXaGVuIHZlcmlmeWluZyBhIG1lc3NhZ2UsIGNlcnRpZmljYXRlcyAoaWYKICogYW55KSBpbmNsdWRlZCBpbiB0aGUgbWVzc2FnZSBhcmUgbm9ybWFsbHkgc2VhcmNoZWQgZm9yIHRoZQogKiBzaWduaW5nIGNlcnRpZmljYXRlLiBXaXRoIHRoaXMgb3B0aW9uIG9ubHkgdGhlCiAqIGNlcnRpZmljYXRlcyBzcGVjaWZpZWQgaW4gdGhlIDxpPmV4dHJhY2VydHM8L2k+CiAqIHBhcmFtZXRlciBvZiA8Yj5vcGVuc3NsX3BrY3M3X3ZlcmlmeTwvYj4gYXJlCiAqIHVzZWQuIFRoZSBzdXBwbGllZCBjZXJ0aWZpY2F0ZXMgY2FuIHN0aWxsIGJlIHVzZWQgYXMKICogdW50cnVzdGVkIENBcyBob3dldmVyLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29wZW5zc2wuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQS0NTN19OT0lOVEVSTicsIDE2KTsKCi8qKgogKiBEbyBub3QgdmVyaWZ5IHRoZSBzaWduZXJzIGNlcnRpZmljYXRlIG9mIGEgc2lnbmVkCiAqIG1lc3NhZ2UuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb3BlbnNzbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BLQ1M3X05PVkVSSUZZJywgMzIpOwoKLyoqCiAqIERvIG5vdCBjaGFpbiB2ZXJpZmljYXRpb24gb2Ygc2lnbmVycyBjZXJ0aWZpY2F0ZXM6IHRoYXQgaXMKICogZG9uJ3QgdXNlIHRoZSBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHNpZ25lZCBtZXNzYWdlIGFzIHVudHJ1c3RlZCBDQXMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb3BlbnNzbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BLQ1M3X05PQ0hBSU4nLCA4KTsKCi8qKgogKiBXaGVuIHNpZ25pbmcgYSBtZXNzYWdlIHRoZSBzaWduZXIncyBjZXJ0aWZpY2F0ZSBpcyBub3JtYWxseQogKiBpbmNsdWRlZCAtIHdpdGggdGhpcyBvcHRpb24gaXQgaXMgZXhjbHVkZWQuIFRoaXMgd2lsbCByZWR1Y2UgdGhlCiAqIHNpemUgb2YgdGhlIHNpZ25lZCBtZXNzYWdlIGJ1dCB0aGUgdmVyaWZpZXIgbXVzdCBoYXZlIGEgY29weSBvZiB0aGUKICogc2lnbmVycyBjZXJ0aWZpY2F0ZSBhdmFpbGFibGUgbG9jYWxseSAocGFzc2VkIHVzaW5nIHRoZQogKiA8aT5leHRyYWNlcnRzPC9pPiB0bwogKiA8Yj5vcGVuc3NsX3BrY3M3X3ZlcmlmeTwvYj4gZm9yIGV4YW1wbGUpLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29wZW5zc2wuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQS0NTN19OT0NFUlRTJywgMik7CgovKioKICogTm9ybWFsbHkgd2hlbiBhIG1lc3NhZ2UgaXMgc2lnbmVkLCBhIHNldCBvZiBhdHRyaWJ1dGVzIGFyZQogKiBpbmNsdWRlZCB3aGljaCBpbmNsdWRlIHRoZSBzaWduaW5nIHRpbWUgYW5kIHRoZSBzdXBwb3J0ZWQgc3ltbWV0cmljCiAqIGFsZ29yaXRobXMuIFdpdGggdGhpcyBvcHRpb24gdGhleSBhcmUgbm90IGluY2x1ZGVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29wZW5zc2wuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQS0NTN19OT0FUVFInLCAyNTYpOwoKLyoqCiAqIE5vcm1hbGx5IHRoZSBpbnB1dCBtZXNzYWdlIGlzIGNvbnZlcnRlZCB0byAiY2Fub25pY2FsIiBmb3JtYXQKICogd2hpY2ggaXMgZWZmZWN0aXZlbHkgdXNpbmcgQ1IgYW5kIExGCiAqIGFzIGVuZCBvZiBsaW5lOiBhcyByZXF1aXJlZCBieSB0aGUgUy9NSU1FIHNwZWNpZmljYXRpb24uIFdoZW4gdGhpcwogKiBvcHRpb24gaXMgcHJlc2VudCwgbm8gdHJhbnNsYXRpb24gb2NjdXJzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuCiAqIGhhbmRsaW5nIGJpbmFyeSBkYXRhIHdoaWNoIG1heSBub3QgYmUgaW4gTUlNRSBmb3JtYXQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb3BlbnNzbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BLQ1M3X0JJTkFSWScsIDEyOCk7CgovKioKICogQHNpbmNlIDguMwogKi8KZGVmaW5lKCdQS0NTN19OT09MRE1JTUVUWVBFJywgMTAyNCk7CgovKioKICogRG9uJ3QgdHJ5IGFuZCB2ZXJpZnkgdGhlIHNpZ25hdHVyZXMgb24gYSBtZXNzYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb3BlbnNzbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BLQ1M3X05PU0lHUycsIDQpOwpkZWZpbmUoJ09QRU5TU0xfUEtDUzFfUEFERElORycsIDEpOwpkZWZpbmUoJ09QRU5TU0xfU1NMVjIzX1BBRERJTkcnLCAyKTsKZGVmaW5lKCdPUEVOU1NMX05PX1BBRERJTkcnLCAzKTsKZGVmaW5lKCdPUEVOU1NMX1BLQ1MxX09BRVBfUEFERElORycsIDQpOwpkZWZpbmUoJ09QRU5TU0xfQ0lQSEVSX1JDMl80MCcsIDApOwpkZWZpbmUoJ09QRU5TU0xfQ0lQSEVSX1JDMl8xMjgnLCAxKTsKZGVmaW5lKCdPUEVOU1NMX0NJUEhFUl9SQzJfNjQnLCAyKTsKZGVmaW5lKCdPUEVOU1NMX0NJUEhFUl9ERVMnLCAzKTsKZGVmaW5lKCdPUEVOU1NMX0NJUEhFUl8zREVTJywgNCk7CmRlZmluZSgnT1BFTlNTTF9LRVlUWVBFX1JTQScsIDApOwpkZWZpbmUoJ09QRU5TU0xfS0VZVFlQRV9EU0EnLCAxKTsKZGVmaW5lKCdPUEVOU1NMX0tFWVRZUEVfREgnLCAyKTsKZGVmaW5lKCdPUEVOU1NMX0tFWVRZUEVfRUMnLCAzKTsKLyoqCiAqIEBzaW5jZSA4LjQKICovCmRlZmluZSgnT1BFTlNTTF9LRVlUWVBFX1gyNTUxOScsIDQpOwovKioKICogQHNpbmNlIDguNAogKi8KZGVmaW5lKCdPUEVOU1NMX0tFWVRZUEVfRUQyNTUxOScsIDUpOwovKioKICogQHNpbmNlIDguNAogKi8KZGVmaW5lKCdPUEVOU1NMX0tFWVRZUEVfWDQ0OCcsIDYpOwovKioKICogQHNpbmNlIDguNAogKi8KZGVmaW5lKCdPUEVOU1NMX0tFWVRZUEVfRUQ0NDgnLCA3KTsKCi8qKgogKiBXaGV0aGVyIFNOSSBzdXBwb3J0IGlzIGF2YWlsYWJsZSBvciBub3QuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb3BlbnNzbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09QRU5TU0xfVExTRVhUX1NFUlZFUl9OQU1FJywgMSk7CgovLyBFbmQgb2Ygb3BlbnNzbCB2LgoKLyoqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb3BlbnNzbC5jaXBoZXJzLnBocCAqLwpkZWZpbmUoJ09QRU5TU0xfQ0lQSEVSX0FFU18xMjhfQ0JDJywgNSk7Ci8qKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29wZW5zc2wuY2lwaGVycy5waHAgKi8KZGVmaW5lKCdPUEVOU1NMX0NJUEhFUl9BRVNfMTkyX0NCQycsIDYpOwovKiogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vcGVuc3NsLmNpcGhlcnMucGhwICovCmRlZmluZSgnT1BFTlNTTF9DSVBIRVJfQUVTXzI1Nl9DQkMnLCA3KTsKZGVmaW5lKCdPUEVOU1NMX1JBV19EQVRBJywgMSk7CmRlZmluZSgnT1BFTlNTTF9aRVJPX1BBRERJTkcnLCAyKTsKZGVmaW5lKCdPUEVOU1NMX0RPTlRfWkVST19QQURfS0VZJywgNCk7CgovKioKICogQHNpbmNlIDguMAogKi8KZGVmaW5lKCdPUEVOU1NMX0NNU19ERVRBQ0hFRCcsIDY0KTsKLyoqCiAqIEBzaW5jZSA4LjAKICovCmRlZmluZSgnT1BFTlNTTF9DTVNfVEVYVCcsIDEpOwovKioKICogQHNpbmNlIDguMAogKi8KZGVmaW5lKCdPUEVOU1NMX0NNU19OT0lOVEVSTicsIDE2KTsKLyoqCiAqIEBzaW5jZSA4LjAKICovCmRlZmluZSgnT1BFTlNTTF9DTVNfTk9WRVJJRlknLCAzMik7Ci8qKgogKiBAc2luY2UgOC4wCiAqLwpkZWZpbmUoJ09QRU5TU0xfQ01TX05PQ0VSVFMnLCAyKTsKLyoqCiAqIEBzaW5jZSA4LjAKICovCmRlZmluZSgnT1BFTlNTTF9DTVNfTk9BVFRSJywgMjU2KTsKLyoqCiAqIEBzaW5jZSA4LjAKICovCmRlZmluZSgnT1BFTlNTTF9DTVNfQklOQVJZJywgMTI4KTsKLyoqCiAqIEBzaW5jZSA4LjAKICovCmRlZmluZSgnT1BFTlNTTF9DTVNfTk9TSUdTJywgMTIpOwovKioKICogQHNpbmNlIDguMAogKi8KZGVmaW5lKCdPUEVOU1NMX0VOQ09ESU5HX0RFUicsIDApOwovKioKICogQHNpbmNlIDguMAogKi8KZGVmaW5lKCdPUEVOU1NMX0VOQ09ESU5HX1NNSU1FJywgMSk7Ci8qKgogKiBAc2luY2UgOC4wCiAqLwpkZWZpbmUoJ09QRU5TU0xfRU5DT0RJTkdfUEVNJywgMik7CgpkZWZpbmUoJ09QRU5TU0xfREVGQVVMVF9TVFJFQU1fQ0lQSEVSUycsICJFQ0RIRS1SU0EtQUVTMTI4LUdDTS1TSEEyNTY6RUNESEUtRUNEU0EtQUVTMTI4LUdDTS1TSEEyNTY6IiAuCiJFQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQ6RUNESEUtRUNEU0EtQUVTMjU2LUdDTS1TSEEzODQ6REhFLVJTQS1BRVMxMjgtR0NNLVNIQTI1NjoiIC4KIkRIRS1EU1MtQUVTMTI4LUdDTS1TSEEyNTY6a0VESCtBRVNHQ006RUNESEUtUlNBLUFFUzEyOC1TSEEyNTY6RUNESEUtRUNEU0EtQUVTMTI4LVNIQTI1NjoiIC4KIkVDREhFLVJTQS1BRVMxMjgtU0hBOkVDREhFLUVDRFNBLUFFUzEyOC1TSEE6RUNESEUtUlNBLUFFUzI1Ni1TSEEzODQ6RUNESEUtRUNEU0EtQUVTMjU2LVNIQTM4NDoiIC4KIkVDREhFLVJTQS1BRVMyNTYtU0hBOkVDREhFLUVDRFNBLUFFUzI1Ni1TSEE6REhFLVJTQS1BRVMxMjgtU0hBMjU2OkRIRS1SU0EtQUVTMTI4LVNIQToiIC4KIkRIRS1EU1MtQUVTMTI4LVNIQTI1NjpESEUtUlNBLUFFUzI1Ni1TSEEyNTY6REhFLURTUy1BRVMyNTYtU0hBOkRIRS1SU0EtQUVTMjU2LVNIQTpBRVMxMjgtR0NNLVNIQTI1NjoiIC4KIkFFUzI1Ni1HQ00tU0hBMzg0OkFFUzEyODpBRVMyNTY6SElHSDohU1NMdjI6IWFOVUxMOiFlTlVMTDohRVhQT1JUOiFERVM6IU1ENTohUkM0OiFBREgiKTsKCi8qKgogKiBAc2luY2UgOC4zCiAqLwpkZWZpbmUoJ09QRU5TU0xfQ01TX09MRE1JTUVUWVBFJywgMTAyNCk7CgovKioKICogQHNpbmNlIDguMAogKi8KZmluYWwgY2xhc3MgT3BlblNTTENlcnRpZmljYXRlCnsKICAgIC8qKgogICAgICogQ2Fubm90IGRpcmVjdGx5IGNvbnN0cnVjdCBPcGVuU1NMQ2VydGlmaWNhdGUsIHVzZSBvcGVuc3NsX3g1MDlfcmVhZCgpIGluc3RlYWQKICAgICAqIEBzZWUgb3BlbnNzbF94NTA5X3JlYWQoKQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KfQoKLyoqCiAqIEBzaW5jZSA4LjAKICovCmZpbmFsIGNsYXNzIE9wZW5TU0xDZXJ0aWZpY2F0ZVNpZ25pbmdSZXF1ZXN0CnsKICAgIC8qKgogICAgICogQ2Fubm90IGRpcmVjdGx5IGNvbnN0cnVjdCBPcGVuU1NMQ2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdCwgdXNlIG9wZW5zc2xfY3NyX25ldygpIGluc3RlYWQKICAgICAqIEBzZWUgb3BlbnNzbF9jc3JfbmV3KCkKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9Cn0KCi8qKgogKiBAc2luY2UgOC4wCiAqLwpmaW5hbCBjbGFzcyBPcGVuU1NMQXN5bW1ldHJpY0tleQp7CiAgICAvKioKICAgICAqIENhbm5vdCBkaXJlY3RseSBjb25zdHJ1Y3QgT3BlblNTTEFzeW1tZXRyaWNLZXksIHVzZSBvcGVuc3NsX3BrZXlfbmV3KCkgaW5zdGVhZAogICAgICogQHNlZSBvcGVuc3NsX3BrZXlfbmV3KCkKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9Cn0KPD9waHAKCi8qKgogKiBTdHVicyBmb3IgdGhlIEx1YVNhbmRib3ggUEVDTCBleHRlbnNpb24uCiAqCiAqIDxwPjxpPkx1YVNhbmRib3g8L2k+IGlzIGFuIGV4dGVuc2lvbiBmb3IgUEhQIDUsIFBIUCA3LCBhbmQgSEhWTSB0byBhbGxvdyBzYWZlbHkgcnVubmluZwogKiB1bnRydXN0ZWQgTHVhIDUuMSBjb2RlIGZyb20gd2l0aGluIFBIUC48L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Jvb2subHVhc2FuZGJveC5waHAKICogQHBhY2thZ2UgbHVhc2FuZGJveAogKiBAdmVyc2lvbiAzLjAuMwogKi8KCi8qKgogKiBUaGUgPGk+THVhU2FuZGJveDwvaT4gY2xhc3MgY3JlYXRlcyBhIEx1YSBlbnZpcm9ubWVudCBhbmQgYWxsb3dzIGZvciBleGVjdXRpb24gb2YgTHVhIGNvZGUuCiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmx1YXNhbmRib3gucGhwCiAqIEBzaW5jZSBsdWFzYW5kYm94ID49IDEuMC4wCiAqLwpjbGFzcyBMdWFTYW5kYm94CnsKICAgIC8qKgogICAgICogVXNlZCB3aXRoIDxjb2RlPkx1YVNhbmRib3g6OmdldFByb2ZpbGVyRnVuY3Rpb25SZXBvcnQoKTwvY29kZT4KICAgICAqIHRvIHJldHVybiB0aW1pbmdzIGluIHNhbXBsZXMuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTQU1QTEVTID0gMDsKCiAgICAvKioKICAgICAqIFVzZWQgd2l0aCA8Y29kZT5MdWFTYW5kYm94OjpnZXRQcm9maWxlckZ1bmN0aW9uUmVwb3J0KCk8L2NvZGU+CiAgICAgKiB0byByZXR1cm4gdGltaW5ncyBpbiBzZWNvbmRzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0VDT05EUyA9IDE7CgogICAgLyoqCiAgICAgKiBVc2VkIHdpdGggPGNvZGU+THVhU2FuZGJveDo6Z2V0UHJvZmlsZXJGdW5jdGlvblJlcG9ydCgpPC9jb2RlPgogICAgICogdG8gcmV0dXJuIHRpbWluZ3MgaW4gcGVyY2VudGFnZXMgb2YgdGhlIHRvdGFsLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUEVSQ0VOVCA9IDI7CgogICAgLyoqCiAgICAgKiBDYWxsIGEgZnVuY3Rpb24gaW4gYSBMdWEgZ2xvYmFsIHZhcmlhYmxlLgogICAgICoKICAgICAqIDxwPklmIHRoZSBuYW1lIGNvbnRhaW5zICIuIiBjaGFyYWN0ZXJzLCB0aGUgZnVuY3Rpb24gaXMgbG9jYXRlZCB2aWEgcmVjdXJzaXZlIHRhYmxlIGFjY2Vzc2VzLAogICAgICogYXMgaWYgdGhlIG5hbWUgd2VyZSBhIEx1YSBleHByZXNzaW9uLjwvcD4KICAgICAqCiAgICAgKiA8cD5JZiB0aGUgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QsIG9yIGlzIG5vdCBhIGZ1bmN0aW9uLAogICAgICogZmFsc2Ugd2lsbCBiZSByZXR1cm5lZCBhbmQgYSB3YXJuaW5nIGlzc3VlZC48L3A+CiAgICAgKgogICAgICogPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FsbGluZyBMdWEgZnVuY3Rpb25zIGFuZCB0aGUgcmV0dXJuIHZhbHVlcywKICAgICAqIHNlZSA8Y29kZT5MdWFTYW5kYm94RnVuY3Rpb246OmNhbGwoKTwvY29kZT4uPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2x1YXNhbmRib3guY2FsbEZ1bmN0aW9uLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD5MdWEgdmFyaWFibGUgbmFtZS48L3A+CiAgICAgKiBAcGFyYW0gbWl4ZWRbXSAkYXJndW1lbnRzIDxwPkFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24uPC9wPgogICAgICogQHJldHVybiBhcnJheXxib29sIDxwPlJldHVybnMgYW4gYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBMdWEgZnVuY3Rpb24sCiAgICAgKiB3aGljaCBtYXkgYmUgZW1wdHksIG9yIGZhbHNlIGluIGNhc2Ugb2YgZmFpbHVyZS48L3A+CiAgICAgKiBAc2VlIEx1YVNhbmRib3hGdW5jdGlvbjo6Y2FsbCgpCiAgICAgKiBAc2luY2UgbHVhc2FuZGJveCA+PSAxLjAuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FsbEZ1bmN0aW9uKCRuYW1lLCBhcnJheSAkYXJndW1lbnRzKSB7fQoKICAgIC8qKgogICAgICogRGlzYWJsZSB0aGUgcHJvZmlsZXIuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbHVhc2FuZGJveC5kaXNhYmxlUHJvZmlsZXIucGhwCiAgICAgKiBAc2luY2UgbHVhc2FuZGJveCA+PSAxLjEuMAogICAgICogQHNlZSBMdWFTYW5kYm94OjplbmFibGVQcm9maWxlcigpCiAgICAgKiBAc2VlIEx1YVNhbmRib3g6OmdldFByb2ZpbGVyRnVuY3Rpb25SZXBvcnQoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzYWJsZVByb2ZpbGVyKCkge30KCiAgICAvKioKICAgICAqIEVuYWJsZSB0aGUgcHJvZmlsZXIuCiAgICAgKgogICAgICogPHA+VGhlIHByb2ZpbGVyIHBlcmlvZGljYWxseSBzYW1wbGVzIHRoZSBMdWEgZW52aXJvbm1lbnQKICAgICAqIHRvIHJlY29yZCB0aGUgcnVubmluZyBmdW5jdGlvbi4gVGVzdGluZyBpbmRpY2F0ZXMgdGhhdAogICAgICogYXQgbGVhc3Qgb24gTGludXgsIHNldHRpbmcgYSBwZXJpb2QgbGVzcyB0aGFuIDFtcyB3aWxsCiAgICAgKiBsZWFkIHRvIGEgaGlnaCBvdmVycnVuIGNvdW50IGJ1dCBubyBwZXJmb3JtYW5jZSBwcm9ibGVtcy48L3A+CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbHVhc2FuZGJveC5lbmFibGVwcm9maWxlci5waHAKICAgICAqIEBwYXJhbSBmbG9hdCAkcGVyaW9kIFtvcHRpb25hbF0gPHA+U2FtcGxpbmcgcGVyaW9kIGluIHNlY29uZHMuPC9wPgogICAgICogQHJldHVybiBib29sIDxwPlJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgcHJvZmlsZXIgaXMgZW5hYmxlZC48L3A+CiAgICAgKiBAc2luY2UgbHVhc2FuZGJveCA+PSAxLjEuMAogICAgICogQHNlZSBMdWFTYW5kYm94OjpkaXNhYmxlUHJvZmlsZXIoKQogICAgICogQHNlZSBMdWFTYW5kYm94OjpnZXRQcm9maWxlckZ1bmN0aW9uUmVwb3J0KCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuYWJsZVByb2ZpbGVyKCRwZXJpb2QgPSAwLjAyKSB7fQoKICAgIC8qKgogICAgICogRmV0Y2ggdGhlIGN1cnJlbnQgQ1BVIHRpbWUgdXNhZ2Ugb2YgdGhlIEx1YSBlbnZpcm9ubWVudC4KICAgICAqCiAgICAgKiA8cD5UaGlzIGluY2x1ZGVzIHRpbWUgc3BlbnQgaW4gUEhQIGNhbGxiYWNrcy48L3A+CiAgICAgKgogICAgICogPHA+Tm90ZTogT24gV2luZG93cywgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyB6ZXJvLgogICAgICogT24gb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCA8aT5DTE9DS19USFJFQURfQ1BVVElNRV9JRDwvaT4sCiAgICAgKiBzdWNoIGFzIEZyZWVCU0QgYW5kIE1hYyBPUyBYLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZQogICAgICogZWxhcHNlZCB3YWxsLWNsb2NrIHRpbWUsIG5vdCBDUFUgdGltZS48L3A+CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbHVhc2FuZGJveC5nZXRjcHV1c2FnZS5waHAKICAgICAqIEByZXR1cm4gZmxvYXQgPHA+UmV0dXJucyB0aGUgY3VycmVudCBDUFUgdGltZSB1c2FnZSBpbiBzZWNvbmRzLjwvcD4KICAgICAqIEBzaW5jZSBsdWFzYW5kYm94ID49IDEuMC4wCiAgICAgKiBAc2VlIEx1YVNhbmRib3g6OmdldE1lbW9yeVVzYWdlKCkKICAgICAqIEBzZWUgTHVhU2FuZGJveDo6Z2V0UGVha01lbW9yeVVzYWdlKCkKICAgICAqIEBzZWUgTHVhU2FuZGJveDo6c2V0Q1BVTGltaXQoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q1BVVXNhZ2UoKSB7fQoKICAgIC8qKgogICAgICogRmV0Y2ggdGhlIGN1cnJlbnQgbWVtb3J5IHVzYWdlIG9mIHRoZSBMdWEgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbHVhc2FuZGJveC5nZXRtZW1vcnl1c2FnZS5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAc2luY2UgbHVhc2FuZGJveCA+PSAxLjAuMAogICAgICogQHNlZSBMdWFTYW5kYm94OjpnZXRNZW1vcnlVc2FnZSgpCiAgICAgKiBAc2VlIEx1YVNhbmRib3g6OmdldENQVVVzYWdlKCkKICAgICAqIEBzZWUgTHVhU2FuZGJveDo6c2V0TWVtb3J5TGltaXQoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWVtb3J5VXNhZ2UoKSB7fQoKICAgIC8qKgogICAgICogRmV0Y2ggdGhlIHBlYWsgbWVtb3J5IHVzYWdlIG9mIHRoZSBMdWEgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbHVhc2FuZGJveC5nZXRwZWFrbWVtb3J5dXNhZ2UucGhwCiAgICAgKiBAcmV0dXJuIGludCA8cD5SZXR1cm5zIHRoZSBjdXJyZW50IG1lbW9yeSB1c2FnZSBpbiBieXRlcy48L3A+CiAgICAgKiBAc2luY2UgbHVhc2FuZGJveCA+PSAxLjAuMAogICAgICogQHNlZSBMdWFTYW5kYm94OjpnZXRNZW1vcnlVc2FnZSgpCiAgICAgKiBAc2VlIEx1YVNhbmRib3g6OmdldENQVVVzYWdlKCkKICAgICAqIEBzZWUgTHVhU2FuZGJveDo6c2V0TWVtb3J5TGltaXQoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGVha01lbW9yeVVzYWdlKCkge30KCiAgICAvKioKICAgICAqIEZldGNoIHByb2ZpbGVyIGRhdGEuCiAgICAgKgogICAgICogPHA+Rm9yIGEgcHJvZmlsaW5nIGluc3RhbmNlIHByZXZpb3VzbHkgc3RhcnRlZCBieSA8Y29kZT5MdWFTYW5kYm94OjplbmFibGVQcm9maWxlcigpPC9jb2RlPiwKICAgICAqIGdldCBhIHJlcG9ydCBvZiB0aGUgY29zdCBvZiBlYWNoIGZ1bmN0aW9uLjwvcD4KICAgICAqCiAgICAgKiA8cD5UaGUgbWVhc3VyZW1lbnQgdW5pdCB1c2VkIGZvciB0aGUgY29zdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSAkdW5pdHMgcGFyYW1ldGVyOjwvcD4KICAgICAqIDxsaT48Y29kZT5MdWFTYW5kYm94OjpTQU1QTEVTPC9jb2RlPiBNZWFzdXJlIGluIG51bWJlciBvZiBzYW1wbGVzLjwvbGk+CiAgICAgKiA8bGk+PGNvZGU+THVhU2FuZGJveDo6U0VDT05EUzwvY29kZT4gTWVhc3VyZSBpbiBzZWNvbmRzIG9mIENQVSB0aW1lLjwvbGk+CiAgICAgKiA8bGk+PGNvZGU+THVhU2FuZGJveDo6UEVSQ0VOVDwvY29kZT4gTWVhc3VyZSBwZXJjZW50YWdlIG9mIENQVSB0aW1lLjwvbGk+CiAgICAgKgogICAgICogPHA+Tm90ZTogT24gV2luZG93cywgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBhbiBlbXB0eSBhcnJheS4KICAgICAqIE9uIG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgZG8gbm90IHN1cHBvcnQgPGk+Q0xPQ0tfVEhSRUFEX0NQVVRJTUVfSUQ8L2k+LAogICAgICogc3VjaCBhcyBGcmVlQlNEIGFuZCBNYWMgT1MgWCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJlcG9ydCB0aGUKICAgICAqIGVsYXBzZWQgd2FsbC1jbG9jayB0aW1lLCBub3QgQ1BVIHRpbWUuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2x1YXNhbmRib3guZ2V0cHJvZmlsZXJmdW5jdGlvbnJlcG9ydC5waHAKICAgICAqIEBwYXJhbSBpbnQgJHVuaXRzIE1lYXN1cmVtZW50IHVuaXQgY29uc3RhbnQuCiAgICAgKiBAcmV0dXJuIGFycmF5IDxwPlJldHVybnMgcHJvZmlsZXIgbWVhc3VyZW1lbnRzLCBzb3J0ZWQgaW4gZGVzY2VuZGluZyBvcmRlciwgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkuCiAgICAgKiBLZXlzIGFyZSB0aGUgTHVhIGZ1bmN0aW9uIG5hbWVzICh3aXRoIHNvdXJjZSBmaWxlIGFuZCBsaW5lIGRlZmluZWQgaW4gYW5nbGUgYnJhY2tldHMpLCB2YWx1ZXMgYXJlIHRoZQogICAgICogbWVhc3VyZW1lbnRzIGFzIGludGVnZXIgb3IgZmxvYXQuPC9wPgogICAgICogQHNpbmNlIGx1YXNhbmRib3ggPj0gMS4xLjAKICAgICAqIEBzZWUgTHVhU2FuZGJveDo6U0FNUExFUwogICAgICogQHNlZSBMdWFTYW5kYm94OjpTRUNPTkRTCiAgICAgKiBAc2VlIEx1YVNhbmRib3g6OlBFUkNFTlQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb2ZpbGVyRnVuY3Rpb25SZXBvcnQoJHVuaXRzID0gTHVhU2FuZGJveDo6U0VDT05EUykge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgdmVyc2lvbnMgb2YgTHVhU2FuZGJveCBhbmQgTHVhLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2x1YXNhbmRib3guZ2V0dmVyc2lvbmluZm8ucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5IDxwPlJldHVybnMgYW4gYXJyYXkgd2l0aCB0d28ga2V5czo8L3A+CiAgICAgKiA8bGk+THVhU2FuZGJveCAoc3RyaW5nKSwgdGhlIHZlcnNpb24gb2YgdGhlIEx1YVNhbmRib3ggZXh0ZW5zaW9uLjwvbGk+CiAgICAgKiA8bGk+THVhIChzdHJpbmcpLCB0aGUgbGlicmFyeSBuYW1lIGFuZCB2ZXJzaW9uIGFzIGRlZmluZWQgYnkgdGhlIExVQV9SRUxFQVNFIG1hY3JvLCBmb3IgZXhhbXBsZSwgIkx1YSA1LjEuNSIuPC9saT4KICAgICAqIEBzaW5jZSBsdWFzYW5kYm94ID49IDEuNi4wCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VmVyc2lvbkluZm8oKSB7fQoKICAgIC8qKgogICAgICogTG9hZCBhIHByZWNvbXBpbGVkIGJpbmFyeSBjaHVuayBpbnRvIHRoZSBMdWEgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogPHA+TG9hZHMgZGF0YSBnZW5lcmF0ZWQgYnkgPGNvZGU+THVhU2FuZGJveEZ1bmN0aW9uOjpkdW1wKCk8L2NvZGU+LjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9sdWFzYW5kYm94LmxvYWRiaW5hcnkucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb2RlIDxwPkRhdGEgZnJvbSA8Y29kZT5MdWFTYW5kYm94RnVuY3Rpb246OmR1bXAoKTwvY29kZT4uPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkY2h1bmtOYW1lIFtvcHRpb25hbF0gPHA+TmFtZSBmb3IgdGhlIGxvYWRlZCBmdW5jdGlvbi48L3A+CiAgICAgKiBAcmV0dXJuIEx1YVNhbmRib3hGdW5jdGlvbgogICAgICogQHNpbmNlIGx1YXNhbmRib3ggPj0gMS4wLjAKICAgICAqIEBzZWUgTHVhU2FuZGJveDo6bG9hZFN0cmluZygpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkQmluYXJ5KCRjb2RlLCAkY2h1bmtOYW1lID0gJycpIHt9CgogICAgLyoqCiAgICAgKiBMb2FkIEx1YSBjb2RlIGludG8gdGhlIEx1YSBlbnZpcm9ubWVudC4KICAgICAqCiAgICAgKiA8cD5UaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHN0YW5kYXJkIEx1YSdzIDxjb2RlPmxvYWRzdHJpbmcoKTwvY29kZT4gZnVuY3Rpb24uPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2x1YXNhbmRib3gubG9hZFN0cmluZy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvZGUgPHA+THVhIGNvZGUuPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkY2h1bmtOYW1lIFtvcHRpb25hbF0gPHA+TmFtZSBmb3IgdGhlIGxvYWRlZCBjaHVuaywgZm9yIHVzZSBpbiBlcnJvciB0cmFjZXMuPC9wPgogICAgICogQHJldHVybiBMdWFTYW5kYm94RnVuY3Rpb24gPHA+UmV0dXJucyBhIDxjb2RlPkx1YVNhbmRib3hGdW5jdGlvbjwvY29kZT4gd2hpY2gsIHdoZW4gZXhlY3V0ZWQsCiAgICAgKiB3aWxsIGV4ZWN1dGUgdGhlIHBhc3NlZCA8Y29kZT4kY29kZTwvY29kZT4uPC9wPgogICAgICogQHNpbmNlIGx1YXNhbmRib3ggPj0gMS4wLjAKICAgICAqIEBzZWUgTHVhU2FuZGJveDo6cmVnaXN0ZXJMaWJyYXJ5KCkKICAgICAqIEBzZWUgTHVhU2FuZGJveDo6d3JhcFBocEZ1bmN0aW9uKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRTdHJpbmcoJGNvZGUsICRjaHVua05hbWUgPSAnJykge30KCiAgICAvKioKICAgICAqIFBhdXNlIHRoZSBDUFUgdXNhZ2UgdGltZXIuCiAgICAgKgogICAgICogPHA+VGhpcyBvbmx5IGhhcyBlZmZlY3Qgd2hlbiBjYWxsZWQgZnJvbSB3aXRoaW4gYSBjYWxsYmFjayBmcm9tIEx1YS4KICAgICAqIFdoZW4gZXhlY3V0aW9uIHJldHVybnMgdG8gTHVhLCB0aGUgdGltZXIgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHVucGF1c2VkLgogICAgICogSWYgYSBuZXcgY2FsbCBpbnRvIEx1YSBpcyBtYWRlLCB0aGUgdGltZXIgd2lsbCBiZSB1bnBhdXNlZAogICAgICogZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGF0IGNhbGwuPC9wPgogICAgICoKICAgICAqIDxwPklmIGEgUEhQIGNhbGxiYWNrIGNhbGxzIGludG8gTHVhIGFnYWluIHdpdGggdGltZXIgbm90IHBhdXNlZCwKICAgICAqIGFuZCB0aGVuIHRoYXQgTHVhIGZ1bmN0aW9uIGNhbGxzIGludG8gUEhQIGFnYWluLAogICAgICogdGhlIHNlY29uZCBQSFAgY2FsbCB3aWxsIG5vdCBiZSBhYmxlIHRvIHBhdXNlIHRoZSB0aW1lci4KICAgICAqIFRoZSBsb2dpYyBpcyB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBzZWNvbmQgUEhQIGNhbGwgd291bGQKICAgICAqIGF2b2lkIGNvdW50aW5nIHRoZSBDUFUgdXNhZ2UgYWdhaW5zdCB0aGUgbGltaXQsCiAgICAgKiB0aGUgZmlyc3QgY2FsbCBzdGlsbCBjb3VudHMgaXQuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2x1YXNhbmRib3gucGF1c2V1c2FnZXRpbWVyLnBocAogICAgICogQHJldHVybiBib29sIDxwPlJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdGltZXIgaXMgbm93IHBhdXNlZC48L3A+CiAgICAgKiBAc2luY2UgbHVhc2FuZGJveCA+PSAxLjQuMAogICAgICogQHNlZSBMdWFTYW5kYm94OjpzZXRDUFVMaW1pdCgpCiAgICAgKiBAc2VlIEx1YVNhbmRib3g6OnVucGF1c2VVc2FnZVRpbWVyKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBhdXNlVXNhZ2VUaW1lcigpIHt9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlciBhIHNldCBvZiBQSFAgZnVuY3Rpb25zIGFzIGEgTHVhIGxpYnJhcnkuCiAgICAgKgogICAgICogPHA+UmVnaXN0ZXJzIGEgc2V0IG9mIFBIUCBmdW5jdGlvbnMgYXMgYSBMdWEgbGlicmFyeSwKICAgICAqIHNvIHRoYXQgTHVhIGNhbiBjYWxsIHRoZSByZWxldmFudCBQSFAgY29kZS48L3A+CiAgICAgKgogICAgICogPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FsbGluZyBMdWEgZnVuY3Rpb25zIGFuZCB0aGUgcmV0dXJuIHZhbHVlcywKICAgICAqIHNlZSA8Y29kZT5MdWFTYW5kYm94RnVuY3Rpb246OmNhbGwoKTwvY29kZT4uPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2x1YXNhbmRib3gucmVnaXN0ZXJsaWJyYXJ5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbGlibmFtZSA8cD5UaGUgbmFtZSBvZiB0aGUgbGlicmFyeS4KICAgICAqIEluIHRoZSBMdWEgc3RhdGUsIHRoZSBnbG9iYWwgdmFyaWFibGUgb2YgdGhpcyBuYW1lIHdpbGwgYmUgc2V0IHRvIHRoZSB0YWJsZSBvZiBmdW5jdGlvbnMuCiAgICAgKiBJZiB0aGUgdGFibGUgYWxyZWFkeSBleGlzdHMsIHRoZSBuZXcgZnVuY3Rpb25zIHdpbGwgYmUgYWRkZWQgdG8gaXQuPC9wPgogICAgICogQHBhcmFtIGFycmF5ICRmdW5jdGlvbnMgPHA+UmV0dXJucyBhbiBhcnJheSwgd2hlcmUgZWFjaCBrZXkgaXMgYSBmdW5jdGlvbiBuYW1lLAogICAgICogYW5kIGVhY2ggdmFsdWUgaXMgYSBjb3JyZXNwb25kaW5nIFBIUCBjYWxsYWJsZS48L3A+CiAgICAgKiBAc2luY2UgbHVhc2FuZGJveCA+PSAxLjAuMAogICAgICogQHNlZSBMdWFTYW5kYm94Ojpsb2FkU3RyaW5nKCkKICAgICAqIEBzZWUgTHVhU2FuZGJveDo6d3JhcFBocEZ1bmN0aW9uKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlZ2lzdGVyTGlicmFyeSgkbGlibmFtZSwgJGZ1bmN0aW9ucykge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgQ1BVIHRpbWUgbGltaXQgZm9yIHRoZSBMdWEgZW52aXJvbm1lbnQuCiAgICAgKgogICAgICogPHA+SWYgdGhlIHRvdGFsIHVzZXIgYW5kIHN5c3RlbSB0aW1lIHVzZWQgYnkgdGhlIGVudmlyb25tZW50IGFmdGVyIHRoZSBjYWxsCiAgICAgKiB0byB0aGlzIG1ldGhvZCBleGNlZWRzIHRoaXMgbGltaXQsIGEgPGNvZGU+THVhU2FuZGJveFRpbWVvdXRFcnJvcjwvY29kZT4gZXhjZXB0aW9uIGlzIHRocm93bi48L3A+CiAgICAgKgogICAgICogPHA+VGltZSB1c2VkIGluIFBIUCBjYWxsYmFja3MgaXMgaW5jbHVkZWQgaW4gdGhlIGxpbWl0LjwvcD4KICAgICAqCiAgICAgKiA8cD5TZXR0aW5nIHRoZSB0aW1lIGxpbWl0IGZyb20gYSBjYWxsYmFjayB3aGlsZSBMdWEgaXMgcnVubmluZyBjYXVzZXMgdGhlIHRpbWVyIHRvIGJlIHJlc2V0LAogICAgICogb3Igc3RhcnRlZCBpZiBpdCB3YXMgbm90IGFscmVhZHkgcnVubmluZy48L3A+CiAgICAgKgogICAgICogPHA+Tm90ZTogT24gV2luZG93cywgdGhlIENQVSBsaW1pdCB3aWxsIGJlIGlnbm9yZWQuIE9uIG9wZXJhdGluZyBzeXN0ZW1zCiAgICAgKiB0aGF0IGRvIG5vdCBzdXBwb3J0IDxpPkNMT0NLX1RIUkVBRF9DUFVUSU1FX0lEPC9pPiwgc3VjaCBhcyBGcmVlQlNEIGFuZAogICAgICogTWFjIE9TIFgsIHdhbGwtY2xvY2sgdGltZSByYXRoZXIgdGhhbiBDUFUgdGltZSB3aWxsIGJlIGxpbWl0ZWQuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2x1YXNhbmRib3guc2V0Y3B1bGltaXQucGhwCiAgICAgKiBAcGFyYW0gYm9vbHxmbG9hdCAkbGltaXQgPHA+TGltaXQgYXMgYSBmbG9hdCBpbiBzZWNvbmRzLCBvciBmYWxzZSBmb3Igbm8gbGltaXQuPC9wPgogICAgICogQHNpbmNlIGx1YXNhbmRib3ggPj0gMS4wLjAKICAgICAqIEBzZWUgTHVhU2FuZGJveDo6Z2V0Q1BVVXNhZ2UoKQogICAgICogQHNlZSBMdWFTYW5kYm94OjpzZXRNZW1vcnlMaW1pdCgpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDUFVMaW1pdCgkbGltaXQpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1lbW9yeSBsaW1pdCBmb3IgdGhlIEx1YSBlbnZpcm9ubWVudC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9sdWFzYW5kYm94LnNldG1lbW9yeWxpbWl0LnBocAogICAgICogQHBhcmFtIGludCAkbGltaXQgPHA+TWVtb3J5IGxpbWl0IGluIGJ5dGVzLjwvcD4KICAgICAqIEB0aHJvd3MgTHVhU2FuZGJveE1lbW9yeUVycm9yIDxwPkV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgdGhpcyBsaW1pdCBpcyBleGNlZWRlZC48L3A+CiAgICAgKiBAc2luY2UgbHVhc2FuZGJveCA+PSAxLjAuMAogICAgICogQHNlZSBMdWFTYW5kYm94OjpnZXRNZW1vcnlVc2FnZSgpCiAgICAgKiBAc2VlIEx1YVNhbmRib3g6OmdldFBlYWtNZW1vcnlVc2FnZSgpCiAgICAgKiBAc2VlIEx1YVNhbmRib3g6OnNldENQVUxpbWl0KCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE1lbW9yeUxpbWl0KCRsaW1pdCkge30KCiAgICAvKioKICAgICAqIFVucGF1c2UgdGhlIHRpbWVyIHBhdXNlZCBieSA8Y29kZT5MdWFTYW5kYm94OjpwYXVzZVVzYWdlVGltZXIoKTwvY29kZT4uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbHVhc2FuZGJveC51bnBhdXNldXNhZ2V0aW1lci5waHAKICAgICAqIEBzaW5jZSBsdWFzYW5kYm94ID49IDEuMC4wCiAgICAgKiBAc2VlIEx1YVNhbmRib3g6OnNldENQVUxpbWl0KCkKICAgICAqIEBzZWUgTHVhU2FuZGJveDo6dW5wYXVzZVVzYWdlVGltZXIoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5wYXVzZVVzYWdlVGltZXIoKSB7fQoKICAgIC8qKgogICAgICogV3JhcCBhIFBIUCBjYWxsYWJsZSBpbiBhIEx1YVNhbmRib3hGdW5jdGlvbi4KICAgICAqCiAgICAgKiA8cD5XcmFwcyBhIFBIUCBjYWxsYWJsZSBpbiBhIDxjb2RlPkx1YVNhbmRib3hGdW5jdGlvbjwvY29kZT4sCiAgICAgKiBzbyBpdCBjYW4gYmUgcGFzc2VkIGludG8gTHVhIGFzIGFuIGFub255bW91cyBmdW5jdGlvbi48L3A+CiAgICAgKgogICAgICogPHA+VGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGVpdGhlciBhbiBhcnJheSBvZiB2YWx1ZXMgKHdoaWNoIG1heSBiZSBlbXB0eSksCiAgICAgKiBvciBOVUxMIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gcmV0dXJuaW5nIHRoZSBlbXB0eSBhcnJheS48L3A+CiAgICAgKgogICAgICogPHA+RXhjZXB0aW9ucyB3aWxsIGJlIHJhaXNlZCBhcyBlcnJvcnMgaW4gTHVhLCBob3dldmVyIG9ubHkgPGNvZGU+THVhU2FuZGJveFJ1bnRpbWVFcnJvcjxjb2RlPgogICAgICogZXhjZXB0aW9ucyBtYXkgYmUgY2F1Z2h0IGluc2lkZSBMdWEgd2l0aCA8Y29kZT5wY2FsbCgpPGNvZGUvPiBvciA8Y29kZT54cGNhbGwoKTxjb2RlLz4uPC9wPgogICAgICoKICAgICAqIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNhbGxpbmcgTHVhIGZ1bmN0aW9ucyBhbmQgdGhlIHJldHVybiB2YWx1ZXMsCiAgICAgKiBzZWUgPGNvZGU+THVhU2FuZGJveEZ1bmN0aW9uOjpjYWxsKCk8L2NvZGU+LjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9sdWFzYW5kYm94LndyYXBQaHBGdW5jdGlvbi5waHAKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkZnVuY3Rpb24gPHA+Q2FsbGFibGUgdG8gd3JhcC48L3A+CiAgICAgKiBAcmV0dXJuIEx1YVNhbmRib3hGdW5jdGlvbgogICAgICogQHNpbmNlIGx1YXNhbmRib3ggPj0gMS4yLjAKICAgICAqIEBzZWUgTHVhU2FuZGJveDo6bG9hZFN0cmluZygpCiAgICAgKiBAc2VlIEx1YVNhbmRib3g6OnJlZ2lzdGVyTGlicmFyeSgpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cmFwUGhwRnVuY3Rpb24oJGZ1bmN0aW9uKSB7fQp9CgovKioKICogUmVwcmVzZW50cyBhIEx1YSBmdW5jdGlvbiwgYWxsb3dpbmcgaXQgdG8gYmUgY2FsbGVkIGZyb20gUEhQLgogKgogKiA8cD5BIDxpPkx1YVNhbmRib3hGdW5jdGlvbjwvaT4gbWF5IGJlIG9idGFpbmVkIGFzIGEgcmV0dXJuIHZhbHVlIGZyb20gTHVhLAogKiBhcyBhIHBhcmFtZXRlciBwYXNzZWQgdG8gYSBjYWxsYmFjayBmcm9tIEx1YSwKICogb3IgYnkgdXNpbmcgPGNvZGU+THVhU2FuZGJveDo6d3JhcFBocEZ1bmN0aW9uKCk8L2NvZGU+LCA8Y29kZT5MdWFTYW5kYm94Ojpsb2FkU3RyaW5nKCk8L2NvZGU+LAogKiBvciA8Y29kZT5MdWFTYW5kYm94Ojpsb2FkQmluYXJ5KCk8L2NvZGU+LjwvcD4KICoKICogQHNpbmNlIGx1YXNhbmRib3ggPj0gMS4wLjAKICovCmNsYXNzIEx1YVNhbmRib3hGdW5jdGlvbgp7CiAgICAvKioKICAgICAqIENhbGwgYSBMdWEgZnVuY3Rpb24uCiAgICAgKgogICAgICogPHA+RXJyb3JzIGNvbnNpZGVyZWQgdG8gYmUgdGhlIGZhdWx0IG9mIHRoZSBQSFAgY29kZSB3aWxsIHJlc3VsdCBpbiB0aGUKICAgICAqIGZ1bmN0aW9uIHJldHVybmluZyBmYWxzZSBhbmQgPGk+RV9XQVJOSU5HPC9pPiBiZWluZyByYWlzZWQsIGZvciBleGFtcGxlLAogICAgICogYSByZXNvdXJjZSB0eXBlIGJlaW5nIHVzZWQgYXMgYW4gYXJndW1lbnQuIEx1YSBlcnJvcnMgd2lsbCByZXN1bHQKICAgICAqIGluIGEgTHVhU2FuZGJveFJ1bnRpbWVFcnJvciBleGNlcHRpb24gYmVpbmcgdGhyb3duLjwvcD4KICAgICAqCiAgICAgKiA8cD5QSFAgYW5kIEx1YSB0eXBlcyBhcmUgY29udmVydGVkIGFzIGZvbGxvd3M6PC9wPgogICAgICogPHVsPgogICAgICogPGxpPlBIUCBOVUxMIGlzIEx1YSBuaWwsIGFuZCB2aWNlIHZlcnNhLjwvbGk+CiAgICAgKiA8bGk+UEhQIGludGVnZXJzIGFuZCBmbG9hdHMgYXJlIGNvbnZlcnRlZCB0byBMdWEgbnVtYmVycy4gSW5maW5pdHkgYW5kIE5BTiBhcmUgc3VwcG9ydGVkLjwvbGk+CiAgICAgKiA8bGk+THVhIG51bWJlcnMgd2l0aG91dCBhIGZyYWN0aW9uYWwgcGFydCBiZXR3ZWVuIGFwcHJveGltYXRlbHkgLTIqKjUzIGFuZCAyKio1MyBhcmUKICAgICAqIGNvbnZlcnRlZCB0byBQSFAgaW50ZWdlcnMsIHdpdGggb3RoZXJzIGJlaW5nIGNvbnZlcnRlZCB0byBQSFAgZmxvYXRzLjwvbGk+CiAgICAgKiA8bGk+UEhQIGJvb2xlYW5zIGFyZSBMdWEgYm9vbGVhbnMsIGFuZCB2aWNlIHZlcnNhLjwvbGk+CiAgICAgKiA8bGk+UEhQIHN0cmluZ3MgYXJlIEx1YSBzdHJpbmdzLCBhbmQgdmljZSB2ZXJzYS48L2xpPgogICAgICogPGxpPkx1YSBmdW5jdGlvbnMgYXJlIFBIUCBMdWFTYW5kYm94RnVuY3Rpb24gb2JqZWN0cywgYW5kIHZpY2UgdmVyc2EuCiAgICAgKiBHZW5lcmFsIFBIUCBjYWxsYWJsZXMgYXJlIG5vdCBzdXBwb3J0ZWQuPC9saT4KICAgICAqIDxsaT5QSFAgYXJyYXlzIGFyZSBjb252ZXJ0ZWQgdG8gTHVhIHRhYmxlcywgYW5kIHZpY2UgdmVyc2EuPC9saT4KICAgICAqIDx1bD4KICAgICAqICAgPGxpPk5vdGUgdGhhdCBMdWEgdHlwaWNhbGx5IGluZGV4ZXMgYXJyYXlzIGZyb20gMSwgd2hpbGUgUEhQIGluZGV4ZXMgYXJyYXlzIGZyb20gMC4KICAgICAqICAgTm8gYWRqdXN0bWVudCBpcyBtYWRlIGZvciB0aGVzZSBkaWZmZXJpbmcgY29udmVudGlvbnMuPC9saT4KICAgICAqICAgPGxpPlNlbGYtcmVmZXJlbnRpYWwgYXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGVpdGhlciBkaXJlY3Rpb24uPC9saT4KICAgICAqICAgPGxpPlBIUCByZWZlcmVuY2VzIGFyZSBkZXJlZmVyZW5jZWQuPC9saT4KICAgICAqICAgPGxpPkx1YSA8aT5fX3BhaXJzPC9pPiBhbmQgPGk+X19pcGFpcnM8L2k+IGFyZSBwcm9jZXNzZWQuIDxpPl9faW5kZXg8L2k+IGlzIGlnbm9yZWQuPC9saT4KICAgICAqICAgPGxpPldoZW4gY29udmVydGluZyBmcm9tIFBIUCB0byBMdWEsIGludGVnZXIga2V5cyBiZXR3ZWVuIC0yKio1MyBhbmQgMioqNTMgYXJlIHJlcHJlc2VudGVkIGFzIEx1YSBudW1iZXJzLgogICAgICogICBBbGwgb3RoZXIga2V5cyBhcmUgcmVwcmVzZW50ZWQgYXMgTHVhIHN0cmluZ3MuPC9saT4KICAgICAqICAgPGxpPldoZW4gY29udmVydGluZyBmcm9tIEx1YSB0byBQSFAsIGtleXMgb3RoZXIgdGhhbiBzdHJpbmdzIGFuZCBudW1iZXJzIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLAogICAgICogICBhcyB3aWxsIGNvbGxpc2lvbnMgd2hlbiBjb252ZXJ0aW5nIG51bWJlcnMgdG8gc3RyaW5ncyBvciB2aWNlIHZlcnNhCiAgICAgKiAgIChzaW5jZSBQSFAgY29uc2lkZXJzIHRoaW5ncyBsaWtlIDxjb2RlPiRhWzBdPC9jb2RlPiBhbmQgPGNvZGU+JGFbIjAiXTwvY29kZT4gYXMgYmVpbmcgZXF1aXZhbGVudCkuPC9saT4KICAgICAqIDwvdWw+CiAgICAgKiA8bGk+QWxsIG90aGVyIHR5cGVzIGFyZSB1bnN1cHBvcnRlZCBhbmQgd2lsbCByYWlzZSBhbiBlcnJvci9leGNlcHRpb24sCiAgICAgKiBpbmNsdWRpbmcgZ2VuZXJhbCBQSFAgb2JqZWN0cyBhbmQgTHVhIHVzZXJkYXRhIGFuZCB0aHJlYWQgdHlwZXMuPC9saT4KICAgICAqIDwvdWw+CiAgICAgKgogICAgICogPHA+THVhIGZ1bmN0aW9ucyBpbmhlcmVudGx5IHJldHVybiBhIGxpc3Qgb2YgcmVzdWx0cy4gU28gb24gc3VjY2VzcywKICAgICAqIHRoaXMgbWV0aG9kIHJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBhbGwgb2YgdGhlIHZhbHVlcyByZXR1cm5lZCBieSBMdWEsCiAgICAgKiB3aXRoIGludGVnZXIga2V5cyBzdGFydGluZyBmcm9tIHplcm8uCiAgICAgKiBMdWEgbWF5IHJldHVybiBubyByZXN1bHRzLCBpbiB3aGljaCBjYXNlIGFuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkLjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9sdWFzYW5kYm94ZnVuY3Rpb24uY2FsbC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmdbXSAkYXJndW1lbnRzIDxwPkFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLjwvcD4KICAgICAqIEByZXR1cm4gYXJyYXl8Ym9vbCA8cD5SZXR1cm5zIGFuIGFycmF5IG9mIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24sCiAgICAgKiB3aGljaCBtYXkgYmUgZW1wdHksIG9yIGZhbHNlIG9uIGVycm9yLjwvcD4KICAgICAqIEBzaW5jZSBsdWFzYW5kYm94ID49IDEuMC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxsKCRhcmd1bWVudHMpIHt9CgogICAgLyoqCiAgICAgKiBEdW1wIHRoZSBmdW5jdGlvbiBhcyBhIGJpbmFyeSBibG9iLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2x1YXNhbmRib3hmdW5jdGlvbi5kdW1wLnBocAogICAgICogQHJldHVybiBzdHJpbmcgPHA+UmV0dXJucyBhIHN0cmluZyB0aGF0IG1heSBiZSBwYXNzZWQgdG8gPGNvZGU+THVhU2FuZGJveDo6bG9hZEJpbmFyeSgpPC9jb2RlPi48L3A+CiAgICAgKiBAc2luY2UgbHVhc2FuZGJveCA+PSAxLjAuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHVtcCgpIHt9Cn0KCi8qKgogKiBCYXNlIGNsYXNzIGZvciBMdWFTYW5kYm94IGV4Y2VwdGlvbnMuCiAqCiAqIEBzaW5jZSBsdWFzYW5kYm94ID49IDEuMC4wCiAqLwpjbGFzcyBMdWFTYW5kYm94RXJyb3IgZXh0ZW5kcyBFeGNlcHRpb24KewogICAgcHVibGljIGNvbnN0IFJVTiA9IDI7CiAgICBwdWJsaWMgY29uc3QgU1lOVEFYID0gMzsKICAgIHB1YmxpYyBjb25zdCBNRU0gPSA0OwogICAgcHVibGljIGNvbnN0IEVSUiA9IDU7Cn0KCi8qKgogKiBDYXRjaGFibGUgPGk+THVhU2FuZGJveDwvaT4gcnVudGltZSBleGNlcHRpb25zLgogKgogKiA8cD5UaGVzZSBtYXkgYmUgY2F1Z2h0IGluc2lkZSBMdWEgdXNpbmcgPGNvZGU+cGNhbGwoKTwvY29kZT4gb3IgPGNvZGU+eHBjYWxsKCk8L2NvZGU+LjwvcD4KICoKICogQHNpbmNlIGx1YXNhbmRib3ggPj0gMS4wLjAKICovCmNsYXNzIEx1YVNhbmRib3hSdW50aW1lRXJyb3IgZXh0ZW5kcyBMdWFTYW5kYm94RXJyb3Ige30KCi8qKgogKiBVbmNhdGNoYWJsZSA8aT5MdWFTYW5kYm94PC9pPiBleGNlcHRpb25zLgogKgogKiA8cD5UaGVzZSBtYXkgbm90IGJlIGNhdWdodCBpbnNpZGUgTHVhIHVzaW5nIDxjb2RlPnBjYWxsKCk8L2NvZGU+IG9yIDxjb2RlPnhwY2FsbCgpPC9jb2RlPi48L3A+CiAqCiAqIEBzaW5jZSBsdWFzYW5kYm94ID49IDEuMC4wCiAqLwpjbGFzcyBMdWFTYW5kYm94RmF0YWxFcnJvciBleHRlbmRzIEx1YVNhbmRib3hFcnJvciB7fQoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBMdWEgZW5jb3VudGVycyBhbiBlcnJvciBpbnNpZGUgYW4gZXJyb3IgaGFuZGxlci4KICoKICogQHNpbmNlIGx1YXNhbmRib3ggPj0gMS4wLjAKICovCmNsYXNzIEx1YVNhbmRib3hFcnJvckVycm9yIGV4dGVuZHMgTHVhU2FuZGJveEZhdGFsRXJyb3Ige30KCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gTHVhIGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkuCiAqCiAqIEBzaW5jZSBsdWFzYW5kYm94ID49IDEuMC4wCiAqIEBzZWUgTHVhU2FuZGJveDo6c2V0TWVtb3J5TGltaXQoKQogKi8KY2xhc3MgTHVhU2FuZGJveE1lbW9yeUVycm9yIGV4dGVuZHMgTHVhU2FuZGJveEZhdGFsRXJyb3Ige30KCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gTHVhIGNvZGUgY2Fubm90IGJlIHBhcnNlZC4KICoKICogQHNpbmNlIGx1YXNhbmRib3ggPj0gMS4wLjAKICovCmNsYXNzIEx1YVNhbmRib3hTeW50YXhFcnJvciBleHRlbmRzIEx1YVNhbmRib3hGYXRhbEVycm9yIHt9CgovKioKICogRXhjZXB0aW9uIHRocm93biB3aGVuIHRoZSBjb25maWd1cmVkIENQVSB0aW1lIGxpbWl0IGlzIGV4Y2VlZGVkLgogKgogKiBAc2luY2UgbHVhc2FuZGJveCA+PSAxLjAuMAogKiBAc2VlIEx1YVNhbmRib3g6OnNldENQVUxpbWl0KCkKICovCmNsYXNzIEx1YVNhbmRib3hUaW1lb3V0RXJyb3IgZXh0ZW5kcyBMdWFTYW5kYm94RmF0YWxFcnJvciB7fQo8P3BocAoKLy8gU3RhcnQgb2YgdGlkeSB2LjIuMAp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUgYXMgUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcVGVudGF0aXZlVHlwZTsKCi8qKgogKiBBbiBIVE1MIG5vZGUgaW4gYW4gSFRNTCBmaWxlLCBhcyBkZXRlY3RlZCBieSB0aWR5LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnRpZHkucGhwCiAqLwpjbGFzcyB0aWR5CnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbCAgVGhlIGxhc3Qgd2FybmluZ3MgYW5kIGVycm9ycyBmcm9tIFRpZHlMaWIKICAgICAqLwogICAgcHVibGljID9zdHJpbmcgJGVycm9yQnVmZmVyOwoKICAgIHB1YmxpYyA/c3RyaW5nICR2YWx1ZTsKCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgdGlkeSBkb2N1bWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LmdldG9wdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGlvbiA8cD4KICAgICAqIFlvdSB3aWxsIGZpbmQgYSBsaXN0IHdpdGggZWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgdGhlaXIgdHlwZXMKICAgICAqIGF0OiBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy9xdWlja3JlZi5odG1sLgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8aW50fGJvb2wgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgPGk+b3B0aW9uPC9pPi4KICAgICAqIFRoZSByZXR1cm4gdHlwZSBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgb25lLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRvcHRpb24pOiBzdHJpbmd8aW50fGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAgICAgKiBFeGVjdXRlIGNvbmZpZ3VyZWQgY2xlYW51cCBhbmQgcmVwYWlyIG9wZXJhdGlvbnMgb24gcGFyc2VkIG1hcmt1cAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LmNsZWFucmVwYWlyLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhblJlcGFpcigpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgdGlkeSAmZ3Q7PSAwLjUuMik8YnIvPgogICAgICogUGFyc2UgbWFya3VwIGluIGZpbGUgb3IgVVJJCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkucGFyc2VmaWxlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAgICAgKiBJZiB0aGUgPGk+ZmlsZW5hbWU8L2k+IHBhcmFtZXRlciBpcyBnaXZlbiwgdGhpcyBmdW5jdGlvbgogICAgICogd2lsbCBhbHNvIHJlYWQgdGhhdCBmaWxlIGFuZCBpbml0aWFsaXplIHRoZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSwKICAgICAqIGFjdGluZyBsaWtlIDxiPnRpZHlfcGFyc2VfZmlsZTwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gbWl4ZWQgJGNvbmZpZyBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGNvbmZpZyA8aT5jb25maWc8L2k+IGNhbiBiZSBwYXNzZWQgZWl0aGVyIGFzIGFuCiAgICAgKiBhcnJheSBvciBhcyBhIHN0cmluZy4gSWYgYSBzdHJpbmcgaXMgcGFzc2VkLCBpdCBpcyBpbnRlcnByZXRlZCBhcyB0aGUKICAgICAqIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3RoZXJ3aXNlLCBpdCBpcyBpbnRlcnByZXRlZCBhcyB0aGUKICAgICAqIG9wdGlvbnMgdGhlbXNlbHZlcy4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogRm9yIGFuIGV4cGxhbmF0aW9uIGFib3V0IGVhY2ggb3B0aW9uLCBzZWUKICAgICAqIGh0dHA6Ly90aWR5LnNvdXJjZWZvcmdlLm5ldC9kb2NzL3F1aWNrcmVmLmh0bWwuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGVuY29kaW5nIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgPGk+ZW5jb2Rpbmc8L2k+IHBhcmFtZXRlciBzZXRzIHRoZSBlbmNvZGluZyBmb3IKICAgICAqIGlucHV0L291dHB1dCBkb2N1bWVudHMuIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGVuY29kaW5nIGFyZToKICAgICAqIGFzY2lpLCBsYXRpbjAsIGxhdGluMSwKICAgICAqIHJhdywgdXRmOCwgaXNvMjAyMiwKICAgICAqIG1hYywgd2luMTI1MiwgaWJtODU4LAogICAgICogdXRmMTYsIHV0ZjE2bGUsIHV0ZjE2YmUsCiAgICAgKiBiaWc1LCBhbmQgc2hpZnRqaXMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkdXNlSW5jbHVkZVBhdGggW29wdGlvbmFsXSA8cD4KICAgICAqIFNlYXJjaCBmb3IgdGhlIGZpbGUgaW4gdGhlIGluY2x1ZGVfcGF0aC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2VGaWxlKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRmaWxlbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdhcnJheXxzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRjb25maWcgPSBudWxsLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGVuY29kaW5nID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJHVzZUluY2x1ZGVQYXRoID0gZmFsc2UKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAgICAgKiBQYXJzZSBhIGRvY3VtZW50IHN0b3JlZCBpbiBhIHN0cmluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LnBhcnNlc3RyaW5nLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogICAgICogVGhlIGRhdGEgdG8gYmUgcGFyc2VkLgogICAgICogPC9wPgogICAgICogQHBhcmFtIG1peGVkICRjb25maWcgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBjb25maWcgPGk+Y29uZmlnPC9pPiBjYW4gYmUgcGFzc2VkIGVpdGhlciBhcyBhbgogICAgICogYXJyYXkgb3IgYXMgYSBzdHJpbmcuIElmIGEgc3RyaW5nIGlzIHBhc3NlZCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlCiAgICAgKiBuYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIG90aGVyd2lzZSwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlCiAgICAgKiBvcHRpb25zIHRoZW1zZWx2ZXMuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIEZvciBhbiBleHBsYW5hdGlvbiBhYm91dCBlYWNoIG9wdGlvbiwgdmlzaXQgaHR0cDovL3RpZHkuc291cmNlZm9yZ2UubmV0L2RvY3MvcXVpY2tyZWYuaHRtbC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZW5jb2RpbmcgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSA8aT5lbmNvZGluZzwvaT4gcGFyYW1ldGVyIHNldHMgdGhlIGVuY29kaW5nIGZvcgogICAgICogaW5wdXQvb3V0cHV0IGRvY3VtZW50cy4gVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgZW5jb2RpbmcgYXJlOgogICAgICogYXNjaWksIGxhdGluMCwgbGF0aW4xLAogICAgICogcmF3LCB1dGY4LCBpc28yMDIyLAogICAgICogbWFjLCB3aW4xMjUyLCBpYm04NTgsCiAgICAgKiB1dGYxNiwgdXRmMTZsZSwgdXRmMTZiZSwKICAgICAqIGJpZzUsIGFuZCBzaGlmdGppcy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBhIG5ldyA8Yj50aWR5PC9iPiBpbnN0YW5jZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHBhcnNlU3RyaW5nKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRzdHJpbmcsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYXJyYXl8c3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkY29uZmlnID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRlbmNvZGluZyA9IG51bGwKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNy4wKTxici8+CiAgICAgKiBSZXBhaXIgYSBzdHJpbmcgdXNpbmcgYW4gb3B0aW9uYWxseSBwcm92aWRlZCBjb25maWd1cmF0aW9uIGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5yZXBhaXJzdHJpbmcucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAgICAgKiBUaGUgZGF0YSB0byBiZSByZXBhaXJlZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmd8bnVsbCAkY29uZmlnIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgY29uZmlnIDxpPmNvbmZpZzwvaT4gY2FuIGJlIHBhc3NlZCBlaXRoZXIgYXMgYW4KICAgICAqIGFycmF5IG9yIGFzIGEgc3RyaW5nLiBJZiBhIHN0cmluZyBpcyBwYXNzZWQsIGl0IGlzIGludGVycHJldGVkIGFzIHRoZQogICAgICogbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBvdGhlcndpc2UsIGl0IGlzIGludGVycHJldGVkIGFzIHRoZQogICAgICogb3B0aW9ucyB0aGVtc2VsdmVzLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBDaGVjayBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy9xdWlja3JlZi5odG1sIGZvcgogICAgICogYW4gZXhwbGFuYXRpb24gYWJvdXQgZWFjaCBvcHRpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGVuY29kaW5nIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgPGk+ZW5jb2Rpbmc8L2k+IHBhcmFtZXRlciBzZXRzIHRoZSBlbmNvZGluZyBmb3IKICAgICAqIGlucHV0L291dHB1dCBkb2N1bWVudHMuIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGVuY29kaW5nIGFyZToKICAgICAqIGFzY2lpLCBsYXRpbjAsIGxhdGluMSwKICAgICAqIHJhdywgdXRmOCwgaXNvMjAyMiwKICAgICAqIG1hYywgd2luMTI1MiwgaWJtODU4LAogICAgICogdXRmMTYsIHV0ZjE2bGUsIHV0ZjE2YmUsCiAgICAgKiBiaWc1LCBhbmQgc2hpZnRqaXMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgcmVwYWlyZWQgc3RyaW5nLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlcGFpclN0cmluZygKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkc3RyaW5nLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2FycmF5fHN0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGNvbmZpZyA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkZW5jb2RpbmcgPSBudWxsCiAgICApOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNy4wKTxici8+CiAgICAgKiBSZXBhaXIgYSBmaWxlIGFuZCByZXR1cm4gaXQgYXMgYSBzdHJpbmcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5yZXBhaXJmaWxlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAgICAgKiBUaGUgZmlsZSB0byBiZSByZXBhaXJlZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmd8bnVsbCAkY29uZmlnIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgY29uZmlnIDxpPmNvbmZpZzwvaT4gY2FuIGJlIHBhc3NlZCBlaXRoZXIgYXMgYW4KICAgICAqIGFycmF5IG9yIGFzIGEgc3RyaW5nLiBJZiBhIHN0cmluZyBpcyBwYXNzZWQsIGl0IGlzIGludGVycHJldGVkIGFzIHRoZQogICAgICogbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBvdGhlcndpc2UsIGl0IGlzIGludGVycHJldGVkIGFzIHRoZQogICAgICogb3B0aW9ucyB0aGVtc2VsdmVzLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBDaGVjayBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy9xdWlja3JlZi5odG1sIGZvciBhbgogICAgICogZXhwbGFuYXRpb24gYWJvdXQgZWFjaCBvcHRpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGVuY29kaW5nIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgPGk+ZW5jb2Rpbmc8L2k+IHBhcmFtZXRlciBzZXRzIHRoZSBlbmNvZGluZyBmb3IKICAgICAqIGlucHV0L291dHB1dCBkb2N1bWVudHMuIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGVuY29kaW5nIGFyZToKICAgICAqIGFzY2lpLCBsYXRpbjAsIGxhdGluMSwKICAgICAqIHJhdywgdXRmOCwgaXNvMjAyMiwKICAgICAqIG1hYywgd2luMTI1MiwgaWJtODU4LAogICAgICogdXRmMTYsIHV0ZjE2bGUsIHV0ZjE2YmUsCiAgICAgKiBiaWc1LCBhbmQgc2hpZnRqaXMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkdXNlSW5jbHVkZVBhdGggW29wdGlvbmFsXSA8cD4KICAgICAqIFNlYXJjaCBmb3IgdGhlIGZpbGUgaW4gdGhlIGluY2x1ZGVfcGF0aC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSByZXBhaXJlZCBjb250ZW50cyBhcyBhIHN0cmluZy4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXBhaXJGaWxlKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRmaWxlbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdhcnJheXxzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRjb25maWcgPSBudWxsLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGVuY29kaW5nID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJHVzZUluY2x1ZGVQYXRoID0gZmFsc2UKICAgICk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIHRpZHkgJmd0Oz0gMC41LjIpPGJyLz4KICAgICAqIFJ1biBjb25maWd1cmVkIGRpYWdub3N0aWNzIG9uIHBhcnNlZCBhbmQgcmVwYWlyZWQgbWFya3VwCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkuZGlhZ25vc2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGRpYWdub3NlKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAgICAgKiBHZXQgcmVsZWFzZSBkYXRlICh2ZXJzaW9uKSBmb3IgVGlkeSBsaWJyYXJ5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkuZ2V0cmVsZWFzZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIGEgc3RyaW5nIHdpdGggdGhlIHJlbGVhc2UgZGF0ZSBvZiB0aGUgVGlkeSBsaWJyYXJ5LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVsZWFzZSgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNy4wKTxici8+CiAgICAgKiBHZXQgY3VycmVudCBUaWR5IGNvbmZpZ3VyYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5nZXRjb25maWcucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogRm9yIGFuIGV4cGxhbmF0aW9uIGFib3V0IGVhY2ggb3B0aW9uLCB2aXNpdCBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy9xdWlja3JlZi5odG1sLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29uZmlnKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgdGlkeSAmZ3Q7PSAwLjUuMik8YnIvPgogICAgICogR2V0IHN0YXR1cyBvZiBzcGVjaWZpZWQgZG9jdW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5nZXRzdGF0dXMucGhwCiAgICAgKiBAcmV0dXJuIGludCAwIGlmIG5vIGVycm9yL3dhcm5pbmcgd2FzIHJhaXNlZCwgMSBmb3Igd2FybmluZ3Mgb3IgYWNjZXNzaWJpbGl0eQogICAgICogZXJyb3JzLCBvciAyIGZvciBlcnJvcnMuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0dXMoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgdGlkeSAmZ3Q7PSAwLjUuMik8YnIvPgogICAgICogR2V0IHRoZSBEZXRlY3RlZCBIVE1MIHZlcnNpb24gZm9yIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5nZXRodG1sdmVyLnBocAogICAgICogQHJldHVybiBpbnQgdGhlIGRldGVjdGVkIEhUTUwgdmVyc2lvbi4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogVGhpcyBmdW5jdGlvbiBpcyBub3QgeWV0IGltcGxlbWVudGVkIGluIHRoZSBUaWR5bGliIGl0c2VsZiwgc28gaXQgYWx3YXlzCiAgICAgKiByZXR1cm4gMC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEh0bWxWZXIoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZ2l2ZW4gb3B0aW9uIG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5nZXRvcHRkb2MucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRpb24gPHA+CiAgICAgKiBUaGUgb3B0aW9uIG5hbWUKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIGEgc3RyaW5nIGlmIHRoZSBvcHRpb24gZXhpc3RzIGFuZCBoYXMgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUsIG9yCiAgICAgKiA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0RG9jKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRvcHRpb24pOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGRvY3VtZW50IGlzIGEgWEhUTUwgZG9jdW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5pc3hodG1sLnBocAogICAgICogQHJldHVybiBib29sIFRoaXMgZnVuY3Rpb24gcmV0dXJucyA8Yj5UUlVFPC9iPiBpZiB0aGUgc3BlY2lmaWVkIHRpZHkKICAgICAqIDxpPm9iamVjdDwvaT4gaXMgYSBYSFRNTCBkb2N1bWVudCwgb3IgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogVGhpcyBmdW5jdGlvbiBpcyBub3QgeWV0IGltcGxlbWVudGVkIGluIHRoZSBUaWR5bGliIGl0c2VsZiwgc28gaXQgYWx3YXlzCiAgICAgKiByZXR1cm4gPGI+RkFMU0U8L2I+LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNYaHRtbCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgdGlkeSAmZ3Q7PSAwLjUuMik8YnIvPgogICAgICogSW5kaWNhdGVzIGlmIHRoZSBkb2N1bWVudCBpcyBhIGdlbmVyaWMgKG5vbiBIVE1ML1hIVE1MKSBYTUwgZG9jdW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5pc3htbC5waHAKICAgICAqIEByZXR1cm4gYm9vbCBUaGlzIGZ1bmN0aW9uIHJldHVybnMgPGI+VFJVRTwvYj4gaWYgdGhlIHNwZWNpZmllZCB0aWR5CiAgICAgKiA8aT5vYmplY3Q8L2k+IGlzIGEgZ2VuZXJpYyBYTUwgZG9jdW1lbnQgKG5vbiBIVE1ML1hIVE1MKSwKICAgICAqIG9yIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiB0aGUgVGlkeWxpYiBpdHNlbGYsIHNvIGl0IGFsd2F5cwogICAgICogcmV0dXJuIDxiPkZBTFNFPC9iPi4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGlzWG1sKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCB0aWR5IDAuNS4yLTEuMC4wKTxici8+CiAgICAgKiBSZXR1cm5zIGEgPGI+dGlkeU5vZGU8L2I+IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJvb3Qgb2YgdGhlIHRpZHkgcGFyc2UgdHJlZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LnJvb3QucGhwCiAgICAgKiBAcmV0dXJuIHRpZHlOb2RlfG51bGwgdGhlIDxiPnRpZHlOb2RlPC9iPiBvYmplY3QuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiByb290KCk6ID90aWR5Tm9kZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIHRpZHkgMC41LjItMS4wLjApPGJyLz4KICAgICAqIFJldHVybnMgYSA8Yj50aWR5Tm9kZTwvYj4gb2JqZWN0IHN0YXJ0aW5nIGZyb20gdGhlICZsdDtoZWFkJmd0OyB0YWcgb2YgdGhlIHRpZHkgcGFyc2UgdHJlZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LmhlYWQucGhwCiAgICAgKiBAcmV0dXJuIHRpZHlOb2RlfG51bGwgdGhlIDxiPnRpZHlOb2RlPC9iPiBvYmplY3QuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBoZWFkKCk6ID90aWR5Tm9kZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIHRpZHkgMC41LjItMS4wLjApPGJyLz4KICAgICAqIFJldHVybnMgYSA8Yj50aWR5Tm9kZTwvYj4gb2JqZWN0IHN0YXJ0aW5nIGZyb20gdGhlICZsdDtodG1sJmd0OyB0YWcgb2YgdGhlIHRpZHkgcGFyc2UgdHJlZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5Lmh0bWwucGhwCiAgICAgKiBAcmV0dXJuIHRpZHlOb2RlfG51bGwgdGhlIDxiPnRpZHlOb2RlPC9iPiBvYmplY3QuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBodG1sKCk6ID90aWR5Tm9kZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIHRpZHkgMC41LjItMS4wKTxici8+CiAgICAgKiBSZXR1cm5zIGEgPGI+dGlkeU5vZGU8L2I+IG9iamVjdCBzdGFydGluZyBmcm9tIHRoZSAmbHQ7Ym9keSZndDsgdGFnIG9mIHRoZSB0aWR5IHBhcnNlIHRyZWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5ib2R5LnBocAogICAgICogQHJldHVybiB0aWR5Tm9kZXxudWxsIGEgPGI+dGlkeU5vZGU8L2I+IG9iamVjdCBzdGFydGluZyBmcm9tIHRoZQogICAgICogJmx0O2JvZHkmZ3Q7IHRhZyBvZiB0aGUgdGlkeSBwYXJzZSB0cmVlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9keSgpOiA/dGlkeU5vZGUge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IDxiPnRpZHk8L2I+IG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJZiB0aGUgPGk+ZmlsZW5hbWU8L2k+IHBhcmFtZXRlciBpcyBnaXZlbiwgdGhpcyBmdW5jdGlvbgogICAgICogd2lsbCBhbHNvIHJlYWQgdGhhdCBmaWxlIGFuZCBpbml0aWFsaXplIHRoZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSwKICAgICAqIGFjdGluZyBsaWtlIDxiPnRpZHlfcGFyc2VfZmlsZTwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gbWl4ZWQgJGNvbmZpZyBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGNvbmZpZyA8aT5jb25maWc8L2k+IGNhbiBiZSBwYXNzZWQgZWl0aGVyIGFzIGFuCiAgICAgKiBhcnJheSBvciBhcyBhIHN0cmluZy4gSWYgYSBzdHJpbmcgaXMgcGFzc2VkLCBpdCBpcyBpbnRlcnByZXRlZCBhcyB0aGUKICAgICAqIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3RoZXJ3aXNlLCBpdCBpcyBpbnRlcnByZXRlZCBhcyB0aGUKICAgICAqIG9wdGlvbnMgdGhlbXNlbHZlcy4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogRm9yIGFuIGV4cGxhbmF0aW9uIGFib3V0IGVhY2ggb3B0aW9uLCB2aXNpdCBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy9xdWlja3JlZi5odG1sLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRlbmNvZGluZyBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIDxpPmVuY29kaW5nPC9pPiBwYXJhbWV0ZXIgc2V0cyB0aGUgZW5jb2RpbmcgZm9yCiAgICAgKiBpbnB1dC9vdXRwdXQgZG9jdW1lbnRzLiBUaGUgcG9zc2libGUgdmFsdWVzIGZvciBlbmNvZGluZyBhcmU6CiAgICAgKiBhc2NpaSwgbGF0aW4wLCBsYXRpbjEsCiAgICAgKiByYXcsIHV0ZjgsIGlzbzIwMjIsCiAgICAgKiBtYWMsIHdpbjEyNTIsIGlibTg1OCwKICAgICAqIHV0ZjE2LCB1dGYxNmxlLCB1dGYxNmJlLAogICAgICogYmlnNSwgYW5kIHNoaWZ0amlzLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGJvb2wgJHVzZUluY2x1ZGVQYXRoIFtvcHRpb25hbF0gPHA+CiAgICAgKiBTZWFyY2ggZm9yIHRoZSBmaWxlIGluIHRoZSBpbmNsdWRlX3BhdGguCiAgICAgKiA8L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRmaWxlbmFtZSA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYXJyYXl8c3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkY29uZmlnID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRlbmNvZGluZyA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICR1c2VJbmNsdWRlUGF0aCA9IG51bGwKICAgICkge30KfQoKLyoqCiAqIEFuIEhUTUwgbm9kZSBpbiBhbiBIVE1MIGZpbGUsIGFzIGRldGVjdGVkIGJ5IHRpZHkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MudGlkeW5vZGUucGhwCiAqLwpmaW5hbCBjbGFzcyB0aWR5Tm9kZQp7CiAgICAvKioKICAgICAqIDxwIHN0eWxlPSJtYXJnaW4tdG9wOjA7Ij5UaGUgSFRNTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSwgaW5jbHVkaW5nIHRoZSBzdXJyb3VuZGluZyB0YWdzLjwvcD4KICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyByZWFkb25seSBzdHJpbmcgJHZhbHVlOwoKICAgIC8qKgogICAgICogPHAgc3R5bGU9Im1hcmdpbi10b3A6MDsiPlRoZSBuYW1lIG9mIHRoZSBIVE1MIG5vZGU8L3A+CiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgcmVhZG9ubHkgc3RyaW5nICRuYW1lOwoKICAgIC8qKgogICAgICogPHAgc3R5bGU9Im1hcmdpbi10b3A6MDsiPlRoZSB0eXBlIG9mIHRoZSB0YWcgKG9uZSBvZiB0aGUgY29uc3RhbnRzIGFib3ZlLCBlLmcuIDxiPjxjb2RlPlRJRFlfTk9ERVRZUEVfUEhQPC9jb2RlPjwvYj4pPC9wPgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIHJlYWRvbmx5IGludCAkdHlwZTsKCiAgICAvKioKICAgICAqIDxwIHN0eWxlPSJtYXJnaW4tdG9wOjA7Ij5UaGUgbGluZSBudW1iZXIgYXQgd2hpY2ggdGhlIHRhZ3MgaXMgbG9jYXRlZCBpbiB0aGUgZmlsZTwvcD4KICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyByZWFkb25seSBpbnQgJGxpbmU7CgogICAgLyoqCiAgICAgKiA8cCBzdHlsZT0ibWFyZ2luLXRvcDowOyI+VGhlIGNvbHVtbiBudW1iZXIgYXQgd2hpY2ggdGhlIHRhZ3MgaXMgbG9jYXRlZCBpbiB0aGUgZmlsZTwvcD4KICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyByZWFkb25seSBpbnQgJGNvbHVtbjsKCiAgICAvKioKICAgICAqIDxwIHN0eWxlPSJtYXJnaW4tdG9wOjA7Ij5JbmRpY2F0ZXMgaWYgdGhlIG5vZGUgaXMgYSBwcm9wcmlldGFyeSB0YWc8L3A+CiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljIHJlYWRvbmx5IGJvb2wgJHByb3ByaWV0YXJ5OwoKICAgIC8qKgogICAgICogPHAgc3R5bGU9Im1hcmdpbi10b3A6MDsiPlRoZSBJRCBvZiB0aGUgdGFnIChvbmUgb2YgdGhlIGNvbnN0YW50cyBhYm92ZSwgZS5nLiA8Yj48Y29kZT5USURZX1RBR19GUkFNRTwvY29kZT48L2I+KTwvcD4KICAgICAqIEB2YXIgaW50fG51bGwKICAgICAqLwogICAgcHVibGljIHJlYWRvbmx5ID9pbnQgJGlkOwoKICAgIC8qKgogICAgICogPHAgc3R5bGU9Im1hcmdpbi10b3A6MDsiPgogICAgICogQW4gYXJyYXkgb2Ygc3RyaW5nLCByZXByZXNlbnRpbmcKICAgICAqIHRoZSBhdHRyaWJ1dGVzIG5hbWVzIChhcyBrZXlzKSBvZiB0aGUgY3VycmVudCBub2RlLgogICAgICogPC9wPgogICAgICogQHZhciBhcnJheXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyByZWFkb25seSA/YXJyYXkgJGF0dHJpYnV0ZTsKCiAgICAvKioKICAgICAqIDxwIHN0eWxlPSJtYXJnaW4tdG9wOjA7Ij4KICAgICAqIEFuIGFycmF5IG9mIDxiPnRpZHlOb2RlPC9iPiwgcmVwcmVzZW50aW5nCiAgICAgKiB0aGUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgbm9kZS4KICAgICAqIDwvcD4KICAgICAqIEB2YXIgYXJyYXl8bnVsbAogICAgICovCiAgICBwdWJsaWMgcmVhZG9ubHkgP2FycmF5ICRjaGlsZDsKCiAgICAvKioKICAgICAqIENoZWNrcyBpZiBhIG5vZGUgaGFzIGNoaWxkcmVuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHlub2RlLmhhc2NoaWxkcmVuLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIHRoZSBub2RlIGhhcyBjaGlsZHJlbiwgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICAgICAqIEBzaW5jZSA1LjAuMQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzQ2hpbGRyZW4oKTpib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgYSBub2RlIGhhcyBzaWJsaW5ncwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5bm9kZS5oYXNzaWJsaW5ncy5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiB0aGUgbm9kZSBoYXMgc2libGluZ3MsIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAgICAgKiBAc2luY2UgNS4wLjEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc1NpYmxpbmdzKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiBhIG5vZGUgcmVwcmVzZW50cyBhIGNvbW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeW5vZGUuaXNjb21tZW50LnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIHRoZSBub2RlIGlzIGEgY29tbWVudCwgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICAgICAqIEBzaW5jZSA1LjAuMQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNDb21tZW50KCk6Ym9vbCB7fQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIGEgbm9kZSBpcyBwYXJ0IG9mIGEgSFRNTCBkb2N1bWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5bm9kZS5pc2h0bWwucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlIG5vZGUgaXMgcGFydCBvZiBhIEhUTUwgZG9jdW1lbnQsIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAgICAgKiBAc2luY2UgNS4wLjEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzSHRtbCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgYSBub2RlIHJlcHJlc2VudHMgdGV4dCAobm8gbWFya3VwKQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5bm9kZS5pc3RleHQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlIG5vZGUgcmVwcmVzZW50IGEgdGV4dCwgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICAgICAqIEBzaW5jZSA1LjAuMQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNUZXh0KCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGlzIG5vZGUgaXMgSlNURQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5bm9kZS5pc2pzdGUucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlIG5vZGUgaXMgSlNURSwgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICAgICAqIEBzaW5jZSA1LjAuMQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNKc3RlKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGlzIG5vZGUgaXMgQVNQCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHlub2RlLmlzYXNwLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIHRoZSBub2RlIGlzIEFTUCwgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICAgICAqIEBzaW5jZSA1LjAuMQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNBc3AoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIGEgbm9kZSBpcyBQSFAKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeW5vZGUuaXNwaHAucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlIGN1cnJlbnQgbm9kZSBpcyBQSFAgY29kZSwgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICAgICAqIEBzaW5jZSA1LjAuMQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQaHAoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcGFyZW50IG5vZGUgb2YgdGhlIGN1cnJlbnQgbm9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5bm9kZS5nZXRwYXJlbnQucGhwCiAgICAgKiBAcmV0dXJuIHRpZHlOb2RlfG51bGwgYSB0aWR5Tm9kZSBpZiB0aGUgbm9kZSBoYXMgYSBwYXJlbnQsIG9yIDxiPk5VTEw8L2I+CiAgICAgKiBvdGhlcndpc2UuCiAgICAgKiBAc2luY2UgNS4yLjIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcmVudCgpOiA/dGlkeU5vZGUge30KCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KfQoKLyoqCiAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSB0aWR5IGRvY3VtZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5nZXRvcHQucGhwCiAqIEBwYXJhbSB0aWR5ICR0aWR5IDxwPgogKiBUaGUgPGI+VGlkeTwvYj4gb2JqZWN0LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG9wdGlvbiA8cD4KICogWW91IHdpbGwgZmluZCBhIGxpc3Qgd2l0aCBlYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCB0aGVpciB0eXBlcwogKiBhdDogaHR0cDovL3RpZHkuc291cmNlZm9yZ2UubmV0L2RvY3MvcXVpY2tyZWYuaHRtbC4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xpbnR8Ym9vbCB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCA8aT5vcHRpb248L2k+LgogKiBUaGUgcmV0dXJuIHR5cGUgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIG9uZS4KICovCmZ1bmN0aW9uIHRpZHlfZ2V0b3B0KCNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSAgdGlkeSAkdGlkeSwgc3RyaW5nICRvcHRpb24pOnN0cmluZ3xpbnR8Ym9vbCB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAqIFBhcnNlIGEgZG9jdW1lbnQgc3RvcmVkIGluIGEgc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5wYXJzZXN0cmluZy5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogKiBUaGUgZGF0YSB0byBiZSBwYXJzZWQuCiAqIDwvcD4KICogQHBhcmFtIG1peGVkICRjb25maWcgW29wdGlvbmFsXSA8cD4KICogVGhlIGNvbmZpZyA8aT5jb25maWc8L2k+IGNhbiBiZSBwYXNzZWQgZWl0aGVyIGFzIGFuCiAqIGFycmF5IG9yIGFzIGEgc3RyaW5nLiBJZiBhIHN0cmluZyBpcyBwYXNzZWQsIGl0IGlzIGludGVycHJldGVkIGFzIHRoZQogKiBuYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIG90aGVyd2lzZSwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlCiAqIG9wdGlvbnMgdGhlbXNlbHZlcy4KICogPC9wPgogKiA8cD4KICogRm9yIGFuIGV4cGxhbmF0aW9uIGFib3V0IGVhY2ggb3B0aW9uLCB2aXNpdCBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy9xdWlja3JlZi5odG1sLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZW5jb2RpbmcgW29wdGlvbmFsXSA8cD4KICogVGhlIDxpPmVuY29kaW5nPC9pPiBwYXJhbWV0ZXIgc2V0cyB0aGUgZW5jb2RpbmcgZm9yCiAqIGlucHV0L291dHB1dCBkb2N1bWVudHMuIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGVuY29kaW5nIGFyZToKICogYXNjaWksIGxhdGluMCwgbGF0aW4xLAogKiByYXcsIHV0ZjgsIGlzbzIwMjIsCiAqIG1hYywgd2luMTI1MiwgaWJtODU4LAogKiB1dGYxNiwgdXRmMTZsZSwgdXRmMTZiZSwKICogYmlnNSwgYW5kIHNoaWZ0amlzLgogKiA8L3A+CiAqIEByZXR1cm4gdGlkeXxmYWxzZSBhIG5ldyA8Yj50aWR5PC9iPiBpbnN0YW5jZS4KICovCmZ1bmN0aW9uIHRpZHlfcGFyc2Vfc3RyaW5nKHN0cmluZyAkc3RyaW5nLCBhcnJheXxzdHJpbmd8bnVsbCAkY29uZmlnID0gbnVsbCwgbnVsbHxzdHJpbmcgJGVuY29kaW5nID0gbnVsbCk6dGlkeXxmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAqIFBhcnNlIG1hcmt1cCBpbiBmaWxlIG9yIFVSSQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkucGFyc2VmaWxlLnBocAogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICogSWYgdGhlIDxpPmZpbGVuYW1lPC9pPiBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIHRoaXMgZnVuY3Rpb24KICogd2lsbCBhbHNvIHJlYWQgdGhhdCBmaWxlIGFuZCBpbml0aWFsaXplIHRoZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSwKICogYWN0aW5nIGxpa2UgPGI+dGlkeV9wYXJzZV9maWxlPC9iPi4KICogPC9wPgogKiBAcGFyYW0gbWl4ZWQgJGNvbmZpZyBbb3B0aW9uYWxdIDxwPgogKiBUaGUgY29uZmlnIDxpPmNvbmZpZzwvaT4gY2FuIGJlIHBhc3NlZCBlaXRoZXIgYXMgYW4KICogYXJyYXkgb3IgYXMgYSBzdHJpbmcuIElmIGEgc3RyaW5nIGlzIHBhc3NlZCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlCiAqIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3RoZXJ3aXNlLCBpdCBpcyBpbnRlcnByZXRlZCBhcyB0aGUKICogb3B0aW9ucyB0aGVtc2VsdmVzLgogKiA8L3A+CiAqIDxwPgogKiBGb3IgYW4gZXhwbGFuYXRpb24gYWJvdXQgZWFjaCBvcHRpb24sIHNlZQogKiBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy9xdWlja3JlZi5odG1sLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZW5jb2RpbmcgW29wdGlvbmFsXSA8cD4KICogVGhlIDxpPmVuY29kaW5nPC9pPiBwYXJhbWV0ZXIgc2V0cyB0aGUgZW5jb2RpbmcgZm9yCiAqIGlucHV0L291dHB1dCBkb2N1bWVudHMuIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGVuY29kaW5nIGFyZToKICogYXNjaWksIGxhdGluMCwgbGF0aW4xLAogKiByYXcsIHV0ZjgsIGlzbzIwMjIsCiAqIG1hYywgd2luMTI1MiwgaWJtODU4LAogKiB1dGYxNiwgdXRmMTZsZSwgdXRmMTZiZSwKICogYmlnNSwgYW5kIHNoaWZ0amlzLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICR1c2VJbmNsdWRlUGF0aCBbb3B0aW9uYWxdIDxwPgogKiBTZWFyY2ggZm9yIHRoZSBmaWxlIGluIHRoZSBpbmNsdWRlX3BhdGguCiAqIDwvcD4KICogQHJldHVybiB0aWR5fGZhbHNlIGEgbmV3IDxiPnRpZHk8L2I+IGluc3RhbmNlLgogKi8KZnVuY3Rpb24gdGlkeV9wYXJzZV9maWxlKHN0cmluZyAkZmlsZW5hbWUsIGFycmF5fHN0cmluZ3xudWxsICRjb25maWcgPSBudWxsLCBudWxsfHN0cmluZyAkZW5jb2RpbmcgPSBudWxsLCBib29sICR1c2VJbmNsdWRlUGF0aCA9IGZhbHNlKTp0aWR5fGZhbHNlIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHRpZHkgJmd0Oz0gMC41LjIpPGJyLz4KICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGFyc2VkIHRpZHkgbWFya3VwCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udGlkeS1nZXQtb3V0cHV0LnBocAogKiBAcGFyYW0gdGlkeSAkdGlkeSA8cD4KICogVGhlIDxiPlRpZHk8L2I+IG9iamVjdC4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyB0aGUgcGFyc2VkIHRpZHkgbWFya3VwLgogKi8KZnVuY3Rpb24gdGlkeV9nZXRfb3V0cHV0KCNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSB0aWR5ICR0aWR5KTpzdHJpbmcge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgdGlkeSAmZ3Q7PSAwLjUuMik8YnIvPgogKiBSZXR1cm4gd2FybmluZ3MgYW5kIGVycm9ycyB3aGljaCBvY2N1cnJlZCBwYXJzaW5nIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LnByb3BzLmVycm9yYnVmZmVyLnBocAogKiBAcGFyYW0gdGlkeSAkdGlkeSA8cD4KICogVGhlIDxiPlRpZHk8L2I+IG9iamVjdC4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgZXJyb3IgYnVmZmVyIGFzIGEgc3RyaW5nLgogKi8KZnVuY3Rpb24gdGlkeV9nZXRfZXJyb3JfYnVmZmVyKCNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSB0aWR5ICR0aWR5KTpzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgdGlkeSAmZ3Q7PSAwLjUuMik8YnIvPgogKiBFeGVjdXRlIGNvbmZpZ3VyZWQgY2xlYW51cCBhbmQgcmVwYWlyIG9wZXJhdGlvbnMgb24gcGFyc2VkIG1hcmt1cAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkuY2xlYW5yZXBhaXIucGhwCiAqIEBwYXJhbSB0aWR5ICR0aWR5IFRoZSBUaWR5IG9iamVjdC4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB0aWR5X2NsZWFuX3JlcGFpcigjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gdGlkeSAkdGlkeSk6Ym9vbCB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNy4wKTxici8+CiAqIFJlcGFpciBhIHN0cmluZyB1c2luZyBhbiBvcHRpb25hbGx5IHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gZmlsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkucmVwYWlyc3RyaW5nLnBocAogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAqIFRoZSBkYXRhIHRvIGJlIHJlcGFpcmVkLgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAkY29uZmlnIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBjb25maWcgPGk+Y29uZmlnPC9pPiBjYW4gYmUgcGFzc2VkIGVpdGhlciBhcyBhbgogKiBhcnJheSBvciBhcyBhIHN0cmluZy4gSWYgYSBzdHJpbmcgaXMgcGFzc2VkLCBpdCBpcyBpbnRlcnByZXRlZCBhcyB0aGUKICogbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBvdGhlcndpc2UsIGl0IGlzIGludGVycHJldGVkIGFzIHRoZQogKiBvcHRpb25zIHRoZW1zZWx2ZXMuCiAqIDwvcD4KICogPHA+CiAqIENoZWNrIGh0dHA6Ly90aWR5LnNvdXJjZWZvcmdlLm5ldC9kb2NzL3F1aWNrcmVmLmh0bWwgZm9yCiAqIGFuIGV4cGxhbmF0aW9uIGFib3V0IGVhY2ggb3B0aW9uLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZW5jb2RpbmcgW29wdGlvbmFsXSA8cD4KICogVGhlIDxpPmVuY29kaW5nPC9pPiBwYXJhbWV0ZXIgc2V0cyB0aGUgZW5jb2RpbmcgZm9yCiAqIGlucHV0L291dHB1dCBkb2N1bWVudHMuIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGVuY29kaW5nIGFyZToKICogYXNjaWksIGxhdGluMCwgbGF0aW4xLAogKiByYXcsIHV0ZjgsIGlzbzIwMjIsCiAqIG1hYywgd2luMTI1MiwgaWJtODU4LAogKiB1dGYxNiwgdXRmMTZsZSwgdXRmMTZiZSwKICogYmlnNSwgYW5kIHNoaWZ0amlzLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSByZXBhaXJlZCBzdHJpbmcuCiAqLwpmdW5jdGlvbiB0aWR5X3JlcGFpcl9zdHJpbmcoc3RyaW5nICRzdHJpbmcsIGFycmF5fHN0cmluZ3xudWxsICRjb25maWcgPSBudWxsLCBudWxsfHN0cmluZyAkZW5jb2RpbmcgPSBudWxsKTpzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgdGlkeSAmZ3Q7PSAwLjcuMCk8YnIvPgogKiBSZXBhaXIgYSBmaWxlIGFuZCByZXR1cm4gaXQgYXMgYSBzdHJpbmcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LnJlcGFpcmZpbGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIDxwPgogKiBUaGUgZmlsZSB0byBiZSByZXBhaXJlZC4KICogPC9wPgogKiBAcGFyYW0gbWl4ZWQgJGNvbmZpZyBbb3B0aW9uYWxdIDxwPgogKiBUaGUgY29uZmlnIDxpPmNvbmZpZzwvaT4gY2FuIGJlIHBhc3NlZCBlaXRoZXIgYXMgYW4KICogYXJyYXkgb3IgYXMgYSBzdHJpbmcuIElmIGEgc3RyaW5nIGlzIHBhc3NlZCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlCiAqIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3RoZXJ3aXNlLCBpdCBpcyBpbnRlcnByZXRlZCBhcyB0aGUKICogb3B0aW9ucyB0aGVtc2VsdmVzLgogKiA8L3A+CiAqIDxwPgogKiBDaGVjayBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy9xdWlja3JlZi5odG1sIGZvciBhbgogKiBleHBsYW5hdGlvbiBhYm91dCBlYWNoIG9wdGlvbi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGVuY29kaW5nIFtvcHRpb25hbF0gPHA+CiAqIFRoZSA8aT5lbmNvZGluZzwvaT4gcGFyYW1ldGVyIHNldHMgdGhlIGVuY29kaW5nIGZvcgogKiBpbnB1dC9vdXRwdXQgZG9jdW1lbnRzLiBUaGUgcG9zc2libGUgdmFsdWVzIGZvciBlbmNvZGluZyBhcmU6CiAqIGFzY2lpLCBsYXRpbjAsIGxhdGluMSwKICogcmF3LCB1dGY4LCBpc28yMDIyLAogKiBtYWMsIHdpbjEyNTIsIGlibTg1OCwKICogdXRmMTYsIHV0ZjE2bGUsIHV0ZjE2YmUsCiAqIGJpZzUsIGFuZCBzaGlmdGppcy4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkdXNlSW5jbHVkZVBhdGggW29wdGlvbmFsXSA8cD4KICogU2VhcmNoIGZvciB0aGUgZmlsZSBpbiB0aGUgaW5jbHVkZV9wYXRoLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSByZXBhaXJlZCBjb250ZW50cyBhcyBhIHN0cmluZy4KICovCmZ1bmN0aW9uIHRpZHlfcmVwYWlyX2ZpbGUoc3RyaW5nICRmaWxlbmFtZSwgYXJyYXl8c3RyaW5nfG51bGwgJGNvbmZpZyA9IG51bGwsIG51bGx8c3RyaW5nICRlbmNvZGluZyA9IG51bGwsIGJvb2wgJHVzZUluY2x1ZGVQYXRoID0gZmFsc2UpOnN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAqIFJ1biBjb25maWd1cmVkIGRpYWdub3N0aWNzIG9uIHBhcnNlZCBhbmQgcmVwYWlyZWQgbWFya3VwCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5kaWFnbm9zZS5waHAKICogQHBhcmFtIHRpZHkgJHRpZHkgPHA+CiAqIFRoZSA8Yj5UaWR5PC9iPiBvYmplY3QuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB0aWR5X2RpYWdub3NlKCNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSB0aWR5ICR0aWR5KTpib29sIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHRpZHkgJmd0Oz0gMC41LjIpPGJyLz4KICogR2V0IHJlbGVhc2UgZGF0ZSAodmVyc2lvbikgZm9yIFRpZHkgbGlicmFyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkuZ2V0cmVsZWFzZS5waHAKICogQHJldHVybiBzdHJpbmcgYSBzdHJpbmcgd2l0aCB0aGUgcmVsZWFzZSBkYXRlIG9mIHRoZSBUaWR5IGxpYnJhcnkuCiAqLwpmdW5jdGlvbiB0aWR5X2dldF9yZWxlYXNlKCk6c3RyaW5nIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHRpZHkgJmd0Oz0gMC43LjApPGJyLz4KICogR2V0IGN1cnJlbnQgVGlkeSBjb25maWd1cmF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5nZXRjb25maWcucGhwCiAqIEBwYXJhbSB0aWR5ICR0aWR5IDxwPgogKiBUaGUgPGI+VGlkeTwvYj4gb2JqZWN0LgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXkgYW4gYXJyYXkgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zLgogKiA8cD4KICogRm9yIGFuIGV4cGxhbmF0aW9uIGFib3V0IGVhY2ggb3B0aW9uLCB2aXNpdCBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvZG9jcy9xdWlja3JlZi5odG1sLgogKiA8L3A+CiAqLwpmdW5jdGlvbiB0aWR5X2dldF9jb25maWcoI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIHRpZHkgJHRpZHkpOmFycmF5IHt9CgovKioKICogKFBIUCA1LCBQRUNMIHRpZHkgJmd0Oz0gMC41LjIpPGJyLz4KICogR2V0IHN0YXR1cyBvZiBzcGVjaWZpZWQgZG9jdW1lbnQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LmdldHN0YXR1cy5waHAKICogQHBhcmFtIHRpZHkgJHRpZHkgPHA+CiAqIFRoZSA8Yj5UaWR5PC9iPiBvYmplY3QuCiAqIDwvcD4KICogQHJldHVybiBpbnQgMCBpZiBubyBlcnJvci93YXJuaW5nIHdhcyByYWlzZWQsIDEgZm9yIHdhcm5pbmdzIG9yIGFjY2Vzc2liaWxpdHkKICogZXJyb3JzLCBvciAyIGZvciBlcnJvcnMuCiAqLwpmdW5jdGlvbiB0aWR5X2dldF9zdGF0dXMoI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIHRpZHkgJHRpZHkpOmludCB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAqIEdldCB0aGUgRGV0ZWN0ZWQgSFRNTCB2ZXJzaW9uIGZvciB0aGUgc3BlY2lmaWVkIGRvY3VtZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5nZXRodG1sdmVyLnBocAogKiBAcGFyYW0gdGlkeSAkdGlkeSA8cD4KICogVGhlIDxiPlRpZHk8L2I+IG9iamVjdC4KICogPC9wPgogKiBAcmV0dXJuIGludCB0aGUgZGV0ZWN0ZWQgSFRNTCB2ZXJzaW9uLgogKiA8cD4KICogVGhpcyBmdW5jdGlvbiBpcyBub3QgeWV0IGltcGxlbWVudGVkIGluIHRoZSBUaWR5bGliIGl0c2VsZiwgc28gaXQgYWx3YXlzCiAqIHJldHVybiAwLgogKiA8L3A+CiAqLwpmdW5jdGlvbiB0aWR5X2dldF9odG1sX3ZlcigjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gdGlkeSAkdGlkeSk6aW50IHt9CgovKioKICogKFBIUCA1LCBQRUNMIHRpZHkgJmd0Oz0gMC41LjIpPGJyLz4KICogSW5kaWNhdGVzIGlmIHRoZSBkb2N1bWVudCBpcyBhIFhIVE1MIGRvY3VtZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5pc3hodG1sLnBocAogKiBAcGFyYW0gdGlkeSAkdGlkeSA8cD4KICogVGhlIDxiPlRpZHk8L2I+IG9iamVjdC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgVGhpcyBmdW5jdGlvbiByZXR1cm5zIDxiPlRSVUU8L2I+IGlmIHRoZSBzcGVjaWZpZWQgdGlkeQogKiA8aT5vYmplY3Q8L2k+IGlzIGEgWEhUTUwgZG9jdW1lbnQsIG9yIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAqIDwvcD4KICogPHA+CiAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiB0aGUgVGlkeWxpYiBpdHNlbGYsIHNvIGl0IGFsd2F5cwogKiByZXR1cm4gPGI+RkFMU0U8L2I+LgogKi8KZnVuY3Rpb24gdGlkeV9pc194aHRtbCgjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gdGlkeSAkdGlkeSk6Ym9vbCB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAqIEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgYSBnZW5lcmljIChub24gSFRNTC9YSFRNTCkgWE1MIGRvY3VtZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5pc3htbC5waHAKICogQHBhcmFtIHRpZHkgJHRpZHkgPHA+CiAqIFRoZSA8Yj5UaWR5PC9iPiBvYmplY3QuCiAqIDwvcD4KICogQHJldHVybiBib29sIFRoaXMgZnVuY3Rpb24gcmV0dXJucyA8Yj5UUlVFPC9iPiBpZiB0aGUgc3BlY2lmaWVkIHRpZHkKICogPGk+b2JqZWN0PC9pPiBpcyBhIGdlbmVyaWMgWE1MIGRvY3VtZW50IChub24gSFRNTC9YSFRNTCksCiAqIG9yIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAqIDwvcD4KICogPHA+CiAqIFRoaXMgZnVuY3Rpb24gaXMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiB0aGUgVGlkeWxpYiBpdHNlbGYsIHNvIGl0IGFsd2F5cwogKiByZXR1cm4gPGI+RkFMU0U8L2I+LgogKi8KZnVuY3Rpb24gdGlkeV9pc194bWwoI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIHRpZHkgJHRpZHkpOmJvb2wge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgdGlkeSAmZ3Q7PSAwLjUuMik8YnIvPgogKiBSZXR1cm5zIHRoZSBOdW1iZXIgb2YgVGlkeSBlcnJvcnMgZW5jb3VudGVyZWQgZm9yIHNwZWNpZmllZCBkb2N1bWVudAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnRpZHktZXJyb3ItY291bnQucGhwCiAqIEBwYXJhbSB0aWR5ICR0aWR5IDxwPgogKiBUaGUgPGI+VGlkeTwvYj4gb2JqZWN0LgogKiA8L3A+CiAqIEByZXR1cm4gaW50IHRoZSBudW1iZXIgb2YgZXJyb3JzLgogKi8KZnVuY3Rpb24gdGlkeV9lcnJvcl9jb3VudCgjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gdGlkeSAkdGlkeSk6IGludCB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAqIFJldHVybnMgdGhlIE51bWJlciBvZiBUaWR5IHdhcm5pbmdzIGVuY291bnRlcmVkIGZvciBzcGVjaWZpZWQgZG9jdW1lbnQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi50aWR5LXdhcm5pbmctY291bnQucGhwCiAqIEBwYXJhbSB0aWR5ICR0aWR5IDxwPgogKiBUaGUgPGI+VGlkeTwvYj4gb2JqZWN0LgogKiA8L3A+CiAqIEByZXR1cm4gaW50IHRoZSBudW1iZXIgb2Ygd2FybmluZ3MuCiAqLwpmdW5jdGlvbiB0aWR5X3dhcm5pbmdfY291bnQoI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIHRpZHkgJHRpZHkpOmludCB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCB0aWR5ICZndDs9IDAuNS4yKTxici8+CiAqIFJldHVybnMgdGhlIE51bWJlciBvZiBUaWR5IGFjY2Vzc2liaWxpdHkgd2FybmluZ3MgZW5jb3VudGVyZWQgZm9yIHNwZWNpZmllZCBkb2N1bWVudAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnRpZHktYWNjZXNzLWNvdW50LnBocAogKiBAcGFyYW0gdGlkeSAkdGlkeSA8cD4KICogVGhlIDxiPlRpZHk8L2I+IG9iamVjdC4KICogPC9wPgogKiBAcmV0dXJuIGludCB0aGUgbnVtYmVyIG9mIHdhcm5pbmdzLgogKi8KZnVuY3Rpb24gdGlkeV9hY2Nlc3NfY291bnQoI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIHRpZHkgJHRpZHkpOiBpbnQge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgdGlkeSAmZ3Q7PSAwLjUuMik8YnIvPgogKiBSZXR1cm5zIHRoZSBOdW1iZXIgb2YgVGlkeSBjb25maWd1cmF0aW9uIGVycm9ycyBlbmNvdW50ZXJlZCBmb3Igc3BlY2lmaWVkIGRvY3VtZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udGlkeS1jb25maWctY291bnQucGhwCiAqIEBwYXJhbSB0aWR5ICR0aWR5IDxwPgogKiBUaGUgPGI+VGlkeTwvYj4gb2JqZWN0LgogKiA8L3A+CiAqIEByZXR1cm4gaW50IHRoZSBudW1iZXIgb2YgZXJyb3JzLgogKi8KZnVuY3Rpb24gdGlkeV9jb25maWdfY291bnQoI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIHRpZHkgJHRpZHkpOmludCB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBnaXZlbiBvcHRpb24gbmFtZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkuZ2V0b3B0ZG9jLnBocAogKiBAcGFyYW0gdGlkeSAkdGlkeSA8cD4KICogVGhlIDxiPlRpZHk8L2I+IG9iamVjdC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRvcHRpb24gPHA+CiAqIFRoZSBvcHRpb24gbmFtZQogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIGEgc3RyaW5nIGlmIHRoZSBvcHRpb24gZXhpc3RzIGFuZCBoYXMgZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUsIG9yCiAqIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAqLwpmdW5jdGlvbiB0aWR5X2dldF9vcHRfZG9jKHRpZHkgJHRpZHksIHN0cmluZyAkb3B0aW9uKTpzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgdGlkeSAwLjUuMi0xLjAuMCk8YnIvPgogKiBSZXR1cm5zIGEgPGI+dGlkeU5vZGU8L2I+IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJvb3Qgb2YgdGhlIHRpZHkgcGFyc2UgdHJlZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkucm9vdC5waHAKICogQHBhcmFtIHRpZHkgJHRpZHkgPHA+CiAqIFRoZSA8Yj5UaWR5PC9iPiBvYmplY3QuCiAqIDwvcD4KICogQHJldHVybiB0aWR5Tm9kZXxudWxsIHRoZSA8Yj50aWR5Tm9kZTwvYj4gb2JqZWN0LgogKi8KZnVuY3Rpb24gdGlkeV9nZXRfcm9vdCgjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gdGlkeSAkdGlkeSk6P3RpZHlOb2RlIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHRpZHkgMC41LjItMS4wLjApPGJyLz4KICogUmV0dXJucyBhIDxiPnRpZHlOb2RlPC9iPiBvYmplY3Qgc3RhcnRpbmcgZnJvbSB0aGUgJmx0O2hlYWQmZ3Q7IHRhZyBvZiB0aGUgdGlkeSBwYXJzZSB0cmVlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5oZWFkLnBocAogKiBAcGFyYW0gdGlkeSAkdGlkeSA8cD4KICogVGhlIDxiPlRpZHk8L2I+IG9iamVjdC4KICogPC9wPgogKiBAcmV0dXJuIHRpZHlOb2RlfG51bGwgdGhlIDxiPnRpZHlOb2RlPC9iPiBvYmplY3QuCiAqLwpmdW5jdGlvbiB0aWR5X2dldF9oZWFkKCNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSB0aWR5ICR0aWR5KTo/dGlkeU5vZGUge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgdGlkeSAwLjUuMi0xLjAuMCk8YnIvPgogKiBSZXR1cm5zIGEgPGI+dGlkeU5vZGU8L2I+IG9iamVjdCBzdGFydGluZyBmcm9tIHRoZSAmbHQ7aHRtbCZndDsgdGFnIG9mIHRoZSB0aWR5IHBhcnNlIHRyZWUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5Lmh0bWwucGhwCiAqIEBwYXJhbSB0aWR5ICR0aWR5IDxwPgogKiBUaGUgPGI+VGlkeTwvYj4gb2JqZWN0LgogKiA8L3A+CiAqIEByZXR1cm4gdGlkeU5vZGV8bnVsbCB0aGUgPGI+dGlkeU5vZGU8L2I+IG9iamVjdC4KICovCmZ1bmN0aW9uIHRpZHlfZ2V0X2h0bWwoI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIHRpZHkgJHRpZHkpOj90aWR5Tm9kZSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCB0aWR5IDAuNS4yLTEuMCk8YnIvPgogKiBSZXR1cm5zIGEgPGI+dGlkeU5vZGU8L2I+IG9iamVjdCBzdGFydGluZyBmcm9tIHRoZSAmbHQ7Ym9keSZndDsgdGFnIG9mIHRoZSB0aWR5IHBhcnNlIHRyZWUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LmJvZHkucGhwCiAqIEBwYXJhbSB0aWR5ICR0aWR5IDxwPgogKiBUaGUgPGI+VGlkeTwvYj4gb2JqZWN0LgogKiA8L3A+CiAqIEByZXR1cm4gdGlkeU5vZGV8bnVsbCBhIDxiPnRpZHlOb2RlPC9iPiBvYmplY3Qgc3RhcnRpbmcgZnJvbSB0aGUKICogJmx0O2JvZHkmZ3Q7IHRhZyBvZiB0aGUgdGlkeSBwYXJzZSB0cmVlLgogKi8KZnVuY3Rpb24gdGlkeV9nZXRfYm9keSh0aWR5ICR0aWR5KTogP3RpZHlOb2RlIHt9CgovKioKICogb2Jfc3RhcnQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVwYWlyIHRoZSBidWZmZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vYi10aWR5aGFuZGxlci5waHAKICogQHBhcmFtIHN0cmluZyAkaW5wdXQgPHA+CiAqIFRoZSBidWZmZXIuCiAqIDwvcD4KICogQHBhcmFtIGludCAkbW9kZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgYnVmZmVyIG1vZGUuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgdGhlIG1vZGlmaWVkIGJ1ZmZlci4KICovCmZ1bmN0aW9uIG9iX3RpZHloYW5kbGVyKCRpbnB1dCwgJG1vZGUgPSBudWxsKSB7fQoKLyoqCiAqIGRlc2NyaXB0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1RJRFlfVEFHX1VOS05PV04nLCAwKTsKZGVmaW5lKCdUSURZX1RBR19BJywgMSk7CmRlZmluZSgnVElEWV9UQUdfQUJCUicsIDIpOwpkZWZpbmUoJ1RJRFlfVEFHX0FDUk9OWU0nLCAzKTsKZGVmaW5lKCdUSURZX1RBR19BRERSRVNTJywgNCk7CmRlZmluZSgnVElEWV9UQUdfQUxJR04nLCA1KTsKZGVmaW5lKCdUSURZX1RBR19BUFBMRVQnLCA2KTsKZGVmaW5lKCdUSURZX1RBR19BUkVBJywgNyk7CmRlZmluZSgnVElEWV9UQUdfQicsIDgpOwpkZWZpbmUoJ1RJRFlfVEFHX0JBU0UnLCA5KTsKZGVmaW5lKCdUSURZX1RBR19CQVNFRk9OVCcsIDEwKTsKZGVmaW5lKCdUSURZX1RBR19CRE8nLCAxMSk7CmRlZmluZSgnVElEWV9UQUdfQkdTT1VORCcsIDEyKTsKZGVmaW5lKCdUSURZX1RBR19CSUcnLCAxMyk7CmRlZmluZSgnVElEWV9UQUdfQkxJTksnLCAxNCk7CmRlZmluZSgnVElEWV9UQUdfQkxPQ0tRVU9URScsIDE1KTsKZGVmaW5lKCdUSURZX1RBR19CT0RZJywgMTYpOwpkZWZpbmUoJ1RJRFlfVEFHX0JSJywgMTcpOwpkZWZpbmUoJ1RJRFlfVEFHX0JVVFRPTicsIDE4KTsKZGVmaW5lKCdUSURZX1RBR19DQVBUSU9OJywgMTkpOwpkZWZpbmUoJ1RJRFlfVEFHX0NFTlRFUicsIDIwKTsKZGVmaW5lKCdUSURZX1RBR19DSVRFJywgMjEpOwpkZWZpbmUoJ1RJRFlfVEFHX0NPREUnLCAyMik7CmRlZmluZSgnVElEWV9UQUdfQ09MJywgMjMpOwpkZWZpbmUoJ1RJRFlfVEFHX0NPTEdST1VQJywgMjQpOwpkZWZpbmUoJ1RJRFlfVEFHX0NPTU1FTlQnLCAyNSk7CmRlZmluZSgnVElEWV9UQUdfREQnLCAyNik7CmRlZmluZSgnVElEWV9UQUdfREVMJywgMjcpOwpkZWZpbmUoJ1RJRFlfVEFHX0RGTicsIDI4KTsKZGVmaW5lKCdUSURZX1RBR19ESVInLCAyOSk7CmRlZmluZSgnVElEWV9UQUdfRElWJywgMzApOwpkZWZpbmUoJ1RJRFlfVEFHX0RMJywgMzEpOwpkZWZpbmUoJ1RJRFlfVEFHX0RUJywgMzIpOwpkZWZpbmUoJ1RJRFlfVEFHX0VNJywgMzMpOwpkZWZpbmUoJ1RJRFlfVEFHX0VNQkVEJywgMzQpOwpkZWZpbmUoJ1RJRFlfVEFHX0ZJRUxEU0VUJywgMzUpOwpkZWZpbmUoJ1RJRFlfVEFHX0ZPTlQnLCAzNik7CmRlZmluZSgnVElEWV9UQUdfRk9STScsIDM3KTsKZGVmaW5lKCdUSURZX1RBR19GUkFNRScsIDM4KTsKZGVmaW5lKCdUSURZX1RBR19GUkFNRVNFVCcsIDM5KTsKZGVmaW5lKCdUSURZX1RBR19IMScsIDQwKTsKZGVmaW5lKCdUSURZX1RBR19IMicsIDQxKTsKZGVmaW5lKCdUSURZX1RBR19IMycsIDQyKTsKZGVmaW5lKCdUSURZX1RBR19INCcsIDQzKTsKZGVmaW5lKCdUSURZX1RBR19INScsIDQ0KTsKZGVmaW5lKCdUSURZX1RBR19INicsIDQ1KTsKZGVmaW5lKCdUSURZX1RBR19IRUFEJywgNDYpOwpkZWZpbmUoJ1RJRFlfVEFHX0hSJywgNDcpOwpkZWZpbmUoJ1RJRFlfVEFHX0hUTUwnLCA0OCk7CmRlZmluZSgnVElEWV9UQUdfSScsIDQ5KTsKZGVmaW5lKCdUSURZX1RBR19JRlJBTUUnLCA1MCk7CmRlZmluZSgnVElEWV9UQUdfSUxBWUVSJywgNTEpOwpkZWZpbmUoJ1RJRFlfVEFHX0lNRycsIDUyKTsKZGVmaW5lKCdUSURZX1RBR19JTlBVVCcsIDUzKTsKZGVmaW5lKCdUSURZX1RBR19JTlMnLCA1NCk7CmRlZmluZSgnVElEWV9UQUdfSVNJTkRFWCcsIDU1KTsKZGVmaW5lKCdUSURZX1RBR19LQkQnLCA1Nik7CmRlZmluZSgnVElEWV9UQUdfS0VZR0VOJywgNTcpOwpkZWZpbmUoJ1RJRFlfVEFHX0xBQkVMJywgNTgpOwpkZWZpbmUoJ1RJRFlfVEFHX0xBWUVSJywgNTkpOwpkZWZpbmUoJ1RJRFlfVEFHX0xFR0VORCcsIDYwKTsKZGVmaW5lKCdUSURZX1RBR19MSScsIDYxKTsKZGVmaW5lKCdUSURZX1RBR19MSU5LJywgNjIpOwpkZWZpbmUoJ1RJRFlfVEFHX0xJU1RJTkcnLCA2Myk7CmRlZmluZSgnVElEWV9UQUdfTUFQJywgNjQpOwpkZWZpbmUoJ1RJRFlfVEFHX01BUlFVRUUnLCA2NSk7CmRlZmluZSgnVElEWV9UQUdfTUVOVScsIDY2KTsKZGVmaW5lKCdUSURZX1RBR19NRVRBJywgNjcpOwpkZWZpbmUoJ1RJRFlfVEFHX01VTFRJQ09MJywgNjgpOwpkZWZpbmUoJ1RJRFlfVEFHX05PQlInLCA2OSk7CmRlZmluZSgnVElEWV9UQUdfTk9FTUJFRCcsIDcwKTsKZGVmaW5lKCdUSURZX1RBR19OT0ZSQU1FUycsIDcxKTsKZGVmaW5lKCdUSURZX1RBR19OT0xBWUVSJywgNzIpOwpkZWZpbmUoJ1RJRFlfVEFHX05PU0FWRScsIDczKTsKZGVmaW5lKCdUSURZX1RBR19OT1NDUklQVCcsIDc0KTsKZGVmaW5lKCdUSURZX1RBR19PQkpFQ1QnLCA3NSk7CmRlZmluZSgnVElEWV9UQUdfT0wnLCA3Nik7CmRlZmluZSgnVElEWV9UQUdfT1BUR1JPVVAnLCA3Nyk7CmRlZmluZSgnVElEWV9UQUdfT1BUSU9OJywgNzgpOwpkZWZpbmUoJ1RJRFlfVEFHX1AnLCA3OSk7CmRlZmluZSgnVElEWV9UQUdfUEFSQU0nLCA4MCk7CmRlZmluZSgnVElEWV9UQUdfUExBSU5URVhUJywgODEpOwpkZWZpbmUoJ1RJRFlfVEFHX1BSRScsIDgyKTsKZGVmaW5lKCdUSURZX1RBR19RJywgODMpOwpkZWZpbmUoJ1RJRFlfVEFHX1JCJywgODQpOwpkZWZpbmUoJ1RJRFlfVEFHX1JCQycsIDg1KTsKZGVmaW5lKCdUSURZX1RBR19SUCcsIDg2KTsKZGVmaW5lKCdUSURZX1RBR19SVCcsIDg3KTsKZGVmaW5lKCdUSURZX1RBR19SVEMnLCA4OCk7CmRlZmluZSgnVElEWV9UQUdfUlVCWScsIDg5KTsKZGVmaW5lKCdUSURZX1RBR19TJywgOTApOwpkZWZpbmUoJ1RJRFlfVEFHX1NBTVAnLCA5MSk7CmRlZmluZSgnVElEWV9UQUdfU0NSSVBUJywgOTIpOwpkZWZpbmUoJ1RJRFlfVEFHX1NFTEVDVCcsIDkzKTsKZGVmaW5lKCdUSURZX1RBR19TRVJWRVInLCA5NCk7CmRlZmluZSgnVElEWV9UQUdfU0VSVkxFVCcsIDk1KTsKZGVmaW5lKCdUSURZX1RBR19TTUFMTCcsIDk2KTsKZGVmaW5lKCdUSURZX1RBR19TUEFDRVInLCA5Nyk7CmRlZmluZSgnVElEWV9UQUdfU1BBTicsIDk4KTsKZGVmaW5lKCdUSURZX1RBR19TVFJJS0UnLCA5OSk7CmRlZmluZSgnVElEWV9UQUdfU1RST05HJywgMTAwKTsKZGVmaW5lKCdUSURZX1RBR19TVFlMRScsIDEwMSk7CmRlZmluZSgnVElEWV9UQUdfU1VCJywgMTAyKTsKZGVmaW5lKCdUSURZX1RBR19TVVAnLCAxMDMpOwpkZWZpbmUoJ1RJRFlfVEFHX1RBQkxFJywgMTA0KTsKZGVmaW5lKCdUSURZX1RBR19UQk9EWScsIDEwNSk7CmRlZmluZSgnVElEWV9UQUdfVEQnLCAxMDYpOwpkZWZpbmUoJ1RJRFlfVEFHX1RFWFRBUkVBJywgMTA3KTsKZGVmaW5lKCdUSURZX1RBR19URk9PVCcsIDEwOCk7CmRlZmluZSgnVElEWV9UQUdfVEgnLCAxMDkpOwpkZWZpbmUoJ1RJRFlfVEFHX1RIRUFEJywgMTEwKTsKZGVmaW5lKCdUSURZX1RBR19USVRMRScsIDExMSk7CmRlZmluZSgnVElEWV9UQUdfVFInLCAxMTIpOwpkZWZpbmUoJ1RJRFlfVEFHX1RUJywgMTEzKTsKZGVmaW5lKCdUSURZX1RBR19VJywgMTE0KTsKZGVmaW5lKCdUSURZX1RBR19VTCcsIDExNSk7CmRlZmluZSgnVElEWV9UQUdfVkFSJywgMTE2KTsKZGVmaW5lKCdUSURZX1RBR19XQlInLCAxMTcpOwpkZWZpbmUoJ1RJRFlfVEFHX1hNUCcsIDExOCk7Ci8qKgogKiBAc2luY2UgNy40CiAqLwpkZWZpbmUoJ1RJRFlfVEFHX0FSVElDTEUnLCAxMjMpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19BU0lERScsIDEyNCk7Ci8qKgogKiBAc2luY2UgNy40CiAqLwpkZWZpbmUoJ1RJRFlfVEFHX0FVRElPJywgMTI1KTsKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnVElEWV9UQUdfQkRJJywgMTI2KTsKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnVElEWV9UQUdfQ0FOVkFTJywgMTI3KTsKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnVElEWV9UQUdfQ09NTUFORCcsIDEyOCk7Ci8qKgogKiBAc2luY2UgNy40CiAqLwpkZWZpbmUoJ1RJRFlfVEFHX0RBVEFMSVNUJywgMTI5KTsKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnVElEWV9UQUdfREVUQUlMUycsIDEzMCk7Ci8qKgogKiBAc2luY2UgNy40CiAqLwpkZWZpbmUoJ1RJRFlfVEFHX0RJQUxPRycsIDEzMSk7Ci8qKgogKiBAc2luY2UgNy40CiAqLwpkZWZpbmUoJ1RJRFlfVEFHX0ZJR0NBUFRJT04nLCAxMzIpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19GSUdVUkUnLCAxMzMpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19GT09URVInLCAxMzQpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19IRUFERVInLCAxMzUpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19IR1JPVVAnLCAxMzYpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19NQUlOJywgMTM3KTsKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnVElEWV9UQUdfTUFSSycsIDEzOCk7Ci8qKgogKiBAc2luY2UgNy40CiAqLwpkZWZpbmUoJ1RJRFlfVEFHX01FTlVJVEVNJywgMTM5KTsKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnVElEWV9UQUdfTUVURVInLCAxNDApOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19OQVYnLCAxNDEpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19PVVRQVVQnLCAxNDIpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19QUk9HUkVTUycsIDE0Myk7Ci8qKgogKiBAc2luY2UgNy40CiAqLwpkZWZpbmUoJ1RJRFlfVEFHX1NFQ1RJT04nLCAxNDQpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19TT1VSQ0UnLCAxNDUpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19TVU1NQVJZJywgMTQ2KTsKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnVElEWV9UQUdfVEVNUExBVEUnLCAxNDcpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19USU1FJywgMTQ4KTsKLyoqCiAqIEBzaW5jZSA3LjQKICovCmRlZmluZSgnVElEWV9UQUdfVFJBQ0snLCAxNDkpOwovKioKICogQHNpbmNlIDcuNAogKi8KZGVmaW5lKCdUSURZX1RBR19WSURFTycsIDE1MCk7CgovKioKICogcm9vdCBub2RlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1RJRFlfTk9ERVRZUEVfUk9PVCcsIDApOwoKLyoqCiAqIGRvY3R5cGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnVElEWV9OT0RFVFlQRV9ET0NUWVBFJywgMSk7CgovKioKICogSFRNTCBjb21tZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1RJRFlfTk9ERVRZUEVfQ09NTUVOVCcsIDIpOwoKLyoqCiAqIFByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnVElEWV9OT0RFVFlQRV9QUk9DSU5TJywgMyk7CgovKioKICogVGV4dAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdUSURZX05PREVUWVBFX1RFWFQnLCA0KTsKCi8qKgogKiBzdGFydCB0YWcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnVElEWV9OT0RFVFlQRV9TVEFSVCcsIDUpOwoKLyoqCiAqIGVuZCB0YWcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnVElEWV9OT0RFVFlQRV9FTkQnLCA2KTsKCi8qKgogKiBlbXB0eSB0YWcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnVElEWV9OT0RFVFlQRV9TVEFSVEVORCcsIDcpOwoKLyoqCiAqIENEQVRBCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1RJRFlfTk9ERVRZUEVfQ0RBVEEnLCA4KTsKCi8qKgogKiBYTUwgc2VjdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdUSURZX05PREVUWVBFX1NFQ1RJT04nLCA5KTsKCi8qKgogKiBBU1AgY29kZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdUSURZX05PREVUWVBFX0FTUCcsIDEwKTsKCi8qKgogKiBKU1RFIGNvZGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi90aWR5LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnVElEWV9OT0RFVFlQRV9KU1RFJywgMTEpOwoKLyoqCiAqIFBIUCBjb2RlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vdGlkeS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1RJRFlfTk9ERVRZUEVfUEhQJywgMTIpOwoKLyoqCiAqIFhNTCBkZWNsYXJhdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3RpZHkuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdUSURZX05PREVUWVBFX1hNTERFQ0wnLCAxMyk7CgovLyBFbmQgb2YgdGlkeSB2LjIuMAo8P3BocAoKZGVjbGFyZSAoc3RyaWN0X3R5cGVzPTEpOwpuYW1lc3BhY2UgX1BIUFN0YW5fOGM2NmQ4MjU1XEpldEJyYWluc1xQSFBTdG9ybVN0dWI7CgovKioKICogVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlLCBkbyBub3QgbW9kaWZ5IGl0IGRpcmVjdGx5IQogKi8KZmluYWwgY2xhc3MgUGhwU3Rvcm1TdHVic01hcAp7CiAgICBjb25zdCBESVIgPSBfX0RJUl9fOwogICAgY29uc3QgQ0xBU1NFUyA9IGFycmF5KCdBTVFQQmFzaWNQcm9wZXJ0aWVzJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUENoYW5uZWwnID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQQ2hhbm5lbEV4Y2VwdGlvbicgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBDb25uZWN0aW9uJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUENvbm5lY3Rpb25FeGNlcHRpb24nID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQRGVjaW1hbCcgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBFbnZlbG9wZScgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBFbnZlbG9wZUV4Y2VwdGlvbicgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBFeGNlcHRpb24nID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQRXhjaGFuZ2UnID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQRXhjaGFuZ2VFeGNlcHRpb24nID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQRXhjaGFuZ2VWYWx1ZScgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBRdWV1ZScgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBRdWV1ZUV4Y2VwdGlvbicgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBUaW1lc3RhbXAnID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQVmFsdWUnID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQVmFsdWVFeGNlcHRpb24nID0+ICdhbXFwL2FtcXAuc3R1YicsICdBUENJdGVyYXRvcicgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ0FQQ1VJdGVyYXRvcicgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ0FkZHJlc3NJbmZvJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnQWVyb3NwaWtlJyA9PiAnYWVyb3NwaWtlL2Flcm9zcGlrZS5zdHViJywgJ0Flcm9zcGlrZVxcQnl0ZXMnID0+ICdhZXJvc3Bpa2UvQnl0ZXMuc3R1YicsICdBbGxvd0R5bmFtaWNQcm9wZXJ0aWVzJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdBcHBlbmRJdGVyYXRvcicgPT4gJ1NQTC9TUEwuc3R1YicsICdBcmd1bWVudENvdW50RXJyb3InID0+ICdDb3JlL0NvcmVfYy5zdHViJywgJ0FyaXRobWV0aWNFcnJvcicgPT4gJ0NvcmUvQ29yZV9jLnN0dWInLCAnQXJyYXlBY2Nlc3MnID0+ICdDb3JlL0NvcmVfYy5zdHViJywgJ0FycmF5SXRlcmF0b3InID0+ICdTUEwvU1BMLnN0dWInLCAnQXJyYXlPYmplY3QnID0+ICdTUEwvU1BMLnN0dWInLCAnQXNzZXJ0aW9uRXJyb3InID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnQXR0cmlidXRlJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdCYWNrZWRFbnVtJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdCYWRGdW5jdGlvbkNhbGxFeGNlcHRpb24nID0+ICdTUEwvU1BMLnN0dWInLCAnQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbicgPT4gJ1NQTC9TUEwuc3R1YicsICdCbGFja2ZpcmVQcm9iZScgPT4gJ2JsYWNrZmlyZS9ibGFja2ZpcmUuc3R1YicsICdDT00nID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdDVVJMRmlsZScgPT4gJ2N1cmwvY3VybC5zdHViJywgJ0NVUkxTdHJpbmdGaWxlJyA9PiAnY3VybC9DVVJMU3RyaW5nRmlsZS5zdHViJywgJ0NhY2hpbmdJdGVyYXRvcicgPT4gJ1NQTC9TUEwuc3R1YicsICdDYWxsYmFja0ZpbHRlckl0ZXJhdG9yJyA9PiAnU1BML1NQTC5zdHViJywgJ0Nhc3NhbmRyYScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEFnZ3JlZ2F0ZScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEJhdGNoU3RhdGVtZW50JyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcQmlnaW50JyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcQmxvYicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXENsdXN0ZXInID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxDbHVzdGVyXFxCdWlsZGVyJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcQ29sbGVjdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXENvbHVtbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEN1c3RvbScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXERhdGUnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxEZWNpbWFsJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRGVmYXVsdEFnZ3JlZ2F0ZScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXERlZmF1bHRDbHVzdGVyJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRGVmYXVsdENvbHVtbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXERlZmF1bHRGdW5jdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXERlZmF1bHRJbmRleCcgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXERlZmF1bHRLZXlzcGFjZScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXERlZmF1bHRNYXRlcmlhbGl6ZWRWaWV3JyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRGVmYXVsdFNjaGVtYScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXERlZmF1bHRTZXNzaW9uJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRGVmYXVsdFRhYmxlJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRHVyYXRpb24nID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxFeGNlcHRpb24nID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxFeGNlcHRpb25cXEFscmVhZHlFeGlzdHNFeGNlcHRpb24nID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxFeGNlcHRpb25cXEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRXhjZXB0aW9uXFxDb25maWd1cmF0aW9uRXhjZXB0aW9uJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRXhjZXB0aW9uXFxEaXZpZGVCeVplcm9FeGNlcHRpb24nID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxFeGNlcHRpb25cXERvbWFpbkV4Y2VwdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEV4Y2VwdGlvblxcRXhlY3V0aW9uRXhjZXB0aW9uJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRXhjZXB0aW9uXFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24nID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxFeGNlcHRpb25cXEludmFsaWRRdWVyeUV4Y2VwdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEV4Y2VwdGlvblxcSW52YWxpZFN5bnRheEV4Y2VwdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEV4Y2VwdGlvblxcSXNCb290c3RyYXBwaW5nRXhjZXB0aW9uJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRXhjZXB0aW9uXFxMb2dpY0V4Y2VwdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEV4Y2VwdGlvblxcT3ZlcmxvYWRlZEV4Y2VwdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEV4Y2VwdGlvblxcUHJvdG9jb2xFeGNlcHRpb24nID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxFeGNlcHRpb25cXFJhbmdlRXhjZXB0aW9uJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRXhjZXB0aW9uXFxSZWFkVGltZW91dEV4Y2VwdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEV4Y2VwdGlvblxcUnVudGltZUV4Y2VwdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEV4Y2VwdGlvblxcU2VydmVyRXhjZXB0aW9uJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRXhjZXB0aW9uXFxUaW1lb3V0RXhjZXB0aW9uJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRXhjZXB0aW9uXFxUcnVuY2F0ZUV4Y2VwdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEV4Y2VwdGlvblxcVW5hdXRob3JpemVkRXhjZXB0aW9uJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRXhjZXB0aW9uXFxVbmF2YWlsYWJsZUV4Y2VwdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEV4Y2VwdGlvblxcVW5wcmVwYXJlZEV4Y2VwdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEV4Y2VwdGlvblxcVmFsaWRhdGlvbkV4Y2VwdGlvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEV4Y2VwdGlvblxcV3JpdGVUaW1lb3V0RXhjZXB0aW9uJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRXhlY3V0aW9uT3B0aW9ucycgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEZsb2F0XycgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEZ1bmN0aW9uXycgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEZ1dHVyZScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEZ1dHVyZUNsb3NlJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRnV0dXJlUHJlcGFyZWRTdGF0ZW1lbnQnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxGdXR1cmVSb3dzJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcRnV0dXJlU2Vzc2lvbicgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXEZ1dHVyZVZhbHVlJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcSW5kZXgnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxJbmV0JyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcS2V5c3BhY2UnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxNYXAnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxNYXRlcmlhbGl6ZWRWaWV3JyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcTnVtZXJpYycgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXFByZXBhcmVkU3RhdGVtZW50JyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcUmV0cnlQb2xpY3knID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxSZXRyeVBvbGljeVxcRGVmYXVsdFBvbGljeScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXFJldHJ5UG9saWN5XFxEb3duZ3JhZGluZ0NvbnNpc3RlbmN5JyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcUmV0cnlQb2xpY3lcXEZhbGx0aHJvdWdoJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcUmV0cnlQb2xpY3lcXExvZ2dpbmcnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxSb3dzJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcU1NMT3B0aW9ucycgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXFNTTE9wdGlvbnNcXEJ1aWxkZXInID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxTY2hlbWEnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxTZXNzaW9uJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcU2V0JyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcU2ltcGxlU3RhdGVtZW50JyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcU21hbGxpbnQnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxTdGF0ZW1lbnQnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxUYWJsZScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXFRpbWUnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxUaW1lc3RhbXAnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxUaW1lc3RhbXBHZW5lcmF0b3InID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxUaW1lc3RhbXBHZW5lcmF0b3JcXE1vbm90b25pYycgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXFRpbWVzdGFtcEdlbmVyYXRvclxcU2VydmVyU2lkZScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXFRpbWV1dWlkJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcVGlueWludCcgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXFR1cGxlJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcVHlwZScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXFR5cGVcXENvbGxlY3Rpb24nID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxUeXBlXFxDdXN0b20nID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxUeXBlXFxNYXAnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxUeXBlXFxTY2FsYXInID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxUeXBlXFxTZXQnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxUeXBlXFxUdXBsZScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXFR5cGVcXFVzZXJUeXBlJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcVXNlclR5cGVWYWx1ZScgPT4gJ2Nhc3NhbmRyYS9jYXNzYW5kcmEuc3R1YicsICdDYXNzYW5kcmFcXFV1aWQnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxVdWlkSW50ZXJmYWNlJyA9PiAnY2Fzc2FuZHJhL2Nhc3NhbmRyYS5zdHViJywgJ0Nhc3NhbmRyYVxcVmFsdWUnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2Fzc2FuZHJhXFxWYXJpbnQnID0+ICdjYXNzYW5kcmEvY2Fzc2FuZHJhLnN0dWInLCAnQ2xvc2VkR2VuZXJhdG9yRXhjZXB0aW9uJyA9PiAnc3RhbmRhcmQvX3R5cGVzLnN0dWInLCAnQ2xvc3VyZScgPT4gJ0NvcmUvQ29yZV9jLnN0dWInLCAnQ29sbGF0b3InID0+ICdpbnRsL2ludGwuc3R1YicsICdDb2xsZWN0YWJsZScgPT4gJ3B0aHJlYWRzL3B0aHJlYWRzLnN0dWInLCAnQ29tcGlsZUVycm9yJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdDb3VjaGJhc2VcXEFuYWx5dGljc0VuY3J5cHRpb25MZXZlbCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEFuYWx5dGljc0V4Y2VwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEFuYWx5dGljc0luZGV4TWFuYWdlcicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEFuYWx5dGljc0xpbmsnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxBbmFseXRpY3NMaW5rVHlwZScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEFuYWx5dGljc09wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxBbmFseXRpY3NSZXN1bHQnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxBcHBlbmRPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcQXV0aGVudGljYXRpb25FeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxBenVyZUJsb2JFeHRlcm5hbEFuYWx5dGljc0xpbmsnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxCYWRJbnB1dEV4Y2VwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEJhc2VFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxCaW5hcnlDb2xsZWN0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcQmluZGluZ3NFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxCb29sZWFuRmllbGRTZWFyY2hRdWVyeScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEJvb2xlYW5TZWFyY2hRdWVyeScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEJ1Y2tldCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEJ1Y2tldE1hbmFnZXInID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxCdWNrZXRNaXNzaW5nRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcQnVja2V0U2V0dGluZ3MnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxDYXNNaXNtYXRjaEV4Y2VwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXENsdXN0ZXInID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxDbHVzdGVyT3B0aW9ucycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXENvbGxlY3Rpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxDb2xsZWN0aW9uTWFuYWdlcicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXENvbGxlY3Rpb25NaXNzaW5nRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcQ29sbGVjdGlvblNwZWMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxDb25qdW5jdGlvblNlYXJjaFF1ZXJ5JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcQ29ubmVjdEFuYWx5dGljc0xpbmtPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcQ29vcmRpbmF0ZScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXENvdWNoYmFzZVJlbW90ZUFuYWx5dGljc0xpbmsnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxDb3VudGVyUmVzdWx0JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcQ3JlYXRlQW5hbHl0aWNzRGF0YXNldE9wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxDcmVhdGVBbmFseXRpY3NEYXRhdmVyc2VPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcQ3JlYXRlQW5hbHl0aWNzSW5kZXhPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcQ3JlYXRlQW5hbHl0aWNzTGlua09wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxDcmVhdGVRdWVyeUluZGV4T3B0aW9ucycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXENyZWF0ZVF1ZXJ5UHJpbWFyeUluZGV4T3B0aW9ucycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXERhdGVSYW5nZUZhY2V0UmVzdWx0JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcRGF0ZVJhbmdlU2VhcmNoRmFjZXQnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxEYXRlUmFuZ2VTZWFyY2hRdWVyeScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXERlY3JlbWVudE9wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxEZXNpZ25Eb2N1bWVudCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXERpc2Nvbm5lY3RBbmFseXRpY3NMaW5rT3B0aW9ucycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXERpc2p1bmN0aW9uU2VhcmNoUXVlcnknID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxEbWxGYWlsdXJlRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcRG9jSWRTZWFyY2hRdWVyeScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXERvY3VtZW50Tm90Rm91bmRFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxEcm9wQW5hbHl0aWNzRGF0YXNldE9wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxEcm9wQW5hbHl0aWNzRGF0YXZlcnNlT3B0aW9ucycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXERyb3BBbmFseXRpY3NJbmRleE9wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxEcm9wQW5hbHl0aWNzTGlua09wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxEcm9wUXVlcnlJbmRleE9wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxEcm9wUXVlcnlQcmltYXJ5SW5kZXhPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcRHJvcFVzZXJPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcRHVyYWJpbGl0eUV4Y2VwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXER1cmFiaWxpdHlMZXZlbCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEVuY3J5cHRpb25TZXR0aW5ncycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEV2aWN0aW9uUG9saWN5JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcRXhpc3RzT3B0aW9ucycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEV4aXN0c1Jlc3VsdCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEdlb0JvdW5kaW5nQm94U2VhcmNoUXVlcnknID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxHZW9EaXN0YW5jZVNlYXJjaFF1ZXJ5JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcR2VvUG9seWdvblF1ZXJ5JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcR2V0QWxsUmVwbGljYXNPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcR2V0QWxsVXNlcnNPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcR2V0QW5hbHl0aWNzTGlua3NPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcR2V0QW5kTG9ja09wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxHZXRBbmRUb3VjaE9wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxHZXRBbnlSZXBsaWNhT3B0aW9ucycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEdldE9wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxHZXRSZXBsaWNhUmVzdWx0JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcR2V0UmVzdWx0JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcR2V0VXNlck9wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxHcm91cCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEh0dHBFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxJbmNyZW1lbnRPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcSW5kZXhGYWlsdXJlRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcSW5kZXhOb3RGb3VuZEV4Y2VwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEluc2VydE9wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxJbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEludmFsaWRSYW5nZUV4Y2VwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEludmFsaWRTdGF0ZUV4Y2VwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEtleURlbGV0ZWRFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxLZXlFeGlzdHNFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxLZXlMb2NrZWRFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxLZXlWYWx1ZUV4Y2VwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXEtleXNwYWNlTm90Rm91bmRFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxMb2dnaW5nTWV0ZXInID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxMb29rdXBDb3VudFNwZWMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxMb29rdXBFeGlzdHNTcGVjJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTG9va3VwR2V0RnVsbFNwZWMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxMb29rdXBHZXRTcGVjJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTG9va3VwSW5PcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTG9va3VwSW5SZXN1bHQnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxMb29rdXBJblNwZWMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxNYXRjaEFsbFNlYXJjaFF1ZXJ5JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTWF0Y2hOb25lU2VhcmNoUXVlcnknID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxNYXRjaFBocmFzZVNlYXJjaFF1ZXJ5JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTWF0Y2hTZWFyY2hRdWVyeScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXE1ldGVyJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTXV0YXRlQXJyYXlBZGRVbmlxdWVTcGVjJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTXV0YXRlQXJyYXlBcHBlbmRTcGVjJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTXV0YXRlQXJyYXlJbnNlcnRTcGVjJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTXV0YXRlQXJyYXlQcmVwZW5kU3BlYycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXE11dGF0ZUNvdW50ZXJTcGVjJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTXV0YXRlSW5PcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTXV0YXRlSW5SZXN1bHQnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxNdXRhdGVJblNwZWMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxNdXRhdGVJbnNlcnRTcGVjJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTXV0YXRlUmVtb3ZlU3BlYycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXE11dGF0ZVJlcGxhY2VTcGVjJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTXV0YXRlVXBzZXJ0U3BlYycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXE11dGF0aW9uUmVzdWx0JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTXV0YXRpb25TdGF0ZScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXE11dGF0aW9uVG9rZW4nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxOZXR3b3JrRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTm9vcE1ldGVyJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTm9vcFRyYWNlcicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXE51bWVyaWNSYW5nZUZhY2V0UmVzdWx0JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcTnVtZXJpY1JhbmdlU2VhcmNoRmFjZXQnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxOdW1lcmljUmFuZ2VTZWFyY2hRdWVyeScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXE9yaWdpbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFBhcnNpbmdGYWlsdXJlRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUGFydGlhbFZpZXdFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxQYXRoRXhpc3RzRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUGF0aE5vdEZvdW5kRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUGhyYXNlU2VhcmNoUXVlcnknID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxQbGFubmluZ0ZhaWx1cmVFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxQcmVmaXhTZWFyY2hRdWVyeScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFByZXBhcmVkU3RhdGVtZW50RXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUHJlcGVuZE9wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxRdWVyeUVycm9yRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUXVlcnlFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxRdWVyeUluZGV4JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUXVlcnlJbmRleE1hbmFnZXInID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxRdWVyeU1ldGFEYXRhJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUXVlcnlPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUXVlcnlQcm9maWxlJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUXVlcnlSZXN1bHQnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxRdWVyeVNjYW5Db25zaXN0ZW5jeScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFF1ZXJ5U2VydmljZUV4Y2VwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFF1ZXJ5U3RyaW5nU2VhcmNoUXVlcnknID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxRdW90YUxpbWl0ZWRFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxSYXRlTGltaXRlZEV4Y2VwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFJlZ2V4cFNlYXJjaFF1ZXJ5JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUmVtb3ZlT3B0aW9ucycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFJlcGxhY2VBbmFseXRpY3NMaW5rT3B0aW9ucycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFJlcGxhY2VPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUmVxdWVzdENhbmNlbGVkRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUmVxdWVzdFNwYW4nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxSZXF1ZXN0VHJhY2VyJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUmVzdWx0JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcUm9sZScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFJvbGVBbmREZXNjcmlwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFJvbGVBbmRPcmlnaW4nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxTM0V4dGVybmFsQW5hbHl0aWNzTGluaycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFNjb3BlJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcU2NvcGVNaXNzaW5nRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcU2NvcGVTcGVjJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcU2VhcmNoRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcU2VhcmNoRmFjZXQnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxTZWFyY2hGYWNldFJlc3VsdCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFNlYXJjaEhpZ2hsaWdodE1vZGUnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxTZWFyY2hJbmRleCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFNlYXJjaEluZGV4TWFuYWdlcicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFNlYXJjaE1ldGFEYXRhJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcU2VhcmNoT3B0aW9ucycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFNlYXJjaFF1ZXJ5JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcU2VhcmNoUmVzdWx0JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcU2VhcmNoU29ydCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFNlYXJjaFNvcnRGaWVsZCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFNlYXJjaFNvcnRHZW9EaXN0YW5jZScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFNlYXJjaFNvcnRJZCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFNlYXJjaFNvcnRNaXNzaW5nJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcU2VhcmNoU29ydE1vZGUnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxTZWFyY2hTb3J0U2NvcmUnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxTZWFyY2hTb3J0VHlwZScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFNlcnZpY2VNaXNzaW5nRXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcU3RvcmFnZUJhY2tlbmQnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxTdG9yZVNlbWFudGljcycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFN1YmRvY3VtZW50RXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcVGVtcEZhaWxFeGNlcHRpb24nID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxUZXJtRmFjZXRSZXN1bHQnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxUZXJtUmFuZ2VTZWFyY2hRdWVyeScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFRlcm1TZWFyY2hGYWNldCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFRlcm1TZWFyY2hRdWVyeScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFRocmVzaG9sZExvZ2dpbmdUcmFjZXInID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxUaW1lb3V0RXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcVG91Y2hPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcVW5sb2NrT3B0aW9ucycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFVwc2VydE9wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxVcHNlcnRVc2VyT3B0aW9ucycgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFVzZXInID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxVc2VyQW5kTWV0YWRhdGEnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxVc2VyTWFuYWdlcicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFZhbHVlUmVjb3JkZXInID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxWYWx1ZVRvb0JpZ0V4Y2VwdGlvbicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFZpZXcnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxWaWV3Q29uc2lzdGVuY3knID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxWaWV3RXhjZXB0aW9uJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcVmlld0luZGV4TWFuYWdlcicgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFZpZXdNZXRhRGF0YScgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFZpZXdPcHRpb25zJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcVmlld09yZGVyaW5nJyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdWNoYmFzZVxcVmlld1Jlc3VsdCcgPT4gJ2NvdWNoYmFzZS9jb3VjaGJhc2Uuc3R1YicsICdDb3VjaGJhc2VcXFZpZXdSb3cnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxXYXRjaFF1ZXJ5SW5kZXhlc09wdGlvbnMnID0+ICdjb3VjaGJhc2UvY291Y2hiYXNlLnN0dWInLCAnQ291Y2hiYXNlXFxXaWxkY2FyZFNlYXJjaFF1ZXJ5JyA9PiAnY291Y2hiYXNlL2NvdWNoYmFzZS5zdHViJywgJ0NvdW50YWJsZScgPT4gJ0NvcmUvQ29yZV9jLnN0dWInLCAnQ3J5cHRvXFxCYXNlNjQnID0+ICdjcnlwdG8vY3J5cHRvLnN0dWInLCAnQ3J5cHRvXFxCYXNlNjRFeGNlcHRpb24nID0+ICdjcnlwdG8vY3J5cHRvLnN0dWInLCAnQ3J5cHRvXFxDTUFDJyA9PiAnY3J5cHRvL2NyeXB0by5zdHViJywgJ0NyeXB0b1xcQ2lwaGVyJyA9PiAnY3J5cHRvL2NyeXB0by5zdHViJywgJ0NyeXB0b1xcQ2lwaGVyRXhjZXB0aW9uJyA9PiAnY3J5cHRvL2NyeXB0by5zdHViJywgJ0NyeXB0b1xcSE1BQycgPT4gJ2NyeXB0by9jcnlwdG8uc3R1YicsICdDcnlwdG9cXEhhc2gnID0+ICdjcnlwdG8vY3J5cHRvLnN0dWInLCAnQ3J5cHRvXFxIYXNoRXhjZXB0aW9uJyA9PiAnY3J5cHRvL2NyeXB0by5zdHViJywgJ0NyeXB0b1xcS0RGJyA9PiAnY3J5cHRvL2NyeXB0by5zdHViJywgJ0NyeXB0b1xcS0RGRXhjZXB0aW9uJyA9PiAnY3J5cHRvL2NyeXB0by5zdHViJywgJ0NyeXB0b1xcTUFDJyA9PiAnY3J5cHRvL2NyeXB0by5zdHViJywgJ0NyeXB0b1xcTUFDRXhjZXB0aW9uJyA9PiAnY3J5cHRvL2NyeXB0by5zdHViJywgJ0NyeXB0b1xcUEJLREYyJyA9PiAnY3J5cHRvL2NyeXB0by5zdHViJywgJ0NyeXB0b1xcUEJLREYyRXhjZXB0aW9uJyA9PiAnY3J5cHRvL2NyeXB0by5zdHViJywgJ0NyeXB0b1xcUmFuZCcgPT4gJ2NyeXB0by9jcnlwdG8uc3R1YicsICdDcnlwdG9cXFJhbmRFeGNlcHRpb24nID0+ICdjcnlwdG8vY3J5cHRvLnN0dWInLCAnQ3VybEhhbmRsZScgPT4gJ2N1cmwvY3VybC5zdHViJywgJ0N1cmxNdWx0aUhhbmRsZScgPT4gJ2N1cmwvY3VybC5zdHViJywgJ0N1cmxTaGFyZUhhbmRsZScgPT4gJ2N1cmwvY3VybC5zdHViJywgJ0RPTUF0dHInID0+ICdkb20vZG9tX2Muc3R1YicsICdET01DZGF0YVNlY3Rpb24nID0+ICdkb20vZG9tX2Muc3R1YicsICdET01DaGFyYWN0ZXJEYXRhJyA9PiAnZG9tL2RvbV9jLnN0dWInLCAnRE9NQ2hpbGROb2RlJyA9PiAnZG9tL2RvbV9jLnN0dWInLCAnRE9NQ29tbWVudCcgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPTUNvbmZpZ3VyYXRpb24nID0+ICdkb20vZG9tX2Muc3R1YicsICdET01Eb2N1bWVudCcgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPTURvY3VtZW50RnJhZ21lbnQnID0+ICdkb20vZG9tX2Muc3R1YicsICdET01Eb2N1bWVudFR5cGUnID0+ICdkb20vZG9tX2Muc3R1YicsICdET01Eb21FcnJvcicgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPTUVsZW1lbnQnID0+ICdkb20vZG9tX2Muc3R1YicsICdET01FbnRpdHknID0+ICdkb20vZG9tX2Muc3R1YicsICdET01FbnRpdHlSZWZlcmVuY2UnID0+ICdkb20vZG9tX2Muc3R1YicsICdET01FcnJvckhhbmRsZXInID0+ICdkb20vZG9tX2Muc3R1YicsICdET01FeGNlcHRpb24nID0+ICdkb20vZG9tX2Muc3R1YicsICdET01JbXBsZW1lbnRhdGlvbicgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPTUltcGxlbWVudGF0aW9uTGlzdCcgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPTUltcGxlbWVudGF0aW9uU291cmNlJyA9PiAnZG9tL2RvbV9jLnN0dWInLCAnRE9NTG9jYXRvcicgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPTU5hbWVMaXN0JyA9PiAnZG9tL2RvbV9jLnN0dWInLCAnRE9NTmFtZVNwYWNlTm9kZScgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPTU5hbWVkTm9kZU1hcCcgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPTU5vZGUnID0+ICdkb20vZG9tX2Muc3R1YicsICdET01Ob2RlTGlzdCcgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPTU5vdGF0aW9uJyA9PiAnZG9tL2RvbV9jLnN0dWInLCAnRE9NUGFyZW50Tm9kZScgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbicgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPTVN0cmluZ0V4dGVuZCcgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPTVN0cmluZ0xpc3QnID0+ICdkb20vZG9tX2Muc3R1YicsICdET01UZXh0JyA9PiAnZG9tL2RvbV9jLnN0dWInLCAnRE9NVHlwZWluZm8nID0+ICdkb20vZG9tX2Muc3R1YicsICdET01Vc2VyRGF0YUhhbmRsZXInID0+ICdkb20vZG9tX2Muc3R1YicsICdET01YUGF0aCcgPT4gJ2RvbS9kb21fYy5zdHViJywgJ0RPVE5FVCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ0RhdGVFcnJvcicgPT4gJ2RhdGUvZGF0ZV9jLnN0dWInLCAnRGF0ZUV4Y2VwdGlvbicgPT4gJ2RhdGUvZGF0ZV9jLnN0dWInLCAnRGF0ZUludGVydmFsJyA9PiAnZGF0ZS9kYXRlX2Muc3R1YicsICdEYXRlSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbicgPT4gJ2RhdGUvZGF0ZV9jLnN0dWInLCAnRGF0ZUludmFsaWRUaW1lWm9uZUV4Y2VwdGlvbicgPT4gJ2RhdGUvZGF0ZV9jLnN0dWInLCAnRGF0ZU1hbGZvcm1lZEludGVydmFsU3RyaW5nRXhjZXB0aW9uJyA9PiAnZGF0ZS9kYXRlX2Muc3R1YicsICdEYXRlTWFsZm9ybWVkUGVyaW9kU3RyaW5nRXhjZXB0aW9uJyA9PiAnZGF0ZS9kYXRlX2Muc3R1YicsICdEYXRlTWFsZm9ybWVkU3RyaW5nRXhjZXB0aW9uJyA9PiAnZGF0ZS9kYXRlX2Muc3R1YicsICdEYXRlT2JqZWN0RXJyb3InID0+ICdkYXRlL2RhdGVfYy5zdHViJywgJ0RhdGVQZXJpb2QnID0+ICdkYXRlL2RhdGVfYy5zdHViJywgJ0RhdGVSYW5nZUVycm9yJyA9PiAnZGF0ZS9kYXRlX2Muc3R1YicsICdEYXRlVGltZScgPT4gJ2RhdGUvZGF0ZV9jLnN0dWInLCAnRGF0ZVRpbWVJbW11dGFibGUnID0+ICdkYXRlL2RhdGVfYy5zdHViJywgJ0RhdGVUaW1lSW50ZXJmYWNlJyA9PiAnZGF0ZS9kYXRlX2Muc3R1YicsICdEYXRlVGltZVpvbmUnID0+ICdkYXRlL2RhdGVfYy5zdHViJywgJ0RiYVxcQ29ubmVjdGlvbicgPT4gJ2RiYS9Db25uZWN0aW9uLnN0dWInLCAnRGVjaW1hbFxcRGVjaW1hbCcgPT4gJ2RlY2ltYWwvZGVjaW1hbC5zdHViJywgJ0RlZmxhdGVDb250ZXh0JyA9PiAnemxpYi96bGliLnN0dWInLCAnRGVwcmVjYXRlZCcgPT4gJ0NvcmUvQ29yZV9jLnN0dWInLCAnRGlyZWN0b3J5JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ0RpcmVjdG9yeUl0ZXJhdG9yJyA9PiAnU1BML1NQTF9jMS5zdHViJywgJ0RpdmlzaW9uQnlaZXJvRXJyb3InID0+ICdDb3JlL0NvcmVfYy5zdHViJywgJ0RvbVxcQWRqYWNlbnRQb3NpdGlvbicgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcQXR0cicgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcQnJva2VuUmFuZG9tRW5naW5lRXJyb3InID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXENEQVRBU2VjdGlvbicgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcQ2hhcmFjdGVyRGF0YScgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcQ2hpbGROb2RlJyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tXFxDb21tZW50JyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tXFxEb2N1bWVudCcgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcRG9jdW1lbnRGcmFnbWVudCcgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcRG9jdW1lbnRUeXBlJyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tXFxEdGROYW1lZE5vZGVNYXAnID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXEVsZW1lbnQnID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXEVudGl0eScgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcRW50aXR5UmVmZXJlbmNlJyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tXFxIVE1MQ29sbGVjdGlvbicgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcSFRNTERvY3VtZW50JyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tXFxIVE1MRWxlbWVudCcgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcSW1wbGVtZW50YXRpb24nID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXE15c3FsJyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tXFxOYW1lZE5vZGVNYXAnID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXE5hbWVzcGFjZUluZm8nID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXE5vZGUnID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXE5vZGVMaXN0JyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tXFxOb3RhdGlvbicgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcUGFyZW50Tm9kZScgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcUHJvY2Vzc2luZ0luc3RydWN0aW9uJyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tXFxSYW5kb21FcnJvcicgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcUmFuZG9tRXhjZXB0aW9uJyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tXFxTcWxpdGUnID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXFRleHQnID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXFRva2VuTGlzdCcgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcWE1MRG9jdW1lbnQnID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXFhQYXRoJyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tYWluRXhjZXB0aW9uJyA9PiAnU1BML1NQTC5zdHViJywgJ0RzXFxDb2xsZWN0aW9uJyA9PiAnZHMvZHMuc3R1YicsICdEc1xcRGVxdWUnID0+ICdkcy9kcy5zdHViJywgJ0RzXFxIYXNoYWJsZScgPT4gJ2RzL2RzLnN0dWInLCAnRHNcXE1hcCcgPT4gJ2RzL2RzLnN0dWInLCAnRHNcXFBhaXInID0+ICdkcy9kcy5zdHViJywgJ0RzXFxQcmlvcml0eVF1ZXVlJyA9PiAnZHMvZHMuc3R1YicsICdEc1xcUXVldWUnID0+ICdkcy9kcy5zdHViJywgJ0RzXFxTZXF1ZW5jZScgPT4gJ2RzL2RzLnN0dWInLCAnRHNcXFNldCcgPT4gJ2RzL2RzLnN0dWInLCAnRHNcXFN0YWNrJyA9PiAnZHMvZHMuc3R1YicsICdEc1xcVmVjdG9yJyA9PiAnZHMvZHMuc3R1YicsICdFbGFzdGljXFxBcG1cXEN1c3RvbUVycm9yRGF0YScgPT4gJ2VsYXN0aWNfYXBtL2VsYXN0aWNfYXBtLnN0dWInLCAnRWxhc3RpY1xcQXBtXFxEaXN0cmlidXRlZFRyYWNpbmdEYXRhJyA9PiAnZWxhc3RpY19hcG0vZWxhc3RpY19hcG0uc3R1YicsICdFbGFzdGljXFxBcG1cXEVsYXN0aWNBcG0nID0+ICdlbGFzdGljX2FwbS9lbGFzdGljX2FwbS5zdHViJywgJ0VsYXN0aWNcXEFwbVxcRXhlY3V0aW9uU2VnbWVudENvbnRleHRJbnRlcmZhY2UnID0+ICdlbGFzdGljX2FwbS9lbGFzdGljX2FwbS5zdHViJywgJ0VsYXN0aWNcXEFwbVxcRXhlY3V0aW9uU2VnbWVudEludGVyZmFjZScgPT4gJ2VsYXN0aWNfYXBtL2VsYXN0aWNfYXBtLnN0dWInLCAnRWxhc3RpY1xcQXBtXFxTcGFuQ29udGV4dERiSW50ZXJmYWNlJyA9PiAnZWxhc3RpY19hcG0vZWxhc3RpY19hcG0uc3R1YicsICdFbGFzdGljXFxBcG1cXFNwYW5Db250ZXh0RGVzdGluYXRpb25JbnRlcmZhY2UnID0+ICdlbGFzdGljX2FwbS9lbGFzdGljX2FwbS5zdHViJywgJ0VsYXN0aWNcXEFwbVxcU3BhbkNvbnRleHRIdHRwSW50ZXJmYWNlJyA9PiAnZWxhc3RpY19hcG0vZWxhc3RpY19hcG0uc3R1YicsICdFbGFzdGljXFxBcG1cXFNwYW5Db250ZXh0SW50ZXJmYWNlJyA9PiAnZWxhc3RpY19hcG0vZWxhc3RpY19hcG0uc3R1YicsICdFbGFzdGljXFxBcG1cXFNwYW5JbnRlcmZhY2UnID0+ICdlbGFzdGljX2FwbS9lbGFzdGljX2FwbS5zdHViJywgJ0VsYXN0aWNcXEFwbVxcVHJhbnNhY3Rpb25CdWlsZGVySW50ZXJmYWNlJyA9PiAnZWxhc3RpY19hcG0vZWxhc3RpY19hcG0uc3R1YicsICdFbGFzdGljXFxBcG1cXFRyYW5zYWN0aW9uQ29udGV4dEludGVyZmFjZScgPT4gJ2VsYXN0aWNfYXBtL2VsYXN0aWNfYXBtLnN0dWInLCAnRWxhc3RpY1xcQXBtXFxUcmFuc2FjdGlvbkNvbnRleHRSZXF1ZXN0SW50ZXJmYWNlJyA9PiAnZWxhc3RpY19hcG0vZWxhc3RpY19hcG0uc3R1YicsICdFbGFzdGljXFxBcG1cXFRyYW5zYWN0aW9uQ29udGV4dFJlcXVlc3RVcmxJbnRlcmZhY2UnID0+ICdlbGFzdGljX2FwbS9lbGFzdGljX2FwbS5zdHViJywgJ0VsYXN0aWNcXEFwbVxcVHJhbnNhY3Rpb25JbnRlcmZhY2UnID0+ICdlbGFzdGljX2FwbS9lbGFzdGljX2FwbS5zdHViJywgJ0VtcHR5SXRlcmF0b3InID0+ICdTUEwvU1BMLnN0dWInLCAnRW5jaGFudEJyb2tlcicgPT4gJ2VuY2hhbnQvZW5jaGFudC5zdHViJywgJ0VuY2hhbnREaWN0aW9uYXJ5JyA9PiAnZW5jaGFudC9lbmNoYW50LnN0dWInLCAnRXJyb3InID0+ICdDb3JlL0NvcmVfYy5zdHViJywgJ0Vycm9yRXhjZXB0aW9uJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdFdicgPT4gJ0V2L0V2LnN0dWInLCAnRXZDaGVjaycgPT4gJ0V2L0V2LnN0dWInLCAnRXZDaGlsZCcgPT4gJ0V2L0V2LnN0dWInLCAnRXZFbWJlZCcgPT4gJ0V2L0V2LnN0dWInLCAnRXZGb3JrJyA9PiAnRXYvRXYuc3R1YicsICdFdklkbGUnID0+ICdFdi9Fdi5zdHViJywgJ0V2SW8nID0+ICdFdi9Fdi5zdHViJywgJ0V2TG9vcCcgPT4gJ0V2L0V2LnN0dWInLCAnRXZQZXJpb2RpYycgPT4gJ0V2L0V2LnN0dWInLCAnRXZQcmVwYXJlJyA9PiAnRXYvRXYuc3R1YicsICdFdlNpZ25hbCcgPT4gJ0V2L0V2LnN0dWInLCAnRXZTdGF0JyA9PiAnRXYvRXYuc3R1YicsICdFdlRpbWVyJyA9PiAnRXYvRXYuc3R1YicsICdFdldhdGNoZXInID0+ICdFdi9Fdi5zdHViJywgJ0V2ZW50JyA9PiAnZXZlbnQvZXZlbnQuc3R1YicsICdFdmVudEJhc2UnID0+ICdldmVudC9ldmVudC5zdHViJywgJ0V2ZW50QnVmZmVyJyA9PiAnZXZlbnQvZXZlbnQuc3R1YicsICdFdmVudEJ1ZmZlckV2ZW50JyA9PiAnZXZlbnQvZXZlbnQuc3R1YicsICdFdmVudENvbmZpZycgPT4gJ2V2ZW50L2V2ZW50LnN0dWInLCAnRXZlbnREbnNCYXNlJyA9PiAnZXZlbnQvZXZlbnQuc3R1YicsICdFdmVudEh0dHAnID0+ICdldmVudC9ldmVudC5zdHViJywgJ0V2ZW50SHR0cENvbm5lY3Rpb24nID0+ICdldmVudC9ldmVudC5zdHViJywgJ0V2ZW50SHR0cFJlcXVlc3QnID0+ICdldmVudC9ldmVudC5zdHViJywgJ0V2ZW50TGlzdGVuZXInID0+ICdldmVudC9ldmVudC5zdHViJywgJ0V2ZW50U3NsQ29udGV4dCcgPT4gJ2V2ZW50L2V2ZW50LnN0dWInLCAnRXZlbnRVdGlsJyA9PiAnZXZlbnQvZXZlbnQuc3R1YicsICdFeGNlcHRpb24nID0+ICdDb3JlL0NvcmVfYy5zdHViJywgJ0ZBTk5Db25uZWN0aW9uJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkZJJyA9PiAnRkZJL0ZGSS5zdHViJywgJ0ZGSVxcQ0RhdGEnID0+ICdGRkkvRkZJLnN0dWInLCAnRkZJXFxDVHlwZScgPT4gJ0ZGSS9GRkkuc3R1YicsICdGRklcXEV4Y2VwdGlvbicgPT4gJ0ZGSS9GRkkuc3R1YicsICdGRklcXFBhcnNlckV4Y2VwdGlvbicgPT4gJ0ZGSS9GRkkuc3R1YicsICdGVFBcXENvbm5lY3Rpb24nID0+ICdmdHAvQ29ubmVjdGlvbi5zdHViJywgJ0ZpYmVyJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdGaWJlckVycm9yJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdGaWxlc3lzdGVtSXRlcmF0b3InID0+ICdTUEwvU1BMX2MxLnN0dWInLCAnRmlsdGVySXRlcmF0b3InID0+ICdTUEwvU1BMLnN0dWInLCAnR0VPU0dlb21ldHJ5JyA9PiAnZ2Vvcy9nZW9zLnN0dWInLCAnR0VPU1dLQlJlYWRlcicgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NXS0JXcml0ZXInID0+ICdnZW9zL2dlb3Muc3R1YicsICdHRU9TV0tUUmVhZGVyJyA9PiAnZ2Vvcy9nZW9zLnN0dWInLCAnR0VPU1dLVFdyaXRlcicgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dNUCcgPT4gJ2dtcC9nbXAuc3R1YicsICdHZEZvbnQnID0+ICdnZC9HZEZvbnQuc3R1YicsICdHZEltYWdlJyA9PiAnZ2QvZ2Quc3R1YicsICdHZWFybWFuQ2xpZW50JyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR2Vhcm1hbkV4Y2VwdGlvbicgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dlYXJtYW5Kb2InID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHZWFybWFuVGFzaycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dlYXJtYW5Xb3JrZXInID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHZW5lcmF0b3InID0+ICdzdGFuZGFyZC9fdHlwZXMuc3R1YicsICdHbG9iSXRlcmF0b3InID0+ICdTUEwvU1BMX2MxLnN0dWInLCAnR21hZ2ljaycgPT4gJ2dtYWdpY2svZ21hZ2ljay5zdHViJywgJ0dtYWdpY2tEcmF3JyA9PiAnZ21hZ2ljay9nbWFnaWNrLnN0dWInLCAnR21hZ2lja0V4Y2VwdGlvbicgPT4gJ2dtYWdpY2svZ21hZ2ljay5zdHViJywgJ0dtYWdpY2tQaXhlbCcgPT4gJ2dtYWdpY2svZ21hZ2ljay5zdHViJywgJ0dtYWdpY2tQaXhlbEV4Y2VwdGlvbicgPT4gJ2dtYWdpY2svZ21hZ2ljay5zdHViJywgJ0dycGNcXENhbGwnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxDYWxsQ3JlZGVudGlhbHMnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxDaGFubmVsJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcQ2hhbm5lbENyZWRlbnRpYWxzJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcU2VydmVyJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcU2VydmVyQ3JlZGVudGlhbHMnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxUaW1ldmFsJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnSGFzaENvbnRleHQnID0+ICdoYXNoL2hhc2guc3R1YicsICdIdHRwRGVmbGF0ZVN0cmVhbScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0h0dHBFbmNvZGluZ0V4Y2VwdGlvbicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0h0dHBFeGNlcHRpb24nID0+ICdodHRwL2h0dHAuc3R1YicsICdIdHRwSGVhZGVyRXhjZXB0aW9uJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSHR0cEluZmxhdGVTdHJlYW0nID0+ICdodHRwL2h0dHAuc3R1YicsICdIdHRwSW52YWxpZFBhcmFtRXhjZXB0aW9uJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSHR0cE1hbGZvcm1lZEhlYWRlcnNFeGNlcHRpb24nID0+ICdodHRwL2h0dHAuc3R1YicsICdIdHRwTWVzc2FnZScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0h0dHBNZXNzYWdlVHlwZUV4Y2VwdGlvbicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0h0dHBRdWVyeVN0cmluZycgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0h0dHBRdWVyeVN0cmluZ0V4Y2VwdGlvbicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0h0dHBSZXF1ZXN0JyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSHR0cFJlcXVlc3REYXRhU2hhcmUnID0+ICdodHRwL2h0dHAuc3R1YicsICdIdHRwUmVxdWVzdEV4Y2VwdGlvbicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0h0dHBSZXF1ZXN0TWV0aG9kRXhjZXB0aW9uJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSHR0cFJlcXVlc3RQb29sJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSHR0cFJlcXVlc3RQb29sRXhjZXB0aW9uJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSHR0cFJlc3BvbnNlJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSHR0cFJlc3BvbnNlRXhjZXB0aW9uJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSHR0cFJ1bnRpbWVFeGNlcHRpb24nID0+ICdodHRwL2h0dHAuc3R1YicsICdIdHRwU29ja2V0RXhjZXB0aW9uJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSHR0cFVybEV4Y2VwdGlvbicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0h0dHBVdGlsJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSU1BUFxcQ29ubmVjdGlvbicgPT4gJ2ltYXAvQ29ubmVjdGlvbi5zdHViJywgJ0ltYWdpY2snID0+ICdpbWFnaWNrL2ltYWdpY2suc3R1YicsICdJbWFnaWNrRHJhdycgPT4gJ2ltYWdpY2svaW1hZ2ljay5zdHViJywgJ0ltYWdpY2tEcmF3RXhjZXB0aW9uJyA9PiAnaW1hZ2ljay9pbWFnaWNrLnN0dWInLCAnSW1hZ2lja0V4Y2VwdGlvbicgPT4gJ2ltYWdpY2svaW1hZ2ljay5zdHViJywgJ0ltYWdpY2tLZXJuZWwnID0+ICdpbWFnaWNrL2ltYWdpY2suc3R1YicsICdJbWFnaWNrS2VybmVsRXhjZXB0aW9uJyA9PiAnaW1hZ2ljay9pbWFnaWNrLnN0dWInLCAnSW1hZ2lja1BpeGVsJyA9PiAnaW1hZ2ljay9pbWFnaWNrLnN0dWInLCAnSW1hZ2lja1BpeGVsRXhjZXB0aW9uJyA9PiAnaW1hZ2ljay9pbWFnaWNrLnN0dWInLCAnSW1hZ2lja1BpeGVsSXRlcmF0b3InID0+ICdpbWFnaWNrL2ltYWdpY2suc3R1YicsICdJbWFnaWNrUGl4ZWxJdGVyYXRvckV4Y2VwdGlvbicgPT4gJ2ltYWdpY2svaW1hZ2ljay5zdHViJywgJ0luZmluaXRlSXRlcmF0b3InID0+ICdTUEwvU1BMLnN0dWInLCAnSW5mbGF0ZUNvbnRleHQnID0+ICd6bGliL3psaWIuc3R1YicsICdJbnRlcm5hbEl0ZXJhdG9yJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdJbnRsQnJlYWtJdGVyYXRvcicgPT4gJ2ludGwvaW50bC5zdHViJywgJ0ludGxDYWxlbmRhcicgPT4gJ2ludGwvaW50bC5zdHViJywgJ0ludGxDaGFyJyA9PiAnaW50bC9JbnRsQ2hhci5zdHViJywgJ0ludGxDb2RlUG9pbnRCcmVha0l0ZXJhdG9yJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnSW50bERhdGVGb3JtYXR0ZXInID0+ICdpbnRsL2ludGwuc3R1YicsICdJbnRsRGF0ZVBhdHRlcm5HZW5lcmF0b3InID0+ICdpbnRsL0ludGxEYXRlUGF0dGVybkdlbmVyYXRvci5zdHViJywgJ0ludGxFeGNlcHRpb24nID0+ICdpbnRsL2ludGwuc3R1YicsICdJbnRsR3JlZ29yaWFuQ2FsZW5kYXInID0+ICdpbnRsL2ludGwuc3R1YicsICdJbnRsSXRlcmF0b3InID0+ICdpbnRsL2ludGwuc3R1YicsICdJbnRsUGFydHNJdGVyYXRvcicgPT4gJ2ludGwvaW50bC5zdHViJywgJ0ludGxSdWxlQmFzZWRCcmVha0l0ZXJhdG9yJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnSW50bFRpbWVab25lJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uJyA9PiAnU1BML1NQTC5zdHViJywgJ0l0ZXJhdG9yJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdJdGVyYXRvckFnZ3JlZ2F0ZScgPT4gJ0NvcmUvQ29yZV9jLnN0dWInLCAnSXRlcmF0b3JJdGVyYXRvcicgPT4gJ1NQTC9TUEwuc3R1YicsICdKYXZhRXhjZXB0aW9uJyA9PiAnemVuZC96ZW5kLnN0dWInLCAnSnNvbkV4Y2VwdGlvbicgPT4gJ2pzb24vanNvbi5zdHViJywgJ0pzb25JbmNyZW1lbnRhbFBhcnNlcicgPT4gJ2pzb24vanNvbi5zdHViJywgJ0pzb25TZXJpYWxpemFibGUnID0+ICdqc29uL2pzb24uc3R1YicsICdKdWR5JyA9PiAnanVkeS9qdWR5LnN0dWInLCAnTERBUFxcQ29ubmVjdGlvbicgPT4gJ2xkYXAvQ29ubmVjdGlvbi5zdHViJywgJ0xEQVBcXFJlc3VsdCcgPT4gJ2xkYXAvUmVzdWx0LnN0dWInLCAnTERBUFxcUmVzdWx0RW50cnknID0+ICdsZGFwL1Jlc3VsdEVudHJ5LnN0dWInLCAnTGVuZ3RoRXhjZXB0aW9uJyA9PiAnU1BML1NQTC5zdHViJywgJ0xldmVsREInID0+ICdsZXZlbGRiL0xldmVsREIuc3R1YicsICdMZXZlbERCRXhjZXB0aW9uJyA9PiAnbGV2ZWxkYi9MZXZlbERCLnN0dWInLCAnTGV2ZWxEQkl0ZXJhdG9yJyA9PiAnbGV2ZWxkYi9MZXZlbERCLnN0dWInLCAnTGV2ZWxEQlNuYXBzaG90JyA9PiAnbGV2ZWxkYi9MZXZlbERCLnN0dWInLCAnTGV2ZWxEQldyaXRlQmF0Y2gnID0+ICdsZXZlbGRiL0xldmVsREIuc3R1YicsICdMaWJYTUxFcnJvcicgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMaW1pdEl0ZXJhdG9yJyA9PiAnU1BML1NQTC5zdHViJywgJ0xvY2FsZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ0xvZ2ljRXhjZXB0aW9uJyA9PiAnU1BML1NQTC5zdHViJywgJ0x1YScgPT4gJ2x1YS9sdWEuc3R1YicsICdMdWFTYW5kYm94JyA9PiAnTHVhU2FuZGJveC9MdWFTYW5kYm94LnN0dWInLCAnTHVhU2FuZGJveEVycm9yJyA9PiAnTHVhU2FuZGJveC9MdWFTYW5kYm94LnN0dWInLCAnTHVhU2FuZGJveEVycm9yRXJyb3InID0+ICdMdWFTYW5kYm94L0x1YVNhbmRib3guc3R1YicsICdMdWFTYW5kYm94RmF0YWxFcnJvcicgPT4gJ0x1YVNhbmRib3gvTHVhU2FuZGJveC5zdHViJywgJ0x1YVNhbmRib3hGdW5jdGlvbicgPT4gJ0x1YVNhbmRib3gvTHVhU2FuZGJveC5zdHViJywgJ0x1YVNhbmRib3hNZW1vcnlFcnJvcicgPT4gJ0x1YVNhbmRib3gvTHVhU2FuZGJveC5zdHViJywgJ0x1YVNhbmRib3hSdW50aW1lRXJyb3InID0+ICdMdWFTYW5kYm94L0x1YVNhbmRib3guc3R1YicsICdMdWFTYW5kYm94U3ludGF4RXJyb3InID0+ICdMdWFTYW5kYm94L0x1YVNhbmRib3guc3R1YicsICdMdWFTYW5kYm94VGltZW91dEVycm9yJyA9PiAnTHVhU2FuZGJveC9MdWFTYW5kYm94LnN0dWInLCAnTWVtY2FjaGUnID0+ICdtZW1jYWNoZS9tZW1jYWNoZS5zdHViJywgJ01lbWNhY2hlUG9vbCcgPT4gJ21lbWNhY2hlL21lbWNhY2hlLnN0dWInLCAnTWVtY2FjaGVkJyA9PiAnbWVtY2FjaGVkL21lbWNhY2hlZC5zdHViJywgJ01lbWNhY2hlZEV4Y2VwdGlvbicgPT4gJ21lbWNhY2hlZC9tZW1jYWNoZWQuc3R1YicsICdNZXNzYWdlRm9ybWF0dGVyJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnTWVzc2FnZVBhY2snID0+ICdtc2dwYWNrL21zZ3BhY2suc3R1YicsICdNZXNzYWdlUGFja1VucGFja2VyJyA9PiAnbXNncGFjay9tc2dwYWNrLnN0dWInLCAnTW9uZ28nID0+ICdtb25nby9tb25nby5zdHViJywgJ01vbmdvQmluRGF0YScgPT4gJ21vbmdvL21vbmdvLnN0dWInLCAnTW9uZ29DbGllbnQnID0+ICdtb25nby9tb25nby5zdHViJywgJ01vbmdvQ29kZScgPT4gJ21vbmdvL21vbmdvLnN0dWInLCAnTW9uZ29Db2xsZWN0aW9uJyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb0NvbW1hbmRDdXJzb3InID0+ICdtb25nby9tb25nby5zdHViJywgJ01vbmdvQ29ubmVjdGlvbkV4Y2VwdGlvbicgPT4gJ21vbmdvL21vbmdvLnN0dWInLCAnTW9uZ29DdXJzb3InID0+ICdtb25nby9tb25nby5zdHViJywgJ01vbmdvQ3Vyc29yRXhjZXB0aW9uJyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb0N1cnNvckludGVyZmFjZScgPT4gJ21vbmdvL21vbmdvLnN0dWInLCAnTW9uZ29DdXJzb3JUaW1lb3V0RXhjZXB0aW9uJyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb0RCJyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb0RCUmVmJyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb0RCXFxCU09OXFxCaW5hcnknID0+ICdtb25nb2RiL0JTT04vQmluYXJ5LnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcQmluYXJ5SW50ZXJmYWNlJyA9PiAnbW9uZ29kYi9CU09OL0JpbmFyeUludGVyZmFjZS5zdHViJywgJ01vbmdvREJcXEJTT05cXERCUG9pbnRlcicgPT4gJ21vbmdvZGIvQlNPTi9EQlBvaW50ZXIuc3R1YicsICdNb25nb0RCXFxCU09OXFxEZWNpbWFsMTI4JyA9PiAnbW9uZ29kYi9CU09OL0RlY2ltYWwxMjguc3R1YicsICdNb25nb0RCXFxCU09OXFxEZWNpbWFsMTI4SW50ZXJmYWNlJyA9PiAnbW9uZ29kYi9CU09OL0RlY2ltYWwxMjhJbnRlcmZhY2Uuc3R1YicsICdNb25nb0RCXFxCU09OXFxEb2N1bWVudCcgPT4gJ21vbmdvZGIvQlNPTi9Eb2N1bWVudC5zdHViJywgJ01vbmdvREJcXEJTT05cXEludDY0JyA9PiAnbW9uZ29kYi9CU09OL0ludDY0LnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcSXRlcmF0b3InID0+ICdtb25nb2RiL0JTT04vSXRlcmF0b3Iuc3R1YicsICdNb25nb0RCXFxCU09OXFxKYXZhc2NyaXB0JyA9PiAnbW9uZ29kYi9CU09OL0phdmFzY3JpcHQuc3R1YicsICdNb25nb0RCXFxCU09OXFxKYXZhc2NyaXB0SW50ZXJmYWNlJyA9PiAnbW9uZ29kYi9CU09OL0phdmFzY3JpcHRJbnRlcmZhY2Uuc3R1YicsICdNb25nb0RCXFxCU09OXFxNYXhLZXknID0+ICdtb25nb2RiL0JTT04vTWF4S2V5LnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcTWF4S2V5SW50ZXJmYWNlJyA9PiAnbW9uZ29kYi9CU09OL01heEtleUludGVyZmFjZS5zdHViJywgJ01vbmdvREJcXEJTT05cXE1pbktleScgPT4gJ21vbmdvZGIvQlNPTi9NaW5LZXkuc3R1YicsICdNb25nb0RCXFxCU09OXFxNaW5LZXlJbnRlcmZhY2UnID0+ICdtb25nb2RiL0JTT04vTWluS2V5SW50ZXJmYWNlLnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcT2JqZWN0SWQnID0+ICdtb25nb2RiL0JTT04vT2JqZWN0SWQuc3R1YicsICdNb25nb0RCXFxCU09OXFxPYmplY3RJZEludGVyZmFjZScgPT4gJ21vbmdvZGIvQlNPTi9PYmplY3RJZEludGVyZmFjZS5zdHViJywgJ01vbmdvREJcXEJTT05cXFBhY2tlZEFycmF5JyA9PiAnbW9uZ29kYi9CU09OL1BhY2tlZEFycmF5LnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcUGVyc2lzdGFibGUnID0+ICdtb25nb2RiL0JTT04vUGVyc2lzdGFibGUuc3R1YicsICdNb25nb0RCXFxCU09OXFxSZWdleCcgPT4gJ21vbmdvZGIvQlNPTi9SZWdleC5zdHViJywgJ01vbmdvREJcXEJTT05cXFJlZ2V4SW50ZXJmYWNlJyA9PiAnbW9uZ29kYi9CU09OL1JlZ2V4SW50ZXJmYWNlLnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcU2VyaWFsaXphYmxlJyA9PiAnbW9uZ29kYi9CU09OL1NlcmlhbGl6YWJsZS5zdHViJywgJ01vbmdvREJcXEJTT05cXFN5bWJvbCcgPT4gJ21vbmdvZGIvQlNPTi9TeW1ib2wuc3R1YicsICdNb25nb0RCXFxCU09OXFxUaW1lc3RhbXAnID0+ICdtb25nb2RiL0JTT04vVGltZXN0YW1wLnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcVGltZXN0YW1wSW50ZXJmYWNlJyA9PiAnbW9uZ29kYi9CU09OL1RpbWVzdGFtcEludGVyZmFjZS5zdHViJywgJ01vbmdvREJcXEJTT05cXFR5cGUnID0+ICdtb25nb2RiL0JTT04vVHlwZS5zdHViJywgJ01vbmdvREJcXEJTT05cXFVUQ0RhdGVUaW1lJyA9PiAnbW9uZ29kYi9CU09OL1VUQ0RhdGVUaW1lLnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcVVRDRGF0ZVRpbWVJbnRlcmZhY2UnID0+ICdtb25nb2RiL0JTT04vVVRDRGF0ZVRpbWVJbnRlcmZhY2Uuc3R1YicsICdNb25nb0RCXFxCU09OXFxVbmRlZmluZWQnID0+ICdtb25nb2RiL0JTT04vVW5kZWZpbmVkLnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcVW5zZXJpYWxpemFibGUnID0+ICdtb25nb2RiL0JTT04vVW5zZXJpYWxpemFibGUuc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXEJ1bGtXcml0ZScgPT4gJ21vbmdvZGIvQnVsa1dyaXRlLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxDbGllbnRFbmNyeXB0aW9uJyA9PiAnbW9uZ29kYi9DbGllbnRFbmNyeXB0aW9uLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxDb21tYW5kJyA9PiAnbW9uZ29kYi9Db21tYW5kLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxDdXJzb3InID0+ICdtb25nb2RiL0N1cnNvci5zdHViJywgJ01vbmdvREJcXERyaXZlclxcQ3Vyc29ySWQnID0+ICdtb25nb2RiL0N1cnNvcklkLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxDdXJzb3JJbnRlcmZhY2UnID0+ICdtb25nb2RiL0N1cnNvckludGVyZmFjZS5zdHViJywgJ01vbmdvREJcXERyaXZlclxcRXhjZXB0aW9uXFxBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbicgPT4gJ21vbmdvZGIvRXhjZXB0aW9uL0F1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxFeGNlcHRpb25cXEJ1bGtXcml0ZUV4Y2VwdGlvbicgPT4gJ21vbmdvZGIvRXhjZXB0aW9uL0J1bGtXcml0ZUV4Y2VwdGlvbi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcRXhjZXB0aW9uXFxDb21tYW5kRXhjZXB0aW9uJyA9PiAnbW9uZ29kYi9FeGNlcHRpb24vQ29tbWFuZEV4Y2VwdGlvbi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcRXhjZXB0aW9uXFxDb25uZWN0aW9uRXhjZXB0aW9uJyA9PiAnbW9uZ29kYi9FeGNlcHRpb24vQ29ubmVjdGlvbkV4Y2VwdGlvbi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcRXhjZXB0aW9uXFxDb25uZWN0aW9uVGltZW91dEV4Y2VwdGlvbicgPT4gJ21vbmdvZGIvRXhjZXB0aW9uL0Nvbm5lY3Rpb25UaW1lb3V0RXhjZXB0aW9uLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxFeGNlcHRpb25cXEVuY3J5cHRpb25FeGNlcHRpb24nID0+ICdtb25nb2RiL0V4Y2VwdGlvbi9FbmNyeXB0aW9uRXhjZXB0aW9uLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxFeGNlcHRpb25cXEV4Y2VwdGlvbicgPT4gJ21vbmdvZGIvRXhjZXB0aW9uL0V4Y2VwdGlvbi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcRXhjZXB0aW9uXFxFeGVjdXRpb25UaW1lb3V0RXhjZXB0aW9uJyA9PiAnbW9uZ29kYi9FeGNlcHRpb24vRXhlY3V0aW9uVGltZW91dEV4Y2VwdGlvbi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcRXhjZXB0aW9uXFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24nID0+ICdtb25nb2RiL0V4Y2VwdGlvbi9JbnZhbGlkQXJndW1lbnRFeGNlcHRpb24uc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXEV4Y2VwdGlvblxcTG9naWNFeGNlcHRpb24nID0+ICdtb25nb2RiL0V4Y2VwdGlvbi9Mb2dpY0V4Y2VwdGlvbi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcRXhjZXB0aW9uXFxSdW50aW1lRXhjZXB0aW9uJyA9PiAnbW9uZ29kYi9FeGNlcHRpb24vUnVudGltZUV4Y2VwdGlvbi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcRXhjZXB0aW9uXFxTU0xDb25uZWN0aW9uRXhjZXB0aW9uJyA9PiAnbW9uZ29kYi9FeGNlcHRpb24vU1NMQ29ubmVjdGlvbkV4Y2VwdGlvbi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcRXhjZXB0aW9uXFxTZXJ2ZXJFeGNlcHRpb24nID0+ICdtb25nb2RiL0V4Y2VwdGlvbi9TZXJ2ZXJFeGNlcHRpb24uc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXEV4Y2VwdGlvblxcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uJyA9PiAnbW9uZ29kYi9FeGNlcHRpb24vVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxFeGNlcHRpb25cXFdyaXRlQ29uY2VybkV4Y2VwdGlvbicgPT4gJ21vbmdvZGIvRXhjZXB0aW9uL1dyaXRlQ29uY2VybkV4Y2VwdGlvbi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcRXhjZXB0aW9uXFxXcml0ZUV4Y2VwdGlvbicgPT4gJ21vbmdvZGIvRXhjZXB0aW9uL1dyaXRlRXhjZXB0aW9uLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxNYW5hZ2VyJyA9PiAnbW9uZ29kYi9NYW5hZ2VyLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxNb25pdG9yaW5nXFxDb21tYW5kRmFpbGVkRXZlbnQnID0+ICdtb25nb2RiL01vbml0b3JpbmcvQ29tbWFuZEZhaWxlZEV2ZW50LnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxNb25pdG9yaW5nXFxDb21tYW5kU3RhcnRlZEV2ZW50JyA9PiAnbW9uZ29kYi9Nb25pdG9yaW5nL0NvbW1hbmRTdGFydGVkRXZlbnQuc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXE1vbml0b3JpbmdcXENvbW1hbmRTdWJzY3JpYmVyJyA9PiAnbW9uZ29kYi9Nb25pdG9yaW5nL0NvbW1hbmRTdWJzY3JpYmVyLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxNb25pdG9yaW5nXFxDb21tYW5kU3VjY2VlZGVkRXZlbnQnID0+ICdtb25nb2RiL01vbml0b3JpbmcvQ29tbWFuZFN1Y2NlZWRlZEV2ZW50LnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxNb25pdG9yaW5nXFxMb2dTdWJzY3JpYmVyJyA9PiAnbW9uZ29kYi9Nb25pdG9yaW5nL0xvZ1N1YnNjcmliZXIuc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXE1vbml0b3JpbmdcXFNEQU1TdWJzY3JpYmVyJyA9PiAnbW9uZ29kYi9Nb25pdG9yaW5nL1NEQU1TdWJzY3JpYmVyLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxNb25pdG9yaW5nXFxTZXJ2ZXJDaGFuZ2VkRXZlbnQnID0+ICdtb25nb2RiL01vbml0b3JpbmcvU2VydmVyQ2hhbmdlZEV2ZW50LnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxNb25pdG9yaW5nXFxTZXJ2ZXJDbG9zZWRFdmVudCcgPT4gJ21vbmdvZGIvTW9uaXRvcmluZy9TZXJ2ZXJDbG9zZWRFdmVudC5zdHViJywgJ01vbmdvREJcXERyaXZlclxcTW9uaXRvcmluZ1xcU2VydmVySGVhcnRiZWF0RmFpbGVkRXZlbnQnID0+ICdtb25nb2RiL01vbml0b3JpbmcvU2VydmVySGVhcnRiZWF0RmFpbGVkRXZlbnQuc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXE1vbml0b3JpbmdcXFNlcnZlckhlYXJ0YmVhdFN0YXJ0ZWRFdmVudCcgPT4gJ21vbmdvZGIvTW9uaXRvcmluZy9TZXJ2ZXJIZWFydGJlYXRTdGFydGVkRXZlbnQuc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXE1vbml0b3JpbmdcXFNlcnZlckhlYXJ0YmVhdFN1Y2NlZWRlZEV2ZW50JyA9PiAnbW9uZ29kYi9Nb25pdG9yaW5nL1NlcnZlckhlYXJ0YmVhdFN1Y2NlZWRlZEV2ZW50LnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxNb25pdG9yaW5nXFxTZXJ2ZXJPcGVuaW5nRXZlbnQnID0+ICdtb25nb2RiL01vbml0b3JpbmcvU2VydmVyT3BlbmluZ0V2ZW50LnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxNb25pdG9yaW5nXFxTdWJzY3JpYmVyJyA9PiAnbW9uZ29kYi9Nb25pdG9yaW5nL1N1YnNjcmliZXIuc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXE1vbml0b3JpbmdcXFRvcG9sb2d5Q2hhbmdlZEV2ZW50JyA9PiAnbW9uZ29kYi9Nb25pdG9yaW5nL1RvcG9sb2d5Q2hhbmdlZEV2ZW50LnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxNb25pdG9yaW5nXFxUb3BvbG9neUNsb3NlZEV2ZW50JyA9PiAnbW9uZ29kYi9Nb25pdG9yaW5nL1RvcG9sb2d5Q2xvc2VkRXZlbnQuc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXE1vbml0b3JpbmdcXFRvcG9sb2d5T3BlbmluZ0V2ZW50JyA9PiAnbW9uZ29kYi9Nb25pdG9yaW5nL1RvcG9sb2d5T3BlbmluZ0V2ZW50LnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxRdWVyeScgPT4gJ21vbmdvZGIvUXVlcnkuc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXFJlYWRDb25jZXJuJyA9PiAnbW9uZ29kYi9SZWFkQ29uY2Vybi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcUmVhZFByZWZlcmVuY2UnID0+ICdtb25nb2RiL1JlYWRQcmVmZXJlbmNlLnN0dWInLCAnTW9uZ29EQlxcRHJpdmVyXFxTZXJ2ZXInID0+ICdtb25nb2RiL1NlcnZlci5zdHViJywgJ01vbmdvREJcXERyaXZlclxcU2VydmVyQXBpJyA9PiAnbW9uZ29kYi9TZXJ2ZXJBcGkuc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXFNlcnZlckRlc2NyaXB0aW9uJyA9PiAnbW9uZ29kYi9TZXJ2ZXJEZXNjcmlwdGlvbi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcU2Vzc2lvbicgPT4gJ21vbmdvZGIvU2Vzc2lvbi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcVG9wb2xvZ3lEZXNjcmlwdGlvbicgPT4gJ21vbmdvZGIvVG9wb2xvZ3lEZXNjcmlwdGlvbi5zdHViJywgJ01vbmdvREJcXERyaXZlclxcV3JpdGVDb25jZXJuJyA9PiAnbW9uZ29kYi9Xcml0ZUNvbmNlcm4uc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXFdyaXRlQ29uY2VybkVycm9yJyA9PiAnbW9uZ29kYi9Xcml0ZUNvbmNlcm5FcnJvci5zdHViJywgJ01vbmdvREJcXERyaXZlclxcV3JpdGVFcnJvcicgPT4gJ21vbmdvZGIvV3JpdGVFcnJvci5zdHViJywgJ01vbmdvREJcXERyaXZlclxcV3JpdGVSZXN1bHQnID0+ICdtb25nb2RiL1dyaXRlUmVzdWx0LnN0dWInLCAnTW9uZ29EYXRlJyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb0R1cGxpY2F0ZUtleUV4Y2VwdGlvbicgPT4gJ21vbmdvL21vbmdvLnN0dWInLCAnTW9uZ29FeGNlcHRpb24nID0+ICdtb25nby9tb25nby5zdHViJywgJ01vbmdvRXhlY3V0aW9uVGltZW91dEV4Y2VwdGlvbicgPT4gJ21vbmdvL21vbmdvLnN0dWInLCAnTW9uZ29HcmlkRlMnID0+ICdtb25nby9tb25nby5zdHViJywgJ01vbmdvR3JpZEZTQ3Vyc29yJyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb0dyaWRGU0V4Y2VwdGlvbicgPT4gJ21vbmdvL21vbmdvLnN0dWInLCAnTW9uZ29HcmlkRlNGaWxlJyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb0lkJyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb0ludDMyJyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb0ludDY0JyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb0xvZycgPT4gJ21vbmdvL21vbmdvLnN0dWInLCAnTW9uZ29NYXhLZXknID0+ICdtb25nby9tb25nby5zdHViJywgJ01vbmdvTWluS2V5JyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb1Bvb2wnID0+ICdtb25nby9tb25nby5zdHViJywgJ01vbmdvUHJvdG9jb2xFeGNlcHRpb24nID0+ICdtb25nby9tb25nby5zdHViJywgJ01vbmdvUmVnZXgnID0+ICdtb25nby9tb25nby5zdHViJywgJ01vbmdvUmVzdWx0RXhjZXB0aW9uJyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb1RpbWVzdGFtcCcgPT4gJ21vbmdvL21vbmdvLnN0dWInLCAnTW9uZ29VcGRhdGVCYXRjaCcgPT4gJ21vbmdvL21vbmdvLnN0dWInLCAnTW9uZ29Xcml0ZUJhdGNoJyA9PiAnbW9uZ28vbW9uZ28uc3R1YicsICdNb25nb1dyaXRlQ29uY2VybkV4Y2VwdGlvbicgPT4gJ21vbmdvL21vbmdvLnN0dWInLCAnTW9zcXVpdHRvXFxDbGllbnQnID0+ICdtb3NxdWl0dG8tcGhwL21vc3F1aXR0by1waHAuc3R1YicsICdNb3NxdWl0dG9cXEV4Y2VwdGlvbicgPT4gJ21vc3F1aXR0by1waHAvbW9zcXVpdHRvLXBocC5zdHViJywgJ01vc3F1aXR0b1xcTWVzc2FnZScgPT4gJ21vc3F1aXR0by1waHAvbW9zcXVpdHRvLXBocC5zdHViJywgJ011bHRpcGxlSXRlcmF0b3InID0+ICdTUEwvU1BMX2MxLnN0dWInLCAnTm9SZXdpbmRJdGVyYXRvcicgPT4gJ1NQTC9TUEwuc3R1YicsICdOb3JtYWxpemVyJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnTnVtYmVyRm9ybWF0dGVyJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnT0F1dGgnID0+ICdvYXV0aC9vYXV0aC5zdHViJywgJ09BdXRoRXhjZXB0aW9uJyA9PiAnb2F1dGgvb2F1dGguc3R1YicsICdPQXV0aFByb3ZpZGVyJyA9PiAnb2F1dGgvb2F1dGguc3R1YicsICdPQ0lDb2xsZWN0aW9uJyA9PiAnb2NpOC9vY2k4djMuc3R1YicsICdPQ0lMb2InID0+ICdvY2k4L29jaTh2My5zdHViJywgJ09DSV9Db2xsZWN0aW9uJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnT0NJX0xvYicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09wZW5TU0xBc3ltbWV0cmljS2V5JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT3BlblNTTENlcnRpZmljYXRlJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT3BlblNTTENlcnRpZmljYXRlU2lnbmluZ1JlcXVlc3QnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPdXRPZkJvdW5kc0V4Y2VwdGlvbicgPT4gJ1NQTC9TUEwuc3R1YicsICdPdXRPZlJhbmdlRXhjZXB0aW9uJyA9PiAnU1BML1NQTC5zdHViJywgJ091dGVySXRlcmF0b3InID0+ICdTUEwvU1BMLnN0dWInLCAnT3ZlcmZsb3dFeGNlcHRpb24nID0+ICdTUEwvU1BMLnN0dWInLCAnT3ZlcnJpZGUnID0+ICdDb3JlL0NvcmVfYy5zdHViJywgJ093c3JlcXVlc3RPYmonID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnUERGbGliJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERmxpYkV4Y2VwdGlvbicgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQRE8nID0+ICdQRE8vUERPLnN0dWInLCAnUERPRXhjZXB0aW9uJyA9PiAnUERPL1BETy5zdHViJywgJ1BET1JvdycgPT4gJ1BETy9QRE8uc3R1YicsICdQRE9TdGF0ZW1lbnQnID0+ICdQRE8vUERPLnN0dWInLCAnUFNwZWxsXFxDb25maWcnID0+ICdwc3BlbGwvcHNwZWxsX2Muc3R1YicsICdQU3BlbGxcXERpY3Rpb25hcnknID0+ICdwc3BlbGwvcHNwZWxsX2Muc3R1YicsICdQYXJlbnRJdGVyYXRvcicgPT4gJ1NQTC9TUEwuc3R1YicsICdQYXJsZVxcRXJyb3JJbmZvJyA9PiAnUGFybGUvRXJyb3JJbmZvLnN0dWInLCAnUGFybGVcXExleGVyJyA9PiAnUGFybGUvTGV4ZXIuc3R1YicsICdQYXJsZVxcTGV4ZXJFeGNlcHRpb24nID0+ICdQYXJsZS9MZXhlckV4Y2VwdGlvbi5zdHViJywgJ1BhcmxlXFxQYXJzZXInID0+ICdQYXJsZS9QYXJzZXIuc3R1YicsICdQYXJsZVxcUGFyc2VyRXhjZXB0aW9uJyA9PiAnUGFybGUvUGFyc2VyRXhjZXB0aW9uLnN0dWInLCAnUGFybGVcXFJMZXhlcicgPT4gJ1BhcmxlL1JMZXhlci5zdHViJywgJ1BhcmxlXFxSUGFyc2VyJyA9PiAnUGFybGUvUlBhcnNlci5zdHViJywgJ1BhcmxlXFxTdGFjaycgPT4gJ1BhcmxlL1N0YWNrLnN0dWInLCAnUGFybGVcXFRva2VuJyA9PiAnUGFybGUvVG9rZW4uc3R1YicsICdQYXJzZUVycm9yJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdQY250bFxcUW9zQ2xhc3MnID0+ICdwY250bC9wY250bF9jLnN0dWInLCAnUGRvXFxNeXNxbCcgPT4gJ1BETy9QRE8uc3R1YicsICdQZG9cXFNxbGl0ZScgPT4gJ1BETy9QRE8uc3R1YicsICdQZ1NxbFxcQ29ubmVjdGlvbicgPT4gJ3Bnc3FsL3Bnc3FsX2Muc3R1YicsICdQZ1NxbFxcTG9iJyA9PiAncGdzcWwvcGdzcWxfYy5zdHViJywgJ1BnU3FsXFxSZXN1bHQnID0+ICdwZ3NxbC9wZ3NxbF9jLnN0dWInLCAnUGhhcicgPT4gJ1BoYXIvUGhhci5zdHViJywgJ1BoYXJEYXRhJyA9PiAnUGhhci9QaGFyLnN0dWInLCAnUGhhckV4Y2VwdGlvbicgPT4gJ1BoYXIvUGhhci5zdHViJywgJ1BoYXJGaWxlSW5mbycgPT4gJ1BoYXIvUGhhci5zdHViJywgJ1BocFRva2VuJyA9PiAndG9rZW5pemVyL1BocFRva2VuLnN0dWInLCAnUG9vbCcgPT4gJ3B0aHJlYWRzL3B0aHJlYWRzLnN0dWInLCAnUHJvcGVydHlIb29rVHlwZScgPT4gJ1JlZmxlY3Rpb24vUHJvcGVydHlIb29rVHlwZS5zdHViJywgJ1JSRENyZWF0b3InID0+ICdycmQvcnJkLnN0dWInLCAnUlJER3JhcGgnID0+ICdycmQvcnJkLnN0dWInLCAnUlJEVXBkYXRlcicgPT4gJ3JyZC9ycmQuc3R1YicsICdSYW5kb21cXEJyb2tlblJhbmRvbUVuZ2luZUVycm9yJyA9PiAncmFuZG9tL3JhbmRvbS5zdHViJywgJ1JhbmRvbVxcQ3J5cHRvU2FmZUVuZ2luZScgPT4gJ3JhbmRvbS9yYW5kb20uc3R1YicsICdSYW5kb21cXEVuZ2luZScgPT4gJ3JhbmRvbS9yYW5kb20uc3R1YicsICdSYW5kb21cXEVuZ2luZVxcTXQxOTkzNycgPT4gJ3JhbmRvbS9yYW5kb20uc3R1YicsICdSYW5kb21cXEVuZ2luZVxcUGNnT25lc2VxMTI4WHNsUnI2NCcgPT4gJ3JhbmRvbS9yYW5kb20uc3R1YicsICdSYW5kb21cXEVuZ2luZVxcU2VjdXJlJyA9PiAncmFuZG9tL3JhbmRvbS5zdHViJywgJ1JhbmRvbVxcRW5naW5lXFxYb3NoaXJvMjU2U3RhclN0YXInID0+ICdyYW5kb20vcmFuZG9tLnN0dWInLCAnUmFuZG9tXFxJbnRlcnZhbEJvdW5kYXJ5JyA9PiAncmFuZG9tL3JhbmRvbS5zdHViJywgJ1JhbmRvbVxcUmFuZG9tRXJyb3InID0+ICdyYW5kb20vcmFuZG9tLnN0dWInLCAnUmFuZG9tXFxSYW5kb21FeGNlcHRpb24nID0+ICdyYW5kb20vcmFuZG9tLnN0dWInLCAnUmFuZG9tXFxSYW5kb21pemVyJyA9PiAncmFuZG9tL3JhbmRvbS5zdHViJywgJ1JhbmdlRXhjZXB0aW9uJyA9PiAnU1BML1NQTC5zdHViJywgJ1JhckFyY2hpdmUnID0+ICdyYXIvcmFyLnN0dWInLCAnUmFyRW50cnknID0+ICdyYXIvcmFyLnN0dWInLCAnUmFyRXhjZXB0aW9uJyA9PiAncmFyL3Jhci5zdHViJywgJ1JkS2Fma2EnID0+ICdyZGthZmthL1JkS2Fma2Euc3R1YicsICdSZEthZmthXFxDb25mJyA9PiAncmRrYWZrYS9SZEthZmthL0NvbmYuc3R1YicsICdSZEthZmthXFxDb25zdW1lcicgPT4gJ3Jka2Fma2EvUmRLYWZrYS9Db25zdW1lci5zdHViJywgJ1JkS2Fma2FcXENvbnN1bWVyVG9waWMnID0+ICdyZGthZmthL1JkS2Fma2EvQ29uc3VtZXJUb3BpYy5zdHViJywgJ1JkS2Fma2FcXEV4Y2VwdGlvbicgPT4gJ3Jka2Fma2EvUmRLYWZrYS9FeGNlcHRpb24uc3R1YicsICdSZEthZmthXFxLYWZrYUNvbnN1bWVyJyA9PiAncmRrYWZrYS9SZEthZmthL0thZmthQ29uc3VtZXIuc3R1YicsICdSZEthZmthXFxLYWZrYUNvbnN1bWVyVG9waWMnID0+ICdyZGthZmthL1JkS2Fma2EvS2Fma2FDb25zdW1lclRvcGljLnN0dWInLCAnUmRLYWZrYVxcS2Fma2FFcnJvckV4Y2VwdGlvbicgPT4gJ3Jka2Fma2EvUmRLYWZrYS9LYWZrYUVycm9yRXhjZXB0aW9uLnN0dWInLCAnUmRLYWZrYVxcTWVzc2FnZScgPT4gJ3Jka2Fma2EvUmRLYWZrYS9NZXNzYWdlLnN0dWInLCAnUmRLYWZrYVxcTWV0YWRhdGEnID0+ICdyZGthZmthL1JkS2Fma2EvTWV0YWRhdGEuc3R1YicsICdSZEthZmthXFxNZXRhZGF0YVxcQnJva2VyJyA9PiAncmRrYWZrYS9SZEthZmthL01ldGFkYXRhL0Jyb2tlci5zdHViJywgJ1JkS2Fma2FcXE1ldGFkYXRhXFxDb2xsZWN0aW9uJyA9PiAncmRrYWZrYS9SZEthZmthL01ldGFkYXRhL0NvbGxlY3Rpb24uc3R1YicsICdSZEthZmthXFxNZXRhZGF0YVxcUGFydGl0aW9uJyA9PiAncmRrYWZrYS9SZEthZmthL01ldGFkYXRhL1BhcnRpdGlvbi5zdHViJywgJ1JkS2Fma2FcXE1ldGFkYXRhXFxUb3BpYycgPT4gJ3Jka2Fma2EvUmRLYWZrYS9NZXRhZGF0YS9Ub3BpYy5zdHViJywgJ1JkS2Fma2FcXFByb2R1Y2VyJyA9PiAncmRrYWZrYS9SZEthZmthL1Byb2R1Y2VyLnN0dWInLCAnUmRLYWZrYVxcUHJvZHVjZXJUb3BpYycgPT4gJ3Jka2Fma2EvUmRLYWZrYS9Qcm9kdWNlclRvcGljLnN0dWInLCAnUmRLYWZrYVxcUXVldWUnID0+ICdyZGthZmthL1JkS2Fma2EvUXVldWUuc3R1YicsICdSZEthZmthXFxUb3BpYycgPT4gJ3Jka2Fma2EvUmRLYWZrYS9Ub3BpYy5zdHViJywgJ1JkS2Fma2FcXFRvcGljQ29uZicgPT4gJ3Jka2Fma2EvUmRLYWZrYS9Ub3BpY0NvbmYuc3R1YicsICdSZEthZmthXFxUb3BpY1BhcnRpdGlvbicgPT4gJ3Jka2Fma2EvUmRLYWZrYS9Ub3BpY1BhcnRpdGlvbi5zdHViJywgJ1JlY3Vyc2l2ZUFycmF5SXRlcmF0b3InID0+ICdTUEwvU1BMLnN0dWInLCAnUmVjdXJzaXZlQ2FjaGluZ0l0ZXJhdG9yJyA9PiAnU1BML1NQTC5zdHViJywgJ1JlY3Vyc2l2ZUNhbGxiYWNrRmlsdGVySXRlcmF0b3InID0+ICdTUEwvU1BMLnN0dWInLCAnUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3InID0+ICdTUEwvU1BMX2MxLnN0dWInLCAnUmVjdXJzaXZlRmlsdGVySXRlcmF0b3InID0+ICdTUEwvU1BMLnN0dWInLCAnUmVjdXJzaXZlSXRlcmF0b3InID0+ICdTUEwvU1BMLnN0dWInLCAnUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcicgPT4gJ1NQTC9TUEwuc3R1YicsICdSZWN1cnNpdmVSZWdleEl0ZXJhdG9yJyA9PiAnU1BML1NQTC5zdHViJywgJ1JlY3Vyc2l2ZVRyZWVJdGVyYXRvcicgPT4gJ1NQTC9TUEwuc3R1YicsICdSZWRpcycgPT4gJ3JlZGlzL1JlZGlzLnN0dWInLCAnUmVkaXNBcnJheScgPT4gJ3JlZGlzL1JlZGlzQXJyYXkuc3R1YicsICdSZWRpc0NsdXN0ZXInID0+ICdyZWRpcy9SZWRpc0NsdXN0ZXIuc3R1YicsICdSZWRpc0NsdXN0ZXJFeGNlcHRpb24nID0+ICdyZWRpcy9SZWRpc0NsdXN0ZXIuc3R1YicsICdSZWRpc0V4Y2VwdGlvbicgPT4gJ3JlZGlzL1JlZGlzLnN0dWInLCAnUmVkaXNTZW50aW5lbCcgPT4gJ3JlZGlzL1JlZGlzU2VudGluZWwuc3R1YicsICdSZWZsZWN0aW9uJyA9PiAnUmVmbGVjdGlvbi9SZWZsZWN0aW9uLnN0dWInLCAnUmVmbGVjdGlvbkF0dHJpYnV0ZScgPT4gJ1JlZmxlY3Rpb24vUmVmbGVjdGlvbkF0dHJpYnV0ZS5zdHViJywgJ1JlZmxlY3Rpb25DbGFzcycgPT4gJ1JlZmxlY3Rpb24vUmVmbGVjdGlvbkNsYXNzLnN0dWInLCAnUmVmbGVjdGlvbkNsYXNzQ29uc3RhbnQnID0+ICdSZWZsZWN0aW9uL1JlZmxlY3Rpb25DbGFzc0NvbnN0YW50LnN0dWInLCAnUmVmbGVjdGlvbkNvbnN0YW50JyA9PiAnUmVmbGVjdGlvbi9SZWZsZWN0aW9uQ29uc3RhbnQuc3R1YicsICdSZWZsZWN0aW9uRW51bScgPT4gJ1JlZmxlY3Rpb24vUmVmbGVjdGlvbkVudW0uc3R1YicsICdSZWZsZWN0aW9uRW51bUJhY2tlZENhc2UnID0+ICdSZWZsZWN0aW9uL1JlZmxlY3Rpb25FbnVtQmFja2VkQ2FzZS5zdHViJywgJ1JlZmxlY3Rpb25FbnVtVW5pdENhc2UnID0+ICdSZWZsZWN0aW9uL1JlZmxlY3Rpb25FbnVtVW5pdENhc2Uuc3R1YicsICdSZWZsZWN0aW9uRXhjZXB0aW9uJyA9PiAnUmVmbGVjdGlvbi9SZWZsZWN0aW9uRXhjZXB0aW9uLnN0dWInLCAnUmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gJ1JlZmxlY3Rpb24vUmVmbGVjdGlvbkV4dGVuc2lvbi5zdHViJywgJ1JlZmxlY3Rpb25GaWJlcicgPT4gJ1JlZmxlY3Rpb24vUmVmbGVjdGlvbkZpYmVyLnN0dWInLCAnUmVmbGVjdGlvbkZ1bmN0aW9uJyA9PiAnUmVmbGVjdGlvbi9SZWZsZWN0aW9uRnVuY3Rpb24uc3R1YicsICdSZWZsZWN0aW9uRnVuY3Rpb25BYnN0cmFjdCcgPT4gJ1JlZmxlY3Rpb24vUmVmbGVjdGlvbkZ1bmN0aW9uQWJzdHJhY3Quc3R1YicsICdSZWZsZWN0aW9uR2VuZXJhdG9yJyA9PiAnUmVmbGVjdGlvbi9SZWZsZWN0aW9uR2VuZXJhdG9yLnN0dWInLCAnUmVmbGVjdGlvbkludGVyc2VjdGlvblR5cGUnID0+ICdSZWZsZWN0aW9uL1JlZmxlY3Rpb25JbnRlcnNlY3Rpb25UeXBlLnN0dWInLCAnUmVmbGVjdGlvbk1ldGhvZCcgPT4gJ1JlZmxlY3Rpb24vUmVmbGVjdGlvbk1ldGhvZC5zdHViJywgJ1JlZmxlY3Rpb25OYW1lZFR5cGUnID0+ICdSZWZsZWN0aW9uL1JlZmxlY3Rpb25OYW1lZFR5cGUuc3R1YicsICdSZWZsZWN0aW9uT2JqZWN0JyA9PiAnUmVmbGVjdGlvbi9SZWZsZWN0aW9uT2JqZWN0LnN0dWInLCAnUmVmbGVjdGlvblBhcmFtZXRlcicgPT4gJ1JlZmxlY3Rpb24vUmVmbGVjdGlvblBhcmFtZXRlci5zdHViJywgJ1JlZmxlY3Rpb25Qcm9wZXJ0eScgPT4gJ1JlZmxlY3Rpb24vUmVmbGVjdGlvblByb3BlcnR5LnN0dWInLCAnUmVmbGVjdGlvblJlZmVyZW5jZScgPT4gJ1JlZmxlY3Rpb24vUmVmbGVjdGlvblJlZmVyZW5jZS5zdHViJywgJ1JlZmxlY3Rpb25UeXBlJyA9PiAnUmVmbGVjdGlvbi9SZWZsZWN0aW9uVHlwZS5zdHViJywgJ1JlZmxlY3Rpb25VbmlvblR5cGUnID0+ICdSZWZsZWN0aW9uL1JlZmxlY3Rpb25VbmlvblR5cGUuc3R1YicsICdSZWZsZWN0aW9uWmVuZEV4dGVuc2lvbicgPT4gJ1JlZmxlY3Rpb24vUmVmbGVjdGlvblplbmRFeHRlbnNpb24uc3R1YicsICdSZWZsZWN0b3InID0+ICdSZWZsZWN0aW9uL1JlZmxlY3Rvci5zdHViJywgJ1JlZ2V4SXRlcmF0b3InID0+ICdTUEwvU1BMLnN0dWInLCAnUmVsYXlcXENsdXN0ZXInID0+ICdyZWxheS9DbHVzdGVyLnN0dWInLCAnUmVsYXlcXEV2ZW50JyA9PiAncmVsYXkvRXZlbnQuc3R1YicsICdSZWxheVxcRXZlbnRcXEZsdXNoZWQnID0+ICdyZWxheS9FdmVudHMuc3R1YicsICdSZWxheVxcRXZlbnRcXEludmFsaWRhdGVkJyA9PiAncmVsYXkvRXZlbnRzLnN0dWInLCAnUmVsYXlcXEV4Y2VwdGlvbicgPT4gJ3JlbGF5L0V4Y2VwdGlvbi5zdHViJywgJ1JlbGF5XFxLZXlUeXBlJyA9PiAncmVsYXkvS2V5VHlwZS5zdHViJywgJ1JlbGF5XFxSZWxheScgPT4gJ3JlbGF5L1JlbGF5LnN0dWInLCAnUmVsYXlcXFNlbnRpbmVsJyA9PiAncmVsYXkvU2VudGluZWwuc3R1YicsICdSZWxheVxcVGFibGUnID0+ICdyZWxheS9UYWJsZS5zdHViJywgJ1JlcXVlc3RQYXJzZUJvZHlFeGNlcHRpb24nID0+ICdDb3JlL0NvcmVfYy5zdHViJywgJ1Jlc291cmNlQnVuZGxlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnUmV0dXJuVHlwZVdpbGxDaGFuZ2UnID0+ICdDb3JlL0NvcmVfYy5zdHViJywgJ1JvdW5kaW5nTW9kZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEwLnN0dWInLCAnUnVudGltZUV4Y2VwdGlvbicgPT4gJ1NQTC9TUEwuc3R1YicsICdTTk1QJyA9PiAnc25tcC9zbm1wLnN0dWInLCAnU05NUEV4Y2VwdGlvbicgPT4gJ3NubXAvc25tcC5zdHViJywgJ1NRTGl0ZTMnID0+ICdzcWxpdGUzL3NxbGl0ZTMuc3R1YicsICdTUUxpdGUzRXhjZXB0aW9uJyA9PiAnc3FsaXRlMy9zcWxpdGUzLnN0dWInLCAnU1FMaXRlM1Jlc3VsdCcgPT4gJ3NxbGl0ZTMvc3FsaXRlMy5zdHViJywgJ1NRTGl0ZTNTdG10JyA9PiAnc3FsaXRlMy9zcWxpdGUzLnN0dWInLCAnU1FMaXRlRGF0YWJhc2UnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMaXRlRXhjZXB0aW9uJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ1NRTGl0ZVJlc3VsdCcgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdTUUxpdGVVbmJ1ZmZlcmVkJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ1NWTScgPT4gJ3N2bS9TVk0uc3R1YicsICdTVk1Nb2RlbCcgPT4gJ3N2bS9TVk1Nb2RlbC5zdHViJywgJ1NXRkFjdGlvbicgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkJpdG1hcCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkJ1dHRvbicgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkRpc3BsYXlJdGVtJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGRmlsbCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkZvbnQnID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZGb250Q2hhcicgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkdyYWRpZW50JyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGTW9ycGgnID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZNb3ZpZScgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRlNoYXBlJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGU291bmQnID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZTb3VuZEluc3RhbmNlJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGU3ByaXRlJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGVGV4dCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRlRleHRGaWVsZCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRlZpZGVvU3RyZWFtJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU2F4b25cXFNheG9uUHJvY2Vzc29yJyA9PiAnU2F4b25DL1NheG9uQy5zdHViJywgJ1NheG9uXFxTY2hlbWFWYWxpZGF0b3InID0+ICdTYXhvbkMvU2F4b25DLnN0dWInLCAnU2F4b25cXFhQYXRoUHJvY2Vzc29yJyA9PiAnU2F4b25DL1NheG9uQy5zdHViJywgJ1NheG9uXFxYUXVlcnlQcm9jZXNzb3InID0+ICdTYXhvbkMvU2F4b25DLnN0dWInLCAnU2F4b25cXFhkbUF0b21pY1ZhbHVlJyA9PiAnU2F4b25DL1NheG9uQy5zdHViJywgJ1NheG9uXFxYZG1JdGVtJyA9PiAnU2F4b25DL1NheG9uQy5zdHViJywgJ1NheG9uXFxYZG1Ob2RlJyA9PiAnU2F4b25DL1NheG9uQy5zdHViJywgJ1NheG9uXFxYZG1WYWx1ZScgPT4gJ1NheG9uQy9TYXhvbkMuc3R1YicsICdTYXhvblxcWHNsdDMwUHJvY2Vzc29yJyA9PiAnU2F4b25DL1NheG9uQy5zdHViJywgJ1NheG9uXFxYc2x0UHJvY2Vzc29yJyA9PiAnU2F4b25DL1NheG9uQy5zdHViJywgJ1NlZWthYmxlSXRlcmF0b3InID0+ICdTUEwvU1BMLnN0dWInLCAnU2Vuc2l0aXZlUGFyYW1ldGVyJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdTZW5zaXRpdmVQYXJhbWV0ZXJWYWx1ZScgPT4gJ0NvcmUvQ29yZV9jLnN0dWInLCAnU2VyaWFsaXphYmxlJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdTZXNzaW9uSGFuZGxlcicgPT4gJ3Nlc3Npb24vU2Vzc2lvbkhhbmRsZXIuc3R1YicsICdTZXNzaW9uSGFuZGxlckludGVyZmFjZScgPT4gJ3Nlc3Npb24vU2Vzc2lvbkhhbmRsZXIuc3R1YicsICdTZXNzaW9uSWRJbnRlcmZhY2UnID0+ICdzZXNzaW9uL1Nlc3Npb25IYW5kbGVyLnN0dWInLCAnU2Vzc2lvblVwZGF0ZVRpbWVzdGFtcEhhbmRsZXJJbnRlcmZhY2UnID0+ICdzZXNzaW9uL1Nlc3Npb25IYW5kbGVyLnN0dWInLCAnU2htb3AnID0+ICdzaG1vcC9zaG1vcC5zdHViJywgJ1NpbWRKc29uRXhjZXB0aW9uJyA9PiAnc2ltZGpzb24vc2ltZGpzb24uc3R1YicsICdTaW1kSnNvblZhbHVlRXJyb3InID0+ICdzaW1kanNvbi9zaW1kanNvbi5zdHViJywgJ1NpbXBsZUthZmthQ2xpZW50JyA9PiAnc2ltcGxlX2thZmthX2NsaWVudC9TaW1wbGVLYWZrYUNsaWVudC5zdHViJywgJ1NpbXBsZUthZmthQ2xpZW50XFxDb25maWd1cmF0aW9uJyA9PiAnc2ltcGxlX2thZmthX2NsaWVudC9TaW1wbGVLYWZrYUNsaWVudC9Db25maWd1cmF0aW9uLnN0dWInLCAnU2ltcGxlS2Fma2FDbGllbnRcXENvbnN1bWVyJyA9PiAnc2ltcGxlX2thZmthX2NsaWVudC9TaW1wbGVLYWZrYUNsaWVudC9Db25zdW1lci5zdHViJywgJ1NpbXBsZUthZmthQ2xpZW50XFxDb25zdW1lclRvcGljJyA9PiAnc2ltcGxlX2thZmthX2NsaWVudC9TaW1wbGVLYWZrYUNsaWVudC9Ub3BpYy5zdHViJywgJ1NpbXBsZUthZmthQ2xpZW50XFxFeGNlcHRpb24nID0+ICdzaW1wbGVfa2Fma2FfY2xpZW50L1NpbXBsZUthZmthQ2xpZW50L0V4Y2VwdGlvbi5zdHViJywgJ1NpbXBsZUthZmthQ2xpZW50XFxLYWZrYUVycm9yRXhjZXB0aW9uJyA9PiAnc2ltcGxlX2thZmthX2NsaWVudC9TaW1wbGVLYWZrYUNsaWVudC9LYWZrYUVycm9yRXhjZXB0aW9uLnN0dWInLCAnU2ltcGxlS2Fma2FDbGllbnRcXE1lc3NhZ2UnID0+ICdzaW1wbGVfa2Fma2FfY2xpZW50L1NpbXBsZUthZmthQ2xpZW50L01lc3NhZ2Uuc3R1YicsICdTaW1wbGVLYWZrYUNsaWVudFxcTWV0YWRhdGEnID0+ICdzaW1wbGVfa2Fma2FfY2xpZW50L1NpbXBsZUthZmthQ2xpZW50L01ldGFkYXRhLnN0dWInLCAnU2ltcGxlS2Fma2FDbGllbnRcXE1ldGFkYXRhXFxCcm9rZXInID0+ICdzaW1wbGVfa2Fma2FfY2xpZW50L1NpbXBsZUthZmthQ2xpZW50L01ldGFkYXRhL0Jyb2tlci5zdHViJywgJ1NpbXBsZUthZmthQ2xpZW50XFxNZXRhZGF0YVxcQ29sbGVjdGlvbicgPT4gJ3NpbXBsZV9rYWZrYV9jbGllbnQvU2ltcGxlS2Fma2FDbGllbnQvTWV0YWRhdGEvQ29sbGVjdGlvbi5zdHViJywgJ1NpbXBsZUthZmthQ2xpZW50XFxNZXRhZGF0YVxcUGFydGl0aW9uJyA9PiAnc2ltcGxlX2thZmthX2NsaWVudC9TaW1wbGVLYWZrYUNsaWVudC9NZXRhZGF0YS9QYXJ0aXRpb24uc3R1YicsICdTaW1wbGVLYWZrYUNsaWVudFxcTWV0YWRhdGFcXFRvcGljJyA9PiAnc2ltcGxlX2thZmthX2NsaWVudC9TaW1wbGVLYWZrYUNsaWVudC9NZXRhZGF0YS9Ub3BpYy5zdHViJywgJ1NpbXBsZUthZmthQ2xpZW50XFxQcm9kdWNlcicgPT4gJ3NpbXBsZV9rYWZrYV9jbGllbnQvU2ltcGxlS2Fma2FDbGllbnQvUHJvZHVjZXIuc3R1YicsICdTaW1wbGVLYWZrYUNsaWVudFxcUHJvZHVjZXJUb3BpYycgPT4gJ3NpbXBsZV9rYWZrYV9jbGllbnQvU2ltcGxlS2Fma2FDbGllbnQvVG9waWMuc3R1YicsICdTaW1wbGVLYWZrYUNsaWVudFxcVG9waWMnID0+ICdzaW1wbGVfa2Fma2FfY2xpZW50L1NpbXBsZUthZmthQ2xpZW50L1RvcGljLnN0dWInLCAnU2ltcGxlS2Fma2FDbGllbnRcXFRvcGljUGFydGl0aW9uJyA9PiAnc2ltcGxlX2thZmthX2NsaWVudC9TaW1wbGVLYWZrYUNsaWVudC9Ub3BpY1BhcnRpdGlvbi5zdHViJywgJ1NpbXBsZVhNTEVsZW1lbnQnID0+ICdTaW1wbGVYTUwvU2ltcGxlWE1MLnN0dWInLCAnU2ltcGxlWE1MSXRlcmF0b3InID0+ICdTaW1wbGVYTUwvU2ltcGxlWE1MLnN0dWInLCAnU29hcENsaWVudCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NvYXBGYXVsdCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NvYXBIZWFkZXInID0+ICdzb2FwL3NvYXAuc3R1YicsICdTb2FwUGFyYW0nID0+ICdzb2FwL3NvYXAuc3R1YicsICdTb2FwU2VydmVyJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnU29hcFZhcicgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NvYXBcXFNkbCcgPT4gJ3NvYXAvc29hcF9uLnN0dWInLCAnU29hcFxcVXJsJyA9PiAnc29hcC9zb2FwX24uc3R1YicsICdTb2NrZXQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTb2RpdW1FeGNlcHRpb24nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU29sckNsaWVudCcgPT4gJ3NvbHIvU29sckNsaWVudC5zdHViJywgJ1NvbHJDbGllbnRFeGNlcHRpb24nID0+ICdzb2xyL0V4Y2VwdGlvbnMvU29sckNsaWVudEV4Y2VwdGlvbi5zdHViJywgJ1NvbHJDb2xsYXBzZUZ1bmN0aW9uJyA9PiAnc29sci9RdWVyaWVzL1NvbHJDb2xsYXBzZUZ1bmN0aW9uLnN0dWInLCAnU29sckRpc01heFF1ZXJ5JyA9PiAnc29sci9RdWVyaWVzL1NvbHJEaXNNYXhRdWVyeS5zdHViJywgJ1NvbHJEb2N1bWVudCcgPT4gJ3NvbHIvRG9jdW1lbnRzL1NvbHJEb2N1bWVudC5zdHViJywgJ1NvbHJEb2N1bWVudEZpZWxkJyA9PiAnc29sci9Eb2N1bWVudHMvU29sckRvY3VtZW50RmllbGQuc3R1YicsICdTb2xyRXhjZXB0aW9uJyA9PiAnc29sci9FeGNlcHRpb25zL1NvbHJFeGNlcHRpb24uc3R1YicsICdTb2xyR2VuZXJpY1Jlc3BvbnNlJyA9PiAnc29sci9SZXNwb25zZXMvU29sckdlbmVyaWNSZXNwb25zZS5zdHViJywgJ1NvbHJJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24nID0+ICdzb2xyL0V4Y2VwdGlvbnMvU29scklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5zdHViJywgJ1NvbHJJbGxlZ2FsT3BlcmF0aW9uRXhjZXB0aW9uJyA9PiAnc29sci9FeGNlcHRpb25zL1NvbHJJbGxlZ2FsT3BlcmF0aW9uRXhjZXB0aW9uLnN0dWInLCAnU29scklucHV0RG9jdW1lbnQnID0+ICdzb2xyL0RvY3VtZW50cy9Tb2xySW5wdXREb2N1bWVudC5zdHViJywgJ1NvbHJNaXNzaW5nTWFuZGF0b3J5UGFyYW1ldGVyRXhjZXB0aW9uJyA9PiAnc29sci9FeGNlcHRpb25zL1NvbHJNaXNzaW5nTWFuZGF0b3J5UGFyYW1ldGVyRXhjZXB0aW9uLnN0dWInLCAnU29sck1vZGlmaWFibGVQYXJhbXMnID0+ICdzb2xyL1F1ZXJpZXMvU29sck1vZGlmaWFibGVQYXJhbXMuc3R1YicsICdTb2xyT2JqZWN0JyA9PiAnc29sci9VdGlscy9Tb2xyT2JqZWN0LnN0dWInLCAnU29sclBhcmFtcycgPT4gJ3NvbHIvUXVlcmllcy9Tb2xyUGFyYW1zLnN0dWInLCAnU29sclBpbmdSZXNwb25zZScgPT4gJ3NvbHIvUmVzcG9uc2VzL1NvbHJQaW5nUmVzcG9uc2Uuc3R1YicsICdTb2xyUXVlcnknID0+ICdzb2xyL1F1ZXJpZXMvU29sclF1ZXJ5LnN0dWInLCAnU29sclF1ZXJ5UmVzcG9uc2UnID0+ICdzb2xyL1Jlc3BvbnNlcy9Tb2xyUXVlcnlSZXNwb25zZS5zdHViJywgJ1NvbHJSZXNwb25zZScgPT4gJ3NvbHIvUmVzcG9uc2VzL1NvbHJSZXNwb25zZS5zdHViJywgJ1NvbHJTZXJ2ZXJFeGNlcHRpb24nID0+ICdzb2xyL0V4Y2VwdGlvbnMvU29sclNlcnZlckV4Y2VwdGlvbi5zdHViJywgJ1NvbHJVcGRhdGVSZXNwb25zZScgPT4gJ3NvbHIvUmVzcG9uc2VzL1NvbHJVcGRhdGVSZXNwb25zZS5zdHViJywgJ1NvbHJVdGlscycgPT4gJ3NvbHIvVXRpbHMvU29sclV0aWxzLnN0dWInLCAnU3BsQm9vbCcgPT4gJ1NwbFR5cGUvU3BsVHlwZS5zdHViJywgJ1NwbERvdWJseUxpbmtlZExpc3QnID0+ICdTUEwvU1BMX2MxLnN0dWInLCAnU3BsRW51bScgPT4gJ1NwbFR5cGUvU3BsVHlwZS5zdHViJywgJ1NwbEZpbGVJbmZvJyA9PiAnU1BML1NQTF9jMS5zdHViJywgJ1NwbEZpbGVPYmplY3QnID0+ICdTUEwvU1BMX2MxLnN0dWInLCAnU3BsRml4ZWRBcnJheScgPT4gJ1NQTC9TUExfYzEuc3R1YicsICdTcGxGbG9hdCcgPT4gJ1NwbFR5cGUvU3BsVHlwZS5zdHViJywgJ1NwbEhlYXAnID0+ICdTUEwvU1BMX2MxLnN0dWInLCAnU3BsSW50JyA9PiAnU3BsVHlwZS9TcGxUeXBlLnN0dWInLCAnU3BsTWF4SGVhcCcgPT4gJ1NQTC9TUExfYzEuc3R1YicsICdTcGxNaW5IZWFwJyA9PiAnU1BML1NQTF9jMS5zdHViJywgJ1NwbE9iamVjdFN0b3JhZ2UnID0+ICdTUEwvU1BMX2MxLnN0dWInLCAnU3BsT2JzZXJ2ZXInID0+ICdTUEwvU1BMX2MxLnN0dWInLCAnU3BsUHJpb3JpdHlRdWV1ZScgPT4gJ1NQTC9TUExfYzEuc3R1YicsICdTcGxRdWV1ZScgPT4gJ1NQTC9TUExfYzEuc3R1YicsICdTcGxTdGFjaycgPT4gJ1NQTC9TUExfYzEuc3R1YicsICdTcGxTdHJpbmcnID0+ICdTcGxUeXBlL1NwbFR5cGUuc3R1YicsICdTcGxTdWJqZWN0JyA9PiAnU1BML1NQTF9jMS5zdHViJywgJ1NwbFRlbXBGaWxlT2JqZWN0JyA9PiAnU1BML1NQTF9jMS5zdHViJywgJ1NwbFR5cGUnID0+ICdTcGxUeXBlL1NwbFR5cGUuc3R1YicsICdTcG9vZmNoZWNrZXInID0+ICdpbnRsL2ludGwuc3R1YicsICdTdG9tcCcgPT4gJ3N0b21wL3N0b21wLnN0dWInLCAnU3RvbXBFeGNlcHRpb24nID0+ICdzdG9tcC9zdG9tcC5zdHViJywgJ1N0b21wRnJhbWUnID0+ICdzdG9tcC9zdG9tcC5zdHViJywgJ1N0cmVhbUJ1Y2tldCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzAuc3R1YicsICdTdHJpbmdhYmxlJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdTdm4nID0+ICdzdm4vc3ZuLnN0dWInLCAnU3ZuTm9kZScgPT4gJ3N2bi9zdm4uc3R1YicsICdTdm5XYycgPT4gJ3N2bi9zdm4uc3R1YicsICdTdm5XY1NjaGVkdWxlJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1N3b29sZVxcQXRvbWljJyA9PiAnc3dvb2xlL1N3b29sZS9BdG9taWMuc3R1YicsICdTd29vbGVcXEF0b21pY1xcTG9uZycgPT4gJ3N3b29sZS9Td29vbGUvQXRvbWljL0xvbmcuc3R1YicsICdTd29vbGVcXENsaWVudCcgPT4gJ3N3b29sZS9Td29vbGUvQ2xpZW50LnN0dWInLCAnU3dvb2xlXFxDbGllbnRcXEV4Y2VwdGlvbicgPT4gJ3N3b29sZS9Td29vbGUvQ2xpZW50L0V4Y2VwdGlvbi5zdHViJywgJ1N3b29sZVxcQ29ubmVjdGlvblxcSXRlcmF0b3InID0+ICdzd29vbGUvU3dvb2xlL0Nvbm5lY3Rpb24vSXRlcmF0b3Iuc3R1YicsICdTd29vbGVcXENvcm91dGluZScgPT4gJ3N3b29sZS9Td29vbGUvQ29yb3V0aW5lLnN0dWInLCAnU3dvb2xlXFxDb3JvdXRpbmVcXENoYW5uZWwnID0+ICdzd29vbGUvU3dvb2xlL0Nvcm91dGluZS9DaGFubmVsLnN0dWInLCAnU3dvb2xlXFxDb3JvdXRpbmVcXENsaWVudCcgPT4gJ3N3b29sZS9Td29vbGUvQ29yb3V0aW5lL0NsaWVudC5zdHViJywgJ1N3b29sZVxcQ29yb3V0aW5lXFxDb250ZXh0JyA9PiAnc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvQ29udGV4dC5zdHViJywgJ1N3b29sZVxcQ29yb3V0aW5lXFxDdXJsXFxFeGNlcHRpb24nID0+ICdzd29vbGUvU3dvb2xlL0Nvcm91dGluZS9DdXJsL0V4Y2VwdGlvbi5zdHViJywgJ1N3b29sZVxcQ29yb3V0aW5lXFxIdHRwMlxcQ2xpZW50JyA9PiAnc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvSHR0cDIvQ2xpZW50LnN0dWInLCAnU3dvb2xlXFxDb3JvdXRpbmVcXEh0dHAyXFxDbGllbnRcXEV4Y2VwdGlvbicgPT4gJ3N3b29sZS9Td29vbGUvQ29yb3V0aW5lL0h0dHAyL0NsaWVudC9FeGNlcHRpb24uc3R1YicsICdTd29vbGVcXENvcm91dGluZVxcSHR0cFxcQ2xpZW50JyA9PiAnc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvSHR0cC9DbGllbnQuc3R1YicsICdTd29vbGVcXENvcm91dGluZVxcSHR0cFxcQ2xpZW50XFxFeGNlcHRpb24nID0+ICdzd29vbGUvU3dvb2xlL0Nvcm91dGluZS9IdHRwL0NsaWVudC9FeGNlcHRpb24uc3R1YicsICdTd29vbGVcXENvcm91dGluZVxcSHR0cFxcU2VydmVyJyA9PiAnc3dvb2xlL1N3b29sZS9Db3JvdXRpbmUvSHR0cC9TZXJ2ZXIuc3R1YicsICdTd29vbGVcXENvcm91dGluZVxcSXRlcmF0b3InID0+ICdzd29vbGUvU3dvb2xlL0Nvcm91dGluZS9JdGVyYXRvci5zdHViJywgJ1N3b29sZVxcQ29yb3V0aW5lXFxNeVNRTCcgPT4gJ3N3b29sZS9Td29vbGUvQ29yb3V0aW5lL015U1FMLnN0dWInLCAnU3dvb2xlXFxDb3JvdXRpbmVcXE15U1FMXFxFeGNlcHRpb24nID0+ICdzd29vbGUvU3dvb2xlL0Nvcm91dGluZS9NeVNRTC9FeGNlcHRpb24uc3R1YicsICdTd29vbGVcXENvcm91dGluZVxcTXlTUUxcXFN0YXRlbWVudCcgPT4gJ3N3b29sZS9Td29vbGUvQ29yb3V0aW5lL015U1FML1N0YXRlbWVudC5zdHViJywgJ1N3b29sZVxcQ29yb3V0aW5lXFxSZWRpcycgPT4gJ3N3b29sZS9Td29vbGUvQ29yb3V0aW5lL1JlZGlzLnN0dWInLCAnU3dvb2xlXFxDb3JvdXRpbmVcXFNjaGVkdWxlcicgPT4gJ3N3b29sZS9Td29vbGUvQ29yb3V0aW5lL1NjaGVkdWxlci5zdHViJywgJ1N3b29sZVxcQ29yb3V0aW5lXFxTb2NrZXQnID0+ICdzd29vbGUvU3dvb2xlL0Nvcm91dGluZS9Tb2NrZXQuc3R1YicsICdTd29vbGVcXENvcm91dGluZVxcU29ja2V0XFxFeGNlcHRpb24nID0+ICdzd29vbGUvU3dvb2xlL0Nvcm91dGluZS9Tb2NrZXQvRXhjZXB0aW9uLnN0dWInLCAnU3dvb2xlXFxDb3JvdXRpbmVcXFN5c3RlbScgPT4gJ3N3b29sZS9Td29vbGUvQ29yb3V0aW5lL1N5c3RlbS5zdHViJywgJ1N3b29sZVxcRXJyb3InID0+ICdzd29vbGUvU3dvb2xlL0Vycm9yLnN0dWInLCAnU3dvb2xlXFxFdmVudCcgPT4gJ3N3b29sZS9Td29vbGUvRXZlbnQuc3R1YicsICdTd29vbGVcXEV4Y2VwdGlvbicgPT4gJ3N3b29sZS9Td29vbGUvRXhjZXB0aW9uLnN0dWInLCAnU3dvb2xlXFxFeGl0RXhjZXB0aW9uJyA9PiAnc3dvb2xlL1N3b29sZS9FeGl0RXhjZXB0aW9uLnN0dWInLCAnU3dvb2xlXFxIdHRwMlxcUmVxdWVzdCcgPT4gJ3N3b29sZS9Td29vbGUvSHR0cDIvUmVxdWVzdC5zdHViJywgJ1N3b29sZVxcSHR0cDJcXFJlc3BvbnNlJyA9PiAnc3dvb2xlL1N3b29sZS9IdHRwMi9SZXNwb25zZS5zdHViJywgJ1N3b29sZVxcSHR0cFxcUmVxdWVzdCcgPT4gJ3N3b29sZS9Td29vbGUvSHR0cC9SZXF1ZXN0LnN0dWInLCAnU3dvb2xlXFxIdHRwXFxSZXNwb25zZScgPT4gJ3N3b29sZS9Td29vbGUvSHR0cC9SZXNwb25zZS5zdHViJywgJ1N3b29sZVxcSHR0cFxcU2VydmVyJyA9PiAnc3dvb2xlL1N3b29sZS9IdHRwL1NlcnZlci5zdHViJywgJ1N3b29sZVxcTG9jaycgPT4gJ3N3b29sZS9Td29vbGUvTG9jay5zdHViJywgJ1N3b29sZVxcUHJvY2VzcycgPT4gJ3N3b29sZS9Td29vbGUvUHJvY2Vzcy5zdHViJywgJ1N3b29sZVxcUHJvY2Vzc1xcUG9vbCcgPT4gJ3N3b29sZS9Td29vbGUvUHJvY2Vzcy9Qb29sLnN0dWInLCAnU3dvb2xlXFxSZWRpc1xcU2VydmVyJyA9PiAnc3dvb2xlL1N3b29sZS9SZWRpcy9TZXJ2ZXIuc3R1YicsICdTd29vbGVcXFJ1bnRpbWUnID0+ICdzd29vbGUvU3dvb2xlL1J1bnRpbWUuc3R1YicsICdTd29vbGVcXFNlcnZlcicgPT4gJ3N3b29sZS9Td29vbGUvU2VydmVyLnN0dWInLCAnU3dvb2xlXFxTZXJ2ZXJcXEV2ZW50JyA9PiAnc3dvb2xlL1N3b29sZS9TZXJ2ZXIvRXZlbnQuc3R1YicsICdTd29vbGVcXFNlcnZlclxcUGFja2V0JyA9PiAnc3dvb2xlL1N3b29sZS9TZXJ2ZXIvUGFja2V0LnN0dWInLCAnU3dvb2xlXFxTZXJ2ZXJcXFBpcGVNZXNzYWdlJyA9PiAnc3dvb2xlL1N3b29sZS9TZXJ2ZXIvUGlwZU1lc3NhZ2Uuc3R1YicsICdTd29vbGVcXFNlcnZlclxcUG9ydCcgPT4gJ3N3b29sZS9Td29vbGUvU2VydmVyL1BvcnQuc3R1YicsICdTd29vbGVcXFNlcnZlclxcU3RhdHVzSW5mbycgPT4gJ3N3b29sZS9Td29vbGUvU2VydmVyL1N0YXR1c0luZm8uc3R1YicsICdTd29vbGVcXFNlcnZlclxcVGFzaycgPT4gJ3N3b29sZS9Td29vbGUvU2VydmVyL1Rhc2suc3R1YicsICdTd29vbGVcXFNlcnZlclxcVGFza1Jlc3VsdCcgPT4gJ3N3b29sZS9Td29vbGUvU2VydmVyL1Rhc2tSZXN1bHQuc3R1YicsICdTd29vbGVcXFRhYmxlJyA9PiAnc3dvb2xlL1N3b29sZS9UYWJsZS5zdHViJywgJ1N3b29sZVxcVGltZXInID0+ICdzd29vbGUvU3dvb2xlL1RpbWVyLnN0dWInLCAnU3dvb2xlXFxUaW1lclxcSXRlcmF0b3InID0+ICdzd29vbGUvU3dvb2xlL1RpbWVyL0l0ZXJhdG9yLnN0dWInLCAnU3dvb2xlXFxXZWJTb2NrZXRcXENsb3NlRnJhbWUnID0+ICdzd29vbGUvU3dvb2xlL1dlYlNvY2tldC9DbG9zZUZyYW1lLnN0dWInLCAnU3dvb2xlXFxXZWJTb2NrZXRcXEZyYW1lJyA9PiAnc3dvb2xlL1N3b29sZS9XZWJTb2NrZXQvRnJhbWUuc3R1YicsICdTd29vbGVcXFdlYlNvY2tldFxcU2VydmVyJyA9PiAnc3dvb2xlL1N3b29sZS9XZWJTb2NrZXQvU2VydmVyLnN0dWInLCAnU3luY0V2ZW50JyA9PiAnc3luYy9zeW5jLnN0dWInLCAnU3luY011dGV4JyA9PiAnc3luYy9zeW5jLnN0dWInLCAnU3luY1JlYWRlcldyaXRlcicgPT4gJ3N5bmMvc3luYy5zdHViJywgJ1N5bmNTZW1hcGhvcmUnID0+ICdzeW5jL3N5bmMuc3R1YicsICdTeW5jU2hhcmVkTWVtb3J5JyA9PiAnc3luYy9zeW5jLnN0dWInLCAnU3lzdk1lc3NhZ2VRdWV1ZScgPT4gJ3N5c3Ztc2cvc3lzdm1zZy5zdHViJywgJ1N5c3ZTZW1hcGhvcmUnID0+ICdzeXN2c2VtL3N5c3ZzZW0uc3R1YicsICdTeXN2U2hhcmVkTWVtb3J5JyA9PiAnc3lzdnNobS9zeXN2c2htLnN0dWInLCAnVGhyZWFkJyA9PiAncHRocmVhZHMvcHRocmVhZHMuc3R1YicsICdUaHJlYWRlZCcgPT4gJ3B0aHJlYWRzL3B0aHJlYWRzLnN0dWInLCAnVGhyb3dhYmxlJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdUcmFuc2xpdGVyYXRvcicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1RyYXZlcnNhYmxlJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdUeXBlRXJyb3InID0+ICdDb3JlL0NvcmVfYy5zdHViJywgJ1VDb252ZXJ0ZXInID0+ICdpbnRsL2ludGwuc3R1YicsICdVVicgPT4gJ3V2L1VWLnN0dWInLCAnVVZBZGRyaW5mbycgPT4gJ3V2L1VWLnN0dWInLCAnVVZBc3luYycgPT4gJ3V2L1VWLnN0dWInLCAnVVZDaGVjaycgPT4gJ3V2L1VWLnN0dWInLCAnVVZGcycgPT4gJ3V2L1VWLnN0dWInLCAnVVZGc0V2ZW50JyA9PiAndXYvVVYuc3R1YicsICdVVkZzUG9sbCcgPT4gJ3V2L1VWLnN0dWInLCAnVVZJZGxlJyA9PiAndXYvVVYuc3R1YicsICdVVkxvY2snID0+ICd1di9VVi5zdHViJywgJ1VWTG9vcCcgPT4gJ3V2L1VWLnN0dWInLCAnVVZQaXBlJyA9PiAndXYvVVYuc3R1YicsICdVVlBvbGwnID0+ICd1di9VVi5zdHViJywgJ1VWUHJlcGFyZScgPT4gJ3V2L1VWLnN0dWInLCAnVVZQcm9jZXNzJyA9PiAndXYvVVYuc3R1YicsICdVVlNpZ25hbCcgPT4gJ3V2L1VWLnN0dWInLCAnVVZTb2NrQWRkcicgPT4gJ3V2L1VWLnN0dWInLCAnVVZTb2NrQWRkcklQdjQnID0+ICd1di9VVi5zdHViJywgJ1VWU29ja0FkZHJJUHY2JyA9PiAndXYvVVYuc3R1YicsICdVVlN0ZGlvJyA9PiAndXYvVVYuc3R1YicsICdVVlN0cmVhbScgPT4gJ3V2L1VWLnN0dWInLCAnVVZUY3AnID0+ICd1di9VVi5zdHViJywgJ1VWVGltZXInID0+ICd1di9VVi5zdHViJywgJ1VWVHR5JyA9PiAndXYvVVYuc3R1YicsICdVVlVkcCcgPT4gJ3V2L1VWLnN0dWInLCAnVVZXb3JrJyA9PiAndXYvVVYuc3R1YicsICdVbmRlcmZsb3dFeGNlcHRpb24nID0+ICdTUEwvU1BMLnN0dWInLCAnVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uJyA9PiAnU1BML1NQTC5zdHViJywgJ1VuaGFuZGxlZE1hdGNoRXJyb3InID0+ICdDb3JlL0NvcmVfYy5zdHViJywgJ1VuaXRFbnVtJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdWOEpzJyA9PiAndjhqcy92OGpzLnN0dWInLCAnVjhKc01lbW9yeUxpbWl0RXhjZXB0aW9uJyA9PiAndjhqcy92OGpzLnN0dWInLCAnVjhKc1NjcmlwdEV4Y2VwdGlvbicgPT4gJ3Y4anMvdjhqcy5zdHViJywgJ1Y4SnNUaW1lTGltaXRFeGNlcHRpb24nID0+ICd2OGpzL3Y4anMuc3R1YicsICdWQVJJQU5UJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnVmFsdWVFcnJvcicgPT4gJ0NvcmUvQ29yZV9jLnN0dWInLCAnVm9sYXRpbGUnID0+ICdwdGhyZWFkcy9wdGhyZWFkcy5zdHViJywgJ1Z0aWZ1bFxcS2VybmVsXFxFeGNlbCcgPT4gJ3hsc3dyaXRlci94bHN3cml0ZXIuc3R1YicsICdWdGlmdWxcXEtlcm5lbFxcRm9ybWF0JyA9PiAneGxzd3JpdGVyL3hsc3dyaXRlci5zdHViJywgJ1dlYWtNYXAnID0+ICdDb3JlL0NvcmVfYy5zdHViJywgJ1dlYWtSZWZlcmVuY2UnID0+ICdDb3JlL0NvcmVfYy5zdHViJywgJ1dvcmtlcicgPT4gJ3B0aHJlYWRzL3B0aHJlYWRzLnN0dWInLCAnWE1MUGFyc2VyJyA9PiAneG1sL3htbC5zdHViJywgJ1hNTFJlYWRlcicgPT4gJ3htbHJlYWRlci94bWxyZWFkZXIuc3R1YicsICdYTUxXcml0ZXInID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAnWFNMVFByb2Nlc3NvcicgPT4gJ3hzbC94c2wuc3R1YicsICdYWFRFQScgPT4gJ3h4dGVhL3h4dGVhLnN0dWInLCAnWWFmXFxBY3Rpb25fQWJzdHJhY3QnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcQXBwbGljYXRpb24nID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcQm9vdHN0cmFwX0Fic3RyYWN0JyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZYWZcXENvbmZpZ1xcSW5pJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZYWZcXENvbmZpZ1xcU2ltcGxlJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZYWZcXENvbmZpZ19BYnN0cmFjdCcgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWWFmXFxDb250cm9sbGVyX0Fic3RyYWN0JyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZYWZcXERpc3BhdGNoZXInID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcRXhjZXB0aW9uJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZYWZcXEV4Y2VwdGlvblxcRGlzcGF0Y2hGYWlsZWQnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcRXhjZXB0aW9uXFxMb2FkRmFpbGVkJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZYWZcXEV4Y2VwdGlvblxcTG9hZEZhaWxlZFxcQWN0aW9uJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZYWZcXEV4Y2VwdGlvblxcTG9hZEZhaWxlZFxcQ29udHJvbGxlcicgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWWFmXFxFeGNlcHRpb25cXExvYWRGYWlsZWRcXE1vZHVsZScgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWWFmXFxFeGNlcHRpb25cXExvYWRGYWlsZWRcXFZpZXcnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcRXhjZXB0aW9uXFxSb3V0ZXJGYWlsZWQnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcRXhjZXB0aW9uXFxTdGFydHVwRXJyb3InID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcRXhjZXB0aW9uXFxUeXBlRXJyb3InID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcTG9hZGVyJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZYWZcXFBsdWdpbl9BYnN0cmFjdCcgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWWFmXFxSZWdpc3RyeScgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWWFmXFxSZXF1ZXN0XFxIdHRwJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZYWZcXFJlcXVlc3RcXFNpbXBsZScgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWWFmXFxSZXF1ZXN0X0Fic3RyYWN0JyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZYWZcXFJlc3BvbnNlXFxDbGknID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcUmVzcG9uc2VcXEh0dHAnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcUmVzcG9uc2VfQWJzdHJhY3QnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcUm91dGVcXE1hcCcgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWWFmXFxSb3V0ZVxcUmVnZXgnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcUm91dGVcXFJld3JpdGUnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcUm91dGVcXFNpbXBsZScgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWWFmXFxSb3V0ZVxcU3VwZXJ2YXInID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcUm91dGVfSW50ZXJmYWNlJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZYWZcXFJvdXRlX1N0YXRpYycgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWWFmXFxSb3V0ZXInID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcU2Vzc2lvbicgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWWFmXFxWaWV3XFxTaW1wbGUnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZlxcVmlld19JbnRlcmZhY2UnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lhZl9BY3Rpb25fQWJzdHJhY3QnID0+ICd5YWYveWFmLnN0dWInLCAnWWFmX0FwcGxpY2F0aW9uJyA9PiAneWFmL3lhZi5zdHViJywgJ1lhZl9Cb290c3RyYXBfQWJzdHJhY3QnID0+ICd5YWYveWFmLnN0dWInLCAnWWFmX0NvbmZpZ19BYnN0cmFjdCcgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfQ29uZmlnX0luaScgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfQ29uZmlnX1NpbXBsZScgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfQ29udHJvbGxlcl9BYnN0cmFjdCcgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfRGlzcGF0Y2hlcicgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfRXhjZXB0aW9uJyA9PiAneWFmL3lhZi5zdHViJywgJ1lhZl9FeGNlcHRpb25fRGlzcGF0Y2hGYWlsZWQnID0+ICd5YWYveWFmLnN0dWInLCAnWWFmX0V4Y2VwdGlvbl9Mb2FkRmFpbGVkJyA9PiAneWFmL3lhZi5zdHViJywgJ1lhZl9FeGNlcHRpb25fTG9hZEZhaWxlZF9BY3Rpb24nID0+ICd5YWYveWFmLnN0dWInLCAnWWFmX0V4Y2VwdGlvbl9Mb2FkRmFpbGVkX0NvbnRyb2xsZXInID0+ICd5YWYveWFmLnN0dWInLCAnWWFmX0V4Y2VwdGlvbl9Mb2FkRmFpbGVkX01vZHVsZScgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfRXhjZXB0aW9uX0xvYWRGYWlsZWRfVmlldycgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfRXhjZXB0aW9uX1JvdXRlckZhaWxlZCcgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfRXhjZXB0aW9uX1N0YXJ0dXBFcnJvcicgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfRXhjZXB0aW9uX1R5cGVFcnJvcicgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfTG9hZGVyJyA9PiAneWFmL3lhZi5zdHViJywgJ1lhZl9QbHVnaW5fQWJzdHJhY3QnID0+ICd5YWYveWFmLnN0dWInLCAnWWFmX1JlZ2lzdHJ5JyA9PiAneWFmL3lhZi5zdHViJywgJ1lhZl9SZXF1ZXN0X0Fic3RyYWN0JyA9PiAneWFmL3lhZi5zdHViJywgJ1lhZl9SZXF1ZXN0X0h0dHAnID0+ICd5YWYveWFmLnN0dWInLCAnWWFmX1JlcXVlc3RfU2ltcGxlJyA9PiAneWFmL3lhZi5zdHViJywgJ1lhZl9SZXNwb25zZV9BYnN0cmFjdCcgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfUmVzcG9uc2VfQ2xpJyA9PiAneWFmL3lhZi5zdHViJywgJ1lhZl9SZXNwb25zZV9IdHRwJyA9PiAneWFmL3lhZi5zdHViJywgJ1lhZl9Sb3V0ZV9JbnRlcmZhY2UnID0+ICd5YWYveWFmLnN0dWInLCAnWWFmX1JvdXRlX01hcCcgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfUm91dGVfUmVnZXgnID0+ICd5YWYveWFmLnN0dWInLCAnWWFmX1JvdXRlX1Jld3JpdGUnID0+ICd5YWYveWFmLnN0dWInLCAnWWFmX1JvdXRlX1NpbXBsZScgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfUm91dGVfU3RhdGljJyA9PiAneWFmL3lhZi5zdHViJywgJ1lhZl9Sb3V0ZV9TdXBlcnZhcicgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfUm91dGVyJyA9PiAneWFmL3lhZi5zdHViJywgJ1lhZl9TZXNzaW9uJyA9PiAneWFmL3lhZi5zdHViJywgJ1lhZl9WaWV3X0ludGVyZmFjZScgPT4gJ3lhZi95YWYuc3R1YicsICdZYWZfVmlld19TaW1wbGUnID0+ICd5YWYveWFmLnN0dWInLCAnWWFyX0NsaWVudCcgPT4gJ3lhci95YXIuc3R1YicsICdZYXJfQ2xpZW50X0V4Y2VwdGlvbicgPT4gJ3lhci95YXIuc3R1YicsICdZYXJfQ2xpZW50X1BhY2thZ2VyX0V4Y2VwdGlvbicgPT4gJ3lhci95YXIuc3R1YicsICdZYXJfQ2xpZW50X1Byb3RvY29sX0V4Y2VwdGlvbicgPT4gJ3lhci95YXIuc3R1YicsICdZYXJfQ2xpZW50X1RyYW5zcG9ydF9FeGNlcHRpb24nID0+ICd5YXIveWFyLnN0dWInLCAnWWFyX0NvbmN1cnJlbnRfQ2xpZW50JyA9PiAneWFyL3lhci5zdHViJywgJ1lhcl9TZXJ2ZXInID0+ICd5YXIveWFyLnN0dWInLCAnWWFyX1NlcnZlcl9FeGNlcHRpb24nID0+ICd5YXIveWFyLnN0dWInLCAnWWFyX1NlcnZlcl9PdXRwdXRfRXhjZXB0aW9uJyA9PiAneWFyL3lhci5zdHViJywgJ1lhcl9TZXJ2ZXJfUGFja2FnZXJfRXhjZXB0aW9uJyA9PiAneWFyL3lhci5zdHViJywgJ1lhcl9TZXJ2ZXJfUHJvdG9jb2xfRXhjZXB0aW9uJyA9PiAneWFyL3lhci5zdHViJywgJ1lhcl9TZXJ2ZXJfUmVxdWVzdF9FeGNlcHRpb24nID0+ICd5YXIveWFyLnN0dWInLCAnWk1RJyA9PiAnem1xL3ptcS5zdHViJywgJ1pNUUNvbnRleHQnID0+ICd6bXEvem1xLnN0dWInLCAnWk1RQ29udGV4dEV4Y2VwdGlvbicgPT4gJ3ptcS96bXEuc3R1YicsICdaTVFEZXZpY2UnID0+ICd6bXEvem1xLnN0dWInLCAnWk1RRGV2aWNlRXhjZXB0aW9uJyA9PiAnem1xL3ptcS5zdHViJywgJ1pNUUV4Y2VwdGlvbicgPT4gJ3ptcS96bXEuc3R1YicsICdaTVFQb2xsJyA9PiAnem1xL3ptcS5zdHViJywgJ1pNUVBvbGxFeGNlcHRpb24nID0+ICd6bXEvem1xLnN0dWInLCAnWk1RU29ja2V0JyA9PiAnem1xL3ptcS5zdHViJywgJ1pNUVNvY2tldEV4Y2VwdGlvbicgPT4gJ3ptcS96bXEuc3R1YicsICdaZW5kQVBJX0pvYicgPT4gJ3plbmQvemVuZC5zdHViJywgJ1plbmRBUElfUXVldWUnID0+ICd6ZW5kL3plbmQuc3R1YicsICdaaXBBcmNoaXZlJyA9PiAnemlwL3ppcC5zdHViJywgJ1pvb2tlZXBlcicgPT4gJ3pvb2tlZXBlci96b29rZWVwZXIuc3R1YicsICdab29rZWVwZXJBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbicgPT4gJ3pvb2tlZXBlci96b29rZWVwZXIuc3R1YicsICdab29rZWVwZXJDb25uZWN0aW9uRXhjZXB0aW9uJyA9PiAnem9va2VlcGVyL3pvb2tlZXBlci5zdHViJywgJ1pvb2tlZXBlckV4Y2VwdGlvbicgPT4gJ3pvb2tlZXBlci96b29rZWVwZXIuc3R1YicsICdab29rZWVwZXJNYXJzaGFsbGluZ0V4Y2VwdGlvbicgPT4gJ3pvb2tlZXBlci96b29rZWVwZXIuc3R1YicsICdab29rZWVwZXJOb05vZGVFeGNlcHRpb24nID0+ICd6b29rZWVwZXIvem9va2VlcGVyLnN0dWInLCAnWm9va2VlcGVyT3BlcmF0aW9uVGltZW91dEV4Y2VwdGlvbicgPT4gJ3pvb2tlZXBlci96b29rZWVwZXIuc3R1YicsICdab29rZWVwZXJTZXNzaW9uRXhjZXB0aW9uJyA9PiAnem9va2VlcGVyL3pvb2tlZXBlci5zdHViJywgJ19fUEhQX0luY29tcGxldGVfQ2xhc3MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8wLnN0dWInLCAnX19fUEhQU1RPUk1fSEVMUEVSU1xcUFNfVU5SRVNFUlZFX1BSRUZJWF9zdGF0aWMnID0+ICdzdGFuZGFyZC9fdHlwZXMuc3R1YicsICdfX19QSFBTVE9STV9IRUxQRVJTXFxQU19VTlJFU0VSVkVfUFJFRklYX3RoaXMnID0+ICdzdGFuZGFyZC9fdHlwZXMuc3R1YicsICdfX19QSFBTVE9STV9IRUxQRVJTXFxvYmplY3QnID0+ICdzdGFuZGFyZC9fdHlwZXMuc3R1YicsICdhc3RcXE1ldGFkYXRhJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcTm9kZScgPT4gJ2FzdC9hc3Quc3R1YicsICdjbGFzc09iaicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdjbHVzdGVyT2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ2NvbG9yT2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ2NvbV9leGNlcHRpb24nID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdlcnJvck9iaicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdmZm1wZWdfYW5pbWF0ZWRfZ2lmJyA9PiAnZmZtcGVnL2ZmbXBlZy5zdHViJywgJ2ZmbXBlZ19mcmFtZScgPT4gJ2ZmbXBlZy9mZm1wZWcuc3R1YicsICdmZm1wZWdfbW92aWUnID0+ICdmZm1wZWcvZmZtcGVnLnN0dWInLCAnZmluZm8nID0+ICdmaWxlaW5mby9maWxlaW5mby5zdHViJywgJ2dudXBnJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdnbnVwZ19rZXlsaXN0aXRlcmF0b3InID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ2dyaWRPYmonID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnaGFzaFRhYmxlT2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ2h0dHBcXENsaWVudCcgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXFVzZXInID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxSZXF1ZXN0JyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcUmVzcG9uc2UnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ29va2llJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXEVuY29kaW5nXFxTdHJlYW0nID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcRW5jb2RpbmdcXFN0cmVhbVxcRGVicm90bGknID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcRW5jb2RpbmdcXFN0cmVhbVxcRGVjaHVuaycgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxFbmNvZGluZ1xcU3RyZWFtXFxEZWZsYXRlJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXEVuY29kaW5nXFxTdHJlYW1cXEVuYnJvdGxpJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXEVuY29kaW5nXFxTdHJlYW1cXEluZmxhdGUnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcRW52JyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXEVudlxcUmVxdWVzdCcgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxFbnZcXFJlc3BvbnNlJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXEVudlxcVXJsJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXEV4Y2VwdGlvbicgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxFeGNlcHRpb25cXEJhZENvbnZlcnNpb25FeGNlcHRpb24nID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcRXhjZXB0aW9uXFxCYWRIZWFkZXJFeGNlcHRpb24nID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcRXhjZXB0aW9uXFxCYWRNZXNzYWdlRXhjZXB0aW9uJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXEV4Y2VwdGlvblxcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbicgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxFeGNlcHRpb25cXEJhZFF1ZXJ5U3RyaW5nRXhjZXB0aW9uJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXEV4Y2VwdGlvblxcQmFkVXJsRXhjZXB0aW9uJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXEV4Y2VwdGlvblxcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXEV4Y2VwdGlvblxcUnVudGltZUV4Y2VwdGlvbicgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxFeGNlcHRpb25cXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbicgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxIZWFkZXInID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcSGVhZGVyXFxQYXJzZXInID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcTWVzc2FnZScgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxNZXNzYWdlXFxCb2R5JyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXE1lc3NhZ2VcXFBhcnNlcicgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxQYXJhbXMnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcUXVlcnlTdHJpbmcnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcVXJsJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2ltYWdlT2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ2l0ZXJhYmxlJyA9PiAnQ29yZS9Db3JlX2Muc3R1YicsICdqYXZhJyA9PiAnemVuZC96ZW5kLnN0dWInLCAnbGFiZWxPYmonID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnbGFiZWxjYWNoZU1lbWJlck9iaicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdsYWJlbGNhY2hlT2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ2xheWVyT2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ2xlZ2VuZE9iaicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdsaW5lT2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ21hcE9iaicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdteXNxbF94ZGV2YXBpXFxCYXNlUmVzdWx0JyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcQ29sbGVjdGlvbicgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ215c3FsX3hkZXZhcGlcXENvbGxlY3Rpb25BZGQnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdteXNxbF94ZGV2YXBpXFxDb2xsZWN0aW9uRmluZCcgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ215c3FsX3hkZXZhcGlcXENvbGxlY3Rpb25Nb2RpZnknID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdteXNxbF94ZGV2YXBpXFxDb2xsZWN0aW9uUmVtb3ZlJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcQ29sdW1uUmVzdWx0JyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcQ3J1ZE9wZXJhdGlvbkJpbmRhYmxlJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcQ3J1ZE9wZXJhdGlvbkxpbWl0YWJsZScgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ215c3FsX3hkZXZhcGlcXENydWRPcGVyYXRpb25Ta2lwcGFibGUnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdteXNxbF94ZGV2YXBpXFxDcnVkT3BlcmF0aW9uU29ydGFibGUnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdteXNxbF94ZGV2YXBpXFxEYXRhYmFzZU9iamVjdCcgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ215c3FsX3hkZXZhcGlcXERvY1Jlc3VsdCcgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ215c3FsX3hkZXZhcGlcXEV4Y2VwdGlvbicgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ215c3FsX3hkZXZhcGlcXEV4ZWN1dGFibGUnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdteXNxbF94ZGV2YXBpXFxFeGVjdXRpb25TdGF0dXMnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdteXNxbF94ZGV2YXBpXFxFeHByZXNzaW9uJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcUmVzdWx0JyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcUm93UmVzdWx0JyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcU2NoZW1hJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcU2NoZW1hT2JqZWN0JyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcU2Vzc2lvbicgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ215c3FsX3hkZXZhcGlcXFNxbFN0YXRlbWVudCcgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ215c3FsX3hkZXZhcGlcXFNxbFN0YXRlbWVudFJlc3VsdCcgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ215c3FsX3hkZXZhcGlcXFN0YXRlbWVudCcgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ215c3FsX3hkZXZhcGlcXFRhYmxlJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcVGFibGVEZWxldGUnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdteXNxbF94ZGV2YXBpXFxUYWJsZUluc2VydCcgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ215c3FsX3hkZXZhcGlcXFRhYmxlU2VsZWN0JyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcVGFibGVVcGRhdGUnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdteXNxbF94ZGV2YXBpXFxXYXJuaW5nJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcWFNlc3Npb24nID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdteXNxbGknID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2RyaXZlcicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfcmVzdWx0JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zcWxfZXhjZXB0aW9uJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zdG10JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV93YXJuaW5nJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ25ld3JlbGljXFxEaXN0cmlidXRlZFRyYWNlUGF5bG9hZCcgPT4gJ25ld3JlbGljL25ld3JlbGljLnN0dWInLCAnb3V0cHV0Zm9ybWF0T2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ3BhcmFsbGVsXFxDaGFubmVsJyA9PiAncGFyYWxsZWwvcGFyYWxsZWwvQ2hhbm5lbC5zdHViJywgJ3BhcmFsbGVsXFxDaGFubmVsXFxFcnJvcicgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL0NoYW5uZWwvRXJyb3Iuc3R1YicsICdwYXJhbGxlbFxcQ2hhbm5lbFxcRXJyb3JcXENsb3NlZCcgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL0NoYW5uZWwvRXJyb3IvQ2xvc2VkLnN0dWInLCAncGFyYWxsZWxcXENoYW5uZWxcXEVycm9yXFxFeGlzdGVuY2UnID0+ICdwYXJhbGxlbC9wYXJhbGxlbC9DaGFubmVsL0Vycm9yL0V4aXN0ZW5jZS5zdHViJywgJ3BhcmFsbGVsXFxDaGFubmVsXFxFcnJvclxcSWxsZWdhbFZhbHVlJyA9PiAncGFyYWxsZWwvcGFyYWxsZWwvQ2hhbm5lbC9FcnJvci9JbGxlZ2FsVmFsdWUuc3R1YicsICdwYXJhbGxlbFxcRXJyb3InID0+ICdwYXJhbGxlbC9wYXJhbGxlbC9FcnJvci5zdHViJywgJ3BhcmFsbGVsXFxFdmVudHMnID0+ICdwYXJhbGxlbC9wYXJhbGxlbC9FdmVudHMuc3R1YicsICdwYXJhbGxlbFxcRXZlbnRzXFxFcnJvcicgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL0V2ZW50cy9FcnJvci5zdHViJywgJ3BhcmFsbGVsXFxFdmVudHNcXEVycm9yXFxFeGlzdGVuY2UnID0+ICdwYXJhbGxlbC9wYXJhbGxlbC9FdmVudHMvRXJyb3IvRXhpc3RlbmNlLnN0dWInLCAncGFyYWxsZWxcXEV2ZW50c1xcRXJyb3JcXFRpbWVvdXQnID0+ICdwYXJhbGxlbC9wYXJhbGxlbC9FdmVudHMvRXJyb3IvVGltZW91dC5zdHViJywgJ3BhcmFsbGVsXFxFdmVudHNcXEV2ZW50JyA9PiAncGFyYWxsZWwvcGFyYWxsZWwvRXZlbnRzL0V2ZW50LnN0dWInLCAncGFyYWxsZWxcXEV2ZW50c1xcRXZlbnRcXEVycm9yJyA9PiAncGFyYWxsZWwvcGFyYWxsZWwvRXZlbnRzL0V2ZW50L0Vycm9yLnN0dWInLCAncGFyYWxsZWxcXEV2ZW50c1xcRXZlbnRcXFR5cGUnID0+ICdwYXJhbGxlbC9wYXJhbGxlbC9FdmVudHMvRXZlbnQvVHlwZS5zdHViJywgJ3BhcmFsbGVsXFxFdmVudHNcXElucHV0JyA9PiAncGFyYWxsZWwvcGFyYWxsZWwvRXZlbnRzL0lucHV0LnN0dWInLCAncGFyYWxsZWxcXEV2ZW50c1xcSW5wdXRcXEVycm9yJyA9PiAncGFyYWxsZWwvcGFyYWxsZWwvRXZlbnRzL0lucHV0L0Vycm9yLnN0dWInLCAncGFyYWxsZWxcXEV2ZW50c1xcSW5wdXRcXEVycm9yXFxFeGlzdGVuY2UnID0+ICdwYXJhbGxlbC9wYXJhbGxlbC9FdmVudHMvSW5wdXQvRXJyb3IvRXhpc3RlbmNlLnN0dWInLCAncGFyYWxsZWxcXEV2ZW50c1xcSW5wdXRcXEVycm9yXFxJbGxlZ2FsVmFsdWUnID0+ICdwYXJhbGxlbC9wYXJhbGxlbC9FdmVudHMvSW5wdXQvRXJyb3IvSWxsZWdhbFZhbHVlLnN0dWInLCAncGFyYWxsZWxcXEZ1dHVyZScgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL0Z1dHVyZS5zdHViJywgJ3BhcmFsbGVsXFxGdXR1cmVcXEVycm9yJyA9PiAncGFyYWxsZWwvcGFyYWxsZWwvRnV0dXJlL0Vycm9yLnN0dWInLCAncGFyYWxsZWxcXEZ1dHVyZVxcRXJyb3JcXENhbmNlbGxlZCcgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL0Z1dHVyZS9FcnJvci9DYW5jZWxsZWQuc3R1YicsICdwYXJhbGxlbFxcRnV0dXJlXFxFcnJvclxcRm9yZWlnbicgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL0Z1dHVyZS9FcnJvci9Gb3JlaWduLnN0dWInLCAncGFyYWxsZWxcXEZ1dHVyZVxcRXJyb3JcXEtpbGxlZCcgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL0Z1dHVyZS9FcnJvci9LaWxsZWQuc3R1YicsICdwYXJhbGxlbFxcUnVudGltZScgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL1J1bnRpbWUuc3R1YicsICdwYXJhbGxlbFxcUnVudGltZVxcRXJyb3InID0+ICdwYXJhbGxlbC9wYXJhbGxlbC9SdW50aW1lL0Vycm9yLnN0dWInLCAncGFyYWxsZWxcXFJ1bnRpbWVcXEVycm9yXFxCb290c3RyYXAnID0+ICdwYXJhbGxlbC9wYXJhbGxlbC9SdW50aW1lL0Vycm9yL0Jvb3RzdHJhcC5zdHViJywgJ3BhcmFsbGVsXFxSdW50aW1lXFxFcnJvclxcQ2xvc2VkJyA9PiAncGFyYWxsZWwvcGFyYWxsZWwvUnVudGltZS9FcnJvci9DbG9zZWQuc3R1YicsICdwYXJhbGxlbFxcUnVudGltZVxcRXJyb3JcXElsbGVnYWxGdW5jdGlvbicgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL1J1bnRpbWUvRXJyb3IvSWxsZWdhbEZ1bmN0aW9uLnN0dWInLCAncGFyYWxsZWxcXFJ1bnRpbWVcXEVycm9yXFxJbGxlZ2FsSW5zdHJ1Y3Rpb24nID0+ICdwYXJhbGxlbC9wYXJhbGxlbC9SdW50aW1lL0Vycm9yL0lsbGVnYWxJbnN0cnVjdGlvbi5zdHViJywgJ3BhcmFsbGVsXFxSdW50aW1lXFxFcnJvclxcSWxsZWdhbFBhcmFtZXRlcicgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL1J1bnRpbWUvRXJyb3IvSWxsZWdhbFBhcmFtZXRlci5zdHViJywgJ3BhcmFsbGVsXFxSdW50aW1lXFxFcnJvclxcSWxsZWdhbFJldHVybicgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL1J1bnRpbWUvRXJyb3IvSWxsZWdhbFJldHVybi5zdHViJywgJ3BhcmFsbGVsXFxSdW50aW1lXFxFcnJvclxcSWxsZWdhbFZhcmlhYmxlJyA9PiAncGFyYWxsZWwvcGFyYWxsZWwvUnVudGltZS9FcnJvci9JbGxlZ2FsVmFyaWFibGUuc3R1YicsICdwYXJhbGxlbFxcUnVudGltZVxcRXJyb3JcXEtpbGxlZCcgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL1J1bnRpbWUvRXJyb3IvS2lsbGVkLnN0dWInLCAncGFyYWxsZWxcXFJ1bnRpbWVcXE9iamVjdFxcVW5hdmFpbGFibGUnID0+ICdwYXJhbGxlbC9wYXJhbGxlbC9SdW50aW1lL09iamVjdC9VbmF2YWlsYWJsZS5zdHViJywgJ3BhcmFsbGVsXFxSdW50aW1lXFxUeXBlXFxVbmF2YWlsYWJsZScgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL1J1bnRpbWUvVHlwZS9VbmF2YWlsYWJsZS5zdHViJywgJ3BhcmFsbGVsXFxTeW5jJyA9PiAncGFyYWxsZWwvcGFyYWxsZWwvU3luYy5zdHViJywgJ3BhcmFsbGVsXFxTeW5jXFxFcnJvcicgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL1N5bmMvRXJyb3Iuc3R1YicsICdwYXJhbGxlbFxcU3luY1xcRXJyb3JcXElsbGVnYWxWYWx1ZScgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsL1N5bmMvRXJyb3IvSWxsZWdhbFZhbHVlLnN0dWInLCAncGhwX3VzZXJfZmlsdGVyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3BvaW50T2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ3BxXFxDT1BZJyA9PiAncHEvcHEuc3R1YicsICdwcVxcQ2FuY2VsJyA9PiAncHEvcHEuc3R1YicsICdwcVxcQ29ubmVjdGlvbicgPT4gJ3BxL3BxLnN0dWInLCAncHFcXENvbnZlcnRlcicgPT4gJ3BxL3BxLnN0dWInLCAncHFcXEN1cnNvcicgPT4gJ3BxL3BxLnN0dWInLCAncHFcXERhdGVUaW1lJyA9PiAncHEvcHEuc3R1YicsICdwcVxcRXhjZXB0aW9uJyA9PiAncHEvcHEuc3R1YicsICdwcVxcRXhjZXB0aW9uXFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uJyA9PiAncHEvcHEuc3R1YicsICdwcVxcRXhjZXB0aW9uXFxEb21haW5FeGNlcHRpb24nID0+ICdwcS9wcS5zdHViJywgJ3BxXFxFeGNlcHRpb25cXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbicgPT4gJ3BxL3BxLnN0dWInLCAncHFcXEV4Y2VwdGlvblxcUnVudGltZUV4Y2VwdGlvbicgPT4gJ3BxL3BxLnN0dWInLCAncHFcXExPQicgPT4gJ3BxL3BxLnN0dWInLCAncHFcXFJlc3VsdCcgPT4gJ3BxL3BxLnN0dWInLCAncHFcXFN0YXRlbWVudCcgPT4gJ3BxL3BxLnN0dWInLCAncHFcXFRyYW5zYWN0aW9uJyA9PiAncHEvcHEuc3R1YicsICdwcVxcVHlwZXMnID0+ICdwcS9wcS5zdHViJywgJ3Byb2plY3Rpb25PYmonID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAncXVlcnltYXBPYmonID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAncmVjdE9iaicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdyZWZlcmVuY2VNYXBPYmonID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAncmVzdWx0T2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ3NjYWxlYmFyT2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ3NoYXBlT2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ3NoYXBlZmlsZU9iaicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdzdGRDbGFzcycgPT4gJ0NvcmUvQ29yZV9jLnN0dWInLCAnc3R5bGVPYmonID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnc3ltYm9sT2JqJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ3RpZHknID0+ICd0aWR5L3RpZHkuc3R1YicsICd0aWR5Tm9kZScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ3dlYk9iaicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicpOwogICAgY29uc3QgRlVOQ1RJT05TID0gYXJyYXkoJ0Jyb3RsaVxcY29tcHJlc3MnID0+ICdicm90bGkvYnJvdGxpLnN0dWInLCAnQnJvdGxpXFxjb21wcmVzc19hZGQnID0+ICdicm90bGkvYnJvdGxpLnN0dWInLCAnQnJvdGxpXFxjb21wcmVzc19pbml0JyA9PiAnYnJvdGxpL2Jyb3RsaS5zdHViJywgJ0Jyb3RsaVxcdW5jb21wcmVzcycgPT4gJ2Jyb3RsaS9icm90bGkuc3R1YicsICdCcm90bGlcXHVuY29tcHJlc3NfYWRkJyA9PiAnYnJvdGxpL2Jyb3RsaS5zdHViJywgJ0Jyb3RsaVxcdW5jb21wcmVzc19pbml0JyA9PiAnYnJvdGxpL2Jyb3RsaS5zdHViJywgJ0RvbVxcaW1wb3J0X3NpbXBsZXhtbCcgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0dFT1NMaW5lTWVyZ2UnID0+ICdnZW9zL2dlb3Muc3R1YicsICdHRU9TUG9seWdvbml6ZScgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NSZWxhdGVNYXRjaCcgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NTaGFyZWRQYXRocycgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NWZXJzaW9uJyA9PiAnZ2Vvcy9nZW9zLnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcZnJvbUpTT04nID0+ICdtb25nb2RiL0JTT04vZnVuY3Rpb25zLnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcZnJvbVBIUCcgPT4gJ21vbmdvZGIvQlNPTi9mdW5jdGlvbnMuc3R1YicsICdNb25nb0RCXFxCU09OXFx0b0Nhbm9uaWNhbEV4dGVuZGVkSlNPTicgPT4gJ21vbmdvZGIvQlNPTi9mdW5jdGlvbnMuc3R1YicsICdNb25nb0RCXFxCU09OXFx0b0pTT04nID0+ICdtb25nb2RiL0JTT04vZnVuY3Rpb25zLnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcdG9QSFAnID0+ICdtb25nb2RiL0JTT04vZnVuY3Rpb25zLnN0dWInLCAnTW9uZ29EQlxcQlNPTlxcdG9SZWxheGVkRXh0ZW5kZWRKU09OJyA9PiAnbW9uZ29kYi9CU09OL2Z1bmN0aW9ucy5zdHViJywgJ01vbmdvREJcXERyaXZlclxcTW9uaXRvcmluZ1xcYWRkU3Vic2NyaWJlcicgPT4gJ21vbmdvZGIvTW9uaXRvcmluZy9mdW5jdGlvbnMuc3R1YicsICdNb25nb0RCXFxEcml2ZXJcXE1vbml0b3JpbmdcXHJlbW92ZVN1YnNjcmliZXInID0+ICdtb25nb2RiL01vbml0b3JpbmcvZnVuY3Rpb25zLnN0dWInLCAnT3BlblRlbGVtZXRyeVxcSW5zdHJ1bWVudGF0aW9uXFxob29rJyA9PiAnb3BlbnRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LnN0dWInLCAnUERGX2FjdGl2YXRlX2l0ZW0nID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2FkZF9sYXVuY2hsaW5rJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9hZGRfbG9jYWxsaW5rJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9hZGRfbmFtZWRkZXN0JyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9hZGRfbm90ZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfYWRkX3BkZmxpbmsnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2FkZF90YWJsZV9jZWxsJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9hZGRfdGV4dGZsb3cnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2FkZF90aHVtYm5haWwnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2FkZF93ZWJsaW5rJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9hcmMnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2FyY24nID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2F0dGFjaF9maWxlJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9iZWdpbl9kb2N1bWVudCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfYmVnaW5fZm9udCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfYmVnaW5fZ2x5cGgnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2JlZ2luX2l0ZW0nID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2JlZ2luX2xheWVyJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9iZWdpbl9wYWdlJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9iZWdpbl9wYWdlX2V4dCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfYmVnaW5fcGF0dGVybicgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfYmVnaW5fdGVtcGxhdGUnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2JlZ2luX3RlbXBsYXRlX2V4dCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfY2lyY2xlJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9jbGlwJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9jbG9zZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfY2xvc2VfaW1hZ2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2Nsb3NlX3BkaScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfY2xvc2VfcGRpX2RvY3VtZW50JyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9jbG9zZV9wZGlfcGFnZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfY2xvc2VwYXRoJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9jbG9zZXBhdGhfZmlsbF9zdHJva2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2Nsb3NlcGF0aF9zdHJva2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2NvbmNhdCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfY29udGludWVfdGV4dCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfY3JlYXRlXzNkdmlldycgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfY3JlYXRlX2FjdGlvbicgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfY3JlYXRlX2Fubm90YXRpb24nID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2NyZWF0ZV9ib29rbWFyaycgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfY3JlYXRlX2ZpZWxkJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9jcmVhdGVfZmllbGRncm91cCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfY3JlYXRlX2dzdGF0ZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfY3JlYXRlX3B2ZicgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfY3JlYXRlX3RleHRmbG93JyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9jdXJ2ZXRvJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9kZWZpbmVfbGF5ZXInID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2RlbGV0ZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfZGVsZXRlX3B2ZicgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfZGVsZXRlX3RhYmxlJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9kZWxldGVfdGV4dGZsb3cnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2VuY29kaW5nX3NldF9jaGFyJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9lbmRfZG9jdW1lbnQnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2VuZF9mb250JyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9lbmRfZ2x5cGgnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2VuZF9pdGVtJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9lbmRfbGF5ZXInID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2VuZF9wYWdlJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9lbmRfcGFnZV9leHQnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2VuZF9wYXR0ZXJuJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9lbmRfdGVtcGxhdGUnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2VuZHBhdGgnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2ZpbGwnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2ZpbGxfaW1hZ2VibG9jaycgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfZmlsbF9wZGZibG9jaycgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfZmlsbF9zdHJva2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2ZpbGxfdGV4dGJsb2NrJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9maW5kZm9udCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfZml0X2ltYWdlJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9maXRfcGRpX3BhZ2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2ZpdF90YWJsZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfZml0X3RleHRmbG93JyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9maXRfdGV4dGxpbmUnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2dldF9hcGluYW1lJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9nZXRfYnVmZmVyJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9nZXRfZXJybXNnJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9nZXRfZXJybnVtJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9nZXRfbWFqb3J2ZXJzaW9uJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9nZXRfbWlub3J2ZXJzaW9uJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9nZXRfb3B0aW9uJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9nZXRfcGFyYW1ldGVyJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9nZXRfcGRpX3BhcmFtZXRlcicgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfZ2V0X3BkaV92YWx1ZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfZ2V0X3N0cmluZycgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfZ2V0X3ZhbHVlJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9pbmZvX2ZvbnQnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2luZm9fZ3JhcGhpY3MnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2luZm9faW1hZ2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2luZm9fbWF0Y2hib3gnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2luZm9fcGF0aCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfaW5mb19wZGlfcGFnZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfaW5mb19wdmYnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2luZm9fdGFibGUnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2luZm9fdGV4dGZsb3cnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2luZm9fdGV4dGxpbmUnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2luaXRncmFwaGljcycgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfbGluZXRvJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9sb2FkXzNkZGF0YScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfbG9hZF9mb250JyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9sb2FkX2ljY3Byb2ZpbGUnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX2xvYWRfaW1hZ2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX21ha2VzcG90Y29sb3InID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX21vdmV0bycgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfbmV3JyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9vcGVuX2NjaXR0JyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9vcGVuX2ZpbGUnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX29wZW5faW1hZ2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX29wZW5faW1hZ2VfZmlsZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfb3Blbl9tZW1vcnlfaW1hZ2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX29wZW5fcGRpJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9vcGVuX3BkaV9kb2N1bWVudCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfb3Blbl9wZGlfcGFnZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfcGNvc19nZXRfbnVtYmVyJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9wY29zX2dldF9zdHJlYW0nID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3Bjb3NfZ2V0X3N0cmluZycgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfcGxhY2VfaW1hZ2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3BsYWNlX3BkaV9wYWdlJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9wcm9jZXNzX3BkaScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfcmVjdCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfcmVzdG9yZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfcmVzdW1lX3BhZ2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3JvdGF0ZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2F2ZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2NhbGUnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldF9ib3JkZXJfY29sb3InID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldF9ib3JkZXJfZGFzaCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2V0X2JvcmRlcl9zdHlsZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2V0X2dzdGF0ZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2V0X2luZm8nID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldF9sYXllcl9kZXBlbmRlbmN5JyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9zZXRfb3B0aW9uJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9zZXRfcGFyYW1ldGVyJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9zZXRfdGV4dF9vcHRpb24nID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldF90ZXh0X3BvcycgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2V0X3ZhbHVlJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9zZXRjb2xvcicgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2V0ZGFzaCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2V0ZGFzaHBhdHRlcm4nID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldGZsYXQnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldGZvbnQnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldGdyYXknID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldGdyYXlfZmlsbCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2V0Z3JheV9zdHJva2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldGxpbmVjYXAnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldGxpbmVqb2luJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9zZXRsaW5ld2lkdGgnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldG1hdHJpeCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2V0bWl0ZXJsaW1pdCcgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2V0cmdiY29sb3InID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldHJnYmNvbG9yX2ZpbGwnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NldHJnYmNvbG9yX3N0cm9rZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2hhZGluZycgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfc2hhZGluZ19wYXR0ZXJuJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9zaGZpbGwnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3Nob3cnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3Nob3dfYm94ZWQnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3Nob3dfeHknID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3NrZXcnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3N0cmluZ3dpZHRoJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl9zdHJva2UnID0+ICdwZGZsaWIvUERGbGliLnN0dWInLCAnUERGX3N1c3BlbmRfcGFnZScgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfdHJhbnNsYXRlJyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl91dGYxNl90b191dGY4JyA9PiAncGRmbGliL1BERmxpYi5zdHViJywgJ1BERl91dGYzMl90b191dGYxNicgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQREZfdXRmOF90b191dGYxNicgPT4gJ3BkZmxpYi9QREZsaWIuc3R1YicsICdQU19VTlJFU0VSVkVfUFJFRklYX19faGFsdF9jb21waWxlcicgPT4gJ3N0YW5kYXJkL19zdGFuZGFyZF9tYW51YWwuc3R1YicsICdQU19VTlJFU0VSVkVfUFJFRklYX2FycmF5JyA9PiAnc3RhbmRhcmQvX3R5cGVzLnN0dWInLCAnUFNfVU5SRVNFUlZFX1BSRUZJWF9kaWUnID0+ICdzdGFuZGFyZC9fdHlwZXMuc3R1YicsICdQU19VTlJFU0VSVkVfUFJFRklYX2VtcHR5JyA9PiAnc3RhbmRhcmQvX3R5cGVzLnN0dWInLCAnUFNfVU5SRVNFUlZFX1BSRUZJWF9ldmFsJyA9PiAnc3RhbmRhcmQvX3R5cGVzLnN0dWInLCAnUFNfVU5SRVNFUlZFX1BSRUZJWF9leGl0JyA9PiAnc3RhbmRhcmQvX3R5cGVzLnN0dWInLCAnUFNfVU5SRVNFUlZFX1BSRUZJWF9pc3NldCcgPT4gJ3N0YW5kYXJkL190eXBlcy5zdHViJywgJ1BTX1VOUkVTRVJWRV9QUkVGSVhfbGlzdCcgPT4gJ3N0YW5kYXJkL190eXBlcy5zdHViJywgJ1BTX1VOUkVTRVJWRV9QUkVGSVhfdW5zZXQnID0+ICdzdGFuZGFyZC9fdHlwZXMuc3R1YicsICdTUUxTUlZfUEhQVFlQRV9TVFJFQU0nID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1BIUFRZUEVfU1RSSU5HJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX0JJTkFSWScgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfU1FMVFlQRV9DSEFSJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX0RFQ0lNQUwnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NRTFRZUEVfTkNIQVInID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NRTFRZUEVfTlVNRVJJQycgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfU1FMVFlQRV9OVkFSQ0hBUicgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfU1FMVFlQRV9WQVJCSU5BUlknID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NRTFRZUEVfVkFSQ0hBUicgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTb2RpdW1cXGFkZCcgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGJpbjJoZXgnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjb21wYXJlJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2RlY3J5cHQnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fYWVhZF9hZXMyNTZnY21fZW5jcnlwdCcgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19hZWFkX2FlczI1NmdjbV9pc19hdmFpbGFibGUnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fYXV0aCcgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19hdXRoX3ZlcmlmeScgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19ib3gnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fYm94X2tleXBhaXInID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fYm94X2tleXBhaXJfZnJvbV9zZWNyZXRrZXlfYW5kX3B1YmxpY2tleScgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19ib3hfb3BlbicgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19ib3hfcHVibGlja2V5JyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcY3J5cHRvX2JveF9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXknID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fYm94X3NlYWwnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fYm94X3NlYWxfb3BlbicgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19ib3hfc2VjcmV0a2V5JyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcY3J5cHRvX2JveF9zZWVkX2tleXBhaXInID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fZ2VuZXJpY2hhc2gnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fZ2VuZXJpY2hhc2hfZmluYWwnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fZ2VuZXJpY2hhc2hfaW5pdCcgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19nZW5lcmljaGFzaF91cGRhdGUnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fa3gnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fcHdoYXNoJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1NicgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJfdmVyaWZ5JyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcY3J5cHRvX3B3aGFzaF9zdHInID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fcHdoYXNoX3N0cl92ZXJpZnknID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fc2NhbGFybXVsdCcgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fc2VjcmV0Ym94JyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcY3J5cHRvX3NlY3JldGJveF9vcGVuJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcY3J5cHRvX3Nob3J0aGFzaCcgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19zaWduJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcY3J5cHRvX3NpZ25fZGV0YWNoZWQnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fc2lnbl9lZDI1NTE5X3BrX3RvX2N1cnZlMjU1MTknID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTknID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fc2lnbl9rZXlwYWlyJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcY3J5cHRvX3NpZ25fa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5JyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcY3J5cHRvX3NpZ25fb3BlbicgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19zaWduX3B1YmxpY2tleScgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19zaWduX3B1YmxpY2tleV9mcm9tX3NlY3JldGtleScgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19zaWduX3NlY3JldGtleScgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19zaWduX3NlZWRfa2V5cGFpcicgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19zaWduX3ZlcmlmeV9kZXRhY2hlZCcgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGNyeXB0b19zdHJlYW0nID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxjcnlwdG9fc3RyZWFtX3hvcicgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXGhleDJiaW4nID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxpbmNyZW1lbnQnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxsaWJyYXJ5X3ZlcnNpb25fbWFqb3InID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxsaWJyYXJ5X3ZlcnNpb25fbWlub3InID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxtZW1jbXAnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxtZW16ZXJvJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxccmFuZG9tYnl0ZXNfYnVmJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxccmFuZG9tYnl0ZXNfcmFuZG9tMTYnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxyYW5kb21ieXRlc191bmlmb3JtJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcdmVyc2lvbl9zdHJpbmcnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnWnN0ZFxcY29tcHJlc3MnID0+ICd6c3RkL3pzdGQuc3R1YicsICdac3RkXFxjb21wcmVzc19kaWN0JyA9PiAnenN0ZC96c3RkLnN0dWInLCAnWnN0ZFxcdW5jb21wcmVzcycgPT4gJ3pzdGQvenN0ZC5zdHViJywgJ1pzdGRcXHVuY29tcHJlc3NfZGljdCcgPT4gJ3pzdGQvenN0ZC5zdHViJywgJ18nID0+ICdnZXR0ZXh0L2dldHRleHQuc3R1YicsICdhYnMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnYWNjZWxlcmF0b3Jfc2V0X3N0YXR1cycgPT4gJ3plbmQvemVuZC5zdHViJywgJ2Fjb3MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnYWNvc2gnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnYWRkY3NsYXNoZXMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnYWRkc2xhc2hlcycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICdhcGFjaGVfY2hpbGRfdGVybWluYXRlJyA9PiAnYXBhY2hlL2FwYWNoZS5zdHViJywgJ2FwYWNoZV9nZXRfbW9kdWxlcycgPT4gJ2FwYWNoZS9hcGFjaGUuc3R1YicsICdhcGFjaGVfZ2V0X3ZlcnNpb24nID0+ICdhcGFjaGUvYXBhY2hlLnN0dWInLCAnYXBhY2hlX2dldGVudicgPT4gJ2FwYWNoZS9hcGFjaGUuc3R1YicsICdhcGFjaGVfbG9va3VwX3VyaScgPT4gJ2FwYWNoZS9hcGFjaGUuc3R1YicsICdhcGFjaGVfbm90ZScgPT4gJ2FwYWNoZS9hcGFjaGUuc3R1YicsICdhcGFjaGVfcmVxdWVzdF9oZWFkZXJzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2FwYWNoZV9yZXNldF90aW1lb3V0JyA9PiAnYXBhY2hlL2FwYWNoZS5zdHViJywgJ2FwYWNoZV9yZXNwb25zZV9oZWFkZXJzJyA9PiAnYXBhY2hlL2FwYWNoZS5zdHViJywgJ2FwYWNoZV9zZXRlbnYnID0+ICdhcGFjaGUvYXBhY2hlLnN0dWInLCAnYXBjX2FkZCcgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FwY19iaW5fZHVtcCcgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FwY19iaW5fZHVtcGZpbGUnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdhcGNfYmluX2xvYWQnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdhcGNfYmluX2xvYWRmaWxlJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnYXBjX2NhY2hlX2luZm8nID0+ICdhcGN1L2FwY3Uuc3R1YicsICdhcGNfY2FzJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnYXBjX2NsZWFyX2NhY2hlJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnYXBjX2NvbXBpbGVfZmlsZScgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FwY19kZWMnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdhcGNfZGVmaW5lX2NvbnN0YW50cycgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FwY19kZWxldGUnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdhcGNfZGVsZXRlX2ZpbGUnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdhcGNfZXhpc3RzJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnYXBjX2ZldGNoJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnYXBjX2luYycgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FwY19sb2FkX2NvbnN0YW50cycgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FwY19zbWFfaW5mbycgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FwY19zdG9yZScgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FwY3VfYWRkJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnYXBjdV9jYWNoZV9pbmZvJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnYXBjdV9jYXMnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdhcGN1X2NsZWFyX2NhY2hlJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnYXBjdV9kZWMnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdhcGN1X2RlbGV0ZScgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FwY3VfZW5hYmxlZCcgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FwY3VfZW50cnknID0+ICdhcGN1L2FwY3Uuc3R1YicsICdhcGN1X2V4aXN0cycgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FwY3VfZmV0Y2gnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdhcGN1X2luYycgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FwY3Vfa2V5X2luZm8nID0+ICdhcGN1L2FwY3Uuc3R1YicsICdhcGN1X3NtYV9pbmZvJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnYXBjdV9zdG9yZScgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ2FycmF5X2FsbCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEwLnN0dWInLCAnYXJyYXlfYW55JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMTAuc3R1YicsICdhcnJheV9jaGFuZ2Vfa2V5X2Nhc2UnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfY2h1bmsnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfY29sdW1uJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ2FycmF5X2NvbWJpbmUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfY291bnRfdmFsdWVzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ2FycmF5X2RpZmYnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfZGlmZl9hc3NvYycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdhcnJheV9kaWZmX2tleScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdhcnJheV9kaWZmX3Vhc3NvYycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdhcnJheV9kaWZmX3VrZXknID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfZmlsbCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdhcnJheV9maWxsX2tleXMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnYXJyYXlfZmlsdGVyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ2FycmF5X2ZpbmQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xMC5zdHViJywgJ2FycmF5X2ZpbmRfa2V5JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMTAuc3R1YicsICdhcnJheV9mbGlwJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ2FycmF5X2ludGVyc2VjdCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdhcnJheV9pbnRlcnNlY3RfYXNzb2MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfaW50ZXJzZWN0X2tleScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdhcnJheV9pbnRlcnNlY3RfdWFzc29jJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ2FycmF5X2ludGVyc2VjdF91a2V5JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ2FycmF5X2lzX2xpc3QnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfa2V5X2V4aXN0cycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdhcnJheV9rZXlfZmlyc3QnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfa2V5X2xhc3QnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfa2V5cycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdhcnJheV9tYXAnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfbWVyZ2UnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnYXJyYXlfbWVyZ2VfcmVjdXJzaXZlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ2FycmF5X211bHRpc29ydCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdhcnJheV9wYWQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfcG9wJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ2FycmF5X3Byb2R1Y3QnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfcHVzaCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdhcnJheV9yYW5kJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ2FycmF5X3JlZHVjZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdhcnJheV9yZXBsYWNlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ2FycmF5X3JlcGxhY2VfcmVjdXJzaXZlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ2FycmF5X3JldmVyc2UnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfc2VhcmNoJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ2FycmF5X3NoaWZ0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ2FycmF5X3NsaWNlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ2FycmF5X3NwbGljZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdhcnJheV9zdW0nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfdWRpZmYnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfdWRpZmZfYXNzb2MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfdWRpZmZfdWFzc29jJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ2FycmF5X3VpbnRlcnNlY3QnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfdWludGVyc2VjdF9hc3NvYycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdhcnJheV91aW50ZXJzZWN0X3Vhc3NvYycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdhcnJheV91bmlxdWUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfdW5zaGlmdCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdhcnJheV92YWx1ZXMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXJyYXlfd2FsaycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdhcnJheV93YWxrX3JlY3Vyc2l2ZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdhcnNvcnQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnYXNpbicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdhc2luaCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdhc29ydCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdhc3NlcnQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXNzZXJ0X29wdGlvbnMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnYXN0XFxnZXRfa2luZF9uYW1lJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZ2V0X21ldGFkYXRhJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZ2V0X3N1cHBvcnRlZF92ZXJzaW9ucycgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGtpbmRfdXNlc19mbGFncycgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXHBhcnNlX2NvZGUnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxwYXJzZV9maWxlJyA9PiAnYXN0L2FzdC5zdHViJywgJ2F0YW4nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnYXRhbjInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnYXRhbmgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnYmFzZTY0X2RlY29kZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdiYXNlNjRfZW5jb2RlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2Jhc2VfY29udmVydCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdiYXNlbmFtZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICdiY2FkZCcgPT4gJ2JjbWF0aC9iY21hdGguc3R1YicsICdiY2NlaWwnID0+ICdiY21hdGgvYmNtYXRoLnN0dWInLCAnYmNjb21wJyA9PiAnYmNtYXRoL2JjbWF0aC5zdHViJywgJ2JjZGl2JyA9PiAnYmNtYXRoL2JjbWF0aC5zdHViJywgJ2JjZmxvb3InID0+ICdiY21hdGgvYmNtYXRoLnN0dWInLCAnYmNtb2QnID0+ICdiY21hdGgvYmNtYXRoLnN0dWInLCAnYmNtdWwnID0+ICdiY21hdGgvYmNtYXRoLnN0dWInLCAnYmNwb3cnID0+ICdiY21hdGgvYmNtYXRoLnN0dWInLCAnYmNwb3dtb2QnID0+ICdiY21hdGgvYmNtYXRoLnN0dWInLCAnYmNyb3VuZCcgPT4gJ2JjbWF0aC9iY21hdGguc3R1YicsICdiY3NjYWxlJyA9PiAnYmNtYXRoL2JjbWF0aC5zdHViJywgJ2Jjc3FydCcgPT4gJ2JjbWF0aC9iY21hdGguc3R1YicsICdiY3N1YicgPT4gJ2JjbWF0aC9iY21hdGguc3R1YicsICdiaW4yaGV4JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0JyA9PiAnZ2V0dGV4dC9nZXR0ZXh0LnN0dWInLCAnYmluZGVjJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2JpbmR0ZXh0ZG9tYWluJyA9PiAnZ2V0dGV4dC9nZXR0ZXh0LnN0dWInLCAnYm9vbHZhbCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdicm90bGlfY29tcHJlc3MnID0+ICdicm90bGkvYnJvdGxpLnN0dWInLCAnYnJvdGxpX2NvbXByZXNzX2FkZCcgPT4gJ2Jyb3RsaS9icm90bGkuc3R1YicsICdicm90bGlfY29tcHJlc3NfaW5pdCcgPT4gJ2Jyb3RsaS9icm90bGkuc3R1YicsICdicm90bGlfdW5jb21wcmVzcycgPT4gJ2Jyb3RsaS9icm90bGkuc3R1YicsICdicm90bGlfdW5jb21wcmVzc19hZGQnID0+ICdicm90bGkvYnJvdGxpLnN0dWInLCAnYnJvdGxpX3VuY29tcHJlc3NfaW5pdCcgPT4gJ2Jyb3RsaS9icm90bGkuc3R1YicsICdiemNsb3NlJyA9PiAnYnoyL2J6Mi5zdHViJywgJ2J6Y29tcHJlc3MnID0+ICdiejIvYnoyLnN0dWInLCAnYnpkZWNvbXByZXNzJyA9PiAnYnoyL2J6Mi5zdHViJywgJ2J6ZXJybm8nID0+ICdiejIvYnoyLnN0dWInLCAnYnplcnJvcicgPT4gJ2J6Mi9iejIuc3R1YicsICdiemVycnN0cicgPT4gJ2J6Mi9iejIuc3R1YicsICdiemZsdXNoJyA9PiAnYnoyL2J6Mi5zdHViJywgJ2J6b3BlbicgPT4gJ2J6Mi9iejIuc3R1YicsICdienJlYWQnID0+ICdiejIvYnoyLnN0dWInLCAnYnp3cml0ZScgPT4gJ2J6Mi9iejIuc3R1YicsICdjYWxfZGF5c19pbl9tb250aCcgPT4gJ2NhbGVuZGFyL2NhbGVuZGFyLnN0dWInLCAnY2FsX2Zyb21famQnID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ2NhbF9pbmZvJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdjYWxfdG9famQnID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ2NhbGxfdXNlcl9mdW5jJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2NhbGxfdXNlcl9mdW5jX2FycmF5JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2NhbGxfdXNlcl9tZXRob2QnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAnY2FsbF91c2VyX21ldGhvZF9hcnJheScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdjZWlsJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2NoZGlyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2NoZWNrZGF0ZScgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2NoZWNrZG5zcnInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAnY2hncnAnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAnY2htb2QnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAnY2hvcCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdjaG93bicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdjaHInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAnY2hyb290JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2NodW5rX3NwbGl0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ2NsYXNzX2FsaWFzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnY2xhc3NfZXhpc3RzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnY2xhc3NfaW1wbGVtZW50cycgPT4gJ1NQTC9TUExfZi5zdHViJywgJ2NsYXNzX3BhcmVudHMnID0+ICdTUEwvU1BMX2Yuc3R1YicsICdjbGFzc191c2VzJyA9PiAnU1BML1NQTF9mLnN0dWInLCAnY2xlYXJzdGF0Y2FjaGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAnY2xpX2dldF9wcm9jZXNzX3RpdGxlJyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICdjbGlfc2V0X3Byb2Nlc3NfdGl0bGUnID0+ICdzdGFuZGFyZC9iYXNpYy5zdHViJywgJ2Nsb3NlZGlyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2Nsb3NlbG9nJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ2NvbGxhdG9yX2Fzb3J0JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnY29sbGF0b3JfY29tcGFyZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2NvbGxhdG9yX2NyZWF0ZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2NvbGxhdG9yX2dldF9hdHRyaWJ1dGUnID0+ICdpbnRsL2ludGwuc3R1YicsICdjb2xsYXRvcl9nZXRfZXJyb3JfY29kZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2NvbGxhdG9yX2dldF9lcnJvcl9tZXNzYWdlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnY29sbGF0b3JfZ2V0X2xvY2FsZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2NvbGxhdG9yX2dldF9zb3J0X2tleScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2NvbGxhdG9yX2dldF9zdHJlbmd0aCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ2NvbGxhdG9yX3NldF9hdHRyaWJ1dGUnID0+ICdpbnRsL2ludGwuc3R1YicsICdjb2xsYXRvcl9zZXRfc3RyZW5ndGgnID0+ICdpbnRsL2ludGwuc3R1YicsICdjb2xsYXRvcl9zb3J0JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnY29sbGF0b3Jfc29ydF93aXRoX3NvcnRfa2V5cycgPT4gJ2ludGwvaW50bC5zdHViJywgJ2NvbV9jcmVhdGVfZ3VpZCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ2NvbV9ldmVudF9zaW5rJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnY29tX2dldF9hY3RpdmVfb2JqZWN0JyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnY29tX2xvYWRfdHlwZWxpYicgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ2NvbV9tZXNzYWdlX3B1bXAnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdjb21fcHJpbnRfdHlwZWluZm8nID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdjb21wYWN0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ2NvbmZpZ19nZXRfaGFzaCcgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICdjb25maXJtX3Bkb19pYm1fY29tcGlsZWQnID0+ICdQRE8vUERPLnN0dWInLCAnY29ubmVjdGlvbl9hYm9ydGVkJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2Nvbm5lY3Rpb25fc3RhdHVzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2NvbnN0YW50JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ2NvbnZlcnRfY3lyX3N0cmluZycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdjb252ZXJ0X3V1ZGVjb2RlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2NvbnZlcnRfdXVlbmNvZGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnY29weScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdjb3MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnY29zaCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdjb3VudCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdjb3VudF9jaGFycycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICdjcmMzMicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzAuc3R1YicsICdjcmVhdGVfZnVuY3Rpb24nID0+ICdDb3JlL0NvcmUuc3R1YicsICdjcnlwdCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdjdHlwZV9hbG51bScgPT4gJ2N0eXBlL2N0eXBlLnN0dWInLCAnY3R5cGVfYWxwaGEnID0+ICdjdHlwZS9jdHlwZS5zdHViJywgJ2N0eXBlX2NudHJsJyA9PiAnY3R5cGUvY3R5cGUuc3R1YicsICdjdHlwZV9kaWdpdCcgPT4gJ2N0eXBlL2N0eXBlLnN0dWInLCAnY3R5cGVfZ3JhcGgnID0+ICdjdHlwZS9jdHlwZS5zdHViJywgJ2N0eXBlX2xvd2VyJyA9PiAnY3R5cGUvY3R5cGUuc3R1YicsICdjdHlwZV9wcmludCcgPT4gJ2N0eXBlL2N0eXBlLnN0dWInLCAnY3R5cGVfcHVuY3QnID0+ICdjdHlwZS9jdHlwZS5zdHViJywgJ2N0eXBlX3NwYWNlJyA9PiAnY3R5cGUvY3R5cGUuc3R1YicsICdjdHlwZV91cHBlcicgPT4gJ2N0eXBlL2N0eXBlLnN0dWInLCAnY3R5cGVfeGRpZ2l0JyA9PiAnY3R5cGUvY3R5cGUuc3R1YicsICdjdWJyaWRfYWZmZWN0ZWRfcm93cycgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfYmluZCcgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfY2xpZW50X2VuY29kaW5nJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9jbG9zZScgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfY2xvc2VfcHJlcGFyZScgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfY2xvc2VfcmVxdWVzdCcgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfY29sX2dldCcgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfY29sX3NpemUnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2NvbHVtbl9uYW1lcycgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfY29sdW1uX3R5cGVzJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9jb21taXQnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2Nvbm5lY3QnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2Nvbm5lY3Rfd2l0aF91cmwnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2N1cnJlbnRfb2lkJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9kYXRhX3NlZWsnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2RiX25hbWUnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2RiX3BhcmFtZXRlcicgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfZGlzY29ubmVjdCcgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfZHJvcCcgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfZXJybm8nID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2Vycm9yJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9lcnJvcl9jb2RlJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9lcnJvcl9jb2RlX2ZhY2lsaXR5JyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9lcnJvcl9tc2cnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2V4ZWN1dGUnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2ZldGNoJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9mZXRjaF9hcnJheScgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfZmV0Y2hfYXNzb2MnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2ZldGNoX2ZpZWxkJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9mZXRjaF9sZW5ndGhzJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9mZXRjaF9vYmplY3QnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2ZldGNoX3JvdycgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfZmllbGRfZmxhZ3MnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2ZpZWxkX2xlbicgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfZmllbGRfbmFtZScgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfZmllbGRfc2VlaycgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfZmllbGRfdGFibGUnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2ZpZWxkX3R5cGUnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2ZyZWVfcmVzdWx0JyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9nZXQnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2dldF9hdXRvY29tbWl0JyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9nZXRfY2hhcnNldCcgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfZ2V0X2NsYXNzX25hbWUnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2dldF9jbGllbnRfaW5mbycgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfZ2V0X2RiX3BhcmFtZXRlcicgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfZ2V0X3F1ZXJ5X3RpbWVvdXQnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2dldF9zZXJ2ZXJfaW5mbycgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfaW5zZXJ0X2lkJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9pc19pbnN0YW5jZScgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfbGlzdF9kYnMnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2xvYjJfYmluZCcgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfbG9iMl9jbG9zZScgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfbG9iMl9leHBvcnQnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2xvYjJfaW1wb3J0JyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9sb2IyX25ldycgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfbG9iMl9yZWFkJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9sb2IyX3NlZWsnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2xvYjJfc2VlazY0JyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9sb2IyX3NpemUnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2xvYjJfc2l6ZTY0JyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9sb2IyX3RlbGwnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2xvYjJfdGVsbDY0JyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9sb2IyX3dyaXRlJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9sb2JfY2xvc2UnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2xvYl9leHBvcnQnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2xvYl9nZXQnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX2xvYl9zZW5kJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9sb2Jfc2l6ZScgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfbG9ja19yZWFkJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9sb2NrX3dyaXRlJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9tb3ZlX2N1cnNvcicgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfbmV4dF9yZXN1bHQnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX251bV9jb2xzJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9udW1fZmllbGRzJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9udW1fcm93cycgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfcGNvbm5lY3QnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX3Bjb25uZWN0X3dpdGhfdXJsJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9waW5nJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9wcmVwYXJlJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9wdXQnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX3F1ZXJ5JyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9yZWFsX2VzY2FwZV9zdHJpbmcnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX3Jlc3VsdCcgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfcm9sbGJhY2snID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX3NjaGVtYScgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfc2VxX2FkZCcgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfc2VxX2Ryb3AnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX3NlcV9pbnNlcnQnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX3NlcV9wdXQnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX3NldF9hZGQnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX3NldF9hdXRvY29tbWl0JyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9zZXRfZGJfcGFyYW1ldGVyJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ2N1YnJpZF9zZXRfZHJvcCcgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdjdWJyaWRfc2V0X3F1ZXJ5X3RpbWVvdXQnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX3VuYnVmZmVyZWRfcXVlcnknID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VicmlkX3ZlcnNpb24nID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnY3VybF9jbG9zZScgPT4gJ2N1cmwvY3VybC5zdHViJywgJ2N1cmxfY29weV9oYW5kbGUnID0+ICdjdXJsL2N1cmwuc3R1YicsICdjdXJsX2Vycm5vJyA9PiAnY3VybC9jdXJsLnN0dWInLCAnY3VybF9lcnJvcicgPT4gJ2N1cmwvY3VybC5zdHViJywgJ2N1cmxfZXNjYXBlJyA9PiAnY3VybC9jdXJsLnN0dWInLCAnY3VybF9leGVjJyA9PiAnY3VybC9jdXJsLnN0dWInLCAnY3VybF9maWxlX2NyZWF0ZScgPT4gJ2N1cmwvY3VybC5zdHViJywgJ2N1cmxfZ2V0aW5mbycgPT4gJ2N1cmwvY3VybC5zdHViJywgJ2N1cmxfaW5pdCcgPT4gJ2N1cmwvY3VybC5zdHViJywgJ2N1cmxfbXVsdGlfYWRkX2hhbmRsZScgPT4gJ2N1cmwvY3VybC5zdHViJywgJ2N1cmxfbXVsdGlfY2xvc2UnID0+ICdjdXJsL2N1cmwuc3R1YicsICdjdXJsX211bHRpX2Vycm5vJyA9PiAnY3VybC9jdXJsLnN0dWInLCAnY3VybF9tdWx0aV9leGVjJyA9PiAnY3VybC9jdXJsLnN0dWInLCAnY3VybF9tdWx0aV9nZXRjb250ZW50JyA9PiAnY3VybC9jdXJsLnN0dWInLCAnY3VybF9tdWx0aV9pbmZvX3JlYWQnID0+ICdjdXJsL2N1cmwuc3R1YicsICdjdXJsX211bHRpX2luaXQnID0+ICdjdXJsL2N1cmwuc3R1YicsICdjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUnID0+ICdjdXJsL2N1cmwuc3R1YicsICdjdXJsX211bHRpX3NlbGVjdCcgPT4gJ2N1cmwvY3VybC5zdHViJywgJ2N1cmxfbXVsdGlfc2V0b3B0JyA9PiAnY3VybC9jdXJsLnN0dWInLCAnY3VybF9tdWx0aV9zdHJlcnJvcicgPT4gJ2N1cmwvY3VybC5zdHViJywgJ2N1cmxfcGF1c2UnID0+ICdjdXJsL2N1cmwuc3R1YicsICdjdXJsX3Jlc2V0JyA9PiAnY3VybC9jdXJsLnN0dWInLCAnY3VybF9zZXRvcHQnID0+ICdjdXJsL2N1cmwuc3R1YicsICdjdXJsX3NldG9wdF9hcnJheScgPT4gJ2N1cmwvY3VybC5zdHViJywgJ2N1cmxfc2hhcmVfY2xvc2UnID0+ICdjdXJsL2N1cmwuc3R1YicsICdjdXJsX3NoYXJlX2Vycm5vJyA9PiAnY3VybC9jdXJsLnN0dWInLCAnY3VybF9zaGFyZV9pbml0JyA9PiAnY3VybC9jdXJsLnN0dWInLCAnY3VybF9zaGFyZV9zZXRvcHQnID0+ICdjdXJsL2N1cmwuc3R1YicsICdjdXJsX3NoYXJlX3N0cmVycm9yJyA9PiAnY3VybC9jdXJsLnN0dWInLCAnY3VybF9zdHJlcnJvcicgPT4gJ2N1cmwvY3VybC5zdHViJywgJ2N1cmxfdW5lc2NhcGUnID0+ICdjdXJsL2N1cmwuc3R1YicsICdjdXJsX3Vwa2VlcCcgPT4gJ2N1cmwvY3VybC5zdHViJywgJ2N1cmxfdmVyc2lvbicgPT4gJ2N1cmwvY3VybC5zdHViJywgJ2N1cnJlbnQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnZGF0ZScgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2RhdGVfYWRkJyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnZGF0ZV9jcmVhdGUnID0+ICdkYXRlL2RhdGUuc3R1YicsICdkYXRlX2NyZWF0ZV9mcm9tX2Zvcm1hdCcgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2RhdGVfY3JlYXRlX2ltbXV0YWJsZScgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2RhdGVfY3JlYXRlX2ltbXV0YWJsZV9mcm9tX2Zvcm1hdCcgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2RhdGVfZGF0ZV9zZXQnID0+ICdkYXRlL2RhdGUuc3R1YicsICdkYXRlX2RlZmF1bHRfdGltZXpvbmVfZ2V0JyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCcgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2RhdGVfZGlmZicgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2RhdGVfZm9ybWF0JyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnZGF0ZV9nZXRfbGFzdF9lcnJvcnMnID0+ICdkYXRlL2RhdGUuc3R1YicsICdkYXRlX2ludGVydmFsX2NyZWF0ZV9mcm9tX2RhdGVfc3RyaW5nJyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnZGF0ZV9pbnRlcnZhbF9mb3JtYXQnID0+ICdkYXRlL2RhdGUuc3R1YicsICdkYXRlX2lzb2RhdGVfc2V0JyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnZGF0ZV9tb2RpZnknID0+ICdkYXRlL2RhdGUuc3R1YicsICdkYXRlX29mZnNldF9nZXQnID0+ICdkYXRlL2RhdGUuc3R1YicsICdkYXRlX3BhcnNlJyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnZGF0ZV9wYXJzZV9mcm9tX2Zvcm1hdCcgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2RhdGVfc3ViJyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnZGF0ZV9zdW5faW5mbycgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2RhdGVfc3VucmlzZScgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2RhdGVfc3Vuc2V0JyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnZGF0ZV90aW1lX3NldCcgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2RhdGVfdGltZXN0YW1wX2dldCcgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2RhdGVfdGltZXN0YW1wX3NldCcgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2RhdGVfdGltZXpvbmVfZ2V0JyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnZGF0ZV90aW1lem9uZV9zZXQnID0+ICdkYXRlL2RhdGUuc3R1YicsICdkYXRlZm10X2NyZWF0ZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2RhdGVmbXRfZm9ybWF0JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnZGF0ZWZtdF9mb3JtYXRfb2JqZWN0JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnZGF0ZWZtdF9nZXRfY2FsZW5kYXInID0+ICdpbnRsL2ludGwuc3R1YicsICdkYXRlZm10X2dldF9jYWxlbmRhcl9vYmplY3QnID0+ICdpbnRsL2ludGwuc3R1YicsICdkYXRlZm10X2dldF9kYXRldHlwZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2RhdGVmbXRfZ2V0X2Vycm9yX2NvZGUnID0+ICdpbnRsL2ludGwuc3R1YicsICdkYXRlZm10X2dldF9lcnJvcl9tZXNzYWdlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnZGF0ZWZtdF9nZXRfbG9jYWxlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnZGF0ZWZtdF9nZXRfcGF0dGVybicgPT4gJ2ludGwvaW50bC5zdHViJywgJ2RhdGVmbXRfZ2V0X3RpbWV0eXBlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnZGF0ZWZtdF9nZXRfdGltZXpvbmUnID0+ICdpbnRsL2ludGwuc3R1YicsICdkYXRlZm10X2dldF90aW1lem9uZV9pZCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ2RhdGVmbXRfaXNfbGVuaWVudCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ2RhdGVmbXRfbG9jYWx0aW1lJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnZGF0ZWZtdF9wYXJzZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2RhdGVmbXRfc2V0X2NhbGVuZGFyJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnZGF0ZWZtdF9zZXRfbGVuaWVudCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ2RhdGVmbXRfc2V0X3BhdHRlcm4nID0+ICdpbnRsL2ludGwuc3R1YicsICdkYXRlZm10X3NldF90aW1lem9uZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2RhdGVmbXRfc2V0X3RpbWV6b25lX2lkJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnZGIyX2F1dG9jb21taXQnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfYmluZF9wYXJhbScgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiMl9jbGllbnRfaW5mbycgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiMl9jbG9zZScgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiMl9jb2x1bW5fcHJpdmlsZWdlcycgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiMl9jb2x1bW5wcml2aWxlZ2VzJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2NvbHVtbnMnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfY29tbWl0JyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2Nvbm5fZXJyb3InID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfY29ubl9lcnJvcm1zZycgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiMl9jb25uZWN0JyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2N1cnNvcl90eXBlJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2VzY2FwZV9zdHJpbmcnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfZXhlYycgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiMl9leGVjdXRlJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2ZldGNoX2FycmF5JyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2ZldGNoX2Fzc29jJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2ZldGNoX2JvdGgnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfZmV0Y2hfb2JqZWN0JyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2ZldGNoX3JvdycgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiMl9maWVsZF9kaXNwbGF5X3NpemUnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfZmllbGRfbmFtZScgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiMl9maWVsZF9udW0nID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfZmllbGRfcHJlY2lzaW9uJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2ZpZWxkX3NjYWxlJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2ZpZWxkX3R5cGUnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfZmllbGRfd2lkdGgnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfZm9yZWlnbl9rZXlzJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2ZvcmVpZ25rZXlzJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2ZyZWVfcmVzdWx0JyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2ZyZWVfc3RtdCcgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiMl9nZXRfb3B0aW9uJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2xhc3RfaW5zZXJ0X2lkJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX2xvYl9yZWFkJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX25leHRfcmVzdWx0JyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX251bV9maWVsZHMnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfbnVtX3Jvd3MnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfcGNsb3NlJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX3Bjb25uZWN0JyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX3ByZXBhcmUnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfcHJpbWFyeV9rZXlzJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX3ByaW1hcnlrZXlzJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX3Byb2NlZHVyZV9jb2x1bW5zJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX3Byb2NlZHVyZWNvbHVtbnMnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfcHJvY2VkdXJlcycgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiMl9yZXN1bHQnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfcm9sbGJhY2snID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfc2VydmVyX2luZm8nID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfc2V0X29wdGlvbicgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiMl9zZXRvcHRpb24nID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfc3BlY2lhbF9jb2x1bW5zJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX3NwZWNpYWxjb2x1bW5zJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX3N0YXRpc3RpY3MnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfc3RtdF9lcnJvcicgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiMl9zdG10X2Vycm9ybXNnJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX3RhYmxlX3ByaXZpbGVnZXMnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdkYjJfdGFibGVwcml2aWxlZ2VzJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnZGIyX3RhYmxlcycgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ2RiYV9jbG9zZScgPT4gJ2RiYS9kYmEuc3R1YicsICdkYmFfZGVsZXRlJyA9PiAnZGJhL2RiYS5zdHViJywgJ2RiYV9leGlzdHMnID0+ICdkYmEvZGJhLnN0dWInLCAnZGJhX2ZldGNoJyA9PiAnZGJhL2RiYS5zdHViJywgJ2RiYV9maXJzdGtleScgPT4gJ2RiYS9kYmEuc3R1YicsICdkYmFfaGFuZGxlcnMnID0+ICdkYmEvZGJhLnN0dWInLCAnZGJhX2luc2VydCcgPT4gJ2RiYS9kYmEuc3R1YicsICdkYmFfa2V5X3NwbGl0JyA9PiAnZGJhL2RiYS5zdHViJywgJ2RiYV9saXN0JyA9PiAnZGJhL2RiYS5zdHViJywgJ2RiYV9uZXh0a2V5JyA9PiAnZGJhL2RiYS5zdHViJywgJ2RiYV9vcGVuJyA9PiAnZGJhL2RiYS5zdHViJywgJ2RiYV9vcHRpbWl6ZScgPT4gJ2RiYS9kYmEuc3R1YicsICdkYmFfcG9wZW4nID0+ICdkYmEvZGJhLnN0dWInLCAnZGJhX3JlcGxhY2UnID0+ICdkYmEvZGJhLnN0dWInLCAnZGJhX3N5bmMnID0+ICdkYmEvZGJhLnN0dWInLCAnZGNnZXR0ZXh0JyA9PiAnZ2V0dGV4dC9nZXR0ZXh0LnN0dWInLCAnZGNuZ2V0dGV4dCcgPT4gJ2dldHRleHQvZ2V0dGV4dC5zdHViJywgJ2RlYnVnX2JhY2t0cmFjZScgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2RlYnVnX3ByaW50X2JhY2t0cmFjZScgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2RlYnVnX3p2YWxfZHVtcCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdkZWJ1Z2dlcl9jb25uZWN0JyA9PiAnWmVuZERlYnVnZ2VyL1plbmREZWJ1Z2dlci5zdHViJywgJ2RlYnVnZ2VyX2Nvbm5lY3Rvcl9waWQnID0+ICdaZW5kRGVidWdnZXIvWmVuZERlYnVnZ2VyLnN0dWInLCAnZGVidWdnZXJfZ2V0X3NlcnZlcl9zdGFydF90aW1lJyA9PiAnWmVuZERlYnVnZ2VyL1plbmREZWJ1Z2dlci5zdHViJywgJ2RlYnVnZ2VyX3ByaW50JyA9PiAnWmVuZERlYnVnZ2VyL1plbmREZWJ1Z2dlci5zdHViJywgJ2RlYnVnZ2VyX3N0YXJ0X2RlYnVnJyA9PiAnWmVuZERlYnVnZ2VyL1plbmREZWJ1Z2dlci5zdHViJywgJ2RlY2JpbicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdkZWNoZXgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnZGVjb2N0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2RlZmVyJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ2RlZmluZScgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2RlZmluZV9zeXNsb2dfdmFyaWFibGVzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ2RlZmluZWQnID0+ICdDb3JlL0NvcmUuc3R1YicsICdkZWZsYXRlX2FkZCcgPT4gJ3psaWIvemxpYi5zdHViJywgJ2RlZmxhdGVfaW5pdCcgPT4gJ3psaWIvemxpYi5zdHViJywgJ2RlZzJyYWQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnZGdldHRleHQnID0+ICdnZXR0ZXh0L2dldHRleHQuc3R1YicsICdkaW9fY2xvc2UnID0+ICdkaW8vZGlvLnN0dWInLCAnZGlvX2ZjbnRsJyA9PiAnZGlvL2Rpby5zdHViJywgJ2Rpb19vcGVuJyA9PiAnZGlvL2Rpby5zdHViJywgJ2Rpb19yYXcnID0+ICdkaW8vZGlvLnN0dWInLCAnZGlvX3JlYWQnID0+ICdkaW8vZGlvLnN0dWInLCAnZGlvX3NlZWsnID0+ICdkaW8vZGlvLnN0dWInLCAnZGlvX3NlcmlhbCcgPT4gJ2Rpby9kaW8uc3R1YicsICdkaW9fc3RhdCcgPT4gJ2Rpby9kaW8uc3R1YicsICdkaW9fdGNzZXRhdHRyJyA9PiAnZGlvL2Rpby5zdHViJywgJ2Rpb190cnVuY2F0ZScgPT4gJ2Rpby9kaW8uc3R1YicsICdkaW9fd3JpdGUnID0+ICdkaW8vZGlvLnN0dWInLCAnZGlyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2Rpcm5hbWUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnZGlza19mcmVlX3NwYWNlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2Rpc2tfdG90YWxfc3BhY2UnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAnZGlza2ZyZWVzcGFjZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdkbCcgPT4gJ3N0YW5kYXJkL2Jhc2ljLnN0dWInLCAnZG5nZXR0ZXh0JyA9PiAnZ2V0dGV4dC9nZXR0ZXh0LnN0dWInLCAnZG5zX2NoZWNrX3JlY29yZCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdkbnNfZ2V0X214JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2Ruc19nZXRfcmVjb3JkJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2RvbV9pbXBvcnRfc2ltcGxleG1sJyA9PiAnZG9tL2RvbS5zdHViJywgJ2RvdWJsZXZhbCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdlYWNoJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnZWFzdGVyX2RhdGUnID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ2Vhc3Rlcl9kYXlzJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdlaW9fYnVzeScgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fY2FuY2VsJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19jaG1vZCcgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fY2hvd24nID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX2Nsb3NlJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19jdXN0b20nID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX2R1cDInID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX2V2ZW50X2xvb3AnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX2ZhbGxvY2F0ZScgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fZmNobW9kJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19mY2hvd24nID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX2ZkYXRhc3luYycgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fZnN0YXQnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX2ZzdGF0dmZzJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19mc3luYycgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fZnRydW5jYXRlJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19mdXRpbWUnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX2dldF9ldmVudF9zdHJlYW0nID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX2dldF9sYXN0X2Vycm9yJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19ncnAnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX2dycF9hZGQnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX2dycF9jYW5jZWwnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX2dycF9saW1pdCcgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fbGluaycgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fbHN0YXQnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX21rZGlyJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19ta25vZCcgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fbm9wJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19ucGVuZGluZycgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fbnJlYWR5JyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19ucmVxcycgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fbnRocmVhZHMnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX29wZW4nID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX3BvbGwnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX3JlYWQnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX3JlYWRhaGVhZCcgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fcmVhZGRpcicgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fcmVhZGxpbmsnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX3JlYWxwYXRoJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19yZW5hbWUnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX3JtZGlyJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19zZWVrJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19zZW5kZmlsZScgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fc2V0X21heF9pZGxlJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19zZXRfbWF4X3BhcmFsbGVsJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb19zZXRfbWF4X3BvbGxfcmVxcycgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fc2V0X21heF9wb2xsX3RpbWUnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX3NldF9taW5fcGFyYWxsZWwnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX3N0YXQnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX3N0YXR2ZnMnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX3N5bWxpbmsnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX3N5bmMnID0+ICdlaW8vZWlvLnN0dWInLCAnZWlvX3N5bmNfZmlsZV9yYW5nZScgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fc3luY2ZzJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb190cnVuY2F0ZScgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fdW5saW5rJyA9PiAnZWlvL2Vpby5zdHViJywgJ2Vpb191dGltZScgPT4gJ2Vpby9laW8uc3R1YicsICdlaW9fd3JpdGUnID0+ICdlaW8vZWlvLnN0dWInLCAnZW5jaGFudF9icm9rZXJfZGVzY3JpYmUnID0+ICdlbmNoYW50L2VuY2hhbnQuc3R1YicsICdlbmNoYW50X2Jyb2tlcl9kaWN0X2V4aXN0cycgPT4gJ2VuY2hhbnQvZW5jaGFudC5zdHViJywgJ2VuY2hhbnRfYnJva2VyX2ZyZWUnID0+ICdlbmNoYW50L2VuY2hhbnQuc3R1YicsICdlbmNoYW50X2Jyb2tlcl9mcmVlX2RpY3QnID0+ICdlbmNoYW50L2VuY2hhbnQuc3R1YicsICdlbmNoYW50X2Jyb2tlcl9nZXRfZGljdF9wYXRoJyA9PiAnZW5jaGFudC9lbmNoYW50LnN0dWInLCAnZW5jaGFudF9icm9rZXJfZ2V0X2Vycm9yJyA9PiAnZW5jaGFudC9lbmNoYW50LnN0dWInLCAnZW5jaGFudF9icm9rZXJfaW5pdCcgPT4gJ2VuY2hhbnQvZW5jaGFudC5zdHViJywgJ2VuY2hhbnRfYnJva2VyX2xpc3RfZGljdHMnID0+ICdlbmNoYW50L2VuY2hhbnQuc3R1YicsICdlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3QnID0+ICdlbmNoYW50L2VuY2hhbnQuc3R1YicsICdlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X3B3bF9kaWN0JyA9PiAnZW5jaGFudC9lbmNoYW50LnN0dWInLCAnZW5jaGFudF9icm9rZXJfc2V0X2RpY3RfcGF0aCcgPT4gJ2VuY2hhbnQvZW5jaGFudC5zdHViJywgJ2VuY2hhbnRfYnJva2VyX3NldF9vcmRlcmluZycgPT4gJ2VuY2hhbnQvZW5jaGFudC5zdHViJywgJ2VuY2hhbnRfZGljdF9hZGQnID0+ICdlbmNoYW50L2VuY2hhbnQuc3R1YicsICdlbmNoYW50X2RpY3RfYWRkX3RvX3BlcnNvbmFsJyA9PiAnZW5jaGFudC9lbmNoYW50LnN0dWInLCAnZW5jaGFudF9kaWN0X2FkZF90b19zZXNzaW9uJyA9PiAnZW5jaGFudC9lbmNoYW50LnN0dWInLCAnZW5jaGFudF9kaWN0X2NoZWNrJyA9PiAnZW5jaGFudC9lbmNoYW50LnN0dWInLCAnZW5jaGFudF9kaWN0X2Rlc2NyaWJlJyA9PiAnZW5jaGFudC9lbmNoYW50LnN0dWInLCAnZW5jaGFudF9kaWN0X2dldF9lcnJvcicgPT4gJ2VuY2hhbnQvZW5jaGFudC5zdHViJywgJ2VuY2hhbnRfZGljdF9pc19hZGRlZCcgPT4gJ2VuY2hhbnQvZW5jaGFudC5zdHViJywgJ2VuY2hhbnRfZGljdF9pc19pbl9zZXNzaW9uJyA9PiAnZW5jaGFudC9lbmNoYW50LnN0dWInLCAnZW5jaGFudF9kaWN0X3F1aWNrX2NoZWNrJyA9PiAnZW5jaGFudC9lbmNoYW50LnN0dWInLCAnZW5jaGFudF9kaWN0X3N0b3JlX3JlcGxhY2VtZW50JyA9PiAnZW5jaGFudC9lbmNoYW50LnN0dWInLCAnZW5jaGFudF9kaWN0X3N1Z2dlc3QnID0+ICdlbmNoYW50L2VuY2hhbnQuc3R1YicsICdlbmQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnZW51bV9leGlzdHMnID0+ICdDb3JlL0NvcmUuc3R1YicsICdlcmVnJyA9PiAncmVnZXgvZXJlZy5zdHViJywgJ2VyZWdfcmVwbGFjZScgPT4gJ3JlZ2V4L2VyZWcuc3R1YicsICdlcmVnaScgPT4gJ3JlZ2V4L2VyZWcuc3R1YicsICdlcmVnaV9yZXBsYWNlJyA9PiAncmVnZXgvZXJlZy5zdHViJywgJ2Vycm9yX2NsZWFyX2xhc3QnID0+ICdzdGFuZGFyZC9iYXNpYy5zdHViJywgJ2Vycm9yX2dldF9sYXN0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2Vycm9yX2xvZycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdlcnJvcl9yZXBvcnRpbmcnID0+ICdDb3JlL0NvcmUuc3R1YicsICdlc2NhcGVzaGVsbGFyZycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdlc2NhcGVzaGVsbGNtZCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdldmVudF9hZGQnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ2V2ZW50X2Jhc2VfZnJlZScgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnZXZlbnRfYmFzZV9sb29wJyA9PiAnbGliZXZlbnQvbGliZXZlbnQuc3R1YicsICdldmVudF9iYXNlX2xvb3BicmVhaycgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnZXZlbnRfYmFzZV9sb29wZXhpdCcgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnZXZlbnRfYmFzZV9uZXcnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ2V2ZW50X2Jhc2VfcHJpb3JpdHlfaW5pdCcgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnZXZlbnRfYmFzZV9zZXQnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ2V2ZW50X2J1ZmZlcl9iYXNlX3NldCcgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnZXZlbnRfYnVmZmVyX2Rpc2FibGUnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ2V2ZW50X2J1ZmZlcl9lbmFibGUnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ2V2ZW50X2J1ZmZlcl9mZF9zZXQnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ2V2ZW50X2J1ZmZlcl9mcmVlJyA9PiAnbGliZXZlbnQvbGliZXZlbnQuc3R1YicsICdldmVudF9idWZmZXJfbmV3JyA9PiAnbGliZXZlbnQvbGliZXZlbnQuc3R1YicsICdldmVudF9idWZmZXJfcHJpb3JpdHlfc2V0JyA9PiAnbGliZXZlbnQvbGliZXZlbnQuc3R1YicsICdldmVudF9idWZmZXJfcmVhZCcgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnZXZlbnRfYnVmZmVyX3NldF9jYWxsYmFjaycgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnZXZlbnRfYnVmZmVyX3RpbWVvdXRfc2V0JyA9PiAnbGliZXZlbnQvbGliZXZlbnQuc3R1YicsICdldmVudF9idWZmZXJfd2F0ZXJtYXJrX3NldCcgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnZXZlbnRfYnVmZmVyX3dyaXRlJyA9PiAnbGliZXZlbnQvbGliZXZlbnQuc3R1YicsICdldmVudF9kZWwnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ2V2ZW50X2ZyZWUnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ2V2ZW50X25ldycgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnZXZlbnRfc2V0JyA9PiAnbGliZXZlbnQvbGliZXZlbnQuc3R1YicsICdldmVudF90aW1lcl9hZGQnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ2V2ZW50X3RpbWVyX2RlbCcgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnZXZlbnRfdGltZXJfbmV3JyA9PiAnbGliZXZlbnQvbGliZXZlbnQuc3R1YicsICdldmVudF90aW1lcl9wZW5kaW5nJyA9PiAnbGliZXZlbnQvbGliZXZlbnQuc3R1YicsICdldmVudF90aW1lcl9zZXQnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ2V4ZWMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAnZXhpZl9pbWFnZXR5cGUnID0+ICdleGlmL2V4aWYuc3R1YicsICdleGlmX3JlYWRfZGF0YScgPT4gJ2V4aWYvZXhpZi5zdHViJywgJ2V4aWZfdGFnbmFtZScgPT4gJ2V4aWYvZXhpZi5zdHViJywgJ2V4aWZfdGh1bWJuYWlsJyA9PiAnZXhpZi9leGlmLnN0dWInLCAnZXhwJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2V4cGVjdF9leHBlY3RsJyA9PiAnZXhwZWN0L2V4cGVjdC5zdHViJywgJ2V4cGVjdF9wb3BlbicgPT4gJ2V4cGVjdC9leHBlY3Quc3R1YicsICdleHBsb2RlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ2V4cG0xJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2V4dGVuc2lvbl9sb2FkZWQnID0+ICdDb3JlL0NvcmUuc3R1YicsICdleHRyYWN0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ2V6bWxtX2hhc2gnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAnZmFubl9jYXNjYWRldHJhaW5fb25fZGF0YScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fY2FzY2FkZXRyYWluX29uX2ZpbGUnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2NsZWFyX3NjYWxpbmdfcGFyYW1zJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9jb3B5JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9jcmVhdGVfZnJvbV9maWxlJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9jcmVhdGVfc2hvcnRjdXQnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2NyZWF0ZV9zaG9ydGN1dF9hcnJheScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fY3JlYXRlX3NwYXJzZScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fY3JlYXRlX3NwYXJzZV9hcnJheScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fY3JlYXRlX3N0YW5kYXJkJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9jcmVhdGVfc3RhbmRhcmRfYXJyYXknID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2NyZWF0ZV90cmFpbicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fY3JlYXRlX3RyYWluX2Zyb21fY2FsbGJhY2snID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2Rlc2NhbGVfaW5wdXQnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2Rlc2NhbGVfb3V0cHV0JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9kZXNjYWxlX3RyYWluJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9kZXN0cm95JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9kZXN0cm95X3RyYWluJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9kdXBsaWNhdGVfdHJhaW5fZGF0YScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X01TRScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X2FjdGl2YXRpb25fZnVuY3Rpb24nID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9hY3RpdmF0aW9uX3N0ZWVwbmVzcycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X2JpYXNfYXJyYXknID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9iaXRfZmFpbCcgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X2JpdF9mYWlsX2xpbWl0JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfY2FzY2FkZV9hY3RpdmF0aW9uX2Z1bmN0aW9ucycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X2Nhc2NhZGVfYWN0aXZhdGlvbl9mdW5jdGlvbnNfY291bnQnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9jYXNjYWRlX2FjdGl2YXRpb25fc3RlZXBuZXNzZXMnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9jYXNjYWRlX2FjdGl2YXRpb25fc3RlZXBuZXNzZXNfY291bnQnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9jYXNjYWRlX2NhbmRpZGF0ZV9jaGFuZ2VfZnJhY3Rpb24nID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9jYXNjYWRlX2NhbmRpZGF0ZV9saW1pdCcgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X2Nhc2NhZGVfY2FuZGlkYXRlX3N0YWduYXRpb25fZXBvY2hzJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfY2FzY2FkZV9tYXhfY2FuZF9lcG9jaHMnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9jYXNjYWRlX21heF9vdXRfZXBvY2hzJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfY2FzY2FkZV9taW5fY2FuZF9lcG9jaHMnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9jYXNjYWRlX21pbl9vdXRfZXBvY2hzJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfY2FzY2FkZV9udW1fY2FuZGlkYXRlX2dyb3VwcycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X2Nhc2NhZGVfbnVtX2NhbmRpZGF0ZXMnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9jYXNjYWRlX291dHB1dF9jaGFuZ2VfZnJhY3Rpb24nID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9jYXNjYWRlX291dHB1dF9zdGFnbmF0aW9uX2Vwb2NocycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X2Nhc2NhZGVfd2VpZ2h0X211bHRpcGxpZXInID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9jb25uZWN0aW9uX2FycmF5JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfY29ubmVjdGlvbl9yYXRlJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfZXJybm8nID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9lcnJzdHInID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9sYXllcl9hcnJheScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X2xlYXJuaW5nX21vbWVudHVtJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfbGVhcm5pbmdfcmF0ZScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X25ldHdvcmtfdHlwZScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X251bV9pbnB1dCcgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X251bV9sYXllcnMnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF9udW1fb3V0cHV0JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfcXVpY2twcm9wX2RlY2F5JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfcXVpY2twcm9wX211JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfcnByb3BfZGVjcmVhc2VfZmFjdG9yJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfcnByb3BfZGVsdGFfbWF4JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfcnByb3BfZGVsdGFfbWluJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfcnByb3BfZGVsdGFfemVybycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X3Jwcm9wX2luY3JlYXNlX2ZhY3RvcicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X3NhcnByb3Bfc3RlcF9lcnJvcl9zaGlmdCcgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X3NhcnByb3Bfc3RlcF9lcnJvcl90aHJlc2hvbGRfZmFjdG9yJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfc2FycHJvcF90ZW1wZXJhdHVyZScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fZ2V0X3NhcnByb3Bfd2VpZ2h0X2RlY2F5X3NoaWZ0JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfdG90YWxfY29ubmVjdGlvbnMnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF90b3RhbF9uZXVyb25zJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfdHJhaW5fZXJyb3JfZnVuY3Rpb24nID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2dldF90cmFpbl9zdG9wX2Z1bmN0aW9uJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9nZXRfdHJhaW5pbmdfYWxnb3JpdGhtJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9pbml0X3dlaWdodHMnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX2xlbmd0aF90cmFpbl9kYXRhJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9tZXJnZV90cmFpbl9kYXRhJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9udW1faW5wdXRfdHJhaW5fZGF0YScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fbnVtX291dHB1dF90cmFpbl9kYXRhJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9wcmludF9lcnJvcicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fcmFuZG9taXplX3dlaWdodHMnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3JlYWRfdHJhaW5fZnJvbV9maWxlJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9yZXNldF9NU0UnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3Jlc2V0X2Vycm5vJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9yZXNldF9lcnJzdHInID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3J1bicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2F2ZScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2F2ZV90cmFpbicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2NhbGVfaW5wdXQnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NjYWxlX2lucHV0X3RyYWluX2RhdGEnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NjYWxlX291dHB1dCcgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2NhbGVfb3V0cHV0X3RyYWluX2RhdGEnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NjYWxlX3RyYWluJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zY2FsZV90cmFpbl9kYXRhJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfYWN0aXZhdGlvbl9mdW5jdGlvbicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X2FjdGl2YXRpb25fZnVuY3Rpb25faGlkZGVuJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfYWN0aXZhdGlvbl9mdW5jdGlvbl9sYXllcicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X2FjdGl2YXRpb25fZnVuY3Rpb25fb3V0cHV0JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfYWN0aXZhdGlvbl9zdGVlcG5lc3MnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF9hY3RpdmF0aW9uX3N0ZWVwbmVzc19oaWRkZW4nID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF9hY3RpdmF0aW9uX3N0ZWVwbmVzc19sYXllcicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X2FjdGl2YXRpb25fc3RlZXBuZXNzX291dHB1dCcgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X2JpdF9mYWlsX2xpbWl0JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfY2FsbGJhY2snID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF9jYXNjYWRlX2FjdGl2YXRpb25fZnVuY3Rpb25zJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfY2FzY2FkZV9hY3RpdmF0aW9uX3N0ZWVwbmVzc2VzJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfY2FzY2FkZV9jYW5kaWRhdGVfY2hhbmdlX2ZyYWN0aW9uJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfY2FzY2FkZV9jYW5kaWRhdGVfbGltaXQnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF9jYXNjYWRlX2NhbmRpZGF0ZV9zdGFnbmF0aW9uX2Vwb2NocycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X2Nhc2NhZGVfbWF4X2NhbmRfZXBvY2hzJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfY2FzY2FkZV9tYXhfb3V0X2Vwb2NocycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X2Nhc2NhZGVfbWluX2NhbmRfZXBvY2hzJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfY2FzY2FkZV9taW5fb3V0X2Vwb2NocycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X2Nhc2NhZGVfbnVtX2NhbmRpZGF0ZV9ncm91cHMnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF9jYXNjYWRlX291dHB1dF9jaGFuZ2VfZnJhY3Rpb24nID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF9jYXNjYWRlX291dHB1dF9zdGFnbmF0aW9uX2Vwb2NocycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X2Nhc2NhZGVfd2VpZ2h0X211bHRpcGxpZXInID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF9lcnJvcl9sb2cnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF9pbnB1dF9zY2FsaW5nX3BhcmFtcycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X2xlYXJuaW5nX21vbWVudHVtJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfbGVhcm5pbmdfcmF0ZScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X291dHB1dF9zY2FsaW5nX3BhcmFtcycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X3F1aWNrcHJvcF9kZWNheScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X3F1aWNrcHJvcF9tdScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X3Jwcm9wX2RlY3JlYXNlX2ZhY3RvcicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X3Jwcm9wX2RlbHRhX21heCcgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X3Jwcm9wX2RlbHRhX21pbicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X3Jwcm9wX2RlbHRhX3plcm8nID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF9ycHJvcF9pbmNyZWFzZV9mYWN0b3InID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF9zYXJwcm9wX3N0ZXBfZXJyb3Jfc2hpZnQnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF9zYXJwcm9wX3N0ZXBfZXJyb3JfdGhyZXNob2xkX2ZhY3RvcicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X3NhcnByb3BfdGVtcGVyYXR1cmUnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF9zYXJwcm9wX3dlaWdodF9kZWNheV9zaGlmdCcgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fc2V0X3NjYWxpbmdfcGFyYW1zJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfdHJhaW5fZXJyb3JfZnVuY3Rpb24nID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3NldF90cmFpbl9zdG9wX2Z1bmN0aW9uJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfdHJhaW5pbmdfYWxnb3JpdGhtJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfd2VpZ2h0JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zZXRfd2VpZ2h0X2FycmF5JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl9zaHVmZmxlX3RyYWluX2RhdGEnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3N1YnNldF90cmFpbl9kYXRhJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl90ZXN0JyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl90ZXN0X2RhdGEnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdmYW5uX3RyYWluJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnZmFubl90cmFpbl9lcG9jaCcgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fdHJhaW5fb25fZGF0YScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhbm5fdHJhaW5fb25fZmlsZScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ2Zhc3RjZ2lfZmluaXNoX3JlcXVlc3QnID0+ICdmcG0vZnBtLnN0dWInLCAnZmJpcmRfYWRkX3VzZXInID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfYWZmZWN0ZWRfcm93cycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9iYWNrdXAnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfYmxvYl9hZGQnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfYmxvYl9jYW5jZWwnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfYmxvYl9jbG9zZScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9ibG9iX2NyZWF0ZScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9ibG9iX2VjaG8nID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfYmxvYl9nZXQnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfYmxvYl9pbXBvcnQnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfYmxvYl9pbmZvJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2ZiaXJkX2Jsb2Jfb3BlbicgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9jbG9zZScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9jb21taXQnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfY29tbWl0X3JldCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9jb25uZWN0JyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2ZiaXJkX2RiX2luZm8nID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfZGVsZXRlX3VzZXInID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfZHJvcF9kYicgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9lcnJjb2RlJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2ZiaXJkX2Vycm1zZycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9leGVjdXRlJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2ZiaXJkX2ZldGNoX2Fzc29jJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2ZiaXJkX2ZldGNoX29iamVjdCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9mZXRjaF9yb3cnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfZmllbGRfaW5mbycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9mcmVlX2V2ZW50X2hhbmRsZXInID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfZnJlZV9xdWVyeScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9mcmVlX3Jlc3VsdCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9nZW5faWQnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfbWFpbnRhaW5fZGInID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfbW9kaWZ5X3VzZXInID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfbmFtZV9yZXN1bHQnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfbnVtX2ZpZWxkcycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9udW1fcGFyYW1zJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2ZiaXJkX3BhcmFtX2luZm8nID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfcGNvbm5lY3QnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnZmJpcmRfcHJlcGFyZScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9xdWVyeScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9yZXN0b3JlJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2ZiaXJkX3JvbGxiYWNrJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2ZiaXJkX3JvbGxiYWNrX3JldCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9zZXJ2ZXJfaW5mbycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9zZXJ2aWNlX2F0dGFjaCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9zZXJ2aWNlX2RldGFjaCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF9zZXRfZXZlbnRfaGFuZGxlcicgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF90cmFucycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdmYmlyZF93YWl0X2V2ZW50JyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2ZjbG9zZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdmZGF0YXN5bmMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnZmRpdicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdmZW9mJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ2ZmbHVzaCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdmZ2V0YycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdmZ2V0Y3N2JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ2ZnZXRzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ2ZnZXRzcycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdmaWxlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ2ZpbGVfZXhpc3RzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2ZpbGVfZ2V0X2NvbnRlbnRzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ2ZpbGVfcHV0X2NvbnRlbnRzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ2ZpbGVhdGltZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdmaWxlY3RpbWUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAnZmlsZWdyb3VwJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2ZpbGVpbm9kZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdmaWxlbXRpbWUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAnZmlsZW93bmVyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2ZpbGVwZXJtcycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdmaWxlc2l6ZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdmaWxldHlwZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdmaWx0ZXJfaGFzX3ZhcicgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdmaWx0ZXJfaWQnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnZmlsdGVyX2lucHV0JyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ2ZpbHRlcl9pbnB1dF9hcnJheScgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdmaWx0ZXJfbGlzdCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdmaWx0ZXJfdmFyJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ2ZpbHRlcl92YXJfYXJyYXknID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnZmluZm9fYnVmZmVyJyA9PiAnZmlsZWluZm8vZmlsZWluZm8uc3R1YicsICdmaW5mb19jbG9zZScgPT4gJ2ZpbGVpbmZvL2ZpbGVpbmZvLnN0dWInLCAnZmluZm9fZmlsZScgPT4gJ2ZpbGVpbmZvL2ZpbGVpbmZvLnN0dWInLCAnZmluZm9fb3BlbicgPT4gJ2ZpbGVpbmZvL2ZpbGVpbmZvLnN0dWInLCAnZmluZm9fc2V0X2ZsYWdzJyA9PiAnZmlsZWluZm8vZmlsZWluZm8uc3R1YicsICdmbG9hdHZhbCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdmbG9jaycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdmbG9vcicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdmbHVzaCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzAuc3R1YicsICdmbW9kJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2ZubWF0Y2gnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnZm9wZW4nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnZm9yd2FyZF9zdGF0aWNfY2FsbCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdmb3J3YXJkX3N0YXRpY19jYWxsX2FycmF5JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2ZwYXNzdGhydScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdmcG1fZ2V0X3N0YXR1cycgPT4gJ2ZwbS9mcG0uc3R1YicsICdmcG93JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMTAuc3R1YicsICdmcHJpbnRmJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ2ZwdXRjc3YnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnZnB1dHMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnZnJhbmtlbnBocF9maW5pc2hfcmVxdWVzdCcgPT4gJ2ZyYW5rZW5waHAvZnJhbmtlbnBocC5zdHViJywgJ2ZyYW5rZW5waHBfaGFuZGxlX3JlcXVlc3QnID0+ICdmcmFua2VucGhwL2ZyYW5rZW5waHAuc3R1YicsICdmcmFua2VucGhwX3JlcXVlc3RfaGVhZGVycycgPT4gJ2ZyYW5rZW5waHAvZnJhbmtlbnBocC5zdHViJywgJ2ZyYW5rZW5waHBfcmVzcG9uc2VfaGVhZGVycycgPT4gJ2ZyYW5rZW5waHAvZnJhbmtlbnBocC5zdHViJywgJ2ZyZWFkJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ2ZyZW5jaHRvamQnID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ2ZzY2FuZicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdmc2VlaycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdmc29ja29wZW4nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAnZnN0YXQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnZnN5bmMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnZnRlbGwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnZnRvaycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdmdHBfYWxsb2MnID0+ICdmdHAvZnRwLnN0dWInLCAnZnRwX2FwcGVuZCcgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfY2R1cCcgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfY2hkaXInID0+ICdmdHAvZnRwLnN0dWInLCAnZnRwX2NobW9kJyA9PiAnZnRwL2Z0cC5zdHViJywgJ2Z0cF9jbG9zZScgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfY29ubmVjdCcgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfZGVsZXRlJyA9PiAnZnRwL2Z0cC5zdHViJywgJ2Z0cF9leGVjJyA9PiAnZnRwL2Z0cC5zdHViJywgJ2Z0cF9mZ2V0JyA9PiAnZnRwL2Z0cC5zdHViJywgJ2Z0cF9mcHV0JyA9PiAnZnRwL2Z0cC5zdHViJywgJ2Z0cF9nZXQnID0+ICdmdHAvZnRwLnN0dWInLCAnZnRwX2dldF9vcHRpb24nID0+ICdmdHAvZnRwLnN0dWInLCAnZnRwX2xvZ2luJyA9PiAnZnRwL2Z0cC5zdHViJywgJ2Z0cF9tZHRtJyA9PiAnZnRwL2Z0cC5zdHViJywgJ2Z0cF9ta2RpcicgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfbWxzZCcgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfbmJfY29udGludWUnID0+ICdmdHAvZnRwLnN0dWInLCAnZnRwX25iX2ZnZXQnID0+ICdmdHAvZnRwLnN0dWInLCAnZnRwX25iX2ZwdXQnID0+ICdmdHAvZnRwLnN0dWInLCAnZnRwX25iX2dldCcgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfbmJfcHV0JyA9PiAnZnRwL2Z0cC5zdHViJywgJ2Z0cF9ubGlzdCcgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfcGFzdicgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfcHV0JyA9PiAnZnRwL2Z0cC5zdHViJywgJ2Z0cF9wd2QnID0+ICdmdHAvZnRwLnN0dWInLCAnZnRwX3F1aXQnID0+ICdmdHAvZnRwLnN0dWInLCAnZnRwX3JhdycgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfcmF3bGlzdCcgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfcmVuYW1lJyA9PiAnZnRwL2Z0cC5zdHViJywgJ2Z0cF9ybWRpcicgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfc2V0X29wdGlvbicgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfc2l0ZScgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfc2l6ZScgPT4gJ2Z0cC9mdHAuc3R1YicsICdmdHBfc3NsX2Nvbm5lY3QnID0+ICdmdHAvZnRwLnN0dWInLCAnZnRwX3N5c3R5cGUnID0+ICdmdHAvZnRwLnN0dWInLCAnZnRydW5jYXRlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ2Z1bmNfZ2V0X2FyZycgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2Z1bmNfZ2V0X2FyZ3MnID0+ICdDb3JlL0NvcmUuc3R1YicsICdmdW5jX251bV9hcmdzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnZnVuY3Rpb25fZXhpc3RzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnZndyaXRlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ2djX2NvbGxlY3RfY3ljbGVzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnZ2NfZGlzYWJsZScgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2djX2VuYWJsZScgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2djX2VuYWJsZWQnID0+ICdDb3JlL0NvcmUuc3R1YicsICdnY19tZW1fY2FjaGVzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnZ2Nfc3RhdHVzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnZ2RfaW5mbycgPT4gJ2dkL2dkLnN0dWInLCAnZ2Vhcm1hbl9idWdyZXBvcnQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9hZGRfb3B0aW9ucycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X2FkZF9zZXJ2ZXInID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9hZGRfc2VydmVycycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X2FkZF90YXNrJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9jbGllbnRfYWRkX3Rhc2tfYmFja2dyb3VuZCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X2FkZF90YXNrX2hpZ2gnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9hZGRfdGFza19oaWdoX2JhY2tncm91bmQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9hZGRfdGFza19sb3cnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9hZGRfdGFza19sb3dfYmFja2dyb3VuZCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X2FkZF90YXNrX3N0YXR1cycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X2NsZWFyX2ZuJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9jbGllbnRfY2xvbmUnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9jb250ZXh0JyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9jbGllbnRfY3JlYXRlJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9jbGllbnRfZG8nID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9kb19iYWNrZ3JvdW5kJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9jbGllbnRfZG9faGlnaCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X2RvX2hpZ2hfYmFja2dyb3VuZCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X2RvX2pvYl9oYW5kbGUnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9kb19sb3cnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9kb19sb3dfYmFja2dyb3VuZCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X2RvX25vcm1hbCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X2RvX3N0YXR1cycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X2VjaG8nID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9lcnJubycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X2Vycm9yJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9jbGllbnRfam9iX3N0YXR1cycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X29wdGlvbnMnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9yZW1vdmVfb3B0aW9ucycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X3JldHVybl9jb2RlJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9jbGllbnRfcnVuX3Rhc2tzJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9jbGllbnRfc2V0X2NvbXBsZXRlX2ZuJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9jbGllbnRfc2V0X2NvbnRleHQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9zZXRfY3JlYXRlZF9mbicgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X3NldF9kYXRhX2ZuJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9jbGllbnRfc2V0X2V4Y2VwdGlvbl9mbicgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X3NldF9mYWlsX2ZuJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9jbGllbnRfc2V0X29wdGlvbnMnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9zZXRfc3RhdHVzX2ZuJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9jbGllbnRfc2V0X3RpbWVvdXQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF9zZXRfd2FybmluZ19mbicgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X3NldF93b3JrbG9hZF9mbicgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fY2xpZW50X3RpbWVvdXQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2NsaWVudF93YWl0JyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9qb2JfZnVuY3Rpb25fbmFtZScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fam9iX2hhbmRsZScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fam9iX3JldHVybl9jb2RlJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9qb2Jfc2VuZF9jb21wbGV0ZScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fam9iX3NlbmRfZGF0YScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fam9iX3NlbmRfZXhjZXB0aW9uJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9qb2Jfc2VuZF9mYWlsJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl9qb2Jfc2VuZF9zdGF0dXMnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2pvYl9zZW5kX3dhcm5pbmcnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2pvYl91bmlxdWUnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX2pvYl93b3JrbG9hZCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fam9iX3dvcmtsb2FkX3NpemUnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX3Rhc2tfZGF0YScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fdGFza19kYXRhX3NpemUnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX3Rhc2tfZGVub21pbmF0b3InID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX3Rhc2tfZnVuY3Rpb25fbmFtZScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fdGFza19pc19rbm93bicgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fdGFza19pc19ydW5uaW5nJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl90YXNrX2pvYl9oYW5kbGUnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX3Rhc2tfbnVtZXJhdG9yJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl90YXNrX3JlY3ZfZGF0YScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fdGFza19yZXR1cm5fY29kZScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fdGFza19zZW5kX3dvcmtsb2FkJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl90YXNrX3VuaXF1ZScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fdmVyYm9zZV9uYW1lJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl92ZXJzaW9uJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl93b3JrZXJfYWRkX2Z1bmN0aW9uJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl93b3JrZXJfYWRkX29wdGlvbnMnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX3dvcmtlcl9hZGRfc2VydmVyJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl93b3JrZXJfYWRkX3NlcnZlcnMnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX3dvcmtlcl9jbG9uZScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fd29ya2VyX2NyZWF0ZScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fd29ya2VyX2VjaG8nID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX3dvcmtlcl9lcnJubycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fd29ya2VyX2Vycm9yJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl93b3JrZXJfZ3JhYl9qb2InID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX3dvcmtlcl9vcHRpb25zJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl93b3JrZXJfcmVnaXN0ZXInID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX3dvcmtlcl9yZW1vdmVfb3B0aW9ucycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fd29ya2VyX3JldHVybl9jb2RlJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl93b3JrZXJfc2V0X29wdGlvbnMnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX3dvcmtlcl9zZXRfdGltZW91dCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlYXJtYW5fd29ya2VyX3RpbWVvdXQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX3dvcmtlcl91bnJlZ2lzdGVyJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl93b3JrZXJfdW5yZWdpc3Rlcl9hbGwnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdnZWFybWFuX3dvcmtlcl93YWl0JyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnZ2Vhcm1hbl93b3JrZXJfd29yaycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ2dlb2lwX2FzbnVtX2J5X25hbWUnID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ2dlb2lwX2NvbnRpbmVudF9jb2RlX2J5X25hbWUnID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ2dlb2lwX2NvdW50cnlfY29kZTNfYnlfbmFtZScgPT4gJ2dlb2lwL2dlb2lwLnN0dWInLCAnZ2VvaXBfY291bnRyeV9jb2RlX2J5X25hbWUnID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ2dlb2lwX2NvdW50cnlfbmFtZV9ieV9uYW1lJyA9PiAnZ2VvaXAvZ2VvaXAuc3R1YicsICdnZW9pcF9kYXRhYmFzZV9pbmZvJyA9PiAnZ2VvaXAvZ2VvaXAuc3R1YicsICdnZW9pcF9kYl9hdmFpbCcgPT4gJ2dlb2lwL2dlb2lwLnN0dWInLCAnZ2VvaXBfZGJfZmlsZW5hbWUnID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ2dlb2lwX2RiX2dldF9hbGxfaW5mbycgPT4gJ2dlb2lwL2dlb2lwLnN0dWInLCAnZ2VvaXBfaWRfYnlfbmFtZScgPT4gJ2dlb2lwL2dlb2lwLnN0dWInLCAnZ2VvaXBfaXNwX2J5X25hbWUnID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ2dlb2lwX25ldHNwZWVkY2VsbF9ieV9uYW1lJyA9PiAnZ2VvaXAvZ2VvaXAuc3R1YicsICdnZW9pcF9vcmdfYnlfbmFtZScgPT4gJ2dlb2lwL2dlb2lwLnN0dWInLCAnZ2VvaXBfcmVjb3JkX2J5X25hbWUnID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ2dlb2lwX3JlZ2lvbl9ieV9uYW1lJyA9PiAnZ2VvaXAvZ2VvaXAuc3R1YicsICdnZW9pcF9yZWdpb25fbmFtZV9ieV9jb2RlJyA9PiAnZ2VvaXAvZ2VvaXAuc3R1YicsICdnZW9pcF9zZXR1cF9jdXN0b21fZGlyZWN0b3J5JyA9PiAnZ2VvaXAvZ2VvaXAuc3R1YicsICdnZW9pcF90aW1lX3pvbmVfYnlfY291bnRyeV9hbmRfcmVnaW9uJyA9PiAnZ2VvaXAvZ2VvaXAuc3R1YicsICdnZXRfYnJvd3NlcicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdnZXRfY2FsbF9zdGFjaycgPT4gJ1plbmREZWJ1Z2dlci9aZW5kRGVidWdnZXIuc3R1YicsICdnZXRfY2FsbGVkX2NsYXNzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnZ2V0X2NmZ192YXInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnZ2V0X2NsYXNzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnZ2V0X2NsYXNzX21ldGhvZHMnID0+ICdDb3JlL0NvcmUuc3R1YicsICdnZXRfY2xhc3NfdmFycycgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2dldF9jdXJyZW50X3VzZXInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnZ2V0X2RlYnVnX3R5cGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnZ2V0X2RlY2xhcmVkX2NsYXNzZXMnID0+ICdDb3JlL0NvcmUuc3R1YicsICdnZXRfZGVjbGFyZWRfaW50ZXJmYWNlcycgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2dldF9kZWNsYXJlZF90cmFpdHMnID0+ICdDb3JlL0NvcmUuc3R1YicsICdnZXRfZGVmaW5lZF9jb25zdGFudHMnID0+ICdDb3JlL0NvcmUuc3R1YicsICdnZXRfZGVmaW5lZF9mdW5jdGlvbnMnID0+ICdDb3JlL0NvcmUuc3R1YicsICdnZXRfZGVmaW5lZF92YXJzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnZ2V0X2V4dGVuc2lvbl9mdW5jcycgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2dldF9oZWFkZXJzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ2dldF9odG1sX3RyYW5zbGF0aW9uX3RhYmxlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ2dldF9pbmNsdWRlX3BhdGgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAnZ2V0X2luY2x1ZGVkX2ZpbGVzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnZ2V0X2xvYWRlZF9leHRlbnNpb25zJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnZ2V0X21hZ2ljX3F1b3Rlc19ncGMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnZ2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2dldF9tYW5nbGVkX29iamVjdF92YXJzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ2dldF9tZXRhX3RhZ3MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnZ2V0X29iamVjdF92YXJzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnZ2V0X3BhcmVudF9jbGFzcycgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2dldF9yZXF1aXJlZF9maWxlcycgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2dldF9yZXNvdXJjZV9pZCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdnZXRfcmVzb3VyY2VfdHlwZScgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2dldF9yZXNvdXJjZXMnID0+ICdDb3JlL0NvcmUuc3R1YicsICdnZXRhbGxoZWFkZXJzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2dldGN3ZCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdnZXRkYXRlJyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnZ2V0ZGlyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2dldGVudicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdnZXRob3N0YnlhZGRyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2dldGhvc3RieW5hbWUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAnZ2V0aG9zdGJ5bmFtZWwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAnZ2V0aG9zdG5hbWUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAnZ2V0aW1hZ2VzaXplJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ2dldGltYWdlc2l6ZWZyb21zdHJpbmcnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnZ2V0bGFzdG1vZCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdnZXRteHJyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2dldG15Z2lkJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ2dldG15aW5vZGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAnZ2V0bXlwaWQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAnZ2V0bXl1aWQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAnZ2V0b3B0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2dldHByb3RvYnluYW1lJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ2dldHByb3RvYnludW1iZXInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAnZ2V0cmFuZG1heCcgPT4gJ3JhbmRvbS9yYW5kb20uc3R1YicsICdnZXRydXNhZ2UnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnZ2V0c2VydmJ5bmFtZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdnZXRzZXJ2Ynlwb3J0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ2dldHRleHQnID0+ICdnZXR0ZXh0L2dldHRleHQuc3R1YicsICdnZXR0aW1lb2ZkYXknID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnZ2V0dHlwZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdnbG9iJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2dtZGF0ZScgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2dtbWt0aW1lJyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnZ21wX2FicycgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfYWRkJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9hbmQnID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX2Jpbm9taWFsJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9jbHJiaXQnID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX2NtcCcgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfY29tJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9kaXYnID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX2Rpdl9xJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9kaXZfcXInID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX2Rpdl9yJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9kaXZleGFjdCcgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfZXhwb3J0JyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9mYWN0JyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9nY2QnID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX2djZGV4dCcgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfaGFtZGlzdCcgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfaW1wb3J0JyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9pbml0JyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9pbnR2YWwnID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX2ludmVydCcgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfamFjb2JpJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9rcm9uZWNrZXInID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX2xjbScgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfbGVnZW5kcmUnID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX21vZCcgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfbXVsJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9uZWcnID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX25leHRwcmltZScgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfb3InID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX3BlcmZlY3RfcG93ZXInID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX3BlcmZlY3Rfc3F1YXJlJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9wb3Bjb3VudCcgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfcG93JyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9wb3dtJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9wcm9iX3ByaW1lJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9yYW5kb20nID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX3JhbmRvbV9iaXRzJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9yYW5kb21fcmFuZ2UnID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX3JhbmRvbV9zZWVkJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9yb290JyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9yb290cmVtJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9zY2FuMCcgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfc2NhbjEnID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX3NldGJpdCcgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfc2lnbicgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfc3FydCcgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfc3FydHJlbScgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXBfc3RydmFsJyA9PiAnZ21wL2dtcC5zdHViJywgJ2dtcF9zdWInID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX3Rlc3RiaXQnID0+ICdnbXAvZ21wLnN0dWInLCAnZ21wX3hvcicgPT4gJ2dtcC9nbXAuc3R1YicsICdnbXN0cmZ0aW1lJyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnZ251cGdfYWRkZGVjcnlwdGtleScgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfYWRkZW5jcnlwdGtleScgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfYWRkc2lnbmtleScgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfY2xlYXJkZWNyeXB0a2V5cycgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfY2xlYXJlbmNyeXB0a2V5cycgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfY2xlYXJzaWdua2V5cycgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfZGVjcnlwdCcgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfZGVjcnlwdHZlcmlmeScgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfZGVsZXRla2V5JyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdnbnVwZ19lbmNyeXB0JyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdnbnVwZ19lbmNyeXB0c2lnbicgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfZXhwb3J0JyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdnbnVwZ19nZXRlbmdpbmVpbmZvJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdnbnVwZ19nZXRlcnJvcicgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfZ2V0ZXJyb3JpbmZvJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdnbnVwZ19nZXRwcm90b2NvbCcgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfZ2V0dHJ1c3RsaXN0JyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdnbnVwZ19pbXBvcnQnID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ2dudXBnX2luaXQnID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ2dudXBnX2tleWluZm8nID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ2dudXBnX2xpc3RzaWduYXR1cmVzJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdnbnVwZ19zZXRhcm1vcicgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfc2V0ZXJyb3Jtb2RlJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdnbnVwZ19zZXRzaWdubW9kZScgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfc2lnbicgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnZ251cGdfdmVyaWZ5JyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdnbycgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdncmFwaGVtZV9leHRyYWN0JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnZ3JhcGhlbWVfc3RyX3NwbGl0JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnZ3JhcGhlbWVfc3RyaXBvcycgPT4gJ2ludGwvaW50bC5zdHViJywgJ2dyYXBoZW1lX3N0cmlzdHInID0+ICdpbnRsL2ludGwuc3R1YicsICdncmFwaGVtZV9zdHJsZW4nID0+ICdpbnRsL2ludGwuc3R1YicsICdncmFwaGVtZV9zdHJwb3MnID0+ICdpbnRsL2ludGwuc3R1YicsICdncmFwaGVtZV9zdHJyaXBvcycgPT4gJ2ludGwvaW50bC5zdHViJywgJ2dyYXBoZW1lX3N0cnJwb3MnID0+ICdpbnRsL2ludGwuc3R1YicsICdncmFwaGVtZV9zdHJzdHInID0+ICdpbnRsL2ludGwuc3R1YicsICdncmFwaGVtZV9zdWJzdHInID0+ICdpbnRsL2ludGwuc3R1YicsICdncmVnb3JpYW50b2pkJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdnemNsb3NlJyA9PiAnemxpYi96bGliLnN0dWInLCAnZ3pjb21wcmVzcycgPT4gJ3psaWIvemxpYi5zdHViJywgJ2d6ZGVjb2RlJyA9PiAnemxpYi96bGliLnN0dWInLCAnZ3pkZWZsYXRlJyA9PiAnemxpYi96bGliLnN0dWInLCAnZ3plbmNvZGUnID0+ICd6bGliL3psaWIuc3R1YicsICdnemVvZicgPT4gJ3psaWIvemxpYi5zdHViJywgJ2d6ZmlsZScgPT4gJ3psaWIvemxpYi5zdHViJywgJ2d6Z2V0YycgPT4gJ3psaWIvemxpYi5zdHViJywgJ2d6Z2V0cycgPT4gJ3psaWIvemxpYi5zdHViJywgJ2d6Z2V0c3MnID0+ICd6bGliL3psaWIuc3R1YicsICdnemluZmxhdGUnID0+ICd6bGliL3psaWIuc3R1YicsICdnem9wZW4nID0+ICd6bGliL3psaWIuc3R1YicsICdnenBhc3N0aHJ1JyA9PiAnemxpYi96bGliLnN0dWInLCAnZ3pwdXRzJyA9PiAnemxpYi96bGliLnN0dWInLCAnZ3pyZWFkJyA9PiAnemxpYi96bGliLnN0dWInLCAnZ3pyZXdpbmQnID0+ICd6bGliL3psaWIuc3R1YicsICdnenNlZWsnID0+ICd6bGliL3psaWIuc3R1YicsICdnenRlbGwnID0+ICd6bGliL3psaWIuc3R1YicsICdnenVuY29tcHJlc3MnID0+ICd6bGliL3psaWIuc3R1YicsICdnendyaXRlJyA9PiAnemxpYi96bGliLnN0dWInLCAnaGFzaCcgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ2hhc2hfYWxnb3MnID0+ICdoYXNoL2hhc2guc3R1YicsICdoYXNoX2NvcHknID0+ICdoYXNoL2hhc2guc3R1YicsICdoYXNoX2VxdWFscycgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ2hhc2hfZmlsZScgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ2hhc2hfZmluYWwnID0+ICdoYXNoL2hhc2guc3R1YicsICdoYXNoX2hrZGYnID0+ICdoYXNoL2hhc2guc3R1YicsICdoYXNoX2htYWMnID0+ICdoYXNoL2hhc2guc3R1YicsICdoYXNoX2htYWNfYWxnb3MnID0+ICdoYXNoL2hhc2guc3R1YicsICdoYXNoX2htYWNfZmlsZScgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ2hhc2hfaW5pdCcgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ2hhc2hfcGJrZGYyJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnaGFzaF91cGRhdGUnID0+ICdoYXNoL2hhc2guc3R1YicsICdoYXNoX3VwZGF0ZV9maWxlJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnaGFzaF91cGRhdGVfc3RyZWFtJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnaGVhZGVyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2hlYWRlcl9yZWdpc3Rlcl9jYWxsYmFjaycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdoZWFkZXJfcmVtb3ZlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2hlYWRlcnNfbGlzdCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdoZWFkZXJzX3NlbmQnID0+ICdmcmFua2VucGhwL2ZyYW5rZW5waHAuc3R1YicsICdoZWFkZXJzX3NlbnQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAnaGVicmV2JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ2hlYnJldmMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnaGV4MmJpbicgPT4gJ3N0YW5kYXJkL19zdGFuZGFyZF9tYW51YWwuc3R1YicsICdoZXhkZWMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnaGlnaGxpZ2h0X2ZpbGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAnaGlnaGxpZ2h0X3N0cmluZycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdocnRpbWUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAnaHRtbF9lbnRpdHlfZGVjb2RlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ2h0bWxlbnRpdGllcycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzAuc3R1YicsICdodG1sc3BlY2lhbGNoYXJzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ2h0bWxzcGVjaWFsY2hhcnNfZGVjb2RlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ2h0dHBfYnVpbGRfY29va2llJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9idWlsZF9xdWVyeScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdodHRwX2J1aWxkX3N0cicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfYnVpbGRfdXJsJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9jYWNoZV9ldGFnJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9jYWNoZV9sYXN0X21vZGlmaWVkJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9jaHVua2VkX2RlY29kZScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfY2xlYXJfbGFzdF9yZXNwb25zZV9oZWFkZXJzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMTAuc3R1YicsICdodHRwX2RhdGUnID0+ICdodHRwL2h0dHAuc3R1YicsICdodHRwX2RlZmxhdGUnID0+ICdodHRwL2h0dHAuc3R1YicsICdodHRwX2dldCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfZ2V0X2xhc3RfcmVzcG9uc2VfaGVhZGVycycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEwLnN0dWInLCAnaHR0cF9nZXRfcmVxdWVzdF9ib2R5JyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9nZXRfcmVxdWVzdF9ib2R5X3N0cmVhbScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfZ2V0X3JlcXVlc3RfaGVhZGVycycgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfaGVhZCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfaW5mbGF0ZScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfbWF0Y2hfZXRhZycgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfbWF0Y2hfbW9kaWZpZWQnID0+ICdodHRwL2h0dHAuc3R1YicsICdodHRwX21hdGNoX3JlcXVlc3RfaGVhZGVyJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9uZWdvdGlhdGVfY2hhcnNldCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfbmVnb3RpYXRlX2NvbnRlbnRfdHlwZScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfbmVnb3RpYXRlX2xhbmd1YWdlJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9wYXJzZV9jb29raWUnID0+ICdodHRwL2h0dHAuc3R1YicsICdodHRwX3BhcnNlX2hlYWRlcnMnID0+ICdodHRwL2h0dHAuc3R1YicsICdodHRwX3BhcnNlX21lc3NhZ2UnID0+ICdodHRwL2h0dHAuc3R1YicsICdodHRwX3BhcnNlX3BhcmFtcycgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfcGVyc2lzdGVudF9oYW5kbGVzX2NsZWFuJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9wZXJzaXN0ZW50X2hhbmRsZXNfY291bnQnID0+ICdodHRwL2h0dHAuc3R1YicsICdodHRwX3BlcnNpc3RlbnRfaGFuZGxlc19pZGVudCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfcG9zdF9kYXRhJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9wb3N0X2ZpZWxkcycgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfcHV0X2RhdGEnID0+ICdodHRwL2h0dHAuc3R1YicsICdodHRwX3B1dF9maWxlJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9wdXRfc3RyZWFtJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9yZWRpcmVjdCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfcmVxdWVzdCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfcmVxdWVzdF9ib2R5X2VuY29kZScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfcmVxdWVzdF9tZXRob2RfZXhpc3RzJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9yZXF1ZXN0X21ldGhvZF9uYW1lJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9yZXF1ZXN0X21ldGhvZF9yZWdpc3RlcicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfcmVxdWVzdF9tZXRob2RfdW5yZWdpc3RlcicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfcmVzcG9uc2VfY29kZScgPT4gJ3N0YW5kYXJkL19zdGFuZGFyZF9tYW51YWwuc3R1YicsICdodHRwX3NlbmRfY29udGVudF9kaXNwb3NpdGlvbicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfc2VuZF9jb250ZW50X3R5cGUnID0+ICdodHRwL2h0dHAuc3R1YicsICdodHRwX3NlbmRfZGF0YScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfc2VuZF9maWxlJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9zZW5kX2xhc3RfbW9kaWZpZWQnID0+ICdodHRwL2h0dHAuc3R1YicsICdodHRwX3NlbmRfc3RhdHVzJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnaHR0cF9zZW5kX3N0cmVhbScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfc3VwcG9ydCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ2h0dHBfdGhyb3R0bGUnID0+ICdodHRwL2h0dHAuc3R1YicsICdoeXBvdCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdpYmFzZV9hZGRfdXNlcicgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9hZmZlY3RlZF9yb3dzJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX2JhY2t1cCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9ibG9iX2FkZCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9ibG9iX2NhbmNlbCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9ibG9iX2Nsb3NlJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX2Jsb2JfY3JlYXRlJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX2Jsb2JfZWNobycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9ibG9iX2dldCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9ibG9iX2ltcG9ydCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9ibG9iX2luZm8nID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnaWJhc2VfYmxvYl9vcGVuJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX2Nsb3NlJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX2NvbW1pdCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9jb21taXRfcmV0JyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX2Nvbm5lY3QnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnaWJhc2VfZGJfaW5mbycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9kZWxldGVfdXNlcicgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9kcm9wX2RiJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX2VycmNvZGUnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnaWJhc2VfZXJybXNnJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX2V4ZWN1dGUnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnaWJhc2VfZmV0Y2hfYXNzb2MnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnaWJhc2VfZmV0Y2hfb2JqZWN0JyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX2ZldGNoX3JvdycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9maWVsZF9pbmZvJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX2ZyZWVfZXZlbnRfaGFuZGxlcicgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9mcmVlX3F1ZXJ5JyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX2ZyZWVfcmVzdWx0JyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX2dlbl9pZCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9tYWludGFpbl9kYicgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9tb2RpZnlfdXNlcicgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9uYW1lX3Jlc3VsdCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9udW1fZmllbGRzJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX251bV9wYXJhbXMnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnaWJhc2VfcGFyYW1faW5mbycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9wY29ubmVjdCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdpYmFzZV9wcmVwYXJlJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX3F1ZXJ5JyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX3Jlc3RvcmUnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnaWJhc2Vfcm9sbGJhY2snID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnaWJhc2Vfcm9sbGJhY2tfcmV0JyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX3NlcnZlcl9pbmZvJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX3NlcnZpY2VfYXR0YWNoJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX3NlcnZpY2VfZGV0YWNoJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX3NldF9ldmVudF9oYW5kbGVyJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX3RyYW5zJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ2liYXNlX3dhaXRfZXZlbnQnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnaWNvbnYnID0+ICdpY29udi9pY29udi5zdHViJywgJ2ljb252X2dldF9lbmNvZGluZycgPT4gJ2ljb252L2ljb252LnN0dWInLCAnaWNvbnZfbWltZV9kZWNvZGUnID0+ICdpY29udi9pY29udi5zdHViJywgJ2ljb252X21pbWVfZGVjb2RlX2hlYWRlcnMnID0+ICdpY29udi9pY29udi5zdHViJywgJ2ljb252X21pbWVfZW5jb2RlJyA9PiAnaWNvbnYvaWNvbnYuc3R1YicsICdpY29udl9zZXRfZW5jb2RpbmcnID0+ICdpY29udi9pY29udi5zdHViJywgJ2ljb252X3N0cmxlbicgPT4gJ2ljb252L2ljb252LnN0dWInLCAnaWNvbnZfc3RycG9zJyA9PiAnaWNvbnYvaWNvbnYuc3R1YicsICdpY29udl9zdHJycG9zJyA9PiAnaWNvbnYvaWNvbnYuc3R1YicsICdpY29udl9zdWJzdHInID0+ICdpY29udi9pY29udi5zdHViJywgJ2lkYXRlJyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAnaWRuX3RvX2FzY2lpJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaWRuX3RvX3V0ZjgnID0+ICdpbnRsL2ludGwuc3R1YicsICdpZ2JpbmFyeV9zZXJpYWxpemUnID0+ICdpZ2JpbmFyeS9pZ2JpbmFyeS5zdHViJywgJ2lnYmluYXJ5X3Vuc2VyaWFsaXplJyA9PiAnaWdiaW5hcnkvaWdiaW5hcnkuc3R1YicsICdpZ25vcmVfdXNlcl9hYm9ydCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdpbWFnZTJ3Ym1wJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZV90eXBlX3RvX2V4dGVuc2lvbicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzAuc3R1YicsICdpbWFnZV90eXBlX3RvX21pbWVfdHlwZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzAuc3R1YicsICdpbWFnZWFmZmluZScgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VhZmZpbmVtYXRyaXhjb25jYXQnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlYWZmaW5lbWF0cml4Z2V0JyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWFscGhhYmxlbmRpbmcnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlYW50aWFsaWFzJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWFyYycgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VhdmlmJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWJtcCcgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VjaGFyJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNoYXJ1cCcgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2Vjb2xvcmFsbG9jYXRlJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNvbG9yYWxsb2NhdGVhbHBoYScgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2Vjb2xvcmF0JyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNvbG9yY2xvc2VzdCcgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2Vjb2xvcmNsb3Nlc3RhbHBoYScgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2Vjb2xvcmNsb3Nlc3Rod2InID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlY29sb3JkZWFsbG9jYXRlJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNvbG9yZXhhY3QnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlY29sb3JleGFjdGFscGhhJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNvbG9ybWF0Y2gnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlY29sb3JyZXNvbHZlJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNvbG9ycmVzb2x2ZWFscGhhJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNvbG9yc2V0JyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNvbG9yc2ZvcmluZGV4JyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNvbG9yc3RvdGFsJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNvbG9ydHJhbnNwYXJlbnQnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlY29udm9sdXRpb24nID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlY29weScgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2Vjb3B5bWVyZ2UnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlY29weW1lcmdlZ3JheScgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2Vjb3B5cmVzYW1wbGVkJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNvcHlyZXNpemVkJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNyZWF0ZScgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VjcmVhdGVmcm9tYXZpZicgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VjcmVhdGVmcm9tYm1wJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNyZWF0ZWZyb21nZCcgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VjcmVhdGVmcm9tZ2QyJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNyZWF0ZWZyb21nZDJwYXJ0JyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNyZWF0ZWZyb21naWYnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlY3JlYXRlZnJvbWpwZWcnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlY3JlYXRlZnJvbXBuZycgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VjcmVhdGVmcm9tc3RyaW5nJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNyZWF0ZWZyb210Z2EnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlY3JlYXRlZnJvbXdibXAnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlY3JlYXRlZnJvbXdlYnAnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlY3JlYXRlZnJvbXhibScgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VjcmVhdGVmcm9teHBtJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNyZWF0ZXRydWVjb2xvcicgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2Vjcm9wJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWNyb3BhdXRvJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWRhc2hlZGxpbmUnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlZGVzdHJveScgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VlbGxpcHNlJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWZpbGwnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlZmlsbGVkYXJjJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWZpbGxlZGVsbGlwc2UnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlZmlsbGVkcG9seWdvbicgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VmaWxsZWRyZWN0YW5nbGUnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlZmlsbHRvYm9yZGVyJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWZpbHRlcicgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VmbGlwJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWZvbnRoZWlnaHQnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlZm9udHdpZHRoJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWZ0YmJveCcgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VmdHRleHQnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlZ2FtbWFjb3JyZWN0JyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWdkJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWdkMicgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VnZXRjbGlwJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWdldGludGVycG9sYXRpb24nID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlZ2lmJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWdyYWJzY3JlZW4nID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlZ3JhYndpbmRvdycgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VpbnRlcmxhY2UnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlaXN0cnVlY29sb3InID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlanBlZycgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VsYXllcmVmZmVjdCcgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VsaW5lJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZWxvYWRmb250JyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZW9wZW5wb2x5Z29uJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZXBhbGV0dGVjb3B5JyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZXBhbGV0dGV0b3RydWVjb2xvcicgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VwbmcnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlcG9seWdvbicgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2Vwc2Jib3gnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlcHNlbmNvZGVmb250JyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZXBzZXh0ZW5kZm9udCcgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2Vwc2ZyZWVmb250JyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZXBzbG9hZGZvbnQnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlcHNzbGFudGZvbnQnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlcHN0ZXh0JyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZXJlY3RhbmdsZScgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VyZXNvbHV0aW9uJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZXJvdGF0ZScgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VzYXZlYWxwaGEnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlc2NhbGUnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlc2V0YnJ1c2gnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdlc2V0Y2xpcCcgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VzZXRpbnRlcnBvbGF0aW9uJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZXNldHBpeGVsJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZXNldHN0eWxlJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZXNldHRoaWNrbmVzcycgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VzZXR0aWxlJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZXN0cmluZycgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VzdHJpbmd1cCcgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VzeCcgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2VzeScgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2V0cnVlY29sb3J0b3BhbGV0dGUnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdldHRmYmJveCcgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2V0dGZ0ZXh0JyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZXR5cGVzJyA9PiAnZ2QvZ2Quc3R1YicsICdpbWFnZXdibXAnID0+ICdnZC9nZC5zdHViJywgJ2ltYWdld2VicCcgPT4gJ2dkL2dkLnN0dWInLCAnaW1hZ2V4Ym0nID0+ICdnZC9nZC5zdHViJywgJ2ltYXBfOGJpdCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfYWxlcnRzJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9hcHBlbmQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX2Jhc2U2NCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfYmluYXJ5JyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9ib2R5JyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9ib2R5c3RydWN0JyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9jaGVjaycgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfY2xlYXJmbGFnX2Z1bGwnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX2Nsb3NlJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9jcmVhdGUnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX2NyZWF0ZW1haWxib3gnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX2RlbGV0ZScgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfZGVsZXRlbWFpbGJveCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfZXJyb3JzJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9leHB1bmdlJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9mZXRjaF9vdmVydmlldycgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfZmV0Y2hib2R5JyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9mZXRjaGhlYWRlcicgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfZmV0Y2htaW1lJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9mZXRjaHN0cnVjdHVyZScgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfZmV0Y2h0ZXh0JyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9nYycgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfZ2V0X3F1b3RhJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9nZXRfcXVvdGFyb290JyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9nZXRhY2wnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX2dldGFubm90YXRpb24nID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX2dldG1haWxib3hlcycgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfZ2V0c3Vic2NyaWJlZCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfaGVhZGVyJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9oZWFkZXJpbmZvJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9oZWFkZXJzJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9pc19vcGVuJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9sYXN0X2Vycm9yJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9saXN0JyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9saXN0bWFpbGJveCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfbGlzdHNjYW4nID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX2xpc3RzdWJzY3JpYmVkJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9sc3ViJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9tYWlsJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9tYWlsX2NvbXBvc2UnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX21haWxfY29weScgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfbWFpbF9tb3ZlJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9tYWlsYm94bXNnaW5mbycgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfbWltZV9oZWFkZXJfZGVjb2RlJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9tc2dubycgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfbXV0ZjdfdG9fdXRmOCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfbXlyaWdodHMnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX251bV9tc2cnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX251bV9yZWNlbnQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX29wZW4nID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX3BpbmcnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX3FwcmludCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfcmVuYW1lJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9yZW5hbWVtYWlsYm94JyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9yZW9wZW4nID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX3JmYzgyMl9wYXJzZV9hZHJsaXN0JyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9yZmM4MjJfcGFyc2VfaGVhZGVycycgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfcmZjODIyX3dyaXRlX2FkZHJlc3MnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX3NhdmVib2R5JyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9zY2FuJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9zY2FubWFpbGJveCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfc2VhcmNoJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9zZXRfcXVvdGEnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX3NldGFjbCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfc2V0YW5ub3RhdGlvbicgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfc2V0ZmxhZ19mdWxsJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9zb3J0JyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9zdGF0dXMnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX3N0YXR1c19jdXJyZW50JyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF9zdWJzY3JpYmUnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX3RocmVhZCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfdGltZW91dCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfdWlkJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF91bmRlbGV0ZScgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfdW5zdWJzY3JpYmUnID0+ICdpbWFwL2ltYXAuc3R1YicsICdpbWFwX3V0ZjdfZGVjb2RlJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnaW1hcF91dGY3X2VuY29kZScgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfdXRmOCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltYXBfdXRmOF90b19tdXRmNycgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ2ltcGxvZGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnaW1wb3J0X3JlcXVlc3RfdmFyaWFibGVzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2luX2FycmF5JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ2luZXRfbnRvcCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdpbmV0X3B0b24nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnaW5mbGF0ZV9hZGQnID0+ICd6bGliL3psaWIuc3R1YicsICdpbmZsYXRlX2dldF9yZWFkX2xlbicgPT4gJ3psaWIvemxpYi5zdHViJywgJ2luZmxhdGVfZ2V0X3N0YXR1cycgPT4gJ3psaWIvemxpYi5zdHViJywgJ2luZmxhdGVfaW5pdCcgPT4gJ3psaWIvemxpYi5zdHViJywgJ2luaV9hbHRlcicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdpbmlfZ2V0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2luaV9nZXRfYWxsJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2luaV9wYXJzZV9xdWFudGl0eScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdpbmlfcmVzdG9yZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdpbmlfc2V0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ2lub3RpZnlfYWRkX3dhdGNoJyA9PiAnaW5vdGlmeS9pbm90aWZ5LnN0dWInLCAnaW5vdGlmeV9pbml0JyA9PiAnaW5vdGlmeS9pbm90aWZ5LnN0dWInLCAnaW5vdGlmeV9xdWV1ZV9sZW4nID0+ICdpbm90aWZ5L2lub3RpZnkuc3R1YicsICdpbm90aWZ5X3JlYWQnID0+ICdpbm90aWZ5L2lub3RpZnkuc3R1YicsICdpbm90aWZ5X3JtX3dhdGNoJyA9PiAnaW5vdGlmeS9pbm90aWZ5LnN0dWInLCAnaW50Y2FsX2dldF9tYXhpbXVtJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50ZGl2JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2ludGVyZmFjZV9leGlzdHMnID0+ICdDb3JlL0NvcmUuc3R1YicsICdpbnRsX2Vycm9yX25hbWUnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsX2dldCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxfZ2V0X2Vycm9yX2NvZGUnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsX2dldF9lcnJvcl9tZXNzYWdlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bF9pc19mYWlsdXJlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9hZGQnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX2FmdGVyJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9iZWZvcmUnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX2NsZWFyJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9jcmVhdGVfaW5zdGFuY2UnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX2VxdWFscycgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfZmllbGRfZGlmZmVyZW5jZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfZnJvbV9kYXRlX3RpbWUnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX2dldCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfZ2V0X2FjdHVhbF9tYXhpbXVtJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9nZXRfYWN0dWFsX21pbmltdW0nID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX2dldF9hdmFpbGFibGVfbG9jYWxlcycgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfZ2V0X2RheV9vZl93ZWVrX3R5cGUnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX2dldF9lcnJvcl9jb2RlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9nZXRfZXJyb3JfbWVzc2FnZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfZ2V0X2ZpcnN0X2RheV9vZl93ZWVrJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9nZXRfZ3JlYXRlc3RfbWluaW11bScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfZ2V0X2tleXdvcmRfdmFsdWVzX2Zvcl9sb2NhbGUnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX2dldF9sZWFzdF9tYXhpbXVtJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9nZXRfbG9jYWxlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9nZXRfbWF4aW11bScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfZ2V0X21pbmltYWxfZGF5c19pbl9maXJzdF93ZWVrJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9nZXRfbWluaW11bScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfZ2V0X25vdycgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfZ2V0X3JlcGVhdGVkX3dhbGxfdGltZV9vcHRpb24nID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX2dldF9za2lwcGVkX3dhbGxfdGltZV9vcHRpb24nID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX2dldF90aW1lJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9nZXRfdGltZV96b25lJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9nZXRfdHlwZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfZ2V0X3dlZWtlbmRfdHJhbnNpdGlvbicgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfZ3JlYXRlc19taW5pbXVtJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9pbl9kYXlsaWdodF90aW1lJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9pc19lcXVpdmFsZW50X3RvJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9pc19sZW5pZW50JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9pc19zZXQnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX2lzX3dlZWtlbmQnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX3JvbGwnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX3NldCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfc2V0X2ZpcnN0X2RheV9vZl93ZWVrJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9zZXRfbGVuaWVudCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfc2V0X21pbmltYWxfZGF5c19pbl9maXJzdF93ZWVrJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGNhbF9zZXRfcmVwZWF0ZWRfd2FsbF90aW1lX29wdGlvbicgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfc2V0X3NraXBwZWRfd2FsbF90aW1lX29wdGlvbicgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxjYWxfc2V0X3RpbWUnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX3NldF90aW1lX3pvbmUnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsY2FsX3RvX2RhdGVfdGltZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxncmVnY2FsX2NyZWF0ZV9pbnN0YW5jZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGxncmVnY2FsX2dldF9ncmVnb3JpYW5fY2hhbmdlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGdyZWdjYWxfaXNfbGVhcF95ZWFyJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bGdyZWdjYWxfc2V0X2dyZWdvcmlhbl9jaGFuZ2UnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsdHpfY291bnRfZXF1aXZhbGVudF9pZHMnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsdHpfY3JlYXRlX2RlZmF1bHQnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsdHpfY3JlYXRlX2VudW1lcmF0aW9uJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bHR6X2NyZWF0ZV90aW1lX3pvbmUnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsdHpfY3JlYXRlX3RpbWVfem9uZV9pZF9lbnVtZXJhdGlvbicgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGx0el9mcm9tX2RhdGVfdGltZV96b25lJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bHR6X2dldEdNVCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGx0el9nZXRfY2Fub25pY2FsX2lkJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bHR6X2dldF9kaXNwbGF5X25hbWUnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsdHpfZ2V0X2RzdF9zYXZpbmdzJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bHR6X2dldF9lcXVpdmFsZW50X2lkJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bHR6X2dldF9lcnJvcl9jb2RlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bHR6X2dldF9lcnJvcl9tZXNzYWdlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bHR6X2dldF9nbXQnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsdHpfZ2V0X2lhbmFfaWQnID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsdHpfZ2V0X2lkJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bHR6X2dldF9pZF9mb3Jfd2luZG93c19pZCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGx0el9nZXRfb2Zmc2V0JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bHR6X2dldF9yYXdfb2Zmc2V0JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50bHR6X2dldF9yZWdpb24nID0+ICdpbnRsL2ludGwuc3R1YicsICdpbnRsdHpfZ2V0X3R6X2RhdGFfdmVyc2lvbicgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGx0el9nZXRfdW5rbm93bicgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGx0el9nZXRfd2luZG93c19pZCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGx0el9oYXNfc2FtZV9ydWxlcycgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGx0el90b19kYXRlX3RpbWVfem9uZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGx0el91c2VfZGF5bGlnaHRfdGltZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2ludGx6X2NyZWF0ZV9kZWZhdWx0JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnaW50dmFsJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ2lwMmxvbmcnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnaXB0Y2VtYmVkJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ2lwdGNwYXJzZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzAuc3R1YicsICdpc19hJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnaXNfYXJyYXknID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnaXNfYm9vbCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdpc19jYWxsYWJsZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdpc19jb3VudGFibGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnaXNfZGlyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2lzX2RvdWJsZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdpc19leGVjdXRhYmxlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2lzX2ZpbGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAnaXNfZmluaXRlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2lzX2Zsb2F0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ2lzX2luZmluaXRlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2lzX2ludCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdpc19pbnRlZ2VyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ2lzX2l0ZXJhYmxlJyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICdpc19saW5rJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2lzX2xvbmcnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnaXNfbmFuJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2lzX251bGwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnaXNfbnVtZXJpYycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdpc19vYmplY3QnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnaXNfcmVhZGFibGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAnaXNfcmVhbCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdpc19yZXNvdXJjZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdpc19zY2FsYXInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnaXNfc29hcF9mYXVsdCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ2lzX3N0cmluZycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdpc19zdWJjbGFzc19vZicgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ2lzX3VwbG9hZGVkX2ZpbGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAnaXNfd3JpdGFibGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAnaXNfd3JpdGVhYmxlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2l0ZXJhdG9yX2FwcGx5JyA9PiAnU1BML1NQTF9mLnN0dWInLCAnaXRlcmF0b3JfY291bnQnID0+ICdTUEwvU1BMX2Yuc3R1YicsICdpdGVyYXRvcl90b19hcnJheScgPT4gJ1NQTC9TUExfZi5zdHViJywgJ2phdmEnID0+ICd6ZW5kL3plbmRfZi5zdHViJywgJ2phdmFfbGFzdF9leGNlcHRpb25fY2xlYXInID0+ICd6ZW5kL3plbmRfZi5zdHViJywgJ2phdmFfbGFzdF9leGNlcHRpb25fZ2V0JyA9PiAnemVuZC96ZW5kX2Yuc3R1YicsICdqYXZhX3JlbG9hZCcgPT4gJ3plbmQvemVuZF9mLnN0dWInLCAnamF2YV9yZXF1aXJlJyA9PiAnemVuZC96ZW5kX2Yuc3R1YicsICdqYXZhX3NldF9lbmNvZGluZycgPT4gJ3plbmQvemVuZF9mLnN0dWInLCAnamF2YV9zZXRfaWdub3JlX2Nhc2UnID0+ICd6ZW5kL3plbmRfZi5zdHViJywgJ2phdmFfdGhyb3dfZXhjZXB0aW9ucycgPT4gJ3plbmQvemVuZF9mLnN0dWInLCAnamRkYXlvZndlZWsnID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ2pkbW9udGhuYW1lJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdqZHRvZnJlbmNoJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdqZHRvZ3JlZ29yaWFuJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdqZHRvamV3aXNoJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdqZHRvanVsaWFuJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdqZHRvdW5peCcgPT4gJ2NhbGVuZGFyL2NhbGVuZGFyLnN0dWInLCAnamV3aXNodG9qZCcgPT4gJ2NhbGVuZGFyL2NhbGVuZGFyLnN0dWInLCAnam9icXVldWVfbGljZW5zZV9pbmZvJyA9PiAnemVuZC96ZW5kX2Yuc3R1YicsICdqb2luJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ2pwZWcyd2JtcCcgPT4gJ2dkL2dkLnN0dWInLCAnanNvbl9kZWNvZGUnID0+ICdqc29uL2pzb24uc3R1YicsICdqc29uX2VuY29kZScgPT4gJ2pzb24vanNvbi5zdHViJywgJ2pzb25fbGFzdF9lcnJvcicgPT4gJ2pzb24vanNvbi5zdHViJywgJ2pzb25fbGFzdF9lcnJvcl9tc2cnID0+ICdqc29uL2pzb24uc3R1YicsICdqc29uX3ZhbGlkYXRlJyA9PiAnanNvbi9qc29uLnN0dWInLCAnanVsaWFudG9qZCcgPT4gJ2NhbGVuZGFyL2NhbGVuZGFyLnN0dWInLCAna2Fma2FfZXJyMm5hbWUnID0+ICdzaW1wbGVfa2Fma2FfY2xpZW50L2Z1bmN0aW9ucy5zdHViJywgJ2thZmthX2VycjJzdHInID0+ICdzaW1wbGVfa2Fma2FfY2xpZW50L2Z1bmN0aW9ucy5zdHViJywgJ2thZmthX2dldF9lcnJfZGVzY3MnID0+ICdzaW1wbGVfa2Fma2FfY2xpZW50L2Z1bmN0aW9ucy5zdHViJywgJ2thZmthX29mZnNldF90YWlsJyA9PiAnc2ltcGxlX2thZmthX2NsaWVudC9mdW5jdGlvbnMuc3R1YicsICdrYWZrYV90aHJlYWRfY250JyA9PiAnc2ltcGxlX2thZmthX2NsaWVudC9mdW5jdGlvbnMuc3R1YicsICdrZXknID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAna2V5X2V4aXN0cycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdrcnNvcnQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAna3NvcnQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnbGNmaXJzdCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICdsY2dfdmFsdWUnID0+ICdyYW5kb20vcmFuZG9tLnN0dWInLCAnbGNoZ3JwJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2xjaG93bicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdsZGFwXzg4NTlfdG9fdDYxJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9hZGQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2FkZF9leHQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2JpbmQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2JpbmRfZXh0JyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9jbG9zZScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfY29tcGFyZScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfY29ubmVjdCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfY29udHJvbF9wYWdlZF9yZXN1bHQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2NvbnRyb2xfcGFnZWRfcmVzdWx0X3Jlc3BvbnNlJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9jb3VudF9lbnRyaWVzJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9jb3VudF9yZWZlcmVuY2VzJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9kZWxldGUnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2RlbGV0ZV9leHQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2RuMnVmbicgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfZXJyMnN0cicgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfZXJybm8nID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2Vycm9yJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9lc2NhcGUnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2V4b3AnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2V4b3BfcGFzc3dkJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9leG9wX3JlZnJlc2gnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2V4b3Bfc3luYycgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfZXhvcF93aG9hbWknID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2V4cGxvZGVfZG4nID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2ZpcnN0X2F0dHJpYnV0ZScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfZmlyc3RfZW50cnknID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2ZpcnN0X3JlZmVyZW5jZScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfZnJlZV9yZXN1bHQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2dldF9hdHRyaWJ1dGVzJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9nZXRfZG4nID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX2dldF9lbnRyaWVzJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9nZXRfb3B0aW9uJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9nZXRfdmFsdWVzJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9nZXRfdmFsdWVzX2xlbicgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfbGlzdCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfbW9kX2FkZCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfbW9kX2FkZF9leHQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX21vZF9kZWwnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX21vZF9kZWxfZXh0JyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9tb2RfcmVwbGFjZScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfbW9kX3JlcGxhY2VfZXh0JyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9tb2RpZnknID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX21vZGlmeV9iYXRjaCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfbmV4dF9hdHRyaWJ1dGUnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX25leHRfZW50cnknID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX25leHRfcmVmZXJlbmNlJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9wYXJzZV9leG9wJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9wYXJzZV9yZWZlcmVuY2UnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX3BhcnNlX3Jlc3VsdCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfcmVhZCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfcmVuYW1lJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9yZW5hbWVfZXh0JyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9zYXNsX2JpbmQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX3NlYXJjaCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfc2V0X29wdGlvbicgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ2xkYXBfc2V0X3JlYmluZF9wcm9jJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9zb3J0JyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF9zdGFydF90bHMnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZGFwX3Q2MV90b184ODU5JyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnbGRhcF91bmJpbmQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdsZXZlbnNodGVpbicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdsaWJ2aXJ0X2NoZWNrX3ZlcnNpb24nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfY29ubmVjdCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9jb25uZWN0X2dldF9hbGxfZG9tYWluX3N0YXRzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2Nvbm5lY3RfZ2V0X2NhcGFiaWxpdGllcycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9jb25uZWN0X2dldF9lbXVsYXRvcicgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9jb25uZWN0X2dldF9lbmNyeXB0ZWQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfY29ubmVjdF9nZXRfaG9zdG5hbWUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfY29ubmVjdF9nZXRfaHlwZXJ2aXNvcicgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9jb25uZWN0X2dldF9pbmZvcm1hdGlvbicgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9jb25uZWN0X2dldF9tYWNoaW5lX3R5cGVzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2Nvbm5lY3RfZ2V0X21heHZjcHVzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2Nvbm5lY3RfZ2V0X25pY19tb2RlbHMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfY29ubmVjdF9nZXRfc2VjdXJlJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2Nvbm5lY3RfZ2V0X3NvdW5kaHdfbW9kZWxzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2Nvbm5lY3RfZ2V0X3N5c2luZm8nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfY29ubmVjdF9nZXRfdXJpJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9hdHRhY2hfZGV2aWNlJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9ibG9ja19jb21taXQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2Jsb2NrX2pvYl9hYm9ydCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fYmxvY2tfam9iX2luZm8nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2Jsb2NrX2pvYl9zZXRfc3BlZWQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2Jsb2NrX3Jlc2l6ZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fYmxvY2tfc3RhdHMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2NoYW5nZV9ib290X2RldmljZXMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2NoYW5nZV9tZW1vcnknID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2NoYW5nZV92Y3B1cycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fY29yZV9kdW1wJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9jcmVhdGUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2NyZWF0ZV94bWwnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2RlZmluZV94bWwnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2Rlc3Ryb3knID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2RldGFjaF9kZXZpY2UnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2Rpc2tfYWRkJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9kaXNrX3JlbW92ZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fZ2V0X2F1dG9zdGFydCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fZ2V0X2Jsb2NrX2luZm8nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2dldF9jb25uZWN0JyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9nZXRfY291bnRzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9nZXRfZGlza19kZXZpY2VzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9nZXRfaWQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2dldF9pbmZvJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9nZXRfaW50ZXJmYWNlX2RldmljZXMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2dldF9qb2JfaW5mbycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fZ2V0X21ldGFkYXRhJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9nZXRfbmFtZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fZ2V0X25ldHdvcmtfaW5mbycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fZ2V0X25leHRfZGV2X2lkcycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fZ2V0X3NjcmVlbl9kaW1lbnNpb25zJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9nZXRfc2NyZWVuc2hvdCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fZ2V0X3NjcmVlbnNob3RfYXBpJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9nZXRfdXVpZCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fZ2V0X3V1aWRfc3RyaW5nJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9nZXRfeG1sX2Rlc2MnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2hhc19jdXJyZW50X3NuYXBzaG90JyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9pbnRlcmZhY2VfYWRkcmVzc2VzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9pbnRlcmZhY2Vfc3RhdHMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2lzX2FjdGl2ZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5faXNfcGVyc2lzdGVudCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fbG9va3VwX2J5X2lkJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9sb29rdXBfYnlfbmFtZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fbG9va3VwX2J5X3V1aWQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX2xvb2t1cF9ieV91dWlkX3N0cmluZycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fbWFuYWdlZHNhdmUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX21lbW9yeV9wZWVrJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9tZW1vcnlfc3RhdHMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX21pZ3JhdGUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX21pZ3JhdGVfdG9fdXJpJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9taWdyYXRlX3RvX3VyaTInID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX25ldycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fbmV3X2dldF92bmMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX25pY19hZGQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX25pY19yZW1vdmUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX3FlbXVfYWdlbnRfY29tbWFuZCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fcmVib290JyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9yZXNldCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fcmVzdW1lJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9zZW5kX2tleV9hcGknID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX3NlbmRfa2V5cycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fc2VuZF9wb2ludGVyX2V2ZW50JyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9zZXRfYXV0b3N0YXJ0JyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9zZXRfbWF4X21lbW9yeScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fc2V0X21lbW9yeScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fc2V0X21lbW9yeV9mbGFncycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fc2V0X21ldGFkYXRhJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9zaHV0ZG93bicgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fc25hcHNob3RfY3JlYXRlJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9zbmFwc2hvdF9jdXJyZW50JyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9zbmFwc2hvdF9kZWxldGUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX3NuYXBzaG90X2dldF94bWwnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX3NuYXBzaG90X2xvb2t1cF9ieV9uYW1lJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl9zbmFwc2hvdF9yZXZlcnQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX3N1c3BlbmQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZG9tYWluX3VuZGVmaW5lJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl91bmRlZmluZV9mbGFncycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5fdXBkYXRlX2RldmljZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9kb21haW5feG1sX2Zyb21fbmF0aXZlJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl94bWxfdG9fbmF0aXZlJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2RvbWFpbl94bWxfeHBhdGgnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZ2V0X2lzb19pbWFnZXMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZ2V0X2xhc3RfZXJyb3InID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfZ2V0X2xhc3RfZXJyb3JfY29kZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9nZXRfbGFzdF9lcnJvcl9kb21haW4nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfaGFzX2ZlYXR1cmUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfaW1hZ2VfY3JlYXRlJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2ltYWdlX3JlbW92ZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9saXN0X2FjdGl2ZV9kb21haW5faWRzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2xpc3RfYWN0aXZlX2RvbWFpbnMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbGlzdF9hY3RpdmVfc3RvcmFnZXBvb2xzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2xpc3RfYWxsX25ldHdvcmtzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2xpc3RfYWxsX253ZmlsdGVycycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9saXN0X2RvbWFpbl9yZXNvdXJjZXMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbGlzdF9kb21haW5fc25hcHNob3RzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2xpc3RfZG9tYWlucycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9saXN0X2luYWN0aXZlX2RvbWFpbnMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbGlzdF9pbmFjdGl2ZV9zdG9yYWdlcG9vbHMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbGlzdF9uZXR3b3JrcycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9saXN0X25vZGVkZXZzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2xpc3RfbndmaWx0ZXJzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2xpc3Rfc3RvcmFnZXBvb2xzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X2xvZ2ZpbGVfc2V0JyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X25ldHdvcmtfZGVmaW5lX3htbCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9uZXR3b3JrX2dldCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9uZXR3b3JrX2dldF9hY3RpdmUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbmV0d29ya19nZXRfYXV0b3N0YXJ0JyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X25ldHdvcmtfZ2V0X2JyaWRnZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9uZXR3b3JrX2dldF9pbmZvcm1hdGlvbicgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9uZXR3b3JrX2dldF9uYW1lJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X25ldHdvcmtfZ2V0X3V1aWQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbmV0d29ya19nZXRfdXVpZF9zdHJpbmcnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbmV0d29ya19nZXRfeG1sX2Rlc2MnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbmV0d29ya19zZXRfYWN0aXZlJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X25ldHdvcmtfc2V0X2F1dG9zdGFydCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9uZXR3b3JrX3VuZGVmaW5lJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X25vZGVfZ2V0X2NwdV9zdGF0cycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9ub2RlX2dldF9jcHVfc3RhdHNfZm9yX2VhY2hfY3B1JyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X25vZGVfZ2V0X2ZyZWVfbWVtb3J5JyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X25vZGVfZ2V0X2luZm8nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbm9kZV9nZXRfbWVtX3N0YXRzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X25vZGVkZXZfY2FwYWJpbGl0aWVzJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X25vZGVkZXZfZ2V0JyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X25vZGVkZXZfZ2V0X2luZm9ybWF0aW9uJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X25vZGVkZXZfZ2V0X3htbF9kZXNjJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X253ZmlsdGVyX2RlZmluZV94bWwnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbndmaWx0ZXJfZ2V0X25hbWUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbndmaWx0ZXJfZ2V0X3V1aWQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbndmaWx0ZXJfZ2V0X3V1aWRfc3RyaW5nJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X253ZmlsdGVyX2dldF94bWxfZGVzYycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9ud2ZpbHRlcl9sb29rdXBfYnlfbmFtZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9ud2ZpbHRlcl9sb29rdXBfYnlfdXVpZF9zdHJpbmcnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfbndmaWx0ZXJfdW5kZWZpbmUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfcHJpbnRfYmluZGluZ19yZXNvdXJjZXMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RvcmFnZXBvb2xfYnVpbGQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RvcmFnZXBvb2xfY3JlYXRlJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0b3JhZ2Vwb29sX2RlZmluZV94bWwnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RvcmFnZXBvb2xfZGVsZXRlJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0b3JhZ2Vwb29sX2Rlc3Ryb3knID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RvcmFnZXBvb2xfZ2V0X2F1dG9zdGFydCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9zdG9yYWdlcG9vbF9nZXRfaW5mbycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9zdG9yYWdlcG9vbF9nZXRfbmFtZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9zdG9yYWdlcG9vbF9nZXRfdXVpZF9zdHJpbmcnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RvcmFnZXBvb2xfZ2V0X3ZvbHVtZV9jb3VudCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9zdG9yYWdlcG9vbF9nZXRfeG1sX2Rlc2MnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RvcmFnZXBvb2xfaXNfYWN0aXZlJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0b3JhZ2Vwb29sX2xpc3Rfdm9sdW1lcycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9zdG9yYWdlcG9vbF9sb29rdXBfYnlfbmFtZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9zdG9yYWdlcG9vbF9sb29rdXBfYnlfdXVpZF9zdHJpbmcnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RvcmFnZXBvb2xfbG9va3VwX2J5X3ZvbHVtZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9zdG9yYWdlcG9vbF9yZWZyZXNoJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0b3JhZ2Vwb29sX3NldF9hdXRvc3RhcnQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RvcmFnZXBvb2xfdW5kZWZpbmUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RvcmFnZXZvbHVtZV9jcmVhdGVfeG1sJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0b3JhZ2V2b2x1bWVfY3JlYXRlX3htbF9mcm9tJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0b3JhZ2V2b2x1bWVfZGVsZXRlJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0b3JhZ2V2b2x1bWVfZG93bmxvYWQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RvcmFnZXZvbHVtZV9nZXRfaW5mbycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9zdG9yYWdldm9sdW1lX2dldF9uYW1lJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0b3JhZ2V2b2x1bWVfZ2V0X3BhdGgnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RvcmFnZXZvbHVtZV9nZXRfeG1sX2Rlc2MnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RvcmFnZXZvbHVtZV9sb29rdXBfYnlfbmFtZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9zdG9yYWdldm9sdW1lX2xvb2t1cF9ieV9wYXRoJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0b3JhZ2V2b2x1bWVfcmVzaXplJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0b3JhZ2V2b2x1bWVfdXBsb2FkJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0cmVhbV9hYm9ydCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9zdHJlYW1fY2xvc2UnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnZpcnRfc3RyZWFtX2NyZWF0ZScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnbGlidmlydF9zdHJlYW1fZmluaXNoJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0cmVhbV9yZWN2JyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3N0cmVhbV9zZW5kJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdsaWJ2aXJ0X3ZlcnNpb24nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ2xpYnhtbF9jbGVhcl9lcnJvcnMnID0+ICdsaWJ4bWwvbGlieG1sLnN0dWInLCAnbGlieG1sX2Rpc2FibGVfZW50aXR5X2xvYWRlcicgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdsaWJ4bWxfZ2V0X2Vycm9ycycgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdsaWJ4bWxfZ2V0X2V4dGVybmFsX2VudGl0eV9sb2FkZXInID0+ICdsaWJ4bWwvbGlieG1sLnN0dWInLCAnbGlieG1sX2dldF9sYXN0X2Vycm9yJyA9PiAnbGlieG1sL2xpYnhtbC5zdHViJywgJ2xpYnhtbF9zZXRfZXh0ZXJuYWxfZW50aXR5X2xvYWRlcicgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdsaWJ4bWxfc2V0X3N0cmVhbXNfY29udGV4dCcgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdsaWJ4bWxfdXNlX2ludGVybmFsX2Vycm9ycycgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdsaW5rJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ2xpbmtpbmZvJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ2xvY2FsZV9hY2NlcHRfZnJvbV9odHRwJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbG9jYWxlX2Nhbm9uaWNhbGl6ZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2xvY2FsZV9jb21wb3NlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbG9jYWxlX2ZpbHRlcl9tYXRjaGVzJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbG9jYWxlX2dldF9hbGxfdmFyaWFudHMnID0+ICdpbnRsL2ludGwuc3R1YicsICdsb2NhbGVfZ2V0X2RlZmF1bHQnID0+ICdpbnRsL2ludGwuc3R1YicsICdsb2NhbGVfZ2V0X2Rpc3BsYXlfbGFuZ3VhZ2UnID0+ICdpbnRsL2ludGwuc3R1YicsICdsb2NhbGVfZ2V0X2Rpc3BsYXlfbmFtZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ2xvY2FsZV9nZXRfZGlzcGxheV9yZWdpb24nID0+ICdpbnRsL2ludGwuc3R1YicsICdsb2NhbGVfZ2V0X2Rpc3BsYXlfc2NyaXB0JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbG9jYWxlX2dldF9kaXNwbGF5X3ZhcmlhbnQnID0+ICdpbnRsL2ludGwuc3R1YicsICdsb2NhbGVfZ2V0X2tleXdvcmRzJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbG9jYWxlX2dldF9wcmltYXJ5X2xhbmd1YWdlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbG9jYWxlX2dldF9yZWdpb24nID0+ICdpbnRsL2ludGwuc3R1YicsICdsb2NhbGVfZ2V0X3NjcmlwdCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ2xvY2FsZV9sb29rdXAnID0+ICdpbnRsL2ludGwuc3R1YicsICdsb2NhbGVfcGFyc2UnID0+ICdpbnRsL2ludGwuc3R1YicsICdsb2NhbGVfc2V0X2RlZmF1bHQnID0+ICdpbnRsL2ludGwuc3R1YicsICdsb2NhbGVjb252JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ2xvY2FsdGltZScgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ2xvZycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdsb2cxMCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdsb2cxcCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdsb25nMmlwJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ2xzdGF0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ2x0cmltJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ2x6Zl9jb21wcmVzcycgPT4gJ2x6Zi9semYuc3R1YicsICdsemZfZGVjb21wcmVzcycgPT4gJ2x6Zi9semYuc3R1YicsICdsemZfb3B0aW1pemVkX2ZvcicgPT4gJ2x6Zi9semYuc3R1YicsICdtYWdpY19xdW90ZXNfcnVudGltZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdtYWlsJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ21haWxwYXJzZV9kZXRlcm1pbmVfYmVzdF94ZmVyX2VuY29kaW5nJyA9PiAnbWFpbHBhcnNlL21haWxwYXJzZS5zdHViJywgJ21haWxwYXJzZV9tc2dfY3JlYXRlJyA9PiAnbWFpbHBhcnNlL21haWxwYXJzZS5zdHViJywgJ21haWxwYXJzZV9tc2dfZXh0cmFjdF9wYXJ0JyA9PiAnbWFpbHBhcnNlL21haWxwYXJzZS5zdHViJywgJ21haWxwYXJzZV9tc2dfZXh0cmFjdF9wYXJ0X2ZpbGUnID0+ICdtYWlscGFyc2UvbWFpbHBhcnNlLnN0dWInLCAnbWFpbHBhcnNlX21zZ19leHRyYWN0X3dob2xlX3BhcnRfZmlsZScgPT4gJ21haWxwYXJzZS9tYWlscGFyc2Uuc3R1YicsICdtYWlscGFyc2VfbXNnX2ZyZWUnID0+ICdtYWlscGFyc2UvbWFpbHBhcnNlLnN0dWInLCAnbWFpbHBhcnNlX21zZ19nZXRfcGFydCcgPT4gJ21haWxwYXJzZS9tYWlscGFyc2Uuc3R1YicsICdtYWlscGFyc2VfbXNnX2dldF9wYXJ0X2RhdGEnID0+ICdtYWlscGFyc2UvbWFpbHBhcnNlLnN0dWInLCAnbWFpbHBhcnNlX21zZ19nZXRfc3RydWN0dXJlJyA9PiAnbWFpbHBhcnNlL21haWxwYXJzZS5zdHViJywgJ21haWxwYXJzZV9tc2dfcGFyc2UnID0+ICdtYWlscGFyc2UvbWFpbHBhcnNlLnN0dWInLCAnbWFpbHBhcnNlX21zZ19wYXJzZV9maWxlJyA9PiAnbWFpbHBhcnNlL21haWxwYXJzZS5zdHViJywgJ21haWxwYXJzZV9yZmM4MjJfcGFyc2VfYWRkcmVzc2VzJyA9PiAnbWFpbHBhcnNlL21haWxwYXJzZS5zdHViJywgJ21haWxwYXJzZV9zdHJlYW1fZW5jb2RlJyA9PiAnbWFpbHBhcnNlL21haWxwYXJzZS5zdHViJywgJ21haWxwYXJzZV91dWRlY29kZV9hbGwnID0+ICdtYWlscGFyc2UvbWFpbHBhcnNlLnN0dWInLCAnbWF4JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ21iX2NoZWNrX2VuY29kaW5nJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9jaHInID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX2NvbnZlcnRfY2FzZScgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfY29udmVydF9lbmNvZGluZycgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfY29udmVydF9rYW5hJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9jb252ZXJ0X3ZhcmlhYmxlcycgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfZGVjb2RlX21pbWVoZWFkZXInID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX2RlY29kZV9udW1lcmljZW50aXR5JyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9kZXRlY3RfZW5jb2RpbmcnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX2RldGVjdF9vcmRlcicgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfZW5jb2RlX21pbWVoZWFkZXInID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX2VuY29kZV9udW1lcmljZW50aXR5JyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9lbmNvZGluZ19hbGlhc2VzJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9lcmVnJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9lcmVnX21hdGNoJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9lcmVnX3JlcGxhY2UnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX2VyZWdfcmVwbGFjZV9jYWxsYmFjaycgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfZXJlZ19zZWFyY2gnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX2VyZWdfc2VhcmNoX2dldHBvcycgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfZXJlZ19zZWFyY2hfZ2V0cmVncycgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfZXJlZ19zZWFyY2hfaW5pdCcgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfZXJlZ19zZWFyY2hfcG9zJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9lcmVnX3NlYXJjaF9yZWdzJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9lcmVnX3NlYXJjaF9zZXRwb3MnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX2VyZWdpJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9lcmVnaV9yZXBsYWNlJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9nZXRfaW5mbycgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfaHR0cF9pbnB1dCcgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfaHR0cF9vdXRwdXQnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX2ludGVybmFsX2VuY29kaW5nJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9sYW5ndWFnZScgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfbGNmaXJzdCcgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfbGlzdF9lbmNvZGluZ3MnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX2x0cmltJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9vcmQnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX291dHB1dF9oYW5kbGVyJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9wYXJzZV9zdHInID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX3ByZWZlcnJlZF9taW1lX25hbWUnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX3JlZ2V4X2VuY29kaW5nJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9yZWdleF9zZXRfb3B0aW9ucycgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfcnRyaW0nID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX3NjcnViJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9zZW5kX21haWwnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX3NwbGl0JyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9zdHJfcGFkJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9zdHJfc3BsaXQnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX3N0cmN1dCcgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfc3RyaW13aWR0aCcgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfc3RyaXBvcycgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfc3RyaXN0cicgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfc3RybGVuJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9zdHJwb3MnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX3N0cnJjaHInID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX3N0cnJpY2hyJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9zdHJyaXBvcycgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfc3RycnBvcycgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfc3Ryc3RyJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9zdHJ0b2xvd2VyJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9zdHJ0b3VwcGVyJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl9zdHJ3aWR0aCcgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfc3Vic3RpdHV0ZV9jaGFyYWN0ZXInID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iX3N1YnN0cicgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJfc3Vic3RyX2NvdW50JyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl90cmltJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYl91Y2ZpcnN0JyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYmVyZWcnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iZXJlZ19tYXRjaCcgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJlcmVnX3JlcGxhY2UnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iZXJlZ19zZWFyY2gnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iZXJlZ19zZWFyY2hfZ2V0cG9zJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdtYmVyZWdfc2VhcmNoX2dldHJlZ3MnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iZXJlZ19zZWFyY2hfaW5pdCcgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJlcmVnX3NlYXJjaF9wb3MnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iZXJlZ19zZWFyY2hfcmVncycgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJlcmVnX3NlYXJjaF9zZXRwb3MnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iZXJlZ2knID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ21iZXJlZ2lfcmVwbGFjZScgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJyZWdleF9lbmNvZGluZycgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWJzcGxpdCcgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnbWNyeXB0X2NiYycgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfY2ZiJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ21jcnlwdF9jcmVhdGVfaXYnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWNyeXB0X2RlY3J5cHQnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWNyeXB0X2VjYicgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfZW5jX2dldF9hbGdvcml0aG1zX25hbWUnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWNyeXB0X2VuY19nZXRfYmxvY2tfc2l6ZScgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfZW5jX2dldF9pdl9zaXplJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ21jcnlwdF9lbmNfZ2V0X2tleV9zaXplJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ21jcnlwdF9lbmNfZ2V0X21vZGVzX25hbWUnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWNyeXB0X2VuY19nZXRfc3VwcG9ydGVkX2tleV9zaXplcycgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobScgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobV9tb2RlJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ21jcnlwdF9lbmNfaXNfYmxvY2tfbW9kZScgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfZW5jX3NlbGZfdGVzdCcgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfZW5jcnlwdCcgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfZ2VuZXJpYycgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfZ2VuZXJpY19kZWluaXQnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWNyeXB0X2dlbmVyaWNfZW5kJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ21jcnlwdF9nZW5lcmljX2luaXQnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWNyeXB0X2dldF9ibG9ja19zaXplJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ21jcnlwdF9nZXRfY2lwaGVyX25hbWUnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWNyeXB0X2dldF9pdl9zaXplJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ21jcnlwdF9nZXRfa2V5X3NpemUnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWNyeXB0X2xpc3RfYWxnb3JpdGhtcycgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfbGlzdF9tb2RlcycgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfbW9kdWxlX2Nsb3NlJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ21jcnlwdF9tb2R1bGVfZ2V0X2FsZ29fYmxvY2tfc2l6ZScgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfbW9kdWxlX2dldF9hbGdvX2tleV9zaXplJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ21jcnlwdF9tb2R1bGVfZ2V0X3N1cHBvcnRlZF9rZXlfc2l6ZXMnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWNyeXB0X21vZHVsZV9pc19ibG9ja19hbGdvcml0aG0nID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWNyeXB0X21vZHVsZV9pc19ibG9ja19hbGdvcml0aG1fbW9kZScgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdtY3J5cHRfbW9kdWxlX2lzX2Jsb2NrX21vZGUnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWNyeXB0X21vZHVsZV9vcGVuJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ21jcnlwdF9tb2R1bGVfc2VsZl90ZXN0JyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ21jcnlwdF9vZmInID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWQ1JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ21kNV9maWxlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ21kZWNyeXB0X2dlbmVyaWMnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnbWVtY2FjaGVfYWRkJyA9PiAnbWVtY2FjaGUvbWVtY2FjaGUuc3R1YicsICdtZW1jYWNoZV9hZGRfc2VydmVyJyA9PiAnbWVtY2FjaGUvbWVtY2FjaGUuc3R1YicsICdtZW1jYWNoZV9hcHBlbmQnID0+ICdtZW1jYWNoZS9tZW1jYWNoZS5zdHViJywgJ21lbWNhY2hlX2NhcycgPT4gJ21lbWNhY2hlL21lbWNhY2hlLnN0dWInLCAnbWVtY2FjaGVfY2xvc2UnID0+ICdtZW1jYWNoZS9tZW1jYWNoZS5zdHViJywgJ21lbWNhY2hlX2Nvbm5lY3QnID0+ICdtZW1jYWNoZS9tZW1jYWNoZS5zdHViJywgJ21lbWNhY2hlX2RlYnVnJyA9PiAnbWVtY2FjaGUvbWVtY2FjaGUuc3R1YicsICdtZW1jYWNoZV9kZWNyZW1lbnQnID0+ICdtZW1jYWNoZS9tZW1jYWNoZS5zdHViJywgJ21lbWNhY2hlX2RlbGV0ZScgPT4gJ21lbWNhY2hlL21lbWNhY2hlLnN0dWInLCAnbWVtY2FjaGVfZmx1c2gnID0+ICdtZW1jYWNoZS9tZW1jYWNoZS5zdHViJywgJ21lbWNhY2hlX2dldCcgPT4gJ21lbWNhY2hlL21lbWNhY2hlLnN0dWInLCAnbWVtY2FjaGVfZ2V0X2V4dGVuZGVkX3N0YXRzJyA9PiAnbWVtY2FjaGUvbWVtY2FjaGUuc3R1YicsICdtZW1jYWNoZV9nZXRfc2VydmVyX3N0YXR1cycgPT4gJ21lbWNhY2hlL21lbWNhY2hlLnN0dWInLCAnbWVtY2FjaGVfZ2V0X3N0YXRzJyA9PiAnbWVtY2FjaGUvbWVtY2FjaGUuc3R1YicsICdtZW1jYWNoZV9nZXRfdmVyc2lvbicgPT4gJ21lbWNhY2hlL21lbWNhY2hlLnN0dWInLCAnbWVtY2FjaGVfaW5jcmVtZW50JyA9PiAnbWVtY2FjaGUvbWVtY2FjaGUuc3R1YicsICdtZW1jYWNoZV9wY29ubmVjdCcgPT4gJ21lbWNhY2hlL21lbWNhY2hlLnN0dWInLCAnbWVtY2FjaGVfcHJlcGVuZCcgPT4gJ21lbWNhY2hlL21lbWNhY2hlLnN0dWInLCAnbWVtY2FjaGVfcmVwbGFjZScgPT4gJ21lbWNhY2hlL21lbWNhY2hlLnN0dWInLCAnbWVtY2FjaGVfc2V0JyA9PiAnbWVtY2FjaGUvbWVtY2FjaGUuc3R1YicsICdtZW1jYWNoZV9zZXRfY29tcHJlc3NfdGhyZXNob2xkJyA9PiAnbWVtY2FjaGUvbWVtY2FjaGUuc3R1YicsICdtZW1jYWNoZV9zZXRfZmFpbHVyZV9jYWxsYmFjaycgPT4gJ21lbWNhY2hlL21lbWNhY2hlLnN0dWInLCAnbWVtY2FjaGVfc2V0X3NlcnZlcl9wYXJhbXMnID0+ICdtZW1jYWNoZS9tZW1jYWNoZS5zdHViJywgJ21lbWluZm9fZHVtcCcgPT4gJ21lbWluZm8vbWVtaW5mby5zdHViJywgJ21lbW9yeV9nZXRfcGVha191c2FnZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdtZW1vcnlfZ2V0X3VzYWdlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ21lbW9yeV9yZXNldF9wZWFrX3VzYWdlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ21ldGFwaG9uZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdtZXRob2RfZXhpc3RzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnbWhhc2gnID0+ICdoYXNoL2hhc2guc3R1YicsICdtaGFzaF9jb3VudCcgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ21oYXNoX2dldF9ibG9ja19zaXplJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnbWhhc2hfZ2V0X2hhc2hfbmFtZScgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ21oYXNoX2tleWdlbl9zMmsnID0+ICdoYXNoL2hhc2guc3R1YicsICdtaWNyb3RpbWUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnbWltZV9jb250ZW50X3R5cGUnID0+ICdmaWxlaW5mby9maWxlaW5mby5zdHViJywgJ21pbicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdtaW5nX2tleXByZXNzJyA9PiAnbWluZy9taW5nLnN0dWInLCAnbWluZ19zZXRjdWJpY3RocmVzaG9sZCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ21pbmdfc2V0c2NhbGUnID0+ICdtaW5nL21pbmcuc3R1YicsICdtaW5nX3NldHN3ZmNvbXByZXNzaW9uJyA9PiAnbWluZy9taW5nLnN0dWInLCAnbWluZ191c2Vjb25zdGFudHMnID0+ICdtaW5nL21pbmcuc3R1YicsICdtaW5nX3VzZXN3ZnZlcnNpb24nID0+ICdtaW5nL21pbmcuc3R1YicsICdta2RpcicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdta3RpbWUnID0+ICdkYXRlL2RhdGUuc3R1YicsICdtb25leV9mb3JtYXQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnbW9uaXRvcl9jdXN0b21fZXZlbnQnID0+ICd6ZW5kL3plbmQuc3R1YicsICdtb25pdG9yX2h0dHBlcnJvcl9ldmVudCcgPT4gJ3plbmQvemVuZC5zdHViJywgJ21vbml0b3JfbGljZW5zZV9pbmZvJyA9PiAnemVuZC96ZW5kLnN0dWInLCAnbW9uaXRvcl9wYXNzX2Vycm9yJyA9PiAnemVuZC96ZW5kLnN0dWInLCAnbW9uaXRvcl9zZXRfYWdncmVnYXRpb25faGludCcgPT4gJ3plbmQvemVuZC5zdHViJywgJ21vdmVfdXBsb2FkZWRfZmlsZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdtcXNlcmllc19iYWNrJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdtcXNlcmllc19iZWdpbicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnbXFzZXJpZXNfY2xvc2UnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ21xc2VyaWVzX2NtaXQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ21xc2VyaWVzX2Nvbm4nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ21xc2VyaWVzX2Nvbm54JyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdtcXNlcmllc19kaXNjJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdtcXNlcmllc19nZXQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ21xc2VyaWVzX2lucScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnbXFzZXJpZXNfb3BlbicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnbXFzZXJpZXNfcHV0JyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdtcXNlcmllc19wdXQxJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdtcXNlcmllc19zZXQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ21xc2VyaWVzX3N0cmVycm9yJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdtc19HZXRFcnJvck9iaicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdtc19HZXRWZXJzaW9uJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ21zX0dldFZlcnNpb25JbnQnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnbXNfUmVzZXRFcnJvckxpc3QnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnbXNfVG9rZW5pemVNYXAnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnbXNfaW9nZXRTdGRvdXRCdWZmZXJCeXRlcycgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdtc19pb2dldHN0ZG91dGJ1ZmZlcnN0cmluZycgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdtc19pb2luc3RhbGxzdGRpbmZyb21idWZmZXInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnbXNfaW9pbnN0YWxsc3Rkb3V0dG9idWZmZXInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnbXNfaW9yZXNldGhhbmRsZXJzJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ21zX2lvc3RyaXBzdGRvdXRidWZmZXJjb250ZW50aGVhZGVycycgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdtc19pb3N0cmlwc3Rkb3V0YnVmZmVyY29udGVudHR5cGUnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnbXNnX2dldF9xdWV1ZScgPT4gJ3N5c3Ztc2cvc3lzdm1zZy5zdHViJywgJ21zZ19xdWV1ZV9leGlzdHMnID0+ICdzeXN2bXNnL3N5c3Ztc2cuc3R1YicsICdtc2dfcmVjZWl2ZScgPT4gJ3N5c3Ztc2cvc3lzdm1zZy5zdHViJywgJ21zZ19yZW1vdmVfcXVldWUnID0+ICdzeXN2bXNnL3N5c3Ztc2cuc3R1YicsICdtc2dfc2VuZCcgPT4gJ3N5c3Ztc2cvc3lzdm1zZy5zdHViJywgJ21zZ19zZXRfcXVldWUnID0+ICdzeXN2bXNnL3N5c3Ztc2cuc3R1YicsICdtc2dfc3RhdF9xdWV1ZScgPT4gJ3N5c3Ztc2cvc3lzdm1zZy5zdHViJywgJ21zZ2ZtdF9jcmVhdGUnID0+ICdpbnRsL2ludGwuc3R1YicsICdtc2dmbXRfZm9ybWF0JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbXNnZm10X2Zvcm1hdF9tZXNzYWdlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbXNnZm10X2dldF9lcnJvcl9jb2RlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbXNnZm10X2dldF9lcnJvcl9tZXNzYWdlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbXNnZm10X2dldF9sb2NhbGUnID0+ICdpbnRsL2ludGwuc3R1YicsICdtc2dmbXRfZ2V0X3BhdHRlcm4nID0+ICdpbnRsL2ludGwuc3R1YicsICdtc2dmbXRfcGFyc2UnID0+ICdpbnRsL2ludGwuc3R1YicsICdtc2dmbXRfcGFyc2VfbWVzc2FnZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ21zZ2ZtdF9zZXRfcGF0dGVybicgPT4gJ2ludGwvaW50bC5zdHViJywgJ21zZ3BhY2tfcGFjaycgPT4gJ21zZ3BhY2svbXNncGFjay5zdHViJywgJ21zZ3BhY2tfc2VyaWFsaXplJyA9PiAnbXNncGFjay9tc2dwYWNrLnN0dWInLCAnbXNncGFja191bnBhY2snID0+ICdtc2dwYWNrL21zZ3BhY2suc3R1YicsICdtc2dwYWNrX3Vuc2VyaWFsaXplJyA9PiAnbXNncGFjay9tc2dwYWNrLnN0dWInLCAnbXNzcWxfYmluZCcgPT4gJ21zc3FsL21zc3FsLnN0dWInLCAnbXNzcWxfY2xvc2UnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX2Nvbm5lY3QnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX2RhdGFfc2VlaycgPT4gJ21zc3FsL21zc3FsLnN0dWInLCAnbXNzcWxfZXhlY3V0ZScgPT4gJ21zc3FsL21zc3FsLnN0dWInLCAnbXNzcWxfZmV0Y2hfYXJyYXknID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX2ZldGNoX2Fzc29jJyA9PiAnbXNzcWwvbXNzcWwuc3R1YicsICdtc3NxbF9mZXRjaF9iYXRjaCcgPT4gJ21zc3FsL21zc3FsLnN0dWInLCAnbXNzcWxfZmV0Y2hfZmllbGQnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX2ZldGNoX29iamVjdCcgPT4gJ21zc3FsL21zc3FsLnN0dWInLCAnbXNzcWxfZmV0Y2hfcm93JyA9PiAnbXNzcWwvbXNzcWwuc3R1YicsICdtc3NxbF9maWVsZF9sZW5ndGgnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX2ZpZWxkX25hbWUnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX2ZpZWxkX3NlZWsnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX2ZpZWxkX3R5cGUnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX2ZyZWVfcmVzdWx0JyA9PiAnbXNzcWwvbXNzcWwuc3R1YicsICdtc3NxbF9mcmVlX3N0YXRlbWVudCcgPT4gJ21zc3FsL21zc3FsLnN0dWInLCAnbXNzcWxfZ2V0X2xhc3RfbWVzc2FnZScgPT4gJ21zc3FsL21zc3FsLnN0dWInLCAnbXNzcWxfZ3VpZF9zdHJpbmcnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX2luaXQnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX21pbl9lcnJvcl9zZXZlcml0eScgPT4gJ21zc3FsL21zc3FsLnN0dWInLCAnbXNzcWxfbWluX21lc3NhZ2Vfc2V2ZXJpdHknID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX25leHRfcmVzdWx0JyA9PiAnbXNzcWwvbXNzcWwuc3R1YicsICdtc3NxbF9udW1fZmllbGRzJyA9PiAnbXNzcWwvbXNzcWwuc3R1YicsICdtc3NxbF9udW1fcm93cycgPT4gJ21zc3FsL21zc3FsLnN0dWInLCAnbXNzcWxfcGNvbm5lY3QnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX3F1ZXJ5JyA9PiAnbXNzcWwvbXNzcWwuc3R1YicsICdtc3NxbF9yZXN1bHQnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX3Jvd3NfYWZmZWN0ZWQnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ21zc3FsX3NlbGVjdF9kYicgPT4gJ21zc3FsL21zc3FsLnN0dWInLCAnbXRfZ2V0cmFuZG1heCcgPT4gJ3JhbmRvbS9yYW5kb20uc3R1YicsICdtdF9yYW5kJyA9PiAncmFuZG9tL3JhbmRvbS5zdHViJywgJ210X3NyYW5kJyA9PiAncmFuZG9tL3JhbmRvbS5zdHViJywgJ215c3FsJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9hZmZlY3RlZF9yb3dzJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9jbGllbnRfZW5jb2RpbmcnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2Nsb3NlJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9jb25uZWN0JyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9kYXRhX3NlZWsnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2RiX25hbWUnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2RiX3F1ZXJ5JyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9kYm5hbWUnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2Vycm5vJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9lcnJvcicgPT4gJ215c3FsL215c3FsLnN0dWInLCAnbXlzcWxfZXNjYXBlX3N0cmluZycgPT4gJ215c3FsL215c3FsLnN0dWInLCAnbXlzcWxfZmV0Y2hfYXJyYXknID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2ZldGNoX2Fzc29jJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9mZXRjaF9maWVsZCcgPT4gJ215c3FsL215c3FsLnN0dWInLCAnbXlzcWxfZmV0Y2hfbGVuZ3RocycgPT4gJ215c3FsL215c3FsLnN0dWInLCAnbXlzcWxfZmV0Y2hfb2JqZWN0JyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9mZXRjaF9yb3cnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2ZpZWxkX2ZsYWdzJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9maWVsZF9sZW4nID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2ZpZWxkX25hbWUnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2ZpZWxkX3NlZWsnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2ZpZWxkX3RhYmxlJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9maWVsZF90eXBlJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9maWVsZGZsYWdzJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9maWVsZGxlbicgPT4gJ215c3FsL215c3FsLnN0dWInLCAnbXlzcWxfZmllbGRuYW1lJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9maWVsZHRhYmxlJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9maWVsZHR5cGUnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2ZyZWVfcmVzdWx0JyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9mcmVlcmVzdWx0JyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9nZXRfY2xpZW50X2luZm8nID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2dldF9ob3N0X2luZm8nID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2dldF9wcm90b19pbmZvJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9nZXRfc2VydmVyX2luZm8nID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2luZm8nID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2luc2VydF9pZCcgPT4gJ215c3FsL215c3FsLnN0dWInLCAnbXlzcWxfbGlzdF9kYnMnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2xpc3RfZmllbGRzJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9saXN0X3Byb2Nlc3NlcycgPT4gJ215c3FsL215c3FsLnN0dWInLCAnbXlzcWxfbGlzdF90YWJsZXMnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2xpc3RkYnMnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2xpc3RmaWVsZHMnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX2xpc3R0YWJsZXMnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX251bV9maWVsZHMnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX251bV9yb3dzJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9udW1maWVsZHMnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX251bXJvd3MnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX3Bjb25uZWN0JyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9waW5nJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9xdWVyeScgPT4gJ215c3FsL215c3FsLnN0dWInLCAnbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9yZXN1bHQnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX3NlbGVjdF9kYicgPT4gJ215c3FsL215c3FsLnN0dWInLCAnbXlzcWxfc2VsZWN0ZGInID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX3NldF9jaGFyc2V0JyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF9zdGF0JyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF90YWJsZV9uYW1lJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdteXNxbF90YWJsZW5hbWUnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ215c3FsX3RocmVhZF9pZCcgPT4gJ215c3FsL215c3FsLnN0dWInLCAnbXlzcWxfdW5idWZmZXJlZF9xdWVyeScgPT4gJ215c3FsL215c3FsLnN0dWInLCAnbXlzcWxfeGRldmFwaVxcZXhwcmVzc2lvbicgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ215c3FsX3hkZXZhcGlcXGdldFNlc3Npb24nID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdteXNxbGlfYWZmZWN0ZWRfcm93cycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfYXV0b2NvbW1pdCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfYmVnaW5fdHJhbnNhY3Rpb24nID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2JpbmRfcGFyYW0nID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2JpbmRfcmVzdWx0JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9jaGFuZ2VfdXNlcicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfY2hhcmFjdGVyX3NldF9uYW1lJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9jbGllbnRfZW5jb2RpbmcnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2Nsb3NlJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9jb21taXQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2Nvbm5lY3QnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2Nvbm5lY3RfZXJybm8nID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2Nvbm5lY3RfZXJyb3InID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2RhdGFfc2VlaycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfZGVidWcnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2R1bXBfZGVidWdfaW5mbycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfZXJybm8nID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2Vycm9yJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9lcnJvcl9saXN0JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9lc2NhcGVfc3RyaW5nJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9leGVjdXRlJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9leGVjdXRlX3F1ZXJ5JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9mZXRjaCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfZmV0Y2hfYWxsJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9mZXRjaF9hcnJheScgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfZmV0Y2hfYXNzb2MnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2ZldGNoX2NvbHVtbicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfZmV0Y2hfZmllbGQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2ZldGNoX2ZpZWxkX2RpcmVjdCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfZmV0Y2hfZmllbGRzJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9mZXRjaF9sZW5ndGhzJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9mZXRjaF9vYmplY3QnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2ZldGNoX3JvdycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfZmllbGRfY291bnQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2ZpZWxkX3NlZWsnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2ZpZWxkX3RlbGwnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2ZyZWVfcmVzdWx0JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9nZXRfY2FjaGVfc3RhdHMnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2dldF9jaGFyc2V0JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9nZXRfY2xpZW50X2luZm8nID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2dldF9jbGllbnRfc3RhdHMnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2dldF9jbGllbnRfdmVyc2lvbicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfZ2V0X2Nvbm5lY3Rpb25fc3RhdHMnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2dldF9ob3N0X2luZm8nID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2dldF9saW5rc19zdGF0cycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfZ2V0X21ldGFkYXRhJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9nZXRfcHJvdG9faW5mbycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfZ2V0X3NlcnZlcl9pbmZvJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9nZXRfc2VydmVyX3ZlcnNpb24nID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX2dldF93YXJuaW5ncycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfaW5mbycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfaW5pdCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfaW5zZXJ0X2lkJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9raWxsJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9tb3JlX3Jlc3VsdHMnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX211bHRpX3F1ZXJ5JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9uZXh0X3Jlc3VsdCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfbnVtX2ZpZWxkcycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfbnVtX3Jvd3MnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX29wdGlvbnMnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3BhcmFtX2NvdW50JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9waW5nJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9wb2xsJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9wcmVwYXJlJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9xdWVyeScgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfcmVhbF9jb25uZWN0JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9yZWFsX2VzY2FwZV9zdHJpbmcnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3JlYWxfcXVlcnknID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3JlYXBfYXN5bmNfcXVlcnknID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3JlZnJlc2gnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3JlbGVhc2Vfc2F2ZXBvaW50JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9yZXBvcnQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3JvbGxiYWNrJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zYXZlcG9pbnQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3NlbGVjdF9kYicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfc2VuZF9sb25nX2RhdGEnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3NldF9jaGFyc2V0JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zZXRfbG9jYWxfaW5maWxlX2RlZmF1bHQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3NldF9sb2NhbF9pbmZpbGVfaGFuZGxlcicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfc2V0X29wdCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfc3Fsc3RhdGUnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3NzbF9zZXQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3N0YXQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3N0bXRfYWZmZWN0ZWRfcm93cycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfc3RtdF9hdHRyX2dldCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfc3RtdF9hdHRyX3NldCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfc3RtdF9iaW5kX3BhcmFtJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zdG10X2JpbmRfcmVzdWx0JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zdG10X2Nsb3NlJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zdG10X2RhdGFfc2VlaycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfc3RtdF9lcnJubycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfc3RtdF9lcnJvcicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfc3RtdF9lcnJvcl9saXN0JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zdG10X2V4ZWN1dGUnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3N0bXRfZmV0Y2gnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3N0bXRfZmllbGRfY291bnQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3N0bXRfZnJlZV9yZXN1bHQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3N0bXRfZ2V0X3Jlc3VsdCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfc3RtdF9nZXRfd2FybmluZ3MnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3N0bXRfaW5pdCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfc3RtdF9pbnNlcnRfaWQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3N0bXRfbW9yZV9yZXN1bHRzJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zdG10X25leHRfcmVzdWx0JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zdG10X251bV9yb3dzJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zdG10X3BhcmFtX2NvdW50JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zdG10X3ByZXBhcmUnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3N0bXRfcmVzZXQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3N0bXRfcmVzdWx0X21ldGFkYXRhJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zdG10X3NlbmRfbG9uZ19kYXRhJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zdG10X3NxbHN0YXRlJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV9zdG10X3N0b3JlX3Jlc3VsdCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdteXNxbGlfc3RvcmVfcmVzdWx0JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV90aHJlYWRfaWQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnbXlzcWxpX3RocmVhZF9zYWZlJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV91c2VfcmVzdWx0JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ215c3FsaV93YXJuaW5nX2NvdW50JyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ25hdGNhc2Vzb3J0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ25hdHNvcnQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnbmN1cnNlc19hZGRjaCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfYWRkY2huc3RyJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19hZGRjaHN0cicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfYWRkbnN0cicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfYWRkc3RyJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19hc3N1bWVfZGVmYXVsdF9jb2xvcnMnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2F0dHJvZmYnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2F0dHJvbicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfYXR0cnNldCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfYmF1ZHJhdGUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2JlZXAnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2JrZ2QnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2JrZ2RzZXQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2JvcmRlcicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfYm90dG9tX3BhbmVsJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19jYW5fY2hhbmdlX2NvbG9yJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19jYnJlYWsnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2NsZWFyJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19jbHJ0b2JvdCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfY2xydG9lb2wnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2NvbG9yX2NvbnRlbnQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2NvbG9yX3NldCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfY3Vyc19zZXQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2RlZl9wcm9nX21vZGUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2RlZl9zaGVsbF9tb2RlJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19kZWZpbmVfa2V5JyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19kZWxfcGFuZWwnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2RlbGF5X291dHB1dCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfZGVsY2gnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2RlbGV0ZWxuJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19kZWx3aW4nID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2RvdXBkYXRlJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19lY2hvJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19lY2hvY2hhcicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfZW5kJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19lcmFzZScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfZXJhc2VjaGFyJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19maWx0ZXInID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2ZsYXNoJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19mbHVzaGlucCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfZ2V0Y2gnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2dldG1heHl4JyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19nZXRtb3VzZScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfZ2V0eXgnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2hhbGZkZWxheScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfaGFzX2NvbG9ycycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfaGFzX2ljJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19oYXNfaWwnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2hhc19rZXknID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2hpZGVfcGFuZWwnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2hsaW5lJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19pbmNoJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19pbml0JyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19pbml0X2NvbG9yJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19pbml0X3BhaXInID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2luc2NoJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19pbnNkZWxsbicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfaW5zZXJ0bG4nID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2luc3N0cicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfaW5zdHInID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX2lzZW5kd2luJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19rZXlvaycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfa2V5cGFkJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19raWxsY2hhcicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfbG9uZ25hbWUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX21ldGEnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX21vdXNlX3RyYWZvJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19tb3VzZWludGVydmFsJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19tb3VzZW1hc2snID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX21vdmUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX21vdmVfcGFuZWwnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX212YWRkY2gnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX212YWRkY2huc3RyJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19tdmFkZGNoc3RyJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19tdmFkZG5zdHInID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX212YWRkc3RyJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19tdmN1cicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfbXZkZWxjaCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfbXZnZXRjaCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfbXZobGluZScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfbXZpbmNoJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19tdndhZGRzdHInID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX25hcG1zJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19uZXdfcGFuZWwnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX25ld3BhZCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfbmV3d2luJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19ubCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfbm9jYnJlYWsnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX25vZWNobycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfbm9ubCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfbm9xaWZsdXNoJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19ub3JhdycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfcGFpcl9jb250ZW50JyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19wYW5lbF9hYm92ZScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfcGFuZWxfYmVsb3cnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3BhbmVsX3dpbmRvdycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfcG5vdXRyZWZyZXNoJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19wcmVmcmVzaCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfcHV0cCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfcWlmbHVzaCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfcmF3JyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19yZWZyZXNoJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19yZXBsYWNlX3BhbmVsJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19yZXNldF9wcm9nX21vZGUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3Jlc2V0X3NoZWxsX21vZGUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3Jlc2V0dHknID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3NhdmV0dHknID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3Njcl9kdW1wJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19zY3JfaW5pdCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfc2NyX3Jlc3RvcmUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3Njcl9zZXQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3NjcmwnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3Nob3dfcGFuZWwnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3Nsa19hdHRyJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19zbGtfYXR0cm9mZicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfc2xrX2F0dHJvbicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfc2xrX2F0dHJzZXQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3Nsa19jbGVhcicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfc2xrX2NvbG9yJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19zbGtfaW5pdCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfc2xrX25vdXRyZWZyZXNoJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19zbGtfcmVmcmVzaCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfc2xrX3Jlc3RvcmUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3Nsa19zZXQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3Nsa190b3VjaCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfc3RhbmRlbmQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3N0YW5kb3V0JyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc19zdGFydF9jb2xvcicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfdGVybWF0dHJzJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc190ZXJtbmFtZScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfdGltZW91dCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfdG9wX3BhbmVsJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc190eXBlYWhlYWQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3VuZ2V0Y2gnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3VuZ2V0bW91c2UnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3VwZGF0ZV9wYW5lbHMnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3VzZV9kZWZhdWx0X2NvbG9ycycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfdXNlX2VudicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfdXNlX2V4dGVuZGVkX25hbWVzJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc192aWRhdHRyJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc192bGluZScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfd2FkZGNoJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc193YWRkc3RyJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc193YXR0cm9mZicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfd2F0dHJvbicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfd2F0dHJzZXQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3dib3JkZXInID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3djbGVhcicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfd2NvbG9yX3NldCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfd2VyYXNlJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc193Z2V0Y2gnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3dobGluZScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfd21vdXNlX3RyYWZvJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc193bW92ZScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfd25vdXRyZWZyZXNoJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc193cmVmcmVzaCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25jdXJzZXNfd3N0YW5kZW5kJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnbmN1cnNlc193c3RhbmRvdXQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICduY3Vyc2VzX3d2bGluZScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ25ldF9nZXRfaW50ZXJmYWNlcycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICduZXdyZWxpY19hY2NlcHRfZGlzdHJpYnV0ZWRfdHJhY2VfaGVhZGVycycgPT4gJ25ld3JlbGljL25ld3JlbGljLnN0dWInLCAnbmV3cmVsaWNfYWNjZXB0X2Rpc3RyaWJ1dGVkX3RyYWNlX3BheWxvYWQnID0+ICduZXdyZWxpYy9uZXdyZWxpYy5zdHViJywgJ25ld3JlbGljX2FjY2VwdF9kaXN0cmlidXRlZF90cmFjZV9wYXlsb2FkX2h0dHBzYWZlJyA9PiAnbmV3cmVsaWMvbmV3cmVsaWMuc3R1YicsICduZXdyZWxpY19hZGRfY3VzdG9tX3BhcmFtZXRlcicgPT4gJ25ld3JlbGljL25ld3JlbGljLnN0dWInLCAnbmV3cmVsaWNfYWRkX2N1c3RvbV9zcGFuX3BhcmFtZXRlcicgPT4gJ25ld3JlbGljL25ld3JlbGljLnN0dWInLCAnbmV3cmVsaWNfYWRkX2N1c3RvbV90cmFjZXInID0+ICduZXdyZWxpYy9uZXdyZWxpYy5zdHViJywgJ25ld3JlbGljX2JhY2tncm91bmRfam9iJyA9PiAnbmV3cmVsaWMvbmV3cmVsaWMuc3R1YicsICduZXdyZWxpY19jYXB0dXJlX3BhcmFtcycgPT4gJ25ld3JlbGljL25ld3JlbGljLnN0dWInLCAnbmV3cmVsaWNfY3JlYXRlX2Rpc3RyaWJ1dGVkX3RyYWNlX3BheWxvYWQnID0+ICduZXdyZWxpYy9uZXdyZWxpYy5zdHViJywgJ25ld3JlbGljX2N1c3RvbV9tZXRyaWMnID0+ICduZXdyZWxpYy9uZXdyZWxpYy5zdHViJywgJ25ld3JlbGljX2Rpc2FibGVfYXV0b3J1bScgPT4gJ25ld3JlbGljL25ld3JlbGljLnN0dWInLCAnbmV3cmVsaWNfZW5hYmxlX3BhcmFtcycgPT4gJ25ld3JlbGljL25ld3JlbGljLnN0dWInLCAnbmV3cmVsaWNfZW5kX29mX3RyYW5zYWN0aW9uJyA9PiAnbmV3cmVsaWMvbmV3cmVsaWMuc3R1YicsICduZXdyZWxpY19lbmRfdHJhbnNhY3Rpb24nID0+ICduZXdyZWxpYy9uZXdyZWxpYy5zdHViJywgJ25ld3JlbGljX2dldF9icm93c2VyX3RpbWluZ19mb290ZXInID0+ICduZXdyZWxpYy9uZXdyZWxpYy5zdHViJywgJ25ld3JlbGljX2dldF9icm93c2VyX3RpbWluZ19oZWFkZXInID0+ICduZXdyZWxpYy9uZXdyZWxpYy5zdHViJywgJ25ld3JlbGljX2dldF9saW5raW5nX21ldGFkYXRhJyA9PiAnbmV3cmVsaWMvbmV3cmVsaWMuc3R1YicsICduZXdyZWxpY19nZXRfdHJhY2VfbWV0YWRhdGEnID0+ICduZXdyZWxpYy9uZXdyZWxpYy5zdHViJywgJ25ld3JlbGljX2lnbm9yZV9hcGRleCcgPT4gJ25ld3JlbGljL25ld3JlbGljLnN0dWInLCAnbmV3cmVsaWNfaWdub3JlX3RyYW5zYWN0aW9uJyA9PiAnbmV3cmVsaWMvbmV3cmVsaWMuc3R1YicsICduZXdyZWxpY19pbnNlcnRfZGlzdHJpYnV0ZWRfdHJhY2VfaGVhZGVycycgPT4gJ25ld3JlbGljL25ld3JlbGljLnN0dWInLCAnbmV3cmVsaWNfaXNfc2FtcGxlZCcgPT4gJ25ld3JlbGljL25ld3JlbGljLnN0dWInLCAnbmV3cmVsaWNfbmFtZV90cmFuc2FjdGlvbicgPT4gJ25ld3JlbGljL25ld3JlbGljLnN0dWInLCAnbmV3cmVsaWNfbm90aWNlX2Vycm9yJyA9PiAnbmV3cmVsaWMvbmV3cmVsaWMuc3R1YicsICduZXdyZWxpY19yZWNvcmRfY3VzdG9tX2V2ZW50JyA9PiAnbmV3cmVsaWMvbmV3cmVsaWMuc3R1YicsICduZXdyZWxpY19yZWNvcmRfZGF0YXN0b3JlX3NlZ21lbnQnID0+ICduZXdyZWxpYy9uZXdyZWxpYy5zdHViJywgJ25ld3JlbGljX3NldF9hcHBuYW1lJyA9PiAnbmV3cmVsaWMvbmV3cmVsaWMuc3R1YicsICduZXdyZWxpY19zZXRfdXNlcl9hdHRyaWJ1dGVzJyA9PiAnbmV3cmVsaWMvbmV3cmVsaWMuc3R1YicsICduZXdyZWxpY19zZXRfdXNlcl9pZCcgPT4gJ25ld3JlbGljL25ld3JlbGljLnN0dWInLCAnbmV3cmVsaWNfc3RhcnRfdHJhbnNhY3Rpb24nID0+ICduZXdyZWxpYy9uZXdyZWxpYy5zdHViJywgJ25leHQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnbmdldHRleHQnID0+ICdnZXR0ZXh0L2dldHRleHQuc3R1YicsICdubDJicicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICdubF9sYW5naW5mbycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdub3JtYWxpemVyX2dldF9yYXdfZGVjb21wb3NpdGlvbicgPT4gJ2ludGwvaW50bC5zdHViJywgJ25vcm1hbGl6ZXJfaXNfbm9ybWFsaXplZCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ25vcm1hbGl6ZXJfbm9ybWFsaXplJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbnVtYmVyX2Zvcm1hdCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdudW1mbXRfY3JlYXRlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbnVtZm10X2Zvcm1hdCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ251bWZtdF9mb3JtYXRfY3VycmVuY3knID0+ICdpbnRsL2ludGwuc3R1YicsICdudW1mbXRfZ2V0X2F0dHJpYnV0ZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ251bWZtdF9nZXRfZXJyb3JfY29kZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ251bWZtdF9nZXRfZXJyb3JfbWVzc2FnZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ251bWZtdF9nZXRfbG9jYWxlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbnVtZm10X2dldF9wYXR0ZXJuJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbnVtZm10X2dldF9zeW1ib2wnID0+ICdpbnRsL2ludGwuc3R1YicsICdudW1mbXRfZ2V0X3RleHRfYXR0cmlidXRlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbnVtZm10X3BhcnNlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbnVtZm10X3BhcnNlX2N1cnJlbmN5JyA9PiAnaW50bC9pbnRsLnN0dWInLCAnbnVtZm10X3NldF9hdHRyaWJ1dGUnID0+ICdpbnRsL2ludGwuc3R1YicsICdudW1mbXRfc2V0X3BhdHRlcm4nID0+ICdpbnRsL2ludGwuc3R1YicsICdudW1mbXRfc2V0X3N5bWJvbCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ251bWZtdF9zZXRfdGV4dF9hdHRyaWJ1dGUnID0+ICdpbnRsL2ludGwuc3R1YicsICdvYXV0aF9nZXRfc2JzJyA9PiAnb2F1dGgvb2F1dGguc3R1YicsICdvYXV0aF91cmxlbmNvZGUnID0+ICdvYXV0aC9vYXV0aC5zdHViJywgJ29iX2NsZWFuJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ29iX2RlZmxhdGVoYW5kbGVyJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnb2JfZW5kX2NsZWFuJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ29iX2VuZF9mbHVzaCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdvYl9ldGFnaGFuZGxlcicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ29iX2ZsdXNoJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ29iX2dldF9jbGVhbicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdvYl9nZXRfY29udGVudHMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnb2JfZ2V0X2ZsdXNoJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ29iX2dldF9sZW5ndGgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnb2JfZ2V0X2xldmVsJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ29iX2dldF9zdGF0dXMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnb2JfZ3poYW5kbGVyJyA9PiAnemxpYi96bGliLnN0dWInLCAnb2JfaWNvbnZfaGFuZGxlcicgPT4gJ2ljb252L2ljb252LnN0dWInLCAnb2JfaW1wbGljaXRfZmx1c2gnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAnb2JfaW5mbGF0ZWhhbmRsZXInID0+ICdodHRwL2h0dHAuc3R1YicsICdvYl9saXN0X2hhbmRsZXJzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ29iX3N0YXJ0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ29iX3RpZHloYW5kbGVyJyA9PiAndGlkeS90aWR5LnN0dWInLCAnb2NpX2JpbmRfYXJyYXlfYnlfbmFtZScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9iaW5kX2J5X25hbWUnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfY2FuY2VsJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2NsaWVudF92ZXJzaW9uJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2Nsb3NlJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2NvbW1pdCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9jb25uZWN0JyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2RlZmluZV9ieV9uYW1lJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2Vycm9yJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2V4ZWN1dGUnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfZmV0Y2gnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfZmV0Y2hfYWxsJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2ZldGNoX2FycmF5JyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2ZldGNoX2Fzc29jJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2ZldGNoX29iamVjdCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9mZXRjaF9yb3cnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfZmllbGRfaXNfbnVsbCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9maWVsZF9uYW1lJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2ZpZWxkX3ByZWNpc2lvbicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9maWVsZF9zY2FsZScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9maWVsZF9zaXplJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2ZpZWxkX3R5cGUnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfZmllbGRfdHlwZV9yYXcnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfZnJlZV9jdXJzb3InID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfZnJlZV9kZXNjcmlwdG9yJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2ZyZWVfc3RhdGVtZW50JyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX2dldF9pbXBsaWNpdF9yZXN1bHRzZXQnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfaW50ZXJuYWxfZGVidWcnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfbG9iX2NvcHknID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfbG9iX2lzX2VxdWFsJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX25ld19jb2xsZWN0aW9uJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX25ld19jb25uZWN0JyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX25ld19jdXJzb3InID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfbmV3X2Rlc2NyaXB0b3InID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfbnVtX2ZpZWxkcycgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9udW1fcm93cycgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9wYXJzZScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9wYXNzd29yZF9jaGFuZ2UnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfcGNvbm5lY3QnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfcmVnaXN0ZXJfdGFmX2NhbGxiYWNrJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX3Jlc3VsdCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9yb2xsYmFjaycgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9zZXJ2ZXJfdmVyc2lvbicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9zZXRfYWN0aW9uJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX3NldF9jYWxsX3RpbWVvdXQnID0+ICdvY2k4L29jaTh2My5zdHViJywgJ29jaV9zZXRfY2xpZW50X2lkZW50aWZpZXInID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfc2V0X2NsaWVudF9pbmZvJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX3NldF9kYl9vcGVyYXRpb24nID0+ICdvY2k4L29jaTh2My5zdHViJywgJ29jaV9zZXRfZWRpdGlvbicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV9zZXRfbW9kdWxlX25hbWUnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lfc2V0X3ByZWZldGNoJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpX3NldF9wcmVmZXRjaF9sb2InID0+ICdvY2k4L29jaTh2My5zdHViJywgJ29jaV9zdGF0ZW1lbnRfdHlwZScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaV91bnJlZ2lzdGVyX3RhZl9jYWxsYmFjaycgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaWJpbmRieW5hbWUnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2ljYW5jZWwnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2ljbG9zZWxvYicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaWNvbGxhcHBlbmQnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2ljb2xsYXNzaWduJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpY29sbGFzc2lnbmVsZW0nID0+ICdvY2k4L29jaTguc3R1YicsICdvY2ljb2xsZ2V0ZWxlbScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaWNvbGxtYXgnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2ljb2xsc2l6ZScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaWNvbGx0cmltJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpY29sdW1uaXNudWxsJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpY29sdW1ubmFtZScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaWNvbHVtbnByZWNpc2lvbicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaWNvbHVtbnNjYWxlJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpY29sdW1uc2l6ZScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaWNvbHVtbnR5cGUnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2ljb2x1bW50eXBlcmF3JyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpY29tbWl0JyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpZGVmaW5lYnluYW1lJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpZXJyb3InID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lleGVjdXRlJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpZmV0Y2gnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lmZXRjaGludG8nID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lmZXRjaHN0YXRlbWVudCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaWZyZWVjb2xsZWN0aW9uJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpZnJlZWN1cnNvcicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaWZyZWVkZXNjJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpZnJlZXN0YXRlbWVudCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaWludGVybmFsZGVidWcnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lsb2FkbG9iJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpbG9nb2ZmJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpbG9nb24nID0+ICdvY2k4L29jaTguc3R1YicsICdvY2luZXdjb2xsZWN0aW9uJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpbmV3Y3Vyc29yJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpbmV3ZGVzY3JpcHRvcicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaW5sb2dvbicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaW51bWNvbHMnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lwYXJzZScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaXBhc3N3b3JkY2hhbmdlJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpcGxvZ29uJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2NpcmVzdWx0JyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2Npcm9sbGJhY2snID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lyb3djb3VudCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaXNhdmVsb2InID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lzYXZlbG9iZmlsZScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaXNlcnZlcnZlcnNpb24nID0+ICdvY2k4L29jaTguc3R1YicsICdvY2lzZXRwcmVmZXRjaCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaXN0YXRlbWVudHR5cGUnID0+ICdvY2k4L29jaTguc3R1YicsICdvY2l3cml0ZWxvYnRvZmlsZScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ29jaXdyaXRldGVtcG9yYXJ5bG9iJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnb2N0ZGVjJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ29kYmNfYXV0b2NvbW1pdCcgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfYmlubW9kZScgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfY2xvc2UnID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX2Nsb3NlX2FsbCcgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfY29sdW1ucHJpdmlsZWdlcycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfY29sdW1ucycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfY29tbWl0JyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19jb25uZWN0JyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19jb25uZWN0aW9uX3N0cmluZ19pc19xdW90ZWQnID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX2Nvbm5lY3Rpb25fc3RyaW5nX3F1b3RlJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19jb25uZWN0aW9uX3N0cmluZ19zaG91bGRfcXVvdGUnID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX2N1cnNvcicgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfZGF0YV9zb3VyY2UnID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX2RvJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19lcnJvcicgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfZXJyb3Jtc2cnID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX2V4ZWMnID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX2V4ZWN1dGUnID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX2ZldGNoX2FycmF5JyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19mZXRjaF9pbnRvJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19mZXRjaF9vYmplY3QnID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX2ZldGNoX3JvdycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfZmllbGRfbGVuJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19maWVsZF9uYW1lJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19maWVsZF9udW0nID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX2ZpZWxkX3ByZWNpc2lvbicgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfZmllbGRfc2NhbGUnID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX2ZpZWxkX3R5cGUnID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX2ZvcmVpZ25rZXlzJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19mcmVlX3Jlc3VsdCcgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfZ2V0dHlwZWluZm8nID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX2xvbmdyZWFkbGVuJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19uZXh0X3Jlc3VsdCcgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfbnVtX2ZpZWxkcycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfbnVtX3Jvd3MnID0+ICdvZGJjL29kYmMuc3R1YicsICdvZGJjX3Bjb25uZWN0JyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19wcmVwYXJlJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19wcmltYXJ5a2V5cycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfcHJvY2VkdXJlY29sdW1ucycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfcHJvY2VkdXJlcycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfcmVzdWx0JyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19yZXN1bHRfYWxsJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19yb2xsYmFjaycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfc2V0b3B0aW9uJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY19zcGVjaWFsY29sdW1ucycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfc3RhdGlzdGljcycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ29kYmNfdGFibGVwcml2aWxlZ2VzJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnb2RiY190YWJsZXMnID0+ICdvZGJjL29kYmMuc3R1YicsICdvcGNhY2hlX2NvbXBpbGVfZmlsZScgPT4gJ1plbmQgT1BjYWNoZS9PUGNhY2hlLnN0dWInLCAnb3BjYWNoZV9nZXRfY29uZmlndXJhdGlvbicgPT4gJ1plbmQgT1BjYWNoZS9PUGNhY2hlLnN0dWInLCAnb3BjYWNoZV9nZXRfc3RhdHVzJyA9PiAnWmVuZCBPUGNhY2hlL09QY2FjaGUuc3R1YicsICdvcGNhY2hlX2ludmFsaWRhdGUnID0+ICdaZW5kIE9QY2FjaGUvT1BjYWNoZS5zdHViJywgJ29wY2FjaGVfaXNfc2NyaXB0X2NhY2hlZCcgPT4gJ1plbmQgT1BjYWNoZS9PUGNhY2hlLnN0dWInLCAnb3BjYWNoZV9yZXNldCcgPT4gJ1plbmQgT1BjYWNoZS9PUGNhY2hlLnN0dWInLCAnb3BlbmRpcicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdvcGVubG9nJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ29wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aCcgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfY2lwaGVyX2tleV9sZW5ndGgnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX2Ntc19kZWNyeXB0JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9jbXNfZW5jcnlwdCcgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfY21zX3JlYWQnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX2Ntc19zaWduJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9jbXNfdmVyaWZ5JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9jc3JfZXhwb3J0JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGUnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX2Nzcl9nZXRfcHVibGljX2tleScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfY3NyX2dldF9zdWJqZWN0JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9jc3JfbmV3JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9jc3Jfc2lnbicgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfZGVjcnlwdCcgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfZGhfY29tcHV0ZV9rZXknID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX2RpZ2VzdCcgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfZW5jcnlwdCcgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfZXJyb3Jfc3RyaW5nJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9mcmVlX2tleScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfZ2V0X2NlcnRfbG9jYXRpb25zJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9nZXRfY2lwaGVyX21ldGhvZHMnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX2dldF9jdXJ2ZV9uYW1lcycgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfZ2V0X21kX21ldGhvZHMnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX2dldF9wcml2YXRla2V5JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9nZXRfcHVibGlja2V5JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9vcGVuJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9wYmtkZjInID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3BrY3MxMl9leHBvcnQnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3BrY3MxMl9leHBvcnRfdG9fZmlsZScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfcGtjczEyX3JlYWQnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3BrY3M3X2RlY3J5cHQnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3BrY3M3X2VuY3J5cHQnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3BrY3M3X3JlYWQnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3BrY3M3X3NpZ24nID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3BrY3M3X3ZlcmlmeScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfcGtleV9kZXJpdmUnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3BrZXlfZXhwb3J0JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9wa2V5X2ZyZWUnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3BrZXlfZ2V0X2RldGFpbHMnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3BrZXlfZ2V0X3ByaXZhdGUnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYycgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfcGtleV9uZXcnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3ByaXZhdGVfZGVjcnlwdCcgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfcHJpdmF0ZV9lbmNyeXB0JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9wdWJsaWNfZGVjcnlwdCcgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfcHVibGljX2VuY3J5cHQnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3NlYWwnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3NpZ24nID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3Nwa2lfZXhwb3J0JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9zcGtpX2V4cG9ydF9jaGFsbGVuZ2UnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3Nwa2lfbmV3JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF9zcGtpX3ZlcmlmeScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfdmVyaWZ5JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF94NTA5X2NoZWNrX3ByaXZhdGVfa2V5JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF94NTA5X2NoZWNrcHVycG9zZScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfeDUwOV9leHBvcnQnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3g1MDlfZXhwb3J0X3RvX2ZpbGUnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3g1MDlfZmluZ2VycHJpbnQnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdvcGVuc3NsX3g1MDlfZnJlZScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfeDUwOV9wYXJzZScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29wZW5zc2xfeDUwOV9yZWFkJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnb3BlbnNzbF94NTA5X3ZlcmlmeScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ29yZCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdvdXRwdXRfYWRkX3Jld3JpdGVfdmFyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ291dHB1dF9jYWNoZV9kaXNhYmxlJyA9PiAnemVuZC96ZW5kLnN0dWInLCAnb3V0cHV0X2NhY2hlX2Rpc2FibGVfY29tcHJlc3Npb24nID0+ICd6ZW5kL3plbmQuc3R1YicsICdvdXRwdXRfY2FjaGVfZXhpc3RzJyA9PiAnemVuZC96ZW5kLnN0dWInLCAnb3V0cHV0X2NhY2hlX2ZldGNoJyA9PiAnemVuZC96ZW5kLnN0dWInLCAnb3V0cHV0X2NhY2hlX2dldCcgPT4gJ3plbmQvemVuZC5zdHViJywgJ291dHB1dF9jYWNoZV9vdXRwdXQnID0+ICd6ZW5kL3plbmQuc3R1YicsICdvdXRwdXRfY2FjaGVfcHV0JyA9PiAnemVuZC96ZW5kLnN0dWInLCAnb3V0cHV0X2NhY2hlX3JlbW92ZScgPT4gJ3plbmQvemVuZC5zdHViJywgJ291dHB1dF9jYWNoZV9yZW1vdmVfa2V5JyA9PiAnemVuZC96ZW5kLnN0dWInLCAnb3V0cHV0X2NhY2hlX3JlbW92ZV91cmwnID0+ICd6ZW5kL3plbmQuc3R1YicsICdvdXRwdXRfY2FjaGVfc3RvcCcgPT4gJ3plbmQvemVuZC5zdHViJywgJ291dHB1dF9yZXNldF9yZXdyaXRlX3ZhcnMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAncGFjaycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdwYW1fYXV0aCcgPT4gJ3BhbS9wYW0uc3R1YicsICdwYW1fY2hwYXNzJyA9PiAncGFtL3BhbS5zdHViJywgJ3BhcmFsbGVsXFxib290c3RyYXAnID0+ICdwYXJhbGxlbC9wYXJhbGxlbC5zdHViJywgJ3BhcmFsbGVsXFxjb3VudCcgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsLnN0dWInLCAncGFyYWxsZWxcXHJ1bicgPT4gJ3BhcmFsbGVsL3BhcmFsbGVsLnN0dWInLCAncGFyc2VfaW5pX2ZpbGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAncGFyc2VfaW5pX3N0cmluZycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdwYXJzZV9zdHInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAncGFyc2VfdXJsJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ3Bhc3N0aHJ1JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ3Bhc3N3b3JkX2FsZ29zJyA9PiAnc3RhbmRhcmQvcGFzc3dvcmQuc3R1YicsICdwYXNzd29yZF9nZXRfaW5mbycgPT4gJ3N0YW5kYXJkL3Bhc3N3b3JkLnN0dWInLCAncGFzc3dvcmRfaGFzaCcgPT4gJ3N0YW5kYXJkL3Bhc3N3b3JkLnN0dWInLCAncGFzc3dvcmRfbmVlZHNfcmVoYXNoJyA9PiAnc3RhbmRhcmQvcGFzc3dvcmQuc3R1YicsICdwYXNzd29yZF92ZXJpZnknID0+ICdzdGFuZGFyZC9wYXNzd29yZC5zdHViJywgJ3BhdGhpbmZvJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ3BjbG9zZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdwY250bF9hbGFybScgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAncGNudGxfYXN5bmNfc2lnbmFscycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAncGNudGxfZXJybm8nID0+ICdwY250bC9wY250bC5zdHViJywgJ3BjbnRsX2V4ZWMnID0+ICdwY250bC9wY250bC5zdHViJywgJ3BjbnRsX2ZvcmsnID0+ICdwY250bC9wY250bC5zdHViJywgJ3BjbnRsX2dldF9sYXN0X2Vycm9yJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdwY250bF9nZXRjcHUnID0+ICdwY250bC9wY250bC5zdHViJywgJ3BjbnRsX2dldGNwdWFmZmluaXR5JyA9PiAncGNudGwvcGNudGwuc3R1YicsICdwY250bF9nZXRwcmlvcml0eScgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAncGNudGxfc2V0Y3B1YWZmaW5pdHknID0+ICdwY250bC9wY250bC5zdHViJywgJ3BjbnRsX3NldHByaW9yaXR5JyA9PiAncGNudGwvcGNudGwuc3R1YicsICdwY250bF9zaWduYWwnID0+ICdwY250bC9wY250bC5zdHViJywgJ3BjbnRsX3NpZ25hbF9kaXNwYXRjaCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAncGNudGxfc2lnbmFsX2dldF9oYW5kbGVyJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdwY250bF9zaWdwcm9jbWFzaycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAncGNudGxfc2lndGltZWR3YWl0JyA9PiAncGNudGwvcGNudGwuc3R1YicsICdwY250bF9zaWd3YWl0aW5mbycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAncGNudGxfc3RyZXJyb3InID0+ICdwY250bC9wY250bC5zdHViJywgJ3BjbnRsX3Vuc2hhcmUnID0+ICdwY250bC9wY250bC5zdHViJywgJ3BjbnRsX3dhaXQnID0+ICdwY250bC9wY250bC5zdHViJywgJ3BjbnRsX3dhaXRpZCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAncGNudGxfd2FpdHBpZCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAncGNudGxfd2V4aXRzdGF0dXMnID0+ICdwY250bC9wY250bC5zdHViJywgJ3BjbnRsX3dpZmNvbnRpbnVlZCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAncGNudGxfd2lmZXhpdGVkJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdwY250bF93aWZzaWduYWxlZCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAncGNudGxfd2lmc3RvcHBlZCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAncGNudGxfd3N0b3BzaWcnID0+ICdwY250bC9wY250bC5zdHViJywgJ3BjbnRsX3d0ZXJtc2lnJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdwY292XFxjbGVhcicgPT4gJ3Bjb3YvcGNvdi5zdHViJywgJ3Bjb3ZcXGNvbGxlY3QnID0+ICdwY292L3Bjb3Yuc3R1YicsICdwY292XFxtZW1vcnknID0+ICdwY292L3Bjb3Yuc3R1YicsICdwY292XFxzdGFydCcgPT4gJ3Bjb3YvcGNvdi5zdHViJywgJ3Bjb3ZcXHN0b3AnID0+ICdwY292L3Bjb3Yuc3R1YicsICdwY292XFx3YWl0aW5nJyA9PiAncGNvdi9wY292LnN0dWInLCAncGRvX2RyaXZlcnMnID0+ICdQRE8vUERPLnN0dWInLCAncGZzb2Nrb3BlbicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdwZ19hZmZlY3RlZF9yb3dzJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19jYW5jZWxfcXVlcnknID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2NoYW5nZV9wYXNzd29yZCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfY2xpZW50X2VuY29kaW5nJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19jbGllbnRlbmNvZGluZycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfY2xvc2UnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2NtZHR1cGxlcycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfY29ubmVjdCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfY29ubmVjdF9wb2xsJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19jb25uZWN0aW9uX2J1c3knID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2Nvbm5lY3Rpb25fcmVzZXQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2Nvbm5lY3Rpb25fc3RhdHVzJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19jb25zdW1lX2lucHV0JyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19jb252ZXJ0JyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19jb3B5X2Zyb20nID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2NvcHlfdG8nID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2RibmFtZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZGVsZXRlJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19lbmRfY29weScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZW50ZXJfcGlwZWxpbmVfbW9kZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZXJyb3JtZXNzYWdlJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19lc2NhcGVfYnl0ZWEnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2VzY2FwZV9pZGVudGlmaWVyJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19lc2NhcGVfbGl0ZXJhbCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZXNjYXBlX3N0cmluZycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZXhlYycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZXhlY3V0ZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZXhpdF9waXBlbGluZV9tb2RlJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19mZXRjaF9hbGwnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2ZldGNoX2FsbF9jb2x1bW5zJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19mZXRjaF9hcnJheScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZmV0Y2hfYXNzb2MnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2ZldGNoX29iamVjdCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZmV0Y2hfcmVzdWx0JyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19mZXRjaF9yb3cnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2ZpZWxkX2lzX251bGwnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2ZpZWxkX25hbWUnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2ZpZWxkX251bScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZmllbGRfcHJ0bGVuJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19maWVsZF9zaXplJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19maWVsZF90YWJsZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZmllbGRfdHlwZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZmllbGRfdHlwZV9vaWQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2ZpZWxkaXNudWxsJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19maWVsZG5hbWUnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2ZpZWxkbnVtJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19maWVsZHBydGxlbicgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZmllbGRzaXplJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19maWVsZHR5cGUnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2ZsdXNoJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19mcmVlX3Jlc3VsdCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZnJlZXJlc3VsdCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZ2V0X25vdGlmeScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZ2V0X3BpZCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZ2V0X3Jlc3VsdCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfZ2V0bGFzdG9pZCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfaG9zdCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfaW5zZXJ0JyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19qaXQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2xhc3RfZXJyb3InID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2xhc3Rfbm90aWNlJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19sYXN0X29pZCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfbG9fY2xvc2UnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2xvX2NyZWF0ZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfbG9fZXhwb3J0JyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19sb19pbXBvcnQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2xvX29wZW4nID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2xvX3JlYWQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2xvX3JlYWRfYWxsJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19sb19zZWVrJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19sb190ZWxsJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19sb190cnVuY2F0ZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfbG9fdW5saW5rJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19sb193cml0ZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfbG9jbG9zZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfbG9jcmVhdGUnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2xvZXhwb3J0JyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19sb2ltcG9ydCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfbG9vcGVuJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19sb3JlYWQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2xvcmVhZGFsbCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfbG91bmxpbmsnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX2xvd3JpdGUnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX21ldGFfZGF0YScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfbnVtX2ZpZWxkcycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfbnVtX3Jvd3MnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX251bWZpZWxkcycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfbnVtcm93cycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfb3B0aW9ucycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfcGFyYW1ldGVyX3N0YXR1cycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfcGNvbm5lY3QnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX3BpbmcnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX3BpcGVsaW5lX3N0YXR1cycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfcGlwZWxpbmVfc3luYycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfcG9ydCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfcHJlcGFyZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfcHV0X2NvcHlfZGF0YScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfcHV0X2NvcHlfZW5kJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19wdXRfbGluZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfcXVlcnknID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX3F1ZXJ5X3BhcmFtcycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfcmVzdWx0JyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19yZXN1bHRfZXJyb3InID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX3Jlc3VsdF9lcnJvcl9maWVsZCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfcmVzdWx0X21lbW9yeV9zaXplJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19yZXN1bHRfc2VlaycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfcmVzdWx0X3N0YXR1cycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfc2VsZWN0JyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19zZW5kX2V4ZWN1dGUnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX3NlbmRfcHJlcGFyZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfc2VuZF9xdWVyeScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfc2VuZF9xdWVyeV9wYXJhbXMnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX3NldF9jbGllbnRfZW5jb2RpbmcnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX3NldF9lcnJvcl9jb250ZXh0X3Zpc2liaWxpdHknID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX3NldF9lcnJvcl92ZXJib3NpdHknID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX3NldGNsaWVudGVuY29kaW5nJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ19zb2NrZXQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX3NvY2tldF9wb2xsJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ190cmFjZScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAncGdfdHJhbnNhY3Rpb25fc3RhdHVzJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ190dHknID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX3VuZXNjYXBlX2J5dGVhJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ191bnRyYWNlJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdwZ191cGRhdGUnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BnX3ZlcnNpb24nID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ3BocF9lZ2dfbG9nb19ndWlkJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3BocF9pbmlfbG9hZGVkX2ZpbGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8wLnN0dWInLCAncGhwX2luaV9zY2FubmVkX2ZpbGVzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3BocF9sb2dvX2d1aWQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8wLnN0dWInLCAncGhwX3JlYWxfbG9nb19ndWlkJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3BocF9zYXBpX25hbWUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8wLnN0dWInLCAncGhwX3N0cmlwX3doaXRlc3BhY2UnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAncGhwX3VuYW1lJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3BocGNyZWRpdHMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8wLnN0dWInLCAncGhwZGJnX2JyZWFrX2ZpbGUnID0+ICdwaHBkYmcvcGhwZGJnLnN0dWInLCAncGhwZGJnX2JyZWFrX2Z1bmN0aW9uJyA9PiAncGhwZGJnL3BocGRiZy5zdHViJywgJ3BocGRiZ19icmVha19tZXRob2QnID0+ICdwaHBkYmcvcGhwZGJnLnN0dWInLCAncGhwZGJnX2JyZWFrX25leHQnID0+ICdwaHBkYmcvcGhwZGJnLnN0dWInLCAncGhwZGJnX2NsZWFyJyA9PiAncGhwZGJnL3BocGRiZy5zdHViJywgJ3BocGRiZ19jb2xvcicgPT4gJ3BocGRiZy9waHBkYmcuc3R1YicsICdwaHBkYmdfZW5kX29wbG9nJyA9PiAncGhwZGJnL3BocGRiZy5zdHViJywgJ3BocGRiZ19leGVjJyA9PiAncGhwZGJnL3BocGRiZy5zdHViJywgJ3BocGRiZ19nZXRfZXhlY3V0YWJsZScgPT4gJ3BocGRiZy9waHBkYmcuc3R1YicsICdwaHBkYmdfcHJvbXB0JyA9PiAncGhwZGJnL3BocGRiZy5zdHViJywgJ3BocGRiZ19zdGFydF9vcGxvZycgPT4gJ3BocGRiZy9waHBkYmcuc3R1YicsICdwaHBpbmZvJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3BocHZlcnNpb24nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8wLnN0dWInLCAncGknID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAncG5nMndibXAnID0+ICdnZC9nZC5zdHViJywgJ3BvcGVuJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ3BvcycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdwb3NpeF9hY2Nlc3MnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ3Bvc2l4X2N0ZXJtaWQnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ3Bvc2l4X2VhY2Nlc3MnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ3Bvc2l4X2Vycm5vJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9nZXRfbGFzdF9lcnJvcicgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfZ2V0Y3dkJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9nZXRlZ2lkJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9nZXRldWlkJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9nZXRnaWQnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ3Bvc2l4X2dldGdyZ2lkJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9nZXRncm5hbScgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfZ2V0Z3JvdXBzJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9nZXRsb2dpbicgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfZ2V0cGdpZCcgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfZ2V0cGdycCcgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfZ2V0cGlkJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9nZXRwcGlkJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9nZXRwd25hbScgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfZ2V0cHd1aWQnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ3Bvc2l4X2dldHJsaW1pdCcgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfZ2V0c2lkJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9nZXR1aWQnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ3Bvc2l4X2luaXRncm91cHMnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ3Bvc2l4X2lzYXR0eScgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfa2lsbCcgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfbWtmaWZvJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9ta25vZCcgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfc2V0ZWdpZCcgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfc2V0ZXVpZCcgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfc2V0Z2lkJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9zZXRwZ2lkJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9zZXRybGltaXQnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ3Bvc2l4X3NldHNpZCcgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfc2V0dWlkJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3NpeF9zdHJlcnJvcicgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfc3lzY29uZicgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAncG9zaXhfdGltZXMnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ3Bvc2l4X3R0eW5hbWUnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ3Bvc2l4X3VuYW1lJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdwb3cnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAncHJlZ19maWx0ZXInID0+ICdwY3JlL3BjcmUuc3R1YicsICdwcmVnX2dyZXAnID0+ICdwY3JlL3BjcmUuc3R1YicsICdwcmVnX2xhc3RfZXJyb3InID0+ICdwY3JlL3BjcmUuc3R1YicsICdwcmVnX2xhc3RfZXJyb3JfbXNnJyA9PiAncGNyZS9wY3JlLnN0dWInLCAncHJlZ19tYXRjaCcgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ3ByZWdfbWF0Y2hfYWxsJyA9PiAncGNyZS9wY3JlLnN0dWInLCAncHJlZ19xdW90ZScgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ3ByZWdfcmVwbGFjZScgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ3ByZWdfcmVwbGFjZV9jYWxsYmFjaycgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ3ByZWdfcmVwbGFjZV9jYWxsYmFja19hcnJheScgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ3ByZWdfc3BsaXQnID0+ICdwY3JlL3BjcmUuc3R1YicsICdwcmV2JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ3ByaW50X3InID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAncHJpbnRmJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ3Byb2NfY2xvc2UnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAncHJvY19nZXRfc3RhdHVzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ3Byb2NfbmljZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdwcm9jX29wZW4nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAncHJvY190ZXJtaW5hdGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAncHJvcGVydHlfZXhpc3RzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAncHNwZWxsX2FkZF90b19wZXJzb25hbCcgPT4gJ3BzcGVsbC9wc3BlbGwuc3R1YicsICdwc3BlbGxfYWRkX3RvX3Nlc3Npb24nID0+ICdwc3BlbGwvcHNwZWxsLnN0dWInLCAncHNwZWxsX2NoZWNrJyA9PiAncHNwZWxsL3BzcGVsbC5zdHViJywgJ3BzcGVsbF9jbGVhcl9zZXNzaW9uJyA9PiAncHNwZWxsL3BzcGVsbC5zdHViJywgJ3BzcGVsbF9jb25maWdfY3JlYXRlJyA9PiAncHNwZWxsL3BzcGVsbC5zdHViJywgJ3BzcGVsbF9jb25maWdfZGF0YV9kaXInID0+ICdwc3BlbGwvcHNwZWxsLnN0dWInLCAncHNwZWxsX2NvbmZpZ19kaWN0X2RpcicgPT4gJ3BzcGVsbC9wc3BlbGwuc3R1YicsICdwc3BlbGxfY29uZmlnX2lnbm9yZScgPT4gJ3BzcGVsbC9wc3BlbGwuc3R1YicsICdwc3BlbGxfY29uZmlnX21vZGUnID0+ICdwc3BlbGwvcHNwZWxsLnN0dWInLCAncHNwZWxsX2NvbmZpZ19wZXJzb25hbCcgPT4gJ3BzcGVsbC9wc3BlbGwuc3R1YicsICdwc3BlbGxfY29uZmlnX3JlcGwnID0+ICdwc3BlbGwvcHNwZWxsLnN0dWInLCAncHNwZWxsX2NvbmZpZ19ydW50b2dldGhlcicgPT4gJ3BzcGVsbC9wc3BlbGwuc3R1YicsICdwc3BlbGxfY29uZmlnX3NhdmVfcmVwbCcgPT4gJ3BzcGVsbC9wc3BlbGwuc3R1YicsICdwc3BlbGxfbmV3JyA9PiAncHNwZWxsL3BzcGVsbC5zdHViJywgJ3BzcGVsbF9uZXdfY29uZmlnJyA9PiAncHNwZWxsL3BzcGVsbC5zdHViJywgJ3BzcGVsbF9uZXdfcGVyc29uYWwnID0+ICdwc3BlbGwvcHNwZWxsLnN0dWInLCAncHNwZWxsX3NhdmVfd29yZGxpc3QnID0+ICdwc3BlbGwvcHNwZWxsLnN0dWInLCAncHNwZWxsX3N0b3JlX3JlcGxhY2VtZW50JyA9PiAncHNwZWxsL3BzcGVsbC5zdHViJywgJ3BzcGVsbF9zdWdnZXN0JyA9PiAncHNwZWxsL3BzcGVsbC5zdHViJywgJ3B1dGVudicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdxdW90ZWRfcHJpbnRhYmxlX2RlY29kZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdxdW90ZWRfcHJpbnRhYmxlX2VuY29kZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdxdW90ZW1ldGEnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAncmFkMmRlZycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdyYWRpdXNfYWNjdF9vcGVuJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ3JhZGl1c19hZGRfc2VydmVyJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ3JhZGl1c19hdXRoX29wZW4nID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAncmFkaXVzX2Nsb3NlJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ3JhZGl1c19jb25maWcnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAncmFkaXVzX2NyZWF0ZV9yZXF1ZXN0JyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ3JhbmQnID0+ICdyYW5kb20vcmFuZG9tLnN0dWInLCAncmFuZG9tX2J5dGVzJyA9PiAncmFuZG9tL3JhbmRvbS5zdHViJywgJ3JhbmRvbV9pbnQnID0+ICdyYW5kb20vcmFuZG9tLnN0dWInLCAncmFuZ2UnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAncmF3dXJsZGVjb2RlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ3Jhd3VybGVuY29kZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdyZF9rYWZrYV9lcnIyc3RyJyA9PiAncmRrYWZrYS9mdW5jdGlvbnMuc3R1YicsICdyZF9rYWZrYV9lcnJubycgPT4gJ3Jka2Fma2EvZnVuY3Rpb25zLnN0dWInLCAncmRfa2Fma2FfZXJybm8yZXJyJyA9PiAncmRrYWZrYS9mdW5jdGlvbnMuc3R1YicsICdyZF9rYWZrYV9nZXRfZXJyX2Rlc2NzJyA9PiAncmRrYWZrYS9mdW5jdGlvbnMuc3R1YicsICdyZF9rYWZrYV9vZmZzZXRfdGFpbCcgPT4gJ3Jka2Fma2EvZnVuY3Rpb25zLnN0dWInLCAncmRfa2Fma2FfdGhyZWFkX2NudCcgPT4gJ3Jka2Fma2EvZnVuY3Rpb25zLnN0dWInLCAncmVhZF9leGlmX2RhdGEnID0+ICdleGlmL2V4aWYuc3R1YicsICdyZWFkZGlyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ3JlYWRmaWxlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ3JlYWRnemZpbGUnID0+ICd6bGliL3psaWIuc3R1YicsICdyZWFkbGluZScgPT4gJ3JlYWRsaW5lL3JlYWRsaW5lLnN0dWInLCAncmVhZGxpbmVfYWRkX2hpc3RvcnknID0+ICdyZWFkbGluZS9yZWFkbGluZS5zdHViJywgJ3JlYWRsaW5lX2NhbGxiYWNrX2hhbmRsZXJfaW5zdGFsbCcgPT4gJ3JlYWRsaW5lL3JlYWRsaW5lLnN0dWInLCAncmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9yZW1vdmUnID0+ICdyZWFkbGluZS9yZWFkbGluZS5zdHViJywgJ3JlYWRsaW5lX2NhbGxiYWNrX3JlYWRfY2hhcicgPT4gJ3JlYWRsaW5lL3JlYWRsaW5lLnN0dWInLCAncmVhZGxpbmVfY2xlYXJfaGlzdG9yeScgPT4gJ3JlYWRsaW5lL3JlYWRsaW5lLnN0dWInLCAncmVhZGxpbmVfY29tcGxldGlvbl9mdW5jdGlvbicgPT4gJ3JlYWRsaW5lL3JlYWRsaW5lLnN0dWInLCAncmVhZGxpbmVfaW5mbycgPT4gJ3JlYWRsaW5lL3JlYWRsaW5lLnN0dWInLCAncmVhZGxpbmVfbGlzdF9oaXN0b3J5JyA9PiAncmVhZGxpbmUvcmVhZGxpbmUuc3R1YicsICdyZWFkbGluZV9vbl9uZXdfbGluZScgPT4gJ3JlYWRsaW5lL3JlYWRsaW5lLnN0dWInLCAncmVhZGxpbmVfcmVhZF9oaXN0b3J5JyA9PiAncmVhZGxpbmUvcmVhZGxpbmUuc3R1YicsICdyZWFkbGluZV9yZWRpc3BsYXknID0+ICdyZWFkbGluZS9yZWFkbGluZS5zdHViJywgJ3JlYWRsaW5lX3dyaXRlX2hpc3RvcnknID0+ICdyZWFkbGluZS9yZWFkbGluZS5zdHViJywgJ3JlYWRsaW5rJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ3JlYWxwYXRoJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3JlYWxwYXRoX2NhY2hlX2dldCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdyZWFscGF0aF9jYWNoZV9zaXplJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ3JlY29kZScgPT4gJ3JlY29kZS9yZWNvZGUuc3R1YicsICdyZWNvZGVfZmlsZScgPT4gJ3JlY29kZS9yZWNvZGUuc3R1YicsICdyZWNvZGVfc3RyaW5nJyA9PiAncmVjb2RlL3JlY29kZS5zdHViJywgJ3JlZ2lzdGVyX2V2ZW50X2hhbmRsZXInID0+ICd6ZW5kL3plbmQuc3R1YicsICdyZWdpc3Rlcl9zaHV0ZG93bl9mdW5jdGlvbicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdyZWdpc3Rlcl90aWNrX2Z1bmN0aW9uJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ3JlbmFtZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdyZXF1ZXN0X3BhcnNlX2JvZHknID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xMC5zdHViJywgJ3Jlc2V0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ3Jlc291cmNlYnVuZGxlX2NvdW50JyA9PiAnaW50bC9pbnRsLnN0dWInLCAncmVzb3VyY2VidW5kbGVfY3JlYXRlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAncmVzb3VyY2VidW5kbGVfZ2V0JyA9PiAnaW50bC9pbnRsLnN0dWInLCAncmVzb3VyY2VidW5kbGVfZ2V0X2Vycm9yX2NvZGUnID0+ICdpbnRsL2ludGwuc3R1YicsICdyZXNvdXJjZWJ1bmRsZV9nZXRfZXJyb3JfbWVzc2FnZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ3Jlc291cmNlYnVuZGxlX2xvY2FsZXMnID0+ICdpbnRsL2ludGwuc3R1YicsICdyZXN0b3JlX2Vycm9yX2hhbmRsZXInID0+ICdDb3JlL0NvcmUuc3R1YicsICdyZXN0b3JlX2V4Y2VwdGlvbl9oYW5kbGVyJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAncmVzdG9yZV9pbmNsdWRlX3BhdGgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAncmV3aW5kJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNS5zdHViJywgJ3Jld2luZGRpcicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzcuc3R1YicsICdybWRpcicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdyb3VuZCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdycG1hZGR0YWcnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdycG1kYmluZm8nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdycG1kYnNlYXJjaCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ3JwbWluZm8nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdycG12ZXJjbXAnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdycmRfY3JlYXRlJyA9PiAncnJkL3JyZC5zdHViJywgJ3JyZF9kaXNjb25uZWN0JyA9PiAncnJkL3JyZC5zdHViJywgJ3JyZF9lcnJvcicgPT4gJ3JyZC9ycmQuc3R1YicsICdycmRfZmV0Y2gnID0+ICdycmQvcnJkLnN0dWInLCAncnJkX2ZpcnN0JyA9PiAncnJkL3JyZC5zdHViJywgJ3JyZF9ncmFwaCcgPT4gJ3JyZC9ycmQuc3R1YicsICdycmRfaW5mbycgPT4gJ3JyZC9ycmQuc3R1YicsICdycmRfbGFzdCcgPT4gJ3JyZC9ycmQuc3R1YicsICdycmRfbGFzdHVwZGF0ZScgPT4gJ3JyZC9ycmQuc3R1YicsICdycmRfcmVzdG9yZScgPT4gJ3JyZC9ycmQuc3R1YicsICdycmRfdHVuZScgPT4gJ3JyZC9ycmQuc3R1YicsICdycmRfdXBkYXRlJyA9PiAncnJkL3JyZC5zdHViJywgJ3JyZF92ZXJzaW9uJyA9PiAncnJkL3JyZC5zdHViJywgJ3JyZF94cG9ydCcgPT4gJ3JyZC9ycmQuc3R1YicsICdycmRjX2Rpc2Nvbm5lY3QnID0+ICdycmQvcnJkLnN0dWInLCAncnNvcnQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAncnRyaW0nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnc2FwaV93aW5kb3dzX2NwX2NvbnYnID0+ICdzdGFuZGFyZC9iYXNpYy5zdHViJywgJ3NhcGlfd2luZG93c19jcF9nZXQnID0+ICdzdGFuZGFyZC9iYXNpYy5zdHViJywgJ3NhcGlfd2luZG93c19jcF9pc191dGY4JyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICdzYXBpX3dpbmRvd3NfY3Bfc2V0JyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICdzYXBpX3dpbmRvd3NfZ2VuZXJhdGVfY3RybF9ldmVudCcgPT4gJ3N0YW5kYXJkL2Jhc2ljLnN0dWInLCAnc2FwaV93aW5kb3dzX3NldF9jdHJsX2hhbmRsZXInID0+ICdzdGFuZGFyZC9iYXNpYy5zdHViJywgJ3NhcGlfd2luZG93c192dDEwMF9zdXBwb3J0JyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICdzY2FuZGlyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ3NlbV9hY3F1aXJlJyA9PiAnc3lzdnNlbS9zeXN2c2VtLnN0dWInLCAnc2VtX2dldCcgPT4gJ3N5c3ZzZW0vc3lzdnNlbS5zdHViJywgJ3NlbV9yZWxlYXNlJyA9PiAnc3lzdnNlbS9zeXN2c2VtLnN0dWInLCAnc2VtX3JlbW92ZScgPT4gJ3N5c3ZzZW0vc3lzdnNlbS5zdHViJywgJ3NlcmlhbGl6ZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdzZXNzaW9uX2Fib3J0JyA9PiAnc2Vzc2lvbi9zZXNzaW9uLnN0dWInLCAnc2Vzc2lvbl9jYWNoZV9leHBpcmUnID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX2NhY2hlX2xpbWl0ZXInID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX2NvbW1pdCcgPT4gJ3Nlc3Npb24vc2Vzc2lvbi5zdHViJywgJ3Nlc3Npb25fY3JlYXRlX2lkJyA9PiAnc2Vzc2lvbi9zZXNzaW9uLnN0dWInLCAnc2Vzc2lvbl9kZWNvZGUnID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX2Rlc3Ryb3knID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX2VuY29kZScgPT4gJ3Nlc3Npb24vc2Vzc2lvbi5zdHViJywgJ3Nlc3Npb25fZ2MnID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX2dldF9jb29raWVfcGFyYW1zJyA9PiAnc2Vzc2lvbi9zZXNzaW9uLnN0dWInLCAnc2Vzc2lvbl9pZCcgPT4gJ3Nlc3Npb24vc2Vzc2lvbi5zdHViJywgJ3Nlc3Npb25faXNfcmVnaXN0ZXJlZCcgPT4gJ3Nlc3Npb24vc2Vzc2lvbi5zdHViJywgJ3Nlc3Npb25fbW9kdWxlX25hbWUnID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX25hbWUnID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX3JlZ2VuZXJhdGVfaWQnID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX3JlZ2lzdGVyJyA9PiAnc2Vzc2lvbi9zZXNzaW9uLnN0dWInLCAnc2Vzc2lvbl9yZWdpc3Rlcl9zaHV0ZG93bicgPT4gJ3Nlc3Npb24vc2Vzc2lvbi5zdHViJywgJ3Nlc3Npb25fcmVzZXQnID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX3NhdmVfcGF0aCcgPT4gJ3Nlc3Npb24vc2Vzc2lvbi5zdHViJywgJ3Nlc3Npb25fc2V0X2Nvb2tpZV9wYXJhbXMnID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXInID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX3N0YXJ0JyA9PiAnc2Vzc2lvbi9zZXNzaW9uLnN0dWInLCAnc2Vzc2lvbl9zdGF0dXMnID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX3VucmVnaXN0ZXInID0+ICdzZXNzaW9uL3Nlc3Npb24uc3R1YicsICdzZXNzaW9uX3Vuc2V0JyA9PiAnc2Vzc2lvbi9zZXNzaW9uLnN0dWInLCAnc2Vzc2lvbl93cml0ZV9jbG9zZScgPT4gJ3Nlc3Npb24vc2Vzc2lvbi5zdHViJywgJ3NldF9lcnJvcl9oYW5kbGVyJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnc2V0X2V4Y2VwdGlvbl9oYW5kbGVyJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnc2V0X2ZpbGVfYnVmZmVyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3NldF9pbmNsdWRlX3BhdGgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAnc2V0X2pvYl9mYWlsZWQnID0+ICd6ZW5kL3plbmRfZi5zdHViJywgJ3NldF9tYWdpY19xdW90ZXNfcnVudGltZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdzZXRfc29ja2V0X2Jsb2NraW5nJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3NldF90aW1lX2xpbWl0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ3NldGNvb2tpZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdzZXRsb2NhbGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnc2V0cmF3Y29va2llJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ3NldHR5cGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF81LnN0dWInLCAnc2hhMScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzAuc3R1YicsICdzaGExX2ZpbGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8wLnN0dWInLCAnc2hlbGxfZXhlYycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdzaG1fYXR0YWNoJyA9PiAnc3lzdnNobS9zeXN2c2htLnN0dWInLCAnc2htX2RldGFjaCcgPT4gJ3N5c3ZzaG0vc3lzdnNobS5zdHViJywgJ3NobV9nZXRfdmFyJyA9PiAnc3lzdnNobS9zeXN2c2htLnN0dWInLCAnc2htX2hhc192YXInID0+ICdzeXN2c2htL3N5c3ZzaG0uc3R1YicsICdzaG1fcHV0X3ZhcicgPT4gJ3N5c3ZzaG0vc3lzdnNobS5zdHViJywgJ3NobV9yZW1vdmUnID0+ICdzeXN2c2htL3N5c3ZzaG0uc3R1YicsICdzaG1fcmVtb3ZlX3ZhcicgPT4gJ3N5c3ZzaG0vc3lzdnNobS5zdHViJywgJ3NobW9wX2Nsb3NlJyA9PiAnc2htb3Avc2htb3Auc3R1YicsICdzaG1vcF9kZWxldGUnID0+ICdzaG1vcC9zaG1vcC5zdHViJywgJ3NobW9wX29wZW4nID0+ICdzaG1vcC9zaG1vcC5zdHViJywgJ3NobW9wX3JlYWQnID0+ICdzaG1vcC9zaG1vcC5zdHViJywgJ3NobW9wX3NpemUnID0+ICdzaG1vcC9zaG1vcC5zdHViJywgJ3NobW9wX3dyaXRlJyA9PiAnc2htb3Avc2htb3Auc3R1YicsICdzaG93X3NvdXJjZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICdzaHVmZmxlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ3NpbWRqc29uX2RlY29kZScgPT4gJ3NpbWRqc29uL3NpbWRqc29uLnN0dWInLCAnc2ltZGpzb25faXNfdmFsaWQnID0+ICdzaW1kanNvbi9zaW1kanNvbi5zdHViJywgJ3NpbWRqc29uX2tleV9jb3VudCcgPT4gJ3NpbWRqc29uL3NpbWRqc29uLnN0dWInLCAnc2ltZGpzb25fa2V5X2V4aXN0cycgPT4gJ3NpbWRqc29uL3NpbWRqc29uLnN0dWInLCAnc2ltZGpzb25fa2V5X3ZhbHVlJyA9PiAnc2ltZGpzb24vc2ltZGpzb24uc3R1YicsICdzaW1pbGFyX3RleHQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnc2ltcGxleG1sX2ltcG9ydF9kb20nID0+ICdTaW1wbGVYTUwvU2ltcGxlWE1MLnN0dWInLCAnc2ltcGxleG1sX2xvYWRfZmlsZScgPT4gJ1NpbXBsZVhNTC9TaW1wbGVYTUwuc3R1YicsICdzaW1wbGV4bWxfbG9hZF9zdHJpbmcnID0+ICdTaW1wbGVYTUwvU2ltcGxlWE1MLnN0dWInLCAnc2luJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ3NpbmgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAnc2l6ZW9mJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ3NsZWVwJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3NuYXBweV9jb21wcmVzcycgPT4gJ3NuYXBweS9zbmFwcHkvc25hcHB5LnN0dWInLCAnc25hcHB5X3VuY29tcHJlc3MnID0+ICdzbmFwcHkvc25hcHB5L3NuYXBweS5zdHViJywgJ3NubXAyX2dldCcgPT4gJ3NubXAvc25tcC5zdHViJywgJ3NubXAyX2dldG5leHQnID0+ICdzbm1wL3NubXAuc3R1YicsICdzbm1wMl9yZWFsX3dhbGsnID0+ICdzbm1wL3NubXAuc3R1YicsICdzbm1wMl9zZXQnID0+ICdzbm1wL3NubXAuc3R1YicsICdzbm1wMl93YWxrJyA9PiAnc25tcC9zbm1wLnN0dWInLCAnc25tcDNfZ2V0JyA9PiAnc25tcC9zbm1wLnN0dWInLCAnc25tcDNfZ2V0bmV4dCcgPT4gJ3NubXAvc25tcC5zdHViJywgJ3NubXAzX3JlYWxfd2FsaycgPT4gJ3NubXAvc25tcC5zdHViJywgJ3NubXAzX3NldCcgPT4gJ3NubXAvc25tcC5zdHViJywgJ3NubXAzX3dhbGsnID0+ICdzbm1wL3NubXAuc3R1YicsICdzbm1wX2dldF9xdWlja19wcmludCcgPT4gJ3NubXAvc25tcC5zdHViJywgJ3NubXBfZ2V0X3ZhbHVlcmV0cmlldmFsJyA9PiAnc25tcC9zbm1wLnN0dWInLCAnc25tcF9yZWFkX21pYicgPT4gJ3NubXAvc25tcC5zdHViJywgJ3NubXBfc2V0X2VudW1fcHJpbnQnID0+ICdzbm1wL3NubXAuc3R1YicsICdzbm1wX3NldF9vaWRfbnVtZXJpY19wcmludCcgPT4gJ3NubXAvc25tcC5zdHViJywgJ3NubXBfc2V0X29pZF9vdXRwdXRfZm9ybWF0JyA9PiAnc25tcC9zbm1wLnN0dWInLCAnc25tcF9zZXRfcXVpY2tfcHJpbnQnID0+ICdzbm1wL3NubXAuc3R1YicsICdzbm1wX3NldF92YWx1ZXJldHJpZXZhbCcgPT4gJ3NubXAvc25tcC5zdHViJywgJ3NubXBnZXQnID0+ICdzbm1wL3NubXAuc3R1YicsICdzbm1wZ2V0bmV4dCcgPT4gJ3NubXAvc25tcC5zdHViJywgJ3NubXByZWFsd2FsaycgPT4gJ3NubXAvc25tcC5zdHViJywgJ3NubXBzZXQnID0+ICdzbm1wL3NubXAuc3R1YicsICdzbm1wd2FsaycgPT4gJ3NubXAvc25tcC5zdHViJywgJ3NubXB3YWxrb2lkJyA9PiAnc25tcC9zbm1wLnN0dWInLCAnc29ja2V0X2FjY2VwdCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ3NvY2tldF9hZGRyaW5mb19iaW5kJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X2FkZHJpbmZvX2Nvbm5lY3QnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfYWRkcmluZm9fZXhwbGFpbicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ3NvY2tldF9hZGRyaW5mb19sb29rdXAnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfYXRtYXJrJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X2JpbmQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfY2xlYXJfZXJyb3InID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfY2xvc2UnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfY21zZ19zcGFjZScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ3NvY2tldF9jb25uZWN0JyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X2NyZWF0ZScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ3NvY2tldF9jcmVhdGVfbGlzdGVuJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X2NyZWF0ZV9wYWlyJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X2V4cG9ydF9zdHJlYW0nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfZ2V0X29wdGlvbicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ3NvY2tldF9nZXRfc3RhdHVzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3NvY2tldF9nZXRvcHQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfZ2V0cGVlcm5hbWUnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfZ2V0c29ja25hbWUnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfaW1wb3J0X3N0cmVhbScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ3NvY2tldF9sYXN0X2Vycm9yJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X2xpc3RlbicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ3NvY2tldF9yZWFkJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X3JlY3YnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfcmVjdmZyb20nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfcmVjdm1zZycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ3NvY2tldF9zZWxlY3QnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfc2VuZCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ3NvY2tldF9zZW5kbXNnJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X3NlbmR0bycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ3NvY2tldF9zZXRfYmxvY2snID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfc2V0X2Jsb2NraW5nJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3NvY2tldF9zZXRfbm9uYmxvY2snID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdzb2NrZXRfc2V0X29wdGlvbicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ3NvY2tldF9zZXRfdGltZW91dCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzb2NrZXRfc2V0b3B0JyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X3NodXRkb3duJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X3N0cmVycm9yJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X3dyaXRlJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X3dzYXByb3RvY29sX2luZm9fZXhwb3J0JyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X3dzYXByb3RvY29sX2luZm9faW1wb3J0JyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnc29ja2V0X3dzYXByb3RvY29sX2luZm9fcmVsZWFzZScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ3NvZGl1bV9hZGQnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2Jhc2U2NDJiaW4nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2JpbjJiYXNlNjQnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2JpbjJoZXgnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NvbXBhcmUnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19hZWFkX2FlZ2lzMTI4bF9kZWNyeXB0JyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bV9mLnN0dWInLCAnc29kaXVtX2NyeXB0b19hZWFkX2FlZ2lzMTI4bF9lbmNyeXB0JyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bV9mLnN0dWInLCAnc29kaXVtX2NyeXB0b19hZWFkX2FlZ2lzMTI4bF9rZXlnZW4nID0+ICdsaWJzb2RpdW0vbGlic29kaXVtX2Yuc3R1YicsICdzb2RpdW1fY3J5cHRvX2FlYWRfYWVnaXMyNTZfZGVjcnlwdCcgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW1fZi5zdHViJywgJ3NvZGl1bV9jcnlwdG9fYWVhZF9hZWdpczI1Nl9lbmNyeXB0JyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bV9mLnN0dWInLCAnc29kaXVtX2NyeXB0b19hZWFkX2FlZ2lzMjU2X2tleWdlbicgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW1fZi5zdHViJywgJ3NvZGl1bV9jcnlwdG9fYWVhZF9hZXMyNTZnY21fZGVjcnlwdCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2VuY3J5cHQnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19hZWFkX2FlczI1NmdjbV9pc19hdmFpbGFibGUnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19hZWFkX2FlczI1NmdjbV9rZXlnZW4nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2VuY3J5cHQnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9rZXlnZW4nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfa2V5Z2VuJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19hZWFkX3hjaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9rZXlnZW4nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19hdXRoJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fYXV0aF9rZXlnZW4nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19hdXRoX3ZlcmlmeScgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2JveCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2JveF9rZXlwYWlyJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fYm94X2tleXBhaXJfZnJvbV9zZWNyZXRrZXlfYW5kX3B1YmxpY2tleScgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2JveF9vcGVuJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fYm94X3B1YmxpY2tleScgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2JveF9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXknID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19ib3hfc2VhbCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2JveF9zZWFsX29wZW4nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19ib3hfc2VjcmV0a2V5JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fYm94X3NlZWRfa2V5cGFpcicgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X2FkZCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X2Zyb21faGFzaCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X2lzX3ZhbGlkX3BvaW50JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fY29yZV9yaXN0cmV0dG8yNTVfcmFuZG9tJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fY29yZV9yaXN0cmV0dG8yNTVfc2NhbGFyX2FkZCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X3NjYWxhcl9jb21wbGVtZW50JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fY29yZV9yaXN0cmV0dG8yNTVfc2NhbGFyX2ludmVydCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X3NjYWxhcl9tdWwnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9zY2FsYXJfbmVnYXRlJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fY29yZV9yaXN0cmV0dG8yNTVfc2NhbGFyX3JhbmRvbScgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X3NjYWxhcl9yZWR1Y2UnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9zY2FsYXJfc3ViJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fY29yZV9yaXN0cmV0dG8yNTVfc3ViJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fZ2VuZXJpY2hhc2gnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19nZW5lcmljaGFzaF9maW5hbCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2dlbmVyaWNoYXNoX2luaXQnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19nZW5lcmljaGFzaF9rZXlnZW4nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19nZW5lcmljaGFzaF91cGRhdGUnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19rZGZfZGVyaXZlX2Zyb21fa2V5JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fa2RmX2tleWdlbicgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2t4JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fa3hfY2xpZW50X3Nlc3Npb25fa2V5cycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX2t4X2tleXBhaXInID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19reF9wdWJsaWNrZXknID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19reF9zZWNyZXRrZXknID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19reF9zZWVkX2tleXBhaXInID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19reF9zZXJ2ZXJfc2Vzc2lvbl9rZXlzJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fcHdoYXNoJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cicgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJfdmVyaWZ5JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fcHdoYXNoX3N0cicgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3B3aGFzaF9zdHJfbmVlZHNfcmVoYXNoJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fcHdoYXNoX3N0cl92ZXJpZnknID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19zY2FsYXJtdWx0JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fc2NhbGFybXVsdF9iYXNlJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fc2NhbGFybXVsdF9yaXN0cmV0dG8yNTUnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19zY2FsYXJtdWx0X3Jpc3RyZXR0bzI1NV9iYXNlJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fc2VjcmV0Ym94JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fc2VjcmV0Ym94X2tleWdlbicgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3NlY3JldGJveF9vcGVuJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X2luaXRfcHVsbCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9pbml0X3B1c2gnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfa2V5Z2VuJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X3B1bGwnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfcHVzaCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9yZWtleScgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3Nob3J0aGFzaCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3Nob3J0aGFzaF9rZXlnZW4nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19zaWduJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fc2lnbl9kZXRhY2hlZCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3NpZ25fZWQyNTUxOV9wa190b19jdXJ2ZTI1NTE5JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTknID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19zaWduX2tleXBhaXInID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19zaWduX2tleXBhaXJfZnJvbV9zZWNyZXRrZXlfYW5kX3B1YmxpY2tleScgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3NpZ25fb3BlbicgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3NpZ25fcHVibGlja2V5JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fc2lnbl9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXknID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19zaWduX3NlY3JldGtleScgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3NpZ25fc2VlZF9rZXlwYWlyJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19zdHJlYW0nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19zdHJlYW1fa2V5Z2VuJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fc3RyZWFtX3hjaGFjaGEyMCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3N0cmVhbV94Y2hhY2hhMjBfa2V5Z2VuJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9jcnlwdG9fc3RyZWFtX3hjaGFjaGEyMF94b3InID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2NyeXB0b19zdHJlYW1feGNoYWNoYTIwX3hvcl9pYycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fY3J5cHRvX3N0cmVhbV94b3InID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2hleDJiaW4nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX2luY3JlbWVudCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fbGlicmFyeV92ZXJzaW9uX21ham9yJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9saWJyYXJ5X3ZlcnNpb25fbWlub3InID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX21lbWNtcCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fbWVtemVybycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fcGFkJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9yYW5kb21ieXRlc19idWYnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29kaXVtX3JhbmRvbWJ5dGVzX3JhbmRvbTE2JyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV9yYW5kb21ieXRlc191bmlmb3JtJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ3NvZGl1bV91bnBhZCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdzb2RpdW1fdmVyc2lvbl9zdHJpbmcnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnc29scl9nZXRfdmVyc2lvbicgPT4gJ3NvbHIvZnVuY3Rpb25zLnN0dWInLCAnc29ydCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdzb3VuZGV4JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ3NwbF9hdXRvbG9hZCcgPT4gJ1NQTC9TUExfZi5zdHViJywgJ3NwbF9hdXRvbG9hZF9jYWxsJyA9PiAnU1BML1NQTF9mLnN0dWInLCAnc3BsX2F1dG9sb2FkX2V4dGVuc2lvbnMnID0+ICdTUEwvU1BMX2Yuc3R1YicsICdzcGxfYXV0b2xvYWRfZnVuY3Rpb25zJyA9PiAnU1BML1NQTF9mLnN0dWInLCAnc3BsX2F1dG9sb2FkX3JlZ2lzdGVyJyA9PiAnU1BML1NQTF9mLnN0dWInLCAnc3BsX2F1dG9sb2FkX3VucmVnaXN0ZXInID0+ICdTUEwvU1BMX2Yuc3R1YicsICdzcGxfY2xhc3NlcycgPT4gJ1NQTC9TUExfZi5zdHViJywgJ3NwbF9vYmplY3RfaGFzaCcgPT4gJ1NQTC9TUExfZi5zdHViJywgJ3NwbF9vYmplY3RfaWQnID0+ICdTUEwvU1BMX2Yuc3R1YicsICdzcGxpdCcgPT4gJ3JlZ2V4L2VyZWcuc3R1YicsICdzcGxpdGknID0+ICdyZWdleC9lcmVnLnN0dWInLCAnc3ByaW50ZicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdzcWxfcmVnY2FzZScgPT4gJ3JlZ2V4L2VyZWcuc3R1YicsICdzcWxpdGVfYXJyYXlfcXVlcnknID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX2J1c3lfdGltZW91dCcgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfY2hhbmdlcycgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfY2xvc2UnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX2NvbHVtbicgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfY3JlYXRlX2FnZ3JlZ2F0ZScgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfY3JlYXRlX2Z1bmN0aW9uJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ3NxbGl0ZV9jdXJyZW50JyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ3NxbGl0ZV9lcnJvcl9zdHJpbmcnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX2VzY2FwZV9zdHJpbmcnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX2V4ZWMnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX2ZhY3RvcnknID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX2ZldGNoX2FsbCcgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfZmV0Y2hfYXJyYXknID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX2ZldGNoX2NvbHVtbl90eXBlcycgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfZmV0Y2hfb2JqZWN0JyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ3NxbGl0ZV9mZXRjaF9zaW5nbGUnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX2ZldGNoX3N0cmluZycgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfZmllbGRfbmFtZScgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfaGFzX21vcmUnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX2hhc19wcmV2JyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ3NxbGl0ZV9sYXN0X2Vycm9yJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ3NxbGl0ZV9sYXN0X2luc2VydF9yb3dpZCcgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfbGliZW5jb2RpbmcnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX2xpYnZlcnNpb24nID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX25leHQnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX251bV9maWVsZHMnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX251bV9yb3dzJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ3NxbGl0ZV9vcGVuJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ3NxbGl0ZV9wb3BlbicgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfcHJldicgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfcXVlcnknID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX3Jld2luZCcgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfc2VlaycgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfc2luZ2xlX3F1ZXJ5JyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ3NxbGl0ZV91ZGZfZGVjb2RlX2JpbmFyeScgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdzcWxpdGVfdWRmX2VuY29kZV9iaW5hcnknID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX3VuYnVmZmVyZWRfcXVlcnknID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnc3FsaXRlX3ZhbGlkJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ3NxbHNydl9iZWdpbl90cmFuc2FjdGlvbicgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdzcWxzcnZfY2FuY2VsJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ3NxbHNydl9jbGllbnRfaW5mbycgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdzcWxzcnZfY2xvc2UnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnc3Fsc3J2X2NvbW1pdCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdzcWxzcnZfY29uZmlndXJlJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ3NxbHNydl9jb25uZWN0JyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ3NxbHNydl9lcnJvcnMnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnc3Fsc3J2X2V4ZWN1dGUnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnc3Fsc3J2X2ZldGNoJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ3NxbHNydl9mZXRjaF9hcnJheScgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdzcWxzcnZfZmV0Y2hfb2JqZWN0JyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ3NxbHNydl9maWVsZF9tZXRhZGF0YScgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdzcWxzcnZfZnJlZV9zdG10JyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ3NxbHNydl9nZXRfY29uZmlnJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ3NxbHNydl9nZXRfZmllbGQnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnc3Fsc3J2X2hhc19yb3dzJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ3NxbHNydl9uZXh0X3Jlc3VsdCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdzcWxzcnZfbnVtX2ZpZWxkcycgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdzcWxzcnZfbnVtX3Jvd3MnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnc3Fsc3J2X3ByZXBhcmUnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnc3Fsc3J2X3F1ZXJ5JyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ3NxbHNydl9yb2xsYmFjaycgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdzcWxzcnZfcm93c19hZmZlY3RlZCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdzcWxzcnZfc2VuZF9zdHJlYW1fZGF0YScgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdzcWxzcnZfc2VydmVyX2luZm8nID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnc3FydCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzMuc3R1YicsICdzcmFuZCcgPT4gJ3JhbmRvbS9yYW5kb20uc3R1YicsICdzc2NhbmYnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAnc3NoMl9hdXRoX2FnZW50JyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnc3NoMl9hdXRoX2hvc3RiYXNlZF9maWxlJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnc3NoMl9hdXRoX25vbmUnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX2F1dGhfcGFzc3dvcmQnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX2F1dGhfcHVia2V5X2ZpbGUnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX2Nvbm5lY3QnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX2Rpc2Nvbm5lY3QnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX2V4ZWMnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX2ZldGNoX3N0cmVhbScgPT4gJ3NzaDIvc3NoMi5zdHViJywgJ3NzaDJfZmluZ2VycHJpbnQnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX2ZvcndhcmRfYWNjZXB0JyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnc3NoMl9mb3J3YXJkX2xpc3RlbicgPT4gJ3NzaDIvc3NoMi5zdHViJywgJ3NzaDJfbWV0aG9kc19uZWdvdGlhdGVkJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnc3NoMl9wb2xsJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnc3NoMl9wdWJsaWNrZXlfYWRkJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnc3NoMl9wdWJsaWNrZXlfaW5pdCcgPT4gJ3NzaDIvc3NoMi5zdHViJywgJ3NzaDJfcHVibGlja2V5X2xpc3QnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX3B1YmxpY2tleV9yZW1vdmUnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX3NjcF9yZWN2JyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnc3NoMl9zY3Bfc2VuZCcgPT4gJ3NzaDIvc3NoMi5zdHViJywgJ3NzaDJfc2VuZF9lb2YnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX3NmdHAnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX3NmdHBfY2htb2QnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX3NmdHBfbHN0YXQnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX3NmdHBfbWtkaXInID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX3NmdHBfcmVhZGxpbmsnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX3NmdHBfcmVhbHBhdGgnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX3NmdHBfcmVuYW1lJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnc3NoMl9zZnRwX3JtZGlyJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnc3NoMl9zZnRwX3N0YXQnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX3NmdHBfc3ltbGluaycgPT4gJ3NzaDIvc3NoMi5zdHViJywgJ3NzaDJfc2Z0cF91bmxpbmsnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzc2gyX3NoZWxsJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnc3NoMl90dW5uZWwnID0+ICdzc2gyL3NzaDIuc3R1YicsICdzdGF0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNy5zdHViJywgJ3N0YXRzX2Fic29sdXRlX2RldmlhdGlvbicgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfY2RmX2JldGEnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2NkZl9iaW5vbWlhbCcgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfY2RmX2NhdWNoeScgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfY2RmX2NoaXNxdWFyZScgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfY2RmX2V4cG9uZW50aWFsJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19jZGZfZicgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfY2RmX2dhbW1hJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19jZGZfbGFwbGFjZScgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfY2RmX2xvZ2lzdGljJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19jZGZfbmVnYXRpdmVfYmlub21pYWwnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2NkZl9ub25jZW50cmFsX2NoaXNxdWFyZScgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfY2RmX25vbmNlbnRyYWxfZicgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfY2RmX25vbmNlbnRyYWxfdCcgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfY2RmX25vcm1hbCcgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfY2RmX3BvaXNzb24nID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2NkZl90JyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19jZGZfdW5pZm9ybScgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfY2RmX3dlaWJ1bGwnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2NvdmFyaWFuY2UnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2RlbnNfYmV0YScgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfZGVuc19jYXVjaHknID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2RlbnNfY2hpc3F1YXJlJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19kZW5zX2V4cG9uZW50aWFsJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19kZW5zX2YnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2RlbnNfZ2FtbWEnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2RlbnNfbGFwbGFjZScgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfZGVuc19sb2dpc3RpYycgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfZGVuc19ub3JtYWwnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2RlbnNfcG1mX2Jpbm9taWFsJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19kZW5zX3BtZl9oeXBlcmdlb21ldHJpYycgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfZGVuc19wbWZfbmVnYXRpdmVfYmlub21pYWwnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2RlbnNfcG1mX3BvaXNzb24nID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2RlbnNfdCcgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfZGVuc191bmlmb3JtJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19kZW5zX3dlaWJ1bGwnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2hhcm1vbmljX21lYW4nID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX2t1cnRvc2lzJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19yYW5kX2dlbl9iZXRhJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19yYW5kX2dlbl9jaGlzcXVhcmUnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX3JhbmRfZ2VuX2V4cG9uZW50aWFsJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19yYW5kX2dlbl9mJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19yYW5kX2dlbl9mdW5pZm9ybScgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfcmFuZF9nZW5fZ2FtbWEnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX3JhbmRfZ2VuX2liaW5vbWlhbCcgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfcmFuZF9nZW5faWJpbm9taWFsX25lZ2F0aXZlJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19yYW5kX2dlbl9pbnQnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX3JhbmRfZ2VuX2lwb2lzc29uJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19yYW5kX2dlbl9pdW5pZm9ybScgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfcmFuZF9nZW5fbm9uY2VudHJhbF9mJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19yYW5kX2dlbl9ub25jZW50cmFsX3QnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX3JhbmRfZ2VuX25vcm1hbCcgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfcmFuZF9nZW5fdCcgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfcmFuZF9nZXRfc2VlZHMnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX3JhbmRfcGhyYXNlX3RvX3NlZWRzJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19yYW5kX3JhbmYnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX3JhbmRfc2V0YWxsJyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19za2V3JyA9PiAnc3RhdHMvc3RhdHMuc3R1YicsICdzdGF0c19zdGFuZGFyZF9kZXZpYXRpb24nID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX3N0YXRfYmlub21pYWxfY29lZicgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfc3RhdF9jb3JyZWxhdGlvbicgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfc3RhdF9mYWN0b3JpYWwnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX3N0YXRfaW5kZXBlbmRlbnRfdCcgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfc3RhdF9pbm5lcnByb2R1Y3QnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX3N0YXRfcGFpcmVkX3QnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0YXRzX3N0YXRfcGVyY2VudGlsZScgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfc3RhdF9wb3dlcnN1bScgPT4gJ3N0YXRzL3N0YXRzLnN0dWInLCAnc3RhdHNfdmFyaWFuY2UnID0+ICdzdGF0cy9zdGF0cy5zdHViJywgJ3N0b21wX2Fib3J0JyA9PiAnc3RvbXAvc3RvbXAuc3R1YicsICdzdG9tcF9hY2snID0+ICdzdG9tcC9zdG9tcC5zdHViJywgJ3N0b21wX2JlZ2luJyA9PiAnc3RvbXAvc3RvbXAuc3R1YicsICdzdG9tcF9jbG9zZScgPT4gJ3N0b21wL3N0b21wLnN0dWInLCAnc3RvbXBfY29tbWl0JyA9PiAnc3RvbXAvc3RvbXAuc3R1YicsICdzdG9tcF9jb25uZWN0JyA9PiAnc3RvbXAvc3RvbXAuc3R1YicsICdzdG9tcF9lcnJvcicgPT4gJ3N0b21wL3N0b21wLnN0dWInLCAnc3RvbXBfZ2V0X3Nlc3Npb25faWQnID0+ICdzdG9tcC9zdG9tcC5zdHViJywgJ3N0b21wX2dldF90aW1lb3V0JyA9PiAnc3RvbXAvc3RvbXAuc3R1YicsICdzdG9tcF9oYXNfZnJhbWUnID0+ICdzdG9tcC9zdG9tcC5zdHViJywgJ3N0b21wX3JlYWRfZnJhbWUnID0+ICdzdG9tcC9zdG9tcC5zdHViJywgJ3N0b21wX3NlbmQnID0+ICdzdG9tcC9zdG9tcC5zdHViJywgJ3N0b21wX3NldF90aW1lb3V0JyA9PiAnc3RvbXAvc3RvbXAuc3R1YicsICdzdG9tcF9zdWJzY3JpYmUnID0+ICdzdG9tcC9zdG9tcC5zdHViJywgJ3N0b21wX3Vuc3Vic2NyaWJlJyA9PiAnc3RvbXAvc3RvbXAuc3R1YicsICdzdG9tcF92ZXJzaW9uJyA9PiAnc3RvbXAvc3RvbXAuc3R1YicsICdzdHJfY29udGFpbnMnID0+ICdDb3JlL0NvcmUuc3R1YicsICdzdHJfZGVjcmVtZW50JyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnc3RyX2VuZHNfd2l0aCcgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ3N0cl9nZXRjc3YnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAnc3RyX2luY3JlbWVudCcgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ3N0cl9pcmVwbGFjZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICdzdHJfcGFkJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ3N0cl9yZXBlYXQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnc3RyX3JlcGxhY2UnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnc3RyX3JvdDEzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ3N0cl9zaHVmZmxlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ3N0cl9zcGxpdCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICdzdHJfc3RhcnRzX3dpdGgnID0+ICdDb3JlL0NvcmUuc3R1YicsICdzdHJfd29yZF9jb3VudCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICdzdHJjYXNlY21wJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnc3RyY2hyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ3N0cmNtcCcgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ3N0cmNvbGwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnc3RyY3NwbicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzAuc3R1YicsICdzdHJlYW1fYnVja2V0X2FwcGVuZCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdzdHJlYW1fYnVja2V0X21ha2Vfd3JpdGVhYmxlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ3N0cmVhbV9idWNrZXRfbmV3JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ3N0cmVhbV9idWNrZXRfcHJlcGVuZCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdzdHJlYW1fY29udGV4dF9jcmVhdGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnc3RyZWFtX2NvbnRleHRfZ2V0X2RlZmF1bHQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnc3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbnMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnc3RyZWFtX2NvbnRleHRfZ2V0X3BhcmFtcycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fY29udGV4dF9zZXRfZGVmYXVsdCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fY29udGV4dF9zZXRfb3B0aW9uJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3N0cmVhbV9jb250ZXh0X3NldF9vcHRpb25zJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3N0cmVhbV9jb250ZXh0X3NldF9wYXJhbXMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnc3RyZWFtX2NvcHlfdG9fc3RyZWFtJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3N0cmVhbV9maWx0ZXJfYXBwZW5kJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3N0cmVhbV9maWx0ZXJfcHJlcGVuZCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fZmlsdGVyX3JlZ2lzdGVyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ3N0cmVhbV9maWx0ZXJfcmVtb3ZlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3N0cmVhbV9nZXRfY29udGVudHMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnc3RyZWFtX2dldF9maWx0ZXJzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ3N0cmVhbV9nZXRfbGluZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fZ2V0X21ldGFfZGF0YScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fZ2V0X3RyYW5zcG9ydHMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnc3RyZWFtX2dldF93cmFwcGVycycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1faXNfbG9jYWwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnc3RyZWFtX2lzYXR0eScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICdzdHJlYW1fcmVnaXN0ZXJfd3JhcHBlcicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fcmVzb2x2ZV9pbmNsdWRlX3BhdGgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnc3RyZWFtX3NlbGVjdCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fc2V0X2Jsb2NraW5nJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3N0cmVhbV9zZXRfY2h1bmtfc2l6ZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdzdHJlYW1fc2V0X3JlYWRfYnVmZmVyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3N0cmVhbV9zZXRfdGltZW91dCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fc2V0X3dyaXRlX2J1ZmZlcicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fc29ja2V0X2FjY2VwdCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fc29ja2V0X2NsaWVudCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fc29ja2V0X2VuYWJsZV9jcnlwdG8nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnc3RyZWFtX3NvY2tldF9nZXRfbmFtZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fc29ja2V0X3BhaXInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnc3RyZWFtX3NvY2tldF9yZWN2ZnJvbScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fc29ja2V0X3NlbmR0bycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fc29ja2V0X3NlcnZlcicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJlYW1fc29ja2V0X3NodXRkb3duJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3N0cmVhbV9zdXBwb3J0c19sb2NrJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3N0cmVhbV93cmFwcGVyX3JlZ2lzdGVyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNi5zdHViJywgJ3N0cmVhbV93cmFwcGVyX3Jlc3RvcmUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF82LnN0dWInLCAnc3RyZWFtX3dyYXBwZXJfdW5yZWdpc3RlcicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzYuc3R1YicsICdzdHJmdGltZScgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ3N0cmlwX3RhZ3MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnc3RyaXBjc2xhc2hlcycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICdzdHJpcG9zJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ3N0cmlwc2xhc2hlcycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICdzdHJpc3RyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ3N0cmxlbicgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ3N0cm5hdGNhc2VjbXAnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8wLnN0dWInLCAnc3RybmF0Y21wJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3N0cm5jYXNlY21wJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAnc3RybmNtcCcgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ3N0cnBicmsnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnc3RycG9zJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ3N0cnB0aW1lJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3N0cnJjaHInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnc3RycmV2JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ3N0cnJpcG9zJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ3N0cnJwb3MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnc3Ryc3BuJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3N0cnN0cicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICdzdHJ0b2snID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8wLnN0dWInLCAnc3RydG9sb3dlcicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICdzdHJ0b3RpbWUnID0+ICdkYXRlL2RhdGUuc3R1YicsICdzdHJ0b3VwcGVyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ3N0cnRyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ3N0cnZhbCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICdzdWJzdHInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnc3Vic3RyX2NvbXBhcmUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8xLnN0dWInLCAnc3Vic3RyX2NvdW50JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3N1YnN0cl9yZXBsYWNlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ3N1aG9zaW5fZW5jcnlwdF9jb29raWUnID0+ICdzdWhvc2luL3N1aG9zaW4uc3R1YicsICdzdWhvc2luX2dldF9yYXdfY29va2llcycgPT4gJ3N1aG9zaW4vc3Vob3Npbi5zdHViJywgJ3N2bl9hZGQnID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX2F1dGhfZ2V0X3BhcmFtZXRlcicgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fYXV0aF9zZXRfcGFyYW1ldGVyJyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9ibGFtZScgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fY2F0JyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9jaGVja291dCcgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fY2xlYW51cCcgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fY2xpZW50X3ZlcnNpb24nID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX2NvbW1pdCcgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fY29uZmlnX2Vuc3VyZScgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fY29weScgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZGVsZXRlJyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9kaWZmJyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9leHBvcnQnID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX2ZzX2Fib3J0X3R4bicgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfYXBwbHlfdGV4dCcgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfYmVnaW5fdHhuMicgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfY2hhbmdlX25vZGVfcHJvcCcgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfY2hlY2tfcGF0aCcgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfY29udGVudHNfY2hhbmdlZCcgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfY29weScgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfZGVsZXRlJyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9mc19kaXJfZW50cmllcycgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfZmlsZV9jb250ZW50cycgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfZmlsZV9sZW5ndGgnID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX2ZzX2lzX2RpcicgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfaXNfZmlsZScgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfbWFrZV9kaXInID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX2ZzX21ha2VfZmlsZScgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfbm9kZV9jcmVhdGVkX3JldicgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfbm9kZV9wcm9wJyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9mc19wcm9wc19jaGFuZ2VkJyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9mc19yZXZpc2lvbl9wcm9wJyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9mc19yZXZpc2lvbl9yb290JyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9mc190eG5fcm9vdCcgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fZnNfeW91bmdlc3RfcmV2JyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9pbXBvcnQnID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX2luZm8nID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX2xvY2snID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX2xvZycgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fbHMnID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX21rZGlyJyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9tb3ZlJyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9wcm9wZ2V0JyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9wcm9wbGlzdCcgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fcmVwb3NfY3JlYXRlJyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9yZXBvc19mcycgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fcmVwb3NfZnNfYmVnaW5fdHhuX2Zvcl9jb21taXQnID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX3JlcG9zX2ZzX2NvbW1pdF90eG4nID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX3JlcG9zX2hvdGNvcHknID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX3JlcG9zX29wZW4nID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX3JlcG9zX3JlY292ZXInID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX3Jlc29sdmVkJyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl9yZXZlcnQnID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX3N0YXR1cycgPT4gJ3N2bi9zdm4uc3R1YicsICdzdm5fc3dpdGNoJyA9PiAnc3ZuL3N2bi5zdHViJywgJ3N2bl91bmxvY2snID0+ICdzdm4vc3ZuLnN0dWInLCAnc3ZuX3VwZGF0ZScgPT4gJ3N2bi9zdm4uc3R1YicsICdzd29vbGVfYXN5bmNfZG5zX2xvb2t1cF9jb3JvJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9hc3luY19zZXQnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2NsZWFyX2Ruc19jYWNoZScgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfY2xlYXJfZXJyb3InID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2NsaWVudF9zZWxlY3QnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2Nvcm91dGluZV9jcmVhdGUnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2Nvcm91dGluZV9kZWZlcicgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfY29yb3V0aW5lX3NvY2tldHBhaXInID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2NwdV9udW0nID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2Vycm5vJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9lcnJvcl9sb2cnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2Vycm9yX2xvZ19leCcgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfZXZlbnRfYWRkJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9ldmVudF9jeWNsZScgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfZXZlbnRfZGVmZXInID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2V2ZW50X2RlbCcgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfZXZlbnRfZGlzcGF0Y2gnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2V2ZW50X2V4aXQnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2V2ZW50X2lzc2V0JyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9ldmVudF9zZXQnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2V2ZW50X3dhaXQnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2V2ZW50X3dyaXRlJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9nZXRfbG9jYWxfaXAnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2dldF9sb2NhbF9tYWMnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2dldF9taW1lX3R5cGUnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2dldF9vYmplY3RfYnlfaGFuZGxlJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9nZXRfb2JqZWN0cycgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfZ2V0X3ZtX3N0YXR1cycgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfaGFzaGNvZGUnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX2lnbm9yZV9lcnJvcicgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfaW50ZXJuYWxfY2FsbF91c2VyX3NodXRkb3duX2JlZ2luJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9sYXN0X2Vycm9yJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9taW1lX3R5cGVfYWRkJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9taW1lX3R5cGVfZGVsZXRlJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9taW1lX3R5cGVfZXhpc3RzJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9taW1lX3R5cGVfZ2V0JyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9taW1lX3R5cGVfbGlzdCcgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfbWltZV90eXBlX3NldCcgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfc2VsZWN0JyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9zZXRfcHJvY2Vzc19uYW1lJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9zdHJlcnJvcicgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfc3Vic3RyX2pzb25fZGVjb2RlJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV9zdWJzdHJfdW5zZXJpYWxpemUnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX3Rlc3Rfa2VybmVsX2Nvcm91dGluZScgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfdGltZXJfYWZ0ZXInID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX3RpbWVyX2NsZWFyJyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV90aW1lcl9jbGVhcl9hbGwnID0+ICdzd29vbGUvZnVuY3Rpb25zLnN0dWInLCAnc3dvb2xlX3RpbWVyX2V4aXN0cycgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfdGltZXJfaW5mbycgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfdGltZXJfbGlzdCcgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfdGltZXJfc2V0JyA9PiAnc3dvb2xlL2Z1bmN0aW9ucy5zdHViJywgJ3N3b29sZV90aW1lcl9zdGF0cycgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfdGltZXJfdGljaycgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzd29vbGVfdmVyc2lvbicgPT4gJ3N3b29sZS9mdW5jdGlvbnMuc3R1YicsICdzeWJhc2VfYWZmZWN0ZWRfcm93cycgPT4gJ3N5YmFzZS9zeWJhc2VfY3Quc3R1YicsICdzeWJhc2VfY2xvc2UnID0+ICdzeWJhc2Uvc3liYXNlX2N0LnN0dWInLCAnc3liYXNlX2Nvbm5lY3QnID0+ICdzeWJhc2Uvc3liYXNlX2N0LnN0dWInLCAnc3liYXNlX2RhdGFfc2VlaycgPT4gJ3N5YmFzZS9zeWJhc2VfY3Quc3R1YicsICdzeWJhc2VfZGVhZGxvY2tfcmV0cnlfY291bnQnID0+ICdzeWJhc2Uvc3liYXNlX2N0LnN0dWInLCAnc3liYXNlX2ZldGNoX2FycmF5JyA9PiAnc3liYXNlL3N5YmFzZV9jdC5zdHViJywgJ3N5YmFzZV9mZXRjaF9hc3NvYycgPT4gJ3N5YmFzZS9zeWJhc2VfY3Quc3R1YicsICdzeWJhc2VfZmV0Y2hfZmllbGQnID0+ICdzeWJhc2Uvc3liYXNlX2N0LnN0dWInLCAnc3liYXNlX2ZldGNoX29iamVjdCcgPT4gJ3N5YmFzZS9zeWJhc2VfY3Quc3R1YicsICdzeWJhc2VfZmV0Y2hfcm93JyA9PiAnc3liYXNlL3N5YmFzZV9jdC5zdHViJywgJ3N5YmFzZV9maWVsZF9zZWVrJyA9PiAnc3liYXNlL3N5YmFzZV9jdC5zdHViJywgJ3N5YmFzZV9mcmVlX3Jlc3VsdCcgPT4gJ3N5YmFzZS9zeWJhc2VfY3Quc3R1YicsICdzeWJhc2VfZ2V0X2xhc3RfbWVzc2FnZScgPT4gJ3N5YmFzZS9zeWJhc2VfY3Quc3R1YicsICdzeWJhc2VfbWluX2NsaWVudF9zZXZlcml0eScgPT4gJ3N5YmFzZS9zeWJhc2VfY3Quc3R1YicsICdzeWJhc2VfbWluX3NlcnZlcl9zZXZlcml0eScgPT4gJ3N5YmFzZS9zeWJhc2VfY3Quc3R1YicsICdzeWJhc2VfbnVtX2ZpZWxkcycgPT4gJ3N5YmFzZS9zeWJhc2VfY3Quc3R1YicsICdzeWJhc2VfbnVtX3Jvd3MnID0+ICdzeWJhc2Uvc3liYXNlX2N0LnN0dWInLCAnc3liYXNlX3Bjb25uZWN0JyA9PiAnc3liYXNlL3N5YmFzZV9jdC5zdHViJywgJ3N5YmFzZV9xdWVyeScgPT4gJ3N5YmFzZS9zeWJhc2VfY3Quc3R1YicsICdzeWJhc2VfcmVzdWx0JyA9PiAnc3liYXNlL3N5YmFzZV9jdC5zdHViJywgJ3N5YmFzZV9zZWxlY3RfZGInID0+ICdzeWJhc2Uvc3liYXNlX2N0LnN0dWInLCAnc3liYXNlX3NldF9tZXNzYWdlX2hhbmRsZXInID0+ICdzeWJhc2Uvc3liYXNlX2N0LnN0dWInLCAnc3liYXNlX3VuYnVmZmVyZWRfcXVlcnknID0+ICdzeWJhc2Uvc3liYXNlX2N0LnN0dWInLCAnc3ltbGluaycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICdzeXNfZ2V0X3RlbXBfZGlyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOS5zdHViJywgJ3N5c19nZXRsb2FkYXZnJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ3N5c2xvZycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICdzeXN0ZW0nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAndGFuJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMy5zdHViJywgJ3RhbmgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAndGVtcG5hbScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICd0ZXh0ZG9tYWluJyA9PiAnZ2V0dGV4dC9nZXR0ZXh0LnN0dWInLCAndGlkeV9hY2Nlc3NfY291bnQnID0+ICd0aWR5L3RpZHkuc3R1YicsICd0aWR5X2NsZWFuX3JlcGFpcicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ3RpZHlfY29uZmlnX2NvdW50JyA9PiAndGlkeS90aWR5LnN0dWInLCAndGlkeV9kaWFnbm9zZScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ3RpZHlfZXJyb3JfY291bnQnID0+ICd0aWR5L3RpZHkuc3R1YicsICd0aWR5X2dldF9ib2R5JyA9PiAndGlkeS90aWR5LnN0dWInLCAndGlkeV9nZXRfY29uZmlnJyA9PiAndGlkeS90aWR5LnN0dWInLCAndGlkeV9nZXRfZXJyb3JfYnVmZmVyJyA9PiAndGlkeS90aWR5LnN0dWInLCAndGlkeV9nZXRfaGVhZCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ3RpZHlfZ2V0X2h0bWwnID0+ICd0aWR5L3RpZHkuc3R1YicsICd0aWR5X2dldF9odG1sX3ZlcicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ3RpZHlfZ2V0X29wdF9kb2MnID0+ICd0aWR5L3RpZHkuc3R1YicsICd0aWR5X2dldF9vdXRwdXQnID0+ICd0aWR5L3RpZHkuc3R1YicsICd0aWR5X2dldF9yZWxlYXNlJyA9PiAndGlkeS90aWR5LnN0dWInLCAndGlkeV9nZXRfcm9vdCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ3RpZHlfZ2V0X3N0YXR1cycgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ3RpZHlfZ2V0b3B0JyA9PiAndGlkeS90aWR5LnN0dWInLCAndGlkeV9pc194aHRtbCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ3RpZHlfaXNfeG1sJyA9PiAndGlkeS90aWR5LnN0dWInLCAndGlkeV9wYXJzZV9maWxlJyA9PiAndGlkeS90aWR5LnN0dWInLCAndGlkeV9wYXJzZV9zdHJpbmcnID0+ICd0aWR5L3RpZHkuc3R1YicsICd0aWR5X3JlcGFpcl9maWxlJyA9PiAndGlkeS90aWR5LnN0dWInLCAndGlkeV9yZXBhaXJfc3RyaW5nJyA9PiAndGlkeS90aWR5LnN0dWInLCAndGlkeV93YXJuaW5nX2NvdW50JyA9PiAndGlkeS90aWR5LnN0dWInLCAndGltZScgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ3RpbWVfbmFub3NsZWVwJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3RpbWVfc2xlZXBfdW50aWwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8wLnN0dWInLCAndGltZXpvbmVfYWJicmV2aWF0aW9uc19saXN0JyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAndGltZXpvbmVfaWRlbnRpZmllcnNfbGlzdCcgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ3RpbWV6b25lX2xvY2F0aW9uX2dldCcgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ3RpbWV6b25lX25hbWVfZnJvbV9hYmJyJyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAndGltZXpvbmVfbmFtZV9nZXQnID0+ICdkYXRlL2RhdGUuc3R1YicsICd0aW1lem9uZV9vZmZzZXRfZ2V0JyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAndGltZXpvbmVfb3BlbicgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ3RpbWV6b25lX3RyYW5zaXRpb25zX2dldCcgPT4gJ2RhdGUvZGF0ZS5zdHViJywgJ3RpbWV6b25lX3ZlcnNpb25fZ2V0JyA9PiAnZGF0ZS9kYXRlLnN0dWInLCAndG1wZmlsZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICd0b2tlbl9nZXRfYWxsJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ3Rva2VuX25hbWUnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAndG91Y2gnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAndHJhaXRfZXhpc3RzJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAndHJhbnNsaXRlcmF0b3JfY3JlYXRlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAndHJhbnNsaXRlcmF0b3JfY3JlYXRlX2Zyb21fcnVsZXMnID0+ICdpbnRsL2ludGwuc3R1YicsICd0cmFuc2xpdGVyYXRvcl9jcmVhdGVfaW52ZXJzZScgPT4gJ2ludGwvaW50bC5zdHViJywgJ3RyYW5zbGl0ZXJhdG9yX2dldF9lcnJvcl9jb2RlJyA9PiAnaW50bC9pbnRsLnN0dWInLCAndHJhbnNsaXRlcmF0b3JfZ2V0X2Vycm9yX21lc3NhZ2UnID0+ICdpbnRsL2ludGwuc3R1YicsICd0cmFuc2xpdGVyYXRvcl9saXN0X2lkcycgPT4gJ2ludGwvaW50bC5zdHViJywgJ3RyYW5zbGl0ZXJhdG9yX3RyYW5zbGl0ZXJhdGUnID0+ICdpbnRsL2ludGwuc3R1YicsICd0cmlnZ2VyX2Vycm9yJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAndHJpbScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICd1YXNvcnQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF84LnN0dWInLCAndWNmaXJzdCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzEuc3R1YicsICd1Y3dvcmRzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMS5zdHViJywgJ3Vrc29ydCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzguc3R1YicsICd1bWFzaycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzUuc3R1YicsICd1bmlxaWQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8zLnN0dWInLCAndW5peHRvamQnID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ3VubGluaycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICd1bnBhY2snID0+ICdzdGFuZGFyZC9zdGFuZGFyZF83LnN0dWInLCAndW5yZWdpc3Rlcl9ldmVudF9oYW5kbGVyJyA9PiAnemVuZC96ZW5kLnN0dWInLCAndW5yZWdpc3Rlcl90aWNrX2Z1bmN0aW9uJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ3Vuc2VyaWFsaXplJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfNC5zdHViJywgJ3VvcHpfYWRkX2Z1bmN0aW9uJyA9PiAndW9wei91b3B6LnN0dWInLCAndW9wel9hbGxvd19leGl0JyA9PiAndW9wei91b3B6LnN0dWInLCAndW9wel9jYWxsX3VzZXJfZnVuYycgPT4gJ3VvcHovdW9wei5zdHViJywgJ3VvcHpfY2FsbF91c2VyX2Z1bmNfYXJyYXknID0+ICd1b3B6L3VvcHouc3R1YicsICd1b3B6X2RlbF9mdW5jdGlvbicgPT4gJ3VvcHovdW9wei5zdHViJywgJ3VvcHpfZXh0ZW5kJyA9PiAndW9wei91b3B6LnN0dWInLCAndW9wel9mbGFncycgPT4gJ3VvcHovdW9wei5zdHViJywgJ3VvcHpfZ2V0X2V4aXRfc3RhdHVzJyA9PiAndW9wei91b3B6LnN0dWInLCAndW9wel9nZXRfaG9vaycgPT4gJ3VvcHovdW9wei5zdHViJywgJ3VvcHpfZ2V0X21vY2snID0+ICd1b3B6L3VvcHouc3R1YicsICd1b3B6X2dldF9wcm9wZXJ0eScgPT4gJ3VvcHovdW9wei5zdHViJywgJ3VvcHpfZ2V0X3JldHVybicgPT4gJ3VvcHovdW9wei5zdHViJywgJ3VvcHpfZ2V0X3N0YXRpYycgPT4gJ3VvcHovdW9wei5zdHViJywgJ3VvcHpfaW1wbGVtZW50JyA9PiAndW9wei91b3B6LnN0dWInLCAndW9wel9yZWRlZmluZScgPT4gJ3VvcHovdW9wei5zdHViJywgJ3VvcHpfc2V0X2hvb2snID0+ICd1b3B6L3VvcHouc3R1YicsICd1b3B6X3NldF9tb2NrJyA9PiAndW9wei91b3B6LnN0dWInLCAndW9wel9zZXRfcHJvcGVydHknID0+ICd1b3B6L3VvcHouc3R1YicsICd1b3B6X3NldF9yZXR1cm4nID0+ICd1b3B6L3VvcHouc3R1YicsICd1b3B6X3NldF9zdGF0aWMnID0+ICd1b3B6L3VvcHouc3R1YicsICd1b3B6X3VuZGVmaW5lJyA9PiAndW9wei91b3B6LnN0dWInLCAndW9wel91bnNldF9ob29rJyA9PiAndW9wei91b3B6LnN0dWInLCAndW9wel91bnNldF9tb2NrJyA9PiAndW9wei91b3B6LnN0dWInLCAndW9wel91bnNldF9yZXR1cm4nID0+ICd1b3B6L3VvcHouc3R1YicsICd1cGxvYWRwcm9ncmVzc19nZXRfY29udGVudHMnID0+ICd1cGxvYWRwcm9ncmVzcy91cGxvYWRwcm9ncmVzcy5zdHViJywgJ3VwbG9hZHByb2dyZXNzX2dldF9pbmZvJyA9PiAndXBsb2FkcHJvZ3Jlc3MvdXBsb2FkcHJvZ3Jlc3Muc3R1YicsICd1cmxkZWNvZGUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAndXJsZW5jb2RlJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMi5zdHViJywgJ3VzZV9zb2FwX2Vycm9yX2hhbmRsZXInID0+ICdzb2FwL3NvYXAuc3R1YicsICd1c2VyX2Vycm9yJyA9PiAnQ29yZS9Db3JlLnN0dWInLCAndXNsZWVwJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfMC5zdHViJywgJ3Vzb3J0JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfOC5zdHViJywgJ3V0ZjhfZGVjb2RlJyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICd1dGY4X2VuY29kZScgPT4gJ3N0YW5kYXJkL2Jhc2ljLnN0dWInLCAndXVpZF9jb21wYXJlJyA9PiAndXVpZC91dWlkX2Muc3R1YicsICd1dWlkX2NyZWF0ZScgPT4gJ3V1aWQvdXVpZF9jLnN0dWInLCAndXVpZF9nZW5lcmF0ZV9tZDUnID0+ICd1dWlkL3V1aWRfYy5zdHViJywgJ3V1aWRfZ2VuZXJhdGVfc2hhMScgPT4gJ3V1aWQvdXVpZF9jLnN0dWInLCAndXVpZF9pc19udWxsJyA9PiAndXVpZC91dWlkX2Muc3R1YicsICd1dWlkX2lzX3ZhbGlkJyA9PiAndXVpZC91dWlkX2Muc3R1YicsICd1dWlkX21hYycgPT4gJ3V1aWQvdXVpZF9jLnN0dWInLCAndXVpZF9wYXJzZScgPT4gJ3V1aWQvdXVpZF9jLnN0dWInLCAndXVpZF90aW1lJyA9PiAndXVpZC91dWlkX2Muc3R1YicsICd1dWlkX3R5cGUnID0+ICd1dWlkL3V1aWRfYy5zdHViJywgJ3V1aWRfdW5wYXJzZScgPT4gJ3V1aWQvdXVpZF9jLnN0dWInLCAndXVpZF92YXJpYW50JyA9PiAndXVpZC91dWlkX2Muc3R1YicsICd1dl9hY2NlcHQnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9hc3luY19pbml0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfYXN5bmNfc2VuZCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2NoZGlyJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfY2hlY2tfaW5pdCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2NoZWNrX3N0YXJ0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfY2hlY2tfc3RvcCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2Nsb3NlJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfY3B1X2luZm8nID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9kZWZhdWx0X2xvb3AnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9lcnJfbmFtZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2V4ZXBhdGgnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9mc19jaG1vZCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2ZzX2Nob3duJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfZnNfY2xvc2UnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9mc19ldmVudF9pbml0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfZnNfZmNobW9kJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfZnNfZmNob3duJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfZnNfZmRhdGFzeW5jJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfZnNfZnN0YXQnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9mc19mc3luYycgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2ZzX2Z0cnVuY2F0ZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2ZzX2Z1dGltZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2ZzX2xpbmsnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9mc19sc3RhdCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2ZzX21rZGlyJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfZnNfb3BlbicgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2ZzX3BvbGxfaW5pdCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2ZzX3BvbGxfc3RhcnQnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9mc19wb2xsX3N0b3AnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9mc19yZWFkJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfZnNfcmVhZGRpcicgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2ZzX3JlYWRsaW5rJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfZnNfcmVuYW1lJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfZnNfcm1kaXInID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9mc19zZW5kZmlsZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2ZzX3N0YXQnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9mc19zeW1saW5rJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfZnNfdW5saW5rJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfZnNfdXRpbWUnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9mc193cml0ZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2dldF9mcmVlX21lbW9yeScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2dldF90b3RhbF9tZW1vcnknID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9nZXRhZGRyaW5mbycgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2d1ZXNzX2hhbmRsZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2hydGltZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2lkbGVfaW5pdCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2lkbGVfc3RhcnQnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9pZGxlX3N0b3AnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9pbnRlcmZhY2VfYWRkcmVzc2VzJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfaXA0X2FkZHInID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9pcDRfbmFtZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2lwNl9hZGRyJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfaXA2X25hbWUnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9pc19hY3RpdmUnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9pc19jbG9zaW5nJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfaXNfcmVhZGFibGUnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9pc193cml0YWJsZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2tpbGwnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9sYXN0X2Vycm9yJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfbGlzdGVuJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfbG9hZGF2ZycgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X2xvb3BfZGVsZXRlJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfbG9vcF9uZXcnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9tdXRleF9pbml0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfbXV0ZXhfbG9jaycgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X211dGV4X3RyeWxvY2snID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9ub3cnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9waXBlX2JpbmQnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9waXBlX2Nvbm5lY3QnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9waXBlX2luaXQnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9waXBlX29wZW4nID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9waXBlX3BlbmRpbmdfaW5zdGFuY2VzJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfcG9sbF9pbml0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfcG9sbF9zdGFydCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3BvbGxfc3RvcCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3ByZXBhcmVfaW5pdCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3ByZXBhcmVfc3RhcnQnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9wcmVwYXJlX3N0b3AnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9wcm9jZXNzX2tpbGwnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9xdWV1ZV93b3JrJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfcmVhZF9zdGFydCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3JlYWRfc3RvcCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3JlZicgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3Jlc2lkZW50X3NldF9tZW1vcnknID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9ydW4nID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9ydW5fb25jZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3J3bG9ja19pbml0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfcndsb2NrX3JkbG9jaycgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3J3bG9ja19yZHVubG9jaycgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3J3bG9ja190cnlyZGxvY2snID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9yd2xvY2tfdHJ5d3Jsb2NrJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfcndsb2NrX3dybG9jaycgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3J3bG9ja193cnVubG9jaycgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3NlbV9pbml0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfc2VtX3Bvc3QnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9zZW1fdHJ5d2FpdCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3NlbV93YWl0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfc2h1dGRvd24nID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl9zaWduYWxfc3RvcCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3NwYXduJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfc3RkaW9fbmV3JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfc3RvcCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3N0cmVycm9yJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfdGNwX2JpbmQnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl90Y3BfYmluZDYnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl90Y3BfY29ubmVjdCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3RjcF9jb25uZWN0NicgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3RjcF9nZXRwZWVybmFtZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3RjcF9nZXRzb2NrbmFtZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3RjcF9pbml0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfdGNwX25vZGVsYXknID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl90aW1lcl9hZ2FpbicgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3RpbWVyX2dldF9yZXBlYXQnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl90aW1lcl9pbml0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfdGltZXJfc2V0X3JlcGVhdCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3RpbWVyX3N0YXJ0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfdGltZXJfc3RvcCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3R0eV9nZXRfd2luc2l6ZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3R0eV9pbml0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfdHR5X3Jlc2V0X21vZGUnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl90dHlfc2V0X21vZGUnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl91ZHBfYmluZCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3VkcF9iaW5kNicgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3VkcF9nZXRzb2NrbmFtZScgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3VkcF9pbml0JyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfdWRwX3JlY3Zfc3RhcnQnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl91ZHBfcmVjdl9zdG9wJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfdWRwX3NlbmQnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl91ZHBfc2VuZDYnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl91ZHBfc2V0X2Jyb2FkY2FzdCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3VkcF9zZXRfbWVtYmVyc2hpcCcgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3VkcF9zZXRfbXVsdGljYXN0X2xvb3AnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl91ZHBfc2V0X211bHRpY2FzdF90dGwnID0+ICd1di91dl9mdW5jdGlvbnMuc3R1YicsICd1dl91bnJlZicgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3VwZGF0ZV90aW1lJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfdXB0aW1lJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfd2FsaycgPT4gJ3V2L3V2X2Z1bmN0aW9ucy5zdHViJywgJ3V2X3dyaXRlJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndXZfd3JpdGUyJyA9PiAndXYvdXZfZnVuY3Rpb25zLnN0dWInLCAndmFyX2R1bXAnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF80LnN0dWInLCAndmFyX2V4cG9ydCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzQuc3R1YicsICd2YXJpYW50X2FicycgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ3ZhcmlhbnRfYWRkJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAndmFyaWFudF9hbmQnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICd2YXJpYW50X2Nhc3QnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICd2YXJpYW50X2NhdCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ3ZhcmlhbnRfY21wJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAndmFyaWFudF9kYXRlX2Zyb21fdGltZXN0YW1wJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAndmFyaWFudF9kYXRlX3RvX3RpbWVzdGFtcCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ3ZhcmlhbnRfZGl2JyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAndmFyaWFudF9lcXYnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICd2YXJpYW50X2ZpeCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ3ZhcmlhbnRfZ2V0X3R5cGUnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICd2YXJpYW50X2lkaXYnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICd2YXJpYW50X2ltcCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ3ZhcmlhbnRfaW50JyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAndmFyaWFudF9tb2QnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICd2YXJpYW50X211bCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ3ZhcmlhbnRfbmVnJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAndmFyaWFudF9ub3QnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICd2YXJpYW50X29yJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAndmFyaWFudF9wb3cnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICd2YXJpYW50X3JvdW5kJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAndmFyaWFudF9zZXQnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICd2YXJpYW50X3NldF90eXBlJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAndmFyaWFudF9zdWInID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICd2YXJpYW50X3hvcicgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ3ZlcnNpb25fY29tcGFyZScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzkuc3R1YicsICd2ZnByaW50ZicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzIuc3R1YicsICd2aXJ0dWFsJyA9PiAnYXBhY2hlL2FwYWNoZS5zdHViJywgJ3ZwcmludGYnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAndnNwcmludGYnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8yLnN0dWInLCAnd2JfY2FsbF9mdW5jdGlvbicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9jcmVhdGVfZm9udCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9jcmVhdGVfaW1hZ2UnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfY3JlYXRlX21hc2snID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfY3JlYXRlX3RpbWVyJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2NyZWF0ZV93aW5kb3cnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfZGVsZXRlX2l0ZW1zJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2Rlc3Ryb3lfY29udHJvbCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9kZXN0cm95X2ZvbnQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfZGVzdHJveV9pbWFnZScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9kZXN0cm95X3RpbWVyJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2Rlc3Ryb3lfd2luZG93JyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2RyYXdfZWxsaXBzZScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9kcmF3X2ltYWdlJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2RyYXdfbGluZScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9kcmF3X3BvaW50JyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2RyYXdfcmVjdCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9kcmF3X3RleHQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfZXhlYycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9maW5kX2ZpbGUnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfZ2V0X2FkZHJlc3MnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfZ2V0X2NsYXNzJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2dldF9jb250cm9sJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2dldF9lbmFibGVkJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2dldF9lbnVtX2NhbGxiYWNrJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2dldF9mb2N1cycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9nZXRfZnVuY3Rpb25fYWRkcmVzcycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9nZXRfaG9va19jYWxsYmFjaycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9nZXRfaWQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfZ2V0X2ltYWdlX2RhdGEnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfZ2V0X2luc3RhbmNlJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2dldF9pdGVtX2NvdW50JyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2dldF9pdGVtX2xpc3QnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfZ2V0X2xldmVsJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2dldF9taWRpX2NhbGxiYWNrJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2dldF9wYXJlbnQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfZ2V0X3BpeGVsJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2dldF9wb3NpdGlvbicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9nZXRfcmVnaXN0cnlfa2V5JyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2dldF9zZWxlY3RlZCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9nZXRfc2l6ZScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9nZXRfc3RhdGUnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfZ2V0X3N5c3RlbV9pbmZvJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2dldF92YWx1ZScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9nZXRfdmlzaWJsZScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9sb2FkX2ltYWdlJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX2xvYWRfbGlicmFyeScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9tYWluX2xvb3AnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfbWVzc2FnZV9ib3gnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfcGVlaycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9wbGF5X3NvdW5kJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX3Bva2UnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2JfcmVmcmVzaCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9yZWxlYXNlX2xpYnJhcnknID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2Jfc2F2ZV9pbWFnZScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9zZW5kX21lc3NhZ2UnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2Jfc2V0X2FyZWEnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2Jfc2V0X2N1cnNvcicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9zZXRfZW5hYmxlZCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9zZXRfZm9jdXMnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2Jfc2V0X2ZvbnQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2Jfc2V0X2hhbmRsZXInID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2Jfc2V0X2ltYWdlJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX3NldF9pdGVtX2ltYWdlJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX3NldF9sb2NhdGlvbicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9zZXRfcG9zaXRpb24nID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2Jfc2V0X3JhbmdlJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX3NldF9yZWdpc3RyeV9rZXknID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2Jfc2V0X3NpemUnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2Jfc2V0X3N0YXRlJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX3NldF9zdHlsZScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9zZXRfdmlzaWJsZScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9zb3J0JyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3diX3N0b3Bfc291bmQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2Jfc3lzX2RsZ19jb2xvcicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3Yl9zeXNfZGxnX3BhdGgnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2Jfd2FpdCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3YnRlbXBfY2xlYXJfbGlzdHZpZXdfY29sdW1ucycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3YnRlbXBfY3JlYXRlX2NvbnRyb2wnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2J0ZW1wX2NyZWF0ZV9pdGVtJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3didGVtcF9jcmVhdGVfbGlzdHZpZXdfY29sdW1uJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3didGVtcF9jcmVhdGVfbGlzdHZpZXdfaXRlbScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3YnRlbXBfY3JlYXRlX21lbnUnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2J0ZW1wX2NyZWF0ZV9zdGF0dXNiYXJfaXRlbXMnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2J0ZW1wX2NyZWF0ZV90b29sYmFyJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3didGVtcF9jcmVhdGVfdHJlZXZpZXdfaXRlbScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3YnRlbXBfZ2V0X2xpc3R2aWV3X2NvbHVtbnMnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2J0ZW1wX2dldF9saXN0dmlld19pdGVtX2NoZWNrZWQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2J0ZW1wX2dldF9saXN0dmlld190ZXh0JyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3didGVtcF9nZXRfbWVudV9pdGVtX2NoZWNrZWQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2J0ZW1wX2dldF90ZXh0JyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3didGVtcF9nZXRfdHJlZXZpZXdfaXRlbV90ZXh0JyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3didGVtcF9zZWxlY3RfYWxsX2xpc3R2aWV3X2l0ZW1zJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3didGVtcF9zZWxlY3RfbGlzdHZpZXdfaXRlbScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3YnRlbXBfc2VsZWN0X3RhYicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3YnRlbXBfc2V0X2FjY2VsX3RhYmxlJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3didGVtcF9zZXRfbGlzdHZpZXdfaXRlbV9jaGVja2VkJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3didGVtcF9zZXRfbGlzdHZpZXdfaXRlbV90ZXh0JyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3didGVtcF9zZXRfbWVudV9pdGVtX2NoZWNrZWQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2J0ZW1wX3NldF9tZW51X2l0ZW1faW1hZ2UnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2J0ZW1wX3NldF9tZW51X2l0ZW1fc2VsZWN0ZWQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2J0ZW1wX3NldF90ZXh0JyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3didGVtcF9zZXRfdHJlZXZpZXdfaXRlbV9zZWxlY3RlZCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3YnRlbXBfc2V0X3RyZWV2aWV3X2l0ZW1fdGV4dCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3YnRlbXBfc2V0X3RyZWV2aWV3X2l0ZW1fdmFsdWUnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2J0ZW1wX3NldF92YWx1ZScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICd3YnRlbXBfc3lzX2RsZ19vcGVuJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ3didGVtcF9zeXNfZGxnX3NhdmUnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnd2RkeF9hZGRfdmFycycgPT4gJ3dkZHgvd2RkeC5zdHViJywgJ3dkZHhfZGVzZXJpYWxpemUnID0+ICd3ZGR4L3dkZHguc3R1YicsICd3ZGR4X3BhY2tldF9lbmQnID0+ICd3ZGR4L3dkZHguc3R1YicsICd3ZGR4X3BhY2tldF9zdGFydCcgPT4gJ3dkZHgvd2RkeC5zdHViJywgJ3dkZHhfc2VyaWFsaXplX3ZhbHVlJyA9PiAnd2RkeC93ZGR4LnN0dWInLCAnd2RkeF9zZXJpYWxpemVfdmFycycgPT4gJ3dkZHgvd2RkeC5zdHViJywgJ3dpbjMyX2NvbnRpbnVlX3NlcnZpY2UnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnd2luMzJfY3JlYXRlX3NlcnZpY2UnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnd2luMzJfZGVsZXRlX3NlcnZpY2UnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnd2luMzJfZ2V0X2xhc3RfY29udHJvbF9tZXNzYWdlJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ3dpbjMyX3BhdXNlX3NlcnZpY2UnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnd2luMzJfcXVlcnlfc2VydmljZV9zdGF0dXMnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnd2luMzJfc2V0X3NlcnZpY2Vfc3RhdHVzJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ3dpbjMyX3N0YXJ0X3NlcnZpY2UnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnd2luMzJfc3RhcnRfc2VydmljZV9jdHJsX2Rpc3BhdGNoZXInID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnd2luMzJfc3RvcF9zZXJ2aWNlJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ3dpbmNhY2hlX2ZjYWNoZV9maWxlaW5mbycgPT4gJ3dpbmNhY2hlL3dpbmNhY2hlLnN0dWInLCAnd2luY2FjaGVfZmNhY2hlX21lbWluZm8nID0+ICd3aW5jYWNoZS93aW5jYWNoZS5zdHViJywgJ3dpbmNhY2hlX2xvY2snID0+ICd3aW5jYWNoZS93aW5jYWNoZS5zdHViJywgJ3dpbmNhY2hlX29jYWNoZV9maWxlaW5mbycgPT4gJ3dpbmNhY2hlL3dpbmNhY2hlLnN0dWInLCAnd2luY2FjaGVfb2NhY2hlX21lbWluZm8nID0+ICd3aW5jYWNoZS93aW5jYWNoZS5zdHViJywgJ3dpbmNhY2hlX3JlZnJlc2hfaWZfY2hhbmdlZCcgPT4gJ3dpbmNhY2hlL3dpbmNhY2hlLnN0dWInLCAnd2luY2FjaGVfcnBsaXN0X2ZpbGVpbmZvJyA9PiAnd2luY2FjaGUvd2luY2FjaGUuc3R1YicsICd3aW5jYWNoZV9ycGxpc3RfbWVtaW5mbycgPT4gJ3dpbmNhY2hlL3dpbmNhY2hlLnN0dWInLCAnd2luY2FjaGVfc2NhY2hlX2luZm8nID0+ICd3aW5jYWNoZS93aW5jYWNoZS5zdHViJywgJ3dpbmNhY2hlX3NjYWNoZV9tZW1pbmZvJyA9PiAnd2luY2FjaGUvd2luY2FjaGUuc3R1YicsICd3aW5jYWNoZV91Y2FjaGVfYWRkJyA9PiAnd2luY2FjaGUvd2luY2FjaGUuc3R1YicsICd3aW5jYWNoZV91Y2FjaGVfY2FzJyA9PiAnd2luY2FjaGUvd2luY2FjaGUuc3R1YicsICd3aW5jYWNoZV91Y2FjaGVfY2xlYXInID0+ICd3aW5jYWNoZS93aW5jYWNoZS5zdHViJywgJ3dpbmNhY2hlX3VjYWNoZV9kZWMnID0+ICd3aW5jYWNoZS93aW5jYWNoZS5zdHViJywgJ3dpbmNhY2hlX3VjYWNoZV9kZWxldGUnID0+ICd3aW5jYWNoZS93aW5jYWNoZS5zdHViJywgJ3dpbmNhY2hlX3VjYWNoZV9leGlzdHMnID0+ICd3aW5jYWNoZS93aW5jYWNoZS5zdHViJywgJ3dpbmNhY2hlX3VjYWNoZV9nZXQnID0+ICd3aW5jYWNoZS93aW5jYWNoZS5zdHViJywgJ3dpbmNhY2hlX3VjYWNoZV9pbmMnID0+ICd3aW5jYWNoZS93aW5jYWNoZS5zdHViJywgJ3dpbmNhY2hlX3VjYWNoZV9pbmZvJyA9PiAnd2luY2FjaGUvd2luY2FjaGUuc3R1YicsICd3aW5jYWNoZV91Y2FjaGVfbWVtaW5mbycgPT4gJ3dpbmNhY2hlL3dpbmNhY2hlLnN0dWInLCAnd2luY2FjaGVfdWNhY2hlX3NldCcgPT4gJ3dpbmNhY2hlL3dpbmNhY2hlLnN0dWInLCAnd2luY2FjaGVfdW5sb2NrJyA9PiAnd2luY2FjaGUvd2luY2FjaGUuc3R1YicsICd3b3Jkd3JhcCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkXzAuc3R1YicsICd4Y2FjaGVfYXNtJyA9PiAneGNhY2hlL3hjYWNoZS5zdHViJywgJ3hjYWNoZV9jbGVhcl9jYWNoZScgPT4gJ3hjYWNoZS94Y2FjaGUuc3R1YicsICd4Y2FjaGVfY29yZWR1bXAnID0+ICd4Y2FjaGUveGNhY2hlLnN0dWInLCAneGNhY2hlX2NvdW50JyA9PiAneGNhY2hlL3hjYWNoZS5zdHViJywgJ3hjYWNoZV9jb3ZlcmFnZXJfZGVjb2RlJyA9PiAneGNhY2hlL3hjYWNoZS5zdHViJywgJ3hjYWNoZV9jb3ZlcmFnZXJfZ2V0JyA9PiAneGNhY2hlL3hjYWNoZS5zdHViJywgJ3hjYWNoZV9jb3ZlcmFnZXJfc3RhcnQnID0+ICd4Y2FjaGUveGNhY2hlLnN0dWInLCAneGNhY2hlX2NvdmVyYWdlcl9zdG9wJyA9PiAneGNhY2hlL3hjYWNoZS5zdHViJywgJ3hjYWNoZV9kYXNtX2ZpbGUnID0+ICd4Y2FjaGUveGNhY2hlLnN0dWInLCAneGNhY2hlX2Rhc21fc3RyaW5nJyA9PiAneGNhY2hlL3hjYWNoZS5zdHViJywgJ3hjYWNoZV9kZWMnID0+ICd4Y2FjaGUveGNhY2hlLnN0dWInLCAneGNhY2hlX2RlY29kZScgPT4gJ3hjYWNoZS94Y2FjaGUuc3R1YicsICd4Y2FjaGVfZW5jb2RlJyA9PiAneGNhY2hlL3hjYWNoZS5zdHViJywgJ3hjYWNoZV9nZXQnID0+ICd4Y2FjaGUveGNhY2hlLnN0dWInLCAneGNhY2hlX2dldF9kYXRhX3R5cGUnID0+ICd4Y2FjaGUveGNhY2hlLnN0dWInLCAneGNhY2hlX2dldF9vcF9zcGVjJyA9PiAneGNhY2hlL3hjYWNoZS5zdHViJywgJ3hjYWNoZV9nZXRfb3BfdHlwZScgPT4gJ3hjYWNoZS94Y2FjaGUuc3R1YicsICd4Y2FjaGVfZ2V0X29wY29kZScgPT4gJ3hjYWNoZS94Y2FjaGUuc3R1YicsICd4Y2FjaGVfZ2V0X29wY29kZV9zcGVjJyA9PiAneGNhY2hlL3hjYWNoZS5zdHViJywgJ3hjYWNoZV9pbmMnID0+ICd4Y2FjaGUveGNhY2hlLnN0dWInLCAneGNhY2hlX2luZm8nID0+ICd4Y2FjaGUveGNhY2hlLnN0dWInLCAneGNhY2hlX2lzX2F1dG9nbG9iYWwnID0+ICd4Y2FjaGUveGNhY2hlLnN0dWInLCAneGNhY2hlX2lzc2V0JyA9PiAneGNhY2hlL3hjYWNoZS5zdHViJywgJ3hjYWNoZV9saXN0JyA9PiAneGNhY2hlL3hjYWNoZS5zdHViJywgJ3hjYWNoZV9zZXQnID0+ICd4Y2FjaGUveGNhY2hlLnN0dWInLCAneGNhY2hlX3Vuc2V0JyA9PiAneGNhY2hlL3hjYWNoZS5zdHViJywgJ3hjYWNoZV91bnNldF9ieV9wcmVmaXgnID0+ICd4Y2FjaGUveGNhY2hlLnN0dWInLCAneGRlYnVnX2JyZWFrJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ3hkZWJ1Z19jYWxsX2NsYXNzJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ3hkZWJ1Z19jYWxsX2ZpbGUnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX2NhbGxfZnVuY3Rpb24nID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX2NhbGxfbGluZScgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfY2xlYXJfYWdncl9wcm9maWxpbmdfZGF0YScgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfY29kZV9jb3ZlcmFnZV9zdGFydGVkJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ3hkZWJ1Z19jb25uZWN0X3RvX2NsaWVudCcgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfZGVidWdfenZhbCcgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfZGVidWdfenZhbF9zdGRvdXQnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX2Rpc2FibGUnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX2R1bXBfYWdncl9wcm9maWxpbmdfZGF0YScgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfZHVtcF9zdXBlcmdsb2JhbHMnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX2VuYWJsZScgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfZ2V0X2NvZGVfY292ZXJhZ2UnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX2dldF9jb2xsZWN0ZWRfZXJyb3JzJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ3hkZWJ1Z19nZXRfZGVjbGFyZWRfdmFycycgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfZ2V0X2Zvcm1hdHRlZF9mdW5jdGlvbl9zdGFjaycgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfZ2V0X2Z1bmN0aW9uX2NvdW50JyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ3hkZWJ1Z19nZXRfZnVuY3Rpb25fc3RhY2snID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX2dldF9nY19ydW5fY291bnQnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX2dldF9nY190b3RhbF9jb2xsZWN0ZWRfcm9vdHMnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX2dldF9nY3N0YXRzX2ZpbGVuYW1lJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ3hkZWJ1Z19nZXRfaGVhZGVycycgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfZ2V0X21vbml0b3JlZF9mdW5jdGlvbnMnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX2dldF9wcm9maWxlcl9maWxlbmFtZScgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfZ2V0X3N0YWNrX2RlcHRoJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ3hkZWJ1Z19nZXRfdHJhY2VmaWxlX25hbWUnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX2luZm8nID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX2lzX2RlYnVnZ2VyX2FjdGl2ZScgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfaXNfZW5hYmxlZCcgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfbWVtb3J5X3VzYWdlJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ3hkZWJ1Z19ub3RpZnknID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX3BlYWtfbWVtb3J5X3VzYWdlJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ3hkZWJ1Z19wcmludF9mdW5jdGlvbl9zdGFjaycgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfc2V0X2ZpbHRlcicgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfc3RhcnRfY29kZV9jb3ZlcmFnZScgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfc3RhcnRfZXJyb3JfY29sbGVjdGlvbicgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfc3RhcnRfZnVuY3Rpb25fbW9uaXRvcicgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfc3RhcnRfZ2NzdGF0cycgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfc3RhcnRfdHJhY2UnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX3N0b3BfY29kZV9jb3ZlcmFnZScgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfc3RvcF9lcnJvcl9jb2xsZWN0aW9uJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ3hkZWJ1Z19zdG9wX2Z1bmN0aW9uX21vbml0b3InID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRlYnVnX3N0b3BfZ2NzdGF0cycgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfc3RvcF90cmFjZScgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfdGltZV9pbmRleCcgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICd4ZGVidWdfdmFyX2R1bXAnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAneGRpZmZfZmlsZV9iZGlmZicgPT4gJ3hkaWZmL3hkaWZmLnN0dWInLCAneGRpZmZfZmlsZV9iZGlmZl9zaXplJyA9PiAneGRpZmYveGRpZmYuc3R1YicsICd4ZGlmZl9maWxlX2JwYXRjaCcgPT4gJ3hkaWZmL3hkaWZmLnN0dWInLCAneGRpZmZfZmlsZV9kaWZmJyA9PiAneGRpZmYveGRpZmYuc3R1YicsICd4ZGlmZl9maWxlX2RpZmZfYmluYXJ5JyA9PiAneGRpZmYveGRpZmYuc3R1YicsICd4ZGlmZl9maWxlX21lcmdlMycgPT4gJ3hkaWZmL3hkaWZmLnN0dWInLCAneGRpZmZfZmlsZV9wYXRjaCcgPT4gJ3hkaWZmL3hkaWZmLnN0dWInLCAneGRpZmZfZmlsZV9wYXRjaF9iaW5hcnknID0+ICd4ZGlmZi94ZGlmZi5zdHViJywgJ3hkaWZmX2ZpbGVfcmFiZGlmZicgPT4gJ3hkaWZmL3hkaWZmLnN0dWInLCAneGRpZmZfc3RyaW5nX2JkaWZmJyA9PiAneGRpZmYveGRpZmYuc3R1YicsICd4ZGlmZl9zdHJpbmdfYmRpZmZfc2l6ZScgPT4gJ3hkaWZmL3hkaWZmLnN0dWInLCAneGRpZmZfc3RyaW5nX2JwYXRjaCcgPT4gJ3hkaWZmL3hkaWZmLnN0dWInLCAneGRpZmZfc3RyaW5nX2RpZmYnID0+ICd4ZGlmZi94ZGlmZi5zdHViJywgJ3hkaWZmX3N0cmluZ19kaWZmX2JpbmFyeScgPT4gJ3hkaWZmL3hkaWZmLnN0dWInLCAneGRpZmZfc3RyaW5nX21lcmdlMycgPT4gJ3hkaWZmL3hkaWZmLnN0dWInLCAneGRpZmZfc3RyaW5nX3BhdGNoJyA9PiAneGRpZmYveGRpZmYuc3R1YicsICd4ZGlmZl9zdHJpbmdfcGF0Y2hfYmluYXJ5JyA9PiAneGRpZmYveGRpZmYuc3R1YicsICd4ZGlmZl9zdHJpbmdfcmFiZGlmZicgPT4gJ3hkaWZmL3hkaWZmLnN0dWInLCAneGhwcm9mX2Rpc2FibGUnID0+ICd4aHByb2YveGhwcm9mLnN0dWInLCAneGhwcm9mX2VuYWJsZScgPT4gJ3hocHJvZi94aHByb2Yuc3R1YicsICd4aHByb2Zfc2FtcGxlX2Rpc2FibGUnID0+ICd4aHByb2YveGhwcm9mLnN0dWInLCAneGhwcm9mX3NhbXBsZV9lbmFibGUnID0+ICd4aHByb2YveGhwcm9mLnN0dWInLCAneG1sX2Vycm9yX3N0cmluZycgPT4gJ3htbC94bWwuc3R1YicsICd4bWxfZ2V0X2N1cnJlbnRfYnl0ZV9pbmRleCcgPT4gJ3htbC94bWwuc3R1YicsICd4bWxfZ2V0X2N1cnJlbnRfY29sdW1uX251bWJlcicgPT4gJ3htbC94bWwuc3R1YicsICd4bWxfZ2V0X2N1cnJlbnRfbGluZV9udW1iZXInID0+ICd4bWwveG1sLnN0dWInLCAneG1sX2dldF9lcnJvcl9jb2RlJyA9PiAneG1sL3htbC5zdHViJywgJ3htbF9wYXJzZScgPT4gJ3htbC94bWwuc3R1YicsICd4bWxfcGFyc2VfaW50b19zdHJ1Y3QnID0+ICd4bWwveG1sLnN0dWInLCAneG1sX3BhcnNlcl9jcmVhdGUnID0+ICd4bWwveG1sLnN0dWInLCAneG1sX3BhcnNlcl9jcmVhdGVfbnMnID0+ICd4bWwveG1sLnN0dWInLCAneG1sX3BhcnNlcl9mcmVlJyA9PiAneG1sL3htbC5zdHViJywgJ3htbF9wYXJzZXJfZ2V0X29wdGlvbicgPT4gJ3htbC94bWwuc3R1YicsICd4bWxfcGFyc2VyX3NldF9vcHRpb24nID0+ICd4bWwveG1sLnN0dWInLCAneG1sX3NldF9jaGFyYWN0ZXJfZGF0YV9oYW5kbGVyJyA9PiAneG1sL3htbC5zdHViJywgJ3htbF9zZXRfZGVmYXVsdF9oYW5kbGVyJyA9PiAneG1sL3htbC5zdHViJywgJ3htbF9zZXRfZWxlbWVudF9oYW5kbGVyJyA9PiAneG1sL3htbC5zdHViJywgJ3htbF9zZXRfZW5kX25hbWVzcGFjZV9kZWNsX2hhbmRsZXInID0+ICd4bWwveG1sLnN0dWInLCAneG1sX3NldF9leHRlcm5hbF9lbnRpdHlfcmVmX2hhbmRsZXInID0+ICd4bWwveG1sLnN0dWInLCAneG1sX3NldF9ub3RhdGlvbl9kZWNsX2hhbmRsZXInID0+ICd4bWwveG1sLnN0dWInLCAneG1sX3NldF9vYmplY3QnID0+ICd4bWwveG1sLnN0dWInLCAneG1sX3NldF9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2hhbmRsZXInID0+ICd4bWwveG1sLnN0dWInLCAneG1sX3NldF9zdGFydF9uYW1lc3BhY2VfZGVjbF9oYW5kbGVyJyA9PiAneG1sL3htbC5zdHViJywgJ3htbF9zZXRfdW5wYXJzZWRfZW50aXR5X2RlY2xfaGFuZGxlcicgPT4gJ3htbC94bWwuc3R1YicsICd4bWxycGNfZGVjb2RlJyA9PiAneG1scnBjL3htbHJwYy5zdHViJywgJ3htbHJwY19kZWNvZGVfcmVxdWVzdCcgPT4gJ3htbHJwYy94bWxycGMuc3R1YicsICd4bWxycGNfZW5jb2RlJyA9PiAneG1scnBjL3htbHJwYy5zdHViJywgJ3htbHJwY19lbmNvZGVfcmVxdWVzdCcgPT4gJ3htbHJwYy94bWxycGMuc3R1YicsICd4bWxycGNfZ2V0X3R5cGUnID0+ICd4bWxycGMveG1scnBjLnN0dWInLCAneG1scnBjX2lzX2ZhdWx0JyA9PiAneG1scnBjL3htbHJwYy5zdHViJywgJ3htbHJwY19wYXJzZV9tZXRob2RfZGVzY3JpcHRpb25zJyA9PiAneG1scnBjL3htbHJwYy5zdHViJywgJ3htbHJwY19zZXJ2ZXJfYWRkX2ludHJvc3BlY3Rpb25fZGF0YScgPT4gJ3htbHJwYy94bWxycGMuc3R1YicsICd4bWxycGNfc2VydmVyX2NhbGxfbWV0aG9kJyA9PiAneG1scnBjL3htbHJwYy5zdHViJywgJ3htbHJwY19zZXJ2ZXJfY3JlYXRlJyA9PiAneG1scnBjL3htbHJwYy5zdHViJywgJ3htbHJwY19zZXJ2ZXJfZGVzdHJveScgPT4gJ3htbHJwYy94bWxycGMuc3R1YicsICd4bWxycGNfc2VydmVyX3JlZ2lzdGVyX2ludHJvc3BlY3Rpb25fY2FsbGJhY2snID0+ICd4bWxycGMveG1scnBjLnN0dWInLCAneG1scnBjX3NlcnZlcl9yZWdpc3Rlcl9tZXRob2QnID0+ICd4bWxycGMveG1scnBjLnN0dWInLCAneG1scnBjX3NldF90eXBlJyA9PiAneG1scnBjL3htbHJwYy5zdHViJywgJ3htbHdyaXRlcl9lbmRfYXR0cmlidXRlJyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl9lbmRfY2RhdGEnID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAneG1sd3JpdGVyX2VuZF9jb21tZW50JyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl9lbmRfZG9jdW1lbnQnID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAneG1sd3JpdGVyX2VuZF9kdGQnID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAneG1sd3JpdGVyX2VuZF9kdGRfYXR0bGlzdCcgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfZW5kX2R0ZF9lbGVtZW50JyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl9lbmRfZHRkX2VudGl0eScgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfZW5kX2VsZW1lbnQnID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAneG1sd3JpdGVyX2VuZF9waScgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfZmx1c2gnID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAneG1sd3JpdGVyX2Z1bGxfZW5kX2VsZW1lbnQnID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAneG1sd3JpdGVyX29wZW5fbWVtb3J5JyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl9vcGVuX3VyaScgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfb3V0cHV0X21lbW9yeScgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfc2V0X2luZGVudCcgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfc2V0X2luZGVudF9zdHJpbmcnID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAneG1sd3JpdGVyX3N0YXJ0X2F0dHJpYnV0ZScgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfc3RhcnRfYXR0cmlidXRlX25zJyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl9zdGFydF9jZGF0YScgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfc3RhcnRfY29tbWVudCcgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfc3RhcnRfZG9jdW1lbnQnID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAneG1sd3JpdGVyX3N0YXJ0X2R0ZCcgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfc3RhcnRfZHRkX2F0dGxpc3QnID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAneG1sd3JpdGVyX3N0YXJ0X2R0ZF9lbGVtZW50JyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl9zdGFydF9kdGRfZW50aXR5JyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl9zdGFydF9lbGVtZW50JyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl9zdGFydF9lbGVtZW50X25zJyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl9zdGFydF9waScgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfdGV4dCcgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfd3JpdGVfYXR0cmlidXRlJyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl93cml0ZV9hdHRyaWJ1dGVfbnMnID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAneG1sd3JpdGVyX3dyaXRlX2NkYXRhJyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl93cml0ZV9jb21tZW50JyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl93cml0ZV9kdGQnID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAneG1sd3JpdGVyX3dyaXRlX2R0ZF9hdHRsaXN0JyA9PiAneG1sd3JpdGVyL3htbHdyaXRlci5zdHViJywgJ3htbHdyaXRlcl93cml0ZV9kdGRfZWxlbWVudCcgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfd3JpdGVfZHRkX2VudGl0eScgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfd3JpdGVfZWxlbWVudCcgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfd3JpdGVfZWxlbWVudF9ucycgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4bWx3cml0ZXJfd3JpdGVfcGknID0+ICd4bWx3cml0ZXIveG1sd3JpdGVyLnN0dWInLCAneG1sd3JpdGVyX3dyaXRlX3JhdycgPT4gJ3htbHdyaXRlci94bWx3cml0ZXIuc3R1YicsICd4eHRlYV9kZWNyeXB0JyA9PiAneHh0ZWEveHh0ZWEuc3R1YicsICd4eHRlYV9lbmNyeXB0JyA9PiAneHh0ZWEveHh0ZWEuc3R1YicsICd5YW1sX2VtaXQnID0+ICd5YW1sL3lhbWwuc3R1YicsICd5YW1sX2VtaXRfZmlsZScgPT4gJ3lhbWwveWFtbC5zdHViJywgJ3lhbWxfcGFyc2UnID0+ICd5YW1sL3lhbWwuc3R1YicsICd5YW1sX3BhcnNlX2ZpbGUnID0+ICd5YW1sL3lhbWwuc3R1YicsICd5YW1sX3BhcnNlX3VybCcgPT4gJ3lhbWwveWFtbC5zdHViJywgJ3plbV9nZXRfZXh0ZW5zaW9uX2luZm9fYnlfaWQnID0+ICdaZW5kVXRpbHMvWmVuZFV0aWxzLnN0dWInLCAnemVtX2dldF9leHRlbnNpb25faW5mb19ieV9uYW1lJyA9PiAnWmVuZFV0aWxzL1plbmRVdGlscy5zdHViJywgJ3plbV9nZXRfZXh0ZW5zaW9uc19pbmZvJyA9PiAnWmVuZFV0aWxzL1plbmRVdGlscy5zdHViJywgJ3plbV9nZXRfbGljZW5zZV9pbmZvJyA9PiAnWmVuZFV0aWxzL1plbmRVdGlscy5zdHViJywgJ3plbmRfY3VycmVudF9vYmZ1c2NhdGlvbl9sZXZlbCcgPT4gJ3plbmQvemVuZF9mLnN0dWInLCAnemVuZF9kaXNrX2NhY2hlX2NsZWFyJyA9PiAnWmVuZENhY2hlL1plbmRDYWNoZS5zdHViJywgJ3plbmRfZGlza19jYWNoZV9kZWxldGUnID0+ICdaZW5kQ2FjaGUvWmVuZENhY2hlLnN0dWInLCAnemVuZF9kaXNrX2NhY2hlX2ZldGNoJyA9PiAnWmVuZENhY2hlL1plbmRDYWNoZS5zdHViJywgJ3plbmRfZGlza19jYWNoZV9pbmZvJyA9PiAnWmVuZENhY2hlL1plbmRDYWNoZS5zdHViJywgJ3plbmRfZGlza19jYWNoZV9zdG9yZScgPT4gJ1plbmRDYWNoZS9aZW5kQ2FjaGUuc3R1YicsICd6ZW5kX2dldF9pZCcgPT4gJ3plbmQvemVuZF9mLnN0dWInLCAnemVuZF9pc19jb25maWd1cmF0aW9uX2NoYW5nZWQnID0+ICdaZW5kVXRpbHMvWmVuZFV0aWxzLnN0dWInLCAnemVuZF9sb2FkZXJfY3VycmVudF9maWxlJyA9PiAnemVuZC96ZW5kX2Yuc3R1YicsICd6ZW5kX2xvYWRlcl9lbmFibGVkJyA9PiAnemVuZC96ZW5kX2Yuc3R1YicsICd6ZW5kX2xvYWRlcl9maWxlX2VuY29kZWQnID0+ICd6ZW5kL3plbmRfZi5zdHViJywgJ3plbmRfbG9hZGVyX2ZpbGVfbGljZW5zZWQnID0+ICd6ZW5kL3plbmRfZi5zdHViJywgJ3plbmRfbG9hZGVyX2luc3RhbGxfbGljZW5zZScgPT4gJ3plbmQvemVuZF9mLnN0dWInLCAnemVuZF9sb2dvX2d1aWQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF8wLnN0dWInLCAnemVuZF9vYmZ1c2NhdGVfY2xhc3NfbmFtZScgPT4gJ3plbmQvemVuZF9mLnN0dWInLCAnemVuZF9vYmZ1c2NhdGVfZnVuY3Rpb25fbmFtZScgPT4gJ3plbmQvemVuZF9mLnN0dWInLCAnemVuZF9vcHRpbWl6ZXJfdmVyc2lvbicgPT4gJ3plbmQvemVuZF9mLnN0dWInLCAnemVuZF9ydW50aW1lX29iZnVzY2F0ZScgPT4gJ3plbmQvemVuZF9mLnN0dWInLCAnemVuZF9zZW5kX2J1ZmZlcicgPT4gJ3plbmQvemVuZC5zdHViJywgJ3plbmRfc2VuZF9maWxlJyA9PiAnemVuZC96ZW5kLnN0dWInLCAnemVuZF9zZXRfY29uZmlndXJhdGlvbl9jaGFuZ2VkJyA9PiAnWmVuZFV0aWxzL1plbmRVdGlscy5zdHViJywgJ3plbmRfc2htX2NhY2hlX2NsZWFyJyA9PiAnWmVuZENhY2hlL1plbmRDYWNoZS5zdHViJywgJ3plbmRfc2htX2NhY2hlX2RlbGV0ZScgPT4gJ1plbmRDYWNoZS9aZW5kQ2FjaGUuc3R1YicsICd6ZW5kX3NobV9jYWNoZV9mZXRjaCcgPT4gJ1plbmRDYWNoZS9aZW5kQ2FjaGUuc3R1YicsICd6ZW5kX3NobV9jYWNoZV9pbmZvJyA9PiAnWmVuZENhY2hlL1plbmRDYWNoZS5zdHViJywgJ3plbmRfc2htX2NhY2hlX3N0b3JlJyA9PiAnWmVuZENhY2hlL1plbmRDYWNoZS5zdHViJywgJ3plbmRfdmVyc2lvbicgPT4gJ0NvcmUvQ29yZS5zdHViJywgJ3ppcF9jbG9zZScgPT4gJ3ppcC96aXAuc3R1YicsICd6aXBfZW50cnlfY2xvc2UnID0+ICd6aXAvemlwLnN0dWInLCAnemlwX2VudHJ5X2NvbXByZXNzZWRzaXplJyA9PiAnemlwL3ppcC5zdHViJywgJ3ppcF9lbnRyeV9jb21wcmVzc2lvbm1ldGhvZCcgPT4gJ3ppcC96aXAuc3R1YicsICd6aXBfZW50cnlfZmlsZXNpemUnID0+ICd6aXAvemlwLnN0dWInLCAnemlwX2VudHJ5X25hbWUnID0+ICd6aXAvemlwLnN0dWInLCAnemlwX2VudHJ5X29wZW4nID0+ICd6aXAvemlwLnN0dWInLCAnemlwX2VudHJ5X3JlYWQnID0+ICd6aXAvemlwLnN0dWInLCAnemlwX29wZW4nID0+ICd6aXAvemlwLnN0dWInLCAnemlwX3JlYWQnID0+ICd6aXAvemlwLnN0dWInLCAnemxpYl9kZWNvZGUnID0+ICd6bGliL3psaWIuc3R1YicsICd6bGliX2VuY29kZScgPT4gJ3psaWIvemxpYi5zdHViJywgJ3psaWJfZ2V0X2NvZGluZ190eXBlJyA9PiAnemxpYi96bGliLnN0dWInLCAnenN0ZF9jb21wcmVzcycgPT4gJ3pzdGQvenN0ZC5zdHViJywgJ3pzdGRfY29tcHJlc3NfZGljdCcgPT4gJ3pzdGQvenN0ZC5zdHViJywgJ3pzdGRfY29tcHJlc3NfdXNpbmdjZGljdCcgPT4gJ3pzdGQvenN0ZC5zdHViJywgJ3pzdGRfZGVjb21wcmVzc19kaWN0JyA9PiAnenN0ZC96c3RkLnN0dWInLCAnenN0ZF9kZWNvbXByZXNzX3VzaW5nY2RpY3QnID0+ICd6c3RkL3pzdGQuc3R1YicsICd6c3RkX3VuY29tcHJlc3MnID0+ICd6c3RkL3pzdGQuc3R1YicsICd6c3RkX3VuY29tcHJlc3NfZGljdCcgPT4gJ3pzdGQvenN0ZC5zdHViJywgJ3pzdGRfdW5jb21wcmVzc191c2luZ2NkaWN0JyA9PiAnenN0ZC96c3RkLnN0dWInKTsKICAgIGNvbnN0IENPTlNUQU5UUyA9IGFycmF5KCdBQkRBWV8xJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0FCREFZXzInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQUJEQVlfMycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdBQkRBWV80JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0FCREFZXzUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQUJEQVlfNicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdBQkRBWV83JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0FCTU9OXzEnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQUJNT05fMTAnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQUJNT05fMTEnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQUJNT05fMTInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQUJNT05fMicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdBQk1PTl8zJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0FCTU9OXzQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQUJNT05fNScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdBQk1PTl82JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0FCTU9OXzcnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQUJNT05fOCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdBQk1PTl85JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0FGX0lORVQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdBRl9JTkVUNicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0FGX1VOSVgnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdBSV9BRERSQ09ORklHJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnQUlfQUxMJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnQUlfQ0FOT05OQU1FJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnQUlfTlVNRVJJQ0hPU1QnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdBSV9OVU1FUklDU0VSVicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0FJX1BBU1NJVkUnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdBSV9WNE1BUFBFRCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0FMVF9ESUdJVFMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQU1RUF9BVVRPQUNLJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9BVVRPREVMRVRFJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9ERUxJVkVSWV9NT0RFX1BFUlNJU1RFTlQnID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQX0RFTElWRVJZX01PREVfVFJBTlNJRU5UJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9EVVJBQkxFJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9FWENMVVNJVkUnID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQX0VYVEVOU0lPTl9WRVJTSU9OJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9FWFRFTlNJT05fVkVSU0lPTl9FWFRSQScgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBfRVhURU5TSU9OX1ZFUlNJT05fSUQnID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQX0VYVEVOU0lPTl9WRVJTSU9OX01BSk9SJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9FWFRFTlNJT05fVkVSU0lPTl9NSU5PUicgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBfRVhURU5TSU9OX1ZFUlNJT05fUEFUQ0gnID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQX0VYX1RZUEVfRElSRUNUJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9FWF9UWVBFX0ZBTk9VVCcgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBfRVhfVFlQRV9IRUFERVJTJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9FWF9UWVBFX1RPUElDJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9JRkVNUFRZJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9JRlVOVVNFRCcgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBfSU1NRURJQVRFJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9JTlRFUk5BTCcgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBfSlVTVF9DT05TVU1FJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9NQU5EQVRPUlknID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQX01VTFRJUExFJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9OT0xPQ0FMJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9OT1BBUkFNJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9OT1dBSVQnID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTVFQX09TX1NPQ0tFVF9USU1FT1VUX0VSUk5PJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9QQVNTSVZFJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9SRVFVRVVFJyA9PiAnYW1xcC9hbXFwLnN0dWInLCAnQU1RUF9TQVNMX01FVEhPRF9FWFRFUk5BTCcgPT4gJ2FtcXAvYW1xcC5zdHViJywgJ0FNUVBfU0FTTF9NRVRIT0RfUExBSU4nID0+ICdhbXFwL2FtcXAuc3R1YicsICdBTV9TVFInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQVBBQ0hFX01BUCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ0FQQ19CSU5fVkVSSUZZX0NSQzMyJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnQVBDX0JJTl9WRVJJRllfTUQ1JyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnQVBDX0lURVJfQUxMJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnQVBDX0lURVJfQVRJTUUnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdBUENfSVRFUl9DVElNRScgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ0FQQ19JVEVSX0RFVklDRScgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ0FQQ19JVEVSX0RUSU1FJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnQVBDX0lURVJfRklMRU5BTUUnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdBUENfSVRFUl9JTk9ERScgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ0FQQ19JVEVSX0tFWScgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ0FQQ19JVEVSX01ENScgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ0FQQ19JVEVSX01FTV9TSVpFJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnQVBDX0lURVJfTVRJTUUnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdBUENfSVRFUl9OT05FJyA9PiAnYXBjdS9hcGN1LnN0dWInLCAnQVBDX0lURVJfTlVNX0hJVFMnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdBUENfSVRFUl9SRUZDT1VOVCcgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ0FQQ19JVEVSX1RUTCcgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ0FQQ19JVEVSX1RZUEUnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdBUENfSVRFUl9WQUxVRScgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ0FQQ19MSVNUX0FDVElWRScgPT4gJ2FwY3UvYXBjdS5zdHViJywgJ0FQQ19MSVNUX0RFTEVURUQnID0+ICdhcGN1L2FwY3Uuc3R1YicsICdBUlJBWV9GSUxURVJfVVNFX0JPVEgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnQVJSQVlfRklMVEVSX1VTRV9LRVknID0+ICdzdGFuZGFyZC9zdGFuZGFyZF85LnN0dWInLCAnQVNTRVJUX0FDVElWRScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdBU1NFUlRfQkFJTCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdBU1NFUlRfQ0FMTEJBQ0snID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQVNTRVJUX0VYQ0VQVElPTicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdBU1NFUlRfUVVJRVRfRVZBTCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdBU1NFUlRfV0FSTklORycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdBY2NlbCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdBcHBXaW5kb3cnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnQkxBQ0snID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnQkxVRScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdCUk9UTElfQ09NUFJFU1NfTEVWRUxfREVGQVVMVCcgPT4gJ2Jyb3RsaS9icm90bGkuc3R1YicsICdCUk9UTElfQ09NUFJFU1NfTEVWRUxfTUFYJyA9PiAnYnJvdGxpL2Jyb3RsaS5zdHViJywgJ0JST1RMSV9DT01QUkVTU19MRVZFTF9NSU4nID0+ICdicm90bGkvYnJvdGxpLnN0dWInLCAnQlJPVExJX0ZJTklTSCcgPT4gJ2Jyb3RsaS9icm90bGkuc3R1YicsICdCUk9UTElfRkxVU0gnID0+ICdicm90bGkvYnJvdGxpLnN0dWInLCAnQlJPVExJX0ZPTlQnID0+ICdicm90bGkvYnJvdGxpLnN0dWInLCAnQlJPVExJX0dFTkVSSUMnID0+ICdicm90bGkvYnJvdGxpLnN0dWInLCAnQlJPVExJX1BST0NFU1MnID0+ICdicm90bGkvYnJvdGxpLnN0dWInLCAnQlJPVExJX1RFWFQnID0+ICdicm90bGkvYnJvdGxpLnN0dWInLCAnQlVTX0FEUkFMTicgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnQlVTX0FEUkVSUicgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnQlVTX09CSkVSUicgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnQ0FMX0RPV19EQVlOTycgPT4gJ2NhbGVuZGFyL2NhbGVuZGFyLnN0dWInLCAnQ0FMX0RPV19MT05HJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdDQUxfRE9XX1NIT1JUJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdDQUxfRUFTVEVSX0FMV0FZU19HUkVHT1JJQU4nID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ0NBTF9FQVNURVJfQUxXQVlTX0pVTElBTicgPT4gJ2NhbGVuZGFyL2NhbGVuZGFyLnN0dWInLCAnQ0FMX0VBU1RFUl9ERUZBVUxUJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdDQUxfRUFTVEVSX1JPTUFOJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdDQUxfRlJFTkNIJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdDQUxfR1JFR09SSUFOJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdDQUxfSkVXSVNIJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdDQUxfSkVXSVNIX0FERF9BTEFGSU0nID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ0NBTF9KRVdJU0hfQUREX0FMQUZJTV9HRVJFU0gnID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ0NBTF9KRVdJU0hfQUREX0dFUkVTSEFZSU0nID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ0NBTF9KVUxJQU4nID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ0NBTF9NT05USF9GUkVOQ0gnID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ0NBTF9NT05USF9HUkVHT1JJQU5fTE9ORycgPT4gJ2NhbGVuZGFyL2NhbGVuZGFyLnN0dWInLCAnQ0FMX01PTlRIX0dSRUdPUklBTl9TSE9SVCcgPT4gJ2NhbGVuZGFyL2NhbGVuZGFyLnN0dWInLCAnQ0FMX01PTlRIX0pFV0lTSCcgPT4gJ2NhbGVuZGFyL2NhbGVuZGFyLnN0dWInLCAnQ0FMX01PTlRIX0pVTElBTl9MT05HJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdDQUxfTU9OVEhfSlVMSUFOX1NIT1JUJyA9PiAnY2FsZW5kYXIvY2FsZW5kYXIuc3R1YicsICdDQUxfTlVNX0NBTFMnID0+ICdjYWxlbmRhci9jYWxlbmRhci5zdHViJywgJ0NBU0VfTE9XRVInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQ0FTRV9VUFBFUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDSEFSX01BWCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDTERfQ09OVElOVUVEJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdDTERfRFVNUEVEJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdDTERfRVhJVEVEJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdDTERfS0lMTEVEJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdDTERfU1RPUFBFRCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnQ0xEX1RSQVBQRUQnID0+ICdwY250bC9wY250bC5zdHViJywgJ0NMT05FX05FV0NHUk9VUCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnQ0xPTkVfTkVXSVBDJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdDTE9ORV9ORVdORVQnID0+ICdwY250bC9wY250bC5zdHViJywgJ0NMT05FX05FV05TJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdDTE9ORV9ORVdQSUQnID0+ICdwY250bC9wY250bC5zdHViJywgJ0NMT05FX05FV1VTRVInID0+ICdwY250bC9wY250bC5zdHViJywgJ0NMT05FX05FV1VUUycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnQ0xTQ1RYX0FMTCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ0NMU0NUWF9JTlBST0NfSEFORExFUicgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ0NMU0NUWF9JTlBST0NfU0VSVkVSJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnQ0xTQ1RYX0xPQ0FMX1NFUlZFUicgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ0NMU0NUWF9SRU1PVEVfU0VSVkVSJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnQ0xTQ1RYX1NFUlZFUicgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ0NMX0VYUFVOR0UnID0+ICdpbWFwL2ltYXAuc3R1YicsICdDT0RFU0VUJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0NPTk5FQ1RJT05fQUJPUlRFRCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDT05ORUNUSU9OX05PUk1BTCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDT05ORUNUSU9OX1RJTUVPVVQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQ09VTlRfTk9STUFMJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0NPVU5UX1JFQ1VSU0lWRScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDUF9BQ1AnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdDUF9NQUNDUCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ0NQX01PVkUnID0+ICdpbWFwL2ltYXAuc3R1YicsICdDUF9PRU1DUCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ0NQX1NZTUJPTCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ0NQX1RIUkVBRF9BQ1AnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdDUF9VSUQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdDUF9VVEY3JyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnQ1BfVVRGOCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ0NSRURJVFNfQUxMJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0NSRURJVFNfRE9DUycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDUkVESVRTX0ZVTExQQUdFJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0NSRURJVFNfR0VORVJBTCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDUkVESVRTX0dST1VQJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0NSRURJVFNfTU9EVUxFUycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDUkVESVRTX1FBJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0NSRURJVFNfU0FQSScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDUk5DWVNUUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDUllQVF9CTE9XRklTSCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDUllQVF9FWFRfREVTJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0NSWVBUX01ENScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDUllQVF9TQUxUX0xFTkdUSCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdDUllQVF9TSEEyNTYnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQ1JZUFRfU0hBNTEyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0NSWVBUX1NURF9ERVMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQ1VCUklEX0FTU09DJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ0NVQlJJRF9BU1lOQycgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdDVUJSSURfQVVUT0NPTU1JVF9GQUxTRScgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdDVUJSSURfQVVUT0NPTU1JVF9UUlVFJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ0NVQlJJRF9CT1RIJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ0NVQlJJRF9DVVJTT1JfQ1VSUkVOVCcgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdDVUJSSURfQ1VSU09SX0VSUk9SJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ0NVQlJJRF9DVVJTT1JfRklSU1QnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnQ1VCUklEX0NVUlNPUl9MQVNUJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ0NVQlJJRF9DVVJTT1JfU1VDQ0VTUycgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdDVUJSSURfRVhFQ19RVUVSWV9BTEwnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnQ1VCUklEX0lOQ0xVREVfT0lEJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ0NVQlJJRF9OT19NT1JFX0RBVEEnID0+ICdjdWJyaWQvY3VicmlkLnN0dWInLCAnQ1VCUklEX05VTScgPT4gJ2N1YnJpZC9jdWJyaWQuc3R1YicsICdDVUJSSURfT0JKRUNUJyA9PiAnY3VicmlkL2N1YnJpZC5zdHViJywgJ0NVUkxBTFRTVkNfSDEnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxBTFRTVkNfSDInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxBTFRTVkNfSDMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxBTFRTVkNfUkVBRE9OTFlGSUxFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMQVVUSF9BTlknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxBVVRIX0FOWVNBRkUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxBVVRIX0FXU19TSUdWNCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEFVVEhfQkFTSUMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxBVVRIX0JFQVJFUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEFVVEhfRElHRVNUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMQVVUSF9ESUdFU1RfSUUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxBVVRIX0dTU0FQSScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEFVVEhfR1NTTkVHT1RJQVRFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMQVVUSF9ORUdPVElBVEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxBVVRIX05PTkUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxBVVRIX05UTE0nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxBVVRIX05UTE1fV0InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxBVVRIX09OTFknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxDTE9TRVBPTElDWV9DQUxMQkFDSycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTENMT1NFUE9MSUNZX0xFQVNUX1JFQ0VOVExZX1VTRUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxDTE9TRVBPTElDWV9MRUFTVF9UUkFGRklDJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMQ0xPU0VQT0xJQ1lfT0xERVNUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMQ0xPU0VQT0xJQ1lfU0xPV0VTVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfQUJPUlRFRF9CWV9DQUxMQkFDSycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfQkFEX0NBTExJTkdfT1JERVInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX0JBRF9DT05URU5UX0VOQ09ESU5HJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9CQURfRE9XTkxPQURfUkVTVU1FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9CQURfRlVOQ1RJT05fQVJHVU1FTlQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX0JBRF9QQVNTV09SRF9FTlRFUkVEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9DT1VMRE5UX0NPTk5FQ1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX0NPVUxETlRfUkVTT0xWRV9IT1NUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9DT1VMRE5UX1JFU09MVkVfUFJPWFknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX0ZBSUxFRF9JTklUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9GSUxFU0laRV9FWENFRURFRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfRklMRV9DT1VMRE5UX1JFQURfRklMRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfRlRQX0FDQ0VTU19ERU5JRUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX0ZUUF9CQURfRE9XTkxPQURfUkVTVU1FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9GVFBfQ0FOVF9HRVRfSE9TVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfRlRQX0NBTlRfUkVDT05ORUNUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9GVFBfQ09VTEROVF9HRVRfU0laRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfRlRQX0NPVUxETlRfUkVUUl9GSUxFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9GVFBfQ09VTEROVF9TRVRfQVNDSUknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX0ZUUF9DT1VMRE5UX1NFVF9CSU5BUlknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX0ZUUF9DT1VMRE5UX1NUT1JfRklMRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfRlRQX0NPVUxETlRfVVNFX1JFU1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX0ZUUF9QQVJUSUFMX0ZJTEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX0ZUUF9QT1JUX0ZBSUxFRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfRlRQX1FVT1RFX0VSUk9SJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9GVFBfU1NMX0ZBSUxFRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfRlRQX1VTRVJfUEFTU1dPUkRfSU5DT1JSRUNUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9GVFBfV0VJUkRfMjI3X0ZPUk1BVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfRlRQX1dFSVJEX1BBU1NfUkVQTFknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX0ZUUF9XRUlSRF9QQVNWX1JFUExZJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9GVFBfV0VJUkRfU0VSVkVSX1JFUExZJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9GVFBfV0VJUkRfVVNFUl9SRVBMWScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfRlRQX1dSSVRFX0VSUk9SJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9GVU5DVElPTl9OT1RfRk9VTkQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX0dPVF9OT1RISU5HJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9IVFRQX05PVF9GT1VORCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfSFRUUF9QT1JUX0ZBSUxFRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfSFRUUF9QT1NUX0VSUk9SJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9IVFRQX1JBTkdFX0VSUk9SJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9IVFRQX1JFVFVSTkVEX0VSUk9SJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9MREFQX0NBTk5PVF9CSU5EJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9MREFQX0lOVkFMSURfVVJMJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9MREFQX1NFQVJDSF9GQUlMRUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX0xJQlJBUllfTk9UX0ZPVU5EJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9NQUxGT1JNQVRfVVNFUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfT0JTT0xFVEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX09LJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9PUEVSQVRJT05fVElNRURPVVQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX09QRVJBVElPTl9USU1FT1VURUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX09VVF9PRl9NRU1PUlknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX1BBUlRJQUxfRklMRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfUFJPWFknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX1JFQURfRVJST1InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX1JFQ1ZfRVJST1InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX1NFTkRfRVJST1InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX1NIQVJFX0lOX1VTRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfU1NIJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9TU0xfQ0FDRVJUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9TU0xfQ0FDRVJUX0JBREZJTEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX1NTTF9DRVJUUFJPQkxFTScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfU1NMX0NJUEhFUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfU1NMX0NPTk5FQ1RfRVJST1InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX1NTTF9FTkdJTkVfTk9URk9VTkQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX1NTTF9FTkdJTkVfU0VURkFJTEVEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9TU0xfUEVFUl9DRVJUSUZJQ0FURScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfU1NMX1BJTk5FRFBVQktFWU5PVE1BVENIJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9URUxORVRfT1BUSU9OX1NZTlRBWCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfVE9PX01BTllfUkVESVJFQ1RTJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9VTktOT1dOX1RFTE5FVF9PUFRJT04nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX1VOU1VQUE9SVEVEX1BST1RPQ09MJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9VUkxfTUFMRk9STUFUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRV9VUkxfTUFMRk9STUFUX1VTRVInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxFX1dFSVJEX1NFUlZFUl9SRVBMWScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEVfV1JJVEVfRVJST1InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxGVFBBVVRIX0RFRkFVTFQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxGVFBBVVRIX1NTTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEZUUEFVVEhfVExTJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRlRQTUVUSE9EX0RFRkFVTFQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxGVFBNRVRIT0RfTVVMVElDV0QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxGVFBNRVRIT0RfTk9DV0QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxGVFBNRVRIT0RfU0lOR0xFQ1dEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRlRQU1NMX0FMTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEZUUFNTTF9DQ0NfQUNUSVZFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRlRQU1NMX0NDQ19OT05FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRlRQU1NMX0NDQ19QQVNTSVZFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMRlRQU1NMX0NPTlRST0wnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxGVFBTU0xfTk9ORScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEZUUFNTTF9UUlknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxGVFBfQ1JFQVRFX0RJUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEZUUF9DUkVBVEVfRElSX05PTkUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxGVFBfQ1JFQVRFX0RJUl9SRVRSWScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEdTU0FQSV9ERUxFR0FUSU9OX0ZMQUcnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxHU1NBUElfREVMRUdBVElPTl9QT0xJQ1lfRkxBRycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEhFQURFUl9TRVBBUkFURScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEhFQURFUl9VTklGSUVEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSFNUU19FTkFCTEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxIU1RTX1JFQURPTkxZRklMRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fQVBQQ09OTkVDVF9USU1FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19BUFBDT05ORUNUX1RJTUVfVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fQ0FJTkZPJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19DQVBBVEgnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX0NFUlRJTkZPJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19DT05ESVRJT05fVU5NRVQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX0NPTk5FQ1RfVElNRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fQ09OTkVDVF9USU1FX1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RPV05MT0FEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19DT05URU5UX0xFTkdUSF9ET1dOTE9BRF9UJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19DT05URU5UX0xFTkdUSF9VUExPQUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX1VQTE9BRF9UJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19DT05URU5UX1RZUEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX0NPT0tJRUxJU1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX0VGRkVDVElWRV9NRVRIT0QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX0VGRkVDVElWRV9VUkwnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX0ZJTEVUSU1FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19GSUxFVElNRV9UJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19GVFBfRU5UUllfUEFUSCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fSEVBREVSX09VVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fSEVBREVSX1NJWkUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX0hUVFBBVVRIX0FWQUlMJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19IVFRQX0NPREUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX0hUVFBfQ09OTkVDVENPREUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX0hUVFBfVkVSU0lPTicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fTEFTVE9ORScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fTE9DQUxfSVAnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX0xPQ0FMX1BPUlQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX05BTUVMT09LVVBfVElNRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fTkFNRUxPT0tVUF9USU1FX1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX05VTV9DT05ORUNUUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fT1NfRVJSTk8nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX1BSRVRSQU5TRkVSX1RJTUUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX1BSRVRSQU5TRkVSX1RJTUVfVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fUFJJTUFSWV9JUCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fUFJJTUFSWV9QT1JUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19QUklWQVRFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19QUk9UT0NPTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fUFJPWFlBVVRIX0FWQUlMJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19QUk9YWV9FUlJPUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fUFJPWFlfU1NMX1ZFUklGWVJFU1VMVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fUkVESVJFQ1RfQ09VTlQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX1JFRElSRUNUX1RJTUUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX1JFRElSRUNUX1RJTUVfVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fUkVESVJFQ1RfVVJMJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19SRUZFUkVSJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19SRVFVRVNUX1NJWkUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX1JFU1BPTlNFX0NPREUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX1JFVFJZX0FGVEVSJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19SVFNQX0NMSUVOVF9DU0VRJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19SVFNQX0NTRVFfUkVDVicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fUlRTUF9TRVJWRVJfQ1NFUScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fUlRTUF9TRVNTSU9OX0lEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19TQ0hFTUUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX1NJWkVfRE9XTkxPQUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX1NJWkVfRE9XTkxPQURfVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fU0laRV9VUExPQUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX1NJWkVfVVBMT0FEX1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX1NQRUVEX0RPV05MT0FEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19TUEVFRF9ET1dOTE9BRF9UJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19TUEVFRF9VUExPQUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxJTkZPX1NQRUVEX1VQTE9BRF9UJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19TU0xfRU5HSU5FUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fU1NMX1ZFUklGWVJFU1VMVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fU1RBUlRUUkFOU0ZFUl9USU1FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMSU5GT19TVEFSVFRSQU5TRkVSX1RJTUVfVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fVE9UQUxfVElNRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTElORk9fVE9UQUxfVElNRV9UJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMS0hNQVRDSF9MQVNUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMS0hNQVRDSF9NSVNNQVRDSCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEtITUFUQ0hfTUlTU0lORycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTEtITUFUQ0hfT0snID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxNSU1FT1BUX0ZPUk1FU0NBUEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxNT1BUX0NIVU5LX0xFTkdUSF9QRU5BTFRZX1NJWkUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxNT1BUX0NPTlRFTlRfTEVOR1RIX1BFTkFMVFlfU0laRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE1PUFRfTUFYQ09OTkVDVFMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxNT1BUX01BWF9DT05DVVJSRU5UX1NUUkVBTVMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxNT1BUX01BWF9IT1NUX0NPTk5FQ1RJT05TJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMTU9QVF9NQVhfUElQRUxJTkVfTEVOR1RIJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMTU9QVF9NQVhfVE9UQUxfQ09OTkVDVElPTlMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxNT1BUX1BJUEVMSU5JTkcnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxNT1BUX1BVU0hGVU5DVElPTicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE1TR19ET05FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMTV9BRERFRF9BTFJFQURZJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMTV9CQURfRUFTWV9IQU5ETEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxNX0JBRF9IQU5ETEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxNX0NBTExfTVVMVElfUEVSRk9STScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE1fSU5URVJOQUxfRVJST1InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxNX09LJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMTV9PVVRfT0ZfTUVNT1JZJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0FCU1RSQUNUX1VOSVhfU09DS0VUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0FDQ0VQVFRJTUVPVVRfTVMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQUNDRVBUX0VOQ09ESU5HJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0FERFJFU1NfU0NPUEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQUxUU1ZDJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0FMVFNWQ19DVFJMJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0FQUEVORCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9BVVRPUkVGRVJFUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9BV1NfU0lHVjQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQklOQVJZVFJBTlNGRVInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQlVGRkVSU0laRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9DQUlORk8nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQ0FJTkZPX0JMT0InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQ0FQQVRIJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0NBX0NBQ0hFX1RJTUVPVVQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQ0VSVElORk8nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQ0xPU0VQT0xJQ1knID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQ09OTkVDVFRJTUVPVVQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQ09OTkVDVFRJTUVPVVRfTVMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQ09OTkVDVF9PTkxZJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0NPTk5FQ1RfVE8nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQ09PS0lFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0NPT0tJRUZJTEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQ09PS0lFSkFSJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0NPT0tJRUxJU1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQ09PS0lFU0VTU0lPTicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9DUkxGJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0NSTEZJTEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfQ1VTVE9NUkVRVUVTVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9ERUZBVUxUX1BST1RPQ09MJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0RJUkxJU1RPTkxZJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0RJU0FMTE9XX1VTRVJOQU1FX0lOX1VSTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9ETlNfQ0FDSEVfVElNRU9VVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9ETlNfSU5URVJGQUNFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0ROU19MT0NBTF9JUDQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfRE5TX0xPQ0FMX0lQNicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9ETlNfU0VSVkVSUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9ETlNfU0hVRkZMRV9BRERSRVNTRVMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfRE5TX1VTRV9HTE9CQUxfQ0FDSEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfRE9IX1NTTF9WRVJJRllIT1NUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0RPSF9TU0xfVkVSSUZZUEVFUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9ET0hfU1NMX1ZFUklGWVNUQVRVUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9ET0hfVVJMJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0VHRFNPQ0tFVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9FTkNPRElORycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9FWFBFQ1RfMTAwX1RJTUVPVVRfTVMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfRkFJTE9ORVJST1InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfRklMRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9GSUxFVElNRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9GTk1BVENIX0ZVTkNUSU9OJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0ZPUkJJRF9SRVVTRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9GUkVTSF9DT05ORUNUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0ZUUEFQUEVORCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9GVFBBU0NJSScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9GVFBMSVNUT05MWScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9GVFBQT1JUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0ZUUFNTTEFVVEgnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfRlRQX0FDQ09VTlQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfRlRQX0FMVEVSTkFUSVZFX1RPX1VTRVInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfRlRQX0NSRUFURV9NSVNTSU5HX0RJUlMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfRlRQX0ZJTEVNRVRIT0QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfRlRQX1JFU1BPTlNFX1RJTUVPVVQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfRlRQX1NLSVBfUEFTVl9JUCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9GVFBfU1NMJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0ZUUF9TU0xfQ0NDJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0ZUUF9VU0VfRVBSVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9GVFBfVVNFX0VQU1YnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfRlRQX1VTRV9QUkVUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0dTU0FQSV9ERUxFR0FUSU9OJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0hBUFBZX0VZRUJBTExTX1RJTUVPVVRfTVMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfSEFQUk9YWVBST1RPQ09MJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0hFQURFUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9IRUFERVJGVU5DVElPTicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9IRUFERVJPUFQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfSFNUUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9IU1RTX0NUUkwnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfSFRUUDA5X0FMTE9XRUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfSFRUUDIwMEFMSUFTRVMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfSFRUUEFVVEgnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfSFRUUEdFVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9IVFRQSEVBREVSJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0hUVFBQUk9YWVRVTk5FTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9IVFRQX0NPTlRFTlRfREVDT0RJTkcnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfSFRUUF9UUkFOU0ZFUl9ERUNPRElORycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9IVFRQX1ZFUlNJT04nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfSUdOT1JFX0NPTlRFTlRfTEVOR1RIJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0lORklMRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9JTkZJTEVTSVpFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0lOVEVSRkFDRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9JUFJFU09MVkUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfSVNTVUVSQ0VSVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9JU1NVRVJDRVJUX0JMT0InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfS0VFUF9TRU5ESU5HX09OX0VSUk9SJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0tFWVBBU1NXRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9LUkI0TEVWRUwnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfS1JCTEVWRUwnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfTE9DQUxQT1JUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0xPQ0FMUE9SVFJBTkdFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0xPR0lOX09QVElPTlMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfTE9XX1NQRUVEX0xJTUlUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX0xPV19TUEVFRF9USU1FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX01BSUxfQVVUSCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9NQUlMX0ZST00nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfTUFJTF9SQ1BUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX01BSUxfUkNQVF9BTExMT1dGQUlMUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9NQVhBR0VfQ09OTicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9NQVhDT05ORUNUUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9NQVhGSUxFU0laRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9NQVhGSUxFU0laRV9MQVJHRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9NQVhMSUZFVElNRV9DT05OJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX01BWFJFRElSUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9NQVhfUkVDVl9TUEVFRF9MQVJHRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9NQVhfU0VORF9TUEVFRF9MQVJHRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9NSU1FX09QVElPTlMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfTVVURScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9ORVRSQycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9ORVRSQ19GSUxFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX05FV19ESVJFQ1RPUllfUEVSTVMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfTkVXX0ZJTEVfUEVSTVMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfTk9CT0RZJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX05PUFJPR1JFU1MnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfTk9QUk9YWScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9OT1NJR05BTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QQVNTV0RGVU5DVElPTicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QQVNTV09SRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QQVRIX0FTX0lTJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BJTk5FRFBVQkxJQ0tFWScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QSVBFV0FJVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QT1JUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BPU1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUE9TVEZJRUxEUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QT1NUUVVPVEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUE9TVFJFRElSJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BSRVFVT1RFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BSRVJFUUZVTkNUSU9OJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BSRV9QUk9YWScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QUklWQVRFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPVE9DT0xTJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BST1RPQ09MU19TVFInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlBVVRIJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BST1hZSEVBREVSJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BST1hZUEFTU1dPUkQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlQT1JUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BST1hZVFlQRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QUk9YWVVTRVJOQU1FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BST1hZVVNFUlBXRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QUk9YWV9DQUlORk8nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlfQ0FJTkZPX0JMT0InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlfQ0FQQVRIJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BST1hZX0NSTEZJTEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlfSVNTVUVSQ0VSVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QUk9YWV9JU1NVRVJDRVJUX0JMT0InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlfS0VZUEFTU1dEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BST1hZX1BJTk5FRFBVQkxJQ0tFWScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QUk9YWV9TRVJWSUNFX05BTUUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlfU1NMQ0VSVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QUk9YWV9TU0xDRVJUVFlQRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QUk9YWV9TU0xDRVJUX0JMT0InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlfU1NMS0VZJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BST1hZX1NTTEtFWVRZUEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlfU1NMS0VZX0JMT0InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlfU1NMVkVSU0lPTicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QUk9YWV9TU0xfQ0lQSEVSX0xJU1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlfU1NMX09QVElPTlMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWUhPU1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlfU1NMX1ZFUklGWVBFRVInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFJPWFlfVExTMTNfQ0lQSEVSUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1BBU1NXT1JEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BST1hZX1RMU0FVVEhfVFlQRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9QUk9YWV9UTFNBVVRIX1VTRVJOQU1FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1BST1hZX1RSQU5TRkVSX01PREUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUFVUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1FVSUNLX0VYSVQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUVVPVEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUkFORE9NX0ZJTEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUkFOR0UnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUkVBRERBVEEnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUkVBREZVTkNUSU9OJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1JFRElSX1BST1RPQ09MUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFNfU1RSJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1JFRkVSRVInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUkVRVUVTVF9UQVJHRVQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUkVTT0xWRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9SRVNVTUVfRlJPTScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9SVFNQX0NMSUVOVF9DU0VRJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1JUU1BfUkVRVUVTVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9SVFNQX1NFUlZFUl9DU0VRJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1JUU1BfU0VTU0lPTl9JRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9SVFNQX1NUUkVBTV9VUkknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfUlRTUF9UUkFOU1BPUlQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU0FGRV9VUExPQUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU0FTTF9BVVRIWklEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1NBU0xfSVInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU0VSVklDRV9OQU1FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1NIQVJFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1NPQ0tTNV9BVVRIJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1NPQ0tTNV9HU1NBUElfTkVDJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1NPQ0tTNV9HU1NBUElfU0VSVklDRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0hfQVVUSF9UWVBFUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0hfQ09NUFJFU1NJT04nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU1NIX0hPU1RLRVlGVU5DVElPTicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0hfSE9TVF9QVUJMSUNfS0VZX01ENScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0hfSE9TVF9QVUJMSUNfS0VZX1NIQTI1NicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0hfS05PV05IT1NUUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0hfUFJJVkFURV9LRVlGSUxFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1NTSF9QVUJMSUNfS0VZRklMRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0xDRVJUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1NTTENFUlRQQVNTV0QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU1NMQ0VSVFRZUEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU1NMQ0VSVF9CTE9CJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1NTTEVOR0lORScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0xFTkdJTkVfREVGQVVMVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0xLRVknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU1NMS0VZUEFTU1dEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1NTTEtFWVRZUEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU1NMS0VZX0JMT0InID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU1NMVkVSU0lPTicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0xfQ0lQSEVSX0xJU1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU1NMX0VDX0NVUlZFUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0xfRU5BQkxFX0FMUE4nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU1NMX0VOQUJMRV9OUE4nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU1NMX0ZBTFNFU1RBUlQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU1NMX09QVElPTlMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfU1NMX1NFU1NJT05JRF9DQUNIRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TU0xfVkVSSUZZU1RBVFVTJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1NUREVSUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9TVFJFQU1fV0VJR0hUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1NVUFBSRVNTX0NPTk5FQ1RfSEVBREVSUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9UQ1BfRkFTVE9QRU4nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfVENQX0tFRVBBTElWRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9UQ1BfS0VFUENOVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9UQ1BfS0VFUElETEUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfVENQX0tFRVBJTlRWTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9UQ1BfTk9ERUxBWScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9URUxORVRPUFRJT05TJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1RGVFBfQkxLU0laRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9URlRQX05PX09QVElPTlMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfVElNRUNPTkRJVElPTicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9USU1FT1VUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1RJTUVPVVRfTVMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfVElNRVZBTFVFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1RJTUVWQUxVRV9MQVJHRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9UTFMxM19DSVBIRVJTJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1RMU0FVVEhfUEFTU1dPUkQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfVExTQVVUSF9UWVBFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1RMU0FVVEhfVVNFUk5BTUUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfVFJBTlNGRVJURVhUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1RSQU5TRkVSX0VOQ09ESU5HJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1VOSVhfU09DS0VUX1BBVEgnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfVU5SRVNUUklDVEVEX0FVVEgnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfVVBLRUVQX0lOVEVSVkFMX01TJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1VQTE9BRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9VUExPQURfQlVGRkVSU0laRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9VUkwnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfVVNFUkFHRU5UJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1VTRVJOQU1FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1VTRVJQV0QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfVVNFX1NTTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9WRVJCT1NFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1dJTERDQVJETUFUQ0gnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfV1JJVEVGVU5DVElPTicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9XUklURUhFQURFUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTE9QVF9XU19PUFRJT05TJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMT1BUX1hGRVJJTkZPRlVOQ1RJT04nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxPUFRfWE9BVVRIMl9CRUFSRVInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQQVVTRV9BTEwnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQQVVTRV9DT05UJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUEFVU0VfUkVDVicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBBVVNFX1JFQ1ZfQ09OVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBBVVNFX1NFTkQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQQVVTRV9TRU5EX0NPTlQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQSVBFX0hUVFAxJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUElQRV9NVUxUSVBMRVgnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQSVBFX05PVEhJTkcnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9UT19BTEwnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9UT19ESUNUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFJPVE9fRklMRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBST1RPX0ZUUCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBST1RPX0ZUUFMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9UT19HT1BIRVInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9UT19IVFRQJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFJPVE9fSFRUUFMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9UT19JTUFQJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFJPVE9fSU1BUFMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9UT19MREFQJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFJPVE9fTERBUFMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9UT19NUVRUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFJPVE9fUE9QMycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBST1RPX1BPUDNTJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFJPVE9fUlRNUCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBST1RPX1JUTVBFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFJPVE9fUlRNUFMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9UT19SVE1QVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBST1RPX1JUTVBURScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBST1RPX1JUTVBUUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBST1RPX1JUU1AnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9UT19TQ1AnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9UT19TRlRQJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFJPVE9fU01CJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFJPVE9fU01CUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBST1RPX1NNVFAnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9UT19TTVRQUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBST1RPX1RFTE5FVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBST1RPX1RGVFAnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9YWV9IVFRQJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFJPWFlfSFRUUFMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9YWV9IVFRQXzFfMCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBST1hZX1NPQ0tTNCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBST1hZX1NPQ0tTNEEnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9YWV9TT0NLUzUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQUk9YWV9TT0NLUzVfSE9TVE5BTUUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9CQURfQUREUkVTU19UWVBFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFhfQkFEX1ZFUlNJT04nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9DTE9TRUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9HU1NBUEknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9HU1NBUElfUEVSTVNHJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFhfR1NTQVBJX1BST1RFQ1RJT04nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9JREVOVEQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9JREVOVERfRElGRkVSJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFhfTE9OR19IT1NUTkFNRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBYX0xPTkdfUEFTU1dEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFhfTE9OR19VU0VSJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFhfTk9fQVVUSCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBYX09LJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFhfUkVDVl9BRERSRVNTJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFhfUkVDVl9BVVRIJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFhfUkVDVl9DT05ORUNUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFhfUkVDVl9SRVFBQ0snID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9SRVBMWV9BRERSRVNTX1RZUEVfTk9UX1NVUFBPUlRFRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBYX1JFUExZX0NPTU1BTkRfTk9UX1NVUFBPUlRFRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBYX1JFUExZX0NPTk5FQ1RJT05fUkVGVVNFRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBYX1JFUExZX0dFTkVSQUxfU0VSVkVSX0ZBSUxVUkUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9SRVBMWV9IT1NUX1VOUkVBQ0hBQkxFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFhfUkVQTFlfTkVUV09SS19VTlJFQUNIQUJMRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFBYX1JFUExZX05PVF9BTExPV0VEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFhfUkVQTFlfVFRMX0VYUElSRUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9SRVBMWV9VTkFTU0lHTkVEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMUFhfUkVRVUVTVF9GQUlMRUQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9SRVNPTFZFX0hPU1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9TRU5EX0FVVEgnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9TRU5EX0NPTk5FQ1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9TRU5EX1JFUVVFU1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9VTktOT1dOX0ZBSUwnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9VTktOT1dOX01PREUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxQWF9VU0VSX1JFSkVDVEVEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMU0hPUFRfTk9ORScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFNIT1BUX1NIQVJFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMU0hPUFRfVU5TSEFSRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFNTSF9BVVRIX0FHRU5UJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMU1NIX0FVVEhfQU5ZJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMU1NIX0FVVEhfREVGQVVMVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFNTSF9BVVRIX0dTU0FQSScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFNTSF9BVVRIX0hPU1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxTU0hfQVVUSF9LRVlCT0FSRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFNTSF9BVVRIX05PTkUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxTU0hfQVVUSF9QQVNTV09SRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFNTSF9BVVRIX1BVQkxJQ0tFWScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFNTTE9QVF9BTExPV19CRUFTVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFNTTE9QVF9BVVRPX0NMSUVOVF9DRVJUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMU1NMT1BUX05BVElWRV9DQScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFNTTE9QVF9OT19QQVJUSUFMQ0hBSU4nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxTU0xPUFRfTk9fUkVWT0tFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMU1NMT1BUX1JFVk9LRV9CRVNUX0VGRk9SVCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFVTRVNTTF9BTEwnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxVU0VTU0xfQ09OVFJPTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFVTRVNTTF9OT05FJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMVVNFU1NMX1RSWScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTFZFUlNJT05fTk9XJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMV1NfUkFXX01PREUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfRk5NQVRDSEZVTkNfRkFJTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9GTk1BVENIRlVOQ19NQVRDSCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9GTk1BVENIRlVOQ19OT01BVENIJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX0hUVFBfVkVSU0lPTl8xXzAnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfSFRUUF9WRVJTSU9OXzFfMScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9IVFRQX1ZFUlNJT05fMicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9IVFRQX1ZFUlNJT05fMlRMUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9IVFRQX1ZFUlNJT05fMl8wJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX0hUVFBfVkVSU0lPTl8yX1BSSU9SX0tOT1dMRURHRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9IVFRQX1ZFUlNJT05fMycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9IVFRQX1ZFUlNJT05fM09OTFknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfSFRUUF9WRVJTSU9OX05PTkUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfSVBSRVNPTFZFX1Y0JyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX0lQUkVTT0xWRV9WNicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9JUFJFU09MVkVfV0hBVEVWRVInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfTE9DS19EQVRBX0NPTk5FQ1QnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfTE9DS19EQVRBX0NPT0tJRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9MT0NLX0RBVEFfRE5TJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX0xPQ0tfREFUQV9QU0wnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfTE9DS19EQVRBX1NTTF9TRVNTSU9OJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX01BWF9SRUFEX1NJWkUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfTkVUUkNfSUdOT1JFRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9ORVRSQ19PUFRJT05BTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9ORVRSQ19SRVFVSVJFRCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9QUkVSRVFGVU5DX0FCT1JUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1BSRVJFUUZVTkNfT0snID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfUFVTSF9ERU5ZJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1BVU0hfT0snID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfUkVBREZVTkNfUEFVU0UnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfUkVESVJfUE9TVF8zMDEnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfUkVESVJfUE9TVF8zMDInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfUkVESVJfUE9TVF8zMDMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfUkVESVJfUE9TVF9BTEwnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfUlRTUFJFUV9BTk5PVU5DRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9SVFNQUkVRX0RFU0NSSUJFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1JUU1BSRVFfR0VUX1BBUkFNRVRFUicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9SVFNQUkVRX09QVElPTlMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfUlRTUFJFUV9QQVVTRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9SVFNQUkVRX1BMQVknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfUlRTUFJFUV9SRUNFSVZFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1JUU1BSRVFfUkVDT1JEJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1JUU1BSRVFfU0VUVVAnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfUlRTUFJFUV9TRVRfUEFSQU1FVEVSJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1JUU1BSRVFfVEVBUkRPV04nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfU1NMVkVSU0lPTl9ERUZBVUxUJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1NTTFZFUlNJT05fTUFYX0RFRkFVTFQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfU1NMVkVSU0lPTl9NQVhfTk9ORScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8wJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1NTTFZFUlNJT05fTUFYX1RMU3YxXzEnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfU1NMVkVSU0lPTl9NQVhfVExTdjFfMicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9TU0xWRVJTSU9OX01BWF9UTFN2MV8zJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1NTTFZFUlNJT05fU1NMdjInID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfU1NMVkVSU0lPTl9TU0x2MycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9TU0xWRVJTSU9OX1RMU3YxJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1NTTFZFUlNJT05fVExTdjFfMCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfU1NMVkVSU0lPTl9UTFN2MV8yJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1NTTFZFUlNJT05fVExTdjFfMycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9USU1FQ09ORF9JRk1PRFNJTkNFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1RJTUVDT05EX0lGVU5NT0RTSU5DRScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9USU1FQ09ORF9MQVNUTU9EJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1RJTUVDT05EX05PTkUnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfVExTQVVUSF9TUlAnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfVkVSU0lPTl9BTFRTVkMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfVkVSU0lPTl9BU1lOQ0hETlMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfVkVSU0lPTl9CUk9UTEknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfVkVSU0lPTl9DT05WJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1ZFUlNJT05fQ1VSTERFQlVHJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1ZFUlNJT05fREVCVUcnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfVkVSU0lPTl9HU0FTTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9WRVJTSU9OX0dTU0FQSScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9WRVJTSU9OX0dTU05FR09USUFURScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9WRVJTSU9OX0hTVFMnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfVkVSU0lPTl9IVFRQMicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9WRVJTSU9OX0hUVFAzJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1ZFUlNJT05fSFRUUFNfUFJPWFknID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfVkVSU0lPTl9JRE4nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfVkVSU0lPTl9JUFY2JyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1ZFUlNJT05fS0VSQkVST1M0JyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1ZFUlNJT05fS0VSQkVST1M1JyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1ZFUlNJT05fTEFSR0VGSUxFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1ZFUlNJT05fTElCWicgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9WRVJTSU9OX01VTFRJX1NTTCcgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9WRVJTSU9OX05UTE0nID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfVkVSU0lPTl9OVExNX1dCJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1ZFUlNJT05fUFNMJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1ZFUlNJT05fU1BORUdPJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1ZFUlNJT05fU1NMJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1ZFUlNJT05fU1NQSScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9WRVJTSU9OX1RMU0FVVEhfU1JQJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJMX1ZFUlNJT05fVU5JQ09ERScgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9WRVJTSU9OX1VOSVhfU09DS0VUUycgPT4gJ2N1cmwvY3VybF9kLnN0dWInLCAnQ1VSTF9WRVJTSU9OX1pTVEQnID0+ICdjdXJsL2N1cmxfZC5zdHViJywgJ0NVUkxfV1JJVEVGVU5DX1BBVVNFJyA9PiAnY3VybC9jdXJsX2Quc3R1YicsICdDVVJSRU5DWV9TWU1CT0wnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnQ1lBTicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdDYWxlbmRhcicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdDaGVja0JveCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdDb21ib0JveCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdEQVJLQkxVRScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdEQVJLQ1lBTicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdEQVJLR1JBWScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdEQVJLR1JFRU4nID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnREFSS01BR0VOVEEnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnREFSS1JFRCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdEQVJLWUVMTE9XJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ0RBVEVfQVRPTScgPT4gJ2RhdGUvZGF0ZV9kLnN0dWInLCAnREFURV9DT09LSUUnID0+ICdkYXRlL2RhdGVfZC5zdHViJywgJ0RBVEVfSVNPODYwMScgPT4gJ2RhdGUvZGF0ZV9kLnN0dWInLCAnREFURV9JU084NjAxX0VYUEFOREVEJyA9PiAnZGF0ZS9kYXRlX2Quc3R1YicsICdEQVRFX1JGQzEwMzYnID0+ICdkYXRlL2RhdGVfZC5zdHViJywgJ0RBVEVfUkZDMTEyMycgPT4gJ2RhdGUvZGF0ZV9kLnN0dWInLCAnREFURV9SRkMyODIyJyA9PiAnZGF0ZS9kYXRlX2Quc3R1YicsICdEQVRFX1JGQzMzMzknID0+ICdkYXRlL2RhdGVfZC5zdHViJywgJ0RBVEVfUkZDMzMzOV9FWFRFTkRFRCcgPT4gJ2RhdGUvZGF0ZV9kLnN0dWInLCAnREFURV9SRkM3MjMxJyA9PiAnZGF0ZS9kYXRlX2Quc3R1YicsICdEQVRFX1JGQzgyMicgPT4gJ2RhdGUvZGF0ZV9kLnN0dWInLCAnREFURV9SRkM4NTAnID0+ICdkYXRlL2RhdGVfZC5zdHViJywgJ0RBVEVfUlNTJyA9PiAnZGF0ZS9kYXRlX2Quc3R1YicsICdEQVRFX1czQycgPT4gJ2RhdGUvZGF0ZV9kLnN0dWInLCAnREFZXzEnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnREFZXzInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnREFZXzMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnREFZXzQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnREFZXzUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnREFZXzYnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnREFZXzcnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnREIyX0FVVE9DT01NSVRfT0ZGJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnREIyX0FVVE9DT01NSVRfT04nID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdEQjJfQklOQVJZJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnREIyX0NBU0VfTE9XRVInID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdEQjJfQ0FTRV9OQVRVUkFMJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnREIyX0NBU0VfVVBQRVInID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdEQjJfQ0hBUicgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ0RCMl9DT05WRVJUJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnREIyX0RFRkVSUkVEX1BSRVBBUkVfT0ZGJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnREIyX0RFRkVSUkVEX1BSRVBBUkVfT04nID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdEQjJfRE9VQkxFJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnREIyX0ZPUldBUkRfT05MWScgPT4gJ2libV9kYjIvaWJtX2RiMi5zdHViJywgJ0RCMl9MT05HJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnREIyX1BBUkFNX0ZJTEUnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdEQjJfUEFSQU1fSU4nID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdEQjJfUEFSQU1fSU5PVVQnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdEQjJfUEFSQU1fT1VUJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnREIyX1BBU1NUSFJVJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnREIyX1NDUk9MTEFCTEUnID0+ICdpYm1fZGIyL2libV9kYjIuc3R1YicsICdEQjJfWE1MJyA9PiAnaWJtX2RiMi9pYm1fZGIyLnN0dWInLCAnREJBX0xNREJfTk9fU1VCX0RJUicgPT4gJ2RiYS9kYmEuc3R1YicsICdEQkFfTE1EQl9VU0VfU1VCX0RJUicgPT4gJ2RiYS9kYmEuc3R1YicsICdERUJVR19CQUNLVFJBQ0VfSUdOT1JFX0FSR1MnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ0RFQlVHX0JBQ0tUUkFDRV9QUk9WSURFX09CSkVDVCcgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnREVDSU1BTF9QT0lOVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdERUZBVUxUX0lOQ0xVREVfUEFUSCcgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnRElSRUNUT1JZX1NFUEFSQVRPUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdESVNQX0VfRElWQllaRVJPJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnRElTUF9FX09WRVJGTE9XJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnRE5TX0EnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRE5TX0E2JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0ROU19BQUFBJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0ROU19BTEwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRE5TX0FOWScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdETlNfQ0FBJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0ROU19DTkFNRScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdETlNfSElORk8nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRE5TX01YJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0ROU19OQVBUUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdETlNfTlMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRE5TX1BUUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdETlNfU09BJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0ROU19TUlYnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRE5TX1RYVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdET01TVFJJTkdfU0laRV9FUlInID0+ICdkb20vZG9tLnN0dWInLCAnRE9NX0hJRVJBUkNIWV9SRVFVRVNUX0VSUicgPT4gJ2RvbS9kb20uc3R1YicsICdET01fSU5ERVhfU0laRV9FUlInID0+ICdkb20vZG9tLnN0dWInLCAnRE9NX0lOVVNFX0FUVFJJQlVURV9FUlInID0+ICdkb20vZG9tLnN0dWInLCAnRE9NX0lOVkFMSURfQUNDRVNTX0VSUicgPT4gJ2RvbS9kb20uc3R1YicsICdET01fSU5WQUxJRF9DSEFSQUNURVJfRVJSJyA9PiAnZG9tL2RvbS5zdHViJywgJ0RPTV9JTlZBTElEX01PRElGSUNBVElPTl9FUlInID0+ICdkb20vZG9tLnN0dWInLCAnRE9NX0lOVkFMSURfU1RBVEVfRVJSJyA9PiAnZG9tL2RvbS5zdHViJywgJ0RPTV9OQU1FU1BBQ0VfRVJSJyA9PiAnZG9tL2RvbS5zdHViJywgJ0RPTV9OT1RfRk9VTkRfRVJSJyA9PiAnZG9tL2RvbS5zdHViJywgJ0RPTV9OT1RfU1VQUE9SVEVEX0VSUicgPT4gJ2RvbS9kb20uc3R1YicsICdET01fTk9fREFUQV9BTExPV0VEX0VSUicgPT4gJ2RvbS9kb20uc3R1YicsICdET01fTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSJyA9PiAnZG9tL2RvbS5zdHViJywgJ0RPTV9QSFBfRVJSJyA9PiAnZG9tL2RvbS5zdHViJywgJ0RPTV9TWU5UQVhfRVJSJyA9PiAnZG9tL2RvbS5zdHViJywgJ0RPTV9WQUxJREFUSU9OX0VSUicgPT4gJ2RvbS9kb20uc3R1YicsICdET01fV1JPTkdfRE9DVU1FTlRfRVJSJyA9PiAnZG9tL2RvbS5zdHViJywgJ0RfRk1UJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0RfVF9GTVQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRG9tXFxISUVSQVJDSFlfUkVRVUVTVF9FUlInID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXEhUTUxfTk9fREVGQVVMVF9OUycgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcSU5ERVhfU0laRV9FUlInID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXElOVVNFX0FUVFJJQlVURV9FUlInID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXElOVkFMSURfQ0hBUkFDVEVSX0VSUicgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSJyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tXFxJTlZBTElEX1NUQVRFX0VSUicgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcTkFNRVNQQUNFX0VSUicgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcTk9UX0ZPVU5EX0VSUicgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcTk9UX1NVUFBPUlRFRF9FUlInID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXE5PX0RBVEFfQUxMT1dFRF9FUlInID0+ICdkb20vZG9tX24uc3R1YicsICdEb21cXE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUicgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcU1RSSU5HX1NJWkVfRVJSJyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tXFxTWU5UQVhfRVJSJyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRG9tXFxWQUxJREFUSU9OX0VSUicgPT4gJ2RvbS9kb21fbi5zdHViJywgJ0RvbVxcV1JPTkdfRE9DVU1FTlRfRVJSJyA9PiAnZG9tL2RvbV9uLnN0dWInLCAnRUlPX0RFQlVHJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19EVF9CTEsnID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX0RUX0NIUicgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fRFRfQ01QJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19EVF9ESVInID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX0RUX0RPT1InID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX0RUX0ZJRk8nID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX0RUX0xOSycgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fRFRfTUFYJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19EVF9NUEInID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX0RUX01QQycgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fRFRfTkFNJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19EVF9OV0snID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX0RUX1JFRycgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fRFRfU09DSycgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fRFRfVU5LTk9XTicgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fRFRfV0hUJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19GQUxMT0NfRkxfS0VFUF9TSVpFJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19PX0FQUEVORCcgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fT19DUkVBVCcgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fT19FWENMJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19PX0ZTWU5DJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19PX05PTkJMT0NLJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19PX1JET05MWScgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fT19SRFdSJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19PX1RSVU5DJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19PX1dST05MWScgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fUFJJX0RFRkFVTFQnID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1BSSV9NQVgnID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1BSSV9NSU4nID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1JFQURESVJfREVOVFMnID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1JFQURESVJfRElSU19GSVJTVCcgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fUkVBRERJUl9GT1VORF9VTktOT1dOJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19SRUFERElSX1NUQVRfT1JERVInID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1NFRUtfQ1VSJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19TRUVLX0VORCcgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fU0VFS19TRVQnID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1NZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSJyA9PiAnZWlvL2Vpby5zdHViJywgJ0VJT19TWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUnID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1NZTkNfRklMRV9SQU5HRV9XUklURScgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fU19JRkJMSycgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fU19JRkNIUicgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fU19JRklGTycgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fU19JRlJFRycgPT4gJ2Vpby9laW8uc3R1YicsICdFSU9fU19JRlNPQ0snID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1NfSVJHUlAnID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1NfSVJPVEgnID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1NfSVJVU1InID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1NfSVdHUlAnID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1NfSVdPVEgnID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1NfSVdVU1InID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1NfSVhHUlAnID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1NfSVhPVEgnID0+ICdlaW8vZWlvLnN0dWInLCAnRUlPX1NfSVhVU1InID0+ICdlaW8vZWlvLnN0dWInLCAnRU5DN0JJVCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ0VOQzhCSVQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdFTkNCQVNFNjQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdFTkNCSU5BUlknID0+ICdpbWFwL2ltYXAuc3R1YicsICdFTkNIQU5UX0lTUEVMTCcgPT4gJ2VuY2hhbnQvZW5jaGFudC5zdHViJywgJ0VOQ0hBTlRfTVlTUEVMTCcgPT4gJ2VuY2hhbnQvZW5jaGFudC5zdHViJywgJ0VOQ09USEVSJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnRU5DUVVPVEVEUFJJTlRBQkxFJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnRU5UX0NPTVBBVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdFTlRfRElTQUxMT1dFRCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdFTlRfSFRNTDQwMScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdFTlRfSFRNTDUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRU5UX0lHTk9SRScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdFTlRfTk9RVU9URVMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRU5UX1FVT1RFUycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdFTlRfU1VCU1RJVFVURScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdFTlRfWEhUTUwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRU5UX1hNTDEnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRVJBJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0VSQV9EX0ZNVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdFUkFfRF9UX0ZNVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdFUkFfVF9GTVQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRVJBX1lFQVInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRVZCVUZGRVJfRU9GJyA9PiAnbGliZXZlbnQvbGliZXZlbnQuc3R1YicsICdFVkJVRkZFUl9FUlJPUicgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnRVZCVUZGRVJfUkVBRCcgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnRVZCVUZGRVJfVElNRU9VVCcgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnRVZCVUZGRVJfV1JJVEUnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ0VWTE9PUF9OT05CTE9DSycgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnRVZMT09QX09OQ0UnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ0VWX1BFUlNJU1QnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ0VWX1JFQUQnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ0VWX1NJR05BTCcgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnRVZfVElNRU9VVCcgPT4gJ2xpYmV2ZW50L2xpYmV2ZW50LnN0dWInLCAnRVZfV1JJVEUnID0+ICdsaWJldmVudC9saWJldmVudC5zdHViJywgJ0VYSUZfVVNFX01CU1RSSU5HJyA9PiAnZXhpZi9leGlmLnN0dWInLCAnRVhQX0VPRicgPT4gJ2V4cGVjdC9leHBlY3Quc3R1YicsICdFWFBfRVhBQ1QnID0+ICdleHBlY3QvZXhwZWN0LnN0dWInLCAnRVhQX0ZVTExCVUZGRVInID0+ICdleHBlY3QvZXhwZWN0LnN0dWInLCAnRVhQX0dMT0InID0+ICdleHBlY3QvZXhwZWN0LnN0dWInLCAnRVhQX1JFR0VYUCcgPT4gJ2V4cGVjdC9leHBlY3Quc3R1YicsICdFWFBfVElNRU9VVCcgPT4gJ2V4cGVjdC9leHBlY3Quc3R1YicsICdFWFRSX0lGX0VYSVNUUycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdFWFRSX09WRVJXUklURScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdFWFRSX1BSRUZJWF9BTEwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRVhUUl9QUkVGSVhfSUZfRVhJU1RTJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0VYVFJfUFJFRklYX0lOVkFMSUQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRVhUUl9QUkVGSVhfU0FNRScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdFWFRSX1JFRlMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRVhUUl9TS0lQJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0VfQUxMJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdFX0NPTVBJTEVfRVJST1InID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ0VfQ09NUElMRV9XQVJOSU5HJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdFX0NPUkVfRVJST1InID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ0VfQ09SRV9XQVJOSU5HJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdFX0RFUFJFQ0FURUQnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ0VfRVJST1InID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ0VfTk9USUNFJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdFX1BBUlNFJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdFX1JFQ09WRVJBQkxFX0VSUk9SJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdFX1NUUklDVCcgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnRV9VU0VSX0RFUFJFQ0FURUQnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ0VfVVNFUl9FUlJPUicgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnRV9VU0VSX05PVElDRScgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnRV9VU0VSX1dBUk5JTkcnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ0VfV0FSTklORycgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnRWRpdEJveCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdGQU5OX0NPUycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ0ZBTk5fQ09TX1NZTU1FVFJJQycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ0ZBTk5fRUxMSU9UJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9FTExJT1RfU1lNTUVUUklDJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9FUlJPUkZVTkNfTElORUFSJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9FUlJPUkZVTkNfVEFOSCcgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ0ZBTk5fRV9DQU5UX0FMTE9DQVRFX01FTScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ0ZBTk5fRV9DQU5UX09QRU5fQ09ORklHX1InID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX0VfQ0FOVF9PUEVOX0NPTkZJR19XJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9FX0NBTlRfT1BFTl9URF9SJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9FX0NBTlRfT1BFTl9URF9XJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9FX0NBTlRfUkVBRF9DT05GSUcnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX0VfQ0FOVF9SRUFEX0NPTk5FQ1RJT05TJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9FX0NBTlRfUkVBRF9ORVVST04nID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX0VfQ0FOVF9SRUFEX1REJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9FX0NBTlRfVFJBSU5fQUNUSVZBVElPTicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ0ZBTk5fRV9DQU5UX1VTRV9BQ1RJVkFUSU9OJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9FX0NBTlRfVVNFX1RSQUlOX0FMRycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ0ZBTk5fRV9JTkRFWF9PVVRfT0ZfQk9VTkQnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX0VfSU5QVVRfTk9fTUFUQ0gnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX0VfTk9fRVJST1InID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX0VfT1VUUFVUX05PX01BVENIJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9FX1NDQUxFX05PVF9QUkVTRU5UJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9FX1RSQUlOX0RBVEFfTUlTTUFUQ0gnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX0VfVFJBSU5fREFUQV9TVUJTRVQnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX0VfV1JPTkdfQ09ORklHX1ZFUlNJT04nID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX0VfV1JPTkdfTlVNX0NPTk5FQ1RJT05TJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9HQVVTU0lBTicgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ0ZBTk5fR0FVU1NJQU5fU1RFUFdJU0UnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX0dBVVNTSUFOX1NZTU1FVFJJQycgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ0ZBTk5fTElORUFSJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9MSU5FQVJfUElFQ0UnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX0xJTkVBUl9QSUVDRV9TWU1NRVRSSUMnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX05FVFRZUEVfTEFZRVInID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX05FVFRZUEVfU0hPUlRDVVQnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX1NJR01PSUQnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX1NJR01PSURfU1RFUFdJU0UnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX1NJR01PSURfU1lNTUVUUklDJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9TSUdNT0lEX1NZTU1FVFJJQ19TVEVQV0lTRScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ0ZBTk5fU0lOJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9TSU5fU1lNTUVUUklDJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9TVE9QRlVOQ19CSVQnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX1NUT1BGVU5DX01TRScgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ0ZBTk5fVEhSRVNIT0xEJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9USFJFU0hPTERfU1lNTUVUUklDJyA9PiAnZmFubi9mYW5uLnN0dWInLCAnRkFOTl9UUkFJTl9CQVRDSCcgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ0ZBTk5fVFJBSU5fSU5DUkVNRU5UQUwnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX1RSQUlOX1FVSUNLUFJPUCcgPT4gJ2Zhbm4vZmFubi5zdHViJywgJ0ZBTk5fVFJBSU5fUlBST1AnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX1RSQUlOX1NBUlBST1AnID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGQU5OX1ZFUlNJT04nID0+ICdmYW5uL2Zhbm4uc3R1YicsICdGSUxFSU5GT19BUFBMRScgPT4gJ2ZpbGVpbmZvL2ZpbGVpbmZvLnN0dWInLCAnRklMRUlORk9fQ09OVElOVUUnID0+ICdmaWxlaW5mby9maWxlaW5mby5zdHViJywgJ0ZJTEVJTkZPX0RFVklDRVMnID0+ICdmaWxlaW5mby9maWxlaW5mby5zdHViJywgJ0ZJTEVJTkZPX0VYVEVOU0lPTicgPT4gJ2ZpbGVpbmZvL2ZpbGVpbmZvLnN0dWInLCAnRklMRUlORk9fTUlNRScgPT4gJ2ZpbGVpbmZvL2ZpbGVpbmZvLnN0dWInLCAnRklMRUlORk9fTUlNRV9FTkNPRElORycgPT4gJ2ZpbGVpbmZvL2ZpbGVpbmZvLnN0dWInLCAnRklMRUlORk9fTUlNRV9UWVBFJyA9PiAnZmlsZWluZm8vZmlsZWluZm8uc3R1YicsICdGSUxFSU5GT19OT05FJyA9PiAnZmlsZWluZm8vZmlsZWluZm8uc3R1YicsICdGSUxFSU5GT19QUkVTRVJWRV9BVElNRScgPT4gJ2ZpbGVpbmZvL2ZpbGVpbmZvLnN0dWInLCAnRklMRUlORk9fUkFXJyA9PiAnZmlsZWluZm8vZmlsZWluZm8uc3R1YicsICdGSUxFSU5GT19TWU1MSU5LJyA9PiAnZmlsZWluZm8vZmlsZWluZm8uc3R1YicsICdGSUxFX0FQUEVORCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdGSUxFX0JJTkFSWScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdGSUxFX0lHTk9SRV9ORVdfTElORVMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRklMRV9OT19ERUZBVUxUX0NPTlRFWFQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRklMRV9TS0lQX0VNUFRZX0xJTkVTJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0ZJTEVfVEVYVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdGSUxFX1VTRV9JTkNMVURFX1BBVEgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRklMVEVSX0NBTExCQUNLJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9ERUZBVUxUJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9GTEFHX0FMTE9XX0ZSQUNUSU9OJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9GTEFHX0FMTE9XX0hFWCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfRkxBR19BTExPV19PQ1RBTCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfRkxBR19BTExPV19TQ0lFTlRJRklDJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9GTEFHX0FMTE9XX1RIT1VTQU5EJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9GTEFHX0VNQUlMX1VOSUNPREUnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX0ZMQUdfRU1QVFlfU1RSSU5HX05VTEwnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX0ZMQUdfRU5DT0RFX0FNUCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfRkxBR19FTkNPREVfSElHSCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfRkxBR19FTkNPREVfTE9XJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9GTEFHX0dMT0JBTF9SQU5HRScgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfRkxBR19IT1NUTkFNRScgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfRkxBR19IT1NUX1JFUVVJUkVEJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9GTEFHX0lQVjQnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX0ZMQUdfSVBWNicgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfRkxBR19OT05FJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9GTEFHX05PX0VOQ09ERV9RVU9URVMnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX0ZMQUdfTk9fUFJJVl9SQU5HRScgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfRkxBR19OT19SRVNfUkFOR0UnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX0ZMQUdfUEFUSF9SRVFVSVJFRCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfRkxBR19RVUVSWV9SRVFVSVJFRCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfRkxBR19TQ0hFTUVfUkVRVUlSRUQnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX0ZMQUdfU1RSSVBfQkFDS1RJQ0snID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX0ZMQUdfU1RSSVBfSElHSCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfRkxBR19TVFJJUF9MT1cnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX0ZPUkNFX0FSUkFZJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9OVUxMX09OX0ZBSUxVUkUnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX1JFUVVJUkVfQVJSQVknID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX1JFUVVJUkVfU0NBTEFSJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9TQU5JVElaRV9BRERfU0xBU0hFUycgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfU0FOSVRJWkVfRU1BSUwnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX1NBTklUSVpFX0VOQ09ERUQnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX1NBTklUSVpFX0ZVTExfU1BFQ0lBTF9DSEFSUycgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfU0FOSVRJWkVfTUFHSUNfUVVPVEVTJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9TQU5JVElaRV9OVU1CRVJfRkxPQVQnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX1NBTklUSVpFX05VTUJFUl9JTlQnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX1NBTklUSVpFX1NQRUNJQUxfQ0hBUlMnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX1NBTklUSVpFX1NUUklORycgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfU0FOSVRJWkVfU1RSSVBQRUQnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX1NBTklUSVpFX1VSTCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfVU5TQUZFX1JBVycgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfVkFMSURBVEVfQk9PTCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfVkFMSURBVEVfQk9PTEVBTicgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfVkFMSURBVEVfRE9NQUlOJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9WQUxJREFURV9FTUFJTCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfVkFMSURBVEVfRkxPQVQnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX1ZBTElEQVRFX0lOVCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfVkFMSURBVEVfSVAnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRklMVEVSX1ZBTElEQVRFX01BQycgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdGSUxURVJfVkFMSURBVEVfUkVHRVhQJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0ZJTFRFUl9WQUxJREFURV9VUkwnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnRk5NX0NBU0VGT0xEJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0ZOTV9OT0VTQ0FQRScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdGTk1fUEFUSE5BTUUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnRk5NX1BFUklPRCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdGT1JDRV9ERUZMQVRFJyA9PiAnemxpYi96bGliLnN0dWInLCAnRk9SQ0VfR1pJUCcgPT4gJ3psaWIvemxpYi5zdHViJywgJ0ZQRV9GTFRESVYnID0+ICdwY250bC9wY250bC5zdHViJywgJ0ZQRV9GTFRJTlYnID0+ICdwY250bC9wY250bC5zdHViJywgJ0ZQRV9GTFRPVkYnID0+ICdwY250bC9wY250bC5zdHViJywgJ0ZQRV9GTFRSRVMnID0+ICdwY250bC9wY250bC5zdHViJywgJ0ZQRV9GTFRTVUInID0+ICdwY250bC9wY250bC5zdHViJywgJ0ZQRV9GTFRVTkQnID0+ICdwY250bC9wY250bC5zdHViJywgJ0ZQRV9JTlRESVYnID0+ICdwY250bC9wY250bC5zdHViJywgJ0ZQRV9JTlRPVkYnID0+ICdwY250bC9wY250bC5zdHViJywgJ0ZSQUNfRElHSVRTJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0ZUQV9CT0xEJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ0ZUQV9JVEFMSUMnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnRlRBX05PUk1BTCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdGVEFfUkVHVUxBUicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdGVEFfU1RSSUtFT1VUJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ0ZUQV9VTkRFUkxJTkUnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnRlRQX0FTQ0lJJyA9PiAnZnRwL2Z0cC5zdHViJywgJ0ZUUF9BVVRPUkVTVU1FJyA9PiAnZnRwL2Z0cC5zdHViJywgJ0ZUUF9BVVRPU0VFSycgPT4gJ2Z0cC9mdHAuc3R1YicsICdGVFBfQklOQVJZJyA9PiAnZnRwL2Z0cC5zdHViJywgJ0ZUUF9GQUlMRUQnID0+ICdmdHAvZnRwLnN0dWInLCAnRlRQX0ZJTklTSEVEJyA9PiAnZnRwL2Z0cC5zdHViJywgJ0ZUUF9JTUFHRScgPT4gJ2Z0cC9mdHAuc3R1YicsICdGVFBfTU9SRURBVEEnID0+ICdmdHAvZnRwLnN0dWInLCAnRlRQX1RFWFQnID0+ICdmdHAvZnRwLnN0dWInLCAnRlRQX1RJTUVPVVRfU0VDJyA9PiAnZnRwL2Z0cC5zdHViJywgJ0ZUUF9VU0VQQVNWQUREUkVTUycgPT4gJ2Z0cC9mdHAuc3R1YicsICdGVF9JTlRFUk5BTCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ0ZUX05PVCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ0ZUX1BFRUsnID0+ICdpbWFwL2ltYXAuc3R1YicsICdGVF9QUkVGRVRDSFRFWFQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdGVF9VSUQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdGX0RVUEZEJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnRl9HRVRGRCcgPT4gJ2Rpby9kaW9fZC5zdHViJywgJ0ZfR0VURkwnID0+ICdkaW8vZGlvX2Quc3R1YicsICdGX0dFVExLJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnRl9HRVRPV04nID0+ICdkaW8vZGlvX2Quc3R1YicsICdGX1JETENLJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnRl9TRVRGTCcgPT4gJ2Rpby9kaW9fZC5zdHViJywgJ0ZfU0VUTEsnID0+ICdkaW8vZGlvX2Quc3R1YicsICdGX1NFVExLVycgPT4gJ2Rpby9kaW9fZC5zdHViJywgJ0ZfU0VUT1dOJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnRl9VTkxDSycgPT4gJ2Rpby9kaW9fZC5zdHViJywgJ0ZfV1JMQ0snID0+ICdkaW8vZGlvX2Quc3R1YicsICdGcmFtZScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdHRF9CVU5ETEVEJyA9PiAnZ2QvZ2Quc3R1YicsICdHRF9FWFRSQV9WRVJTSU9OJyA9PiAnZ2QvZ2Quc3R1YicsICdHRF9NQUpPUl9WRVJTSU9OJyA9PiAnZ2QvZ2Quc3R1YicsICdHRF9NSU5PUl9WRVJTSU9OJyA9PiAnZ2QvZ2Quc3R1YicsICdHRF9SRUxFQVNFX1ZFUlNJT04nID0+ICdnZC9nZC5zdHViJywgJ0dEX1ZFUlNJT04nID0+ICdnZC9nZC5zdHViJywgJ0dFQVJNQU5fQVJHU19CVUZGRVJfU0laRScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ0xJRU5UX0FMTE9DQVRFRCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ0xJRU5UX0ZSRUVfVEFTS1MnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NMSUVOVF9OT05fQkxPQ0tJTkcnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NMSUVOVF9OT19ORVcnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NMSUVOVF9TVEFURV9JRExFJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DTElFTlRfU1RBVEVfTkVXJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DTElFTlRfU1RBVEVfUEFDS0VUJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DTElFTlRfU1RBVEVfU1VCTUlUJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DTElFTlRfVEFTS19JTl9VU0UnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NMSUVOVF9VTkJVRkZFUkVEX1JFU1VMVCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9BTExfWU9VUlMnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTU1BTkRfQ0FOVF9ETycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9DQU5fRE8nID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTU1BTkRfQ0FOX0RPX1RJTUVPVVQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTU1BTkRfRUNIT19SRVEnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTU1BTkRfRUNIT19SRVMnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTU1BTkRfRVJST1InID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTU1BTkRfR0VUX1NUQVRVUycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9HUkFCX0pPQicgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9HUkFCX0pPQl9VTklRJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX0pPQl9BU1NJR04nID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTU1BTkRfSk9CX0FTU0lHTl9VTklRJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX0pPQl9DUkVBVEVEJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX01BWCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9OT09QJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX05PX0pPQicgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9PUFRJT05fUkVRJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX09QVElPTl9SRVMnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTU1BTkRfUFJFX1NMRUVQJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX1JFU0VUX0FCSUxJVElFUycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9TRVRfQ0xJRU5UX0lEJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX1NUQVRVU19SRVMnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTU1BTkRfU1VCTUlUX0pPQicgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9TVUJNSVRfSk9CX0JHJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX1NVQk1JVF9KT0JfRVBPQ0gnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTU1BTkRfU1VCTUlUX0pPQl9ISUdIJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX1NVQk1JVF9KT0JfSElHSF9CRycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9TVUJNSVRfSk9CX0xPVycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9TVUJNSVRfSk9CX0xPV19CRycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9TVUJNSVRfSk9CX1NDSEVEJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX1RFWFQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTU1BTkRfVU5VU0VEJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX1dPUktfQ09NUExFVEUnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTU1BTkRfV09SS19EQVRBJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX1dPUktfRVhDRVBUSU9OJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT01NQU5EX1dPUktfRkFJTCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9XT1JLX1NUQVRVUycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09NTUFORF9XT1JLX1dBUk5JTkcnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTl9DTE9TRV9BRlRFUl9GTFVTSCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09OX0VYVEVSTkFMX0ZEJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT05fSUdOT1JFX0xPU1RfQ09OTkVDVElPTicgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09OX1BBQ0tFVF9JTl9VU0UnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0NPTl9SRUFEWScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fQ09OX1JFQ1ZfU1RBVEVfUkVBRF9EQVRBJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT05fU0VORF9TVEFURV9OT05FJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9DT1VMRF9OT1RfQ09OTkVDVCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fREFUQV9UT09fTEFSR0UnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0RFRkFVTFRfU09DS0VUX1JFQ1ZfU0laRScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fREVGQVVMVF9TT0NLRVRfU0VORF9TSVpFJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9ERUZBVUxUX1NPQ0tFVF9USU1FT1VUJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9ERUZBVUxUX1RDUF9IT1NUJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9ERUZBVUxUX1RDUF9QT1JUJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9ET05UX1RSQUNLX1BBQ0tFVFMnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0VDSE9fREFUQV9DT1JSVVBUSU9OJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9FUlJOTycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fRVZFTlQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0ZMVVNIX0RBVEEnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0dFVEFERFJJTkZPJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9JR05PUkVfUEFDS0VUJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9JTlZBTElEX0NPTU1BTkQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0lOVkFMSURfRlVOQ1RJT05fTkFNRScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fSU5WQUxJRF9NQUdJQycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fSU5WQUxJRF9QQUNLRVQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0lOVkFMSURfV09SS0VSX0ZVTkNUSU9OJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9JT19XQUlUJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9KT0JfRVhJU1RTJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9KT0JfSEFORExFX1NJWkUnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX0pPQl9QUklPUklUWV9ISUdIJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9KT0JfUFJJT1JJVFlfTE9XJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9KT0JfUFJJT1JJVFlfTUFYJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9KT0JfUFJJT1JJVFlfTk9STUFMJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9KT0JfUVVFVUVfRlVMTCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fTE9TVF9DT05ORUNUSU9OJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9NQUdJQ19SRVFVRVNUJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9NQUdJQ19SRVNQT05TRScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fTUFHSUNfVEVYVCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fTUFYX0NPTU1BTkRfQVJHUycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fTUFYX0VSUk9SX1NJWkUnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX01BWF9SRVRVUk4nID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX01FTU9SWV9BTExPQ0FUSU9OX0ZBSUxVUkUnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX05FRURfV09SS0xPQURfRk4nID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX05PTl9CTE9DS0lORycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fTk9UX0NPTk5FQ1RFRCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fTk9UX0ZMVVNISU5HJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9OT19BQ1RJVkVfRkRTJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9OT19KT0JTJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9OT19SRUdJU1RFUkVEX0ZVTkNUSU9OUycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fTk9fU0VSVkVSUycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fT1BUSU9OX1NJWkUnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1BBQ0tFVF9IRUFERVJfU0laRScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fUEFVU0UnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1BJUEVfRU9GJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9QVEhSRUFEJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9RVUVVRV9FUlJPUicgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fUkVDVl9CVUZGRVJfU0laRScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fUkVDVl9JTl9QUk9HUkVTUycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fU0VORF9CVUZGRVJfU0laRScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fU0VORF9CVUZGRVJfVE9PX1NNQUxMJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9TRU5EX0lOX1BST0dSRVNTJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9TRVJWRVJfRVJST1InID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1NIVVRET1dOJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9TSFVURE9XTl9HUkFDRUZVTCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fU1VDQ0VTUycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fVEFTS19TVEFURV9DT01QTEVURScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fVEFTS19TVEFURV9DUkVBVEVEJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9UQVNLX1NUQVRFX0RBVEEnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1RBU0tfU1RBVEVfRVhDRVBUSU9OJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9UQVNLX1NUQVRFX0ZBSUwnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1RBU0tfU1RBVEVfRklOSVNIRUQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1RBU0tfU1RBVEVfTkVXJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9UQVNLX1NUQVRFX1NUQVRVUycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fVEFTS19TVEFURV9TVUJNSVQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1RBU0tfU1RBVEVfV0FSTklORycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fVEFTS19TVEFURV9XT1JLJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9UQVNLX1NUQVRFX1dPUktMT0FEJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9USU1FT1VUJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9UT09fTUFOWV9BUkdTJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9VTkVYUEVDVEVEX1BBQ0tFVCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fVU5JUVVFX1NJWkUnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1VOS05PV05fT1BUSU9OJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9VTktOT1dOX1NUQVRFJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9WRVJCT1NFX0NSQVpZJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9WRVJCT1NFX0RFQlVHJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9WRVJCT1NFX0VSUk9SJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9WRVJCT1NFX0ZBVEFMJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9WRVJCT1NFX0lORk8nID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1ZFUkJPU0VfTUFYJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9WRVJCT1NFX05FVkVSJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9XT1JLRVJfQUxMT0NBVEVEJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9XT1JLRVJfQ0hBTkdFJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9XT1JLRVJfR1JBQl9KT0JfSU5fVVNFJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9XT1JLRVJfR1JBQl9VTklRJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9XT1JLRVJfTk9OX0JMT0NLSU5HJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9XT1JLRVJfUEFDS0VUX0lOSVQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1dPUktFUl9QUkVfU0xFRVBfSU5fVVNFJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9XT1JLRVJfU1RBVEVfQ09OTkVDVCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fV09SS0VSX1NUQVRFX0ZVTkNUSU9OX1NFTkQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1dPUktFUl9TVEFURV9HUkFCX0pPQl9SRUNWJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9XT1JLRVJfU1RBVEVfR1JBQl9KT0JfU0VORCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fV09SS0VSX1NUQVRFX1BSRV9TTEVFUCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fV09SS0VSX1NUQVRFX1NUQVJUJyA9PiAnZ2Vhcm1hbi9nZWFybWFuLnN0dWInLCAnR0VBUk1BTl9XT1JLRVJfVElNRU9VVF9SRVRVUk4nID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1dPUktFUl9XQUlUX1RJTUVPVVQnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1dPUktFUl9XT1JLX0pPQl9JTl9VU0UnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1dPUktfREFUQScgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fV09SS19FUlJPUicgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fV09SS19FWENFUFRJT04nID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1dPUktfRkFJTCcgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFQVJNQU5fV09SS19TVEFUVVMnID0+ICdnZWFybWFuL2dlYXJtYW4uc3R1YicsICdHRUFSTUFOX1dPUktfV0FSTklORycgPT4gJ2dlYXJtYW4vZ2Vhcm1hbi5zdHViJywgJ0dFT0lQX0FTTlVNX0VESVRJT04nID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ0dFT0lQX0NBQkxFRFNMX1NQRUVEJyA9PiAnZ2VvaXAvZ2VvaXAuc3R1YicsICdHRU9JUF9DSVRZX0VESVRJT05fUkVWMCcgPT4gJ2dlb2lwL2dlb2lwLnN0dWInLCAnR0VPSVBfQ0lUWV9FRElUSU9OX1JFVjEnID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ0dFT0lQX0NPUlBPUkFURV9TUEVFRCcgPT4gJ2dlb2lwL2dlb2lwLnN0dWInLCAnR0VPSVBfQ09VTlRSWV9FRElUSU9OJyA9PiAnZ2VvaXAvZ2VvaXAuc3R1YicsICdHRU9JUF9ESUFMVVBfU1BFRUQnID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ0dFT0lQX0RPTUFJTl9FRElUSU9OJyA9PiAnZ2VvaXAvZ2VvaXAuc3R1YicsICdHRU9JUF9JU1BfRURJVElPTicgPT4gJ2dlb2lwL2dlb2lwLnN0dWInLCAnR0VPSVBfTkVUU1BFRURfRURJVElPTicgPT4gJ2dlb2lwL2dlb2lwLnN0dWInLCAnR0VPSVBfT1JHX0VESVRJT04nID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ0dFT0lQX1BST1hZX0VESVRJT04nID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ0dFT0lQX1JFR0lPTl9FRElUSU9OX1JFVjAnID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ0dFT0lQX1JFR0lPTl9FRElUSU9OX1JFVjEnID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ0dFT0lQX1VOS05PV05fU1BFRUQnID0+ICdnZW9pcC9nZW9pcC5zdHViJywgJ0dFT1NCVUZfQ0FQX0ZMQVQnID0+ICdnZW9zL2dlb3Muc3R1YicsICdHRU9TQlVGX0NBUF9ST1VORCcgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NCVUZfQ0FQX1NRVUFSRScgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NCVUZfSk9JTl9CRVZFTCcgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NCVUZfSk9JTl9NSVRSRScgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NCVUZfSk9JTl9ST1VORCcgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NSRUxBVEVfQk5SX0VORFBPSU5UJyA9PiAnZ2Vvcy9nZW9zLnN0dWInLCAnR0VPU1JFTEFURV9CTlJfTU9EMicgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NSRUxBVEVfQk5SX01PTk9WQUxFTlRfRU5EUE9JTlQnID0+ICdnZW9zL2dlb3Muc3R1YicsICdHRU9TUkVMQVRFX0JOUl9NVUxUSVZBTEVOVF9FTkRQT0lOVCcgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NSRUxBVEVfQk5SX09HQycgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NWQUxJRF9BTExPV19TRUxGVE9VQ0hJTkdfUklOR19GT1JNSU5HX0hPTEUnID0+ICdnZW9zL2dlb3Muc3R1YicsICdHRU9TX0dFT01FVFJZQ09MTEVDVElPTicgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NfTElORUFSUklORycgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NfTElORVNUUklORycgPT4gJ2dlb3MvZ2Vvcy5zdHViJywgJ0dFT1NfTVVMVElMSU5FU1RSSU5HJyA9PiAnZ2Vvcy9nZW9zLnN0dWInLCAnR0VPU19NVUxUSVBPSU5UJyA9PiAnZ2Vvcy9nZW9zLnN0dWInLCAnR0VPU19NVUxUSVBPTFlHT04nID0+ICdnZW9zL2dlb3Muc3R1YicsICdHRU9TX1BPSU5UJyA9PiAnZ2Vvcy9nZW9zLnN0dWInLCAnR0VPU19QT0xZR09OJyA9PiAnZ2Vvcy9nZW9zLnN0dWInLCAnR0xPQl9BVkFJTEFCTEVfRkxBR1MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnR0xPQl9CUkFDRScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdHTE9CX0VSUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdHTE9CX01BUksnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnR0xPQl9OT0NIRUNLJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0dMT0JfTk9FU0NBUEUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnR0xPQl9OT1NPUlQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnR0xPQl9PTkxZRElSJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0dNUF9CSUdfRU5ESUFOJyA9PiAnZ21wL2dtcC5zdHViJywgJ0dNUF9MSVRUTEVfRU5ESUFOJyA9PiAnZ21wL2dtcC5zdHViJywgJ0dNUF9MU1dfRklSU1QnID0+ICdnbXAvZ21wLnN0dWInLCAnR01QX01QSVJfVkVSU0lPTicgPT4gJ2dtcC9nbXAuc3R1YicsICdHTVBfTVNXX0ZJUlNUJyA9PiAnZ21wL2dtcC5zdHViJywgJ0dNUF9OQVRJVkVfRU5ESUFOJyA9PiAnZ21wL2dtcC5zdHViJywgJ0dNUF9ST1VORF9NSU5VU0lORicgPT4gJ2dtcC9nbXAuc3R1YicsICdHTVBfUk9VTkRfUExVU0lORicgPT4gJ2dtcC9nbXAuc3R1YicsICdHTVBfUk9VTkRfWkVSTycgPT4gJ2dtcC9nbXAuc3R1YicsICdHTVBfVkVSU0lPTicgPT4gJ2dtcC9nbXAuc3R1YicsICdHTlVQR19FUlJPUl9FWENFUFRJT04nID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ0dOVVBHX0VSUk9SX1NJTEVOVCcgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfRVJST1JfV0FSTklORycgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfR1BHTUVfVkVSU0lPTicgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfUEtfRFNBJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdHTlVQR19QS19FQ0MnID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ0dOVVBHX1BLX0VDREgnID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ0dOVVBHX1BLX0VDRFNBJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdHTlVQR19QS19FRERTQScgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfUEtfRUxHJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdHTlVQR19QS19FTEdfRScgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfUEtfUlNBJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdHTlVQR19QS19SU0FfRScgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfUEtfUlNBX1MnID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ0dOVVBHX1BST1RPQ09MX0NNUycgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfUFJPVE9DT0xfT3BlblBHUCcgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfU0lHU1VNX0JBRF9QT0xJQ1knID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ0dOVVBHX1NJR1NVTV9DUkxfTUlTU0lORycgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfU0lHU1VNX0NSTF9UT09fT0xEJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdHTlVQR19TSUdTVU1fR1JFRU4nID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ0dOVVBHX1NJR1NVTV9LRVlfRVhQSVJFRCcgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfU0lHU1VNX0tFWV9NSVNTSU5HJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdHTlVQR19TSUdTVU1fS0VZX1JFVk9LRUQnID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ0dOVVBHX1NJR1NVTV9SRUQnID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ0dOVVBHX1NJR1NVTV9TSUdfRVhQSVJFRCcgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfU0lHU1VNX1NZU19FUlJPUicgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfU0lHU1VNX1ZBTElEJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdHTlVQR19TSUdfTU9ERV9DTEVBUicgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfU0lHX01PREVfREVUQUNIJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdHTlVQR19TSUdfTU9ERV9OT1JNQUwnID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ0dOVVBHX1ZBTElESVRZX0ZVTEwnID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ0dOVVBHX1ZBTElESVRZX01BUkdJTkFMJyA9PiAnZ251cGcvZ251cGcuc3R1YicsICdHTlVQR19WQUxJRElUWV9ORVZFUicgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfVkFMSURJVFlfVUxUSU1BVEUnID0+ICdnbnVwZy9nbnVwZy5zdHViJywgJ0dOVVBHX1ZBTElESVRZX1VOREVGSU5FRCcgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR05VUEdfVkFMSURJVFlfVU5LTk9XTicgPT4gJ2dudXBnL2dudXBnLnN0dWInLCAnR1JBUEhFTUVfRVhUUl9DT1VOVCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ0dSQVBIRU1FX0VYVFJfTUFYQllURVMnID0+ICdpbnRsL2ludGwuc3R1YicsICdHUkFQSEVNRV9FWFRSX01BWENIQVJTJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnR1JFRU4nID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnR1JPVVBJTkcnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnR2F1Z2UnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnR3JwY1xcQ0FMTF9FUlJPUicgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXENBTExfRVJST1JfQUxSRUFEWV9BQ0NFUFRFRCcgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXENBTExfRVJST1JfQUxSRUFEWV9GSU5JU0hFRCcgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXENBTExfRVJST1JfQUxSRUFEWV9JTlZPS0VEJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcQ0FMTF9FUlJPUl9CQVRDSF9UT09fQklHJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcQ0FMTF9FUlJPUl9JTlZBTElEX0ZMQUdTJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcQ0FMTF9FUlJPUl9JTlZBTElEX01FU1NBR0UnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxDQUxMX0VSUk9SX0lOVkFMSURfTUVUQURBVEEnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxDQUxMX0VSUk9SX05PVF9JTlZPS0VEJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcQ0FMTF9FUlJPUl9OT1RfT05fQ0xJRU5UJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcQ0FMTF9FUlJPUl9OT1RfT05fU0VSVkVSJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcQ0FMTF9FUlJPUl9OT1RfU0VSVkVSX0NPTVBMRVRJT05fUVVFVUUnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxDQUxMX0VSUk9SX1BBWUxPQURfVFlQRV9NSVNNQVRDSCcgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXENBTExfRVJST1JfVE9PX01BTllfT1BFUkFUSU9OUycgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXENBTExfT0snID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxDSEFOTkVMX0NPTk5FQ1RJTkcnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxDSEFOTkVMX0ZBVEFMX0ZBSUxVUkUnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxDSEFOTkVMX0lETEUnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxDSEFOTkVMX1JFQURZJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcQ0hBTk5FTF9TSFVURE9XTicgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXENIQU5ORUxfVFJBTlNJRU5UX0ZBSUxVUkUnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxPUF9SRUNWX0NMT1NFX09OX1NFUlZFUicgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXE9QX1JFQ1ZfSU5JVElBTF9NRVRBREFUQScgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXE9QX1JFQ1ZfTUVTU0FHRScgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXE9QX1JFQ1ZfU1RBVFVTX09OX0NMSUVOVCcgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXE9QX1NFTkRfQ0xPU0VfRlJPTV9DTElFTlQnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxPUF9TRU5EX0lOSVRJQUxfTUVUQURBVEEnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxPUF9TRU5EX01FU1NBR0UnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxPUF9TRU5EX1NUQVRVU19GUk9NX1NFUlZFUicgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXFNUQVRVU19BQk9SVEVEJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcU1RBVFVTX0FMUkVBRFlfRVhJU1RTJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcU1RBVFVTX0NBTkNFTExFRCcgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXFNUQVRVU19EQVRBX0xPU1MnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxTVEFUVVNfREVBRExJTkVfRVhDRUVERUQnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxTVEFUVVNfRkFJTEVEX1BSRUNPTkRJVElPTicgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXFNUQVRVU19JTlRFUk5BTCcgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXFNUQVRVU19JTlZBTElEX0FSR1VNRU5UJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcU1RBVFVTX05PVF9GT1VORCcgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXFNUQVRVU19PSycgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXFNUQVRVU19PVVRfT0ZfUkFOR0UnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxTVEFUVVNfUEVSTUlTU0lPTl9ERU5JRUQnID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxTVEFUVVNfUkVTT1VSQ0VfRVhIQVVTVEVEJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcU1RBVFVTX1VOQVVUSEVOVElDQVRFRCcgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXFNUQVRVU19VTkFWQUlMQUJMRScgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXFNUQVRVU19VTklNUExFTUVOVEVEJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnR3JwY1xcU1RBVFVTX1VOS05PV04nID0+ICdncnBjL2dycGMuc3R1YicsICdHcnBjXFxXUklURV9CVUZGRVJfSElOVCcgPT4gJ2dycGMvZ3JwYy5zdHViJywgJ0dycGNcXFdSSVRFX05PX0NPTVBSRVNTJyA9PiAnZ3JwYy9ncnBjLnN0dWInLCAnSEFTSF9ITUFDJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnSFRNTENvbnRyb2wnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnSFRNTF9FTlRJVElFUycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdIVE1MX1NQRUNJQUxDSEFSUycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdIVFRQX0FVVEhfQU5ZJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9BVVRIX0JBU0lDJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9BVVRIX0RJR0VTVCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfQVVUSF9HU1NORUcnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX0FVVEhfTlRMTScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfQ09PS0lFX0hUVFBPTkxZJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9DT09LSUVfUEFSU0VfUkFXJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9DT09LSUVfU0VDVVJFJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9ERUZMQVRFX0xFVkVMX0RFRicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfREVGTEFURV9MRVZFTF9NQVgnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX0RFRkxBVEVfTEVWRUxfTUlOJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9ERUZMQVRFX1NUUkFURUdZX0RFRicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfREVGTEFURV9TVFJBVEVHWV9GSUxUJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9ERUZMQVRFX1NUUkFURUdZX0ZJWEVEJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9ERUZMQVRFX1NUUkFURUdZX0hVRkYnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX0RFRkxBVEVfU1RSQVRFR1lfUkxFJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9ERUZMQVRFX1RZUEVfR1pJUCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfREVGTEFURV9UWVBFX1JBVycgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfREVGTEFURV9UWVBFX1pMSUInID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX0VOQ09ESU5HX1NUUkVBTV9GTFVTSF9GVUxMJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9FTkNPRElOR19TVFJFQU1fRkxVU0hfTk9ORScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfRU5DT0RJTkdfU1RSRUFNX0ZMVVNIX1NZTkMnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX0VfRU5DT0RJTkcnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX0VfSEVBREVSJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9FX0lOVkFMSURfUEFSQU0nID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX0VfTUFMRk9STUVEX0hFQURFUlMnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX0VfTUVTU0FHRV9UWVBFJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9FX1FVRVJZU1RSSU5HJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9FX1JFUVVFU1QnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX0VfUkVRVUVTVF9NRVRIT0QnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX0VfUkVRVUVTVF9QT09MJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9FX1JFU1BPTlNFJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9FX1JVTlRJTUUnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX0VfU09DS0VUJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9FX1VSTCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfSVBSRVNPTFZFX0FOWScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfSVBSRVNPTFZFX1Y0JyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9JUFJFU09MVkVfVjYnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX01FVEhfQUNMJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9NRVRIX0JBU0VMSU5FX0NPTlRST0wnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX01FVEhfQ0hFQ0tJTicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfTUVUSF9DSEVDS09VVCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfTUVUSF9DT05ORUNUJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9NRVRIX0NPUFknID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX01FVEhfREVMRVRFJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9NRVRIX0dFVCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfTUVUSF9IRUFEJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9NRVRIX0xBQkVMJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9NRVRIX0xPQ0snID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX01FVEhfTUVSR0UnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX01FVEhfTUtBQ1RJVklUWScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfTUVUSF9NS0NPTCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfTUVUSF9NS1dPUktTUEFDRScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfTUVUSF9NT1ZFJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9NRVRIX09QVElPTlMnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX01FVEhfUE9TVCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfTUVUSF9QUk9QRklORCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfTUVUSF9QUk9QUEFUQ0gnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX01FVEhfUFVUJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9NRVRIX1JFUE9SVCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfTUVUSF9UUkFDRScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfTUVUSF9VTkNIRUNLT1VUJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9NRVRIX1VOTE9DSycgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfTUVUSF9VUERBVEUnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX01FVEhfVkVSU0lPTl9DT05UUk9MJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9NU0dfTk9ORScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfTVNHX1JFUVVFU1QnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX01TR19SRVNQT05TRScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfUEFSQU1TX0FMTE9XX0NPTU1BJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9QQVJBTVNfQUxMT1dfRkFJTFVSRScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfUEFSQU1TX0RFRkFVTFQnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX1BBUkFNU19SQUlTRV9FUlJPUicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfUFJPWFlfSFRUUCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfUFJPWFlfU09DS1M0JyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9QUk9YWV9TT0NLUzUnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX1FVRVJZU1RSSU5HX1RZUEVfQVJSQVknID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX1FVRVJZU1RSSU5HX1RZUEVfQk9PTCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfUVVFUllTVFJJTkdfVFlQRV9GTE9BVCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfUVVFUllTVFJJTkdfVFlQRV9JTlQnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX1FVRVJZU1RSSU5HX1RZUEVfT0JKRUNUJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9RVUVSWVNUUklOR19UWVBFX1NUUklORycgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfUkVESVJFQ1QnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX1JFRElSRUNUX0ZPVU5EJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9SRURJUkVDVF9QRVJNJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9SRURJUkVDVF9QT1NUJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9SRURJUkVDVF9QUk9YWScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfUkVESVJFQ1RfVEVNUCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfU1NMX1ZFUlNJT05fQU5ZJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9TU0xfVkVSU0lPTl9TU0x2MicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfU1NMX1ZFUlNJT05fU1NMdjMnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX1NTTF9WRVJTSU9OX1RMU3YxJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9TVVBQT1JUJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9TVVBQT1JUX0VOQ09ESU5HUycgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfU1VQUE9SVF9FVkVOVFMnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX1NVUFBPUlRfTUFHSUNNSU1FJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9TVVBQT1JUX1JFUVVFU1RTJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9TVVBQT1JUX1NTTFJFUVVFU1RTJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9VUkxfRlJPTV9FTlYnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX1VSTF9KT0lOX1BBVEgnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX1VSTF9KT0lOX1FVRVJZJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9VUkxfUkVQTEFDRScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfVVJMX1NUUklQX0FMTCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfVVJMX1NUUklQX0FVVEgnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX1VSTF9TVFJJUF9GUkFHTUVOVCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfVVJMX1NUUklQX1BBU1MnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX1VSTF9TVFJJUF9QQVRIJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9VUkxfU1RSSVBfUE9SVCcgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfVVJMX1NUUklQX1FVRVJZJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9VUkxfU1RSSVBfVVNFUicgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfVkVSU0lPTl8xXzAnID0+ICdodHRwL2h0dHAuc3R1YicsICdIVFRQX1ZFUlNJT05fMV8xJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSFRUUF9WRVJTSU9OX0FOWScgPT4gJ2h0dHAvaHR0cC5zdHViJywgJ0hUVFBfVkVSU0lPTl9OT05FJyA9PiAnaHR0cC9odHRwLnN0dWInLCAnSHlwZXJMaW5rJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ0lCQVNFX0JLUF9DT05WRVJUJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX0JLUF9JR05PUkVfQ0hFQ0tTVU1TJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX0JLUF9JR05PUkVfTElNQk8nID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfQktQX01FVEFEQVRBX09OTFknID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfQktQX05PTl9UUkFOU1BPUlRBQkxFJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX0JLUF9OT19HQVJCQUdFX0NPTExFQ1QnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfQktQX09MRF9ERVNDUklQVElPTlMnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfQ09NTUlUVEVEJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX0NPTkNVUlJFTkNZJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX0NPTlNJU1RFTkNZJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX0NSRUFURScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9ERUZBVUxUJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX0ZFVENIX0FSUkFZUycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9GRVRDSF9CTE9CUycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9OT1dBSVQnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfUFJQX0FDQ0VTU19NT0RFJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX1BSUF9BQ1RJVkFURScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9QUlBfQU1fUkVBRE9OTFknID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfUFJQX0FNX1JFQURXUklURScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9QUlBfREJfT05MSU5FJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX1BSUF9ERU5ZX05FV19BVFRBQ0hNRU5UUycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9QUlBfREVOWV9ORVdfVFJBTlNBQ1RJT05TJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX1BSUF9QQUdFX0JVRkZFUlMnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfUFJQX1JFUycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9QUlBfUkVTRVJWRV9TUEFDRScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9QUlBfUkVTX1VTRV9GVUxMJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX1BSUF9TRVRfU1FMX0RJQUxFQ1QnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfUFJQX1NIVVRET1dOX0RCJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX1BSUF9TV0VFUF9JTlRFUlZBTCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9QUlBfV01fQVNZTkMnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfUFJQX1dNX1NZTkMnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfUFJQX1dSSVRFX01PREUnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfUkVBRCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9SRUNfTk9fVkVSU0lPTicgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9SRUNfVkVSU0lPTicgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9SRVNfQ1JFQVRFJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX1JFU19ERUFDVElWQVRFX0lEWCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9SRVNfTk9fU0hBRE9XJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX1JFU19OT19WQUxJRElUWScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9SRVNfT05FX0FUX0FfVElNRScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9SRVNfUkVQTEFDRScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9SRVNfVVNFX0FMTF9TUEFDRScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9SUFJfQ0hFQ0tfREInID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfUlBSX0ZVTEwnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfUlBSX0lHTk9SRV9DSEVDS1NVTScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9SUFJfS0lMTF9TSEFET1dTJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX1JQUl9NRU5EX0RCJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX1JQUl9TV0VFUF9EQicgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9SUFJfVkFMSURBVEVfREInID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfU1RTX0RBVEFfUEFHRVMnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfU1RTX0RCX0xPRycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9TVFNfSERSX1BBR0VTJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX1NUU19JRFhfUEFHRVMnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfU1RTX1NZU19SRUxBVElPTlMnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfU1ZDX0dFVF9FTlYnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfU1ZDX0dFVF9FTlZfTE9DSycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9TVkNfR0VUX0VOVl9NU0cnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfU1ZDX0dFVF9VU0VSUycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9TVkNfSU1QTEVNRU5UQVRJT04nID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfU1ZDX1NFUlZFUl9WRVJTSU9OJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX1NWQ19TVlJfREJfSU5GTycgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9TVkNfVVNFUl9EQlBBVEgnID0+ICdpbnRlcmJhc2UvaW50ZXJiYXNlLnN0dWInLCAnSUJBU0VfVEVYVCcgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9VTklYVElNRScgPT4gJ2ludGVyYmFzZS9pbnRlcmJhc2Uuc3R1YicsICdJQkFTRV9XQUlUJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lCQVNFX1dSSVRFJyA9PiAnaW50ZXJiYXNlL2ludGVyYmFzZS5zdHViJywgJ0lDT05WX0lNUEwnID0+ICdpY29udi9pY29udi5zdHViJywgJ0lDT05WX01JTUVfREVDT0RFX0NPTlRJTlVFX09OX0VSUk9SJyA9PiAnaWNvbnYvaWNvbnYuc3R1YicsICdJQ09OVl9NSU1FX0RFQ09ERV9TVFJJQ1QnID0+ICdpY29udi9pY29udi5zdHViJywgJ0lDT05WX1ZFUlNJT04nID0+ICdpY29udi9pY29udi5zdHViJywgJ0lEQUJPUlQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnSURDQU5DRUwnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnSURDTE9TRScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdJRERFRkFVTFQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnSURIRUxQJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ0lESUdOT1JFJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ0lETkFfQUxMT1dfVU5BU1NJR05FRCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ0lETkFfQ0hFQ0tfQklESScgPT4gJ2ludGwvaW50bC5zdHViJywgJ0lETkFfQ0hFQ0tfQ09OVEVYVEonID0+ICdpbnRsL2ludGwuc3R1YicsICdJRE5BX0RFRkFVTFQnID0+ICdpbnRsL2ludGwuc3R1YicsICdJRE5BX0VSUk9SX0JJREknID0+ICdpbnRsL2ludGwuc3R1YicsICdJRE5BX0VSUk9SX0NPTlRFWFRKJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnSUROQV9FUlJPUl9ESVNBTExPV0VEJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnSUROQV9FUlJPUl9ET01BSU5fTkFNRV9UT09fTE9ORycgPT4gJ2ludGwvaW50bC5zdHViJywgJ0lETkFfRVJST1JfRU1QVFlfTEFCRUwnID0+ICdpbnRsL2ludGwuc3R1YicsICdJRE5BX0VSUk9SX0hZUEhFTl8zXzQnID0+ICdpbnRsL2ludGwuc3R1YicsICdJRE5BX0VSUk9SX0lOVkFMSURfQUNFX0xBQkVMJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnSUROQV9FUlJPUl9MQUJFTF9IQVNfRE9UJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnSUROQV9FUlJPUl9MQUJFTF9UT09fTE9ORycgPT4gJ2ludGwvaW50bC5zdHViJywgJ0lETkFfRVJST1JfTEVBRElOR19DT01CSU5JTkdfTUFSSycgPT4gJ2ludGwvaW50bC5zdHViJywgJ0lETkFfRVJST1JfTEVBRElOR19IWVBIRU4nID0+ICdpbnRsL2ludGwuc3R1YicsICdJRE5BX0VSUk9SX1BVTllDT0RFJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnSUROQV9FUlJPUl9UUkFJTElOR19IWVBIRU4nID0+ICdpbnRsL2ludGwuc3R1YicsICdJRE5BX05PTlRSQU5TSVRJT05BTF9UT19BU0NJSScgPT4gJ2ludGwvaW50bC5zdHViJywgJ0lETkFfTk9OVFJBTlNJVElPTkFMX1RPX1VOSUNPREUnID0+ICdpbnRsL2ludGwuc3R1YicsICdJRE5BX1VTRV9TVEQzX1JVTEVTJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnSUROTycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdJRE9LJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ0lEUkVUUlknID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnSURZRVMnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnSUxMX0JBRFNUSycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnSUxMX0NPUFJPQycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnSUxMX0lMTEFEUicgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnSUxMX0lMTE9QQycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnSUxMX0lMTE9QTicgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnSUxMX0lMTFRSUCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnSUxMX1BSVk9QQycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnSUxMX1BSVlJFRycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnSU1BR0VUWVBFX0FWSUYnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU1BR0VUWVBFX0JNUCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTUFHRVRZUEVfQ09VTlQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU1BR0VUWVBFX0dJRicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTUFHRVRZUEVfSUNPJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0lNQUdFVFlQRV9JRkYnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU1BR0VUWVBFX0pCMicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTUFHRVRZUEVfSlAyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0lNQUdFVFlQRV9KUEMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU1BR0VUWVBFX0pQRUcnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU1BR0VUWVBFX0pQRUcyMDAwJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0lNQUdFVFlQRV9KUFgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU1BR0VUWVBFX1BORycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTUFHRVRZUEVfUFNEJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0lNQUdFVFlQRV9TV0MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU1BR0VUWVBFX1NXRicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTUFHRVRZUEVfVElGRl9JSScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTUFHRVRZUEVfVElGRl9NTScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTUFHRVRZUEVfVU5LTk9XTicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTUFHRVRZUEVfV0JNUCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTUFHRVRZUEVfV0VCUCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTUFHRVRZUEVfWEJNJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0lNQVBfQ0xPU0VUSU1FT1VUJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnSU1BUF9HQ19FTFQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdJTUFQX0dDX0VOVicgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ0lNQVBfR0NfVEVYVFMnID0+ICdpbWFwL2ltYXAuc3R1YicsICdJTUFQX09QRU5USU1FT1VUJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnSU1BUF9SRUFEVElNRU9VVCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ0lNQVBfV1JJVEVUSU1FT1VUJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnSU1HX0FGRklORV9ST1RBVEUnID0+ICdnZC9nZC5zdHViJywgJ0lNR19BRkZJTkVfU0NBTEUnID0+ICdnZC9nZC5zdHViJywgJ0lNR19BRkZJTkVfU0hFQVJfSE9SSVpPTlRBTCcgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0FGRklORV9TSEVBUl9WRVJUSUNBTCcgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0FGRklORV9UUkFOU0xBVEUnID0+ICdnZC9nZC5zdHViJywgJ0lNR19BUkNfQ0hPUkQnID0+ICdnZC9nZC5zdHViJywgJ0lNR19BUkNfRURHRUQnID0+ICdnZC9nZC5zdHViJywgJ0lNR19BUkNfTk9GSUxMJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfQVJDX1BJRScgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0FSQ19ST1VOREVEJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfQVZJRicgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0JFTEwnID0+ICdnZC9nZC5zdHViJywgJ0lNR19CRVNTRUwnID0+ICdnZC9nZC5zdHViJywgJ0lNR19CSUNVQklDJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfQklDVUJJQ19GSVhFRCcgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0JJTElORUFSX0ZJWEVEJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfQkxBQ0tNQU4nID0+ICdnZC9nZC5zdHViJywgJ0lNR19CTVAnID0+ICdnZC9nZC5zdHViJywgJ0lNR19CT1gnID0+ICdnZC9nZC5zdHViJywgJ0lNR19CU1BMSU5FJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfQ0FUTVVMTFJPTScgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0NPTE9SX0JSVVNIRUQnID0+ICdnZC9nZC5zdHViJywgJ0lNR19DT0xPUl9TVFlMRUQnID0+ICdnZC9nZC5zdHViJywgJ0lNR19DT0xPUl9TVFlMRURCUlVTSEVEJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfQ09MT1JfVElMRUQnID0+ICdnZC9nZC5zdHViJywgJ0lNR19DT0xPUl9UUkFOU1BBUkVOVCcgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0NST1BfQkxBQ0snID0+ICdnZC9nZC5zdHViJywgJ0lNR19DUk9QX0RFRkFVTFQnID0+ICdnZC9nZC5zdHViJywgJ0lNR19DUk9QX1NJREVTJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfQ1JPUF9USFJFU0hPTEQnID0+ICdnZC9nZC5zdHViJywgJ0lNR19DUk9QX1RSQU5TUEFSRU5UJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfQ1JPUF9XSElURScgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0VGRkVDVF9BTFBIQUJMRU5EJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfRUZGRUNUX01VTFRJUExZJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfRUZGRUNUX05PUk1BTCcgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0VGRkVDVF9PVkVSTEFZJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfRUZGRUNUX1JFUExBQ0UnID0+ICdnZC9nZC5zdHViJywgJ0lNR19GSUxURVJfQlJJR0hUTkVTUycgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0ZJTFRFUl9DT0xPUklaRScgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0ZJTFRFUl9DT05UUkFTVCcgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0ZJTFRFUl9FREdFREVURUNUJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfRklMVEVSX0VNQk9TUycgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0ZJTFRFUl9HQVVTU0lBTl9CTFVSJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfRklMVEVSX0dSQVlTQ0FMRScgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0ZJTFRFUl9NRUFOX1JFTU9WQUwnID0+ICdnZC9nZC5zdHViJywgJ0lNR19GSUxURVJfTkVHQVRFJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfRklMVEVSX1BJWEVMQVRFJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfRklMVEVSX1NDQVRURVInID0+ICdnZC9nZC5zdHViJywgJ0lNR19GSUxURVJfU0VMRUNUSVZFX0JMVVInID0+ICdnZC9nZC5zdHViJywgJ0lNR19GSUxURVJfU01PT1RIJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfRkxJUF9CT1RIJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfRkxJUF9IT1JJWk9OVEFMJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfRkxJUF9WRVJUSUNBTCcgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0dBVVNTSUFOJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfR0QyX0NPTVBSRVNTRUQnID0+ICdnZC9nZC5zdHViJywgJ0lNR19HRDJfUkFXJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfR0VORVJBTElaRURfQ1VCSUMnID0+ICdnZC9nZC5zdHViJywgJ0lNR19HSUYnID0+ICdnZC9nZC5zdHViJywgJ0lNR19IQU1NSU5HJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfSEFOTklORycgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX0hFUk1JVEUnID0+ICdnZC9nZC5zdHViJywgJ0lNR19KUEVHJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfSlBHJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfTUlUQ0hFTEwnID0+ICdnZC9nZC5zdHViJywgJ0lNR19ORUFSRVNUX05FSUdIQk9VUicgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX1BORycgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX1BPV0VSJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfUVVBRFJBVElDJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfU0lOQycgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX1RHQScgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX1RSSUFOR0xFJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfV0JNUCcgPT4gJ2dkL2dkLnN0dWInLCAnSU1HX1dFQlAnID0+ICdnZC9nZC5zdHViJywgJ0lNR19XRUJQX0xPU1NMRVNTJyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfV0VJR0hURUQ0JyA9PiAnZ2QvZ2Quc3R1YicsICdJTUdfWFBNJyA9PiAnZ2QvZ2Quc3R1YicsICdJTkYnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU5GT19BTEwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU5GT19DT05GSUdVUkFUSU9OJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0lORk9fQ1JFRElUUycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTkZPX0VOVklST05NRU5UJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0lORk9fR0VORVJBTCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTkZPX0xJQ0VOU0UnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU5GT19NT0RVTEVTJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0lORk9fVkFSSUFCTEVTJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0lOSV9BTEwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU5JX1BFUkRJUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTklfU0NBTk5FUl9OT1JNQUwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU5JX1NDQU5ORVJfUkFXJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0lOSV9TQ0FOTkVSX1RZUEVEJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0lOSV9TWVNURU0nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU5JX1VTRVInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnSU5QVVRfQ09PS0lFJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0lOUFVUX0VOVicgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdJTlBVVF9HRVQnID0+ICdmaWx0ZXIvZmlsdGVyLnN0dWInLCAnSU5QVVRfUE9TVCcgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdJTlBVVF9SRVFVRVNUJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0lOUFVUX1NFUlZFUicgPT4gJ2ZpbHRlci9maWx0ZXIuc3R1YicsICdJTlBVVF9TRVNTSU9OJyA9PiAnZmlsdGVyL2ZpbHRlci5zdHViJywgJ0lOVExfSUNVX0RBVEFfVkVSU0lPTicgPT4gJ2ludGwvaW50bC5zdHViJywgJ0lOVExfSUNVX1ZFUlNJT04nID0+ICdpbnRsL2ludGwuc3R1YicsICdJTlRMX0lETkFfVkFSSUFOVF8yMDAzJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnSU5UTF9JRE5BX1ZBUklBTlRfVVRTNDYnID0+ICdpbnRsL2ludGwuc3R1YicsICdJTlRMX01BWF9MT0NBTEVfTEVOJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnSU5UX0NVUlJfU1lNQk9MJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0lOVF9GUkFDX0RJR0lUUycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdJTl9BQ0NFU1MnID0+ICdpbm90aWZ5L2lub3RpZnkuc3R1YicsICdJTl9BTExfRVZFTlRTJyA9PiAnaW5vdGlmeS9pbm90aWZ5LnN0dWInLCAnSU5fQVRUUklCJyA9PiAnaW5vdGlmeS9pbm90aWZ5LnN0dWInLCAnSU5fQ0xPU0UnID0+ICdpbm90aWZ5L2lub3RpZnkuc3R1YicsICdJTl9DTE9TRV9OT1dSSVRFJyA9PiAnaW5vdGlmeS9pbm90aWZ5LnN0dWInLCAnSU5fQ0xPU0VfV1JJVEUnID0+ICdpbm90aWZ5L2lub3RpZnkuc3R1YicsICdJTl9DUkVBVEUnID0+ICdpbm90aWZ5L2lub3RpZnkuc3R1YicsICdJTl9ERUxFVEUnID0+ICdpbm90aWZ5L2lub3RpZnkuc3R1YicsICdJTl9ERUxFVEVfU0VMRicgPT4gJ2lub3RpZnkvaW5vdGlmeS5zdHViJywgJ0lOX0RPTlRfRk9MTE9XJyA9PiAnaW5vdGlmeS9pbm90aWZ5LnN0dWInLCAnSU5fSUdOT1JFRCcgPT4gJ2lub3RpZnkvaW5vdGlmeS5zdHViJywgJ0lOX0lTRElSJyA9PiAnaW5vdGlmeS9pbm90aWZ5LnN0dWInLCAnSU5fTUFTS19BREQnID0+ICdpbm90aWZ5L2lub3RpZnkuc3R1YicsICdJTl9NT0RJRlknID0+ICdpbm90aWZ5L2lub3RpZnkuc3R1YicsICdJTl9NT1ZFJyA9PiAnaW5vdGlmeS9pbm90aWZ5LnN0dWInLCAnSU5fTU9WRURfRlJPTScgPT4gJ2lub3RpZnkvaW5vdGlmeS5zdHViJywgJ0lOX01PVkVEX1RPJyA9PiAnaW5vdGlmeS9pbm90aWZ5LnN0dWInLCAnSU5fTU9WRV9TRUxGJyA9PiAnaW5vdGlmeS9pbm90aWZ5LnN0dWInLCAnSU5fT05FU0hPVCcgPT4gJ2lub3RpZnkvaW5vdGlmeS5zdHViJywgJ0lOX09OTFlESVInID0+ICdpbm90aWZ5L2lub3RpZnkuc3R1YicsICdJTl9PUEVOJyA9PiAnaW5vdGlmeS9pbm90aWZ5LnN0dWInLCAnSU5fUV9PVkVSRkxPVycgPT4gJ2lub3RpZnkvaW5vdGlmeS5zdHViJywgJ0lOX1VOTU9VTlQnID0+ICdpbm90aWZ5L2lub3RpZnkuc3R1YicsICdJUFBST1RPX0lQJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnSVBQUk9UT19JUFY2JyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnSVBWNl9IT1BMSU1JVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0lQVjZfTVVMVElDQVNUX0hPUFMnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdJUFY2X01VTFRJQ0FTVF9JRicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0lQVjZfTVVMVElDQVNUX0xPT1AnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdJUFY2X1BLVElORk8nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdJUFY2X1JFQ1ZIT1BMSU1JVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0lQVjZfUkVDVlBLVElORk8nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdJUFY2X1JFQ1ZUQ0xBU1MnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdJUFY2X1RDTEFTUycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0lQVjZfVU5JQ0FTVF9IT1BTJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnSVBWNl9WNk9OTFknID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdJUF9CSU5EX0FERFJFU1NfTk9fUE9SVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0lQX01UVV9ESVNDT1ZFUicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0lQX01VTFRJQ0FTVF9JRicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0lQX01VTFRJQ0FTVF9MT09QJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnSVBfTVVMVElDQVNUX1RUTCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0lQX1BNVFVESVNDX0RPJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnSVBfUE1UVURJU0NfRE9OVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0lQX1BNVFVESVNDX0lOVEVSRkFDRScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0lQX1BNVFVESVNDX09NSVQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdJUF9QTVRVRElTQ19QUk9CRScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ0lQX1BNVFVESVNDX1dBTlQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdJbWFnZUJ1dHRvbicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdJbnZpc2libGVBcmVhJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ0pPQl9RVUVVRV9QUklPUklUWV9ISUdIJyA9PiAnemVuZC96ZW5kX2Quc3R1YicsICdKT0JfUVVFVUVfUFJJT1JJVFlfTE9XJyA9PiAnemVuZC96ZW5kX2Quc3R1YicsICdKT0JfUVVFVUVfUFJJT1JJVFlfTk9STUFMJyA9PiAnemVuZC96ZW5kX2Quc3R1YicsICdKT0JfUVVFVUVfUFJJT1JJVFlfVVJHRU5UJyA9PiAnemVuZC96ZW5kX2Quc3R1YicsICdKT0JfUVVFVUVfU0FWRV9DT09LSUUnID0+ICd6ZW5kL3plbmRfZC5zdHViJywgJ0pPQl9RVUVVRV9TQVZFX0VOVicgPT4gJ3plbmQvemVuZF9kLnN0dWInLCAnSk9CX1FVRVVFX1NBVkVfRklMRVMnID0+ICd6ZW5kL3plbmRfZC5zdHViJywgJ0pPQl9RVUVVRV9TQVZFX0dFVCcgPT4gJ3plbmQvemVuZF9kLnN0dWInLCAnSk9CX1FVRVVFX1NBVkVfUE9TVCcgPT4gJ3plbmQvemVuZF9kLnN0dWInLCAnSk9CX1FVRVVFX1NBVkVfUkFXX1BPU1QnID0+ICd6ZW5kL3plbmRfZC5zdHViJywgJ0pPQl9RVUVVRV9TQVZFX1NFUlZFUicgPT4gJ3plbmQvemVuZF9kLnN0dWInLCAnSk9CX1FVRVVFX1NBVkVfU0VTU0lPTicgPT4gJ3plbmQvemVuZF9kLnN0dWInLCAnSk9CX1FVRVVFX1NUQVRVU19FWEVDVVRJT05fRkFJTEVEJyA9PiAnemVuZC96ZW5kX2Quc3R1YicsICdKT0JfUVVFVUVfU1RBVFVTX0lOX1BST0NFU1MnID0+ICd6ZW5kL3plbmRfZC5zdHViJywgJ0pPQl9RVUVVRV9TVEFUVVNfTE9HSUNBTExZX0ZBSUxFRCcgPT4gJ3plbmQvemVuZF9kLnN0dWInLCAnSk9CX1FVRVVFX1NUQVRVU19TQ0hFRFVMRUQnID0+ICd6ZW5kL3plbmRfZC5zdHViJywgJ0pPQl9RVUVVRV9TVEFUVVNfU1VDQ0VTUycgPT4gJ3plbmQvemVuZF9kLnN0dWInLCAnSk9CX1FVRVVFX1NUQVRVU19TVVNQRU5ERUQnID0+ICd6ZW5kL3plbmRfZC5zdHViJywgJ0pPQl9RVUVVRV9TVEFUVVNfV0FJVElORycgPT4gJ3plbmQvemVuZF9kLnN0dWInLCAnSk9CX1FVRVVFX1NUQVRVU19XQUlUSU5HX1BSRURFQ0VTU09SJyA9PiAnemVuZC96ZW5kX2Quc3R1YicsICdKU09OX0JJR0lOVF9BU19TVFJJTkcnID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX0VSUk9SX0NUUkxfQ0hBUicgPT4gJ2pzb24vanNvbi5zdHViJywgJ0pTT05fRVJST1JfREVQVEgnID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX0VSUk9SX0lORl9PUl9OQU4nID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX0VSUk9SX0lOVkFMSURfUFJPUEVSVFlfTkFNRScgPT4gJ2pzb24vanNvbi5zdHViJywgJ0pTT05fRVJST1JfTk9ORScgPT4gJ2pzb24vanNvbi5zdHViJywgJ0pTT05fRVJST1JfTk9OX0JBQ0tFRF9FTlVNJyA9PiAnanNvbi9qc29uLnN0dWInLCAnSlNPTl9FUlJPUl9SRUNVUlNJT04nID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX0VSUk9SX1NUQVRFX01JU01BVENIJyA9PiAnanNvbi9qc29uLnN0dWInLCAnSlNPTl9FUlJPUl9TWU5UQVgnID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX0VSUk9SX1VOU1VQUE9SVEVEX1RZUEUnID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX0VSUk9SX1VURjE2JyA9PiAnanNvbi9qc29uLnN0dWInLCAnSlNPTl9FUlJPUl9VVEY4JyA9PiAnanNvbi9qc29uLnN0dWInLCAnSlNPTl9GT1JDRV9PQkpFQ1QnID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX0hFWF9BTVAnID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX0hFWF9BUE9TJyA9PiAnanNvbi9qc29uLnN0dWInLCAnSlNPTl9IRVhfUVVPVCcgPT4gJ2pzb24vanNvbi5zdHViJywgJ0pTT05fSEVYX1RBRycgPT4gJ2pzb24vanNvbi5zdHViJywgJ0pTT05fSU5WQUxJRF9VVEY4X0lHTk9SRScgPT4gJ2pzb24vanNvbi5zdHViJywgJ0pTT05fSU5WQUxJRF9VVEY4X1NVQlNUSVRVVEUnID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX05VTUVSSUNfQ0hFQ0snID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX09CSkVDVF9BU19BUlJBWScgPT4gJ2pzb24vanNvbi5zdHViJywgJ0pTT05fUEFSU0VSX05PVFNUUklDVCcgPT4gJ2pzb24vanNvbi5zdHViJywgJ0pTT05fUEFSVElBTF9PVVRQVVRfT05fRVJST1InID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX1BSRVNFUlZFX1pFUk9fRlJBQ1RJT04nID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX1BSRVRUWV9QUklOVCcgPT4gJ2pzb24vanNvbi5zdHViJywgJ0pTT05fVEhST1dfT05fRVJST1InID0+ICdqc29uL2pzb24uc3R1YicsICdKU09OX1VORVNDQVBFRF9MSU5FX1RFUk1JTkFUT1JTJyA9PiAnanNvbi9qc29uLnN0dWInLCAnSlNPTl9VTkVTQ0FQRURfU0xBU0hFUycgPT4gJ2pzb24vanNvbi5zdHViJywgJ0pTT05fVU5FU0NBUEVEX1VOSUNPREUnID0+ICdqc29uL2pzb24uc3R1YicsICdMQVRUX0hBU0NISUxEUkVOJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnTEFUVF9IQVNOT0NISUxEUkVOJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnTEFUVF9NQVJLRUQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdMQVRUX05PSU5GRVJJT1JTJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnTEFUVF9OT1NFTEVDVCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ0xBVFRfUkVGRVJSQUwnID0+ICdpbWFwL2ltYXAuc3R1YicsICdMQVRUX1VOTUFSS0VEJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnTENfQUxMJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xDX0NPTExBVEUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTENfQ1RZUEUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTENfTUVTU0FHRVMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTENfTU9ORVRBUlknID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTENfTlVNRVJJQycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdMQ19USU1FJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xEQVBfQ09OVFJPTF9BU1NFUlQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX0NPTlRST0xfQVVUSFpJRF9SRVFVRVNUJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9DT05UUk9MX0FVVEhaSURfUkVTUE9OU0UnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX0NPTlRST0xfRE9OVFVTRUNPUFknID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX0NPTlRST0xfTUFOQUdFRFNBSVQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX0NPTlRST0xfUEFHRURSRVNVTFRTJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9DT05UUk9MX1BBU1NXT1JEUE9MSUNZUkVRVUVTVCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfQ09OVFJPTF9QQVNTV09SRFBPTElDWVJFU1BPTlNFJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9DT05UUk9MX1BPU1RfUkVBRCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfQ09OVFJPTF9QUkVfUkVBRCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfQ09OVFJPTF9QUk9YWV9BVVRIWicgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfQ09OVFJPTF9TT1JUUkVRVUVTVCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfQ09OVFJPTF9TT1JUUkVTUE9OU0UnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX0NPTlRST0xfU1VCRU5UUklFUycgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfQ09OVFJPTF9TWU5DJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9DT05UUk9MX1NZTkNfRE9ORScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfQ09OVFJPTF9TWU5DX1NUQVRFJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9DT05UUk9MX1ZBTFVFU1JFVFVSTkZJTFRFUicgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfQ09OVFJPTF9WTFZSRVFVRVNUJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9DT05UUk9MX1ZMVlJFU1BPTlNFJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9DT05UUk9MX1hfRE9NQUlOX1NDT1BFJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9DT05UUk9MX1hfRVhURU5ERURfRE4nID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX0NPTlRST0xfWF9JTkNSRU1FTlRBTF9WQUxVRVMnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX0NPTlRST0xfWF9QRVJNSVNTSVZFX01PRElGWScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfQ09OVFJPTF9YX1NFQVJDSF9PUFRJT05TJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9DT05UUk9MX1hfVFJFRV9ERUxFVEUnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX0RFUkVGX0FMV0FZUycgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfREVSRUZfRklORElORycgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfREVSRUZfTkVWRVInID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX0RFUkVGX1NFQVJDSElORycgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfRVNDQVBFX0ROJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9FU0NBUEVfRklMVEVSJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9FWE9QX01PRElGWV9QQVNTV0QnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX0VYT1BfUkVGUkVTSCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfRVhPUF9TVEFSVF9UTFMnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX0VYT1BfVFVSTicgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfRVhPUF9XSE9fQU1fSScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfTU9ESUZZX0JBVENIX0FERCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfTU9ESUZZX0JBVENIX0FUVFJJQicgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfTU9ESUZZX0JBVENIX01PRFRZUEUnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX01PRElGWV9CQVRDSF9SRU1PVkUnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX01PRElGWV9CQVRDSF9SRU1PVkVfQUxMJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9NT0RJRllfQkFUQ0hfUkVQTEFDRScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfTU9ESUZZX0JBVENIX1ZBTFVFUycgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX0NMSUVOVF9DT05UUk9MUycgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX0RFQlVHX0xFVkVMJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfREVSRUYnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9ESUFHTk9TVElDX01FU1NBR0UnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9FUlJPUl9OVU1CRVInID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9FUlJPUl9TVFJJTkcnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9IT1NUX05BTUUnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9NQVRDSEVEX0ROJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfTkVUV09SS19USU1FT1VUJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTicgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1JFRkVSUkFMUycgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1JFU1RBUlQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9TRVJWRVJfQ09OVFJPTFMnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9TSVpFTElNSVQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9USU1FTElNSVQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9USU1FT1VUJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfWF9LRUVQQUxJVkVfSURMRScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfS0VFUEFMSVZFX0lOVEVSVkFMJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfWF9LRUVQQUxJVkVfUFJPQkVTJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfWF9TQVNMX0FVVEhDSUQnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9YX1NBU0xfQVVUSFpJRCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfU0FTTF9NRUNIJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfWF9TQVNMX05PQ0FOT04nID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9YX1NBU0xfUkVBTE0nID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9YX1NBU0xfVVNFUk5BTUUnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9YX1RMU19BTExPVycgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX0NBQ0VSVERJUicgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX0NBQ0VSVEZJTEUnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9YX1RMU19DRVJURklMRScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX0NJUEhFUl9TVUlURScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX0NSTENIRUNLJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfWF9UTFNfQ1JMRklMRScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX0NSTF9BTEwnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9YX1RMU19DUkxfTk9ORScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX0NSTF9QRUVSJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfWF9UTFNfREVNQU5EJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfWF9UTFNfREhGSUxFJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfWF9UTFNfSEFSRCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX0tFWUZJTEUnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9YX1RMU19ORVZFUicgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX1BBQ0tBR0UnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9YX1RMU19QUk9UT0NPTF9NQVgnID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9YX1RMU19QUk9UT0NPTF9NSU4nID0+ICdsZGFwL2xkYXAuc3R1YicsICdMREFQX09QVF9YX1RMU19QUk9UT0NPTF9TU0wyJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfWF9UTFNfUFJPVE9DT0xfU1NMMycgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX1BST1RPQ09MX1RMUzFfMCcgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX1BST1RPQ09MX1RMUzFfMScgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX1BST1RPQ09MX1RMUzFfMicgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX1BST1RPQ09MX1RMUzFfMycgPT4gJ2xkYXAvbGRhcC5zdHViJywgJ0xEQVBfT1BUX1hfVExTX1JBTkRPTV9GSUxFJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfWF9UTFNfUkVRVUlSRV9DRVJUJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTERBUF9PUFRfWF9UTFNfVFJZJyA9PiAnbGRhcC9sZGFwLnN0dWInLCAnTEVWRUxEQl9OT19DT01QUkVTU0lPTicgPT4gJ2xldmVsZGIvTGV2ZWxEQi5zdHViJywgJ0xFVkVMREJfU05BUFBZX0NPTVBSRVNTSU9OJyA9PiAnbGV2ZWxkYi9MZXZlbERCLnN0dWInLCAnTElCRVhTTFRfRE9UVEVEX1ZFUlNJT04nID0+ICd4c2wveHNsLnN0dWInLCAnTElCRVhTTFRfVkVSU0lPTicgPT4gJ3hzbC94c2wuc3R1YicsICdMSUJYTUxfQklHTElORVMnID0+ICdsaWJ4bWwvbGlieG1sLnN0dWInLCAnTElCWE1MX0NPTVBBQ1QnID0+ICdsaWJ4bWwvbGlieG1sLnN0dWInLCAnTElCWE1MX0RPVFRFRF9WRVJTSU9OJyA9PiAnbGlieG1sL2xpYnhtbC5zdHViJywgJ0xJQlhNTF9EVERBVFRSJyA9PiAnbGlieG1sL2xpYnhtbC5zdHViJywgJ0xJQlhNTF9EVERMT0FEJyA9PiAnbGlieG1sL2xpYnhtbC5zdHViJywgJ0xJQlhNTF9EVERWQUxJRCcgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMSUJYTUxfRVJSX0VSUk9SJyA9PiAnbGlieG1sL2xpYnhtbC5zdHViJywgJ0xJQlhNTF9FUlJfRkFUQUwnID0+ICdsaWJ4bWwvbGlieG1sLnN0dWInLCAnTElCWE1MX0VSUl9OT05FJyA9PiAnbGlieG1sL2xpYnhtbC5zdHViJywgJ0xJQlhNTF9FUlJfV0FSTklORycgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMSUJYTUxfSFRNTF9OT0RFRkRURCcgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMSUJYTUxfSFRNTF9OT0lNUExJRUQnID0+ICdsaWJ4bWwvbGlieG1sLnN0dWInLCAnTElCWE1MX0xPQURFRF9WRVJTSU9OJyA9PiAnbGlieG1sL2xpYnhtbC5zdHViJywgJ0xJQlhNTF9OT0JMQU5LUycgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMSUJYTUxfTk9DREFUQScgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMSUJYTUxfTk9FTVBUWVRBRycgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMSUJYTUxfTk9FTlQnID0+ICdsaWJ4bWwvbGlieG1sLnN0dWInLCAnTElCWE1MX05PRVJST1InID0+ICdsaWJ4bWwvbGlieG1sLnN0dWInLCAnTElCWE1MX05PTkVUJyA9PiAnbGlieG1sL2xpYnhtbC5zdHViJywgJ0xJQlhNTF9OT1dBUk5JTkcnID0+ICdsaWJ4bWwvbGlieG1sLnN0dWInLCAnTElCWE1MX05PWE1MREVDTCcgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMSUJYTUxfTlNDTEVBTicgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMSUJYTUxfUEFSU0VIVUdFJyA9PiAnbGlieG1sL2xpYnhtbC5zdHViJywgJ0xJQlhNTF9QRURBTlRJQycgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMSUJYTUxfUkVDT1ZFUicgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMSUJYTUxfU0NIRU1BX0NSRUFURScgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMSUJYTUxfVkVSU0lPTicgPT4gJ2xpYnhtbC9saWJ4bWwuc3R1YicsICdMSUJYTUxfWElOQ0xVREUnID0+ICdsaWJ4bWwvbGlieG1sLnN0dWInLCAnTElCWFNMVF9ET1RURURfVkVSU0lPTicgPT4gJ3hzbC94c2wuc3R1YicsICdMSUJYU0xUX1ZFUlNJT04nID0+ICd4c2wveHNsLnN0dWInLCAnTElCWlNURF9WRVJTSU9OX05VTUJFUicgPT4gJ3pzdGQvenN0ZC5zdHViJywgJ0xJQlpTVERfVkVSU0lPTl9TVFJJTkcnID0+ICd6c3RkL3pzdGQuc3R1YicsICdMSUdIVEdSQVknID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnTE9DS19FWCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdMT0NLX05CJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPQ0tfU0gnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9DS19VTicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdMT0dfQUxFUlQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9HX0FVVEgnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9HX0FVVEhQUklWJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19DT05TJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19DUklUJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19DUk9OJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19EQUVNT04nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9HX0RFQlVHJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19FTUVSRycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdMT0dfRVJSJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19JTkZPJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19LRVJOJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19MT0NBTDAnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9HX0xPQ0FMMScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdMT0dfTE9DQUwyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19MT0NBTDMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9HX0xPQ0FMNCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdMT0dfTE9DQUw1JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19MT0NBTDYnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9HX0xPQ0FMNycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdMT0dfTFBSJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19NQUlMJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19OREVMQVknID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9HX05FV1MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9HX05PVElDRScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdMT0dfTk9XQUlUJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19PREVMQVknID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9HX1BFUlJPUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdMT0dfUElEJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ0xPR19TWVNMT0cnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9HX1VTRVInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9HX1VVQ1AnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTE9HX1dBUk5JTkcnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTGFiZWwnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnTGlzdEJveCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdMaXN0VmlldycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdNQUdFTlRBJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ01BSUxQQVJTRV9FWFRSQUNUX09VVFBVVCcgPT4gJ21haWxwYXJzZS9tYWlscGFyc2Uuc3R1YicsICdNQUlMUEFSU0VfRVhUUkFDVF9SRVRVUk4nID0+ICdtYWlscGFyc2UvbWFpbHBhcnNlLnN0dWInLCAnTUFJTFBBUlNFX0VYVFJBQ1RfU1RSRUFNJyA9PiAnbWFpbHBhcnNlL21haWxwYXJzZS5zdHViJywgJ01CX0NBU0VfRk9MRCcgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnTUJfQ0FTRV9GT0xEX1NJTVBMRScgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnTUJfQ0FTRV9MT1dFUicgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnTUJfQ0FTRV9MT1dFUl9TSU1QTEUnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ01CX0NBU0VfVElUTEUnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ01CX0NBU0VfVElUTEVfU0lNUExFJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdNQl9DQVNFX1VQUEVSJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdNQl9DQVNFX1VQUEVSX1NJTVBMRScgPT4gJ21ic3RyaW5nL21ic3RyaW5nLnN0dWInLCAnTUJfT05JR1VSVU1BX1ZFUlNJT04nID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ01CX09WRVJMT0FEX01BSUwnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ01CX09WRVJMT0FEX1JFR0VYJyA9PiAnbWJzdHJpbmcvbWJzdHJpbmcuc3R1YicsICdNQl9PVkVSTE9BRF9TVFJJTkcnID0+ICdtYnN0cmluZy9tYnN0cmluZy5zdHViJywgJ01DQVNUX0JMT0NLX1NPVVJDRScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ01DQVNUX0pPSU5fR1JPVVAnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ01DQVNUX0xFQVZFX0dST1VQJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnTUNBU1RfVU5CTE9DS19TT1VSQ0UnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdNQ1JZUFRfM0RFUycgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfQVJDRk9VUicgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfQVJDRk9VUl9JVicgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfQkxPV0ZJU0gnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX0JMT1dGSVNIX0NPTVBBVCcgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfQ0FTVF8xMjgnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX0NBU1RfMjU2JyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9DUllQVCcgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfREVDUllQVCcgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfREVTJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9ERVNfQ09NUEFUJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9ERVZfUkFORE9NJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9ERVZfVVJBTkRPTScgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfRU5DUllQVCcgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfRU5JR05BJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9HT1NUJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9JREVBJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9MT0tJOTcnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX01BUlMnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX01PREVfQ0JDJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9NT0RFX0NGQicgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfTU9ERV9FQ0InID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX01PREVfTk9GQicgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfTU9ERV9PRkInID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX01PREVfU1RSRUFNJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9QQU5BTUEnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX1JBTkQnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX1JDMicgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfUkM0JyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9SQzYnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX1JDNl8xMjgnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX1JDNl8xOTInID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX1JDNl8yNTYnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX1JJSk5EQUVMXzEyOCcgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfUklKTkRBRUxfMTkyJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9SSUpOREFFTF8yNTYnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX1NBRkVSMTI4JyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9TQUZFUjY0JyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9TQUZFUlBMVVMnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX1NFUlBFTlQnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX1NFUlBFTlRfMTI4JyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9TRVJQRU5UXzE5MicgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfU0VSUEVOVF8yNTYnID0+ICdtY3J5cHQvbWNyeXB0LnN0dWInLCAnTUNSWVBUX1NLSVBKQUNLJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9USFJFRVdBWScgPT4gJ21jcnlwdC9tY3J5cHQuc3R1YicsICdNQ1JZUFRfVFJJUExFREVTJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9UV09GSVNIJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9XQUtFJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01DUllQVF9YVEVBJyA9PiAnbWNyeXB0L21jcnlwdC5zdHViJywgJ01FTUNBQ0hFX0NPTVBSRVNTRUQnID0+ICdtZW1jYWNoZS9tZW1jYWNoZS5zdHViJywgJ01FTUNBQ0hFX0hBVkVfU0VTU0lPTicgPT4gJ21lbWNhY2hlL21lbWNhY2hlLnN0dWInLCAnTUVNQ0FDSEVfVVNFUjEnID0+ICdtZW1jYWNoZS9tZW1jYWNoZS5zdHViJywgJ01FTUNBQ0hFX1VTRVIyJyA9PiAnbWVtY2FjaGUvbWVtY2FjaGUuc3R1YicsICdNRU1DQUNIRV9VU0VSMycgPT4gJ21lbWNhY2hlL21lbWNhY2hlLnN0dWInLCAnTUVNQ0FDSEVfVVNFUjQnID0+ICdtZW1jYWNoZS9tZW1jYWNoZS5zdHViJywgJ01FU1NBR0VQQUNLX09QVF9QSFBPTkxZJyA9PiAnbXNncGFjay9tc2dwYWNrLnN0dWInLCAnTUhBU0hfQURMRVIzMicgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX0NSQzMyJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfQ1JDMzJCJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfQ1JDMzJDJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfRk5WMTMyJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfRk5WMTY0JyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfRk5WMUEzMicgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX0ZOVjFBNjQnID0+ICdoYXNoL2hhc2guc3R1YicsICdNSEFTSF9HT1NUJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfSEFWQUwxMjgnID0+ICdoYXNoL2hhc2guc3R1YicsICdNSEFTSF9IQVZBTDE2MCcgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX0hBVkFMMTkyJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfSEFWQUwyMjQnID0+ICdoYXNoL2hhc2guc3R1YicsICdNSEFTSF9IQVZBTDI1NicgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX0pPQUFUJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfTUQyJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfTUQ0JyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfTUQ1JyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfTVVSTVVSM0EnID0+ICdoYXNoL2hhc2guc3R1YicsICdNSEFTSF9NVVJNVVIzQycgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX01VUk1VUjNGJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfUklQRU1EMTI4JyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfUklQRU1EMTYwJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfUklQRU1EMjU2JyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfUklQRU1EMzIwJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfU0hBMScgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX1NIQTIyNCcgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX1NIQTI1NicgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX1NIQTM4NCcgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX1NIQTUxMicgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX1NORUZSVTI1NicgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX1RJR0VSJyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUhBU0hfVElHRVIxMjgnID0+ICdoYXNoL2hhc2guc3R1YicsICdNSEFTSF9USUdFUjE2MCcgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX1dISVJMUE9PTCcgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX1hYSDEyOCcgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX1hYSDMnID0+ICdoYXNoL2hhc2guc3R1YicsICdNSEFTSF9YWEgzMicgPT4gJ2hhc2gvaGFzaC5zdHViJywgJ01IQVNIX1hYSDY0JyA9PiAnaGFzaC9oYXNoLnN0dWInLCAnTUlOR19ORVcnID0+ICdtaW5nL21pbmcuc3R1YicsICdNSU5HX1pMSUInID0+ICdtaW5nL21pbmcuc3R1YicsICdNS19FX1VOQVZBSUxBQkxFJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnTU9OR09EQl9TVEFCSUxJVFknID0+ICdtb25nb2RiL21vbmdvZGIuc3R1YicsICdNT05HT0RCX1ZFUlNJT04nID0+ICdtb25nb2RiL21vbmdvZGIuc3R1YicsICdNT05fMScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNT05fMTAnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTU9OXzExJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ01PTl8xMicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNT05fMicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNT05fMycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNT05fNCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNT05fNScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNT05fNicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNT05fNycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNT05fOCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNT05fOScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNT05fREVDSU1BTF9QT0lOVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNT05fR1JPVVBJTkcnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTU9OX1RIT1VTQU5EU19TRVAnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTVFTRVJJRVNfTVFBQ1RfTk9ORScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFBVF9BSVgnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfQkFUQ0gnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfQlJPS0VSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX0NIQU5ORUxfSU5JVElBVE9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX0NJQ1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfQ0lDU19CUklER0UnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfQ0lDU19WU0UnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfREVGQVVMVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFBVF9ET1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfRFFNJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX0dVQVJESUFOJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX0lNUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFBVF9JTVNfQlJJREdFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX0pBVkEnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfTUNBU1RfUFVCTElTSCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFBVF9NVlMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfTk9URVNfQUdFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfTk9fQ09OVEVYVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFBVF9OU0snID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfT1BFTl9UUDEnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfT1MyJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX09TMzkwJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX09TNDAwJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX1FNR1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfUU1HUl9QVUJMSVNIJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX1JSU19CQVRDSCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFBVF9TSUInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfU1lTVEVNX0VYVEVOU0lPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFBVF9UUEYnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfVU5JWCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFBVF9VTktOT1dOJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX1VTRVInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfVVNFUl9GSVJTVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFBVF9VU0VSX0xBU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfVk0nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfVk1TJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX1ZPUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFBVF9XSU5ET1dTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX1dJTkRPV1NfTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQVRfV0xNJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUFUX1hDRicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFBVF9aT1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQk9fQ1VSUkVOVF9WRVJTSU9OJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUJPX05PTkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQk9fVkVSU0lPTl8xJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0FETUlOX1RPUElDX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQUxURVJBVElPTl9EQVRFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0FMVEVSQVRJT05fVElNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9BUFBMX0lEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0FVVEhfSU5GT19DT05OX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQVVUSF9JTkZPX0RFU0MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQVVUSF9JTkZPX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQVVUSF9JTkZPX09DU1BfVVJMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0FVVE9fUkVPUkdfQ0FUQUxPRycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9BVVRPX1JFT1JHX1NUQVJUX1RJTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQkFDS09VVF9SRVFfUV9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0JBU0VfT0JKRUNUX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQkFTRV9RX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQkFUQ0hfSU5URVJGQUNFX0lEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0NGX1NUUlVDX0RFU0MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQ0ZfU1RSVUNfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9DSEFOTkVMX0FVVE9fREVGX0VYSVQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQ0hJTEQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQ0hJTklUX1NFUlZJQ0VfUEFSTScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9DSExBVVRIX0RFU0MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQ0lDU19GSUxFX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQ0xVU1RFUl9EQVRFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0NMVVNURVJfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9DTFVTVEVSX05BTUVMSVNUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0NMVVNURVJfUV9NR1JfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9DTFVTVEVSX1RJTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQ0xVU1RFUl9XT1JLTE9BRF9EQVRBJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0NMVVNURVJfV09SS0xPQURfRVhJVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9DTFVTX0NITF9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0NPTU1BTkRfSU5QVVRfUV9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0NPTU1BTkRfUkVQTFlfUV9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0NPTU1fSU5GT19ERVNDJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0NPTU1fSU5GT19OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0NSRUFUSU9OX0RBVEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfQ1JFQVRJT05fVElNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9DVVNUT00nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfREVBRF9MRVRURVJfUV9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX0RFRl9YTUlUX1FfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9ETlNfR1JPVVAnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfRU5WX0RBVEEnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfRklSU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfSUdRX1VTRVJfSUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfSU5JVElBVElPTl9RX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfSU5TVEFMTEFUSU9OX0RFU0MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfSU5TVEFMTEFUSU9OX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfSU5TVEFMTEFUSU9OX1BBVEgnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfTEFTVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9MQVNUX1VTRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfTERBUF9QQVNTV09SRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9MREFQX1VTRVJfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9MVTYyX0FSTV9TVUZGSVgnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfTFVfR1JPVVBfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9MVV9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX01PREVMX0RVUkFCTEVfUScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9NT0RFTF9OT05fRFVSQUJMRV9RJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX01PTklUT1JfUV9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX05BTUVMSVNUX0RFU0MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfTkFNRUxJU1RfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9OQU1FUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9QQVJFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfUEFTU19USUNLRVRfQVBQTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9QT0xJQ1lfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9QUk9DRVNTX0RFU0MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfUFJPQ0VTU19OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1FTR19OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1FfREVTQycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9RX01HUl9ERVNDJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1FfTUdSX0lERU5USUZJRVInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfUV9NR1JfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9RX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfUkVDSVBJRU5UX0ROJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1JFTU9URV9RX01HUl9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1JFTU9URV9RX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfUkVQT1NJVE9SWV9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1JFUE9TSVRPUllfTkFNRUxJU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfUkVTVU1FX0RBVEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfUkVTVU1FX1RJTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfU0VSVklDRV9ERVNDJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1NFUlZJQ0VfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9TRVJWSUNFX1NUQVJUX0FSR1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfU0VSVklDRV9TVEFSVF9DT01NQU5EJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1NFUlZJQ0VfU1RPUF9BUkdTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1NFUlZJQ0VfU1RPUF9DT01NQU5EJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1NJR05FUl9ETicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9TU0xfQ1JMX05BTUVMSVNUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1NTTF9DUllQVE9fSEFSRFdBUkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfU1NMX0tFWV9MSUJSQVJZJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1NTTF9LRVlfTUVNQkVSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1NTTF9LRVlfUkVQT1NJVE9SWScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9TVERFUlJfREVTVElOQVRJT04nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfU1RET1VUX0RFU1RJTkFUSU9OJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1NUT1JBR0VfQ0xBU1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfU1RPUkFHRV9DTEFTU19ERVNDJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1NZU1RFTV9MT0dfUV9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1RDUF9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1RPUElDX0RFU0MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfVE9QSUNfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9UT1BJQ19TVFJJTkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfVE9QSUNfU1RSSU5HX0ZJTFRFUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9UUElQRV9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1RSSUdHRVJfQ0hBTk5FTF9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1RSSUdHRVJfREFUQScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9UUklHR0VSX1BST0dSQU1fTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9UUklHR0VSX1RFUk1fSUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfVFJJR0dFUl9UUkFOU19JRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQV9VU0VSX0RBVEEnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfVVNFUl9MSVNUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1ZFUlNJT04nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfWENGX0dST1VQX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0FfWENGX01FTUJFUl9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1hNSVRfUV9OQU1FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1hSX1NTTF9DSVBIRVJfU1VJVEVTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNBX1hSX1ZFUlNJT04nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0NTSV9BUFBMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNDU0lfQVNfUFVCTElTSEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNDU0lfREVGQVVMVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQ1NJX0VNQkVEREVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNDU0lfSU5IRVJJVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQ1NJX1FfTUdSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNDU0lfVU5ERUZJTkVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNDX0ZBSUxFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQ19PSycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDQ19VTktOT1dOJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNDX1dBUk5JTkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0lfTkVXX1NFU1NJT04nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ0lfTk9ORScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDTk9fQUNDT1VOVElOR19NUUlfRElTQUJMRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX0FDQ09VTlRJTkdfTVFJX0VOQUJMRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX0FDQ09VTlRJTkdfUV9ESVNBQkxFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDTk9fQUNDT1VOVElOR19RX0VOQUJMRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX0FDVElWSVRZX1RSQUNFX0RJU0FCTEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNOT19BQ1RJVklUWV9UUkFDRV9FTkFCTEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNOT19BTExfQ09OVlNfU0hBUkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX0NEX0ZPUl9PVVRQVVRfT05MWScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDTk9fQ0xJRU5UX0JJTkRJTkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX0NVUlJFTlRfVkVSU0lPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDTk9fRkFTVFBBVEhfQklORElORycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDTk9fSEFORExFX1NIQVJFX0JMT0NLJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNOT19IQU5ETEVfU0hBUkVfTk9ORScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDTk9fSEFORExFX1NIQVJFX05PX0JMT0NLJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNOT19JU09MQVRFRF9CSU5ESU5HJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNOT19MT0NBTF9CSU5ESU5HJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNOT19OT05FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNOT19OT19DT05WX1NIQVJJTkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX1JFQ09OTkVDVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDTk9fUkVDT05ORUNUX0FTX0RFRicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDTk9fUkVDT05ORUNUX0RJU0FCTEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNOT19SRUNPTk5FQ1RfUV9NR1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX1JFU1RSSUNUX0NPTk5fVEFHX1FTRycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDTk9fUkVTVFJJQ1RfQ09OTl9UQUdfUV9NR1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX1NFUklBTElaRV9DT05OX1RBR19RU0cnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX1NFUklBTElaRV9DT05OX1RBR19RX01HUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDTk9fU0hBUkVEX0JJTkRJTkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX1NUQU5EQVJEX0JJTkRJTkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX1VTRV9DRF9TRUxFQ1RJT04nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX1ZFUlNJT05fMScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDTk9fVkVSU0lPTl8yJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNOT19WRVJTSU9OXzMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ05PX1ZFUlNJT05fNCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDTk9fVkVSU0lPTl81JyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNPX0RFTEVURScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDT19ERUxFVEVfUFVSR0UnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ09fSU1NRURJQVRFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNPX0tFRVBfU1VCJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUNPX05PTkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RQ09fUVVJRVNDRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFDT19SRU1PVkVfU1VCJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUVDX0NPTk5FQ1RJT05fUVVJRVNDSU5HJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUVDX01TR19BUlJJVkVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUVDX1FfTUdSX1FVSUVTQ0lORycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFFQ19XQUlUX0NBTkNFTEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUVDX1dBSVRfSU5URVJWQUxfRVhQSVJFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFFSV9VTkxJTUlURUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRU5DX0FTX1BVQkxJU0hFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFFTkNfREVDSU1BTF9NQVNLJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUVOQ19ERUNJTUFMX05PUk1BTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFFTkNfREVDSU1BTF9SRVZFUlNFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFFTkNfREVDSU1BTF9VTkRFRklORUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRU5DX0ZMT0FUX0lFRUVfTk9STUFMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUVOQ19GTE9BVF9JRUVFX1JFVkVSU0VEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUVOQ19GTE9BVF9NQVNLJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUVOQ19GTE9BVF9TMzkwJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUVOQ19GTE9BVF9UTlMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRU5DX0ZMT0FUX1VOREVGSU5FRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFFTkNfSU5URUdFUl9NQVNLJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUVOQ19JTlRFR0VSX05PUk1BTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFFTkNfSU5URUdFUl9SRVZFUlNFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFFTkNfSU5URUdFUl9VTkRFRklORUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRU5DX05BVElWRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFFTkNfTk9STUFMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUVOQ19SRVNFUlZFRF9NQVNLJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUVOQ19SRVZFUlNFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFFTkNfUzM5MCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFFTkNfVE5TJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0FDVElWSVRZJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0FQUExfQ0FOTk9UX0JFX1NUQVJURUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfQVBQTF9GSVJTVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9BUFBMX0xBU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfQVBQTF9UWVBFX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0JJTkRfT1BFTl9DTFVTUkNWUl9ERUwnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfQlVGRkVSX09WRVJGTE9XJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0NIQU5ORUxfQ09NUExFVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0NIQU5ORUxfRkFJTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9DSEFOTkVMX0ZBSUxfUkVUUlknID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfQ0lDU19BUFBMX0FCRU5ERUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfQ0lDU19BUFBMX05PVF9TVEFSVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0NJQ1NfQlJJREdFX0ZBSUxVUkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfQ0lDU19DQ1NJRF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9DSUNTX0NJSF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9DSUNTX0NPTU1BUkVBX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0NJQ1NfQ09SUkVMX0lEX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0NJQ1NfRExRX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0NJQ1NfRU5DT0RJTkdfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfQ0lDU19JTlRFUk5BTF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9DSUNTX05PVF9BVVRIT1JJWkVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0NJQ1NfVU9XX0JBQ0tFRF9PVVQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfQ0lDU19VT1dfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfQ09BJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0NPRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9EQVRBX0xFTkdUSF9ORUdBVElWRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9EQVRBX0xFTkdUSF9UT09fQklHJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0RBVEFfTEVOR1RIX1pFUk8nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfRVhQSVJBVElPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9JSUhfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfSU1TX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX0lNU19GSVJTVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9JTVNfTEFTVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9JTVNfTkFDS18xQV9SRUFTT05fRklSU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfSU1TX05BQ0tfMUFfUkVBU09OX0xBU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfTEVOR1RIX09GRl9CWV9PTkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfTUFYX0FDVElWSVRJRVMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfTVNHX1NDT1BFX01JU01BVENIJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX05BTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9OT05FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX05PVF9BVVRIT1JJWkVEX0ZPUl9JTVMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfTk9UX0FfR1JPVVBVUl9NU0cnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfTk9UX0FfUkVQT1NJVE9SWV9NU0cnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfTk9UX0RFTElWRVJFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9OT1RfRk9SV0FSREVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX1BBTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9QVUJMSUNBVElPTlNfT05fUkVRVUVTVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9RVUlUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX1NFTEVDVE9SX01JU01BVENIJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX1NUT1BQRURfQllfQ0hBRF9FWElUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZCX1NUT1BQRURfQllfTVNHX0VYSVQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfU1RPUFBFRF9CWV9QVUJTVUJfRVhJVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9TVUJTQ1JJQkVSX0lTX1BVQkxJU0hFUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9TWVNURU1fRklSU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfU1lTVEVNX0xBU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfVE1fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfVU5TVVBQT1JURURfREVMSVZFUlknID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRkJfVU5TVVBQT1JURURfRk9SV0FSRElORycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGQl9YTUlUX1FfTVNHX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZNVF9BRE1JTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGTVRfQ0hBTk5FTF9DT01QTEVURUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRk1UX0NJQ1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRk1UX0NPTU1BTkRfMScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGTVRfQ09NTUFORF8yJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZNVF9ERUFEX0xFVFRFUl9IRUFERVInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRk1UX0RJU1RfSEVBREVSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZNVF9FTUJFRERFRF9QQ0YnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRk1UX0VWRU5UJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZNVF9JTVMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRk1UX0lNU19WQVJfU1RSSU5HJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZNVF9NRF9FWFRFTlNJT04nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRk1UX05PTkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRk1UX1BDRicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGTVRfUkVGX01TR19IRUFERVInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRk1UX1JGX0hFQURFUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFGTVRfUkZfSEVBREVSXzEnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRk1UX1JGX0hFQURFUl8yJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUZNVF9TVFJJTkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRk1UX1RSSUdHRVInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRk1UX1dPUktfSU5GT19IRUFERVInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RRk1UX1hNSVRfUV9IRUFERVInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RR0lfTk9ORScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fQUNDRVBUX1RSVU5DQVRFRF9NU0cnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RR01PX0FMTF9NU0dTX0FWQUlMQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fQUxMX1NFR01FTlRTX0FWQUlMQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fQlJPV1NFX0NPX09QJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19CUk9XU0VfRklSU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RR01PX0JST1dTRV9IQU5ETEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RR01PX0JST1dTRV9NU0dfVU5ERVJfQ1VSU09SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19CUk9XU0VfTkVYVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fQ09NUExFVEVfTVNHJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19DT05WRVJUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19DVVJSRU5UX1ZFUlNJT04nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RR01PX0ZBSUxfSUZfUVVJRVNDSU5HJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19MT0NLJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19MT0dJQ0FMX09SREVSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19NQVJLX0JST1dTRV9DT19PUCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fTUFSS19CUk9XU0VfSEFORExFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19NQVJLX1NLSVBfQkFDS09VVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fTVNHX1VOREVSX0NVUlNPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fTk9ORScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fTk9fUFJPUEVSVElFUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fTk9fU1lOQ1BPSU5UJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19OT19XQUlUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19QUk9QRVJUSUVTX0FTX1FfREVGJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19QUk9QRVJUSUVTX0NPTVBBVElCSUxJVFknID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RR01PX1BST1BFUlRJRVNfRk9SQ0VfTVFSRkgyJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19QUk9QRVJUSUVTX0lOX0hBTkRMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fU0VUX1NJR05BTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fU1lOQ1BPSU5UJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19TWU5DUE9JTlRfSUZfUEVSU0lTVEVOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fVU5MT0NLJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19VTk1BUktFRF9CUk9XU0VfTVNHJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19VTk1BUktfQlJPV1NFX0NPX09QJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19VTk1BUktfQlJPV1NFX0hBTkRMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fVkVSU0lPTl8xJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19WRVJTSU9OXzInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RR01PX1ZFUlNJT05fMycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFHTU9fVkVSU0lPTl80JyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUdNT19XQUlUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0FDQ09VTlRJTkdfQ09OTl9PVkVSUklERScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9BQ0NPVU5USU5HX0lOVEVSVkFMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0FDQ09VTlRJTkdfTVFJJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0FDQ09VTlRJTkdfUScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9BQ1RJVkVfQ0hBTk5FTFMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQUNUSVZJVFlfQ09OTl9PVkVSUklERScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9BQ1RJVklUWV9SRUNPUkRJTkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQUNUSVZJVFlfVFJBQ0UnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQURPUFRORVdNQ0FfQ0hFQ0snID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQURPUFRORVdNQ0FfSU5URVJWQUwnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQURPUFRORVdNQ0FfVFlQRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9BUFBMX1RZUEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQVJDSElWRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9BVVRIT1JJVFlfRVZFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQVVUSF9JTkZPX1RZUEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQVVUT19SRU9SR0FOSVpBVElPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9BVVRPX1JFT1JHX0lOVEVSVkFMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0JBQ0tPVVRfVEhSRVNIT0xEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0JBU0VfVFlQRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9CQVRDSF9JTlRFUkZBQ0VfQVVUTycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9CUklER0VfRVZFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ0VSVF9WQUxfUE9MSUNZJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0NGX0NGQ09OTE9TJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0NGX0xFVkVMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0NGX09GRkxEVVNFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0NGX09GRkxPQUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ0ZfT0ZGTE9BRF9USFJFU0hPTEQxJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0NGX09GRkxPQURfVEhSRVNIT0xEMicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9DRl9PRkZMT0FEX1RIUkVTSE9MRDMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ0ZfUkVDQVVUTycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9DRl9SRUNPVkVSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0NGX1NNRFNfQlVGRkVSUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9DSEFOTkVMX0FVVE9fREVGJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0NIQU5ORUxfQVVUT19ERUZfRVZFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ0hBTk5FTF9FVkVOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9DSElOSVRfQURBUFRFUlMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ0hJTklUX0NPTlRST0wnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ0hJTklUX0RJU1BBVENIRVJTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0NISU5JVF9UUkFDRV9BVVRPX1NUQVJUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0NISU5JVF9UUkFDRV9UQUJMRV9TSVpFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0NITEFVVEhfUkVDT1JEUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9DTFVTVEVSX1FfVFlQRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9DTFVTVEVSX1dPUktMT0FEX0xFTkdUSCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9DTFdMX01SVV9DSEFOTkVMUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9DTFdMX1FfUFJJT1JJVFknID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ0xXTF9RX1JBTksnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ0xXTF9VU0VRJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0NNRF9TRVJWRVJfQVVUTycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9DTURfU0VSVkVSX0NPTlRST0wnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ01EX1NFUlZFUl9DT05WRVJUX01TRycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9DTURfU0VSVkVSX0RMUV9NU0cnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ09ERURfQ0hBUl9TRVRfSUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ09NTUFORF9FVkVOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9DT01NQU5EX0xFVkVMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0NPTU1fRVZFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ09NTV9JTkZPX1RZUEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ09ORklHVVJBVElPTl9FVkVOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9DUElfTEVWRUwnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfQ1VSUkVOVF9RX0RFUFRIJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0RFRklOSVRJT05fVFlQRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9ERUZfQklORCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9ERUZfQ0xVU1RFUl9YTUlUX1FfVFlQRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9ERUZfSU5QVVRfT1BFTl9PUFRJT04nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfREVGX1BFUlNJU1RFTkNFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0RFRl9QUklPUklUWScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9ERUZfUFVUX1JFU1BPTlNFX1RZUEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfREVGX1JFQURfQUhFQUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfRElTVF9MSVNUUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9ETlNfV0xNJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0RVUkFCTEVfU1VCJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0VOQ1JZUFRJT05fQUxHT1JJVEhNJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0VYUElSWV9JTlRFUlZBTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9GSVJTVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9HUk9VUF9VUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9IQVJERU5fR0VUX0JBQ0tPVVQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfSElHSF9RX0RFUFRIJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0lHUV9QVVRfQVVUSE9SSVRZJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0lOREVYX1RZUEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfSU5ISUJJVF9FVkVOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9JTkhJQklUX0dFVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9JTkhJQklUX1BVQicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9JTkhJQklUX1BVVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9JTkhJQklUX1NVQicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9JTlRSQV9HUk9VUF9RVUVVSU5HJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0lQX0FERFJFU1NfVkVSU0lPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9MQVNUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0xJU1RFTkVSX1BPUlRfTlVNQkVSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0xJU1RFTkVSX1RJTUVSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0xPQ0FMX0VWRU5UJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX0xPR0dFUl9FVkVOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9MVTYyX0NIQU5ORUxTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX01BU1RFUl9BRE1JTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9NQVhfQ0hBTk5FTFMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfTUFYX0NMSUVOVFMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfTUFYX0dMT0JBTF9MT0NLUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9NQVhfSEFORExFUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9NQVhfTE9DQUxfTE9DS1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfTUFYX01TR19MRU5HVEgnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfTUFYX09QRU5fUScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9NQVhfUFJJT1JJVFknID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfTUFYX1BST1BFUlRJRVNfTEVOR1RIJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX01BWF9RX0RFUFRIJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX01BWF9RX1RSSUdHRVJTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX01BWF9SRUNPVkVSWV9UQVNLUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9NQVhfUkVTUE9OU0VTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX01BWF9VTkNPTU1JVFRFRF9NU0dTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX01DQVNUX0JSSURHRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9NT05JVE9SSU5HX0FVVE9fQ0xVU1NEUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9NT05JVE9SSU5HX0NIQU5ORUwnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfTU9OSVRPUklOR19RJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX01PTklUT1JfSU5URVJWQUwnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfTVNHX0RFTElWRVJZX1NFUVVFTkNFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX01TR19ERVFfQ09VTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfTVNHX0VOUV9DT1VOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9NU0dfTUFSS19CUk9XU0VfSU5URVJWQUwnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfTVVMVElDQVNUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX05BTUVMSVNUX1RZUEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfTkFNRV9DT1VOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9OUE1fQ0xBU1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfTlBNX0RFTElWRVJZJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX09QRU5fSU5QVVRfQ09VTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfT1BFTl9PVVRQVVRfQ09VTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfT1VUQk9VTkRfUE9SVF9NQVgnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfT1VUQk9VTkRfUE9SVF9NSU4nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUEFHRVNFVF9JRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9QRVJGT1JNQU5DRV9FVkVOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9QTEFURk9STScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9QTV9ERUxJVkVSWScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9QT0xJQ1lfVkVSU0lPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9QUk9QRVJUWV9DT05UUk9MJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1BST1RfUE9MSUNZX0NBUEFCSUxJVFknID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUFJPWFlfU1VCJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1BVQlNVQl9DTFVTVEVSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1BVQlNVQl9NQVhNU0dfUkVUUllfQ09VTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUFVCU1VCX01PREUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUFVCU1VCX05QX01TRycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9QVUJTVUJfTlBfUkVTUCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9QVUJTVUJfU1lOQ19QVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9QVUJfQ09VTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUFVCX1NDT1BFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1FNR1JfQ0ZDT05MT1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUU1PUFRfQ09OU19DT01NU19NU0dTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1FNT1BUX0NPTlNfQ1JJVElDQUxfTVNHUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9RTU9QVF9DT05TX0VSUk9SX01TR1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUU1PUFRfQ09OU19JTkZPX01TR1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUU1PUFRfQ09OU19SRU9SR19NU0dTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1FNT1BUX0NPTlNfU1lTVEVNX01TR1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUU1PUFRfQ09OU19XQVJOSU5HX01TR1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUU1PUFRfQ1NNVF9PTl9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9RTU9QVF9JTlRFUk5BTF9EVU1QJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1FNT1BUX0xPR19DT01NU19NU0dTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1FNT1BUX0xPR19DUklUSUNBTF9NU0dTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1FNT1BUX0xPR19FUlJPUl9NU0dTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1FNT1BUX0xPR19JTkZPX01TR1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUU1PUFRfTE9HX1JFT1JHX01TR1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUU1PUFRfTE9HX1NZU1RFTV9NU0dTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1FNT1BUX0xPR19XQVJOSU5HX01TR1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUU1PUFRfVFJBQ0VfQ09NTVMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUU1PUFRfVFJBQ0VfQ09OVkVSU0lPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9RTU9QVF9UUkFDRV9NUUlfQ0FMTFMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUU1PUFRfVFJBQ0VfUkVPUkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUU1PUFRfVFJBQ0VfU1lTVEVNJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1FTR19ESVNQJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1FfREVQVEhfSElHSF9FVkVOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9RX0RFUFRIX0hJR0hfTElNSVQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUV9ERVBUSF9MT1dfRVZFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUV9ERVBUSF9MT1dfTElNSVQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUV9ERVBUSF9NQVhfRVZFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUV9TRVJWSUNFX0lOVEVSVkFMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1FfU0VSVklDRV9JTlRFUlZBTF9FVkVOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9RX1RZUEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfUV9VU0VSUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9SRUFEX0FIRUFEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1JFQ0VJVkVfVElNRU9VVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9SRUNFSVZFX1RJTUVPVVRfTUlOJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1JFQ0VJVkVfVElNRU9VVF9UWVBFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1JFTU9URV9FVkVOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9SRVNQT05TRV9SRVNUQVJUX1BPSU5UJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1JFVEVOVElPTl9JTlRFUlZBTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9TQ09QRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9TRUNVUklUWV9DQVNFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1NFUlZJQ0VfQ09OVFJPTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9TRVJWSUNFX1RZUEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfU0hBUkVBQklMSVRZJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1NIQVJFRF9RX1FfTUdSX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfU0lHTkFUVVJFX0FMR09SSVRITScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9TU0xfRVZFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfU1NMX0ZJUFNfUkVRVUlSRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfU1NMX1JFU0VUX0NPVU5UJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1NTTF9UQVNLUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9TVEFSVF9TVE9QX0VWRU5UJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1NUQVRJU1RJQ1NfQVVUT19DTFVTU0RSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1NUQVRJU1RJQ1NfQ0hBTk5FTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9TVEFUSVNUSUNTX0lOVEVSVkFMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1NUQVRJU1RJQ1NfTVFJJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1NUQVRJU1RJQ1NfUScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9TVUJfQ09ORklHVVJBVElPTl9FVkVOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9TVUJfQ09VTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfU1VCX1NDT1BFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1NVSVRFX0JfU1RSRU5HVEgnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfU1lOQ1BPSU5UJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1RDUF9DSEFOTkVMUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9UQ1BfS0VFUF9BTElWRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9UQ1BfU1RBQ0tfVFlQRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9USU1FX1NJTkNFX1JFU0VUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1RPTEVSQVRFX1VOUFJPVEVDVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1RPUElDX0RFRl9QRVJTSVNURU5DRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9UT1BJQ19UWVBFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1RSQUNFX1JPVVRFX1JFQ09SRElORycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9UUkVFX0xJRkVfVElNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9UUklHR0VSX0NPTlRST0wnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfVFJJR0dFUl9ERVBUSCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9UUklHR0VSX0lOVEVSVkFMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1RSSUdHRVJfTVNHX1BSSU9SSVRZJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1RSSUdHRVJfUkVTVEFSVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9UUklHR0VSX1RZUEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfVVJfRElTUCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9VU0FHRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFJQV9VU0VSX0xJU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfVVNFX0RFQURfTEVUVEVSX1EnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RSUFfV0lMRENBUkRfT1BFUkFUSU9OJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUUlBX1hSX0NBUEFCSUxJVFknID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RTURfQ1VSUkVOVF9WRVJTSU9OJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU1EX1ZFUlNJT05fMScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFNRF9WRVJTSU9OXzInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RTUZfQUNDRVBUX1VOU1VQX0lGX1hNSVRfTUFTSycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFNRl9BQ0NFUFRfVU5TVVBfTUFTSycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFNRl9MQVNUX01TR19JTl9HUk9VUCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFNRl9MQVNUX1NFR01FTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RTUZfTVNHX0lOX0dST1VQJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU1GX05PTkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RTUZfUkVKRUNUX1VOU1VQX01BU0snID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RTUZfU0VHTUVOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFNRl9TRUdNRU5UQVRJT05fQUxMT1dFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFNRl9TRUdNRU5UQVRJT05fSU5ISUJJVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU1JX05PTkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RTU9fTUFUQ0hfQ09SUkVMX0lEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU1PX01BVENIX0dST1VQX0lEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU1PX01BVENIX01TR19JRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFNT19NQVRDSF9NU0dfU0VRX05VTUJFUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFNT19NQVRDSF9NU0dfVE9LRU4nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RTU9fTUFUQ0hfT0ZGU0VUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU1PX05PTkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RTVRPS19OT05FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU1UX0FQUExfRklSU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RTVRfQVBQTF9MQVNUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU1UX0RBVEFHUkFNJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU1UX01RRV9GSUVMRFMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RTVRfTVFFX0ZJRUxEU19GUk9NX01RRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFNVF9SRVBMWScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFNVF9SRVBPUlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RTVRfUkVRVUVTVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFNVF9TWVNURU1fRklSU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RTVRfU1lTVEVNX0xBU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT0RfQ1VSUkVOVF9WRVJTSU9OJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU9EX1ZFUlNJT05fMScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPRF9WRVJTSU9OXzInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT0RfVkVSU0lPTl8zJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU9EX1ZFUlNJT05fNCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPTF9VTkRFRklORUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT09fQUxURVJOQVRFX1VTRVJfQVVUSE9SSVRZJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU9PX0JJTkRfQVNfUV9ERUYnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT09fQklORF9OT1RfRklYRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT09fQklORF9PTl9HUk9VUCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPT19CSU5EX09OX09QRU4nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT09fQlJPV1NFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU9PX0NPX09QJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU9PX0ZBSUxfSUZfUVVJRVNDSU5HJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU9PX0lOUFVUX0FTX1FfREVGJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU9PX0lOUFVUX0VYQ0xVU0lWRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPT19JTlBVVF9TSEFSRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT09fSU5RVUlSRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPT19OT19NVUxUSUNBU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT09fTk9fUkVBRF9BSEVBRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPT19PVVRQVVQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT09fUEFTU19BTExfQ09OVEVYVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPT19QQVNTX0lERU5USVRZX0NPTlRFWFQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT09fUkVBRF9BSEVBRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPT19SRUFEX0FIRUFEX0FTX1FfREVGJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU9PX1JFU09MVkVfTE9DQUxfUScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPT19SRVNPTFZFX0xPQ0FMX1RPUElDJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU9PX1NBVkVfQUxMX0NPTlRFWFQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT09fU0VUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU9PX1NFVF9BTExfQ09OVEVYVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPT19TRVRfSURFTlRJVFlfQ09OVEVYVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPVF9BVVRIX0lORk8nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT1RfQ0ZfU1RSVUMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT1RfQ0hBTk5FTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPVF9DT01NX0lORk8nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT1RfTElTVEVORVInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT1RfTkFNRUxJU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT1RfTk9ORScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPVF9QUk9DRVNTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU9UX1EnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT1RfUV9NR1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT1RfUkVTRVJWRURfMScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFPVF9TRVJWSUNFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUU9UX1NUT1JBR0VfQ0xBU1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RT1RfVE9QSUMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUEVSX05PVF9QRVJTSVNURU5UJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBFUl9QRVJTSVNURU5DRV9BU19QQVJFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUEVSX1BFUlNJU1RFTkNFX0FTX1FfREVGJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBFUl9QRVJTSVNURU5DRV9BU19UT1BJQ19ERUYnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUEVSX1BFUlNJU1RFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUE1PX0FMVEVSTkFURV9VU0VSX0FVVEhPUklUWScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFQTU9fQVNZTkNfUkVTUE9OU0UnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUE1PX0NVUlJFTlRfVkVSU0lPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFQTU9fREVGQVVMVF9DT05URVhUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBNT19GQUlMX0lGX1FVSUVTQ0lORycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFQTU9fTE9HSUNBTF9PUkRFUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFQTU9fTURfRk9SX09VVFBVVF9PTkxZJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBNT19ORVdfQ09SUkVMX0lEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBNT19ORVdfTVNHX0lEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBNT19OT05FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBNT19OT1RfT1dOX1NVQlMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUE1PX05PX0NPTlRFWFQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUE1PX05PX1NZTkNQT0lOVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFQTU9fUEFTU19BTExfQ09OVEVYVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFQTU9fUEFTU19JREVOVElUWV9DT05URVhUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBNT19SRVNPTFZFX0xPQ0FMX1EnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUE1PX1JFU1BPTlNFX0FTX1FfREVGJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBNT19SRVNQT05TRV9BU19UT1BJQ19ERUYnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUE1PX1JFVEFJTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFQTU9fU0NPUEVfUU1HUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFQTU9fU0VUX0FMTF9DT05URVhUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBNT19TRVRfSURFTlRJVFlfQ09OVEVYVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFQTU9fU1VQUFJFU1NfUkVQTFlUTycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFQTU9fU1lOQ1BPSU5UJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBNT19TWU5DX1JFU1BPTlNFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBNT19WRVJTSU9OXzEnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUE1PX1ZFUlNJT05fMicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFQTU9fVkVSU0lPTl8zJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBNT19XQVJOX0lGX05PX1NVQlNfTUFUQ0hFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFQUklfUFJJT1JJVFlfQVNfUEFSRU5UJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBSSV9QUklPUklUWV9BU19QVUJMSVNIRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUFJJX1BSSU9SSVRZX0FTX1FfREVGJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBSSV9QUklPUklUWV9BU19UT1BJQ19ERUYnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUFJUX0FTWU5DX1JFU1BPTlNFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVBSVF9SRVNQT05TRV9BU19QQVJFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUFJUX1NZTkNfUkVTUE9OU0UnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQUNUSU9OX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0FEQVBURVJfQ09OTl9MT0FEX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0FEQVBURVJfQ09OVl9MT0FEX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0FEQVBURVJfREVGU19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19BREFQVEVSX0RFRlNfTE9BRF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19BREFQVEVSX0RJU0NfTE9BRF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19BREFQVEVSX05PVF9BVkFJTEFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQURBUFRFUl9TRVJWX0xPQURfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQURBUFRFUl9TVE9SQUdFX1NIT1JUQUdFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0FJUl9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19BTElBU19CQVNFX1FfVFlQRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19BTElBU19UQVJHVFlQRV9DSEFOR0VEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0FMUkVBRFlfQ09OTkVDVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0FMUkVBRFlfSk9JTkVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0FMVEVSX1NVQl9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19BTk9USEVSX1FfTUdSX0NPTk5FQ1RFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19BUElfRVhJVF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19BUElfRVhJVF9JTklUX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0FQSV9FWElUX0xPQURfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQVBJX0VYSVRfTk9UX0ZPVU5EJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0FQSV9FWElUX1RFUk1fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQVBQTF9GSVJTVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19BUFBMX0xBU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQVNJRF9NSVNNQVRDSCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19BU1lOQ19VT1dfQ09ORkxJQ1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQVNZTkNfWEFfQ09ORkxJQ1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQVRUUklCVVRFX0xPQ0tFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19BVVRIX0lORk9fQ09OTl9OQU1FX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0FVVEhfSU5GT19SRUNfQ09VTlRfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQVVUSF9JTkZPX1JFQ19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19BVVRIX0lORk9fVFlQRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19CQUNLRURfT1VUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0JBQ0tPVVRfVEhSRVNIT0xEX1JFQUNIRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQkFHX0NPTlZFUlNJT05fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQkFHX1dST05HX1RZUEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQklOQVJZX0RBVEFfTEVOR1RIX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0JNSE9fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQk9fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQlJJREdFX1NUQVJURUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQlJJREdFX1NUT1BQRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQlVGRkVSX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0JVRkZFUl9MRU5HVEhfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQlVGRkVSX05PVF9BVVRPTUFUSUMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0FMTEJBQ0tfTElOS19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DQUxMQkFDS19OT1RfUkVHSVNURVJFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DQUxMQkFDS19ST1VUSU5FX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NBTExCQUNLX1RZUEVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0FMTF9JTlRFUlJVUFRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DQUxMX0lOX1BST0dSRVNTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NCRF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DQkRfT1BUSU9OU19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DRF9BUlJBWV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DRF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DRVJUX1ZBTF9QT0xJQ1lfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0ZCRl9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DRkJTX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NGR1JfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0ZIX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NGSUZfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0ZJTF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DRklOX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NGU0ZfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0ZTTF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DRlNUX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NGX05PVF9BVkFJTEFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0ZfU1RSVUNfQVVUSF9GQUlMRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0ZfU1RSVUNfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0ZfU1RSVUNfRkFJTEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NGX1NUUlVDX0lOX1VTRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DRl9TVFJVQ19MSVNUX0hEUl9JTl9VU0UnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0hBTk5FTF9BQ1RJVkFURUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0hBTk5FTF9BVVRPX0RFRl9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DSEFOTkVMX0FVVE9fREVGX09LJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NIQU5ORUxfQkxPQ0tFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DSEFOTkVMX0JMT0NLRURfV0FSTklORycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DSEFOTkVMX0NPTkZJR19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DSEFOTkVMX0NPTlZfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0hBTk5FTF9OT1RfQUNUSVZBVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NIQU5ORUxfTk9UX0FWQUlMQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DSEFOTkVMX1NTTF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DSEFOTkVMX1NTTF9XQVJOSU5HJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NIQU5ORUxfU1RBUlRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DSEFOTkVMX1NUT1BQRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0hBTk5FTF9TVE9QUEVEX0JZX1VTRVInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0hBUl9BVFRSU19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DSEFSX0FUVFJTX1RPT19TSE9SVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DSEFSX0FUVFJfTEVOR1RIX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NIQVJfQ09OVkVSU0lPTl9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DSUNTX0JSSURHRV9SRVNUUklDVElPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DSUNTX1dBSVRfRkFJTEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NJUEhFUl9TUEVDX05PVF9TVUlURV9CJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NMSUVOVF9DSEFOTkVMX0NPTkZMSUNUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NMSUVOVF9DT05OX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NMSUVOVF9FWElUX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NMSUVOVF9FWElUX0xPQURfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0xVU1RFUl9FWElUX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NMVVNURVJfRVhJVF9MT0FEX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NMVVNURVJfUFVUX0lOSElCSVRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DTFVTVEVSX1JFU09MVVRJT05fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ0xVU1RFUl9SRVNPVVJDRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DTURfU0VSVkVSX05PVF9BVkFJTEFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ01IT19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DTk9fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ09ERURfQ0hBUl9TRVRfSURfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ09EX05PVF9WQUxJRF9GT1JfWENGX1EnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ09NTUFORF9NUVNDJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NPTU1BTkRfUENGJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NPTU1BTkRfVFlQRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT01NSU5GT19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05GSUdfQ0hBTkdFX09CSkVDVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05GSUdfQ1JFQVRFX09CSkVDVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05GSUdfREVMRVRFX09CSkVDVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05GSUdfUkVGUkVTSF9PQkpFQ1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ09OTkVDVElPTl9CUk9LRU4nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ09OTkVDVElPTl9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05ORUNUSU9OX05PVF9BVVRIT1JJWkVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NPTk5FQ1RJT05fTk9UX0FWQUlMQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05ORUNUSU9OX1FVSUVTQ0lORycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05ORUNUSU9OX1NUT1BQRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ09OTkVDVElPTl9TVE9QUElORycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05ORUNUSU9OX1NVU1BFTkRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05OX0lEX0lOX1VTRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05OX1RBR19JTl9VU0UnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ09OTl9UQUdfTk9UX1JFTEVBU0VEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NPTk5fVEFHX05PVF9VU0FCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ09OVEVOVF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05URVhUX0hBTkRMRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05URVhUX05PVF9BVkFJTEFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ09OVEVYVF9PQkpFQ1RfTk9UX1ZBTElEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NPTlRFWFRfT1BFTl9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DT05WRVJURURfTVNHX1RPT19CSUcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ09OVkVSVEVEX1NUUklOR19UT09fQklHJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0NPUlJFTF9JRF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DUllQVE9fSEFSRFdBUkVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfQ1RMT19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DVVJSRU5UX1JFQ09SRF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19DVVJTT1JfTk9UX1ZBTElEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0RBVEFfTEVOR1RIX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0RBVEFfU0VUX05PVF9BVkFJTEFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfREFUQV9UUlVOQ0FURUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfREIyX05PVF9BVkFJTEFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfREJDU19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19ERUZfU1lOQ1BPSU5UX0lOSElCSVRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19ERUZfWE1JVF9RX1RZUEVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfREVGX1hNSVRfUV9VU0FHRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19ERVNUX0NMQVNTX05PVF9BTFRFUkFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfREVTVF9FTlZfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfREVTVF9OQU1FX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0RIX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0RJU1RSSUJVVElPTl9MSVNUX0VNUFRZJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0RMSF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19ETUhPX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0RNUE9fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfRFVQTElDQVRFX0dST1VQX1NVQicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19EVVBMSUNBVEVfUkVDT1ZfQ09PUkQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfRFVSQUJJTElUWV9OT1RfQUxMT1dFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19EVVJBQklMSVRZX05PVF9BTFRFUkFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfRFlOQU1JQ19RX05BTUVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfRU5DT0RJTkdfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfRU5DT0RJTkdfTk9UX1NVUFBPUlRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19FTlZJUk9OTUVOVF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19FUEhfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfRVhJVF9QUk9QU19OT1RfU1VQUE9SVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0VYSVRfUkVBU09OX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0VYUElSWV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19GQVNUUEFUSF9OT1RfQVZBSUxBQkxFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0ZFRURCQUNLX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0ZJTEVfTk9UX0FVRElURUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfRklMRV9TWVNURU1fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfRklMVEVSX09QRVJBVE9SX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0ZPUk1BVF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19GT1JNQVRfTk9UX1NVUFBPUlRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19GVU5DVElPTl9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19GVU5DVElPTl9OT1RfU1VQUE9SVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0dFVF9FTkFCTEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0dFVF9JTkhJQklURUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfR0xPQkFMX1VPV19DT05GTElDVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19HTU9fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfR1JPVVBJTkdfTk9UX0FMTE9XRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfR1JPVVBJTkdfTk9UX0FMVEVSQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19HUk9VUF9BRERSRVNTX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0dST1VQX0lEX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0hBTkRMRV9JTl9VU0VfRk9SX1VPVycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19IQU5ETEVfTk9UX0FWQUlMQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19IQkFHX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0hDT05GSUdfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSENPTk5fQVNZTkNfQUNUSVZFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0hDT05OX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0hFQURFUl9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19ITVNHX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0hNU0dfTk9UX0FWQUlMQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19IT0JKX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0hPQkpfUVVJRVNDRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSE9CSl9RVUlFU0NFRF9OT19NU0dTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0hPU1RfTk9UX0FWQUlMQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19JREVOVElUWV9NSVNNQVRDSCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19JSUhfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSU1QT19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19JTkNPTVBMRVRFX0dST1VQJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0lOQ09NUExFVEVfTVNHJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0lOQ09OU0lTVEVOVF9CUk9XU0UnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSU5DT05TSVNURU5UX0NDU0lEUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19JTkNPTlNJU1RFTlRfRU5DT0RJTkdTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0lOQ09OU0lTVEVOVF9GT1JNQVQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSU5DT05TSVNURU5UX0lURU1fVFlQRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19JTkNPTlNJU1RFTlRfT0JKRUNUX1NUQVRFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0lOQ09OU0lTVEVOVF9PUEVOX09QVElPTlMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSU5DT05TSVNURU5UX1BFUlNJU1RFTkNFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0lOQ09OU0lTVEVOVF9VT1cnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSU5ERVhfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSU5ERVhfTk9UX1BSRVNFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSU5ISUJJVF9WQUxVRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19JTklUSUFMSVpBVElPTl9GQUlMRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSU5RVUlSWV9DT01NQU5EX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0lOU1RBTExBVElPTl9NSVNNQVRDSCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19JTlNUQUxMQVRJT05fTUlTU0lORycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19JTlNVRkZJQ0lFTlRfQlVGRkVSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0lOU1VGRklDSUVOVF9EQVRBJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0lOVF9BVFRSU19BUlJBWV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19JTlRfQVRUUl9DT1VOVF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19JTlRfQVRUUl9DT1VOVF9UT09fU01BTEwnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSU5WQUxJRF9ERVNUSU5BVElPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19JTlZBTElEX01TR19VTkRFUl9DVVJTT1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSU5WQUxJRF9TVUJTQ1JJUFRJT04nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSVRFTV9DT1VOVF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19JVEVNX1RZUEVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfSVRFTV9WQUxVRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19KTVNfRk9STUFUX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0pTU0VfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfS0VZX1JFUE9TSVRPUllfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTERBUF9QQVNTV09SRF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19MREFQX1VTRVJfTkFNRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19MREFQX1VTRVJfTkFNRV9MRU5HVEhfRVJSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0xPQ0FMX1VPV19DT05GTElDVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19MT0dHRVJfU1RBVFVTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX0xPT1BJTkdfUFVCTElDQVRJT04nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTUFUQ0hfT1BUSU9OU19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19NQVhfQ09OTlNfTElNSVRfUkVBQ0hFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19NQVhfTVNHX0xFTkdUSF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19NQ0FTVF9QVUJfU1RBVFVTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX01DQVNUX1NVQl9TVEFUVVMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTURFX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX01EX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX01IQk9fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTUlTU0lOR19SRVBMWV9UT19RJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX01JU1NJTkdfV0lIJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX01JWEVEX0NPTlRFTlRfTk9UX0FMTE9XRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTU9EVUxFX0VOVFJZX05PVF9GT1VORCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19NT0RVTEVfSU5WQUxJRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19NT0RVTEVfTk9UX0ZPVU5EJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX01TR19GTEFHU19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19NU0dfSEFORExFX0NPUFlfRkFJTFVSRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19NU0dfSEFORExFX0lOX1VTRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19NU0dfSURfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTVNHX01BUktFRF9CUk9XU0VfQ09fT1AnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTVNHX05PVF9BTExPV0VEX0lOX0dST1VQJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX01TR19OT1RfTUFUQ0hFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19NU0dfU0VRX05VTUJFUl9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19NU0dfVE9LRU5fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTVNHX1RPT19CSUdfRk9SX0NIQU5ORUwnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTVNHX1RPT19CSUdfRk9SX1EnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTVNHX1RPT19CSUdfRk9SX1FfTUdSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX01TR19UWVBFX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX01VTFRJQ0FTVF9DT05GSUdfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTVVMVElDQVNUX0lOVEVSRkFDRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19NVUxUSUNBU1RfSU5URVJOQUxfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTVVMVElDQVNUX09OTFknID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTVVMVElDQVNUX1NFTkRfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTVVMVElQTEVfSU5TVEFOQ0VfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTVVMVElQTEVfUkVBU09OUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19OQU1FX0lOX1VTRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19OQU1FX05PVF9WQUxJRF9GT1JfVFlQRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19ORUdBVElWRV9MRU5HVEgnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTkVHQVRJVkVfT0ZGU0VUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX05FU1RFRF9CQUdfTk9UX1NVUFBPUlRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19ORVNURURfU0VMRUNUT1JfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTkVYVF9PRkZTRVRfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTkVYVF9SRUNPUkRfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTk9ORScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19OT1RfQVVUSE9SSVpFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19OT1RfQ09OTkVDVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX05PVF9DT05WRVJURUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTk9UX09QRU4nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTk9UX09QRU5fRk9SX0JST1dTRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19OT1RfT1BFTl9GT1JfSU5QVVQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTk9UX09QRU5fRk9SX0lOUVVJUkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTk9UX09QRU5fRk9SX09VVFBVVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19OT1RfT1BFTl9GT1JfUEFTU19BTEwnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTk9UX09QRU5fRk9SX1BBU1NfSURFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTk9UX09QRU5fRk9SX1NFVCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19OT1RfT1BFTl9GT1JfU0VUX0FMTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19OT1RfT1BFTl9GT1JfU0VUX0lERU5UJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX05PVF9QUklWSUxFR0VEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX05PX0JVRkZFUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19OT19DQUxMQkFDS1NfQUNUSVZFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX05PX0NPTk5FQ1RJT05fUkVGRVJFTkNFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX05PX0RBVEFfQVZBSUxBQkxFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX05PX0RFU1RJTkFUSU9OU19BVkFJTEFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTk9fRVhURVJOQUxfUEFSVElDSVBBTlRTJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX05PX01TR19BVkFJTEFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTk9fTVNHX0xPQ0tFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19OT19NU0dfVU5ERVJfQ1VSU09SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX05PX1JFQ09SRF9BVkFJTEFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTk9fUkVUQUlORURfTVNHJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX05PX1NVQlNDUklQVElPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19OT19TVUJTX01BVENIRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfTlVMTF9QT0lOVEVSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX09CSkVDVF9BTFJFQURZX0VYSVNUUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19PQkpFQ1RfQ0hBTkdFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19PQkpFQ1RfREFNQUdFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19PQkpFQ1RfSU5fVVNFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX09CSkVDVF9MRVZFTF9JTkNPTVBBVElCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfT0JKRUNUX05BTUVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfT0JKRUNUX05PVF9VTklRVUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfT0JKRUNUX1FfTUdSX05BTUVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfT0JKRUNUX1JFQ09SRFNfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfT0JKRUNUX1NUUklOR19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19PQkpFQ1RfVFlQRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19PQ1NQX1VSTF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19PRF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19PRkZTRVRfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfT1BFTl9GQUlMRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfT1BFUkFUSU9OX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX09QRVJBVElPTl9OT1RfQUxMT1dFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19PUFRJT05TX0NIQU5HRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfT1BUSU9OU19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19PUFRJT05fRU5WSVJPTk1FTlRfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfT1BUSU9OX05PVF9WQUxJRF9GT1JfVFlQRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19PUklHSU5BTF9MRU5HVEhfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfT1VUQ09NRV9NSVhFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19PVVRDT01FX1BFTkRJTkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfT1VUX1NFTEVDVE9SX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1BBR0VTRVRfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUEFHRVNFVF9GVUxMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1BBUkFNRVRFUl9NSVNTSU5HJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1BBUlRJQUxMWV9DT05WRVJURUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUEFSVElDSVBBTlRfTk9UX0FWQUlMQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QQVJUSUNJUEFOVF9OT1RfREVGSU5FRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QQ0ZfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUERfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUEVSU0lTVEVOQ0VfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUEVSU0lTVEVOVF9OT1RfQUxMT1dFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QTU9fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUE1PX1JFQ09SRF9GTEFHU19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QUkVDT05OX0VYSVRfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUFJFQ09OTl9FWElUX0xPQURfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUFJFQ09OTl9FWElUX05PVF9GT1VORCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QUklPUklUWV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QUklPUklUWV9FWENFRURTX01BWElNVU0nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUFJPUEVSVElFU19ESVNBQkxFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QUk9QRVJUSUVTX1RPT19CSUcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUFJPUEVSVFlfTkFNRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QUk9QRVJUWV9OQU1FX0xFTkdUSF9FUlInID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUFJPUEVSVFlfTkFNRV9UT09fQklHJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1BST1BFUlRZX05PVF9BVkFJTEFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUFJPUEVSVFlfVFlQRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QUk9QRVJUWV9WQUxVRV9UT09fQklHJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1BST1BfQ09OVl9OT1RfU1VQUE9SVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1BST1BfTkFNRV9OT1RfQ09OVkVSVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1BST1BfTlVNQkVSX0ZPUk1BVF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QUk9QX1RZUEVfTk9UX1NVUFBPUlRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QUk9QX1ZBTFVFX05PVF9DT05WRVJURUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUFVCTElDQVRJT05fRkFJTFVSRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QVUJMSVNIX0VYSVRfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUFVCU1VCX0lOSElCSVRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QVVRfSU5ISUJJVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1BVVF9NU0dfUkVDT1JEU19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19QVVRfTk9UX1JFVEFJTkVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1FfQUxSRUFEWV9FWElTVFMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUV9ERUxFVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1FfREVQVEhfSElHSCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19RX0RFUFRIX0xPVycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19RX0ZVTEwnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUV9JTkRFWF9UWVBFX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1FfTUdSX0FDVElWRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19RX01HUl9OQU1FX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1FfTUdSX05PVF9BQ1RJVkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUV9NR1JfTk9UX0FWQUlMQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19RX01HUl9RVUlFU0NJTkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUV9NR1JfU1RPUFBJTkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUV9OT1RfRU1QVFknID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUV9TRVJWSUNFX0lOVEVSVkFMX0hJR0gnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUV9TRVJWSUNFX0lOVEVSVkFMX09LJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1FfU1BBQ0VfTk9UX0FWQUlMQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19RX1RZUEVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUkFTX1BST1BFUlRZX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JFQURfQUhFQURfTVNHUycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19SRUNPTk5FQ1RFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19SRUNPTk5FQ1RJTkcnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUkVDT05ORUNUX0ZBSUxFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19SRUNPTk5FQ1RfSU5DT01QQVRJQkxFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JFQ09OTkVDVF9RTUlEX01JU01BVENIJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JFQ09OTkVDVF9RX01HUl9SRVFEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JFQ09OTkVDVF9USU1FRF9PVVQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUkVDU19QUkVTRU5UX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JFRkVSRU5DRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19SRU1PVEVfUV9OQU1FX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JFT1BFTl9FWENMX0lOUFVUX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JFT1BFTl9JTlFVSVJFX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JFT1BFTl9TQVZFRF9DT05URVhUX0VSUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19SRU9QRU5fVEVNUE9SQVJZX1FfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUkVQT1JUX09QVElPTlNfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUkVTRVJWRURfVkFMVUVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUkVTT1VSQ0VfUFJPQkxFTScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19SRVNQT05TRV9SRUNPUkRTX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JFU19PQkpFQ1RfU1RSSU5HX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JFVEFJTkVEX01TR19RX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JFVEFJTkVEX05PVF9ERUxJVkVSRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUkZIX0NPTU1BTkRfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUkZIX0RVUExJQ0FURV9QQVJNJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JGSF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19SRkhfRk9STUFUX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JGSF9IRUFERVJfRklFTERfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUkZIX1BBUk1fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUkZIX1BBUk1fTUlTU0lORycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19SRkhfUkVTVFJJQ1RFRF9GT1JNQVRfRVJSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1JGSF9TVFJJTkdfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfUk1IX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NDT19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TRF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TRUNPTkRfTUFSS19OT1RfQUxMT1dFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TRUNVUklUWV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TRUdNRU5UQVRJT05fTk9UX0FMTE9XRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU0VHTUVOVFNfTk9UX1NVUFBPUlRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TRUdNRU5UX0xFTkdUSF9aRVJPJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NFTEVDVElPTl9OT1RfQVZBSUxBQkxFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NFTEVDVElPTl9TVFJJTkdfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU0VMRUNUT1JfQUxXQVlTX0ZBTFNFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NFTEVDVE9SX0NPVU5UX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NFTEVDVE9SX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NFTEVDVE9SX0lOVkFMSURfRk9SX1RZUEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU0VMRUNUT1JfTElNSVRfRVhDRUVERUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU0VMRUNUT1JfTk9UX0FMVEVSQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TRUxFQ1RPUl9OT1RfRk9SX1RZUEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU0VMRUNUT1JfTk9UX1BSRVNFTlQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU0VMRUNUT1JfTk9UX1NVUFBPUlRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TRUxFQ1RPUl9OT1RfVU5JUVVFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NFTEVDVE9SX09VVF9PRl9SQU5HRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TRUxFQ1RPUl9TWU5UQVhfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU0VMRUNUT1JfVFlQRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TRUxFQ1RPUl9XUk9OR19UWVBFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NFUlZJQ0VfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU0VSVklDRV9OT1RfQVZBSUxBQkxFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NJR05BTDFfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU0lHTkFMX09VVFNUQU5ESU5HJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NJR05BTF9SRVFVRVNUX0FDQ0VQVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NNUE9fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU09BUF9BWElTX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NPQVBfRE9UTkVUX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NPQVBfVVJMX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NPVVJDRV9CVUZGRVJfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU09VUkNFX0NDU0lEX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NPVVJDRV9ERUNJTUFMX0VOQ19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TT1VSQ0VfRkxPQVRfRU5DX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NPVVJDRV9JTlRFR0VSX0VOQ19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TT1VSQ0VfTEVOR1RIX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NSQ19FTlZfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1JDX05BTUVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1JPX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NTTF9BTFJFQURZX0lOSVRJQUxJWkVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NTTF9BTFRfUFJPVklERVJfUkVRVUlSRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1NMX0NFUlRJRklDQVRFX1JFVk9LRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1NMX0NFUlRfU1RPUkVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1NMX0NPTkZJR19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TU0xfSU5JVElBTElaQVRJT05fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1NMX0tFWV9SRVNFVF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TU0xfTk9UX0FMTE9XRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1NMX1BFRVJfTkFNRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TU0xfUEVFUl9OQU1FX01JU01BVENIJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NUQU5EQllfUV9NR1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1RBVF9UWVBFX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NUT1BQRURfQllfQ0xVU1RFUl9FWElUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NUT1JBR0VfQ0xBU1NfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1RPUkFHRV9NRURJVU1fRlVMTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TVE9SQUdFX05PVF9BVkFJTEFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1RSSU5HX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NUUklOR19MRU5HVEhfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1RSSU5HX1RSVU5DQVRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TVFJVQ19JRF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TVFJVQ19MRU5HVEhfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1RTX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NVQkxFVkVMX05PVF9BTFRFUkFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1VCU0NSSVBUSU9OX0NIQU5HRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TVUJTQ1JJUFRJT05fQ1JFQVRFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NVQlNDUklQVElPTl9ERUxFVEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1VCU0NSSVBUSU9OX0lOX1VTRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TVUJTQ1JJUFRJT05fUkVGUkVTSCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TVUJfQUxSRUFEWV9FWElTVFMnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1VCX0lOSElCSVRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TVUJfTkFNRV9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TVUJfVVNFUl9EQVRBX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NVSVRFX0JfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1VQUFJFU1NFRF9CWV9FWElUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NZTkNQT0lOVF9MSU1JVF9SRUFDSEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NZTkNQT0lOVF9OT1RfQUxMT1dFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TWU5DUE9JTlRfTk9UX0FWQUlMQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19TWVNURU1fQkFHX05PVF9BTFRFUkFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1lTVEVNX0JBR19OT1RfREVMRVRBQkxFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1NZU1RFTV9JVEVNX05PVF9BTFRFUkFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfU1lTVEVNX0lURU1fTk9UX0RFTEVUQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19UQVJHRVRfQlVGRkVSX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1RBUkdFVF9DQ1NJRF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19UQVJHRVRfREVDSU1BTF9FTkNfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVEFSR0VUX0ZMT0FUX0VOQ19FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19UQVJHRVRfSU5URUdFUl9FTkNfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVEFSR0VUX0xFTkdUSF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19URVJNSU5BVElPTl9GQUlMRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVE1DX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1RNX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1RPUElDX05PVF9BTFRFUkFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVE9QSUNfU1RSSU5HX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1RSSUdHRVJfQ09OVFJPTF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19UUklHR0VSX0RFUFRIX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1RSSUdHRVJfTVNHX1BSSU9SSVRZX0VSUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19UUklHR0VSX1RZUEVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVFJVTkNBVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1RSVU5DQVRFRF9NU0dfQUNDRVBURUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVFJVTkNBVEVEX01TR19GQUlMRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVUNTMl9DT05WRVJTSU9OX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1VORVhQRUNURURfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVU5JVF9PRl9XT1JLX05PVF9TVEFSVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1VOS05PV05fQUxJQVNfQkFTRV9RJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1VOS05PV05fQVVUSF9FTlRJVFknID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVU5LTk9XTl9DSEFOTkVMX05BTUUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVU5LTk9XTl9DT01QT05FTlRfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19VTktOT1dOX0RFRl9YTUlUX1EnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVU5LTk9XTl9FTlRJVFknID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVU5LTk9XTl9PQkpFQ1RfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19VTktOT1dOX09CSkVDVF9RX01HUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19VTktOT1dOX1FfTkFNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19VTktOT1dOX1JFRl9PQkpFQ1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVU5LTk9XTl9SRU1PVEVfUV9NR1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVU5LTk9XTl9SRVBPUlRfT1BUSU9OJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1VOS05PV05fWE1JVF9RJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1VOU1VQUE9SVEVEX0NJUEhFUl9TVUlURScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19VTlNVUFBPUlRFRF9QUk9QRVJUWScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19VT1dfQ0FOQ0VMRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVU9XX0NPTU1JVFRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19VT1dfRU5MSVNUTUVOVF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19VT1dfSU5fUFJPR1JFU1MnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfVU9XX01JWF9OT1RfU1VQUE9SVEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1VPV19OT1RfQVZBSUxBQkxFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1VTRVJfSURfTk9UX0FWQUlMQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19XQUlUX0lOVEVSVkFMX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1dJSF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19XUk9OR19DRl9MRVZFTCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19XUk9OR19HTU9fVkVSU0lPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19XUk9OR19NRF9WRVJTSU9OJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1dST05HX1ZFUlNJT04nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfV1hQX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1hFUE9fRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfWE1JVF9RX1RZUEVfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUkNfWE1JVF9RX1VTQUdFX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1hRSF9FUlJPUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFSQ19YUl9OT1RfQVZBSUxBQkxFJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1hXQUlUX0NBTkNFTEVEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1hXQUlUX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJDX1pFUk9fTEVOR1RIJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJMX1VOREVGSU5FRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFST19BQ0NFUFRfVU5TVVBfSUZfWE1JVF9NQVNLJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJPX0FDQ0VQVF9VTlNVUF9NQVNLJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJPX0FDVElWSVRZJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJPX0NPQScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFST19DT0FfV0lUSF9EQVRBJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJPX0NPQV9XSVRIX0ZVTExfREFUQScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFST19DT0QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUk9fQ09EX1dJVEhfREFUQScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFST19DT0RfV0lUSF9GVUxMX0RBVEEnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUk9fQ09QWV9NU0dfSURfVE9fQ09SUkVMX0lEJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJPX0RFQURfTEVUVEVSX1EnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUk9fRElTQ0FSRF9NU0cnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUk9fRVhDRVBUSU9OJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJPX0VYQ0VQVElPTl9XSVRIX0RBVEEnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUk9fRVhDRVBUSU9OX1dJVEhfRlVMTF9EQVRBJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJPX0VYUElSQVRJT04nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUk9fRVhQSVJBVElPTl9XSVRIX0RBVEEnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUk9fRVhQSVJBVElPTl9XSVRIX0ZVTExfREFUQScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFST19OQU4nID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RUk9fTkVXX01TR19JRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFST19OT05FJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVJPX1BBTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFST19QQVNTX0NPUlJFTF9JRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFST19QQVNTX0RJU0NBUkRfQU5EX0VYUElSWScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFST19QQVNTX01TR19JRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFST19SRUpFQ1RfVU5TVVBfTUFTSycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFTT19BTFRFUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFTT19BTFRFUk5BVEVfVVNFUl9BVVRIT1JJVFknID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RU09fQU5ZX1VTRVJJRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFTT19DUkVBVEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RU09fRFVSQUJMRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFTT19GQUlMX0lGX1FVSUVTQ0lORycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFTT19GSVhFRF9VU0VSSUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RU09fR1JPVVBfU1VCJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVNPX01BTkFHRUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RU09fTkVXX1BVQkxJQ0FUSU9OU19PTkxZJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVNPX05PTkUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RU09fTk9OX0RVUkFCTEUnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RU09fTk9fTVVMVElDQVNUJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVNPX05PX1JFQURfQUhFQUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RU09fUFVCTElDQVRJT05TX09OX1JFUVVFU1QnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RU09fUkVBRF9BSEVBRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFTT19SRUFEX0FIRUFEX0FTX1FfREVGJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVNPX1JFU1VNRScgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFTT19TQ09QRV9RTUdSJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVNPX1NFVF9DT1JSRUxfSUQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RU09fU0VUX0lERU5USVRZX0NPTlRFWFQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RU09fV0lMRENBUkRfQ0hBUicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFTT19XSUxEQ0FSRF9UT1BJQycgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFTVEFUX1RZUEVfQVNZTkNfRVJST1InID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RU1RBVF9UWVBFX1JFQ09OTkVDVElPTicgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFTVEFUX1RZUEVfUkVDT05ORUNUSU9OX0VSUk9SJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVdJX1VOTElNSVRFRCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFYUFRfQUxMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVhQVF9ERUNORVQnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RWFBUX0xPQ0FMJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVhQVF9MVTYyJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVhQVF9ORVRCSU9TJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNUVNFUklFU19NUVhQVF9TUFgnID0+ICdtcXNlcmllcy9tcXNlcmllcy5zdHViJywgJ01RU0VSSUVTX01RWFBUX1RDUCcgPT4gJ21xc2VyaWVzL21xc2VyaWVzLnN0dWInLCAnTVFTRVJJRVNfTVFYUFRfVURQJyA9PiAnbXFzZXJpZXMvbXFzZXJpZXMuc3R1YicsICdNU0dfQ01TR19DTE9FWEVDJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnTVNHX0NPTkZJUk0nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdNU0dfQ1RSVU5DJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnTVNHX0RPTlRST1VURScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ01TR19ET05UV0FJVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ01TR19FQUdBSU4nID0+ICdzeXN2bXNnL3N5c3Ztc2cuc3R1YicsICdNU0dfRU5PTVNHJyA9PiAnc3lzdm1zZy9zeXN2bXNnLnN0dWInLCAnTVNHX0VPRicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ01TR19FT1InID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdNU0dfRVJSUVVFVUUnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdNU0dfRVhDRVBUJyA9PiAnc3lzdm1zZy9zeXN2bXNnLnN0dWInLCAnTVNHX0lQQ19OT1dBSVQnID0+ICdzeXN2bXNnL3N5c3Ztc2cuc3R1YicsICdNU0dfTU9SRScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ01TR19OT0VSUk9SJyA9PiAnc3lzdm1zZy9zeXN2bXNnLnN0dWInLCAnTVNHX05PU0lHTkFMJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnTVNHX09PQicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ01TR19QRUVLJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnTVNHX1RSVU5DJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnTVNHX1dBSVRBTEwnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdNU0dfV0FJVEZPUk9ORScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ01TR19aRVJPQ09QWScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ01TU1FMX0FTU09DJyA9PiAnbXNzcWwvbXNzcWwuc3R1YicsICdNU1NRTF9CT1RIJyA9PiAnbXNzcWwvbXNzcWwuc3R1YicsICdNU1NRTF9OVU0nID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ01TX0FMSUdOX0NFTlRFUicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19BTElHTl9MRUZUJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0FMSUdOX1JJR0hUJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0FVVE8nID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfQVVUTzInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfQ0MnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfQ0dJRVJSJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0NMJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0NSJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0RCRkVSUicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19ERCcgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19ERUZBVUxUJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0RFTEVURScgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19FTUJFRCcgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19FT0ZFUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfRkFMU0UnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfRkVFVCcgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19GT0xMT1cnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfR0RFUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfR0RfQUxQSEEnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfR0VUX1JFUVVFU1QnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfR0lBTlQnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfR1JBVElDVUxFJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0hBU0hFUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfSElMSVRFJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0hUVFBFUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfSURFTlRFUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfSU1BR0VNT0RFX0JZVEUnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfSU1BR0VNT0RFX0ZFQVRVUkUnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfSU1BR0VNT0RFX0ZMT0FUMzInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfSU1BR0VNT0RFX0lOVDE2JyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0lNQUdFTU9ERV9OVUxMJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0lNQUdFTU9ERV9QQzI1NicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19JTUFHRU1PREVfUkdCJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0lNQUdFTU9ERV9SR0JBJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0lNR0VSUicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19JTkNIRVMnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfSU5MSU5FJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0lPRVJSJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0pPSU5FUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfS0lMT01FVEVSUycgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19MQUJFTF9CSU5ESU5HX0FOR0xFJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0xBQkVMX0JJTkRJTkdfQ09MT1InID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfTEFCRUxfQklORElOR19GT05UJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0xBQkVMX0JJTkRJTkdfT1VUTElORUNPTE9SJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0xBQkVMX0JJTkRJTkdfUE9TSVRJT04nID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfTEFCRUxfQklORElOR19QUklPUklUWScgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19MQUJFTF9CSU5ESU5HX1NIQURPV1NJWkVYJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0xBQkVMX0JJTkRJTkdfU0hBRE9XU0laRVknID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfTEFCRUxfQklORElOR19TSVpFJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0xBUkdFJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0xBWUVSX0FOTk9UQVRJT04nID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfTEFZRVJfQ0hBUlQnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfTEFZRVJfQ0lSQ0xFJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0xBWUVSX0xJTkUnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfTEFZRVJfUE9JTlQnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfTEFZRVJfUE9MWUdPTicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19MQVlFUl9RVUVSWScgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19MQVlFUl9SQVNURVInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfTEFZRVJfVElMRUlOREVYJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0xDJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0xMJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX0xSJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX01BUENPTlRFWFRFUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfTUVESVVNJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX01FTUVSUicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19NRVRFUlMnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfTUlMRVMnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfTUlTQ0VSUicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19NVUxUSVBMRScgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19OQVVUSUNBTE1JTEVTJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX05PJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX05PRVJSJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX05PTkUnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfTk9STUFMJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX05PVEZPVU5EJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX09GRicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19PR1InID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfT0dSRVJSJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX09OJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX09SQUNMRVNQQVRJQUwnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfT1JBQ0xFU1BBVElBTEVSUicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19QQVJTRUVSUicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19QSVhFTFMnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfUExVR0lOJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1BPU1RHSVMnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfUE9TVF9SRVFVRVNUJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1BST0pFUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfUVVFUllFUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfUkFTVEVSJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1JFR0VYRVJSJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1NERScgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19TREVFUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfU0VMRUNURUQnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfU0hBUEVGSUxFJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1NIQVBFX0xJTkUnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfU0hBUEVfTlVMTCcgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19TSEFQRV9QT0lOVCcgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19TSEFQRV9QT0xZR09OJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1NIUEVSUicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19TSFBfQVJDJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1NIUF9NVUxUSVBPSU5UJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1NIUF9QT0lOVCcgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19TSFBfUE9MWUdPTicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19TSU5HTEUnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfU01BTEwnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfU1RZTEVfQklORElOR19BTkdMRScgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19TVFlMRV9CSU5ESU5HX0NPTE9SJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1NUWUxFX0JJTkRJTkdfT1VUTElORUNPTE9SJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1NUWUxFX0JJTkRJTkdfU0laRScgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19TVFlMRV9CSU5ESU5HX1NZTUJPTCcgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19TVFlMRV9CSU5ESU5HX1dJRFRIJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1NZTUJPTF9FTExJUFNFJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1NZTUJPTF9QSVhNQVAnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfU1lNQk9MX1NJTVBMRScgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19TWU1CT0xfVFJVRVRZUEUnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfU1lNQk9MX1ZFQ1RPUicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19TWU1FUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfVElMRURfT0dSJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1RJTEVEX1NIQVBFRklMRScgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19USU5ZJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1RSVUUnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfVFRGRVJSJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1RZUEVFUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfVUMnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfVUwnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfVU5JT04nID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfVVInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfV0NTRVJSJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1dFQkVSUicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19XRlMnID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfV0ZTQ09OTkVSUicgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNU19XRlNFUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfV01TJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1dNU0NPTk5FUlInID0+ICdtYXBzY3JpcHQvbWFwc2NyaXB0LnN0dWInLCAnTVNfV01TRVJSJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1hZJyA9PiAnbWFwc2NyaXB0L21hcHNjcmlwdC5zdHViJywgJ01TX1lFUycgPT4gJ21hcHNjcmlwdC9tYXBzY3JpcHQuc3R1YicsICdNVF9SQU5EX01UMTk5MzcnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTVRfUkFORF9QSFAnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTVlTUUxJX0FTU09DJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9BU1lOQycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfQVVUT19JTkNSRU1FTlRfRkxBRycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfQklOQVJZX0ZMQUcnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX0JMT0JfRkxBRycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfQk9USCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfQ0xJRU5UX0NBTl9IQU5ETEVfRVhQSVJFRF9QQVNTV09SRFMnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX0NMSUVOVF9DT01QUkVTUycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfQ0xJRU5UX0ZPVU5EX1JPV1MnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX0NMSUVOVF9JR05PUkVfU1BBQ0UnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX0NMSUVOVF9JTlRFUkFDVElWRScgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfQ0xJRU5UX05PX1NDSEVNQScgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfQ0xJRU5UX1NTTCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfQ0xJRU5UX1NTTF9ET05UX1ZFUklGWV9TRVJWRVJfQ0VSVCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfQ0xJRU5UX1NTTF9WRVJJRllfU0VSVkVSX0NFUlQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX0NVUlNPUl9UWVBFX0ZPUl9VUERBVEUnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX0NVUlNPUl9UWVBFX05PX0NVUlNPUicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfQ1VSU09SX1RZUEVfUkVBRF9PTkxZJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9DVVJTT1JfVFlQRV9TQ1JPTExBQkxFJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9EQVRBX1RSVU5DQVRFRCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfREVCVUdfVFJBQ0VfRU5BQkxFRCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfRU5VTV9GTEFHJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9HUk9VUF9GTEFHJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9JTklUX0NPTU1BTkQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX0lTX01BUklBREInID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX01VTFRJUExFX0tFWV9GTEFHJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9OT1RfTlVMTF9GTEFHJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9OT19EQVRBJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9OT19ERUZBVUxUX1ZBTFVFX0ZMQUcnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX05VTScgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfTlVNX0ZMQUcnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX09OX1VQREFURV9OT1dfRkxBRycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfT1BUX0NBTl9IQU5ETEVfRVhQSVJFRF9QQVNTV09SRFMnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX09QVF9DT05ORUNUX1RJTUVPVVQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX09QVF9JTlRfQU5EX0ZMT0FUX05BVElWRScgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfT1BUX0xPQURfREFUQV9MT0NBTF9ESVInID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX09QVF9MT0NBTF9JTkZJTEUnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX09QVF9ORVRfQ01EX0JVRkZFUl9TSVpFJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9PUFRfTkVUX1JFQURfQlVGRkVSX1NJWkUnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX09QVF9SRUFEX1RJTUVPVVQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX09QVF9TU0xfVkVSSUZZX1NFUlZFUl9DRVJUJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9QQVJUX0tFWV9GTEFHJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9QUklfS0VZX0ZMQUcnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1JFQURfREVGQVVMVF9GSUxFJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9SRUFEX0RFRkFVTFRfR1JPVVAnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1JFRlJFU0hfQkFDS1VQX0xPRycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfUkVGUkVTSF9HUkFOVCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfUkVGUkVTSF9IT1NUUycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfUkVGUkVTSF9MT0cnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1JFRlJFU0hfTUFTVEVSJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9SRUZSRVNIX1JFUExJQ0EnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1JFRlJFU0hfU0xBVkUnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1JFRlJFU0hfU1RBVFVTJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9SRUZSRVNIX1RBQkxFUycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfUkVGUkVTSF9USFJFQURTJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9SRVBPUlRfQUxMJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9SRVBPUlRfRVJST1InID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1JFUE9SVF9JTkRFWCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfUkVQT1JUX09GRicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfUkVQT1JUX1NUUklDVCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfU0VSVkVSX1BTX09VVF9QQVJBTVMnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1NFUlZFUl9QVUJMSUNfS0VZJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9TRVJWRVJfUVVFUllfTk9fR09PRF9JTkRFWF9VU0VEJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9TRVJWRVJfUVVFUllfTk9fSU5ERVhfVVNFRCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfU0VSVkVSX1FVRVJZX1dBU19TTE9XJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9TRVRfQ0hBUlNFVF9ESVInID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1NFVF9DSEFSU0VUX05BTUUnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1NFVF9GTEFHJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9TVE1UX0FUVFJfQ1VSU09SX1RZUEUnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1NUTVRfQVRUUl9QUkVGRVRDSF9ST1dTJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9TVE1UX0FUVFJfVVBEQVRFX01BWF9MRU5HVEgnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1NUT1JFX1JFU1VMVCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfU1RPUkVfUkVTVUxUX0NPUFlfREFUQScgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfVElNRVNUQU1QX0ZMQUcnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RSQU5TX0NPUl9BTkRfQ0hBSU4nID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RSQU5TX0NPUl9BTkRfTk9fQ0hBSU4nID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RSQU5TX0NPUl9OT19SRUxFQVNFJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UUkFOU19DT1JfUkVMRUFTRScgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfVFJBTlNfU1RBUlRfUkVBRF9PTkxZJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UUkFOU19TVEFSVF9SRUFEX1dSSVRFJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UUkFOU19TVEFSVF9XSVRIX0NPTlNJU1RFTlRfU05BUFNIT1QnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfQklUJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UWVBFX0JMT0InID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfQ0hBUicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfVFlQRV9EQVRFJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UWVBFX0RBVEVUSU1FJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UWVBFX0RFQ0lNQUwnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfRE9VQkxFJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UWVBFX0VOVU0nID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfRkxPQVQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfR0VPTUVUUlknID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfSU5UMjQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfSU5URVJWQUwnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfSlNPTicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfVFlQRV9MT05HJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UWVBFX0xPTkdMT05HJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UWVBFX0xPTkdfQkxPQicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfVFlQRV9NRURJVU1fQkxPQicgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfVFlQRV9ORVdEQVRFJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UWVBFX05FV0RFQ0lNQUwnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfTlVMTCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfVFlQRV9TRVQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfU0hPUlQnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfU1RSSU5HJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UWVBFX1RJTUUnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfVElNRVNUQU1QJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UWVBFX1RJTlknID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfVElOWV9CTE9CJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UWVBFX1ZBUl9TVFJJTkcnID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1RZUEVfVkVDVE9SJyA9PiAnbXlzcWxpL215c3FsaS5zdHViJywgJ01ZU1FMSV9UWVBFX1lFQVInID0+ICdteXNxbGkvbXlzcWxpLnN0dWInLCAnTVlTUUxJX1VOSVFVRV9LRVlfRkxBRycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfVU5TSUdORURfRkxBRycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfVVNFX1JFU1VMVCcgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTElfWkVST0ZJTExfRkxBRycgPT4gJ215c3FsaS9teXNxbGkuc3R1YicsICdNWVNRTFhfTE9DS19ERUZBVUxUJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxYX0xPQ0tfTk9XQUlUJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxYX0xPQ0tfU0tJUF9MT0NLRUQnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9CSUdJTlQnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9CSVQnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9CTE9CJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxYX1RZUEVfQllURVMnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9DSEFSJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxYX1RZUEVfREFURScgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ01ZU1FMWF9UWVBFX0RBVEVUSU1FJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxYX1RZUEVfREVDSU1BTCcgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ01ZU1FMWF9UWVBFX0RPVUJMRScgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ01ZU1FMWF9UWVBFX0VOVU0nID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9GTE9BVCcgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ01ZU1FMWF9UWVBFX0dFT01FVFJZJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxYX1RZUEVfSU5UJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxYX1RZUEVfSU5UMjQnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9JTlRFUlZBTCcgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ01ZU1FMWF9UWVBFX0pTT04nID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9MT05HJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxYX1RZUEVfTE9OR0xPTkcnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9MT05HX0JMT0InID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9NRURJVU1JTlQnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9NRURJVU1fQkxPQicgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ01ZU1FMWF9UWVBFX05FV0RBVEUnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9ORVdERUNJTUFMJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxYX1RZUEVfTlVMTCcgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ01ZU1FMWF9UWVBFX1NFVCcgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ01ZU1FMWF9UWVBFX1NIT1JUJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxYX1RZUEVfU01BTExJTlQnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9TVFJJTkcnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9USU1FJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxYX1RZUEVfVElNRVNUQU1QJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxYX1RZUEVfVElOWScgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ01ZU1FMWF9UWVBFX1RJTllfQkxPQicgPT4gJ215c3FsX3hkZXZhcGkvbXlzcWxfeGRldmFwaS5zdHViJywgJ01ZU1FMWF9UWVBFX1ZBUl9TVFJJTkcnID0+ICdteXNxbF94ZGV2YXBpL215c3FsX3hkZXZhcGkuc3R1YicsICdNWVNRTFhfVFlQRV9ZRUFSJyA9PiAnbXlzcWxfeGRldmFwaS9teXNxbF94ZGV2YXBpLnN0dWInLCAnTVlTUUxfQVNTT0MnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ01ZU1FMX0JPVEgnID0+ICdteXNxbC9teXNxbC5zdHViJywgJ01ZU1FMX0NMSUVOVF9DT01QUkVTUycgPT4gJ215c3FsL215c3FsLnN0dWInLCAnTVlTUUxfQ0xJRU5UX0lHTk9SRV9TUEFDRScgPT4gJ215c3FsL215c3FsLnN0dWInLCAnTVlTUUxfQ0xJRU5UX0lOVEVSQUNUSVZFJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdNWVNRTF9DTElFTlRfU1NMJyA9PiAnbXlzcWwvbXlzcWwuc3R1YicsICdNWVNRTF9OVU0nID0+ICdteXNxbC9teXNxbC5zdHViJywgJ01fMV9QSScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNXzJfUEknID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTV8yX1NRUlRQSScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNX0UnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTV9FVUxFUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNX0xOMTAnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTV9MTjInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTV9MTlBJJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ01fTE9HMTBFJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ01fTE9HMkUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTV9QSScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNX1BJXzInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTV9QSV80JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ01fU1FSVDFfMicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdNX1NRUlQyJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ01fU1FSVDMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTV9TUVJUUEknID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTWVudScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdNb2RhbERpYWxvZycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdNb2RlbGVzc0RpYWxvZycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdOQU4nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnTkNVUlNFU19BTExfTU9VU0VfRVZFTlRTJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19BX0FMVENIQVJTRVQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0FfQkxJTksnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0FfQk9MRCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQV9DSEFSVEVYVCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQV9ESU0nID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0FfSU5WSVMnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0FfTk9STUFMJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19BX1BST1RFQ1QnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0FfUkVWRVJTRScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQV9TVEFORE9VVCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQV9VTkRFUkxJTkUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0JVVFRPTjFfQ0xJQ0tFRCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQlVUVE9OMV9ET1VCTEVfQ0xJQ0tFRCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQlVUVE9OMV9QUkVTU0VEJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19CVVRUT04xX1JFTEVBU0VEJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19CVVRUT04xX1RSSVBMRV9DTElDS0VEJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19CVVRUT04yX0NMSUNLRUQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0JVVFRPTjJfRE9VQkxFX0NMSUNLRUQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0JVVFRPTjJfUFJFU1NFRCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQlVUVE9OMl9SRUxFQVNFRCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQlVUVE9OM19DTElDS0VEJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19CVVRUT04zX0RPVUJMRV9DTElDS0VEJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19CVVRUT04zX1BSRVNTRUQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0JVVFRPTjNfUkVMRUFTRUQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0JVVFRPTjNfVFJJUExFX0NMSUNLRUQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0JVVFRPTjRfQ0xJQ0tFRCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQlVUVE9ONF9ET1VCTEVfQ0xJQ0tFRCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQlVUVE9ONF9QUkVTU0VEJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19CVVRUT040X1JFTEVBU0VEJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19CVVRUT040X1RSSVBMRV9DTElDS0VEJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19CVVRUT05fQUxUJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19CVVRUT05fQ1RSTCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQlVUVE9OX1NISUZUJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19DT0xPUl9CTEFDSycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQ09MT1JfQkxVRScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQ09MT1JfQ1lBTicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQ09MT1JfR1JFRU4nID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0NPTE9SX01BR0VOVEEnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0NPTE9SX1JFRCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfQ09MT1JfV0hJVEUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0NPTE9SX1lFTExPVycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0ExJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfQTMnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9CMicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0JBQ0tTUEFDRScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0JFRycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0JUQUInID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9DMScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0MzJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfQ0FOQ0VMJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfQ0FUQUInID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9DTEVBUicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0NMT1NFJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfQ09NTUFORCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0NPUFknID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9DUkVBVEUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9DVEFCJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfREMnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9ETCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0RPV04nID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9FSUMnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9FTkQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9FTlRFUicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0VPTCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0VPUycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0VYSVQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9GMCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0YxJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfRjEwJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfRjExJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfRjEyJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfRjInID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9GMycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0Y0JyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfRjUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9GNicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0Y3JyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfRjgnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9GOScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0ZJTkQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9IRUxQJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfSE9NRScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX0lDJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfSUwnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9MRUZUJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfTEwnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9NQVJLJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfTUVTU0FHRScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX01PVVNFJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfTU9WRScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX05FWFQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9OUEFHRScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX09QRU4nID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9PUFRJT05TJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfUFBBR0UnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9QUkVWSU9VUycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1BSSU5UJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfUkVETycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1JFRkVSRU5DRScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1JFRlJFU0gnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9SRVBMQUNFJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfUkVTRVQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9SRVNJWkUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9SRVNUQVJUJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfUkVTVU1FJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfUklHSFQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TQVZFJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfU0JFRycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NDQU5DRUwnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TQ09NTUFORCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NDT1BZJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfU0NSRUFURScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NEQycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NETCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NFTEVDVCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NFTkQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TRU9MJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfU0VYSVQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TRicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NGSU5EJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfU0hFTFAnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TSE9NRScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NJQycgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NMRUZUJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfU01FU1NBR0UnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TTU9WRScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NORVhUJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfU09QVElPTlMnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TUFJFVklPVVMnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TUFJJTlQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TUicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NSRURPJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfU1JFUExBQ0UnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TUkVTRVQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TUklHSFQnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TUlNVTUUnID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9TU0FWRScgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NTVVNQRU5EJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfU1RBQicgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1NVTkRPJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkNVUlNFU19LRVlfU1VTUEVORCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfS0VZX1VORE8nID0+ICduY3Vyc2VzL25jdXJzZXMuc3R1YicsICdOQ1VSU0VTX0tFWV9VUCcgPT4gJ25jdXJzZXMvbmN1cnNlcy5zdHViJywgJ05DVVJTRVNfUkVQT1JUX01PVVNFX1BPU0lUSU9OJyA9PiAnbmN1cnNlcy9uY3Vyc2VzLnN0dWInLCAnTkVHQVRJVkVfU0lHTicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdOSUwnID0+ICdpbWFwL2ltYXAuc3R1YicsICdOT0NPTE9SJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ05PRVhQUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdOT1JNX0lHTk9SRUNBU0UnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdOT1JNX0lHTk9SRUtBTkFUWVBFJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnTk9STV9JR05PUkVLQVNISURBJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnTk9STV9JR05PUkVOT05TUEFDRScgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ05PUk1fSUdOT1JFU1lNQk9MUycgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ05PUk1fSUdOT1JFV0lEVEgnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdOT1NUUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdOX0NTX1BSRUNFREVTJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ05fU0VQX0JZX1NQQUNFJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ05fU0lHTl9QT1NOJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ05ha2VkV2luZG93JyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ09BVVRIX0FVVEhfVFlQRV9BVVRIT1JJWkFUSU9OJyA9PiAnb2F1dGgvb2F1dGguc3R1YicsICdPQVVUSF9BVVRIX1RZUEVfRk9STScgPT4gJ29hdXRoL29hdXRoLnN0dWInLCAnT0FVVEhfQVVUSF9UWVBFX05PTkUnID0+ICdvYXV0aC9vYXV0aC5zdHViJywgJ09BVVRIX0FVVEhfVFlQRV9VUkknID0+ICdvYXV0aC9vYXV0aC5zdHViJywgJ09BVVRIX0JBRF9OT05DRScgPT4gJ29hdXRoL29hdXRoLnN0dWInLCAnT0FVVEhfQkFEX1RJTUVTVEFNUCcgPT4gJ29hdXRoL29hdXRoLnN0dWInLCAnT0FVVEhfQ09OU1VNRVJfS0VZX1JFRlVTRUQnID0+ICdvYXV0aC9vYXV0aC5zdHViJywgJ09BVVRIX0NPTlNVTUVSX0tFWV9VTktOT1dOJyA9PiAnb2F1dGgvb2F1dGguc3R1YicsICdPQVVUSF9IVFRQX01FVEhPRF9ERUxFVEUnID0+ICdvYXV0aC9vYXV0aC5zdHViJywgJ09BVVRIX0hUVFBfTUVUSE9EX0dFVCcgPT4gJ29hdXRoL29hdXRoLnN0dWInLCAnT0FVVEhfSFRUUF9NRVRIT0RfSEVBRCcgPT4gJ29hdXRoL29hdXRoLnN0dWInLCAnT0FVVEhfSFRUUF9NRVRIT0RfUE9TVCcgPT4gJ29hdXRoL29hdXRoLnN0dWInLCAnT0FVVEhfSFRUUF9NRVRIT0RfUFVUJyA9PiAnb2F1dGgvb2F1dGguc3R1YicsICdPQVVUSF9JTlZBTElEX1NJR05BVFVSRScgPT4gJ29hdXRoL29hdXRoLnN0dWInLCAnT0FVVEhfT0snID0+ICdvYXV0aC9vYXV0aC5zdHViJywgJ09BVVRIX1BBUkFNRVRFUl9BQlNFTlQnID0+ICdvYXV0aC9vYXV0aC5zdHViJywgJ09BVVRIX1JFUUVOR0lORV9DVVJMJyA9PiAnb2F1dGgvb2F1dGguc3R1YicsICdPQVVUSF9SRVFFTkdJTkVfU1RSRUFNUycgPT4gJ29hdXRoL29hdXRoLnN0dWInLCAnT0FVVEhfU0lHTkFUVVJFX01FVEhPRF9SRUpFQ1RFRCcgPT4gJ29hdXRoL29hdXRoLnN0dWInLCAnT0FVVEhfU0lHX01FVEhPRF9ITUFDU0hBMScgPT4gJ29hdXRoL29hdXRoLnN0dWInLCAnT0FVVEhfU0lHX01FVEhPRF9ITUFDU0hBMjU2JyA9PiAnb2F1dGgvb2F1dGguc3R1YicsICdPQVVUSF9TSUdfTUVUSE9EX1JTQVNIQTEnID0+ICdvYXV0aC9vYXV0aC5zdHViJywgJ09BVVRIX1RPS0VOX0VYUElSRUQnID0+ICdvYXV0aC9vYXV0aC5zdHViJywgJ09BVVRIX1RPS0VOX1JFSkVDVEVEJyA9PiAnb2F1dGgvb2F1dGguc3R1YicsICdPQVVUSF9UT0tFTl9VU0VEJyA9PiAnb2F1dGgvb2F1dGguc3R1YicsICdPQVVUSF9WRVJJRklFUl9JTlZBTElEJyA9PiAnb2F1dGgvb2F1dGguc3R1YicsICdPQ0lfQVNTT0MnID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfQk9USCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9CX0JGSUxFJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnT0NJX0JfQklOJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnT0NJX0JfQkxPQicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9CX0JPTCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9CX0NGSUxFRScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9CX0NMT0InID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfQl9DVVJTT1InID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfQl9JTlQnID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfQl9OVFknID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfQl9OVU0nID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfQl9ST1dJRCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9DT01NSVRfT05fU1VDQ0VTUycgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9DUkVEX0VYVCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9ERUZBVUxUJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnT0NJX0RFU0NSSUJFX09OTFknID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfRFRZUEVfRklMRScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9EVFlQRV9MT0InID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfRFRZUEVfUk9XSUQnID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfRF9GSUxFJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnT0NJX0RfTE9CJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnT0NJX0RfUk9XSUQnID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfRVhBQ1RfRkVUQ0gnID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfRkVUQ0hTVEFURU1FTlRfQllfQ09MVU1OJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnT0NJX0ZFVENIU1RBVEVNRU5UX0JZX1JPVycgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9MT0JfQlVGRkVSX0ZSRUUnID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfTk9fQVVUT19DT01NSVQnID0+ICdvY2k4L29jaTguc3R1YicsICdPQ0lfTlVNJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnT0NJX1JFVFVSTl9MT0JTJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnT0NJX1JFVFVSTl9OVUxMUycgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9TRUVLX0NVUicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9TRUVLX0VORCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9TRUVLX1NFVCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9TWVNEQVRFJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnT0NJX1NZU0RCQScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9TWVNPUEVSJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnT0NJX1RFTVBfQkxPQicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ09DSV9URU1QX0NMT0InID0+ICdvY2k4L29jaTguc3R1YicsICdPREJDX0JJTk1PREVfQ09OVkVSVCcgPT4gJ29kYmMvb2RiYy5zdHViJywgJ09EQkNfQklOTU9ERV9QQVNTVEhSVScgPT4gJ29kYmMvb2RiYy5zdHViJywgJ09EQkNfQklOTU9ERV9SRVRVUk4nID0+ICdvZGJjL29kYmMuc3R1YicsICdPREJDX1RZUEUnID0+ICdvZGJjL29kYmMuc3R1YicsICdPUEVOU1NMX0FMR09fRFNTMScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfQUxHT19NRDInID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0FMR09fTUQ0JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9BTEdPX01ENScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfQUxHT19STUQxNjAnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0FMR09fU0hBMScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfQUxHT19TSEEyMjQnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0FMR09fU0hBMjU2JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9BTEdPX1NIQTM4NCcgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfQUxHT19TSEE1MTInID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0NJUEhFUl8zREVTJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9DSVBIRVJfQUVTXzEyOF9DQkMnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0NJUEhFUl9BRVNfMTkyX0NCQycgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfQ0lQSEVSX0FFU18yNTZfQ0JDJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9DSVBIRVJfREVTJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9DSVBIRVJfUkMyXzEyOCcgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfQ0lQSEVSX1JDMl80MCcgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfQ0lQSEVSX1JDMl82NCcgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfQ01TX0JJTkFSWScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfQ01TX0RFVEFDSEVEJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9DTVNfTk9BVFRSJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9DTVNfTk9DRVJUUycgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfQ01TX05PSU5URVJOJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9DTVNfTk9TSUdTJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9DTVNfTk9WRVJJRlknID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0NNU19PTERNSU1FVFlQRScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfQ01TX1RFWFQnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0RFRkFVTFRfU1RSRUFNX0NJUEhFUlMnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0RPTlRfWkVST19QQURfS0VZJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9FTkNPRElOR19ERVInID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0VOQ09ESU5HX1BFTScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfRU5DT0RJTkdfU01JTUUnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0tFWVRZUEVfREgnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0tFWVRZUEVfRFNBJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9LRVlUWVBFX0VDJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9LRVlUWVBFX0VEMjU1MTknID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0tFWVRZUEVfRUQ0NDgnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX0tFWVRZUEVfUlNBJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9LRVlUWVBFX1gyNTUxOScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfS0VZVFlQRV9YNDQ4JyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9OT19QQURESU5HJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9QS0NTMV9PQUVQX1BBRERJTkcnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX1BLQ1MxX1BBRERJTkcnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUEVOU1NMX1JBV19EQVRBJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9TU0xWMjNfUEFERElORycgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfVExTRVhUX1NFUlZFUl9OQU1FJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9WRVJTSU9OX05VTUJFUicgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ09QRU5TU0xfVkVSU0lPTl9URVhUJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnT1BFTlNTTF9aRVJPX1BBRERJTkcnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdPUF9BTk9OWU1PVVMnID0+ICdpbWFwL2ltYXAuc3R1YicsICdPUF9ERUJVRycgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ09QX0VYUFVOR0UnID0+ICdpbWFwL2ltYXAuc3R1YicsICdPUF9IQUxGT1BFTicgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ09QX1BST1RPVFlQRScgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ09QX1JFQURPTkxZJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnT1BfU0VDVVJFJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnT1BfU0hPUlRDQUNIRScgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ09QX1NJTEVOVCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ09fQVBQRU5EJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnT19BU1lOQycgPT4gJ2Rpby9kaW9fZC5zdHViJywgJ09fQ1JFQVQnID0+ICdkaW8vZGlvX2Quc3R1YicsICdPX0VYQ0wnID0+ICdkaW8vZGlvX2Quc3R1YicsICdPX05ERUxBWScgPT4gJ2Rpby9kaW9fZC5zdHViJywgJ09fTk9DVFRZJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnT19OT05CTE9DSycgPT4gJ2Rpby9kaW9fZC5zdHViJywgJ09fUkRPTkxZJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnT19SRFdSJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnT19TWU5DJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnT19UUlVOQycgPT4gJ2Rpby9kaW9fZC5zdHViJywgJ09fV1JPTkxZJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnUEFTU1dPUkRfQVJHT04ySScgPT4gJ3N0YW5kYXJkL3Bhc3N3b3JkLnN0dWInLCAnUEFTU1dPUkRfQVJHT04ySUQnID0+ICdzdGFuZGFyZC9wYXNzd29yZC5zdHViJywgJ1BBU1NXT1JEX0FSR09OMl9ERUZBVUxUX01FTU9SWV9DT1NUJyA9PiAnc3RhbmRhcmQvcGFzc3dvcmQuc3R1YicsICdQQVNTV09SRF9BUkdPTjJfREVGQVVMVF9USFJFQURTJyA9PiAnc3RhbmRhcmQvcGFzc3dvcmQuc3R1YicsICdQQVNTV09SRF9BUkdPTjJfREVGQVVMVF9USU1FX0NPU1QnID0+ICdzdGFuZGFyZC9wYXNzd29yZC5zdHViJywgJ1BBU1NXT1JEX0FSR09OMl9QUk9WSURFUicgPT4gJ3N0YW5kYXJkL3Bhc3N3b3JkLnN0dWInLCAnUEFTU1dPUkRfQkNSWVBUJyA9PiAnc3RhbmRhcmQvcGFzc3dvcmQuc3R1YicsICdQQVNTV09SRF9CQ1JZUFRfREVGQVVMVF9DT1NUJyA9PiAnc3RhbmRhcmQvcGFzc3dvcmQuc3R1YicsICdQQVNTV09SRF9ERUZBVUxUJyA9PiAnc3RhbmRhcmQvcGFzc3dvcmQuc3R1YicsICdQQVRISU5GT19BTEwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUEFUSElORk9fQkFTRU5BTUUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUEFUSElORk9fRElSTkFNRScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdQQVRISU5GT19FWFRFTlNJT04nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUEFUSElORk9fRklMRU5BTUUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUEFUSF9TRVBBUkFUT1InID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUENOVExfRTJCSUcnID0+ICdwY250bC9wY250bC5zdHViJywgJ1BDTlRMX0VBQ0NFUycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnUENOVExfRUFHQUlOJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdQQ05UTF9FQ0hJTEQnID0+ICdwY250bC9wY250bC5zdHViJywgJ1BDTlRMX0VGQVVMVCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnUENOVExfRUlOVFInID0+ICdwY250bC9wY250bC5zdHViJywgJ1BDTlRMX0VJTlZBTCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnUENOVExfRUlPJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdQQ05UTF9FSVNESVInID0+ICdwY250bC9wY250bC5zdHViJywgJ1BDTlRMX0VMSUJCQUQnID0+ICdwY250bC9wY250bC5zdHViJywgJ1BDTlRMX0VMT09QJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdQQ05UTF9FTUZJTEUnID0+ICdwY250bC9wY250bC5zdHViJywgJ1BDTlRMX0VOQU1FVE9PTE9ORycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnUENOVExfRU5GSUxFJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdQQ05UTF9FTk9FTlQnID0+ICdwY250bC9wY250bC5zdHViJywgJ1BDTlRMX0VOT0VYRUMnID0+ICdwY250bC9wY250bC5zdHViJywgJ1BDTlRMX0VOT01FTScgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnUENOVExfRU5PU1BDJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdQQ05UTF9FTk9URElSJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdQQ05UTF9FUEVSTScgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnUENOVExfRVNSQ0gnID0+ICdwY250bC9wY250bC5zdHViJywgJ1BDTlRMX0VUWFRCU1knID0+ICdwY250bC9wY250bC5zdHViJywgJ1BDTlRMX0VVU0VSUycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnUENSRV9KSVRfU1VQUE9SVCcgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ1BDUkVfVkVSU0lPTicgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ1BDUkVfVkVSU0lPTl9NQUpPUicgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ1BDUkVfVkVSU0lPTl9NSU5PUicgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ1BFQVJfRVhURU5TSU9OX0RJUicgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEVBUl9JTlNUQUxMX0RJUicgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEdTUUxfQVNTT0MnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0JBRF9SRVNQT05TRScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfQk9USCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfQ09NTUFORF9PSycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfQ09OTkVDVElPTl9BVVRIX09LJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9DT05ORUNUSU9OX0FXQUlUSU5HX1JFU1BPTlNFJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9DT05ORUNUSU9OX0JBRCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfQ09OTkVDVElPTl9NQURFJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9DT05ORUNUSU9OX09LJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9DT05ORUNUSU9OX1NFVEVOVicgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfQ09OTkVDVElPTl9TVEFSVEVEJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9DT05ORUNUX0FTWU5DJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9DT05ORUNUX0ZPUkNFX05FVycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfQ09OVl9GT1JDRV9OVUxMJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9DT05WX0lHTk9SRV9ERUZBVUxUJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9DT05WX0lHTk9SRV9OT1RfTlVMTCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfQ09QWV9JTicgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfQ09QWV9PVVQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0RJQUdfQ09MVU1OX05BTUUnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0RJQUdfQ09OU1RSQUlOVF9OQU1FJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9ESUFHX0NPTlRFWFQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0RJQUdfREFUQVRZUEVfTkFNRScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfRElBR19JTlRFUk5BTF9QT1NJVElPTicgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfRElBR19JTlRFUk5BTF9RVUVSWScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfRElBR19NRVNTQUdFX0RFVEFJTCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfRElBR19NRVNTQUdFX0hJTlQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0RJQUdfTUVTU0FHRV9QUklNQVJZJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9ESUFHX1NDSEVNQV9OQU1FJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9ESUFHX1NFVkVSSVRZJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9ESUFHX1NFVkVSSVRZX05PTkxPQ0FMSVpFRCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfRElBR19TT1VSQ0VfRklMRScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfRElBR19TT1VSQ0VfRlVOQ1RJT04nID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0RJQUdfU09VUkNFX0xJTkUnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0RJQUdfU1FMU1RBVEUnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0RJQUdfU1RBVEVNRU5UX1BPU0lUSU9OJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9ESUFHX1RBQkxFX05BTUUnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0RNTF9BU1lOQycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfRE1MX0VTQ0FQRScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfRE1MX0VYRUMnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0RNTF9OT19DT05WJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9ETUxfU1RSSU5HJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9FTVBUWV9RVUVSWScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfRVJST1JTX0RFRkFVTFQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0VSUk9SU19TUUxTVEFURScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfRVJST1JTX1RFUlNFJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9FUlJPUlNfVkVSQk9TRScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfRkFUQUxfRVJST1InID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0xJQlBRX1ZFUlNJT04nID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX0xJQlBRX1ZFUlNJT05fU1RSJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9OT05GQVRBTF9FUlJPUicgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfTk9USUNFX0FMTCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfTk9USUNFX0NMRUFSJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9OT1RJQ0VfTEFTVCcgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfTlVNJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9QSVBFTElORV9BQk9SVEVEJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9QSVBFTElORV9PRkYnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX1BJUEVMSU5FX09OJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9QSVBFTElORV9TWU5DJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9QT0xMSU5HX0FDVElWRScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfUE9MTElOR19GQUlMRUQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX1BPTExJTkdfT0snID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX1BPTExJTkdfUkVBRElORycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfUE9MTElOR19XUklUSU5HJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9TRUVLX0NVUicgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfU0VFS19FTkQnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX1NFRUtfU0VUJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9TSE9XX0NPTlRFWFRfQUxXQVlTJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9TSE9XX0NPTlRFWFRfRVJST1JTJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9TSE9XX0NPTlRFWFRfTkVWRVInID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX1NUQVRVU19MT05HJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9TVEFUVVNfU1RSSU5HJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQR1NRTF9UUkFDRV9SRUdSRVNTX01PREUnID0+ICdwZ3NxbC9wZ3NxbC5zdHViJywgJ1BHU1FMX1RSQU5TQUNUSU9OX0FDVElWRScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfVFJBTlNBQ1RJT05fSURMRScgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfVFJBTlNBQ1RJT05fSU5FUlJPUicgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfVFJBTlNBQ1RJT05fSU5UUkFOUycgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfVFJBTlNBQ1RJT05fVU5LTk9XTicgPT4gJ3Bnc3FsL3Bnc3FsLnN0dWInLCAnUEdTUUxfVFVQTEVTX09LJyA9PiAncGdzcWwvcGdzcWwuc3R1YicsICdQSFBfQU1RUF9NQVhfQ0hBTk5FTFMnID0+ICdhbXFwL2FtcXAuc3R1YicsICdQSFBfQklOQVJZJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfQklOQVJZX1JFQUQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdQSFBfQklORElSJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfQ0xJX1BST0NFU1NfVElUTEUnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9DT05GSUdfRklMRV9QQVRIJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfQ09ORklHX0ZJTEVfU0NBTl9ESVInID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9EQVRBRElSJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfREVCVUcnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9FT0wnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9FWFRFTlNJT05fRElSJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfRVhUUkFfVkVSU0lPTicgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX0ZEX1NFVFNJWkUnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9GTE9BVF9ESUcnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9GTE9BVF9FUFNJTE9OJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfRkxPQVRfTUFYJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfRkxPQVRfTUlOJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfSU5UX01BWCcgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX0lOVF9NSU4nID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9JTlRfU0laRScgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX0xJQkRJUicgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX0xPQ0FMU1RBVEVESVInID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9NQUpPUl9WRVJTSU9OJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfTUFORElSJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfTUFYUEFUSExFTicgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX01JTk9SX1ZFUlNJT04nID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9OT1JNQUxfUkVBRCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1BIUF9PUycgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX09TX0ZBTUlMWScgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX09VVFBVVF9IQU5ETEVSX0NMRUFOJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfT1VUUFVUX0hBTkRMRVJfQ0xFQU5BQkxFJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfT1VUUFVUX0hBTkRMRVJfQ09OVCcgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX09VVFBVVF9IQU5ETEVSX0RJU0FCTEVEJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfT1VUUFVUX0hBTkRMRVJfRU5EJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfT1VUUFVUX0hBTkRMRVJfRklOQUwnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9PVVRQVVRfSEFORExFUl9GTFVTSCcgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX09VVFBVVF9IQU5ETEVSX0ZMVVNIQUJMRScgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX09VVFBVVF9IQU5ETEVSX1BST0NFU1NFRCcgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX09VVFBVVF9IQU5ETEVSX1JFTU9WQUJMRScgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX09VVFBVVF9IQU5ETEVSX1NUQVJUJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfT1VUUFVUX0hBTkRMRVJfU1RBUlRFRCcgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX09VVFBVVF9IQU5ETEVSX1NUREZMQUdTJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfT1VUUFVUX0hBTkRMRVJfV1JJVEUnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9QUkVGSVgnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9RVUVSWV9SRkMxNzM4JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1BIUF9RVUVSWV9SRkMzOTg2JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1BIUF9SRUxFQVNFX1ZFUlNJT04nID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9ST1VORF9IQUxGX0RPV04nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUEhQX1JPVU5EX0hBTEZfRVZFTicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdQSFBfUk9VTkRfSEFMRl9PREQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUEhQX1JPVU5EX0hBTEZfVVAnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUEhQX1NBUEknID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9TQklORElSJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfU0VTU0lPTl9BQ1RJVkUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUEhQX1NFU1NJT05fRElTQUJMRUQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUEhQX1NFU1NJT05fTk9ORScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdQSFBfU0hMSUJfU1VGRklYJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfU1ZOX0FVVEhfUEFSQU1fSUdOT1JFX1NTTF9WRVJJRllfRVJST1JTJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1BIUF9TWVNDT05GRElSJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfVVJMX0ZSQUdNRU5UJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1BIUF9VUkxfSE9TVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdQSFBfVVJMX1BBU1MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUEhQX1VSTF9QQVRIJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1BIUF9VUkxfUE9SVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdQSFBfVVJMX1FVRVJZJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1BIUF9VUkxfU0NIRU1FJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1BIUF9VUkxfVVNFUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdQSFBfVkVSU0lPTicgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX1ZFUlNJT05fSUQnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9XSU5ET1dTX0VWRU5UX0NUUkxfQlJFQUsnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9XSU5ET1dTX0VWRU5UX0NUUkxfQycgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX1dJTkRPV1NfTlRfRE9NQUlOX0NPTlRST0xMRVInID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9XSU5ET1dTX05UX1NFUlZFUicgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnUEhQX1dJTkRPV1NfTlRfV09SS1NUQVRJT04nID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9XSU5ET1dTX1ZFUlNJT05fQlVJTEQnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9XSU5ET1dTX1ZFUlNJT05fTUFKT1InID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9XSU5ET1dTX1ZFUlNJT05fTUlOT1InID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9XSU5ET1dTX1ZFUlNJT05fUExBVEZPUk0nID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9XSU5ET1dTX1ZFUlNJT05fUFJPRFVDVFRZUEUnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9XSU5ET1dTX1ZFUlNJT05fU1BfTUFKT1InID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9XSU5ET1dTX1ZFUlNJT05fU1BfTUlOT1InID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1BIUF9XSU5ET1dTX1ZFUlNJT05fU1VJVEVNQVNLJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQSFBfWlRTJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdQS0NTN19CSU5BUlknID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdQS0NTN19ERVRBQ0hFRCcgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ1BLQ1M3X05PQVRUUicgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ1BLQ1M3X05PQ0VSVFMnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdQS0NTN19OT0NIQUlOJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnUEtDUzdfTk9JTlRFUk4nID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdQS0NTN19OT09MRE1JTUVUWVBFJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnUEtDUzdfTk9TSUdTJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnUEtDUzdfTk9WRVJJRlknID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdQS0NTN19URVhUJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnUE1fU1RSJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1BOR19BTExfRklMVEVSUycgPT4gJ2dkL2dkLnN0dWInLCAnUE5HX0ZJTFRFUl9BVkcnID0+ICdnZC9nZC5zdHViJywgJ1BOR19GSUxURVJfTk9ORScgPT4gJ2dkL2dkLnN0dWInLCAnUE5HX0ZJTFRFUl9QQUVUSCcgPT4gJ2dkL2dkLnN0dWInLCAnUE5HX0ZJTFRFUl9TVUInID0+ICdnZC9nZC5zdHViJywgJ1BOR19GSUxURVJfVVAnID0+ICdnZC9nZC5zdHViJywgJ1BOR19OT19GSUxURVInID0+ICdnZC9nZC5zdHViJywgJ1BPTExfRVJSJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdQT0xMX0hVUCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnUE9MTF9JTicgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnUE9MTF9NU0cnID0+ICdwY250bC9wY250bC5zdHViJywgJ1BPTExfT1VUJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdQT0xMX1BSSScgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnUE9TSVRJVkVfU0lHTicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdQT1NJWF9GX09LJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9QQ19BTExPQ19TSVpFX01JTicgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfUENfQ0hPV05fUkVTVFJJQ1RFRCcgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfUENfTElOS19NQVgnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ1BPU0lYX1BDX01BWF9DQU5PTicgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfUENfTUFYX0lOUFVUJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9QQ19OQU1FX01BWCcgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfUENfTk9fVFJVTkMnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ1BPU0lYX1BDX1BBVEhfTUFYJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9QQ19QSVBFX0JVRicgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfUENfU1lNTElOS19NQVgnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ1BPU0lYX1JMSU1JVF9BUycgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfUkxJTUlUX0NPUkUnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ1BPU0lYX1JMSU1JVF9DUFUnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ1BPU0lYX1JMSU1JVF9EQVRBJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9STElNSVRfRlNJWkUnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ1BPU0lYX1JMSU1JVF9JTkZJTklUWScgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfUkxJTUlUX0xPQ0tTJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9STElNSVRfTUVNTE9DSycgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfUkxJTUlUX01TR1FVRVVFJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9STElNSVRfTklDRScgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfUkxJTUlUX05PRklMRScgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfUkxJTUlUX05QUk9DJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9STElNSVRfUlNTJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9STElNSVRfUlRQUklPJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9STElNSVRfUlRUSU1FJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9STElNSVRfU0lHUEVORElORycgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfUkxJTUlUX1NUQUNLJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9SX09LJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9TQ19BUkdfTUFYJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9TQ19DSElMRF9NQVgnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ1BPU0lYX1NDX0NMS19UQ0snID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ1BPU0lYX1NDX05QUk9DRVNTT1JTX0NPTkYnID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ1BPU0lYX1NDX05QUk9DRVNTT1JTX09OTE4nID0+ICdwb3NpeC9wb3NpeC5zdHViJywgJ1BPU0lYX1NDX1BBR0VTSVpFJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9TX0lGQkxLJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9TX0lGQ0hSJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9TX0lGSUZPJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9TX0lGUkVHJyA9PiAncG9zaXgvcG9zaXguc3R1YicsICdQT1NJWF9TX0lGU09DSycgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfV19PSycgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUE9TSVhfWF9PSycgPT4gJ3Bvc2l4L3Bvc2l4LnN0dWInLCAnUFJFR19CQUNLVFJBQ0tfTElNSVRfRVJST1InID0+ICdwY3JlL3BjcmUuc3R1YicsICdQUkVHX0JBRF9VVEY4X0VSUk9SJyA9PiAncGNyZS9wY3JlLnN0dWInLCAnUFJFR19CQURfVVRGOF9PRkZTRVRfRVJST1InID0+ICdwY3JlL3BjcmUuc3R1YicsICdQUkVHX0dSRVBfSU5WRVJUJyA9PiAncGNyZS9wY3JlLnN0dWInLCAnUFJFR19JTlRFUk5BTF9FUlJPUicgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ1BSRUdfSklUX1NUQUNLTElNSVRfRVJST1InID0+ICdwY3JlL3BjcmUuc3R1YicsICdQUkVHX05PX0VSUk9SJyA9PiAncGNyZS9wY3JlLnN0dWInLCAnUFJFR19PRkZTRVRfQ0FQVFVSRScgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ1BSRUdfUEFUVEVSTl9PUkRFUicgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ1BSRUdfUkVDVVJTSU9OX0xJTUlUX0VSUk9SJyA9PiAncGNyZS9wY3JlLnN0dWInLCAnUFJFR19TRVRfT1JERVInID0+ICdwY3JlL3BjcmUuc3R1YicsICdQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUnID0+ICdwY3JlL3BjcmUuc3R1YicsICdQUkVHX1NQTElUX05PX0VNUFRZJyA9PiAncGNyZS9wY3JlLnN0dWInLCAnUFJFR19TUExJVF9PRkZTRVRfQ0FQVFVSRScgPT4gJ3BjcmUvcGNyZS5zdHViJywgJ1BSRUdfVU5NQVRDSEVEX0FTX05VTEwnID0+ICdwY3JlL3BjcmUuc3R1YicsICdQUklPX1BHUlAnID0+ICdwY250bC9wY250bC5zdHViJywgJ1BSSU9fUFJPQ0VTUycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnUFJJT19VU0VSJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdQU0ZTX0VSUl9GQVRBTCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdQU0ZTX0ZFRURfTUUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUFNGU19GTEFHX0ZMVVNIX0NMT1NFJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1BTRlNfRkxBR19GTFVTSF9JTkMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUFNGU19GTEFHX05PUk1BTCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdQU0ZTX1BBU1NfT04nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnUFNQRUxMX0JBRF9TUEVMTEVSUycgPT4gJ3BzcGVsbC9wc3BlbGwuc3R1YicsICdQU1BFTExfRkFTVCcgPT4gJ3BzcGVsbC9wc3BlbGwuc3R1YicsICdQU1BFTExfTk9STUFMJyA9PiAncHNwZWxsL3BzcGVsbC5zdHViJywgJ1BTUEVMTF9SVU5fVE9HRVRIRVInID0+ICdwc3BlbGwvcHNwZWxsLnN0dWInLCAnUFRIUkVBRFNfQUxMT1dfSEVBREVSUycgPT4gJ3B0aHJlYWRzL3B0aHJlYWRzLnN0dWInLCAnUFRIUkVBRFNfSU5IRVJJVF9BTEwnID0+ICdwdGhyZWFkcy9wdGhyZWFkcy5zdHViJywgJ1BUSFJFQURTX0lOSEVSSVRfQ0xBU1NFUycgPT4gJ3B0aHJlYWRzL3B0aHJlYWRzLnN0dWInLCAnUFRIUkVBRFNfSU5IRVJJVF9DT01NRU5UUycgPT4gJ3B0aHJlYWRzL3B0aHJlYWRzLnN0dWInLCAnUFRIUkVBRFNfSU5IRVJJVF9DT05TVEFOVFMnID0+ICdwdGhyZWFkcy9wdGhyZWFkcy5zdHViJywgJ1BUSFJFQURTX0lOSEVSSVRfRlVOQ1RJT05TJyA9PiAncHRocmVhZHMvcHRocmVhZHMuc3R1YicsICdQVEhSRUFEU19JTkhFUklUX0lOQ0xVREVTJyA9PiAncHRocmVhZHMvcHRocmVhZHMuc3R1YicsICdQVEhSRUFEU19JTkhFUklUX0lOSScgPT4gJ3B0aHJlYWRzL3B0aHJlYWRzLnN0dWInLCAnUFRIUkVBRFNfSU5IRVJJVF9OT05FJyA9PiAncHRocmVhZHMvcHRocmVhZHMuc3R1YicsICdQX0FMTCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnUF9DU19QUkVDRURFUycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdQX1BHSUQnID0+ICdwY250bC9wY250bC5zdHViJywgJ1BfUElEJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdQX1BJREZEJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdQX1NFUF9CWV9TUEFDRScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdQX1NJR05fUE9TTicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdQb3B1cFdpbmRvdycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdQdXNoQnV0dG9uJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1JBRElVU19BQ0NFU1NfQUNDRVBUJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19BQ0NFU1NfQ0hBTExFTkdFJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19BQ0NFU1NfUkVKRUNUJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19BQ0NFU1NfUkVRVUVTVCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQUNDT1VOVElOR19PRkYnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0FDQ09VTlRJTkdfT04nID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0FDQ09VTlRJTkdfUkVRVUVTVCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQUNDT1VOVElOR19SRVNQT05TRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQUNDVF9BVVRIRU5USUMnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0FDQ1RfREVMQVlfVElNRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQUNDVF9JTlBVVF9PQ1RFVFMnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0FDQ1RfSU5QVVRfUEFDS0VUUycgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQUNDVF9MSU5LX0NPVU5UJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19BQ0NUX01VTFRJX1NFU1NJT05fSUQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0FDQ1RfT1VUUFVUX09DVEVUUycgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQUNDVF9PVVRQVVRfUEFDS0VUUycgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQUNDVF9TRVNTSU9OX0lEJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19BQ0NUX1NFU1NJT05fVElNRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQUNDVF9TVEFUVVNfVFlQRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQUNDVF9URVJNSU5BVEVfQ0FVU0UnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0FETUlOSVNUUkFUSVZFJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19BRFNMX0NBUCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQURTTF9ETVQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0FSQVAnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0FTWU5DJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19BVVRIRU5USUNBVEVfT05MWScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQVVUSF9MT0NBTCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQVVUSF9SQURJVVMnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0FVVEhfUkVNT1RFJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19DQUJMRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQ0FMTEJBQ0tfRlJBTUVEJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19DQUxMQkFDS19JRCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQ0FMTEJBQ0tfTE9HSU4nID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0NBTExCQUNLX05BU19QUk9NUFQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0NBTExCQUNLX05VTUJFUicgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQ0FMTEVEX1NUQVRJT05fSUQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0NBTExJTkdfU1RBVElPTl9JRCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQ0hBUF9DSEFMTEVOR0UnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0NIQVBfUEFTU1dPUkQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0NMQVNTJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19DT0FfQUNLJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19DT0FfTkFLJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19DT0FfUkVRVUVTVCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQ09NUF9JUFhIRFInID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0NPTVBfTk9ORScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQ09NUF9WSicgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfQ09OTkVDVF9JTkZPJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19ESVNDT05ORUNUX0FDSycgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRElTQ09OTkVDVF9OQUsnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0RJU0NPTk5FQ1RfUkVRVUVTVCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRVJST1JfQ0FVU0UnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0VSUk9SX0NBVVNFX0FETUlOSVNUUkFUSVZFTFlfUFJPSElCSVRFRCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRVJST1JfQ0FVU0VfSU5WQUxJRF9FQVBfUEFDS0VUJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19FUlJPUl9DQVVTRV9JTlZBTElEX1JFUVVFU1QnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0VSUk9SX0NBVVNFX01JU1NJTkdfQVRUUklCVVRFJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19FUlJPUl9DQVVTRV9OQVNfSURFTlRJRklDQVRJT05fTUlTTUFUQ0gnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0VSUk9SX0NBVVNFX09USEVSX1BST1hZX1BST0NFU1NJTkdfRVJST1InID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0VSUk9SX0NBVVNFX1JFUVVFU1RfSU5JVElBVEVEJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19FUlJPUl9DQVVTRV9SRVFVRVNUX05PVF9ST1VUQUJMRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRVJST1JfQ0FVU0VfUkVTSURVQUxfU0VTU0lPTl9DT05URVhUX1JFTU9WRUQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0VSUk9SX0NBVVNFX1JFU09VUkNFU19VTkFWQUlMQUJMRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRVJST1JfQ0FVU0VfU0VTU0lPTl9DT05URVhUX05PVF9GT1VORCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRVJST1JfQ0FVU0VfU0VTU0lPTl9DT05URVhUX05PVF9SRU1PVkFCTEUnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0VSUk9SX0NBVVNFX1VOU1VQUE9SVEVEX0FUVFJJQlVURScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRVJST1JfQ0FVU0VfVU5TVVBQT1JURURfRVhDRVBUSU9OJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19FUlJPUl9DQVVTRV9VTlNVUFBPUlRFRF9TRVJWSUNFJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19FVEhFUk5FVCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRklMVEVSX0lEJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19GUkFNRUQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0ZSQU1FRF9BUFBMRVRBTEtfTElOSycgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRlJBTUVEX0FQUExFVEFMS19ORVRXT1JLJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19GUkFNRURfQVBQTEVUQUxLX1pPTkUnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0ZSQU1FRF9DT01QUkVTU0lPTicgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRlJBTUVEX0lOVEVSRkFDRV9JRCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRlJBTUVEX0lQVjZfUE9PTCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRlJBTUVEX0lQVjZfUFJFRklYJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19GUkFNRURfSVBWNl9ST1VURScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRlJBTUVEX0lQWF9ORVRXT1JLJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19GUkFNRURfSVBfQUREUkVTUycgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRlJBTUVEX0lQX05FVE1BU0snID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0ZSQU1FRF9NVFUnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0ZSQU1FRF9QUk9UT0NPTCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfRlJBTUVEX1JPVVRFJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19GUkFNRURfUk9VVElORycgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfR0FOREFMRicgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfR18zX0ZBWCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfSERMQ19DTEVBUl9DSEFOTkVMJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19JRExFX1RJTUVPVVQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0lEU0wnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0lTRE5fQVNZTkNfVjExMCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfSVNETl9BU1lOQ19WMTIwJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19JU0ROX1NZTkMnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0xPR0lOJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19MT0dJTl9JUFY2X0hPU1QnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0xPR0lOX0lQX0hPU1QnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0xPR0lOX0xBVF9HUk9VUCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTE9HSU5fTEFUX05PREUnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX0xPR0lOX0xBVF9QT1JUJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19MT0dJTl9MQVRfU0VSVklDRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTE9HSU5fU0VSVklDRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTE9HSU5fVENQX1BPUlQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19BQ0NUX0FVVEhfVFlQRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTUlDUk9TT0ZUX01TX0FDQ1RfRUFQX1RZUEUnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19BUkFQX0NIQUxMRU5HRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTUlDUk9TT0ZUX01TX0FSQVBfUEFTU1dPUkRfQ0hBTkdFX1JFQVNPTicgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTUlDUk9TT0ZUX01TX0JBUF9VU0FHRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTUlDUk9TT0ZUX01TX0NIQVAyX1BXJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19NSUNST1NPRlRfTVNfQ0hBUDJfUkVTUE9OU0UnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19DSEFQMl9TVUNDRVNTJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19NSUNST1NPRlRfTVNfQ0hBUF9DSEFMTEVOR0UnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19DSEFQX0RPTUFJTicgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTUlDUk9TT0ZUX01TX0NIQVBfRVJST1InID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19DSEFQX0xNX0VOQ19QVycgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTUlDUk9TT0ZUX01TX0NIQVBfTVBQRV9LRVlTJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19NSUNST1NPRlRfTVNfQ0hBUF9OVF9FTkNfUFcnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19DSEFQX1BXXzEnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19DSEFQX1BXXzInID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19DSEFQX1JFU1BPTlNFJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19NSUNST1NPRlRfTVNfRklMVEVSJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19NSUNST1NPRlRfTVNfTElOS19EUk9QX1RJTUVfTElNSVQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19MSU5LX1VUSUxJWkFUSU9OX1RIUkVTSE9MRCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTUlDUk9TT0ZUX01TX01QUEVfRU5DUllQVElPTl9QT0xJQ1knID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19NUFBFX0VOQ1JZUFRJT05fVFlQRVMnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19NUFBFX1JFQ1ZfS0VZJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19NSUNST1NPRlRfTVNfTVBQRV9TRU5EX0tFWScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTUlDUk9TT0ZUX01TX05FV19BUkFQX1BBU1NXT1JEJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19NSUNST1NPRlRfTVNfT0xEX0FSQVBfUEFTU1dPUkQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19QUklNQVJZX0ROU19TRVJWRVInID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19QUklNQVJZX05CTlNfU0VSVkVSJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19NSUNST1NPRlRfTVNfUkFTX1ZFTkRPUicgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTUlDUk9TT0ZUX01TX1JBU19WRVJTSU9OJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19NSUNST1NPRlRfTVNfU0VDT05EQVJZX0ROU19TRVJWRVInID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01JQ1JPU09GVF9NU19TRUNPTkRBUllfTkJOU19TRVJWRVInID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX01QUEVfS0VZX0xFTicgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTkFTX0lERU5USUZJRVInID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX05BU19JUFY2X0FERFJFU1MnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX05BU19JUF9BRERSRVNTJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19OQVNfUE9SVCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTkFTX1BPUlRfVFlQRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfTkFTX1BST01QVCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfT1BUSU9OX05PTkUnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX09QVElPTl9TQUxUJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19PUFRJT05fVEFHR0VEJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19PVVRCT1VORCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfUElBRlMnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1BPUlRfTElNSVQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1BQUCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfUFJPWFlfU1RBVEUnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1JFUExZX01FU1NBR0UnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1NEU0wnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1NFUlZJQ0VfVFlQRScgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfU0VTU0lPTl9USU1FT1VUJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19TTElQJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19TVEFSVCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfU1RBVEUnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1NUT1AnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1NZTkMnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1RFUk1JTkFUSU9OX0FDVElPTicgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfVEVSTV9BRE1JTl9SRUJPT1QnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1RFUk1fQURNSU5fUkVTRVQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1RFUk1fQ0FMTEJBQ0snID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1RFUk1fSE9TVF9SRVFVRVNUJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19URVJNX0lETEVfVElNRU9VVCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfVEVSTV9MT1NUX0NBUlJJRVInID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1RFUk1fTE9TVF9TRVJWSUNFJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19URVJNX05BU19FUlJPUicgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfVEVSTV9OQVNfUkVCT09UJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19URVJNX05BU19SRVFVRVNUJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19URVJNX1BPUlRfRVJST1InID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1RFUk1fUE9SVF9QUkVFTVBURUQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1RFUk1fUE9SVF9TVVNQRU5ERUQnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1RFUk1fUE9SVF9VTk5FRURFRCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfVEVSTV9TRVJWSUNFX1VOQVZBSUxBQkxFJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19URVJNX1NFU1NJT05fVElNRU9VVCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfVEVSTV9VU0VSX0VSUk9SJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19URVJNX1VTRVJfUkVRVUVTVCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfVVNFUl9OQU1FJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19VU0VSX1BBU1NXT1JEJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19WRU5ET1JfTUlDUk9TT0ZUJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19WRU5ET1JfU1BFQ0lGSUMnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1ZJUlRVQUwnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1dJUkVMRVNTX0lFRUVfODAyXzExJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JBRElVU19XSVJFTEVTU19PVEhFUicgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfWERTTCcgPT4gJ3JhZGl1cy9yYWRpdXMuc3R1YicsICdSQURJVVNfWFlMT0dJQ1MnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1hfMjUnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVVTX1hfNzUnID0+ICdyYWRpdXMvcmFkaXVzLnN0dWInLCAnUkFESVhDSEFSJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1JBRF9PUFRJT05fVEFHJyA9PiAncmFkaXVzL3JhZGl1cy5zdHViJywgJ1JEX0tBRktBX0JVSUxEX1ZFUlNJT04nID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX0NPTkZfSU5WQUxJRCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfQ09ORl9PSycgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfQ09ORl9VTktOT1dOJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9DT05TVU1FUicgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfTE9HX1BSSU5UJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9MT0dfU1lTTE9HJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9MT0dfU1lTTE9HX1BSSU5UJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9NU0dfRl9CTE9DSycgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfTVNHX1BBUlRJVElPTkVSX0NPTlNJU1RFTlQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX01TR19QQVJUSVRJT05FUl9DT05TSVNURU5UX1JBTkRPTScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfTVNHX1BBUlRJVElPTkVSX01VUk1VUjInID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX01TR19QQVJUSVRJT05FUl9NVVJNVVIyX1JBTkRPTScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfTVNHX1BBUlRJVElPTkVSX1JBTkRPTScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfT0ZGU0VUX0JFR0lOTklORycgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfT0ZGU0VUX0VORCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfT0ZGU0VUX0lOVkFMSUQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX09GRlNFVF9TVE9SRUQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1BBUlRJVElPTl9VQScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUFJPRFVDRVInID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1BVUkdFX0ZfSU5GTElHSFQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1BVUkdFX0ZfTk9OX0JMT0NLSU5HJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9QVVJHRV9GX1FVRVVFJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9CUk9LRVJfTk9UX0FWQUlMQUJMRScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfQ0xVU1RFUl9BVVRIT1JJWkFUSU9OX0ZBSUxFRCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfQ09OQ1VSUkVOVF9UUkFOU0FDVElPTlMnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0NPT1JESU5BVE9SX0xPQURfSU5fUFJPR1JFU1MnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0NPT1JESU5BVE9SX05PVF9BVkFJTEFCTEUnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0RFTEVHQVRJT05fVE9LRU5fQVVUSE9SSVpBVElPTl9GQUlMRUQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0RFTEVHQVRJT05fVE9LRU5fQVVUSF9ESVNBQkxFRCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfREVMRUdBVElPTl9UT0tFTl9FWFBJUkVEJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9ERUxFR0FUSU9OX1RPS0VOX05PVF9GT1VORCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfREVMRUdBVElPTl9UT0tFTl9PV05FUl9NSVNNQVRDSCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfREVMRUdBVElPTl9UT0tFTl9SRVFVRVNUX05PVF9BTExPV0VEJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9EVVBMSUNBVEVfUkVTT1VSQ0UnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0RVUExJQ0FURV9TRVFVRU5DRV9OVU1CRVInID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0VMRUNUSU9OX05PVF9ORUVERUQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0VMSUdJQkxFX0xFQURFUlNfTk9UX0FWQUlMQUJMRScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfRkVBVFVSRV9VUERBVEVfRkFJTEVEJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9GRU5DRURfSU5TVEFOQ0VfSUQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0ZFTkNFRF9MRUFERVJfRVBPQ0gnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0ZFVENIX1NFU1NJT05fSURfTk9UX0ZPVU5EJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9HUk9VUF9BVVRIT1JJWkFUSU9OX0ZBSUxFRCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfR1JPVVBfQ09PUkRJTkFUT1JfTk9UX0FWQUlMQUJMRScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfR1JPVVBfSURfTk9UX0ZPVU5EJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9HUk9VUF9MT0FEX0lOX1BST0dSRVNTJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9HUk9VUF9NQVhfU0laRV9SRUFDSEVEJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9HUk9VUF9TVUJTQ1JJQkVEX1RPX1RPUElDJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9JTExFR0FMX0dFTkVSQVRJT04nID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0lMTEVHQUxfU0FTTF9TVEFURScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfSU5DT05TSVNURU5UX0dST1VQX1BST1RPQ09MJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9JTkNPTlNJU1RFTlRfVk9URVJfU0VUJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9JTlZBTElEX0NPTU1JVF9PRkZTRVRfU0laRScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfSU5WQUxJRF9DT05GSUcnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0lOVkFMSURfRkVUQ0hfU0VTU0lPTl9FUE9DSCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfSU5WQUxJRF9HUk9VUF9JRCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfSU5WQUxJRF9NU0cnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0lOVkFMSURfTVNHX1NJWkUnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0lOVkFMSURfUEFSVElUSU9OUycgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfSU5WQUxJRF9QUklOQ0lQQUxfVFlQRScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfSU5WQUxJRF9QUk9EVUNFUl9FUE9DSCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfSU5WQUxJRF9QUk9EVUNFUl9JRF9NQVBQSU5HJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9JTlZBTElEX1JFQ09SRCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfSU5WQUxJRF9SRVBMSUNBVElPTl9GQUNUT1InID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0lOVkFMSURfUkVQTElDQV9BU1NJR05NRU5UJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9JTlZBTElEX1JFUVVFU1QnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0lOVkFMSURfUkVRVUlSRURfQUNLUycgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfSU5WQUxJRF9TRVNTSU9OX1RJTUVPVVQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0lOVkFMSURfVElNRVNUQU1QJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9JTlZBTElEX1RSQU5TQUNUSU9OX1RJTUVPVVQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX0lOVkFMSURfVFhOX1NUQVRFJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9JTlZBTElEX1VQREFURV9WRVJTSU9OJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9LQUZLQV9TVE9SQUdFX0VSUk9SJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9MRUFERVJfTk9UX0FWQUlMQUJMRScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfTElTVEVORVJfTk9UX0ZPVU5EJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9MT0dfRElSX05PVF9GT1VORCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfTUVNQkVSX0lEX1JFUVVJUkVEJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9NU0dfU0laRV9UT09fTEFSR0UnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX05FVFdPUktfRVhDRVBUSU9OJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9OT05fRU1QVFlfR1JPVVAnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX05PVF9DT05UUk9MTEVSJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9OT1RfQ09PUkRJTkFUT1InID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX05PVF9DT09SRElOQVRPUl9GT1JfR1JPVVAnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX05PVF9FTk9VR0hfUkVQTElDQVMnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX05PVF9FTk9VR0hfUkVQTElDQVNfQUZURVJfQVBQRU5EJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9OT1RfTEVBREVSX0ZPUl9QQVJUSVRJT04nID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX05PX0VSUk9SJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9OT19SRUFTU0lHTk1FTlRfSU5fUFJPR1JFU1MnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX09GRlNFVF9NRVRBREFUQV9UT09fTEFSR0UnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX09GRlNFVF9OT1RfQVZBSUxBQkxFJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9PRkZTRVRfT1VUX09GX1JBTkdFJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9PUEVSQVRJT05fTk9UX0FUVEVNUFRFRCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfT1VUX09GX09SREVSX1NFUVVFTkNFX05VTUJFUicgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfUE9MSUNZX1ZJT0xBVElPTicgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfUFJFRkVSUkVEX0xFQURFUl9OT1RfQVZBSUxBQkxFJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9QUklOQ0lQQUxfREVTRVJJQUxJWkFUSU9OX0ZBSUxVUkUnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX1BST0RVQ0VSX0ZFTkNFRCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfUkVBU1NJR05NRU5UX0lOX1BST0dSRVNTJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9SRUJBTEFOQ0VfSU5fUFJPR1JFU1MnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX1JFQ09SRF9MSVNUX1RPT19MQVJHRScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfUkVQTElDQV9OT1RfQVZBSUxBQkxFJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9SRVFVRVNUX1RJTUVEX09VVCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfUkVTT1VSQ0VfTk9UX0ZPVU5EJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9TQVNMX0FVVEhFTlRJQ0FUSU9OX0ZBSUxFRCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfU0VDVVJJVFlfRElTQUJMRUQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX1NUQUxFX0JST0tFUl9FUE9DSCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfU1RBTEVfQ1RSTF9FUE9DSCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfVEhST1RUTElOR19RVU9UQV9FWENFRURFRCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfVE9QSUNfQUxSRUFEWV9FWElTVFMnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX1RPUElDX0FVVEhPUklaQVRJT05fRkFJTEVEJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9UT1BJQ19ERUxFVElPTl9ESVNBQkxFRCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfVE9QSUNfRVhDRVBUSU9OJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9UUkFOU0FDVElPTkFMX0lEX0FVVEhPUklaQVRJT05fRkFJTEVEJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9UUkFOU0FDVElPTl9DT09SRElOQVRPUl9GRU5DRUQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX1VOQUNDRVBUQUJMRV9DUkVERU5USUFMJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9VTktOT1dOJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9VTktOT1dOX0xFQURFUl9FUE9DSCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfVU5LTk9XTl9NRU1CRVJfSUQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX1VOS05PV05fUFJPRFVDRVJfSUQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX1VOS05PV05fVE9QSUNfT1JfUEFSVCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfVU5TVEFCTEVfT0ZGU0VUX0NPTU1JVCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfVU5TVVBQT1JURURfQ09NUFJFU1NJT05fVFlQRScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfVU5TVVBQT1JURURfRk9SX01FU1NBR0VfRk9STUFUJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9VTlNVUFBPUlRFRF9TQVNMX01FQ0hBTklTTScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfVU5TVVBQT1JURURfVkVSU0lPTicgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX0FMTF9CUk9LRVJTX0RPV04nID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19BUFBMSUNBVElPTicgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX0FTU0lHTk1FTlRfTE9TVCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX0FTU0lHTl9QQVJUSVRJT05TJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fQVVUSEVOVElDQVRJT04nID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19BVVRPX09GRlNFVF9SRVNFVCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX0JBRF9DT01QUkVTU0lPTicgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX0JBRF9NU0cnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19CRUdJTicgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX0NPTkZMSUNUJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fQ1JJVF9TWVNfUkVTT1VSQ0UnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19ERVNUUk9ZJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fRU5EJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fRVhJU1RJTkdfU1VCU0NSSVBUSU9OJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fRkFJTCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX0ZBVEFMJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fRkVOQ0VEJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fRlMnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19HQVBMRVNTX0dVQVJBTlRFRScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX0lOQ09OU0lTVEVOVCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX0lOVFInID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19JTlZBTElEX0FSRycgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX0lOVkFMSURfVFlQRScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX0lOX1BST0dSRVNTJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fSVNSX0lOU1VGRicgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX0tFWV9ERVNFUklBTElaQVRJT04nID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19LRVlfU0VSSUFMSVpBVElPTicgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX01BWF9QT0xMX0VYQ0VFREVEJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fTVNHX1RJTUVEX09VVCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX05PREVfVVBEQVRFJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fTk9FTlQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19OT09QJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fTk9UX0NPTkZJR1VSRUQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19OT1RfSU1QTEVNRU5URUQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19OT19PRkZTRVQnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19PVVREQVRFRCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX1BBUlRJQUwnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19QQVJUSVRJT05fRU9GJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fUFJFVl9JTl9QUk9HUkVTUycgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX1BVUkdFX0lORkxJR0hUJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fUFVSR0VfUVVFVUUnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19RVUVVRV9GVUxMJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fUkVBRF9PTkxZJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fUkVTT0xWRScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX1JFVFJZJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fUkVWT0tFX1BBUlRJVElPTlMnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19TU0wnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19TVEFURScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX1RJTUVEX09VVCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX1RJTUVEX09VVF9RVUVVRScgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX1RSQU5TUE9SVCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX1VOREVSRkxPVycgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX1VOS05PV05fQlJPS0VSJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fVU5LTk9XTl9HUk9VUCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX1VOS05PV05fUEFSVElUSU9OJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fVU5LTk9XTl9QUk9UT0NPTCcgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX1VOS05PV05fVE9QSUMnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19VTlNVUFBPUlRFRF9GRUFUVVJFJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fVkFMVUVfREVTRVJJQUxJWkFUSU9OJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9SRVNQX0VSUl9fVkFMVUVfU0VSSUFMSVpBVElPTicgPT4gJ3Jka2Fma2EvY29uc3RhbnRzLnN0dWInLCAnUkRfS0FGS0FfUkVTUF9FUlJfX1dBSVRfQ0FDSEUnID0+ICdyZGthZmthL2NvbnN0YW50cy5zdHViJywgJ1JEX0tBRktBX1JFU1BfRVJSX19XQUlUX0NPT1JEJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRF9LQUZLQV9WRVJTSU9OJyA9PiAncmRrYWZrYS9jb25zdGFudHMuc3R1YicsICdSRUFETElORV9MSUInID0+ICdyZWFkbGluZS9yZWFkbGluZS5zdHViJywgJ1JFRCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdSUE1NSVJFX0RFRkFVTFQnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1NSVJFX0dMT0InID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1NSVJFX1JFR0VYJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNTUlSRV9TVFJDTVAnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1TRU5TRV9BTlknID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1TRU5TRV9DT05GSUcnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1TRU5TRV9FUVVBTCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVNFTlNFX0ZJTkRfUFJPVklERVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1TRU5TRV9GSU5EX1JFUVVJUkVTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNU0VOU0VfR1JFQVRFUicgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVNFTlNFX0lOVEVSUCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVNFTlNFX0tFWVJJTkcnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1TRU5TRV9MRVNTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNU0VOU0VfTUlTU0lOR09LJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNU0VOU0VfUE9TVFRSQU5TJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNU0VOU0VfUFJFUkVRJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNU0VOU0VfUFJFVFJBTlMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1TRU5TRV9SUE1MSUInID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1TRU5TRV9TQ1JJUFRfUE9TVCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVNFTlNFX1NDUklQVF9QT1NUVU4nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1TRU5TRV9TQ1JJUFRfUFJFJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNU0VOU0VfU0NSSVBUX1BSRVVOJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNU0VOU0VfU0NSSVBUX1ZFUklGWScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVNFTlNFX1RSSUdHRVJJTicgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVNFTlNFX1RSSUdHRVJQT1NUVU4nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1TRU5TRV9UUklHR0VSUFJFSU4nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1TRU5TRV9UUklHR0VSVU4nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfQVJDSCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19BUkNISVZFU0laRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19CQVNFTkFNRVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfQlVHVVJMJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0JVSUxEQVJDSFMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfQlVJTERIT1NUJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0JVSUxEVElNRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19DJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0NIQU5HRUxPR05BTUUnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfQ0hBTkdFTE9HVEVYVCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19DSEFOR0VMT0dUSU1FJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0NMQVNTRElDVCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19DT05GTElDVEZMQUdTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0NPTkZMSUNUTkFNRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19DT05GTElDVE5FVlJTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0NPTkZMSUNUUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19DT05GTElDVFZFUlNJT04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfQ09PS0lFJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0RCSU5TVEFOQ0UnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfREVQRU5EU0RJQ1QnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfREVTQ1JJUFRJT04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRElSSU5ERVhFUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19ESVJOQU1FUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19ESVNUUklCVVRJT04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRElTVFRBRycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19ESVNUVVJMJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0RTQUhFQURFUicgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19FJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0VOQ09ESU5HJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0VOSEFOQ0VGTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19FTkhBTkNFTkFNRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19FTkhBTkNFTkVWUlMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRU5IQU5DRVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRU5IQU5DRVZFUlNJT04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRVBPQ0gnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRVBPQ0hOVU0nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRVZSJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0VYQ0xVREVBUkNIJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0VYQ0xVREVPUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19FWENMVVNJVkVBUkNIJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0VYQ0xVU0lWRU9TJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVDQVBTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVDTEFTUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GSUxFQ09MT1JTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVDT05URVhUUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GSUxFREVQRU5EU04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRklMRURFUEVORFNYJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVERVZJQ0VTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVESUdFU1RBTEdPJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVESUdFU1RTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVGTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GSUxFR1JPVVBOQU1FJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVJTk9ERVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRklMRUxBTkdTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVMSU5LVE9TJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVNRDVTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVNT0RFUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GSUxFTVRJTUVTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVOQU1FUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GSUxFTkxJTktTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVQUk9WSURFJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVSREVWUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GSUxFUkVRVUlSRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GSUxFU0lHTkFUVVJFTEVOR1RIJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVTSUdOQVRVUkVTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVTSVpFUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GSUxFU1RBVEVTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVUUklHR0VSQ09ORFMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRklMRVRSSUdHRVJGTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GSUxFVFJJR0dFUklOREVYJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVUUklHR0VSTkFNRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GSUxFVFJJR0dFUlBSSU9SSVRJRVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRklMRVRSSUdHRVJTQ1JJUFRGTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GSUxFVFJJR0dFUlNDUklQVFBST0cnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRklMRVRSSUdHRVJTQ1JJUFRTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVUUklHR0VSVFlQRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GSUxFVFJJR0dFUlZFUlNJT04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfRklMRVVTRVJOQU1FJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0ZJTEVWRVJJRllGTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19GU0NPTlRFWFRTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0dJRicgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19HUk9VUCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19IRFJJRCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19IRUFERVJDT0xPUicgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19IRUFERVJJMThOVEFCTEUnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfSEVBREVSSU1BR0UnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfSEVBREVSSU1NVVRBQkxFJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0hFQURFUlJFR0lPTlMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfSEVBREVSU0lHTkFUVVJFUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19JQ09OJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0lOU1RBTExDT0xPUicgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19JTlNUQUxMVElEJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0lOU1RBTExUSU1FJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0lOU1RGSUxFTkFNRVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfSU5TVFBSRUZJWEVTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0xJQ0VOU0UnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfTE9OR0FSQ0hJVkVTSVpFJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX0xPTkdGSUxFU0laRVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfTE9OR1NJR1NJWkUnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfTE9OR1NJWkUnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfTU9EVUxBUklUWUxBQkVMJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfTkFNRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19ORVZSJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX05FVlJBJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX05PUEFUQ0gnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfTk9TT1VSQ0UnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfTlZSJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX05WUkEnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfTycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19PQlNPTEVURUZMQUdTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX09CU09MRVRFTkFNRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19PQlNPTEVURU5FVlJTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX09CU09MRVRFUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19PQlNPTEVURVZFUlNJT04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfT0xERU5IQU5DRVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfT0xERU5IQU5DRVNGTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19PTERFTkhBTkNFU05BTUUnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfT0xERU5IQU5DRVNWRVJTSU9OJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX09MREZJTEVOQU1FUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19PTERTVUdHRVNUUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19PTERTVUdHRVNUU0ZMQUdTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX09MRFNVR0dFU1RTTkFNRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19PTERTVUdHRVNUU1ZFUlNJT04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfT1BURkxBR1MnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfT1JERVJGTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19PUkRFUk5BTUUnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfT1JERVJWRVJTSU9OJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX09SSUdCQVNFTkFNRVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfT1JJR0RJUklOREVYRVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfT1JJR0RJUk5BTUVTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX09SSUdGSUxFTkFNRVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfT1MnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QQUNLQUdFUicgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QQVRDSCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QQVRDSEVTRkxBR1MnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUEFUQ0hFU05BTUUnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUEFUQ0hFU1ZFUlNJT04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUEFZTE9BRENPTVBSRVNTT1InID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUEFZTE9BRERJR0VTVCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QQVlMT0FERElHRVNUQUxHTycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QQVlMT0FERkxBR1MnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUEFZTE9BREZPUk1BVCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QS0dJRCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QTEFURk9STScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QT0xJQ0lFUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QT0xJQ1lGTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QT0xJQ1lOQU1FUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QT0xJQ1lUWVBFUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QT0xJQ1lUWVBFU0lOREVYRVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUE9TVElOJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1BPU1RJTkZMQUdTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1BPU1RJTlBST0cnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUE9TVFRSQU5TJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1BPU1RUUkFOU0ZMQUdTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1BPU1RUUkFOU1BST0cnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUE9TVFVOJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1BPU1RVTkZMQUdTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1BPU1RVTlBST0cnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUFJFRklYRVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUFJFSU4nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUFJFSU5GTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QUkVJTlBST0cnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUFJFVFJBTlMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUFJFVFJBTlNGTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QUkVUUkFOU1BST0cnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUFJFVU4nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUFJFVU5GTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QUkVVTlBST0cnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUFJPVklERUZMQUdTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1BST1ZJREVOQU1FJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1BST1ZJREVORVZSUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QUk9WSURFUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QUk9WSURFVkVSU0lPTicgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19QVUJLRVlTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1InID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUkVDT01NRU5ERkxBR1MnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUkVDT01NRU5ETkFNRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19SRUNPTU1FTkRORVZSUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19SRUNPTU1FTkRTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1JFQ09NTUVORFZFUlNJT04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUkVDT05URVhUUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19SRUxFQVNFJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1JFTU9WRVRJRCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19SRVFVSVJFRkxBR1MnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUkVRVUlSRU5BTUUnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUkVRVUlSRU5FVlJTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1JFUVVJUkVTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1JFUVVJUkVWRVJTSU9OJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1JQTVZFUlNJT04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfUlNBSEVBREVSJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1NIQTFIRUFERVInID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfU0hBMjU2SEVBREVSJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1NJR0dQRycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19TSUdNRDUnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfU0lHUEdQJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1NJR1NJWkUnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfU0laRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19TT1VSQ0UnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfU09VUkNFUEFDS0FHRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19TT1VSQ0VQS0dJRCcgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19TT1VSQ0VSUE0nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfU1VHR0VTVEZMQUdTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1NVR0dFU1ROQU1FJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1NVR0dFU1RORVZSUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19TVUdHRVNUUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19TVUdHRVNUVkVSU0lPTicgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19TVU1NQVJZJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1NVUFBMRU1FTlRGTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19TVVBQTEVNRU5UTkFNRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19TVVBQTEVNRU5UTkVWUlMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfU1VQUExFTUVOVFMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfU1VQUExFTUVOVFZFUlNJT04nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfVFJBTlNGSUxFVFJJR0dFUkNPTkRTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1RSQU5TRklMRVRSSUdHRVJGTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19UUkFOU0ZJTEVUUklHR0VSSU5ERVgnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfVFJBTlNGSUxFVFJJR0dFUk5BTUUnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfVFJBTlNGSUxFVFJJR0dFUlBSSU9SSVRJRVMnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfVFJBTlNGSUxFVFJJR0dFUlNDUklQVEZMQUdTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1RSQU5TRklMRVRSSUdHRVJTQ1JJUFRQUk9HJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1RSQU5TRklMRVRSSUdHRVJTQ1JJUFRTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1RSQU5TRklMRVRSSUdHRVJUWVBFJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1RSQU5TRklMRVRSSUdHRVJWRVJTSU9OJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1RSSUdHRVJDT05EUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19UUklHR0VSRkxBR1MnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfVFJJR0dFUklOREVYJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1RSSUdHRVJOQU1FJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1RSSUdHRVJTQ1JJUFRGTEFHUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19UUklHR0VSU0NSSVBUUFJPRycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19UUklHR0VSU0NSSVBUUycgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19UUklHR0VSVFlQRScgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19UUklHR0VSVkVSU0lPTicgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19VUkwnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfVicgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19WQ1MnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfVkVORE9SJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1ZFUkJPU0UnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfVkVSSUZZU0NSSVBUJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1ZFUklGWVNDUklQVEZMQUdTJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlBNVEFHX1ZFUklGWVNDUklQVFBST0cnID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1UQUdfVkVSU0lPTicgPT4gJ3JwbWluZm8vcnBtaW5mby5zdHViJywgJ1JQTVRBR19YUE0nID0+ICdycG1pbmZvL3JwbWluZm8uc3R1YicsICdSUE1WRVJTSU9OJyA9PiAncnBtaW5mby9ycG1pbmZvLnN0dWInLCAnUlRGRWRpdEJveCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdSYWRpb0J1dHRvbicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdSZXNpemFibGVXaW5kb3cnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnU0FfQUxMJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnU0FfTUVTU0FHRVMnID0+ICdpbWFwL2ltYXAuc3R1YicsICdTQV9SRUNFTlQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdTQV9VSURORVhUJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnU0FfVUlEVkFMSURJVFknID0+ICdpbWFwL2ltYXAuc3R1YicsICdTQV9VTlNFRU4nID0+ICdpbWFwL2ltYXAuc3R1YicsICdTQ0FORElSX1NPUlRfQVNDRU5ESU5HJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NDQU5ESVJfU09SVF9ERVNDRU5ESU5HJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NDQU5ESVJfU09SVF9OT05FJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NDTV9DUkVERU5USUFMUycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NDTV9SSUdIVFMnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTRUVLX0NVUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTRUVLX0VORCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTRUVLX1NFVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTRUdWX0FDQ0VSUicgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0VHVl9NQVBFUlInID0+ICdwY250bC9wY250bC5zdHViJywgJ1NFX0ZSRUUnID0+ICdpbWFwL2ltYXAuc3R1YicsICdTRV9OT1BSRUZFVENIJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnU0VfVUlEJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnU0lEJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NJR0FCUlQnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR0FMUk0nID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR0JBQlknID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR0JVUycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lHQ0hMRCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lHQ0xEJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdDT05UJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdGUEUnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR0hVUCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lHSUxMJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdJTlQnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR0lPJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdJT1QnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR0tJTEwnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR1BJUEUnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR1BPTEwnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR1BST0YnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR1BXUicgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lHUVVJVCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lHUlRNQVgnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR1JUTUlOJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdTRUdWJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdTVEtGTFQnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR1NUT1AnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR1NZUycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lHVEVSTScgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lHVFJBUCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lHVFNUUCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lHVFRJTicgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lHVFRPVScgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lHVVJHJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdVU1IxJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdVU1IyJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdWVEFMUk0nID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR1dJTkNIJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdYQ1BVJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdYRlNaJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdfQkxPQ0snID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR19ERkwnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR19FUlInID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR19JR04nID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJR19TRVRNQVNLJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSUdfVU5CTE9DSycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lfQVNZTkNJTycgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lfS0VSTkVMJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSV9NRVNHUScgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lfUVVFVUUnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJX1NJR0lPJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdTSV9USU1FUicgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnU0lfVEtJTEwnID0+ICdwY250bC9wY250bC5zdHViJywgJ1NJX1VTRVInID0+ICdwY250bC9wY250bC5zdHViJywgJ1NLRl9BRF9BTFVfWE9SX1gnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTS0ZfQURfQ1BVJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU0tGX0FEX0hBVFlQRScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NLRl9BRF9JRklOREVYJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU0tGX0FEX01BUksnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTS0ZfQURfTUFYJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU0tGX0FEX05MQVRUUicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NLRl9BRF9OTEFUVFJfTkVTVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NLRl9BRF9PRkYnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTS0ZfQURfUEFZX09GRlNFVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NLRl9BRF9QS1RUWVBFJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU0tGX0FEX1BST1RPQ09MJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU0tGX0FEX1FVRVVFJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU0tGX0FEX1JBTkRPTScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NLRl9BRF9SWEhBU0gnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTS0ZfQURfVkxBTl9UQUcnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTS0ZfQURfVkxBTl9UQUdfUFJFU0VOVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NLRl9BRF9WTEFOX1RQSUQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTTk1QX0JJVF9TVFInID0+ICdzbm1wL3NubXAuc3R1YicsICdTTk1QX0NPVU5URVInID0+ICdzbm1wL3NubXAuc3R1YicsICdTTk1QX0NPVU5URVI2NCcgPT4gJ3NubXAvc25tcC5zdHViJywgJ1NOTVBfSU5URUdFUicgPT4gJ3NubXAvc25tcC5zdHViJywgJ1NOTVBfSVBBRERSRVNTJyA9PiAnc25tcC9zbm1wLnN0dWInLCAnU05NUF9OVUxMJyA9PiAnc25tcC9zbm1wLnN0dWInLCAnU05NUF9PQkpFQ1RfSUQnID0+ICdzbm1wL3NubXAuc3R1YicsICdTTk1QX09DVEVUX1NUUicgPT4gJ3NubXAvc25tcC5zdHViJywgJ1NOTVBfT0lEX09VVFBVVF9GVUxMJyA9PiAnc25tcC9zbm1wLnN0dWInLCAnU05NUF9PSURfT1VUUFVUX01PRFVMRScgPT4gJ3NubXAvc25tcC5zdHViJywgJ1NOTVBfT0lEX09VVFBVVF9OT05FJyA9PiAnc25tcC9zbm1wLnN0dWInLCAnU05NUF9PSURfT1VUUFVUX05VTUVSSUMnID0+ICdzbm1wL3NubXAuc3R1YicsICdTTk1QX09JRF9PVVRQVVRfU1VGRklYJyA9PiAnc25tcC9zbm1wLnN0dWInLCAnU05NUF9PSURfT1VUUFVUX1VDRCcgPT4gJ3NubXAvc25tcC5zdHViJywgJ1NOTVBfT1BBUVVFJyA9PiAnc25tcC9zbm1wLnN0dWInLCAnU05NUF9USU1FVElDS1MnID0+ICdzbm1wL3NubXAuc3R1YicsICdTTk1QX1VJTlRFR0VSJyA9PiAnc25tcC9zbm1wLnN0dWInLCAnU05NUF9VTlNJR05FRCcgPT4gJ3NubXAvc25tcC5zdHViJywgJ1NOTVBfVkFMVUVfTElCUkFSWScgPT4gJ3NubXAvc25tcC5zdHViJywgJ1NOTVBfVkFMVUVfT0JKRUNUJyA9PiAnc25tcC9zbm1wLnN0dWInLCAnU05NUF9WQUxVRV9QTEFJTicgPT4gJ3NubXAvc25tcC5zdHViJywgJ1NPQVBfMV8xJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnU09BUF8xXzInID0+ICdzb2FwL3NvYXAuc3R1YicsICdTT0FQX0FDVE9SX05FWFQnID0+ICdzb2FwL3NvYXAuc3R1YicsICdTT0FQX0FDVE9SX05PTkUnID0+ICdzb2FwL3NvYXAuc3R1YicsICdTT0FQX0FDVE9SX1VOTElNQVRFUkVDRUlWRVInID0+ICdzb2FwL3NvYXAuc3R1YicsICdTT0FQX0FVVEhFTlRJQ0FUSU9OX0JBU0lDJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnU09BUF9BVVRIRU5USUNBVElPTl9ESUdFU1QnID0+ICdzb2FwL3NvYXAuc3R1YicsICdTT0FQX0NPTVBSRVNTSU9OX0FDQ0VQVCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NPQVBfQ09NUFJFU1NJT05fREVGTEFURScgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NPQVBfQ09NUFJFU1NJT05fR1pJUCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NPQVBfRE9DVU1FTlQnID0+ICdzb2FwL3NvYXAuc3R1YicsICdTT0FQX0VOQ09ERUQnID0+ICdzb2FwL3NvYXAuc3R1YicsICdTT0FQX0VOQ19BUlJBWScgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NPQVBfRU5DX09CSkVDVCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NPQVBfRlVOQ1RJT05TX0FMTCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NPQVBfTElURVJBTCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NPQVBfUEVSU0lTVEVOQ0VfUkVRVUVTVCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NPQVBfUEVSU0lTVEVOQ0VfU0VTU0lPTicgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NPQVBfUlBDJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnU09BUF9TSU5HTEVfRUxFTUVOVF9BUlJBWVMnID0+ICdzb2FwL3NvYXAuc3R1YicsICdTT0FQX1NTTF9NRVRIT0RfU1NMdjInID0+ICdzb2FwL3NvYXAuc3R1YicsICdTT0FQX1NTTF9NRVRIT0RfU1NMdjIzJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnU09BUF9TU0xfTUVUSE9EX1NTTHYzJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnU09BUF9TU0xfTUVUSE9EX1RMUycgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1NPQVBfVVNFX1hTSV9BUlJBWV9UWVBFJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnU09BUF9XQUlUX09ORV9XQVlfQ0FMTFMnID0+ICdzb2FwL3NvYXAuc3R1YicsICdTT0NLRVRfRTJCSUcnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUFDQ0VTJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VBRERSSU5VU0UnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUFERFJOT1RBVkFJTCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FQURWJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VBRk5PU1VQUE9SVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FQUdBSU4nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUFMUkVBRFknID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUJBREUnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUJBREYnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUJBREZEJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VCQURNU0cnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUJBRFInID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUJBRFJRQycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FQkFEU0xUJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VCVVNZJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VDQU5DRUxFRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTT0NLRVRfRUNIUk5HJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VDT01NJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VDT05OQUJPUlRFRCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FQ09OTlJFRlVTRUQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUNPTk5SRVNFVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FREVTVEFERFJSRVEnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRURJU0NPTicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FRFFVT1QnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUVYSVNUJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VGQVVMVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FSE9TVERPV04nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUhPU1RVTlJFQUNIJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VJRFJNJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VJTlBST0dSRVNTJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VJTlRSJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VJTlZBTCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FSU8nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUlTQ09OTicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FSVNESVInID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUlTTkFNJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VMMkhMVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTDJOU1lOQycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTDNITFQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRUwzUlNUJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VMTlJORycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTE9PUCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTUVESVVNVFlQRScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTUZJTEUnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRU1MSU5LJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VNU0dTSVpFJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VNVUxUSUhPUCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTkFNRVRPT0xPTkcnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRU5FVERPV04nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRU5FVFJFU0VUJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VORVRVTlJFQUNIJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VORklMRScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTk9BTk8nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRU5PQlVGUycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTk9DU0knID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRU5PREFUQScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTk9ERVYnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRU5PRU5UJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VOT0xDSycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTk9MSU5LJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VOT01FRElVTScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTk9NRU0nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRU5PTVNHJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VOT05FVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTk9QUk9UT09QVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTk9TUEMnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRU5PU1InID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRU5PU1RSJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VOT1NZUycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTk9UQkxLJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VOT1RDT05OJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VOT1RESVInID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRU5PVEVNUFRZJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VOT1RTT0NLJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VOT1RUWScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTk9UVU5JUScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FTlhJTycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FT1BOT1RTVVBQJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VQRVJNJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VQRk5PU1VQUE9SVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FUElQRScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FUFJPQ0xJTScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FUFJPVE8nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRVBST1RPTk9TVVBQT1JUJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VQUk9UT1RZUEUnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRVJFTUNIRycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FUkVNT1RFJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VSRU1PVEVJTycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FUkVTVEFSVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FUk9GUycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FU0hVVERPV04nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRVNPQ0tUTk9TVVBQT1JUJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VTUElQRScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FU1JNTlQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRVNUQUxFJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VTVFJQSVBFJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VUSU1FJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0VUSU1FRE9VVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FVE9PTUFOWVJFRlMnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRVVOQVRDSCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9FVVNFUlMnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRVdPVUxEQkxPQ0snID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRVhERVYnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfRVhGVUxMJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX0hPU1RfTk9UX0ZPVU5EJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX05PVElOSVRJQUxJU0VEJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS0VUX05PX0FERFJFU1MnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfTk9fREFUQScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9OT19SRUNPVkVSWScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9TWVNOT1RSRUFEWScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tFVF9UUllfQUdBSU4nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLRVRfVkVSTk9UU1VQUE9SVEVEJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS19DTE9FWEVDJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS19EQ0NQJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS19ER1JBTScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tfTk9OQkxPQ0snID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLX1JBVycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPQ0tfUkRNJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09DS19TRVFQQUNLRVQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0NLX1NUUkVBTScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPRElVTV9CQVNFNjRfVkFSSUFOVF9PUklHSU5BTCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQkFTRTY0X1ZBUklBTlRfT1JJR0lOQUxfTk9fUEFERElORycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQkFTRTY0X1ZBUklBTlRfVVJMU0FGRScgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQkFTRTY0X1ZBUklBTlRfVVJMU0FGRV9OT19QQURESU5HJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fQUVBRF9BRUdJUzEyOExfQUJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bV9kLnN0dWInLCAnU09ESVVNX0NSWVBUT19BRUFEX0FFR0lTMTI4TF9LRVlCWVRFUycgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW1fZC5zdHViJywgJ1NPRElVTV9DUllQVE9fQUVBRF9BRUdJUzEyOExfTlBVQkJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bV9kLnN0dWInLCAnU09ESVVNX0NSWVBUT19BRUFEX0FFR0lTMTI4TF9OU0VDQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtX2Quc3R1YicsICdTT0RJVU1fQ1JZUFRPX0FFQURfQUVHSVMyNTZfQUJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bV9kLnN0dWInLCAnU09ESVVNX0NSWVBUT19BRUFEX0FFR0lTMjU2X0tFWUJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bV9kLnN0dWInLCAnU09ESVVNX0NSWVBUT19BRUFEX0FFR0lTMjU2X05QVUJCWVRFUycgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW1fZC5zdHViJywgJ1NPRElVTV9DUllQVE9fQUVBRF9BRUdJUzI1Nl9OU0VDQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtX2Quc3R1YicsICdTT0RJVU1fQ1JZUFRPX0FFQURfQUVTMjU2R0NNX0FCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX0FFQURfQUVTMjU2R0NNX0tFWUJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fQUVBRF9BRVMyNTZHQ01fTlBVQkJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fQUVBRF9BRVMyNTZHQ01fTlNFQ0JZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0FCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX0FCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX0tFWUJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlBVQkJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlNFQ0JZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0tFWUJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X05QVUJCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9OU0VDQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19BRUFEX1hDSEFDSEEyMFBPTFkxMzA1X0lFVEZfQUJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fQUVBRF9YQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX0tFWUJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fQUVBRF9YQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX05QVUJCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX0FFQURfWENIQUNIQTIwUE9MWTEzMDVfSUVURl9OU0VDQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19BVVRIX0JZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fQVVUSF9LRVlCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX0JPWF9LRVlQQUlSQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19CT1hfTUFDQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19CT1hfTk9OQ0VCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX0JPWF9QVUJMSUNLRVlCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX0JPWF9TRUFMQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19CT1hfU0VDUkVUS0VZQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19CT1hfU0VFREJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fQ09SRV9SSVNUUkVUVE8yNTVfQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19DT1JFX1JJU1RSRVRUTzI1NV9IQVNIQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19DT1JFX1JJU1RSRVRUTzI1NV9OT05SRURVQ0VEU0NBTEFSQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19DT1JFX1JJU1RSRVRUTzI1NV9TQ0FMQVJCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX0dFTkVSSUNIQVNIX0JZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fR0VORVJJQ0hBU0hfQllURVNfTUFYJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fR0VORVJJQ0hBU0hfQllURVNfTUlOJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19HRU5FUklDSEFTSF9LRVlCWVRFU19NQVgnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19HRU5FUklDSEFTSF9LRVlCWVRFU19NSU4nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19LREZfQllURVNfTUFYJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fS0RGX0JZVEVTX01JTicgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX0tERl9DT05URVhUQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19LREZfS0VZQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19LWF9CWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX0tYX0tFWVBBSVJCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX0tYX1BVQkxJQ0tFWUJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fS1hfU0VDUkVUS0VZQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19LWF9TRUVEQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19LWF9TRVNTSU9OS0VZQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19QV0hBU0hfQUxHX0FSR09OMkkxMycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1BXSEFTSF9BTEdfQVJHT04ySUQxMycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1BXSEFTSF9BTEdfREVGQVVMVCcgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1BXSEFTSF9NRU1MSU1JVF9JTlRFUkFDVElWRScgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1BXSEFTSF9NRU1MSU1JVF9NT0RFUkFURScgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1BXSEFTSF9NRU1MSU1JVF9TRU5TSVRJVkUnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19QV0hBU0hfT1BTTElNSVRfSU5URVJBQ1RJVkUnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19QV0hBU0hfT1BTTElNSVRfTU9ERVJBVEUnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19QV0hBU0hfT1BTTElNSVRfU0VOU0lUSVZFJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fUFdIQVNIX1NBTFRCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1BXSEFTSF9TQ1JZUFRTQUxTQTIwOFNIQTI1Nl9NRU1MSU1JVF9JTlRFUkFDVElWRScgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1BXSEFTSF9TQ1JZUFRTQUxTQTIwOFNIQTI1Nl9NRU1MSU1JVF9TRU5TSVRJVkUnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19QV0hBU0hfU0NSWVBUU0FMU0EyMDhTSEEyNTZfT1BTTElNSVRfSU5URVJBQ1RJVkUnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19QV0hBU0hfU0NSWVBUU0FMU0EyMDhTSEEyNTZfT1BTTElNSVRfU0VOU0lUSVZFJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fUFdIQVNIX1NDUllQVFNBTFNBMjA4U0hBMjU2X1NBTFRCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1BXSEFTSF9TQ1JZUFRTQUxTQTIwOFNIQTI1Nl9TVFJQUkVGSVgnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19QV0hBU0hfU1RSUFJFRklYJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fU0NBTEFSTVVMVF9CWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1NDQUxBUk1VTFRfUklTVFJFVFRPMjU1X0JZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fU0NBTEFSTVVMVF9SSVNUUkVUVE8yNTVfU0NBTEFSQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19TQ0FMQVJNVUxUX1NDQUxBUkJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fU0VDUkVUQk9YX0tFWUJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fU0VDUkVUQk9YX01BQ0JZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fU0VDUkVUQk9YX05PTkNFQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19TRUNSRVRTVFJFQU1fWENIQUNIQTIwUE9MWTEzMDVfQUJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fU0VDUkVUU1RSRUFNX1hDSEFDSEEyMFBPTFkxMzA1X0hFQURFUkJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fU0VDUkVUU1RSRUFNX1hDSEFDSEEyMFBPTFkxMzA1X0tFWUJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fU0VDUkVUU1RSRUFNX1hDSEFDSEEyMFBPTFkxMzA1X01FU1NBR0VCWVRFU19NQVgnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19TRUNSRVRTVFJFQU1fWENIQUNIQTIwUE9MWTEzMDVfVEFHX0ZJTkFMJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fU0VDUkVUU1RSRUFNX1hDSEFDSEEyMFBPTFkxMzA1X1RBR19NRVNTQUdFJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fU0VDUkVUU1RSRUFNX1hDSEFDSEEyMFBPTFkxMzA1X1RBR19QVVNIJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fU0VDUkVUU1RSRUFNX1hDSEFDSEEyMFBPTFkxMzA1X1RBR19SRUtFWScgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1NIT1JUSEFTSF9CWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1NIT1JUSEFTSF9LRVlCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1NJR05fQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19TSUdOX0tFWVBBSVJCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1NJR05fUFVCTElDS0VZQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19TSUdOX1NFQ1JFVEtFWUJZVEVTJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9DUllQVE9fU0lHTl9TRUVEQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19TVFJFQU1fS0VZQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19TVFJFQU1fTk9OQ0VCWVRFUycgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fQ1JZUFRPX1NUUkVBTV9YQ0hBQ0hBMjBfS0VZQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0NSWVBUT19TVFJFQU1fWENIQUNIQTIwX05PTkNFQllURVMnID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09ESVVNX0xJQlJBUllfTUFKT1JfVkVSU0lPTicgPT4gJ3NvZGl1bS9zb2RpdW0uc3R1YicsICdTT0RJVU1fTElCUkFSWV9NSU5PUl9WRVJTSU9OJyA9PiAnc29kaXVtL3NvZGl1bS5zdHViJywgJ1NPRElVTV9MSUJSQVJZX1ZFUlNJT04nID0+ICdzb2RpdW0vc29kaXVtLnN0dWInLCAnU09MUl9FWFRFTlNJT05fVkVSU0lPTicgPT4gJ3NvbHIvY29uc3RhbnRzLnN0dWInLCAnU09MUl9NQUpPUl9WRVJTSU9OJyA9PiAnc29sci9jb25zdGFudHMuc3R1YicsICdTT0xSX01JTk9SX1ZFUlNJT04nID0+ICdzb2xyL2NvbnN0YW50cy5zdHViJywgJ1NPTFJfUEFUQ0hfVkVSU0lPTicgPT4gJ3NvbHIvY29uc3RhbnRzLnN0dWInLCAnU09MX1NPQ0tFVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPTF9UQ1AnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT0xfVURQJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09MX1VEUExJVEUnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT01BWENPTk4nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT1JUQVJSSVZBTCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ1NPUlRDQycgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ1NPUlREQVRFJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnU09SVEZST00nID0+ICdpbWFwL2ltYXAuc3R1YicsICdTT1JUU0laRScgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ1NPUlRTVUJKRUNUJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnU09SVFRPJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnU09SVF9BU0MnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU09SVF9ERVNDJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NPUlRfRkxBR19DQVNFJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NPUlRfTE9DQUxFX1NUUklORycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTT1JUX05BVFVSQUwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU09SVF9OVU1FUklDJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NPUlRfUkVHVUxBUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTT1JUX1NUUklORycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTT19BVFRBQ0hfUkVVU0VQT1JUX0NCUEYnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT19CSU5EVE9ERVZJQ0UnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT19CSU5EVE9JRklOREVYJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09fQlBGX0VYVEVOU0lPTlMnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT19CUk9BRENBU1QnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT19ERUJVRycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPX0RFVEFDSF9CUEYnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT19ERVRBQ0hfRklMVEVSJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09fRE9OVFJPVVRFJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09fRVJST1InID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT19GUkVFJyA9PiAnaW1hcC9pbWFwLnN0dWInLCAnU09fSU5DT01JTkdfQ1BVJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09fS0VFUEFMSVZFJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09fTElOR0VSJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09fTUFSSycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPX01FTUlORk8nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT19OT1NFUlZFUicgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ1NPX09PQklOTElORScgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPX1BBU1NDUkVEJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09fUkNWQlVGJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09fUkNWTE9XQVQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT19SQ1ZUSU1FTycgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPX1JFVVNFQUREUicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPX1JFVVNFUE9SVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPX1NOREJVRicgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1NPX1NORExPV0FUJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09fU05EVElNRU8nID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTT19UWVBFJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnU09fWkVST0NPUFknID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdTUUxCSVQnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ1NRTENIQVInID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ1NRTEZMVDQnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ1NRTEZMVDgnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ1NRTEZMVE4nID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ1NRTElOVDEnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ1NRTElOVDInID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ1NRTElOVDQnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ1NRTElURTNfQVNTT0MnID0+ICdzcWxpdGUzL3NxbGl0ZTMuc3R1YicsICdTUUxJVEUzX0JMT0InID0+ICdzcWxpdGUzL3NxbGl0ZTMuc3R1YicsICdTUUxJVEUzX0JPVEgnID0+ICdzcWxpdGUzL3NxbGl0ZTMuc3R1YicsICdTUUxJVEUzX0RFVEVSTUlOSVNUSUMnID0+ICdzcWxpdGUzL3NxbGl0ZTMuc3R1YicsICdTUUxJVEUzX0ZMT0FUJyA9PiAnc3FsaXRlMy9zcWxpdGUzLnN0dWInLCAnU1FMSVRFM19JTlRFR0VSJyA9PiAnc3FsaXRlMy9zcWxpdGUzLnN0dWInLCAnU1FMSVRFM19OVUxMJyA9PiAnc3FsaXRlMy9zcWxpdGUzLnN0dWInLCAnU1FMSVRFM19OVU0nID0+ICdzcWxpdGUzL3NxbGl0ZTMuc3R1YicsICdTUUxJVEUzX09QRU5fQ1JFQVRFJyA9PiAnc3FsaXRlMy9zcWxpdGUzLnN0dWInLCAnU1FMSVRFM19PUEVOX1JFQURPTkxZJyA9PiAnc3FsaXRlMy9zcWxpdGUzLnN0dWInLCAnU1FMSVRFM19PUEVOX1JFQURXUklURScgPT4gJ3NxbGl0ZTMvc3FsaXRlMy5zdHViJywgJ1NRTElURTNfVEVYVCcgPT4gJ3NxbGl0ZTMvc3FsaXRlMy5zdHViJywgJ1NRTElURV9BQk9SVCcgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdTUUxJVEVfQVNTT0MnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMSVRFX0FVVEgnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMSVRFX0JPVEgnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMSVRFX0JVU1knID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMSVRFX0NBTlRPUEVOJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ1NRTElURV9DT05TVFJBSU5UJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ1NRTElURV9DT1JSVVBUJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ1NRTElURV9ET05FJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ1NRTElURV9FTVBUWScgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdTUUxJVEVfRVJST1InID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMSVRFX0ZPUk1BVCcgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdTUUxJVEVfRlVMTCcgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdTUUxJVEVfSU5URVJOQUwnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMSVRFX0lOVEVSUlVQVCcgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdTUUxJVEVfSU9FUlInID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMSVRFX0xPQ0tFRCcgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdTUUxJVEVfTUlTTUFUQ0gnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMSVRFX01JU1VTRScgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdTUUxJVEVfTk9MRlMnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMSVRFX05PTUVNJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ1NRTElURV9OT1RBREInID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMSVRFX05PVEZPVU5EJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ1NRTElURV9OVU0nID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMSVRFX09LJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ1NRTElURV9QRVJNJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ1NRTElURV9QUk9UT0NPTCcgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdTUUxJVEVfUkVBRE9OTFknID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMSVRFX1JPVycgPT4gJ1NRTGl0ZS9TUUxpdGUuc3R1YicsICdTUUxJVEVfU0NIRU1BJyA9PiAnU1FMaXRlL1NRTGl0ZS5zdHViJywgJ1NRTElURV9UT09CSUcnID0+ICdTUUxpdGUvU1FMaXRlLnN0dWInLCAnU1FMU1JWX0NVUlNPUl9DTElFTlRfQlVGRkVSRUQnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX0NVUlNPUl9EWU5BTUlDJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9DVVJTT1JfRk9SV0FSRCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfQ1VSU09SX0tFWVNFVCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfQ1VSU09SX1NUQVRJQycgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfRU5DX0JJTkFSWScgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfRU5DX0NIQVInID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX0VSUl9BTEwnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX0VSUl9FUlJPUlMnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX0VSUl9XQVJOSU5HUycgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfRkVUQ0hfQVNTT0MnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX0ZFVENIX0JPVEgnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX0ZFVENIX05VTUVSSUMnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX0xPR19TRVZFUklUWV9BTEwnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX0xPR19TRVZFUklUWV9FUlJPUicgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfTE9HX1NFVkVSSVRZX05PVElDRScgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfTE9HX1NFVkVSSVRZX1dBUk5JTkcnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX0xPR19TWVNURU1fQUxMJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9MT0dfU1lTVEVNX0NPTk4nID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX0xPR19TWVNURU1fSU5JVCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfTE9HX1NZU1RFTV9PRkYnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX0xPR19TWVNURU1fU1RNVCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfTE9HX1NZU1RFTV9VVElMJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9OVUxMQUJMRV9OTycgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfTlVMTEFCTEVfVU5LTk9XTicgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfTlVMTEFCTEVfWUVTJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9QQVJBTV9JTicgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfUEFSQU1fSU5PVVQnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1BBUkFNX09VVCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfUEhQVFlQRV9EQVRFVElNRScgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfUEhQVFlQRV9GTE9BVCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfUEhQVFlQRV9JTlQnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1BIUFRZUEVfTlVMTCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfU0NST0xMX0FCU09MVVRFJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TQ1JPTExfRklSU1QnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NDUk9MTF9MQVNUJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TQ1JPTExfTkVYVCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfU0NST0xMX1BSSU9SJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TQ1JPTExfUkVMQVRJVkUnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NRTFRZUEVfQklHSU5UJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX0JJVCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfU1FMVFlQRV9DSEFSJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX0RBVEUnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NRTFRZUEVfREFURVRJTUUnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NRTFRZUEVfREFURVRJTUUyJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX0RBVEVUSU1FT0ZGU0VUJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX0RFQ0lNQUwnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NRTFRZUEVfRkxPQVQnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NRTFRZUEVfSU1BR0UnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NRTFRZUEVfSU5UJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX01PTkVZJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX05DSEFSJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX05URVhUJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX05VTUVSSUMnID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NRTFRZUEVfTlZBUkNIQVInID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NRTFRZUEVfUkVBTCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfU1FMVFlQRV9TTUFMTERBVEVUSU1FJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX1NNQUxMSU5UJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX1NNQUxMTU9ORVknID0+ICdzcWxzcnYvc3Fsc3J2LnN0dWInLCAnU1FMU1JWX1NRTFRZUEVfVEVYVCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfU1FMVFlQRV9USU1FJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX1RJTUVTVEFNUCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfU1FMVFlQRV9USU5ZSU5UJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX1VEVCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfU1FMVFlQRV9VTklRVUVJREVOVElGSUVSJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX1ZBUkJJTkFSWScgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfU1FMVFlQRV9WQVJDSEFSJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9TUUxUWVBFX1hNTCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfVFhOX1JFQURfQ09NTUlUVEVEJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFNSVl9UWE5fUkVBRF9VTkNPTU1JVFRFRCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfVFhOX1JFUEVBVEFCTEVfUkVBRCcgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfVFhOX1NFUklBTElaQUJMRScgPT4gJ3NxbHNydi9zcWxzcnYuc3R1YicsICdTUUxTUlZfVFhOX1NOQVBTSE9UJyA9PiAnc3Fsc3J2L3NxbHNydi5zdHViJywgJ1NRTFRFWFQnID0+ICdtc3NxbC9tc3NxbC5zdHViJywgJ1NRTFRfQUZDJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnU1FMVF9BVkMnID0+ICdvY2k4L29jaTguc3R1YicsICdTUUxUX0JET1VCTEUnID0+ICdvY2k4L29jaTguc3R1YicsICdTUUxUX0JGSUxFRScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ1NRTFRfQkZMT0FUJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnU1FMVF9CSU4nID0+ICdvY2k4L29jaTguc3R1YicsICdTUUxUX0JMT0InID0+ICdvY2k4L29jaTguc3R1YicsICdTUUxUX0JPTCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ1NRTFRfQ0ZJTEVFJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnU1FMVF9DSFInID0+ICdvY2k4L29jaTguc3R1YicsICdTUUxUX0NMT0InID0+ICdvY2k4L29jaTguc3R1YicsICdTUUxUX0ZMVCcgPT4gJ29jaTgvb2NpOC5zdHViJywgJ1NRTFRfSU5UJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnU1FMVF9MQkknID0+ICdvY2k4L29jaTguc3R1YicsICdTUUxUX0xORycgPT4gJ29jaTgvb2NpOC5zdHViJywgJ1NRTFRfTFZDJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnU1FMVF9OVFknID0+ICdvY2k4L29jaTguc3R1YicsICdTUUxUX05VTScgPT4gJ29jaTgvb2NpOC5zdHViJywgJ1NRTFRfT0RUJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnU1FMVF9SREQnID0+ICdvY2k4L29jaTguc3R1YicsICdTUUxUX1JTRVQnID0+ICdvY2k4L29jaTguc3R1YicsICdTUUxUX1NUUicgPT4gJ29jaTgvb2NpOC5zdHViJywgJ1NRTFRfVUlOJyA9PiAnb2NpOC9vY2k4LnN0dWInLCAnU1FMVF9WQ1MnID0+ICdvY2k4L29jaTguc3R1YicsICdTUUxWQVJDSEFSJyA9PiAnbXNzcWwvbXNzcWwuc3R1YicsICdTUUxfQkVTVF9ST1dJRCcgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9CSUdJTlQnID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfQklOQVJZJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX0JJVCcgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9DSEFSJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX0NPTkNVUlJFTkNZJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX0NPTkNVUl9MT0NLJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX0NPTkNVUl9SRUFEX09OTFknID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfQ09OQ1VSX1JPV1ZFUicgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9DT05DVVJfVkFMVUVTJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX0NVUlNPUl9EWU5BTUlDJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX0NVUlNPUl9GT1JXQVJEX09OTFknID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfQ1VSU09SX0tFWVNFVF9EUklWRU4nID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfQ1VSU09SX1NUQVRJQycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9DVVJTT1JfVFlQRScgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9DVVJfVVNFX0RSSVZFUicgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9DVVJfVVNFX0lGX05FRURFRCcgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9DVVJfVVNFX09EQkMnID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfREFURScgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9ERUNJTUFMJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX0RPVUJMRScgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9FTlNVUkUnID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfRkVUQ0hfRklSU1QnID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfRkVUQ0hfTkVYVCcgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9GTE9BVCcgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9JTkRFWF9BTEwnID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfSU5ERVhfVU5JUVVFJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX0lOVEVHRVInID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfS0VZU0VUX1NJWkUnID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfTE9OR1ZBUkJJTkFSWScgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9MT05HVkFSQ0hBUicgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9OT19OVUxMUycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9OVUxMQUJMRScgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9OVU1FUklDJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX09EQkNfQ1VSU09SUycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9RVUlDSycgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9SRUFMJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX1JPV1ZFUicgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9TQ09QRV9DVVJST1cnID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfU0NPUEVfU0VTU0lPTicgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9TQ09QRV9UUkFOU0FDVElPTicgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9TTUFMTElOVCcgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9USU1FJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX1RJTUVTVEFNUCcgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9USU5ZSU5UJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX1RZUEVfREFURScgPT4gJ29kYmMvb2RiYy5zdHViJywgJ1NRTF9UWVBFX1RJTUUnID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfVFlQRV9USU1FU1RBTVAnID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfVkFSQklOQVJZJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX1ZBUkNIQVInID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfV0NIQVInID0+ICdvZGJjL29kYmMuc3R1YicsICdTUUxfV0xPTkdWQVJDSEFSJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1FMX1dWQVJDSEFSJyA9PiAnb2RiYy9vZGJjLnN0dWInLCAnU1NIMl9ERUZBVUxUX1RFUk1JTkFMJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnU1NIMl9ERUZBVUxUX1RFUk1fSEVJR0hUJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnU1NIMl9ERUZBVUxUX1RFUk1fVU5JVCcgPT4gJ3NzaDIvc3NoMi5zdHViJywgJ1NTSDJfREVGQVVMVF9URVJNX1dJRFRIJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnU1NIMl9GSU5HRVJQUklOVF9IRVgnID0+ICdzc2gyL3NzaDIuc3R1YicsICdTU0gyX0ZJTkdFUlBSSU5UX01ENScgPT4gJ3NzaDIvc3NoMi5zdHViJywgJ1NTSDJfRklOR0VSUFJJTlRfUkFXJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnU1NIMl9GSU5HRVJQUklOVF9TSEExJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnU1NIMl9QT0xMRVJSJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnU1NIMl9QT0xMRVhUJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnU1NIMl9QT0xMSFVQJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnU1NIMl9QT0xMSU4nID0+ICdzc2gyL3NzaDIuc3R1YicsICdTU0gyX1BPTExOVkFMJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnU1NIMl9QT0xMT1VUJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnU1NIMl9QT0xMX0NIQU5ORUxfQ0xPU0VEJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnU1NIMl9QT0xMX0xJU1RFTkVSX0NMT1NFRCcgPT4gJ3NzaDIvc3NoMi5zdHViJywgJ1NTSDJfUE9MTF9TRVNTSU9OX0NMT1NFRCcgPT4gJ3NzaDIvc3NoMi5zdHViJywgJ1NTSDJfU1RSRUFNX1NUREVSUicgPT4gJ3NzaDIvc3NoMi5zdHViJywgJ1NTSDJfU1RSRUFNX1NURElPJyA9PiAnc3NoMi9zc2gyLnN0dWInLCAnU1NIMl9URVJNX1VOSVRfQ0hBUlMnID0+ICdzc2gyL3NzaDIuc3R1YicsICdTU0gyX1RFUk1fVU5JVF9QSVhFTFMnID0+ICdzc2gyL3NzaDIuc3R1YicsICdTVERFUlInID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1NURElOJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdTVERPVVQnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1NUUkVBTV9CVUZGRVJfRlVMTCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQlVGRkVSX0xJTkUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX0JVRkZFUl9OT05FJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9DQVNUX0FTX1NUUkVBTScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ0FTVF9GT1JfU0VMRUNUJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9DTElFTlRfQVNZTkNfQ09OTkVDVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ0xJRU5UX0NPTk5FQ1QnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX0NMSUVOVF9QRVJTSVNURU5UJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9DUllQVE9fTUVUSE9EX0FOWV9DTElFTlQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX0NSWVBUT19NRVRIT0RfQU5ZX1NFUlZFUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ1JZUFRPX01FVEhPRF9TU0x2MjNfQ0xJRU5UJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9DUllQVE9fTUVUSE9EX1NTTHYyM19TRVJWRVInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX0NSWVBUT19NRVRIT0RfU1NMdjJfQ0xJRU5UJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9DUllQVE9fTUVUSE9EX1NTTHYyX1NFUlZFUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ1JZUFRPX01FVEhPRF9TU0x2M19DTElFTlQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX0NSWVBUT19NRVRIT0RfU1NMdjNfU0VSVkVSJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9DUllQVE9fTUVUSE9EX1RMU19DTElFTlQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX0NSWVBUT19NRVRIT0RfVExTX1NFUlZFUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8wX0NMSUVOVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8wX1NFUlZFUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8xX0NMSUVOVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8xX1NFUlZFUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8yX0NMSUVOVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8yX1NFUlZFUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8zX0NMSUVOVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ1JZUFRPX01FVEhPRF9UTFN2MV8zX1NFUlZFUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ1JZUFRPX1BST1RPX1NTTHYzJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9DUllQVE9fUFJPVE9fVExTdjFfMCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fQ1JZUFRPX1BST1RPX1RMU3YxXzEnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX0NSWVBUT19QUk9UT19UTFN2MV8yJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9DUllQVE9fUFJPVE9fVExTdjFfMycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fRU5GT1JDRV9TQUZFX01PREUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX0ZJTFRFUl9BTEwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX0ZJTFRFUl9SRUFEJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9GSUxURVJfV1JJVEUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX0lHTk9SRV9VUkwnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX0lQUFJPVE9fSUNNUCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fSVBQUk9UT19JUCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fSVBQUk9UT19SQVcnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX0lQUFJPVE9fVENQJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9JUFBST1RPX1VEUCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fSVNfVVJMJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9NRVRBX0FDQ0VTUycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fTUVUQV9HUk9VUCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fTUVUQV9HUk9VUF9OQU1FJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9NRVRBX09XTkVSJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9NRVRBX09XTkVSX05BTUUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX01FVEFfVE9VQ0gnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX01LRElSX1JFQ1VSU0lWRScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fTVVTVF9TRUVLJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9OT1RJRllfQVVUSF9SRVFVSVJFRCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fTk9USUZZX0FVVEhfUkVTVUxUJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9OT1RJRllfQ09NUExFVEVEJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9OT1RJRllfQ09OTkVDVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fTk9USUZZX0ZBSUxVUkUnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX05PVElGWV9GSUxFX1NJWkVfSVMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX05PVElGWV9NSU1FX1RZUEVfSVMnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX05PVElGWV9QUk9HUkVTUycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fTk9USUZZX1JFRElSRUNURUQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX05PVElGWV9SRVNPTFZFJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9OT1RJRllfU0VWRVJJVFlfRVJSJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9OT1RJRllfU0VWRVJJVFlfSU5GTycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fTk9USUZZX1NFVkVSSVRZX1dBUk4nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX09PQicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fT1BUSU9OX0JMT0NLSU5HJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9PUFRJT05fUkVBRF9CVUZGRVInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX09QVElPTl9SRUFEX1RJTUVPVVQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX09QVElPTl9XUklURV9CVUZGRVInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX1BFRUsnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX1BGX0lORVQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX1BGX0lORVQ2JyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9QRl9VTklYJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9SRVBPUlRfRVJST1JTJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9TRVJWRVJfQklORCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fU0VSVkVSX0xJU1RFTicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fU0hVVF9SRCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fU0hVVF9SRFdSJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9TSFVUX1dSJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9TT0NLX0RHUkFNJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9TT0NLX1JBVycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fU09DS19SRE0nID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX1NPQ0tfU0VRUEFDS0VUJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUkVBTV9TT0NLX1NUUkVBTScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fVVJMX1NUQVRfTElOSycgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJFQU1fVVJMX1NUQVRfUVVJRVQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSRUFNX1VTRV9QQVRIJyA9PiAnc3RhbmRhcmQvc3RhbmRhcmRfZGVmaW5lcy5zdHViJywgJ1NUUl9QQURfQk9USCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVFJfUEFEX0xFRlQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnU1RSX1BBRF9SSUdIVCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdTVF9TRVQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdTVF9TSUxFTlQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdTVF9VSUQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdTVUhPU0lOX1BBVENIJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdTVUhPU0lOX1BBVENIX1ZFUlNJT04nID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1NVTkZVTkNTX1JFVF9ET1VCTEUnID0+ICdkYXRlL2RhdGVfZC5zdHViJywgJ1NVTkZVTkNTX1JFVF9TVFJJTkcnID0+ICdkYXRlL2RhdGVfZC5zdHViJywgJ1NVTkZVTkNTX1JFVF9USU1FU1RBTVAnID0+ICdkYXRlL2RhdGVfZC5zdHViJywgJ1NWTl9BTEwnID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX0FVVEhfUEFSQU1fQ09ORklHJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9BVVRIX1BBUkFNX0NPTkZJR19ESVInID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX0FVVEhfUEFSQU1fREVGQVVMVF9QQVNTV09SRCcgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fQVVUSF9QQVJBTV9ERUZBVUxUX1VTRVJOQU1FJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9BVVRIX1BBUkFNX0RPTlRfU1RPUkVfUEFTU1dPUkRTJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9BVVRIX1BBUkFNX05PTl9JTlRFUkFDVElWRScgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fQVVUSF9QQVJBTV9OT19BVVRIX0NBQ0hFJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9BVVRIX1BBUkFNX1NFUlZFUl9HUk9VUCcgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fQVVUSF9QQVJBTV9TU0xfU0VSVkVSX0NFUlRfSU5GTycgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fQVVUSF9QQVJBTV9TU0xfU0VSVkVSX0ZBSUxVUkVTJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9ESVNDT1ZFUl9DSEFOR0VEX1BBVEhTJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9GU19DT05GSUdfRlNfVFlQRScgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fRlNfVFlQRV9CREInID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX0ZTX1RZUEVfRlNGUycgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fTk9ERV9ESVInID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX05PREVfRklMRScgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fTk9ERV9OT05FJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9OT0RFX1VOS05PV04nID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX05PTl9SRUNVUlNJVkUnID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX05PX0lHTk9SRScgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fT01JVF9NRVNTQUdFUycgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fUFJPUF9SRVZJU0lPTl9BVVRIT1InID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX1BST1BfUkVWSVNJT05fREFURScgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fUFJPUF9SRVZJU0lPTl9MT0cnID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX1BST1BfUkVWSVNJT05fT1JJR19EQVRFJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9SRVZJU0lPTl9CQVNFJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9SRVZJU0lPTl9DT01NSVRURUQnID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX1JFVklTSU9OX0hFQUQnID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX1JFVklTSU9OX0lOSVRJQUwnID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX1JFVklTSU9OX1BSRVYnID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX1JFVklTSU9OX1VOU1BFQ0lGSUVEJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9TSE9XX1VQREFURVMnID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX1NUT1BfT05fQ09QWScgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fV0NfU0NIRURVTEVfQUREJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9XQ19TQ0hFRFVMRV9ERUxFVEUnID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX1dDX1NDSEVEVUxFX05PUk1BTCcgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fV0NfU0NIRURVTEVfUkVQTEFDRScgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fV0NfU1RBVFVTX0FEREVEJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9XQ19TVEFUVVNfQ09ORkxJQ1RFRCcgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fV0NfU1RBVFVTX0RFTEVURUQnID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX1dDX1NUQVRVU19FWFRFUk5BTCcgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fV0NfU1RBVFVTX0lHTk9SRUQnID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX1dDX1NUQVRVU19JTkNPTVBMRVRFJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9XQ19TVEFUVVNfTUVSR0VEJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9XQ19TVEFUVVNfTUlTU0lORycgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fV0NfU1RBVFVTX01PRElGSUVEJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NWTl9XQ19TVEFUVVNfTk9ORScgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fV0NfU1RBVFVTX05PUk1BTCcgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fV0NfU1RBVFVTX09CU1RSVUNURUQnID0+ICdzdm4vc3ZuLnN0dWInLCAnU1ZOX1dDX1NUQVRVU19SRVBMQUNFRCcgPT4gJ3N2bi9zdm4uc3R1YicsICdTVk5fV0NfU1RBVFVTX1VOVkVSU0lPTkVEJyA9PiAnc3ZuL3N2bi5zdHViJywgJ1NXRkFDVElPTl9EQVRBJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGQUNUSU9OX0VOVEVSRlJBTUUnID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZBQ1RJT05fS0VZRE9XTicgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkFDVElPTl9LRVlVUCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkFDVElPTl9NT1VTRURPV04nID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZBQ1RJT05fTU9VU0VNT1ZFJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGQUNUSU9OX01PVVNFVVAnID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZBQ1RJT05fT05MT0FEJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGQUNUSU9OX1VOTE9BRCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkJVVFRPTl9ET1dOJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGQlVUVE9OX0RSQUdPVVQnID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZCVVRUT05fRFJBR09WRVInID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZCVVRUT05fSElUJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGQlVUVE9OX01PVVNFRE9XTicgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkJVVFRPTl9NT1VTRU9VVCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkJVVFRPTl9NT1VTRU9WRVInID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZCVVRUT05fTU9VU0VVUCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkJVVFRPTl9NT1VTRVVQT1VUU0lERScgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkJVVFRPTl9PVkVSJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGQlVUVE9OX1VQJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGRklMTF9DTElQUEVEX0JJVE1BUCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRkZJTExfTElORUFSX0dSQURJRU5UJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGRklMTF9SQURJQUxfR1JBRElFTlQnID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZGSUxMX1RJTEVEX0JJVE1BUCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRlRFWFRGSUVMRF9BTElHTl9DRU5URVInID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZURVhURklFTERfQUxJR05fSlVTVElGWScgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRlRFWFRGSUVMRF9BTElHTl9MRUZUJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGVEVYVEZJRUxEX0FMSUdOX1JJR0hUJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGVEVYVEZJRUxEX0FVVE9TSVpFJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGVEVYVEZJRUxEX0RSQVdCT1gnID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZURVhURklFTERfSEFTTEVOR1RIJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGVEVYVEZJRUxEX0hUTUwnID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZURVhURklFTERfTVVMVElMSU5FJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGVEVYVEZJRUxEX05PRURJVCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRlRFWFRGSUVMRF9OT1NFTEVDVCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRlRFWFRGSUVMRF9QQVNTV09SRCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRlRFWFRGSUVMRF9VU0VGT05UJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGVEVYVEZJRUxEX1dPUkRXUkFQJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGX1NPVU5EXzExS0haJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGX1NPVU5EXzE2QklUUycgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRl9TT1VORF8yMktIWicgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRl9TT1VORF80NEtIWicgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRl9TT1VORF81S0haJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGX1NPVU5EXzhCSVRTJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGX1NPVU5EX0FEUENNX0NPTVBSRVNTRUQnID0+ICdtaW5nL21pbmcuc3R1YicsICdTV0ZfU09VTkRfTU9OTycgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRl9TT1VORF9NUDNfQ09NUFJFU1NFRCcgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXRl9TT1VORF9ORUxMWV9DT01QUkVTU0VEJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGX1NPVU5EX05PVF9DT01QUkVTU0VEJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGX1NPVU5EX05PVF9DT01QUkVTU0VEX0xFJyA9PiAnbWluZy9taW5nLnN0dWInLCAnU1dGX1NPVU5EX1NURVJFTycgPT4gJ21pbmcvbWluZy5zdHViJywgJ1NXT09MRV9BU1lOQycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfQkFTRScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfQ0hBTk5FTF9DQU5DRUxFRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfQ0hBTk5FTF9DTE9TRUQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0NIQU5ORUxfT0snID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0NIQU5ORUxfVElNRU9VVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfQ09ST19FTkQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0NPUk9fSU5JVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfQ09ST19NQVhfTlVNX0xJTUlUJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9DT1JPX1JVTk5JTkcnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0NPUk9fV0FJVElORycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfREVCVUcnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0RFRkFVTFRfTUFYX0NPUk9fTlVNJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9ESVNQQVRDSF9DT19DT05OX0xCJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9ESVNQQVRDSF9DT19SRVFfTEInID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0RJU1BBVENIX0ZETU9EJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9ESVNQQVRDSF9JRExFX1dPUktFUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRElTUEFUQ0hfSVBNT0QnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0RJU1BBVENIX1JFU1VMVF9DTE9TRV9DT05ORUNUSU9OJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9ESVNQQVRDSF9SRVNVTFRfRElTQ0FSRF9QQUNLRVQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0RJU1BBVENIX1JFU1VMVF9VU0VSRlVOQ19GQUxMQkFDSycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRElTUEFUQ0hfUk9VTkQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0RJU1BBVENIX1NUUkVBTScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRElTUEFUQ0hfVUlETU9EJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9ESVNQQVRDSF9VU0VSRlVOQycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRFRMU19DTElFTlRfTUVUSE9EJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9EVExTX1NFUlZFUl9NRVRIT0QnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0FJT19CQURfUkVRVUVTVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfQUlPX0NBTkNFTEVEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9BSU9fVElNRU9VVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfQkFEX0lQVjZfQUREUkVTUycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfQ0xJRU5UX05PX0NPTk5FQ1RJT04nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0NPX0JMT0NLX09CSkVDVF9MT0NLRUQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0NPX0JMT0NLX09CSkVDVF9XQUlUSU5HJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9DT19DQU5DRUxFRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfQ09fQ0FOTk9UX0NBTkNFTCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfQ09fRElTQUJMRURfTVVMVElfVEhSRUFEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9DT19HRVRDT05URVhUX0ZBSUxFRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfQ09fSEFTX0JFRU5fQk9VTkQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0NPX0hBU19CRUVOX0RJU0NBUkRFRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfQ09fSU9DUElOSVRfRkFJTEVEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9DT19NQUtFQ09OVEVYVF9GQUlMRUQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0NPX01VVEVYX0RPVUJMRV9VTkxPQ0snID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0NPX05PVF9FWElTVFMnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0NPX09VVF9PRl9DT1JPVVRJTkUnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0NPX1BST1RFQ1RfU1RBQ0tfRkFJTEVEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9DT19TVERfVEhSRUFEX0xJTktfRVJST1InID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0NPX1NXQVBDT05URVhUX0ZBSUxFRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfQ09fVElNRURPVVQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0NPX1lJRUxEX0ZBSUxFRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfREFUQV9MRU5HVEhfVE9PX0xBUkdFJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9ETlNMT09LVVBfRFVQTElDQVRFX1JFUVVFU1QnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0ROU0xPT0tVUF9OT19TRVJWRVInID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0ROU0xPT0tVUF9SRVNPTFZFX0ZBSUxFRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfRE5TTE9PS1VQX1JFU09MVkVfVElNRU9VVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfRE5TTE9PS1VQX1VOU1VQUE9SVEVEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9FVkVOVF9TT0NLRVRfUkVNT1ZFRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfRklMRV9FTVBUWScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfRklMRV9OT1RfRVhJU1QnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0ZJTEVfVE9PX0xBUkdFJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9IVFRQMl9TVFJFQU1fSURfVE9PX0JJRycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfSFRUUDJfU1RSRUFNX0lHTk9SRScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfSFRUUDJfU1RSRUFNX05PVF9GT1VORCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfSFRUUDJfU1RSRUFNX05PX0hFQURFUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfSFRUUF9JTlZBTElEX1BST1RPQ09MJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9IVFRQX1BST1hZX0JBRF9SRVNQT05TRScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfSFRUUF9QUk9YWV9IQU5EU0hBS0VfRVJST1InID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX0hUVFBfUFJPWFlfSEFORFNIQUtFX0ZBSUxFRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfSU5WQUxJRF9QQVJBTVMnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX01BTExPQ19GQUlMJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9OQU1FX1RPT19MT05HJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9PUEVSQVRJT05fTk9UX1NVUFBPUlQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX09VVFBVVF9CVUZGRVJfT1ZFUkZMT1cnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX09VVFBVVF9TRU5EX1lJRUxEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9QQUNLQUdFX0xFTkdUSF9OT1RfRk9VTkQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1BBQ0tBR0VfTEVOR1RIX1RPT19MQVJHRScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfUEFDS0FHRV9NQUxGT1JNRURfREFUQScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfUEhQX0ZBVEFMX0VSUk9SJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9QUk9UT0NPTF9FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfUVVFVUVfRlVMTCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfU0VSVkVSX0NPTk5FQ1RfRkFJTCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfU0VSVkVSX0lOVkFMSURfQ09NTUFORCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfU0VSVkVSX0lOVkFMSURfTElTVEVOX1BPUlQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1NFUlZFUl9JTlZBTElEX1JFUVVFU1QnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1NFUlZFUl9NVVNUX0NSRUFURURfQkVGT1JFX0NMSUVOVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfU0VSVkVSX05PX0lETEVfV09SS0VSJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TRVJWRVJfT05MWV9TVEFSVF9PTkUnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1NFUlZFUl9QSVBFX0JVRkZFUl9GVUxMJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TRVJWRVJfU0VORF9JTl9NQVNURVInID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1NFUlZFUl9UT09fTUFOWV9MSVNURU5fUE9SVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfU0VSVkVSX1RPT19NQU5ZX1NPQ0tFVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfU0VSVkVSX1dPUktFUl9BQk5PUk1BTF9QSVBFX0RBVEEnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1NFUlZFUl9XT1JLRVJfRVhJVF9USU1FT1VUJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TRVJWRVJfV09SS0VSX1RFUk1JTkFURUQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1NFUlZFUl9XT1JLRVJfVU5QUk9DRVNTRURfREFUQScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfU0VTU0lPTl9DTE9TRUQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1NFU1NJT05fQ0xPU0VEX0JZX0NMSUVOVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfU0VTU0lPTl9DTE9TRURfQllfU0VSVkVSJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TRVNTSU9OX0NMT1NJTkcnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1NFU1NJT05fRElTQ0FSRF9EQVRBJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TRVNTSU9OX0RJU0NBUkRfVElNRU9VVF9EQVRBJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TRVNTSU9OX0lOVkFMSURfSUQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1NFU1NJT05fTk9UX0VYSVNUJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TT0NLRVRfQ0xPU0VEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TT0NLRVRfUE9MTF9USU1FT1VUJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TT0NLUzVfQVVUSF9GQUlMRUQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1NPQ0tTNV9IQU5EU0hBS0VfRkFJTEVEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TT0NLUzVfU0VSVkVSX0VSUk9SJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TT0NLUzVfVU5TVVBQT1JUX01FVEhPRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfU09DS1M1X1VOU1VQUE9SVF9WRVJTSU9OJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TU0xfQkFEX0NMSUVOVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfU1NMX0JBRF9QUk9UT0NPTCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfU1NMX0NBTk5PVF9VU0VfU0VORklMRScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfU1NMX0VNUFRZX1BFRVJfQ0VSVElGSUNBVEUnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1NTTF9IQU5EU0hBS0VfRkFJTEVEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TU0xfTk9UX1JFQURZJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TU0xfUkVTRVQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1NTTF9WRVJJRllfRkFJTEVEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9TWVNURU1fQ0FMTF9GQUlMJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9UQVNLX0RJU1BBVENIX0ZBSUwnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1RBU0tfUEFDS0FHRV9UT09fQklHJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9UQVNLX1RJTUVPVVQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1VOUkVHSVNURVJFRF9TSUdOQUwnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1dFQlNPQ0tFVF9CQURfQ0xJRU5UJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9XRUJTT0NLRVRfQkFEX09QQ09ERScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfV0VCU09DS0VUX0hBTkRTSEFLRV9GQUlMRUQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1dFQlNPQ0tFVF9JTkNPTVBMRVRFX1BBQ0tFVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVJST1JfV0VCU09DS0VUX1BBQ0tfRkFJTEVEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9XRUJTT0NLRVRfVU5DT05ORUNURUQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VSUk9SX1dFQlNPQ0tFVF9VTlBBQ0tfRkFJTEVEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FUlJPUl9XUk9OR19PUEVSQVRJT04nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VWRU5UX1JFQUQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VWRU5UX1dSSVRFJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9FWElUX0lOX0NPUk9VVElORScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfRVhJVF9JTl9TRVJWRVInID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0VYVFJBX1ZFUlNJT04nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0ZJTEVMT0NLJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9IQVZFX0JST1RMSScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSEFWRV9DT01QUkVTU0lPTicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSEFWRV9aTElCJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9IT09LX0FMTCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSE9PS19CTE9DS0lOR19GVU5DVElPTicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSE9PS19DVVJMJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9IT09LX0ZJTEUnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hPT0tfTkFUSVZFX0NVUkwnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hPT0tfUFJPQycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSE9PS19TTEVFUCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSE9PS19TT0NLRVRTJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9IT09LX1NTTCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSE9PS19TVERJTycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSE9PS19TVFJFQU1fRlVOQ1RJT04nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hPT0tfU1RSRUFNX1NFTEVDVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSE9PS19UQ1AnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hPT0tfVExTJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9IT09LX1VERycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSE9PS19VRFAnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hPT0tfVU5JWCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUDJfRVJST1JfQ0FOQ0VMJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9IVFRQMl9FUlJPUl9DT01QUkVTU0lPTl9FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUDJfRVJST1JfQ09OTkVDVF9FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUDJfRVJST1JfRU5IQU5DRV9ZT1VSX0NBTE0nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hUVFAyX0VSUk9SX0ZMT1dfQ09OVFJPTF9FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUDJfRVJST1JfRlJBTUVfU0laRV9FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUDJfRVJST1JfSU5BREVRVUFURV9TRUNVUklUWScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUDJfRVJST1JfSU5URVJOQUxfRVJST1InID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hUVFAyX0VSUk9SX05PX0VSUk9SJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9IVFRQMl9FUlJPUl9QUk9UT0NPTF9FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUDJfRVJST1JfUkVGVVNFRF9TVFJFQU0nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hUVFAyX0VSUk9SX1NFVFRJTkdTX1RJTUVPVVQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hUVFAyX0VSUk9SX1NUUkVBTV9DTE9TRUQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hUVFAyX1RZUEVfQ09OVElOVUFUSU9OJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9IVFRQMl9UWVBFX0RBVEEnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hUVFAyX1RZUEVfR09BV0FZJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9IVFRQMl9UWVBFX0hFQURFUlMnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hUVFAyX1RZUEVfUElORycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUDJfVFlQRV9QUklPUklUWScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUDJfVFlQRV9QVVNIX1BST01JU0UnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0hUVFAyX1RZUEVfUlNUX1NUUkVBTScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUDJfVFlQRV9TRVRUSU5HUycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUDJfVFlQRV9XSU5ET1dfVVBEQVRFJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9IVFRQX0NMSUVOVF9FU1RBVFVTX0NPTk5FQ1RfRkFJTEVEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9IVFRQX0NMSUVOVF9FU1RBVFVTX1JFUVVFU1RfVElNRU9VVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUF9DTElFTlRfRVNUQVRVU19TRU5EX0ZBSUxFRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSFRUUF9DTElFTlRfRVNUQVRVU19TRVJWRVJfUkVTRVQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0lPVl9NQVgnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0lQQ19NU0dRVUVVRScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfSVBDX05PTkUnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0lQQ19QUkVFTVBUSVZFJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9JUENfU09DS0VUJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9JUENfVU5JWFNPQ0snID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0lQQ19VTlNPQ0snID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0tFRVAnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0xPR19ERUJVRycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfTE9HX0VSUk9SJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9MT0dfSU5GTycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfTE9HX05PTkUnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0xPR19OT1RJQ0UnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0xPR19ST1RBVElPTl9EQUlMWScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfTE9HX1JPVEFUSU9OX0VWRVJZX01JTlVURScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfTE9HX1JPVEFUSU9OX0hPVVJMWScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfTE9HX1JPVEFUSU9OX01PTlRITFknID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0xPR19ST1RBVElPTl9TSU5HTEUnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX0xPR19UUkFDRScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfTE9HX1dBUk5JTkcnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX01BSk9SX1ZFUlNJT04nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX01JTk9SX1ZFUlNJT04nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX01VVEVYJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9NWVNRTE5EX0NSX0NBTlRfRklORF9DSEFSU0VUJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9NWVNRTE5EX0NSX0NPTU1BTkRTX09VVF9PRl9TWU5DJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9NWVNRTE5EX0NSX0NPTk5FQ1RJT05fRVJST1InID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX01ZU1FMTkRfQ1JfSU5WQUxJRF9CVUZGRVJfVVNFJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9NWVNRTE5EX0NSX0lOVkFMSURfUEFSQU1FVEVSX05PJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9NWVNRTE5EX0NSX01BTEZPUk1FRF9QQUNLRVQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX01ZU1FMTkRfQ1JfTk9UX0lNUExFTUVOVEVEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9NWVNRTE5EX0NSX05PX1BSRVBBUkVfU1RNVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfTVlTUUxORF9DUl9PVVRfT0ZfTUVNT1JZJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9NWVNRTE5EX0NSX1BBUkFNU19OT1RfQk9VTkQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX01ZU1FMTkRfQ1JfU0VSVkVSX0dPTkVfRVJST1InID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX01ZU1FMTkRfQ1JfU0VSVkVSX0xPU1QnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX01ZU1FMTkRfQ1JfVU5LTk9XTl9FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfUFJPQ0VTUycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfUkVESVNfRVJSX0FMTE9DJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9SRURJU19FUlJfQ0xPU0VEJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9SRURJU19FUlJfRU9GJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9SRURJU19FUlJfSU8nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1JFRElTX0VSUl9OT0FVVEgnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1JFRElTX0VSUl9PT00nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1JFRElTX0VSUl9PVEhFUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfUkVESVNfRVJSX1BST1RPQ09MJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9SRURJU19NT0RFX01VTFRJJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9SRURJU19NT0RFX1BJUEVMSU5FJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9SRURJU19UWVBFX0hBU0gnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1JFRElTX1RZUEVfTElTVCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfUkVESVNfVFlQRV9OT1RfRk9VTkQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1JFRElTX1RZUEVfU0VUJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9SRURJU19UWVBFX1NUUklORycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfUkVESVNfVFlQRV9aU0VUJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9SRUxFQVNFX1ZFUlNJT04nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1JXTE9DSycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfU0VNJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9TRVJWRVJfQ09NTUFORF9FVkVOVF9XT1JLRVInID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1NFUlZFUl9DT01NQU5EX01BTkFHRVInID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1NFUlZFUl9DT01NQU5EX01BU1RFUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfU0VSVkVSX0NPTU1BTkRfUkVBQ1RPUl9USFJFQUQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1NFUlZFUl9DT01NQU5EX1RBU0tfV09SS0VSJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9TRVJWRVJfQ09NTUFORF9XT1JLRVInID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1NPQ0tfQVNZTkMnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1NPQ0tfU1lOQycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfU09DS19UQ1AnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1NPQ0tfVENQNicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfU09DS19VRFAnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1NPQ0tfVURQNicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfU09DS19VTklYX0RHUkFNJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9TT0NLX1VOSVhfU1RSRUFNJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9TUElOTE9DSycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfU1NMJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9TU0xfRFRMUycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfU1NMX1NTTHYyJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9TU0xfVExTdjEnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1NTTF9UTFN2MV8xJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9TU0xfVExTdjFfMicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfU1NMX1RMU3YxXzMnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1NTTHYyM19DTElFTlRfTUVUSE9EJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9TU0x2MjNfTUVUSE9EJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9TU0x2MjNfU0VSVkVSX01FVEhPRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfU1NMdjNfQ0xJRU5UX01FVEhPRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfU1NMdjNfTUVUSE9EJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9TU0x2M19TRVJWRVJfTUVUSE9EJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9TVFJFUlJPUl9ETlMnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1NUUkVSUk9SX0dBSScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfU1RSRVJST1JfU1dPT0xFJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9TVFJFUlJPUl9TWVNURU0nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1NZTkMnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RBU0tfQ0FMTEJBQ0snID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RBU0tfQ09ST1VUSU5FJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UQVNLX05PTkJMT0NLJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UQVNLX05PUkVQTFknID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RBU0tfUEVFSycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVEFTS19TRVJJQUxJWkUnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RBU0tfVE1QRklMRScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVEFTS19XQUlUQUxMJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UQ1AnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RDUDYnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RJTUVSX01BWF9NUycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVElNRVJfTUFYX1NFQycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVElNRVJfTUlOX01TJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9USU1FUl9NSU5fU0VDJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UTFNfQ0xJRU5UX01FVEhPRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVExTX01FVEhPRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVExTX1NFUlZFUl9NRVRIT0QnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RMU3YxXzFfQ0xJRU5UX01FVEhPRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVExTdjFfMV9NRVRIT0QnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RMU3YxXzFfU0VSVkVSX01FVEhPRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVExTdjFfMl9DTElFTlRfTUVUSE9EJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UTFN2MV8yX01FVEhPRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVExTdjFfMl9TRVJWRVJfTUVUSE9EJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UTFN2MV9DTElFTlRfTUVUSE9EJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UTFN2MV9NRVRIT0QnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RMU3YxX1NFUlZFUl9NRVRIT0QnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RSQUNFX0FJTycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVFJBQ0VfQUxMJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9CVUZGRVInID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RSQUNFX0NBUkVTJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9DSEFOTkVMJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9DTElFTlQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RSQUNFX0NMT1NFJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9DT05OJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9DT05URVhUJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9DT1JPVVRJTkUnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RSQUNFX0NPX0NVUkwnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RSQUNFX0NPX0hUVFBfU0VSVkVSJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9FT0ZfUFJPVE9DT0wnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RSQUNFX0VWRU5UJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9IVFRQJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9IVFRQMicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVFJBQ0VfSFRUUF9DTElFTlQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RSQUNFX0xFTkdUSF9QUk9UT0NPTCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVFJBQ0VfTUVNT1JZJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9NWVNRTF9DTElFTlQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RSQUNFX05PUk1BTCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVFJBQ0VfUEhQJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9SRUFDVE9SJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9SRURJU19DTElFTlQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RSQUNFX1NFUlZFUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVFJBQ0VfU09DS0VUJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9TU0wnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1RSQUNFX1RBQkxFJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9USU1FUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVFJBQ0VfV0VCU09DS0VUJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9UUkFDRV9XT1JLRVInID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1VEUCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVURQNicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVU5JWF9ER1JBTScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVU5JWF9TVFJFQU0nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1VTRV9IVFRQMicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVVNFX1NIT1JUTkFNRScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVkVSU0lPTicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfVkVSU0lPTl9JRCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX0NMT1NFX0FCTk9STUFMJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9XRUJTT0NLRVRfQ0xPU0VfREFUQV9FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX0NMT1NFX0VYVEVOU0lPTl9NSVNTSU5HJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9XRUJTT0NLRVRfQ0xPU0VfR09JTkdfQVdBWScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX0NMT1NFX01FU1NBR0VfRVJST1InID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1dFQlNPQ0tFVF9DTE9TRV9NRVNTQUdFX1RPT19CSUcnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1dFQlNPQ0tFVF9DTE9TRV9OT1JNQUwnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1dFQlNPQ0tFVF9DTE9TRV9QT0xJQ1lfRVJST1InID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1dFQlNPQ0tFVF9DTE9TRV9QUk9UT0NPTF9FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX0NMT1NFX1NFUlZFUl9FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX0NMT1NFX1NUQVRVU19FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX0NMT1NFX1RMUycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX0ZMQUdfQ09NUFJFU1MnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1dFQlNPQ0tFVF9GTEFHX0ZJTicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX0ZMQUdfTUFTSycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX0ZMQUdfUlNWMScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX0ZMQUdfUlNWMicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX0ZMQUdfUlNWMycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX09QQ09ERV9CSU5BUlknID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1dFQlNPQ0tFVF9PUENPREVfQ0xPU0UnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1dFQlNPQ0tFVF9PUENPREVfQ09OVElOVUFUSU9OJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9XRUJTT0NLRVRfT1BDT0RFX1BJTkcnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1dFQlNPQ0tFVF9PUENPREVfUE9ORycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX09QQ09ERV9URVhUJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9XRUJTT0NLRVRfU1RBVFVTX0FDVElWRScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV0VCU09DS0VUX1NUQVRVU19DTE9TSU5HJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9XRUJTT0NLRVRfU1RBVFVTX0NPTk5FQ1RJT04nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1dFQlNPQ0tFVF9TVEFUVVNfSEFORFNIQUtFJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NXT09MRV9XT1JLRVJfQlVTWScgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdTV09PTEVfV09SS0VSX0VYSVQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnU1dPT0xFX1dPUktFUl9JRExFJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1NfQUxMJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdTX0VYRUNVVE9SJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdTX0ZJTEVTJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdTX0lOQ0xVREUnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1NfSU5URVJOQUwnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1NfSVJHUlAnID0+ICdkaW8vZGlvX2Quc3R1YicsICdTX0lST1RIJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnU19JUlVTUicgPT4gJ2Rpby9kaW9fZC5zdHViJywgJ1NfSVJXWEcnID0+ICdkaW8vZGlvX2Quc3R1YicsICdTX0lSV1hPJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnU19JUldYVScgPT4gJ2Rpby9kaW9fZC5zdHViJywgJ1NfSVdHUlAnID0+ICdkaW8vZGlvX2Quc3R1YicsICdTX0lXT1RIJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnU19JV1VTUicgPT4gJ2Rpby9kaW9fZC5zdHViJywgJ1NfSVhHUlAnID0+ICdkaW8vZGlvX2Quc3R1YicsICdTX0lYT1RIJyA9PiAnZGlvL2Rpb19kLnN0dWInLCAnU19JWFVTUicgPT4gJ2Rpby9kaW9fZC5zdHViJywgJ1NfTUFJTCcgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnU19NRU1PUlknID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1NfTUlTQycgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnU19TRVNTSU9OJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdTX1NRTCcgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnU19WQVJTJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdTY3JvbGxCYXInID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnU2xpZGVyJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX0FFQURfQUVTMjU2R0NNX0FCWVRFUycgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19BRUFEX0FFUzI1NkdDTV9LRVlCWVRFUycgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19BRUFEX0FFUzI1NkdDTV9OUFVCQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fQUVBRF9BRVMyNTZHQ01fTlNFQ0JZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9BQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0tFWUJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9OUFVCQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X05TRUNCWVRFUycgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19BVVRIX0JZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX0FVVEhfS0VZQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fQk9YX0tFWVBBSVJCWVRFUycgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19CT1hfTUFDQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fQk9YX05PTkNFQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fQk9YX1BVQkxJQ0tFWUJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX0JPWF9TRUFMQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fQk9YX1NFQ1JFVEtFWUJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX0JPWF9TRUVEQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fR0VORVJJQ0hBU0hfQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fR0VORVJJQ0hBU0hfQllURVNfTUFYJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX0dFTkVSSUNIQVNIX0JZVEVTX01JTicgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19HRU5FUklDSEFTSF9LRVlCWVRFUycgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19HRU5FUklDSEFTSF9LRVlCWVRFU19NQVgnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVNfTUlOJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX0tYX0JZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX0tYX1BVQkxJQ0tFWUJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX0tYX1NFQ1JFVEtFWUJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX1BXSEFTSF9NRU1MSU1JVF9JTlRFUkFDVElWRScgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19QV0hBU0hfTUVNTElNSVRfTU9ERVJBVEUnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fUFdIQVNIX01FTUxJTUlUX1NFTlNJVElWRScgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19QV0hBU0hfT1BTTElNSVRfSU5URVJBQ1RJVkUnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fUFdIQVNIX09QU0xJTUlUX01PREVSQVRFJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX1BXSEFTSF9PUFNMSU1JVF9TRU5TSVRJVkUnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fUFdIQVNIX1NDUllQVFNBTFNBMjA4U0hBMjU2X01FTUxJTUlUX0lOVEVSQUNUSVZFJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX1BXSEFTSF9TQ1JZUFRTQUxTQTIwOFNIQTI1Nl9NRU1MSU1JVF9TRU5TSVRJVkUnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fUFdIQVNIX1NDUllQVFNBTFNBMjA4U0hBMjU2X09QU0xJTUlUX0lOVEVSQUNUSVZFJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX1BXSEFTSF9TQ1JZUFRTQUxTQTIwOFNIQTI1Nl9PUFNMSU1JVF9TRU5TSVRJVkUnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fUFdIQVNIX1NDUllQVFNBTFNBMjA4U0hBMjU2X1NBTFRCWVRFUycgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19QV0hBU0hfU0NSWVBUU0FMU0EyMDhTSEEyNTZfU1RSUFJFRklYJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX1NDQUxBUk1VTFRfQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fU0NBTEFSTVVMVF9TQ0FMQVJCWVRFUycgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19TRUNSRVRCT1hfS0VZQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fU0VDUkVUQk9YX01BQ0JZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX1NFQ1JFVEJPWF9OT05DRUJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX1NIT1JUSEFTSF9CWVRFUycgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19TSE9SVEhBU0hfS0VZQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fU0lHTl9CWVRFUycgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19TSUdOX0tFWVBBSVJCWVRFUycgPT4gJ2xpYnNvZGl1bS9saWJzb2RpdW0uc3R1YicsICdTb2RpdW1cXENSWVBUT19TSUdOX1BVQkxJQ0tFWUJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX1NJR05fU0VDUkVUS0VZQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fU0lHTl9TRUVEQllURVMnID0+ICdsaWJzb2RpdW0vbGlic29kaXVtLnN0dWInLCAnU29kaXVtXFxDUllQVE9fU1RSRUFNX0tFWUJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NvZGl1bVxcQ1JZUFRPX1NUUkVBTV9OT05DRUJZVEVTJyA9PiAnbGlic29kaXVtL2xpYnNvZGl1bS5zdHViJywgJ1NwaW5uZXInID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnU3RhdHVzQmFyJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1RDUF9DT05HRVNUSU9OJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnVENQX0RFRkVSX0FDQ0VQVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1RDUF9LRUVQQ05UJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnVENQX0tFRVBJRExFJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnVENQX0tFRVBJTlRWTCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1RDUF9OT0RFTEFZJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnVENQX05PVFNFTlRfTE9XQVQnID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdUQ1BfUVVJQ0tBQ0snID0+ICdzb2NrZXRzL3NvY2tldHMuc3R1YicsICdUQ1BfUkVQQUlSJyA9PiAnc29ja2V0cy9zb2NrZXRzLnN0dWInLCAnVENQX1NZTkNOVCcgPT4gJ3NvY2tldHMvc29ja2V0cy5zdHViJywgJ1RIT1VTQU5EU19TRVAnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnVEhPVVNFUCcgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdUSURZX05PREVUWVBFX0FTUCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfTk9ERVRZUEVfQ0RBVEEnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX05PREVUWVBFX0NPTU1FTlQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX05PREVUWVBFX0RPQ1RZUEUnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX05PREVUWVBFX0VORCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfTk9ERVRZUEVfSlNURScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfTk9ERVRZUEVfUEhQJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9OT0RFVFlQRV9QUk9DSU5TJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9OT0RFVFlQRV9ST09UJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9OT0RFVFlQRV9TRUNUSU9OJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9OT0RFVFlQRV9TVEFSVCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfTk9ERVRZUEVfU1RBUlRFTkQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX05PREVUWVBFX1RFWFQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX05PREVUWVBFX1hNTERFQ0wnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19BJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfQUJCUicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0FDUk9OWU0nID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19BRERSRVNTJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfQUxJR04nID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19BUFBMRVQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19BUkVBJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfQVJUSUNMRScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0FTSURFJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfQVVESU8nID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19CJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfQkFTRScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0JBU0VGT05UJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfQkRJJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfQkRPJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfQkdTT1VORCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0JJRycgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0JMSU5LJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfQkxPQ0tRVU9URScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0JPRFknID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19CUicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0JVVFRPTicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0NBTlZBUycgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0NBUFRJT04nID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19DRU5URVInID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19DSVRFJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfQ09ERScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0NPTCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0NPTEdST1VQJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfQ09NTUFORCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0NPTU1FTlQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19EQVRBTElTVCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0REJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfREVMJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfREVUQUlMUycgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0RGTicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0RJQUxPRycgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0RJUicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0RJVicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0RMJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfRFQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19FTScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0VNQkVEJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfRklFTERTRVQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19GSUdDQVBUSU9OJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfRklHVVJFJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfRk9OVCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0ZPT1RFUicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0ZPUk0nID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19GUkFNRScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0ZSQU1FU0VUJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfSDEnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19IMicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0gzJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfSDQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19INScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0g2JyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfSEVBRCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0hFQURFUicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0hHUk9VUCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0hSJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfSFRNTCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0knID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19JRlJBTUUnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19JTEFZRVInID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19JTUcnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19JTlBVVCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0lOUycgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0lTSU5ERVgnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19LQkQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19LRVlHRU4nID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19MQUJFTCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX0xBWUVSJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfTEVHRU5EJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfTEknID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19MSU5LJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfTElTVElORycgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX01BSU4nID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19NQVAnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19NQVJLJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfTUFSUVVFRScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX01FTlUnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19NRU5VSVRFTScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX01FVEEnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19NRVRFUicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX01VTFRJQ09MJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfTkFWJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfTk9CUicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX05PRU1CRUQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19OT0ZSQU1FUycgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX05PTEFZRVInID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19OT1NBVkUnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19OT1NDUklQVCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX09CSkVDVCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX09MJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfT1BUR1JPVVAnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19PUFRJT04nID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19PVVRQVVQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19QJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfUEFSQU0nID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19QTEFJTlRFWFQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19QUkUnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19QUk9HUkVTUycgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1EnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19SQicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1JCQycgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1JQJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfUlQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19SVEMnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19SVUJZJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfUycgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1NBTVAnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19TQ1JJUFQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19TRUNUSU9OJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfU0VMRUNUJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfU0VSVkVSJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfU0VSVkxFVCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1NNQUxMJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfU09VUkNFJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfU1BBQ0VSJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfU1BBTicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1NUUklLRScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1NUUk9ORycgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1NUWUxFJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfU1VCJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfU1VNTUFSWScgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1NVUCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1RBQkxFJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfVEJPRFknID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19URCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1RFTVBMQVRFJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfVEVYVEFSRUEnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19URk9PVCcgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1RIJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfVEhFQUQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19USU1FJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfVElUTEUnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19UUicgPT4gJ3RpZHkvdGlkeS5zdHViJywgJ1RJRFlfVEFHX1RSQUNLJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfVFQnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19VJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfVUwnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19VTktOT1dOJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfVkFSJyA9PiAndGlkeS90aWR5LnN0dWInLCAnVElEWV9UQUdfVklERU8nID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19XQlInID0+ICd0aWR5L3RpZHkuc3R1YicsICdUSURZX1RBR19YTVAnID0+ICd0aWR5L3RpZHkuc3R1YicsICdUT0tFTl9QQVJTRScgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUUkFQX0JSS1BUJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdUUkFQX1RSQUNFJyA9PiAncGNudGwvcGNudGwuc3R1YicsICdUWVBFQVBQTElDQVRJT04nID0+ICdpbWFwL2ltYXAuc3R1YicsICdUWVBFQVVESU8nID0+ICdpbWFwL2ltYXAuc3R1YicsICdUWVBFSU1BR0UnID0+ICdpbWFwL2ltYXAuc3R1YicsICdUWVBFTUVTU0FHRScgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ1RZUEVNT0RFTCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ1RZUEVNVUxUSVBBUlQnID0+ICdpbWFwL2ltYXAuc3R1YicsICdUWVBFT1RIRVInID0+ICdpbWFwL2ltYXAuc3R1YicsICdUWVBFVEVYVCcgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ1RZUEVWSURFTycgPT4gJ2ltYXAvaW1hcC5zdHViJywgJ1RfQUJTVFJBQ1QnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9BTVBFUlNBTkRfRk9MTE9XRURfQllfVkFSX09SX1ZBUkFSRycgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0FNUEVSU0FORF9OT1RfRk9MTE9XRURfQllfVkFSX09SX1ZBUkFSRycgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0FORF9FUVVBTCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0FSUkFZJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfQVJSQVlfQ0FTVCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0FTJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfQVRUUklCVVRFJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfQkFEX0NIQVJBQ1RFUicgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0JPT0xFQU5fQU5EJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfQk9PTEVBTl9PUicgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0JPT0xfQ0FTVCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0JSRUFLJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfQ0FMTEFCTEUnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9DQVNFJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfQ0FUQ0gnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9DSEFSQUNURVInID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9DTEFTUycgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0NMQVNTX0MnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9DTE9ORScgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0NMT1NFX1RBRycgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0NPQUxFU0NFJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfQ09BTEVTQ0VfRVFVQUwnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9DT01NRU5UJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfQ09OQ0FUX0VRVUFMJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfQ09OU1QnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9DT05TVEFOVF9FTkNBUFNFRF9TVFJJTkcnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9DT05USU5VRScgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0NVUkxZX09QRU4nID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9ERUMnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9ERUNMQVJFJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfREVGQVVMVCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0RJUicgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0RJVl9FUVVBTCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0ROVU1CRVInID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9ETycgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0RPQ19DT01NRU5UJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfRE9MTEFSX09QRU5fQ1VSTFlfQlJBQ0VTJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfRE9VQkxFX0FSUk9XJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfRE9VQkxFX0NBU1QnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9ET1VCTEVfQ09MT04nID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9FQ0hPJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfRUxMSVBTSVMnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9FTFNFJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfRUxTRUlGJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfRU1QVFknID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9FTkNBUFNFRF9BTkRfV0hJVEVTUEFDRScgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0VORERFQ0xBUkUnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9FTkRGT1InID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9FTkRGT1JFQUNIJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfRU5ESUYnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9FTkRTV0lUQ0gnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9FTkRXSElMRScgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0VORF9IRVJFRE9DJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfRU5VTScgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0VWQUwnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9FWElUJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfRVhURU5EUycgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0ZJTEUnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9GSU5BTCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0ZJTkFMTFknID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9GTVQnID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnVF9GTVRfQU1QTScgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdUX0ZOJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfRk9SJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfRk9SRUFDSCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0ZVTkNUSU9OJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfRlVOQ19DJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfR0xPQkFMJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfR09UTycgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0hBTFRfQ09NUElMRVInID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9JRicgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0lNUExFTUVOVFMnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9JTkMnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9JTkNMVURFJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfSU5DTFVERV9PTkNFJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfSU5MSU5FX0hUTUwnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9JTlNUQU5DRU9GJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfSU5TVEVBRE9GJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfSU5URVJGQUNFJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfSU5UX0NBU1QnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9JU1NFVCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0lTX0VRVUFMJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfSVNfR1JFQVRFUl9PUl9FUVVBTCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0lTX0lERU5USUNBTCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0lTX05PVF9FUVVBTCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0lTX05PVF9JREVOVElDQUwnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9JU19TTUFMTEVSX09SX0VRVUFMJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfTElORScgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX0xJU1QnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9MTlVNQkVSJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfTE9HSUNBTF9BTkQnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9MT0dJQ0FMX09SJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfTE9HSUNBTF9YT1InID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9NQVRDSCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX01FVEhPRF9DJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfTUlOVVNfRVFVQUwnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9NT0RfRVFVQUwnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9NVUxfRVFVQUwnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9OQU1FU1BBQ0UnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9OQU1FX0ZVTExZX1FVQUxJRklFRCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX05BTUVfUVVBTElGSUVEJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfTkFNRV9SRUxBVElWRScgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX05FVycgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX05TX0MnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9OU19TRVBBUkFUT1InID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9OVUxMU0FGRV9PQkpFQ1RfT1BFUkFUT1InID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9OVU1fU1RSSU5HJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfT0JKRUNUX0NBU1QnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9PQkpFQ1RfT1BFUkFUT1InID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9PUEVOX1RBRycgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX09QRU5fVEFHX1dJVEhfRUNITycgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX09SX0VRVUFMJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfUEFBTUFZSU1fTkVLVURPVEFZSU0nID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9QTFVTX0VRVUFMJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfUE9XJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfUE9XX0VRVUFMJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfUFJJTlQnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9QUklWQVRFJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfUFJJVkFURV9TRVQnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9QUk9QRVJUWV9DJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfUFJPVEVDVEVEJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfUFJPVEVDVEVEX1NFVCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX1BVQkxJQycgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX1BVQkxJQ19TRVQnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9SRUFET05MWScgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX1JFUVVJUkUnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9SRVFVSVJFX09OQ0UnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9SRVRVUk4nID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9TTCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX1NMX0VRVUFMJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfU1BBQ0VTSElQJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfU1InID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9TUl9FUVVBTCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX1NUQVJUX0hFUkVET0MnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9TVEFUSUMnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9TVFJJTkcnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9TVFJJTkdfQ0FTVCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX1NUUklOR19WQVJOQU1FJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfU1dJVENIJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfVEhST1cnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9UUkFJVCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX1RSQUlUX0MnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9UUlknID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9VTlNFVCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX1VOU0VUX0NBU1QnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9VU0UnID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9WQVInID0+ICd0b2tlbml6ZXIvdG9rZW5pemVyLnN0dWInLCAnVF9WQVJJQUJMRScgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX1dISUxFJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfV0hJVEVTUEFDRScgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX1hPUl9FUVVBTCcgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUX1lJRUxEJyA9PiAndG9rZW5pemVyL3Rva2VuaXplci5zdHViJywgJ1RfWUlFTERfRlJPTScgPT4gJ3Rva2VuaXplci90b2tlbml6ZXIuc3R1YicsICdUYWJDb250cm9sJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1RpbWVyJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1Rvb2xCYXInID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnVG9vbERpYWxvZycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdUcmVlVmlldycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdVTE9DX0FDVFVBTF9MT0NBTEUnID0+ICdpbnRsL2ludGwuc3R1YicsICdVTE9DX1ZBTElEX0xPQ0FMRScgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VOS05PV05fVFlQRScgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1VQTE9BRF9FUlJfQ0FOVF9XUklURScgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnVVBMT0FEX0VSUl9FWFRFTlNJT04nID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1VQTE9BRF9FUlJfRk9STV9TSVpFJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdVUExPQURfRVJSX0lOSV9TSVpFJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdVUExPQURfRVJSX05PX0ZJTEUnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1VQTE9BRF9FUlJfTk9fVE1QX0RJUicgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnVVBMT0FEX0VSUl9PSycgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnVVBMT0FEX0VSUl9QQVJUSUFMJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdVVUlEX1RZUEVfRENFJyA9PiAndXVpZC91dWlkX2Muc3R1YicsICdVVUlEX1RZUEVfREVGQVVMVCcgPT4gJ3V1aWQvdXVpZF9jLnN0dWInLCAnVVVJRF9UWVBFX0lOVkFMSUQnID0+ICd1dWlkL3V1aWRfYy5zdHViJywgJ1VVSURfVFlQRV9NRDUnID0+ICd1dWlkL3V1aWRfYy5zdHViJywgJ1VVSURfVFlQRV9OQU1FJyA9PiAndXVpZC91dWlkX2Muc3R1YicsICdVVUlEX1RZUEVfTlVMTCcgPT4gJ3V1aWQvdXVpZF9jLnN0dWInLCAnVVVJRF9UWVBFX1JBTkRPTScgPT4gJ3V1aWQvdXVpZF9jLnN0dWInLCAnVVVJRF9UWVBFX1NFQ1VSSVRZJyA9PiAndXVpZC91dWlkX2Muc3R1YicsICdVVUlEX1RZUEVfU0hBMScgPT4gJ3V1aWQvdXVpZF9jLnN0dWInLCAnVVVJRF9UWVBFX1RJTUUnID0+ICd1dWlkL3V1aWRfYy5zdHViJywgJ1VVSURfVkFSSUFOVF9EQ0UnID0+ICd1dWlkL3V1aWRfYy5zdHViJywgJ1VVSURfVkFSSUFOVF9NSUNST1NPRlQnID0+ICd1dWlkL3V1aWRfYy5zdHViJywgJ1VVSURfVkFSSUFOVF9OQ1MnID0+ICd1dWlkL3V1aWRfYy5zdHViJywgJ1VVSURfVkFSSUFOVF9PVEhFUicgPT4gJ3V1aWQvdXVpZF9jLnN0dWInLCAnVV9BTUJJR1VPVVNfQUxJQVNfV0FSTklORycgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfQkFEX1ZBUklBQkxFX0RFRklOSVRJT04nID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0JSS19BU1NJR05fRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0JSS19FUlJPUl9MSU1JVCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfQlJLX0VSUk9SX1NUQVJUJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9CUktfSEVYX0RJR0lUU19FWFBFQ1RFRCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfQlJLX0lOSVRfRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0JSS19JTlRFUk5BTF9FUlJPUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfQlJLX01BTEZPUk1FRF9SVUxFX1RBRycgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfQlJLX01JU01BVENIRURfUEFSRU4nID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0JSS19ORVdfTElORV9JTl9RVU9URURfU1RSSU5HJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9CUktfUlVMRV9FTVBUWV9TRVQnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0JSS19SVUxFX1NZTlRBWCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfQlJLX1NFTUlDT0xPTl9FWFBFQ1RFRCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfQlJLX1VOQ0xPU0VEX1NFVCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfQlJLX1VOREVGSU5FRF9WQVJJQUJMRScgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfQlJLX1VOUkVDT0dOSVpFRF9PUFRJT04nID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0JSS19WQVJJQUJMRV9SRURGSU5JVElPTicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfQlVGRkVSX09WRVJGTE9XX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9DRV9OT1RfRk9VTkRfRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0NPTExBVE9SX1ZFUlNJT05fTUlTTUFUQ0gnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0RJRkZFUkVOVF9VQ0FfVkVSU0lPTicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfRU5VTV9PVVRfT0ZfU1lOQ19FUlJPUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfRVJST1JfTElNSVQnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0VSUk9SX1dBUk5JTkdfTElNSVQnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0VSUk9SX1dBUk5JTkdfU1RBUlQnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0ZJTEVfQUNDRVNTX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9GTVRfUEFSU0VfRVJST1JfTElNSVQnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0ZNVF9QQVJTRV9FUlJPUl9TVEFSVCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfSUROQV9BQ0VfUFJFRklYX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9JRE5BX0NIRUNLX0JJRElfRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0lETkFfRE9NQUlOX05BTUVfVE9PX0xPTkdfRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0lETkFfRVJST1JfTElNSVQnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0lETkFfRVJST1JfU1RBUlQnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0lETkFfTEFCRUxfVE9PX0xPTkdfRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0lETkFfUFJPSElCSVRFRF9FUlJPUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfSUROQV9TVEQzX0FTQ0lJX1JVTEVTX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9JRE5BX1VOQVNTSUdORURfRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0lETkFfVkVSSUZJQ0FUSU9OX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9JRE5BX1pFUk9fTEVOR1RIX0xBQkVMX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9JTExFR0FMX0NIQVJBQ1RFUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfSUxMRUdBTF9DSEFSX0ZPVU5EJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9JTExFR0FMX0NIQVJfSU5fU0VHTUVOVCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0UnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0lMTEVHQUxfUEFEX1BPU0lUSU9OJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfSU5URVJOQUxfUFJPR1JBTV9FUlJPUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfSU5URVJOQUxfVFJBTlNMSVRFUkFUT1JfRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0lOVkFMSURfQ0hBUl9GT1VORCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfSU5WQUxJRF9GT1JNQVRfRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0lOVkFMSURfRlVOQ1RJT04nID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0lOVkFMSURfSUQnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0lOVkFMSURfUFJPUEVSVFlfUEFUVEVSTicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfSU5WQUxJRF9SQlRfU1lOVEFYJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9JTlZBTElEX1NUQVRFX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9JTlZBTElEX1RBQkxFX0ZJTEUnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX0lOVkFMSURfVEFCTEVfRk9STUFUJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9JTlZBUklBTlRfQ09OVkVSU0lPTl9FUlJPUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfTUFMRk9STUVEX0VYUE9ORU5USUFMX1BBVFRFUk4nID0+ICdpbnRsL2ludGwuc3R1YicsICdVX01BTEZPUk1FRF9QUkFHTUEnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX01BTEZPUk1FRF9SVUxFJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9NQUxGT1JNRURfU0VUJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9NQUxGT1JNRURfU1lNQk9MX1JFRkVSRU5DRScgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfTUFMRk9STUVEX1VOSUNPREVfRVNDQVBFJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9NQUxGT1JNRURfVkFSSUFCTEVfREVGSU5JVElPTicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfTUFMRk9STUVEX1ZBUklBQkxFX1JFRkVSRU5DRScgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfTUVNT1JZX0FMTE9DQVRJT05fRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX01FU1NBR0VfUEFSU0VfRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX01JU01BVENIRURfU0VHTUVOVF9ERUxJTUlURVJTJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9NSVNQTEFDRURfQU5DSE9SX1NUQVJUJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9NSVNQTEFDRURfQ09NUE9VTkRfRklMVEVSJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9NSVNQTEFDRURfQ1VSU09SX09GRlNFVCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfTUlTUExBQ0VEX1FVQU5USUZJRVInID0+ICdpbnRsL2ludGwuc3R1YicsICdVX01JU1NJTkdfT1BFUkFUT1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX01JU1NJTkdfUkVTT1VSQ0VfRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX01JU1NJTkdfU0VHTUVOVF9DTE9TRScgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfTVVMVElQTEVfQU5URV9DT05URVhUUycgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfTVVMVElQTEVfQ09NUE9VTkRfRklMVEVSUycgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfTVVMVElQTEVfQ1VSU09SUycgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfTVVMVElQTEVfREVDSU1BTF9TRVBBUkFUT1JTJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9NVUxUSVBMRV9ERUNJTUFMX1NFUEVSQVRPUlMnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX01VTFRJUExFX0VYUE9ORU5USUFMX1NZTUJPTFMnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX01VTFRJUExFX1BBRF9TUEVDSUZJRVJTJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9NVUxUSVBMRV9QRVJDRU5UX1NZTUJPTFMnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX01VTFRJUExFX1BFUk1JTExfU1lNQk9MUycgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfTVVMVElQTEVfUE9TVF9DT05URVhUUycgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfTk9fU1BBQ0VfQVZBSUxBQkxFJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9OT19XUklURV9QRVJNSVNTSU9OJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9QQVJTRV9FUlJPUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfUEFSU0VfRVJST1JfTElNSVQnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX1BBUlNFX0VSUk9SX1NUQVJUJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9QQVRURVJOX1NZTlRBWF9FUlJPUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfUFJJTUFSWV9UT09fTE9OR19FUlJPUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfUkVHRVhfQkFEX0VTQ0FQRV9TRVFVRU5DRScgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfUkVHRVhfQkFEX0lOVEVSVkFMJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9SRUdFWF9FUlJPUl9MSU1JVCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfUkVHRVhfRVJST1JfU1RBUlQnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX1JFR0VYX0lOVEVSTkFMX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9SRUdFWF9JTlZBTElEX0JBQ0tfUkVGJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9SRUdFWF9JTlZBTElEX0ZMQUcnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX1JFR0VYX0lOVkFMSURfU1RBVEUnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX1JFR0VYX0xPT0tfQkVISU5EX0xJTUlUJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9SRUdFWF9NQVhfTFRfTUlOJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9SRUdFWF9NSVNNQVRDSEVEX1BBUkVOJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9SRUdFWF9OVU1CRVJfVE9PX0JJRycgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfUkVHRVhfUFJPUEVSVFlfU1lOVEFYJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9SRUdFWF9SVUxFX1NZTlRBWCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfUkVHRVhfU0VUX0NPTlRBSU5TX1NUUklORycgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfUkVHRVhfVU5JTVBMRU1FTlRFRCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfUkVTT1VSQ0VfVFlQRV9NSVNNQVRDSCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfUlVMRV9NQVNLX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9TQUZFQ0xPTkVfQUxMT0NBVEVEX1dBUk5JTkcnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX1NPUlRfS0VZX1RPT19TSE9SVF9XQVJOSU5HJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9TVEFOREFSRF9FUlJPUl9MSU1JVCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfU1RBVEVfT0xEX1dBUk5JTkcnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX1NUQVRFX1RPT19PTERfRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX1NUUklOR1BSRVBfQ0hFQ0tfQklESV9FUlJPUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfU1RSSU5HUFJFUF9QUk9ISUJJVEVEX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9TVFJJTkdQUkVQX1VOQVNTSUdORURfRVJST1InID0+ICdpbnRsL2ludGwuc3R1YicsICdVX1NUUklOR19OT1RfVEVSTUlOQVRFRF9XQVJOSU5HJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9UT09fTUFOWV9BTElBU0VTX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9UUkFJTElOR19CQUNLU0xBU0gnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX1RSVU5DQVRFRF9DSEFSX0ZPVU5EJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9VTkNMT1NFRF9TRUdNRU5UJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9VTkRFRklORURfU0VHTUVOVF9SRUZFUkVOQ0UnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX1VOREVGSU5FRF9WQVJJQUJMRScgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfVU5FWFBFQ1RFRF9UT0tFTicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfVU5NQVRDSEVEX0JSQUNFUycgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfVU5RVU9URURfU1BFQ0lBTCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfVU5TVVBQT1JURURfQVRUUklCVVRFJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9VTlNVUFBPUlRFRF9FUlJPUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfVU5TVVBQT1JURURfRVNDQVBFX1NFUVVFTkNFJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9VTlNVUFBPUlRFRF9QUk9QRVJUWScgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfVU5URVJNSU5BVEVEX1FVT1RFJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9VU0VMRVNTX0NPTExBVE9SX0VSUk9SJyA9PiAnaW50bC9pbnRsLnN0dWInLCAnVV9VU0lOR19ERUZBVUxUX1dBUk5JTkcnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX1VTSU5HX0ZBTExCQUNLX1dBUk5JTkcnID0+ICdpbnRsL2ludGwuc3R1YicsICdVX1ZBUklBQkxFX1JBTkdFX0VYSEFVU1RFRCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfVkFSSUFCTEVfUkFOR0VfT1ZFUkxBUCcgPT4gJ2ludGwvaW50bC5zdHViJywgJ1VfWkVST19FUlJPUicgPT4gJ2ludGwvaW50bC5zdHViJywgJ1ZBUkNNUF9FUScgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ1ZBUkNNUF9HVCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ1ZBUkNNUF9MVCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ1ZBUkNNUF9OVUxMJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnVklSX0NPTk5FQ1RfRkxBR19TT1VOREhXX0dFVF9OQU1FUycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0NPTk5FQ1RfR0VUX0FMTF9ET01BSU5TX1NUQVRTX0FDVElWRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0NPTk5FQ1RfR0VUX0FMTF9ET01BSU5TX1NUQVRTX0VORk9SQ0VfU1RBVFMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9DT05ORUNUX0dFVF9BTExfRE9NQUlOU19TVEFUU19JTkFDVElWRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0NPTk5FQ1RfR0VUX0FMTF9ET01BSU5TX1NUQVRTX09USEVSJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfQ09OTkVDVF9HRVRfQUxMX0RPTUFJTlNfU1RBVFNfUEFVU0VEJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfQ09OTkVDVF9HRVRfQUxMX0RPTUFJTlNfU1RBVFNfUEVSU0lTVEVOVCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0NPTk5FQ1RfR0VUX0FMTF9ET01BSU5TX1NUQVRTX1JVTk5JTkcnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9DT05ORUNUX0dFVF9BTExfRE9NQUlOU19TVEFUU19TSFVUT0ZGJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfQ09OTkVDVF9HRVRfQUxMX0RPTUFJTlNfU1RBVFNfVFJBTlNJRU5UJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfQ09OTkVDVF9MSVNUX05FVFdPUktTX0FDVElWRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0NPTk5FQ1RfTElTVF9ORVRXT1JLU19BVVRPU1RBUlQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9DT05ORUNUX0xJU1RfTkVUV09SS1NfSU5BQ1RJVkUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9DT05ORUNUX0xJU1RfTkVUV09SS1NfTk9fQVVUT1NUQVJUJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfQ09OTkVDVF9MSVNUX05FVFdPUktTX1BFUlNJU1RFTlQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9DT05ORUNUX0xJU1RfTkVUV09SS1NfVFJBTlNJRU5UJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfQ1JFRF9BVVRITkFNRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0NSRURfQ05PTkNFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfQ1JFRF9FQ0hPUFJPTVBUJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfQ1JFRF9FWFRFUk5BTCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0NSRURfTEFOR1VBR0UnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9DUkVEX05PRUNIT1BST01QVCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0NSRURfUEFTU1BIUkFTRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0NSRURfUkVBTE0nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9DUkVEX1VTRVJOQU1FJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX0FGRkVDVF9DT05GSUcnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQUZGRUNUX0NVUlJFTlQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQUZGRUNUX0xJVkUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQkxPQ0tFRCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9CTE9DS19DT01NSVRfQUNUSVZFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX0JMT0NLX0NPTU1JVF9CQU5EV0lEVEhfQllURVMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQkxPQ0tfQ09NTUlUX0RFTEVURScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9CTE9DS19DT01NSVRfUkVMQVRJVkUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQkxPQ0tfQ09NTUlUX1NIQUxMT1cnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQkxPQ0tfQ09QWV9SRVVTRV9FWFQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQkxPQ0tfQ09QWV9TSEFMTE9XJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX0JMT0NLX0pPQl9BQk9SVF9BU1lOQycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9CTE9DS19KT0JfQUJPUlRfUElWT1QnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQkxPQ0tfSk9CX0lORk9fQkFORFdJRFRIX0JZVEVTJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX0JMT0NLX0pPQl9TUEVFRF9CQU5EV0lEVEhfQllURVMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQkxPQ0tfSk9CX1RZUEVfQUNUSVZFX0NPTU1JVCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9CTE9DS19KT0JfVFlQRV9DT01NSVQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQkxPQ0tfSk9CX1RZUEVfQ09QWScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9CTE9DS19KT0JfVFlQRV9QVUxMJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX0JMT0NLX0pPQl9UWVBFX1VOS05PV04nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQkxPQ0tfUFVMTF9CQU5EV0lEVEhfQllURVMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQkxPQ0tfUkVCQVNFX0JBTkRXSURUSF9CWVRFUycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9CTE9DS19SRUJBU0VfQ09QWScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9CTE9DS19SRUJBU0VfQ09QWV9ERVYnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fQkxPQ0tfUkVCQVNFX0NPUFlfUkFXJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX0JMT0NLX1JFQkFTRV9SRUxBVElWRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9CTE9DS19SRUJBU0VfUkVVU0VfRVhUJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX0JMT0NLX1JFQkFTRV9TSEFMTE9XJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX0JMT0NLX1JFU0laRV9CWVRFUycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9DUkFTSEVEJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX0RFVklDRV9NT0RJRllfQ09ORklHJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX0RFVklDRV9NT0RJRllfQ1VSUkVOVCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9ERVZJQ0VfTU9ESUZZX0ZPUkNFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX0RFVklDRV9NT0RJRllfTElWRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9ESVNLX0FDQ0VTU19BTEwnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fRElTS19CTE9DSycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9ESVNLX0ZJTEUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fRkxBR19DTE9DS19MT0NBTFRJTUUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fRkxBR19GRUFUVVJFX0FDUEknID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fRkxBR19GRUFUVVJFX0FQSUMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fRkxBR19GRUFUVVJFX1BBRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9GTEFHX1NPVU5EX0FDOTcnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fRkxBR19URVNUX0xPQ0FMX1ZOQycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9JTlRFUkZBQ0VfQUREUkVTU0VTX1NSQ19BR0VOVCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9JTlRFUkZBQ0VfQUREUkVTU0VTX1NSQ19BUlAnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fSU5URVJGQUNFX0FERFJFU1NFU19TUkNfTEVBU0UnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fSk9CX0JPVU5ERUQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fSk9CX0NBTkNFTExFRCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9KT0JfQ09NUExFVEVEJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX0pPQl9GQUlMRUQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fSk9CX05PTkUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fSk9CX1VOQk9VTkRFRCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9NRU1PUllfU1RBVF9BQ1RVQUxfQkFMTE9PTicgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9NRU1PUllfU1RBVF9BVkFJTEFCTEUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fTUVNT1JZX1NUQVRfTUFKT1JfRkFVTFQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fTUVNT1JZX1NUQVRfTUlOT1JfRkFVTFQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fTUVNT1JZX1NUQVRfTlInID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fTUVNT1JZX1NUQVRfUlNTJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX01FTU9SWV9TVEFUX1NXQVBfSU4nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fTUVNT1JZX1NUQVRfU1dBUF9PVVQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fTUVNT1JZX1NUQVRfVU5VU0VEJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX01FTV9DT05GSUcnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fTUVNX0NVUlJFTlQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fTUVNX0xJVkUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fTUVNX01BWElNVU0nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fTUVUQURBVEFfREVTQ1JJUFRJT04nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fTUVUQURBVEFfRUxFTUVOVCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9NRVRBREFUQV9USVRMRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9OT05FJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX05PU1RBVEUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fUEFVU0VEJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX1BNU1VTUEVOREVEJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX1JVTk5JTkcnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fU0hVVERPV04nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fU0hVVE9GRicgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9TVEFSVF9BVVRPREVTVFJPWScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9TVEFSVF9CWVBBU1NfQ0FDSEUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fU1RBUlRfRk9SQ0VfQk9PVCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9TVEFSVF9QQVVTRUQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fU1RBUlRfVkFMSURBVEUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fU1RBVFNfQkFMTE9PTicgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9TVEFUU19CTE9DSycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9TVEFUU19DUFVfVE9UQUwnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fU1RBVFNfSU5URVJGQUNFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX1NUQVRTX1NUQVRFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX1NUQVRTX1ZDUFUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fVU5ERUZJTkVfS0VFUF9OVlJBTScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9VTkRFRklORV9NQU5BR0VEX1NBVkUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fVU5ERUZJTkVfTlZSQU0nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fVU5ERUZJTkVfU05BUFNIT1RTX01FVEFEQVRBJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX1ZDUFVfQ09ORklHJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX1ZDUFVfQ1VSUkVOVCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9WQ1BVX0dVRVNUJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX1ZDUFVfTElWRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0RPTUFJTl9WQ1BVX01BWElNVU0nID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fWE1MX0lOQUNUSVZFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX1hNTF9NSUdSQVRBQkxFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfRE9NQUlOX1hNTF9TRUNVUkUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9ET01BSU5fWE1MX1VQREFURV9DUFUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9LRVlDT0RFX1NFVF9BVFNFVDEnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9LRVlDT0RFX1NFVF9BVFNFVDInID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9LRVlDT0RFX1NFVF9BVFNFVDMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9LRVlDT0RFX1NFVF9MSU5VWCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0tFWUNPREVfU0VUX09TWCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0tFWUNPREVfU0VUX1JGQicgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0tFWUNPREVfU0VUX1VTQicgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX0tFWUNPREVfU0VUX1dJTjMyJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfS0VZQ09ERV9TRVRfWFQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9LRVlDT0RFX1NFVF9YVF9LQkQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9NRU1PUllfUEhZU0lDQUwnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9NRU1PUllfVklSVFVBTCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX01JR1JBVEVfQUJPUlRfT05fRVJST1InID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9NSUdSQVRFX0FVVE9fQ09OVkVSR0UnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9NSUdSQVRFX0NIQU5HRV9QUk9URUNUSU9OJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfTUlHUkFURV9DT01QUkVTU0VEJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfTUlHUkFURV9MSVZFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfTUlHUkFURV9OT05fU0hBUkVEX0RJU0snID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9NSUdSQVRFX05PTl9TSEFSRURfSU5DJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfTUlHUkFURV9PRkZMSU5FJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfTUlHUkFURV9QQVVTRUQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9NSUdSQVRFX1BFRVIyUEVFUicgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX01JR1JBVEVfUEVSU0lTVF9ERVNUJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfTUlHUkFURV9UVU5ORUxMRUQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9NSUdSQVRFX1VOREVGSU5FX1NPVVJDRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX01JR1JBVEVfVU5TQUZFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfTkVUV09SS1NfQUNUSVZFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfTkVUV09SS1NfQUxMJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfTkVUV09SS1NfSU5BQ1RJVkUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9OT0RFX0NQVV9TVEFUU19BTExfQ1BVUycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1NOQVBTSE9UX0NSRUFURV9BVE9NSUMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9TTkFQU0hPVF9DUkVBVEVfQ1VSUkVOVCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1NOQVBTSE9UX0NSRUFURV9ESVNLX09OTFknID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9TTkFQU0hPVF9DUkVBVEVfSEFMVCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1NOQVBTSE9UX0NSRUFURV9MSVZFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU05BUFNIT1RfQ1JFQVRFX05PX01FVEFEQVRBJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU05BUFNIT1RfQ1JFQVRFX1FVSUVTQ0UnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9TTkFQU0hPVF9DUkVBVEVfUkVERUZJTkUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9TTkFQU0hPVF9DUkVBVEVfUkVVU0VfRVhUJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU05BUFNIT1RfREVMRVRFX0NISUxEUkVOJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU05BUFNIT1RfREVMRVRFX0NISUxEUkVOX09OTFknID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9TTkFQU0hPVF9ERUxFVEVfTUVUQURBVEFfT05MWScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1NOQVBTSE9UX0xJU1RfQUNUSVZFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU05BUFNIT1RfTElTVF9ERVNDRU5EQU5UUycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1NOQVBTSE9UX0xJU1RfRElTS19PTkxZJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU05BUFNIT1RfTElTVF9FWFRFUk5BTCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1NOQVBTSE9UX0xJU1RfSU5BQ1RJVkUnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9TTkFQU0hPVF9MSVNUX0lOVEVSTkFMJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU05BUFNIT1RfTElTVF9MRUFWRVMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9TTkFQU0hPVF9MSVNUX01FVEFEQVRBJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU05BUFNIT1RfTElTVF9OT19MRUFWRVMnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9TTkFQU0hPVF9MSVNUX05PX01FVEFEQVRBJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU05BUFNIT1RfTElTVF9ST09UUycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1NOQVBTSE9UX1JFVkVSVF9GT1JDRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1NOQVBTSE9UX1JFVkVSVF9QQVVTRUQnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9TTkFQU0hPVF9SRVZFUlRfUlVOTklORycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1NUT1JBR0VfUE9PTF9CVUlMRF9ORVcnID0+ICdsaWJ2aXJ0LXBocC9saWJ2aXJ0LXBocC5zdHViJywgJ1ZJUl9TVE9SQUdFX1BPT0xfQlVJTERfUkVQQUlSJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU1RPUkFHRV9QT09MX0JVSUxEX1JFU0laRScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1NUT1JBR0VfVk9MX0NSRUFURV9QUkVBTExPQ19NRVRBREFUQScgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1NUT1JBR0VfVk9MX0NSRUFURV9SRUZMSU5LJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU1RPUkFHRV9WT0xfUkVTSVpFX0FMTE9DQVRFJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU1RPUkFHRV9WT0xfUkVTSVpFX0RFTFRBJyA9PiAnbGlidmlydC1waHAvbGlidmlydC1waHAuc3R1YicsICdWSVJfU1RPUkFHRV9WT0xfUkVTSVpFX1NIUklOSycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1ZFUlNJT05fQklORElORycgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVklSX1ZFUlNJT05fTElCVklSVCcgPT4gJ2xpYnZpcnQtcGhwL2xpYnZpcnQtcGhwLnN0dWInLCAnVlRfQVJSQVknID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdWVF9CT09MJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnVlRfQlNUUicgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ1ZUX0JZUkVGJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnVlRfQ1knID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdWVF9EQVRFJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnVlRfREVDSU1BTCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ1ZUX0RJU1BBVENIJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnVlRfRU1QVFknID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdWVF9FUlJPUicgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ1ZUX0kxJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnVlRfSTInID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdWVF9JNCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ1ZUX0lOVCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ1ZUX05VTEwnID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdWVF9SNCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ1ZUX1I4JyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnVlRfVUkxJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnVlRfVUkyJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnVlRfVUk0JyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnVlRfVUlOVCcgPT4gJ2NvbV9kb3RuZXQvY29tX2RvdG5ldC5zdHViJywgJ1ZUX1VOS05PV04nID0+ICdjb21fZG90bmV0L2NvbV9kb3RuZXQuc3R1YicsICdWVF9WQVJJQU5UJyA9PiAnY29tX2RvdG5ldC9jb21fZG90bmV0LnN0dWInLCAnV0JDX0FMVCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfQVVUT1JFUEVBVCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfQkVFUCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfQk9SREVSJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19CT1RUT00nID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX0NFTlRFUicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfQ0hFQ0tCT1hFUycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfQ09OVFJPTCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfQ1VTVE9NRFJBVycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfREJMQ0xJQ0snID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX0RFRkFVTFQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX0RFRkFVTFRQT1MnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX0RJU0FCTEVEJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19FTExJUFNJUycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfRU5BQkxFRCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfR0VURk9DVVMnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX0dST1VQJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19IRUFERVJTRUwnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX0lNQUdFJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19JTkZPJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19JTlZJU0lCTEUnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX0tFWURPV04nID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX0tFWVVQJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19MQlVUVE9OJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19MRUZUJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19MSU5FUycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfTFZfQkFDSycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfTFZfQ09MVU1OUycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfTFZfREVGQVVMVCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfTFZfRFJBVycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfTFZfRk9SRScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfTFZfTk9ORScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfTUFTS0VEJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19NQVhJTUlaRUQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX01BWFNJWkUnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX01CVVRUT04nID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX01JRERMRScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfTUlOSU1JWkVEJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19NSU5TSVpFJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19NT1VTRURPV04nID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX01PVVNFTU9WRScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfTU9VU0VVUCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfTVVMVElMSU5FJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19NVUxUSVNFTEVDVCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfTk9IRUFERVInID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX05PUk1BTCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfTk9USUZZJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19OVU1CRVInID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX09LJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19PS0NBTkNFTCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfUVVFU1RJT04nID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX1JCVVRUT04nID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX1JFQURPTkxZJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19SRURSQVcnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX1JFU0laRScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfUklHSFQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX1JURl9URVhUJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19TSElGVCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfU0lOR0xFJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19TT1JUJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19TVE9QJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19UQVNLQkFSJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19USVRMRScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfVE9QJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dCQ19UUkFOU1BBUkVOVCcgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfVkVSU0lPTicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfVklTSUJMRScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfV0FSTklORycgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdXQkNfWUVTTk8nID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnV0JDX1lFU05PQ0FOQ0VMJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dDT05USU5VRUQnID0+ICdwY250bC9wY250bC5zdHViJywgJ1dFQlNPQ0tFVF9DTE9TRV9BQk5PUk1BTCcgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdXRUJTT0NLRVRfQ0xPU0VfREFUQV9FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdXRUJTT0NLRVRfQ0xPU0VfRVhURU5TSU9OX01JU1NJTkcnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnV0VCU09DS0VUX0NMT1NFX0dPSU5HX0FXQVknID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnV0VCU09DS0VUX0NMT1NFX01FU1NBR0VfRVJST1InID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnV0VCU09DS0VUX0NMT1NFX01FU1NBR0VfVE9PX0JJRycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdXRUJTT0NLRVRfQ0xPU0VfTk9STUFMJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1dFQlNPQ0tFVF9DTE9TRV9QT0xJQ1lfRVJST1InID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnV0VCU09DS0VUX0NMT1NFX1BST1RPQ09MX0VSUk9SJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1dFQlNPQ0tFVF9DTE9TRV9TRVJWRVJfRVJST1InID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnV0VCU09DS0VUX0NMT1NFX1NUQVRVU19FUlJPUicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdXRUJTT0NLRVRfQ0xPU0VfVExTJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1dFQlNPQ0tFVF9PUENPREVfQklOQVJZJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1dFQlNPQ0tFVF9PUENPREVfQ0xPU0UnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnV0VCU09DS0VUX09QQ09ERV9DT05USU5VQVRJT04nID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnV0VCU09DS0VUX09QQ09ERV9QSU5HJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1dFQlNPQ0tFVF9PUENPREVfUE9ORycgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdXRUJTT0NLRVRfT1BDT0RFX1RFWFQnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnV0VCU09DS0VUX1NUQVRVU19BQ1RJVkUnID0+ICdzd29vbGUvY29uc3RhbnRzLnN0dWInLCAnV0VCU09DS0VUX1NUQVRVU19DTE9TSU5HJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1dFQlNPQ0tFVF9TVEFUVVNfQ09OTkVDVElPTicgPT4gJ3N3b29sZS9jb25zdGFudHMuc3R1YicsICdXRUJTT0NLRVRfU1RBVFVTX0ZSQU1FJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1dFQlNPQ0tFVF9TVEFUVVNfSEFORFNIQUtFJyA9PiAnc3dvb2xlL2NvbnN0YW50cy5zdHViJywgJ1dFWElURUQnID0+ICdwY250bC9wY250bC5zdHViJywgJ1dISVRFJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ1dJTjMyX0FCT1ZFX05PUk1BTF9QUklPUklUWV9DTEFTUycgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9CRUxPV19OT1JNQUxfUFJJT1JJVFlfQ0xBU1MnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfRVJST1JfQUNDRVNTX0RFTklFRCcgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9FUlJPUl9DSVJDVUxBUl9ERVBFTkRFTkNZJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX0RBVEFCQVNFX0RPRVNfTk9UX0VYSVNUJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX0RFUEVOREVOVF9TRVJWSUNFU19SVU5OSU5HJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX0RVUExJQ0FURV9TRVJWSUNFX05BTUUnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfRVJST1JfRkFJTEVEX1NFUlZJQ0VfQ09OVFJPTExFUl9DT05ORUNUJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVInID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfRVJST1JfSU5WQUxJRF9EQVRBJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX0lOVkFMSURfSEFORExFJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX0lOVkFMSURfTEVWRUwnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfRVJST1JfSU5WQUxJRF9OQU1FJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX0lOVkFMSURfU0VSVklDRV9BQ0NPVU5UJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX0lOVkFMSURfU0VSVklDRV9DT05UUk9MJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX1BBVEhfTk9UX0ZPVU5EJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX1NFUlZJQ0VfQUxSRUFEWV9SVU5OSU5HJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX1NFUlZJQ0VfQ0FOTk9UX0FDQ0VQVF9DVFJMJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX1NFUlZJQ0VfREFUQUJBU0VfTE9DS0VEJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX1NFUlZJQ0VfREVQRU5ERU5DWV9ERUxFVEVEJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX1NFUlZJQ0VfREVQRU5ERU5DWV9GQUlMJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX1NFUlZJQ0VfRElTQUJMRUQnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfRVJST1JfU0VSVklDRV9ET0VTX05PVF9FWElTVCcgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9FUlJPUl9TRVJWSUNFX0VYSVNUUycgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9FUlJPUl9TRVJWSUNFX0xPR09OX0ZBSUxFRCcgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9FUlJPUl9TRVJWSUNFX01BUktFRF9GT1JfREVMRVRFJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0VSUk9SX1NFUlZJQ0VfTk9UX0FDVElWRScgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9FUlJPUl9TRVJWSUNFX05PX1RIUkVBRCcgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9FUlJPUl9TRVJWSUNFX1JFUVVFU1RfVElNRU9VVCcgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9FUlJPUl9TSFVURE9XTl9JTl9QUk9HUkVTUycgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9ISUdIX1BSSU9SSVRZX0NMQVNTJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX0lETEVfUFJJT1JJVFlfQ0xBU1MnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfTk9STUFMX1BSSU9SSVRZX0NMQVNTJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX05PX0VSUk9SJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1JFQUxUSU1FX1BSSU9SSVRZX0NMQVNTJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1NFUlZJQ0VfQUNDRVBUX1BBVVNFX0NPTlRJTlVFJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1NFUlZJQ0VfQUNDRVBUX1BSRVNIVVRET1dOJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1NFUlZJQ0VfQUNDRVBUX1NIVVRET1dOJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1NFUlZJQ0VfQUNDRVBUX1NUT1AnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfU0VSVklDRV9BVVRPX1NUQVJUJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1NFUlZJQ0VfQ09OVElOVUVfUEVORElORycgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9TRVJWSUNFX0NPTlRST0xfQ09OVElOVUUnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfU0VSVklDRV9DT05UUk9MX0lOVEVSUk9HQVRFJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1NFUlZJQ0VfQ09OVFJPTF9QQVVTRScgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9TRVJWSUNFX0NPTlRST0xfUFJFU0hVVERPV04nID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfU0VSVklDRV9DT05UUk9MX1NIVVRET1dOJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1NFUlZJQ0VfQ09OVFJPTF9TVE9QJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1NFUlZJQ0VfREVNQU5EX1NUQVJUJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1NFUlZJQ0VfRElTQUJMRUQnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfU0VSVklDRV9FUlJPUl9JR05PUkUnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfU0VSVklDRV9FUlJPUl9OT1JNQUwnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfU0VSVklDRV9JTlRFUkFDVElWRV9QUk9DRVNTJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1NFUlZJQ0VfUEFVU0VEJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1NFUlZJQ0VfUEFVU0VfUEVORElORycgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9TRVJWSUNFX1JVTk5JTkcnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfU0VSVklDRV9SVU5TX0lOX1NZU1RFTV9QUk9DRVNTJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dJTjMyX1NFUlZJQ0VfU1RBUlRfUEVORElORycgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9TRVJWSUNFX1NUT1BQRUQnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfU0VSVklDRV9TVE9QX1BFTkRJTkcnID0+ICd3aW4zMnNlcnZpY2Uvd2luMzJzZXJ2aWNlLnN0dWInLCAnV0lOMzJfU0VSVklDRV9XSU4zMl9PV05fUFJPQ0VTUycgPT4gJ3dpbjMyc2VydmljZS93aW4zMnNlcnZpY2Uuc3R1YicsICdXSU4zMl9TRVJWSUNFX1dJTjMyX09XTl9QUk9DRVNTX0lOVEVSQUNUSVZFJyA9PiAnd2luMzJzZXJ2aWNlL3dpbjMyc2VydmljZS5zdHViJywgJ1dOT0hBTkcnID0+ICdwY250bC9wY250bC5zdHViJywgJ1dOT1dBSVQnID0+ICdwY250bC9wY250bC5zdHViJywgJ1dTRExfQ0FDSEVfQk9USCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1dTRExfQ0FDSEVfRElTSycgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1dTRExfQ0FDSEVfTUVNT1JZJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnV1NETF9DQUNIRV9OT05FJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnV1NUT1BQRUQnID0+ICdwY250bC9wY250bC5zdHViJywgJ1dVTlRSQUNFRCcgPT4gJ3BjbnRsL3BjbnRsLnN0dWInLCAnWDUwOV9QVVJQT1NFX0FOWScgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ1g1MDlfUFVSUE9TRV9DUkxfU0lHTicgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ1g1MDlfUFVSUE9TRV9OU19TU0xfU0VSVkVSJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnWDUwOV9QVVJQT1NFX09DU1BfSEVMUEVSJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnWDUwOV9QVVJQT1NFX1NNSU1FX0VOQ1JZUFQnID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdYNTA5X1BVUlBPU0VfU01JTUVfU0lHTicgPT4gJ29wZW5zc2wvb3BlbnNzbC5zdHViJywgJ1g1MDlfUFVSUE9TRV9TU0xfQ0xJRU5UJyA9PiAnb3BlbnNzbC9vcGVuc3NsLnN0dWInLCAnWDUwOV9QVVJQT1NFX1NTTF9TRVJWRVInID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdYNTA5X1BVUlBPU0VfVElNRVNUQU1QX1NJR04nID0+ICdvcGVuc3NsL29wZW5zc2wuc3R1YicsICdYREVCVUdfQ0NfQlJBTkNIX0NIRUNLJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ1hERUJVR19DQ19ERUFEX0NPREUnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAnWERFQlVHX0NDX1VOVVNFRCcgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICdYREVCVUdfRklMVEVSX0NPREVfQ09WRVJBR0UnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAnWERFQlVHX0ZJTFRFUl9OT05FJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ1hERUJVR19GSUxURVJfU1RBQ0snID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAnWERFQlVHX0ZJTFRFUl9UUkFDSU5HJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ1hERUJVR19OQU1FU1BBQ0VfQkxBQ0tMSVNUJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ1hERUJVR19OQU1FU1BBQ0VfRVhDTFVERScgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICdYREVCVUdfTkFNRVNQQUNFX0lOQ0xVREUnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAnWERFQlVHX05BTUVTUEFDRV9XSElURUxJU1QnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAnWERFQlVHX1BBVEhfQkxBQ0tMSVNUJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ1hERUJVR19QQVRIX0VYQ0xVREUnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAnWERFQlVHX1BBVEhfSU5DTFVERScgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICdYREVCVUdfUEFUSF9XSElURUxJU1QnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAnWERFQlVHX1NUQUNLX05PX0RFU0MnID0+ICd4ZGVidWcveGRlYnVnLnN0dWInLCAnWERFQlVHX1RSQUNFX0FQUEVORCcgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICdYREVCVUdfVFJBQ0VfQ09NUFVURVJJWkVEJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ1hERUJVR19UUkFDRV9IVE1MJyA9PiAneGRlYnVnL3hkZWJ1Zy5zdHViJywgJ1hERUJVR19UUkFDRV9OQUtFRF9GSUxFTkFNRScgPT4gJ3hkZWJ1Zy94ZGVidWcuc3R1YicsICdYRElGRl9QQVRDSF9JR05PUkVTUEFDRScgPT4gJ3hkaWZmL3hkaWZmLnN0dWInLCAnWERJRkZfUEFUQ0hfTk9STUFMJyA9PiAneGRpZmYveGRpZmYuc3R1YicsICdYRElGRl9QQVRDSF9SRVZFUlNFJyA9PiAneGRpZmYveGRpZmYuc3R1YicsICdYSFBST0ZfRkxBR1NfQ1BVJyA9PiAneGhwcm9mL3hocHJvZi5zdHViJywgJ1hIUFJPRl9GTEFHU19NRU1PUlknID0+ICd4aHByb2YveGhwcm9mLnN0dWInLCAnWEhQUk9GX0ZMQUdTX05PX0JVSUxUSU5TJyA9PiAneGhwcm9mL3hocHJvZi5zdHViJywgJ1hNTF9BVFRSSUJVVEVfQ0RBVEEnID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0FUVFJJQlVURV9ERUNMX05PREUnID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0FUVFJJQlVURV9FTlRJVFknID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0FUVFJJQlVURV9FTlVNRVJBVElPTicgPT4gJ2RvbS9kb20uc3R1YicsICdYTUxfQVRUUklCVVRFX0lEJyA9PiAnZG9tL2RvbS5zdHViJywgJ1hNTF9BVFRSSUJVVEVfSURSRUYnID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0FUVFJJQlVURV9JRFJFRlMnID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0FUVFJJQlVURV9OTVRPS0VOJyA9PiAnZG9tL2RvbS5zdHViJywgJ1hNTF9BVFRSSUJVVEVfTk1UT0tFTlMnID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0FUVFJJQlVURV9OT0RFJyA9PiAnZG9tL2RvbS5zdHViJywgJ1hNTF9BVFRSSUJVVEVfTk9UQVRJT04nID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0NEQVRBX1NFQ1RJT05fTk9ERScgPT4gJ2RvbS9kb20uc3R1YicsICdYTUxfQ09NTUVOVF9OT0RFJyA9PiAnZG9tL2RvbS5zdHViJywgJ1hNTF9ET0NVTUVOVF9GUkFHX05PREUnID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0RPQ1VNRU5UX05PREUnID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0RPQ1VNRU5UX1RZUEVfTk9ERScgPT4gJ2RvbS9kb20uc3R1YicsICdYTUxfRFREX05PREUnID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0VMRU1FTlRfREVDTF9OT0RFJyA9PiAnZG9tL2RvbS5zdHViJywgJ1hNTF9FTEVNRU5UX05PREUnID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0VOVElUWV9ERUNMX05PREUnID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0VOVElUWV9OT0RFJyA9PiAnZG9tL2RvbS5zdHViJywgJ1hNTF9FTlRJVFlfUkVGX05PREUnID0+ICdkb20vZG9tLnN0dWInLCAnWE1MX0VSUk9SX0FTWU5DX0VOVElUWScgPT4gJ3htbC94bWwuc3R1YicsICdYTUxfRVJST1JfQVRUUklCVVRFX0VYVEVSTkFMX0VOVElUWV9SRUYnID0+ICd4bWwveG1sLnN0dWInLCAnWE1MX0VSUk9SX0JBRF9DSEFSX1JFRicgPT4gJ3htbC94bWwuc3R1YicsICdYTUxfRVJST1JfQklOQVJZX0VOVElUWV9SRUYnID0+ICd4bWwveG1sLnN0dWInLCAnWE1MX0VSUk9SX0RVUExJQ0FURV9BVFRSSUJVVEUnID0+ICd4bWwveG1sLnN0dWInLCAnWE1MX0VSUk9SX0VYVEVSTkFMX0VOVElUWV9IQU5ETElORycgPT4gJ3htbC94bWwuc3R1YicsICdYTUxfRVJST1JfSU5DT1JSRUNUX0VOQ09ESU5HJyA9PiAneG1sL3htbC5zdHViJywgJ1hNTF9FUlJPUl9JTlZBTElEX1RPS0VOJyA9PiAneG1sL3htbC5zdHViJywgJ1hNTF9FUlJPUl9KVU5LX0FGVEVSX0RPQ19FTEVNRU5UJyA9PiAneG1sL3htbC5zdHViJywgJ1hNTF9FUlJPUl9NSVNQTEFDRURfWE1MX1BJJyA9PiAneG1sL3htbC5zdHViJywgJ1hNTF9FUlJPUl9OT05FJyA9PiAneG1sL3htbC5zdHViJywgJ1hNTF9FUlJPUl9OT19FTEVNRU5UUycgPT4gJ3htbC94bWwuc3R1YicsICdYTUxfRVJST1JfTk9fTUVNT1JZJyA9PiAneG1sL3htbC5zdHViJywgJ1hNTF9FUlJPUl9QQVJBTV9FTlRJVFlfUkVGJyA9PiAneG1sL3htbC5zdHViJywgJ1hNTF9FUlJPUl9QQVJUSUFMX0NIQVInID0+ICd4bWwveG1sLnN0dWInLCAnWE1MX0VSUk9SX1JFQ1VSU0lWRV9FTlRJVFlfUkVGJyA9PiAneG1sL3htbC5zdHViJywgJ1hNTF9FUlJPUl9TWU5UQVgnID0+ICd4bWwveG1sLnN0dWInLCAnWE1MX0VSUk9SX1RBR19NSVNNQVRDSCcgPT4gJ3htbC94bWwuc3R1YicsICdYTUxfRVJST1JfVU5DTE9TRURfQ0RBVEFfU0VDVElPTicgPT4gJ3htbC94bWwuc3R1YicsICdYTUxfRVJST1JfVU5DTE9TRURfVE9LRU4nID0+ICd4bWwveG1sLnN0dWInLCAnWE1MX0VSUk9SX1VOREVGSU5FRF9FTlRJVFknID0+ICd4bWwveG1sLnN0dWInLCAnWE1MX0VSUk9SX1VOS05PV05fRU5DT0RJTkcnID0+ICd4bWwveG1sLnN0dWInLCAnWE1MX0hUTUxfRE9DVU1FTlRfTk9ERScgPT4gJ2RvbS9kb20uc3R1YicsICdYTUxfTE9DQUxfTkFNRVNQQUNFJyA9PiAnZG9tL2RvbS5zdHViJywgJ1hNTF9OQU1FU1BBQ0VfREVDTF9OT0RFJyA9PiAnZG9tL2RvbS5zdHViJywgJ1hNTF9OT1RBVElPTl9OT0RFJyA9PiAnZG9tL2RvbS5zdHViJywgJ1hNTF9PUFRJT05fQ0FTRV9GT0xESU5HJyA9PiAneG1sL3htbC5zdHViJywgJ1hNTF9PUFRJT05fUEFSU0VfSFVHRScgPT4gJ3htbC94bWwuc3R1YicsICdYTUxfT1BUSU9OX1NLSVBfVEFHU1RBUlQnID0+ICd4bWwveG1sLnN0dWInLCAnWE1MX09QVElPTl9TS0lQX1dISVRFJyA9PiAneG1sL3htbC5zdHViJywgJ1hNTF9PUFRJT05fVEFSR0VUX0VOQ09ESU5HJyA9PiAneG1sL3htbC5zdHViJywgJ1hNTF9QSV9OT0RFJyA9PiAnZG9tL2RvbS5zdHViJywgJ1hNTF9TQVhfSU1QTCcgPT4gJ3htbC94bWwuc3R1YicsICdYTUxfVEVYVF9OT0RFJyA9PiAnZG9tL2RvbS5zdHViJywgJ1hTRF8xOTk5X05BTUVTUEFDRScgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF8xOTk5X1RJTUVJTlNUQU5UJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX0FOWVRZUEUnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfQU5ZVVJJJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX0FOWVhNTCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9CQVNFNjRCSU5BUlknID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfQk9PTEVBTicgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9CWVRFJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX0RBVEUnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfREFURVRJTUUnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfREVDSU1BTCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9ET1VCTEUnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfRFVSQVRJT04nID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfRU5USVRJRVMnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfRU5USVRZJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX0ZMT0FUJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX0dEQVknID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfR01PTlRIJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX0dNT05USERBWScgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9HWUVBUicgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9HWUVBUk1PTlRIJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX0hFWEJJTkFSWScgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9JRCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9JRFJFRicgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9JRFJFRlMnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfSU5UJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX0lOVEVHRVInID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfTEFOR1VBR0UnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfTE9ORycgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9OQU1FJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX05BTUVTUEFDRScgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9OQ05BTUUnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfTkVHQVRJVkVJTlRFR0VSJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX05NVE9LRU4nID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfTk1UT0tFTlMnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfTk9OTkVHQVRJVkVJTlRFR0VSJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX05PTlBPU0lUSVZFSU5URUdFUicgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9OT1JNQUxJWkVEU1RSSU5HJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX05PVEFUSU9OJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX1BPU0lUSVZFSU5URUdFUicgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9RTkFNRScgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9TSE9SVCcgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9TVFJJTkcnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfVElNRScgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9UT0tFTicgPT4gJ3NvYXAvc29hcC5zdHViJywgJ1hTRF9VTlNJR05FREJZVEUnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfVU5TSUdORURJTlQnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0RfVU5TSUdORURMT05HJyA9PiAnc29hcC9zb2FwLnN0dWInLCAnWFNEX1VOU0lHTkVEU0hPUlQnID0+ICdzb2FwL3NvYXAuc3R1YicsICdYU0xfQ0xPTkVfQUxXQVlTJyA9PiAneHNsL3hzbC5zdHViJywgJ1hTTF9DTE9ORV9BVVRPJyA9PiAneHNsL3hzbC5zdHViJywgJ1hTTF9DTE9ORV9ORVZFUicgPT4gJ3hzbC94c2wuc3R1YicsICdYU0xfU0VDUFJFRl9DUkVBVEVfRElSRUNUT1JZJyA9PiAneHNsL3hzbC5zdHViJywgJ1hTTF9TRUNQUkVGX0RFRkFVTFQnID0+ICd4c2wveHNsLnN0dWInLCAnWFNMX1NFQ1BSRUZfTk9ORScgPT4gJ3hzbC94c2wuc3R1YicsICdYU0xfU0VDUFJFRl9SRUFEX0ZJTEUnID0+ICd4c2wveHNsLnN0dWInLCAnWFNMX1NFQ1BSRUZfUkVBRF9ORVRXT1JLJyA9PiAneHNsL3hzbC5zdHViJywgJ1hTTF9TRUNQUkVGX1dSSVRFX0ZJTEUnID0+ICd4c2wveHNsLnN0dWInLCAnWFNMX1NFQ1BSRUZfV1JJVEVfTkVUV09SSycgPT4gJ3hzbC94c2wuc3R1YicsICdZQUZcXEVOVklST04nID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lBRlxcRVJSXFxBVVRPTE9BRFxcRkFJTEVEJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZQUZcXEVSUlxcQ0FMTFxcRkFJTEVEJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZQUZcXEVSUlxcRElTUEFUQ0hcXEZBSUxFRCcgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWUFGXFxFUlJcXE5PVEZPVU5EXFxBQ1RJT04nID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lBRlxcRVJSXFxOT1RGT1VORFxcQ09OVFJPTExFUicgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWUFGXFxFUlJcXE5PVEZPVU5EXFxNT0RVTEUnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lBRlxcRVJSXFxOT1RGT1VORFxcVklFVycgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWUFGXFxFUlJcXFJPVVRFXFxGQUlMRUQnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lBRlxcRVJSXFxTVEFSVFVQXFxGQUlMRUQnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ1lBRlxcRVJSXFxUWVBFXFxFUlJPUicgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAnWUFGXFxWRVJTSU9OJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICdZQUZfRU5WSVJPTicgPT4gJ3lhZi95YWYuc3R1YicsICdZQUZfRVJSX0FDQ0VTU19FUlJPUicgPT4gJ3lhZi95YWYuc3R1YicsICdZQUZfRVJSX0FVVE9MT0FEX0ZBSUxFRCcgPT4gJ3lhZi95YWYuc3R1YicsICdZQUZfRVJSX0NBTExfRkFJTEVEJyA9PiAneWFmL3lhZi5zdHViJywgJ1lBRl9FUlJfRElTUEFUQ0hfRkFJTEVEJyA9PiAneWFmL3lhZi5zdHViJywgJ1lBRl9FUlJfTk9URk9VTkRfQUNUSU9OJyA9PiAneWFmL3lhZi5zdHViJywgJ1lBRl9FUlJfTk9URk9VTkRfQ09OVFJPTExFUicgPT4gJ3lhZi95YWYuc3R1YicsICdZQUZfRVJSX05PVEZPVU5EX01PRFVMRScgPT4gJ3lhZi95YWYuc3R1YicsICdZQUZfRVJSX05PVEZPVU5EX1ZJRVcnID0+ICd5YWYveWFmLnN0dWInLCAnWUFGX0VSUl9ST1VURV9GQUlMRUQnID0+ICd5YWYveWFmLnN0dWInLCAnWUFGX0VSUl9TVEFSVFVQX0ZBSUxFRCcgPT4gJ3lhZi95YWYuc3R1YicsICdZQUZfRVJSX1RZUEVfRVJST1InID0+ICd5YWYveWFmLnN0dWInLCAnWUFGX1ZFUlNJT04nID0+ICd5YWYveWFmLnN0dWInLCAnWUFNTF9BTllfQlJFQUsnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQU1MX0FOWV9FTkNPRElORycgPT4gJ3lhbWwveWFtbC5zdHViJywgJ1lBTUxfQU5ZX1NDQUxBUl9TVFlMRScgPT4gJ3lhbWwveWFtbC5zdHViJywgJ1lBTUxfQklOQVJZX1RBRycgPT4gJ3lhbWwveWFtbC5zdHViJywgJ1lBTUxfQk9PTF9UQUcnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQU1MX0NSTE5fQlJFQUsnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQU1MX0NSX0JSRUFLJyA9PiAneWFtbC95YW1sLnN0dWInLCAnWUFNTF9ET1VCTEVfUVVPVEVEX1NDQUxBUl9TVFlMRScgPT4gJ3lhbWwveWFtbC5zdHViJywgJ1lBTUxfRkxPQVRfVEFHJyA9PiAneWFtbC95YW1sLnN0dWInLCAnWUFNTF9GT0xERURfU0NBTEFSX1NUWUxFJyA9PiAneWFtbC95YW1sLnN0dWInLCAnWUFNTF9JTlRfVEFHJyA9PiAneWFtbC95YW1sLnN0dWInLCAnWUFNTF9MSVRFUkFMX1NDQUxBUl9TVFlMRScgPT4gJ3lhbWwveWFtbC5zdHViJywgJ1lBTUxfTE5fQlJFQUsnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQU1MX01BUF9UQUcnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQU1MX01FUkdFX1RBRycgPT4gJ3lhbWwveWFtbC5zdHViJywgJ1lBTUxfTlVMTF9UQUcnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQU1MX1BIUF9UQUcnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQU1MX1BMQUlOX1NDQUxBUl9TVFlMRScgPT4gJ3lhbWwveWFtbC5zdHViJywgJ1lBTUxfU0VRX1RBRycgPT4gJ3lhbWwveWFtbC5zdHViJywgJ1lBTUxfU0lOR0xFX1FVT1RFRF9TQ0FMQVJfU1RZTEUnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQU1MX1NUUl9UQUcnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQU1MX1RJTUVTVEFNUF9UQUcnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQU1MX1VURjE2QkVfRU5DT0RJTkcnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQU1MX1VURjE2TEVfRU5DT0RJTkcnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQU1MX1VURjhfRU5DT0RJTkcnID0+ICd5YW1sL3lhbWwuc3R1YicsICdZQVJfQ0xJRU5UX1BST1RPQ09MX0hUVFAnID0+ICd5YXIveWFyLnN0dWInLCAnWUFSX0NMSUVOVF9QUk9UT0NPTF9UQ1AnID0+ICd5YXIveWFyLnN0dWInLCAnWUFSX0NMSUVOVF9QUk9UT0NPTF9VTklYJyA9PiAneWFyL3lhci5zdHViJywgJ1lBUl9FUlJfRVhDRVBUSU9OJyA9PiAneWFyL3lhci5zdHViJywgJ1lBUl9FUlJfT0tFWScgPT4gJ3lhci95YXIuc3R1YicsICdZQVJfRVJSX09VVFBVVCcgPT4gJ3lhci95YXIuc3R1YicsICdZQVJfRVJSX1BBQ0tBR0VSJyA9PiAneWFyL3lhci5zdHViJywgJ1lBUl9FUlJfUFJPVE9DT0wnID0+ICd5YXIveWFyLnN0dWInLCAnWUFSX0VSUl9SRVFVRVNUJyA9PiAneWFyL3lhci5zdHViJywgJ1lBUl9FUlJfVFJBTlNQT1JUJyA9PiAneWFyL3lhci5zdHViJywgJ1lBUl9PUFRfQ09OTkVDVF9USU1FT1VUJyA9PiAneWFyL3lhci5zdHViJywgJ1lBUl9PUFRfSEVBREVSJyA9PiAneWFyL3lhci5zdHViJywgJ1lBUl9PUFRfUEFDS0FHRVInID0+ICd5YXIveWFyLnN0dWInLCAnWUFSX09QVF9QRVJTSVNURU5UJyA9PiAneWFyL3lhci5zdHViJywgJ1lBUl9PUFRfUkVTT0xWRScgPT4gJ3lhci95YXIuc3R1YicsICdZQVJfT1BUX1RJTUVPVVQnID0+ICd5YXIveWFyLnN0dWInLCAnWUFSX1BBQ0tBR0VSX0pTT04nID0+ICd5YXIveWFyLnN0dWInLCAnWUFSX1BBQ0tBR0VSX1BIUCcgPT4gJ3lhci95YXIuc3R1YicsICdZQVJfVkVSU0lPTicgPT4gJ3lhci95YXIuc3R1YicsICdZRUxMT1cnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnWUVTRVhQUicgPT4gJ3N0YW5kYXJkL3N0YW5kYXJkX2RlZmluZXMuc3R1YicsICdZRVNTVFInID0+ICdzdGFuZGFyZC9zdGFuZGFyZF9kZWZpbmVzLnN0dWInLCAnWkVORF9BQ0NfQUJTVFJBQ1QnID0+ICd1b3B6L3VvcHouc3R1YicsICdaRU5EX0FDQ19GRVRDSCcgPT4gJ3VvcHovdW9wei5zdHViJywgJ1pFTkRfQUNDX0ZJTkFMJyA9PiAndW9wei91b3B6LnN0dWInLCAnWkVORF9BQ0NfUFBQX01BU0snID0+ICd1b3B6L3VvcHouc3R1YicsICdaRU5EX0FDQ19QUklWQVRFJyA9PiAndW9wei91b3B6LnN0dWInLCAnWkVORF9BQ0NfUFJPVEVDVEVEJyA9PiAndW9wei91b3B6LnN0dWInLCAnWkVORF9BQ0NfUFVCTElDJyA9PiAndW9wei91b3B6LnN0dWInLCAnWkVORF9BQ0NfU1RBVElDJyA9PiAndW9wei91b3B6LnN0dWInLCAnWkVORF9ERUJVR19CVUlMRCcgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAnWkVORF9NVUxUSUJZVEUnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1pFTkRfVEhSRUFEX1NBRkUnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ1pMSUJfQkxPQ0snID0+ICd6bGliL3psaWIuc3R1YicsICdaTElCX0JVRl9FUlJPUicgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pMSUJfREFUQV9FUlJPUicgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pMSUJfREVGQVVMVF9TVFJBVEVHWScgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pMSUJfRU5DT0RJTkdfREVGTEFURScgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pMSUJfRU5DT0RJTkdfR1pJUCcgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pMSUJfRU5DT0RJTkdfUkFXJyA9PiAnemxpYi96bGliLnN0dWInLCAnWkxJQl9FUlJOTycgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pMSUJfRklMVEVSRUQnID0+ICd6bGliL3psaWIuc3R1YicsICdaTElCX0ZJTklTSCcgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pMSUJfRklYRUQnID0+ICd6bGliL3psaWIuc3R1YicsICdaTElCX0ZVTExfRkxVU0gnID0+ICd6bGliL3psaWIuc3R1YicsICdaTElCX0hVRkZNQU5fT05MWScgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pMSUJfTUVNX0VSUk9SJyA9PiAnemxpYi96bGliLnN0dWInLCAnWkxJQl9ORUVEX0RJQ1QnID0+ICd6bGliL3psaWIuc3R1YicsICdaTElCX05PX0ZMVVNIJyA9PiAnemxpYi96bGliLnN0dWInLCAnWkxJQl9PSycgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pMSUJfUEFSVElBTF9GTFVTSCcgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pMSUJfUkxFJyA9PiAnemxpYi96bGliLnN0dWInLCAnWkxJQl9TVFJFQU1fRU5EJyA9PiAnemxpYi96bGliLnN0dWInLCAnWkxJQl9TVFJFQU1fRVJST1InID0+ICd6bGliL3psaWIuc3R1YicsICdaTElCX1NZTkNfRkxVU0gnID0+ICd6bGliL3psaWIuc3R1YicsICdaTElCX1ZFUk5VTScgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pMSUJfVkVSU0lPTicgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pMSUJfVkVSU0lPTl9FUlJPUicgPT4gJ3psaWIvemxpYi5zdHViJywgJ1pTVERfQ09NUFJFU1NfTEVWRUxfREVGQVVMVCcgPT4gJ3pzdGQvenN0ZC5zdHViJywgJ1pTVERfQ09NUFJFU1NfTEVWRUxfTUFYJyA9PiAnenN0ZC96c3RkLnN0dWInLCAnWlNURF9DT01QUkVTU19MRVZFTF9NSU4nID0+ICd6c3RkL3pzdGQuc3R1YicsICdfX0NMQVNTX18nID0+ICdzdGFuZGFyZC9iYXNpYy5zdHViJywgJ19fQ09NUElMRVJfSEFMVF9PRkZTRVRfXycgPT4gJ3N0YW5kYXJkL19zdGFuZGFyZF9tYW51YWwuc3R1YicsICdfX0RJUl9fJyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICdfX0ZJTEVfXycgPT4gJ3N0YW5kYXJkL2Jhc2ljLnN0dWInLCAnX19GVU5DVElPTl9fJyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICdfX0xJTkVfXycgPT4gJ3N0YW5kYXJkL2Jhc2ljLnN0dWInLCAnX19NRVRIT0RfXycgPT4gJ3N0YW5kYXJkL2Jhc2ljLnN0dWInLCAnX19OQU1FU1BBQ0VfXycgPT4gJ3N0YW5kYXJkL2Jhc2ljLnN0dWInLCAnX19UUkFJVF9fJyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICdfX2NsYXNzX18nID0+ICdzdGFuZGFyZC9iYXNpYy5zdHViJywgJ19fZGlyX18nID0+ICdzdGFuZGFyZC9iYXNpYy5zdHViJywgJ19fZmlsZV9fJyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICdfX2Z1bmN0aW9uX18nID0+ICdzdGFuZGFyZC9iYXNpYy5zdHViJywgJ19fbGluZV9fJyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICdfX21ldGhvZF9fJyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICdfX25hbWVzcGFjZV9fJyA9PiAnc3RhbmRhcmQvYmFzaWMuc3R1YicsICdfX3RyYWl0X18nID0+ICdzdGFuZGFyZC9iYXNpYy5zdHViJywgJ2FzdFxcQVNUX0FSR19MSVNUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0FSUkFZJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0FSUkFZX0VMRU0nID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfQVJST1dfRlVOQycgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9BU1NJR04nID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfQVNTSUdOX09QJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0FTU0lHTl9SRUYnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfQVRUUklCVVRFJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0FUVFJJQlVURV9HUk9VUCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9BVFRSSUJVVEVfTElTVCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9CSU5BUllfT1AnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfQlJFQUsnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfQ0FMTCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9DQVNUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0NBVENIJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0NBVENIX0xJU1QnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfQ0xBU1MnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfQ0xBU1NfQ09OU1QnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfQ0xBU1NfQ09OU1RfREVDTCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9DTEFTU19DT05TVF9HUk9VUCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9DTEFTU19OQU1FJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0NMT05FJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0NMT1NVUkUnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfQ0xPU1VSRV9VU0VTJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0NMT1NVUkVfVkFSJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0NPTkRJVElPTkFMJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0NPTlNUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0NPTlNUX0RFQ0wnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfQ09OU1RfRUxFTScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9DT05USU5VRScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9ERUNMQVJFJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0RJTScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9ET19XSElMRScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9FQ0hPJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0VNUFRZJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0VOQ0FQU19MSVNUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0VYSVQnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfRVhQUl9MSVNUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0ZPUicgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9GT1JFQUNIJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0ZVTkNfREVDTCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9HTE9CQUwnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfR09UTycgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9HUk9VUF9VU0UnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfSEFMVF9DT01QSUxFUicgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9JRicgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9JRl9FTEVNJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0lOQ0xVREVfT1JfRVZBTCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9JTlNUQU5DRU9GJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0lTU0VUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0xBQkVMJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX0xJU1QnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfTUFHSUNfQ09OU1QnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfTUFUQ0gnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfTUFUQ0hfQVJNJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX01BVENIX0FSTV9MSVNUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX01FVEhPRCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9NRVRIT0RfQ0FMTCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9NRVRIT0RfUkVGRVJFTkNFJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX05BTUUnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfTkFNRURfQVJHJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX05BTUVTUEFDRScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9OQU1FX0xJU1QnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfTkVXJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX05VTExBQkxFX1RZUEUnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfTlVMTFNBRkVfTUVUSE9EX0NBTEwnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfTlVMTFNBRkVfUFJPUCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9QQVJBTScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9QQVJBTV9MSVNUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX1BPU1RfREVDJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX1BPU1RfSU5DJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX1BSRV9ERUMnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfUFJFX0lOQycgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9QUklOVCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9QUk9QJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX1BST1BfREVDTCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9QUk9QX0VMRU0nID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfUFJPUF9HUk9VUCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9SRUYnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfUkVUVVJOJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX1NIRUxMX0VYRUMnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfU1RBVElDJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX1NUQVRJQ19DQUxMJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX1NUQVRJQ19QUk9QJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX1NUTVRfTElTVCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9TV0lUQ0gnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfU1dJVENIX0NBU0UnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfU1dJVENIX0xJU1QnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfVEhST1cnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfVFJBSVRfQURBUFRBVElPTlMnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfVFJBSVRfQUxJQVMnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfVFJBSVRfUFJFQ0VERU5DRScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9UUlknID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfVFlQRScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9UWVBFX1VOSU9OJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX1VOQVJZX09QJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX1VOUEFDSycgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9VTlNFVCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9VU0UnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfVVNFX0VMRU0nID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxBU1RfVVNFX1RSQUlUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcQVNUX1ZBUicgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9XSElMRScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9ZSUVMRCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXEFTVF9ZSUVMRF9GUk9NJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEFSUkFZX0VMRU1fUkVGJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEFSUkFZX1NZTlRBWF9MSVNUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEFSUkFZX1NZTlRBWF9MT05HJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEFSUkFZX1NZTlRBWF9TSE9SVCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxCSU5BUllfQUREJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEJJTkFSWV9CSVRXSVNFX0FORCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxCSU5BUllfQklUV0lTRV9PUicgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxCSU5BUllfQklUV0lTRV9YT1InID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcQklOQVJZX0JPT0xfQU5EJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEJJTkFSWV9CT09MX09SJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEJJTkFSWV9CT09MX1hPUicgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxCSU5BUllfQ09BTEVTQ0UnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcQklOQVJZX0NPTkNBVCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxCSU5BUllfRElWJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEJJTkFSWV9JU19FUVVBTCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxCSU5BUllfSVNfR1JFQVRFUicgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxCSU5BUllfSVNfR1JFQVRFUl9PUl9FUVVBTCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxCSU5BUllfSVNfSURFTlRJQ0FMJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEJJTkFSWV9JU19OT1RfRVFVQUwnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcQklOQVJZX0lTX05PVF9JREVOVElDQUwnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcQklOQVJZX0lTX1NNQUxMRVInID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcQklOQVJZX0lTX1NNQUxMRVJfT1JfRVFVQUwnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcQklOQVJZX01PRCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxCSU5BUllfTVVMJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEJJTkFSWV9QT1cnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcQklOQVJZX1NISUZUX0xFRlQnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcQklOQVJZX1NISUZUX1JJR0hUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEJJTkFSWV9TUEFDRVNISVAnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcQklOQVJZX1NVQicgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxDTEFTU19BQlNUUkFDVCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxDTEFTU19BTk9OWU1PVVMnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcQ0xBU1NfRklOQUwnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcQ0xBU1NfSU5URVJGQUNFJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXENMQVNTX1RSQUlUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXENMT1NVUkVfVVNFX1JFRicgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxESU1fQUxURVJOQVRJVkVfU1lOVEFYJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEVYRUNfRVZBTCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxFWEVDX0lOQ0xVREUnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcRVhFQ19JTkNMVURFX09OQ0UnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcRVhFQ19SRVFVSVJFJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEVYRUNfUkVRVUlSRV9PTkNFJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEZVTkNfR0VORVJBVE9SJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXEZVTkNfUkVUVVJOU19SRUYnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcTUFHSUNfQ0xBU1MnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcTUFHSUNfRElSJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXE1BR0lDX0ZJTEUnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcTUFHSUNfRlVOQ1RJT04nID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcTUFHSUNfTElORScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxNQUdJQ19NRVRIT0QnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcTUFHSUNfTkFNRVNQQUNFJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXE1BR0lDX1RSQUlUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXE1PRElGSUVSX0FCU1RSQUNUJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXE1PRElGSUVSX0ZJTkFMJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXE1PRElGSUVSX1BSSVZBVEUnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcTU9ESUZJRVJfUFJPVEVDVEVEJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXE1PRElGSUVSX1BVQkxJQycgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxNT0RJRklFUl9TVEFUSUMnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcTkFNRV9GUScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxOQU1FX05PVF9GUScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxOQU1FX1JFTEFUSVZFJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXFBBUkFNX01PRElGSUVSX1BSSVZBVEUnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcUEFSQU1fTU9ESUZJRVJfUFJPVEVDVEVEJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXFBBUkFNX01PRElGSUVSX1BVQkxJQycgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxQQVJBTV9SRUYnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcUEFSQU1fVkFSSUFESUMnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcUEFSRU5USEVTSVpFRF9DT05ESVRJT05BTCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxSRVRVUk5TX1JFRicgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxUWVBFX0FSUkFZJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXFRZUEVfQk9PTCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxUWVBFX0NBTExBQkxFJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXFRZUEVfRE9VQkxFJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXFRZUEVfRkFMU0UnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcVFlQRV9JVEVSQUJMRScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxUWVBFX0xPTkcnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcVFlQRV9NSVhFRCcgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxUWVBFX05VTEwnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcVFlQRV9PQkpFQ1QnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcVFlQRV9TVEFUSUMnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcVFlQRV9TVFJJTkcnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcVFlQRV9WT0lEJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXFVOQVJZX0JJVFdJU0VfTk9UJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXFVOQVJZX0JPT0xfTk9UJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXFVOQVJZX01JTlVTJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXFVOQVJZX1BMVVMnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcVU5BUllfU0lMRU5DRScgPT4gJ2FzdC9hc3Quc3R1YicsICdhc3RcXGZsYWdzXFxVU0VfQ09OU1QnID0+ICdhc3QvYXN0LnN0dWInLCAnYXN0XFxmbGFnc1xcVVNFX0ZVTkNUSU9OJyA9PiAnYXN0L2FzdC5zdHViJywgJ2FzdFxcZmxhZ3NcXFVTRV9OT1JNQUwnID0+ICdhc3QvYXN0LnN0dWInLCAnYmdyQkxBQ0snID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnYmdyQkxVRScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdiZ3JDWUFOJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ2JnckRBUktCTFVFJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ2JnckRBUktDWUFOJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ2JnckRBUktHUkFZJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ2JnckRBUktHUkVFTicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdiZ3JEQVJLTUFHRU5UQScgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdiZ3JEQVJLUkVEJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ2JnckRBUktZRUxMT1cnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnYmdyR1JFRU4nID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnYmdyTElHSFRHUkFZJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ2Jnck1BR0VOVEEnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnYmdyTk9DT0xPUicgPT4gJ3dpbmJpbmRlci93aW5iaW5kZXIuc3R1YicsICdiZ3JSRUQnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnYmdyV0hJVEUnID0+ICd3aW5iaW5kZXIvd2luYmluZGVyLnN0dWInLCAnYmdyWUVMTE9XJyA9PiAnd2luYmluZGVyL3dpbmJpbmRlci5zdHViJywgJ2ZhbHNlJyA9PiAnQ29yZS9Db3JlX2Quc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXEFVVEhfQU5ZJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcQVVUSF9CQVNJQycgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXEFVVEhfRElHRVNUJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcQVVUSF9ESUdFU1RfSUUnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxBVVRIX0dTU05FRycgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXEFVVEhfTlRMTScgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXEFVVEhfU1BORUdPJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcRkVBVFVSRVMnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxGZWF0dXJlc1xcQVNZTkNIRE5TJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcRmVhdHVyZXNcXEdTU0FQSScgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXEZlYXR1cmVzXFxHU1NORUdPVElBVEUnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxGZWF0dXJlc1xcSFRUUDInID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxGZWF0dXJlc1xcSUROJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcRmVhdHVyZXNcXElQVjYnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxGZWF0dXJlc1xcS0VSQkVST1M0JyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcRmVhdHVyZXNcXEtFUkJFUk9TNScgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXEZlYXR1cmVzXFxMQVJHRUZJTEUnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxGZWF0dXJlc1xcTElCWicgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXEZlYXR1cmVzXFxOVExNJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcRmVhdHVyZXNcXE5UTE1fV0InID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxGZWF0dXJlc1xcUFNMJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcRmVhdHVyZXNcXFNQTkVHTycgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXEZlYXR1cmVzXFxTU0wnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxGZWF0dXJlc1xcU1NQSScgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXEZlYXR1cmVzXFxUTFNBVVRIX1NSUCcgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXEZlYXR1cmVzXFxVTklYX1NPQ0tFVFMnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxIVFRQX1ZFUlNJT05fMV8wJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcSFRUUF9WRVJTSU9OXzFfMScgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXEhUVFBfVkVSU0lPTl8yVExTJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcSFRUUF9WRVJTSU9OXzJfMCcgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXEhUVFBfVkVSU0lPTl9BTlknID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxJUFJFU09MVkVfQU5ZJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcSVBSRVNPTFZFX1Y0JyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcSVBSRVNPTFZFX1Y2JyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcUE9TVFJFRElSXzMwMScgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXFBPU1RSRURJUl8zMDInID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxQT1NUUkVESVJfMzAzJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcUE9TVFJFRElSX0FMTCcgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXFBST1hZX0hUVFAnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxQUk9YWV9IVFRQXzFfMCcgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXFBST1hZX1NPQ0tTNCcgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXFBST1hZX1NPQ0tTNEEnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxQUk9YWV9TT0NLUzUnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxQUk9YWV9TT0NLUzVfSE9TVE5BTUUnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxTU0xfVkVSU0lPTl9BTlknID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxTU0xfVkVSU0lPTl9TU0x2MicgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXFNTTF9WRVJTSU9OX1NTTHYzJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcU1NMX1ZFUlNJT05fVExTdjEnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxTU0xfVkVSU0lPTl9UTFN2MV8wJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcU1NMX1ZFUlNJT05fVExTdjFfMScgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXFNTTF9WRVJTSU9OX1RMU3YxXzInID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxUTFNBVVRIX1NSUCcgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXFZFUlNJT05TJyA9PiAnaHR0cC9odHRwMy5zdHViJywgJ2h0dHBcXENsaWVudFxcQ3VybFxcVmVyc2lvbnNcXEFSRVMnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxWZXJzaW9uc1xcQ1VSTCcgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXFZlcnNpb25zXFxJRE4nID0+ICdodHRwL2h0dHAzLnN0dWInLCAnaHR0cFxcQ2xpZW50XFxDdXJsXFxWZXJzaW9uc1xcTElCWicgPT4gJ2h0dHAvaHR0cDMuc3R1YicsICdodHRwXFxDbGllbnRcXEN1cmxcXFZlcnNpb25zXFxTU0wnID0+ICdodHRwL2h0dHAzLnN0dWInLCAnbnVsbCcgPT4gJ0NvcmUvQ29yZV9kLnN0dWInLCAncGNvdlxcYWxsJyA9PiAncGNvdi9wY292LnN0dWInLCAncGNvdlxcZXhjbHVzaXZlJyA9PiAncGNvdi9wY292LnN0dWInLCAncGNvdlxcaW5jbHVzaXZlJyA9PiAncGNvdi9wY292LnN0dWInLCAncGNvdlxcdmVyc2lvbicgPT4gJ3Bjb3YvcGNvdi5zdHViJywgJ3RydWUnID0+ICdDb3JlL0NvcmVfZC5zdHViJywgJ3lhZlxcZW52aXJvbicgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAneWFmXFxlcnJcXGF1dG9sb2FkXFxmYWlsZWQnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ3lhZlxcZXJyXFxjYWxsXFxmYWlsZWQnID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ3lhZlxcZXJyXFxkaXNwYXRjaFxcZmFpbGVkJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICd5YWZcXGVyclxcbm90Zm91bmRcXGFjdGlvbicgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAneWFmXFxlcnJcXG5vdGZvdW5kXFxjb250cm9sbGVyJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICd5YWZcXGVyclxcbm90Zm91bmRcXG1vZHVsZScgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAneWFmXFxlcnJcXG5vdGZvdW5kXFx2aWV3JyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICd5YWZcXGVyclxccm91dGVcXGZhaWxlZCcgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAneWFmXFxlcnJcXHN0YXJ0dXBcXGZhaWxlZCcgPT4gJ3lhZi95YWZfbmFtZXNwYWNlLnN0dWInLCAneWFmXFxlcnJcXHR5cGVcXGVycm9yJyA9PiAneWFmL3lhZl9uYW1lc3BhY2Uuc3R1YicsICd5YWZcXHZlcnNpb24nID0+ICd5YWYveWFmX25hbWVzcGFjZS5zdHViJywgJ3lhZl9lbnZpcm9uJyA9PiAneWFmL3lhZi5zdHViJywgJ3lhZl9lcnJfYXV0b2xvYWRfZmFpbGVkJyA9PiAneWFmL3lhZi5zdHViJywgJ3lhZl9lcnJfY2FsbF9mYWlsZWQnID0+ICd5YWYveWFmLnN0dWInLCAneWFmX2Vycl9kaXNwYXRjaF9mYWlsZWQnID0+ICd5YWYveWFmLnN0dWInLCAneWFmX2Vycl9ub3Rmb3VuZF9hY3Rpb24nID0+ICd5YWYveWFmLnN0dWInLCAneWFmX2Vycl9ub3Rmb3VuZF9jb250cm9sbGVyJyA9PiAneWFmL3lhZi5zdHViJywgJ3lhZl9lcnJfbm90Zm91bmRfbW9kdWxlJyA9PiAneWFmL3lhZi5zdHViJywgJ3lhZl9lcnJfbm90Zm91bmRfdmlldycgPT4gJ3lhZi95YWYuc3R1YicsICd5YWZfZXJyX3JvdXRlX2ZhaWxlZCcgPT4gJ3lhZi95YWYuc3R1YicsICd5YWZfZXJyX3N0YXJ0dXBfZmFpbGVkJyA9PiAneWFmL3lhZi5zdHViJywgJ3lhZl9lcnJfdHlwZV9lcnJvcicgPT4gJ3lhZi95YWYuc3R1YicsICd5YWZfdmVyc2lvbicgPT4gJ3lhZi95YWYuc3R1YicpOwp9Cjw/cGhwCi8qKgogKiBUaGlzIGlzIGEgbW9kZXJuIGJpbmRpbmcgdG8gdGhlIG1hdHVyZSBbbGlicHFdKGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3N0YXRpYy9saWJwcS5odG1sKSwgdGhlIG9mZmljaWFsIFBvc3RncmVTUUwgQy1jbGllbnQgbGlicmFyeS4KICoKICogIyMjIEhpZ2hsaWdodHM6CiAqCiAqICogTmVhcmx5IDEwMCUgc3VwcG9ydCBmb3IgW2FzeW5jaHJvbm91cyB1c2FnZV0ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkuCiAqICogRXh0ZW5kZWQgW3R5cGUgc3VwcG9ydCBieSBwZ190eXBlXShwcS9UeXBlcy86IE92ZXJ2aWV3KS4KICogKiBGZXRjaGluZyBzaW1wbGUgW211bHRpLWRpbWVuc2lvbmFsIGFycmF5IG1hcHNdKHBxL1Jlc3VsdC9tYXApLgogKiAqIFdvcmtpbmcgW0dhdGV3YXkgaW1wbGVtZW50YXRpb25dKGh0dHBzOi8vYml0YnVja2V0Lm9yZy9tNnc2L3BxLWdhdGV3YXkpLgogKi8KCm5hbWVzcGFjZSBwcTsKCnVzZSBwcTsKCi8qKgogKiBGYXN0IGltcG9ydC9leHBvcnQgdXNpbmcgQ09QWS4KICovCmNsYXNzIENPUFkKewogICAgLyoqCiAgICAgKiBTdGFydCBhIENPUFkgb3BlcmF0aW9uIGZyb20gU1RESU4gdG8gdGhlIFBvc3RncmVTUUwgc2VydmVyLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRlJPTV9TVERJTiA9IDA7CgogICAgLyoqCiAgICAgKiBTdGFydCBhIENPUFkgb3BlcmF0aW9uIGZyb20gdGhlIHNlcnZlciB0byBTVERPVVQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUT19TVERPVVQgPSAxOwoKICAgIC8qKgogICAgICogVGhlIGNvbm5lY3Rpb24gdG8gdGhlIFBvc3RncmVTUUwgc2VydmVyLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBccHFcQ29ubmVjdGlvbgogICAgICovCiAgICBwdWJsaWMgJGNvbm5lY3Rpb247CgogICAgLyoqCiAgICAgKiBUaGUgZXhwcmVzc2lvbiBvZiB0aGUgQ09QWSBzdGF0ZW1lbnQgdXNlZCB0byBzdGFydCB0aGUgb3BlcmF0aW9uLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRleHByZXNzaW9uOwoKICAgIC8qKgogICAgICogVGhlIGRyZWN0aW9uIG9mIHRoZSBDT1BZIG9wZXJhdGlvbiAocHFcQ09QWTo6RlJPTV9TVERJTiBvciBwcVxDT1BZOjpUT19TVERPVVQpLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRkaXJlY3Rpb247CgogICAgLyoqCiAgICAgKiBBbnkgYWRkaXRpb25hbCBvcHRpb25zIHVzZWQgdG8gc3RhcnQgdGhlIENPUFkgb3BlcmF0aW9uLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRvcHRpb25zOwoKICAgIC8qKgogICAgICogU3RhcnQgYSBDT1BZIG9wZXJhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gXHBxXENvbm5lY3Rpb24gJGNvbm4gVGhlIGNvbm5lY3Rpb24gdG8gdXNlIGZvciB0aGUgQ09QWSBvcGVyYXRpb24uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIGdlbmVyYXRpbmcgdGhlIGRhdGEgdG8gY29weS4KICAgICAqIEBwYXJhbSBpbnQgJGRpcmVjdGlvbiBEYXRhIGRpcmVjdGlvbiAocHFcQ09QWTo6RlJPTV9TVERJTiBvciBwcVxDT1BZOjpUT19TVERPVVQpLgogICAgICogQHBhcmFtIHN0cmluZyAkb3B0aW9ucyBBbnkgQ09QWSBvcHRpb25zIChzZWUgdGhlIFtvZmZpY2lhbCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb25dKGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3N0YXRpYy9zcWwtY29weS5odG1sKSBmb3IgZGV0YWlscy4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ29ubmVjdGlvbiAkY29ubiwgc3RyaW5nICRleHByZXNzaW9uLCBpbnQgJGRpcmVjdGlvbiwgc3RyaW5nICRvcHRpb25zID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEVuZCB0aGUgQ09QWSBvcGVyYXRpb24gdG8gdGhlIHNlcnZlciBkdXJpbmcgcHFcUmVzdWx0OjpDT1BZX0lOIHN0YXRlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVycm9yIElmIHNldCwgdGhlIENPUFkgb3BlcmF0aW9uIHdpbGwgYWJvcnQgd2l0aCBwcm92aWRlZCBtZXNzYWdlLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmQoc3RyaW5nICRlcnJvciA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBSZWNlaXZlIGRhdGEgZnJvbSB0aGUgc2VydmVyIGR1cmluZyBwcVxSZXN1bHQ6OkNPUFlfT1VUIHN0YXRlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJiRkYXRhIERhdGEgcmVhZCBmcm9tIHRoZSBzZXJ2ZXIuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqIEByZXR1cm4gYm9vbCBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KHN0cmluZyAmJGRhdGEpIHt9CgogICAgLyoqCiAgICAgKiBTZW5kIGRhdGEgdG8gdGhlIHNlcnZlciBkdXJpbmcgcHFcUmVzdWx0OjpDT1BZX0lOIHN0YXRlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgRGF0YSB0byBzZW5kIHRvIHRoZSBzZXJ2ZXIuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1dChzdHJpbmcgJGRhdGEpIHt9Cn0KLyoqCiAqIFJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIGFzeW5jaHJvbm91cyBxdWVyeS4KICovCmNsYXNzIENhbmNlbAp7CiAgICAvKioKICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIGNhbmNlbCB0aGUgcXVlcnkgb24uCiAgICAgKgogICAgICogQHB1YmxpYwogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIFxwcVxDb25uZWN0aW9uCiAgICAgKi8KICAgIHB1YmxpYyAkY29ubmVjdGlvbjsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBjYW5jZWxsYXRpb24gcmVxdWVzdCBmb3IgYW4gW2FzeW5jaHJvbm91c10ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkgcXVlcnkuCiAgICAgKgogICAgICogQHBhcmFtIFxwcVxDb25uZWN0aW9uICRjb25uIFRoZSBjb25uZWN0aW9uIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9uLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb25uZWN0aW9uICRjb25uKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybSB0aGUgY2FuY2VsbGF0aW9uIHJlcXVlc3QuCiAgICAgKgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYW5jZWwoKSB7fQp9Ci8qKgogKiBUaGUgY29ubmVjdGlvbiB0byB0aGUgUG9zdGdyZVNRTCBzZXJ2ZXIuCiAqCiAqIFNlZSB0aGUgW0dlbmVyYWwgVXNhZ2VdKHBxL0Nvbm5lY3Rpb24vOiBHZW5lcmFsIFVzYWdlKSBwYWdlIGZvciBhbiBpbnRyb2R1Y3Rpb24gb24gaG93IHRvIHVzZSB0aGlzIGNsYXNzLgogKi8KY2xhc3MgQ29ubmVjdGlvbgp7CiAgICAvKioKICAgICAqIChSZS0pb3BlbiBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFBFUlNJU1RFTlQgPSAyOwoKICAgIC8qKgogICAgICogSWYgdGhlIGNvbm5lY3Rpb24gaXMgbm90IGFscmVhZHkgb3BlbiwgcGVyZm9ybSB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IFthc3luY2hyb25vdXNseV0ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBBU1lOQyA9IDE7CgogICAgLyoqCiAgICAgKiBFdmVyeXRoaW5nIHdlbGw7IGlmIGEgY29ubmVjdGlvbiBoYXMgYmVlbiBuZXdseSBhbmQgc3luY2hyb25vdXNseSBjcmVhdGVkLCB0aGUgY29ubmVjdGlvbiB3aWxsIGFsd2F5cyBoYXZlIHRoaXMgc3RhdHVzIHJpZ2h0IGFmdGVyIGNyZWF0aW9uLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT0sgPSAwOwoKICAgIC8qKgogICAgICogQnJva2VuIGNvbm5lY3Rpb247IGNvbnNpZGVyIHBxXENvbm5lY3Rpb246OnJlc2V0KCkgb3IgcmVjcmVhdGlvbi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEJBRCA9IDE7CgogICAgLyoqCiAgICAgKiBXYWl0aW5nIGZvciBjb25uZWN0aW9uIHRvIGJlIG1hZGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTVEFSVEVEID0gMjsKCiAgICAvKioKICAgICAqIENvbm5lY3Rpb24gb2theTsgd2FpdGluZyB0byBzZW5kLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgTUFERSA9IDM7CgogICAgLyoqCiAgICAgKiBXYWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEFXQUlUSU5HX1JFU1BPTlNFID0gNDsKCiAgICAvKioKICAgICAqIFJlY2VpdmVkIGF1dGhlbnRpY2F0aW9uOyB3YWl0aW5nIGZvciBiYWNrZW5kIHN0YXJ0LXVwIHRvIGZpbmlzaC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEFVVEhfT0sgPSA1OwoKICAgIC8qKgogICAgICogTmVnb3RpYXRpbmcgU1NMIGVuY3J5cHRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTU0xfU1RBUlRVUCA9IDc7CgogICAgLyoqCiAgICAgKiBOZWdvdGlhdGluZyBlbnZpcm9ubWVudC1kcml2ZW4gcGFyYW1ldGVyIHNldHRpbmdzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0VURU5WID0gNjsKCiAgICAvKioKICAgICAqIE5vIGFjdGl2ZSB0cmFuc2FjdGlvbi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFRSQU5TX0lETEUgPSAwOwoKICAgIC8qKgogICAgICogQSB0cmFuc2FjdGlvbiBjb21tYW5kIGlzIGluIHByb2dyZXNzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVFJBTlNfQUNUSVZFID0gMTsKCiAgICAvKioKICAgICAqIElkbGluZyBpbiBhIHZhbGlkIHRyYW5zYWN0aW9uIGJsb2NrLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVFJBTlNfSU5UUkFOUyA9IDI7CgogICAgLyoqCiAgICAgKiBJZGxpbmcgaW4gYSBmYWlsZWQgdHJhbnNhY3Rpb24gYmxvY2suCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUUkFOU19JTkVSUk9SID0gMzsKCiAgICAvKioKICAgICAqIEJhZCBjb25uZWN0aW9uLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVFJBTlNfVU5LTk9XTiA9IDQ7CgogICAgLyoqCiAgICAgKiBUaGUgY29ubmVjdGlvbiBwcm9jZWR1cmUgaGFzIGZhaWxlZC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTExJTkdfRkFJTEVEID0gMDsKCiAgICAvKioKICAgICAqIFNlbGVjdCBmb3IgcmVhZC1yZWFkaW5lc3MuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQT0xMSU5HX1JFQURJTkcgPSAxOwoKICAgIC8qKgogICAgICogU2VsZWN0IGZvciB3cml0ZS1yZWFkaW5lc3MuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQT0xMSU5HX1dSSVRJTkcgPSAyOwoKICAgIC8qKgogICAgICogVGhlIGNvbm5lY3Rpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IG1hZGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQT0xMSU5HX09LID0gMzsKCiAgICAvKioKICAgICAqIFJlZ2lzdGVyIHRoZSBldmVudCBoYW5kbGVyIGZvciBub3RpY2VzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVZFTlRfTk9USUNFID0gJ25vdGljZSc7CgogICAgLyoqCiAgICAgKiBSZWdpc3RlciB0aGUgZXZlbnQgaGFuZGxlciBmb3IgYW55IGNyZWF0ZWQgcmVzdWx0cy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEVWRU5UX1JFU1VMVCA9ICdyZXN1bHQnOwoKICAgIC8qKgogICAgICogUmVnaXN0ZXIgdGhlIGV2ZW50IGhhbmRsZXIgZm9yIGNvbm5lY3Rpb24gcmVzZXRzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVZFTlRfUkVTRVQgPSAncmVzZXQnOwoKICAgIC8qKgogICAgICogQSBbY29ubmVjdGlvbiBzdGF0dXMgY29uc3RhbnRdKHBxL0Nvbm5lY3Rpb24jQ29ubmVjdGlvbi5TdGF0dXM6KSB2YWx1ZS4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkc3RhdHVzOwoKICAgIC8qKgogICAgICogQSBbdHJhbnNhY3Rpb24gc3RhdHVzIGNvbnN0YW50XShwcS9Db25uZWN0aW9uI1RyYW5zYWN0aW9uLlN0YXR1czopIHZhbHVlLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICR0cmFuc2FjdGlvblN0YXR1czsKCiAgICAvKioKICAgICAqIFRoZSBzZXJ2ZXIgc29ja2V0IHJlc291cmNlLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciByZXNvdXJjZQogICAgICovCiAgICBwdWJsaWMgJHNvY2tldDsKCiAgICAvKioKICAgICAqIFdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gaXMgYnVzeSB3aXRoIFthc3luY2hyb25vdXMgb3BlcmF0aW9uc10ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkuCiAgICAgKgogICAgICogQHB1YmxpYwogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICRidXN5OwoKICAgIC8qKgogICAgICogQW55IGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZS4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkZXJyb3JNZXNzYWdlOwoKICAgIC8qKgogICAgICogTGlzdCBvZiByZWdpc3RlcmVkIGV2ZW50IGhhbmRsZXJzLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwdWJsaWMgJGV2ZW50SGFuZGxlcnM7CgogICAgLyoqCiAgICAgKiBDb25uZWN0aW9uIGNoYXJhY3RlciBzZXQuCiAgICAgKgogICAgICogQHB1YmxpYwogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRlbmNvZGluZyA9IG51bGw7CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRvIGZldGNoIFthc3luY2hyb25vdXNdKHBxL0Nvbm5lY3Rpb24vOiBBc3luY2hyb25vdXMgVXNhZ2UpIHJlc3VsdHMgaW4gdW5idWZmZXJlZCBtb2RlLCBpLmUuIGVhY2ggcm93IGdlbmVyYXRlcyBhIGRpc3RpbmN0IHBxXFJlc3VsdC4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICR1bmJ1ZmZlcmVkID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRvIHNldCB0aGUgdW5kZXJseWluZyBzb2NrZXQgbm9uYmxvY2tpbmcsIHVzZWZ1bCBmb3IgYXN5bmNocm9ub3VzIGhhbmRsaW5nIG9mIHdyaXRlcy4gU2VlIGFsc28gcHFcQ29ubmVjdGlvbjo6Zmx1c2goKS4KICAgICAqCiAgICAgKiAjIyMgQ29ubmVjdGlvbiBJbmZvcm1hdGlvbjoKICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICRub25ibG9ja2luZyA9IGZhbHNlOwoKICAgIC8qKgogICAgICogVGhlIGRhdGFiYXNlIG5hbWUgb2YgdGhlIGNvbm5lY3Rpb24uCiAgICAgKgogICAgICogQHB1YmxpYwogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGRiOwoKICAgIC8qKgogICAgICogVGhlIHVzZXIgbmFtZSBvZiB0aGUgY29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkdXNlcjsKCiAgICAvKioKICAgICAqIFRoZSBwYXNzd29yZCBvZiB0aGUgY29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkcGFzczsKCiAgICAvKioKICAgICAqIFRoZSBzZXJ2ZXIgaG9zdCBuYW1lIG9mIHRoZSBjb25uZWN0aW9uLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRob3N0OwoKICAgIC8qKgogICAgICogVGhlIHBvcnQgb2YgdGhlIGNvbm5lY3Rpb24uCiAgICAgKgogICAgICogQHB1YmxpYwogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJHBvcnQ7CgogICAgLyoqCiAgICAgKiBUaGUgY29tbWFuZC1saW5lIG9wdGlvbnMgcGFzc2VkIGluIHRoZSBjb25uZWN0aW9uIHJlcXVlc3QuCiAgICAgKgogICAgICogIyMjIEluaGVyaXRhYmxlIERlZmF1bHRzOgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRvcHRpb25zOwoKICAgIC8qKgogICAgICogRGVmYXVsdCBmZXRjaCB0eXBlIGZvciBmdXR1cmUgcHFcUmVzdWx0IGluc3RhbmNlcy4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGRlZmF1bHRGZXRjaFR5cGUgPSBccHFcUmVzdWx0OjpGRVRDSF9BUlJBWTsKCiAgICAvKioKICAgICAqIERlZmF1bHQgY29udmVyc2lvbiBiaXRtYXNrIGZvciBmdXR1cmUgcHFcUmVzdWx0IGluc3RhbmNlcy4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGRlZmF1bHRBdXRvQ29udmVydCA9IFxwcVxSZXN1bHQ6OkNPTlZfQUxMOwoKICAgIC8qKgogICAgICogRGVmYXVsdCB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgZm9yIGZ1dHVyZSBwcVxUcmFuc2FjdGlvbiBpbnN0YW5jZXMuCiAgICAgKgogICAgICogQHB1YmxpYwogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRkZWZhdWx0VHJhbnNhY3Rpb25Jc29sYXRpb24gPSBccHFcVHJhbnNhY3Rpb246OlJFQURfQ09NTUlUVEVEOwoKICAgIC8qKgogICAgICogRGVmYXVsdCB0cmFuc2FjdGlvbiByZWFkb25seW5lc3MgZm9yIGZ1dHVyZSBwcVxUcmFuc2FjdGlvbiBpbnN0YW5jZXMuCiAgICAgKgogICAgICogQHB1YmxpYwogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHB1YmxpYyAkZGVmYXVsdFRyYW5zYWN0aW9uUmVhZG9ubHkgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIERlZmF1bHQgdHJhbnNhY3Rpb24gZGVmZXJyYWJpbGl0eSBmb3IgZnV0dXJlIHBxXFRyYW5zYWN0aW9uIGluc3RhbmNlcy4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICRkZWZhdWx0VHJhbnNhY3Rpb25EZWZlcnJhYmxlID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgUG9zdGdyZVNRTCBjb25uZWN0aW9uLgogICAgICogU2VlIGFsc28gW0dlbmVyYWwgVXNhZ2VdKHBxL0Nvbm5lY3Rpb24vOiBHZW5lcmFsIFVzYWdlKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkc24gQSAqKipjb25uZWN0aW9uIHN0cmluZyoqKiBhcyBkZXNjcmliZWQgW2luIHRoZSBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb25dKGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3N0YXRpYy9saWJwcS1jb25uZWN0Lmh0bWwjTElCUFEtQ09OTlNUUklORykuCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBTZWUgW2Nvbm5lY3Rpb24gZmxhZyBjb25zdGFudHNdKHBxL0Nvbm5lY3Rpb24jQ29ubmVjdGlvbi5GbGFnczopLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGRzbiA9ICIiLCBpbnQgJGZsYWdzID0gMCkge30KCiAgICAvKioKICAgICAqIERlY2xhcmUgYSBjdXJzb3IgZm9yIGEgcXVlcnkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgaWRlbnRpZnlpbmcgbmFtZSBvZiB0aGUgY3Vyc29yLgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgQW55IGNvbWJpbmF0aW9uIG9mIHBxXEN1cnNvciBjb25zdGFudHMuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgcXVlcnkgZm9yIHdoaWNoIHRvIG9wZW4gYSBjdXJzb3IuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEByZXR1cm4gXHBxXEN1cnNvciBhbiBvcGVuIGN1cnNvciBpbnN0YW5jZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlY2xhcmUoc3RyaW5nICRuYW1lLCBpbnQgJGZsYWdzLCBzdHJpbmcgJHF1ZXJ5KSB7fQoKICAgIC8qKgogICAgICogW0FzeW5jaHJvbm91c2x5XShwcS9Db25uZWN0aW9uLzogQXN5bmNocm9ub3VzIFVzYWdlKSBkZWNsYXJlIGEgY3Vyc29yIGZvciBhIHF1ZXJ5LgogICAgICoKICAgICAqID4gKioqTk9URSoqKjoKICAgICAqICAgSWYgcHFcQ29ubmVjdGlvbjo6JHVuYnVmZmVyZWQgaXMgVFJVRSwgZWFjaCBjYWxsIHRvIHBxXENvbm5lY3Rpb246OmdldFJlc3VsdCgpIHdpbGwgZ2VuZXJhdGUgYSBkaXN0aW5jdCBwcVxSZXN1bHQgY29udGFpbmluZyBleGFjdGx5IG9uZSByb3cuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgaWRlbnRpZnlpbmcgbmFtZSBvZiB0aGUgY3Vyc29yLgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgQW55IGNvbWJpbmF0aW9uIG9mIHBxXEN1cnNvciBjb25zdGFudHMuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgcXVlcnkgZm9yIHdoaWNoIHRvIG9wZW4gYSBjdXJzb3IuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEByZXR1cm4gXHBxXEN1cnNvciBhbiBvcGVuIGN1cnNvciBpbnN0YW5jZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlY2xhcmVBc3luYyhzdHJpbmcgJG5hbWUsIGludCAkZmxhZ3MsIHN0cmluZyAkcXVlcnkpIHt9CgogICAgLyoqCiAgICAgKiBFc2NhcGUgYmluYXJ5IGRhdGEgZm9yIHVzZSB3aXRoaW4gYSBxdWVyeSB3aXRoIHRoZSB0eXBlIGJ5dGVhLgogICAgICoKICAgICAqICoqKk5PVEU6KioqCiAgICAgKiBUaGUgcmVzdWx0IGlzIG5vdCB3cmFwcGVkIGluIHNpbmdsZSBxdW90ZXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYmluYXJ5IFRoZSBiaW5hcnkgZGF0YSB0byBlc2NhcGUuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2Ugc3RyaW5nIHRoZSBlc2NhcGVkIGJpbmFyeSBkYXRhLgogICAgICogCQkgb3IgRkFMU0UgaWYgZXNjYXBpbmcgZmFpbHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlc2NhcGVCeXRlYShzdHJpbmcgJGJpbmFyeSkge30KCiAgICAvKioKICAgICAqIFtFeGVjdXRlIG9uZSBvciBtdWx0aXBsZSBTUUwgcXVlcmllc10ocHEvQ29ubmVjdGlvbi86IEV4ZWN1dGluZyBRdWVyaWVzKSBvbiB0aGUgY29ubmVjdGlvbi4KICAgICAqCiAgICAgKiAqKipOT1RFOioqKgogICAgICogT25seSB0aGUgbGFzdCByZXN1bHQgd2lsbCBiZSByZXR1cm5lZCwgaWYgdGhlIHF1ZXJ5IHN0cmluZyBjb250YWlucyBtb3JlIHRoYW4gb25lIFNRTCBxdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgcXVlcmllcyB0byBzZW5kIHRvIHRoZSBzZXJ2ZXIsIHNlcGFyYXRlZCBieSBzZW1pLWNvbG9uLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cRG9tYWluRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIFxwcVxSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWMoc3RyaW5nICRxdWVyeSkge30KCiAgICAvKioKICAgICAqIFtBc3luY2hyb25vdXNseV0ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkgW2V4ZWN1dGUgYW4gU1FMIHF1ZXJ5XShwcS9Db25uZWN0aW9uOiBFeGVjdXRpbmcgUXVlcmllcykgb24gdGhlIGNvbm5lY3Rpb24uCiAgICAgKgogICAgICogPiAqKipOT1RFKioqOgogICAgICogICBJZiBwcVxDb25uZWN0aW9uOjokdW5idWZmZXJlZCBpcyBUUlVFLCBlYWNoIGNhbGwgdG8gcHFcQ29ubmVjdGlvbjo6Z2V0UmVzdWx0KCkgd2lsbCBnZW5lcmF0ZSBhIGRpc3RpbmN0IHBxXFJlc3VsdCBjb250YWluaW5nIGV4YWN0bHkgb25lIHJvdy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgcXVlcnkgdG8gc2VuZCB0byB0aGUgc2VydmVyLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBhcyBmdW5jdGlvbihwcVxSZXN1bHQgJHJlcykKICAgICAqICAgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgcXVlcnkgZmluaXNoZXMuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWNBc3luYyhzdHJpbmcgJHF1ZXJ5LCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogW0V4ZWN1dGUgYW4gU1FMIHF1ZXJ5XShwcS9Db25uZWN0aW9uOiBFeGVjdXRpbmcgUXVlcmllcykgd2l0aCBwcm9wZXJseSBlc2NhcGVkIHBhcmFtZXRlcnMgc3Vic3RpdHV0ZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHF1ZXJ5IHRvIGV4ZWN1dGUuCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBUaGUgcGFyYW1ldGVyIGxpc3QgdG8gc3Vic3RpdHV0ZS4KICAgICAqIEBwYXJhbSBhcnJheSAkdHlwZXMgQ29ycmVzcG9uZGluZyBsaXN0IG9mIHR5cGUgT0lEcyBmb3IgdGhlIHBhcmFtZXRlcnMuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXERvbWFpbkV4Y2VwdGlvbgogICAgICogQHJldHVybiBccHFcUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjUGFyYW1zKHN0cmluZyAkcXVlcnksIGFycmF5ICRwYXJhbXMsIGFycmF5ICR0eXBlcyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBbQXN5bmNocm9ub3VzbHldKHBxL0Nvbm5lY3Rpb24vOiBBc3luY2hyb25vdXMgVXNhZ2UpIFtleGVjdXRlIGFuIFNRTCBxdWVyeV0ocHEvQ29ubmVjdGlvbjogRXhlY3V0aW5nIFF1ZXJpZXMpIHdpdGggcHJvcGVybHkgZXNjYXBlZCBwYXJhbWV0ZXJzIHN1YnN0aXR1dGVkLgogICAgICoKICAgICAqID4gKioqTk9URSoqKjoKICAgICAqICAgSWYgcHFcQ29ubmVjdGlvbjo6JHVuYnVmZmVyZWQgaXMgVFJVRSwgZWFjaCBjYWxsIHRvIHBxXENvbm5lY3Rpb246OmdldFJlc3VsdCgpIHdpbGwgZ2VuZXJhdGUgYSBkaXN0aW5jdCBwcVxSZXN1bHQgY29udGFpbmluZyBleGFjdGx5IG9uZSByb3cuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHF1ZXJ5IHRvIGV4ZWN1dGUuCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtcyBUaGUgcGFyYW1ldGVyIGxpc3QgdG8gc3Vic3RpdHV0ZS4KICAgICAqIEBwYXJhbSBhcnJheSAkdHlwZXMgQ29ycmVzcG9uZGluZyBsaXN0IG9mIHR5cGUgT0lEcyBmb3IgdGhlIHBhcmFtZXRlcnMuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNiIGFzIGZ1bmN0aW9uKFxwcVxSZXN1bHQgJHJlcykgOiB2b2lkCiAgICAgKiAgIFJlc3VsdCBoYW5kbGVyIGNhbGxiYWNrLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjUGFyYW1zQXN5bmMoc3RyaW5nICRxdWVyeSwgYXJyYXkgJHBhcmFtcywgYXJyYXkgJHR5cGVzID0gbnVsbCwgY2FsbGFibGUgJGNiID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEZsdXNoIHBlbmRpbmcgd3JpdGVzIG9uIHRoZSBjb25uZWN0aW9uLgogICAgICogQ2FsbCBhZnRlciBzZW5kaW5nIGFueSBjb21tYW5kIG9yIGRhdGEgb24gYSBub25ibG9ja2luZyBjb25uZWN0aW9uLgogICAgICoKICAgICAqIElmIGl0IHJldHVybnMgRkFMU0UsIHdhaXQgZm9yIHRoZSBzb2NrZXQgdG8gYmVjb21lIHJlYWQgb3Igd3JpdGUtcmVhZHkuCiAgICAgKiBJZiBpdCBiZWNvbWVzIHdyaXRlLXJlYWR5LCBjYWxsIHBxXENvbm5lY3Rpb246OmZsdXNoKCkgYWdhaW4uCiAgICAgKiBJZiBpdCBiZWNvbWVzIHJlYWQtcmVhZHksIGNhbGwgcHFcQ29ubmVjdGlvbjo6cG9sbCgpLCB0aGVuIGNhbGwgcHFcQ29ubmVjdGlvbjo6Zmx1c2goKSBhZ2Fpbi4KICAgICAqIFJlcGVhdCB1bnRpbCBwcVxDb25uZWN0aW9uOjpmbHVzaCgpIHJldHVybnMgVFJVRS4KICAgICAqCiAgICAgKiAqKipOT1RFOioqKgogICAgICogVGhpcyBtZXRob2Qgd2FzIGFkZGVkIGluIHYxLjEuMCwgcmVzcC4gdjIuMS4wLgogICAgICoKICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIGJvb2wgd2hldGhlciBldmVyeXRoaW5nIGhhcyBiZWVuIGZsdXNoZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmbHVzaCgpIHt9CgogICAgLyoqCiAgICAgKiBGZXRjaCB0aGUgcmVzdWx0IG9mIGFuIFthc3luY2hyb25vdXNdKHBxL0Nvbm5lY3Rpb24vOiBBc3luY2hyb25vdXMgVXNhZ2UpIHF1ZXJ5LgogICAgICoKICAgICAqIElmIHRoZSBxdWVyeSBoYXNuJ3QgZmluaXNoZWQgeWV0LCB0aGUgY2FsbCB3aWxsIGJsb2NrIHVudGlsIHRoZSByZXN1bHQgaXMgYXZhaWxhYmxlLgogICAgICoKICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIFxwcVxSZXN1bHR8bnVsbCBOVUxMIGlmIHRoZXJlIGhhcyBub3QgYmVlbiBhIHF1ZXJ5CiAgICAgKiAJCSBvciBccHFcUmVzdWx0IHdoZW4gdGhlIHF1ZXJ5IGhhcyBmaW5pc2hlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzdWx0KCkge30KCiAgICAvKioKICAgICAqIExpc3RlbiBvbiAkY2hhbm5lbCBmb3Igbm90aWZpY2F0aW9ucy4KICAgICAqIFNlZSBwcVxDb25uZWN0aW9uOjp1bmxpc3RlbigpLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNoYW5uZWwgVGhlIGNoYW5uZWwgdG8gbGlzdGVuIG9uLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRsaXN0ZW5lciBhcyBmdW5jdGlvbihzdHJpbmcgJGNoYW5uZWwsIHN0cmluZyAkbWVzc2FnZSwgaW50ICRwaWQpCiAgICAgKiAgIEEgY2FsbGJhY2sgYXV0b21hdGljYWxseSBjYWxsZWQgd2hlbmV2ZXIgYSBub3RpZmljYXRpb24gb24gJGNoYW5uZWwgYXJyaXZlcy4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdGVuKHN0cmluZyAkY2hhbm5lbCwgY2FsbGFibGUgJGxpc3RlbmVyKSB7fQoKICAgIC8qKgogICAgICogW0FzeW5jaHJvbm91c2x5XShwcS9Db25uZWN0aW9uLzogQXN5bmNocm9ub3VzIFVzYWdlKSBzdGFydCBsaXN0ZW5pbmcgb24gJGNoYW5uZWwgZm9yIG5vdGlmaWNhdGlvbnMuCiAgICAgKiBTZWUgcHFcQ29ubmVjdGlvbjo6bGlzdGVuKCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2hhbm5lbCBUaGUgY2hhbm5lbCB0byBsaXN0ZW4gb24uCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGxpc3RlbmVyIGFzIGZ1bmN0aW9uKHN0cmluZyAkY2hhbm5lbCwgc3RyaW5nICRtZXNzYWdlLCBpbnQgJHBpZCkKICAgICAqICAgQSBjYWxsYmFjayBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuZXZlciBhIG5vdGlmaWNhdGlvbiBvbiAkY2hhbm5lbCBhcnJpdmVzLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0ZW5Bc3luYyhzdHJpbmcgJGNoYW5uZWwsIGNhbGxhYmxlICRsaXN0ZW5lcikge30KCiAgICAvKioKICAgICAqIE5vdGlmeSBhbGwgbGlzdGVuZXJzIG9uICRjaGFubmVsIHdpdGggJG1lc3NhZ2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2hhbm5lbCBUaGUgY2hhbm5lbCB0byBub3RpZnkuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIHNlbmQuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5vdGlmeShzdHJpbmcgJGNoYW5uZWwsIHN0cmluZyAkbWVzc2FnZSkge30KCiAgICAvKioKICAgICAqIFtBc3luY2hyb25vdXNseV0ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkgc3RhcnQgbm90aWZ5aW5nIGFsbCBsaXN0ZW5lcnMgb24gJGNoYW5uZWwgd2l0aCAkbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjaGFubmVsIFRoZSBjaGFubmVsIHRvIG5vdGlmeS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gc2VuZC4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbm90aWZ5QXN5bmMoc3RyaW5nICRjaGFubmVsLCBzdHJpbmcgJG1lc3NhZ2UpIHt9CgogICAgLyoqCiAgICAgKiBTdG9wcyBsaXN0ZW5pbmcgZm9yIGFuIGV2ZW50IHR5cGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZXZlbnQgQW55IHBxXENvbm5lY3Rpb246OkVWRU5UXyouCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHJldHVybiBib29sIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmYoc3RyaW5nICRldmVudCkge30KCiAgICAvKioKICAgICAqIExpc3RlbiBmb3IgYW4gZXZlbnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZXZlbnQgQW55IHBxXENvbm5lY3Rpb246OkVWRU5UXyouCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIGFzIGZ1bmN0aW9uKHBxXENvbm5lY3Rpb24gJGNbLCBwcVxSZXN1bHQgJHIpCiAgICAgKiAgIFRoZSBjYWxsYmFjayB0byBpbnZva2Ugb24gZXZlbnQuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHJldHVybiBpbnQgbnVtYmVyIG9mIHByZXZpb3VzbHkgYXR0YWNoZWQgZXZlbnQgbGlzdGVuZXJzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb24oc3RyaW5nICRldmVudCwgY2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKICAgIC8qKgogICAgICogUG9sbCBhbiBbYXN5bmNocm9ub3VzbHldKHBxL0Nvbm5lY3Rpb24vOiBBc3luY2hyb25vdXMgVXNhZ2UpIG9wZXJhdGluZyBjb25uZWN0aW9uLgogICAgICogU2VlIHBxXENvbm5lY3Rpb246OnJlc2V0QXN5bmMoKSBmb3IgYW4gdXNhZ2UgZXhhbXBsZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEByZXR1cm4gaW50IHBxXENvbm5lY3Rpb246OlBPTExJTkdfKiBjb25zdGFudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9sbCgpIHt9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlIGEgbmFtZWQgc3RhdGVtZW50IGZvciBsYXRlciBleGVjdXRpb24gd2l0aCBwcVxTdGF0ZW1lbnQ6OmV4ZWN1dGUoKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBpZGVudGlmeWluZyBuYW1lIG9mIHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWVyeSBUaGUgcXVlcnkgdG8gcHJlcGFyZS4KICAgICAqIEBwYXJhbSBhcnJheSAkdHlwZXMgQW4gYXJyYXkgb2YgdHlwZSBPSURzIGZvciB0aGUgc3Vic3RpdHV0aW9uIHBhcmFtZXRlcnMuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqIEByZXR1cm4gXHBxXFN0YXRlbWVudCBhIHByZXBhcmVkIHN0YXRlbWVudCBpbnN0YW5jZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXBhcmUoc3RyaW5nICRuYW1lLCBzdHJpbmcgJHF1ZXJ5LCBhcnJheSAkdHlwZXMgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogW0FzeW5jaHJvbm91c2x5XShwcS9Db25uZWN0aW9uLzogQXN5bmNocm9ub3VzIFVzYWdlKSBwcmVwYXJlIGEgbmFtZWQgc3RhdGVtZW50IGZvciBsYXRlciBleGVjdXRpb24gd2l0aCBwcVxTdGF0ZW1lbnQ6OmV4ZWMoKS4KICAgICAqCiAgICAgKiA+ICoqKk5PVEUqKio6CiAgICAgKiAgIElmIHBxXENvbm5lY3Rpb246OiR1bmJ1ZmZlcmVkIGlzIFRSVUUsIGVhY2ggY2FsbCB0byBwcVxDb25uZWN0aW9uOjpnZXRSZXN1bHQoKSB3aWxsIGdlbmVyYXRlIGEgZGlzdGluY3QgcHFcUmVzdWx0IGNvbnRhaW5pbmcgZXhhY3RseSBvbmUgcm93LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIGlkZW50aWZ5aW5nIG5hbWUgb2YgdGhlIHByZXBhcmVkIHN0YXRlbWVudC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IFRoZSBxdWVyeSB0byBwcmVwYXJlLgogICAgICogQHBhcmFtIGFycmF5ICR0eXBlcyBBbiBhcnJheSBvZiB0eXBlIE9JRHMgZm9yIHRoZSBzdWJzdGl0dXRpb24gcGFyYW1ldGVycy4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICogQHJldHVybiBccHFcU3RhdGVtZW50IGEgcHJlcGFyZWQgc3RhdGVtZW50IGluc3RhbmNlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJlcGFyZUFzeW5jKHN0cmluZyAkbmFtZSwgc3RyaW5nICRxdWVyeSwgYXJyYXkgJHR5cGVzID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFF1b3RlIGEgc3RyaW5nIGZvciBzYWZlIHVzZSBpbiBhIHF1ZXJ5LgogICAgICogVGhlIHJlc3VsdCBpcyB0cnVuY2F0ZWQgYXQgYW55IHplcm8gYnl0ZSBhbmQgd3JhcHBlZCBpbiBzaW5nbGUgcXVvdGVzLgogICAgICoKICAgICAqICoqKk5PVEU6KioqCiAgICAgKiBCZXdhcmUgb2YgbWF0Y2hpbmcgY2hhcmFjdGVyIGVuY29kaW5ncy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXlsb2FkIFRoZSBwYXlsb2FkIHRvIHF1b3RlIGZvciB1c2UgaW4gYSBxdWVyeS4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBzdHJpbmcgYSBzaW5nbGUtcXVvdGUgd3JhcHBlZCBzdHJpbmcgc2FmZSBmb3IgbGl0ZXJhbCB1c2UgaW4gYSBxdWVyeS4KICAgICAqIAkJIG9yIEZBTFNFIGlmIHF1b3RpbmcgZmFpbHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBxdW90ZShzdHJpbmcgJHBheWxvYWQpIHt9CgogICAgLyoqCiAgICAgKiBRdW90ZSBhbiBpZGVudGlmaWVyIGZvciBzYWZlIHVzYWdlIGFzIG5hbWUuCiAgICAgKgogICAgICogKioqTk9URToqKioKICAgICAqIEJld2FyZSBvZiBjYXNlLXNlbnNpdGl2aXR5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgdG8gcXVvdGUuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2Ugc3RyaW5nIHRoZSBxdW90ZWQgaWRlbnRpZmllci4KICAgICAqIAkJIG9yIEZBTFNFIGlmIHF1b3RpbmcgZmFpbHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBxdW90ZU5hbWUoc3RyaW5nICRuYW1lKSB7fQoKICAgIC8qKgogICAgICogQXR0ZW1wdCB0byByZXNldCBhIHBvc3NpYmx5IGJyb2tlbiBjb25uZWN0aW9uIHRvIGEgd29ya2luZyBzdGF0ZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc2V0KCkge30KCiAgICAvKioKICAgICAqIFtBc3luY2hyb25vdXNseV0ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkgcmVzZXQgYSBwb3NzaWJseSBicm9rZW4gY29ubmVjdGlvbiB0byBhIHdvcmtpbmcgc3RhdGUuCiAgICAgKgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNldEFzeW5jKCkge30KCiAgICAvKioKICAgICAqIFNldCBhIGRhdGEgdHlwZSBjb252ZXJ0ZXIuCiAgICAgKgogICAgICogQHBhcmFtIFxwcVxDb252ZXJ0ZXIgJGNvbnZlcnRlciBBbiBpbnN0YW5jZSBpbXBsZW1lbnRpbmcgcHFcQ29udmVydGVyLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbnZlcnRlcihDb252ZXJ0ZXIgJGNvbnZlcnRlcikge30KCiAgICAvKioKICAgICAqIEJlZ2luIGEgdHJhbnNhY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaXNvbGF0aW9uIEFueSBwcVxUcmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgY29uc3RhbnQKICAgICAqICAgKGRlZmF1bHRzIHRvIHBxXENvbm5lY3Rpb246OiRkZWZhdWx0VHJhbnNhY3Rpb25Jc29sYXRpb24pLgogICAgICogQHBhcmFtIGJvb2wgJHJlYWRvbmx5IFdoZXRoZXIgdGhlIHRyYW5zYWN0aW9uIGV4ZWN1dGVzIG9ubHkgcmVhZHMKICAgICAqICAgKGRlZmF1bHRzIHRvIHBxXENvbm5lY3Rpb246OiRkZWZhdWx0VHJhbnNhY3Rpb25SZWFkb25seSkuCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVmZXJyYWJsZSBXaGV0aGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBkZWZlcnJhYmxlCiAgICAgKiAgIChkZWZhdWx0cyB0byBwcVxDb25uZWN0aW9uOjokZGVmYXVsdFRyYW5zYWN0aW9uRGVmZXJyYWJsZSkuCiAgICAgKgogICAgICogKioqTk9URToqKioKICAgICAqIEEgdHJhbnNhY3Rpb24gY2FuIG9ubHkgYmUgZGVmZXJyYWJsZSBpZiBpdCBhbHNvIGlzIHJlYWRvbmx5IGFuZCBzZXJpYWxpemFibGUuCiAgICAgKiBTZWUgdGhlIG9mZmljaWFsIFtQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb25dKGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3N0YXRpYy9zcWwtc2V0LXRyYW5zYWN0aW9uLmh0bWwpIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gXHBxXFRyYW5zYWN0aW9uIGEgYmVndW4gdHJhbnNhY3Rpb24gaW5zdGFuY2UuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0YXJ0VHJhbnNhY3Rpb24oaW50ICRpc29sYXRpb24gPSBccHFcVHJhbnNhY3Rpb246OlJFQURfQ09NTUlUVEVELCBib29sICRyZWFkb25seSA9IGZhbHNlLCBib29sICRkZWZlcnJhYmxlID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiBbQXN5bmNocm9ub3VzbHldKHBxL0Nvbm5lY3Rpb24vOiBBc3luY2hyb25vdXMgVXNhZ2UpIGJlZ2luIGEgdHJhbnNhY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaXNvbGF0aW9uIEFueSBwcVxUcmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgY29uc3RhbnQKICAgICAqICAgKGRlZmF1bHRzIHRvIHBxXENvbm5lY3Rpb246OiRkZWZhdWx0VHJhbnNhY3Rpb25Jc29sYXRpb24pLgogICAgICogQHBhcmFtIGJvb2wgJHJlYWRvbmx5IFdoZXRoZXIgdGhlIHRyYW5zYWN0aW9uIGV4ZWN1dGVzIG9ubHkgcmVhZHMKICAgICAqICAgKGRlZmF1bHRzIHRvIHBxXENvbm5lY3Rpb246OiRkZWZhdWx0VHJhbnNhY3Rpb25SZWFkb25seSkuCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVmZXJyYWJsZSBXaGV0aGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBkZWZlcnJhYmxlCiAgICAgKiAgIChkZWZhdWx0cyB0byBwcVxDb25uZWN0aW9uOjokZGVmYXVsdFRyYW5zYWN0aW9uRGVmZXJyYWJsZSkuCiAgICAgKgogICAgICogKioqTk9URToqKioKICAgICAqIEEgdHJhbnNhY3Rpb24gY2FuIG9ubHkgYmUgZGVmZXJyYWJsZSBpZiBpdCBhbHNvIGlzIHJlYWRvbmx5IGFuZCBzZXJpYWxpemFibGUuCiAgICAgKiBTZWUgdGhlIG9mZmljaWFsIFtQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb25dKGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3N0YXRpYy9zcWwtc2V0LXRyYW5zYWN0aW9uLmh0bWwpIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gXHBxXFRyYW5zYWN0aW9uIGFuIGFzeW5jaHJvbm91c2x5IGJlZ3VuIHRyYW5zYWN0aW9uIGluc3RhbmNlLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdGFydFRyYW5zYWN0aW9uQXN5bmMoaW50ICRpc29sYXRpb24gPSBccHFcVHJhbnNhY3Rpb246OlJFQURfQ09NTUlUVEVELCBib29sICRyZWFkb25seSA9IGZhbHNlLCBib29sICRkZWZlcnJhYmxlID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiBUcmFjZSBwcm90b2NvbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHNlcnZlci4KICAgICAqCiAgICAgKiAqKipOT1RFOioqKgogICAgICogQ2FsbGluZyBwcVxDb25uZWN0aW9uOjp0cmFjZSgpIHdpdGhvdXQgYXJndW1lbnQgb3IgTlVMTCBzdG9wcyB0cmFjaW5nLgogICAgICoKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkc3RyZWFtIFRoZSByZXNvdXJjZSB0byB3aGljaCB0aGUgcHJvdG9jb2wgdHJhY2Ugd2lsbCBiZSBvdXRwdXQuCiAgICAgKiAgIChUaGUgc3RyZWFtIG11c3QgYmUgY2FzdGFibGUgdG8gU1RESU8pLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEByZXR1cm4gYm9vbCBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdHJhY2UoJHN0cmVhbSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBVbmVzY2FwZSBieXRlYSBkYXRhIHJldHJpZXZlZCBmcm9tIHRoZSBzZXJ2ZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYnl0ZWEgQnl0ZWEgZGF0YSByZXRyaWV2ZWQgZnJvbSB0aGUgc2VydmVyLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHN0cmluZyB1bmVzY2FwZWQgYmluYXJ5IGRhdGEuCiAgICAgKiAJCSBvciBGQUxTRSBpZiB1bmVzY2FwaW5nIGZhaWxzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5lc2NhcGVCeXRlYShzdHJpbmcgJGJ5dGVhKSB7fQoKICAgIC8qKgogICAgICogU3RvcCBsaXN0ZW5pbmcgZm9yIG5vdGlmaWNhdGlvbnMgb24gY2hhbm5lbCAkY2hhbm5lbC4KICAgICAqIFNlZSBwcVxDb25uZWN0aW9uOjpsaXN0ZW4oKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjaGFubmVsIFRoZSBuYW1lIG9mIGEgY2hhbm5lbCB3aGljaCBpcyBjdXJyZW50bHkgbGlzdGVuZWQgb24uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVubGlzdGVuKHN0cmluZyAkY2hhbm5lbCkge30KCiAgICAvKioKICAgICAqIFtBc3luY2hyb25vdXNseV0ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkgc3RvcCBsaXN0ZW5pbmcgZm9yIG5vdGlmaWNhdGlvbnMgb24gY2hhbm5lbCAkY2hhbm5lbC4KICAgICAqIFNlZSBwcVxDb25uZWN0aW9uOjp1bmxpc3RlbigpIGFuZCBwcVxDb25uZWN0aW9uOjpsaXN0ZW5Bc3luYygpLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNoYW5uZWwgVGhlIG5hbWUgb2YgYSBjaGFubmVsIHdoaWNoIGlzIGN1cnJlbnRseSBsaXN0ZW5lZCBvbi4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5saXN0ZW5Bc3luYyhzdHJpbmcgJGNoYW5uZWwpIHt9CgogICAgLyoqCiAgICAgKiBTdG9wIGFwcGx5aW5nIGEgZGF0YSB0eXBlIGNvbnZlcnRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gXHBxXENvbnZlcnRlciAkY29udmVydGVyIEEgY29udmVydGVyIHByZXZpb3VzbHkgc2V0IHdpdGggcHFcQ29ubmVjdGlvbjo6c2V0Q29udmVydGVyKCkuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXRDb252ZXJ0ZXIoQ29udmVydGVyICRjb252ZXJ0ZXIpIHt9Cn0KLyoqCiAqIEludGVyZmFjZSBmb3IgdHlwZSBjb252ZXJzaW9ucy4KICovCmludGVyZmFjZSBDb252ZXJ0ZXIKewogICAgLyoqCiAgICAgKiBDb252ZXJ0IGEgc3RyaW5nIHJlY2VpdmVkIGZyb20gdGhlIFBvc3RncmVTUUwgc2VydmVyIGJhY2sgdG8gYSBQSFAgdHlwZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIFN0cmluZyBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci4KICAgICAqIEBwYXJhbSBpbnQgJHR5cGUgVGhlIHR5cGUgT0lEIG9mIHRoZSBkYXRhLiBJcnJlbGV2YW50IGZvciBzaW5nbGUtdHlwZSBjb252ZXJ0ZXJzLgogICAgICogQHJldHVybiBtaXhlZCB0aGUgdmFsdWUgY29udmVydGVkIHRvIGEgUEhQIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb252ZXJ0RnJvbVN0cmluZyhzdHJpbmcgJGRhdGEsIGludCAkdHlwZSk7CgogICAgLyoqCiAgICAgKiBDb252ZXJ0IGEgdmFsdWUgdG8gYSBzdHJpbmcgZm9yIHVzZSBpbiBhIHF1ZXJ5LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgVGhlIFBIUCB2YWx1ZSB3aGljaCBzaG91bGQgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nLgogICAgICogQHBhcmFtIGludCAkdHlwZSBUaGUgdHlwZSBPSUQgdGhlIGNvbnZlcnRlciBzaG91bGQgaGFuZGxlLiBJcnJlbGV2YW50IGZvciBzaW5nbHktdHlwZSBjb252ZXJ0ZXJzLgogICAgICogQHJldHVybiBzdHJpbmcgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZSBhY2NlcHRlZCBieSB0aGUgUG9zdGdyZVNRTCBzZXJ2ZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb252ZXJ0VG9TdHJpbmcoJHZhbHVlLCBpbnQgJHR5cGUpOwoKICAgIC8qKgogICAgICogQW5ub3VuY2Ugd2hpY2ggdHlwZXMgdGhlIGltcGxlbWVudGluZyBjb252ZXJ0ZXIgY2FuIGhhbmRsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IE9JRHMgb2YgaGFuZGxlZCB0eXBlcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnRUeXBlcygpOwp9Ci8qKgogKiBEZWNsYXJlIGEgY3Vyc29yLgogKi8KY2xhc3MgQ3Vyc29yCnsKICAgIC8qKgogICAgICogQ2F1c2VzIHRoZSBjdXJzb3IgdG8gcmV0dXJuIGRhdGEgaW4gYmluYXJ5IHJhdGhlciB0aGFuIGluIHRleHQgZm9ybWF0LiBZb3UgcHJvYmFibHkgZG8gbm90IHdhbnQgdG8gdXNlIHRoYXQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCSU5BUlkgPSAxOwoKICAgIC8qKgogICAgICogVGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIGN1cnNvciBzaG91bGQgYmUgdW5hZmZlY3RlZCBieSB1cGRhdGVzIHRvIHRoZSB0YWJsZXMgdW5kZXJseWluZyB0aGUgY3Vyc29yIHRoYXQgdGFrZSBwbGFjZSBhZnRlciB0aGUgY3Vyc29yIHdhcyBvcGVuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJTlNFTlNJVElWRSA9IDI7CgogICAgLyoqCiAgICAgKiBUaGUgY3Vyc29yIHNob3VsZCBzdGF5IHVzYWJsZSBhZnRlciB0aGUgdHJhbnNhY3Rpb24gdGhhdCBjcmVhdGVkIGl0IHdhcyBzdWNjZXNzZnVsbHkgY29tbWl0dGVkLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgV0lUSF9IT0xEID0gNDsKCiAgICAvKioKICAgICAqIEZvcmNlIHRoYXQgcm93cyBjYW4gYmUgcmV0cmlldmVkIGluIGFueSBvcmRlciBmcm9tIHRoZSBjdXJzb3IuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTQ1JPTEwgPSAxNjsKCiAgICAvKioKICAgICAqIEZvcmNlIHRoYXQgcm93cyBhcmUgb25seSByZXRyaWV2YWJsZSBpbiBzZXF1aWVudGlhbCBvcmRlci4KICAgICAqCiAgICAgKiAqKipOT1RFOioqKgogICAgICogU2VlIHRoZSBbbm90ZXMgaW4gdGhlIG9mZmljaWFsIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbl0oaHR0cDovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2N1cnJlbnQvc3RhdGljL3NxbC1kZWNsYXJlLmh0bWwjU1FMLURFQ0xBUkUtTk9URVMpIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgTk9fU0NST0xMID0gMzI7CgogICAgLyoqCiAgICAgKiBUaGUgY29ubmVjdGlvbiB0aGUgY3Vyc29yIHdhcyBkZWNsYXJlZCBvbi4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgXHBxXENvbm5lY3Rpb24KICAgICAqLwogICAgcHVibGljICRjb25uZWN0aW9uOwoKICAgIC8qKgogICAgICogVGhlIGlkZW50aWZ5aW5nIG5hbWUgb2YgdGhlIGN1cnNvci4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkbmFtZTsKCiAgICAvKioKICAgICAqIERlY2xhcmUgYSBjdXJzb3IuCiAgICAgKiBTZWUgcHFcQ29ubmVjdGlvbjo6ZGVjbGFyZSgpLgogICAgICoKICAgICAqIEBwYXJhbSBccHFcQ29ubmVjdGlvbiAkY29ubmVjdGlvbiBUaGUgY29ubmVjdGlvbiBvbiB3aGljaCB0aGUgY3Vyc29yIHNob3VsZCBiZSBkZWNsYXJlZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIGN1cnNvci4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFNlZSBwcVxDdXJzb3IgY29uc3RhbnRzLgogICAgICogQHBhcmFtIHN0cmluZyAkcXVlcnkgVGhlIHF1ZXJ5IGZvciB3aGljaCB0aGUgY3Vyc29yIHNob3VsZCBiZSBvcGVuZWQuCiAgICAgKiBAcGFyYW0gYm9vbCAkYXN5bmMgV2hldGhlciB0byBkZWNsYXJlIHRoZSBjdXJzb3IgW2FzeW5jaHJvbm91c2x5XShwcS9Db25uZWN0aW9uLzogQXN5bmNocm9ub3VzIFVzYWdlKS4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ29ubmVjdGlvbiAkY29ubmVjdGlvbiwgc3RyaW5nICRuYW1lLCBpbnQgJGZsYWdzLCBzdHJpbmcgJHF1ZXJ5LCBib29sICRhc3luYykge30KCiAgICAvKioKICAgICAqIENsb3NlIGFuIG9wZW4gY3Vyc29yLgogICAgICogVGhpcyBpcyBhIG5vLW9wIG9uIGFscmVhZHkgY2xvc2VkIGN1cnNvcnMuCiAgICAgKgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpIHt9CgogICAgLyoqCiAgICAgKiBbQXN5bmNocm9ub3VzbHldKHBxL0Nvbm5lY3Rpb24vOiBBc3luY2hyb25vdXMgVXNhZ2UpIGNsb3NlIGFuIG9wZW4gY3Vyc29yLgogICAgICogU2VlIHBxXEN1cnNvcjo6Y2xvc2UoKS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlQXN5bmMoKSB7fQoKICAgIC8qKgogICAgICogRmV0Y2ggcm93cyBmcm9tIHRoZSBjdXJzb3IuCiAgICAgKiBTZWUgcHFcQ3Vyc29yOjptb3ZlKCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3BlYyBXaGF0IHRvIGZldGNoLgogICAgICoKICAgICAqICMjIyBGZXRjaCBhcmd1bWVudDoKICAgICAqCiAgICAgKiBGRVRDSCBhbmQgTU9WRSB1c3VhbGx5IGFjY2VwdHMgYXJndW1lbnRzIGxpa2UgdGhlIGZvbGxvd2luZywgd2hlcmUgYGNvdW50YCBpcyB0aGUgbnVtYmVyIG9mIHJvd3M6CiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqIEByZXR1cm4gXHBxXFJlc3VsdCB0aGUgZmV0Y2hlZCByb3cocykuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaChzdHJpbmcgJHNwZWMgPSAiMSIpIHt9CgogICAgLyoqCiAgICAgKiBbQXN5bmNocm9ub3VzbHldKHBxL0Nvbm5lY3Rpb24vOiBBc3luY2hyb25vdXMgVXNhZ2UpIGZldGNoIHJvd3MgZnJvbSB0aGUgY3Vyc29yLgogICAgICogU2VlIHBxXEN1cnNvcjo6ZmV0Y2goKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcGVjIFdoYXQgdG8gZmV0Y2guCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIGFzIGZ1bmN0aW9uKHBxXFJlc3VsdCAkcmVzKQogICAgICogICBBIGNhbGxiYWNrIHRvIGV4ZWN1dGUgd2hlbiB0aGUgcmVzdWx0IGlzIHJlYWR5LgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaEFzeW5jKHN0cmluZyAkc3BlYyA9ICIxIiwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIE1vdmUgdGhlIGN1cnNvci4KICAgICAqIFNlZSBwcVxDdXJzb3I6OmZldGNoKCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3BlYyBXaGF0IHRvIGZldGNoLgogICAgICoKICAgICAqICMjIyBGZXRjaCBhcmd1bWVudDoKICAgICAqCiAgICAgKiBGRVRDSCBhbmQgTU9WRSB1c3VhbGx5IGFjY2VwdHMgYXJndW1lbnRzIGxpa2UgdGhlIGZvbGxvd2luZywgd2hlcmUgYGNvdW50YCBpcyB0aGUgbnVtYmVyIG9mIHJvd3M6CiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqIEByZXR1cm4gXHBxXFJlc3VsdCBjb21tYW5kIHN0YXR1cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vdmUoc3RyaW5nICRzcGVjID0gIjEiKSB7fQoKICAgIC8qKgogICAgICogW0FzeW5jaHJvbm91c2x5XShwcS9Db25uZWN0aW9uLzogQXN5bmNocm9ub3VzIFVzYWdlKSBtb3ZlIHRoZSBjdXJzb3IuCiAgICAgKiBTZWUgcHFcQ3Vyc29yOjptb3ZlKCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3BlYyBXaGF0IHRvIGZldGNoLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBhcyBmdW5jdGlvbihwcVxSZXN1bHQgJHJlcykKICAgICAqICAgQSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gdGhlIGNvbW1hbmQgY29tcGxldGVkLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb3ZlQXN5bmMoc3RyaW5nICRzcGVjID0gIjEiLCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmVvcGVuIGEgY3Vyc29yLgogICAgICogVGhpcyBpcyBhIG5vLW9wIG9uIGFscmVhZHkgb3BlbiBjdXJzb3JzLgogICAgICoKICAgICAqICoqKk5PVEU6KioqCiAgICAgKiBPbmx5IGN1cnNvcnMgY2xvc2VkIGJ5IHBxXEN1cnNvcjo6Y2xvc2UoKSB3aWxsIGJlIHJlb3BlbmVkLgogICAgICoKICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3BlbigpIHt9CgogICAgLyoqCiAgICAgKiBbQXN5bmNocm9ub3VzbHldKHBxL0Nvbm5lY3Rpb24vOiBBc3luY2hyb25vdXMgVXNhZ2UpIHJlb3BlbiBhIGN1cnNvci4KICAgICAqIFNlZSBwcVxDdXJzb3I6Om9wZW4oKS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9wZW5Bc3luYygpIHt9Cn0KLyoqCiAqIEEgc2ltcGxlIERhdGVUaW1lIHdyYXBwZXIgd2l0aCBwcmVkZWZpbmVkIGZvcm1hdHMgd2hpY2ggc3VwcG9ydHMgc3RyaW5naWZpY2F0aW9uIGFuZCBKU09OLgogKi8KY2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyBcRGF0ZVRpbWUgaW1wbGVtZW50cyBcSnNvblNlcmlhbGl6YWJsZQp7CiAgICAvKioKICAgICAqIFRoZSBkZWZhdWx0IGZvcm1hdCBvZiBhbnkgZGF0ZS90aW1lIHR5cGUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgYnkgcHFcUmVzdWx0IChkZXBlbmRzIG9uIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgY29sdW1uKS4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGZvcm1hdCA9ICJZLW0tZCBIOmk6cy51TyI7CgogICAgLyoqCiAgICAgKiBTdHJpbmdpZnkgdGhlIERhdGVUaW1lIGluc3RhbmNlIGFjY29yZGluZyB0byBwcVxEYXRlVGltZTo6JGZvcm1hdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgRGF0ZVRpbWUgYXMgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpIHt9CgogICAgLyoqCiAgICAgKiBTZXJpYWxpemUgdG8gSlNPTi4KICAgICAqIEFsaWFzIG9mIHBxXERhdGVUaW1lOjpfX3RvU3RyaW5nKCkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgdGhlIERhdGVUaW1lIHN0cmluZ2lmaWVkIGFjY29yZGluZyB0byBwcVxEYXRlVGltZTo6JGZvcm1hdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQp9Ci8qKgogKiBBIGJhc2UgaW50ZXJmYWNlIGZvciBhbGwgcHFcRXhjZXB0aW9uIGNsYXNzZXMuCiAqLwppbnRlcmZhY2UgRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogQW4gaW52YWxpZCBhcmd1bWVudCB3YXMgcGFzc2VkIHRvIGEgbWV0aG9kIChwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElOVkFMSURfQVJHVU1FTlQgPSAwOwoKICAgIC8qKgogICAgICogQSBydW50aW1lIGV4Y2VwdGlvbiBvY2N1cnJlZCAocHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24pLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUlVOVElNRSA9IDE7CgogICAgLyoqCiAgICAgKiBUaGUgY29ubmVjdGlvbiBmYWlsZWQgKHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uKS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENPTk5FQ1RJT05fRkFJTEVEID0gMjsKCiAgICAvKioKICAgICAqIEFuIGlucHV0L291dHB1dCBleGNlcHRpb24gb2NjdXJyZWQgKHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uKS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElPID0gMzsKCiAgICAvKioKICAgICAqIEVzY2FwaW5nIGFuIGFyZ3VtZW50IG9yIGlkZW50aWZpZXIgZmFpbGVkIGludGVybmFsbHkgKHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uKS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEVTQ0FQRSA9IDQ7CgogICAgLyoqCiAgICAgKiBBbiBvYmplY3QncyBjb25zdHJ1Y3RvciB3YXMgbm90IGNhbGxlZCAocHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24pLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVU5JTklUSUFMSVpFRCA9IDY7CgogICAgLyoqCiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdhcyBub3QgZXhwZWN0ZWQgKHlldCkgKHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEJBRF9NRVRIT0RDQUxMID0gNTsKCiAgICAvKioKICAgICAqIFNRTCBzeW50YXggZXJyb3IgKHBxXEV4Y2VwdGlvblxEb21haW5FeGNlcHRpb24pLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU1FMID0gODsKCiAgICAvKioKICAgICAqIEltcGxlbWVudGF0aW9uIGRvbWFpbiBlcnJvciAocHFcRXhjZXB0aW9uXERvbWFpbkV4Y2VwdGlvbikuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBET01BSU4gPSA3Owp9Ci8qKgogKiBBICpsYXJnZSBvYmplY3QqLgogKgogKiAqKipOT1RFOioqKgogKiBXb3JraW5nIHdpdGggKmxhcmdlIG9iamVjdHMqIHJlcXVpcmVzIGFuIGFjdGl2ZSB0cmFuc2FjdGlvbi4KICovCmNsYXNzIExPQgp7CiAgICAvKioKICAgICAqIDAsIHJlcHJlc2VudGluZyBhbiBpbnZhbGlkIE9JRC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElOVkFMSURfT0lEID0gMDsKCiAgICAvKioKICAgICAqIFJlYWQvd3JpdGUgbW9kZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJXID0gMzkzMjE2OwoKICAgIC8qKgogICAgICogVGhlIHRyYW5zYWN0aW9uIHdyYXBwaW5nIHRoZSBvcGVyYXRpb25zIG9uIHRoZSAqbGFyZ2Ugb2JqZWN0Ki4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgXHBxXFRyYW5zYWN0aW9uCiAgICAgKi8KICAgIHB1YmxpYyAkdHJhbnNhY3Rpb247CgogICAgLyoqCiAgICAgKiBUaGUgT0lEIG9mIHRoZSAqbGFyZ2Ugb2JqZWN0Ki4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkb2lkOwoKICAgIC8qKgogICAgICogVGhlIHN0cmVhbSBjb25uZWN0ZWQgdG8gdGhlICpsYXJnZSBvYmplY3QqLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciByZXNvdXJjZQogICAgICovCiAgICBwdWJsaWMgJHN0cmVhbTsKCiAgICAvKioKICAgICAqIE9wZW4gb3IgY3JlYXRlIGEgKmxhcmdlIG9iamVjdCouCiAgICAgKiBTZWUgcHFcVHJhbnNhY3Rpb246Om9wZW5MT0IoKSBhbmQgcHFcVHJhbnNhY3Rpb246OmNyZWF0ZUxPQigpLgogICAgICoKICAgICAqIEBwYXJhbSBccHFcVHJhbnNhY3Rpb24gJHR4biBUaGUgdHJhbnNhY3Rpb24gd2hpY2ggd3JhcHMgdGhlICpsYXJnZSBvYmplY3QqIG9wZXJhdGlvbnMuCiAgICAgKiBAcGFyYW0gaW50ICRvaWQgVGhlIE9JRCBvZiB0aGUgZXhpc3RpbmcgKmxhcmdlIG9iamVjdCogdG8gb3Blbi4KICAgICAqIEBwYXJhbSBpbnQgJG1vZGUgQWNjZXNzIG1vZGUgKHJlYWQsIHdyaXRlIG9yIHJlYWQvd3JpdGUpLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChUcmFuc2FjdGlvbiAkdHhuLCBpbnQgJG9pZCA9IFxwcVxMT0I6OklOVkFMSURfT0lELCBpbnQgJG1vZGUgPSBccHFcTE9COjpSVykge30KCiAgICAvKioKICAgICAqIFJlYWQgYSBzdHJpbmcgb2YgZGF0YSBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSAqbGFyZ2Ugb2JqZWN0Ki4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGggVGhlIGFtb3VudCBvZiBieXRlcyB0byByZWFkIGZyb20gdGhlICpsYXJnZSBvYmplY3QqLgogICAgICogQHBhcmFtIGludCAmJHJlYWQgVGhlIGFtb3VudCBvZiBieXRlcyBhY3R1YWxseSByZWFkIGZyb20gdGhlICpsYXJnZSBvYmplY3QqLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgZGF0YSByZWFkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZChpbnQgJGxlbmd0aCA9IDB4MTAwMCwgaW50ICYkcmVhZCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBTZWVrIHRvIGEgcG9zaXRpb24gd2l0aGluIHRoZSAqbGFyZ2Ugb2JqZWN0Ki4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgVGhlIHBvc2l0aW9uIHRvIHNlZWsgdG8uCiAgICAgKiBAcGFyYW0gaW50ICR3aGVuY2UgRnJvbSB3aGVyZSB0byBzZWVrIChTRUVLX1NFVCwgU0VFS19DVVIgb3IgU0VFS19FTkQpLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIGludCB0aGUgbmV3IHBvc2l0aW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VlayhpbnQgJG9mZnNldCwgaW50ICR3aGVuY2UgPSBTRUVLX1NFVCkge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpdGhpbiB0aGUgKmxhcmdlIG9iamVjdCouCiAgICAgKgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIGludCB0aGUgY3VycmVudCBwb3NpdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlbGwoKSB7fQoKICAgIC8qKgogICAgICogVHJ1bmNhdGUgdGhlICpsYXJnZSBvYmplY3QqLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxlbmd0aCBUaGUgbGVuZ3RoIHRvIHRydW5jYXRlIHRvLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cnVuY2F0ZShpbnQgJGxlbmd0aCA9IDApIHt9CgogICAgLyoqCiAgICAgKiBXcml0ZSBkYXRhIHRvIHRoZSAqbGFyZ2Ugb2JqZWN0Ki4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBkYXRhIHRoYXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uCiAgICAgKiBAcmV0dXJuIGludCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZShzdHJpbmcgJGRhdGEpIHt9Cn0KLyoqCiAqIEEgcXVlcnkgcmVzdWx0LgogKgogKiBTZWUgW0ZldGNoaW5nIFJlc3VsdHNdKHBxL1Jlc3VsdC86IEZldGNoaW5nIFJlc3VsdHMpIGZvciBhIGdlbmVyYWwgb3ZlcnZpZXcuCiAqLwpjbGFzcyBSZXN1bHQgaW1wbGVtZW50cyBcVHJhdmVyc2FibGUsIFxDb3VudGFibGUKewogICAgLyoqCiAgICAgKiBUaGUgcXVlcnkgc2VudCB0byB0aGUgc2VydmVyIHdhcyBlbXB0eS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEVNUFRZX1FVRVJZID0gMDsKCiAgICAvKioKICAgICAqIFRoZSBxdWVyeSBkaWQgbm90IGdlbmVyYXRlIGEgcmVzdWx0IHNldCBhbmQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENPTU1BTkRfT0sgPSAxOwoKICAgIC8qKgogICAgICogVGhlIHF1ZXJ5IHN1Y2Nlc3NmdWxseSBnZW5lcmF0ZWQgYSByZXN1bHQgc2V0LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVFVQTEVTX09LID0gMjsKCiAgICAvKioKICAgICAqIFRoZSByZXN1bHQgY29udGFpbnMgYSBzaW5nbGUgcm93IG9mIHRoZSByZXN1bHQgc2V0IHdoZW4gdXNpbmcgcHFcQ29ubmVjdGlvbjo6JHVuYnVmZmVyZWQuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTSU5HTEVfVFVQTEUgPSA5OwoKICAgIC8qKgogICAgICogQ09QWSBkYXRhIGNhbiBiZSByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDT1BZX09VVCA9IDM7CgogICAgLyoqCiAgICAgKiBDT1BZIGRhdGEgY2FuIGJlIHNlbnQgdG8gdGhlIHNlcnZlci4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENPUFlfSU4gPSA0OwoKICAgIC8qKgogICAgICogQ09QWSBpbi9vdXQgZGF0YSB0cmFuc2ZlciBpbiBwcm9ncmVzcy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENPUFlfQk9USCA9IDg7CgogICAgLyoqCiAgICAgKiBUaGUgc2VydmVyIHNlbnQgYSBiYWQgcmVzcG9uc2UuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCQURfUkVTUE9OU0UgPSA1OwoKICAgIC8qKgogICAgICogQSBub25mYXRhbCBlcnJvciAobm90aWNlIG9yIHdhcm5pbmcpIG9jY3VycmVkLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgTk9ORkFUQUxfRVJST1IgPSA2OwoKICAgIC8qKgogICAgICogQSBmYXRhbCBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEZBVEFMX0VSUk9SID0gNzsKCiAgICAvKioKICAgICAqIEZldGNoIHJvd3MgbnVtZXJpY2FsbHkgaW5kZXhlZCwgd2hlcmUgdGhlIGluZGV4IHN0YXJ0IHdpdGggMC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEZFVENIX0FSUkFZID0gMDsKCiAgICAvKioKICAgICAqIEZldGNoIHJvd3MgYXNzb2NpYXRpdmVseSBpbmRleGVkIGJ5IGNvbHVtbiBuYW1lLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkVUQ0hfQVNTT0MgPSAxOwoKICAgIC8qKgogICAgICogRmV0Y2ggcm93cyBhcyBzdGRDbGFzcyBpbnN0YW5jZSwgd2hlcmUgdGhlIGNvbHVtbiBuYW1lcyBhcmUgdGhlIHByb3BlcnR5IG5hbWVzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkVUQ0hfT0JKRUNUID0gMjsKCiAgICAvKioKICAgICAqIEF1dG9tYXRpY2FsbHkgY29udmVydCAnZicgYW5kICd0JyB0byBGQUxTRSBhbmQgVFJVRSBhbmQgdmljZSB2ZXJzYS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENPTlZfQk9PTCA9IDE7CgogICAgLyoqCiAgICAgKiBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgaW50ZWdyYWwgc3RyaW5ncyB0byBlaXRoZXIgaW50IGlmIGl0IGZpdHMgaW50byBtYXhpbXVtIGludGVnZXIgc2l6ZSBvciBlbHNlIHRvIGZsb2F0IGFuZCB2aWNlIHZlcnNhLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ09OVl9JTlQgPSAyOwoKICAgIC8qKgogICAgICogQXV0b21hdGljYWxseSBjb252ZXJ0IGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDT05WX0ZMT0FUID0gNDsKCiAgICAvKioKICAgICAqIERvIGFsbCBzY2FsYXIgY29udmVyc2lvbnMgbGlzdGVkIGFib3ZlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ09OVl9TQ0FMQVIgPSAxNTsKCiAgICAvKioKICAgICAqIEF1dG9tYXRpY2FsbHkgY29udmVydCBhcnJheXMuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDT05WX0FSUkFZID0gMTY7CgogICAgLyoqCiAgICAgKiBBdXRvbWF0aWNhbGx5IGNvbnZlcnQgZGF0ZSBzdHJpbmdzIHRvIHBxXERhdGVUaW1lIGFuZCB2aWNlIHZlcnNhLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ09OVl9EQVRFVElNRSA9IDMyOwoKICAgIC8qKgogICAgICogQXV0b21hdGljYWxseSBjb252ZXJ0IEpTT04uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDT05WX0pTT04gPSAyNTY7CgogICAgLyoqCiAgICAgKiBEbyBhbGwgb2YgdGhlIGFib3ZlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ09OVl9BTEwgPSA2NTUzNTsKCiAgICAvKioKICAgICAqIEEgW3N0YXR1cyBjb25zdGFudF0ocHEvUmVzdWx0I1N0YXR1cy52YWx1ZXM6KS4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkc3RhdHVzOwoKICAgIC8qKgogICAgICogVGhlIGFjY29tcGFueWluZyBzdGF0dXMgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkc3RhdHVzTWVzc2FnZTsKCiAgICAvKioKICAgICAqIEFueSBlcnJvciBtZXNzYWdlIGlmICRzdGF0dXMgaW5kaWNhdGVzIGFuIGVycm9yLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRlcnJvck1lc3NhZ2U7CgogICAgLyoqCiAgICAgKiBUaGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHJlc3VsdCBzZXQuCiAgICAgKgogICAgICogQHB1YmxpYwogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG51bVJvd3M7CgogICAgLyoqCiAgICAgKiBUaGUgbnVtYmVyIG9mIGZpZWxkcyBpbiBhIHNpbmdsZSB0dXBsZSBvZiB0aGUgcmVzdWx0IHNldC4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkbnVtQ29sczsKCiAgICAvKioKICAgICAqIFRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBieSBhIHN0YXRlbWVudC4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkYWZmZWN0ZWRSb3dzOwoKICAgIC8qKgogICAgICogRXJyb3IgZGV0YWlscy4gU2VlIFtQUXJlc3VsdEVycm9yRmllbGRdKGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvY3VycmVudC9zdGF0aWMvbGlicHEtZXhlYy5odG1sI0xJQlBRLVBRUkVTVUxURVJST1JGSUVMRCkgZG9jcy4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHVibGljICRkaWFnOwoKICAgIC8qKgogICAgICogVGhlIFt0eXBlIG9mIHJldHVybiB2YWx1ZV0ocHEvUmVzdWx0I0ZldGNoLnR5cGVzOikgdGhlIGZldGNoIG1ldGhvZHMgc2hvdWxkIHJldHVybiB3aGVuIG5vIGZldGNoIHR5cGUgYXJndW1lbnQgd2FzIGdpdmVuLiBEZWZhdWx0cyB0byBwcVxDb25uZWN0aW9uOjokZGVmYXVsdEZldGNoVHlwZS4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGZldGNoVHlwZSA9IFxwcVxSZXN1bHQ6OkZFVENIX0FSUkFZOwoKICAgIC8qKgogICAgICogV2hhdCBbdHlwZSBvZiBjb252ZXJzaW9uc10ocHEvUmVzdWx0I0NvbnZlcnNpb24uYml0czopIHRvIHBlcmZvcm0gYXV0b21hdGljYWxseS4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGF1dG9Db252ZXJ0ID0gXHBxXFJlc3VsdDo6Q09OVl9BTEw7CgogICAgLyoqCiAgICAgKiBCaW5kIGEgdmFyaWFibGUgdG8gYSByZXN1bHQgY29sdW1uLgogICAgICogU2VlIHBxXFJlc3VsdDo6ZmV0Y2hCb3VuZCgpLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkY29sIFRoZSBjb2x1bW4gbmFtZSBvciBpbmRleCB0byBiaW5kIHRvLgogICAgICogQHBhcmFtIG1peGVkICR2YXIgVGhlIHZhcmlhYmxlIHJlZmVyZW5jZS4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIGJvb2wgc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJpbmQoJGNvbCwgJHZhcikge30KCiAgICAvKioKICAgICAqIENvdW50IG51bWJlciBvZiByb3dzIGluIHRoaXMgcmVzdWx0IHNldC4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiByb3dzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKSB7fQoKICAgIC8qKgogICAgICogRGVzY3JpYmUgYSBwcmVwYXJlZCBzdGF0ZW1lbnQuCiAgICAgKgogICAgICogKioqTk9URToqKioKICAgICAqIFRoaXMgd2lsbCBvbmx5IHJldHVybiBtZWFuaW5nZnVsIGluZm9ybWF0aW9uIGZvciBhIHJlc3VsdCBvZiBwcVxTdGF0ZW1lbnQ6OmRlc2MoKS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHJldHVybiBhcnJheSBsaXN0IG9mIHBhcmFtZXRlciB0eXBlIE9JRHMgZm9yIHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNjKCkge30KCiAgICAvKioKICAgICAqIEZldGNoIGFsbCByb3dzIGF0IG9uY2UuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkZmV0Y2hfdHlwZSBUaGUgdHlwZSB0aGUgcmV0dXJuIHZhbHVlIHNob3VsZCBoYXZlLCBzZWUgcHFcUmVzdWx0OjpGRVRDSF8qIGNvbnN0YW50cywgZGVmYXVsdHMgdG8gcHFcUmVzdWx0OjokZmV0Y2hUeXBlLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEByZXR1cm4gYXJyYXkgYWxsIGZldGNoZWQgcm93cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZldGNoQWxsKGludCAkZmV0Y2hfdHlwZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBGZXRjaCBhbGwgcm93cyBvZiBhIHNpbmdsZSBjb2x1bW4uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkY29sIFRoZSBjb2x1bW4gbmFtZSBvciBpbmRleCB0byBmZXRjaC4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICogQHJldHVybiBhcnJheSBsaXN0IG9mIGNvbHVtbiB2YWx1ZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaEFsbENvbHMoaW50ICRjb2wgPSAwKSB7fQoKICAgIC8qKgogICAgICogSXRlcmF0aXZlbHkgZmV0Y2ggYSByb3cgaW50byBib3VuZCB2YXJpYWJsZXMuCiAgICAgKiBTZWUgcHFcUmVzdWx0OjpiaW5kKCkuCiAgICAgKgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIGFycmF5fG51bGwgYXJyYXkgdGhlIGZldGNoZWQgcm93IGFzIG51bWVyaWNhbGx5IGluZGV4ZWQgYXJyYXkuCiAgICAgKiAJCSBvciBOVUxMIHdoZW4gaXRlcmF0aW9uIGVuZHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaEJvdW5kKCkge30KCiAgICAvKioKICAgICAqIEl0ZXJhdGl2ZWx5IGZldGNoIGEgc2luZ2xlIGNvbHVtbi4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlZiBUaGUgdmFyaWFibGUgd2hlcmUgdGhlIGNvbHVtbiB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBpbi4KICAgICAqIEBwYXJhbSBtaXhlZCAkY29sIFRoZSBjb2x1bW4gbmFtZSBvciBpbmRleC4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICogQHJldHVybiBib29sfG51bGwgYm9vbCBzdWNjZXNzLgogICAgICogCQkgb3IgTlVMTCB3aGVuIGl0ZXJhdGlvbiBlbmRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2hDb2woJHJlZiwgJGNvbCA9IDApIHt9CgogICAgLyoqCiAgICAgKiBJdGVyYXRpdmVseSBmZXRjaCBhIHJvdy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRmZXRjaF90eXBlIFRoZSB0eXBlIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGhhdmUsIHNlZSBwcVxSZXN1bHQ6OkZFVENIXyogY29uc3RhbnRzLCBkZWZhdWx0cyB0byBwcVxSZXN1bHQ6OiRmZXRjaFR5cGUuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqIEByZXR1cm4gYXJyYXl8YXJyYXl8b2JqZWN0fG51bGwgYXJyYXkgbnVtZXJpY2FsbHkgaW5kZXhlZCBmb3IgcHFcUmVzdWx0OjpGRVRDSF9BUlJBWQogICAgICogCQkgb3IgYXJyYXkgYXNzb2NpYXRpdmVseSBpbmRleGVkIGZvciBwcVxSZXN1bHQ6OkZFVENIX0FTU09DCiAgICAgKiAJCSBvciBvYmplY3Qgc3RkQ2xhc3MgaW5zdGFuY2UgZm9yIHBxXFJlc3VsdDo6RkVUQ0hfT0JKRUNUCiAgICAgKiAJCSBvciBOVUxMIHdoZW4gaXRlcmF0aW9uIGVuZHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaFJvdyhpbnQgJGZldGNoX3R5cGUgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogRmV0Y2ggdGhlIGNvbXBsZXRlIHJlc3VsdCBzZXQgYXMgYSBzaW1wbGUgbWFwLCBhICptdWx0aSBkaW1lbnNpb25hbCBhcnJheSosIGVhY2ggZGltZW5zaW9uIGluZGV4ZWQgYnkgYSBjb2x1bW4uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRrZXlzIFRoZSB0aGUgY29sdW1uIGluZGljZXMvbmFtZXMgdXNlZCB0byBpbmRleCB0aGUgbWFwLgogICAgICogQHBhcmFtIG1peGVkICR2YWxzIFRoZSBjb2x1bW4gaW5kaWNlcy9uYW1lcyB3aGljaCBzaG91bGQgYnVpbGQgdXAgdGhlIGxlYWYgZW50cnkgb2YgdGhlIG1hcC4KICAgICAqIEBwYXJhbSBpbnQgJGZldGNoX3R5cGUgVGhlIHR5cGUgdGhlIHJldHVybiB2YWx1ZSBzaG91bGQgaGF2ZSwgc2VlIHBxXFJlc3VsdDo6RkVUQ0hfKiBjb25zdGFudHMsIGRlZmF1bHRzIHRvIHBxXFJlc3VsdDo6JGZldGNoVHlwZS4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICogQHJldHVybiBhcnJheXxvYmplY3QgdGhlIG1hcHBlZCBjb2x1bW5zLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFwKCRrZXlzID0gMCwgJHZhbHMgPSBudWxsLCBpbnQgJGZldGNoX3R5cGUgPSBudWxsKSB7fQp9Ci8qKgogKiBBIG5hbWVkIHByZXBhcmVkIHN0YXRlbWVudC4KICogU2VlIHBxXENvbm5lY3Rpb246OnByZXBhcmUoKS4KICovCmNsYXNzIFN0YXRlbWVudAp7CiAgICAvKioKICAgICAqIFRoZSBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIuCiAgICAgKgogICAgICogQHB1YmxpYwogICAgICogQHJlYWRvbmx5CiAgICAgKiBAdmFyIFxwcVxDb25uZWN0aW9uCiAgICAgKi8KICAgIHB1YmxpYyAkY29ubmVjdGlvbjsKCiAgICAvKioKICAgICAqIFRoZSBpZGVudGlmaXlpbmcgbmFtZSBvZiB0aGUgcHJlcGFyZWQgc3RhdGVtZW50LgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRuYW1lOwoKICAgIC8qKgogICAgICogVGhlIHF1ZXJ5IHN0cmluZyB1c2VkIHRvIHByZXBhcmUgdGhlIHN0YXRlbWVudC4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkcXVlcnk7CgogICAgLyoqCiAgICAgKiBMaXN0IG9mIGNvcnJlc3BvbmRpbmcgcXVlcnkgcGFyYW1ldGVyIHR5cGUgT0lEcyBmb3IgdGhlIHByZXBhcmVkIHN0YXRlbWVudC4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHVibGljICR0eXBlczsKCiAgICAvKioKICAgICAqIFByZXBhcmUgYSBuZXcgc3RhdGVtZW50LgogICAgICogU2VlIHBxXENvbm5lY3Rpb246OnByZXBhcmUoKS4KICAgICAqCiAgICAgKiBAcGFyYW0gXHBxXENvbm5lY3Rpb24gJGNvbm4gVGhlIGNvbm5lY3Rpb24gdG8gcHJlcGFyZSB0aGUgc3RhdGVtZW50IG9uLgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBpZGVudGlmeWluZyB0aGlzIHN0YXRlbWVudC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IFRoZSBhY3R1YWwgcXVlcnkgdG8gcHJlcGFyZS4KICAgICAqIEBwYXJhbSBhcnJheSAkdHlwZXMgQSBsaXN0IG9mIGNvcnJlc3BvbmRpbmcgcXVlcnkgcGFyYW1ldGVyIHR5cGUgT0lEcy4KICAgICAqIEBwYXJhbSBib29sICRhc3luYyBXaGV0aGVyIHRvIHByZXBhcmUgdGhlIHN0YXRlbWVudCBbYXN5bmNocm9ub3VzbHldKHBxL0Nvbm5lY3Rpb24vOiBBc3luY2hyb25vdXMgVXNhZ2UpLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cRG9tYWluRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb25uZWN0aW9uICRjb25uLCBzdHJpbmcgJG5hbWUsIHN0cmluZyAkcXVlcnksIGFycmF5ICR0eXBlcyA9IG51bGwsIGJvb2wgJGFzeW5jID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiBCaW5kIGEgdmFyaWFibGUgdG8gYW4gaW5wdXQgcGFyYW1ldGVyLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHBhcmFtX25vIFRoZSBwYXJhbWV0ZXIgaW5kZXggdG8gYmluZCB0by4KICAgICAqIEBwYXJhbSBtaXhlZCAmJHBhcmFtX3JlZiBUaGUgdmFyaWFibGUgdG8gYmluZC4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiaW5kKGludCAkcGFyYW1fbm8sICYkcGFyYW1fcmVmKSB7fQoKICAgIC8qKgogICAgICogRnJlZSB0aGUgc2VydmVyIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQsIHNvIGl0IGNhbiBubyBsb25nZXIgYmUgZXhlY3V0ZWQuCiAgICAgKiBUaGlzIGlzIGRvbmUgaW1wbGljaXRseSB3aGVuIHRoZSBvYmplY3QgaXMgZGVzdHJveWVkLgogICAgICoKICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVhbGxvY2F0ZSgpIHt9CgogICAgLyoqCiAgICAgKiBbQXN5bmNocm9ub3VzbHldKHBxL0Nvbm5lY3Rpb24vOiBBc3luY2hyb25vdXMgVXNhZ2UpIGZyZWUgdGhlIHNlcnZlciByZXNvdXJjZXMgdXNlZCBieSB0aGUKICAgICAqIHByZXBhcmVkIHN0YXRlbWVudCwgc28gaXQgY2FuIG5vIGxvbmdlciBiZSBleGVjdXRlZC4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlYWxsb2NhdGVBc3luYygpIHt9CgogICAgLyoqCiAgICAgKiBEZXNjcmliZSB0aGUgcGFyYW1ldGVycyBvZiB0aGUgcHJlcGFyZWQgc3RhdGVtZW50LgogICAgICoKICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXERvbWFpbkV4Y2VwdGlvbgogICAgICogQHJldHVybiBhcnJheSBsaXN0IG9mIHR5cGUgT0lEcyBvZiB0aGUgc3Vic3RpdHV0aW9uIHBhcmFtZXRlcnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNjKCkge30KCiAgICAvKioKICAgICAqIFtBc3luY2hyb25vdXNseV0ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkgZGVzY3JpYmUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIHByZXBhcmVkIHN0YXRlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIGFzIGZ1bmN0aW9uKGFycmF5ICRvaWRzKQogICAgICogICBBIGNhbGxiYWNrIHRvIHJlY2VpdmUgbGlzdCBvZiB0eXBlIE9JRHMgb2YgdGhlIHN1YnN0aXR1dGlvbiBwYXJhbWV0ZXJzLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNjQXN5bmMoY2FsbGFibGUgJGNhbGxiYWNrKSB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZSB0aGUgcHJlcGFyZWQgc3RhdGVtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zIEFueSBwYXJhbWV0ZXJzIHRvIHN1YnN0aXR1dGUgaW4gdGhlIHByZXBhcmVkIHN0YXRlbWVudCAoZGVmYXVsdHMgdG8gYW55IGJvdQogICAgICogICBuZCB2YXJpYWJsZXMpLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIFxwcVxSZXN1bHQgdGhlIHJlc3VsdCBvZiB0aGUgZXhlY3V0aW9uIG9mIHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjKGFycmF5ICRwYXJhbXMgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogW0FzeW5jaHJvbm91c2x5XShwcS9Db25uZWN0aW9uLzogQXN5bmNocm9ub3VzIFVzYWdlKSBleGVjdXRlIHRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMgQW55IHBhcmFtZXRlcnMgdG8gc3Vic3RpdHV0ZSBpbiB0aGUgcHJlcGFyZWQgc3RhdGVtZW50IChkZWZhdWx0cyB0byBhbnkgYm91CiAgICAgKiAgIG5kIHZhcmlhYmxlcykuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNiIGFzIGZ1bmN0aW9uKFxwcVxSZXN1bHQgJHJlcykgOiB2b2lkCiAgICAgKiAgIFJlc3VsdCBoYW5kbGVyIGNhbGxiYWNrLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjQXN5bmMoYXJyYXkgJHBhcmFtcyA9IG51bGwsIGNhbGxhYmxlICRjYiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBSZS1wcmVwYXJlIGEgc3RhdGVtZW50IHRoYXQgaGFzIGJlZW4gZGVhbGxvY2F0ZWQuIFRoaXMgaXMgYSBuby1vcCBvbiBhbHJlYWR5IG9wZW4gc3RhdGVtZW50cy4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXBhcmUoKSB7fQoKICAgIC8qKgogICAgICogW0FzeW5jaHJvbm91c2x5XShwcS9Db25uZWN0aW9uLzogQXN5bmNocm9ub3VzIFVzYWdlKSByZS1wcmVwYXJlIGEgc3RhdGVtZW50IHRoYXQgaGFzIGJlZW4KICAgICAqIGRlYWxsb2NhdGVkLiBUaGlzIGlzIGEgbm8tb3Agb24gYWxyZWFkeSBvcGVuIHN0YXRlbWVudHMuCiAgICAgKgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVwYXJlQXN5bmMoKSB7fQp9Ci8qKgogKiBBIGRhdGFiYXNlIHRyYW5zYWN0aW9uLgogKgogKiAqKipOT1RFOioqKgogKiBUcmFuc2FjdGlvbmFsIHByb3BlcnRpZXMgbGlrZSBwcVxUcmFuc2FjdGlvbjo6JGlzb2xhdGlvbiwgcHFcVHJhbnNhY3Rpb246OiRyZWFkb25seSBhbmQgcHFcVHJhbnNhY3Rpb246OiRkZWZlcnJhYmxlIGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBiZWd1biBhbmQgdGhlIGZpcnN0IHF1ZXJ5IGhhcyBiZWVuIGV4ZWN1dGVkLiBEb2luZyB0aGlzIHdpbGwgbGVhZCB0byBhcHByb3ByaWF0ZSBgU0VUIFRSQU5TQUNUSU9OYCBxdWVyaWVzLgogKi8KY2xhc3MgVHJhbnNhY3Rpb24KewogICAgLyoqCiAgICAgKiBUcmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgd2hlcmUgb25seSByb3dzIGNvbW1pdHRlZCBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIGJlZ2FuIGNhbiBiZSBzZWVuLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVBRF9DT01NSVRURUQgPSAwOwoKICAgIC8qKgogICAgICogVHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsIHdoZXJlIG9ubHkgcm93cyBjb21taXR0ZWQgYmVmb3JlIHRoZSBmaXJzdCBxdWVyeSB3YXMgZXhlY3V0ZWQgaW4gdGhpcyB0cmFuc2FjdGlvbi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFUEVBVEFCTEVfUkVBRCA9IDE7CgogICAgLyoqCiAgICAgKiBUcmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgdGhhdCBndWFyYW50ZWVzIHNlcmlhbGl6YWJsZSByZXBlYXRhYmlsaXR5IHdoaWNoIG1pZ2h0IGxlYWQgdG8gc2VyaWFsaXphdGlvbl9mYWlsdXJlIG9uIGhpZ2ggY29uY3VycmVuY3kuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTRVJJQUxJWkFCTEUgPSAyOwoKICAgIC8qKgogICAgICogVGhlIGNvbm5lY3Rpb24gdGhlIHRyYW5zYWN0aW9uIHdhcyBzdGFydGVkIG9uLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBccHFcQ29ubmVjdGlvbgogICAgICovCiAgICBwdWJsaWMgJGNvbm5lY3Rpb247CgogICAgLyoqCiAgICAgKiBUaGUgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVsLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkaXNvbGF0aW9uID0gXHBxXFRyYW5zYWN0aW9uOjpSRUFEX0NPTU1JVFRFRDsKCiAgICAvKioKICAgICAqIFdoZXRoZXIgdGhpcyB0cmFuc2FjdGlvbiBwZXJmb3JtcyByZWFkIG9ubHkgcXVlcmllcy4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICRyZWFkb25seSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogV2hldGhlciB0aGUgdHJhbnNhY3Rpb24gaXMgZGVmZXJyYWJsZS4gU2VlIHBxXENvbm5lY3Rpb246OnN0YXJ0VHJhbnNhY3Rpb24oKS4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHVibGljICRkZWZlcnJhYmxlID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBTdGFydCBhIHRyYW5zYWN0aW9uLgogICAgICogU2VlIHBxXENvbm5lY3Rpb246OnN0YXJ0VHJhbnNhY3Rpb24oKS4KICAgICAqCiAgICAgKiBAcGFyYW0gXHBxXENvbm5lY3Rpb24gJGNvbm4gVGhlIGNvbm5lY3Rpb24gdG8gc3RhcnQgdGhlIHRyYW5zYWN0aW9uIG9uLgogICAgICogQHBhcmFtIGJvb2wgJGFzeW5jIFdoZXRoZXIgdG8gc3RhcnQgdGhlIHRyYW5zYWN0aW9uIFthc3luY2hyb25vdXNseV0ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkuCiAgICAgKiBAcGFyYW0gaW50ICRpc29sYXRpb24gVGhlIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCAoZGVmYXVsdHMgdG8gcHFcQ29ubmVjdGlvbjo6JGRlZmF1bHRUcmFuc2FjdGlvbklzb2xhdGlvbikuCiAgICAgKiBAcGFyYW0gYm9vbCAkcmVhZG9ubHkgV2hldGhlciB0aGUgdHJhbnNhY3Rpb24gaXMgcmVhZG9ubHkgKGRlZmF1bHRzIHRvIHBxXENvbm5lY3Rpb246OiRkZWZhdWx0VHJhbnNhY3Rpb25SZWFkb25seSkuCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVmZXJyYWJsZSBXaGV0aGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBkZWZlcnJhYmxlIChkZWZhdWx0cyB0byBwcVxDb25uZWN0aW9uOjokZGVmYXVsdFRyYW5zYWN0aW9uRGVmZXJyYWJsZSkuCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KENvbm5lY3Rpb24gJGNvbm4sIGJvb2wgJGFzeW5jID0gZmFsc2UsIGludCAkaXNvbGF0aW9uID0gXHBxXFRyYW5zYWN0aW9uOjpSRUFEX0NPTU1JVFRFRCwgYm9vbCAkcmVhZG9ubHkgPSBmYWxzZSwgYm9vbCAkZGVmZXJyYWJsZSA9IGZhbHNlKSB7fQoKICAgIC8qKgogICAgICogQ29tbWl0IHRoZSB0cmFuc2FjdGlvbiBvciByZWxlYXNlIHRoZSBwcmV2aW91cyBzYXZlcG9pbnQuCiAgICAgKiBTZWUgcHFcVHJhbnNhY3Rpb246OnNhdmVwb2ludCgpLgogICAgICoKICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXERvbWFpbkV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tbWl0KCkge30KCiAgICAvKioKICAgICAqIFtBc3luY2hyb25vdXNseV0ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkgY29tbWl0IHRoZSB0cmFuc2FjdGlvbiBvciByZWxlYXNlIHRoZSBwcmV2aW91cyBzYXZlcG9pbnQuCiAgICAgKiBTZWUgcHFcVHJhbnNhY3Rpb246OmNvbW1pdCgpIGFuZCBwcVxUcmFuc2FjdGlvbjo6c2F2ZXBvaW50KCkuCiAgICAgKgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21taXRBc3luYygpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgKmxhcmdlIG9iamVjdCogYW5kIG9wZW4gaXQuCiAgICAgKiBTZWUgcHFcVHJhbnNhY3Rpb246Om9wZW5MT0IoKS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRtb2RlIEhvdyB0byBvcGVuIHRoZSAqbGFyZ2Ugb2JqZWN0KiAocmVhZCwgd3JpdGUgb3IgYm90aDsgc2VlIHBxXExPQiBjb25zdGFudHMpLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIFxwcVxMT0IgaW5zdGFuY2Ugb2YgdGhlIG5ldyAqbGFyZ2Ugb2JqZWN0Ki4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUxPQihpbnQgJG1vZGUgPSBccHFcTE9COjpSVykge30KCiAgICAvKioKICAgICAqIEV4cG9ydCBhICpsYXJnZSBvYmplY3QqIHRvIGEgbG9jYWwgZmlsZS4KICAgICAqIFNlZSBwcVxUcmFuc2FjdGlvbjo6aW1wb3J0TE9CKCkuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkb2lkIFRoZSBPSUQgb2YgdGhlICpsYXJnZSBvYmplY3QqLgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aCBUaGUgcGF0aCBvZiBhIGxvY2FsIGZpbGUgdG8gZXhwb3J0IHRvLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleHBvcnRMT0IoaW50ICRvaWQsIHN0cmluZyAkcGF0aCkge30KCiAgICAvKioKICAgICAqIEV4cG9ydCBhIHNuYXBzaG90IGZvciB0cmFuc2FjdGlvbiBzeW5jaHJvbml6YXRpb24uCiAgICAgKiBTZWUgcHFcVHJhbnNhY3Rpb246OmltcG9ydFNuYXBzaG90KCkuCiAgICAgKgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cRG9tYWluRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgc25hcHNob3QgaWRlbnRpZmllciB1c2FibGUgd2l0aCBwcVxUcmFuc2FjdGlvbjo6aW1wb3J0U25hcHNob3QoKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cG9ydFNuYXBzaG90KCkge30KCiAgICAvKioKICAgICAqIFtBc3luY2hyb25vdXNseV0ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkgZXhwb3J0IGEgc25hcHNob3QgZm9yIHRyYW5zYWN0aW9uIHN5bmNocm9uaXphdGlvbi4KICAgICAqIFNlZSBwcVxUcmFuc2FjdGlvbjo6ZXhwb3J0U25hcHNob3QoKS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cG9ydFNuYXBzaG90QXN5bmMoKSB7fQoKICAgIC8qKgogICAgICogSW1wb3J0IGEgbG9jYWwgZmlsZSBpbnRvIGEgKmxhcmdlIG9iamVjdCouCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxfcGF0aCBBIHBhdGggdG8gYSBsb2NhbCBmaWxlIHRvIGltcG9ydC4KICAgICAqIEBwYXJhbSBpbnQgJG9pZCBUaGUgdGFyZ2V0IE9JRC4gQSBuZXcgKmxhcmdlIG9iamVjdCogd2lsbCBiZSBjcmVhdGVkIGlmIElOVkFMSURfT0lELgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIGludCB0aGUgKG5ldykgT0lEIG9mIHRoZSAqbGFyZ2Ugb2JqZWN0Ki4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGltcG9ydExPQihzdHJpbmcgJGxvY2FsX3BhdGgsIGludCAkb2lkID0gXHBxXExPQjo6SU5WQUxJRF9PSUQpIHt9CgogICAgLyoqCiAgICAgKiBJbXBvcnQgYSBzbmFwc2hvdCBmcm9tIGFub3RoZXIgdHJhbnNhY3Rpb24gdG8gc3luY2hyb25pemUgd2l0aC4KICAgICAqIFNlZSBwcVxUcmFuc2FjdGlvbjo6ZXhwb3J0U25hcHNob3QoKS4KICAgICAqCiAgICAgKiAqKipOT1RFOioqKgogICAgICogVGhlIHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBhbiBpc29sYXRpb24gbGV2ZWwgb2YgYXQgbGVhc3QgcHFcVHJhbnNhY3Rpb246OlJFUEVBVEFCTEVfUkVBRC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzbmFwc2hvdF9pZCBUaGUgc25hcHNob3QgaWRlbnRpZmllciBvYnRhaW5lZCBieSBleHBvcnRpbmcgYSBzbmFwc2hvdCBmcm9tIGEgdHJhbnNhY3Rpb24uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxEb21haW5FeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGltcG9ydFNuYXBzaG90KHN0cmluZyAkc25hcHNob3RfaWQpIHt9CgogICAgLyoqCiAgICAgKiBbQXN5bmNocm9ub3VzbHldKHBxL0Nvbm5lY3Rpb24vOiBBc3luY2hyb25vdXMgVXNhZ2UpIGltcG9ydCBhIHNuYXBzaG90IGZyb20gYW5vdGhlciB0cmFuc2FjdGlvbiB0byBzeW5jaHJvbml6ZSB3aXRoLgogICAgICogU2VlIHBxXFRyYW5zYWN0aW9uOjppbXBvcnRTbmFwc2hvdCgpLgogICAgICoKICAgICAqICoqKk5PVEU6KioqCiAgICAgKiBUaGUgdHJhbnNhY3Rpb24gbXVzdCBoYXZlIGFuIGlzb2xhdGlvbiBsZXZlbCBvZiBhdCBsZWFzdCBwcVxUcmFuc2FjdGlvbjo6UkVQRUFUQUJMRV9SRUFELgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNuYXBzaG90X2lkIFRoZSBzbmFwc2hvdCBpZGVudGlmaWVyIG9idGFpbmVkIGJ5IGV4cG9ydGluZyBhIHNuYXBzaG90IGZyb20gYSB0cmFuc2FjdGlvbi4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW1wb3J0U25hcHNob3RBc3luYyhzdHJpbmcgJHNuYXBzaG90X2lkKSB7fQoKICAgIC8qKgogICAgICogT3BlbiBhICpsYXJnZSBvYmplY3QqLgogICAgICogU2VlIHBxXFRyYW5zYWN0aW9uOjpjcmVhdGVMT0IoKS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRvaWQgVGhlIE9JRCBvZiB0aGUgKmxhcmdlIG9iamVjdCouCiAgICAgKiBAcGFyYW0gaW50ICRtb2RlIE9wZXJhdGlvbmFsIG1vZGU7IHJlYWQsIHdyaXRlIG9yIGJvdGguCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqIEByZXR1cm4gXHBxXExPQiBpbnN0YW5jZSBvZiB0aGUgb3BlbmVkICpsYXJnZSBvYmplY3QqLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3BlbkxPQihpbnQgJG9pZCwgaW50ICRtb2RlID0gXHBxXExPQjo6UlcpIHt9CgogICAgLyoqCiAgICAgKiBSb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gb3IgdG8gdGhlIHByZXZpb3VzIHNhdmVwb2ludCB3aXRoaW4gdGhpcyB0cmFuc2FjdGlvbi4KICAgICAqIFNlZSBwcVxUcmFuc2FjdGlvbjo6Y29tbWl0KCkgYW5kIHBxXFRyYW5zYWN0aW9uOjpzYXZlcG9pbnQoKS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxEb21haW5FeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJvbGxiYWNrKCkge30KCiAgICAvKioKICAgICAqIFtBc3luY2hyb25vdXNseV0ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIG9yIHRvIHRoZSBwcmV2aW91cyBzYXZlcG9pbnQgd2l0aGluIHRoaXMgdHJhbnNhY3Rpb24uCiAgICAgKiBTZWUgcHFcVHJhbnNhY3Rpb246OnJvbGxiYWNrKCkgYW5kIHBxXFRyYW5zYWN0aW9uOjpzYXZlcG9pbnQoKS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJvbGxiYWNrQXN5bmMoKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgYFNBVkVQT0lOVGAgd2l0aGluIHRoaXMgdHJhbnNhY3Rpb24uCiAgICAgKgogICAgICogKioqTk9URToqKioKICAgICAqIHBxXFRyYW5zYWN0aW9uIHRyYWNrcyBhbiBpbnRlcm5hbCBjb3VudGVyIGFzIHNhdmVwb2ludCBpZGVudGlmaWVyLgogICAgICoKICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZXBvaW50KCkge30KCiAgICAvKioKICAgICAqIFtBc3luY2hyb25vdXNseV0ocHEvQ29ubmVjdGlvbi86IEFzeW5jaHJvbm91cyBVc2FnZSkgY3JlYXRlIGEgYFNBVkVQT0lOVGAgd2l0aGluIHRoaXMgdHJhbnNhY3Rpb24uCiAgICAgKiBTZWUgcHFcVHJhbnNhY3Rpb246OnNhdmVwb2ludCgpLgogICAgICoKICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZXBvaW50QXN5bmMoKSB7fQoKICAgIC8qKgogICAgICogVW5saW5rIGEgKmxhcmdlIG9iamVjdCouCiAgICAgKiBTZWUgcHFcVHJhbnNhY3Rpb246OmNyZWF0ZUxPQigpLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG9pZCBUaGUgT0lEIG9mIHRoZSAqbGFyZ2Ugb2JqZWN0Ki4KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFxwcVxFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbgogICAgICogQHJldHVybiBccHFcTE9CIGluc3RhbmNlIG9mIHRoZSBvcGVuZWQgKmxhcmdlIG9iamVjdCouCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bmxpbmtMT0IoaW50ICRvaWQpIHt9Cn0KLyoqCiAqIEFjY2Vzc29yIHRvIHRoZSBQb3N0Z3JlU1FMIGBwZ190eXBlYCByZWxhdGlvbi4KICogU2VlIFtoZXJlIGZvciBhbiBvdmVydmlld10ocHEvVHlwZXMvOiBPdmVydmlldykuCiAqLwpjbGFzcyBUeXBlcyBpbXBsZW1lbnRzIFxBcnJheUFjY2Vzcwp7CiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGJvb2xgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCT09MID0gMTY7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBieXRlYWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEJZVEVBID0gMTc7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBjaGFyYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ0hBUiA9IDE4OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgbmFtZWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE5BTUUgPSAxOTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGludDhgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJTlQ4ID0gMjA7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBpbnQyYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgSU5UMiA9IDIxOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgaW50MnZlY3RvcmAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElOVDJWRUNUT1IgPSAyMjsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGludDRgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJTlQ0ID0gMjM7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGByZWdwcm9jYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVHUFJPQyA9IDI0OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgdGV4dGAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFRFWFQgPSAyNTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYG9pZGAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE9JRCA9IDI2OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgdGlkYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVElEID0gMjc7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB4aWRgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBYSUQgPSAyODsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGNpZGAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENJRCA9IDI5OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgb2lkdmVjdG9yYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT0lEVkVDVE9SID0gMzA7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBwZ190eXBlYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUEdfVFlQRSA9IDcxOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgcGdfYXR0cmlidXRlYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUEdfQVRUUklCVVRFID0gNzU7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBwZ19wcm9jYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUEdfUFJPQyA9IDgxOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgcGdfY2xhc3NgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQR19DTEFTUyA9IDgzOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBganNvbmAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEpTT04gPSAxMTQ7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB4bWxgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBYTUwgPSAxNDI7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB4bWxhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFhNTEFSUkFZID0gMTQzOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBganNvbmFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgSlNPTkFSUkFZID0gMTk5OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgcGdfbm9kZV90cmVlYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUEdfTk9ERV9UUkVFID0gMTk0OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgc21ncmAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFNNR1IgPSAyMTA7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBwb2ludGAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPSU5UID0gNjAwOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgbHNlZ2AgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IExTRUcgPSA2MDE7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBwYXRoYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUEFUSCA9IDYwMjsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGJveGAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEJPWCA9IDYwMzsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHBvbHlnb25gIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQT0xZR09OID0gNjA0OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgbGluZWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IExJTkUgPSA2Mjg7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBsaW5lYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBMSU5FQVJSQVkgPSA2Mjk7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBmbG9hdDRgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBGTE9BVDQgPSA3MDA7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBmbG9hdDhgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBGTE9BVDggPSA3MDE7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBhYnN0aW1lYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQUJTVElNRSA9IDcwMjsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHJlbHRpbWVgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUxUSU1FID0gNzAzOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgdGludGVydmFsYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVElOVEVSVkFMID0gNzA0OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgdW5rbm93bmAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFVOS05PV04gPSA3MDU7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBjaXJjbGVgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDSVJDTEUgPSA3MTg7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBjaXJjbGVhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENJUkNMRUFSUkFZID0gNzE5OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgbW9uZXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNT05FWSA9IDc5MDsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYG1vbmV5YXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNT05FWUFSUkFZID0gNzkxOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgbWFjYWRkcmAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE1BQ0FERFIgPSA4Mjk7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBpbmV0YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgSU5FVCA9IDg2OTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGNpZHJgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDSURSID0gNjUwOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgYm9vbGFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQk9PTEFSUkFZID0gMTAwMDsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGJ5dGVhYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCWVRFQUFSUkFZID0gMTAwMTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGNoYXJhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENIQVJBUlJBWSA9IDEwMDI7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBuYW1lYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBOQU1FQVJSQVkgPSAxMDAzOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgaW50MmFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgSU5UMkFSUkFZID0gMTAwNTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGludDJ2ZWN0b3JhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElOVDJWRUNUT1JBUlJBWSA9IDEwMDY7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBpbnQ0YXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJTlQ0QVJSQVkgPSAxMDA3OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgcmVncHJvY2FycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVHUFJPQ0FSUkFZID0gMTAwODsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHRleHRhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFRFWFRBUlJBWSA9IDEwMDk7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBvaWRhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE9JREFSUkFZID0gMTAyODsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHRpZGFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVElEQVJSQVkgPSAxMDEwOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgeGlkYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBYSURBUlJBWSA9IDEwMTE7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBjaWRhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENJREFSUkFZID0gMTAxMjsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYG9pZHZlY3RvcmFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT0lEVkVDVE9SQVJSQVkgPSAxMDEzOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgYnBjaGFyYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCUENIQVJBUlJBWSA9IDEwMTQ7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB2YXJjaGFyYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBWQVJDSEFSQVJSQVkgPSAxMDE1OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgaW50OGFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgSU5UOEFSUkFZID0gMTAxNjsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHBvaW50YXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQT0lOVEFSUkFZID0gMTAxNzsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGxzZWdhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IExTRUdBUlJBWSA9IDEwMTg7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBwYXRoYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQQVRIQVJSQVkgPSAxMDE5OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgYm94YXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCT1hBUlJBWSA9IDEwMjA7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBmbG9hdDRhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEZMT0FUNEFSUkFZID0gMTAyMTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGZsb2F0OGFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkxPQVQ4QVJSQVkgPSAxMDIyOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgYWJzdGltZWFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQUJTVElNRUFSUkFZID0gMTAyMzsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHJlbHRpbWVhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFTFRJTUVBUlJBWSA9IDEwMjQ7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB0aW50ZXJ2YWxhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFRJTlRFUlZBTEFSUkFZID0gMTAyNTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHBvbHlnb25hcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTFlHT05BUlJBWSA9IDEwMjc7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBhY2xpdGVtYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQUNMSVRFTSA9IDEwMzM7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBhY2xpdGVtYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBBQ0xJVEVNQVJSQVkgPSAxMDM0OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgbWFjYWRkcmFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgTUFDQUREUkFSUkFZID0gMTA0MDsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGluZXRhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElORVRBUlJBWSA9IDEwNDE7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBjaWRyYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDSURSQVJSQVkgPSA2NTE7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBjc3RyaW5nYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDU1RSSU5HQVJSQVkgPSAxMjYzOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgYnBjaGFyYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQlBDSEFSID0gMTA0MjsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHZhcmNoYXJgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBWQVJDSEFSID0gMTA0MzsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGRhdGVgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBEQVRFID0gMTA4MjsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHRpbWVgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUSU1FID0gMTA4MzsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHRpbWVzdGFtcGAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFRJTUVTVEFNUCA9IDExMTQ7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB0aW1lc3RhbXBhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFRJTUVTVEFNUEFSUkFZID0gMTExNTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGRhdGVhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IERBVEVBUlJBWSA9IDExODI7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB0aW1lYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUSU1FQVJSQVkgPSAxMTgzOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgdGltZXN0YW1wdHpgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUSU1FU1RBTVBUWiA9IDExODQ7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB0aW1lc3RhbXB0emFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVElNRVNUQU1QVFpBUlJBWSA9IDExODU7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBpbnRlcnZhbGAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElOVEVSVkFMID0gMTE4NjsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGludGVydmFsYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJTlRFUlZBTEFSUkFZID0gMTE4NzsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYG51bWVyaWNhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE5VTUVSSUNBUlJBWSA9IDEyMzE7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB0aW1ldHpgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUSU1FVFogPSAxMjY2OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgdGltZXR6YXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUSU1FVFpBUlJBWSA9IDEyNzA7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBiaXRgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCSVQgPSAxNTYwOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgYml0YXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCSVRBUlJBWSA9IDE1NjE7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB2YXJiaXRgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBWQVJCSVQgPSAxNTYyOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgdmFyYml0YXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBWQVJCSVRBUlJBWSA9IDE1NjM7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBudW1lcmljYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgTlVNRVJJQyA9IDE3MDA7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGByZWZjdXJzb3JgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUZDVVJTT1IgPSAxNzkwOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgcmVmY3Vyc29yYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUZDVVJTT1JBUlJBWSA9IDIyMDE7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGByZWdwcm9jZWR1cmVgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUdQUk9DRURVUkUgPSAyMjAyOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgcmVnb3BlcmAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFR09QRVIgPSAyMjAzOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgcmVnb3BlcmF0b3JgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUdPUEVSQVRPUiA9IDIyMDQ7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGByZWdjbGFzc2AgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFR0NMQVNTID0gMjIwNTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHJlZ3R5cGVgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUdUWVBFID0gMjIwNjsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHJlZ3Byb2NlZHVyZWFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVHUFJPQ0VEVVJFQVJSQVkgPSAyMjA3OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgcmVnb3BlcmFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVHT1BFUkFSUkFZID0gMjIwODsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHJlZ29wZXJhdG9yYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUdPUEVSQVRPUkFSUkFZID0gMjIwOTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHJlZ2NsYXNzYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUdDTEFTU0FSUkFZID0gMjIxMDsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHJlZ3R5cGVhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFR1RZUEVBUlJBWSA9IDIyMTE7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB1dWlkYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVVVJRCA9IDI5NTA7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB1dWlkYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBVVUlEQVJSQVkgPSAyOTUxOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgdHN2ZWN0b3JgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUU1ZFQ1RPUiA9IDM2MTQ7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBndHN2ZWN0b3JgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBHVFNWRUNUT1IgPSAzNjQyOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgdHNxdWVyeWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFRTUVVFUlkgPSAzNjE1OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgcmVnY29uZmlnYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVHQ09ORklHID0gMzczNDsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHJlZ2RpY3Rpb25hcnlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUdESUNUSU9OQVJZID0gMzc2OTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHRzdmVjdG9yYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUU1ZFQ1RPUkFSUkFZID0gMzY0MzsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGd0c3ZlY3RvcmFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgR1RTVkVDVE9SQVJSQVkgPSAzNjQ0OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgdHNxdWVyeWFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVFNRVUVSWUFSUkFZID0gMzY0NTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHJlZ2NvbmZpZ2FycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVHQ09ORklHQVJSQVkgPSAzNzM1OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgcmVnZGljdGlvbmFyeWFycmF5YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVHRElDVElPTkFSWUFSUkFZID0gMzc3MDsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHR4aWRfc25hcHNob3RgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUWElEX1NOQVBTSE9UID0gMjk3MDsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHR4aWRfc25hcHNob3RhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFRYSURfU05BUFNIT1RBUlJBWSA9IDI5NDk7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBpbnQ0cmFuZ2VgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJTlQ0UkFOR0UgPSAzOTA0OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgaW50NHJhbmdlYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJTlQ0UkFOR0VBUlJBWSA9IDM5MDU7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBudW1yYW5nZWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE5VTVJBTkdFID0gMzkwNjsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYG51bXJhbmdlYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBOVU1SQU5HRUFSUkFZID0gMzkwNzsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHRzcmFuZ2VgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUU1JBTkdFID0gMzkwODsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYHRzcmFuZ2VhcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFRTUkFOR0VBUlJBWSA9IDM5MDk7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB0c3R6cmFuZ2VgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUU1RaUkFOR0UgPSAzOTEwOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgdHN0enJhbmdlYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUU1RaUkFOR0VBUlJBWSA9IDM5MTE7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBkYXRlcmFuZ2VgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBEQVRFUkFOR0UgPSAzOTEyOwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgZGF0ZXJhbmdlYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBEQVRFUkFOR0VBUlJBWSA9IDM5MTM7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBpbnQ4cmFuZ2VgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJTlQ4UkFOR0UgPSAzOTI2OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgaW50OHJhbmdlYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJTlQ4UkFOR0VBUlJBWSA9IDM5Mjc7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGByZWNvcmRgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUNPUkQgPSAyMjQ5OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgcmVjb3JkYXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUNPUkRBUlJBWSA9IDIyODc7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBjc3RyaW5nYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ1NUUklORyA9IDIyNzU7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBhbnlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBBTlkgPSAyMjc2OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgYW55YXJyYXlgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBBTllBUlJBWSA9IDIyNzc7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB2b2lkYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVk9JRCA9IDIyNzg7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGB0cmlnZ2VyYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVFJJR0dFUiA9IDIyNzk7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBldmVudF90cmlnZ2VyYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVZFTlRfVFJJR0dFUiA9IDM4Mzg7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBsYW5ndWFnZV9oYW5kbGVyYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgTEFOR1VBR0VfSEFORExFUiA9IDIyODA7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBpbnRlcm5hbGAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElOVEVSTkFMID0gMjI4MTsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYG9wYXF1ZWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QQVFVRSA9IDIyODI7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBhbnllbGVtZW50YCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQU5ZRUxFTUVOVCA9IDIyODM7CgogICAgLyoqCiAgICAgKiBPSUQgb2YgdGhlIGBhbnlub25hcnJheWAgdHlwZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEFOWU5PTkFSUkFZID0gMjc3NjsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGFueWVudW1gIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBBTllFTlVNID0gMzUwMDsKCiAgICAvKioKICAgICAqIE9JRCBvZiB0aGUgYGZkd19oYW5kbGVyYCB0eXBlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkRXX0hBTkRMRVIgPSAzMTE1OwoKICAgIC8qKgogICAgICogT0lEIG9mIHRoZSBgYW55cmFuZ2VgIHR5cGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBBTllSQU5HRSA9IDM4MzE7CgogICAgLyoqCiAgICAgKiBUaGUgY29ubmVjdGlvbiB3aGljaCB3YXMgdXNlZCB0byBvYnRhaW4gdHlwZSBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcHVibGljCiAgICAgKiBAcmVhZG9ubHkKICAgICAqIEB2YXIgXHBxXENvbm5lY3Rpb24KICAgICAqLwogICAgcHVibGljICRjb25uZWN0aW9uOwoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIHBvcHVsYXRlZCB3aXRoIGluZm9ybWF0aW9uIG9idGFpbmVkIGZyb20gdGhlIGBwZ190eXBlYCByZWxhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gXHBxXENvbm5lY3Rpb24gJGNvbm4gVGhlIGNvbm5lY3Rpb24gdG8gdXNlLgogICAgICogQHBhcmFtIGFycmF5ICRuYW1lc3BhY2VzIFdoaWNoIG5hbWVzcGFjZXMgdG8gcXVlcnkgKGRlZmF1bHRzIHRvIGBwdWJsaWNgIGFuZCBgcGdfY2F0YWxvZ2ApLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb25uZWN0aW9uICRjb25uLCBhcnJheSAkbmFtZXNwYWNlcyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBSZWZyZXNoIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBgcGdfdHlwZWAuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRuYW1lc3BhY2VzIFdoaWNoIG5hbWVzcGFjZXMgdG8gcXVlcnkgKGRlZmF1bHRzIHRvIGBwdWJsaWNgIGFuZCBgcGdfY2F0YWxvZ2ApLgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICogQHRocm93cyBccHFcRXhjZXB0aW9uXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgXHBxXEV4Y2VwdGlvblxSdW50aW1lRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWZyZXNoKGFycmF5ICRuYW1lc3BhY2VzID0gbnVsbCkge30KfQoKbmFtZXNwYWNlIHBxXEV4Y2VwdGlvbjsKCi8qKgogKiBBIG1ldGhvZCBjYWxsIHdhcyBub3QgZXhwZWN0ZWQuCiAqLwpjbGFzcyBCYWRNZXRob2RDYWxsRXhjZXB0aW9uIGV4dGVuZHMgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24gaW1wbGVtZW50cyBccHFcRXhjZXB0aW9uIHt9Ci8qKgogKiBJbXBsZW1lbnRhdGlvbiBvciBTUUwgc3ludGF4IGVycm9yLgogKi8KY2xhc3MgRG9tYWluRXhjZXB0aW9uIGV4dGVuZHMgXERvbWFpbkV4Y2VwdGlvbiBpbXBsZW1lbnRzIFxwcVxFeGNlcHRpb24KewogICAgLyoqCiAgICAgKiBUaGUgU1FMU1RBVEUgY29kZSwgc2VlIHRoZSBbb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbl0oaHR0cDovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2N1cnJlbnQvc3RhdGljL2VycmNvZGVzLWFwcGVuZGl4Lmh0bWwpIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgogICAgICoKICAgICAqIEBwdWJsaWMKICAgICAqIEByZWFkb25seQogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRzcWxzdGF0ZTsKfQovKioKICogQW4gaW52YWxpZCBhcmd1bWVudCB3YXMgcGFzc2VkIHRvIGEgbWV0aG9kLgogKi8KY2xhc3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGV4dGVuZHMgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpbXBsZW1lbnRzIFxwcVxFeGNlcHRpb24ge30KLyoqCiAqIEEgcnVudGltZSBleGNlcHRpb24gb2NjdXJyZWQuCiAqLwpjbGFzcyBSdW50aW1lRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBccHFcRXhjZXB0aW9uIHt9Cjw/cGhwCgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cUHVyZTsKCi8qKgogKiBDaGVjayBmb3IgYWxwaGFudW1lcmljIGNoYXJhY3RlcihzKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmN0eXBlLWFsbnVtLnBocAogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IDxwPgogKiBUaGUgdGVzdGVkIHN0cmluZy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgZXZlcnkgY2hhcmFjdGVyIGluIDxpPnRleHQ8L2k+IGlzIGVpdGhlcgogKiBhIGxldHRlciBvciBhIGRpZ2l0LCA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBjdHlwZV9hbG51bSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJ21peGVkJyldIG1peGVkICR0ZXh0KTogYm9vbCB7fQoKLyoqCiAqIENoZWNrIGZvciBhbHBoYWJldGljIGNoYXJhY3RlcihzKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmN0eXBlLWFscGhhLnBocAogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IDxwPgogKiBUaGUgdGVzdGVkIHN0cmluZy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgZXZlcnkgY2hhcmFjdGVyIGluIDxpPnRleHQ8L2k+IGlzCiAqIGEgbGV0dGVyIGZyb20gdGhlIGN1cnJlbnQgbG9jYWxlLCA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBjdHlwZV9hbHBoYSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJ21peGVkJyldIG1peGVkICR0ZXh0KTogYm9vbCB7fQoKLyoqCiAqIENoZWNrIGZvciBjb250cm9sIGNoYXJhY3RlcihzKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmN0eXBlLWNudHJsLnBocAogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IDxwPgogKiBUaGUgdGVzdGVkIHN0cmluZy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgZXZlcnkgY2hhcmFjdGVyIGluIDxpPnRleHQ8L2k+IGlzCiAqIGEgY29udHJvbCBjaGFyYWN0ZXIgZnJvbSB0aGUgY3VycmVudCBsb2NhbGUsIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGN0eXBlX2NudHJsKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnbWl4ZWQnKV0gbWl4ZWQgJHRleHQpOiBib29sIHt9CgovKioKICogQ2hlY2sgZm9yIG51bWVyaWMgY2hhcmFjdGVyKHMpCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uY3R5cGUtZGlnaXQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQgPHA+CiAqIFRoZSB0ZXN0ZWQgc3RyaW5nLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZwogKiA8aT50ZXh0PC9pPiBpcyBhIGRlY2ltYWwgZGlnaXQsIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGN0eXBlX2RpZ2l0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnbWl4ZWQnKV0gbWl4ZWQgJHRleHQpOiBib29sIHt9CgovKioKICogQ2hlY2sgZm9yIGxvd2VyY2FzZSBjaGFyYWN0ZXIocykKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5jdHlwZS1sb3dlci5waHAKICogQHBhcmFtIHN0cmluZyAkdGV4dCA8cD4KICogVGhlIHRlc3RlZCBzdHJpbmcuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiA8aT50ZXh0PC9pPiBpcwogKiBhIGxvd2VyY2FzZSBsZXR0ZXIgaW4gdGhlIGN1cnJlbnQgbG9jYWxlLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBjdHlwZV9sb3dlcigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJ21peGVkJyldIG1peGVkICR0ZXh0KTogYm9vbCB7fQoKLyoqCiAqIENoZWNrIGZvciBhbnkgcHJpbnRhYmxlIGNoYXJhY3RlcihzKSBleGNlcHQgc3BhY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5jdHlwZS1ncmFwaC5waHAKICogQHBhcmFtIHN0cmluZyAkdGV4dCA8cD4KICogVGhlIHRlc3RlZCBzdHJpbmcuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiA8aT50ZXh0PC9pPiBpcwogKiBwcmludGFibGUgYW5kIGFjdHVhbGx5IGNyZWF0ZXMgdmlzaWJsZSBvdXRwdXQgKG5vIHdoaXRlIHNwYWNlKSwgPGI+RkFMU0U8L2I+CiAqIG90aGVyd2lzZS4KICovCiNbUHVyZV0KZnVuY3Rpb24gY3R5cGVfZ3JhcGgoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICdtaXhlZCcpXSBtaXhlZCAkdGV4dCk6IGJvb2wge30KCi8qKgogKiBDaGVjayBmb3IgcHJpbnRhYmxlIGNoYXJhY3RlcihzKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmN0eXBlLXByaW50LnBocAogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IDxwPgogKiBUaGUgdGVzdGVkIHN0cmluZy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgZXZlcnkgY2hhcmFjdGVyIGluIDxpPnRleHQ8L2k+CiAqIHdpbGwgYWN0dWFsbHkgY3JlYXRlIG91dHB1dCAoaW5jbHVkaW5nIGJsYW5rcykuIFJldHVybnMgPGI+RkFMU0U8L2I+IGlmCiAqIDxpPnRleHQ8L2k+IGNvbnRhaW5zIGNvbnRyb2wgY2hhcmFjdGVycyBvciBjaGFyYWN0ZXJzCiAqIHRoYXQgZG8gbm90IGhhdmUgYW55IG91dHB1dCBvciBjb250cm9sIGZ1bmN0aW9uIGF0IGFsbC4KICovCiNbUHVyZV0KZnVuY3Rpb24gY3R5cGVfcHJpbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICdtaXhlZCcpXSBtaXhlZCAkdGV4dCk6IGJvb2wge30KCi8qKgogKiBDaGVjayBmb3IgYW55IHByaW50YWJsZSBjaGFyYWN0ZXIgd2hpY2ggaXMgbm90IHdoaXRlc3BhY2Ugb3IgYW4KICogYWxwaGFudW1lcmljIGNoYXJhY3RlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmN0eXBlLXB1bmN0LnBocAogKiBAcGFyYW0gc3RyaW5nICR0ZXh0IDxwPgogKiBUaGUgdGVzdGVkIHN0cmluZy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgZXZlcnkgY2hhcmFjdGVyIGluIDxpPnRleHQ8L2k+CiAqIGlzIHByaW50YWJsZSwgYnV0IG5laXRoZXIgbGV0dGVyLCBkaWdpdCBvciBibGFuaywgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICovCiNbUHVyZV0KZnVuY3Rpb24gY3R5cGVfcHVuY3QoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICdtaXhlZCcpXSBtaXhlZCAkdGV4dCk6IGJvb2wge30KCi8qKgogKiBDaGVjayBmb3Igd2hpdGVzcGFjZSBjaGFyYWN0ZXIocykKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5jdHlwZS1zcGFjZS5waHAKICogQHBhcmFtIHN0cmluZyAkdGV4dCA8cD4KICogVGhlIHRlc3RlZCBzdHJpbmcuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiA8aT50ZXh0PC9pPgogKiBjcmVhdGVzIHNvbWUgc29ydCBvZiB3aGl0ZSBzcGFjZSwgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4gQmVzaWRlcyB0aGUKICogYmxhbmsgY2hhcmFjdGVyIHRoaXMgYWxzbyBpbmNsdWRlcyB0YWIsIHZlcnRpY2FsIHRhYiwgbGluZSBmZWVkLAogKiBjYXJyaWFnZSByZXR1cm4gYW5kIGZvcm0gZmVlZCBjaGFyYWN0ZXJzLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBjdHlwZV9zcGFjZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJ21peGVkJyldIG1peGVkICR0ZXh0KTogYm9vbCB7fQoKLyoqCiAqIENoZWNrIGZvciB1cHBlcmNhc2UgY2hhcmFjdGVyKHMpCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uY3R5cGUtdXBwZXIucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQgPHA+CiAqIFRoZSB0ZXN0ZWQgc3RyaW5nLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiBldmVyeSBjaGFyYWN0ZXIgaW4gPGk+dGV4dDwvaT4gaXMKICogYW4gdXBwZXJjYXNlIGxldHRlciBpbiB0aGUgY3VycmVudCBsb2NhbGUuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGN0eXBlX3VwcGVyKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnbWl4ZWQnKV0gbWl4ZWQgJHRleHQpOiBib29sIHt9CgovKioKICogQ2hlY2sgZm9yIGNoYXJhY3RlcihzKSByZXByZXNlbnRpbmcgYSBoZXhhZGVjaW1hbCBkaWdpdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmN0eXBlLXhkaWdpdC5waHAKICogQHBhcmFtIHN0cmluZyAkdGV4dCA8cD4KICogVGhlIHRlc3RlZCBzdHJpbmcuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIGV2ZXJ5IGNoYXJhY3RlciBpbiA8aT50ZXh0PC9pPiBpcwogKiBhIGhleGFkZWNpbWFsICdkaWdpdCcsIHRoYXQgaXMgYSBkZWNpbWFsIGRpZ2l0IG9yIGEgY2hhcmFjdGVyIGZyb20KICogW0EtRmEtZl0gLCA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBjdHlwZV94ZGlnaXQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICdtaXhlZCcpXSBtaXhlZCAkdGV4dCk6IGJvb2wge30KPD9waHAKCi8qKgogKiBNYXBzY3JpcHQgZXh0ZW5zaW9uICh2ZXJzaW9uIDcuMC4qKQogKiBQYXJzZWQgZnJvbSBkb2N1bWVudGF0aW9uCiAqIEdlbmVyYXRlZCBhdCAyMDE3LTA4LTI0IDE2OjA2OjU0CiAqCiAqIEBzZWUgaHR0cHM6Ly9tYXBzZXJ2ZXIub3JnL21hcHNjcmlwdC9waHAvcGhwbWFwc2NyaXB0Lmh0bWwKICogQHNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWFwc2VydmVyL2RvY3MvYnJhbmNoLTctMC9lbi9tYXBzY3JpcHQvcGhwL3BocG1hcHNjcmlwdC50eHQKICovCgovLyBjb25zdGFudHMKY29uc3QgTVNfVFJVRSA9IDE7CmNvbnN0IE1TX0ZBTFNFID0gMDsKY29uc3QgTVNfT04gPSAxOwpjb25zdCBNU19PRkYgPSAwOwpjb25zdCBNU19ZRVMgPSAxOwpjb25zdCBNU19OTyA9IDA7CmNvbnN0IE1TX0lOQ0hFUyA9IDA7CmNvbnN0IE1TX0ZFRVQgPSAxOwpjb25zdCBNU19NSUxFUyA9IDI7CmNvbnN0IE1TX01FVEVSUyA9IDM7CmNvbnN0IE1TX0tJTE9NRVRFUlMgPSA0Owpjb25zdCBNU19ERCA9IDU7CmNvbnN0IE1TX1BJWEVMUyA9IDY7CmNvbnN0IE1TX05BVVRJQ0FMTUlMRVMgPSA4Owpjb25zdCBNU19MQVlFUl9QT0lOVCA9IDA7CmNvbnN0IE1TX0xBWUVSX0xJTkUgPSAxOwpjb25zdCBNU19MQVlFUl9QT0xZR09OID0gMjsKY29uc3QgTVNfTEFZRVJfUkFTVEVSID0gMzsKLy8gKGRlcHJlY2F0ZWQgc2luY2UgNi4yKQpjb25zdCBNU19MQVlFUl9BTk5PVEFUSU9OID0gNDsKY29uc3QgTVNfTEFZRVJfUVVFUlkgPSA1Owpjb25zdCBNU19MQVlFUl9DSVJDTEUgPSA2Owpjb25zdCBNU19MQVlFUl9USUxFSU5ERVggPSA3Owpjb25zdCBNU19MQVlFUl9DSEFSVCA9IDg7CmNvbnN0IE1TX0RFRkFVTFQgPSAyOwpjb25zdCBNU19FTUJFRCA9IDM7CmNvbnN0IE1TX0RFTEVURSA9IDQ7CmNvbnN0IE1TX0dEX0FMUEhBID0gMTAwMDsKY29uc3QgTVNfVUwgPSAxMDE7CmNvbnN0IE1TX0xSID0gMTAyOwpjb25zdCBNU19VUiA9IDEwMzsKY29uc3QgTVNfTEwgPSAxMDQ7CmNvbnN0IE1TX0NSID0gMTA1Owpjb25zdCBNU19DTCA9IDEwNjsKY29uc3QgTVNfVUMgPSAxMDc7CmNvbnN0IE1TX0xDID0gMTA4Owpjb25zdCBNU19DQyA9IDEwOTsKY29uc3QgTVNfWFkgPSAxMTE7CmNvbnN0IE1TX0FVVE8gPSAxMTA7CmNvbnN0IE1TX0FVVE8yID0gMTE0Owpjb25zdCBNU19GT0xMT1cgPSAxMTI7CmNvbnN0IE1TX05PTkUgPSAxMTM7CmNvbnN0IE1TX1RJTlkgPSAwOwpjb25zdCBNU19TTUFMTCA9IDE7CmNvbnN0IE1TX01FRElVTSA9IDI7CmNvbnN0IE1TX0xBUkdFID0gMzsKY29uc3QgTVNfR0lBTlQgPSA0Owpjb25zdCBNU19TSEFQRV9QT0lOVCA9IDA7CmNvbnN0IE1TX1NIQVBFX0xJTkUgPSAxOwpjb25zdCBNU19TSEFQRV9QT0xZR09OID0gMjsKY29uc3QgTVNfU0hBUEVfTlVMTCA9IDM7CmNvbnN0IE1TX1NIUF9QT0lOVCA9IDE7CmNvbnN0IE1TX1NIUF9BUkMgPSAzOwpjb25zdCBNU19TSFBfUE9MWUdPTiA9IDU7CmNvbnN0IE1TX1NIUF9NVUxUSVBPSU5UID0gODsKY29uc3QgTVNfU0lOR0xFID0gMDsKY29uc3QgTVNfTVVMVElQTEUgPSAxOwpjb25zdCBNU19OT1JNQUwgPSAwOwpjb25zdCBNU19ISUxJVEUgPSAxOwpjb25zdCBNU19TRUxFQ1RFRCA9IDI7CmNvbnN0IE1TX0lOTElORSA9IDA7CmNvbnN0IE1TX1NIQVBFRklMRSA9IDE7CmNvbnN0IE1TX1RJTEVEX1NIQVBFRklMRSA9IDI7CmNvbnN0IE1TX1NERSA9IDM7CmNvbnN0IE1TX09HUiA9IDQ7CmNvbnN0IE1TX1RJTEVEX09HUiA9IDU7CmNvbnN0IE1TX1BPU1RHSVMgPSA2Owpjb25zdCBNU19XTVMgPSA3Owpjb25zdCBNU19PUkFDTEVTUEFUSUFMID0gODsKY29uc3QgTVNfV0ZTID0gOTsKY29uc3QgTVNfR1JBVElDVUxFID0gMTA7CmNvbnN0IE1TX1JBU1RFUiA9IDEyOwpjb25zdCBNU19QTFVHSU4gPSAxMzsKY29uc3QgTVNfVU5JT04gPSAxNDsKY29uc3QgTVNfTk9FUlIgPSAwOwpjb25zdCBNU19JT0VSUiA9IDE7CmNvbnN0IE1TX01FTUVSUiA9IDI7CmNvbnN0IE1TX1RZUEVFUlIgPSAzOwpjb25zdCBNU19TWU1FUlIgPSA0Owpjb25zdCBNU19SRUdFWEVSUiA9IDU7CmNvbnN0IE1TX1RURkVSUiA9IDY7CmNvbnN0IE1TX0RCRkVSUiA9IDc7CmNvbnN0IE1TX0dERVJSID0gODsKY29uc3QgTVNfSURFTlRFUlIgPSA5Owpjb25zdCBNU19FT0ZFUlIgPSAxMDsKY29uc3QgTVNfUFJPSkVSUiA9IDExOwpjb25zdCBNU19NSVNDRVJSID0gMTI7CmNvbnN0IE1TX0NHSUVSUiA9IDEzOwpjb25zdCBNU19XRUJFUlIgPSAxNDsKY29uc3QgTVNfSU1HRVJSID0gMTU7CmNvbnN0IE1TX0hBU0hFUlIgPSAxNjsKY29uc3QgTVNfSk9JTkVSUiA9IDE3Owpjb25zdCBNU19OT1RGT1VORCA9IDE4Owpjb25zdCBNU19TSFBFUlIgPSAxOTsKY29uc3QgTVNfUEFSU0VFUlIgPSAyMDsKY29uc3QgTVNfU0RFRVJSID0gMjE7CmNvbnN0IE1TX09HUkVSUiA9IDIyOwpjb25zdCBNU19RVUVSWUVSUiA9IDIzOwpjb25zdCBNU19XTVNFUlIgPSAyNDsKY29uc3QgTVNfV01TQ09OTkVSUiA9IDI1Owpjb25zdCBNU19PUkFDTEVTUEFUSUFMRVJSID0gMjY7CmNvbnN0IE1TX1dGU0VSUiA9IDI3Owpjb25zdCBNU19XRlNDT05ORVJSID0gMjg7CmNvbnN0IE1TX01BUENPTlRFWFRFUlIgPSAyOTsKY29uc3QgTVNfSFRUUEVSUiA9IDMwOwpjb25zdCBNU19XQ1NFUlIgPSAzMjsKY29uc3QgTVNfU1lNQk9MX1NJTVBMRSA9IDEwMDA7CmNvbnN0IE1TX1NZTUJPTF9WRUNUT1IgPSAxMDAxOwpjb25zdCBNU19TWU1CT0xfRUxMSVBTRSA9IDEwMDI7CmNvbnN0IE1TX1NZTUJPTF9QSVhNQVAgPSAxMDAzOwpjb25zdCBNU19TWU1CT0xfVFJVRVRZUEUgPSAxMDA0Owpjb25zdCBNU19JTUFHRU1PREVfUEMyNTYgPSAwOwpjb25zdCBNU19JTUFHRU1PREVfUkdCID0gMTsKY29uc3QgTVNfSU1BR0VNT0RFX1JHQkEgPSAyOwpjb25zdCBNU19JTUFHRU1PREVfSU5UMTYgPSAzOwpjb25zdCBNU19JTUFHRU1PREVfRkxPQVQzMiA9IDQ7CmNvbnN0IE1TX0lNQUdFTU9ERV9CWVRFID0gNTsKY29uc3QgTVNfSU1BR0VNT0RFX0ZFQVRVUkUgPSA2Owpjb25zdCBNU19JTUFHRU1PREVfTlVMTCA9IDc7CmNvbnN0IE1TX1NUWUxFX0JJTkRJTkdfU0laRSA9IDA7CmNvbnN0IE1TX1NUWUxFX0JJTkRJTkdfQU5HTEUgPSAyOwpjb25zdCBNU19TVFlMRV9CSU5ESU5HX0NPTE9SID0gMzsKY29uc3QgTVNfU1RZTEVfQklORElOR19PVVRMSU5FQ09MT1IgPSA0Owpjb25zdCBNU19TVFlMRV9CSU5ESU5HX1NZTUJPTCA9IDU7CmNvbnN0IE1TX1NUWUxFX0JJTkRJTkdfV0lEVEggPSAxOwpjb25zdCBNU19MQUJFTF9CSU5ESU5HX1NJWkUgPSAwOwpjb25zdCBNU19MQUJFTF9CSU5ESU5HX0FOR0xFID0gMTsKY29uc3QgTVNfTEFCRUxfQklORElOR19DT0xPUiA9IDI7CmNvbnN0IE1TX0xBQkVMX0JJTkRJTkdfT1VUTElORUNPTE9SID0gMzsKY29uc3QgTVNfTEFCRUxfQklORElOR19GT05UID0gNDsKY29uc3QgTVNfTEFCRUxfQklORElOR19QUklPUklUWSA9IDU7CmNvbnN0IE1TX0xBQkVMX0JJTkRJTkdfUE9TSVRJT04gPSA2Owpjb25zdCBNU19MQUJFTF9CSU5ESU5HX1NIQURPV1NJWkVYID0gNzsKY29uc3QgTVNfTEFCRUxfQklORElOR19TSEFET1dTSVpFWSA9IDg7CmNvbnN0IE1TX0FMSUdOX0xFRlQgPSAwOwpjb25zdCBNU19BTElHTl9DRU5URVIgPSAxOwpjb25zdCBNU19BTElHTl9SSUdIVCA9IDI7CmNvbnN0IE1TX0dFVF9SRVFVRVNUID0gMDsKY29uc3QgTVNfUE9TVF9SRVFVRVNUID0gMTsKCi8qKgogKiBSZXR1cm5zIHRoZSBNYXBTZXJ2ZXIgdmVyc2lvbiBhbmQgb3B0aW9ucyBpbiBhIHN0cmluZy4gIFRoaXMKICogc3RyaW5nIGNhbiBiZSBwYXJzZWQgdG8gZmluZCBvdXQgd2hpY2ggbW9kdWxlcyB3ZXJlIGNvbXBpbGVkIGluLAogKiBldGMuCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBtc19HZXRWZXJzaW9uKCkge30KCi8qKgogKiBSZXR1cm5zIHRoZSBNYXBTZXJ2ZXIgdmVyc2lvbiBudW1iZXIgKHgueS56KSBhcyBhbiBpbnRlZ2VyCiAqICh4KjEwMDAwICsgeSoxMDAgKyB6KS4gKE5ldyBpbiB2NS4wKSBlLmcuIFY1LjQuMyB3b3VsZCByZXR1cm4KICogNTA0MDMuCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiBtc19HZXRWZXJzaW9uSW50KCkge30KCi8qKgogKiBXcml0ZXMgdGhlIGN1cnJlbnQgYnVmZmVyIHRvIHN0ZG91dC4gIFRoZSBQSFAgaGVhZGVyKCkgZnVuY3Rpb24KICogc2hvdWxkIGJlIHVzZWQgdG8gc2V0IHRoZSBkb2N1bWVudHMncyBjb250ZW50LXR5cGUgcHJpb3IgdG8KICogY2FsbGluZyB0aGUgZnVuY3Rpb24uICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpZgogKiBvdXRwdXQgaXMgc2VudCB0byBzdGRvdXQuICBTZWUgOnJlZjpgbWFwc2NyaXB0X293c2AgZm9yIG1vcmUgaW5mby4KICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIG1zX2lvZ2V0U3Rkb3V0QnVmZmVyQnl0ZXMoKSB7fQoKLyoqCiAqIEZldGNoIHRoZSBjdXJyZW50IHN0ZG91dCBidWZmZXIgY29udGVudHMgYXMgYSBzdHJpbmcuICBUaGlzIG1ldGhvZAogKiBkb2VzIG5vdCBjbGVhciB0aGUgYnVmZmVyLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIG1zX2lvZ2V0c3Rkb3V0YnVmZmVyc3RyaW5nKCkge30KCi8qKgogKiBJbnN0YWxscyBhIG1hcHNlcnZlciBJTyBoYW5kbGVyIGRpcmVjdGluZyBmdXR1cmUgc3RkaW4gcmVhZGluZwogKiAoaWUuIHBvc3QgcmVxdWVzdCBjYXB0dXJlKSB0byBjb21lIGZyb20gYSBidWZmZXIuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gbXNfaW9pbnN0YWxsc3RkaW5mcm9tYnVmZmVyKCkge30KCi8qKgogKiBJbnN0YWxscyBhIG1hcHNlcnZlciBJTyBoYW5kbGVyIGRpcmVjdGluZyBmdXR1cmUgc3Rkb3V0IG91dHB1dAogKiB0byBhIG1lbW9yeSBidWZmZXIuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gbXNfaW9pbnN0YWxsc3Rkb3V0dG9idWZmZXIoKSB7fQoKLyoqCiAqIFJlc2V0cyB0aGUgZGVmYXVsdCBzdGRpbiBhbmQgc3Rkb3V0IGhhbmRsZXJzIGluIHBsYWNlIG9mICJidWZmZXIiCiAqIGJhc2VkIGhhbmRsZXJzLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIG1zX2lvcmVzZXRoYW5kbGVycygpIHt9CgovKioKICogU3RyaXAgdGhlIENvbnRlbnQtdHlwZSBoZWFkZXIgb2ZmIHRoZSBzdGRvdXQgYnVmZmVyIGlmIGl0IGhhcyBvbmUsCiAqIGFuZCBpZiBhIGNvbnRlbnQgdHlwZSBpcyBmb3VuZCBpdCBpcyByZXR1cm4uIE90aGVyd2lzZSByZXR1cm4KICogZmFsc2UuCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBtc19pb3N0cmlwc3Rkb3V0YnVmZmVyY29udGVudHR5cGUoKSB7fQoKLyoqCiAqIFN0cmlwIGFsbCB0aGUgQ29udGVudC0qIGhlYWRlcnMgb2ZmIHRoZSBzdGRvdXQgYnVmZmVyIGlmIGl0IGhhcwogKiBzb21lLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIG1zX2lvc3RyaXBzdGRvdXRidWZmZXJjb250ZW50aGVhZGVycygpIHt9CgovKioKICogUHJlcGFyc2VzIGEgbWFwZmlsZSB0aHJvdWdoIHRoZSBNYXBTZXJ2ZXIgcGFyc2VyIGFuZCByZXR1cm4gYW4KICogYXJyYXkgd2l0aCBvbmUgaXRlbSBmb3IgZWFjaCB0b2tlbiBmcm9tIHRoZSBtYXBmaWxlLiAgU3RyaW5ncywKICogbG9naWNhbCBleHByZXNzaW9ucywgcmVnZXggZXhwcmVzc2lvbnMgYW5kIGNvbW1lbnRzIGFyZSByZXR1cm5lZAogKiBhcyBpbmRpdmlkdWFsIHRva2Vucy4KICoKICogQHBhcmFtIHN0cmluZyAkbWFwX2ZpbGVfbmFtZQogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiBtc19Ub2tlbml6ZU1hcCgkbWFwX2ZpbGVfbmFtZSkge30KCi8qKgogKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IG9mIGVycm9yT2JqLgogKgogKiBAcmV0dXJuIGVycm9yT2JqCiAqLwpmdW5jdGlvbiBtc19HZXRFcnJvck9iaigpIHt9CgovKioKICogQ2xlYXIgdGhlIGN1cnJlbnQgZXJyb3IgbGlzdC4KICogTm90ZSB0aGF0IGNsZWFyaW5nIHRoZSBsaXN0IGludmFsaWRhdGVzIGFueSBlcnJvck9iaiBoYW5kbGVzIG9idGFpbmVkCiAqIHZpYSB0aGUgJGVycm9yLT5uZXh0KCkgbWV0aG9kLgogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIG1zX1Jlc2V0RXJyb3JMaXN0KCkge30KCi8qKgogKiBDbGFzcyBPYmplY3RzIGNhbiBiZSByZXR1cm5lZCBieSB0aGUgYGxheWVyT2JqYF8gY2xhc3MsIG9yIGNhbiBiZQogKiBjcmVhdGVkIHVzaW5nOgogKi8KZmluYWwgY2xhc3MgY2xhc3NPYmoKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGdyb3VwOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRrZXlpbWFnZTsKCiAgICAvKioKICAgICAqIFJlbW92ZWQgKDYuMikgLSB1c2UgYWRkTGFiZWwsIGdldExhYmVsLCAuLi4KICAgICAqCiAgICAgKiBAdmFyIGxhYmVsT2JqCiAgICAgKi8KICAgIHB1YmxpYyAkbGFiZWw7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkbWF4c2NhbGVkZW5vbTsKCiAgICAvKioKICAgICAqIEB2YXIgaGFzaFRhYmxlT2JqCiAgICAgKi8KICAgIHB1YmxpYyAkbWV0YWRhdGE7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkbWluc2NhbGVkZW5vbTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkbmFtZTsKCiAgICAvKioKICAgICAqIHJlYWQtb25seSAoc2luY2UgNi4yKQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkbnVtbGFiZWxzOwoKICAgIC8qKgogICAgICogcmVhZC1vbmx5CiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRudW1zdHlsZXM7CgogICAgLyoqCiAgICAgKiBNU19PTiwgTVNfT0ZGIG9yIE1TX0RFTEVURQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkc3RhdHVzOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICR0ZW1wbGF0ZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkdGl0bGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHR5cGU7CgogICAgLyoqCiAgICAgKiBUaGUgc2Vjb25kIGFyZ3VtZW50IGNsYXNzIGlzIG9wdGlvbmFsLiBJZiBnaXZlbiwgdGhlIG5ldyBjbGFzcwogICAgICogY3JlYXRlZCB3aWxsIGJlIGEgY29weSBvZiB0aGlzIGNsYXNzLgogICAgICoKICAgICAqIEBwYXJhbSBsYXllck9iaiAkbGF5ZXIKICAgICAqIEBwYXJhbSBjbGFzc09iaiAkY2xhc3MKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGxheWVyT2JqICRsYXllciwgY2xhc3NPYmogJGNsYXNzKSB7fQoKICAgIC8qKgogICAgICogT2xkIHN0eWxlIGNvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIGxheWVyT2JqICRsYXllcgogICAgICogQHBhcmFtIGNsYXNzT2JqICRjbGFzcwogICAgICogQHJldHVybiBjbGFzc09iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gbXNfbmV3Q2xhc3NPYmoobGF5ZXJPYmogJGxheWVyLCBjbGFzc09iaiAkY2xhc3MpIHt9CgogICAgLyoqCiAgICAgKiBBZGQgYSBsYWJlbE9iaiB0byB0aGUgY2xhc3NPYmogYW5kIHJldHVybiBpdHMgaW5kZXggaW4gdGhlIGxhYmVscwogICAgICogYXJyYXkuCiAgICAgKiAuLiB2ZXJzaW9uYWRkZWQ6OiA2LjIKICAgICAqCiAgICAgKiBAcGFyYW0gbGFiZWxPYmogJGxhYmVsCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gYWRkTGFiZWwobGFiZWxPYmogJGxhYmVsKSB7fQoKICAgIC8qKgogICAgICogU2F2ZXMgdGhlIG9iamVjdCB0byBhIHN0cmluZy4gIFByb3ZpZGVzIHRoZSBpbnZlcnNlIG9wdGlvbiBmb3IKICAgICAqIHVwZGF0ZUZyb21TdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZygpIHt9CgogICAgLyoqCiAgICAgKiBEcmF3IHRoZSBsZWdlbmQgaWNvbiBhbmQgcmV0dXJuIGEgbmV3IGltYWdlT2JqLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoCiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQKICAgICAqIEByZXR1cm4gaW1hZ2VPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUxlZ2VuZEljb24oJHdpZHRoLCAkaGVpZ2h0KSB7fQoKICAgIC8qKgogICAgICogRGVsZXRlIHRoZSBzdHlsZSBzcGVjaWZpZWQgYnkgdGhlIHN0eWxlIGluZGV4LiBJZiB0aGVyZSBhcmUgYW55CiAgICAgKiBzdHlsZSB0aGF0IGZvbGxvdyB0aGUgZGVsZXRlZCBzdHlsZSwgdGhlaXIgaW5kZXggd2lsbCBkZWNyZWFzZSBieSAxLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlc3R5bGUoJGluZGV4KSB7fQoKICAgIC8qKgogICAgICogRHJhdyB0aGUgbGVnZW5kIGljb24gb24gaW0gb2JqZWN0IGF0IGRzdFgsIGRzdFkuCiAgICAgKiBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR3aWR0aAogICAgICogQHBhcmFtIGludCAkaGVpZ2h0CiAgICAgKiBAcGFyYW0gaW1hZ2VPYmogJGltCiAgICAgKiBAcGFyYW0gaW50ICRkc3RYCiAgICAgKiBAcGFyYW0gaW50ICRkc3RZCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZHJhd0xlZ2VuZEljb24oJHdpZHRoLCAkaGVpZ2h0LCBpbWFnZU9iaiAkaW0sICRkc3RYLCAkZHN0WSkge30KCiAgICAvKioKICAgICAqIEZyZWUgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCBicmVhayB0aGUgaW50ZXJuYWwgcmVmZXJlbmNlcy4KICAgICAqIE5vdGUgdGhhdCB5b3UgaGF2ZSB0byB1bnNldCB0aGUgcGhwIHZhcmlhYmxlIHRvIGZyZWUgdG90YWxseSB0aGUKICAgICAqIHJlc291cmNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGZyZWUoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgOnJlZjpgZXhwcmVzc2lvbiA8ZXhwcmVzc2lvbnM+YCBzdHJpbmcgZm9yIHRoZSBjbGFzcwogICAgICogb2JqZWN0LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHByZXNzaW9uU3RyaW5nKCkge30KCiAgICAvKioKICAgICAqIFJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgbGFiZWxPYmogYXQgKmluZGV4KiBpbiB0aGUgbGFiZWxzIGFycmF5LgogICAgICogU2VlIHRoZSBsYWJlbE9ial8gc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzIG9uIG11bHRpcGxlIGNsYXNzCiAgICAgKiBsYWJlbHMuCiAgICAgKiAuLiB2ZXJzaW9uYWRkZWQ6OiA2LjIKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleAogICAgICogQHJldHVybiBsYWJlbE9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFiZWwoJGluZGV4KSB7fQoKICAgIC8qKgogICAgICogRmV0Y2ggY2xhc3MgbWV0YWRhdGEgZW50cnkgYnkgbmFtZS4gIFJldHVybnMgIiIgaWYgbm8gZW50cnkKICAgICAqIG1hdGNoZXMgdGhlIG5hbWUuICBOb3RlIHRoYXQgdGhlIHNlYXJjaCBpcyBjYXNlIHNlbnNpdGl2ZS4KICAgICAqIC4uIG5vdGU6OgogICAgICogZ2V0TWV0YURhdGEncyBxdWVyeSBpcyBjYXNlIHNlbnNpdGl2ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YURhdGEoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHN0eWxlIG9iamVjdCB1c2luZyBhbiBpbmRleC4gaW5kZXggPj0gMCAmJgogICAgICogaW5kZXggPCBjbGFzcy0+bnVtc3R5bGVzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4CiAgICAgKiBAcmV0dXJuIHN0eWxlT2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHlsZSgkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB0ZXh0IHN0cmluZyBmb3IgdGhlIGNsYXNzIG9iamVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0VGV4dFN0cmluZygpIHt9CgogICAgLyoqCiAgICAgKiBUaGUgc3R5bGUgc3BlY2lmaWVkIGJ5IHRoZSBzdHlsZSBpbmRleCB3aWxsIGJlIG1vdmVkIGRvd24gaW50bwogICAgICogdGhlIGFycmF5IG9mIGNsYXNzZXMuIFJldHVybnMgTVNfU1VDQ0VTUyBvciBNU19GQUlMVVJFLgogICAgICogZXggY2xhc3MtPm1vdmVzdHlsZWRvd24oMCkgd2lsbCBoYXZlIHRoZSBlZmZlY3Qgb2YgbW92aW5nIHN0eWxlIDAKICAgICAqIHVwIHRvIHBvc2l0aW9uIDEsIGFuZCB0aGUgc3R5bGUgYXQgcG9zaXRpb24gMSB3aWxsIGJlIG1vdmVkCiAgICAgKiB0byBwb3NpdGlvbiAwLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gbW92ZXN0eWxlZG93bigkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBUaGUgc3R5bGUgc3BlY2lmaWVkIGJ5IHRoZSBzdHlsZSBpbmRleCB3aWxsIGJlIG1vdmVkIHVwIGludG8KICAgICAqIHRoZSBhcnJheSBvZiBjbGFzc2VzLiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IgTVNfRkFJTFVSRS4KICAgICAqIGV4IGNsYXNzLT5tb3Zlc3R5bGV1cCgxKSB3aWxsIGhhdmUgdGhlIGVmZmVjdCBvZiBtb3Zpbmcgc3R5bGUgMQogICAgICogdXAgdG8gcG9zaXRpb24gMCwgYW5kIHRoZSBzdHlsZSBhdCBwb3NpdGlvbiAwIHdpbGwgYmUgbW92ZWQKICAgICAqIHRvIHBvc2l0aW9uIDEuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaW5kZXgKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBtb3Zlc3R5bGV1cCgkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgdGhlIGxhYmVsT2JqIGF0ICppbmRleCogZnJvbSB0aGUgbGFiZWxzIGFycmF5IGFuZCByZXR1cm4gYQogICAgICogcmVmZXJlbmNlIHRvIHRoZSBsYWJlbE9iai4gIG51bWxhYmVscyBpcyBkZWNyZW1lbnRlZCwgYW5kIHRoZQogICAgICogYXJyYXkgaXMgdXBkYXRlZC4KICAgICAqIC4uIHZlcnNpb25hZGRlZDo6IDYuMgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4CiAgICAgKiBAcmV0dXJuIGxhYmVsT2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVMYWJlbCgkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgYSBtZXRhZGF0YSBlbnRyeSBmb3IgdGhlIGNsYXNzLiAgUmV0dXJucyBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHJlbW92ZU1ldGFEYXRhKCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogU2V0IG9iamVjdCBwcm9wZXJ0eSB0byBhIG5ldyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eV9uYW1lCiAgICAgKiBAcGFyYW0gICRuZXdfdmFsdWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXQoJHByb3BlcnR5X25hbWUsICRuZXdfdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIDpyZWY6YGV4cHJlc3Npb24gPGV4cHJlc3Npb25zPmAgc3RyaW5nIGZvciB0aGUgY2xhc3MKICAgICAqIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRleHByZXNzaW9uCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0RXhwcmVzc2lvbigkZXhwcmVzc2lvbikge30KCiAgICAvKioKICAgICAqIFNldCBhIG1ldGFkYXRhIGVudHJ5IGZvciB0aGUgY2xhc3MuICBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldE1ldGFEYXRhKCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHRleHQgc3RyaW5nIGZvciB0aGUgY2xhc3Mgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXR0ZXh0KCR0ZXh0KSB7fQoKICAgIC8qKgogICAgICogVXBkYXRlIGEgY2xhc3MgZnJvbSBhIHN0cmluZyBzbmlwcGV0LiBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqIC4uIGNvZGUtYmxvY2s6OiBwaHAKICAgICAqIHNldCB0aGUgY29sb3IKICAgICAqICRvQ2xhc3MtPnVwZGF0ZUZyb21TdHJpbmcoJ0NMQVNTIFNUWUxFIENPTE9SIDI1NSAwIDI1NSBFTkQgRU5EJyk7CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc25pcHBldAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZUZyb21TdHJpbmcoJHNuaXBwZXQpIHt9Cn0KCi8qKgogKiBJbnN0YW5jZSBvZiBjbHVzdGVyT2JqIGlzIGFsd2F5cyBlbWJlZGRlZCBpbnNpZGUgdGhlIGBsYXllck9iamBfLgogKi8KZmluYWwgY2xhc3MgY2x1c3Rlck9iagp7CiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgcHVibGljICRidWZmZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkbWF4ZGlzdGFuY2U7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJHJlZ2lvbjsKCiAgICAvKioKICAgICAqIFNhdmVzIHRoZSBvYmplY3QgdG8gYSBzdHJpbmcuICBQcm92aWRlcyB0aGUgaW52ZXJzZSBvcHRpb24gZm9yCiAgICAgKiB1cGRhdGVGcm9tU3RyaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBjb252ZXJ0VG9TdHJpbmcoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgOnJlZjpgZXhwcmVzc2lvbiA8ZXhwcmVzc2lvbnM+YCBmb3IgdGhpcyBjbHVzdGVyCiAgICAgKiBmaWx0ZXIgb3IgTlVMTCBvbiBlcnJvci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0RmlsdGVyU3RyaW5nKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIDpyZWY6YGV4cHJlc3Npb24gPGV4cHJlc3Npb25zPmAgZm9yIHRoaXMgY2x1c3RlciBncm91cAogICAgICogb3IgTlVMTCBvbiBlcnJvci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0R3JvdXBTdHJpbmcoKSB7fQoKICAgIC8qKgogICAgICogU2V0IGxheWVyIGZpbHRlciA6cmVmOmBleHByZXNzaW9uIDxleHByZXNzaW9ucz5gLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGV4cHJlc3Npb24KICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRGaWx0ZXIoJGV4cHJlc3Npb24pIHt9CgogICAgLyoqCiAgICAgKiBTZXQgbGF5ZXIgZ3JvdXAgOnJlZjpgZXhwcmVzc2lvbiA8ZXhwcmVzc2lvbnM+YC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRleHByZXNzaW9uCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0R3JvdXAoJGV4cHJlc3Npb24pIHt9Cn0KCi8qKgogKiBJbnN0YW5jZXMgb2YgY29sb3JPYmogYXJlIGFsd2F5cyBlbWJlZGRlZCBpbnNpZGUgb3RoZXIgY2xhc3Nlcy4KICovCmZpbmFsIGNsYXNzIGNvbG9yT2JqCnsKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRyZWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGdyZWVuOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRibHVlOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRhbHBoYTsKCiAgICAvKioKICAgICAqIEdldCB0aGUgY29sb3IgYXMgYSBoZXggc3RyaW5nICIjcnJnZ2JiIiBvciAoaWYgYWxwaGEgaXMgbm90IDI1NSkKICAgICAqICIjcnJnZ2JiYWEiLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiB0b0hleCgpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgcmVkLCBncmVlbiwgYmx1ZSBhbmQgYWxwaGEgdmFsdWVzLiBUaGUgaGV4IHN0cmluZyBzaG91bGQgaGF2ZSB0aGUgZm9ybQogICAgICogIiNycmdnYmIiIChhbHBoYSB3aWxsIGJlIHNldCB0byAyNTUpIG9yICIjcnJnZ2JiYWEiLiBSZXR1cm5zIE1TX1NVQ0NFU1MuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaGV4CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0SGV4KCRoZXgpIHt9Cn0KCmZpbmFsIGNsYXNzIGVycm9yT2JqCnsKICAgIC8qKgogICAgICogLy9TZWUgZXJyb3IgY29kZSBjb25zdGFudHMgYWJvdmUKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGNvZGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJG1lc3NhZ2U7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJHJvdXRpbmU7Cn0KCi8qKgogKiBUaGUgZ3JpZCBpcyBhbHdheXMgZW1iZWRkZWQgaW5zaWRlIGEgbGF5ZXIgb2JqZWN0IGRlZmluZWQgYXMKICogYSBncmlkIChsYXllci0+Y29ubmVjdGlvbnR5cGUgPSBNU19HUkFUSUNVTEUpCiAqIChmb3IgbW9yZSBkb2NzIDogaHR0cHM6Ly9naXRodWIuY29tL21hcHNlcnZlci9tYXBzZXJ2ZXIvd2lraS9NYXBTZXJ2ZXJHcmlkKQogKiBBIGxheWVyIGNhbiBiZWNvbWUgYSBncmlkIGxheWVyIGJ5IGFkZGluZyBhIGdyaWQgb2JqZWN0IHRvIGl0IHVzaW5nIDoKICogbXNfbmV3R3JpZE9iaihsYXllck9iaiBsYXllcikKICogJG9MYXllciA9IG1zX25ld2xheWVyb2JqKCRvTWFwKTsKICogJG9MYXllci0+c2V0KCJuYW1lIiwgIkdSSUQiKTsKICogbXNfbmV3Z3JpZG9iaigkb0xheWVyKTsKICogJG9MYXllci0+Z3JpZC0+c2V0KCJsYWJlbGZvcm1hdCIsICJERE1NU1MiKTsKICovCmZpbmFsIGNsYXNzIGdyaWRPYmoKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGxhYmVsZm9ybWF0OwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJG1heGFjcnM7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkbWF4aW50ZXJ2YWw7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkbWF4c3ViZGl2aWRlOwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJG1pbmFyY3M7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkbWluaW50ZXJ2YWw7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkbWluc3ViZGl2aWRlOwoKICAgIC8qKgogICAgICogU2V0IG9iamVjdCBwcm9wZXJ0eSB0byBhIG5ldyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eV9uYW1lCiAgICAgKiBAcGFyYW0gICRuZXdfdmFsdWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXQoJHByb3BlcnR5X25hbWUsICRuZXdfdmFsdWUpIHt9Cn0KCi8qKgogKiBJbnN0YW5jZSBvZiBoYXNoVGFibGVPYmogaXMgYWx3YXlzIGVtYmVkZGVkIGluc2lkZSB0aGUgYGNsYXNzT2JqYF8sCiAqIGBsYXllck9iamBfLCBgbWFwT2JqYF8gYW5kIGB3ZWJPYmpgXy4gSXQgaXMgdXNlcyBhIHJlYWQgb25seS4KICogJGhhc2hUYWJsZSA9ICRvTGF5ZXItPm1ldGFkYXRhOwogKiAka2V5ID0gbnVsbDsKICogd2hpbGUgKCRrZXkgPSAkaGFzaFRhYmxlLT5uZXh0a2V5KCRrZXkpKQogKiBlY2hvICJLZXk6ICIuJGtleS4iIHZhbHVlOiAiLiRoYXNoVGFibGUtPmdldCgka2V5KS4iPGJyLz4iOwogKi8KZmluYWwgY2xhc3MgaGFzaFRhYmxlT2JqCnsKICAgIC8qKgogICAgICogQ2xlYXIgYWxsIGl0ZW1zIGluIHRoZSBoYXNoVGFibGUgKFRvIE5VTEwpLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoKSB7fQoKICAgIC8qKgogICAgICogRmV0Y2ggY2xhc3MgbWV0YWRhdGEgZW50cnkgYnkgbmFtZS4gIFJldHVybnMgIiIgaWYgbm8gZW50cnkKICAgICAqIG1hdGNoZXMgdGhlIG5hbWUuICBOb3RlIHRoYXQgdGhlIHNlYXJjaCBpcyBjYXNlIHNlbnNpdGl2ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXQoJGtleSkge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgbmV4dCBrZXkgb3IgZmlyc3Qga2V5IGlmIHByZXZpb3VzS2V5ID0gTlVMTC4KICAgICAqIFJldHVybiBOVUxMIGlmIG5vIGl0ZW0gaXMgaW4gdGhlIGhhc2hUYWJsZSBvciBlbmQgb2YgaGFzaFRhYmxlIGlzCiAgICAgKiByZWFjaGVkCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJldmlvdXNLZXkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBuZXh0a2V5KCRwcmV2aW91c0tleSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBhIG1ldGFkYXRhIGVudHJ5IGluIHRoZSBoYXNoVGFibGUuICBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoJGtleSkge30KCiAgICAvKioKICAgICAqIFNldCBhIG1ldGFkYXRhIGVudHJ5IGluIHRoZSBoYXNoVGFibGUuIFJldHVybnMgTVNfU1VDQ0VTUy9NU19GQUlMVVJFLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXQoJGtleSwgJHZhbHVlKSB7fQp9CgovKioKICogSW5zdGFuY2VzIG9mIGltYWdlT2JqIGFyZSBhbHdheXMgY3JlYXRlZCBieSB0aGUgYG1hcE9iamBfIGNsYXNzIG1ldGhvZHMuCiAqLwpmaW5hbCBjbGFzcyBpbWFnZU9iagp7CiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkd2lkdGg7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGhlaWdodDsKCiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkcmVzb2x1dGlvbjsKCiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkcmVzb2x1dGlvbmZhY3RvcjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkaW1hZ2VwYXRoOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRpbWFnZXVybDsKCiAgICAvKioKICAgICAqIENvcHkgc3JjSW1nIG9uIHRvcCBvZiB0aGUgY3VycmVudCBpbWFnZU9iai4KICAgICAqIHRyYW5zcGFyZW50Q29sb3JIZXggaXMgdGhlIGNvbG9yIChpbiAweHJyZ2diYiBmb3JtYXQpIGZyb20gc3JjSW1nCiAgICAgKiB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIHRyYW5zcGFyZW50IChpLmUuIHRob3NlIHBpeGVscyB3b24ndAogICAgICogYmUgY29waWVkKS4gIFBhc3MgLTEgaWYgeW91IGRvbid0IHdhbnQgYW55IHRyYW5zcGFyZW50IGNvbG9yLgogICAgICogSWYgb3B0aW9uYWwgZHN0eCxkc3R5IGFyZSBwcm92aWRlZCB0aGVuIGl0IGRlZmluZXMgdGhlIHBvc2l0aW9uCiAgICAgKiB3aGVyZSB0aGUgaW1hZ2Ugc2hvdWxkIGJlIGNvcGllZCAoZHN0eCxkc3R5ID0gdG9wLWxlZnQgY29ybmVyCiAgICAgKiBwb3NpdGlvbikuCiAgICAgKiBUaGUgb3B0aW9uYWwgYW5nbGUgaXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzIHRvIHJvdGF0ZQogICAgICogdGhlIHNvdXJjZSBpbWFnZSBjb3VudGVyY2xvY2t3aXNlLiAgTm90ZSB0aGF0IGlmIGFuIGFuZ2xlIGlzIHNwZWNpZmllZAogICAgICogKGV2ZW4gaWYgaXRzIHZhbHVlIGlzIHplcm8pIHRoZW4gdGhlIGRzdHggYW5kIGRzdHkgY29vcmRpbmF0ZXMKICAgICAqIHNwZWNpZnkgdGhlIENFTlRFUiBvZiB0aGUgZGVzdGluYXRpb24gYXJlYS4KICAgICAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gd29ya3Mgb25seSB3aXRoIDggYml0cyBHRCBpbWFnZXMgKFBORyBvciBHSUYpLgogICAgICoKICAgICAqIEBwYXJhbSBpbWFnZU9iaiAkc3JjSW1nCiAgICAgKiBAcGFyYW0gaW50ICR0cmFuc3BhcmVudENvbG9ySGV4CiAgICAgKiBAcGFyYW0gaW50ICRkc3RYCiAgICAgKiBAcGFyYW0gaW50ICRkc3RZCiAgICAgKiBAcGFyYW0gaW50ICRhbmdsZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBwYXN0ZUltYWdlKGltYWdlT2JqICRzcmNJbWcsICR0cmFuc3BhcmVudENvbG9ySGV4LCAkZHN0WCwgJGRzdFksICRhbmdsZSkge30KCiAgICAvKioKICAgICAqIFdyaXRlcyBpbWFnZSBvYmplY3QgdG8gc3BlY2lmaWVkIGZpbGVuYW1lLgogICAgICogUGFzc2luZyBubyBmaWxlbmFtZSBvciBhbiBlbXB0eSBmaWxlbmFtZSBzZW5kcyBvdXRwdXQgdG8gc3Rkb3V0LiAgSW4KICAgICAqIHRoaXMgY2FzZSwgdGhlIFBIUCBoZWFkZXIoKSBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB0byBzZXQgdGhlCiAgICAgKiBkb2N1bWVudCdzIGNvbnRlbnQtdHlwZSBwcmlvciB0byBjYWxsaW5nIHNhdmVJbWFnZSgpLiAgVGhlIG91dHB1dAogICAgICogZm9ybWF0IGlzIHRoZSBvbmUgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgaW4gdGhlIG1hcCBmaWxlLiAgVGhlCiAgICAgKiBzZWNvbmQgYXJndW1lbnQgb01hcCBpcyBub3QgbWFuYWRhdG9yeS4gSXQgaXMgdXNmdWwgd2hlbiBzYXZpbmcgdG8KICAgICAqIGZvcm1hdHMgbGlrZSBHVElGRiB0aGF0IG5lZWRzIGdlb3JlZmVyZW5jZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4KICAgICAqIHRoZSBtYXAgZmlsZS4gT24gc3VjY2VzcywgaXQgcmV0dXJucyBlaXRoZXIgTVNfU1VDQ0VTUyBpZiB3cml0aW5nIHRvIGFuCiAgICAgKiBleHRlcm5hbCBmaWxlLCBvciB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gaWYgb3V0cHV0IGlzIHNlbnQgdG8KICAgICAqIHN0ZG91dC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIG1hcE9iaiAkb01hcAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNhdmVJbWFnZSgkZmlsZW5hbWUsIG1hcE9iaiAkb01hcCkge30KCiAgICAvKioKICAgICAqIFdyaXRlcyBpbWFnZSB0byB0ZW1wIGRpcmVjdG9yeS4gIFJldHVybnMgaW1hZ2UgVVJMLgogICAgICogVGhlIG91dHB1dCBmb3JtYXQgaXMgdGhlIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZCBpbiB0aGUKICAgICAqIG1hcCBmaWxlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzYXZlV2ViSW1hZ2UoKSB7fQp9CgpmaW5hbCBjbGFzcyBsYWJlbGNhY2hlTWVtYmVyT2JqCnsKICAgIC8qKgogICAgICogcmVhZC1vbmx5CiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRjbGFzc2luZGV4OwoKICAgIC8qKgogICAgICogcmVhZC1vbmx5CiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRmZWF0dXJlc2l6ZTsKCiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkbGF5ZXJpbmRleDsKCiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkbWFya2VyaWQ7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG51bXN0eWxlczsKCiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkc2hhcGVpbmRleDsKCiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkc3RhdHVzOwoKICAgIC8qKgogICAgICogcmVhZC1vbmx5CiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICR0ZXh0OwoKICAgIC8qKgogICAgICogcmVhZC1vbmx5CiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICR0aWxlaW5kZXg7Cn0KCmZpbmFsIGNsYXNzIGxhYmVsY2FjaGVPYmoKewogICAgLyoqCiAgICAgKiBGcmVlIHRoZSBsYWJlbCBjYWNoZS4gQWx3YXlzIHJldHVybnMgTVNfU1VDQ0VTUy4KICAgICAqIEV4IDogbWFwLT5sYWJlbGNhY2hlLT5mcmVlQ2FjaGUoKTsKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGZyZWVDYWNoZSgpIHt9Cn0KCi8qKgogKiBsYWJlbE9iaiBhcmUgYWx3YXlzIGVtYmVkZGVkIGluc2lkZSBvdGhlciBjbGFzc2VzLgogKi8KZmluYWwgY2xhc3MgbGFiZWxPYmoKewogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGFsaWduOwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJGFuZ2xlOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRhbmdsZW1vZGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGFudGlhbGlhczsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkYXV0b21pbmZlYXR1cmVzaXplOwoKICAgIC8qKgogICAgICogKGRlcHJlY2F0ZWQgc2luY2UgNi4wKQogICAgICoKICAgICAqIEB2YXIgY29sb3JPYmoKICAgICAqLwogICAgcHVibGljICRiYWNrZ3JvdW5kY29sb3I7CgogICAgLyoqCiAgICAgKiAoZGVwcmVjYXRlZCBzaW5jZSA2LjApCiAgICAgKgogICAgICogQHZhciBjb2xvck9iagogICAgICovCiAgICBwdWJsaWMgJGJhY2tncm91bmRzaGFkb3djb2xvcjsKCiAgICAvKioKICAgICAqIChkZXByZWNhdGVkIHNpbmNlIDYuMCkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGJhY2tncm91bmRzaGFkb3dzaXpleDsKCiAgICAvKioKICAgICAqIChkZXByZWNhdGVkIHNpbmNlIDYuMCkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGJhY2tncm91bmRzaGFkb3dzaXpleTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkYnVmZmVyOwoKICAgIC8qKgogICAgICogQHZhciBjb2xvck9iagogICAgICovCiAgICBwdWJsaWMgJGNvbG9yOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRlbmNvZGluZzsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkZm9udDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkZm9yY2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG1heGxlbmd0aDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkbWF4c2l6ZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkbWluZGlzdGFuY2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG1pbmZlYXR1cmVzaXplOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRtaW5sZW5ndGg7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG1pbnNpemU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG51bXN0eWxlczsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkb2Zmc2V0eDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkb2Zmc2V0eTsKCiAgICAvKioKICAgICAqIEB2YXIgY29sb3JPYmoKICAgICAqLwogICAgcHVibGljICRvdXRsaW5lY29sb3I7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG91dGxpbmV3aWR0aDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkcGFydGlhbHM7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHBvc2l0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRwcmlvcml0eTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkcmVwZWF0ZGlzdGFuY2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGNvbG9yT2JqCiAgICAgKi8KICAgIHB1YmxpYyAkc2hhZG93Y29sb3I7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHNoYWRvd3NpemV4OwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRzaGFkb3dzaXpleTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkc2l6ZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkd3JhcDsKCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogU2F2ZXMgdGhlIG9iamVjdCB0byBhIHN0cmluZy4gIFByb3ZpZGVzIHRoZSBpbnZlcnNlIG9wdGlvbiBmb3IKICAgICAqIHVwZGF0ZUZyb21TdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZygpIHt9CgogICAgLyoqCiAgICAgKiBEZWxldGUgdGhlIHN0eWxlIHNwZWNpZmllZCBieSB0aGUgc3R5bGUgaW5kZXguIElmIHRoZXJlIGFyZSBhbnkKICAgICAqIHN0eWxlIHRoYXQgZm9sbG93IHRoZSBkZWxldGVkIHN0eWxlLCB0aGVpciBpbmRleCB3aWxsIGRlY3JlYXNlIGJ5IDEuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaW5kZXgKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVTdHlsZSgkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBGcmVlIHRoZSBvYmplY3QgcHJvcGVydGllcyBhbmQgYnJlYWsgdGhlIGludGVybmFsIHJlZmVyZW5jZXMuCiAgICAgKiBOb3RlIHRoYXQgeW91IGhhdmUgdG8gdW5zZXQgdGhlIHBocCB2YXJpYWJsZSB0byBmcmVlIHRvdGFsbHkgdGhlCiAgICAgKiByZXNvdXJjZXMuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBmcmVlKCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgYXR0cmlidXRlIGJpbmRpbmcgZm9yIGEgc3BlY2lmaWVkIGxhYmVsIHByb3BlcnR5LiBSZXR1cm5zCiAgICAgKiBOVUxMIGlmIHRoZXJlIGlzIG5vIGJpbmRpbmcgZm9yIHRoaXMgcHJvcGVydHkuCiAgICAgKiBFeGFtcGxlOgogICAgICogLi4gY29kZS1ibG9jazo6IHBocAogICAgICogJG9MYWJlbC0+c2V0YmluZGluZyhNU19MQUJFTF9CSU5ESU5HX0NPTE9SLCAiRklFTERfTkFNRV9DT0xPUiIpOwogICAgICogZWNobyAkb0xhYmVsLT5nZXRiaW5kaW5nKE1TX0xBQkVMX0JJTkRJTkdfQ09MT1IpOyAvLyBGSUVMRF9OQU1FX0NPTE9SCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRsYWJlbGJpbmRpbmcKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRCaW5kaW5nKCRsYWJlbGJpbmRpbmcpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsYWJlbCBleHByZXNzaW9uIHN0cmluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhwcmVzc2lvblN0cmluZygpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHN0eWxlIG9iamVjdCB1c2luZyBhbiBpbmRleC4gaW5kZXggPj0gMCAmJgogICAgICogaW5kZXggPCBsYWJlbC0+bnVtc3R5bGVzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4CiAgICAgKiBAcmV0dXJuIHN0eWxlT2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHlsZSgkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IHN0cmluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0VGV4dFN0cmluZygpIHt9CgogICAgLyoqCiAgICAgKiBUaGUgc3R5bGUgc3BlY2lmaWVkIGJ5IHRoZSBzdHlsZSBpbmRleCB3aWxsIGJlIG1vdmVkIGRvd24gaW50bwogICAgICogdGhlIGFycmF5IG9mIGNsYXNzZXMuIFJldHVybnMgTVNfU1VDQ0VTUyBvciBNU19GQUlMVVJFLgogICAgICogZXggbGFiZWwtPm1vdmVzdHlsZWRvd24oMCkgd2lsbCBoYXZlIHRoZSBlZmZlY3Qgb2YgbW92aW5nIHN0eWxlIDAKICAgICAqIHVwIHRvIHBvc2l0aW9uIDEsIGFuZCB0aGUgc3R5bGUgYXQgcG9zaXRpb24gMSB3aWxsIGJlIG1vdmVkCiAgICAgKiB0byBwb3NpdGlvbiAwLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gbW92ZVN0eWxlRG93bigkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBUaGUgc3R5bGUgc3BlY2lmaWVkIGJ5IHRoZSBzdHlsZSBpbmRleCB3aWxsIGJlIG1vdmVkIHVwIGludG8KICAgICAqIHRoZSBhcnJheSBvZiBjbGFzc2VzLiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IgTVNfRkFJTFVSRS4KICAgICAqIGV4IGxhYmVsLT5tb3Zlc3R5bGV1cCgxKSB3aWxsIGhhdmUgdGhlIGVmZmVjdCBvZiBtb3Zpbmcgc3R5bGUgMQogICAgICogdXAgdG8gcG9zaXRpb24gMCwgYW5kIHRoZSBzdHlsZSBhdCBwb3NpdGlvbiAwIHdpbGwgYmUgbW92ZWQKICAgICAqIHRvIHBvc2l0aW9uIDEuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaW5kZXgKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBtb3ZlU3R5bGVVcCgkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgdGhlIGF0dHJpYnV0ZSBiaW5kaW5nIGZvciBhIHNwZWNmaWxlZCBzdHlsZSBwcm9wZXJ0eS4KICAgICAqIEV4YW1wbGU6CiAgICAgKiAuLiBjb2RlLWJsb2NrOjogcGhwCiAgICAgKiAkb1N0eWxlLT5yZW1vdmViaW5kaW5nKE1TX0xBQkVMX0JJTkRJTkdfQ09MT1IpOwogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkbGFiZWxiaW5kaW5nCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQmluZGluZygkbGFiZWxiaW5kaW5nKSB7fQoKICAgIC8qKgogICAgICogU2V0IG9iamVjdCBwcm9wZXJ0eSB0byBhIG5ldyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eV9uYW1lCiAgICAgKiBAcGFyYW0gICRuZXdfdmFsdWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXQoJHByb3BlcnR5X25hbWUsICRuZXdfdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGF0dHJpYnV0ZSBiaW5kaW5nIGZvciBhIHNwZWNpZmllZCBsYWJlbCBwcm9wZXJ0eS4KICAgICAqIEV4YW1wbGU6CiAgICAgKiAuLiBjb2RlLWJsb2NrOjogcGhwCiAgICAgKiAkb0xhYmVsLT5zZXRiaW5kaW5nKE1TX0xBQkVMX0JJTkRJTkdfQ09MT1IsICJGSUVMRF9OQU1FX0NPTE9SIik7CiAgICAgKiBUaGlzIHdvdWxkIGJpbmQgdGhlIGNvbG9yIHBhcmFtZXRlciB3aXRoIHRoZSBkYXRhIChpZSB3aWxsIGV4dHJhY3QKICAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgY29sb3IgZnJvbSB0aGUgZmllbGQgY2FsbGVkICJGSUVMRF9OQU1FX0NPTE9SIgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkbGFiZWxiaW5kaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldEJpbmRpbmcoJGxhYmVsYmluZGluZywgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBsYWJlbCBleHByZXNzaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGV4cHJlc3Npb24KICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRFeHByZXNzaW9uKCRleHByZXNzaW9uKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBsYWJlbCB0ZXh0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRUZXh0KCR0ZXh0KSB7fQoKICAgIC8qKgogICAgICogVXBkYXRlIGEgbGFiZWwgZnJvbSBhIHN0cmluZyBzbmlwcGV0LiBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzbmlwcGV0CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gdXBkYXRlRnJvbVN0cmluZygkc25pcHBldCkge30KfQoKLyoqCiAqIExheWVyIE9iamVjdHMgY2FuIGJlIHJldHVybmVkIGJ5IHRoZSBgbWFwT2JqYF8gY2xhc3MsIG9yIGNhbiBiZQogKiBjcmVhdGVkIHVzaW5nOgogKiBBIHNlY29uZCBvcHRpb25hbCBhcmd1bWVudCBjYW4gYmUgZ2l2ZW4gdG8gbXNfbmV3TGF5ZXJPYmooKSB0byBjcmVhdGUKICogdGhlIG5ldyBsYXllciBhcyBhIGNvcHkgb2YgYW4gZXhpc3RpbmcgbGF5ZXIuIElmIGEgbGF5ZXIgaXMgZ2l2ZW4gYXMKICogYXJndW1lbnQgdGhlbiBhbGwgbWVtYmVycyBvZiBhIHRoaXMgbGF5ZXIgd2lsbCBiZSBjb3BpZWQgaW4gdGhlIG5ldwogKiBsYXllciBjcmVhdGVkLgogKi8KZmluYWwgY2xhc3MgbGF5ZXJPYmoKewogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGFubm90YXRlOwoKICAgIC8qKgogICAgICogQHZhciBoYXNoVGFibGVPYmoKICAgICAqLwogICAgcHVibGljICRiaW5kdmFsczsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkY2xhc3Nncm91cDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkY2xhc3NpdGVtOwoKICAgIC8qKgogICAgICogQHZhciBjbHVzdGVyT2JqCiAgICAgKi8KICAgIHB1YmxpYyAkY2x1c3RlcjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkY29ubmVjdGlvbjsKCiAgICAvKioKICAgICAqIHJlYWQtb25seSwgdXNlIHNldENvbm5lY3Rpb25UeXBlKCkgdG8gc2V0IGl0CiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRjb25uZWN0aW9udHlwZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkZGF0YTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkZGVidWc7CgogICAgLyoqCiAgICAgKiBkZXByZWNhdGVkIHNpbmNlIDYuMAogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkZHVtcDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkZmlsdGVyaXRlbTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkZm9vdGVyOwoKICAgIC8qKgogICAgICogb25seSBhdmFpbGFibGUgb24gYSBsYXllciBkZWZpbmVkIGFzIGdyaWQgKE1TX0dSQVRJQ1VMRSkKICAgICAqCiAgICAgKiBAdmFyIGdyaWRPYmoKICAgICAqLwogICAgcHVibGljICRncmlkOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRncm91cDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkaGVhZGVyOwoKICAgIC8qKgogICAgICogcmVhZC1vbmx5CiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRpbmRleDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkbGFiZWxjYWNoZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkbGFiZWxpdGVtOwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJGxhYmVsbWF4c2NhbGVkZW5vbTsKCiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgcHVibGljICRsYWJlbG1pbnNjYWxlZGVub207CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGxhYmVscmVxdWlyZXM7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJG1hc2s7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG1heGZlYXR1cmVzOwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJG1heHNjYWxlZGVub207CgogICAgLyoqCiAgICAgKiBAdmFyIGhhc2hUYWJsZU9iagogICAgICovCiAgICBwdWJsaWMgJG1ldGFkYXRhOwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJG1pbnNjYWxlZGVub207CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJG5hbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG51bV9wcm9jZXNzaW5nOwoKICAgIC8qKgogICAgICogcmVhZC1vbmx5CiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRudW1jbGFzc2VzOwoKICAgIC8qKgogICAgICogQHZhciBjb2xvck9iagogICAgICovCiAgICBwdWJsaWMgJG9mZnNpdGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG9wYWNpdHk7CgogICAgLyoqCiAgICAgKiBAdmFyIHByb2plY3Rpb25PYmoKICAgICAqLwogICAgcHVibGljICRwcm9qZWN0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRwb3N0bGFiZWxjYWNoZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkcmVxdWlyZXM7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHNpemV1bml0czsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkc3RhcnRpbmRleDsKCiAgICAvKioKICAgICAqIE1TX09OLCBNU19PRkYsIE1TX0RFRkFVTFQgb3IgTVNfREVMRVRFCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRzdGF0dXM7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJHN0eWxlaXRlbTsKCiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgcHVibGljICRzeW1ib2xzY2FsZWRlbm9tOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICR0ZW1wbGF0ZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkdGlsZWluZGV4OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICR0aWxlaXRlbTsKCiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgcHVibGljICR0b2xlcmFuY2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHRvbGVyYW5jZXVuaXRzOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICR0cmFuc2Zvcm07CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHR5cGU7CgogICAgLyoqCiAgICAgKiBPbGQgc3R5bGUgY29uc3RydWN0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gbWFwT2JqICRtYXAKICAgICAqIEBwYXJhbSBsYXllck9iaiAkbGF5ZXIKICAgICAqIEByZXR1cm4gbGF5ZXJPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIG1zX25ld0xheWVyT2JqKG1hcE9iaiAkbWFwLCBsYXllck9iaiAkbGF5ZXIpIHt9CgogICAgLyoqCiAgICAgKiBBZGQgYSBuZXcgZmVhdHVyZSBpbiBhIGxheWVyLiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IgTVNfRkFJTFVSRSBvbgogICAgICogZXJyb3IuCiAgICAgKgogICAgICogQHBhcmFtIHNoYXBlT2JqICRzaGFwZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGFkZEZlYXR1cmUoc2hhcGVPYmogJHNoYXBlKSB7fQoKICAgIC8qKgogICAgICogQXBwbHkgdGhlIDpyZWY6YFNMRCA8c2xkPmAgZG9jdW1lbnQgdG8gdGhlIGxheWVyIG9iamVjdC4KICAgICAqIFRoZSBtYXRjaGluZyBiZXR3ZWVuIHRoZSBzbGQgZG9jdW1lbnQgYW5kIHRoZSBsYXllciB3aWxsIGJlIGRvbmUKICAgICAqIHVzaW5nIHRoZSBsYXllcidzIG5hbWUuCiAgICAgKiBJZiBhIG5hbWVkbGF5ZXIgYXJndW1lbnQgaXMgcGFzc2VkIChhcmd1bWVudCBpcyBvcHRpb25hbCksCiAgICAgKiB0aGUgTmFtZWRMYXllciBpbiB0aGUgc2xkIHRoYXQgbWF0Y2hzIGl0IHdpbGwgYmUgdXNlZCB0byBzdHlsZQogICAgICogdGhlIGxheWVyLgogICAgICogU2VlIDpyZWY6YFNMRCBIb3dUbyA8c2xkPmAgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFNMRCBzdXBwb3J0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNsZHhtbAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZWRsYXllcgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGFwcGx5U0xEKCRzbGR4bWwsICRuYW1lZGxheWVyKSB7fQoKICAgIC8qKgogICAgICogQXBwbHkgdGhlIDpyZWY6YFNMRCA8c2xkPmAgZG9jdW1lbnQgcG9pbnRlZCBieSB0aGUgVVJMIHRvIHRoZQogICAgICogbGF5ZXIgb2JqZWN0LiBUaGUgbWF0Y2hpbmcgYmV0d2VlbiB0aGUgc2xkIGRvY3VtZW50IGFuZCB0aGUgbGF5ZXIKICAgICAqIHdpbGwgYmUgZG9uZSB1c2luZyB0aGUgbGF5ZXIncyBuYW1lLiAgSWYgYSBuYW1lZGxheWVyIGFyZ3VtZW50IGlzCiAgICAgKiBwYXNzZWQgKGFyZ3VtZW50IGlzIG9wdGlvbmFsKSwgdGhlIE5hbWVkTGF5ZXIgaW4gdGhlIHNsZCB0aGF0CiAgICAgKiBtYXRjaHMgaXQgd2lsbCBiZSB1c2VkIHRvIHN0eWxlIHRoZSBsYXllci4gIFNlZSA6cmVmOmBTTEQgSG93VG8gPHNsZD5gCiAgICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgU0xEIHN1cHBvcnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2xkdXJsCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lZGxheWVyCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gYXBwbHlTTERVUkwoJHNsZHVybCwgJG5hbWVkbGF5ZXIpIHt9CgogICAgLyoqCiAgICAgKiBDbGVhcnMgYWxsIHRoZSBwcm9jZXNzaW5nIHN0cmluZ3MuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBjbGVhclByb2Nlc3NpbmcoKSB7fQoKICAgIC8qKgogICAgICogQ2xvc2UgbGF5ZXIgcHJldmlvdXNseSBvcGVuZWQgd2l0aCBvcGVuKCkuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpIHt9CgogICAgLyoqCiAgICAgKiBTYXZlcyB0aGUgb2JqZWN0IHRvIGEgc3RyaW5nLiAgUHJvdmlkZXMgdGhlIGludmVyc2Ugb3B0aW9uIGZvcgogICAgICogdXBkYXRlRnJvbVN0cmluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gY29udmVydFRvU3RyaW5nKCkge30KCiAgICAvKioKICAgICAqIERyYXcgYSBzaW5nbGUgbGF5ZXIsIGFkZCBsYWJlbHMgdG8gY2FjaGUgaWYgcmVxdWlyZWQuCiAgICAgKiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IgTVNfRkFJTFVSRSBvbiBlcnJvci4KICAgICAqCiAgICAgKiBAcGFyYW0gaW1hZ2VPYmogJGltYWdlCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZHJhdyhpbWFnZU9iaiAkaW1hZ2UpIHt9CgogICAgLyoqCiAgICAgKiBEcmF3IHF1ZXJ5IG1hcCBmb3IgYSBzaW5nbGUgbGF5ZXIuCiAgICAgKiBzdHJpbmcgICBleGVjdXRlV0ZTR2V0ZmVhdHVyZSgpCiAgICAgKiBFeGVjdXRlcyBhIEdldEZlYXR1cmUgcmVxdWVzdCBvbiBhIFdGUyBsYXllciBhbmQgcmV0dXJucyB0aGUKICAgICAqIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBHTUwgZmlsZSBjcmVhdGVkLiBSZXR1cm5zIGFuIGVtcHR5CiAgICAgKiBzdHJpbmcgb24gZXJyb3IuCiAgICAgKgogICAgICogQHBhcmFtIGltYWdlT2JqICRpbWFnZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGRyYXdRdWVyeShpbWFnZU9iaiAkaW1hZ2UpIHt9CgogICAgLyoqCiAgICAgKiBGcmVlIHRoZSBvYmplY3QgcHJvcGVydGllcyBhbmQgYnJlYWsgdGhlIGludGVybmFsIHJlZmVyZW5jZXMuCiAgICAgKiBOb3RlIHRoYXQgeW91IGhhdmUgdG8gdW5zZXQgdGhlIHBocCB2YXJpYWJsZSB0byBmcmVlIHRvdGFsbHkgdGhlCiAgICAgKiByZXNvdXJjZXMuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBmcmVlKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gU0xEIFhNTCBzdHJpbmcgYmFzZWQgb24gYWxsIHRoZSBjbGFzc2VzIGZvdW5kIGluIHRoZQogICAgICogbGF5ZXIgKHRoZSBsYXllciBtdXN0IGhhdmUgYFNUQVRVU2AgYG9uYCkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlU0xEKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBjbGFzc09iaiBmcm9tIHRoZSBsYXllciBnaXZlbiBhbiBpbmRleCB2YWx1ZSAoMD1maXJzdCBjbGFzcykKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRjbGFzc0luZGV4CiAgICAgKiBAcmV0dXJuIGNsYXNzT2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGFzcygkY2xhc3NJbmRleCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgY2xhc3MgaW5kZXggb2YgYSBzaGFwZSBmb3IgYSBnaXZlbiBzY2FsZS4gUmV0dXJucyAtMSBpZiBubwogICAgICogY2xhc3MgbWF0Y2hlcy4gY2xhc3Nncm91cCBpcyBhbiBhcnJheSBvZiBjbGFzcyBpZHMgdG8gY2hlY2sKICAgICAqIChPcHRpb25hbCkuIG51bWNsYXNzZXMgaXMgdGhlIG51bWJlciBvZiBjbGFzc2VzIHRoYXQgdGhlIGNsYXNzZ3JvdXAKICAgICAqIGFycmF5IGNvbnRhaW5zLiBCeSBkZWZhdWx0LCBhbGwgdGhlIGxheWVyIGNsYXNzZXMgd2lsbCBiZSBjaGVja2VkLgogICAgICoKICAgICAqIEBwYXJhbSAgJHNoYXBlCiAgICAgKiBAcGFyYW0gICRjbGFzc2dyb3VwCiAgICAgKiBAcGFyYW0gICRudW1jbGFzc2VzCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xhc3NJbmRleCgkc2hhcGUsICRjbGFzc2dyb3VwLCAkbnVtY2xhc3Nlcykge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxheWVyJ3MgZGF0YSBleHRlbnRzIG9yIE5VTEwgb24gZXJyb3IuCiAgICAgKiBJZiB0aGUgbGF5ZXIncyBFWFRFTlQgbWVtYmVyIGlzIHNldCB0aGVuIHRoaXMgdmFsdWUgaXMgdXNlZCwKICAgICAqIG90aGVyd2lzZSB0aGlzIGNhbGwgb3BlbnMvY2xvc2VzIHRoZSBsYXllciB0byByZWFkIHRoZQogICAgICogZXh0ZW50cy4gVGhpcyBpcyBxdWljayBvbiBzaGFwZWZpbGVzLCBidXQgY2FuIGJlCiAgICAgKiBhbiBleHBlbnNpdmUgb3BlcmF0aW9uIG9uIHNvbWUgZmlsZSBmb3JtYXRzIG9yIGRhdGEgc291cmNlcy4KICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgc2FmZSB0byB1c2Ugb24gYm90aCBvcGVuZWQgb3IgY2xvc2VkIGxheWVyczogaXQKICAgICAqIGlzIG5vdCBuZWNlc3NhcnkgdG8gY2FsbCBvcGVuKCkvY2xvc2UoKSBiZWZvcmUvYWZ0ZXIgY2FsbGluZyBpdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHJlY3RPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldEV4dGVudCgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSA6cmVmOmBleHByZXNzaW9uIDxleHByZXNzaW9ucz5gIGZvciB0aGlzIGxheWVyIG9yIE5VTEwKICAgICAqIG9uIGVycm9yLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldEZpbHRlclN0cmluZygpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGdyaWQgaW50ZXJzZWN0aW9uIGNvb3JkaW5hdGVzLiBJZgogICAgICogdGhlcmUgYXJlIG5vIGNvb3JkaW5hdGVzLCBpdCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldEdyaWRJbnRlcnNlY3Rpb25Db29yZGluYXRlcygpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGl0ZW1zLiBNdXN0IGNhbGwgb3BlbiBmdW5jdGlvbiBmaXJzdC4KICAgICAqIElmIHRoZXJlIGFyZSBubyBpdGVtcywgaXQgcmV0dXJucyBhbiBlbXB0eSBhcnJheS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVtcygpIHt9CgogICAgLyoqCiAgICAgKiBGZXRjaCBsYXllciBtZXRhZGF0YSBlbnRyeSBieSBuYW1lLiAgUmV0dXJucyAiIiBpZiBubyBlbnRyeQogICAgICogbWF0Y2hlcyB0aGUgbmFtZS4gIE5vdGUgdGhhdCB0aGUgc2VhcmNoIGlzIGNhc2Ugc2Vuc2l0aXZlLgogICAgICogLi4gbm90ZTo6CiAgICAgKiBnZXRNZXRhRGF0YSdzIHF1ZXJ5IGlzIGNhc2Ugc2Vuc2l0aXZlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhRGF0YSgkbmFtZSkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiByZXN1bHRzIGluIHRoZSBsYXN0IHF1ZXJ5LgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXROdW1SZXN1bHRzKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgcHJvY2Vzc2luZyBzdHJpbmdzLgogICAgICogSWYgdGhlcmUgYXJlIG5vIHByb2Nlc3Npbmcgc3RyaW5ncywgaXQgcmV0dXJucyBhbiBlbXB0eSBhcnJheS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRQcm9jZXNzaW5nKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIDpyZWY6YHByb2plY3Rpb24gPHByb2plY3Rpb24+YC4KICAgICAqIFJldHVybnMgTlVMTCBvbiBlcnJvciBvciBpZiBubyBwcm9qZWN0aW9uIGlzIHNldC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvamVjdGlvbigpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgcmVzdWx0T2JqIGJ5IGluZGV4IGZyb20gYSBsYXllciBvYmplY3Qgd2l0aAogICAgICogaW5kZXggaW4gdGhlIHJhbmdlIDAgdG8gbnVtcmVzdWx0cy0xLgogICAgICogUmV0dXJucyBhIHZhbGlkIG9iamVjdCBvciBGQUxTRSgwKSBpZiBpbmRleCBpcyBpbnZhbGlkLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4CiAgICAgKiBAcmV0dXJuIHJlc3VsdE9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzdWx0KCRpbmRleCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgbGF0ZXN0IHJlc3VsdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHJlY3RPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldFJlc3VsdHNCb3VuZHMoKSB7fQoKICAgIC8qKgogICAgICogSWYgdGhlIHJlc3VsdE9iaiBwYXNzZWQgaGFzIGEgdmFsaWQgcmVzdWx0aW5kZXgsIHJldHJpZXZlIHNoYXBlT2JqIGZyb20KICAgICAqIGEgbGF5ZXIncyByZXN1bHRzZXQuIChZb3UgZ2V0IGl0IGZyb20gdGhlIHJlc3VsdE9iaiByZXR1cm5lZCBieQogICAgICogZ2V0UmVzdWx0KCkgZm9yIGluc3RhbmNlKS4gT3RoZXJ3aXNlLCBpdCB3aWxsIGRvIGEgc2luZ2xlIHF1ZXJ5IG9uCiAgICAgKiB0aGUgbGF5ZXIgdG8gZmV0Y2ggdGhlIHNoYXBlaW5kZXgKICAgICAqIC4uIGNvZGUtYmxvY2s6OiBwaHAKICAgICAqICRtYXAgPSBuZXcgbWFwT2JqKCJnbWFwNzUubWFwIik7CiAgICAgKiAkbCA9ICRtYXAtPmdldExheWVyQnlOYW1lKCJwb3BwbGFjZSIpOwogICAgICogJGwtPnF1ZXJ5QnlSZWN0KCRtYXAtPmV4dGVudCk7CiAgICAgKiBmb3IgKCRpID0gMDsgJGkgPCAkbC0+Z2V0TnVtUmVzdWx0cygpOyAkaSsrKSB7CiAgICAgKiAgICAgJHMgPSAkbC0+Z2V0U2hhcGUoJGwtPmdldFJlc3VsdCgkaSkpOwogICAgICogICAgIGVjaG8gJHMtPmdldFZhbHVlKCRsLCJOYW1lIik7CiAgICAgKiAgICAgZWNobyAiXG4iOwogICAgICogfQogICAgICoKICAgICAqIEBwYXJhbSByZXN1bHRPYmogJHJlc3VsdAogICAgICogQHJldHVybiBzaGFwZU9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0U2hhcGUocmVzdWx0T2JqICRyZXN1bHQpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgV01TIEdldEZlYXR1cmVJbmZvIFVSTCAod29ya3Mgb25seSBmb3IgV01TIGxheWVycykKICAgICAqIGNsaWNrWCwgY2xpY2tZIGlzIHRoZSBsb2NhdGlvbiBvZiB0byBxdWVyeSBpbiBwaXhlbCBjb29yZGluYXRlcwogICAgICogd2l0aCAoMCwwKSBhdCB0aGUgdG9wIGxlZnQgb2YgdGhlIGltYWdlLgogICAgICogZmVhdHVyZUNvdW50IGlzIHRoZSBudW1iZXIgb2YgcmVzdWx0cyB0byByZXR1cm4uCiAgICAgKiBpbmZvRm9ybWF0IGlzIHRoZSBmb3JtYXQgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgcmVzdWx0IHNob3VsZCBiZQogICAgICogcmVxdWVzdGVkLiAgRGVwZW5kcyBvbiByZW1vdGUgc2VydmVyJ3MgY2FwYWJpbGl0aWVzLiAgTWFwU2VydmVyCiAgICAgKiBXTVMgc2VydmVycyBzdXBwb3J0IG9ubHkgIk1JTUUiIChhbmQgc2hvdWxkIHN1cHBvcnQgIkdNTC4xIiBzb29uKS4KICAgICAqIFJldHVybnMgIiIgYW5kIG91dHB1dHMgYSB3YXJuaW5nIGlmIGxheWVyIGlzIG5vdCBhIFdNUyBsYXllcgogICAgICogb3IgaWYgaXQgaXMgbm90IHF1ZXJpYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRjbGlja1gKICAgICAqIEBwYXJhbSBpbnQgJGNsaWNrWQogICAgICogQHBhcmFtIGludCAkZmVhdHVyZUNvdW50CiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmZvRm9ybWF0CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0V01TRmVhdHVyZUluZm9VUkwoJGNsaWNrWCwgJGNsaWNrWSwgJGZlYXR1cmVDb3VudCwgJGluZm9Gb3JtYXQpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIE1TX1RSVUUvTVNfRkFMU0UgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGxheWVyIGlzCiAgICAgKiBjdXJyZW50bHkgdmlzaWJsZSBpbiB0aGUgbWFwIChpLmUuIHR1cm5lZCBvbiwgaW4gc2NhbGUsIGV0Yy4pLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gaXNWaXNpYmxlKCkge30KCiAgICAvKioKICAgICAqIFRoZSBjbGFzcyBzcGVjaWZpZWQgYnkgdGhlIGNsYXNzIGluZGV4IHdpbGwgYmUgbW92ZWQgZG93biBpbnRvCiAgICAgKiB0aGUgYXJyYXkgb2YgbGF5ZXJzLiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IgTVNfRkFJTFVSRS4KICAgICAqIGV4IGxheWVyLT5tb3ZlY2xhc3Nkb3duKDApIHdpbGwgaGF2ZSB0aGUgZWZmZWN0IG9mIG1vdmluZyBjbGFzcyAwCiAgICAgKiB1cCB0byBwb3NpdGlvbiAxLCBhbmQgdGhlIGNsYXNzIGF0IHBvc2l0aW9uIDEgd2lsbCBiZSBtb3ZlZAogICAgICogdG8gcG9zaXRpb24gMC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIG1vdmVjbGFzc2Rvd24oJGluZGV4KSB7fQoKICAgIC8qKgogICAgICogVGhlIGNsYXNzIHNwZWNpZmllZCBieSB0aGUgY2xhc3MgaW5kZXggd2lsbCBiZSBtb3ZlZCB1cCBpbnRvCiAgICAgKiB0aGUgYXJyYXkgb2YgbGF5ZXJzLiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IgTVNfRkFJTFVSRS4KICAgICAqIGV4IGxheWVyLT5tb3ZlY2xhc3N1cCgxKSB3aWxsIGhhdmUgdGhlIGVmZmVjdCBvZiBtb3ZpbmcgY2xhc3MgMQogICAgICogdXAgdG8gcG9zaXRpb24gMCwgYW5kIHRoZSBjbGFzcyBhdCBwb3NpdGlvbiAwIHdpbGwgYmUgbW92ZWQKICAgICAqIHRvIHBvc2l0aW9uIDEuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaW5kZXgKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBtb3ZlY2xhc3N1cCgkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBPcGVuIHRoZSBsYXllciBmb3IgdXNlIHdpdGggZ2V0U2hhcGUoKS4KICAgICAqIFJldHVybnMgTVNfU1VDQ0VTUy9NU19GQUlMVVJFLgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBvcGVuKCkge30KCiAgICAvKioKICAgICAqIENhbGxlZCBhZnRlciBtc1doaWNoU2hhcGVzIGhhcyBiZWVuIGNhbGxlZCB0byBhY3R1YWxseSByZXRyaWV2ZQogICAgICogc2hhcGVzIHdpdGhpbiBhIGdpdmVuIGFyZWEuIFJldHVybnMgYSBzaGFwZSBvYmplY3Qgb3IgTlVMTCBvbgogICAgICogZXJyb3IuCiAgICAgKiAuLiBjb2RlLWJsb2NrOjogcGhwCiAgICAgKiAkbWFwID0gbXNfbmV3bWFwb2JqKCJkOi9tc2FwcHMvZ21hcC1tczQwL2h0ZG9jcy9nbWFwNzUubWFwIik7CiAgICAgKiAkbGF5ZXIgPSAkbWFwLT5nZXRMYXllckJ5TmFtZSgncm9hZCcpOwogICAgICogJHN0YXR1cyA9ICRsYXllci0+b3BlbigpOwogICAgICogJHN0YXR1cyA9ICRsYXllci0+d2hpY2hTaGFwZXMoJG1hcC0+ZXh0ZW50KTsKICAgICAqIHdoaWxlICgkc2hhcGUgPSAkbGF5ZXItPm5leHRTaGFwZSgpKQogICAgICogewogICAgICogZWNobyAkc2hhcGUtPmluZGV4IC4iPGJyPlxuIjsKICAgICAqIH0KICAgICAqICRsYXllci0+Y2xvc2UoKTsKICAgICAqCiAgICAgKiBAcmV0dXJuIHNoYXBlT2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBuZXh0U2hhcGUoKSB7fQoKICAgIC8qKgogICAgICogUXVlcnkgbGF5ZXIgZm9yIHNoYXBlcyB0aGF0IGludGVyc2VjdCBjdXJyZW50IG1hcCBleHRlbnRzLiAgcWl0ZW0KICAgICAqIGlzIHRoZSBpdGVtIChhdHRyaWJ1dGUpIG9uIHdoaWNoIHRoZSBxdWVyeSBpcyBwZXJmb3JtZWQsIGFuZAogICAgICogcXN0cmluZyBpcyB0aGUgZXhwcmVzc2lvbiB0byBtYXRjaC4gIFRoZSBxdWVyeSBpcyBwZXJmb3JtZWQgb24gYWxsCiAgICAgKiB0aGUgc2hhcGVzIHRoYXQgYXJlIHBhcnQgb2YgYSA6cmVmOmBDTEFTU2AgdGhhdCBjb250YWlucyBhCiAgICAgKiA6cmVmOmBURU1QTEFURSA8dGVtcGxhdGU+YCB2YWx1ZSBvciB0aGF0IG1hdGNoIGFueSBjbGFzcyBpbiBhCiAgICAgKiBsYXllciB0aGF0IGNvbnRhaW5zIGEgOnJlZjpgTEFZRVJgIDpyZWY6YFRFTVBMQVRFIDx0ZW1wbGF0ZT5gCiAgICAgKiB2YWx1ZS4gIE5vdGUgdGhhdCB0aGUgbGF5ZXIncyBGSUxURVIvRklMVEVSSVRFTSBhcmUgaWdub3JlZCBieQogICAgICogdGhpcyBmdW5jdGlvbi4gIE1vZGUgaXMgTVNfU0lOR0xFIG9yIE1TX01VTFRJUExFIGRlcGVuZGluZyBvbgogICAgICogbnVtYmVyIG9mIHJlc3VsdHMgeW91IHdhbnQuICBSZXR1cm5zIE1TX1NVQ0NFU1MgaWYgc2hhcGVzIHdlcmUKICAgICAqIGZvdW5kIG9yIE1TX0ZBSUxVUkUgaWYgbm90aGluZyB3YXMgZm91bmQgb3IgaWYgc29tZSBvdGhlciBlcnJvcgogICAgICogaGFwcGVuZWQgKG5vdGUgdGhhdCB0aGUgZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG5vdGhpbmcgd2FzIGZvdW5kCiAgICAgKiBjYW4gYmUgYXZvaWRlZCBpbiBQSFAgdXNpbmcgdGhlICdAJyBjb250cm9sIG9wZXJhdG9yKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxaXRlbQogICAgICogQHBhcmFtIHN0cmluZyAkcXN0cmluZwogICAgICogQHBhcmFtIGludCAkbW9kZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHF1ZXJ5QnlBdHRyaWJ1dGVzKCRxaXRlbSwgJHFzdHJpbmcsICRtb2RlKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybSBhIHF1ZXJ5IHNldCBiYXNlZCBvbiBhIHByZXZpb3VzIHNldCBvZiByZXN1bHRzIGZyb20KICAgICAqIGFub3RoZXIgbGF5ZXIuIEF0IHByZXNlbnQgdGhlIHJlc3VsdHMgTVVTVCBiZSBiYXNlZCBvbiBhIHBvbHlnb24KICAgICAqIGxheWVyLgogICAgICogUmV0dXJucyBNU19TVUNDRVNTIGlmIHNoYXBlcyB3ZXJlIGZvdW5kIG9yIE1TX0ZBSUxVUkUgaWYgbm90aGluZwogICAgICogd2FzIGZvdW5kIG9yIGlmIHNvbWUgb3RoZXIgZXJyb3IgaGFwcGVuZWQgKG5vdGUgdGhhdCB0aGUgZXJyb3IKICAgICAqIG1lc3NhZ2UgaW4gY2FzZSBub3RoaW5nIHdhcyBmb3VuZCBjYW4gYmUgYXZvaWRlZCBpbiBQSFAgdXNpbmcKICAgICAqIHRoZSAnQCcgY29udHJvbCBvcGVyYXRvcikuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2xheWVyCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gcXVlcnlCeUZlYXR1cmVzKCRzbGF5ZXIpIHt9CgogICAgLyoqCiAgICAgKiBRdWVyeSBsYXllciBhdCBwb2ludCBsb2NhdGlvbiBzcGVjaWZpZWQgaW4gZ2VvcmVmZXJlbmNlZCBtYXAKICAgICAqIGNvb3JkaW5hdGVzIChpLmUuIG5vdCBwaXhlbHMpLgogICAgICogVGhlIHF1ZXJ5IGlzIHBlcmZvcm1lZCBvbiBhbGwgdGhlIHNoYXBlcyB0aGF0IGFyZSBwYXJ0IG9mIGEgQ0xBU1MKICAgICAqIHRoYXQgY29udGFpbnMgYSBURU1QTEFURSB2YWx1ZSBvciB0aGF0IG1hdGNoIGFueSBjbGFzcyBpbiBhCiAgICAgKiBsYXllciB0aGF0IGNvbnRhaW5zIGEgTEFZRVIgVEVNUExBVEUgdmFsdWUuCiAgICAgKiBNb2RlIGlzIE1TX1NJTkdMRSBvciBNU19NVUxUSVBMRSBkZXBlbmRpbmcgb24gbnVtYmVyIG9mIHJlc3VsdHMKICAgICAqIHlvdSB3YW50LgogICAgICogUGFzc2luZyBidWZmZXIgLTEgZGVmYXVsdHMgdG8gdG9sZXJhbmNlcyBzZXQgaW4gdGhlIG1hcCBmaWxlCiAgICAgKiAoaW4gcGl4ZWxzKSBidXQgeW91IGNhbiB1c2UgYSBjb25zdGFudCBidWZmZXIgKHNwZWNpZmllZCBpbgogICAgICogZ3JvdW5kIHVuaXRzKSBpbnN0ZWFkLgogICAgICogUmV0dXJucyBNU19TVUNDRVNTIGlmIHNoYXBlcyB3ZXJlIGZvdW5kIG9yIE1TX0ZBSUxVUkUgaWYgbm90aGluZwogICAgICogd2FzIGZvdW5kIG9yIGlmIHNvbWUgb3RoZXIgZXJyb3IgaGFwcGVuZWQgKG5vdGUgdGhhdCB0aGUgZXJyb3IKICAgICAqIG1lc3NhZ2UgaW4gY2FzZSBub3RoaW5nIHdhcyBmb3VuZCBjYW4gYmUgYXZvaWRlZCBpbiBQSFAgdXNpbmcKICAgICAqIHRoZSAnQCcgY29udHJvbCBvcGVyYXRvcikuCiAgICAgKgogICAgICogQHBhcmFtIHBvaW50T2JqICRwb2ludAogICAgICogQHBhcmFtIGludCAkbW9kZQogICAgICogQHBhcmFtIGZsb2F0ICRidWZmZXIKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBxdWVyeUJ5UG9pbnQocG9pbnRPYmogJHBvaW50LCAkbW9kZSwgJGJ1ZmZlcikge30KCiAgICAvKioKICAgICAqIFF1ZXJ5IGxheWVyIHVzaW5nIGEgcmVjdGFuZ2xlIHNwZWNpZmllZCBpbiBnZW9yZWZlcmVuY2VkIG1hcAogICAgICogY29vcmRpbmF0ZXMgKGkuZS4gbm90IHBpeGVscykuCiAgICAgKiBUaGUgcXVlcnkgaXMgcGVyZm9ybWVkIG9uIGFsbCB0aGUgc2hhcGVzIHRoYXQgYXJlIHBhcnQgb2YgYSBDTEFTUwogICAgICogdGhhdCBjb250YWlucyBhIFRFTVBMQVRFIHZhbHVlIG9yIHRoYXQgbWF0Y2ggYW55IGNsYXNzIGluIGEKICAgICAqIGxheWVyIHRoYXQgY29udGFpbnMgYSBMQVlFUiBURU1QTEFURSB2YWx1ZS4KICAgICAqIFJldHVybnMgTVNfU1VDQ0VTUyBpZiBzaGFwZXMgd2VyZSBmb3VuZCBvciBNU19GQUlMVVJFIGlmIG5vdGhpbmcKICAgICAqIHdhcyBmb3VuZCBvciBpZiBzb21lIG90aGVyIGVycm9yIGhhcHBlbmVkIChub3RlIHRoYXQgdGhlIGVycm9yCiAgICAgKiBtZXNzYWdlIGluIGNhc2Ugbm90aGluZyB3YXMgZm91bmQgY2FuIGJlIGF2b2lkZWQgaW4gUEhQIHVzaW5nCiAgICAgKiB0aGUgJ0AnIGNvbnRyb2wgb3BlcmF0b3IpLgogICAgICoKICAgICAqIEBwYXJhbSByZWN0T2JqICRyZWN0CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gcXVlcnlCeVJlY3QocmVjdE9iaiAkcmVjdCkge30KCiAgICAvKioKICAgICAqIFF1ZXJ5IGxheWVyIGJhc2VkIG9uIGEgc2luZ2xlIHNoYXBlLCB0aGUgc2hhcGUgaGFzIHRvIGJlIGEgcG9seWdvbgogICAgICogYXQgdGhpcyBwb2ludC4KICAgICAqIFJldHVybnMgTVNfU1VDQ0VTUyBpZiBzaGFwZXMgd2VyZSBmb3VuZCBvciBNU19GQUlMVVJFIGlmIG5vdGhpbmcKICAgICAqIHdhcyBmb3VuZCBvciBpZiBzb21lIG90aGVyIGVycm9yIGhhcHBlbmVkIChub3RlIHRoYXQgdGhlIGVycm9yCiAgICAgKiBtZXNzYWdlIGluIGNhc2Ugbm90aGluZyB3YXMgZm91bmQgY2FuIGJlIGF2b2lkZWQgaW4gUEhQIHVzaW5nCiAgICAgKiB0aGUgJ0AnIGNvbnRyb2wgb3BlcmF0b3IpLgogICAgICoKICAgICAqIEBwYXJhbSBzaGFwZU9iaiAkc2hhcGUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBxdWVyeUJ5U2hhcGUoc2hhcGVPYmogJHNoYXBlKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyB0aGUgY2xhc3MgaW5kaWNhdGVkIGFuZCByZXR1cm5zIGEgY29weSwgb3IgTlVMTCBpbiB0aGUgY2FzZQogICAgICogb2YgYSBmYWlsdXJlLiAgTm90ZSB0aGF0IHN1YnNlcXVlbnQgY2xhc3NlcyB3aWxsIGJlIHJlbnVtYmVyZWQgYnkKICAgICAqIHRoaXMgb3BlcmF0aW9uLiBUaGUgbnVtY2xhc3NlcyBmaWVsZCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGNsYXNzZXMKICAgICAqIGF2YWlsYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleAogICAgICogQHJldHVybiBjbGFzc09ianxudWxsCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVDbGFzcygkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgYSBtZXRhZGF0YSBlbnRyeSBmb3IgdGhlIGxheWVyLiAgUmV0dXJucyBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHJlbW92ZU1ldGFEYXRhKCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogU2V0IG9iamVjdCBwcm9wZXJ0eSB0byBhIG5ldyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eV9uYW1lCiAgICAgKiBAcGFyYW0gICRuZXdfdmFsdWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXQoJHByb3BlcnR5X25hbWUsICRuZXdfdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBDaGFuZ2VzIHRoZSBjb25uZWN0aW9udHlwZSBvZiB0aGUgbGF5ZXIgYW5kIHJlY3JlYXRlcyB0aGUgdnRhYmxlCiAgICAgKiBhY2NvcmRpbmcgdG8gdGhlIG5ldyBjb25uZWN0aW9uIHR5cGUuIFRoaXMgbWV0aG9kIHNob3VsZCBiZSB1c2VkCiAgICAgKiBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIGNvbm5lY3Rpb250eXBlIHBhcmFtZXRlciBkaXJlY3RseS4KICAgICAqIEluIHRoZSBjYXNlIHdoZW4gdGhlIGxheWVyLmNvbm5lY3Rpb250eXBlID0gTVNfUExVR0lOIHRoZSBwbHVnaW5fbGlicmFyeQogICAgICogcGFyYW1ldGVyIHNob3VsZCBhbHNvIGJlIHNwZWNpZmllZCBzbyBhcyB0byBzZWxlY3QgdGhlIGxpYnJhcnkgdG8KICAgICAqIGxvYWQgYnkgTWFwU2VydmVyLiBGb3IgdGhlIG90aGVyIGNvbm5lY3Rpb24gdHlwZXMgdGhpcyBwYXJhbWV0ZXIKICAgICAqIGlzIG5vdCB1c2VkLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGNvbm5lY3Rpb250eXBlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwbHVnaW5fbGlicmFyeQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldENvbm5lY3Rpb25UeXBlKCRjb25uZWN0aW9udHlwZSwgJHBsdWdpbl9saWJyYXJ5KSB7fQoKICAgIC8qKgogICAgICogU2V0IGxheWVyIGZpbHRlciA6cmVmOmBleHByZXNzaW9uIDxleHByZXNzaW9ucz5gLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGV4cHJlc3Npb24KICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRGaWx0ZXIoJGV4cHJlc3Npb24pIHt9CgogICAgLyoqCiAgICAgKiBTZXQgYSBtZXRhZGF0YSBlbnRyeSBmb3IgdGhlIGxheWVyLiAgUmV0dXJucyBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKiBpbnQgc2V0UHJvY2Vzc2luZyhzdHJpbmcpCiAgICAgKiBBZGQgdGhlIHN0cmluZyB0byB0aGUgcHJvY2Vzc2luZyBzdHJpbmcgbGlzdCBmb3IgdGhlIGxheWVyLgogICAgICogVGhlIGxheWVyLT5udW1fcHJvY2Vzc2luZyBpcyBpbmNyZW1lbnRlZCBieSAxLgogICAgICogUmV0dXJucyBNU19TVUNDRVNTIG9yIE1TX0ZBSUxVUkUgb24gZXJyb3IuCiAgICAgKiAuLiBjb2RlLWJsb2NrOjogcGhwCiAgICAgKiAkb0xheWVyLT5zZXRwcm9jZXNzaW5nKCJTQ0FMRV8xPUFVVE8iKTsKICAgICAqICRvTGF5ZXItPnNldHByb2Nlc3NpbmcoIlNDQUxFXzI9QVVUTyIpOwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0TWV0YURhdGEoJG5hbWUsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIFNldCBsYXllciA6cmVmOmBwcm9qZWN0aW9uIDxwcm9qZWN0aW9uPmAgYW5kIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgICogUGFyYW1ldGVycyBhcmUgZ2l2ZW4gYXMgYSBzaW5nbGUgc3RyaW5nIG9mIGNvbW1hLWRlbGltaXRlZCBQUk9KLjQKICAgICAqIHBhcmFtZXRlcnMuIFJldHVybnMgTVNfU1VDQ0VTUyBvciBNU19GQUlMVVJFIG9uIGVycm9yLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByb2pfcGFyYW1zCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0UHJvamVjdGlvbigkcHJval9wYXJhbXMpIHt9CgogICAgLyoqCiAgICAgKiBTYW1lIGFzIHNldFByb2plY3Rpb24oKSwgYnV0IHRha2VzIGFuIE9HQyBXS1QgcHJvamVjdGlvbgogICAgICogZGVmaW5pdGlvbiBzdHJpbmcgYXMgaW5wdXQuCiAgICAgKiAuLiBub3RlOjoKICAgICAqIHNldFdLVFByb2plY3Rpb24gcmVxdWlyZXMgR0RBTCBzdXBwb3J0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJval9wYXJhbXMKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRXS1RQcm9qZWN0aW9uKCRwcm9qX3BhcmFtcykge30KCiAgICAvKioKICAgICAqIFVwZGF0ZSBhIGxheWVyIGZyb20gYSBzdHJpbmcgc25pcHBldC4gUmV0dXJucyBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKiAuLiBjb2RlLWJsb2NrOjogcGhwCiAgICAgKiBtb2RpZnkgdGhlIG5hbWUKICAgICAqICRvTGF5ZXItPnVwZGF0ZUZyb21TdHJpbmcoJ0xBWUVSIE5BTUUgbGFuZF9mbjIgRU5EJyk7CiAgICAgKiBhZGQgYSBuZXcgY2xhc3MKICAgICAqICRvTGF5ZXItPnVwZGF0ZUZyb21TdHJpbmcoJ0xBWUVSIENMQVNTIFNUWUxFIENPTE9SIDI1NSAyNTUgMCBFTkQgRU5EIEVORCcpOwogICAgICogaW50IHdoaWNoc2hhcGVzKHJlY3RvYmopCiAgICAgKiBQZXJmb3JtcyBhIHNwYXRpYWwsIGFuZCBvcHRpb25hbGx5IGFuIGF0dHJpYnV0ZSBiYXNlZCBmZWF0dXJlCiAgICAgKiBzZWFyY2guICBUaGUgZnVuY3Rpb24gYmFzaWNhbGx5IHByZXBhcmVzIHRoaW5ncyBzbyB0aGF0IGNhbmRpZGF0ZQogICAgICogZmVhdHVyZXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IHF1ZXJ5IG9yIGRyYXdpbmcgZnVuY3Rpb25zIChlZyB1c2luZwogICAgICogbmV4dHNoYXBlIGZ1bmN0aW9uKS4gIFJldHVybnMgTVNfU1VDQ0VTUywgTVNfRkFJTFVSRSBvciBNU19ET05FLgogICAgICogTVNfRE9ORSBpcyByZXR1cm5lZCBpZiB0aGUgbGF5ZXIgZXh0ZW50IGRvZXMgbm90IG92ZXJsYXAgdGhlCiAgICAgKiByZWN0T2JqLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNuaXBwZXQKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiB1cGRhdGVGcm9tU3RyaW5nKCRzbmlwcGV0KSB7fQp9CgovKioKICogSW5zdGFuY2VzIG9mIGxlZ2VuZE9iaiBhcmUgYWx3YXlzIGFyZSBhbHdheXMgZW1iZWRkZWQgaW5zaWRlIHRoZSBgbWFwT2JqYF8uCiAqLwpmaW5hbCBjbGFzcyBsZWdlbmRPYmoKewogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGhlaWdodDsKCiAgICAvKioKICAgICAqIEB2YXIgY29sb3JPYmoKICAgICAqLwogICAgcHVibGljICRpbWFnZWNvbG9yOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRrZXlzaXpleDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAka2V5c2l6ZXk7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGtleXNwYWNpbmd4OwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRrZXlzcGFjaW5neTsKCiAgICAvKioKICAgICAqIEB2YXIgbGFiZWxPYmoKICAgICAqLwogICAgcHVibGljICRsYWJlbDsKCiAgICAvKioKICAgICAqIENvbG9yIG9mIG91dGxpbmUgb2YgYm94LCAtMSBmb3Igbm8gb3V0bGluZQogICAgICoKICAgICAqIEB2YXIgY29sb3JPYmoKICAgICAqLwogICAgcHVibGljICRvdXRsaW5lY29sb3I7CgogICAgLyoqCiAgICAgKiBmb3IgZW1iZWRkZWQgbGVnZW5kcywgTVNfVUwsIE1TX1VDLCAuLi4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHBvc2l0aW9uOwoKICAgIC8qKgogICAgICogTVNfVFJVRSwgTVNfRkFMU0UKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHBvc3RsYWJlbGNhY2hlOwoKICAgIC8qKgogICAgICogTVNfT04sIE1TX09GRiwgTVNfRU1CRUQKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHN0YXR1czsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkdGVtcGxhdGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHdpZHRoOwoKICAgIC8qKgogICAgICogU2F2ZXMgdGhlIG9iamVjdCB0byBhIHN0cmluZy4gIFByb3ZpZGVzIHRoZSBpbnZlcnNlIG9wdGlvbiBmb3IKICAgICAqIHVwZGF0ZUZyb21TdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZygpIHt9CgogICAgLyoqCiAgICAgKiBGcmVlIHRoZSBvYmplY3QgcHJvcGVydGllcyBhbmQgYnJlYWsgdGhlIGludGVybmFsIHJlZmVyZW5jZXMuCiAgICAgKiBOb3RlIHRoYXQgeW91IGhhdmUgdG8gdW5zZXQgdGhlIHBocCB2YXJpYWJsZSB0byBmcmVlIHRvdGFsbHkgdGhlCiAgICAgKiByZXNvdXJjZXMuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBmcmVlKCkge30KCiAgICAvKioKICAgICAqIFNldCBvYmplY3QgcHJvcGVydHkgdG8gYSBuZXcgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJvcGVydHlfbmFtZQogICAgICogQHBhcmFtICAkbmV3X3ZhbHVlCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0KCRwcm9wZXJ0eV9uYW1lLCAkbmV3X3ZhbHVlKSB7fQoKICAgIC8qKgogICAgICogVXBkYXRlIGEgbGVnZW5kIGZyb20gYSBzdHJpbmcgc25pcHBldC4gUmV0dXJucyBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc25pcHBldAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZUZyb21TdHJpbmcoJHNuaXBwZXQpIHt9Cn0KCmZpbmFsIGNsYXNzIGxpbmVPYmoKewogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG51bXBvaW50czsKCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogT2xkIHN0eWxlIGNvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHJldHVybiBsaW5lT2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBtc19uZXdMaW5lT2JqKCkge30KCiAgICAvKioKICAgICAqIEFkZCBhIHBvaW50IHRvIHRoZSBlbmQgb2YgbGluZS4gUmV0dXJucyBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIHBvaW50T2JqICRwb2ludAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGFkZChwb2ludE9iaiAkcG9pbnQpIHt9CgogICAgLyoqCiAgICAgKiBBZGQgYSBwb2ludCB0byB0aGUgZW5kIG9mIGxpbmUuIFJldHVybnMgTVNfU1VDQ0VTUy9NU19GQUlMVVJFLgogICAgICogLi4gbm90ZTo6CiAgICAgKiB0aGUgM3JkIHBhcmFtZXRlciBtIGlzIHVzZWQgZm9yIG1lYXN1cmVkIHNoYXBlIGZpbGVzIG9ubHkuCiAgICAgKiBJdCBpcyBub3QgbWFuZGF0b3J5LgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkeAogICAgICogQHBhcmFtIGZsb2F0ICR5CiAgICAgKiBAcGFyYW0gZmxvYXQgJG0KICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBhZGRYWSgkeCwgJHksICRtKSB7fQoKICAgIC8qKgogICAgICogQWRkIGEgcG9pbnQgdG8gdGhlIGVuZCBvZiBsaW5lLiBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqIC4uIG5vdGU6OgogICAgICogdGhlIDR0aCBwYXJhbWV0ZXIgbSBpcyB1c2VkIGZvciBtZWFzdXJlZCBzaGFwZSBmaWxlcyBvbmx5LgogICAgICogSXQgaXMgbm90IG1hbmRhdG9yeS4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgKICAgICAqIEBwYXJhbSBmbG9hdCAkeQogICAgICogQHBhcmFtIGZsb2F0ICR6CiAgICAgKiBAcGFyYW0gZmxvYXQgJG0KICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBhZGRYWVooJHgsICR5LCAkeiwgJG0pIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHBvaW50IG51bWJlciBpLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGkKICAgICAqIEByZXR1cm4gcG9pbnRPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHBvaW50KCRpKSB7fQoKICAgIC8qKgogICAgICogUHJvamVjdCB0aGUgbGluZSBmcm9tICJpbiIgcHJvamVjdGlvbiAoMXN0IGFyZ3VtZW50KSB0byAib3V0IgogICAgICogcHJvamVjdGlvbiAoMm5kIGFyZ3VtZW50KS4gIFJldHVybnMgTVNfU1VDQ0VTUy9NU19GQUlMVVJFLgogICAgICoKICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uT2JqICRpbgogICAgICogQHBhcmFtIHByb2plY3Rpb25PYmogJG91dAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHByb2plY3QocHJvamVjdGlvbk9iaiAkaW4sIHByb2plY3Rpb25PYmogJG91dCkge30KfQoKZmluYWwgY2xhc3MgbWFwT2JqCnsKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJGNlbGxzaXplOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRkZWJ1ZzsKCiAgICAvKioKICAgICAqIHBpeGVscyBwZXIgaW5jaCwgZGVmYXVsdHMgdG8gNzIKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkZGVmcmVzb2x1dGlvbjsKCiAgICAvKioKICAgICAqIDsKICAgICAqCiAgICAgKiBAdmFyIHJlY3RPYmoKICAgICAqLwogICAgcHVibGljICRleHRlbnQ7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHksIHNldCBieSBzZXRGb250U2V0KCkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGZvbnRzZXRmaWxlbmFtZTsKCiAgICAvKioKICAgICAqIHNlZSBzZXRTaXplKCkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGhlaWdodDsKCiAgICAvKioKICAgICAqIEB2YXIgY29sb3JPYmoKICAgICAqLwogICAgcHVibGljICRpbWFnZWNvbG9yOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRrZXlzaXpleDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAka2V5c2l6ZXk7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGtleXNwYWNpbmd4OwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRrZXlzcGFjaW5neTsKCiAgICAvKioKICAgICAqIG5vIG1lbWJlcnMuIFVzZWQgb25seSB0byBmcmVlIHRoZQogICAgICogbGFiZWwgY2FjaGUgKG1hcC0+bGFiZWxjYWNoZS0+ZnJlZSgpCiAgICAgKgogICAgICogQHZhciBsYWJlbGNhY2hlT2JqCiAgICAgKi8KICAgIHB1YmxpYyAkbGFiZWxjYWNoZTsKCiAgICAvKioKICAgICAqIEB2YXIgbGVnZW5kT2JqCiAgICAgKi8KICAgIHB1YmxpYyAkbGVnZW5kOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRtYXBwYXRoOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRtYXhzaXplOwoKICAgIC8qKgogICAgICogQHZhciBoYXNoVGFibGVPYmoKICAgICAqLwogICAgcHVibGljICRtZXRhZGF0YTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkbmFtZTsKCiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkbnVtbGF5ZXJzOwoKICAgIC8qKgogICAgICogQHZhciBvdXRwdXRmb3JtYXRPYmoKICAgICAqLwogICAgcHVibGljICRvdXRwdXRmb3JtYXQ7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG51bW91dHB1dGZvcm1hdHM7CgogICAgLyoqCiAgICAgKiBAdmFyIHByb2plY3Rpb25PYmoKICAgICAqLwogICAgcHVibGljICRwcm9qZWN0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBxdWVyeW1hcE9iagogICAgICovCiAgICBwdWJsaWMgJHF1ZXJ5bWFwOwoKICAgIC8qKgogICAgICogQHZhciByZWZlcmVuY2VNYXBPYmoKICAgICAqLwogICAgcHVibGljICRyZWZlcmVuY2U7CgogICAgLyoqCiAgICAgKiBwaXhlbHMgcGVyIGluY2gsIGRlZmF1bHRzIHRvIDcyCiAgICAgKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJHJlc29sdXRpb247CgogICAgLyoqCiAgICAgKiBAdmFyIHNjYWxlYmFyT2JqCiAgICAgKi8KICAgIHB1YmxpYyAkc2NhbGViYXI7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHksIHNldCBieSBkcmF3TWFwKCkKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkc2NhbGVkZW5vbTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkc2hhcGVwYXRoOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRzdGF0dXM7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHksIHNldCBieSBzZXRTeW1ib2xTZXQoKQogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkc3ltYm9sc2V0ZmlsZW5hbWU7CgogICAgLyoqCiAgICAgKiBtYXAgdW5pdHMgdHlwZQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkdW5pdHM7CgogICAgLyoqCiAgICAgKiBAdmFyIHdlYk9iagogICAgICovCiAgICBwdWJsaWMgJHdlYjsKCiAgICAvKioKICAgICAqIHNlZSBzZXRTaXplKCkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHdpZHRoOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhIG5ldyBvYmplY3QgdG8gZGVhbCB3aXRoIGEgTWFwU2VydmVyIG1hcCBmaWxlLgogICAgICogQ29uc3RydWN0IGEgbmV3IG1hcE9iaiBmcm9tIGEgbWFwZmlsZSBzdHJpbmcuIFJldHVybnMgYSBuZXcgb2JqZWN0IHRvIGRlYWwKICAgICAqIHdpdGggYSBNYXBTZXJ2ZXIgbWFwIGZpbGUuCiAgICAgKiAuLiBub3RlOjoKICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBTWU1CT0xTRVQsIEZPTlRTRVQsIGFuZCBvdGhlciBwYXRocyBpbiB0aGUgbWFwZmlsZQogICAgICogYXJlIHJlbGF0aXZlIHRvIHRoZSBtYXBmaWxlIGxvY2F0aW9uLiAgSWYgbmV3X21hcF9wYXRoIGlzIHByb3ZpZGVkCiAgICAgKiB0aGVuIHRoaXMgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZCBhcyB0aGUgYmFzZSBwYXRoIGZvciBhbGwgdGhlCiAgICAgKiByZXdsYXRpdmUgcGF0aHMgaW5zaWRlIHRoZSBtYXBmaWxlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1hcF9maWxlX25hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5ld19tYXBfcGF0aAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1hcF9maWxlX25hbWUsICRuZXdfbWFwX3BhdGgpIHt9CgogICAgLyoqCiAgICAgKiBPbGQgc3R5bGUgY29uc3RydWN0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXBfZmlsZV9zdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5ld19tYXBfcGF0aAogICAgICogQHJldHVybiBtYXBPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIG1zX25ld01hcE9iakZyb21TdHJpbmcoJG1hcF9maWxlX3N0cmluZywgJG5ld19tYXBfcGF0aCkge30KCiAgICAvKioKICAgICAqIEFwcGxpZXMgdGhlIGNvbmZpZyBvcHRpb25zIHNldCBpbiB0aGUgbWFwIGZpbGUuIEZvciBleGFtcGxlCiAgICAgKiBzZXR0aW5nIHRoZSBQUk9KX0xJQiB1c2luZyB0aGUgc2V0Y29uZmlnb3B0aW9uIG9ubHkgbW9kaWZpZXMKICAgICAqIHRoZSB2YWx1ZSBpbiB0aGUgbWFwIG9iamVjdC4gYXBwbHljb25maWdvcHRpb25zIHdpbGwgYWN0dWFsbHkKICAgICAqIGNoYW5nZSB0aGUgUFJPSl9MSUIgdmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiBkZWFsaW5nIHdpdGgKICAgICAqIHByb2plY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGFwcGx5Y29uZmlnb3B0aW9ucygpIHt9CgogICAgLyoqCiAgICAgKiBBcHBseSB0aGUgOnJlZjpgU0xEYCBkb2N1bWVudCB0byB0aGUgbWFwIGZpbGUuIFRoZSBtYXRjaGluZyBiZXR3ZWVuIHRoZQogICAgICogc2xkIGRvY3VtZW50IGFuZCB0aGUgbWFwIGZpbGUgd2lsbCBiZSBkb25lIHVzaW5nIHRoZSBsYXllcidzIG5hbWUuCiAgICAgKiBTZWUgOnJlZjpgU0xEIEhvd1RvIDxzbGQ+YCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgU0xEIHN1cHBvcnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2xkeG1sCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gYXBwbHlTTEQoJHNsZHhtbCkge30KCiAgICAvKioKICAgICAqIEFwcGx5IHRoZSBTTEQgZG9jdW1lbnQgcG9pbnRlZCBieSB0aGUgVVJMIHRvIHRoZSBtYXAgZmlsZS4gVGhlCiAgICAgKiBtYXRjaGluZyBiZXR3ZWVuIHRoZSBzbGQgZG9jdW1lbnQgYW5kIHRoZSBtYXAgZmlsZSB3aWxsIGJlIGRvbmUKICAgICAqIHVzaW5nIHRoZSBsYXllcidzIG5hbWUuCiAgICAgKiBTZWUgOnJlZjpgU0xEIEhvd1RvIDxzbGQ+YCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgU0xEIHN1cHBvcnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2xkdXJsCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gYXBwbHlTTERVUkwoJHNsZHVybCkge30KCiAgICAvKioKICAgICAqIFNhdmVzIHRoZSBvYmplY3QgdG8gYSBzdHJpbmcuCiAgICAgKiAuLiBub3RlOjoKICAgICAqIFRoZSBpbnZlcnNlIG1ldGhvZCB1cGRhdGVGcm9tU3RyaW5nIGRvZXMgbm90IGV4aXN0IGZvciB0aGUgbWFwT2JqCiAgICAgKiAuLiB2ZXJzaW9uYWRkZWQ6OiA2LjQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gY29udmVydFRvU3RyaW5nKCkge30KCiAgICAvKioKICAgICAqIFJlbmRlciBtYXAgYW5kIHJldHVybiBhbiBpbWFnZSBvYmplY3Qgb3IgTlVMTCBvbiBlcnJvci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGltYWdlT2JqfG51bGwKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGRyYXcoKSB7fQoKICAgIC8qKgogICAgICogUmVuZGVycyB0aGUgbGFiZWxzIGZvciBhIG1hcC4gUmV0dXJucyBNU19TVUNDRVNTIG9yIE1TX0ZBSUxVUkUgb24gZXJyb3IuCiAgICAgKgogICAgICogQHBhcmFtIGltYWdlT2JqICRpbWFnZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGRyYXdMYWJlbENhY2hlKGltYWdlT2JqICRpbWFnZSkge30KCiAgICAvKioKICAgICAqIFJlbmRlciBsZWdlbmQgYW5kIHJldHVybiBhbiBpbWFnZSBvYmplY3QuCiAgICAgKgogICAgICogQHJldHVybiBpbWFnZU9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZHJhd0xlZ2VuZCgpIHt9CgogICAgLyoqCiAgICAgKiBSZW5kZXIgYSBxdWVyeSBtYXAgYW5kIHJldHVybiBhbiBpbWFnZSBvYmplY3Qgb3IgTlVMTCBvbiBlcnJvci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGltYWdlT2JqfG51bGwKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGRyYXdRdWVyeSgpIHt9CgogICAgLyoqCiAgICAgKiBSZW5kZXIgcmVmZXJlbmNlIG1hcCBhbmQgcmV0dXJuIGFuIGltYWdlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGltYWdlT2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBkcmF3UmVmZXJlbmNlTWFwKCkge30KCiAgICAvKioKICAgICAqIFJlbmRlciBzY2FsZSBiYXIgYW5kIHJldHVybiBhbiBpbWFnZSBvYmplY3QuCiAgICAgKgogICAgICogQHJldHVybiBpbWFnZU9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZHJhd1NjYWxlQmFyKCkge30KCiAgICAvKioKICAgICAqIGVtYmVkcyBhIGxlZ2VuZC4gQWN0dWFsbHkgdGhlIGxlZ2VuZCBpcyBqdXN0IGFkZGVkIHRvIHRoZSBsYWJlbAogICAgICogY2FjaGUgc28geW91IG11c3QgaW52b2tlIGRyYXdMYWJlbENhY2hlKCkgdG8gYWN0dWFsbHkgZG8gdGhlCiAgICAgKiByZW5kZXJpbmcgKHVubGVzcyBwb3N0bGFiZWxjYWNoZSBpcyBzZXQgaW4gd2hpY2ggY2FzZSBpdCBpcwogICAgICogZHJhd24gcmlnaHQgYXdheSkuIFJldHVybnMgTVNfU1VDQ0VTUyBvciBNU19GQUlMVVJFIG9uIGVycm9yLgogICAgICoKICAgICAqIEBwYXJhbSBpbWFnZU9iaiAkaW1hZ2UKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBlbWJlZExlZ2VuZChpbWFnZU9iaiAkaW1hZ2UpIHt9CgogICAgLyoqCiAgICAgKiBlbWJlZHMgYSBzY2FsZWJhci4gQWN0dWFsbHkgdGhlIHNjYWxlYmFyIGlzIGp1c3QgYWRkZWQgdG8gdGhlIGxhYmVsCiAgICAgKiBjYWNoZSBzbyB5b3UgbXVzdCBpbnZva2UgZHJhd0xhYmVsQ2FjaGUoKSB0byBhY3R1YWxseSBkbyB0aGUgcmVuZGVyaW5nCiAgICAgKiAodW5sZXNzIHBvc3RsYWJlbGNhY2hlIGlzIHNldCBpbiB3aGljaCBjYXNlIGl0IGlzIGRyYXduIHJpZ2h0IGF3YXkpLgogICAgICogUmV0dXJucyBNU19TVUNDRVNTIG9yIE1TX0ZBSUxVUkUgb24gZXJyb3IuCiAgICAgKgogICAgICogQHBhcmFtIGltYWdlT2JqICRpbWFnZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGVtYmVkU2NhbGViYXIoaW1hZ2VPYmogJGltYWdlKSB7fQoKICAgIC8qKgogICAgICogRnJlZSB0aGUgb2JqZWN0IHByb3BlcnRpZXMgYW5kIGJyZWFrIHRoZSBpbnRlcm5hbCByZWZlcmVuY2VzLgogICAgICogTm90ZSB0aGF0IHlvdSBoYXZlIHRvIHVuc2V0IHRoZSBwaHAgdmFyaWFibGUgdG8gZnJlZSB0b3RhbGx5IHRoZQogICAgICogcmVzb3VyY2VzLgogICAgICogdm9pZCBmcmVlUXVlcnkobGF5ZXJpbmRleCkKICAgICAqIEZyZWVzIHRoZSBxdWVyeSByZXN1bHQgb24gYSBzcGVjaWZpZWQgbGF5ZXIuIElmIHRoZSBsYXllcmluZGV4IGlzIC0xLAogICAgICogYWxsIHF1ZXJpZXMgb24gbGF5ZXJzIHdpbGwgYmUgZnJlZWQuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBmcmVlKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gU0xEIFhNTCBzdHJpbmcgYmFzZWQgb24gYWxsIHRoZSBjbGFzc2VzIGZvdW5kIGluIGFsbAogICAgICogdGhlIGxheWVycyB0aGF0IGhhdmUgYFNUQVRVU2AgYG9uYC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGVTTEQoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBncm91cCBuYW1lcyB1c2VkIGluIHRoZQogICAgICogbGF5ZXJzLiBJZiB0aGVyZSBhcmUgbm8gZ3JvdXBzLCBpdCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldEFsbEdyb3VwTmFtZXMoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBsYXllciBuYW1lcy4KICAgICAqIElmIHRoZXJlIGFyZSBubyBsYXllcnMsIGl0IHJldHVybnMgYW4gZW1wdHkgYXJyYXkuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsTGF5ZXJOYW1lcygpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgY29sb3JPYmogY29ycmVzcG9uZGluZyB0byB0aGUgY29sb3IgaW5kZXggaW4gdGhlCiAgICAgKiBwYWxldHRlLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGlDbG9JbmRleAogICAgICogQHJldHVybiBjb2xvck9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29sb3JieUluZGV4KCRpQ2xvSW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjb25maWcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkuCiAgICAgKiBSZXR1cm5zIGFuIGVtcHR5IHN0aW5nIGlmIGtleSBub3QgZm91bmQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29uZmlnT3B0aW9uKCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbGFiZWxjYWNoZU1lbWJlck9iaiBmcm9tIHRoZSBtYXAgZ2l2ZW4gYW4gaW5kZXggdmFsdWUKICAgICAqICgwPWZpcnN0IGxhYmVsKS4gIExhYmVsY2FjaGUgaGFzIHRvIGJlIGVuYWJsZWQuCiAgICAgKiAuLiBjb2RlLWJsb2NrOjogcGhwCiAgICAgKiB3aGlsZSAoJG9MYWJlbENhY2hlTWVtYmVyID0gJG9NYXAtPmdldExhYmVsKCRpKSkgewogICAgICogIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBsYWJlbGNhY2hlbWVtYmVyCiAgICAgKiArKyRpOwogICAgICogfQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4CiAgICAgKiBAcmV0dXJuIGxhYmVsY2FjaGVNZW1iZXJPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldExhYmVsKCRpbmRleCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBsYXllck9iaiBmcm9tIHRoZSBtYXAgZ2l2ZW4gYW4gaW5kZXggdmFsdWUgKDA9Zmlyc3QgbGF5ZXIpCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaW5kZXgKICAgICAqIEByZXR1cm4gbGF5ZXJPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldExheWVyKCRpbmRleCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBsYXllck9iaiBmcm9tIHRoZSBtYXAgZ2l2ZW4gYSBsYXllciBuYW1lLgogICAgICogUmV0dXJucyBOVUxMIGlmIGxheWVyIGRvZXNuJ3QgZXhpc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbGF5ZXJfbmFtZQogICAgICogQHJldHVybiBsYXllck9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0TGF5ZXJCeU5hbWUoJGxheWVyX25hbWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBsYXllcidzIGluZGV4IGluIHRoZSBvcmRlciB3aGljaCB0aGV5CiAgICAgKiBhcmUgZHJhd24uIElmIHRoZXJlIGFyZSBubyBsYXllcnMsIGl0IHJldHVybnMgYW4gZW1wdHkgYXJyYXkuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0TGF5ZXJzRHJhd2luZ09yZGVyKCkge30KCiAgICAvKioKICAgICAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgbGF5ZXIncyBpbmRleGVzIGdpdmVuCiAgICAgKiBhIGdyb3VwIG5hbWUuIElmIHRoZXJlIGFyZSBubyBsYXllcnMsIGl0IHJldHVybnMgYW4gZW1wdHkgYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZ3JvdXBuYW1lCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXllcnNJbmRleEJ5R3JvdXAoJGdyb3VwbmFtZSkge30KCiAgICAvKioKICAgICAqIEZldGNoIG1ldGFkYXRhIGVudHJ5IGJ5IG5hbWUgKHN0b3JlZCBpbiB0aGUgOnJlZjpgV0VCYCBvYmplY3QgaW4KICAgICAqIHRoZSBtYXAgZmlsZSkuICBSZXR1cm5zICIiIGlmIG5vIGVudHJ5IG1hdGNoZXMgdGhlIG5hbWUuCiAgICAgKiAuLiBub3RlOjoKICAgICAqIGdldE1ldGFEYXRhJ3MgcXVlcnkgaXMgY2FzZSBzZW5zaXRpdmUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldE1ldGFEYXRhKCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBpbiBtYXAuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldE51bVN5bWJvbHMoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJvamVjdGlvbi4KICAgICAqIFJldHVybnMgTlVMTCBvbiBlcnJvciBvciBpZiBubyBwcm9qZWN0aW9uIGlzIHNldC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvamVjdGlvbigpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzeW1ib2wgaW5kZXggdXNpbmcgdGhlIG5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3ltYm9sX25hbWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRTeW1ib2xCeU5hbWUoJHN5bWJvbF9uYW1lKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3ltYm9sIG9iamVjdCB1c2luZyBhIHN5bWJvbCBpZC4gUmVmZXIgdG8KICAgICAqIHRoZSBzeW1ib2wgb2JqZWN0IHJlZmVyZW5jZSBzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMuCiAgICAgKiBpbnQgaW5zZXJ0TGF5ZXIoIGxheWVyT2JqIGxheWVyIFssIGludCBuSW5kZXg9LTEgXSApCiAgICAgKiBJbnNlcnQgYSBjb3B5IG9mICpsYXllciogaW50byB0aGUgTWFwIGF0IGluZGV4ICpuSW5kZXgqLiAgVGhlCiAgICAgKiBkZWZhdWx0IHZhbHVlIG9mICpuSW5kZXgqIGlzIC0xLCB3aGljaCBtZWFucyB0aGUgbGFzdCBwb3NzaWJsZQogICAgICogaW5kZXguICBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbmV3IExheWVyLCBvciAtMSBpbiB0aGUgY2FzZSBvZiBhCiAgICAgKiBmYWlsdXJlLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHN5bWJvbGlkCiAgICAgKiBAcmV0dXJuIHN5bWJvbE9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0U3ltYm9sT2JqZWN0QnlJZCgkc3ltYm9saWQpIHt9CgogICAgLyoqCiAgICAgKiBBdmFpbGFibGUgb25seSBpZiBXTVMgc3VwcG9ydCBpcyBlbmFibGVkLiAgTG9hZCBhIDpyZWY6YFdNUyBNYXAgQ29udGV4dCA8bWFwX2NvbnRleHQ+YAogICAgICogWE1MIGZpbGUgaW50byB0aGUgY3VycmVudCBtYXBPYmouICBJZiB0aGUKICAgICAqIG1hcCBhbHJlYWR5IGNvbnRhaW5zIHNvbWUgbGF5ZXJzIHRoZW4gdGhlIGxheWVycyBkZWZpbmVkIGluIHRoZQogICAgICogV01TIE1hcCBjb250ZXh0IGRvY3VtZW50IGFyZSBhZGRlZCB0byB0aGUgY3VycmVudCBtYXAuICBUaGUgMm5kCiAgICAgKiBhcmd1bWVudCB1bmlxdWVfbGF5ZXJfbmFtZSBpcyBvcHRpb25hbCBhbmQgaWYgc2V0IHRvIE1TX1RSVUUKICAgICAqIGxheWVycyBjcmVhdGVkIHdpbGwgaGF2ZSBhIHVuaXF1ZSBuYW1lICh1bmlxdWUgcHJlZml4IGFkZGVkIHRvIHRoZQogICAgICogbmFtZSkuIElmIHNldCB0byBNU19GQUxTRSB0aGUgbGF5ZXIgbmFtZSB3aWxsIGJlIHRoZSB0aGUgc2FtZSBuYW1lCiAgICAgKiBhcyBpbiB0aGUgY29udGV4dC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTVNfRkFMU0UuICBSZXR1cm5zCiAgICAgKiBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICAgICAqIEBwYXJhbSBib29sICR1bmlxdWVfbGF5ZXJfbmFtZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGxvYWRNYXBDb250ZXh0KCRmaWxlbmFtZSwgJHVuaXF1ZV9sYXllcl9uYW1lKSB7fQoKICAgIC8qKgogICAgICogTG9hZCBPV1MgcmVxdWVzdCBwYXJhbWV0ZXJzIChCQk9YLCBMQVlFUlMsICZjLikgaW50byBtYXAuICBSZXR1cm5zCiAgICAgKiBNU19TVUNDRVNTIG9yIE1TX0ZBSUxVUkUuICAybmQgYXJndW1lbnQgdmVyc2lvbiBpcyBub3QgbWFuZGF0b3J5LgogICAgICogSWYgbm90IGdpdmVuLCB0aGUgdmVyc2lvbiB3aWxsIGJlIHNldCB0byAxLjEuMQogICAgICogaW50IGxvYWRRdWVyeShmaWxlbmFtZSkKICAgICAqIExvYWRzIGEgcXVlcnkgZnJvbSBhIGZpbGUuIFJldHVybnMgTVNfU1VDQ0VTUyBvciBNU19GQUlMVVJFLgogICAgICogVG8gYmUgdXNlZCB3aXRoIHNhdmVxdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gT3dzcmVxdWVzdE9iaiAkcmVxdWVzdAogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGxvYWRPV1NQYXJhbWV0ZXJzKE93c3JlcXVlc3RPYmogJHJlcXVlc3QsICR2ZXJzaW9uKSB7fQoKICAgIC8qKgogICAgICogTW92ZSBsYXllciBkb3duIGluIHRoZSBoaWVyYXJjaHkgb2YgZHJhd2luZy4KICAgICAqIFJldHVybnMgTVNfU1VDQ0VTUyBvciBNU19GQUlMVVJFIG9uIGVycm9yLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxheWVyaW5kZXgKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBtb3ZlTGF5ZXJEb3duKCRsYXllcmluZGV4KSB7fQoKICAgIC8qKgogICAgICogTW92ZSBsYXllciB1cCBpbiB0aGUgaGllcmFyY2h5IG9mIGRyYXdpbmcuCiAgICAgKiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IgTVNfRkFJTFVSRSBvbiBlcnJvci4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRsYXllcmluZGV4CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gbW92ZUxheWVyVXAoJGxheWVyaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBPZmZzZXQgdGhlIG1hcCBleHRlbnQgYmFzZWQgb24gdGhlIGdpdmVuIGRpc3RhbmNlcyBpbiBtYXAgY29vcmRpbmF0ZXMuCiAgICAgKiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IgTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgKICAgICAqIEBwYXJhbSBmbG9hdCAkeQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIG9mZnNldEV4dGVudCgkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiBQcm9jZXNzZXMgYW5kIGV4ZWN1dGVzIHRoZSBwYXNzZWQgT3BlbkdJUyBXZWIgU2VydmljZXMgcmVxdWVzdCBvbgogICAgICogdGhlIG1hcC4gIFJldHVybnMgTVNfRE9ORSAoMikgaWYgdGhlcmUgaXMgbm8gdmFsaWQgT1dTIHJlcXVlc3QgaW4KICAgICAqIHRoZSByZXEgb2JqZWN0LCBNU19TVUNDRVNTICgwKSBpZiBhbiBPV1MgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5CiAgICAgKiBwcm9jZXNzZWQgYW5kIE1TX0ZBSUxVUkUgKDEpIGlmIGFuIE9XUyByZXF1ZXN0IHdhcyBub3QKICAgICAqIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQuICBPV1MgcmVxdWVzdHMgaW5jbHVkZSA6cmVmOmBXTVMgPHdtc19zZXJ2ZXI+YCwKICAgICAqIDpyZWY6YFdGUyA8d2ZzX3NlcnZlcj5gLCA6cmVmOmBXQ1MgPHdjc19zZXJ2ZXI+YAogICAgICogYW5kIDpyZWY6YFNPUyA8c29zX3NlcnZlcj5gIHJlcXVlc3RzIHN1cHBvcnRlZCBieSBNYXBTZXJ2ZXIuCiAgICAgKiBSZXN1bHRzIG9mIGEgZGlzcGF0Y2hlZCByZXF1ZXN0IGFyZSB3cml0dGVuIHRvIHN0ZG91dCBhbmQgY2FuIGJlCiAgICAgKiBjYXB0dXJlZCB1c2luZyB0aGUgbXNJTyBzZXJ2aWNlcyAoaWUuIG1zX2lvaW5zdGFsbHN0ZG91dHRvYnVmZmVyKCkKICAgICAqIGFuZCBtc19pb2dldHN0ZG91dGJ1ZmZlcnN0cmluZygpKQogICAgICoKICAgICAqIEBwYXJhbSBPd3NyZXF1ZXN0T2JqICRyZXF1ZXN0CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gb3dzRGlzcGF0Y2goT3dzcmVxdWVzdE9iaiAkcmVxdWVzdCkge30KCiAgICAvKioKICAgICAqIFJldHVybiBhIGJsYW5rIGltYWdlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGltYWdlT2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBwcmVwYXJlSW1hZ2UoKSB7fQoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlIHRoZSBzY2FsZSBvZiB0aGUgbWFwIGFuZCBzZXQgbWFwLT5zY2FsZWRlbm9tLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gcHJlcGFyZVF1ZXJ5KCkge30KCiAgICAvKioKICAgICAqIFByb2Nlc3MgbGVnZW5kIHRlbXBsYXRlIGZpbGVzIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBpbiBhIGJ1ZmZlci4KICAgICAqIC4uIHNlZWFsc286OgogICAgICogOnJlZjpgcHJvY2Vzc3RlbXBsYXRlIDxwcm9jZXNzdGVtcGxhdGU+YAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gcHJvY2Vzc0xlZ2VuZFRlbXBsYXRlKGFycmF5ICRwYXJhbXMpIHt9CgogICAgLyoqCiAgICAgKiBQcm9jZXNzIHF1ZXJ5IHRlbXBsYXRlIGZpbGVzIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBpbiBhIGJ1ZmZlci4KICAgICAqIFNlY29uZCBhcmd1bWVudCBnZW5lcmF0ZWltYWdlcyBpcyBub3QgbWFuZGF0b3J5LiBJZiBub3QgZ2l2ZW4KICAgICAqIGl0IHdpbGwgYmUgc2V0IHRvIFRSVUUuCiAgICAgKiAuLiBzZWVhbHNvOjoKICAgICAqIDpyZWY6YHByb2Nlc3N0ZW1wbGF0ZSA8cHJvY2Vzc3RlbXBsYXRlPmAKICAgICAqIC4uIF9wcm9jZXNzdGVtcGxhdGU6CiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMKICAgICAqIEBwYXJhbSBib29sICRnZW5lcmF0ZWltYWdlcwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHByb2Nlc3NRdWVyeVRlbXBsYXRlKGFycmF5ICRwYXJhbXMsICRnZW5lcmF0ZWltYWdlcykge30KCiAgICAvKioKICAgICAqIFByb2Nlc3MgdGhlIHRlbXBsYXRlIGZpbGUgc3BlY2lmaWVkIGluIHRoZSB3ZWIgb2JqZWN0IGFuZCByZXR1cm4gdGhlCiAgICAgKiByZXN1bHQgaW4gYSBidWZmZXIuIFRoZSBwcm9jZXNzaW5nIGNvbnNpc3RzIG9mIG9wZW5pbmcgdGhlIHRlbXBsYXRlCiAgICAgKiBmaWxlIGFuZCByZXBsYWNlIGFsbCB0aGUgdGFncyBmb3VuZCBpbiBpdC4gT25seSB0YWdzIHRoYXQgaGF2ZSBhbgogICAgICogZXF1aXZhbGVudCBlbGVtZW50IGluIHRoZSBtYXAgb2JqZWN0IGFyZSByZXBsYWNlZCAoZXggW3NjYWxlZGVub21dKS4KICAgICAqIFRoZSBhcmUgdHdvIGV4Y2VwdGlvbnMgdG8gdGhlIHByZXZpb3VzIHN0YXRlbWVudCA6CiAgICAgKiAtIFtpbWddLCBbc2NhbGViYXJdLCBbcmVmXSwgW2xlZ2VuZF0gd291bGQgYmUgcmVwbGFjZWQgd2l0aCB0aGUKICAgICAqIGFwcHJvcHJpYXRlIHVybCBpZiB0aGUgcGFyYW1ldGVyIGdlbmVyYXRlaW1hZ2VzIGlzIHNldCB0bwogICAgICogTVNfVFJVRS4gKE5vdGUgOiAgdGhlIGltYWdlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBkaWZmZXJlbnQgb2JqZWN0cwogICAgICogYXJlIGdlbmVyYXRlZCBpZiB0aGUgb2JqZWN0IGlzIHNldCB0byBNU19PTiBpbiB0aGUgbWFwIGZpbGUpCiAgICAgKiAtIHRoZSB1c2VyIGNhbiB1c2UgdGhlIHBhcmFtcyBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0YWdzIGFuZAogICAgICogdGhlaXIgdmFsdWVzLiBGb3IgZXhhbXBsZSBpZiB0aGUgdXNlciBoYXZlIGEgc3BlY2lmaWMgdGFnIGNhbGwKICAgICAqIFtteV90YWddIGFuZCB3b3VsZCBsaWtlIGl0IHRvIGJlIHJlcGxhY2VkIGJ5ICJ2YWx1ZV9vZl9teV90YWciCiAgICAgKiBoZSB3b3VsZCBkbwogICAgICogLi4gY29kZS1ibG9jazo6IHBocAogICAgICogJHRtcGFycmF5WyJteV90YWciXSA9ICJ2YWx1ZV9vZl9teV90YWciOwogICAgICogJG1hcC0+cHJvY2Vzc3RlbXBsYXRlKCR0bXBhcnJheSwgTVNfRkFMU0UpOwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zCiAgICAgKiBAcGFyYW0gYm9vbCAkZ2VuZXJhdGVpbWFnZXMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzVGVtcGxhdGUoYXJyYXkgJHBhcmFtcywgJGdlbmVyYXRlaW1hZ2VzKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybSBhIHF1ZXJ5IGJhc2VkIG9uIGEgcHJldmlvdXMgc2V0IG9mIHJlc3VsdHMgZnJvbQogICAgICogYSBsYXllci4gQXQgcHJlc2VudCB0aGUgcmVzdWx0cyBNVVNUIGJlIGJhc2VkIG9uIGEgcG9seWdvbiBsYXllci4KICAgICAqIFJldHVybnMgTVNfU1VDQ0VTUyBpZiBzaGFwZXMgd2VyZSBmb3VuZCBvciBNU19GQUlMVVJFIGlmIG5vdGhpbmcKICAgICAqIHdhcyBmb3VuZCBvciBpZiBzb21lIG90aGVyIGVycm9yIGhhcHBlbmVkIChub3RlIHRoYXQgdGhlIGVycm9yCiAgICAgKiBtZXNzYWdlIGluIGNhc2Ugbm90aGluZyB3YXMgZm91bmQgY2FuIGJlIGF2b2lkZWQgaW4gUEhQIHVzaW5nCiAgICAgKiB0aGUgJ0AnIGNvbnRyb2wgb3BlcmF0b3IpLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHNsYXllcgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHF1ZXJ5QnlGZWF0dXJlcygkc2xheWVyKSB7fQoKICAgIC8qKgogICAgICogQWRkIGEgc3BlY2lmaWMgc2hhcGUgb24gYSBnaXZlbiBsYXllciB0byB0aGUgcXVlcnkgcmVzdWx0LgogICAgICogSWYgYWRkdG9xdWVyeSAod2hpY2ggaXMgYSBub24gbWFuZGF0b3J5IGFyZ3VtZW50KSBpcyBzZXQgdG8gTVNfVFJVRSwKICAgICAqIHRoZSBzaGFwZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBleGlzdGluZyBxdWVyeSBsaXN0LiBEZWZhdWx0IGJlaGF2aW9yCiAgICAgKiBpcyB0byBmcmVlIHRoZSBleGlzdGluZyBxdWVyeSBsaXN0IGFuZCBhZGQgb25seSB0aGUgbmV3IHNoYXBlLgogICAgICoKICAgICAqIEBwYXJhbSAgJGxheWVyaW5kZXgKICAgICAqIEBwYXJhbSAgJHRpbGVpbmRleAogICAgICogQHBhcmFtICAkc2hhcGVpbmRleAogICAgICogQHBhcmFtICAkYWRkdG9xdWVyeQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHF1ZXJ5QnlJbmRleCgkbGF5ZXJpbmRleCwgJHRpbGVpbmRleCwgJHNoYXBlaW5kZXgsICRhZGR0b3F1ZXJ5KSB7fQoKICAgIC8qKgogICAgICogUXVlcnkgYWxsIHNlbGVjdGVkIGxheWVycyBpbiBtYXAgYXQgcG9pbnQgbG9jYXRpb24gc3BlY2lmaWVkIGluCiAgICAgKiBnZW9yZWZlcmVuY2VkIG1hcCBjb29yZGluYXRlcyAoaS5lLiBub3QgcGl4ZWxzKS4KICAgICAqIFRoZSBxdWVyeSBpcyBwZXJmb3JtZWQgb24gYWxsIHRoZSBzaGFwZXMgdGhhdCBhcmUgcGFydCBvZiBhIDpyZWY6YENMQVNTYAogICAgICogdGhhdCBjb250YWlucyBhIDpyZWY6YFRFTVBMQVRFYCB2YWx1ZSBvciB0aGF0IG1hdGNoIGFueSBjbGFzcyBpbiBhCiAgICAgKiBsYXllciB0aGF0IGNvbnRhaW5zIGEgOnJlZjpgTEFZRVJgIDpyZWY6YFRFTVBMQVRFIDx0ZW1wbGF0ZT5gIHZhbHVlLgogICAgICogTW9kZSBpcyBNU19TSU5HTEUgb3IgTVNfTVVMVElQTEUgZGVwZW5kaW5nIG9uIG51bWJlciBvZiByZXN1bHRzCiAgICAgKiB5b3Ugd2FudC4KICAgICAqIFBhc3NpbmcgYnVmZmVyIC0xIGRlZmF1bHRzIHRvIHRvbGVyYW5jZXMgc2V0IGluIHRoZSBtYXAgZmlsZQogICAgICogKGluIHBpeGVscykgYnV0IHlvdSBjYW4gdXNlIGEgY29uc3RhbnQgYnVmZmVyIChzcGVjaWZpZWQgaW4KICAgICAqIGdyb3VuZCB1bml0cykgaW5zdGVhZC4KICAgICAqIFJldHVybnMgTVNfU1VDQ0VTUyBpZiBzaGFwZXMgd2VyZSBmb3VuZCBvciBNU19GQUlMVVJFIGlmIG5vdGhpbmcKICAgICAqIHdhcyBmb3VuZCBvciBpZiBzb21lIG90aGVyIGVycm9yIGhhcHBlbmVkIChub3RlIHRoYXQgdGhlIGVycm9yCiAgICAgKiBtZXNzYWdlIGluIGNhc2Ugbm90aGluZyB3YXMgZm91bmQgY2FuIGJlIGF2b2lkZWQgaW4gUEhQIHVzaW5nCiAgICAgKiB0aGUgJ0AnIGNvbnRyb2wgb3BlcmF0b3IpLgogICAgICoKICAgICAqIEBwYXJhbSBwb2ludE9iaiAkcG9pbnQKICAgICAqIEBwYXJhbSBpbnQgJG1vZGUKICAgICAqIEBwYXJhbSBmbG9hdCAkYnVmZmVyCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gcXVlcnlCeVBvaW50KHBvaW50T2JqICRwb2ludCwgJG1vZGUsICRidWZmZXIpIHt9CgogICAgLyoqCiAgICAgKiBRdWVyeSBhbGwgc2VsZWN0ZWQgbGF5ZXJzIGluIG1hcCB1c2luZyBhIHJlY3RhbmdsZSBzcGVjaWZpZWQgaW4KICAgICAqIGdlb3JlZmVyZW5jZWQgbWFwIGNvb3JkaW5hdGVzIChpLmUuIG5vdCBwaXhlbHMpLiAgVGhlIHF1ZXJ5IGlzCiAgICAgKiBwZXJmb3JtZWQgb24gYWxsIHRoZSBzaGFwZXMgdGhhdCBhcmUgcGFydCBvZiBhIDpyZWY6YENMQVNTYCB0aGF0CiAgICAgKiBjb250YWlucyBhIDpyZWY6YFRFTVBMQVRFYCB2YWx1ZSBvciB0aGF0IG1hdGNoIGFueSBjbGFzcyBpbiBhCiAgICAgKiBsYXllciB0aGF0IGNvbnRhaW5zIGEgOnJlZjpgTEFZRVJgIDpyZWY6YFRFTVBMQVRFIDx0ZW1wbGF0ZT5gCiAgICAgKiB2YWx1ZS4gIFJldHVybnMgTVNfU1VDQ0VTUyBpZiBzaGFwZXMgd2VyZSBmb3VuZCBvciBNU19GQUlMVVJFIGlmCiAgICAgKiBub3RoaW5nIHdhcyBmb3VuZCBvciBpZiBzb21lIG90aGVyIGVycm9yIGhhcHBlbmVkIChub3RlIHRoYXQgdGhlCiAgICAgKiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugbm90aGluZyB3YXMgZm91bmQgY2FuIGJlIGF2b2lkZWQgaW4gUEhQCiAgICAgKiB1c2luZyB0aGUgJ0AnIGNvbnRyb2wgb3BlcmF0b3IpLgogICAgICoKICAgICAqIEBwYXJhbSByZWN0T2JqICRyZWN0CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gcXVlcnlCeVJlY3QocmVjdE9iaiAkcmVjdCkge30KCiAgICAvKioKICAgICAqIFF1ZXJ5IGFsbCBzZWxlY3RlZCBsYXllcnMgaW4gbWFwIGJhc2VkIG9uIGEgc2luZ2xlIHNoYXBlLCB0aGUKICAgICAqIHNoYXBlIGhhcyB0byBiZSBhIHBvbHlnb24gYXQgdGhpcyBwb2ludC4KICAgICAqIFJldHVybnMgTVNfU1VDQ0VTUyBpZiBzaGFwZXMgd2VyZSBmb3VuZCBvciBNU19GQUlMVVJFIGlmIG5vdGhpbmcKICAgICAqIHdhcyBmb3VuZCBvciBpZiBzb21lIG90aGVyIGVycm9yIGhhcHBlbmVkIChub3RlIHRoYXQgdGhlIGVycm9yCiAgICAgKiBtZXNzYWdlIGluIGNhc2Ugbm90aGluZyB3YXMgZm91bmQgY2FuIGJlIGF2b2lkZWQgaW4gUEhQIHVzaW5nCiAgICAgKiB0aGUgJ0AnIGNvbnRyb2wgb3BlcmF0b3IpLgogICAgICoKICAgICAqIEBwYXJhbSBzaGFwZU9iaiAkc2hhcGUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBxdWVyeUJ5U2hhcGUoc2hhcGVPYmogJHNoYXBlKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSB0aGUgbWFwT2JqLiBUaGUgYXJndW1lbnQgaXMgdGhlIGluZGV4IG9mIHRoZQogICAgICogbGF5ZXIgdG8gYmUgcmVtb3ZlZC4gUmV0dXJucyB0aGUgcmVtb3ZlZCBsYXllck9iaiBvbiBzdWNjZXNzLCBlbHNlCiAgICAgKiBudWxsLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG5JbmRleAogICAgICogQHJldHVybiBsYXllck9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlTGF5ZXIoJG5JbmRleCkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBhIG1ldGFkYXRhIGVudHJ5IGZvciB0aGUgbWFwIChzdG9yZWQgaW4gdGhlIFdFQiBvYmplY3QgaW4gdGhlIG1hcAogICAgICogZmlsZSkuICBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlTWV0YURhdGEoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBTYXZlIGN1cnJlbnQgbWFwIG9iamVjdCBzdGF0ZSB0byBhIGZpbGUuIFJldHVybnMgLTEgb24gZXJyb3IuCiAgICAgKiBVc2UgYWJzb2x1dGUgcGF0aC4gSWYgYSByZWxhdGl2ZSBwYXRoIGlzIHVzZWQsIHRoZW4gaXQgd2lsbCBiZQogICAgICogcmVsYXRpdmUgdG8gdGhlIG1hcGZpbGUgbG9jYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzYXZlKCRmaWxlbmFtZSkge30KCiAgICAvKioKICAgICAqIEF2YWlsYWJsZSBvbmx5IGlmIFdNUyBzdXBwb3J0IGlzIGVuYWJsZWQuICBTYXZlIGN1cnJlbnQgbWFwIG9iamVjdAogICAgICogc3RhdGUgaW4gOnJlZjpgV01TIE1hcCBDb250ZXh0IDxtYXBfY29udGV4dD5gIGZvcm1hdC4gIE9ubHkgV01TCiAgICAgKiBsYXllcnMgYXJlIHNhdmVkIGluIHRoZSBXTVMgTWFwIENvbnRleHQgWE1MIGZpbGUuICBSZXR1cm5zCiAgICAgKiBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzYXZlTWFwQ29udGV4dCgkZmlsZW5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBTYXZlIHRoZSBjdXJyZW50IHF1ZXJ5IGluIGEgZmlsZS4gUmVzdWx0cyBkZXRlcm1pbmVzIHRoZSBzYXZlIGZvcm1hdCAtCiAgICAgKiBNU19UUlVFIChvciAxL3RydWUpIHNhdmVzIHRoZSBxdWVyeSByZXN1bHRzICh0aWxlIGluZGV4IGFuZCBzaGFwZSBpbmRleCksCiAgICAgKiBNU19GQUxTRSAob3IgMC9mYWxzZSkgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgKGFuZCB0aGUgcXVlcnkgd2lsbCBiZSByZS1ydW4KICAgICAqIGluIGxvYWRxdWVyeSkuIFJldHVybnMgTVNfU1VDQ0VTUyBvciBNU19GQUlMVVJFLiBFaXRoZXIgc2F2ZSBmb3JtYXQgY2FuIGJlCiAgICAgKiB1c2VkIHdpdGggbG9hZHF1ZXJ5LiBTZWUgUkZDIDY1IGFuZCB0aWNrZXQgIzM2NDcgZm9yIGRldGFpbHMgb2YgZGlmZmVyZW50CiAgICAgKiBzYXZlIGZvcm1hdHMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICAgICAqIEBwYXJhbSBpbnQgJHJlc3VsdHMKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzYXZlUXVlcnkoJGZpbGVuYW1lLCAkcmVzdWx0cykge30KCiAgICAvKioKICAgICAqIFNjYWxlIHRoZSBtYXAgZXh0ZW50IHVzaW5nIHRoZSB6b29tZmFjdG9yIGFuZCBlbnN1cmUgdGhlIGV4dGVudAogICAgICogd2l0aGluIHRoZSBtaW5zY2FsZWRlbm9tIGFuZCBtYXhzY2FsZWRlbm9tIGRvbWFpbi4gIElmCiAgICAgKiBtaW5zY2FsZWRlbm9tIGFuZC9vciBtYXhzY2FsZWRlbm9tIGlzIDAgdGhlbiB0aGUgcGFyYW1ldGVyIGlzIG5vdAogICAgICogdGFrZW4gaW50byBhY2NvdW50LiAgUmV0dXJucyBNU19TVUNDRVNTIG9yIE1TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR6b29tZmFjdG9yCiAgICAgKiBAcGFyYW0gZmxvYXQgJG1pbnNjYWxlZGVub20KICAgICAqIEBwYXJhbSBmbG9hdCAkbWF4c2NhbGVkZW5vbQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNjYWxlRXh0ZW50KCR6b29tZmFjdG9yLCAkbWluc2NhbGVkZW5vbSwgJG1heHNjYWxlZGVub20pIHt9CgogICAgLyoqCiAgICAgKiBTZWxlY3RzIHRoZSBvdXRwdXQgZm9ybWF0IHRvIGJlIHVzZWQgaW4gdGhlIG1hcC4KICAgICAqIFJldHVybnMgTVNfU1VDQ0VTUy9NU19GQUlMVVJFLgogICAgICogLi4gbm90ZTo6CiAgICAgKiB0aGUgdHlwZSB1c2VkIHNob3VsZCBjb3JyZXNwb25kIHRvIG9uZSBvZiB0aGUgb3V0cHV0IGZvcm1hdHMKICAgICAqIGRlY2xhcmVkIGluIHRoZSBtYXAgZmlsZS4gIFRoZSB0eXBlIGFyZ3VtZW50IHBhc3NlZCBpcyBjb21wYXJlZAogICAgICogd2l0aCB0aGUgbWltZXR5cGUgcGFyYW1ldGVyIGluIHRoZSBvdXRwdXQgZm9ybWF0IHN0cnVjdHVyZSBhbmQKICAgICAqIHRoZW4gdG8gdGhlIG5hbWUgcGFyYW1ldGVyIGluIHRoZSBzdHJ1Y3R1cmUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNlbGVjdE91dHB1dEZvcm1hdCgkdHlwZSkge30KCiAgICAvKioKICAgICAqIEFwcGVuZHMgb3V0cHV0Zm9ybWF0IG9iamVjdCBpbiB0aGUgbWFwIG9iamVjdC4KICAgICAqIFJldHVybnMgdGhlIG5ldyBudW1vdXRwdXRmb3JtYXRzIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBvdXRwdXRGb3JtYXRPYmogJG91dHB1dEZvcm1hdAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGFwcGVuZE91dHB1dEZvcm1hdChvdXRwdXRGb3JtYXRPYmogJG91dHB1dEZvcm1hdCkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBvdXRwdXRmb3JtYXQgZnJvbSB0aGUgbWFwLgogICAgICogUmV0dXJucyBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHJlbW92ZU91dHB1dEZvcm1hdCgkbmFtZSkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG91dHB1dGZvcm1hdCBhdCBpbmRleCBwb3NpdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleAogICAgICogQHJldHVybiBvdXRwdXRGb3JtYXRPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldE91dHB1dEZvcm1hdCgkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgbWFwIG9iamVjdCBwcm9wZXJ0eSB0byBuZXcgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJvcGVydHlfbmFtZQogICAgICogQHBhcmFtICAkbmV3X3ZhbHVlCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0KCRwcm9wZXJ0eV9uYW1lLCAkbmV3X3ZhbHVlKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBtYXAgY2VudGVyIHRvIHRoZSBnaXZlbiBtYXAgcG9pbnQuCiAgICAgKiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IgTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gcG9pbnRPYmogJGNlbnRlcgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldENlbnRlcihwb2ludE9iaiAkY2VudGVyKSB7fQoKICAgIC8qKgogICAgICogU2V0cyBhIGNvbmZpZyBwYXJhbWV0ZXIgdXNpbmcgdGhlIGtleSBhbmQgdGhlIHZhbHVlIHBhc3NlZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRDb25maWdPcHRpb24oJGtleSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBtYXAgZXh0ZW50cyB1c2luZyB0aGUgZ2VvcmVmIGV4dGVudHMgcGFzc2VkIGluIGFyZ3VtZW50LgogICAgICogUmV0dXJucyBNU19TVUNDRVNTIG9yIE1TX0ZBSUxVUkUgb24gZXJyb3IuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRtaW54CiAgICAgKiBAcGFyYW0gZmxvYXQgJG1pbnkKICAgICAqIEBwYXJhbSBmbG9hdCAkbWF4eAogICAgICogQHBhcmFtIGZsb2F0ICRtYXh5CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldEV4dGVudCgkbWlueCwgJG1pbnksICRtYXh4LCAkbWF4eSkge30KCiAgICAvKioKICAgICAqIExvYWQgYW5kIHNldCBhIG5ldyA6cmVmOmBmb250c2V0YC4KICAgICAqIGJvb2xlYW4gIHNldExheWVyc0RyYXdpbmdPcmRlcihhcnJheSBsYXllcnlpbmRleCkKICAgICAqIFNldCB0aGUgbGF5ZXIncyBvcmRlciBhcnJheS4gVGhlIGFyZ3VtZW50IHBhc3NlZCBtdXN0IGJlIGEgdmFsaWQKICAgICAqIGFycmF5IHdpdGggYWxsIHRoZSBsYXllcidzIGluZGV4LgogICAgICogUmV0dXJucyBNU19TVUNDRVNTIG9yIE1TX0ZBSUxVUkUgb24gZXJyb3IuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZU5hbWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRGb250U2V0KCRmaWxlTmFtZSkge30KCiAgICAvKioKICAgICAqIFNldCBhIG1ldGFkYXRhIGVudHJ5IGZvciB0aGUgbWFwIChzdG9yZWQgaW4gdGhlIFdFQiBvYmplY3QgaW4gdGhlIG1hcAogICAgICogZmlsZSkuICBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldE1ldGFEYXRhKCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgbWFwIHByb2plY3Rpb24gYW5kIGNvb3JkaW5hdGUgc3lzdGVtLiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IKICAgICAqIE1TX0ZBSUxVUkUgb24gZXJyb3IuCiAgICAgKiBQYXJhbWV0ZXJzIGFyZSBnaXZlbiBhcyBhIHNpbmdsZSBzdHJpbmcgb2YgY29tbWEtZGVsaW1pdGVkIFBST0ouNAogICAgICogcGFyYW1ldGVycy4gIFRoZSBhcmd1bWVudCA6IGJTZXRVbml0c0FuZEV4dGVudHMgaXMgdXNlZCB0bwogICAgICogYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIG1hcCB1bml0cyBhbmQgZXh0ZW50cyBiYXNlZCBvbiB0aGUgbmV3CiAgICAgKiBwcm9qZWN0aW9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIE1TX1RSVUUgYW5kIE1TX0ZBTFNFLiBCeSBkZWZhdWx0IGl0IGlzCiAgICAgKiBzZXQgYXQgTVNfRkFMU0UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJval9wYXJhbXMKICAgICAqIEBwYXJhbSBib29sICRiU2V0VW5pdHNBbmRFeHRlbnRzCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0UHJvamVjdGlvbigkcHJval9wYXJhbXMsICRiU2V0VW5pdHNBbmRFeHRlbnRzKSB7fQoKICAgIC8qKgogICAgICogU2V0IG1hcCByb3RhdGlvbiBhbmdsZS4gVGhlIG1hcCB2aWV3IHJlY3RhbmdsZSAoc3BlY2lmaWVkIGluCiAgICAgKiBFWFRFTlRTKSB3aWxsIGJlIHJvdGF0ZWQgYnkgdGhlIGluZGljYXRlZCBhbmdsZSBpbiB0aGUgY291bnRlci0KICAgICAqIGNsb2Nrd2lzZSBkaXJlY3Rpb24uIE5vdGUgdGhhdCB0aGlzIGltcGxpZXMgdGhlIHJlbmRlcmVkIG1hcAogICAgICogd2lsbCBiZSByb3RhdGVkIGJ5IHRoZSBhbmdsZSBpbiB0aGUgY2xvY2t3aXNlIGRpcmVjdGlvbi4KICAgICAqIFJldHVybnMgTVNfU1VDQ0VTUyBvciBNU19GQUlMVVJFLgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkcm90YXRpb25fYW5nbGUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRSb3RhdGlvbigkcm90YXRpb25fYW5nbGUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1hcCB3aWR0aCBhbmQgaGVpZ2h0LiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBpbnRlcm5hbAogICAgICogZ2VvdHJhbnNmb3JtIGFuZCBvdGhlciBkYXRhIHN0cnVjdHVyZXMgcmVxdWlyZWQgZm9yIG1hcCByb3RhdGlvbgogICAgICogc28gaXQgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBzZXR0aW5nIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG1lbWJlcnMKICAgICAqIGRpcmVjdGx5LgogICAgICogUmV0dXJucyBNU19TVUNDRVNTIG9yIE1TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkd2lkdGgKICAgICAqIEBwYXJhbSBpbnQgJGhlaWdodAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldFNpemUoJHdpZHRoLCAkaGVpZ2h0KSB7fQoKICAgIC8qKgogICAgICogTG9hZCBhbmQgc2V0IGEgc3ltYm9sIGZpbGUgZHluYW1pY2FsbHkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZU5hbWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRTeW1ib2xTZXQoJGZpbGVOYW1lKSB7fQoKICAgIC8qKgogICAgICogU2FtZSBhcyBzZXRQcm9qZWN0aW9uKCksIGJ1dCB0YWtlcyBhbiBPR0MgV0tUIHByb2plY3Rpb24KICAgICAqIGRlZmluaXRpb24gc3RyaW5nIGFzIGlucHV0LiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IgTVNfRkFJTFVSRSBvbiBlcnJvci4KICAgICAqIC4uIG5vdGU6OgogICAgICogc2V0V0tUUHJvamVjdGlvbiByZXF1aXJlcyBHREFMIHN1cHBvcnQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9qX3BhcmFtcwogICAgICogQHBhcmFtIGJvb2wgJGJTZXRVbml0c0FuZEV4dGVudHMKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRXS1RQcm9qZWN0aW9uKCRwcm9qX3BhcmFtcywgJGJTZXRVbml0c0FuZEV4dGVudHMpIHt9CgogICAgLyoqCiAgICAgKiBab29tIHRvIGEgZ2l2ZW4gWFkgcG9zaXRpb24uIFJldHVybnMgTVNfU1VDQ0VTUyBvciBNU19GQUlMVVJFIG9uIGVycm9yLgogICAgICogUGFyYW1ldGVycyBhcmUKICAgICAqIC0gWm9vbSBmYWN0b3IgOiBwb3NpdGl2ZSB2YWx1ZXMgZG8gem9vbSBpbiwgbmVnYXRpdmUgdmFsdWVzCiAgICAgKiB6b29tIG91dC4gRmFjdG9yIG9mIDEgd2lsbCByZWNlbnRlci4KICAgICAqIC0gUGl4ZWwgcG9zaXRpb24gKHBvaW50T2JqKSA6IHgsIHkgY29vcmRpbmF0ZXMgb2YgdGhlIGNsaWNrLAogICAgICogd2l0aCAoMCwwKSBhdCB0aGUgdG9wLWxlZnQKICAgICAqIC0gV2lkdGggOiB3aWR0aCBpbiBwaXhlbCBvZiB0aGUgY3VycmVudCBpbWFnZS4KICAgICAqIC0gSGVpZ2h0IDogSGVpZ2h0IGluIHBpeGVsIG9mIHRoZSBjdXJyZW50IGltYWdlLgogICAgICogLSBHZW9yZWYgZXh0ZW50IChyZWN0T2JqKSA6IGN1cnJlbnQgZ2VvcmVmIGV4dGVudHMuCiAgICAgKiAtIE1heEdlb3JlZiBleHRlbnQgKHJlY3RPYmopIDogKG9wdGlvbmFsKSBtYXhpbXVtIGdlb3JlZiBleHRlbnRzLgogICAgICogSWYgcHJvdmlkZWQgdGhlbiBpdCB3aWxsIGJlIGltcG9zc2libGUgdG8gem9vbS9wYW4gb3V0c2lkZSBvZgogICAgICogdGhvc2UgZXh0ZW50cy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRuWm9vbUZhY3RvcgogICAgICogQHBhcmFtIHBvaW50T2JqICRvUGl4ZWxQb3MKICAgICAqIEBwYXJhbSBpbnQgJG5JbWFnZVdpZHRoCiAgICAgKiBAcGFyYW0gaW50ICRuSW1hZ2VIZWlnaHQKICAgICAqIEBwYXJhbSByZWN0T2JqICRvR2VvcmVmRXh0CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gem9vbVBvaW50KCRuWm9vbUZhY3RvciwgcG9pbnRPYmogJG9QaXhlbFBvcywgJG5JbWFnZVdpZHRoLCAkbkltYWdlSGVpZ2h0LCByZWN0T2JqICRvR2VvcmVmRXh0KSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBtYXAgZXh0ZW50cyB0byBhIGdpdmVuIGV4dGVudHMuIFJldHVybnMgTVNfU1VDQ0VTUyBvcgogICAgICogTVNfRkFJTFVSRSBvbiBlcnJvci4KICAgICAqIFBhcmFtZXRlcnMgYXJlIDoKICAgICAqIC0gb1BpeGVsRXh0IChyZWN0IG9iamVjdCkgOiBQaXhlbCBFeHRlbnRzCiAgICAgKiAtIFdpZHRoIDogd2lkdGggaW4gcGl4ZWwgb2YgdGhlIGN1cnJlbnQgaW1hZ2UuCiAgICAgKiAtIEhlaWdodCA6IEhlaWdodCBpbiBwaXhlbCBvZiB0aGUgY3VycmVudCBpbWFnZS4KICAgICAqIC0gR2VvcmVmIGV4dGVudCAocmVjdE9iaikgOiBjdXJyZW50IGdlb3JlZiBleHRlbnRzLgogICAgICoKICAgICAqIEBwYXJhbSByZWN0T2JqICRvUGl4ZWxFeHQKICAgICAqIEBwYXJhbSBpbnQgJG5JbWFnZVdpZHRoCiAgICAgKiBAcGFyYW0gaW50ICRuSW1hZ2VIZWlnaHQKICAgICAqIEBwYXJhbSByZWN0T2JqICRvR2VvcmVmRXh0CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gem9vbVJlY3RhbmdsZShyZWN0T2JqICRvUGl4ZWxFeHQsICRuSW1hZ2VXaWR0aCwgJG5JbWFnZUhlaWdodCwgcmVjdE9iaiAkb0dlb3JlZkV4dCkge30KCiAgICAvKioKICAgICAqIFpvb20gaW4gb3Igb3V0IHRvIGEgZ2l2ZW4gWFkgcG9zaXRpb24gc28gdGhhdCB0aGUgbWFwIGlzCiAgICAgKiBkaXNwbGF5ZWQgYXQgc3BlY2lmaWVkIHNjYWxlLiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IgTVNfRkFJTFVSRSBvbiBlcnJvci4KICAgICAqIFBhcmFtZXRlcnMgYXJlIDoKICAgICAqIC0gU2NhbGVEZW5vbSA6IFNjYWxlIGRlbm9taW5hdG9yIG9mIHRoZSBzY2FsZSBhdCB3aGljaCB0aGUgbWFwCiAgICAgKiBzaG91bGQgYmUgZGlzcGxheWVkLgogICAgICogLSBQaXhlbCBwb3NpdGlvbiAocG9pbnRPYmopIDogeCwgeSBjb29yZGluYXRlcyBvZiB0aGUgY2xpY2ssCiAgICAgKiB3aXRoICgwLDApIGF0IHRoZSB0b3AtbGVmdAogICAgICogLSBXaWR0aCA6IHdpZHRoIGluIHBpeGVsIG9mIHRoZSBjdXJyZW50IGltYWdlLgogICAgICogLSBIZWlnaHQgOiBIZWlnaHQgaW4gcGl4ZWwgb2YgdGhlIGN1cnJlbnQgaW1hZ2UuCiAgICAgKiAtIEdlb3JlZiBleHRlbnQgKHJlY3RPYmopIDogY3VycmVudCBnZW9yZWYgZXh0ZW50cy4KICAgICAqIC0gTWF4R2VvcmVmIGV4dGVudCAocmVjdE9iaikgOiAob3B0aW9uYWwpIG1heGltdW0gZ2VvcmVmIGV4dGVudHMuCiAgICAgKiBJZiBwcm92aWRlZCB0aGVuIGl0IHdpbGwgYmUgaW1wb3NzaWJsZSB0byB6b29tL3BhbiBvdXRzaWRlIG9mCiAgICAgKiB0aG9zZSBleHRlbnRzLgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkblNjYWxlRGVub20KICAgICAqIEBwYXJhbSBwb2ludE9iaiAkb1BpeGVsUG9zCiAgICAgKiBAcGFyYW0gaW50ICRuSW1hZ2VXaWR0aAogICAgICogQHBhcmFtIGludCAkbkltYWdlSGVpZ2h0CiAgICAgKiBAcGFyYW0gcmVjdE9iaiAkb0dlb3JlZkV4dAogICAgICogQHBhcmFtIHJlY3RPYmogJG9NYXhHZW9yZWZFeHQKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiB6b29tU2NhbGUoJG5TY2FsZURlbm9tLCBwb2ludE9iaiAkb1BpeGVsUG9zLCAkbkltYWdlV2lkdGgsICRuSW1hZ2VIZWlnaHQsIHJlY3RPYmogJG9HZW9yZWZFeHQsIHJlY3RPYmogJG9NYXhHZW9yZWZFeHQpIHt9Cn0KCi8qKgogKiBJbnN0YW5jZSBvZiBvdXRwdXRmb3JtYXRPYmogaXMgYWx3YXlzIGVtYmVkZGVkIGluc2lkZSB0aGUgYG1hcE9iamBfLgogKiBJdCBpcyB1c2VzIGEgcmVhZCBvbmx5LgogKiBObyBjb25zdHJ1Y3RvciBhdmFpbGFibGUgKGNvbWluZyBzb29uLCBzZWUgdGlja2V0IDk3OSkKICovCmZpbmFsIGNsYXNzIG91dHB1dGZvcm1hdE9iagp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkZHJpdmVyOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRleHRlbnNpb247CgogICAgLyoqCiAgICAgKiBNU19JTUFHRU1PREVfKiB2YWx1ZS4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGltYWdlbW9kZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkbWltZXR5cGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJG5hbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHJlbmRlcmVyOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICR0cmFuc3BhcmVudDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGFzc29jaWF0ZWQgdmFsdWUgZm9yIHRoZSBmb3JtYXQgb3B0aW9uIHByb3BlcnR5IHBhc3NlZAogICAgICogYXMgYXJndW1lbnQuIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIHByb3BlcnR5IG5vdCBmb3VuZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eV9uYW1lCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0aW9uKCRwcm9wZXJ0eV9uYW1lKSB7fQoKICAgIC8qKgogICAgICogU2V0IG9iamVjdCBwcm9wZXJ0eSB0byBhIG5ldyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eV9uYW1lCiAgICAgKiBAcGFyYW0gICRuZXdfdmFsdWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXQoJHByb3BlcnR5X25hbWUsICRuZXdfdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBBZGQgb3IgTW9kaWZ5IHRoZSBmb3JtYXQgb3B0aW9uIGxpc3QuIHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MuCiAgICAgKiAuLiBjb2RlLWJsb2NrOjogcGhwCiAgICAgKiAkb01hcC0+b3V0cHV0Zm9ybWF0LT5zZXRPcHRpb24oIk9VVFBVVF9UWVBFIiwgIlJBU1RFUiIpOwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByb3BlcnR5X25hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5ld192YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRPcHRpb24oJHByb3BlcnR5X25hbWUsICRuZXdfdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3Mgc29tZSBpbnRlcm5hbCBjb25zaXN0ZW5jeSBpc3N1ZXMsIFJldHVybnMgTVNfU1VDQ0VTUyBvcgogICAgICogTVNfRkFJTFVSRS4gU29tZSBwcm9ibGVtcyBhcmUgZml4ZWQgdXAgaW50ZXJuYWxseS4gTWF5IHByb2R1Y2UgZGVidWcKICAgICAqIG91dHB1dCBpZiBpc3N1ZXMgZW5jb3VudGVyZWQuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlKCkge30KfQoKZmluYWwgY2xhc3MgT3dzcmVxdWVzdE9iagp7CiAgICAvKioKICAgICAqIChyZWFkLW9ubHkpCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRudW1wYXJhbXM7CgogICAgLyoqCiAgICAgKiAocmVhZC1vbmx5KTogTVNfR0VUX1JFUVVFU1Qgb3IgTVNfUE9TVF9SRVFVRVNUCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICR0eXBlOwoKICAgIC8qKgogICAgICogcmVxdWVzdCA9IG1zX25ld093c3JlcXVlc3RPYmooKTsKICAgICAqIENyZWF0ZSBhIG5ldyBvd3MgcmVxdWVzdCBvYmplY3QuCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBBZGQgYSByZXF1ZXN0IHBhcmFtZXRlciwgZXZlbiBpZiB0aGUgcGFyYW1ldGVyIGtleSB3YXMgcHJldmlvdXNlbHkgc2V0LgogICAgICogVGhpcyBpcyB1c2VmdWwgd2hlbiBtdWx0aXBsZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHNhbWUga2V5IGFyZSByZXF1aXJlZC4KICAgICAqIEZvciBleGFtcGxlIDoKICAgICAqIC4uIGNvZGUtYmxvY2s6OiBwaHAKICAgICAqICRyZXF1ZXN0LT5hZGRwYXJhbWV0ZXIoJ1NJWkUnLCAneCgxMDApJyk7CiAgICAgKiAkcmVxdWVzdC0+YWRkcGFyYW1ldGVyKCdTSVpFJywgJ3koMTAwKScpOwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gYWRkUGFyYW1ldGVyKCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciBhdCAqaW5kZXgqIGluIHRoZSByZXF1ZXN0J3MgYXJyYXkKICAgICAqIG9mIHBhcmFtZXRlciBuYW1lcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoJGluZGV4KSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyIGF0ICppbmRleCogaW4gdGhlIHJlcXVlc3QncyBhcnJheQogICAgICogb2YgcGFyYW1ldGVyIHZhbHVlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCRpbmRleCkge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXJhbWV0ZXIgKm5hbWUqLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZUJ5TmFtZSgkbmFtZSkge30KCiAgICAvKioKICAgICAqIEluaXRpYWxpemVzIHRoZSBPV1NSZXF1ZXN0IG9iamVjdCBmcm9tIHRoZSBjZ2kgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgICAgKiBSRVFVRVNUX01FVEhPRCwgUVVFUllfU1RSSU5HIGFuZCBIVFRQX0NPT0tJRS4gIFJldHVybnMgdGhlIG51bWJlciBvZgogICAgICogbmFtZS92YWx1ZSBwYWlycyBjb2xsZWN0ZWQuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGxvYWRQYXJhbXMoKSB7fQoKICAgIC8qKgogICAgICogU2V0IGEgcmVxdWVzdCBwYXJhbWV0ZXIuICBGb3IgZXhhbXBsZSA6CiAgICAgKiAuLiBjb2RlLWJsb2NrOjogcGhwCiAgICAgKiAkcmVxdWVzdC0+c2V0cGFyYW1ldGVyKCdSRVFVRVNUJywgJ0dldE1hcCcpOwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0UGFyYW1ldGVyKCRuYW1lLCAkdmFsdWUpIHt9Cn0KCmZpbmFsIGNsYXNzIHBvaW50T2JqCnsKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJHg7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkeTsKCiAgICAvKioKICAgICAqIHVzZWQgZm9yIDNkIHNoYXBlIGZpbGVzLiBzZXQgdG8gMCBmb3Igb3RoZXIgdHlwZXMKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkejsKCiAgICAvKioKICAgICAqIHVzZWQgb25seSBmb3IgbWVhc3VyZWQgc2hhcGUgZmlsZXMgLSBzZXQgdG8gMCBmb3Igb3RoZXIgdHlwZXMKICAgICAqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkbTsKCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogT2xkIHN0eWxlIGNvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHJldHVybiBwb2ludE9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gbXNfbmV3UG9pbnRPYmooKSB7fQoKICAgIC8qKgogICAgICogQ2FsY3VsYXRlcyBkaXN0YW5jZSBiZXR3ZWVuIGEgcG9pbnQgYWQgYSBsaW5lZCBkZWZpbmVkIGJ5IHRoZQogICAgICogdHdvIHBvaW50cyBwYXNzZWQgaW4gYXJndW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIHBvaW50T2JqICRwMQogICAgICogQHBhcmFtIHBvaW50T2JqICRwMgogICAgICogQHJldHVybiBmbG9hdAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZGlzdGFuY2VUb0xpbmUocG9pbnRPYmogJHAxLCBwb2ludE9iaiAkcDIpIHt9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGVzIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50cy4KICAgICAqCiAgICAgKiBAcGFyYW0gcG9pbnRPYmogJHBvUG9pbnQKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGRpc3RhbmNlVG9Qb2ludChwb2ludE9iaiAkcG9Qb2ludCkge30KCiAgICAvKioKICAgICAqIENhbGN1bGF0ZXMgdGhlIG1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiBhIHBvaW50IGFuZCBhIHNoYXBlLgogICAgICoKICAgICAqIEBwYXJhbSBzaGFwZU9iaiAkc2hhcGUKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGRpc3RhbmNlVG9TaGFwZShzaGFwZU9iaiAkc2hhcGUpIHt9CgogICAgLyoqCiAgICAgKiBEcmF3cyB0aGUgaW5kaXZpZHVhbCBwb2ludCB1c2luZyBsYXllci4gIFRoZSBjbGFzc19pbmRleCBpcyB1c2VkCiAgICAgKiB0byBjbGFzc2lmeSB0aGUgcG9pbnQgYmFzZWQgb24gdGhlIGNsYXNzZXMgZGVmaW5lZCBmb3IgdGhlIGxheWVyLgogICAgICogVGhlIHRleHQgc3RyaW5nIGlzIHVzZWQgdG8gYW5ub3RhdGUgdGhlIHBvaW50LiAoT3B0aW9uYWwpCiAgICAgKiBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWFwT2JqICRtYXAKICAgICAqIEBwYXJhbSBsYXllck9iaiAkbGF5ZXIKICAgICAqIEBwYXJhbSBpbWFnZU9iaiAkaW1nCiAgICAgKiBAcGFyYW0gaW50ICRjbGFzc19pbmRleAogICAgICogQHBhcmFtIHN0cmluZyAkdGV4dAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGRyYXcobWFwT2JqICRtYXAsIGxheWVyT2JqICRsYXllciwgaW1hZ2VPYmogJGltZywgJGNsYXNzX2luZGV4LCAkdGV4dCkge30KCiAgICAvKioKICAgICAqIFByb2plY3QgdGhlIHBvaW50IGZyb20gImluIiBwcm9qZWN0aW9uICgxc3QgYXJndW1lbnQpIHRvICJvdXQiCiAgICAgKiBwcm9qZWN0aW9uICgybmQgYXJndW1lbnQpLiAgUmV0dXJucyBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIHByb2plY3Rpb25PYmogJGluCiAgICAgKiBAcGFyYW0gcHJvamVjdGlvbk9iaiAkb3V0CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gcHJvamVjdChwcm9qZWN0aW9uT2JqICRpbiwgcHJvamVjdGlvbk9iaiAkb3V0KSB7fQoKICAgIC8qKgogICAgICogU2V0IFgsWSBjb29yZGluYXRlIHZhbHVlcy4KICAgICAqIC4uIG5vdGU6OgogICAgICogdGhlIDNyZCBwYXJhbWV0ZXIgbSBpcyB1c2VkIGZvciBtZWFzdXJlZCBzaGFwZSBmaWxlcyBvbmx5LgogICAgICogSXQgaXMgbm90IG1hbmRhdG9yeS4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgKICAgICAqIEBwYXJhbSBmbG9hdCAkeQogICAgICogQHBhcmFtIGZsb2F0ICRtCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0WFkoJHgsICR5LCAkbSkge30KCiAgICAvKioKICAgICAqIFNldCBYLFksWiBjb29yZGluYXRlIHZhbHVlcy4KICAgICAqIC4uIG5vdGU6OgogICAgICogdGhlIDR0aCBwYXJhbWV0ZXIgbSBpcyB1c2VkIGZvciBtZWFzdXJlZCBzaGFwZSBmaWxlcyBvbmx5LgogICAgICogSXQgaXMgbm90IG1hbmRhdG9yeS4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgKICAgICAqIEBwYXJhbSBmbG9hdCAkeQogICAgICogQHBhcmFtIGZsb2F0ICR6CiAgICAgKiBAcGFyYW0gZmxvYXQgJG0KICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRYWVooJHgsICR5LCAkeiwgJG0pIHt9Cn0KCmZpbmFsIGNsYXNzIHByb2plY3Rpb25PYmoKewogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgcHJvamVjdGlvbiBvYmplY3QgYmFzZWQgb24gdGhlIHByb2plY3Rpb24gc3RyaW5nIHBhc3NlZAogICAgICogYXMgYXJndW1lbnQuCiAgICAgKiAkcHJvakluT2JqID0gbXNfbmV3cHJvamVjdGlvbm9iaigicHJvaj1sYXRsb25nIikKICAgICAqIHdpbGwgY3JlYXRlIGEgZ2VvZ3JhcGhpYyBwcm9qZWN0aW9uIGNsYXNzLgogICAgICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHdpbGwgY29udmVydCBhIGxhdC9sb25nIHBvaW50IHRvIGFuIExDQwogICAgICogcHJvamVjdGlvbjoKICAgICAqICRwcm9qSW5PYmogPSBtc19uZXdwcm9qZWN0aW9ub2JqKCJwcm9qPWxhdGxvbmciKTsKICAgICAqICRwcm9qT3V0T2JqID0gbXNfbmV3cHJvamVjdGlvbm9iaigicHJvaj1sY2MsZWxscHM9R1JTODAsbGF0XzA9NDksIi4KICAgICAqICJsb25fMD0tOTUsbGF0XzE9NDksbGF0XzI9NzciKTsKICAgICAqICRwb1BvaW50ID0gbXNfbmV3cG9pbnRvYmooKTsKICAgICAqICRwb1BvaW50LT5zZXRYWSgtOTIuMCwgNjIuMCk7CiAgICAgKiAkcG9Qb2ludC0+cHJvamVjdCgkcHJvakluT2JqLCAkcHJvak91dE9iaik7CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJvamVjdGlvblN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHByb2plY3Rpb25TdHJpbmcpIHt9CgogICAgLyoqCiAgICAgKiBPbGQgc3R5bGUgY29uc3RydWN0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9qZWN0aW9uU3RyaW5nCiAgICAgKiBAcmV0dXJuIFByb2plY3Rpb25PYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIG1zX25ld1Byb2plY3Rpb25PYmooJHByb2plY3Rpb25TdHJpbmcpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB1bml0cyBvZiBhIHByb2plY3Rpb24gb2JqZWN0LiBSZXR1cm5zIC0xIG9uIGVycm9yLgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRVbml0cygpIHt9Cn0KCi8qKgogKiBJbnN0YW5jZXMgb2YgcXVlcnltYXBPYmogYXJlIGFsd2F5cyBhcmUgYWx3YXlzIGVtYmVkZGVkIGluc2lkZSB0aGUKICogYG1hcE9iamBfLgogKi8KZmluYWwgY2xhc3MgcXVlcnltYXBPYmoKewogICAgLyoqCiAgICAgKiBAdmFyIGNvbG9yT2JqCiAgICAgKi8KICAgIHB1YmxpYyAkY29sb3I7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGhlaWdodDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkd2lkdGg7CgogICAgLyoqCiAgICAgKiBNU19OT1JNQUwsIE1TX0hJTElURSwgTVNfU0VMRUNURUQKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHN0eWxlOwoKICAgIC8qKgogICAgICogU2F2ZXMgdGhlIG9iamVjdCB0byBhIHN0cmluZy4gIFByb3ZpZGVzIHRoZSBpbnZlcnNlIG9wdGlvbiBmb3IKICAgICAqIHVwZGF0ZUZyb21TdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZygpIHt9CgogICAgLyoqCiAgICAgKiBGcmVlIHRoZSBvYmplY3QgcHJvcGVydGllcyBhbmQgYnJlYWsgdGhlIGludGVybmFsIHJlZmVyZW5jZXMuCiAgICAgKiBOb3RlIHRoYXQgeW91IGhhdmUgdG8gdW5zZXQgdGhlIHBocCB2YXJpYWJsZSB0byBmcmVlIHRvdGFsbHkgdGhlIHJlc291cmNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGZyZWUoKSB7fQoKICAgIC8qKgogICAgICogU2V0IG9iamVjdCBwcm9wZXJ0eSB0byBhIG5ldyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eV9uYW1lCiAgICAgKiBAcGFyYW0gICRuZXdfdmFsdWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXQoJHByb3BlcnR5X25hbWUsICRuZXdfdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBVcGRhdGUgYSBxdWVyeU1hcCBvYmplY3QgZnJvbSBhIHN0cmluZyBzbmlwcGV0LiBSZXR1cm5zCiAgICAgKiBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc25pcHBldAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZUZyb21TdHJpbmcoJHNuaXBwZXQpIHt9Cn0KCi8qKgogKiByZWN0T2JqIGFyZSBzb21ldGltZXMgZW1iZWRkZWQgaW5zaWRlIG90aGVyIG9iamVjdHMuICBOZXcgb25lcyBjYW4KICogYWxzbyBiZSBjcmVhdGVkIHdpdGg6CiAqLwpmaW5hbCBjbGFzcyByZWN0T2JqCnsKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJG1pbng7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkbWlueTsKCiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgcHVibGljICRtYXh4OwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJG1heHk7CgogICAgLyoqCiAgICAgKiAuLiBub3RlOjogdGhlIG1lbWJlcnMgKG1pbngsIG1pbnksIG1heHggLG1heHkpIGFyZSBpbml0aWFsaXplZCB0byAtMTsKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIE9sZCBzdHlsZSBjb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEByZXR1cm4gUmVjdE9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gbXNfbmV3UmVjdE9iaigpIHt9CgogICAgLyoqCiAgICAgKiBEcmF3cyB0aGUgaW5kaXZpZHVhbCByZWN0YW5nbGUgdXNpbmcgbGF5ZXIuICBUaGUgY2xhc3NfaW5kZXggaXMgdXNlZAogICAgICogdG8gY2xhc3NpZnkgdGhlIHJlY3RhbmdsZSBiYXNlZCBvbiB0aGUgY2xhc3NlcyBkZWZpbmVkIGZvciB0aGUgbGF5ZXIuCiAgICAgKiBUaGUgdGV4dCBzdHJpbmcgaXMgdXNlZCB0byBhbm5vdGF0ZSB0aGUgcmVjdGFuZ2xlLiAoT3B0aW9uYWwpCiAgICAgKiBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWFwT2JqICRtYXAKICAgICAqIEBwYXJhbSBsYXllck9iaiAkbGF5ZXIKICAgICAqIEBwYXJhbSBpbWFnZU9iaiAkaW1nCiAgICAgKiBAcGFyYW0gaW50ICRjbGFzc19pbmRleAogICAgICogQHBhcmFtIHN0cmluZyAkdGV4dAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGRyYXcobWFwT2JqICRtYXAsIGxheWVyT2JqICRsYXllciwgaW1hZ2VPYmogJGltZywgJGNsYXNzX2luZGV4LCAkdGV4dCkge30KCiAgICAvKioKICAgICAqIEFkanVzdCBleHRlbnRzIG9mIHRoZSByZWN0YW5nbGUgdG8gZml0IHRoZSB3aWR0aC9oZWlnaHQgc3BlY2lmaWVkLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoCiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGZpdCgkd2lkdGgsICRoZWlnaHQpIHt9CgogICAgLyoqCiAgICAgKiBQcm9qZWN0IHRoZSByZWN0YW5nbGUgZnJvbSAiaW4iIHByb2plY3Rpb24gKDFzdCBhcmd1bWVudCkgdG8gIm91dCIKICAgICAqIHByb2plY3Rpb24gKDJuZCBhcmd1bWVudCkuICBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gcHJvamVjdGlvbk9iaiAkaW4KICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uT2JqICRvdXQKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBwcm9qZWN0KHByb2plY3Rpb25PYmogJGluLCBwcm9qZWN0aW9uT2JqICRvdXQpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgb2JqZWN0IHByb3BlcnR5IHRvIGEgbmV3IHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByb3BlcnR5X25hbWUKICAgICAqIEBwYXJhbSAgJG5ld192YWx1ZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldCgkcHJvcGVydHlfbmFtZSwgJG5ld192YWx1ZSkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgcmVjdGFuZ2xlIGV4dGVudHMuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRtaW54CiAgICAgKiBAcGFyYW0gZmxvYXQgJG1pbnkKICAgICAqIEBwYXJhbSBmbG9hdCAkbWF4eAogICAgICogQHBhcmFtIGZsb2F0ICRtYXh5CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldGV4dGVudCgkbWlueCwgJG1pbnksICRtYXh4LCAkbWF4eSkge30KfQoKLyoqCiAqIEluc3RhbmNlcyBvZiByZWZlcmVuY2VNYXBPYmogYXJlIGFsd2F5cyBlbWJlZGRlZCBpbnNpZGUgdGhlIGBtYXBPYmpgXy4KICovCmZpbmFsIGNsYXNzIHJlZmVyZW5jZU1hcE9iagp7CiAgICAvKioKICAgICAqIEB2YXIgQ29sb3JPYmoKICAgICAqLwogICAgcHVibGljICRjb2xvcjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkaGVpZ2h0OwoKICAgIC8qKgogICAgICogQHZhciByZWN0T2JqCiAgICAgKi8KICAgIHB1YmxpYyAkZXh0ZW50OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRpbWFnZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkbWFya2VyOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRtYXJrZXJuYW1lOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRtYXJrZXJzaXplOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRtYXhib3hzaXplOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRtaW5ib3hzaXplOwoKICAgIC8qKgogICAgICogQHZhciBDb2xvck9iagogICAgICovCiAgICBwdWJsaWMgJG91dGxpbmVjb2xvcjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkc3RhdHVzOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICR3aWR0aDsKCiAgICAvKioKICAgICAqIFNhdmVzIHRoZSBvYmplY3QgdG8gYSBzdHJpbmcuICBQcm92aWRlcyB0aGUgaW52ZXJzZSBvcHRpb24gZm9yCiAgICAgKiB1cGRhdGVGcm9tU3RyaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBjb252ZXJ0VG9TdHJpbmcoKSB7fQoKICAgIC8qKgogICAgICogRnJlZSB0aGUgb2JqZWN0IHByb3BlcnRpZXMgYW5kIGJyZWFrIHRoZSBpbnRlcm5hbCByZWZlcmVuY2VzLgogICAgICogTm90ZSB0aGF0IHlvdSBoYXZlIHRvIHVuc2V0IHRoZSBwaHAgdmFyaWFibGUgdG8gZnJlZSB0b3RhbGx5IHRoZQogICAgICogcmVzb3VyY2VzLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZnJlZSgpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgb2JqZWN0IHByb3BlcnR5IHRvIGEgbmV3IHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByb3BlcnR5X25hbWUKICAgICAqIEBwYXJhbSAgJG5ld192YWx1ZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldCgkcHJvcGVydHlfbmFtZSwgJG5ld192YWx1ZSkge30KCiAgICAvKioKICAgICAqIFVwZGF0ZSBhIHJlZmVyZW5jZU1hcCBvYmplY3QgZnJvbSBhIHN0cmluZyBzbmlwcGV0LgogICAgICogUmV0dXJucyBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc25pcHBldAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZUZyb21TdHJpbmcoJHNuaXBwZXQpIHt9Cn0KCmZpbmFsIGNsYXNzIHJlc3VsdE9iagp7CiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkY2xhc3NpbmRleDsKCiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkcmVzdWx0aW5kZXg7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHNoYXBlaW5kZXg7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHRpbGVpbmRleDsKCiAgICAvKioKICAgICAqIG9yIHVzaW5nIHRoZSBgbGF5ZXJPYmpgXydzIGdldFJlc3VsdCgpIG1ldGhvZC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRzaGFwZWluZGV4CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc2hhcGVpbmRleCkge30KfQoKLyoqCiAqIEluc3RhbmNlcyBvZiBzY2FsZWJhck9iaiBhcmUgYWx3YXlzIGVtYmVkZGVkIGluc2lkZSB0aGUgYG1hcE9iamBfLgogKi8KZmluYWwgY2xhc3Mgc2NhbGViYXJPYmoKewogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGFsaWduOwoKICAgIC8qKgogICAgICogQHZhciBjb2xvck9iagogICAgICovCiAgICBwdWJsaWMgJGJhY2tncm91bmRjb2xvcjsKCiAgICAvKioKICAgICAqIEB2YXIgY29sb3JPYmoKICAgICAqLwogICAgcHVibGljICRjb2xvcjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkaGVpZ2h0OwoKICAgIC8qKgogICAgICogQHZhciBjb2xvck9iagogICAgICovCiAgICBwdWJsaWMgJGltYWdlY29sb3I7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGludGVydmFsczsKCiAgICAvKioKICAgICAqIEB2YXIgbGFiZWxPYmoKICAgICAqLwogICAgcHVibGljICRsYWJlbDsKCiAgICAvKioKICAgICAqIEB2YXIgY29sb3JPYmoKICAgICAqLwogICAgcHVibGljICRvdXRsaW5lY29sb3I7CgogICAgLyoqCiAgICAgKiBmb3IgZW1iZWRkZWQgc2NhbGViYXJzLCBNU19VTCwgTVNfVUMsIC4uLgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkcG9zaXRpb247CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHBvc3RsYWJlbGNhY2hlOwoKICAgIC8qKgogICAgICogTVNfT04sIE1TX09GRiwgTVNfRU1CRUQKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHN0YXR1czsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkc3R5bGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHVuaXRzOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICR3aWR0aDsKCiAgICAvKioKICAgICAqIFNhdmVzIHRoZSBvYmplY3QgdG8gYSBzdHJpbmcuICBQcm92aWRlcyB0aGUgaW52ZXJzZSBvcHRpb24gZm9yCiAgICAgKiB1cGRhdGVGcm9tU3RyaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBjb252ZXJ0VG9TdHJpbmcoKSB7fQoKICAgIC8qKgogICAgICogRnJlZSB0aGUgb2JqZWN0IHByb3BlcnRpZXMgYW5kIGJyZWFrIHRoZSBpbnRlcm5hbCByZWZlcmVuY2VzLgogICAgICogTm90ZSB0aGF0IHlvdSBoYXZlIHRvIHVuc2V0IHRoZSBwaHAgdmFyaWFibGUgdG8gZnJlZSB0b3RhbGx5IHRoZQogICAgICogcmVzb3VyY2VzLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZnJlZSgpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgb2JqZWN0IHByb3BlcnR5IHRvIGEgbmV3IHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByb3BlcnR5X25hbWUKICAgICAqIEBwYXJhbSAgJG5ld192YWx1ZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldCgkcHJvcGVydHlfbmFtZSwgJG5ld192YWx1ZSkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGltYWdlY29sb3IgcHJvcGVydHkgKGJhY2xncm91bmQpIG9mIHRoZSBvYmplY3QuCiAgICAgKiBSZXR1cm5zIE1TX1NVQ0NFU1Mgb3IgTVNfRkFJTFVSRSBvbiBlcnJvci4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRyZWQKICAgICAqIEBwYXJhbSBpbnQgJGdyZWVuCiAgICAgKiBAcGFyYW0gaW50ICRibHVlCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VDb2xvcigkcmVkLCAkZ3JlZW4sICRibHVlKSB7fQoKICAgIC8qKgogICAgICogVXBkYXRlIGEgc2NhbGViYXIgZnJvbSBhIHN0cmluZyBzbmlwcGV0LiBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzbmlwcGV0CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gdXBkYXRlRnJvbVN0cmluZygkc25pcHBldCkge30KfQoKZmluYWwgY2xhc3Mgc2hhcGVmaWxlT2JqCnsKICAgIC8qKgogICAgICogcmVhZC1vbmx5CiAgICAgKgogICAgICogQHZhciByZWN0T2JqCiAgICAgKi8KICAgIHB1YmxpYyAkYm91bmRzOwoKICAgIC8qKgogICAgICogcmVhZC1vbmx5CiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRudW1zaGFwZXM7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJHNvdXJjZTsKCiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkdHlwZTsKCiAgICAvKioKICAgICAqIE9wZW5zIGEgc2hhcGVmaWxlIGFuZCByZXR1cm5zIGEgbmV3IG9iamVjdCB0byBkZWFsIHdpdGggaXQuIEZpbGVuYW1lCiAgICAgKiBzaG91bGQgYmUgcGFzc2VkIHdpdGggbm8gZXh0ZW5zaW9uLiAgVG8gY3JlYXRlIGEgbmV3IGZpbGUgKG9yCiAgICAgKiBvdmVyd3JpdGUgYW4gZXhpc3Rpbmcgb25lKSwgdHlwZSBzaG91bGQgYmUgb25lIG9mIE1TX1NIUF9QT0lOVCwKICAgICAqIE1TX1NIUF9BUkMsIE1TX1NIUF9QT0xZR09OIG9yIE1TX1NIUF9NVUxUSVBPSU5ULiBQYXNzIHR5cGUgYXMgLTEgdG8KICAgICAqIG9wZW4gYW4gZXhpc3RpbmcgZmlsZSBmb3IgcmVhZC1vbmx5IGFjY2VzcywgYW5kIHR5cGU9LTIgdG8gb3BlbiBhbgogICAgICogZXhpc3RpbmcgZmlsZSBmb3IgdXBkYXRlIChhcHBlbmQpLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAgICAgKiBAcGFyYW0gaW50ICR0eXBlCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZmlsZW5hbWUsICR0eXBlKSB7fQoKICAgIC8qKgogICAgICogT2xkIHN0eWxlIGNvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICAgICAqIEBwYXJhbSBpbnQgJHR5cGUKICAgICAqIEByZXR1cm4gc2hhcGVmaWxlT2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBtc19uZXdTaGFwZWZpbGVPYmooJGZpbGVuYW1lLCAkdHlwZSkge30KCiAgICAvKioKICAgICAqIEFwcGVuZHMgYSBwb2ludCB0byBhbiBvcGVuIHNoYXBlZmlsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gcG9pbnRPYmogJHBvaW50CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gYWRkUG9pbnQocG9pbnRPYmogJHBvaW50KSB7fQoKICAgIC8qKgogICAgICogQXBwZW5kcyBhIHNoYXBlIHRvIGFuIG9wZW4gc2hhcGVmaWxlLgogICAgICoKICAgICAqIEBwYXJhbSBzaGFwZU9iaiAkc2hhcGUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBhZGRTaGFwZShzaGFwZU9iaiAkc2hhcGUpIHt9CgogICAgLyoqCiAgICAgKiBGcmVlIHRoZSBvYmplY3QgcHJvcGVydGllcyBhbmQgYnJlYWsgdGhlIGludGVybmFsIHJlZmVyZW5jZXMuCiAgICAgKiBOb3RlIHRoYXQgeW91IGhhdmUgdG8gdW5zZXQgdGhlIHBocCB2YXJpYWJsZSB0byBmcmVlIHRvdGFsbHkgdGhlCiAgICAgKiByZXNvdXJjZXMuCiAgICAgKiAuLiBub3RlOjoKICAgICAqIFRoZSBzaGFwZSBmaWxlIGlzIGNsb3NlZCAoYW5kIGNoYW5nZXMgY29tbWl0dGVkKSB3aGVuCiAgICAgKiB0aGUgb2JqZWN0IGlzIGRlc3Ryb3llZC4gWW91IGNhbiBleHBsaWNpdGx5IGNsb3NlIGFuZCBzYXZlCiAgICAgKiB0aGUgY2hhbmdlcyBieSBjYWxsaW5nICRzaGFwZWZpbGUtPmZyZWUoKTsKICAgICAqIHVuc2V0KCRzaGFwZWZpbGUpLCB3aGljaCB3aWxsIGFsc28gZnJlZSB0aGUgcGhwIG9iamVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGZyZWUoKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgYSBzaGFwZSdzIGJvdW5kaW5nIGJveCBieSBpbmRleC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpCiAgICAgKiBAcmV0dXJuIHJlY3RPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldEV4dGVudCgkaSkge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHBvaW50IGJ5IGluZGV4LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGkKICAgICAqIEByZXR1cm4gc2hhcGVPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldFBvaW50KCRpKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgc2hhcGUgYnkgaW5kZXguCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaQogICAgICogQHJldHVybiBzaGFwZU9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0U2hhcGUoJGkpIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBzaGFwZSBieSBpbmRleC4KICAgICAqCiAgICAgKiBAcGFyYW0gbWFwT2JqICRtYXAKICAgICAqIEBwYXJhbSBpbnQgJGkKICAgICAqIEByZXR1cm4gc2hhcGVPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldFRyYW5zZm9ybWVkKG1hcE9iaiAkbWFwLCAkaSkge30KfQoKZmluYWwgY2xhc3Mgc2hhcGVPYmoKewogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIHJlY3RPYmoKICAgICAqLwogICAgcHVibGljICRib3VuZHM7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGNsYXNzaW5kZXg7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGluZGV4OwoKICAgIC8qKgogICAgICogcmVhZC1vbmx5CiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRudW1saW5lczsKCiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkbnVtdmFsdWVzOwoKICAgIC8qKgogICAgICogcmVhZC1vbmx5CiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICR0aWxlaW5kZXg7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJHRleHQ7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHR5cGU7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyAkdmFsdWVzOwoKICAgIC8qKgogICAgICogJ3R5cGUnIGlzIG9uZSBvZiBNU19TSEFQRV9QT0lOVCwgTVNfU0hBUEVfTElORSwgTVNfU0hBUEVfUE9MWUdPTiBvcgogICAgICogTVNfU0hBUEVfTlVMTAogICAgICogQ3JlYXRlcyBuZXcgc2hhcGUgb2JqZWN0IGZyb20gV0tUIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0eXBlCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdHlwZSkge30KCiAgICAvKioKICAgICAqIE9sZCBzdHlsZSBjb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHdrdAogICAgICogQHJldHVybiBTaGFwZU9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gbXNfc2hhcGVPYmpGcm9tV2t0KCR3a3QpIHt9CgogICAgLyoqCiAgICAgKiBBZGQgYSBsaW5lIChpLmUuIGEgcGFydCkgdG8gdGhlIHNoYXBlLgogICAgICoKICAgICAqIEBwYXJhbSBsaW5lT2JqICRsaW5lCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gYWRkKGxpbmVPYmogJGxpbmUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBib3VuZGFyeSBvZiB0aGUgc2hhcGUuCiAgICAgKiBPbmx5IGF2YWlsYWJsZSBpZiBwaHAvbWFwc2NyaXB0IGlzIGJ1aWx0IHdpdGggR0VPUyBsaWJyYXJ5LgogICAgICogc2hhcGVPYmogYnVmZmVyKHdpZHRoKQogICAgICogUmV0dXJucyBhIG5ldyBidWZmZXJlZCBzaGFwZU9iaiBiYXNlZCBvbiB0aGUgc3VwcGxpZWQgZGlzdGFuY2UgKGdpdmVuCiAgICAgKiBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGV4aXN0aW5nIHNoYXBlT2JqKS4KICAgICAqIE9ubHkgYXZhaWxhYmxlIGlmIHBocC9tYXBzY3JpcHQgaXMgYnVpbHQgd2l0aCBHRU9TIGxpYnJhcnkuCiAgICAgKgogICAgICogQHJldHVybiBzaGFwZU9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gYm91bmRhcnkoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHNoYXBlMiBwYXNzZWQgYXMgYXJndW1lbnQgaXMgZW50aXJlbHkgd2l0aGluIHRoZSBzaGFwZS4KICAgICAqIEVsc2UgcmV0dXJuIGZhbHNlLgogICAgICogT25seSBhdmFpbGFibGUgaWYgcGhwL21hcHNjcmlwdCBpcyBidWlsdCB3aXRoIEdFT1MKICAgICAqIGxpYnJhcnkuCiAgICAgKgogICAgICogQHBhcmFtIHNoYXBlT2JqICRzaGFwZTIKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBjb250YWluc1NoYXBlKHNoYXBlT2JqICRzaGFwZTIpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc2hhcGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29udmV4IGh1bGwgb2Ygc2hhcGUuCiAgICAgKiBPbmx5IGF2YWlsYWJsZSBpZiBwaHAvbWFwc2NyaXB0IGlzIGJ1aWx0IHdpdGggR0VPUwogICAgICogbGlicmFyeS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHNoYXBlT2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBjb252ZXhodWxsKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgTVNfVFJVRSBpZiB0aGUgcG9pbnQgaXMgaW5zaWRlIHRoZSBzaGFwZSwgTVNfRkFMU0Ugb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEBwYXJhbSBwb2ludE9iaiAkcG9pbnQKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gY29udGFpbnMocG9pbnRPYmogJHBvaW50KSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFwZSBwYXNzZWQgYXMgYXJndW1lbnQgY3Jvc3NlcyB0aGUgc2hhcGUuCiAgICAgKiBFbHNlIHJldHVybiBmYWxzZS4KICAgICAqIE9ubHkgYXZhaWxhYmxlIGlmIHBocC9tYXBzY3JpcHQgaXMgYnVpbHQgd2l0aCBHRU9TIGxpYnJhcnkuCiAgICAgKgogICAgICogQHBhcmFtIHNoYXBlT2JqICRzaGFwZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGNyb3NzZXMoc2hhcGVPYmogJHNoYXBlKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHNoYXBlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGRpZmZlcmVuY2Ugb2YgdGhlCiAgICAgKiBzaGFwZSBvYmplY3Qgd2l0aCB0aGUgb25lIHBhc3NlZCBhcyBwYXJhbWV0ZXIuCiAgICAgKiBPbmx5IGF2YWlsYWJsZSBpZiBwaHAvbWFwc2NyaXB0IGlzIGJ1aWx0IHdpdGggR0VPUyBsaWJyYXJ5LgogICAgICoKICAgICAqIEBwYXJhbSBzaGFwZU9iaiAkc2hhcGUKICAgICAqIEByZXR1cm4gc2hhcGVPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGRpZmZlcmVuY2Uoc2hhcGVPYmogJHNoYXBlKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFwZSBwYXNzZWQgYXMgYXJndW1lbnQgaXMgZGlzam9pbnQgdG8gdGhlCiAgICAgKiBzaGFwZS4gRWxzZSByZXR1cm4gZmFsc2UuCiAgICAgKiBPbmx5IGF2YWlsYWJsZSBpZiBwaHAvbWFwc2NyaXB0IGlzIGJ1aWx0IHdpdGggR0VPUyBsaWJyYXJ5LgogICAgICoKICAgICAqIEBwYXJhbSBzaGFwZU9iaiAkc2hhcGUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBkaXNqb2ludChzaGFwZU9iaiAkc2hhcGUpIHt9CgogICAgLyoqCiAgICAgKiBEcmF3cyB0aGUgaW5kaXZpZHVhbCBzaGFwZSB1c2luZyBsYXllci4KICAgICAqIFJldHVybnMgTVNfU1VDQ0VTUy9NU19GQUlMVVJFLgogICAgICoKICAgICAqIEBwYXJhbSBtYXBPYmogJG1hcAogICAgICogQHBhcmFtIGxheWVyT2JqICRsYXllcgogICAgICogQHBhcmFtIGltYWdlT2JqICRpbWcKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBkcmF3KG1hcE9iaiAkbWFwLCBsYXllck9iaiAkbGF5ZXIsIGltYWdlT2JqICRpbWcpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYXBlIHBhc3NlZCBhcyBhcmd1bWVudCBpcyBlcXVhbCB0byB0aGUKICAgICAqIHNoYXBlIChnZW9tZXRyeSBvbmx5KS4gRWxzZSByZXR1cm4gZmFsc2UuCiAgICAgKiBPbmx5IGF2YWlsYWJsZSBpZiBwaHAvbWFwc2NyaXB0IGlzIGJ1aWx0IHdpdGggR0VPUyBsaWJyYXJ5LgogICAgICoKICAgICAqIEBwYXJhbSBzaGFwZU9iaiAkc2hhcGUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBlcXVhbHMoc2hhcGVPYmogJHNoYXBlKSB7fQoKICAgIC8qKgogICAgICogRnJlZSB0aGUgb2JqZWN0IHByb3BlcnRpZXMgYW5kIGJyZWFrIHRoZSBpbnRlcm5hbCByZWZlcmVuY2VzLgogICAgICogTm90ZSB0aGF0IHlvdSBoYXZlIHRvIHVuc2V0IHRoZSBwaHAgdmFyaWFibGUgdG8gZnJlZSB0b3RhbGx5IHRoZSByZXNvdXJjZXMuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBmcmVlKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGFyZWEgb2YgdGhlIHNoYXBlIChpZiBhcHBsaWNhYmxlKS4KICAgICAqIE9ubHkgYXZhaWxhYmxlIGlmIHBocC9tYXBzY3JpcHQgaXMgYnVpbHQgd2l0aCBHRU9TIGxpYnJhcnkuCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0QXJlYSgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgcG9pbnQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY2VudHJvaWQgb2YgdGhlIHNoYXBlLgogICAgICogT25seSBhdmFpbGFibGUgaWYgcGhwL21hcHNjcmlwdCBpcyBidWlsdCB3aXRoIEdFT1MgbGlicmFyeS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHBvaW50T2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRDZW50cm9pZCgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgcG9pbnQgb2JqZWN0IHdpdGggY29vcmRpbmF0ZXMgc3VpdGFibGUgZm9yIGxhYmVsbGluZwogICAgICogdGhlIHNoYXBlLgogICAgICoKICAgICAqIEByZXR1cm4gcG9pbnRPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldExhYmVsUG9pbnQoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbGVuZ3RoIChvciBwZXJpbWV0ZXIpIG9mIHRoZSBzaGFwZS4KICAgICAqIE9ubHkgYXZhaWxhYmxlIGlmIHBocC9tYXBzY3JpcHQgaXMgYnVpbHQgd2l0aCBHRU9TIGxpYnJhcnkuCiAgICAgKiBwb2ludE9iaiAgZ2V0TWVhc3VyZVVzaW5nUG9pbnQocG9pbnRPYmogcG9pbnQpCiAgICAgKiBBcHBseSBvbmx5IG9uIE1lYXN1cmVkIHNoYXBlIGZpbGVzLiBHaXZlbiBhbiBYWSBMb2NhdGlvbiwgZmluZCB0aGUKICAgICAqIG5lYXJlc3QgcG9pbnQgb24gdGhlIHNoYXBlIG9iamVjdC4gUmV0dXJuIGEgcG9pbnQgb2JqZWN0CiAgICAgKiBvZiB0aGlzIHBvaW50IHdpdGggdGhlIG0gdmFsdWUgc2V0LgogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldExlbmd0aCgpIHt9CgogICAgLyoqCiAgICAgKiBBcHBseSBvbmx5IG9uIE1lYXN1cmVkIHNoYXBlIGZpbGVzLiBHaXZlbiBhIG1lYXN1cmUgbSwgcmV0dW4gdGhlCiAgICAgKiBjb3JyZXNwb25kaW5nIFhZIGxvY2F0aW9uIG9uIHRoZSBzaGFwZW9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJG0KICAgICAqIEByZXR1cm4gcG9pbnRPYmoKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldFBvaW50VXNpbmdNZWFzdXJlKCRtKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gZmllbGQgbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbGF5ZXJPYmogJGxheWVyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlZG5hbWUKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZShsYXllck9iaiAkbGF5ZXIsICRmaWxlZG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc2hhcGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBzaGFwZQogICAgICogb2JqZWN0IHdpdGggdGhlIG9uZSBwYXNzZWQgYXMgcGFyYW1ldGVyLgogICAgICogT25seSBhdmFpbGFibGUgaWYgcGhwL21hcHNjcmlwdCBpcyBidWlsdCB3aXRoIEdFT1MgbGlicmFyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc2hhcGVPYmogJHNoYXBlCiAgICAgKiBAcmV0dXJuIHNoYXBlT2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBpbnRlcnNlY3Rpb24oc2hhcGVPYmogJHNoYXBlKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBNU19UUlVFIGlmIHRoZSB0d28gc2hhcGVzIGludGVyc2VjdCwgTVNfRkFMU0Ugb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEBwYXJhbSBzaGFwZU9iaiAkc2hhcGUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gaW50ZXJzZWN0cyhzaGFwZU9iaiAkc2hhcGUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIGxpbmUgbnVtYmVyIGkuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaQogICAgICogQHJldHVybiBsaW5lT2JqCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBsaW5lKCRpKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFwZSBwYXNzZWQgYXMgYXJndW1lbnQgb3ZlcmxhcHMgdGhlIHNoYXBlLgogICAgICogRWxzZSByZXR1cm5zIGZhbHNlLgogICAgICogT25seSBhdmFpbGFibGUgaWYgcGhwL21hcHNjcmlwdCBpcyBidWlsdCB3aXRoIEdFT1MgbGlicmFyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc2hhcGVPYmogJHNoYXBlCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gb3ZlcmxhcHMoc2hhcGVPYmogJHNoYXBlKSB7fQoKICAgIC8qKgogICAgICogUHJvamVjdCB0aGUgc2hhcGUgZnJvbSAiaW4iIHByb2plY3Rpb24gKDFzdCBhcmd1bWVudCkgdG8gIm91dCIKICAgICAqIHByb2plY3Rpb24gKDJuZCBhcmd1bWVudCkuICBSZXR1cm5zIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gcHJvamVjdGlvbk9iaiAkaW4KICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uT2JqICRvdXQKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBwcm9qZWN0KHByb2plY3Rpb25PYmogJGluLCBwcm9qZWN0aW9uT2JqICRvdXQpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgb2JqZWN0IHByb3BlcnR5IHRvIGEgbmV3IHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByb3BlcnR5X25hbWUKICAgICAqIEBwYXJhbSAgJG5ld192YWx1ZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldCgkcHJvcGVydHlfbmFtZSwgJG5ld192YWx1ZSkge30KCiAgICAvKioKICAgICAqIFVwZGF0ZXMgdGhlIGJvdW5kcyBwcm9wZXJ0eSBvZiB0aGUgc2hhcGUuCiAgICAgKiBNdXN0IGJlIGNhbGxlZCB0byBjYWxjdWxhdGUgbmV3IGJvdW5kaW5nIGJveCBhZnRlciBuZXcgcGFydHMgaGF2ZSBiZWVuCiAgICAgKiBhZGRlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0Qm91bmRzKCkge30KCiAgICAvKioKICAgICAqIEdpdmVuIGEgdG9sZXJhbmNlLCByZXR1cm5zIGEgc2ltcGxpZmllZCBzaGFwZSBvYmplY3Qgb3IgTlVMTCBvbgogICAgICogZXJyb3IuICBPbmx5IGF2YWlsYWJsZSBpZiBwaHAvbWFwc2NyaXB0IGlzIGJ1aWx0IHdpdGggR0VPUyBsaWJyYXJ5CiAgICAgKiAoPj0zLjApLgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkdG9sZXJhbmNlCiAgICAgKiBAcmV0dXJuIHNoYXBlT2JqfG51bGwKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNpbXBsaWZ5KCR0b2xlcmFuY2UpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjb21wdXRlZCBzeW1tZXRyaWMgZGlmZmVyZW5jZSBvZiB0aGUgc3VwcGxpZWQgYW5kCiAgICAgKiBleGlzdGluZyBzaGFwZS4KICAgICAqIE9ubHkgYXZhaWxhYmxlIGlmIHBocC9tYXBzY3JpcHQgaXMgYnVpbHQgd2l0aCBHRU9TIGxpYnJhcnkuCiAgICAgKgogICAgICogQHBhcmFtIHNoYXBlT2JqICRzaGFwZQogICAgICogQHJldHVybiBzaGFwZU9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc3ltZGlmZmVyZW5jZShzaGFwZU9iaiAkc2hhcGUpIHt9CgogICAgLyoqCiAgICAgKiBHaXZlbiBhIHRvbGVyYW5jZSwgcmV0dXJucyBhIHNpbXBsaWZpZWQgc2hhcGUgb2JqZWN0IG9yIE5VTEwgb24KICAgICAqIGVycm9yLiAgT25seSBhdmFpbGFibGUgaWYgcGhwL21hcHNjcmlwdCBpcyBidWlsdCB3aXRoIEdFT1MgbGlicmFyeQogICAgICogKD49My4wKS4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHRvbGVyYW5jZQogICAgICogQHJldHVybiBzaGFwZU9ianxudWxsCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiB0b3BvbG9neVByZXNlcnZpbmdTaW1wbGlmeSgkdG9sZXJhbmNlKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFwZSBwYXNzZWQgYXMgYXJndW1lbnQgdG91Y2hlcyB0aGUgc2hhcGUuCiAgICAgKiBFbHNlIHJldHVybiBmYWxzZS4KICAgICAqIE9ubHkgYXZhaWxhYmxlIGlmIHBocC9tYXBzY3JpcHQgaXMgYnVpbHQgd2l0aCBHRU9TIGxpYnJhcnkuCiAgICAgKgogICAgICogQHBhcmFtIHNoYXBlT2JqICRzaGFwZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHRvdWNoZXMoc2hhcGVPYmogJHNoYXBlKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBXS1QgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNoYXBlJ3MgZ2VvbWV0cnkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHRvV2t0KCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBzaGFwZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB1bmlvbiBvZiB0aGUgc2hhcGUgb2JqZWN0CiAgICAgKiB3aXRoIHRoZSBvbmUgcGFzc2VkIGFzIHBhcmFtZXRlci4KICAgICAqIE9ubHkgYXZhaWxhYmxlIGlmIHBocC9tYXBzY3JpcHQgaXMgYnVpbHQgd2l0aCBHRU9TCiAgICAgKiBsaWJyYXJ5CiAgICAgKgogICAgICogQHBhcmFtIHNoYXBlT2JqICRzaGFwZQogICAgICogQHJldHVybiBzaGFwZU9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gdW5pb24oc2hhcGVPYmogJHNoYXBlKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFwZSBpcyBlbnRpcmVseSB3aXRoaW4gdGhlIHNoYXBlMiBwYXNzZWQgYXMKICAgICAqIGFyZ3VtZW50LgogICAgICogRWxzZSByZXR1cm5zIGZhbHNlLgogICAgICogT25seSBhdmFpbGFibGUgaWYgcGhwL21hcHNjcmlwdCBpcyBidWlsdCB3aXRoIEdFT1MgbGlicmFyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc2hhcGVPYmogJHNoYXBlMgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHdpdGhpbihzaGFwZU9iaiAkc2hhcGUyKSB7fQp9CgovKioKICogSW5zdGFuY2VzIG9mIHN0eWxlT2JqIGFyZSBhbHdheXMgZW1iZWRkZWQgaW5zaWRlIGEgYGNsYXNzT2JqYF8gb3IgYGxhYmVsT2JqYF8uCiAqLwpmaW5hbCBjbGFzcyBzdHlsZU9iagp7CiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgcHVibGljICRhbmdsZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkYW50aWFsaWFzOwoKICAgIC8qKgogICAgICogQHZhciBjb2xvck9iagogICAgICovCiAgICBwdWJsaWMgJGJhY2tncm91bmRjb2xvcjsKCiAgICAvKioKICAgICAqIEB2YXIgY29sb3JPYmoKICAgICAqLwogICAgcHVibGljICRjb2xvcjsKCiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgcHVibGljICRtYXhzaXplOwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJG1heHZhbHVlOwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJG1heHdpZHRoOwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJG1pbnNpemU7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkbWludmFsdWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkbWlud2lkdGg7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG9mZnNldHg7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG9mZnNldHk7CgogICAgLyoqCiAgICAgKiBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlIEFHRyBkcml2ZXIKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG9wYWNpdHk7CgogICAgLyoqCiAgICAgKiBAdmFyIGNvbG9yT2JqCiAgICAgKi8KICAgIHB1YmxpYyAkb3V0bGluZWNvbG9yOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRyYW5nZWl0ZW07CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkc2l6ZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkc3ltYm9sOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRzeW1ib2xuYW1lOwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJHdpZHRoOwoKICAgIC8qKgogICAgICogVGhlIHNlY29uZCBhcmd1bWVudCAnc3R5bGUnIGlzIG9wdGlvbmFsLiBJZiBnaXZlbiwgdGhlIG5ldyBzdHlsZQogICAgICogY3JlYXRlZCB3aWxsIGJlIGEgY29weSBvZiB0aGUgc3R5bGUgcGFzc2VkIGFzIGFyZ3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBsYWJlbE9iaiAkbGFiZWwKICAgICAqIEBwYXJhbSBzdHlsZU9iaiAkc3R5bGUKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGxhYmVsT2JqICRsYWJlbCwgc3R5bGVPYmogJHN0eWxlKSB7fQoKICAgIC8qKgogICAgICogT2xkIHN0eWxlIGNvbnN0cnVjdG9yCiAgICAgKgogICAgICogQHBhcmFtIGNsYXNzT2JqICRjbGFzcwogICAgICogQHBhcmFtIHN0eWxlT2JqICRzdHlsZQogICAgICogQHJldHVybiBzdHlsZU9iagogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gbXNfbmV3U3R5bGVPYmooY2xhc3NPYmogJGNsYXNzLCBzdHlsZU9iaiAkc3R5bGUpIHt9CgogICAgLyoqCiAgICAgKiBTYXZlcyB0aGUgb2JqZWN0IHRvIGEgc3RyaW5nLiAgUHJvdmlkZXMgdGhlIGludmVyc2Ugb3B0aW9uIGZvcgogICAgICogdXBkYXRlRnJvbVN0cmluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gY29udmVydFRvU3RyaW5nKCkge30KCiAgICAvKioKICAgICAqIEZyZWUgdGhlIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCBicmVhayB0aGUgaW50ZXJuYWwgcmVmZXJlbmNlcy4KICAgICAqIE5vdGUgdGhhdCB5b3UgaGF2ZSB0byB1bnNldCB0aGUgcGhwIHZhcmlhYmxlIHRvIGZyZWUgdG90YWxseSB0aGUKICAgICAqIHJlc291cmNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGZyZWUoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBhdHRyaWJ1dGUgYmluZGluZyBmb3IgYSBzcGVjZmlsZWQgc3R5bGUgcHJvcGVydHkuIFJldHVybnMKICAgICAqIE5VTEwgaWYgdGhlcmUgaXMgbm8gYmluZGluZyBmb3IgdGhpcyBwcm9wZXJ0eS4KICAgICAqIC4uIGNvZGUtYmxvY2s6OiBwaHAKICAgICAqICRvU3R5bGUtPnNldGJpbmRpbmcoTVNfU1RZTEVfQklORElOR19DT0xPUiwgIkZJRUxEX05BTUVfQ09MT1IiKTsKICAgICAqIGVjaG8gJG9TdHlsZS0+Z2V0YmluZGluZyhNU19TVFlMRV9CSU5ESU5HX0NPTE9SKTsgLy8gRklFTERfTkFNRV9DT0xPUgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkc3R5bGViaW5kaW5nCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0QmluZGluZygkc3R5bGViaW5kaW5nKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldEdlb21UcmFuc2Zvcm0oKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIHRoZSBhdHRyaWJ1dGUgYmluZGluZyBmb3IgYSBzcGVjZmlsZWQgc3R5bGUgcHJvcGVydHkuCiAgICAgKiBBZGRlZCBpbiBNYXBTZXJ2ZXIgNS4wLgogICAgICogLi4gY29kZS1ibG9jazo6IHBocAogICAgICogJG9TdHlsZS0+cmVtb3ZlYmluZGluZyhNU19TVFlMRV9CSU5ESU5HX0NPTE9SKTsKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0eWxlYmluZGluZwogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHJlbW92ZUJpbmRpbmcoJHN0eWxlYmluZGluZykge30KCiAgICAvKioKICAgICAqIFNldCBvYmplY3QgcHJvcGVydHkgdG8gYSBuZXcgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJvcGVydHlfbmFtZQogICAgICogQHBhcmFtICAkbmV3X3ZhbHVlCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0KCRwcm9wZXJ0eV9uYW1lLCAkbmV3X3ZhbHVlKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBhdHRyaWJ1dGUgYmluZGluZyBmb3IgYSBzcGVjZmlsZWQgc3R5bGUgcHJvcGVydHkuCiAgICAgKiBBZGRlZCBpbiBNYXBTZXJ2ZXIgNS4wLgogICAgICogLi4gY29kZS1ibG9jazo6IHBocAogICAgICogJG9TdHlsZS0+c2V0YmluZGluZyhNU19TVFlMRV9CSU5ESU5HX0NPTE9SLCAiRklFTERfTkFNRV9DT0xPUiIpOwogICAgICogVGhpcyB3b3VsZCBiaW5kIHRoZSBjb2xvciBwYXJhbWV0ZXIgd2l0aCB0aGUgZGF0YSAoaWUgd2lsbCBleHRyYWN0CiAgICAgKiB0aGUgdmFsdWUgb2YgdGhlIGNvbG9yIGZyb20gdGhlIGZpZWxkIGNhbGxlZCAiRklFTERfTkFNRV9DT0xPUiIKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0eWxlYmluZGluZwogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRCaW5kaW5nKCRzdHlsZWJpbmRpbmcsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0R2VvbVRyYW5zZm9ybSgkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBVcGRhdGUgYSBzdHlsZSBmcm9tIGEgc3RyaW5nIHNuaXBwZXQuIFJldHVybnMgTVNfU1VDQ0VTUy9NU19GQUlMVVJFLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNuaXBwZXQKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiB1cGRhdGVGcm9tU3RyaW5nKCRzbmlwcGV0KSB7fQp9CgpmaW5hbCBjbGFzcyBzeW1ib2xPYmoKewogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGFudGlhbGlhczsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkY2hhcmFjdGVyOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICRmaWxsZWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGZvbnQ7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGltYWdlcGF0aDsKCiAgICAvKioKICAgICAqIElmIHNldCB0byBUUlVFLCB0aGUgc3ltYm9sIHdpbGwgYmUgc2F2ZWQKICAgICAqIGluc2lkZSB0aGUgbWFwZmlsZS4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJGlubWFwZmlsZTsKCiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkcGF0dGVybmxlbmd0aDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkcG9zaXRpb247CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJG5hbWU7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJG51bXBvaW50czsKCiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgcHVibGljICRzaXpleDsKCiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgcHVibGljICRzaXpleTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkdHJhbnNwYXJlbnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHRyYW5zcGFyZW50Y29sb3I7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IHN5bWJvbCB3aXRoIGRlZmF1bHQgdmFsdWVzIGluIHRoZSBzeW1ib2xpc3QuCiAgICAgKiAuLiBub3RlOjoKICAgICAqIFVzaW5nIHRoZSBuZXcgY29uc3RydWN0b3IsIHRoZSBzeW1ib2wgaXMgYXV0b21hdGljYWxseSByZXR1cm5lZC4gVGhlCiAgICAgKiBJZiBhIHN5bWJvbCB3aXRoIHRoZSBzYW1lIG5hbWUgZXhpc3RzLCBpdCAob3IgaXRzIGlkKSB3aWxsIGJlIHJldHVybmVkLgogICAgICogJG5JZCA9IG1zX25ld1N5bWJvbE9iaigkbWFwLCAic3ltYm9sLXRlc3QiKTsKICAgICAqICRvU3ltYm9sID0gJG1hcC0+Z2V0U3ltYm9sT2JqZWN0QnlJZCgkbklkKTsKICAgICAqCiAgICAgKiBAcGFyYW0gbWFwT2JqICRtYXAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN5bWJvbG5hbWUKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KG1hcE9iaiAkbWFwLCAkc3ltYm9sbmFtZSkge30KCiAgICAvKioKICAgICAqIE9sZCBzdHlsZSBjb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBtYXBPYmogJG1hcAogICAgICogQHBhcmFtIHN0cmluZyAkc3ltYm9sbmFtZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIG1zX25ld1N5bWJvbE9iaihtYXBPYmogJG1hcCwgJHN5bWJvbG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBGcmVlIHRoZSBvYmplY3QgcHJvcGVydGllcyBhbmQgYnJlYWsgdGhlIGludGVybmFsIHJlZmVyZW5jZXMuCiAgICAgKiBOb3RlIHRoYXQgeW91IGhhdmUgdG8gdW5zZXQgdGhlIHBocCB2YXJpYWJsZSB0byBmcmVlIHRvdGFsbHkgdGhlCiAgICAgKiByZXNvdXJjZXMuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBmcmVlKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgcGF0dGVybi4gSWYgdGhlcmUgaXMgbm8gcGF0dGVybiwgaXQKICAgICAqIHJldHVybnMgYW4gZW1wdHkgYXJyYXkuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF0dGVybkFycmF5KCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgcG9pbnRzIG9mIHRoZSBzeW1ib2wuIFJlZmVyIHRvCiAgICAgKiBzZXRwb2ludHMgdG8gc2VlIGhvdyB0aGUgYXJyYXkgc2hvdWxkIGJlIGludGVycHJldGVkLiBJZiB0aGVyZSBhcmUgbm8KICAgICAqIHBvaW50cywgaXQgcmV0dXJucyBhbiBlbXB0eSBhcnJheS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRQb2ludHNBcnJheSgpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgb2JqZWN0IHByb3BlcnR5IHRvIGEgbmV3IHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByb3BlcnR5X25hbWUKICAgICAqIEBwYXJhbSAgJG5ld192YWx1ZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldCgkcHJvcGVydHlfbmFtZSwgJG5ld192YWx1ZSkge30KCiAgICAvKioKICAgICAqIExvYWRzIGEgcGl4bWFwIHN5bWJvbCBzcGVjaWZpZWQgYnkgdGhlIGZpbGVuYW1lLgogICAgICogVGhlIGZpbGUgc2hvdWxkIGJlIG9mIGVpdGhlciAgR2lmIG9yIFBuZyBmb3JtYXQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRJbWFnZVBhdGgoJGZpbGVuYW1lKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBwYXR0ZXJuIG9mIHRoZSBzeW1ib2wgKHVzZWQgZm9yIGRhc2ggcGF0dGVybnMpLgogICAgICogUmV0dXJucyBNU19TVUNDRVNTL01TX0ZBSUxVUkUuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRpbnQKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXR0ZXJuKGFycmF5ICRpbnQpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHBvaW50cyBvZiB0aGUgc3ltYm9sLiBOb3RlIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgaXMgYW4KICAgICAqIGFycmF5IGNvbnRhaW5pbmcgdGhlIHggYW5kIHkgdmFsdWVzIG9mIHRoZSBwb2ludHMuIFJldHVybnMKICAgICAqIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqIEV4YW1wbGU6CiAgICAgKiAuLiBjb2RlLWJsb2NrOjogcGhwCiAgICAgKiAkYXJyYXlbMF0gPSAxICMgeCB2YWx1ZSBvZiB0aGUgZmlyc3QgcG9pbnQKICAgICAqICRhcnJheVsxXSA9IDAgIyB5IHZhbHVlcyBvZiB0aGUgZmlyc3QgcG9pbnQKICAgICAqICRhcnJheVsyXSA9IDEgIyB4IHZhbHVlIG9mIHRoZSAybmQgcG9pbnQKICAgICAqIC4uLi4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGRvdWJsZQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldFBvaW50cyhhcnJheSAkZG91YmxlKSB7fQp9CgovKioKICogSW5zdGFuY2VzIG9mIHdlYk9iaiBhcmUgYWx3YXlzIGFyZSBhbHdheXMgZW1iZWRkZWQgaW5zaWRlIHRoZSBgbWFwT2JqYF8uCiAqLwpmaW5hbCBjbGFzcyB3ZWJPYmoKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGJyb3dzZWZvcm1hdDsKCiAgICAvKioKICAgICAqIHJlYWQtb25seQogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkZW1wdHk7CgogICAgLyoqCiAgICAgKiByZWFkLW9ubHkKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGVycm9yOwoKICAgIC8qKgogICAgICogcmVhZC1vbmx5CiAgICAgKgogICAgICogQHZhciByZWN0T2JqCiAgICAgKi8KICAgIHB1YmxpYyAkZXh0ZW50OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRmb290ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGhlYWRlcjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkaW1hZ2VwYXRoOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRpbWFnZXVybDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkbGVnZW5kZm9ybWF0OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRsb2c7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0CiAgICAgKi8KICAgIHB1YmxpYyAkbWF4c2NhbGVkZW5vbTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkbWF4dGVtcGxhdGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGhhc2hUYWJsZU9iagogICAgICovCiAgICBwdWJsaWMgJG1ldGFkYXRhOwoKICAgIC8qKgogICAgICogQHZhciBmbG9hdAogICAgICovCiAgICBwdWJsaWMgJG1pbnNjYWxlZGVub207CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJG1pbnRlbXBsYXRlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRxdWVyeWZvcm1hdDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkdGVtcGxhdGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJHRlbXBwYXRoOwoKICAgIC8qKgogICAgICogU2F2ZXMgdGhlIG9iamVjdCB0byBhIHN0cmluZy4gIFByb3ZpZGVzIHRoZSBpbnZlcnNlIG9wdGlvbiBmb3IKICAgICAqIHVwZGF0ZUZyb21TdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZygpIHt9CgogICAgLyoqCiAgICAgKiBGcmVlIHRoZSBvYmplY3QgcHJvcGVydGllcyBhbmQgYnJlYWsgdGhlIGludGVybmFsIHJlZmVyZW5jZXMuCiAgICAgKiBOb3RlIHRoYXQgeW91IGhhdmUgdG8gdW5zZXQgdGhlIHBocCB2YXJpYWJsZSB0byBmcmVlIHRvdGFsbHkgdGhlCiAgICAgKiByZXNvdXJjZXMuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBmcmVlKCkge30KCiAgICAvKioKICAgICAqIFNldCBvYmplY3QgcHJvcGVydHkgdG8gYSBuZXcgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJvcGVydHlfbmFtZQogICAgICogQHBhcmFtICAkbmV3X3ZhbHVlCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0KCRwcm9wZXJ0eV9uYW1lLCAkbmV3X3ZhbHVlKSB7fQoKICAgIC8qKgogICAgICogVXBkYXRlIGEgd2ViIG9iamVjdCBmcm9tIGEgc3RyaW5nIHNuaXBwZXQuIFJldHVybnMKICAgICAqIE1TX1NVQ0NFU1MvTVNfRkFJTFVSRS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzbmlwcGV0CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gdXBkYXRlRnJvbVN0cmluZygkc25pcHBldCkge30KfQo8P3BocAoKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxBcnJheVNoYXBlOwoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjUuNSwgUEVDTCBaZW5kT3BjYWNoZSAmZ3Q7PSA3LjAuMiApPGJyLz4KICogQ29tcGlsZXMgYW5kIGNhY2hlcyBhIFBIUCBzY3JpcHQgd2l0aG91dCBleGVjdXRpbmcgaXQKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BjYWNoZS1jb21waWxlLWZpbGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBwYXRoIHRvIHRoZSBQSFAgc2NyaXB0IHRvIGJlIGNvbXBpbGVkLgogKiBAcmV0dXJuIGJvb2wKICogUmV0dXJucyA8Yj5UUlVFPC9iPiBpZiB0aGUgb3Bjb2RlIGNhY2hlIGZvciA8ZW0+c2NyaXB0PC9lbT4gd2FzCiAqIGludmFsaWRhdGVkIG9yIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIGludmFsaWRhdGUsIG9yIDxiPkZBTFNFPC9iPiBpZiB0aGUgb3Bjb2RlCiAqIGNhY2hlIGlzIGRpc2FibGVkLgogKiBAc2luY2UgNS41CiAqLwpmdW5jdGlvbiBvcGNhY2hlX2NvbXBpbGVfZmlsZShzdHJpbmcgJGZpbGVuYW1lKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjUuMCwgUEVDTCBaZW5kT3BjYWNoZSAmZ3Q7PSA3LjAuMCApPGJyLz4KICogSW52YWxpZGF0ZXMgYSBjYWNoZWQgc2NyaXB0CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wY2FjaGUtaW52YWxpZGF0ZS5waHAKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+VGhlIHBhdGggdG8gdGhlIHNjcmlwdCBiZWluZyBpbnZhbGlkYXRlZC48L3A+CiAqIEBwYXJhbSBib29sICRmb3JjZSBbb3B0aW9uYWxdIDxwPiBJZiBzZXQgdG8gPGI+VFJVRTwvYj4sIHRoZSBzY3JpcHQgd2lsbCBiZSBpbnZhbGlkYXRlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaW52YWxpZGF0aW9uIGlzIG5lY2Vzc2FyeS48L3A+CiAqIEByZXR1cm4gYm9vbAogKiBSZXR1cm5zIDxiPlRSVUU8L2I+IGlmIHRoZSBvcGNvZGUgY2FjaGUgZm9yIDxlbT5zY3JpcHQ8L2VtPiB3YXMKICogaW52YWxpZGF0ZWQgb3IgaWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gaW52YWxpZGF0ZSwgb3IgPGI+RkFMU0U8L2I+IGlmIHRoZSBvcGNvZGUKICogY2FjaGUgaXMgZGlzYWJsZWQuCiAqIEBzaW5jZSA1LjUKICovCmZ1bmN0aW9uIG9wY2FjaGVfaW52YWxpZGF0ZShzdHJpbmcgJGZpbGVuYW1lLCBib29sICRmb3JjZSA9IGZhbHNlKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjUuMCwgUEVDTCBaZW5kT3BjYWNoZSAmZ3Q7PSA3LjAuMCApPGJyLz4KICogUmVzZXRzIHRoZSBjb250ZW50cyBvZiB0aGUgb3Bjb2RlIGNhY2hlCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wY2FjaGUtcmVzZXQucGhwCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IGlmIHRoZSBvcGNvZGUgY2FjaGUgd2FzIHJlc2V0LCBvciA8Yj5GQUxTRTwvYj4gaWYgdGhlIG9wY29kZSBjYWNoZSBpcyBkaXNhYmxlZC4KICogQHNpbmNlIDUuNQogKi8KZnVuY3Rpb24gb3BjYWNoZV9yZXNldCgpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuNS41LCBQRUNMIFplbmRPcGNhY2hlICZndDs9IDcuMC4yICk8YnIvPgogKiBHZXQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYWNoZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wY2FjaGUtZ2V0LXN0YXR1cy5waHAKICogQHBhcmFtIGJvb2wgJGluY2x1ZGVfc2NyaXB0cyA8cD5JbmNsdWRlIHNjcmlwdCBzcGVjaWZpYyBzdGF0ZSBpbmZvcm1hdGlvbjwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSA8cD5SZXR1cm5zIGFuIGFycmF5IG9mIGluZm9ybWF0aW9uLCBvcHRpb25hbGx5IGNvbnRhaW5pbmcgc2NyaXB0IHNwZWNpZmljIHN0YXRlIGluZm9ybWF0aW9uPC9wPgogKiBAc2luY2UgNS41CiAqLwojW0FycmF5U2hhcGUoWwogICAgJ29wY2FjaGVfZW5hYmxlZCcgPT4gJ2Jvb2wnLAogICAgJ2ZpbGVfY2FjaGUnID0+ICdzdHJpbmcnLAogICAgJ2ZpbGVfY2FjaGVfb25seScgPT4gJ2Jvb2wnLAogICAgJ2NhY2hlX2Z1bGwnID0+ICdib29sJywKICAgICdyZXN0YXJ0X3BlbmRpbmcnID0+ICdib29sJywKICAgICdyZXN0YXJ0X2luX3Byb2dyZXNzJyA9PiAnYm9vbCcsCiAgICAnbWVtb3J5X3VzYWdlJyA9PiAnYXJyYXknLAogICAgJ2ludGVybmVkX3N0cmluZ3NfdXNhZ2UnID0+ICdhcnJheScsCiAgICAnb3BjYWNoZV9zdGF0aXN0aWNzJyA9PiAnYXJyYXknLAogICAgJ3ByZWxvYWRfc3RhdGlzdGljcycgPT4gJ2FycmF5JywKICAgICdzY3JpcHRzJyA9PiAnYXJyYXknLAogICAgJ2ppdCcgPT4gJ2FycmF5JywKXSldCmZ1bmN0aW9uIG9wY2FjaGVfZ2V0X3N0YXR1cyhib29sICRpbmNsdWRlX3NjcmlwdHMgPSB0cnVlKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS41LjUsIFBFQ0wgWmVuZE9wY2FjaGUgJmd0Oz0gNy4wLjIgKTxici8+CiAqIEdldCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYWNoZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9wY2FjaGUtZ2V0LWNvbmZpZ3VyYXRpb24ucGhwCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgPHA+UmV0dXJucyBhbiBhcnJheSBvZiBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIGluaSwgYmxhY2tsaXN0IGFuZCB2ZXJzaW9uPC9wPgogKiBAc2luY2UgNS41CiAqLwojW0FycmF5U2hhcGUoWyJkaXJlY3RpdmVzIiA9PiAiYXJyYXkiLCAidmVyc2lvbiIgPT4gInN0cmluZ1tdIiwgImJsYWNrbGlzdCIgPT4gImFycmF5Il0pXQpmdW5jdGlvbiBvcGNhY2hlX2dldF9jb25maWd1cmF0aW9uKCk6IGFycmF5fGZhbHNlIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuNiwgUEVDTCBaZW5kT3BjYWNoZSAmZ3Q7PSA3LjAuNCApPGJyLz4KICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgYSBQSFAgc2NyaXB0IGhhcyBiZWVuIGNhY2hlZCBpbiBPUENhY2hlLgogKiBUaGlzIGNhbiBiZSB1c2VkIHRvIG1vcmUgZWFzaWx5IGRldGVjdCB0aGUgIndhcm1pbmciIG9mIHRoZSBjYWNoZSBmb3IgYSBwYXJ0aWN1bGFyIHNjcmlwdC4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub3BjYWNoZS1pcy1zY3JpcHQtY2FjaGVkLnBocAogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgcGF0aCB0byB0aGUgUEhQIHNjcmlwdCB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIGlmIGZpbGUgaXMgY2FjaGVkIGluIE9QQ2FjaGUsIEZBTFNFIG90aGVyd2lzZS4KICogQHNpbmNlIDUuNgogKi8KZnVuY3Rpb24gb3BjYWNoZV9pc19zY3JpcHRfY2FjaGVkKHN0cmluZyAkZmlsZW5hbWUpOiBib29sIHt9Cjw/cGhwCi8qKgogKiBSZXR1cm5zIEZQTSBzdGF0dXMgaW5mbyBhcnJheQogKiBAc2luY2UgNy4zCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UKICovCmZ1bmN0aW9uIGZwbV9nZXRfc3RhdHVzKCk6IGFycmF5fGZhbHNlIHt9CgovKioKICogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIGFsbCByZXNwb25zZSBkYXRhIHRvIHRoZSBjbGllbnQgYW5kIGZpbmlzaGVzIHRoZSByZXF1ZXN0LgogKiBUaGlzIGFsbG93cyBmb3IgdGltZSBjb25zdW1pbmcgdGFza3MgdG8gYmUgcGVyZm9ybWVkIHdpdGhvdXQgbGVhdmluZyB0aGUgY29ubmVjdGlvbiB0byB0aGUgY2xpZW50IG9wZW4uCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2luc3RhbGwuZnBtLnBocAogKiBAc2luY2UgNS4zLjMKICovCmZ1bmN0aW9uIGZhc3RjZ2lfZmluaXNoX3JlcXVlc3QoKSB7fTsKPD9waHAKCi8qKgogKiBDb3VjaGJhc2UgZXh0ZW5zaW9uIHN0dWJzCiAqIEdhdGhlcmVkIGZyb20gaHR0cHM6Ly9kb2NzLmNvdWNoYmFzZS5jb20vc2RrLWFwaS9jb3VjaGJhc2UtcGhwLWNsaWVudC0yLjMuMC9pbmRleC5odG1sCiAqIE1haW50YWluZXI6IHNlcmdleUBjb3VjaGJhc2UuY29tCiAqCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jb3VjaGJhc2UvcGhwLWNvdWNoYmFzZS90cmVlL21hc3Rlci9hcGkKICovCmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXENsdXN0ZXIiLCAiQ291Y2hiYXNlQ2x1c3RlciIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxCdWNrZXQiLCAiQ291Y2hiYXNlQnVja2V0Iik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXE11dGF0aW9uVG9rZW4iLCAiQ291Y2hiYXNlTXV0YXRpb25Ub2tlbiIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxNdXRhdGlvblN0YXRlIiwgIkNvdWNoYmFzZU11dGF0aW9uU3RhdGUiKTsKY2xhc3NfYWxpYXMoIkNvdWNoYmFzZVxcQnVja2V0TWFuYWdlciIsICJDb3VjaGJhc2VCdWNrZXRNYW5hZ2VyIik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXENsdXN0ZXJNYW5hZ2VyIiwgIkNvdWNoYmFzZUNsdXN0ZXJNYW5hZ2VyIik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXExvb2t1cEluQnVpbGRlciIsICJDb3VjaGJhc2VMb29rdXBJbkJ1aWxkZXIiKTsKY2xhc3NfYWxpYXMoIkNvdWNoYmFzZVxcTXV0YXRlSW5CdWlsZGVyIiwgIkNvdWNoYmFzZU11dGF0ZUluQnVpbGRlciIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxOMXFsUXVlcnkiLCAiQ291Y2hiYXNlTjFxbFF1ZXJ5Iik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXFNlYXJjaFF1ZXJ5IiwgIkNvdWNoYmFzZVNlYXJjaFF1ZXJ5Iik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXFNlYXJjaFF1ZXJ5UGFydCIsICJDb3VjaGJhc2VBYnN0cmFjdFNlYXJjaFF1ZXJ5Iik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXFF1ZXJ5U3RyaW5nU2VhcmNoUXVlcnkiLCAiQ291Y2hiYXNlU3RyaW5nU2VhcmNoUXVlcnkiKTsKY2xhc3NfYWxpYXMoIkNvdWNoYmFzZVxcTWF0Y2hTZWFyY2hRdWVyeSIsICJDb3VjaGJhc2VNYXRjaFNlYXJjaFF1ZXJ5Iik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXE1hdGNoUGhyYXNlU2VhcmNoUXVlcnkiLCAiQ291Y2hiYXNlTWF0Y2hQaHJhc2VTZWFyY2hRdWVyeSIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxQcmVmaXhTZWFyY2hRdWVyeSIsICJDb3VjaGJhc2VQcmVmaXhTZWFyY2hRdWVyeSIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxSZWdleHBTZWFyY2hRdWVyeSIsICJDb3VjaGJhc2VSZWdleHBTZWFyY2hRdWVyeSIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxOdW1lcmljUmFuZ2VTZWFyY2hRdWVyeSIsICJDb3VjaGJhc2VOdW1lcmljUmFuZ2VTZWFyY2hRdWVyeSIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxEaXNqdW5jdGlvblNlYXJjaFF1ZXJ5IiwgIkNvdWNoYmFzZURpc2p1bmN0aW9uU2VhcmNoUXVlcnkiKTsKY2xhc3NfYWxpYXMoIkNvdWNoYmFzZVxcRGF0ZVJhbmdlU2VhcmNoUXVlcnkiLCAiQ291Y2hiYXNlRGF0ZVJhbmdlU2VhcmNoUXVlcnkiKTsKY2xhc3NfYWxpYXMoIkNvdWNoYmFzZVxcQ29uanVuY3Rpb25TZWFyY2hRdWVyeSIsICJDb3VjaGJhc2VDb25qdW5jdGlvblNlYXJjaFF1ZXJ5Iik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXEJvb2xlYW5TZWFyY2hRdWVyeSIsICJDb3VjaGJhc2VCb29sZWFuU2VhcmNoUXVlcnkiKTsKY2xhc3NfYWxpYXMoIkNvdWNoYmFzZVxcV2lsZGNhcmRTZWFyY2hRdWVyeSIsICJDb3VjaGJhc2VXaWxkY2FyZFNlYXJjaFF1ZXJ5Iik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXERvY0lkU2VhcmNoUXVlcnkiLCAiQ291Y2hiYXNlRG9jSWRTZWFyY2hRdWVyeSIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxCb29sZWFuRmllbGRTZWFyY2hRdWVyeSIsICJDb3VjaGJhc2VCb29sZWFuRmllbGRTZWFyY2hRdWVyeSIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxUZXJtU2VhcmNoUXVlcnkiLCAiQ291Y2hiYXNlVGVybVNlYXJjaFF1ZXJ5Iik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXFBocmFzZVNlYXJjaFF1ZXJ5IiwgIkNvdWNoYmFzZVBocmFzZVNlYXJjaFF1ZXJ5Iik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXE1hdGNoQWxsU2VhcmNoUXVlcnkiLCAiQ291Y2hiYXNlTWF0Y2hBbGxTZWFyY2hRdWVyeSIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxNYXRjaE5vbmVTZWFyY2hRdWVyeSIsICJDb3VjaGJhc2VNYXRjaE5vbmVTZWFyY2hRdWVyeSIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxEYXRlUmFuZ2VTZWFyY2hGYWNldCIsICJDb3VjaGJhc2VEYXRlUmFuZ2VTZWFyY2hGYWNldCIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxOdW1lcmljUmFuZ2VTZWFyY2hGYWNldCIsICJDb3VjaGJhc2VOdW1lcmljUmFuZ2VTZWFyY2hGYWNldCIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxUZXJtU2VhcmNoRmFjZXQiLCAiQ291Y2hiYXNlVGVybVNlYXJjaEZhY2V0Iik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXFNlYXJjaEZhY2V0IiwgIkNvdWNoYmFzZVNlYXJjaEZhY2V0Iik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXFZpZXdRdWVyeSIsICJDb3VjaGJhc2VWaWV3UXVlcnkiKTsKY2xhc3NfYWxpYXMoIkNvdWNoYmFzZVxcRG9jdW1lbnRGcmFnbWVudCIsICJDb3VjaGJhc2VEb2N1bWVudEZyYWdtZW50Iik7CmNsYXNzX2FsaWFzKCJDb3VjaGJhc2VcXERvY3VtZW50IiwgIkNvdWNoYmFzZU1ldGFEb2MiKTsKY2xhc3NfYWxpYXMoIkNvdWNoYmFzZVxcRXhjZXB0aW9uIiwgIkNvdWNoYmFzZUV4Y2VwdGlvbiIpOwpjbGFzc19hbGlhcygiQ291Y2hiYXNlXFxDbGFzc2ljQXV0aGVudGljYXRvciIsICJDb3VjaGJhc2VBdXRoZW50aWNhdG9yIik7CgpkZWZpbmUoIkNPVUNIQkFTRV9QRVJTSVNUVE9fTUFTVEVSIiwgMSk7CmRlZmluZSgiQ09VQ0hCQVNFX1BFUlNJU1RUT19PTkUiLCAxKTsKZGVmaW5lKCJDT1VDSEJBU0VfUEVSU0lTVFRPX1RXTyIsIDIpOwpkZWZpbmUoIkNPVUNIQkFTRV9QRVJTSVNUVE9fVEhSRUUiLCA0KTsKCmRlZmluZSgiQ09VQ0hCQVNFX1JFUExJQ0FURVRPX09ORSIsIDE2KTsKZGVmaW5lKCJDT1VDSEJBU0VfUkVQTElDQVRFVE9fVFdPIiwgMzIpOwpkZWZpbmUoIkNPVUNIQkFTRV9SRVBMSUNBVEVUT19USFJFRSIsIDY0KTsKCmRlZmluZSgiQ09VQ0hCQVNFX1NVQ0NFU1MiLCAwKTsKZGVmaW5lKCJDT1VDSEJBU0VfQVVUSF9DT05USU5VRSIsIDEpOwpkZWZpbmUoIkNPVUNIQkFTRV9BVVRIX0VSUk9SIiwgMik7CmRlZmluZSgiQ09VQ0hCQVNFX0RFTFRBX0JBRFZBTCIsIDMpOwpkZWZpbmUoIkNPVUNIQkFTRV9FMkJJRyIsIDQpOwpkZWZpbmUoIkNPVUNIQkFTRV9FQlVTWSIsIDUpOwpkZWZpbmUoIkNPVUNIQkFTRV9FSU5URVJOQUwiLCA2KTsKZGVmaW5lKCJDT1VDSEJBU0VfRUlOVkFMIiwgNyk7CmRlZmluZSgiQ09VQ0hCQVNFX0VOT01FTSIsIDgpOwpkZWZpbmUoIkNPVUNIQkFTRV9FUkFOR0UiLCA5KTsKZGVmaW5lKCJDT1VDSEJBU0VfRVJST1IiLCAxMCk7CmRlZmluZSgiQ09VQ0hCQVNFX0VUTVBGQUlMIiwgMTEpOwpkZWZpbmUoIkNPVUNIQkFTRV9LRVlfRUVYSVNUUyIsIDEyKTsKZGVmaW5lKCJDT1VDSEJBU0VfS0VZX0VOT0VOVCIsIDEzKTsKZGVmaW5lKCJDT1VDSEJBU0VfRExPUEVOX0ZBSUxFRCIsIDE0KTsKZGVmaW5lKCJDT1VDSEJBU0VfRExTWU1fRkFJTEVEIiwgMTUpOwpkZWZpbmUoIkNPVUNIQkFTRV9ORVRXT1JLX0VSUk9SIiwgMTYpOwpkZWZpbmUoIkNPVUNIQkFTRV9OT1RfTVlfVkJVQ0tFVCIsIDE3KTsKZGVmaW5lKCJDT1VDSEJBU0VfTk9UX1NUT1JFRCIsIDE4KTsKZGVmaW5lKCJDT1VDSEJBU0VfTk9UX1NVUFBPUlRFRCIsIDE5KTsKZGVmaW5lKCJDT1VDSEJBU0VfVU5LTk9XTl9DT01NQU5EIiwgMjApOwpkZWZpbmUoIkNPVUNIQkFTRV9VTktOT1dOX0hPU1QiLCAyMSk7CmRlZmluZSgiQ09VQ0hCQVNFX1BST1RPQ09MX0VSUk9SIiwgMjIpOwpkZWZpbmUoIkNPVUNIQkFTRV9FVElNRURPVVQiLCAyMyk7CmRlZmluZSgiQ09VQ0hCQVNFX0NPTk5FQ1RfRVJST1IiLCAyNCk7CmRlZmluZSgiQ09VQ0hCQVNFX0JVQ0tFVF9FTk9FTlQiLCAyNSk7CmRlZmluZSgiQ09VQ0hCQVNFX0NMSUVOVF9FTk9NRU0iLCAyNik7CmRlZmluZSgiQ09VQ0hCQVNFX0NMSUVOVF9FTk9DT05GIiwgMjcpOwpkZWZpbmUoIkNPVUNIQkFTRV9FQkFESEFORExFIiwgMjgpOwpkZWZpbmUoIkNPVUNIQkFTRV9TRVJWRVJfQlVHIiwgMjkpOwpkZWZpbmUoIkNPVUNIQkFTRV9QTFVHSU5fVkVSU0lPTl9NSVNNQVRDSCIsIDMwKTsKZGVmaW5lKCJDT1VDSEJBU0VfSU5WQUxJRF9IT1NUX0ZPUk1BVCIsIDMxKTsKZGVmaW5lKCJDT1VDSEJBU0VfSU5WQUxJRF9DSEFSIiwgMzIpOwpkZWZpbmUoIkNPVUNIQkFTRV9EVVJBQklMSVRZX0VUT09NQU5ZIiwgMzMpOwpkZWZpbmUoIkNPVUNIQkFTRV9EVVBMSUNBVEVfQ09NTUFORFMiLCAzNCk7CmRlZmluZSgiQ09VQ0hCQVNFX05PX01BVENISU5HX1NFUlZFUiIsIDM1KTsKZGVmaW5lKCJDT1VDSEJBU0VfQkFEX0VOVklST05NRU5UIiwgMzYpOwpkZWZpbmUoIkNPVUNIQkFTRV9CVVNZIiwgMzcpOwpkZWZpbmUoIkNPVUNIQkFTRV9JTlZBTElEX1VTRVJOQU1FIiwgMzgpOwpkZWZpbmUoIkNPVUNIQkFTRV9DT05GSUdfQ0FDSEVfSU5WQUxJRCIsIDM5KTsKZGVmaW5lKCJDT1VDSEJBU0VfU0FTTE1FQ0hfVU5BVkFJTEFCTEUiLCA0MCk7CmRlZmluZSgiQ09VQ0hCQVNFX1RPT19NQU5ZX1JFRElSRUNUUyIsIDQxKTsKZGVmaW5lKCJDT1VDSEJBU0VfTUFQX0NIQU5HRUQiLCA0Mik7CmRlZmluZSgiQ09VQ0hCQVNFX0lOQ09NUExFVEVfUEFDS0VUIiwgNDMpOwpkZWZpbmUoIkNPVUNIQkFTRV9FQ09OTlJFRlVTRUQiLCA0NCk7CmRlZmluZSgiQ09VQ0hCQVNFX0VTT0NLU0hVVERPV04iLCA0NSk7CmRlZmluZSgiQ09VQ0hCQVNFX0VDT05OUkVTRVQiLCA0Nik7CmRlZmluZSgiQ09VQ0hCQVNFX0VDQU5UR0VUUE9SVCIsIDQ3KTsKZGVmaW5lKCJDT1VDSEJBU0VfRUZETElNSVRSRUFDSEVEIiwgNDgpOwpkZWZpbmUoIkNPVUNIQkFTRV9FTkVUVU5SRUFDSCIsIDQ5KTsKZGVmaW5lKCJDT1VDSEJBU0VfRUNUTF9VTktOT1dOIiwgNTApOwpkZWZpbmUoIkNPVUNIQkFTRV9FQ1RMX1VOU1VQUE1PREUiLCA1MSk7CmRlZmluZSgiQ09VQ0hCQVNFX0VDVExfQkFEQVJHIiwgNTIpOwpkZWZpbmUoIkNPVUNIQkFTRV9FTVBUWV9LRVkiLCA1Myk7CmRlZmluZSgiQ09VQ0hCQVNFX1NTTF9FUlJPUiIsIDU0KTsKZGVmaW5lKCJDT1VDSEJBU0VfU1NMX0NBTlRWRVJJRlkiLCA1NSk7CmRlZmluZSgiQ09VQ0hCQVNFX1NDSEVERkFJTF9JTlRFUk5BTCIsIDU2KTsKZGVmaW5lKCJDT1VDSEJBU0VfQ0xJRU5UX0ZFQVRVUkVfVU5BVkFJTEFCTEUiLCA1Nyk7CmRlZmluZSgiQ09VQ0hCQVNFX09QVElPTlNfQ09ORkxJQ1QiLCA1OCk7CmRlZmluZSgiQ09VQ0hCQVNFX0hUVFBfRVJST1IiLCA1OSk7CmRlZmluZSgiQ09VQ0hCQVNFX0RVUkFCSUxJVFlfTk9fTVVUQVRJT05fVE9LRU5TIiwgNjApOwpkZWZpbmUoIkNPVUNIQkFTRV9VTktOT1dOX01FTUNBQ0hFRF9FUlJPUiIsIDYxKTsKZGVmaW5lKCJDT1VDSEJBU0VfTVVUQVRJT05fTE9TVCIsIDYyKTsKZGVmaW5lKCJDT1VDSEJBU0VfU1VCRE9DX1BBVEhfRU5PRU5UIiwgNjMpOwpkZWZpbmUoIkNPVUNIQkFTRV9TVUJET0NfUEFUSF9NSVNNQVRDSCIsIDY0KTsKZGVmaW5lKCJDT1VDSEJBU0VfU1VCRE9DX1BBVEhfRUlOVkFMIiwgNjUpOwpkZWZpbmUoIkNPVUNIQkFTRV9TVUJET0NfUEFUSF9FMkJJRyIsIDY2KTsKZGVmaW5lKCJDT1VDSEJBU0VfU1VCRE9DX0RPQ19FMkRFRVAiLCA2Nyk7CmRlZmluZSgiQ09VQ0hCQVNFX1NVQkRPQ19WQUxVRV9DQU5USU5TRVJUIiwgNjgpOwpkZWZpbmUoIkNPVUNIQkFTRV9TVUJET0NfRE9DX05PVEpTT04iLCA2OSk7CmRlZmluZSgiQ09VQ0hCQVNFX1NVQkRPQ19OVU1fRVJBTkdFIiwgNzApOwpkZWZpbmUoIkNPVUNIQkFTRV9TVUJET0NfQkFEX0RFTFRBIiwgNzEpOwpkZWZpbmUoIkNPVUNIQkFTRV9TVUJET0NfUEFUSF9FRVhJU1RTIiwgNzIpOwpkZWZpbmUoIkNPVUNIQkFTRV9TVUJET0NfTVVMVElfRkFJTFVSRSIsIDczKTsKZGVmaW5lKCJDT1VDSEJBU0VfU1VCRE9DX1ZBTFVFX0UyREVFUCIsIDc0KTsKZGVmaW5lKCJDT1VDSEJBU0VfRUlOVkFMX01DRCIsIDc1KTsKZGVmaW5lKCJDT1VDSEJBU0VfRU1QVFlfUEFUSCIsIDc2KTsKZGVmaW5lKCJDT1VDSEJBU0VfVU5LTk9XTl9TRENNRCIsIDc3KTsKZGVmaW5lKCJDT1VDSEJBU0VfRU5PX0NPTU1BTkRTIiwgNzgpOwpkZWZpbmUoIkNPVUNIQkFTRV9RVUVSWV9FUlJPUiIsIDc5KTsKZGVmaW5lKCJDT1VDSEJBU0VfVE1QRkFJTCIsIDExKTsKZGVmaW5lKCJDT1VDSEJBU0VfS0VZQUxSRUFEWUVYSVNUUyIsIDEyKTsKZGVmaW5lKCJDT1VDSEJBU0VfS0VZTk9URk9VTkQiLCAxMyk7Cjw/cGhwCi8qKgogKiBDb3VjaGJhc2UgZXh0ZW5zaW9uIHN0dWJzCiAqIEdhdGhlcmVkIGZyb20gaHR0cHM6Ly9kb2NzLmNvdWNoYmFzZS5jb20vc2RrLWFwaS9jb3VjaGJhc2UtcGhwLWNsaWVudC0yLjMuMC9pbmRleC5odG1sCiAqIE1haW50YWluZXI6IHNlcmdleUBjb3VjaGJhc2UuY29tCiAqCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jb3VjaGJhc2UvcGhwLWNvdWNoYmFzZS90cmVlL21hc3Rlci9hcGkKICovCgovKioKICogSU5JIGVudHJpZXM6CiAqCiAqICogYGNvdWNoYmFzZS5sb2dfbGV2ZWxgIChzdHJpbmcpLCBkZWZhdWx0OiBgIldBUk4iYAogKgogKiAgIGNvbnRyb2xzIGFtb3VudCBvZiBpbmZvcm1hdGlvbiwgdGhlIG1vZHVsZSB3aWxsIHNlbmQgdG8gUEhQIGVycm9yIGxvZy4gQWNjZXB0cyB0aGUgZm9sbG93aW5nIHZhbHVlcyBpbiBvcmRlciBvZgogKiAgIGluY3JlYXNpbmcgdmVyYm9zaXR5OiBgIkZBVEFMImAsIGAiRVJST1IiYCwgYCJXQVJOImAsIGAiSU5GTyJgLCBgIkRFQlVHImAsIGAiVFJBQ0UiYC4KICoKICogKiBgY291Y2hiYXNlLmVuY29kZXIuZm9ybWF0YCAoc3RyaW5nKSwgZGVmYXVsdDogYCJqc29uImAKICoKICogICBzZWxlY3RzIHNlcmlhbGl6YXRpb24gZm9ybWF0IGZvciBkZWZhdWx0IGVuY29kZXIgKFxDb3VjaGJhc2VcZGVmYXVsdEVuY29kZXIpLiBBY2NlcHRzIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogKiAgICogYCJqc29uImAgLSBlbmNvZGVzIG9iamVjdHMgYW5kIGFycmF5cyBhcyBKU09OIG9iamVjdCAodXNpbmcgYGpzb25fZW5jb2RlKClgKSwgcHJpbWl0aXZlcyB3cml0dGVuIGluIHN0cmluZ2lmaWVkIGZvcm0sCiAqICAgICAgd2hpY2ggaXMgYWxsb3dlZCBmb3IgbW9zdCBvZiB0aGUgSlNPTiBwYXJzZXJzIGFzIHZhbGlkIHZhbHVlcy4gRm9yIGVtcHR5IGFycmF5cyBKU09OIGFycmF5IHByZWZlcnJlZCwgaWYgaXQgaXMKICogICAgICBuZWNlc3NhcnksIHVzZSBgbmV3IHN0ZENsYXNzKClgIHRvIHBlcnNpc3QgZW1wdHkgSlNPTiBvYmplY3QuIE5vdGUsIHRoYXQgb25seSBKU09OIGZvcm1hdCBjb25zaWRlcmVkIHN1cHBvcnRlZCBieQogKiAgICAgIGFsbCBDb3VjaGJhc2UgU0RLcywgZXZlcnl0aGluZyBlbHNlIGlzIHByaXZhdGUgaW1wbGVtZW50YXRpb24gKGkuZS4gYCJwaHAiYCBmb3JtYXQgd29uJ3QgYmUgcmVhZGFibGUgYnkgLk5FVCBTREspLgogKiAgICogYCJwaHAiYCAtIHVzZXMgUEhQIHNlcmlhbGl6ZSgpIG1ldGhvZCB0byBlbmNvZGUgdGhlIGRvY3VtZW50LgogKiAgICogYCJpZ2JpbmFyeSJgIC0gdXNlcyBwZWNsL2lnYmluYXJ5IHRvIGVuY29kZSB0aGUgZG9jdW1lbnQgaW4gZXZlbiBtb3JlIGVmZmljaWVudCB0aGFuIGAicGhwImAgZm9ybWF0LiBNaWdodCBub3QgYmUKICogICAgICBhdmFpbGFibGUsIGlmIHRoZSBDb3VjaGJhc2UgUEhQIFNESyBkaWRuJ3QgZmluZCBpdCBkdXJpbmcgYnVpbGQgcGhhc2UsIGluIHRoaXMgY2FzZSBjb25zdGFudAogKiAgICAgIFxDb3VjaGJhc2VcSEFWRV9JR0JJTkFSWSB3aWxsIGJlIGZhbHNlLgogKgogKiAqIGBjb3VjaGJhc2UuZW5jb2Rlci5jb21wcmVzc2lvbmAgKHN0cmluZyksIGRlZmF1bHQ6IGAibm9uZSJgCiAqCiAqICAgc2VsZWN0cyBjb21wcmVzc2lvbiBhbGdvcml0aG0uIEFsc28gc2VlIHJlbGF0ZWQgY29tcHJlc3Npb24gb3B0aW9ucyBiZWxvdy4gQWNjZXB0cyB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAqIGAiZmFzdGx6ImAgLSB1c2VzIEZhc3RMWiBhbGdvcml0aG0uIFRoZSBtb2R1bGUgbWlnaHQgYmUgY29uZmlndXJlZCB0byB1c2Ugc3lzdGVtIGZhc3RseiBsaWJyYXJ5IGR1cmluZyBidWlsZCwKICogICAgIG90aGV3aXNlIHZlbmRvcmVkIHZlcnNpb24gd2lsbCBiZSB1c2VkLiBUaGlzIGFsZ29yaXRobSBpcyBhbHdheXMgYXZhaWxhYmxlLgogKiAgICogYCJ6bGliImAgLSB1c2VzIGNvbXByZXNzaW9uIGltcGxlbWVudGVkIGJ5IGxpYnouIE1pZ2h0IG5vdCBiZSBhdmFpbGFibGUsIGlmIHRoZSBzeXN0ZW0gZGlkbid0IGhhdmUgbGlieiBoZWFkZXJzCiAqICAgICBkdXJpbmcgYnVpbGQgcGhhc2UuIEluIHRoaXMgY2FzZSBcQ291Y2hiYXNlXEhBVkVfWkxJQiB3aWxsIGJlIGZhbHNlLgogKiAgICogYCJvZmYiYCBvciBgIm5vbmUiYCAtIGNvbXByZXNzaW9uIHdpbGwgYmUgZGlzYWJsZWQsIGJ1dCB0aGUgbGlicmFyeSB3aWxsIHN0aWxsIHJlYWQgY29tcHJlc3NlZCB2YWx1ZXMuCiAqCiAqICogYGNvdWNoYmFzZS5lbmNvZGVyLmNvbXByZXNzaW9uX3RocmVzaG9sZGAgKGxvbmcpLCBkZWZhdWx0OiBgMGAKICoKICogICBjb250cm9scyBtaW5pbXVtIHNpemUgb2YgdGhlIGRvY3VtZW50IHZhbHVlIGluIGJ5dGVzIHRvIHVzZSBjb21wcmVzc2lvbi4gRm9yIGV4YW1wbGUsIGlmIHRocmVzaG9sZCAxMDAgYnl0ZXMsCiAqICAgYW5kIHRoZSBkb2N1bWVudCBzaXplIGlzIDUwLCBjb21wcmVzc2lvbiB3aWxsIGJlIGRpc2FibGVkIGZvciB0aGlzIHBhcnRpY3VsYXIgZG9jdW1lbnQuCiAqCiAqICogYGNvdWNoYmFzZS5lbmNvZGVyLmNvbXByZXNzaW9uX2ZhY3RvcmAgKGZsb2F0KSwgZGVmYXVsdDogYDAuMGAKICoKICogICBjb250cm9scyB0aGUgbWluaW11bSByYXRpbyBvZiB0aGUgcmVzdWx0IHZhbHVlIGFuZCBvcmlnaW5hbCBkb2N1bWVudCB2YWx1ZSB0byBwcm9jZWVkIHdpdGggcGVyc2lzdGluZyBjb21wcmVzc2VkCiAqICAgYnl0ZXMuIEZvciBleGFtcGxlLCB0aGUgb3JpZ2luYWwgZG9jdW1lbnQgY29uc2lzdHMgb2YgMTAwIGJ5dGVzLiBJbiB0aGlzIGNhc2UgZmFjdG9yIDEuMCB3aWxsIHJlcXVpcmUgY29tcHJlc3NvcgogKiAgIHRvIHlpZWxkIHZhbHVlcyBub3QgbGFyZ2VyIHRoYW4gMTAwIGJ5dGVzICgxMDAvMS4wKSwgYW5kIDEuNSAtLSBub3QgbGFyZ2VyIHRoYW4gNjYgYnl0ZXMgKDEwMC8xLjUpLgogKgogKiAqIGBjb3VjaGJhc2UuZGVjb2Rlci5qc29uX2FycmF5c2AgKGJvb2xlYW4pLCBkZWZhdWx0OiBgZmFsc2VgCiAqCiAqICAgY29udHJvbHMgdGhlIGZvcm0gb2YgdGhlIGRvY3VtZW50cywgcmV0dXJuZWQgYnkgdGhlIHNlcnZlciBpZiB0aGV5IHdlcmUgaW4gSlNPTiBmb3JtYXQuIFdoZW4gdHJ1ZSwgaXQgd2lsbCBnZW5lcmF0ZQogKiAgIGFycmF5cyBvZiBhcnJheXMsIG90aGVyd2lzZSBpbnN0YW5jZXMgb2Ygc3RkQ2xhc3MuCiAqCiAqICogYGNvdWNoYmFzZS5wb29sLm1heF9pZGxlX3RpbWVfc2VjYCAobG9uZyksIGRlZmF1bHQ6IGA2MGAKICoKICogICBjb250cm9scyB0aGUgbWF4aW11bSBpbnRlcnZhbCB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIG9iamVjdCBjb3VsZCBiZSBpZGxlLCBpLmUuIHdpdGhvdXQgYW55IGRhdGEvcXVlcnkKICogICBvcGVyYXRpb25zLiBBbGwgY29ubmVjdGlvbnMgd2hpY2ggaWRsZSBtb3JlIHRoYW4gdGhpcyBpbnRlcnZhbCB3aWxsIGJlIGNsb3NlZCBhdXRvbWF0aWNhbGx5LiBDbGVhbnVwIGZ1bmN0aW9uCiAqICAgZXhlY3V0ZWQgYWZ0ZXIgZWFjaCByZXF1ZXN0IHVzaW5nIFJTSFVURE9XTiBob29rLgogKgogKiBAcGFja2FnZSBDb3VjaGJhc2UKICovCgpuYW1lc3BhY2UgQ291Y2hiYXNlOwoKLyoqIElmIGlnYmluYXJ5IGV4dGVuc2lvbiB3YXMgbm90IGZvdW5kIGR1cmluZyBidWlsZCBwaGFzZSB0aGlzIGNvbnN0YW50IHdpbGwgc3RvcmUgMCAqLwpkZWZpbmUoIkNvdWNoYmFzZVxcSEFWRV9JR0JJTkFSWSIsIDEpOwovKiogSWYgbGlieiBoZWFkZXJzIHdhcyBub3QgZm91bmQgZHVyaW5nIGJ1aWxkIHBoYXNlIHRoaXMgY29uc3RhbnQgd2lsbCBzdG9yZSAwICovCmRlZmluZSgiQ291Y2hiYXNlXFxIQVZFX1pMSUIiLCAxKTsKCi8qKiBFbmNvZGVzIGRvY3VtZW50cyBhcyBKU09OIG9iamVjdHMgKHNlZSBJTkkgc2VjdGlvbiBmb3IgZGV0YWlscykKICogQHNlZSBcQ291Y2hiYXNlXGJhc2ljRW5jb2RlclYxCiAqLwpkZWZpbmUoIkNvdWNoYmFzZVxcRU5DT0RFUl9GT1JNQVRfSlNPTiIsIDApOwovKiogRW5jb2RlcyBkb2N1bWVudHMgdXNpbmcgcGVjbC9pZ2JpbmFyeSBlbmNvZGVyIChzZWUgSU5JIHNlY3Rpb24gZm9yIGRldGFpbHMpCiAqIEBzZWUgXENvdWNoYmFzZVxiYXNpY0VuY29kZXJWMQogKi8KZGVmaW5lKCJDb3VjaGJhc2VcXEVOQ09ERVJfRk9STUFUX0lHQklOQVJZIiwgMSk7Ci8qKiBFbmNvZGVzIGRvY3VtZW50cyB1c2luZyBQSFAgc2VyaWFsaXplKCkgKHNlZSBJTkkgc2VjdGlvbiBmb3IgZGV0YWlscykKICogQHNlZSBcQ291Y2hiYXNlXGJhc2ljRW5jb2RlclYxCiAqLwpkZWZpbmUoIkNvdWNoYmFzZVxcRU5DT0RFUl9GT1JNQVRfUEhQIiwgMik7CgovKiogRG8gbm90IHVzZSBjb21wcmVzc2lvbiBmb3IgdGhlIGRvY3VtZW50cwogKiBAc2VlIFxDb3VjaGJhc2VcYmFzaWNFbmNvZGVyVjEKICovCmRlZmluZSgiQ291Y2hiYXNlXFxFTkNPREVSX0NPTVBSRVNTSU9OX05PTkUiLCAwKTsKLyoqIFVzZSB6bGliIGNvbXByZXNzb3IgZm9yIHRoZSBkb2N1bWVudHMKICogQHNlZSBcQ291Y2hiYXNlXGJhc2ljRW5jb2RlclYxCiAqLwpkZWZpbmUoIkNvdWNoYmFzZVxcRU5DT0RFUl9DT01QUkVTU0lPTl9aTElCIiwgMSk7Ci8qKiBVc2UgRmFzdExaIGNvbXByZXNzb3IgZm9yIHRoZSBkb2N1bWVudHMKICogQHNlZSBcQ291Y2hiYXNlXGJhc2ljRW5jb2RlclYxCiAqLwpkZWZpbmUoIkNvdWNoYmFzZVxcRU5DT0RFUl9DT01QUkVTU0lPTl9GQVNUTFoiLCAyKTsKCi8qKgogKiBDb21wcmVzcyBpbnB1dCB1c2luZyBGYXN0TFogYWxnb3JpdGhtLgogKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIG9yaWdpbmFsIGRhdGEKICogQHJldHVybiBzdHJpbmcgY29tcHJlc3NlZCBiaW5hcnkgc3RyaW5nCiAqLwpmdW5jdGlvbiBmYXN0bHpDb21wcmVzcygkZGF0YSkge30KCi8qKgogKiBEZWNvbXByZXNzIGlucHV0IHVzaW5nIEZhc3RMWiBhbGdvcml0aG0uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgY29tcHJlc3NlZCBiaW5hcnkgc3RyaW5nCiAqIEByZXR1cm4gc3RyaW5nIG9yaWdpbmFsIGRhdGEKICovCmZ1bmN0aW9uIGZhc3RsekRlY29tcHJlc3MoJGRhdGEpIHt9CgovKioKICogQ29tcHJlc3MgaW5wdXQgdXNpbmcgemxpYi4gUmFpc2VzIEV4Y2VwdGlvbiB3aGVuIGV4dGVuc2lvbiBjb21waWxlZCB3aXRob3V0IHpsaWIgc3VwcG9ydC4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBvcmlnaW5hbCBkYXRhCiAqIEByZXR1cm4gc3RyaW5nIGNvbXByZXNzZWQgYmluYXJ5IHN0cmluZwogKiBAc2VlIFxDb3VjaGJhc2VcSEFWRV9aTElCCiAqLwpmdW5jdGlvbiB6bGliQ29tcHJlc3MoJGRhdGEpIHt9CgovKioKICogQ29tcHJlc3MgaW5wdXQgdXNpbmcgemxpYi4gUmFpc2VzIEV4Y2VwdGlvbiB3aGVuIGV4dGVuc2lvbiBjb21waWxlZCB3aXRob3V0IHpsaWIgc3VwcG9ydC4KICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBjb21wcmVzc2VkIGJpbmFyeSBzdHJpbmcKICogQHJldHVybiBzdHJpbmcgb3JpZ2luYWwgZGF0YQogKiBAc2VlIFxDb3VjaGJhc2VcSEFWRV9aTElCCiAqLwpmdW5jdGlvbiB6bGliRGVjb21wcmVzcygkZGF0YSkge30KCi8qKgogKiBSZXR1cm5zIHZhbHVlIGFzIGl0IHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciB3aXRob3V0IGFueSB0cmFuc2Zvcm1hdGlvbnMuCiAqCiAqIEl0IGlzIHVzZWZ1bCBmb3IgZGVidWcgcHVycG9zZSB0byBpbnNwZWN0IGJhcmUgdmFsdWUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGJ5dGVzCiAqIEBwYXJhbSBpbnQgJGZsYWdzCiAqIEBwYXJhbSBpbnQgJGRhdGF0eXBlCiAqIEByZXR1cm4gc3RyaW5nIERvY3VtZW50IGFzIGl0IHJlY2VpdmVkIGZyb20gdGhlIENvdWNoYmFzZS4KICoKICogQHNlZSBcQ291Y2hiYXNlXEJ1Y2tldDo6c2V0VHJhbnNjb2RlcigpCiAqLwpmdW5jdGlvbiBwYXNzdGhydURlY29kZXIoJGJ5dGVzLCAkZmxhZ3MsICRkYXRhdHlwZSkge30KCi8qKgogKiBSZXR1cm5zIHRoZSB2YWx1ZSwgd2hpY2ggaGFzIGJlZW4gcGFzc2VkIGFuZCB6ZXJvIGFzIGZsYWdzIGFuZCBkYXRhdHlwZS4KICoKICogSXQgaXMgdXNlZnVsIGZvciBkZWJ1ZyBwdXJwb3Nlcywgb3Igd2hlbiB0aGUgdmFsdWUga25vd24gdG8gYmUgYSBzdHJpbmcsIG90aGVyd2lzZSBiZWhhdmlvciBpcyBub3QgZGVmaW5lZCAobW9zdAogKiBsaWtlbHkgaXQgd2lsbCBnZW5lcmF0ZSBlcnJvcikuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIGRvY3VtZW50IHRvIGJlIHN0b3JlZCBpbiB0aGUgQ291Y2hiYXNlCiAqIEByZXR1cm4gYXJyYXkgQXJyYXkgd2l0aCB0aHJlZSB2YWx1ZXM6IFtieXRlcywgMCwgMF0KICoKICogQHNlZSBcQ291Y2hiYXNlXEJ1Y2tldDo6c2V0VHJhbnNjb2RlcigpCiAqLwpmdW5jdGlvbiBwYXNzdGhydUVuY29kZXIoJHZhbHVlKSB7fQoKLyoqCiAqIERlY29kZXMgdmFsdWUgdXNpbmcgXENvdWNoYmFzZVxiYXNpY0RlY29kZXJWMS4KICoKICogSXQgcGFzc2VzIGBjb3VjaGJhc2UuZGVjb2Rlci4qYCBJTkkgcHJvcGVydGllcyBhcyAkb3B0aW9ucy4KICoKICogQHBhcmFtIHN0cmluZyAkYnl0ZXMgQmluYXJ5IHN0cmluZyByZWNlaXZlZCBmcm9tIHRoZSBDb3VjaGJhc2UsIHdoaWNoIGNvbnRhaW5zIGVuY29kZWQgZG9jdW1lbnQKICogQHBhcmFtIGludCAkZmxhZ3MgRmxhZ3Mgd2hpY2ggZGVzY3JpYmVzIGRvY3VtZW50IGVuY29kaW5nCiAqIEBwYXJhbSBpbnQgJGRhdGF0eXBlIEV4dHJhIGZpZWxkIGZvciBkYXRhdHlwZSAobm90IHVzZWQgYXQgdGhlIG1vbWVudCkKICogQHJldHVybiBtaXhlZCBEZWNvZGVkIGRvY3VtZW50IG9iamVjdAogKgogKiBAc2VlIFxDb3VjaGJhc2VcYmFzaWNEZWNvZGVyVjEKICogQHNlZSBcQ291Y2hiYXNlXEJ1Y2tldDo6c2V0VHJhbnNjb2RlcigpCiAqLwpmdW5jdGlvbiBkZWZhdWx0RGVjb2RlcigkYnl0ZXMsICRmbGFncywgJGRhdGF0eXBlKSB7fQoKLyoqCiAqIEVuY29kZXMgdmFsdWUgdXNpbmcgXENvdWNoYmFzZVxiYXNpY0RlY29kZXJWMS4KICoKICogSXQgcGFzc2VzIGBjb3VjaGJhc2UuZW5jb2Rlci4qYCBJTkkgcHJvcGVydGllcyBhcyAkb3B0aW9ucy4KICoKICogQHBhcmFtIG1peGVkICR2YWx1ZSBkb2N1bWVudCB0byBiZSBzdG9yZWQgaW4gdGhlIENvdWNoYmFzZQogKiBAcmV0dXJuIGFycmF5IEFycmF5IHdpdGggdGhyZWUgdmFsdWVzOiBbYnl0ZXMsIGZsYWdzLCBkYXRhdHlwZV0KICoKICogQHNlZSBcQ291Y2hiYXNlXGJhc2ljRGVjb2RlclYxCiAqIEBzZWUgXENvdWNoYmFzZVxCdWNrZXQ6OnNldFRyYW5zY29kZXIoKQogKi8KZnVuY3Rpb24gZGVmYXVsdEVuY29kZXIoJHZhbHVlKSB7fQoKLyoqCiAqIERlY29kZXMgdmFsdWUgYWNjb3JkaW5nIHRvIENvbW1vbiBGbGFncyAoUkZDLTIwKQogKgogKiBAcGFyYW0gc3RyaW5nICRieXRlcyBCaW5hcnkgc3RyaW5nIHJlY2VpdmVkIGZyb20gdGhlIENvdWNoYmFzZSwgd2hpY2ggY29udGFpbnMgZW5jb2RlZCBkb2N1bWVudAogKiBAcGFyYW0gaW50ICRmbGFncyBGbGFncyB3aGljaCBkZXNjcmliZXMgZG9jdW1lbnQgZW5jb2RpbmcKICogQHBhcmFtIGludCAkZGF0YXR5cGUgRXh0cmEgZmllbGQgZm9yIGRhdGF0eXBlIChub3QgdXNlZCBhdCB0aGUgbW9tZW50KQogKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMKICogQHJldHVybiBtaXhlZCBEZWNvZGVkIGRvY3VtZW50IG9iamVjdAogKgogKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb3VjaGJhc2VsYWJzL3Nkay1yZmNzIFJGQy0yMCBhdCBTREsgUkZDcyByZXBvc2l0b3J5CiAqLwpmdW5jdGlvbiBiYXNpY0RlY29kZXJWMSgkYnl0ZXMsICRmbGFncywgJGRhdGF0eXBlLCAkb3B0aW9ucykge30KCi8qKgogKiBFbmNvZGVzIHZhbHVlIGFjY29yZGluZyB0byBDb21tb24gRmxhZ3MgKFJGQy0yMCkKICoKICogQHBhcmFtIG1peGVkICR2YWx1ZSBkb2N1bWVudCB0byBiZSBzdG9yZWQgaW4gdGhlIENvdWNoYmFzZQogKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgRW5jb2RlciBvcHRpb25zIChzZWUgZGV0YWlsZWQgZGVzY3JpcHRpb24gaW4gSU5JIHNlY3Rpb24pCiAqICAgKiAic2VydHlwZSIgKGRlZmF1bHQ6IFxDb3VjaGJhc2U6OkVOQ09ERVJfRk9STUFUX0pTT04pIGVuY29kaW5nIGZvcm1hdCB0byB1c2UKICogICAqICJjbXBydHlwZSIgKGRlZmF1bHQ6IFxDb3VjaGJhc2U6OkVOQ09ERVJfQ09NUFJFU1NJT05fTk9ORSkgY29tcHJlc3Npb24gdHlwZQogKiAgICogImNtcHJ0aHJlc2giIChkZWZhdWx0OiAwKSBjb21wcmVzc2lvbiB0aHJlc2hvbGQKICogICAqICJjbXByZmFjdG9yIiAoZGVmYXVsdDogMCkgY29tcHJlc3Npb24gZmFjdG9yCiAqIEByZXR1cm4gYXJyYXkgQXJyYXkgd2l0aCB0aHJlZSB2YWx1ZXM6IFtieXRlcywgZmxhZ3MsIGRhdGF0eXBlXQogKgogKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb3VjaGJhc2VsYWJzL3Nkay1yZmNzIFJGQy0yMCBhdCBTREsgUkZDcyByZXBvc2l0b3J5CiAqLwpmdW5jdGlvbiBiYXNpY0VuY29kZXJWMSgkdmFsdWUsICRvcHRpb25zKSB7fQoKLyoqCiAqIEV4Y2VwdGlvbiByZXByZXNldGluZyBhbGwgZXJyb3JzIGdlbmVyYXRlZCBieSB0aGUgZXh0ZW5zaW9uCiAqLwpjbGFzcyBFeGNlcHRpb24gZXh0ZW5kcyBcRXhjZXB0aW9uIHt9CgovKioKICogUmVwcmVzZW50cyBDb3VjaGJhc2UgRG9jdW1lbnQsIHdoaWNoIHN0b3JlcyBtZXRhZGF0YSBhbmQgdGhlIHZhbHVlLgogKgogKiBUaGUgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgcmV0dXJuZWQgYnkgSy9WIGNvbW1hbmRzIG9mIHRoZSBcQ291Y2hiYXNlXEJ1Y2tldAogKgogKiBAc2VlIFxDb3VjaGJhc2VcQnVja2V0CiAqLwpjbGFzcyBEb2N1bWVudAp7CiAgICAvKioKICAgICAqIEB2YXIgRXhjZXB0aW9uIGV4Y2VwdGlvbiBvYmplY3QgaW4gY2FzZSBvZiBlcnJvciwgb3IgTlVMTAogICAgICovCiAgICBwdWJsaWMgJGVycm9yOwoKICAgIC8qKgogICAgICogQHZhciBtaXhlZCBUaGUgdmFsdWUgc3RvcmVkIGluIHRoZSBDb3VjaGJhc2UuCiAgICAgKi8KICAgIHB1YmxpYyAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGludCBGbGFncywgZGVzY3JpYmluZyB0aGUgZW5jb2Rpbmcgb2YgdGhlIGRvY3VtZW50IG9uIHRoZSBzZXJ2ZXIgc2lkZS4KICAgICAqLwogICAgcHVibGljICRmbGFnczsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nIFRoZSBsYXN0IGtub3duIENBUyB2YWx1ZSBvZiB0aGUgZG9jdW1lbnQKICAgICAqLwogICAgcHVibGljICRjYXM7CgogICAgLyoqCiAgICAgKiBAdmFyIE11dGF0aW9uVG9rZW4KICAgICAqIFRoZSBvcHRpb25hbCwgb3BhcXVlIG11dGF0aW9uIHRva2VuIHNldCBhZnRlciBhIHN1Y2Nlc3NmdWwgbXV0YXRpb24uCiAgICAgKgogICAgICogTm90ZSB0aGF0IHRoZSBtdXRhdGlvbiB0b2tlbiBpcyBhbHdheXMgTlVMTCwgdW5sZXNzIHRoZXkgYXJlIGV4cGxpY2l0bHkgZW5hYmxlZCBvbiB0aGUKICAgICAqIGNvbm5lY3Rpb24gc3RyaW5nIChgP2ZldGNoX211dGF0aW9uX3Rva2Vucz10cnVlYCksIHRoZSBzZXJ2ZXIgdmVyc2lvbiBpcyBzdXBwb3J0ZWQgKD49IDQuMC4wKQogICAgICogYW5kIHRoZSBtdXRhdGlvbiBvcGVyYXRpb24gc3VjY2VlZGVkLgogICAgICoKICAgICAqIElmIHNldCwgaXQgY2FuIGJlIHVzZWQgZm9yIGVuaGFuY2VkIGR1cmFiaWxpdHkgcmVxdWlyZW1lbnRzLCBhcyB3ZWxsIGFzIG9wdGltaXplZCBjb25zaXN0ZW5jeQogICAgICogZm9yIE4xUUwgcXVlcmllcy4KICAgICAqLwogICAgcHVibGljICR0b2tlbjsKfQoKLyoqCiAqIEEgZnJhZ21lbnQgb2YgYSBKU09OIERvY3VtZW50IHJldHVybmVkIGJ5IHRoZSBzdWItZG9jdW1lbnQgQVBJLgogKgogKiBAc2VlIFxDb3VjaGJhc2VcQnVja2V0OjptdXRhdGVJbigpCiAqIEBzZWUgXENvdWNoYmFzZVxCdWNrZXQ6Omxvb2t1cEluKCkKICovCmNsYXNzIERvY3VtZW50RnJhZ21lbnQKewogICAgLyoqCiAgICAgKiBAdmFyIEV4Y2VwdGlvbiBleGNlcHRpb24gb2JqZWN0IGluIGNhc2Ugb2YgZXJyb3IsIG9yIE5VTEwKICAgICAqLwogICAgcHVibGljICRlcnJvcjsKCiAgICAvKioKICAgICAqIEB2YXIgbWl4ZWQgVGhlIHZhbHVlIHN1Yi1kb2N1bWVudCBjb21tYW5kIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgJHZhbHVlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcgVGhlIGxhc3Qga25vd24gQ0FTIHZhbHVlIG9mIHRoZSBkb2N1bWVudAogICAgICovCiAgICBwdWJsaWMgJGNhczsKCiAgICAvKioKICAgICAqIEB2YXIgTXV0YXRpb25Ub2tlbgogICAgICogVGhlIG9wdGlvbmFsLCBvcGFxdWUgbXV0YXRpb24gdG9rZW4gcmVsYXRlZCB0byB1cGRhdGVkIGRvY3VtZW50IHRoZSBlbnZpcm9ubWVudC4KICAgICAqCiAgICAgKiBOb3RlIHRoYXQgdGhlIG11dGF0aW9uIHRva2VuIGlzIGFsd2F5cyBOVUxMLCB1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSBlbmFibGVkIG9uIHRoZQogICAgICogY29ubmVjdGlvbiBzdHJpbmcgKGA/ZmV0Y2hfbXV0YXRpb25fdG9rZW5zPXRydWVgKSwgdGhlIHNlcnZlciB2ZXJzaW9uIGlzIHN1cHBvcnRlZCAoPj0gNC4wLjApCiAgICAgKiBhbmQgdGhlIG11dGF0aW9uIG9wZXJhdGlvbiBzdWNjZWVkZWQuCiAgICAgKgogICAgICogSWYgc2V0LCBpdCBjYW4gYmUgdXNlZCBmb3IgZW5oYW5jZWQgZHVyYWJpbGl0eSByZXF1aXJlbWVudHMsIGFzIHdlbGwgYXMgb3B0aW1pemVkIGNvbnNpc3RlbmN5CiAgICAgKiBmb3IgTjFRTCBxdWVyaWVzLgogICAgICovCiAgICBwdWJsaWMgJHRva2VuOwp9CgovKioKICogUmVwcmVzZW50cyBhIENvdWNoYmFzZSBTZXJ2ZXIgQ2x1c3Rlci4KICoKICogSXQgaXMgYW4gZW50cnkgcG9pbnQgdG8gdGhlIGxpYnJhcnksIGFuZCBpbiBjaGFyZ2Ugb2Ygb3BlbmluZyBjb25uZWN0aW9ucyB0byB0aGUgQnVja2V0cy4KICogSW4gYWRkaXRpb24gaXQgY2FuIGluc3RhbnRpYXRlIFxDb3VjaGJhc2VcQ2x1c3Rlck1hbmFnZXIgdG8gcGVmb3JtIGNsdXN0ZXItd2lkZSBvcGVyYXRpb25zLgogKgogKiBAc2VlIFxDb3VjaGJhc2VcQnVja2V0CiAqIEBzZWUgXENvdWNoYmFzZVxDbHVzdGVyTWFuYWdlcgogKiBAc2VlIFxDb3VjaGJhc2VcQXV0aGVudGljYXRvcgogKi8KY2xhc3MgQ2x1c3Rlcgp7CiAgICAvKioKICAgICAqIENyZWF0ZSBjbHVzdGVyIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbm5zdHIgY29ubmVjdGlvbiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb25uc3RyKSB7fQoKICAgIC8qKgogICAgICogT3BlbiBjb25uZWN0aW9uIHRvIHRoZSBDb3VjaGJhc2UgYnVja2V0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBOYW1lIG9mIHRoZSBidWNrZXQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBQYXNzd29yZCBvZiB0aGUgYnVja2V0IHRvIG92ZXJyaWRlIGF1dGhlbnRpY2F0b3IuCiAgICAgKiBAcmV0dXJuIEJ1Y2tldAogICAgICoKICAgICAqIEBzZWUgXENvdWNoYmFzZVxBdXRoZW50aWNhdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcGVuQnVja2V0KCRuYW1lID0gImRlZmF1bHQiLCAkcGFzc3dvcmQgPSAiIikge30KCiAgICAvKioKICAgICAqIE9wZW4gbWFuYWdlbWVudCBjb25uZWN0aW9uIHRvIHRoZSBDb3VjaGJhc2UgY2x1c3Rlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBOYW1lIG9mIHRoZSBhZG1pbmlzdHJhdG9yIHRvIG92ZXJyaWRlIGF1dGhlbnRpY2F0b3Igb3IgTlVMTC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFBhc3N3b3JkIG9mIHRoZSBhZG1pbmlzdHJhdG9yIHRvIG92ZXJyaWRlIGF1dGhlbnRpY2F0b3Igb3IgTlVMTC4KICAgICAqIEByZXR1cm4gQ2x1c3Rlck1hbmFnZXIKICAgICAqCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcQXV0aGVudGljYXRvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFuYWdlcigkdXNlcm5hbWUgPSBudWxsLCAkcGFzc3dvcmQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQXNzb2NpYXRlIGF1dGhlbnRpY2F0b3Igd2l0aCBDbHVzdGVyCiAgICAgKgogICAgICogQHBhcmFtIEF1dGhlbnRpY2F0b3IgJGF1dGhlbnRpY2F0b3IKICAgICAqIEByZXR1cm4gbnVsbAogICAgICoKICAgICAqIEBzZWUgXENvdWNoYmFzZVxBdXRoZW50aWNhdG9yCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcQ2xhc3NpY0F1dGhlbnRpY2F0b3IKICAgICAqIEBzZWUgXENvdWNoYmFzZVxQYXNzd29yZEF1dGhlbnRpY2F0b3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGF1dGhlbnRpY2F0ZSgkYXV0aGVudGljYXRvcikge30KCiAgICAvKioKICAgICAqIENyZWF0ZSBcQ291Y2hiYXNlXFBhc3N3b3JkQXV0aGVudGljYXRvciBmcm9tIGdpdmVuIGNyZWRlbnRpYWxzIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBDbHVzdGVyCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkCiAgICAgKiBAcmV0dXJuIG51bGwKICAgICAqCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcQXV0aGVudGljYXRvcgogICAgICogQHNlZSBcQ291Y2hiYXNlXFBhc3N3b3JkQXV0aGVudGljYXRvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXV0aGVudGljYXRlQXMoJHVzZXJuYW1lLCAkcGFzc3dvcmQpIHt9Cn0KCi8qKgogKiBQcm92aWRlcyBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcyBmb3IgYSBDb3VjaGJhc2UgU2VydmVyIENsdXN0ZXIKICoKICogQHNlZSBcQ291Y2hiYXNlXENsdXN0ZXIKICovCmNsYXNzIENsdXN0ZXJNYW5hZ2VyCnsKICAgIC8qKgogICAgICogVGhlIHVzZXIgYWNjb3VudCBtYW5hZ2VkIGJ5IENvdWNoYmFzZSBDbHVzdGVyLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkJBQ19ET01BSU5fTE9DQUwgPSAxOwoKICAgIC8qKgogICAgICogVGhlIHVzZXIgYWNjb3VudCBtYW5hZ2VkIGJ5IGV4dGVybmFsIHN5c3RlbSAoZS5nLiBMREFQKS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJCQUNfRE9NQUlOX0VYVEVSTkFMID0gMjsKCiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIExpc3RzIGFsbCBidWNrZXRzIG9uIHRoaXMgY2x1c3Rlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0QnVja2V0cygpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIG5ldyBidWNrZXQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIE5hbWUgb2YgdGhlIGJ1Y2tldAogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIEJ1Y2tldCBvcHRpb25zCiAgICAgKiAgICogImF1dGhUeXBlIiAoZGVmYXVsdDogInNhc2wiKSB0eXBlIG9mIHRoZSBidWNrZXQgYXV0aGVudGljYXRpb24KICAgICAqICAgKiAiYnVja2V0VHlwZSIgKGRlZmF1bHQ6ICJjb3VjaGJhc2UiKSB0eXBlIG9mIHRoZSBidWNrZXQKICAgICAqICAgKiAicmFtUXVvdGFNQiIgKGRlZmF1bHQ6IDEwMCkgbWVtb3J5IHF1b3RhIG9mIHRoZSBidWNrZXQKICAgICAqICAgKiAicmVwbGljYU51bWJlciIgKGRlZmF1bHQ6IDEpIG51bWJlciBvZiByZXBsaWNhcy4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9yZXN0LWFwaS9yZXN0LWJ1Y2tldC1jcmVhdGUuaHRtbAogICAgICogICBNb3JlIG9wdGlvbnMgYW5kIGRldGFpbHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUJ1Y2tldCgkbmFtZSwgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYSBidWNrZXQgaWRlbnRpZmllZCBieSBpdHMgbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIG5hbWUgb2YgdGhlIGJ1Y2tldAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Jlc3QtYXBpL3Jlc3QtYnVja2V0LWRlbGV0ZS5odG1sCiAgICAgKiAgIE1vcmUgZGV0YWlscwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQnVja2V0KCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNsdXN0ZXIuCiAgICAgKgogICAgICogUmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBzdGF0dXMgaW5mb3JtYXRpb24gYXMgc2VlbiBvbiB0aGUgY2x1c3Rlci4gIFRoZSBleGFjdCBzdHJ1Y3R1cmUgb2YgdGhlIHJldHVybmVkCiAgICAgKiBkYXRhIGNhbiBiZSBzZWVuIGluIHRoZSBDb3VjaGJhc2UgTWFudWFsIGJ5IGxvb2tpbmcgYXQgdGhlIGNsdXN0ZXIgL2luZm8gZW5kcG9pbnQuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Jlc3QtYXBpL3Jlc3QtY2x1c3Rlci1nZXQuaHRtbAogICAgICogICBSZXRyaWV2aW5nIENsdXN0ZXIgSW5mb3JtYXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluZm8oKSB7fQoKICAgIC8qKgogICAgICogTGlzdHMgYWxsIHVzZXJzIG9uIHRoaXMgY2x1c3Rlci4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRkb21haW4gUkJBQyBkb21haW4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKgogICAgICogQHNlZSBcQ291Y2hiYXNlXENsdXN0ZXJNYW5hZ2VyOjpSQkFDX0RPTUFJTl9MT0NBTAogICAgICogQHNlZSBcQ291Y2hiYXNlXENsdXN0ZXJNYW5hZ2VyOjpSQkFDX0RPTUFJTl9FWFRFUk5BTAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdFVzZXJzKCRkb21haW4gPSBSQkFDX0RPTUFJTl9MT0NBTCkge30KCiAgICAvKioKICAgICAqIEZldGNoIHNpbmdsZSB1c2VyIGJ5IGl0cyBuYW1lCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgVGhlIHVzZXIncyBpZGVudGlmaWVyCiAgICAgKiBAcGFyYW0gaW50ICRkb21haW4gUkJBQyBkb21haW4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKgogICAgICogQHNlZSBcQ291Y2hiYXNlXENsdXN0ZXJNYW5hZ2VyOjpSQkFDX0RPTUFJTl9MT0NBTAogICAgICogQHNlZSBcQ291Y2hiYXNlXENsdXN0ZXJNYW5hZ2VyOjpSQkFDX0RPTUFJTl9FWFRFUk5BTAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlcigkdXNlcm5hbWUsICRkb21haW4gPSBSQkFDX0RPTUFJTl9MT0NBTCkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgbmV3IHVzZXIKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIE5hbWUgb2YgdGhlIHVzZXIKICAgICAqIEBwYXJhbSBcQ291Y2hiYXNlXFVzZXJTZXR0aW5ncyAkc2V0dGluZ3Mgc2V0dGluZ3MgKGNyZWRlbnRpYWxzIGFuZCByb2xlcykKICAgICAqIEBwYXJhbSBpbnQgJGRvbWFpbiBSQkFDIGRvbWFpbgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci81LjAvcmVzdC1hcGkvcmJhYy5odG1sCiAgICAgKiAgIE1vcmUgb3B0aW9ucyBhbmQgZGV0YWlscwogICAgICogQHNlZSBcQ291Y2hiYXNlXENsdXN0ZXJNYW5hZ2VyOjpSQkFDX0RPTUFJTl9MT0NBTAogICAgICogQHNlZSBcQ291Y2hiYXNlXENsdXN0ZXJNYW5hZ2VyOjpSQkFDX0RPTUFJTl9FWFRFUk5BTAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdXBzZXJ0VXNlcigkbmFtZSwgJHNldHRpbmdzLCAkZG9tYWluID0gUkJBQ19ET01BSU5fTE9DQUwpIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIGEgdXNlciBpZGVudGlmaWVkIGJ5IGl0cyBuYW1lLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgbmFtZSBvZiB0aGUgYnVja2V0CiAgICAgKiBAcGFyYW0gaW50ICRkb21haW4gUkJBQyBkb21haW4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvNS4wL3Jlc3QtYXBpL3JiYWMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMKICAgICAqIEBzZWUgXENvdWNoYmFzZVxDbHVzdGVyTWFuYWdlcjo6UkJBQ19ET01BSU5fTE9DQUwKICAgICAqIEBzZWUgXENvdWNoYmFzZVxDbHVzdGVyTWFuYWdlcjo6UkJBQ19ET01BSU5fRVhURVJOQUwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZVVzZXIoJG5hbWUsICRkb21haW4gPSBSQkFDX0RPTUFJTl9MT0NBTCkge30KfQoKLyoqCiAqIFJlcHJlc2VudHMgc2V0dGluZ3MgZm9yIG5ldy91cGRhdGVkIHVzZXIuCiAqCiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci81LjAvcmVzdC1hcGkvcmJhYy5odG1sCiAqLwpjbGFzcyBVc2VyU2V0dGluZ3MKewogICAgLyoqCiAgICAgKiBTZXRzIGZ1bGwgbmFtZSBvZiB0aGUgdXNlciAob3B0aW9uYWwpLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZ1bGxOYW1lIEZ1bGwgbmFtZSBvZiB0aGUgdXNlcgogICAgICoKICAgICAqIEByZXR1cm4gXENvdWNoYmFzZVxVc2VyU2V0dGluZ3MKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvNS4wL3Jlc3QtYXBpL3JiYWMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZ1bGxOYW1lKCRmdWxsTmFtZSkge30KCiAgICAvKioKICAgICAqIFNldHMgcGFzc3dvcmQgb2YgdGhlIHVzZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQgUGFzc3dvcmQgb2YgdGhlIHVzZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIFxDb3VjaGJhc2VcVXNlclNldHRpbmdzCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyLzUuMC9yZXN0LWFwaS9yYmFjLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXNzd29yZCgkcGFzc3dvcmQpIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIHJvbGUgdG8gdGhlIGxpc3Qgb2YgdGhlIGFjY2Vzc2libGUgcm9sZXMgb2YgdGhlIHVzZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcm9sZSBpZGVudGlmaWVyIG9mIHRoZSByb2xlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRidWNrZXQgdGhlIGJ1Y2tldCB3aGVyZSB0aGlzIHJvbGUgYXBwbGljYWJsZSAob3IgYCpgIGZvciBhbGwgYnVja2V0cykKICAgICAqCiAgICAgKiBAcmV0dXJuIFxDb3VjaGJhc2VcVXNlclNldHRpbmdzCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyLzUuMC9yZXN0LWFwaS9yYmFjLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb2xlKCRyb2xlLCAkYnVja2V0ID0gbnVsbCkge30KfQoKLyoqCiAqIFJlcHJlc2VudHMgY29ubmVjdGlvbiB0byB0aGUgQ291Y2hiYXNlIFNlcnZlcgogKgogKiBAcHJvcGVydHkgaW50ICRvcGVyYXRpb25UaW1lb3V0CiAqICAgVGhlIG9wZXJhdGlvbiB0aW1lb3V0IChpbiBtaWNyb3NlY29uZHMpIGlzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIHRoZQogKiAgIGxpYnJhcnkgd2lsbCB3YWl0IGZvciBhbiBvcGVyYXRpb24gdG8gcmVjZWl2ZSBhIHJlc3BvbnNlIGJlZm9yZSBpbnZva2luZwogKiAgIGl0cyBjYWxsYmFjayB3aXRoIGEgZmFpbHVyZSBzdGF0dXMuCiAqCiAqICAgQW4gb3BlcmF0aW9uIG1heSB0aW1lb3V0IGlmOgogKgogKiAgICogQSBzZXJ2ZXIgaXMgdGFraW5nIHRvbyBsb25nIHRvIHJlc3BvbmQKICogICAqIEFuIHVwZGF0ZWQgY2x1c3RlciBjb25maWd1cmF0aW9uIGhhcyBub3QgYmVlbiBwcm9tcHRseSByZWNlaXZlZAogKgogKiBAcHJvcGVydHkgaW50ICR2aWV3VGltZW91dAogKiAgIFRoZSBJL08gdGltZW91dCAoaW4gbWljcm9zZWNvbmRzKSBmb3IgSFRUUCByZXF1ZXN0cyB0byBDb3VjaGJhc2UgVmlld3MgQVBJCiAqCiAqIEBwcm9wZXJ0eSBpbnQgJG4xcWxUaW1lb3V0CiAqICAgVGhlIEkvTyB0aW1lb3V0IChpbiBtaWNyb3NlY29uZHMpIGZvciBOMVFMIHF1ZXJpZXMuCiAqCiAqIEBwcm9wZXJ0eSBpbnQgJGh0dHBUaW1lb3V0CiAqICAgVGhlIEkvTyB0aW1lb3V0IChpbiBtaWNyb3NlY29uZHMpIGZvciBIVFRQIHF1ZXJpZXMgKG1hbmFnZW1lbnQgQVBJKS4KICoKICogQHByb3BlcnR5IGludCAkY29uZmlnVGltZW91dAogKiAgIEhvdyBsb25nIChpbiBtaWNyb3NlY29uZHMpIHRoZSBjbGllbnQgd2lsbCB3YWl0IHRvIG9idGFpbiB0aGUgaW5pdGlhbAogKiAgIGNvbmZpZ3VyYXRpb24uCiAqCiAqIEBwcm9wZXJ0eSBpbnQgJGNvbmZpZ05vZGVUaW1lb3V0CiAqICAgUGVyLW5vZGUgY29uZmlndXJhdGlvbiB0aW1lb3V0IChpbiBtaWNyb3NlY29uZHMpLgogKgogKiAgIFRoaXMgdGltZW91dCBzZXRzIHRoZSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGZvciBlYWNoIG5vZGUgd2l0aGluCiAqICAgdGhlIGJvb3RzdHJhcC9jb25maWd1cmF0aW9uIHByb2Nlc3MuIFRoaXMgaW50ZXJ2YWwgaXMgYSBzdWJzZXQgb2YKICogICB0aGUgJGNvbmZpZ1RpbWVvdXQgb3B0aW9uIG1lbnRpb25lZCBhYm92ZSBhbmQgaXMgaW50ZW5kZWQgdG8gZW5zdXJlCiAqICAgdGhhdCB0aGUgYm9vdHN0cmFwIHByb2Nlc3MgZG9lcyBub3Qgd2FpdCB0b28gbG9uZyBmb3IgYSBnaXZlbiBub2RlLgogKiAgIE5vZGVzIHRoYXQgYXJlIHBoeXNpY2FsbHkgb2ZmbGluZSBtYXkgbmV2ZXIgcmVzcG9uZCBhbmQgaXQgbWF5IHRha2UKICogICBhIGxvbmcgdGltZSB1bnRpbCB0aGV5IGFyZSBkZXRlY3RlZCBhcyBiZWluZyBvZmZsaW5lLgogKgogKiBAcHJvcGVydHkgaW50ICRjb25maWdEZWxheQogKiAgIENvbmZpZyByZWZyZXNoIHRocm90dGxpbmcKICoKICogICBNb2RpZnkgdGhlIGFtb3VudCBvZiB0aW1lIChpbiBtaWNyb3NlY29uZHMpIGJlZm9yZSB0aGUgY29uZmlnaXJhdGlvbgogKiAgIGVycm9yIHRocmVzaG9sZCB3aWxsIGZvcmNlZnVsbHkgYmUgc2V0IHRvIGl0cyBtYXhpbXVtIG51bWJlciBmb3JjaW5nCiAqICAgYSBjb25maWd1cmF0aW9uIHJlZnJlc2guCiAqCiAqICAgTm90ZSB0aGF0IGlmIHlvdSBleHBlY3QgYSBoaWdoIG51bWJlciBvZiB0aW1lb3V0cyBpbiB5b3VyIG9wZXJhdGlvbnMsCiAqICAgeW91IHNob3VsZCBzZXQgdGhpcyB0byBhIGhpZ2ggbnVtYmVyLiBJZiB5b3UgYXJlIHVzaW5nIHRoZSBkZWZhdWx0CiAqICAgdGltZW91dCBzZXR0aW5nLCB0aGVuIHRoaXMgdmFsdWUgaXMgbGlrZWx5IG9wdGltYWwuCiAqCiAqIEBwcm9wZXJ0eSBpbnQgJGh0Y29uZmlnSWRsZVRpbWVvdXQKICogICBJZGxpbmcvUGVyc2lzdGVuY2UgZm9yIEhUVFAgYm9vdHN0cmFwIChpbiBtaWNyb3NlY29uZHMpCiAqCiAqICAgQnkgZGVmYXVsdCB0aGUgYmVoYXZpb3Igb2YgdGhlIGxpYnJhcnkgZm9yIEhUVFAgYm9vdHN0cmFwIGlzIHRvIGtlZXAKICogICB0aGUgc3RyZWFtIG9wZW4gYXQgYWxsIHRpbWVzIChvcGVuaW5nIGEgbmV3IHN0cmVhbSBvbiBhIGRpZmZlcmVudCBob3N0CiAqICAgaWYgdGhlIGV4aXN0aW5nIG9uZSBpcyBicm9rZW4pIGluIG9yZGVyIHRvIHByb2FjdGl2ZWx5IHJlY2VpdmUKICogICBjb25maWd1cmF0aW9uIHVwZGF0ZXMuCiAqCiAqICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgc2V0dGluZyBpcyAtMS4gQ2hhbmdpbmcgdGhpcyB0byBhbm90aGVyCiAqICAgbnVtYmVyIGludm9rZXMgdGhlIGZvbGxvd2luZyBzZW1hbnRpY3M6CiAqCiAqICAgKiBUaGUgY29uZmlndXJhdGlvbiBzdHJlYW0gaXMgbm90IGtlcHQgYWxpdmUgaW5kZWZpbml0ZWx5LiBJdCBpcyBrZXB0CiAqICAgICBvcGVuIGZvciB0aGUgbnVtYmVyIG9mIHNlY29uZHMgc3BlY2lmaWVkIGluIHRoaXMgc2V0dGluZy4gVGhlIHNvY2tldAogKiAgICAgaXMgY2xvc2VkIGFmdGVyIGEgcGVyaW9kIG9mIGluYWN0aXZpdHkgKGluZGljYXRlZCBieSB0aGlzIHNldHRpbmcpLgogKgogKiAgICogSWYgdGhlIHN0cmVhbSBpcyBicm9rZW4gKGFuZCBubyBjdXJyZW50IHJlZnJlc2ggd2FzIHJlcXVlc3RlZCBieQogKiAgICAgdGhlIGNsaWVudCkgdGhlbiBhIG5ldyBzdHJlYW0gaXMgbm90IG9wZW5lZC4KICoKICogQHByb3BlcnR5IGludCAkZHVyYWJpbGl0eUludGVydmFsCiAqICAgVGhlIHRpbWUgKGluIG1pY3Jvc2Vjb25kcykgdGhlIGNsaWVudCB3aWxsIHdhaXQgYmV0d2VlbiByZXBlYXRlZCBwcm9iZXMKICogICB0byBhIGdpdmVuIHNlcnZlci4KICoKICogQHByb3BlcnR5IGludCAkZHVyYWJpbGl0eVRpbWVvdXQKICogICBUaGUgdGltZSAoaW4gbWljcm9zZWNvbmRzKSB0aGUgY2xpZW50IHdpbGwgc3BlbmQgc2VuZGluZyByZXBlYXRlZCBwcm9iZXMKICogICB0byBhIGdpdmVuIGtleSdzIHZCdWNrZXQgbWFzdGVycyBhbmQgcmVwbGljYXMgYmVmb3JlIHRoZXkgYXJlIGRlZW1lZCBub3QKICogICB0byBoYXZlIHNhdGlzZmllZCB0aGUgZHVyYWJpbGl0eSByZXF1aXJlbWVudHMKICoKICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3BocC9zdGFydC11c2luZy1zZGsuaHRtbAogKiAgIFN0YXJ0IFVzaW5nIFNESwogKi8KY2xhc3MgQnVja2V0CnsKICAgIC8qKiBQaW5nIGRhdGEgKEtleS9WYWx1ZSkgc2VydmljZS4gKi8KICAgIHB1YmxpYyBjb25zdCBQSU5HU1ZDX0tWID0gMHgwMTsKCiAgICAvKiogUGluZyBxdWVyeSAoTjFRTCkgc2VydmljZS4gKi8KICAgIHB1YmxpYyBjb25zdCBQSU5HU1ZDX04xUUwgPSAweDAyOwoKICAgIC8qKiBQaW5nIHZpZXdzIChNYXAvUmVkdWNlKSBzZXJ2aWNlLiAqLwogICAgcHVibGljIGNvbnN0IFBJTkdTVkNfVklFV1MgPSAweDA0OwoKICAgIC8qKiBQaW5nIGZ1bGwgdGV4dCBzZWFyY2ggKEZUUykgc2VydmljZS4gKi8KICAgIHB1YmxpYyBjb25zdCBQSU5HU1ZDX0ZUUyA9IDB4MDg7CgogICAgZmluYWwgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fZ2V0KCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIGludCAkdmFsdWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19zZXQoJG5hbWUsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGJ1Y2tldCBmb3IgY3VycmVudCBjb25uZWN0aW9uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBhIENvdWNoYmFzZUJ1Y2tldE1hbmFnZXIgZm9yIHBlcmZvcm1pbmcgbWFuYWdlbWVudCBvcGVyYXRpb25zIGFnYWluc3QgYSBidWNrZXQuCiAgICAgKgogICAgICogQHJldHVybiBCdWNrZXRNYW5hZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYW5hZ2VyKCkge30KCiAgICAvKioKICAgICAqIFNldHMgY3VzdG9tIGVuY29kZXIgYW5kIGRlY29kZXIgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBzZXJpYWxpemF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkZW5jb2RlcgogICAgICogQHBhcmFtIGNhbGxhYmxlICRkZWNvZGVyCiAgICAgKgogICAgICogQHNlZSBcQ291Y2hiYXNlXGRlZmF1bHRFbmNvZGVyCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcZGVmYXVsdERlY29kZXIKICAgICAqIEBzZWUgXENvdWNoYmFzZVxwYXNzdGhydUVuY29kZXIKICAgICAqIEBzZWUgXENvdWNoYmFzZVxwYXNzdGhydURlY29kZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRyYW5zY29kZXIoJGVuY29kZXIsICRkZWNvZGVyKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmVzIGEgZG9jdW1lbnQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRpZHMgb25lIG9yIG1vcmUgSURzCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgb3B0aW9ucwogICAgICogICAqICJsb2NrVGltZSIgbm9uIHplcm8gaWYgdGhlIGRvY3VtZW50cyBoYXZlIHRvIGJlIGxvY2tlZAogICAgICogICAqICJleHBpcnkiIG5vbiB6ZXJvIGlmIHRoZSBleHBpcmF0aW9uIHRpbWUgc2hvdWxkIGJlIHVwZGF0ZWQKICAgICAqICAgKiAiZ3JvdXBpZCIgb3ZlcnJpZGUgdmFsdWUgZm9yIGhhc2hpbmcgKG5vdCByZWNvbW1lbmRlZCB0byB1c2UpCiAgICAgKiBAcmV0dXJuIFxDb3VjaGJhc2VcRG9jdW1lbnR8YXJyYXkgZG9jdW1lbnQgb3IgbGlzdCBvZiB0aGUgZG9jdW1lbnRzCiAgICAgKgogICAgICogQHNlZSBcQ291Y2hiYXNlXEJ1Y2tldDo6Z2V0QW5kTG9jaygpCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcQnVja2V0OjpnZXRBbmRUb3VjaCgpCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcQnVja2V0Ojp1bmxvY2soKQogICAgICogQHNlZSBcQ291Y2hiYXNlXEJ1Y2tldDo6dG91Y2goKQogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL2NvcmUtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE92ZXJ2aWV3IG9mIEsvViBvcGVyYXRpb25zCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvcGhwL2RvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMgYWJvdXQgSy9WIG9wZXJhdGlvbnMgZm9yIFBIUCBTREsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCgkaWRzLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmVzIGEgZG9jdW1lbnQgYW5kIGxvY2tzIGl0LgogICAgICoKICAgICAqIEFmdGVyIHRoZSBkb2N1bWVudCBoYXMgYmVlbiBsb2NrZWQgb24gdGhlIHNlcnZlciwgaXRzIENBUyB3b3VsZCBiZSBtYXNrZWQsCiAgICAgKiBhbmQgYWxsIG11dGF0aW9ucyBvZiBpdCB3aWxsIGJlIHJlamVjdGVkIHVudGlsIHRoZSBzZXJ2ZXIgdW5sb2NrcyB0aGUgZG9jdW1lbnQKICAgICAqIGF1dG9tYXRpY2FsbHkgb3IgaXQgd2lsbCBiZSBkb25lIG1hbnVhbGx5IHdpdGggXENvdWNoYmFzZVxCdWNrZXQ6OnVubG9jaygpIG9wZXJhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRpZHMgb25lIG9yIG1vcmUgSURzCiAgICAgKiBAcGFyYW0gaW50ICRsb2NrVGltZSB0aW1lIHRvIGxvY2sgdGhlIGRvY3VtZW50cwogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIG9wdGlvbnMKICAgICAqICAgKiAiZ3JvdXBpZCIgb3ZlcnJpZGUgdmFsdWUgZm9yIGhhc2hpbmcgKG5vdCByZWNvbW1lbmRlZCB0byB1c2UpCiAgICAgKiBAcmV0dXJuIFxDb3VjaGJhc2VcRG9jdW1lbnR8YXJyYXkgZG9jdW1lbnQgb3IgbGlzdCBvZiB0aGUgZG9jdW1lbnRzCiAgICAgKgogICAgICogQHNlZSBcQ291Y2hiYXNlXEJ1Y2tldDo6dW5sb2NrKCkKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9jb3JlLW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBLL1Ygb3BlcmF0aW9ucwogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3BocC9kb2N1bWVudC1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzIGFib3V0IEsvViBvcGVyYXRpb25zIGZvciBQSFAgU0RLCiAgICAgKiBAc2VlIGh0dHBzOi8vZm9ydW1zLmNvdWNoYmFzZS5jb20vdC9pcy10aGVyZS1hLXdheS10by1kby1wZXNzaW1pc3RpYy1sb2NraW5nLWZvci1tb3JlLXRoYW4tMzAtc2Vjb25kcy8xMDY2Ni8zCiAgICAgKiAgIEZvcnVtIHBvc3QgYWJvdXQgZ2V0dGluZyBzZXJ2ZXIgZGVmYXVsdHMgZm9yIHRoZSAkbG9ja1RpbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFuZExvY2soJGlkcywgJGxvY2tUaW1lLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmVzIGEgZG9jdW1lbnQgYW5kIHVwZGF0ZXMgaXRzIGV4cGlyYXRpb24gdGltZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRpZHMgb25lIG9yIG1vcmUgSURzCiAgICAgKiBAcGFyYW0gaW50ICRleHBpcnkgdGltZSBhZnRlciB3aGljaCB0aGUgZG9jdW1lbnQgd2lsbCBub3QgYmUgYWNjZXNzaWJsZS4KICAgICAqICAgICAgSWYgbGFyZ2VyIHRoYW4gMzAgZGF5cyAoNjAqNjAqMjQqMzApLCBpdCB3aWxsIGJlIGludGVycHJldGVkIGJ5IHRoZQogICAgICogICAgICBzZXJ2ZXIgYXMgYWJzb2x1dGUgVU5JWCB0aW1lIChzZWNvbmRzIGZyb20gZXBvY2ggMTk3MC0wMS0wMVQwMDowMDowMCkuCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgb3B0aW9ucwogICAgICogICAqICJncm91cGlkIiBvdmVycmlkZSB2YWx1ZSBmb3IgaGFzaGluZyAobm90IHJlY29tbWVuZGVkIHRvIHVzZSkKICAgICAqIEByZXR1cm4gXENvdWNoYmFzZVxEb2N1bWVudHxhcnJheSBkb2N1bWVudCBvciBsaXN0IG9mIHRoZSBkb2N1bWVudHMKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvY29yZS1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgT3ZlcnZpZXcgb2YgSy9WIG9wZXJhdGlvbnMKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9waHAvZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE1vcmUgZGV0YWlscyBhYm91dCBLL1Ygb3BlcmF0aW9ucyBmb3IgUEhQIFNESwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QW5kVG91Y2goJGlkcywgJGV4cGlyeSwgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIGRvY3VtZW50IGZyb20gYSByZXBsaWNhLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJGlkcyBvbmUgb3IgbW9yZSBJRHMKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBvcHRpb25zCiAgICAgKiAgICogImluZGV4IiB0aGUgcmVwbGljYSBpbmRleC4gSWYgdGhlIGluZGV4IGlzIHplcm8sIGl0IHdpbGwgcmV0dXJuCiAgICAgKiAgICAgIGZpcnN0IHN1Y2Nlc3NmdWwgcmVwbGljYSwgb3RoZXJ3aXNlIGl0IHdpbGwgcmVhZCBvbmx5IHNlbGVjdGVkIG5vZGUuCiAgICAgKiAgICogImdyb3VwaWQiIG92ZXJyaWRlIHZhbHVlIGZvciBoYXNoaW5nIChub3QgcmVjb21tZW5kZWQgdG8gdXNlKQogICAgICogQHJldHVybiBcQ291Y2hiYXNlXERvY3VtZW50fGFycmF5IGRvY3VtZW50IG9yIGxpc3Qgb2YgdGhlIGRvY3VtZW50cwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9jb3JlLW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBLL1Ygb3BlcmF0aW9ucwogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3BocC9kb2N1bWVudC1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzIGFib3V0IEsvViBvcGVyYXRpb25zIGZvciBQSFAgU0RLCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvcGhwL2ZhaWx1cmUtY29uc2lkZXJhdGlvbnMuaHRtbAogICAgICogIE1vcmUgYWJvdXQgZmFpbHVyZSBjb25zaWRlcmF0aW9ucy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyb21SZXBsaWNhKCRpZHMsICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBJbnNlcnRzIG9yIHVwZGF0ZXMgYSBkb2N1bWVudCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGRvY3VtZW50IGFscmVhZHkgZXhpc3RzIG9uIHRoZSBjbHVzdGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJGlkcyBvbmUgb3IgbW9yZSBJRHMKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgdmFsdWUgb2YgdGhlIGRvY3VtZW50CiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgb3B0aW9ucwogICAgICogICAqICJleHBpcnkiIGRvY3VtZW50IGV4cGlyYXRpb24gdGltZSBpbiBzZWNvbmRzLiBJZiBsYXJnZXIgdGhhbiAzMCBkYXlzICg2MCo2MCoyNCozMCksCiAgICAgKiAgICAgIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYnkgdGhlIHNlcnZlciBhcyBhYnNvbHV0ZSBVTklYIHRpbWUgKHNlY29uZHMgZnJvbSBlcG9jaAogICAgICogICAgICAxOTcwLTAxLTAxVDAwOjAwOjAwKS4KICAgICAqICAgKiAicGVyc2lzdF90byIgaG93IG1hbnkgbm9kZXMgdGhlIGtleSBzaG91bGQgYmUgcGVyc2lzdGVkIHRvIChpbmNsdWRpbmcgbWFzdGVyKS4KICAgICAqICAgICAgSWYgc2V0IHRvIDAgdGhlbiBwZXJzaXN0ZW5jZSB3aWxsIG5vdCBiZSBjaGVja2VkLiBJZiBzZXQgdG8gYSBuZWdhdGl2ZQogICAgICogICAgICBudW1iZXIsIHdpbGwgYmUgc2V0IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyB0byB3aGljaCBwZXJzaXN0ZW5jZQogICAgICogICAgICBpcyBwb3NzaWJsZSAod2hpY2ggd2lsbCBhbHdheXMgY29udGFpbiBhdCBsZWFzdCB0aGUgbWFzdGVyIG5vZGUpLgogICAgICogICAqICJyZXBsaWNhdGVfdG8iIGhvdyBtYW55IG5vZGVzIHRoZSBrZXkgc2hvdWxkIGJlIHBlcnNpc3RlZCB0byAoZXhjbHVkaW5nIG1hc3RlcikuCiAgICAgKiAgICAgIElmIHNldCB0byAwIHRoZW4gcmVwbGljYXRpb24gd2lsbCBub3QgYmUgY2hlY2tlZC4gSWYgc2V0IHRvIGEgbmVnYXRpdmUKICAgICAqICAgICAgbnVtYmVyLCB3aWxsIGJlIHNldCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgdG8gd2hpY2ggcmVwbGljYXRpb24KICAgICAqICAgICAgaXMgcG9zc2libGUgKHdoaWNoIG1heSBiZSAwIGlmIHRoZSBidWNrZXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIHJlcGxpY2FzKS4KICAgICAqICAgKiAiZmxhZ3MiIG92ZXJyaWRlIGZsYWdzIChub3QgcmVjb21tZW5kZWQgdG8gdXNlKQogICAgICogICAqICJncm91cGlkIiBvdmVycmlkZSB2YWx1ZSBmb3IgaGFzaGluZyAobm90IHJlY29tbWVuZGVkIHRvIHVzZSkKICAgICAqIEByZXR1cm4gXENvdWNoYmFzZVxEb2N1bWVudHxhcnJheSBkb2N1bWVudCBvciBsaXN0IG9mIHRoZSBkb2N1bWVudHMKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvY29yZS1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgT3ZlcnZpZXcgb2YgSy9WIG9wZXJhdGlvbnMKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9waHAvZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE1vcmUgZGV0YWlscyBhYm91dCBLL1Ygb3BlcmF0aW9ucyBmb3IgUEhQIFNESwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdXBzZXJ0KCRpZHMsICR2YWx1ZSwgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIEluc2VydHMgYSBkb2N1bWVudC4gVGhpcyBvcGVyYXRpb24gd2lsbCBmYWlsIGlmIHRoZSBkb2N1bWVudCBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgY2x1c3Rlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRpZHMgb25lIG9yIG1vcmUgSURzCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIHZhbHVlIG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIG9wdGlvbnMKICAgICAqICAgKiAiZXhwaXJ5IiBkb2N1bWVudCBleHBpcmF0aW9uIHRpbWUgaW4gc2Vjb25kcy4gSWYgbGFyZ2VyIHRoYW4gMzAgZGF5cyAoNjAqNjAqMjQqMzApLAogICAgICogICAgICBpdCB3aWxsIGJlIGludGVycHJldGVkIGJ5IHRoZSBzZXJ2ZXIgYXMgYWJzb2x1dGUgVU5JWCB0aW1lIChzZWNvbmRzIGZyb20gZXBvY2gKICAgICAqICAgICAgMTk3MC0wMS0wMVQwMDowMDowMCkuCiAgICAgKiAgICogInBlcnNpc3RfdG8iIGhvdyBtYW55IG5vZGVzIHRoZSBrZXkgc2hvdWxkIGJlIHBlcnNpc3RlZCB0byAoaW5jbHVkaW5nIG1hc3RlcikuCiAgICAgKiAgICAgIElmIHNldCB0byAwIHRoZW4gcGVyc2lzdGVuY2Ugd2lsbCBub3QgYmUgY2hlY2tlZC4gSWYgc2V0IHRvIGEgbmVnYXRpdmUKICAgICAqICAgICAgbnVtYmVyLCB3aWxsIGJlIHNldCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgdG8gd2hpY2ggcGVyc2lzdGVuY2UKICAgICAqICAgICAgaXMgcG9zc2libGUgKHdoaWNoIHdpbGwgYWx3YXlzIGNvbnRhaW4gYXQgbGVhc3QgdGhlIG1hc3RlciBub2RlKS4KICAgICAqICAgKiAicmVwbGljYXRlX3RvIiBob3cgbWFueSBub2RlcyB0aGUga2V5IHNob3VsZCBiZSBwZXJzaXN0ZWQgdG8gKGV4Y2x1ZGluZyBtYXN0ZXIpLgogICAgICogICAgICBJZiBzZXQgdG8gMCB0aGVuIHJlcGxpY2F0aW9uIHdpbGwgbm90IGJlIGNoZWNrZWQuIElmIHNldCB0byBhIG5lZ2F0aXZlCiAgICAgKiAgICAgIG51bWJlciwgd2lsbCBiZSBzZXQgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIHRvIHdoaWNoIHJlcGxpY2F0aW9uCiAgICAgKiAgICAgIGlzIHBvc3NpYmxlICh3aGljaCBtYXkgYmUgMCBpZiB0aGUgYnVja2V0IGlzIG5vdCBjb25maWd1cmVkIGZvciByZXBsaWNhcykuCiAgICAgKiAgICogImZsYWdzIiBvdmVycmlkZSBmbGFncyAobm90IHJlY29tbWVuZGVkIHRvIHVzZSkKICAgICAqICAgKiAiZ3JvdXBpZCIgb3ZlcnJpZGUgdmFsdWUgZm9yIGhhc2hpbmcgKG5vdCByZWNvbW1lbmRlZCB0byB1c2UpCiAgICAgKiBAcmV0dXJuIFxDb3VjaGJhc2VcRG9jdW1lbnR8YXJyYXkgZG9jdW1lbnQgb3IgbGlzdCBvZiB0aGUgZG9jdW1lbnRzCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL2NvcmUtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE92ZXJ2aWV3IG9mIEsvViBvcGVyYXRpb25zCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvcGhwL2RvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMgYWJvdXQgSy9WIG9wZXJhdGlvbnMgZm9yIFBIUCBTREsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluc2VydCgkaWRzLCAkdmFsdWUsICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBSZXBsYWNlcyBhIGRvY3VtZW50LiBUaGlzIG9wZXJhdGlvbiB3aWxsIGZhaWwgaWYgdGhlIGRvY3VtZW50IGRvZXMgbm90IGV4aXN0cyBvbiB0aGUgY2x1c3Rlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRpZHMgb25lIG9yIG1vcmUgSURzCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIHZhbHVlIG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIG9wdGlvbnMKICAgICAqICAgKiAiY2FzIiBsYXN0IGtub3duIGRvY3VtZW50IENBUywgd2hpY2ggc2VydmVzIGZvciBvcHRpbWlzdGljIGxvY2tpbmcuCiAgICAgKiAgICogImV4cGlyeSIgZG9jdW1lbnQgZXhwaXJhdGlvbiB0aW1lIGluIHNlY29uZHMuIElmIGxhcmdlciB0aGFuIDMwIGRheXMgKDYwKjYwKjI0KjMwKSwKICAgICAqICAgICAgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCBieSB0aGUgc2VydmVyIGFzIGFic29sdXRlIFVOSVggdGltZSAoc2Vjb25kcyBmcm9tIGVwb2NoCiAgICAgKiAgICAgIDE5NzAtMDEtMDFUMDA6MDA6MDApLgogICAgICogICAqICJwZXJzaXN0X3RvIiBob3cgbWFueSBub2RlcyB0aGUga2V5IHNob3VsZCBiZSBwZXJzaXN0ZWQgdG8gKGluY2x1ZGluZyBtYXN0ZXIpLgogICAgICogICAgICBJZiBzZXQgdG8gMCB0aGVuIHBlcnNpc3RlbmNlIHdpbGwgbm90IGJlIGNoZWNrZWQuIElmIHNldCB0byBhIG5lZ2F0aXZlCiAgICAgKiAgICAgIG51bWJlciwgd2lsbCBiZSBzZXQgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIHRvIHdoaWNoIHBlcnNpc3RlbmNlCiAgICAgKiAgICAgIGlzIHBvc3NpYmxlICh3aGljaCB3aWxsIGFsd2F5cyBjb250YWluIGF0IGxlYXN0IHRoZSBtYXN0ZXIgbm9kZSkuCiAgICAgKiAgICogInJlcGxpY2F0ZV90byIgaG93IG1hbnkgbm9kZXMgdGhlIGtleSBzaG91bGQgYmUgcGVyc2lzdGVkIHRvIChleGNsdWRpbmcgbWFzdGVyKS4KICAgICAqICAgICAgSWYgc2V0IHRvIDAgdGhlbiByZXBsaWNhdGlvbiB3aWxsIG5vdCBiZSBjaGVja2VkLiBJZiBzZXQgdG8gYSBuZWdhdGl2ZQogICAgICogICAgICBudW1iZXIsIHdpbGwgYmUgc2V0IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyB0byB3aGljaCByZXBsaWNhdGlvbgogICAgICogICAgICBpcyBwb3NzaWJsZSAod2hpY2ggbWF5IGJlIDAgaWYgdGhlIGJ1Y2tldCBpcyBub3QgY29uZmlndXJlZCBmb3IgcmVwbGljYXMpLgogICAgICogICAqICJmbGFncyIgb3ZlcnJpZGUgZmxhZ3MgKG5vdCByZWNvbW1lbmRlZCB0byB1c2UpCiAgICAgKiAgICogImdyb3VwaWQiIG92ZXJyaWRlIHZhbHVlIGZvciBoYXNoaW5nIChub3QgcmVjb21tZW5kZWQgdG8gdXNlKQogICAgICogQHJldHVybiBcQ291Y2hiYXNlXERvY3VtZW50fGFycmF5IGRvY3VtZW50IG9yIGxpc3Qgb2YgdGhlIGRvY3VtZW50cwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9jb3JlLW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBLL1Ygb3BlcmF0aW9ucwogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3BocC9kb2N1bWVudC1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzIGFib3V0IEsvViBvcGVyYXRpb25zIGZvciBQSFAgU0RLCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlKCRpZHMsICR2YWx1ZSwgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIEFwcGVuZHMgY29udGVudCB0byBhIGRvY3VtZW50LgogICAgICoKICAgICAqIE9uIHRoZSBzZXJ2ZXIgc2lkZSBpdCBqdXN0IGNvbnRhdGVuYXRlIHBhc3NlZCB2YWx1ZSB0byB0aGUgZXhpc3Rpbmcgb25lLgogICAgICogTm90ZSB0aGF0IHRoaXMgbWlnaHQgbWFrZSB0aGUgdmFsdWUgdW4tZGVjb2RhYmxlLiBDb25zaWRlciBzdWItZG9jdW1lbnQgQVBJCiAgICAgKiBmb3IgcGFydGlhbCB1cGRhdGVzIG9mIHRoZSBKU09OIGRvY3VtZW50cy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRpZHMgb25lIG9yIG1vcmUgSURzCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIHZhbHVlIG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIG9wdGlvbnMKICAgICAqICAgKiAiY2FzIiBsYXN0IGtub3duIGRvY3VtZW50IENBUywgd2hpY2ggc2VydmVzIGZvciBvcHRpbWlzdGljIGxvY2tpbmcuCiAgICAgKiAgICogImV4cGlyeSIgZG9jdW1lbnQgZXhwaXJhdGlvbiB0aW1lIGluIHNlY29uZHMuIElmIGxhcmdlciB0aGFuIDMwIGRheXMgKDYwKjYwKjI0KjMwKSwKICAgICAqICAgICAgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCBieSB0aGUgc2VydmVyIGFzIGFic29sdXRlIFVOSVggdGltZSAoc2Vjb25kcyBmcm9tIGVwb2NoCiAgICAgKiAgICAgIDE5NzAtMDEtMDFUMDA6MDA6MDApLgogICAgICogICAqICJwZXJzaXN0X3RvIiBob3cgbWFueSBub2RlcyB0aGUga2V5IHNob3VsZCBiZSBwZXJzaXN0ZWQgdG8gKGluY2x1ZGluZyBtYXN0ZXIpLgogICAgICogICAgICBJZiBzZXQgdG8gMCB0aGVuIHBlcnNpc3RlbmNlIHdpbGwgbm90IGJlIGNoZWNrZWQuIElmIHNldCB0byBhIG5lZ2F0aXZlCiAgICAgKiAgICAgIG51bWJlciwgd2lsbCBiZSBzZXQgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIHRvIHdoaWNoIHBlcnNpc3RlbmNlCiAgICAgKiAgICAgIGlzIHBvc3NpYmxlICh3aGljaCB3aWxsIGFsd2F5cyBjb250YWluIGF0IGxlYXN0IHRoZSBtYXN0ZXIgbm9kZSkuCiAgICAgKiAgICogInJlcGxpY2F0ZV90byIgaG93IG1hbnkgbm9kZXMgdGhlIGtleSBzaG91bGQgYmUgcGVyc2lzdGVkIHRvIChleGNsdWRpbmcgbWFzdGVyKS4KICAgICAqICAgICAgSWYgc2V0IHRvIDAgdGhlbiByZXBsaWNhdGlvbiB3aWxsIG5vdCBiZSBjaGVja2VkLiBJZiBzZXQgdG8gYSBuZWdhdGl2ZQogICAgICogICAgICBudW1iZXIsIHdpbGwgYmUgc2V0IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyB0byB3aGljaCByZXBsaWNhdGlvbgogICAgICogICAgICBpcyBwb3NzaWJsZSAod2hpY2ggbWF5IGJlIDAgaWYgdGhlIGJ1Y2tldCBpcyBub3QgY29uZmlndXJlZCBmb3IgcmVwbGljYXMpLgogICAgICogICAqICJncm91cGlkIiBvdmVycmlkZSB2YWx1ZSBmb3IgaGFzaGluZyAobm90IHJlY29tbWVuZGVkIHRvIHVzZSkKICAgICAqIEByZXR1cm4gXENvdWNoYmFzZVxEb2N1bWVudHxhcnJheSBkb2N1bWVudCBvciBsaXN0IG9mIHRoZSBkb2N1bWVudHMKICAgICAqCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcQnVja2V0OjptdXRhdGVJbigpCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvY29yZS1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgT3ZlcnZpZXcgb2YgSy9WIG9wZXJhdGlvbnMKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9waHAvZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE1vcmUgZGV0YWlscyBhYm91dCBLL1Ygb3BlcmF0aW9ucyBmb3IgUEhQIFNESwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKCRpZHMsICR2YWx1ZSwgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFByZXBlbmRzIGNvbnRlbnQgdG8gYSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBPbiB0aGUgc2VydmVyIHNpZGUgaXQganVzdCBjb250YXRlbmF0ZSBleGlzdGluZyB2YWx1ZSB0byB0aGUgcGFzc2VkIG9uZS4KICAgICAqIE5vdGUgdGhhdCB0aGlzIG1pZ2h0IG1ha2UgdGhlIHZhbHVlIHVuLWRlY29kYWJsZS4gQ29uc2lkZXIgc3ViLWRvY3VtZW50IEFQSQogICAgICogZm9yIHBhcnRpYWwgdXBkYXRlcyBvZiB0aGUgSlNPTiBkb2N1bWVudHMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAkaWRzIG9uZSBvciBtb3JlIElEcwogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSB2YWx1ZSBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBvcHRpb25zCiAgICAgKiAgICogImNhcyIgbGFzdCBrbm93biBkb2N1bWVudCBDQVMsIHdoaWNoIHNlcnZlcyBmb3Igb3B0aW1pc3RpYyBsb2NraW5nLgogICAgICogICAqICJleHBpcnkiIGRvY3VtZW50IGV4cGlyYXRpb24gdGltZSBpbiBzZWNvbmRzLiBJZiBsYXJnZXIgdGhhbiAzMCBkYXlzICg2MCo2MCoyNCozMCksCiAgICAgKiAgICAgIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYnkgdGhlIHNlcnZlciBhcyBhYnNvbHV0ZSBVTklYIHRpbWUgKHNlY29uZHMgZnJvbSBlcG9jaAogICAgICogICAgICAxOTcwLTAxLTAxVDAwOjAwOjAwKS4KICAgICAqICAgKiAicGVyc2lzdF90byIgaG93IG1hbnkgbm9kZXMgdGhlIGtleSBzaG91bGQgYmUgcGVyc2lzdGVkIHRvIChpbmNsdWRpbmcgbWFzdGVyKS4KICAgICAqICAgICAgSWYgc2V0IHRvIDAgdGhlbiBwZXJzaXN0ZW5jZSB3aWxsIG5vdCBiZSBjaGVja2VkLiBJZiBzZXQgdG8gYSBuZWdhdGl2ZQogICAgICogICAgICBudW1iZXIsIHdpbGwgYmUgc2V0IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBub2RlcyB0byB3aGljaCBwZXJzaXN0ZW5jZQogICAgICogICAgICBpcyBwb3NzaWJsZSAod2hpY2ggd2lsbCBhbHdheXMgY29udGFpbiBhdCBsZWFzdCB0aGUgbWFzdGVyIG5vZGUpLgogICAgICogICAqICJyZXBsaWNhdGVfdG8iIGhvdyBtYW55IG5vZGVzIHRoZSBrZXkgc2hvdWxkIGJlIHBlcnNpc3RlZCB0byAoZXhjbHVkaW5nIG1hc3RlcikuCiAgICAgKiAgICAgIElmIHNldCB0byAwIHRoZW4gcmVwbGljYXRpb24gd2lsbCBub3QgYmUgY2hlY2tlZC4gSWYgc2V0IHRvIGEgbmVnYXRpdmUKICAgICAqICAgICAgbnVtYmVyLCB3aWxsIGJlIHNldCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgdG8gd2hpY2ggcmVwbGljYXRpb24KICAgICAqICAgICAgaXMgcG9zc2libGUgKHdoaWNoIG1heSBiZSAwIGlmIHRoZSBidWNrZXQgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIHJlcGxpY2FzKS4KICAgICAqICAgKiAiZ3JvdXBpZCIgb3ZlcnJpZGUgdmFsdWUgZm9yIGhhc2hpbmcgKG5vdCByZWNvbW1lbmRlZCB0byB1c2UpCiAgICAgKiBAcmV0dXJuIFxDb3VjaGJhc2VcRG9jdW1lbnR8YXJyYXkgZG9jdW1lbnQgb3IgbGlzdCBvZiB0aGUgZG9jdW1lbnRzCiAgICAgKgogICAgICogQHNlZSBcQ291Y2hiYXNlXEJ1Y2tldDo6bXV0YXRlSW4oKQogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL2NvcmUtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE92ZXJ2aWV3IG9mIEsvViBvcGVyYXRpb25zCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvcGhwL2RvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMgYWJvdXQgSy9WIG9wZXJhdGlvbnMgZm9yIFBIUCBTREsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXBlbmQoJGlkcywgJHZhbHVlLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyB0aGUgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAkaWRzIG9uZSBvciBtb3JlIElEcwogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIG9wdGlvbnMKICAgICAqICAgKiAiY2FzIiBsYXN0IGtub3duIGRvY3VtZW50IENBUywgd2hpY2ggc2VydmVzIGZvciBvcHRpbWlzdGljIGxvY2tpbmcuCiAgICAgKiAgICogImdyb3VwaWQiIG92ZXJyaWRlIHZhbHVlIGZvciBoYXNoaW5nIChub3QgcmVjb21tZW5kZWQgdG8gdXNlKQogICAgICogQHJldHVybiBcQ291Y2hiYXNlXERvY3VtZW50fGFycmF5IGRvY3VtZW50IG9yIGxpc3Qgb2YgdGhlIGRvY3VtZW50cwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9jb3JlLW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBLL1Ygb3BlcmF0aW9ucwogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3BocC9kb2N1bWVudC1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzIGFib3V0IEsvViBvcGVyYXRpb25zIGZvciBQSFAgU0RLCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoJGlkcywgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFVubG9ja3MgcHJldmlvdXNseSBsb2NrZWQgZG9jdW1lbnQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRpZHMgb25lIG9yIG1vcmUgSURzCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgb3B0aW9ucwogICAgICogICAqICJjYXMiIGxhc3Qga25vd24gZG9jdW1lbnQgQ0FTLCB3aGljaCBoYXMgYmVlbiByZXR1cm5lZCBieSBsb2NraW5nIGNvbW1hbmQuCiAgICAgKiAgICogImdyb3VwaWQiIG92ZXJyaWRlIHZhbHVlIGZvciBoYXNoaW5nIChub3QgcmVjb21tZW5kZWQgdG8gdXNlKQogICAgICogQHJldHVybiBcQ291Y2hiYXNlXERvY3VtZW50fGFycmF5IGRvY3VtZW50IG9yIGxpc3Qgb2YgdGhlIGRvY3VtZW50cwogICAgICoKICAgICAqIEBzZWUgXENvdWNoYmFzZVxCdWNrZXQ6OmdldCgpCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcQnVja2V0OjpnZXRBbmRMb2NrKCkKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9jb3JlLW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBLL1Ygb3BlcmF0aW9ucwogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3BocC9kb2N1bWVudC1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzIGFib3V0IEsvViBvcGVyYXRpb25zIGZvciBQSFAgU0RLCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bmxvY2soJGlkcywgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFVwZGF0ZXMgZG9jdW1lbnQncyBleHBpcmF0aW9uIHRpbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAkaWRzIG9uZSBvciBtb3JlIElEcwogICAgICogQHBhcmFtIGludCAkZXhwaXJ5IHRpbWUgYWZ0ZXIgd2hpY2ggdGhlIGRvY3VtZW50IHdpbGwgbm90IGJlIGFjY2Vzc2libGUuCiAgICAgKiAgICAgIElmIGxhcmdlciB0aGFuIDMwIGRheXMgKDYwKjYwKjI0KjMwKSwgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCBieSB0aGUKICAgICAqICAgICAgc2VydmVyIGFzIGFic29sdXRlIFVOSVggdGltZSAoc2Vjb25kcyBmcm9tIGVwb2NoIDE5NzAtMDEtMDFUMDA6MDA6MDApLgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIG9wdGlvbnMKICAgICAqICAgKiAiZ3JvdXBpZCIgb3ZlcnJpZGUgdmFsdWUgZm9yIGhhc2hpbmcgKG5vdCByZWNvbW1lbmRlZCB0byB1c2UpCiAgICAgKiBAcmV0dXJuIFxDb3VjaGJhc2VcRG9jdW1lbnR8YXJyYXkgZG9jdW1lbnQgb3IgbGlzdCBvZiB0aGUgZG9jdW1lbnRzCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL2NvcmUtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE92ZXJ2aWV3IG9mIEsvViBvcGVyYXRpb25zCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvcGhwL2RvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMgYWJvdXQgSy9WIG9wZXJhdGlvbnMgZm9yIFBIUCBTREsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvdWNoKCRpZHMsICRleHBpcnksICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnRzIG9yIGRlY3JlbWVudHMgYSBrZXkgKGJhc2VkIG9uICRkZWx0YSkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRpZHMgb25lIG9yIG1vcmUgSURzCiAgICAgKiBAcGFyYW0gaW50ICRkZWx0YSB0aGUgbnVtYmVyIHdoaWggZGV0ZXJtaW5lcyB0aGUgc2lnbiAocG9zaXRpdmUvbmVnYXRpdmUpIGFuZCB0aGUgdmFsdWUgb2YgdGhlIGluY3JlbWVudAogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIG9wdGlvbnMKICAgICAqICAgKiAiaW5pdGlhbCIgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgY291bnRlciBpZiBpdCBkb2VzIG5vdCBleGlzdAogICAgICogICAqICJleHBpcnkiIHRpbWUgYWZ0ZXIgd2hpY2ggdGhlIGRvY3VtZW50IHdpbGwgbm90IGJlIGFjY2Vzc2libGUuCiAgICAgKiAgICAgIElmIGxhcmdlciB0aGFuIDMwIGRheXMgKDYwKjYwKjI0KjMwKSwgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCBieSB0aGUKICAgICAqICAgICAgc2VydmVyIGFzIGFic29sdXRlIFVOSVggdGltZSAoc2Vjb25kcyBmcm9tIGVwb2NoIDE5NzAtMDEtMDFUMDA6MDA6MDApLgogICAgICogICAqICJncm91cGlkIiBvdmVycmlkZSB2YWx1ZSBmb3IgaGFzaGluZyAobm90IHJlY29tbWVuZGVkIHRvIHVzZSkKICAgICAqIEByZXR1cm4gXENvdWNoYmFzZVxEb2N1bWVudHxhcnJheSBkb2N1bWVudCBvciBsaXN0IG9mIHRoZSBkb2N1bWVudHMKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvY29yZS1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgT3ZlcnZpZXcgb2YgSy9WIG9wZXJhdGlvbnMKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9waHAvZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE1vcmUgZGV0YWlscyBhYm91dCBLL1Ygb3BlcmF0aW9ucyBmb3IgUEhQIFNESwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnRlcigkaWRzLCAkZGVsdGEgPSAxLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGJ1aWxkZXIgZm9yIHJlYWRpbmcgc3ViZG9jdW1lbnQgQVBJLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIFRoZSBJRCBvZiB0aGUgSlNPTiBkb2N1bWVudAogICAgICogQHJldHVybiBMb29rdXBJbkJ1aWxkZXIKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvc3ViZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE92ZXJ2aWV3IG9mIFN1Yi1Eb2N1bWVudCBPcGVyYXRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb29rdXBJbigkaWQpIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgc3BlY2lmaWVkIHBhdGhzIGluIEpTT04gZG9jdW1lbnQKICAgICAqCiAgICAgKiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgc2hvcnRjdXQgZm9yIGBsb29rdXBJbigkaWQpLT5nZXQoJHBhdGhzKS0+ZXhlY3V0ZSgpYC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBUaGUgSUQgb2YgdGhlIEpTT04gZG9jdW1lbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgLi4uJHBhdGhzIExpc3Qgb2YgdGhlIHBhdGhzIGluc2lkZSBKU09OIGRvY3VtZW50cyAoc2VlICJQYXRoIHN5bnRheCIgc2VjdGlvbiBvZiB0aGUKICAgICAqICAgIlN1Yi1Eb2N1bWVudCBPcGVyYXRpb25zIiBkb2N1bWVudGF0aW9uKS4KICAgICAqIEByZXR1cm4gXENvdWNoYmFzZVxEb2N1bWVudEZyYWdtZW50CiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3N1YmRvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBTdWItRG9jdW1lbnQgT3BlcmF0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV0cmlldmVJbigkaWQsIC4uLiRwYXRocykge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBidWlsZGVyIGZvciB3cml0aW5nIHN1YmRvY3VtZW50IEFQSS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBUaGUgSUQgb2YgdGhlIEpTT04gZG9jdW1lbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNhcyBMYXN0IGtub3duIGRvY3VtZW50IENBUyB2YWx1ZSBmb3Igb3B0aW1pc3RpIGxvY2tpbmcKICAgICAqIEByZXR1cm4gTXV0YXRlSW5CdWlsZGVyCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3N1YmRvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBTdWItRG9jdW1lbnQgT3BlcmF0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXV0YXRlSW4oJGlkLCAkY2FzKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgYSBxdWVyeSB0byBDb3VjaGJhc2UgU2VydmVyCiAgICAgKgogICAgICogQHBhcmFtIE4xcWxRdWVyeXxWaWV3UXVlcnl8U3BhdGlhbFZpZXdRdWVyeXxTZWFyY2hRdWVyeXxBbmFseXRpY3NRdWVyeSAkcXVlcnkKICAgICAqIEBwYXJhbSBib29sICRqc29uQXNBcnJheSBpZiB0cnVlLCB0aGUgdmFsdWVzIGluIHRoZSByZXN1bHQgcm93cyAob3IgaGl0cykgd2lsbCBiZSByZXByZXNlbnRlZCBhcwogICAgICogICAgUEhQIGFycmF5cywgb3RoZXJ3aXNlIHRoZXkgd2lsbCBiZSBpbnN0YW5jZXMgb2YgdGhlIGBzdGRDbGFzc2AKICAgICAqIEByZXR1cm4gb2JqZWN0IFF1ZXJ5LXNwZWNpZmljIHJlc3VsdCBvYmplY3QuCiAgICAgKgogICAgICogQHNlZSBcQ291Y2hiYXNlXE4xcWxRdWVyeQogICAgICogQHNlZSBcQ291Y2hiYXNlXFNlYXJjaFF1ZXJ5CiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcVmlld1F1ZXJ5CiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcU3BhdGlhbFZpZXdRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVlcnkoJHF1ZXJ5LCAkanNvbkFzQXJyYXkgPSBmYWxzZSkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgc2l6ZSBvZiB0aGUgbWFwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgSUQgb2YgdGhlIGRvY3VtZW50CiAgICAgKiBAcmV0dXJuIGludCBudW1iZXIgb2YgdGhlIGtleS12YWx1ZSBwYWlycwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9waHAvZGF0YXN0cnVjdHVyZXMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMgb24gRGF0YSBTdHJ1Y3R1cmVzCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvc3ViZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE92ZXJ2aWV3IG9mIFN1Yi1Eb2N1bWVudCBPcGVyYXRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXBTaXplKCRpZCkge30KCiAgICAvKioKICAgICAqIEFkZCBrZXkgdG8gdGhlIG1hcAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIElEIG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIHN0cmluZyAka2V5IGtleQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSB2YWx1ZQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9waHAvZGF0YXN0cnVjdHVyZXMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMgb24gRGF0YSBTdHJ1Y3R1cmVzCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvc3ViZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE92ZXJ2aWV3IG9mIFN1Yi1Eb2N1bWVudCBPcGVyYXRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXBBZGQoJGlkLCAka2V5LCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIGtleSBmcm9tIHRoZSBtYXAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBJRCBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBrZXkKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvcGhwL2RhdGFzdHJ1Y3R1cmVzLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzIG9uIERhdGEgU3RydWN0dXJlcwogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3N1YmRvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBTdWItRG9jdW1lbnQgT3BlcmF0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFwUmVtb3ZlKCRpZCwgJGtleSkge30KCiAgICAvKioKICAgICAqIEdldCBhbiBpdGVtIGZyb20gYSBtYXAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBJRCBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBrZXkKICAgICAqIEByZXR1cm4gbWl4ZWQgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvcGhwL2RhdGFzdHJ1Y3R1cmVzLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzIG9uIERhdGEgU3RydWN0dXJlcwogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3N1YmRvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBTdWItRG9jdW1lbnQgT3BlcmF0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFwR2V0KCRpZCwgJGtleSkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgc2l6ZSBvZiB0aGUgc2V0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgSUQgb2YgdGhlIGRvY3VtZW50CiAgICAgKiBAcmV0dXJuIGludCBudW1iZXIgb2YgdGhlIGVsZW1lbnRzCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3BocC9kYXRhc3RydWN0dXJlcy5odG1sCiAgICAgKiAgIE1vcmUgZGV0YWlscyBvbiBEYXRhIFN0cnVjdHVyZXMKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9zdWJkb2N1bWVudC1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgT3ZlcnZpZXcgb2YgU3ViLURvY3VtZW50IE9wZXJhdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFNpemUoJGlkKSB7fQoKICAgIC8qKgogICAgICogQWRkIHZhbHVlIHRvIHRoZSBzZXQKICAgICAqCiAgICAgKiBOb3RlLCB0aGF0IGN1cnJlbnRseSBvbmx5IHByaW1pdGl2ZSB2YWx1ZXMgY291bGQgYmUgc3RvcmVkIGluIHRoZSBzZXQgKHN0cmluZ3MsIGludGVnZXJzIGFuZCBib29sZWFucykuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgSUQgb2YgdGhlIGRvY3VtZW50CiAgICAgKiBAcGFyYW0gc3RyaW5nfGludHxmbG9hdHxib29sICR2YWx1ZSBuZXcgdmFsdWUKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvcGhwL2RhdGFzdHJ1Y3R1cmVzLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzIG9uIERhdGEgU3RydWN0dXJlcwogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3N1YmRvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBTdWItRG9jdW1lbnQgT3BlcmF0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QWRkKCRpZCwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgdGhlIHZhbHVlIGV4aXN0cyBpbiB0aGUgc2V0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgSUQgb2YgdGhlIGRvY3VtZW50CiAgICAgKiBAcGFyYW0gc3RyaW5nfGludHxmbG9hdHxib29sICR2YWx1ZSB2YWx1ZSB0byBjaGVjawogICAgICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIHZhbHVlIGV4aXN0cyBpbiB0aGUgc2V0CiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3BocC9kYXRhc3RydWN0dXJlcy5odG1sCiAgICAgKiAgIE1vcmUgZGV0YWlscyBvbiBEYXRhIFN0cnVjdHVyZXMKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9zdWJkb2N1bWVudC1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgT3ZlcnZpZXcgb2YgU3ViLURvY3VtZW50IE9wZXJhdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEV4aXN0cygkaWQsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSB2YWx1ZSBmcm9tIHRoZSBzZXQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBJRCBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBzdHJpbmd8aW50fGZsb2F0fGJvb2wgJHZhbHVlIHZhbHVlIHRvIHJlbW92ZQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9waHAvZGF0YXN0cnVjdHVyZXMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMgb24gRGF0YSBTdHJ1Y3R1cmVzCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvc3ViZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE92ZXJ2aWV3IG9mIFN1Yi1Eb2N1bWVudCBPcGVyYXRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZW1vdmUoJGlkLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHNpemUgb2YgdGhlIGxpc3QKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBJRCBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEByZXR1cm4gaW50IG51bWJlciBvZiB0aGUgZWxlbWVudHMKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvcGhwL2RhdGFzdHJ1Y3R1cmVzLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzIG9uIERhdGEgU3RydWN0dXJlcwogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3N1YmRvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBTdWItRG9jdW1lbnQgT3BlcmF0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdFNpemUoJGlkKSB7fQoKICAgIC8qKgogICAgICogQWRkIGFuIGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIElEIG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBuZXcgdmFsdWUKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvcGhwL2RhdGFzdHJ1Y3R1cmVzLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzIG9uIERhdGEgU3RydWN0dXJlcwogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3N1YmRvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBTdWItRG9jdW1lbnQgT3BlcmF0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdFB1c2goJGlkLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBBZGQgYW4gZWxlbWVudCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgSUQgb2YgdGhlIGRvY3VtZW50CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIG5ldyB2YWx1ZQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9waHAvZGF0YXN0cnVjdHVyZXMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMgb24gRGF0YSBTdHJ1Y3R1cmVzCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvc3ViZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE92ZXJ2aWV3IG9mIFN1Yi1Eb2N1bWVudCBPcGVyYXRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0U2hpZnQoJGlkLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgYW4gZWxlbWVudCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBJRCBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4IGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIGJlIHJlbW92ZWQKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvcGhwL2RhdGFzdHJ1Y3R1cmVzLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzIG9uIERhdGEgU3RydWN0dXJlcwogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3N1YmRvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBTdWItRG9jdW1lbnQgT3BlcmF0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdFJlbW92ZSgkaWQsICRpbmRleCkge30KCiAgICAvKioKICAgICAqIEdldCBhbiBlbGVtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIElEIG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIGludCAkaW5kZXggaW5kZXggb2YgdGhlIGVsZW1lbnQKICAgICAqIEByZXR1cm4gbWl4ZWQgdGhlIHZhbHVlCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3BocC9kYXRhc3RydWN0dXJlcy5odG1sCiAgICAgKiAgIE1vcmUgZGV0YWlscyBvbiBEYXRhIFN0cnVjdHVyZXMKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9zdWJkb2N1bWVudC1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgT3ZlcnZpZXcgb2YgU3ViLURvY3VtZW50IE9wZXJhdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpc3RHZXQoJGlkLCAkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgYW4gZWxlbWVudCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBJRCBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4IGluZGV4IG9mIHRoZSBlbGVtZW50CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIG5ldyB2YWx1ZQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9waHAvZGF0YXN0cnVjdHVyZXMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMgb24gRGF0YSBTdHJ1Y3R1cmVzCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvc3ViZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE92ZXJ2aWV3IG9mIFN1Yi1Eb2N1bWVudCBPcGVyYXRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0U2V0KCRpZCwgJGluZGV4LCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiB0aGUgbGlzdCBjb250YWlucyBzcGVjaWZpZWQgdmFsdWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBJRCBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgdmFsdWUgdG8gbG9vayBmb3IKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBsaXN0IGNvbnRhaW5zIHRoZSB2YWx1ZQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9waHAvZGF0YXN0cnVjdHVyZXMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMgb24gRGF0YSBTdHJ1Y3R1cmVzCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvc3ViZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE92ZXJ2aWV3IG9mIFN1Yi1Eb2N1bWVudCBPcGVyYXRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0RXhpc3RzKCRpZCwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBzaXplIG9mIHRoZSBxdWV1ZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIElEIG9mIHRoZSBkb2N1bWVudAogICAgICogQHJldHVybiBpbnQgbnVtYmVyIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgcXVldWUKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvcGhwL2RhdGFzdHJ1Y3R1cmVzLmh0bWwKICAgICAqICAgTW9yZSBkZXRhaWxzIG9uIERhdGEgU3RydWN0dXJlcwogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3N1YmRvY3VtZW50LW9wZXJhdGlvbnMuaHRtbAogICAgICogICBPdmVydmlldyBvZiBTdWItRG9jdW1lbnQgT3BlcmF0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVldWVTaXplKCRpZCkge30KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGUgcXVldWUgY29udGFpbnMgc3BlY2lmaWVkIHZhbHVlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgSUQgb2YgdGhlIGRvY3VtZW50CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIHZhbHVlIHRvIGxvb2sgZm9yCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgcXVldWUgY29udGFpbnMgdGhlIHZhbHVlCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3BocC9kYXRhc3RydWN0dXJlcy5odG1sCiAgICAgKiAgIE1vcmUgZGV0YWlscyBvbiBEYXRhIFN0cnVjdHVyZXMKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9zdWJkb2N1bWVudC1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgT3ZlcnZpZXcgb2YgU3ViLURvY3VtZW50IE9wZXJhdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHF1ZXVlRXhpc3RzKCRpZCwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQWRkIGFuIGVsZW1lbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcXVldWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBJRCBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgbmV3IHZhbHVlCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3BocC9kYXRhc3RydWN0dXJlcy5odG1sCiAgICAgKiAgIE1vcmUgZGV0YWlscyBvbiBEYXRhIFN0cnVjdHVyZXMKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9zdWJkb2N1bWVudC1vcGVyYXRpb25zLmh0bWwKICAgICAqICAgT3ZlcnZpZXcgb2YgU3ViLURvY3VtZW50IE9wZXJhdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHF1ZXVlQWRkKCRpZCwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIHRoZSBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlIGFuZCByZXR1cm4gaXQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBJRCBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEByZXR1cm4gbWl4ZWQgcmVtb3ZlZCB2YWx1ZQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9waHAvZGF0YXN0cnVjdHVyZXMuaHRtbAogICAgICogICBNb3JlIGRldGFpbHMgb24gRGF0YSBTdHJ1Y3R1cmVzCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvc3ViZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAgICAgKiAgIE92ZXJ2aWV3IG9mIFN1Yi1Eb2N1bWVudCBPcGVyYXRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBxdWV1ZVJlbW92ZSgkaWQpIHt9CgogICAgLyoqCiAgICAgKiBUcnkgdG8gcmVhY2ggc3BlY2lmaWVkIHNlcnZpY2VzLCBhbmQgbWVhc3VyZSBuZXR3b3JrIGxhdGVuY3kuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2VydmljZXMgYml0d2lzZSBtYXNrIG9mIHJlcXVpcmVkIHNlcnZpY2VzIChhbmQgYWxsIHNlcnZpY2VzIHdoZW4gemVybykKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlcG9ydElkIGN1c3RvbSBpZGVudGlmaWVyLCB3aGljaCB3aWxsIGJlIGFwcGVuZGVkIHRvICJpZCIgcHJvcGVydHkgaW4gcmVwb3J0CiAgICAgKiBAcmV0dXJuIGFycmF5IHRoZSByZXBvcnQgb2JqZWN0CiAgICAgKgogICAgICogQHNlZSBcQ291Y2hiYXNlXEJ1Y2tldDo6UElOR1NWQ19LVgogICAgICogQHNlZSBcQ291Y2hiYXNlXEJ1Y2tldDo6UElOR1NWQ19OMVFMCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcQnVja2V0OjpQSU5HU1ZDX1ZJRVdTCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcQnVja2V0OjpQSU5HU1ZDX0ZUUwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvdWNoYmFzZWxhYnMvc2RrLXJmY3MvYmxvYi9tYXN0ZXIvcmZjLzAwMzQtaGVhbHRoLWNoZWNrLm1kCiAgICAgKiAgIFNESyBSRkMgIzM0LCB3aGljaCBkZXNjcmliZXMgdGhlIGZlYXR1cmUgYW5kIHJlcG9ydCBsYXlvdXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwaW5nKCRzZXJ2aWNlcyA9IDAsICRyZXBvcnRJZCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBDb2xsZWN0IGFuZCByZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgc3RhdGUgb2YgaW50ZXJuYWwgbmV0d29yayBjb25uZWN0aW9ucy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZXBvcnRJZCBjdXN0b20gaWRlbnRpZmllciwgd2hpY2ggd2lsbCBiZSBhcHBlbmRlZCB0byAiaWQiIHByb3BlcnR5IGluIHJlcG9ydAogICAgICogQHJldHVybiBhcnJheSB0aGUgcmVwb3J0IG9iamVjdAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvdWNoYmFzZWxhYnMvc2RrLXJmY3MvYmxvYi9tYXN0ZXIvcmZjLzAwMzQtaGVhbHRoLWNoZWNrLm1kCiAgICAgKiAgIFNESyBSRkMgIzM0LCB3aGljaCBkZXNjcmliZXMgdGhlIGZlYXR1cmUgYW5kIHJlcG9ydCBsYXlvdXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaWFnKCRyZXBvcnRJZCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBFbmNyeXB0IGZpZWxkcyBpbnNpZGUgc3BlY2lmaWVkIGRvY3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkZG9jdW1lbnQgZG9jdW1lbnQgc3RydWN0dXJlCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZpZWxkT3B0aW9ucyBzcGVjaWZpY2F0aW9uIGZvciBmaWVsZHMgbmVlZGVkIHRvIGJlIGVuY3J5cHRlZC4gV2hlcmUgJ2FsZycgY29udGFpbnMKICAgICAqICAgYSBzdHJpbmcgd2l0aCBhbGlhcyBvZiB0aGUgcmVnaXN0ZWQgY3J5cHRvIHByb3ZpZGVyLCBhbmQgJ25hbWUnIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBmaWVsZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeCBvcHRpb25hbCBwcmVmaXggZm9yIG1vZGlmaWVkIGZpZWxkICh3aGVuIG51bGwsIHRoZSBsaWJyYXJ5IHdpbGwgdXNlICJfX2NyeXB0IikKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IHdoZXJlIHRoZSBmaWVsZHMgZW5jcnlwdGVkCiAgICAgKgogICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY291Y2hiYXNlL3BocC1jb3VjaGJhc2UtZW5jcnlwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jcnlwdEZpZWxkcygkZG9jdW1lbnQsICRmaWVsZE9wdGlvbnMsICRwcmVmaXggPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogRGVjcnlwdCBmaWVsZHMgaW5zaWRlIHNwZWNpZmllZCBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGRvY3VtZW50IGRvY3VtZW50IHN0cnVjdHVyZQogICAgICogQHBhcmFtIGFycmF5ICRmaWVsZE9wdGlvbnMgc3BlY2lmaWNhdGlvbiBmb3IgZmllbGRzIG5lZWRlZCB0byBiZSBkZWNyeXB0ZWQuIFdoZXJlICdhbGcnIGNvbnRhaW5zCiAgICAgKiAgIGEgc3RyaW5nIHdpdGggYWxpYXMgb2YgdGhlIHJlZ2lzdGVkIGNyeXB0byBwcm92aWRlciwgYW5kICduYW1lJyBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZmllbGQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcmVmaXggb3B0aW9uYWwgcHJlZml4IGZvciBtb2RpZmllZCBmaWVsZCAod2hlbiBudWxsLCB0aGUgbGlicmFyeSB3aWxsIHVzZSAiX19jcnlwdCIpCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSB3aGVyZSB0aGUgZmllbGRzIGRlY3J5cHRlZAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvdWNoYmFzZS9waHAtY291Y2hiYXNlLWVuY3J5cHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlY3J5cHRGaWVsZHMoJGRvY3VtZW50LCAkZmllbGRPcHRpb25zLCAkcHJlZml4ID0gbnVsbCkge30KfQoKLyoqCiAqIFByb3ZpZGVzIG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzIGZvciB0aGUgQ291Y2hiYXNlIEJ1Y2tldAogKi8KY2xhc3MgQnVja2V0TWFuYWdlcgp7CiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGJ1Y2tldAogICAgICoKICAgICAqIFJldHVybnMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2Ygc3RhdHVzIGluZm9ybWF0aW9uIGFzIHNlZW4gYnkgdGhlIGNsdXN0ZXIgZm9yCiAgICAgKiB0aGlzIGJ1Y2tldC4gVGhlIGV4YWN0IHN0cnVjdHVyZSBvZiB0aGUgcmV0dXJuZWQgZGF0YSBjYW4gYmUgc2VlbiBpbiB0aGUgQ291Y2hiYXNlCiAgICAgKiBNYW51YWwgYnkgbG9va2luZyBhdCB0aGUgYnVja2V0IC9pbmZvIGVuZHBvaW50LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9yZXN0LWFwaS9yZXN0LWJ1Y2tldC1pbmZvLmh0bWwKICAgICAqICAgR2V0dGluZyBTaW5nbGUgQnVja2V0IEluZm9ybWF0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvKCkge30KCiAgICAvKioKICAgICAqIEZsdXNoZXMgdGhlIGJ1Y2tldCAoY2xlYXJzIGFsbCBkYXRhKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmx1c2goKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbGwgZGVzaWduIGRvY3VtZW50cyBvZiB0aGUgYnVja2V0LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpc3REZXNpZ25Eb2N1bWVudHMoKSB7fQoKICAgIC8qKgogICAgICogR2V0IGRlc2lnbiBkb2N1bWVudCBieSBpdHMgbmFtZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgbmFtZSBvZiB0aGUgZGVzaWduIGRvY3VtZW50ICh3aXRob3V0IF9kZXNpZ24vIHByZWZpeCkKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERlc2lnbkRvY3VtZW50KCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBkZXNpZ24gZG9jdW1lbnQgYnkgaXRzIG5hbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIG5hbWUgb2YgdGhlIGRlc2lnbiBkb2N1bWVudCAod2l0aG91dCBfZGVzaWduLyBwcmVmaXgpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVEZXNpZ25Eb2N1bWVudCgkbmFtZSkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgb3IgcmVwbGFjZXMgZGVzaWduIGRvY3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgbmFtZSBvZiB0aGUgZGVzaWduIGRvY3VtZW50ICh3aXRob3V0IF9kZXNpZ24vIHByZWZpeCkKICAgICAqIEBwYXJhbSBhcnJheSAkZG9jdW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVwc2VydERlc2lnbkRvY3VtZW50KCRuYW1lLCAkZG9jdW1lbnQpIHt9CgogICAgLyoqCiAgICAgKiBJbnNlcnRzIGRlc2lnbiBkb2N1bWVudCBhbmQgZmFpbHMgaWYgaXQgaXMgZXhpc3QgYWxyZWFkeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIG5hbWUgb2YgdGhlIGRlc2lnbiBkb2N1bWVudCAod2l0aG91dCBfZGVzaWduLyBwcmVmaXgpCiAgICAgKiBAcGFyYW0gYXJyYXkgJGRvY3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbnNlcnREZXNpZ25Eb2N1bWVudCgkbmFtZSwgJGRvY3VtZW50KSB7fQoKICAgIC8qKgogICAgICogTGlzdCBhbGwgTjFRTCBpbmRleGVzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgZm9yIHRoZSBjdXJyZW50IGJ1Y2tldC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0TjFxbEluZGV4ZXMoKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgcHJpbWFyeSBOMVFMIGluZGV4LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGN1c3RvbU5hbWUgdGhlIGN1c3RvbSBuYW1lIGZvciB0aGUgcHJpbWFyeSBpbmRleC4KICAgICAqIEBwYXJhbSBib29sICRpZ25vcmVJZkV4aXN0IGlmIGEgcHJpbWFyeSBpbmRleCBhbHJlYWR5IGV4aXN0cywgYW4gZXhjZXB0aW9uCiAgICAgKiAgIHdpbGwgYmUgdGhyb3duIHVubGVzcyB0aGlzIGlzIHNldCB0byB0cnVlLgogICAgICogQHBhcmFtIGJvb2wgJGRlZmVyIHRydWUgdG8gZGVmZXIgaW5kZXggYnVpbGRpbmcuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVOMXFsUHJpbWFyeUluZGV4KCRjdXN0b21OYW1lID0gJycsICRpZ25vcmVJZkV4aXN0ID0gZmFsc2UsICRkZWZlciA9IGZhbHNlKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIHNlY29uZGFyeSBOMVFMIGluZGV4LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgbmFtZSBvZiB0aGUgaW5kZXgKICAgICAqIEBwYXJhbSBhcnJheSAkZmllbGRzIGxpc3Qgb2YgSlNPTiBmaWVsZHMgdG8gaW5kZXgKICAgICAqIEBwYXJhbSBzdHJpbmcgJHdoZXJlQ2xhdXNlIHRoZSBXSEVSRSBjbGF1c2Ugb2YgdGhlIGluZGV4LgogICAgICogQHBhcmFtIGJvb2wgJGlnbm9yZUlmRXhpc3QgaWYgYSBzZWNvbmRhcnkgaW5kZXggYWxyZWFkeSBleGlzdHMsIGFuIGV4Y2VwdGlvbgogICAgICogICB3aWxsIGJlIHRocm93biB1bmxlc3MgdGhpcyBpcyBzZXQgdG8gdHJ1ZS4KICAgICAqIEBwYXJhbSBib29sICRkZWZlciB0cnVlIHRvIGRlZmVyIGluZGV4IGJ1aWxkaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlTjFxbEluZGV4KCRuYW1lLCAkZmllbGRzLCAkd2hlcmVDbGF1c2UgPSAnJywgJGlnbm9yZUlmRXhpc3QgPSBmYWxzZSwgJGRlZmVyID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiBEcm9wIHRoZSBnaXZlbiBwcmltYXJ5IGluZGV4CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY3VzdG9tTmFtZSB0aGUgY3VzdG9tIG5hbWUgZm9yIHRoZSBwcmltYXJ5IGluZGV4CiAgICAgKiBAcGFyYW0gYm9vbCAkaWdub3JlSWZOb3RFeGlzdCBpZiBhIHByaW1hcnkgaW5kZXggZG9lcyBub3QgZXhpc3QsIGFuIGV4Y2VwdGlvbgogICAgICogICB3aWxsIGJlIHRocm93biB1bmxlc3MgdGhpcyBpcyBzZXQgdG8gdHJ1ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRyb3BOMXFsUHJpbWFyeUluZGV4KCRjdXN0b21OYW1lID0gJycsICRpZ25vcmVJZk5vdEV4aXN0ID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiBEcm9wIHRoZSBnaXZlbiBzZWNvbmRhcnkgaW5kZXgKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSBpbmRleCBuYW1lCiAgICAgKiBAcGFyYW0gYm9vbCAkaWdub3JlSWZOb3RFeGlzdCBpZiBhIHNlY29uZGFyeSBpbmRleCBkb2VzIG5vdCBleGlzdCwgYW4gZXhjZXB0aW9uCiAgICAgKiAgIHdpbGwgYmUgdGhyb3duIHVubGVzcyB0aGlzIGlzIHNldCB0byB0cnVlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJvcE4xcWxJbmRleCgkbmFtZSwgJGlnbm9yZUlmTm90RXhpc3QgPSBmYWxzZSkge30KfQoKLyoqCiAqIEludGVyZmFjZSBvZiBhdXRoZW50aWNhdGlvbiBjb250YWluZXJzLgogKgogKiBAc2VlIFxDb3VjaGJhc2VcQ2x1c3Rlcjo6YXV0aGVudGljYXRlKCkKICogQHNlZSBcQ291Y2hiYXNlXENsYXNzaWNBdXRoZW50aWNhdG9yCiAqIEBzZWUgXENvdWNoYmFzZVxQYXNzd29yZEF1dGhlbnRpY2F0b3IKICovCmludGVyZmFjZSBBdXRoZW50aWNhdG9yIHt9CgovKioKICogQXV0aGVudGljYXRvciBiYXNlZCBvbiBsb2dpbi9wYXNzd29yZCBjcmVkZW50aWFscy4KICoKICogVGhpcyBhdXRoZW50aWNhdG9yIHVzZXMgc2VwYXJhdGUgY3JlZGVudGlhbHMgZm9yIENsdXN0ZXIgbWFuYWdlbWVudCBpbnRlcmZhY2UKICogYXMgd2VsbCBhcyBmb3IgZWFjaCBidWNrZXQuCiAqCiAqCiAqCiAqIEBzZWUgXENvdWNoYmFzZVxDbHVzdGVyOjphdXRoZW50aWNhdGUoKQogKiBAc2VlIFxDb3VjaGJhc2VcQXV0aGVudGljYXRvcgogKi8KY2xhc3MgQ2xhc3NpY0F1dGhlbnRpY2F0b3IgaW1wbGVtZW50cyBBdXRoZW50aWNhdG9yCnsKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGNsdXN0ZXIgbWFuYWdlbWVudCBjcmVkZW50aWFscyBpbiB0aGUgY29udGFpbmVyCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgYWRtaW4gdXNlcm5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIGFkbWluIHBhc3N3b3JkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbHVzdGVyKCR1c2VybmFtZSwgJHBhc3N3b3JkKSB7fQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGJ1Y2tldCBjcmVkZW50aWFscyBpbiB0aGUgY29udGFpbmVyCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBidWNrZXQgbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQgYnVja2V0IHBhc3N3b3JkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWNrZXQoJG5hbWUsICRwYXNzd29yZCkge30KfQoKLyoqCiAqIEF1dGhlbnRpY2F0b3IgYmFzZWQgb24gUkJBQyBmZWF0dXJlIG9mIENvdWNoYmFzZSBTZXJ2ZXIgNSsuCiAqCiAqIFRoaXMgYXV0aGVudGljYXRvciB1c2VzIHNpbmdsZSBjcmVkZW50aWFscyBmb3IgYWxsIG9wZXJhdGlvbnMgKGRhdGEgYW5kIG1hbmFnZW1lbnQpLgogKgogKiBAc2VlIFxDb3VjaGJhc2VcQ2x1c3Rlcjo6YXV0aGVudGljYXRlKCkKICogQHNlZSBcQ291Y2hiYXNlXEF1dGhlbnRpY2F0b3IKICovCmNsYXNzIFBhc3N3b3JkQXV0aGVudGljYXRvciBpbXBsZW1lbnRzIEF1dGhlbnRpY2F0b3IKewogICAgLyoqCiAgICAgKiBTZXRzIHVzZXJuYW1lCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgdXNlcm5hbWUKICAgICAqIEByZXR1cm4gXENvdWNoYmFzZVxQYXNzd29yZEF1dGhlbnRpY2F0b3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVzZXJuYW1lKCR1c2VybmFtZSkge30KCiAgICAvKioKICAgICAqIFNldHMgcGFzc3dvcmQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBwYXNzd29yZAogICAgICogQHJldHVybiBcQ291Y2hiYXNlXFBhc3N3b3JkQXV0aGVudGljYXRvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFzc3dvcmQoJHBhc3N3b3JkKSB7fQp9CgovKioKICogQW4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIG1ldGEgaW5mb3JtYXRpb24gb2YgdGhlIGRvY3VtZW50IG5lZWRlZCB0byBlbmZvcmNlIHF1ZXJ5IGNvbnNpc3RlbmN5LgogKi8KY2xhc3MgTXV0YXRpb25Ub2tlbgp7CiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgbmV3IG11dGF0aW9uIHRva2VuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYnVja2V0TmFtZSBuYW1lIG9mIHRoZSBidWNrZXQKICAgICAqIEBwYXJhbSBpbnQgJHZidWNrZXRJZCBwYXJ0aXRpb24gbnVtYmVyCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YnVja2V0VXVpZCBVVUlEIG9mIHRoZSBwYXJ0aXRpb24KICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcXVlbmNlTnVtYmVyIHNlcXVlbmNlIG51bWJlciBpbnNpZGUgcGFydGl0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbSgkYnVja2V0TmFtZSwgJHZidWNrZXRJZCwgJHZidWNrZXRVdWlkLCAkc2VxdWVuY2VOdW1iZXIpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGJ1Y2tldCBuYW1lCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJ1Y2tldE5hbWUoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBwYXJ0aXRpb24gbnVtYmVyCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZidWNrZXRJZCgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIFVVSUQgb2YgdGhlIHBhcnRpdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YnVja2V0VXVpZCgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzZXF1ZW5jZSBudW1iZXIgaW5zaWRlIHBhcnRpdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXF1ZW5jZU51bWJlcigpIHt9Cn0KCi8qKgogKiBDb250YWluZXIgZm9yIG11dGF0aW9uIHRva2Vucy4KICovCmNsYXNzIE11dGF0aW9uU3RhdGUKewogICAgZmluYWwgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgY29udGFpbmVyIGZyb20gdGhlIGdpdmVuIG11dGF0aW9uIHRva2VuIGhvbGRlcnMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5fERvY3VtZW50fERvY3VtZW50RnJhZ21lbnQgJHNvdXJjZSBhbnl0aGluZyB0aGF0IGNhbiBoYXZlIGF0dGFjaGVkIE11dGF0aW9uVG9rZW4KICAgICAqIEByZXR1cm4gTXV0YXRpb25TdGF0ZQogICAgICoKICAgICAqIEBzZWUgXENvdWNoYmFzZVxNdXRhdGlvblRva2VuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbSgkc291cmNlKSB7fQoKICAgIC8qKgogICAgICogVXBkYXRlIGNvbnRhaW5lciB3aXRoIHRoZSBnaXZlbiBtdXRhdGlvbiB0b2tlbiBob2xkZXJzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXxEb2N1bWVudHxEb2N1bWVudEZyYWdtZW50ICRzb3VyY2UgYW55dGhpbmcgdGhhdCBjYW4gaGF2ZSBhdHRhY2hlZCBNdXRhdGlvblRva2VuCiAgICAgKgogICAgICogQHNlZSBcQ291Y2hiYXNlXE11dGF0aW9uVG9rZW4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZCgkc291cmNlKSB7fQp9CgovKioKICogQ29tbW9uIGludGVyZmFjZSBmb3IgYWxsIFZpZXcgcXVlcmllcwogKgogKiBAc2VlIFxDb3VjaGJhc2VcVmlld1F1ZXJ5CiAqIEBzZWUgXENvdWNoYmFzZVxTcGF0aWFsVmlld1F1ZXJ5CiAqLwppbnRlcmZhY2UgVmlld1F1ZXJ5RW5jb2RhYmxlCnsKICAgIC8qKgogICAgICogUmV0dXJucyBhc3NvY2lhdGl2ZSBhcnJheSwgcmVwcmVzZW50aW5nIHRoZSBWaWV3IHF1ZXJ5LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgb2JqZWN0IHdoaWNoIGlzIHJlYWR5IHRvIGJlIHNlcmlhbGl6ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGUoKTsKfQoKLyoqCiAqIFJlcHJlc2VudHMgcmVndWxhciBDb3VjaGJhc2UgTWFwL1JlZHVjZSBWaWV3IHF1ZXJ5CiAqCiAqIEBzZWUgXENvdWNoYmFzZVxCdWNrZXQ6OnF1ZXJ5KCkKICogQHNlZSBcQ291Y2hiYXNlXFNwYXRpYWxWaWV3UXVlcnkKICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvc2RrL3BocC92aWV3LXF1ZXJpZXMtd2l0aC1zZGsuaHRtbAogKiAgIE1hcFJlZHVjZSBWaWV3cwogKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9hcmNoaXRlY3R1cmUvcXVlcnlpbmctZGF0YS13aXRoLXZpZXdzLmh0bWwKICogICBRdWVyeWluZyBEYXRhIHdpdGggVmlld3MKICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvcmVzdC1hcGkvcmVzdC12aWV3cy1nZXQuaHRtbAogKiAgIEdldHRpbmcgVmlld3MgSW5mb3JtYXRpb24KICovCmNsYXNzIFZpZXdRdWVyeSBpbXBsZW1lbnRzIFZpZXdRdWVyeUVuY29kYWJsZQp7CiAgICAvKiogRm9yY2UgYSB2aWV3IHVwZGF0ZSBiZWZvcmUgcmV0dXJuaW5nIGRhdGEgKi8KICAgIHB1YmxpYyBjb25zdCBVUERBVEVfQkVGT1JFID0gMTsKCiAgICAvKiogQWxsb3cgc3RhbGUgdmlld3MgKi8KICAgIHB1YmxpYyBjb25zdCBVUERBVEVfTk9ORSA9IDI7CgogICAgLyoqIEFsbG93IHN0YWxlIHZpZXcsIHVwZGF0ZSB2aWV3IGFmdGVyIGl0IGhhcyBiZWVuIGFjY2Vzc2VkLiAqLwogICAgcHVibGljIGNvbnN0IFVQREFURV9BRlRFUiA9IDM7CiAgICBwdWJsaWMgY29uc3QgT1JERVJfQVNDRU5ESU5HID0gMTsKICAgIHB1YmxpYyBjb25zdCBPUkRFUl9ERVNDRU5ESU5HID0gMjsKCiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgQ291Y2hiYXNlIFZpZXdRdWVyeSBpbnN0YW5jZSBmb3IgcGVyZm9ybWluZyBhIHZpZXcgcXVlcnkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGVzaWduRG9jdW1lbnROYW1lIHRoZSBuYW1lIG9mIHRoZSBkZXNpZ24gZG9jdW1lbnQgdG8gcXVlcnkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZpZXdOYW1lIHRoZSBuYW1lIG9mIHRoZSB2aWV3IHRvIHF1ZXJ5CiAgICAgKiBAcmV0dXJuIFZpZXdRdWVyeQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb20oJGRlc2lnbkRvY3VtZW50TmFtZSwgJHZpZXdOYW1lKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBDb3VjaGJhc2UgVmlld1F1ZXJ5IGluc3RhbmNlIGZvciBwZXJmb3JtaW5nIGEgc3BhdGlhbCBxdWVyeS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc2lnbkRvY3VtZW50TmFtZSB0aGUgbmFtZSBvZiB0aGUgZGVzaWduIGRvY3VtZW50IHRvIHF1ZXJ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2aWV3TmFtZSB0aGUgbmFtZSBvZiB0aGUgdmlldyB0byBxdWVyeQogICAgICogQHJldHVybiBTcGF0aWFsVmlld1F1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbVNwYXRpYWwoJGRlc2lnbkRvY3VtZW50TmFtZSwgJHZpZXdOYW1lKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhc3NvY2lhdGl2ZSBhcnJheSwgcmVwcmVzZW50aW5nIHRoZSBWaWV3IHF1ZXJ5LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgb2JqZWN0IHdoaWNoIGlzIHJlYWR5IHRvIGJlIHNlcmlhbGl6ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGUoKSB7fQoKICAgIC8qKgogICAgICogTGltaXRzIHRoZSByZXN1bHQgc2V0IHRvIGEgc3BlY2lmaWVkIG51bWJlciByb3dzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxpbWl0IG1heGltdW0gbnVtYmVyIG9mIHJlY29yZHMgaW4gdGhlIHJlc3BvbnNlCiAgICAgKiBAcmV0dXJuIFZpZXdRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGltaXQoJGxpbWl0KSB7fQoKICAgIC8qKgogICAgICogU2tpcHMgYSBudW1iZXIgbyByZWNvcmRzIHJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZXN1bHQgc2V0CiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2tpcCBudW1iZXIgb2YgcmVjb3JkcyB0byBza2lwCiAgICAgKiBAcmV0dXJuIFZpZXdRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2tpcCgkc2tpcCkge30KCiAgICAvKioKICAgICAqIFNwZWNpZmllcyB0aGUgbW9kZSBvZiB1cGRhdGluZyB0byBwZXJvcm0gYmVmb3JlIGFuZCBhZnRlciBleGVjdXRpbmcgdGhlIHF1ZXJ5CiAgICAgKgogICAgICogQHBhcmFtIGludCAkY29uc2lzdGVuY3kgdXNlIGNvbnN0YW50cyBVUERBVEVfQkVGT1JFLCBVUERBVEVfTk9ORSwgVVBEQVRFX0FGVEVSCiAgICAgKiBAcmV0dXJuIFZpZXdRdWVyeQogICAgICoKICAgICAqIEBzZWUgXENvdWNoYmFzZVxWaWV3UXVlcnk6OlVQREFURV9CRUZPUkUKICAgICAqIEBzZWUgXENvdWNoYmFzZVxWaWV3UXVlcnk6OlVQREFURV9OT05FCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcVmlld1F1ZXJ5OjpVUERBVEVfQUZURVIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnNpc3RlbmN5KCRjb25zaXN0ZW5jeSkge30KCiAgICAvKioKICAgICAqIE9yZGVycyB0aGUgcmVzdWx0cyBieSBrZXkgYXMgc3BlY2lmaWVkCiAgICAgKgogICAgICogQHBhcmFtIGludCAkb3JkZXIgdXNlIGNvbnRzdGFudHMgT1JERVJfQVNDRU5ESU5HLCBPUkRFUl9ERVNDRU5ESU5HCiAgICAgKiBAcmV0dXJuIFZpZXdRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3JkZXIoJG9yZGVyKSB7fQoKICAgIC8qKgogICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHJlZHVjdGlvbiBmdW5jdGlvbiBzaG91bGQgYmUgYXBwbGllZCB0byByZXN1bHRzIG9mIHRoZSBxdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkcmVkdWNlCiAgICAgKiBAcmV0dXJuIFZpZXdRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVkdWNlKCRyZWR1Y2UpIHt9CgogICAgLyoqCiAgICAgKiBHcm91cCB0aGUgcmVzdWx0cyB1c2luZyB0aGUgcmVkdWNlIGZ1bmN0aW9uIHRvIGEgZ3JvdXAgb3Igc2luZ2xlIHJvdy4KICAgICAqCiAgICAgKiBJbXBvcnRhbnQ6IHRoaXMgc2V0dGVyIGFuZCBncm91cExldmVsIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlciBpbiB0aGUKICAgICAqIHNhbWUgVmlld1F1ZXJ5LiBJdCBpcyBzdWZmaWNpZW50IHRvIG9ubHkgc2V0IHRoZSBncm91cGluZyBsZXZlbCBvbmx5IGFuZAogICAgICogdXNlIHRoaXMgc2V0dGVyIGluIGNhc2VzIHdoZXJlIHlvdSBhbHdheXMgd2FudCB0aGUgaGlnaGVzdCBncm91cCBsZXZlbAogICAgICogaW1wbGljdGx5LgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRncm91cAogICAgICogQHJldHVybiBWaWV3UXVlcnkKICAgICAqCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcVmlld1F1ZXJ5Ojpncm91cExldmVsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBncm91cCgkZ3JvdXApIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZ5IHRoZSBncm91cCBsZXZlbCB0byBiZSB1c2VkLgogICAgICoKICAgICAqIEltcG9ydGFudDogZ3JvdXAoKSBhbmQgdGhpcyBzZXR0ZXIgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyIGluIHRoZQogICAgICogc2FtZSBWaWV3UXVlcnkuIEl0IGlzIHN1ZmZpY2llbnQgdG8gb25seSB1c2UgdGhpcyBzZXR0ZXIgYW5kIHVzZSBncm91cCgpCiAgICAgKiBpbiBjYXNlcyB3aGVyZSB5b3UgYWx3YXlzIHdhbnQgdGhlIGhpZ2hlc3QgZ3JvdXAgbGV2ZWwgaW1wbGljdGx5LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGdyb3VwTGV2ZWwgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUga2V5cyB0byB1c2UKICAgICAqIEByZXR1cm4gVmlld1F1ZXJ5CiAgICAgKgogICAgICogQHNlZSBcQ291Y2hiYXNlXFZpZXdRdWVyeTo6Z3JvdXAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdyb3VwTGV2ZWwoJGdyb3VwTGV2ZWwpIHt9CgogICAgLyoqCiAgICAgKiBSZXN0aWN0IHJlc3VsdHMgb2YgdGhlIHF1ZXJ5IHRvIHRoZSBzcGVjaWZpZWQga2V5CiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRrZXkga2V5CiAgICAgKiBAcmV0dXJuIFZpZXdRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCRrZXkpIHt9CgogICAgLyoqCiAgICAgKiBSZXN0aWN0IHJlc3VsdHMgb2YgdGhlIHF1ZXJ5IHRvIHRoZSBzcGVjaWZpZWQgc2V0IG9mIGtleXMKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleXMgc2V0IG9mIGtleXMKICAgICAqIEByZXR1cm4gVmlld1F1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlzKCRrZXlzKSB7fQoKICAgIC8qKgogICAgICogU3BlY2lmaWVzIGEgcmFuZ2Ugb2YgdGhlIGtleXMgdG8gcmV0dXJuIGZyb20gdGhlIGluZGV4LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkc3RhcnRLZXkKICAgICAqIEBwYXJhbSBtaXhlZCAkZW5kS2V5CiAgICAgKiBAcGFyYW0gYm9vbCAkaW5jbHVzaXZlRW5kCiAgICAgKiBAcmV0dXJuIFZpZXdRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmFuZ2UoJHN0YXJ0S2V5LCAkZW5kS2V5LCAkaW5jbHVzaXZlRW5kID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZpZXMgc3RhcnQgYW5kIGVuZCBkb2N1bWVudCBJRHMgaW4gYWRkaXRpb24gdG8gcmFuZ2UgbGltaXRzLgogICAgICoKICAgICAqIFRoaXMgbWlnaHQgYmUgbmVlZGVkIGZvciBtb3JlIHByZWNpc2UgcGFnaW5hdGlvbiB3aXRoIGEgbG90IG9mIGRvY3VtZW50cwogICAgICogd2l0aCB0aGUgc2FtZSBrZXkgc2VsZWN0ZWQgaW50byB0aGUgc2FtZSBwYWdlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YXJ0S2V5RG9jdW1lbnRJZCBkb2N1bWVudCBJRAogICAgICogQHBhcmFtIHN0cmluZyAkZW5kS2V5RG9jdW1lbnRJZCBkb2N1bWVudCBJRAogICAgICogQHJldHVybiBWaWV3UXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlkUmFuZ2UoJHN0YXJ0S2V5RG9jdW1lbnRJZCwgJGVuZEtleURvY3VtZW50SWQpIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZpZXMgY3VzdG9tIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgc2VydmVyLgogICAgICoKICAgICAqIE5vdGUgdGhhdCB0aGVzZSBvcHRpb25zIGFyZSBleHBlY3RlZCB0byBiZSBhbHJlYWR5IGVuY29kZWQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjdXN0b21QYXJhbWV0ZXJzIHBhcmFtZXRlcnMKICAgICAqIEByZXR1cm4gVmlld1F1ZXJ5CiAgICAgKgogICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvcmVzdC1hcGkvcmVzdC12aWV3cy1nZXQuaHRtbAogICAgICogICBHZXR0aW5nIFZpZXdzIEluZm9ybWF0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXN0b20oJGN1c3RvbVBhcmFtZXRlcnMpIHt9Cn0KCi8qKgogKiBSZXByZXNlbnRzIHNwYXRpYWwgQ291Y2hiYXNlIE1hcC9SZWR1Y2UgVmlldyBxdWVyeQogKgogKiBAc2VlIFxDb3VjaGJhc2VcQnVja2V0OjpxdWVyeSgpCiAqIEBzZWUgXENvdWNoYmFzZVxWaWV3UXVlcnkKICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvYXJjaGl0ZWN0dXJlL3F1ZXJ5aW5nLWdlby1kYXRhLXNwYXRpYWwtdmlld3MuaHRtbAogKiAgIFF1ZXJ5aW5nIEdlb2dyYXBoaWMgRGF0YSB3aXRoIFNwYXRpYWwgVmlld3MKICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvcmVzdC1hcGkvcmVzdC12aWV3cy1nZXQuaHRtbAogKiAgIEdldHRpbmcgVmlld3MgSW5mb3JtYXRpb24KICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvdmlld3Mvc3YtcXVlcnktcGFyYW1ldGVycy5odG1sCiAqICAgUXVlcnlpbmcgc3BhdGlhbCB2aWV3cwogKi8KY2xhc3MgU3BhdGlhbFZpZXdRdWVyeSBpbXBsZW1lbnRzIFZpZXdRdWVyeUVuY29kYWJsZQp7CiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYXNzb2NpYXRpdmUgYXJyYXksIHJlcHJlc2VudGluZyB0aGUgVmlldyBxdWVyeS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IG9iamVjdCB3aGljaCBpcyByZWFkeSB0byBiZSBzZXJpYWxpemVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlKCkge30KCiAgICAvKioKICAgICAqIExpbWl0cyB0aGUgcmVzdWx0IHNldCB0byBhIHNwZWNpZmllZCBudW1iZXIgcm93cy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRsaW1pdCBtYXhpbXVtIG51bWJlciBvZiByZWNvcmRzIGluIHRoZSByZXNwb25zZQogICAgICogQHJldHVybiBTcGF0aWFsVmlld1F1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaW1pdCgkbGltaXQpIHt9CgogICAgLyoqCiAgICAgKiBTa2lwcyBhIG51bWJlciBvIHJlY29yZHMgcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlc3VsdCBzZXQKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRza2lwIG51bWJlciBvZiByZWNvcmRzIHRvIHNraXAKICAgICAqIEByZXR1cm4gU3BhdGlhbFZpZXdRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2tpcCgkc2tpcCkge30KCiAgICAvKioKICAgICAqIFNwZWNpZmllcyB0aGUgbW9kZSBvZiB1cGRhdGluZyB0byBwZXJvcm0gYmVmb3JlIGFuZCBhZnRlciBleGVjdXRpbmcgdGhlIHF1ZXJ5CiAgICAgKgogICAgICogQHBhcmFtIGludCAkY29uc2lzdGVuY3kgdXNlIGNvbnN0YW50cyBVUERBVEVfQkVGT1JFLCBVUERBVEVfTk9ORSwgVVBEQVRFX0FGVEVSCiAgICAgKiBAcmV0dXJuIFNwYXRpYWxWaWV3UXVlcnkKICAgICAqCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcVmlld1F1ZXJ5OjpVUERBVEVfQkVGT1JFCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcVmlld1F1ZXJ5OjpVUERBVEVfTk9ORQogICAgICogQHNlZSBcQ291Y2hiYXNlXFZpZXdRdWVyeTo6VVBEQVRFX0FGVEVSCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb25zaXN0ZW5jeSgkY29uc2lzdGVuY3kpIHt9CgogICAgLyoqCiAgICAgKiBPcmRlcnMgdGhlIHJlc3VsdHMgYnkga2V5IGFzIHNwZWNpZmllZAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG9yZGVyIHVzZSBjb250c3RhbnRzIE9SREVSX0FTQ0VORElORywgT1JERVJfREVTQ0VORElORwogICAgICogQHJldHVybiBTcGF0aWFsVmlld1F1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcmRlcigkb3JkZXIpIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZpZXMgdGhlIGJvdW5kaW5nIGJveCB0byBzZWFyY2ggd2l0aGluLgogICAgICoKICAgICAqIE5vdGUsIHVzaW5nIGJib3goKSBpcyBkaXNjb3VyYWdlZCwgc3RhcnRSYW5nZS9lbmRSYW5nZSBpcyBtb3JlIGZsZXhpYmxlIGFuZCBzaG91bGQgYmUgcHJlZmVycmVkLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkYmJveCBib3VuZGluZyBib3ggY29vcmRpbmF0ZXMgZXhwcmVzc2VkIGFzIGEgbGlzdCBvZiBudW1lcmljIHZhbHVlcwogICAgICogQHJldHVybiBTcGF0aWFsVmlld1F1ZXJ5CiAgICAgKgogICAgICogQHNlZSBcQ291Y2hiYXNlXFNwYXRpYWxWaWV3UXVlcnk6OnN0YXJ0UmFuZ2UoKQogICAgICogQHNlZSBcQ291Y2hiYXNlXFNwYXRpYWxWaWV3UXVlcnk6OmVuZFJhbmdlKCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJib3goJGJib3gpIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZ5IHN0YXJ0IHJhbmdlIGZvciBxdWVyeQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcmFuZ2UKICAgICAqIEByZXR1cm4gU3BhdGlhbFZpZXdRdWVyeQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3ZpZXdzL3N2LXF1ZXJ5LXBhcmFtZXRlcnMuaHRtbAogICAgICogICBRdWVyeWluZyBzcGF0aWFsIHZpZXdzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdGFydFJhbmdlKCRyYW5nZSkge30KCiAgICAvKioKICAgICAqIFNwZWNpZnkgZW5kIHJhbmdlIGZvciBxdWVyeQogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcmFuZ2UKICAgICAqIEByZXR1cm4gU3BhdGlhbFZpZXdRdWVyeQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3ZpZXdzL3N2LXF1ZXJ5LXBhcmFtZXRlcnMuaHRtbAogICAgICogICBRdWVyeWluZyBzcGF0aWFsIHZpZXdzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmRSYW5nZSgkcmFuZ2UpIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZpZXMgY3VzdG9tIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgc2VydmVyLgogICAgICoKICAgICAqIE5vdGUgdGhhdCB0aGVzZSBvcHRpb25zIGFyZSBleHBlY3RlZCB0byBiZSBhbHJlYWR5IGVuY29kZWQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjdXN0b21QYXJhbWV0ZXJzIHBhcmFtZXRlcnMKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9yZXN0LWFwaS9yZXN0LXZpZXdzLWdldC5odG1sCiAgICAgKiAgIEdldHRpbmcgVmlld3MgSW5mb3JtYXRpb24KICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3ZpZXdzL3N2LXF1ZXJ5LXBhcmFtZXRlcnMuaHRtbAogICAgICogICBRdWVyeWluZyBzcGF0aWFsIHZpZXdzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXN0b20oJGN1c3RvbVBhcmFtZXRlcnMpIHt9Cn0KCi8qKgogKiBSZXByZXNlbnRzIGEgTjFRTCBxdWVyeQogKgogKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvbjFxbC1xdWVyeS5odG1sCiAqICAgUXVlcnlpbmcgd2l0aCBOMVFMCiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3Nkay9waHAvbjFxbC1xdWVyaWVzLXdpdGgtc2RrLmh0bWwKICogICBOMVFMIGZyb20gdGhlIFNES3MKICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvbjFxbC9uMXFsLXJlc3QtYXBpL2luZGV4Lmh0bWwKICogICBOMVFMIFJFU1QgQVBJCiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3BlcmZvcm1hbmNlL2luZGV4LXNjYW5zLmh0bWwKICogICBVbmRlcnN0YW5kaW5nIEluZGV4IFNjYW5zCiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci9jdXJyZW50L3BlcmZvcm1hbmNlL2luZGV4aW5nLWFuZC1xdWVyeS1wZXJmLmh0bWwKICogICBJbmRleGluZyBKU09OIERvY3VtZW50cyBhbmQgUXVlcnkgUGVyZm9ybWFuY2UKICovCmNsYXNzIE4xcWxRdWVyeQp7CiAgICAvKioKICAgICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgKGZvciBzaW5nbGUtc3RhdGVtZW50IHJlcXVlc3RzKS4KICAgICAqIE5vIHRpbWVzdGFtcCB2ZWN0b3IgaXMgdXNlZCBpbiB0aGUgaW5kZXggc2Nhbi4KICAgICAqIFRoaXMgaXMgYWxzbyB0aGUgZmFzdGVzdCBtb2RlLCBiZWNhdXNlIHdlIGF2b2lkIHRoZSBjb3N0IG9mIG9idGFpbmluZyB0aGUgdmVjdG9yLAogICAgICogYW5kIHdlIGFsc28gYXZvaWQgYW55IHdhaXQgZm9yIHRoZSBpbmRleCB0byBjYXRjaCB1cCB0byB0aGUgdmVjdG9yLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgTk9UX0JPVU5ERUQgPSAxOwoKICAgIC8qKgogICAgICogVGhpcyBpbXBsZW1lbnRzIHN0cm9uZyBjb25zaXN0ZW5jeSBwZXIgcmVxdWVzdC4KICAgICAqIEJlZm9yZSBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0LCBhIGN1cnJlbnQgdmVjdG9yIGlzIG9idGFpbmVkLgogICAgICogVGhlIHZlY3RvciBpcyB1c2VkIGFzIGEgbG93ZXIgYm91bmQgZm9yIHRoZSBzdGF0ZW1lbnRzIGluIHRoZSByZXF1ZXN0LgogICAgICogSWYgdGhlcmUgYXJlIERNTCBzdGF0ZW1lbnRzIGluIHRoZSByZXF1ZXN0LCBSWU9XIGlzIGFsc28gYXBwbGllZCB3aXRoaW4gdGhlIHJlcXVlc3QuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVFVRVNUX1BMVVMgPSAyOwoKICAgIC8qKgogICAgICogVGhpcyBpbXBsZW1lbnRzIHN0cm9uZyBjb25zaXN0ZW5jeSBwZXIgc3RhdGVtZW50LgogICAgICogQmVmb3JlIHByb2Nlc3NpbmcgZWFjaCBzdGF0ZW1lbnQsIGEgY3VycmVudCB2ZWN0b3IgaXMgb2J0YWluZWQKICAgICAqIGFuZCB1c2VkIGFzIGEgbG93ZXIgYm91bmQgZm9yIHRoYXQgc3RhdGVtZW50LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU1RBVEVNRU5UX1BMVVMgPSAzOwoKICAgIC8qKgogICAgICogRGlzYWJsZXMgcHJvZmlsaW5nLiBUaGlzIGlzIHRoZSBkZWZhdWx0CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQUk9GSUxFX05PTkUgPSAnb2ZmJzsKCiAgICAvKioKICAgICAqIEVuYWJsZXMgcGhhc2UgcHJvZmlsaW5nLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUFJPRklMRV9QSEFTRVMgPSAncGhhc2VzJzsKCiAgICAvKioKICAgICAqIEVuYWJsZXMgZ2VuZXJhbCB0aW1pbmcgcHJvZmlsaW5nLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUFJPRklMRV9USU1JTkdTID0gJ3RpbWluZ3MnOwoKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBuZXcgTjFxbFF1ZXJ5IGluc3RhbmNlIGRpcmVjdGx5IGZyb20gdGhlIE4xUUwgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YXRlbWVudCBOMVFMIHN0cmluZwogICAgICogQHJldHVybiBOMXFsUXVlcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tU3RyaW5nKCRzdGF0ZW1lbnQpIHt9CgogICAgLyoqCiAgICAgKiBBbGxvd3MgdG8gc3BlY2lmeSBpZiB0aGlzIHF1ZXJ5IGlzIGFkaG9jIG9yIG5vdC4KICAgICAqCiAgICAgKiBJZiBpdCBpcyBub3QgYWRob2MgKHNvIHBlcmZvcm1lZCBvZnRlbiksIHRoZSBjbGllbnQgd2lsbCB0cnkgdG8gcGVyZm9ybSBvcHRpbWl6YXRpb25zCiAgICAgKiB0cmFuc3BhcmVudGx5IGJhc2VkIG9uIHRoZSBzZXJ2ZXIgY2FwYWJpbGl0aWVzLCBsaWtlIHByZXBhcmluZyB0aGUgc3RhdGVtZW50IGFuZAogICAgICogdGhlbiBleGVjdXRpbmcgYSBxdWVyeSBwbGFuIGluc3RlYWQgb2YgdGhlIHJhdyBxdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkYWRob2MgaWYgcXVlcnkgaXMgYWRob2MsIGRlZmF1bHQgaXMgdHJ1ZSAocGxhaW4gZXhlY3V0aW9uKQogICAgICogQHJldHVybiBOMXFsUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkaG9jKCRhZGhvYykge30KCiAgICAvKioKICAgICAqIEFsbG93cyB0byBwdWxsIGNyZWRlbnRpYWxzIGZyb20gdGhlIEF1dGhlbnRpY2F0b3IKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkY3Jvc3NCdWNrZXQgaWYgcXVlcnkgaW5jbHVkZXMgam9pbnMgZm9yIG11bHRpcGxlIGJ1Y2tldHMgKGRlZmF1bHQgaXMgZmFsc2UpCiAgICAgKiBAcmV0dXJuIE4xcWxRdWVyeQogICAgICoKICAgICAqCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcQXV0aGVudGljYXRvcgogICAgICogQHNlZSBcQ291Y2hiYXNlXENsYXNzaWNBdXRoZW50aWNhdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcm9zc0J1Y2tldCgkY3Jvc3NCdWNrZXQpIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZ5IGFycmF5IG9mIHBvc2l0aW9uYWwgcGFyYW1ldGVycwogICAgICoKICAgICAqIFByZXZpb3VzbHkgc3BlY2lmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3aWxsIGJlIHJlcGxhY2VkLgogICAgICogTm90ZTogY2FyZWZ1bGx5IGNob29zZSB0eXBlIG9mIHF1b3RlcyBmb3IgdGhlIHF1ZXJ5IHN0cmluZywgYmVjYXVzZSBQSFAgYWxzbyB1c2VzIGAkYAogICAgICogKGRvbGxhciBzaWduKSBmb3IgdmFyaWFibGUgaW50ZXJwb2xhdGlvbi4gSWYgeW91IGFyZSB1c2luZyBkb3VibGUgcXVvdGVzLCBtYWtlIHN1cmUKICAgICAqIHRoYXQgTjFRTCBwYXJhbWV0ZXJzIHByb3Blcmx5IGVzY2FwZWQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMKICAgICAqIEByZXR1cm4gTjFxbFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3NpdGlvbmFsUGFyYW1zKCRwYXJhbXMpIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZ5IGFzc29jaWF0aXZlIGFycmF5IG9mIG5hbWVkIHBhcmFtZXRlcnMKICAgICAqCiAgICAgKiBUaGUgc3VwcGxpZWQgYXJyYXkgb2Yga2V5L3ZhbHVlIHBhaXJzIHdpbGwgYmUgbWVyZ2VkIHdpdGggYWxyZWFkeSBleGlzdGluZyBuYW1lZCBwYXJhbWV0ZXJzLgogICAgICogTm90ZTogY2FyZWZ1bGx5IGNob29zZSB0eXBlIG9mIHF1b3RlcyBmb3IgdGhlIHF1ZXJ5IHN0cmluZywgYmVjYXVzZSBQSFAgYWxzbyB1c2VzIGAkYAogICAgICogKGRvbGxhciBzaWduKSBmb3IgdmFyaWFibGUgaW50ZXJwb2xhdGlvbi4gSWYgeW91IGFyZSB1c2luZyBkb3VibGUgcXVvdGVzLCBtYWtlIHN1cmUKICAgICAqIHRoYXQgTjFRTCBwYXJhbWV0ZXJzIHByb3Blcmx5IGVzY2FwZWQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMKICAgICAqIEByZXR1cm4gTjFxbFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lZFBhcmFtcygkcGFyYW1zKSB7fQoKICAgIC8qKgogICAgICogU3BlY2lmaWVzIHRoZSBjb25zaXN0ZW5jeSBsZXZlbCBmb3IgdGhpcyBxdWVyeQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGNvbnNpc3RlbmN5IGNvbnNpc3RlbmN5IGxldmVsCiAgICAgKiBAcmV0dXJuIE4xcWxRdWVyeQogICAgICoKICAgICAqIEBzZWUgXENvdWNoYmFzZVxOMXFsUXVlcnk6Ok5PVF9CT1VOREVECiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcTjFxbFF1ZXJ5OjpSRVFVRVNUX1BMVVMKICAgICAqIEBzZWUgXENvdWNoYmFzZVxOMXFsUXVlcnk6OlNUQVRFTUVOVF9QTFVTCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcTjFxbFF1ZXJ5Ojpjb25zaXN0ZW50V2l0aCgpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb25zaXN0ZW5jeSgkY29uc2lzdGVuY3kpIHt9CgogICAgLyoqCiAgICAgKiBDb250cm9scyB0aGUgcHJvZmlsaW5nIG1vZGUgdXNlZCBkdXJpbmcgcXVlcnkgZXhlY3V0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJvZmlsZVR5cGUKICAgICAqIEByZXR1cm4gTjFxbFF1ZXJ5CiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcTjFxbFF1ZXJ5OjpQUk9GSUxFX05PTkUKICAgICAqIEBzZWUgXENvdWNoYmFzZVxOMXFsUXVlcnk6OlBST0ZJTEVfUEhBU0VTCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcTjFxbFF1ZXJ5OjpQUk9GSUxFX1RJTUlOR1MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByb2ZpbGUoJHByb2ZpbGVUeXBlKSB7fQoKICAgIC8qKgogICAgICogU2V0cyBtdXRhdGlvbiBzdGF0ZSB0aGUgcXVlcnkgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aAogICAgICoKICAgICAqIEBwYXJhbSBNdXRhdGlvblN0YXRlICRzdGF0ZSB0aGUgY29udGFpbmVyIG9mIG11dGF0aW9uIHRva2VucwogICAgICogQHJldHVybiBOMXFsUXVlcnkKICAgICAqCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcTXV0YXRpb25TdGF0ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29uc2lzdGVudFdpdGgoJHN0YXRlKSB7fQoKICAgIC8qKgogICAgICogSWYgc2V0IHRvIHRydWUsIGl0IHdpbGwgc2lnbmFsIHRoZSBxdWVyeSBlbmdpbmUgb24gdGhlIHNlcnZlciB0aGF0IG9ubHkgbm9uLWRhdGEgbW9kaWZ5aW5nIHJlcXVlc3RzCiAgICAgKiBhcmUgYWxsb3dlZC4gTm90ZSB0aGF0IHRoaXMgcnVsZSBpcyBlbmZvcmNlZCBvbiB0aGUgc2VydmVyIGFuZCBub3QgdGhlIFNESyBzaWRlLgogICAgICoKICAgICAqIENvbnRyb2xzIHdoZXRoZXIgYSBxdWVyeSBjYW4gY2hhbmdlIGEgcmVzdWx0aW5nIHJlY29yZCBzZXQuCiAgICAgKgogICAgICogSWYgcmVhZG9ubHkgaXMgdHJ1ZSwgdGhlbiB0aGUgZm9sbG93aW5nIHN0YXRlbWVudHMgYXJlIG5vdCBhbGxvd2VkOgogICAgICogIC0gQ1JFQVRFIElOREVYCiAgICAgKiAgLSBEUk9QIElOREVYCiAgICAgKiAgLSBJTlNFUlQKICAgICAqICAtIE1FUkdFCiAgICAgKiAgLSBVUERBVEUKICAgICAqICAtIFVQU0VSVAogICAgICogIC0gREVMRVRFCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHJlYWRvbmx5IHRydWUgaWYgcmVhZG9ubHkgc2hvdWxkIGJlIGZvcmNlZCwgZmFsc2UgaXMgdGhlIGRlZmF1bHQgYW5kIHdpbGwgdXNlIHRoZSBzZXJ2ZXIgc2lkZSBkZWZhdWx0LgogICAgICogQHJldHVybiBOMXFsUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRvbmx5KCRyZWFkb25seSkge30KCiAgICAvKioKICAgICAqIEFkdmFuY2VkOiBNYXhpbXVtIGJ1ZmZlcmVkIGNoYW5uZWwgc2l6ZSBiZXR3ZWVuIHRoZSBpbmRleGVyIGNsaWVudCBhbmQgdGhlIHF1ZXJ5IHNlcnZpY2UgZm9yIGluZGV4IHNjYW5zLgogICAgICoKICAgICAqIFRoaXMgcGFyYW1ldGVyIGNvbnRyb2xzIHdoZW4gdG8gdXNlIHNjYW4gYmFja2ZpbGwuIFVzZSAwIG9yIGEgbmVnYXRpdmUgbnVtYmVyIHRvIGRpc2FibGUuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2NhbkNhcCB0aGUgc2Nhbl9jYXAgcGFyYW0sIHVzZSAwIG9yIG5lZ2F0aXZlIG51bWJlciB0byBkaXNhYmxlLgogICAgICogQHJldHVybiBOMXFsUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNjYW5DYXAoJHNjYW5DYXApIHt9CgogICAgLyoqCiAgICAgKiBBZHZhbmNlZDogQ29udHJvbHMgdGhlIG51bWJlciBvZiBpdGVtcyBleGVjdXRpb24gb3BlcmF0b3JzIGNhbiBiYXRjaCBmb3IgRmV0Y2ggZnJvbSB0aGUgS1YuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkcGlwZWxpbmVCYXRjaCB0aGUgcGlwZWxpbmVfYmF0Y2ggcGFyYW0uCiAgICAgKiBAcmV0dXJuIE4xcWxRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGlwZWxpbmVCYXRjaCgkcGlwZWxpbmVCYXRjaCkge30KCiAgICAvKioKICAgICAqIEFkdmFuY2VkOiBNYXhpbXVtIG51bWJlciBvZiBpdGVtcyBlYWNoIGV4ZWN1dGlvbiBvcGVyYXRvciBjYW4gYnVmZmVyIGJldHdlZW4gdmFyaW91cyBvcGVyYXRvcnMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkcGlwZWxpbmVDYXAgdGhlIHBpcGVsaW5lX2NhcCBwYXJhbS4KICAgICAqIEByZXR1cm4gTjFxbFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwaXBlbGluZUNhcCgkcGlwZWxpbmVDYXApIHt9CgogICAgLyoqCiAgICAgKiBBbGxvd3MgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWF4aW11bSBwYXJhbGxlbGlzbSBmb3IgdGhlIHF1ZXJ5IGV4ZWN1dGlvbiBvbiB0aGUgc2VydmVyIHNpZGUuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbWF4UGFyYWxsZWxpc20gdGhlIG1heGltdW0gcGFyYWxsZWxpc20gZm9yIHRoaXMgcXVlcnksIDAgb3IgbmVnYXRpdmUgdmFsdWVzIGRpc2FibGUgaXQuCiAgICAgKiBAcmV0dXJuIE4xcWxRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWF4UGFyYWxsZWxpc20oJG1heFBhcmFsbGVsaXNtKSB7fQp9CgovKioKICogUmVwcmVzZW50cyBOMVFMIGluZGV4IGRlZmluaXRpb24KICoKICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyL2N1cnJlbnQvcGVyZm9ybWFuY2UvaW5kZXhpbmctYW5kLXF1ZXJ5LXBlcmYuaHRtbAogKiAgIEluZGV4aW5nIEpTT04gRG9jdW1lbnRzIGFuZCBRdWVyeSBQZXJmb3JtYW5jZQogKi8KY2xhc3MgTjFxbEluZGV4CnsKICAgIHB1YmxpYyBjb25zdCBVTlNQRUNJRklFRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgR1NJID0gMTsKICAgIHB1YmxpYyBjb25zdCBWSUVXID0gMjsKCiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIE5hbWUgb2YgdGhlIGluZGV4CiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRuYW1lOwoKICAgIC8qKgogICAgICogSXMgaXQgcHJpbWFyeSBpbmRleAogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwdWJsaWMgJGlzUHJpbWFyeTsKCiAgICAvKioKICAgICAqIFR5cGUgb2YgdGhlIGluZGV4CiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcTjFxbEluZGV4OjpVTlNQRUNJRklFRAogICAgICogQHNlZSBcQ291Y2hiYXNlXE4xcWxJbmRleDo6R1NJCiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcTjFxbEluZGV4OjpWSUVXCiAgICAgKi8KICAgIHB1YmxpYyAkdHlwZTsKCiAgICAvKioKICAgICAqIFRoZSBkZXNjcmlwdGl2ZSBzdGF0ZSBvZiB0aGUgaW5kZXgKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJHN0YXRlOwoKICAgIC8qKgogICAgICogVGhlIGtleXNwYWNlIGZvciB0aGUgaW5kZXgsIHR5cGljYWxseSB0aGUgYnVja2V0IG5hbWUKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAka2V5c3BhY2U7CgogICAgLyoqCiAgICAgKiBUaGUgbmFtZXNwYWNlIGZvciB0aGUgaW5kZXguIEEgbmFtZXNwYWNlIGlzIGEgcmVzb3VyY2UgcG9vbCB0aGF0IGNvbnRhaW5zIG11bHRpcGxlIGtleXNwYWNlcwogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRuYW1lc3BhY2U7CgogICAgLyoqCiAgICAgKiBUaGUgZmllbGRzIGNvdmVyZWQgYnkgaW5kZXgKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHVibGljICRmaWVsZHM7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5kZXgncyBjb25kaXRpb24gKHRoZSBXSEVSRSBjbGF1c2UKICAgICAqIG9mIHRoZSBpbmRleCksIG9yIGFuIGVtcHR5IFN0cmluZyBpZiBubyBjb25kaXRpb24gd2FzIHNldC4KICAgICAqCiAgICAgKiBOb3RlIHRoYXQgdGhlIHF1ZXJ5IHNlcnZpY2UgY2FuIHByZXNlbnQgdGhlIGNvbmRpdGlvbiBpbiBhIHNsaWdodGx5IGRpZmZlcmVudAogICAgICogbWFubmVyIGZyb20gd2hlbiB5b3UgZGVjbGFyZWQgdGhlIGluZGV4OiBmb3IgaW5zdGFuY2UgaXQgd2lsbCB3cmFwIGV4cHJlc3Npb25zCiAgICAgKiB3aXRoIHBhcmVudGhlc2VzIGFuZCBzaG93IHRoZSBmaWVsZHMgaW4gYW4gZXNjYXBlZCBmb3JtYXQgKHN1cnJvdW5kZWQgYnkgYmFja3RpY2tzKS4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGNvbmRpdGlvbjsKfQoKLyoqCiAqIEEgYnVpbGRlciBmb3Igc3ViZG9jdW1lbnQgbG9va3Vwcy4gSW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgZmluYWwgc2V0IG9mIG9wZXJhdGlvbnMsIHVzZSB0aGUKICogZXhlY3V0ZSgpIG1ldGhvZC4KICoKICogSW5zdGFuY2VzIG9mIHRoaXMgYnVpbGRlciBzaG91bGQgYmUgb2J0YWluZWQgdGhyb3VnaCBcQ291Y2hiYXNlXEJ1Y2tldC0+bG9va3VwSW4oKQogKgogKiBAc2VlIFxDb3VjaGJhc2VcQnVja2V0Ojpsb29rdXBJbgogKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvc3ViZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAqICAgU3ViLURvY3VtZW50IE9wZXJhdGlvbnMKICovCmNsYXNzIExvb2t1cEluQnVpbGRlcgp7CiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEdldCBhIHZhbHVlIGluc2lkZSB0aGUgSlNPTiBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSBwYXRoIGluc2lkZSB0aGUgZG9jdW1lbnQgd2hlcmUgdG8gZ2V0IHRoZSB2YWx1ZSBmcm9tLgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIHRoZSBhcnJheSB3aXRoIGNvbW1hbmQgbW9kaWZpY2F0b3JzLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZQogICAgICogICAqICJ4YXR0ciIgKGRlZmF1bHQ6IGZhbHNlKSBpZiB0cnVlLCB0aGUgcGF0aCByZWZlcnMgdG8gYSBsb2NhdGlvbgogICAgICogICAgIHdpdGhpbiB0aGUgZG9jdW1lbnQncyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBub3QgdGhlIGRvY3VtZW50IGJvZHkuCiAgICAgKiBAcmV0dXJuIExvb2t1cEluQnVpbGRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRwYXRoLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogR2V0IGEgY291bnQgb2YgdmFsdWVzIGluc2lkZSB0aGUgSlNPTiBkb2N1bWVudC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIENvdWNoYmFzZSBTZXJ2ZXIgNS4wIGFuZCBsYXRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSBwYXRoIGluc2lkZSB0aGUgZG9jdW1lbnQgd2hlcmUgdG8gZ2V0IHRoZSBjb3VudCBmcm9tLgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIHRoZSBhcnJheSB3aXRoIGNvbW1hbmQgbW9kaWZpY2F0b3JzLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZQogICAgICogICAqICJ4YXR0ciIgKGRlZmF1bHQ6IGZhbHNlKSBpZiB0cnVlLCB0aGUgcGF0aCByZWZlcnMgdG8gYSBsb2NhdGlvbgogICAgICogICAgIHdpdGhpbiB0aGUgZG9jdW1lbnQncyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBub3QgdGhlIGRvY3VtZW50IGJvZHkuCiAgICAgKiBAcmV0dXJuIExvb2t1cEluQnVpbGRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q291bnQoJHBhdGgsICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBhIHZhbHVlIGV4aXN0cyBpbnNpZGUgdGhlIGRvY3VtZW50LgogICAgICoKICAgICAqIFRoaXMgZG9lc24ndCB0cmFuc21pdCB0aGUgdmFsdWUgb24gdGhlIHdpcmUgaWYgaXQgZXhpc3RzLCBzYXZpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZSBvdmVyaGVhZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSBwYXRoIGluc2lkZSB0aGUgZG9jdW1lbnQgdG8gY2hlY2sgZm9yIGV4aXN0ZW5jZQogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIHRoZSBhcnJheSB3aXRoIGNvbW1hbmQgbW9kaWZpY2F0b3JzLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZQogICAgICogICAqICJ4YXR0ciIgKGRlZmF1bHQ6IGZhbHNlKSBpZiB0cnVlLCB0aGUgcGF0aCByZWZlcnMgdG8gYSBsb2NhdGlvbgogICAgICogICAgIHdpdGhpbiB0aGUgZG9jdW1lbnQncyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBub3QgdGhlIGRvY3VtZW50IGJvZHkuCiAgICAgKiBAcmV0dXJuIExvb2t1cEluQnVpbGRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhpc3RzKCRwYXRoLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybSBzZXZlcmFsIGxvb2t1cCBvcGVyYXRpb25zIGluc2lkZSBhIHNpbmdsZSBleGlzdGluZyBKU09OIGRvY3VtZW50LCB1c2luZyBhIHNwZWNpZmljIHRpbWVvdXQKICAgICAqIEByZXR1cm4gRG9jdW1lbnRGcmFnbWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpIHt9Cn0KCi8qKgogKiBBIGJ1aWxkZXIgZm9yIHN1YmRvY3VtZW50IG11dGF0aW9ucy4gSW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgZmluYWwgc2V0IG9mIG9wZXJhdGlvbnMsIHVzZSB0aGUKICogZXhlY3V0ZSgpIG1ldGhvZC4KICoKICogSW5zdGFuY2VzIG9mIHRoaXMgYnVpbGRlciBzaG91bGQgYmUgb2J0YWluZWQgdGhyb3VnaCBcQ291Y2hiYXNlXEJ1Y2tldC0+bXV0YXRlSW4oKQogKgogKiBAc2VlIFxDb3VjaGJhc2VcQnVja2V0OjptdXRhdGVJbgogKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNvdWNoYmFzZS5jb20vZG9jdW1lbnRhdGlvbi9zZXJ2ZXIvY3VycmVudC9zZGsvc3ViZG9jdW1lbnQtb3BlcmF0aW9ucy5odG1sCiAqICAgU3ViLURvY3VtZW50IE9wZXJhdGlvbnMKICovCmNsYXNzIE11dGF0ZUluQnVpbGRlcgp7CiAgICBwdWJsaWMgY29uc3QgRlVMTERPQ19SRVBMQUNFID0gMDsKICAgIHB1YmxpYyBjb25zdCBGVUxMRE9DX1VQU0VSVCA9IDE7CiAgICBwdWJsaWMgY29uc3QgRlVMTERPQ19JTlNFUlQgPSAyOwoKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogSW5zZXJ0IGEgZnJhZ21lbnQgcHJvdmlkZWQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSBwYXRoIHdoZXJlIHRvIGluc2VydCBhIG5ldyBkaWN0aW9uYXJ5IHZhbHVlLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSB0aGUgbmV3IGRpY3Rpb25hcnkgdmFsdWUgdG8gaW5zZXJ0LgogICAgICogQHBhcmFtIGFycmF5fGJvb2wgJG9wdGlvbnMgdGhlIGFycmF5IHdpdGggY29tbWFuZCBtb2RpZmljYXRvcnMuCiAgICAgKiAgIFRoZSBib29sZWFuIHZhbHVlLCBjb250cm9scyAiY3JlYXRlUGF0aCIgb3B0aW9uLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZToKICAgICAqICAgKiAiY3JlYXRlUGF0aCIgKGRlZmF1bHQ6IGZhbHNlKSB0cnVlIHRvIGNyZWF0ZSBtaXNzaW5nIGludGVybWVkaWFyeSBub2Rlcy4KICAgICAqICAgKiAieGF0dHIiIChkZWZhdWx0OiBmYWxzZSkgaWYgdHJ1ZSwgdGhlIHBhdGggcmVmZXJzIHRvIGEgbG9jYXRpb24KICAgICAqICAgICB3aXRoaW4gdGhlIGRvY3VtZW50J3MgZXh0ZW5kZWQgYXR0cmlidXRlcywgbm90IHRoZSBkb2N1bWVudCBib2R5LgogICAgICogQHJldHVybiBNdXRhdGVJbkJ1aWxkZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluc2VydCgkcGF0aCwgJHZhbHVlLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogU2VsZWN0IG1vZGUgZm9yIG5ldyBmdWxsLWRvY3VtZW50IG9wZXJhdGlvbnMuCiAgICAgKgogICAgICogSXQgZGVmaW5lcyBiZWhhdmlvdXIgb2YgTXV0YXRlSW5CdWlsZGVyI3Vwc2VydCgpIG1ldGhvZC4gVGhlICRtb2RlCiAgICAgKiBjb3VsZCB0YWtlIG9uZSBvZiB0aHJlZSBtb2RlczoKICAgICAqICAqIEZVTExET0NfUkVQTEFDRTogY29tcGxhaW4gd2hlbiBkb2N1bWVudCBkb2VzIG5vdCBleGlzdAogICAgICogICogRlVMTERPQ19JTlNFUlQ6IGNvbXBsYWluIHdoZW4gZG9jdW1lbnQgZG9lcyBleGlzdAogICAgICogICogRlVMTERPQ19VUFNFUlQ6IHVuY29uZGl0aW9uYWxseSBzZXQgdmFsdWUgZm9yIHRoZSBkb2N1bWVudAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG1vZGUgb3BlcmF0aW9uIG1vZGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZGVEb2N1bWVudCgkbW9kZSkge30KCiAgICAvKioKICAgICAqIEluc2VydCBhIGZyYWdtZW50LCByZXBsYWNpbmcgdGhlIG9sZCB2YWx1ZSBpZiB0aGUgcGF0aCBleGlzdHMuCiAgICAgKgogICAgICogV2hlbiBvbmx5IG9uZSBhcmd1bWVudCBzdXBwbGllZCwgdGhlIGxpYnJhcnkgd2lsbCBoYW5kbGUgaXQgYXMgZnVsbC1kb2N1bWVudAogICAgICogdXBzZXJ0LCBhbmQgdHJlYXQgdGhpcyBhcmd1bWVudCBhcyB2YWx1ZS4gU2VlIE11dGF0ZUluQnVpbGRlciNtb2RlRG9jdW1lbnQoKQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGggdGhlIHBhdGggd2hlcmUgdG8gaW5zZXJ0IChvciByZXBsYWNlKSBhIGRpY3Rpb25hcnkgdmFsdWUKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgdGhlIG5ldyBkaWN0aW9uYXJ5IHZhbHVlIHRvIGJlIGFwcGxpZWQuCiAgICAgKiBAcGFyYW0gYXJyYXl8Ym9vbCAkb3B0aW9ucyB0aGUgYXJyYXkgd2l0aCBjb21tYW5kIG1vZGlmaWNhdG9ycy4KICAgICAqICAgVGhlIGJvb2xlYW4gdmFsdWUsIGNvbnRyb2xzICJjcmVhdGVQYXRoIiBvcHRpb24uIFN1cHBvcnRlZCB2YWx1ZXMgYXJlOgogICAgICogICAqICJjcmVhdGVQYXRoIiAoZGVmYXVsdDogZmFsc2UpIHRydWUgdG8gY3JlYXRlIG1pc3NpbmcgaW50ZXJtZWRpYXJ5IG5vZGVzLgogICAgICogICAqICJ4YXR0ciIgKGRlZmF1bHQ6IGZhbHNlKSBpZiB0cnVlLCB0aGUgcGF0aCByZWZlcnMgdG8gYSBsb2NhdGlvbgogICAgICogICAgIHdpdGhpbiB0aGUgZG9jdW1lbnQncyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBub3QgdGhlIGRvY3VtZW50IGJvZHkuCiAgICAgKiBAcmV0dXJuIE11dGF0ZUluQnVpbGRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdXBzZXJ0KCRwYXRoLCAkdmFsdWUsICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBSZXBsYWNlIGFuIGV4aXN0aW5nIHZhbHVlIGJ5IHRoZSBnaXZlbiBmcmFnbWVudAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGggdGhlIHBhdGggd2hlcmUgdGhlIHZhbHVlIHRvIHJlcGxhY2UgaXMKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgdGhlIG5ldyB2YWx1ZQogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIHRoZSBhcnJheSB3aXRoIGNvbW1hbmQgbW9kaWZpY2F0b3JzLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZToKICAgICAqICAgKiAieGF0dHIiIChkZWZhdWx0OiBmYWxzZSkgaWYgdHJ1ZSwgdGhlIHBhdGggcmVmZXJzIHRvIGEgbG9jYXRpb24KICAgICAqICAgICB3aXRoaW4gdGhlIGRvY3VtZW50J3MgZXh0ZW5kZWQgYXR0cmlidXRlcywgbm90IHRoZSBkb2N1bWVudCBib2R5LgogICAgICogQHJldHVybiBNdXRhdGVJbkJ1aWxkZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcGxhY2UoJHBhdGgsICR2YWx1ZSwgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBhbiBlbnRyeSBpbiBhIEpTT04gZG9jdW1lbnQuCiAgICAgKgogICAgICogU2NhbGFyLCBhcnJheSBlbGVtZW50LCBkaWN0aW9uYXJ5IGVudHJ5LCB3aG9sZSBhcnJheSBvciBkaWN0aW9uYXJ5LCBkZXBlbmRpbmcgb24gdGhlIHBhdGguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aCB0aGUgcGF0aCB0byByZW1vdmUKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyB0aGUgYXJyYXkgd2l0aCBjb21tYW5kIG1vZGlmaWNhdG9ycy4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6CiAgICAgKiAgICogInhhdHRyIiAoZGVmYXVsdDogZmFsc2UpIGlmIHRydWUsIHRoZSBwYXRoIHJlZmVycyB0byBhIGxvY2F0aW9uCiAgICAgKiAgICAgd2l0aGluIHRoZSBkb2N1bWVudCdzIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIG5vdCB0aGUgZG9jdW1lbnQgYm9keS4KICAgICAqIEByZXR1cm4gTXV0YXRlSW5CdWlsZGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoJHBhdGgsICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBQcmVwZW5kIHRvIGFuIGV4aXN0aW5nIGFycmF5LCBwdXNoaW5nIHRoZSB2YWx1ZSB0byB0aGUgZnJvbnQvZmlyc3QgcG9zaXRpb24gaW4gdGhlIGFycmF5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGggdGhlIHBhdGggb2YgdGhlIGFycmF5CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIHRoZSB2YWx1ZSB0byBpbnNlcnQgYXQgdGhlIGZyb250IG9mIHRoZSBhcnJheQogICAgICogQHBhcmFtIGFycmF5fGJvb2wgJG9wdGlvbnMgdGhlIGFycmF5IHdpdGggY29tbWFuZCBtb2RpZmljYXRvcnMuCiAgICAgKiAgIFRoZSBib29sZWFuIHZhbHVlLCBjb250cm9scyAiY3JlYXRlUGF0aCIgb3B0aW9uLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZToKICAgICAqICAgKiAiY3JlYXRlUGF0aCIgKGRlZmF1bHQ6IGZhbHNlKSB0cnVlIHRvIGNyZWF0ZSBtaXNzaW5nIGludGVybWVkaWFyeSBub2Rlcy4KICAgICAqICAgKiAieGF0dHIiIChkZWZhdWx0OiBmYWxzZSkgaWYgdHJ1ZSwgdGhlIHBhdGggcmVmZXJzIHRvIGEgbG9jYXRpb24KICAgICAqICAgICB3aXRoaW4gdGhlIGRvY3VtZW50J3MgZXh0ZW5kZWQgYXR0cmlidXRlcywgbm90IHRoZSBkb2N1bWVudCBib2R5LgogICAgICogQHJldHVybiBNdXRhdGVJbkJ1aWxkZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFycmF5UHJlcGVuZCgkcGF0aCwgJHZhbHVlLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogUHJlcGVuZCBtdWx0aXBsZSB2YWx1ZXMgYXQgb25jZSBpbiBhbiBleGlzdGluZyBhcnJheS4KICAgICAqCiAgICAgKiBQdXNoIGFsbCB2YWx1ZXMgaW4gdGhlIGNvbGxlY3Rpb24ncyBpdGVyYXRpb24gb3JkZXIgdG8gdGhlIGZyb250L3N0YXJ0IG9mIHRoZSBhcnJheS4KICAgICAqIEZvciBleGFtcGxlIGdpdmVuIGFuIGFycmF5IFtBLCBCLCBDXSwgcHJlcGVuZGluZyB0aGUgdmFsdWVzIFggYW5kIFkgeWllbGRzIFtYLCBZLCBBLCBCLCBDXQogICAgICogYW5kIG5vdCBbW1gsIFldLCBBLCBCLCBDXS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSBwYXRoIG9mIHRoZSBhcnJheQogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZXMgdGhlIHZhbHVlcyB0byBpbnNlcnQgYXQgdGhlIGZyb250IG9mIHRoZSBhcnJheSBhcyBpbmRpdmlkdWFsIGVsZW1lbnRzCiAgICAgKiBAcGFyYW0gYXJyYXl8Ym9vbCAkb3B0aW9ucyB0aGUgYXJyYXkgd2l0aCBjb21tYW5kIG1vZGlmaWNhdG9ycy4KICAgICAqICAgVGhlIGJvb2xlYW4gdmFsdWUsIGNvbnRyb2xzICJjcmVhdGVQYXRoIiBvcHRpb24uIFN1cHBvcnRlZCB2YWx1ZXMgYXJlOgogICAgICogICAqICJjcmVhdGVQYXRoIiAoZGVmYXVsdDogZmFsc2UpIHRydWUgdG8gY3JlYXRlIG1pc3NpbmcgaW50ZXJtZWRpYXJ5IG5vZGVzLgogICAgICogICAqICJ4YXR0ciIgKGRlZmF1bHQ6IGZhbHNlKSBpZiB0cnVlLCB0aGUgcGF0aCByZWZlcnMgdG8gYSBsb2NhdGlvbgogICAgICogICAgIHdpdGhpbiB0aGUgZG9jdW1lbnQncyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBub3QgdGhlIGRvY3VtZW50IGJvZHkuCiAgICAgKiBAcmV0dXJuIE11dGF0ZUluQnVpbGRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXJyYXlQcmVwZW5kQWxsKCRwYXRoLCAkdmFsdWVzLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogQXBwZW5kIHRvIGFuIGV4aXN0aW5nIGFycmF5LCBwdXNoaW5nIHRoZSB2YWx1ZSB0byB0aGUgYmFjay9sYXN0IHBvc2l0aW9uIGluIHRoZSBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSBwYXRoIG9mIHRoZSBhcnJheQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSB0aGUgdmFsdWUgdG8gaW5zZXJ0IGF0IHRoZSBiYWNrIG9mIHRoZSBhcnJheQogICAgICogQHBhcmFtIGFycmF5fGJvb2wgJG9wdGlvbnMgdGhlIGFycmF5IHdpdGggY29tbWFuZCBtb2RpZmljYXRvcnMuCiAgICAgKiAgIFRoZSBib29sZWFuIHZhbHVlLCBjb250cm9scyAiY3JlYXRlUGF0aCIgb3B0aW9uLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZToKICAgICAqICAgKiAiY3JlYXRlUGF0aCIgKGRlZmF1bHQ6IGZhbHNlKSB0cnVlIHRvIGNyZWF0ZSBtaXNzaW5nIGludGVybWVkaWFyeSBub2Rlcy4KICAgICAqICAgKiAieGF0dHIiIChkZWZhdWx0OiBmYWxzZSkgaWYgdHJ1ZSwgdGhlIHBhdGggcmVmZXJzIHRvIGEgbG9jYXRpb24KICAgICAqICAgICB3aXRoaW4gdGhlIGRvY3VtZW50J3MgZXh0ZW5kZWQgYXR0cmlidXRlcywgbm90IHRoZSBkb2N1bWVudCBib2R5LgogICAgICogQHJldHVybiBNdXRhdGVJbkJ1aWxkZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFycmF5QXBwZW5kKCRwYXRoLCAkdmFsdWUsICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBBcHBlbmQgbXVsdGlwbGUgdmFsdWVzIGF0IG9uY2UgaW4gYW4gZXhpc3RpbmcgYXJyYXkuCiAgICAgKgogICAgICogUHVzaCBhbGwgdmFsdWVzIGluIHRoZSBjb2xsZWN0aW9uJ3MgaXRlcmF0aW9uIG9yZGVyIHRvIHRoZSBiYWNrL2VuZCBvZiB0aGUgYXJyYXkuCiAgICAgKiBGb3IgZXhhbXBsZSBnaXZlbiBhbiBhcnJheSBbQSwgQiwgQ10sIGFwcGVuZGluZyB0aGUgdmFsdWVzIFggYW5kIFkgeWllbGRzIFtBLCBCLCBDLCBYLCBZXQogICAgICogYW5kIG5vdCBbQSwgQiwgQywgW1gsIFldXS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSBwYXRoIG9mIHRoZSBhcnJheQogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZXMgdGhlIHZhbHVlcyB0byBpbmRpdmlkdWFsbHkgaW5zZXJ0IGF0IHRoZSBiYWNrIG9mIHRoZSBhcnJheQogICAgICogQHBhcmFtIGFycmF5fGJvb2wgJG9wdGlvbnMgdGhlIGFycmF5IHdpdGggY29tbWFuZCBtb2RpZmljYXRvcnMuCiAgICAgKiAgIFRoZSBib29sZWFuIHZhbHVlLCBjb250cm9scyAiY3JlYXRlUGF0aCIgb3B0aW9uLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZToKICAgICAqICAgKiAiY3JlYXRlUGF0aCIgKGRlZmF1bHQ6IGZhbHNlKSB0cnVlIHRvIGNyZWF0ZSBtaXNzaW5nIGludGVybWVkaWFyeSBub2Rlcy4KICAgICAqICAgKiAieGF0dHIiIChkZWZhdWx0OiBmYWxzZSkgaWYgdHJ1ZSwgdGhlIHBhdGggcmVmZXJzIHRvIGEgbG9jYXRpb24KICAgICAqICAgICB3aXRoaW4gdGhlIGRvY3VtZW50J3MgZXh0ZW5kZWQgYXR0cmlidXRlcywgbm90IHRoZSBkb2N1bWVudCBib2R5LgogICAgICogQHJldHVybiBNdXRhdGVJbkJ1aWxkZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFycmF5QXBwZW5kQWxsKCRwYXRoLCAkdmFsdWVzLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogSW5zZXJ0IGludG8gYW4gZXhpc3RpbmcgYXJyYXkgYXQgYSBzcGVjaWZpYyBwb3NpdGlvbgogICAgICoKICAgICAqIFBvc2l0aW9uIGRlbm90ZWQgaW4gdGhlIHBhdGgsIGVnLiAic3ViLmFycmF5WzJdIi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSBwYXRoIChpbmNsdWRpbmcgYXJyYXkgcG9zaXRpb24pIHdoZXJlIHRvIGluc2VydCB0aGUgdmFsdWUKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgdGhlIHZhbHVlIHRvIGluc2VydCBpbiB0aGUgYXJyYXkKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyB0aGUgYXJyYXkgd2l0aCBjb21tYW5kIG1vZGlmaWNhdG9ycy4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6CiAgICAgKiAgICogInhhdHRyIiAoZGVmYXVsdDogZmFsc2UpIGlmIHRydWUsIHRoZSBwYXRoIHJlZmVycyB0byBhIGxvY2F0aW9uCiAgICAgKiAgICAgd2l0aGluIHRoZSBkb2N1bWVudCdzIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIG5vdCB0aGUgZG9jdW1lbnQgYm9keS4KICAgICAqIEByZXR1cm4gTXV0YXRlSW5CdWlsZGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcnJheUluc2VydCgkcGF0aCwgJHZhbHVlLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogSW5zZXJ0IG11bHRpcGxlIHZhbHVlcyBhdCBvbmNlIGluIGFuIGV4aXN0aW5nIGFycmF5IGF0IGEgc3BlY2lmaWVkIHBvc2l0aW9uLgogICAgICoKICAgICAqIFBvc2l0aW9uIGRlbm90ZWQgaW4gdGhlIHBhdGgsIGVnLiAic3ViLmFycmF5WzJdIiksIGluc2VydGluZyBhbGwgdmFsdWVzIGluIHRoZSBjb2xsZWN0aW9uJ3MgaXRlcmF0aW9uIG9yZGVyCiAgICAgKiBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHNoaWZ0aW5nIGV4aXN0aW5nIHZhbHVlcyBiZXlvbmQgdGhlIHBvc2l0aW9uIGJ5IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlCiAgICAgKiBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEZvciBleGFtcGxlIGdpdmVuIGFuIGFycmF5IFtBLCBCLCBDXSwgaW5zZXJ0aW5nIHRoZSB2YWx1ZXMgWCBhbmQgWSBhdCBwb3NpdGlvbiAxIHlpZWxkcyBbQSwgQiwgWCwgWSwgQ10KICAgICAqIGFuZCBub3QgW0EsIEIsIFtYLCBZXSwgQ10uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSBwYXRoIG9mIHRoZSBhcnJheQogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZXMgdGhlIHZhbHVlcyB0byBpbnNlcnQgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBvZiB0aGUgYXJyYXksIGVhY2ggdmFsdWUgYmVjb21pbmcKICAgICAqICAgYW4gZW50cnkgYXQgb3IgYWZ0ZXIgdGhlIGluc2VydCBwb3NpdGlvbi4KICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyB0aGUgYXJyYXkgd2l0aCBjb21tYW5kIG1vZGlmaWNhdG9ycy4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6CiAgICAgKiAgICogInhhdHRyIiAoZGVmYXVsdDogZmFsc2UpIGlmIHRydWUsIHRoZSBwYXRoIHJlZmVycyB0byBhIGxvY2F0aW9uCiAgICAgKiAgICAgd2l0aGluIHRoZSBkb2N1bWVudCdzIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIG5vdCB0aGUgZG9jdW1lbnQgYm9keS4KICAgICAqIEByZXR1cm4gTXV0YXRlSW5CdWlsZGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcnJheUluc2VydEFsbCgkcGF0aCwgJHZhbHVlcywgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIEluc2VydCBhIHZhbHVlIGluIGFuIGV4aXN0aW5nIGFycmF5IG9ubHkgaWYgdGhlIHZhbHVlCiAgICAgKiBpc24ndCBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGUgYXJyYXkgKGJ5IHdheSBvZiBzdHJpbmcgY29tcGFyaXNvbikuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aCB0aGUgcGF0aCB0byBtdXRhdGUgaW4gdGhlIEpTT04KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgdGhlIHZhbHVlIHRvIGluc2VydAogICAgICogQHBhcmFtIGFycmF5fGJvb2wgJG9wdGlvbnMgdGhlIGFycmF5IHdpdGggY29tbWFuZCBtb2RpZmljYXRvcnMuCiAgICAgKiAgIFRoZSBib29sZWFuIHZhbHVlLCBjb250cm9scyAiY3JlYXRlUGF0aCIgb3B0aW9uLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZToKICAgICAqICAgKiAiY3JlYXRlUGF0aCIgKGRlZmF1bHQ6IGZhbHNlKSB0cnVlIHRvIGNyZWF0ZSBtaXNzaW5nIGludGVybWVkaWFyeSBub2Rlcy4KICAgICAqICAgKiAieGF0dHIiIChkZWZhdWx0OiBmYWxzZSkgaWYgdHJ1ZSwgdGhlIHBhdGggcmVmZXJzIHRvIGEgbG9jYXRpb24KICAgICAqICAgICB3aXRoaW4gdGhlIGRvY3VtZW50J3MgZXh0ZW5kZWQgYXR0cmlidXRlcywgbm90IHRoZSBkb2N1bWVudCBib2R5LgogICAgICogQHJldHVybiBNdXRhdGVJbkJ1aWxkZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFycmF5QWRkVW5pcXVlKCRwYXRoLCAkdmFsdWUsICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnQvZGVjcmVtZW50IGEgbnVtZXJpY2FsIGZyYWdtZW50IGluIGEgSlNPTiBkb2N1bWVudC4KICAgICAqCiAgICAgKiBJZiB0aGUgdmFsdWUgKGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCkgZG9lc24ndCBleGlzdCB0aGUgY291bnRlcgogICAgICogaXMgY3JlYXRlZCBhbmQgdGFrZXMgdGhlIHZhbHVlIG9mIHRoZSBkZWx0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSBwYXRoIHRvIHRoZSBjb3VudGVyIChtdXN0IGJlIGNvbnRhaW5pbmcgYSBudW1iZXIpLgogICAgICogQHBhcmFtIGludCAkZGVsdGEgdGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgdGhlIGNvdW50ZXIgYnkKICAgICAqIEBwYXJhbSBhcnJheXxib29sICRvcHRpb25zIHRoZSBhcnJheSB3aXRoIGNvbW1hbmQgbW9kaWZpY2F0b3JzLgogICAgICogICBUaGUgYm9vbGVhbiB2YWx1ZSwgY29udHJvbHMgImNyZWF0ZVBhdGgiIG9wdGlvbi4gU3VwcG9ydGVkIHZhbHVlcyBhcmU6CiAgICAgKiAgICogImNyZWF0ZVBhdGgiIChkZWZhdWx0OiBmYWxzZSkgdHJ1ZSB0byBjcmVhdGUgbWlzc2luZyBpbnRlcm1lZGlhcnkgbm9kZXMuCiAgICAgKiAgICogInhhdHRyIiAoZGVmYXVsdDogZmFsc2UpIGlmIHRydWUsIHRoZSBwYXRoIHJlZmVycyB0byBhIGxvY2F0aW9uCiAgICAgKiAgICAgd2l0aGluIHRoZSBkb2N1bWVudCdzIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIG5vdCB0aGUgZG9jdW1lbnQgYm9keS4KICAgICAqIEByZXR1cm4gTXV0YXRlSW5CdWlsZGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudGVyKCRwYXRoLCAkZGVsdGEsICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBDaGFuZ2UgdGhlIGV4cGlyeSBvZiB0aGUgZW5jbG9zaW5nIGRvY3VtZW50IGFzIHBhcnQgb2YgdGhlIG11dGF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkZXhwaXJ5IHRoZSBuZXcgZXhwaXJ5IHRvIGFwcGx5IChvciAwIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBleHBpcnkpCiAgICAgKiBAcmV0dXJuIE11dGF0ZUluQnVpbGRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEV4cGlyeSgkZXhwaXJ5KSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybSBzZXZlcmFsIG11dGF0aW9uIG9wZXJhdGlvbnMgaW5zaWRlIGEgc2luZ2xlIGV4aXN0aW5nIEpTT04gZG9jdW1lbnQuCiAgICAgKiBAcmV0dXJuIERvY3VtZW50RnJhZ21lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7fQp9CgovKioKICogUmVwcmVzZW50cyBmdWxsIHRleHQgc2VhcmNoIHF1ZXJ5CiAqCiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci80LjYvc2RrL3BocC9mdWxsLXRleHQtc2VhcmNoaW5nLXdpdGgtc2RrLmh0bWwKICogICBTZWFyY2hpbmcgZnJvbSB0aGUgU0RLCiAqLwpjbGFzcyBTZWFyY2hRdWVyeSBpbXBsZW1lbnRzIFxKc29uU2VyaWFsaXphYmxlCnsKICAgIHB1YmxpYyBjb25zdCBISUdITElHSFRfSFRNTCA9ICdodG1sJzsKICAgIHB1YmxpYyBjb25zdCBISUdITElHSFRfQU5TSSA9ICdhbnNpJzsKICAgIHB1YmxpYyBjb25zdCBISUdITElHSFRfU0lNUExFID0gJ3NpbXBsZSc7CgogICAgLyoqCiAgICAgKiBQcmVwYXJlIGJvb2xlYW4gc2VhcmNoIHF1ZXJ5CiAgICAgKgogICAgICogQHJldHVybiBCb29sZWFuU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib29sZWFuKCkge30KCiAgICAvKioKICAgICAqIFByZXBhcmUgZGF0ZSByYW5nZSBzZWFyY2ggcXVlcnkKICAgICAqCiAgICAgKiBAcmV0dXJuIERhdGVSYW5nZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGF0ZVJhbmdlKCkge30KCiAgICAvKioKICAgICAqIFByZXBhcmUgbnVtZXJpYyByYW5nZSBzZWFyY2ggcXVlcnkKICAgICAqCiAgICAgKiBAcmV0dXJuIE51bWVyaWNSYW5nZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbnVtZXJpY1JhbmdlKCkge30KCiAgICAvKioKICAgICAqIFByZXBhcmUgdGVybSByYW5nZSBzZWFyY2ggcXVlcnkKICAgICAqCiAgICAgKiBAcmV0dXJuIFRlcm1SYW5nZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGVybVJhbmdlKCkge30KCiAgICAvKioKICAgICAqIFByZXBhcmUgYm9vbGVhbiBmaWVsZCBzZWFyY2ggcXVlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkdmFsdWUKICAgICAqIEByZXR1cm4gQm9vbGVhbkZpZWxkU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBib29sZWFuRmllbGQoJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogUHJlcGFyZSBjb21wb3VuZCBjb25qdW5jdGlvbiBzZWFyY2ggcXVlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gU2VhcmNoUXVlcnlQYXJ0IC4uLiRxdWVyaWVzIGxpc3Qgb2YgaW5uZXIgcXVlcnkgcGFydHMKICAgICAqIEByZXR1cm4gQ29uanVuY3Rpb25TZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvbmp1bmN0cyguLi4kcXVlcmllcykge30KCiAgICAvKioKICAgICAqIFByZXBhcmUgY29tcG91bmQgZGlzanVuY3Rpb24gc2VhcmNoIHF1ZXJ5CiAgICAgKgogICAgICogQHBhcmFtIFNlYXJjaFF1ZXJ5UGFydCAuLi4kcXVlcmllcyBsaXN0IG9mIGlubmVyIHF1ZXJ5IHBhcnRzCiAgICAgKiBAcmV0dXJuIERpc2p1bmN0aW9uU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkaXNqdW5jdHMoLi4uJHF1ZXJpZXMpIHt9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlIGRvY3VtZW50IElEIHNlYXJjaCBxdWVyeQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgLi4uJGRvY3VtZW50SWRzCiAgICAgKiBAcmV0dXJuIERvY0lkU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkb2NJZCguLi4kZG9jdW1lbnRJZHMpIHt9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlIG1hdGNoIHNlYXJjaCBxdWVyeQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1hdGNoCiAgICAgKiBAcmV0dXJuIE1hdGNoU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXRjaCgkbWF0Y2gpIHt9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlIG1hdGNoIGFsbCBzZWFyY2ggcXVlcnkKICAgICAqCiAgICAgKiBAcmV0dXJuIE1hdGNoQWxsU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXRjaEFsbCgpIHt9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlIG1hdGNoIG5vbiBzZWFyY2ggcXVlcnkKICAgICAqCiAgICAgKiBAcmV0dXJuIE1hdGNoTm9uZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF0Y2hOb25lKCkge30KCiAgICAvKioKICAgICAqIFByZXBhcmUgcGhyYXNlIHNlYXJjaCBxdWVyeQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgLi4uJHRlcm1zCiAgICAgKiBAcmV0dXJuIE1hdGNoUGhyYXNlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXRjaFBocmFzZSguLi4kdGVybXMpIHt9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlIHByZWZpeCBzZWFyY2ggcXVlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcmVmaXgKICAgICAqIEByZXR1cm4gUHJlZml4U2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcmVmaXgoJHByZWZpeCkge30KCiAgICAvKioKICAgICAqIFByZXBhcmUgcXVlcnkgc3RyaW5nIHNlYXJjaCBxdWVyeQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5U3RyaW5nCiAgICAgKiBAcmV0dXJuIFF1ZXJ5U3RyaW5nU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBxdWVyeVN0cmluZygkcXVlcnlTdHJpbmcpIHt9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlIHJlZ2V4cCBzZWFyY2ggcXVlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWdleHAKICAgICAqIEByZXR1cm4gUmVnZXhwU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWdleHAoJHJlZ2V4cCkge30KCiAgICAvKioKICAgICAqIFByZXBhcmUgdGVybSBzZWFyY2ggcXVlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZXJtCiAgICAgKiBAcmV0dXJuIFRlcm1TZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRlcm0oJHRlcm0pIHt9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlIHdpbGRjYXJkIHNlYXJjaCBxdWVyeQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHdpbGRjYXJkCiAgICAgKiBAcmV0dXJuIFdpbGRjYXJkU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3aWxkY2FyZCgkd2lsZGNhcmQpIHt9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlIGdlbyBkaXN0YW5jZSBzZWFyY2ggcXVlcnkKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGxvbmdpdHVkZQogICAgICogQHBhcmFtIGZsb2F0ICRsYXRpdHVkZQogICAgICogQHBhcmFtIHN0cmluZyAkZGlzdGFuY2UgZS5nLiAiMTBtaSIKICAgICAqIEByZXR1cm4gR2VvRGlzdGFuY2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlb0Rpc3RhbmNlKCRsb25naXR1ZGUsICRsYXRpdHVkZSwgJGRpc3RhbmNlKSB7fQoKICAgIC8qKgogICAgICogUHJlcGFyZSBnZW8gYm91bmRpbmcgYm94IHNlYXJjaCBxdWVyeQogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkdG9wTGVmdExvbmdpdHVkZQogICAgICogQHBhcmFtIGZsb2F0ICR0b3BMZWZ0TGF0aXR1ZGUKICAgICAqIEBwYXJhbSBmbG9hdCAkYm90dG9tUmlnaHRMb25naXR1ZGUKICAgICAqIEBwYXJhbSBmbG9hdCAkYm90dG9tUmlnaHRMYXRpdHVkZQogICAgICogQHJldHVybiBHZW9Cb3VuZGluZ0JveFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VvQm91bmRpbmdCb3goJHRvcExlZnRMb25naXR1ZGUsICR0b3BMZWZ0TGF0aXR1ZGUsICRib3R0b21SaWdodExvbmdpdHVkZSwgJGJvdHRvbVJpZ2h0TGF0aXR1ZGUpIHt9CgogICAgLyoqCiAgICAgKiBQcmVwYXJlIHRlcm0gc2VhcmNoIGZhY2V0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQKICAgICAqIEBwYXJhbSBpbnQgJGxpbWl0CiAgICAgKiBAcmV0dXJuIFRlcm1TZWFyY2hGYWNldAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRlcm1GYWNldCgkZmllbGQsICRsaW1pdCkge30KCiAgICAvKioKICAgICAqIFByZXBhcmUgZGF0ZSByYW5nZSBzZWFyY2ggZmFjZXQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZAogICAgICogQHBhcmFtIGludCAkbGltaXQKICAgICAqIEByZXR1cm4gRGF0ZVJhbmdlU2VhcmNoRmFjZXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkYXRlUmFuZ2VGYWNldCgkZmllbGQsICRsaW1pdCkge30KCiAgICAvKioKICAgICAqIFByZXBhcmUgbnVtZXJpYyByYW5nZSBzZWFyY2ggZmFjZXQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZAogICAgICogQHBhcmFtIGludCAkbGltaXQKICAgICAqIEByZXR1cm4gTnVtZXJpY1JhbmdlU2VhcmNoRmFjZXQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBudW1lcmljUmFuZ2VGYWNldCgkZmllbGQsICRsaW1pdCkge30KCiAgICAvKioKICAgICAqIFByZXBhcmUgYW4gRlRTIFNlYXJjaFF1ZXJ5IG9uIGFuIGluZGV4LgogICAgICoKICAgICAqIFRvcCBsZXZlbCBxdWVyeSBwYXJhbWV0ZXJzIGNhbiBiZSBzZXQgYWZ0ZXIgdGhhdCBieSB1c2luZyB0aGUgZmx1ZW50IEFQSS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmRleE5hbWUgdGhlIEZUUyBpbmRleCB0byBzZWFyY2ggaW4KICAgICAqIEBwYXJhbSBTZWFyY2hRdWVyeVBhcnQgJHF1ZXJ5UGFydCB0aGUgYm9keSBvZiB0aGUgRlRTIHF1ZXJ5IChlLmcuIGEgbWF0Y2ggcGhyYXNlIHF1ZXJ5KQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGluZGV4TmFtZSwgJHF1ZXJ5UGFydCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIC8qKgogICAgICogQWRkIGEgbGltaXQgdG8gdGhlIHF1ZXJ5IG9uIHRoZSBudW1iZXIgb2YgaGl0cyBpdCBjYW4gcmV0dXJuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGltaXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGhpdHMgdG8gcmV0dXJuCiAgICAgKiBAcmV0dXJuIFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaW1pdCgkbGltaXQpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG51bWJlciBvZiBoaXRzIHRvIHNraXAgKGVnLiBmb3IgcGFnaW5hdGlvbikuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2tpcCB0aGUgbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2tpcAogICAgICogQHJldHVybiBTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2tpcCgkc2tpcCkge30KCiAgICAvKioKICAgICAqIEFjdGl2YXRlcyB0aGUgZXhwbGFuYXRpb24gb2YgZWFjaCByZXN1bHQgaGl0IGluIHRoZSByZXNwb25zZQogICAgICoKICAgICAqIEBwYXJhbSBib29sICRleHBsYWluCiAgICAgKiBAcmV0dXJuIFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleHBsYWluKCRleHBsYWluKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgc2VydmVyIHNpZGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRzZXJ2ZXJTaWRlVGltZW91dCB0aGUgc2VydmVyIHNpZGUgdGltZW91dCB0byBhcHBseQogICAgICogQHJldHVybiBTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VydmVyU2lkZVRpbWVvdXQoJHNlcnZlclNpZGVUaW1lb3V0KSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgY29uc2lzdGVuY3kgdG8gY29uc2lkZXIgZm9yIHRoaXMgRlRTIHF1ZXJ5IHRvIEFUX1BMVVMgYW5kCiAgICAgKiB1c2VzIHRoZSBNdXRhdGlvblN0YXRlIHRvIHBhcmFtZXRlcml6ZSB0aGUgY29uc2lzdGVuY3kuCiAgICAgKgogICAgICogVGhpcyByZXBsYWNlcyBhbnkgY29uc2lzdGVuY3kgdHVuaW5nIHByZXZpb3VzbHkgc2V0LgogICAgICoKICAgICAqIEBwYXJhbSBNdXRhdGlvblN0YXRlICRzdGF0ZSB0aGUgbXV0YXRpb24gc3RhdGUgaW5mb3JtYXRpb24gdG8gd29yayB3aXRoCiAgICAgKiBAcmV0dXJuIFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb25zaXN0ZW50V2l0aCgkc3RhdGUpIHt9CgogICAgLyoqCiAgICAgKiBDb25maWd1cmVzIHRoZSBsaXN0IG9mIGZpZWxkcyBmb3Igd2hpY2ggdGhlIHdob2xlIHZhbHVlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzcG9uc2UuCiAgICAgKgogICAgICogSWYgZW1wdHksIG5vIGZpZWxkIHZhbHVlcyBhcmUgaW5jbHVkZWQuIFRoaXMgZHJpdmVzIHRoZSBpbmNsdXNpb24gb2YgdGhlIGZpZWxkcyBpbiBlYWNoIGhpdC4KICAgICAqIE5vdGUgdGhhdCB0byBiZSBoaWdobGlnaHRlZCwgdGhlIGZpZWxkcyBtdXN0IGJlIHN0b3JlZCBpbiB0aGUgRlRTIGluZGV4LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgLi4uJGZpZWxkcwogICAgICogQHJldHVybiBTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGRzKC4uLiRmaWVsZHMpIHt9CgogICAgLyoqCiAgICAgKiBDb25maWd1cmVzIHRoZSBoaWdobGlnaHRpbmcgb2YgbWF0Y2hlcyBpbiB0aGUgcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHlsZSBoaWdobGlnaHQgc3R5bGUgdG8gYXBwbHkuIFVzZSBjb25zdGFudHMgSElHSExJR0hUX0hUTUwsCiAgICAgKiAgIEhJR0hMSUdIVF9BTlNJLCBISUdITElHSFRfU0lNUExFLgogICAgICogQHBhcmFtIHN0cmluZyAuLi4kZmllbGRzIHRoZSBvcHRpb25hbCBmaWVsZHMgb24gd2hpY2ggdG8gaGlnaGxpZ2h0LgogICAgICogICBJZiBub25lLCBhbGwgZmllbGRzIHdoZXJlIHRoZXJlIGlzIGEgbWF0Y2ggYXJlIGhpZ2hsaWdodGVkLgogICAgICogQHJldHVybiBTZWFyY2hRdWVyeQogICAgICoKICAgICAqIEBzZWUgXENvdWNoYmFzZVxTZWFyY2hRdWVyeTo6SElHSExJR0hUX0hUTUwKICAgICAqIEBzZWUgXENvdWNoYmFzZVxTZWFyY2hRdWVyeTo6SElHSExJR0hUX0FOU0kKICAgICAqIEBzZWUgXENvdWNoYmFzZVxTZWFyY2hRdWVyeTo6SElHSExJR0hUX1NJTVBMRQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGlnaGxpZ2h0KCRzdHlsZSwgLi4uJGZpZWxkcykge30KCiAgICAvKioKICAgICAqIENvbmZpZ3VyZXMgdGhlIGxpc3Qgb2YgZmllbGRzIChpbmNsdWRpbmcgc3BlY2lhbCBmaWVsZHMpIHdoaWNoIGFyZSB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzLgogICAgICogSWYgZW1wdHksIHRoZSBkZWZhdWx0IHNvcnRpbmcgKGRlc2NlbmRpbmcgYnkgc2NvcmUpIGlzIHVzZWQgYnkgdGhlIHNlcnZlci4KICAgICAqCiAgICAgKiBUaGUgbGlzdCBvZiBzb3J0IGZpZWxkcyBjYW4gaW5jbHVkZSBhY3R1YWwgZmllbGRzIChsaWtlICJmaXJzdG5hbWUiIGJ1dCB0aGVuIHRoZXkgbXVzdCBiZSBzdG9yZWQgaW4gdGhlCiAgICAgKiBpbmRleCwgY29uZmlndXJlZCBpbiB0aGUgc2VydmVyIHNpZGUgbWFwcGluZykuIEZpZWxkcyBwcm92aWRlZCBmaXJzdCBhcmUgY29uc2lkZXJlZCBmaXJzdCBhbmQgaW4gYSAidGllIiBjYXNlCiAgICAgKiB0aGUgbmV4dCBzb3J0IGZpZWxkIGlzIGNvbnNpZGVyZWQuIFNvIHNvcnRpbmcgYnkgImZpcnN0bmFtZSIgYW5kIHRoZW4gImxhc3RuYW1lIiB3aWxsIGZpcnN0IHNvcnQgYXNjZW5kaW5nIGJ5CiAgICAgKiB0aGUgZmlyc3RuYW1lIGFuZCBpZiB0aGUgbmFtZXMgYXJlIGVxdWFsIHRoZW4gc29ydCBhc2NlbmRpbmcgYnkgbGFzdG5hbWUuIFNwZWNpYWwgZmllbGRzIGxpa2UgIl9pZCIgYW5kCiAgICAgKiAiX3Njb3JlIiBjYW4gYWxzbyBiZSB1c2VkLiBJZiBwcmVmaXhlZCB3aXRoICItIiB0aGUgc29ydCBvcmRlciBpcyBzZXQgdG8gZGVzY2VuZGluZy4KICAgICAqCiAgICAgKiBJZiBubyBzb3J0IGlzIHByb3ZpZGVkLCBpdCBpcyBlcXVhbCB0byBzb3J0KCItX3Njb3JlIiksIHNpbmNlIHRoZSBzZXJ2ZXIgd2lsbCBzb3J0IGl0IGJ5IHNjb3JlIGluIGRlc2NlbmRpbmcKICAgICAqIG9yZGVyLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkc29ydCB0aGUgZmllbGRzIHRoYXQgc2hvdWxkIHRha2UgcGFydCBpbiB0aGUgc29ydGluZy4KICAgICAqIEByZXR1cm4gU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNvcnQoLi4uJHNvcnQpIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIG9uZSBTZWFyY2hGYWNldCB0byB0aGUgcXVlcnkKICAgICAqCiAgICAgKiBUaGlzIGlzIGFuIGFkZGl0aXZlIG9wZXJhdGlvbiAodGhlIGdpdmVuIGZhY2V0cyBhcmUgYWRkZWQgdG8gYW55IGZhY2V0IHByZXZpb3VzbHkgcmVxdWVzdGVkKSwKICAgICAqIGJ1dCBpZiBhbiBleGlzdGluZyBmYWNldCBoYXMgdGhlIHNhbWUgbmFtZSBpdCB3aWxsIGJlIHJlcGxhY2VkLgogICAgICoKICAgICAqIE5vdGUgdGhhdCB0byBiZSBmYWNldGVkLCBhIGZpZWxkJ3MgdmFsdWUgbXVzdCBiZSBzdG9yZWQgaW4gdGhlIEZUUyBpbmRleC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gU2VhcmNoRmFjZXQgJGZhY2V0CiAgICAgKiBAcmV0dXJuIFNlYXJjaFF1ZXJ5CiAgICAgKgogICAgICogQHNlZSBcQ291Y2hiYXNlXFNlYXJjaEZhY2V0CiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcVGVybVNlYXJjaEZhY2V0CiAgICAgKiBAc2VlIFxDb3VjaGJhc2VcTnVtZXJpY1JhbmdlU2VhcmNoRmFjZXQKICAgICAqIEBzZWUgXENvdWNoYmFzZVxEYXRlUmFuZ2VTZWFyY2hGYWNldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkRmFjZXQoJG5hbWUsICRmYWNldCkge30KfQoKLyoqCiAqIENvbW1vbiBpbnRlcmZhY2UgZm9yIGFsbCBjbGFzc2VzLCB3aGljaCBjb3VsZCBiZSB1c2VkIGFzIGEgYm9keSBvZiBTZWFyY2hRdWVyeQogKgogKiBAc2VlIFxDb3VjaGJhc2VcU2VhcmNoUXVlcnk6Ol9fY29uc3RydWN0KCkKICovCmludGVyZmFjZSBTZWFyY2hRdWVyeVBhcnQge30KCi8qKgogKiBBIEZUUyBxdWVyeSB0aGF0IHF1ZXJpZXMgZmllbGRzIGV4cGxpY2l0bHkgaW5kZXhlZCBhcyBib29sZWFuLgogKi8KY2xhc3MgQm9vbGVhbkZpZWxkU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBcSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnlQYXJ0CnsKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIEJvb2xlYW5GaWVsZFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdCgkYm9vc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZAogICAgICogQHJldHVybiBCb29sZWFuRmllbGRTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGQoJGZpZWxkKSB7fQp9CgovKioKICogQSBjb21wb3VuZCBGVFMgcXVlcnkgdGhhdCBhbGxvd3MgdmFyaW91cyBjb21iaW5hdGlvbnMgb2Ygc3ViLXF1ZXJpZXMuCiAqLwpjbGFzcyBCb29sZWFuU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBcSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnlQYXJ0CnsKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIEJvb2xlYW5TZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoJGJvb3N0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIFNlYXJjaFF1ZXJ5UGFydCAuLi4kcXVlcmllcwogICAgICogQHJldHVybiBCb29sZWFuU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG11c3QoLi4uJHF1ZXJpZXMpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gU2VhcmNoUXVlcnlQYXJ0IC4uLiRxdWVyaWVzCiAgICAgKiBAcmV0dXJuIEJvb2xlYW5TZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVzdE5vdCguLi4kcXVlcmllcykge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBTZWFyY2hRdWVyeVBhcnQgLi4uJHF1ZXJpZXMKICAgICAqIEByZXR1cm4gQm9vbGVhblNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaG91bGQoLi4uJHF1ZXJpZXMpIHt9Cn0KCi8qKgogKiBBIGNvbXBvdW5kIEZUUyBxdWVyeSB0aGF0IHBlcmZvcm1zIGEgbG9naWNhbCBBTkQgYmV0d2VlbiBhbGwgaXRzIHN1Yi1xdWVyaWVzIChjb25qdW5jdGlvbikuCiAqLwpjbGFzcyBDb25qdW5jdGlvblNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgXEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5UGFydAp7CiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBDb25qdW5jdGlvblNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdCgkYm9vc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gU2VhcmNoUXVlcnlQYXJ0IC4uLiRxdWVyaWVzCiAgICAgKiBAcmV0dXJuIENvbmp1bmN0aW9uU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV2ZXJ5KC4uLiRxdWVyaWVzKSB7fQp9CgovKioKICogQSBjb21wb3VuZCBGVFMgcXVlcnkgdGhhdCBwZXJmb3JtcyBhIGxvZ2ljYWwgT1IgYmV0d2VlbiBhbGwgaXRzIHN1Yi1xdWVyaWVzIChkaXNqdW5jdGlvbikuIEl0IHJlcXVpcmVzIHRoYXQgYQogKiBtaW5pbXVtIG9mIHRoZSBxdWVyaWVzIG1hdGNoLiBUaGUgbWluaW11bSBpcyBjb25maWd1cmFibGUgKGRlZmF1bHQgMSkuCiAqLwpjbGFzcyBEaXNqdW5jdGlvblNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgXEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5UGFydAp7CiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBEaXNqdW5jdGlvblNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdCgkYm9vc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gU2VhcmNoUXVlcnlQYXJ0IC4uLiRxdWVyaWVzCiAgICAgKiBAcmV0dXJuIERpc2p1bmN0aW9uU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVpdGhlciguLi4kcXVlcmllcykge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJG1pbgogICAgICogQHJldHVybiBEaXNqdW5jdGlvblNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtaW4oJG1pbikge30KfQoKLyoqCiAqIEEgRlRTIHF1ZXJ5IHRoYXQgbWF0Y2hlcyBkb2N1bWVudHMgb24gYSByYW5nZSBvZiB2YWx1ZXMuIEF0IGxlYXN0IG9uZSBib3VuZCBpcyByZXF1aXJlZCwgYW5kIHRoZQogKiBpbmNsdXNpdmVuZXNzIG9mIGVhY2ggYm91bmQgY2FuIGJlIGNvbmZpZ3VyZWQuCiAqLwpjbGFzcyBEYXRlUmFuZ2VTZWFyY2hRdWVyeSBpbXBsZW1lbnRzIFxKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeVBhcnQKewogICAgZmluYWwgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkYm9vc3QKICAgICAqIEByZXR1cm4gRGF0ZVJhbmdlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJvb3N0KCRib29zdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkCiAgICAgKiBAcmV0dXJuIERhdGVSYW5nZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWVsZCgkZmllbGQpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkc3RhcnQgVGhlIHN0cmluZ3Mgd2lsbCBiZSB0YWtlbiB2ZXJiYXRpbSBhbmQgc3VwcG9zZWQgdG8gYmUgZm9ybWF0dGVkIHdpdGggY3VzdG9tIGRhdGUKICAgICAqICAgICAgdGltZSBmb3JtYXR0ZXIgKHNlZSBkYXRlVGltZVBhcnNlcikuIEludGVnZXJzIGludGVycHJldGVkIGFzIHVuaXggdGltZXN0YW1wcyBhbmQgcmVwcmVzZW50ZWQgYXMgUkZDMzMzOQogICAgICogICAgICBzdHJpbmdzLgogICAgICogQHBhcmFtIGJvb2wgJGluY2x1c2l2ZQogICAgICogQHJldHVybiBEYXRlUmFuZ2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnQoJHN0YXJ0LCAkaW5jbHVzaXZlID0gdHJ1ZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRlbmQgVGhlIHN0cmluZ3Mgd2lsbCBiZSB0YWtlbiB2ZXJiYXRpbSBhbmQgc3VwcG9zZWQgdG8gYmUgZm9ybWF0dGVkIHdpdGggY3VzdG9tIGRhdGUKICAgICAqICAgICAgdGltZSBmb3JtYXR0ZXIgKHNlZSBkYXRlVGltZVBhcnNlcikuIEludGVnZXJzIGludGVycHJldGVkIGFzIHVuaXggdGltZXN0YW1wcyBhbmQgcmVwcmVzZW50ZWQgYXMgUkZDMzMzOQogICAgICogICAgICBzdHJpbmdzLgogICAgICogQHBhcmFtIGJvb2wgJGluY2x1c2l2ZQogICAgICogQHJldHVybiBEYXRlUmFuZ2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5kKCRlbmQsICRpbmNsdXNpdmUgPSBmYWxzZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGVUaW1lUGFyc2VyCiAgICAgKiBAcmV0dXJuIERhdGVSYW5nZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkYXRlVGltZVBhcnNlcigkZGF0ZVRpbWVQYXJzZXIpIHt9Cn0KCi8qKgogKiBBIEZUUyBxdWVyeSB0aGF0IG1hdGNoZXMgZG9jdW1lbnRzIG9uIGEgcmFuZ2Ugb2YgdmFsdWVzLiBBdCBsZWFzdCBvbmUgYm91bmQgaXMgcmVxdWlyZWQsIGFuZCB0aGUKICogaW5jbHVzaXZlbmVzcyBvZiBlYWNoIGJvdW5kIGNhbiBiZSBjb25maWd1cmVkLgogKi8KY2xhc3MgTnVtZXJpY1JhbmdlU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBcSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnlQYXJ0CnsKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIE51bWVyaWNSYW5nZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdCgkYm9vc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZAogICAgICogQHJldHVybiBOdW1lcmljUmFuZ2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGQoJGZpZWxkKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRtaW4KICAgICAqIEBwYXJhbSBib29sICRpbmNsdXNpdmUKICAgICAqIEByZXR1cm4gTnVtZXJpY1JhbmdlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1pbigkbWluLCAkaW5jbHVzaXZlID0gdHJ1ZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkbWF4CiAgICAgKiBAcGFyYW0gYm9vbCAkaW5jbHVzaXZlCiAgICAgKiBAcmV0dXJuIE51bWVyaWNSYW5nZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXgoJG1heCwgJGluY2x1c2l2ZSA9IGZhbHNlKSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgdGhhdCBtYXRjaGVzIG9uIENvdWNoYmFzZSBkb2N1bWVudCBJRHMuIFVzZWZ1bCB0byByZXN0cmljdCB0aGUgc2VhcmNoIHNwYWNlIHRvIGEgbGlzdCBvZiBrZXlzIChieSB1c2luZwogKiB0aGlzIGluIGEgY29tcG91bmQgcXVlcnkpLgogKi8KY2xhc3MgRG9jSWRTZWFyY2hRdWVyeSBpbXBsZW1lbnRzIFxKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeVBhcnQKewogICAgZmluYWwgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkYm9vc3QKICAgICAqIEByZXR1cm4gRG9jSWRTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoJGJvb3N0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQKICAgICAqIEByZXR1cm4gRG9jSWRTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGQoJGZpZWxkKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAuLi4kZG9jdW1lbnRJZHMKICAgICAqIEByZXR1cm4gRG9jSWRTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZG9jSWRzKC4uLiRkb2N1bWVudElkcykge30KfQoKLyoqCiAqIEEgRlRTIHF1ZXJ5IHRoYXQgbWF0Y2hlcyBhbGwgaW5kZXhlZCBkb2N1bWVudHMgKHVzdWFsbHkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcykuCiAqLwpjbGFzcyBNYXRjaEFsbFNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgXEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5UGFydAp7CiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBNYXRjaEFsbFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdCgkYm9vc3QpIHt9Cn0KCi8qKgogKiBBIEZUUyBxdWVyeSB0aGF0IG1hdGNoZXMgMCBkb2N1bWVudCAodXN1YWxseSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzKS4KICovCmNsYXNzIE1hdGNoTm9uZVNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgXEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5UGFydAp7CiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBNYXRjaE5vbmVTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoJGJvb3N0KSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgdGhhdCBtYXRjaGVzIHNldmVyYWwgZ2l2ZW4gdGVybXMgKGEgInBocmFzZSIpLCBhcHBseWluZyBmdXJ0aGVyIHByb2Nlc3NpbmcKICogbGlrZSBhbmFseXplcnMgdG8gdGhlbS4KICovCmNsYXNzIE1hdGNoUGhyYXNlU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBcSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnlQYXJ0CnsKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIE1hdGNoUGhyYXNlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJvb3N0KCRib29zdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkCiAgICAgKiBAcmV0dXJuIE1hdGNoUGhyYXNlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkKCRmaWVsZCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFuYWx5emVyCiAgICAgKiBAcmV0dXJuIE1hdGNoUGhyYXNlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFuYWx5emVyKCRhbmFseXplcikge30KfQoKLyoqCiAqIEEgRlRTIHF1ZXJ5IHRoYXQgbWF0Y2hlcyBhIGdpdmVuIHRlcm0sIGFwcGx5aW5nIGZ1cnRoZXIgcHJvY2Vzc2luZyB0byBpdAogKiBsaWtlIGFuYWx5emVycywgc3RlbW1pbmcgYW5kIGV2ZW4gI2Z1enppbmVzcyhpbnQpLgogKi8KY2xhc3MgTWF0Y2hTZWFyY2hRdWVyeSBpbXBsZW1lbnRzIFxKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeVBhcnQKewogICAgZmluYWwgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkYm9vc3QKICAgICAqIEByZXR1cm4gTWF0Y2hTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoJGJvb3N0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQKICAgICAqIEByZXR1cm4gTWF0Y2hTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGQoJGZpZWxkKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkYW5hbHl6ZXIKICAgICAqIEByZXR1cm4gTWF0Y2hTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYW5hbHl6ZXIoJGFuYWx5emVyKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkcHJlZml4TGVuZ3RoCiAgICAgKiBAcmV0dXJuIE1hdGNoU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZWZpeExlbmd0aCgkcHJlZml4TGVuZ3RoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkZnV6emluZXNzCiAgICAgKiBAcmV0dXJuIE1hdGNoU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZ1enppbmVzcygkZnV6emluZXNzKSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgdGhhdCBtYXRjaGVzIHNldmVyYWwgdGVybXMgKGEgInBocmFzZSIpIGFzIGlzLiBUaGUgb3JkZXIgb2YgdGhlIHRlcm1zIG1hdGVyIGFuZCBubyBmdXJ0aGVyIHByb2Nlc3NpbmcgaXMKICogYXBwbGllZCB0byB0aGVtLCBzbyB0aGV5IG11c3QgYXBwZWFyIGluIHRoZSBpbmRleCBleGFjdGx5IGFzIHByb3ZpZGVkLiAgVXN1YWxseSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLCBwcmVmZXIKICogTWF0Y2hQaHJhc2VRdWVyeS4KICovCmNsYXNzIFBocmFzZVNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgXEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5UGFydAp7CiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBQaHJhc2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoJGJvb3N0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQKICAgICAqIEByZXR1cm4gUGhyYXNlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkKCRmaWVsZCkge30KfQoKLyoqCiAqIEEgRlRTIHF1ZXJ5IHRoYXQgYWxsb3dzIGZvciBzaW1wbGUgbWF0Y2hpbmcgb2YgcmVndWxhciBleHByZXNzaW9ucy4KICovCmNsYXNzIFJlZ2V4cFNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgXEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5UGFydAp7CiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBSZWdleHBTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoJGJvb3N0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQKICAgICAqIEByZXR1cm4gUmVnZXhwU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkKCRmaWVsZCkge30KfQoKLyoqCiAqIEEgRlRTIHF1ZXJ5IHRoYXQgYWxsb3dzIGZvciBzaW1wbGUgbWF0Y2hpbmcgdXNpbmcgd2lsZGNhcmQgY2hhcmFjdGVycyAoKiBhbmQgPykuCiAqLwpjbGFzcyBXaWxkY2FyZFNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgXEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5UGFydAp7CiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBXaWxkY2FyZFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdCgkYm9vc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZAogICAgICogQHJldHVybiBXaWxkY2FyZFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWVsZCgkZmllbGQpIHt9Cn0KCi8qKgogKiBBIEZUUyBxdWVyeSB0aGF0IGFsbG93cyBmb3Igc2ltcGxlIG1hdGNoaW5nIG9uIGEgZ2l2ZW4gcHJlZml4LgogKi8KY2xhc3MgUHJlZml4U2VhcmNoUXVlcnkgaW1wbGVtZW50cyBcSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnlQYXJ0CnsKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIFByZWZpeFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdCgkYm9vc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZAogICAgICogQHJldHVybiBQcmVmaXhTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGQoJGZpZWxkKSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgdGhhdCBwZXJmb3JtcyBhIHNlYXJjaCBhY2NvcmRpbmcgdG8gdGhlICJzdHJpbmcgcXVlcnkiIHN5bnRheC4KICovCmNsYXNzIFF1ZXJ5U3RyaW5nU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBcSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnlQYXJ0CnsKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIFF1ZXJ5U3RyaW5nU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJvb3N0KCRib29zdCkge30KfQoKLyoqCiAqIEEgZmFjZXQgdGhhdCBnaXZlcyB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBtb3N0IHJlY3VycmluZyB0ZXJtcyBpbiBhbGwgaGl0cy4KICovCmNsYXNzIFRlcm1TZWFyY2hRdWVyeSBpbXBsZW1lbnRzIFxKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeVBhcnQKewogICAgZmluYWwgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkYm9vc3QKICAgICAqIEByZXR1cm4gVGVybVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdCgkYm9vc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZAogICAgICogQHJldHVybiBUZXJtU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkKCRmaWVsZCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHByZWZpeExlbmd0aAogICAgICogQHJldHVybiBUZXJtU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZWZpeExlbmd0aCgkcHJlZml4TGVuZ3RoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkZnV6emluZXNzCiAgICAgKiBAcmV0dXJuIFRlcm1TZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZnV6emluZXNzKCRmdXp6aW5lc3MpIHt9Cn0KCi8qKgogKiBBIEZUUyBxdWVyeSB0aGF0IG1hdGNoZXMgZG9jdW1lbnRzIG9uIGEgcmFuZ2Ugb2YgdmFsdWVzLiBBdCBsZWFzdCBvbmUgYm91bmQgaXMgcmVxdWlyZWQsIGFuZCB0aGUKICogaW5jbHVzaXZlbmVzcyBvZiBlYWNoIGJvdW5kIGNhbiBiZSBjb25maWd1cmVkLgogKi8KY2xhc3MgVGVybVJhbmdlU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBcSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnlQYXJ0CnsKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIFRlcm1SYW5nZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdCgkYm9vc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZAogICAgICogQHJldHVybiBUZXJtUmFuZ2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGQoJGZpZWxkKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbWluCiAgICAgKiBAcGFyYW0gYm9vbCAkaW5jbHVzaXZlCiAgICAgKiBAcmV0dXJuIFRlcm1SYW5nZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtaW4oJG1pbiwgJGluY2x1c2l2ZSA9IHRydWUpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXgKICAgICAqIEBwYXJhbSBib29sICRpbmNsdXNpdmUKICAgICAqIEByZXR1cm4gVGVybVJhbmdlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1heCgkbWF4LCAkaW5jbHVzaXZlID0gZmFsc2UpIHt9Cn0KCi8qKgogKiBBIEZUUyBxdWVyeSB0aGF0IGZpbmRzIGFsbCBtYXRjaGVzIGZyb20gYSBnaXZlbiBsb2NhdGlvbiAocG9pbnQpIHdpdGhpbiB0aGUgZ2l2ZW4gZGlzdGFuY2UuCiAqCiAqIEJvdGggdGhlIHBvaW50IGFuZCB0aGUgZGlzdGFuY2UgYXJlIHJlcXVpcmVkLgogKi8KY2xhc3MgR2VvRGlzdGFuY2VTZWFyY2hRdWVyeSBpbXBsZW1lbnRzIFxKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeVBhcnQKewogICAgZmluYWwgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkYm9vc3QKICAgICAqIEByZXR1cm4gR2VvRGlzdGFuY2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoJGJvb3N0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQKICAgICAqIEByZXR1cm4gR2VvRGlzdGFuY2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGQoJGZpZWxkKSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgd2hpY2ggYWxsb3dzIHRvIG1hdGNoIGdlbyBib3VuZGluZyBib3hlcy4KICovCmNsYXNzIEdlb0JvdW5kaW5nQm94U2VhcmNoUXVlcnkgaW1wbGVtZW50cyBcSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnlQYXJ0CnsKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIEdlb0JvdW5kaW5nQm94U2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJvb3N0KCRib29zdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkCiAgICAgKiBAcmV0dXJuIEdlb0JvdW5kaW5nQm94U2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkKCRmaWVsZCkge30KfQoKLyoqCiAqIENvbW1vbiBpbnRlcmZhY2UgZm9yIGFsbCBzZWFyY2ggZmFjZXRzCiAqCiAqIEBzZWUgXENvdWNoYmFzZVxTZWFyY2hRdWVyeTo6YWRkRmFjZXQoKQogKiBAc2VlIFxDb3VjaGJhc2VcVGVybVNlYXJjaEZhY2V0CiAqIEBzZWUgXENvdWNoYmFzZVxEYXRlUmFuZ2VTZWFyY2hGYWNldAogKiBAc2VlIFxDb3VjaGJhc2VcTnVtZXJpY1JhbmdlU2VhcmNoRmFjZXQKICovCmludGVyZmFjZSBTZWFyY2hGYWNldCB7fQoKLyoqCiAqIEEgZmFjZXQgdGhhdCBnaXZlcyB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBtb3N0IHJlY3VycmluZyB0ZXJtcyBpbiBhbGwgaGl0cy4KICovCmNsYXNzIFRlcm1TZWFyY2hGYWNldCBpbXBsZW1lbnRzIFxKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hGYWNldAp7CiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQp9CgovKioKICogQSBmYWNldCB0aGF0IGNhdGVnb3JpemVzIGhpdHMgaW5zaWRlIGRhdGUgcmFuZ2VzIChvciBidWNrZXRzKSBwcm92aWRlZCBieSB0aGUgdXNlci4KICovCmNsYXNzIERhdGVSYW5nZVNlYXJjaEZhY2V0IGltcGxlbWVudHMgXEpzb25TZXJpYWxpemFibGUsIFNlYXJjaEZhY2V0CnsKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkc3RhcnQKICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nICRlbmQKICAgICAqIEByZXR1cm4gRGF0ZVNlYXJjaEZhY2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRSYW5nZSgkbmFtZSwgJHN0YXJ0LCAkZW5kKSB7fQp9CgovKioKICogQSBmYWNldCB0aGF0IGNhdGVnb3JpemVzIGhpdHMgaW50byBudW1lcmljYWwgcmFuZ2VzIChvciBidWNrZXRzKSBwcm92aWRlZCBieSB0aGUgdXNlci4KICovCmNsYXNzIE51bWVyaWNSYW5nZVNlYXJjaEZhY2V0IGltcGxlbWVudHMgXEpzb25TZXJpYWxpemFibGUsIFNlYXJjaEZhY2V0CnsKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gZmxvYXQgJG1pbgogICAgICogQHBhcmFtIGZsb2F0ICRtYXgKICAgICAqIEByZXR1cm4gTnVtZXJpY1NlYXJjaEZhY2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRSYW5nZSgkbmFtZSwgJG1pbiwgJG1heCkge30KfQoKLyoqCiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBGVFMgc29ydCBvcHRpb25zIGluIHF1ZXJ5aW5nLgogKi8KY2xhc3MgU2VhcmNoU29ydAp7CiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIFNvcnQgYnkgdGhlIGRvY3VtZW50IGlkZW50aWZpZXIuCiAgICAgKgogICAgICogQHJldHVybiBTZWFyY2hTb3J0SWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpZCgpIHt9CgogICAgLyoqCiAgICAgKiBTb3J0IGJ5IHRoZSBoaXQgc2NvcmUuCiAgICAgKgogICAgICogQHJldHVybiBTZWFyY2hTb3J0U2NvcmUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzY29yZSgpIHt9CgogICAgLyoqCiAgICAgKiBTb3J0IGJ5IGEgZmllbGQgaW4gdGhlIGhpdHMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQgdGhlIGZpZWxkIG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIFNlYXJjaFNvcnRGaWVsZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZpZWxkKCRmaWVsZCkge30KCiAgICAvKioKICAgICAqIFNvcnQgYnkgZ2VvIGxvY2F0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkIHRoZSBmaWVsZCBuYW1lCiAgICAgKiBAcGFyYW0gZmxvYXQgJGxvbmdpdHVkZSB0aGUgbG9uZ2l0dWRlIG9mIHRoZSBsb2NhdGlvbgogICAgICogQHBhcmFtIGZsb2F0ICRsYXRpdHVkZSB0aGUgbGF0aXR1ZGUgb2YgdGhlIGxvY2F0aW9uCiAgICAgKgogICAgICogQHJldHVybiBTZWFyY2hTb3J0R2VvRGlzdGFuY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZW9EaXN0YW5jZSgkZmllbGQsICRsb25naXR1ZGUsICRsYXRpdHVkZSkge30KfQoKLyoqCiAqIFNvcnQgYnkgdGhlIGRvY3VtZW50IGlkZW50aWZpZXIuCiAqLwpjbGFzcyBTZWFyY2hTb3J0SWQgZXh0ZW5kcyBTZWFyY2hTb3J0IGltcGxlbWVudHMgXEpzb25TZXJpYWxpemFibGUKewogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBEaXJlY3Rpb24gb2YgdGhlIHNvcnQKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVzY2VuZGluZwogICAgICoKICAgICAqIEByZXR1cm4gU2VhcmNoU29ydElkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNjZW5kaW5nKCRkZXNjZW5kaW5nKSB7fQp9CgovKioKICogU29ydCBieSB0aGUgaGl0IHNjb3JlLgogKi8KY2xhc3MgU2VhcmNoU29ydFNjb3JlIGV4dGVuZHMgU2VhcmNoU29ydCBpbXBsZW1lbnRzIFxKc29uU2VyaWFsaXphYmxlCnsKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogRGlyZWN0aW9uIG9mIHRoZSBzb3J0CiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGRlc2NlbmRpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIFNlYXJjaFNvcnRTY29yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVzY2VuZGluZygkZGVzY2VuZGluZykge30KfQoKLyoqCiAqIFNvcnQgYnkgYSBmaWVsZCBpbiB0aGUgaGl0cy4KICovCmNsYXNzIFNlYXJjaFNvcnRGaWVsZCBleHRlbmRzIFNlYXJjaFNvcnQgaW1wbGVtZW50cyBcSnNvblNlcmlhbGl6YWJsZQp7CiAgICBwdWJsaWMgY29uc3QgVFlQRV9BVVRPID0gImF1dG8iOwogICAgcHVibGljIGNvbnN0IFRZUEVfU1RSSU5HID0gInN0cmluZyI7CiAgICBwdWJsaWMgY29uc3QgVFlQRV9OVU1CRVIgPSAibnVtYmVyIjsKICAgIHB1YmxpYyBjb25zdCBUWVBFX0RBVEUgPSAiZGF0ZSI7CiAgICBwdWJsaWMgY29uc3QgTU9ERV9ERUZBVUxUID0gImRlZmF1bHQiOwogICAgcHVibGljIGNvbnN0IE1PREVfTUlOID0gIm1pbiI7CiAgICBwdWJsaWMgY29uc3QgTU9ERV9NQVggPSAibWF4IjsKICAgIHB1YmxpYyBjb25zdCBNSVNTSU5HX0ZJUlNUID0gImZpcnN0IjsKICAgIHB1YmxpYyBjb25zdCBNSVNTSU5HX0xBU1QgPSAibGFzdCI7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBEaXJlY3Rpb24gb2YgdGhlIHNvcnQKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVzY2VuZGluZwogICAgICoKICAgICAqIEByZXR1cm4gU2VhcmNoU29ydEZpZWxkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNjZW5kaW5nKCRkZXNjZW5kaW5nKSB7fQoKICAgIC8qKgogICAgICogU2V0IHR5cGUgb2YgdGhlIGZpZWxkCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZSB0aGUgdHlwZQogICAgICoKICAgICAqIEBzZWUgU2VhcmNoU29ydEZpZWxkOjpUWVBFX0FVVE8KICAgICAqIEBzZWUgU2VhcmNoU29ydEZpZWxkOjpUWVBFX1NUUklORwogICAgICogQHNlZSBTZWFyY2hTb3J0RmllbGQ6OlRZUEVfTlVNQkVSCiAgICAgKiBAc2VlIFNlYXJjaFNvcnRGaWVsZDo6VFlQRV9EQVRFCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0eXBlKCR0eXBlKSB7fQoKICAgIC8qKgogICAgICogU2V0IG1vZGUgb2YgdGhlIHNvcnQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2RlIHRoZSBtb2RlCiAgICAgKgogICAgICogQHNlZSBTZWFyY2hTb3J0RmllbGQ6Ok1PREVfTUlOCiAgICAgKiBAc2VlIFNlYXJjaFNvcnRGaWVsZDo6TU9ERV9NQVgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZGUoJG1vZGUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgd2hlcmUgdGhlIGhpdHMgd2l0aCBtaXNzaW5nIGZpZWxkIHdpbGwgYmUgaW5zZXJ0ZWQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtaXNzaW5nIHN0cmF0ZWd5IGZvciBoaXRzIHdpdGggbWlzc2luZyBmaWVsZHMKICAgICAqCiAgICAgKiBAc2VlIFNlYXJjaFNvcnRGaWVsZDo6TUlTU0lOR19GSVJTVAogICAgICogQHNlZSBTZWFyY2hTb3J0RmllbGQ6Ok1JU1NJTkdfTEFTVAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWlzc2luZygkbWlzc2luZykge30KfQoKLyoqCiAqIFNvcnQgYnkgYSBsb2NhdGlvbiBhbmQgdW5pdCBpbiB0aGUgaGl0cy4KICovCmNsYXNzIFNlYXJjaFNvcnRHZW9EaXN0YW5jZSBleHRlbmRzIFNlYXJjaFNvcnQgaW1wbGVtZW50cyBcSnNvblNlcmlhbGl6YWJsZQp7CiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIERpcmVjdGlvbiBvZiB0aGUgc29ydAogICAgICoKICAgICAqIEBwYXJhbSBib29sICRkZXNjZW5kaW5nCiAgICAgKgogICAgICogQHJldHVybiBTZWFyY2hTb3J0R2VvRGlzdGFuY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlc2NlbmRpbmcoJGRlc2NlbmRpbmcpIHt9CgogICAgLyoqCiAgICAgKiBOYW1lIG9mIHRoZSB1bml0cwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVuaXQKICAgICAqCiAgICAgKiBAcmV0dXJuIFNlYXJjaFNvcnRHZW9EaXN0YW5jZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5pdCgkdW5pdCkge30KfQoKLyoqCiAqIFJlcHJlc2VudHMgYSBBbmFseXRpY3MgcXVlcnkgKGN1cnJlbnRseSBleHBlcmltZW50YWwgc3VwcG9ydCkuCiAqCiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuY291Y2hiYXNlLmNvbS9kb2N1bWVudGF0aW9uL3NlcnZlci80LjUvYW5hbHl0aWNzL3F1aWNrLXN0YXJ0Lmh0bWwKICogICBBbmFseXRpY3MgcXVpY2sgc3RhcnQKICovCmNsYXNzIEFuYWx5dGljc1F1ZXJ5CnsKICAgIGZpbmFsIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBuZXcgQW5hbHl0aWNzUXVlcnkgaW5zdGFuY2UgZGlyZWN0bHkgZnJvbSB0aGUgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YXRlbWVudCBzdGF0ZW1lbnQgc3RyaW5nCiAgICAgKiBAcmV0dXJuIEFuYWx5dGljc1F1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbVN0cmluZygkc3RhdGVtZW50KSB7fQp9Cjw/cGhwCgovLyBTdGFydCBvZiBaZW5kIERlYnVnZ2VyIHYuCgpmdW5jdGlvbiBkZWJ1Z2dlcl9wcmludCgpIHt9CgpmdW5jdGlvbiBnZXRfY2FsbF9zdGFjaygpIHt9CgpmdW5jdGlvbiBkZWJ1Z2dlcl9zdGFydF9kZWJ1ZygpIHt9CgpmdW5jdGlvbiBkZWJ1Z2dlcl9jb25uZWN0b3JfcGlkKCkge30KCmZ1bmN0aW9uIGRlYnVnZ2VyX2Nvbm5lY3QoKSB7fQoKZnVuY3Rpb24gZGVidWdnZXJfZ2V0X3NlcnZlcl9zdGFydF90aW1lKCkge30KCi8vIEVuZCBvZiBaZW5kIERlYnVnZ2VyIHYuCjw/cGhwCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFNpbXBsZUthZmthQ2xpZW50OwoKdXNlIFNpbXBsZUthZmthQ2xpZW50OwoKY2xhc3MgQ29uc3VtZXIgZXh0ZW5kcyBTaW1wbGVLYWZrYUNsaWVudAp7CiAgICAvKioKICAgICAqIENvbnN1bWVyIGNvbnN0cnVjdG9yLgogICAgICogQHBhcmFtIENvbmZpZ3VyYXRpb24gJGNvbmZpZ3VyYXRpb24KICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb25maWd1cmF0aW9uICRjb25maWd1cmF0aW9uKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIFRvcGljUGFydGl0aW9uW118bnVsbCAkdG9waWNQYXJ0aXRpb25zCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzaWduKD9hcnJheSAkdG9waWNQYXJ0aXRpb25zKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBUb3BpY1BhcnRpdGlvbltdCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXNzaWdubWVudCgpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ1tdICR0b3BpY3MKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdWJzY3JpYmUoYXJyYXkgJHRvcGljcyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nW10KICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdWJzY3JpcHRpb24oKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHRpbWVvdXRNcwogICAgICogQHJldHVybiBNZXNzYWdlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb25zdW1lKGludCAkdGltZW91dE1zKTogTWVzc2FnZSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIE1lc3NhZ2V8VG9waWNQYXJ0aXRpb25bXSAkbWVzc2FnZU9yT2Zmc2V0cwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbW1pdCgkbWVzc2FnZU9yT2Zmc2V0cyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBNZXNzYWdlfFRvcGljUGFydGl0aW9uW10gJG1lc3NhZ2VPck9mZnNldHMKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21taXRBc3luYygkbWVzc2FnZU9yT2Zmc2V0cyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIFRvcGljUGFydGl0aW9uW10gJHRvcGljUGFydGl0aW9ucwogICAgICogQHBhcmFtIGludCAkdGltZW91dE1zCiAgICAgKiBAcmV0dXJuIFRvcGljUGFydGl0aW9uW10KICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb21taXR0ZWRPZmZzZXRzKGFycmF5ICR0b3BpY1BhcnRpdGlvbnMsIGludCAkdGltZW91dE1zKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBUb3BpY1BhcnRpdGlvbltdICR0b3BpY1BhcnRpdGlvbnMKICAgICAqIEByZXR1cm4gVG9waWNQYXJ0aXRpb25bXQogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE9mZnNldFBvc2l0aW9ucyhhcnJheSAkdG9waWNQYXJ0aXRpb25zKTogYXJyYXkge30KfQo8P3BocApkZWNsYXJlKHN0cmljdF90eXBlcz0xKTsKCm5hbWVzcGFjZSBTaW1wbGVLYWZrYUNsaWVudFxNZXRhZGF0YTsKCmNsYXNzIFBhcnRpdGlvbgp7CiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpOiBpbnQge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvckNvZGUoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGVhZGVyKCk6IGludCB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBDb2xsZWN0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXBsaWNhcygpOiBDb2xsZWN0aW9uIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIENvbGxlY3Rpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElzcnMoKTogQ29sbGVjdGlvbiB7fQp9Cjw/cGhwCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFNpbXBsZUthZmthQ2xpZW50XE1ldGFkYXRhOwoKY2xhc3MgQ29sbGVjdGlvbgp7CiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpOiBpbnQge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpOiBib29sIHt9Cn0KPD9waHAKZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7CgpuYW1lc3BhY2UgU2ltcGxlS2Fma2FDbGllbnRcTWV0YWRhdGE7CgpjbGFzcyBCcm9rZXIKewogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWQoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SG9zdCgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQb3J0KCk6IGludCB7fQp9Cjw/cGhwCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFNpbXBsZUthZmthQ2xpZW50XE1ldGFkYXRhOwoKY2xhc3MgVG9waWMKewogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvckNvZGUoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIENvbGxlY3Rpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcnRpdGlvbnMoKTogQ29sbGVjdGlvbiB7fQp9Cjw/cGhwCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFNpbXBsZUthZmthQ2xpZW50OwoKY2xhc3MgTWV0YWRhdGEKewogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludAogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE9yaWdCcm9rZXJJZCgpOiBpbnQge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3JpZ0Jyb2tlck5hbWUoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIE1ldGFkYXRhXENvbGxlY3Rpb24KICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCcm9rZXJzKCk6IE1ldGFkYXRhXENvbGxlY3Rpb24ge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gTWV0YWRhdGFcQ29sbGVjdGlvbgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRvcGljcygpOiBNZXRhZGF0YVxDb2xsZWN0aW9uIHt9Cn0KPD9waHAKZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7CgpuYW1lc3BhY2UgU2ltcGxlS2Fma2FDbGllbnQ7CgpjbGFzcyBNZXNzYWdlCnsKICAgIHB1YmxpYyBpbnQgJGVycjsKICAgIHB1YmxpYyBzdHJpbmcgJHRvcGljX25hbWU7CiAgICBwdWJsaWMgaW50ICR0aW1lc3RhbXA7CiAgICBwdWJsaWMgaW50ICRwYXJ0aXRpb247CiAgICBwdWJsaWMgaW50ICRwYXlsb2FkOwogICAgcHVibGljIGludCAkbGVuOwogICAgcHVibGljIHN0cmluZyAka2V5OwogICAgcHVibGljIGludCAkb2Zmc2V0OwoKICAgIC8qKgogICAgICogQHZhciBhcnJheTxzdHJpbmcsIG1peGVkPgogICAgICovCiAgICBwdWJsaWMgYXJyYXkgJGhlYWRlcnM7CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JTdHJpbmcoKTogc3RyaW5nIHt9Cn0KPD9waHAKZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7CgpuYW1lc3BhY2UgU2ltcGxlS2Fma2FDbGllbnQ7CgpjbGFzcyBDb25maWd1cmF0aW9uCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5PHN0cmluZywgbWl4ZWQ+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkdW1wKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KHN0cmluZyAkbmFtZSwgc3RyaW5nICR2YWx1ZSk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEVycm9yQ2IoY2FsbGFibGUgJGNhbGxiYWNrKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RHJNc2dDYihjYWxsYWJsZSAkY2FsbGJhY2spOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTdGF0c0NiKGNhbGxhYmxlICRjYWxsYmFjayk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFJlYmFsYW5jZUNiKGNhbGxhYmxlICRjYWxsYmFjayk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE9mZnNldENvbW1pdENiKGNhbGxhYmxlICRjYWxsYmFjayk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExvZ0NiKGNhbGxhYmxlICRjYWxsYmFjayk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE9BdXRoQmVhcmVyVG9rZW5SZWZyZXNoQ2IoY2FsbGFibGUgJGNhbGxiYWNrKTogdm9pZCB7fQp9Cjw/cGhwCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKbmFtZXNwYWNlIFNpbXBsZUthZmthQ2xpZW50OwoKdXNlIFNpbXBsZUthZmthQ2xpZW50OwoKY2xhc3MgUHJvZHVjZXIgZXh0ZW5kcyBTaW1wbGVLYWZrYUNsaWVudAp7CiAgICAvKioKICAgICAqIFByb2R1Y2VyIGNvbnN0cnVjdG9yLgogICAgICogQHBhcmFtIENvbmZpZ3VyYXRpb24gJGNvbmZpZ3VyYXRpb24KICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb25maWd1cmF0aW9uICRjb25maWd1cmF0aW9uKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdGltZW91dE1zCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5pdFRyYW5zYWN0aW9ucyhpbnQgJHRpbWVvdXRNcyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJlZ2luVHJhbnNhY3Rpb24oKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdGltZW91dE1zCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tbWl0VHJhbnNhY3Rpb24oaW50ICR0aW1lb3V0TXMpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lb3V0TXMKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhYm9ydFRyYW5zYWN0aW9uKGludCAkdGltZW91dE1zKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdGltZW91dE1zCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmx1c2goaW50ICR0aW1lb3V0TXMpOiBpbnQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHB1cmdlRmxhZ3MKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXJnZShpbnQgJHB1cmdlRmxhZ3MpOiBpbnQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRvcGljCiAgICAgKiBAcmV0dXJuIFByb2R1Y2VyVG9waWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRvcGljSGFuZGxlKHN0cmluZyAkdG9waWMpOiBQcm9kdWNlclRvcGljIHt9Cn0KPD9waHAKZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7CgpuYW1lc3BhY2UgU2ltcGxlS2Fma2FDbGllbnQ7CgpjbGFzcyBLYWZrYUVycm9yRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogS2Fma2FFcnJvckV4Y2VwdGlvbiBjb25zdHJ1Y3Rvci4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICAgICAqIEBwYXJhbSBpbnQgJGNvZGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVycm9yX3N0cmluZwogICAgICogQHBhcmFtIGJvb2wgJGlzRmF0YWwKICAgICAqIEBwYXJhbSBib29sICRpc1JldHJpYWJsZQogICAgICogQHBhcmFtIGJvb2wgJHRyYW5zYWN0aW9uUmVxdWlyZXNBYm9ydAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgc3RyaW5nICRtZXNzYWdlLAogICAgICAgIGludCAkY29kZSwKICAgICAgICBzdHJpbmcgJGVycm9yX3N0cmluZywKICAgICAgICBib29sICRpc0ZhdGFsLAogICAgICAgIGJvb2wgJGlzUmV0cmlhYmxlLAogICAgICAgIGJvb2wgJHRyYW5zYWN0aW9uUmVxdWlyZXNBYm9ydAogICAgKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvclN0cmluZygpOiBzdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNGYXRhbCgpOiBib29sIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUmV0cmlhYmxlKCk6IGJvb2wge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gdHJhbnNhY3Rpb25SZXF1aXJlc0Fib3J0KCk6IGJvb2wge30KfQo8P3BocApkZWNsYXJlKHN0cmljdF90eXBlcz0xKTsKCm5hbWVzcGFjZSBTaW1wbGVLYWZrYUNsaWVudDsKCmFic3RyYWN0IGNsYXNzIFRvcGljCnsKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKTogc3RyaW5nIHt9Cn0KCmNsYXNzIENvbnN1bWVyVG9waWMgZXh0ZW5kcyBUb3BpYwp7CiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KfQoKY2xhc3MgUHJvZHVjZXJUb3BpYyBleHRlbmRzIFRvcGljCnsKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkcGFydGl0aW9uCiAgICAgKiBAcGFyYW0gaW50ICRtc2dGbGFncwogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwYXlsb2FkCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGtleQogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByb2R1Y2UoaW50ICRwYXJ0aXRpb24sIGludCAkbXNnRmxhZ3MsID9zdHJpbmcgJHBheWxvYWQgPSBudWxsLCA/c3RyaW5nICRrZXkgPSBudWxsKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkcGFydGl0aW9uCiAgICAgKiBAcGFyYW0gaW50ICRtc2dGbGFncwogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwYXlsb2FkCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGtleQogICAgICogQHBhcmFtIGFycmF5PHN0cmluZywgbWl4ZWQ+fG51bGwgJGhlYWRlcnMKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkdGltZXN0YW1wTXMKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9kdWNldihpbnQgJHBhcnRpdGlvbiwgaW50ICRtc2dGbGFncywgP3N0cmluZyAkcGF5bG9hZCA9IG51bGwsID9zdHJpbmcgJGtleSA9IG51bGwsID9hcnJheSAkaGVhZGVycyA9IG51bGwsID9pbnQgJHRpbWVzdGFtcE1zID0gbnVsbCk6IHZvaWQge30KfQo8P3BocApkZWNsYXJlKHN0cmljdF90eXBlcz0xKTsKCm5hbWVzcGFjZSBTaW1wbGVLYWZrYUNsaWVudDsKCmNsYXNzIEV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24ge30KPD9waHAKZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7CgpuYW1lc3BhY2UgU2ltcGxlS2Fma2FDbGllbnQ7CgpjbGFzcyBUb3BpY1BhcnRpdGlvbgp7CiAgICAvKioKICAgICAqIFRvcGljUGFydGl0aW9uIGNvbnN0cnVjdG9yLgogICAgICogQHBhcmFtIHN0cmluZyAkdG9waWNOYW1lCiAgICAgKiBAcGFyYW0gaW50ICRwYXJ0aXRpb24KICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICR0b3BpY05hbWUsIGludCAkcGFydGl0aW9uLCBpbnQgJG9mZnNldCA9IDApIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9waWNOYW1lKCk6ID9zdHJpbmcge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRvcGljTmFtZQogICAgICogQHJldHVybiBUb3BpY1BhcnRpdGlvbgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRvcGljTmFtZShzdHJpbmcgJHRvcGljTmFtZSk6IFRvcGljUGFydGl0aW9uIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludAogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcnRpdGlvbigpOiBpbnQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHBhcnRpdGlvbgogICAgICogQHJldHVybiBUb3BpY1BhcnRpdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGFydGl0aW9uKGludCAkcGFydGl0aW9uKTogVG9waWNQYXJ0aXRpb24ge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPZmZzZXQoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQKICAgICAqIEByZXR1cm4gVG9waWNQYXJ0aXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE9mZnNldChpbnQgJG9mZnNldCk6IFRvcGljUGFydGl0aW9uIHt9Cn0KPD9waHAKZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7Cgp1c2UgU2ltcGxlS2Fma2FDbGllbnRcRXhjZXB0aW9uOwp1c2UgU2ltcGxlS2Fma2FDbGllbnRcTWV0YWRhdGE7CnVzZSBTaW1wbGVLYWZrYUNsaWVudFxUb3BpYzsKdXNlIFNpbXBsZUthZmthQ2xpZW50XFRvcGljUGFydGl0aW9uOwoKYWJzdHJhY3QgY2xhc3MgU2ltcGxlS2Fma2FDbGllbnQKewogICAgLyoqCiAgICAgKiBAcGFyYW0gYm9vbCAkYWxsVG9waWNzCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lb3V0TXMKICAgICAqIEBwYXJhbSBUb3BpYyAkdG9waWMKICAgICAqIEByZXR1cm4gTWV0YWRhdGEKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YShib29sICRhbGxUb3BpY3MsIGludCAkdGltZW91dE1zLCBUb3BpYyAkdG9waWMpOiBNZXRhZGF0YSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE91dFFMZW4oKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lb3V0TXMKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb2xsKGludCAkdGltZW91dE1zKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0b3BpYwogICAgICogQHBhcmFtIGludCAkcGFydGl0aW9uCiAgICAgKiBAcGFyYW0gaW50ICRsb3cgaXMgcGFzc2VkIGFzIHJlZmVyZW5jZSwgY29udGFpbnMgcmVzdWx0IGFmdGVyIGNhbGwKICAgICAqIEBwYXJhbSBpbnQgJGhpZ2ggaXMgcGFzc2VkIGFzIHJlZmVyZW5jZSwgY29udGFpbnMgcmVzdWx0IGFmdGVyIGNhbGwKICAgICAqIEBwYXJhbSBpbnQgJHRpbWVvdXRNcwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHF1ZXJ5V2F0ZXJtYXJrT2Zmc2V0cyhzdHJpbmcgJHRvcGljLCBpbnQgJHBhcnRpdGlvbiwgaW50ICYkbG93LCBpbnQgJiRoaWdoLCBpbnQgJHRpbWVvdXRNcyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBUb3BpY1BhcnRpdGlvbltdICR0b3BpY1BhcnRpdGlvbnMKICAgICAqIEBwYXJhbSBpbnQgJHRpbWVvdXRNcwogICAgICogQHJldHVybiBUb3BpY1BhcnRpdGlvbltdCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0c0ZvclRpbWVzKGFycmF5ICR0b3BpY1BhcnRpdGlvbnMsIGludCAkdGltZW91dE1zKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVycm9yU3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRPQXV0aEJlYXJlclRva2VuRmFpbHVyZShzdHJpbmcgJGVycm9yU3RyaW5nKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkdG9rZW4KICAgICAqIEBwYXJhbSBpbnQgJGxpZmV0aW1lTXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByaW5jaXBhbE5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmdbXXxudWxsICRleHRlbnNpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRPQXV0aEJlYXJlclRva2VuKHN0cmluZyAkdG9rZW4sIGludCAkbGlmZXRpbWVNcywgc3RyaW5nICRwcmluY2lwYWxOYW1lLCA/YXJyYXkgJGV4dGVuc2lvbnMgPSBudWxsKTogdm9pZCB7fQp9Cjw/cGhwCmRlY2xhcmUoc3RyaWN0X3R5cGVzPTEpOwoKLyoqCiAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGVycm9yCiAqCiAqIEBwYXJhbSBpbnQgJGVycm9yQ29kZSBFcnJvciBjb2RlCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBrYWZrYV9lcnIybmFtZShpbnQgJGVycm9yQ29kZSk6IHN0cmluZyB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugb2YgYW4gZXJyb3IgY29kZQogKgogKiBAcGFyYW0gaW50ICRlcnJvckNvZGUgRXJyb3IgY29kZQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24ga2Fma2FfZXJyMnN0cihpbnQgJGVycm9yQ29kZSk6IHN0cmluZyB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGZ1bGwgbGlzdCBvZiBlcnJvciBjb2Rlcy4KICoKICogQHJldHVybiBhcnJheTxpbnQsIG1peGVkPgogKi8KZnVuY3Rpb24ga2Fma2FfZ2V0X2Vycl9kZXNjcygpOiBhcnJheSB7fQoKLyoqCiAqIFJldHVybnMgYW4gb2Zmc2V0IHZhbHVlIHRoYXQgaXMgJG9mZnNldCBiZWZvcmUgdGhlIHRhaWwgb2YgdGhlIHRvcGljCiAqCiAqIEBwYXJhbSBpbnQgJG9mZnNldAogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24ga2Fma2Ffb2Zmc2V0X3RhaWwoaW50ICRvZmZzZXQpOiBpbnQge30KCi8qKgogKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBudW1iZXIgb2YgdGhyZWFkcyBpbiB1c2UgYnkgbGlicmRrYWZrYS4KICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIGthZmthX3RocmVhZF9jbnQoKTogaW50IHt9Cjw/cGhwCgpuYW1lc3BhY2UgSmV0QnJhaW5zXFBocFN0b3JtOwoKdXNlIEF0dHJpYnV0ZTsKCi8qKgogKiBUaGUgYXR0cmlidXRlIHNwZWNpZmllcyBwb3NzaWJsZSBhcnJheSBrZXlzIGFuZCB0aGVpciB0eXBlcy4KICoKICogSWYgYXBwbGllZCwgYW4gSURFIHdpbGwgc3VnZ2VzdCB0aGUgc3BlY2lmaWVkIGFycmF5IGtleXMsIGluZmVyIHRoZSBzcGVjaWZpZWQgdHlwZXMsIGFuZCBoaWdobGlnaHQgbm9uLXNwZWNpZmllZCBrZXlzIGluIGFycmF5IGFjY2VzcyBleHByZXNzaW9ucy4KICoKICogQXJyYXkgc2hhcGVzIHNob3VsZCBiZSBzcGVjaWZpZWQgd2l0aCB0aGUgcmVxdWlyZWQgJHNoYXBlIHBhcmFtZXRlciB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIGFycmF5IGxpdGVyYWxzLjxiciAvPgogKgogKiBFeGFtcGxlOiA8YnIgLz4KICogPGI+I1tBcnJheVNoYXBlKFsiZiIgPT4gImludCIsICJzdHJpbmciLCAieCIgPT4gImZsb2F0Il0pXTwvYj4KICogVGhpcyB1c2FnZSBhcHBsaWVkIG9uIGFuIGVsZW1lbnQgZWZmZWN0aXZlbHkgbWVhbnMgdGhhdCB0aGUgYXJyYXkgaGFzIDMgZWxlbWVudHMsIHRoZSBrZXlzIGFyZSAiZiIsIDEsIGFuZCAieCIsIGFuZCB0aGUgY29ycmVzcG9uZGluZyB0eXBlcyBhcmUgImludCIsICJzdHJpbmciLCBhbmQgImZsb2F0Ii4KICovCiNbQXR0cmlidXRlKEF0dHJpYnV0ZTo6VEFSR0VUX0ZVTkNUSU9OfEF0dHJpYnV0ZTo6VEFSR0VUX01FVEhPRHxBdHRyaWJ1dGU6OlRBUkdFVF9QQVJBTUVURVJ8QXR0cmlidXRlOjpUQVJHRVRfUFJPUEVSVFkpXQpjbGFzcyBBcnJheVNoYXBlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkc2hhcGUpIHt9Cn0KPD9waHAKCm5hbWVzcGFjZSBKZXRCcmFpbnNcUGhwU3Rvcm07Cgp1c2UgQXR0cmlidXRlOwoKLyoqCiAqIFlvdSBjYW4gdXNlIHRoaXMgZmFjaWxpdHkgdG8gbWFyayB0aGUgZnVuY3Rpb24gYXMgaGFsdGluZyB0aGUgZXhlY3V0aW9uIGZsb3cuCiAqIFN1Y2ggbWFya2VkIGZ1bmN0aW9ucyB3aWxsIGJlIHRyZWF0ZWQgbGlrZSBkaWUoKSBvciBleGl0KCkgY2FsbHMgYnkgY29udHJvbCBmbG93IGluc3BlY3Rpb25zLgogKiBJbiBtb3N0IGNhc2VzLCBqdXN0IGFubm90YXRpb24gZnVuY3Rpb24gd2l0aCAwIGFyZ3VtZW50cyB3aWxsIHdvcmsuCiAqIFRvIG1hcmsgdGhlIGZ1bmN0aW9uIGFzIHRoZSBleGl0IHBvaW50IG9ubHkgd2hlbiBpdCdzIGNhbGxlZCB3aXRoIHNvbWUgY29uc3RhbnQgYXJndW1lbnRzLCBzcGVjaWZ5IHRoZW0gaW4gJGFyZ3VtZW50cyBwYXJhbQogKgogKiB7QHNlZSBOb1JldHVybjo6QU5ZX0FSR1VNRU5UfQogKi8KI1tBdHRyaWJ1dGUoQXR0cmlidXRlOjpUQVJHRVRfRlVOQ1RJT058QXR0cmlidXRlOjpUQVJHRVRfTUVUSE9EKV0KY2xhc3MgTm9SZXR1cm4KewogICAgLyoqCiAgICAgKiBVc2UgdGhpcyBjb25zdGFudCB0byBza2lwIGZ1bmN0aW9uIGFyZ3VtZW50IG9uIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24KICAgICAqLwogICAgcHVibGljIGNvbnN0IEFOWV9BUkdVTUVOVCA9IDE7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KC4uLiRhcmd1bWVudHMpIHt9Cn0KPD9waHAKCm5hbWVzcGFjZSBKZXRCcmFpbnNcUGhwU3Rvcm07Cgp1c2UgQXR0cmlidXRlOwoKLyoqCiAqIFRoZSBhdHRyaWJ1dGUgc3BlY2lmaWVzIHBvc3NpYmxlIG9iamVjdCBmaWVsZCBuYW1lcyBhbmQgdGhlaXIgdHlwZXMuCiAqCiAqIElmIGFwcGxpZWQsIGFuIElERSB3aWxsIHN1Z2dlc3QgdGhlIHNwZWNpZmllZCBmaWVsZCBuYW1lcyBhbmQgaW5mZXIgdGhlIHNwZWNpZmllZCB0eXBlcy4KICoKICogRXhhbXBsZToKICogPHByZT4jW09iamVjdFNoYXBlKFsiYWdlIiA9PiAiaW50IiwgIm5hbWUiID0+ICJzdHJpbmciXSldPC9wcmU+CiAqCiAqIFRoaXMgdXNhZ2UgYXBwbGllZCBvbiBhbiBlbGVtZW50IGVmZmVjdGl2ZWx5IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoYXMgMiBmaWVsZHMsIHRoZSBuYW1lcyBhcmUgPGNvZGU+ImFnZSI8L2NvZGU+IGFuZCA8Y29kZT4ibmFtZSI8L2NvZGU+LCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdHlwZXMgYXJlIDxjb2RlPiJpbnQiPC9jb2RlPiBhbmQgPGNvZGU+InN0cmluZyI8L2NvZGU+LgogKi8KI1tBdHRyaWJ1dGUoQXR0cmlidXRlOjpUQVJHRVRfRlVOQ1RJT058QXR0cmlidXRlOjpUQVJHRVRfTUVUSE9EfEF0dHJpYnV0ZTo6VEFSR0VUX1BBUkFNRVRFUnxBdHRyaWJ1dGU6OlRBUkdFVF9QUk9QRVJUWSldCmNsYXNzIE9iamVjdFNoYXBlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkc2hhcGUpIHt9Cn0KPD9waHAKCm5hbWVzcGFjZSBKZXRCcmFpbnNcUGhwU3Rvcm07Cgp1c2UgQXR0cmlidXRlOwoKLyoqCiAqIFRoZSBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSBleHBlY3RlZCB2YWx1ZXMgb2YgYW4gZW50aXR5OiByZXR1cm4gdmFsdWVzIGZvciBmdW5jdGlvbnMgYW5kIGFyZ3VtZW50cycgdmFsdWVzIGZvciBtZXRob2RzLgogKgogKiBJZiB0aGUgYXR0cmlidXRlIGlzIGFwcGxpZWQsIFBocFN0b3JtIGFzc3VtZXMgdGhhdCBvbmx5IHRoZSBhcmd1bWVudHMgc3BlY2lmaWVkIGluIHRoZSBhdHRyaWJ1dGUgY29uc3RydWN0b3IgY2FuCiAqIGJlIHBhc3NlZC9yZXR1cm5lZC4gVGhpcyB3aWxsIGFmZmVjdCB0aGUgZm9sbG93aW5nOgogKiA8dWw+CiAqIDxsaT48aT5Db2RlIGNvbXBsZXRpb248L2k+IC0gZXhwZWN0ZWQgYXJndW1lbnRzIGFyZSBkaXNwbGF5ZWQgb24gdGhlIHRvcCBvZiB0aGUgc3VnZ2VzdGlvbnMgbGlzdCB3aGVuIHVzZWQgaW4gY29tcGFyaXNvbiBleHByZXNzaW9uczwvbGk+CiAqIDxsaT48aT5JbnNwZWN0aW9ucyBbd2hlbiB1c2VkIGluIGEgY29tcGFyaXNvbiB3aXRoIGEgdmFsdWUvYXNzaWdubWVudCB0by9yZXR1cm4gZnJvbSBtZXRob2RdPC9pPiAtIHRoZSBlbGVtZW50IGFic2VudCBmcm9tIHRoZSBleHBlY3RlZCB2YWx1ZXMgbGlzdCBwcm9kdWNlcyB0aGUgaW5zcGVjdGlvbiB3YXJuaW5nPC9saT4KICogPGxpPjxpPkNvZGUgZ2VuZXJhdGlvbjwvaT4gLSBmb3IgZXhhbXBsZSwgd2hlbiBnZW5lcmF0aW5nIHRoZSAnc3dpdGNoJyBzdGF0ZW1lbnQsIGFsbCBwb3NzaWJsZSBleHBlY3RlZCB2YWx1ZXMgYXJlIGluc2VydGVkIGF1dG9tYXRpY2FsbHk8L2xpPgogKiA8L3VsPgogKgogKiBFeHBlY3RlZCB2YWx1ZXMgY2FuIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOgogKiA8dWw+CiAqIDxsaT5udW1iZXJzPC9saT4KICogPGxpPnN0cmluZyBsaXRlcmFsczwvbGk+CiAqIDxsaT5jb25zdGFudCByZWZlcmVuY2VzPC9saT4KICogPGxpPmNsYXNzIGNvbnN0YW50IHJlZmVyZW5jZXM8L2xpPgogKiA8L3VsPgogKgogKiBFeHBlY3RlZCBhcmd1bWVudHMgY2FuIGJlIHNwZWNpZmllZCBpbiBhbnkgb2YgdGhlIGZvbGxvd2luZyB3YXlzOgogKiA8dWw+CiAqIDxsaT48Yj4jW0V4cGVjdGVkVmFsdWVzKHZhbHVlczogWzEsMiwzXSldPC9iPiBtZWFucyB0aGF0IG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIGV4cGVjdGVkOiBgMWAsIGAyYCwgb3IgYDNgPC9saT4KICogPGxpPjxiPiNbRXhwZWN0ZWRWYWx1ZXModmFsdWVzOiBNWV9DT05TVF08L2I+IC0gZGVmYXVsdCB2YWx1ZSBvZiBNWV9DT05TVCBpcyBleHBlY3RlZCB0byBiZSBhcnJheSBjcmVhdGlvbiBleHByZXNzaW9uLCBpbiB0aGlzIGNhc2UgdmFsdWUgb2YgTVlfQ09OU1Qgd2lsbCBiZSBpbmxpbmVkPC9saT4KICogPGxpPjxiPiNbRXhwZWN0ZWRWYWx1ZXMoZmxhZ3M6IFsxLDIsM10pXTwvYj4gbWVhbnMgdGhhdCBhIGJpdG1hc2sgb2YgdGhlIGZvbGxvd2luZyBpcyBleHBlY3RlZDogYDFgLCBgMmAsIG9yIGAzYDwvbGk+CiAqIDxsaT48Yj4jW0V4cGVjdGVkVmFsdWVzKHZhbHVlc0Zyb21DbGFzczogTXlDbGFzczo6Y2xhc3MpXTwvYj4gbWVhbnMgdGhhdCBvbmUgb2YgdGhlIGNvbnN0YW50cyBmcm9tIHRoZSBjbGFzcyBgTXlDbGFzc2AgaXMgZXhwZWN0ZWQ8L2xpPgogKiA8bGk+PGI+I1tFeHBlY3RlZFZhbHVlcyhmbGFnc0Zyb21DbGFzczogRXhwZWN0ZWRWYWx1ZXM6OmNsYXNzKV08L2I+IG1lYW5zIHRoYXQgYSBiaXRtYXNrIG9mIHRoZSBjb25zdGFudHMgZnJvbSB0aGUgY2xhc3MgYE15Q2xhc3NgIGlzIGV4cGVjdGVkPC9saT4KICogPC91bD4KICoKICogVGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBudW1iZXIgb2YgcHJvdmlkZWQgY29uc3RydWN0b3IgYXJndW1lbnRzIGRpZmZlcmVudCBmcm9tIDEgd2lsbCByZXN1bHQgaW4gdW5kZWZpbmVkIGJlaGF2aW9yLgogKiBAc2luY2UgOC4wCiAqLwojW0F0dHJpYnV0ZShBdHRyaWJ1dGU6OlRBUkdFVF9GVU5DVElPTnxBdHRyaWJ1dGU6OlRBUkdFVF9NRVRIT0R8QXR0cmlidXRlOjpUQVJHRVRfUEFSQU1FVEVSfEF0dHJpYnV0ZTo6VEFSR0VUX1BST1BFUlRZKV0KY2xhc3MgRXhwZWN0ZWRWYWx1ZXMKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICR2YWx1ZXMgPSBbXSwgYXJyYXkgJGZsYWdzID0gW10sIHN0cmluZyAkdmFsdWVzRnJvbUNsYXNzID0gbnVsbCwgc3RyaW5nICRmbGFnc0Zyb21DbGFzcyA9IG51bGwpIHt9Cn0KPD9waHAKCm5hbWVzcGFjZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWw7Cgp1c2UgQXR0cmlidXRlOwoKLyoqCiAqIEZvciBQaHBTdG9ybSBpbnRlcm5hbCB1c2Ugb25seQogKiBAc2luY2UgOC4xCiAqIEBpbnRlcm5hbAogKi8KI1tBdHRyaWJ1dGUoQXR0cmlidXRlOjpUQVJHRVRfTUVUSE9EKV0KY2xhc3MgVGVudGF0aXZlVHlwZSB7fQo8P3BocAoKbmFtZXNwYWNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbDsKCnVzZSBBdHRyaWJ1dGU7CgovKioKICogRm9yIFBocFN0b3JtIGludGVybmFsIHVzZSBvbmx5CiAqIEBzaW5jZSA4LjAKICogQGludGVybmFsCiAqLwojW0F0dHJpYnV0ZShBdHRyaWJ1dGU6OlRBUkdFVF9QQVJBTUVURVIpXQpjbGFzcyBSZXR1cm5UeXBlQ29udHJhY3QKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIHN0cmluZyAkdHJ1ZSA9ICIiLAogICAgICAgIHN0cmluZyAkZmFsc2UgPSAiIiwKICAgICAgICBzdHJpbmcgJGV4aXN0cyA9ICIiLAogICAgICAgIHN0cmluZyAkbm90RXhpc3RzID0gIiIKICAgICkge30KfQo8P3BocAoKbmFtZXNwYWNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbDsKCnVzZSBBdHRyaWJ1dGU7CgovKioKICogRm9yIFBocFN0b3JtIGludGVybmFsIHVzZSBvbmx5CiAqIEBzaW5jZSA4LjAKICogQGludGVybmFsCiAqLwojW0F0dHJpYnV0ZShBdHRyaWJ1dGU6OlRBUkdFVF9GVU5DVElPTnxBdHRyaWJ1dGU6OlRBUkdFVF9NRVRIT0R8QXR0cmlidXRlOjpUQVJHRVRfUEFSQU1FVEVSfEF0dHJpYnV0ZTo6VEFSR0VUX1BST1BFUlRZKV0KY2xhc3MgTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGxhbmd1YWdlTGV2ZWxUeXBlTWFwLCBzdHJpbmcgJGRlZmF1bHQpIHt9Cn0KPD9waHAKCm5hbWVzcGFjZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWw7Cgp1c2UgQXR0cmlidXRlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXERlcHJlY2F0ZWQ7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cRXhwZWN0ZWRWYWx1ZXM7CgovKioKICogRm9yIFBocFN0b3JtIGludGVybmFsIHVzZSBvbmx5CiAqIEBzaW5jZSA4LjAKICogQGludGVybmFsCiAqLwojW0F0dHJpYnV0ZShBdHRyaWJ1dGU6OlRBUkdFVF9GVU5DVElPTnxBdHRyaWJ1dGU6OlRBUkdFVF9NRVRIT0R8QXR0cmlidXRlOjpUQVJHRVRfUEFSQU1FVEVSKV0KY2xhc3MgUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbRXhwZWN0ZWRWYWx1ZXMoRGVwcmVjYXRlZDo6UEhQX1ZFUlNJT05TKV0gJGZyb20sCiAgICAgICAgI1tFeHBlY3RlZFZhbHVlcyhEZXByZWNhdGVkOjpQSFBfVkVSU0lPTlMpXSAkdG8gPSBudWxsCiAgICApIHt9Cn0KPD9waHAKCm5hbWVzcGFjZSBKZXRCcmFpbnNcUGhwU3Rvcm07Cgp1c2UgQXR0cmlidXRlOwoKI1tBdHRyaWJ1dGUoQXR0cmlidXRlOjpUQVJHRVRfRlVOQ1RJT058QXR0cmlidXRlOjpUQVJHRVRfTUVUSE9EfEF0dHJpYnV0ZTo6VEFSR0VUX0NMQVNTfEF0dHJpYnV0ZTo6VEFSR0VUX0NMQVNTX0NPTlNUQU5UfEF0dHJpYnV0ZTo6VEFSR0VUX1BST1BFUlRZfEF0dHJpYnV0ZTo6VEFSR0VUX1BBUkFNRVRFUildCmNsYXNzIERlcHJlY2F0ZWQKewogICAgcHVibGljIGNvbnN0IFBIUF9WRVJTSU9OUyA9IFsKICAgICAgICAiNS4zIiwKICAgICAgICAiNS40IiwKICAgICAgICAiNS41IiwKICAgICAgICAiNS42IiwKICAgICAgICAiNy4wIiwKICAgICAgICAiNy4xIiwKICAgICAgICAiNy4yIiwKICAgICAgICAiNy4zIiwKICAgICAgICAiNy40IiwKICAgICAgICAiOC4wIiwKICAgICAgICAiOC4xIiwKICAgICAgICAiOC4yIiwKICAgICAgICAiOC4zIiwKICAgICAgICAiOC40IgogICAgXTsKCiAgICAvKioKICAgICAqIE1hcmsgZWxlbWVudCBhcyBkZXByZWNhdGVkCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcmVhc29uIFJlYXNvbiBmb3IgZGVwcmVjYXRpb24uIEl0IHdpbGwgYmUgZGlzcGxheWVkIGJ5IFBocFN0b3JtIHZpYSB0aGUgRGVwcmVjYXRlZCBpbnNwZWN0aW9uIGluc3RlYWQgb2YgdGhlICBkZWZhdWx0IG1lc3NhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlcGxhY2VtZW50IEFwcGxpY2FibGUgb25seSB0byBmdW5jdGlvbi9tZXRob2QgY2FsbHM6IElERSB3aWxsIHN1Z2dlc3QgcmVwbGFjaW5nIGEgZGVwcmVjYXRlZCBmdW5jdGlvbiBjYWxsIHdpdGggdGhlIHByb3ZpZGVkIGNvZGUgdGVtcGxhdGUuCiAgICAgKiBUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlIGluIHRoaXMgdGVtcGxhdGU6CiAgICAgKiA8dWw+CiAgICAgKiA8bGk+JXBhcmFtZXRlcnNMaXN0JTogcGFyYW1ldGVycyBvZiB0aGUgZnVuY3Rpb24gY2FsbC4gRm9yIGV4YW1wbGUsIGZvciB0aGUgImYoMSwyKSIgY2FsbCwgJXBhcmFtZXRlcnNMaXN0JSB3aWxsIGJlICIxLDIiPC9saT4KICAgICAqIDxsaT4lcGFyYW1ldGVyMCUsJXBhcmFtZXRlcjElLCVwYXJhbWV0ZXIyJSwuLi46IHBhcmFtZXRlcnMgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuIEZvciBleGFtcGxlLCBmb3IgdGhlICJmKDEsMikiIGNhbGwsICVwYXJhbWV0ZXIxJSB3aWxsIGJlICIyIjwvbGk+CiAgICAgKiA8bGk+JW5hbWUlOiBGb3IgIlx4XGYoMSwyKSIsICVuYW1lJSB3aWxsIGJlICJceFxmIiwgZm9yICIkdGhpcy0+ZmYoKSIsICVuYW1lJSB3aWxsIGJlICJmZiI8L2xpPgogICAgICogPGxpPiVjbGFzcyU6IElmIHRoZSBhdHRyaWJ1dGUgaXMgcHJvdmlkZWQgZm9yIG1ldGhvZCAibSIsIHRoZW4gZm9yICIkdGhpcy0+ZigpLT5tKCkiLCAlY2xhc3MlIHdpbGwgYmUgIiR0aGlzLT5mKCkiPC9saT4KICAgICAqIDwvdWw+CiAgICAgKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIHdyYXAgYSBmdW5jdGlvbiBjYWxsIGluIGFub3RoZXIgY2FsbCBhbmQgc3dhcCBhcmd1bWVudHM6PGJyIC8+CiAgICAgKiAiI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAid3JhcHBlZENhbGwoJW5hbWUlKCVwYXJhbWV0ZXIxJSwgJXBhcmFtZXRlcjAlKSkiKV0gZigkYSwgJGIpe308YnIgLz4KICAgICAqIGYoMSwyKSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggd3JhcHBlZENhbGwoZigyLDEpKQogICAgICogQHBhcmFtIHN0cmluZyAkc2luY2UgRWxlbWVudCBpcyBkZXByZWNhdGVkIHN0YXJ0aW5nIHdpdGggdGhlIHByb3ZpZGVkIFBIUCBsYW5ndWFnZSBsZXZlbCwgYXBwbGljYWJsZSBvbmx5IGZvciBQaHBTdG9ybSBzdHVicyBlbnRyaWVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAkcmVhc29uID0gIiIsCiAgICAgICAgJHJlcGxhY2VtZW50ID0gIiIsCiAgICAgICAgI1tFeHBlY3RlZFZhbHVlcyhzZWxmOjpQSFBfVkVSU0lPTlMpXSAkc2luY2UgPSAiNS42IgogICAgKSB7fQp9Cjw/cGhwCgpuYW1lc3BhY2UgSmV0QnJhaW5zXFBocFN0b3JtOwoKdXNlIEF0dHJpYnV0ZTsKCi8qKgogKiBNYXJrIGEgcHJvcGVydHkgKG9yIGFsbCBjbGFzcyBwcm9wZXJ0aWVzIGluIHRoZSBjYXNlIG9mIGEgY2xhc3MpIGFzIGltbXV0YWJsZS4KICogQnkgZGVmYXVsdCwgYW4gSURFIGhpZ2hsaWdodHMgd3JpdGUgYWNjZXNzZXMgb24gc3VjaCBwcm9wZXJ0aWVzIGlmIHRoZXkgYXJlIGxvY2F0ZWQgb3V0c2lkZSBhIGNvbnN0cnVjdG9yICh0aGlzIHNjb3BlIGlzIGN1c3RvbWl6YWJsZSwgc2VlIGJlbG93KS4KICoKICogWW91IGNhbiBwcm92aWRlIGEgY3VzdG9tIGFsbG93ZWQgd3JpdGUgc2NvcGUgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAqIDx1bD4KICogPGxpPntAbGluayBJbW11dGFibGU6OkNPTlNUUlVDVE9SX1dSSVRFX1NDT1BFfTogd3JpdGUgaXMgYWxsb3dlZCBvbmx5IGluIGNvbnRhaW5pbmcgY2xhc3MgY29uc3RydWN0b3IgKGRlZmF1bHQgY2hvaWNlKTwvbGk+CiAqIDxsaT57QGxpbmsgSW1tdXRhYmxlOjpQUklWQVRFX1dSSVRFX1NDT1BFfTogd3JpdGUgaXMgYWxsb3dlZCBvbmx5IGluIHBsYWNlcyB3aGVyZSB0aGUgcHJvcGVydHkgd291bGQgYmUgYWNjZXNzaWJsZSBpZiBpdCBoYWQgJ3ByaXZhdGUnIHZpc2liaWxpdHkgbW9kaWZpZXI8L2xpPgogKiA8bGk+e0BsaW5rIEltbXV0YWJsZTo6UFJPVEVDVEVEX1dSSVRFX1NDT1BFfTogd3JpdGUgaXMgYWxsb3dlZCBvbmx5IGluIHBsYWNlcyB3aGVyZSB0aGUgcHJvcGVydHkgd291bGQgYmUgYWNjZXNzaWJsZSBpZiBpdCBoYWQgJ3Byb3RlY3RlZCcgdmlzaWJpbGl0eSBtb2RpZmllcjwvbGk+CiAqIDwvdWw+CiAqIEBzaW5jZSA4LjAKICovCiNbQXR0cmlidXRlKEF0dHJpYnV0ZTo6VEFSR0VUX1BST1BFUlRZfEF0dHJpYnV0ZTo6VEFSR0VUX0NMQVNTKV0KY2xhc3MgSW1tdXRhYmxlCnsKICAgIHB1YmxpYyBjb25zdCBDT05TVFJVQ1RPUl9XUklURV9TQ09QRSA9ICJjb25zdHJ1Y3RvciI7CiAgICBwdWJsaWMgY29uc3QgUFJJVkFURV9XUklURV9TQ09QRSA9ICJwcml2YXRlIjsKICAgIHB1YmxpYyBjb25zdCBQUk9URUNURURfV1JJVEVfU0NPUEUgPSAicHJvdGVjdGVkIjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoI1tFeHBlY3RlZFZhbHVlcyh2YWx1ZXNGcm9tQ2xhc3M6IEltbXV0YWJsZTo6Y2xhc3MpXSAkYWxsb3dlZFdyaXRlU2NvcGUgPSBzZWxmOjpDT05TVFJVQ1RPUl9XUklURV9TQ09QRSkge30KfQo8P3BocAoKbmFtZXNwYWNlIEpldEJyYWluc1xQaHBTdG9ybTsKCnVzZSBBdHRyaWJ1dGU7CgovKioKICogU3BlY2lmaWVzIHRoYXQgdGhlIHBhcmFtZXRlciBpcyBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgc291cmNlIGNvZGUgaW4gYSBkaWZmZXJlbnQgbGFuZ3VhZ2UuCiAqIEFuIElERSB3aWxsIGF1dG9tYXRpY2FsbHkgaW5qZWN0IHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgaW50byB0aGUgcGFzc2VkIHN0cmluZyBsaXRlcmFscy4KICoKICogQHNpbmNlIDguMAogKi8KI1tBdHRyaWJ1dGUoQXR0cmlidXRlOjpUQVJHRVRfUEFSQU1FVEVSKV0KY2xhc3MgTGFuZ3VhZ2UKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsYW5ndWFnZU5hbWUgTGFuZ3VhZ2UgbmFtZSBsaWtlICJQSFAiLCAiU1FMIiwgIlJlZ0V4cCIsIGV0Yy4uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRsYW5ndWFnZU5hbWUpIHt9Cn0KPD9waHAKCm5hbWVzcGFjZSBKZXRCcmFpbnNcUGhwU3Rvcm07Cgp1c2UgQXR0cmlidXRlOwoKLyoqCiAqIFRoZSBhdHRyaWJ1dGUgbWFya3MgdGhlIGZ1bmN0aW9uIHRoYXQgaGFzIG5vIGltcGFjdCBvbiB0aGUgcHJvZ3JhbSBzdGF0ZSBvciBwYXNzZWQgcGFyYW1ldGVycyB1c2VkIGFmdGVyIHRoZSBmdW5jdGlvbiBleGVjdXRpb24uCiAqIFRoaXMgbWVhbnMgdGhhdCBhIGZ1bmN0aW9uIGNhbGwgdGhhdCByZXNvbHZlcyB0byBzdWNoIGEgZnVuY3Rpb24gY2FuIGJlIHNhZmVseSByZW1vdmVkIGlmIHRoZSBleGVjdXRpb24gcmVzdWx0IGlzIG5vdCB1c2VkIGluIGNvZGUgYWZ0ZXJ3YXJkcy4KICoKICogQHNpbmNlIDguMAogKi8KI1tBdHRyaWJ1dGUoQXR0cmlidXRlOjpUQVJHRVRfRlVOQ1RJT058QXR0cmlidXRlOjpUQVJHRVRfTUVUSE9EKV0KY2xhc3MgUHVyZQp7CiAgICAvKioKICAgICAqIEBwYXJhbSBib29sICRtYXlEZXBlbmRPbkdsb2JhbFNjb3BlIFdoZXRoZXIgdGhlIGZ1bmN0aW9uIHJlc3VsdCBtYXkgYmUgZGVwZW5kZW50IG9uIGFueXRoaW5nIGV4Y2VwdCBwYXNzZWQgdmFyaWFibGVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChib29sICRtYXlEZXBlbmRPbkdsb2JhbFNjb3BlID0gZmFsc2UpIHt9Cn0KPD9waHAKCi8vIFN0YXJ0IG9mIGludGVyYmFzZSB2LgoKLyoqCiAqIE9wZW4gYSBjb25uZWN0aW9uIHRvIGFuIEludGVyQmFzZSBkYXRhYmFzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLWNvbm5lY3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBkYXRhYmFzZSBhcmd1bWVudCBoYXMgdG8gYmUgYSB2YWxpZCBwYXRoIHRvCiAqIGRhdGFiYXNlIGZpbGUgb24gdGhlIHNlcnZlciBpdCByZXNpZGVzIG9uLiBJZiB0aGUgc2VydmVyIGlzIG5vdCBsb2NhbCwKICogaXQgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIGVpdGhlciAnaG9zdG5hbWU6JyAoVENQL0lQKSwgJy8vaG9zdG5hbWUvJwogKiAoTmV0QkVVSSkgb3IgJ2hvc3RuYW1lQCcgKElQWC9TUFgpLCBkZXBlbmRpbmcgb24gdGhlIGNvbm5lY3Rpb24KICogcHJvdG9jb2wgdXNlZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgdXNlciBuYW1lLiBDYW4gYmUgc2V0IHdpdGggdGhlCiAqIGliYXNlLmRlZmF1bHRfdXNlciAmcGhwLmluaTsgZGlyZWN0aXZlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBwYXNzd29yZCBmb3IgdXNlcm5hbWUuIENhbiBiZSBzZXQgd2l0aCB0aGUKICogaWJhc2UuZGVmYXVsdF9wYXNzd29yZCAmcGhwLmluaTsgZGlyZWN0aXZlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGNoYXJzZXQgW29wdGlvbmFsXSA8cD4KICogY2hhcnNldCBpcyB0aGUgZGVmYXVsdCBjaGFyYWN0ZXIgc2V0IGZvciBhCiAqIGRhdGFiYXNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGJ1ZmZlcnMgW29wdGlvbmFsXSA8cD4KICogYnVmZmVycyBpcyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIGJ1ZmZlcnMgdG8KICogYWxsb2NhdGUgZm9yIHRoZSBzZXJ2ZXItc2lkZSBjYWNoZS4gSWYgMCBvciBvbWl0dGVkLCBzZXJ2ZXIgY2hvb3NlcwogKiBpdHMgb3duIGRlZmF1bHQuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZGlhbGVjdCBbb3B0aW9uYWxdIDxwPgogKiBkaWFsZWN0IHNlbGVjdHMgdGhlIGRlZmF1bHQgU1FMIGRpYWxlY3QgZm9yIGFueQogKiBzdGF0ZW1lbnQgZXhlY3V0ZWQgd2l0aGluIGEgY29ubmVjdGlvbiwgYW5kIGl0IGRlZmF1bHRzIHRvIHRoZSBoaWdoZXN0CiAqIG9uZSBzdXBwb3J0ZWQgYnkgY2xpZW50IGxpYnJhcmllcy4gRnVuY3Rpb25hbCBvbmx5IHdpdGggSW50ZXJCYXNlIDYKICogYW5kIHVwLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHJvbGUgW29wdGlvbmFsXSA8cD4KICogRnVuY3Rpb25hbCBvbmx5IHdpdGggSW50ZXJCYXNlIDUgYW5kIHVwLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHN5bmMgW29wdGlvbmFsXSA8cD4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGFuIEludGVyQmFzZSBsaW5rIGlkZW50aWZpZXIgb24gc3VjY2Vzcywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBpYmFzZV9jb25uZWN0KCRkYXRhYmFzZSA9IG51bGwsICR1c2VybmFtZSA9IG51bGwsICRwYXNzd29yZCA9IG51bGwsICRjaGFyc2V0ID0gbnVsbCwgJGJ1ZmZlcnMgPSBudWxsLCAkZGlhbGVjdCA9IG51bGwsICRyb2xlID0gbnVsbCwgJHN5bmMgPSBudWxsKSB7fQoKLyoqCiAqIE9wZW4gYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gdG8gYW4gSW50ZXJCYXNlIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtcGNvbm5lY3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBkYXRhYmFzZSBhcmd1bWVudCBoYXMgdG8gYmUgYSB2YWxpZCBwYXRoIHRvCiAqIGRhdGFiYXNlIGZpbGUgb24gdGhlIHNlcnZlciBpdCByZXNpZGVzIG9uLiBJZiB0aGUgc2VydmVyIGlzIG5vdCBsb2NhbCwKICogaXQgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIGVpdGhlciAnaG9zdG5hbWU6JyAoVENQL0lQKSwgJy8vaG9zdG5hbWUvJwogKiAoTmV0QkVVSSkgb3IgJ2hvc3RuYW1lQCcgKElQWC9TUFgpLCBkZXBlbmRpbmcgb24gdGhlIGNvbm5lY3Rpb24KICogcHJvdG9jb2wgdXNlZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgdXNlciBuYW1lLiBDYW4gYmUgc2V0IHdpdGggdGhlCiAqIGliYXNlLmRlZmF1bHRfdXNlciAmcGhwLmluaTsgZGlyZWN0aXZlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBwYXNzd29yZCBmb3IgdXNlcm5hbWUuIENhbiBiZSBzZXQgd2l0aCB0aGUKICogaWJhc2UuZGVmYXVsdF9wYXNzd29yZCAmcGhwLmluaTsgZGlyZWN0aXZlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGNoYXJzZXQgW29wdGlvbmFsXSA8cD4KICogY2hhcnNldCBpcyB0aGUgZGVmYXVsdCBjaGFyYWN0ZXIgc2V0IGZvciBhCiAqIGRhdGFiYXNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGJ1ZmZlcnMgW29wdGlvbmFsXSA8cD4KICogYnVmZmVycyBpcyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIGJ1ZmZlcnMgdG8KICogYWxsb2NhdGUgZm9yIHRoZSBzZXJ2ZXItc2lkZSBjYWNoZS4gSWYgMCBvciBvbWl0dGVkLCBzZXJ2ZXIgY2hvb3NlcwogKiBpdHMgb3duIGRlZmF1bHQuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZGlhbGVjdCBbb3B0aW9uYWxdIDxwPgogKiBkaWFsZWN0IHNlbGVjdHMgdGhlIGRlZmF1bHQgU1FMIGRpYWxlY3QgZm9yIGFueQogKiBzdGF0ZW1lbnQgZXhlY3V0ZWQgd2l0aGluIGEgY29ubmVjdGlvbiwgYW5kIGl0IGRlZmF1bHRzIHRvIHRoZSBoaWdoZXN0CiAqIG9uZSBzdXBwb3J0ZWQgYnkgY2xpZW50IGxpYnJhcmllcy4gRnVuY3Rpb25hbCBvbmx5IHdpdGggSW50ZXJCYXNlIDYKICogYW5kIHVwLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHJvbGUgW29wdGlvbmFsXSA8cD4KICogRnVuY3Rpb25hbCBvbmx5IHdpdGggSW50ZXJCYXNlIDUgYW5kIHVwLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHN5bmMgW29wdGlvbmFsXSA8cD4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGFuIEludGVyQmFzZSBsaW5rIGlkZW50aWZpZXIgb24gc3VjY2Vzcywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBpYmFzZV9wY29ubmVjdCgkZGF0YWJhc2UgPSBudWxsLCAkdXNlcm5hbWUgPSBudWxsLCAkcGFzc3dvcmQgPSBudWxsLCAkY2hhcnNldCA9IG51bGwsICRidWZmZXJzID0gbnVsbCwgJGRpYWxlY3QgPSBudWxsLCAkcm9sZSA9IG51bGwsICRzeW5jID0gbnVsbCkge30KCi8qKgogKiBDbG9zZSBhIGNvbm5lY3Rpb24gdG8gYW4gSW50ZXJCYXNlIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtY2xvc2UucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbl9pZCBbb3B0aW9uYWxdIDxwPgogKiBBbiBJbnRlckJhc2UgbGluayBpZGVudGlmaWVyIHJldHVybmVkIGZyb20KICogaWJhc2VfY29ubmVjdC4gSWYgb21pdHRlZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsKICogaXMgYXNzdW1lZC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpYmFzZV9jbG9zZSgkY29ubmVjdGlvbl9pZCA9IG51bGwpIHt9CgovKioKICogRHJvcHMgYSBkYXRhYmFzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLWRyb3AtZGIucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiBbb3B0aW9uYWxdIDxwPgogKiBBbiBJbnRlckJhc2UgbGluayBpZGVudGlmaWVyLiBJZiBvbWl0dGVkLCB0aGUgbGFzdCBvcGVuZWQgbGluayBpcwogKiBhc3N1bWVkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGliYXNlX2Ryb3BfZGIoJGNvbm5lY3Rpb24gPSBudWxsKSB7fQoKLyoqCiAqIEV4ZWN1dGUgYSBxdWVyeSBvbiBhbiBJbnRlckJhc2UgZGF0YWJhc2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1xdWVyeS5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXSA8cD4KICogQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllci4gSWYgb21pdHRlZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsgaXMKICogYXNzdW1lZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSA8cD4KICogQW4gSW50ZXJCYXNlIHF1ZXJ5LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGJpbmRfYXJncyBbb3B0aW9uYWxdIDxwPgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8Ym9vbCBJZiB0aGUgcXVlcnkgcmFpc2VzIGFuIGVycm9yLCByZXR1cm5zIGZhbHNlLiBJZiBpdCBpcyBzdWNjZXNzZnVsIGFuZAogKiB0aGVyZSBpcyBhIChwb3NzaWJseSBlbXB0eSkgcmVzdWx0IHNldCAoc3VjaCBhcyB3aXRoIGEgU0VMRUNUIHF1ZXJ5KSwKICogcmV0dXJucyBhIHJlc3VsdCBpZGVudGlmaWVyLiBJZiB0aGUgcXVlcnkgd2FzIHN1Y2Nlc3NmdWwgYW5kIHRoZXJlIHdlcmUKICogbm8gcmVzdWx0cywgcmV0dXJucyB0cnVlLgogKiA8L3A+CiAqIDxwPgogKiBJbiBQSFAgNS4wLjAgYW5kIHVwLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2Ygcm93cwogKiBhZmZlY3RlZCBieSB0aGUgcXVlcnkgZm9yIElOU0VSVCwgVVBEQVRFIGFuZCBERUxFVEUgc3RhdGVtZW50cy4gSW4gb3JkZXIKICogdG8gcmV0YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGl0IHdpbGwgcmV0dXJuIHRydWUgZm9yIHRoZXNlCiAqIHN0YXRlbWVudHMgaWYgdGhlIHF1ZXJ5IHN1Y2NlZWRlZCB3aXRob3V0IGFmZmVjdGluZyBhbnkgcm93cy4KICovCmZ1bmN0aW9uIGliYXNlX3F1ZXJ5KCRsaW5rX2lkZW50aWZpZXIgPSBudWxsLCAkcXVlcnksICRiaW5kX2FyZ3MgPSBudWxsKSB7fQoKLyoqCiAqIEZldGNoIGEgcm93IGZyb20gYW4gSW50ZXJCYXNlIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtZmV0Y2gtcm93LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZGVudGlmaWVyIDxwPgogKiBBbiBJbnRlckJhc2UgcmVzdWx0IGlkZW50aWZpZXIuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmV0Y2hfZmxhZyBbb3B0aW9uYWxdIDxwPgogKiBmZXRjaF9mbGFnIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGNvbnN0YW50cwogKiBJQkFTRV9URVhUIGFuZCBJQkFTRV9VTklYVElNRQogKiBPUmVkIHRvZ2V0aGVyLiBQYXNzaW5nIElCQVNFX1RFWFQgd2lsbCBjYXVzZSB0aGlzCiAqIGZ1bmN0aW9uIHRvIHJldHVybiBCTE9CIGNvbnRlbnRzIGluc3RlYWQgb2YgQkxPQiBpZHMuIFBhc3NpbmcKICogSUJBU0VfVU5JWFRJTUUgd2lsbCBjYXVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybgogKiBkYXRlL3RpbWUgdmFsdWVzIGFzIFVuaXggdGltZXN0YW1wcyBpbnN0ZWFkIG9mIGFzIGZvcm1hdHRlZCBzdHJpbmdzLgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXJyYXkgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZmV0Y2hlZCByb3csIG9yIGZhbHNlIGlmIHRoZXJlCiAqIGFyZSBubyBtb3JlIHJvd3MuIEVhY2ggcmVzdWx0IGNvbHVtbiBpcyBzdG9yZWQgaW4gYW4gYXJyYXkgb2Zmc2V0LAogKiBzdGFydGluZyBhdCBvZmZzZXQgMC4KICovCmZ1bmN0aW9uIGliYXNlX2ZldGNoX3JvdygkcmVzdWx0X2lkZW50aWZpZXIsICRmZXRjaF9mbGFnID0gbnVsbCkge30KCi8qKgogKiBGZXRjaCBhIHJlc3VsdCByb3cgZnJvbSBhIHF1ZXJ5IGFzIGFuIGFzc29jaWF0aXZlIGFycmF5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtZmV0Y2gtYXNzb2MucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBUaGUgcmVzdWx0IGhhbmRsZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmZXRjaF9mbGFnIFtvcHRpb25hbF0gPHA+CiAqIGZldGNoX2ZsYWcgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgY29uc3RhbnRzCiAqIElCQVNFX1RFWFQgYW5kIElCQVNFX1VOSVhUSU1FCiAqIE9SZWQgdG9nZXRoZXIuIFBhc3NpbmcgSUJBU0VfVEVYVCB3aWxsIGNhdXNlIHRoaXMKICogZnVuY3Rpb24gdG8gcmV0dXJuIEJMT0IgY29udGVudHMgaW5zdGVhZCBvZiBCTE9CIGlkcy4gUGFzc2luZwogKiBJQkFTRV9VTklYVElNRSB3aWxsIGNhdXNlIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuCiAqIGRhdGUvdGltZSB2YWx1ZXMgYXMgVW5peCB0aW1lc3RhbXBzIGluc3RlYWQgb2YgYXMgZm9ybWF0dGVkIHN0cmluZ3MuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBhbiBhc3NvY2lhdGl2ZSBhcnJheSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBmZXRjaGVkIHJvdy4KICogU3Vic2VxdWVudCBjYWxscyB3aWxsIHJldHVybiB0aGUgbmV4dCByb3cgaW4gdGhlIHJlc3VsdCBzZXQsIG9yIGZhbHNlIGlmCiAqIHRoZXJlIGFyZSBubyBtb3JlIHJvd3MuCiAqLwpmdW5jdGlvbiBpYmFzZV9mZXRjaF9hc3NvYygkcmVzdWx0LCAkZmV0Y2hfZmxhZyA9IG51bGwpIHt9CgovKioKICogR2V0IGFuIG9iamVjdCBmcm9tIGEgSW50ZXJCYXNlIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtZmV0Y2gtb2JqZWN0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZCA8cD4KICogQW4gSW50ZXJCYXNlIHJlc3VsdCBpZGVudGlmaWVyIG9idGFpbmVkIGVpdGhlciBieQogKiBpYmFzZV9xdWVyeSBvciBpYmFzZV9leGVjdXRlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZldGNoX2ZsYWcgW29wdGlvbmFsXSA8cD4KICogZmV0Y2hfZmxhZyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBjb25zdGFudHMKICogSUJBU0VfVEVYVCBhbmQgSUJBU0VfVU5JWFRJTUUKICogT1JlZCB0b2dldGhlci4gUGFzc2luZyBJQkFTRV9URVhUIHdpbGwgY2F1c2UgdGhpcwogKiBmdW5jdGlvbiB0byByZXR1cm4gQkxPQiBjb250ZW50cyBpbnN0ZWFkIG9mIEJMT0IgaWRzLiBQYXNzaW5nCiAqIElCQVNFX1VOSVhUSU1FIHdpbGwgY2F1c2UgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4KICogZGF0ZS90aW1lIHZhbHVlcyBhcyBVbml4IHRpbWVzdGFtcHMgaW5zdGVhZCBvZiBhcyBmb3JtYXR0ZWQgc3RyaW5ncy4KICogPC9wPgogKiBAcmV0dXJuIG9iamVjdHxmYWxzZSBhbiBvYmplY3Qgd2l0aCB0aGUgbmV4dCByb3cgaW5mb3JtYXRpb24sIG9yIGZhbHNlIGlmIHRoZXJlIGFyZQogKiBubyBtb3JlIHJvd3MuCiAqLwpmdW5jdGlvbiBpYmFzZV9mZXRjaF9vYmplY3QoJHJlc3VsdF9pZCwgJGZldGNoX2ZsYWcgPSBudWxsKSB7fQoKLyoqCiAqIEZyZWUgYSByZXN1bHQgc2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtZnJlZS1yZXN1bHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkZW50aWZpZXIgPHA+CiAqIEEgcmVzdWx0IHNldCBjcmVhdGVkIGJ5IGliYXNlX3F1ZXJ5IG9yCiAqIGliYXNlX2V4ZWN1dGUuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaWJhc2VfZnJlZV9yZXN1bHQoJHJlc3VsdF9pZGVudGlmaWVyKSB7fQoKLyoqCiAqIEFzc2lnbnMgYSBuYW1lIHRvIGEgcmVzdWx0IHNldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLW5hbWUtcmVzdWx0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogQW4gSW50ZXJCYXNlIHJlc3VsdCBzZXQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICogVGhlIG5hbWUgdG8gYmUgYXNzaWduZWQuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaWJhc2VfbmFtZV9yZXN1bHQoJHJlc3VsdCwgJG5hbWUpIHt9CgovKioKICogUHJlcGFyZSBhIHF1ZXJ5IGZvciBsYXRlciBiaW5kaW5nIG9mIHBhcmFtZXRlciBwbGFjZWhvbGRlcnMgYW5kIGV4ZWN1dGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLXByZXBhcmUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IDxwPgogKiBBbiBJbnRlckJhc2UgcXVlcnkuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBhIHByZXBhcmVkIHF1ZXJ5IGhhbmRsZSwgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBpYmFzZV9wcmVwYXJlKCRxdWVyeSkge30KCi8qKgogKiBFeGVjdXRlIGEgcHJldmlvdXNseSBwcmVwYXJlZCBxdWVyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLWV4ZWN1dGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcXVlcnkgPHA+CiAqIEFuIEludGVyQmFzZSBxdWVyeSBwcmVwYXJlZCBieSBpYmFzZV9wcmVwYXJlLgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAuLi4kYmluZF9hcmcgW29wdGlvbmFsXSA8cD4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGJvb2wgSWYgdGhlIHF1ZXJ5IHJhaXNlcyBhbiBlcnJvciwgcmV0dXJucyBmYWxzZS4gSWYgaXQgaXMgc3VjY2Vzc2Z1bCBhbmQKICogdGhlcmUgaXMgYSAocG9zc2libHkgZW1wdHkpIHJlc3VsdCBzZXQgKHN1Y2ggYXMgd2l0aCBhIFNFTEVDVCBxdWVyeSksCiAqIHJldHVybnMgYSByZXN1bHQgaWRlbnRpZmllci4gSWYgdGhlIHF1ZXJ5IHdhcyBzdWNjZXNzZnVsIGFuZCB0aGVyZSB3ZXJlCiAqIG5vIHJlc3VsdHMsIHJldHVybnMgdHJ1ZS4KICogPC9wPgogKiA8cD4KICogSW4gUEhQIDUuMC4wIGFuZCB1cCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBieQogKiB0aGUgcXVlcnkgKGlmID4gMCBhbmQgYXBwbGljYWJsZSB0byB0aGUgc3RhdGVtZW50IHR5cGUpLiBBIHF1ZXJ5IHRoYXQKICogc3VjY2VlZGVkLCBidXQgZGlkIG5vdCBhZmZlY3QgYW55IHJvd3MgKGUuZy4gYW4gVVBEQVRFIG9mIGEgbm9uLWV4aXN0ZW50CiAqIHJlY29yZCkgd2lsbCByZXR1cm4gdHJ1ZS4KICovCmZ1bmN0aW9uIGliYXNlX2V4ZWN1dGUoJHF1ZXJ5LCAuLi4kYmluZF9hcmcpIHt9CgovKioKICogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGEgcHJlcGFyZWQgcXVlcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1mcmVlLXF1ZXJ5LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHF1ZXJ5IDxwPgogKiBBIHF1ZXJ5IHByZXBhcmVkIHdpdGggaWJhc2VfcHJlcGFyZS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpYmFzZV9mcmVlX3F1ZXJ5KCRxdWVyeSkge30KCi8qKgogKiBJbmNyZW1lbnRzIHRoZSBuYW1lZCBnZW5lcmF0b3IgYW5kIHJldHVybnMgaXRzIG5ldyB2YWx1ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLWdlbi1pZC5waHAKICogQHBhcmFtIHN0cmluZyAkZ2VuZXJhdG9yCiAqIEBwYXJhbSBpbnQgJGluY3JlbWVudCBbb3B0aW9uYWxdCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0KICogQHJldHVybiBtaXhlZCBuZXcgZ2VuZXJhdG9yIHZhbHVlIGFzIGludGVnZXIsIG9yIGFzIHN0cmluZyBpZiB0aGUgdmFsdWUgaXMgdG9vIGJpZy4KICovCmZ1bmN0aW9uIGliYXNlX2dlbl9pZCgkZ2VuZXJhdG9yLCAkaW5jcmVtZW50ID0gbnVsbCwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogR2V0IHRoZSBudW1iZXIgb2YgZmllbGRzIGluIGEgcmVzdWx0IHNldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLW51bS1maWVsZHMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkIDxwPgogKiBBbiBJbnRlckJhc2UgcmVzdWx0IGlkZW50aWZpZXIuCiAqIDwvcD4KICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBmaWVsZHMgYXMgYW4gaW50ZWdlci4KICovCmZ1bmN0aW9uIGliYXNlX251bV9maWVsZHMoJHJlc3VsdF9pZCkge30KCi8qKgogKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIGluIGEgcHJlcGFyZWQgcXVlcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1udW0tcGFyYW1zLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHF1ZXJ5IDxwPgogKiBUaGUgcHJlcGFyZWQgcXVlcnkgaGFuZGxlLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBhcyBhbiBpbnRlZ2VyLgogKi8KZnVuY3Rpb24gaWJhc2VfbnVtX3BhcmFtcygkcXVlcnkpIHt9CgovKioKICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygcm93cyB0aGF0IHdlcmUgYWZmZWN0ZWQgYnkgdGhlIHByZXZpb3VzIHF1ZXJ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtYWZmZWN0ZWQtcm93cy5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXSA8cD4KICogQSB0cmFuc2FjdGlvbiBjb250ZXh0LiBJZiBsaW5rX2lkZW50aWZpZXIgaXMgYQogKiBjb25uZWN0aW9uIHJlc291cmNlLCBpdHMgZGVmYXVsdCB0cmFuc2FjdGlvbiBpcyB1c2VkLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IHRoZSBudW1iZXIgb2Ygcm93cyBhcyBhbiBpbnRlZ2VyLgogKi8KZnVuY3Rpb24gaWJhc2VfYWZmZWN0ZWRfcm93cygkbGlua19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWVsZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLWZpZWxkLWluZm8ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBBbiBJbnRlckJhc2UgcmVzdWx0IGlkZW50aWZpZXIuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmllbGRfbnVtYmVyIDxwPgogKiBGaWVsZCBvZmZzZXQuCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBhbiBhcnJheSB3aXRoIHRoZSBmb2xsb3dpbmcga2V5czogbmFtZSwKICogYWxpYXMsIHJlbGF0aW9uLAogKiBsZW5ndGggYW5kIHR5cGUuCiAqLwpmdW5jdGlvbiBpYmFzZV9maWVsZF9pbmZvKCRyZXN1bHQsICRmaWVsZF9udW1iZXIpIHt9CgovKioKICogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IGEgcGFyYW1ldGVyIGluIGEgcHJlcGFyZWQgcXVlcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1wYXJhbS1pbmZvLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHF1ZXJ5IDxwPgogKiBBbiBJbnRlckJhc2UgcHJlcGFyZWQgcXVlcnkgaGFuZGxlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHBhcmFtX251bWJlciA8cD4KICogUGFyYW1ldGVyIG9mZnNldC4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzOiBuYW1lLAogKiBhbGlhcywgcmVsYXRpb24sCiAqIGxlbmd0aCBhbmQgdHlwZS4KICovCmZ1bmN0aW9uIGliYXNlX3BhcmFtX2luZm8oJHF1ZXJ5LCAkcGFyYW1fbnVtYmVyKSB7fQoKLyoqCiAqIEJlZ2luIGEgdHJhbnNhY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS10cmFucy5waHAKICogQHBhcmFtIGludCAkdHJhbnNfYXJncyBbb3B0aW9uYWxdIDxwPgogKiB0cmFuc19hcmdzIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mCiAqIElCQVNFX1JFQUQsCiAqIElCQVNFX1dSSVRFLAogKiBJQkFTRV9DT01NSVRURUQsCiAqIElCQVNFX0NPTlNJU1RFTkNZLAogKiBJQkFTRV9DT05DVVJSRU5DWSwKICogSUJBU0VfUkVDX1ZFUlNJT04sCiAqIElCQVNFX1JFQ19OT19WRVJTSU9OLAogKiBJQkFTRV9XQUlUIGFuZAogKiBJQkFTRV9OT1dBSVQuCiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXSA8cD4KICogQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllci4gSWYgb21pdHRlZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsgaXMKICogYXNzdW1lZC4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGEgdHJhbnNhY3Rpb24gaGFuZGxlLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGliYXNlX3RyYW5zKCR0cmFuc19hcmdzID0gbnVsbCwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogQ29tbWl0IGEgdHJhbnNhY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1jb21taXQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19vcl90cmFuc19pZGVudGlmaWVyIFtvcHRpb25hbF0gPHA+CiAqIElmIGNhbGxlZCB3aXRob3V0IGFuIGFyZ3VtZW50LCB0aGlzIGZ1bmN0aW9uIGNvbW1pdHMgdGhlIGRlZmF1bHQKICogdHJhbnNhY3Rpb24gb2YgdGhlIGRlZmF1bHQgbGluay4gSWYgdGhlIGFyZ3VtZW50IGlzIGEgY29ubmVjdGlvbgogKiBpZGVudGlmaWVyLCB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBjb25uZWN0aW9uCiAqIHdpbGwgYmUgY29tbWl0dGVkLiBJZiB0aGUgYXJndW1lbnQgaXMgYSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLCB0aGUKICogY29ycmVzcG9uZGluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbW1pdHRlZC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpYmFzZV9jb21taXQoJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogUm9sbCBiYWNrIGEgdHJhbnNhY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1yb2xsYmFjay5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX29yX3RyYW5zX2lkZW50aWZpZXIgW29wdGlvbmFsXSA8cD4KICogSWYgY2FsbGVkIHdpdGhvdXQgYW4gYXJndW1lbnQsIHRoaXMgZnVuY3Rpb24gcm9sbHMgYmFjayB0aGUgZGVmYXVsdAogKiB0cmFuc2FjdGlvbiBvZiB0aGUgZGVmYXVsdCBsaW5rLiBJZiB0aGUgYXJndW1lbnQgaXMgYSBjb25uZWN0aW9uCiAqIGlkZW50aWZpZXIsIHRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbm5lY3Rpb24KICogd2lsbCBiZSByb2xsZWQgYmFjay4gSWYgdGhlIGFyZ3VtZW50IGlzIGEgdHJhbnNhY3Rpb24gaWRlbnRpZmllciwgdGhlCiAqIGNvcnJlc3BvbmRpbmcgdHJhbnNhY3Rpb24gd2lsbCBiZSByb2xsZWQgYmFjay4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpYmFzZV9yb2xsYmFjaygkbGlua19vcl90cmFuc19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBDb21taXQgYSB0cmFuc2FjdGlvbiB3aXRob3V0IGNsb3NpbmcgaXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1jb21taXQtcmV0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllciBbb3B0aW9uYWxdIDxwPgogKiBJZiBjYWxsZWQgd2l0aG91dCBhbiBhcmd1bWVudCwgdGhpcyBmdW5jdGlvbiBjb21taXRzIHRoZSBkZWZhdWx0CiAqIHRyYW5zYWN0aW9uIG9mIHRoZSBkZWZhdWx0IGxpbmsuIElmIHRoZSBhcmd1bWVudCBpcyBhIGNvbm5lY3Rpb24KICogaWRlbnRpZmllciwgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29ubmVjdGlvbgogKiB3aWxsIGJlIGNvbW1pdHRlZC4gSWYgdGhlIGFyZ3VtZW50IGlzIGEgdHJhbnNhY3Rpb24gaWRlbnRpZmllciwgdGhlCiAqIGNvcnJlc3BvbmRpbmcgdHJhbnNhY3Rpb24gd2lsbCBiZSBjb21taXR0ZWQuIFRoZSB0cmFuc2FjdGlvbiBjb250ZXh0CiAqIHdpbGwgYmUgcmV0YWluZWQsIHNvIHN0YXRlbWVudHMgZXhlY3V0ZWQgZnJvbSB3aXRoaW4gdGhpcyB0cmFuc2FjdGlvbgogKiB3aWxsIG5vdCBiZSBpbnZhbGlkYXRlZC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpYmFzZV9jb21taXRfcmV0KCRsaW5rX29yX3RyYW5zX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIFJvbGwgYmFjayBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgY2xvc2luZyBpdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLXJvbGxiYWNrLXJldC5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX29yX3RyYW5zX2lkZW50aWZpZXIgW29wdGlvbmFsXSA8cD4KICogSWYgY2FsbGVkIHdpdGhvdXQgYW4gYXJndW1lbnQsIHRoaXMgZnVuY3Rpb24gcm9sbHMgYmFjayB0aGUgZGVmYXVsdAogKiB0cmFuc2FjdGlvbiBvZiB0aGUgZGVmYXVsdCBsaW5rLiBJZiB0aGUgYXJndW1lbnQgaXMgYSBjb25uZWN0aW9uCiAqIGlkZW50aWZpZXIsIHRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbm5lY3Rpb24KICogd2lsbCBiZSByb2xsZWQgYmFjay4gSWYgdGhlIGFyZ3VtZW50IGlzIGEgdHJhbnNhY3Rpb24gaWRlbnRpZmllciwgdGhlCiAqIGNvcnJlc3BvbmRpbmcgdHJhbnNhY3Rpb24gd2lsbCBiZSByb2xsZWQgYmFjay4gVGhlIHRyYW5zYWN0aW9uIGNvbnRleHQKICogd2lsbCBiZSByZXRhaW5lZCwgc28gc3RhdGVtZW50cyBleGVjdXRlZCBmcm9tIHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uCiAqIHdpbGwgbm90IGJlIGludmFsaWRhdGVkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGliYXNlX3JvbGxiYWNrX3JldCgkbGlua19vcl90cmFuc19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBSZXR1cm4gYmxvYiBsZW5ndGggYW5kIG90aGVyIHVzZWZ1bCBpbmZvCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtYmxvYi1pbmZvLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciA8cD4KICogQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllci4gSWYgb21pdHRlZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsgaXMKICogYXNzdW1lZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRibG9iX2lkIDxwPgogKiBBIEJMT0IgaWQuCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBhbiBhcnJheSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGEgQkxPQi4gVGhlIGluZm9ybWF0aW9uIHJldHVybmVkCiAqIGNvbnNpc3RzIG9mIHRoZSBsZW5ndGggb2YgdGhlIEJMT0IsIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgaXQgY29udGFpbnMsIHRoZSBzaXplCiAqIG9mIHRoZSBsYXJnZXN0IHNlZ21lbnQsIGFuZCB3aGV0aGVyIGl0IGlzIGEgc3RyZWFtIEJMT0Igb3IgYSBzZWdtZW50ZWQgQkxPQi4KICovCmZ1bmN0aW9uIGliYXNlX2Jsb2JfaW5mbygkbGlua19pZGVudGlmaWVyLCAkYmxvYl9pZCkge30KCi8qKgogKiBDcmVhdGUgYSBuZXcgYmxvYiBmb3IgYWRkaW5nIGRhdGEKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1ibG9iLWNyZWF0ZS5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXSA8cD4KICogQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllci4gSWYgb21pdHRlZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsgaXMKICogYXNzdW1lZC4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGEgQkxPQiBoYW5kbGUgZm9yIGxhdGVyIHVzZSB3aXRoCiAqIGliYXNlX2Jsb2JfYWRkIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpYmFzZV9ibG9iX2NyZWF0ZSgkbGlua19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBBZGQgZGF0YSBpbnRvIGEgbmV3bHkgY3JlYXRlZCBibG9iCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtYmxvYi1hZGQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkYmxvYl9oYW5kbGUgPHA+CiAqIEEgYmxvYiBoYW5kbGUgb3BlbmVkIHdpdGggaWJhc2VfYmxvYl9jcmVhdGUuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICogVGhlIGRhdGEgdG8gYmUgYWRkZWQuCiAqIDwvcD4KICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBpYmFzZV9ibG9iX2FkZCgkYmxvYl9oYW5kbGUsICRkYXRhKSB7fQoKLyoqCiAqIENhbmNlbCBjcmVhdGluZyBibG9iCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtYmxvYi1jYW5jZWwucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkYmxvYl9oYW5kbGUgPHA+CiAqIEEgQkxPQiBoYW5kbGUgb3BlbmVkIHdpdGggaWJhc2VfYmxvYl9jcmVhdGUuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaWJhc2VfYmxvYl9jYW5jZWwoJGJsb2JfaGFuZGxlKSB7fQoKLyoqCiAqIENsb3NlIGJsb2IKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1ibG9iLWNsb3NlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGJsb2JfaGFuZGxlIDxwPgogKiBBIEJMT0IgaGFuZGxlIG9wZW5lZCB3aXRoIGliYXNlX2Jsb2JfY3JlYXRlIG9yCiAqIGliYXNlX2Jsb2Jfb3Blbi4KICogPC9wPgogKiBAcmV0dXJuIG1peGVkIElmIHRoZSBCTE9CIHdhcyBiZWluZyByZWFkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBpZgogKiB0aGUgQkxPQiB3YXMgYmVpbmcgd3JpdHRlbiB0bywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcKICogdGhlIEJMT0IgaWQgdGhhdCBoYXMgYmVlbiBhc3NpZ25lZCB0byBpdCBieSB0aGUgZGF0YWJhc2UuIE9uIGZhaWx1cmUsIHRoaXMKICogZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4KICovCmZ1bmN0aW9uIGliYXNlX2Jsb2JfY2xvc2UoJGJsb2JfaGFuZGxlKSB7fQoKLyoqCiAqIE9wZW4gYmxvYiBmb3IgcmV0cmlldmluZyBkYXRhIHBhcnRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtYmxvYi1vcGVuLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciA8cD4KICogQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllci4gSWYgb21pdHRlZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsgaXMKICogYXNzdW1lZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRibG9iX2lkIDxwPgogKiBBIEJMT0IgaWQuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBhIEJMT0IgaGFuZGxlIGZvciBsYXRlciB1c2Ugd2l0aAogKiBpYmFzZV9ibG9iX2dldCBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaWJhc2VfYmxvYl9vcGVuKCRsaW5rX2lkZW50aWZpZXIsICRibG9iX2lkKSB7fQoKLyoqCiAqIEdldCBsZW4gYnl0ZXMgZGF0YSBmcm9tIG9wZW4gYmxvYgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLWJsb2ItZ2V0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGJsb2JfaGFuZGxlIDxwPgogKiBBIEJMT0IgaGFuZGxlIG9wZW5lZCB3aXRoIGliYXNlX2Jsb2Jfb3Blbi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRsZW4gPHA+CiAqIFNpemUgb2YgcmV0dXJuZWQgZGF0YS4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBhdCBtb3N0IGxlbiBieXRlcyBmcm9tIHRoZSBCTE9CLCBvciBmYWxzZQogKiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaWJhc2VfYmxvYl9nZXQoJGJsb2JfaGFuZGxlLCAkbGVuKSB7fQoKLyoqCiAqIE91dHB1dCBibG9iIGNvbnRlbnRzIHRvIGJyb3dzZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1ibG9iLWVjaG8ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGJsb2JfaWQgPHA+CiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaWJhc2VfYmxvYl9lY2hvKCRibG9iX2lkKSB7fQoKLyoqCiAqIENyZWF0ZSBibG9iLCBjb3B5IGZpbGUgaW4gaXQsIGFuZCBjbG9zZSBpdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLWJsb2ItaW1wb3J0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciA8cD4KICogQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllci4gSWYgb21pdHRlZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsgaXMKICogYXNzdW1lZC4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGZpbGVfaGFuZGxlIDxwPgogKiBUaGUgZmlsZSBoYW5kbGUgaXMgYSBoYW5kbGUgcmV0dXJuZWQgYnkgZm9wZW4uCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIEJMT0IgaWQgb24gc3VjY2Vzcywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBpYmFzZV9ibG9iX2ltcG9ydCgkbGlua19pZGVudGlmaWVyLCAkZmlsZV9oYW5kbGUpIHt9CgovKioKICogUmV0dXJuIGVycm9yIG1lc3NhZ2VzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtZXJybXNnLnBocAogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgZXJyb3IgbWVzc2FnZSBhcyBhIHN0cmluZywgb3IgZmFsc2UgaWYgbm8gZXJyb3Igb2NjdXJyZWQuCiAqLwpmdW5jdGlvbiBpYmFzZV9lcnJtc2coKSB7fQoKLyoqCiAqIFJldHVybiBhbiBlcnJvciBjb2RlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtZXJyY29kZS5waHAKICogQHJldHVybiBpbnR8ZmFsc2UgdGhlIGVycm9yIGNvZGUgYXMgYW4gaW50ZWdlciwgb3IgZmFsc2UgaWYgbm8gZXJyb3Igb2NjdXJyZWQuCiAqLwpmdW5jdGlvbiBpYmFzZV9lcnJjb2RlKCkge30KCi8qKgogKiBBZGQgYSB1c2VyIHRvIGEgc2VjdXJpdHkgZGF0YWJhc2UgKG9ubHkgZm9yIElCNiBvciBsYXRlcikKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1hZGQtdXNlci5waHAKICogQHBhcmFtIHJlc291cmNlICRzZXJ2aWNlX2hhbmRsZQogKiBAcGFyYW0gc3RyaW5nICR1c2VyX25hbWUKICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQKICogQHBhcmFtIHN0cmluZyAkZmlyc3RfbmFtZSBbb3B0aW9uYWxdCiAqIEBwYXJhbSBzdHJpbmcgJG1pZGRsZV9uYW1lIFtvcHRpb25hbF0KICogQHBhcmFtIHN0cmluZyAkbGFzdF9uYW1lIFtvcHRpb25hbF0KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaWJhc2VfYWRkX3VzZXIoJHNlcnZpY2VfaGFuZGxlLCAkdXNlcl9uYW1lLCAkcGFzc3dvcmQsICRmaXJzdF9uYW1lID0gbnVsbCwgJG1pZGRsZV9uYW1lID0gbnVsbCwgJGxhc3RfbmFtZSA9IG51bGwpIHt9CgovKioKICogTW9kaWZ5IGEgdXNlciB0byBhIHNlY3VyaXR5IGRhdGFiYXNlIChvbmx5IGZvciBJQjYgb3IgbGF0ZXIpCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtbW9kaWZ5LXVzZXIucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUKICogQHBhcmFtIHN0cmluZyAkdXNlcl9uYW1lCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkCiAqIEBwYXJhbSBzdHJpbmcgJGZpcnN0X25hbWUgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nICRtaWRkbGVfbmFtZSBbb3B0aW9uYWxdCiAqIEBwYXJhbSBzdHJpbmcgJGxhc3RfbmFtZSBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGliYXNlX21vZGlmeV91c2VyKCRzZXJ2aWNlX2hhbmRsZSwgJHVzZXJfbmFtZSwgJHBhc3N3b3JkLCAkZmlyc3RfbmFtZSA9IG51bGwsICRtaWRkbGVfbmFtZSA9IG51bGwsICRsYXN0X25hbWUgPSBudWxsKSB7fQoKLyoqCiAqIERlbGV0ZSBhIHVzZXIgZnJvbSBhIHNlY3VyaXR5IGRhdGFiYXNlIChvbmx5IGZvciBJQjYgb3IgbGF0ZXIpCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtZGVsZXRlLXVzZXIucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUKICogQHBhcmFtIHN0cmluZyAkdXNlcl9uYW1lCiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGliYXNlX2RlbGV0ZV91c2VyKCRzZXJ2aWNlX2hhbmRsZSwgJHVzZXJfbmFtZSkge30KCi8qKgogKiBDb25uZWN0IHRvIHRoZSBzZXJ2aWNlIG1hbmFnZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1zZXJ2aWNlLWF0dGFjaC5waHAKICogQHBhcmFtIHN0cmluZyAkaG9zdAogKiBAcGFyYW0gc3RyaW5nICRkYmFfdXNlcm5hbWUKICogQHBhcmFtIHN0cmluZyAkZGJhX3Bhc3N3b3JkCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UKICovCmZ1bmN0aW9uIGliYXNlX3NlcnZpY2VfYXR0YWNoKCRob3N0LCAkZGJhX3VzZXJuYW1lLCAkZGJhX3Bhc3N3b3JkKSB7fQoKLyoqCiAqIERpc2Nvbm5lY3QgZnJvbSB0aGUgc2VydmljZSBtYW5hZ2VyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2Utc2VydmljZS1kZXRhY2gucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUKICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaWJhc2Vfc2VydmljZV9kZXRhY2goJHNlcnZpY2VfaGFuZGxlKSB7fQoKLyoqCiAqIEluaXRpYXRlcyBhIGJhY2t1cCB0YXNrIGluIHRoZSBzZXJ2aWNlIG1hbmFnZXIgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1iYWNrdXAucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUKICogQHBhcmFtIHN0cmluZyAkc291cmNlX2RiCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3RfZmlsZQogKiBAcGFyYW0gaW50ICRvcHRpb25zIFtvcHRpb25hbF0KICogQHBhcmFtIGJvb2wgJHZlcmJvc2UgW29wdGlvbmFsXQogKiBAcmV0dXJuIG1peGVkCiAqLwpmdW5jdGlvbiBpYmFzZV9iYWNrdXAoJHNlcnZpY2VfaGFuZGxlLCAkc291cmNlX2RiLCAkZGVzdF9maWxlLCAkb3B0aW9ucyA9IG51bGwsICR2ZXJib3NlID0gbnVsbCkge30KCi8qKgogKiBJbml0aWF0ZXMgYSByZXN0b3JlIHRhc2sgaW4gdGhlIHNlcnZpY2UgbWFuYWdlciBhbmQgcmV0dXJucyBpbW1lZGlhdGVseQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLXJlc3RvcmUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUKICogQHBhcmFtIHN0cmluZyAkc291cmNlX2ZpbGUKICogQHBhcmFtIHN0cmluZyAkZGVzdF9kYgogKiBAcGFyYW0gaW50ICRvcHRpb25zIFtvcHRpb25hbF0KICogQHBhcmFtIGJvb2wgJHZlcmJvc2UgW29wdGlvbmFsXQogKiBAcmV0dXJuIG1peGVkCiAqLwpmdW5jdGlvbiBpYmFzZV9yZXN0b3JlKCRzZXJ2aWNlX2hhbmRsZSwgJHNvdXJjZV9maWxlLCAkZGVzdF9kYiwgJG9wdGlvbnMgPSBudWxsLCAkdmVyYm9zZSA9IG51bGwpIHt9CgovKioKICogRXhlY3V0ZSBhIG1haW50ZW5hbmNlIGNvbW1hbmQgb24gdGhlIGRhdGFiYXNlIHNlcnZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLW1haW50YWluLWRiLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNlcnZpY2VfaGFuZGxlCiAqIEBwYXJhbSBzdHJpbmcgJGRiCiAqIEBwYXJhbSBpbnQgJGFjdGlvbgogKiBAcGFyYW0gaW50ICRhcmd1bWVudCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGliYXNlX21haW50YWluX2RiKCRzZXJ2aWNlX2hhbmRsZSwgJGRiLCAkYWN0aW9uLCAkYXJndW1lbnQgPSBudWxsKSB7fQoKLyoqCiAqIFJlcXVlc3Qgc3RhdGlzdGljcyBhYm91dCBhIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2UtZGItaW5mby5waHAKICogQHBhcmFtIHJlc291cmNlICRzZXJ2aWNlX2hhbmRsZQogKiBAcGFyYW0gc3RyaW5nICRkYgogKiBAcGFyYW0gaW50ICRhY3Rpb24KICogQHBhcmFtIGludCAkYXJndW1lbnQgW29wdGlvbmFsXQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gaWJhc2VfZGJfaW5mbygkc2VydmljZV9oYW5kbGUsICRkYiwgJGFjdGlvbiwgJGFyZ3VtZW50ID0gbnVsbCkge30KCi8qKgogKiBSZXF1ZXN0IGluZm9ybWF0aW9uIGFib3V0IGEgZGF0YWJhc2Ugc2VydmVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaWJhc2Utc2VydmVyLWluZm8ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUKICogQHBhcmFtIGludCAkYWN0aW9uCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBpYmFzZV9zZXJ2ZXJfaW5mbygkc2VydmljZV9oYW5kbGUsICRhY3Rpb24pIHt9CgovKioKICogV2FpdCBmb3IgYW4gZXZlbnQgdG8gYmUgcG9zdGVkIGJ5IHRoZSBkYXRhYmFzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmliYXNlLXdhaXQtZXZlbnQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGV2ZW50X25hbWUxIDxwPgogKiBUaGUgZXZlbnQgbmFtZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRldmVudF9uYW1lMiBbb3B0aW9uYWxdIDxwPgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgLi4uJF8gW29wdGlvbmFsXQogKiBAcmV0dXJuIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgdGhhdCB3YXMgcG9zdGVkLgogKi8KZnVuY3Rpb24gaWJhc2Vfd2FpdF9ldmVudCgkZXZlbnRfbmFtZTEsICRldmVudF9uYW1lMiA9IG51bGwsIC4uLiRfKSB7fQoKLyoqCiAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gZXZlbnRzIGFyZSBwb3N0ZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1zZXQtZXZlbnQtaGFuZGxlci5waHAKICogQHBhcmFtIGNhbGxhYmxlICRldmVudF9oYW5kbGVyIDxwPgogKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggdGhlIGV2ZW50IG5hbWUgYW5kIHRoZSBsaW5rIHJlc291cmNlIGFzCiAqIGFyZ3VtZW50cyB3aGVuZXZlciBvbmUgb2YgdGhlIHNwZWNpZmllZCBldmVudHMgaXMgcG9zdGVkIGJ5IHRoZQogKiBkYXRhYmFzZS4KICogPC9wPgogKiA8cD4KICogVGhlIGNhbGxiYWNrIG11c3QgcmV0dXJuIGZhbHNlIGlmIHRoZSBldmVudCBoYW5kbGVyIHNob3VsZCBiZQogKiBjYW5jZWxlZC4gQW55IG90aGVyIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgdXAKICogdG8gMTUgZXZlbnQgYXJndW1lbnRzLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGV2ZW50X25hbWUxIDxwPgogKiBBbiBldmVudCBuYW1lLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGV2ZW50X25hbWUyIFtvcHRpb25hbF0gPHA+CiAqIEF0IG1vc3QgMTUgZXZlbnRzIGFsbG93ZWQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAuLi4kXyBbb3B0aW9uYWxdCiAqIEByZXR1cm4gcmVzb3VyY2UgVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBldmVudCByZXNvdXJjZS4gVGhpcyByZXNvdXJjZSBjYW4gYmUgdXNlZCB0byBmcmVlCiAqIHRoZSBldmVudCBoYW5kbGVyIHVzaW5nIGliYXNlX2ZyZWVfZXZlbnRfaGFuZGxlci4KICovCmZ1bmN0aW9uIGliYXNlX3NldF9ldmVudF9oYW5kbGVyKCRldmVudF9oYW5kbGVyLCAkZXZlbnRfbmFtZTEsICRldmVudF9uYW1lMiA9IG51bGwsIC4uLiRfKSB7fQoKLyoqCiAqIENhbmNlbHMgYSByZWdpc3RlcmVkIGV2ZW50IGhhbmRsZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pYmFzZS1mcmVlLWV2ZW50LWhhbmRsZXIucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZXZlbnQgPHA+CiAqIEFuIGV2ZW50IHJlc291cmNlLCBjcmVhdGVkIGJ5CiAqIGliYXNlX3NldF9ldmVudF9oYW5kbGVyLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGliYXNlX2ZyZWVfZXZlbnRfaGFuZGxlcigkZXZlbnQpIHt9CgovKioKICogVGhpcyBpcyBhbiBhbGlhcyBvZiBpYmFzZV9jb25uZWN0CiAqIE9wZW4gYSBjb25uZWN0aW9uIHRvIGFuIEludGVyQmFzZSBkYXRhYmFzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLWNvbm5lY3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBkYXRhYmFzZSBhcmd1bWVudCBoYXMgdG8gYmUgYSB2YWxpZCBwYXRoIHRvCiAqIGRhdGFiYXNlIGZpbGUgb24gdGhlIHNlcnZlciBpdCByZXNpZGVzIG9uLiBJZiB0aGUgc2VydmVyIGlzIG5vdCBsb2NhbCwKICogaXQgbXVzdCBiZSBwcmVmaXhlZCB3aXRoIGVpdGhlciAnaG9zdG5hbWU6JyAoVENQL0lQKSwgJy8vaG9zdG5hbWUvJwogKiAoTmV0QkVVSSkgb3IgJ2hvc3RuYW1lQCcgKElQWC9TUFgpLCBkZXBlbmRpbmcgb24gdGhlIGNvbm5lY3Rpb24KICogcHJvdG9jb2wgdXNlZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgdXNlciBuYW1lLiBDYW4gYmUgc2V0IHdpdGggdGhlCiAqIGZiaXJkLmRlZmF1bHRfdXNlciAmcGhwLmluaTsgZGlyZWN0aXZlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBwYXNzd29yZCBmb3IgdXNlcm5hbWUuIENhbiBiZSBzZXQgd2l0aCB0aGUKICogZmJpcmQuZGVmYXVsdF9wYXNzd29yZCAmcGhwLmluaTsgZGlyZWN0aXZlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGNoYXJzZXQgW29wdGlvbmFsXSA8cD4KICogY2hhcnNldCBpcyB0aGUgZGVmYXVsdCBjaGFyYWN0ZXIgc2V0IGZvciBhCiAqIGRhdGFiYXNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGJ1ZmZlcnMgW29wdGlvbmFsXSA8cD4KICogYnVmZmVycyBpcyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIGJ1ZmZlcnMgdG8KICogYWxsb2NhdGUgZm9yIHRoZSBzZXJ2ZXItc2lkZSBjYWNoZS4gSWYgMCBvciBvbWl0dGVkLCBzZXJ2ZXIgY2hvb3NlcwogKiBpdHMgb3duIGRlZmF1bHQuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZGlhbGVjdCBbb3B0aW9uYWxdIDxwPgogKiBkaWFsZWN0IHNlbGVjdHMgdGhlIGRlZmF1bHQgU1FMIGRpYWxlY3QgZm9yIGFueQogKiBzdGF0ZW1lbnQgZXhlY3V0ZWQgd2l0aGluIGEgY29ubmVjdGlvbiwgYW5kIGl0IGRlZmF1bHRzIHRvIHRoZSBoaWdoZXN0CiAqIG9uZSBzdXBwb3J0ZWQgYnkgY2xpZW50IGxpYnJhcmllcy4gRnVuY3Rpb25hbCBvbmx5IHdpdGggSW50ZXJCYXNlIDYKICogYW5kIHVwLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHJvbGUgW29wdGlvbmFsXSA8cD4KICogRnVuY3Rpb25hbCBvbmx5IHdpdGggSW50ZXJCYXNlIDUgYW5kIHVwLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHN5bmMgW29wdGlvbmFsXSA8cD4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGFuIEludGVyQmFzZSBsaW5rIGlkZW50aWZpZXIgb24gc3VjY2Vzcywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYmlyZF9jb25uZWN0KCRkYXRhYmFzZSA9IG51bGwsICR1c2VybmFtZSA9IG51bGwsICRwYXNzd29yZCA9IG51bGwsICRjaGFyc2V0ID0gbnVsbCwgJGJ1ZmZlcnMgPSBudWxsLCAkZGlhbGVjdCA9IG51bGwsICRyb2xlID0gbnVsbCwgJHN5bmMgPSBudWxsKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfcGNvbm5lY3QKICogT3BlbiBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiB0byBhbiBJbnRlckJhc2UgZGF0YWJhc2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mYmlyZC1wY29ubmVjdC5waHAKICogQHBhcmFtIHN0cmluZyAkZGF0YWJhc2UgW29wdGlvbmFsXSA8cD4KICogVGhlIGRhdGFiYXNlIGFyZ3VtZW50IGhhcyB0byBiZSBhIHZhbGlkIHBhdGggdG8KICogZGF0YWJhc2UgZmlsZSBvbiB0aGUgc2VydmVyIGl0IHJlc2lkZXMgb24uIElmIHRoZSBzZXJ2ZXIgaXMgbm90IGxvY2FsLAogKiBpdCBtdXN0IGJlIHByZWZpeGVkIHdpdGggZWl0aGVyICdob3N0bmFtZTonIChUQ1AvSVApLCAnLy9ob3N0bmFtZS8nCiAqIChOZXRCRVVJKSBvciAnaG9zdG5hbWVAJyAoSVBYL1NQWCksIGRlcGVuZGluZyBvbiB0aGUgY29ubmVjdGlvbgogKiBwcm90b2NvbCB1c2VkLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIFtvcHRpb25hbF0gPHA+CiAqIFRoZSB1c2VyIG5hbWUuIENhbiBiZSBzZXQgd2l0aCB0aGUKICogZmJpcmQuZGVmYXVsdF91c2VyICZwaHAuaW5pOyBkaXJlY3RpdmUuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQgW29wdGlvbmFsXSA8cD4KICogVGhlIHBhc3N3b3JkIGZvciB1c2VybmFtZS4gQ2FuIGJlIHNldCB3aXRoIHRoZQogKiBmYmlyZC5kZWZhdWx0X3Bhc3N3b3JkICZwaHAuaW5pOyBkaXJlY3RpdmUuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY2hhcnNldCBbb3B0aW9uYWxdIDxwPgogKiBjaGFyc2V0IGlzIHRoZSBkZWZhdWx0IGNoYXJhY3RlciBzZXQgZm9yIGEKICogZGF0YWJhc2UuCiAqIDwvcD4KICogQHBhcmFtIGludCAkYnVmZmVycyBbb3B0aW9uYWxdIDxwPgogKiBidWZmZXJzIGlzIHRoZSBudW1iZXIgb2YgZGF0YWJhc2UgYnVmZmVycyB0bwogKiBhbGxvY2F0ZSBmb3IgdGhlIHNlcnZlci1zaWRlIGNhY2hlLiBJZiAwIG9yIG9taXR0ZWQsIHNlcnZlciBjaG9vc2VzCiAqIGl0cyBvd24gZGVmYXVsdC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRkaWFsZWN0IFtvcHRpb25hbF0gPHA+CiAqIGRpYWxlY3Qgc2VsZWN0cyB0aGUgZGVmYXVsdCBTUUwgZGlhbGVjdCBmb3IgYW55CiAqIHN0YXRlbWVudCBleGVjdXRlZCB3aXRoaW4gYSBjb25uZWN0aW9uLCBhbmQgaXQgZGVmYXVsdHMgdG8gdGhlIGhpZ2hlc3QKICogb25lIHN1cHBvcnRlZCBieSBjbGllbnQgbGlicmFyaWVzLiBGdW5jdGlvbmFsIG9ubHkgd2l0aCBJbnRlckJhc2UgNgogKiBhbmQgdXAuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcm9sZSBbb3B0aW9uYWxdIDxwPgogKiBGdW5jdGlvbmFsIG9ubHkgd2l0aCBJbnRlckJhc2UgNSBhbmQgdXAuCiAqIDwvcD4KICogQHBhcmFtIGludCAkc3luYyBbb3B0aW9uYWxdIDxwPgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgYW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZiaXJkX3Bjb25uZWN0KCRkYXRhYmFzZSA9IG51bGwsICR1c2VybmFtZSA9IG51bGwsICRwYXNzd29yZCA9IG51bGwsICRjaGFyc2V0ID0gbnVsbCwgJGJ1ZmZlcnMgPSBudWxsLCAkZGlhbGVjdCA9IG51bGwsICRyb2xlID0gbnVsbCwgJHN5bmMgPSBudWxsKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfY2xvc2UKICogQ2xvc2UgYSBjb25uZWN0aW9uIHRvIGFuIEludGVyQmFzZSBkYXRhYmFzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLWNsb3NlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25faWQgW29wdGlvbmFsXSA8cD4KICogQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllciByZXR1cm5lZCBmcm9tCiAqIGZiaXJkX2Nvbm5lY3QuIElmIG9taXR0ZWQsIHRoZSBsYXN0IG9wZW5lZCBsaW5rCiAqIGlzIGFzc3VtZWQuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZmJpcmRfY2xvc2UoJGNvbm5lY3Rpb25faWQgPSBudWxsKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfZHJvcF9kYgogKiBEcm9wcyBhIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtZHJvcC1kYi5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFtvcHRpb25hbF0gPHA+CiAqIEFuIEludGVyQmFzZSBsaW5rIGlkZW50aWZpZXIuIElmIG9taXR0ZWQsIHRoZSBsYXN0IG9wZW5lZCBsaW5rIGlzCiAqIGFzc3VtZWQuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZmJpcmRfZHJvcF9kYigkY29ubmVjdGlvbiA9IG51bGwpIHt9CgovKioKICogVGhpcyBpcyBhbiBhbGlhcyBvZiBpYmFzZV9xdWVyeQogKiBFeGVjdXRlIGEgcXVlcnkgb24gYW4gSW50ZXJCYXNlIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtcXVlcnkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0gPHA+CiAqIEFuIEludGVyQmFzZSBsaW5rIGlkZW50aWZpZXIuIElmIG9taXR0ZWQsIHRoZSBsYXN0IG9wZW5lZCBsaW5rIGlzCiAqIGFzc3VtZWQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcXVlcnkgPHA+CiAqIEFuIEludGVyQmFzZSBxdWVyeS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRiaW5kX2FyZ3MgW29wdGlvbmFsXSA8cD4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGJvb2wgSWYgdGhlIHF1ZXJ5IHJhaXNlcyBhbiBlcnJvciwgcmV0dXJucyBmYWxzZS4gSWYgaXQgaXMgc3VjY2Vzc2Z1bCBhbmQKICogdGhlcmUgaXMgYSAocG9zc2libHkgZW1wdHkpIHJlc3VsdCBzZXQgKHN1Y2ggYXMgd2l0aCBhIFNFTEVDVCBxdWVyeSksCiAqIHJldHVybnMgYSByZXN1bHQgaWRlbnRpZmllci4gSWYgdGhlIHF1ZXJ5IHdhcyBzdWNjZXNzZnVsIGFuZCB0aGVyZSB3ZXJlCiAqIG5vIHJlc3VsdHMsIHJldHVybnMgdHJ1ZS4KICogPC9wPgogKiA8cD4KICogSW4gUEhQIDUuMC4wIGFuZCB1cCwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIHJvd3MKICogYWZmZWN0ZWQgYnkgdGhlIHF1ZXJ5IGZvciBJTlNFUlQsIFVQREFURSBhbmQgREVMRVRFIHN0YXRlbWVudHMuIEluIG9yZGVyCiAqIHRvIHJldGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBpdCB3aWxsIHJldHVybiB0cnVlIGZvciB0aGVzZQogKiBzdGF0ZW1lbnRzIGlmIHRoZSBxdWVyeSBzdWNjZWVkZWQgd2l0aG91dCBhZmZlY3RpbmcgYW55IHJvd3MuCiAqLwpmdW5jdGlvbiBmYmlyZF9xdWVyeSgkbGlua19pZGVudGlmaWVyID0gbnVsbCwgJHF1ZXJ5LCAkYmluZF9hcmdzID0gbnVsbCkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX2ZldGNoX3JvdwogKiBGZXRjaCBhIHJvdyBmcm9tIGFuIEludGVyQmFzZSBkYXRhYmFzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLWZldGNoLXJvdy5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfaWRlbnRpZmllciA8cD4KICogQW4gSW50ZXJCYXNlIHJlc3VsdCBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZldGNoX2ZsYWcgW29wdGlvbmFsXSA8cD4KICogZmV0Y2hfZmxhZyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBjb25zdGFudHMKICogSUJBU0VfVEVYVCBhbmQgSUJBU0VfVU5JWFRJTUUKICogT1JlZCB0b2dldGhlci4gUGFzc2luZyBJQkFTRV9URVhUIHdpbGwgY2F1c2UgdGhpcwogKiBmdW5jdGlvbiB0byByZXR1cm4gQkxPQiBjb250ZW50cyBpbnN0ZWFkIG9mIEJMT0IgaWRzLiBQYXNzaW5nCiAqIElCQVNFX1VOSVhUSU1FIHdpbGwgY2F1c2UgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4KICogZGF0ZS90aW1lIHZhbHVlcyBhcyBVbml4IHRpbWVzdGFtcHMgaW5zdGVhZCBvZiBhcyBmb3JtYXR0ZWQgc3RyaW5ncy4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIGFuIGFycmF5IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGZldGNoZWQgcm93LCBvciBmYWxzZSBpZiB0aGVyZQogKiBhcmUgbm8gbW9yZSByb3dzLiBFYWNoIHJlc3VsdCBjb2x1bW4gaXMgc3RvcmVkIGluIGFuIGFycmF5IG9mZnNldCwKICogc3RhcnRpbmcgYXQgb2Zmc2V0IDAuCiAqLwpmdW5jdGlvbiBmYmlyZF9mZXRjaF9yb3coJHJlc3VsdF9pZGVudGlmaWVyLCAkZmV0Y2hfZmxhZyA9IG51bGwpIHt9CgovKioKICogVGhpcyBpcyBhbiBhbGlhcyBvZiBpYmFzZV9mZXRjaF9hc3NvYwogKiBGZXRjaCBhIHJlc3VsdCByb3cgZnJvbSBhIHF1ZXJ5IGFzIGFuIGFzc29jaWF0aXZlIGFycmF5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtZmV0Y2gtYXNzb2MucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBUaGUgcmVzdWx0IGhhbmRsZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmZXRjaF9mbGFnIFtvcHRpb25hbF0gPHA+CiAqIGZldGNoX2ZsYWcgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgY29uc3RhbnRzCiAqIElCQVNFX1RFWFQgYW5kIElCQVNFX1VOSVhUSU1FCiAqIE9SZWQgdG9nZXRoZXIuIFBhc3NpbmcgSUJBU0VfVEVYVCB3aWxsIGNhdXNlIHRoaXMKICogZnVuY3Rpb24gdG8gcmV0dXJuIEJMT0IgY29udGVudHMgaW5zdGVhZCBvZiBCTE9CIGlkcy4gUGFzc2luZwogKiBJQkFTRV9VTklYVElNRSB3aWxsIGNhdXNlIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuCiAqIGRhdGUvdGltZSB2YWx1ZXMgYXMgVW5peCB0aW1lc3RhbXBzIGluc3RlYWQgb2YgYXMgZm9ybWF0dGVkIHN0cmluZ3MuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBhbiBhc3NvY2lhdGl2ZSBhcnJheSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBmZXRjaGVkIHJvdy4KICogU3Vic2VxdWVudCBjYWxscyB3aWxsIHJldHVybiB0aGUgbmV4dCByb3cgaW4gdGhlIHJlc3VsdCBzZXQsIG9yIGZhbHNlIGlmCiAqIHRoZXJlIGFyZSBubyBtb3JlIHJvd3MuCiAqLwpmdW5jdGlvbiBmYmlyZF9mZXRjaF9hc3NvYygkcmVzdWx0LCAkZmV0Y2hfZmxhZyA9IG51bGwpIHt9CgovKioKICogVGhpcyBpcyBhbiBhbGlhcyBvZiBpYmFzZV9mZXRjaF9vYmplY3QKICogR2V0IGFuIG9iamVjdCBmcm9tIGEgSW50ZXJCYXNlIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtZmV0Y2gtb2JqZWN0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZCA8cD4KICogQW4gSW50ZXJCYXNlIHJlc3VsdCBpZGVudGlmaWVyIG9idGFpbmVkIGVpdGhlciBieQogKiBmYmlyZF9xdWVyeSBvciBmYmlyZF9leGVjdXRlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZldGNoX2ZsYWcgW29wdGlvbmFsXSA8cD4KICogZmV0Y2hfZmxhZyBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBjb25zdGFudHMKICogSUJBU0VfVEVYVCBhbmQgSUJBU0VfVU5JWFRJTUUKICogT1JlZCB0b2dldGhlci4gUGFzc2luZyBJQkFTRV9URVhUIHdpbGwgY2F1c2UgdGhpcwogKiBmdW5jdGlvbiB0byByZXR1cm4gQkxPQiBjb250ZW50cyBpbnN0ZWFkIG9mIEJMT0IgaWRzLiBQYXNzaW5nCiAqIElCQVNFX1VOSVhUSU1FIHdpbGwgY2F1c2UgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4KICogZGF0ZS90aW1lIHZhbHVlcyBhcyBVbml4IHRpbWVzdGFtcHMgaW5zdGVhZCBvZiBhcyBmb3JtYXR0ZWQgc3RyaW5ncy4KICogPC9wPgogKiBAcmV0dXJuIG9iamVjdHxmYWxzZSBhbiBvYmplY3Qgd2l0aCB0aGUgbmV4dCByb3cgaW5mb3JtYXRpb24sIG9yIGZhbHNlIGlmIHRoZXJlIGFyZQogKiBubyBtb3JlIHJvd3MuCiAqLwpmdW5jdGlvbiBmYmlyZF9mZXRjaF9vYmplY3QoJHJlc3VsdF9pZCwgJGZldGNoX2ZsYWcgPSBudWxsKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfZnJlZV9yZXN1bHQKICogRnJlZSBhIHJlc3VsdCBzZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mYmlyZC1mcmVlLXJlc3VsdC5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHRfaWRlbnRpZmllciA8cD4KICogQSByZXN1bHQgc2V0IGNyZWF0ZWQgYnkgZmJpcmRfcXVlcnkgb3IKICogZmJpcmRfZXhlY3V0ZS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBmYmlyZF9mcmVlX3Jlc3VsdCgkcmVzdWx0X2lkZW50aWZpZXIpIHt9CgovKioKICogVGhpcyBpcyBhbiBhbGlhcyBvZiBpYmFzZV9uYW1lX3Jlc3VsdAogKiBBc3NpZ25zIGEgbmFtZSB0byBhIHJlc3VsdCBzZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mYmlyZC1uYW1lLXJlc3VsdC5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+CiAqIEFuIEludGVyQmFzZSByZXN1bHQgc2V0LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAqIFRoZSBuYW1lIHRvIGJlIGFzc2lnbmVkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGZiaXJkX25hbWVfcmVzdWx0KCRyZXN1bHQsICRuYW1lKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfcHJlcGFyZQogKiBQcmVwYXJlIGEgcXVlcnkgZm9yIGxhdGVyIGJpbmRpbmcgb2YgcGFyYW1ldGVyIHBsYWNlaG9sZGVycyBhbmQgZXhlY3V0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtcHJlcGFyZS5waHAKICogQHBhcmFtIHN0cmluZyAkcXVlcnkgPHA+CiAqIEFuIEludGVyQmFzZSBxdWVyeS4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGEgcHJlcGFyZWQgcXVlcnkgaGFuZGxlLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZiaXJkX3ByZXBhcmUoJHF1ZXJ5KSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfZXhlY3V0ZQogKiBFeGVjdXRlIGEgcHJldmlvdXNseSBwcmVwYXJlZCBxdWVyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLWV4ZWN1dGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcXVlcnkgPHA+CiAqIEFuIEludGVyQmFzZSBxdWVyeSBwcmVwYXJlZCBieSBmYmlyZF9wcmVwYXJlLgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAuLi4kYmluZF9hcmcgW29wdGlvbmFsXQogKiBAcmV0dXJuIHJlc291cmNlfGJvb2wgPHA+SWYgdGhlIHF1ZXJ5IHJhaXNlcyBhbiBlcnJvciwgcmV0dXJucyBmYWxzZS4gSWYgaXQgaXMgc3VjY2Vzc2Z1bCBhbmQKICogdGhlcmUgaXMgYSAocG9zc2libHkgZW1wdHkpIHJlc3VsdCBzZXQgKHN1Y2ggYXMgd2l0aCBhIFNFTEVDVCBxdWVyeSksCiAqIHJldHVybnMgYSByZXN1bHQgaWRlbnRpZmllci4gSWYgdGhlIHF1ZXJ5IHdhcyBzdWNjZXNzZnVsIGFuZCB0aGVyZSB3ZXJlCiAqIG5vIHJlc3VsdHMsIHJldHVybnMgdHJ1ZS4KICogPC9wPgogKiA8cD4KICogSW4gUEhQIDUuMC4wIGFuZCB1cCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBieQogKiB0aGUgcXVlcnkgKGlmID4gMCBhbmQgYXBwbGljYWJsZSB0byB0aGUgc3RhdGVtZW50IHR5cGUpLiBBIHF1ZXJ5IHRoYXQKICogc3VjY2VlZGVkLCBidXQgZGlkIG5vdCBhZmZlY3QgYW55IHJvd3MgKGUuZy4gYW4gVVBEQVRFIG9mIGEgbm9uLWV4aXN0ZW50CiAqIHJlY29yZCkgd2lsbCByZXR1cm4gdHJ1ZS48L3A+CiAqLwpmdW5jdGlvbiBmYmlyZF9leGVjdXRlKCRxdWVyeSwgLi4uJGJpbmRfYXJnKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfZnJlZV9xdWVyeQogKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgYSBwcmVwYXJlZCBxdWVyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLWZyZWUtcXVlcnkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcXVlcnkgPHA+CiAqIEEgcXVlcnkgcHJlcGFyZWQgd2l0aCBmYmlyZF9wcmVwYXJlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGZiaXJkX2ZyZWVfcXVlcnkoJHF1ZXJ5KSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfZ2VuX2lkCiAqIEluY3JlbWVudHMgdGhlIG5hbWVkIGdlbmVyYXRvciBhbmQgcmV0dXJucyBpdHMgbmV3IHZhbHVlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtZ2VuLWlkLnBocAogKiBAcGFyYW0gc3RyaW5nICRnZW5lcmF0b3IKICogQHBhcmFtIGludCAkaW5jcmVtZW50IFtvcHRpb25hbF0KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmV0dXJuIG1peGVkIG5ldyBnZW5lcmF0b3IgdmFsdWUgYXMgaW50ZWdlciwgb3IgYXMgc3RyaW5nIGlmIHRoZSB2YWx1ZSBpcyB0b28gYmlnLgogKi8KZnVuY3Rpb24gZmJpcmRfZ2VuX2lkKCRnZW5lcmF0b3IsICRpbmNyZW1lbnQgPSBudWxsLCAkbGlua19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX251bV9maWVsZHMKICogR2V0IHRoZSBudW1iZXIgb2YgZmllbGRzIGluIGEgcmVzdWx0IHNldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLW51bS1maWVsZHMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0X2lkIDxwPgogKiBBbiBJbnRlckJhc2UgcmVzdWx0IGlkZW50aWZpZXIuCiAqIDwvcD4KICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBmaWVsZHMgYXMgYW4gaW50ZWdlci4KICovCmZ1bmN0aW9uIGZiaXJkX251bV9maWVsZHMoJHJlc3VsdF9pZCkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX251bV9wYXJhbXMKICogUmV0dXJuIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpbiBhIHByZXBhcmVkIHF1ZXJ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtbnVtLXBhcmFtcy5waHAKICogQHBhcmFtIHJlc291cmNlICRxdWVyeSA8cD4KICogVGhlIHByZXBhcmVkIHF1ZXJ5IGhhbmRsZS4KICogPC9wPgogKiBAcmV0dXJuIGludCB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYXMgYW4gaW50ZWdlci4KICovCmZ1bmN0aW9uIGZiaXJkX251bV9wYXJhbXMoJHF1ZXJ5KSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfYWZmZWN0ZWRfcm93cwogKiBSZXR1cm4gdGhlIG51bWJlciBvZiByb3dzIHRoYXQgd2VyZSBhZmZlY3RlZCBieSB0aGUgcHJldmlvdXMgcXVlcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mYmlyZC1hZmZlY3RlZC1yb3dzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBbb3B0aW9uYWxdIDxwPgogKiBBIHRyYW5zYWN0aW9uIGNvbnRleHQuIElmIGxpbmtfaWRlbnRpZmllciBpcyBhCiAqIGNvbm5lY3Rpb24gcmVzb3VyY2UsIGl0cyBkZWZhdWx0IHRyYW5zYWN0aW9uIGlzIHVzZWQuCiAqIDwvcD4KICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiByb3dzIGFzIGFuIGludGVnZXIuCiAqLwpmdW5jdGlvbiBmYmlyZF9hZmZlY3RlZF9yb3dzKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfZmllbGRfaW5mbwogKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWVsZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLWZpZWxkLWluZm8ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBBbiBJbnRlckJhc2UgcmVzdWx0IGlkZW50aWZpZXIuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmllbGRfbnVtYmVyIDxwPgogKiBGaWVsZCBvZmZzZXQuCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBhbiBhcnJheSB3aXRoIHRoZSBmb2xsb3dpbmcga2V5czogbmFtZSwKICogYWxpYXMsIHJlbGF0aW9uLAogKiBsZW5ndGggYW5kIHR5cGUuCiAqLwpmdW5jdGlvbiBmYmlyZF9maWVsZF9pbmZvKCRyZXN1bHQsICRmaWVsZF9udW1iZXIpIHt9CgovKioKICogVGhpcyBpcyBhbiBhbGlhcyBvZiBpYmFzZV9wYXJhbV9pbmZvCiAqIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcmFtZXRlciBpbiBhIHByZXBhcmVkIHF1ZXJ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtcGFyYW0taW5mby5waHAKICogQHBhcmFtIHJlc291cmNlICRxdWVyeSA8cD4KICogQW4gSW50ZXJCYXNlIHByZXBhcmVkIHF1ZXJ5IGhhbmRsZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRwYXJhbV9udW1iZXIgPHA+CiAqIFBhcmFtZXRlciBvZmZzZXQuCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBhbiBhcnJheSB3aXRoIHRoZSBmb2xsb3dpbmcga2V5czogbmFtZSwKICogYWxpYXMsIHJlbGF0aW9uLAogKiBsZW5ndGggYW5kIHR5cGUuCiAqLwpmdW5jdGlvbiBmYmlyZF9wYXJhbV9pbmZvKCRxdWVyeSwgJHBhcmFtX251bWJlcikge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX3RyYW5zCiAqIEJlZ2luIGEgdHJhbnNhY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mYmlyZC10cmFucy5waHAKICogQHBhcmFtIGludCAkdHJhbnNfYXJncyBbb3B0aW9uYWxdIDxwPgogKiB0cmFuc19hcmdzIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mCiAqIElCQVNFX1JFQUQsCiAqIElCQVNFX1dSSVRFLAogKiBJQkFTRV9DT01NSVRURUQsCiAqIElCQVNFX0NPTlNJU1RFTkNZLAogKiBJQkFTRV9DT05DVVJSRU5DWSwKICogSUJBU0VfUkVDX1ZFUlNJT04sCiAqIElCQVNFX1JFQ19OT19WRVJTSU9OLAogKiBJQkFTRV9XQUlUIGFuZAogKiBJQkFTRV9OT1dBSVQuCiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXSA8cD4KICogQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllci4gSWYgb21pdHRlZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsgaXMKICogYXNzdW1lZC4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGEgdHJhbnNhY3Rpb24gaGFuZGxlLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZiaXJkX3RyYW5zKCR0cmFuc19hcmdzID0gbnVsbCwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogVGhpcyBpcyBhbiBhbGlhcyBvZiBpYmFzZV9jb21taXQKICogQ29tbWl0IGEgdHJhbnNhY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mYmlyZC1jb21taXQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19vcl90cmFuc19pZGVudGlmaWVyIFtvcHRpb25hbF0gPHA+CiAqIElmIGNhbGxlZCB3aXRob3V0IGFuIGFyZ3VtZW50LCB0aGlzIGZ1bmN0aW9uIGNvbW1pdHMgdGhlIGRlZmF1bHQKICogdHJhbnNhY3Rpb24gb2YgdGhlIGRlZmF1bHQgbGluay4gSWYgdGhlIGFyZ3VtZW50IGlzIGEgY29ubmVjdGlvbgogKiBpZGVudGlmaWVyLCB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBjb25uZWN0aW9uCiAqIHdpbGwgYmUgY29tbWl0dGVkLiBJZiB0aGUgYXJndW1lbnQgaXMgYSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLCB0aGUKICogY29ycmVzcG9uZGluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbW1pdHRlZC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBmYmlyZF9jb21taXQoJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogVGhpcyBpcyBhbiBhbGlhcyBvZiBpYmFzZV9yb2xsYmFjawogKiBSb2xsIGJhY2sgYSB0cmFuc2FjdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLXJvbGxiYWNrLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllciBbb3B0aW9uYWxdIDxwPgogKiBJZiBjYWxsZWQgd2l0aG91dCBhbiBhcmd1bWVudCwgdGhpcyBmdW5jdGlvbiByb2xscyBiYWNrIHRoZSBkZWZhdWx0CiAqIHRyYW5zYWN0aW9uIG9mIHRoZSBkZWZhdWx0IGxpbmsuIElmIHRoZSBhcmd1bWVudCBpcyBhIGNvbm5lY3Rpb24KICogaWRlbnRpZmllciwgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29ubmVjdGlvbgogKiB3aWxsIGJlIHJvbGxlZCBiYWNrLiBJZiB0aGUgYXJndW1lbnQgaXMgYSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLCB0aGUKICogY29ycmVzcG9uZGluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIHJvbGxlZCBiYWNrLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGZiaXJkX3JvbGxiYWNrKCRsaW5rX29yX3RyYW5zX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfY29tbWl0X3JldAogKiBDb21taXQgYSB0cmFuc2FjdGlvbiB3aXRob3V0IGNsb3NpbmcgaXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mYmlyZC1jb21taXQtcmV0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfb3JfdHJhbnNfaWRlbnRpZmllciBbb3B0aW9uYWxdIDxwPgogKiBJZiBjYWxsZWQgd2l0aG91dCBhbiBhcmd1bWVudCwgdGhpcyBmdW5jdGlvbiBjb21taXRzIHRoZSBkZWZhdWx0CiAqIHRyYW5zYWN0aW9uIG9mIHRoZSBkZWZhdWx0IGxpbmsuIElmIHRoZSBhcmd1bWVudCBpcyBhIGNvbm5lY3Rpb24KICogaWRlbnRpZmllciwgdGhlIGRlZmF1bHQgdHJhbnNhY3Rpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29ubmVjdGlvbgogKiB3aWxsIGJlIGNvbW1pdHRlZC4gSWYgdGhlIGFyZ3VtZW50IGlzIGEgdHJhbnNhY3Rpb24gaWRlbnRpZmllciwgdGhlCiAqIGNvcnJlc3BvbmRpbmcgdHJhbnNhY3Rpb24gd2lsbCBiZSBjb21taXR0ZWQuIFRoZSB0cmFuc2FjdGlvbiBjb250ZXh0CiAqIHdpbGwgYmUgcmV0YWluZWQsIHNvIHN0YXRlbWVudHMgZXhlY3V0ZWQgZnJvbSB3aXRoaW4gdGhpcyB0cmFuc2FjdGlvbgogKiB3aWxsIG5vdCBiZSBpbnZhbGlkYXRlZC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBmYmlyZF9jb21taXRfcmV0KCRsaW5rX29yX3RyYW5zX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2Vfcm9sbGJhY2tfcmV0CiAqIFJvbGwgYmFjayBhIHRyYW5zYWN0aW9uIHdpdGhvdXQgY2xvc2luZyBpdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLXJvbGxiYWNrLXJldC5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX29yX3RyYW5zX2lkZW50aWZpZXIgW29wdGlvbmFsXSA8cD4KICogSWYgY2FsbGVkIHdpdGhvdXQgYW4gYXJndW1lbnQsIHRoaXMgZnVuY3Rpb24gcm9sbHMgYmFjayB0aGUgZGVmYXVsdAogKiB0cmFuc2FjdGlvbiBvZiB0aGUgZGVmYXVsdCBsaW5rLiBJZiB0aGUgYXJndW1lbnQgaXMgYSBjb25uZWN0aW9uCiAqIGlkZW50aWZpZXIsIHRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbm5lY3Rpb24KICogd2lsbCBiZSByb2xsZWQgYmFjay4gSWYgdGhlIGFyZ3VtZW50IGlzIGEgdHJhbnNhY3Rpb24gaWRlbnRpZmllciwgdGhlCiAqIGNvcnJlc3BvbmRpbmcgdHJhbnNhY3Rpb24gd2lsbCBiZSByb2xsZWQgYmFjay4gVGhlIHRyYW5zYWN0aW9uIGNvbnRleHQKICogd2lsbCBiZSByZXRhaW5lZCwgc28gc3RhdGVtZW50cyBleGVjdXRlZCBmcm9tIHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uCiAqIHdpbGwgbm90IGJlIGludmFsaWRhdGVkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGZiaXJkX3JvbGxiYWNrX3JldCgkbGlua19vcl90cmFuc19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX2Jsb2JfaW5mbwogKiBSZXR1cm4gYmxvYiBsZW5ndGggYW5kIG90aGVyIHVzZWZ1bCBpbmZvCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtYmxvYi1pbmZvLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciA8cD4KICogQW4gSW50ZXJCYXNlIGxpbmsgaWRlbnRpZmllci4gSWYgb21pdHRlZCwgdGhlIGxhc3Qgb3BlbmVkIGxpbmsgaXMKICogYXNzdW1lZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRibG9iX2lkIDxwPgogKiBBIEJMT0IgaWQuCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBhbiBhcnJheSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGEgQkxPQi4gVGhlIGluZm9ybWF0aW9uIHJldHVybmVkCiAqIGNvbnNpc3RzIG9mIHRoZSBsZW5ndGggb2YgdGhlIEJMT0IsIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgaXQgY29udGFpbnMsIHRoZSBzaXplCiAqIG9mIHRoZSBsYXJnZXN0IHNlZ21lbnQsIGFuZCB3aGV0aGVyIGl0IGlzIGEgc3RyZWFtIEJMT0Igb3IgYSBzZWdtZW50ZWQgQkxPQi4KICovCmZ1bmN0aW9uIGZiaXJkX2Jsb2JfaW5mbygkbGlua19pZGVudGlmaWVyLCAkYmxvYl9pZCkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX2Jsb2JfY3JlYXRlCiAqIENyZWF0ZSBhIG5ldyBibG9iIGZvciBhZGRpbmcgZGF0YQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLWJsb2ItY3JlYXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBbb3B0aW9uYWxdIDxwPgogKiBBbiBJbnRlckJhc2UgbGluayBpZGVudGlmaWVyLiBJZiBvbWl0dGVkLCB0aGUgbGFzdCBvcGVuZWQgbGluayBpcwogKiBhc3N1bWVkLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgYSBCTE9CIGhhbmRsZSBmb3IgbGF0ZXIgdXNlIHdpdGgKICogZmJpcmRfYmxvYl9hZGQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGZiaXJkX2Jsb2JfY3JlYXRlKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfYmxvYl9hZGQKICogQWRkIGRhdGEgaW50byBhIG5ld2x5IGNyZWF0ZWQgYmxvYgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLWJsb2ItYWRkLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGJsb2JfaGFuZGxlIDxwPgogKiBBIGJsb2IgaGFuZGxlIG9wZW5lZCB3aXRoIGZiaXJkX2Jsb2JfY3JlYXRlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgPHA+CiAqIFRoZSBkYXRhIHRvIGJlIGFkZGVkLgogKiA8L3A+CiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gZmJpcmRfYmxvYl9hZGQoJGJsb2JfaGFuZGxlLCAkZGF0YSkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX2Jsb2JfY2FuY2VsCiAqIENhbmNlbCBjcmVhdGluZyBibG9iCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtYmxvYi1jYW5jZWwucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkYmxvYl9oYW5kbGUgPHA+CiAqIEEgQkxPQiBoYW5kbGUgb3BlbmVkIHdpdGggZmJpcmRfYmxvYl9jcmVhdGUuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZmJpcmRfYmxvYl9jYW5jZWwoJGJsb2JfaGFuZGxlKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfYmxvYl9jbG9zZQogKiBDbG9zZSBibG9iCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtYmxvYi1jbG9zZS5waHAKICogQHBhcmFtIHJlc291cmNlICRibG9iX2hhbmRsZSA8cD4KICogQSBCTE9CIGhhbmRsZSBvcGVuZWQgd2l0aCBmYmlyZF9ibG9iX2NyZWF0ZSBvcgogKiBmYmlyZF9ibG9iX29wZW4uCiAqIDwvcD4KICogQHJldHVybiBtaXhlZCBJZiB0aGUgQkxPQiB3YXMgYmVpbmcgcmVhZCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb24gc3VjY2VzcywgaWYKICogdGhlIEJMT0Igd2FzIGJlaW5nIHdyaXR0ZW4gdG8sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nCiAqIHRoZSBCTE9CIGlkIHRoYXQgaGFzIGJlZW4gYXNzaWduZWQgdG8gaXQgYnkgdGhlIGRhdGFiYXNlLiBPbiBmYWlsdXJlLCB0aGlzCiAqIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UuCiAqLwpmdW5jdGlvbiBmYmlyZF9ibG9iX2Nsb3NlKCRibG9iX2hhbmRsZSkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX2Jsb2Jfb3BlbgogKiBPcGVuIGJsb2IgZm9yIHJldHJpZXZpbmcgZGF0YSBwYXJ0cwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLWJsb2Itb3Blbi5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgPHA+CiAqIEFuIEludGVyQmFzZSBsaW5rIGlkZW50aWZpZXIuIElmIG9taXR0ZWQsIHRoZSBsYXN0IG9wZW5lZCBsaW5rIGlzCiAqIGFzc3VtZWQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkYmxvYl9pZCA8cD4KICogQSBCTE9CIGlkLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgYSBCTE9CIGhhbmRsZSBmb3IgbGF0ZXIgdXNlIHdpdGgKICogZmJpcmRfYmxvYl9nZXQgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGZiaXJkX2Jsb2Jfb3BlbigkbGlua19pZGVudGlmaWVyLCAkYmxvYl9pZCkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX2Jsb2JfZ2V0CiAqIEdldCBsZW4gYnl0ZXMgZGF0YSBmcm9tIG9wZW4gYmxvYgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLWJsb2ItZ2V0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGJsb2JfaGFuZGxlIDxwPgogKiBBIEJMT0IgaGFuZGxlIG9wZW5lZCB3aXRoIGZiaXJkX2Jsb2Jfb3Blbi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRsZW4gPHA+CiAqIFNpemUgb2YgcmV0dXJuZWQgZGF0YS4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBhdCBtb3N0IGxlbiBieXRlcyBmcm9tIHRoZSBCTE9CLCBvciBmYWxzZQogKiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZmJpcmRfYmxvYl9nZXQoJGJsb2JfaGFuZGxlLCAkbGVuKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfYmxvYl9lY2hvCiAqIE91dHB1dCBibG9iIGNvbnRlbnRzIHRvIGJyb3dzZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mYmlyZC1ibG9iLWVjaG8ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGJsb2JfaWQgPHA+CiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZmJpcmRfYmxvYl9lY2hvKCRibG9iX2lkKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2VfYmxvYl9pbXBvcnQKICogQ3JlYXRlIGJsb2IsIGNvcHkgZmlsZSBpbiBpdCwgYW5kIGNsb3NlIGl0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtYmxvYi1pbXBvcnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIDxwPgogKiBBbiBJbnRlckJhc2UgbGluayBpZGVudGlmaWVyLiBJZiBvbWl0dGVkLCB0aGUgbGFzdCBvcGVuZWQgbGluayBpcwogKiBhc3N1bWVkLgogKiA8L3A+CiAqIEBwYXJhbSByZXNvdXJjZSAkZmlsZV9oYW5kbGUgPHA+CiAqIFRoZSBmaWxlIGhhbmRsZSBpcyBhIGhhbmRsZSByZXR1cm5lZCBieSBmb3Blbi4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgQkxPQiBpZCBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZiaXJkX2Jsb2JfaW1wb3J0KCRsaW5rX2lkZW50aWZpZXIsICRmaWxlX2hhbmRsZSkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX2Vycm1zZwogKiBSZXR1cm4gZXJyb3IgbWVzc2FnZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mYmlyZC1lcnJtc2cucGhwCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBlcnJvciBtZXNzYWdlIGFzIGEgc3RyaW5nLCBvciBmYWxzZSBpZiBubyBlcnJvciBvY2N1cnJlZC4KICovCmZ1bmN0aW9uIGZiaXJkX2Vycm1zZygpIHt9CgovKioKICogVGhpcyBpcyBhbiBhbGlhcyBvZiBpYmFzZV9lcnJjb2RlCiAqIFJldHVybiBhbiBlcnJvciBjb2RlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtZXJyY29kZS5waHAKICogQHJldHVybiBpbnR8ZmFsc2UgdGhlIGVycm9yIGNvZGUgYXMgYW4gaW50ZWdlciwgb3IgZmFsc2UgaWYgbm8gZXJyb3Igb2NjdXJyZWQuCiAqLwpmdW5jdGlvbiBmYmlyZF9lcnJjb2RlKCkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX2FkZF91c2VyCiAqIEFkZCBhIHVzZXIgdG8gYSBzZWN1cml0eSBkYXRhYmFzZSAob25seSBmb3IgSUI2IG9yIGxhdGVyKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLWFkZC11c2VyLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNlcnZpY2VfaGFuZGxlCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJfbmFtZQogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZAogKiBAcGFyYW0gc3RyaW5nICRmaXJzdF9uYW1lIFtvcHRpb25hbF0KICogQHBhcmFtIHN0cmluZyAkbWlkZGxlX25hbWUgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nICRsYXN0X25hbWUgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBmYmlyZF9hZGRfdXNlcigkc2VydmljZV9oYW5kbGUsICR1c2VyX25hbWUsICRwYXNzd29yZCwgJGZpcnN0X25hbWUgPSBudWxsLCAkbWlkZGxlX25hbWUgPSBudWxsLCAkbGFzdF9uYW1lID0gbnVsbCkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX21vZGlmeV91c2VyCiAqIE1vZGlmeSBhIHVzZXIgdG8gYSBzZWN1cml0eSBkYXRhYmFzZSAob25seSBmb3IgSUI2IG9yIGxhdGVyKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLW1vZGlmeS11c2VyLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNlcnZpY2VfaGFuZGxlCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJfbmFtZQogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZAogKiBAcGFyYW0gc3RyaW5nICRmaXJzdF9uYW1lIFtvcHRpb25hbF0KICogQHBhcmFtIHN0cmluZyAkbWlkZGxlX25hbWUgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nICRsYXN0X25hbWUgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBmYmlyZF9tb2RpZnlfdXNlcigkc2VydmljZV9oYW5kbGUsICR1c2VyX25hbWUsICRwYXNzd29yZCwgJGZpcnN0X25hbWUgPSBudWxsLCAkbWlkZGxlX25hbWUgPSBudWxsLCAkbGFzdF9uYW1lID0gbnVsbCkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX2RlbGV0ZV91c2VyCiAqIERlbGV0ZSBhIHVzZXIgZnJvbSBhIHNlY3VyaXR5IGRhdGFiYXNlIChvbmx5IGZvciBJQjYgb3IgbGF0ZXIpCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtZGVsZXRlLXVzZXIucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2VydmljZV9oYW5kbGUKICogQHBhcmFtIHN0cmluZyAkdXNlcl9uYW1lCiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGZiaXJkX2RlbGV0ZV91c2VyKCRzZXJ2aWNlX2hhbmRsZSwgJHVzZXJfbmFtZSkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX3NlcnZpY2VfYXR0YWNoCiAqIENvbm5lY3QgdG8gdGhlIHNlcnZpY2UgbWFuYWdlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLXNlcnZpY2UtYXR0YWNoLnBocAogKiBAcGFyYW0gc3RyaW5nICRob3N0CiAqIEBwYXJhbSBzdHJpbmcgJGRiYV91c2VybmFtZQogKiBAcGFyYW0gc3RyaW5nICRkYmFfcGFzc3dvcmQKICogQHJldHVybiByZXNvdXJjZXxmYWxzZQogKi8KZnVuY3Rpb24gZmJpcmRfc2VydmljZV9hdHRhY2goJGhvc3QsICRkYmFfdXNlcm5hbWUsICRkYmFfcGFzc3dvcmQpIHt9CgovKioKICogVGhpcyBpcyBhbiBhbGlhcyBvZiBpYmFzZV9zZXJ2aWNlX2RldGFjaAogKiBEaXNjb25uZWN0IGZyb20gdGhlIHNlcnZpY2UgbWFuYWdlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLXNlcnZpY2UtZGV0YWNoLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNlcnZpY2VfaGFuZGxlCiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGZiaXJkX3NlcnZpY2VfZGV0YWNoKCRzZXJ2aWNlX2hhbmRsZSkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX2JhY2t1cAogKiBJbml0aWF0ZXMgYSBiYWNrdXAgdGFzayBpbiB0aGUgc2VydmljZSBtYW5hZ2VyIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtYmFja3VwLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNlcnZpY2VfaGFuZGxlCiAqIEBwYXJhbSBzdHJpbmcgJHNvdXJjZV9kYgogKiBAcGFyYW0gc3RyaW5nICRkZXN0X2ZpbGUKICogQHBhcmFtIGludCAkb3B0aW9ucyBbb3B0aW9uYWxdCiAqIEBwYXJhbSBib29sICR2ZXJib3NlIFtvcHRpb25hbF0KICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24gZmJpcmRfYmFja3VwKCRzZXJ2aWNlX2hhbmRsZSwgJHNvdXJjZV9kYiwgJGRlc3RfZmlsZSwgJG9wdGlvbnMgPSBudWxsLCAkdmVyYm9zZSA9IG51bGwpIHt9CgovKioKICogVGhpcyBpcyBhbiBhbGlhcyBvZiBpYmFzZV9yZXN0b3JlCiAqIEluaXRpYXRlcyBhIHJlc3RvcmUgdGFzayBpbiB0aGUgc2VydmljZSBtYW5hZ2VyIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtcmVzdG9yZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzZXJ2aWNlX2hhbmRsZQogKiBAcGFyYW0gc3RyaW5nICRzb3VyY2VfZmlsZQogKiBAcGFyYW0gc3RyaW5nICRkZXN0X2RiCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgW29wdGlvbmFsXQogKiBAcGFyYW0gYm9vbCAkdmVyYm9zZSBbb3B0aW9uYWxdCiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIGZiaXJkX3Jlc3RvcmUoJHNlcnZpY2VfaGFuZGxlLCAkc291cmNlX2ZpbGUsICRkZXN0X2RiLCAkb3B0aW9ucyA9IG51bGwsICR2ZXJib3NlID0gbnVsbCkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX21haW50YWluX2RiCiAqIEV4ZWN1dGUgYSBtYWludGVuYW5jZSBjb21tYW5kIG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mYmlyZC1tYWludGFpbi1kYi5waHAKICogQHBhcmFtIHJlc291cmNlICRzZXJ2aWNlX2hhbmRsZQogKiBAcGFyYW0gc3RyaW5nICRkYgogKiBAcGFyYW0gaW50ICRhY3Rpb24KICogQHBhcmFtIGludCAkYXJndW1lbnQgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBmYmlyZF9tYWludGFpbl9kYigkc2VydmljZV9oYW5kbGUsICRkYiwgJGFjdGlvbiwgJGFyZ3VtZW50ID0gbnVsbCkge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX2RiX2luZm8KICogUmVxdWVzdCBzdGF0aXN0aWNzIGFib3V0IGEgZGF0YWJhc2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mYmlyZC1kYi1pbmZvLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNlcnZpY2VfaGFuZGxlCiAqIEBwYXJhbSBzdHJpbmcgJGRiCiAqIEBwYXJhbSBpbnQgJGFjdGlvbgogKiBAcGFyYW0gaW50ICRhcmd1bWVudCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBmYmlyZF9kYl9pbmZvKCRzZXJ2aWNlX2hhbmRsZSwgJGRiLCAkYWN0aW9uLCAkYXJndW1lbnQgPSBudWxsKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2Vfc2VydmVyX2luZm8KICogUmVxdWVzdCBpbmZvcm1hdGlvbiBhYm91dCBhIGRhdGFiYXNlIHNlcnZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZiaXJkLXNlcnZlci1pbmZvLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNlcnZpY2VfaGFuZGxlCiAqIEBwYXJhbSBpbnQgJGFjdGlvbgogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gZmJpcmRfc2VydmVyX2luZm8oJHNlcnZpY2VfaGFuZGxlLCAkYWN0aW9uKSB7fQoKLyoqCiAqIFRoaXMgaXMgYW4gYWxpYXMgb2YgaWJhc2Vfd2FpdF9ldmVudAogKiBXYWl0IGZvciBhbiBldmVudCB0byBiZSBwb3N0ZWQgYnkgdGhlIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtd2FpdC1ldmVudC5waHAKICogQHBhcmFtIHN0cmluZyAkZXZlbnRfbmFtZTEgPHA+CiAqIFRoZSBldmVudCBuYW1lLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGV2ZW50X25hbWUyIFtvcHRpb25hbF0gPHA+CiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAuLi4kXyBbb3B0aW9uYWxdCiAqIEByZXR1cm4gc3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBldmVudCB0aGF0IHdhcyBwb3N0ZWQuCiAqLwpmdW5jdGlvbiBmYmlyZF93YWl0X2V2ZW50KCRldmVudF9uYW1lMSwgJGV2ZW50X25hbWUyID0gbnVsbCwgLi4uJF8pIHt9CgovKioKICogVGhpcyBpcyBhbiBhbGlhcyBvZiBpYmFzZV9zZXRfZXZlbnRfaGFuZGxlcgogKiBSZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGV2ZW50cyBhcmUgcG9zdGVkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtc2V0LWV2ZW50LWhhbmRsZXIucGhwCiAqIEBwYXJhbSBjYWxsYWJsZSAkZXZlbnRfaGFuZGxlciA8cD4KICogVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHRoZSBldmVudCBuYW1lIGFuZCB0aGUgbGluayByZXNvdXJjZSBhcwogKiBhcmd1bWVudHMgd2hlbmV2ZXIgb25lIG9mIHRoZSBzcGVjaWZpZWQgZXZlbnRzIGlzIHBvc3RlZCBieSB0aGUKICogZGF0YWJhc2UuCiAqIDwvcD4KICogPHA+CiAqIFRoZSBjYWxsYmFjayBtdXN0IHJldHVybiBmYWxzZSBpZiB0aGUgZXZlbnQgaGFuZGxlciBzaG91bGQgYmUKICogY2FuY2VsZWQuIEFueSBvdGhlciByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4gVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHVwCiAqIHRvIDE1IGV2ZW50IGFyZ3VtZW50cy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRldmVudF9uYW1lMSA8cD4KICogQW4gZXZlbnQgbmFtZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRldmVudF9uYW1lMiBbb3B0aW9uYWxdIDxwPgogKiBBdCBtb3N0IDE1IGV2ZW50cyBhbGxvd2VkLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgLi4uJF8gW29wdGlvbmFsXQogKiBAcmV0dXJuIHJlc291cmNlIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gZXZlbnQgcmVzb3VyY2UuIFRoaXMgcmVzb3VyY2UgY2FuIGJlIHVzZWQgdG8gZnJlZQogKiB0aGUgZXZlbnQgaGFuZGxlciB1c2luZyBmYmlyZF9mcmVlX2V2ZW50X2hhbmRsZXIuCiAqLwpmdW5jdGlvbiBmYmlyZF9zZXRfZXZlbnRfaGFuZGxlcigkZXZlbnRfaGFuZGxlciwgJGV2ZW50X25hbWUxLCAkZXZlbnRfbmFtZTIgPSBudWxsLCAuLi4kXykge30KCi8qKgogKiBUaGlzIGlzIGFuIGFsaWFzIG9mIGliYXNlX2ZyZWVfZXZlbnRfaGFuZGxlcgogKiBDYW5jZWxzIGEgcmVnaXN0ZXJlZCBldmVudCBoYW5kbGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmJpcmQtZnJlZS1ldmVudC1oYW5kbGVyLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGV2ZW50IDxwPgogKiBBbiBldmVudCByZXNvdXJjZSwgY3JlYXRlZCBieQogKiBmYmlyZF9zZXRfZXZlbnRfaGFuZGxlci4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBmYmlyZF9mcmVlX2V2ZW50X2hhbmRsZXIoJGV2ZW50KSB7fQoKLyoqCiAqIFRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIHNldHRpbmdzIGFyZSB0byBiZSB1c2VkLgogKiBUaGlzIGRlZmF1bHQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY2xpZW50IGxpYnJhcnksIHdoaWNoIGRlZmluZXMgaXQgYXMgSUJBU0VfV1JJVEV8SUJBU0VfQ09OQ1VSUkVOQ1l8SUJBU0VfV0FJVCBpbiBtb3N0IGNhc2VzLgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9pYmFzZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lCQVNFX0RFRkFVTFQnLCAwKTsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2liYXNlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUJBU0VfQ1JFQVRFJywgMCk7Ci8qKgogKiBDYXVzZXMgQkxPQiBjb250ZW50cyB0byBiZSBmZXRjaGVkIGlubGluZSwgaW5zdGVhZCBvZiBiZWluZyBmZXRjaGVkIGFzIEJMT0IgaWRlbnRpZmllcnMuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2liYXNlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUJBU0VfVEVYVCcsIDEpOwovKioKICogQWxzbyBhdmFpbGFibGUgYXMgSUJBU0VfVEVYVCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KICogQ2F1c2VzIEJMT0IgY29udGVudHMgdG8gYmUgZmV0Y2hlZCBpbmxpbmUsIGluc3RlYWQgb2YgYmVpbmcgZmV0Y2hlZCBhcyBCTE9CIGlkZW50aWZpZXJzLgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9pYmFzZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lCQVNFX0ZFVENIX0JMT0JTJywgMSk7Ci8qKgogKiBDYXVzZXMgYXJyYXlzIHRvIGJlIGZldGNoZWQgaW5saW5lLiBPdGhlcndpc2UsIGFycmF5IGlkZW50aWZpZXJzIGFyZSByZXR1cm5lZC4KICogQXJyYXkgaWRlbnRpZmllcnMgY2FuIG9ubHkgYmUgdXNlZCBhcyBhcmd1bWVudHMgdG8gSU5TRVJUIG9wZXJhdGlvbnMsIGFzIG5vIGZ1bmN0aW9ucyB0byBoYW5kbGUgYXJyYXkgaWRlbnRpZmllcnMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2liYXNlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUJBU0VfRkVUQ0hfQVJSQVlTJywgMik7Ci8qKgogKiBDYXVzZXMgZGF0ZSBhbmQgdGltZSBmaWVsZHMgbm90IHRvIGJlIHJldHVybmVkIGFzIHN0cmluZ3MsIGJ1dCBhcyBVTklYIHRpbWVzdGFtcHMgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2gsIHdoaWNoIGlzIDEtSmFuLTE5NzAgMDowMCBVVEMpLgogKiBNaWdodCBiZSBwcm9ibGVtYXRpYyBpZiB1c2VkIHdpdGggZGF0ZXMgYmVmb3JlIDE5NzAgb24gc29tZSBzeXN0ZW1zLgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9pYmFzZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lCQVNFX1VOSVhUSU1FJywgNCk7Ci8qKgogKiBTdGFydHMgYSByZWFkLXdyaXRlIHRyYW5zYWN0aW9uLgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9pYmFzZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lCQVNFX1dSSVRFJywgMSk7Ci8qKgogKiBTdGFydHMgYSByZWFkLW9ubHkgdHJhbnNhY3Rpb24uCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2liYXNlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUJBU0VfUkVBRCcsIDIpOwovKioKICogU3RhcnRzIGEgdHJhbnNhY3Rpb24gd2l0aCB0aGUgaXNvbGF0aW9uIGxldmVsIHNldCB0byAncmVhZCBjb21taXR0ZWQnLgogKiBUaGlzIGZsYWcgc2hvdWxkIGJlIGNvbWJpbmVkIHdpdGggZWl0aGVyIDxiPklCQVNFX1JFQ19WRVJTSU9OPC9iPiBvciA8Yj5JQkFTRV9SRUNfTk9fVkVSU0lPTjwvYj4uCiAqIFRoaXMgaXNvbGF0aW9uIGxldmVsIGFsbG93cyBhY2Nlc3MgdG8gY2hhbmdlcyB0aGF0IHdlcmUgY29tbWl0dGVkIGFmdGVyIHRoZSB0cmFuc2FjdGlvbiB3YXMgc3RhcnRlZC4KICogSWYgPGI+SUJBU0VfUkVDX05PX1ZFUlNJT048L2I+IHdhcyBzcGVjaWZpZWQsIG9ubHkgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGEgcm93IGNhbiBiZSByZWFkLgogKiBJZiA8Yj5JQkFTRV9SRUNfVkVSU0lPTjwvYj4gd2FzIHNwZWNpZmllZCwgYSByb3cgY2FuIGV2ZW4gYmUgcmVhZCB3aGVuIGEgbW9kaWZpY2F0aW9uIHRvIGl0IGlzIHBlbmRpbmcgaW4gYSBjb25jdXJyZW50IHRyYW5zYWN0aW9uLgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9pYmFzZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lCQVNFX0NPTU1JVFRFRCcsIDgpOwovKioKICogU3RhcnRzIGEgdHJhbnNhY3Rpb24gd2l0aCB0aGUgaXNvbGF0aW9uIGxldmVsIHNldCB0byAnY29uc2lzdGVuY3knLAogKiB3aGljaCBtZWFucyB0aGUgdHJhbnNhY3Rpb24gY2Fubm90IHJlYWQgZnJvbSB0YWJsZXMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgYnkgb3RoZXIgY29uY3VycmVudCB0cmFuc2FjdGlvbnMuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2liYXNlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUJBU0VfQ09OU0lTVEVOQ1knLCAxNik7Ci8qKgogKiBTdGFydHMgYSB0cmFuc2FjdGlvbiB3aXRoIHRoZSBpc29sYXRpb24gbGV2ZWwgc2V0IHRvICdjb25jdXJyZW5jeScgKG9yICdzbmFwc2hvdCcpLAogKiB3aGljaCBtZWFucyB0aGUgdHJhbnNhY3Rpb24gaGFzIGFjY2VzcyB0byBhbGwgdGFibGVzLAogKiBidXQgY2Fubm90IHNlZSBjaGFuZ2VzIHRoYXQgd2VyZSBjb21taXR0ZWQgYnkgb3RoZXIgdHJhbnNhY3Rpb25zIGFmdGVyIHRoZSB0cmFuc2FjdGlvbiB3YXMgc3RhcnRlZC4KICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vaWJhc2UuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJQkFTRV9DT05DVVJSRU5DWScsIDQpOwovKioKICogUm93IGNhbiBldmVuIGJlIHJlYWQgd2hlbiBhIG1vZGlmaWNhdGlvbiB0byBpdCBpcyBwZW5kaW5nIGluIGEgY29uY3VycmVudCB0cmFuc2FjdGlvbi4KICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vaWJhc2UuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJQkFTRV9SRUNfVkVSU0lPTicsIDY0KTsKLyoqCiAqIE9ubHkgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGEgcm93IGNhbiBiZSByZWFkCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2liYXNlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUJBU0VfUkVDX05PX1ZFUlNJT04nLCAzMik7Ci8qKgogKiBJbmRpY2F0ZWQgdGhhdCBhIHRyYW5zYWN0aW9uIHNob3VsZCBmYWlsIGltbWVkaWF0ZWx5IHdoZW4gYSBjb25mbGljdCBvY2N1cnMuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2liYXNlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUJBU0VfTk9XQUlUJywgMjU2KTsKLyoqCiAqIEluZGljYXRlZCB0aGF0IGEgdHJhbnNhY3Rpb24gc2hvdWxkIHdhaXQgYW5kIHJldHJ5IHdoZW4gYSBjb25mbGljdCBvY2N1cnMuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2liYXNlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUJBU0VfV0FJVCcsIDEyOCk7CmRlZmluZSgnSUJBU0VfQktQX0lHTk9SRV9DSEVDS1NVTVMnLCAxKTsKZGVmaW5lKCdJQkFTRV9CS1BfSUdOT1JFX0xJTUJPJywgMik7CmRlZmluZSgnSUJBU0VfQktQX01FVEFEQVRBX09OTFknLCA0KTsKZGVmaW5lKCdJQkFTRV9CS1BfTk9fR0FSQkFHRV9DT0xMRUNUJywgOCk7CmRlZmluZSgnSUJBU0VfQktQX09MRF9ERVNDUklQVElPTlMnLCAxNik7CmRlZmluZSgnSUJBU0VfQktQX05PTl9UUkFOU1BPUlRBQkxFJywgMzIpOwoKLyoqCiAqIE9wdGlvbnMgdG8gaWJhc2VfYmFja3VwCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaWJhc2UuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJQkFTRV9CS1BfQ09OVkVSVCcsIDY0KTsKZGVmaW5lKCdJQkFTRV9SRVNfREVBQ1RJVkFURV9JRFgnLCAyNTYpOwpkZWZpbmUoJ0lCQVNFX1JFU19OT19TSEFET1cnLCA1MTIpOwpkZWZpbmUoJ0lCQVNFX1JFU19OT19WQUxJRElUWScsIDEwMjQpOwpkZWZpbmUoJ0lCQVNFX1JFU19PTkVfQVRfQV9USU1FJywgMjA0OCk7CmRlZmluZSgnSUJBU0VfUkVTX1JFUExBQ0UnLCA0MDk2KTsKZGVmaW5lKCdJQkFTRV9SRVNfQ1JFQVRFJywgODE5Mik7CgovKioKICogT3B0aW9ucyB0byBpYmFzZV9yZXN0b3JlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaWJhc2UuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJQkFTRV9SRVNfVVNFX0FMTF9TUEFDRScsIDE2Mzg0KTsKZGVmaW5lKCdJQkFTRV9QUlBfUEFHRV9CVUZGRVJTJywgNSk7CmRlZmluZSgnSUJBU0VfUFJQX1NXRUVQX0lOVEVSVkFMJywgNik7CmRlZmluZSgnSUJBU0VfUFJQX1NIVVRET1dOX0RCJywgNyk7CmRlZmluZSgnSUJBU0VfUFJQX0RFTllfTkVXX1RSQU5TQUNUSU9OUycsIDEwKTsKZGVmaW5lKCdJQkFTRV9QUlBfREVOWV9ORVdfQVRUQUNITUVOVFMnLCA5KTsKZGVmaW5lKCdJQkFTRV9QUlBfUkVTRVJWRV9TUEFDRScsIDExKTsKZGVmaW5lKCdJQkFTRV9QUlBfUkVTX1VTRV9GVUxMJywgMzUpOwpkZWZpbmUoJ0lCQVNFX1BSUF9SRVMnLCAzNik7CmRlZmluZSgnSUJBU0VfUFJQX1dSSVRFX01PREUnLCAxMik7CmRlZmluZSgnSUJBU0VfUFJQX1dNX0FTWU5DJywgMzcpOwpkZWZpbmUoJ0lCQVNFX1BSUF9XTV9TWU5DJywgMzgpOwpkZWZpbmUoJ0lCQVNFX1BSUF9BQ0NFU1NfTU9ERScsIDEzKTsKZGVmaW5lKCdJQkFTRV9QUlBfQU1fUkVBRE9OTFknLCAzOSk7CmRlZmluZSgnSUJBU0VfUFJQX0FNX1JFQURXUklURScsIDQwKTsKZGVmaW5lKCdJQkFTRV9QUlBfU0VUX1NRTF9ESUFMRUNUJywgMTQpOwpkZWZpbmUoJ0lCQVNFX1BSUF9BQ1RJVkFURScsIDI1Nik7CmRlZmluZSgnSUJBU0VfUFJQX0RCX09OTElORScsIDUxMik7CmRlZmluZSgnSUJBU0VfUlBSX0NIRUNLX0RCJywgMTYpOwpkZWZpbmUoJ0lCQVNFX1JQUl9JR05PUkVfQ0hFQ0tTVU0nLCAzMik7CmRlZmluZSgnSUJBU0VfUlBSX0tJTExfU0hBRE9XUycsIDY0KTsKZGVmaW5lKCdJQkFTRV9SUFJfTUVORF9EQicsIDQpOwpkZWZpbmUoJ0lCQVNFX1JQUl9WQUxJREFURV9EQicsIDEpOwpkZWZpbmUoJ0lCQVNFX1JQUl9GVUxMJywgMTI4KTsKCi8qKgogKiBPcHRpb25zIHRvIGliYXNlX21haW50YWluX2RiCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaWJhc2UuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJQkFTRV9SUFJfU1dFRVBfREInLCAyKTsKZGVmaW5lKCdJQkFTRV9TVFNfREFUQV9QQUdFUycsIDEpOwpkZWZpbmUoJ0lCQVNFX1NUU19EQl9MT0cnLCAyKTsKZGVmaW5lKCdJQkFTRV9TVFNfSERSX1BBR0VTJywgNCk7CmRlZmluZSgnSUJBU0VfU1RTX0lEWF9QQUdFUycsIDgpOwoKLyoqCiAqIE9wdGlvbnMgdG8gaWJhc2VfZGJfaW5mbwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2liYXNlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSUJBU0VfU1RTX1NZU19SRUxBVElPTlMnLCAxNik7CmRlZmluZSgnSUJBU0VfU1ZDX1NFUlZFUl9WRVJTSU9OJywgNTUpOwpkZWZpbmUoJ0lCQVNFX1NWQ19JTVBMRU1FTlRBVElPTicsIDU2KTsKZGVmaW5lKCdJQkFTRV9TVkNfR0VUX0VOVicsIDU5KTsKZGVmaW5lKCdJQkFTRV9TVkNfR0VUX0VOVl9MT0NLJywgNjApOwpkZWZpbmUoJ0lCQVNFX1NWQ19HRVRfRU5WX01TRycsIDYxKTsKZGVmaW5lKCdJQkFTRV9TVkNfVVNFUl9EQlBBVEgnLCA1OCk7CmRlZmluZSgnSUJBU0VfU1ZDX1NWUl9EQl9JTkZPJywgNTApOwoKLyoqCiAqIE9wdGlvbnMgdG8gaWJhc2Vfc2VydmVyX2luZm8KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pYmFzZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lCQVNFX1NWQ19HRVRfVVNFUlMnLCA2OCk7CgovLyBFbmQgb2YgaW50ZXJiYXNlIHYuCjw/cGhwCgovLyBTdGFydCBvZiBzeXN2c2htIHYuCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZTsKCi8qKgogKiBDcmVhdGVzIG9yIG9wZW4gYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zaG0tYXR0YWNoLnBocAogKiBAcGFyYW0gaW50ICRrZXkgPHA+CiAqIEEgbnVtZXJpYyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgSUQKICogPC9wPgogKiBAcGFyYW0gaW50fG51bGwgJHNpemUgW29wdGlvbmFsXSA8cD4KICogVGhlIG1lbW9yeSBzaXplLiBJZiBub3QgcHJvdmlkZWQsIGRlZmF1bHQgdG8gdGhlCiAqIHN5c3ZzaG0uaW5pdF9tZW0gaW4gdGhlIDxpPnBocC5pbmk8L2k+LCBvdGhlcndpc2UgMTAwMDAKICogYnl0ZXMuCiAqIDwvcD4KICogQHBhcmFtIGludCAkcGVybWlzc2lvbnMgW29wdGlvbmFsXSA8cD4KICogVGhlIG9wdGlvbmFsIHBlcm1pc3Npb24gYml0cy4gRGVmYXVsdCB0byAwNjY2LgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8U3lzdlNoYXJlZE1lbW9yeXxmYWxzZSBhIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBpZGVudGlmaWVyLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiU3lzdlNoYXJlZE1lbW9yeXxmYWxzZSJdLCBkZWZhdWx0OiAicmVzb3VyY2V8ZmFsc2UiKV0KZnVuY3Rpb24gc2htX2F0dGFjaChpbnQgJGtleSwgP2ludCAkc2l6ZSwgaW50ICRwZXJtaXNzaW9ucyA9IDA2NjYpIHt9CgovKioKICogUmVtb3ZlcyBzaGFyZWQgbWVtb3J5IGZyb20gVW5peCBzeXN0ZW1zCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc2htLXJlbW92ZS5waHAKICogQHBhcmFtIFN5c3ZTaGFyZWRNZW1vcnkgJHNobSA8cD4KICogVGhlIHNoYXJlZCBtZW1vcnkgaWRlbnRpZmllciBhcyByZXR1cm5lZCBieQogKiA8Yj5zaG1fYXR0YWNoPC9iPgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc2htX3JlbW92ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJTeXN2U2hhcmVkTWVtb3J5Il0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkc2htKTogYm9vbCB7fQoKLyoqCiAqIERpc2Nvbm5lY3RzIGZyb20gc2hhcmVkIG1lbW9yeSBzZWdtZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc2htLWRldGFjaC5waHAKICogQHBhcmFtIFN5c3ZTaGFyZWRNZW1vcnkgJHNobSA8cD4KICogQSBzaGFyZWQgbWVtb3J5IHJlc291cmNlIGhhbmRsZSBhcyByZXR1cm5lZCBieQogKiA8Yj5zaG1fYXR0YWNoPC9iPgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5zaG1fZGV0YWNoPC9iPiBhbHdheXMgcmV0dXJucyA8Yj5UUlVFPC9iPi4KICovCmZ1bmN0aW9uIHNobV9kZXRhY2goI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiU3lzdlNoYXJlZE1lbW9yeSJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHNobSk6IGJvb2wge30KCi8qKgogKiBJbnNlcnRzIG9yIHVwZGF0ZXMgYSB2YXJpYWJsZSBpbiBzaGFyZWQgbWVtb3J5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc2htLXB1dC12YXIucGhwCiAqIEBwYXJhbSBTeXN2U2hhcmVkTWVtb3J5ICRzaG0gPHA+CiAqIEEgc2hhcmVkIG1lbW9yeSByZXNvdXJjZSBoYW5kbGUgYXMgcmV0dXJuZWQgYnkKICogPGI+c2htX2F0dGFjaDwvYj4KICogPC9wPgogKiBAcGFyYW0gaW50ICRrZXkgPHA+CiAqIFRoZSB2YXJpYWJsZSBrZXkuCiAqIDwvcD4KICogQHBhcmFtIG1peGVkICR2YWx1ZSA8cD4KICogVGhlIHZhcmlhYmxlLiBBbGwgdmFyaWFibGUgdHlwZXMKICogdGhhdCA8Yj5zZXJpYWxpemU8L2I+IHN1cHBvcnRzIG1heSBiZSB1c2VkOiBnZW5lcmFsbHkKICogdGhpcyBtZWFucyBhbGwgdHlwZXMgZXhjZXB0IGZvciByZXNvdXJjZXMgYW5kIHNvbWUgaW50ZXJuYWwgb2JqZWN0cwogKiB0aGF0IGNhbm5vdCBiZSBzZXJpYWxpemVkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc2htX3B1dF92YXIoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiU3lzdlNoYXJlZE1lbW9yeSJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHNobSwgaW50ICRrZXksIG1peGVkICR2YWx1ZSk6IGJvb2wge30KCi8qKgogKiBDaGVjayB3aGV0aGVyIGEgc3BlY2lmaWMgZW50cnkgZXhpc3RzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc2htLWhhcy12YXIucGhwCiAqIEBwYXJhbSBTeXN2U2hhcmVkTWVtb3J5ICRzaG0gPHA+CiAqIFNoYXJlZCBtZW1vcnkgc2VnbWVudCwgb2J0YWluZWQgZnJvbSA8Yj5zaG1fYXR0YWNoPC9iPi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRrZXkgPHA+CiAqIFRoZSB2YXJpYWJsZSBrZXkuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIHRoZSBlbnRyeSBleGlzdHMsIG90aGVyd2lzZSA8Yj5GQUxTRTwvYj4KICovCmZ1bmN0aW9uIHNobV9oYXNfdmFyKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlN5c3ZTaGFyZWRNZW1vcnkiXSwgZGVmYXVsdDogInJlc291cmNlIildICRzaG0sIGludCAka2V5KTogYm9vbCB7fQoKLyoqCiAqIFJldHVybnMgYSB2YXJpYWJsZSBmcm9tIHNoYXJlZCBtZW1vcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zaG0tZ2V0LXZhci5waHAKICogQHBhcmFtIFN5c3ZTaGFyZWRNZW1vcnkgJHNobSA8cD4KICogU2hhcmVkIG1lbW9yeSBzZWdtZW50LCBvYnRhaW5lZCBmcm9tIDxiPnNobV9hdHRhY2g8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGtleSA8cD4KICogVGhlIHZhcmlhYmxlIGtleS4KICogPC9wPgogKiBAcmV0dXJuIG1peGVkIHRoZSB2YXJpYWJsZSB3aXRoIHRoZSBnaXZlbiBrZXkuCiAqLwpmdW5jdGlvbiBzaG1fZ2V0X3ZhcigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJTeXN2U2hhcmVkTWVtb3J5Il0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkc2htLCBpbnQgJGtleSk6IG1peGVkIHt9CgovKioKICogUmVtb3ZlcyBhIHZhcmlhYmxlIGZyb20gc2hhcmVkIG1lbW9yeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNobS1yZW1vdmUtdmFyLnBocAogKiBAcGFyYW0gU3lzdlNoYXJlZE1lbW9yeSAkc2htIDxwPgogKiBUaGUgc2hhcmVkIG1lbW9yeSBpZGVudGlmaWVyIGFzIHJldHVybmVkIGJ5CiAqIDxiPnNobV9hdHRhY2g8L2I+CiAqIDwvcD4KICogQHBhcmFtIGludCAka2V5IDxwPgogKiBUaGUgdmFyaWFibGUga2V5LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc2htX3JlbW92ZV92YXIoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiU3lzdlNoYXJlZE1lbW9yeSJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHNobSwgaW50ICRrZXkpOiBib29sIHt9CgovKioKICogQHNpbmNlIDguMAogKi8KZmluYWwgY2xhc3MgU3lzdlNoYXJlZE1lbW9yeQp7CiAgICAvKioKICAgICAqIENhbm5vdCBkaXJlY3RseSBjb25zdHJ1Y3QgU3lzdlNoYXJlZE1lbW9yeSwgdXNlIHNobV9hdHRhY2goKSBpbnN0ZWFkCiAgICAgKiBAc2VlIHNobV9hdHRhY2goKQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KfQoKLy8gRW5kIG9mIHN5c3ZzaG0gdi4KPD9waHAKCm5hbWVzcGFjZSBQYXJsZTsKCnVzZSBFeGNlcHRpb247CnVzZSBUaHJvd2FibGU7CgpjbGFzcyBMZXhlckV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQo8P3BocAoKbmFtZXNwYWNlIFBhcmxlOwoKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbW11dGFibGU7CgovKioKICogUGFyc2VyIGNsYXNzLgogKgogKiBSdWxlcyBjYW4gYmUgZGVmaW5lZCBvbiB0aGUgZmx5LiBPbmNlIGZpbmFsaXplZCwgYSBQYXJsZVxMZXhlciBpbnN0YW5jZSBpcyByZXF1aXJlZCB0byBkZWxpdmVyIHRoZSB0b2tlbiBzdHJlYW0uCiAqCiAqIEBzZWUgTGV4ZXIKICogQHBhY2thZ2UgUGFybGUKICovCmNsYXNzIFBhcnNlcgp7CiAgICAvKiBDb25zdGFudHMgKi8KICAgIHB1YmxpYyBjb25zdCBBQ1RJT05fRVJST1IgPSAwOwogICAgcHVibGljIGNvbnN0IEFDVElPTl9TSElGVCA9IDE7CiAgICBwdWJsaWMgY29uc3QgQUNUSU9OX1JFRFVDRSA9IDI7CiAgICBwdWJsaWMgY29uc3QgQUNUSU9OX0dPVE8gPSAzOwogICAgcHVibGljIGNvbnN0IEFDVElPTl9BQ0NFUFQgPSA0OwogICAgcHVibGljIGNvbnN0IEVSUk9SX1NZTlRBWCA9IDA7CiAgICBwdWJsaWMgY29uc3QgRVJST1JfTk9OX0FTU09DSUFUSVZFID0gMTsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9VTktOT1dOX1RPS0VOID0gMjsKCiAgICAvKiBQcm9wZXJ0aWVzICovCiAgICAvKioKICAgICAqIEB2YXIgaW50IEN1cnJlbnQgcGFyc2VyIGFjdGlvbiB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZSBhY3Rpb24gY2xhc3MgY29uc3RhbnRzLCByZWFkb25seS4KICAgICAqLwogICAgI1tJbW11dGFibGVdCiAgICBwdWJsaWMgJGFjdGlvbiA9IDA7CgogICAgLyoqCiAgICAgKiBAdmFyIGludCBHcmFtbWFyIHJ1bGUgaWQganVzdCBwcm9jZXNzZWQgaW4gdGhlIHJlZHVjZSBhY3Rpb24uIFRoZSB2YWx1ZSBjb3JyZXNwb25kcyBlaXRoZXIgdG8gYSB0b2tlbiBvciB0byBhIHByb2R1Y3Rpb24gaWQuIFJlYWRvbmx5LgogICAgICovCiAgICAjW0ltbXV0YWJsZV0KICAgIHB1YmxpYyAkcmVkdWNlSWQgPSAwOwoKICAgIC8qIE1ldGhvZHMgKi8KICAgIC8qKgogICAgICogUHJvY2VzcyBuZXh0IHBhcnNlciBydWxlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcGFyc2VyLmFkdmFuY2UucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkdmFuY2UoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogRmluYWxpemUgdGhlIGdyYW1tYXIgcnVsZXMKICAgICAqCiAgICAgKiBBbnkgdG9rZW5zIGFuZCBncmFtbWFyIHJ1bGVzIHByZXZpb3VzbHkgYWRkZWQgYXJlIGZpbmFsaXplZC4KICAgICAqIFRoZSBydWxlIHNldCBiZWNvbWVzIHJlYWRvbmx5IGFuZCB0aGUgcGFyc2VyIGlzIHJlYWR5IHRvIHN0YXJ0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcGFyc2VyLmJ1aWxkLnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWlsZCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBDb25zdW1lIHRoZSBkYXRhIGZvciBwYXJzaW5nLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcGFyc2VyLmNvbnN1bWUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIERhdGEgdG8gYmUgcGFyc2VkLgogICAgICogQHBhcmFtIExleGVyICRsZXhlciBBIGxleGVyIG9iamVjdCBjb250YWluaW5nIHRoZSBsZXhpbmcgcnVsZXMgcHJlcGFyZWQgZm9yIHRoZSBwYXJ0aWN1bGFyIGdyYW1tYXIuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnN1bWUoc3RyaW5nICRkYXRhLCBMZXhlciAkbGV4ZXIpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBEdW1wIHRoZSBjdXJyZW50IGdyYW1tYXIgdG8gc3Rkb3V0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcGFyc2VyLmR1bXAucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGR1bXAoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGVycm9yIGluZm9ybWF0aW9uIGluIGNhc2UgUGFybGVcUGFyc2VyOjphY3Rpb24oKSByZXR1cm5lZCB0aGUgZXJyb3IgYWN0aW9uLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcGFyc2VyLmVycm9yaW5mby5waHAKICAgICAqIEByZXR1cm4gRXJyb3JJbmZvCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlcnJvckluZm8oKTogRXJyb3JJbmZvIHt9CgogICAgLyoqCiAgICAgKiBEZWNsYXJlIGEgdGVybWluYWwgd2l0aCBsZWZ0IGFzc29jaWF0aXZpdHkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1wYXJzZXIubGVmdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRva2VuIFRva2VuIG5hbWUuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxlZnQoc3RyaW5nICR0b2tlbik6IHZvaWQge30KCiAgICAvKioKICAgICAqIERlY2xhcmUgYSB0ZXJtaW5hbCwgdGhhdCBjYW5ub3QgYXBwZWFyIG1vcmUgdGhhbiBvbmNlIGluIHRoZSByb3cuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1wYXJzZXIubm9uYXNzb2MucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0b2tlbiBUb2tlbiBuYW1lLgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub25hc3NvYyhzdHJpbmcgJHRva2VuKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogRGVjbGFyZXMgYSBwcmVjZWRlbmNlIHJ1bGUgZm9yIGEgZmljdGl0aW91cyB0ZXJtaW5hbCBzeW1ib2wuCiAgICAgKiBUaGlzIHJ1bGUgY2FuIGJlIGxhdGVyIHVzZWQgaW4gdGhlIHNwZWNpZmljIGdyYW1tYXIgcnVsZXMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1wYXJzZXIucHJlY2VkZW5jZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRva2VuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZWNlZGVuY2Uoc3RyaW5nICR0b2tlbik6IHZvaWQge30KCiAgICAvKioKICAgICAqIFB1c2ggYSBncmFtbWFyIHJ1bGUuCiAgICAgKiBUaGUgcHJvZHVjdGlvbiBpZCByZXR1cm5lZCBjYW4gYmUgdXNlZCBsYXRlciBpbiB0aGUgcGFyc2luZyBwcm9jZXNzIHRvIGlkZW50aWZ5IHRoZSBydWxlIG1hdGNoZWQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1wYXJzZXIucHVzaC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgUnVsZSBuYW1lLgogICAgICogQHBhcmFtIHN0cmluZyAkcnVsZSBUaGUgcnVsZSB0byBiZSBhZGRlZC4gVGhlIHN5bnRheCBpcyBCaXNvbiBjb21wYXRpYmxlLgogICAgICogQHJldHVybiBpbnQgUmV0dXJucyBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgcnVsZSBpbmRleC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1c2goc3RyaW5nICRuYW1lLCBzdHJpbmcgJHJ1bGUpOiBpbnQge30KCiAgICAvKioKICAgICAqIFJlc2V0IHBhcnNlciBzdGF0ZSB1c2luZyB0aGUgZ2l2ZW4gdG9rZW4gaWQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1wYXJzZXIucmVzZXQucGhwCiAgICAgKiBAcGFyYW0gaW50ICR0b2tlbklkIFRva2VuIGlkLgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNldChpbnQgJHRva2VuSWQpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBEZWNsYXJlIGEgdG9rZW4gd2l0aCByaWdodC1hc3NvY2lhdGl2aXR5CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1wYXJzZXIucmlnaHQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0b2tlbiBUb2tlbiBuYW1lLgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByaWdodChzdHJpbmcgJHRva2VuKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgYSBwYXJ0IG9mIHRoZSBtYXRjaCBieSBhIHJ1bGUuCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBwc2V1ZG8gdmFyaWFibGUgZnVuY3Rpb25hbGl0eSBpbiBCaXNvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXBhcnNlci5zaWdpbC5waHAKICAgICAqIEBwYXJhbSBpbnQgJGlkeCBNYXRjaCBpbmRleCwgemVybyBiYXNlZC4KICAgICAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgbWF0Y2hlZCBwYXJ0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnaWwoaW50ICRpZHgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIERlY2xhcmUgYSB0ZXJtaW5hbCB0byBiZSB1c2VkIGluIHRoZSBncmFtbWFyLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcGFyc2VyLnRva2VuLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkdG9rZW4gVG9rZW4gbmFtZS4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9rZW4oc3RyaW5nICR0b2tlbik6IHZvaWQge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBpZCBvZiB0aGUgbmFtZWQgdG9rZW4uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1wYXJzZXIudG9rZW5pZC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRva2VuIE5hbWUgb2YgdGhlIHRva2VuIGFzIHVzZWQgaW4gUGFybGVcUGFyc2VyOjp0b2tlbigpLgogICAgICogQHJldHVybiBpbnQgUmV0dXJucyBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgdG9rZW4gaWQuCiAgICAgKiBAc2VlIFBhcnNlcjo6dG9rZW4oKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9rZW5JZChzdHJpbmcgJHRva2VuKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBwYXJzZXIgb3BlcmF0aW9uIGRlc2NyaXB0aW9uLgogICAgICogVGhpcyBjYW4gYmUgZXNwZWNpYWxseSB1c2VmdWwgZm9yIHN0dWR5aW5nIHRoZSBwYXJzZXIgYW5kIHRvIG9wdGltaXplIHRoZSBncmFtbWFyLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcGFyc2VyLnRyYWNlLnBocAogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyB3aXRoIHRoZSB0cmFjZSBpbmZvcm1hdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyYWNlKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogVmFsaWRhdGUgYW4gaW5wdXQgc3RyaW5nLgogICAgICogVGhlIHN0cmluZyBpcyBwYXJzZWQgaW50ZXJuYWxseSwgdGh1cyB0aGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9yIHRoZSBxdWljayBpbnB1dCB2YWxpZGF0aW9uLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcGFyc2VyLnZhbGlkYXRlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBTdHJpbmcgdG8gYmUgdmFsaWRhdGVkLgogICAgICogQHBhcmFtIExleGVyICRsZXhlciBBIGxleGVyIG9iamVjdCBjb250YWluaW5nIHRoZSBsZXhpbmcgcnVsZXMgcHJlcGFyZWQgZm9yIHRoZSBwYXJ0aWN1bGFyIGdyYW1tYXIuCiAgICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBib29sZWFuIHdpdG5lc3Npbmcgd2hldGhlciB0aGUgaW5wdXQgY2hpbWVzIG9yIG5vdCB3aXRoIHRoZSBkZWZpbmVkIHJ1bGVzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGUoc3RyaW5nICRkYXRhLCBMZXhlciAkbGV4ZXIpOiBib29sIHt9Cn0KPD9waHAKCm5hbWVzcGFjZSBQYXJsZTsKCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW1tdXRhYmxlOwoKLyoqCiAqIE11bHRpc3RhdGUgbGV4ZXIgY2xhc3MuCiAqIExleGVtZXMgY2FuIGJlIGRlZmluZWQgb24gdGhlIGZseS4gSWYgdGhlIHBhcnRpY3VsYXIgbGV4ZXIgaW5zdGFuY2UgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aXRoIFBhcmxlXFJQYXJzZXIsCiAqIHRoZSB0b2tlbiBJRHMgbmVlZCB0byBiZSB0YWtlbiBmcm9tIHRoZXJlLiBPdGhlcndpc2UsIGFyYml0cmFyeSB0b2tlbiBJRHMgY2FuIGJlIHN1cHBsaWVkLgogKiBOb3RlLCB0aGF0IFBhcmxlXFBhcnNlciBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgbGV4ZXIuCiAqCiAqIEBzZWUgUlBhcnNlcgogKiBAcGFja2FnZSBQYXJsZQogKi8KY2xhc3MgUkxleGVyCnsKICAgIC8qIENvbnN0YW50cyAqLwogICAgcHVibGljIGNvbnN0IElDQVNFID0gMTsKICAgIHB1YmxpYyBjb25zdCBET1RfTk9UX0xGID0gMjsKICAgIHB1YmxpYyBjb25zdCBET1RfTk9UX0NSTEYgPSA0OwogICAgcHVibGljIGNvbnN0IFNLSVBfV1MgPSA4OwogICAgcHVibGljIGNvbnN0IE1BVENIX1pFUk9fTEVOID0gMTY7CgogICAgLyogUHJvcGVydGllcyAqLwogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wgU3RhcnQgb2YgaW5wdXQgZmxhZy4KICAgICAqLwogICAgcHVibGljICRib2wgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IExleGVyIGZsYWdzLgogICAgICovCiAgICBwdWJsaWMgJGZsYWdzID0gMDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IEN1cnJlbnQgbGV4ZXIgc3RhdGUsIHJlYWRvbmx5LgogICAgICovCiAgICAjW0ltbXV0YWJsZV0KICAgIHB1YmxpYyAkc3RhdGUgPSAwOwoKICAgIC8qKgogICAgICogQHZhciBpbnQgUG9zaXRpb24gb2YgdGhlIGxhdGVzdCB0b2tlbiBtYXRjaCwgcmVhZG9ubHkuCiAgICAgKi8KICAgICNbSW1tdXRhYmxlXQogICAgcHVibGljICRtYXJrZXIgPSAwOwoKICAgIC8qKgogICAgICogQHZhciBpbnQgQ3VycmVudCBpbnB1dCBvZmZzZXQsIHJlYWRvbmx5LgogICAgICovCiAgICAjW0ltbXV0YWJsZV0KICAgIHB1YmxpYyAkY3Vyc29yID0gMDsKCiAgICAvKiBNZXRob2RzICovCgogICAgLyoqCiAgICAgKiBQcm9jZXNzZXMgdGhlIG5leHQgcnVsZSBhbmQgcHJlcGFyZXMgdGhlIHJlc3VsdGluZyB0b2tlbiBkYXRhLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcmxleGVyLmFkdmFuY2UucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkdmFuY2UoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogRmluYWxpemUgdGhlIGxleGVyIHJ1bGUgc2V0CiAgICAgKgogICAgICogUnVsZXMsIHByZXZpb3VzbHkgYWRkZWQgd2l0aCBQYXJsZVxSTGV4ZXI6OnB1c2goKSBhcmUgZmluYWxpemVkLgogICAgICogVGhpcyBtZXRob2QgY2FsbCBoYXMgdG8gYmUgZG9uZSBhZnRlciBhbGwgdGhlIG5lY2Vzc2FyeSBydWxlcyB3YXMgcHVzaGVkLgogICAgICogVGhlIHJ1bGUgc2V0IGJlY29tZXMgcmVhZCBvbmx5LiBUaGUgbGV4aW5nIGNhbiBiZWdpbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXJsZXhlci5idWlsZC5waHAKICAgICAqIEBzZWUgUkxleGVyOjpwdXNoKCkKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogRGVmaW5lIHRva2VuIGNhbGxiYWNrCiAgICAgKgogICAgICogRGVmaW5lIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbmNlIGxleGVyIGVuY291bnRlcnMgYSBwYXJ0aWN1bGFyIHRva2VuLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1ybGV4ZXIuY2FsbG91dC5waHAKICAgICAqIEBwYXJhbSBpbnQgJGlkIFRva2VuIGlkLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBDYWxsYWJsZSB0byBiZSBpbnZva2VkLiBUaGUgY2FsbGFibGUgZG9lc24ndCByZWNlaXZlIGFueSBhcmd1bWVudHMgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FsbG91dChpbnQgJGlkLCBjYWxsYWJsZSAkY2FsbGJhY2spOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBQYXNzIHRoZSBkYXRhIGZvciBwcm9jZXNzaW5nCiAgICAgKgogICAgICogQ29uc3VtZSB0aGUgZGF0YSBmb3IgbGV4aW5nLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1ybGV4ZXIuY29uc3VtZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgRGF0YSB0byBiZSBsZXhlZC4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29uc3VtZShzdHJpbmcgJGRhdGEpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBEdW1wIHRoZSBzdGF0ZSBtYWNoaW5lCiAgICAgKgogICAgICogRHVtcCB0aGUgY3VycmVudCBzdGF0ZSBtYWNoaW5lIHRvIHN0ZG91dC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcmxleGVyLmR1bXAucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGR1bXAoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGN1cnJlbnQgdG9rZW4uCiAgICAgKgogICAgICogQHJldHVybiBUb2tlbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9rZW4oKTogVG9rZW4ge30KCiAgICAvKioKICAgICAqIEFkZCBhIGxleGVyIHJ1bGUKICAgICAqCiAgICAgKiBQdXNoIGEgcGF0dGVybiBmb3IgbGV4ZW1lIHJlY29nbml0aW9uLgogICAgICogQSAnc3RhcnQgc3RhdGUnIGFuZCAnZXhpdCBzdGF0ZScgY2FuIGJlIHNwZWNpZmllZCBieSB1c2luZyBhIHN1aXRhYmxlIHNpZ25hdHVyZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWdleCBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCBmb3IgdG9rZW4gbWF0Y2hpbmcuCiAgICAgKiBAcGFyYW0gaW50ICRpZAogICAgICogVG9rZW4gaWQuIElmIHRoZSBsZXhlciBpbnN0YW5jZSBpcyBtZWFudCB0byBiZSB1c2VkIHN0YW5kYWxvbmUsIHRoaXMgY2FuIGJlIGFuIGFyYml0cmFyeSBudW1iZXIuCiAgICAgKiBJZiB0aGUgbGV4ZXIgaW5zdGFuY2UgaXMgZ29pbmcgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYXJzZXIsIGl0IGhhcyB0byBiZSBhbiBpZCByZXR1cm5lZCBieSBQYXJsZVxSUGFyc2VyOjp0b2tlbmlkKCkuCiAgICAgKiBAc2VlIFJQYXJzZXI6OnRva2VuSWQoKQogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXJsZXhlci5wdXNoLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHVzaChzdHJpbmcgJHJlZ2V4LCBpbnQgJGlkKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQWRkIGEgbGV4ZXIgcnVsZQogICAgICoKICAgICAqIFB1c2ggYSBwYXR0ZXJuIGZvciBsZXhlbWUgcmVjb2duaXRpb24uCiAgICAgKiBBICdzdGFydCBzdGF0ZScgYW5kICdleGl0IHN0YXRlJyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHVzaW5nIGEgc3VpdGFibGUgc2lnbmF0dXJlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YXRlIFN0YXRlIG5hbWUuIElmICcqJyBpcyB1c2VkIGFzIHN0YXJ0IHN0YXRlLCB0aGVuIHRoZSBydWxlIGlzIGFwcGxpZWQgdG8gYWxsIGxleGVyIHN0YXRlcy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlZ2V4IFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIGZvciB0b2tlbiBtYXRjaGluZy4KICAgICAqIEBwYXJhbSBpbnQgJGlkCiAgICAgKiBUb2tlbiBpZC4gSWYgdGhlIGxleGVyIGluc3RhbmNlIGlzIG1lYW50IHRvIGJlIHVzZWQgc3RhbmRhbG9uZSwgdGhpcyBjYW4gYmUgYW4gYXJiaXRyYXJ5IG51bWJlci4KICAgICAqIElmIHRoZSBsZXhlciBpbnN0YW5jZSBpcyBnb2luZyB0byBiZSBwYXNzZWQgdG8gdGhlIHBhcnNlciwgaXQgaGFzIHRvIGJlIGFuIGlkIHJldHVybmVkIGJ5IFBhcmxlXFJQYXJzZXI6OnRva2VuaWQoKS4KICAgICAqIEBzZWUgUlBhcnNlcjo6dG9rZW5JZCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuZXdTdGF0ZQogICAgICogTmV3IHN0YXRlIG5hbWUsIGFmdGVyIHRoZSBydWxlIHdhcyBhcHBsaWVkLgogICAgICogSWYgJy4nIGlzIHNwZWNpZmllZCBhcyB0aGUgZXhpdCBzdGF0ZSwgdGhlbiB0aGUgbGV4ZXIgc3RhdGUgaXMgdW5jaGFuZ2VkIHdoZW4gdGhhdCBydWxlIG1hdGNoZXMuCiAgICAgKiBBbiBleGl0IHN0YXRlIHdpdGggJz4nIGJlZm9yZSB0aGUgbmFtZSBtZWFucyBwdXNoLiBVc2UgdGhlIHNpZ25hdHVyZSB3aXRob3V0IGlkIGZvciBlaXRoZXIgY29udGludWF0aW9uIG9yIHRvCiAgICAgKiBzdGFydCBtYXRjaGluZywgd2hlbiBhIGNvbnRpbnVhdGlvbiBvciByZWN1cnNpb24gaXMgcmVxdWlyZWQuCiAgICAgKiBJZiAnPCcgaXMgc3BlY2lmaWVkIGFzIGV4aXQgc3RhdGUsIGl0IG1lYW5zIHBvcC4gSW4gdGhhdCBjYXNlLCB0aGUgc2lnbmF0dXJlIGNvbnRhaW5pbmcgdGhlIGlkIGNhbiBiZSB1c2VkIHRvCiAgICAgKiBpZGVudGlmeSB0aGUgbWF0Y2guIE5vdGUgdGhhdCBldmVuIGluIHRoZSBjYXNlIGFuIGlkIGlzIHNwZWNpZmllZCwgdGhlIHJ1bGUgd2lsbCBmaW5pc2ggZmlyc3Qgd2hlbiBhbGwgdGhlCiAgICAgKiBwcmV2aW91cyBwdXNoZXMgcG9wcGVkLgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXJsZXhlci5wdXNoLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHVzaChzdHJpbmcgJHN0YXRlLCBzdHJpbmcgJHJlZ2V4LCBpbnQgJGlkLCBzdHJpbmcgJG5ld1N0YXRlKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQWRkIGEgbGV4ZXIgcnVsZQogICAgICoKICAgICAqIFB1c2ggYSBwYXR0ZXJuIGZvciBsZXhlbWUgcmVjb2duaXRpb24uCiAgICAgKiBBICdzdGFydCBzdGF0ZScgYW5kICdleGl0IHN0YXRlJyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHVzaW5nIGEgc3VpdGFibGUgc2lnbmF0dXJlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0YXRlIFN0YXRlIG5hbWUuIElmICcqJyBpcyB1c2VkIGFzIHN0YXJ0IHN0YXRlLCB0aGVuIHRoZSBydWxlIGlzIGFwcGxpZWQgdG8gYWxsIGxleGVyIHN0YXRlcy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlZ2V4IFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIGZvciB0b2tlbiBtYXRjaGluZy4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5ld1N0YXRlCiAgICAgKiBOZXcgc3RhdGUgbmFtZSwgYWZ0ZXIgdGhlIHJ1bGUgd2FzIGFwcGxpZWQuCiAgICAgKiBJZiAnLicgaXMgc3BlY2lmaWVkIGFzIHRoZSBleGl0IHN0YXRlLCB0aGVuIHRoZSBsZXhlciBzdGF0ZSBpcyB1bmNoYW5nZWQgd2hlbiB0aGF0IHJ1bGUgbWF0Y2hlcy4KICAgICAqIEFuIGV4aXQgc3RhdGUgd2l0aCAnPicgYmVmb3JlIHRoZSBuYW1lIG1lYW5zIHB1c2guIFVzZSB0aGUgc2lnbmF0dXJlIHdpdGhvdXQgaWQgZm9yIGVpdGhlciBjb250aW51YXRpb24gb3IgdG8KICAgICAqIHN0YXJ0IG1hdGNoaW5nLCB3aGVuIGEgY29udGludWF0aW9uIG9yIHJlY3Vyc2lvbiBpcyByZXF1aXJlZC4KICAgICAqIElmICc8JyBpcyBzcGVjaWZpZWQgYXMgZXhpdCBzdGF0ZSwgaXQgbWVhbnMgcG9wLiBJbiB0aGF0IGNhc2UsIHRoZSBzaWduYXR1cmUgY29udGFpbmluZyB0aGUgaWQgY2FuIGJlIHVzZWQgdG8KICAgICAqIGlkZW50aWZ5IHRoZSBtYXRjaC4gTm90ZSB0aGF0IGV2ZW4gaW4gdGhlIGNhc2UgYW4gaWQgaXMgc3BlY2lmaWVkLCB0aGUgcnVsZSB3aWxsIGZpbmlzaCBmaXJzdCB3aGVuIGFsbCB0aGUKICAgICAqIHByZXZpb3VzIHB1c2hlcyBwb3BwZWQuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcmxleGVyLnB1c2gucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXNoKHN0cmluZyAkc3RhdGUsIHN0cmluZyAkcmVnZXgsIHN0cmluZyAkbmV3U3RhdGUpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBQdXNoIGEgbmV3IHN0YXJ0IHN0YXRlCiAgICAgKiBUaGlzIGxleGVyIHR5cGUgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBzdGF0ZSBtYWNoaW5lLgogICAgICogVGhpcyBhbGxvd3MgeW91IHRvIGxleCBkaWZmZXJlbnQgdG9rZW5zIGRlcGVuZGluZyBvbiBjb250ZXh0LCB0aHVzIGFsbG93aW5nIHNpbXBsZSBwYXJzaW5nIHRvIHRha2UgcGxhY2UuCiAgICAgKiBPbmNlIGEgc3RhdGUgcHVzaGVkLCBpdCBjYW4gYmUgdXNlZCB3aXRoIGEgc3VpdGFibGUgUGFybGVcUkxleGVyOjpwdXNoKCkgc2lnbmF0dXJlIHZhcmlhbnQuCiAgICAgKgogICAgICogQHNlZSBSTGV4ZXI6OnB1c2goKQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1ybGV4ZXIucHVzaHN0YXRlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc3RhdGUgTmFtZSBvZiB0aGUgc3RhdGUuCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHVzaFN0YXRlKHN0cmluZyAkc3RhdGUpOiBpbnQge30KCiAgICAvKioKICAgICAqIFJlc2V0IGxleGVyCiAgICAgKgogICAgICogUmVzZXQgbGV4aW5nIG9wdGlvbmFsbHkgc3VwcGx5aW5nIHRoZSBkZXNpcmVkIG9mZnNldC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRwb3MgUmVzZXQgcG9zaXRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNldChpbnQgJHBvcyk6IHZvaWQge30KfQo8P3BocAoKbmFtZXNwYWNlIFBhcmxlOwoKY2xhc3MgVG9rZW4KewogICAgLyogQ29uc3RhbnRzICovCiAgICAvKiogQHZhciBpbnQgRW5kIG9mIGlucHV0IHRva2VuIGlkLiAqLwogICAgcHVibGljIGNvbnN0IEVPSSA9IDA7CgogICAgLyoqIEB2YXIgaW50IFVua25vd24gdG9rZW4gaWQuICovCiAgICBwdWJsaWMgY29uc3QgVU5LTk9XTiA9IC0xOwoKICAgIC8qKiBAdmFyIGludCBTa2lwIHRva2VuIGlkLiAqLwogICAgcHVibGljIGNvbnN0IFNLSVAgPSAtMjsKCiAgICAvKiBQcm9wZXJ0aWVzICovCiAgICAvKiogQHZhciBpbnQgVG9rZW4gaWQuICovCiAgICBwdWJsaWMgJGlkOwoKICAgIC8qKiBAdmFyIHN0cmluZyBUb2tlbiB2YWx1ZS4gKi8KICAgIHB1YmxpYyAkdmFsdWU7Cn0KPD9waHAKCm5hbWVzcGFjZSBQYXJsZTsKCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW1tdXRhYmxlOwoKLyoqCiAqIEB0ZW1wbGF0ZSBUVmFsdWUKICovCmNsYXNzIFN0YWNrCnsKICAgIC8qIFByb3BlcnRpZXMgKi8KICAgIC8qKgogICAgICogQHZhciBib29sIFdoZXRoZXIgdGhlIHN0YWNrIGlzIGVtcHR5LCByZWFkb25seS4KICAgICAqLwogICAgI1tJbW11dGFibGVdCiAgICBwdWJsaWMgJGVtcHR5ID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IFN0YWNrIHNpemUsIHJlYWRvbmx5LgogICAgICovCiAgICAjW0ltbXV0YWJsZV0KICAgIHB1YmxpYyAkc2l6ZSA9IDA7CgogICAgLyoqCiAgICAgKiBAdmFyIFRWYWx1ZSBFbGVtZW50IG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrLgogICAgICovCiAgICBwdWJsaWMgJHRvcDsKCiAgICAvKiBNZXRob2RzICovCiAgICAvKioKICAgICAqIFBvcCBhbiBpdGVtIGZyb20gdGhlIHN0YWNrCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1zdGFjay5wb3AucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBvcCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBQdXNoIGFuIGl0ZW0gaW50byB0aGUgc3RhY2sKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXN0YWNrLnB1c2gucGhwCiAgICAgKiBAcGFyYW0gVFZhbHVlICRpdGVtIFZhcmlhYmxlIHRvIGJlIHB1c2hlZC4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHVzaCgkaXRlbSkge30KfQo8P3BocAoKbmFtZXNwYWNlIFBhcmxlOwoKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbW11dGFibGU7CgpjbGFzcyBSUGFyc2VyCnsKICAgIC8qIENvbnN0YW50cyAqLwogICAgcHVibGljIGNvbnN0IEFDVElPTl9FUlJPUiA9IDA7CiAgICBwdWJsaWMgY29uc3QgQUNUSU9OX1NISUZUID0gMTsKICAgIHB1YmxpYyBjb25zdCBBQ1RJT05fUkVEVUNFID0gMjsKICAgIHB1YmxpYyBjb25zdCBBQ1RJT05fR09UTyA9IDM7CiAgICBwdWJsaWMgY29uc3QgQUNUSU9OX0FDQ0VQVCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgRVJST1JfU1lOVEFYID0gMDsKICAgIHB1YmxpYyBjb25zdCBFUlJPUl9OT05fQVNTT0NJQVRJVkUgPSAxOwogICAgcHVibGljIGNvbnN0IEVSUk9SX1VOS05PV05fVE9LRU4gPSAyOwoKICAgIC8qIFByb3BlcnRpZXMgKi8KICAgIC8qKgogICAgICogQHZhciBpbnQgQ3VycmVudCBwYXJzZXIgYWN0aW9uIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlIGFjdGlvbiBjbGFzcyBjb25zdGFudHMsIHJlYWRvbmx5LgogICAgICovCiAgICAjW0ltbXV0YWJsZV0KICAgIHB1YmxpYyAkYWN0aW9uID0gMDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IEdyYW1tYXIgcnVsZSBpZCBqdXN0IHByb2Nlc3NlZCBpbiB0aGUgcmVkdWNlIGFjdGlvbi4gVGhlIHZhbHVlIGNvcnJlc3BvbmRzIGVpdGhlciB0byBhIHRva2VuIG9yIHRvIGEgcHJvZHVjdGlvbiBpZC4gUmVhZG9ubHkuCiAgICAgKi8KICAgICNbSW1tdXRhYmxlXQogICAgcHVibGljICRyZWR1Y2VJZCA9IDA7CgogICAgLyogTWV0aG9kcyAqLwogICAgLyoqCiAgICAgKiBQcm9jZXNzIG5leHQgcGFyc2VyIHJ1bGUuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1ycGFyc2VyLmFkdmFuY2UucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkdmFuY2UoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogRmluYWxpemUgdGhlIGdyYW1tYXIgcnVsZXMKICAgICAqCiAgICAgKiBBbnkgdG9rZW5zIGFuZCBncmFtbWFyIHJ1bGVzIHByZXZpb3VzbHkgYWRkZWQgYXJlIGZpbmFsaXplZC4KICAgICAqIFRoZSBydWxlIHNldCBiZWNvbWVzIHJlYWRvbmx5IGFuZCB0aGUgcGFyc2VyIGlzIHJlYWR5IHRvIHN0YXJ0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcnBhcnNlci5idWlsZC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQ29uc3VtZSB0aGUgZGF0YSBmb3IgcGFyc2luZy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXJwYXJzZXIuY29uc3VtZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgRGF0YSB0byBiZSBwYXJzZWQuCiAgICAgKiBAcGFyYW0gTGV4ZXIgJGxleGVyIEEgbGV4ZXIgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxleGluZyBydWxlcyBwcmVwYXJlZCBmb3IgdGhlIHBhcnRpY3VsYXIgZ3JhbW1hci4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29uc3VtZShzdHJpbmcgJGRhdGEsIExleGVyICRsZXhlcik6IHZvaWQge30KCiAgICAvKioKICAgICAqIER1bXAgdGhlIGN1cnJlbnQgZ3JhbW1hciB0byBzdGRvdXQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1ycGFyc2VyLmR1bXAucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGR1bXAoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGVycm9yIGluZm9ybWF0aW9uIGluIGNhc2UgUGFybGVcUlBhcnNlcjo6YWN0aW9uKCkgcmV0dXJuZWQgdGhlIGVycm9yIGFjdGlvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXJwYXJzZXIuZXJyb3JpbmZvLnBocAogICAgICogQHJldHVybiBFcnJvckluZm8KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVycm9ySW5mbygpOiBFcnJvckluZm8ge30KCiAgICAvKioKICAgICAqIERlY2xhcmUgYSB0ZXJtaW5hbCB3aXRoIGxlZnQgYXNzb2NpYXRpdml0eS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXJwYXJzZXIubGVmdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRva2VuIFRva2VuIG5hbWUuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxlZnQoc3RyaW5nICR0b2tlbik6IHZvaWQge30KCiAgICAvKioKICAgICAqIERlY2xhcmUgYSB0b2tlbiB3aXRoIG5vIGFzc29jaWF0aXZpdHkKICAgICAqCiAgICAgKiBEZWNsYXJlIGEgdGVybWluYWwsIHRoYXQgY2Fubm90IGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiB0aGUgcm93LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcnBhcnNlci5ub25hc3NvYy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRva2VuIFRva2VuIG5hbWUuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5vbmFzc29jKHN0cmluZyAkdG9rZW4pOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBEZWNsYXJlIGEgcHJlY2VkZW5jZSBydWxlCiAgICAgKgogICAgICogRGVjbGFyZXMgYSBwcmVjZWRlbmNlIHJ1bGUgZm9yIGEgZmljdGl0aW91cyB0ZXJtaW5hbCBzeW1ib2wuCiAgICAgKiBUaGlzIHJ1bGUgY2FuIGJlIGxhdGVyIHVzZWQgaW4gdGhlIHNwZWNpZmljIGdyYW1tYXIgcnVsZXMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1ycGFyc2VyLnByZWNlZGVuY2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0b2tlbgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVjZWRlbmNlKHN0cmluZyAkdG9rZW4pOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBQdXNoIGEgZ3JhbW1hciBydWxlLgogICAgICoKICAgICAqIFRoZSBwcm9kdWN0aW9uIGlkIHJldHVybmVkIGNhbiBiZSB1c2VkIGxhdGVyIGluIHRoZSBwYXJzaW5nIHByb2Nlc3MgdG8gaWRlbnRpZnkgdGhlIHJ1bGUgbWF0Y2hlZC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXJwYXJzZXIucHVzaC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgUnVsZSBuYW1lLgogICAgICogQHBhcmFtIHN0cmluZyAkcnVsZSBUaGUgcnVsZSB0byBiZSBhZGRlZC4gVGhlIHN5bnRheCBpcyBCaXNvbiBjb21wYXRpYmxlLgogICAgICogQHJldHVybiBpbnQgUmV0dXJucyBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgcnVsZSBpbmRleC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1c2goc3RyaW5nICRuYW1lLCBzdHJpbmcgJHJ1bGUpOiBpbnQge30KCiAgICAvKioKICAgICAqIFJlc2V0IHBhcnNlciBzdGF0ZSB1c2luZyB0aGUgZ2l2ZW4gdG9rZW4gaWQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1ycGFyc2VyLnJlc2V0LnBocAogICAgICogQHBhcmFtIGludCAkdG9rZW5JZCBUb2tlbiBpZC4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXQoaW50ICR0b2tlbklkKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogRGVjbGFyZSBhIHRva2VuIHdpdGggcmlnaHQtYXNzb2NpYXRpdml0eQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtcnBhcnNlci5yaWdodC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRva2VuIFRva2VuIG5hbWUuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJpZ2h0KHN0cmluZyAkdG9rZW4pOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBhIG1hdGNoaW5nIHBhcnQgb2YgYSBydWxlCiAgICAgKgogICAgICogUmV0cmlldmUgYSBwYXJ0IG9mIHRoZSBtYXRjaCBieSBhIHJ1bGUuCiAgICAgKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBwc2V1ZG8gdmFyaWFibGUgZnVuY3Rpb25hbGl0eSBpbiBCaXNvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXJwYXJzZXIuc2lnaWwucGhwCiAgICAgKiBAcGFyYW0gaW50ICRpZHggTWF0Y2ggaW5kZXgsIHplcm8gYmFzZWQuCiAgICAgKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIG1hdGNoZWQgcGFydC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNpZ2lsKGludCAkaWR4KTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBEZWNsYXJlIGEgdG9rZW4KICAgICAqCiAgICAgKiBEZWNsYXJlIGEgdGVybWluYWwgdG8gYmUgdXNlZCBpbiB0aGUgZ3JhbW1hci4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXJwYXJzZXIudG9rZW4ucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0b2tlbiBUb2tlbiBuYW1lLgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b2tlbihzdHJpbmcgJHRva2VuKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogR2V0IHRva2VuIGlkCiAgICAgKgogICAgICogUmV0cmlldmUgdGhlIGlkIG9mIHRoZSBuYW1lZCB0b2tlbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXJwYXJzZXIudG9rZW5pZC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRva2VuIE5hbWUgb2YgdGhlIHRva2VuIGFzIHVzZWQgaW4gUGFybGVcUGFyc2VyOjp0b2tlbigpLgogICAgICogQHJldHVybiBpbnQgUmV0dXJucyBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgdG9rZW4gaWQuCiAgICAgKiBAc2VlIFBhcnNlcjo6dG9rZW4oKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9rZW5JZChzdHJpbmcgJHRva2VuKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBUcmFjZSB0aGUgcGFyc2VyIG9wZXJhdGlvbgogICAgICoKICAgICAqIFJldHJpZXZlIHRoZSBjdXJyZW50IHBhcnNlciBvcGVyYXRpb24gZGVzY3JpcHRpb24uCiAgICAgKiBUaGlzIGNhbiBiZSBlc3BlY2lhbGx5IHVzZWZ1bCBmb3Igc3R1ZHlpbmcgdGhlIHBhcnNlciBhbmQgdG8gb3B0aW1pemUgdGhlIGdyYW1tYXIuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1ycGFyc2VyLnRyYWNlLnBocAogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyB3aXRoIHRoZSB0cmFjZSBpbmZvcm1hdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyYWNlKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogVmFsaWRhdGUgYW4gaW5wdXQgc3RyaW5nLgogICAgICoKICAgICAqIFRoZSBzdHJpbmcgaXMgcGFyc2VkIGludGVybmFsbHksIHRodXMgdGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciB0aGUgcXVpY2sgaW5wdXQgdmFsaWRhdGlvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLXJwYXJzZXIudmFsaWRhdGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIFN0cmluZyB0byBiZSB2YWxpZGF0ZWQuCiAgICAgKiBAcGFyYW0gUkxleGVyICRsZXhlciBBIGxleGVyIG9iamVjdCBjb250YWluaW5nIHRoZSBsZXhpbmcgcnVsZXMgcHJlcGFyZWQgZm9yIHRoZSBwYXJ0aWN1bGFyIGdyYW1tYXIuCiAgICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBib29sZWFuIHdpdG5lc3Npbmcgd2hldGhlciB0aGUgaW5wdXQgY2hpbWVzIG9yIG5vdCB3aXRoIHRoZSBkZWZpbmVkIHJ1bGVzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGUoc3RyaW5nICRkYXRhLCBSTGV4ZXIgJGxleGVyKTogYm9vbCB7fQp9Cjw/cGhwCgpuYW1lc3BhY2UgUGFybGU7Cgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEltbXV0YWJsZTsKCi8qKgogKiBTaW5nbGUgc3RhdGUgbGV4ZXIgY2xhc3MuCiAqCiAqIExleGVtZXMgY2FuIGJlIGRlZmluZWQgb24gdGhlIGZseS4KICogSWYgdGhlIHBhcnRpY3VsYXIgbGV4ZXIgaW5zdGFuY2UgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aXRoIFBhcmxlXFBhcnNlciwgdGhlIHRva2VuIElEcyBuZWVkIHRvIGJlIHRha2VuIGZyb20gdGhlcmUuCiAqIE90aGVyd2lzZSwgYXJiaXRyYXJ5IHRva2VuIElEcyBjYW4gYmUgc3VwcGxpZWQuIFRoaXMgbGV4ZXIgY2FuIGdpdmUgYSBjZXJ0YWluIHBlcmZvcm1hbmNlIGFkdmFudGFnZSBvdmVyIFBhcmxlXFJMZXhlciwKICogaWYgbm8gbXVsdGlwbGUgc3RhdGVzIGFyZSByZXF1aXJlZC4gTm90ZSwgdGhhdCBQYXJsZVxSUGFyc2VyIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhpcyBsZXhlci4KICoKICogQHNlZSBQYXJzZXIKICogQHBhY2thZ2UgUGFybGUKICovCmNsYXNzIExleGVyCnsKICAgIC8qIENvbnN0YW50cyAqLwogICAgcHVibGljIGNvbnN0IElDQVNFID0gMTsKICAgIHB1YmxpYyBjb25zdCBET1RfTk9UX0xGID0gMjsKICAgIHB1YmxpYyBjb25zdCBET1RfTk9UX0NSTEYgPSA0OwogICAgcHVibGljIGNvbnN0IFNLSVBfV1MgPSA4OwogICAgcHVibGljIGNvbnN0IE1BVENIX1pFUk9fTEVOID0gMTY7CgogICAgLyogUHJvcGVydGllcyAqLwogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wgU3RhcnQgb2YgaW5wdXQgZmxhZy4KICAgICAqLwogICAgcHVibGljICRib2wgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IExleGVyIGZsYWdzLgogICAgICovCiAgICBwdWJsaWMgJGZsYWdzID0gMDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IEN1cnJlbnQgbGV4ZXIgc3RhdGUsIHJlYWRvbmx5LgogICAgICovCiAgICAjW0ltbXV0YWJsZV0KICAgIHB1YmxpYyAkc3RhdGUgPSAwOwoKICAgIC8qKgogICAgICogQHZhciBpbnQgUG9zaXRpb24gb2YgdGhlIGxhdGVzdCB0b2tlbiBtYXRjaCwgcmVhZG9ubHkuCiAgICAgKi8KICAgICNbSW1tdXRhYmxlXQogICAgcHVibGljICRtYXJrZXIgPSAwOwoKICAgIC8qKgogICAgICogQHZhciBpbnQgQ3VycmVudCBpbnB1dCBvZmZzZXQsIHJlYWRvbmx5LgogICAgICovCiAgICAjW0ltbXV0YWJsZV0KICAgIHB1YmxpYyAkY3Vyc29yID0gMDsKCiAgICAvKiBNZXRob2RzICovCgogICAgLyoqCiAgICAgKiBQcm9jZXNzZXMgdGhlIG5leHQgcnVsZSBhbmQgcHJlcGFyZXMgdGhlIHJlc3VsdGluZyB0b2tlbiBkYXRhLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGFybGUtbGV4ZXIuYWR2YW5jZS5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWR2YW5jZSgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBGaW5hbGl6ZSB0aGUgbGV4ZXIgcnVsZSBzZXQKICAgICAqCiAgICAgKiBSdWxlcywgcHJldmlvdXNseSBhZGRlZCB3aXRoIFBhcmxlXExleGVyOjpwdXNoKCkgYXJlIGZpbmFsaXplZC4KICAgICAqIFRoaXMgbWV0aG9kIGNhbGwgaGFzIHRvIGJlIGRvbmUgYWZ0ZXIgYWxsIHRoZSBuZWNlc3NhcnkgcnVsZXMgd2FzIHB1c2hlZC4KICAgICAqIFRoZSBydWxlIHNldCBiZWNvbWVzIHJlYWQgb25seS4gVGhlIGxleGluZyBjYW4gYmVnaW4uCiAgICAgKgogICAgICogQHNlZSBMZXhlcjo6cHVzaCgpCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLWxleGVyLmJ1aWxkLnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWlsZCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBEZWZpbmUgdG9rZW4gY2FsbGJhY2sKICAgICAqCiAgICAgKiBEZWZpbmUgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIG9uY2UgbGV4ZXIgZW5jb3VudGVycyBhIHBhcnRpY3VsYXIgdG9rZW4uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wYXJsZS1sZXhlci5jYWxsb3V0LnBocAogICAgICogQHBhcmFtIGludCAkaWQgVG9rZW4gaWQuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIENhbGxhYmxlIHRvIGJlIGludm9rZWQuIFRoZSBjYWxsYWJsZSBkb2Vzbid0IHJlY2VpdmUgYW55IGFyZ3VtZW50cyBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxsb3V0KGludCAkaWQsIGNhbGxhYmxlICRjYWxsYmFjayk6IHZvaWQge30KCiAgICAvKioKICAgICAqIENvbnN1bWUgdGhlIGRhdGEgZm9yIGxleGluZy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLWxleGVyLmNvbnN1bWUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIERhdGEgdG8gYmUgbGV4ZWQuCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnN1bWUoc3RyaW5nICRkYXRhKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogRHVtcCB0aGUgY3VycmVudCBzdGF0ZSBtYWNoaW5lIHRvIHN0ZG91dC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLWxleGVyLmR1bXAucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGR1bXAoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGN1cnJlbnQgdG9rZW4uCiAgICAgKgogICAgICogQHJldHVybiBUb2tlbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9rZW4oKTogVG9rZW4ge30KCiAgICAvKioKICAgICAqIEluc2VydCBhIHJlZ2V4IG1hY3JvLCB0aGF0IGNhbiBiZSBsYXRlciB1c2VkIGFzIGEgc2hvcnRjdXQgYW5kIGluY2x1ZGVkIGluIG90aGVyIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BhcmxlLWxleGVyLmluc2VydG1hY3JvLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBOYW1lIG9mIHRoZSBtYWNyb3MuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWdleCBSZWd1bGFyIGV4cHJlc3Npb24uCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluc2VydE1hY3JvKHN0cmluZyAkbmFtZSwgc3RyaW5nICRyZWdleCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFB1c2ggYSBwYXR0ZXJuIGZvciBsZXhlbWUgcmVjb2duaXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcmVnZXggUmVndWxhciBleHByZXNzaW9uIHVzZWQgZm9yIHRva2VuIG1hdGNoaW5nLgogICAgICogQHBhcmFtIGludCAkaWQgVG9rZW4gaWQuIElmIHRoZSBsZXhlciBpbnN0YW5jZSBpcyBtZWFudCB0byBiZSB1c2VkIHN0YW5kYWxvbmUsIHRoaXMgY2FuIGJlIGFuIGFyYml0cmFyeSBudW1iZXIuIElmIHRoZSBsZXhlciBpbnN0YW5jZSBpcyBnb2luZyB0byBiZSBwYXNzZWQgdG8gdGhlIHBhcnNlciwgaXQgaGFzIHRvIGJlIGFuIGlkIHJldHVybmVkIGJ5IFBhcmxlXFBhcnNlcjo6dG9rZW5pZCgpLgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXNoKHN0cmluZyAkcmVnZXgsIGludCAkaWQpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBSZXNldCBsZXhpbmcgb3B0aW9uYWxseSBzdXBwbHlpbmcgdGhlIGRlc2lyZWQgb2Zmc2V0LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHBvcyBSZXNldCBwb3NpdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc2V0KGludCAkcG9zKTogdm9pZCB7fQp9Cjw/cGhwCgpuYW1lc3BhY2UgUGFybGU7Cgp1c2UgRXhjZXB0aW9uOwp1c2UgVGhyb3dhYmxlOwoKY2xhc3MgUGFyc2VyRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9Cjw/cGhwCgpuYW1lc3BhY2UgUGFybGU7CgpjbGFzcyBFcnJvckluZm8KewogICAgLyogUHJvcGVydGllcyAqLwogICAgLyoqIEB2YXIgaW50IEVycm9yIGlkLiAqLwogICAgcHVibGljICRpZDsKCiAgICAvKiogQHZhciBpbnQgUG9zaXRpb24gaW4gdGhlIGlucHV0LCB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQuICovCiAgICBwdWJsaWMgJHBvc2l0aW9uOwoKICAgIC8qKiBAdmFyIFRva2VufG51bGwgSWYgYXBwbGljYWJsZSAtIHRoZSBQYXJsZVxUb2tlbiByZWxhdGVkIHRvIHRoZSBlcnJvciwgb3RoZXJ3aXNlIE5VTEwuICovCiAgICBwdWJsaWMgJHRva2VuOwp9Cjw/cGhwCgpkZWZpbmUoJ09BVVRIX1NJR19NRVRIT0RfUlNBU0hBMScsICdSU0EtU0hBMScpOwpkZWZpbmUoJ09BVVRIX1NJR19NRVRIT0RfSE1BQ1NIQTEnLCAnSE1BQy1TSEExJyk7CmRlZmluZSgnT0FVVEhfU0lHX01FVEhPRF9ITUFDU0hBMjU2JywgJ0hNQUMtU0hBMjU2Jyk7CgpkZWZpbmUoJ09BVVRIX0FVVEhfVFlQRV9BVVRIT1JJWkFUSU9OJywgMyk7CmRlZmluZSgnT0FVVEhfQVVUSF9UWVBFX05PTkUnLCAyKTsKZGVmaW5lKCdPQVVUSF9BVVRIX1RZUEVfVVJJJywgMSk7CmRlZmluZSgnT0FVVEhfQVVUSF9UWVBFX0ZPUk0nLCAyKTsKCmRlZmluZSgnT0FVVEhfSFRUUF9NRVRIT0RfR0VUJywgJ0dFVCcpOwpkZWZpbmUoJ09BVVRIX0hUVFBfTUVUSE9EX1BPU1QnLCAnUE9TVCcpOwpkZWZpbmUoJ09BVVRIX0hUVFBfTUVUSE9EX1BVVCcsICdQVVQnKTsKZGVmaW5lKCdPQVVUSF9IVFRQX01FVEhPRF9IRUFEJywgJ0hFQUQnKTsKZGVmaW5lKCdPQVVUSF9IVFRQX01FVEhPRF9ERUxFVEUnLCAnREVMRVRFJyk7CgpkZWZpbmUoJ09BVVRIX1JFUUVOR0lORV9TVFJFQU1TJywgMSk7CmRlZmluZSgnT0FVVEhfUkVRRU5HSU5FX0NVUkwnLCAyKTsKCmRlZmluZSgnT0FVVEhfT0snLCAwKTsKZGVmaW5lKCdPQVVUSF9CQURfTk9OQ0UnLCA0KTsKZGVmaW5lKCdPQVVUSF9CQURfVElNRVNUQU1QJywgOCk7CmRlZmluZSgnT0FVVEhfQ09OU1VNRVJfS0VZX1VOS05PV04nLCAxNik7CmRlZmluZSgnT0FVVEhfQ09OU1VNRVJfS0VZX1JFRlVTRUQnLCAzMik7CmRlZmluZSgnT0FVVEhfSU5WQUxJRF9TSUdOQVRVUkUnLCA2NCk7CmRlZmluZSgnT0FVVEhfVE9LRU5fVVNFRCcsIDEyOCk7CmRlZmluZSgnT0FVVEhfVE9LRU5fRVhQSVJFRCcsIDI1Nik7CmRlZmluZSgnT0FVVEhfVE9LRU5fUkVKRUNURUQnLCAxMDI0KTsKZGVmaW5lKCdPQVVUSF9WRVJJRklFUl9JTlZBTElEJywgMjA0OCk7CmRlZmluZSgnT0FVVEhfUEFSQU1FVEVSX0FCU0VOVCcsIDQwOTYpOwpkZWZpbmUoJ09BVVRIX1NJR05BVFVSRV9NRVRIT0RfUkVKRUNURUQnLCA4MTkyKTsKCi8qKgogKiBHZW5lcmF0ZSBhIFNpZ25hdHVyZSBCYXNlIFN0cmluZwogKgogKiBAcGFyYW0gc3RyaW5nICRodHRwX21ldGhvZAogKiBAcGFyYW0gc3RyaW5nICR1cmkKICogQHBhcmFtIGFycmF5ICRyZXF1ZXN0X3BhcmFtZXRlcnMKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIG9hdXRoX2dldF9zYnMoJGh0dHBfbWV0aG9kLCAkdXJpLCAkcmVxdWVzdF9wYXJhbWV0ZXJzID0gW10pIHt9CgovKioKICogRW5jb2RlIGEgVVJJIHRvIFJGQyAzOTg2CiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVyaQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gb2F1dGhfdXJsZW5jb2RlKCR1cmkpIHt9CgovKioKICogVGhlIE9BdXRoIGV4dGVuc2lvbiBwcm92aWRlcyBhIHNpbXBsZSBpbnRlcmZhY2UgdG8gaW50ZXJhY3Qgd2l0aCBkYXRhIHByb3ZpZGVycyB1c2luZyB0aGUgT0F1dGggSFRUUCBzcGVjaWZpY2F0aW9uIHRvIHByb3RlY3QgcHJpdmF0ZSByZXNvdXJjZXMuCiAqLwpjbGFzcyBPQXV0aAp7CiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwdWJsaWMgJGRlYnVnOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHB1YmxpYyAkc3NsQ2hlY2tzOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwdWJsaWMgJGRlYnVnSW5mbzsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBPQXV0aCBvYmplY3QKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnN1bWVyX2tleQogICAgICogQHBhcmFtIHN0cmluZyAkY29uc3VtZXJfc2VjcmV0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRzaWduYXR1cmVfbWV0aG9kCiAgICAgKiBAcGFyYW0gaW50ICRhdXRoX3R5cGUKICAgICAqIEB0aHJvd3MgXE9BdXRoRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29uc3VtZXJfa2V5LCAkY29uc3VtZXJfc2VjcmV0LCAkc2lnbmF0dXJlX21ldGhvZCA9IE9BVVRIX1NJR19NRVRIT0RfSE1BQ1NIQTEsICRhdXRoX3R5cGUgPSBPQVVUSF9BVVRIX1RZUEVfQVVUSE9SSVpBVElPTikge30KCiAgICAvKioKICAgICAqIFR1cm4gb2ZmIHZlcmJvc2UgZGVidWdnaW5nCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc2FibGVEZWJ1ZygpIHt9CgogICAgLyoqCiAgICAgKiBUdXJuIG9mZiByZWRpcmVjdHMKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzYWJsZVJlZGlyZWN0cygpIHt9CgogICAgLyoqCiAgICAgKiBUdXJuIG9mZiBTU0wgY2hlY2tzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc2FibGVTU0xDaGVja3MoKSB7fQoKICAgIC8qKgogICAgICogVHVybiBvbiB2ZXJib3NlIGRlYnVnZ2luZwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmFibGVEZWJ1ZygpIHt9CgogICAgLyoqCiAgICAgKiBUdXJuIG9uIHJlZGlyZWN0cwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmFibGVSZWRpcmVjdHMoKSB7fQoKICAgIC8qKgogICAgICogVHVybiBvbiBTU0wgY2hlY2tzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuYWJsZVNTTENoZWNrcygpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHRpbWVvdXQKICAgICAqIEBwYXJhbSBpbnQgJHRpbWVvdXQgVGltZSBpbiBtaWxsaXNlY29uZHMKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGltZW91dCgkdGltZW91dCkge30KCiAgICAvKioKICAgICAqIEZldGNoIGFuIE9BdXRoLXByb3RlY3RlZCByZXNvdXJjZQogICAgICogQHBhcmFtIHN0cmluZyAkcHJvdGVjdGVkX3Jlc291cmNlX3VybAogICAgICogQHBhcmFtIGFycmF5ICRleHRyYV9wYXJhbWV0ZXJzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRodHRwX21ldGhvZAogICAgICogQHBhcmFtIGFycmF5ICRodHRwX2hlYWRlcnMKICAgICAqIEB0aHJvd3MgXE9BdXRoRXhjZXB0aW9uCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaCgkcHJvdGVjdGVkX3Jlc291cmNlX3VybCwgJGV4dHJhX3BhcmFtZXRlcnMgPSBbXSwgJGh0dHBfbWV0aG9kID0gbnVsbCwgJGh0dHBfaGVhZGVycyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogRmV0Y2ggYW4gYWNjZXNzIHRva2VuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhY2Nlc3NfdG9rZW5fdXJsCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhdXRoX3Nlc3Npb25faGFuZGxlCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2ZXJpZmllcl90b2tlbgogICAgICogQHRocm93cyBcT0F1dGhFeGNlcHRpb24KICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuKCRhY2Nlc3NfdG9rZW5fdXJsLCAkYXV0aF9zZXNzaW9uX2hhbmRsZSA9IG51bGwsICR2ZXJpZmllcl90b2tlbiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgQ0EgaW5mb3JtYXRpb24KICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENBUGF0aCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGxhc3QgcmVzcG9uc2UKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0UmVzcG9uc2UoKSB7fQoKICAgIC8qKgogICAgICogR2V0IGhlYWRlcnMgZm9yIGxhc3QgcmVzcG9uc2UKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0UmVzcG9uc2VIZWFkZXJzKCkge30KCiAgICAvKioKICAgICAqIEdldCBIVFRQIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsYXN0IHJlc3BvbnNlCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0UmVzcG9uc2VJbmZvKCkge30KCiAgICAvKioKICAgICAqIEdlbmVyYXRlIE9BdXRoIGhlYWRlciBzdHJpbmcgc2lnbmF0dXJlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRodHRwX21ldGhvZAogICAgICogQHBhcmFtIHN0cmluZyAkdXJsCiAgICAgKiBAcGFyYW0gbWl4ZWQgICRleHRyYV9wYXJhbWV0ZXJzCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdEhlYWRlcigkaHR0cF9tZXRob2QsICR1cmwsICRleHRyYV9wYXJhbWV0ZXJzID0gJycpIHt9CgogICAgLyoqCiAgICAgKiBGZXRjaCBhIHJlcXVlc3QgdG9rZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlcXVlc3RfdG9rZW5fdXJsCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjYWxsYmFja191cmwKICAgICAqIEBwYXJhbSBzdHJpbmcgJGh0dHBfbWV0aG9kCiAgICAgKiBAdGhyb3dzIFxPQXV0aEV4Y2VwdGlvbgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdFRva2VuKCRyZXF1ZXN0X3Rva2VuX3VybCwgJGNhbGxiYWNrX3VybCA9IG51bGwsICRodHRwX21ldGhvZCA9ICdHRVQnKSB7fQoKICAgIC8qKgogICAgICogU2V0IGF1dGhvcml6YXRpb24gdHlwZQogICAgICogQHBhcmFtIGludCAkYXV0aF90eXBlCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEF1dGhUeXBlKCRhdXRoX3R5cGUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgQ0EgcGF0aCBhbmQgaW5mbwogICAgICogQHBhcmFtIHN0cmluZyAkY2FfcGF0aAogICAgICogQHBhcmFtIHN0cmluZyAkY2FfaW5mbwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q0FQYXRoKCRjYV9wYXRoID0gbnVsbCwgJGNhX2luZm8gPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBub25jZSBmb3Igc3Vic2VxdWVudCByZXF1ZXN0cwogICAgICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE5vbmNlKCRub25jZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHJlcWVuZ2luZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZXF1ZXN0RW5naW5lKCRyZXFlbmdpbmUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIFJTQSBjZXJ0aWZpY2F0ZQogICAgICogQHBhcmFtIHN0cmluZyAkY2VydAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UlNBQ2VydGlmaWNhdGUoJGNlcnQpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHRpbWVzdGFtcAogICAgICogQHBhcmFtIHN0cmluZyAkdGltZXN0YW1wCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lc3RhbXAoJHRpbWVzdGFtcCkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgdG9rZW4gYW5kIHNlY3JldAogICAgICogQHBhcmFtIHN0cmluZyAkdG9rZW4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHRva2VuX3NlY3JldAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUb2tlbigkdG9rZW4sICR0b2tlbl9zZWNyZXQpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIE9BdXRoIHZlcnNpb24KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24KICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VmVyc2lvbigkdmVyc2lvbikge30KfQoKY2xhc3MgT0F1dGhFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KewogICAgLyoqCiAgICAgKiBUaGUgcmVzcG9uc2Ugb2YgdGhlIGV4Y2VwdGlvbiB3aGljaCBvY2N1cnJlZCwgaWYgYW55CiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGxhc3RSZXNwb25zZTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHVibGljICRkZWJ1Z0luZm87Cn0KCjsKCi8qKgogKiBNYW5hZ2VzIGFuIE9BdXRoIHByb3ZpZGVyIGNsYXNzLgogKi8KY2xhc3MgT0F1dGhQcm92aWRlcgp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlcV9wYXJhbXMKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gYWRkUmVxdWlyZWRQYXJhbWV0ZXIoJHJlcV9wYXJhbXMpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhbGxjb25zdW1lckhhbmRsZXIoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxsVGltZXN0YW1wTm9uY2VIYW5kbGVyKCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FsbHRva2VuSGFuZGxlcigpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja09BdXRoUmVxdWVzdCgkdXJpID0gJycsICRtZXRob2QgPSAnJykge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1zX2FycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGFyYW1zX2FycmF5KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFja19mdW5jdGlvbgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb25zdW1lckhhbmRsZXIoJGNhbGxiYWNrX2Z1bmN0aW9uKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkc2l6ZQogICAgICogQHBhcmFtIGJvb2wgJHN0cm9uZwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZVRva2VuKCRzaXplLCAkc3Ryb25nID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHBhcmFtc19hcnJheQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpczJMZWdnZWRFbmRwb2ludCgkcGFyYW1zX2FycmF5KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGJvb2wgJHdpbGxfaXNzdWVfcmVxdWVzdF90b2tlbgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlcXVlc3RUb2tlbkVuZHBvaW50KCR3aWxsX2lzc3VlX3JlcXVlc3RfdG9rZW4pIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZXFfcGFyYW1zCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHJlbW92ZVJlcXVpcmVkUGFyYW1ldGVyKCRyZXFfcGFyYW1zKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkb2F1dGhleGNlcHRpb24KICAgICAqIEBwYXJhbSBib29sICRzZW5kX2hlYWRlcnMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVwb3J0UHJvYmxlbSgkb2F1dGhleGNlcHRpb24sICRzZW5kX2hlYWRlcnMgPSB0cnVlKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkcGFyYW1fa2V5CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHBhcmFtX3ZhbAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXJhbSgkcGFyYW1fa2V5LCAkcGFyYW1fdmFsID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gc2V0UmVxdWVzdFRva2VuUGF0aCgkcGF0aCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2tfZnVuY3Rpb24KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGltZXN0YW1wTm9uY2VIYW5kbGVyKCRjYWxsYmFja19mdW5jdGlvbikge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2tfZnVuY3Rpb24KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9rZW5IYW5kbGVyKCRjYWxsYmFja19mdW5jdGlvbikge30KfQo8P3BocAoKLy8gU3RhcnQgb2YgeHNsIHYuMC4xCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxUZW50YXRpdmVUeXBlOwoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueHNsdHByb2Nlc3Nvci5waHAKICovCmNsYXNzIFhTTFRQcm9jZXNzb3IKewogICAgLyoqCiAgICAgKiBJbXBvcnQgc3R5bGVzaGVldAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94c2x0cHJvY2Vzc29yLmltcG9ydHN0eWxlc2hlZXQucGhwCiAgICAgKiBAcGFyYW0gb2JqZWN0ICRzdHlsZXNoZWV0IDxwPgogICAgICogVGhlIGltcG9ydGVkIHN0eWxlIHNoZWV0IGFzIGEgPGI+RE9NRG9jdW1lbnQ8L2I+IG9yCiAgICAgKiA8Yj5TaW1wbGVYTUxFbGVtZW50PC9iPiBvYmplY3QuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGltcG9ydFN0eWxlc2hlZXQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnb2JqZWN0J10sIGRlZmF1bHQ6ICcnKV0gJHN0eWxlc2hlZXQpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBUcmFuc2Zvcm0gdG8gYSBET01Eb2N1bWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94c2x0cHJvY2Vzc29yLnRyYW5zZm9ybXRvZG9jLnBocAogICAgICogQHBhcmFtIG9iamVjdCAkZG9jdW1lbnQgVGhlIERPTURvY3VtZW50IG9yIFNpbXBsZVhNTEVsZW1lbnQgb3IgbGlieG1sLWNvbXBhdGlibGUgb2JqZWN0IHRvIGJlIHRyYW5zZm9ybWVkLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXR1cm5DbGFzcwogICAgICogQHJldHVybiBET01Eb2N1bWVudHxmYWxzZSBUaGUgcmVzdWx0aW5nIDxiPkRPTURvY3VtZW50PC9iPiBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2Zvcm1Ub0RvYygKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdvYmplY3QnXSwgZGVmYXVsdDogJycpXSAkZG9jdW1lbnQsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkcmV0dXJuQ2xhc3MgPSBudWxsCiAgICApOiBvYmplY3R8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFRyYW5zZm9ybSB0byBVUkkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veHNsdHByb2Nlc3Nvci50cmFuc2Zvcm10b3VyaS5waHAKICAgICAqIEBwYXJhbSBET01Eb2N1bWVudHxTaW1wbGVYTUxFbGVtZW50ICRkb2N1bWVudCA8cD4KICAgICAqIFRoZSBkb2N1bWVudCB0byB0cmFuc2Zvcm0uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmkgPHA+CiAgICAgKiBUaGUgdGFyZ2V0IFVSSSBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uLgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIDxiPkZBTFNFPC9iPiBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHRyYW5zZm9ybVRvVXJpKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ29iamVjdCddLCBkZWZhdWx0OiAnJyldICRkb2N1bWVudCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkdXJpCiAgICApOiBpbnQge30KCiAgICAvKioKICAgICAqIFRyYW5zZm9ybSB0byBYTUwKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veHNsdHByb2Nlc3Nvci50cmFuc2Zvcm10b3htbC5waHAKICAgICAqIEBwYXJhbSBET01Eb2N1bWVudHxTaW1wbGVYTUxFbGVtZW50ICRkb2N1bWVudCA8cD4KICAgICAqIFRoZSB0cmFuc2Zvcm1lZCBkb2N1bWVudC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlfG51bGwgVGhlIHJlc3VsdCBvZiB0aGUgdHJhbnNmb3JtYXRpb24gYXMgYSBzdHJpbmcgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdHJhbnNmb3JtVG9YbWwoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnb2JqZWN0J10sIGRlZmF1bHQ6ICcnKV0gJGRvY3VtZW50KTogc3RyaW5nfGZhbHNlfG51bGwge30KCiAgICAvKioKICAgICAqIFNldCB2YWx1ZSBmb3IgYSBwYXJhbWV0ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veHNsdHByb2Nlc3Nvci5zZXRwYXJhbWV0ZXIucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2UgPHA+CiAgICAgKiBUaGUgbmFtZXNwYWNlIFVSSSBvZiB0aGUgWFNMVCBwYXJhbWV0ZXIuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogICAgICogVGhlIGxvY2FsIG5hbWUgb2YgdGhlIFhTTFQgcGFyYW1ldGVyLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUgPHA+CiAgICAgKiBUaGUgbmV3IHZhbHVlIG9mIHRoZSBYU0xUIHBhcmFtZXRlci4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGFyYW1ldGVyKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lc3BhY2UsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYXJyYXl8c3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUgPSBudWxsCiAgICApOmJvb2wge30KCiAgICAvKioKICAgICAqIEdldCB2YWx1ZSBvZiBhIHBhcmFtZXRlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94c2x0cHJvY2Vzc29yLmdldHBhcmFtZXRlci5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWVzcGFjZSA8cD4KICAgICAqIFRoZSBuYW1lc3BhY2UgVVJJIG9mIHRoZSBYU0xUIHBhcmFtZXRlci4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBUaGUgbG9jYWwgbmFtZSBvZiB0aGUgWFNMVCBwYXJhbWV0ZXIuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciAoYXMgYSBzdHJpbmcpLCBvciA8Yj5GQUxTRTwvYj4gaWYgaXQncyBub3Qgc2V0LgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyYW1ldGVyKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lc3BhY2UsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUKICAgICk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIHBhcmFtZXRlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94c2x0cHJvY2Vzc29yLnJlbW92ZXBhcmFtZXRlci5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWVzcGFjZSA8cD4KICAgICAqIFRoZSBuYW1lc3BhY2UgVVJJIG9mIHRoZSBYU0xUIHBhcmFtZXRlci4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBUaGUgbG9jYWwgbmFtZSBvZiB0aGUgWFNMVCBwYXJhbWV0ZXIuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZVBhcmFtZXRlcigKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZXNwYWNlLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgaWYgUEhQIGhhcyBFWFNMVCBzdXBwb3J0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3hzbHRwcm9jZXNzb3IuaGFzZXhzbHRzdXBwb3J0LnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS4wLjQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGhhc0V4c2x0U3VwcG9ydCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBFbmFibGVzIHRoZSBhYmlsaXR5IHRvIHVzZSBQSFAgZnVuY3Rpb25zIGFzIFhTTFQgZnVuY3Rpb25zCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3hzbHRwcm9jZXNzb3IucmVnaXN0ZXJwaHBmdW5jdGlvbnMucGhwCiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nfG51bGwgJGZ1bmN0aW9ucyBbb3B0aW9uYWxdIDxwPgogICAgICogVXNlIHRoaXMgcGFyYW1ldGVyIHRvIG9ubHkgYWxsb3cgY2VydGFpbiBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGZyb20KICAgICAqIFhTTFQuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgKGEgZnVuY3Rpb24gbmFtZSkgb3IgYW4gYXJyYXkgb2YKICAgICAqIGZ1bmN0aW9ucy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqIEBzaW5jZSA1LjAuNAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXJQSFBGdW5jdGlvbnMoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYXJyYXl8c3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkZnVuY3Rpb25zID0gbnVsbCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFNldHMgcHJvZmlsaW5nIG91dHB1dCBmaWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3hzbHRwcm9jZXNzb3Iuc2V0cHJvZmlsaW5nLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAgICAgKiBQYXRoIHRvIHRoZSBmaWxlIHRvIGR1bXAgcHJvZmlsaW5nIGluZm9ybWF0aW9uLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQcm9maWxpbmcoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkZmlsZW5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgc2VjdXJpdHkgcHJlZmVyZW5jZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veHNsdHByb2Nlc3Nvci5zZXRzZWN1cml0eXByZWZzLnBocAogICAgICogQHBhcmFtIGludCAkcHJlZmVyZW5jZXMKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAc2luY2UgNS40CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTZWN1cml0eVByZWZzKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRwcmVmZXJlbmNlcyk6IGludCB7fQoKICAgIC8qKgogICAgICogR2V0IHNlY3VyaXR5IHByZWZlcmVuY2VzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3hzbHRwcm9jZXNzb3IuZ2V0c2VjdXJpdHlwcmVmcy5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAc2luY2UgNS40CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZWN1cml0eVByZWZzKCk6IGludCB7fQp9CmRlZmluZSgnWFNMX0NMT05FX0FVVE8nLCAwKTsKZGVmaW5lKCdYU0xfQ0xPTkVfTkVWRVInLCAtMSk7CmRlZmluZSgnWFNMX0NMT05FX0FMV0FZUycsIDEpOwoKLyoqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veHNsLmNvbnN0YW50cy5waHAgKi8KZGVmaW5lKCdYU0xfU0VDUFJFRl9OT05FJywgMCk7Ci8qKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3hzbC5jb25zdGFudHMucGhwICovCmRlZmluZSgnWFNMX1NFQ1BSRUZfUkVBRF9GSUxFJywgMik7Ci8qKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3hzbC5jb25zdGFudHMucGhwICovCmRlZmluZSgnWFNMX1NFQ1BSRUZfV1JJVEVfRklMRScsIDQpOwovKiogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94c2wuY29uc3RhbnRzLnBocCAqLwpkZWZpbmUoJ1hTTF9TRUNQUkVGX0NSRUFURV9ESVJFQ1RPUlknLCA4KTsKLyoqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veHNsLmNvbnN0YW50cy5waHAgKi8KZGVmaW5lKCdYU0xfU0VDUFJFRl9SRUFEX05FVFdPUksnLCAxNik7Ci8qKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3hzbC5jb25zdGFudHMucGhwICovCmRlZmluZSgnWFNMX1NFQ1BSRUZfV1JJVEVfTkVUV09SSycsIDMyKTsKLyoqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veHNsLmNvbnN0YW50cy5waHAgKi8KZGVmaW5lKCdYU0xfU0VDUFJFRl9ERUZBVUxUJywgNDQpOwoKLyoqCiAqIGxpYnhzbHQgdmVyc2lvbiBsaWtlIDEwMTE3LiBBdmFpbGFibGUgYXMgb2YgUEhQIDUuMS4yLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3hzbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xJQlhTTFRfVkVSU0lPTicsIDEwMTI4KTsKCi8qKgogKiBsaWJ4c2x0IHZlcnNpb24gbGlrZSAxLjEuMTcuIEF2YWlsYWJsZSBhcyBvZiBQSFAgNS4xLjIuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veHNsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCWFNMVF9ET1RURURfVkVSU0lPTicsICIxLjEuMjgiKTsKCi8qKgogKiBsaWJleHNsdCB2ZXJzaW9uIGxpa2UgODEzLiBBdmFpbGFibGUgYXMgb2YgUEhQIDUuMS4yLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3hzbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xJQkVYU0xUX1ZFUlNJT04nLCA4MTcpOwoKLyoqCiAqIGxpYmV4c2x0IHZlcnNpb24gbGlrZSAxLjEuMTcuIEF2YWlsYWJsZSBhcyBvZiBQSFAgNS4xLjIuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veHNsLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCRVhTTFRfRE9UVEVEX1ZFUlNJT04nLCAiMS4xLjI4Iik7CgovLyBFbmQgb2YgeHNsIHYuMC4xCjw/cGhwCgovLyBUaGUgRXZlbnQgY2xhc3MKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbW11dGFibGU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cUHVyZTsKCi8qKgogKiBFdmVudC4KICogRXZlbnQgY2xhc3MgcmVwcmVzZW50cyBhbmQgZXZlbnQgZmlyaW5nIG9uIGEgZmlsZSBkZXNjcmlwdG9yIGJlaW5nIHJlYWR5IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0bzsgYSBmaWxlIGRlc2NyaXB0b3IgYmVjb21pbmcgcmVhZHkgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvKGVkZ2UtdHJpZ2dlcmVkIEkvTyBvbmx5KTsgYSB0aW1lb3V0IGV4cGlyaW5nOyBhIHNpZ25hbCBvY2N1cnJpbmc7IGEgdXNlci10cmlnZ2VyZWQgZXZlbnQuCiAqIEV2ZXJ5IGV2ZW50IGlzIGFzc29jaWF0ZWQgd2l0aCBFdmVudEJhc2UgLiBIb3dldmVyLCBldmVudCB3aWxsIG5ldmVyIGZpcmUgdW50aWwgaXQgaXMgYWRkZWQgKHZpYSBFdmVudDo6YWRkKCkgKS4gQW4gYWRkZWQgZXZlbnQgcmVtYWlucyBpbiBwZW5kaW5nIHN0YXRlIHVudGlsIHRoZSByZWdpc3RlcmVkIGV2ZW50IG9jY3VycywgdGh1cyB0dXJuaW5nIGl0IHRvIGFjdGl2ZSBzdGF0ZS4gVG8gaGFuZGxlIGV2ZW50cyB1c2VyIG1heSByZWdpc3RlciBhIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIGV2ZW50IGJlY29tZXMgYWN0aXZlLiBJZiBldmVudCBpcyBjb25maWd1cmVkIHBlcnNpc3RlbnQgLCBpdCByZW1haW5zIHBlbmRpbmcuIElmIGl0IGlzIG5vdCBwZXJzaXN0ZW50LCBpdCBzdG9wcyBiZWluZyBwZW5kaW5nIHdoZW4gaXQncyBjYWxsYmFjayBydW5zLiBFdmVudDo6ZGVsKCkgbWV0aG9kIGRlbGV0ZXMgZXZlbnQsIHRodXMgbWFraW5nIGl0IG5vbi1wZW5kaW5nLiBCeSBtZWFucyBvZiBFdmVudDo6YWRkKCkgbWV0aG9kIGl0IGNvdWxkIGJlIGFkZGVkIGFnYWluLgogKgogKiBAYXV0aG9yIEthenVha2kgTUFCVUNISQogKiBAY29weXJpZ2h0INChb3B5cmlnaHQgKGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvY2MubGljZW5zZS5waHApIGJ5IHRoZSBQSFAgRG9jdW1lbnRhdGlvbiBHcm91cCBpcyBsaWNlbnNlZCB1bmRlciBbQ0MgYnkgMy4wIG9yIGxhdGVyXShodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLykuCiAqCiAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5ldmVudC5waHAKICovCmZpbmFsIGNsYXNzIEV2ZW50CnsKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgICNbSW1tdXRhYmxlXQogICAgcHVibGljICRwZW5kaW5nOwogICAgcHVibGljIGNvbnN0IEVUID0gMzI7CiAgICBwdWJsaWMgY29uc3QgUEVSU0lTVCA9IDE2OwogICAgcHVibGljIGNvbnN0IFJFQUQgPSAyOwogICAgcHVibGljIGNvbnN0IFdSSVRFID0gNDsKICAgIHB1YmxpYyBjb25zdCBTSUdOQUwgPSA4OwogICAgcHVibGljIGNvbnN0IFRJTUVPVVQgPSAxOwoKICAgIC8qKgogICAgICogX19jb25zdHJ1Y3QuCiAgICAgKiBDb25zdHJ1Y3RzIEV2ZW50IG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZlbnRCYXNlICRiYXNlCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgICRmZAogICAgICogQHBhcmFtIGludCAgICAgICAkd2hhdAogICAgICogQHBhcmFtIGNhbGxhYmxlICAkY2IKICAgICAqIEBwYXJhbSBtaXhlZCAgICAgJGFyZyAgPSBudWxsCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50LmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEV2ZW50QmFzZSAkYmFzZSwgJGZkLCBpbnQgJHdoYXQsIGNhbGxhYmxlICRjYiwgJGFyZyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBhZGQuCiAgICAgKiBNYWtlcyBldmVudCBwZW5kaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkdGltZW91dCAob3B0aW9uYWwpCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50LmFkZC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZChmbG9hdCAkdGltZW91dCA9IC0xKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogYWRkU2lnbmFsLgogICAgICogTWFrZXMgc2lnbmFsIGV2ZW50IHBlbmRpbmcuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR0aW1lb3V0IChvcHRpb25hbCkKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnQuYWRkc2lnbmFsLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkU2lnbmFsKGZsb2F0ICR0aW1lb3V0ID0gLTEpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBhZGRUaW1lci4KICAgICAqIE1ha2VzIHRpbWVyIGV2ZW50IHBlbmRpbmcuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR0aW1lb3V0IChvcHRpb25hbCkKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnQuYWRkdGltZXIucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRUaW1lcihmbG9hdCAkdGltZW91dCA9IC0xKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogZGVsLgogICAgICogTWFrZXMgZXZlbnQgbm9uLXBlbmRpbmcuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50LmRlbC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlbCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBkZWxTaWduYWwuCiAgICAgKiBNYWtlcyBzaWduYWwgZXZlbnQgbm9uLXBlbmRpbmcuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50LmRlbHNpZ25hbC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlbFNpZ25hbCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBkZWxUaW1lci4KICAgICAqIE1ha2VzIHRpbWVyIGV2ZW50IG5vbi1wZW5kaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudC5kZWx0aW1lci5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlbFRpbWVyKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIGZyZWUuCiAgICAgKiBNYWtlIGV2ZW50IG5vbi1wZW5kaW5nIGFuZCBmcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIHRoaXMgZXZlbnQuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50LmZyZWUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcmVlKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIGdldFN1cHBvcnRlZE1ldGhvZHMuCiAgICAgKiBSZXR1cm5zIGFycmF5IHdpdGggb2YgdGhlIG5hbWVzIG9mIHRoZSBtZXRob2RzIHN1cHBvcnRlZCBpbiB0aGlzIHZlcnNpb24gb2YgTGliZXZlbnQuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudC5nZXRzdXBwb3J0ZWRtZXRob2RzLnBocAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFN1cHBvcnRlZE1ldGhvZHMoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIHBlbmRpbmcuCiAgICAgKiBEZXRlY3RzIHdoZXRoZXIgZXZlbnQgaXMgcGVuZGluZyBvciBzY2hlZHVsZWQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkZmxhZ3MKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnQucGVuZGluZy5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBlbmRpbmcoaW50ICRmbGFncyk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHNldC4KICAgICAqIFJlLWNvbmZpZ3VyZXMgZXZlbnQuCiAgICAgKgogICAgICogQHBhcmFtIEV2ZW50QmFzZSAkYmFzZQogICAgICogQHBhcmFtIG1peGVkICAgICAkZmQKICAgICAqIEBwYXJhbSBpbnQgICAgICAgJHdoYXQgKG9wdGlvbmFsKQogICAgICogQHBhcmFtIGNhbGxhYmxlICAkY2IgICAob3B0aW9uYWwpCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgICRhcmcgIChvcHRpb25hbCkKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnQuc2V0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KEV2ZW50QmFzZSAkYmFzZSwgJGZkLCBpbnQgJHdoYXQsIGNhbGxhYmxlICRjYiwgJGFyZyk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHNldFByaW9yaXR5LgogICAgICogU2V0IGV2ZW50IHByaW9yaXR5LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHByaW9yaXR5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnQuc2V0cHJpb3JpdHkucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQcmlvcml0eShpbnQgJHByaW9yaXR5KTogYm9vbCB7fQoKICAgIC8qKgogICAgICogc2V0VGltZXIuCiAgICAgKiBSZS1jb25maWd1cmVzIHRpbWVyIGV2ZW50LgogICAgICoKICAgICAqIEBwYXJhbSBFdmVudEJhc2UgJGJhc2UKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAgJGNiCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgICRhcmcgIChvcHRpb25hbCkKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnQuc2V0dGltZXIucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lcihFdmVudEJhc2UgJGJhc2UsIGNhbGxhYmxlICRjYiwgJGFyZyk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHNpZ25hbC4KICAgICAqIENvbnN0cnVjdHMgc2lnbmFsIGV2ZW50IG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZlbnRCYXNlICRiYXNlCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICRzaWdudW0KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAgJGNiCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgICRhcmcgICAgKG9wdGlvbmFsKQogICAgICoKICAgICAqIEByZXR1cm4gRXZlbnQKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnQuc2lnbmFsLnBocAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNpZ25hbChFdmVudEJhc2UgJGJhc2UsIGludCAkc2lnbnVtLCBjYWxsYWJsZSAkY2IsICRhcmcpOiBFdmVudCB7fQoKICAgIC8qKgogICAgICogdGltZXIuCiAgICAgKiBDb25zdHJ1Y3RzIHRpbWVyIGV2ZW50IG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZlbnRCYXNlICRiYXNlCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgICRjYgogICAgICogQHBhcmFtIG1peGVkICAgICAkYXJnICAob3B0aW9uYWwpCiAgICAgKgogICAgICogQHJldHVybiBFdmVudAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudC50aW1lci5waHAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0aW1lcihFdmVudEJhc2UgJGJhc2UsIGNhbGxhYmxlICRjYiwgJGFyZyk6IEV2ZW50IHt9Cn0KCi8vICBUaGUgRXZlbnRCYXNlIGNsYXNzCi8qKgogKiBFdmVudEJhc2UuCiAqIEV2ZW50QmFzZSBjbGFzcyByZXByZXNlbnRzIGxpYmV2ZW50J3MgZXZlbnQgYmFzZSBzdHJ1Y3R1cmUuIEl0IGhvbGRzIGEgc2V0IG9mIGV2ZW50cyBhbmQgY2FuIHBvbGwgdG8gZGV0ZXJtaW5lIHdoaWNoIGV2ZW50cyBhcmUgYWN0aXZlLgogKiBFYWNoIGV2ZW50IGJhc2UgaGFzIGEgbWV0aG9kLCBvciBhIGJhY2tlbmQgdGhhdCBpdCB1c2VzIHRvIGRldGVybWluZSB3aGljaCBldmVudHMgYXJlIHJlYWR5LiBUaGUgcmVjb2duaXplZCBtZXRob2RzIGFyZTogc2VsZWN0LCBwb2xsLCBlcG9sbCwga3F1ZXVlLCBkZXZwb2xsLCBldnBvcnQgYW5kIHdpbjMyIC4KICogVG8gY29uZmlndXJlIGV2ZW50IGJhc2UgdG8gdXNlLCBvciBhdm9pZCBzcGVjaWZpYyBiYWNrZW5kIEV2ZW50Q29uZmlnIGNsYXNzIGNhbiBiZSB1c2VkLgogKgogKiBAYXV0aG9yIEthenVha2kgTUFCVUNISQogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoaHR0cHM6Ly9waHAubmV0L21hbnVhbC9jYy5saWNlbnNlLnBocCkgYnkgdGhlIFBIUCBEb2N1bWVudGF0aW9uIEdyb3VwIGlzIGxpY2Vuc2VkIHVuZGVyIFtDQyBieSAzLjAgb3IgbGF0ZXJdKGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvKS4KICoKICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmV2ZW50YmFzZS5waHAKICovCmZpbmFsIGNsYXNzIEV2ZW50QmFzZQp7CiAgICBwdWJsaWMgY29uc3QgTE9PUF9PTkNFID0gMTsKICAgIHB1YmxpYyBjb25zdCBMT09QX05PTkJMT0NLID0gMjsKICAgIHB1YmxpYyBjb25zdCBOT0xPQ0sgPSAxOwogICAgcHVibGljIGNvbnN0IFNUQVJUVVBfSU9DUCA9IDQ7CiAgICBwdWJsaWMgY29uc3QgTk9fQ0FDSEVfVElNRSA9IDg7CiAgICBwdWJsaWMgY29uc3QgRVBPTExfVVNFX0NIQU5HRUxJU1QgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBJR05PUkVfRU5WID0gMjsKICAgIHB1YmxpYyBjb25zdCBQUkVDSVNFX1RJTUVSID0gMzI7CgogICAgLyoqCiAgICAgKiBfX2NvbnN0cnVjdC4KICAgICAqIENvbnN0cnVjdHMgRXZlbnRCYXNlIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gbnVsbHxFdmVudENvbmZpZyAkY2ZnCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YmFzZS5jb25zdHJ1Y3QucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/RXZlbnRDb25maWcgJGNmZyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBkaXNwYXRjaC4KICAgICAqIERpc3BhdGNoIHBlbmRpbmcgZXZlbnRzLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJhc2UuZGlzcGF0Y2gucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwYXRjaCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBleGl0LgogICAgICogU3RvcCBkaXNwYXRjaGluZyBldmVudHMuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR0aW1lb3V0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YmFzZS5leGl0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhpdChmbG9hdCAkdGltZW91dCA9IDAuMCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIGZyZWUuCiAgICAgKiBGcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIHRoaXMgZXZlbnQgYmFzZS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnRiYXNlLmZyZWUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcmVlKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIGdldEZlYXR1cmVzLgogICAgICogUmV0dXJucyBiaXRtYXNrIG9mIGZlYXR1cmVzIHN1cHBvcnRlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJhc2UuZ2V0ZmVhdHVyZXMucGhwCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGZWF0dXJlcygpOiBpbnQge30KCiAgICAvKioKICAgICAqIGdldE1ldGhvZC4KICAgICAqIFJldHVybnMgZXZlbnQgbWV0aG9kIGluIHVzZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJhc2UuZ2V0bWV0aG9kLnBocAogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0aG9kKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogZ2V0VGltZU9mRGF5Q2FjaGVkLgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBldmVudCBiYXNlIHRpbWUuCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJhc2UuZ2V0dGltZW9mZGF5Y2FjaGVkLnBocAogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGltZU9mRGF5Q2FjaGVkKCk6IGZsb2F0IHt9CgogICAgLyoqCiAgICAgKiBnb3RFeGl0LgogICAgICogQ2hlY2tzIGlmIHRoZSBldmVudCBsb29wIHdhcyB0b2xkIHRvIGV4aXQuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YmFzZS5nb3RleGl0LnBocAogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ290RXhpdCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBnb3RTdG9wLgogICAgICogQ2hlY2tzIGlmIHRoZSBldmVudCBsb29wIHdhcyB0b2xkIHRvIGV4aXQuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YmFzZS5nb3RzdG9wLnBocAogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ290U3RvcCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBsb29wLgogICAgICogRGlzcGF0Y2ggcGVuZGluZyBldmVudHMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkZmxhZ3MKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnRiYXNlLmxvb3AucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb29wKGludCAkZmxhZ3MgPSAtMSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHByaW9yaXR5SW5pdC4KICAgICAqIFNldHMgbnVtYmVyIG9mIHByaW9yaXRpZXMgcGVyIGV2ZW50IGJhc2UuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbl9wcmlvcml0aWVzCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YmFzZS5wcmlvcml0eWluaXQucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmlvcml0eUluaXQoaW50ICRuX3ByaW9yaXRpZXMpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiByZUluaXQuCiAgICAgKiBSZV1pbml0aWFsaXplIGV2ZW50IGJhc2UoYWZ0ZXIgYSBmb3JrKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnRiYXNlLnJlaW5pdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlSW5pdCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBUZWxscyBldmVudF9iYXNlIHRvIHJlc3VtZSBwcmV2aW91c2x5IHN0b3BwZWQgZXZlbnQKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHNpbmNlIGxpYmV2ZW50IHZlcnNpb24gMi4xLjItYWxwaGEKICAgICAqIEBzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL29zbWFub3YvcGVjbC1ldmVudC9zcmMvOGU1YWI3MzAzZjNlZjc4MjdiNzFmMzE5MDRhNTFiM2YyNmRkMWFjMi9waHA4L2NsYXNzZXMvYmFzZS5jI2xpbmVzLTM4NwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzdW1lKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHN0b3AuCiAgICAgKiBUZWxscyBldmVudF9iYXNlIHRvIHN0b3AgZGlzcGF0Y2hpbmcgZXZlbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJhc2Uuc3RvcC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0b3AoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogVXBkYXRlcyBjYWNoZSB0aW1lCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEBzaW5jZSBsaWJldmVudCAyLjEuMS1hbHBoYQogICAgICogQHNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvb3NtYW5vdi9wZWNsLWV2ZW50L3NyYy84ZTVhYjczMDNmM2VmNzgyN2I3MWYzMTkwNGE1MWIzZjI2ZGQxYWMyL3BocDgvY2xhc3Nlcy9iYXNlLmMjbGluZXMtMzQzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1cGRhdGVDYWNoZVRpbWUoKTogYm9vbCB7fQp9CgovLyBUaGUgRXZlbnRCdWZmZXIgY2xhc3MKLyoqCiAqIEV2ZW50QnVmZmVyLgogKiBFdmVudEJ1ZmZlciByZXByZXNlbnRzIExpYmV2ZW50J3MgImV2YnVmZmVyIiwgYW4gdXRpbGl0eSBmdW5jdGlvbmFsaXR5IGZvciBidWZmZXJlZCBJL08uCiAqIEV2ZW50IGJ1ZmZlcnMgYXJlIG1lYW50IHRvIGJlIGdlbmVyYWxseSB1c2VmdWwgZm9yIGRvaW5nIHRoZSAiYnVmZmVyIiBwYXJ0IG9mIGJ1ZmZlcmVkIG5ldHdvcmsgSS9PLgogKgogKiBAYXV0aG9yIEthenVha2kgTUFCVUNISQogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoaHR0cHM6Ly9waHAubmV0L21hbnVhbC9jYy5saWNlbnNlLnBocCkgYnkgdGhlIFBIUCBEb2N1bWVudGF0aW9uIEdyb3VwIGlzIGxpY2Vuc2VkIHVuZGVyIFtDQyBieSAzLjAgb3IgbGF0ZXJdKGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvKS4KICoKICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmV2ZW50YnVmZmVyLnBocAogKi8KY2xhc3MgRXZlbnRCdWZmZXIKewogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICAjW0ltbXV0YWJsZV0KICAgIHB1YmxpYyAkbGVuZ3RoOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgI1tJbW11dGFibGVdCiAgICBwdWJsaWMgJGNvbnRpZ3VvdXNfc3BhY2U7CiAgICBwdWJsaWMgY29uc3QgRU9MX0FOWSA9IDA7CiAgICBwdWJsaWMgY29uc3QgRU9MX0NSTEYgPSAxOwogICAgcHVibGljIGNvbnN0IEVPTF9DUkxGX1NUUklDVCA9IDI7CiAgICBwdWJsaWMgY29uc3QgRU9MX0xGID0gMzsKICAgIHB1YmxpYyBjb25zdCBFT0xfTlVMID0gNDsKICAgIHB1YmxpYyBjb25zdCBQVFJfU0VUID0gMDsKICAgIHB1YmxpYyBjb25zdCBQVFJfQUREID0gMTsKCiAgICAvKioKICAgICAqIF9fY29uc3RydWN0LgogICAgICogQ29uc3RydWN0cyBFdmVudEJ1ZmZlciBvYmplY3QuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyLmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIGFkZC4KICAgICAqIEFwcGVuZCBkYXRhIHRvIHRoZSBlbmQgb2YgYW4gZXZlbnQgYnVmZmVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnRidWZmZXIuYWRkLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKHN0cmluZyAkZGF0YSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIGFkZEJ1ZmZlci4KICAgICAqIE1vdmUgYWxsIGRhdGEgZnJvbSBhIGJ1ZmZlciBwcm92aWRlZCB0byB0aGUgY3VycmVudCBpbnN0YW5jZSBvZiBFdmVudEJ1ZmZlci4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZlbnRCdWZmZXIgJGJ1ZgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlci5hZGRidWZmZXIucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRCdWZmZXIoRXZlbnRCdWZmZXIgJGJ1Zik6IGJvb2wge30KCiAgICAvKioKICAgICAqIGFwcGVuZEZyb20uCiAgICAgKiBNb3ZlcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBmcm9tIGEgc291cmNlIGJ1ZmZlciB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJ1ZmZlci4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZlbnRCdWZmZXIgJGJ1ZgogICAgICogQHBhcmFtIGludCAgICAgICAgICRsZW4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlci5hcHBlbmRmcm9tLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kRnJvbShFdmVudEJ1ZmZlciAkYnVmLCBpbnQgJGxlbik6IGludCB7fQoKICAgIC8qKgogICAgICogY29weW91dC4KICAgICAqIENvcGllcyBvdXQgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBmcm9tIHRoZSBmcm9udCBvZiB0aGUgYnVmZmVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJiRkYXRhCiAgICAgKiBAcGFyYW0gaW50ICAgICRtYXhfYnl0ZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlci5jb3B5b3V0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29weW91dChzdHJpbmcgJiRkYXRhLCBpbnQgJG1heF9ieXRlcyk6IGludCB7fQoKICAgIC8qKgogICAgICogZHJhaW4uCiAgICAgKiBSZW1vdmVzIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIGJ1ZmZlciB3aXRob3V0IGNvcHlpbmcgaXQgYW55d2hlcmUuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGVuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyLmRyYWluLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJhaW4oaW50ICRsZW4pOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBlbmFibGVMb2NraW5nLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlci5lbmFibGVsb2NraW5nLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5hYmxlTG9ja2luZygpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBleHBhbmQuCiAgICAgKiBSZXNlcnZlcyBzcGFjZSBpbiBidWZmZXIuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGVuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyLmV4cGFuZC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cGFuZChpbnQgJGxlbik6IGJvb2wge30KCiAgICAvKioKICAgICAqIGZyZWV6ZS4KICAgICAqIFByZXZlbnQgY2FsbHMgdGhhdCBtb2RpZnkgYW4gZXZlbnQgYnVmZmVyIGZyb20gc3VjY2VlZGluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkYXRfZnJvbnQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnRidWZmZXIuZnJlZXplLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJlZXplKGJvb2wgJGF0X2Zyb250KTogYm9vbCB7fQoKICAgIC8qKgogICAgICogbG9jay4KICAgICAqIEFjcXVpcmVzIGEgbG9jayBvbiBidWZmZXIuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyLmxvY2sucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2NrKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIHByZXBlbmQuCiAgICAgKiBQcmVwZW5kIGRhdGEgdG8gdGhlIGZyb250IG9mIHRoZSBidWZmZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlci5wcmVwZW5kLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJlcGVuZChzdHJpbmcgJGRhdGEpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBwcmVwZW5kQnVmZmVyLgogICAgICogTW92ZXMgYWxsIGRhdGEgZnJvbSBzb3VyY2UgYnVmZmVyIHRvIHRoZSBmcm9udCBvZiBjdXJyZW50IGJ1ZmZlci4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZlbnRCdWZmZXIgJGJ1ZgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlci5wcmVwZW5kYnVmZmVyLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJlcGVuZEJ1ZmZlcihFdmVudEJ1ZmZlciAkYnVmKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogcHVsbHVwLgogICAgICogTGluZWFyaXplcyBkYXRhIHdpdGhpbiBidWZmZXIgYW5kIHJldHVybnMgaXQncyBjb250ZW50cyBhcyBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRzaXplCiAgICAgKgogICAgICogQHJldHVybiBudWxsfHN0cmluZwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlci5wdWxsdXAucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdWxsdXAoaW50ICRzaXplKTogP3N0cmluZyB7fQoKICAgIC8qKgogICAgICogcmVhZC4KICAgICAqIFJlYWQgZGF0YSBmcm9tIGFuIGV2YnVmZmVyIGFuZCBkcmFpbiB0aGUgYnl0ZXMgcmVhZC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRtYXhfYnl0ZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGwgfCBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoaW50ICRtYXhfYnl0ZXMpOiA/c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiByZWFkRnJvbS4KICAgICAqIFJlYWQgZGF0YSBmcm9tIGEgZmlsZSBvbnRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGZkCiAgICAgKiBAcGFyYW0gaW50ICAgJGhvd211Y2gKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlci5yZWFkZnJvbS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRGcm9tKCRmZCwgaW50ICRob3dtdWNoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiByZWFkTGluZS4KICAgICAqIEV4dHJhY3RzIGEgbGluZSBmcm9tIHRoZSBmcm9udCBvZiB0aGUgYnVmZmVyLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGVvbF9zdHlsZQogICAgICoKICAgICAqIEByZXR1cm4gbnVsbCB8IHN0cmluZwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlci5yZWFkbGluZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRMaW5lKGludCAkZW9sX3N0eWxlKTogP3N0cmluZyB7fQoKICAgIC8qKgogICAgICogc2VhcmNoLgogICAgICogU2NhbnMgdGhlIGJ1ZmZlciBmb3IgYW4gb2NjdXJyZW5jZSBvZiBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3aGF0CiAgICAgKiBAcGFyYW0gaW50ICAgICRzdGFydCA9IDEKICAgICAqIEBwYXJhbSBpbnQgICAgJGVuZCAgID0gMQogICAgICoKICAgICAqIEByZXR1cm4gaW50fGZhbHNlCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyLnNlYXJjaC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlYXJjaChzdHJpbmcgJHdoYXQsIGludCAkc3RhcnQgPSAxLCBpbnQgJGVuZCA9IDEpOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIHNlYXJjaEVvbC4KICAgICAqIFNjYW5zIHRoZSBidWZmZXIgZm9yIGFuIG9jY3VycmVuY2Ugb2YgYW4gZW5kIG9mIGxpbmUuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc3RhcnQgICAgID0gMQogICAgICogQHBhcmFtIGludCAkZW9sX3N0eWxlID0gRU9MX0FOWQogICAgICoKICAgICAqIEByZXR1cm4gaW50fGZhbHNlCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyLnNlYXJjaGVvbC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlYXJjaEVvbChpbnQgJHN0YXJ0ID0gMSwgaW50ICRlb2xfc3R5bGUgPSBFdmVudEJ1ZmZlcjo6RU9MX0FOWSk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogc3Vic3RyLgogICAgICogU3Vic3RyYWN0cyBhIHBvcnRpb24gb2YgdGhlIGJ1ZmZlciBkYXRhLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHN0YXJ0CiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGggKG9wdGlvbmFsKQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyLnN1YnN0ci5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1YnN0cihpbnQgJHN0YXJ0LCBpbnQgJGxlbmd0aCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogdW5mcmVlemUuCiAgICAgKiBSZS1lbmFibGUgY2FsbHMgdGhhdCBtb2RpZnkgYW4gZXZlbnQgYnVmZmVyLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRhdF9mcm9udAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlci51bmZyZWV6ZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuZnJlZXplKGJvb2wgJGF0X2Zyb250KTogYm9vbCB7fQoKICAgIC8qKgogICAgICogdW5sb2NrLgogICAgICogUmVsZWFzZXMgbG9jayBhY3F1aXJlZCBieSBFdmVudEJ1ZmZlcjo6bG9jay4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnRidWZmZXIudW5sb2NrLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5sb2NrKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIHdyaXRlLgogICAgICogV3JpdGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB0byBhIGZpbGUgb3Igc29ja2V0LgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkZmQKICAgICAqIEBwYXJhbSBpbnQgJGhvd211Y2ggKG9wdGlvbmFsKQogICAgICoKICAgICAqIEByZXR1cm4gaW50fGZhbHNlCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyLndyaXRlLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUobWl4ZWQgJGZkLCBpbnQgJGhvd211Y2gpOiBpbnR8ZmFsc2Uge30KfQoKLy8gVGhlIEV2ZW50QnVmZmVyRXZlbnQgY2xhc3MKLyoqCiAqIEV2ZW50QnVmZmVyRXZlbnQuCiAqIFJlcHJlc2VudHMgTGliZXZlbnQncyBidWZmZXIgZXZlbnQuCiAqIFVzdWFsbHkgYW4gYXBwbGljYXRpb24gd2FudHMgdG8gcGVyZm9ybSBzb21lIGFtb3VudCBvZiBkYXRhIGJ1ZmZlcmluZyBpbiBhZGRpdGlvbiB0byBqdXN0IHJlc3BvbmRpbmcgdG8gZXZlbnRzLiBXaGVuIHdlIHdhbnQgdG8gd3JpdGUgZGF0YSwgZm9yIGV4YW1wbGUsIHRoZSB1c3VhbCBwYXR0ZXJuIGxvb2tzIGxpa2U6CiAqIERlY2lkZSB0aGF0IHdlIHdhbnQgdG8gd3JpdGUgc29tZSBkYXRhIHRvIGEgY29ubmVjdGlvbjsgcHV0IHRoYXQgZGF0YSBpbiBhIGJ1ZmZlci4KICogV2FpdCBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gYmVjb21lIHdyaXRhYmxlCiAqIFdyaXRlIGFzIG11Y2ggb2YgdGhlIGRhdGEgYXMgd2UgY2FuCiAqIFJlbWVtYmVyIGhvdyBtdWNoIHdlIHdyb3RlLCBhbmQgaWYgd2Ugc3RpbGwgaGF2ZSBtb3JlIGRhdGEgdG8gd3JpdGUsIHdhaXQgZm9yIHRoZSBjb25uZWN0aW9uIHRvIGJlY29tZSB3cml0YWJsZSBhZ2Fpbi4KICogVGhpcyBidWZmZXJlZCBJL08gcGF0dGVybiBpcyBjb21tb24gZW5vdWdoIHRoYXQgTGliZXZlbnQgcHJvdmlkZXMgYSBnZW5lcmljIG1lY2hhbmlzbSBmb3IgaXQuIEEgImJ1ZmZlciBldmVudCIgY29uc2lzdHMgb2YgYW4gdW5kZXJseWluZyB0cmFuc3BvcnQgKGxpa2UgYSBzb2NrZXQpLCBhIHJlYWQgYnVmZmVyLCBhbmQgYSB3cml0ZSBidWZmZXIuIEluc3RlYWQgb2YgcmVndWxhciBldmVudHMsIHdoaWNoIGdpdmUgY2FsbGJhY2tzIHdoZW4gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGlzIHJlYWR5IHRvIGJlIHJlYWQgb3Igd3JpdHRlbiwgYSBidWZmZXIgZXZlbnQgaW52b2tlcyBpdHMgdXNlci1zdXBwbGllZCBjYWxsYmFja3Mgd2hlbiBpdCBoYXMgcmVhZCBvciB3cml0dGVuIGVub3VnaCBkYXRhLgogKgogKiBAYXV0aG9yIEthenVha2kgTUFCVUNISQogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoaHR0cHM6Ly9waHAubmV0L21hbnVhbC9jYy5saWNlbnNlLnBocCkgYnkgdGhlIFBIUCBEb2N1bWVudGF0aW9uIEdyb3VwIGlzIGxpY2Vuc2VkIHVuZGVyIFtDQyBieSAzLjAgb3IgbGF0ZXJdKGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvKS4KICoKICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmV2ZW50YnVmZmVyZXZlbnQucGhwCiAqLwpmaW5hbCBjbGFzcyBFdmVudEJ1ZmZlckV2ZW50CnsKICAgIC8qKiBAdmFyIGludCAqLwogICAgcHVibGljICRmZDsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHB1YmxpYyAkcHJpb3JpdHk7CgogICAgLyoqCiAgICAgKiBAdmFyIEV2ZW50QnVmZmVyCiAgICAgKi8KICAgICNbSW1tdXRhYmxlXQogICAgcHVibGljICRpbnB1dDsKCiAgICAvKioKICAgICAqIEB2YXIgRXZlbnRCdWZmZXIKICAgICAqLwogICAgI1tJbW11dGFibGVdCiAgICBwdWJsaWMgJG91dHB1dDsKICAgIHB1YmxpYyBjb25zdCBSRUFESU5HID0gMTsKICAgIHB1YmxpYyBjb25zdCBXUklUSU5HID0gMjsKICAgIHB1YmxpYyBjb25zdCBFT0YgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBFUlJPUiA9IDMyOwogICAgcHVibGljIGNvbnN0IFRJTUVPVVQgPSA2NDsKICAgIHB1YmxpYyBjb25zdCBDT05ORUNURUQgPSAxMjg7CiAgICBwdWJsaWMgY29uc3QgT1BUX0NMT1NFX09OX0ZSRUUgPSAxOwogICAgcHVibGljIGNvbnN0IE9QVF9USFJFQURTQUZFID0gMjsKICAgIHB1YmxpYyBjb25zdCBPUFRfREVGRVJfQ0FMTEJBQ0tTID0gNDsKICAgIHB1YmxpYyBjb25zdCBPUFRfVU5MT0NLX0NBTExCQUNLUyA9IDg7CiAgICBwdWJsaWMgY29uc3QgU1NMX09QRU4gPSAwOwogICAgcHVibGljIGNvbnN0IFNTTF9DT05ORUNUSU5HID0gMTsKICAgIHB1YmxpYyBjb25zdCBTU0xfQUNDRVBUSU5HID0gMjsKCiAgICAvKioKICAgICAqIF9fY29uc3RydWN0LgogICAgICogQ29uc3RydWN0cyBFdmVudEJ1ZmZlckV2ZW50IG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZlbnRCYXNlICRiYXNlCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgICRzb2NrZXQgID0gbnVsbAogICAgICogQHBhcmFtIGludCAgICAgICAkb3B0aW9ucyA9IDAKICAgICAqIEBwYXJhbSBudWxsfGNhbGxhYmxlICRyZWFkY2IgID0gbnVsbAogICAgICogQHBhcmFtIG51bGx8Y2FsbGFibGUgJHdyaXRlY2IgPSBudWxsCiAgICAgKiBAcGFyYW0gbnVsbHxjYWxsYWJsZSAkZXZlbnRjYiA9IG51bGwKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnRidWZmZXJldmVudC5jb25zdHJ1Y3QucGhwCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChFdmVudEJhc2UgJGJhc2UsICRzb2NrZXQgPSBudWxsLCBpbnQgJG9wdGlvbnMgPSAwLCA/Y2FsbGFibGUgJHJlYWRjYiA9IG51bGwsID9jYWxsYWJsZSAkd3JpdGVjYiA9IG51bGwsID9jYWxsYWJsZSAkZXZlbnRjYiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBjbG9zZS4KICAgICAqIENsb3NlcyBmaWxlIGRlc2NyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGJ1ZmZlciBldmVudC4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyZXZlbnQuY2xvc2UucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBjb25uZWN0LgogICAgICogQ29ubmVjdCBidWZmZXIgZXZlbnQncyBmaWxlIGRlc2NyaXB0b3IgdG8gZ2l2ZW4gYWRkcmVzcyBvciBVTklYIHNvY2tldC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyZXZlbnQuY29ubmVjdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbm5lY3Qoc3RyaW5nICRhZGRyKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogY29ubmVjdEhvc3QuCiAgICAgKiBDb25uZWN0cyB0byBhIGhvc3RuYW1lIHdpdGggb3B0aW9uYWxseSBhc3luY3Jvbm91cyBETlMuCiAgICAgKgogICAgICogQHBhcmFtIG51bGx8RXZlbnREbnNCYXNlICRkbnNfYmFzZQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAkaG9zdG5hbWUKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgJHBvcnQKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgJGZhbWlseSAgID0gRXZlbnRVdGlsOjpBRl9VTlNQRUMKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnRidWZmZXJldmVudC5jb25uZWN0aG9zdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbm5lY3RIb3N0KD9FdmVudERuc0Jhc2UgJGRuc19iYXNlLCBzdHJpbmcgJGhvc3RuYW1lLCBpbnQgJHBvcnQsIGludCAkZmFtaWx5ID0gRXZlbnRVdGlsOjpBRl9VTlNQRUMpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBjcmVhdGVTc2xGaWx0ZXIKICAgICAqCiAgICAgKiBAcGFyYW0gRXZlbnRCdWZmZXJFdmVudCAkdW5kZXJseWluZwogICAgICogQHBhcmFtIEV2ZW50U3NsQ29udGV4dCAkY3R4CiAgICAgKiBAcGFyYW0gaW50ICRzdGF0ZQogICAgICogQHBhcmFtIGludCAkb3B0aW9ucwogICAgICogQHJldHVybiBFdmVudEJ1ZmZlckV2ZW50CiAgICAgKiBAc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9vc21hbm92L3BlY2wtZXZlbnQvc3JjLzhlNWFiNzMwM2YzZWY3ODI3YjcxZjMxOTA0YTUxYjNmMjZkZDFhYzIvcGhwOC9jbGFzc2VzL2J1ZmZlcl9ldmVudC5jI2xpbmVzLTEwMjUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVNzbEZpbHRlcihFdmVudEJ1ZmZlckV2ZW50ICR1bmRlcmx5aW5nLCBFdmVudFNzbENvbnRleHQgJGN0eCwgaW50ICRzdGF0ZSwgaW50ICRvcHRpb25zID0gMCk6IEV2ZW50QnVmZmVyRXZlbnQge30KCiAgICAvKioKICAgICAqIGNyZWF0ZVBhaXIuCiAgICAgKiBDcmVhdGVzIHR3byBidWZmZXIgZXZlbnRzIGNvbm5lY3RlZCB0byBlYWNoIG90aGVyLgogICAgICoKICAgICAqIEBwYXJhbSBFdmVudEJhc2UgJGJhc2UKICAgICAqIEBwYXJhbSBpbnQgICAgICAgJG9wdGlvbnMgPSAwCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlcmV2ZW50LmNyZWF0ZXBhaXIucGhwCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlUGFpcihFdmVudEJhc2UgJGJhc2UsIGludCAkb3B0aW9ucyA9IDApOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogZGlzYWJsZS4KICAgICAqIERpc2FibGUgZXZlbnRzIHJlYWQsIHdyaXRlLCBvciBib3RoIG9uIGEgYnVmZmVyIGV2ZW50LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGV2ZW50cwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlcmV2ZW50LmRpc2FibGUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNhYmxlKGludCAkZXZlbnRzKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogZW5hYmxlLgogICAgICogRW5hYmxlIGV2ZW50cyByZWFkLCB3cml0ZSwgb3IgYm90aCBvbiBhIGJ1ZmZlciBldmVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRldmVudHMKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnRidWZmZXJldmVudC5lbmFibGUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmFibGUoaW50ICRldmVudHMpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBmcmVlLgogICAgICogRnJlZSBhIGJ1ZmZlciBldmVudC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnRidWZmZXJldmVudC5mcmVlLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJlZSgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBnZXREbnNFcnJvclN0cmluZy4KICAgICAqIFJldHVybnMgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGxhc3QgZmFpbGVkIEROUyBsb29rdXAgYXR0ZW1wdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlcmV2ZW50LmdldGRuc2Vycm9yc3RyaW5nLnBocAogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RG5zRXJyb3JTdHJpbmcoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBnZXRFbmFibGVkLgogICAgICogUmV0dXJucyBiaXRtYXNrIG9mIGV2ZW50cyBjdXJyZW50bHkgZW5hYmxlZCBvbiB0aGUgYnVmZmVyIGV2ZW50LgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyZXZlbnQuZ2V0ZW5hYmxlZC5waHAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEVuYWJsZWQoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBnZXRJbnB1dC4KICAgICAqIFJldHVybnMgdW5kZXJseWluZyBpbnB1dCBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIGN1cnJlbnQgYnVmZmVyIGV2ZW50LgogICAgICoKICAgICAqIEByZXR1cm4gRXZlbnRCdWZmZXIKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnRidWZmZXJldmVudC5nZXRpbnB1dC5waHAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldElucHV0KCk6IEV2ZW50QnVmZmVyIHt9CgogICAgLyoqCiAgICAgKiBnZXRPdXRwdXQuCiAgICAgKiBSZXR1cm5zIHVuZGVybHlpbmcgb3V0cHV0IGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggY3VycmVudCBidWZmZXIgZXZlbnQuCiAgICAgKgogICAgICogQHJldHVybiBFdmVudEJ1ZmZlcgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlcmV2ZW50LmdldG91dHB1dC5waHAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldE91dHB1dCgpOiBFdmVudEJ1ZmZlciB7fQoKICAgIC8qKgogICAgICogcmVhZC4KICAgICAqIFJlYWQgYnVmZmVyJ3MgZGF0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRzaXplCiAgICAgKgogICAgICogQHJldHVybiBudWxsfHN0cmluZwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlcmV2ZW50LnJlYWQucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKGludCAkc2l6ZSk6ID9zdHJpbmcge30KCiAgICAvKioKICAgICAqIHJlYWRCdWZmZXIuCiAgICAgKiBEcmFpbnMgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgaW5wdXQgYnVmZmVyIGFuZCBwbGFjZXMgdGhlbSBpbnRvIGJ1Zi4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZlbnRCdWZmZXIgJGJ1ZgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlcmV2ZW50LnJlYWRidWZmZXIucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkQnVmZmVyKEV2ZW50QnVmZmVyICRidWYpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBzZXRDYWxsYmFja3MuCiAgICAgKiBBc3NpZ25zIHJlYWQsIHdyaXRlIGFuZCBldmVudChzdGF0dXMpIGNhbGxiYWNrcy4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJHJlYWRjYgogICAgICogQHBhcmFtIGNhbGxhYmxlICR3cml0ZWNiCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGV2ZW50Y2IKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkYXJnICAgICAob3B0aW9uYWwpCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyZXZlbnQuc2V0Y2FsbGJhY2tzLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q2FsbGJhY2tzKGNhbGxhYmxlICRyZWFkY2IsIGNhbGxhYmxlICR3cml0ZWNiLCBjYWxsYWJsZSAkZXZlbnRjYiwgbWl4ZWQgJGFyZyA9IG51bGwpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBzZXRQcmlvcml0eS4KICAgICAqIEFzc2lnbiBhIHByaW9yaXR5IHRvIGEgYnVmZmVyZXZlbnQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXZlbnRidWZmZXJldmVudC5zZXRwcmlvcml0eS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFByaW9yaXR5KGludCAkcHJpb3JpdHkpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBzZXRUaW1lb3V0cy4KICAgICAqIFNldCB0aGUgcmVhZCBhbmQgd3JpdGUgdGltZW91dCBmb3IgYSBidWZmZXIgZXZlbnQuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR0aW1lb3V0X3JlYWQKICAgICAqIEBwYXJhbSBmbG9hdCAkdGltZW91dF93cml0ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlcmV2ZW50LnNldHRpbWVvdXRzLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGltZW91dHMoZmxvYXQgJHRpbWVvdXRfcmVhZCwgZmxvYXQgJHRpbWVvdXRfd3JpdGUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBzZXRXYXRlcm1hcmsuCiAgICAgKiBBZGp1c3RzIHJlYWQgYW5kL29yIHdyaXRlIHdhdGVybWFya3MuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkZXZlbnRzCiAgICAgKiBAcGFyYW0gaW50ICRsb3dtYXJrCiAgICAgKiBAcGFyYW0gaW50ICRoaWdobWFyawogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlcmV2ZW50LnNldHdhdGVybWFyay5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFdhdGVybWFyayhpbnQgJGV2ZW50cywgaW50ICRsb3dtYXJrLCBpbnQgJGhpZ2htYXJrKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogc3NsRXJyb3IuCiAgICAgKiBSZXR1cm5zIG1vc3QgcmVjZW50IE9wZW5TU0wgZXJyb3IgcmVwb3J0ZWQgb24gdGhlIGJ1ZmZlciBldmVudC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGZhbHNlfHN0cmluZwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRidWZmZXJldmVudC5zc2xlcnJvci5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNzbEVycm9yKCk6IGZhbHNlfHN0cmluZyB7fQoKICAgIC8qKgogICAgICogc3NsRmlsdGVyLgogICAgICogQ3JlYXRlIGEgbmV3IFNTTCBidWZmZXIgZXZlbnQgdG8gc2VuZCBpdHMgZGF0YSBvdmVyIGFub3RoZXIgYnVmZmVyIGV2ZW50LgogICAgICoKICAgICAqIEBwYXJhbSBFdmVudEJhc2UgICAgICAgICRiYXNlCiAgICAgKiBAcGFyYW0gRXZlbnRCdWZmZXJFdmVudCAkdW5kZXJseWluZwogICAgICogQHBhcmFtIEV2ZW50U3NsQ29udGV4dCAgJGN0eAogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAgJHN0YXRlCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICAkb3B0aW9ucyAgICA9IDAKICAgICAqCiAgICAgKiBAcmV0dXJuIEV2ZW50QnVmZmVyRXZlbnQKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyZXZlbnQuc3NsZmlsdGVyLnBocAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNzbEZpbHRlcihFdmVudEJhc2UgJGJhc2UsIEV2ZW50QnVmZmVyRXZlbnQgJHVuZGVybHlpbmcsIEV2ZW50U3NsQ29udGV4dCAkY3R4LCBpbnQgJHN0YXRlLCBpbnQgJG9wdGlvbnMgPSAwKTogRXZlbnRCdWZmZXJFdmVudCB7fQoKICAgIC8qKgogICAgICogc3NsR2V0Q2lwaGVySW5mby4KICAgICAqIFJldHVybnMgYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSBjaXBoZXIuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyZXZlbnQuc3NsZ2V0Y2lwaGVyaW5mby5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNzbEdldENpcGhlckluZm8oKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBzc2xHZXRDaXBoZXJOYW1lLgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBjaXBoZXIgbmFtZSBvZiB0aGUgU1NMIGNvbm5lY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyZXZlbnQuc3NsZ2V0Y2lwaGVybmFtZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNzbEdldENpcGhlck5hbWUoKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBzc2xHZXRDaXBoZXJWZXJzaW9uLgogICAgICogUmV0dXJucyB2ZXJzaW9uIG9mIGNpcGhlciB1c2VkIGJ5IGN1cnJlbnQgU1NMIGNvbm5lY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyZXZlbnQuc3NsZ2V0Y2lwaGVydmVyc2lvbi5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNzbEdldENpcGhlclZlcnNpb24oKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBzc2xHZXRQcm90b2NvbC4KICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHByb3RvY29sIHVzZWQgZm9yIGN1cnJlbnQgU1NMLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlcmV2ZW50LnNzbGdldHByb3RvY29sLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3NsR2V0UHJvdG9jb2woKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBzc2xSZW5lZ290aWF0ZS4KICAgICAqIFRlbGxzIGEgYnVmZmVyZXZlbnQgdG8gYmVnaW4gU1NMIHJlbmVnb3RpYXRpb24uCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGJ1ZmZlcmV2ZW50LnNzbHJlbmVnb3RpYXRlLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3NsUmVuZWdvdGlhdGUoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogc3NsU29ja2V0LgogICAgICogQ3JlYXRlcyBhIG5ldyBTU0wgYnVmZmVyIGV2ZW50IHRvIHNlbmQgaXRzIGRhdGEgb3ZlciBhbiBTU0wgb24gYSBzb2NrZXQuCiAgICAgKgogICAgICogQHBhcmFtIEV2ZW50QmFzZSAkYmFzZQogICAgICogQHBhcmFtIG1peGVkICRzb2NrZXQKICAgICAqIEBwYXJhbSBFdmVudFNzbENvbnRleHQgJGN0eAogICAgICogQHBhcmFtIGludCAkc3RhdGUKICAgICAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgKG9wdGlvbmFsKQogICAgICoKICAgICAqIEByZXR1cm4gRXZlbnRCdWZmZXJFdmVudAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRidWZmZXJldmVudC5zc2xzb2NrZXQucGhwCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3NsU29ja2V0KEV2ZW50QmFzZSAkYmFzZSwgbWl4ZWQgJHNvY2tldCwgRXZlbnRTc2xDb250ZXh0ICRjdHgsIGludCAkc3RhdGUsIGludCAkb3B0aW9ucyA9IDApOiBFdmVudEJ1ZmZlckV2ZW50IHt9CgogICAgLyoqCiAgICAgKiB3cml0ZS4KICAgICAqIEFkZHMgZGF0YSB0byBhIGJ1ZmZlciBldmVudCdzIG91dHB1dCBidWZmZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRidWZmZXJldmVudC53cml0ZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKHN0cmluZyAkZGF0YSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHdyaXRlQnVmZmVyLgogICAgICogQWRkcyBjb250ZW50cyBvZiB0aGUgZW50aXJlIGJ1ZmZlciB0byBhIGJ1ZmZlciBldmVudCdzIG91dHB1dCBidWZmZXIuCiAgICAgKgogICAgICogQHBhcmFtIEV2ZW50QnVmZmVyICRidWYKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50YnVmZmVyZXZlbnQud3JpdGVidWZmZXIucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZUJ1ZmZlcihFdmVudEJ1ZmZlciAkYnVmKTogYm9vbCB7fQp9CgovLyBUaGUgRXZlbnRDb25maWcgY2xhc3MKLyoqCiAqIEV2ZW50Q29uZmlnLgogKiBSZXByZXNlbnRzIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHdoaWNoIGNvdWxkIGJlIHVzZWQgaW4gY29uc3RydWN0aW9uIG9mIHRoZSBFdmVudEJhc2UgLgogKgogKiBAYXV0aG9yIEthenVha2kgTUFCVUNISQogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvY2MubGljZW5zZS5waHApIGJ5IHRoZSBQSFAgRG9jdW1lbnRhdGlvbiBHcm91cCBpcyBsaWNlbnNlZCB1bmRlciBbQ0MgYnkgMy4wIG9yIGxhdGVyXShodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLykuCiAqCiAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZXZlbnRjb25maWcucGhwCiAqLwpmaW5hbCBjbGFzcyBFdmVudENvbmZpZwp7CiAgICBwdWJsaWMgY29uc3QgRkVBVFVSRV9FVCA9IDE7CiAgICBwdWJsaWMgY29uc3QgRkVBVFVSRV9PMSA9IDI7CiAgICBwdWJsaWMgY29uc3QgRkVBVFVSRV9GRFMgPSA0OwoKICAgIC8qKgogICAgICogX19jb25zdHJ1Y3QuCiAgICAgKiBDb25zdHJ1Y3RzIEV2ZW50Q29uZmlnIG9iamVjdC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50Y29uZmlnLmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIGF2b2lkTWV0aG9kLgogICAgICogVGVsbHMgbGliZXZlbnQgdG8gYXZvaWQgc3BlY2lmaWMgZXZlbnQgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRjb25maWcuYXZvaWRtZXRob2QucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhdm9pZE1ldGhvZChzdHJpbmcgJG1ldGhvZCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHJlcXVpcmVGZWF0dXJlcy4KICAgICAqIEVudGVycyBhIHJlcXVpcmVkIGV2ZW50IG1ldGhvZCBmZWF0dXJlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGRlbWFuZHMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkZmVhdHVyZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRjb25maWcucmVxdWlyZWZlYXR1cmVzLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVxdWlyZUZlYXR1cmVzKGludCAkZmVhdHVyZSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFNldHMgb25lIG9yIG1vcmUgZmxhZ3MgdG8gY29uZmlndXJlIHdoYXQgcGFydHMgb2YgdGhlIGV2ZW50dWFsIEV2ZW50QmFzZQogICAgICogd2lsbCBiZSBpbml0aWFsaXplZCwgYW5kIGhvdyB0aGV5J2xsIHdvcmsKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEBzaW5jZSBsaWJldmVudCB2ZXJzaW9uIDIuMC4yLWFscGhhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGbGFncyhpbnQgJGZsYWdzKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogc2V0TWF4RGlzcGF0Y2hJbnRlcnZhbC4KICAgICAqIFByZXZlbnRzIHByaW9yaXR5IGludmVyc2lvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRtYXhfaW50ZXJ2YWwKICAgICAqIEBwYXJhbSBpbnQgJG1heF9jYWxsYmFja3MKICAgICAqIEBwYXJhbSBpbnQgJG1pbl9wcmlvcml0eQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRjb25maWcuc2V0bWF4ZGlzcGF0Y2hpbnRlcnZhbC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE1heERpc3BhdGNoSW50ZXJ2YWwoaW50ICRtYXhfaW50ZXJ2YWwsIGludCAkbWF4X2NhbGxiYWNrcywgaW50ICRtaW5fcHJpb3JpdHkpOiB2b2lkIHt9Cn0KCi8vIFRoZSBFdmVudERuc0Jhc2UgY2xhc3MKLyoqCiAqIEV2ZW50RG5zQmFzZS4KICogUmVwcmVzZW50cyBMaWJldmVudCdzIEROUyBiYXNlIHN0cnVjdHVyZS4gVXNlZCB0byByZXNvbHZlIEROUyBhc3luY3Jvbm91c2x5LCBwYXJzZSBjb25maWd1cmF0aW9uIGZpbGVzIGxpa2UgcmVzb2x2LmNvbmYgZXRjLgogKgogKiBAYXV0aG9yIEthenVha2kgTUFCVUNISQogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvY2MubGljZW5zZS5waHApIGJ5IHRoZSBQSFAgRG9jdW1lbnRhdGlvbiBHcm91cCBpcyBsaWNlbnNlZCB1bmRlciBbQ0MgYnkgMy4wIG9yIGxhdGVyXShodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLykuCiAqCiAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZXZlbnRkbnNiYXNlLnBocAogKi8KZmluYWwgY2xhc3MgRXZlbnREbnNCYXNlCnsKICAgIHB1YmxpYyBjb25zdCBPUFRJT05fU0VBUkNIID0gMTsKICAgIHB1YmxpYyBjb25zdCBPUFRJT05fTkFNRVNFUlZFUlMgPSAyOwogICAgcHVibGljIGNvbnN0IE9QVElPTl9NSVNDID0gNDsKICAgIHB1YmxpYyBjb25zdCBPUFRJT05fSE9TVFNGSUxFID0gODsKICAgIHB1YmxpYyBjb25zdCBPUFRJT05TX0FMTCA9IDE1OwoKICAgIC8qKgogICAgICogX19jb25zdHJ1Y3QuCiAgICAgKiBDb25zdHJ1Y3RzIEV2ZW50RG5zQmFzZSBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIEV2ZW50QmFzZSAkYmFzZQogICAgICogQHBhcmFtIGJvb2wgICAgICAkaW5pdGlhbGl6ZQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRkbnNiYXNlLmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEV2ZW50QmFzZSAkYmFzZSwgYm9vbCAkaW5pdGlhbGl6ZSkge30KCiAgICAvKioKICAgICAqIGFkZE5hbWVzZXJ2ZXJJcC4KICAgICAqIEFkZHMgYSBuYW1lc2VydmVyIHRvIHRoZSBETlMgYmFzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpcAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRkbnNiYXNlLmFkZG5hbWVzZXJ2ZXJpcC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZE5hbWVzZXJ2ZXJJcChzdHJpbmcgJGlwKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogYWRkU2VhcmNoLgogICAgICogQWRkcyBhIGRvbWFpbiB0byB0aGUgbGlzdCBvZiBzZWFyY2ggZG9tYWlucy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkb21haW4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50ZG5zYmFzZS5hZGRzZWFyY2gucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRTZWFyY2goc3RyaW5nICRkb21haW4pOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBjbGVhclNlYXJjaC4KICAgICAqIFJlbW92ZXMgYWxsIGN1cnJlbnQgc2VhcmNoIHN1ZmZpeGVzLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRkbnNiYXNlLmNsZWFyc2VhcmNoLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXJTZWFyY2goKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogY291bnROYW1lc2VydmVycy4KICAgICAqIEdldHMgdGhlIG51bWJlciBvZiBjb25maWd1cmVkIG5hbWVzZXJ2ZXJzLgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGRuc2Jhc2UuY291bnRuYW1lc2VydmVycy5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50TmFtZXNlcnZlcnMoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBsb2FkSG9zdHMuCiAgICAgKiBMb2FkcyBhIGhvc3RzIGZpbGUgKGluIHRoZSBzYW1lIGZvcm1hdCBhcyAvZXRjL2hvc3RzKSBmcm9tIGhvc3RzIGZpbGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaG9zdHMKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50ZG5zYmFzZS5sb2FkaG9zdHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkSG9zdHMoc3RyaW5nICRob3N0cyk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHBhcnNlUmVzb2x2Q29uZi4KICAgICAqIFNjYW5zIHRoZSByZXNvbHYuY29uZi1mb3JtYXR0ZWQgZmlsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICAgICRmbGFncwogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50ZG5zYmFzZS5wYXJzZXJlc29sdmNvbmYucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJzZVJlc29sdkNvbmYoaW50ICRmbGFncywgc3RyaW5nICRmaWxlbmFtZSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHNldE9wdGlvbi4KICAgICAqIFNldCB0aGUgdmFsdWUgb2YgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRpb24KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGRuc2Jhc2Uuc2V0b3B0aW9uLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9uKHN0cmluZyAkb3B0aW9uLCBzdHJpbmcgJHZhbHVlKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogc2V0U2VhcmNoTmRvdHMuCiAgICAgKiBTZXQgdGhlICduZG90cycgcGFyYW1ldGVyIGZvciBzZWFyY2hlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRuZG90cwogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRkbnNiYXNlLnNldHNlYXJjaG5kb3RzLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2VhcmNoTmRvdHMoaW50ICRuZG90cyk6IHZvaWQge30KfQoKLy8gVGhlIEV2ZW50SHR0cCBjbGFzcwovKioKICogRXZlbnRIdHRwLgogKiBSZXByZXNlbnRzIEhUVFAgc2VydmVyLgogKgogKiBAYXV0aG9yIEthenVha2kgTUFCVUNISQogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvY2MubGljZW5zZS5waHApIGJ5IHRoZSBQSFAgRG9jdW1lbnRhdGlvbiBHcm91cCBpcyBsaWNlbnNlZCB1bmRlciBbQ0MgYnkgMy4wIG9yIGxhdGVyXShodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLykuCiAqCiAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZXZlbnRodHRwLnBocAogKi8KZmluYWwgY2xhc3MgRXZlbnRIdHRwCnsKICAgIC8qKgogICAgICogX19jb25zdHJ1Y3QuCiAgICAgKiBDb25zdHJ1Y3RzIEV2ZW50SHR0cCBvYmplY3QodGhlIEhUVFAgc2VydmVyKS4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZlbnRCYXNlICAgICAgICRiYXNlCiAgICAgKiBAcGFyYW0gbnVsbHxFdmVudFNzbENvbnRleHQgJGN0eAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRodHRwLmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEV2ZW50QmFzZSAkYmFzZSwgP0V2ZW50U3NsQ29udGV4dCAkY3R4ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIGFjY2VwdC4KICAgICAqIE1ha2VzIGFuIEhUVFAgc2VydmVyIGFjY2VwdCBjb25uZWN0aW9ucyBvbiB0aGUgc3BlY2lmaWVkIHNvY2tldCBzdHJlYW0gb3IgcmVzb3VyY2UuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRzb2NrZXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50aHR0cC5hY2NlcHQucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhY2NlcHQobWl4ZWQgJHNvY2tldCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIGFkZFNlcnZlckFsaWFzLgogICAgICogQWRkcyBhIHNlcnZlciBhbGlhcyB0byB0aGUgSFRUUCBzZXJ2ZXIgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGh0dHAuYWRkc2VydmVyYWxpYXMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRTZXJ2ZXJBbGlhcyhzdHJpbmcgJGFsaWFzKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogYmluZC4KICAgICAqIEJpbmRzIGFuIEhUVFAgc2VydmVyIG9uIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBhbmQgcG9ydC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzCiAgICAgKiBAcGFyYW0gaW50ICAgICRwb3J0CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50aHR0cC5iaW5kLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmluZChzdHJpbmcgJGFkZHJlc3MsIGludCAkcG9ydCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHJlbW92ZVNlcnZlckFsaWFzLgogICAgICogUmVtb3ZlcyBzZXJ2ZXIgYWxpYXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50aHR0cC5yZW1vdmVzZXJ2ZXJhbGlhcy5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZVNlcnZlckFsaWFzKHN0cmluZyAkYWxpYXMpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBzZXRBbGxvd2VkTWV0aG9kcy4KICAgICAqIFNldHMgdGhlIHdoYXQgSFRUUCBtZXRob2RzIGFyZSBzdXBwb3J0ZWQgaW4gcmVxdWVzdHMgYWNjZXB0ZWQgYnkgdGhpcyBzZXJ2ZXIsIGFuZCBwYXNzZWQgdG8gdXNlciBjYWxsYmFja3MuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbWV0aG9kcwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRodHRwLnNldGFsbG93ZWRtZXRob2RzLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QWxsb3dlZE1ldGhvZHMoaW50ICRtZXRob2RzKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogc2V0Q2FsbGJhY2suCiAgICAgKiBTZXRzIGEgY2FsbGJhY2sgZm9yIHNwZWNpZmllZCBVUkkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICogQHBhcmFtIHN0cmluZyAkY2IKICAgICAqIEBwYXJhbSBudWxsfHN0cmluZyAkYXJnIChvcHRpb25hbCkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGh0dHAuc2V0Y2FsbGJhY2sucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDYWxsYmFjayhzdHJpbmcgJHBhdGgsIHN0cmluZyAkY2IsID9zdHJpbmcgJGFyZyA9IG51bGwpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBzZXREZWZhdWx0Q2FsbGJhY2suCiAgICAgKiBTZXRzIGRlZmF1bHQgY2FsbGJhY2sgdG8gaGFuZGxlIHJlcXVlc3RzIHRoYXQgYXJlIG5vdCBjYXVnaHQgYnkgc3BlY2lmaWMgY2FsbGJhY2tzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNiCiAgICAgKiBAcGFyYW0gbnVsbHxzdHJpbmcgJGFyZyAob3B0aW9uYWwpCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGh0dHAuc2V0ZGVmYXVsdGNhbGxiYWNrLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RGVmYXVsdENhbGxiYWNrKHN0cmluZyAkY2IsID9zdHJpbmcgJGFyZyA9IG51bGwpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBzZXRNYXhCb2R5U2l6ZS4KICAgICAqIFNldHMgbWF4aW11bSByZXF1ZXN0IGJvZHkgc2l6ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR2YWx1ZQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRodHRwLnNldG1heGJvZHlzaXplLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TWF4Qm9keVNpemUoaW50ICR2YWx1ZSk6IHZvaWQge30KCiAgICAvKioKICAgICAqIHNldE1heEhlYWRlcnNTaXplLgogICAgICogU2V0cyBtYXhpbXVtIEhUVFAgaGVhZGVyIHNpemUuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdmFsdWUKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50aHR0cC5zZXRtYXhoZWFkZXJzc2l6ZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE1heEhlYWRlcnNTaXplKGludCAkdmFsdWUpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBzZXRUaW1lb3V0LgogICAgICogU2V0cyB0aGUgdGltZW91dCBmb3IgYW4gSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHZhbHVlCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGh0dHAuc2V0dGltZW91dC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRpbWVvdXQoaW50ICR2YWx1ZSk6IHZvaWQge30KfQoKLy8gVGhlIEV2ZW50SHR0cENvbm5lY3Rpb24gY2xhc3MKLyoqCiAqIEV2ZW50SHR0cENvbm5lY3Rpb24uCiAqIFJlcHJlc2VudHMgYW4gSFRUUCBjb25uZWN0aW9uLgogKgogKiBAYXV0aG9yIEthenVha2kgTUFCVUNISQogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvY2MubGljZW5zZS5waHApIGJ5IHRoZSBQSFAgRG9jdW1lbnRhdGlvbiBHcm91cCBpcyBsaWNlbnNlZCB1bmRlciBbQ0MgYnkgMy4wIG9yIGxhdGVyXShodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wLykuCiAqCiAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZXZlbnRodHRwY29ubmVjdGlvbi5waHAKICovCmNsYXNzIEV2ZW50SHR0cENvbm5lY3Rpb24KewogICAgLyoqCiAgICAgKiBfX2NvbnN0cnVjdC4KICAgICAqIENvbnN0cnVjdHMgRXZlbnRIdHRwQ29ubmVjdGlvbiBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIEV2ZW50QmFzZSAgICAgICAkYmFzZQogICAgICogQHBhcmFtIEV2ZW50RG5zQmFzZSAgICAkZG5zX2Jhc2UKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgJGFkZHJlc3MKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgJHBvcnQKICAgICAqIEBwYXJhbSBudWxsfEV2ZW50U3NsQ29udGV4dCAkY3R4CiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGh0dHBjb25uZWN0aW9uLmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEV2ZW50QmFzZSAkYmFzZSwgRXZlbnREbnNCYXNlICRkbnNfYmFzZSwgc3RyaW5nICRhZGRyZXNzLCBpbnQgJHBvcnQsID9FdmVudFNzbENvbnRleHQgJGN0eCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBnZXRCYXNlLgogICAgICogUmV0dXJucyBldmVudCBiYXNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGZhbHNlfEV2ZW50QmFzZQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRodHRwY29ubmVjdGlvbi5nZXRiYXNlLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QmFzZSgpOiBmYWxzZXxFdmVudEJhc2Uge30KCiAgICAvKioKICAgICAqIGdldFBlZXIuCiAgICAgKiBHZXRzIHRoZSByZW1vdGUgYWRkcmVzcyBhbmQgcG9ydCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAmJGFkZHJlc3MKICAgICAqIEBwYXJhbSBpbnQgICAgJiRwb3J0CiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGh0dHBjb25uZWN0aW9uLmdldHBlZXIucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQZWVyKHN0cmluZyAmJGFkZHJlc3MsIGludCAmJHBvcnQpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBtYWtlUmVxdWVzdC4KICAgICAqIE1ha2VzIGFuIEhUVFAgcmVxdWVzdCBvdmVyIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZlbnRIdHRwUmVxdWVzdCAkcmVxCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICAkdHlwZQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgJHVyaQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRodHRwY29ubmVjdGlvbi5tYWtlcmVxdWVzdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1ha2VSZXF1ZXN0KEV2ZW50SHR0cFJlcXVlc3QgJHJlcSwgaW50ICR0eXBlLCBzdHJpbmcgJHVyaSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHNldENsb3NlQ2FsbGJhY2suCiAgICAgKiBTZXQgY2FsbGJhY2sgZm9yIGNvbm5lY3Rpb24gY2xvc2UuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIG1peGVkICAgICRkYXRhICAgICAob3B0aW9uYWwpCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGh0dHBjb25uZWN0aW9uLnNldGNsb3NlY2FsbGJhY2sucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDbG9zZUNhbGxiYWNrKGNhbGxhYmxlICRjYWxsYmFjaywgbWl4ZWQgJGRhdGEgPSBudWxsKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogc2V0TG9jYWxBZGRyZXNzLgogICAgICogU2V0cyB0aGUgSVAgYWRkcmVzcyBmcm9tIHdoaWNoIEhUVFAgY29ubmVjdGlvbnMgYXJlIG1hZGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYWRkcmVzcwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRodHRwY29ubmVjdGlvbi5zZXRsb2NhbGFkZHJlc3MucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRMb2NhbEFkZHJlc3Moc3RyaW5nICRhZGRyZXNzKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogc2V0TG9jYWxQb3J0LgogICAgICogU2V0cyB0aGUgbG9jYWwgcG9ydCBmcm9tIHdoaWNoIGNvbm5lY3Rpb25zIGFyZSBtYWRlLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHBvcnQKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50aHR0cGNvbm5lY3Rpb24uc2V0bG9jYWxwb3J0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TG9jYWxQb3J0KGludCAkcG9ydCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIHNldE1heEJvZHlTaXplLgogICAgICogU2V0cyBtYXhpbXVtIGJvZHkgc2l6ZSBmb3IgdGhlIGNvbm5lY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWF4X3NpemUKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50aHR0cGNvbm5lY3Rpb24uc2V0bWF4Ym9keXNpemUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNYXhCb2R5U2l6ZShzdHJpbmcgJG1heF9zaXplKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogc2V0TWF4SGVhZGVyc1NpemUuCiAgICAgKiBTZXRzIG1heGltdW0gaGVhZGVyIHNpemUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWF4X3NpemUKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50aHR0cGNvbm5lY3Rpb24uc2V0bWF4aGVhZGVyc3NpemUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNYXhIZWFkZXJzU2l6ZShzdHJpbmcgJG1heF9zaXplKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogc2V0UmV0cmllcy4KICAgICAqIFNldHMgdGhlIHJldHJ5IGxpbWl0IGZvciB0aGUgY29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRyZXRyaWVzCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGh0dHBjb25uZWN0aW9uLnNldHJldHJpZXMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZXRyaWVzKGludCAkcmV0cmllcyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIHNldFRpbWVvdXQuCiAgICAgKiBTZXRzIHRoZSB0aW1lb3V0IGZvciB0aGUgY29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lb3V0CiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGh0dHBjb25uZWN0aW9uLnNldHRpbWVvdXQucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lb3V0KGludCAkdGltZW91dCk6IHZvaWQge30KfQoKLy8gVGhlIEV2ZW50SHR0cFJlcXVlc3QgY2xhc3MKY2xhc3MgRXZlbnRIdHRwUmVxdWVzdAp7CiAgICBwdWJsaWMgY29uc3QgQ01EX0dFVCA9IDE7CiAgICBwdWJsaWMgY29uc3QgQ01EX1BPU1QgPSAyOwogICAgcHVibGljIGNvbnN0IENNRF9IRUFEID0gNDsKICAgIHB1YmxpYyBjb25zdCBDTURfUFVUID0gODsKICAgIHB1YmxpYyBjb25zdCBDTURfREVMRVRFID0gMTY7CiAgICBwdWJsaWMgY29uc3QgQ01EX09QVElPTlMgPSAzMjsKICAgIHB1YmxpYyBjb25zdCBDTURfVFJBQ0UgPSA2NDsKICAgIHB1YmxpYyBjb25zdCBDTURfQ09OTkVDVCA9IDEyODsKICAgIHB1YmxpYyBjb25zdCBDTURfUEFUQ0ggPSAyNTY7CiAgICBwdWJsaWMgY29uc3QgSU5QVVRfSEVBREVSID0gMTsKICAgIHB1YmxpYyBjb25zdCBPVVRQVVRfSEVBREVSID0gMjsKCiAgICAvKioKICAgICAqIEV2ZW50SHR0cFJlcXVlc3QgY29uc3RydWN0b3IuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRhdGEKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIGNhbGxhYmxlICRjYWxsYmFjaywKICAgICAgICAkZGF0YSA9IG51bGwKICAgICkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkSGVhZGVyKHN0cmluZyAka2V5LCBzdHJpbmcgJHZhbHVlLCBpbnQgJHR5cGUpOiBib29sIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGNhbmNlbCgpOiB2b2lkIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFySGVhZGVycygpOiB2b2lkIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlQ29ubmVjdGlvbigpOiB2b2lkIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGZpbmRIZWFkZXIoc3RyaW5nICRrZXksIHN0cmluZyAkdHlwZSk6ID9zdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJlZSgpIHt9CgogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbW1hbmQoKTogaW50IHt9CgogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbm5lY3Rpb24oKTogP0V2ZW50SHR0cENvbm5lY3Rpb24ge30KCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SG9zdCgpOiBzdHJpbmcge30KCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW5wdXRCdWZmZXIoKTogRXZlbnRCdWZmZXIge30KCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW5wdXRIZWFkZXJzKCk6IGFycmF5IHt9CgogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldE91dHB1dEJ1ZmZlcigpOiBFdmVudEJ1ZmZlciB7fQoKICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPdXRwdXRIZWFkZXJzKCk6IGFycmF5IHt9CgogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3BvbnNlQ29kZSgpOiBpbnQge30KCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXJpKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVIZWFkZXIoc3RyaW5nICRrZXksIGludCAkdHlwZSk6IGJvb2wge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEVycm9yKGludCAkZXJyb3IsID9zdHJpbmcgJHJlYXNvbiA9IG51bGwpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlbmRSZXBseShpbnQgJGNvZGUsIHN0cmluZyAkcmVhc29uLCA/RXZlbnRCdWZmZXIgJGJ1ZiA9IG51bGwpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlbmRSZXBseUNodW5rKEV2ZW50QnVmZmVyICRidWYpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlbmRSZXBseUVuZCgpOiB2b2lkIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlbmRSZXBseVN0YXJ0KGludCAkY29kZSwgc3RyaW5nICRyZWFzb24pOiB2b2lkIHt9Cn0KCi8vICBUaGUgRXZlbnRMaXN0ZW5lciBjbGFzcwovKioKICogRXZlbnRMaXN0ZW5lci4KICogUmVwcmVzZW50cyBhIGNvbm5lY3Rpb24gbGlzdGVuZXIuCiAqCiAqIEBhdXRob3IgS2F6dWFraSBNQUJVQ0hJCiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9jYy5saWNlbnNlLnBocCkgYnkgdGhlIFBIUCBEb2N1bWVudGF0aW9uIEdyb3VwIGlzIGxpY2Vuc2VkIHVuZGVyIFtDQyBieSAzLjAgb3IgbGF0ZXJdKGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvKS4KICoKICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5ldmVudGxpc3RlbmVyLnBocAogKi8KZmluYWwgY2xhc3MgRXZlbnRMaXN0ZW5lcgp7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgICNbSW1tdXRhYmxlXQogICAgcHVibGljICRmZDsKICAgIHB1YmxpYyBjb25zdCBPUFRfTEVBVkVfU09DS0VUU19CTE9DS0lORyA9IDE7CiAgICBwdWJsaWMgY29uc3QgT1BUX0NMT1NFX09OX0ZSRUUgPSAyOwogICAgcHVibGljIGNvbnN0IE9QVF9DTE9TRV9PTl9FWEVDID0gNDsKICAgIHB1YmxpYyBjb25zdCBPUFRfUkVVU0VBQkxFID0gODsKICAgIHB1YmxpYyBjb25zdCBPUFRfVEhSRUFEU0FGRSA9IDE2OwogICAgcHVibGljIGNvbnN0IE9QVF9ESVNBQkxFRCA9IDMyOwogICAgcHVibGljIGNvbnN0IE9QVF9ERUZFUlJFRF9BQ0NFUFQgPSA2NDsKCiAgICAvKioKICAgICAqIF9fY29uc3RydWN0LgogICAgICogQ3JlYXRlcyBuZXcgY29ubmVjdGlvbiBsaXN0ZW5lciBhc3NvY2lhdGVkIHdpdGggYW4gZXZlbnQgYmFzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZlbnRCYXNlICRiYXNlCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgICRjYgogICAgICogQHBhcmFtIG1peGVkICAgICAkZGF0YQogICAgICogQHBhcmFtIGludCAgICAgICAkZmxhZ3MKICAgICAqIEBwYXJhbSBpbnQgICAgICAgJGJhY2tsb2cKICAgICAqIEBwYXJhbSBtaXhlZCAgICAgJHRhcmdldAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRsaXN0ZW5lci5jb25zdHJ1Y3QucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChFdmVudEJhc2UgJGJhc2UsIGNhbGxhYmxlICRjYiwgbWl4ZWQgJGRhdGEsIGludCAkZmxhZ3MsIGludCAkYmFja2xvZywgbWl4ZWQgJHRhcmdldCkge30KCiAgICAvKioKICAgICAqIGRpc2FibGUuCiAgICAgKiBEaXNhYmxlcyBhbiBldmVudCBjb25uZWN0IGxpc3RlbmVyIG9iamVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50bGlzdGVuZXIuZGlzYWJsZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc2FibGUoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogZW5hYmxlLgogICAgICogRW5hYmxlcyBhbiBldmVudCBjb25uZWN0IGxpc3RlbmVyIG9iamVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50bGlzdGVuZXIuZW5hYmxlLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5hYmxlKCk6IGJvb2wge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJlZSgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBnZXRCYXNlLgogICAgICogUmV0dXJucyBldmVudCBiYXNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgbGlzdGVuZXIuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGxpc3RlbmVyLmdldGJhc2UucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCYXNlKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIGdldFNvY2tldE5hbWUuCiAgICAgKiBSZXRyZWl2ZXMgdGhlIGN1cnJlbnQgYWRkcmVzcyB0byB3aGljaCB0aGUgbGlzdGVuZXIncyBzb2NrZXQgaXMgYm91bmQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAmJGFkZHJlc3MKICAgICAqIEBwYXJhbSBtaXhlZCAgJiRwb3J0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGxpc3RlbmVyLmdldHNvY2tldG5hbWUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U29ja2V0TmFtZShzdHJpbmcgJiRhZGRyZXNzLCBpbnQgJiRwb3J0KTogYm9vbCB7fQoKICAgIC8qKgogICAgICogc2V0Q2FsbGJhY2suCiAgICAgKiBUaGUgc2V0Q2FsbGJhY2sgcHVycG9zZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNiCiAgICAgKiBAcGFyYW0gbWl4ZWQgICAgJGFyZyA9IG51bGwKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50bGlzdGVuZXIuc2V0Y2FsbGJhY2sucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDYWxsYmFjayhjYWxsYWJsZSAkY2IsIG1peGVkICRhcmcgPSBudWxsKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogc2V0RXJyb3JDYWxsYmFjay4KICAgICAqIFNldCBldmVudCBsaXN0ZW5lcidzIGVycm9yIGNhbGxiYWNrLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNiCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudGxpc3RlbmVyLnNldGVycm9yY2FsbGJhY2sucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFcnJvckNhbGxiYWNrKHN0cmluZyAkY2IpOiB2b2lkIHt9Cn0KCi8vICBUaGUgRXZlbnRTc2xDb250ZXh0IGNsYXNzCi8qKgogKiBFdmVudFNzbENvbnRleHQuCiAqIFJlcHJlc2VudHMgU1NMX0NUWCBzdHJ1Y3R1cmUuIFByb3ZpZGVzIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgdG8gY29uZmlndXJlIHRoZSBTU0wgY29udGV4dC4KICoKICoKICogQGF1dGhvciBLYXp1YWtpIE1BQlVDSEkKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2NjLmxpY2Vuc2UucGhwKSBieSB0aGUgUEhQIERvY3VtZW50YXRpb24gR3JvdXAgaXMgbGljZW5zZWQgdW5kZXIgW0NDIGJ5IDMuMCBvciBsYXRlcl0oaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMC8pLgogKgogKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmV2ZW50c3NsY29udGV4dC5waHAKICovCmZpbmFsIGNsYXNzIEV2ZW50U3NsQ29udGV4dAp7CiAgICBwdWJsaWMgY29uc3QgU1NMdjJfQ0xJRU5UX01FVEhPRCA9IDE7CiAgICBwdWJsaWMgY29uc3QgU1NMdjNfQ0xJRU5UX01FVEhPRCA9IDI7CiAgICBwdWJsaWMgY29uc3QgU1NMdjIzX0NMSUVOVF9NRVRIT0QgPSAzOwogICAgcHVibGljIGNvbnN0IFRMU19DTElFTlRfTUVUSE9EID0gNDsKICAgIHB1YmxpYyBjb25zdCBTU0x2Ml9TRVJWRVJfTUVUSE9EID0gNTsKICAgIHB1YmxpYyBjb25zdCBTU0x2M19TRVJWRVJfTUVUSE9EID0gNjsKICAgIHB1YmxpYyBjb25zdCBTU0x2MjNfU0VSVkVSX01FVEhPRCA9IDc7CiAgICBwdWJsaWMgY29uc3QgVExTX1NFUlZFUl9NRVRIT0QgPSA4OwogICAgcHVibGljIGNvbnN0IFRMU3YxMV9DTElFTlRfTUVUSE9EID0gOTsKICAgIHB1YmxpYyBjb25zdCBUTFN2MTFfU0VSVkVSX01FVEhPRCA9IDEwOwogICAgcHVibGljIGNvbnN0IFRMU3YxMl9DTElFTlRfTUVUSE9EID0gMTE7CiAgICBwdWJsaWMgY29uc3QgVExTdjEyX1NFUlZFUl9NRVRIT0QgPSAxMjsKICAgIHB1YmxpYyBjb25zdCBPUFRfTE9DQUxfQ0VSVCA9IDE7CiAgICBwdWJsaWMgY29uc3QgT1BUX0xPQ0FMX1BLID0gMjsKICAgIHB1YmxpYyBjb25zdCBPUFRfUEFTU1BIUkFTRSA9IDM7CiAgICBwdWJsaWMgY29uc3QgT1BUX0NBX0ZJTEUgPSA0OwogICAgcHVibGljIGNvbnN0IE9QVF9DQV9QQVRIID0gNTsKICAgIHB1YmxpYyBjb25zdCBPUFRfQUxMT1dfU0VMRl9TSUdORUQgPSA2OwogICAgcHVibGljIGNvbnN0IE9QVF9WRVJJRllfUEVFUiA9IDc7CiAgICBwdWJsaWMgY29uc3QgT1BUX1ZFUklGWV9ERVBUSCA9IDg7CiAgICBwdWJsaWMgY29uc3QgT1BUX0NJUEhFUlMgPSA5OwogICAgcHVibGljIGNvbnN0IE9QVF9OT19TU0x2MiA9IDEwOwogICAgcHVibGljIGNvbnN0IE9QVF9OT19TU0x2MyA9IDExOwogICAgcHVibGljIGNvbnN0IE9QVF9OT19UTFN2MSA9IDEyOwogICAgcHVibGljIGNvbnN0IE9QVF9OT19UTFN2MV8xID0gMTM7CiAgICBwdWJsaWMgY29uc3QgT1BUX05PX1RMU3YxXzIgPSAxNDsKICAgIHB1YmxpYyBjb25zdCBPUFRfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFID0gMTU7CiAgICBwdWJsaWMgY29uc3QgT1BUX1JFUVVJUkVfQ0xJRU5UX0NFUlQgPSAxNjsKICAgIHB1YmxpYyBjb25zdCBPUFRfVkVSSUZZX0NMSUVOVF9PTkNFID0gMTc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGxvY2FsX2NlcnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGxvY2FsX3BrOwoKICAgIC8qKgogICAgICogX19jb25zdHJ1Y3QuCiAgICAgKiBDb25zdHJ1Y3RzIGFuIE9wZW5TU0wgY29udGV4dCBmb3IgdXNlIHdpdGggRXZlbnQgY2xhc3Nlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRtZXRob2QKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucwogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnRzc2xjb250ZXh0LmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkbWV0aG9kLCBhcnJheSAkb3B0aW9ucykge30KCiAgICAvKioKICAgICAqIFNldHMgbWluaW11bSBzdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbiBmb3IgdGhlIFNTTCBjb250ZXh0CiAgICAgKiBAcGFyYW0gaW50ICRwcm90bwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNaW5Qcm90b1ZlcnNpb24oaW50ICRwcm90byk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFNldHMgbWF4IHN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIGZvciB0aGUgU1NMIGNvbnRleHQuCiAgICAgKiBAcGFyYW0gaW50ICRwcm90bwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNYXhQcm90b1ZlcnNpb24oaW50ICRwcm90byk6IGJvb2wge30KfQoKLy8gVGhlIEV2ZW50VXRpbCBjbGFzcwovKioKICogRXZlbnRVdGlsLgogKiBFdmVudFV0aWwgaXMgYSBzaW5nbGV0b24gd2l0aCBzdXBwbGltZW50YXJ5IG1ldGhvZHMgYW5kIGNvbnN0YW50cy4KICoKICogQGF1dGhvciBLYXp1YWtpIE1BQlVDSEkKICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2NjLmxpY2Vuc2UucGhwKSBieSB0aGUgUEhQIERvY3VtZW50YXRpb24gR3JvdXAgaXMgbGljZW5zZWQgdW5kZXIgW0NDIGJ5IDMuMCBvciBsYXRlcl0oaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMC8pLgogKgogKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLmV2ZW50dXRpbC5waHAKICovCmZpbmFsIGNsYXNzIEV2ZW50VXRpbAp7CiAgICBwdWJsaWMgY29uc3QgQUZfSU5FVCA9IDI7CiAgICBwdWJsaWMgY29uc3QgQUZfSU5FVDYgPSAxMDsKICAgIHB1YmxpYyBjb25zdCBBRl9VTklYID0gMTsKICAgIHB1YmxpYyBjb25zdCBBRl9VTlNQRUMgPSAwOwogICAgcHVibGljIGNvbnN0IExJQkVWRU5UX1ZFUlNJT05fTlVNQkVSID0gMzM1NTk4MDg7CiAgICBwdWJsaWMgY29uc3QgU09fREVCVUcgPSAxOwogICAgcHVibGljIGNvbnN0IFNPX1JFVVNFQUREUiA9IDI7CiAgICBwdWJsaWMgY29uc3QgU09fS0VFUEFMSVZFID0gOTsKICAgIHB1YmxpYyBjb25zdCBTT19ET05UUk9VVEUgPSA1OwogICAgcHVibGljIGNvbnN0IFNPX0xJTkdFUiA9IDEzOwogICAgcHVibGljIGNvbnN0IFNPX0JST0FEQ0FTVCA9IDY7CiAgICBwdWJsaWMgY29uc3QgU09fT09CSU5MSU5FID0gMTA7CiAgICBwdWJsaWMgY29uc3QgU09fU05EQlVGID0gNzsKICAgIHB1YmxpYyBjb25zdCBTT19SQ1ZCVUYgPSA4OwogICAgcHVibGljIGNvbnN0IFNPX1NORExPV0FUID0gMTk7CiAgICBwdWJsaWMgY29uc3QgU09fUkNWTE9XQVQgPSAxODsKICAgIHB1YmxpYyBjb25zdCBTT19TTkRUSU1FTyA9IDIxOwogICAgcHVibGljIGNvbnN0IFNPX1JDVlRJTUVPID0gMjA7CiAgICBwdWJsaWMgY29uc3QgU09fVFlQRSA9IDM7CiAgICBwdWJsaWMgY29uc3QgU09fRVJST1IgPSA0OwogICAgcHVibGljIGNvbnN0IFNPTF9TT0NLRVQgPSAxOwogICAgcHVibGljIGNvbnN0IFNPTF9UQ1AgPSA2OwogICAgcHVibGljIGNvbnN0IFNPTF9VRFAgPSAxNzsKICAgIHB1YmxpYyBjb25zdCBTT0NLX1JBVyA9IDM7CiAgICBwdWJsaWMgY29uc3QgVENQX05PREVMQVkgPSAxOwogICAgcHVibGljIGNvbnN0IElQUFJPVE9fSVAgPSAwOwogICAgcHVibGljIGNvbnN0IElQUFJPVE9fSVBWNiA9IDQxOwoKICAgIC8qKgogICAgICogX19jb25zdHJ1Y3QuCiAgICAgKiBUaGUgYWJzdHJhY3QgY29uc3RydWN0b3IuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudHV0aWwuY29uc3RydWN0LnBocAogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkc29ja2V0CiAgICAgKiBAcmV0dXJuIHJlc291cmNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVTb2NrZXQobWl4ZWQgJHNvY2tldCkge30KCiAgICAvKioKICAgICAqIGdldExhc3RTb2NrZXRFcnJuby4KICAgICAqIFJldHVybnMgdGhlIG1vc3QgcmVjZW50IHNvY2tldCBlcnJvciBudW1iZXIuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRzb2NrZXQgPSBudWxsCiAgICAgKgogICAgICogQHJldHVybiBpbnR8ZmFsc2UKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50dXRpbC5nZXRsYXN0c29ja2V0ZXJybm8ucGhwCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TGFzdFNvY2tldEVycm5vKCRzb2NrZXQgPSBudWxsKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBnZXRMYXN0U29ja2V0RXJyb3IuCiAgICAgKiBSZXR1cm5zIHRoZSBtb3N0IHJlY2VudCBzb2NrZXQgZXJyb3IuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRzb2NrZXQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnR1dGlsLmdldGxhc3Rzb2NrZXRlcnJvci5waHAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMYXN0U29ja2V0RXJyb3IobWl4ZWQgJHNvY2tldCk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogZ2V0U29ja2V0RmQuCiAgICAgKiBSZXR1cm5zIG51bWVyaWMgZmlsZSBkZXNjcmlwdG9yIG9mIGEgc29ja2V0LCBvciBzdHJlYW0uCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRzb2NrZXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZXZlbnR1dGlsLmdldHNvY2tldGZkLnBocAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFNvY2tldEZkKG1peGVkICRzb2NrZXQpOiBpbnQge30KCiAgICAvKioKICAgICAqIGdldFNvY2tldE5hbWUuCiAgICAgKiBSZXRyZWl2ZXMgdGhlIGN1cnJlbnQgYWRkcmVzcyB0byB3aGljaCB0aGUgc29ja2V0IGlzIGJvdW5kLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkc29ja2V0CiAgICAgKiBAcGFyYW0gc3RyaW5nICYkYWRkcmVzcwogICAgICogQHBhcmFtIG1peGVkICAmJHBvcnQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2V2ZW50dXRpbC5nZXRzb2NrZXRuYW1lLnBocAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFNvY2tldE5hbWUobWl4ZWQgJHNvY2tldCwgc3RyaW5nICYkYWRkcmVzcywgaW50ICYkcG9ydCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHNldFNvY2tldE9wdGlvbi4KICAgICAqIFNldHMgc29ja2V0IG9wdGlvbnMuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRzb2NrZXQKICAgICAqIEBwYXJhbSBpbnQgICAkbGV2ZWwKICAgICAqIEBwYXJhbSBpbnQgICAkb3B0bmFtZQogICAgICogQHBhcmFtIGludHxhcnJheSAkb3B0dmFsCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudHV0aWwuc2V0c29ja2V0b3B0aW9uLnBocAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldFNvY2tldE9wdGlvbihtaXhlZCAkc29ja2V0LCBpbnQgJGxldmVsLCBpbnQgJG9wdG5hbWUsIGludHxhcnJheSAkb3B0dmFsKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogc3NsUmFuZFBvbGwuCiAgICAgKiBHZW5lcmF0ZXMgZW50cm9weSBieSBtZWFucyBvZiBPcGVuU1NMJ3MgUkFORF9wb2xsKCkuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9ldmVudHV0aWwuc3NscmFuZHBvbGwucGhwCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3NsUmFuZFBvbGwoKTogYm9vbCB7fQp9Cjw/cGhwCgovLyBTdGFydCBvZiBmaWxlaW5mbyB2LjEuMC41Cgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcVGVudGF0aXZlVHlwZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxQdXJlOwoKY2xhc3MgZmluZm8KewogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYWdpY19kYXRhYmFzZSBbb3B0aW9uYWxdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MgPSAwLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJG1hZ2ljX2RhdGFiYXNlCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJG9wdGlvbnMgW29wdGlvbmFsXQogICAgICogQHBhcmFtICRhcmcgW29wdGlvbmFsXQogICAgICovCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXQogICAgcHVibGljIGZ1bmN0aW9uIGZpbmZvKCRvcHRpb25zLCAkYXJnKSB7fQoKICAgIC8qKgogICAgICogKFBIUCAmZ3Q7PSA1LjMuMCwgUEVDTCBmaWxlaW5mbyAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogU2V0IGxpYm1hZ2ljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5maW5mby1zZXQtZmxhZ3MucGhwCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyA8cD4KICAgICAqIE9uZSBvciBkaXNqdW5jdGlvbiBvZiBtb3JlIEZpbGVpbmZvCiAgICAgKiBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC40JyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldF9mbGFncygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQICZndDs9IDUuMy4wLCBQRUNMIGZpbGVpbmZvICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZpbmZvLWZpbGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICAgICAqIE5hbWUgb2YgYSBmaWxlIHRvIGJlIGNoZWNrZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogICAgICogT25lIG9yIGRpc2p1bmN0aW9uIG9mIG1vcmUgRmlsZWluZm8KICAgICAqIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dCBbb3B0aW9uYWxdIDxwPgogICAgICogRm9yIGEgZGVzY3JpcHRpb24gb2YgY29udGV4dHMsIHJlZmVyIHRvIC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgY29udGVudHMgb2YgdGhlCiAgICAgKiA8aT5maWxlbmFtZTwvaT4gYXJndW1lbnQsIG9yIDxiPkZBTFNFPC9iPiBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGZpbGUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGZpbGVuYW1lLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IEZJTEVJTkZPX05PTkUsCiAgICAgICAgJGNvbnRleHQgPSBudWxsCiAgICApOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjMuMCwgUEVDTCBmaWxlaW5mbyAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IGEgc3RyaW5nIGJ1ZmZlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5maW5mby1idWZmZXIucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAgICAgKiBDb250ZW50IG9mIGEgZmlsZSB0byBiZSBjaGVja2VkLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICAgICAqIE9uZSBvciBkaXNqdW5jdGlvbiBvZiBtb3JlIEZpbGVpbmZvCiAgICAgKiBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJGNvbnRleHQgW29wdGlvbmFsXQogICAgICogQHJldHVybiBzdHJpbmcgYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSA8aT5zdHJpbmc8L2k+CiAgICAgKiBhcmd1bWVudCwgb3IgPGI+RkFMU0U8L2I+IGlmIGFuIGVycm9yIG9jY3VycmVkLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVmZmVyKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRzdHJpbmcsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gRklMRUlORk9fTk9ORSwKICAgICAgICAkY29udGV4dCA9IG51bGwKICAgICk6IHN0cmluZ3xmYWxzZSB7fQp9CgovKioKICogKFBIUCAmZ3Q7PSA1LjMuMCwgUEVDTCBmaWxlaW5mbyAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBDcmVhdGUgYSBuZXcgZmlsZWluZm8gcmVzb3VyY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5maW5mby1vcGVuLnBocAogKiBAcGFyYW0gaW50ICRmbGFncyA8cD4KICogT25lIG9yIGRpc2p1bmN0aW9uIG9mIG1vcmUgRmlsZWluZm8KICogY29uc3RhbnRzLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbWFnaWNfZGF0YWJhc2UgW29wdGlvbmFsXSA8cD4KICogTmFtZSBvZiBhIG1hZ2ljIGRhdGFiYXNlIGZpbGUsIHVzdWFsbHkgc29tZXRoaW5nIGxpa2UKICogL3BhdGgvdG8vbWFnaWMubWltZS4gSWYgbm90IHNwZWNpZmllZCwKICogdGhlIE1BR0lDIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVzZWQuIElmIHRoaXMgdmFyaWFibGUKICogaXMgbm90IHNldCBlaXRoZXIsIC91c3Ivc2hhcmUvbWlzYy9tYWdpYyBpcyB1c2VkIGJ5IGRlZmF1bHQuCiAqIEEgLm1pbWUgYW5kL29yIC5tZ2Mgc3VmZml4IGlzIGFkZGVkIGlmCiAqIG5lZWRlZC4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGEgbWFnaWMgZGF0YWJhc2UgcmVzb3VyY2Ugb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2ZpbmZvfGZhbHNlJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxmYWxzZScpXQpmdW5jdGlvbiBmaW5mb19vcGVuKGludCAkZmxhZ3MgPSAwLCA/c3RyaW5nICRtYWdpY19kYXRhYmFzZSA9IG51bGwpIHt9CgovKioKICogKFBIUCAmZ3Q7PSA1LjMuMCwgUEVDTCBmaWxlaW5mbyAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBDbG9zZSBmaWxlaW5mbyByZXNvdXJjZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZpbmZvLWNsb3NlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGZpbmZvIDxwPgogKiBGaWxlaW5mbyByZXNvdXJjZSByZXR1cm5lZCBieSBmaW5mb19vcGVuLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gZmluZm9fY2xvc2UoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnZmluZm8nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRmaW5mbyk6IGJvb2wge30KCi8qKgogKiAoUEhQICZndDs9IDUuMy4wLCBQRUNMIGZpbGVpbmZvICZndDs9IDAuMS4wKTxici8+CiAqIFNldCBsaWJtYWdpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5maW5mby1zZXQtZmxhZ3MucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZmluZm8gPHA+CiAqIEZpbGVpbmZvIHJlc291cmNlIHJldHVybmVkIGJ5IGZpbmZvX29wZW4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgPHA+CiAqIE9uZSBvciBkaXNqdW5jdGlvbiBvZiBtb3JlIEZpbGVpbmZvCiAqIGNvbnN0YW50cy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguNCcgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KZnVuY3Rpb24gZmluZm9fc2V0X2ZsYWdzKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2ZpbmZvJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkZmluZm8sIGludCAkZmxhZ3MpIHt9CgovKioKICogKFBIUCAmZ3Q7PSA1LjMuMCwgUEVDTCBmaWxlaW5mbyAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmluZm8tZmlsZS5waHAKICogQHBhcmFtIHJlc291cmNlICRmaW5mbyA8cD4KICogRmlsZWluZm8gcmVzb3VyY2UgcmV0dXJuZWQgYnkgZmluZm9fb3Blbi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICogTmFtZSBvZiBhIGZpbGUgdG8gYmUgY2hlY2tlZC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyA8cD4KICogT25lIG9yIGRpc2p1bmN0aW9uIG9mIG1vcmUgRmlsZWluZm8KICogY29uc3RhbnRzLgogKiA8L3A+CiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dCBbb3B0aW9uYWxdIDxwPgogKiBGb3IgYSBkZXNjcmlwdGlvbiBvZiBjb250ZXh0cywgcmVmZXIgdG8gLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgY29udGVudHMgb2YgdGhlCiAqIDxpPmZpbGVuYW1lPC9pPiBhcmd1bWVudCwgb3IgPGI+RkFMU0U8L2I+IGlmIGFuIGVycm9yIG9jY3VycmVkLgogKi8KZnVuY3Rpb24gZmluZm9fZmlsZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdmaW5mbyddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGZpbmZvLCBzdHJpbmcgJGZpbGVuYW1lLCBpbnQgJGZsYWdzID0gMCwgJGNvbnRleHQpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgZmlsZWluZm8gJmd0Oz0gMC4xLjApPGJyLz4KICogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IGEgc3RyaW5nIGJ1ZmZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmZpbmZvLWJ1ZmZlci5waHAKICogQHBhcmFtIHJlc291cmNlICRmaW5mbyA8cD4KICogRmlsZWluZm8gcmVzb3VyY2UgcmV0dXJuZWQgYnkgZmluZm9fb3Blbi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAqIENvbnRlbnQgb2YgYSBmaWxlIHRvIGJlIGNoZWNrZWQuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSBPbmUgb3IgZGlzanVuY3Rpb24gb2YgbW9yZQogKiA8YSBocmVmPSJodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ZpbGVpbmZvLmNvbnN0YW50cy5waHAiPkZpbGVpbmZvPC9hPiBjb25zdGFudHMuCiAqIEBwYXJhbSByZXNvdXJjZSAkY29udGV4dCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgPGk+c3RyaW5nPC9pPgogKiBhcmd1bWVudCwgb3IgPGI+RkFMU0U8L2I+IGlmIGFuIGVycm9yIG9jY3VycmVkLgogKi8KZnVuY3Rpb24gZmluZm9fYnVmZmVyKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2ZpbmZvJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkZmluZm8sIHN0cmluZyAkc3RyaW5nLCBpbnQgJGZsYWdzID0gRklMRUlORk9fTk9ORSwgJGNvbnRleHQpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBEZXRlY3QgTUlNRSBDb250ZW50LXR5cGUgZm9yIGEgZmlsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1pbWUtY29udGVudC10eXBlLnBocAogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICogUGF0aCB0byB0aGUgdGVzdGVkIGZpbGUuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIGNvbnRlbnQgdHlwZSBpbiBNSU1FIGZvcm1hdCwgbGlrZQogKiB0ZXh0L3BsYWluIG9yIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbS4KICovCmZ1bmN0aW9uIG1pbWVfY29udGVudF90eXBlKCRmaWxlbmFtZSk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIE5vIHNwZWNpYWwgaGFuZGxpbmcuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZmlsZWluZm8uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdGSUxFSU5GT19OT05FJywgMCk7CgovKioKICogRm9sbG93IHN5bWxpbmtzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ZpbGVpbmZvLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRklMRUlORk9fU1lNTElOSycsIDIpOwoKLyoqCiAqIFJldHVybiB0aGUgbWltZSB0eXBlIGFuZCBtaW1lIGVuY29kaW5nIGFzIGRlZmluZWQgYnkgUkZDIDIwNDUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZmlsZWluZm8uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdGSUxFSU5GT19NSU1FJywgMTA0MCk7CgovKioKICogUmV0dXJuIHRoZSBtaW1lIHR5cGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZmlsZWluZm8uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdGSUxFSU5GT19NSU1FX1RZUEUnLCAxNik7CgovKioKICogUmV0dXJuIHRoZSBtaW1lIGVuY29kaW5nIG9mIHRoZSBmaWxlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ZpbGVpbmZvLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRklMRUlORk9fTUlNRV9FTkNPRElORycsIDEwMjQpOwoKLyoqCiAqIExvb2sgYXQgdGhlIGNvbnRlbnRzIG9mIGJsb2NrcyBvciBjaGFyYWN0ZXIgc3BlY2lhbCBkZXZpY2VzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ZpbGVpbmZvLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRklMRUlORk9fREVWSUNFUycsIDgpOwoKLyoqCiAqIFJldHVybiBhbGwgbWF0Y2hlcywgbm90IGp1c3QgdGhlIGZpcnN0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ZpbGVpbmZvLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRklMRUlORk9fQ09OVElOVUUnLCAzMik7CgovKioKICogSWYgcG9zc2libGUgcHJlc2VydmUgdGhlIG9yaWdpbmFsIGFjY2VzcyB0aW1lLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ZpbGVpbmZvLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRklMRUlORk9fUFJFU0VSVkVfQVRJTUUnLCAxMjgpOwoKLyoqCiAqIERvbid0IHRyYW5zbGF0ZSB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIHRvIGEgXG9vbyBvY3RhbAogKiByZXByZXNlbnRhdGlvbi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9maWxlaW5mby5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0ZJTEVJTkZPX1JBVycsIDI1Nik7CgovKioKICogUmV0dXJucyB0aGUgZmlsZSBleHRlbnNpb24gYXBwcm9wcmlhdGUgZm9yIGEgdGhlIE1JTUUgdHlwZSBkZXRlY3RlZCBpbiB0aGUgZmlsZS4KICogRm9yIHR5cGVzIHRoYXQgY29tbW9ubHkgaGF2ZSBtdWx0aXBsZSBmaWxlIGV4dGVuc2lvbnMsIHN1Y2ggYXMgSlBFRyBpbWFnZXMsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSBpcyBtdWx0aXBsZSBleHRlbnNpb25zIHNwZXBhcmF0ZWQgYnkgYSBmb3J3YXJkIHNsYXNoIGUuZy46ICJqcGVnL2pwZy9qcGUvamZpZiIuCiAqIEZvciB1bmtub3duIHR5cGVzIG5vdCBhdmFpbGFibGUgaW4gdGhlIG1hZ2ljLm1pbWUgZGF0YWJhc2UsIHRoZW4gcmV0dXJuIHZhbHVlIGlzICI/Pz8iLiBBdmFpbGFibGUgc2luY2UgUEhQIDcuMi4wLgogKiBAc2luY2UgNy4yCiAqLwpkZWZpbmUoJ0ZJTEVJTkZPX0VYVEVOU0lPTicsIDIwOTcxNTIpOwoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmRlZmluZSgnRklMRUlORk9fQVBQTEUnLCAyMDQ4KTsKCi8vIEVuZCBvZiBmaWxlaW5mbyB2LjEuMC41Cjw/cGhwCgovLyBTdGFydCBvZiBzb2NrZXRzIHYuCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cQXJyYXlTaGFwZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZTsKCi8qKgogKiAoUEhQIDcgJmd0Oz0gNy4yLjApPGJyLz4KICogR2V0IGFycmF5IHdpdGggY29udGVudHMgb2YgZ2V0YWRkcmluZm8gYWJvdXQgdGhlIGdpdmVuIGhvc3RuYW1lLgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtYWRkcmluZm8tbG9va3VwLnBocAogKiBAcGFyYW0gc3RyaW5nICRob3N0IDxwPgogKiBIb3N0bmFtZSB0byBzZWFyY2guCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc2VydmljZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgc2VydmljZSB0byBjb25uZWN0IHRvLiBJZiBzZXJ2aWNlIGlzIGEgbmFtZSwgaXQgaXMgdHJhbnNsYXRlZCB0byB0aGUgY29ycmVzcG9uZGluZyBwb3J0IG51bWJlci4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJGhpbnRzIDxwPgogKiBIaW50cyBwcm92aWRlIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgYWRkcmVzc2VzIHJldHVybmVkLiBZb3UgbWF5IHNwZWNpZnkgdGhlIGhpbnRzIGFzIGRlZmluZWQgYnkgZ2V0YWRyaW5mby4KICogPC9wPgogKiBAcmV0dXJuIEFkZHJlc3NJbmZvW118ZmFsc2Ugb2YgQWRkckluZm8gcmVzb3VyY2UgaGFuZGxlcyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhlIG90aGVyIHNvY2tldF9hZGRyaW5mbyBmdW5jdGlvbnMuCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvY2tldF9hZGRyaW5mb19sb29rdXAoc3RyaW5nICRob3N0LCA/c3RyaW5nICRzZXJ2aWNlLCBhcnJheSAkaGludHMgPSBbXSk6IGFycmF5fGZhbHNlIHt9CgovKioKICogQ3JlYXRlIGEgU29ja2V0IHJlc291cmNlLCBhbmQgY29ubmVjdCBpdCB0byB0aGUgcHJvdmlkZWQgQWRkckluZm8gcmVzb3VyY2UuPGJyLz4KICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHNvY2tldCBmdW5jdGlvbnMuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1hZGRyaW5mby1jb25uZWN0LnBocAogKiBAcGFyYW0gcmVzb3VyY2V8QWRkcmVzc0luZm8gJGFkZHJlc3MgPHA+CiAqIFJlc291cmNlIGNyZWF0ZWQgZnJvbSB7QHNlZSBzb2NrZXRfYWRkcmluZm9fbG9va3VwKCl9CiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxTb2NrZXR8bnVsbHxmYWxzZSBTb2NrZXQgcmVzb3VyY2Ugb24gc3VjY2VzcyBvciBOVUxMIG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvY2tldF9hZGRyaW5mb19jb25uZWN0KEFkZHJlc3NJbmZvICRhZGRyZXNzKTogU29ja2V0fGZhbHNlIHt9CgovKioKICogKFBIUCA3ICZndDs9IDcuMi4wKTxici8+CiAqIENyZWF0ZSBhIFNvY2tldCByZXNvdXJjZSwgYW5kIGJpbmQgaXQgdG8gdGhlIHByb3ZpZGVkIEFkZHJJbmZvIHJlc291cmNlLjxici8+CiAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvbiBtYXkgYmUgdXNlZCB3aXRoIHtAc2VlIHNvY2tldF9saXN0ZW4oKX0uCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1hZGRyaW5mby1iaW5kLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8QWRkcmVzc0luZm8gJGFkZHJlc3MgPHA+CiAqIFJlc291cmNlIGNyZWF0ZWQgZnJvbSB7QHNlZSBzb2NrZXRfYWRkcmluZm9fbG9va3VwKCl9CiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxTb2NrZXR8bnVsbHxmYWxzZSBTb2NrZXQgcmVzb3VyY2Ugb24gc3VjY2VzcyBvciBOVUxMIG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvY2tldF9hZGRyaW5mb19iaW5kKEFkZHJlc3NJbmZvICRhZGRyZXNzKTogU29ja2V0fGZhbHNlIHt9CgovKioKICogKFBIUCA3ICZndDs9IDcuMi4wKTxici8+CiAqIEdldCBpbmZvcm1hdGlvbiBhYm91dCBhZGRyaW5mbwogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtYWRkcmluZm8tZXhwbGFpbi5waHAKICogQHBhcmFtIHJlc291cmNlfEFkZHJlc3NJbmZvICRhZGRyZXNzIDxwPgogKiBSZXNvdXJjZSBjcmVhdGVkIGZyb20ge0BzZWUgc29ja2V0X2FkZHJpbmZvX2xvb2t1cCgpfQogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXkgY29udGFpbmluZyB0aGUgZmllbGRzIGluIHRoZSBhZGRyaW5mbyBzdHJ1Y3R1cmUuCiAqIEBzaW5jZSA3LjIKICovCiNbQXJyYXlTaGFwZShbCiAgICAnYWlfZmxhZ3MnID0+ICdpbnQnLAogICAgJ2FpX2ZhbWlseScgPT4gJ2ludCcsCiAgICAnYWlfc29ja3R5cGUnID0+ICdpbnQnLAogICAgJ2FpX3Byb3RvY29sJyA9PiAnaW50JywKICAgICdhaV9jYW5vbm5hbWUnID0+ICdzdHJpbmcnLAogICAgJ2FpX2FkZHInID0+IFsKICAgICAgICAnc2luX3BvcnQnID0+ICdpbnQnLAogICAgICAgICdzaW5fYWRkcicgPT4gJ3N0cmluZycsCiAgICAgICAgJ3NpbjZfcG9ydCcgPT4gJ2ludCcsCiAgICAgICAgJ3NpbjZfYWRkcicgPT4gJ3N0cmluZycsCiAgICBdCl0pXQpmdW5jdGlvbiBzb2NrZXRfYWRkcmluZm9fZXhwbGFpbihBZGRyZXNzSW5mbyAkYWRkcmVzcyk6IGFycmF5IHt9CgovKioKICogUnVucyB0aGUgc2VsZWN0KCkgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIGFycmF5cyBvZiBzb2NrZXRzIHdpdGggYSBzcGVjaWZpZWQgdGltZW91dAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1zZWxlY3QucGhwCiAqIEBwYXJhbSBhcnJheXxudWxsICYkcmVhZCA8cD4KICogVGhlIHNvY2tldHMgbGlzdGVkIGluIHRoZSA8aT5yZWFkPC9pPiBhcnJheSB3aWxsIGJlCiAqIHdhdGNoZWQgdG8gc2VlIGlmIGNoYXJhY3RlcnMgYmVjb21lIGF2YWlsYWJsZSBmb3IgcmVhZGluZyAobW9yZQogKiBwcmVjaXNlbHksIHRvIHNlZSBpZiBhIHJlYWQgd2lsbCBub3QgYmxvY2sgLSBpbiBwYXJ0aWN1bGFyLCBhIHNvY2tldAogKiByZXNvdXJjZSBpcyBhbHNvIHJlYWR5IG9uIGVuZC1vZi1maWxlLCBpbiB3aGljaCBjYXNlIGEKICogPGI+c29ja2V0X3JlYWQ8L2I+IHdpbGwgcmV0dXJuIGEgemVybyBsZW5ndGggc3RyaW5nKS4KICogPC9wPgogKiBAcGFyYW0gYXJyYXl8bnVsbCAmJHdyaXRlIDxwPgogKiBUaGUgc29ja2V0cyBsaXN0ZWQgaW4gdGhlIDxpPndyaXRlPC9pPiBhcnJheSB3aWxsIGJlCiAqIHdhdGNoZWQgdG8gc2VlIGlmIGEgd3JpdGUgd2lsbCBub3QgYmxvY2suCiAqIDwvcD4KICogQHBhcmFtIGFycmF5fG51bGwgJiRleGNlcHQgPHA+CiAqIFRoZSBzb2NrZXRzIGxpc3RlZCBpbiB0aGUgPGk+ZXhjZXB0PC9pPiBhcnJheSB3aWxsIGJlCiAqIHdhdGNoZWQgZm9yIGV4Y2VwdGlvbnMuCiAqIDwvcD4KICogQHBhcmFtIGludHxudWxsICRzZWNvbmRzIDxwPgogKiBUaGUgPGk+dHZfc2VjPC9pPiBhbmQgPGk+dHZfdXNlYzwvaT4KICogdG9nZXRoZXIgZm9ybSB0aGUgdGltZW91dCBwYXJhbWV0ZXIuIFRoZQogKiB0aW1lb3V0IGlzIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBhbW91bnQgb2YgdGltZQogKiBlbGFwc2VkIGJlZm9yZSA8Yj5zb2NrZXRfc2VsZWN0PC9iPiByZXR1cm4uCiAqIDxpPnR2X3NlYzwvaT4gbWF5IGJlIHplcm8gLCBjYXVzaW5nCiAqIDxiPnNvY2tldF9zZWxlY3Q8L2I+IHRvIHJldHVybiBpbW1lZGlhdGVseS4gVGhpcyBpcyB1c2VmdWwKICogZm9yIHBvbGxpbmcuIElmIDxpPnR2X3NlYzwvaT4gaXMgPGI+TlVMTDwvYj4gKG5vIHRpbWVvdXQpLAogKiA8Yj5zb2NrZXRfc2VsZWN0PC9iPiBjYW4gYmxvY2sgaW5kZWZpbml0ZWx5LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG1pY3Jvc2Vjb25kcyBbb3B0aW9uYWxdCiAqIEByZXR1cm4gaW50fGZhbHNlIE9uIHN1Y2Nlc3MgPGI+c29ja2V0X3NlbGVjdDwvYj4gcmV0dXJucyB0aGUgbnVtYmVyIG9mCiAqIHNvY2tldCByZXNvdXJjZXMgY29udGFpbmVkIGluIHRoZSBtb2RpZmllZCBhcnJheXMsIHdoaWNoIG1heSBiZSB6ZXJvIGlmCiAqIHRoZSB0aW1lb3V0IGV4cGlyZXMgYmVmb3JlIGFueXRoaW5nIGludGVyZXN0aW5nIGhhcHBlbnMuIE9uIGVycm9yIDxiPkZBTFNFPC9iPgogKiBpcyByZXR1cm5lZC4gVGhlIGVycm9yIGNvZGUgY2FuIGJlIHJldHJpZXZlZCB3aXRoCiAqIDxiPnNvY2tldF9sYXN0X2Vycm9yPC9iPi4KICogPC9wPgogKiA8cD4KICogQmUgc3VyZSB0byB1c2UgdGhlID09PSBvcGVyYXRvciB3aGVuIGNoZWNraW5nIGZvciBhbgogKiBlcnJvci4gU2luY2UgdGhlIDxiPnNvY2tldF9zZWxlY3Q8L2I+IG1heSByZXR1cm4gMCB0aGUKICogY29tcGFyaXNvbiB3aXRoID09IHdvdWxkIGV2YWx1YXRlIHRvIDxiPlRSVUU8L2I+OgogKiBVbmRlcnN0YW5kaW5nIDxiPnNvY2tldF9zZWxlY3Q8L2I+J3MgcmVzdWx0CiAqIDxjb2RlPgogKiAkZSA9IE5VTEw7CiAqIGlmIChmYWxzZSA9PT0gc29ja2V0X3NlbGVjdCgkciwgJHcsICRlLCAwKSkgewogKiBlY2hvICJzb2NrZXRfc2VsZWN0KCkgZmFpbGVkLCByZWFzb246ICIgLgogKiBzb2NrZXRfc3RyZXJyb3Ioc29ja2V0X2xhc3RfZXJyb3IoKSkgLiAiXG4iOwogKiB9CiAqIDwvY29kZT4KICovCmZ1bmN0aW9uIHNvY2tldF9zZWxlY3QoP2FycmF5ICYkcmVhZCwgP2FycmF5ICYkd3JpdGUsID9hcnJheSAmJGV4Y2VwdCwgP2ludCAkc2Vjb25kcywgaW50ICRtaWNyb3NlY29uZHMgPSAwKTogaW50fGZhbHNlIHt9CgovKioKICogQ3JlYXRlIGEgc29ja2V0IChlbmRwb2ludCBmb3IgY29tbXVuaWNhdGlvbikKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtY3JlYXRlLnBocAogKiBAcGFyYW0gaW50ICRkb21haW4gPHA+CiAqIFRoZSA8aT5kb21haW48L2k+IHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHByb3RvY29sCiAqIGZhbWlseSB0byBiZSB1c2VkIGJ5IHRoZSBzb2NrZXQuCiAqIDwvcD4KICogPHRhYmxlPgogKiBBdmFpbGFibGUgYWRkcmVzcy9wcm90b2NvbCBmYW1pbGllcwogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+RG9tYWluPC90ZD4KICogPHRkPkRlc2NyaXB0aW9uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPkFGX0lORVQ8L2I+PC90ZD4KICogPHRkPgogKiBJUHY0IEludGVybmV0IGJhc2VkIHByb3RvY29scy4gVENQIGFuZCBVRFAgYXJlIGNvbW1vbiBwcm90b2NvbHMgb2YKICogdGhpcyBwcm90b2NvbCBmYW1pbHkuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5BRl9JTkVUNjwvYj48L3RkPgogKiA8dGQ+CiAqIElQdjYgSW50ZXJuZXQgYmFzZWQgcHJvdG9jb2xzLiBUQ1AgYW5kIFVEUCBhcmUgY29tbW9uIHByb3RvY29scyBvZgogKiB0aGlzIHByb3RvY29sIGZhbWlseS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPkFGX1VOSVg8L2I+PC90ZD4KICogPHRkPgogKiBMb2NhbCBjb21tdW5pY2F0aW9uIHByb3RvY29sIGZhbWlseS4gSGlnaCBlZmZpY2llbmN5IGFuZCBsb3cKICogb3ZlcmhlYWQgbWFrZSBpdCBhIGdyZWF0IGZvcm0gb2YgSVBDIChJbnRlcnByb2Nlc3MgQ29tbXVuaWNhdGlvbikuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqIEBwYXJhbSBpbnQgJHR5cGUgPHA+CiAqIFRoZSA8aT50eXBlPC9pPiBwYXJhbWV0ZXIgc2VsZWN0cyB0aGUgdHlwZSBvZiBjb21tdW5pY2F0aW9uCiAqIHRvIGJlIHVzZWQgYnkgdGhlIHNvY2tldC4KICogPC9wPgogKiA8dGFibGU+CiAqIEF2YWlsYWJsZSBzb2NrZXQgdHlwZXMKICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlR5cGU8L3RkPgogKiA8dGQ+RGVzY3JpcHRpb248L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+U09DS19TVFJFQU08L2I+PC90ZD4KICogPHRkPgogKiBQcm92aWRlcyBzZXF1ZW5jZWQsIHJlbGlhYmxlLCBmdWxsLWR1cGxleCwgY29ubmVjdGlvbi1iYXNlZCBieXRlIHN0cmVhbXMuCiAqIEFuIG91dC1vZi1iYW5kIGRhdGEgdHJhbnNtaXNzaW9uIG1lY2hhbmlzbSBtYXkgYmUgc3VwcG9ydGVkLgogKiBUaGUgVENQIHByb3RvY29sIGlzIGJhc2VkIG9uIHRoaXMgc29ja2V0IHR5cGUuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5TT0NLX0RHUkFNPC9iPjwvdGQ+CiAqIDx0ZD4KICogU3VwcG9ydHMgZGF0YWdyYW1zIChjb25uZWN0aW9ubGVzcywgdW5yZWxpYWJsZSBtZXNzYWdlcyBvZiBhIGZpeGVkIG1heGltdW0gbGVuZ3RoKS4KICogVGhlIFVEUCBwcm90b2NvbCBpcyBiYXNlZCBvbiB0aGlzIHNvY2tldCB0eXBlLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+U09DS19TRVFQQUNLRVQ8L2I+PC90ZD4KICogPHRkPgogKiBQcm92aWRlcyBhIHNlcXVlbmNlZCwgcmVsaWFibGUsIHR3by13YXkgY29ubmVjdGlvbi1iYXNlZCBkYXRhIHRyYW5zbWlzc2lvbiBwYXRoIGZvcgogKiBkYXRhZ3JhbXMgb2YgZml4ZWQgbWF4aW11bSBsZW5ndGg7IGEgY29uc3VtZXIgaXMgcmVxdWlyZWQgdG8gcmVhZCBhbgogKiBlbnRpcmUgcGFja2V0IHdpdGggZWFjaCByZWFkIGNhbGwuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5TT0NLX1JBVzwvYj48L3RkPgogKiA8dGQ+CiAqIFByb3ZpZGVzIHJhdyBuZXR3b3JrIHByb3RvY29sIGFjY2Vzcy4gVGhpcyBzcGVjaWFsIHR5cGUgb2Ygc29ja2V0CiAqIGNhbiBiZSB1c2VkIHRvIG1hbnVhbGx5IGNvbnN0cnVjdCBhbnkgdHlwZSBvZiBwcm90b2NvbC4gQSBjb21tb24gdXNlCiAqIGZvciB0aGlzIHNvY2tldCB0eXBlIGlzIHRvIHBlcmZvcm0gSUNNUCByZXF1ZXN0cyAobGlrZSBwaW5nKS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPlNPQ0tfUkRNPC9iPjwvdGQ+CiAqIDx0ZD4KICogUHJvdmlkZXMgYSByZWxpYWJsZSBkYXRhZ3JhbSBsYXllciB0aGF0IGRvZXMgbm90IGd1YXJhbnRlZSBvcmRlcmluZy4KICogVGhpcyBpcyBtb3N0IGxpa2VseSBub3QgaW1wbGVtZW50ZWQgb24geW91ciBvcGVyYXRpbmcgc3lzdGVtLgogKiA8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiBAcGFyYW0gaW50ICRwcm90b2NvbCA8cD4KICogVGhlIDxpPnByb3RvY29sPC9pPiBwYXJhbWV0ZXIgc2V0cyB0aGUgc3BlY2lmaWMKICogcHJvdG9jb2wgd2l0aGluIHRoZSBzcGVjaWZpZWQgPGk+ZG9tYWluPC9pPiB0byBiZSB1c2VkCiAqIHdoZW4gY29tbXVuaWNhdGluZyBvbiB0aGUgcmV0dXJuZWQgc29ja2V0LiBUaGUgcHJvcGVyIHZhbHVlIGNhbiBiZQogKiByZXRyaWV2ZWQgYnkgbmFtZSBieSB1c2luZyA8Yj5nZXRwcm90b2J5bmFtZTwvYj4uIElmCiAqIHRoZSBkZXNpcmVkIHByb3RvY29sIGlzIFRDUCwgb3IgVURQIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50cwogKiA8Yj5TT0xfVENQPC9iPiwgYW5kIDxiPlNPTF9VRFA8L2I+CiAqIGNhbiBhbHNvIGJlIHVzZWQuCiAqIDwvcD4KICogPHRhYmxlPgogKiBDb21tb24gcHJvdG9jb2xzCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5OYW1lPC90ZD4KICogPHRkPkRlc2NyaXB0aW9uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmljbXA8L3RkPgogKiA8dGQ+CiAqIFRoZSBJbnRlcm5ldCBDb250cm9sIE1lc3NhZ2UgUHJvdG9jb2wgaXMgdXNlZCBwcmltYXJpbHkgYnkgZ2F0ZXdheXMKICogYW5kIGhvc3RzIHRvIHJlcG9ydCBlcnJvcnMgaW4gZGF0YWdyYW0gY29tbXVuaWNhdGlvbi4gVGhlICJwaW5nIgogKiBjb21tYW5kIChwcmVzZW50IGluIG1vc3QgbW9kZXJuIG9wZXJhdGluZyBzeXN0ZW1zKSBpcyBhbiBleGFtcGxlCiAqIGFwcGxpY2F0aW9uIG9mIElDTVAuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD51ZHA8L3RkPgogKiA8dGQ+CiAqIFRoZSBVc2VyIERhdGFncmFtIFByb3RvY29sIGlzIGEgY29ubmVjdGlvbmxlc3MsIHVucmVsaWFibGUsCiAqIHByb3RvY29sIHdpdGggZml4ZWQgcmVjb3JkIGxlbmd0aHMuIER1ZSB0byB0aGVzZSBhc3BlY3RzLCBVRFAKICogcmVxdWlyZXMgYSBtaW5pbXVtIGFtb3VudCBvZiBwcm90b2NvbCBvdmVyaGVhZC4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPnRjcDwvdGQ+CiAqIDx0ZD4KICogVGhlIFRyYW5zbWlzc2lvbiBDb250cm9sIFByb3RvY29sIGlzIGEgcmVsaWFibGUsIGNvbm5lY3Rpb24gYmFzZWQsCiAqIHN0cmVhbSBvcmllbnRlZCwgZnVsbCBkdXBsZXggcHJvdG9jb2wuIFRDUCBndWFyYW50ZWVzIHRoYXQgYWxsIGRhdGEgcGFja2V0cwogKiB3aWxsIGJlIHJlY2VpdmVkIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgc2VudC4gSWYgYW55IHBhY2tldCBpcyBzb21laG93CiAqIGxvc3QgZHVyaW5nIGNvbW11bmljYXRpb24sIFRDUCB3aWxsIGF1dG9tYXRpY2FsbHkgcmV0cmFuc21pdCB0aGUgcGFja2V0IHVudGlsCiAqIHRoZSBkZXN0aW5hdGlvbiBob3N0IGFja25vd2xlZGdlcyB0aGF0IHBhY2tldC4gRm9yIHJlbGlhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZQogKiByZWFzb25zLCB0aGUgVENQIGltcGxlbWVudGF0aW9uIGl0c2VsZiBkZWNpZGVzIHRoZSBhcHByb3ByaWF0ZSBvY3RldCBib3VuZGFyaWVzCiAqIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGFncmFtIGNvbW11bmljYXRpb24gbGF5ZXIuIFRoZXJlZm9yZSwgVENQIGFwcGxpY2F0aW9ucyBtdXN0CiAqIGFsbG93IGZvciB0aGUgcG9zc2liaWxpdHkgb2YgcGFydGlhbCByZWNvcmQgdHJhbnNtaXNzaW9uLgogKiA8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiBAcmV0dXJuIHJlc291cmNlfFNvY2tldHxmYWxzZSA8Yj5zb2NrZXRfY3JlYXRlPC9iPiByZXR1cm5zIGEgc29ja2V0IHJlc291cmNlIG9uIHN1Y2Nlc3MsCiAqIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4gVGhlIGFjdHVhbCBlcnJvciBjb2RlIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FsbGluZwogKiA8Yj5zb2NrZXRfbGFzdF9lcnJvcjwvYj4uIFRoaXMgZXJyb3IgY29kZSBtYXkgYmUgcGFzc2VkIHRvCiAqIDxiPnNvY2tldF9zdHJlcnJvcjwvYj4gdG8gZ2V0IGEgdGV4dHVhbCBleHBsYW5hdGlvbiBvZiB0aGUKICogZXJyb3IuCiAqLwpmdW5jdGlvbiBzb2NrZXRfY3JlYXRlKGludCAkZG9tYWluLCBpbnQgJHR5cGUsIGludCAkcHJvdG9jb2wpOiBTb2NrZXR8ZmFsc2Uge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQKICogQHJldHVybiByZXNvdXJjZXxTb2NrZXR8ZmFsc2UKICovCmZ1bmN0aW9uIHNvY2tldF9leHBvcnRfc3RyZWFtKFNvY2tldCAkc29ja2V0KSB7fQoKLyoqCiAqIE9wZW5zIGEgc29ja2V0IG9uIHBvcnQgdG8gYWNjZXB0IGNvbm5lY3Rpb25zCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LWNyZWF0ZS1saXN0ZW4ucGhwCiAqIEBwYXJhbSBpbnQgJHBvcnQgPHA+CiAqIFRoZSBwb3J0IG9uIHdoaWNoIHRvIGxpc3RlbiBvbiBhbGwgaW50ZXJmYWNlcy4KICogPC9wPgogKiBAcGFyYW0gaW50ICRiYWNrbG9nIFtvcHRpb25hbF0gPHA+CiAqIFRoZSA8aT5iYWNrbG9nPC9pPiBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgbWF4aW11bSBsZW5ndGgKICogdGhlIHF1ZXVlIG9mIHBlbmRpbmcgY29ubmVjdGlvbnMgbWF5IGdyb3cgdG8uCiAqIDxiPlNPTUFYQ09OTjwvYj4gbWF5IGJlIHBhc3NlZCBhcwogKiA8aT5iYWNrbG9nPC9pPiBwYXJhbWV0ZXIsIHNlZQogKiA8Yj5zb2NrZXRfbGlzdGVuPC9iPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfFNvY2tldHxmYWxzZSA8Yj5zb2NrZXRfY3JlYXRlX2xpc3RlbjwvYj4gcmV0dXJucyBhIG5ldyBzb2NrZXQgcmVzb3VyY2UKICogb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuIFRoZSBlcnJvciBjb2RlIGNhbiBiZSByZXRyaWV2ZWQgd2l0aAogKiA8Yj5zb2NrZXRfbGFzdF9lcnJvcjwvYj4uIFRoaXMgY29kZSBtYXkgYmUgcGFzc2VkIHRvCiAqIDxiPnNvY2tldF9zdHJlcnJvcjwvYj4gdG8gZ2V0IGEgdGV4dHVhbCBleHBsYW5hdGlvbiBvZiB0aGUKICogZXJyb3IuCiAqLwpmdW5jdGlvbiBzb2NrZXRfY3JlYXRlX2xpc3RlbihpbnQgJHBvcnQsIGludCAkYmFja2xvZyA9IDEyOCk6IFNvY2tldHxmYWxzZSB7fQoKLyoqCiAqIENyZWF0ZXMgYSBwYWlyIG9mIGluZGlzdGluZ3Vpc2hhYmxlIHNvY2tldHMgYW5kIHN0b3JlcyB0aGVtIGluIGFuIGFycmF5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LWNyZWF0ZS1wYWlyLnBocAogKiBAcGFyYW0gaW50ICRkb21haW4gPHA+CiAqIFRoZSA8aT5kb21haW48L2k+IHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHByb3RvY29sCiAqIGZhbWlseSB0byBiZSB1c2VkIGJ5IHRoZSBzb2NrZXQuIFNlZSA8Yj5zb2NrZXRfY3JlYXRlPC9iPgogKiBmb3IgdGhlIGZ1bGwgbGlzdC4KICogPC9wPgogKiBAcGFyYW0gaW50ICR0eXBlIDxwPgogKiBUaGUgPGk+dHlwZTwvaT4gcGFyYW1ldGVyIHNlbGVjdHMgdGhlIHR5cGUgb2YgY29tbXVuaWNhdGlvbgogKiB0byBiZSB1c2VkIGJ5IHRoZSBzb2NrZXQuIFNlZSA8Yj5zb2NrZXRfY3JlYXRlPC9iPiBmb3IgdGhlCiAqIGZ1bGwgbGlzdC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRwcm90b2NvbCA8cD4KICogVGhlIDxpPnByb3RvY29sPC9pPiBwYXJhbWV0ZXIgc2V0cyB0aGUgc3BlY2lmaWMKICogcHJvdG9jb2wgd2l0aGluIHRoZSBzcGVjaWZpZWQgPGk+ZG9tYWluPC9pPiB0byBiZSB1c2VkCiAqIHdoZW4gY29tbXVuaWNhdGluZyBvbiB0aGUgcmV0dXJuZWQgc29ja2V0LiBUaGUgcHJvcGVyIHZhbHVlIGNhbiBiZSByZXRyaWV2ZWQgYnkKICogbmFtZSBieSB1c2luZyA8Yj5nZXRwcm90b2J5bmFtZTwvYj4uIElmCiAqIHRoZSBkZXNpcmVkIHByb3RvY29sIGlzIFRDUCwgb3IgVURQIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50cwogKiA8Yj5TT0xfVENQPC9iPiwgYW5kIDxiPlNPTF9VRFA8L2I+CiAqIGNhbiBhbHNvIGJlIHVzZWQuCiAqIDwvcD4KICogPHA+CiAqIFNlZSA8Yj5zb2NrZXRfY3JlYXRlPC9iPiBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQKICogcHJvdG9jb2xzLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAmJHBhaXIgPHA+CiAqIFJlZmVyZW5jZSB0byBhbiBhcnJheSBpbiB3aGljaCB0aGUgdHdvIHNvY2tldCByZXNvdXJjZXMgd2lsbCBiZSBpbnNlcnRlZC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHNvY2tldF9jcmVhdGVfcGFpcihpbnQgJGRvbWFpbiwgaW50ICR0eXBlLCBpbnQgJHByb3RvY29sLCAmJHBhaXIpOiBib29sIHt9CgovKioKICogQWNjZXB0cyBhIGNvbm5lY3Rpb24gb24gYSBzb2NrZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtYWNjZXB0LnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQgPHA+CiAqIEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCA8Yj5zb2NrZXRfY3JlYXRlPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfFNvY2tldHxmYWxzZSBhIG5ldyBzb2NrZXQgcmVzb3VyY2Ugb24gc3VjY2Vzcywgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLiBUaGUgYWN0dWFsCiAqIGVycm9yIGNvZGUgY2FuIGJlIHJldHJpZXZlZCBieSBjYWxsaW5nCiAqIDxiPnNvY2tldF9sYXN0X2Vycm9yPC9iPi4gVGhpcyBlcnJvciBjb2RlIG1heSBiZSBwYXNzZWQgdG8KICogPGI+c29ja2V0X3N0cmVycm9yPC9iPiB0byBnZXQgYSB0ZXh0dWFsIGV4cGxhbmF0aW9uIG9mIHRoZQogKiBlcnJvci4KICovCmZ1bmN0aW9uIHNvY2tldF9hY2NlcHQoU29ja2V0ICRzb2NrZXQpOiBTb2NrZXR8ZmFsc2Uge30KCi8qKgogKiBTZXRzIG5vbmJsb2NraW5nIG1vZGUgZm9yIGZpbGUgZGVzY3JpcHRvciBmZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1zZXQtbm9uYmxvY2sucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxTb2NrZXQgJHNvY2tldCA8cD4KICogQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIDxiPnNvY2tldF9jcmVhdGU8L2I+CiAqIG9yIDxiPnNvY2tldF9hY2NlcHQ8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc29ja2V0X3NldF9ub25ibG9jayhTb2NrZXQgJHNvY2tldCk6IGJvb2wge30KCi8qKgogKiBTZXRzIGJsb2NraW5nIG1vZGUgb24gYSBzb2NrZXQgcmVzb3VyY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtc2V0LWJsb2NrLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQgPHA+CiAqIEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCA8Yj5zb2NrZXRfY3JlYXRlPC9iPgogKiBvciA8Yj5zb2NrZXRfYWNjZXB0PC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHNvY2tldF9zZXRfYmxvY2soU29ja2V0ICRzb2NrZXQpOiBib29sIHt9CgovKioKICogTGlzdGVucyBmb3IgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LWxpc3Rlbi5waHAKICogQHBhcmFtIHJlc291cmNlfFNvY2tldCAkc29ja2V0IDxwPgogKiBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggPGI+c29ja2V0X2NyZWF0ZTwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkYmFja2xvZyBbb3B0aW9uYWxdIDxwPgogKiBBIG1heGltdW0gb2YgPGk+YmFja2xvZzwvaT4gaW5jb21pbmcgY29ubmVjdGlvbnMgd2lsbCBiZQogKiBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcuIElmIGEgY29ubmVjdGlvbiByZXF1ZXN0IGFycml2ZXMgd2l0aCB0aGUgcXVldWUKICogZnVsbCB0aGUgY2xpZW50IG1heSByZWNlaXZlIGFuIGVycm9yIHdpdGggYW4gaW5kaWNhdGlvbiBvZgogKiBFQ09OTlJFRlVTRUQsIG9yLCBpZiB0aGUgdW5kZXJseWluZyBwcm90b2NvbCBzdXBwb3J0cwogKiByZXRyYW5zbWlzc2lvbiwgdGhlIHJlcXVlc3QgbWF5IGJlIGlnbm9yZWQgc28gdGhhdCByZXRyaWVzIG1heSBzdWNjZWVkLgogKiA8L3A+CiAqIDxwPgogKiBUaGUgbWF4aW11bSBudW1iZXIgcGFzc2VkIHRvIHRoZSA8aT5iYWNrbG9nPC9pPgogKiBwYXJhbWV0ZXIgaGlnaGx5IGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0uIE9uIExpbnV4LCBpdCBpcwogKiBzaWxlbnRseSB0cnVuY2F0ZWQgdG8gPGI+U09NQVhDT05OPC9iPi4gT24gd2luMzIsIGlmCiAqIHBhc3NlZCA8Yj5TT01BWENPTk48L2I+LCB0aGUgdW5kZXJseWluZyBzZXJ2aWNlIHByb3ZpZGVyCiAqIHJlc3BvbnNpYmxlIGZvciB0aGUgc29ja2V0IHdpbGwgc2V0IHRoZSBiYWNrbG9nIHRvIGEgbWF4aW11bQogKiByZWFzb25hYmxlIHZhbHVlLiBUaGVyZSBpcyBubyBzdGFuZGFyZCBwcm92aXNpb24gdG8KICogZmluZCBvdXQgdGhlIGFjdHVhbCBiYWNrbG9nIHZhbHVlIG9uIHRoaXMgcGxhdGZvcm0uCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuIFRoZSBlcnJvciBjb2RlIGNhbiBiZSByZXRyaWV2ZWQgd2l0aAogKiA8Yj5zb2NrZXRfbGFzdF9lcnJvcjwvYj4uIFRoaXMgY29kZSBtYXkgYmUgcGFzc2VkIHRvCiAqIDxiPnNvY2tldF9zdHJlcnJvcjwvYj4gdG8gZ2V0IGEgdGV4dHVhbCBleHBsYW5hdGlvbiBvZiB0aGUKICogZXJyb3IuCiAqLwpmdW5jdGlvbiBzb2NrZXRfbGlzdGVuKFNvY2tldCAkc29ja2V0LCBpbnQgJGJhY2tsb2cgPSAwKTogYm9vbCB7fQoKLyoqCiAqIENsb3NlcyBhIHNvY2tldCByZXNvdXJjZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1jbG9zZS5waHAKICogQHBhcmFtIHJlc291cmNlfFNvY2tldCAkc29ja2V0IDxwPgogKiBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggPGI+c29ja2V0X2NyZWF0ZTwvYj4KICogb3IgPGI+c29ja2V0X2FjY2VwdDwvYj4uCiAqIDwvcD4KICogQHJldHVybiB2b2lkIE5vIHZhbHVlIGlzIHJldHVybmVkLgogKi8KZnVuY3Rpb24gc29ja2V0X2Nsb3NlKFNvY2tldCAkc29ja2V0KTogdm9pZCB7fQoKLyoqCiAqIFdyaXRlIHRvIGEgc29ja2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LXdyaXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQKICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICogVGhlIGJ1ZmZlciB0byBiZSB3cml0dGVuLgogKiA8L3A+CiAqIEBwYXJhbSBpbnR8bnVsbCAkbGVuZ3RoIDxwPgogKiBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIDxpPmxlbmd0aDwvaT4gY2FuIHNwZWNpZnkgYW4KICogYWx0ZXJuYXRlIGxlbmd0aCBvZiBieXRlcyB3cml0dGVuIHRvIHRoZSBzb2NrZXQuIElmIHRoaXMgbGVuZ3RoIGlzCiAqIGdyZWF0ZXIgdGhhbiB0aGUgYnVmZmVyIGxlbmd0aCwgaXQgaXMgc2lsZW50bHkgdHJ1bmNhdGVkIHRvIHRoZSBsZW5ndGgKICogb2YgdGhlIGJ1ZmZlci4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHN1Y2Nlc3NmdWxseSB3cml0dGVuIHRvIHRoZSBzb2NrZXQgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqIFRoZSBlcnJvciBjb2RlIGNhbiBiZSByZXRyaWV2ZWQgd2l0aAogKiA8Yj5zb2NrZXRfbGFzdF9lcnJvcjwvYj4uIFRoaXMgY29kZSBtYXkgYmUgcGFzc2VkIHRvCiAqIDxiPnNvY2tldF9zdHJlcnJvcjwvYj4gdG8gZ2V0IGEgdGV4dHVhbCBleHBsYW5hdGlvbiBvZiB0aGUKICogZXJyb3IuCiAqIDwvcD4KICogPHA+CiAqIEl0IGlzIHBlcmZlY3RseSB2YWxpZCBmb3IgPGI+c29ja2V0X3dyaXRlPC9iPiB0bwogKiByZXR1cm4gemVybyB3aGljaCBtZWFucyBubyBieXRlcyBoYXZlIGJlZW4gd3JpdHRlbi4gQmUgc3VyZSB0byB1c2UgdGhlCiAqID09PSBvcGVyYXRvciB0byBjaGVjayBmb3IgPGI+RkFMU0U8L2I+IGluIGNhc2Ugb2YgYW4KICogZXJyb3IuCiAqLwpmdW5jdGlvbiBzb2NrZXRfd3JpdGUoU29ja2V0ICRzb2NrZXQsIHN0cmluZyAkZGF0YSwgP2ludCAkbGVuZ3RoID0gbnVsbCk6IGludHxmYWxzZSB7fQoKLyoqCiAqIFJlYWRzIGEgbWF4aW11bSBvZiBsZW5ndGggYnl0ZXMgZnJvbSBhIHNvY2tldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1yZWFkLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQgPHA+CiAqIEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCA8Yj5zb2NrZXRfY3JlYXRlPC9iPgogKiBvciA8Yj5zb2NrZXRfYWNjZXB0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRsZW5ndGggPHA+CiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyByZWFkIGlzIHNwZWNpZmllZCBieSB0aGUKICogPGk+bGVuZ3RoPC9pPiBwYXJhbWV0ZXIuIE90aGVyd2lzZSB5b3UgY2FuIHVzZQogKiA8Yj4mIzkyO3I8L2I+LCA8Yj4mIzkyO248L2I+LAogKiBvciA8Yj4mIzkyOzA8L2I+IHRvIGVuZCByZWFkaW5nIChkZXBlbmRpbmcgb24gdGhlIDxpPnR5cGU8L2k+CiAqIHBhcmFtZXRlciwgc2VlIGJlbG93KS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtb2RlIFtvcHRpb25hbF0gPHA+CiAqIE9wdGlvbmFsIDxpPnR5cGU8L2k+IHBhcmFtZXRlciBpcyBhIG5hbWVkIGNvbnN0YW50OgogKiA8Yj5QSFBfQklOQVJZX1JFQUQ8L2I+IChEZWZhdWx0KSAtIHVzZSB0aGUgc3lzdGVtCiAqIHJlY3YoKSBmdW5jdGlvbi4gU2FmZSBmb3IgcmVhZGluZyBiaW5hcnkgZGF0YS4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgPGI+c29ja2V0X3JlYWQ8L2I+IHJldHVybnMgdGhlIGRhdGEgYXMgYSBzdHJpbmcgb24gc3VjY2VzcywKICogb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yIChpbmNsdWRpbmcgaWYgdGhlIHJlbW90ZSBob3N0IGhhcyBjbG9zZWQgdGhlCiAqIGNvbm5lY3Rpb24pLiBUaGUgZXJyb3IgY29kZSBjYW4gYmUgcmV0cmlldmVkIHdpdGgKICogPGI+c29ja2V0X2xhc3RfZXJyb3I8L2I+LiBUaGlzIGNvZGUgbWF5IGJlIHBhc3NlZCB0bwogKiA8Yj5zb2NrZXRfc3RyZXJyb3I8L2I+IHRvIGdldCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YKICogdGhlIGVycm9yLgogKiA8L3A+CiAqIDxwPgogKiA8Yj5zb2NrZXRfcmVhZDwvYj4gcmV0dXJucyBhIHplcm8gbGVuZ3RoIHN0cmluZyAoIiIpCiAqIHdoZW4gdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvIHJlYWQuPC9wPgogKi8KZnVuY3Rpb24gc29ja2V0X3JlYWQoU29ja2V0ICRzb2NrZXQsIGludCAkbGVuZ3RoLCBpbnQgJG1vZGUgPSBQSFBfQklOQVJZX1JFQUQpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBRdWVyaWVzIHRoZSBsb2NhbCBzaWRlIG9mIHRoZSBnaXZlbiBzb2NrZXQgd2hpY2ggbWF5IGVpdGhlciByZXN1bHQgaW4gaG9zdC9wb3J0IG9yIGluIGEgVW5peCBmaWxlc3lzdGVtIHBhdGgsIGRlcGVuZGVudCBvbiBpdHMgdHlwZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1nZXRzb2NrbmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlfFNvY2tldCAkc29ja2V0IDxwPgogKiBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggPGI+c29ja2V0X2NyZWF0ZTwvYj4KICogb3IgPGI+c29ja2V0X2FjY2VwdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAmJGFkZHJlc3MgPHA+CiAqIElmIHRoZSBnaXZlbiBzb2NrZXQgaXMgb2YgdHlwZSA8Yj5BRl9JTkVUPC9iPgogKiBvciA8Yj5BRl9JTkVUNjwvYj4sIDxiPnNvY2tldF9nZXRzb2NrbmFtZTwvYj4KICogd2lsbCByZXR1cm4gdGhlIGxvY2FsIElQIGFkZHJlc3MgaW4gYXBwcm9wcmlhdGUgbm90YXRpb24gKGUuZy4KICogMTI3LjAuMC4xIG9yIGZlODA6OjEpIGluIHRoZQogKiA8aT5hZGRyZXNzPC9pPiBwYXJhbWV0ZXIgYW5kLCBpZiB0aGUgb3B0aW9uYWwKICogPGk+cG9ydDwvaT4gcGFyYW1ldGVyIGlzIHByZXNlbnQsIGFsc28gdGhlIGFzc29jaWF0ZWQgcG9ydC4KICogPC9wPgogKiA8cD4KICogSWYgdGhlIGdpdmVuIHNvY2tldCBpcyBvZiB0eXBlIDxiPkFGX1VOSVg8L2I+LAogKiA8Yj5zb2NrZXRfZ2V0c29ja25hbWU8L2I+IHdpbGwgcmV0dXJuIHRoZSBVbml4IGZpbGVzeXN0ZW0KICogcGF0aCAoZS5nLiAvdmFyL3J1bi9kYWVtb24uc29jaykgaW4gdGhlCiAqIDxpPmFkZHJlc3M8L2k+IHBhcmFtZXRlci4KICogPC9wPgogKiBAcGFyYW0gaW50ICYkcG9ydCBbb3B0aW9uYWxdIDxwPgogKiBJZiBwcm92aWRlZCwgdGhpcyB3aWxsIGhvbGQgdGhlIGFzc29jaWF0ZWQgcG9ydC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4gPGI+c29ja2V0X2dldHNvY2tuYW1lPC9iPiBtYXkgYWxzbyByZXR1cm4KICogPGI+RkFMU0U8L2I+IGlmIHRoZSBzb2NrZXQgdHlwZSBpcyBub3QgYW55IG9mIDxiPkFGX0lORVQ8L2I+LAogKiA8Yj5BRl9JTkVUNjwvYj4sIG9yIDxiPkFGX1VOSVg8L2I+LCBpbiB3aGljaAogKiBjYXNlIHRoZSBsYXN0IHNvY2tldCBlcnJvciBjb2RlIGlzIG5vdCB1cGRhdGVkLgogKi8KZnVuY3Rpb24gc29ja2V0X2dldHNvY2tuYW1lKFNvY2tldCAkc29ja2V0LCAmJGFkZHJlc3MsICYkcG9ydCA9IG51bGwpOiBib29sIHt9CgovKioKICogUXVlcmllcyB0aGUgcmVtb3RlIHNpZGUgb2YgdGhlIGdpdmVuIHNvY2tldCB3aGljaCBtYXkgZWl0aGVyIHJlc3VsdCBpbiBob3N0L3BvcnQgb3IgaW4gYSBVbml4IGZpbGVzeXN0ZW0gcGF0aCwgZGVwZW5kZW50IG9uIGl0cyB0eXBlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LWdldHBlZXJuYW1lLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQgPHA+CiAqIEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCA8Yj5zb2NrZXRfY3JlYXRlPC9iPgogKiBvciA8Yj5zb2NrZXRfYWNjZXB0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICYkYWRkcmVzcyA8cD4KICogSWYgdGhlIGdpdmVuIHNvY2tldCBpcyBvZiB0eXBlIDxiPkFGX0lORVQ8L2I+IG9yCiAqIDxiPkFGX0lORVQ2PC9iPiwgPGI+c29ja2V0X2dldHBlZXJuYW1lPC9iPgogKiB3aWxsIHJldHVybiB0aGUgcGVlcnMgKHJlbW90ZSkgSVAgYWRkcmVzcyBpbgogKiBhcHByb3ByaWF0ZSBub3RhdGlvbiAoZS5nLiAxMjcuMC4wLjEgb3IKICogZmU4MDo6MSkgaW4gdGhlIDxpPmFkZHJlc3M8L2k+CiAqIHBhcmFtZXRlciBhbmQsIGlmIHRoZSBvcHRpb25hbCA8aT5wb3J0PC9pPiBwYXJhbWV0ZXIgaXMKICogcHJlc2VudCwgYWxzbyB0aGUgYXNzb2NpYXRlZCBwb3J0LgogKiA8L3A+CiAqIDxwPgogKiBJZiB0aGUgZ2l2ZW4gc29ja2V0IGlzIG9mIHR5cGUgPGI+QUZfVU5JWDwvYj4sCiAqIDxiPnNvY2tldF9nZXRwZWVybmFtZTwvYj4gd2lsbCByZXR1cm4gdGhlIFVuaXggZmlsZXN5c3RlbQogKiBwYXRoIChlLmcuIC92YXIvcnVuL2RhZW1vbi5zb2NrKSBpbiB0aGUKICogPGk+YWRkcmVzczwvaT4gcGFyYW1ldGVyLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJiRwb3J0IFtvcHRpb25hbF0gPHA+CiAqIElmIGdpdmVuLCB0aGlzIHdpbGwgaG9sZCB0aGUgcG9ydCBhc3NvY2lhdGVkIHRvCiAqIDxpPmFkZHJlc3M8L2k+LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLiA8Yj5zb2NrZXRfZ2V0cGVlcm5hbWU8L2I+IG1heSBhbHNvIHJldHVybgogKiA8Yj5GQUxTRTwvYj4gaWYgdGhlIHNvY2tldCB0eXBlIGlzIG5vdCBhbnkgb2YgPGI+QUZfSU5FVDwvYj4sCiAqIDxiPkFGX0lORVQ2PC9iPiwgb3IgPGI+QUZfVU5JWDwvYj4sIGluIHdoaWNoCiAqIGNhc2UgdGhlIGxhc3Qgc29ja2V0IGVycm9yIGNvZGUgaXMgbm90IHVwZGF0ZWQuCiAqLwpmdW5jdGlvbiBzb2NrZXRfZ2V0cGVlcm5hbWUoU29ja2V0ICRzb2NrZXQsICYkYWRkcmVzcywgJiRwb3J0ID0gbnVsbCk6IGJvb2wge30KCi8qKgogKiBJbml0aWF0ZXMgYSBjb25uZWN0aW9uIG9uIGEgc29ja2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LWNvbm5lY3QucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxTb2NrZXQgJHNvY2tldAogKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzIDxwPgogKiBUaGUgPGk+YWRkcmVzczwvaT4gcGFyYW1ldGVyIGlzIGVpdGhlciBhbiBJUHY0IGFkZHJlc3MKICogaW4gZG90dGVkLXF1YWQgbm90YXRpb24gKGUuZy4gMTI3LjAuMC4xKSBpZgogKiA8aT5zb2NrZXQ8L2k+IGlzIDxiPkFGX0lORVQ8L2I+LCBhIHZhbGlkCiAqIElQdjYgYWRkcmVzcyAoZS5nLiA6OjEpIGlmIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkIGFuZAogKiA8aT5zb2NrZXQ8L2k+IGlzIDxiPkFGX0lORVQ2PC9iPgogKiBvciB0aGUgcGF0aG5hbWUgb2YgYSBVbml4IGRvbWFpbiBzb2NrZXQsIGlmIHRoZSBzb2NrZXQgZmFtaWx5IGlzCiAqIDxiPkFGX1VOSVg8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBpbnR8bnVsbCAkcG9ydCA8cD4KICogVGhlIDxpPnBvcnQ8L2k+IHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgYW5kIGlzIG1hbmRhdG9yeQogKiB3aGVuIGNvbm5lY3RpbmcgdG8gYW4gPGI+QUZfSU5FVDwvYj4gb3IgYW4KICogPGI+QUZfSU5FVDY8L2I+IHNvY2tldCwgYW5kIGRlc2lnbmF0ZXMKICogdGhlIHBvcnQgb24gdGhlIHJlbW90ZSBob3N0IHRvIHdoaWNoIGEgY29ubmVjdGlvbiBzaG91bGQgYmUgbWFkZS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4gVGhlIGVycm9yIGNvZGUgY2FuIGJlIHJldHJpZXZlZCB3aXRoCiAqIDxiPnNvY2tldF9sYXN0X2Vycm9yPC9iPi4gVGhpcyBjb2RlIG1heSBiZSBwYXNzZWQgdG8KICogPGI+c29ja2V0X3N0cmVycm9yPC9iPiB0byBnZXQgYSB0ZXh0dWFsIGV4cGxhbmF0aW9uIG9mIHRoZQogKiBlcnJvci4KICogPC9wPgogKiA8cD4KICogSWYgdGhlIHNvY2tldCBpcyBub24tYmxvY2tpbmcgdGhlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgPGI+RkFMU0U8L2I+IHdpdGggYW4KICogZXJyb3IgT3BlcmF0aW9uIG5vdyBpbiBwcm9ncmVzcy4KICovCmZ1bmN0aW9uIHNvY2tldF9jb25uZWN0KFNvY2tldCAkc29ja2V0LCBzdHJpbmcgJGFkZHJlc3MsID9pbnQgJHBvcnQgPSBudWxsKTogYm9vbCB7fQoKLyoqCiAqIFJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGEgc29ja2V0IGVycm9yCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LXN0cmVycm9yLnBocAogKiBAcGFyYW0gaW50ICRlcnJvcl9jb2RlIDxwPgogKiBBIHZhbGlkIHNvY2tldCBlcnJvciBudW1iZXIsIGxpa2VseSBwcm9kdWNlZCBieQogKiA8Yj5zb2NrZXRfbGFzdF9lcnJvcjwvYj4uCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgdGhlIGVycm9yIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSA8aT5lcnJubzwvaT4KICogcGFyYW1ldGVyLgogKi8KZnVuY3Rpb24gc29ja2V0X3N0cmVycm9yKGludCAkZXJyb3JfY29kZSk6IHN0cmluZyB7fQoKLyoqCiAqIEJpbmRzIGEgbmFtZSB0byBhIHNvY2tldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1iaW5kLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQgPHA+CiAqIEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCA8Yj5zb2NrZXRfY3JlYXRlPC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzIDxwPgogKiBJZiB0aGUgc29ja2V0IGlzIG9mIHRoZSA8Yj5BRl9JTkVUPC9iPiBmYW1pbHksIHRoZQogKiA8aT5hZGRyZXNzPC9pPiBpcyBhbiBJUCBpbiBkb3R0ZWQtcXVhZCBub3RhdGlvbgogKiAoZS5nLiAxMjcuMC4wLjEpLgogKiA8L3A+CiAqIDxwPgogKiBJZiB0aGUgc29ja2V0IGlzIG9mIHRoZSA8Yj5BRl9VTklYPC9iPiBmYW1pbHksIHRoZQogKiA8aT5hZGRyZXNzPC9pPiBpcyB0aGUgcGF0aCBvZiBhCiAqIFVuaXgtZG9tYWluIHNvY2tldCAoZS5nLiAvdG1wL215LnNvY2spLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHBvcnQgW29wdGlvbmFsXSA8cD4KICogVGhlIDxpPnBvcnQ8L2k+IHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgd2hlbgogKiBiaW5kaW5nIGFuIDxiPkFGX0lORVQ8L2I+IHNvY2tldCwgYW5kIGRlc2lnbmF0ZXMKICogdGhlIHBvcnQgb24gd2hpY2ggdG8gbGlzdGVuIGZvciBjb25uZWN0aW9ucy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogPHA+CiAqIFRoZSBlcnJvciBjb2RlIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCA8Yj5zb2NrZXRfbGFzdF9lcnJvcjwvYj4uCiAqIFRoaXMgY29kZSBtYXkgYmUgcGFzc2VkIHRvIDxiPnNvY2tldF9zdHJlcnJvcjwvYj4gdG8gZ2V0IGEKICogdGV4dHVhbCBleHBsYW5hdGlvbiBvZiB0aGUgZXJyb3IuCiAqIDwvcD4KICovCmZ1bmN0aW9uIHNvY2tldF9iaW5kKFNvY2tldCAkc29ja2V0LCBzdHJpbmcgJGFkZHJlc3MsIGludCAkcG9ydCA9IDApOiBib29sIHt9CgovKioKICogUmVjZWl2ZXMgZGF0YSBmcm9tIGEgY29ubmVjdGVkIHNvY2tldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1yZWN2LnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQgPHA+CiAqIFRoZSA8aT5zb2NrZXQ8L2k+IG11c3QgYmUgYSBzb2NrZXQgcmVzb3VyY2UgcHJldmlvdXNseQogKiBjcmVhdGVkIGJ5IHNvY2tldF9jcmVhdGUoKS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICYkZGF0YSA8cD4KICogVGhlIGRhdGEgcmVjZWl2ZWQgd2lsbCBiZSBmZXRjaGVkIHRvIHRoZSB2YXJpYWJsZSBzcGVjaWZpZWQgd2l0aAogKiA8aT5idWY8L2k+LiBJZiBhbiBlcnJvciBvY2N1cnMsIGlmIHRoZQogKiBjb25uZWN0aW9uIGlzIHJlc2V0LCBvciBpZiBubyBkYXRhIGlzCiAqIGF2YWlsYWJsZSwgPGk+YnVmPC9pPiB3aWxsIGJlIHNldCB0byA8Yj5OVUxMPC9iPi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRsZW5ndGggPHA+CiAqIFVwIHRvIDxpPmxlbjwvaT4gYnl0ZXMgd2lsbCBiZSBmZXRjaGVkIGZyb20gcmVtb3RlIGhvc3QuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgPHA+CiAqIFRoZSB2YWx1ZSBvZiA8aT5mbGFnczwvaT4gY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZgogKiB0aGUgZm9sbG93aW5nIGZsYWdzLCBqb2luZWQgd2l0aCB0aGUgYmluYXJ5IE9SICh8KQogKiBvcGVyYXRvci4KICogPC9wPgogKiA8dGFibGU+CiAqIFBvc3NpYmxlIHZhbHVlcyBmb3IgPGk+ZmxhZ3M8L2k+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5GbGFnPC90ZD4KICogPHRkPkRlc2NyaXB0aW9uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPk1TR19PT0I8L2I+PC90ZD4KICogPHRkPgogKiBQcm9jZXNzIG91dC1vZi1iYW5kIGRhdGEuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5NU0dfUEVFSzwvYj48L3RkPgogKiA8dGQ+CiAqIFJlY2VpdmUgZGF0YSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlY2VpdmUgcXVldWUgd2l0aG91dAogKiByZW1vdmluZyBpdCBmcm9tIHRoZSBxdWV1ZS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPk1TR19XQUlUQUxMPC9iPjwvdGQ+CiAqIDx0ZD4KICogQmxvY2sgdW50aWwgYXQgbGVhc3QgPGk+bGVuPC9pPiBhcmUgcmVjZWl2ZWQuCiAqIEhvd2V2ZXIsIGlmIGEgc2lnbmFsIGlzIGNhdWdodCBvciB0aGUgcmVtb3RlIGhvc3QgZGlzY29ubmVjdHMsIHRoZQogKiBmdW5jdGlvbiBtYXkgcmV0dXJuIGxlc3MgZGF0YS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPk1TR19ET05UV0FJVDwvYj48L3RkPgogKiA8dGQ+CiAqIFdpdGggdGhpcyBmbGFnIHNldCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgZXZlbiBpZiBpdCB3b3VsZCBub3JtYWxseQogKiBoYXZlIGJsb2NrZWQuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqIEByZXR1cm4gaW50fGZhbHNlIDxiPnNvY2tldF9yZWN2PC9iPiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQsCiAqIG9yIDxiPkZBTFNFPC9iPiBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuIFRoZSBhY3R1YWwgZXJyb3IgY29kZSBjYW4gYmUgcmV0cmlldmVkIGJ5CiAqIGNhbGxpbmcgPGI+c29ja2V0X2xhc3RfZXJyb3I8L2I+LiBUaGlzIGVycm9yIGNvZGUgbWF5IGJlCiAqIHBhc3NlZCB0byA8Yj5zb2NrZXRfc3RyZXJyb3I8L2I+IHRvIGdldCBhIHRleHR1YWwgZXhwbGFuYXRpb24KICogb2YgdGhlIGVycm9yLgogKi8KZnVuY3Rpb24gc29ja2V0X3JlY3YoU29ja2V0ICRzb2NrZXQsICYkZGF0YSwgaW50ICRsZW5ndGgsIGludCAkZmxhZ3MpOiBpbnR8ZmFsc2Uge30KCi8qKgogKiBTZW5kcyBkYXRhIHRvIGEgY29ubmVjdGVkIHNvY2tldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1zZW5kLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQgPHA+CiAqIEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCA8Yj5zb2NrZXRfY3JlYXRlPC9iPgogKiBvciA8Yj5zb2NrZXRfYWNjZXB0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPgogKiBBIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkYXRhIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSByZW1vdGUgaG9zdC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRsZW5ndGggPHA+CiAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHJlbW90ZSBob3N0IGZyb20KICogPGk+YnVmPC9pPi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyA8cD4KICogVGhlIHZhbHVlIG9mIDxpPmZsYWdzPC9pPiBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mCiAqIHRoZSBmb2xsb3dpbmcgZmxhZ3MsIGpvaW5lZCB3aXRoIHRoZSBiaW5hcnkgT1IgKHwpCiAqIG9wZXJhdG9yLgogKiA8dGFibGU+CiAqIFBvc3NpYmxlIHZhbHVlcyBmb3IgPGk+ZmxhZ3M8L2k+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5NU0dfT09CPC9iPjwvdGQ+CiAqIDx0ZD4KICogU2VuZCBPT0IgKG91dC1vZi1iYW5kKSBkYXRhLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TVNHX0VPUjwvYj48L3RkPgogKiA8dGQ+CiAqIEluZGljYXRlIGEgcmVjb3JkIG1hcmsuIFRoZSBzZW50IGRhdGEgY29tcGxldGVzIHRoZSByZWNvcmQuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5NU0dfRU9GPC9iPjwvdGQ+CiAqIDx0ZD4KICogQ2xvc2UgdGhlIHNlbmRlciBzaWRlIG9mIHRoZSBzb2NrZXQgYW5kIGluY2x1ZGUgYW4gYXBwcm9wcmlhdGUKICogbm90aWZpY2F0aW9uIG9mIHRoaXMgYXQgdGhlIGVuZCBvZiB0aGUgc2VudCBkYXRhLiBUaGUgc2VudCBkYXRhCiAqIGNvbXBsZXRlcyB0aGUgdHJhbnNhY3Rpb24uCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5NU0dfRE9OVFJPVVRFPC9iPjwvdGQ+CiAqIDx0ZD4KICogQnlwYXNzIHJvdXRpbmcsIHVzZSBkaXJlY3QgaW50ZXJmYWNlLgogKiA8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIDxiPnNvY2tldF9zZW5kPC9iPiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCwgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KZnVuY3Rpb24gc29ja2V0X3NlbmQoU29ja2V0ICRzb2NrZXQsIHN0cmluZyAkZGF0YSwgaW50ICRsZW5ndGgsIGludCAkZmxhZ3MpOiBpbnR8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDUgJmd0Oz01LjUuMCk8YnIvPgogKiBTZW5kIGEgbWVzc2FnZQogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtc2VuZG1zZy5waHAKICogQHBhcmFtIHJlc291cmNlfFNvY2tldCAkc29ja2V0CiAqIEBwYXJhbSBhcnJheSAkbWVzc2FnZQogKiBAcGFyYW0gaW50ICRmbGFncwogKiBAcmV0dXJuIGludHxmYWxzZQogKiBAc2luY2UgNS41CiAqLwpmdW5jdGlvbiBzb2NrZXRfc2VuZG1zZygKICAgIFNvY2tldCAkc29ja2V0LAogICAgYXJyYXkgJG1lc3NhZ2UsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjUnLCB0bzogJzcuNCcpXSBpbnQgJGZsYWdzLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIGludCAkZmxhZ3MgPSAwCik6IGludHxmYWxzZSB7fQoKLyoqCiAqIFJlY2VpdmVzIGRhdGEgZnJvbSBhIHNvY2tldCB3aGV0aGVyIG9yIG5vdCBpdCBpcyBjb25uZWN0aW9uLW9yaWVudGVkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LXJlY3Zmcm9tLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQgPHA+CiAqIFRoZSA8aT5zb2NrZXQ8L2k+IG11c3QgYmUgYSBzb2NrZXQgcmVzb3VyY2UgcHJldmlvdXNseQogKiBjcmVhdGVkIGJ5IHNvY2tldF9jcmVhdGUoKS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICYkZGF0YSA8cD4KICogVGhlIGRhdGEgcmVjZWl2ZWQgd2lsbCBiZSBmZXRjaGVkIHRvIHRoZSB2YXJpYWJsZSBzcGVjaWZpZWQgd2l0aAogKiA8aT5idWY8L2k+LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGxlbmd0aCA8cD4KICogVXAgdG8gPGk+bGVuPC9pPiBieXRlcyB3aWxsIGJlIGZldGNoZWQgZnJvbSByZW1vdGUgaG9zdC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyA8cD4KICogVGhlIHZhbHVlIG9mIDxpPmZsYWdzPC9pPiBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mCiAqIHRoZSBmb2xsb3dpbmcgZmxhZ3MsIGpvaW5lZCB3aXRoIHRoZSBiaW5hcnkgT1IgKHwpCiAqIG9wZXJhdG9yLgogKiA8L3A+CiAqIDx0YWJsZT4KICogUG9zc2libGUgdmFsdWVzIGZvciA8aT5mbGFnczwvaT4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkZsYWc8L3RkPgogKiA8dGQ+RGVzY3JpcHRpb248L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TVNHX09PQjwvYj48L3RkPgogKiA8dGQ+CiAqIFByb2Nlc3Mgb3V0LW9mLWJhbmQgZGF0YS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPk1TR19QRUVLPC9iPjwvdGQ+CiAqIDx0ZD4KICogUmVjZWl2ZSBkYXRhIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVjZWl2ZSBxdWV1ZSB3aXRob3V0CiAqIHJlbW92aW5nIGl0IGZyb20gdGhlIHF1ZXVlLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TVNHX1dBSVRBTEw8L2I+PC90ZD4KICogPHRkPgogKiBCbG9jayB1bnRpbCBhdCBsZWFzdCA8aT5sZW48L2k+IGFyZSByZWNlaXZlZC4KICogSG93ZXZlciwgaWYgYSBzaWduYWwgaXMgY2F1Z2h0IG9yIHRoZSByZW1vdGUgaG9zdCBkaXNjb25uZWN0cywgdGhlCiAqIGZ1bmN0aW9uIG1heSByZXR1cm4gbGVzcyBkYXRhLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TVNHX0RPTlRXQUlUPC9iPjwvdGQ+CiAqIDx0ZD4KICogV2l0aCB0aGlzIGZsYWcgc2V0LCB0aGUgZnVuY3Rpb24gcmV0dXJucyBldmVuIGlmIGl0IHdvdWxkIG5vcm1hbGx5CiAqIGhhdmUgYmxvY2tlZC4KICogPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICogQHBhcmFtIHN0cmluZyAmJGFkZHJlc3MgPHA+CiAqIElmIHRoZSBzb2NrZXQgaXMgb2YgdGhlIHR5cGUgPGI+QUZfVU5JWDwvYj4gdHlwZSwKICogPGk+bmFtZTwvaT4gaXMgdGhlIHBhdGggdG8gdGhlIGZpbGUuIEVsc2UsIGZvcgogKiB1bmNvbm5lY3RlZCBzb2NrZXRzLCA8aT5uYW1lPC9pPiBpcyB0aGUgSVAgYWRkcmVzcyBvZiwKICogdGhlIHJlbW90ZSBob3N0LCBvciA8Yj5OVUxMPC9iPiBpZiB0aGUgc29ja2V0IGlzIGNvbm5lY3Rpb24tb3JpZW50ZWQuCiAqIDwvcD4KICogQHBhcmFtIGludCAmJHBvcnQgW29wdGlvbmFsXSA8cD4KICogVGhpcyBhcmd1bWVudCBvbmx5IGFwcGxpZXMgdG8gPGI+QUZfSU5FVDwvYj4gYW5kCiAqIDxiPkFGX0lORVQ2PC9iPiBzb2NrZXRzLCBhbmQgc3BlY2lmaWVzIHRoZSByZW1vdGUgcG9ydAogKiBmcm9tIHdoaWNoIHRoZSBkYXRhIGlzIHJlY2VpdmVkLiBJZiB0aGUgc29ja2V0IGlzIGNvbm5lY3Rpb24tb3JpZW50ZWQsCiAqIDxpPnBvcnQ8L2k+IHdpbGwgYmUgPGI+TlVMTDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgPGI+c29ja2V0X3JlY3Zmcm9tPC9iPiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQsCiAqIG9yIDxiPkZBTFNFPC9iPiBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuIFRoZSBhY3R1YWwgZXJyb3IgY29kZSBjYW4gYmUgcmV0cmlldmVkIGJ5CiAqIGNhbGxpbmcgPGI+c29ja2V0X2xhc3RfZXJyb3I8L2I+LiBUaGlzIGVycm9yIGNvZGUgbWF5IGJlCiAqIHBhc3NlZCB0byA8Yj5zb2NrZXRfc3RyZXJyb3I8L2I+IHRvIGdldCBhIHRleHR1YWwgZXhwbGFuYXRpb24KICogb2YgdGhlIGVycm9yLgogKi8KZnVuY3Rpb24gc29ja2V0X3JlY3Zmcm9tKFNvY2tldCAkc29ja2V0LCAmJGRhdGEsIGludCAkbGVuZ3RoLCBpbnQgJGZsYWdzLCAmJGFkZHJlc3MsICYkcG9ydCA9IG51bGwpOiBpbnR8ZmFsc2Uge30KCi8qKgogKiBSZWFkIGEgbWVzc2FnZQogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtcmVjdm1zZy5waHAKICogQHBhcmFtIHJlc291cmNlfFNvY2tldCAkc29ja2V0CiAqIEBwYXJhbSBhcnJheSAmJG1lc3NhZ2UKICogQHBhcmFtIGludCAkZmxhZ3MKICogQHJldHVybiBpbnR8ZmFsc2UKICogQHNpbmNlIDUuNQogKi8KZnVuY3Rpb24gc29ja2V0X3JlY3Ztc2coCiAgICBTb2NrZXQgJHNvY2tldCwKICAgIGFycmF5ICYkbWVzc2FnZSwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuNScsIHRvOiAnNy40JyldIGludCAkZmxhZ3MsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gaW50ICRmbGFncyA9IDAKKTogaW50fGZhbHNlIHt9CgovKioKICogU2VuZHMgYSBtZXNzYWdlIHRvIGEgc29ja2V0LCB3aGV0aGVyIGl0IGlzIGNvbm5lY3RlZCBvciBub3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtc2VuZHRvLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQgPHA+CiAqIEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgdXNpbmcgPGI+c29ja2V0X2NyZWF0ZTwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICogVGhlIHNlbnQgZGF0YSB3aWxsIGJlIHRha2VuIGZyb20gYnVmZmVyIDxpPmJ1ZjwvaT4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkbGVuZ3RoIDxwPgogKiA8aT5sZW48L2k+IGJ5dGVzIGZyb20gPGk+YnVmPC9pPiB3aWxsIGJlCiAqIHNlbnQuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgPHA+CiAqIFRoZSB2YWx1ZSBvZiA8aT5mbGFnczwvaT4gY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZgogKiB0aGUgZm9sbG93aW5nIGZsYWdzLCBqb2luZWQgd2l0aCB0aGUgYmluYXJ5IE9SICh8KQogKiBvcGVyYXRvci4KICogPHRhYmxlPgogKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIDxpPmZsYWdzPC9pPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TVNHX09PQjwvYj48L3RkPgogKiA8dGQ+CiAqIFNlbmQgT09CIChvdXQtb2YtYmFuZCkgZGF0YS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPk1TR19FT1I8L2I+PC90ZD4KICogPHRkPgogKiBJbmRpY2F0ZSBhIHJlY29yZCBtYXJrLiBUaGUgc2VudCBkYXRhIGNvbXBsZXRlcyB0aGUgcmVjb3JkLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TVNHX0VPRjwvYj48L3RkPgogKiA8dGQ+CiAqIENsb3NlIHRoZSBzZW5kZXIgc2lkZSBvZiB0aGUgc29ja2V0IGFuZCBpbmNsdWRlIGFuIGFwcHJvcHJpYXRlCiAqIG5vdGlmaWNhdGlvbiBvZiB0aGlzIGF0IHRoZSBlbmQgb2YgdGhlIHNlbnQgZGF0YS4gVGhlIHNlbnQgZGF0YQogKiBjb21wbGV0ZXMgdGhlIHRyYW5zYWN0aW9uLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TVNHX0RPTlRST1VURTwvYj48L3RkPgogKiA8dGQ+CiAqIEJ5cGFzcyByb3V0aW5nLCB1c2UgZGlyZWN0IGludGVyZmFjZS4KICogPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzIDxwPgogKiBJUCBhZGRyZXNzIG9mIHRoZSByZW1vdGUgaG9zdC4KICogPC9wPgogKiBAcGFyYW0gaW50fG51bGwgJHBvcnQgPHA+CiAqIDxpPnBvcnQ8L2k+IGlzIHRoZSByZW1vdGUgcG9ydCBudW1iZXIgYXQgd2hpY2ggdGhlIGRhdGEKICogd2lsbCBiZSBzZW50LgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIDxiPnNvY2tldF9zZW5kdG88L2I+IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBzZW50IHRvIHRoZQogKiByZW1vdGUgaG9zdCwgb3IgPGI+RkFMU0U8L2I+IGlmIGFuIGVycm9yIG9jY3VycmVkLgogKi8KZnVuY3Rpb24gc29ja2V0X3NlbmR0byhTb2NrZXQgJHNvY2tldCwgc3RyaW5nICRkYXRhLCBpbnQgJGxlbmd0aCwgaW50ICRmbGFncywgc3RyaW5nICRhZGRyZXNzLCA/aW50ICRwb3J0ID0gbnVsbCk6IGludHxmYWxzZSB7fQoKLyoqCiAqIEdldHMgc29ja2V0IG9wdGlvbnMgZm9yIHRoZSBzb2NrZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtZ2V0LW9wdGlvbi5waHAKICogQHBhcmFtIHJlc291cmNlfFNvY2tldCAkc29ja2V0IDxwPgogKiBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggPGI+c29ja2V0X2NyZWF0ZTwvYj4KICogb3IgPGI+c29ja2V0X2FjY2VwdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkbGV2ZWwgPHA+CiAqIFRoZSA8aT5sZXZlbDwvaT4gcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgcHJvdG9jb2wKICogbGV2ZWwgYXQgd2hpY2ggdGhlIG9wdGlvbiByZXNpZGVzLiBGb3IgZXhhbXBsZSwgdG8gcmV0cmlldmUgb3B0aW9ucyBhdAogKiB0aGUgc29ja2V0IGxldmVsLCBhIDxpPmxldmVsPC9pPiBwYXJhbWV0ZXIgb2YKICogPGI+U09MX1NPQ0tFVDwvYj4gd291bGQgYmUgdXNlZC4gT3RoZXIgbGV2ZWxzLCBzdWNoIGFzCiAqIDxiPlRDUDwvYj4sIGNhbiBiZSB1c2VkIGJ5CiAqIHNwZWNpZnlpbmcgdGhlIHByb3RvY29sIG51bWJlciBvZiB0aGF0IGxldmVsLiBQcm90b2NvbCBudW1iZXJzIGNhbiBiZQogKiBmb3VuZCBieSB1c2luZyB0aGUgPGI+Z2V0cHJvdG9ieW5hbWU8L2I+IGZ1bmN0aW9uLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG9wdGlvbiA8dGFibGU+CiAqIEF2YWlsYWJsZSBTb2NrZXQgT3B0aW9ucwogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+T3B0aW9uPC90ZD4KICogPHRkPkRlc2NyaXB0aW9uPC90ZD4KICogPHRkPlR5cGU8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+U09fREVCVUc8L2I+PC90ZD4KICogPHRkPgogKiBSZXBvcnRzIHdoZXRoZXIgZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIGJlaW5nIHJlY29yZGVkLgogKiA8L3RkPgogKiA8dGQ+CiAqIGludAogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+U09fQlJPQURDQVNUPC9iPjwvdGQ+CiAqIDx0ZD4KICogUmVwb3J0cyB3aGV0aGVyIHRyYW5zbWlzc2lvbiBvZiBicm9hZGNhc3QgbWVzc2FnZXMgaXMgc3VwcG9ydGVkLgogKiA8L3RkPgogKiA8dGQ+CiAqIGludAogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+U09fUkVVU0VBRERSPC9iPjwvdGQ+CiAqIDx0ZD4KICogUmVwb3J0cyB3aGV0aGVyIGxvY2FsIGFkZHJlc3NlcyBjYW4gYmUgcmV1c2VkLgogKiA8L3RkPgogKiA8dGQ+CiAqIGludAogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+U09fS0VFUEFMSVZFPC9iPjwvdGQ+CiAqIDx0ZD4KICogUmVwb3J0cyB3aGV0aGVyIGNvbm5lY3Rpb25zIGFyZSBrZXB0IGFjdGl2ZSB3aXRoIHBlcmlvZGljIHRyYW5zbWlzc2lvbgogKiBvZiBtZXNzYWdlcy4gSWYgdGhlIGNvbm5lY3RlZCBzb2NrZXQgZmFpbHMgdG8gcmVzcG9uZCB0byB0aGVzZSBtZXNzYWdlcywKICogdGhlIGNvbm5lY3Rpb24gaXMgYnJva2VuIGFuZCBwcm9jZXNzZXMgd3JpdGluZyB0byB0aGF0IHNvY2tldCBhcmUgbm90aWZpZWQKICogd2l0aCBhIFNJR1BJUEUgc2lnbmFsLgogKiA8L3RkPgogKiA8dGQ+CiAqIGludAogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+U09fTElOR0VSPC9iPjwvdGQ+CiAqIDx0ZD4KICogPHA+CiAqIFJlcG9ydHMgd2hldGhlciB0aGUgPGk+c29ja2V0PC9pPiBsaW5nZXJzIG9uCiAqIDxiPnNvY2tldF9jbG9zZTwvYj4gaWYgZGF0YSBpcyBwcmVzZW50LiBCeSBkZWZhdWx0LAogKiB3aGVuIHRoZSBzb2NrZXQgaXMgY2xvc2VkLCBpdCBhdHRlbXB0cyB0byBzZW5kIGFsbCB1bnNlbnQgZGF0YS4KICogSW4gdGhlIGNhc2Ugb2YgYSBjb25uZWN0aW9uLW9yaWVudGVkIHNvY2tldCwKICogPGI+c29ja2V0X2Nsb3NlPC9iPiB3aWxsIHdhaXQgZm9yIGl0cyBwZWVyIHRvCiAqIGFja25vd2xlZGdlIHRoZSBkYXRhLgogKiA8L3A+CiAqIDxwPgogKiBJZiBsX29ub2ZmIGlzIG5vbi16ZXJvIGFuZAogKiBsX2xpbmdlciBpcyB6ZXJvLCBhbGwgdGhlCiAqIHVuc2VudCBkYXRhIHdpbGwgYmUgZGlzY2FyZGVkIGFuZCBSU1QgKHJlc2V0KSBpcyBzZW50IHRvIHRoZQogKiBwZWVyIGluIHRoZSBjYXNlIG9mIGEgY29ubmVjdGlvbi1vcmllbnRlZCBzb2NrZXQuCiAqIDwvcD4KICogPHA+CiAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBsX29ub2ZmIGlzCiAqIG5vbi16ZXJvIGFuZCBsX2xpbmdlciBpcyBub24temVybywKICogPGI+c29ja2V0X2Nsb3NlPC9iPiB3aWxsIGJsb2NrIHVudGlsIGFsbCB0aGUgZGF0YQogKiBpcyBzZW50IG9yIHRoZSB0aW1lIHNwZWNpZmllZCBpbiBsX2xpbmdlcgogKiBlbGFwc2VzLiBJZiB0aGUgc29ja2V0IGlzIG5vbi1ibG9ja2luZywKICogPGI+c29ja2V0X2Nsb3NlPC9iPiB3aWxsIGZhaWwgYW5kIHJldHVybiBhbiBlcnJvci4KICogPC9wPgogKiA8L3RkPgogKiA8dGQ+CiAqIGFycmF5LiBUaGUgYXJyYXkgd2lsbCBjb250YWluIHR3byBrZXlzOgogKiBsX29ub2ZmIGFuZAogKiBsX2xpbmdlci4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPlNPX09PQklOTElORTwvYj48L3RkPgogKiA8dGQ+CiAqIFJlcG9ydHMgd2hldGhlciB0aGUgPGk+c29ja2V0PC9pPiBsZWF2ZXMgb3V0LW9mLWJhbmQgZGF0YSBpbmxpbmUuCiAqIDwvdGQ+CiAqIDx0ZD4KICogaW50CiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5TT19TTkRCVUY8L2I+PC90ZD4KICogPHRkPgogKiBSZXBvcnRzIHRoZSBzaXplIG9mIHRoZSBzZW5kIGJ1ZmZlci4KICogPC90ZD4KICogPHRkPgogKiBpbnQKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPlNPX1JDVkJVRjwvYj48L3RkPgogKiA8dGQ+CiAqIFJlcG9ydHMgdGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVyLgogKiA8L3RkPgogKiA8dGQ+CiAqIGludAogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+U09fRVJST1I8L2I+PC90ZD4KICogPHRkPgogKiBSZXBvcnRzIGluZm9ybWF0aW9uIGFib3V0IGVycm9yIHN0YXR1cyBhbmQgY2xlYXJzIGl0LgogKiA8L3RkPgogKiA8dGQ+CiAqIGludCAoY2Fubm90IGJlIHNldCBieSA8Yj5zb2NrZXRfc2V0X29wdGlvbjwvYj4pCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5TT19UWVBFPC9iPjwvdGQ+CiAqIDx0ZD4KICogUmVwb3J0cyB0aGUgPGk+c29ja2V0PC9pPiB0eXBlIChlLmcuCiAqIDxiPlNPQ0tfU1RSRUFNPC9iPikuCiAqIDwvdGQ+CiAqIDx0ZD4KICogaW50IChjYW5ub3QgYmUgc2V0IGJ5IDxiPnNvY2tldF9zZXRfb3B0aW9uPC9iPikKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPlNPX0RPTlRST1VURTwvYj48L3RkPgogKiA8dGQ+CiAqIFJlcG9ydHMgd2hldGhlciBvdXRnb2luZyBtZXNzYWdlcyBieXBhc3MgdGhlIHN0YW5kYXJkIHJvdXRpbmcgZmFjaWxpdGllcy4KICogPC90ZD4KICogPHRkPgogKiBpbnQKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPlNPX1JDVkxPV0FUPC9iPjwvdGQ+CiAqIDx0ZD4KICogUmVwb3J0cyB0aGUgbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcHJvY2VzcyBmb3IgPGk+c29ja2V0PC9pPgogKiBpbnB1dCBvcGVyYXRpb25zLgogKiA8L3RkPgogKiA8dGQ+CiAqIGludAogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+U09fUkNWVElNRU88L2I+PC90ZD4KICogPHRkPgogKiBSZXBvcnRzIHRoZSB0aW1lb3V0IHZhbHVlIGZvciBpbnB1dCBvcGVyYXRpb25zLgogKiA8L3RkPgogKiA8dGQ+CiAqIGFycmF5LiBUaGUgYXJyYXkgd2lsbCBjb250YWluIHR3byBrZXlzOgogKiBzZWMgd2hpY2ggaXMgdGhlIHNlY29uZHMgcGFydCBvbiB0aGUgdGltZW91dAogKiB2YWx1ZSBhbmQgdXNlYyB3aGljaCBpcyB0aGUgbWljcm9zZWNvbmQgcGFydAogKiBvZiB0aGUgdGltZW91dCB2YWx1ZS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPlNPX1NORFRJTUVPPC9iPjwvdGQ+CiAqIDx0ZD4KICogUmVwb3J0cyB0aGUgdGltZW91dCB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBhbW91bnQgb2YgdGltZSB0aGF0IGFuIG91dHB1dAogKiBmdW5jdGlvbiBibG9ja3MgYmVjYXVzZSBmbG93IGNvbnRyb2wgcHJldmVudHMgZGF0YSBmcm9tIGJlaW5nIHNlbnQuCiAqIDwvdGQ+CiAqIDx0ZD4KICogYXJyYXkuIFRoZSBhcnJheSB3aWxsIGNvbnRhaW4gdHdvIGtleXM6CiAqIHNlYyB3aGljaCBpcyB0aGUgc2Vjb25kcyBwYXJ0IG9uIHRoZSB0aW1lb3V0CiAqIHZhbHVlIGFuZCB1c2VjIHdoaWNoIGlzIHRoZSBtaWNyb3NlY29uZCBwYXJ0CiAqIG9mIHRoZSB0aW1lb3V0IHZhbHVlLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+U09fU05ETE9XQVQ8L2I+PC90ZD4KICogPHRkPgogKiBSZXBvcnRzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBieXRlcyB0byBwcm9jZXNzIGZvciA8aT5zb2NrZXQ8L2k+IG91dHB1dCBvcGVyYXRpb25zLgogKiA8L3RkPgogKiA8dGQ+CiAqIGludAogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+VENQX05PREVMQVk8L2I+PC90ZD4KICogPHRkPgogKiBSZXBvcnRzIHdoZXRoZXIgdGhlIE5hZ2xlIFRDUCBhbGdvcml0aG0gaXMgZGlzYWJsZWQuCiAqIDwvdGQ+CiAqIDx0ZD4KICogaW50CiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5NQ0FTVF9KT0lOX0dST1VQPC9iPjwvdGQ+CiAqIDx0ZD4KICogSm9pbnMgYSBtdWx0aWNhc3QgZ3JvdXAuIChhZGRlZCBpbiBQSFAgNS40KQogKiA8L3RkPgogKiA8dGQ+CiAqIGFycmF5IHdpdGgga2V5cyAiZ3JvdXAiLCBzcGVjaWZ5aW5nCiAqIGEgc3RyaW5nIHdpdGggYW4gSVB2NCBvciBJUHY2IG11bHRpY2FzdCBhZGRyZXNzIGFuZAogKiAiaW50ZXJmYWNlIiwgc3BlY2lmeWluZyBlaXRoZXIgYW4gaW50ZXJmYWNlCiAqIG51bWJlciAodHlwZSBpbnQpIG9yIGEgc3RyaW5nIHdpdGgKICogdGhlIGludGVyZmFjZSBuYW1lLCBsaWtlICJldGgwIi4KICogMCBjYW4gYmUgc3BlY2lmaWVkIHRvIGluZGljYXRlIHRoZSBpbnRlcmZhY2UKICogc2hvdWxkIGJlIHNlbGVjdGVkIHVzaW5nIHJvdXRpbmcgcnVsZXMuIChjYW4gb25seSBiZSB1c2VkIGluCiAqIDxiPnNvY2tldF9zZXRfb3B0aW9uPC9iPikKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPk1DQVNUX0xFQVZFX0dST1VQPC9iPjwvdGQ+CiAqIDx0ZD4KICogTGVhdmVzIGEgbXVsdGljYXN0IGdyb3VwLiAoYWRkZWQgaW4gUEhQIDUuNCkKICogPC90ZD4KICogPHRkPgogKiBhcnJheS4gU2VlIDxiPk1DQVNUX0pPSU5fR1JPVVA8L2I+IGZvcgogKiBtb3JlIGluZm9ybWF0aW9uLiAoY2FuIG9ubHkgYmUgdXNlZCBpbgogKiA8Yj5zb2NrZXRfc2V0X29wdGlvbjwvYj4pCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5NQ0FTVF9CTE9DS19TT1VSQ0U8L2I+PC90ZD4KICogPHRkPgogKiBCbG9ja3MgcGFja2V0cyBhcnJpdmluZyBmcm9tIGEgc3BlY2lmaWMgc291cmNlIHRvIGEgc3BlY2lmaWMKICogbXVsdGljYXN0IGdyb3VwLCB3aGljaCBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IGpvaW5lZC4KICogKGFkZGVkIGluIFBIUCA1LjQpCiAqIDwvdGQ+CiAqIDx0ZD4KICogYXJyYXkgd2l0aCB0aGUgc2FtZSBrZXlzIGFzCiAqIDxiPk1DQVNUX0pPSU5fR1JPVVA8L2I+LCBwbHVzIG9uZSBleHRyYSBrZXksCiAqIHNvdXJjZSwgd2hpY2ggbWFwcyB0byBhIHN0cmluZwogKiBzcGVjaWZ5aW5nIGFuIElQdjQgb3IgSVB2NiBhZGRyZXNzIG9mIHRoZSBzb3VyY2UgdG8gYmUgYmxvY2tlZC4KICogKGNhbiBvbmx5IGJlIHVzZWQgaW4gPGI+c29ja2V0X3NldF9vcHRpb248L2I+KQogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TUNBU1RfVU5CTE9DS19TT1VSQ0U8L2I+PC90ZD4KICogPHRkPgogKiBVbmJsb2NrcyAoc3RhcnQgcmVjZWl2aW5nIGFnYWluKSBwYWNrZXRzIGFycml2aW5nIGZyb20gYSBzcGVjaWZpYwogKiBzb3VyY2UgYWRkcmVzcyB0byBhIHNwZWNpZmljIG11bHRpY2FzdCBncm91cCwgd2hpY2ggbXVzdCBoYXZlIGJlZW4KICogcHJldmlvdXNseSBqb2luZWQuIChhZGRlZCBpbiBQSFAgNS40KQogKiA8L3RkPgogKiA8dGQ+CiAqIGFycmF5IHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzCiAqIDxiPk1DQVNUX0JMT0NLX1NPVVJDRTwvYj4uCiAqIChjYW4gb25seSBiZSB1c2VkIGluIDxiPnNvY2tldF9zZXRfb3B0aW9uPC9iPikKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPk1DQVNUX0pPSU5fU09VUkNFX0dST1VQPC9iPjwvdGQ+CiAqIDx0ZD4KICogUmVjZWl2ZSBwYWNrZXRzIGRlc3RpbmVkIHRvIGEgc3BlY2lmaWMgbXVsdGljYXN0IGdyb3VwIHdob3NlIHNvdXJjZQogKiBhZGRyZXNzIG1hdGNoZXMgYSBzcGVjaWZpYyB2YWx1ZS4gKGFkZGVkIGluIFBIUCA1LjQpCiAqIDwvdGQ+CiAqIDx0ZD4KICogYXJyYXkgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMKICogPGI+TUNBU1RfQkxPQ0tfU09VUkNFPC9iPi4KICogKGNhbiBvbmx5IGJlIHVzZWQgaW4gPGI+c29ja2V0X3NldF9vcHRpb248L2I+KQogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TUNBU1RfTEVBVkVfU09VUkNFX0dST1VQPC9iPjwvdGQ+CiAqIDx0ZD4KICogU3RvcCByZWNlaXZpbmcgcGFja2V0cyBkZXN0aW5lZCB0byBhIHNwZWNpZmljIG11bHRpY2FzdCBncm91cCB3aG9zZQogKiBzb3VyZSBhZGRyZXNzIG1hdGNoZXMgYSBzcGVjaWZpYyB2YWx1ZS4gKGFkZGVkIGluIFBIUCA1LjQpCiAqIDwvdGQ+CiAqIDx0ZD4KICogYXJyYXkgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMKICogPGI+TUNBU1RfQkxPQ0tfU09VUkNFPC9iPi4KICogKGNhbiBvbmx5IGJlIHVzZWQgaW4gPGI+c29ja2V0X3NldF9vcHRpb248L2I+KQogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+SVBfTVVMVElDQVNUX0lGPC9iPjwvdGQ+CiAqIDx0ZD4KICogVGhlIG91dGdvaW5nIGludGVyZmFjZSBmb3IgSVB2NCBtdWx0aWNhc3QgcGFja2V0cy4KICogKGFkZGVkIGluIFBIUCA1LjQpCiAqIDwvdGQ+CiAqIDx0ZD4KICogRWl0aGVyIGludCBzcGVjaWZ5aW5nIHRoZSBpbnRlcmZhY2UgbnVtYmVyIG9yIGEKICogc3RyaW5nIHdpdGggYW4gaW50ZXJmYWNlIG5hbWUsIGxpa2UKICogZXRoMC4gVGhlIHZhbHVlIDAgY2FuIGJlIHVzZWQgdG8KICogaW5kaWNhdGUgdGhlIHJvdXRpbmcgdGFibGUgaXMgdG8gdXNlZCBpbiB0aGUgaW50ZXJmYWNlIHNlbGVjdGlvbi4KICogVGhlIGZ1bmN0aW9uIDxiPnNvY2tldF9nZXRfb3B0aW9uPC9iPiByZXR1cm5zIGFuCiAqIGludGVyZmFjZSBpbmRleC4KICogTm90ZSB0aGF0LCB1bmxpa2UgdGhlIEMgQVBJLCB0aGlzIG9wdGlvbiBkb2VzIE5PVCB0YWtlIGFuIElQCiAqIGFkZHJlc3MuIFRoaXMgZWxpbWluYXRlcyB0aGUgaW50ZXJmYWNlIGRpZmZlcmVuY2UgYmV0d2VlbgogKiA8Yj5JUF9NVUxUSUNBU1RfSUY8L2I+IGFuZAogKiA8Yj5JUFY2X01VTFRJQ0FTVF9JRjwvYj4uCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5JUFY2X01VTFRJQ0FTVF9JRjwvYj48L3RkPgogKiA8dGQ+CiAqIFRoZSBvdXRnb2luZyBpbnRlcmZhY2UgZm9yIElQdjYgbXVsdGljYXN0IHBhY2tldHMuCiAqIChhZGRlZCBpbiBQSFAgNS40KQogKiA8L3RkPgogKiA8dGQ+CiAqIFRoZSBzYW1lIGFzIDxiPklQX01VTFRJQ0FTVF9JRjwvYj4uCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5JUF9NVUxUSUNBU1RfTE9PUDwvYj48L3RkPgogKiA8dGQ+CiAqIFRoZSBtdWx0aWNhc3QgbG9vcGJhY2sgcG9saWN5IGZvciBJUHY0IHBhY2tldHMsIHdoaWNoCiAqIGRldGVybWluZXMgd2hldGhlciBtdWx0aWNhc3QgcGFja2V0cyBzZW50IGJ5IHRoaXMgc29ja2V0IGFsc28gcmVhY2gKICogcmVjZWl2ZXJzIGluIHRoZSBzYW1lIGhvc3QgdGhhdCBoYXZlIGpvaW5lZCB0aGUgc2FtZSBtdWx0aWNhc3QgZ3JvdXAKICogb24gdGhlIG91dGdvaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoaXMgc29ja2V0LiBUaGlzIGlzIHRoZSBjYXNlIGJ5CiAqIGRlZmF1bHQuCiAqIChhZGRlZCBpbiBQSFAgNS40KQogKiA8L3RkPgogKiA8dGQ+CiAqIGludCAoZWl0aGVyIDAgb3IKICogMSkuIEZvciA8Yj5zb2NrZXRfc2V0X29wdGlvbjwvYj4KICogYW55IHZhbHVlIHdpbGwgYmUgYWNjZXB0ZWQgYW5kIHdpbGwgYmUgY29udmVydGVkIHRvIGEgYm9vbGVhbgogKiBmb2xsb3dpbmcgdGhlIHVzdWFsIFBIUCBydWxlcy4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPklQVjZfTVVMVElDQVNUX0xPT1A8L2I+PC90ZD4KICogPHRkPgogKiBBbmFsb2dvdXMgdG8gPGI+SVBfTVVMVElDQVNUX0xPT1A8L2I+LCBidXQgZm9yIElQdjYuCiAqIChhZGRlZCBpbiBQSFAgNS40KQogKiA8L3RkPgogKiA8dGQ+CiAqIGludC4gU2VlIDxiPklQX01VTFRJQ0FTVF9MT09QPC9iPi4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPklQX01VTFRJQ0FTVF9UVEw8L2I+PC90ZD4KICogPHRkPgogKiBUaGUgdGltZS10by1saXZlIG9mIG91dGdvaW5nIElQdjQgbXVsdGljYXN0IHBhY2tldHMuIFRoaXMgc2hvdWxkIGJlCiAqIGEgdmFsdWUgYmV0d2VlbiAwIChkb24ndCBsZWF2ZSB0aGUgaW50ZXJmYWNlKSBhbmQgMjU1LiBUaGUgZGVmYXVsdAogKiB2YWx1ZSBpcyAxIChvbmx5IHRoZSBsb2NhbCBuZXR3b3JrIGlzIHJlYWNoZWQpLgogKiAoYWRkZWQgaW4gUEhQIDUuNCkKICogPC90ZD4KICogPHRkPgogKiBpbnQgYmV0d2VlbiAwIGFuZCAyNTUuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5JUFY2X01VTFRJQ0FTVF9IT1BTPC9iPjwvdGQ+CiAqIDx0ZD4KICogQW5hbG9nb3VzIHRvIDxiPklQX01VTFRJQ0FTVF9UVEw8L2I+LCBidXQgZm9yIElQdjYKICogcGFja2V0cy4gVGhlIHZhbHVlIC0xIGlzIGFsc28gYWNjZXB0ZWQsIG1lYW5pbmcgdGhlIHJvdXRlIGRlZmF1bHQKICogc2hvdWxkIGJlIHVzZWQuCiAqIChhZGRlZCBpbiBQSFAgNS40KQogKiA8L3RkPgogKiA8dGQ+CiAqIGludCBiZXR3ZWVuIC0xIGFuZCAyNTUuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqIEByZXR1cm4gYXJyYXl8aW50fGZhbHNlIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gb3B0aW9uLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3JzLgogKi8KZnVuY3Rpb24gc29ja2V0X2dldF9vcHRpb24oU29ja2V0ICRzb2NrZXQsIGludCAkbGV2ZWwsIGludCAkb3B0aW9uKTogYXJyYXl8aW50fGZhbHNlIHt9CgovKioKICogU2V0cyBzb2NrZXQgb3B0aW9ucyBmb3IgdGhlIHNvY2tldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1zZXQtb3B0aW9uLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQgPHA+CiAqIEEgdmFsaWQgc29ja2V0IHJlc291cmNlIGNyZWF0ZWQgd2l0aCA8Yj5zb2NrZXRfY3JlYXRlPC9iPgogKiBvciA8Yj5zb2NrZXRfYWNjZXB0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRsZXZlbCA8cD4KICogVGhlIDxpPmxldmVsPC9pPiBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBwcm90b2NvbAogKiBsZXZlbCBhdCB3aGljaCB0aGUgb3B0aW9uIHJlc2lkZXMuIEZvciBleGFtcGxlLCB0byByZXRyaWV2ZSBvcHRpb25zIGF0CiAqIHRoZSBzb2NrZXQgbGV2ZWwsIGEgPGk+bGV2ZWw8L2k+IHBhcmFtZXRlciBvZgogKiA8Yj5TT0xfU09DS0VUPC9iPiB3b3VsZCBiZSB1c2VkLiBPdGhlciBsZXZlbHMsIHN1Y2ggYXMKICogVENQLCBjYW4gYmUgdXNlZCBieSBzcGVjaWZ5aW5nIHRoZSBwcm90b2NvbCBudW1iZXIgb2YgdGhhdCBsZXZlbC4KICogUHJvdG9jb2wgbnVtYmVycyBjYW4gYmUgZm91bmQgYnkgdXNpbmcgdGhlCiAqIDxiPmdldHByb3RvYnluYW1lPC9iPiBmdW5jdGlvbi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvcHRpb24gPHA+CiAqIFRoZSBhdmFpbGFibGUgc29ja2V0IG9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGZvciB0aGUKICogPGI+c29ja2V0X2dldF9vcHRpb248L2I+IGZ1bmN0aW9uLgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgPHA+CiAqIFRoZSBvcHRpb24gdmFsdWUuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzb2NrZXRfc2V0X29wdGlvbihTb2NrZXQgJHNvY2tldCwgaW50ICRsZXZlbCwgaW50ICRvcHRpb24sICR2YWx1ZSk6IGJvb2wge30KCi8qKgogKiBTaHV0cyBkb3duIGEgc29ja2V0IGZvciByZWNlaXZpbmcsIHNlbmRpbmcsIG9yIGJvdGgKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtc2h1dGRvd24ucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxTb2NrZXQgJHNvY2tldCA8cD4KICogQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIDxiPnNvY2tldF9jcmVhdGU8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG1vZGUgW29wdGlvbmFsXSA8cD4KICogVGhlIHZhbHVlIG9mIDxpPmhvdzwvaT4gY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogKiA8dGFibGU+CiAqIHBvc3NpYmxlIHZhbHVlcyBmb3IgPGk+aG93PC9pPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+MDwvdGQ+CiAqIDx0ZD4KICogU2h1dGRvd24gc29ja2V0IHJlYWRpbmcKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjE8L3RkPgogKiA8dGQ+CiAqIFNodXRkb3duIHNvY2tldCB3cml0aW5nCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD4yPC90ZD4KICogPHRkPgogKiBTaHV0ZG93biBzb2NrZXQgcmVhZGluZyBhbmQgd3JpdGluZwogKiA8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc29ja2V0X3NodXRkb3duKFNvY2tldCAkc29ja2V0LCBpbnQgJG1vZGUgPSAyKTogYm9vbCB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGxhc3QgZXJyb3Igb24gdGhlIHNvY2tldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1sYXN0LWVycm9yLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0ICRzb2NrZXQgW29wdGlvbmFsXSA8cD4KICogQSB2YWxpZCBzb2NrZXQgcmVzb3VyY2UgY3JlYXRlZCB3aXRoIDxiPnNvY2tldF9jcmVhdGU8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gaW50IFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHNvY2tldCBlcnJvciBjb2RlLgogKi8KZnVuY3Rpb24gc29ja2V0X2xhc3RfZXJyb3IoP1NvY2tldCAkc29ja2V0ID0gbnVsbCk6IGludCB7fQoKLyoqCiAqIENsZWFycyB0aGUgZXJyb3Igb24gdGhlIHNvY2tldCBvciB0aGUgbGFzdCBlcnJvciBjb2RlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LWNsZWFyLWVycm9yLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8U29ja2V0fG51bGwgJHNvY2tldCBbb3B0aW9uYWxdIDxwPgogKiBBIHZhbGlkIHNvY2tldCByZXNvdXJjZSBjcmVhdGVkIHdpdGggPGI+c29ja2V0X2NyZWF0ZTwvYj4uCiAqIDwvcD4KICogQHJldHVybiB2b2lkIE5vIHZhbHVlIGlzIHJldHVybmVkLgogKi8KZnVuY3Rpb24gc29ja2V0X2NsZWFyX2Vycm9yKD9Tb2NrZXQgJHNvY2tldCA9IG51bGwpOiB2b2lkIHt9CgovKioKICogSW1wb3J0IGEgc3RyZWFtCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LWltcG9ydC1zdHJlYW0ucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxTb2NrZXQgJHN0cmVhbSA8cD4KICogVGhlIHN0cmVhbSByZXNvdXJjZSB0byBpbXBvcnQuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxTb2NrZXR8ZmFsc2V8bnVsbCA8Yj5GQUxTRTwvYj4gb3IgPGI+TlVMTDwvYj4gb24gZmFpbHVyZS4KICogQHNpbmNlIDUuNAogKi8KZnVuY3Rpb24gc29ja2V0X2ltcG9ydF9zdHJlYW0oJHN0cmVhbSk6IFNvY2tldHxmYWxzZSB7fQoKLyoqCiAqIENhbGN1bGF0ZSBtZXNzYWdlIGJ1ZmZlciBzaXplCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LWNtc2ctc3BhY2UucGhwCiAqIEBwYXJhbSBpbnQgJGxldmVsCiAqIEBwYXJhbSBpbnQgJHR5cGUKICogQHBhcmFtIGludCAkbnVtIFtvcHRpb25hbF0KICogQHJldHVybiBpbnR8bnVsbAogKiBAc2luY2UgNS41CiAqLwpmdW5jdGlvbiBzb2NrZXRfY21zZ19zcGFjZSgKICAgIGludCAkbGV2ZWwsCiAgICBpbnQgJHR5cGUsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gaW50ICRudW0gPSAwCik6ID9pbnQge30KCi8qKgogKiBBbGlhcyBvZiB7QHNlZSBzb2NrZXRfZ2V0X29wdGlvbn0KICogQHBhcmFtIFNvY2tldCAkc29ja2V0CiAqIEBwYXJhbSBpbnQgJGxldmVsCiAqIEBwYXJhbSBpbnQgJG9wdGlvbgogKi8KZnVuY3Rpb24gc29ja2V0X2dldG9wdChTb2NrZXQgJHNvY2tldCwgaW50ICRsZXZlbCwgaW50ICRvcHRpb24pOiBhcnJheXxpbnR8ZmFsc2Uge30KCi8qKgogKiBBbGlhcyBvZiB7QHNlZSBzb2NrZXRfc2V0X29wdGlvbn0KICogQHBhcmFtIFNvY2tldCAkc29ja2V0CiAqIEBwYXJhbSBpbnQgJGxldmVsCiAqIEBwYXJhbSBpbnQgJG9wdGlvbgogKiBAcGFyYW0gJHZhbHVlCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gc29ja2V0X3NldG9wdChTb2NrZXQgJHNvY2tldCwgaW50ICRsZXZlbCwgaW50ICRvcHRpb24sICR2YWx1ZSk6IGJvb2wge30KCi8qKgogKiBFeHBvcnRzIHRoZSBXU0FQUk9UT0NPTF9JTkZPIFN0cnVjdHVyZQogKgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtd3NhcHJvdG9jb2wtaW5mby1leHBvcnQucGhwCiAqCiAqIEBwYXJhbSByZXNvdXJjZXxTb2NrZXQgJHNvY2tldAogKiBAcGFyYW0gaW50ICR0YXJnZXRfcGlkCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAqCiAqIEBzaW5jZSA3LjMKICovCmZ1bmN0aW9uIHNvY2tldF93c2Fwcm90b2NvbF9pbmZvX2V4cG9ydCgkc29ja2V0LCAkdGFyZ2V0X3BpZCkge30KCi8qKgogKiBJbXBvcnRzIGEgU29ja2V0IGZyb20gYW5vdGhlciBQcm9jZXNzCiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC13c2Fwcm90b2NvbC1pbmZvLWltcG9ydC5waHAKICoKICogQHBhcmFtIHN0cmluZyAkaW5mb19pZAogKiBAcmV0dXJuIHJlc291cmNlfFNvY2tldHxmYWxzZQogKgogKiBAc2luY2UgNy4zCiAqLwpmdW5jdGlvbiBzb2NrZXRfd3NhcHJvdG9jb2xfaW5mb19pbXBvcnQoJGluZm9faWQpIHt9CgovKioKICogUmVsZWFzZXMgYW4gZXhwb3J0ZWQgV1NBUFJPVE9DT0xfSU5GTyBTdHJ1Y3R1cmUKICoKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LXdzYXByb3RvY29sLWluZm8tcmVsZWFzZS5waHAKICoKICogQHBhcmFtIHN0cmluZyAkaW5mb19pZAogKiBAcmV0dXJuIGJvb2wKICoKICogQHNpbmNlIDcuMwogKi8KZnVuY3Rpb24gc29ja2V0X3dzYXByb3RvY29sX2luZm9fcmVsZWFzZSgkaW5mb19pZCkge30KCi8qKgogKiBAc2luY2UgOC4zCiAqLwpmdW5jdGlvbiBzb2NrZXRfYXRtYXJrKFNvY2tldCAkc29ja2V0KTogYm9vbCB7fQoKZGVmaW5lKCdBRl9VTklYJywgMSk7CmRlZmluZSgnQUZfSU5FVCcsIDIpOwoKLyoqCiAqIE9ubHkgYXZhaWxhYmxlIGlmIGNvbXBpbGVkIHdpdGggSVB2NiBzdXBwb3J0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdBRl9JTkVUNicsIDEwKTsKZGVmaW5lKCdTT0NLX1NUUkVBTScsIDEpOwpkZWZpbmUoJ1NPQ0tfREdSQU0nLCAyKTsKZGVmaW5lKCdTT0NLX1JBVycsIDMpOwpkZWZpbmUoJ1NPQ0tfU0VRUEFDS0VUJywgNSk7CmRlZmluZSgnU09DS19SRE0nLCA0KTsKZGVmaW5lKCdNU0dfT09CJywgMSk7CmRlZmluZSgnTVNHX1dBSVRBTEwnLCAyNTYpOwpkZWZpbmUoJ01TR19DVFJVTkMnLCA4KTsKZGVmaW5lKCdNU0dfVFJVTkMnLCAzMik7CmRlZmluZSgnTVNHX1BFRUsnLCAyKTsKZGVmaW5lKCdNU0dfRE9OVFJPVVRFJywgNCk7CgovKioKICogTm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzIHBsYXRmb3Jtcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTVNHX0VPUicsIDEyOCk7CgovKioKICogTm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzIHBsYXRmb3Jtcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTVNHX0VPRicsIDUxMik7CmRlZmluZSgnTVNHX0NPTkZJUk0nLCAyMDQ4KTsKZGVmaW5lKCdNU0dfRVJSUVVFVUUnLCA4MTkyKTsKZGVmaW5lKCdNU0dfTk9TSUdOQUwnLCAxNjM4NCk7CmRlZmluZSgnTVNHX0RPTlRXQUlUJywgNjQpOwpkZWZpbmUoJ01TR19NT1JFJywgMzI3NjgpOwpkZWZpbmUoJ01TR19XQUlURk9ST05FJywgNjU1MzYpOwpkZWZpbmUoJ01TR19DTVNHX0NMT0VYRUMnLCAxMDczNzQxODI0KTsKZGVmaW5lKCdTT19ERUJVRycsIDEpOwpkZWZpbmUoJ1NPX1JFVVNFQUREUicsIDIpOwoKLyoqCiAqIFRoaXMgY29uc3RhbnQgaXMgb25seSBhdmFpbGFibGUgaW4gUEhQIDUuNC4xMCBvciBsYXRlciBvbiBwbGF0Zm9ybXMgdGhhdAogKiBzdXBwb3J0IHRoZSA8Yj5TT19SRVVTRVBPUlQ8L2I+IHNvY2tldCBvcHRpb246IHRoaXMKICogaW5jbHVkZXMgTWFjIE9TIFggYW5kIEZyZWVCU0QsIGJ1dCBkb2VzIG5vdCBpbmNsdWRlIExpbnV4IG9yIFdpbmRvd3MuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPX1JFVVNFUE9SVCcsIDE1KTsKZGVmaW5lKCdTT19LRUVQQUxJVkUnLCA5KTsKZGVmaW5lKCdTT19ET05UUk9VVEUnLCA1KTsKZGVmaW5lKCdTT19MSU5HRVInLCAxMyk7CmRlZmluZSgnU09fQlJPQURDQVNUJywgNik7CmRlZmluZSgnU09fT09CSU5MSU5FJywgMTApOwpkZWZpbmUoJ1NPX1NOREJVRicsIDcpOwpkZWZpbmUoJ1NPX1JDVkJVRicsIDgpOwpkZWZpbmUoJ1NPX1NORExPV0FUJywgMTkpOwpkZWZpbmUoJ1NPX1JDVkxPV0FUJywgMTgpOwpkZWZpbmUoJ1NPX1NORFRJTUVPJywgMjEpOwpkZWZpbmUoJ1NPX1JDVlRJTUVPJywgMjApOwpkZWZpbmUoJ1NPX1RZUEUnLCAzKTsKZGVmaW5lKCdTT19FUlJPUicsIDQpOwpkZWZpbmUoJ1NPX0JJTkRUT0RFVklDRScsIDI1KTsKZGVmaW5lKCdTT19BVFRBQ0hfUkVVU0VQT1JUX0NCUEYnLCA1MSk7CmRlZmluZSgnU09fREVUQUNIX0ZJTFRFUicsIDI3KTsKZGVmaW5lKCdTT19ERVRBQ0hfQlBGJywgMjcpOwoKZGVmaW5lKCdTT0xfU09DS0VUJywgMSk7CmRlZmluZSgnU09MX1VEUExJVEUnLCAxMzYpOwpkZWZpbmUoJ1NPTUFYQ09OTicsIDEyOCk7Ci8qKgogKiBAc2luY2UgOC4xCiAqLwpkZWZpbmUoJ1NPX01BUksnLCAzNik7Ci8qKgogKiBVc2VkIHRvIGRpc2FibGUgTmFnbGUgVENQIGFsZ29yaXRobS4KICogQWRkZWQgaW4gUEhQIDUuMi43LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdUQ1BfTk9ERUxBWScsIDEpOwpkZWZpbmUoJ1BIUF9OT1JNQUxfUkVBRCcsIDEpOwpkZWZpbmUoJ1BIUF9CSU5BUllfUkVBRCcsIDIpOwovKioKICogSm9pbnMgYSBtdWx0aWNhc3QgZ3JvdXAuCiAqIEBzaW5jZSA1LjQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtZ2V0LW9wdGlvbi5waHAKICovCmRlZmluZSgnTUNBU1RfSk9JTl9HUk9VUCcsIDQyKTsKLyoqCiAqIExlYXZlcyBhIG11bHRpY2FzdCBncm91cC4KICogQHNpbmNlIDUuNAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1nZXQtb3B0aW9uLnBocAogKi8KZGVmaW5lKCdNQ0FTVF9MRUFWRV9HUk9VUCcsIDQ1KTsKLyoqCiAqIEJsb2NrcyBwYWNrZXRzIGFycml2aW5nIGZyb20gYSBzcGVjaWZpYyBzb3VyY2UgdG8gYSBzcGVjaWZpYyBtdWx0aWNhc3QgZ3JvdXAsCiAqIHdoaWNoIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgam9pbmVkLgogKiBAc2luY2UgNS40CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LWdldC1vcHRpb24ucGhwCiAqLwpkZWZpbmUoJ01DQVNUX0JMT0NLX1NPVVJDRScsIDQzKTsKLyoqCiAqIFVuYmxvY2tzIChzdGFydCByZWNlaXZpbmcgYWdhaW4pIHBhY2tldHMgYXJyaXZpbmcgZnJvbQogKiBhIHNwZWNpZmljIHNvdXJjZSBhZGRyZXNzIHRvIGEgc3BlY2lmaWMgbXVsdGljYXN0IGdyb3VwLAogKiB3aGljaCBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IGpvaW5lZC4KICogQHNpbmNlIDUuNAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1nZXQtb3B0aW9uLnBocAogKi8KZGVmaW5lKCdNQ0FTVF9VTkJMT0NLX1NPVVJDRScsIDQ0KTsKLyoqCiAqIFJlY2VpdmUgcGFja2V0cyBkZXN0aW5lZCB0byBhIHNwZWNpZmljIG11bHRpY2FzdCBncm91cAogKiB3aG9zZSBzb3VyY2UgYWRkcmVzcyBtYXRjaGVzIGEgc3BlY2lmaWMgdmFsdWUuCiAqIEBzaW5jZSA1LjQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtZ2V0LW9wdGlvbi5waHAKICovCmRlZmluZSgnTUNBU1RfSk9JTl9TT1VSQ0VfR1JPVVAnLCA0Nik7Ci8qKgogKiBTdG9wIHJlY2VpdmluZyBwYWNrZXRzIGRlc3RpbmVkIHRvIGEgc3BlY2lmaWMgbXVsdGljYXN0IGdyb3VwCiAqIHdob3NlIHNvdXJlIGFkZHJlc3MgbWF0Y2hlcyBhIHNwZWNpZmljIHZhbHVlLgogKiBAc2luY2UgNS40CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LWdldC1vcHRpb24ucGhwCiAqLwpkZWZpbmUoJ01DQVNUX0xFQVZFX1NPVVJDRV9HUk9VUCcsIDQ3KTsKLyoqCiAqIFRoZSBvdXRnb2luZyBpbnRlcmZhY2UgZm9yIElQdjQgbXVsdGljYXN0IHBhY2tldHMuCiAqIEBzaW5jZSA1LjQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2NrZXQtZ2V0LW9wdGlvbi5waHAKICovCmRlZmluZSgnSVBfTVVMVElDQVNUX0lGJywgMzIpOwovKioKICogVGhlIG91dGdvaW5nIGludGVyZmFjZSBmb3IgSVB2NiBtdWx0aWNhc3QgcGFja2V0cy4KICogQHNpbmNlIDUuNAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1nZXQtb3B0aW9uLnBocAogKi8KZGVmaW5lKCdJUF9NVUxUSUNBU1RfVFRMJywgMzMpOwovKioKICogVGhlIG11bHRpY2FzdCBsb29wYmFjayBwb2xpY3kgZm9yIElQdjQgcGFja2V0cywKICogd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyIG11bHRpY2FzdCBwYWNrZXRzIHNlbnQgYnkgdGhpcyBzb2NrZXQKICogYWxzbyByZWFjaCByZWNlaXZlcnMgaW4gdGhlIHNhbWUgaG9zdCB0aGF0IGhhdmUgam9pbmVkIHRoZSBzYW1lIG11bHRpY2FzdCBncm91cAogKiBvbiB0aGUgb3V0Z29pbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhpcyBzb2NrZXQuIFRoaXMgaXMgdGhlIGNhc2UgYnkgZGVmYXVsdC4KICogQHNpbmNlIDUuNAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1nZXQtb3B0aW9uLnBocAogKi8KZGVmaW5lKCdJUF9NVUxUSUNBU1RfTE9PUCcsIDM0KTsKLyoqCiAqIEFuYWxvZ291cyB0byBJUF9NVUxUSUNBU1RfTE9PUCwgYnV0IGZvciBJUHY2LgogKiBAc2luY2UgNS40CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29ja2V0LWdldC1vcHRpb24ucGhwCiAqLwpkZWZpbmUoJ0lQVjZfTVVMVElDQVNUX0lGJywgMTcpOwovKioKICogVGhlIHRpbWUtdG8tbGl2ZSBvZiBvdXRnb2luZyBJUHY0IG11bHRpY2FzdCBwYWNrZXRzLgogKiBUaGlzIHNob3VsZCBiZSBhIHZhbHVlIGJldHdlZW4gMCAoZG9uJ3QgbGVhdmUgdGhlIGludGVyZmFjZSkgYW5kIDI1NS4KICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgMSAob25seSB0aGUgbG9jYWwgbmV0d29yayBpcyByZWFjaGVkKS4KICogQHNpbmNlIDUuNAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1nZXQtb3B0aW9uLnBocAogKi8KZGVmaW5lKCdJUFY2X01VTFRJQ0FTVF9IT1BTJywgMTgpOwovKioKICogQW5hbG9nb3VzIHRvIElQX01VTFRJQ0FTVF9UVEwsIGJ1dCBmb3IgSVB2NiBwYWNrZXRzLgogKiBUaGUgdmFsdWUgLTEgaXMgYWxzbyBhY2NlcHRlZCwgbWVhbmluZyB0aGUgcm91dGUgZGVmYXVsdCBzaG91bGQgYmUgdXNlZC4KICogQHNpbmNlIDUuNAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvY2tldC1nZXQtb3B0aW9uLnBocAogKi8KZGVmaW5lKCdJUFY2X01VTFRJQ0FTVF9MT09QJywgMTkpOwpkZWZpbmUoJ0lQVjZfVjZPTkxZJywgMjYpOwpkZWZpbmUoJ0lQX0JJTkRfQUREUkVTU19OT19QT1JUJywgMjQpOwpkZWZpbmUoJ0lQX01UVV9ESVNDT1ZFUicsIDEwKTsKZGVmaW5lKCdJUF9QTVRVRElTQ19ETycsIDIpOwpkZWZpbmUoJ0lQX1BNVFVESVNDX0RPTlQnLCAwKTsKZGVmaW5lKCdJUF9QTVRVRElTQ19XQU5UJywgMSk7CmRlZmluZSgnSVBfUE1UVURJU0NfUFJPQkUnLCAzKTsKZGVmaW5lKCdJUF9QTVRVRElTQ19JTlRFUkZBQ0UnLCA0KTsKZGVmaW5lKCdJUF9QTVRVRElTQ19PTUlUJywgNSk7CgovKioKICogT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FUEVSTScsIDEpOwoKLyoqCiAqIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FTk9FTlQnLCAyKTsKCi8qKgogKiBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VJTlRSJywgNCk7CgovKioKICogSS9PIGVycm9yLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUlPJywgNSk7CgovKioKICogTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VOWElPJywgNik7CgovKioKICogQXJnIGxpc3QgdG9vIGxvbmcuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FMkJJRycsIDcpOwoKLyoqCiAqIEJhZCBmaWxlIG51bWJlci4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VCQURGJywgOSk7CgovKioKICogVHJ5IGFnYWluLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUFHQUlOJywgMTEpOwoKLyoqCiAqIE91dCBvZiBtZW1vcnkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FTk9NRU0nLCAxMik7CgovKioKICogUGVybWlzc2lvbiBkZW5pZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FQUNDRVMnLCAxMyk7CgovKioKICogQmFkIGFkZHJlc3MuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FRkFVTFQnLCAxNCk7CgovKioKICogQmxvY2sgZGV2aWNlIHJlcXVpcmVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5PVEJMSycsIDE1KTsKCi8qKgogKiBEZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VCVVNZJywgMTYpOwoKLyoqCiAqIEZpbGUgZXhpc3RzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUVYSVNUJywgMTcpOwoKLyoqCiAqIENyb3NzLWRldmljZSBsaW5rLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRVhERVYnLCAxOCk7CgovKioKICogTm8gc3VjaCBkZXZpY2UuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FTk9ERVYnLCAxOSk7CgovKioKICogTm90IGEgZGlyZWN0b3J5LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5PVERJUicsIDIwKTsKCi8qKgogKiBJcyBhIGRpcmVjdG9yeS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VJU0RJUicsIDIxKTsKCi8qKgogKiBJbnZhbGlkIGFyZ3VtZW50LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUlOVkFMJywgMjIpOwoKLyoqCiAqIEZpbGUgdGFibGUgb3ZlcmZsb3cuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FTkZJTEUnLCAyMyk7CgovKioKICogVG9vIG1hbnkgb3BlbiBmaWxlcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VNRklMRScsIDI0KTsKCi8qKgogKiBOb3QgYSB0eXBld3JpdGVyLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5PVFRZJywgMjUpOwoKLyoqCiAqIE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5PU1BDJywgMjgpOwoKLyoqCiAqIElsbGVnYWwgc2Vlay4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VTUElQRScsIDI5KTsKCi8qKgogKiBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FUk9GUycsIDMwKTsKCi8qKgogKiBUb28gbWFueSBsaW5rcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VNTElOSycsIDMxKTsKCi8qKgogKiBCcm9rZW4gcGlwZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VQSVBFJywgMzIpOwoKLyoqCiAqIEZpbGUgbmFtZSB0b28gbG9uZy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VOQU1FVE9PTE9ORycsIDM2KTsKCi8qKgogKiBObyByZWNvcmQgbG9ja3MgYXZhaWxhYmxlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5PTENLJywgMzcpOwoKLyoqCiAqIEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VOT1NZUycsIDM4KTsKCi8qKgogKiBEaXJlY3Rvcnkgbm90IGVtcHR5LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5PVEVNUFRZJywgMzkpOwoKLyoqCiAqIFRvbyBtYW55IHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUxPT1AnLCA0MCk7CgovKioKICogT3BlcmF0aW9uIHdvdWxkIGJsb2NrLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRVdPVUxEQkxPQ0snLCAxMSk7CgovKioKICogTm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FTk9NU0cnLCA0Mik7CgovKioKICogSWRlbnRpZmllciByZW1vdmVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUlEUk0nLCA0Myk7CgovKioKICogQ2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUNIUk5HJywgNDQpOwoKLyoqCiAqIExldmVsIDIgbm90IHN5bmNocm9uaXplZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VMMk5TWU5DJywgNDUpOwoKLyoqCiAqIExldmVsIDMgaGFsdGVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUwzSExUJywgNDYpOwoKLyoqCiAqIExldmVsIDMgcmVzZXQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FTDNSU1QnLCA0Nyk7CgovKioKICogTGluayBudW1iZXIgb3V0IG9mIHJhbmdlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUxOUk5HJywgNDgpOwoKLyoqCiAqIFByb3RvY29sIGRyaXZlciBub3QgYXR0YWNoZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FVU5BVENIJywgNDkpOwoKLyoqCiAqIE5vIENTSSBzdHJ1Y3R1cmUgYXZhaWxhYmxlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5PQ1NJJywgNTApOwoKLyoqCiAqIExldmVsIDIgaGFsdGVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUwySExUJywgNTEpOwoKLyoqCiAqIEludmFsaWQgZXhjaGFuZ2UuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FQkFERScsIDUyKTsKCi8qKgogKiBJbnZhbGlkIHJlcXVlc3QgZGVzY3JpcHRvci4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VCQURSJywgNTMpOwoKLyoqCiAqIEV4Y2hhbmdlIGZ1bGwuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FWEZVTEwnLCA1NCk7CgovKioKICogTm8gYW5vZGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FTk9BTk8nLCA1NSk7CgovKioKICogSW52YWxpZCByZXF1ZXN0IGNvZGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FQkFEUlFDJywgNTYpOwoKLyoqCiAqIEludmFsaWQgc2xvdC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VCQURTTFQnLCA1Nyk7CgovKioKICogRGV2aWNlIG5vdCBhIHN0cmVhbS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VOT1NUUicsIDYwKTsKCi8qKgogKiBObyBkYXRhIGF2YWlsYWJsZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VOT0RBVEEnLCA2MSk7CgovKioKICogVGltZXIgZXhwaXJlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VUSU1FJywgNjIpOwoKLyoqCiAqIE91dCBvZiBzdHJlYW1zIHJlc291cmNlcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VOT1NSJywgNjMpOwoKLyoqCiAqIE1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5PTkVUJywgNjQpOwoKLyoqCiAqIE9iamVjdCBpcyByZW1vdGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FUkVNT1RFJywgNjYpOwoKLyoqCiAqIExpbmsgaGFzIGJlZW4gc2V2ZXJlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VOT0xJTksnLCA2Nyk7CgovKioKICogQWR2ZXJ0aXNlIGVycm9yLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUFEVicsIDY4KTsKCi8qKgogKiBTcm1vdW50IGVycm9yLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRVNSTU5UJywgNjkpOwoKLyoqCiAqIENvbW11bmljYXRpb24gZXJyb3Igb24gc2VuZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VDT01NJywgNzApOwoKLyoqCiAqIFByb3RvY29sIGVycm9yLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRVBST1RPJywgNzEpOwoKLyoqCiAqIE11bHRpaG9wIGF0dGVtcHRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VNVUxUSUhPUCcsIDcyKTsKCi8qKgogKiBOb3QgYSBkYXRhIG1lc3NhZ2UuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FQkFETVNHJywgNzQpOwoKLyoqCiAqIE5hbWUgbm90IHVuaXF1ZSBvbiBuZXR3b3JrLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5PVFVOSVEnLCA3Nik7CgovKioKICogRmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VCQURGRCcsIDc3KTsKCi8qKgogKiBSZW1vdGUgYWRkcmVzcyBjaGFuZ2VkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRVJFTUNIRycsIDc4KTsKCi8qKgogKiBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCBzaG91bGQgYmUgcmVzdGFydGVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRVJFU1RBUlQnLCA4NSk7CgovKioKICogU3RyZWFtcyBwaXBlIGVycm9yLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRVNUUlBJUEUnLCA4Nik7CgovKioKICogVG9vIG1hbnkgdXNlcnMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FVVNFUlMnLCA4Nyk7CgovKioKICogU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5PVFNPQ0snLCA4OCk7CgovKioKICogRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VERVNUQUREUlJFUScsIDg5KTsKCi8qKgogKiBNZXNzYWdlIHRvbyBsb25nLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU1TR1NJWkUnLCA5MCk7CgovKioKICogUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRVBST1RPVFlQRScsIDkxKTsKZGVmaW5lKCdTT0NLRVRfRU5PUFJPVE9PUFQnLCA5Mik7CgovKioKICogUHJvdG9jb2wgbm90IHN1cHBvcnRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VQUk9UT05PU1VQUE9SVCcsIDkzKTsKCi8qKgogKiBTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRVNPQ0tUTk9TVVBQT1JUJywgOTQpOwoKLyoqCiAqIE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHRyYW5zcG9ydCBlbmRwb2ludC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VPUE5PVFNVUFAnLCA5NSk7CgovKioKICogUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FUEZOT1NVUFBPUlQnLCA5Nik7CgovKioKICogQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VBRk5PU1VQUE9SVCcsIDk3KTsKZGVmaW5lKCdTT0NLRVRfRUFERFJJTlVTRScsIDk4KTsKCi8qKgogKiBDYW5ub3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUFERFJOT1RBVkFJTCcsIDk5KTsKCi8qKgogKiBOZXR3b3JrIGlzIGRvd24uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FTkVURE9XTicsIDEwMCk7CgovKioKICogTmV0d29yayBpcyB1bnJlYWNoYWJsZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VORVRVTlJFQUNIJywgMTAxKTsKCi8qKgogKiBOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBiZWNhdXNlIG9mIHJlc2V0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5FVFJFU0VUJywgMTAyKTsKCi8qKgogKiBTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VDT05OQUJPUlRFRCcsIDEwMyk7CgovKioKICogQ29ubmVjdGlvbiByZXNldCBieSBwZWVyLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUNPTk5SRVNFVCcsIDEwNCk7CgovKioKICogTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VOT0JVRlMnLCAxMDUpOwoKLyoqCiAqIFRyYW5zcG9ydCBlbmRwb2ludCBpcyBhbHJlYWR5IGNvbm5lY3RlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VJU0NPTk4nLCAxMDYpOwoKLyoqCiAqIFRyYW5zcG9ydCBlbmRwb2ludCBpcyBub3QgY29ubmVjdGVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5PVENPTk4nLCAxMDcpOwoKLyoqCiAqIENhbm5vdCBzZW5kIGFmdGVyIHRyYW5zcG9ydCBlbmRwb2ludCBzaHV0ZG93bi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VTSFVURE9XTicsIDEwOCk7CgovKioKICogVG9vIG1hbnkgcmVmZXJlbmNlczogY2Fubm90IHNwbGljZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VUT09NQU5ZUkVGUycsIDEwOSk7CgovKioKICogQ29ubmVjdGlvbiB0aW1lZCBvdXQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc29ja2V0cy5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPQ0tFVF9FVElNRURPVVQnLCAxMTApOwoKLyoqCiAqIENvbm5lY3Rpb24gcmVmdXNlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VDT05OUkVGVVNFRCcsIDExMSk7CgovKioKICogSG9zdCBpcyBkb3duLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUhPU1RET1dOJywgMTEyKTsKCi8qKgogKiBObyByb3V0ZSB0byBob3N0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUhPU1RVTlJFQUNIJywgMTEzKTsKCi8qKgogKiBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VBTFJFQURZJywgMTE0KTsKCi8qKgogKiBPcGVyYXRpb24gbm93IGluIHByb2dyZXNzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUlOUFJPR1JFU1MnLCAxMTUpOwoKLyoqCiAqIElzIGEgbmFtZWQgdHlwZSBmaWxlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRUlTTkFNJywgMTIwKTsKCi8qKgogKiBSZW1vdGUgSS9PIGVycm9yLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRVJFTU9URUlPJywgMTIxKTsKCi8qKgogKiBRdW90YSBleGNlZWRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VEUVVPVCcsIDEyMik7CgovKioKICogTm8gbWVkaXVtIGZvdW5kLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NvY2tldHMuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT0NLRVRfRU5PTUVESVVNJywgMTIzKTsKCi8qKgogKiBXcm9uZyBtZWRpdW0gdHlwZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zb2NrZXRzLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU09DS0VUX0VNRURJVU1UWVBFJywgMTI0KTsKZGVmaW5lKCdJUFBST1RPX0lQJywgMCk7CmRlZmluZSgnSVBQUk9UT19JUFY2JywgNDEpOwpkZWZpbmUoJ1NPTF9UQ1AnLCA2KTsKZGVmaW5lKCdTT0xfVURQJywgMTcpOwpkZWZpbmUoJ0lQVjZfVU5JQ0FTVF9IT1BTJywgMTYpOwpkZWZpbmUoJ0lQVjZfUkVDVlBLVElORk8nLCA0OSk7CmRlZmluZSgnSVBWNl9QS1RJTkZPJywgNTApOwpkZWZpbmUoJ0lQVjZfUkVDVkhPUExJTUlUJywgNTEpOwpkZWZpbmUoJ0lQVjZfSE9QTElNSVQnLCA1Mik7CmRlZmluZSgnSVBWNl9SRUNWVENMQVNTJywgNjYpOwpkZWZpbmUoJ0lQVjZfVENMQVNTJywgNjcpOwpkZWZpbmUoJ1NDTV9SSUdIVFMnLCAxKTsKZGVmaW5lKCdTQ01fQ1JFREVOVElBTFMnLCAyKTsKZGVmaW5lKCdTT19QQVNTQ1JFRCcsIDE2KTsKCmRlZmluZSgnU09DS0VUX0VQUk9DTElNJywgMTAwNjcpOwpkZWZpbmUoJ1NPQ0tFVF9FU1RBTEUnLCAxMDA3MCk7CmRlZmluZSgnU09DS0VUX0VESVNDT04nLCAxMDEwMSk7CmRlZmluZSgnU09DS0VUX1NZU05PVFJFQURZJywgMTAwOTEpOwpkZWZpbmUoJ1NPQ0tFVF9WRVJOT1RTVVBQT1JURUQnLCAxMDA5Mik7CmRlZmluZSgnU09DS0VUX05PVElOSVRJQUxJU0VEJywgMTAwOTMpOwpkZWZpbmUoJ1NPQ0tFVF9IT1NUX05PVF9GT1VORCcsIDExMDAxKTsKZGVmaW5lKCdTT0NLRVRfVFJZX0FHQUlOJywgMTEwMDIpOwpkZWZpbmUoJ1NPQ0tFVF9OT19SRUNPVkVSWScsIDExMDAzKTsKZGVmaW5lKCdTT0NLRVRfTk9fREFUQScsIDExMDA0KTsKZGVmaW5lKCdTT0NLRVRfTk9fQUREUkVTUycsIDExMDA0KTsKCmRlZmluZSgnQUlfUEFTU0lWRScsIDEpOwpkZWZpbmUoJ0FJX0NBTk9OTkFNRScsIDIpOwpkZWZpbmUoJ0FJX05VTUVSSUNIT1NUJywgNCk7CmRlZmluZSgnQUlfQUREUkNPTkZJRycsIDMyKTsKZGVmaW5lKCdBSV9OVU1FUklDU0VSVicsIDEwMjQpOwpkZWZpbmUoJ0FJX1Y0TUFQUEVEJywgOCk7CmRlZmluZSgnQUlfQUxMJywgMTYpOwoKLyoqCiAqIEBzaW5jZSA4LjEKICovCmRlZmluZSgnVENQX0RFRkVSX0FDQ0VQVCcsIDkpOwoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmRlZmluZSgnU09fSU5DT01JTkdfQ1BVJywgNDkpOwoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmRlZmluZSgnU09fTUVNSU5GTycsIDU1KTsKCi8qKgogKiBAc2luY2UgOC4yCiAqLwpkZWZpbmUoJ1NPX0JQRl9FWFRFTlNJT05TJywgNDgpOwoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmRlZmluZSgnU0tGX0FEX09GRicsIC00MDk2KTsKCi8qKgogKiBAc2luY2UgOC4yCiAqLwpkZWZpbmUoJ1NLRl9BRF9QUk9UT0NPTCcsIDApOwoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmRlZmluZSgnU0tGX0FEX1BLVFRZUEUnLCA0KTsKCi8qKgogKiBAc2luY2UgOC4yCiAqLwpkZWZpbmUoJ1NLRl9BRF9JRklOREVYJywgOCk7CgovKioKICogQHNpbmNlIDguMgogKi8KZGVmaW5lKCdTS0ZfQURfTkxBVFRSJywgMTIpOwoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmRlZmluZSgnU0tGX0FEX05MQVRUUl9ORVNUJywgMTYpOwoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmRlZmluZSgnU0tGX0FEX01BUksnLCAyMCk7CgovKioKICogQHNpbmNlIDguMgogKi8KZGVmaW5lKCdTS0ZfQURfUVVFVUUnLCAyNCk7CgovKioKICogQHNpbmNlIDguMgogKi8KZGVmaW5lKCdTS0ZfQURfSEFUWVBFJywgMjgpOwoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmRlZmluZSgnU0tGX0FEX1JYSEFTSCcsIDMyKTsKCi8qKgogKiBAc2luY2UgOC4yCiAqLwpkZWZpbmUoJ1NLRl9BRF9DUFUnLCAzNik7CgovKioKICogQHNpbmNlIDguMgogKi8KZGVmaW5lKCdTS0ZfQURfQUxVX1hPUl9YJywgNDApOwoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmRlZmluZSgnU0tGX0FEX1ZMQU5fVEFHJywgNDQpOwoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmRlZmluZSgnU0tGX0FEX1ZMQU5fVEFHX1BSRVNFTlQnLCA0OCk7CgovKioKICogQHNpbmNlIDguMgogKi8KZGVmaW5lKCdTS0ZfQURfUEFZX09GRlNFVCcsIDUyKTsKCi8qKgogKiBAc2luY2UgOC4yCiAqLwpkZWZpbmUoJ1NLRl9BRF9SQU5ET00nLCA1Nik7CgovKioKICogQHNpbmNlIDguMgogKi8KZGVmaW5lKCdTS0ZfQURfVkxBTl9UUElEJywgNjApOwoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmRlZmluZSgnU0tGX0FEX01BWCcsIDY0KTsKCi8qKgogKiBAc2luY2UgOC4yCiAqLwpkZWZpbmUoJ1RDUF9DT05HRVNUSU9OJywgMTMpOwoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmRlZmluZSgnVENQX05PVFNFTlRfTE9XQVQnLCAyNSk7CgovKioKICogQHNpbmNlIDguMgogKi8KZGVmaW5lKCdUQ1BfS0VFUElETEUnLCA0KTsKCi8qKgogKiBAc2luY2UgOC4yCiAqLwpkZWZpbmUoJ1RDUF9LRUVQSU5UVkwnLCA1KTsKCi8qKgogKiBAc2luY2UgOC4yCiAqLwpkZWZpbmUoJ1RDUF9LRUVQQ05UJywgNik7CgovKioKICogQHNpbmNlIDguMwogKi8KZGVmaW5lKCdUQ1BfUVVJQ0tBQ0snLCAxMik7CgovKioKICogQHNpbmNlIDguMwogKi8KZGVmaW5lKCdUQ1BfUkVQQUlSJywgMTkpOwoKLyoqCiAqIFNvY2tldF9zZXRfb3B0aW9uIGZvciB0aGUgc29ja2V0X3NlbmQqIGZ1bmN0aW9ucy4KICogSXQgYXZvaWRzIGNvcHkgYi93IHVzZXJsYW5kIGFuZCBrZXJuZWwgZm9yIGJvdGggVENQIGFuZCBVRFAgcHJvdG9jb2xzLgogKiBAc2luY2UgOC4yCiAqLwpkZWZpbmUoJ1NPX1pFUk9DT1BZJywgNjApOwoKLyoqCiAqIFNvY2tldF9zZXRfb3B0aW9uIGZvciB0aGUgc29ja2V0X3NlbmQqIGZ1bmN0aW9ucy4KICogSXQgYXZvaWRzIGNvcHkgYi93IHVzZXJsYW5kIGFuZCBrZXJuZWwgZm9yIGJvdGggVENQIGFuZCBVRFAgcHJvdG9jb2xzLgogKiBAc2luY2UgOC4yCiAqLwpkZWZpbmUoJ01TR19aRVJPQ09QWScsIDY3MTA4ODY0KTsKLyoqCiAqIEBzaW5jZSA4LjQKICovCmRlZmluZSgnU09DS19EQ0NQJywgNik7Ci8qKgogKiBAc2luY2UgOC40CiAqLwpkZWZpbmUoJ1RDUF9TWU5DTlQnLCA3KTsKCi8qKgogKiBAc2luY2UgOC40CiAqLwpkZWZpbmUoJ1NPQ0tfQ0xPRVhFQycsIDUyNDI4OCk7CgovKioKICogQHNpbmNlIDguNAogKi8KZGVmaW5lKCdTT0NLX05PTkJMT0NLJywgMjA0OCk7CgovKioKICogQHNpbmNlIDguNAogKi8KZGVmaW5lKCdTT19CSU5EVE9JRklOREVYJywgNjIpOwovKioKICogQHNpbmNlIDguMAogKi8KZmluYWwgY2xhc3MgU29ja2V0CnsKICAgIC8qKgogICAgICogQ2Fubm90IGRpcmVjdGx5IGNvbnN0cnVjdCBTb2NrZXQsIHVzZSBzb2NrZXRfY3JlYXRlKCkgaW5zdGVhZAogICAgICogQHNlZSBzb2NrZXRfY3JlYXRlKCkKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9Cn0KCi8qKgogKiBAc2luY2UgOC4wCiAqLwpmaW5hbCBjbGFzcyBBZGRyZXNzSW5mbwp7CiAgICAvKioKICAgICAqIENhbm5vdCBkaXJlY3RseSBjb25zdHJ1Y3QgQWRkcmVzc0luZm8sIHVzZSBzb2NrZXRfYWRkcmluZm9fbG9va3VwKCkgaW5zdGVhZAogICAgICogQHNlZSBzb2NrZXRfYWRkcmluZm9fbG9va3VwKCkKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9Cn0KPD9waHAKCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cUHVyZTsKCi8qKgogKiBab29rZWVwZXIgY2xhc3MuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnpvb2tlZXBlci5waHAKICovCmNsYXNzIFpvb2tlZXBlcgp7CiAgICAvKiBjbGFzcyBjb25zdGFudHMgKi8KICAgIHB1YmxpYyBjb25zdCBQRVJNX1JFQUQgPSAxOwogICAgcHVibGljIGNvbnN0IFBFUk1fV1JJVEUgPSAyOwogICAgcHVibGljIGNvbnN0IFBFUk1fQ1JFQVRFID0gNDsKICAgIHB1YmxpYyBjb25zdCBQRVJNX0RFTEVURSA9IDg7CiAgICBwdWJsaWMgY29uc3QgUEVSTV9BRE1JTiA9IDE2OwogICAgcHVibGljIGNvbnN0IFBFUk1fQUxMID0gMzE7CiAgICBwdWJsaWMgY29uc3QgRVBIRU1FUkFMID0gMTsKICAgIHB1YmxpYyBjb25zdCBTRVFVRU5DRSA9IDI7CiAgICBwdWJsaWMgY29uc3QgRVhQSVJFRF9TRVNTSU9OX1NUQVRFID0gLTExMjsKICAgIHB1YmxpYyBjb25zdCBBVVRIX0ZBSUxFRF9TVEFURSA9IC0xMTM7CiAgICBwdWJsaWMgY29uc3QgQ09OTkVDVElOR19TVEFURSA9IDE7CiAgICBwdWJsaWMgY29uc3QgQVNTT0NJQVRJTkdfU1RBVEUgPSAyOwogICAgcHVibGljIGNvbnN0IENPTk5FQ1RFRF9TVEFURSA9IDM7CiAgICBwdWJsaWMgY29uc3QgTk9UQ09OTkVDVEVEX1NUQVRFID0gOTk5OwogICAgcHVibGljIGNvbnN0IENSRUFURURfRVZFTlQgPSAxOwogICAgcHVibGljIGNvbnN0IERFTEVURURfRVZFTlQgPSAyOwogICAgcHVibGljIGNvbnN0IENIQU5HRURfRVZFTlQgPSAzOwogICAgcHVibGljIGNvbnN0IENISUxEX0VWRU5UID0gNDsKICAgIHB1YmxpYyBjb25zdCBTRVNTSU9OX0VWRU5UID0gLTE7CiAgICBwdWJsaWMgY29uc3QgTk9UV0FUQ0hJTkdfRVZFTlQgPSAtMjsKICAgIHB1YmxpYyBjb25zdCBMT0dfTEVWRUxfRVJST1IgPSAxOwogICAgcHVibGljIGNvbnN0IExPR19MRVZFTF9XQVJOID0gMjsKICAgIHB1YmxpYyBjb25zdCBMT0dfTEVWRUxfSU5GTyA9IDM7CiAgICBwdWJsaWMgY29uc3QgTE9HX0xFVkVMX0RFQlVHID0gNDsKICAgIHB1YmxpYyBjb25zdCBTWVNURU1FUlJPUiA9IC0xOwogICAgcHVibGljIGNvbnN0IFJVTlRJTUVJTkNPTlNJU1RFTkNZID0gLTI7CiAgICBwdWJsaWMgY29uc3QgREFUQUlOQ09OU0lTVEVOQ1kgPSAtMzsKICAgIHB1YmxpYyBjb25zdCBDT05ORUNUSU9OTE9TUyA9IC00OwogICAgcHVibGljIGNvbnN0IE1BUlNIQUxMSU5HRVJST1IgPSAtNTsKICAgIHB1YmxpYyBjb25zdCBVTklNUExFTUVOVEVEID0gLTY7CiAgICBwdWJsaWMgY29uc3QgT1BFUkFUSU9OVElNRU9VVCA9IC03OwogICAgcHVibGljIGNvbnN0IEJBREFSR1VNRU5UUyA9IC04OwogICAgcHVibGljIGNvbnN0IElOVkFMSURTVEFURSA9IC05OwoKICAgIC8qKgogICAgICogQHNpbmNlIDMuNQogICAgICovCiAgICBwdWJsaWMgY29uc3QgTkVXQ09ORklHTk9RVU9SVU0gPSAtMTM7CgogICAgLyoqCiAgICAgKiBAc2luY2UgMy41CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUNPTkZJR0lOUFJPR1JFU1MgPSAtMTQ7CiAgICBwdWJsaWMgY29uc3QgT0sgPSAwOwogICAgcHVibGljIGNvbnN0IEFQSUVSUk9SID0gLTEwMDsKICAgIHB1YmxpYyBjb25zdCBOT05PREUgPSAtMTAxOwogICAgcHVibGljIGNvbnN0IE5PQVVUSCA9IC0xMDI7CiAgICBwdWJsaWMgY29uc3QgQkFEVkVSU0lPTiA9IC0xMDM7CiAgICBwdWJsaWMgY29uc3QgTk9DSElMRFJFTkZPUkVQSEVNRVJBTFMgPSAtMTA4OwogICAgcHVibGljIGNvbnN0IE5PREVFWElTVFMgPSAtMTEwOwogICAgcHVibGljIGNvbnN0IE5PVEVNUFRZID0gLTExMTsKICAgIHB1YmxpYyBjb25zdCBTRVNTSU9ORVhQSVJFRCA9IC0xMTI7CiAgICBwdWJsaWMgY29uc3QgSU5WQUxJRENBTExCQUNLID0gLTExMzsKICAgIHB1YmxpYyBjb25zdCBJTlZBTElEQUNMID0gLTExNDsKICAgIHB1YmxpYyBjb25zdCBBVVRIRkFJTEVEID0gLTExNTsKICAgIHB1YmxpYyBjb25zdCBDTE9TSU5HID0gLTExNjsKICAgIHB1YmxpYyBjb25zdCBOT1RISU5HID0gLTExNzsKICAgIHB1YmxpYyBjb25zdCBTRVNTSU9OTU9WRUQgPSAtMTE4OwoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgaGFuZGxlIHRvIHVzZWQgY29tbXVuaWNhdGUgd2l0aCB6b29rZWVwZXIuCiAgICAgKiBJZiB0aGUgaG9zdCBpcyBwcm92aWRlZCwgYXR0ZW1wdCB0byBjb25uZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkaG9zdAogICAgICogQHBhcmFtIGNhbGxhYmxlICR3YXRjaGVyX2NiCiAgICAgKiBAcGFyYW0gaW50ICAgICAgJHJlY3ZfdGltZW91dAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3pvb2tlZXBlci5jb25zdHJ1Y3QucGhwCiAgICAgKgogICAgICogQHRocm93cyBab29rZWVwZXJFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgWm9va2VlcGVyQ29ubmVjdGlvbkV4Y2VwdGlvbiB3aGVuIGhvc3QgaXMgcHJvdmlkZWQgYW5kIHdoZW4gZmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhlIGhvc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRob3N0ID0gJycsICR3YXRjaGVyX2NiID0gbnVsbCwgJHJlY3ZfdGltZW91dCA9IDEwMDAwKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgaGFuZGxlIHRvIHVzZWQgY29tbXVuaWNhdGUgd2l0aCB6b29rZWVwZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICRob3N0CiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJHdhdGNoZXJfY2IKICAgICAqIEBwYXJhbSBpbnQgICAgICAkcmVjdl90aW1lb3V0CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vem9va2VlcGVyLmNvbm5lY3QucGhwCiAgICAgKgogICAgICogQHRocm93cyBab29rZWVwZXJFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgWm9va2VlcGVyQ29ubmVjdGlvbkV4Y2VwdGlvbiB3aGVuIGZhaWxlZCB0byBjb25uZWN0IHRvIFpvb2tlZXBlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29ubmVjdCgkaG9zdCwgJHdhdGNoZXJfY2IgPSBudWxsLCAkcmVjdl90aW1lb3V0ID0gMTAwMDApIHt9CgogICAgLyoqCiAgICAgKiBDbG9zZSB0aGUgem9va2VlcGVyIGhhbmRsZSBhbmQgZnJlZSB1cCBhbnkgcmVzb3VyY2VzLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3pvb2tlZXBlci5jbG9zZS5waHAKICAgICAqCiAgICAgKiBAdGhyb3dzIFpvb2tlZXBlckV4Y2VwdGlvbgogICAgICogQHRocm93cyBab29rZWVwZXJDb25uZWN0aW9uRXhjZXB0aW9uIHdoZW4gY2xvc2luZyBhbiB1bmluaXRpYWxpemVkIGluc3RhbmNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBub2RlIHN5bmNocm9ub3VzbHkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSBhcnJheSAgJGFjbAogICAgICogQHBhcmFtIGludCAgICAkZmxhZ3MKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3pvb2tlZXBlci5jcmVhdGUucGhwCiAgICAgKgogICAgICogQHRocm93cyBab29rZWVwZXJFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgWm9va2VlcGVyTm9Ob2RlRXhjZXB0aW9uIHdoZW4gcGFyZW50IHBhdGggZG9lcyBub3QgZXhpc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZSgkcGF0aCwgJHZhbHVlLCAkYWNsLCAkZmxhZ3MgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogRGVsZXRlIGEgbm9kZSBpbiB6b29rZWVwZXIgc3luY2hyb25vdXNseS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAgICAgKiBAcGFyYW0gaW50ICAgICR2ZXJzaW9uCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vem9va2VlcGVyLmRlbGV0ZS5waHAKICAgICAqCiAgICAgKiBAdGhyb3dzIFpvb2tlZXBlckV4Y2VwdGlvbgogICAgICogQHRocm93cyBab29rZWVwZXJOb05vZGVFeGNlcHRpb24gd2hlbiBwYXRoIGRvZXMgbm90IGV4aXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGUoJHBhdGgsICR2ZXJzaW9uID0gLTEpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIG5vZGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHBhcmFtIGludCAgICAkdmVyc2lvbgogICAgICogQHBhcmFtIGFycmF5ICAmJHN0YXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96b29rZWVwZXIuc2V0LnBocAogICAgICoKICAgICAqIEB0aHJvd3MgWm9va2VlcGVyRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFpvb2tlZXBlck5vTm9kZUV4Y2VwdGlvbiB3aGVuIHBhdGggZG9lcyBub3QgZXhpc3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldCgkcGF0aCwgJGRhdGEsICR2ZXJzaW9uID0gLTEsICYkc3RhdCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIG5vZGUgc3luY2hyb25vdXNseS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJHBhdGgKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkd2F0Y2hlcl9jYgogICAgICogQHBhcmFtIGFycmF5ICAgICYkc3RhdAogICAgICogQHBhcmFtIGludCAgICAgICRtYXhfc2l6ZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vem9va2VlcGVyLmdldC5waHAKICAgICAqCiAgICAgKiBAdGhyb3dzIFpvb2tlZXBlckV4Y2VwdGlvbgogICAgICogQHRocm93cyBab29rZWVwZXJOb05vZGVFeGNlcHRpb24gd2hlbiBwYXRoIGRvZXMgbm90IGV4aXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoJHBhdGgsICR3YXRjaGVyX2NiID0gbnVsbCwgJiRzdGF0ID0gbnVsbCwgJG1heF9zaXplID0gMCkge30KCiAgICAvKioKICAgICAqIEdldCBjaGlsZHJlbiBkYXRhIG9mIGEgcGF0aC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJHBhdGgKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkd2F0Y2hlcl9jYgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8ZmFsc2UKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96b29rZWVwZXIuZ2V0Y2hpbGRyZW4ucGhwCiAgICAgKgogICAgICogQHRocm93cyBab29rZWVwZXJFeGNlcHRpb24gICAgICAgd2hlbiBjb25uZWN0aW9uIG5vdCBpbiBjb25uZWN0ZWQgc3RhdHVzCiAgICAgKiBAdGhyb3dzIFpvb2tlZXBlck5vTm9kZUV4Y2VwdGlvbiB3aGVuIHBhdGggZG9lcyBub3QgZXhpc3QKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENoaWxkcmVuKCRwYXRoLCAkd2F0Y2hlcl9jYiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgdGhlIGV4aXN0ZW5jZSBvZiBhIG5vZGUgaW4gem9va2VlcGVyIHN5bmNocm9ub3VzbHkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICRwYXRoCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJHdhdGNoZXJfY2IKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96b29rZWVwZXIuZXhpc3RzLnBocAogICAgICoKICAgICAqIEB0aHJvd3MgWm9va2VlcGVyRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGlzdHMoJHBhdGgsICR3YXRjaGVyX2NiID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGFjbCBhc3NvY2lhdGVkIHdpdGggYSBub2RlIHN5bmNocm9ub3VzbHkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96b29rZWVwZXIuZ2V0YWNsLnBocAogICAgICoKICAgICAqIEB0aHJvd3MgWm9va2VlcGVyRXhjZXB0aW9uIHdoZW4gY29ubmVjdGlvbiBub3QgaW4gY29ubmVjdGVkIHN0YXR1cwogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWNsKCRwYXRoKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgYWNsIGFzc29jaWF0ZWQgd2l0aCBhIG5vZGUgc3luY2hyb25vdXNseS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAgICAgKiBAcGFyYW0gaW50ICAgICR2ZXJzaW9uCiAgICAgKiBAcGFyYW0gYXJyYXkgICRhY2xzCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vem9va2VlcGVyLnNldGFjbC5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAdGhyb3dzIFpvb2tlZXBlckV4Y2VwdGlvbiB3aGVuIGNvbm5lY3Rpb24gbm90IGluIGNvbm5lY3RlZCBzdGF0dXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEFjbCgkcGF0aCwgJHZlcnNpb24sICRhY2xzKSB7fQoKICAgIC8qKgogICAgICogcmV0dXJuIHRoZSBjbGllbnQgc2Vzc2lvbiBpZCwgb25seSB2YWxpZCBpZiB0aGUgY29ubmVjdGlvbnMgaXMgY3VycmVudGx5IGNvbm5lY3RlZAogICAgICogKGllLiBsYXN0IHdhdGNoZXIgc3RhdGUgaXMgWk9PX0NPTk5FQ1RFRF9TVEFURSkuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96b29rZWVwZXIuZ2V0Y2xpZW50aWQucGhwCiAgICAgKgogICAgICogQHRocm93cyBab29rZWVwZXJFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgWm9va2VlcGVyQ29ubmVjdGlvbkV4Y2VwdGlvbiB3aGVuIGNvbm5lY3Rpb24gbm90IGluIGNvbm5lY3RlZCBzdGF0dXMKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENsaWVudElkKCkge30KCiAgICAvKioKICAgICAqIFNldCBhIHdhdGNoZXIgZnVuY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICR3YXRjaGVyX2NiCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vem9va2VlcGVyLnNldHdhdGNoZXIucGhwCiAgICAgKgogICAgICogQHRocm93cyBab29rZWVwZXJFeGNlcHRpb24KICAgICAqIEB0aHJvd3MgWm9va2VlcGVyQ29ubmVjdGlvbkV4Y2VwdGlvbiB3aGVuIGNvbm5lY3Rpb24gbm90IGluIGNvbm5lY3RlZCBzdGF0dXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFdhdGNoZXIoJHdhdGNoZXJfY2IpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHN0YXRlIG9mIHRoZSB6b29rZWVwZXIgY29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3pvb2tlZXBlci5nZXRzdGF0ZS5waHAKICAgICAqCiAgICAgKiBAdGhyb3dzIFpvb2tlZXBlckV4Y2VwdGlvbgogICAgICogQHRocm93cyBab29rZWVwZXJDb25uZWN0aW9uRXhjZXB0aW9uIHdoZW4gY29ubmVjdGlvbiBub3QgaW4gY29ubmVjdGVkIHN0YXR1cwogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSB0aW1lb3V0IGZvciB0aGlzIHNlc3Npb24sIG9ubHkgdmFsaWQgaWYgdGhlIGNvbm5lY3Rpb25zIGlzIGN1cnJlbnRseSBjb25uZWN0ZWQKICAgICAqIChpZS4gbGFzdCB3YXRjaGVyIHN0YXRlIGlzIFpPT19DT05ORUNURURfU1RBVEUpLiBUaGlzIHZhbHVlIG1heSBjaGFuZ2UgYWZ0ZXIgYSBzZXJ2ZXIgcmVjb25uZWN0LgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vem9va2VlcGVyLmdldHJlY3Z0aW1lb3V0LnBocAogICAgICoKICAgICAqIEB0aHJvd3MgWm9va2VlcGVyRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFpvb2tlZXBlckNvbm5lY3Rpb25FeGNlcHRpb24gd2hlbiBjb25uZWN0aW9uIG5vdCBpbiBjb25uZWN0ZWQgc3RhdHVzCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZWN2VGltZW91dCgpIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZ5IGFwcGxpY2F0aW9uIGNyZWRlbnRpYWxzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkc2NoZW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJGNlcnQKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY29tcGxldGlvbl9jYgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3pvb2tlZXBlci5hZGRhdXRoLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEB0aHJvd3MgWm9va2VlcGVyRXhjZXB0aW9uCiAgICAgKiBAdGhyb3dzIFpvb2tlZXBlckNvbm5lY3Rpb25FeGNlcHRpb24gd2hlbiBjb25uZWN0aW9uIG5vdCBpbiBjb25uZWN0ZWQgc3RhdHVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRBdXRoKCRzY2hlbWUsICRjZXJ0LCAkY29tcGxldGlvbl9jYiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgem9va2VlcGVyIGNvbm5lY3Rpb24gc3RhdGUgY2FuIGJlIHJlY292ZXJlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96b29rZWVwZXIuaXNyZWNvdmVyYWJsZS5waHAKICAgICAqCiAgICAgKiBAdGhyb3dzIFpvb2tlZXBlckV4Y2VwdGlvbgogICAgICogQHRocm93cyBab29rZWVwZXJDb25uZWN0aW9uRXhjZXB0aW9uIHdoZW4gY29ubmVjdGlvbiBub3QgaW4gY29ubmVjdGVkIHN0YXR1cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSZWNvdmVyYWJsZSgpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBzdHJlYW0gdG8gYmUgdXNlZCBieSB0aGUgbGlicmFyeSBmb3IgbG9nZ2luZy4KICAgICAqCiAgICAgKiBUT0RPOiBtaWdodCBiZSBhYmxlIHRvIHNldCBhIHN0cmVhbSBsaWtlIHBocDovL3N0ZGVyciBvciBzb21ldGhpbmcKICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJGZpbGUKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96b29rZWVwZXIuc2V0bG9nc3RyZWFtLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TG9nU3RyZWFtKCRmaWxlKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgZGVidWdnaW5nIGxldmVsIGZvciB0aGUgbGlicmFyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRsZXZlbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3pvb2tlZXBlci5zZXRkZWJ1Z2xldmVsLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldERlYnVnTGV2ZWwoJGxldmVsKSB7fQoKICAgIC8qKgogICAgICogRW5hYmxlL2Rpc2FibGUgcXVvcnVtIGVuZHBvaW50IG9yZGVyIHJhbmRvbWl6YXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHRydWVPckZhbHNlCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vem9va2VlcGVyLnNldGRldGVybWluaXN0aWNjb25ub3JkZXIucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0RGV0ZXJtaW5pc3RpY0Nvbm5PcmRlcigkdHJ1ZU9yRmFsc2UpIHt9Cn0KCmNsYXNzIFpvb2tlZXBlckV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQoKY2xhc3MgWm9va2VlcGVyT3BlcmF0aW9uVGltZW91dEV4Y2VwdGlvbiBleHRlbmRzIFpvb2tlZXBlckV4Y2VwdGlvbiB7fQoKY2xhc3MgWm9va2VlcGVyQ29ubmVjdGlvbkV4Y2VwdGlvbiBleHRlbmRzIFpvb2tlZXBlckV4Y2VwdGlvbiB7fQoKY2xhc3MgWm9va2VlcGVyTWFyc2hhbGxpbmdFeGNlcHRpb24gZXh0ZW5kcyBab29rZWVwZXJFeGNlcHRpb24ge30KCmNsYXNzIFpvb2tlZXBlckF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIGV4dGVuZHMgWm9va2VlcGVyRXhjZXB0aW9uIHt9CgpjbGFzcyBab29rZWVwZXJTZXNzaW9uRXhjZXB0aW9uIGV4dGVuZHMgWm9va2VlcGVyRXhjZXB0aW9uIHt9CgpjbGFzcyBab29rZWVwZXJOb05vZGVFeGNlcHRpb24gZXh0ZW5kcyBab29rZWVwZXJFeGNlcHRpb24ge30KPD9waHAKCi8vIFN0YXJ0IG9mIG15c3FsIHYuMS4wCi8vIEBkZXByZWNhdGVkIDUuNSBlbnRpcmUgZXh0ZW5zaW9uIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgbXlzcWxpCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cRGVwcmVjYXRlZDsKCi8qKgogKiBPcGVuIGEgY29ubmVjdGlvbiB0byBhIE15U1FMIFNlcnZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWNvbm5lY3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlciBbb3B0aW9uYWxdIDxwPgogKiBUaGUgTXlTUUwgc2VydmVyLiBJdCBjYW4gYWxzbyBpbmNsdWRlIGEgcG9ydCBudW1iZXIuIGUuZy4KICogImhvc3RuYW1lOnBvcnQiIG9yIGEgcGF0aCB0byBhIGxvY2FsIHNvY2tldCBlLmcuICI6L3BhdGgvdG8vc29ja2V0IiBmb3IKICogdGhlIGxvY2FsaG9zdC4KICogPC9wPgogKiA8cD4KICogSWYgdGhlIFBIUCBkaXJlY3RpdmUKICogbXlzcWwuZGVmYXVsdF9ob3N0IGlzIHVuZGVmaW5lZCAoZGVmYXVsdCksIHRoZW4gdGhlIGRlZmF1bHQKICogdmFsdWUgaXMgJ2xvY2FsaG9zdDozMzA2Jy4gSW4gImluaS5zcWwuc2FmZS1tb2RlIiwgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZAogKiBhbmQgdmFsdWUgJ2xvY2FsaG9zdDozMzA2JyBpcyBhbHdheXMgdXNlZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgdXNlcm5hbWUuIERlZmF1bHQgdmFsdWUgaXMgZGVmaW5lZCBieSBteXNxbC5kZWZhdWx0X3VzZXIuIEluCiAqICJpbmkuc3FsLnNhZmUtbW9kZSIsIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgYW5kIHRoZSBuYW1lIG9mIHRoZSB1c2VyIHRoYXQKICogb3ducyB0aGUgc2VydmVyIHByb2Nlc3MgaXMgdXNlZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBbb3B0aW9uYWxdIDxwPgogKiBUaGUgcGFzc3dvcmQuIERlZmF1bHQgdmFsdWUgaXMgZGVmaW5lZCBieSBteXNxbC5kZWZhdWx0X3Bhc3N3b3JkLiBJbgogKiAiaW5pLnNxbC5zYWZlLW1vZGUiLCB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGFuZCBlbXB0eSBwYXNzd29yZCBpcyB1c2VkLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRuZXdfbGluayBbb3B0aW9uYWxdIDxwPgogKiBJZiBhIHNlY29uZCBjYWxsIGlzIG1hZGUgdG8gPGI+bXlzcWxfY29ubmVjdDwvYj4KICogd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMsIG5vIG5ldyBsaW5rIHdpbGwgYmUgZXN0YWJsaXNoZWQsIGJ1dAogKiBpbnN0ZWFkLCB0aGUgbGluayBpZGVudGlmaWVyIG9mIHRoZSBhbHJlYWR5IG9wZW5lZCBsaW5rIHdpbGwgYmUKICogcmV0dXJuZWQuIFRoZSA8aT5uZXdfbGluazwvaT4gcGFyYW1ldGVyIG1vZGlmaWVzIHRoaXMKICogYmVoYXZpb3IgYW5kIG1ha2VzIDxiPm15c3FsX2Nvbm5lY3Q8L2I+IGFsd2F5cyBvcGVuCiAqIGEgbmV3IGxpbmssIGV2ZW4gaWYgPGI+bXlzcWxfY29ubmVjdDwvYj4gd2FzIGNhbGxlZAogKiBiZWZvcmUgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzLgogKiBJbiAiaW5pLnNxbC5zYWZlLW1vZGUiLCB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGNsaWVudF9mbGFncyBbb3B0aW9uYWxdIDxwPgogKiBUaGUgPGk+Y2xpZW50X2ZsYWdzPC9pPiBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24KICogb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudHM6CiAqIDEyOCAoZW5hYmxlIExPQUQgREFUQSBMT0NBTCBoYW5kbGluZyksCiAqIDxiPk1ZU1FMX0NMSUVOVF9TU0w8L2I+LAogKiA8Yj5NWVNRTF9DTElFTlRfQ09NUFJFU1M8L2I+LAogKiA8Yj5NWVNRTF9DTElFTlRfSUdOT1JFX1NQQUNFPC9iPiBvcgogKiA8Yj5NWVNRTF9DTElFTlRfSU5URVJBQ1RJVkU8L2I+LgogKiBSZWFkIHRoZSBzZWN0aW9uIGFib3V0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgogKiBJbiAiaW5pLnNxbC5zYWZlLW1vZGUiLCB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgYSBNeVNRTCBsaW5rIGlkZW50aWZpZXIgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9jb25uZWN0KCRzZXJ2ZXIgPSAnaW5pX2dldCgibXlzcWwuZGVmYXVsdF9ob3N0IiknLCAkdXNlcm5hbWUgPSAnaW5pX2dldCgibXlzcWwuZGVmYXVsdF91c2VyIiknLCAkcGFzc3dvcmQgPSAnaW5pX2dldCgibXlzcWwuZGVmYXVsdF9wYXNzd29yZCIpJywgJG5ld19saW5rID0gZmFsc2UsICRjbGllbnRfZmxhZ3MgPSAwKSB7fQoKLyoqCiAqIE9wZW4gYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gdG8gYSBNeVNRTCBzZXJ2ZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5teXNxbC1wY29ubmVjdC5waHAKICogQHBhcmFtIHN0cmluZyAkc2VydmVyIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBNeVNRTCBzZXJ2ZXIuIEl0IGNhbiBhbHNvIGluY2x1ZGUgYSBwb3J0IG51bWJlci4gZS5nLgogKiAiaG9zdG5hbWU6cG9ydCIgb3IgYSBwYXRoIHRvIGEgbG9jYWwgc29ja2V0IGUuZy4gIjovcGF0aC90by9zb2NrZXQiIGZvcgogKiB0aGUgbG9jYWxob3N0LgogKiA8L3A+CiAqIDxwPgogKiBJZiB0aGUgUEhQIGRpcmVjdGl2ZQogKiBteXNxbC5kZWZhdWx0X2hvc3QgaXMgdW5kZWZpbmVkIChkZWZhdWx0KSwgdGhlbiB0aGUgZGVmYXVsdAogKiB2YWx1ZSBpcyAnbG9jYWxob3N0OjMzMDYnCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgW29wdGlvbmFsXSA8cD4KICogVGhlIHVzZXJuYW1lLiBEZWZhdWx0IHZhbHVlIGlzIHRoZSBuYW1lIG9mIHRoZSB1c2VyIHRoYXQgb3ducyB0aGUKICogc2VydmVyIHByb2Nlc3MuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQgW29wdGlvbmFsXSA8cD4KICogVGhlIHBhc3N3b3JkLiBEZWZhdWx0IHZhbHVlIGlzIGFuIGVtcHR5IHBhc3N3b3JkLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGNsaWVudF9mbGFncyBbb3B0aW9uYWxdIDxwPgogKiBUaGUgPGk+Y2xpZW50X2ZsYWdzPC9pPiBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24KICogb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudHM6CiAqIDEyOCAoZW5hYmxlIExPQUQgREFUQSBMT0NBTCBoYW5kbGluZyksCiAqIDxiPk1ZU1FMX0NMSUVOVF9TU0w8L2I+LAogKiA8Yj5NWVNRTF9DTElFTlRfQ09NUFJFU1M8L2I+LAogKiA8Yj5NWVNRTF9DTElFTlRfSUdOT1JFX1NQQUNFPC9iPiBvcgogKiA8Yj5NWVNRTF9DTElFTlRfSU5URVJBQ1RJVkU8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgYSBNeVNRTCBwZXJzaXN0ZW50IGxpbmsgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbgogKiBmYWlsdXJlLgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9wY29ubmVjdCgkc2VydmVyID0gJ2luaV9nZXQoIm15c3FsLmRlZmF1bHRfaG9zdCIpJywgJHVzZXJuYW1lID0gJ2luaV9nZXQoIm15c3FsLmRlZmF1bHRfdXNlciIpJywgJHBhc3N3b3JkID0gJ2luaV9nZXQoIm15c3FsLmRlZmF1bHRfcGFzc3dvcmQiKScsICRjbGllbnRfZmxhZ3MgPSBudWxsKSB7fQoKLyoqCiAqIENsb3NlIE15U1FMIGNvbm5lY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5teXNxbC1jbG9zZS5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2Nsb3NlKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIFNlbGVjdCBhIE15U1FMIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtc2VsZWN0LWRiLnBocAogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lIDxwPgogKiBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgdGhhdCBpcyB0byBiZSBzZWxlY3RlZC4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfc2VsZWN0X2RiKCRkYXRhYmFzZV9uYW1lLCAkbGlua19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBTZW5kIGEgTXlTUUwgcXVlcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5teXNxbC1xdWVyeS5waHAKICogQHBhcmFtIHN0cmluZyAkcXVlcnkgPHA+CiAqIEFuIFNRTCBxdWVyeQogKiA8L3A+CiAqIDxwPgogKiBUaGUgcXVlcnkgc3RyaW5nIHNob3VsZCBub3QgZW5kIHdpdGggYSBzZW1pY29sb24uCiAqIERhdGEgaW5zaWRlIHRoZSBxdWVyeSBzaG91bGQgYmUgcHJvcGVybHkgZXNjYXBlZC4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBbb3B0aW9uYWxdCiAqIEByZXR1cm4gcmVzb3VyY2V8Ym9vbCBGb3IgU0VMRUNULCBTSE9XLCBERVNDUklCRSwgRVhQTEFJTiBhbmQgb3RoZXIgc3RhdGVtZW50cyByZXR1cm5pbmcgcmVzdWx0c2V0LAogKiA8Yj5teXNxbF9xdWVyeTwvYj4KICogcmV0dXJucyBhIHJlc291cmNlIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uCiAqIGVycm9yLgogKiA8L3A+CiAqIDxwPgogKiBGb3Igb3RoZXIgdHlwZSBvZiBTUUwgc3RhdGVtZW50cywgSU5TRVJULCBVUERBVEUsIERFTEVURSwgRFJPUCwgZXRjLAogKiA8Yj5teXNxbF9xdWVyeTwvYj4gcmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MKICogb3IgZmFsc2Ugb24gZXJyb3IuCiAqIDwvcD4KICogPHA+CiAqIFRoZSByZXR1cm5lZCByZXN1bHQgcmVzb3VyY2Ugc2hvdWxkIGJlIHBhc3NlZCB0bwogKiA8Yj5teXNxbF9mZXRjaF9hcnJheTwvYj4sIGFuZCBvdGhlcgogKiBmdW5jdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCByZXN1bHQgdGFibGVzLCB0byBhY2Nlc3MgdGhlIHJldHVybmVkIGRhdGEuCiAqIDwvcD4KICogPHA+CiAqIFVzZSA8Yj5teXNxbF9udW1fcm93czwvYj4gdG8gZmluZCBvdXQgaG93IG1hbnkgcm93cwogKiB3ZXJlIHJldHVybmVkIGZvciBhIFNFTEVDVCBzdGF0ZW1lbnQgb3IKICogPGI+bXlzcWxfYWZmZWN0ZWRfcm93czwvYj4gdG8gZmluZCBvdXQgaG93IG1hbnkKICogcm93cyB3ZXJlIGFmZmVjdGVkIGJ5IGEgREVMRVRFLCBJTlNFUlQsIFJFUExBQ0UsIG9yIFVQREFURQogKiBzdGF0ZW1lbnQuCiAqIDwvcD4KICogPHA+CiAqIDxiPm15c3FsX3F1ZXJ5PC9iPiB3aWxsIGFsc28gZmFpbCBhbmQgcmV0dXJuIGZhbHNlCiAqIGlmIHRoZSB1c2VyIGRvZXMgbm90IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIHRhYmxlKHMpIHJlZmVyZW5jZWQgYnkKICogdGhlIHF1ZXJ5LgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9xdWVyeSgkcXVlcnksICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIEBkZXByZWNhdGVkIDUuNQogKiBTZW5kIGFuIFNRTCBxdWVyeSB0byBNeVNRTCB3aXRob3V0IGZldGNoaW5nIGFuZCBidWZmZXJpbmcgdGhlIHJlc3VsdCByb3dzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLXVuYnVmZmVyZWQtcXVlcnkucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IDxwPgogKiBUaGUgU1FMIHF1ZXJ5IHRvIGV4ZWN1dGUuCiAqIDwvcD4KICogPHA+CiAqIERhdGEgaW5zaWRlIHRoZSBxdWVyeSBzaG91bGQgYmUgcHJvcGVybHkgZXNjYXBlZC4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBbb3B0aW9uYWxdCiAqIEByZXR1cm4gcmVzb3VyY2V8Ym9vbCBGb3IgU0VMRUNULCBTSE9XLCBERVNDUklCRSBvciBFWFBMQUlOIHN0YXRlbWVudHMsCiAqIDxiPm15c3FsX3VuYnVmZmVyZWRfcXVlcnk8L2I+CiAqIHJldHVybnMgYSByZXNvdXJjZSBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbgogKiBlcnJvci4KICogPC9wPgogKiA8cD4KICogRm9yIG90aGVyIHR5cGUgb2YgU1FMIHN0YXRlbWVudHMsIFVQREFURSwgREVMRVRFLCBEUk9QLCBldGMsCiAqIDxiPm15c3FsX3VuYnVmZmVyZWRfcXVlcnk8L2I+IHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzCiAqIG9yIGZhbHNlIG9uIGVycm9yLgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF91bmJ1ZmZlcmVkX3F1ZXJ5KCRxdWVyeSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogU2VsZWN0cyBhIGRhdGFiYXNlIGFuZCBleGVjdXRlcyBhIHF1ZXJ5IG9uIGl0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtZGItcXVlcnkucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGFiYXNlIDxwPgogKiBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgdGhhdCB3aWxsIGJlIHNlbGVjdGVkLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IDxwPgogKiBUaGUgTXlTUUwgcXVlcnkuCiAqIDwvcD4KICogPHA+CiAqIERhdGEgaW5zaWRlIHRoZSBxdWVyeSBzaG91bGQgYmUgcHJvcGVybHkgZXNjYXBlZC4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBbb3B0aW9uYWxdCiAqIEByZXR1cm4gcmVzb3VyY2V8Ym9vbCBhIHBvc2l0aXZlIE15U1FMIHJlc3VsdCByZXNvdXJjZSB0byB0aGUgcXVlcnkgcmVzdWx0LAogKiBvciBmYWxzZSBvbiBlcnJvci4gVGhlIGZ1bmN0aW9uIGFsc28gcmV0dXJucyB0cnVlL2ZhbHNlIGZvcgogKiBJTlNFUlQvVVBEQVRFL0RFTEVURQogKiBxdWVyaWVzIHRvIGluZGljYXRlIHN1Y2Nlc3MvZmFpbHVyZS4KICogQHJlbW92ZWQgNy4wCiAqIEBzZWUgbXlzcWxfc2VsZWN0X2RiKCkKICogQHNlZSBteXNxbF9xdWVyeSgpCiAqLwojW0RlcHJlY2F0ZWQoJ1VzZSBteXNxbF9zZWxlY3RfZGIoKSBhbmQgbXlzcWxfcXVlcnkoKSBpbnN0ZWFkJywgc2luY2U6ICc1LjMnKV0KZnVuY3Rpb24gbXlzcWxfZGJfcXVlcnkoJGRhdGFiYXNlLCAkcXVlcnksICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIExpc3QgZGF0YWJhc2VzIGF2YWlsYWJsZSBvbiBhIE15U1FMIHNlcnZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWxpc3QtZGJzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBbb3B0aW9uYWxdCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgYSByZXN1bHQgcG9pbnRlciByZXNvdXJjZSBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbgogKiBmYWlsdXJlLiBVc2UgdGhlIDxiPm15c3FsX3RhYmxlbmFtZTwvYj4gZnVuY3Rpb24gdG8gdHJhdmVyc2UKICogdGhpcyByZXN1bHQgcG9pbnRlciwgb3IgYW55IGZ1bmN0aW9uIGZvciByZXN1bHQgdGFibGVzLCBzdWNoIGFzCiAqIDxiPm15c3FsX2ZldGNoX2FycmF5PC9iPi4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjQnKV0KZnVuY3Rpb24gbXlzcWxfbGlzdF9kYnMoJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogTGlzdCB0YWJsZXMgaW4gYSBNeVNRTCBkYXRhYmFzZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWxpc3QtdGFibGVzLnBocAogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZSA8cD4KICogVGhlIG5hbWUgb2YgdGhlIGRhdGFiYXNlCiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIEEgcmVzdWx0IHBvaW50ZXIgcmVzb3VyY2Ugb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKiA8cD4KICogVXNlIHRoZSA8Yj5teXNxbF90YWJsZW5hbWU8L2I+IGZ1bmN0aW9uIHRvCiAqIHRyYXZlcnNlIHRoaXMgcmVzdWx0IHBvaW50ZXIsIG9yIGFueSBmdW5jdGlvbiBmb3IgcmVzdWx0IHRhYmxlcywKICogc3VjaCBhcyA8Yj5teXNxbF9mZXRjaF9hcnJheTwvYj4uCiAqIDwvcD4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjMnKV0KZnVuY3Rpb24gbXlzcWxfbGlzdF90YWJsZXMoJGRhdGFiYXNlLCAkbGlua19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBMaXN0IE15U1FMIHRhYmxlIGZpZWxkcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWxpc3QtZmllbGRzLnBocAogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lIDxwPgogKiBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgdGhhdCdzIGJlaW5nIHF1ZXJpZWQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdGFibGVfbmFtZSA8cD4KICogVGhlIG5hbWUgb2YgdGhlIHRhYmxlIHRoYXQncyBiZWluZyBxdWVyaWVkLgogKiA8L3A+CiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIHJlc3VsdCBwb2ludGVyIHJlc291cmNlIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uCiAqIGZhaWx1cmUuCiAqIDwvcD4KICogPHA+CiAqIFRoZSByZXR1cm5lZCByZXN1bHQgY2FuIGJlIHVzZWQgd2l0aCA8Yj5teXNxbF9maWVsZF9mbGFnczwvYj4sCiAqIDxiPm15c3FsX2ZpZWxkX2xlbjwvYj4sCiAqIDxiPm15c3FsX2ZpZWxkX25hbWU8L2I+CiAqIDxiPm15c3FsX2ZpZWxkX3R5cGU8L2I+LgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9saXN0X2ZpZWxkcygkZGF0YWJhc2VfbmFtZSwgJHRhYmxlX25hbWUsICRsaW5rX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIExpc3QgTXlTUUwgcHJvY2Vzc2VzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtbGlzdC1wcm9jZXNzZXMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIHJlc3VsdCBwb2ludGVyIHJlc291cmNlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfbGlzdF9wcm9jZXNzZXMoJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogUmV0dXJucyB0aGUgdGV4dCBvZiB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHByZXZpb3VzIE15U1FMIG9wZXJhdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWVycm9yLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBbb3B0aW9uYWxdCiAqIEByZXR1cm4gc3RyaW5nIHRoZSBlcnJvciB0ZXh0IGZyb20gdGhlIGxhc3QgTXlTUUwgZnVuY3Rpb24sIG9yCiAqICcnIChlbXB0eSBzdHJpbmcpIGlmIG5vIGVycm9yIG9jY3VycmVkLgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9lcnJvcigkbGlua19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBSZXR1cm5zIHRoZSBudW1lcmljYWwgdmFsdWUgb2YgdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSBwcmV2aW91cyBNeVNRTCBvcGVyYXRpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5teXNxbC1lcnJuby5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmV0dXJuIGludCB0aGUgZXJyb3IgbnVtYmVyIGZyb20gdGhlIGxhc3QgTXlTUUwgZnVuY3Rpb24sIG9yCiAqIDAgKHplcm8pIGlmIG5vIGVycm9yIG9jY3VycmVkLgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9lcnJubygkbGlua19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBHZXQgbnVtYmVyIG9mIGFmZmVjdGVkIHJvd3MgaW4gcHJldmlvdXMgTXlTUUwgb3BlcmF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtYWZmZWN0ZWQtcm93cy5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmV0dXJuIGludCB0aGUgbnVtYmVyIG9mIGFmZmVjdGVkIHJvd3Mgb24gc3VjY2VzcywgYW5kIC0xIGlmIHRoZSBsYXN0IHF1ZXJ5CiAqIGZhaWxlZC4KICogPC9wPgogKiA8cD4KICogSWYgdGhlIGxhc3QgcXVlcnkgd2FzIGEgREVMRVRFIHF1ZXJ5IHdpdGggbm8gV0hFUkUgY2xhdXNlLCBhbGwKICogb2YgdGhlIHJlY29yZHMgd2lsbCBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSB0YWJsZSBidXQgdGhpcwogKiBmdW5jdGlvbiB3aWxsIHJldHVybiB6ZXJvIHdpdGggTXlTUUwgdmVyc2lvbnMgcHJpb3IgdG8gNC4xLjIuCiAqIDwvcD4KICogPHA+CiAqIFdoZW4gdXNpbmcgVVBEQVRFLCBNeVNRTCB3aWxsIG5vdCB1cGRhdGUgY29sdW1ucyB3aGVyZSB0aGUgbmV3IHZhbHVlIGlzIHRoZQogKiBzYW1lIGFzIHRoZSBvbGQgdmFsdWUuIFRoaXMgY3JlYXRlcyB0aGUgcG9zc2liaWxpdHkgdGhhdAogKiA8Yj5teXNxbF9hZmZlY3RlZF9yb3dzPC9iPiBtYXkgbm90IGFjdHVhbGx5IGVxdWFsIHRoZSBudW1iZXIKICogb2Ygcm93cyBtYXRjaGVkLCBvbmx5IHRoZSBudW1iZXIgb2Ygcm93cyB0aGF0IHdlcmUgbGl0ZXJhbGx5IGFmZmVjdGVkIGJ5CiAqIHRoZSBxdWVyeS4KICogPC9wPgogKiA8cD4KICogVGhlIFJFUExBQ0Ugc3RhdGVtZW50IGZpcnN0IGRlbGV0ZXMgdGhlIHJlY29yZCB3aXRoIHRoZSBzYW1lIHByaW1hcnkga2V5CiAqIGFuZCB0aGVuIGluc2VydHMgdGhlIG5ldyByZWNvcmQuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mCiAqIGRlbGV0ZWQgcmVjb3JkcyBwbHVzIHRoZSBudW1iZXIgb2YgaW5zZXJ0ZWQgcmVjb3Jkcy4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfYWZmZWN0ZWRfcm93cygkbGlua19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBHZXQgdGhlIElEIGdlbmVyYXRlZCBpbiB0aGUgbGFzdCBxdWVyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWluc2VydC1pZC5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmV0dXJuIGludCBUaGUgSUQgZ2VuZXJhdGVkIGZvciBhbiBBVVRPX0lOQ1JFTUVOVCBjb2x1bW4gYnkgdGhlIHByZXZpb3VzCiAqIHF1ZXJ5IG9uIHN1Y2Nlc3MsIDAgaWYgdGhlIHByZXZpb3VzCiAqIHF1ZXJ5IGRvZXMgbm90IGdlbmVyYXRlIGFuIEFVVE9fSU5DUkVNRU5UIHZhbHVlLCBvciBmYWxzZSBpZgogKiBubyBNeVNRTCBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZC4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfaW5zZXJ0X2lkKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIEdldCByZXN1bHQgZGF0YQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLXJlc3VsdC5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQKICogQHBhcmFtIGludCAkcm93IDxwPgogKiBUaGUgcm93IG51bWJlciBmcm9tIHRoZSByZXN1bHQgdGhhdCdzIGJlaW5nIHJldHJpZXZlZC4gUm93IG51bWJlcnMKICogc3RhcnQgYXQgMC4KICogPC9wPgogKiBAcGFyYW0gbWl4ZWQgJGZpZWxkIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBuYW1lIG9yIG9mZnNldCBvZiB0aGUgZmllbGQgYmVpbmcgcmV0cmlldmVkLgogKiA8L3A+CiAqIDxwPgogKiBJdCBjYW4gYmUgdGhlIGZpZWxkJ3Mgb2Zmc2V0LCB0aGUgZmllbGQncyBuYW1lLCBvciB0aGUgZmllbGQncyB0YWJsZQogKiBkb3QgZmllbGQgbmFtZSAodGFibGVuYW1lLmZpZWxkbmFtZSkuIElmIHRoZSBjb2x1bW4gbmFtZSBoYXMgYmVlbgogKiBhbGlhc2VkICgnc2VsZWN0IGZvbyBhcyBiYXIgZnJvbS4uLicpLCB1c2UgdGhlIGFsaWFzIGluc3RlYWQgb2YgdGhlCiAqIGNvbHVtbiBuYW1lLiBJZiB1bmRlZmluZWQsIHRoZSBmaXJzdCBmaWVsZCBpcyByZXRyaWV2ZWQuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgVGhlIGNvbnRlbnRzIG9mIG9uZSBjZWxsIGZyb20gYSBNeVNRTCByZXN1bHQgc2V0IG9uIHN1Y2Nlc3MsIG9yCiAqIGZhbHNlIG9uIGZhaWx1cmUuCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX3Jlc3VsdCgkcmVzdWx0LCAkcm93LCAkZmllbGQgPSAwKSB7fQoKLyoqCiAqIEdldCBudW1iZXIgb2Ygcm93cyBpbiByZXN1bHQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5teXNxbC1udW0tcm93cy5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+VGhlIHJlc3VsdCByZXNvdXJjZSB0aGF0IGlzIGJlaW5nIGV2YWx1YXRlZC4gVGhpcyByZXN1bHQgY29tZXMgZnJvbSBhIGNhbGwgdG8gbXlzcWxfcXVlcnkoKS48L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIDxwPlRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgcmVzdWx0IHNldCBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUuIDwvcD4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfbnVtX3Jvd3MoJHJlc3VsdCkge30KCi8qKgogKiBHZXQgbnVtYmVyIG9mIGZpZWxkcyBpbiByZXN1bHQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5teXNxbC1udW0tZmllbGRzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdAogKiBAcmV0dXJuIGludCB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpbiB0aGUgcmVzdWx0IHNldCByZXNvdXJjZSBvbgogKiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX251bV9maWVsZHMoJHJlc3VsdCkge30KCi8qKgogKiBHZXQgYSByZXN1bHQgcm93IGFzIGFuIGVudW1lcmF0ZWQgYXJyYXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5teXNxbC1mZXRjaC1yb3cucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEByZXR1cm4gYXJyYXkgYW4gbnVtZXJpY2FsIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZmV0Y2hlZCByb3csIG9yCiAqIGZhbHNlIGlmIHRoZXJlIGFyZSBubyBtb3JlIHJvd3MuCiAqIDwvcD4KICogPHA+CiAqIDxiPm15c3FsX2ZldGNoX3JvdzwvYj4gZmV0Y2hlcyBvbmUgcm93IG9mIGRhdGEgZnJvbQogKiB0aGUgcmVzdWx0IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHJlc3VsdCBpZGVudGlmaWVyLiBUaGUKICogcm93IGlzIHJldHVybmVkIGFzIGFuIGFycmF5LiBFYWNoIHJlc3VsdCBjb2x1bW4gaXMgc3RvcmVkIGluIGFuCiAqIGFycmF5IG9mZnNldCwgc3RhcnRpbmcgYXQgb2Zmc2V0IDAuCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2ZldGNoX3JvdygkcmVzdWx0KSB7fQoKLyoqCiAqIEZldGNoIGEgcmVzdWx0IHJvdyBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSwgYSBudW1lcmljIGFycmF5LCBvciBib3RoCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtZmV0Y2gtYXJyYXkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEBwYXJhbSBpbnQgJHJlc3VsdF90eXBlIFtvcHRpb25hbF0gPHA+CiAqIFRoZSB0eXBlIG9mIGFycmF5IHRoYXQgaXMgdG8gYmUgZmV0Y2hlZC4gSXQncyBhIGNvbnN0YW50IGFuZCBjYW4KICogdGFrZSB0aGUgZm9sbG93aW5nIHZhbHVlczogPGI+TVlTUUxfQVNTT0M8L2I+LAogKiA8Yj5NWVNRTF9OVU08L2I+LCBhbmQKICogPGI+TVlTUUxfQk9USDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGZldGNoZWQgcm93LCBvciBmYWxzZQogKiBpZiB0aGVyZSBhcmUgbm8gbW9yZSByb3dzLiBUaGUgdHlwZSBvZiByZXR1cm5lZCBhcnJheSBkZXBlbmRzIG9uCiAqIGhvdyA8aT5yZXN1bHRfdHlwZTwvaT4gaXMgZGVmaW5lZC4gQnkgdXNpbmcKICogPGI+TVlTUUxfQk9USDwvYj4gKGRlZmF1bHQpLCB5b3UnbGwgZ2V0IGFuIGFycmF5IHdpdGggYm90aAogKiBhc3NvY2lhdGl2ZSBhbmQgbnVtYmVyIGluZGljZXMuIFVzaW5nIDxiPk1ZU1FMX0FTU09DPC9iPiwgeW91CiAqIG9ubHkgZ2V0IGFzc29jaWF0aXZlIGluZGljZXMgKGFzIDxiPm15c3FsX2ZldGNoX2Fzc29jPC9iPgogKiB3b3JrcyksIHVzaW5nIDxiPk1ZU1FMX05VTTwvYj4sIHlvdSBvbmx5IGdldCBudW1iZXIgaW5kaWNlcwogKiAoYXMgPGI+bXlzcWxfZmV0Y2hfcm93PC9iPiB3b3JrcykuCiAqIDwvcD4KICogPHA+CiAqIElmIHR3byBvciBtb3JlIGNvbHVtbnMgb2YgdGhlIHJlc3VsdCBoYXZlIHRoZSBzYW1lIGZpZWxkIG5hbWVzLAogKiB0aGUgbGFzdCBjb2x1bW4gd2lsbCB0YWtlIHByZWNlZGVuY2UuIFRvIGFjY2VzcyB0aGUgb3RoZXIgY29sdW1uKHMpCiAqIG9mIHRoZSBzYW1lIG5hbWUsIHlvdSBtdXN0IHVzZSB0aGUgbnVtZXJpYyBpbmRleCBvZiB0aGUgY29sdW1uIG9yCiAqIG1ha2UgYW4gYWxpYXMgZm9yIHRoZSBjb2x1bW4uIEZvciBhbGlhc2VkIGNvbHVtbnMsIHlvdSBjYW5ub3QKICogYWNjZXNzIHRoZSBjb250ZW50cyB3aXRoIHRoZSBvcmlnaW5hbCBjb2x1bW4gbmFtZS4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgJHJlc3VsdF90eXBlID0gTVlTUUxfQk9USCkge30KCi8qKgogKiBGZXRjaCBhIHJlc3VsdCByb3cgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5teXNxbC1mZXRjaC1hc3NvYy5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQKICogQHJldHVybiBhcnJheSBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBzdHJpbmdzIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGZldGNoZWQgcm93LCBvcgogKiBmYWxzZSBpZiB0aGVyZSBhcmUgbm8gbW9yZSByb3dzLgogKiA8L3A+CiAqIDxwPgogKiBJZiB0d28gb3IgbW9yZSBjb2x1bW5zIG9mIHRoZSByZXN1bHQgaGF2ZSB0aGUgc2FtZSBmaWVsZCBuYW1lcywKICogdGhlIGxhc3QgY29sdW1uIHdpbGwgdGFrZSBwcmVjZWRlbmNlLiBUbyBhY2Nlc3MgdGhlIG90aGVyCiAqIGNvbHVtbihzKSBvZiB0aGUgc2FtZSBuYW1lLCB5b3UgZWl0aGVyIG5lZWQgdG8gYWNjZXNzIHRoZQogKiByZXN1bHQgd2l0aCBudW1lcmljIGluZGljZXMgYnkgdXNpbmcKICogPGI+bXlzcWxfZmV0Y2hfcm93PC9iPiBvciBhZGQgYWxpYXMgbmFtZXMuCiAqIFNlZSB0aGUgZXhhbXBsZSBhdCB0aGUgPGI+bXlzcWxfZmV0Y2hfYXJyYXk8L2I+CiAqIGRlc2NyaXB0aW9uIGFib3V0IGFsaWFzZXMuCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2ZldGNoX2Fzc29jKCRyZXN1bHQpIHt9CgovKioKICogQHRlbXBsYXRlIFQKICoKICogRmV0Y2ggYSByZXN1bHQgcm93IGFzIGFuIG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWZldGNoLW9iamVjdC5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQKICogQHBhcmFtIGNsYXNzLXN0cmluZzxUPiAkY2xhc3NfbmFtZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gaW5zdGFudGlhdGUsIHNldCB0aGUgcHJvcGVydGllcyBvZiBhbmQgcmV0dXJuLgogKiBJZiBub3Qgc3BlY2lmaWVkLCBhIDxiPnN0ZENsYXNzPC9iPiBvYmplY3QgaXMgcmV0dXJuZWQuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRwYXJhbXMgW29wdGlvbmFsXSA8cD4KICogQW4gb3B0aW9uYWwgYXJyYXkgb2YgcGFyYW1ldGVycyB0byBwYXNzIHRvIHRoZSBjb25zdHJ1Y3RvcgogKiBmb3IgPGk+Y2xhc3NfbmFtZTwvaT4gb2JqZWN0cy4KICogPC9wPgogKiBAcmV0dXJuIFR8c3RkQ2xhc3MgYW4gb2JqZWN0IHdpdGggc3RyaW5nIHByb3BlcnRpZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZQogKiBmZXRjaGVkIHJvdywgb3IgZmFsc2UgaWYgdGhlcmUgYXJlIG5vIG1vcmUgcm93cy4KICogPC9wPgogKiA8cD4KICogbXlzcWxfZmV0Y2hfcm93IGZldGNoZXMgb25lIHJvdyBvZiBkYXRhIGZyb20KICogdGhlIHJlc3VsdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCByZXN1bHQgaWRlbnRpZmllci4gVGhlCiAqIHJvdyBpcyByZXR1cm5lZCBhcyBhbiBhcnJheS4gRWFjaCByZXN1bHQgY29sdW1uIGlzIHN0b3JlZCBpbiBhbgogKiBhcnJheSBvZmZzZXQsIHN0YXJ0aW5nIGF0IG9mZnNldCAwLgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9mZXRjaF9vYmplY3QoJHJlc3VsdCwgJGNsYXNzX25hbWUgPSAnc3RkQ2xhc3MnLCBhcnJheSAkcGFyYW1zID0gbnVsbCkge30KCi8qKgogKiBNb3ZlIGludGVybmFsIHJlc3VsdCBwb2ludGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtZGF0YS1zZWVrLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdAogKiBAcGFyYW0gaW50ICRyb3dfbnVtYmVyIDxwPgogKiBUaGUgZGVzaXJlZCByb3cgbnVtYmVyIG9mIHRoZSBuZXcgcmVzdWx0IHBvaW50ZXIuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9kYXRhX3NlZWsoJHJlc3VsdCwgJHJvd19udW1iZXIpIHt9CgovKioKICogR2V0IHRoZSBsZW5ndGggb2YgZWFjaCBvdXRwdXQgaW4gYSByZXN1bHQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5teXNxbC1mZXRjaC1sZW5ndGhzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdAogKiBAcmV0dXJuIGFycmF5fGZhbHNlIEFuIGFycmF5IG9mIGxlbmd0aHMgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9mZXRjaF9sZW5ndGhzKCRyZXN1bHQpIHt9CgovKioKICogR2V0IGNvbHVtbiBpbmZvcm1hdGlvbiBmcm9tIGEgcmVzdWx0IGFuZCByZXR1cm4gYXMgYW4gb2JqZWN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtZmV0Y2gtZmllbGQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEBwYXJhbSBpbnQgJGZpZWxkX29mZnNldCBbb3B0aW9uYWxdIDxwPgogKiBUaGUgbnVtZXJpY2FsIGZpZWxkIG9mZnNldC4gSWYgdGhlIGZpZWxkIG9mZnNldCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUKICogbmV4dCBmaWVsZCB0aGF0IHdhcyBub3QgeWV0IHJldHJpZXZlZCBieSB0aGlzIGZ1bmN0aW9uIGlzIHJldHJpZXZlZC4KICogVGhlIDxpPmZpZWxkX29mZnNldDwvaT4gc3RhcnRzIGF0IDAuCiAqIDwvcD4KICogQHJldHVybiBvYmplY3QgYW4gb2JqZWN0IGNvbnRhaW5pbmcgZmllbGQgaW5mb3JtYXRpb24uIFRoZSBwcm9wZXJ0aWVzCiAqIG9mIHRoZSBvYmplY3QgYXJlOgogKiA8L3A+CiAqIDxwPgogKiBuYW1lIC0gY29sdW1uIG5hbWUKICogdGFibGUgLSBuYW1lIG9mIHRoZSB0YWJsZSB0aGUgY29sdW1uIGJlbG9uZ3MgdG8KICogZGVmIC0gZGVmYXVsdCB2YWx1ZSBvZiB0aGUgY29sdW1uCiAqIG1heF9sZW5ndGggLSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY29sdW1uCiAqIG5vdF9udWxsIC0gMSBpZiB0aGUgY29sdW1uIGNhbm5vdCBiZSBudWxsCiAqIHByaW1hcnlfa2V5IC0gMSBpZiB0aGUgY29sdW1uIGlzIGEgcHJpbWFyeSBrZXkKICogdW5pcXVlX2tleSAtIDEgaWYgdGhlIGNvbHVtbiBpcyBhIHVuaXF1ZSBrZXkKICogbXVsdGlwbGVfa2V5IC0gMSBpZiB0aGUgY29sdW1uIGlzIGEgbm9uLXVuaXF1ZSBrZXkKICogbnVtZXJpYyAtIDEgaWYgdGhlIGNvbHVtbiBpcyBudW1lcmljCiAqIGJsb2IgLSAxIGlmIHRoZSBjb2x1bW4gaXMgYSBCTE9CCiAqIHR5cGUgLSB0aGUgdHlwZSBvZiB0aGUgY29sdW1uCiAqIHVuc2lnbmVkIC0gMSBpZiB0aGUgY29sdW1uIGlzIHVuc2lnbmVkCiAqIHplcm9maWxsIC0gMSBpZiB0aGUgY29sdW1uIGlzIHplcm8tZmlsbGVkCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2ZldGNoX2ZpZWxkKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQgPSAwKSB7fQoKLyoqCiAqIFNldCByZXN1bHQgcG9pbnRlciB0byBhIHNwZWNpZmllZCBmaWVsZCBvZmZzZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5teXNxbC1maWVsZC1zZWVrLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdAogKiBAcGFyYW0gaW50ICRmaWVsZF9vZmZzZXQKICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9maWVsZF9zZWVrKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpIHt9CgovKioKICogRnJlZSByZXN1bHQgbWVtb3J5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtZnJlZS1yZXN1bHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICogPHA+CiAqIElmIGEgbm9uLXJlc291cmNlIGlzIHVzZWQgZm9yIHRoZSByZXN1bHQsIGFuCiAqIGVycm9yIG9mIGxldmVsIEVfV0FSTklORyB3aWxsIGJlIGVtaXR0ZWQuIEl0J3Mgd29ydGggbm90aW5nIHRoYXQKICogbXlzcWxfcXVlcnkgb25seSByZXR1cm5zIGEgcmVzb3VyY2UKICogZm9yIFNFTEVDVCwgU0hPVywgRVhQTEFJTiwgYW5kIERFU0NSSUJFIHF1ZXJpZXMuCiAqIDwvcD4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCkge30KCi8qKgogKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmllZCBmaWVsZCBpbiBhIHJlc3VsdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWZpZWxkLW5hbWUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEBwYXJhbSBpbnQgJGZpZWxkX29mZnNldAogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgbmFtZSBvZiB0aGUgc3BlY2lmaWVkIGZpZWxkIGluZGV4IG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCAkZmllbGRfb2Zmc2V0KSB7fQoKLyoqCiAqIEdldCBuYW1lIG9mIHRoZSB0YWJsZSB0aGUgc3BlY2lmaWVkIGZpZWxkIGlzIGluCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtZmllbGQtdGFibGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEBwYXJhbSBpbnQgJGZpZWxkX29mZnNldAogKiBAcmV0dXJuIHN0cmluZyBUaGUgbmFtZSBvZiB0aGUgdGFibGUgb24gc3VjY2Vzcy4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfZmllbGRfdGFibGUoJHJlc3VsdCwgJGZpZWxkX29mZnNldCkge30KCi8qKgogKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHNwZWNpZmllZCBmaWVsZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWZpZWxkLWxlbi5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQKICogQHBhcmFtIGludCAkZmllbGRfb2Zmc2V0CiAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBsZW5ndGggb2YgdGhlIHNwZWNpZmllZCBmaWVsZCBpbmRleCBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2ZpZWxkX2xlbigkcmVzdWx0LCAkZmllbGRfb2Zmc2V0KSB7fQoKLyoqCiAqIEdldCB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGZpZWxkIGluIGEgcmVzdWx0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtZmllbGQtdHlwZS5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQKICogQHBhcmFtIGludCAkZmllbGRfb2Zmc2V0CiAqIEByZXR1cm4gc3RyaW5nIFRoZSByZXR1cm5lZCBmaWVsZCB0eXBlCiAqIHdpbGwgYmUgb25lIG9mICJpbnQiLCAicmVhbCIsCiAqICJzdHJpbmciLCAiYmxvYiIsIGFuZCBvdGhlcnMgYXMKICogZGV0YWlsZWQgaW4gdGhlIE15U1FMCiAqIGRvY3VtZW50YXRpb24uCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2ZpZWxkX3R5cGUoJHJlc3VsdCwgJGZpZWxkX29mZnNldCkge30KCi8qKgogKiBHZXQgdGhlIGZsYWdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGZpZWxkIGluIGEgcmVzdWx0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtZmllbGQtZmxhZ3MucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEBwYXJhbSBpbnQgJGZpZWxkX29mZnNldAogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBhIHN0cmluZyBvZiBmbGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3VsdCBvciBmYWxzZSBvbiBmYWlsdXJlLgogKiA8cD4KICogVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgcmVwb3J0ZWQsIGlmIHlvdXIgdmVyc2lvbiBvZiBNeVNRTAogKiBpcyBjdXJyZW50IGVub3VnaCB0byBzdXBwb3J0IHRoZW06ICJub3RfbnVsbCIsCiAqICJwcmltYXJ5X2tleSIsICJ1bmlxdWVfa2V5IiwKICogIm11bHRpcGxlX2tleSIsICJibG9iIiwKICogInVuc2lnbmVkIiwgInplcm9maWxsIiwKICogImJpbmFyeSIsICJlbnVtIiwKICogImF1dG9faW5jcmVtZW50IiBhbmQgInRpbWVzdGFtcCIuCiAqIDwvcD4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfZmllbGRfZmxhZ3MoJHJlc3VsdCwgJGZpZWxkX29mZnNldCkge30KCi8qKgogKiBFc2NhcGVzIGEgc3RyaW5nIGZvciB1c2UgaW4gYSBteXNxbF9xdWVyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWVzY2FwZS1zdHJpbmcucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHVuZXNjYXBlZF9zdHJpbmcgPHA+CiAqIFRoZSBzdHJpbmcgdGhhdCBpcyB0byBiZSBlc2NhcGVkLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIHRoZSBlc2NhcGVkIHN0cmluZy4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICdteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJXBhcmFtZXRlcjAlKScsIHNpbmNlOiAnNS4zJyldCmZ1bmN0aW9uIG15c3FsX2VzY2FwZV9zdHJpbmcoJHVuZXNjYXBlZF9zdHJpbmcpIHt9CgovKioKICogRXNjYXBlcyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcgZm9yIHVzZSBpbiBhbiBTUUwgc3RhdGVtZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtcmVhbC1lc2NhcGUtc3RyaW5nLnBocAogKiBAcGFyYW0gc3RyaW5nICR1bmVzY2FwZWRfc3RyaW5nIDxwPgogKiBUaGUgc3RyaW5nIHRoYXQgaXMgdG8gYmUgZXNjYXBlZC4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBbb3B0aW9uYWxdCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBlc2NhcGVkIHN0cmluZywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdW5lc2NhcGVkX3N0cmluZywgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogR2V0IGN1cnJlbnQgc3lzdGVtIHN0YXR1cwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLXN0YXQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0KICogQHJldHVybiBzdHJpbmcgYSBzdHJpbmcgd2l0aCB0aGUgc3RhdHVzIGZvciB1cHRpbWUsIHRocmVhZHMsIHF1ZXJpZXMsIG9wZW4gdGFibGVzLAogKiBmbHVzaCB0YWJsZXMgYW5kIHF1ZXJpZXMgcGVyIHNlY29uZC4gRm9yIGEgY29tcGxldGUgbGlzdCBvZiBvdGhlciBzdGF0dXMKICogdmFyaWFibGVzLCB5b3UgaGF2ZSB0byB1c2UgdGhlIFNIT1cgU1RBVFVTIFNRTCBjb21tYW5kLgogKiBJZiA8aT5saW5rX2lkZW50aWZpZXI8L2k+IGlzIGludmFsaWQsIG51bGwgaXMgcmV0dXJuZWQuCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX3N0YXQoJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogUmV0dXJuIHRoZSBjdXJyZW50IHRocmVhZCBJRAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLXRocmVhZC1pZC5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgdGhyZWFkIElEIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfdGhyZWFkX2lkKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNoYXJhY3RlciBzZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5teXNxbC1jbGllbnQtZW5jb2RpbmcucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0KICogQHJldHVybiBzdHJpbmcgdGhlIGRlZmF1bHQgY2hhcmFjdGVyIHNldCBuYW1lIGZvciB0aGUgY3VycmVudCBjb25uZWN0aW9uLgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9jbGllbnRfZW5jb2RpbmcoJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogUGluZyBhIHNlcnZlciBjb25uZWN0aW9uIG9yIHJlY29ubmVjdCBpZiB0aGVyZSBpcyBubyBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtcGluZy5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIE15U1FMIHNlcnZlciBpcyB3b3JraW5nLAogKiBvdGhlcndpc2UgZmFsc2UuCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX3BpbmcoJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogR2V0IE15U1FMIGNsaWVudCBpbmZvCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtZ2V0LWNsaWVudC1pbmZvLnBocAogKiBAcmV0dXJuIHN0cmluZyBUaGUgTXlTUUwgY2xpZW50IHZlcnNpb24uCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2dldF9jbGllbnRfaW5mbygpIHt9CgovKioKICogR2V0IE15U1FMIGhvc3QgaW5mbwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWdldC1ob3N0LWluZm8ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0KICogQHJldHVybiBzdHJpbmcgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBNeVNRTCBjb25uZWN0aW9uIGluIHVzZSBmb3IgdGhlCiAqIGNvbm5lY3Rpb24gb3IgZmFsc2Ugb24gZmFpbHVyZS4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfZ2V0X2hvc3RfaW5mbygkbGlua19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBHZXQgTXlTUUwgcHJvdG9jb2wgaW5mbwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWdldC1wcm90by1pbmZvLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBbb3B0aW9uYWxdCiAqIEByZXR1cm4gaW50fGZhbHNlIHRoZSBNeVNRTCBwcm90b2NvbCBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2dldF9wcm90b19pbmZvKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIEdldCBNeVNRTCBzZXJ2ZXIgaW5mbwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWdldC1zZXJ2ZXItaW5mby5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgTXlTUUwgc2VydmVyIHZlcnNpb24gb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9nZXRfc2VydmVyX2luZm8oJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBtb3N0IHJlY2VudCBxdWVyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLWluZm8ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlbWVudCBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbgogKiBmYWlsdXJlLiBTZWUgdGhlIGV4YW1wbGUgYmVsb3cgZm9yIHdoaWNoIHN0YXRlbWVudHMgcHJvdmlkZSBpbmZvcm1hdGlvbiwKICogYW5kIHdoYXQgdGhlIHJldHVybmVkIHZhbHVlIG1heSBsb29rIGxpa2UuIFN0YXRlbWVudHMgdGhhdCBhcmUgbm90IGxpc3RlZAogKiB3aWxsIHJldHVybiBmYWxzZS4KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfaW5mbygkbGlua19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBTZXRzIHRoZSBjbGllbnQgY2hhcmFjdGVyIHNldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLXNldC1jaGFyc2V0LnBocAogKiBAcGFyYW0gc3RyaW5nICRjaGFyc2V0IDxwPgogKiBBIHZhbGlkIGNoYXJhY3RlciBzZXQgbmFtZS4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGxpbmtfaWRlbnRpZmllciBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICogQHNpbmNlIDUuMi4zCiAqIEByZW1vdmVkIDcuMAogKiBAc2VlIG15c3FsaV9zZXRfY2hhcnNldCgpCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICdVc2UgbXlzcWxpX3NldF9jaGFyc2V0IGluc3RlYWQnLCBzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9zZXRfY2hhcnNldCgkY2hhcnNldCwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogQHBhcmFtICRkYXRhYmFzZV9uYW1lCiAqIEBwYXJhbSAkcXVlcnkKICogQHBhcmFtICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIm15c3FsX2RiX3F1ZXJ5KCVwYXJhbWV0ZXJzTGlzdCUpIiwgc2luY2U6ICc1LjMnKV0KZnVuY3Rpb24gbXlzcWwoJGRhdGFiYXNlX25hbWUsICRxdWVyeSwgJGxpbmtfaWRlbnRpZmllcikge30KCi8qKgogKiBAcGFyYW0gJHJlc3VsdAogKiBAcGFyYW0gJGZpZWxkX2luZGV4CiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAnbXlzcWxfZmllbGRfbmFtZSglcGFyYW1ldGVyc0xpc3QlKScsIHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2ZpZWxkbmFtZSgkcmVzdWx0LCAkZmllbGRfaW5kZXgpIHt9CgovKioKICogQHBhcmFtICRyZXN1bHQKICogQHBhcmFtICRmaWVsZF9vZmZzZXQKICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICdteXNxbF9maWVsZF90YWJsZSglcGFyYW1ldGVyc0xpc3QlKScsIHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2ZpZWxkdGFibGUoJHJlc3VsdCwgJGZpZWxkX29mZnNldCkge30KCi8qKgogKiBAcGFyYW0gJHJlc3VsdAogKiBAcGFyYW0gJGZpZWxkX29mZnNldAogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogJ215c3FsX2ZpZWxkX2xlbiglcGFyYW1ldGVyc0xpc3QlKScsIHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2ZpZWxkbGVuKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpIHt9CgovKioKICogQHBhcmFtICRyZXN1bHQKICogQHBhcmFtICRmaWVsZF9vZmZzZXQKICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICdteXNxbF9maWVsZF90eXBlKCVwYXJhbWV0ZXJzTGlzdCUpJywgc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfZmllbGR0eXBlKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpIHt9CgovKioKICogQHBhcmFtICRyZXN1bHQKICogQHBhcmFtICRmaWVsZF9vZmZzZXQKICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICdteXNxbF9maWVsZF9mbGFncyglcGFyYW1ldGVyc0xpc3QlKScsIHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2ZpZWxkZmxhZ3MoJHJlc3VsdCwgJGZpZWxkX29mZnNldCkge30KCi8qKgogKiBAcGFyYW0gJGRhdGFiYXNlX25hbWUKICogQHBhcmFtICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogJ215c3FsX3NlbGVjdF9kYiglcGFyYW1ldGVyc0xpc3QlKScsIHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX3NlbGVjdGRiKCRkYXRhYmFzZV9uYW1lLCAkbGlua19pZGVudGlmaWVyKSB7fQoKLyoqCiAqIEBwYXJhbSAkcmVzdWx0CiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAnbXlzcWxfZnJlZV9yZXN1bHQoJXBhcmFtZXRlcnNMaXN0JSknLCBzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF9mcmVlcmVzdWx0KCRyZXN1bHQpIHt9CgovKioKICogQHBhcmFtICRyZXN1bHQKICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICdteXNxbF9udW1fZmllbGRzKCVwYXJhbWV0ZXJzTGlzdCUpJywgc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfbnVtZmllbGRzKCRyZXN1bHQpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSkKICogQWxpYXMgb2YgbXlzcWxfbnVtX3Jvd3MoKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLW51bS1yb3dzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD5UaGUgcmVzdWx0IHJlc291cmNlIHRoYXQgaXMgYmVpbmcgZXZhbHVhdGVkLiBUaGlzIHJlc3VsdCBjb21lcyBmcm9tIGEgY2FsbCB0byBteXNxbF9xdWVyeSgpLjwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgPHA+VGhlIG51bWJlciBvZiByb3dzIGluIHRoZSByZXN1bHQgc2V0IG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4gPC9wPgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogJ215c3FsX251bV9yb3dzKCVwYXJhbWV0ZXJzTGlzdCUpJywgc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfbnVtcm93cygkcmVzdWx0KSB7fQoKLyoqCiAqIEBwYXJhbSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICdteXNxbF9saXN0X2RicyglcGFyYW1ldGVyc0xpc3QlKScsIHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2xpc3RkYnMoJGxpbmtfaWRlbnRpZmllcikge30KCi8qKgogKiBAcGFyYW0gJGRhdGFiYXNlX25hbWUKICogQHBhcmFtICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogJ215c3FsX2xpc3RfdGFibGVzKCVwYXJhbWV0ZXJzTGlzdCUpJywgc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfbGlzdHRhYmxlcygkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllcikge30KCi8qKgogKiBAcGFyYW0gJGRhdGFiYXNlX25hbWUKICogQHBhcmFtICR0YWJsZV9uYW1lCiAqIEBwYXJhbSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICdteXNxbF9saXN0X2ZpZWxkcyglcGFyYW1ldGVyc0xpc3QlKScsIHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2xpc3RmaWVsZHMoJGRhdGFiYXNlX25hbWUsICR0YWJsZV9uYW1lLCAkbGlua19pZGVudGlmaWVyKSB7fQoKLyoqCiAqIFJldHJpZXZlcyBkYXRhYmFzZSBuYW1lIGZyb20gdGhlIGNhbGwgdG8ge0BzZWUgbXlzcWxfbGlzdF9kYnN9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwtZGItbmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+CiAqIFRoZSByZXN1bHQgcG9pbnRlciBmcm9tIGEgY2FsbCB0byA8Yj5teXNxbF9saXN0X2RiczwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkcm93IDxwPgogKiBUaGUgaW5kZXggaW50byB0aGUgcmVzdWx0IHNldC4KICogPC9wPgogKiBAcGFyYW0gbWl4ZWQgJGZpZWxkIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBmaWVsZCBuYW1lLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBkYXRhYmFzZSBuYW1lIG9uIHN1Y2Nlc3MsIGFuZCBmYWxzZSBvbiBmYWlsdXJlLiBJZiBmYWxzZQogKiBpcyByZXR1cm5lZCwgdXNlIDxiPm15c3FsX2Vycm9yPC9iPiB0byBkZXRlcm1pbmUgdGhlIG5hdHVyZQogKiBvZiB0aGUgZXJyb3IuCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX2RiX25hbWUoJHJlc3VsdCwgJHJvdywgJGZpZWxkID0gbnVsbCkge30KCi8qKgogKiBAcGFyYW0gJHJlc3VsdAogKiBAcGFyYW0gJHJvdwogKiBAcGFyYW0gJGZpZWxkIFtvcHRpb25hbF0KICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICdteXNxbF9kYl9uYW1lKCVwYXJhbWV0ZXJzTGlzdCUpJywgc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbXlzcWxfZGJuYW1lKCRyZXN1bHQsICRyb3csICRmaWVsZCkge30KCi8qKgogKiBHZXQgdGFibGUgbmFtZSBvZiBmaWVsZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm15c3FsLXRhYmxlbmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+CiAqIEEgcmVzdWx0IHBvaW50ZXIgcmVzb3VyY2UgdGhhdCdzIHJldHVybmVkIGZyb20KICogPGI+bXlzcWxfbGlzdF90YWJsZXM8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGkgPHA+CiAqIFRoZSBpbnRlZ2VyIGluZGV4IChyb3cvdGFibGUgbnVtYmVyKQogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqIDxwPgogKiBVc2UgdGhlIDxiPm15c3FsX3RhYmxlbmFtZTwvYj4gZnVuY3Rpb24gdG8KICogdHJhdmVyc2UgdGhpcyByZXN1bHQgcG9pbnRlciwgb3IgYW55IGZ1bmN0aW9uIGZvciByZXN1bHQgdGFibGVzLAogKiBzdWNoIGFzIDxiPm15c3FsX2ZldGNoX2FycmF5PC9iPi4KICogPC9wPgogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuNScpXQpmdW5jdGlvbiBteXNxbF90YWJsZW5hbWUoJHJlc3VsdCwgJGkpIHt9CgovKioKICogQHBhcmFtICRyZXN1bHQKICogQHBhcmFtICRyb3cKICogQHBhcmFtICRmaWVsZCBbb3B0aW9uYWxdCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG15c3FsX3RhYmxlX25hbWUoJHJlc3VsdCwgJHJvdywgJGZpZWxkKSB7fQoKLyoqCiAqIENvbHVtbnMgYXJlIHJldHVybmVkIGludG8gdGhlIGFycmF5IGhhdmluZyB0aGUgZmllbGRuYW1lIGFzIHRoZSBhcnJheQogKiBpbmRleC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9teXNxbC5jb25zdGFudHMucGhwCiAqIEBkZXByZWNhdGVkIDUuNQogKiBAcmVtb3ZlZCA3LjAKICovCmRlZmluZSgnTVlTUUxfQVNTT0MnLCAxKTsKCi8qKgogKiBDb2x1bW5zIGFyZSByZXR1cm5lZCBpbnRvIHRoZSBhcnJheSBoYXZpbmcgYSBudW1lcmljYWwgaW5kZXggdG8gdGhlCiAqIGZpZWxkcy4gVGhpcyBpbmRleCBzdGFydHMgd2l0aCAwLCB0aGUgZmlyc3QgZmllbGQgaW4gdGhlIHJlc3VsdC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9teXNxbC5jb25zdGFudHMucGhwCiAqIEBkZXByZWNhdGVkIDUuNQogKiBAcmVtb3ZlZCA3LjAKICovCmRlZmluZSgnTVlTUUxfTlVNJywgMik7CgovKioKICogQ29sdW1ucyBhcmUgcmV0dXJuZWQgaW50byB0aGUgYXJyYXkgaGF2aW5nIGJvdGggYSBudW1lcmljYWwgaW5kZXgKICogYW5kIHRoZSBmaWVsZG5hbWUgYXMgdGhlIGFycmF5IGluZGV4LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL215c3FsLmNvbnN0YW50cy5waHAKICogQGRlcHJlY2F0ZWQgNS41CiAqIEByZW1vdmVkIDcuMAogKi8KZGVmaW5lKCdNWVNRTF9CT1RIJywgMyk7CgovKioKICogVXNlIGNvbXByZXNzaW9uIHByb3RvY29sCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbXlzcWwuY29uc3RhbnRzLnBocAogKiBAZGVwcmVjYXRlZCA1LjUKICogQHJlbW92ZWQgNy4wCiAqLwpkZWZpbmUoJ01ZU1FMX0NMSUVOVF9DT01QUkVTUycsIDMyKTsKCi8qKgogKiBVc2UgU1NMIGVuY3J5cHRpb24uIFRoaXMgZmxhZyBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIHZlcnNpb24gNC54CiAqIG9mIHRoZSBNeVNRTCBjbGllbnQgbGlicmFyeSBvciBuZXdlci4gVmVyc2lvbiAzLjIzLnggaXMgYnVuZGxlZCBib3RoCiAqIHdpdGggUEhQIDQgYW5kIFdpbmRvd3MgYmluYXJpZXMgb2YgUEhQIDUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbXlzcWwuY29uc3RhbnRzLnBocAogKiBAZGVwcmVjYXRlZCA1LjUKICogQHJlbW92ZWQgNy4wCiAqLwpkZWZpbmUoJ01ZU1FMX0NMSUVOVF9TU0wnLCAyMDQ4KTsKCi8qKgogKiBBbGxvdyBpbnRlcmFjdGl2ZV90aW1lb3V0IHNlY29uZHMgKGluc3RlYWQgb2Ygd2FpdF90aW1lb3V0KSBvZgogKiBpbmFjdGl2aXR5IGJlZm9yZSBjbG9zaW5nIHRoZSBjb25uZWN0aW9uLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL215c3FsLmNvbnN0YW50cy5waHAKICogQGRlcHJlY2F0ZWQgNS41CiAqIEByZW1vdmVkIDcuMAogKi8KZGVmaW5lKCdNWVNRTF9DTElFTlRfSU5URVJBQ1RJVkUnLCAxMDI0KTsKCi8qKgogKiBBbGxvdyBzcGFjZSBhZnRlciBmdW5jdGlvbiBuYW1lcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL215c3FsLmNvbnN0YW50cy5waHAKICogQGRlcHJlY2F0ZWQgNS41CiAqIEByZW1vdmVkIDcuMAogKi8KZGVmaW5lKCdNWVNRTF9DTElFTlRfSUdOT1JFX1NQQUNFJywgMjU2KTsKCi8vIEVuZCBvZiBteXNxbCB2LjEuMAo8P3BocAoKLy8gU3RhcnQgb2Ygc3NoMiB2LjAuMTEuMC1kZXYKCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuOS4wKTxici8+CiAqIENvbm5lY3QgdG8gYW4gU1NIIHNlcnZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNzaDItY29ubmVjdC5waHAKICogQHBhcmFtIHN0cmluZyAkaG9zdCA8cD4KICogPC9wPgogKiBAcGFyYW0gaW50ICRwb3J0IFtvcHRpb25hbF0gPHA+CiAqIDwvcD4KICogQHBhcmFtIG51bGx8YXJyYXkgJG1ldGhvZHMgW29wdGlvbmFsXSA8cD4KICogbWV0aG9kcyBtYXkgYmUgYW4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCB1cCB0byBmb3VyIHBhcmFtZXRlcnMKICogYXMgZGVzY3JpYmVkIGJlbG93LgogKiA8L3A+CiAqIDxwPgogKiA8dGFibGU+CiAqIG1ldGhvZHMgbWF5IGJlIGFuIGFzc29jaWF0aXZlIGFycmF5CiAqIHdpdGggYW55IG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMuCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5JbmRleDwvdGQ+CiAqIDx0ZD5NZWFuaW5nPC90ZD4KICogPHRkPlN1cHBvcnRlZCBWYWx1ZXMqPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmtleDwvdGQ+CiAqIDx0ZD4KICogTGlzdCBvZiBrZXkgZXhjaGFuZ2UgbWV0aG9kcyB0byBhZHZlcnRpc2UsIGNvbW1hIHNlcGFyYXRlZAogKiBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgogKiA8L3RkPgogKiA8dGQ+CiAqIGRpZmZpZS1oZWxsbWFuLWdyb3VwMS1zaGExLAogKiBkaWZmaWUtaGVsbG1hbi1ncm91cDE0LXNoYTEsIGFuZAogKiBkaWZmaWUtaGVsbG1hbi1ncm91cC1leGNoYW5nZS1zaGExCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5ob3N0a2V5PC90ZD4KICogPHRkPgogKiBMaXN0IG9mIGhvc3RrZXkgbWV0aG9kcyB0byBhZHZlcnRpc2UsIGNvbWUgc2VwYXJhdGVkCiAqIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCiAqIDwvdGQ+CiAqIDx0ZD4KICogc3NoLXJzYSBhbmQKICogc3NoLWRzcwogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Y2xpZW50X3RvX3NlcnZlcjwvdGQ+CiAqIDx0ZD4KICogQXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbmluZyBjcnlwdCwgY29tcHJlc3Npb24sIGFuZAogKiBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUgKE1BQykgbWV0aG9kIHByZWZlcmVuY2VzCiAqIGZvciBtZXNzYWdlcyBzZW50IGZyb20gY2xpZW50IHRvIHNlcnZlci4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPnNlcnZlcl90b19jbGllbnQ8L3RkPgogKiA8dGQ+CiAqIEFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcgY3J5cHQsIGNvbXByZXNzaW9uLCBhbmQKICogbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlIChNQUMpIG1ldGhvZCBwcmVmZXJlbmNlcwogKiBmb3IgbWVzc2FnZXMgc2VudCBmcm9tIHNlcnZlciB0byBjbGllbnQuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqIDwvcD4KICogPHA+CiAqICogLSBTdXBwb3J0ZWQgVmFsdWVzIGFyZSBkZXBlbmRlbnQgb24gbWV0aG9kcyBzdXBwb3J0ZWQgYnkgdW5kZXJseWluZyBsaWJyYXJ5LgogKiBTZWUgbGlic3NoMiBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsCiAqIGluZm9ybWF0aW9uLgogKiA8L3A+CiAqIDxwPgogKiA8dGFibGU+CiAqIGNsaWVudF90b19zZXJ2ZXIgYW5kCiAqIHNlcnZlcl90b19jbGllbnQgbWF5IGJlIGFuIGFzc29jaWF0aXZlIGFycmF5CiAqIHdpdGggYW55IG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMuCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5JbmRleDwvdGQ+CiAqIDx0ZD5NZWFuaW5nPC90ZD4KICogPHRkPlN1cHBvcnRlZCBWYWx1ZXMqPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmNyeXB0PC90ZD4KICogPHRkPkxpc3Qgb2YgY3J5cHRvIG1ldGhvZHMgdG8gYWR2ZXJ0aXNlLCBjb21tYSBzZXBhcmF0ZWQKICogaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS48L3RkPgogKiA8dGQ+CiAqIHJpam5kYWVsLWNiY0BseXNhdG9yLmxpdS5zZSwKICogYWVzMjU2LWNiYywKICogYWVzMTkyLWNiYywKICogYWVzMTI4LWNiYywKICogM2Rlcy1jYmMsCiAqIGJsb3dmaXNoLWNiYywKICogY2FzdDEyOC1jYmMsCiAqIGFyY2ZvdXIsIGFuZAogKiBub25lKioKICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmNvbXA8L3RkPgogKiA8dGQ+TGlzdCBvZiBjb21wcmVzc2lvbiBtZXRob2RzIHRvIGFkdmVydGlzZSwgY29tbWEgc2VwYXJhdGVkCiAqIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuPC90ZD4KICogPHRkPgogKiB6bGliIGFuZAogKiBub25lCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5tYWM8L3RkPgogKiA8dGQ+TGlzdCBvZiBNQUMgbWV0aG9kcyB0byBhZHZlcnRpc2UsIGNvbWUgc2VwYXJhdGVkCiAqIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuPC90ZD4KICogPHRkPgogKiBobWFjLXNoYTEsCiAqIGhtYWMtc2hhMS05NiwKICogaG1hYy1yaXBlbWQxNjAsCiAqIGhtYWMtcmlwZW1kMTYwQG9wZW5zc2guY29tLCBhbmQKICogbm9uZSoqCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqIDwvcD4KICogPHA+CiAqIENyeXB0IGFuZCBNQUMgbWV0aG9kICJub25lIgogKiA8cD4KICogRm9yIHNlY3VyaXR5IHJlYXNvbnMsIG5vbmUgaXMgZGlzYWJsZWQgYnkgdGhlIHVuZGVybHlpbmcKICogbGlic3NoMiBsaWJyYXJ5IHVubGVzcyBleHBsaWNpdGx5IGVuYWJsZWQKICogZHVyaW5nIGJ1aWxkIHRpbWUgYnkgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIC4vY29uZmlndXJlIG9wdGlvbnMuIFNlZSBkb2N1bWVudGF0aW9uCiAqIGZvciB0aGUgdW5kZXJseWluZyBsaWJyYXJ5IGZvciBtb3JlIGluZm9ybWF0aW9uLgogKiA8L3A+CiAqIDwvcD4KICogQHBhcmFtIG51bGx8YXJyYXkgJGNhbGxiYWNrcyBbb3B0aW9uYWxdIDxwPgogKiBjYWxsYmFja3MgbWF5IGJlIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggYW55CiAqIG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMuCiAqIDx0YWJsZT4KICogQ2FsbGJhY2tzIHBhcmFtZXRlcnMKICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkluZGV4PC90ZD4KICogPHRkPk1lYW5pbmc8L3RkPgogKiA8dGQ+UHJvdG90eXBlPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmlnbm9yZTwvdGQ+CiAqIDx0ZD4KICogTmFtZSBvZiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYW4KICogU1NIMl9NU0dfSUdOT1JFIHBhY2tldCBpcyByZWNlaXZlZAogKiA8L3RkPgogKiA8dGQ+dm9pZCBpZ25vcmVfY2IoJG1lc3NhZ2UpPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmRlYnVnPC90ZD4KICogPHRkPgogKiBOYW1lIG9mIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbgogKiBTU0gyX01TR19ERUJVRyBwYWNrZXQgaXMgcmVjZWl2ZWQKICogPC90ZD4KICogPHRkPnZvaWQgZGVidWdfY2IoJG1lc3NhZ2UsICRsYW5ndWFnZSwgJGFsd2F5c19kaXNwbGF5KTwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5tYWNlcnJvcjwvdGQ+CiAqIDx0ZD4KICogTmFtZSBvZiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYSBwYWNrZXQgaXMgcmVjZWl2ZWQgYnV0IHRoZQogKiBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uIGNvZGUgZmFpbGVkLiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucwogKiB0cnVlLCB0aGUgbWlzbWF0Y2ggd2lsbCBiZSBpZ25vcmVkLCBvdGhlcndpc2UgdGhlIGNvbm5lY3Rpb24KICogd2lsbCBiZSB0ZXJtaW5hdGVkLgogKiA8L3RkPgogKiA8dGQ+Ym9vbCBtYWNlcnJvcl9jYigkcGFja2V0KTwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5kaXNjb25uZWN0PC90ZD4KICogPHRkPgogKiBOYW1lIG9mIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbgogKiBTU0gyX01TR19ESVNDT05ORUNUIHBhY2tldCBpcyByZWNlaXZlZAogKiA8L3RkPgogKiA8dGQ+dm9pZCBkaXNjb25uZWN0X2NiKCRyZWFzb24sICRtZXNzYWdlLCAkbGFuZ3VhZ2UpPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGEgcmVzb3VyY2Ugb24gc3VjY2Vzcywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBzc2gyX2Nvbm5lY3QoJGhvc3QsICRwb3J0ID0gMjIsID9hcnJheSAkbWV0aG9kcyA9IG51bGwsID9hcnJheSAkY2FsbGJhY2tzID0gbnVsbCkge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDEuMCk8YnIvPgogKiBDbG9zZSBhIGNvbm5lY3Rpb24gdG8gYSByZW1vdGUgU1NIIHNlcnZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNzaDItZGlzY29ubmVjdC5waHAKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIDxwPgogKiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHNzaDJfZGlzY29ubmVjdCgkc2Vzc2lvbikge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuOS4wKTxici8+CiAqIFJldHVybiBsaXN0IG9mIG5lZ290aWF0ZWQgbWV0aG9kcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNzaDItbWV0aG9kcy1uZWdvdGlhdGVkLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNlc3Npb24gPHA+CiAqIEFuIFNTSCBjb25uZWN0aW9uIGxpbmsgaWRlbnRpZmllciwgb2J0YWluZWQgZnJvbSBhIGNhbGwgdG8KICogc3NoMl9jb25uZWN0LgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHNzaDJfbWV0aG9kc19uZWdvdGlhdGVkKCRzZXNzaW9uKSB7fQoKLyoqCiAqIChQRUNMIHNzaDIgJmd0Oz0gMC45LjApPGJyLz4KICogUmV0cmlldmUgZmluZ2VycHJpbnQgb2YgcmVtb3RlIHNlcnZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNzaDItZmluZ2VycHJpbnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiA8cD4KICogQW4gU1NIIGNvbm5lY3Rpb24gbGluayBpZGVudGlmaWVyLCBvYnRhaW5lZCBmcm9tIGEgY2FsbCB0bwogKiBzc2gyX2Nvbm5lY3QuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICogZmxhZ3MgbWF5IGJlIGVpdGhlciBvZgogKiBTU0gyX0ZJTkdFUlBSSU5UX01ENSBvcgogKiBTU0gyX0ZJTkdFUlBSSU5UX1NIQTEgbG9naWNhbGx5IE9SZWQgd2l0aAogKiBTU0gyX0ZJTkdFUlBSSU5UX0hFWCBvcgogKiBTU0gyX0ZJTkdFUlBSSU5UX1JBVy4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyB0aGUgaG9zdGtleSBoYXNoIGFzIGEgc3RyaW5nLgogKi8KZnVuY3Rpb24gc3NoMl9maW5nZXJwcmludCgkc2Vzc2lvbiwgJGZsYWdzID0gbnVsbCkge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuOS4wKTxici8+CiAqIEF1dGhlbnRpY2F0ZSBhcyAibm9uZSIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zc2gyLWF1dGgtbm9uZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIDxwPgogKiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSA8cD4KICogUmVtb3RlIHVzZXIgbmFtZS4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGJvb2wgdHJ1ZSBpZiB0aGUgc2VydmVyIGRvZXMgYWNjZXB0ICJub25lIiBhcyBhbiBhdXRoZW50aWNhdGlvbgogKiBtZXRob2QsIG9yIGFuIGFycmF5IG9mIGFjY2VwdGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHNzaDJfYXV0aF9ub25lKCRzZXNzaW9uLCAkdXNlcm5hbWUpIHt9CgovKioKICogKFBFQ0wgc3NoMiAmZ3Q7PSAwLjkuMCk8YnIvPgogKiBBdXRoZW50aWNhdGUgb3ZlciBTU0ggdXNpbmcgYSBwbGFpbiBwYXNzd29yZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNzaDItYXV0aC1wYXNzd29yZC5waHAKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIDxwPgogKiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSA8cD4KICogUmVtb3RlIHVzZXIgbmFtZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCA8cD4KICogUGFzc3dvcmQgZm9yIHVzZXJuYW1lCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3NoMl9hdXRoX3Bhc3N3b3JkKCRzZXNzaW9uLCAkdXNlcm5hbWUsICRwYXNzd29yZCkge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuOS4wKTxici8+CiAqIEF1dGhlbnRpY2F0ZSB1c2luZyBhIHB1YmxpYyBrZXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zc2gyLWF1dGgtcHVia2V5LWZpbGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiA8cD4KICogQW4gU1NIIGNvbm5lY3Rpb24gbGluayBpZGVudGlmaWVyLCBvYnRhaW5lZCBmcm9tIGEgY2FsbCB0bwogKiBzc2gyX2Nvbm5lY3QuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgPHA+CiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcHVia2V5ZmlsZSA8cD4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwcml2a2V5ZmlsZSA8cD4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXNzcGhyYXNlIFtvcHRpb25hbF0gPHA+CiAqIElmIHByaXZrZXlmaWxlIGlzIGVuY3J5cHRlZCAod2hpY2ggaXQgc2hvdWxkCiAqIGJlKSwgdGhlIHBhc3NwaHJhc2UgbXVzdCBiZSBwcm92aWRlZC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzc2gyX2F1dGhfcHVia2V5X2ZpbGUoJHNlc3Npb24sICR1c2VybmFtZSwgJHB1YmtleWZpbGUsICRwcml2a2V5ZmlsZSwgJHBhc3NwaHJhc2UgPSBudWxsKSB7fQoKLyoqCiAqIChQRUNMIHNzaDIgJmd0Oz0gMC45LjApPGJyLz4KICogQXV0aGVudGljYXRlIHVzaW5nIGEgcHVibGljIGhvc3RrZXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zc2gyLWF1dGgtaG9zdGJhc2VkLWZpbGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiA8cD4KICogQW4gU1NIIGNvbm5lY3Rpb24gbGluayBpZGVudGlmaWVyLCBvYnRhaW5lZCBmcm9tIGEgY2FsbCB0bwogKiBzc2gyX2Nvbm5lY3QuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgPHA+CiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkaG9zdG5hbWUgPHA+CiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcHVia2V5ZmlsZSA8cD4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwcml2a2V5ZmlsZSA8cD4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXNzcGhyYXNlIFtvcHRpb25hbF0gPHA+CiAqIElmIHByaXZrZXlmaWxlIGlzIGVuY3J5cHRlZCAod2hpY2ggaXQgc2hvdWxkCiAqIGJlKSwgdGhlIHBhc3NwaHJhc2UgbXVzdCBiZSBwcm92aWRlZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRsb2NhbF91c2VybmFtZSBbb3B0aW9uYWxdIDxwPgogKiBJZiBsb2NhbF91c2VybmFtZSBpcyBvbWl0dGVkLCB0aGVuIHRoZSB2YWx1ZQogKiBmb3IgdXNlcm5hbWUgd2lsbCBiZSB1c2VkIGZvciBpdC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzc2gyX2F1dGhfaG9zdGJhc2VkX2ZpbGUoJHNlc3Npb24sICR1c2VybmFtZSwgJGhvc3RuYW1lLCAkcHVia2V5ZmlsZSwgJHByaXZrZXlmaWxlLCAkcGFzc3BocmFzZSA9IG51bGwsICRsb2NhbF91c2VybmFtZSA9IG51bGwpIHt9CgpmdW5jdGlvbiBzc2gyX2ZvcndhcmRfbGlzdGVuKCkge30KCmZ1bmN0aW9uIHNzaDJfZm9yd2FyZF9hY2NlcHQoKSB7fQoKLyoqCiAqIChQRUNMIHNzaDIgJmd0Oz0gMC45LjApPGJyLz4KICogUmVxdWVzdCBhbiBpbnRlcmFjdGl2ZSBzaGVsbAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNzaDItc2hlbGwucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiA8cD4KICogQW4gU1NIIGNvbm5lY3Rpb24gbGluayBpZGVudGlmaWVyLCBvYnRhaW5lZCBmcm9tIGEgY2FsbCB0bwogKiBzc2gyX2Nvbm5lY3QuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdGVybV90eXBlIFtvcHRpb25hbF0gPHA+CiAqIHRlcm1fdHlwZSBzaG91bGQgY29ycmVzcG9uZCB0byBvbmUgb2YgdGhlCiAqIGVudHJpZXMgaW4gdGhlIHRhcmdldCBzeXN0ZW0ncyAvZXRjL3Rlcm1jYXAgZmlsZS4KICogPC9wPgogKiBAcGFyYW0gbnVsbHxhcnJheSAkZW52IFtvcHRpb25hbF0gPHA+CiAqIGVudiBtYXkgYmUgcGFzc2VkIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mCiAqIG5hbWUvdmFsdWUgcGFpcnMgdG8gc2V0IGluIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQuCiAqIDwvcD4KICogQHBhcmFtIG51bGx8aW50ICR3aWR0aCBbb3B0aW9uYWxdIDxwPgogKiBXaWR0aCBvZiB0aGUgdmlydHVhbCB0ZXJtaW5hbC4KICogPC9wPgogKiBAcGFyYW0gbnVsbHxpbnQgJGhlaWdodCBbb3B0aW9uYWxdIDxwPgogKiBIZWlnaHQgb2YgdGhlIHZpcnR1YWwgdGVybWluYWwuCiAqIDwvcD4KICogQHBhcmFtIG51bGx8aW50ICR3aWR0aF9oZWlnaHRfdHlwZSBbb3B0aW9uYWxdIDxwPgogKiB3aWR0aF9oZWlnaHRfdHlwZSBzaG91bGQgYmUgb25lIG9mCiAqIFNTSDJfVEVSTV9VTklUX0NIQVJTIG9yCiAqIFNTSDJfVEVSTV9VTklUX1BJWEVMUy4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlCiAqLwpmdW5jdGlvbiBzc2gyX3NoZWxsKCRzZXNzaW9uLCAkdGVybV90eXBlID0gbnVsbCwgP2FycmF5ICRlbnYgPSBudWxsLCAkd2lkdGggPSBudWxsLCAkaGVpZ2h0ID0gbnVsbCwgJHdpZHRoX2hlaWdodF90eXBlID0gbnVsbCkge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuOS4wKTxici8+CiAqIEV4ZWN1dGUgYSBjb21tYW5kIG9uIGEgcmVtb3RlIHNlcnZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNzaDItZXhlYy5waHAKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIDxwPgogKiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRjb21tYW5kIDxwPgogKiA8L3A+CiAqIEBwYXJhbSBudWxsfHN0cmluZyAkcHR5IFtvcHRpb25hbF0gPHA+CiAqIDwvcD4KICogQHBhcmFtIG51bGx8YXJyYXkgJGVudiBbb3B0aW9uYWxdIDxwPgogKiBlbnYgbWF5IGJlIHBhc3NlZCBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZgogKiBuYW1lL3ZhbHVlIHBhaXJzIHRvIHNldCBpbiB0aGUgdGFyZ2V0IGVudmlyb25tZW50LgogKiA8L3A+CiAqIEBwYXJhbSBudWxsfGludCAkd2lkdGggW29wdGlvbmFsXSA8cD4KICogV2lkdGggb2YgdGhlIHZpcnR1YWwgdGVybWluYWwuCiAqIDwvcD4KICogQHBhcmFtIG51bGx8aW50ICRoZWlnaHQgW29wdGlvbmFsXSA8cD4KICogSGVpZ2h0IG9mIHRoZSB2aXJ0dWFsIHRlcm1pbmFsLgogKiA8L3A+CiAqIEBwYXJhbSBudWxsfGludCAkd2lkdGhfaGVpZ2h0X3R5cGUgW29wdGlvbmFsXSA8cD4KICogd2lkdGhfaGVpZ2h0X3R5cGUgc2hvdWxkIGJlIG9uZSBvZgogKiBTU0gyX1RFUk1fVU5JVF9DSEFSUyBvcgogKiBTU0gyX1RFUk1fVU5JVF9QSVhFTFMuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBhIHN0cmVhbSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzc2gyX2V4ZWMoJHNlc3Npb24sICRjb21tYW5kLCAkcHR5ID0gbnVsbCwgP2FycmF5ICRlbnYgPSBudWxsLCAkd2lkdGggPSBudWxsLCAkaGVpZ2h0ID0gbnVsbCwgJHdpZHRoX2hlaWdodF90eXBlID0gbnVsbCkge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuOS4wKTxici8+CiAqIE9wZW4gYSB0dW5uZWwgdGhyb3VnaCBhIHJlbW90ZSBzZXJ2ZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zc2gyLXR1bm5lbC5waHAKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIDxwPgogKiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRob3N0IDxwPgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHBvcnQgPHA+CiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZQogKi8KZnVuY3Rpb24gc3NoMl90dW5uZWwoJHNlc3Npb24sICRob3N0LCAkcG9ydCkge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuOS4wKTxici8+CiAqIFJlcXVlc3QgYSBmaWxlIHZpYSBTQ1AKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zc2gyLXNjcC1yZWN2LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNlc3Npb24gPHA+CiAqIEFuIFNTSCBjb25uZWN0aW9uIGxpbmsgaWRlbnRpZmllciwgb2J0YWluZWQgZnJvbSBhIGNhbGwgdG8KICogc3NoMl9jb25uZWN0LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHJlbW90ZV9maWxlIDxwPgogKiBQYXRoIHRvIHRoZSByZW1vdGUgZmlsZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRsb2NhbF9maWxlIDxwPgogKiBQYXRoIHRvIHRoZSBsb2NhbCBmaWxlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHNzaDJfc2NwX3JlY3YoJHNlc3Npb24sICRyZW1vdGVfZmlsZSwgJGxvY2FsX2ZpbGUpIHt9CgovKioKICogKFBFQ0wgc3NoMiAmZ3Q7PSAwLjkuMCk8YnIvPgogKiBTZW5kIGEgZmlsZSB2aWEgU0NQCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3NoMi1zY3Atc2VuZC5waHAKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIDxwPgogKiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRsb2NhbF9maWxlIDxwPgogKiBQYXRoIHRvIHRoZSBsb2NhbCBmaWxlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHJlbW90ZV9maWxlIDxwPgogKiBQYXRoIHRvIHRoZSByZW1vdGUgZmlsZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRjcmVhdGVfbW9kZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGUgbW9kZSBzcGVjaWZpZWQgYnkKICogY3JlYXRlX21vZGUuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3NoMl9zY3Bfc2VuZCgkc2Vzc2lvbiwgJGxvY2FsX2ZpbGUsICRyZW1vdGVfZmlsZSwgJGNyZWF0ZV9tb2RlID0gbnVsbCkge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuOS4wKTxici8+CiAqIEZldGNoIGFuIGV4dGVuZGVkIGRhdGEgc3RyZWFtCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3NoMi1mZXRjaC1zdHJlYW0ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY2hhbm5lbCA8cD4KICogPC9wPgogKiBAcGFyYW0gaW50ICRzdHJlYW1pZCA8cD4KICogQW4gU1NIMiBjaGFubmVsIHN0cmVhbS4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlIHRoZSByZXF1ZXN0ZWQgc3RyZWFtIHJlc291cmNlLgogKi8KZnVuY3Rpb24gc3NoMl9mZXRjaF9zdHJlYW0oJGNoYW5uZWwsICRzdHJlYW1pZCkge30KCi8qKgogKiBAcGFyYW0gYXJyYXkgJiR2YXIxCiAqLwpmdW5jdGlvbiBzc2gyX3BvbGwoJiR2YXIxKSB7fQoKLyoqCiAqIChQRUNMIHNzaDIgJmd0Oz0gMC45LjApPGJyLz4KICogSW5pdGlhbGl6ZSBTRlRQIHN1YnN5c3RlbQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNzaDItc2Z0cC5waHAKICogQHBhcmFtIHJlc291cmNlICRzZXNzaW9uIDxwPgogKiBBbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvCiAqIHNzaDJfY29ubmVjdC4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gU1NIMiBTRlRQIHJlc291cmNlIGZvciB1c2Ugd2l0aAogKiBhbGwgb3RoZXIgc3NoMl9zZnRwXyooKSBtZXRob2RzIGFuZCB0aGUKICogc3NoMi5zZnRwOi8vIGZvcGVuIHdyYXBwZXIuCiAqLwpmdW5jdGlvbiBzc2gyX3NmdHAoJHNlc3Npb24pIHt9CgovKioKICogKFBFQ0wgc3NoMiAmZ3Q7PSAwLjkuMCk8YnIvPgogKiBSZW5hbWUgYSByZW1vdGUgZmlsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNzaDItc2Z0cC1yZW5hbWUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Z0cCA8cD4KICogQW4gU1NIMiBTRlRQIHJlc291cmNlIG9wZW5lZCBieSBzc2gyX3NmdHAuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZnJvbSA8cD4KICogVGhlIGN1cnJlbnQgZmlsZSB0aGF0IGlzIGJlaW5nIHJlbmFtZWQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdG8gPHA+CiAqIFRoZSBuZXcgZmlsZSBuYW1lIHRoYXQgcmVwbGFjZXMgZnJvbS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzc2gyX3NmdHBfcmVuYW1lKCRzZnRwLCAkZnJvbSwgJHRvKSB7fQoKLyoqCiAqIChQRUNMIHNzaDIgJmd0Oz0gMC45LjApPGJyLz4KICogRGVsZXRlIGEgZmlsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNzaDItc2Z0cC11bmxpbmsucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Z0cCA8cD4KICogQW4gU1NIMiBTRlRQIHJlc291cmNlIG9wZW5lZCBieSBzc2gyX3NmdHAuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3NoMl9zZnRwX3VubGluaygkc2Z0cCwgJGZpbGVuYW1lKSB7fQoKLyoqCiAqIChQRUNMIHNzaDIgJmd0Oz0gMC45LjApPGJyLz4KICogQ3JlYXRlIGEgZGlyZWN0b3J5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3NoMi1zZnRwLW1rZGlyLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNmdHAgPHA+CiAqIEFuIFNTSDIgU0ZUUCByZXNvdXJjZSBvcGVuZWQgYnkgc3NoMl9zZnRwLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGRpcm5hbWUgPHA+CiAqIFBhdGggb2YgdGhlIG5ldyBkaXJlY3RvcnkuCiAqIDwvcD4KICogQHBhcmFtIGludCAkbW9kZSBbb3B0aW9uYWxdIDxwPgogKiBQZXJtaXNzaW9ucyBvbiB0aGUgbmV3IGRpcmVjdG9yeS4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkcmVjdXJzaXZlIFtvcHRpb25hbF0gPHA+CiAqIElmIHJlY3Vyc2l2ZSBpcyB0cnVlIGFueSBwYXJlbnQgZGlyZWN0b3JpZXMKICogcmVxdWlyZWQgZm9yIGRpcm5hbWUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYXMgd2VsbC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzc2gyX3NmdHBfbWtkaXIoJHNmdHAsICRkaXJuYW1lLCAkbW9kZSA9IG51bGwsICRyZWN1cnNpdmUgPSBudWxsKSB7fQoKLyoqCiAqIChQRUNMIHNzaDIgJmd0Oz0gMC45LjApPGJyLz4KICogUmVtb3ZlIGEgZGlyZWN0b3J5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3NoMi1zZnRwLXJtZGlyLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNmdHAgPHA+CiAqIEFuIFNTSDIgU0ZUUCByZXNvdXJjZSBvcGVuZWQgYnkgc3NoMl9zZnRwLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGRpcm5hbWUgPHA+CiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3NoMl9zZnRwX3JtZGlyKCRzZnRwLCAkZGlybmFtZSkge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuOS4wKTxici8+CiAqIFN0YXQgYSBmaWxlIG9uIGEgcmVtb3RlIGZpbGVzeXN0ZW0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zc2gyLXNmdHAtc3RhdC5waHAKICogQHBhcmFtIHJlc291cmNlICRzZnRwIDxwPgogKiBBbiBTU0gyIFNGVFAgcmVzb3VyY2Ugb3BlbmVkIGJ5IHNzaDJfc2Z0cC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBzdGF0IGZvciBkZXRhaWxzIG9uIHRoZQogKiB2YWx1ZXMgd2hpY2ggbWF5IGJlIHJldHVybmVkLgogKi8KZnVuY3Rpb24gc3NoMl9zZnRwX3N0YXQoJHNmdHAsICRwYXRoKSB7fQoKLyoqCiAqIChQRUNMIHNzaDIgJmd0Oz0gMC45LjApPGJyLz4KICogU3RhdCBhIHN5bWJvbGljIGxpbmsKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zc2gyLXNmdHAtbHN0YXQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Z0cCA8cD4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogKiBQYXRoIHRvIHRoZSByZW1vdGUgc3ltYm9saWMgbGluay4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5IFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3Igc3RhdCBmb3IgZGV0YWlscyBvbiB0aGUKICogdmFsdWVzIHdoaWNoIG1heSBiZSByZXR1cm5lZC4KICovCmZ1bmN0aW9uIHNzaDJfc2Z0cF9sc3RhdCgkc2Z0cCwgJHBhdGgpIHt9CgovKioKICogKFBFQ0wgc3NoMiAmZ3Q7PSAwLjkuMCk8YnIvPgogKiBDcmVhdGUgYSBzeW1saW5rCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3NoMi1zZnRwLXN5bWxpbmsucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Z0cCA8cD4KICogQW4gU1NIMiBTRlRQIHJlc291cmNlIG9wZW5lZCBieSBzc2gyX3NmdHAuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdGFyZ2V0IDxwPgogKiBUYXJnZXQgb2YgdGhlIHN5bWJvbGljIGxpbmsuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbGluayA8cD4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzc2gyX3NmdHBfc3ltbGluaygkc2Z0cCwgJHRhcmdldCwgJGxpbmspIHt9CgovKioKICogKFBFQ0wgc3NoMiAmZ3Q7PSAwLjkuMCk8YnIvPgogKiBSZXR1cm4gdGhlIHRhcmdldCBvZiBhIHN5bWJvbGljIGxpbmsKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zc2gyLXNmdHAtcmVhZGxpbmsucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Z0cCA8cD4KICogQW4gU1NIMiBTRlRQIHJlc291cmNlIG9wZW5lZCBieSBzc2gyX3NmdHAuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbGluayA8cD4KICogUGF0aCBvZiB0aGUgc3ltYm9saWMgbGluay4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyB0aGUgdGFyZ2V0IG9mIHRoZSBzeW1ib2xpYyBsaW5rLgogKi8KZnVuY3Rpb24gc3NoMl9zZnRwX3JlYWRsaW5rKCRzZnRwLCAkbGluaykge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuOS4wKTxici8+CiAqIFJlc29sdmUgdGhlIHJlYWxwYXRoIG9mIGEgcHJvdmlkZWQgcGF0aCBzdHJpbmcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zc2gyLXNmdHAtcmVhbHBhdGgucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc2Z0cCA8cD4KICogQW4gU1NIMiBTRlRQIHJlc291cmNlIG9wZW5lZCBieSBzc2gyX3NmdHAuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgdGhlIHJlYWwgcGF0aCBhcyBhIHN0cmluZy4KICovCmZ1bmN0aW9uIHNzaDJfc2Z0cF9yZWFscGF0aCgkc2Z0cCwgJGZpbGVuYW1lKSB7fQoKLyoqCiAqIChQRUNMIHNzaDIgJmd0Oz0gMC4xMCk8YnIvPgogKiBJbml0aWFsaXplIFB1YmxpY2tleSBzdWJzeXN0ZW0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zc2gyLXB1YmxpY2tleS1pbml0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNlc3Npb24gPHA+CiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBhbiBTU0gyIFB1YmxpY2tleSBTdWJzeXN0ZW0gcmVzb3VyY2UgZm9yIHVzZQogKiB3aXRoIGFsbCBvdGhlciBzc2gyX3B1YmxpY2tleV8qKCkgbWV0aG9kcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gc3NoMl9wdWJsaWNrZXlfaW5pdCgkc2Vzc2lvbikge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuMTApPGJyLz4KICogQWRkIGFuIGF1dGhvcml6ZWQgcHVibGlja2V5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3NoMi1wdWJsaWNrZXktYWRkLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHBrZXkgPHA+CiAqIFB1YmxpY2tleSBTdWJzeXN0ZW0gcmVzb3VyY2UgY3JlYXRlZCBieSBzc2gyX3B1YmxpY2tleV9pbml0LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGFsZ29uYW1lIDxwPgogKiBQdWJsaWNrZXkgYWxnb3JpdGhtIChlLmcuKTogc3NoLWRzcywgc3NoLXJzYQogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGJsb2IgPHA+CiAqIFB1YmxpY2tleSBibG9iIGFzIHJhdyBiaW5hcnkgZGF0YQogKiA8L3A+CiAqIEBwYXJhbSBudWxsfGJvb2wgJG92ZXJ3cml0ZSBbb3B0aW9uYWxdIDxwPgogKiBJZiB0aGUgc3BlY2lmaWVkIGtleSBhbHJlYWR5IGV4aXN0cywgc2hvdWxkIGl0IGJlIG92ZXJ3cml0dGVuPwogKiA8L3A+CiAqIEBwYXJhbSBudWxsfGFycmF5ICRhdHRyaWJ1dGVzIFtvcHRpb25hbF0gPHA+CiAqIEFzc29jaWF0aXZlIGFycmF5IG9mIGF0dHJpYnV0ZXMgdG8gYXNzaWduIHRvIHRoaXMgcHVibGljIGtleS4KICogUmVmZXIgdG8gaWV0Zi1zZWNzaC1wdWJsaWNrZXktc3Vic3lzdGVtIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGF0dHJpYnV0ZXMuCiAqIFRvIG1hcmsgYW4gYXR0cmlidXRlIGFzIG1hbmRhdG9yeSwgcHJlY2VkZSBpdHMgbmFtZSB3aXRoIGFuIGFzdGVyaXNrLgogKiBJZiB0aGUgc2VydmVyIGlzIHVuYWJsZSB0byBzdXBwb3J0IGFuIGF0dHJpYnV0ZSBtYXJrZWQgbWFuZGF0b3J5LAogKiBpdCB3aWxsIGFib3J0IHRoZSBhZGQgcHJvY2Vzcy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzc2gyX3B1YmxpY2tleV9hZGQoJHBrZXksICRhbGdvbmFtZSwgJGJsb2IsICRvdmVyd3JpdGUgPSBudWxsLCA/YXJyYXkgJGF0dHJpYnV0ZXMgPSBudWxsKSB7fQoKLyoqCiAqIChQRUNMIHNzaDIgJmd0Oz0gMC4xMCk8YnIvPgogKiBSZW1vdmUgYW4gYXV0aG9yaXplZCBwdWJsaWNrZXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zc2gyLXB1YmxpY2tleS1yZW1vdmUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcGtleSA8cD4KICogUHVibGlja2V5IFN1YnN5c3RlbSBSZXNvdXJjZQogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGFsZ29uYW1lIDxwPgogKiBQdWJsaWNrZXkgYWxnb3JpdGhtIChlLmcuKTogc3NoLWRzcywgc3NoLXJzYQogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGJsb2IgPHA+CiAqIFB1YmxpY2tleSBibG9iIGFzIHJhdyBiaW5hcnkgZGF0YQogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHNzaDJfcHVibGlja2V5X3JlbW92ZSgkcGtleSwgJGFsZ29uYW1lLCAkYmxvYikge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuMTApPGJyLz4KICogTGlzdCBjdXJyZW50bHkgYXV0aG9yaXplZCBwdWJsaWNrZXlzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3NoMi1wdWJsaWNrZXktbGlzdC5waHAKICogQHBhcmFtIHJlc291cmNlICRwa2V5IDxwPgogKiBQdWJsaWNrZXkgU3Vic3lzdGVtIHJlc291cmNlCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBhIG51bWVyaWNhbGx5IGluZGV4ZWQgYXJyYXkgb2Yga2V5cywKICogZWFjaCBvZiB3aGljaCBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nOgogKiBuYW1lLCBibG9iLCBhbmQgYXR0cnMgZWxlbWVudHMuCiAqIDwvcD4KICogPHA+CiAqIDx0YWJsZT4KICogUHVibGlja2V5IGVsZW1lbnRzCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5BcnJheSBLZXk8L3RkPgogKiA8dGQ+TWVhbmluZzwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5uYW1lPC90ZD4KICogPHRkPk5hbWUgb2YgYWxnb3JpdGhtIHVzZWQgYnkgdGhpcyBwdWJsaWNrZXksIGZvciBleGFtcGxlOgogKiBzc2gtZHNzIG9yIHNzaC1yc2EuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmJsb2I8L3RkPgogKiA8dGQ+UHVibGlja2V5IGJsb2IgYXMgcmF3IGJpbmFyeSBkYXRhLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5hdHRyczwvdGQ+CiAqIDx0ZD5BdHRyaWJ1dGVzIGFzc2lnbmVkIHRvIHRoaXMgcHVibGlja2V5LiBUaGUgbW9zdCBjb21tb24KICogYXR0cmlidXRlLCBhbmQgdGhlIG9ubHkgb25lIHN1cHBvcnRlZCBieSBwdWJsaWNrZXkgdmVyc2lvbiAxCiAqIHNlcnZlcnMsIGlzIGNvbW1lbnQsIHdoaWNoIG1heSBiZSBhbnkgZnJlZWZvcm0KICogc3RyaW5nLjwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqLwpmdW5jdGlvbiBzc2gyX3B1YmxpY2tleV9saXN0KCRwa2V5KSB7fQoKLyoqCiAqIChQRUNMIHNzaDIgJmd0Oz0gMC4xMik8YnIvPgogKiBzc2gyX3NmdHBfY2htb2Qg4oCUIENoYW5nZXMgZmlsZSBtb2RlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3NoMi1zZnRwLWNobW9kLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHNmdHAgPHA+QW4gU1NIMiBTRlRQIHJlc291cmNlIG9wZW5lZCBieSBzc2gyX3NmdHAoKS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIDxwPlBhdGggdG8gdGhlIGZpbGUuPC9wPgogKiBAcGFyYW0gaW50ICRtb2RlIDxwPlBlcm1pc3Npb25zIG9uIHRoZSBmaWxlLiBTZWUgdGhlIGNobW9kKCkgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGlzIHBhcmFtZXRlci48L3A+CiAqIEByZXR1cm4gYm9vbCA8cD5SZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLjwvcD4KICovCmZ1bmN0aW9uIHNzaDJfc2Z0cF9jaG1vZCgkc2Z0cCwgJGZpbGVuYW1lLCAkbW9kZSkge30KCi8qKgogKiAoUEVDTCBzc2gyICZndDs9IDAuMTIpPGJyLz4KICogc3NoMl9hdXRoX2FnZW50IOKAlCBBdXRoZW50aWNhdGUgb3ZlciBTU0ggdXNpbmcgdGhlIHNzaCBhZ2VudAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNzaDItYXV0aC1hZ2VudC5waHAKICogPHA+CiAqIEF1dGhlbnRpY2F0ZSBvdmVyIFNTSCB1c2luZyB0aGUgc3NoIGFnZW50CiAqIDwvcD4KICogPHA+CiAqIE5vdGU6IFRoZSBzc2gyX2F1dGhfYWdlbnQoKSBmdW5jdGlvbiB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIHdoZW4gdGhlIHNzaDIgZXh0ZW5zaW9uIGlzIGNvbXBpbGVkIHdpdGggbGlic3NoID49IDEuMi4zLgogKiA8L3A+CiAqIEBwYXJhbSByZXNvdXJjZSAkc2Vzc2lvbiA8cD5BbiBTU0ggY29ubmVjdGlvbiBsaW5rIGlkZW50aWZpZXIsIG9idGFpbmVkIGZyb20gYSBjYWxsIHRvIHNzaDJfY29ubmVjdCgpLjwvcD4KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgPHA+UmVtb3RlIHVzZXIgbmFtZS48L3A+CiAqIEByZXR1cm4gYm9vbCA8cD5SZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLjwvcD4KICovCmZ1bmN0aW9uIHNzaDJfYXV0aF9hZ2VudCgkc2Vzc2lvbiwgJHVzZXJuYW1lKSB7fQoKLyoqCiAqIChQRUNMIHNzaDIgPj0gMS4wKTxici8+CiAqIFNlbmQgZW5kLW9mLWZpbGUgc2lnbmFsIHRocm91Z2ggYW4gU1NIMiBjaGFubmVsCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkY2hhbm5lbCA8cD4KICogVGhlIFNTSDIgY2hhbm5lbCByZXNvdXJjZSBjcmVhdGVkIGJ5IHNzaDJfc2hlbGwsCiAqIHNzaDJfZXhlYywgb3Igc3NoMl90dW5uZWwuCiAqIDwvcD4KICoKICogQHJldHVybiBib29sIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3NoMi1zZW5kLWVvZi5waHAKICovCmZ1bmN0aW9uIHNzaDJfc2VuZF9lb2YoJGNoYW5uZWwpOiBib29sIHt9CgovKioKICogRmxhZyB0byBzc2gyX2ZpbmdlcnByaW50IHJlcXVlc3RpbmcgaG9zdGtleQogKiBmaW5nZXJwcmludCBhcyBhbiBNRDUgaGFzaC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zc2gyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1NIMl9GSU5HRVJQUklOVF9NRDUnLCAwKTsKCi8qKgogKiBGbGFnIHRvIHNzaDJfZmluZ2VycHJpbnQgcmVxdWVzdGluZyBob3N0a2V5CiAqIGZpbmdlcnByaW50IGFzIGFuIFNIQTEgaGFzaC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zc2gyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1NIMl9GSU5HRVJQUklOVF9TSEExJywgMSk7CgovKioKICogRmxhZyB0byBzc2gyX2ZpbmdlcnByaW50IHJlcXVlc3RpbmcgaG9zdGtleQogKiBmaW5nZXJwcmludCBhcyBhIHN0cmluZyBvZiBoZXhpdHMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3NoMi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NTSDJfRklOR0VSUFJJTlRfSEVYJywgMCk7CgovKioKICogRmxhZyB0byBzc2gyX2ZpbmdlcnByaW50IHJlcXVlc3RpbmcgaG9zdGtleQogKiBmaW5nZXJwcmludCBhcyBhIHJhdyBzdHJpbmcgb2YgOC1iaXQgY2hhcmFjdGVycy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zc2gyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1NIMl9GSU5HRVJQUklOVF9SQVcnLCAyKTsKCi8qKgogKiBGbGFnIHRvIHNzaDJfc2hlbGwgc3BlY2lmeWluZyB0aGF0CiAqIHdpZHRoIGFuZCBoZWlnaHQKICogYXJlIHByb3ZpZGVkIGFzIGNoYXJhY3RlciBzaXplcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zc2gyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1NIMl9URVJNX1VOSVRfQ0hBUlMnLCAwKTsKCi8qKgogKiBGbGFnIHRvIHNzaDJfc2hlbGwgc3BlY2lmeWluZyB0aGF0CiAqIHdpZHRoIGFuZCBoZWlnaHQKICogYXJlIHByb3ZpZGVkIGluIHBpeGVsIHVuaXRzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NzaDIuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTU0gyX1RFUk1fVU5JVF9QSVhFTFMnLCAxKTsKCi8qKgogKiBEZWZhdWx0IHRlcm1pbmFsIHR5cGUgKGUuZy4gdnQxMDIsIGFuc2ksIHh0ZXJtLCB2YW5pbGxhKSByZXF1ZXN0ZWQKICogYnkgc3NoMl9zaGVsbC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zc2gyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1NIMl9ERUZBVUxUX1RFUk1JTkFMJywgInZhbmlsbGEiKTsKCi8qKgogKiBEZWZhdWx0IHRlcm1pbmFsIHdpZHRoIHJlcXVlc3RlZCBieSBzc2gyX3NoZWxsLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NzaDIuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTU0gyX0RFRkFVTFRfVEVSTV9XSURUSCcsIDgwKTsKCi8qKgogKiBEZWZhdWx0IHRlcm1pbmFsIGhlaWdodCByZXF1ZXN0ZWQgYnkgc3NoMl9zaGVsbC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zc2gyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1NIMl9ERUZBVUxUX1RFUk1fSEVJR0hUJywgMjUpOwoKLyoqCiAqIERlZmF1bHQgdGVybWluYWwgdW5pdHMgcmVxdWVzdGVkIGJ5IHNzaDJfc2hlbGwuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3NoMi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NTSDJfREVGQVVMVF9URVJNX1VOSVQnLCAwKTsKCi8qKgogKiBGbGFnIHRvIHNzaDJfZmV0Y2hfc3RyZWFtIHJlcXVlc3RpbmcgU1RESU8gc3ViY2hhbm5lbC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zc2gyLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1NIMl9TVFJFQU1fU1RESU8nLCAwKTsKCi8qKgogKiBGbGFnIHRvIHNzaDJfZmV0Y2hfc3RyZWFtIHJlcXVlc3RpbmcgU1RERVJSIHN1YmNoYW5uZWwuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3NoMi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NTSDJfU1RSRUFNX1NUREVSUicsIDEpOwpkZWZpbmUoJ1NTSDJfUE9MTElOJywgMSk7CmRlZmluZSgnU1NIMl9QT0xMRVhUJywgMik7CmRlZmluZSgnU1NIMl9QT0xMT1VUJywgNCk7CmRlZmluZSgnU1NIMl9QT0xMRVJSJywgOCk7CmRlZmluZSgnU1NIMl9QT0xMSFVQJywgMTYpOwpkZWZpbmUoJ1NTSDJfUE9MTE5WQUwnLCAzMik7CmRlZmluZSgnU1NIMl9QT0xMX1NFU1NJT05fQ0xPU0VEJywgMTYpOwpkZWZpbmUoJ1NTSDJfUE9MTF9DSEFOTkVMX0NMT1NFRCcsIDEyOCk7CmRlZmluZSgnU1NIMl9QT0xMX0xJU1RFTkVSX0NMT1NFRCcsIDEyOCk7Cjw/cGhwCgpuYW1lc3BhY2UgRWxhc3RpY1xBcG07CgovKioKICogQ2xhc3MgRWxhc3RpY0FwbSBpcyBhIGZhY2FkZSAoYXMgaW4gRmFjYWRlIGRlc2lnbiBwYXR0ZXJuKSB0byB0aGUgcmVzdCBvZiBFbGFzdGljIEFQTSBwdWJsaWMgQVBJLgogKi8KZmluYWwgY2xhc3MgRWxhc3RpY0FwbQp7CiAgICBwdWJsaWMgY29uc3QgVkVSU0lPTiA9ICcxLjMuMSc7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBCZWdpbnMgYSBuZXcgdHJhbnNhY3Rpb24gYW5kIHNldHMgaXQgYXMgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICRuYW1lICAgICAgICAgICAgICAgICAgICAgIE5ldyB0cmFuc2FjdGlvbidzIG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAkdHlwZSAgICAgICAgICAgICAgICAgICAgICBOZXcgdHJhbnNhY3Rpb24ncyB0eXBlCiAgICAgKiBAcGFyYW0gZmxvYXR8bnVsbCAgJHRpbWVzdGFtcCAgICAgICAgICAgICAgICAgU3RhcnQgdGltZSBvZiB0aGUgbmV3IHRyYW5zYWN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHNlcmlhbGl6ZWREaXN0VHJhY2luZ0RhdGEgLSBERVBSRUNBVEVEIHNpbmNlIHZlcnNpb24gMS4zIC0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgbmV3VHJhbnNhY3Rpb24oKS0+ZGlzdHJpYnV0ZWRUcmFjaW5nSGVhZGVyRXh0cmFjdG9yKCkgaW5zdGVhZAogICAgICoKICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb25JbnRlcmZhY2UgTmV3IHRyYW5zYWN0aW9uCiAgICAgKgogICAgICogQHNlZSBUcmFuc2FjdGlvbkludGVyZmFjZTo6c2V0TmFtZSgpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKiBAc2VlIFRyYW5zYWN0aW9uSW50ZXJmYWNlOjpzZXRUeXBlKCkgRm9yIHRoZSBkZXNjcmlwdGlvbi4KICAgICAqIEBzZWUgVHJhbnNhY3Rpb25JbnRlcmZhY2U6OmdldFRpbWVzdGFtcCgpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYmVnaW5DdXJyZW50VHJhbnNhY3Rpb24oCiAgICAgICAgc3RyaW5nICRuYW1lLAogICAgICAgIHN0cmluZyAkdHlwZSwKICAgICAgICA/ZmxvYXQgJHRpbWVzdGFtcCA9IG51bGwsCiAgICAgICAgP3N0cmluZyAkc2VyaWFsaXplZERpc3RUcmFjaW5nRGF0YSA9IG51bGwKICAgICk6IFRyYW5zYWN0aW9uSW50ZXJmYWNlIHt9CgogICAgLyoqCiAgICAgKiBCZWdpbnMgYSBuZXcgdHJhbnNhY3Rpb24sIHNldHMgYXMgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sCiAgICAgKiBydW5zIHRoZSBwcm92aWRlZCBjYWxsYmFjayBhcyB0aGUgbmV3IHRyYW5zYWN0aW9uIGFuZCBhdXRvbWF0aWNhbGx5IGVuZHMgdGhlIG5ldyB0cmFuc2FjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJG5hbWUgICAgICBOZXcgdHJhbnNhY3Rpb24ncyBuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHR5cGUgICAgICBOZXcgdHJhbnNhY3Rpb24ncyB0eXBlCiAgICAgKiBAcGFyYW0gXENsb3N1cmUgICAgICRjYWxsYmFjayAgQ2FsbGJhY2sgdG8gZXhlY3V0ZSBhcyB0aGUgbmV3IHRyYW5zYWN0aW9uCiAgICAgKiBAcGFyYW0gZmxvYXR8bnVsbCAgJHRpbWVzdGFtcCBTdGFydCB0aW1lIG9mIHRoZSBuZXcgdHJhbnNhY3Rpb24KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2VyaWFsaXplZERpc3RUcmFjaW5nRGF0YSAtIERFUFJFQ0FURUQgc2luY2UgdmVyc2lvbiAxLjMgLQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBuZXdUcmFuc2FjdGlvbigpLT5kaXN0cmlidXRlZFRyYWNpbmdIZWFkZXJFeHRyYWN0b3IoKSBpbnN0ZWFkCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBUaGUgcmV0dXJuIHZhbHVlIG9mICRjYWxsYmFjawogICAgICoKICAgICAqIEBzZWUgICAgICAgICAgICAgVHJhbnNhY3Rpb25JbnRlcmZhY2U6OnNldE5hbWUoKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICogQHNlZSAgICAgICAgICAgICBUcmFuc2FjdGlvbkludGVyZmFjZTo6c2V0VHlwZSgpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKiBAc2VlICAgICAgICAgICAgIFRyYW5zYWN0aW9uSW50ZXJmYWNlOjpnZXRUaW1lc3RhbXAoKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhcHR1cmVDdXJyZW50VHJhbnNhY3Rpb24oCiAgICAgICAgc3RyaW5nICRuYW1lLAogICAgICAgIHN0cmluZyAkdHlwZSwKICAgICAgICBcQ2xvc3VyZSAkY2FsbGJhY2ssCiAgICAgICAgP2Zsb2F0ICR0aW1lc3RhbXAgPSBudWxsLAogICAgICAgID9zdHJpbmcgJHNlcmlhbGl6ZWREaXN0VHJhY2luZ0RhdGEgPSBudWxsCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb25JbnRlcmZhY2UgVGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDdXJyZW50VHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25JbnRlcmZhY2Uge30KCiAgICAvKioKICAgICAqIElmIHRoZXJlIGlzIHRoZSBjdXJyZW50IHNwYW4gdGhlbiBpdCByZXR1cm5zIHRoZSBjdXJyZW50IHNwYW4uCiAgICAgKiBPdGhlcndpc2UgaWYgdGhlcmUgaXMgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gdGhlbiBpdCByZXR1cm5zIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICAgICogT3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlIG5vb3AgZXhlY3V0aW9uIHNlZ21lbnQuCiAgICAgKgogICAgICogQHJldHVybiBFeGVjdXRpb25TZWdtZW50SW50ZXJmYWNlIFRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzZWdtZW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q3VycmVudEV4ZWN1dGlvblNlZ21lbnQoKTogRXhlY3V0aW9uU2VnbWVudEludGVyZmFjZSB7fQoKICAgIC8qKgogICAgICogQmVnaW5zIGEgbmV3IHRyYW5zYWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAkbmFtZSAgICAgIE5ldyB0cmFuc2FjdGlvbidzIG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAkdHlwZSAgICAgIE5ldyB0cmFuc2FjdGlvbidzIHR5cGUKICAgICAqIEBwYXJhbSBmbG9hdHxudWxsICAkdGltZXN0YW1wIFN0YXJ0IHRpbWUgb2YgdGhlIG5ldyB0cmFuc2FjdGlvbgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRzZXJpYWxpemVkRGlzdFRyYWNpbmdEYXRhIC0gREVQUkVDQVRFRCBzaW5jZSB2ZXJzaW9uIDEuMyAtCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlIG5ld1RyYW5zYWN0aW9uKCktPmRpc3RyaWJ1dGVkVHJhY2luZ0hlYWRlckV4dHJhY3RvcigpIGluc3RlYWQKICAgICAqCiAgICAgKiBAcmV0dXJuIFRyYW5zYWN0aW9uSW50ZXJmYWNlIE5ldyB0cmFuc2FjdGlvbgogICAgICoKICAgICAqIEBzZWUgVHJhbnNhY3Rpb25JbnRlcmZhY2U6OnNldE5hbWUoKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICogQHNlZSBUcmFuc2FjdGlvbkludGVyZmFjZTo6c2V0VHlwZSgpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKiBAc2VlIFRyYW5zYWN0aW9uSW50ZXJmYWNlOjpnZXRUaW1lc3RhbXAoKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJlZ2luVHJhbnNhY3Rpb24oCiAgICAgICAgc3RyaW5nICRuYW1lLAogICAgICAgIHN0cmluZyAkdHlwZSwKICAgICAgICA/ZmxvYXQgJHRpbWVzdGFtcCA9IG51bGwsCiAgICAgICAgP3N0cmluZyAkc2VyaWFsaXplZERpc3RUcmFjaW5nRGF0YSA9IG51bGwKICAgICk6IFRyYW5zYWN0aW9uSW50ZXJmYWNlIHt9CgogICAgLyoqCiAgICAgKiBCZWdpbnMgYSBuZXcgdHJhbnNhY3Rpb24sCiAgICAgKiBydW5zIHRoZSBwcm92aWRlZCBjYWxsYmFjayBhcyB0aGUgbmV3IHRyYW5zYWN0aW9uIGFuZCBhdXRvbWF0aWNhbGx5IGVuZHMgdGhlIG5ldyB0cmFuc2FjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJG5hbWUgICAgICBOZXcgdHJhbnNhY3Rpb24ncyBuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHR5cGUgICAgICBOZXcgdHJhbnNhY3Rpb24ncyB0eXBlCiAgICAgKiBAcGFyYW0gXENsb3N1cmUgICAgICRjYWxsYmFjayAgQ2FsbGJhY2sgdG8gZXhlY3V0ZSBhcyB0aGUgbmV3IHRyYW5zYWN0aW9uCiAgICAgKiBAcGFyYW0gZmxvYXR8bnVsbCAgJHRpbWVzdGFtcCBTdGFydCB0aW1lIG9mIHRoZSBuZXcgdHJhbnNhY3Rpb24KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2VyaWFsaXplZERpc3RUcmFjaW5nRGF0YSAtIERFUFJFQ0FURUQgc2luY2UgdmVyc2lvbiAxLjMgLQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBuZXdUcmFuc2FjdGlvbigpLT5kaXN0cmlidXRlZFRyYWNpbmdIZWFkZXJFeHRyYWN0b3IoKSBpbnN0ZWFkCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBUaGUgcmV0dXJuIHZhbHVlIG9mICRjYWxsYmFjawogICAgICoKICAgICAqIEBzZWUgICAgICAgICAgICAgVHJhbnNhY3Rpb25JbnRlcmZhY2U6OnNldE5hbWUoKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICogQHNlZSAgICAgICAgICAgICBUcmFuc2FjdGlvbkludGVyZmFjZTo6c2V0VHlwZSgpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKiBAc2VlICAgICAgICAgICAgIFRyYW5zYWN0aW9uSW50ZXJmYWNlOjpnZXRUaW1lc3RhbXAoKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhcHR1cmVUcmFuc2FjdGlvbigKICAgICAgICBzdHJpbmcgJG5hbWUsCiAgICAgICAgc3RyaW5nICR0eXBlLAogICAgICAgIFxDbG9zdXJlICRjYWxsYmFjaywKICAgICAgICA/ZmxvYXQgJHRpbWVzdGFtcCA9IG51bGwsCiAgICAgICAgP3N0cmluZyAkc2VyaWFsaXplZERpc3RUcmFjaW5nRGF0YSA9IG51bGwKICAgICkge30KCiAgICAvKioKICAgICAqIEFkdmFuY2VkIEFQSSB0byBiZWdpbiBhIG5ldyB0cmFuc2FjdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgTmV3IHRyYW5zYWN0aW9uJ3MgbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZSBOZXcgdHJhbnNhY3Rpb24ncyB0eXBlCiAgICAgKgogICAgICogQHJldHVybiBUcmFuc2FjdGlvbkJ1aWxkZXJJbnRlcmZhY2UgTmV3IHRyYW5zYWN0aW9uIGJ1aWxkZXIKICAgICAqCiAgICAgKiBAc2VlIFRyYW5zYWN0aW9uSW50ZXJmYWNlOjpzZXROYW1lKCkgRm9yIHRoZSBkZXNjcmlwdGlvbi4KICAgICAqIEBzZWUgVHJhbnNhY3Rpb25JbnRlcmZhY2U6OnNldFR5cGUoKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5ld1RyYW5zYWN0aW9uKHN0cmluZyAkbmFtZSwgc3RyaW5nICR0eXBlKTogVHJhbnNhY3Rpb25CdWlsZGVySW50ZXJmYWNlIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGFuIGVycm9yIGJhc2VkIG9uIHRoZSBnaXZlbiBUaHJvd2FibGUgaW5zdGFuY2UKICAgICAqIHdpdGggdGhlIGN1cnJlbnQgZXhlY3V0aW9uIHNlZ21lbnQgKGlmIHRoZXJlIGlzIG9uZSkgYXMgdGhlIHBhcmVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gXFRocm93YWJsZSAkdGhyb3dhYmxlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBJRCBvZiB0aGUgcmVwb3J0ZWQgZXJyb3IgZXZlbnQgb3IgbnVsbCBpZiBubyBldmVudCB3YXMgcmVwb3J0ZWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgIChmb3IgZXhhbXBsZSwgYmVjYXVzZSByZWNvcmRpbmcgaXMgZGlzYWJsZWQpCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvZXJyb3JzL2Vycm9yLmpzb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVFcnJvckZyb21UaHJvd2FibGUoXFRocm93YWJsZSAkdGhyb3dhYmxlKTogP3N0cmluZyB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhbiBlcnJvciBiYXNlZCBvbiB0aGUgZ2l2ZW4gZGF0YQogICAgICogd2l0aCB0aGUgY3VycmVudCBleGVjdXRpb24gc2VnbWVudCAoaWYgdGhlcmUgaXMgb25lKSBhcyB0aGUgcGFyZW50LgogICAgICoKICAgICAqIEBwYXJhbSBDdXN0b21FcnJvckRhdGEgJGN1c3RvbUVycm9yRGF0YQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgSUQgb2YgdGhlIHJlcG9ydGVkIGVycm9yIGV2ZW50IG9yIG51bGwgaWYgbm8gZXZlbnQgd2FzIHJlcG9ydGVkCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAoZm9yIGV4YW1wbGUsIGJlY2F1c2UgcmVjb3JkaW5nIGlzIGRpc2FibGVkKQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL2Vycm9ycy9lcnJvci5qc29uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tRXJyb3IoQ3VzdG9tRXJyb3JEYXRhICRjdXN0b21FcnJvckRhdGEpOiA/c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBQYXVzZXMgcmVjb3JkaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGF1c2VSZWNvcmRpbmcoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmVzdW1lcyByZWNvcmRpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXN1bWVSZWNvcmRpbmcoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgICAgICBEZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS4zIC0gdXNlIGluamVjdERpc3RyaWJ1dGVkVHJhY2luZ0hlYWRlcnMoKSBpbnN0ZWFkCiAgICAgKiBAc2VlICAgICAgICAgICAgIGluamVjdERpc3RyaWJ1dGVkVHJhY2luZ0hlYWRlcnMoKSBVc2UgaXQgaW5zdGVhZCBvZiB0aGlzIG1ldGhvZAogICAgICoKICAgICAqIFJldHVybnMgZGlzdHJpYnV0ZWQgdHJhY2luZyBkYXRhIGZvciB0aGUgY3VycmVudCBzcGFuL3RyYW5zYWN0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U2VyaWFsaXplZEN1cnJlbnREaXN0cmlidXRlZFRyYWNpbmdEYXRhKCk6IHN0cmluZyB7fQp9CgovKioKICogQ2xhc3MgdG8gZ2F0aGVyIG9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gc3RhcnQgYSBuZXcgdHJhbnNhY3Rpb24KICoKICogQHNlZSAgICAgICAgICAgICBFbGFzdGljQXBtOjpiZWdpbkN1cnJlbnRUcmFuc2FjdGlvbigpCiAqIEBzZWUgICAgICAgICAgICAgRWxhc3RpY0FwbTo6Y2FwdHVyZUN1cnJlbnRUcmFuc2FjdGlvbigpCiAqLwppbnRlcmZhY2UgVHJhbnNhY3Rpb25CdWlsZGVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogTmV3IHRyYW5zYWN0aW9uIHdpbGwgYmUgc2V0IGFzIHRoZSBjdXJyZW50IG9uZQogICAgICoKICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb25CdWlsZGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhc0N1cnJlbnQoKTogc2VsZjsKCiAgICAvKioKICAgICAqIFNldCBzdGFydCB0aW1lIG9mIHRoZSBuZXcgdHJhbnNhY3Rpb24KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHRpbWVzdGFtcAogICAgICoKICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb25CdWlsZGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aW1lc3RhbXAoZmxvYXQgJHRpbWVzdGFtcCk6IHNlbGY7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gXENsb3N1cmUgJGhlYWRlckV4dHJhY3RvcgogICAgICoKICAgICAqIEByZXR1cm4gVHJhbnNhY3Rpb25CdWlsZGVySW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXN0cmlidXRlZFRyYWNpbmdIZWFkZXJFeHRyYWN0b3IoXENsb3N1cmUgJGhlYWRlckV4dHJhY3Rvcik6IHNlbGY7CgogICAgLyoqCiAgICAgKiBCZWdpbnMgYSBuZXcgdHJhbnNhY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBUcmFuc2FjdGlvbkludGVyZmFjZSBOZXcgdHJhbnNhY3Rpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJlZ2luKCk6IFRyYW5zYWN0aW9uSW50ZXJmYWNlOwoKICAgIC8qKgogICAgICogQmVnaW5zIGEgbmV3IHRyYW5zYWN0aW9uLAogICAgICogcnVucyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgYXMgdGhlIG5ldyB0cmFuc2FjdGlvbiBhbmQgYXV0b21hdGljYWxseSBlbmRzIHRoZSBuZXcgdHJhbnNhY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtIFxDbG9zdXJlICRjYWxsYmFjawogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQgVGhlIHJldHVybiB2YWx1ZSBvZiAkY2FsbGJhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhcHR1cmUoXENsb3N1cmUgJGNhbGxiYWNrKTsKfQoKaW50ZXJmYWNlIFRyYW5zYWN0aW9uSW50ZXJmYWNlIGV4dGVuZHMgRXhlY3V0aW9uU2VnbWVudEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFRyYW5zYWN0aW9ucyB0aGF0IGFyZSAnc2FtcGxlZCcgd2lsbCBpbmNsdWRlIGFsbCBhdmFpbGFibGUgaW5mb3JtYXRpb24KICAgICAqIFRyYW5zYWN0aW9ucyB0aGF0IGFyZSBub3Qgc2FtcGxlZCB3aWxsIG5vdCBoYXZlICdzcGFucycgb3IgJ2NvbnRleHQnLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL3RyYW5zYWN0aW9ucy90cmFuc2FjdGlvbi5qc29uI0w3MgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTYW1wbGVkKCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBIZXggZW5jb2RlZCA2NCByYW5kb20gYml0cyBJRCBvZiB0aGUgcGFyZW50IHRyYW5zYWN0aW9uIG9yIHNwYW4uCiAgICAgKiBPbmx5IGEgcm9vdCB0cmFuc2FjdGlvbiBvZiBhIHRyYWNlIGRvZXMgbm90IGhhdmUgYSBwYXJlbnQgSUQsIG90aGVyd2lzZSBpdCBuZWVkcyB0byBiZSBzZXQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvdHJhbnNhY3Rpb25zL3RyYW5zYWN0aW9uLmpzb24jTDE5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXJlbnRJZCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogQmVnaW5zIGEgbmV3IHNwYW4gd2l0aCB0aGUgY3VycmVudCBleGVjdXRpb24gc2VnbWVudAogICAgICogYXMgdGhlIG5ldyBzcGFuJ3MgcGFyZW50IGFuZCBzZXRzIGFzIHRoZSBuZXcgc3BhbiBhcyB0aGUgY3VycmVudCBzcGFuIGZvciB0aGlzIHRyYW5zYWN0aW9uLgogICAgICogVGhlIGN1cnJlbnQgZXhlY3V0aW9uIHNlZ21lbnQgaXMgdGhlIGN1cnJlbnQgc3BhbiBpZiB0aGVyZSBpcyBvbmUgb3IgdGhpcyB0cmFuc2FjdGlvbiBpdHNlbGYgb3RoZXJ3aXNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAkbmFtZSAgICAgIE5ldyBzcGFuJ3MgbmFtZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAkdHlwZSAgICAgIE5ldyBzcGFuJ3MgdHlwZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRzdWJ0eXBlICAgTmV3IHNwYW4ncyBzdWJ0eXBlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGFjdGlvbiAgICBOZXcgc3BhbidzIGFjdGlvbgogICAgICogQHBhcmFtIGZsb2F0fG51bGwgICR0aW1lc3RhbXAgU3RhcnQgdGltZSBvZiB0aGUgbmV3IHNwYW4KICAgICAqCiAgICAgKiBAc2VlIFNwYW5JbnRlcmZhY2U6OnNldE5hbWUoKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICogQHNlZSBTcGFuSW50ZXJmYWNlOjpzZXRUeXBlKCkgRm9yIHRoZSBkZXNjcmlwdGlvbi4KICAgICAqIEBzZWUgU3BhbkludGVyZmFjZTo6c2V0U3VidHlwZSgpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKiBAc2VlIFNwYW5JbnRlcmZhY2U6OnNldEFjdGlvbigpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKiBAc2VlIFNwYW5JbnRlcmZhY2U6OmdldFRpbWVzdGFtcCgpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKgogICAgICogQHJldHVybiBTcGFuSW50ZXJmYWNlIE5ldyBzcGFuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiZWdpbkN1cnJlbnRTcGFuKAogICAgICAgIHN0cmluZyAkbmFtZSwKICAgICAgICBzdHJpbmcgJHR5cGUsCiAgICAgICAgP3N0cmluZyAkc3VidHlwZSA9IG51bGwsCiAgICAgICAgP3N0cmluZyAkYWN0aW9uID0gbnVsbCwKICAgICAgICA/ZmxvYXQgJHRpbWVzdGFtcCA9IG51bGwKICAgICk6IFNwYW5JbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBCZWdpbnMgYSBuZXcgc3BhbiB3aXRoIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzZWdtZW50IGFzIHRoZSBuZXcgc3BhbidzIHBhcmVudCBhbmQKICAgICAqIHNldHMgdGhlIG5ldyBzcGFuIGFzIHRoZSBjdXJyZW50IHNwYW4gZm9yIHRoaXMgdHJhbnNhY3Rpb24uCiAgICAgKiBUaGUgY3VycmVudCBleGVjdXRpb24gc2VnbWVudCBpcyB0aGUgY3VycmVudCBzcGFuIGlmIHRoZXJlIGlzIG9uZSBvciB0aGlzIHRyYW5zYWN0aW9uIGl0c2VsZiBvdGhlcndpc2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICRuYW1lICAgICAgTmV3IHNwYW4ncyBuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHR5cGUgICAgICBOZXcgc3BhbidzIHR5cGUKICAgICAqIEBwYXJhbSBcQ2xvc3VyZSAgICAgJGNhbGxiYWNrICBDYWxsYmFjayB0byBleGVjdXRlIGFzIHRoZSBuZXcgc3BhbgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRzdWJ0eXBlICAgTmV3IHNwYW4ncyBzdWJ0eXBlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGFjdGlvbiAgICBOZXcgc3BhbidzIGFjdGlvbgogICAgICogQHBhcmFtIGZsb2F0fG51bGwgICR0aW1lc3RhbXAgU3RhcnQgdGltZSBvZiB0aGUgbmV3IHNwYW4KICAgICAqCiAgICAgKiBAc2VlICAgICAgICAgICAgIFNwYW5JbnRlcmZhY2U6OnNldE5hbWUoKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICogQHNlZSAgICAgICAgICAgICBTcGFuSW50ZXJmYWNlOjpzZXRUeXBlKCkgRm9yIHRoZSBkZXNjcmlwdGlvbi4KICAgICAqIEBzZWUgICAgICAgICAgICAgU3BhbkludGVyZmFjZTo6c2V0U3VidHlwZSgpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKiBAc2VlICAgICAgICAgICAgIFNwYW5JbnRlcmZhY2U6OnNldEFjdGlvbigpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKiBAc2VlICAgICAgICAgICAgIFNwYW5JbnRlcmZhY2U6OmdldFRpbWVzdGFtcCgpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBUaGUgcmV0dXJuIHZhbHVlIG9mICRjYWxsYmFjawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FwdHVyZUN1cnJlbnRTcGFuKAogICAgICAgIHN0cmluZyAkbmFtZSwKICAgICAgICBzdHJpbmcgJHR5cGUsCiAgICAgICAgXENsb3N1cmUgJGNhbGxiYWNrLAogICAgICAgID9zdHJpbmcgJHN1YnR5cGUgPSBudWxsLAogICAgICAgID9zdHJpbmcgJGFjdGlvbiA9IG51bGwsCiAgICAgICAgP2Zsb2F0ICR0aW1lc3RhbXAgPSBudWxsCiAgICApOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzcGFuLgogICAgICoKICAgICAqIEByZXR1cm4gU3BhbkludGVyZmFjZSBUaGUgY3VycmVudCBzcGFuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDdXJyZW50U3BhbigpOiBTcGFuSW50ZXJmYWNlOwoKICAgIC8qKgogICAgICogUmV0dXJucyBjb250ZXh0IChjb250ZXh0IGFsbG93cyB0byBzZXQgbGFiZWxzLCBldGMuKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29udGV4dCgpOiBUcmFuc2FjdGlvbkNvbnRleHRJbnRlcmZhY2U7CgogICAgLyoqCiAgICAgKiBUaGUgcmVzdWx0IG9mIHRoZSB0cmFuc2FjdGlvbi4KICAgICAqIEZvciBIVFRQLXJlbGF0ZWQgdHJhbnNhY3Rpb25zLCB0aGlzIHNob3VsZCBiZSB0aGUgc3RhdHVzIGNvZGUgZm9ybWF0dGVkIGxpa2UgJ0hUVFAgMnh4Jy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvNy4wL2RvY3Mvc3BlYy90cmFuc2FjdGlvbnMvdHJhbnNhY3Rpb24uanNvbiNMNTIKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJlc3VsdAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVzdWx0KD9zdHJpbmcgJHJlc3VsdCk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBAc2VlIHNldFJlc3VsdCgpIEZvciB0aGUgZGVzY3JpcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3VsdCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogSWYgdGhlIHRyYW5zYWN0aW9uIGRvZXMgbm90IGhhdmUgYSBwYXJlbnQgSUQgeWV0LAogICAgICogY2FsbGluZyB0aGlzIG1ldGhvZCBnZW5lcmF0ZXMgYSBuZXcgSUQsCiAgICAgKiBzZXRzIGl0IGFzIHRoZSBwYXJlbnQgSUQgb2YgdGhpcyB0cmFuc2FjdGlvbiwgYW5kIHJldHVybnMgaXQgYXMgYSBzdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuc3VyZVBhcmVudElkKCk6IHN0cmluZzsKfQoKaW50ZXJmYWNlIFNwYW5JbnRlcmZhY2UgZXh0ZW5kcyBFeGVjdXRpb25TZWdtZW50SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogSGV4IGVuY29kZWQgNjQgcmFuZG9tIGJpdHMgSUQgb2YgdGhlIGNvcnJlbGF0ZWQgdHJhbnNhY3Rpb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvc3BhbnMvc3Bhbi5qc29uI0wxNAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25JZCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBIZXggZW5jb2RlZCA2NCByYW5kb20gYml0cyBJRCBvZiB0aGUgcGFyZW50LgogICAgICogSWYgdGhpcyBzcGFuIGlzIHRoZSByb290IHNwYW4gb2YgdGhlIGNvcnJlbGF0ZWQgdHJhbnNhY3Rpb24gdGhlIGl0cyBwYXJlbnQgaXMgdGhlIGNvcnJlbGF0ZWQgdHJhbnNhY3Rpb24KICAgICAqIG90aGVyd2lzZSBpdHMgcGFyZW50IGlzIHRoZSBwYXJlbnQgc3Bhbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvNy4wL2RvY3Mvc3BlYy9zcGFucy9zcGFuLmpzb24jTDI0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXJlbnRJZCgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBUaGUgc3BlY2lmaWMga2luZCBvZiBldmVudCB3aXRoaW4gdGhlIHN1Yi10eXBlIHJlcHJlc2VudGVkIGJ5IHRoZSBzcGFuCiAgICAgKiBlLmcuLCAncXVlcnknIGZvciB0eXBlL3N1Yi10eXBlICdkYicvJ215c3FsJywgJ2Nvbm5lY3QnIGZvciB0eXBlL3N1Yi10eXBlICdkYicvJ2Nhc3NhbmRyYScKICAgICAqCiAgICAgKiBUaGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nIGlzIGxpbWl0ZWQgdG8gMTAyNC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvNy4wL2RvY3Mvc3BlYy9zcGFucy9zcGFuLmpzb24jTDM4CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRhY3Rpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEFjdGlvbig/c3RyaW5nICRhY3Rpb24pOiB2b2lkOwoKICAgIC8qKgogICAgICogQSBmdXJ0aGVyIHN1Yi1kaXZpc2lvbiBvZiB0aGUgdHlwZQogICAgICogZS5nLiwgJ215c3FsJywgJ3Bvc3RncmVzcWwnIG9yICdlbGFzdGljc2VhcmNoJyBmb3IgdHlwZSAnZGInLCAnaHR0cCcgZm9yIHR5cGUgJ2V4dGVybmFsJywgZXRjLgogICAgICoKICAgICAqIFRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmcgaXMgbGltaXRlZCB0byAxMDI0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL3NwYW5zL3NwYW4uanNvbiNMMzMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHN1YnR5cGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFN1YnR5cGUoP3N0cmluZyAkc3VidHlwZSk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGNvbnRleHQgKGNvbnRleHQgYWxsb3dzIHRvIHNldCBsYWJlbHMsIGV0Yy4pCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb250ZXh0KCk6IFNwYW5Db250ZXh0SW50ZXJmYWNlOwoKICAgIC8qKgogICAgICogRXh0ZW5kZWQgdmVyc2lvbiBvZiBFeGVjdXRpb25TZWdtZW50SW50ZXJmYWNlOjplbmQoKQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICRudW1iZXJPZlN0YWNrRnJhbWVzVG9Ta2lwIE51bWJlciBvZiBzdGFjayBmcmFtZXMgdG8gc2tpcCB3aGVuIGNhcHR1cmluZyBzdGFjayB0cmFjZS4KICAgICAqIEBwYXJhbSBmbG9hdHxudWxsICRkdXJhdGlvbiAgICAgICAgICAgICAgICAgIEluIG1pbGxpc2Vjb25kcyB3aXRoIDMgZGVjaW1hbCBwb2ludHMuCiAgICAgKgogICAgICogQHNlZSBFeGVjdXRpb25TZWdtZW50SW50ZXJmYWNlOjplbmQoKSBGb3IgdGhlIGRlc2NyaXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmRTcGFuRXgoaW50ICRudW1iZXJPZlN0YWNrRnJhbWVzVG9Ta2lwLCA/ZmxvYXQgJGR1cmF0aW9uID0gbnVsbCk6IHZvaWQ7Cn0KCmludGVyZmFjZSBTcGFuQ29udGV4dEludGVyZmFjZSBleHRlbmRzIEV4ZWN1dGlvblNlZ21lbnRDb250ZXh0SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBjb250ZXh0dWFsIGRhdGEgZm9yIGRhdGFiYXNlIHNwYW5zCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvc3BhbnMvc3Bhbi5qc29uI0w0NwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGIoKTogU3BhbkNvbnRleHREYkludGVyZmFjZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgY29udGV4dHVhbCBkYXRhIG9mIHRoZSByZWxhdGVkIGh0dHAgcmVxdWVzdAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL3NwYW5zL3NwYW4uanNvbiNMNjkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGh0dHAoKTogU3BhbkNvbnRleHRIdHRwSW50ZXJmYWNlOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBjb250ZXh0dWFsIGRhdGEgYWJvdXQgdGhlIGRlc3RpbmF0aW9uIGZvciBzcGFucwogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjYvZG9jcy9zcGVjL3NwYW5zL3NwYW4uanNvbiNMNDQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlc3RpbmF0aW9uKCk6IFNwYW5Db250ZXh0RGVzdGluYXRpb25JbnRlcmZhY2U7Cn0KCmludGVyZmFjZSBTcGFuQ29udGV4dERiSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQSBkYXRhYmFzZSBzdGF0ZW1lbnQgKGUuZy4gcXVlcnkpIGZvciB0aGUgZ2l2ZW4gZGF0YWJhc2UgdHlwZQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL3NwYW5zL3NwYW4uanNvbiNMNTUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHN0YXRlbWVudAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3RhdGVtZW50KD9zdHJpbmcgJHN0YXRlbWVudCk6IHZvaWQ7Cn0KCmludGVyZmFjZSBTcGFuQ29udGV4dEh0dHBJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBUaGUgcmF3IHVybCBvZiB0aGUgY29ycmVsYXRpbmcgaHR0cCByZXF1ZXN0CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvc3BhbnMvc3Bhbi5qc29uI0w3MwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdXJsCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRVcmwoP3N0cmluZyAkdXJsKTogdm9pZDsKCiAgICAvKioKICAgICAqIFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgaHR0cCByZXF1ZXN0CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvc3BhbnMvc3Bhbi5qc29uI0w3NwogICAgICoKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkc3RhdHVzQ29kZQogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3RhdHVzQ29kZSg/aW50ICRzdGF0dXNDb2RlKTogdm9pZDsKCiAgICAvKioKICAgICAqIFRoZSBtZXRob2Qgb2YgdGhlIGh0dHAgcmVxdWVzdAogICAgICoKICAgICAqIFRoZSBsZW5ndGggb2YgYSB2YWx1ZSBpcyBsaW1pdGVkIHRvIDEwMjQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvc3BhbnMvc3Bhbi5qc29uI0w4MQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbWV0aG9kCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNZXRob2QoP3N0cmluZyAkbWV0aG9kKTogdm9pZDsKfQoKLyoqCiAqIEFuIG9iamVjdCBjb250YWluaW5nIGNvbnRleHR1YWwgZGF0YSBhYm91dCB0aGUgZGVzdGluYXRpb24gZm9yIHNwYW5zCiAqCiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjYvZG9jcy9zcGVjL3NwYW5zL3NwYW4uanNvbiNMNDQKICovCmludGVyZmFjZSBTcGFuQ29udGV4dERlc3RpbmF0aW9uSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogU2V0cyBkZXN0aW5hdGlvbiBzZXJ2aWNlIGNvbnRleHQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvdjcuMTEuMC9kb2NzL3NwZWMvdjIvc3Bhbi5qc29uI0wxMDYKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZXNvdXJjZQogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2VydmljZShzdHJpbmcgJG5hbWUsIHN0cmluZyAkcmVzb3VyY2UsIHN0cmluZyAkdHlwZSk6IHZvaWQ7Cn0KCi8qKgogKiBUaGlzIGludGVyZmFjZSBoYXMgZnVuY3Rpb25hbGl0eSBzaGFyZWQgYmV0d2VlbiBUcmFuc2FjdGlvbiBhbmQgU3Bhbi4KICovCmludGVyZmFjZSBFeGVjdXRpb25TZWdtZW50SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogSGV4IGVuY29kZWQgNjQgcmFuZG9tIGJpdHMgKD09IDggYnl0ZXMgPT0gMTYgaGV4IGRpZ2l0cykgSUQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvdHJhbnNhY3Rpb25zL3RyYW5zYWN0aW9uLmpzb24jTDkKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL3NwYW5zL3NwYW4uanNvbiNMOQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWQoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogSGV4IGVuY29kZWQgMTI4IHJhbmRvbSBiaXRzICg9PSAxNiBieXRlcyA9PSAzMiBoZXggZGlnaXRzKSBJRCBvZiB0aGUgY29ycmVsYXRlZCB0cmFjZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvNy4wL2RvY3Mvc3BlYy90cmFuc2FjdGlvbnMvdHJhbnNhY3Rpb24uanNvbiNMMTQKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL3NwYW5zL3NwYW4uanNvbiNMMTkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRyYWNlSWQoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogUmVjb3JkZWQgdGltZSBvZiB0aGUgZXZlbnQuCiAgICAgKiBGb3IgZXZlbnRzIHRoYXQgaGF2ZSBub24temVybyBkdXJhdGlvbiB0aGlzIHRpbWUgY29ycmVzcG9uZHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBldmVudC4KICAgICAqIFVUQyBiYXNlZCBhbmQgaW4gbWljcm9zZWNvbmRzIHNpbmNlIFVuaXggZXBvY2guCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvdHJhbnNhY3Rpb25zL3RyYW5zYWN0aW9uLmpzb24jTDYKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL3NwYW5zL3NwYW4uanNvbiNMNgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvdGltZXN0YW1wX2Vwb2NoLmpzb24jTDcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVzdGFtcCgpOiBmbG9hdDsKCiAgICAvKioKICAgICAqIEJlZ2lucyBhIG5ldyBzcGFuIHdpdGggdGhpcyBleGVjdXRpb24gc2VnbWVudCBhcyB0aGUgbmV3IHNwYW4ncyBwYXJlbnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICRuYW1lICAgICAgTmV3IHNwYW4ncyBuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHR5cGUgICAgICBOZXcgc3BhbidzIHR5cGUKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc3VidHlwZSAgIE5ldyBzcGFuJ3Mgc3VidHlwZQogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRhY3Rpb24gICAgTmV3IHNwYW4ncyBhY3Rpb24KICAgICAqIEBwYXJhbSBmbG9hdHxudWxsICAkdGltZXN0YW1wIFN0YXJ0IHRpbWUgb2YgdGhlIG5ldyBzcGFuCiAgICAgKgogICAgICogQHNlZSBTcGFuSW50ZXJmYWNlOjpzZXROYW1lKCkgRm9yIHRoZSBkZXNjcmlwdGlvbi4KICAgICAqIEBzZWUgU3BhbkludGVyZmFjZTo6c2V0VHlwZSgpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKiBAc2VlIFNwYW5JbnRlcmZhY2U6OnNldFN1YnR5cGUoKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICogQHNlZSBTcGFuSW50ZXJmYWNlOjpzZXRBY3Rpb24oKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICogQHNlZSBTcGFuSW50ZXJmYWNlOjpzZXRUaW1lc3RhbXAoKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gU3BhbkludGVyZmFjZSBOZXcgc3BhbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmVnaW5DaGlsZFNwYW4oCiAgICAgICAgc3RyaW5nICRuYW1lLAogICAgICAgIHN0cmluZyAkdHlwZSwKICAgICAgICA/c3RyaW5nICRzdWJ0eXBlID0gbnVsbCwKICAgICAgICA/c3RyaW5nICRhY3Rpb24gPSBudWxsLAogICAgICAgID9mbG9hdCAkdGltZXN0YW1wID0gbnVsbAogICAgKTogU3BhbkludGVyZmFjZTsKCiAgICAvKioKICAgICAqIEJlZ2lucyBhIG5ldyBzcGFuIHdpdGggdGhpcyBleGVjdXRpb24gc2VnbWVudCBhcyB0aGUgbmV3IHNwYW4ncyBwYXJlbnQsCiAgICAgKiBydW5zIHRoZSBwcm92aWRlZCBjYWxsYmFjayBhcyB0aGUgbmV3IHNwYW4gYW5kIGF1dG9tYXRpY2FsbHkgZW5kcyB0aGUgbmV3IHNwYW4uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICRuYW1lICAgICAgTmV3IHNwYW4ncyBuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgJHR5cGUgICAgICBOZXcgc3BhbidzIHR5cGUKICAgICAqIEBwYXJhbSBcQ2xvc3VyZSAgICAgJGNhbGxiYWNrICBDYWxsYmFjayB0byBleGVjdXRlIGFzIHRoZSBuZXcgc3BhbgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRzdWJ0eXBlICAgTmV3IHNwYW4ncyBzdWJ0eXBlCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGFjdGlvbiAgICBOZXcgc3BhbidzIGFjdGlvbgogICAgICogQHBhcmFtIGZsb2F0fG51bGwgICR0aW1lc3RhbXAgU3RhcnQgdGltZSBvZiB0aGUgbmV3IHNwYW4KICAgICAqCiAgICAgKiBAc2VlICAgICAgICAgICAgIFNwYW5JbnRlcmZhY2U6OnNldE5hbWUoKSBGb3IgdGhlIGRlc2NyaXB0aW9uLgogICAgICogQHNlZSAgICAgICAgICAgICBTcGFuSW50ZXJmYWNlOjpzZXRUeXBlKCkgRm9yIHRoZSBkZXNjcmlwdGlvbi4KICAgICAqIEBzZWUgICAgICAgICAgICAgU3BhbkludGVyZmFjZTo6c2V0U3VidHlwZSgpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKiBAc2VlICAgICAgICAgICAgIFNwYW5JbnRlcmZhY2U6OnNldEFjdGlvbigpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKiBAc2VlICAgICAgICAgICAgIFNwYW5JbnRlcmZhY2U6OnNldFRpbWVzdGFtcCgpIEZvciB0aGUgZGVzY3JpcHRpb24uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBUaGUgcmV0dXJuIHZhbHVlIG9mICRjYWxsYmFjawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FwdHVyZUNoaWxkU3BhbigKICAgICAgICBzdHJpbmcgJG5hbWUsCiAgICAgICAgc3RyaW5nICR0eXBlLAogICAgICAgIFxDbG9zdXJlICRjYWxsYmFjaywKICAgICAgICA/c3RyaW5nICRzdWJ0eXBlID0gbnVsbCwKICAgICAgICA/c3RyaW5nICRhY3Rpb24gPSBudWxsLAogICAgICAgID9mbG9hdCAkdGltZXN0YW1wID0gbnVsbAogICAgKTsKCiAgICAvKioKICAgICAqIC0gRm9yIHRyYW5zYWN0aW9uczoKICAgICAqICAgICAgVGhlIG5hbWUgb2YgdGhpcyB0cmFuc2FjdGlvbi4KICAgICAqICAgICAgR2VuZXJpYyBkZXNpZ25hdGlvbiBvZiBhIHRyYW5zYWN0aW9uIGluIHRoZSBzY29wZSBvZiBhIHNpbmdsZSBzZXJ2aWNlIChlZzogJ0dFVCAvdXNlcnMvOmlkJykuCiAgICAgKgogICAgICogLSBGb3Igc3BhbnM6CiAgICAgKiAgICAgIEdlbmVyaWMgZGVzaWduYXRpb24gb2YgYSBzcGFuIGluIHRoZSBzY29wZSBvZiBhIHRyYW5zYWN0aW9uLgogICAgICoKICAgICAqIFRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmcgaXMgbGltaXRlZCB0byAxMDI0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL3RyYW5zYWN0aW9ucy90cmFuc2FjdGlvbi5qc29uI0w0NwogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvc3BhbnMvc3Bhbi5qc29uI0wxMzYKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXROYW1lKHN0cmluZyAkbmFtZSk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBUeXBlIGlzIGEga2V5d29yZCBvZiBzcGVjaWZpYyByZWxldmFuY2UgaW4gdGhlIHNlcnZpY2UncyBkb21haW4KICAgICAqIGUuZy4sCiAgICAgKiAgICAgIC0gRm9yIHRyYW5zYWN0aW9uOiAnZGInLCAnZXh0ZXJuYWwnIGZvciBhIHNwYW4gYW5kICdyZXF1ZXN0JywgJ2JhY2tncm91bmRqb2InIGZvciBhIHRyYW5zYWN0aW9uLCBldGMuCiAgICAgKiAgICAgIC0gRm9yIHNwYW46ICdkYi5wb3N0Z3Jlc3FsLnF1ZXJ5JywgJ3RlbXBsYXRlLmVyYicsIGV0Yy4KICAgICAqCiAgICAgKiBUaGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nIGlzIGxpbWl0ZWQgdG8gMTAyNC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvNy4wL2RvY3Mvc3BlYy90cmFuc2FjdGlvbnMvdHJhbnNhY3Rpb24uanNvbiNMNTcKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL3NwYW5zL3NwYW4uanNvbiNMMTQ5CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VHlwZShzdHJpbmcgJHR5cGUpOiB2b2lkOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgICAgICBEZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS4zIC0gdXNlIGluamVjdERpc3RyaWJ1dGVkVHJhY2luZ0hlYWRlcnMoKSBpbnN0ZWFkCiAgICAgKiBAc2VlICAgICAgICAgICAgIGluamVjdERpc3RyaWJ1dGVkVHJhY2luZ0hlYWRlcnMoKSBVc2UgaXQgaW5zdGVhZCBvZiB0aGlzIG1ldGhvZAogICAgICoKICAgICAqIFJldHVybnMgZGlzdHJpYnV0ZWQgdHJhY2luZyBkYXRhCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREaXN0cmlidXRlZFRyYWNpbmdEYXRhKCk6ID9EaXN0cmlidXRlZFRyYWNpbmdEYXRhOwoKICAgIC8qKgogICAgICogUmV0dXJucyBkaXN0cmlidXRlZCB0cmFjaW5nIGRhdGEgZm9yIHRoZSBjdXJyZW50IHNwYW4vdHJhbnNhY3Rpb24KICAgICAqCiAgICAgKiAkaGVhZGVySW5qZWN0b3IgaXMgY2FsbGJhY2sgdG8gaW5qZWN0IGhlYWRlcnMgd2l0aCBzaWduYXR1cmUKICAgICAqCiAgICAgKiAgICAgIChzdHJpbmcgJGhlYWRlck5hbWUsIHN0cmluZyAkaGVhZGVyVmFsdWUpOiB2b2lkCiAgICAgKgogICAgICogQHBhcmFtIFxDbG9zdXJlICRoZWFkZXJJbmplY3RvciBDYWxsYmFjayB0aGF0IGFjdHVhbGx5IGluamVjdHMgaGVhZGVyKHMpIGZvciB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluamVjdERpc3RyaWJ1dGVkVHJhY2luZ0hlYWRlcnMoXENsb3N1cmUgJGhlYWRlckluamVjdG9yKTogdm9pZDsKCiAgICAvKioKICAgICAqIFNldHMgdGhlIGVuZCB0aW1lc3RhbXAgYW5kIGZpbmFsaXplcyB0aGlzIG9iamVjdCdzIHN0YXRlLgogICAgICoKICAgICAqIElmIGFueSBtdXRhdGluZyBtZXRob2QgKGZvciBleGFtcGxlIGFueSBgc2V0Li4uYCBtZXRob2QgaXMgYSBtdXRhdGluZyBtZXRob2QpCiAgICAgKiBpcyBjYWxsZWQgb24gYSBpbnN0YW5jZSB3aGljaCBoYXMgYWxyZWFkeSB0aGVuIGEgd2FybmluZyBpcyBsb2dnZWQuCiAgICAgKiBGb3IgZXhhbXBsZSwgZW5kKCkgaXMgYSBtdXRhdGluZyBtZXRob2QgYXMgd2VsbC4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXR8bnVsbCAkZHVyYXRpb24gSW4gbWlsbGlzZWNvbmRzIHdpdGggMyBkZWNpbWFsIHBvaW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuZCg/ZmxvYXQgJGR1cmF0aW9uID0gbnVsbCk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRpb24gc2VnbWVudCBoYXMgYWxyZWFkeSBlbmRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc0VuZGVkKCk6IGJvb2w7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGFuIGVycm9yIGJhc2VkIG9uIHRoZSBnaXZlbiBUaHJvd2FibGUgaW5zdGFuY2Ugd2l0aCB0aGlzIGV4ZWN1dGlvbiBzZWdtZW50IGFzIHRoZSBwYXJlbnQuCiAgICAgKgogICAgICogQHBhcmFtIFxUaHJvd2FibGUgJHRocm93YWJsZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgSUQgb2YgdGhlIHJlcG9ydGVkIGVycm9yIGV2ZW50IG9yIG51bGwgaWYgbm8gZXZlbnQgd2FzIHJlcG9ydGVkCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAoZm9yIGV4YW1wbGUsIGJlY2F1c2UgcmVjb3JkaW5nIGlzIGRpc2FibGVkKQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL2Vycm9ycy9lcnJvci5qc29uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVFcnJvckZyb21UaHJvd2FibGUoXFRocm93YWJsZSAkdGhyb3dhYmxlKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYW4gZXJyb3IgYmFzZWQgb24gdGhlIGdpdmVuIFRocm93YWJsZSBpbnN0YW5jZSB3aXRoIHRoaXMgZXhlY3V0aW9uIHNlZ21lbnQgYXMgdGhlIHBhcmVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gQ3VzdG9tRXJyb3JEYXRhICRjdXN0b21FcnJvckRhdGEKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIElEIG9mIHRoZSByZXBvcnRlZCBlcnJvciBldmVudCBvciBudWxsIGlmIG5vIGV2ZW50IHdhcyByZXBvcnRlZAogICAgICogICAgICAgICAgICAgICAgICAgICAgKGZvciBleGFtcGxlLCBiZWNhdXNlIHJlY29yZGluZyBpcyBkaXNhYmxlZCkKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvNy4wL2RvY3Mvc3BlYy9lcnJvcnMvZXJyb3IuanNvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tRXJyb3IoQ3VzdG9tRXJyb3JEYXRhICRjdXN0b21FcnJvckRhdGEpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogVGhlIG91dGNvbWUgb2YgdGhlIHRyYW5zYWN0aW9uL3NwYW46IHN1Y2Nlc3MsIGZhaWx1cmUsIG9yIHVua25vd24uCiAgICAgKiBPdXRjb21lIG1heSBiZSBvbmUgb2YgYSBsaW1pdGVkIHNldCBvZiBwZXJtaXR0ZWQgdmFsdWVzCiAgICAgKiBkZXNjcmliaW5nIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHRyYW5zYWN0aW9uL3NwYW4uCiAgICAgKiBUaGlzIGZpZWxkIGNhbiBiZSB1c2VkIGZvciBjYWxjdWxhdGluZyBlcnJvciByYXRlcyBmb3IgaW5jb21pbmcvb3V0Z29pbmcgcmVxdWVzdHMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iL3Y3LjEwLjAvZG9jcy9zcGVjL3RyYW5zYWN0aW9ucy90cmFuc2FjdGlvbi5qc29uI0w1OQogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iL3Y3LjEwLjAvZG9jcy9zcGVjL3NwYW5zL3NwYW4uanNvbiNMNTQKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi92Ny4xMC4wL2RvY3Mvc3BlYy9vdXRjb21lLmpzb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG91dGNvbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE91dGNvbWUoP3N0cmluZyAkb3V0Y29tZSk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBAc2VlIHNldE91dGNvbWUoKSBGb3IgdGhlIGRlc2NyaXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPdXRjb21lKCk6ID9zdHJpbmc7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBleGVjdXRpb24gc2VnbWVudCBpcyBhIG5vLW9wIChmb3IgZXhhbXBsZSB3aGVuIHJlY29yZGluZyBpcyBkaXNhYmxlZCkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc05vb3AoKTogYm9vbDsKCiAgICAvKioKICAgICAqIERpc2NhcmRzIHRoaXMgZXhlY3V0aW9uIHNlZ21lbnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNjYXJkKCk6IHZvaWQ7Cn0KCmZpbmFsIGNsYXNzIERpc3RyaWJ1dGVkVHJhY2luZ0RhdGEKewogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwdWJsaWMgJHRyYWNlSWQ7CgogICAgLyoqIEB2YXIgc3RyaW5nICovCiAgICBwdWJsaWMgJHBhcmVudElkOwoKICAgIC8qKiBAdmFyIGJvb2wgKi8KICAgIHB1YmxpYyAkaXNTYW1wbGVkOwoKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDEuMyAtIHVzZSBpbmplY3RIZWFkZXJzKCkgaW5zdGVhZAogICAgICogQHNlZSAgICAgICAgICAgICBpbmplY3RIZWFkZXJzKCkgVXNlIGl0IGluc3RlYWQgb2YgdGhpcyBtZXRob2QKICAgICAqCiAgICAgKiBSZXR1cm5zIGRpc3RyaWJ1dGVkIHRyYWNpbmcgZGF0YSBmb3IgdGhlIGN1cnJlbnQgc3Bhbi90cmFuc2FjdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VyaWFsaXplVG9TdHJpbmcoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIGRpc3RyaWJ1dGVkIHRyYWNpbmcgZGF0YSBmb3IgdGhlIGN1cnJlbnQgc3Bhbi90cmFuc2FjdGlvbgogICAgICoKICAgICAqICRoZWFkZXJJbmplY3RvciBpcyBjYWxsYmFjayB0byBpbmplY3QgaGVhZGVycyB3aXRoIHNpZ25hdHVyZQogICAgICoKICAgICAqICAgICAgKHN0cmluZyAkaGVhZGVyTmFtZSwgc3RyaW5nICRoZWFkZXJWYWx1ZSk6IHZvaWQKICAgICAqCiAgICAgKiBAcGFyYW0gXENsb3N1cmUgJGhlYWRlckluamVjdG9yIENhbGxiYWNrIHRoYXQgYWN0dWFsbHkgaW5qZWN0cyBoZWFkZXIocykgZm9yIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5qZWN0SGVhZGVycyhcQ2xvc3VyZSAkaGVhZGVySW5qZWN0b3IpOiB2b2lkIHt9Cn0KCi8qKgogKiBEYXRhIHRvIGNyZWF0ZSBjdXN0b20gZXJyb3IgZXZlbnQKICoKICogQHNlZSAgRWxhc3RpY0FwbTo6Y3JlYXRlQ3VzdG9tRXJyb3IKICoKICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvZXJyb3JzL2Vycm9yLmpzb24jTDUzCiAqCiAqIENvZGUgaW4gdGhpcyBmaWxlIGlzIHBhcnQgb2YgaW1wbGVtZW50YXRpb24gaW50ZXJuYWxzIGFuZCB0aHVzIGl0IGlzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogKi8KY2xhc3MgQ3VzdG9tRXJyb3JEYXRhCnsKICAgIC8qKgogICAgICogQHZhciBpbnR8c3RyaW5nfG51bGwKICAgICAqCiAgICAgKiBUaGUgZXJyb3IgY29kZSBzZXQgd2hlbiB0aGUgZXJyb3IgaGFwcGVuZWQsIGUuZy4gZGF0YWJhc2UgZXJyb3IgY29kZQogICAgICoKICAgICAqIFRoZSBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaXMgbGltaXRlZCB0byAxMDI0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL2Vycm9ycy9lcnJvci5qc29uI0w1NgogICAgICovCiAgICBwdWJsaWMgJGNvZGUgPSBudWxsOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICoKICAgICAqIFRoZSBvcmlnaW5hbCBlcnJvciBtZXNzYWdlCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvZXJyb3JzL2Vycm9yLmpzb24jTDYxCiAgICAgKi8KICAgIHB1YmxpYyAkbWVzc2FnZSA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKgogICAgICogRGVzY3JpYmVzIHRoZSBleGNlcHRpb24gdHlwZSdzIG1vZHVsZSBuYW1lc3BhY2UKICAgICAqCiAgICAgKiBUaGUgbGVuZ3RoIG9mIGEgdmFsdWUgaXMgbGltaXRlZCB0byAxMDI0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL2Vycm9ycy9lcnJvci5qc29uI0w2NQogICAgICovCiAgICBwdWJsaWMgJG1vZHVsZSA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKgogICAgICogVGhlIGxlbmd0aCBvZiBhIHZhbHVlIGlzIGxpbWl0ZWQgdG8gMTAyNC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvNy4wL2RvY3Mvc3BlYy9lcnJvcnMvZXJyb3IuanNvbiNMODAKICAgICAqLwogICAgcHVibGljICR0eXBlID0gbnVsbDsKfQoKaW50ZXJmYWNlIFRyYW5zYWN0aW9uQ29udGV4dEludGVyZmFjZSBleHRlbmRzIEV4ZWN1dGlvblNlZ21lbnRDb250ZXh0SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBjb2xsZWN0IGluZm9ybWF0aW9uIGFib3V0IEhUVFAgcmVxdWVzdAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi92Ny4wLjAvZG9jcy9zcGVjL2NvbnRleHQuanNvbiNMNDMKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi92Ny4wLjAvZG9jcy9zcGVjL3JlcXVlc3QuanNvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVxdWVzdCgpOiBUcmFuc2FjdGlvbkNvbnRleHRSZXF1ZXN0SW50ZXJmYWNlOwp9CgovKioKICogVGhpcyBpbnRlcmZhY2UgaGFzIGZ1bmN0aW9uYWxpdHkgc2hhcmVkIGJldHdlZW4gVHJhbnNhY3Rpb24gYW5kIFNwYW4gY29udGV4dHMnLgogKi8KaW50ZXJmYWNlIEV4ZWN1dGlvblNlZ21lbnRDb250ZXh0SW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmd8Ym9vbHxpbnR8ZmxvYXR8bnVsbCAkdmFsdWUKICAgICAqCiAgICAgKiBMYWJlbHMgaXMgYSBmbGF0IG1hcHBpbmcgb2YgdXNlci1kZWZpbmVkIGxhYmVscyB3aXRoIHN0cmluZyBrZXlzIGFuZCBudWxsLCBzdHJpbmcsIGJvb2xlYW4gb3IgbnVtYmVyIHZhbHVlcy4KICAgICAqCiAgICAgKiBUaGUgbGVuZ3RoIG9mIGEga2V5IGFuZCBhIHN0cmluZyB2YWx1ZSBpcyBsaW1pdGVkIHRvIDEwMjQuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKgogICAgICogQGxpbmsgICAgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iLzcuMC9kb2NzL3NwZWMvdHJhbnNhY3Rpb25zL3RyYW5zYWN0aW9uLmpzb24jTDQwCiAgICAgKiBAbGluayAgICBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvNy4wL2RvY3Mvc3BlYy9jb250ZXh0Lmpzb24jTDQ2CiAgICAgKiBAbGluayAgICBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvNy4wL2RvY3Mvc3BlYy9zcGFucy9zcGFuLmpzb24jTDg4CiAgICAgKiBAbGluayAgICBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvNy4wL2RvY3Mvc3BlYy90YWdzLmpzb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExhYmVsKHN0cmluZyAka2V5LCAkdmFsdWUpOiB2b2lkOwp9CgppbnRlcmZhY2UgVHJhbnNhY3Rpb25Db250ZXh0UmVxdWVzdEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEhUVFAgbWV0aG9kCiAgICAgKgogICAgICogVGhlIGxlbmd0aCBvZiBhIHZhbHVlIGlzIGxpbWl0ZWQgdG8gMTAyNC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvdjcuMC4wL2RvY3Mvc3BlYy9yZXF1ZXN0Lmpzb24jTDMzCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWV0aG9kCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNZXRob2Qoc3RyaW5nICRtZXRob2QpOiB2b2lkOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBjb2xsZWN0IGluZm9ybWF0aW9uIGFib3V0IEhUVFAgcmVxdWVzdCdzIFVSTAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi83LjAvZG9jcy9zcGVjL3JlcXVlc3QuanNvbiNMNTAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVybCgpOiBUcmFuc2FjdGlvbkNvbnRleHRSZXF1ZXN0VXJsSW50ZXJmYWNlOwp9CgppbnRlcmZhY2UgVHJhbnNhY3Rpb25Db250ZXh0UmVxdWVzdFVybEludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFRoZSBkb21haW4gb2YgdGhlIHJlcXVlc3QsIGUuZy4gJ2V4YW1wbGUuY29tJwogICAgICoKICAgICAqIFRoZSBsZW5ndGggb2YgYSB2YWx1ZSBpcyBsaW1pdGVkIHRvIDEwMjQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iL3Y3LjAuMC9kb2NzL3NwZWMvcmVxdWVzdC5qc29uI0w2OQogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRkb21haW4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldERvbWFpbig/c3RyaW5nICRkb21haW4pOiB2b2lkOwoKICAgIC8qKgogICAgICogVGhlIGZ1bGwsIHBvc3NpYmx5IGFnZW50LWFzc2VtYmxlZCBVUkwgb2YgdGhlIHJlcXVlc3QKICAgICAqCiAgICAgKiBUaGUgbGVuZ3RoIG9mIGEgdmFsdWUgaXMgbGltaXRlZCB0byAxMDI0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi92Ny4wLjAvZG9jcy9zcGVjL3JlcXVlc3QuanNvbiNMNjQKICAgICAqCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkZnVsbAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RnVsbCg/c3RyaW5nICRmdWxsKTogdm9pZDsKCiAgICAvKioKICAgICAqIFRoZSByYXcsIHVucGFyc2VkIFVSTCBvZiB0aGUgSFRUUCByZXF1ZXN0IGxpbmUsIGUuZyBodHRwczovL2V4YW1wbGUuY29tOjQ0My9zZWFyY2g/cT1lbGFzdGljc2VhcmNoLgogICAgICogVGhpcyBVUkwgbWF5IGJlIGFic29sdXRlIG9yIHJlbGF0aXZlLgogICAgICogRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzUuaHRtbCNzZWM1LjEuMgogICAgICoKICAgICAqIFRoZSBsZW5ndGggb2YgYSB2YWx1ZSBpcyBsaW1pdGVkIHRvIDEwMjQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2VsYXN0aWMvYXBtLXNlcnZlci9ibG9iL3Y3LjAuMC9kb2NzL3NwZWMvcmVxdWVzdC5qc29uI0w1NAogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRvcmlnaW5hbAogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3JpZ2luYWwoP3N0cmluZyAkb3JpZ2luYWwpOiB2b2lkOwoKICAgIC8qKgogICAgICogVGhlIHBhdGggb2YgdGhlIHJlcXVlc3QsIGUuZy4gJy9zZWFyY2gnCiAgICAgKgogICAgICogVGhlIGxlbmd0aCBvZiBhIHZhbHVlIGlzIGxpbWl0ZWQgdG8gMTAyNC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvdjcuMC4wL2RvY3Mvc3BlYy9yZXF1ZXN0Lmpzb24jTDc5CiAgICAgKgogICAgICogQHBhcmFtID9zdHJpbmcgJHBhdGgKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFBhdGgoP3N0cmluZyAkcGF0aCk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBUaGUgcG9ydCBvZiB0aGUgcmVxdWVzdCwgZS5nLiA0NDMKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvdjcuMC4wL2RvY3Mvc3BlYy9yZXF1ZXN0Lmpzb24jTDc0CiAgICAgKgogICAgICogQHBhcmFtID9pbnQgJHBvcnQKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFBvcnQoP2ludCAkcG9ydCk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBUaGUgcHJvdG9jb2wgb2YgdGhlIHJlcXVlc3QsIGUuZy4gJ2h0dHAnCiAgICAgKgogICAgICogVGhlIGxlbmd0aCBvZiBhIHZhbHVlIGlzIGxpbWl0ZWQgdG8gMTAyNC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vZWxhc3RpYy9hcG0tc2VydmVyL2Jsb2IvdjcuMC4wL2RvY3Mvc3BlYy9yZXF1ZXN0Lmpzb24jTDU5CiAgICAgKgogICAgICogQHBhcmFtID9zdHJpbmcgJHByb3RvY29sCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQcm90b2NvbCg/c3RyaW5nICRwcm90b2NvbCk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBxdWVyeSBzdHJpbmcgaW5mb3JtYXRpb24gb2YgdGhlIHJlcXVlc3QuCiAgICAgKiBJdCBpcyBleHBlY3RlZCB0byBoYXZlIHZhbHVlcyBkZWxpbWl0ZWQgYnkgYW1wZXJzYW5kcy4KICAgICAqCiAgICAgKiBUaGUgbGVuZ3RoIG9mIGEgdmFsdWUgaXMgbGltaXRlZCB0byAxMDI0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbGFzdGljL2FwbS1zZXJ2ZXIvYmxvYi92Ny4wLjAvZG9jcy9zcGVjL3JlcXVlc3QuanNvbiNMODQKICAgICAqCiAgICAgKiBAcGFyYW0gP3N0cmluZyAkcXVlcnkKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFF1ZXJ5KD9zdHJpbmcgJHF1ZXJ5KTogdm9pZDsKfQo8P3BocAoKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxMYW5ndWFnZUxldmVsVHlwZUF3YXJlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFBocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXFB1cmU7CgovKioKICogQWRkIHR3byBhcmJpdHJhcnkgcHJlY2lzaW9uIG51bWJlcnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5iY2FkZC5waHAKICogQHBhcmFtIHN0cmluZyAkbnVtMSA8cD4KICogVGhlIGxlZnQgb3BlcmFuZCwgYXMgYSBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbnVtMiA8cD4KICogVGhlIHJpZ2h0IG9wZXJhbmQsIGFzIGEgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBpbnR8bnVsbCAkc2NhbGUgPHA+CiAqIFRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZQogKiBkZWNpbWFsIHBsYWNlIGluIHRoZSByZXN1bHQuIElmIG9taXR0ZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgc2NhbGUKICogc2V0IGdsb2JhbGx5IHdpdGggdGhlIHtAbGluayBiY3NjYWxlKCl9IGZ1bmN0aW9uLCBvciBmYWxsYmFjayB0byAwIGlmCiAqIHRoaXMgaGFzIG5vdCBiZWVuIHNldC4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyBUaGUgc3VtIG9mIHRoZSB0d28gb3BlcmFuZHMsIGFzIGEgc3RyaW5nLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBiY2FkZChzdHJpbmcgJG51bTEsIHN0cmluZyAkbnVtMiwgP2ludCAkc2NhbGUgPSBudWxsKTogc3RyaW5nIHt9CgovKioKICogU3VidHJhY3Qgb25lIGFyYml0cmFyeSBwcmVjaXNpb24gbnVtYmVyIGZyb20gYW5vdGhlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmJjc3ViLnBocAogKiBAcGFyYW0gc3RyaW5nICRudW0xIDxwPgogKiBUaGUgbGVmdCBvcGVyYW5kLCBhcyBhIHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRudW0yIDxwPgogKiBUaGUgcmlnaHQgb3BlcmFuZCwgYXMgYSBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIGludHxudWxsICRzY2FsZSA8cD4KICogVGhpcyBvcHRpb25hbCBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlCiAqIGRlY2ltYWwgcGxhY2UgaW4gdGhlIHJlc3VsdC4gSWYgb21pdHRlZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBzY2FsZQogKiBzZXQgZ2xvYmFsbHkgd2l0aCB0aGUge0BsaW5rIGJjc2NhbGUoKX0gZnVuY3Rpb24sIG9yIGZhbGxiYWNrIHRvIDAgaWYKICogdGhpcyBoYXMgbm90IGJlZW4gc2V0LgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIFRoZSByZXN1bHQgb2YgdGhlIHN1YnRyYWN0aW9uLCBhcyBhIHN0cmluZy4KICovCiNbUHVyZV0KZnVuY3Rpb24gYmNzdWIoc3RyaW5nICRudW0xLCBzdHJpbmcgJG51bTIsID9pbnQgJHNjYWxlID0gbnVsbCk6IHN0cmluZyB7fQoKLyoqCiAqIE11bHRpcGx5IHR3byBhcmJpdHJhcnkgcHJlY2lzaW9uIG51bWJlcnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5iY211bC5waHAKICogQHBhcmFtIHN0cmluZyAkbnVtMSA8cD4KICogVGhlIGxlZnQgb3BlcmFuZCwgYXMgYSBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbnVtMiA8cD4KICogVGhlIHJpZ2h0IG9wZXJhbmQsIGFzIGEgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBpbnR8bnVsbCAkc2NhbGUgPHA+CiAqIFRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZQogKiBkZWNpbWFsIHBsYWNlIGluIHRoZSByZXN1bHQuIElmIG9taXR0ZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgc2NhbGUKICogc2V0IGdsb2JhbGx5IHdpdGggdGhlIHtAbGluayBiY3NjYWxlKCl9IGZ1bmN0aW9uLCBvciBmYWxsYmFjayB0byAwIGlmCiAqIHRoaXMgaGFzIG5vdCBiZWVuIHNldC4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyB0aGUgcmVzdWx0IGFzIGEgc3RyaW5nLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBiY211bChzdHJpbmcgJG51bTEsIHN0cmluZyAkbnVtMiwgP2ludCAkc2NhbGUgPSBudWxsKTogc3RyaW5nIHt9CgovKioKICogRGl2aWRlIHR3byBhcmJpdHJhcnkgcHJlY2lzaW9uIG51bWJlcnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5iY2Rpdi5waHAKICogQHBhcmFtIHN0cmluZyAkbnVtMSA8cD4KICogVGhlIGRpdmlkZW5kLCBhcyBhIHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRudW0yIDxwPgogKiBUaGUgZGl2aXNvciwgYXMgYSBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIGludHxudWxsICRzY2FsZSBbb3B0aW9uYWxdIDxwPgogKiBUaGlzIG9wdGlvbmFsIHBhcmFtZXRlciBpcyB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUKICogZGVjaW1hbCBwbGFjZSBpbiB0aGUgcmVzdWx0LiBJZiBvbWl0dGVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIHNjYWxlCiAqIHNldCBnbG9iYWxseSB3aXRoIHRoZSB7QGxpbmsgYmNzY2FsZSgpfSBmdW5jdGlvbiwgb3IgZmFsbGJhY2sgdG8gMCBpZgogKiB0aGlzIGhhcyBub3QgYmVlbiBzZXQuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8bnVsbCB0aGUgcmVzdWx0IG9mIHRoZSBkaXZpc2lvbiBhcyBhIHN0cmluZywgb3IgPGI+TlVMTDwvYj4gaWYKICogPGk+ZGl2aXNvcjwvaT4gaXMgMC4KICovCiNbUHVyZV0KI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZSh0bzogJzcuNCcpXQpmdW5jdGlvbiBiY2RpdihzdHJpbmcgJG51bTEsIHN0cmluZyAkbnVtMiwgP2ludCAkc2NhbGUgPSAwKTogP3N0cmluZyB7fQoKLyoqCiAqIERpdmlkZSB0d28gYXJiaXRyYXJ5IHByZWNpc2lvbiBudW1iZXJzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYmNkaXYucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG51bTEgPHA+CiAqIFRoZSBkaXZpZGVuZCwgYXMgYSBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbnVtMiA8cD4KICogVGhlIGRpdmlzb3IsIGFzIGEgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBpbnR8bnVsbCAkc2NhbGUgW29wdGlvbmFsXSA8cD4KICogVGhpcyBvcHRpb25hbCBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlCiAqIGRlY2ltYWwgcGxhY2UgaW4gdGhlIHJlc3VsdC4gSWYgb21pdHRlZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBzY2FsZQogKiBzZXQgZ2xvYmFsbHkgd2l0aCB0aGUge0BsaW5rIGJjc2NhbGUoKX0gZnVuY3Rpb24sIG9yIGZhbGxiYWNrIHRvIDAgaWYKICogdGhpcyBoYXMgbm90IGJlZW4gc2V0LgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIHRoZSByZXN1bHQgb2YgdGhlIGRpdmlzaW9uIGFzIGEgc3RyaW5nLgogKiBAdGhyb3dzIFxEaXZpc2lvbkJ5WmVyb0Vycm9yIGlmIDxpPmRpdmlzb3I8L2k+IGlzIDAuIEF2YWlsYWJsZSBzaW5jZSBQSFAgOC4wLgogKi8KI1tQdXJlXQojW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKCc4LjAnKV0KZnVuY3Rpb24gYmNkaXYoc3RyaW5nICRudW0xLCBzdHJpbmcgJG51bTIsID9pbnQgJHNjYWxlID0gbnVsbCk6IHN0cmluZyB7fQoKLyoqCiAqIEdldCBtb2R1bHVzIG9mIGFuIGFyYml0cmFyeSBwcmVjaXNpb24gbnVtYmVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYmNtb2QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG51bTEgPHA+CiAqIFRoZSBkaXZpZGVuZCwgYXMgYSBzdHJpbmcuIFNpbmNlIFBIUCA3LjIsIHRoZSBkaXZpZGVkIGlzIG5vIGxvbmdlciB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlci4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRudW0yIDxwPgogKiBUaGUgZGl2aXNvciwgYXMgYSBzdHJpbmcuIFNpbmNlIFBIUCA3LjIsIHRoZSBkaXZpc29yIGlzIG5vIGxvbmdlciB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlci4KICogPC9wPgogKiBAcGFyYW0gaW50fG51bGwgJHNjYWxlIFtvcHRpb25hbF0gPHA+CiAqIFRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZQogKiBkZWNpbWFsIHBsYWNlIGluIHRoZSByZXN1bHQuIElmIG9taXR0ZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgc2NhbGUKICogc2V0IGdsb2JhbGx5IHdpdGggdGhlIHtAbGluayBiY3NjYWxlKCl9IGZ1bmN0aW9uLCBvciBmYWxsYmFjayB0byAwIGlmCiAqIHRoaXMgaGFzIG5vdCBiZWVuIHNldC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjIuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8bnVsbCB0aGUgbW9kdWx1cyBhcyBhIHN0cmluZywgb3IgPGI+TlVMTDwvYj4gaWYKICogPGk+ZGl2aXNvcjwvaT4gaXMgMC4KICovCiNbUHVyZV0KI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZSh0bzogJzcuNCcpXQpmdW5jdGlvbiBiY21vZChzdHJpbmcgJG51bTEsIHN0cmluZyAkbnVtMiwgP2ludCAkc2NhbGUgPSAwKTogP3N0cmluZyB7fQoKLyoqCiAqIEdldCBtb2R1bHVzIG9mIGFuIGFyYml0cmFyeSBwcmVjaXNpb24gbnVtYmVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYmNtb2QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG51bTEgPHA+CiAqIFRoZSBkaXZpZGVuZCwgYXMgYSBzdHJpbmcuIFNpbmNlIFBIUCA3LjIsIHRoZSBkaXZpZGVkIGlzIG5vIGxvbmdlciB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlci4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRudW0yIDxwPgogKiBUaGUgZGl2aXNvciwgYXMgYSBzdHJpbmcuIFNpbmNlIFBIUCA3LjIsIHRoZSBkaXZpc29yIGlzIG5vIGxvbmdlciB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlci4KICogPC9wPgogKiBAcGFyYW0gaW50fG51bGwgJHNjYWxlIFtvcHRpb25hbF0gPHA+CiAqIFRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZQogKiBkZWNpbWFsIHBsYWNlIGluIHRoZSByZXN1bHQuIElmIG9taXR0ZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgc2NhbGUKICogc2V0IGdsb2JhbGx5IHdpdGggdGhlIHtAbGluayBiY3NjYWxlKCl9IGZ1bmN0aW9uLCBvciBmYWxsYmFjayB0byAwIGlmCiAqIHRoaXMgaGFzIG5vdCBiZWVuIHNldC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA3LjIuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgdGhlIG1vZHVsdXMgYXMgYSBzdHJpbmcuCiAqIEB0aHJvd3MgXERpdmlzaW9uQnlaZXJvRXJyb3IgaWYgPGk+ZGl2aXNvcjwvaT4gaXMgMC4gQXZhaWxhYmxlIHNpbmNlIFBIUCA4LjAuCiAqLwojW1B1cmVdCiNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoJzguMCcpXQpmdW5jdGlvbiBiY21vZChzdHJpbmcgJG51bTEsIHN0cmluZyAkbnVtMiwgP2ludCAkc2NhbGUgPSBudWxsKTogc3RyaW5nIHt9CgovKioKICogUmFpc2UgYW4gYXJiaXRyYXJ5IHByZWNpc2lvbiBudW1iZXIgdG8gYW5vdGhlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmJjcG93LnBocAogKiBAcGFyYW0gc3RyaW5nICRudW0gPHA+CiAqIFRoZSBiYXNlLCBhcyBhIHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRleHBvbmVudCA8cD4KICogVGhlIGV4cG9uZW50LCBhcyBhIHN0cmluZy4gSWYgdGhlIGV4cG9uZW50IGlzIG5vbi1pbnRlZ3JhbCwgaXQgaXMgdHJ1bmNhdGVkLgogKiBUaGUgdmFsaWQgcmFuZ2Ugb2YgdGhlIGV4cG9uZW50IGlzIHBsYXRmb3JtIHNwZWNpZmljLCBidXQgaXMgYXQgbGVhc3QKICogLTIxNDc0ODM2NDggdG8gMjE0NzQ4MzY0Ny4KICogPC9wPgogKiBAcGFyYW0gaW50fG51bGwgJHNjYWxlIDxwPgogKiBUaGlzIG9wdGlvbmFsIHBhcmFtZXRlciBpcyB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUKICogZGVjaW1hbCBwbGFjZSBpbiB0aGUgcmVzdWx0LiBJZiBvbWl0dGVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIHNjYWxlCiAqIHNldCBnbG9iYWxseSB3aXRoIHRoZSB7QGxpbmsgYmNzY2FsZSgpfSBmdW5jdGlvbiwgb3IgZmFsbGJhY2sgdG8gMCBpZgogKiB0aGlzIGhhcyBub3QgYmVlbiBzZXQuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgdGhlIHJlc3VsdCBhcyBhIHN0cmluZy4KICovCiNbUHVyZV0KZnVuY3Rpb24gYmNwb3coc3RyaW5nICRudW0sIHN0cmluZyAkZXhwb25lbnQsID9pbnQgJHNjYWxlID0gbnVsbCk6IHN0cmluZyB7fQoKLyoqCiAqIEdldCB0aGUgc3F1YXJlIHJvb3Qgb2YgYW4gYXJiaXRyYXJ5IHByZWNpc2lvbiBudW1iZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5iY3NxcnQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG51bSA8cD4KICogVGhlIG9wZXJhbmQsIGFzIGEgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBpbnR8bnVsbCAkc2NhbGUgW29wdGlvbmFsXQogKiBAcmV0dXJuIHN0cmluZ3xudWxsIHRoZSBzcXVhcmUgcm9vdCBhcyBhIHN0cmluZywgb3IgPGI+TlVMTDwvYj4gaWYKICogPGk+b3BlcmFuZDwvaT4gaXMgbmVnYXRpdmUuCiAqLwojW1B1cmVdCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gInN0cmluZyJdLCBkZWZhdWx0OiAiP3N0cmluZyIpXQpmdW5jdGlvbiBiY3NxcnQoc3RyaW5nICRudW0sID9pbnQgJHNjYWxlKSB7fQoKLyoqCiAqIFNldCBkZWZhdWx0IHNjYWxlIHBhcmFtZXRlciBmb3IgYWxsIGJjIG1hdGggZnVuY3Rpb25zCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYmNzY2FsZS5waHAKICogQHBhcmFtIGludCAkc2NhbGUKICogQHJldHVybiBpbnR8Ym9vbAogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnNy4zJyA9PiAnaW50J10sIGRlZmF1bHQ6ICdib29sJyldCmZ1bmN0aW9uIGJjc2NhbGUoCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuMicpXSBpbnQgJHNjYWxlLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4zJyldICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxudWxsJ10sIGRlZmF1bHQ6ICdpbnQnKV0gJHNjYWxlID0gbnVsbAopIHt9CgovKioKICogQ29tcGFyZSB0d28gYXJiaXRyYXJ5IHByZWNpc2lvbiBudW1iZXJzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYmNjb21wLnBocAogKiBAcGFyYW0gc3RyaW5nICRudW0xIDxwPgogKiBUaGUgbGVmdCBvcGVyYW5kLCBhcyBhIHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRudW0yIDxwPgogKiBUaGUgcmlnaHQgb3BlcmFuZCwgYXMgYSBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIGludHxudWxsICRzY2FsZSA8cD4KICogVGhlIG9wdGlvbmFsIDxpPnNjYWxlPC9pPiBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzZXQgdGhlCiAqIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcGxhY2Ugd2hpY2ggd2lsbCBiZSB1c2VkIGluIHRoZQogKiBjb21wYXJpc29uLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IDAgaWYgdGhlIHR3byBvcGVyYW5kcyBhcmUgZXF1YWwsIDEgaWYgdGhlCiAqIDxpPmxlZnRfb3BlcmFuZDwvaT4gaXMgbGFyZ2VyIHRoYW4gdGhlCiAqIDxpPnJpZ2h0X29wZXJhbmQ8L2k+LCAtMSBvdGhlcndpc2UuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIGJjY29tcChzdHJpbmcgJG51bTEsIHN0cmluZyAkbnVtMiwgP2ludCAkc2NhbGUgPSBudWxsKTogaW50IHt9CgovKioKICogUmFpc2UgYW4gYXJiaXRyYXJ5IHByZWNpc2lvbiBudW1iZXIgdG8gYW5vdGhlciwgcmVkdWNlZCBieSBhIHNwZWNpZmllZCBtb2R1bHVzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYmNwb3dtb2QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG51bSA8cD4KICogVGhlIGJhc2UsIGFzIGFuIGludGVncmFsIHN0cmluZyAoaS5lLiB0aGUgc2NhbGUgaGFzIHRvIGJlIHplcm8pLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGV4cG9uZW50IDxwPgogKiBUaGUgZXhwb25lbnQsIGFzIGFuIG5vbi1uZWdhdGl2ZSwgaW50ZWdyYWwgc3RyaW5nIChpLmUuIHRoZSBzY2FsZSBoYXMgdG8gYmUKICogemVybykuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbW9kdWx1cyA8cD4KICogVGhlIG1vZHVsdXMsIGFzIGFuIGludGVncmFsIHN0cmluZyAoaS5lLiB0aGUgc2NhbGUgaGFzIHRvIGJlIHplcm8pLgogKiA8L3A+CiAqIEBwYXJhbSBpbnR8bnVsbCAkc2NhbGUgPHA+CiAqIFRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZQogKiBkZWNpbWFsIHBsYWNlIGluIHRoZSByZXN1bHQuIElmIG9taXR0ZWQsIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgc2NhbGUKICogc2V0IGdsb2JhbGx5IHdpdGggdGhlIHtAbGluayBiY3NjYWxlKCl9IGZ1bmN0aW9uLCBvciBmYWxsYmFjayB0byAwIGlmCiAqIHRoaXMgaGFzIG5vdCBiZWVuIHNldC4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xudWxsIHRoZSByZXN1bHQgYXMgYSBzdHJpbmcsIG9yIDxiPk5VTEw8L2I+IGlmIDxpPm1vZHVsdXM8L2k+CiAqIGlzIDAgb3IgPGk+ZXhwb25lbnQ8L2k+IGlzIG5lZ2F0aXZlLgogKi8KI1tQdXJlXQojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJzdHJpbmciXSwgZGVmYXVsdDogIj9zdHJpbmciKV0KZnVuY3Rpb24gYmNwb3dtb2Qoc3RyaW5nICRudW0sIHN0cmluZyAkZXhwb25lbnQsIHN0cmluZyAkbW9kdWx1cywgP2ludCAkc2NhbGUgPSBudWxsKSB7fQoKLyoqCiAqIEBzaW5jZSA4LjQKICovCmZ1bmN0aW9uIGJjZmxvb3Ioc3RyaW5nICRudW0pOiBzdHJpbmcge30KCi8qKgogKiBAc2luY2UgOC40CiAqLwpmdW5jdGlvbiBiY2NlaWwoc3RyaW5nICRudW0pOiBzdHJpbmcge30KCi8qKgogKiBAc2luY2UgOC40CiAqLwpmdW5jdGlvbiBiY3JvdW5kKHN0cmluZyAkbnVtLCBpbnQgJHByZWNpc2lvbiA9IDAsIFJvdW5kaW5nTW9kZSAkbW9kZSA9IFJvdW5kaW5nTW9kZTo6SGFsZkF3YXlGcm9tWmVybyk6IHN0cmluZyB7fQo8P3BocAoKLyoqCiAqIFBFQ0wgeGxzd3JpdGVyIHN0dWJzIGZvciBQaHBTdG9ybQogKiBodHRwczovL3BlY2wucGhwLm5ldC9wYWNrYWdlL3hsc3dyaXRlcgogKiBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9ib29rLnhsc3dyaXRlci5waHAKICovCgpuYW1lc3BhY2UgVnRpZnVsXEtlcm5lbDsKCiAgICAvKioKICAgICAqIENsYXNzIEV4Y2VsCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy52dGlmdWwta2VybmVsLWV4Y2VsLnBocAogICAgICogQHBhY2thZ2UgVnRpZnVsXEtlcm5lbAogICAgICovCiAgICBjbGFzcyBFeGNlbAogICAgewogICAgICAgIHB1YmxpYyBjb25zdCBUWVBFX1NUUklORyA9IDB4MDE7CiAgICAgICAgcHVibGljIGNvbnN0IFRZUEVfSU5UID0gMHgwMjsKICAgICAgICBwdWJsaWMgY29uc3QgVFlQRV9ET1VCTEUgPSAweDA0OwogICAgICAgIHB1YmxpYyBjb25zdCBUWVBFX1RJTUVTVEFNUCA9IDB4MDg7CiAgICAgICAgcHVibGljIGNvbnN0IFNLSVBfTk9ORSA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IFNLSVBfRU1QVFlfUk9XID0gMHgwMTsKICAgICAgICBwdWJsaWMgY29uc3QgU0tJUF9FTVBUWV9DRUxMUyA9IDB4MDI7CiAgICAgICAgcHVibGljIGNvbnN0IEdSSURMSU5FU19ISURFX0FMTCA9IDA7CiAgICAgICAgcHVibGljIGNvbnN0IEdSSURMSU5FU19TSE9XX1NDUkVFTiA9IDE7CiAgICAgICAgcHVibGljIGNvbnN0IEdSSURMSU5FU19TSE9XX1BSSU5UID0gMjsKICAgICAgICBwdWJsaWMgY29uc3QgR1JJRExJTkVTX1NIT1dfQUxMID0gMzsKCiAgICAgICAgLyoqCiAgICAgICAgICogRXhjZWwgY29uc3RydWN0b3IuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gYXJyYXkgJGNvbmZpZwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkY29uZmlnKSB7fQoKICAgICAgICAvKioKICAgICAgICAgKiBGaWxlIE5hbWUKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lCiAgICAgICAgICogQHBhcmFtIHN0cmluZyAkc2hlZXROYW1lCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIEV4Y2VsCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGZpbGVOYW1lKHN0cmluZyAkZmlsZU5hbWUsIHN0cmluZyAkc2hlZXROYW1lID0gJ1NoZWV0MScpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDb25zdCBtZW1vcnkgbW9kZWwKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lCiAgICAgICAgICogQHBhcmFtIHN0cmluZyAkc2hlZXROYW1lCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIEV4Y2VsCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGNvbnN0TWVtb3J5KHN0cmluZyAkZmlsZU5hbWUsIHN0cmluZyAkc2hlZXROYW1lID0gJ1NoZWV0MScpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBBZGQgYSBuZXcgd29ya3NoZWV0IHRvIGEgd29ya2Jvb2suCiAgICAgICAgICoKICAgICAgICAgKiBUaGUgd29ya3NoZWV0IG5hbWUgbXVzdCBiZSBhIHZhbGlkIEV4Y2VsIHdvcmtzaGVldCBuYW1lLCBpLmUuIGl0IG11c3QgYmUKICAgICAgICAgKiBsZXNzIHRoYW4gMzIgY2hhcmFjdGVyIGFuZCBpdCBjYW5ub3QgY29udGFpbiBhbnkgb2YgdGhlIGNoYXJhY3RlcnM6CiAgICAgICAgICoKICAgICAgICAgKiAgICAgLyBcIFsgXSA6ICogPwogICAgICAgICAqCiAgICAgICAgICogSW4gYWRkaXRpb24sIHlvdSBjYW5ub3QgdXNlIHRoZSBzYW1lLCBjYXNlIGluc2Vuc2l0aXZlLCBgJHNoZWV0TmFtZWAgZm9yIG1vcmUKICAgICAgICAgKiB0aGFuIG9uZSB3b3Jrc2hlZXQuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHNoZWV0TmFtZQogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBFeGNlbAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRTaGVldCg/c3RyaW5nICRzaGVldE5hbWUpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBDaGVja291dCB3b3Jrc2hlZXQKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJHNoZWV0TmFtZQogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBFeGNlbAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja291dFNoZWV0KHN0cmluZyAkc2hlZXROYW1lKTogc2VsZgogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW5zZXJ0IGRhdGEgb24gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHdvcmtzaGVldAogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIGFycmF5ICRoZWFkZXIKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gRXhjZWwKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaGVhZGVyKGFycmF5ICRoZWFkZXIpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBJbnNlcnQgZGF0YSBvbiB0aGUgd29ya3NoZWV0CiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gYXJyYXkgJGRhdGEKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gRXhjZWwKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZGF0YShhcnJheSAkZGF0YSk6IHNlbGYKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdlbmVyYXRlIGZpbGUKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG91dHB1dCgpOiBzdHJpbmcKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAnRmlsZVBhdGgnOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IGZpbGUgcmVzb3VyY2UKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gcmVzb3VyY2UKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGFuZGxlKCkge30KCiAgICAgICAgLyoqCiAgICAgICAgICogQXV0byBmaWx0ZXIgb24gdGhlIHdvcmtzaGVldAogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHN0cmluZyAkcmFuZ2UKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gRXhjZWwKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gYXV0b0ZpbHRlcihzdHJpbmcgJHJhbmdlKTogc2VsZgogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW5zZXJ0IGRhdGEgb24gdGhlIGNlbGwKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBpbnQgJHJvdwogICAgICAgICAqIEBwYXJhbSBpbnQgJGNvbHVtbgogICAgICAgICAqIEBwYXJhbSBpbnR8c3RyaW5nfGZsb2F0ICRkYXRhCiAgICAgICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRmb3JtYXQKICAgICAgICAgKiBAcGFyYW0gcmVzb3VyY2V8bnVsbCAkZm9ybWF0SGFuZGxlCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIEV4Y2VsCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGluc2VydFRleHQoaW50ICRyb3csIGludCAkY29sdW1uLCAkZGF0YSwgc3RyaW5nICRmb3JtYXQgPSBudWxsLCAkZm9ybWF0SGFuZGxlID0gbnVsbCk6IHNlbGYKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEluc2VydCBkYXRlIG9uIHRoZSBjZWxsCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gaW50ICRyb3cKICAgICAgICAgKiBAcGFyYW0gaW50ICRjb2x1bW4KICAgICAgICAgKiBAcGFyYW0gaW50ICR0aW1lc3RhbXAKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGZvcm1hdAogICAgICAgICAqIEBwYXJhbSByZXNvdXJjZXxudWxsICRmb3JtYXRIYW5kbGUKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gRXhjZWwKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0RGF0ZShpbnQgJHJvdywgaW50ICRjb2x1bW4sIGludCAkdGltZXN0YW1wLCBzdHJpbmcgJGZvcm1hdCA9IG51bGwsICRmb3JtYXRIYW5kbGUgPSBudWxsKTogc2VsZgogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW5zZXJ0IGNoYXJ0IG9uIHRoZSBjZWxsCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gaW50ICRyb3cKICAgICAgICAgKiBAcGFyYW0gaW50ICRjb2x1bW4KICAgICAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJGNoYXJ0UmVzb3VyY2UKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gRXhjZWwKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0Q2hhcnQoaW50ICRyb3csIGludCAkY29sdW1uLCAkY2hhcnRSZXNvdXJjZSk6IHNlbGYKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEluc2VydCB1cmwgb24gdGhlIGNlbGwKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBpbnQgJHJvdwogICAgICAgICAqIEBwYXJhbSBpbnQgJGNvbHVtbgogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJHVybAogICAgICAgICAqIEBwYXJhbSByZXNvdXJjZXxudWxsICRmb3JtYXRIYW5kbGUKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gRXhjZWwKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0VXJsKGludCAkcm93LCBpbnQgJGNvbHVtbiwgc3RyaW5nICR1cmwsICRmb3JtYXRIYW5kbGUgPSBudWxsKTogc2VsZgogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW5zZXJ0IGltYWdlIG9uIHRoZSBjZWxsCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gaW50ICRyb3cKICAgICAgICAgKiBAcGFyYW0gaW50ICRjb2x1bW4KICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRpbWFnZVBhdGgKICAgICAgICAgKiBAcGFyYW0gZmxvYXQgJHdpZHRoCiAgICAgICAgICogQHBhcmFtIGZsb2F0ICRoZWlnaHQKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gRXhjZWwKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0SW1hZ2UoaW50ICRyb3csIGludCAkY29sdW1uLCBzdHJpbmcgJGltYWdlUGF0aCwgZmxvYXQgJHdpZHRoID0gMSwgZmxvYXQgJGhlaWdodCA9IDEpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBJbnNlcnQgRm9ybXVsYSBvbiB0aGUgY2VsbAogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIGludCAkcm93CiAgICAgICAgICogQHBhcmFtIGludCAkY29sdW1uCiAgICAgICAgICogQHBhcmFtIHN0cmluZyAkZm9ybXVsYQogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBFeGNlbAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBpbnNlcnRGb3JtdWxhKGludCAkcm93LCBpbnQgJGNvbHVtbiwgc3RyaW5nICRmb3JtdWxhKTogc2VsZgogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogTWVyZ2UgY2VsbHMKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJHJhbmdlCiAgICAgICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBFeGNlbAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBNZXJnZUNlbGxzKHN0cmluZyAkcmFuZ2UsIHN0cmluZyAkZGF0YSk6IHNlbGYKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFNldCBjb2x1bW4gY2VsbHMgd2lkdGggb3IgZm9ybWF0CiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gc3RyaW5nICRyYW5nZQogICAgICAgICAqIEBwYXJhbSBmbG9hdCAkY2VsbFdpZHRoCiAgICAgICAgICogQHBhcmFtIHJlc291cmNlfG51bGwgJGZvcm1hdEhhbmRsZQogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBFeGNlbAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb2x1bW4oc3RyaW5nICRyYW5nZSwgZmxvYXQgJGNlbGxXaWR0aCwgJGZvcm1hdEhhbmRsZSA9IG51bGwpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBTZXQgcm93IGNlbGxzIGhlaWdodCBvciBmb3JtYXQKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJHJhbmdlCiAgICAgICAgICogQHBhcmFtIGZsb2F0ICRjZWxsSGVpZ2h0CiAgICAgICAgICogQHBhcmFtIHJlc291cmNlfG51bGwgJGZvcm1hdEhhbmRsZQogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBFeGNlbAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSb3coc3RyaW5nICRyYW5nZSwgZmxvYXQgJGNlbGxIZWlnaHQsICRmb3JtYXRIYW5kbGUgPSBudWxsKTogc2VsZgogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogT3BlbiB4bHN4IGZpbGUKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVOYW1lCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIEV4Y2VsCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG9wZW5GaWxlKHN0cmluZyAkZmlsZU5hbWUpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBPcGVuIHNoZWV0CiAgICAgICAgICoKICAgICAgICAgKiBkZWZhdWx0IG9wZW4gZmlyc3Qgc2hlZXQKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc2hlZXROYW1lCiAgICAgICAgICogQHBhcmFtIGludCAgICAgICAgICRza2lwRmxhZwogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBFeGNlbAogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBvcGVuU2hlZXQoc3RyaW5nICRzaGVldE5hbWUgPSBudWxsLCBpbnQgJHNraXBGbGFnID0gMHgwMCk6IHNlbGYKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFNldCByb3cgY2VsbCBkYXRhIHR5cGUKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBhcnJheSAkdHlwZXMKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gRXhjZWwKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VHlwZShhcnJheSAkdHlwZXMpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBSZWFkIHZhbHVlcyBmcm9tIHRoZSBzaGVldAogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBhcnJheQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaGVldERhdGEoKTogYXJyYXkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFJlYWQgdmFsdWVzIGZyb20gdGhlIHNoZWV0CiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG5leHRSb3coKTogYXJyYXkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIE5leHQgQ2VsbCBJbiBDYWxsYmFjawogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBmdW5jdGlvbihpbnQgJHJvdywgaW50ICRjZWxsLCBzdHJpbmcgJGRhdGEpCiAgICAgICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRzaGVldE5hbWUgc2hlZXQgbmFtZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0Q2VsbENhbGxiYWNrKGNhbGxhYmxlICRjYWxsYmFjaywgc3RyaW5nICRzaGVldE5hbWUgPSBudWxsKTogdm9pZCB7fQoKICAgICAgICAvKioKICAgICAgICAgKiBGcmVlemUgcGFuZXMKICAgICAgICAgKgogICAgICAgICAqIGZyZWV6ZVBhbmVzKDEsIDApOyAvLyBGcmVlemUgdGhlIGZpcnN0IHJvdy4KICAgICAgICAgKiBmcmVlemVQYW5lcygwLCAxKTsgLy8gRnJlZXplIHRoZSBmaXJzdCBjb2x1bW4uCiAgICAgICAgICogZnJlZXplUGFuZXMoMSwgMSk7IC8vIEZyZWV6ZSBmaXJzdCByb3cvY29sdW1uLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIGludCAkcm93CiAgICAgICAgICogQHBhcmFtIGludCAkY29sdW1uCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBmcmVlemVQYW5lcyhpbnQgJHJvdywgaW50ICRjb2x1bW4pOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBHcmlkbGluZQogICAgICAgICAqCiAgICAgICAgICogRGlzcGxheSBvciBoaWRlIHNjcmVlbiBhbmQgcHJpbnQgZ3JpZGxpbmVzIHVzaW5nIG9uZSBvZiB0aGUgdmFsdWVzIG9mCiAgICAgICAgICoKICAgICAgICAgKiBcVnRpZnVsXEtlcm5lbFxFeGNlbDo6R1JJRExJTkVTX0hJREVfQUxMCiAgICAgICAgICogXFZ0aWZ1bFxLZXJuZWxcRXhjZWw6OkdSSURMSU5FU19TSE9XX0FMTAogICAgICAgICAqIFxWdGlmdWxcS2VybmVsXEV4Y2VsOjpHUklETElORVNfU0hPV19QUklOVAogICAgICAgICAqIFxWdGlmdWxcS2VybmVsXEV4Y2VsOjpHUklETElORVNfU0hPV19TQ1JFRU4KICAgICAgICAgKgogICAgICAgICAqIEV4Y2VsIGRlZmF1bHQgaXMgdGhhdCB0aGUgc2NyZWVuIGdyaWRsaW5lcyBhcmUgb24gYW5kIHRoZSBwcmludGVkIHdvcmtzaGVldCBpcyBvZmYuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gaW50ICRvcHRpb24KICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGdyaWRsaW5lKGludCAkb3B0aW9uKTogc2VsZgogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogV29ya3NoZWV0IHpvb20KICAgICAgICAgKgogICAgICAgICAqIFNldCB0aGUgd29ya3NoZWV0IHpvb20gZmFjdG9yIGluIHRoZSByYW5nZSAxMCA8PSB6b29tIDw9IDQwMDoKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBpbnQgJHNjYWxlCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiB6b29tKGludCAkc2NhbGUpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ2xhc3MgRm9ybWF0CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MudnRpZnVsLWtlcm5lbC1mb3JtYXQucGhwCiAgICAgKiBAcGFja2FnZSBWdGlmdWxcS2VybmVsCiAgICAgKi8KICAgIGNsYXNzIEZvcm1hdAogICAgewogICAgICAgIHB1YmxpYyBjb25zdCBVTkRFUkxJTkVfU0lOR0xFID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgVU5ERVJMSU5FX0RPVUJMRSA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IFVOREVSTElORV9TSU5HTEVfQUNDT1VOVElORyA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IFVOREVSTElORV9ET1VCTEVfQUNDT1VOVElORyA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IEZPUk1BVF9BTElHTl9MRUZUID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgRk9STUFUX0FMSUdOX0NFTlRFUiA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IEZPUk1BVF9BTElHTl9SSUdIVCA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IEZPUk1BVF9BTElHTl9GSUxMID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgRk9STUFUX0FMSUdOX0pVU1RJRlkgPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBGT1JNQVRfQUxJR05fQ0VOVEVSX0FDUk9TUyA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IEZPUk1BVF9BTElHTl9ESVNUUklCVVRFRCA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IEZPUk1BVF9BTElHTl9WRVJUSUNBTF9UT1AgPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBGT1JNQVRfQUxJR05fVkVSVElDQUxfQk9UVE9NID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgRk9STUFUX0FMSUdOX1ZFUlRJQ0FMX0NFTlRFUiA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IEZPUk1BVF9BTElHTl9WRVJUSUNBTF9KVVNUSUZZID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgRk9STUFUX0FMSUdOX1ZFUlRJQ0FMX0RJU1RSSUJVVEVEID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgQ09MT1JfQkxBQ0sgPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBDT0xPUl9CTFVFID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgQ09MT1JfQlJPV04gPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBDT0xPUl9DWUFOID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgQ09MT1JfR1JBWSA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IENPTE9SX0dSRUVOID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgQ09MT1JfTElNRSA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IENPTE9SX01BR0VOVEEgPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBDT0xPUl9OQVZZID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgQ09MT1JfT1JBTkdFID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgQ09MT1JfUElOSyA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IENPTE9SX1BVUlBMRSA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IENPTE9SX1JFRCA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IENPTE9SX1NJTFZFUiA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IENPTE9SX1dISVRFID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgQ09MT1JfWUVMTE9XID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgUEFUVEVSTl9OT05FID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgUEFUVEVSTl9TT0xJRCA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IFBBVFRFUk5fTUVESVVNX0dSQVkgPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBQQVRURVJOX0RBUktfR1JBWSA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IFBBVFRFUk5fTElHSFRfR1JBWSA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IFBBVFRFUk5fREFSS19IT1JJWk9OVEFMID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgUEFUVEVSTl9EQVJLX1ZFUlRJQ0FMID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgUEFUVEVSTl9EQVJLX0RPV04gPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBQQVRURVJOX0RBUktfVVAgPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBQQVRURVJOX0RBUktfR1JJRCA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IFBBVFRFUk5fREFSS19UUkVMTElTID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgUEFUVEVSTl9MSUdIVF9IT1JJWk9OVEFMID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgUEFUVEVSTl9MSUdIVF9WRVJUSUNBTCA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IFBBVFRFUk5fTElHSFRfRE9XTiA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IFBBVFRFUk5fTElHSFRfVVAgPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBQQVRURVJOX0xJR0hUX0dSSUQgPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBQQVRURVJOX0xJR0hUX1RSRUxMSVMgPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBQQVRURVJOX0dSQVlfMTI1ID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgUEFUVEVSTl9HUkFZXzA2MjUgPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBCT1JERVJfVEhJTiA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IEJPUkRFUl9NRURJVU0gPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBCT1JERVJfREFTSEVEID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgQk9SREVSX0RPVFRFRCA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IEJPUkRFUl9USElDSyA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IEJPUkRFUl9ET1VCTEUgPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBCT1JERVJfSEFJUiA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IEJPUkRFUl9NRURJVU1fREFTSEVEID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgQk9SREVSX0RBU0hfRE9UID0gMHgwMDsKICAgICAgICBwdWJsaWMgY29uc3QgQk9SREVSX01FRElVTV9EQVNIX0RPVCA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IEJPUkRFUl9EQVNIX0RPVF9ET1QgPSAweDAwOwogICAgICAgIHB1YmxpYyBjb25zdCBCT1JERVJfTUVESVVNX0RBU0hfRE9UX0RPVCA9IDB4MDA7CiAgICAgICAgcHVibGljIGNvbnN0IEJPUkRFUl9TTEFOVF9EQVNIX0RPVCA9IDB4MDA7CgogICAgICAgIC8qKgogICAgICAgICAqIEZvcm1hdCBjb25zdHJ1Y3Rvci4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSByZXNvdXJjZSAkZmlsZUhhbmRsZQogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZmlsZUhhbmRsZSkge30KCiAgICAgICAgLyoqCiAgICAgICAgICogV3JhcAogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBzdGF0aWMKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gd3JhcCgpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBCb2xkCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBib2xkKCk6IHNlbGYKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEl0YWxpYwogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBzdGF0aWMKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gaXRhbGljKCk6IHNlbGYKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENlbGxzIGJvcmRlcgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIGludCAkc3R5bGUgY29uc3QgQk9SREVSXyoqKgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybiBzdGF0aWMKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gYm9yZGVyKGludCAkc3R5bGUpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBBbGlnbgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIGludCAuLi4kc3R5bGUgY29uc3QgRk9STUFUX0FMSUdOXyoqKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGFsaWduKC4uLiRzdHlsZSk6IHNlbGYKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIE51bWJlciBmb3JtYXQKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdAogICAgICAgICAqCiAgICAgICAgICogIywjIzAKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIG51bWJlcihzdHJpbmcgJGZvcm1hdCk6IHNlbGYKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEZvbnQgY29sb3IKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBpbnQgJGNvbG9yIGNvbnN0IENPTE9SXyoqKioKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGZvbnRDb2xvcihpbnQgJGNvbG9yKTogc2VsZgogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogRm9udAogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIHN0cmluZyAkZm9udE5hbWUKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIGZvbnQoc3RyaW5nICRmb250TmFtZSk6IHNlbGYKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEZvbnQgc2l6ZQogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIGZsb2F0ICRzaXplCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBmb250U2l6ZShmbG9hdCAkc2l6ZSk6IHNlbGYKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIFN0cmluZyBzdHJpa2VvdXQKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gRm9ybWF0CiAgICAgICAgICovCiAgICAgICAgcHVibGljIGZ1bmN0aW9uIHN0cmlrZW91dCgpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBVbmRlcmxpbmUKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSBpbnQgJHN0eWxlIGNvbnN0IFVOREVSTElORV8qKioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiB1bmRlcmxpbmUoaW50ICRzdHlsZSk6IHNlbGYKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENlbGwgYmFja2dyb3VuZAogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtIGludCAkY29sb3IgY29uc3QgQ09MT1JfKioqKgogICAgICAgICAqIEBwYXJhbSBpbnQgJHBhdHRlcm4gY29uc3QgUEFUVEVSTl8qKioqCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICAgICAqLwogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBiYWNrZ3JvdW5kKGludCAkY29sb3IsIGludCAkcGF0dGVybiA9IHNlbGY6OlBBVFRFUk5fU09MSUQpOiBzZWxmCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBGb3JtYXQgdG8gcmVzb3VyY2UKICAgICAgICAgKgogICAgICAgICAqIEByZXR1cm4gcmVzb3VyY2UKICAgICAgICAgKi8KICAgICAgICBwdWJsaWMgZnVuY3Rpb24gdG9SZXNvdXJjZSgpIHt9CiAgICB9Cjw/cGhwCgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXFB1cmU7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5nbWFnaWNrLnBocAogKi8KY2xhc3MgR21hZ2ljawp7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JfQkxBQ0sgPSAwOwogICAgcHVibGljIGNvbnN0IENPTE9SX0JMVUUgPSAwOwogICAgcHVibGljIGNvbnN0IENPTE9SX0NZQU4gPSAwOwogICAgcHVibGljIGNvbnN0IENPTE9SX0dSRUVOID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUl9SRUQgPSAwOwogICAgcHVibGljIGNvbnN0IENPTE9SX1lFTExPVyA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JfTUFHRU5UQSA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JfT1BBQ0lUWSA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JfQUxQSEEgPSAwOwogICAgcHVibGljIGNvbnN0IENPTE9SX0ZVWlogPSAwOwogICAgcHVibGljIGNvbnN0IEdNQUdJQ0tfRVhUTlVNID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfREVGQVVMVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX05PID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQUREID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQVRPUCA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0JVTVBNQVAgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9DTEVBUiA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0NPTE9SSVpFID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQ09QWUJMQUNLID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQ09QWUJMVUUgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9DT1BZID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQ09QWUNZQU4gPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9DT1BZR1JFRU4gPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9DT1BZTUFHRU5UQSA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0NPUFlPUEFDSVRZID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQ09QWVJFRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0NPUFlZRUxMT1cgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9EQVJLRU4gPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9ESUZGRVJFTkNFID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfRElTUExBQ0UgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9ESVNTT0xWRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0hVRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0lOID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfTElHSFRFTiA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0xVTUlOSVpFID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfTUlOVVMgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9NT0RVTEFURSA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX01VTFRJUExZID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfT1VUID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfT1ZFUiA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX09WRVJMQVkgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9QTFVTID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfUkVQTEFDRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX1NBVFVSQVRFID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfU0NSRUVOID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfU1VCVFJBQ1QgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9USFJFU0hPTEQgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9YT1IgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9ESVZJREUgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9IQVJETElHSFQgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9FWENMVVNJT04gPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9DT0xPUkRPREdFID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfQ09MT1JCVVJOID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfU09GVExJR0hUID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfTElORUFSQlVSTiA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUE9TSVRFX0xJTkVBUkRPREdFID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfTElORUFSTElHSFQgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9WSVZJRExJR0hUID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QT1NJVEVfUElOTElHSFQgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBPU0lURV9IQVJETUlYID0gMDsKICAgIHB1YmxpYyBjb25zdCBNT05UQUdFTU9ERV9GUkFNRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgTU9OVEFHRU1PREVfVU5GUkFNRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgTU9OVEFHRU1PREVfQ09OQ0FURU5BVEUgPSAwOwogICAgcHVibGljIGNvbnN0IFNUWUxFX05PUk1BTCA9IDA7CiAgICBwdWJsaWMgY29uc3QgU1RZTEVfSVRBTElDID0gMDsKICAgIHB1YmxpYyBjb25zdCBTVFlMRV9PQkxJUVVFID0gMDsKICAgIHB1YmxpYyBjb25zdCBTVFlMRV9BTlkgPSAwOwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9VTkRFRklORUQgPSAwOwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9QT0lOVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX0JPWCA9IDA7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX1RSSUFOR0xFID0gMDsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfSEVSTUlURSA9IDA7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX0hBTk5JTkcgPSAwOwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9IQU1NSU5HID0gMDsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfQkxBQ0tNQU4gPSAwOwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9HQVVTU0lBTiA9IDA7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX1FVQURSQVRJQyA9IDA7CiAgICBwdWJsaWMgY29uc3QgRklMVEVSX0NVQklDID0gMDsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfQ0FUUk9NID0gMDsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfTUlUQ0hFTEwgPSAwOwogICAgcHVibGljIGNvbnN0IEZJTFRFUl9MQU5DWk9TID0gMDsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfQkVTU0VMID0gMDsKICAgIHB1YmxpYyBjb25zdCBGSUxURVJfU0lOQyA9IDA7CiAgICBwdWJsaWMgY29uc3QgSU1HVFlQRV9VTkRFRklORUQgPSAwOwogICAgcHVibGljIGNvbnN0IElNR1RZUEVfQklMRVZFTCA9IDA7CiAgICBwdWJsaWMgY29uc3QgSU1HVFlQRV9HUkFZU0NBTEUgPSAwOwogICAgcHVibGljIGNvbnN0IElNR1RZUEVfR1JBWVNDQUxFTUFUVEUgPSAwOwogICAgcHVibGljIGNvbnN0IElNR1RZUEVfUEFMRVRURSA9IDA7CiAgICBwdWJsaWMgY29uc3QgSU1HVFlQRV9QQUxFVFRFTUFUVEUgPSAwOwogICAgcHVibGljIGNvbnN0IElNR1RZUEVfVFJVRUNPTE9SID0gMDsKICAgIHB1YmxpYyBjb25zdCBJTUdUWVBFX1RSVUVDT0xPUk1BVFRFID0gMDsKICAgIHB1YmxpYyBjb25zdCBJTUdUWVBFX0NPTE9SU0VQQVJBVElPTiA9IDA7CiAgICBwdWJsaWMgY29uc3QgSU1HVFlQRV9DT0xPUlNFUEFSQVRJT05NQVRURSA9IDA7CiAgICBwdWJsaWMgY29uc3QgSU1HVFlQRV9PUFRJTUlaRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgUkVTT0xVVElPTl9VTkRFRklORUQgPSAwOwogICAgcHVibGljIGNvbnN0IFJFU09MVVRJT05fUElYRUxTUEVSSU5DSCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUkVTT0xVVElPTl9QSVhFTFNQRVJDRU5USU1FVEVSID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9VTkRFRklORUQgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBSRVNTSU9OX05PID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9CWklQID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9GQVggPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBSRVNTSU9OX0dST1VQNCA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fSlBFRyA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fTE9TU0xFU1NKUEVHID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9MWlcgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBSRVNTSU9OX1JMRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fWklQID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9HUk9VUDMgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBSRVNTSU9OX0xaTUEgPSAwOwogICAgcHVibGljIGNvbnN0IENPTVBSRVNTSU9OX0pQRUcyMDAwID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9KQklHMSA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fSkJJRzIgPSAwOwogICAgcHVibGljIGNvbnN0IElOVEVSTEFDRV9OT05FID0gMDsKICAgIHB1YmxpYyBjb25zdCBJTlRFUkxBQ0VfTElORSA9IDA7CiAgICBwdWJsaWMgY29uc3QgSU5URVJMQUNFX1BMQU5FID0gMDsKICAgIHB1YmxpYyBjb25zdCBJTlRFUkxBQ0VfUEFSVElUSU9OID0gMDsKICAgIHB1YmxpYyBjb25zdCBQQUlOVF9QT0lOVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUEFJTlRfUkVQTEFDRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgUEFJTlRfRkxPT0RGSUxMID0gMDsKICAgIHB1YmxpYyBjb25zdCBQQUlOVF9GSUxMVE9CT1JERVIgPSAwOwogICAgcHVibGljIGNvbnN0IFBBSU5UX1JFU0VUID0gMDsKICAgIHB1YmxpYyBjb25zdCBHUkFWSVRZX05PUlRIV0VTVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgR1JBVklUWV9OT1JUSCA9IDA7CiAgICBwdWJsaWMgY29uc3QgR1JBVklUWV9OT1JUSEVBU1QgPSAwOwogICAgcHVibGljIGNvbnN0IEdSQVZJVFlfV0VTVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgR1JBVklUWV9DRU5URVIgPSAwOwogICAgcHVibGljIGNvbnN0IEdSQVZJVFlfRUFTVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgR1JBVklUWV9TT1VUSFdFU1QgPSAwOwogICAgcHVibGljIGNvbnN0IEdSQVZJVFlfU09VVEggPSAwOwogICAgcHVibGljIGNvbnN0IEdSQVZJVFlfU09VVEhFQVNUID0gMDsKICAgIHB1YmxpYyBjb25zdCBTVFJFVENIX05PUk1BTCA9IDA7CiAgICBwdWJsaWMgY29uc3QgU1RSRVRDSF9VTFRSQUNPTkRFTlNFRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgU1RSRVRDSF9DT05ERU5TRUQgPSAwOwogICAgcHVibGljIGNvbnN0IFNUUkVUQ0hfU0VNSUNPTkRFTlNFRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgU1RSRVRDSF9TRU1JRVhQQU5ERUQgPSAwOwogICAgcHVibGljIGNvbnN0IFNUUkVUQ0hfRVhQQU5ERUQgPSAwOwogICAgcHVibGljIGNvbnN0IFNUUkVUQ0hfRVhUUkFFWFBBTkRFRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgU1RSRVRDSF9VTFRSQUVYUEFOREVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBTVFJFVENIX0FOWSA9IDA7CiAgICBwdWJsaWMgY29uc3QgU1RSRVRDSF9FWFRSQUNPTkRFTlNFRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgQUxJR05fVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBBTElHTl9MRUZUID0gMDsKICAgIHB1YmxpYyBjb25zdCBBTElHTl9DRU5URVIgPSAwOwogICAgcHVibGljIGNvbnN0IEFMSUdOX1JJR0hUID0gMDsKICAgIHB1YmxpYyBjb25zdCBERUNPUkFUSU9OX05PID0gMDsKICAgIHB1YmxpYyBjb25zdCBERUNPUkFUSU9OX1VOREVSTElORSA9IDA7CiAgICBwdWJsaWMgY29uc3QgREVDT1JBVElPTl9PVkVSTElORSA9IDA7CiAgICBwdWJsaWMgY29uc3QgREVDT1JBVElPTl9MSU5FVFJPVUdIID0gMDsKICAgIHB1YmxpYyBjb25zdCBOT0lTRV9VTklGT1JNID0gMDsKICAgIHB1YmxpYyBjb25zdCBOT0lTRV9HQVVTU0lBTiA9IDA7CiAgICBwdWJsaWMgY29uc3QgTk9JU0VfTVVMVElQTElDQVRJVkVHQVVTU0lBTiA9IDA7CiAgICBwdWJsaWMgY29uc3QgTk9JU0VfSU1QVUxTRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgTk9JU0VfTEFQTEFDSUFOID0gMDsKICAgIHB1YmxpYyBjb25zdCBOT0lTRV9QT0lTU09OID0gMDsKICAgIHB1YmxpYyBjb25zdCBOT0lTRV9SQU5ET00gPSAwOwogICAgcHVibGljIGNvbnN0IENIQU5ORUxfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX1JFRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ0hBTk5FTF9HUkFZID0gMDsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX0NZQU4gPSAwOwogICAgcHVibGljIGNvbnN0IENIQU5ORUxfR1JFRU4gPSAwOwogICAgcHVibGljIGNvbnN0IENIQU5ORUxfTUFHRU5UQSA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ0hBTk5FTF9CTFVFID0gMDsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX1lFTExPVyA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ0hBTk5FTF9PUEFDSVRZID0gMDsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX01BVFRFID0gMDsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX0JMQUNLID0gMDsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX0lOREVYID0gMDsKICAgIHB1YmxpYyBjb25zdCBDSEFOTkVMX0FMTCA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ0hBTk5FTF9ERUZBVUxUID0gMDsKICAgIHB1YmxpYyBjb25zdCBNRVRSSUNfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBNRVRSSUNfTUVBTkFCU09MVVRFRVJST1IgPSAwOwogICAgcHVibGljIGNvbnN0IE1FVFJJQ19NRUFOU1FVQVJFRVJST1IgPSAwOwogICAgcHVibGljIGNvbnN0IE1FVFJJQ19QRUFLQUJTT0xVVEVFUlJPUiA9IDA7CiAgICBwdWJsaWMgY29uc3QgTUVUUklDX1BFQUtTSUdOQUxUT05PSVNFUkFUSU8gPSAwOwogICAgcHVibGljIGNvbnN0IE1FVFJJQ19ST09UTUVBTlNRVUFSRURFUlJPUiA9IDA7CiAgICBwdWJsaWMgY29uc3QgUElYRUxfQ0hBUiA9IDA7CiAgICBwdWJsaWMgY29uc3QgUElYRUxfRE9VQkxFID0gMDsKICAgIHB1YmxpYyBjb25zdCBQSVhFTF9GTE9BVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUElYRUxfSU5URUdFUiA9IDA7CiAgICBwdWJsaWMgY29uc3QgUElYRUxfTE9ORyA9IDA7CiAgICBwdWJsaWMgY29uc3QgUElYRUxfU0hPUlQgPSAwOwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1JHQiA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9HUkFZID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1RSQU5TUEFSRU5UID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX09IVEEgPSAwOwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfTEFCID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1hZWiA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9ZQ0JDUiA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9ZQ0MgPSAwOwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfWUlRID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1lQQlBSID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1lVViA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9DTVlLID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1NSR0IgPSAwOwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfSFNMID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX0hXQiA9IDA7CiAgICBwdWJsaWMgY29uc3QgQ09MT1JTUEFDRV9SRUM2MDFMVU1BID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1JFQzcwOUxVTUEgPSAwOwogICAgcHVibGljIGNvbnN0IENPTE9SU1BBQ0VfQ0lORU9OTE9HUkdCID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1JFQzYwMVlDQkNSID0gMDsKICAgIHB1YmxpYyBjb25zdCBDT0xPUlNQQUNFX1JFQzcwOVlDQkNSID0gMDsKICAgIHB1YmxpYyBjb25zdCBWSVJUVUFMUElYRUxNRVRIT0RfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBWSVJUVUFMUElYRUxNRVRIT0RfQ09OU1RBTlQgPSAwOwogICAgcHVibGljIGNvbnN0IFZJUlRVQUxQSVhFTE1FVEhPRF9FREdFID0gMDsKICAgIHB1YmxpYyBjb25zdCBWSVJUVUFMUElYRUxNRVRIT0RfTUlSUk9SID0gMDsKICAgIHB1YmxpYyBjb25zdCBWSVJUVUFMUElYRUxNRVRIT0RfVElMRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19VTkRFRklORUQgPSAwOwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfUk9UQVRFID0gMDsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX1NIRUFSID0gMDsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX1JPTEwgPSAwOwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfSFVFID0gMDsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX1NBVFVSQVRJT04gPSAwOwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfQlJJR0hUTkVTUyA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19HQU1NQSA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19TUElGRiA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19EVUxMID0gMDsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX0dSQVlTQ0FMRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19RVUFOVElaRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19ERVNQRUNLTEUgPSAwOwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfUkVEVUNFTk9JU0UgPSAwOwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfQURETk9JU0UgPSAwOwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfU0hBUlBFTiA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19CTFVSID0gMDsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX1RIUkVTSE9MRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19FREdFREVURUNUID0gMDsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX1NQUkVBRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19TT0xBUklaRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19TSEFERSA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19SQUlTRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19TRUdNRU5UID0gMDsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX1NXSVJMID0gMDsKICAgIHB1YmxpYyBjb25zdCBQUkVWSUVXX0lNUExPREUgPSAwOwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfV0FWRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19PSUxQQUlOVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUFJFVklFV19DSEFSQ09BTERSQVdJTkcgPSAwOwogICAgcHVibGljIGNvbnN0IFBSRVZJRVdfSlBFRyA9IDA7CiAgICBwdWJsaWMgY29uc3QgUkVOREVSSU5HSU5URU5UX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgUkVOREVSSU5HSU5URU5UX1NBVFVSQVRJT04gPSAwOwogICAgcHVibGljIGNvbnN0IFJFTkRFUklOR0lOVEVOVF9QRVJDRVBUVUFMID0gMDsKICAgIHB1YmxpYyBjb25zdCBSRU5ERVJJTkdJTlRFTlRfQUJTT0xVVEUgPSAwOwogICAgcHVibGljIGNvbnN0IFJFTkRFUklOR0lOVEVOVF9SRUxBVElWRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgSU5URVJMQUNFX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgSU5URVJMQUNFX05PID0gMDsKICAgIHB1YmxpYyBjb25zdCBGSUxMUlVMRV9VTkRFRklORUQgPSAwOwogICAgcHVibGljIGNvbnN0IEZJTExSVUxFX0VWRU5PREQgPSAwOwogICAgcHVibGljIGNvbnN0IEZJTExSVUxFX05PTlpFUk8gPSAwOwogICAgcHVibGljIGNvbnN0IFBBVEhVTklUU19VU0VSU1BBQ0UgPSAwOwogICAgcHVibGljIGNvbnN0IFBBVEhVTklUU19VU0VSU1BBQ0VPTlVTRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgUEFUSFVOSVRTX09CSkVDVEJPVU5ESU5HQk9YID0gMDsKICAgIHB1YmxpYyBjb25zdCBMSU5FQ0FQX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgTElORUNBUF9CVVRUID0gMDsKICAgIHB1YmxpYyBjb25zdCBMSU5FQ0FQX1JPVU5EID0gMDsKICAgIHB1YmxpYyBjb25zdCBMSU5FQ0FQX1NRVUFSRSA9IDA7CiAgICBwdWJsaWMgY29uc3QgTElORUpPSU5fVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBMSU5FSk9JTl9NSVRFUiA9IDA7CiAgICBwdWJsaWMgY29uc3QgTElORUpPSU5fUk9VTkQgPSAwOwogICAgcHVibGljIGNvbnN0IExJTkVKT0lOX0JFVkVMID0gMDsKICAgIHB1YmxpYyBjb25zdCBSRVNPVVJDRVRZUEVfVU5ERUZJTkVEID0gMDsKICAgIHB1YmxpYyBjb25zdCBSRVNPVVJDRVRZUEVfQVJFQSA9IDA7CiAgICBwdWJsaWMgY29uc3QgUkVTT1VSQ0VUWVBFX0RJU0sgPSAwOwogICAgcHVibGljIGNvbnN0IFJFU09VUkNFVFlQRV9GSUxFID0gMDsKICAgIHB1YmxpYyBjb25zdCBSRVNPVVJDRVRZUEVfTUFQID0gMDsKICAgIHB1YmxpYyBjb25zdCBSRVNPVVJDRVRZUEVfTUVNT1JZID0gMDsKICAgIHB1YmxpYyBjb25zdCBSRVNPVVJDRVRZUEVfUElYRUxTID0gMDsKICAgIHB1YmxpYyBjb25zdCBSRVNPVVJDRVRZUEVfVEhSRUFEUyA9IDA7CiAgICBwdWJsaWMgY29uc3QgUkVTT1VSQ0VUWVBFX1dJRFRIID0gMDsKICAgIHB1YmxpYyBjb25zdCBSRVNPVVJDRVRZUEVfSEVJR0hUID0gMDsKICAgIHB1YmxpYyBjb25zdCBESVNQT1NFX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgRElTUE9TRV9OT05FID0gMDsKICAgIHB1YmxpYyBjb25zdCBESVNQT1NFX0JBQ0tHUk9VTkQgPSAwOwogICAgcHVibGljIGNvbnN0IERJU1BPU0VfUFJFVklPVVMgPSAwOwogICAgcHVibGljIGNvbnN0IE9SSUVOVEFUSU9OX1VOREVGSU5FRCA9IDA7CiAgICBwdWJsaWMgY29uc3QgT1JJRU5UQVRJT05fVE9QTEVGVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgT1JJRU5UQVRJT05fVE9QUklHSFQgPSAwOwogICAgcHVibGljIGNvbnN0IE9SSUVOVEFUSU9OX0JPVFRPTVJJR0hUID0gMDsKICAgIHB1YmxpYyBjb25zdCBPUklFTlRBVElPTl9CT1RUT01MRUZUID0gMDsKICAgIHB1YmxpYyBjb25zdCBPUklFTlRBVElPTl9MRUZUVE9QID0gMDsKICAgIHB1YmxpYyBjb25zdCBPUklFTlRBVElPTl9SSUdIVFRPUCA9IDA7CiAgICBwdWJsaWMgY29uc3QgT1JJRU5UQVRJT05fUklHSFRCT1RUT00gPSAwOwogICAgcHVibGljIGNvbnN0IE9SSUVOVEFUSU9OX0xFRlRCT1RUT00gPSAwOwogICAgcHVibGljIGNvbnN0IFFVQU5UVU1fREVQVEggPSAwOwogICAgcHVibGljIGNvbnN0IFFVQU5UVU0gPSAwOwogICAgcHVibGljIGNvbnN0IFZFUlNJT05fTElCID0gMDsKICAgIHB1YmxpYyBjb25zdCBWRVJTSU9OX05VTSA9IDA7CiAgICBwdWJsaWMgY29uc3QgVkVSU0lPTl9UWFQgPSAnJzsKCiAgICAvKioKICAgICAqIFRoZSBHbWFnaWNrIGNvbnN0cnVjdG9yLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5jb25zdHJ1Y3QucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgW29wdGlvbmFsXSBUaGUgcGF0aCB0byBhbiBpbWFnZSB0byBsb2FkIG9yIGFycmF5IG9mIHBhdGhzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGZpbGVuYW1lID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEFkZHMgbmV3IGltYWdlIHRvIEdtYWdpY2sgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBvYmplY3QuCiAgICAgKiBBZnRlciB0aGUgb3BlcmF0aW9uIGl0ZXJhdG9yIHBvc2l0aW9uIGlzIG1vdmVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmFkZGltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBHbWFnaWNrICRHbWFnaWNrIFRoZSBzb3VyY2UgR21hZ2ljayBvYmplY3QuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCB3aXRoIGltYWdlIGFkZGVkLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZGltYWdlKCRHbWFnaWNrKSB7fQoKICAgIC8qKgogICAgICogQWRkcyByYW5kb20gbm9pc2UgdG8gdGhlIGltYWdlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5hZGRub2lzZWltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJE5PSVNFIFRoZSB0eXBlIG9mIHRoZSBub2lzZS4gT25lIG9mIHRoZSBHbWFnaWNrOjpOT0lTRV8qIGNvbnN0YW50cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IHdpdGggbm9pc2UgYWRkZWQuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkbm9pc2VpbWFnZSgkTk9JU0UpIHt9CgogICAgLyoqCiAgICAgKiBBbm5vdGF0ZXMgYW4gaW1hZ2Ugd2l0aCB0ZXh0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5hbm5vdGF0ZWltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBHbWFnaWNrRHJhdyAkR21hZ2lja0RyYXcgVGhlIEdtYWdpY2tEcmF3IG9iamVjdCB0aGF0IGNvbnRhaW5zIHNldHRpbmdzIGZvciBkcmF3aW5nIHRoZSB0ZXh0LgogICAgICogQHBhcmFtIGZsb2F0ICAgICAgICR4ICAgICAgICAgICBIb3Jpem9udGFsIG9mZnNldCBpbiBwaXhlbHMgdG8gdGhlIGxlZnQgb2YgdGV4dC4KICAgICAqIEBwYXJhbSBmbG9hdCAgICAgICAkeSAgICAgICAgICAgVmVydGljYWwgb2Zmc2V0IGluIHBpeGVscyB0byB0aGUgYmFzZWxpbmUgb2YgdGV4dC4KICAgICAqIEBwYXJhbSBmbG9hdCAgICAgICAkYW5nbGUgICAgICAgVGhlIGFuZ2xlIGF0IHdoaWNoIHRvIHdyaXRlIHRoZSB0ZXh0LgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICR0ZXh0ICAgICAgICBUaGUgc3RyaW5nIHRvIGRyYXcuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCB3aXRoIGFubm90YXRpb24gbWFkZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbm5vdGF0ZWltYWdlKCRHbWFnaWNrRHJhdywgJHgsICR5LCAkYW5nbGUsICR0ZXh0KSB7fQoKICAgIC8qKgogICAgICogQWRkcyBibHVyIGZpbHRlciB0byBpbWFnZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suYmx1cmltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkcmFkaXVzICBCbHVyIHJhZGl1cy4KICAgICAqIEBwYXJhbSBmbG9hdCAkc2lnbWEgICBTdGFuZGFyZCBkZXZpYXRpb24KICAgICAqIEBwYXJhbSBpbnQgICAkY2hhbm5lbCBbb3B0aW9uYWxdCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBibHVycmVkIEdtYWdpY2sgb2JqZWN0LgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJsdXJpbWFnZSgkcmFkaXVzLCAkc2lnbWEsICRjaGFubmVsID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFN1cnJvdW5kcyB0aGUgaW1hZ2Ugd2l0aCBhIGJvcmRlciBvZiB0aGUgY29sb3IgZGVmaW5lZCBieSB0aGUgYm9yZGVyY29sb3IgR21hZ2lja1BpeGVsIG9iamVjdCBvciBhIGNvbG9yIHN0cmluZy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suYm9yZGVyaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIEdtYWdpY2tQaXhlbCAkY29sb3IgIEdtYWdpY2tQaXhlbCBvYmplY3Qgb3IgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYm9yZGVyIGNvbG9yLgogICAgICogQHBhcmFtIGludCAgICAgICAgICAkd2lkdGggIEJvcmRlciB3aWR0aC4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgJGhlaWdodCBCb3JkZXIgaGVpZ2h0LgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgd2l0aCBib3JkZXIgZGVmaW5lZC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib3JkZXJpbWFnZSgkY29sb3IsICR3aWR0aCwgJGhlaWdodCkge30KCiAgICAvKioKICAgICAqIFNpbXVsYXRlcyBhIGNoYXJjb2FsIGRyYXdpbmcuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmNoYXJjb2FsaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgVGhlIHJhZGl1cyBvZiB0aGUgR2F1c3NpYW4sIGluIHBpeGVscywgbm90IGNvdW50aW5nIHRoZSBjZW50ZXIgcGl4ZWwuCiAgICAgKiBAcGFyYW0gZmxvYXQgJHNpZ21hICBUaGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHRoZSBHYXVzc2lhbiwgaW4gcGl4ZWxzLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgd2l0aCBjaGFyY29hbCBzaW11bGF0aW9uLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoYXJjb2FsaW1hZ2UoJHJhZGl1cywgJHNpZ21hKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhIHJlZ2lvbiBvZiBhbiBpbWFnZSBhbmQgY29sbGFwc2VzIHRoZSBpbWFnZSB0byBvY2N1cHkgdGhlIHJlbW92ZWQgcG9ydGlvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suY2hvcGltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoICBXaWR0aCBvZiB0aGUgY2hvcHBlZCBhcmVhLgogICAgICogQHBhcmFtIGludCAkaGVpZ2h0IEhlaWdodCBvZiB0aGUgY2hvcHBlZCBhcmVhLgogICAgICogQHBhcmFtIGludCAkeCAgICAgIFggb3JpZ28gb2YgdGhlIGNob3BwZWQgYXJlYS4KICAgICAqIEBwYXJhbSBpbnQgJHkgICAgICBZIG9yaWdvIG9mIHRoZSBjaG9wcGVkIGFyZWEuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBjaG9wcGVkIEdtYWdpY2sgb2JqZWN0LgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNob3BpbWFnZSgkd2lkdGgsICRoZWlnaHQsICR4LCAkeSkge30KCiAgICAvKioKICAgICAqIENsZWFycyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgdG8gR21hZ2ljayBvYmplY3QuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmNsZWFyLnBocAogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgY2xlYXJlZCBHbWFnaWNrIG9iamVjdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhcigpIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIGEgY29tbWVudCB0byB5b3VyIGltYWdlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5jb21tZW50aW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY29tbWVudCBUaGUgY29tbWVudCB0byBhZGQuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCB3aXRoIGNvbW1lbnQgYWRkZWQuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tbWVudGltYWdlKCRjb21tZW50KSB7fQoKICAgIC8qKgogICAgICogQ29tcG9zaXRlIG9uZSBpbWFnZSBvbnRvIGFub3RoZXIgYXQgdGhlIHNwZWNpZmllZCBvZmZzZXQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmNvbXBvc2l0ZWltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBHbWFnaWNrICRzb3VyY2UgIEdtYWdpY2sgb2JqZWN0IHdoaWNoIGhvbGRzIHRoZSBjb21wb3NpdGUgaW1hZ2UuCiAgICAgKiBAcGFyYW0gaW50ICAgICAkQ09NUE9TRSBDb21wb3NpdGUgb3BlcmF0b3IuCiAgICAgKiBAcGFyYW0gaW50ICAgICAkeCAgICAgICBUaGUgY29sdW1uIG9mZnNldCBvZiB0aGUgY29tcG9zaXRlZCBpbWFnZS4KICAgICAqIEBwYXJhbSBpbnQgICAgICR5ICAgICAgIFRoZSByb3cgb2Zmc2V0IG9mIHRoZSBjb21wb3NpdGVkIGltYWdlLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgd2l0aCBjb21wb3NpdGlvbnMuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcG9zaXRlaW1hZ2UoJHNvdXJjZSwgJENPTVBPU0UsICR4LCAkeSkge30KCiAgICAvKioKICAgICAqIEV4dHJhY3RzIGEgcmVnaW9uIG9mIHRoZSBpbWFnZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suY3JvcGltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoICBUaGUgd2lkdGggb2YgdGhlIGNyb3AuCiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQgVGhlIGhlaWdodCBvZiB0aGUgY3JvcC4KICAgICAqIEBwYXJhbSBpbnQgJHggICAgICBUaGUgWCBjb29yZGluYXRlIG9mIHRoZSBjcm9wcGVkIHJlZ2lvbidzIHRvcCBsZWZ0IGNvcm5lci4KICAgICAqIEBwYXJhbSBpbnQgJHkgICAgICBUaGUgWSBjb29yZGluYXRlIG9mIHRoZSBjcm9wcGVkIHJlZ2lvbidzIHRvcCBsZWZ0IGNvcm5lci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIGNyb3BwZWQgR21hZ2ljayBvYmplY3QuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JvcGltYWdlKCR3aWR0aCwgJGhlaWdodCwgJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIGZpeGVkIHNpemUgdGh1bWJuYWlsIGJ5IGZpcnN0IHNjYWxpbmcgdGhlIGltYWdlIGRvd24gYW5kIGNyb3BwaW5nIGEgc3BlY2lmaWVkIGFyZWEgZnJvbSB0aGUgY2VudGVyLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5jcm9wdGh1bWJuYWlsaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkd2lkdGggIFRoZSB3aWR0aCBvZiB0aGUgdGh1bWJuYWlsLgogICAgICogQHBhcmFtIGludCAkaGVpZ2h0IFRoZSBIZWlnaHQgb2YgdGhlIHRodW1ibmFpbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIGNyb3BwZWQgR21hZ2ljayBvYmplY3QuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JvcHRodW1ibmFpbGltYWdlKCR3aWR0aCwgJGhlaWdodCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdtYWdpY2sgb2JqZWN0IHdpdGggaW1hZ2UgcG9pbnRlciBhdCB0aGUgY29ycmVjdCBzZXF1ZW5jZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suY3VycmVudC5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgUmV0dXJucyBzZWxmIG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpIHt9CgogICAgLyoqCiAgICAgKiBEaXNwbGFjZXMgYW4gaW1hZ2UncyBjb2xvcm1hcCBieSBhIGdpdmVuIG51bWJlciBvZiBwb3NpdGlvbnMuCiAgICAgKiBJZiB5b3UgY3ljbGUgdGhlIGNvbG9ybWFwIGEgbnVtYmVyIG9mIHRpbWVzIHlvdSBjYW4gcHJvZHVjZSBhIHBzeWNoZWRlbGljIGVmZmVjdC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suY3ljbGVjb2xvcm1hcGltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGRpc3BsYWNlIFRoZSBhbW91bnQgdG8gZGlzcGxhY2UgdGhlIGNvbG9ybWFwLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBSZXR1cm5zIHNlbGYgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjeWNsZWNvbG9ybWFwaW1hZ2UoJGRpc3BsYWNlKSB7fQoKICAgIC8qKgogICAgICogQ29tcGFyZXMgZWFjaCBpbWFnZSB3aXRoIHRoZSBuZXh0IGluIGEgc2VxdWVuY2UuCiAgICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGJvdW5kaW5nIHJlZ2lvbiBvZiBhbnkgcGl4ZWwgZGlmZmVyZW5jZXMgaXQgZGlzY292ZXJzLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5kZWNvbnN0cnVjdGltYWdlcy5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgUmV0dXJucyBhIG5ldyBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlY29uc3RydWN0aW1hZ2VzKCkge30KCiAgICAvKioKICAgICAqIFJlZHVjZXMgdGhlIHNwZWNrbGUgbm9pc2UgaW4gYW4gaW1hZ2Ugd2hpbGUgcHJlc2VydmluZyB0aGUgZWRnZXMgb2YgdGhlIG9yaWdpbmFsIGltYWdlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5kZXNwZWNrbGVpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIGRlc3BlY2tsZWQgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNwZWNrbGVpbWFnZSgpIHt9CgogICAgLyoqCiAgICAgKiBEZXN0cm95cyB0aGUgR21hZ2ljayBvYmplY3QgYW5kIGZyZWVzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGl0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5kZXN0cm95LnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXN0cm95KCkge30KCiAgICAvKioKICAgICAqIFJlbmRlcnMgdGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvbiB0aGUgY3VycmVudCBpbWFnZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZHJhd2ltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBHbWFnaWNrRHJhdyAkR21hZ2lja0RyYXcgVGhlIGRyYXdpbmcgb3BlcmF0aW9ucyB0byByZW5kZXIgb24gdGhlIGltYWdlLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgZHJhd24gR21hZ2ljayBvYmplY3QuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJhd2ltYWdlKCRHbWFnaWNrRHJhdykge30KCiAgICAvKioKICAgICAqIEVuaGFuY2UgZWRnZXMgd2l0aGluIHRoZSBpbWFnZSB3aXRoIGEgY29udm9sdXRpb24gZmlsdGVyIG9mIHRoZSBnaXZlbiByYWRpdXMuCiAgICAgKiBVc2UgcmFkaXVzIDAgYW5kIGl0IHdpbGwgYmUgYXV0by1zZWxlY3RlZC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZWRnZWltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkcmFkaXVzIFRoZSByYWRpdXMgb2YgdGhlIG9wZXJhdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IHdpdGggZWRnZXMgZW5oYW5jZWQuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZWRnZWltYWdlKCRyYWRpdXMpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgZ3JheXNjYWxlIGltYWdlIHdpdGggYSB0aHJlZS1kaW1lbnNpb25hbCBlZmZlY3QuCiAgICAgKiBXZSBjb252b2x2ZSB0aGUgaW1hZ2Ugd2l0aCBhIEdhdXNzaWFuIG9wZXJhdG9yIG9mIHRoZSBnaXZlbiByYWRpdXMgYW5kIHN0YW5kYXJkIGRldmlhdGlvbiAoc2lnbWEpLgogICAgICogRm9yIHJlYXNvbmFibGUgcmVzdWx0cywgcmFkaXVzIHNob3VsZCBiZSBsYXJnZXIgdGhhbiBzaWdtYS4KICAgICAqIFVzZSBhIHJhZGl1cyBvZiAwIGFuZCBpdCB3aWxsIGNob29zZSBhIHN1aXRhYmxlIHJhZGl1cyBmb3IgeW91LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5lbWJvc3NpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJhZGl1cyBUaGUgcmFkaXVzIG9mIHRoZSBlZmZlY3QuCiAgICAgKiBAcGFyYW0gZmxvYXQgJHNpZ21hICBUaGUgc2lnbWEgb2YgdGhlIGVmZmVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIGVtYm9zc2VkIEdtYWdpY2sgb2JqZWN0LgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVtYm9zc2ltYWdlKCRyYWRpdXMsICRzaWdtYSkge30KCiAgICAvKioKICAgICAqIEFwcGxpZXMgYSBkaWdpdGFsIGZpbHRlciB0aGF0IGltcHJvdmVzIHRoZSBxdWFsaXR5IG9mIGEgbm9pc3kgaW1hZ2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmVuaGFuY2VpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIGVuaGFuY2VkIEdtYWdpY2sgb2JqZWN0LgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuaGFuY2VpbWFnZSgpIHt9CgogICAgLyoqCiAgICAgKiBFcXVhbGl6ZXMgdGhlIGltYWdlIGhpc3RvZ3JhbS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZXF1YWxpemVpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIGVxdWFsaXplZCBHbWFnaWNrIG9iamVjdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlcXVhbGl6ZWltYWdlKCkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSB2ZXJ0aWNhbCBtaXJyb3IgaW1hZ2UgYnkgcmVmbGVjdGluZyB0aGUgcGl4ZWxzIGFyb3VuZCB0aGUgY2VudHJhbCB4LWF4aXMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmZsaXBpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIGZsaXBwZWQgR21hZ2ljayBvYmplY3QuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmxpcGltYWdlKCkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBob3Jpem9udGFsIG1pcnJvciBpbWFnZSBieSByZWZsZWN0aW5nIHRoZSBwaXhlbHMgYXJvdW5kIHRoZSBjZW50cmFsIHktYXhpcy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZmxvcGltYWdlLnBocAogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgZmxvcHBlZCBHbWFnaWNrIG9iamVjdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmbG9waW1hZ2UoKSB7fQoKICAgIC8qKgogICAgICogQWRkcyBhIHNpbXVsYXRlZCB0aHJlZS1kaW1lbnNpb25hbCBib3JkZXIgYXJvdW5kIHRoZSBpbWFnZS4KICAgICAqIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IHNwZWNpZnkgdGhlIGJvcmRlciB3aWR0aCBvZiB0aGUgdmVydGljYWwgYW5kIGhvcml6b250YWwgc2lkZXMgb2YgdGhlIGZyYW1lLgogICAgICogVGhlIGlubmVyIGFuZCBvdXRlciBiZXZlbHMgaW5kaWNhdGUgdGhlIHdpZHRoIG9mIHRoZSBpbm5lciBhbmQgb3V0ZXIgc2hhZG93cyBvZiB0aGUgZnJhbWUuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmZyYW1laW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIEdtYWdpY2tQaXhlbCAkY29sb3IgICAgICAgR21hZ2lja1BpeGVsIG9iamVjdCBvciBhIGZsb2F0IHJlcHJlc2VudGluZyB0aGUgbWF0dGUgY29sb3IuCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICR3aWR0aCAgICAgICBUaGUgd2lkdGggb2YgdGhlIGJvcmRlci4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgJGhlaWdodCAgICAgIFRoZSBoZWlnaHQgb2YgdGhlIGJvcmRlci4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgJGlubmVyX2JldmVsIFRoZSBpbm5lciBiZXZlbCB3aWR0aC4KICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgJG91dGVyX2JldmVsIFRoZSBvdXRlciBiZXZlbCB3aWR0aC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIGZyYW1lZCBHbWFnaWNrIG9iamVjdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcmFtZWltYWdlKCRjb2xvciwgJHdpZHRoLCAkaGVpZ2h0LCAkaW5uZXJfYmV2ZWwsICRvdXRlcl9iZXZlbCkge30KCiAgICAvKioKICAgICAqIEdhbW1hLWNvcnJlY3RzIGFuIGltYWdlLgogICAgICogVGhlIHNhbWUgaW1hZ2Ugdmlld2VkIG9uIGRpZmZlcmVudCBkZXZpY2VzIHdpbGwgaGF2ZSBwZXJjZXB0dWFsIGRpZmZlcmVuY2VzIGluIHRoZSB3YXkgdGhlIGltYWdlJ3MgaW50ZW5zaXRpZXMKICAgICAqIGFyZSByZXByZXNlbnRlZCBvbiB0aGUgc2NyZWVuLiBTcGVjaWZ5IGluZGl2aWR1YWwgZ2FtbWEgbGV2ZWxzIGZvciB0aGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY2hhbm5lbHMsCiAgICAgKiBvciBhZGp1c3QgYWxsIHRocmVlIHdpdGggdGhlIGdhbW1hIHBhcmFtZXRlci4gVmFsdWVzIHR5cGljYWxseSByYW5nZSBmcm9tIDAuOCB0byAyLjMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmdhbW1haW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRnYW1tYSBUaGUgYW1vdW50IG9mIGdhbW1hLWNvcnJlY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBnYW1tYSBjb3JyZWN0ZWQgR21hZ2ljayBvYmplY3QuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2FtbWFpbWFnZSgkZ2FtbWEpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBHcmFwaGljc01hZ2ljayBBUEkgY29weXJpZ2h0IGFzIGEgc3RyaW5nLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRjb3B5cmlnaHQucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIEdyYXBoaWNzTWFnaWNrIGFuZCBNYWdpY2t3YW5kIEMgQVBJLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGNvcHlyaWdodCgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmaWxlbmFtZSBhc3NvY2lhdGVkIHdpdGggYW4gaW1hZ2Ugc2VxdWVuY2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmdldGZpbGVuYW1lLnBocAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRmaWxlbmFtZSgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpbWFnZSBiYWNrZ3JvdW5kIGNvbG9yLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRpbWFnZWJhY2tncm91bmRjb2xvci5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2tQaXhlbCBSZXR1cm5zIGEgR21hZ2lja1BpeGVsIHNldCB0byB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgaW1hZ2UuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0aW1hZ2ViYWNrZ3JvdW5kY29sb3IoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY2hyb21hdGljaXR5IGJsdWUgcHJpbWFyeSBwb2ludCBmb3IgdGhlIGltYWdlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRpbWFnZWJsdWVwcmltYXJ5LnBocAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgQXJyYXkgY29uc2lzdGluZyBvZiAieCIgYW5kICJ5IiBjb29yZGluYXRlcyBvZiBwb2ludC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZWJsdWVwcmltYXJ5KCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGltYWdlIGJvcmRlciBjb2xvci4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2Vib3JkZXJjb2xvci5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2tQaXhlbCBHbWFnaWNrUGl4ZWwgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29sb3Igb2YgdGhlIGJvcmRlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZWJvcmRlcmNvbG9yKCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGRlcHRoIGZvciBhIHBhcnRpY3VsYXIgaW1hZ2UgY2hhbm5lbC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2VjaGFubmVsZGVwdGgucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkY2hhbm5lbF90eXBlCiAgICAgKgogICAgICogQHJldHVybiBpbnQgRGVwdGggb2YgaW1hZ2UgY2hhbm5lbC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZWNoYW5uZWxkZXB0aCgkY2hhbm5lbF90eXBlKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY29sb3Igb2YgdGhlIHNwZWNpZmllZCBjb2xvcm1hcCBpbmRleC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2Vjb2xvcnMucGhwCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiBjb2xvcnMgaW4gaW1hZ2UuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZWNvbG9ycygpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBpbWFnZSBjb2xvcnNwYWNlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRpbWFnZWNvbG9yc3BhY2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBpbnQgQ29sb3JzcGFjZQogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGltYWdlY29sb3JzcGFjZSgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjb21wb3NpdGUgb3BlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbWFnZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2Vjb21wb3NlLnBocAogICAgICoKICAgICAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGNvbXBvc2l0ZSBvcGVyYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGltYWdlLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGltYWdlY29tcG9zZSgpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBpbWFnZSBkZWxheS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2VkZWxheS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBjb21wb3NpdGUgb3BlcmF0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbWFnZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZWRlbGF5KCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGRlcHRoIG9mIHRoZSBpbWFnZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2VkZXB0aC5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBJbWFnZSBkZXB0aC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZWRlcHRoKCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGltYWdlIGRpc3Bvc2FsIG1ldGhvZC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2VkaXNwb3NlLnBocAogICAgICoKICAgICAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGRpc3Bvc2UgbWV0aG9kIG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0aW1hZ2VkaXNwb3NlKCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGV4dHJlbWEgZm9yIHRoZSBpbWFnZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2VleHRyZW1hLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHRoZSBrZXlzICJtaW4iIGFuZCAibWF4Ii4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZWV4dHJlbWEoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZmlsZW5hbWUgb2YgYSBwYXJ0aWN1bGFyIGltYWdlIGluIGEgc2VxdWVuY2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmdldGltYWdlZmlsZW5hbWUucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUgaW1hZ2UKICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZWZpbGVuYW1lKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGZvcm1hdCBvZiBhIHBhcnRpY3VsYXIgaW1hZ2UgaW4gYSBzZXF1ZW5jZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2Vmb3JtYXQucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBpbWFnZSBmb3JtYXQgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZWZvcm1hdCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBpbWFnZSBnYW1tYS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2VnYW1tYS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0IFJldHVybnMgdGhlIGltYWdlIGdhbW1hIG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0aW1hZ2VnYW1tYSgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjaHJvbWF0aWN5IGdyZWVuIHByaW1hcnkgcG9pbnQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmdldGltYWdlZ3JlZW5wcmltYXJ5LnBocAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBrZXlzICJ4IiBhbmQgInkiIG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0aW1hZ2VncmVlbnByaW1hcnkoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW1hZ2UgaGVpZ2h0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRpbWFnZWhlaWdodC5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBpbWFnZSBoZWlnaHQgaW4gcGl4ZWxzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGltYWdlaGVpZ2h0KCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGltYWdlIGhpc3RvZ3JhbS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2VoaXN0b2dyYW0ucGhwCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBSZXR1cm5zIHRoZSBpbWFnZSBoaXN0b2dyYW0gYXMgYW4gYXJyYXkgb2YgR21hZ2lja1BpeGVsIG9iamVjdHMuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0aW1hZ2VoaXN0b2dyYW0oKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgYWN0aXZlIGltYWdlIHdpdGhpbiB0aGUgR21hZ2ljayBvYmplY3QuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmdldGltYWdlaW5kZXgucGhwCiAgICAgKgogICAgICogQHJldHVybiBpbnQgSW5kZXggb2YgY3VycmVudCBhY3RpdmUgaW1hZ2UuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0aW1hZ2VpbmRleCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBpbWFnZSBpbnRlcmxhY2Ugc2NoZW1lLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRpbWFnZWludGVybGFjZXNjaGVtZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBpbnRlcmxhY2Ugc2NoZW1lIGFzIGFuIGludGVnZXIgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZWludGVybGFjZXNjaGVtZSgpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBpbWFnZSBpdGVyYXRpb25zLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRpbWFnZWl0ZXJhdGlvbnMucGhwCiAgICAgKgogICAgICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgaW1hZ2UgaXRlcmF0aW9ucyBhcyBhbiBpbnRlZ2VyLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGltYWdlaXRlcmF0aW9ucygpIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIGltYWdlIGhhcyBhIG1hdHRlIGNoYW5uZWwuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmdldGltYWdlbWF0dGUucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBpZiB0aGUgaW1hZ2UgaGFzIGEgbWF0dGUgY2hhbm5lbCwgb3RoZXJ3aXNlIEZBTFNFLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGltYWdlbWF0dGUoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaW1hZ2UgbWF0dGUgY29sb3IuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmdldGltYWdlbWF0dGVjb2xvci5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2tQaXhlbCBSZXR1cm5zIEdtYWdpY2tQaXhlbCBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZW1hdHRlY29sb3IoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbmFtZWQgaW1hZ2UgcHJvZmlsZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2Vwcm9maWxlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGltYWdlIHByb2ZpbGUuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0aW1hZ2Vwcm9maWxlKCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY2hyb21hdGljaXR5IHJlZCBwcmltYXJ5IHBvaW50LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRpbWFnZXJlZHByaW1hcnkucGhwCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBSZXR1cm5zIHRoZSBjaHJvbWF0aWNpdHkgcmVkIHByaW1hcnkgcG9pbnQgYXMgYW4gYXJyYXkgd2l0aCB0aGUga2V5cyAieCIgYW5kICJ5Ii4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZXJlZHByaW1hcnkoKSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgaW1hZ2UgcmVuZGVyaW5nIGludGVudC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0aW1hZ2VyZW5kZXJpbmdpbnRlbnQucGhwCiAgICAgKgogICAgICogQHJldHVybiBpbnQgRXh0cmFjdHMgYSByZWdpb24gb2YgdGhlIGltYWdlIGFuZCByZXR1cm5zIGl0IGFzIGEgYSBuZXcgd2FuZC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZXJlbmRlcmluZ2ludGVudCgpIHt9CgogICAgLyoqCiAgICAgKiBHZXRzIHRoZSBpbWFnZSBYIGFuZCBZIHJlc29sdXRpb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmdldGltYWdlcmVzb2x1dGlvbi5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IFJldHVybnMgdGhlIHJlc29sdXRpb24gYXMgYW4gYXJyYXkuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0aW1hZ2VyZXNvbHV0aW9uKCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGltYWdlIHNjZW5lLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRpbWFnZXNjZW5lLnBocAogICAgICoKICAgICAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGltYWdlIHNjZW5lLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGltYWdlc2NlbmUoKSB7fQoKICAgIC8qKgogICAgICogR2VuZXJhdGVzIGFuIFNIQS0yNTYgbWVzc2FnZSBkaWdlc3QgZm9yIHRoZSBpbWFnZSBwaXhlbCBzdHJlYW0uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmdldGltYWdlc2lnbmF0dXJlLnBocAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBmaWxlLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGltYWdlc2lnbmF0dXJlKCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIHBvdGVudGlhbCBpbWFnZSB0eXBlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRpbWFnZXR5cGUucGhwCiAgICAgKgogICAgICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgcG90ZW50aWFsIGltYWdlIHR5cGUuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0aW1hZ2V0eXBlKCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGltYWdlIHVuaXRzIG9mIHJlc29sdXRpb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmdldGltYWdldW5pdHMucGhwCiAgICAgKgogICAgICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgaW1hZ2UgdW5pdHMgb2YgcmVzb2x1dGlvbi4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGltYWdldW5pdHMoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY2hyb21hdGljaXR5IHdoaXRlIHBvaW50LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRpbWFnZXdoaXRlcG9pbnQucGhwCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBSZXR1cm5zIHRoZSBjaHJvbWF0aWNpdHkgd2hpdGUgcG9pbnQgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCB0aGUga2V5cyAieCIgYW5kICJ5Ii4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRpbWFnZXdoaXRlcG9pbnQoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIGltYWdlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRpbWFnZXdpZHRoLnBocAogICAgICoKICAgICAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIGltYWdlIHdpZHRoLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGltYWdld2lkdGgoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgR3JhcGhpY3NNYWdpY2sgcGFja2FnZSBuYW1lLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRwYWNrYWdlbmFtZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBHcmFwaGljc01hZ2ljayBwYWNrYWdlIG5hbWUgYXMgYSBzdHJpbmcuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0cGFja2FnZW5hbWUoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgR21hZ2ljayBxdWFudHVtIGRlcHRoLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRxdWFudHVtZGVwdGgucGhwCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBSZXR1cm5zIHRoZSBHbWFnaWNrIHF1YW50dW0gZGVwdGguCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0cXVhbnR1bWRlcHRoKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIEdyYXBoaWNzTWFnaWNrIHJlbGVhc2UgZGF0ZSBhcyBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0cmVsZWFzZWRhdGUucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgR3JhcGhpY3NNYWdpY2sgcmVsZWFzZSBkYXRlIGFzIGEgc3RyaW5nLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldHJlbGVhc2VkYXRlKCkge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNhbXBsaW5nIGZhY3Rvci4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0c2FtcGxpbmdmYWN0b3JzLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzYW1wbGluZyBmYWN0b3JzIG9mIHRoZSBpbWFnZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRzYW1wbGluZ2ZhY3RvcnMoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2l6ZSBhc3NvY2lhdGVkIHdpdGggdGhlIEdtYWdpY2sgb2JqZWN0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5nZXRzaXplLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyB0aGUgc2l6ZSBhc3NvY2lhdGVkIHdpdGggdGhlIEdtYWdpY2sgb2JqZWN0IGFzIGFuIGFycmF5IHdpdGggdGhlIGtleXMgImNvbHVtbnMiIGFuZCAicm93cyIuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0c2l6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBHcmFwaGljc01hZ2ljayBBUEkgdmVyc2lvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suZ2V0dmVyc2lvbi5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IFJldHVybnMgdGhlIEdyYXBoaWNzTWFnaWNrIEFQSSB2ZXJzaW9uIGFzIGEgc3RyaW5nIGFuZCBhcyBhIG51bWJlci4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXR2ZXJzaW9uKCkge30KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiB0aGUgb2JqZWN0IGhhcyBtb3JlIGltYWdlcy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suaGFzbmV4dGltYWdlLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgaWYgdGhlIG9iamVjdCBoYXMgbW9yZSBpbWFnZXMgd2hlbiB0cmF2ZXJzaW5nIHRoZSBsaXN0IGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbiwgcmV0dXJucyBGQUxTRSBpZiB0aGVyZSBhcmUgbm9uZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNuZXh0aW1hZ2UoKSB7fQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoZSBvYmplY3QgaGFzIGEgcHJldmlvdXMgaW1hZ2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmhhc3ByZXZpb3VzaW1hZ2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBpZiB0aGUgb2JqZWN0IGhhcyBtb3JlIGltYWdlcyB3aGVuIHRyYXZlcnNpbmcgdGhlIGxpc3QgaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uLCByZXR1cm5zIEZBTFNFIGlmIHRoZXJlIGFyZSBub25lLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc3ByZXZpb3VzaW1hZ2UoKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBpbWFnZSB0aGF0IGlzIGEgY29weSBvZiBhbiBleGlzdGluZyBvbmUgd2l0aCB0aGUgaW1hZ2UgcGl4ZWxzICJpbXBsb2RlZCIgYnkgdGhlIHNwZWNpZmllZCBwZXJjZW50YWdlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5pbXBsb2RlaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgVGhlIHJhZGl1cyBvZiB0aGUgaW1wbG9kZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkIFJldHVybnMgaW1wbG9kZWQgR21hZ2ljayBvYmplY3QuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW1wbG9kZWltYWdlKCRyYWRpdXMpIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIGEgbGFiZWwgdG8gYW4gaW1hZ2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLmxhYmVsaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbGFiZWwgVGhlIGxhYmVsIHRvIGFkZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkIEdtYWdpY2sgd2l0aCBsYWJlbC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsYWJlbGltYWdlKCRsYWJlbCkge30KCiAgICAvKioKICAgICAqIEFkanVzdHMgdGhlIGxldmVscyBvZiBhbiBpbWFnZS4KICAgICAqCiAgICAgKiBBZGp1c3RzIHRoZSBsZXZlbHMgb2YgYW4gaW1hZ2UgYnkgc2NhbGluZyB0aGUgY29sb3JzIGZhbGxpbmcgYmV0d2VlbiBzcGVjaWZpZWQgd2hpdGUgYW5kIGJsYWNrIHBvaW50cyB0byB0aGUKICAgICAqIGZ1bGwgYXZhaWxhYmxlIHF1YW50dW0gcmFuZ2UuIFRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIHJlcHJlc2VudCB0aGUgYmxhY2ssIG1pZCwgYW5kIHdoaXRlIHBvaW50cy4gVGhlIGJsYWNrCiAgICAgKiBwb2ludCBzcGVjaWZpZXMgdGhlIGRhcmtlc3QgY29sb3IgaW4gdGhlIGltYWdlLiBDb2xvcnMgZGFya2VyIHRoYW4gdGhlIGJsYWNrIHBvaW50IGFyZSBzZXQgdG8gemVyby4gTWlkIHBvaW50CiAgICAgKiBzcGVjaWZpZXMgYSBnYW1tYSBjb3JyZWN0aW9uIHRvIGFwcGx5IHRvIHRoZSBpbWFnZS4gV2hpdGUgcG9pbnQgc3BlY2lmaWVzIHRoZSBsaWdodGVzdCBjb2xvciBpbiB0aGUgaW1hZ2UuCiAgICAgKiBDb2xvcnMgYnJpZ2h0ZXIgdGhhbiB0aGUgd2hpdGUgcG9pbnQgYXJlIHNldCB0byB0aGUgbWF4aW11bSBxdWFudHVtIHZhbHVlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5sZXZlbGltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkYmxhY2tQb2ludCBUaGUgaW1hZ2UgYmxhY2sgcG9pbnQuCiAgICAgKiBAcGFyYW0gZmxvYXQgJGdhbW1hICAgICAgVGhlIGdhbW1hIHZhbHVlLgogICAgICogQHBhcmFtIGZsb2F0ICR3aGl0ZVBvaW50IFRoZSBpbWFnZSB3aGl0ZSBwb2ludC4KICAgICAqIEBwYXJhbSBpbnQgICAkY2hhbm5lbCAgICBQcm92aWRlIGFueSBjaGFubmVsIGNvbnN0YW50IHRoYXQgaXMgdmFsaWQgZm9yIHlvdXIgY2hhbm5lbCBtb2RlLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGFwcGx5IHRvIG1vcmUgdGhhbiBvbmUgY2hhbm5lbCwgY29tYmluZSBjaGFubmVsdHlwZSBjb25zdGFudHMgdXNpbmcgYml0d2lzZSBvcGVyYXRvcnMuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXIgdG8gdGhpcyBsaXN0IG9mIGNoYW5uZWwgY29uc3RhbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQgR21hZ2ljayBvYmplY3Qgd2l0aCBpbWFnZSBsZXZlbGxlZC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsZXZlbGltYWdlKCRibGFja1BvaW50LCAkZ2FtbWEsICR3aGl0ZVBvaW50LCAkY2hhbm5lbCA9IGZhbHNlKSB7fQoKICAgIC8qKgogICAgICogU2NhbGVzIGFuIGltYWdlIHByb3BvcnRpb25hbGx5IDJ4LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5tYWduaWZ5aW1hZ2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBNYWduaWZpZWQgR21hZ2ljayBvYmplY3QuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFnbmlmeWltYWdlKCkge30KCiAgICAvKioKICAgICAqIFJlcGxhY2VzIHRoZSBjb2xvcnMgb2YgYW4gaW1hZ2Ugd2l0aCB0aGUgY2xvc2VzdCBjb2xvciBmcm9tIGEgcmVmZXJlbmNlIGltYWdlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5tYXBpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZ21hZ2ljayAkZ21hZ2ljayBUaGUgcmVmZXJlbmNlIGltYWdlLgogICAgICogQHBhcmFtIGJvb2wgICAgJGRpdGhlciAgU2V0IHRoaXMgaW50ZWdlciB2YWx1ZSB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiB6ZXJvIHRvIGRpdGhlciB0aGUgbWFwcGVkIGltYWdlLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBHbWFnaWNrIG9iamVjdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXBpbWFnZSgkZ21hZ2ljaywgJGRpdGhlcikge30KCiAgICAvKioKICAgICAqIEFwcGxpZXMgYSBkaWdpdGFsIGZpbHRlciB0aGF0IGltcHJvdmVzIHRoZSBxdWFsaXR5IG9mIGEgbm9pc3kgaW1hZ2UuCiAgICAgKiBFYWNoIHBpeGVsIGlzIHJlcGxhY2VkIGJ5IHRoZSBtZWRpYW4gaW4gYSBzZXQgb2YgbmVpZ2hib3JpbmcgcGl4ZWxzIGFzIGRlZmluZWQgYnkgcmFkaXVzLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5tZWRpYW5maWx0ZXJpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJhZGl1cyBUaGUgcmFkaXVzIG9mIHRoZSBwaXhlbCBuZWlnaGJvcmhvb2QuCiAgICAgKgogICAgICogQHJldHVybiB2b2lkIEdtYWdpY2sgb2JqZWN0IHdpdGggbWVkaWFuIGZpbHRlciBhcHBsaWVkLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1lZGlhbmZpbHRlcmltYWdlKCRyYWRpdXMpIHt9CgogICAgLyoqCiAgICAgKiBTY2FsZXMgYW4gaW1hZ2UgcHJvcG9ydGlvbmFsbHkgdG8gaGFsZiBpdHMgc2l6ZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2subWluaWZ5aW1hZ2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1pbmlmeWltYWdlKCkge30KCiAgICAvKioKICAgICAqIENvbnRyb2xzIHRoZSBicmlnaHRuZXNzLCBzYXR1cmF0aW9uLCBhbmQgaHVlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5tb2R1bGF0ZWltYWdlLnBocAogICAgICoKICAgICAqIExldHMgeW91IGNvbnRyb2wgdGhlIGJyaWdodG5lc3MsIHNhdHVyYXRpb24sIGFuZCBodWUgb2YgYW4gaW1hZ2UuCiAgICAgKiBIdWUgaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgYWJzb2x1dGUgcm90YXRpb24gZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi4KICAgICAqIEZvciBleGFtcGxlIDUwIHJlc3VsdHMgaW4gYSBjb3VudGVyLWNsb2Nrd2lzZSByb3RhdGlvbiBvZiA5MCBkZWdyZWVzLAogICAgICogMTUwIHJlc3VsdHMgaW4gYSBjbG9ja3dpc2Ugcm90YXRpb24gb2YgOTAgZGVncmVlcywgd2l0aCAwIGFuZCAyMDAgYm90aCByZXN1bHRpbmcgaW4gYSByb3RhdGlvbiBvZiAxODAgZGVncmVlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJyaWdodG5lc3MgVGhlIHBlcmNlbnQgY2hhbmdlIGluIGJyaWdodG5lc3MgKC0xMDAgdGhydSArMTAwKS4KICAgICAqIEBwYXJhbSBmbG9hdCAkc2F0dXJhdGlvbiBUaGUgcGVyY2VudCBjaGFuZ2UgaW4gc2F0dXJhdGlvbiAoLTEwMCB0aHJ1ICsxMDApLgogICAgICogQHBhcmFtIGZsb2F0ICRodWUgICAgICAgIFRoZSBwZXJjZW50IGNoYW5nZSBpbiBodWUgKC0xMDAgdGhydSArMTAwKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kdWxhdGVpbWFnZSgkYnJpZ2h0bmVzcywgJHNhdHVyYXRpb24sICRodWUpIHt9CgogICAgLyoqCiAgICAgKiBTaW11bGF0ZXMgbW90aW9uIGJsdXIuCiAgICAgKgogICAgICogV2UgY29udm9sdmUgdGhlIGltYWdlIHdpdGggYSBHYXVzc2lhbiBvcGVyYXRvciBvZiB0aGUgZ2l2ZW4gcmFkaXVzIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gKHNpZ21hKS4KICAgICAqIEZvciByZWFzb25hYmxlIHJlc3VsdHMsIHJhZGl1cyBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gc2lnbWEuCiAgICAgKiBVc2UgYSByYWRpdXMgb2YgMCBhbmQgTW90aW9uQmx1ckltYWdlKCkgc2VsZWN0cyBhIHN1aXRhYmxlIHJhZGl1cyBmb3IgeW91LgogICAgICogQW5nbGUgZ2l2ZXMgdGhlIGFuZ2xlIG9mIHRoZSBibHVycmluZyBtb3Rpb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLm1vdGlvbmJsdXJpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJhZGl1cyBUaGUgcmFkaXVzIG9mIHRoZSBHYXVzc2lhbiwgaW4gcGl4ZWxzLCBub3QgY291bnRpbmcgdGhlIGNlbnRlciBwaXhlbC4KICAgICAqIEBwYXJhbSBmbG9hdCAkc2lnbWEgIFRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIEdhdXNzaWFuLCBpbiBwaXhlbHMuCiAgICAgKiBAcGFyYW0gZmxvYXQgJGFuZ2xlICBBcHBseSB0aGUgZWZmZWN0IGFsb25nIHRoaXMgYW5nbGUuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vdGlvbmJsdXJpbWFnZSgkcmFkaXVzLCAkc2lnbWEsICRhbmdsZSkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgaW1hZ2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLm5ld2ltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgICAgJHdpZHRoICAgICAgV2lkdGggb2YgdGhlIG5ldyBpbWFnZQogICAgICogQHBhcmFtIGludCAgICAkaGVpZ2h0ICAgICBIZWlnaHQgb2YgdGhlIG5ldyBpbWFnZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGJhY2tncm91bmQgVGhlIGJhY2tncm91bmQgY29sb3IgdXNlZCBmb3IgdGhpcyBpbWFnZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdCAgICAgW29wdGlvbmFsXSBJbWFnZSBmb3JtYXQuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5ld2ltYWdlKCR3aWR0aCwgJGhlaWdodCwgJGJhY2tncm91bmQsICRmb3JtYXQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogTW92ZXMgdG8gdGhlIG5leHQgaW1hZ2UuCiAgICAgKgogICAgICogQXNzb2NpYXRlcyB0aGUgbmV4dCBpbWFnZSBpbiB0aGUgaW1hZ2UgbGlzdCB3aXRoIGFuIEdtYWdpY2sgb2JqZWN0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5uZXh0aW1hZ2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sIFRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5leHRpbWFnZSgpIHt9CgogICAgLyoqCiAgICAgKiBFbmhhbmNlcyB0aGUgY29udHJhc3Qgb2YgYSBjb2xvciBpbWFnZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2subm9ybWFsaXplaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkY2hhbm5lbCBbb3B0aW9uYWxdIElkZW50aWZ5IHdoaWNoIGNoYW5uZWwgdG8gbm9ybWFsaXplLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3JtYWxpemVpbWFnZSgkY2hhbm5lbCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBTaW11bGF0ZXMgYW4gb2lsIHBhaW50aW5nLgogICAgICoKICAgICAqIEFwcGxpZXMgYSBzcGVjaWFsIGVmZmVjdCBmaWx0ZXIgdGhhdCBzaW11bGF0ZXMgYW4gb2lsIHBhaW50aW5nLgogICAgICogRWFjaCBwaXhlbCBpcyByZXBsYWNlZCBieSB0aGUgbW9zdCBmcmVxdWVudCBjb2xvciBvY2N1cnJpbmcgaW4gYSBjaXJjdWxhciByZWdpb24gZGVmaW5lZCBieSByYWRpdXMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLm9pbHBhaW50aW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgVGhlIHJhZGl1cyBvZiB0aGUgY2lyY3VsYXIgbmVpZ2hib3Job29kLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvaWxwYWludGltYWdlKCRyYWRpdXMpIHt9CgogICAgLyoqCiAgICAgKiBNb3ZlIHRvIHRoZSBwcmV2aW91cyBpbWFnZSBpbiB0aGUgb2JqZWN0LgogICAgICoKICAgICAqIEFzc29jaWF0ZXMgdGhlIHByZXZpb3VzIGltYWdlIGluIGFuIGltYWdlIGxpc3Qgd2l0aCB0aGUgR21hZ2ljayBvYmplY3QuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnByZXZpb3VzaW1hZ2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sIFRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmV2aW91c2ltYWdlKCkge30KCiAgICAvKioKICAgICAqIEFkZHMgb3IgcmVtb3ZlcyBhIHByb2ZpbGUgZnJvbSBhbiBpbWFnZS4KICAgICAqCiAgICAgKiBBZGRzIG9yIHJlbW92ZXMgYSBJQ0MsIElQVEMsIG9yIGdlbmVyaWMgcHJvZmlsZSBmcm9tIGFuIGltYWdlLgogICAgICogSWYgdGhlIHByb2ZpbGUgaXMgTlVMTCwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBpbWFnZSBvdGhlcndpc2UgYWRkZWQuCiAgICAgKiBVc2UgYSBuYW1lIG9mICcqJyBhbmQgYSBwcm9maWxlIG9mIE5VTEwgdG8gcmVtb3ZlIGFsbCBwcm9maWxlcyBmcm9tIHRoZSBpbWFnZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sucHJvZmlsZWltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgICAgTmFtZSBvZiBwcm9maWxlIHRvIGFkZCBvciByZW1vdmU6IElDQywgSVBUQywgb3IgZ2VuZXJpYyBwcm9maWxlLgogICAgICogQHBhcmFtIHN0cmluZyAkcHJvZmlsZSBUaGUgcHJvZmlsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvZmlsZWltYWdlKCRuYW1lLCAkcHJvZmlsZSkge30KCiAgICAvKioKICAgICAqIEFuYWx5emVzIHRoZSBjb2xvcnMgd2l0aGluIGEgcmVmZXJlbmNlIGltYWdlLgogICAgICoKICAgICAqIEFuYWx5emVzIHRoZSBjb2xvcnMgd2l0aGluIGEgcmVmZXJlbmNlIGltYWdlIGFuZCBjaG9vc2VzIGEgZml4ZWQgbnVtYmVyIG9mIGNvbG9ycyB0byByZXByZXNlbnQgdGhlIGltYWdlLgogICAgICogVGhlIGdvYWwgb2YgdGhlIGFsZ29yaXRobSBpcyB0byBtaW5pbWl6ZSB0aGUgY29sb3IgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGltYWdlIHdoaWxlIG1pbmltaXppbmcgdGhlIHByb2Nlc3NpbmcgdGltZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sucXVhbnRpemVpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICAkbnVtQ29sb3JzICAgIFRoZSBudW1iZXIgb2YgY29sb3JzLgogICAgICogQHBhcmFtIGludCAgJGNvbG9yc3BhY2UgICBQZXJmb3JtIGNvbG9yIHJlZHVjdGlvbiBpbiB0aGlzIGNvbG9yc3BhY2UsIHR5cGljYWxseSBSR0JDb2xvcnNwYWNlLgogICAgICogQHBhcmFtIGludCAgJHRyZWVEZXB0aCAgICBOb3JtYWxseSwgdGhpcyBpbnRlZ2VyIHZhbHVlIGlzIHplcm8gb3Igb25lLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBBIHplcm8gb3Igb25lIHRlbGxzIFF1YW50aXplIHRvIGNob29zZSBhIG9wdGltYWwgdHJlZSBkZXB0aCBvZiBMb2c0KG51bWJlcl9jb2xvcnMpLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBBIHRyZWUgb2YgdGhpcyBkZXB0aCBnZW5lcmFsbHkgYWxsb3dzIHRoZSBiZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZWZlcmVuY2UgaW1hZ2UKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIG1lbW9yeSBhbmQgdGhlIGZhc3Rlc3QgY29tcHV0YXRpb25hbCBzcGVlZC4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gc29tZSBjYXNlcywgc3VjaCBhcyBhbiBpbWFnZSB3aXRoIGxvdyBjb2xvciBkaXNwZXJzaW9uIChhIGZldyBudW1iZXIgb2YgY29sb3JzKSwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYSB2YWx1ZSBvdGhlciB0aGFuIExvZzQobnVtYmVyX2NvbG9ycykgaXMgcmVxdWlyZWQuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGV4cGFuZCB0aGUgY29sb3IgdHJlZSBjb21wbGV0ZWx5LCB1c2UgYSB2YWx1ZSBvZiA4LgogICAgICogQHBhcmFtIGJvb2wgJGRpdGhlciAgICAgICBBIHZhbHVlIG90aGVyIHRoYW4gemVybyBkaXN0cmlidXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGFuIG9yaWdpbmFsIGltYWdlIGFuZCB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBjb2xvciByZWR1Y2VkIGFsZ29yaXRobSB0byBuZWlnaGJvcmluZyBwaXhlbHMgYWxvbmcgYSBIaWxiZXJ0IGN1cnZlLgogICAgICogQHBhcmFtIGJvb2wgJG1lYXN1cmVFcnJvciBBIHZhbHVlIG90aGVyIHRoYW4gemVybyBtZWFzdXJlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBhbmQgcXVhbnRpemVkCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy4gVGhpcyBkaWZmZXJlbmNlIGlzIHRoZSB0b3RhbCBxdWFudGl6YXRpb24gZXJyb3IuIFRoZSBlcnJvciBpcyBjb21wdXRlZCBieQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1taW5nIG92ZXIgYWxsIHBpeGVscyBpbiBhbiBpbWFnZSB0aGUgZGlzdGFuY2Ugc3F1YXJlZCBpbiBSR0Igc3BhY2UgYmV0d2VlbiBlYWNoCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSBwaXhlbCB2YWx1ZSBhbmQgaXRzIHF1YW50aXplZCB2YWx1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVhbnRpemVpbWFnZSgkbnVtQ29sb3JzLCAkY29sb3JzcGFjZSwgJHRyZWVEZXB0aCwgJGRpdGhlciwgJG1lYXN1cmVFcnJvcikge30KCiAgICAvKioKICAgICAqIFRoZSBxdWFudGl6ZWltYWdlcyBwdXJwb3NlLgogICAgICoKICAgICAqIEFuYWx5emVzIHRoZSBjb2xvcnMgd2l0aGluIGEgc2VxdWVuY2Ugb2YgaW1hZ2VzIGFuZCBjaG9vc2VzIGEgZml4ZWQgbnVtYmVyIG9mIGNvbG9ycyB0byByZXByZXNlbnQgdGhlIGltYWdlLgogICAgICogVGhlIGdvYWwgb2YgdGhlIGFsZ29yaXRobSBpcyB0byBtaW5pbWl6ZSB0aGUgY29sb3IgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGltYWdlIHdoaWxlIG1pbmltaXppbmcgdGhlIHByb2Nlc3NpbmcgdGltZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sucXVhbnRpemVpbWFnZXMucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAgJG51bUNvbG9ycyAgICBUaGUgbnVtYmVyIG9mIGNvbG9ycy4KICAgICAqIEBwYXJhbSBpbnQgICRjb2xvcnNwYWNlICAgUGVyZm9ybSBjb2xvciByZWR1Y3Rpb24gaW4gdGhpcyBjb2xvcnNwYWNlLCB0eXBpY2FsbHkgUkdCQ29sb3JzcGFjZS4KICAgICAqIEBwYXJhbSBpbnQgICR0cmVlRGVwdGggICAgTm9ybWFsbHksIHRoaXMgaW50ZWdlciB2YWx1ZSBpcyB6ZXJvIG9yIG9uZS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQSB6ZXJvIG9yIG9uZSB0ZWxscyBRdWFudGl6ZSB0byBjaG9vc2UgYSBvcHRpbWFsIHRyZWUgZGVwdGggb2YgTG9nNChudW1iZXJfY29sb3JzKS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQSB0cmVlIG9mIHRoaXMgZGVwdGggZ2VuZXJhbGx5IGFsbG93cyB0aGUgYmVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVmZXJlbmNlIGltYWdlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGxlYXN0IGFtb3VudCBvZiBtZW1vcnkgYW5kIHRoZSBmYXN0ZXN0IGNvbXB1dGF0aW9uYWwgc3BlZWQuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIHNvbWUgY2FzZXMsIHN1Y2ggYXMgYW4gaW1hZ2Ugd2l0aCBsb3cgY29sb3IgZGlzcGVyc2lvbiAoYSBmZXcgbnVtYmVyIG9mIGNvbG9ycyksCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgdmFsdWUgb3RoZXIgdGhhbiBMb2c0KG51bWJlcl9jb2xvcnMpIGlzIHJlcXVpcmVkLgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBleHBhbmQgdGhlIGNvbG9yIHRyZWUgY29tcGxldGVseSwgdXNlIGEgdmFsdWUgb2YgOC4KICAgICAqIEBwYXJhbSBib29sICRkaXRoZXIgICAgICAgQSB2YWx1ZSBvdGhlciB0aGFuIHplcm8gZGlzdHJpYnV0ZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhbiBvcmlnaW5hbCBpbWFnZSBhbmQgdGhlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgY29sb3IgcmVkdWNlZCBhbGdvcml0aG0gdG8gbmVpZ2hib3JpbmcgcGl4ZWxzIGFsb25nIGEgSGlsYmVydCBjdXJ2ZS4KICAgICAqIEBwYXJhbSBib29sICRtZWFzdXJlRXJyb3IgQSB2YWx1ZSBvdGhlciB0aGFuIHplcm8gbWVhc3VyZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgb3JpZ2luYWwgYW5kIHF1YW50aXplZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMuIFRoaXMgZGlmZmVyZW5jZSBpcyB0aGUgdG90YWwgcXVhbnRpemF0aW9uIGVycm9yLiBUaGUgZXJyb3IgaXMgY29tcHV0ZWQgYnkKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWluZyBvdmVyIGFsbCBwaXhlbHMgaW4gYW4gaW1hZ2UgdGhlIGRpc3RhbmNlIHNxdWFyZWQgaW4gUkdCIHNwYWNlIGJldHdlZW4gZWFjCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSBwaXhlbCB2YWx1ZSBhbmQgaXRzIHF1YW50aXplZCB2YWx1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVhbnRpemVpbWFnZXMoJG51bUNvbG9ycywgJGNvbG9yc3BhY2UsICR0cmVlRGVwdGgsICRkaXRoZXIsICRtZWFzdXJlRXJyb3IpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IHJlcHJlc2VudGluZyB0aGUgZm9udCBtZXRyaWNzLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5xdWVyeWZvbnRtZXRyaWNzLnBocAogICAgICoKICAgICAqIEBwYXJhbSBHbWFnaWNrRHJhdyAkZHJhdwogICAgICogQHBhcmFtIHN0cmluZyAgICAgICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHF1ZXJ5Zm9udG1ldHJpY3MoJGRyYXcsICR0ZXh0KSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBmb250cyBzdXBwb3J0ZWQgYnkgR21hZ2ljay4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sucXVlcnlmb250cy5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIFtvcHRpb25hbF0KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVlcnlmb250cygkcGF0dGVybiA9ICcqJykge30KCiAgICAvKioKICAgICAqIFJldHVybnMgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgR21hZ2ljay4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sucXVlcnlmb3JtYXRzLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gW29wdGlvbmFsXQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBxdWVyeWZvcm1hdHMoJHBhdHRlcm4gPSAnKicpIHt9CgogICAgLyoqCiAgICAgKiBSYWRpYWwgYmx1cnMgYW4gaW1hZ2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnJhZGlhbGJsdXJpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGFuZ2xlICAgVGhlIGFuZ2xlIG9mIHRoZSBibHVyIGluIGRlZ3JlZXMuCiAgICAgKiBAcGFyYW0gaW50ICAgJGNoYW5uZWwgW29wdGlvbmFsXSBSZWxhdGVkIGNoYW5uZWwuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJhZGlhbGJsdXJpbWFnZSgkYW5nbGUsICRjaGFubmVsID0gR21hZ2ljazo6Q0hBTk5FTF9ERUZBVUxUKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIHNpbXVsYXRlZCAzZCBidXR0b24tbGlrZSBlZmZlY3QuCiAgICAgKgogICAgICogQ3JlYXRlcyBhIHNpbXVsYXRlZCB0aHJlZS1kaW1lbnNpb25hbCBidXR0b24tbGlrZSBlZmZlY3QgYnkgbGlnaHRlbmluZyBhbmQgZGFya2VuaW5nIHRoZSBlZGdlcyBvZiB0aGUgaW1hZ2UuCiAgICAgKiBNZW1iZXJzIHdpZHRoIGFuZCBoZWlnaHQgb2YgcmFpc2VfaW5mbyBkZWZpbmUgdGhlIHdpZHRoIG9mIHRoZSB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBlZGdlIG9mIHRoZSBlZmZlY3QuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnJhaXNlaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAgJHdpZHRoICBXaWR0aCBvZiB0aGUgYXJlYSB0byByYWlzZS4KICAgICAqIEBwYXJhbSBpbnQgICRoZWlnaHQgSGVpZ2h0IG9mIHRoZSBhcmVhIHRvIHJhaXNlLgogICAgICogQHBhcmFtIGludCAgJHggICAgICBYIGNvb3JkaW5hdGUuCiAgICAgKiBAcGFyYW0gaW50ICAkeSAgICAgIFkgY29vcmRpbmF0ZS4KICAgICAqIEBwYXJhbSBib29sICRyYWlzZSAgQSB2YWx1ZSBvdGhlciB0aGFuIHplcm8gY3JlYXRlcyBhIDMtRCByYWlzZSBlZmZlY3QsIG90aGVyd2lzZSBpdCBoYXMgYSBsb3dlcmVkIGVmZmVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmFpc2VpbWFnZSgkd2lkdGgsICRoZWlnaHQsICR4LCAkeSwgJHJhaXNlKSB7fQoKICAgIC8qKgogICAgICogUmVhZHMgaW1hZ2UgZnJvbSBmaWxlbmFtZS4KICAgICAqCiAgICAgKiBUaGlzIGlzIGFuIGFsaWFzIGZvciByZWFkaW1hZ2UoKS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sucmVhZC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgaW1hZ2UgZmlsZW5hbWUuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGZpbGVuYW1lKSB7fQoKICAgIC8qKgogICAgICogUmVhZHMgaW1hZ2UgZnJvbSBmaWxlbmFtZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sucmVhZGltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBpbWFnZSBmaWxlbmFtZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZGltYWdlKCRmaWxlbmFtZSkge30KCiAgICAvKioKICAgICAqIFJlYWRzIGltYWdlIGZyb20gYSBiaW5hcnkgc3RyaW5nLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5yZWFkaW1hZ2VibG9iLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGltYWdlQ29udGVudHMgQ29udGVudCBvZiBpbWFnZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lICAgICAgW29wdGlvbmFsXSBUaGUgaW1hZ2UgZmlsZW5hbWUuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRpbWFnZWJsb2IoJGltYWdlQ29udGVudHMsICRmaWxlbmFtZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBSZWFkcyBhbiBpbWFnZSBvciBpbWFnZSBzZXF1ZW5jZSBmcm9tIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5yZWFkaW1hZ2VmaWxlLnBocAogICAgICoKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkZnAgICAgICAgVGhlIGZpbGUgZGVzY3JpcHRvci4KICAgICAqIEBwYXJhbSBzdHJpbmcgICAkZmlsZW5hbWUgW29wdGlvbmFsXQogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkaW1hZ2VmaWxlKCRmcCwgJGZpbGVuYW1lID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFNtb290aHMgdGhlIGNvbnRvdXJzIG9mIGFuIGltYWdlLgogICAgICoKICAgICAqIFNtb290aHMgdGhlIGNvbnRvdXJzIG9mIGFuIGltYWdlIHdoaWxlIHN0aWxsIHByZXNlcnZpbmcgZWRnZSBpbmZvcm1hdGlvbi4KICAgICAqIFRoZSBhbGdvcml0aG0gd29ya3MgYnkgcmVwbGFjaW5nIGVhY2ggcGl4ZWwgd2l0aCBpdHMgbmVpZ2hib3IgY2xvc2VzdCBpbiB2YWx1ZS4KICAgICAqIEEgbmVpZ2hib3IgaXMgZGVmaW5lZCBieSByYWRpdXMuCiAgICAgKiBVc2UgYSByYWRpdXMgb2YgMCBhbmQgR21hZ2ljazo6cmVkdWNlTm9pc2VJbWFnZSgpIHNlbGVjdHMgYSBzdWl0YWJsZSByYWRpdXMgZm9yIHlvdS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sucmVkdWNlbm9pc2VpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJhZGl1cyBUaGUgcmFkaXVzIG9mIHRoZSBwaXhlbCBuZWlnaGJvcmhvb2QuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlZHVjZW5vaXNlaW1hZ2UoJHJhZGl1cykge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYW4gaW1hZ2UgZnJvbSB0aGUgaW1hZ2UgbGlzdC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sucmVtb3ZlaW1hZ2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZWltYWdlKCkge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIG5hbWVkIGltYWdlIHByb2ZpbGUgYW5kIHJldHVybnMgaXQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnJlbW92ZWltYWdlcHJvZmlsZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIE5hbWUgb2YgcHJvZmlsZSB0byByZXR1cm46IElDQywgSVBUQywgb3IgZ2VuZXJpYyBwcm9maWxlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBuYW1lZCBwcm9maWxlLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZWltYWdlcHJvZmlsZSgkbmFtZSkge30KCiAgICAvKioKICAgICAqIFJlc2FtcGxlIGltYWdlIHRvIGRlc2lyZWQgcmVzb2x1dGlvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sucmVzYW1wbGVpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHhSZXNvbHV0aW9uIFRoZSBuZXcgaW1hZ2UgeCByZXNvbHV0aW9uLgogICAgICogQHBhcmFtIGZsb2F0ICR5UmVzb2x1dGlvbiBUaGUgbmV3IGltYWdlIHkgcmVzb2x1dGlvbi4KICAgICAqIEBwYXJhbSBpbnQgICAkZmlsdGVyICAgICAgVGhlIGltYWdlIGZpbHRlciB0byB1c2UuCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJsdXIgICAgICAgIFRoZSBibHVyIGZhY3RvciB3aGVyZSBsYXJnZXIgdGhhbiAxIGlzIGJsdXJyeSwgc21hbGxlciB0aGFuIDEgaXMgc2hhcnAuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc2FtcGxlaW1hZ2UoJHhSZXNvbHV0aW9uLCAkeVJlc29sdXRpb24sICRmaWx0ZXIsICRibHVyKSB7fQoKICAgIC8qKgogICAgICogU2NhbGVzIGFuIGltYWdlIHRvIHRoZSBkZXNpcmVkIGRpbWVuc2lvbnMgd2l0aCBhIGZpbHRlci4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sucmVzaXplaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAgICR3aWR0aCAgVGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBzY2FsZWQgaW1hZ2UuCiAgICAgKiBAcGFyYW0gaW50ICAgJGhlaWdodCBUaGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHNjYWxlZCBpbWFnZS4KICAgICAqIEBwYXJhbSBpbnQgICAkZmlsdGVyIEltYWdlIGZpbHRlciB0byB1c2UuCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJsdXIgICBUaGUgYmx1ciBmYWN0b3Igd2hlcmUgbGFyZ2VyIHRoYW4gMSBpcyBibHVycnksIGxlc3NlciB0aGFuIDEgaXMgc2hhcnAuCiAgICAgKiBAcGFyYW0gYm9vbCAgJGZpdCAgICBbb3B0aW9uYWxdCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc2l6ZWltYWdlKCR3aWR0aCwgJGhlaWdodCwgJGZpbHRlciwgJGJsdXIsICRmaXQgPSBmYWxzZSkge30KCiAgICAvKioKICAgICAqIE9mZnNldHMgYW4gaW1hZ2UgYXMgZGVmaW5lZCBieSB4IGFuZCB5LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5yb2xsaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkeCBUaGUgeCBvZmZzZXQuCiAgICAgKiBAcGFyYW0gaW50ICR5IFRoZSB5IG9mZnNldC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm9sbGltYWdlKCR4LCAkeSkge30KCiAgICAvKioKICAgICAqIFJvdGF0ZXMgYW4gaW1hZ2UgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGVncmVlcy4KICAgICAqCiAgICAgKiBFbXB0eSB0cmlhbmdsZXMgbGVmdCBvdmVyIGZyb20gcm90YXRpbmcgdGhlIGltYWdlIGFyZSBmaWxsZWQgd2l0aCB0aGUgYmFja2dyb3VuZCBjb2xvci4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sucm90YXRlaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRjb2xvciAgIFRoZSBiYWNrZ3JvdW5kIHBpeGVsLgogICAgICogQHBhcmFtIGZsb2F0ICRkZWdyZWVzIFRoZSBudW1iZXIgb2YgZGVncmVlcyB0byByb3RhdGUgdGhlIGltYWdlLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb3RhdGVpbWFnZSgkY29sb3IsICRkZWdyZWVzKSB7fQoKICAgIC8qKgogICAgICogU2NhbGVzIHRoZSBzaXplIG9mIGFuIGltYWdlIHRvIHRoZSBnaXZlbiBkaW1lbnNpb25zLgogICAgICoKICAgICAqIFRoZSBvdGhlciBwYXJhbWV0ZXIgd2lsbCBiZSBjYWxjdWxhdGVkIGlmIDAgaXMgcGFzc2VkIGFzIGVpdGhlciBwYXJhbS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc2NhbGVpbWFnZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICAkd2lkdGggIFRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgc2NhbGVkIGltYWdlLgogICAgICogQHBhcmFtIGludCAgJGhlaWdodCBUaGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHNjYWxlZCBpbWFnZS4KICAgICAqIEBwYXJhbSBib29sICRmaXQgICAgW29wdGlvbmFsXQogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzY2FsZWltYWdlKCR3aWR0aCwgJGhlaWdodCwgJGZpdCA9IGZhbHNlKSB7fQoKICAgIC8qKgogICAgICogU2VwYXJhdGVzIGEgY2hhbm5lbCBmcm9tIHRoZSBpbWFnZSBhbmQgcmV0dXJucyBhIGdyYXlzY2FsZSBpbWFnZS4KICAgICAqCiAgICAgKiBBIGNoYW5uZWwgaXMgYSBwYXJ0aWN1bGFyIGNvbG9yIGNvbXBvbmVudCBvZiBlYWNoIHBpeGVsIGluIHRoZSBpbWFnZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc2VwYXJhdGVpbWFnZWNoYW5uZWwucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkY2hhbm5lbCBJZGVudGlmeSB3aGljaCBjaGFubmVsIHRvIGV4dHJhY3Q6CiAgICAgKiAgICAgICAgICAgICAgICAgICAgIFJlZENoYW5uZWwsIEdyZWVuQ2hhbm5lbCwgQmx1ZUNoYW5uZWwsIE9wYWNpdHlDaGFubmVsLAogICAgICogICAgICAgICAgICAgICAgICAgICBDeWFuQ2hhbm5lbCwgTWFnZW50YUNoYW5uZWwsIFllbGxvd0NoYW5uZWwsIEJsYWNrQ2hhbm5lbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VwYXJhdGVpbWFnZWNoYW5uZWwoJGNoYW5uZWwpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBvYmplY3QncyBkZWZhdWx0IGNvbXByZXNzaW9uIHF1YWxpdHkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnNldGNvbXByZXNzaW9ucXVhbGl0eS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRxdWFsaXR5IFtvcHRpb25hbF0KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29tcHJlc3Npb25RdWFsaXR5KCRxdWFsaXR5ID0gNzUpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBmaWxlbmFtZSBiZWZvcmUgeW91IHJlYWQgb3Igd3JpdGUgdGhlIGltYWdlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5zZXRmaWxlbmFtZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgaW1hZ2UgZmlsZW5hbWUuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGZpbGVuYW1lKCRmaWxlbmFtZSkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGltYWdlIGJhY2tncm91bmQgY29sb3IuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnNldGltYWdlYmFja2dyb3VuZGNvbG9yLnBocAogICAgICoKICAgICAqIEBwYXJhbSBHbWFnaWNrUGl4ZWwgJGNvbG9yIFRoZSBiYWNrZ3JvdW5kIHBpeGVsIHdhbmQuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGltYWdlYmFja2dyb3VuZGNvbG9yKCRjb2xvcikge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGltYWdlIGNocm9tYXRpY2l0eSBibHVlIHByaW1hcnkgcG9pbnQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnNldGltYWdlYmx1ZXByaW1hcnkucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR4IFRoZSBibHVlIHByaW1hcnkgeC1wb2ludC4KICAgICAqIEBwYXJhbSBmbG9hdCAkeSBUaGUgYmx1ZSBwcmltYXJ5IHktcG9pbnQuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGltYWdlYmx1ZXByaW1hcnkoJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW1hZ2UgYm9yZGVyIGNvbG9yLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5zZXRpbWFnZWJvcmRlcmNvbG9yLnBocAogICAgICoKICAgICAqIEBwYXJhbSBHbWFnaWNrUGl4ZWwgJGNvbG9yIFRoZSBib3JkZXIgcGl4ZWwgd2FuZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0aW1hZ2Vib3JkZXJjb2xvcihHbWFnaWNrUGl4ZWwgJGNvbG9yKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgZGVwdGggb2YgYSBwYXJ0aWN1bGFyIGltYWdlIGNoYW5uZWwuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnNldGltYWdlY2hhbm5lbGRlcHRoLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGNoYW5uZWwgSWRlbnRpZnkgd2hpY2ggY2hhbm5lbCB0byBleHRyYWN0OiBSZWRDaGFubmVsLCBHcmVlbkNoYW5uZWwsIEJsdWVDaGFubmVsLAogICAgICogICAgICAgICAgICAgICAgICAgICBPcGFjaXR5Q2hhbm5lbCwgQ3lhbkNoYW5uZWwsIE1hZ2VudGFDaGFubmVsLCBZZWxsb3dDaGFubmVsLCBCbGFja0NoYW5uZWwuCiAgICAgKiBAcGFyYW0gaW50ICRkZXB0aCAgIFRoZSBpbWFnZSBkZXB0aCBpbiBiaXRzLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRpbWFnZWNoYW5uZWxkZXB0aCgkY2hhbm5lbCwgJGRlcHRoKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW1hZ2UgY29sb3JzcGFjZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc2V0aW1hZ2Vjb2xvcnNwYWNlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGNvbG9yc3BhY2UgVGhlIGltYWdlIGNvbG9yc3BhY2U6IFVuZGVmaW5lZENvbG9yc3BhY2UsIFJHQkNvbG9yc3BhY2UsIEdSQVlDb2xvcnNwYWNlLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICBUcmFuc3BhcmVudENvbG9yc3BhY2UsIE9IVEFDb2xvcnNwYWNlLCBYWVpDb2xvcnNwYWNlLCBZQ2JDckNvbG9yc3BhY2UsIFlDQ0NvbG9yc3BhY2UsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIFlJUUNvbG9yc3BhY2UsIFlQYlByQ29sb3JzcGFjZSwgWVBiUHJDb2xvcnNwYWNlLCBZVVZDb2xvcnNwYWNlLCBDTVlLQ29sb3JzcGFjZSwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgc1JHQkNvbG9yc3BhY2UsIEhTTENvbG9yc3BhY2UsIG9yIEhXQkNvbG9yc3BhY2UuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGltYWdlY29sb3JzcGFjZSgkY29sb3JzcGFjZSkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGltYWdlIGNvbXBvc2l0ZSBvcGVyYXRvci4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc2V0aW1hZ2Vjb21wb3NlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGNvbXBvc2l0ZSBUaGUgaW1hZ2UgY29tcG9zaXRlIG9wZXJhdG9yLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRpbWFnZWNvbXBvc2UoJGNvbXBvc2l0ZSkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGltYWdlIGRlbGF5LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5zZXRpbWFnZWRlbGF5LnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGRlbGF5IFRoZSBpbWFnZSBkZWxheSBpbiAxLzEwMHRoIG9mIGEgc2Vjb25kLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRpbWFnZWRlbGF5KCRkZWxheSkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGltYWdlIGRlcHRoLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5zZXRpbWFnZWRlcHRoLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGRlcHRoIFRoZSBpbWFnZSBkZXB0aCBpbiBiaXRzOiA4LCAxNiwgb3IgMzIuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGltYWdlZGVwdGgoJGRlcHRoKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW1hZ2UgZGlzcG9zYWwgbWV0aG9kLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5zZXRpbWFnZWRpc3Bvc2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkZGlzcG9zZVR5cGUgVGhlIGltYWdlIGRpc3Bvc2FsIHR5cGUuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGltYWdlZGlzcG9zZSgkZGlzcG9zZVR5cGUpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBmaWxlbmFtZSBvZiBhIHBhcnRpY3VsYXIgaW1hZ2UgaW4gYSBzZXF1ZW5jZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc2V0aW1hZ2VmaWxlbmFtZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgaW1hZ2UgZmlsZW5hbWUuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGltYWdlZmlsZW5hbWUoJGZpbGVuYW1lKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgZm9ybWF0IG9mIGEgcGFydGljdWxhciBpbWFnZSBpbiBhIHNlcXVlbmNlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5zZXRpbWFnZWZvcm1hdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbWFnZUZvcm1hdCBUaGUgaW1hZ2UgZm9ybWF0LgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRpbWFnZWZvcm1hdCgkaW1hZ2VGb3JtYXQpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBpbWFnZSBnYW1tYS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc2V0aW1hZ2VnYW1tYS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGdhbW1hIFRoZSBpbWFnZSBnYW1tYS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0aW1hZ2VnYW1tYSgkZ2FtbWEpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBpbWFnZSBjaHJvbWF0aWNpdHkgZ3JlZW4gcHJpbWFyeSBwb2ludC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc2V0aW1hZ2VncmVlbnByaW1hcnkucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR4IFRoZSBjaHJvbWF0aWNpdHkgZ3JlZW4gcHJpbWFyeSB4LXBvaW50LgogICAgICogQHBhcmFtIGZsb2F0ICR5IFRoZSBjaHJvbWF0aWNpdHkgZ3JlZW4gcHJpbWFyeSB5LXBvaW50LgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRpbWFnZWdyZWVucHJpbWFyeSgkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBpdGVyYXRvciB0byB0aGUgcG9zaXRpb24gaW4gdGhlIGltYWdlIGxpc3Qgc3BlY2lmaWVkIHdpdGggdGhlIGluZGV4IHBhcmFtZXRlci4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc2V0aW1hZ2VpbmRleC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCBUaGUgc2NlbmUgbnVtYmVyLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRpbWFnZWluZGV4KCRpbmRleCkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGludGVybGFjZSBzY2hlbWUgb2YgdGhlIGltYWdlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5zZXRpbWFnZWludGVybGFjZXNjaGVtZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbnRlcmxhY2UgVGhlIGltYWdlIGludGVybGFjZSBzY2hlbWU6IE5vSW50ZXJsYWNlLCBMaW5lSW50ZXJsYWNlLCBQbGFuZUludGVybGFjZSwgUGFydGl0aW9uSW50ZXJsYWNlLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRpbWFnZWludGVybGFjZXNjaGVtZSgkaW50ZXJsYWNlKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW1hZ2UgaXRlcmF0aW9ucy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc2V0aW1hZ2VpdGVyYXRpb25zLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGl0ZXJhdGlvbnMKICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0aW1hZ2VpdGVyYXRpb25zKCRpdGVyYXRpb25zKSB7fQoKICAgIC8qKgogICAgICogQWRkcyBhIG5hbWVkIHByb2ZpbGUgdG8gdGhlIEdtYWdpY2sgb2JqZWN0LgogICAgICoKICAgICAqIElmIGEgcHJvZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IGlzIHJlcGxhY2VkLgogICAgICogVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tIHRoZSBHbWFnaWNrOjpwcm9maWxlaW1hZ2UoKSBtZXRob2QgaW4gdGhhdCBpdCBkb2VzIG5vdCBhcHBseSBhbnkgQ01TIGNvbG9yIHByb2ZpbGVzLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5zZXRpbWFnZXByb2ZpbGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSAgICBOYW1lIG9mIHByb2ZpbGUgdG8gYWRkIG9yIHJlbW92ZTogSUNDLCBJUFRDLCBvciBnZW5lcmljIHByb2ZpbGUuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9maWxlIFRoZSBwcm9maWxlLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRpbWFnZXByb2ZpbGUoJG5hbWUsICRwcm9maWxlKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW1hZ2UgY2hyb21hdGljaXR5IHJlZCBwcmltYXJ5IHBvaW50LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5zZXRpbWFnZXJlZHByaW1hcnkucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR4IFRoZSByZWQgcHJpbWFyeSB4LXBvaW50LgogICAgICogQHBhcmFtIGZsb2F0ICR5IFRoZSByZWQgcHJpbWFyeSB5LXBvaW50LgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRpbWFnZXJlZHByaW1hcnkoJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW1hZ2UgcmVuZGVyaW5nIGludGVudC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc2V0aW1hZ2VyZW5kZXJpbmdpbnRlbnQucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkcmVuZGVyaW5nX2ludGVudCBUaGUgaW1hZ2UgcmVuZGVyaW5nIGludGVudDogVW5kZWZpbmVkSW50ZW50LCBTYXR1cmF0aW9uSW50ZW50LAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZXJjZXB0dWFsSW50ZW50LCBBYnNvbHV0ZUludGVudCwgb3IgUmVsYXRpdmVJbnRlbnQuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGltYWdlcmVuZGVyaW5naW50ZW50KCRyZW5kZXJpbmdfaW50ZW50KSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW1hZ2UgcmVzb2x1dGlvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc2V0aW1hZ2VyZXNvbHV0aW9uLnBocAogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkeFJlc29sdXRpb24gVGhlIGltYWdlIHggcmVzb2x1dGlvbi4KICAgICAqIEBwYXJhbSBmbG9hdCAkeVJlc29sdXRpb24gVGhlIGltYWdlIHkgcmVzb2x1dGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0aW1hZ2VyZXNvbHV0aW9uKCR4UmVzb2x1dGlvbiwgJHlSZXNvbHV0aW9uKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgaW1hZ2Ugc2NlbmUuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnNldGltYWdlc2NlbmUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2NlbmUgVGhlIGltYWdlIHNjZW5lIG51bWJlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0aW1hZ2VzY2VuZSgkc2NlbmUpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBpbWFnZSB0eXBlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5zZXRpbWFnZXR5cGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaW1nVHlwZSBUaGUgaW1hZ2UgdHlwZTogVW5kZWZpbmVkVHlwZSwgQmlsZXZlbFR5cGUsIEdyYXlzY2FsZVR5cGUsIEdyYXlzY2FsZU1hdHRlVHlwZSwgUGFsZXR0ZVR5cGUsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIFBhbGV0dGVNYXR0ZVR5cGUsIFRydWVDb2xvclR5cGUsIFRydWVDb2xvck1hdHRlVHlwZSwgQ29sb3JTZXBhcmF0aW9uVHlwZSwKICAgICAqICAgICAgICAgICAgICAgICAgICAgQ29sb3JTZXBhcmF0aW9uTWF0dGVUeXBlLCBvciBPcHRpbWl6ZVR5cGUuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGltYWdldHlwZSgkaW1nVHlwZSkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGltYWdlIHVuaXRzIG9mIHJlc29sdXRpb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnNldGltYWdldW5pdHMucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkcmVzb2x1dGlvbiBUaGUgaW1hZ2UgdW5pdHMgb2YgcmVzb2x1dGlvbiA6IFVuZGVmaW5lZHJlc29sdXRpb24sIFBpeGVsc1BlckluY2hSZXNvbHV0aW9uLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICBvciBQaXhlbHNQZXJDZW50aW1ldGVyUmVzb2x1dGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0aW1hZ2V1bml0cygkcmVzb2x1dGlvbikge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGltYWdlIGNocm9tYXRpY2l0eSB3aGl0ZSBwb2ludC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc2V0aW1hZ2V3aGl0ZXBvaW50LnBocAogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkeCBUaGUgd2hpdGUgeC1wb2ludC4KICAgICAqIEBwYXJhbSBmbG9hdCAkeSBUaGUgd2hpdGUgeS1wb2ludC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0aW1hZ2V3aGl0ZXBvaW50KCR4LCAkeSkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGltYWdlIHNhbXBsaW5nIGZhY3RvcnMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnNldHNhbXBsaW5nZmFjdG9ycy5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZhY3RvcnMgQW4gYXJyYXkgb2YgZG91YmxlcyByZXByZXNlbnRpbmcgdGhlIHNhbXBsaW5nIGZhY3RvcgogICAgICogICAgICAgICAgICAgICAgICAgICAgIGZvciBlYWNoIGNvbG9yIGNvbXBvbmVudCAoaW4gUkdCIG9yZGVyKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0c2FtcGxpbmdmYWN0b3JzKCRmYWN0b3JzKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgc2l6ZSBvZiB0aGUgR21hZ2ljayBvYmplY3QuCiAgICAgKgogICAgICogU2V0IGl0IGJlZm9yZSB5b3UgcmVhZCBhIHJhdyBpbWFnZSBmb3JtYXQgc3VjaCBhcyBSR0IsIEdSQVksIG9yIENNWUsuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnNldHNpemUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkY29sdW1ucyBUaGUgd2lkdGggaW4gcGl4ZWxzLgogICAgICogQHBhcmFtIGludCAkcm93cyAgICBUaGUgaGVpZ2h0IGluIHBpeGVscy4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0c2l6ZSgkY29sdW1ucywgJHJvd3MpIHt9CgogICAgLyoqCiAgICAgKiBTbGlkZXMgb25lIGVkZ2Ugb2YgYW4gaW1hZ2UgYWxvbmcgdGhlIFggb3IgWSBheGlzLCBjcmVhdGluZyBhIHBhcmFsbGVsb2dyYW0uCiAgICAgKgogICAgICogQW4gWCBkaXJlY3Rpb24gc2hlYXIgc2xpZGVzIGFuIGVkZ2UgYWxvbmcgdGhlIFggYXhpcywgd2hpbGUgYSBZIGRpcmVjdGlvbiBzaGVhciBzbGlkZXMgYW4gZWRnZSBhbG9uZyB0aGUgWSBheGlzLgogICAgICogVGhlIGFtb3VudCBvZiB0aGUgc2hlYXIgaXMgY29udHJvbGxlZCBieSBhIHNoZWFyIGFuZ2xlLiBGb3IgWCBkaXJlY3Rpb24gc2hlYXJzLCB4X3NoZWFyIGlzIG1lYXN1cmVkIHJlbGF0aXZlIHRvCiAgICAgKiB0aGUgWSBheGlzLCBhbmQgc2ltaWxhcmx5LCBmb3IgWSBkaXJlY3Rpb24gc2hlYXJzIHlfc2hlYXIgaXMgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIFggYXhpcy4gRW1wdHkgdHJpYW5nbGVzCiAgICAgKiBsZWZ0IG92ZXIgZnJvbSBzaGVhcmluZyB0aGUgaW1hZ2UgYXJlIGZpbGxlZCB3aXRoIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay5zaGVhcmltYWdlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkY29sb3IgIFRoZSBiYWNrZ3JvdW5kIHBpeGVsIHdhbmQuCiAgICAgKiBAcGFyYW0gZmxvYXQgJHhTaGVhciBUaGUgbnVtYmVyIG9mIGRlZ3JlZXMgdG8gc2hlYXIgdGhlIGltYWdlLgogICAgICogQHBhcmFtIGZsb2F0ICR5U2hlYXIgVGhlIG51bWJlciBvZiBkZWdyZWVzIHRvIHNoZWFyIHRoZSBpbWFnZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hlYXJpbWFnZSgkY29sb3IsICR4U2hlYXIsICR5U2hlYXIpIHt9CgogICAgLyoqCiAgICAgKiBBcHBsaWVzIGEgc29sYXJpemluZyBlZmZlY3QgdG8gdGhlIGltYWdlLgogICAgICoKICAgICAqIEFwcGxpZXMgYSBzcGVjaWFsIGVmZmVjdCB0byB0aGUgaW1hZ2UsIHNpbWlsYXIgdG8gdGhlIGVmZmVjdCBhY2hpZXZlZCBpbiBhIHBob3RvIGRhcmtyb29tIGJ5IHNlbGVjdGl2ZWx5CiAgICAgKiBleHBvc2luZyBhcmVhcyBvZiBwaG90byBzZW5zaXRpdmUgcGFwZXIgdG8gbGlnaHQuIFRocmVzaG9sZCByYW5nZXMgZnJvbSAwIHRvIFF1YW50dW1SYW5nZSBhbmQgaXMgYSBtZWFzdXJlIG9mCiAgICAgKiB0aGUgZXh0ZW50IG9mIHRoZSBzb2xhcml6YXRpb24uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnNvbGFyaXplaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdGhyZXNob2xkIERlZmluZSB0aGUgZXh0ZW50IG9mIHRoZSBzb2xhcml6YXRpb24uCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNvbGFyaXplaW1hZ2UoJHRocmVzaG9sZCkge30KCiAgICAvKioKICAgICAqIFJhbmRvbWx5IGRpc3BsYWNlcyBlYWNoIHBpeGVsIGluIGEgYmxvY2suCiAgICAgKgogICAgICogU3BlY2lhbCBlZmZlY3RzIG1ldGhvZCB0aGF0IHJhbmRvbWx5IGRpc3BsYWNlcyBlYWNoIHBpeGVsIGluIGEgYmxvY2sgZGVmaW5lZCBieSB0aGUgcmFkaXVzIHBhcmFtZXRlci4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2suc3ByZWFkaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRyYWRpdXMgQ2hvb3NlIGEgcmFuZG9tIHBpeGVsIGluIGEgbmVpZ2hib3Job29kIG9mIHRoaXMgZXh0ZW50LgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2ljayBUaGUgR21hZ2ljayBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzcHJlYWRpbWFnZSgkcmFkaXVzKSB7fQoKICAgIC8qKgogICAgICogU3RyaXBzIGFuIGltYWdlIG9mIGFsbCBwcm9maWxlcyBhbmQgY29tbWVudHMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnN0cmlwaW1hZ2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0cmlwaW1hZ2UoKSB7fQoKICAgIC8qKgogICAgICogU3dpcmxzIHRoZSBwaXhlbHMgYWJvdXQgdGhlIGNlbnRlciBvZiB0aGUgaW1hZ2UuCiAgICAgKgogICAgICogU3dpcmxzIHRoZSBwaXhlbHMgYWJvdXQgdGhlIGNlbnRlciBvZiB0aGUgaW1hZ2UsIHdoZXJlIGRlZ3JlZXMgaW5kaWNhdGVzIHRoZSBzd2VlcCBvZiB0aGUgYXJjIHRocm91Z2ggd2hpY2gKICAgICAqIGVhY2ggcGl4ZWwgaXMgbW92ZWQuIFlvdSBnZXQgYSBtb3JlIGRyYW1hdGljIGVmZmVjdCBhcyB0aGUgZGVncmVlcyBtb3ZlIGZyb20gMSB0byAzNjAuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLnN3aXJsaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRkZWdyZWVzIERlZmluZSB0aGUgdGlnaHRuZXNzIG9mIHRoZSBzd2lybGluZyBlZmZlY3QuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN3aXJsaW1hZ2UoJGRlZ3JlZXMpIHt9CgogICAgLyoqCiAgICAgKiBDaGFuZ2VzIHRoZSBzaXplIG9mIGFuIGltYWdlIHRvIHRoZSBnaXZlbiBkaW1lbnNpb25zIGFuZCByZW1vdmVzIGFueSBhc3NvY2lhdGVkIHByb2ZpbGVzLgogICAgICoKICAgICAqIFRoZSBnb2FsIGlzIHRvIHByb2R1Y2Ugc21hbGwgbG93IGNvc3QgdGh1bWJuYWlsIGltYWdlcyBzdWl0ZWQgZm9yIGRpc3BsYXkgb24gdGhlIFdlYi4KICAgICAqIElmIFRSVUUgaXMgZ2l2ZW4gYXMgYSB0aGlyZCBwYXJhbWV0ZXIgdGhlbiBjb2x1bW5zIGFuZCByb3dzIHBhcmFtZXRlcnMgYXJlIHVzZWQgYXMgbWF4aW11bXMgZm9yIGVhY2ggc2lkZS4KICAgICAqIEJvdGggc2lkZXMgd2lsbCBiZSBzY2FsZWQgZG93biB1bnRpbCB0aGUgbWF0Y2ggb3IgYXJlIHNtYWxsZXIgdGhhbiB0aGUgcGFyYW1ldGVyIGdpdmVuIGZvciB0aGUgc2lkZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2sudGh1bWJuYWlsaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAgJHdpZHRoICBJbWFnZSB3aWR0aC4KICAgICAqIEBwYXJhbSBpbnQgICRoZWlnaHQgSW1hZ2UgaGVpZ2h0LgogICAgICogQHBhcmFtIGJvb2wgJGZpdCAgICBbb3B0aW9uYWxdCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdCBvbiBzdWNjZXNzLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRodW1ibmFpbGltYWdlKCR3aWR0aCwgJGhlaWdodCwgJGZpdCA9IGZhbHNlKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIGVkZ2VzIHRoYXQgYXJlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZyb20gdGhlIGltYWdlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay50cmltaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRmdXp6IEJ5IGRlZmF1bHQgdGFyZ2V0IG11c3QgbWF0Y2ggYSBwYXJ0aWN1bGFyIHBpeGVsIGNvbG9yIGV4YWN0bHkuIEhvd2V2ZXIsIGluIG1hbnkgY2FzZXMgdHdvCiAgICAgKiAgICAgICAgICAgICAgICAgICAgY29sb3JzIG1heSBkaWZmZXIgYnkgYSBzbWFsbCBhbW91bnQuIFRoZSBmdXp6IG1lbWJlciBvZiBpbWFnZSBkZWZpbmVzIGhvdyBtdWNoIHRvbGVyYW5jZSBpcwogICAgICogICAgICAgICAgICAgICAgICAgIGFjY2VwdGFibGUgdG8gY29uc2lkZXIgdHdvIGNvbG9ycyBhcyB0aGUgc2FtZS4gVGhpcyBwYXJhbWV0ZXIgcmVwcmVzZW50cyB0aGUgdmFyaWF0aW9uIG9uIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgIHF1YW50dW0gcmFuZ2UuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmltaW1hZ2UoJGZ1enopIHt9CgogICAgLyoqCiAgICAgKiBXcml0ZXMgYW4gaW1hZ2UgdG8gdGhlIHNwZWNpZmllZCBmaWxlbmFtZS4KICAgICAqCiAgICAgKiBXcml0ZXMgYW4gaW1hZ2UgdG8gdGhlIHNwZWNpZmllZCBmaWxlbmFtZS4gSWYgdGhlIGZpbGVuYW1lIHBhcmFtZXRlciBpcyBOVUxMLCB0aGUgaW1hZ2UgaXMgd3JpdHRlbiB0byB0aGUKICAgICAqIGZpbGVuYW1lIHNldCBieSBHbWFnaWNrOjpSZWFkSW1hZ2UoKSBvciBHbWFnaWNrOjpTZXRJbWFnZUZpbGVuYW1lKCkuCiAgICAgKgogICAgICogVGhpcyBpcyBhbiBhbGlhcyBmb3Igd3JpdGVpbWFnZSgpLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2ljay53cml0ZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBUaGUgaW1hZ2UgZmlsZW5hbWUuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrIFRoZSBHbWFnaWNrIG9iamVjdC4KICAgICAqCiAgICAgKiBAdGhyb3dzIEdtYWdpY2tFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkZmlsZW5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBXcml0ZXMgYW4gaW1hZ2UgdG8gdGhlIHNwZWNpZmllZCBmaWxlbmFtZS4KICAgICAqCiAgICAgKiBXcml0ZXMgYW4gaW1hZ2UgdG8gdGhlIHNwZWNpZmllZCBmaWxlbmFtZS4gSWYgdGhlIGZpbGVuYW1lIHBhcmFtZXRlciBpcyBOVUxMLCB0aGUgaW1hZ2UgaXMgd3JpdHRlbiB0byB0aGUKICAgICAqIGZpbGVuYW1lIHNldCBieSBHbWFnaWNrOjpSZWFkSW1hZ2UoKSBvciBHbWFnaWNrOjpTZXRJbWFnZUZpbGVuYW1lKCkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrLndyaXRlaW1hZ2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgICBUaGUgaW1hZ2UgZmlsZW5hbWUuCiAgICAgKiBAcGFyYW0gYm9vbCAgICRhbGxfZnJhbWVzIFtvcHRpb25hbF0KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2sgVGhlIEdtYWdpY2sgb2JqZWN0LgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja0V4Y2VwdGlvbiBPbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlaW1hZ2UoJGZpbGVuYW1lLCAkYWxsX2ZyYW1lcyA9IGZhbHNlKSB7fQp9CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5nbWFnaWNrZHJhdy5waHAKICovCmNsYXNzIEdtYWdpY2tEcmF3CnsKICAgIC8qKgogICAgICogRHJhd3MgdGV4dCBvbiB0aGUgaW1hZ2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrZHJhdy5hbm5vdGF0ZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgICR4ICAgIHggb3JkaW5hdGUgdG8gbGVmdCBvZiB0ZXh0LgogICAgICogQHBhcmFtIGZsb2F0ICAkeSAgICB5IG9yZGluYXRlIHRvIHRleHQgYmFzZWxpbmUuCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZXh0IHRleHQgdG8gZHJhdy4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2tEcmF3IFRoZSBHbWFnaWNrRHJhdyBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFubm90YXRlKCR4LCAkeSwgJHRleHQpIHt9CgogICAgLyoqCiAgICAgKiBEcmF3cyBhbiBhcmMgZmFsbGluZyB3aXRoaW4gYSBzcGVjaWZpZWQgYm91bmRpbmcgcmVjdGFuZ2xlIG9uIHRoZSBpbWFnZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LmFyYy5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHN4IHN0YXJ0aW5nIHggb3JkaW5hdGUgb2YgYm91bmRpbmcgcmVjdGFuZ2xlLgogICAgICogQHBhcmFtIGZsb2F0ICRzeSBzdGFydGluZyB5IG9yZGluYXRlIG9mIGJvdW5kaW5nIHJlY3RhbmdsZS4KICAgICAqIEBwYXJhbSBmbG9hdCAkZXggZW5kaW5nIHggb3JkaW5hdGUgb2YgYm91bmRpbmcgcmVjdGFuZ2xlLgogICAgICogQHBhcmFtIGZsb2F0ICRleSBlbmRpbmcgeSBvcmRpbmF0ZSBvZiBib3VuZGluZyByZWN0YW5nbGUuCiAgICAgKiBAcGFyYW0gZmxvYXQgJHNkIHN0YXJ0aW5nIGRlZ3JlZXMgb2Ygcm90YXRpb24uCiAgICAgKiBAcGFyYW0gZmxvYXQgJGVkIGVuZGluZyBkZWdyZWVzIG9mIHJvdGF0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2lja0RyYXcgVGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXJjKCRzeCwgJHN5LCAkZXgsICRleSwgJHNkLCAkZWQpIHt9CgogICAgLyoqCiAgICAgKiBEcmF3cyBhIGJlemllciBjdXJ2ZSB0aHJvdWdoIGEgc2V0IG9mIHBvaW50cyBvbiB0aGUgaW1hZ2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrZHJhdy5iZXppZXIucGhwCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjb29yZGluYXRlX2FycmF5IENvb3JkaW5hdGVzIGFycmF5LgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2lja0RyYXcgVGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmV6aWVyKGFycmF5ICRjb29yZGluYXRlX2FycmF5KSB7fQoKICAgIC8qKgogICAgICogRHJhd3MgYW4gZWxsaXBzZSBvbiB0aGUgaW1hZ2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrZHJhdy5lbGxpcHNlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkb3ggICAgb3JpZ2luIHggb3JkaW5hdGUuCiAgICAgKiBAcGFyYW0gZmxvYXQgJG95ICAgIG9yaWdpbiB5IG9yZGluYXRlLgogICAgICogQHBhcmFtIGZsb2F0ICRyeCAgICByYWRpdXMgaW4geC4KICAgICAqIEBwYXJhbSBmbG9hdCAkcnkgICAgcmFkaXVzIGluIHkuCiAgICAgKiBAcGFyYW0gZmxvYXQgJHN0YXJ0IHN0YXJ0aW5nIHJvdGF0aW9uIGluIGRlZ3JlZXMuCiAgICAgKiBAcGFyYW0gZmxvYXQgJGVuZCAgIGVuZGluZyByb3RhdGlvbiBpbiBkZWdyZWVzLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2lja0RyYXcgVGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZWxsaXBzZSgkb3gsICRveSwgJHJ4LCAkcnksICRzdGFydCwgJGVuZCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGZpbGwgY29sb3IgdXNlZCBmb3IgZHJhd2luZyBmaWxsZWQgb2JqZWN0cy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LmdldGZpbGxjb2xvci5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2tQaXhlbCBUaGUgR21hZ2lja1BpeGVsIGZpbGwgY29sb3IgdXNlZCBmb3IgZHJhd2luZyBmaWxsZWQgb2JqZWN0cy4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGZpbGxjb2xvcigpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBvcGFjaXR5IHVzZWQgd2hlbiBkcmF3aW5nLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2lja2RyYXcuZ2V0ZmlsbG9wYWNpdHkucGhwCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdCBUaGUgb3BhY2l0eSB1c2VkIHdoZW4gZHJhd2luZyB1c2luZyB0aGUgZmlsbCBjb2xvciBvciBmaWxsIHRleHR1cmUuIEZ1bGx5IG9wYXF1ZSBpcyAxLjAuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRmaWxsb3BhY2l0eSgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGZvbnQgdXNlZCB3aGVuIGFubm90YXRpbmcgd2l0aCB0ZXh0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2lja2RyYXcuZ2V0Zm9udC5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBBIHN0cmluZyBvbiBzdWNjZXNzIGFuZCBmYWxzZSBpZiBubyBmb250IGlzIHNldC4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGZvbnQoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZm9udCBwb2ludHNpemUgdXNlZCB3aGVuIGFubm90YXRpbmcgd2l0aCB0ZXh0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2lja2RyYXcuZ2V0Zm9udHNpemUucGhwCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdCBUaGUgZm9udCBzaXplIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBHbWFnaWNrRHJhdyBvYmplY3QuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRmb250c2l6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmb250IHN0eWxlIHVzZWQgd2hlbiBhbm5vdGF0aW5nIHdpdGggdGV4dC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LmdldGZvbnRzdHlsZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBUaGUgZm9udCBzdHlsZSBjb25zdGFudCAoU1RZTEVfKSBhc3NvY2lhdGVkIHdpdGggdGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvciAwIGlmIG5vIHN0eWxlIGlzIHNldC4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGZvbnRzdHlsZSgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBmb250IHdlaWdodCB1c2VkIHdoZW4gYW5ub3RhdGluZyB3aXRoIHRleHQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrZHJhdy5nZXRmb250d2VpZ2h0LnBocAogICAgICoKICAgICAqIEByZXR1cm4gaW50IEFuIGludCBvbiBzdWNjZXNzIGFuZCAwIGlmIG5vIHdlaWdodCBpcyBzZXQuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRmb250d2VpZ2h0KCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGNvbG9yIHVzZWQgZm9yIHN0cm9raW5nIG9iamVjdCBvdXRsaW5lcy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LmdldHN0cm9rZWNvbG9yLnBocAogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2lja1BpeGVsIFJldHVybnMgYW4gR21hZ2lja1BpeGVsIG9iamVjdCB3aGljaCBkZXNjcmliZXMgdGhlIGNvbG9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0c3Ryb2tlY29sb3IoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgb3BhY2l0eSBvZiBzdHJva2VkIG9iamVjdCBvdXRsaW5lcy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LmdldHN0cm9rZW9wYWNpdHkucGhwCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdCBSZXR1cm5zIGEgZmxvYXQgZGVzY3JpYmluZyB0aGUgb3BhY2l0eS4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldHN0cm9rZW9wYWNpdHkoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIHN0cm9rZSB1c2VkIHRvIGRyYXcgb2JqZWN0IG91dGxpbmVzLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2lja2RyYXcuZ2V0c3Ryb2tld2lkdGgucGhwCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdCBSZXR1cm5zIGEgZmxvYXQgZGVzY3JpYmluZyB0aGUgc3Ryb2tlIHdpZHRoLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0c3Ryb2tld2lkdGgoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZGVjb3JhdGlvbiBhcHBsaWVkIHdoZW4gYW5ub3RhdGluZyB3aXRoIHRleHQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrZHJhdy5nZXR0ZXh0ZGVjb3JhdGlvbi5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBSZXR1cm5zIG9uZSBvZiB0aGUgREVDT1JBVElPTl8gY29uc3RhbnRzIGFuZCAwIGlmIG5vIGRlY29yYXRpb24gaXMgc2V0LgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0dGV4dGRlY29yYXRpb24oKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY29kZSBzZXQgdXNlZCBmb3IgdGV4dCBhbm5vdGF0aW9ucy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LmdldHRleHRlbmNvZGluZy5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBSZXR1cm5zIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGNvZGUgc2V0IG9yIGZhbHNlIGlmIHRleHQgZW5jb2RpbmcgaXMgbm90IHNldC4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldHRleHRlbmNvZGluZygpIHt9CgogICAgLyoqCiAgICAgKiBEcmF3cyBhIGxpbmUgb24gdGhlIGltYWdlIHVzaW5nIHRoZSBjdXJyZW50IHN0cm9rZSBjb2xvciwgc3Ryb2tlIG9wYWNpdHksIGFuZCBzdHJva2Ugd2lkdGguCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrZHJhdy5saW5lLnBocAogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkc3ggc3RhcnRpbmcgeCBvcmRpbmF0ZS4KICAgICAqIEBwYXJhbSBmbG9hdCAkc3kgc3RhcnRpbmcgeSBvcmRpbmF0ZS4KICAgICAqIEBwYXJhbSBmbG9hdCAkZXggZW5kaW5nIHggb3JkaW5hdGUuCiAgICAgKiBAcGFyYW0gZmxvYXQgJGV5IGVuZGluZyB5IG9yZGluYXRlLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2lja0RyYXcgVGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGluZSgkc3gsICRzeSwgJGV4LCAkZXkpIHt9CgogICAgLyoqCiAgICAgKiBEcmF3cyBhIHBvaW50IHVzaW5nIHRoZSBjdXJyZW50IHN0cm9rZSBjb2xvciBhbmQgc3Ryb2tlIHRoaWNrbmVzcyBhdCB0aGUgc3BlY2lmaWVkIGNvb3JkaW5hdGVzLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2lja2RyYXcucG9pbnQucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR4IHRhcmdldCB4IGNvb3JkaW5hdGUuCiAgICAgKiBAcGFyYW0gZmxvYXQgJHkgdGFyZ2V0IHkgY29vcmRpbmF0ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2tEcmF3IFRoZSBHbWFnaWNrRHJhdyBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBvaW50KCR4LCAkeSkge30KCiAgICAvKioKICAgICAqIERyYXdzIGEgcG9seWdvbiB1c2luZyB0aGUgY3VycmVudCBzdHJva2UsIHN0cm9rZSB3aWR0aCwgYW5kIGZpbGwgY29sb3Igb3IgdGV4dHVyZSwgdXNpbmcgdGhlIHNwZWNpZmllZCBhcnJheSBvZiBjb29yZGluYXRlcy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LnBvbHlnb24ucGhwCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjb29yZGluYXRlcyBUaGUgYXJyYXkgb2YgY29vcmRpbmF0ZXMuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrRHJhdyBUaGUgR21hZ2lja0RyYXcgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb2x5Z29uKGFycmF5ICRjb29yZGluYXRlcykge30KCiAgICAvKioKICAgICAqIERyYXdzIGEgcG9seWxpbmUgdXNpbmcgdGhlIGN1cnJlbnQgc3Ryb2tlLCBzdHJva2Ugd2lkdGgsIGFuZCBmaWxsIGNvbG9yIG9yIHRleHR1cmUsIHVzaW5nIHRoZSBzcGVjaWZpZWQgYXJyYXkgb2YgY29vcmRpbmF0ZXMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrZHJhdy5wb2x5bGluZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNvb3JkaW5hdGVfYXJyYXkgVGhlIGFycmF5IG9mIGNvb3JkaW5hdGVzLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2lja0RyYXcgVGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9seWxpbmUoYXJyYXkgJGNvb3JkaW5hdGVfYXJyYXkpIHt9CgogICAgLyoqCiAgICAgKiBEcmF3cyBhIHJlY3RhbmdsZSBnaXZlbiB0d28gY29vcmRpbmF0ZXMgYW5kIHVzaW5nIHRoZSBjdXJyZW50IHN0cm9rZSwgc3Ryb2tlIHdpZHRoLCBhbmQgZmlsbCBzZXR0aW5ncy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LnJlY3RhbmdsZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgxIHggb3JkaW5hdGUgb2YgZmlyc3QgY29vcmRpbmF0ZS4KICAgICAqIEBwYXJhbSBmbG9hdCAkeTEgeSBvcmRpbmF0ZSBvZiBmaXJzdCBjb29yZGluYXRlLgogICAgICogQHBhcmFtIGZsb2F0ICR4MiB4IG9yZGluYXRlIG9mIHNlY29uZCBjb29yZGluYXRlLgogICAgICogQHBhcmFtIGZsb2F0ICR5MiB5IG9yZGluYXRlIG9mIHNlY29uZCBjb29yZGluYXRlLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2lja0RyYXcgVGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVjdGFuZ2xlKCR4MSwgJHkxLCAkeDIsICR5Mikge30KCiAgICAvKioKICAgICAqIEFwcGxpZXMgdGhlIHNwZWNpZmllZCByb3RhdGlvbiB0byB0aGUgY3VycmVudCBjb29yZGluYXRlIHNwYWNlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2lja2RyYXcucm90YXRlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkZGVncmVlcyBkZWdyZWVzIG9mIHJvdGF0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2lja0RyYXcgVGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm90YXRlKCRkZWdyZWVzKSB7fQoKICAgIC8qKgogICAgICogRHJhd3MgYSByb3VuZGVkIHJlY3RhbmdsZSBnaXZlbiB0d28gY29vcmRpbmF0ZXMsIHggYW5kIHkgY29ybmVyIHJhZGl1c2VzIGFuZCB1c2luZyB0aGUgY3VycmVudCBzdHJva2UsIHN0cm9rZSB3aWR0aCwgYW5kIGZpbGwgc2V0dGluZ3MuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrZHJhdy5yb3VuZHJlY3RhbmdsZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgxIHggb3JkaW5hdGUgb2YgZmlyc3QgY29vcmRpbmF0ZS4KICAgICAqIEBwYXJhbSBmbG9hdCAkeTEgeSBvcmRpbmF0ZSBvZiBmaXJzdCBjb29yZGluYXRlLgogICAgICogQHBhcmFtIGZsb2F0ICR4MiB4IG9yZGluYXRlIG9mIHNlY29uZCBjb29yZGluYXRlLgogICAgICogQHBhcmFtIGZsb2F0ICR5MiB5IG9yZGluYXRlIG9mIHNlY29uZCBjb29yZGluYXRlLgogICAgICogQHBhcmFtIGZsb2F0ICRyeCByYWRpdXMgb2YgY29ybmVyIGluIGhvcml6b250YWwgZGlyZWN0aW9uLgogICAgICogQHBhcmFtIGZsb2F0ICRyeSByYWRpdXMgb2YgY29ybmVyIGluIHZlcnRpY2FsIGRpcmVjdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2tEcmF3IFRoZSBHbWFnaWNrRHJhdyBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJvdW5kcmVjdGFuZ2xlKCR4MSwgJHkxLCAkeDIsICR5MiwgJHJ4LCAkcnkpIHt9CgogICAgLyoqCiAgICAgKiBBZGp1c3RzIHRoZSBzY2FsaW5nIGZhY3RvciB0byBhcHBseSBpbiB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZGlyZWN0aW9ucyB0byB0aGUgY3VycmVudCBjb29yZGluYXRlIHNwYWNlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2lja2RyYXcuc2NhbGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR4IGhvcml6b250YWwgc2NhbGUgZmFjdG9yLgogICAgICogQHBhcmFtIGZsb2F0ICR5IHZlcnRpY2FsIHNjYWxlIGZhY3Rvci4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2tEcmF3IFRoZSBHbWFnaWNrRHJhdyBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNjYWxlKCR4LCAkeSkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGZpbGwgY29sb3IgdG8gYmUgdXNlZCBmb3IgZHJhd2luZyBmaWxsZWQgb2JqZWN0cy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LnNldGZpbGxjb2xvci5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gR21hZ2lja1BpeGVsfHN0cmluZyAkY29sb3IgR21hZ2lja1BpeGVsIGluZGljYXRpbmcgY29sb3IgdG8gdXNlIGZvciBmaWxsaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2lja0RyYXcgVGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0ZmlsbGNvbG9yKCRjb2xvcikge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG9wYWNpdHkgdG8gdXNlIHdoZW4gZHJhd2luZyB1c2luZyB0aGUgZmlsbCBjb2xvciBvciBmaWxsIHRleHR1cmUuIFNldHRpbmcgaXQgdG8gMS4wIHdpbGwgbWFrZSBmaWxsIGZ1bGwgb3BhcXVlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2lja2RyYXcuc2V0ZmlsbG9wYWNpdHkucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRmaWxsX29wYWNpdHkgVGhlIGZpbGwgb3BhY2l0eS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2tEcmF3IFRoZSBHbWFnaWNrRHJhdyBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGZpbGxvcGFjaXR5KCRmaWxsX29wYWNpdHkpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBmdWxseS1zcGVjaWZpZWQgZm9udCB0byB1c2Ugd2hlbiBhbm5vdGF0aW5nIHdpdGggdGV4dC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LnNldGZvbnQucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZm9udCBUaGUgZm9udCBuYW1lLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2lja0RyYXcgVGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Zm9udCgkZm9udCkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGZvbnQgcG9pbnRzaXplIHRvIHVzZSB3aGVuIGFubm90YXRpbmcgd2l0aCB0ZXh0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2lja2RyYXcuc2V0Zm9udHNpemUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRwb2ludHNpemUgVGhlIHRleHQgcG9pbnRzaXplLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2lja0RyYXcgVGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Zm9udHNpemUoJHBvaW50c2l6ZSkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGZvbnQgc3R5bGUgdG8gdXNlIHdoZW4gYW5ub3RhdGluZyB3aXRoIHRleHQuCiAgICAgKgogICAgICogVGhlIEFueVN0eWxlIGVudW1lcmF0aW9uIGFjdHMgYXMgYSB3aWxkLWNhcmQgImRvbid0IGNhcmUiIG9wdGlvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LnNldGZvbnRzdHlsZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRzdHlsZSBUaGUgZm9udCBzdHlsZSAoTm9ybWFsU3R5bGUsIEl0YWxpY1N0eWxlLCBPYmxpcXVlU3R5bGUsIEFueVN0eWxlKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2tEcmF3IFRoZSBHbWFnaWNrRHJhdyBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGZvbnRzdHlsZSgkc3R5bGUpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBmb250IHdlaWdodCB0byB1c2Ugd2hlbiBhbm5vdGF0aW5nIHdpdGggdGV4dC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LnNldGZvbnR3ZWlnaHQucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkd2VpZ2h0IFRoZSBmb250IHdlaWdodCAodmFsaWQgcmFuZ2UgMTAwLTkwMCkuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrRHJhdyBUaGUgR21hZ2lja0RyYXcgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRmb250d2VpZ2h0KCR3ZWlnaHQpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBjb2xvciB1c2VkIGZvciBzdHJva2luZyBvYmplY3Qgb3V0bGluZXMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrZHJhdy5zZXRzdHJva2Vjb2xvci5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gR21hZ2lja1BpeGVsfHN0cmluZyAkY29sb3IgR21hZ2lja1BpeGVsIHJlcHJlc2VudGluZyB0aGUgY29sb3IgZm9yIHRoZSBzdHJva2UuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrRHJhdyBUaGUgR21hZ2lja0RyYXcgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRzdHJva2Vjb2xvcigkY29sb3IpIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZpZXMgdGhlIG9wYWNpdHkgb2Ygc3Ryb2tlZCBvYmplY3Qgb3V0bGluZXMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrZHJhdy5zZXRzdHJva2VvcGFjaXR5LnBocAogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkc3Ryb2tlX29wYWNpdHkgU3Ryb2tlIG9wYWNpdHkuIFRoZSB2YWx1ZSAxLjAgaXMgb3BhcXVlLgogICAgICoKICAgICAqIEByZXR1cm4gR21hZ2lja0RyYXcgVGhlIEdtYWdpY2tEcmF3IG9iamVjdCBvbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0c3Ryb2tlb3BhY2l0eSgkc3Ryb2tlX29wYWNpdHkpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSB3aWR0aCBvZiB0aGUgc3Ryb2tlIHVzZWQgdG8gZHJhdyBvYmplY3Qgb3V0bGluZXMuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrZHJhdy5zZXRzdHJva2V3aWR0aC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHdpZHRoIFRoZSBzdHJva2Ugd2lkdGguCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrRHJhdyBUaGUgR21hZ2lja0RyYXcgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRzdHJva2V3aWR0aCgkd2lkdGgpIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZpZXMgYSBkZWNvcmF0aW9uIHRvIGJlIGFwcGxpZWQgd2hlbiBhbm5vdGF0aW5nIHdpdGggdGV4dC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LnNldHRleHRkZWNvcmF0aW9uLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGRlY29yYXRpb24gVGhlIHRleHQgZGVjb3JhdGlvbi4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgT25lIG9mIE5vRGVjb3JhdGlvbiwgVW5kZXJsaW5lRGVjb3JhdGlvbiwgT3ZlcmxpbmVEZWNvcmF0aW9uLCBvciBMaW5lVGhyb3VnaERlY29yYXRpb24uCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrRHJhdyBUaGUgR21hZ2lja0RyYXcgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXR0ZXh0ZGVjb3JhdGlvbigkZGVjb3JhdGlvbikge30KCiAgICAvKioKICAgICAqIFNwZWNpZmllcyB0aGUgY29kZSBzZXQgdG8gdXNlIGZvciB0ZXh0IGFubm90YXRpb25zLgogICAgICoKICAgICAqIFRoZSBvbmx5IGNoYXJhY3RlciBlbmNvZGluZyB3aGljaCBtYXkgYmUgc3BlY2lmaWVkIGF0IHRoaXMgdGltZSBpcyAiVVRGLTgiIGZvciByZXByZXNlbnRpbmcgVW5pY29kZSBhcyBhCiAgICAgKiBzZXF1ZW5jZSBvZiBieXRlcy4gU3BlY2lmeSBhbiBlbXB0eSBzdHJpbmcgdG8gc2V0IHRleHQgZW5jb2RpbmcgdG8gdGhlIHN5c3RlbSdzIGRlZmF1bHQuIFN1Y2Nlc3NmdWwgdGV4dAogICAgICogYW5ub3RhdGlvbiB1c2luZyBVbmljb2RlIG1heSByZXF1aXJlIGZvbnRzIGRlc2lnbmVkIHRvIHN1cHBvcnQgVW5pY29kZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2tkcmF3LnNldHRleHRlbmNvZGluZy5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZyBUaGUgdGV4dCBlbmNvZGluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIEdtYWdpY2tEcmF3IFRoZSBHbWFnaWNrRHJhdyBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldHRleHRlbmNvZGluZygkZW5jb2RpbmcpIHt9Cn0KCmNsYXNzIEdtYWdpY2tFeGNlcHRpb24gZXh0ZW5kcyBcRXhjZXB0aW9uIHt9CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5nbWFnaWNrcGl4ZWwucGhwCiAqLwpjbGFzcyBHbWFnaWNrUGl4ZWwKewogICAgLyoqCiAgICAgKiBUaGUgR21hZ2lja1BpeGVsIGNvbnN0cnVjdG9yLgogICAgICoKICAgICAqIElmIGEgY29sb3IgaXMgc3BlY2lmaWVkLCB0aGUgb2JqZWN0IGlzIGNvbnN0cnVjdGVkIGFuZCB0aGVuIGluaXRpYWxpc2VkIHdpdGggdGhhdCBjb2xvciBiZWZvcmUgYmVpbmcgcmV0dXJuZWQuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrcGl4ZWwuY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbG9yIFtvcHRpb25hbF0gVGhlIG9wdGlvbmFsIGNvbG9yIHN0cmluZyB0byB1c2UgYXMgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhpcyBvYmplY3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29sb3IgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY29sb3IgZGVzY3JpYmVkIGJ5IHRoZSBHbWFnaWNrUGl4ZWwgb2JqZWN0LgogICAgICoKICAgICAqIElmIHRoZSBjb2xvciBoYXMgYW4gb3BhY2l0eSBjaGFubmVsIHNldCwgdGhpcyBpcyBwcm92aWRlZCBhcyBhIGZvdXJ0aCB2YWx1ZSBpbiB0aGUgbGlzdC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2twaXhlbC5nZXRjb2xvci5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkYXNfYXJyYXkgICAgICAgIFtvcHRpb25hbF0gVHJ1ZSB0byBpbmRpY2F0ZSByZXR1cm4gb2YgYXJyYXkgaW5zdGVhZCBvZiBzdHJpbmcuCiAgICAgKiBAcGFyYW0gYm9vbCAkbm9ybWFsaXplX2FycmF5IFtvcHRpb25hbF0gTm9ybWFsaXplIHRoZSBjb2xvciB2YWx1ZXMuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBBIHN0cmluZyBvciBhcnJheSBvZiBjaGFubmVsIHZhbHVlcywgZWFjaCBub3JtYWxpemVkIGlmIFRSVUUgaXMgZ2l2ZW4gYXMgcGFyYW0uCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrUGl4ZWxFeGNlcHRpb24gT24gZXJyb3IuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRjb2xvcigkYXNfYXJyYXkgPSBudWxsLCAkbm9ybWFsaXplX2FycmF5ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGNvbG9yIGNvdW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbG9yLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZ21hZ2lja3BpeGVsLmdldGNvbG9yY291bnQucGhwCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIGNvbG9yIGNvdW50IGFzIGFuIGludGVnZXIuCiAgICAgKgogICAgICogQHRocm93cyBHbWFnaWNrUGl4ZWxFeGNlcHRpb24gT24gZmFpbHVyZS4KICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldGNvbG9yY291bnQoKSB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgbm9ybWFsaXplZCB2YWx1ZSBvZiB0aGUgcHJvdmlkZWQgY29sb3IgY2hhbm5lbC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2dtYWdpY2twaXhlbC5nZXRjb2xvcnZhbHVlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGNvbG9yIFRoZSBjaGFubmVsIHRvIGNoZWNrLCBzcGVjaWZpZWQgYXMgb25lIG9mIHRoZSBHbWFnaWNrIGNoYW5uZWwgY29uc3RhbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQgVGhlIHZhbHVlIG9mIHRoZSBjb2xvciBjaGFubmVsIHNwZWNpZmllZCwgYXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLgogICAgICoKICAgICAqIEB0aHJvd3MgR21hZ2lja1BpeGVsRXhjZXB0aW9uIE9uIGVycm9yLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Y29sb3J2YWx1ZSgkY29sb3IpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBjb2xvci4KICAgICAqCiAgICAgKiBTZXRzIHRoZSBjb2xvciBkZXNjcmliZWQgYnkgdGhlIEdtYWdpY2tQaXhlbCBvYmplY3QsCiAgICAgKiB3aXRoIGEgc3RyaW5nIChlLmcuICJibHVlIiwgIiMwMDAwZmYiLCAicmdiKDAsMCwyNTUpIiwgImNteWsoMTAwLDEwMCwxMDAsMTApIiwgZXRjLikuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrcGl4ZWwuc2V0Y29sb3IucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY29sb3IgVGhlIGNvbG9yIGRlZmluaXRpb24gdG8gdXNlIGluIG9yZGVyIHRvIGluaXRpYWxpc2UgdGhlIEdtYWdpY2tQaXhlbCBvYmplY3QuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrUGl4ZWwgVGhlIEdtYWdpY2tQaXhlbCBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGNvbG9yKCRjb2xvcikge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2Ygb25lIG9mIHRoZSBjaGFubmVscy4KICAgICAqCiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgb2YgdGhpcyBvYmplY3QgdG8gdGhlIHByb3ZpZGVkIHZhbHVlLCB3aGljaCBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxLgogICAgICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGFuIG9wYWNpdHkgY2hhbm5lbCB0byBhIEdtYWdpY2tQaXhlbCBvYmplY3QuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9nbWFnaWNrcGl4ZWwuc2V0Y29sb3J2YWx1ZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICAgJGNvbG9yIE9uZSBvZiB0aGUgR21hZ2ljayBjaGFubmVsIGNvbG9yIGNvbnN0YW50cy4KICAgICAqIEBwYXJhbSBmbG9hdCAkdmFsdWUgVGhlIHZhbHVlIHRvIHNldCB0aGlzIGNoYW5uZWwgdG8sIHJhbmdpbmcgZnJvbSAwIHRvIDEuCiAgICAgKgogICAgICogQHJldHVybiBHbWFnaWNrUGl4ZWwgVGhlIEdtYWdpY2tQaXhlbCBvYmplY3Qgb24gc3VjY2Vzcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGNvbG9ydmFsdWUoJGNvbG9yLCAkdmFsdWUpIHt9Cn0KCmNsYXNzIEdtYWdpY2tQaXhlbEV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24ge30KPD9waHAKCm5hbWVzcGFjZSBSZWxheTsKCi8qKgogKiBSZWxheSBjbGllbnQuCiAqLwpjbGFzcyBSZWxheQp7CiAgICAvKioKICAgICAqIFJlbGF5J3MgdmVyc2lvbi4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgY29uc3QgVkVSU0lPTiA9ICIwLjcuMCI7CgogICAgLyoqCiAgICAgKiBSZWxheSdzIHZlcnNpb24uCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGNvbnN0IFZlcnNpb24gPSAiMC43LjAiOwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgbm8gY29tcHJlc3Npb24gYWxnb3JpdGhtLgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9OT05FID0gMDsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBMWkYgY29tcHJlc3Npb24gYWxnb3JpdGhtLgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9MWkYgPSAxOwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIFpzdGFuZGFyZCBjb21wcmVzc2lvbiBhbGdvcml0aG0uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IENPTVBSRVNTSU9OX1pTVEQgPSAyOwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIExaNCBjb21wcmVzc2lvbiBhbGdvcml0aG0uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IENPTVBSRVNTSU9OX0xaNCA9IDM7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyBubyBzZXJpYWxpemVyLgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTRVJJQUxJWkVSX05PTkUgPSAwOwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIFBIUCBzZXJpYWxpemVyLgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTRVJJQUxJWkVSX1BIUCA9IDE7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgaWdiaW5hcnkgc2VyaWFsaXplci4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0VSSUFMSVpFUl9JR0JJTkFSWSA9IDI7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgTWVzc2FnZVBhY2sgc2VyaWFsaXplci4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0VSSUFMSVpFUl9NU0dQQUNLID0gMzsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBKU09OIHNlcmlhbGl6ZXIuCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNFUklBTElaRVJfSlNPTiA9IDQ7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgYXRvbWljIG1vZGUuCiAgICAgKgogICAgICogQHNlZSBSZWxheTo6Z2V0TW9kZSgpCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgQVRPTUlDID0gMHgwMDsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBwaXBlbGluZSBtb2RlLgogICAgICoKICAgICAqIEBzZWUgUmVsYXk6OmdldE1vZGUoKQogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBJUEVMSU5FID0gMHgwMjsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBgTVVMVElgIG1vZGUuCiAgICAgKgogICAgICogQHNlZSBSZWxheTo6Z2V0TW9kZSgpCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgTVVMVEkgPSAweDAxOwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgd2UncmUgU1VCU0NSSUJFRC4gIE5vdGUgdGhhdCB0aGlzIGNvbnN0YW50IGNhbgogICAgICogb25seSByZWFsbHkgYmUgYWNjZXNzZWQgd2hlbiBgdHJ1ZWAgaXMgcGFzc2VkIHRvIGBnZXRNYXNrKClgIHRlbGxpbmcKICAgICAqIHJlbGF5IHRvIHJldHVybiB0aGUgY29tcGxldGUgYml0bWFza2VkIG1vZGUuCiAgICAgKgogICAgICogQHNlZSBSZWxheTo6Z2V0TW9kZSgpCiAgICAgKiBAdmFyIGludAogICAgICoqLwogICAgcHVibGljIGNvbnN0IFNVQlNDUklCRUQgPSAweDA0OwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIHByZWZpeCBvcHRpb24uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9QUkVGSVggPSAyOwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIHJlYWQgdGltZW91dCBvcHRpb24uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9SRUFEX1RJTUVPVVQgPSAzOwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIG1heGltdW0gcmV0cmllcyBvcHRpb24uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9NQVhfUkVUUklFUyA9IDExOwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGJhY2tvZmYgYWxnb3JpdGhtLgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfQkFDS09GRl9BTEdPUklUSE0gPSAxMjsKCiAgICAvKioKICAgICAqIFRvZ2dsZSBUQ1BfS0VFUEFMSVZFIG9uIGEgY29ubmVjdGlvbgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfVENQX0tFRVBBTElWRSA9IDY7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgZGVmYXVsdCBiYWNrb2ZmIGFsZ29yaXRobS4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgQkFDS09GRl9BTEdPUklUSE1fREVGQVVMVCA9IDA7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgZGVjb3JyZWxhdGVkIGppdHRlciBiYWNrb2ZmIGFsZ29yaXRobS4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgQkFDS09GRl9BTEdPUklUSE1fREVDT1JSRUxBVEVEX0pJVFRFUiA9IDE7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgZnVsbCBqaXR0ZXIgYmFja29mZiBhbGdvcml0aG0uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IEJBQ0tPRkZfQUxHT1JJVEhNX0ZVTExfSklUVEVSID0gMjsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBiYXNlIGZvciBiYWNrb2ZmIGNvbXB1dGF0aW9uLgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfQkFDS09GRl9CQVNFID0gMTM7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgYmFja29mZiB0aW1lIGNhcC4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX0JBQ0tPRkZfQ0FQID0gMTQ7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgUGhwUmVkaXMgY29tcGF0aWJpbGl0eSBtb2RlIG9wdGlvbi4KICAgICAqCiAgICAgKiBFbmFibGVkIGJ5IGRlZmF1bHQuIERpc2FibGluZyB3aWxsIGNhdXNlIFJlbGF5IHRvOgogICAgICogMS4gUmV0dXJuIGBudWxsYCB3aGVuIGEga2V5IGRvZXNuJ3QgZXhpc3QsIGluc3RlYWQgb2YgYGZhbHNlYAogICAgICogMi4gVGhyb3cgZXhjZXB0aW9ucyB3aGVuIGFuIGVycm9yIG9jY3VycywgaW5zdGVhZCBvZiByZXR1cm5pbmcgYGZhbHNlYAogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfUEhQUkVESVNfQ09NUEFUSUJJTElUWSA9IDEwMDsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBzZXJpYWxpemVyIG9wdGlvbi4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX1NFUklBTElaRVIgPSAxOwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGNvbXByZXNzaW9uIG9wdGlvbi4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX0NPTVBSRVNTSU9OID0gNzsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBvcHRpb24uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9DT01QUkVTU0lPTl9MRVZFTCA9IDk7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgcmVwbHkgbGl0ZXJhbCBvcHRpb24uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9SRVBMWV9MSVRFUkFMID0gODsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBudWxsLW11bHRpLWJ1bGstYXMtbnVsbCBvcHRpb24uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9OVUxMX01VTFRJQlVMS19BU19OVUxMID0gMTA7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgdGhyb3ctb24tZXJyb3Igb3B0aW9uLgogICAgICoKICAgICAqIERpc2FibGVkIGJ5IGRlZmF1bHQuIFdoZW4gZW5hYmxlZCwgUmVsYXkgd2lsbCB0aHJvdyBleGNlcHRpb25zIHdoZW4gZXJyb3JzIG9jY3VyLgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfVEhST1dfT05fRVJST1IgPSAxMDU7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyBSZWxheeKAmXMgaW52YWxpZGF0aW9uIG9wdGlvbi4KICAgICAqCiAgICAgKiBFbmFibGVkIGJ5IGRlZmF1bHQuIFdoZW4gZGlzYWJsZWQgd2lsbCBwcmV2ZW50IFJlbGF5IGZyb20KICAgICAqIHBlcmZvcm1pbmcgaW5zdGFudGFuZW91cyBjbGllbnQtc2lkZSBpbnZhbGlkYXRpb24gd2hlbiBhIGtleQogICAgICogaXMgY2hhbmdlZCB3aXRob3V0IHdhaXRpbmcgZm9yIFJlZGlzIHRvIHNlbmQgYW4gYElOVkFMSURBVEVgCiAgICAgKiBtZXNzYWdlLiBUaGUgaW52YWxpZGF0aW9uIG9jY3VycyBvbmx5IGluIHRoZSBzYW1lIEZQTSBwb29sLgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfQ0xJRU5UX0lOVkFMSURBVElPTlMgPSAxMDE7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyBSZWxheeKAmXMgYWxsb3cgcGF0dGVybnMgb3B0aW9uLgogICAgICoKICAgICAqIFdoZW4gc2V0IG9ubHkga2V5cyBtYXRjaGluZyB0aGVzZSBwYXR0ZXJucyB3aWxsIGJlIGNhY2hlZCwKICAgICAqIHVubGVzcyB0aGV5IGFsc28gbWF0Y2ggYW4gYE9QVF9JR05PUkVfUEFUVEVSTlNgLgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfQUxMT1dfUEFUVEVSTlMgPSAxMDI7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyBSZWxheeKAmXMgaWdub3JlIHBhdHRlcm5zIG9wdGlvbi4KICAgICAqCiAgICAgKiBXaGVuIHNldCBrZXlzIG1hdGNoaW5nIHRoZXNlIHBhdHRlcm5zIHdpbGwgbm90IGJlIGNhY2hlZC4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX0lHTk9SRV9QQVRURVJOUyA9IDEwMzsKCiAgICAvKioKICAgICAqIFdoZXRoZXIgdXNlIGluLW1lbW9yeSBjYWNoaW5nLiBFbmFibGVkIGJ5IGRlZmF1bHQuCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9VU0VfQ0FDSEUgPSAxMDQ7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgc2NhbiBvcHRpb24uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9TQ0FOID0gNDsKCiAgICAvKioKICAgICAqIElzc3VlIG9uZSBgU0NBTmAgY29tbWFuZCBhdCBhIHRpbWUsIHNvbWV0aW1lcyByZXR1cm5pbmcgYW4gZW1wdHkgYXJyYXkgb2YgcmVzdWx0cy4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0NBTl9OT1JFVFJZID0gMDsKCiAgICAvKioKICAgICAqIFJldHJ5IHRoZSBgU0NBTmAgY29tbWFuZCB1bnRpbCBrZXlzIGNvbWUgYmFjaywgb3IgaXRlcmF0b3Igb2YgemVybyBpcyByZXR1cm5lZC4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0NBTl9SRVRSWSA9IDE7CgogICAgLyoqCiAgICAgKiBQcmVwZW5kIHRoZSBzZXQgcHJlZml4IHRvIGFueSBgTUFUQ0hgIHBhdHRlcm4uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNDQU5fUFJFRklYID0gMjsKCiAgICAvKioKICAgICAqIERvIG5vdCBwcmVwZW5kIHRoZSBzZXQgcHJlZml4IHRvIGFueSBgTUFUQ0hgIHBhdHRlcm4uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNDQU5fTk9QUkVGSVggPSAzOwoKICAgIC8qKgogICAgICogUmVkaXMgY29tbWFuZCBhcmd1bWVudC4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCRUZPUkUgPSAnQkVGT1JFJzsKCiAgICAvKioKICAgICAqIFJlZGlzIGNvbW1hbmQgYXJndW1lbnQuCiAgICAgKgogICAgICogQGludGVybmFsCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgY29uc3QgQUZURVIgPSAnQUZURVInOwoKICAgIC8qKgogICAgICogUmVkaXMgY29tbWFuZCBhcmd1bWVudC4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBMRUZUID0gJ0xFRlQnOwoKICAgIC8qKgogICAgICogUmVkaXMgY29tbWFuZCBhcmd1bWVudC4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSSUdIVCA9ICdSSUdIVCc7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyAia2V5IG5vdCBmb3VuZCIuCiAgICAgKgogICAgICogQHNlZSBSZWxheTo6dHlwZSgpCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVESVNfTk9UX0ZPVU5EID0gMDsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIFJlZGlzIGBzdHJpbmdgIHR5cGUuCiAgICAgKgogICAgICogQHNlZSBSZWxheTo6dHlwZSgpCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVESVNfU1RSSU5HID0gMTsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIFJlZGlzIGBzZXRgIHR5cGUuCiAgICAgKgogICAgICogQHNlZSBSZWxheTo6dHlwZSgpCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVESVNfU0VUID0gMjsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIFJlZGlzIGBsaXN0YCB0eXBlLgogICAgICoKICAgICAqIEBzZWUgUmVsYXk6OnR5cGUoKQogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFRElTX0xJU1QgPSAzOwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgUmVkaXMgYHpzZXRgIHR5cGUuCiAgICAgKgogICAgICogQHNlZSBSZWxheTo6dHlwZSgpCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVESVNfWlNFVCA9IDQ7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyBSZWRpcyBgaGFzaGAgdHlwZS4KICAgICAqCiAgICAgKiBAc2VlIFJlbGF5Ojp0eXBlKCkKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRURJU19IQVNIID0gNTsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIFJlZGlzIGBzdHJlYW1gIHR5cGUuCiAgICAgKgogICAgICogQHNlZSBSZWxheTo6dHlwZSgpCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVESVNfU1RSRUFNID0gNjsKCiAgICAvKioKICAgICAqIEVzdGFibGlzaGVzIGEgbmV3IGNvbm5lY3Rpb24gdG8gUmVkaXMsIG9yIHJlLXVzZXMgYWxyZWFkeSBvcGVuZWQgY29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xhcnJheXxudWxsICAkaG9zdAogICAgICogQHBhcmFtICBpbnQgICRwb3J0CiAgICAgKiBAcGFyYW0gIGZsb2F0ICAkY29ubmVjdF90aW1lb3V0CiAgICAgKiBAcGFyYW0gIGZsb2F0ICAkY29tbWFuZF90aW1lb3V0CiAgICAgKiBAcGFyYW0gIGFycmF5ICAkY29udGV4dAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFNlcnZlcl0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBzdHJpbmd8YXJyYXl8bnVsbCAkaG9zdCA9IG51bGwsCiAgICAgICAgaW50ICRwb3J0ID0gNjM3OSwKICAgICAgICBmbG9hdCAkY29ubmVjdF90aW1lb3V0ID0gMC4wLAogICAgICAgIGZsb2F0ICRjb21tYW5kX3RpbWVvdXQgPSAwLjAsCiAgICAgICAgI1tcU2Vuc2l0aXZlUGFyYW1ldGVyXSBhcnJheSAkY29udGV4dCA9IFtdLAogICAgICAgIGludCAkZGF0YWJhc2UgPSAwLAogICAgKSB7fQoKICAgIC8qKgogICAgICogRXN0YWJsaXNoZXMgYSBuZXcgY29ubmVjdGlvbiB0byBSZWRpcy4KICAgICAqIFdpbGwgdXNlIGBwY29ubmVjdCgpYCB1bmxlc3MgYHJlbGF5LmRlZmF1bHRfcGNvbm5lY3RgIGlzIGRpc2FibGVkLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkaG9zdAogICAgICogQHBhcmFtICBpbnQgICRwb3J0CiAgICAgKiBAcGFyYW0gIGZsb2F0ICAkdGltZW91dAogICAgICogQHBhcmFtICBzdHJpbmd8bnVsbCAgJHBlcnNpc3RlbnRfaWQKICAgICAqIEBwYXJhbSAgaW50ICAkcmV0cnlfaW50ZXJ2YWwKICAgICAqIEBwYXJhbSAgZmxvYXQgICRyZWFkX3RpbWVvdXQKICAgICAqIEBwYXJhbSAgYXJyYXkgICRjb250ZXh0CiAgICAgKiBAcGFyYW0gIGludCAgJGRhdGFiYXNlCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xTZXJ2ZXJdCiAgICBwdWJsaWMgZnVuY3Rpb24gY29ubmVjdCgKICAgICAgICBzdHJpbmcgJGhvc3QsCiAgICAgICAgaW50ICRwb3J0ID0gNjM3OSwKICAgICAgICBmbG9hdCAkdGltZW91dCA9IDAuMCwKICAgICAgICA/c3RyaW5nICRwZXJzaXN0ZW50X2lkID0gbnVsbCwKICAgICAgICBpbnQgJHJldHJ5X2ludGVydmFsID0gMCwKICAgICAgICBmbG9hdCAkcmVhZF90aW1lb3V0ID0gMC4wLAogICAgICAgICNbXFNlbnNpdGl2ZVBhcmFtZXRlcl0gYXJyYXkgJGNvbnRleHQgPSBbXSwKICAgICAgICBpbnQgJGRhdGFiYXNlID0gMAogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogRXN0YWJsaXNoZXMgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gdG8gUmVkaXMuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRob3N0CiAgICAgKiBAcGFyYW0gIGludCAgJHBvcnQKICAgICAqIEBwYXJhbSAgZmxvYXQgICR0aW1lb3V0CiAgICAgKiBAcGFyYW0gIHN0cmluZ3xudWxsICAkcGVyc2lzdGVudF9pZAogICAgICogQHBhcmFtICBpbnQgICRyZXRyeV9pbnRlcnZhbAogICAgICogQHBhcmFtICBmbG9hdCAgJHJlYWRfdGltZW91dAogICAgICogQHBhcmFtICBhcnJheSAgJGNvbnRleHQKICAgICAqIEBwYXJhbSAgaW50ICAkZGF0YWJhc2UKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFNlcnZlcl0KICAgIHB1YmxpYyBmdW5jdGlvbiBwY29ubmVjdCgKICAgICAgICBzdHJpbmcgJGhvc3QsCiAgICAgICAgaW50ICRwb3J0ID0gNjM3OSwKICAgICAgICBmbG9hdCAkdGltZW91dCA9IDAuMCwKICAgICAgICA/c3RyaW5nICRwZXJzaXN0ZW50X2lkID0gbnVsbCwKICAgICAgICBpbnQgJHJldHJ5X2ludGVydmFsID0gMCwKICAgICAgICBmbG9hdCAkcmVhZF90aW1lb3V0ID0gMC4wLAogICAgICAgICNbXFNlbnNpdGl2ZVBhcmFtZXRlcl0gYXJyYXkgJGNvbnRleHQgPSBbXSwKICAgICAgICBpbnQgJGRhdGFiYXNlID0gMAogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQ2xvc2VzIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24sIHVubGVzcyBpdCdzIHBlcnNpc3RlbnQuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQ2xvc2VzIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24sIGlmIGl0J3MgcGVyc2lzdGVudC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwY2xvc2UoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgbmV3IGV2ZW50IGxpc3RlbmVyLgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGUgICRjYWxsYmFjawogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdGVuKD9jYWxsYWJsZSAkY2FsbGJhY2spOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgYSBuZXcgYGZsdXNoZWRgIGV2ZW50IGxpc3RlbmVyLgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGUgICRjYWxsYmFjawogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gb25GbHVzaGVkKD9jYWxsYWJsZSAkY2FsbGJhY2spOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgYSBuZXcgYGludmFsaWRhdGVkYCBldmVudCBsaXN0ZW5lci4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICRwYXR0ZXJuCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBvbkludmFsaWRhdGVkKD9jYWxsYWJsZSAkY2FsbGJhY2ssID9zdHJpbmcgJHBhdHRlcm4gPSBudWxsKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogRGlzcGF0Y2hlcyBhbGwgcGVuZGluZyBldmVudHMuCiAgICAgKgogICAgICogQHJldHVybiBpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50cygpOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBjbGllbnQgb3B0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICAkb3B0aW9uCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0aW9uKGludCAkb3B0aW9uKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJldHVybnMgb3Igc2V0cyBhIGNsaWVudCBvcHRpb24uCiAgICAgKgogICAgICogQHBhcmFtICBpbnQgICRvcHRpb24KICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIG9wdGlvbihpbnQgJG9wdGlvbiwgbWl4ZWQgJHZhbHVlID0gbnVsbCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIGEgY2xpZW50IG9wdGlvbi4KICAgICAqCiAgICAgKiBSZWxheSBzcGVjaWZpYyBvcHRpb25zOgogICAgICoKICAgICAqIC0gYE9QVF9BTExPV19QQVRURVJOU2AKICAgICAqIC0gYE9QVF9JR05PUkVfUEFUVEVSTlNgCiAgICAgKiAtIGBPUFRfVEhST1dfT05fRVJST1JgCiAgICAgKiAtIGBPUFRfQ0xJRU5UX0lOVkFMSURBVElPTlNgCiAgICAgKiAtIGBPUFRfUEhQUkVESVNfQ09NUEFUSUJJTElUWWAKICAgICAqCiAgICAgKiBTdXBwb3J0ZWQgUGhwUmVkaXMgb3B0aW9uczoKICAgICAqCiAgICAgKiAtIGBPUFRfUFJFRklYYAogICAgICogLSBgT1BUX1JFQURfVElNRU9VVGAKICAgICAqIC0gYE9QVF9DT01QUkVTU0lPTmAKICAgICAqIC0gYE9QVF9DT01QUkVTU0lPTl9MRVZFTGAKICAgICAqIC0gYE9QVF9NQVhfUkVUUklFU2AKICAgICAqIC0gYE9QVF9CQUNLT0ZGX0FMR09SSVRITWAKICAgICAqIC0gYE9QVF9CQUNLT0ZGX0JBU0VgCiAgICAgKiAtIGBPUFRfQkFDS09GRl9DQVBgCiAgICAgKiAtIGBPUFRfU0NBTmAKICAgICAqIC0gYE9QVF9SRVBMWV9MSVRFUkFMYAogICAgICogLSBgT1BUX05VTExfTVVMVElCVUxLX0FTX05VTExgCiAgICAgKgogICAgICogQHBhcmFtICBpbnQgICRvcHRpb24KICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9uKGludCAkb3B0aW9uLCBtaXhlZCAkdmFsdWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIGlnbm9yZSBwYXR0ZXJuKHMpLiBNYXRjaGluZyBrZXlzIHdpbGwgbm90IGJlIGNhY2hlZCBpbiBtZW1vcnkuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRwYXR0ZXJuLC4uLgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRJZ25vcmVQYXR0ZXJucyhzdHJpbmcgLi4uJHBhdHRlcm4pOiBpbnQge30KCiAgICAvKioKICAgICAqIEFkZHMgYWxsb3cgcGF0dGVybihzKS4gT25seSBtYXRjaGluZyBrZXlzIHdpbGwgYmUgY2FjaGVkIGluIG1lbW9yeS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHBhdHRlcm4sLi4uCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIGFkZEFsbG93UGF0dGVybnMoc3RyaW5nIC4uLiRwYXR0ZXJuKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHRpbWVvdXQuCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpbWVvdXQoKTogZmxvYXR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEBzZWUgUmVsYXlcUmVsYXk6OmdldFRpbWVvdXQoKQogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiB0aW1lb3V0KCk6IGZsb2F0fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZWFkIHRpbWVvdXQuCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlYWRUaW1lb3V0KCk6IGZsb2F0fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFJlbGF5XFJlbGF5OjpnZXRSZWFkVGltZW91dCgpCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRUaW1lb3V0KCk6IGZsb2F0fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCBhbmQgcmVjZWl2ZWQgb3ZlciB0aGUgbmV0d29yayBkdXJpbmcgdGhlIFJlbGF5IG9iamVjdCdzCiAgICAgKiBsaWZldGltZSwgb3Igc2luY2UgdGhlIGxhc3QgdGltZSB7QGxpbmsgUmVsYXk6OmNsZWFyQnl0ZXMoKX0gd2FzIGNhbGxlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qnl0ZXMoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEBzZWUgUmVsYXlcUmVsYXk6OmdldEJ5dGVzKCkKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gYnl0ZXMoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGhvc3Qgb3IgdW5peCBzb2NrZXQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIb3N0KCk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogV2hldGhlciBSZWxheSBpcyBjb25uZWN0ZWQgdG8gUmVkaXMuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNDb25uZWN0ZWQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcG9ydC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvcnQoKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi4KICAgICAqIEluIFBocFJlZGlzIGNvbXBhdGliaWxpdHkgbW9kZSB0aGlzIG1ldGhvZCByZXR1cm5zIGFueSBjb25maWd1cmVkIHBhc3N3b3JkIGluIHBsYWluLXRleHQuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGgoKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBEQgogICAgICoKICAgICAqIEByZXR1cm4gaW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGJOdW0oKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNlcmlhbGl6ZWQgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gX3NlcmlhbGl6ZShtaXhlZCAkdmFsdWUpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdW5zZXJpYWxpemVkIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIF91bnNlcmlhbGl6ZShtaXhlZCAkdmFsdWUpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogQ29tcHJlc3MgZGF0YSB3aXRoIFJlbGF5J3MgY3VycmVudGx5IGNvbmZpZ3VyZWQgY29tcHJlc3Npb24gYWxnb3JpdGhtLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkdmFsdWUKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gX2NvbXByZXNzKHN0cmluZyAkdmFsdWUpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIFVuY29tcHJlc3MgZGF0YSB3aXRoIFJlbGF5J3MgY3VycmVudGx5IGNvbmZpZ3VyZWQgY29tcHJlc3Npb24gYWxnb3JpdGhtLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkdmFsdWUKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gX3VuY29tcHJlc3Moc3RyaW5nICR2YWx1ZSk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2VyaWFsaXplZCBhbmQgY29tcHJlc3NlZCB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gX3BhY2sobWl4ZWQgJHZhbHVlKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB1bnNlcmlhbGl6ZWQgYW5kIGRlY29tcHJlc3NlZCB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBfdW5wYWNrKG1peGVkICR2YWx1ZSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB3aXRoIHRoZSBwcmVmaXguCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIF9wcmVmaXgobWl4ZWQgJHZhbHVlKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsYXN0IGVycm9yIG1lc3NhZ2UsIGlmIGFueS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdEVycm9yKCk6IHN0cmluZ3xudWxsIHt9CgogICAgLyoqCiAgICAgKiBDbGVhcnMgdGhlIGxhc3QgZXJyb3IgdGhhdCBpcyBzZXQsIGlmIGFueS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhckxhc3RFcnJvcigpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uJ3MgZW5kcG9pbnQgaWRlbnRpZmllci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIGVuZHBvaW50SWQoKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFJlbGF5XFJlbGF5OjplbmRwb2ludElkKCkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGVyc2lzdGVudElEKCk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHVuaXF1ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgY29ubmVjdGlvbiBpZGVudGlmaWVyLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gc29ja2V0SWQoKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHN0YXRpc3RpY3MgYWJvdXQgUmVsYXkuCiAgICAgKgogICAgICogLSBgdXNhZ2UudG90YWxfcmVxdWVzdHNgOiBUaGUgdG90YWwgbnVtYmVyIG9mIHJlcXVlc3RzIHdlJ3ZlIHNlZW4KICAgICAqIC0gYHVzYWdlLmFjdGl2ZV9yZXF1ZXN0c2A6IFRoZSBudW1iZXIgb2YgcmVxdWVzdHMgY3VycmVudGx5IGluLWZsaWdodAogICAgICogLSBgdXNhZ2UubWF4X2FjdGl2ZV9yZXF1ZXN0c2A6IFRoZSBtb3N0IGNvbmN1cnJlbnQgaW4tZmxpZ2h0IHJlcXVlc3RzIHdlJ3ZlIHNlZW4KICAgICAqIC0gYHVzYWdlLmZyZWVfZXBvY2hfcmVjb3Jkc2A6IFRoZSBlc3RpbWF0ZWQgbnVtYmVyIG9mIGZyZWUgZXBvY2ggcmVjbGFtYXRpb24gcmVjb3JkcwogICAgICoKICAgICAqIC0gYHN0YXRzLnJlcXVlc3RzYDogVGhlIHRvdGFsIG51bWJlciBvZiByZXF1ZXN0cyB0aGUgY2FjaGUgaGFzIHJlY2VpdmVkCiAgICAgKiAtIGBzdGF0cy5taXNzZXNgOiBSZXF1ZXN0cyB3aGVyZSB3ZSBoYWQgdG8gYXNrIFJlZGlzIGZvciBhIHZhbHVlCiAgICAgKiAtIGBzdGF0cy5oaXRzYDogUmVxdWVzdHMgd2hlcmUgd2UgZGlkIG5vdCBoYXZlIHRvIGFzayByZWRpcyBmb3IgdGhlIHZhbHVlCiAgICAgKiAtIGBzdGF0cy5kaXJ0eV9za2lwc2A6IFRoZSBudW1iZXIgb2YgdGltZXMgUmVsYXkgaGFzIHNraXBwZWQgYW4gZW50aXJlIGRhdGFiYXNlIGJlY2F1c2UgaXQgd2FzIGRpcnR5LgogICAgICogLSBgc3RhdHMuZXJyb3JzYDogSG93IG1hbnkgdGltZXMgYSAnc2V2ZXJlJyBlcnJvciBvY2N1cnMgKHByZXNlbnRseSB0aGlzIGlzIG9ubHkgaW5jcmVtZW50ZWQgaWYgd2UgZ2V0IGEgYG51bGxgIHJlc3BvbnNlIGZyb20gaGlyZWRpcykKICAgICAqIC0gYHN0YXRzLmVtcHR5YDogSG93IG1hbnkgdGltZXMgd2UndmUgcnVuIG91dCBvZiBmcmVlIHJlcXVlc3RzIChpbmRpY2F0aW5nIHRoZSBzaXplIG9mIHRoZSByaW5nIGJ1ZmZlcnMgc2hvdWxkIGJlIGluY3JlYXNlZCkKICAgICAqIC0gYHN0YXRzLm9vbWA6IFRoZSBudW1iZXIgb2YgdGltZXMgd2UndmUgcnVuIG91dCBvZiBtZW1vcnkKICAgICAqIC0gYHN0YXRzLm9wc19wZXJfc2VjYDogVGhlIG51bWJlciBvZiBjb21tYW5kcyBwcm9jZXNzZWQgcGVyIHNlY29uZAogICAgICogLSBgc3RhdHMuYnl0ZXNfc2VudGA6IFRoZSBudW1iZXIgb2YgYnl0ZXMgUmVsYXkgaGFzIHdyaXR0ZW4gdG8gdGhlIG5ldHdvcmsKICAgICAqIC0gYHN0YXRzLmJ5dGVzX3JlY2VpdmVkYDogVGhlIG51bWJlciBvZiBieXRlcyBSZWxheSBoYXMgcmVhZCBmcm9tIHRoZSBuZXR3b3JrCiAgICAgKiAtIGBzdGF0cy5jb21tYW5kX3VzZWNgOiBEZXByZWNhdGVkCiAgICAgKiAtIGBzdGF0cy5yaW5pdF91c2VjYDogVGhlIG51bWJlciBvZiBtaWNyb3NlY29uZHMgUmVsYXkgaGFzIHNwZW50IGluIHJlcXVlc3QgaW5pdGlhbGl6YXRpb24KICAgICAqIC0gYHN0YXRzLnJzaHV0ZG93bl91c2VjYDogVGhlIG51bWJlciBvZiBtaWNyb3NlY29uZHMgUmVsYXkgaGFzIHNwZW50IGluIHJlcXVlc3Qgc2h1dGRvd24KICAgICAqIC0gYHN0YXRzLnNpZ2lvX3VzZWNgOiBUaGUgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyBSZWxheSBoYXMgc3BlbnQgaW4gaXRzIFNJR0lPIGhhbmRsZXIKICAgICAqCiAgICAgKiAtIGBtZW1vcnkudG90YWxgOiBUaGUgdG90YWwgYnl0ZXMgb2YgYWxsb2NhdGVkIG1lbW9yeQogICAgICogLSBgbWVtb3J5LmxpbWl0YDogVGhlIGNhcHBlZCBudW1iZXIgb2YgYnl0ZXMgUmVsYXkgaGFzIGF2YWlsYWJsZSB0byB1c2UKICAgICAqIC0gYG1lbW9yeS5hY3RpdmVgOiBUaGUgdG90YWwgYW1vdW50IG9mIG1lbW9yeSBtYXBwZWQgaW50byB0aGUgYWxsb2NhdG9yCiAgICAgKiAtIGBtZW1vcnkudXNlZGA6IFRoZSBhbW91bnQgb2YgbWVtb3J5IHBvaW50aW5nIHRvIGxpdmUgb2JqZWN0cyBpbmNsdWRpbmcgbWV0YWRhdGEKICAgICAqCiAgICAgKiAtIGBlbmRwb2ludHMuKi5yZWRpc2A6IEluZm9ybWF0aW9uIGFib3V0IHRoZSBjb25uZWN0ZWQgUmVkaXMgc2VydmVyLgogICAgICogLSBgZW5kcG9pbnRzLiouY29ubmVjdGlvbnMuKi5rZXlzYDogVGhlIHRvdGFsIG51bWJlciBvZiBjYWNoZWQga2V5cyBmb3IgdGhlIGNvbm5lY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdGF0cygpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCwgb3IgYDBgIGluIGNsaWVudC1vbmx5IG1vZGUuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF4TWVtb3J5KCk6IGludCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCwgb3IgYDBgIGluIGNsaWVudC1vbmx5IG1vZGUuCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQgMC41LjAgVXNlIGBSZWxheTptYXhNZW1vcnkoKWAKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtZW1vcnkoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIGFueSBjb21tYW5kIGFnYWluc3QgUmVkaXMsIHdpdGhvdXQgYXBwbHlpbmcKICAgICAqIHRoZSBwcmVmaXgsIGNvbXByZXNzaW9uIGFuZCBzZXJpYWxpemF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkY21kCiAgICAgKiBAcGFyYW0gIG1peGVkICAkYXJncywuLi4KICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiByYXdDb21tYW5kKHN0cmluZyAkY21kLCBtaXhlZCAuLi4kYXJncyk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBTZWxlY3QgdGhlIFJlZGlzIGxvZ2ljYWwgZGF0YWJhc2UgaGF2aW5nIHRoZSBzcGVjaWZpZWQgemVyby1iYXNlZCBudW1lcmljIGluZGV4LgogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICAkZGIKICAgICAqIEByZXR1cm4gUmVsYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZWxlY3QoaW50ICRkYik6IFJlbGF5fGJvb2wge30KCiAgICAvKioKICAgICAqIEF1dGhlbnRpY2F0ZSB0aGUgY29ubmVjdGlvbiB1c2luZyBhIHBhc3N3b3JkIG9yIGFuIEFDTCB1c2VybmFtZSBhbmQgcGFzc3dvcmQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGF1dGgKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBhdXRoKCNbXFNlbnNpdGl2ZVBhcmFtZXRlcl0gbWl4ZWQgJGF1dGgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBUaGUgSU5GTyBjb21tYW5kIHJldHVybnMgaW5mb3JtYXRpb24gYW5kIHN0YXRpc3RpY3MgYWJvdXQgUmVkaXMgaW4gYSBmb3JtYXQKICAgICAqIHRoYXQgaXMgc2ltcGxlIHRvIHBhcnNlIGJ5IGNvbXB1dGVycyBhbmQgZWFzeSB0byByZWFkIGJ5IGh1bWFucy4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaW5mbwogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc2VjdGlvbnMsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGluZm8oc3RyaW5nIC4uLiRzZWN0aW9ucyk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBEZWxldGVzIGFsbCB0aGUga2V5cyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGFiYXNlLgogICAgICoKICAgICAqIEBwYXJhbSAgYm9vbHxudWxsICAkc3luYwogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGZsdXNoZGIoP2Jvb2wgJHN5bmMgPSBudWxsKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogRGVsZXRlcyBhbGwgdGhlIGtleXMgb2YgYWxsIHRoZSBleGlzdGluZyBkYXRhYmFzZXMsIG5vdCBqdXN0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb25lLgogICAgICoKICAgICAqIEBwYXJhbSAgYm9vbHxudWxsICAkc3luYwogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGZsdXNoYWxsKD9ib29sICRzeW5jID0gbnVsbCk6IFJlbGF5fGJvb2wge30KCiAgICAvKioKICAgICAqIEludm9rZXMgYSBSZWRpcyBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG5hbWUKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrZXlzCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkYXJndgogICAgICogQHBhcmFtICBjYWxsYWJsZSAgJGhhbmRsZXIKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZmNhbGwoc3RyaW5nICRuYW1lLCBhcnJheSAka2V5cyA9IFtdLCBhcnJheSAkYXJndiA9IFtdLCBjYWxsYWJsZSAkaGFuZGxlciA9IG51bGwpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogSW52b2tlcyBhIHJlYWQtb25seSBSZWRpcyBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG5hbWUKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrZXlzCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkYXJndgogICAgICogQHBhcmFtICBjYWxsYWJsZSAgJGhhbmRsZXIKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZmNhbGxfcm8oc3RyaW5nICRuYW1lLCBhcnJheSAka2V5cyA9IFtdLCBhcnJheSAkYXJndiA9IFtdLCBjYWxsYWJsZSAkaGFuZGxlciA9IG51bGwpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogQ2FsbHMgYEZVTkNUSU9OYCBzdWItY29tbWFuZC4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG9wCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGFyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGZ1bmN0aW9uKHN0cmluZyAkb3AsIHN0cmluZyAuLi4kYXJncyk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBGbHVzaGVzIFJlbGF5J3MgaW4tbWVtb3J5IGNhY2hlIG9mIGFsbCBkYXRhYmFzZXMuCiAgICAgKiBXaGVuIGdpdmVuIGFuIGVuZHBvaW50LCBvbmx5IHRoYXQgY29ubmVjdGlvbiB3aWxsIGJlIGZsdXNoZWQuCiAgICAgKiBXaGVuIGdpdmVuIGFuIGVuZHBvaW50IGFuZCBkYXRhYmFzZSBpbmRleCwgb25seSB0aGF0IGRhdGFiYXNlCiAgICAgKiBmb3IgdGhhdCBjb25uZWN0aW9uIHdpbGwgYmUgZmx1c2hlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xudWxsICAkZW5kcG9pbnRJZAogICAgICogQHBhcmFtICBpbnR8bnVsbCAgJGRiCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmx1c2hNZW1vcnkoP3N0cmluZyAkZW5kcG9pbnRJZCA9IG51bGwsIGludCAkZGIgPSBudWxsKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGtleXMgaW4gdGhlIGN1cnJlbnRseS1zZWxlY3RlZCBkYXRhYmFzZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBkYnNpemUoKTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTZXJpYWxpemUgYW5kIHJldHVybiB0aGUgdmFsdWUgc3RvcmVkIGF0IGtleSBpbiBhIFJlZGlzLXNwZWNpZmljIGZvcm1hdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcmV0dXJuIFJlbGF5fHN0cmluZ3xmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBkdW1wKG1peGVkICRrZXkpOiBSZWxheXxzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEF0dGFjaCBvciBkZXRhY2ggdGhlIGluc3RhbmNlIGFzIGEgcmVwbGljYSBvZiBhbm90aGVyIGluc3RhbmNlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICRob3N0CiAgICAgKiBAcGFyYW0gIGludCAgJHBvcnQKICAgICAqIEByZXR1cm4gUmVsYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsaWNhb2YoP3N0cmluZyAkaG9zdCA9IG51bGwsICRwb3J0ID0gMCk6IFJlbGF5fGJvb2wge30KCiAgICAvKioKICAgICAqIFBhdXNlIHRoZSBjbGllbnQgdW50aWwgc3VmZmljaWVudCBsb2NhbCBhbmQvb3IgcmVtb3RlIEFPRiBkYXRhIGhhcyBiZWVuIGZsdXNoZWQgdG8gZGlzay4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAgJG51bWxvY2FsCiAgICAgKiBAcGFyYW0gIGludCAgJG51bXJlbW90ZQogICAgICogQHJldHVybiBSZWxheXxhcnJheQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB3YWl0YW9mKGludCAkbnVtbG9jYWwsIGludCAkbnVtcmVtb3RlLCBpbnQgJHRpbWVvdXQpOiBSZWxheXxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEga2V5IGFzc29jaWF0ZWQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgb2J0YWluZWQgYnkgZGVzZXJpYWxpemluZyB0aGUgcHJvdmlkZWQgc2VyaWFsaXplZCB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJHR0bAogICAgICogQHBhcmFtICBzdHJpbmcgICR2YWx1ZQogICAgICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gUmVsYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXN0b3JlKG1peGVkICRrZXksIGludCAkdHRsLCBzdHJpbmcgJHZhbHVlLCA/YXJyYXkgJG9wdGlvbnMgPSBudWxsKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogQXRvbWljYWxseSB0cmFuc2ZlciBhIGtleSBmcm9tIGEgUmVkaXMgaW5zdGFuY2UgdG8gYW5vdGhlciBvbmUuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRob3N0CiAgICAgKiBAcGFyYW0gIGludCAgJHBvcnQKICAgICAqIEBwYXJhbSAgc3RyaW5nfGFycmF5ICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJGRzdGRiCiAgICAgKiBAcGFyYW0gIGludCAgJHRpbWVvdXQKICAgICAqIEBwYXJhbSAgYm9vbCAgJGNvcHkKICAgICAqIEBwYXJhbSAgYm9vbCAgJHJlcGxhY2UKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRjcmVkZW50aWFscwogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIG1pZ3JhdGUoCiAgICAgICAgc3RyaW5nICRob3N0LAogICAgICAgIGludCAkcG9ydCwKICAgICAgICBzdHJpbmd8YXJyYXkgJGtleSwKICAgICAgICBpbnQgJGRzdGRiLAogICAgICAgIGludCAkdGltZW91dCwKICAgICAgICBib29sICRjb3B5ID0gZmFsc2UsCiAgICAgICAgYm9vbCAkcmVwbGFjZSA9IGZhbHNlLAogICAgICAgICNbXFNlbnNpdGl2ZVBhcmFtZXRlcl0gbWl4ZWQgJGNyZWRlbnRpYWxzID0gbnVsbAogICAgKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogVGhpcyBjb21tYW5kIGNvcGllcyB0aGUgdmFsdWUgc3RvcmVkIGF0IHRoZSBzb3VyY2Uga2V5IHRvIHRoZSBkZXN0aW5hdGlvbiBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJHNyYwogICAgICogQHBhcmFtICBtaXhlZCAgJGRzdAogICAgICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGNvcHkobWl4ZWQgJHNyYywgbWl4ZWQgJGRzdCwgP2FycmF5ICRvcHRpb25zID0gbnVsbCk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQXNrcyBSZWRpcyB0byBlY2hvIGJhY2sgdGhlIHByb3ZpZGVkIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGFyZwogICAgICogQHJldHVybiBSZWxheXxib29sfHN0cmluZwogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBlY2hvKHN0cmluZyAkYXJnKTogUmVsYXl8Ym9vbHxzdHJpbmcge30KCiAgICAvKioKICAgICAqIFJldHVybnMgUE9ORyBpZiBubyBhcmd1bWVudCBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIHJldHVybiBhIGNvcHkgb2YgdGhlIGFyZ3VtZW50IGFzIGEgYnVsay4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGFyZwogICAgICogQHJldHVybiBSZWxheXxib29sfHN0cmluZwogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwaW5nKHN0cmluZyAkYXJnID0gbnVsbCk6IFJlbGF5fGJvb2x8c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWlsbGlzZW9jb25kcyBzaW5jZSBSZWxheSBoYXMgc2VlbiBhY3Rpdml0eSBmcm9tIHRoZSBzZXJ2ZXIuCiAgICAgKgogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBpZGxlVGltZSgpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYSByYW5kb20ga2V5IGZyb20gUmVkaXMuCiAgICAgKgogICAgICogQHJldHVybiBSZWxheXxzdHJpbmd8bnVsbHxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHJhbmRvbWtleSgpOiBSZWxheXxzdHJpbmd8bnVsbHxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRpbWUgZnJvbSBSZWRpcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHRpbWUoKTogUmVsYXl8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEFzeW5jaHJvbm91c2x5IHJld3JpdGUgdGhlIGFwcGVuZC1vbmx5IGZpbGUuCiAgICAgKgogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJncmV3cml0ZWFvZigpOiBSZWxheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBVTklYIHRpbWUgc3RhbXAgb2YgdGhlIGxhc3Qgc3VjY2Vzc2Z1bCBzYXZlIHRvIGRpc2suCiAgICAgKgogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbGFzdHNhdmUoKTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGxvbmdlc3QgY29tbW9uIHN1YnNlcXVlbmNlIGJldHdlZW4gdHdvIHN0cmluZyBrZXlzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkxCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5MgogICAgICogQHBhcmFtICBhcnJheXxudWxsICAkb3B0aW9ucwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBsY3MobWl4ZWQgJGtleTEsIG1peGVkICRrZXkyLCA/YXJyYXkgJG9wdGlvbnMgPSBudWxsKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEFzeW5jaHJvbm91c2x5IHNhdmUgdGhlIGRhdGFzZXQgdG8gZGlzay4KICAgICAqCiAgICAgKiBAcGFyYW0gIGJvb2wgICRzY2hlZHVsZQogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJnc2F2ZShib29sICRzY2hlZHVsZSA9IGZhbHNlKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogU3luY2hyb25vdXNseSBzYXZlIHRoZSBkYXRhc2V0IHRvIGRpc2suCiAgICAgKgogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcm9sZSBvZiB0aGUgaW5zdGFuY2UgaW4gdGhlIGNvbnRleHQgb2YgcmVwbGljYXRpb24uCiAgICAgKgogICAgICogQHJldHVybiBSZWxheXxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiByb2xlKCk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZW1haW5pbmcgdGltZSB0byBsaXZlIG9mIGEga2V5IHRoYXQgaGFzIGEgdGltZW91dCBpbiBzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gUmVsYXl8aW50CiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHR0bChtaXhlZCAka2V5KTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZW1haW5pbmcgdGltZSB0byBsaXZlIG9mIGEga2V5IHRoYXQgaGFzIGEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHJldHVybiBSZWxheXxpbnQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcHR0bChtaXhlZCAka2V5KTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGlmIGtleShzKSBleGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleXMsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGJvb2x8aW50CiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhpc3RzKG1peGVkIC4uLiRrZXlzKTogUmVsYXl8Ym9vbHxpbnQge30KCiAgICAvKioKICAgICAqIEV2YWx1YXRlIHNjcmlwdCB1c2luZyB0aGUgTHVhIGludGVycHJldGVyLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9ldmFsCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJHNjcmlwdAogICAgICogQHBhcmFtICBhcnJheSAgJGFyZ3MKICAgICAqIEBwYXJhbSAgaW50ICAkbnVtX2tleXMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZXZhbChtaXhlZCAkc2NyaXB0LCBhcnJheSAkYXJncyA9IFtdLCBpbnQgJG51bV9rZXlzID0gMCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBFdmFsdWF0ZSBzY3JpcHQgdXNpbmcgdGhlIEx1YSBpbnRlcnByZXRlci4gIFRoaXMgaXMganVzdCB0aGUgInJlYWQtb25seSIgdmFyaWFudCBvZiBFVkFMCiAgICAgKiBtZWFuaW5nIGl0IGNhbiBiZSBydW4gb24gcmVhZC1vbmx5IHJlcGxpY2FzLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9yZWRpcy5pby9jb21tYW5kcy9ldmFsX3JvCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJHNjcmlwdAogICAgICogQHBhcmFtICBhcnJheSAgJGFyZ3MKICAgICAqIEBwYXJhbSAgaW50ICAkbnVtX2tleXMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZXZhbF9ybyhtaXhlZCAkc2NyaXB0LCBhcnJheSAkYXJncyA9IFtdLCBpbnQgJG51bV9rZXlzID0gMCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBFdmFsdWF0ZXMgYSBzY3JpcHQgY2FjaGVkIG9uIHRoZSBzZXJ2ZXItc2lkZSBieSBpdHMgU0hBMSBkaWdlc3QuCiAgICAgKgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc2hhCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkYXJncwogICAgICogQHBhcmFtICBpbnQgICRudW1fa2V5cwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBldmFsc2hhKHN0cmluZyAkc2hhLCBhcnJheSAkYXJncyA9IFtdLCBpbnQgJG51bV9rZXlzID0gMCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBFdmFsdWF0ZXMgYSBzY3JpcHQgY2FjaGVkIG9uIHRoZSBzZXJ2ZXItc2lkZSBieSBpdHMgU0hBMSBkaWdlc3QuICBUaGlzIGlzIGp1c3QgdGhlICJyZWFkLW9ubHkiIHZhcmlhbnQKICAgICAqIG9mIGBFVkFMU0hBYCBtZWFuaW5nIGl0IGNhbiBiZSBydW4gb24gcmVhZC1vbmx5IHJlcGxpY2FzLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc2hhCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkYXJncwogICAgICogQHBhcmFtICBpbnQgICRudW1fa2V5cwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBldmFsc2hhX3JvKHN0cmluZyAkc2hhLCBhcnJheSAkYXJncyA9IFtdLCBpbnQgJG51bV9rZXlzID0gMCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyBgQ0xJRU5UYCBjb21tYW5kIG9wZXJhdGlvbnMuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRvcGVyYXRpb24KICAgICAqIEBwYXJhbSAgbWl4ZWQgICRhcmdzLC4uLgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGllbnQoc3RyaW5nICRvcGVyYXRpb24sIG1peGVkIC4uLiRhcmdzKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEFkZCBvbmUgb3IgbW9yZSBtZW1iZXJzIHRvIGEgZ2Vvc3BhY2lhbCBzb3J0ZWQgc2V0CiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgZmxvYXQgICRsbmcKICAgICAqIEBwYXJhbSAgZmxvYXQgICRsYXQKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWVtYmVyCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3RoZXJfdHJpcGxlc19hbmRfb3B0aW9ucywuLi4KICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGdlb2FkZCgKICAgICAgICBzdHJpbmcgJGtleSwKICAgICAgICBmbG9hdCAkbG5nLAogICAgICAgIGZsb2F0ICRsYXQsCiAgICAgICAgc3RyaW5nICRtZW1iZXIsCiAgICAgICAgbWl4ZWQgLi4uJG90aGVyX3RyaXBsZXNfYW5kX29wdGlvbnMKICAgICk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHR3byBtZW1iZXJzIG9mIGEgZ2Vvc3BhY2lhbGx5IGVuY29kZWQgc29ydGVkIHNldC4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgICRzcmMKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZHN0CiAgICAgKiBAcGFyYW0gIHN0cmluZ3xudWxsICAkdW5pdAogICAgICogQHJldHVybiBSZWxheXxmbG9hdHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW9kaXN0KHN0cmluZyAka2V5LCBzdHJpbmcgJHNyYywgc3RyaW5nICRkc3QsID9zdHJpbmcgJHVuaXQgPSBudWxsKTogUmVsYXl8ZmxvYXR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIG9uZSBvciBtb3JlIEdlb0hhc2ggZW5jb2RlZCBzdHJpbmdzIGZvciBtZW1iZXJzIG9mIHRoZSBzZXQuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWVtYmVyCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG90aGVyX21lbWJlcnMsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGdlb2hhc2goc3RyaW5nICRrZXksIHN0cmluZyAkbWVtYmVyLCBzdHJpbmcgLi4uJG90aGVyX21lbWJlcnMpOiBSZWxheXxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgbWVtYmVycyBvZiBhIGdlb3NwYWNpYWxseSBzb3J0ZWQgc2V0IHRoYXQgYXJlIHdpdGhpbiBhIGNlcnRhaW4gcmFkaXVzIG9mIGEgbG9jYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgZmxvYXQgICRsbmcKICAgICAqIEBwYXJhbSAgZmxvYXQgICRsYXQKICAgICAqIEBwYXJhbSAgZmxvYXQgICRyYWRpdXMKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkdW5pdAogICAgICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VvcmFkaXVzKHN0cmluZyAka2V5LCBmbG9hdCAkbG5nLCBmbG9hdCAkbGF0LCBmbG9hdCAkcmFkaXVzLCBzdHJpbmcgJHVuaXQsIGFycmF5ICRvcHRpb25zID0gW10pOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogU2ltaWxhciB0byBgR0VPUkFESVVTYCBleGNlcHQgaXQgdXNlcyBhIG1lbWJlciBhcyB0aGUgY2VudGVyIG9mIHRoZSBxdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgICRtZW1iZXIKICAgICAqIEBwYXJhbSAgZmxvYXQgICRyYWRpdXMKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkdW5pdAogICAgICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VvcmFkaXVzYnltZW1iZXIoc3RyaW5nICRrZXksIHN0cmluZyAkbWVtYmVyLCBmbG9hdCAkcmFkaXVzLCBzdHJpbmcgJHVuaXQsIGFycmF5ICRvcHRpb25zID0gW10pOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogU2ltaWxhciB0byBgR0VPUkFESVVTYCBleGNlcHQgaXQgdXNlcyBhIG1lbWJlciBhcyB0aGUgY2VudGVyIG9mIHRoZSBxdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgICRtZW1iZXIKICAgICAqIEBwYXJhbSAgZmxvYXQgICRyYWRpdXMKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkdW5pdAogICAgICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VvcmFkaXVzYnltZW1iZXJfcm8oc3RyaW5nICRrZXksIHN0cmluZyAkbWVtYmVyLCBmbG9hdCAkcmFkaXVzLCBzdHJpbmcgJHVuaXQsIGFycmF5ICRvcHRpb25zID0gW10pOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgbWVtYmVycyBvZiBhIGdlb3NwYWNpYWxseSBzb3J0ZWQgc2V0IHRoYXQgYXJlIHdpdGhpbiBhIGNlcnRhaW4gcmFkaXVzIG9mIGEgbG9jYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgZmxvYXQgICRsbmcKICAgICAqIEBwYXJhbSAgZmxvYXQgICRsYXQKICAgICAqIEBwYXJhbSAgZmxvYXQgICRyYWRpdXMKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkdW5pdAogICAgICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VvcmFkaXVzX3JvKHN0cmluZyAka2V5LCBmbG9hdCAkbG5nLCBmbG9hdCAkbGF0LCBmbG9hdCAkcmFkaXVzLCBzdHJpbmcgJHVuaXQsIGFycmF5ICRvcHRpb25zID0gW10pOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogU2VhcmNoIGEgZ2Vvc3BhY2lhbCBzb3J0ZWQgc2V0IGZvciBtZW1iZXJzIGluIHZhcmlvdXMgd2F5cy4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBhcnJheXxzdHJpbmcgICRwb3NpdGlvbgogICAgICogQHBhcmFtICBhcnJheXxpbnR8ZmxvYXQgICRzaGFwZQogICAgICogQHBhcmFtICBzdHJpbmcgICR1bml0CiAgICAgKiBAcGFyYW0gIGFycmF5ICAkb3B0aW9ucwogICAgICogQHJldHVybiBSZWxheXxhcnJheQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW9zZWFyY2goCiAgICAgICAgc3RyaW5nICRrZXksCiAgICAgICAgYXJyYXl8c3RyaW5nICRwb3NpdGlvbiwKICAgICAgICBhcnJheXxpbnR8ZmxvYXQgJHNoYXBlLAogICAgICAgIHN0cmluZyAkdW5pdCwKICAgICAgICBhcnJheSAkb3B0aW9ucyA9IFtdCiAgICApOiBSZWxheXxhcnJheSB7fQoKICAgIC8qKgogICAgICogU2VhcmNoIGEgZ2Vvc3BhY2lhbCBzb3J0ZWQgc2V0IGZvciBtZW1iZXJzIHdpdGhpbiBhIGdpdmVuIGFyZWEgb3IgcmFuZ2UsIHN0b3JpbmcgdGhlIHJlc3VsdHMgaW50bwogICAgICogYSBuZXcgc2V0LgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZHN0CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHNyYwogICAgICogQHBhcmFtICBhcnJheXxzdHJpbmcgICRwb3NpdGlvbgogICAgICogQHBhcmFtICBhcnJheXxpbnR8ZmxvYXQgICRzaGFwZQogICAgICogQHBhcmFtICBzdHJpbmcgICR1bml0CiAgICAgKiBAcGFyYW0gIGFycmF5ICAkb3B0aW9ucwogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2Vvc2VhcmNoc3RvcmUoCiAgICAgICAgc3RyaW5nICRkc3QsCiAgICAgICAgc3RyaW5nICRzcmMsCiAgICAgICAgYXJyYXl8c3RyaW5nICRwb3NpdGlvbiwKICAgICAgICBhcnJheXxpbnR8ZmxvYXQgJHNoYXBlLAogICAgICAgIHN0cmluZyAkdW5pdCwKICAgICAgICBhcnJheSAkb3B0aW9ucyA9IFtdCiAgICApOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgdmFsdWUgb2Yga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQobWl4ZWQgJGtleSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBBdG9taWNhbGx5IHNldHMga2V5IHRvIHZhbHVlIGFuZCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0c2V0KG1peGVkICRrZXksIG1peGVkICR2YWx1ZSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzdWJzdHJpbmcgb2YgdGhlIHN0cmluZyB2YWx1ZSBzdG9yZWQgYXQga2V5LAogICAgICogZGV0ZXJtaW5lZCBieSB0aGUgb2Zmc2V0cyBzdGFydCBhbmQgZW5kIChib3RoIGFyZSBpbmNsdXNpdmUpLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkc3RhcnQKICAgICAqIEBwYXJhbSAgaW50ICAkZW5kCiAgICAgKiBAcmV0dXJuIFJlbGF5fHN0cmluZ3xmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIGdldHJhbmdlKG1peGVkICRrZXksIGludCAkc3RhcnQsIGludCAkZW5kKTogUmVsYXl8c3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBPdmVyd3JpdGVzIHBhcnQgb2YgdGhlIHN0cmluZyBzdG9yZWQgYXQga2V5LCBzdGFydGluZyBhdAogICAgICogdGhlIHNwZWNpZmllZCBvZmZzZXQsIGZvciB0aGUgZW50aXJlIGxlbmd0aCBvZiB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNldHJhbmdlKG1peGVkICRrZXksIGludCAkc3RhcnQsIG1peGVkICR2YWx1ZSk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYml0IHZhbHVlIGF0IG9mZnNldCBpbiB0aGUgc3RyaW5nIHZhbHVlIHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRwb3MKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Yml0KG1peGVkICRrZXksIGludCAkcG9zKTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIHNldCBiaXRzIChwb3B1bGF0aW9uIGNvdW50aW5nKSBpbiBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gIGludCAgJGVuZAogICAgICogQHBhcmFtICBib29sICAkYnlfYml0CiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIGJpdGNvdW50KG1peGVkICRrZXksIGludCAkc3RhcnQgPSAwLCBpbnQgJGVuZCA9IC0xLCBib29sICRieV9iaXQgPSBmYWxzZSk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybSB2YXJpb3VzIGJpdGZpZWxkIG9wZXJhdGlvbnMgb24gYSBzdHJpbmcga2V5LCBzdWNoIGFzIGdldHRpbmcvc2V0dGluZyBiaXQgcmFuZ2VzLAogICAgICogaW5jcmVtZW50aW5nLCBldGMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJGFyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJpdGZpZWxkKG1peGVkICRrZXksIG1peGVkIC4uLiRhcmdzKTogUmVsYXl8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFRoaXMgaXMgYSBjb250YWluZXIgY29tbWFuZCBmb3IgcnVudGltZSBjb25maWd1cmF0aW9uIGNvbW1hbmRzLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkb3BlcmF0aW9uCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIHN0cmluZ3xudWxsICAkdmFsdWUKICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBjb25maWcoc3RyaW5nICRvcGVyYXRpb24sIG1peGVkICRrZXkgPSBudWxsLCA/c3RyaW5nICR2YWx1ZSA9IG51bGwpOiBSZWxheXxhcnJheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgd2l0aCBkZXRhaWxzIGFib3V0IGV2ZXJ5IFJlZGlzIGNvbW1hbmQuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGFyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21tYW5kKG1peGVkIC4uLiRhcmdzKTogUmVsYXl8YXJyYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtIGEgYml0d2lzZSBvcGVyYXRpb24gb24gb25lIG9yIG1vcmUga2V5cywgc3RvcmluZyB0aGUgcmVzdWx0IGluIGEgbmV3IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG9wZXJhdGlvbgogICAgICogQHBhcmFtICBzdHJpbmcgICRkc3RrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc3Jja2V5CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG90aGVyX2tleXMsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBiaXRvcChzdHJpbmcgJG9wZXJhdGlvbiwgc3RyaW5nICRkc3RrZXksIHN0cmluZyAkc3Jja2V5LCBzdHJpbmcgLi4uJG90aGVyX2tleXMpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGJpdCBzZXQgdG8gMSBvciAwIGluIGEgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkYml0CiAgICAgKiBAcGFyYW0gIGludCAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gIGludCAgJGVuZAogICAgICogQHBhcmFtICBib29sICAkYnliaXQKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJpdHBvcyhtaXhlZCAka2V5LCBpbnQgJGJpdCwgaW50ICRzdGFydCA9IG51bGwsIGludCAkZW5kID0gbnVsbCwgYm9vbCAkYnliaXQgPSBmYWxzZSk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogU2V0cyBvciBjbGVhcnMgdGhlIGJpdCBhdCBvZmZzZXQgaW4gdGhlIHN0cmluZyB2YWx1ZSBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkcG9zCiAgICAgKiBAcGFyYW0gIGludCAgJHZhbAogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Yml0KG1peGVkICRrZXksIGludCAkcG9zLCBpbnQgJHZhbCk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSW50ZXJhY3Qgd2l0aCBSZWRpcycgQUNMcwogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkY21kCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGFyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGFjbChzdHJpbmcgJGNtZCwgc3RyaW5nIC4uLiRhcmdzKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIElmIGtleSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBzdHJpbmcsIHRoaXMgY29tbWFuZCBhcHBlbmRzCiAgICAgKiB0aGUgdmFsdWUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLiBJZiBrZXkgZG9lcyBub3QgZXhpc3QKICAgICAqIGl0IGlzIGNyZWF0ZWQgYW5kIHNldCBhcyBhbiBlbXB0eSBzdHJpbmcsIHNvIEFQUEVORCB3aWxsCiAgICAgKiBiZSBzaW1pbGFyIHRvIFNFVCBpbiB0aGlzIHNwZWNpYWwgY2FzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZChtaXhlZCAka2V5LCBtaXhlZCAkdmFsdWUpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFNldCBrZXkgdG8gaG9sZCB0aGUgc3RyaW5nIHZhbHVlLiBJZiBrZXkgYWxyZWFkeSBob2xkcwogICAgICogYSB2YWx1ZSwgaXQgaXMgb3ZlcndyaXR0ZW4sIHJlZ2FyZGxlc3Mgb2YgaXRzIHR5cGUuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3B0aW9ucwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQobWl4ZWQgJGtleSwgbWl4ZWQgJHZhbHVlLCBtaXhlZCAkb3B0aW9ucyA9IG51bGwpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSB2YWx1ZSBvZiBrZXkgYW5kIG9wdGlvbmFsbHkgc2V0IGl0cyBleHBpcmF0aW9uLgogICAgICogR0VURVggaXMgc2ltaWxhciB0byBHRVQsIGJ1dCBpcyBhIHdyaXRlIGNvbW1hbmQgd2l0aCBhZGRpdGlvbmFsIG9wdGlvbnMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0ZXgobWl4ZWQgJGtleSwgP2FycmF5ICRvcHRpb25zID0gbnVsbCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGtleSBhbmQgZGVsZXRlIHRoZSBrZXkuIFRoaXMgY29tbWFuZCBpcyBzaW1pbGFyIHRvIEdFVCwKICAgICAqIGV4Y2VwdCBmb3IgdGhlIGZhY3QgdGhhdCBpdCBhbHNvIGRlbGV0ZXMgdGhlIGtleSBvbiBzdWNjZXNzCiAgICAgKiAoaWYgYW5kIG9ubHkgaWYgdGhlIGtleSdzIHZhbHVlIHR5cGUgaXMgYSBzdHJpbmcpLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0ZGVsKG1peGVkICRrZXkpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogU2V0IGtleSB0byBob2xkIHRoZSBzdHJpbmcgdmFsdWUgYW5kIHNldCBrZXkgdG8gdGltZW91dCBhZnRlciBhIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkc2Vjb25kcwogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIFJlbGF5fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0ZXgobWl4ZWQgJGtleSwgaW50ICRzZWNvbmRzLCBtaXhlZCAkdmFsdWUpOiBSZWxheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIHRoZSBzcGVjaWZpZWQgZWxlbWVudHMgdG8gdGhlIHNwZWNpZmllZCBIeXBlckxvZ0xvZy4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBhcnJheSAgJGVsZW1lbnRzCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwZmFkZChzdHJpbmcgJGtleSwgYXJyYXkgJGVsZW1lbnRzKTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGFwcHJveGltYXRlZCBjYXJkaW5hbGl0eSBvZiB0aGUgc2V0KHMpIG9ic2VydmVkIGJ5IHRoZSBIeXBlckxvZ0xvZyBhdCBrZXkocykuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEByZXR1cm4gUmVsYXl8aW50CiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHBmY291bnQoc3RyaW5nICRrZXkpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIE1lcmdlIGdpdmVuIEh5cGVyTG9nTG9ncyBpbnRvIGEgc2luZ2xlIG9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGRzdAogICAgICogQHBhcmFtICBhcnJheSAgJHNyY2tleXMKICAgICAqIEByZXR1cm4gUmVsYXl8Ym9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGZtZXJnZShzdHJpbmcgJGRzdCwgYXJyYXkgJHNyY2tleXMpOiBSZWxheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXQga2V5IHRvIGhvbGQgdGhlIHN0cmluZyB2YWx1ZSBhbmQgc2V0IGtleSB0byB0aW1lb3V0IGFmdGVyIGEgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRtaWxsaXNlY29uZHMKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHBzZXRleChtaXhlZCAka2V5LCBpbnQgJG1pbGxpc2Vjb25kcywgbWl4ZWQgJHZhbHVlKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUG9zdHMgYSBtZXNzYWdlIHRvIHRoZSBnaXZlbiBjaGFubmVsLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkY2hhbm5lbAogICAgICogQHBhcmFtICBzdHJpbmcgICRtZXNzYWdlCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwdWJsaXNoKHN0cmluZyAkY2hhbm5lbCwgc3RyaW5nICRtZXNzYWdlKTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBBIGNvbnRhaW5lciBjb21tYW5kIGZvciBQdWIvU3ViIGludHJvc3BlY3Rpb24gY29tbWFuZHMuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRvcGVyYXRpb24KICAgICAqIEBwYXJhbSAgbWl4ZWQgICRhcmdzLC4uLgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwdWJzdWIoc3RyaW5nICRvcGVyYXRpb24sIG1peGVkIC4uLiRhcmdzKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFBvc3RzIGEgbWVzc2FnZSB0byB0aGUgZ2l2ZW4gc2hhcmQgY2hhbm5lbC4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGNoYW5uZWwKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWVzc2FnZQogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3B1Ymxpc2goc3RyaW5nICRjaGFubmVsLCBzdHJpbmcgJG1lc3NhZ2UpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFNldCBrZXkgdG8gaG9sZCBzdHJpbmcgdmFsdWUgaWYga2V5IGRvZXMgbm90IGV4aXN0LiBJbiB0aGF0IGNhc2UsIGl0IGlzIGVxdWFsIHRvIFNFVC4KICAgICAqIFdoZW4ga2V5IGFscmVhZHkgaG9sZHMgYSB2YWx1ZSwgbm8gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4KICAgICAqIFNFVE5YIGlzIHNob3J0IGZvciAiU0VUIGlmIE5vdCBlWGlzdHMiLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNldG54KG1peGVkICRrZXksIG1peGVkICR2YWx1ZSk6IFJlbGF5fGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHZhbHVlcyBvZiBhbGwgc3BlY2lmaWVkIGtleXMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGtleXMKICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBtZ2V0KGFycmF5ICRrZXlzKTogUmVsYXl8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIE1vdmUga2V5IGZyb20gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkYXRhYmFzZSB0byB0aGUgc3BlY2lmaWVkIGRlc3RpbmF0aW9uIGRhdGFiYXNlLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkZGIKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIG1vdmUobWl4ZWQgJGtleSwgaW50ICRkYik6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgZ2l2ZW4ga2V5cyB0byB0aGVpciByZXNwZWN0aXZlIHZhbHVlcy4KICAgICAqIE1TRVQgcmVwbGFjZXMgZXhpc3RpbmcgdmFsdWVzIHdpdGggbmV3IHZhbHVlcywganVzdCBhcyByZWd1bGFyIFNFVC4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAka3ZhbHMKICAgICAqIEByZXR1cm4gUmVsYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBtc2V0KGFycmF5ICRrdmFscyk6IFJlbGF5fGJvb2wge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGdpdmVuIGtleXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMuCiAgICAgKiBNU0VUTlggd2lsbCBub3QgcGVyZm9ybSBhbnkgb3BlcmF0aW9uIGF0IGFsbCBldmVuIGlmIGp1c3QgYSBzaW5nbGUga2V5IGFscmVhZHkgZXhpc3RzLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrdmFscwogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIG1zZXRueChhcnJheSAka3ZhbHMpOiBSZWxheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZW5hbWVzIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbmV3a2V5CiAgICAgKiBAcmV0dXJuIFJlbGF5fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVuYW1lKG1peGVkICRrZXksIG1peGVkICRuZXdrZXkpOiBSZWxheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZW5hbWVzIGtleSBpZiB0aGUgbmV3IGtleSBkb2VzIG5vdCB5ZXQgZXhpc3QuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG5ld2tleQogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHJlbmFtZW54KG1peGVkICRrZXksIG1peGVkICRuZXdrZXkpOiBSZWxheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5cy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5cywuLi4KICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsKG1peGVkIC4uLiRrZXlzKTogUmVsYXl8aW50fGJvb2wge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXlzIHdpdGhvdXQgYmxvY2tpbmcgUmVkaXMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleXMsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB1bmxpbmsobWl4ZWQgLi4uJGtleXMpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFNldCBhIHRpbWVvdXQgb24ga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkc2Vjb25kcwogICAgICogQHBhcmFtICBzdHJpbmd8bnVsbCAgJG1vZGUKICAgICAqIEByZXR1cm4gUmVsYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBleHBpcmUobWl4ZWQgJGtleSwgaW50ICRzZWNvbmRzLCA/c3RyaW5nICRtb2RlID0gbnVsbCk6IFJlbGF5fGJvb2wge30KCiAgICAvKioKICAgICAqIFNldCBhIGtleSdzIHRpbWUgdG8gbGl2ZSBpbiBtaWxsaXNlY29uZHMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRtaWxsaXNlY29uZHMKICAgICAqIEByZXR1cm4gUmVsYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwZXhwaXJlKG1peGVkICRrZXksIGludCAkbWlsbGlzZWNvbmRzKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogU2V0IGEgdGltZW91dCBvbiBrZXkgdXNpbmcgYSB1bml4IHRpbWVzdGFtcC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJHRpbWVzdGFtcAogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGV4cGlyZWF0KG1peGVkICRrZXksIGludCAkdGltZXN0YW1wKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYWJzb2x1dGUgVW5peCB0aW1lc3RhbXAgaW4gc2Vjb25kcyBhdCB3aGljaCB0aGUgZ2l2ZW4ga2V5IHdpbGwgZXhwaXJlLgogICAgICogSWYgdGhlIGtleSBleGlzdHMgYnV0IGRvZXNuJ3QgaGF2ZSBhIFRUTCB0aGlzIGZ1bmN0aW9uIHJldHVybiAtMS4KICAgICAqIElmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgLTIuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBleHBpcmV0aW1lKG1peGVkICRrZXkpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgZXhwaXJhdGlvbiBmb3IgYSBrZXkgYXMgYSBVTklYIHRpbWVzdGFtcCBzcGVjaWZpZWQgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkdGltZXN0YW1wX21zCiAgICAgKiBAcmV0dXJuIFJlbGF5fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcGV4cGlyZWF0KG1peGVkICRrZXksIGludCAkdGltZXN0YW1wX21zKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogU2VtYW50aWMgdGhlIHNhbWUgYXMgRVhQSVJFVElNRSwgYnV0IHJldHVybnMgdGhlIGFic29sdXRlIFVuaXggZXhwaXJhdGlvbgogICAgICogdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyBpbnN0ZWFkIG9mIHNlY29uZHMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwZXhwaXJldGltZShtaXhlZCAka2V5KTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgdGhlIGV4aXN0aW5nIHRpbWVvdXQgb24ga2V5LCB0dXJuaW5nIHRoZSBrZXkgZnJvbSB2b2xhdGlsZSB0byBwZXJzaXN0ZW50LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gUmVsYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwZXJzaXN0KG1peGVkICRrZXkpOiBSZWxheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIGEgZ2l2ZW4ga2V5LgogICAgICoKICAgICAqIEluIFBocFJlZGlzIGNvbXBhdGliaWxpdHkgbW9kZSB0aGlzIHdpbGwgcmV0dXJuIGFuIGludGVnZXIKICAgICAqIChvbmUgb2YgdGhlIFJFRElTXzx0eXBlPikgY29uc3RhbnRzLiBPdGhlcndpc2UgaXQgd2lsbAogICAgICogcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBSZWRpcyByZXR1cm5zLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fHN0cmluZ3xmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB0eXBlKG1peGVkICRrZXkpOiBSZWxheXxpbnR8c3RyaW5nfGJvb2wge30KCiAgICAvKioKICAgICAqIEF0b21pY2FsbHkgcmV0dXJucyBhbmQgcmVtb3ZlcyB0aGUgZmlyc3QvbGFzdCBlbGVtZW50IG9mIHRoZSBsaXN0CiAgICAgKiBzdG9yZWQgYXQgc291cmNlLCBhbmQgcHVzaGVzIHRoZSBlbGVtZW50IGF0IHRoZSBmaXJzdC9sYXN0CiAgICAgKiBlbGVtZW50IG9mIHRoZSBsaXN0IHN0b3JlZCBhdCBkZXN0aW5hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkc3Jja2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkZHN0a2V5CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHNyY3BvcwogICAgICogQHBhcmFtICBzdHJpbmcgICRkc3Rwb3MKICAgICAqIEByZXR1cm4gUmVsYXl8c3RyaW5nfG51bGx8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbG1vdmUobWl4ZWQgJHNyY2tleSwgbWl4ZWQgJGRzdGtleSwgc3RyaW5nICRzcmNwb3MsIHN0cmluZyAkZHN0cG9zKTogUmVsYXl8c3RyaW5nfG51bGx8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEJMTU9WRSBpcyB0aGUgYmxvY2tpbmcgdmFyaWFudCBvZiBMTU9WRS4gV2hlbiBzb3VyY2UgY29udGFpbnMgZWxlbWVudHMsCiAgICAgKiB0aGlzIGNvbW1hbmQgYmVoYXZlcyBleGFjdGx5IGxpa2UgTE1PVkUuIFdoZW4gdXNlZCBpbnNpZGUgYQogICAgICogTVVMVEkvRVhFQyBibG9jaywgdGhpcyBjb21tYW5kIGJlaGF2ZXMgZXhhY3RseSBsaWtlIExNT1ZFLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRzcmNrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRkc3RrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc3JjcG9zCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGRzdHBvcwogICAgICogQHBhcmFtICBmbG9hdCAgJHRpbWVvdXQKICAgICAqIEByZXR1cm4gUmVsYXl8c3RyaW5nfG51bGx8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gYmxtb3ZlKG1peGVkICRzcmNrZXksIG1peGVkICRkc3RrZXksIHN0cmluZyAkc3JjcG9zLCBzdHJpbmcgJGRzdHBvcywgZmxvYXQgJHRpbWVvdXQpOiBSZWxheXxzdHJpbmd8bnVsbHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzIG9mIHRoZSBsaXN0IHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRzdGFydAogICAgICogQHBhcmFtICBpbnQgICRzdG9wCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbHJhbmdlKG1peGVkICRrZXksIGludCAkc3RhcnQsIGludCAkc3RvcCk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJbnNlcnQgYWxsIHRoZSBzcGVjaWZpZWQgdmFsdWVzIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0IHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbQogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbXMsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBscHVzaChtaXhlZCAka2V5LCBtaXhlZCAkbWVtLCBtaXhlZCAuLi4kbWVtcyk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSW5zZXJ0IGFsbCB0aGUgc3BlY2lmaWVkIHZhbHVlcyBhdCB0aGUgdGFpbCBvZiB0aGUgbGlzdCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW0KICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW1zLC4uLgogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcnB1c2gobWl4ZWQgJGtleSwgbWl4ZWQgJG1lbSwgbWl4ZWQgLi4uJG1lbXMpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEluc2VydHMgc3BlY2lmaWVkIHZhbHVlcyBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCBzdG9yZWQgYXQga2V5LAogICAgICogb25seSBpZiBrZXkgYWxyZWFkeSBleGlzdHMgYW5kIGhvbGRzIGEgbGlzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtCiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtcywuLi4KICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGxwdXNoeChtaXhlZCAka2V5LCBtaXhlZCAkbWVtLCBtaXhlZCAuLi4kbWVtcyk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSW5zZXJ0cyBzcGVjaWZpZWQgdmFsdWVzIGF0IHRoZSB0YWlsIG9mIHRoZSBsaXN0IHN0b3JlZCBhdCBrZXksCiAgICAgKiBvbmx5IGlmIGtleSBhbHJlYWR5IGV4aXN0cyBhbmQgaG9sZHMgYSBsaXN0LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW0KICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW1zLC4uLgogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcnB1c2h4KG1peGVkICRrZXksIG1peGVkICRtZW0sIG1peGVkIC4uLiRtZW1zKTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBsaXN0IGVsZW1lbnQgYXQgaW5kZXggdG8gZWxlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJGluZGV4CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtCiAgICAgKiBAcmV0dXJuIFJlbGF5fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbHNldChtaXhlZCAka2V5LCBpbnQgJGluZGV4LCBtaXhlZCAkbWVtKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudHMgb2YgdGhlIGxpc3Qgc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGxwb3AobWl4ZWQgJGtleSwgaW50ICRjb3VudCA9IDEpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogVGhlIGNvbW1hbmQgcmV0dXJucyB0aGUgaW5kZXggb2YgbWF0Y2hpbmcgZWxlbWVudHMgaW5zaWRlIGEgUmVkaXMgbGlzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEBwYXJhbSAgYXJyYXkgICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxhcnJheXxmYWxzZXxudWxsCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbHBvcyhtaXhlZCAka2V5LCBtaXhlZCAkdmFsdWUsID9hcnJheSAkb3B0aW9ucyA9IG51bGwpOiBSZWxheXxpbnR8YXJyYXl8ZmFsc2V8bnVsbCB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhbmQgcmV0dXJucyB0aGUgbGFzdCBlbGVtZW50cyBvZiB0aGUgbGlzdCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcnBvcChtaXhlZCAka2V5LCBpbnQgJGNvdW50ID0gMSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBBdG9taWNhbGx5IHJldHVybnMgYW5kIHJlbW92ZXMgdGhlIGxhc3QgZWxlbWVudCAodGFpbCkgb2YgdGhlIGxpc3Qgc3RvcmVkIGF0IHNvdXJjZSwKICAgICAqIGFuZCBwdXNoZXMgdGhlIGVsZW1lbnQgYXQgdGhlIGZpcnN0IGVsZW1lbnQgKGhlYWQpIG9mIHRoZSBsaXN0IHN0b3JlZCBhdCBkZXN0aW5hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkc291cmNlCiAgICAgKiBAcGFyYW0gIG1peGVkICAkZGVzdAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBycG9wbHB1c2gobWl4ZWQgJHNvdXJjZSwgbWl4ZWQgJGRlc3QpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogQXRvbWljYWxseSByZXR1cm5zIGFuZCByZW1vdmVzIHRoZSBsYXN0IGVsZW1lbnQgKHRhaWwpIG9mIHRoZSBsaXN0IHN0b3JlZCBhdCBzb3VyY2UsCiAgICAgKiBhbmQgcHVzaGVzIHRoZSBlbGVtZW50IGF0IHRoZSBmaXJzdCBlbGVtZW50IChoZWFkKSBvZiB0aGUgbGlzdCBzdG9yZWQgYXQgZGVzdGluYXRpb24uCiAgICAgKiBUaGlzIGNvbW1hbmQgd2lsbCBibG9jayBmb3IgYW4gZWxlbWVudCB1cCB0byB0aGUgcHJvdmlkZWQgdGltZW91dC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkc291cmNlCiAgICAgKiBAcGFyYW0gIG1peGVkICAkZGVzdAogICAgICogQHBhcmFtICBmbG9hdCAgJHRpbWVvdXQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gYnJwb3BscHVzaChtaXhlZCAkc291cmNlLCBtaXhlZCAkZGVzdCwgZmxvYXQgJHRpbWVvdXQpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogQkxQT1AgaXMgYSBibG9ja2luZyBsaXN0IHBvcCBwcmltaXRpdmUuIEl0IGlzIHRoZSBibG9ja2luZyB2ZXJzaW9uIG9mIExQT1AgYmVjYXVzZQogICAgICogaXQgYmxvY2tzIHRoZSBjb25uZWN0aW9uIHdoZW4gdGhlcmUgYXJlIG5vIGVsZW1lbnRzIHRvIHBvcCBmcm9tIGFueSBvZiB0aGUgZ2l2ZW4gbGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmd8YXJyYXkgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nfGZsb2F0ICAkdGltZW91dF9vcl9rZXkKICAgICAqIEBwYXJhbSAgYXJyYXkgICRleHRyYV9hcmdzLC4uLgogICAgICogQHJldHVybiBSZWxheXxhcnJheXxudWxsfGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJscG9wKHN0cmluZ3xhcnJheSAka2V5LCBzdHJpbmd8ZmxvYXQgJHRpbWVvdXRfb3Jfa2V5LCBtaXhlZCAuLi4kZXh0cmFfYXJncyk6IFJlbGF5fGFycmF5fG51bGx8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFBvcCBlbGVtZW50cyBmcm9tIGEgbGlzdCwgb3IgYmxvY2sgdW50aWwgb25lIGlzIGF2YWlsYWJsZQogICAgICoKICAgICAqIEBwYXJhbSAgZmxvYXQgICR0aW1lb3V0CiAgICAgKiBAcGFyYW0gIGFycmF5ICAka2V5cwogICAgICogQHBhcmFtICBzdHJpbmcgICRmcm9tCiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fG51bGx8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gYmxtcG9wKGZsb2F0ICR0aW1lb3V0LCBhcnJheSAka2V5cywgc3RyaW5nICRmcm9tLCBpbnQgJGNvdW50ID0gMSk6IFJlbGF5fGFycmF5fG51bGx8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBhbmQgcmV0dXJuIG1lbWJlcnMgd2l0aCBzY29yZXMgaW4gYSBzb3J0ZWQgc2V0IG9yIGJsb2NrIHVudGlsIG9uZSBpcyBhdmFpbGFibGUKICAgICAqCiAgICAgKiBAcGFyYW0gIGZsb2F0ICAkdGltZW91dAogICAgICogQHBhcmFtICBhcnJheSAgJGtleXMKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZnJvbQogICAgICogQHBhcmFtICBpbnQgICRjb3VudAogICAgICogQHJldHVybiBSZWxheXxhcnJheXxudWxsfGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJ6bXBvcChmbG9hdCAkdGltZW91dCwgYXJyYXkgJGtleXMsIHN0cmluZyAkZnJvbSwgaW50ICRjb3VudCA9IDEpOiBSZWxheXxhcnJheXxudWxsfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQb3BzIG9uZSBvciBtb3JlIGVsZW1lbnRzIGZyb20gdGhlIGZpcnN0IG5vbi1lbXB0eSBsaXN0IGtleSBmcm9tIHRoZSBsaXN0IG9mIHByb3ZpZGVkIGtleSBuYW1lcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAka2V5cwogICAgICogQHBhcmFtICBzdHJpbmcgICRmcm9tCiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fG51bGx8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbG1wb3AoYXJyYXkgJGtleXMsIHN0cmluZyAkZnJvbSwgaW50ICRjb3VudCA9IDEpOiBSZWxheXxhcnJheXxudWxsfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQb3BzIG9uZSBvciBtb3JlIGVsZW1lbnRzLCB0aGF0IGFyZSBtZW1iZXItc2NvcmUgcGFpcnMsIGZyb20gdGhlCiAgICAgKiBmaXJzdCBub24tZW1wdHkgc29ydGVkIHNldCBpbiB0aGUgcHJvdmlkZWQgbGlzdCBvZiBrZXkgbmFtZXMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGtleXMKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZnJvbQogICAgICogQHBhcmFtICBpbnQgICRjb3VudAogICAgICogQHJldHVybiBSZWxheXxhcnJheXxudWxsfGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHptcG9wKGFycmF5ICRrZXlzLCBzdHJpbmcgJGZyb20sIGludCAkY291bnQgPSAxKTogUmVsYXl8YXJyYXl8bnVsbHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQlJQT1AgaXMgYSBibG9ja2luZyBsaXN0IHBvcCBwcmltaXRpdmUuIEl0IGlzIHRoZSBibG9ja2luZyB2ZXJzaW9uIG9mIFJQT1AgYmVjYXVzZQogICAgICogaXQgYmxvY2tzIHRoZSBjb25uZWN0aW9uIHdoZW4gdGhlcmUgYXJlIG5vIGVsZW1lbnRzIHRvIHBvcCBmcm9tIGFueSBvZiB0aGUgZ2l2ZW4gbGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmd8YXJyYXkgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nfGZsb2F0ICAkdGltZW91dF9vcl9rZXkKICAgICAqIEBwYXJhbSAgYXJyYXkgICRleHRyYV9hcmdzLC4uLgogICAgICogQHJldHVybiBSZWxheXxhcnJheXxudWxsfGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJycG9wKHN0cmluZ3xhcnJheSAka2V5LCBzdHJpbmd8ZmxvYXQgJHRpbWVvdXRfb3Jfa2V5LCBtaXhlZCAuLi4kZXh0cmFfYXJncyk6IFJlbGF5fGFycmF5fG51bGx8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEJaUE9QTUFYIGlzIHRoZSBibG9ja2luZyB2YXJpYW50IG9mIHRoZSBzb3J0ZWQgc2V0IFpQT1BNQVggcHJpbWl0aXZlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nfGFycmF5ICAka2V5CiAgICAgKiBAcGFyYW0gIHN0cmluZ3xmbG9hdCAgJHRpbWVvdXRfb3Jfa2V5CiAgICAgKiBAcGFyYW0gIGFycmF5ICAkZXh0cmFfYXJncywuLi4KICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8bnVsbHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBienBvcG1heChzdHJpbmd8YXJyYXkgJGtleSwgc3RyaW5nfGZsb2F0ICR0aW1lb3V0X29yX2tleSwgbWl4ZWQgLi4uJGV4dHJhX2FyZ3MpOiBSZWxheXxhcnJheXxudWxsfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBCWlBPUE1JTiBpcyB0aGUgYmxvY2tpbmcgdmFyaWFudCBvZiB0aGUgc29ydGVkIHNldCBaUE9QTUlOIHByaW1pdGl2ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xhcnJheSAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmd8ZmxvYXQgICR0aW1lb3V0X29yX2tleQogICAgICogQHBhcmFtICBhcnJheSAgJGV4dHJhX2FyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fG51bGx8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gYnpwb3BtaW4oc3RyaW5nfGFycmF5ICRrZXksIHN0cmluZ3xmbG9hdCAkdGltZW91dF9vcl9rZXksIG1peGVkIC4uLiRleHRyYV9hcmdzKTogUmVsYXl8YXJyYXl8bnVsbHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVGhpcyBpcyBhIGNvbnRhaW5lciBjb21tYW5kIGZvciBvYmplY3QgaW50cm9zcGVjdGlvbiBjb21tYW5kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG9wCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIG9iamVjdChzdHJpbmcgJG9wLCBtaXhlZCAka2V5KTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgcG9zaXRpb25zIChsb25naXR1ZGUsbGF0aXR1ZGUpIG9mIGFsbCB0aGUgc3BlY2lmaWVkIG1lbWJlcnMKICAgICAqIG9mIHRoZSBnZW9zcGF0aWFsIGluZGV4IHJlcHJlc2VudGVkIGJ5IHRoZSBzb3J0ZWQgc2V0IGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVycywuLi4KICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VvcG9zKG1peGVkICRrZXksIG1peGVkIC4uLiRtZW1iZXJzKTogUmVsYXl8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIGZpcnN0IGNvdW50IG9jY3VycmVuY2VzIG9mIGVsZW1lbnRzIGVxdWFsIHRvIGVsZW1lbnQgZnJvbSB0aGUgbGlzdCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW0KICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGxyZW0obWl4ZWQgJGtleSwgbWl4ZWQgJG1lbSwgaW50ICRjb3VudCA9IDApOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGVsZW1lbnQgYXQgaW5kZXggaW5kZXggaW4gdGhlIGxpc3Qgc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJGluZGV4CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbGluZGV4KG1peGVkICRrZXksIGludCAkaW5kZXgpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogSW5zZXJ0cyBlbGVtZW50IGluIHRoZSBsaXN0IHN0b3JlZCBhdCBrZXkgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgcmVmZXJlbmNlIHZhbHVlIHBpdm90LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkb3AKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRwaXZvdAogICAgICogQHBhcmFtICBtaXhlZCAgJGVsZW1lbnQKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGxpbnNlcnQobWl4ZWQgJGtleSwgc3RyaW5nICRvcCwgbWl4ZWQgJHBpdm90LCBtaXhlZCAkZWxlbWVudCk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVHJpbSBhbiBleGlzdGluZyBsaXN0IHNvIHRoYXQgaXQgd2lsbCBjb250YWluIG9ubHkgdGhlIHNwZWNpZmllZCByYW5nZSBvZiBlbGVtZW50cyBzcGVjaWZpZWQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRzdGFydAogICAgICogQHBhcmFtICBpbnQgICRlbmQKICAgICAqIEByZXR1cm4gUmVsYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBsdHJpbShtaXhlZCAka2V5LCBpbnQgJHN0YXJ0LCBpbnQgJGVuZCk6IFJlbGF5fGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBmaWVsZCBpbiB0aGUgaGFzaCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRoYXNoCiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaGdldChtaXhlZCAkaGFzaCwgbWl4ZWQgJG1lbWJlcik6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgbGVuZ3RoIG9mIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggZmllbGQgaW4gdGhlIGhhc2ggc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkaGFzaAogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbWJlcgogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBoc3RybGVuKG1peGVkICRoYXNoLCBtaXhlZCAkbWVtYmVyKTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCBmaWVsZHMgYW5kIHZhbHVlcyBvZiB0aGUgaGFzaCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRoYXNoCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaGdldGFsbChtaXhlZCAkaGFzaCk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCBmaWVsZCBuYW1lcyBpbiB0aGUgaGFzaCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRoYXNoCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaGtleXMobWl4ZWQgJGhhc2gpOiBSZWxheXxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbGwgdmFsdWVzIGluIHRoZSBoYXNoIHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGhhc2gKICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBodmFscyhtaXhlZCAkaGFzaCk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgZmllbGRzIGluIHRoZSBoYXNoIHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGhhc2gKICAgICAqIEBwYXJhbSAgYXJyYXkgICRtZW1iZXJzCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaG1nZXQobWl4ZWQgJGhhc2gsIGFycmF5ICRtZW1iZXJzKTogUmVsYXl8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFdoZW4gY2FsbGVkIHdpdGgganVzdCB0aGUga2V5IGFyZ3VtZW50LCByZXR1cm4gYSByYW5kb20gZmllbGQgZnJvbSB0aGUgaGFzaCB2YWx1ZSBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRoYXNoCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkb3B0aW9ucwogICAgICogQHJldHVybiBSZWxheXxhcnJheXxzdHJpbmd8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBocmFuZGZpZWxkKG1peGVkICRoYXNoLCA/YXJyYXkgJG9wdGlvbnMgPSBudWxsKTogUmVsYXl8YXJyYXl8c3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBzcGVjaWZpZWQgZmllbGRzIHRvIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzIGluIHRoZSBoYXNoIHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGhhc2gKICAgICAqIEBwYXJhbSAgYXJyYXkgICRtZW1iZXJzCiAgICAgKiBAcmV0dXJuIFJlbGF5fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaG1zZXQobWl4ZWQgJGhhc2gsIGFycmF5ICRtZW1iZXJzKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBpZiBmaWVsZCBpcyBhbiBleGlzdGluZyBmaWVsZCBpbiB0aGUgaGFzaCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRoYXNoCiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcmV0dXJuIFJlbGF5fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBoZXhpc3RzKG1peGVkICRoYXNoLCBtaXhlZCAkbWVtYmVyKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogU2V0cyBmaWVsZCBpbiB0aGUgaGFzaCBzdG9yZWQgYXQga2V5IHRvIHZhbHVlLCBvbmx5IGlmIGZpZWxkIGRvZXMgbm90IHlldCBleGlzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkaGFzaAogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbWJlcgogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIFJlbGF5fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaHNldG54KG1peGVkICRoYXNoLCBtaXhlZCAkbWVtYmVyLCBtaXhlZCAkdmFsdWUpOiBSZWxheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIGZpZWxkIGluIHRoZSBoYXNoIHN0b3JlZCBhdCBrZXkgdG8gdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbQogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbAogICAgICogQHBhcmFtICBtaXhlZCAgJGt2YWxzLC4uLgogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaHNldChtaXhlZCAka2V5LCBtaXhlZCAkbWVtLCBtaXhlZCAkdmFsLCBtaXhlZCAuLi4ka3ZhbHMpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBmaWVsZHMgZnJvbSB0aGUgaGFzaCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW0KICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWVtcywuLi4KICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGhkZWwobWl4ZWQgJGtleSwgbWl4ZWQgJG1lbSwgc3RyaW5nIC4uLiRtZW1zKTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnRzIHRoZSBudW1iZXIgc3RvcmVkIGF0IGZpZWxkIGluIHRoZSBoYXNoIHN0b3JlZCBhdCBrZXkgYnkgaW5jcmVtZW50LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW0KICAgICAqIEBwYXJhbSAgaW50ICAkdmFsdWUKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGhpbmNyYnkobWl4ZWQgJGtleSwgbWl4ZWQgJG1lbSwgaW50ICR2YWx1ZSk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSW5jcmVtZW50IHRoZSBzcGVjaWZpZWQgZmllbGQgb2YgYSBoYXNoIHN0b3JlZCBhdCBrZXksIGFuZCByZXByZXNlbnRpbmcKICAgICAqIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBieSB0aGUgc3BlY2lmaWVkIGluY3JlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtCiAgICAgKiBAcGFyYW0gIGZsb2F0ICAkdmFsdWUKICAgICAqIEByZXR1cm4gUmVsYXl8ZmxvYXR8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBoaW5jcmJ5ZmxvYXQobWl4ZWQgJGtleSwgbWl4ZWQgJG1lbSwgZmxvYXQgJHZhbHVlKTogUmVsYXl8ZmxvYXR8Ym9vbCB7fQoKICAgIC8qKgogICAgICogSW5jcmVtZW50cyB0aGUgbnVtYmVyIHN0b3JlZCBhdCBrZXkgYnkgb25lLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkYnkKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGluY3IobWl4ZWQgJGtleSwgaW50ICRieSA9IDEpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIERlY3JlbWVudHMgdGhlIG51bWJlciBzdG9yZWQgYXQga2V5IGJ5IG9uZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJGJ5CiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNyKG1peGVkICRrZXksIGludCAkYnkgPSAxKTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnRzIHRoZSBudW1iZXIgc3RvcmVkIGF0IGtleSBieSBpbmNyZW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICR2YWx1ZQogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5jcmJ5KG1peGVkICRrZXksIGludCAkdmFsdWUpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIERlY3JlbWVudHMgdGhlIG51bWJlciBzdG9yZWQgYXQga2V5IGJ5IGRlY3JlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNyYnkobWl4ZWQgJGtleSwgaW50ICR2YWx1ZSk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSW5jcmVtZW50IHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHN0b3JlZCBhdCBrZXkgYnkgdGhlIHNwZWNpZmllZCBpbmNyZW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBmbG9hdCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIFJlbGF5fGZsb2F0fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGluY3JieWZsb2F0KG1peGVkICRrZXksIGZsb2F0ICR2YWx1ZSk6IFJlbGF5fGZsb2F0fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtZW1iZXJzIG9mIHRoZSBzZXQgcmVzdWx0aW5nIGZyb20gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZmlyc3Qgc2V0IGFuZCBhbGwgdGhlIHN1Y2Nlc3NpdmUgc2V0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3RoZXJfa2V5cywuLi4KICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZGlmZihtaXhlZCAka2V5LCBtaXhlZCAuLi4kb3RoZXJfa2V5cyk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBUaGlzIGNvbW1hbmQgaXMgZXF1YWwgdG8gU0RJRkYsIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgcmVzdWx0aW5nIHNldCwgaXQgaXMgc3RvcmVkIGluIGRlc3RpbmF0aW9uLgogICAgICogSWYgZGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMsIGl0IGlzIG92ZXJ3cml0dGVuLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRvdGhlcl9rZXlzLC4uLgogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2RpZmZzdG9yZShtaXhlZCAka2V5LCBtaXhlZCAuLi4kb3RoZXJfa2V5cyk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbWVtYmVycyBvZiB0aGUgc2V0IHJlc3VsdGluZyBmcm9tIHRoZSBpbnRlcnNlY3Rpb24gb2YgYWxsIHRoZSBnaXZlbiBzZXRzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRvdGhlcl9rZXlzLC4uLgogICAgICogQHJldHVybiBSZWxheXxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIHNpbnRlcihtaXhlZCAka2V5LCBtaXhlZCAuLi4kb3RoZXJfa2V5cyk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJbnRlcnNlY3QgbXVsdGlwbGUgc2V0cyBhbmQgcmV0dXJuIHRoZSBjYXJkaW5hbGl0eSBvZiB0aGUgcmVzdWx0LgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrZXlzCiAgICAgKiBAcGFyYW0gIGludCAgJGxpbWl0CiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIHNpbnRlcmNhcmQoYXJyYXkgJGtleXMsIGludCAkbGltaXQgPSAtMSk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVGhpcyBjb21tYW5kIGlzIGVxdWFsIHRvIFNJTlRFUiwgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSByZXN1bHRpbmcgc2V0LCBpdCBpcyBzdG9yZWQgaW4gZGVzdGluYXRpb24uCiAgICAgKiBJZiBkZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0cywgaXQgaXMgb3ZlcndyaXR0ZW4uCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG90aGVyX2tleXMsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzaW50ZXJzdG9yZShtaXhlZCAka2V5LCBtaXhlZCAuLi4kb3RoZXJfa2V5cyk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbWVtYmVycyBvZiB0aGUgc2V0IHJlc3VsdGluZyBmcm9tIHRoZSB1bmlvbiBvZiBhbGwgdGhlIGdpdmVuIHNldHMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG90aGVyX2tleXMsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3VuaW9uKG1peGVkICRrZXksIG1peGVkIC4uLiRvdGhlcl9rZXlzKTogUmVsYXl8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFRoaXMgY29tbWFuZCBpcyBlcXVhbCB0byBTVU5JT04sIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgcmVzdWx0aW5nIHNldCwgaXQgaXMgc3RvcmVkIGluIGRlc3RpbmF0aW9uLgogICAgICogSWYgZGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMsIGl0IGlzIG92ZXJ3cml0dGVuLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRvdGhlcl9rZXlzLC4uLgogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3VuaW9uc3RvcmUobWl4ZWQgJGtleSwgbWl4ZWQgLi4uJG90aGVyX2tleXMpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFN1YnNjcmliZXMgdG8gdGhlIHNwZWNpZmllZCBjaGFubmVscy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkY2hhbm5lbHMKICAgICAqIEBwYXJhbSAgY2FsbGFibGUgICRjYWxsYmFjawogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHN1YnNjcmliZShhcnJheSAkY2hhbm5lbHMsIGNhbGxhYmxlICRjYWxsYmFjayk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFVuc3Vic2NyaWJlcyBmcm9tIHRoZSBnaXZlbiBjaGFubmVscywgb3IgZnJvbSBhbGwgb2YgdGhlbSBpZiBub25lIGlzIGdpdmVuLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRjaGFubmVscwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGFycmF5ICRjaGFubmVscyA9IFtdKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogU3Vic2NyaWJlcyB0byB0aGUgZ2l2ZW4gcGF0dGVybnMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJHBhdHRlcm5zCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwc3Vic2NyaWJlKGFycmF5ICRwYXR0ZXJucywgY2FsbGFibGUgJGNhbGxiYWNrKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogVW5zdWJzY3JpYmVzIGZyb20gdGhlIGdpdmVuIHBhdHRlcm5zLCBvciBmcm9tIGFsbCBvZiB0aGVtIGlmIG5vbmUgaXMgZ2l2ZW4uCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJHBhdHRlcm5zCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcHVuc3Vic2NyaWJlKGFycmF5ICRwYXR0ZXJucyA9IFtdKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogU3Vic2NyaWJlcyB0byB0aGUgc3BlY2lmaWVkIHNoYXJkIGNoYW5uZWxzLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRjaGFubmVscwogICAgICogQHBhcmFtICBjYWxsYWJsZSAgJGNhbGxiYWNrCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3N1YnNjcmliZShhcnJheSAkY2hhbm5lbHMsIGNhbGxhYmxlICRjYWxsYmFjayk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFVuc3Vic2NyaWJlcyBmcm9tIHRoZSBnaXZlbiBzaGFyZCBjaGFubmVscywgb3IgZnJvbSBhbGwgb2YgdGhlbSBpZiBub25lIGlzIGdpdmVuLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRjaGFubmVscwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHN1bnN1YnNjcmliZShhcnJheSAkY2hhbm5lbHMgPSBbXSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEFsdGVycyB0aGUgbGFzdCBhY2Nlc3MgdGltZSBvZiBhIGtleShzKS4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5fHN0cmluZyAgJGtleV9vcl9hcnJheQogICAgICogQHBhcmFtICBtaXhlZCAgJG1vcmVfa2V5cywuLi4KICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHRvdWNoKGFycmF5fHN0cmluZyAka2V5X29yX2FycmF5LCBtaXhlZCAuLi4kbW9yZV9rZXlzKTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBBIHBpcGVsaW5lIGJsb2NrIGlzIHNpbXBseSB0cmFuc21pdHRlZCBmYXN0ZXIgdG8gdGhlIHNlcnZlciAobGlrZSBgTVVMVElgKSwgYnV0IHdpdGhvdXQgYW55IGd1YXJhbnRlZSBvZiBhdG9taWNpdHkuCiAgICAgKgogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gcGlwZWxpbmUoKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogTWFya3MgdGhlIHN0YXJ0IG9mIGEgdHJhbnNhY3Rpb24gYmxvY2suIFN1YnNlcXVlbnQgY29tbWFuZHMgd2lsbCBiZSBxdWV1ZWQgZm9yIGF0b21pYyBleGVjdXRpb24gdXNpbmcgRVhFQy4KICAgICAqCiAgICAgKiBBY2NlcHRzIGBSZWxheTo6TVVMVElgIGFuZCBgUmVsYXk6OlBJUEVMSU5FYCBtb2Rlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAgJG1vZGUKICAgICAqIEByZXR1cm4gUmVsYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBtdWx0aShpbnQgJG1vZGUgPSAwKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZXMgYWxsIHByZXZpb3VzbHkgcXVldWVkIGNvbW1hbmRzIGluIGEgdHJhbnNhY3Rpb24gYW5kIHJlc3RvcmVzIHRoZSBjb25uZWN0aW9uIHN0YXRlIHRvIG5vcm1hbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlYygpOiBSZWxheXxhcnJheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBXYWl0IGZvciB0aGUgc3luY2hyb25vdXMgcmVwbGljYXRpb24gb2YgYWxsIHRoZSB3cml0ZQogICAgICogY29tbWFuZHMgc2VudCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudCBjb25uZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICAkcmVwbGljYXMKICAgICAqIEBwYXJhbSAgaW50ICAkdGltZW91dAogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdChpbnQgJHJlcGxpY2FzLCAkdGltZW91dCk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogTWFya3MgdGhlIGdpdmVuIGtleXMgdG8gYmUgd2F0Y2hlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uIG9mIGEgdHJhbnNhY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG90aGVyX2tleXMsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gd2F0Y2gobWl4ZWQgJGtleSwgbWl4ZWQgLi4uJG90aGVyX2tleXMpOiBSZWxheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBGbHVzaGVzIGFsbCB0aGUgcHJldmlvdXNseSB3YXRjaGVkIGtleXMgZm9yIGEgdHJhbnNhY3Rpb24uCiAgICAgKiBJZiB5b3UgY2FsbCBFWEVDIG9yIERJU0NBUkQsIHRoZXJlJ3Mgbm8gbmVlZCB0byBtYW51YWxseSBjYWxsIFVOV0FUQ0guCiAgICAgKgogICAgICogQHJldHVybiBSZWxheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHVud2F0Y2goKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogRmx1c2hlcyBhbGwgcHJldmlvdXNseSBxdWV1ZWQgY29tbWFuZHMgaW4gYSB0cmFuc2FjdGlvbiBhbmQgcmVzdG9yZXMgdGhlIGNvbm5lY3Rpb24gc3RhdGUgdG8gbm9ybWFsLgogICAgICogSWYgV0FUQ0ggd2FzIHVzZWQsIERJU0NBUkQgdW53YXRjaGVzIGFsbCBrZXlzIHdhdGNoZWQgYnkgdGhlIGNvbm5lY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGRpc2NhcmQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBtb2RlIFJlbGF5IGlzIGN1cnJlbnRseSBpbi4KICAgICAqIGBSZWxheTo6QVRPTUlDYCwgYFJlbGF5OjpQSVBFTElORWAgb3IgYFJlbGF5OjpNVUxUSWAuCiAgICAgKgogICAgICogQHBhcmFtICBib29sICAkbWFza2VkCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZGUoYm9vbCAkbWFza2VkID0gZmFsc2UpOiBpbnQge30KCiAgICAvKioKICAgICAqIENsZWFyIHRoZSBhY2N1bXVsYXRlZCBzZW50IGFuZCByZWNlaXZlZCBieXRlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhckJ5dGVzKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFNjYW4gdGhlIGtleXNwYWNlIGZvciBtYXRjaGluZyBrZXlzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRpdGVyYXRvcgogICAgICogQHBhcmFtICBtaXhlZCAgJG1hdGNoCiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcGFyYW0gIHN0cmluZ3xudWxsICAkdHlwZQogICAgICogQHJldHVybiBhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzY2FuKG1peGVkICYkaXRlcmF0b3IsIG1peGVkICRtYXRjaCA9IG51bGwsIGludCAkY291bnQgPSAwLCA/c3RyaW5nICR0eXBlID0gbnVsbCk6IGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJdGVyYXRlcyBmaWVsZHMgb2YgSGFzaCB0eXBlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJGl0ZXJhdG9yCiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWF0Y2gKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gYXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaHNjYW4obWl4ZWQgJGtleSwgbWl4ZWQgJiRpdGVyYXRvciwgbWl4ZWQgJG1hdGNoID0gbnVsbCwgaW50ICRjb3VudCA9IDApOiBhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSXRlcmF0ZXMgZWxlbWVudHMgb2YgU2V0cyB0eXBlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkaXRlcmF0b3IKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtYXRjaAogICAgICogQHBhcmFtICBpbnQgICRjb3VudAogICAgICogQHJldHVybiBhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzc2NhbihtaXhlZCAka2V5LCBtaXhlZCAmJGl0ZXJhdG9yLCBtaXhlZCAkbWF0Y2ggPSBudWxsLCBpbnQgJGNvdW50ID0gMCk6IGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJdGVyYXRlcyBlbGVtZW50cyBvZiBTb3J0ZWQgU2V0IHR5cGVzIGFuZCB0aGVpciBhc3NvY2lhdGVkIHNjb3Jlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkaXRlcmF0b3IKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtYXRjaAogICAgICogQHBhcmFtICBpbnQgICRjb3VudAogICAgICogQHJldHVybiBhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6c2NhbihtaXhlZCAka2V5LCBtaXhlZCAmJGl0ZXJhdG9yLCBtaXhlZCAkbWF0Y2ggPSBudWxsLCBpbnQgJGNvdW50ID0gMCk6IGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCBrZXlzIG1hdGNoaW5nIHBhdHRlcm4uCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJHBhdHRlcm4KICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5cyhtaXhlZCAkcGF0dGVybik6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJbnRlcmFjdCB3aXRoIHRoZSBSZWRpcyBzbG93bG9nLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkb3BlcmF0aW9uCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGV4dHJhX2FyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGludHxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNsb3dsb2coc3RyaW5nICRvcGVyYXRpb24sIHN0cmluZyAuLi4kZXh0cmFfYXJncyk6IFJlbGF5fGFycmF5fGludHxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCB0aGUgbWVtYmVycyBvZiB0aGUgc2V0IHZhbHVlIHN0b3JlZCBhdCBgJGtleWAuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJHNldAogICAgICogQHJldHVybiBSZWxheXxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIHNtZW1iZXJzKG1peGVkICRzZXQpOiBSZWxheXxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBpZiBgJG1lbWJlcmAgaXMgYSBtZW1iZXIgb2YgdGhlIHNldCBzdG9yZWQgYXQgYCRrZXlgLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRzZXQKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW1iZXIKICAgICAqIEByZXR1cm4gUmVsYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIHNpc21lbWJlcihtaXhlZCAkc2V0LCBtaXhlZCAkbWVtYmVyKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIGVhY2ggbWVtYmVyIGlzIGEgbWVtYmVyIG9mIHRoZSBzZXQgc3RvcmVkIGF0IGAka2V5YC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkc2V0CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVycywuLi4KICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzbWlzbWVtYmVyKG1peGVkICRzZXQsIG1peGVkIC4uLiRtZW1iZXJzKTogUmVsYXl8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIG1lbWJlcnMgZnJvbSB0aGUgc2V0IHN0b3JlZCBhdCBgJGtleWAuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJHNldAogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbWJlcgogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbWJlcnMsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzcmVtKG1peGVkICRzZXQsIG1peGVkICRtZW1iZXIsIG1peGVkIC4uLiRtZW1iZXJzKTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBBZGQgdGhlIHNwZWNpZmllZCBtZW1iZXJzIHRvIHRoZSBzZXQgc3RvcmVkIGF0IGAka2V5YC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkc2V0CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVycywuLi4KICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNhZGQobWl4ZWQgJHNldCwgbWl4ZWQgJG1lbWJlciwgbWl4ZWQgLi4uJG1lbWJlcnMpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFNvcnQgdGhlIGVsZW1lbnRzIGluIGEgbGlzdCwgc2V0IG9yIHNvcnRlZCBzZXQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNvcnQobWl4ZWQgJGtleSwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IFJlbGF5fGFycmF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogU29ydCB0aGUgZWxlbWVudHMgaW4gYSBsaXN0LCBzZXQgb3Igc29ydGVkIHNldC4gUmVhZC1vbmx5IHZhcmlhbnQgb2YgU09SVC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGFycmF5ICAkb3B0aW9ucwogICAgICogQHJldHVybiBSZWxheXxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0X3JvKG1peGVkICRrZXksIGFycmF5ICRvcHRpb25zID0gW10pOiBSZWxheXxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogTW92ZSBtZW1iZXIgZnJvbSB0aGUgc2V0IGF0IHNvdXJjZSB0byB0aGUgc2V0IGF0IGRlc3RpbmF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRzcmNzZXQKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRkc3RzZXQKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW1iZXIKICAgICAqIEByZXR1cm4gUmVsYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzbW92ZShtaXhlZCAkc3Jjc2V0LCBtaXhlZCAkZHN0c2V0LCBtaXhlZCAkbWVtYmVyKTogUmVsYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhbmQgcmV0dXJucyBvbmUgb3IgbW9yZSByYW5kb20gbWVtYmVycyBmcm9tIHRoZSBzZXQgdmFsdWUgc3RvcmUgYXQgYCRrZXlgLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRzZXQKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3BvcChtaXhlZCAkc2V0LCBpbnQgJGNvdW50ID0gMSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIG9uZSBvciBtdWx0aXBsZSByYW5kb20gbWVtYmVycyBmcm9tIGEgc2V0LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRzZXQKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzcmFuZG1lbWJlcihtaXhlZCAkc2V0LCBpbnQgJGNvdW50ID0gMSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzZXQgY2FyZGluYWxpdHkgKG51bWJlciBvZiBlbGVtZW50cykgb2YgdGhlIHNldCBzdG9yZWQgYXQgYCRrZXlgLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2NhcmQobWl4ZWQgJGtleSk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZSBhIHNjcmlwdCBtYW5hZ2VtZW50IGNvbW1hbmQuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRjb21tYW5kCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGFyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNjcmlwdChzdHJpbmcgJGNvbW1hbmQsIHN0cmluZyAuLi4kYXJncyk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB2YWx1ZSBzdG9yZWQgYXQgYCRrZXlgLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RybGVuKG1peGVkICRrZXkpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBmaWVsZHMgY29udGFpbmVkIGluIHRoZSBoYXNoIHN0b3JlZCBhdCBgJGtleWAuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBobGVuKG1peGVkICRrZXkpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBzdG9yZWQgYXQgYCRrZXlgLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbGxlbihtaXhlZCAka2V5KTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBBY2tub3dsZWRnZSBvbmUgb3IgbW9yZSBJRHMgYXMgaGF2aW5nIGJlZW4gcHJvY2Vzc2VkIGJ5IHRoZSBjb25zdW1lciBncm91cC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGdyb3VwCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkaWRzCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB4YWNrKG1peGVkICRrZXksIHN0cmluZyAkZ3JvdXAsIGFycmF5ICRpZHMpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEFwcGVuZCBhIG1lc3NhZ2UgdG8gYSBzdHJlYW0uCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkaWQKICAgICAqIEBwYXJhbSAgaW50ICAkbWF4bGVuCiAgICAgKiBAcGFyYW0gIGJvb2wgICRhcHByb3gKICAgICAqIEBwYXJhbSAgYm9vbCAgJG5vbWtzdHJlYW0KICAgICAqIEByZXR1cm4gUmVsYXl8c3RyaW5nfGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB4YWRkKAogICAgICAgIHN0cmluZyAka2V5LAogICAgICAgIHN0cmluZyAkaWQsCiAgICAgICAgYXJyYXkgJHZhbHVlcywKICAgICAgICBpbnQgJG1heGxlbiA9IDAsCiAgICAgICAgYm9vbCAkYXBwcm94ID0gZmFsc2UsCiAgICAgICAgYm9vbCAkbm9ta3N0cmVhbSA9IGZhbHNlCiAgICApOiBSZWxheXxzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIENsYWltIG93bmVyc2hpcCBvZiBzdHJlYW0gbWVzc2FnZShzKS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgICRncm91cAogICAgICogQHBhcmFtICBzdHJpbmcgICRjb25zdW1lcgogICAgICogQHBhcmFtICBpbnQgICRtaW5faWRsZQogICAgICogQHBhcmFtICBhcnJheSAgJGlkcwogICAgICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB4Y2xhaW0oCiAgICAgICAgc3RyaW5nICRrZXksCiAgICAgICAgc3RyaW5nICRncm91cCwKICAgICAgICBzdHJpbmcgJGNvbnN1bWVyLAogICAgICAgIGludCAkbWluX2lkbGUsCiAgICAgICAgYXJyYXkgJGlkcywKICAgICAgICBhcnJheSAkb3B0aW9ucwogICAgKTogUmVsYXl8YXJyYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogQXV0b21hdGljYWxseSB0YWtlIG93bmVyc2hpcCBvZiBzdHJlYW0gbWVzc2FnZShzKSBieSBtZXRyaWNzCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZ3JvdXAKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkY29uc3VtZXIKICAgICAqIEBwYXJhbSAgaW50ICAkbWluX2lkbGUKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc3RhcnQKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEBwYXJhbSAgYm9vbCAgJGp1c3RpZAogICAgICogQHJldHVybiBSZWxheXxhcnJheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHhhdXRvY2xhaW0oCiAgICAgICAgc3RyaW5nICRrZXksCiAgICAgICAgc3RyaW5nICRncm91cCwKICAgICAgICBzdHJpbmcgJGNvbnN1bWVyLAogICAgICAgIGludCAkbWluX2lkbGUsCiAgICAgICAgc3RyaW5nICRzdGFydCwKICAgICAgICBpbnQgJGNvdW50ID0gLTEsCiAgICAgICAgYm9vbCAkanVzdGlkID0gZmFsc2UKICAgICk6IFJlbGF5fGJvb2x8YXJyYXkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbGVuZ3RoIG9mIGEgc3RyZWFtLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAka2V5CiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB4bGVuKHN0cmluZyAka2V5KTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtIHV0aWxpdHkgb3BlcmF0aW9ucyBoYXZpbmcgdG8gZG8gd2l0aCBjb25zdW1lciBncm91cHMKICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG9wZXJhdGlvbgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgICRncm91cAogICAgICogQHBhcmFtICBzdHJpbmcgICRpZF9vcl9jb25zdW1lcgogICAgICogQHBhcmFtICBib29sICAkbWtzdHJlYW0KICAgICAqIEBwYXJhbSAgaW50ICAkZW50cmllc19yZWFkCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHhncm91cCgKICAgICAgICBzdHJpbmcgJG9wZXJhdGlvbiwKICAgICAgICBtaXhlZCAka2V5ID0gbnVsbCwKICAgICAgICBzdHJpbmcgJGdyb3VwID0gbnVsbCwKICAgICAgICBzdHJpbmcgJGlkX29yX2NvbnN1bWVyID0gbnVsbCwKICAgICAgICBib29sICRta3N0cmVhbSA9IGZhbHNlLAogICAgICAgIGludCAkZW50cmllc19yZWFkID0gLTIKICAgICk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgb25lIG9yIG1vcmUgc3BlY2lmaWMgSURzIGZyb20gYSBzdHJlYW0uCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgYXJyYXkgICRpZHMKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHhkZWwoc3RyaW5nICRrZXksIGFycmF5ICRpZHMpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IGEgc3RyZWFtIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG9wZXJhdGlvbgogICAgICogQHBhcmFtICBzdHJpbmd8bnVsbCAgJGFyZzEKICAgICAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICRhcmcyCiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHhpbmZvKHN0cmluZyAkb3BlcmF0aW9uLCA/c3RyaW5nICRhcmcxID0gbnVsbCwgP3N0cmluZyAkYXJnMiA9IG51bGwsIGludCAkY291bnQgPSAtMSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBRdWVyeSBwZW5kaW5nIGVudHJpZXMgaW4gYSBzdHJlYW0uCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZ3JvdXAKICAgICAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICRzdGFydAogICAgICogQHBhcmFtICBzdHJpbmd8bnVsbCAgJGVuZAogICAgICogQHBhcmFtICBpbnQgICRjb3VudAogICAgICogQHBhcmFtICBzdHJpbmd8bnVsbCAgJGNvbnN1bWVyCiAgICAgKiBAcGFyYW0gIGludCAgJGlkbGUKICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24geHBlbmRpbmcoCiAgICAgICAgc3RyaW5nICRrZXksCiAgICAgICAgc3RyaW5nICRncm91cCwKICAgICAgICA/c3RyaW5nICRzdGFydCA9IG51bGwsCiAgICAgICAgP3N0cmluZyAkZW5kID0gbnVsbCwKICAgICAgICBpbnQgJGNvdW50ID0gLTEsCiAgICAgICAgP3N0cmluZyAkY29uc3VtZXIgPSBudWxsLAogICAgICAgIGludCAkaWRsZSA9IDAKICAgICk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBMaXN0cyBlbGVtZW50cyBpbiBhIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGVuZAogICAgICogQHBhcmFtICBpbnQgICRjb3VudCA9IC0xCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHhyYW5nZShtaXhlZCAka2V5LCBzdHJpbmcgJHN0YXJ0LCBzdHJpbmcgJGVuZCwgaW50ICRjb3VudCA9IC0xKTogUmVsYXl8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldCBhIHJhbmdlIG9mIGVudHJpZXMgZnJvbSBhIFNUUkVBTSBrZSBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZW5kCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24geHJldnJhbmdlKHN0cmluZyAka2V5LCBzdHJpbmcgJGVuZCwgc3RyaW5nICRzdGFydCwgaW50ICRjb3VudCA9IC0xKTogUmVsYXl8YXJyYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmVhZCBtZXNzYWdlcyBmcm9tIGEgc3RyZWFtLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRzdHJlYW1zCiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcGFyYW0gIGludCAgJGJsb2NrCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGJvb2x8bnVsbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB4cmVhZChhcnJheSAkc3RyZWFtcywgaW50ICRjb3VudCA9IC0xLCBpbnQgJGJsb2NrID0gLTEpOiBSZWxheXxhcnJheXxib29sfG51bGwge30KCiAgICAvKioKICAgICAqIFJlYWQgbWVzc2FnZXMgZnJvbSBhIHN0cmVhbSB1c2luZyBhIGNvbnN1bWVyIGdyb3VwLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZ3JvdXAKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkY29uc3VtZXIKICAgICAqIEBwYXJhbSAgYXJyYXkgICRzdHJlYW1zCiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcGFyYW0gIGludCAgJGJsb2NrCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGJvb2x8bnVsbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB4cmVhZGdyb3VwKAogICAgICAgIHN0cmluZyAkZ3JvdXAsCiAgICAgICAgc3RyaW5nICRjb25zdW1lciwKICAgICAgICBhcnJheSAkc3RyZWFtcywKICAgICAgICBpbnQgJGNvdW50ID0gMSwKICAgICAgICBpbnQgJGJsb2NrID0gMQogICAgKTogUmVsYXl8YXJyYXl8Ym9vbHxudWxsIHt9CgogICAgLyoqCiAgICAgKiBUcnVuY2F0ZSBhIFNUUkVBTSBrZXkgaW4gdmFyaW91cyB3YXlzLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAka2V5CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHRocmVzaG9sZAogICAgICogQHBhcmFtICBib29sICAkYXBwcm94CiAgICAgKiBAcGFyYW0gIGJvb2wgICRtaW5pZAogICAgICogQHBhcmFtICBpbnQgICRsaW1pdAogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24geHRyaW0oCiAgICAgICAgc3RyaW5nICRrZXksCiAgICAgICAgc3RyaW5nICR0aHJlc2hvbGQsCiAgICAgICAgYm9vbCAkYXBwcm94ID0gZmFsc2UsCiAgICAgICAgYm9vbCAkbWluaWQgPSBmYWxzZSwKICAgICAgICBpbnQgJGxpbWl0ID0gLTEKICAgICk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQWRkcyBhbGwgdGhlIHNwZWNpZmllZCBtZW1iZXJzIHdpdGggdGhlIHNwZWNpZmllZCBzY29yZXMgdG8gdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkYXJncywuLi4KICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gemFkZChtaXhlZCAka2V5LCBtaXhlZCAuLi4kYXJncyk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBXaGVuIGNhbGxlZCB3aXRoIGp1c3QgdGhlIGtleSBhcmd1bWVudCwgcmV0dXJuIGEgcmFuZG9tIGVsZW1lbnQgZnJvbSB0aGUgc29ydGVkIHNldCB2YWx1ZSBzdG9yZWQgYXQga2V5LgogICAgICogSWYgdGhlIHByb3ZpZGVkIGNvdW50IGFyZ3VtZW50IGlzIHBvc2l0aXZlLCByZXR1cm4gYW4gYXJyYXkgb2YgZGlzdGluY3QgZWxlbWVudHMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBhcnJheXxudWxsICAkb3B0aW9ucwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cmFuZG1lbWJlcihtaXhlZCAka2V5LCA/YXJyYXkgJG9wdGlvbnMgPSBudWxsKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNwZWNpZmllZCByYW5nZSBvZiBlbGVtZW50cyBpbiB0aGUgc29ydGVkIHNldCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc3RhcnQKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZW5kCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3B0aW9ucwogICAgICogQHJldHVybiBSZWxheXxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cmFuZ2UobWl4ZWQgJGtleSwgc3RyaW5nICRzdGFydCwgc3RyaW5nICRlbmQsIG1peGVkICRvcHRpb25zID0gbnVsbCk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb2YgZWxlbWVudHMgaW4gdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gIGludCAgJGVuZAogICAgICogQHBhcmFtICBtaXhlZCAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genJldnJhbmdlKG1peGVkICRrZXksIGludCAkc3RhcnQsIGludCAkZW5kLCBtaXhlZCAkb3B0aW9ucyA9IG51bGwpOiBSZWxheXxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBzb3J0ZWQgc2V0IGF0IGtleSB3aXRoIGEgc2NvcmUgYmV0d2VlbgogICAgICogbWluIGFuZCBtYXggKGluY2x1ZGluZyBlbGVtZW50cyB3aXRoIHNjb3JlIGVxdWFsIHRvIG1pbiBvciBtYXgpLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRzdGFydAogICAgICogQHBhcmFtICBtaXhlZCAgJGVuZAogICAgICogQHBhcmFtICBtaXhlZCAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genJhbmdlYnlzY29yZShtaXhlZCAka2V5LCBtaXhlZCAkc3RhcnQsIG1peGVkICRlbmQsIG1peGVkICRvcHRpb25zID0gbnVsbCk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhlIHNvcnRlZCBzZXQgYXQga2V5IHdpdGggYSBzY29yZSBiZXR3ZWVuCiAgICAgKiBtYXggYW5kIG1pbiAoaW5jbHVkaW5nIGVsZW1lbnRzIHdpdGggc2NvcmUgZXF1YWwgdG8gbWF4IG9yIG1pbikuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gIG1peGVkICAkZW5kCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3B0aW9ucwogICAgICogQHJldHVybiBSZWxheXxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cmV2cmFuZ2VieXNjb3JlKG1peGVkICRrZXksIG1peGVkICRzdGFydCwgbWl4ZWQgJGVuZCwgbWl4ZWQgJG9wdGlvbnMgPSBudWxsKTogUmVsYXl8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgc29ydGVkIHNldCBhdCBrZXkgd2l0aCBhIHNjb3JlIGJldHdlZW4KICAgICAqIG1heCBhbmQgbWluIChpbmNsdWRpbmcgZWxlbWVudHMgd2l0aCBzY29yZSBlcXVhbCB0byBtYXggb3IgbWluKS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkZHN0CiAgICAgKiBAcGFyYW0gIG1peGVkICAkc3JjCiAgICAgKiBAcGFyYW0gIG1peGVkICAkc3RhcnQKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRlbmQKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cmFuZ2VzdG9yZShtaXhlZCAkZHN0LCBtaXhlZCAkc3JjLCBtaXhlZCAkc3RhcnQsIG1peGVkICRlbmQsIG1peGVkICRvcHRpb25zID0gbnVsbCk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogV2hlbiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgc29ydGVkIHNldCBhcmUgaW5zZXJ0ZWQgd2l0aCB0aGUgc2FtZSBzY29yZSwKICAgICAqIGluIG9yZGVyIHRvIGZvcmNlIGxleGljb2dyYXBoaWNhbCBvcmRlcmluZywgdGhpcyBjb21tYW5kIHJldHVybnMgYWxsCiAgICAgKiB0aGUgZWxlbWVudHMgaW4gdGhlIHNvcnRlZCBzZXQgYXQga2V5IHdpdGggYSB2YWx1ZSBiZXR3ZWVuIG1pbiBhbmQgbWF4LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtaW4KICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtYXgKICAgICAqIEBwYXJhbSAgaW50ICAkb2Zmc2V0CiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHpyYW5nZWJ5bGV4KG1peGVkICRrZXksIG1peGVkICRtaW4sIG1peGVkICRtYXgsIGludCAkb2Zmc2V0ID0gLTEsIGludCAkY291bnQgPSAtMSk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBXaGVuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBzb3J0ZWQgc2V0IGFyZSBpbnNlcnRlZCB3aXRoIHRoZSBzYW1lIHNjb3JlLAogICAgICogaW4gb3JkZXIgdG8gZm9yY2UgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyaW5nLCB0aGlzIGNvbW1hbmQgcmV0dXJucyBhbGwKICAgICAqIHRoZSBlbGVtZW50cyBpbiB0aGUgc29ydGVkIHNldCBhdCBrZXkgd2l0aCBhIHZhbHVlIGJldHdlZW4gbWF4IGFuZCBtaW4uCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1heAogICAgICogQHBhcmFtICBtaXhlZCAgJG1pbgogICAgICogQHBhcmFtICBpbnQgICRvZmZzZXQKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gUmVsYXl8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genJldnJhbmdlYnlsZXgobWl4ZWQgJGtleSwgbWl4ZWQgJG1heCwgbWl4ZWQgJG1pbiwgaW50ICRvZmZzZXQgPSAtMSwgaW50ICRjb3VudCA9IC0xKTogUmVsYXl8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJhbmsgb2YgbWVtYmVyIGluIHRoZSBzb3J0ZWQgc2V0IHN0b3JlZCBhdCBrZXksIHdpdGggdGhlIHNjb3JlcwogICAgICogb3JkZXJlZCBmcm9tIGxvdyB0byBoaWdoLiBUaGUgcmFuayAob3IgaW5kZXgpIGlzIDAtYmFzZWQsIHdoaWNoIG1lYW5zCiAgICAgKiB0aGF0IHRoZSBtZW1iZXIgd2l0aCB0aGUgbG93ZXN0IHNjb3JlIGhhcyByYW5rIDAuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJHJhbmsKICAgICAqIEBwYXJhbSAgYm9vbCAgJHdpdGhzY29yZQogICAgICogQHJldHVybiBSZWxheXxhcnJheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genJhbmsobWl4ZWQgJGtleSwgbWl4ZWQgJHJhbmssIGJvb2wgJHdpdGhzY29yZSA9IGZhbHNlKTogUmVsYXl8YXJyYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByYW5rIG9mIG1lbWJlciBpbiB0aGUgc29ydGVkIHNldCBzdG9yZWQgYXQga2V5LCB3aXRoIHRoZSBzY29yZXMKICAgICAqIG9yZGVyZWQgZnJvbSBoaWdoIHRvIGxvdy4gVGhlIHJhbmsgKG9yIGluZGV4KSBpcyAwLWJhc2VkLCB3aGljaCBtZWFucwogICAgICogdGhhdCB0aGUgbWVtYmVyIHdpdGggdGhlIGhpZ2hlc3Qgc2NvcmUgaGFzIHJhbmsgMC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkcmFuawogICAgICogQHBhcmFtICBib29sICAkd2l0aHNjb3JlCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cmV2cmFuayhtaXhlZCAka2V5LCBtaXhlZCAkcmFuaywgYm9vbCAkd2l0aHNjb3JlID0gZmFsc2UpOiBSZWxheXxhcnJheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBtZW1iZXJzIGZyb20gdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IGtleS4KICAgICAqIE5vbiBleGlzdGluZyBtZW1iZXJzIGFyZSBpZ25vcmVkLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRhcmdzLC4uLgogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genJlbShtaXhlZCAka2V5LCBtaXhlZCAuLi4kYXJncyk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogV2hlbiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgc29ydGVkIHNldCBhcmUgaW5zZXJ0ZWQgd2l0aCB0aGUgc2FtZSBzY29yZSwKICAgICAqIGluIG9yZGVyIHRvIGZvcmNlIGxleGljb2dyYXBoaWNhbCBvcmRlcmluZywgdGhpcyBjb21tYW5kIHJlbW92ZXMgYWxsCiAgICAgKiBlbGVtZW50cyBpbiB0aGUgc29ydGVkIHNldCBzdG9yZWQgYXQga2V5IGJldHdlZW4gdGhlCiAgICAgKiBsZXhpY29ncmFwaGljYWwgcmFuZ2Ugc3BlY2lmaWVkIGJ5IG1pbiBhbmQgbWF4LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtaW4KICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtYXgKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHpyZW1yYW5nZWJ5bGV4KG1peGVkICRrZXksIG1peGVkICRtaW4sIG1peGVkICRtYXgpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGluIHRoZSBzb3J0ZWQgc2V0IHN0b3JlZCBhdCBrZXkgd2l0aCByYW5rIGJldHdlZW4KICAgICAqIHN0YXJ0IGFuZCBzdG9wLiBCb3RoIHN0YXJ0IGFuZCBzdG9wIGFyZSAwIC1iYXNlZCBpbmRleGVzIHdpdGggMCBiZWluZwogICAgICogdGhlIGVsZW1lbnQgd2l0aCB0aGUgbG93ZXN0IHNjb3JlLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkc3RhcnQKICAgICAqIEBwYXJhbSAgaW50ICAkZW5kCiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cmVtcmFuZ2VieXJhbmsobWl4ZWQgJGtleSwgaW50ICRzdGFydCwgaW50ICRlbmQpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGluIHRoZSBzb3J0ZWQgc2V0IHN0b3JlZCBhdCBrZXkgd2l0aAogICAgICogYSBzY29yZSBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtaW4KICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtYXgKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHpyZW1yYW5nZWJ5c2NvcmUobWl4ZWQgJGtleSwgbWl4ZWQgJG1pbiwgbWl4ZWQgJG1heCk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc29ydGVkIHNldCBjYXJkaW5hbGl0eSAobnVtYmVyIG9mIGVsZW1lbnRzKSBvZiB0aGUgc29ydGVkIHNldCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gemNhcmQobWl4ZWQgJGtleSk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzb3J0ZWQgc2V0IGF0IGtleSB3aXRoIGEgc2NvcmUgYmV0d2VlbiBtaW4gYW5kIG1heC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWluCiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWF4CiAgICAgKiBAcmV0dXJuIFJlbGF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6Y291bnQobWl4ZWQgJGtleSwgbWl4ZWQgJG1pbiwgbWl4ZWQgJG1heCk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVGhpcyBjb21tYW5kIGlzIHNpbWlsYXIgdG8gWkRJRkZTVE9SRSwgYnV0IGluc3RlYWQgb2Ygc3RvcmluZyB0aGUKICAgICAqIHJlc3VsdGluZyBzb3J0ZWQgc2V0LCBpdCBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50LgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrZXlzCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkb3B0aW9ucwogICAgICogQHJldHVybiBSZWxheXxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6ZGlmZihhcnJheSAka2V5cywgP2FycmF5ICRvcHRpb25zID0gbnVsbCk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBDb21wdXRlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgYWxsIHN1Y2Nlc3NpdmUKICAgICAqIGlucHV0IHNvcnRlZCBzZXRzIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiBkZXN0aW5hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkZHN0CiAgICAgKiBAcGFyYW0gIGFycmF5ICAka2V5cwogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gemRpZmZzdG9yZShtaXhlZCAkZHN0LCBhcnJheSAka2V5cyk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSW5jcmVtZW50cyB0aGUgc2NvcmUgb2YgbWVtYmVyIGluIHRoZSBzb3J0ZWQgc2V0IHN0b3JlZCBhdCBrZXkgYnkgaW5jcmVtZW50LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgZmxvYXQgICRzY29yZQogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbQogICAgICogQHJldHVybiBSZWxheXxmbG9hdHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6aW5jcmJ5KG1peGVkICRrZXksIGZsb2F0ICRzY29yZSwgbWl4ZWQgJG1lbSk6IFJlbGF5fGZsb2F0fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBXaGVuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBzb3J0ZWQgc2V0IGFyZSBpbnNlcnRlZCB3aXRoIHRoZSBzYW1lIHNjb3JlLAogICAgICogaW4gb3JkZXIgdG8gZm9yY2UgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyaW5nLCB0aGlzIGNvbW1hbmQgcmV0dXJucyB0aGUKICAgICAqIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc29ydGVkIHNldCBhdCBrZXkgd2l0aCBhIHZhbHVlIGJldHdlZW4gbWluIGFuZCBtYXguCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1pbgogICAgICogQHBhcmFtICBtaXhlZCAgJG1heAogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gemxleGNvdW50KG1peGVkICRrZXksIG1peGVkICRtaW4sIG1peGVkICRtYXgpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNjb3JlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBtZW1iZXJzIGluIHRoZSBzb3J0ZWQgc2V0IHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbXMsLi4uCiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHptc2NvcmUobWl4ZWQgJGtleSwgbWl4ZWQgLi4uJG1lbXMpOiBSZWxheXxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2NvcmUgb2YgbWVtYmVyIGluIHRoZSBzb3J0ZWQgc2V0IGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcmV0dXJuIFJlbGF5fGZsb2F0fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHpzY29yZShtaXhlZCAka2V5LCBtaXhlZCAkbWVtYmVyKTogUmVsYXl8ZmxvYXR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFRoaXMgY29tbWFuZCBpcyBzaW1pbGFyIHRvIFpJTlRFUlNUT1JFLCBidXQgaW5zdGVhZCBvZiBzdG9yaW5nCiAgICAgKiB0aGUgcmVzdWx0aW5nIHNvcnRlZCBzZXQsIGl0IGlzIHJldHVybmVkIHRvIHRoZSBjbGllbnQuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGtleXMKICAgICAqIEBwYXJhbSAgYXJyYXkgICR3ZWlnaHRzCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3B0aW9ucwogICAgICogQHJldHVybiBSZWxheXxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6aW50ZXIoYXJyYXkgJGtleXMsID9hcnJheSAkd2VpZ2h0cyA9IG51bGwsIG1peGVkICRvcHRpb25zID0gbnVsbCk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJbnRlcnNlY3QgbXVsdGlwbGUgc29ydGVkIHNldHMgYW5kIHJldHVybiB0aGUgY2FyZGluYWxpdHkgb2YgdGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAka2V5cwogICAgICogQHBhcmFtICBpbnQgICRsaW1pdAogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gemludGVyY2FyZChhcnJheSAka2V5cywgaW50ICRsaW1pdCA9IC0xKTogUmVsYXl8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBDb21wdXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIG51bWtleXMgc29ydGVkIHNldHMgZ2l2ZW4gYnkgdGhlCiAgICAgKiBzcGVjaWZpZWQga2V5cywgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIGRlc3RpbmF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRkc3QKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrZXlzCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkd2VpZ2h0cwogICAgICogQHBhcmFtICBtaXhlZCAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gUmVsYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHppbnRlcnN0b3JlKG1peGVkICRkc3QsIGFycmF5ICRrZXlzLCA/YXJyYXkgJHdlaWdodHMgPSBudWxsLCBtaXhlZCAkb3B0aW9ucyA9IG51bGwpOiBSZWxheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFRoaXMgY29tbWFuZCBpcyBzaW1pbGFyIHRvIFpVTklPTlNUT1JFLCBidXQgaW5zdGVhZCBvZiBzdG9yaW5nCiAgICAgKiB0aGUgcmVzdWx0aW5nIHNvcnRlZCBzZXQsIGl0IGlzIHJldHVybmVkIHRvIHRoZSBjbGllbnQuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGtleXMKICAgICAqIEBwYXJhbSAgYXJyYXkgICR3ZWlnaHRzCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3B0aW9ucwogICAgICogQHJldHVybiBSZWxheXxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6dW5pb24oYXJyYXkgJGtleXMsID9hcnJheSAkd2VpZ2h0cyA9IG51bGwsIG1peGVkICRvcHRpb25zID0gbnVsbCk6IFJlbGF5fGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBDb21wdXRlcyB0aGUgdW5pb24gb2YgbnVta2V5cyBzb3J0ZWQgc2V0cyBnaXZlbiBieSB0aGUKICAgICAqIHNwZWNpZmllZCBrZXlzLCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gZGVzdGluYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGRzdAogICAgICogQHBhcmFtICBhcnJheSAgJGtleXMKICAgICAqIEBwYXJhbSAgYXJyYXkgICR3ZWlnaHRzCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3B0aW9ucwogICAgICogQHJldHVybiBSZWxheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genVuaW9uc3RvcmUobWl4ZWQgJGRzdCwgYXJyYXkgJGtleXMsID9hcnJheSAkd2VpZ2h0cyA9IG51bGwsIG1peGVkICRvcHRpb25zID0gbnVsbCk6IFJlbGF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhbmQgcmV0dXJucyB1cCB0byBjb3VudCBtZW1iZXJzIHdpdGggdGhlIGxvd2VzdAogICAgICogc2NvcmVzIGluIHRoZSBzb3J0ZWQgc2V0IHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRjb3VudAogICAgICogQHJldHVybiBSZWxheXxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cG9wbWluKG1peGVkICRrZXksIGludCAkY291bnQgPSAxKTogUmVsYXl8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYW5kIHJldHVybnMgdXAgdG8gY291bnQgbWVtYmVycyB3aXRoIHRoZSBoaWdoZXN0CiAgICAgKiBzY29yZXMgaW4gdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIFJlbGF5fGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHpwb3BtYXgobWl4ZWQgJGtleSwgaW50ICRjb3VudCA9IDEpOiBSZWxheXxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBrZXlzIGNhY2hlZCBpbiBydW50aW1lIG1lbW9yeS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgVGVtcG9yYXJ5IGRlYnVnIGhlbHBlci4gRG8gbm90IHVzZS4KICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBfZ2V0S2V5cygpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaWNlbnNlLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbGljZW5zZSgpOiBhcnJheSB7fQp9Cjw/cGhwCgpuYW1lc3BhY2UgUmVsYXk7CgovKioKICogUmVsYXkgU2VudGluZWwgY2xpZW50LgogKgogKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vZG9jcy9tYW5hZ2VtZW50L3NlbnRpbmVsLwogKi8KY2xhc3MgU2VudGluZWwKewogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBvbiBgLUVSUmAgcmVwbGllcy4gIERlZmF1bHQ6IGZhbHNlCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9USFJPV19PTl9FUlIgPSAxOwoKICAgIC8qKgogICAgICogV2hldGhlciBcUmVsYXlcU2VudGluZWwgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZGlzY292ZXIgb3RoZXIgc2VudGluZWxzIGluIHRoZQogICAgICogY2x1c3Rlciwgc28gaXQgbWF5IHVzZSB0aGVtIGlmIHdlIGZhaWwgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlyc3Qgb25lLgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfQVVUT19ESVNDT1ZFUiA9IDI7CgogICAgLyoqCiAgICAgKiBFc3RhYmxpc2hlcyBhIG5ldyBjb25uZWN0aW9uIHRvIGEgU2VudGluZWwgaW5zdGFuY2UuCiAgICAgKgogICAgICogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggUGhwUmVkaXMgNi54LCB0aGUKICAgICAqIGNvbnN0cnVjdG9yIG1heSBiZSBjYWxsZWQgd2l0aCBhIHNpbmdsZSBvcHRpb25zIGFycmF5LgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXl8c3RyaW5nfG51bGwgICRob3N0CiAgICAgKiBAcGFyYW0gIGludCAgJHBvcnQKICAgICAqIEBwYXJhbSAgZmxvYXQgICR0aW1lb3V0CiAgICAgKiBAcGFyYW0gIG1peGVkICAkcGVyc2lzdGVudAogICAgICogQHBhcmFtICBpbnQgICRyZXRyeV9pbnRlcnZhbAogICAgICogQHBhcmFtICBmbG9hdCAgJHJlYWRfdGltZW91dAogICAgICogQHBhcmFtICBtaXhlZCAgJGF1dGgKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xTZXJ2ZXJdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgYXJyYXl8c3RyaW5nfG51bGwgJGhvc3QgPSBudWxsLAogICAgICAgIGludCAkcG9ydCA9IDI2Mzc5LAogICAgICAgIGZsb2F0ICR0aW1lb3V0ID0gMCwKICAgICAgICBtaXhlZCAkcGVyc2lzdGVudCA9IG51bGwsCiAgICAgICAgaW50ICRyZXRyeV9pbnRlcnZhbCA9IDAsCiAgICAgICAgZmxvYXQgJHJlYWRfdGltZW91dCA9IDAsCiAgICAgICAgI1tcU2Vuc2l0aXZlUGFyYW1ldGVyXSBtaXhlZCAkYXV0aCA9IG51bGwKICAgICkge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIHRoZSBjdXJyZW50IFNlbnRpbmVsIGNvbmZpZ3VyYXRpb24gaXMgYWJsZSB0byByZWFjaCB0aGUgcXVvcnVtIG5lZWRlZAogICAgICogdG8gZmFpbG92ZXIgYSBtYXN0ZXIsIGFuZCB0aGUgbWFqb3JpdHkgbmVlZGVkIHRvIGF1dGhvcml6ZSB0aGUgZmFpbG92ZXIuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRtYXN0ZXIKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBja3F1b3J1bShzdHJpbmcgJG1hc3Rlcik6IGJvb2wge30KCiAgICAvKioKICAgICAqIEZvcmNlIGEgZmFpbG92ZXIgYXMgaWYgdGhlIG1hc3RlciB3YXMgbm90IHJlYWNoYWJsZSwKICAgICAqIGFuZCB3aXRob3V0IGFza2luZyBmb3IgYWdyZWVtZW50IHRvIG90aGVyIFNlbnRpbmVscy4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG1hc3RlcgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGZhaWxvdmVyKHN0cmluZyAkbWFzdGVyKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogRm9yY2UgU2VudGluZWwgdG8gcmV3cml0ZSBpdHMgY29uZmlndXJhdGlvbiBvbiBkaXNrLAogICAgICogaW5jbHVkaW5nIHRoZSBjdXJyZW50IFNlbnRpbmVsIHN0YXRlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBmbHVzaGNvbmZpZygpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBpcCBhbmQgcG9ydCBudW1iZXIgb2YgdGhlIG1hc3RlciB3aXRoIHRoYXQgbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG1hc3RlcgogICAgICogQHJldHVybiBhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNYXN0ZXJBZGRyQnlOYW1lKHN0cmluZyAkbWFzdGVyKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN0YXRlIGFuZCBpbmZvIG9mIHRoZSBzcGVjaWZpZWQgbWFzdGVyLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWFzdGVyCiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIG1hc3RlcihzdHJpbmcgJG1hc3Rlcik6IGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBtb25pdG9yZWQgbWFzdGVycyBhbmQgdGhlaXIgc3RhdGUuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXN0ZXJzKCk6IGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgU2VudGluZWwgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbXlpZCgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIFJldHVybnMgUE9ORyBpZiBubyBtZXNzYWdlIGlzIHByb3ZpZGVkLCBvdGhlcndpc2UgcmV0dXJucyB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xudWxsICAkbWVzc2FnZQogICAgICogQHJldHVybiBzdHJpbmd8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwaW5nKD9zdHJpbmcgJG1lc3NhZ2UgPSBudWxsKTogc3RyaW5nfGJvb2wge30KCiAgICAvKioKICAgICAqIFdpbGwgcmVzZXQgYWxsIHRoZSBtYXN0ZXJzIHdpdGggbWF0Y2hpbmcgbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHBhdHRlcm4KICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHJlc2V0KHN0cmluZyAkcGF0dGVybik6IGludCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGxpc3Qgb2Ygc2VudGluZWwgaW5zdGFuY2VzIGZvciB0aGlzIG1hc3RlciwgYW5kIHRoZWlyIHN0YXRlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWFzdGVyCiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNlbnRpbmVscyhzdHJpbmcgJG1hc3Rlcik6IGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTaG93IGEgbGlzdCBvZiByZXBsaWNhcyBmb3IgdGhpcyBtYXN0ZXIsIGFuZCB0aGVpciBzdGF0ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG1hc3RlcgogICAgICogQHJldHVybiBhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzbGF2ZXMoc3RyaW5nICRtYXN0ZXIpOiBhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbGFzdCBlcnJvciBtZXNzYWdlLCBpZiBhbnkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RFcnJvcigpOiBzdHJpbmd8bnVsbCB7fQoKICAgIC8qKgogICAgICogU2V0cyBhIGNsaWVudCBvcHRpb24uCiAgICAgKgogICAgICogQHBhcmFtICBpbnQgICRvcHRpb24KICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9uKGludCAkb3B0aW9uLCBtaXhlZCAkdmFsdWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgY2xpZW50IG9wdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAgJG9wdGlvbgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIGdldE9wdGlvbihpbnQgJG9wdGlvbik6IG1peGVkIHt9Cn0KPD9waHAKCm5hbWVzcGFjZSBSZWxheTsKCi8qKgogKiBSZWxheSBDbHVzdGVyIGNsaWVudC4KICoKICogQHNlZSBodHRwczovL3JlZGlzLmlvL2RvY3MvbWFuYWdlbWVudC9zY2FsaW5nLwogKi8KY2xhc3MgQ2x1c3Rlcgp7CiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBmYWlsb3ZlciBvcHRpb24uCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9TTEFWRV9GQUlMT1ZFUiA9IDU7CgogICAgLyoqCiAgICAgKiBJbnRlZ2VyIHJlcHJlc2VudGluZyBubyBmYWlsb3Zlci4KICAgICAqCiAgICAgKiBFbmFibGVkIGJ5IGRlZmF1bHQuIFNlbmQgY29tbWFuZHMgdG8gbWFzdGVyIG5vZGVzIG9ubHkuCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IEZBSUxPVkVSX05PTkUgPSAwOwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgZXJyb3IgZmFpbG92ZXIuCiAgICAgKgogICAgICogU2VuZCByZWFkb25seSBjb21tYW5kcyB0byBzbGF2ZSBub2RlcyBpZiBtYXN0ZXIgaXMgdW5yZWFjaGFibGUuCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IEZBSUxPVkVSX0VSUk9SID0gMTsKCiAgICAvKioKICAgICAqIEludGVnZXIgcmVwcmVzZW50aW5nIGRpc3RyaWJ1dGUgZmFpbG92ZXIuCiAgICAgKgogICAgICogQWx3YXlzIGRpc3RyaWJ1dGUgcmVhZG9ubHkgY29tbWFuZHMgYmV0d2VlbiBtYXN0ZXIgYW5kIHNsYXZlcywgYXQgcmFuZG9tCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IEZBSUxPVkVSX0RJU1RSSUJVVEUgPSAyOwoKICAgIC8qKgogICAgICogSW50ZWdlciByZXByZXNlbnRpbmcgZGlzdHJpYnV0ZSBzbGF2ZXMgZmFpbG92ZXIuCiAgICAgKgogICAgICogQWx3YXlzIGRpc3RyaWJ1dGUgcmVhZG9ubHkgY29tbWFuZHMgdG8gdGhlIHNsYXZlcywgYXQgcmFuZG9tCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IEZBSUxPVkVSX0RJU1RSSUJVVEVfU0xBVkVTID0gMzsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIGNsdXN0ZXIgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICRuYW1lCiAgICAgKiBAcGFyYW0gIGFycmF5fG51bGwgICRzZWVkcwogICAgICogQHBhcmFtICBpbnR8ZmxvYXQgICRjb25uZWN0X3RpbWVvdXQKICAgICAqIEBwYXJhbSAgaW50fGZsb2F0ICAkY29tbWFuZF90aW1lb3V0CiAgICAgKiBAcGFyYW0gIGJvb2wgICRwZXJzaXN0ZW50CiAgICAgKiBAcGFyYW0gIG1peGVkICAkYXV0aAogICAgICogQHBhcmFtICBhcnJheXxudWxsICAkY29udGV4dAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFNlcnZlcl0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBzdHJpbmd8bnVsbCAkbmFtZSwKICAgICAgICBhcnJheXxudWxsICRzZWVkcyA9IG51bGwsCiAgICAgICAgaW50fGZsb2F0ICRjb25uZWN0X3RpbWVvdXQgPSAwLAogICAgICAgIGludHxmbG9hdCAkY29tbWFuZF90aW1lb3V0ID0gMCwKICAgICAgICBib29sICRwZXJzaXN0ZW50ID0gZmFsc2UsCiAgICAgICAgI1tcU2Vuc2l0aXZlUGFyYW1ldGVyXSBtaXhlZCAkYXV0aCA9IG51bGwsCiAgICAgICAgYXJyYXl8bnVsbCAkY29udGV4dCA9IG51bGwKICAgICkge30KCiAgICAvKioKICAgICAqIENvbXByZXNzIGRhdGEgd2l0aCBSZWxheSdzIGN1cnJlbnRseSBjb25maWd1cmVkIGNvbXByZXNzaW9uIGFsZ29yaXRobS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIF9jb21wcmVzcyhzdHJpbmcgJHZhbHVlKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbWlsbGlzZW9jb25kcyBzaW5jZSBSZWxheSBoYXMgcmVjZWl2ZWQgYSByZXBseSBmcm9tIHRoZSBjbHVzdGVyLgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgICNbQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBpZGxlVGltZSgpOiBpbnQge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZW5kcG9pbnRzIGFsb25nIHdpdGggZWFjaCBvZiB0aGVpciBrZXlzIGNhY2hlZCBpbiBydW50aW1lIG1lbW9yeS4KICAgICAqCiAgICAgKiBAaW50ZXJuYWwgVGVtcG9yYXJ5IGRlYnVnIGhlbHBlci4gRG8gbm90IHVzZS4KICAgICAqIEByZXR1cm4gYXJyYXl8ZmFsc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9nZXRLZXlzKCk6IGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYSBsaXN0IG9mIG1hc3RlciBub2RlcwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBfbWFzdGVycygpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2VyaWFsaXplZCBhbmQgY29tcHJlc3NlZCB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gX3BhY2sobWl4ZWQgJHZhbHVlKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSB3aXRoIHRoZSBwcmVmaXguCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIF9wcmVmaXgobWl4ZWQgJHZhbHVlKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBfc2VyaWFsaXplKG1peGVkICR2YWx1ZSk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogVW5jb21wcmVzcyBkYXRhIHdpdGggUmVsYXkncyBjdXJyZW50bHkgY29uZmlndXJlZCBjb21wcmVzc2lvbiBhbGdvcml0aG0uCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICR2YWx1ZQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBfdW5jb21wcmVzcyhzdHJpbmcgJHZhbHVlKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB1bnNlcmlhbGl6ZWQgYW5kIGRlY29tcHJlc3NlZCB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gX3VucGFjayhzdHJpbmcgJHZhbHVlKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHVuc2VyaWFsaXplZCB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gX3Vuc2VyaWFsaXplKHN0cmluZyAkdmFsdWUpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogSW50ZXJhY3Qgd2l0aCBSZWRpcycgQUNMcwogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkb3BlcmF0aW9uCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGFyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGFjbChhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzLCBzdHJpbmcgJG9wZXJhdGlvbiwgc3RyaW5nIC4uLiRhcmdzKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEFkZHMgYWxsb3cgcGF0dGVybihzKS4gT25seSBtYXRjaGluZyBrZXlzIHdpbGwgYmUgY2FjaGVkIGluIG1lbW9yeS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHBhdHRlcm4sLi4uCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIGFkZEFsbG93UGF0dGVybnMoc3RyaW5nIC4uLiRwYXR0ZXJuKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBBZGRzIGlnbm9yZSBwYXR0ZXJuKHMpLiBNYXRjaGluZyBrZXlzIHdpbGwgbm90IGJlIGNhY2hlZCBpbiBtZW1vcnkuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRwYXR0ZXJuLC4uLgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRJZ25vcmVQYXR0ZXJucyhzdHJpbmcgLi4uJHBhdHRlcm4pOiBpbnQge30KCiAgICAvKioKICAgICAqIElmIGtleSBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgYSBzdHJpbmcsIHRoaXMgY29tbWFuZCBhcHBlbmRzCiAgICAgKiB0aGUgdmFsdWUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLiBJZiBrZXkgZG9lcyBub3QgZXhpc3QKICAgICAqIGl0IGlzIGNyZWF0ZWQgYW5kIHNldCBhcyBhbiBlbXB0eSBzdHJpbmcsIHNvIEFQUEVORCB3aWxsCiAgICAgKiBiZSBzaW1pbGFyIHRvIFNFVCBpbiB0aGlzIHNwZWNpYWwgY2FzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKG1peGVkICRrZXksIG1peGVkICR2YWx1ZSk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBBc3luY2hyb25vdXNseSByZXdyaXRlIHRoZSBhcHBlbmQtb25seSBmaWxlLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXl8c3RyaW5nICAka2V5X29yX2FkZHJlc3MKICAgICAqIEByZXR1cm4gQ2x1c3Rlcnxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJncmV3cml0ZWFvZihhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzKTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBBc3luY2hyb25vdXNseSBzYXZlIHRoZSBkYXRhc2V0IHRvIGRpc2suCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheXxzdHJpbmcgICRrZXlfb3JfYWRkcmVzcwogICAgICogQHBhcmFtICBib29sICAkc2NoZWR1bGUKICAgICAqIEByZXR1cm4gQ2x1c3Rlcnxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJnc2F2ZShhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzLCBib29sICRzY2hlZHVsZSA9IGZhbHNlKTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBQYXVzIHRoZSBjbGllbnQgdW50aWwgc3VmZmljaWVudCBsb2NhbCBhbmQvb3IgcmVtb3RlIEFPRiBkYXRhIGhhcyBiZWVuIGZsdXNoZWQgdG8gZGlzay4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5fHN0cmluZyAgJGtleV9vcl9hZGRyZXNzCiAgICAgKiBAcGFyYW0gIGludCAgJG51bWxvY2FsCiAgICAgKiBAcGFyYW0gIGludCAgJG51bXJlbW90ZQogICAgICogQHJldHVybiBSZWxheXxhcnJheQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB3YWl0YW9mKGFycmF5fHN0cmluZyAka2V5X29yX2FkZHJlc3MsIGludCAkbnVtbG9jYWwsIGludCAkbnVtcmVtb3RlLCBpbnQgJHRpbWVvdXQpOiBSZWxheXxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQ291bnQgdGhlIG51bWJlciBvZiBzZXQgYml0cyAocG9wdWxhdGlvbiBjb3VudGluZykgaW4gYSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRzdGFydAogICAgICogQHBhcmFtICBpbnQgICRlbmQKICAgICAqIEBwYXJhbSAgYm9vbCAgJGJ5X2JpdAogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIGJpdGNvdW50KG1peGVkICRrZXksIGludCAkc3RhcnQgPSAwLCBpbnQgJGVuZCA9IC0xLCBib29sICRieV9iaXQgPSBmYWxzZSk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtIGEgYml0d2lzZSBvcGVyYXRpb24gb24gb25lIG9yIG1vcmUga2V5cywgc3RvcmluZyB0aGUgcmVzdWx0IGluIGEgbmV3IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG9wZXJhdGlvbgogICAgICogQHBhcmFtICBzdHJpbmcgICRkc3RrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc3Jja2V5CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG90aGVyX2tleXMsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJpdG9wKHN0cmluZyAkb3BlcmF0aW9uLCBzdHJpbmcgJGRzdGtleSwgc3RyaW5nICRzcmNrZXksIHN0cmluZyAuLi4kb3RoZXJfa2V5cyk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBiaXQgc2V0IHRvIDEgb3IgMCBpbiBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJGJpdAogICAgICogQHBhcmFtICBpbnQgICRzdGFydAogICAgICogQHBhcmFtICBpbnQgICRlbmQKICAgICAqIEBwYXJhbSAgYm9vbCAgJGJ5X2JpdAogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBiaXRwb3MobWl4ZWQgJGtleSwgaW50ICRiaXQsIGludCAkc3RhcnQgPSBudWxsLCBpbnQgJGVuZCA9IG51bGwsIGJvb2wgJGJ5X2JpdCA9IGZhbHNlKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEJMTU9WRSBpcyB0aGUgYmxvY2tpbmcgdmFyaWFudCBvZiBMTU9WRS4gV2hlbiBzb3VyY2UgY29udGFpbnMgZWxlbWVudHMsCiAgICAgKiB0aGlzIGNvbW1hbmQgYmVoYXZlcyBleGFjdGx5IGxpa2UgTE1PVkUuIFdoZW4gdXNlZCBpbnNpZGUgYQogICAgICogTVVMVEkvRVhFQyBibG9jaywgdGhpcyBjb21tYW5kIGJlaGF2ZXMgZXhhY3RseSBsaWtlIExNT1ZFLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRzcmNrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRkc3RrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc3JjcG9zCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGRzdHBvcwogICAgICogQHBhcmFtICBmbG9hdCAgJHRpbWVvdXQKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxzdHJpbmd8bnVsbHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBibG1vdmUobWl4ZWQgJHNyY2tleSwgbWl4ZWQgJGRzdGtleSwgc3RyaW5nICRzcmNwb3MsIHN0cmluZyAkZHN0cG9zLCBmbG9hdCAkdGltZW91dCk6IENsdXN0ZXJ8c3RyaW5nfG51bGx8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFBvcCBlbGVtZW50cyBmcm9tIGEgbGlzdCwgb3IgYmxvY2sgdW50aWwgb25lIGlzIGF2YWlsYWJsZQogICAgICoKICAgICAqIEBwYXJhbSAgZmxvYXQgICR0aW1lb3V0CiAgICAgKiBAcGFyYW0gIGFycmF5ICAka2V5cwogICAgICogQHBhcmFtICBzdHJpbmcgICRmcm9tCiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8bnVsbHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBibG1wb3AoZmxvYXQgJHRpbWVvdXQsIGFycmF5ICRrZXlzLCBzdHJpbmcgJGZyb20sIGludCAkY291bnQgPSAxKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEJMUE9QIGlzIGEgYmxvY2tpbmcgbGlzdCBwb3AgcHJpbWl0aXZlLiBJdCBpcyB0aGUgYmxvY2tpbmcgdmVyc2lvbiBvZiBMUE9QIGJlY2F1c2UKICAgICAqIGl0IGJsb2NrcyB0aGUgY29ubmVjdGlvbiB3aGVuIHRoZXJlIGFyZSBubyBlbGVtZW50cyB0byBwb3AgZnJvbSBhbnkgb2YgdGhlIGdpdmVuIGxpc3RzLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nfGFycmF5ICAka2V5CiAgICAgKiBAcGFyYW0gIHN0cmluZ3xmbG9hdCAgJHRpbWVvdXRfb3Jfa2V5CiAgICAgKiBAcGFyYW0gIGFycmF5ICAkZXh0cmFfYXJncywuLi4KICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxudWxsfGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJscG9wKHN0cmluZ3xhcnJheSAka2V5LCBzdHJpbmd8ZmxvYXQgJHRpbWVvdXRfb3Jfa2V5LCBtaXhlZCAuLi4kZXh0cmFfYXJncyk6IENsdXN0ZXJ8YXJyYXl8bnVsbHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQlJQT1AgaXMgYSBibG9ja2luZyBsaXN0IHBvcCBwcmltaXRpdmUuIEl0IGlzIHRoZSBibG9ja2luZyB2ZXJzaW9uIG9mIFJQT1AgYmVjYXVzZQogICAgICogaXQgYmxvY2tzIHRoZSBjb25uZWN0aW9uIHdoZW4gdGhlcmUgYXJlIG5vIGVsZW1lbnRzIHRvIHBvcCBmcm9tIGFueSBvZiB0aGUgZ2l2ZW4gbGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmd8YXJyYXkgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nfGZsb2F0ICAkdGltZW91dF9vcl9rZXkKICAgICAqIEBwYXJhbSAgYXJyYXkgICRleHRyYV9hcmdzLC4uLgogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fG51bGx8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gYnJwb3Aoc3RyaW5nfGFycmF5ICRrZXksIHN0cmluZ3xmbG9hdCAkdGltZW91dF9vcl9rZXksIG1peGVkIC4uLiRleHRyYV9hcmdzKTogQ2x1c3RlcnxhcnJheXxudWxsfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBBdG9taWNhbGx5IHJldHVybnMgYW5kIHJlbW92ZXMgdGhlIGxhc3QgZWxlbWVudCAodGFpbCkgb2YgdGhlIGxpc3Qgc3RvcmVkIGF0IHNvdXJjZSwKICAgICAqIGFuZCBwdXNoZXMgdGhlIGVsZW1lbnQgYXQgdGhlIGZpcnN0IGVsZW1lbnQgKGhlYWQpIG9mIHRoZSBsaXN0IHN0b3JlZCBhdCBkZXN0aW5hdGlvbi4KICAgICAqIFRoaXMgY29tbWFuZCB3aWxsIGJsb2NrIGZvciBhbiBlbGVtZW50IHVwIHRvIHRoZSBwcm92aWRlZCB0aW1lb3V0LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRzcmNrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRkc3RrZXkKICAgICAqIEBwYXJhbSAgZmxvYXQgICR0aW1lb3V0CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJycG9wbHB1c2gobWl4ZWQgJHNyY2tleSwgbWl4ZWQgJGRzdGtleSwgZmxvYXQgJHRpbWVvdXQpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIGFuZCByZXR1cm4gbWVtYmVycyB3aXRoIHNjb3JlcyBpbiBhIHNvcnRlZCBzZXQgb3IgYmxvY2sgdW50aWwgb25lIGlzIGF2YWlsYWJsZQogICAgICoKICAgICAqIEBwYXJhbSAgZmxvYXQgICR0aW1lb3V0CiAgICAgKiBAcGFyYW0gIGFycmF5ICAka2V5cwogICAgICogQHBhcmFtICBzdHJpbmcgICRmcm9tCiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8bnVsbHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBiem1wb3AoZmxvYXQgJHRpbWVvdXQsIGFycmF5ICRrZXlzLCBzdHJpbmcgJGZyb20sIGludCAkY291bnQgPSAxKTogQ2x1c3RlcnxhcnJheXxudWxsfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBCWlBPUE1BWCBpcyB0aGUgYmxvY2tpbmcgdmFyaWFudCBvZiB0aGUgc29ydGVkIHNldCBaUE9QTUFYIHByaW1pdGl2ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xhcnJheSAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmd8ZmxvYXQgICR0aW1lb3V0X29yX2tleQogICAgICogQHBhcmFtICBhcnJheSAgJGV4dHJhX2FyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8bnVsbHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBienBvcG1heChzdHJpbmd8YXJyYXkgJGtleSwgc3RyaW5nfGZsb2F0ICR0aW1lb3V0X29yX2tleSwgbWl4ZWQgLi4uJGV4dHJhX2FyZ3MpOiBDbHVzdGVyfGFycmF5fG51bGx8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEJaUE9QTUlOIGlzIHRoZSBibG9ja2luZyB2YXJpYW50IG9mIHRoZSBzb3J0ZWQgc2V0IFpQT1BNSU4gcHJpbWl0aXZlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nfGFycmF5ICAka2V5CiAgICAgKiBAcGFyYW0gIHN0cmluZ3xmbG9hdCAgJHRpbWVvdXRfb3Jfa2V5CiAgICAgKiBAcGFyYW0gIGFycmF5ICAkZXh0cmFfYXJncywuLi4KICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxudWxsfGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGJ6cG9wbWluKHN0cmluZ3xhcnJheSAka2V5LCBzdHJpbmd8ZmxvYXQgJHRpbWVvdXRfb3Jfa2V5LCBtaXhlZCAuLi4kZXh0cmFfYXJncyk6IENsdXN0ZXJ8YXJyYXl8bnVsbHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQ2xlYXJzIHRoZSBsYXN0IGVycm9yIHRoYXQgaXMgc2V0LCBpZiBhbnkuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXJMYXN0RXJyb3IoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXJUcmFuc2ZlcnJlZEJ5dGVzKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEV4ZWN1dGVzIGBDTElFTlRgIGNvbW1hbmQgb3BlcmF0aW9ucy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5fHN0cmluZyAgJGtleV9vcl9hZGRyZXNzCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG9wZXJhdGlvbgogICAgICogQHBhcmFtICBtaXhlZCAgJGFyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGNsaWVudChhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzLCBzdHJpbmcgJG9wZXJhdGlvbiwgbWl4ZWQgLi4uJGFyZ3MpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogQ2xvc2VzIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24sIGlmIGl0J3MgcGVyc2lzdGVudC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyBgQ0xVU1RFUmAgY29tbWFuZCBvcGVyYXRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXl8c3RyaW5nICAka2V5X29yX2FkZHJlc3MKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkb3BlcmF0aW9uCiAgICAgKiBAcGFyYW0gIG1peGVkICAkYXJncywuLi4KICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gY2x1c3RlcihhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzLCBzdHJpbmcgJG9wZXJhdGlvbiwgbWl4ZWQgLi4uJGFyZ3MpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogVGhpcyBpcyBhIGNvbnRhaW5lciBjb21tYW5kIGZvciBydW50aW1lIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheXxzdHJpbmcgICRrZXlfb3JfYWRkcmVzcwogICAgICogQHBhcmFtICBzdHJpbmcgICRvcGVyYXRpb24KICAgICAqIEBwYXJhbSAgbWl4ZWQgICRhcmdzLC4uLgogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gY29uZmlnKGFycmF5fHN0cmluZyAka2V5X29yX2FkZHJlc3MsIHN0cmluZyAkb3BlcmF0aW9uLCBtaXhlZCAuLi4kYXJncyk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgd2l0aCBkZXRhaWxzIGFib3V0IGV2ZXJ5IFJlZGlzIGNvbW1hbmQuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGFyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGNvbW1hbmQobWl4ZWQgLi4uJGFyZ3MpOiBDbHVzdGVyfGFycmF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVGhpcyBjb21tYW5kIGNvcGllcyB0aGUgdmFsdWUgc3RvcmVkIGF0IHRoZSBzb3VyY2Uga2V5IHRvIHRoZSBkZXN0aW5hdGlvbiBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJHNyY2tleQogICAgICogQHBhcmFtICBtaXhlZCAgJGRzdGtleQogICAgICogQHBhcmFtICBhcnJheXxudWxsICAkb3B0aW9ucwogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3B5KG1peGVkICRzcmNrZXksIG1peGVkICRkc3RrZXksIGFycmF5fG51bGwgJG9wdGlvbnMgPSBudWxsKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBrZXlzIGluIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgZGF0YWJhc2UuCiAgICAgKgogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBkYnNpemUoYXJyYXl8c3RyaW5nICRrZXlfb3JfYWRkcmVzcyk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBEZWNyZW1lbnRzIHRoZSBudW1iZXIgc3RvcmVkIGF0IGtleSBieSBvbmUuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRieQogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNyKG1peGVkICRrZXksIGludCAkYnkgPSAxKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIERlY3JlbWVudHMgdGhlIG51bWJlciBzdG9yZWQgYXQga2V5IGJ5IGRlY3JlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGRlY3JieShtaXhlZCAka2V5LCBpbnQgJHZhbHVlKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXlzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXlzLC4uLgogICAgICogQHJldHVybiBDbHVzdGVyfGludHxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGRlbChtaXhlZCAuLi4ka2V5cyk6IENsdXN0ZXJ8aW50fGJvb2wge30KCiAgICAvKioKICAgICAqIEZsdXNoZXMgYWxsIHByZXZpb3VzbHkgcXVldWVkIGNvbW1hbmRzIGluIGEgdHJhbnNhY3Rpb24gYW5kIHJlc3RvcmVzIHRoZSBjb25uZWN0aW9uIHN0YXRlIHRvIG5vcm1hbC4KICAgICAqIElmIFdBVENIIHdhcyB1c2VkLCBESVNDQVJEIHVud2F0Y2hlcyBhbGwga2V5cyB3YXRjaGVkIGJ5IHRoZSBjb25uZWN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNjYXJkKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIERpc3BhdGNoZXMgYWxsIHBlbmRpbmcgZXZlbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gaW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzcGF0Y2hFdmVudHMoKTogaW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTZXJpYWxpemUgYW5kIHJldHVybiB0aGUgdmFsdWUgc3RvcmVkIGF0IGtleSBpbiBhIFJlZGlzLXNwZWNpZmljIGZvcm1hdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8c3RyaW5nfGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGR1bXAobWl4ZWQgJGtleSk6IENsdXN0ZXJ8c3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBBc2tzIFJlZGlzIHRvIGVjaG8gYmFjayB0aGUgcHJvdmlkZWQgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXl8c3RyaW5nICAka2V5X29yX2FkZHJlc3MKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWVzc2FnZQogICAgICogQHJldHVybiBDbHVzdGVyfHN0cmluZ3xmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBlY2hvKGFycmF5fHN0cmluZyAka2V5X29yX2FkZHJlc3MsIHN0cmluZyAkbWVzc2FnZSk6IENsdXN0ZXJ8c3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uJ3MgZW5kcG9pbnQgaWRlbnRpZmllci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5kcG9pbnRJZCgpOiBhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogRXZhbHVhdGUgc2NyaXB0IHVzaW5nIHRoZSBMdWEgaW50ZXJwcmV0ZXIuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2V2YWwKICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkc2NyaXB0CiAgICAgKiBAcGFyYW0gIGFycmF5ICAkYXJncwogICAgICogQHBhcmFtICBpbnQgICRudW1fa2V5cwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBldmFsKG1peGVkICRzY3JpcHQsIGFycmF5ICRhcmdzID0gW10sIGludCAkbnVtX2tleXMgPSAwKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEV2YWx1YXRlIHNjcmlwdCB1c2luZyB0aGUgTHVhIGludGVycHJldGVyLiAgVGhpcyBpcyBqdXN0IHRoZSAicmVhZC1vbmx5IiB2YXJpYW50IG9mIEVWQUwKICAgICAqIG1lYW5pbmcgaXQgY2FuIGJlIHJ1biBvbiByZWFkLW9ubHkgcmVwbGljYXMuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3JlZGlzLmlvL2NvbW1hbmRzL2V2YWxfcm8KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkc2NyaXB0CiAgICAgKiBAcGFyYW0gIGFycmF5ICAkYXJncwogICAgICogQHBhcmFtICBpbnQgICRudW1fa2V5cwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBldmFsX3JvKG1peGVkICRzY3JpcHQsIGFycmF5ICRhcmdzID0gW10sIGludCAkbnVtX2tleXMgPSAwKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEV2YWx1YXRlcyBhIHNjcmlwdCBjYWNoZWQgb24gdGhlIHNlcnZlci1zaWRlIGJ5IGl0cyBTSEExIGRpZ2VzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHNoYQogICAgICogQHBhcmFtICBhcnJheSAgJGFyZ3MKICAgICAqIEBwYXJhbSAgaW50ICAkbnVtX2tleXMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZXZhbHNoYShzdHJpbmcgJHNoYSwgYXJyYXkgJGFyZ3MgPSBbXSwgaW50ICRudW1fa2V5cyA9IDApOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogRXZhbHVhdGVzIGEgc2NyaXB0IGNhY2hlZCBvbiB0aGUgc2VydmVyLXNpZGUgYnkgaXRzIFNIQTEgZGlnZXN0LiAgVGhpcyBpcyBqdXN0IHRoZSAicmVhZC1vbmx5IiB2YXJpYW50CiAgICAgKiBvZiBgRVZBTFNIQWAgbWVhbmluZyBpdCBjYW4gYmUgcnVuIG9uIHJlYWQtb25seSByZXBsaWNhcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHNoYQogICAgICogQHBhcmFtICBhcnJheSAgJGFyZ3MKICAgICAqIEBwYXJhbSAgaW50ICAkbnVtX2tleXMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZXZhbHNoYV9ybyhzdHJpbmcgJHNoYSwgYXJyYXkgJGFyZ3MgPSBbXSwgaW50ICRudW1fa2V5cyA9IDApOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZXMgYWxsIHByZXZpb3VzbHkgcXVldWVkIGNvbW1hbmRzIGluIGEgdHJhbnNhY3Rpb24gYW5kIHJlc3RvcmVzIHRoZSBjb25uZWN0aW9uIHN0YXRlIHRvIG5vcm1hbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWMoKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgaWYga2V5KHMpIGV4aXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5cywuLi4KICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIGV4aXN0cyhtaXhlZCAuLi4ka2V5cyk6IENsdXN0ZXJ8aW50fGJvb2wge30KCiAgICAvKioKICAgICAqIFNldCBhIHRpbWVvdXQgb24ga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkc2Vjb25kcwogICAgICogQHBhcmFtICBzdHJpbmd8bnVsbCAgJG1vZGUKICAgICAqIEByZXR1cm4gQ2x1c3Rlcnxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGV4cGlyZShtaXhlZCAka2V5LCBpbnQgJHNlY29uZHMsIHN0cmluZ3xudWxsICRtb2RlID0gbnVsbCk6IENsdXN0ZXJ8Ym9vbCB7fQoKICAgIC8qKgogICAgICogU2V0IGEgdGltZW91dCBvbiBrZXkgdXNpbmcgYSB1bml4IHRpbWVzdGFtcC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJHRpbWVzdGFtcAogICAgICogQHJldHVybiBDbHVzdGVyfGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwaXJlYXQobWl4ZWQgJGtleSwgaW50ICR0aW1lc3RhbXApOiBDbHVzdGVyfGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGFic29sdXRlIFVuaXggdGltZXN0YW1wIGluIHNlY29uZHMgYXQgd2hpY2ggdGhlIGdpdmVuIGtleSB3aWxsIGV4cGlyZS4KICAgICAqIElmIHRoZSBrZXkgZXhpc3RzIGJ1dCBkb2Vzbid0IGhhdmUgYSBUVEwgdGhpcyBmdW5jdGlvbiByZXR1cm4gLTEuCiAgICAgKiBJZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IC0yLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwaXJldGltZShtaXhlZCAka2V5KTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEZsdXNoZXMgUmVsYXkncyBpbi1tZW1vcnkgY2FjaGUgb2YgYWxsIGRhdGFiYXNlcy4KICAgICAqCiAgICAgKiBAc2VlIFxSZWxheVxSZWxheTo6Zmx1c2hNZW1vcnkoKQogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICRlbmRwb2ludElkCiAgICAgKiBAcGFyYW0gIGludHxudWxsICAkZGIKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmbHVzaE1lbW9yeSg/c3RyaW5nICRlbmRwb2ludElkID0gbnVsbCwgaW50ICRkYiA9IG51bGwpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBEZWxldGVzIGFsbCB0aGUga2V5cyBvZiBhbGwgdGhlIGV4aXN0aW5nIGRhdGFiYXNlcywgbm90IGp1c3QgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvbmUuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheXxzdHJpbmcgICRrZXlfb3JfYWRkcmVzcwogICAgICogQHBhcmFtICBib29sfG51bGwgICRzeW5jCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBmbHVzaGFsbChhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzLCBib29sfG51bGwgJHN5bmMgPSBudWxsKTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBEZWxldGVzIGFsbCB0aGUga2V5cyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGFiYXNlLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXl8c3RyaW5nICAka2V5X29yX2FkZHJlc3MKICAgICAqIEBwYXJhbSAgYm9vbHxudWxsICAkc3luYwogICAgICogQHJldHVybiBDbHVzdGVyfGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZmx1c2hkYihhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzLCBib29sfG51bGwgJHN5bmMgPSBudWxsKTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBBZGQgb25lIG9yIG1vcmUgbWVtYmVycyB0byBhIGdlb3NwYWNpYWwgc29ydGVkIHNldAogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgZmxvYXQgICRsbmcKICAgICAqIEBwYXJhbSAgZmxvYXQgICRsYXQKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWVtYmVyCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3RoZXJfdHJpcGxlc19hbmRfb3B0aW9ucywuLi4KICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VvYWRkKG1peGVkICRrZXksIGZsb2F0ICRsbmcsIGZsb2F0ICRsYXQsIHN0cmluZyAkbWVtYmVyLCBtaXhlZCAuLi4kb3RoZXJfdHJpcGxlc19hbmRfb3B0aW9ucyk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIG1lbWJlcnMgb2YgYSBnZW9zcGFjaWFsbHkgZW5jb2RlZCBzb3J0ZWQgc2V0LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc3JjCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGRzdAogICAgICogQHBhcmFtICBzdHJpbmd8bnVsbCAgJHVuaXQKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxmbG9hdHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW9kaXN0KG1peGVkICRrZXksIHN0cmluZyAkc3JjLCBzdHJpbmcgJGRzdCwgc3RyaW5nfG51bGwgJHVuaXQgPSBudWxsKTogQ2x1c3RlcnxmbG9hdHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgb25lIG9yIG1vcmUgR2VvSGFzaCBlbmNvZGVkIHN0cmluZ3MgZm9yIG1lbWJlcnMgb2YgdGhlIHNldC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG1lbWJlcgogICAgICogQHBhcmFtICBzdHJpbmcgICRvdGhlcl9tZW1iZXJzLC4uLgogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGdlb2hhc2gobWl4ZWQgJGtleSwgc3RyaW5nICRtZW1iZXIsIHN0cmluZyAuLi4kb3RoZXJfbWVtYmVycyk6IENsdXN0ZXJ8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgcG9zaXRpb25zIChsb25naXR1ZGUsbGF0aXR1ZGUpIG9mIGFsbCB0aGUgc3BlY2lmaWVkIG1lbWJlcnMKICAgICAqIG9mIHRoZSBnZW9zcGF0aWFsIGluZGV4IHJlcHJlc2VudGVkIGJ5IHRoZSBzb3J0ZWQgc2V0IGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVycywuLi4KICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW9wb3MobWl4ZWQgJGtleSwgbWl4ZWQgLi4uJG1lbWJlcnMpOiBDbHVzdGVyfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBtZW1iZXJzIG9mIGEgZ2Vvc3BhY2lhbGx5IHNvcnRlZCBzZXQgdGhhdCBhcmUgd2l0aGluIGEgY2VydGFpbiByYWRpdXMgb2YgYSBsb2NhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGZsb2F0ICAkbG5nCiAgICAgKiBAcGFyYW0gIGZsb2F0ICAkbGF0CiAgICAgKiBAcGFyYW0gIGZsb2F0ICAkcmFkaXVzCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHVuaXQKICAgICAqIEBwYXJhbSAgYXJyYXkgICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGdlb3JhZGl1cyhtaXhlZCAka2V5LCBmbG9hdCAkbG5nLCBmbG9hdCAkbGF0LCBmbG9hdCAkcmFkaXVzLCBzdHJpbmcgJHVuaXQsIGFycmF5ICRvcHRpb25zID0gW10pOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgbWVtYmVycyBvZiBhIGdlb3NwYWNpYWxseSBzb3J0ZWQgc2V0IHRoYXQgYXJlIHdpdGhpbiBhIGNlcnRhaW4gcmFkaXVzIG9mIGEgbG9jYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBmbG9hdCAgJGxuZwogICAgICogQHBhcmFtICBmbG9hdCAgJGxhdAogICAgICogQHBhcmFtICBmbG9hdCAgJHJhZGl1cwogICAgICogQHBhcmFtICBzdHJpbmcgICR1bml0CiAgICAgKiBAcGFyYW0gIGFycmF5ICAkb3B0aW9ucwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW9yYWRpdXNfcm8obWl4ZWQgJGtleSwgZmxvYXQgJGxuZywgZmxvYXQgJGxhdCwgZmxvYXQgJHJhZGl1cywgc3RyaW5nICR1bml0LCBhcnJheSAkb3B0aW9ucyA9IFtdKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFNpbWlsYXIgdG8gYEdFT1JBRElVU2AgZXhjZXB0IGl0IHVzZXMgYSBtZW1iZXIgYXMgdGhlIGNlbnRlciBvZiB0aGUgcXVlcnkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgICRtZW1iZXIKICAgICAqIEBwYXJhbSAgZmxvYXQgICRyYWRpdXMKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkdW5pdAogICAgICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2VvcmFkaXVzYnltZW1iZXIobWl4ZWQgJGtleSwgc3RyaW5nICRtZW1iZXIsIGZsb2F0ICRyYWRpdXMsIHN0cmluZyAkdW5pdCwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBTaW1pbGFyIHRvIGBHRU9SQURJVVNgIGV4Y2VwdCBpdCB1c2VzIGEgbWVtYmVyIGFzIHRoZSBjZW50ZXIgb2YgdGhlIHF1ZXJ5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWVtYmVyCiAgICAgKiBAcGFyYW0gIGZsb2F0ICAkcmFkaXVzCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHVuaXQKICAgICAqIEBwYXJhbSAgYXJyYXkgICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGdlb3JhZGl1c2J5bWVtYmVyX3JvKG1peGVkICRrZXksIHN0cmluZyAkbWVtYmVyLCBmbG9hdCAkcmFkaXVzLCBzdHJpbmcgJHVuaXQsIGFycmF5ICRvcHRpb25zID0gW10pOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogU2VhcmNoIGEgZ2Vvc3BhY2lhbCBzb3J0ZWQgc2V0IGZvciBtZW1iZXJzIGluIHZhcmlvdXMgd2F5cy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGFycmF5fHN0cmluZyAgJHBvc2l0aW9uCiAgICAgKiBAcGFyYW0gIGFycmF5fGludHxmbG9hdCAgJHNoYXBlCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHVuaXQKICAgICAqIEBwYXJhbSAgYXJyYXkgICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXkKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2Vvc2VhcmNoKG1peGVkICRrZXksIGFycmF5fHN0cmluZyAkcG9zaXRpb24sIGFycmF5fGludHxmbG9hdCAkc2hhcGUsIHN0cmluZyAkdW5pdCwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IENsdXN0ZXJ8YXJyYXkge30KCiAgICAvKioKICAgICAqIFNlYXJjaCBhIGdlb3NwYWNpYWwgc29ydGVkIHNldCBmb3IgbWVtYmVycyB3aXRoaW4gYSBnaXZlbiBhcmVhIG9yIHJhbmdlLCBzdG9yaW5nIHRoZSByZXN1bHRzIGludG8KICAgICAqIGEgbmV3IHNldC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkZHN0a2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkc3Jja2V5CiAgICAgKiBAcGFyYW0gIGFycmF5fHN0cmluZyAgJHBvc2l0aW9uCiAgICAgKiBAcGFyYW0gIGFycmF5fGludHxmbG9hdCAgJHNoYXBlCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJHVuaXQKICAgICAqIEBwYXJhbSAgYXJyYXkgICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGdlb3NlYXJjaHN0b3JlKG1peGVkICRkc3RrZXksIG1peGVkICRzcmNrZXksIGFycmF5fHN0cmluZyAkcG9zaXRpb24sIGFycmF5fGludHxmbG9hdCAkc2hhcGUsIHN0cmluZyAkdW5pdCwgYXJyYXkgJG9wdGlvbnMgPSBbXSk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KG1peGVkICRrZXkpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYml0IHZhbHVlIGF0IG9mZnNldCBpbiB0aGUgc3RyaW5nIHZhbHVlIHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRwb3MKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRiaXQobWl4ZWQgJGtleSwgaW50ICRwb3MpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbGFzdCBlcnJvciBtZXNzYWdlLCBpZiBhbnkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RFcnJvcigpOiBzdHJpbmd8bnVsbCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBtb2RlIFJlbGF5IGlzIGN1cnJlbnRseSBpbi4KICAgICAqIGBSZWxheTo6QVRPTUlDYCBvciBgUmVsYXk6Ok1VTFRJYC4KICAgICAqCiAgICAgKiBAcGFyYW0gIGJvb2wgICRtYXNrZWQKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TW9kZShib29sICRtYXNrZWQgPSBmYWxzZSk6IGludCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGNsaWVudCBvcHRpb24uCiAgICAgKgogICAgICogQHBhcmFtICBpbnQgICRvcHRpb24KICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcHRpb24oaW50ICRvcHRpb24pOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIGdldFRyYW5zZmVycmVkQnl0ZXMoKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN1YnN0cmluZyBvZiB0aGUgc3RyaW5nIHZhbHVlIHN0b3JlZCBhdCBrZXksCiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBvZmZzZXRzIHN0YXJ0IGFuZCBlbmQgKGJvdGggYXJlIGluY2x1c2l2ZSkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRzdGFydAogICAgICogQHBhcmFtICBpbnQgICRlbmQKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxzdHJpbmd8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRyYW5nZShtaXhlZCAka2V5LCBpbnQgJHN0YXJ0LCBpbnQgJGVuZCk6IENsdXN0ZXJ8c3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBBdG9taWNhbGx5IHNldHMga2V5IHRvIHZhbHVlIGFuZCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0c2V0KG1peGVkICRrZXksIG1peGVkICR2YWx1ZSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgZmllbGRzIGZyb20gdGhlIGhhc2ggc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG1lbWJlcnMsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGhkZWwobWl4ZWQgJGtleSwgbWl4ZWQgJG1lbWJlciwgbWl4ZWQgLi4uJG1lbWJlcnMpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBpZiBmaWVsZCBpcyBhbiBleGlzdGluZyBmaWVsZCBpbiB0aGUgaGFzaCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW1iZXIKICAgICAqIEByZXR1cm4gQ2x1c3Rlcnxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaGV4aXN0cyhtaXhlZCAka2V5LCBtaXhlZCAkbWVtYmVyKTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggZmllbGQgaW4gdGhlIGhhc2ggc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaGdldChtaXhlZCAka2V5LCBtaXhlZCAkbWVtYmVyKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYWxsIGZpZWxkcyBhbmQgdmFsdWVzIG9mIHRoZSBoYXNoIHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaGdldGFsbChtaXhlZCAka2V5KTogQ2x1c3RlcnxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSW5jcmVtZW50cyB0aGUgbnVtYmVyIHN0b3JlZCBhdCBmaWVsZCBpbiB0aGUgaGFzaCBzdG9yZWQgYXQga2V5IGJ5IGluY3JlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcGFyYW0gIGludCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGhpbmNyYnkobWl4ZWQgJGtleSwgbWl4ZWQgJG1lbWJlciwgaW50ICR2YWx1ZSk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnQgdGhlIHNwZWNpZmllZCBmaWVsZCBvZiBhIGhhc2ggc3RvcmVkIGF0IGtleSwgYW5kIHJlcHJlc2VudGluZwogICAgICogYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIGJ5IHRoZSBzcGVjaWZpZWQgaW5jcmVtZW50LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW1iZXIKICAgICAqIEBwYXJhbSAgZmxvYXQgICR2YWx1ZQogICAgICogQHJldHVybiBDbHVzdGVyfGZsb2F0fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaGluY3JieWZsb2F0KG1peGVkICRrZXksIG1peGVkICRtZW1iZXIsIGZsb2F0ICR2YWx1ZSk6IENsdXN0ZXJ8ZmxvYXR8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbGwgZmllbGQgbmFtZXMgaW4gdGhlIGhhc2ggc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBoa2V5cyhtaXhlZCAka2V5KTogQ2x1c3RlcnxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZpZWxkcyBjb250YWluZWQgaW4gdGhlIGhhc2ggc3RvcmVkIGF0IGAka2V5YC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaGxlbihtaXhlZCAka2V5KTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBmaWVsZHMgaW4gdGhlIGhhc2ggc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGFycmF5ICAkbWVtYmVycwogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaG1nZXQobWl4ZWQgJGtleSwgYXJyYXkgJG1lbWJlcnMpOiBDbHVzdGVyfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBzcGVjaWZpZWQgZmllbGRzIHRvIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzIGluIHRoZSBoYXNoIHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBhcnJheSAgJG1lbWJlcnMKICAgICAqIEByZXR1cm4gQ2x1c3Rlcnxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGhtc2V0KG1peGVkICRrZXksIGFycmF5ICRtZW1iZXJzKTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBXaGVuIGNhbGxlZCB3aXRoIGp1c3QgdGhlIGtleSBhcmd1bWVudCwgcmV0dXJuIGEgcmFuZG9tIGZpZWxkIGZyb20gdGhlIGhhc2ggdmFsdWUgc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGFycmF5ICAkb3B0aW9ucwogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fHN0cmluZ3xmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIGhyYW5kZmllbGQobWl4ZWQgJGtleSwgYXJyYXl8bnVsbCAkb3B0aW9ucyA9IG51bGwpOiBDbHVzdGVyfGFycmF5fHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogSXRlcmF0ZXMgZmllbGRzIG9mIEhhc2ggdHlwZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgdmFsdWVzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRpdGVyYXRvcgogICAgICogQHBhcmFtICBtaXhlZCAgJG1hdGNoCiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGhzY2FuKG1peGVkICRrZXksIG1peGVkICYkaXRlcmF0b3IsIG1peGVkICRtYXRjaCA9IG51bGwsIGludCAkY291bnQgPSAwKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFNldHMgZmllbGQgaW4gdGhlIGhhc2ggc3RvcmVkIGF0IGtleSB0byB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrdmFscywuLi4KICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaHNldChtaXhlZCAka2V5LCBtaXhlZCAkbWVtYmVyLCBtaXhlZCAkdmFsdWUsIG1peGVkIC4uLiRrdmFscyk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIGZpZWxkIGluIHRoZSBoYXNoIHN0b3JlZCBhdCBrZXkgdG8gdmFsdWUsIG9ubHkgaWYgZmllbGQgZG9lcyBub3QgeWV0IGV4aXN0LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW1iZXIKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHJldHVybiBDbHVzdGVyfGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaHNldG54KG1peGVkICRrZXksIG1peGVkICRtZW1iZXIsIG1peGVkICR2YWx1ZSk6IENsdXN0ZXJ8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3RyaW5nIGxlbmd0aCBvZiB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGZpZWxkIGluIHRoZSBoYXNoIHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbWJlcgogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIGhzdHJsZW4obWl4ZWQgJGtleSwgbWl4ZWQgJG1lbWJlcik6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCB2YWx1ZXMgaW4gdGhlIGhhc2ggc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBodmFscyhtaXhlZCAka2V5KTogQ2x1c3RlcnxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSW5jcmVtZW50cyB0aGUgbnVtYmVyIHN0b3JlZCBhdCBrZXkgYnkgb25lLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkYnkKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5jcihtaXhlZCAka2V5LCBpbnQgJGJ5ID0gMSk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnRzIHRoZSBudW1iZXIgc3RvcmVkIGF0IGtleSBieSBpbmNyZW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICR2YWx1ZQogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmNyYnkobWl4ZWQgJGtleSwgaW50ICR2YWx1ZSk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnQgdGhlIHN0cmluZyByZXByZXNlbnRpbmcgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgc3RvcmVkIGF0IGtleSBieSB0aGUgc3BlY2lmaWVkIGluY3JlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGZsb2F0ICAkdmFsdWUKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxmbG9hdHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmNyYnlmbG9hdChtaXhlZCAka2V5LCBmbG9hdCAkdmFsdWUpOiBDbHVzdGVyfGZsb2F0fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBUaGUgSU5GTyBjb21tYW5kIHJldHVybnMgaW5mb3JtYXRpb24gYW5kIHN0YXRpc3RpY3MgYWJvdXQgUmVkaXMgaW4gYSBmb3JtYXQKICAgICAqIHRoYXQgaXMgc2ltcGxlIHRvIHBhcnNlIGJ5IGNvbXB1dGVycyBhbmQgZWFzeSB0byByZWFkIGJ5IGh1bWFucy4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vcmVkaXMuaW8vY29tbWFuZHMvaW5mbwogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXl8c3RyaW5nICAka2V5X29yX2FkZHJlc3MKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc2VjdGlvbnMsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5mbyhhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzLCBzdHJpbmcgLi4uJHNlY3Rpb25zKTogQ2x1c3RlcnxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbGwga2V5cyBtYXRjaGluZyBwYXR0ZXJuLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRwYXR0ZXJuCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5cyhtaXhlZCAkcGF0dGVybik6IENsdXN0ZXJ8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIFVOSVggdGltZSBzdGFtcCBvZiB0aGUgbGFzdCBzdWNjZXNzZnVsIHNhdmUgdG8gZGlzay4KICAgICAqCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGxhc3RzYXZlKGFycmF5fHN0cmluZyAka2V5X29yX2FkZHJlc3MpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBsb25nZXN0IGNvbW1vbiBzdWJzZXF1ZW5jZSBiZXR3ZWVuIHR3byBzdHJpbmcga2V5cy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5MQogICAgICogQHBhcmFtICBtaXhlZCAgJGtleTIKICAgICAqIEBwYXJhbSAgYXJyYXl8bnVsbCAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbGNzKG1peGVkICRrZXkxLCBtaXhlZCAka2V5MiwgYXJyYXl8bnVsbCAkb3B0aW9ucyA9IG51bGwpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgZWxlbWVudCBhdCBpbmRleCBpbmRleCBpbiB0aGUgbGlzdCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkaW5kZXgKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBsaW5kZXgobWl4ZWQgJGtleSwgaW50ICRpbmRleCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBJbnNlcnRzIGVsZW1lbnQgaW4gdGhlIGxpc3Qgc3RvcmVkIGF0IGtleSBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSByZWZlcmVuY2UgdmFsdWUgcGl2b3QuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgICRvcAogICAgICogQHBhcmFtICBtaXhlZCAgJHBpdm90CiAgICAgKiBAcGFyYW0gIG1peGVkICAkZWxlbWVudAogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBsaW5zZXJ0KG1peGVkICRrZXksIHN0cmluZyAkb3AsIG1peGVkICRwaXZvdCwgbWl4ZWQgJGVsZW1lbnQpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgbmV3IGV2ZW50IGxpc3RlbmVyLgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGUgICRjYWxsYmFjawogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0ZW4oP2NhbGxhYmxlICRjYWxsYmFjayk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBzdG9yZWQgYXQgYCRrZXlgLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBsbGVuKG1peGVkICRrZXkpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQXRvbWljYWxseSByZXR1cm5zIGFuZCByZW1vdmVzIHRoZSBmaXJzdC9sYXN0IGVsZW1lbnQgb2YgdGhlIGxpc3QKICAgICAqIHN0b3JlZCBhdCBzb3VyY2UsIGFuZCBwdXNoZXMgdGhlIGVsZW1lbnQgYXQgdGhlIGZpcnN0L2xhc3QKICAgICAqIGVsZW1lbnQgb2YgdGhlIGxpc3Qgc3RvcmVkIGF0IGRlc3RpbmF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRzcmNrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRkc3RrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc3JjcG9zCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGRzdHBvcwogICAgICogQHJldHVybiBDbHVzdGVyfHN0cmluZ3xudWxsfGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGxtb3ZlKG1peGVkICRzcmNrZXksIG1peGVkICRkc3RrZXksIHN0cmluZyAkc3JjcG9zLCBzdHJpbmcgJGRzdHBvcyk6IENsdXN0ZXJ8c3RyaW5nfG51bGx8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFBvcHMgb25lIG9yIG1vcmUgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3Qgbm9uLWVtcHR5IGxpc3Qga2V5IGZyb20gdGhlIGxpc3Qgb2YgcHJvdmlkZWQga2V5IG5hbWVzLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrZXlzCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGZyb20KICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxudWxsfGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGxtcG9wKGFycmF5ICRrZXlzLCBzdHJpbmcgJGZyb20sIGludCAkY291bnQgPSAxKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYW5kIHJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnRzIG9mIHRoZSBsaXN0IHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRjb3VudAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBscG9wKG1peGVkICRrZXksIGludCAkY291bnQgPSAxKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFRoZSBjb21tYW5kIHJldHVybnMgdGhlIGluZGV4IG9mIG1hdGNoaW5nIGVsZW1lbnRzIGluc2lkZSBhIFJlZGlzIGxpc3QuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkb3B0aW9ucwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIGxwb3MobWl4ZWQgJGtleSwgbWl4ZWQgJHZhbHVlLCBhcnJheXxudWxsICRvcHRpb25zID0gbnVsbCk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBJbnNlcnQgYWxsIHRoZSBzcGVjaWZpZWQgdmFsdWVzIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0IHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbWJlcgogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbWJlcnMsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIGxwdXNoKG1peGVkICRrZXksIG1peGVkICRtZW1iZXIsIG1peGVkIC4uLiRtZW1iZXJzKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEluc2VydHMgc3BlY2lmaWVkIHZhbHVlcyBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCBzdG9yZWQgYXQga2V5LAogICAgICogb25seSBpZiBrZXkgYWxyZWFkeSBleGlzdHMgYW5kIGhvbGRzIGEgbGlzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVycywuLi4KICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbHB1c2h4KG1peGVkICRrZXksIG1peGVkICRtZW1iZXIsIG1peGVkIC4uLiRtZW1iZXJzKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNwZWNpZmllZCBlbGVtZW50cyBvZiB0aGUgbGlzdCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkc3RhcnQKICAgICAqIEBwYXJhbSAgaW50ICAkc3RvcAogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbHJhbmdlKG1peGVkICRrZXksIGludCAkc3RhcnQsIGludCAkc3RvcCk6IENsdXN0ZXJ8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIGZpcnN0IGNvdW50IG9jY3VycmVuY2VzIG9mIGVsZW1lbnRzIGVxdWFsIHRvIGVsZW1lbnQgZnJvbSB0aGUgbGlzdCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW1iZXIKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbHJlbShtaXhlZCAka2V5LCBtaXhlZCAkbWVtYmVyLCBpbnQgJGNvdW50ID0gMCk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBsaXN0IGVsZW1lbnQgYXQgaW5kZXggdG8gZWxlbWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJGluZGV4CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBsc2V0KG1peGVkICRrZXksIGludCAkaW5kZXgsIG1peGVkICRtZW1iZXIpOiBDbHVzdGVyfGJvb2wge30KCiAgICAvKioKICAgICAqIFRyaW0gYW4gZXhpc3RpbmcgbGlzdCBzbyB0aGF0IGl0IHdpbGwgY29udGFpbiBvbmx5IHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb2YgZWxlbWVudHMgc3BlY2lmaWVkLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkc3RhcnQKICAgICAqIEBwYXJhbSAgaW50ICAkZW5kCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBsdHJpbShtaXhlZCAka2V5LCBpbnQgJHN0YXJ0LCBpbnQgJGVuZCk6IENsdXN0ZXJ8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCwgb3IgYDBgIGluIGNsaWVudC1vbmx5IG1vZGUuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWF4TWVtb3J5KCk6IGludCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdmFsdWVzIG9mIGFsbCBzcGVjaWZpZWQga2V5cy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAka2V5cwogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbWdldChhcnJheSAka2V5cyk6IENsdXN0ZXJ8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGdpdmVuIGtleXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMuCiAgICAgKiBNU0VUIHJlcGxhY2VzIGV4aXN0aW5nIHZhbHVlcyB3aXRoIG5ldyB2YWx1ZXMsIGp1c3QgYXMgcmVndWxhciBTRVQuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGt2YWxzCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBtc2V0KGFycmF5ICRrdmFscyk6IENsdXN0ZXJ8YXJyYXl8Ym9vbCB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgZ2l2ZW4ga2V5cyB0byB0aGVpciByZXNwZWN0aXZlIHZhbHVlcy4KICAgICAqIE1TRVROWCB3aWxsIG5vdCBwZXJmb3JtIGFueSBvcGVyYXRpb24gYXQgYWxsIGV2ZW4gaWYganVzdCBhIHNpbmdsZSBrZXkgYWxyZWFkeSBleGlzdHMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGt2YWxzCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBtc2V0bngoYXJyYXkgJGt2YWxzKTogQ2x1c3RlcnxhcnJheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBNYXJrcyB0aGUgc3RhcnQgb2YgYSB0cmFuc2FjdGlvbiBibG9jay4gU3Vic2VxdWVudCBjb21tYW5kcyB3aWxsIGJlIHF1ZXVlZCBmb3IgYXRvbWljIGV4ZWN1dGlvbiB1c2luZyBFWEVDLgogICAgICoKICAgICAqIEFjY2VwdHMgb25seSBgUmVsYXk6Ok1VTFRJYCBtb2RlLgogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICAkbW9kZQogICAgICogQHJldHVybiBDbHVzdGVyfGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gbXVsdGkoaW50ICRtb2RlID0gUmVsYXk6Ok1VTFRJKTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBUaGlzIGlzIGEgY29udGFpbmVyIGNvbW1hbmQgZm9yIG9iamVjdCBpbnRyb3NwZWN0aW9uIGNvbW1hbmRzLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkb3AKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2JqZWN0KHN0cmluZyAkb3AsIG1peGVkICRrZXkpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgbmV3IGBmbHVzaGVkYCBldmVudCBsaXN0ZW5lci4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIG9uRmx1c2hlZCg/Y2FsbGFibGUgJGNhbGxiYWNrKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgbmV3IGBpbnZhbGlkYXRlZGAgZXZlbnQgbGlzdGVuZXIuCiAgICAgKgogICAgICogQHBhcmFtICBjYWxsYWJsZSAgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xudWxsICAkcGF0dGVybgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcTG9jYWxdCiAgICBwdWJsaWMgZnVuY3Rpb24gb25JbnZhbGlkYXRlZCg/Y2FsbGFibGUgJGNhbGxiYWNrLCA/c3RyaW5nICRwYXR0ZXJuID0gbnVsbCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJlbW92ZSB0aGUgZXhpc3RpbmcgdGltZW91dCBvbiBrZXksIHR1cm5pbmcgdGhlIGtleSBmcm9tIHZvbGF0aWxlIHRvIHBlcnNpc3RlbnQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHJldHVybiBDbHVzdGVyfGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcGVyc2lzdChtaXhlZCAka2V5KTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXQgYSBrZXkncyB0aW1lIHRvIGxpdmUgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkbWlsbGlzZWNvbmRzCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwZXhwaXJlKG1peGVkICRrZXksIGludCAkbWlsbGlzZWNvbmRzKTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGV4cGlyYXRpb24gZm9yIGEga2V5IGFzIGEgVU5JWCB0aW1lc3RhbXAgc3BlY2lmaWVkIGluIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJHRpbWVzdGFtcF9tcwogICAgICogQHJldHVybiBDbHVzdGVyfGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcGV4cGlyZWF0KG1peGVkICRrZXksIGludCAkdGltZXN0YW1wX21zKTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBTZW1hbnRpYyB0aGUgc2FtZSBhcyBFWFBJUkVUSU1FLCBidXQgcmV0dXJucyB0aGUgYWJzb2x1dGUgVW5peCBleHBpcmF0aW9uCiAgICAgKiB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIGluc3RlYWQgb2Ygc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHBleHBpcmV0aW1lKG1peGVkICRrZXkpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQWRkcyB0aGUgc3BlY2lmaWVkIGVsZW1lbnRzIHRvIHRoZSBzcGVjaWZpZWQgSHlwZXJMb2dMb2cuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgYXJyYXkgICRlbGVtZW50cwogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwZmFkZChtaXhlZCAka2V5LCBhcnJheSAkZWxlbWVudHMpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBhcHByb3hpbWF0ZWQgY2FyZGluYWxpdHkgb2YgdGhlIHNldChzKSBvYnNlcnZlZCBieSB0aGUgSHlwZXJMb2dMb2cgYXQga2V5KHMpLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAka2V5CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHBmY291bnQobWl4ZWQgJGtleSk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBNZXJnZSBnaXZlbiBIeXBlckxvZ0xvZ3MgaW50byBhIHNpbmdsZSBvbmUuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRkc3RrZXkKICAgICAqIEBwYXJhbSAgYXJyYXkgICRzcmNrZXlzCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwZm1lcmdlKHN0cmluZyAkZHN0a2V5LCBhcnJheSAkc3Jja2V5cyk6IENsdXN0ZXJ8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBQT05HIGlmIG5vIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBvdGhlcndpc2UgcmV0dXJuIGEgY29weSBvZiB0aGUgYXJndW1lbnQgYXMgYSBidWxrLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXl8c3RyaW5nICAka2V5X29yX2FkZHJlc3MKICAgICAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICRtZXNzYWdlCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8Ym9vbHxzdHJpbmcKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcGluZyhhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzLCBzdHJpbmd8bnVsbCAkbWVzc2FnZSA9IG51bGwpOiBDbHVzdGVyfGJvb2x8c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBTZXQga2V5IHRvIGhvbGQgdGhlIHN0cmluZyB2YWx1ZSBhbmQgc2V0IGtleSB0byB0aW1lb3V0IGFmdGVyIGEgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJG1pbGxpc2Vjb25kcwogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwc2V0ZXgobWl4ZWQgJGtleSwgaW50ICRtaWxsaXNlY29uZHMsIG1peGVkICR2YWx1ZSk6IENsdXN0ZXJ8Ym9vbCB7fQoKICAgIC8qKgogICAgICogU3Vic2NyaWJlcyB0byB0aGUgZ2l2ZW4gcGF0dGVybnMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJHBhdHRlcm5zCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwc3Vic2NyaWJlKGFycmF5ICRwYXR0ZXJucywgY2FsbGFibGUgJGNhbGxiYWNrKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVtYWluaW5nIHRpbWUgdG8gbGl2ZSBvZiBhIGtleSB0aGF0IGhhcyBhIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcHR0bChtaXhlZCAka2V5KTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFBvc3RzIGEgbWVzc2FnZSB0byB0aGUgZ2l2ZW4gY2hhbm5lbC4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGNoYW5uZWwKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWVzc2FnZQogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBwdWJsaXNoKHN0cmluZyAkY2hhbm5lbCwgc3RyaW5nICRtZXNzYWdlKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEEgY29udGFpbmVyIGNvbW1hbmQgZm9yIFB1Yi9TdWIgaW50cm9zcGVjdGlvbiBjb21tYW5kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5fHN0cmluZyAgJGtleV9vcl9hZGRyZXNzCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG9wZXJhdGlvbgogICAgICogQHBhcmFtICBtaXhlZCAgJGFyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHB1YnN1YihhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzLCBzdHJpbmcgJG9wZXJhdGlvbiwgbWl4ZWQgLi4uJGFyZ3MpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogVW5zdWJzY3JpYmVzIGZyb20gdGhlIGdpdmVuIHBhdHRlcm5zLCBvciBmcm9tIGFsbCBvZiB0aGVtIGlmIG5vbmUgaXMgZ2l2ZW4uCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJHBhdHRlcm5zCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcHVuc3Vic2NyaWJlKGFycmF5ICRwYXR0ZXJucyA9IFtdKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHJhbmRvbSBrZXkgZnJvbSBSZWRpcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5fHN0cmluZyAgJGtleV9vcl9hZGRyZXNzCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8Ym9vbHxzdHJpbmcKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmFuZG9ta2V5KGFycmF5fHN0cmluZyAka2V5X29yX2FkZHJlc3MpOiBDbHVzdGVyfGJvb2x8c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIGFueSBjb21tYW5kIGFnYWluc3QgUmVkaXMsIHdpdGhvdXQgYXBwbHlpbmcKICAgICAqIHRoZSBwcmVmaXgsIGNvbXByZXNzaW9uIGFuZCBzZXJpYWxpemF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXl8c3RyaW5nICAka2V5X29yX2FkZHJlc3MKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkY21kCiAgICAgKiBAcGFyYW0gIG1peGVkICAkYXJncywuLi4KICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiByYXdDb21tYW5kKGFycmF5fHN0cmluZyAka2V5X29yX2FkZHJlc3MsIHN0cmluZyAkY21kLCBtaXhlZCAuLi4kYXJncyk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBSZW5hbWVzIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbmV3a2V5CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiByZW5hbWUobWl4ZWQgJGtleSwgbWl4ZWQgJG5ld2tleSk6IENsdXN0ZXJ8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUmVuYW1lcyBrZXkgaWYgdGhlIG5ldyBrZXkgZG9lcyBub3QgeWV0IGV4aXN0LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRuZXdrZXkKICAgICAqIEByZXR1cm4gQ2x1c3Rlcnxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHJlbmFtZW54KG1peGVkICRrZXksIG1peGVkICRuZXdrZXkpOiBDbHVzdGVyfGJvb2wge30KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIGtleSBhc3NvY2lhdGVkIHdpdGggYSB2YWx1ZSB0aGF0IGlzIG9idGFpbmVkIGJ5IGRlc2VyaWFsaXppbmcgdGhlIHByb3ZpZGVkIHNlcmlhbGl6ZWQgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICR0dGwKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkdmFsdWUKICAgICAqIEBwYXJhbSAgYXJyYXl8bnVsbCAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gQ2x1c3Rlcnxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHJlc3RvcmUobWl4ZWQgJGtleSwgaW50ICR0dGwsIHN0cmluZyAkdmFsdWUsIGFycmF5fG51bGwgJG9wdGlvbnMgPSBudWxsKTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByb2xlIG9mIHRoZSBpbnN0YW5jZSBpbiB0aGUgY29udGV4dCBvZiByZXBsaWNhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5fHN0cmluZyAgJGtleV9vcl9hZGRyZXNzCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcm9sZShhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzKTogQ2x1c3RlcnxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhbmQgcmV0dXJucyB0aGUgbGFzdCBlbGVtZW50cyBvZiB0aGUgbGlzdCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcnBvcChtaXhlZCAka2V5LCBpbnQgJGNvdW50ID0gMSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBBdG9taWNhbGx5IHJldHVybnMgYW5kIHJlbW92ZXMgdGhlIGxhc3QgZWxlbWVudCAodGFpbCkgb2YgdGhlIGxpc3Qgc3RvcmVkIGF0IHNvdXJjZSwKICAgICAqIGFuZCBwdXNoZXMgdGhlIGVsZW1lbnQgYXQgdGhlIGZpcnN0IGVsZW1lbnQgKGhlYWQpIG9mIHRoZSBsaXN0IHN0b3JlZCBhdCBkZXN0aW5hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkc3Jja2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkZHN0a2V5CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHJwb3BscHVzaChtaXhlZCAkc3Jja2V5LCBtaXhlZCAkZHN0a2V5KTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIEluc2VydCBhbGwgdGhlIHNwZWNpZmllZCB2YWx1ZXMgYXQgdGhlIHRhaWwgb2YgdGhlIGxpc3Qgc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVycywuLi4KICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gcnB1c2gobWl4ZWQgJGtleSwgbWl4ZWQgJG1lbWJlciwgbWl4ZWQgLi4uJG1lbWJlcnMpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSW5zZXJ0cyBzcGVjaWZpZWQgdmFsdWVzIGF0IHRoZSB0YWlsIG9mIHRoZSBsaXN0IHN0b3JlZCBhdCBrZXksCiAgICAgKiBvbmx5IGlmIGtleSBhbHJlYWR5IGV4aXN0cyBhbmQgaG9sZHMgYSBsaXN0LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW1iZXIKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW1iZXJzLC4uLgogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBycHVzaHgobWl4ZWQgJGtleSwgbWl4ZWQgJG1lbWJlciwgbWl4ZWQgLi4uJG1lbWJlcnMpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQWRkIHRoZSBzcGVjaWZpZWQgbWVtYmVycyB0byB0aGUgc2V0IHN0b3JlZCBhdCBgJGtleWAuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbWJlcgogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbWJlcnMsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNhZGQobWl4ZWQgJGtleSwgbWl4ZWQgJG1lbWJlciwgbWl4ZWQgLi4uJG1lbWJlcnMpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogU3luY2hyb25vdXNseSBzYXZlIHRoZSBkYXRhc2V0IHRvIGRpc2suCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheXxzdHJpbmcgICRrZXlfb3JfYWRkcmVzcwogICAgICogQHJldHVybiBDbHVzdGVyfGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZShhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzKTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBTY2FuIHRoZSBrZXlzcGFjZSBmb3IgbWF0Y2hpbmcga2V5cy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkaXRlcmF0b3IKICAgICAqIEBwYXJhbSAgYXJyYXl8c3RyaW5nICAka2V5X29yX2FkZHJlc3MKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtYXRjaAogICAgICogQHBhcmFtICBpbnQgICRjb3VudAogICAgICogQHBhcmFtICBzdHJpbmd8bnVsbCAgJHR5cGUKICAgICAqIEByZXR1cm4gYXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2NhbihtaXhlZCAmJGl0ZXJhdG9yLCBhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzLCBtaXhlZCAkbWF0Y2ggPSBudWxsLCBpbnQgJGNvdW50ID0gMCwgc3RyaW5nfG51bGwgJHR5cGUgPSBudWxsKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNldCBjYXJkaW5hbGl0eSAobnVtYmVyIG9mIGVsZW1lbnRzKSBvZiB0aGUgc2V0IHN0b3JlZCBhdCBgJGtleWAuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIHNjYXJkKG1peGVkICRrZXkpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZSBhIHNjcmlwdCBtYW5hZ2VtZW50IGNvbW1hbmQuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheXxzdHJpbmcgICRrZXlfb3JfYWRkcmVzcwogICAgICogQHBhcmFtICBzdHJpbmcgICRvcGVyYXRpb24KICAgICAqIEBwYXJhbSAgc3RyaW5nICAkYXJncywuLi4KICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2NyaXB0KGFycmF5fHN0cmluZyAka2V5X29yX2FkZHJlc3MsIHN0cmluZyAkb3BlcmF0aW9uLCBzdHJpbmcgLi4uJGFyZ3MpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbWVtYmVycyBvZiB0aGUgc2V0IHJlc3VsdGluZyBmcm9tIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGZpcnN0IHNldCBhbmQgYWxsIHRoZSBzdWNjZXNzaXZlIHNldHMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG90aGVyX2tleXMsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZGlmZihtaXhlZCAka2V5LCBtaXhlZCAuLi4kb3RoZXJfa2V5cyk6IENsdXN0ZXJ8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFRoaXMgY29tbWFuZCBpcyBlcXVhbCB0byBTRElGRiwgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSByZXN1bHRpbmcgc2V0LCBpdCBpcyBzdG9yZWQgaW4gZGVzdGluYXRpb24uCiAgICAgKiBJZiBkZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0cywgaXQgaXMgb3ZlcndyaXR0ZW4uCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG90aGVyX2tleXMsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNkaWZmc3RvcmUobWl4ZWQgJGtleSwgbWl4ZWQgLi4uJG90aGVyX2tleXMpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogU2V0IGtleSB0byBob2xkIHRoZSBzdHJpbmcgdmFsdWUuIElmIGtleSBhbHJlYWR5IGhvbGRzCiAgICAgKiBhIHZhbHVlLCBpdCBpcyBvdmVyd3JpdHRlbiwgcmVnYXJkbGVzcyBvZiBpdHMgdHlwZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8c3RyaW5nfGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KG1peGVkICRrZXksIG1peGVkICR2YWx1ZSwgbWl4ZWQgJG9wdGlvbnMgPSBudWxsKTogQ2x1c3RlcnxzdHJpbmd8Ym9vbCB7fQoKICAgIC8qKgogICAgICogU2V0cyBhIGNsaWVudCBvcHRpb24uCiAgICAgKgogICAgICogUmVsYXkgc3BlY2lmaWMgb3B0aW9uczoKICAgICAqCiAgICAgKiAtIGBPUFRfQUxMT1dfUEFUVEVSTlNgCiAgICAgKiAtIGBPUFRfSUdOT1JFX1BBVFRFUk5TYAogICAgICogLSBgT1BUX1RIUk9XX09OX0VSUk9SYAogICAgICogLSBgT1BUX0NMSUVOVF9JTlZBTElEQVRJT05TYAogICAgICogLSBgT1BUX1BIUFJFRElTX0NPTVBBVElCSUxJVFlgCiAgICAgKgogICAgICogU3VwcG9ydGVkIFBocFJlZGlzIG9wdGlvbnM6CiAgICAgKgogICAgICogLSBgT1BUX1BSRUZJWGAKICAgICAqIC0gYE9QVF9SRUFEX1RJTUVPVVRgCiAgICAgKiAtIGBPUFRfQ09NUFJFU1NJT05gCiAgICAgKiAtIGBPUFRfQ09NUFJFU1NJT05fTEVWRUxgCiAgICAgKiAtIGBPUFRfTUFYX1JFVFJJRVNgCiAgICAgKiAtIGBPUFRfQkFDS09GRl9BTEdPUklUSE1gCiAgICAgKiAtIGBPUFRfQkFDS09GRl9CQVNFYAogICAgICogLSBgT1BUX0JBQ0tPRkZfQ0FQYAogICAgICogLSBgT1BUX1NDQU5gCiAgICAgKiAtIGBPUFRfUkVQTFlfTElURVJBTGAKICAgICAqIC0gYE9QVF9OVUxMX01VTFRJQlVMS19BU19OVUxMYAogICAgICogLSBgT1BUX1NMQVZFX0ZBSUxPVkVSYAogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICAkb3B0aW9uCiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXExvY2FsXQogICAgcHVibGljIGZ1bmN0aW9uIHNldE9wdGlvbihpbnQgJG9wdGlvbiwgbWl4ZWQgJHZhbHVlKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogU2V0cyBvciBjbGVhcnMgdGhlIGJpdCBhdCBvZmZzZXQgaW4gdGhlIHN0cmluZyB2YWx1ZSBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkcG9zCiAgICAgKiBAcGFyYW0gIGludCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNldGJpdChtaXhlZCAka2V5LCBpbnQgJHBvcywgaW50ICR2YWx1ZSk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBTZXQga2V5IHRvIGhvbGQgdGhlIHN0cmluZyB2YWx1ZSBhbmQgc2V0IGtleSB0byB0aW1lb3V0IGFmdGVyIGEgZ2l2ZW4gbnVtYmVyIG9mIHNlY29uZHMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRzZWNvbmRzCiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gQ2x1c3Rlcnxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNldGV4KG1peGVkICRrZXksIGludCAkc2Vjb25kcywgbWl4ZWQgJHZhbHVlKTogQ2x1c3Rlcnxib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXQga2V5IHRvIGhvbGQgc3RyaW5nIHZhbHVlIGlmIGtleSBkb2VzIG5vdCBleGlzdC4gSW4gdGhhdCBjYXNlLCBpdCBpcyBlcXVhbCB0byBTRVQuCiAgICAgKiBXaGVuIGtleSBhbHJlYWR5IGhvbGRzIGEgdmFsdWUsIG5vIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuCiAgICAgKiBTRVROWCBpcyBzaG9ydCBmb3IgIlNFVCBpZiBOb3QgZVhpc3RzIi4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gQ2x1c3Rlcnxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNldG54KG1peGVkICRrZXksIG1peGVkICR2YWx1ZSk6IENsdXN0ZXJ8Ym9vbCB7fQoKICAgIC8qKgogICAgICogT3ZlcndyaXRlcyBwYXJ0IG9mIHRoZSBzdHJpbmcgc3RvcmVkIGF0IGtleSwgc3RhcnRpbmcgYXQKICAgICAqIHRoZSBzcGVjaWZpZWQgb2Zmc2V0LCBmb3IgdGhlIGVudGlyZSBsZW5ndGggb2YgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRzdGFydAogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNldHJhbmdlKG1peGVkICRrZXksIGludCAkc3RhcnQsIG1peGVkICR2YWx1ZSk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtZW1iZXJzIG9mIHRoZSBzZXQgcmVzdWx0aW5nIGZyb20gdGhlIGludGVyc2VjdGlvbiBvZiBhbGwgdGhlIGdpdmVuIHNldHMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG90aGVyX2tleXMsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzaW50ZXIobWl4ZWQgJGtleSwgbWl4ZWQgLi4uJG90aGVyX2tleXMpOiBDbHVzdGVyfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJbnRlcnNlY3QgbXVsdGlwbGUgc2V0cyBhbmQgcmV0dXJuIHRoZSBjYXJkaW5hbGl0eSBvZiB0aGUgcmVzdWx0LgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrZXlzCiAgICAgKiBAcGFyYW0gIGludCAgJGxpbWl0CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2ludGVyY2FyZChhcnJheSAka2V5cywgaW50ICRsaW1pdCA9IC0xKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFRoaXMgY29tbWFuZCBpcyBlcXVhbCB0byBTSU5URVIsIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyB0aGUgcmVzdWx0aW5nIHNldCwgaXQgaXMgc3RvcmVkIGluIGRlc3RpbmF0aW9uLgogICAgICogSWYgZGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMsIGl0IGlzIG92ZXJ3cml0dGVuLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRvdGhlcl9rZXlzLC4uLgogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzaW50ZXJzdG9yZShtaXhlZCAka2V5LCBtaXhlZCAuLi4kb3RoZXJfa2V5cyk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGlmIGAkbWVtYmVyYCBpcyBhIG1lbWJlciBvZiB0aGUgc2V0IHN0b3JlZCBhdCBgJGtleWAuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbWJlcgogICAgICogQHJldHVybiBDbHVzdGVyfGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzaXNtZW1iZXIobWl4ZWQgJGtleSwgbWl4ZWQgJG1lbWJlcik6IENsdXN0ZXJ8Ym9vbCB7fQoKICAgIC8qKgogICAgICogSW50ZXJhY3Qgd2l0aCB0aGUgUmVkaXMgc2xvd2xvZy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5fHN0cmluZyAgJGtleV9vcl9hZGRyZXNzCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJG9wZXJhdGlvbgogICAgICogQHBhcmFtICBtaXhlZCAgJGFyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8aW50fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2xvd2xvZyhhcnJheXxzdHJpbmcgJGtleV9vcl9hZGRyZXNzLCBzdHJpbmcgJG9wZXJhdGlvbiwgbWl4ZWQgLi4uJGFyZ3MpOiBDbHVzdGVyfGFycmF5fGludHxib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCB0aGUgbWVtYmVycyBvZiB0aGUgc2V0IHZhbHVlIHN0b3JlZCBhdCBgJGtleWAuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc21lbWJlcnMobWl4ZWQgJGtleSk6IENsdXN0ZXJ8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciBlYWNoIG1lbWJlciBpcyBhIG1lbWJlciBvZiB0aGUgc2V0IHN0b3JlZCBhdCBgJGtleWAuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbWJlcnMsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmQsIFxSZWxheVxBdHRyaWJ1dGVzXENhY2hlZF0KICAgIHB1YmxpYyBmdW5jdGlvbiBzbWlzbWVtYmVyKG1peGVkICRrZXksIG1peGVkIC4uLiRtZW1iZXJzKTogQ2x1c3RlcnxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogTW92ZSBtZW1iZXIgZnJvbSB0aGUgc2V0IGF0IHNvdXJjZSB0byB0aGUgc2V0IGF0IGRlc3RpbmF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRzcmNrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRkc3RrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtZW1iZXIKICAgICAqIEByZXR1cm4gQ2x1c3Rlcnxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNtb3ZlKG1peGVkICRzcmNrZXksIG1peGVkICRkc3RrZXksIG1peGVkICRtZW1iZXIpOiBDbHVzdGVyfGJvb2wge30KCiAgICAvKioKICAgICAqIFNvcnQgdGhlIGVsZW1lbnRzIGluIGEgbGlzdCwgc2V0IG9yIHNvcnRlZCBzZXQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc29ydChtaXhlZCAka2V5LCBhcnJheSAkb3B0aW9ucyA9IFtdKTogQ2x1c3RlcnxhcnJheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFNvcnQgdGhlIGVsZW1lbnRzIGluIGEgbGlzdCwgc2V0IG9yIHNvcnRlZCBzZXQuIFJlYWQtb25seSB2YXJpYW50IG9mIFNPUlQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBhcnJheSAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc29ydF9ybyhtaXhlZCAka2V5LCBhcnJheSAkb3B0aW9ucyA9IFtdKTogQ2x1c3RlcnxhcnJheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYW5kIHJldHVybnMgb25lIG9yIG1vcmUgcmFuZG9tIG1lbWJlcnMgZnJvbSB0aGUgc2V0IHZhbHVlIHN0b3JlIGF0IGAka2V5YC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNwb3AobWl4ZWQgJGtleSwgaW50ICRjb3VudCA9IDEpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBvbmUgb3IgbXVsdGlwbGUgcmFuZG9tIG1lbWJlcnMgZnJvbSBhIHNldC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3JhbmRtZW1iZXIobWl4ZWQgJGtleSwgaW50ICRjb3VudCA9IDEpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIHRoZSBzcGVjaWZpZWQgbWVtYmVycyBmcm9tIHRoZSBzZXQgc3RvcmVkIGF0IGAka2V5YC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVycywuLi4KICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3JlbShtaXhlZCAka2V5LCBtaXhlZCAkbWVtYmVyLCBtaXhlZCAuLi4kbWVtYmVycyk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJdGVyYXRlcyBlbGVtZW50cyBvZiBTZXRzIHR5cGVzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRpdGVyYXRvcgogICAgICogQHBhcmFtICBtaXhlZCAgJG1hdGNoCiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNzY2FuKG1peGVkICRrZXksIG1peGVkICYkaXRlcmF0b3IsIG1peGVkICRtYXRjaCA9IG51bGwsIGludCAkY291bnQgPSAwKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFN1YnNjcmliZXMgdG8gdGhlIHNwZWNpZmllZCBzaGFyZCBjaGFubmVscy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkY2hhbm5lbHMKICAgICAqIEBwYXJhbSAgY2FsbGFibGUgICRjYWxsYmFjawogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHNzdWJzY3JpYmUoYXJyYXkgJGNoYW5uZWxzLCBjYWxsYWJsZSAkY2FsbGJhY2spOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHN0YXRpc3RpY3MgYWJvdXQgUmVsYXkuCiAgICAgKgogICAgICogQHNlZSBcUmVsYXlcUmVsYXk6OnN0YXRzKCkKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xMb2NhbF0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RhdHMoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHZhbHVlIHN0b3JlZCBhdCBgJGtleWAuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZCwgXFJlbGF5XEF0dHJpYnV0ZXNcQ2FjaGVkXQogICAgcHVibGljIGZ1bmN0aW9uIHN0cmxlbihtaXhlZCAka2V5KTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFN1YnNjcmliZXMgdG8gdGhlIHNwZWNpZmllZCBjaGFubmVscy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkY2hhbm5lbHMKICAgICAqIEBwYXJhbSAgY2FsbGFibGUgICRjYWxsYmFjawogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHN1YnNjcmliZShhcnJheSAkY2hhbm5lbHMsIGNhbGxhYmxlICRjYWxsYmFjayk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG1lbWJlcnMgb2YgdGhlIHNldCByZXN1bHRpbmcgZnJvbSB0aGUgdW5pb24gb2YgYWxsIHRoZSBnaXZlbiBzZXRzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRvdGhlcl9rZXlzLC4uLgogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kLCBcUmVsYXlcQXR0cmlidXRlc1xDYWNoZWRdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3VuaW9uKG1peGVkICRrZXksIG1peGVkIC4uLiRvdGhlcl9rZXlzKTogQ2x1c3RlcnxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVGhpcyBjb21tYW5kIGlzIGVxdWFsIHRvIFNVTklPTiwgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSByZXN1bHRpbmcgc2V0LCBpdCBpcyBzdG9yZWQgaW4gZGVzdGluYXRpb24uCiAgICAgKiBJZiBkZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0cywgaXQgaXMgb3ZlcndyaXR0ZW4uCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG90aGVyX2tleXMsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHN1bmlvbnN0b3JlKG1peGVkICRrZXksIG1peGVkIC4uLiRvdGhlcl9rZXlzKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFVuc3Vic2NyaWJlcyBmcm9tIHRoZSBnaXZlbiBzaGFyZCBjaGFubmVscywgb3IgZnJvbSBhbGwgb2YgdGhlbSBpZiBub25lIGlzIGdpdmVuLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRjaGFubmVscwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHN1bnN1YnNjcmliZShhcnJheSAkY2hhbm5lbHMgPSBbXSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGltZSBmcm9tIFJlZGlzLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXl8c3RyaW5nICAka2V5X29yX2FkZHJlc3MKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB0aW1lKGFycmF5fHN0cmluZyAka2V5X29yX2FkZHJlc3MpOiBDbHVzdGVyfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBBbHRlcnMgdGhlIGxhc3QgYWNjZXNzIHRpbWUgb2YgYSBrZXkocykuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheXxzdHJpbmcgICRrZXlfb3JfYXJyYXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtb3JlX2tleXMsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHRvdWNoKGFycmF5fHN0cmluZyAka2V5X29yX2FycmF5LCBtaXhlZCAuLi4kbW9yZV9rZXlzKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlbWFpbmluZyB0aW1lIHRvIGxpdmUgb2YgYSBrZXkgdGhhdCBoYXMgYSB0aW1lb3V0IGluIHNlY29uZHMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB0dGwobWl4ZWQgJGtleSk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIGEgZ2l2ZW4ga2V5LgogICAgICoKICAgICAqIEluIFBocFJlZGlzIGNvbXBhdGliaWxpdHkgbW9kZSB0aGlzIHdpbGwgcmV0dXJuIGFuIGludGVnZXIKICAgICAqIChvbmUgb2YgdGhlIFJFRElTXzx0eXBlPikgY29uc3RhbnRzLiBPdGhlcndpc2UgaXQgd2lsbAogICAgICogcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBSZWRpcyByZXR1cm5zLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8c3RyaW5nfGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHR5cGUobWl4ZWQgJGtleSk6IENsdXN0ZXJ8aW50fHN0cmluZ3xib29sIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5cyB3aXRob3V0IGJsb2NraW5nIFJlZGlzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXlzLC4uLgogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB1bmxpbmsobWl4ZWQgLi4uJGtleXMpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVW5zdWJzY3JpYmVzIGZyb20gdGhlIGdpdmVuIGNoYW5uZWxzLCBvciBmcm9tIGFsbCBvZiB0aGVtIGlmIG5vbmUgaXMgZ2l2ZW4uCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGNoYW5uZWxzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zdWJzY3JpYmUoYXJyYXkgJGNoYW5uZWxzID0gW10pOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBGbHVzaGVzIGFsbCB0aGUgcHJldmlvdXNseSB3YXRjaGVkIGtleXMgZm9yIGEgdHJhbnNhY3Rpb24uCiAgICAgKiBJZiB5b3UgY2FsbCBFWEVDIG9yIERJU0NBUkQsIHRoZXJlJ3Mgbm8gbmVlZCB0byBtYW51YWxseSBjYWxsIFVOV0FUQ0guCiAgICAgKgogICAgICogQHJldHVybiBDbHVzdGVyfGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gdW53YXRjaCgpOiBDbHVzdGVyfGJvb2wge30KCiAgICAvKioKICAgICAqIE1hcmtzIHRoZSBnaXZlbiBrZXlzIHRvIGJlIHdhdGNoZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbiBvZiBhIHRyYW5zYWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRvdGhlcl9rZXlzLC4uLgogICAgICogQHJldHVybiBDbHVzdGVyfGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gd2F0Y2gobWl4ZWQgJGtleSwgbWl4ZWQgLi4uJG90aGVyX2tleXMpOiBDbHVzdGVyfGJvb2wge30KCiAgICAvKioKICAgICAqIEFja25vd2xlZGdlIG9uZSBvciBtb3JlIElEcyBhcyBoYXZpbmcgYmVlbiBwcm9jZXNzZWQgYnkgdGhlIGNvbnN1bWVyIGdyb3VwLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZ3JvdXAKICAgICAqIEBwYXJhbSAgYXJyYXkgICRpZHMKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24geGFjayhtaXhlZCAka2V5LCBzdHJpbmcgJGdyb3VwLCBhcnJheSAkaWRzKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEFwcGVuZCBhIG1lc3NhZ2UgdG8gYSBzdHJlYW0uCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkaWQKICAgICAqIEBwYXJhbSAgaW50ICAkbWF4bGVuCiAgICAgKiBAcGFyYW0gIGJvb2wgICRhcHByb3gKICAgICAqIEBwYXJhbSAgYm9vbCAgJG5vbWtzdHJlYW0KICAgICAqIEByZXR1cm4gQ2x1c3RlcnxzdHJpbmd8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24geGFkZChtaXhlZCAka2V5LCBzdHJpbmcgJGlkLCBhcnJheSAkdmFsdWVzLCBpbnQgJG1heGxlbiA9IDAsIGJvb2wgJGFwcHJveCA9IGZhbHNlLCBib29sICRub21rc3RyZWFtID0gZmFsc2UpOiBDbHVzdGVyfHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogQXV0b21hdGljYWxseSB0YWtlIG93bmVyc2hpcCBvZiBzdHJlYW0gbWVzc2FnZShzKSBieSBtZXRyaWNzCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZ3JvdXAKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkY29uc3VtZXIKICAgICAqIEBwYXJhbSAgaW50ICAkbWluX2lkbGUKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc3RhcnQKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEBwYXJhbSAgYm9vbCAgJGp1c3RpZAogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGJvb2wKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24geGF1dG9jbGFpbShtaXhlZCAka2V5LCBzdHJpbmcgJGdyb3VwLCBzdHJpbmcgJGNvbnN1bWVyLCBpbnQgJG1pbl9pZGxlLCBzdHJpbmcgJHN0YXJ0LCBpbnQgJGNvdW50ID0gLTEsIGJvb2wgJGp1c3RpZCA9IGZhbHNlKTogQ2x1c3Rlcnxib29sfGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBDbGFpbSBvd25lcnNoaXAgb2Ygc3RyZWFtIG1lc3NhZ2UocykuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZ3JvdXAKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkY29uc3VtZXIKICAgICAqIEBwYXJhbSAgaW50ICAkbWluX2lkbGUKICAgICAqIEBwYXJhbSAgYXJyYXkgICRpZHMKICAgICAqIEBwYXJhbSAgYXJyYXkgICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8Ym9vbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB4Y2xhaW0obWl4ZWQgJGtleSwgc3RyaW5nICRncm91cCwgc3RyaW5nICRjb25zdW1lciwgaW50ICRtaW5faWRsZSwgYXJyYXkgJGlkcywgYXJyYXkgJG9wdGlvbnMpOiBDbHVzdGVyfGFycmF5fGJvb2wge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBvbmUgb3IgbW9yZSBzcGVjaWZpYyBJRHMgZnJvbSBhIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBhcnJheSAgJGlkcwogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB4ZGVsKG1peGVkICRrZXksIGFycmF5ICRpZHMpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybSB1dGlsaXR5IG9wZXJhdGlvbnMgaGF2aW5nIHRvIGRvIHdpdGggY29uc3VtZXIgZ3JvdXBzCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRvcGVyYXRpb24KICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZ3JvdXAKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkaWRfb3JfY29uc3VtZXIKICAgICAqIEBwYXJhbSAgYm9vbCAgJG1rc3RyZWFtCiAgICAgKiBAcGFyYW0gIGludCAgJGVudHJpZXNfcmVhZAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB4Z3JvdXAoc3RyaW5nICRvcGVyYXRpb24sIG1peGVkICRrZXkgPSBudWxsLCBzdHJpbmcgJGdyb3VwID0gbnVsbCwgc3RyaW5nICRpZF9vcl9jb25zdW1lciA9IG51bGwsIGJvb2wgJG1rc3RyZWFtID0gZmFsc2UsIGludCAkZW50cmllc19yZWFkID0gLTIpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgYSBzdHJlYW0ga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkb3BlcmF0aW9uCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xudWxsICAkYXJnMQogICAgICogQHBhcmFtICBzdHJpbmd8bnVsbCAgJGFyZzIKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24geGluZm8oc3RyaW5nICRvcGVyYXRpb24sIHN0cmluZ3xudWxsICRhcmcxID0gbnVsbCwgc3RyaW5nfG51bGwgJGFyZzIgPSBudWxsLCBpbnQgJGNvdW50ID0gLTEpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBsZW5ndGggb2YgYSBzdHJlYW0uCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB4bGVuKG1peGVkICRrZXkpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUXVlcnkgcGVuZGluZyBlbnRyaWVzIGluIGEgc3RyZWFtLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAka2V5CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGdyb3VwCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xudWxsICAkc3RhcnQKICAgICAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICRlbmQKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEBwYXJhbSAgc3RyaW5nfG51bGwgICRjb25zdW1lcgogICAgICogQHBhcmFtICBpbnQgICRpZGxlCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24geHBlbmRpbmcobWl4ZWQgJGtleSwgc3RyaW5nICRncm91cCwgc3RyaW5nfG51bGwgJHN0YXJ0ID0gbnVsbCwgc3RyaW5nfG51bGwgJGVuZCA9IG51bGwsIGludCAkY291bnQgPSAtMSwgc3RyaW5nfG51bGwgJGNvbnN1bWVyID0gbnVsbCwgaW50ICRpZGxlID0gMCk6IENsdXN0ZXJ8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIExpc3RzIGVsZW1lbnRzIGluIGEgc3RyZWFtLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc3RhcnQKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZW5kCiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50ID0gLTEKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB4cmFuZ2UobWl4ZWQgJGtleSwgc3RyaW5nICRzdGFydCwgc3RyaW5nICRlbmQsIGludCAkY291bnQgPSAtMSk6IENsdXN0ZXJ8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlYWQgbWVzc2FnZXMgZnJvbSBhIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkc3RyZWFtcwogICAgICogQHBhcmFtICBpbnQgICRjb3VudAogICAgICogQHBhcmFtICBpbnQgICRibG9jawogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGJvb2x8bnVsbAogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB4cmVhZChhcnJheSAkc3RyZWFtcywgaW50ICRjb3VudCA9IC0xLCBpbnQgJGJsb2NrID0gLTEpOiBDbHVzdGVyfGFycmF5fGJvb2x8bnVsbCB7fQoKICAgIC8qKgogICAgICogUmVhZCBtZXNzYWdlcyBmcm9tIGEgc3RyZWFtIHVzaW5nIGEgY29uc3VtZXIgZ3JvdXAuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgICRjb25zdW1lcgogICAgICogQHBhcmFtICBhcnJheSAgJHN0cmVhbXMKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEBwYXJhbSAgaW50ICAkYmxvY2sKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxib29sfG51bGwKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24geHJlYWRncm91cChtaXhlZCAka2V5LCBzdHJpbmcgJGNvbnN1bWVyLCBhcnJheSAkc3RyZWFtcywgaW50ICRjb3VudCA9IDEsIGludCAkYmxvY2sgPSAxKTogQ2x1c3RlcnxhcnJheXxib29sfG51bGwge30KCiAgICAvKioKICAgICAqIEdldCBhIHJhbmdlIG9mIGVudHJpZXMgZnJvbSBhIFNUUkVBTSBrZSBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgICRlbmQKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkc3RhcnQKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxib29sCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHhyZXZyYW5nZShtaXhlZCAka2V5LCBzdHJpbmcgJGVuZCwgc3RyaW5nICRzdGFydCwgaW50ICRjb3VudCA9IC0xKTogQ2x1c3RlcnxhcnJheXxib29sIHt9CgogICAgLyoqCiAgICAgKiBUcnVuY2F0ZSBhIFNUUkVBTSBrZXkgaW4gdmFyaW91cyB3YXlzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkdGhyZXNob2xkCiAgICAgKiBAcGFyYW0gIGJvb2wgICRhcHByb3gKICAgICAqIEBwYXJhbSAgYm9vbCAgJG1pbmlkCiAgICAgKiBAcGFyYW0gIGludCAgJGxpbWl0CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHh0cmltKG1peGVkICRrZXksIHN0cmluZyAkdGhyZXNob2xkLCBib29sICRhcHByb3ggPSBmYWxzZSwgYm9vbCAkbWluaWQgPSBmYWxzZSwgaW50ICRsaW1pdCA9IC0xKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEFkZHMgYWxsIHRoZSBzcGVjaWZpZWQgbWVtYmVycyB3aXRoIHRoZSBzcGVjaWZpZWQgc2NvcmVzIHRvIHRoZSBzb3J0ZWQgc2V0IHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJGFyZ3MsLi4uCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHphZGQobWl4ZWQgJGtleSwgbWl4ZWQgLi4uJGFyZ3MpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc29ydGVkIHNldCBjYXJkaW5hbGl0eSAobnVtYmVyIG9mIGVsZW1lbnRzKSBvZiB0aGUgc29ydGVkIHNldCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gemNhcmQobWl4ZWQgJGtleSk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHNvcnRlZCBzZXQgYXQga2V5IHdpdGggYSBzY29yZSBiZXR3ZWVuIG1pbiBhbmQgbWF4LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtaW4KICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtYXgKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gemNvdW50KG1peGVkICRrZXksIG1peGVkICRtaW4sIG1peGVkICRtYXgpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVGhpcyBjb21tYW5kIGlzIHNpbWlsYXIgdG8gWkRJRkZTVE9SRSwgYnV0IGluc3RlYWQgb2Ygc3RvcmluZyB0aGUKICAgICAqIHJlc3VsdGluZyBzb3J0ZWQgc2V0LCBpdCBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50LgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrZXlzCiAgICAgKiBAcGFyYW0gIGFycmF5fG51bGwgICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gemRpZmYoYXJyYXkgJGtleXMsIGFycmF5fG51bGwgJG9wdGlvbnMgPSBudWxsKTogQ2x1c3RlcnxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogQ29tcHV0ZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIGFsbCBzdWNjZXNzaXZlCiAgICAgKiBpbnB1dCBzb3J0ZWQgc2V0cyBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gZGVzdGluYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGRzdGtleQogICAgICogQHBhcmFtICBhcnJheSAgJGtleXMKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gemRpZmZzdG9yZShtaXhlZCAkZHN0a2V5LCBhcnJheSAka2V5cyk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnRzIHRoZSBzY29yZSBvZiBtZW1iZXIgaW4gdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IGtleSBieSBpbmNyZW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBmbG9hdCAgJHNjb3JlCiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8ZmxvYXR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gemluY3JieShtaXhlZCAka2V5LCBmbG9hdCAkc2NvcmUsIG1peGVkICRtZW1iZXIpOiBDbHVzdGVyfGZsb2F0fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBUaGlzIGNvbW1hbmQgaXMgc2ltaWxhciB0byBaSU5URVJTVE9SRSwgYnV0IGluc3RlYWQgb2Ygc3RvcmluZwogICAgICogdGhlIHJlc3VsdGluZyBzb3J0ZWQgc2V0LCBpdCBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50LgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrZXlzCiAgICAgKiBAcGFyYW0gIGFycmF5fG51bGwgICR3ZWlnaHRzCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3B0aW9ucwogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHppbnRlcihhcnJheSAka2V5cywgYXJyYXl8bnVsbCAkd2VpZ2h0cyA9IG51bGwsIG1peGVkICRvcHRpb25zID0gbnVsbCk6IENsdXN0ZXJ8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEludGVyc2VjdCBtdWx0aXBsZSBzb3J0ZWQgc2V0cyBhbmQgcmV0dXJuIHRoZSBjYXJkaW5hbGl0eSBvZiB0aGUgcmVzdWx0LgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrZXlzCiAgICAgKiBAcGFyYW0gIGludCAgJGxpbWl0CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHppbnRlcmNhcmQoYXJyYXkgJGtleXMsIGludCAkbGltaXQgPSAtMSk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBDb21wdXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIG51bWtleXMgc29ydGVkIHNldHMgZ2l2ZW4gYnkgdGhlCiAgICAgKiBzcGVjaWZpZWQga2V5cywgYW5kIHN0b3JlcyB0aGUgcmVzdWx0IGluIGRlc3RpbmF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRkc3RrZXkKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrZXlzCiAgICAgKiBAcGFyYW0gIGFycmF5fG51bGwgICR3ZWlnaHRzCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3B0aW9ucwogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6aW50ZXJzdG9yZShtaXhlZCAkZHN0a2V5LCBhcnJheSAka2V5cywgYXJyYXl8bnVsbCAkd2VpZ2h0cyA9IG51bGwsIG1peGVkICRvcHRpb25zID0gbnVsbCk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBXaGVuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBzb3J0ZWQgc2V0IGFyZSBpbnNlcnRlZCB3aXRoIHRoZSBzYW1lIHNjb3JlLAogICAgICogaW4gb3JkZXIgdG8gZm9yY2UgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyaW5nLCB0aGlzIGNvbW1hbmQgcmV0dXJucyB0aGUKICAgICAqIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc29ydGVkIHNldCBhdCBrZXkgd2l0aCBhIHZhbHVlIGJldHdlZW4gbWluIGFuZCBtYXguCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1pbgogICAgICogQHBhcmFtICBtaXhlZCAgJG1heAogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6bGV4Y291bnQobWl4ZWQgJGtleSwgbWl4ZWQgJG1pbiwgbWl4ZWQgJG1heCk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBQb3BzIG9uZSBvciBtb3JlIGVsZW1lbnRzLCB0aGF0IGFyZSBtZW1iZXItc2NvcmUgcGFpcnMsIGZyb20gdGhlCiAgICAgKiBmaXJzdCBub24tZW1wdHkgc29ydGVkIHNldCBpbiB0aGUgcHJvdmlkZWQgbGlzdCBvZiBrZXkgbmFtZXMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGtleXMKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkZnJvbQogICAgICogQHBhcmFtICBpbnQgICRjb3VudAogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fG51bGx8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gem1wb3AoYXJyYXkgJGtleXMsIHN0cmluZyAkZnJvbSwgaW50ICRjb3VudCA9IDEpOiBDbHVzdGVyfGFycmF5fG51bGx8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNjb3JlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBtZW1iZXJzIGluIHRoZSBzb3J0ZWQgc2V0IHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1lbWJlcnMsLi4uCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24gem1zY29yZShtaXhlZCAka2V5LCBtaXhlZCAuLi4kbWVtYmVycyk6IENsdXN0ZXJ8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYW5kIHJldHVybnMgdXAgdG8gY291bnQgbWVtYmVycyB3aXRoIHRoZSBoaWdoZXN0CiAgICAgKiBzY29yZXMgaW4gdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genBvcG1heChtaXhlZCAka2V5LCBpbnQgJGNvdW50ID0gMSk6IENsdXN0ZXJ8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYW5kIHJldHVybnMgdXAgdG8gY291bnQgbWVtYmVycyB3aXRoIHRoZSBsb3dlc3QKICAgICAqIHNjb3JlcyBpbiB0aGUgc29ydGVkIHNldCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cG9wbWluKG1peGVkICRrZXksIGludCAkY291bnQgPSAxKTogQ2x1c3RlcnxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogV2hlbiBjYWxsZWQgd2l0aCBqdXN0IHRoZSBrZXkgYXJndW1lbnQsIHJldHVybiBhIHJhbmRvbSBlbGVtZW50IGZyb20gdGhlIHNvcnRlZCBzZXQgdmFsdWUgc3RvcmVkIGF0IGtleS4KICAgICAqIElmIHRoZSBwcm92aWRlZCBjb3VudCBhcmd1bWVudCBpcyBwb3NpdGl2ZSwgcmV0dXJuIGFuIGFycmF5IG9mIGRpc3RpbmN0IGVsZW1lbnRzLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgYXJyYXl8bnVsbCAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genJhbmRtZW1iZXIobWl4ZWQgJGtleSwgYXJyYXl8bnVsbCAkb3B0aW9ucyA9IG51bGwpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGVsZW1lbnRzIGluIHRoZSBzb3J0ZWQgc2V0IHN0b3JlZCBhdCBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgICRzdGFydAogICAgICogQHBhcmFtICBzdHJpbmcgICRlbmQKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genJhbmdlKG1peGVkICRrZXksIHN0cmluZyAkc3RhcnQsIHN0cmluZyAkZW5kLCBtaXhlZCAkb3B0aW9ucyA9IG51bGwpOiBDbHVzdGVyfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBXaGVuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBzb3J0ZWQgc2V0IGFyZSBpbnNlcnRlZCB3aXRoIHRoZSBzYW1lIHNjb3JlLAogICAgICogaW4gb3JkZXIgdG8gZm9yY2UgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyaW5nLCB0aGlzIGNvbW1hbmQgcmV0dXJucyBhbGwKICAgICAqIHRoZSBlbGVtZW50cyBpbiB0aGUgc29ydGVkIHNldCBhdCBrZXkgd2l0aCBhIHZhbHVlIGJldHdlZW4gbWluIGFuZCBtYXguCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG1pbgogICAgICogQHBhcmFtICBtaXhlZCAgJG1heAogICAgICogQHBhcmFtICBpbnQgICRvZmZzZXQKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cmFuZ2VieWxleChtaXhlZCAka2V5LCBtaXhlZCAkbWluLCBtaXhlZCAkbWF4LCBpbnQgJG9mZnNldCA9IC0xLCBpbnQgJGNvdW50ID0gLTEpOiBDbHVzdGVyfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhlIHNvcnRlZCBzZXQgYXQga2V5IHdpdGggYSBzY29yZSBiZXR3ZWVuCiAgICAgKiBtaW4gYW5kIG1heCAoaW5jbHVkaW5nIGVsZW1lbnRzIHdpdGggc2NvcmUgZXF1YWwgdG8gbWluIG9yIG1heCkuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gIG1peGVkICAkZW5kCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3B0aW9ucwogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHpyYW5nZWJ5c2NvcmUobWl4ZWQgJGtleSwgbWl4ZWQgJHN0YXJ0LCBtaXhlZCAkZW5kLCBtaXhlZCAkb3B0aW9ucyA9IG51bGwpOiBDbHVzdGVyfGFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhlIHNvcnRlZCBzZXQgYXQga2V5IHdpdGggYSBzY29yZSBiZXR3ZWVuCiAgICAgKiBtYXggYW5kIG1pbiAoaW5jbHVkaW5nIGVsZW1lbnRzIHdpdGggc2NvcmUgZXF1YWwgdG8gbWF4IG9yIG1pbikuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGRzdGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJHNyY2tleQogICAgICogQHBhcmFtICBtaXhlZCAgJHN0YXJ0CiAgICAgKiBAcGFyYW0gIG1peGVkICAkZW5kCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3B0aW9ucwogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cmFuZ2VzdG9yZShtaXhlZCAkZHN0a2V5LCBtaXhlZCAkc3Jja2V5LCBtaXhlZCAkc3RhcnQsIG1peGVkICRlbmQsIG1peGVkICRvcHRpb25zID0gbnVsbCk6IENsdXN0ZXJ8aW50fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByYW5rIG9mIG1lbWJlciBpbiB0aGUgc29ydGVkIHNldCBzdG9yZWQgYXQga2V5LCB3aXRoIHRoZSBzY29yZXMKICAgICAqIG9yZGVyZWQgZnJvbSBsb3cgdG8gaGlnaC4gVGhlIHJhbmsgKG9yIGluZGV4KSBpcyAwLWJhc2VkLCB3aGljaCBtZWFucwogICAgICogdGhhdCB0aGUgbWVtYmVyIHdpdGggdGhlIGxvd2VzdCBzY29yZSBoYXMgcmFuayAwLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRyYW5rCiAgICAgKiBAcGFyYW0gIGJvb2wgICR3aXRoc2NvcmUKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genJhbmsobWl4ZWQgJGtleSwgbWl4ZWQgJHJhbmssIGJvb2wgJHdpdGhzY29yZSA9IGZhbHNlKTogQ2x1c3RlcnxhcnJheXxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBtZW1iZXJzIGZyb20gdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IGtleS4KICAgICAqIE5vbiBleGlzdGluZyBtZW1iZXJzIGFyZSBpZ25vcmVkLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRhcmdzLC4uLgogICAgICogQHJldHVybiBDbHVzdGVyfGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cmVtKG1peGVkICRrZXksIG1peGVkIC4uLiRhcmdzKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFdoZW4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIHNvcnRlZCBzZXQgYXJlIGluc2VydGVkIHdpdGggdGhlIHNhbWUgc2NvcmUsCiAgICAgKiBpbiBvcmRlciB0byBmb3JjZSBsZXhpY29ncmFwaGljYWwgb3JkZXJpbmcsIHRoaXMgY29tbWFuZCByZW1vdmVzIGFsbAogICAgICogZWxlbWVudHMgaW4gdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IGtleSBiZXR3ZWVuIHRoZQogICAgICogbGV4aWNvZ3JhcGhpY2FsIHJhbmdlIHNwZWNpZmllZCBieSBtaW4gYW5kIG1heC4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWluCiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWF4CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8aW50fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHpyZW1yYW5nZWJ5bGV4KG1peGVkICRrZXksIG1peGVkICRtaW4sIG1peGVkICRtYXgpOiBDbHVzdGVyfGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgaW4gdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IGtleSB3aXRoIHJhbmsgYmV0d2VlbgogICAgICogc3RhcnQgYW5kIHN0b3AuIEJvdGggc3RhcnQgYW5kIHN0b3AgYXJlIDAgLWJhc2VkIGluZGV4ZXMgd2l0aCAwIGJlaW5nCiAgICAgKiB0aGUgZWxlbWVudCB3aXRoIHRoZSBsb3dlc3Qgc2NvcmUuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBpbnQgICRzdGFydAogICAgICogQHBhcmFtICBpbnQgICRlbmQKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genJlbXJhbmdlYnlyYW5rKG1peGVkICRrZXksIGludCAkc3RhcnQsIGludCAkZW5kKTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGluIHRoZSBzb3J0ZWQgc2V0IHN0b3JlZCBhdCBrZXkgd2l0aAogICAgICogYSBzY29yZSBiZXR3ZWVuIG1pbiBhbmQgbWF4IChpbmNsdXNpdmUpLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtaW4KICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtYXgKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genJlbXJhbmdlYnlzY29yZShtaXhlZCAka2V5LCBtaXhlZCAkbWluLCBtaXhlZCAkbWF4KTogQ2x1c3RlcnxpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNwZWNpZmllZCByYW5nZSBvZiBlbGVtZW50cyBpbiB0aGUgc29ydGVkIHNldCBzdG9yZWQgYXQga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgaW50ICAkc3RhcnQKICAgICAqIEBwYXJhbSAgaW50ICAkZW5kCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3B0aW9ucwogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHpyZXZyYW5nZShtaXhlZCAka2V5LCBpbnQgJHN0YXJ0LCBpbnQgJGVuZCwgbWl4ZWQgJG9wdGlvbnMgPSBudWxsKTogQ2x1c3RlcnxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogV2hlbiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgc29ydGVkIHNldCBhcmUgaW5zZXJ0ZWQgd2l0aCB0aGUgc2FtZSBzY29yZSwKICAgICAqIGluIG9yZGVyIHRvIGZvcmNlIGxleGljb2dyYXBoaWNhbCBvcmRlcmluZywgdGhpcyBjb21tYW5kIHJldHVybnMgYWxsCiAgICAgKiB0aGUgZWxlbWVudHMgaW4gdGhlIHNvcnRlZCBzZXQgYXQga2V5IHdpdGggYSB2YWx1ZSBiZXR3ZWVuIG1heCBhbmQgbWluLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtYXgKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRtaW4KICAgICAqIEBwYXJhbSAgaW50ICAkb2Zmc2V0CiAgICAgKiBAcGFyYW0gIGludCAgJGNvdW50CiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8YXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genJldnJhbmdlYnlsZXgobWl4ZWQgJGtleSwgbWl4ZWQgJG1heCwgbWl4ZWQgJG1pbiwgaW50ICRvZmZzZXQgPSAtMSwgaW50ICRjb3VudCA9IC0xKTogQ2x1c3RlcnxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBzb3J0ZWQgc2V0IGF0IGtleSB3aXRoIGEgc2NvcmUgYmV0d2VlbgogICAgICogbWF4IGFuZCBtaW4gKGluY2x1ZGluZyBlbGVtZW50cyB3aXRoIHNjb3JlIGVxdWFsIHRvIG1heCBvciBtaW4pLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRzdGFydAogICAgICogQHBhcmFtICBtaXhlZCAgJGVuZAogICAgICogQHBhcmFtICBtaXhlZCAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxhcnJheXxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cmV2cmFuZ2VieXNjb3JlKG1peGVkICRrZXksIG1peGVkICRzdGFydCwgbWl4ZWQgJGVuZCwgbWl4ZWQgJG9wdGlvbnMgPSBudWxsKTogQ2x1c3RlcnxhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmFuayBvZiBtZW1iZXIgaW4gdGhlIHNvcnRlZCBzZXQgc3RvcmVkIGF0IGtleSwgd2l0aCB0aGUgc2NvcmVzCiAgICAgKiBvcmRlcmVkIGZyb20gaGlnaCB0byBsb3cuIFRoZSByYW5rIChvciBpbmRleCkgaXMgMC1iYXNlZCwgd2hpY2ggbWVhbnMKICAgICAqIHRoYXQgdGhlIG1lbWJlciB3aXRoIHRoZSBoaWdoZXN0IHNjb3JlIGhhcyByYW5rIDAuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJHJhbmsKICAgICAqIEBwYXJhbSAgYm9vbCAgJHdpdGhzY29yZQogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGludHxmYWxzZQogICAgICovCiAgICAjW1xSZWxheVxBdHRyaWJ1dGVzXFJlZGlzQ29tbWFuZF0KICAgIHB1YmxpYyBmdW5jdGlvbiB6cmV2cmFuayhtaXhlZCAka2V5LCBtaXhlZCAkcmFuaywgYm9vbCAkd2l0aHNjb3JlID0gZmFsc2UpOiBDbHVzdGVyfGFycmF5fGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogSXRlcmF0ZXMgZWxlbWVudHMgb2YgU29ydGVkIFNldCB0eXBlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBzY29yZXMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJGl0ZXJhdG9yCiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWF0Y2gKICAgICAqIEBwYXJhbSAgaW50ICAkY291bnQKICAgICAqIEByZXR1cm4gYXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genNjYW4obWl4ZWQgJGtleSwgbWl4ZWQgJiRpdGVyYXRvciwgbWl4ZWQgJG1hdGNoID0gbnVsbCwgaW50ICRjb3VudCA9IDApOiBhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2NvcmUgb2YgbWVtYmVyIGluIHRoZSBzb3J0ZWQgc2V0IGF0IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkbWVtYmVyCiAgICAgKiBAcmV0dXJuIENsdXN0ZXJ8ZmxvYXR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genNjb3JlKG1peGVkICRrZXksIG1peGVkICRtZW1iZXIpOiBDbHVzdGVyfGZsb2F0fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBUaGlzIGNvbW1hbmQgaXMgc2ltaWxhciB0byBaVU5JT05TVE9SRSwgYnV0IGluc3RlYWQgb2Ygc3RvcmluZwogICAgICogdGhlIHJlc3VsdGluZyBzb3J0ZWQgc2V0LCBpdCBpcyByZXR1cm5lZCB0byB0aGUgY2xpZW50LgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRrZXlzCiAgICAgKiBAcGFyYW0gIGFycmF5fG51bGwgICR3ZWlnaHRzCiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3B0aW9ucwogICAgICogQHJldHVybiBDbHVzdGVyfGFycmF5fGZhbHNlCiAgICAgKi8KICAgICNbXFJlbGF5XEF0dHJpYnV0ZXNcUmVkaXNDb21tYW5kXQogICAgcHVibGljIGZ1bmN0aW9uIHp1bmlvbihhcnJheSAka2V5cywgYXJyYXl8bnVsbCAkd2VpZ2h0cyA9IG51bGwsIG1peGVkICRvcHRpb25zID0gbnVsbCk6IENsdXN0ZXJ8YXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIENvbXB1dGVzIHRoZSB1bmlvbiBvZiBudW1rZXlzIHNvcnRlZCBzZXRzIGdpdmVuIGJ5IHRoZQogICAgICogc3BlY2lmaWVkIGtleXMsIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiBkZXN0aW5hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkZHN0a2V5CiAgICAgKiBAcGFyYW0gIGFycmF5ICAka2V5cwogICAgICogQHBhcmFtICBhcnJheXxudWxsICAkd2VpZ2h0cwogICAgICogQHBhcmFtICBtaXhlZCAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gQ2x1c3RlcnxpbnR8ZmFsc2UKICAgICAqLwogICAgI1tcUmVsYXlcQXR0cmlidXRlc1xSZWRpc0NvbW1hbmRdCiAgICBwdWJsaWMgZnVuY3Rpb24genVuaW9uc3RvcmUobWl4ZWQgJGRzdGtleSwgYXJyYXkgJGtleXMsIGFycmF5fG51bGwgJHdlaWdodHMgPSBudWxsLCBtaXhlZCAkb3B0aW9ucyA9IG51bGwpOiBDbHVzdGVyfGludHxmYWxzZSB7fQp9Cjw/cGhwCgpuYW1lc3BhY2UgUmVsYXk7CgovKioKICogUmVsYXkgVGFibGUgaXMgYSBwZXJzaXN0ZW50IHBlci13b3JrZXIgaGFzaCB0YWJsZSB0aGF0IGNhbiBzdG9yZSBhcmJpdHJhcnkgZGF0YS4KICovCmNsYXNzIFRhYmxlCnsKICAgIC8qKgogICAgICogQ3JlYXRlIGEgUmVsYXkgdGFibGUgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmd8bnVsbCAgJG5hbWVzcGFjZQogICAgICogQHBhcmFtICBpbnQgICRzZXJpYWxpemVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/c3RyaW5nICRuYW1lc3BhY2UgPSBudWxsLCBpbnQgJHNlcmlhbGl6ZXIgPSBSZWxheTo6U0VSSUFMSVpFUl9QSFApIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEga2V5LCBvciBgbnVsbGAgaWYga2V5IGRvZXNuJ3QgZXhpc3QuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldChzdHJpbmcgJGtleSk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBQbHVjayBhIGtleSBmcm9tIGEgY2FjaGVkIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgICRmaWVsZAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGx1Y2soc3RyaW5nICRrZXksIHN0cmluZyAkZmllbGQpOiBtaXhlZCB7fQoKICAgIC8qKgogICAgICogU2V0IGEga2V5IGFuZCBpdHMgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZSB7fQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoc3RyaW5nICRrZXksIG1peGVkICR2YWx1ZSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIENoZWNrIGlmIGEga2V5IGV4aXN0cyBpbiB0aGUgdGFibGUuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhpc3RzKHN0cmluZyAka2V5KTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIGEga2V5IGZyb20gdGhlIHRhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAka2V5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZShzdHJpbmcgJGtleSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFRoZSBudW1iZXIgb2Yga2V5cyBzdG9yZWQgaW4gdGhlIHRhYmxlLgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgdGFibGUncyBuYW1lc3BhY2UuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZXNwYWNlKCk6IHN0cmluZ3xudWxsIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFsbCB0YWJsZSBuYW1lc3BhY2VzLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuYW1lc3BhY2VzKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIGFsbCBrZXlzIGZyb20gdGhlIHRhYmxlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhbGwga2V5cyBmcm9tIGFsbCB0YWJsZXMuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjbGVhckFsbCgpOiBpbnQge30KfQo8P3BocAoKbmFtZXNwYWNlIFJlbGF5XEV2ZW50OwoKLyoqCiAqIFJlbGF5IGludmFsaWRhdGVkIGV2ZW50IGNsYXNzLgogKi8KZmluYWwgY2xhc3MgSW52YWxpZGF0ZWQgZXh0ZW5kcyBcUmVsYXlcRXZlbnQKewogICAgLyoqCiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgcmVwcmVzZW50ZWQgYnkgYW4gaW50ZWdlci4KICAgICAqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgaW50ICR0eXBlID0gMTsKfQoKLyoqCiAqIFJlbGF5IGZsdXNoZWQgZXZlbnQgY2xhc3MuCiAqLwpmaW5hbCBjbGFzcyBGbHVzaGVkIGV4dGVuZHMgXFJlbGF5XEV2ZW50CnsKICAgIC8qKgogICAgICogVGhlIHR5cGUgb2YgdGhlIGV2ZW50IHJlcHJlc2VudGVkIGJ5IGFuIGludGVnZXIuCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGludCAkdHlwZSA9IDI7Cn0KPD9waHAKCm5hbWVzcGFjZSBSZWxheTsKCi8qKgogKiBHZW5lcmljIFJlbGF5IGV4Y2VwdGlvbi4KICovCmNsYXNzIEV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24ge30KPD9waHAKCm5hbWVzcGFjZSBSZWxheTsKCi8qKgogKiBSZWxheSBldmVudCBjbGFzcy4KICovCmFic3RyYWN0IGNsYXNzIEV2ZW50CnsKICAgIC8qKgogICAgICogVGhlIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBgSU5WQUxJREFURURgIGV2ZW50LgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBJTlZBTElEQVRFRCA9IDE7CgogICAgLyoqCiAgICAgKiBUaGUgaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGBJTlZBTElEQVRFRGAgZXZlbnQuCiAgICAgKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IEludmFsaWRhdGVkID0gMTsKCiAgICAvKioKICAgICAqIFRoZSBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgYEZMVVNIRURgIGV2ZW50LgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBGTFVTSEVEID0gMjsKCiAgICAvKioKICAgICAqIFRoZSBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgYEZMVVNIRURgIGV2ZW50LgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBGbHVzaGVkID0gMjsKCiAgICAvKioKICAgICAqIFRoZSB0eXBlIG9mIHRoZSBldmVudCByZXByZXNlbnRlZCBieSBhbiBpbnRlZ2VyLgogICAgICoKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyBpbnQgJHR5cGU7CgogICAgLyoqCiAgICAgKiBUaGUgZXZlbnQga2V5LiBPbmx5IGZpbGxlZCBmb3IgYElOVkFMSURBVEVEYCBldmVudHMuCiAgICAgKgogICAgICogQHZhciBtaXhlZAogICAgICovCiAgICBwdWJsaWMgbWl4ZWQgJGtleSA9IG51bGw7CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBpbnZhbGlkYXRpb24gd2FzIGNyZWF0ZWQgaW4gdGhlIGNsaWVudCBvcgogICAgICogb3JpZ2luYXRlZCBmcm9tIGEgUmVkaXMgUFVTSCBtZXNzYWdlLgogICAgICoKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwdWJsaWMgYm9vbCAkY2xpZW50Owp9Cjw/cGhwCgpuYW1lc3BhY2UgUmVsYXk7CgovKioKICogQSBjb2xsZWN0aW9uIG9mIFJlZGlzIGRhdGEgdHlwZXMuCiAqLwplbnVtIEtleVR5cGU6IGludAp7CiAgICAvKioKICAgICAqIEBzZWUgUmVsYXk6OlJFRElTX05PVF9GT1VORAogICAgICovCiAgICBjYXNlIE5vdEZvdW5kID0gUmVsYXk6OlJFRElTX05PVF9GT1VORDsKCiAgICAvKioKICAgICAqIEBzZWUgUmVsYXk6OlJFRElTX1NUUklORwogICAgICovCiAgICBjYXNlIFN0cmluZyA9IFJlbGF5OjpSRURJU19TVFJJTkc7CgogICAgLyoqCiAgICAgKiBAc2VlIFJlbGF5OjpSRURJU19TRVQKICAgICAqLwogICAgY2FzZSBTZXQgPSBSZWxheTo6UkVESVNfU0VUOwoKICAgIC8qKgogICAgICogQHNlZSBSZWxheTo6UkVESVNfTElTVAogICAgICovCiAgICBjYXNlIExpc3QgPSBSZWxheTo6UkVESVNfTElTVDsKCiAgICAvKioKICAgICAqIEBzZWUgUmVsYXk6OlJFRElTX1pTRVQKICAgICAqLwogICAgY2FzZSBac2V0ID0gUmVsYXk6OlJFRElTX1pTRVQ7CgogICAgLyoqCiAgICAgKiBAc2VlIFJlbGF5OjpSRURJU19IQVNICiAgICAgKi8KICAgIGNhc2UgSGFzaCA9IFJlbGF5OjpSRURJU19IQVNIOwoKICAgIC8qKgogICAgICogQHNlZSBSZWxheTo6UkVESVNfU1RSRUFNCiAgICAgKi8KICAgIGNhc2UgU3RyZWFtID0gUmVsYXk6OlJFRElTX1NUUkVBTTsKfQo8P3BocAovKioKICogQ29weXJpZ2h0IDIwMTMtMjAxNyBBZXJvc3Bpa2UsIEluYy4KICoKICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBAY2F0ZWdvcnkgICBEYXRhYmFzZQogKiBAcGFja2FnZSAgICBBZXJvc3Bpa2UKICogQGF1dGhvciAgICAgUm9iZXJ0IE1hcmtzIDxyb2JlcnRAYWVyb3NwaWtlLmNvbT4KICogQGNvcHlyaWdodCAgQ29weXJpZ2h0IDIwMTMtMjAxOCBBZXJvc3Bpa2UsIEluYy4KICogQGxpY2Vuc2UgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIKICogQGxpbmsgICAgICAgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2NsaWVudC9waHAvCiAqIEBmaWxlc291cmNlCiAqLwoKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxEZXByZWNhdGVkOwoKLyoqCiAqIFRoZSBBZXJvc3Bpa2UgY2xpZW50IGNsYXNzCiAqCiAqIFRoZSBBZXJvc3Bpa2UgY29uZmlnIG9wdGlvbnMgZm9yIGBwaHAuaW5pYDoKICogYGBgcGhwCiAqIC8vIFRoZSBjb25uZWN0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgogKiBhZXJvc3Bpa2UuY29ubmVjdF90aW1lb3V0ID0gMTAwMDsKICogLy8gVGhlIHJlYWQgb3BlcmF0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgogKiBhZXJvc3Bpa2UucmVhZF90aW1lb3V0ID0gMTAwMDsKICogLy8gVGhlIHdyaXRlIG9wZXJhdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4KICogYWVyb3NwaWtlLndyaXRlX3RpbWVvdXQgPSAxMDAwOwogKiAvLyBXaGV0aGVyIHRvIHNlbmQgYW5kIHN0b3JlIHRoZSByZWNvcmQncyAobnMsc2V0LGtleSkgZGF0YSBhbG9uZyB3aXRoCiAqIC8vIGl0cyAodW5pcXVlIGlkZW50aWZpZXIpIGRpZ2VzdC4gMDogZGlnZXN0LCAxOiBzZW5kCiAqIGFlcm9zcGlrZS5rZXlfcG9saWN5ID0gMDsgLy8gb25seSBkaWdlc3QKICogLy8gVGhlIHVuc3VwcG9ydGVkIHR5cGUgaGFuZGxlci4gMDogbm9uZSwgMTogUEhQLCAyOiB1c2VyLWRlZmluZWQKICogYWVyb3NwaWtlLnNlcmlhbGl6ZXIgPSAxOyAvLyBwaHAgc2VyaWFsaXplcgoKICogLy8gUGF0aCB0byB0aGUgdXNlci1kZWZpbmVkIEx1YSBmdW5jdGlvbiBtb2R1bGVzLgogKiBhZXJvc3Bpa2UudWRmLmx1YV91c2VyX3BhdGggPSAvdXNyL2xvY2FsL2Flcm9zcGlrZS91c3ItbHVhOwogKiAvLyBJbmRpY2F0ZXMgaWYgc2hhcmVkIG1lbW9yeSBzaG91bGQgYmUgdXNlZCBmb3IgY2x1c3RlciB0ZW5kaW5nLgogKiAvLyBSZWNvbW1lbmRlZCBmb3IgbXVsdGktcHJvY2VzcyBjYXNlcyBzdWNoIGFzIEZQTS4geyB0cnVlLCBmYWxzZSB9CiAqIGFlcm9zcGlrZS5zaG0udXNlID0gZmFsc2U7CiAqIC8vIEV4cGxpY2l0bHkgc2V0cyB0aGUgc2htIGtleSBmb3IgdGhpcyBjbGllbnQgdG8gc3RvcmUgc2hhcmVkLW1lbW9yeQogKiAvLyBjbHVzdGVyIHRlbmRpbmcgcmVzdWx0cyBpbi4KICogYWVyb3NwaWtlLnNobS5rZXkgPSAweEE4MDAwMDAwOyAvLyBpbnRlZ2VyIHZhbHVlCiAqIC8vIFNoYXJlZCBtZW1vcnkgbWF4aW11bSBudW1iZXIgb2Ygc2VydmVyIG5vZGVzIGFsbG93ZWQuIExlYXZlIGEgY3VzaGlvbiBzbwogKiAvLyBuZXcgbm9kZXMgY2FuIGJlIGFkZGVkIHdpdGhvdXQgbmVlZGluZyBhIGNsaWVudCByZXN0YXJ0LgogKiBhZXJvc3Bpa2Uuc2htLm1heF9ub2RlcyA9IDE2OwogKiAvLyBTaGFyZWQgbWVtb3J5IG1heGltdW0gbnVtYmVyIG9mIG5hbWVzcGFjZXMgYWxsb3dlZC4gTGVhdmUgYSBjdXNoaW9uIGZvcgogKiAvLyBuZXcgbmFtZXNwYWNlcy4KICogYWVyb3NwaWtlLnNobS5tYXhfbmFtZXNwYWNlcyA9IDg7CiAqIC8vIFRha2Ugb3ZlciBzaGFyZWQgbWVtb3J5IGNsdXN0ZXIgdGVuZGluZyBpZiB0aGUgY2x1c3RlciBoYXNuJ3QgYmVlbiB0ZW5kZWQKICogLy8gYnkgdGhpcyB0aHJlc2hvbGQgaW4gc2Vjb25kcy4KICogYWVyb3NwaWtlLnNobS50YWtlb3Zlcl90aHJlc2hvbGRfc2VjID0gMzA7CiAqIC8vIENvbnRyb2wgdGhlIGJhdGNoIHByb3RvY29sLiAwOiBiYXRjaC1pbmRleCwgMTogYmF0Y2gtZGlyZWN0CiAqIGFlcm9zcGlrZS51c2VfYmF0Y2hfZGlyZWN0ID0gMDsKICogLy8gVGhlIGNsaWVudCB3aWxsIGNvbXByZXNzIHJlY29yZHMgbGFyZ2VyIHRoYW4gdGhpcyB2YWx1ZSBpbiBieXRlcyBmb3IgdHJhbnNwb3J0LgogKiBhZXJvc3Bpa2UuY29tcHJlc3Npb25fdGhyZXNob2xkID0gMDsKICogLy8gTWF4IHNpemUgb2YgdGhlIHN5bmNocm9ub3VzIGNvbm5lY3Rpb24gcG9vbCBmb3IgZWFjaCBzZXJ2ZXIgbm9kZQogKiBhZXJvc3Bpa2UubWF4X3RocmVhZHMgPSAzMDA7CiAqIC8vIE51bWJlciBvZiB0aHJlYWRzIHN0b3JlZCBpbiB1bmRlcmx5aW5nIHRocmVhZCBwb29sIHRoYXQgaXMgdXNlZCBpbgogKiAvLyBiYXRjaC9zY2FuL3F1ZXJ5IGNvbW1hbmRzLiBJbiBaVFMgYnVpbGRzLCB0aGlzIGlzIGFsd2F5cyAwLgogKiBhZXJvc3Bpa2UudGhyZWFkX3Bvb2xfc2l6ZSA9IDE2OwogKiAvLyBXaGVuIHR1cm5pbmcgb24gdGhlIG9wdGlvbmFsIGxvZ2dpbmcgaW4gdGhlIGNsaWVudCwgdGhpcyBpcyB0aGUgcGF0aCB0byB0aGUgbG9nIGZpbGUuCiAqIGFlcm9zcGlrZS5sb2dfcGF0aCA9IE5VTEw7CiAqIGFlcm9zcGlrZS5sb2dfbGV2ZWwgPSBOVUxMOwogKiBhZXJvc3Bpa2UubmVzdGluZ19kZXB0aCA9IDM7CiAqCiAqIC8vIHNlc3Npb24gaGFuZGxlcgogKiBzZXNzaW9uLnNhdmVfaGFuZGxlciA9IGFlcm9zcGlrZTsgLy8gdG8gdXNlIHRoZSBBZXJvc3Bpa2Ugc2Vzc2lvbiBoYW5kbGVyCiAqIHNlc3Npb24uZ2NfbWF4bGlmZXRpbWUgPSAxNDQwOyAvLyB0aGUgVFRMIG9mIHRoZSByZWNvcmQgdXNlZCB0byBzdG9yZSB0aGUgc2Vzc2lvbiBpbiBzZWNvbmRzCiAqIHNlc3Npb24uc2F2ZV9wYXRoID0gTlVMTDsgLy8gc2hvdWxkIGZvbGxvdyB0aGUgZm9ybWF0IG5zfHNldHxhZGRyOnBvcnRbLGFkZHI6cG9ydFssLi4uXV0uIEV4OiAidGVzdHxzZXNzfDEyNy4wLjAuMTozMDAwIi4gVGhlIGhvc3QgaW5mbyBvZiBqdXN0IG9uZSBjbHVzdGVyIG5vZGUgaXMgbmVjZXNzYXJ5CiAqIGBgYAogKiBAYXV0aG9yIFJvYmVydCBNYXJrcyA8cm9iZXJ0QGFlcm9zcGlrZS5jb20+CiAqLwpjbGFzcyBBZXJvc3Bpa2UKewogICAgLy8gTGlmZWN5Y2xlIGFuZCBDb25uZWN0aW9uIE1ldGhvZHMKCiAgICAvKioKICAgICAqIENvbnN0cnVjdCBhbiBBZXJvc3Bpa2UgY2xpZW50IG9iamVjdCwgYW5kIGNvbm5lY3QgdG8gdGhlIGNsdXN0ZXIgZGVmaW5lZAogICAgICogaW4gJGNvbmZpZy4KICAgICAqCiAgICAgKiBBZXJvc3Bpa2U6OmlzQ29ubmVjdGVkKCkgY2FuIGJlIHVzZWQgdG8gdGVzdCB3aGV0aGVyIHRoZSBjb25uZWN0aW9uIGhhcwogICAgICogc3VjY2VlZGVkLiBJZiBhIGNvbmZpZyBvciBjb25uZWN0aW9uIGVycm9yIGhhcyBvY2N1cmVkLCBBZXJvc3Bpa2U6OmVycm9yKCkKICAgICAqIGFuZCBBZXJvc3Bpa2U6OmVycm9ybm8oKSBjYW4gYmUgdXNlZCB0byBpbnNwZWN0IGl0LgogICAgICoKICAgICAqIGBgYHBocAogICAgICogJGNvbmZpZyA9IFsKICAgICAqICAgImhvc3RzIiA9PiBbCiAgICAgKiAgICAgWyJhZGRyIiA9PiAibG9jYWxob3N0IiwgInBvcnQiID0+IDMwMDBdCiAgICAgKiAgIF0sCiAgICAgKiAgICJzaG0iID0+IFtdCiAgICAgKiBdOwogICAgICogLy8gU2V0IGEgZGVmYXVsdCBwb2xpY3kgZm9yIHdyaXRlIGFuZCByZWFkIG9wZXJhdGlvbnMKICAgICAqICR3cml0ZU9wdHMgPSBbQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSA9PiBBZXJvc3Bpa2U6OlBPTElDWV9LRVlfU0VORF07CiAgICAgKiAkcmVhZE9wdHMgPSBbQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCA9PiAxNTBdOwogICAgICogJG9wdHMgPSBbQWVyb3NwaWtlOjpPUFRfV1JJVEVfREVGQVVMVF9QT0wgPT4gJHdyaXRlT3B0cywgQWVyb3NwaWtlOjpPUFRfUkVBRF9ERUZBVUxUX1BPTCA9PiAkcmVhZE9wdHNdOwogICAgICogJGNsaWVudCA9IG5ldyBBZXJvc3Bpa2UoJGNvbmZpZywgdHJ1ZSwgJG9wdHMpOwogICAgICogaWYgKCEkY2xpZW50LT5pc0Nvbm5lY3RlZCgpKSB7CiAgICAgKiAgIGVjaG8gIkFlcm9zcGlrZSBmYWlsZWQgdG8gY29ubmVjdFt7JGNsaWVudC0+ZXJyb3JubygpfV06IHskY2xpZW50LT5lcnJvcigpfVxuIjsKICAgICAqICAgZXhpdCgxKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogQHNlZSBBZXJvc3Bpa2UgcGhwLmluaSBjb25maWcgcGFyYW1ldGVycwogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2Flcm9zcGlrZS9hZXJvc3Bpa2UtY2xpZW50LXBocC9ibG9iL21hc3Rlci9kb2MvUkVBRE1FLm1kI2NvbmZpZ3VyYXRpb24taW4tYS13ZWItc2VydmVyLWNvbnRleHQgQ29uZmlndXJhdGlvbiBpbiBhIFdlYiBTZXJ2ZXIgQ29udGV4dAogICAgICogQHBhcmFtIGFycmF5ICRjb25maWcgaG9sZHMgY2x1c3RlciBjb25uZWN0aW9uIGFuZCBjbGllbnQgY29uZmlnIGluZm9ybWF0aW9uCiAgICAgKiAqIF9ob3N0c18gYSAqKnJlcXVpcmVkKiogYXJyYXkgb2YgaG9zdCBwYWlycy4gT25lIG5vZGUgb3IgbW9yZSAoZm9yIGZhaWxvdmVyKQogICAgICogICAgICAgIG1heSBiZSBkZWZpbmVkLiBPbmNlIGEgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCB0byB0aGUKICAgICAqICAgICAgICAic2VlZCIgbm9kZSwgdGhlIGNsaWVudCB3aWxsIHJldHJpZXZlIHRoZSBmdWxsIGxpc3Qgb2Ygbm9kZXMgaW4KICAgICAqICAgICAgICB0aGUgY2x1c3RlciwgYW5kIG1hbmFnZSBpdHMgY29ubmVjdGlvbnMgdG8gdGhlbS4KICAgICAqICogX2FkZHJfIGhvc3RuYW1lIG9yIElQIG9mIHRoZSBub2RlCiAgICAgKiAqIF9wb3J0XyB0aGUgcG9ydCBvZiB0aGUgbm9kZQogICAgICogKiBfdXNlcl8gKipyZXF1aXJlZCoqIGZvciB0aGUgRW50ZXJwcmlzZSBFZGl0aW9uCiAgICAgKiAqIF9wYXNzXyAqKnJlcXVpcmVkKiogZm9yIHRoZSBFbnRlcnByaXNlIEVkaXRpb24KICAgICAqICogX3NobV8gb3B0aW9uYWwuIFNoYXJlZC1tZW1vcnkgY2x1c3RlciB0ZW5kaW5nIGlzIGVuYWJsZWQgaWYgYW4gYXJyYXkKICAgICAqICAgICAoZXZlbiBhbiBlbXB0eSBvbmUpIGlzIHByb3ZpZGVkLiBEaXNhYmxlZCBieSBkZWZhdWx0LgogICAgICogKiBfc2htXF9rZXlfIGV4cGxpY2l0bHkgc2V0cyB0aGUgc2htIGtleSBmb3IgdGhlIGNsdXN0ZXIuIEl0IGlzCiAgICAgKiAgICAgICBvdGhlcndpc2UgaW1wbGljaXRseSBldmFsdWF0ZWQgcGVyIHVuaXF1ZSBob3N0bmFtZSwgYW5kIGNhbiBiZQogICAgICogICAgICAgaW5zcGVjdGVkIHdpdGggc2htS2V5KCkuIChkZWZhdWx0OiAweEE4MDAwMDAwKQogICAgICogKiBfc2htXF9tYXhcX25vZGVzXyBtYXhpbXVtIG51bWJlciBvZiBub2RlcyBhbGxvd2VkLiBQYWQgc28gbmV3IG5vZGVzCiAgICAgKiAgICAgICBjYW4gYmUgYWRkZWQgd2l0aG91dCBjb25maWd1cmF0aW9uIGNoYW5nZXMgKGRlZmF1bHQ6IDE2KQogICAgICogKiBfc2htXF9tYXhcX25hbWVzcGFjZXNfIG1heGltdW0gbnVtYmVyIG9mIG5hbWVzcGFjZXMgYWxsb3dlZCAoZGVmYXVsdDogOCkKICAgICAqICogX3NobVxfdGFrZW92ZXJcX3RocmVzaG9sZFxfc2VjXyB0YWtlIG92ZXIgdGVuZGluZyBpZiB0aGUgY2x1c3RlcgogICAgICogICAgICAgaGFzbid0IGJlZW4gY2hlY2tlZCBmb3IgdGhpcyBtYW55IHNlY29uZHMgKGRlZmF1bHQ6IDMwKQogICAgICogKiBfbWF4XF90aHJlYWRzXyAoZGVmYXVsdDogMzAwKQogICAgICogKiBfdGhyZWFkXF9wb29sXF9zaXplXyBzaG91bGQgYmUgYXQgbGVhc3QgdGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgY2x1c3RlciAoZGVmYXVsdDogMTYpIEluIFpUUyBidWlsZHMgdGhpcyBpcyBzZXQgdG8gMAogICAgICogKiBfY29tcHJlc3Npb25cX3RocmVzaG9sZF8gY2xpZW50IHdpbGwgY29tcHJlc3MgcmVjb3JkcyBsYXJnZXIgdGhhbiB0aGlzIHZhbHVlIGZvciB0cmFuc3BvcnQgKGRlZmF1bHQ6IDApCiAgICAgKiAqIF90ZW5kZXJcX2ludGVydmFsXyBwb2xsaW5nIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyBmb3IgY2x1c3RlciB0ZW5kZXIgKGRlZmF1bHQ6IDEwMDApCiAgICAgKiAqIF9jbHVzdGVyXF9uYW1lXyBpZiBzcGVjaWZpZWQsIG9ubHkgc2VydmVyIG5vZGVzIG1hdGNoaW5nIHRoaXMgbmFtZSB3aWxsIGJlIHVzZWQgd2hlbiBkZXRlcm1pbmluZyB0aGUgY2x1c3RlcgogICAgICogKiBfcmFja1xfYXdhcmVfIEJvb2xlYW46IFRyYWNrIHNlcnZlciByYWNrIGRhdGEuICBUaGlzIGZpZWxkIGlzIHVzZWZ1bCB3aGVuIGRpcmVjdGluZyByZWFkIGNvbW1hbmRzIHRvCiAgICAgKiB0aGUgc2VydmVyIG5vZGUgdGhhdCBjb250YWlucyB0aGUga2V5IGFuZCBleGlzdHMgb24gdGhlIHNhbWUgcmFjayBhcyB0aGUgY2xpZW50LgogICAgICogVGhpcyBzZXJ2ZXMgdG8gbG93ZXIgY2xvdWQgcHJvdmlkZXIgY29zdHMgd2hlbiBub2RlcyBhcmUgZGlzdHJpYnV0ZWQgYWNyb3NzIGRpZmZlcmVudAogICAgICogcmFja3MvZGF0YSBjZW50ZXJzLgogICAgICogUE9MSUNZX1JFUExJQ0FfUFJFRkVSX1JBQ0sgbXVzdCBiZSBzZXQgYXMgdGhlIHJlcGxpY2EgcG9saWN5IGZvciByZWFkcyBhbmQgX3JhY2tcX2lkXyBtdXN0IGJlIHNldCB0b2VuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCiAgICAgKiAoRGVmYXVsdDogZmFsc2UpCiAgICAgKiAqIF9yYWNrXF9pZF8gSW50ZWdlci4gUmFjayB3aGVyZSB0aGlzIGNsaWVudCBpbnN0YW5jZSByZXNpZGVzLgogICAgICoKICAgICAqIF9yYWNrXF9hd2FyZV8sIFBPTElDWV9SRVBMSUNBX1BSRUZFUl9SQUNLIGFuZCBzZXJ2ZXIgcmFjayBjb25maWd1cmF0aW9uIG11c3QgYWxzbyBiZQogICAgICogc2V0IHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCiAgICAgKgogICAgICogRGVmYXVsdDogMAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UTFNfQ09ORklHIGFuIGFycmF5IG9mIFRMUyBzZXR1cCBwYXJhbWV0ZXJzIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiAqIEFlcm9zcGlrZTo6T1BUX1RMU19FTkFCTEUgYm9vbGVhbiBXaGV0aGVyIG9yIG5vdCB0byBlbmFibGUgVExTLgogICAgICogKiAqIEFlcm9zcGlrZTo6T1BUX09QVF9UTFNfQ0FGSUxFCiAgICAgKiAqICogQWVyb3NwaWtlOjpPUFRfVExTX0NBUEFUSAogICAgICogKiAqIEFlcm9zcGlrZTo6T1BUX1RMU19QUk9UT0NPTFMKICAgICAqICogKiBBZXJvc3Bpa2U6Ok9QVF9UTFNfQ0lQSEVSX1NVSVRFCiAgICAgKiAqICogQWVyb3NwaWtlOjpPUFRfVExTX0NSTF9DSEVDSwogICAgICogKiAqIEFlcm9zcGlrZTo6T1BUX1RMU19DUkxfQ0hFQ0tfQUxMCiAgICAgKiAqICogQWVyb3NwaWtlOjpPUFRfVExTX0NFUlRfQkxBQ0tMSVNUCiAgICAgKiAqICogQWVyb3NwaWtlOjpPUFRfVExTX0xPR19TRVNTSU9OX0lORk8KICAgICAqICogKiBBZXJvc3Bpa2U6Ok9QVF9UTFNfS0VZRklMRQogICAgICogKiAqIEFlcm9zcGlrZTo6T1BUX1RMU19DRVJURklMRQogICAgICogQHBhcmFtIGJvb2wgJHBlcnNpc3RlbnRfY29ubmVjdGlvbiBJbiBhIG11bHRpcHJvY2VzcyBjb250ZXh0LCBzdWNoIGFzIGEKICAgICAqICAgICAgICB3ZWIgc2VydmVyLCB0aGUgY2xpZW50IHNob3VsZCBiZSBjb25maWd1cmVkIHRvIHVzZQogICAgICogICAgICAgIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuIFRoaXMgYWxsb3dzIGZvciByZWR1Y2VkIG92ZXJoZWFkLAogICAgICogICAgICAgIHNhdmluZyBvbiBkaXNjb3Zlcnkgb2YgdGhlIGNsdXN0ZXIgdG9wb2xvZ3ksIGZldGNoaW5nIGl0cyBwYXJ0aXRpb24KICAgICAqICAgICAgICBtYXAsIGFuZCBvbiBvcGVuaW5nIGNvbm5lY3Rpb25zIHRvIHRoZSBub2Rlcy4KICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBbiBvcHRpb25hbCBjbGllbnQgY29uZmlnIGFycmF5IHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9DT05ORUNUX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUkVBRF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfRVhJU1RTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NFUklBTElaRVIKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVQTElDQQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX0FQCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfU0MKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUkVBRF9ERUZBVUxUX1BPTCBBbiBhcnJheSBvZiBkZWZhdWx0IHBvbGljaWVzIGZvciByZWFkIG9wZXJhdGlvbnMuCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1dSSVRFX0RFRkFVTFRfUE9MIEFuIGFycmF5IG9mIGRlZmF1bHQgcG9saWNpZXMgZm9yIHdyaXRlIG9wZXJhdGlvbnMuCiAgICAgKiAqIEFFUk9TUElLRTo6T1BUX1JFTU9WRV9ERUZBVUxUX1BPTCBBbiBhcnJheSBvZiBkZWZhdWx0IHBvbGljaWVzIGZvciByZW1vdmUgb3BlcmF0aW9ucy4KICAgICAqICogQWVyb3NwaWtlOjpPUFRfQkFUQ0hfREVGQVVMVF9QT0wgQW4gYXJyYXkgb2YgZGVmYXVsdCBwb2xpY2llcyBmb3IgYmF0Y2ggb3BlcmF0aW9ucy4KICAgICAqICogQWVyb3NwaWtlOjpPUFRfT1BFUkFURV9ERUZBVUxUX1BPTCBBbiBhcnJheSBvZiBkZWZhdWx0IHBvbGljaWVzIGZvciBvcGVyYXRlIG9wZXJhdGlvbnMuCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1FVRVJZX0RFRkFVTFRfUE9MIEFuIGFycmF5IG9mIGRlZmF1bHQgcG9saWNpZXMgZm9yIHF1ZXJ5IG9wZXJhdGlvbnMuCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NDQU5fREVGQVVMVF9QT0wgQW4gYXJyYXkgb2YgZGVmYXVsdCBwb2xpY2llcyBmb3Igc2NhbiBvcGVyYXRpb25zLgogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9BUFBMWV9ERUZBVUxUX1BPTCBBbiBhcnJheSBvZiBkZWZhdWx0IHBvbGljaWVzIGZvciBhcHBseSBvcGVyYXRpb25zLgogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9DT05ORUNUX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfQ09OTkVDVF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUkVBRF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9FWElTVFMgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0VYSVNUUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NFUklBTElaRVIgQWVyb3NwaWtlOjpPUFRfU0VSSUFMSVpFUiBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRVBMSUNBIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRVBMSUNBIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9BUCBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX0FQIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9TQyBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX1NDIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjppc0Nvbm5lY3RlZCgpIGlzQ29ubmVjdGVkKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcigpIGVycm9yKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcm5vKCkgZXJyb3JubygpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29uZmlnLCAkcGVyc2lzdGVudF9jb25uZWN0aW9uID0gdHJ1ZSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIERpc2Nvbm5lY3QgZnJvbSB0aGUgQWVyb3NwaWtlIGNsdXN0ZXIgYW5kIGNsZWFuIHVwIHJlc291cmNlcy4KICAgICAqCiAgICAgKiBObyBuZWVkIHRvIGV2ZXIgY2FsbCB0aGlzIG1ldGhvZCBleHBsaWNpbHR5LgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIFRlc3Qgd2hldGhlciB0aGUgY2xpZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgY2x1c3Rlci4KICAgICAqCiAgICAgKiBJZiBhIGNvbm5lY3Rpb24gZXJyb3IgaGFzIG9jY3VyZWQsIEFlcm9zcGlrZTo6ZXJyb3IoKSBhbmQgQWVyb3NwaWtlOjplcnJvcm5vKCkKICAgICAqIGNhbiBiZSB1c2VkIHRvIGluc3BlY3QgaXQuCiAgICAgKiBgYGBwaHAKICAgICAqIGlmICghJGNsaWVudC0+aXNDb25uZWN0ZWQoKSkgewogICAgICogICBlY2hvICJBZXJvc3Bpa2UgZmFpbGVkIHRvIGNvbm5lY3RbeyRjbGllbnQtPmVycm9ybm8oKX1dOiB7JGNsaWVudC0+ZXJyb3IoKX1cbiI7CiAgICAgKiAgIGV4aXQoMSk7CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcigpIGVycm9yKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcm5vKCkgZXJyb3JubygpCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzQ29ubmVjdGVkKCkge30KCiAgICAvKioKICAgICAqIERpc2Nvbm5lY3QgdGhlIGNsaWVudCBmcm9tIGFsbCB0aGUgY2x1c3RlciBub2Rlcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgZXhwbGljaXRseSBjYWxsZWQgd2hlbiB1c2luZyBub24tcGVyc2lzdGVudCBjb25uZWN0aW9ucy4KICAgICAqIEBzZWUgQWVyb3NwaWtlOjppc0Nvbm5lY3RlZCgpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6cmVjb25uZWN0KCkKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKSB7fQoKICAgIC8qKgogICAgICogUmVjb25uZWN0IHRoZSBjbGllbnQgdG8gdGhlIGNsdXN0ZXIgbm9kZXMuCiAgICAgKgogICAgICogQWVyb3NwaWtlOjppc0Nvbm5lY3RlZCgpIGNhbiBiZSB1c2VkIHRvIHRlc3Qgd2hldGhlciB0aGUgcmUtY29ubmVjdGlvbgogICAgICogc3VjY2VkZWQuIElmIGEgY29ubmVjdGlvbiBlcnJvciBvY2N1cmVkIEFlcm9zcGlrZTo6ZXJyb3IoKSBhbmQKICAgICAqIEFlcm9zcGlrZTo6ZXJyb3JubygpIGNhbiBiZSB1c2VkIHRvIGluc3BlY3QgaXQuCiAgICAgKiBgYGBwaHAKICAgICAqICRjbGllbnQgPSBuZXcgQWVyb3NwaWtlKCRjb25maWcsIGZhbHNlKTsKICAgICAqICRjbGllbnQtPmNsb3NlKCk7CiAgICAgKiAkY2xpZW50LT5yZWNvbm5lY3QoKTsKICAgICAqIGlmICghJGNsaWVudC0+aXNDb25uZWN0ZWQoKSkgewogICAgICogICBlY2hvICJBZXJvc3Bpa2UgZmFpbGVkIHRvIGNvbm5lY3RbeyRjbGllbnQtPmVycm9ybm8oKX1dOiB7JGNsaWVudC0+ZXJyb3IoKX1cbiI7CiAgICAgKiAgIGV4aXQoMSk7CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcigpIGVycm9yKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcm5vKCkgZXJyb3JubygpCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlY29ubmVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBFeHBvc2UgdGhlIHNoYXJlZCBtZW1vcnkga2V5IHVzZWQgYnkgc2hhcmVkLW1lbW9yeSBjbHVzdGVyIHRlbmRpbmcKICAgICAqCiAgICAgKiBJZiBzaG0gY2x1c3RlciB0ZW5kaW5nIGlzIGVuYWJsZWQsIEFlcm9zcGlrZTo6c2htS2V5IHdpbGwgcmV0dXJuIHRoZQogICAgICogdmFsdWUgb2YgdGhlIHNobSBrZXkgYmVpbmcgdXNlZCBieSB0aGUgY2xpZW50LiBJZiBpdCB3YXMgc2V0IGV4cGxpY2l0bHkKICAgICAqIHVuZGVyIHRoZSBjbGllbnQncyBzaG0gY29uZmlnIHBhcmFtZXRlciwgb3IgdGhyb3VnaCB0aGUgZ2xvYmFsCiAgICAgKiBgYWVyb3NwaWtlLnNobS5rZXlgIHdlIGV4cGVjdCB0byBzZWUgdGhhdCB2YWx1ZS4gT3RoZXJ3aXNlIHRoZSBpbXBsaWNpdAogICAgICogdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBjbGllbnQgd2lsbCBiZSByZXR1cm5lZAogICAgICogQHJldHVybiBpbnR8bnVsbCBudWxsIGlmIG5vdCBlbmFibGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaG1LZXkoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBlcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGFzdCBvcGVyYXRpb24uCiAgICAgKgogICAgICogSWYgdGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCB0aGUgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKiBgYGBwaHAKICAgICAqICRjbGllbnQgPSBuZXcgQWVyb3NwaWtlKCRjb25maWcsIGZhbHNlKTsKICAgICAqIGlmICghJGNsaWVudC0+aXNDb25uZWN0ZWQoKSkgewogICAgICogICBlY2hvICJ7JGNsaWVudC0+ZXJyb3IoKX0gW3skY2xpZW50LT5lcnJvcm5vKCl9XSI7CiAgICAgKiAgIGV4aXQoMSk7CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIE9uIGNvbm5lY3Rpb24gZXJyb3Igd291bGQgc2hvdzoKICAgICAqIGBgYAogICAgICogVW5hYmxlIHRvIGNvbm5lY3QgdG8gc2VydmVyIFstMV0KICAgICAqIGBgYAogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9LIEVycm9yIENvZGVzCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXJyb3IoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBlcnJvciBjb2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGFzdCBvcGVyYXRpb24uCiAgICAgKiBJZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIDAgKEFlcm9zcGlrZTo6T0spCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T0sgRXJyb3IgQ29kZXMKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlcnJvcm5vKCkge30KCiAgICAvLyBLZXktVmFsdWUgTWV0aG9kcy4KCiAgICAvKioKICAgICAqIFJldHVybiBhbiBhcnJheSB0aGF0IHJlcHJlc2VudHMgdGhlIHJlY29yZCdzIGtleS4KICAgICAqCiAgICAgKiBUaGlzIHZhbHVlIGNhbiBiZSBwYXNzZWQgYXMgdGhlICRrZXkgYXJndWVtZW50IHJlcXVpcmVkIGJ5IG90aGVyCiAgICAgKiBrZXktdmFsdWUgbWV0aG9kcy4KICAgICAqCiAgICAgKiBJbiBBZXJvc3Bpa2UsIGEgcmVjb3JkIGlzIGlkZW50aWZpZWQgYnkgdGhlIHR1cGxlIChuYW1lc3BhY2UsIHNldCwKICAgICAqIHByaW1hcnkga2V5KSwgb3IgYnkgdGhlIGRpZ2VzdCB3aGljaCByZXN1bHRzIGZyb20gaGFzaGluZyB0aGlzIHR1cGxlCiAgICAgKiB0aHJvdWdoIFJJUEVNRC0xNjAuCiAgICAgKgogICAgICogKiogSW5pdGlhbGl6aW5nIGEga2V5ICoqCiAgICAgKgogICAgICogYGBgcGhwCiAgICAgKiAka2V5ID0gJGNsaWVudC0+aW5pdEtleSgidGVzdCIsICJ1c2VycyIsIDEyMzQpOwogICAgICogdmFyX2R1bXAoJGtleSk7CiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBgYGBiYXNoCiAgICAgKmFycmF5KDMpIHsKICAgICAqICBbIm5zIl09PgogICAgICogIHN0cmluZyg0KSAidGVzdCIKICAgICAqICBbInNldCJdPT4KICAgICAqICBzdHJpbmcoNSkgInVzZXJzIgogICAgICogIFsia2V5Il09PgogICAgICogIGludCgxMjM0KQogICAgICp9CiAgICAgKiBgYGAKICAgICAqCiAgICAgKiAqKiBTZXR0aW5nIGEgZGlnZXN0ICoqCiAgICAgKgogICAgICogYGBgcGhwCiAgICAgKiAkYmFzZTY0X2VuY29kZWRfZGlnZXN0ID0gJzdFVjlDcGRNU05Wb1duNzZBOUUzM0l1OTUrTT0nOwogICAgICogJGRpZ2VzdCA9IGJhc2U2NF9kZWNvZGUoJGJhc2U2NF9lbmNvZGVkX2RpZ2VzdCk7CiAgICAgKiAka2V5ID0gJGNsaWVudC0+aW5pdEtleSgidGVzdCIsICJ1c2VycyIsICRkaWdlc3QsIHRydWUpOwogICAgICogdmFyX2R1bXAoJGtleSk7CiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBgYGBiYXNoCiAgICAgKmFycmF5KDMpIHsKICAgICAqICBbIm5zIl09PgogICAgICogIHN0cmluZyg0KSAidGVzdCIKICAgICAqICBbInNldCJdPT4KICAgICAqICBzdHJpbmcoNSkgInVzZXJzIgogICAgICogIFsiZGlnZXN0Il09PgogICAgICogIHN0cmluZygyMCkgIj9FfQogICAgICo/TEg/aFp+Pz83w5zigLk/Pz8iCiAgICAgKn0KICAgICAqIGBgYAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hZXJvc3Bpa2UvYWVyb3NwaWtlLWNsaWVudC1waHAvYmxvYi9tYXN0ZXIvZG9jL1JFQURNRS5tZCNjb25maWd1cmF0aW9uLWluLWEtd2ViLXNlcnZlci1jb250ZXh0IENvbmZpZ3VyYXRpb24gaW4gYSBXZWIgU2VydmVyIENvbnRleHQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5zIHRoZSBuYW1lc3BhY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNldCB0aGUgc2V0IHdpdGhpbiB0aGUgZ2l2ZW4gbmFtZXNwYWNlCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkcGsgVGhlIHByaW1hcnkga2V5IGluIHRoZSBhcHBsaWNhdGlvbiwgb3IgdGhlIFJJUEVNRC0xNjAgZGlnZXN0IG9mIHRoZSAobmFtZXNwY2UsIHNldCwgcHJpbWFyeS1rZXkpIHR1cGxlCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNfZGlnZXN0IFRydWUgaWYgdGhlICokcGsqIGFyZ3VtZW50IGlzIGEgZGlnZXN0CiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6Z2V0S2V5RGlnZXN0KCkgZ2V0S2V5RGlnZXN0KCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluaXRLZXkoJG5zLCAkc2V0LCAkcGssICRpc19kaWdlc3QgPSBmYWxzZSkge30KCiAgICAvKioKICAgICAqIFJldHVybiB0aGUgZGlnZXN0IG9mIGhhc2hpbmcgdGhlIChuYW1lc3BhY2UsIHNldCwgcHJpbWFyeS1rZXkpIHR1cGxlCiAgICAgKiB3aXRoIFJJUEVNRC0xNjAuCiAgICAgKgogICAgICogVGhlIGRpZ2VzdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSByZWNvcmQgaW4gdGhlIGNsdXN0ZXIsIGFuZCBpcyB1c2VkIHRvCiAgICAgKiBjYWxjdWxhdGUgYSBwYXJ0aXRpb24gSUQuIFVzaW5nIHRoZSBwYXJ0aXRpb24gSUQsIHRoZSBjbGllbnQgY2FuIGlkZW50aWZ5CiAgICAgKiB0aGUgbm9kZSBob2xkaW5nIHRoZSByZWNvcmQncyBtYXN0ZXIgcGFydGl0aW9uIG9yIHJlcGxpY2EgcGFydGl0aW9uKHMpIGJ5CiAgICAgKiBsb29raW5nIGl0IHVwIGFnYWluc3QgdGhlIGNsdXN0ZXIncyBwYXJ0aXRpb24gbWFwLgogICAgICoKICAgICAqIGBgYHBocAogICAgICogJGRpZ2VzdCA9ICRjbGllbnQtPmdldEtleURpZ2VzdCgidGVzdCIsICJ1c2VycyIsIDEpOwogICAgICogJGtleSA9ICRjbGllbnQtPmluaXRLZXkoInRlc3QiLCAidXNlcnMiLCAkZGlnZXN0LCB0cnVlKTsKICAgICAqIHZhcl9kdW1wKCRkaWdlc3QsICRrZXkpOwogICAgICogYGBgCiAgICAgKgogICAgICogYGBgYmFzaAogICAgICogc3RyaW5nKDIwKSAiOSE/QCU/Pzs/Pz9XcD8nPz9BZyIKICAgICAqIGFycmF5KDMpIHsKICAgICAqICAgWyJucyJdPT4KICAgICAqICAgc3RyaW5nKDQpICJ0ZXN0IgogICAgICogICBbInNldCJdPT4KICAgICAqICAgc3RyaW5nKDUpICJ1c2VycyIKICAgICAqICAgWyJkaWdlc3QiXT0+CiAgICAgKiAgIHN0cmluZygyMCkgIjkhP0AlPz87Pz8/V3A/Jz8/QWciCiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYWVyb3NwaWtlL2Flcm9zcGlrZS1jbGllbnQtcGhwL2Jsb2IvbWFzdGVyL2RvYy9SRUFETUUubWQjY29uZmlndXJhdGlvbi1pbi1hLXdlYi1zZXJ2ZXItY29udGV4dCBDb25maWd1cmF0aW9uIGluIGEgV2ViIFNlcnZlciBDb250ZXh0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRucyB0aGUgbmFtZXNwYWNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXQgdGhlIHNldCB3aXRoaW4gdGhlIGdpdmVuIG5hbWVzcGFjZQogICAgICogQHBhcmFtIGludHxzdHJpbmcgJHBrIFRoZSBwcmltYXJ5IGtleSBpbiB0aGUgYXBwbGljYXRpb24KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6aW5pdEtleSgpIGluaXRLZXkoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0S2V5RGlnZXN0KCRucywgJHNldCwgJHBrKSB7fQoKICAgIC8qKgogICAgICogV3JpdGUgYSByZWNvcmQgaWRlbnRpZmllZCBieSB0aGUgJGtleSB3aXRoICRiaW5zLCBhbiBhcnJheSBvZiBiaW4tbmFtZSA9PiBiaW4tdmFsdWUgcGFpcnMuCiAgICAgKgogICAgICogQnkgZGVmYXVsdCBBZXJvc3Bpa2U6OnB1dCgpIGJlaGF2ZXMgaW4gYSBzZXQtYW5kLXJlcGxhY2UgbW9kZSwgc2ltaWxhciB0bwogICAgICogaG93IG5ldyBrZXlzIGFyZSBhZGRlZCB0byBhbiBhcnJheSwgb3IgdGhlIHZhbHVlIG9mIGV4aXN0aW5nIG9uZXMgaXMgb3ZlcndyaXR0ZW4uCiAgICAgKiBUaGlzIGJlaGF2aW9yIGNhbiBiZSBtb2RpZmllZCB1c2luZyB0aGUgKiRvcHRpb25zKiBwYXJhbWV0ZXIuCiAgICAgKgogICAgICogKipOb3RlOioqIGEgYmluYXJ5LXN0cmluZyB3aGljaCBpbmNsdWRlcyBhIG51bGwtYnl0ZSB3aWxsIGdldCB0cnVuY2F0ZWQKICAgICAqIGF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgKipcMCoqIGNoYXJhY3RlciBpZiBpdCBpcyBub3Qgd3JhcHBlZC4gRm9yIG1vcmUKICAgICAqIGluZm9ybWF0aW9uIGFuZCB0aGUgd29ya2Fyb3VuZCBzZWUgJ0hhbmRsaW5nIFVuc3VwcG9ydGVkIFR5cGVzJy4KICAgICAqCiAgICAgKiAqKkV4YW1wbGUgIzEgQWVyb3NwaWtlOjpwdXQoKSBkZWZhdWx0IGJlaGF2aW9yIGV4YW1wbGUqKgogICAgICogYGBgcGhwCiAgICAgKiAka2V5ID0gJGNsaWVudC0+aW5pdEtleSgidGVzdCIsICJ1c2VycyIsIDEyMzQpOwogICAgICogJGJpbnMgPSBbImVtYWlsIiA9PiAiaGV5QGV4YW1wbGUuY29tIiwgIm5hbWUiID0+ICJIZXkgVGhlcmUiXTsKICAgICAqIC8vIHdpbGwgZW5zdXJlIGEgcmVjb3JkIGV4aXN0cyBhdCB0aGUgZ2l2ZW4ga2V5IHdpdGggdGhlIHNwZWNpZmllZCBiaW5zCiAgICAgKiAkc3RhdHVzID0gJGNsaWVudC0+cHV0KCRrZXksICRiaW5zKTsKICAgICAqIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICBlY2hvICJSZWNvcmQgd3JpdHRlbi5cbiI7CiAgICAgKiB9IGVsc2UgewogICAgICogICAgIGVjaG8gIlt7JGNsaWVudC0+ZXJyb3JubygpfV0gIi4kY2xpZW50LT5lcnJvcigpOwogICAgICogfQogICAgICoKICAgICAqIC8vIFVwZGF0aW5nIHRoZSByZWNvcmQKICAgICAqICRiaW5zID0gWyJuYW1lIiA9PiAiWW91IFRoZXJlIiwgImFnZSIgPT4gMzNdOwogICAgICogLy8gd2lsbCB1cGRhdGUgdGhlIG5hbWUgYmluLCBhbmQgY3JlYXRlIGEgbmV3ICdhZ2UnIGJpbgogICAgICogJHN0YXR1cyA9ICRjbGllbnQtPnB1dCgka2V5LCAkYmlucyk7CiAgICAgKiBpZiAoJHN0YXR1cyA9PSBBZXJvc3Bpa2U6Ok9LKSB7CiAgICAgKiAgICAgZWNobyAiUmVjb3JkIHVwZGF0ZWQuXG4iOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBSZWNvcmQgd3JpdHRlbi4KICAgICAqIFJlY29yZCB1cGRhdGVkLgogICAgICogYGBgCiAgICAgKgogICAgICogKipFeGFtcGxlICMyIEZhaWwgdW5sZXNzIHRoZSBwdXQgZXhwbGljaXRseSBjcmVhdGVzIGEgbmV3IHJlY29yZCoqCiAgICAgKiBgYGBwaHAKICAgICAqCiAgICAgKiAvLyBUaGlzIHRpbWUgd2UgZXhwZWN0IGFuIGVycm9yLCBkdWUgdG8gdGhlIHJlY29yZCBhbHJlYWR5IGV4aXN0aW5nIChhc3N1bWluZyB3ZQogICAgICogLy8gcmFuIEV4YW1wbGUgIzEpCiAgICAgKiAkc3RhdHVzID0gJGNsaWVudC0+cHV0KCRrZXksICRiaW5zLCAwLCBbQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0VYSVNUUyA9PiBBZXJvc3Bpa2U6OlBPTElDWV9FWElTVFNfQ1JFQVRFXSk7CiAgICAgKgogICAgICogaWYgKCRzdGF0dXMgPT0gQWVyb3NwaWtlOjpPSykgewogICAgICogICAgIGVjaG8gIlJlY29yZCB3cml0dGVuLlxuIjsKICAgICAqIH0gZWxzZWlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6RVJSX1JFQ09SRF9FWElTVFMpIHsKICAgICAqICAgICBlY2hvICJUaGUgQWVyb3NwaWtlIHNlcnZlciBhbHJlYWR5IGhhcyBhIHJlY29yZCB3aXRoIHRoZSBnaXZlbiBrZXkuXG4iOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBUaGUgQWVyb3NwaWtlIGNsdXN0ZXIgYWxyZWFkeSBoYXMgYSByZWNvcmQgd2l0aCB0aGUgZ2l2ZW4ga2V5LgogICAgICogYGBgCiAgICAgKgogICAgICogKipFeGFtcGxlICMzIEZhaWwgaWYgdGhlIHJlY29yZCBoYXMgYmVlbiB3cml0dGVuIHNpbmNlIGl0IHdhcyBsYXN0IHJlYWQKICAgICAqIChDQVMpKioKICAgICAqIGBgYHBocAogICAgICogLy8gR2V0IHRoZSByZWNvcmQgbWV0YWRhdGEgYW5kIG5vdGUgaXRzIGdlbmVyYXRpb24KICAgICAqICRjbGllbnQtPmV4aXN0cygka2V5LCAkbWV0YWRhdGEpOwogICAgICogJGdlbiA9ICRtZXRhZGF0YVsnZ2VuZXJhdGlvbiddOwogICAgICogJGdlbl9wb2xpY3kgPSBbQWVyb3NwaWtlOjpQT0xJQ1lfR0VOX0VRLCAkZ2VuXTsKICAgICAqICRyZXMgPSAkY2xpZW50LT5wdXQoJGtleSwgJGJpbnMsIDAsIFtBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOID0+ICRnZW5fcG9saWN5XSk7CiAgICAgKgogICAgICogaWYgKCRyZXMgPT0gQWVyb3NwaWtlOjpPSykgewogICAgICogICAgIGVjaG8gIlJlY29yZCB3cml0dGVuLlxuIjsKICAgICAqIH0gZWxzZWlmICgkcmVzID09IEFlcm9zcGlrZTo6RVJSX1JFQ09SRF9HRU5FUkFUSU9OKSB7CiAgICAgKiAgICAgZWNobyAiVGhlIHJlY29yZCBoYXMgYmVlbiB3cml0dGVuIHNpbmNlIHdlIGxhc3QgcmVhZCBpdC5cbiI7CiAgICAgKiB9IGVsc2UgewogICAgICogICAgIGVjaG8gIlt7JGNsaWVudC0+ZXJyb3JubygpfV0gIi4kY2xpZW50LT5lcnJvcigpOwogICAgICogfQogICAgICogPz4KICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBUaGUgcmVjb3JkIGhhcyBiZWVuIHdyaXR0ZW4gc2luY2Ugd2UgbGFzdCByZWFkIGl0LgogICAgICogYGBgCiAgICAgKgogICAgICogKipFeGFtcGxlICM0IEhhbmRsaW5nIGJpbmFyeSBzdHJpbmdzKioKICAgICAqIGBgYHBocAogICAgICogJHN0ciA9ICdHbGFnbmFyXCdzIEh1bWFuIFJpbmRzLCAiSXRcJ3MgYSBidW5jaFwnYSBtdW5jaFwnYSBjcnVuY2hcJ2EgaHVtYW4hJzsKICAgICAqICRkZWZsYXRlZCA9IG5ldyBcQWVyb3NwaWtlXEJ5dGVzKGd6ZGVmbGF0ZSgkc3RyKSk7CiAgICAgKiAkd3JhcHBlZCA9IG5ldyBcQWVyb3NwaWtlXEJ5dGVzKCJ0cnVuY1wwYXRlZCIpOwogICAgICoKICAgICAqICRrZXkgPSAkY2xpZW50LT5pbml0S2V5KCd0ZXN0JywgJ2RlbW8nLCAnd3JhcHBlZC1ieXRlcycpOwogICAgICogJHN0YXR1cyA9ICRjbGllbnQtPnB1dCgka2V5LCBbJ3Vud3JhcHBlZCc9PiJ0cnVuY1wwYXRlZCIsICd3cmFwcGVkJz0+ICR3cmFwcGVkLCAnZGVmbGF0ZWQnID0+ICRkZWZsYXRlZF0pOwogICAgICogaWYgKCRzdGF0dXMgIT09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICBkaWUoJGNsaWVudC0+ZXJyb3IoKSk7CiAgICAgKiB9CiAgICAgKiAkY2xpZW50LT5nZXQoJGtleSwgJHJlY29yZCk7CiAgICAgKiAkd3JhcHBlZCA9IFxBZXJvc3Bpa2VcQnl0ZXM6OnVud3JhcCgkcmVjb3JkWydiaW5zJ11bJ3dyYXBwZWQnXSk7CiAgICAgKiAkZGVmbGF0ZWQgPSAkcmVjb3JkWydiaW5zJ11bJ2RlZmxhdGVkJ107CiAgICAgKiAkaW5mbGF0ZWQgPSBnemluZmxhdGUoJGRlZmxhdGVkLT5zKTsKICAgICAqIGVjaG8gIiRpbmZsYXRlZFxuIjsKICAgICAqIGVjaG8gIndyYXBwZWQgYmluYXJ5LXN0cmluZzogIjsKICAgICAqIHZhcl9kdW1wKCR3cmFwcGVkKTsKICAgICAqICR1bndyYXBwZWQgPSAkcmVjb3JkWydiaW5zJ11bJ3Vud3JhcHBlZCddOwogICAgICogZWNobyAiVGhlIGJpbmFyeS1zdHJpbmcgdGhhdCB3YXMgZ2l2ZW4gdG8gcHV0KCkgd2l0aG91dCBhIHdyYXBwZXI6ICR1bndyYXBwZWRcbiI7CiAgICAgKiBgYGAKICAgICAqIGBgYAogICAgICogR2xhZ25hcidzIEh1bWFuIFJpbmRzLCAiSXQncyBhIGJ1bmNoJ2EgbXVuY2gnYSBjcnVuY2gnYSBodW1hbiEKICAgICAqIHdyYXBwZWQgYmluYXJ5LXN0cmluZzogc3RyaW5nKDEwKSAidHJ1bmNhdGVkIgogICAgICogVGhlIGJpbmFyeS1zdHJpbmcgdGhhdCB3YXMgZ2l2ZW4gdG8gcHV0KCkgd2l0aG91dCBhIHdyYXBwZXI6IHRydW5jCiAgICAgKiBgYGAKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9hcmNoaXRlY3R1cmUvZGF0YS1tb2RlbC5odG1sIEFlcm9zcGlrZSBEYXRhIE1vZGVsCiAgICAgKiBAbGluayBodHRwczovL3d3dy5hZXJvc3Bpa2UuY29tL2RvY3MvZ3VpZGUva3ZzLmh0bWwgS2V5LVZhbHVlIFN0b3JlCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vYWVyb3NwaWtlL2Flcm9zcGlrZS1jbGllbnQtcGhwL2Jsb2IvbWFzdGVyL2RvYy9SRUFETUUubWQjaGFuZGxpbmctdW5zdXBwb3J0ZWQtdHlwZXMgSGFuZGxpbmcgVW5zdXBwb3J0ZWQgVHlwZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9jbGllbnQvYy91c2FnZS9rdnMvd3JpdGUuaHRtbCNjaGFuZ2UtcmVjb3JkLXRpbWUtdG8tbGl2ZS10dGwgVGltZS10by1saXZlCiAgICAgKiBAbGluayBodHRwczovL3d3dy5hZXJvc3Bpa2UuY29tL2RvY3MvZ3VpZGUvZ2xvc3NhcnkuaHRtbCBHbG9zc2FyeQogICAgICogQHBhcmFtIGFycmF5ICRrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgcmVjb3JkLiBBbiBhcnJheSB3aXRoIGtleXMgYFsnbnMnLCdzZXQnLCdrZXknXWAgb3IgYFsnbnMnLCdzZXQnLCdkaWdlc3QnXWAKICAgICAqIEBwYXJhbSBhcnJheSAkYmlucyBUaGUgYXJyYXkgb2YgYmluIG5hbWVzIGFuZCB2YWx1ZXMgdG8gd3JpdGUuICoqQmluIG5hbWVzIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAxNCBjaGFyYWN0ZXJzLioqIEJpbmFyeSBkYXRhIGNvbnRhaW5pbmcgdGhlIG51bGwgYnl0ZSAoKipcMCoqKSBtYXkgZ2V0IHRydW5jYXRlZC4gU2VlICdIYW5kbGluZyBVbnN1cHBvcnRlZCBUeXBlcycgZm9yIG1vcmUgZGV0YWlscyBhbmQgYSB3b3JrYXJvdW5kCiAgICAgKiBAcGFyYW0gaW50ICR0dGwgVGhlIHJlY29yZCdzIHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2Ygd3JpdGUgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NFUklBTElaRVIKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9FWElTVFMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTAogICAgICogKiBBZXJvc3Bpa2U6OkNPTVBSRVNTSU9OX1RIUkVTSE9MRAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9NQVhfUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVAogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TRVJJQUxJWkVSIEFlcm9zcGlrZTo6T1BUX1NFUklBTElaRVIgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfRVhJU1RTIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9FWElTVFMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6OkNPTVBSRVNTSU9OX1RIUkVTSE9MRAogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9LIEFlcm9zcGlrZTo6T0sgYW5kIGVycm9yIHN0YXR1cyBjb2RlcwogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9yKCkgZXJyb3IoKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9ybm8oKSBlcnJvcm5vKCkKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1dChhcnJheSAka2V5LCBhcnJheSAkYmlucywgJHR0bCA9IDAsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBSZWFkIGEgcmVjb3JkIHdpdGggYSBnaXZlbiBrZXksIGFuZCBzdG9yZSBpdCBpbiAkcmVjb3JkCiAgICAgKgogICAgICogVGhlIGJpbnMgcmV0dXJuZWQgaW4gKiRyZWNvcmQqIGNhbiBiZSBmaWx0ZXJlZCBieSBwYXNzaW5nIGEgKiRzZWxlY3QqCiAgICAgKiBhcnJheSBvZiBiaW4gbmFtZXMuIE5vbi1leGlzdGVudCBiaW5zIHdpbGwgYXBwZWFyIGluIHRoZSAqJHJlY29yZCogd2l0aCBhIGBOVUxMYCB2YWx1ZS4KICAgICAqCiAgICAgKiAqKkV4YW1wbGUgIzEgQWVyb3NwaWtlOjpnZXQoKSBkZWZhdWx0IGJlaGF2aW9yIGV4YW1wbGUqKgogICAgICogYGBgcGhwCiAgICAgKiAka2V5ID0gJGNsaWVudC0+aW5pdEtleSgidGVzdCIsICJ1c2VycyIsIDEyMzQpOwogICAgICogJHN0YXR1cyA9ICRjbGllbnQtPmdldCgka2V5LCAkcmVjb3JkKTsKICAgICAqIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICB2YXJfZHVtcCgkcmVjb3JkKTsKICAgICAqIH0gZWxzZWlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6RVJSX1JFQ09SRF9OT1RfRk9VTkQpIHsKICAgICAqICAgICBlY2hvICJBIHVzZXIgd2l0aCBrZXkgIi4gJGtleVsna2V5J10uICIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlXG4iOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBhcnJheSgzKSB7CiAgICAgKiAgIFsia2V5Il09PgogICAgICogICBhcnJheSg0KSB7CiAgICAgKiAgICAgWyJkaWdlc3QiXT0+CiAgICAgKiAgICAgc3RyaW5nKDQwKSAiNDM2YTNiOWZjYWZiOTZkMTI4NDRhYjEzNzdjMGZmMGQ3YTBiNzBjYyIKICAgICAqICAgICBbIm5hbWVzcGFjZSJdPT4KICAgICAqICAgICBOVUxMCiAgICAgKiAgICAgWyJzZXQiXT0+CiAgICAgKiAgICAgTlVMTAogICAgICogICAgIFsia2V5Il09PgogICAgICogICAgIE5VTEwKICAgICAqICAgfQogICAgICogICBbIm1ldGFkYXRhIl09PgogICAgICogICBhcnJheSgyKSB7CiAgICAgKiAgICAgWyJnZW5lcmF0aW9uIl09PgogICAgICogICAgIGludCgzKQogICAgICogICAgIFsidHRsIl09PgogICAgICogICAgIGludCgxMjM0NSkKICAgICAqICAgfQogICAgICogICBbImJpbnMiXT0+CiAgICAgKiAgIGFycmF5KDMpIHsKICAgICAqICAgICBbImVtYWlsIl09PgogICAgICogICAgIHN0cmluZyg5KSAiaGV5QGV4YW1wbGUuY29tIgogICAgICogICAgIFsibmFtZSJdPT4KICAgICAqICAgICBzdHJpbmcoOSkgIllvdSBUaGVyZSIKICAgICAqICAgICBbImFnZSJdPT4KICAgICAqICAgICBpbnQoMzMpCiAgICAgKiAgIH0KICAgICAqIH0KICAgICAqIGBgYAogICAgICogKipFeGFtcGxlICMyIGdldCB0aGUgcmVjb3JkIHdpdGggZmlsdGVyZWQgYmlucyoqCiAgICAgKiBgYGBwaHAKICAgICAqIC8vIGFzc3VtaW5nIHRoaXMgZm9sbG93cyBFeGFtcGxlICMxLCBnZXR0aW5nIGEgZmlsdGVyZWQgcmVjb3JkCiAgICAgKiAkZmlsdGVyID0gWyJlbWFpbCIsICJtYW5hZ2VyIl07CiAgICAgKiB1bnNldCgkcmVjb3JkKTsKICAgICAqICRzdGF0dXMgPSAkY2xpZW50LT5nZXQoJGtleSwgJHJlY29yZCwgJGZpbHRlcik7CiAgICAgKiBpZiAoJHN0YXR1cyA9PSBBZXJvc3Bpa2U6Ok9LKSB7CiAgICAgKiAgICAgdmFyX2R1bXAoJHJlY29yZCk7CiAgICAgKiB9IGVsc2UgewogICAgICogICAgIGVjaG8gIlt7JGNsaWVudC0+ZXJyb3JubygpfV0gIi4kY2xpZW50LT5lcnJvcigpOwogICAgICogfQogICAgICogYGBgCiAgICAgKiBgYGAKICAgICAqIGFycmF5KDMpIHsKICAgICAqICAgWyJrZXkiXT0+CiAgICAgKiAgIGFycmF5KDQpIHsKICAgICAqICAgICBbImRpZ2VzdCJdPT4KICAgICAqICAgICBzdHJpbmcoNDApICI0MzZhM2I5ZmNhZmI5NmQxMjg0NGFiMTM3N2MwZmYwZDdhMGI3MGNjIgogICAgICogICAgIFsibmFtZXNwYWNlIl09PgogICAgICogICAgIE5VTEwKICAgICAqICAgICBbInNldCJdPT4KICAgICAqICAgICBOVUxMCiAgICAgKiAgICAgWyJrZXkiXT0+CiAgICAgKiAgICAgTlVMTAogICAgICogICB9CiAgICAgKiAgIFsibWV0YWRhdGEiXT0+CiAgICAgKiAgIGFycmF5KDIpIHsKICAgICAqICAgICBbImdlbmVyYXRpb24iXT0+CiAgICAgKiAgICAgaW50KDMpCiAgICAgKiAgICAgWyJ0dGwiXT0+CiAgICAgKiAgICAgaW50KDEyMzQ0KQogICAgICogICB9CiAgICAgKiAgIFsiYmlucyJdPT4KICAgICAqICAgYXJyYXkoMikgewogICAgICogICAgIFsiZW1haWwiXT0+CiAgICAgKiAgICAgc3RyaW5nKDE1KSAiaGV5QGV4YW1wbGUuY29tIgogICAgICogICAgIFsibWFuYWdlciJdPT4KICAgICAqICAgICBOVUxMCiAgICAgKiAgIH0KICAgICAqIH0KICAgICAqIGBgYAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2FyY2hpdGVjdHVyZS9kYXRhLW1vZGVsLmh0bWwgQWVyb3NwaWtlIERhdGEgTW9kZWwKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9rdnMuaHRtbCBLZXktVmFsdWUgU3RvcmUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9nbG9zc2FyeS5odG1sIEdsb3NzYXJ5CiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleSBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSByZWNvcmQuIEFuIGFycmF5IHdpdGgga2V5cyBgWyducycsJ3NldCcsJ2tleSddYCBvciBgWyducycsJ3NldCcsJ2RpZ2VzdCddYAogICAgICogQHBhcmFtIGFycmF5ICYkcmVjb3JkIGEgcmVmZXJlbmNlIHRvIGEgdmFyaWFibGUgd2hpY2ggd2lsbCBjb250YWluIHRoZSByZXRyaWV2ZWQgcmVjb3JkIG9mIGBbJ2tleScsIG1ldGFkYXRhJywgJ2JpbnNdYCB3aXRoIHRoZSBzdHJ1Y3R1cmU6CiAgICAgKiBgYGAKICAgICAqIEFycmF5OgogICAgICogICBrZXkgPT4gQXJyYXkKICAgICAqICAgICBucyA9PiBuYW1lc3BhY2UKICAgICAqICAgICBzZXQgPT4gc2V0IG5hbWUKICAgICAqICAgICBrZXkgPT4gcHJpbWFyeS1rZXksIHByZXNlbnQgaWYgd3JpdHRlbiB3aXRoIFBPTElDWV9LRVlfU0VORAogICAgICogICAgIGRpZ2VzdCA9PiB0aGUgcmVjb3JkJ3MgUklQRU1ELTE2MCBkaWdlc3QsIGFsd2F5cyBwcmVzZW50CiAgICAgKiAgIG1ldGFkYXRhID0+IEFycmF5CiAgICAgKiAgICAgdHRsID0+IHRpbWUgaW4gc2Vjb25kcyB1bnRpbCB0aGUgcmVjb3JkIGV4cGlyZXMKICAgICAqICAgICBnZW5lcmF0aW9uID0+IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHJlY29yZCBoYXMgYmVlbiB3cml0dGVuCiAgICAgKiAgIGJpbnMgPT4gQXJyYXkgb2YgYmluLW5hbWUgPT4gYmluLXZhbHVlIHBhaXJzCiAgICAgKiBgYGAKICAgICAqIEBwYXJhbSBudWxsfGFycmF5ICRzZWxlY3Qgb25seSB0aGVzZSBiaW5zIG91dCBvZiB0aGUgcmVjb3JkIChvcHRpb25hbCkKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiByZWFkIHBvbGljeSBvcHRpb25zLCB3aG9zZSBrZXlzIGluY2x1ZGUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUkVBRF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkKICAgICAqICogQWVyb3NwaWtlOjpPUFRfREVTRVJJQUxJWkUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFUExJQ0EKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9BUAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX1NDCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9ERVNFUklBTElaRSBBZXJvc3Bpa2U6Ok9QVF9ERVNFUklBTElaRSBvcHRpb24KICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFUExJQ0EgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFUExJQ0Egb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX0FQIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfQVAgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX1NDIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfU0Mgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9LIEFlcm9zcGlrZTo6T0sgYW5kIGVycm9yIHN0YXR1cyBjb2RlcwogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9yKCkgZXJyb3IoKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9ybm8oKSBlcnJvcm5vKCkKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldChhcnJheSAka2V5LCAmJHJlY29yZCwgJHNlbGVjdCA9IG51bGwsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1ldGFkYXRhIG9mIGEgcmVjb3JkIHdpdGggYSBnaXZlbiBrZXksIGFuZCBzdG9yZSBpdCBpbiAkbWV0YWRhdGEKICAgICAqCiAgICAgKiBgYGBwaHAKICAgICAqICRrZXkgPSAkY2xpZW50LT5pbml0S2V5KCJ0ZXN0IiwgInVzZXJzIiwgMTIzNCk7CiAgICAgKiAkc3RhdHVzID0gJGNsaWVudC0+ZXhpc3RzKCRrZXksICRtZXRhZGF0YSk7CiAgICAgKiBpZiAoJHN0YXR1cyA9PSBBZXJvc3Bpa2U6Ok9LKSB7CiAgICAgKiAgICAgdmFyX2R1bXAoJG1ldGFkYXRhKTsKICAgICAqIH0gZWxzZWlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6RVJSX1JFQ09SRF9OT1RfRk9VTkQpIHsKICAgICAqICAgICBlY2hvICJBIHVzZXIgd2l0aCBrZXkgIi4gJGtleVsna2V5J10uICIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlXG4iOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBhcnJheSgyKSB7CiAgICAgKiAgIFsiZ2VuZXJhdGlvbiJdPT4KICAgICAqICAgaW50KDQpCiAgICAgKiAgIFsidHRsIl09PgogICAgICogICBpbnQoMTMzNykKICAgICAqIH0KICAgICAqIGBgYAogICAgICogKipvcioqCiAgICAgKiBgYGAKICAgICAqIEEgdXNlciB3aXRoIGtleSAxMjM0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZS4KICAgICAqIGBgYAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2d1aWRlL2dsb3NzYXJ5Lmh0bWwgR2xvc3NhcnkKICAgICAqIEBwYXJhbSBhcnJheSAka2V5IFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHJlY29yZC4gQW4gYXJyYXkgd2l0aCBrZXlzIGBbJ25zJywnc2V0Jywna2V5J11gIG9yIGBbJ25zJywnc2V0JywnZGlnZXN0J11gCiAgICAgKiBAcGFyYW0gYXJyYXkgJiRtZXRhZGF0YSBhIHJlZmVyZW5jZSB0byBhIHZhcmlhYmxlIHdoaWNoIHdpbGwgYmUgZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgYFsndHRsJywgJ2dlbmVyYXRpb24nXWAgdmFsdWVzCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcmVhZCBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9ERVNFUklBTElaRQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9NQVhfUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRVBMSUNBCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfQVAKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9TQwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfUkVBRF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfREVTRVJJQUxJWkUgQWVyb3NwaWtlOjpPUFRfREVTRVJJQUxJWkUgb3B0aW9uCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRVBMSUNBIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRVBMSUNBIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9BUCBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX0FQIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9TQyBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX1NDIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPSyBBZXJvc3Bpa2U6Ok9LIGFuZCBlcnJvciBzdGF0dXMgY29kZXMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcigpIGVycm9yKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcm5vKCkgZXJyb3JubygpCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGlzdHMoYXJyYXkgJGtleSwgJiRtZXRhZGF0YSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFRvdWNoIHRoZSByZWNvcmQgaWRlbnRpZmllZCBieSB0aGUgJGtleSwgcmVzZXR0aW5nIGl0cyB0aW1lLXRvLWxpdmUuCiAgICAgKgogICAgICogYGBgcGhwCiAgICAgKiAka2V5ID0gJGNsaWVudC0+aW5pdEtleSgidGVzdCIsICJ1c2VycyIsIDEyMzQpOwogICAgICogJHN0YXR1cyA9ICRjbGllbnQtPnRvdWNoKCRrZXksIDEyMCk7CiAgICAgKiBpZiAoJHN0YXR1cyA9PSBBZXJvc3Bpa2U6Ok9LKSB7CiAgICAgKiAgICAgZWNobyAiQWRkZWQgMTIwIHNlY29uZHMgdG8gdGhlIHJlY29yZCdzIGV4cGlyYXRpb24uXG4iCiAgICAgKiB9IGVsc2VpZiAoJHN0YXR1cyA9PSBBZXJvc3Bpa2U6OkVSUl9SRUNPUkRfTk9UX0ZPVU5EKSB7CiAgICAgKiAgICAgZWNobyAiQSB1c2VyIHdpdGgga2V5ICIuICRrZXlbJ2tleSddLiAiIGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZVxuIjsKICAgICAqIH0gZWxzZSB7CiAgICAgKiAgICAgZWNobyAiW3skY2xpZW50LT5lcnJvcm5vKCl9XSAiLiRjbGllbnQtPmVycm9yKCk7CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIGBgYAogICAgICogQWRkZWQgMTIwIHNlY29uZHMgdG8gdGhlIHJlY29yZCdzIGV4cGlyYXRpb24uCiAgICAgKiBgYGAKICAgICAqICoqb3IqKgogICAgICogYGBgCiAgICAgKiBBIHVzZXIgd2l0aCBrZXkgMTIzNCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UuCiAgICAgKiBgYGAKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9jbGllbnQvYy91c2FnZS9rdnMvd3JpdGUuaHRtbCNjaGFuZ2UtcmVjb3JkLXRpbWUtdG8tbGl2ZS10dGwgVGltZS10by1saXZlCiAgICAgKiBAbGluayBodHRwczovL3d3dy5hZXJvc3Bpa2UuY29tL2RvY3MvZ3VpZGUvRkFRLmh0bWwgRkFRCiAgICAgKiBAbGluayBodHRwczovL2Rpc2N1c3MuYWVyb3NwaWtlLmNvbS90L3JlY29yZHMtdHRsLWFuZC1ldmljdGlvbnMvNzM3IFJlY29yZCBUVEwgYW5kIEV2aWN0aW9ucwogICAgICogQHBhcmFtIGFycmF5ICRrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgcmVjb3JkLiBBbiBhcnJheSB3aXRoIGtleXMgYFsnbnMnLCdzZXQnLCdrZXknXWAgb3IgYFsnbnMnLCdzZXQnLCdkaWdlc3QnXWAKICAgICAqIEBwYXJhbSBpbnQgJHR0bCBUaGUgcmVjb3JkJ3MgdGltZS10by1saXZlIGluIHNlY29uZHMKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiB3cml0ZSBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwKICAgICAqICogQWVyb3NwaWtlOjpPUFRfREVTRVJJQUxJWkUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfREVTRVJJQUxJWkUgQWVyb3NwaWtlOjpPUFRfREVTRVJJQUxJWkUgb3B0aW9uCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T0sgQWVyb3NwaWtlOjpPSyBhbmQgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b3VjaChhcnJheSAka2V5LCAkdHRsID0gMCwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSB0aGUgcmVjb3JkIGlkZW50aWZpZWQgYnkgdGhlICRrZXkuCiAgICAgKgogICAgICogYGBgcGhwCiAgICAgKiAka2V5ID0gJGNsaWVudC0+aW5pdEtleSgidGVzdCIsICJ1c2VycyIsIDEyMzQpOwogICAgICogJHN0YXR1cyA9ICRjbGllbnQtPnJlbW92ZSgka2V5KTsKICAgICAqIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICBlY2hvICJSZWNvcmQgcmVtb3ZlZC5cbiI7CiAgICAgKiB9IGVsc2VpZiAoJHN0YXR1cyA9PSBBZXJvc3Bpa2U6OkVSUl9SRUNPUkRfTk9UX0ZPVU5EKSB7CiAgICAgKiAgICAgZWNobyAiQSB1c2VyIHdpdGgga2V5ICIuICRrZXlbJ2tleSddLiAiIGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZVxuIjsKICAgICAqIH0gZWxzZSB7CiAgICAgKiAgICAgZWNobyAiW3skY2xpZW50LT5lcnJvcm5vKCl9XSAiLiRjbGllbnQtPmVycm9yKCk7CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIGBgYAogICAgICogUmVjb3JkIHJlbW92ZWQuCiAgICAgKiBgYGAKICAgICAqIEBwYXJhbSBhcnJheSAka2V5IFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHJlY29yZC4gQW4gYXJyYXkgd2l0aCBrZXlzIGBbJ25zJywnc2V0Jywna2V5J11gIG9yIGBbJ25zJywnc2V0JywnZGlnZXN0J11gCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2Ygd3JpdGUgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4KICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfRFVSQUJMRV9ERUxFVEUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0RVUkFCTEVfREVMRVRFIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T0sgQWVyb3NwaWtlOjpPSyBhbmQgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoYXJyYXkgJGtleSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSAkYmlucyBmcm9tIHRoZSByZWNvcmQgaWRlbnRpZmllZCBieSB0aGUgJGtleS4KICAgICAqCiAgICAgKiBgYGBwaHAKICAgICAqICRrZXkgPSBbIm5zIiA9PiAidGVzdCIsICJzZXQiID0+ICJ1c2VycyIsICJrZXkiID0+IDEyMzRdOwogICAgICogJG9wdGlvbnMgPSBhcnJheShBZXJvc3Bpa2U6Ok9QVF9UVEwgPT4gMzYwMCk7CiAgICAgKiAkc3RhdHVzID0gJGNsaWVudC0+cmVtb3ZlQmluKCRrZXksIFsiYWdlIl0sICRvcHRpb25zKTsKICAgICAqIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICBlY2hvICJSZW1vdmVkIGJpbiAnYWdlJyBmcm9tIHRoZSByZWNvcmQuXG4iOwogICAgICogfSBlbHNlaWYgKCRzdGF0dXMgPT0gQWVyb3NwaWtlOjpFUlJfUkVDT1JEX05PVF9GT1VORCkgewogICAgICogICAgIGVjaG8gIlRoZSBkYXRhYmFzZSBoYXMgbm8gcmVjb3JkIHdpdGggdGhlIGdpdmVuIGtleS5cbiI7CiAgICAgKiB9IGVsc2UgewogICAgICogICAgIGVjaG8gIlt7JGNsaWVudC0+ZXJyb3JubygpfV0gIi4kY2xpZW50LT5lcnJvcigpOwogICAgICogfQogICAgICogYGBgCiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleSBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSByZWNvcmQuIEFuIGFycmF5IHdpdGgga2V5cyBgWyducycsJ3NldCcsJ2tleSddYCBvciBgWyducycsJ3NldCcsJ2RpZ2VzdCddYAogICAgICogQHBhcmFtIGFycmF5ICRiaW5zIEEgbGlzdCBvZiBiaW4gbmFtZXMgdG8gcmVtb3ZlCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2Ygd3JpdGUgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTgogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMCiAgICAgKiAqIEFlcm9zcGlrZTo6Q09NUFJFU1NJT05fVEhSRVNIT0xECiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX01BWF9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTiBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6Q09NUFJFU1NJT05fVEhSRVNIT0xECiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T0sgQWVyb3NwaWtlOjpPSyBhbmQgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVCaW4oYXJyYXkgJGtleSwgYXJyYXkgJGJpbnMsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgYWxsIHRoZSByZWNvcmRzIGZyb20gYSBuYW1lc3BhY2Ugb3Igc2V0CiAgICAgKgogICAgICogUmVtb3ZlIHJlY29yZHMgaW4gYSBzcGVjaWZpZWQgbmFtZXNwYWNlL3NldCBlZmZpY2llbnRseS4gVGhpcyBtZXRob2QgaXMKICAgICAqIG1hbnkgb3JkZXJzIG9mIG1hZ25pdHVkZSBmYXN0ZXIgdGhhbiBkZWxldGluZyByZWNvcmRzIG9uZSBhdCBhIHRpbWUuCiAgICAgKiAqKk5vdGU6Kiogd29ya3Mgd2l0aCBBZXJvc3Bpa2UgU2VydmVyIHZlcnNpb25zID49IDMuMTIKICAgICAqIFNlZSB7QGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL3JlZmVyZW5jZS9pbmZvI3RydW5jYXRlIFRydW5jYXRlIGNvbW1hbmQgaW5mb3JtYXRpb259CiAgICAgKgogICAgICogVGhpcyBhc3luY2hyb25vdXMgc2VydmVyIGNhbGwgbWF5IHJldHVybiBiZWZvcmUgdGhlIHRydW5jYXRpb24gaXMgY29tcGxldGUuCiAgICAgKiBUaGUgdXNlciBjYW4gc3RpbGwgd3JpdGUgbmV3IHJlY29yZHMgYWZ0ZXIgdGhlIHNlcnZlciByZXR1cm5zIGJlY2F1c2UgbmV3CiAgICAgKiByZWNvcmRzIHdpbGwgaGF2ZSBsYXN0IHVwZGF0ZSB0aW1lcyBncmVhdGVyIHRoYW4gdGhlIHRydW5jYXRlIGN1dG9mZgogICAgICogKHNldCBhdCB0aGUgdGltZSBvZiB0cnVuY2F0ZSBjYWxsKS4KICAgICAqCiAgICAgKiBUaGUgdHJ1bmNhdGUgY29tbWFuZCBkb2VzIG5vdCBkdXJhYmx5IGRlbGV0ZSByZWNvcmRzIGluIHRoZSBDb21tdW5pdHkgRWRpdGlvbi4KICAgICAqIFRoZSBFbnRlcnByaXNlIEVkaXRpb24gcHJvdmlkZXMgZHVyYWJpbGl0eSB0aHJvdWdoIHRoZSB0cnVuY2F0ZSBjb21tYW5kLgogICAgICoKICAgICAqIGBgYHBocAogICAgICogJHNlY29uZHNJbkRheSA9IDI0ICogNjAgKiA2MDsKICAgICAqCiAgICAgKiAvLyBNdWx0aXBseSBieSAxMCBeIDkgdG8gZ2V0IG5hbm9zZWNvbmRzCiAgICAgKiAkeWVzdGVyZGF5ID0gMTAwMDAwMDAwMCAqICh0aW1lKCkgLSAkc2Vjb25kc0luRGF5KTsKICAgICAqCiAgICAgKiAvLyBSZW1vdmUgYWxsIHJlY29yZHMgaW4gdGVzdC90cnVuY2F0ZVNldCB1cGRhdGVkIGJlZm9yZSAyNCBob3VycyBhZ28KICAgICAqICRzdGF0dXMgPSAkY2xpZW50LT50cnVuY2F0ZSgidGVzdCIsICJkZW1vU2V0IiwgJHllc3RlcmRheSk7CiAgICAgKgogICAgICogLy8gVHJ1bmNhdGUgYWxsIHJlY29yZHMgaW4gdGVzdCwgcmVnYXJkbGVzcyBvZiB1cGRhdGUgdGltZQogICAgICogJHN0YXR1cyA9ICRjbGllbnQtPnRydW5jYXRlKCJ0ZXN0IiwgbnVsbCwgMCk7CiAgICAgKiBgYGAKICAgICAqIEB2ZXJzaW9uIDMuMTIgUmVxdWlyZXMgc2VydmVyID49IDMuMTIKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5zIHRoZSBuYW1lc3BhY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNldCB0aGUgc2V0IHdpdGhpbiB0aGUgZ2l2ZW4gbmFtZXNwYWNlCiAgICAgKiBAcGFyYW0gaW50ICAgICRuYW5vcyBjdXRvZmYgdGhyZXNob2xkIGluZGljYXRpbmcgdGhhdCByZWNvcmRzCiAgICAgKiBsYXN0IHVwZGF0ZWQgYmVmb3JlIHRoZSB0aHJlc2hvbGQgd2lsbCBiZSByZW1vdmVkLiBVbml0cyBhcmUgaW4KICAgICAqIG5hbm9zZWNvbmRzIHNpbmNlIHVuaXggZXBvY2ggKDE5NzAtMDEtMDEgMDA6MDA6MDApLiBBIHZhbHVlIG9mIDAKICAgICAqIGluZGljYXRlcyB0aGF0IGFsbCByZWNvcmRzIGluIHRoZSBzZXQgc2hvdWxkIGJlIHRydW5jYXRlZAogICAgICogcmVnYXJkbGVzcyBvZiB1cGRhdGUgdGltZS4gVGhlIHZhbHVlIG11c3Qgbm90IGJlIGluIHRoZSBmdXR1cmUuCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2Ygd3JpdGUgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cnVuY2F0ZSgkbnMsICRzZXQsICRuYW5vcywgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIEluY3JlbWVudCB0aGUgdmFsdWUgb2YgJGJpbiBpbiB0aGUgcmVjb3JkIGlkZW50aWZpZWQgYnkgdGhlICRrZXkgYnkgYW4KICAgICAqICRvZmZzZXQuCiAgICAgKgogICAgICogYGBgcGhwCiAgICAgKiAka2V5ID0gJGNsaWVudC0+aW5pdEtleSgidGVzdCIsICJ1c2VycyIsIDEyMzQpOwogICAgICogJG9wdGlvbnMgPSBbQWVyb3NwaWtlOjpPUFRfVFRMID0+IDcyMDBdOwogICAgICogJHN0YXR1cyA9ICRjbGllbnQtPmluY3JlbWVudCgka2V5LCAncHRvJywgLTQsICRvcHRpb25zKTsKICAgICAqIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICBlY2hvICJEZWNyZW1lbnRlZCBmb3VyIHZhY2F0aW9uIGRheXMgZnJvbSB0aGUgdXNlcidzIFBUTyBiYWxhbmNlLlxuIjsKICAgICAqIH0gZWxzZSB7CiAgICAgKiAgICAgZWNobyAiW3skY2xpZW50LT5lcnJvcm5vKCl9XSAiLiRjbGllbnQtPmVycm9yKCk7CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIEBwYXJhbSBhcnJheSAka2V5IFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHJlY29yZC4gQW4gYXJyYXkgd2l0aCBrZXlzIGBbJ25zJywnc2V0Jywna2V5J11gIG9yIGBbJ25zJywnc2V0JywnZGlnZXN0J11gCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW4gVGhlIG5hbWUgb2YgdGhlIGJpbiB0byBpbmNyZW1lbnQKICAgICAqIEBwYXJhbSBpbnR8ZmxvYXQgJG9mZnNldCBUaGUgdmFsdWUgYnkgd2hpY2ggdG8gaW5jcmVtZW50IHRoZSBiaW4KICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiB3cml0ZSBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVFRMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTgogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX01BWF9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RUTCBBZXJvc3Bpa2U6Ok9QVF9UVEwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPSyBBZXJvc3Bpa2U6Ok9LIGFuZCBlcnJvciBzdGF0dXMgY29kZXMKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluY3JlbWVudChhcnJheSAka2V5LCAkYmluLCAkb2Zmc2V0LCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogQXBwZW5kIGEgc3RyaW5nICR2YWx1ZSB0byB0aGUgb25lIGFscmVhZHkgaW4gJGJpbiwgaW4gdGhlIHJlY29yZCBpZGVudGlmaWVkIGJ5IHRoZSAka2V5LgogICAgICoKICAgICAqIGBgYHBocAogICAgICogJGtleSA9ICRjbGllbnQtPmluaXRLZXkoInRlc3QiLCAidXNlcnMiLCAxMjM0KTsKICAgICAqICRvcHRpb25zID0gW0Flcm9zcGlrZTo6T1BUX1RUTCA9PiAzNjAwXTsKICAgICAqICRzdGF0dXMgPSAkY2xpZW50LT5hcHBlbmQoJGtleSwgJ25hbWUnLCAnIFBoLkQuJywgJG9wdGlvbnMpOwogICAgICogaWYgKCRzdGF0dXMgPT0gQWVyb3NwaWtlOjpPSykgewogICAgICogICAgIGVjaG8gIkFkZGVkIHRoZSBQaC5ELiBzdWZmaXggdG8gdGhlIHVzZXIuXG4iOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogQHBhcmFtIGFycmF5ICRrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgcmVjb3JkLiBBbiBhcnJheSB3aXRoIGtleXMgYFsnbnMnLCdzZXQnLCdrZXknXWAgb3IgYFsnbnMnLCdzZXQnLCdkaWdlc3QnXWAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbiBUaGUgbmFtZSBvZiB0aGUgYmluCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBUaGUgc3RyaW5nIHZhbHVlIHRvIGFwcGVuZCB0byB0aGUgYmluCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2Ygd3JpdGUgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RUTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4KICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9ERVNFUklBTElaRQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9NQVhfUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVAogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UVEwgQWVyb3NwaWtlOjpPUFRfVFRMIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfREVTRVJJQUxJWkUgQWVyb3NwaWtlOjpPUFRfREVTRVJJQUxJWkUgb3B0aW9uCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T0sgQWVyb3NwaWtlOjpPSyBhbmQgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoYXJyYXkgJGtleSwgJGJpbiwgJHZhbHVlLCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogUHJlcGVuZCBhIHN0cmluZyAkdmFsdWUgdG8gdGhlIG9uZSBhbHJlYWR5IGluICRiaW4sIGluIHRoZSByZWNvcmQgaWRlbnRpZmllZCBieSB0aGUgJGtleS4KICAgICAqCiAgICAgKiBgYGBwaHAKICAgICAqICRrZXkgPSAkY2xpZW50LT5pbml0S2V5KCJ0ZXN0IiwgInVzZXJzIiwgMTIzNCk7CiAgICAgKiAkb3B0aW9ucyA9IFtBZXJvc3Bpa2U6Ok9QVF9UVEwgPT4gMzYwMF07CiAgICAgKiAkc3RhdHVzID0gJGNsaWVudC0+cHJlcGVuZCgka2V5LCAnbmFtZScsICcqJywgJG9wdGlvbnMpOwogICAgICogaWYgKCRzdGF0dXMgPT0gQWVyb3NwaWtlOjpPSykgewogICAgICogICAgIGVjaG8gIlN0YXJyZWQgdGhlIHVzZXIuXG4iOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogQHBhcmFtIGFycmF5ICRrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgcmVjb3JkLiBBbiBhcnJheSB3aXRoIGtleXMgYFsnbnMnLCdzZXQnLCdrZXknXWAgb3IgYFsnbnMnLCdzZXQnLCdkaWdlc3QnXWAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbiBUaGUgbmFtZSBvZiB0aGUgYmluCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBUaGUgc3RyaW5nIHZhbHVlIHRvIHByZXBlbmQgdG8gdGhlIGJpbgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIGFuIG9wdGlvbmFsIGFycmF5IG9mIHdyaXRlIHBvbGljeSBvcHRpb25zLCB3aG9zZSBrZXlzIGluY2x1ZGUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UVEwKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwKICAgICAqICogQWVyb3NwaWtlOjpPUFRfREVTRVJJQUxJWkUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfVFRMIEFlcm9zcGlrZTo6T1BUX1RUTCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTiBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX0RFU0VSSUFMSVpFIEFlcm9zcGlrZTo6T1BUX0RFU0VSSUFMSVpFIG9wdGlvbgogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9LIEFlcm9zcGlrZTo6T0sgYW5kIGVycm9yIHN0YXR1cyBjb2RlcwogICAgICogQHJldHVybiBpbnQgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBvcGVyYXRpb24uIENvbXBhcmUgdG8gdGhlIEFlcm9zcGlrZSBjbGFzcyBzdGF0dXMgY29uc3RhbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJlcGVuZChhcnJheSAka2V5LCAkYmluLCAkdmFsdWUsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiAgUGVyZm9ybSBtdWx0aXBsZSBiaW4gb3BlcmF0aW9ucyBvbiBhIHJlY29yZCB3aXRoIGEgZ2l2ZW4ga2V5LCB3aXRoIHdyaXRlIG9wZXJhdGlvbnMgaGFwcGVuaW5nIGJlZm9yZSByZWFkIG9uZXMuCiAgICAgKgogICAgICogIE5vbi1leGlzdGVudCBiaW5zIGJlaW5nIHJlYWQgd2lsbCBoYXZlIGEgYE5VTExgIHZhbHVlLgogICAgICoKICAgICAqIEN1cnJlbnRseSBhIGNhbGwgdG8gb3BlcmF0ZSgpIGNhbiBpbmNsdWRlIG9ubHkgb25lIHdyaXRlIG9wZXJhdGlvbiBwZXItYmluLgogICAgICogRm9yIGV4YW1wbGUsIHlvdSBjYW5ub3QgYm90aCBhcHBlbmQgYW5kIHByZXBlbmQgdG8gdGhlIHNhbWUgYmluLCBpbiB0aGUgc2FtZSBjYWxsLgogICAgICoKICAgICAqIExpa2Ugb3RoZXIgYmluIG9wZXJhdGlvbnMsIG9wZXJhdGUoKSBvbmx5IHdvcmtzIG9uIGV4aXN0aW5nIHJlY29yZHMgKGkuZS4gb25lcyB0aGF0IHdlcmUgcHJldmlvdXNseSBjcmVhdGVkIHdpdGggYSBwdXQoKSkuCiAgICAgKgogICAgICogKipFeGFtcGxlICMxIENvbWJpbmluZyBzZXZlcmFsIHdyaXRlIG9wZXJhdGlvbnMgaW50byBvbmUgbXVsdGktb3AgY2FsbCoqCiAgICAgKgogICAgICogYGBgCiAgICAgKiBbCiAgICAgKiAgIFsib3AiID0+IEFlcm9zcGlrZTo6T1BFUkFUT1JfQVBQRU5ELCAiYmluIiA9PiAibmFtZSIsICJ2YWwiID0+ICIgUGguRC4iXSwKICAgICAqICAgWyJvcCIgPT4gQWVyb3NwaWtlOjpPUEVSQVRPUl9JTkNSLCAiYmluIiA9PiAiYWdlIiwgInZhbCIgPT4gMV0sCiAgICAgKiAgIFsib3AiID0+IEFlcm9zcGlrZTo6T1BFUkFUT1JfUkVBRCwgImJpbiIgPT4gImFnZSJdCiAgICAgKiBdCiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBgYGBwaHAKICAgICAqICRjb25maWcgPSBbImhvc3RzIiA9PiBbWyJhZGRyIj0+ImxvY2FsaG9zdCIsICJwb3J0Ij0+MzAwMF1dLCAic2htIj0+W11dOwogICAgICogJGNsaWVudCA9IG5ldyBBZXJvc3Bpa2UoJGNvbmZpZywgdHJ1ZSk7CiAgICAgKiBpZiAoISRjbGllbnQtPmlzQ29ubmVjdGVkKCkpIHsKICAgICAqICAgIGVjaG8gIkFlcm9zcGlrZSBmYWlsZWQgdG8gY29ubmVjdFt7JGNsaWVudC0+ZXJyb3JubygpfV06IHskY2xpZW50LT5lcnJvcigpfVxuIjsKICAgICAqICAgIGV4aXQoMSk7CiAgICAgKiB9CiAgICAgKgogICAgICogJGtleSA9ICRjbGllbnQtPmluaXRLZXkoInRlc3QiLCAidXNlcnMiLCAxMjM0KTsKICAgICAqICRvcGVyYXRpb25zID0gWwogICAgICogICBbIm9wIiA9PiBBZXJvc3Bpa2U6Ok9QRVJBVE9SX0FQUEVORCwgImJpbiIgPT4gIm5hbWUiLCAidmFsIiA9PiAiIFBoLkQuIl0sCiAgICAgKiAgIFsib3AiID0+IEFlcm9zcGlrZTo6T1BFUkFUT1JfSU5DUiwgImJpbiIgPT4gImFnZSIsICJ2YWwiID0+IDFdLAogICAgICogICBbIm9wIiA9PiBBZXJvc3Bpa2U6Ok9QRVJBVE9SX1JFQUQsICJiaW4iID0+ICJhZ2UiXSwKICAgICAqIF07CiAgICAgKiAkb3B0aW9ucyA9IFtBZXJvc3Bpa2U6Ok9QVF9UVEwgPT4gNjAwXTsKICAgICAqICRzdGF0dXMgPSAkY2xpZW50LT5vcGVyYXRlKCRrZXksICRvcGVyYXRpb25zLCAkcmV0dXJuZWQsICRvcHRpb25zKTsKICAgICAqIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICB2YXJfZHVtcCgkcmV0dXJuZWQpOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBhcnJheSgxKSB7CiAgICAgKiAgIFsiYWdlIl09PgogICAgICogICBpbnQoMzQpCiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqCiAgICAgKiAqKkV4YW1wbGUgIzIgSW1wbGVtZW50aW5nIGFuIExSVSBieSByZWFkaW5nIGEgYmluIGFuZCB0b3VjaGluZyBhIHJlY29yZCBpbiB0aGUgc2FtZSBvcGVyYXRpb24qKgogICAgICoKICAgICAqIGBgYAogICAgICogWwogICAgICogICBbIm9wIiA9PiBBZXJvc3Bpa2U6Ok9QRVJBVE9SX1JFQUQsICJiaW4iID0+ICJhZ2UiXSwKICAgICAqICAgWyJvcCIgPT4gQWVyb3NwaWtlOjpPUEVSQVRPUl9UT1VDSCwgInR0bCIgPT4gMjBdCiAgICAgKiBdCiAgICAgKiBgYGAKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9rdnMuaHRtbCBLZXktVmFsdWUgU3RvcmUKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hZXJvc3Bpa2UvYWVyb3NwaWtlLWNsaWVudC1waHAvYmxvYi9tYXN0ZXIvZG9jL1JFQURNRS5tZCNoYW5kbGluZy11bnN1cHBvcnRlZC10eXBlcyBIYW5kbGluZyBVbnN1cHBvcnRlZCBUeXBlcwogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2NsaWVudC9jL3VzYWdlL2t2cy93cml0ZS5odG1sI2NoYW5nZS1yZWNvcmQtdGltZS10by1saXZlLXR0bCBUaW1lLXRvLWxpdmUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9nbG9zc2FyeS5odG1sIEdsb3NzYXJ5CiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleSBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSByZWNvcmQuIEFuIGFycmF5IHdpdGgga2V5cyBgWyducycsJ3NldCcsJ2tleSddYCBvciBgWyducycsJ3NldCcsJ2RpZ2VzdCddYAogICAgICogQHBhcmFtIGFycmF5ICRvcGVyYXRpb25zIFRoZSBhcnJheSBvZiBvZiBvbmUgb3IgbW9yZSBwZXItYmluIG9wZXJhdGlvbnMgY29uZm9ybWluZyB0byB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKICAgICAqIGBgYAogICAgICogV3JpdGUgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QRVJBVE9SX1dSSVRFCiAgICAgKiAgIGJpbiA9PiBiaW4gbmFtZSAoY2Fubm90IGJlIGxvbmdlciB0aGFuIDE0IGNoYXJhY3RlcnMpCiAgICAgKiAgIHZhbCA9PiB0aGUgdmFsdWUgdG8gc3RvcmUgaW4gdGhlIGJpbgogICAgICoKICAgICAqIEluY3JlbWVudCBPcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BFUkFUT1JfSU5DUgogICAgICogICBiaW4gPT4gYmluIG5hbWUKICAgICAqICAgdmFsID0+IHRoZSBpbnRlZ2VyIGJ5IHdoaWNoIHRvIGluY3JlbWVudCB0aGUgdmFsdWUgaW4gdGhlIGJpbgogICAgICoKICAgICAqIFByZXBlbmQgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QRVJBVE9SX1BSRVBFTkQKICAgICAqICAgYmluID0+IGJpbiBuYW1lCiAgICAgKiAgIHZhbCA9PiB0aGUgc3RyaW5nIHRvIHByZXBlbmQgdGhlIHN0cmluZyB2YWx1ZSBpbiB0aGUgYmluCiAgICAgKgogICAgICogQXBwZW5kIE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUEVSQVRPUl9BUFBFTkQKICAgICAqICAgYmluID0+IGJpbiBuYW1lCiAgICAgKiAgIHZhbCA9PiB0aGUgc3RyaW5nIHRvIGFwcGVuZCB0aGUgc3RyaW5nIHZhbHVlIGluIHRoZSBiaW4KICAgICAqCiAgICAgKiBSZWFkIE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUEVSQVRPUl9SRUFECiAgICAgKiAgIGJpbiA9PiBuYW1lIG9mIHRoZSBiaW4gd2Ugd2FudCB0byByZWFkIGFmdGVyIGFueSB3cml0ZSBvcGVyYXRpb25zCiAgICAgKgogICAgICogVG91Y2ggT3BlcmF0aW9uOiByZXNldCB0aGUgdGltZS10by1saXZlIG9mIHRoZSByZWNvcmQgYW5kIGluY3JlbWVudCBpdHMgZ2VuZXJhdGlvbgogICAgICogICAgICAgICAgICAgICAgICAob25seSBjb21iaW5lcyB3aXRoIHJlYWQgb3BlcmF0aW9ucykKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUEVSQVRPUl9UT1VDSAogICAgICogICB0dGwgPT4gYSBwb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIHRvIHNldCBhcyB0aW1lLXRvLWxpdmUgZm9yIHRoZSByZWNvcmQKICAgICAqCiAgICAgKiBEZWxldGUgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QRVJBVE9SX0RFTEVURQogICAgICoKICAgICAqIExpc3QgQXBwZW5kIE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9MSVNUX0FQUEVORCwKICAgICAqICAgYmluID0+ICAiZXZlbnRzIiwKICAgICAqICAgdmFsID0+ICAxMjM0CiAgICAgKgogICAgICogTGlzdCBNZXJnZSBPcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BfTElTVF9NRVJHRSwKICAgICAqICAgYmluID0+ICAiZXZlbnRzIiwKICAgICAqICAgdmFsID0+ICBbIDEyMywgNDU2IF0KICAgICAqCiAgICAgKiBMaXN0IEluc2VydCBPcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BfTElTVF9JTlNFUlQsCiAgICAgKiAgIGJpbiA9PiAgImV2ZW50cyIsCiAgICAgKiAgIGluZGV4ID0+ICAyLAogICAgICogICB2YWwgPT4gIDEyMzQKICAgICAqCiAgICAgKiBMaXN0IEluc2VydCBJdGVtcyBPcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BfTElTVF9JTlNFUlRfSVRFTVMsCiAgICAgKiAgIGJpbiA9PiAgImV2ZW50cyIsCiAgICAgKiAgIGluZGV4ID0+ICAyLAogICAgICogICB2YWwgPT4gIFsgMTIzLCA0NTYgXQogICAgICoKICAgICAqIExpc3QgUG9wIE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9MSVNUX1BPUCwgIyByZXR1cm5zIGEgdmFsdWUKICAgICAqICAgYmluID0+ICAiZXZlbnRzIiwKICAgICAqICAgaW5kZXggPT4gIDIKICAgICAqCiAgICAgKiBMaXN0IFBvcCBSYW5nZSBPcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BfTElTVF9QT1BfUkFOR0UsICMgcmV0dXJucyBhIHZhbHVlCiAgICAgKiAgIGJpbiA9PiAgImV2ZW50cyIsCiAgICAgKiAgIGluZGV4ID0+ICAyLAogICAgICogICB2YWwgPT4gIDMgIyByZW1vdmUgMyBlbGVtZW50cyBzdGFydGluZyBhdCBpbmRleCAyCiAgICAgKgogICAgICogTGlzdCBSZW1vdmUgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QX0xJU1RfUkVNT1ZFLAogICAgICogICBiaW4gPT4gICJldmVudHMiLAogICAgICogICBpbmRleCA9PiAgMgogICAgICoKICAgICAqIExpc3QgUmVtb3ZlIFJhbmdlIE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9MSVNUX1JFTU9WRV9SQU5HRSwKICAgICAqICAgYmluID0+ICAiZXZlbnRzIiwKICAgICAqICAgaW5kZXggPT4gIDIsCiAgICAgKiAgIHZhbCA9PiAgMyAjIHJlbW92ZSAzIGVsZW1lbnRzIHN0YXJ0aW5nIGF0IGluZGV4IDIKICAgICAqCiAgICAgKiBMaXN0IENsZWFyIE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9MSVNUX0NMRUFSLAogICAgICogICBiaW4gPT4gICJldmVudHMiCiAgICAgKgogICAgICogTGlzdCBTZXQgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QX0xJU1RfU0VULAogICAgICogICBiaW4gPT4gICJldmVudHMiLAogICAgICogICBpbmRleCA9PiAgMiwKICAgICAqICAgdmFsID0+ICAibGF0ZXN0IGV2ZW50IGF0IGluZGV4IDIiICMgc2V0IHRoaXMgdmFsdWUgYXQgaW5kZXggMgogICAgICoKICAgICAqIExpc3QgR2V0IE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9MSVNUX0dFVCwgIyByZXR1cm5zIGEgdmFsdWUKICAgICAqICAgYmluID0+ICAiZXZlbnRzIiwKICAgICAqICAgaW5kZXggPT4gIDIgIyBzaW1pbGFyIHRvIEFlcm9zcGlrZTo6T1BFUkFUT1JfUkVBRCBidXQgb25seSByZXR1cm5zIHRoZSB2YWx1ZQogICAgICogICAgICAgICAgICAgICAgIGF0IGluZGV4IDIgb2YgdGhlIGxpc3QsIG5vdCB0aGUgd2hvbGUgYmluCiAgICAgKgogICAgICogTGlzdCBHZXQgUmFuZ2UgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QX0xJU1RfR0VUX1JBTkdFLCAjIHJldHVybnMgYSB2YWx1ZQogICAgICogICBiaW4gPT4gICJldmVudHMiLAogICAgICogICBpbmRleCA9PiAgMiwKICAgICAqICAgdmFsID0+ICAzICMgZ2V0IDMgZWxlbWVudHMgc3RhcnRpbmcgYXQgaW5kZXggMgogICAgICoKICAgICAqIExpc3QgVHJpbSBPcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BfTElTVF9UUklNLAogICAgICogICBiaW4gPT4gICJldmVudHMiLAogICAgICogICBpbmRleCA9PiAgMiwKICAgICAqICAgdmFsID0+ICAzICMgcmVtb3ZlIGFsbCBlbGVtZW50cyBub3QgaW4gdGhlIHJhbmdlIGJldHdlZW4gaW5kZXggMiBhbmQgaW5kZXggMiArIDMKICAgICAqCiAgICAgKiBMaXN0IFNpemUgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QX0xJU1RfU0laRSwgIyByZXR1cm5zIGEgdmFsdWUKICAgICAqICAgYmluID0+ICAiZXZlbnRzIiAjIGdldHMgdGhlIHNpemUgb2YgYSBsaXN0IGNvbnRhaW5lZCBpbiB0aGUgYmluCiAgICAgKgogICAgICoKICAgICAqIE1hcCBvcGVyYXRpb25zCiAgICAgKgogICAgICogTWFwIFBvbGljaWVzOgogICAgICogTWFueSBvZiB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgcmVxdWlyZSBhIG1hcCBwb2xpY3ksIHRoZSBwb2xpY3kgaXMgYW4gYXJyYXkKICAgICAqIGNvbnRhaW5pbmcgYW55IG9mIHRoZSBrZXlzIEFFUk9TUElLRTo6T1BUX01BUF9PUkRFUiwgQUVST1NQSUtFOjpPUFRfTUFQX1dSSVRFX01PREUKICAgICAqCiAgICAgKiB0aGUgdmFsdWUgZm9yIEFFUk9TUElLRTo6T1BUX01BUF9PUkRFUiBzaG91bGQgYmUgb25lIG9mIEFFUk9TUElLRTo6QVNfTUFQX1VOT1JERVJFRCAsIEFFUk9TUElLRTo6QVNfTUFQX0tFWV9PUkRFUkVEICwgQUVST1NQSUtFOjpBU19NQVBfS0VZX1ZBTFVFX09SREVSRUQKICAgICAqIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGN1cnJlbnRseSBBRVJPU1BJS0U6OkFTX01BUF9VTk9SREVSRUQKICAgICAqCiAgICAgKiB0aGUgdmFsdWUgZm9yIEFFUk9TUElLRTo6T1BUX01BUF9XUklURV9NT0RFIHNob3VsZCBiZSBvbmUgb2Y6IEFFUk9TUElLRTo6QVNfTUFQX1VQREFURSwgQUVST1NQSUtFOjpBU19NQVBfVVBEQVRFX09OTFkgLCBBRVJPU1BJS0U6OkFTX01BUF9DUkVBVEVfT05MWQogICAgICogdGhlIGRlZmF1bHQgdmFsdWUgaXMgY3VycmVudGx5IEFFUk9TUElLRTo6QVNfTUFQX1VQREFURQogICAgICoKICAgICAqIHRoZSB2YWx1ZSBmb3IgQUVST1NQSUtFOjpPUFRfTUFQX1dSSVRFX0ZMQUdTIHNob3VsZCBiZSBvbmUgb2Y6IEFFUk9TUElLRTo6QVNfTUFQX1dSSVRFX0RFRkFVTFQsIEFFUk9TUElLRTo6QVNfTUFQX1dSSVRFX0NSRUFURV9PTkxZLCBBRVJPU1BJS0U6OkFTX01BUF9XUklURV9VUERBVEVfT05MWSwgQUVST1NQSUtFOjpBU19NQVBfV1JJVEVfTk9fRkFJTCwgQUVST1NQSUtFOjpBU19NQVBfV1JJVEVfUEFSVElBTAogICAgICogdGhlIGRlZmF1bHQgdmFsdWUgaXMgY3VycmVudGx5IEFFUk9TUElLRTo6QVNfTUFQX1dSSVRFX0RFRkFVTFQKICAgICAqCiAgICAgKiBNYXAgcmV0dXJuIHR5cGVzOgogICAgICogbWFueSBvZiB0aGUgbWFwIG9wZXJhdGlvbnMgcmVxdWlyZSBhIHJldHVybl90eXBlIGVudHJ5LgogICAgICogdGhpcyBzcGVjaWZpZXMgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgcmVzcG9uc2Ugc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgb3B0aW9ucyBhcmU6CiAgICAgKiBBRVJPU1BJS0U6OkFTX01BUF9SRVRVUk5fTk9ORSAjIERvIG5vdCByZXR1cm4gYSByZXN1bHQuCiAgICAgKiBBRVJPU1BJS0U6OkFTX01BUF9SRVRVUk5fSU5ERVggIyBSZXR1cm4ga2V5IGluZGV4IG9yZGVyLgogICAgICogQUVST1NQSUtFOjpBU19NQVBfUkVUVVJOX1JFVkVSU0VfSU5ERVggIyBSZXR1cm4gcmV2ZXJzZSBrZXkgb3JkZXIuCiAgICAgKiBBRVJPU1BJS0U6OkFTX01BUF9SRVRVUk5fUkFOSyAjIFJldHVybiB2YWx1ZSBvcmRlci4KICAgICAqIEFFUk9TUElLRTo6QVNfTUFQX1JFVFVSTl9SRVZFUlNFX1JBTksgIyBSZXR1cm4gcmVzZXJ2ZSB2YWx1ZSBvcmRlci4KICAgICAqIEFFUk9TUElLRTo6QVNfTUFQX1JFVFVSTl9DT1VOVCAjIFJldHVybiBjb3VudCBvZiBpdGVtcyBzZWxlY3RlZC4KICAgICAqIEFFUk9TUElLRTo6QVNfTUFQX1JFVFVSTl9LRVkgIyBSZXR1cm4ga2V5IGZvciBzaW5nbGUga2V5IHJlYWQgYW5kIGtleSBsaXN0IGZvciByYW5nZSByZWFkLgogICAgICogQUVST1NQSUtFOjpBU19NQVBfUkVUVVJOX1ZBTFVFICMgUmV0dXJuIHZhbHVlIGZvciBzaW5nbGUga2V5IHJlYWQgYW5kIHZhbHVlIGxpc3QgZm9yIHJhbmdlIHJlYWQuCiAgICAgKiBBRVJPU1BJS0U6OkFTX01BUF9SRVRVUk5fS0VZX1ZBTFVFICMgUmV0dXJuIGtleS92YWx1ZSBpdGVtcy4gV2lsbCBiZSBvZiB0aGUgZm9ybSBbJ2tleTEnLCAndmFsMScsICdrZXkyJywgJ3ZhbDInLCAna2V5MycsICd2YWwzXQogICAgICoKICAgICAqIE1hcCBwb2xpY3kgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QX01BUF9TRVRfUE9MSUNZLAogICAgICogICBiaW4gPT4gICJtYXAiLAogICAgICogICBtYXBfcG9saWN5ID0+ICBbIEFFUk9TUElLRTo6T1BUX01BUF9PUkRFUiA9PiBBRVJPU1BJS0U6OkFTX01BUF9LRVlfT1JERVJFRF0KICAgICAqCiAgICAgKiBNYXAgY2xlYXIgb3BlcmF0aW9uOiAoUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIGEgbWFwKQogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9DTEVBUiwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIKICAgICAqCiAgICAgKgogICAgICogTWFwIFNpemUgT3BlcmF0aW9uOiBSZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIG1hcAogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9TSVpFLAogICAgICogICBiaW4gPT4gImJpbl9uYW1lIgogICAgICoKICAgICAqIE1hcCBHZXQgYnkgS2V5IG9wZXJhdGlvbgogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9HRVRfQllfS0VZICwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIGtleSA9PiAibXlfa2V5IiwKICAgICAqICAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCBHZXQgQnkgS2V5IFJhbmdlIG9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfR0VUX0JZX0tFWV9SQU5HRSAsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICBrZXkgPT4gImFhYSIsCiAgICAgKiAgIHJhbmdlX2VuZCA9PiAiYmJiIgogICAgICogICByZXR1cm5fdHlwZSA9PiBBRVJPU1BJS0U6Ok1BUF9SRVRVUk5fS0VZX1ZBTFVFCiAgICAgKgogICAgICogTWFwIEdldCBCeSBWYWx1ZSBvcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX0dFVF9CWV9WQUxVRSAsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICB2YWx1ZSA9PiAibXlfdmFsIgogICAgICogICByZXR1cm5fdHlwZSA9PiBBRVJPU1BJS0U6Ok1BUF9SRVRVUk5fS0VZX1ZBTFVFCiAgICAgKgogICAgICogTWFwIEdldCBieSBWYWx1ZSBSYW5nZSBvcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX0dFVF9CWV9WQUxVRV9SQU5HRSAsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICB2YWx1ZSA9PiAidmFsdWVfYSIsCiAgICAgKiAgIHJhbmdlX2VuZCA9PiAidmFsdWVfeiIsCiAgICAgKiAgIHJldHVybl90eXBlID0+IEFFUk9TUElLRTo6TUFQX1JFVFVSTl9LRVlfVkFMVUUKICAgICAqCiAgICAgKiBNYXAgR2V0IEJ5IEluZGV4IG9wZXJhdGlvbgogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9HRVRfQllfSU5ERVggLAogICAgICogICBiaW4gPT4gImJpbl9uYW1lIiwKICAgICAqICAgaW5kZXggPT4gMiwKICAgICAqICAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCBHZXQgYnkgSW5kZXggUmFuZ2Ugb3BlcmF0aW9uCiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX0dFVF9CWV9JTkRFWF9SQU5HRSwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIGluZGV4ID0+IDIsCiAgICAgKiAgIGNvdW50ID0+IDIsCiAgICAgKiAgIHJldHVybl90eXBlID0+IEFFUk9TUElLRTo6TUFQX1JFVFVSTl9LRVlfVkFMVUUKICAgICAqCiAgICAgKiBNYXAgR2V0IEJ5IFJhbmsgb3BlcmF0aW9uCiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX0dFVF9CWV9SQU5LICwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIHJhbmsgPT4gLTEsICMgZ2V0IHRoZSBpdGVtIHdpdGggdGhlIGxhcmdlc3QgdmFsdWUKICAgICAqICAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCBHZXQgYnkgUmFuayBSYW5nZSBvcGVyYXRpb24KICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfR0VUX0JZX1JBTktfUkFOR0UgLAogICAgICogICByYW5rID0+IC0yICwKICAgICAqICAgY291bnQgPT4gMiAsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICByZXR1cm5fdHlwZSA9PiBBRVJPU1BJS0U6Ok1BUF9SRVRVUk5fS0VZX1ZBTFVFCiAgICAgKgogICAgICogTWFwIFB1dCBvcGVyYXRpb24KICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfUFVUICwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIGtleSA9PiAiYWVybyIsCiAgICAgKiAgIHZhbCA9PiAic3Bpa2UiLAogICAgICogICBtYXBfcG9saWN5ID0+IFsgQUVST1NQSUtFOjpPUFRfTUFQX09SREVSID0+IEFFUk9TUElLRTo6QVNfTUFQX0tFWV9PUkRFUkVEXQogICAgICoKICAgICAqIE1hcCBQdXQgSXRlbXMgb3BlcmF0aW9ucwogICAgICogIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX1BVVF9JVEVNUyAsCiAgICAgKiAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgdmFsID0+IFsxLCAiYSIsIDEuNV0sCiAgICAgKiAgbWFwX3BvbGljeSA9PiBbIEFFUk9TUElLRTo6T1BUX01BUF9PUkRFUiA9PiBBRVJPU1BJS0U6OkFTX01BUF9LRVlfT1JERVJFRF0KICAgICAqCiAgICAgKiBNYXAgSW5jcmVtZW50IG9wZXJhdGlvbgogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9JTkNSRU1FTlQgLAogICAgICogICBiaW4gPT4gImJpbl9uYW1lIiwKICAgICAqICAgdmFsID0+IDUsICNpbmNyZW1lbnQgdGhlIHZhbHVlIGJ5IDUKICAgICAqICAga2V5ID0+ICJrZXlfdG9faW5jcmVtZW50IiwKICAgICAqICAgbWFwX3BvbGljeSA9PiBbIEFFUk9TUElLRTo6T1BUX01BUF9PUkRFUiA9PiBBRVJPU1BJS0U6OkFTX01BUF9LRVlfT1JERVJFRF0KICAgICAqCiAgICAgKiBNYXAgRGVjcmVtZW50IG9wZXJhdGlvbgogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9ERUNSRU1FTlQgLAogICAgICogICBiaW4gPT4gImJpbl9uYW1lIiwKICAgICAqICAga2V5ID0+ICJrZXlfdG9fZGVjcmVtZW50IiwKICAgICAqICAgdmFsID0+IDUsICNkZWNyZW1lbnQgYnkgNQogICAgICogICBtYXBfcG9saWN5ID0+IFsgQUVST1NQSUtFOjpPUFRfTUFQX09SREVSID0+IEFFUk9TUElLRTo6QVNfTUFQX0tFWV9PUkRFUkVEXQogICAgICoKICAgICAqIE1hcCBSZW1vdmUgYnkgS2V5IG9wZXJhdGlvbgogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9SRU1PVkVfQllfS0VZICwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIGtleSA9PiAia2V5X3RvX3JlbW92ZSIsCiAgICAgKiAgIHJldHVybl90eXBlID0+IEFFUk9TUElLRTo6TUFQX1JFVFVSTl9LRVlfVkFMVUUKICAgICAqCiAgICAgKiBNYXAgUmVtb3ZlIGJ5IEtleSBsaXN0IG9wZXJhdGlvbgogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9SRU1PVkVfQllfS0VZX0xJU1QgLAogICAgICogICBiaW4gPT4gImJpbl9uYW1lIiwKICAgICAqICAga2V5ID0+IFsia2V5MSIsIDIsICJrZXkzIl0sCiAgICAgKiAgIHJldHVybl90eXBlID0+IEFFUk9TUElLRTo6TUFQX1JFVFVSTl9LRVlfVkFMVUUKICAgICAqCiAgICAgKiBNYXAgcmVtb3ZlIGJ5IEtleSBSYW5nZSBvcGVyYXRpb24KICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfUkVNT1ZFX0JZX0tFWV9SQU5HRSAsCiAgICAgKiAgIGJpbiA9PiAiYmluIiwKICAgICAqICAga2V5ID0+ICJhIiwKICAgICAqICAgcmFuZ2VfZW5kID0+ICJkIiwKICAgICAqICAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCByZW1vdmUgYnkgVmFsdWUgb3BlcmF0aW9uCiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX1JFTU9WRV9CWV9WQUxVRSAsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICB2YWwgPT4gNSwKICAgICAqICAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCByZW1vdmUgYnkgdmFsdWUgcmFuZ2Ugb3BlcmF0aW9uCiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX1JFTU9WRV9CWV9WQUxVRV9SQU5HRSAsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICB2YWwgPT4gImEiLAogICAgICogICByYW5nZV9lbmQgPT4gImQiCiAgICAgKiAgIHJldHVybl90eXBlID0+IEFFUk9TUElLRTo6TUFQX1JFVFVSTl9LRVlfVkFMVUUKICAgICAqCiAgICAgKiBNYXAgcmVtb3ZlIGJ5IHZhbHVlIGxpc3Qgb3BlcmF0aW9uCiAgICAgKiAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfUkVNT1ZFX0JZX1ZBTFVFX0xJU1QgLAogICAgICogIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogIHZhbCA9PiBbMSwgMiwgMywgNF0sCiAgICAgKiAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCBSZW1vdmUgYnkgSW5kZXggb3BlcmF0aW9uCiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX1JFTU9WRV9CWV9JTkRFWCAsCiAgICAgKiAgIGluZGV4ID0+IDIsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICByZXR1cm5fdHlwZSA9PiBBRVJPU1BJS0U6Ok1BUF9SRVRVUk5fS0VZX1ZBTFVFCiAgICAgKgogICAgICogTWFwIFJlbW92ZSBCeSBJbmRleCBSYW5nZSBvcGVyYXRpb24KICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfUkVNT1ZFX0JZX0lOREVYX1JBTkdFICwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIGluZGV4ID0+IDMgLAogICAgICogICBjb3VudCA9PiAzICwKICAgICAqICAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCBSZW1vdmUgYnkgUmFuayBvcGVyYXRpb24KICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfUkVNT1ZFX0JZX1JBTksgLAogICAgICogICByYW5rID0+IC0xICwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIHJldHVybl90eXBlID0+IEFFUk9TUElLRTo6TUFQX1JFVFVSTl9LRVlfVkFMVUUKICAgICAqCiAgICAgKiBNYXAgcmVtb3ZlIGJ5IHJhbmsgcmFuZ2UKICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfUkVNT1ZFX0JZX1JBTktfUkFOR0UsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICByYW5rID0+IC0xLAogICAgICogICBjb3VudCA9PiByZXR1cm5fdHlwZSA9PiBBRVJPU1BJS0U6Ok1BUF9SRVRVUk5fS0VZX1ZBTFVFCiAgICAgKgogICAgICoKICAgICAqCiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJiRyZXR1cm5lZCBhIHBhc3MtYnktcmVmZXJlbmNlIGFycmF5IG9mIGJpbnMgcmV0cmlldmVkIGJ5IHJlYWQgb3BlcmF0aW9ucy4gSWYgbXVsdGlwbGUgb3BlcmF0aW9ucyBleGlzdCBmb3IgYSBzcGVjaWZpYyBiaW4gbmFtZSwgdGhlIGxhc3Qgb3BlcmF0aW9uIHdpbGwgYmUgdGhlIG9uZSBwbGFjZWQgYXMgdGhlIHZhbHVlCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RUTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4KICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVQTElDQQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX0FQCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfU0MKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0RVUkFCTEVfREVMRVRFCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX0RFU0VSSUFMSVpFCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX01BWF9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RUTCBBZXJvc3Bpa2U6Ok9QVF9UVEwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVQTElDQSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVQTElDQSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfQVAgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9BUCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfU0MgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9TQyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfRFVSQUJMRV9ERUxFVEUgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9ERVNFUklBTElaRSBBZXJvc3Bpa2U6Ok9QVF9ERVNFUklBTElaRSBvcHRpb24KICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPSyBBZXJvc3Bpa2U6Ok9LIGFuZCBlcnJvciBzdGF0dXMgY29kZXMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcigpIGVycm9yKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcm5vKCkgZXJyb3JubygpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BFUkFUT1JfV1JJVEUgQWVyb3NwaWtlOjpPUEVSQVRPUl9XUklURSBhbmQgb3RoZXIgb3BlcmF0b3JzCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcGVyYXRlKGFycmF5ICRrZXksIGFycmF5ICRvcGVyYXRpb25zLCAmJHJldHVybmVkLCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogIFBlcmZvcm0gbXVsdGlwbGUgYmluIG9wZXJhdGlvbnMgb24gYSByZWNvcmQgd2l0aCBhIGdpdmVuIGtleSwgd2l0aCB3cml0ZSBvcGVyYXRpb25zIGhhcHBlbmluZyBiZWZvcmUgcmVhZCBvbmVzLgogICAgICogIFRoZSBvcmRlciBvZiB0aGUgcmVzdWx0aW5nIGVsZW1lbnRzIHdpbGwgY29ycmVzcG9uZCB0byB0aGUgb3JkZXIgb2YgdGhlIG9wZXJhdGlvbnMgaW4gdGhlIHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogIE5vbi1leGlzdGVudCBiaW5zIGJlaW5nIHJlYWQgd2lsbCBoYXZlIGEgYE5VTExgIHZhbHVlLgogICAgICoKICAgICAqIEN1cnJlbnRseSBhIGNhbGwgdG8gb3BlcmF0ZU9yZGVyZWQoKSBjYW4gaW5jbHVkZSBvbmx5IG9uZSB3cml0ZSBvcGVyYXRpb24gcGVyLWJpbi4KICAgICAqIEZvciBleGFtcGxlLCB5b3UgY2Fubm90IGJvdGggYXBwZW5kIGFuZCBwcmVwZW5kIHRvIHRoZSBzYW1lIGJpbiwgaW4gdGhlIHNhbWUgY2FsbC4KICAgICAqCiAgICAgKiBMaWtlIG90aGVyIGJpbiBvcGVyYXRpb25zLCBvcGVyYXRlT3JkZXJlZCgpIG9ubHkgd29ya3Mgb24gZXhpc3RpbmcgcmVjb3JkcyAoaS5lLiBvbmVzIHRoYXQgd2VyZSBwcmV2aW91c2x5IGNyZWF0ZWQgd2l0aCBhIHB1dCgpKS4KICAgICAqCiAgICAgKiAqKkV4YW1wbGUgIzEgQ29tYmluaW5nIHNldmVyYWwgd3JpdGUgb3BlcmF0aW9ucyBpbnRvIG9uZSBtdWx0aS1vcCBjYWxsKioKICAgICAqCiAgICAgKiBgYGBwaHAKICAgICAqICRjb25maWcgPSBbImhvc3RzIiA9PiBbWyJhZGRyIj0+ImxvY2FsaG9zdCIsICJwb3J0Ij0+MzAwMF1dLCAic2htIj0+W11dOwogICAgICogJGNsaWVudCA9IG5ldyBBZXJvc3Bpa2UoJGNvbmZpZywgdHJ1ZSk7CiAgICAgKiBpZiAoISRjbGllbnQtPmlzQ29ubmVjdGVkKCkpIHsKICAgICAqICAgIGVjaG8gIkFlcm9zcGlrZSBmYWlsZWQgdG8gY29ubmVjdFt7JGNsaWVudC0+ZXJyb3JubygpfV06IHskY2xpZW50LT5lcnJvcigpfVxuIjsKICAgICAqICAgIGV4aXQoMSk7CiAgICAgKiB9CiAgICAgKgogICAgICogJGtleSA9ICRjbGllbnQtPmluaXRLZXkoInRlc3QiLCAiZGVtbyIsICJwazQ1OCIpOwogICAgICogJG9wZXJhdGlvbnMgPSBbCiAgICAgKiBhcnJheSgib3AiID0+IEFlcm9zcGlrZTo6T1BfTElTVF9BUFBFTkQsICJiaW4iID0+ICJhZ2UiLCAidmFsIj0+NDkpLAogICAgICogYXJyYXkoIm9wIiA9PiBBZXJvc3Bpa2U6Ok9QX0xJU1RfR0VULCAiYmluIiA9PiAiYWdlIiwgImluZGV4Ij0+MCksCiAgICAgKiBhcnJheSgib3AiID0+IEFlcm9zcGlrZTo6T1BfTElTVF9QT1AsICJiaW4iID0+ICJhZ2UiLCAiaW5kZXgiPT4wKQogICAgICogXTsKICAgICAqICRyZXR1cm5lZCA9ICJvdXRwdXQgdmFsdWUiOwogICAgICogJHN0YXR1cyA9ICRjbGllbnQtPm9wZXJhdGVPcmRlcmVkKCRrZXksICRvcGVyYXRpb25zLCAkcmV0dXJuZWQpOwogICAgICoKICAgICAqIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICB2YXJfZHVtcCgkcmV0dXJuZWQpOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9rdnMuaHRtbCBLZXktVmFsdWUgU3RvcmUKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hZXJvc3Bpa2UvYWVyb3NwaWtlLWNsaWVudC1waHAvYmxvYi9tYXN0ZXIvZG9jL1JFQURNRS5tZCNoYW5kbGluZy11bnN1cHBvcnRlZC10eXBlcyBIYW5kbGluZyBVbnN1cHBvcnRlZCBUeXBlcwogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2NsaWVudC9jL3VzYWdlL2t2cy93cml0ZS5odG1sI2NoYW5nZS1yZWNvcmQtdGltZS10by1saXZlLXR0bCBUaW1lLXRvLWxpdmUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9nbG9zc2FyeS5odG1sIEdsb3NzYXJ5CiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleSBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSByZWNvcmQuIEFuIGFycmF5IHdpdGgga2V5cyBgWyducycsJ3NldCcsJ2tleSddYCBvciBgWyducycsJ3NldCcsJ2RpZ2VzdCddYAogICAgICogQHBhcmFtIGFycmF5ICRvcGVyYXRpb25zIFRoZSBhcnJheSBvZiBvZiBvbmUgb3IgbW9yZSBwZXItYmluIG9wZXJhdGlvbnMgY29uZm9ybWluZyB0byB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKICAgICAqIGBgYAogICAgICogV3JpdGUgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QRVJBVE9SX1dSSVRFCiAgICAgKiAgIGJpbiA9PiBiaW4gbmFtZSAoY2Fubm90IGJlIGxvbmdlciB0aGFuIDE0IGNoYXJhY3RlcnMpCiAgICAgKiAgIHZhbCA9PiB0aGUgdmFsdWUgdG8gc3RvcmUgaW4gdGhlIGJpbgogICAgICoKICAgICAqIEluY3JlbWVudCBPcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BFUkFUT1JfSU5DUgogICAgICogICBiaW4gPT4gYmluIG5hbWUKICAgICAqICAgdmFsID0+IHRoZSBpbnRlZ2VyIGJ5IHdoaWNoIHRvIGluY3JlbWVudCB0aGUgdmFsdWUgaW4gdGhlIGJpbgogICAgICoKICAgICAqIFByZXBlbmQgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QRVJBVE9SX1BSRVBFTkQKICAgICAqICAgYmluID0+IGJpbiBuYW1lCiAgICAgKiAgIHZhbCA9PiB0aGUgc3RyaW5nIHRvIHByZXBlbmQgdGhlIHN0cmluZyB2YWx1ZSBpbiB0aGUgYmluCiAgICAgKgogICAgICogQXBwZW5kIE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUEVSQVRPUl9BUFBFTkQKICAgICAqICAgYmluID0+IGJpbiBuYW1lCiAgICAgKiAgIHZhbCA9PiB0aGUgc3RyaW5nIHRvIGFwcGVuZCB0aGUgc3RyaW5nIHZhbHVlIGluIHRoZSBiaW4KICAgICAqCiAgICAgKiBSZWFkIE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUEVSQVRPUl9SRUFECiAgICAgKiAgIGJpbiA9PiBuYW1lIG9mIHRoZSBiaW4gd2Ugd2FudCB0byByZWFkIGFmdGVyIGFueSB3cml0ZSBvcGVyYXRpb25zCiAgICAgKgogICAgICogVG91Y2ggT3BlcmF0aW9uOiByZXNldCB0aGUgdGltZS10by1saXZlIG9mIHRoZSByZWNvcmQgYW5kIGluY3JlbWVudCBpdHMgZ2VuZXJhdGlvbgogICAgICogICAgICAgICAgICAgICAgICAob25seSBjb21iaW5lcyB3aXRoIHJlYWQgb3BlcmF0aW9ucykKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUEVSQVRPUl9UT1VDSAogICAgICogICB0dGwgPT4gYSBwb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIHRvIHNldCBhcyB0aW1lLXRvLWxpdmUgZm9yIHRoZSByZWNvcmQKICAgICAqCiAgICAgKiBEZWxldGUgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QRVJBVE9SX0RFTEVURQogICAgICoKICAgICAqIExpc3QgQXBwZW5kIE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9MSVNUX0FQUEVORCwKICAgICAqICAgYmluID0+ICAiZXZlbnRzIiwKICAgICAqICAgdmFsID0+ICAxMjM0CiAgICAgKgogICAgICogTGlzdCBNZXJnZSBPcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BfTElTVF9NRVJHRSwKICAgICAqICAgYmluID0+ICAiZXZlbnRzIiwKICAgICAqICAgdmFsID0+ICBbIDEyMywgNDU2IF0KICAgICAqCiAgICAgKiBMaXN0IEluc2VydCBPcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BfTElTVF9JTlNFUlQsCiAgICAgKiAgIGJpbiA9PiAgImV2ZW50cyIsCiAgICAgKiAgIGluZGV4ID0+ICAyLAogICAgICogICB2YWwgPT4gIDEyMzQKICAgICAqCiAgICAgKiBMaXN0IEluc2VydCBJdGVtcyBPcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BfTElTVF9JTlNFUlRfSVRFTVMsCiAgICAgKiAgIGJpbiA9PiAgImV2ZW50cyIsCiAgICAgKiAgIGluZGV4ID0+ICAyLAogICAgICogICB2YWwgPT4gIFsgMTIzLCA0NTYgXQogICAgICoKICAgICAqIExpc3QgUG9wIE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9MSVNUX1BPUCwgIyByZXR1cm5zIGEgdmFsdWUKICAgICAqICAgYmluID0+ICAiZXZlbnRzIiwKICAgICAqICAgaW5kZXggPT4gIDIKICAgICAqCiAgICAgKiBMaXN0IFBvcCBSYW5nZSBPcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BfTElTVF9QT1BfUkFOR0UsICMgcmV0dXJucyBhIHZhbHVlCiAgICAgKiAgIGJpbiA9PiAgImV2ZW50cyIsCiAgICAgKiAgIGluZGV4ID0+ICAyLAogICAgICogICB2YWwgPT4gIDMgIyByZW1vdmUgMyBlbGVtZW50cyBzdGFydGluZyBhdCBpbmRleCAyCiAgICAgKgogICAgICogTGlzdCBSZW1vdmUgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QX0xJU1RfUkVNT1ZFLAogICAgICogICBiaW4gPT4gICJldmVudHMiLAogICAgICogICBpbmRleCA9PiAgMgogICAgICoKICAgICAqIExpc3QgUmVtb3ZlIFJhbmdlIE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9MSVNUX1JFTU9WRV9SQU5HRSwKICAgICAqICAgYmluID0+ICAiZXZlbnRzIiwKICAgICAqICAgaW5kZXggPT4gIDIsCiAgICAgKiAgIHZhbCA9PiAgMyAjIHJlbW92ZSAzIGVsZW1lbnRzIHN0YXJ0aW5nIGF0IGluZGV4IDIKICAgICAqCiAgICAgKiBMaXN0IENsZWFyIE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9MSVNUX0NMRUFSLAogICAgICogICBiaW4gPT4gICJldmVudHMiCiAgICAgKgogICAgICogTGlzdCBTZXQgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QX0xJU1RfU0VULAogICAgICogICBiaW4gPT4gICJldmVudHMiLAogICAgICogICBpbmRleCA9PiAgMiwKICAgICAqICAgdmFsID0+ICAibGF0ZXN0IGV2ZW50IGF0IGluZGV4IDIiICMgc2V0IHRoaXMgdmFsdWUgYXQgaW5kZXggMgogICAgICoKICAgICAqIExpc3QgR2V0IE9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9MSVNUX0dFVCwgIyByZXR1cm5zIGEgdmFsdWUKICAgICAqICAgYmluID0+ICAiZXZlbnRzIiwKICAgICAqICAgaW5kZXggPT4gIDIgIyBzaW1pbGFyIHRvIEFlcm9zcGlrZTo6T1BFUkFUT1JfUkVBRCBidXQgb25seSByZXR1cm5zIHRoZSB2YWx1ZQogICAgICogICAgICAgICAgICAgICAgIGF0IGluZGV4IDIgb2YgdGhlIGxpc3QsIG5vdCB0aGUgd2hvbGUgYmluCiAgICAgKgogICAgICogTGlzdCBHZXQgUmFuZ2UgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QX0xJU1RfR0VUX1JBTkdFLCAjIHJldHVybnMgYSB2YWx1ZQogICAgICogICBiaW4gPT4gICJldmVudHMiLAogICAgICogICBpbmRleCA9PiAgMiwKICAgICAqICAgdmFsID0+ICAzICMgZ2V0IDMgZWxlbWVudHMgc3RhcnRpbmcgYXQgaW5kZXggMgogICAgICoKICAgICAqIExpc3QgVHJpbSBPcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BfTElTVF9UUklNLAogICAgICogICBiaW4gPT4gICJldmVudHMiLAogICAgICogICBpbmRleCA9PiAgMiwKICAgICAqICAgdmFsID0+ICAzICMgcmVtb3ZlIGFsbCBlbGVtZW50cyBub3QgaW4gdGhlIHJhbmdlIGJldHdlZW4gaW5kZXggMiBhbmQgaW5kZXggMiArIDMKICAgICAqCiAgICAgKiBMaXN0IFNpemUgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QX0xJU1RfU0laRSwgIyByZXR1cm5zIGEgdmFsdWUKICAgICAqICAgYmluID0+ICAiZXZlbnRzIiAjIGdldHMgdGhlIHNpemUgb2YgYSBsaXN0IGNvbnRhaW5lZCBpbiB0aGUgYmluCiAgICAgKgogICAgICoKICAgICAqIE1hcCBvcGVyYXRpb25zCiAgICAgKgogICAgICogTWFwIFBvbGljaWVzOgogICAgICogTWFueSBvZiB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgcmVxdWlyZSBhIG1hcCBwb2xpY3ksIHRoZSBwb2xpY3kgaXMgYW4gYXJyYXkKICAgICAqIGNvbnRhaW5pbmcgYW55IG9mIHRoZSBrZXlzIEFFUk9TUElLRTo6T1BUX01BUF9PUkRFUiwgQUVST1NQSUtFOjpPUFRfTUFQX1dSSVRFX01PREUKICAgICAqCiAgICAgKiB0aGUgdmFsdWUgZm9yIEFFUk9TUElLRTo6T1BUX01BUF9PUkRFUiBzaG91bGQgYmUgb25lIG9mIEFFUk9TUElLRTo6QVNfTUFQX1VOT1JERVJFRCAsIEFFUk9TUElLRTo6QVNfTUFQX0tFWV9PUkRFUkVEICwgQUVST1NQSUtFOjpBU19NQVBfS0VZX1ZBTFVFX09SREVSRUQKICAgICAqIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGN1cnJlbnRseSBBRVJPU1BJS0U6OkFTX01BUF9VTk9SREVSRUQKICAgICAqCiAgICAgKiB0aGUgdmFsdWUgZm9yIEFFUk9TUElLRTo6T1BUX01BUF9XUklURV9NT0RFIHNob3VsZCBiZSBvbmUgb2Y6IEFFUk9TUElLRTo6QVNfTUFQX1VQREFURSwgQUVST1NQSUtFOjpBU19NQVBfVVBEQVRFX09OTFkgLCBBRVJPU1BJS0U6OkFTX01BUF9DUkVBVEVfT05MWQogICAgICogdGhlIGRlZmF1bHQgdmFsdWUgaXMgY3VycmVudGx5IEFFUk9TUElLRTo6QVNfTUFQX1VQREFURQogICAgICoKICAgICAqIHRoZSB2YWx1ZSBmb3IgQUVST1NQSUtFOjpPUFRfTUFQX1dSSVRFX0ZMQUdTIHNob3VsZCBiZSBvbmUgb2Y6IEFFUk9TUElLRTo6QVNfTUFQX1dSSVRFX0RFRkFVTFQsIEFFUk9TUElLRTo6QVNfTUFQX1dSSVRFX0NSRUFURV9PTkxZLCBBRVJPU1BJS0U6OkFTX01BUF9XUklURV9VUERBVEVfT05MWSwgQUVST1NQSUtFOjpBU19NQVBfV1JJVEVfTk9fRkFJTCwgQUVST1NQSUtFOjpBU19NQVBfV1JJVEVfUEFSVElBTAogICAgICogdGhlIGRlZmF1bHQgdmFsdWUgaXMgY3VycmVudGx5IEFFUk9TUElLRTo6QVNfTUFQX1dSSVRFX0RFRkFVTFQKICAgICAqCiAgICAgKiBNYXAgcmV0dXJuIHR5cGVzOgogICAgICogbWFueSBvZiB0aGUgbWFwIG9wZXJhdGlvbnMgcmVxdWlyZSBhIHJldHVybl90eXBlIGVudHJ5LgogICAgICogdGhpcyBzcGVjaWZpZXMgdGhlIGZvcm1hdCBpbiB3aGljaCB0aGUgcmVzcG9uc2Ugc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgb3B0aW9ucyBhcmU6CiAgICAgKiBBRVJPU1BJS0U6OkFTX01BUF9SRVRVUk5fTk9ORSAjIERvIG5vdCByZXR1cm4gYSByZXN1bHQuCiAgICAgKiBBRVJPU1BJS0U6OkFTX01BUF9SRVRVUk5fSU5ERVggIyBSZXR1cm4ga2V5IGluZGV4IG9yZGVyLgogICAgICogQUVST1NQSUtFOjpBU19NQVBfUkVUVVJOX1JFVkVSU0VfSU5ERVggIyBSZXR1cm4gcmV2ZXJzZSBrZXkgb3JkZXIuCiAgICAgKiBBRVJPU1BJS0U6OkFTX01BUF9SRVRVUk5fUkFOSyAjIFJldHVybiB2YWx1ZSBvcmRlci4KICAgICAqIEFFUk9TUElLRTo6QVNfTUFQX1JFVFVSTl9SRVZFUlNFX1JBTksgIyBSZXR1cm4gcmVzZXJ2ZSB2YWx1ZSBvcmRlci4KICAgICAqIEFFUk9TUElLRTo6QVNfTUFQX1JFVFVSTl9DT1VOVCAjIFJldHVybiBjb3VudCBvZiBpdGVtcyBzZWxlY3RlZC4KICAgICAqIEFFUk9TUElLRTo6QVNfTUFQX1JFVFVSTl9LRVkgIyBSZXR1cm4ga2V5IGZvciBzaW5nbGUga2V5IHJlYWQgYW5kIGtleSBsaXN0IGZvciByYW5nZSByZWFkLgogICAgICogQUVST1NQSUtFOjpBU19NQVBfUkVUVVJOX1ZBTFVFICMgUmV0dXJuIHZhbHVlIGZvciBzaW5nbGUga2V5IHJlYWQgYW5kIHZhbHVlIGxpc3QgZm9yIHJhbmdlIHJlYWQuCiAgICAgKiBBRVJPU1BJS0U6OkFTX01BUF9SRVRVUk5fS0VZX1ZBTFVFICMgUmV0dXJuIGtleS92YWx1ZSBpdGVtcy4gV2lsbCBiZSBvZiB0aGUgZm9ybSBbJ2tleTEnLCAndmFsMScsICdrZXkyJywgJ3ZhbDInLCAna2V5MycsICd2YWwzXQogICAgICoKICAgICAqIE1hcCBwb2xpY3kgT3BlcmF0aW9uOgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QX01BUF9TRVRfUE9MSUNZLAogICAgICogICBiaW4gPT4gICJtYXAiLAogICAgICogICBtYXBfcG9saWN5ID0+ICBbIEFFUk9TUElLRTo6T1BUX01BUF9PUkRFUiA9PiBBRVJPU1BJS0U6OkFTX01BUF9LRVlfT1JERVJFRF0KICAgICAqCiAgICAgKiBNYXAgY2xlYXIgb3BlcmF0aW9uOiAoUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIGEgbWFwKQogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9DTEVBUiwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIKICAgICAqCiAgICAgKgogICAgICogTWFwIFNpemUgT3BlcmF0aW9uOiBSZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIG1hcAogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9TSVpFLAogICAgICogICBiaW4gPT4gImJpbl9uYW1lIgogICAgICoKICAgICAqIE1hcCBHZXQgYnkgS2V5IG9wZXJhdGlvbgogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9HRVRfQllfS0VZICwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIGtleSA9PiAibXlfa2V5IiwKICAgICAqICAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCBHZXQgQnkgS2V5IFJhbmdlIG9wZXJhdGlvbjoKICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfR0VUX0JZX0tFWV9SQU5HRSAsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICBrZXkgPT4gImFhYSIsCiAgICAgKiAgIHJhbmdlX2VuZCA9PiAiYmJiIgogICAgICogICByZXR1cm5fdHlwZSA9PiBBRVJPU1BJS0U6Ok1BUF9SRVRVUk5fS0VZX1ZBTFVFCiAgICAgKgogICAgICogTWFwIEdldCBCeSBWYWx1ZSBvcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX0dFVF9CWV9WQUxVRSAsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICB2YWx1ZSA9PiAibXlfdmFsIgogICAgICogICByZXR1cm5fdHlwZSA9PiBBRVJPU1BJS0U6Ok1BUF9SRVRVUk5fS0VZX1ZBTFVFCiAgICAgKgogICAgICogTWFwIEdldCBieSBWYWx1ZSBSYW5nZSBvcGVyYXRpb246CiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX0dFVF9CWV9WQUxVRV9SQU5HRSAsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICB2YWx1ZSA9PiAidmFsdWVfYSIsCiAgICAgKiAgIHJhbmdlX2VuZCA9PiAidmFsdWVfeiIsCiAgICAgKiAgIHJldHVybl90eXBlID0+IEFFUk9TUElLRTo6TUFQX1JFVFVSTl9LRVlfVkFMVUUKICAgICAqCiAgICAgKiBNYXAgR2V0IEJ5IEluZGV4IG9wZXJhdGlvbgogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9HRVRfQllfSU5ERVggLAogICAgICogICBiaW4gPT4gImJpbl9uYW1lIiwKICAgICAqICAgaW5kZXggPT4gMiwKICAgICAqICAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCBHZXQgYnkgSW5kZXggUmFuZ2Ugb3BlcmF0aW9uCiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX0dFVF9CWV9JTkRFWF9SQU5HRSwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIGluZGV4ID0+IDIsCiAgICAgKiAgIGNvdW50ID0+IDIsCiAgICAgKiAgIHJldHVybl90eXBlID0+IEFFUk9TUElLRTo6TUFQX1JFVFVSTl9LRVlfVkFMVUUKICAgICAqCiAgICAgKiBNYXAgR2V0IEJ5IFJhbmsgb3BlcmF0aW9uCiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX0dFVF9CWV9SQU5LICwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIHJhbmsgPT4gLTEsICMgZ2V0IHRoZSBpdGVtIHdpdGggdGhlIGxhcmdlc3QgdmFsdWUKICAgICAqICAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCBHZXQgYnkgUmFuayBSYW5nZSBvcGVyYXRpb24KICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfR0VUX0JZX1JBTktfUkFOR0UgLAogICAgICogICByYW5rID0+IC0yICwKICAgICAqICAgY291bnQgPT4gMiAsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICByZXR1cm5fdHlwZSA9PiBBRVJPU1BJS0U6Ok1BUF9SRVRVUk5fS0VZX1ZBTFVFCiAgICAgKgogICAgICogTWFwIFB1dCBvcGVyYXRpb24KICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfUFVUICwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIGtleSA9PiAiYWVybyIsCiAgICAgKiAgIHZhbCA9PiAic3Bpa2UiLAogICAgICogICBtYXBfcG9saWN5ID0+IFsgQUVST1NQSUtFOjpPUFRfTUFQX09SREVSID0+IEFFUk9TUElLRTo6QVNfTUFQX0tFWV9PUkRFUkVEXQogICAgICoKICAgICAqIE1hcCBQdXQgSXRlbXMgb3BlcmF0aW9ucwogICAgICogIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX1BVVF9JVEVNUyAsCiAgICAgKiAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgdmFsID0+IFsxLCAiYSIsIDEuNV0sCiAgICAgKiAgbWFwX3BvbGljeSA9PiBbIEFFUk9TUElLRTo6T1BUX01BUF9PUkRFUiA9PiBBRVJPU1BJS0U6OkFTX01BUF9LRVlfT1JERVJFRF0KICAgICAqCiAgICAgKiBNYXAgSW5jcmVtZW50IG9wZXJhdGlvbgogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9JTkNSRU1FTlQgLAogICAgICogICBiaW4gPT4gImJpbl9uYW1lIiwKICAgICAqICAgdmFsID0+IDUsICNpbmNyZW1lbnQgdGhlIHZhbHVlIGJ5IDUKICAgICAqICAga2V5ID0+ICJrZXlfdG9faW5jcmVtZW50IiwKICAgICAqICAgbWFwX3BvbGljeSA9PiBbIEFFUk9TUElLRTo6T1BUX01BUF9PUkRFUiA9PiBBRVJPU1BJS0U6OkFTX01BUF9LRVlfT1JERVJFRF0KICAgICAqCiAgICAgKiBNYXAgRGVjcmVtZW50IG9wZXJhdGlvbgogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9ERUNSRU1FTlQgLAogICAgICogICBiaW4gPT4gImJpbl9uYW1lIiwKICAgICAqICAga2V5ID0+ICJrZXlfdG9fZGVjcmVtZW50IiwKICAgICAqICAgdmFsID0+IDUsICNkZWNyZW1lbnQgYnkgNQogICAgICogICBtYXBfcG9saWN5ID0+IFsgQUVST1NQSUtFOjpPUFRfTUFQX09SREVSID0+IEFFUk9TUElLRTo6QVNfTUFQX0tFWV9PUkRFUkVEXQogICAgICoKICAgICAqIE1hcCBSZW1vdmUgYnkgS2V5IG9wZXJhdGlvbgogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9SRU1PVkVfQllfS0VZICwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIGtleSA9PiAia2V5X3RvX3JlbW92ZSIsCiAgICAgKiAgIHJldHVybl90eXBlID0+IEFFUk9TUElLRTo6TUFQX1JFVFVSTl9LRVlfVkFMVUUKICAgICAqCiAgICAgKiBNYXAgUmVtb3ZlIGJ5IEtleSBsaXN0IG9wZXJhdGlvbgogICAgICogICBvcCA9PiBBRVJPU1BJS0U6Ok9QX01BUF9SRU1PVkVfQllfS0VZX0xJU1QgLAogICAgICogICBiaW4gPT4gImJpbl9uYW1lIiwKICAgICAqICAga2V5ID0+IFsia2V5MSIsIDIsICJrZXkzIl0sCiAgICAgKiAgIHJldHVybl90eXBlID0+IEFFUk9TUElLRTo6TUFQX1JFVFVSTl9LRVlfVkFMVUUKICAgICAqCiAgICAgKiBNYXAgcmVtb3ZlIGJ5IEtleSBSYW5nZSBvcGVyYXRpb24KICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfUkVNT1ZFX0JZX0tFWV9SQU5HRSAsCiAgICAgKiAgIGJpbiA9PiAiYmluIiwKICAgICAqICAga2V5ID0+ICJhIiwKICAgICAqICAgcmFuZ2VfZW5kID0+ICJkIiwKICAgICAqICAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCByZW1vdmUgYnkgVmFsdWUgb3BlcmF0aW9uCiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX1JFTU9WRV9CWV9WQUxVRSAsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICB2YWwgPT4gNSwKICAgICAqICAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCByZW1vdmUgYnkgdmFsdWUgcmFuZ2Ugb3BlcmF0aW9uCiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX1JFTU9WRV9CWV9WQUxVRV9SQU5HRSAsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICB2YWwgPT4gImEiLAogICAgICogICByYW5nZV9lbmQgPT4gImQiCiAgICAgKiAgIHJldHVybl90eXBlID0+IEFFUk9TUElLRTo6TUFQX1JFVFVSTl9LRVlfVkFMVUUKICAgICAqCiAgICAgKiBNYXAgcmVtb3ZlIGJ5IHZhbHVlIGxpc3Qgb3BlcmF0aW9uCiAgICAgKiAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfUkVNT1ZFX0JZX1ZBTFVFX0xJU1QgLAogICAgICogIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogIHZhbCA9PiBbMSwgMiwgMywgNF0sCiAgICAgKiAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCBSZW1vdmUgYnkgSW5kZXggb3BlcmF0aW9uCiAgICAgKiAgIG9wID0+IEFFUk9TUElLRTo6T1BfTUFQX1JFTU9WRV9CWV9JTkRFWCAsCiAgICAgKiAgIGluZGV4ID0+IDIsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICByZXR1cm5fdHlwZSA9PiBBRVJPU1BJS0U6Ok1BUF9SRVRVUk5fS0VZX1ZBTFVFCiAgICAgKgogICAgICogTWFwIFJlbW92ZSBCeSBJbmRleCBSYW5nZSBvcGVyYXRpb24KICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfUkVNT1ZFX0JZX0lOREVYX1JBTkdFICwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIGluZGV4ID0+IDMgLAogICAgICogICBjb3VudCA9PiAzICwKICAgICAqICAgcmV0dXJuX3R5cGUgPT4gQUVST1NQSUtFOjpNQVBfUkVUVVJOX0tFWV9WQUxVRQogICAgICoKICAgICAqIE1hcCBSZW1vdmUgYnkgUmFuayBvcGVyYXRpb24KICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfUkVNT1ZFX0JZX1JBTksgLAogICAgICogICByYW5rID0+IC0xICwKICAgICAqICAgYmluID0+ICJiaW5fbmFtZSIsCiAgICAgKiAgIHJldHVybl90eXBlID0+IEFFUk9TUElLRTo6TUFQX1JFVFVSTl9LRVlfVkFMVUUKICAgICAqCiAgICAgKiBNYXAgcmVtb3ZlIGJ5IHJhbmsgcmFuZ2UKICAgICAqICAgb3AgPT4gQUVST1NQSUtFOjpPUF9NQVBfUkVNT1ZFX0JZX1JBTktfUkFOR0UsCiAgICAgKiAgIGJpbiA9PiAiYmluX25hbWUiLAogICAgICogICByYW5rID0+IC0xLAogICAgICogICBjb3VudCA9PiByZXR1cm5fdHlwZSA9PiBBRVJPU1BJS0U6Ok1BUF9SRVRVUk5fS0VZX1ZBTFVFCiAgICAgKgogICAgICoKICAgICAqCiAgICAgKiBgYGAKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJiRyZXR1cm5lZCBhIHBhc3MtYnktcmVmZXJlbmNlIGFycmF5IG9mIGJpbnMgcmV0cmlldmVkIGJ5IHJlYWQgb3BlcmF0aW9ucy4gSWYgbXVsdGlwbGUgb3BlcmF0aW9ucyBleGlzdCBmb3IgYSBzcGVjaWZpYyBiaW4gbmFtZSwgdGhlIGxhc3Qgb3BlcmF0aW9uIHdpbGwgYmUgdGhlIG9uZSBwbGFjZWQgYXMgdGhlIHZhbHVlCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RUTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4KICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVQTElDQQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX0FQCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfU0MKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0RVUkFCTEVfREVMRVRFCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX0RFU0VSSUFMSVpFCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX01BWF9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RUTCBBZXJvc3Bpa2U6Ok9QVF9UVEwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVQTElDQSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVQTElDQSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfQVAgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9BUCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfU0MgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9TQyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfRFVSQUJMRV9ERUxFVEUgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9ERVNFUklBTElaRSBBZXJvc3Bpa2U6Ok9QVF9ERVNFUklBTElaRSBvcHRpb24KICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPSyBBZXJvc3Bpa2U6Ok9LIGFuZCBlcnJvciBzdGF0dXMgY29kZXMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcigpIGVycm9yKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcm5vKCkgZXJyb3JubygpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BFUkFUT1JfV1JJVEUgQWVyb3NwaWtlOjpPUEVSQVRPUl9XUklURSBhbmQgb3RoZXIgb3BlcmF0b3JzCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcGVyYXRlT3JkZXJlZChhcnJheSAka2V5LCBhcnJheSAkb3BlcmF0aW9ucywgJiRyZXR1cm5lZCwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSBsaXN0IHR5cGUgYmluCiAgICAgKgogICAgICogQHZlcnNpb24gMy43IFJlcXVpcmVzIHNlcnZlciA+PSAzLjcKICAgICAqIEBwYXJhbSBhcnJheSAgJGtleSBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSByZWNvcmQuIEFuIGFycmF5IHdpdGgga2V5cyBgWyducycsJ3NldCcsJ2tleSddYCBvciBgWyducycsJ3NldCcsJ2RpZ2VzdCddYAogICAgICogQHBhcmFtIHN0cmluZyAkYmluCiAgICAgKiBAcGFyYW0gaW50ICAgICYkY291bnQgcGFzcy1ieS1yZWZlcmVuY2UgcGFyYW0KICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVQTElDQQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX0FQCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfU0MKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUkVBRF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRVBMSUNBIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRVBMSUNBIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9BUCBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX0FQIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9TQyBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX1NDIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPSyBBZXJvc3Bpa2U6Ok9LIGFuZCBlcnJvciBzdGF0dXMgY29kZXMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcigpIGVycm9yKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcm5vKCkgZXJyb3JubygpCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0U2l6ZShhcnJheSAka2V5LCAkYmluLCAmJGNvdW50LCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogQWRkIGEgc2luZ2xlIHZhbHVlIChvZiBhbnkgdHlwZSkgdG8gdGhlIGVuZCBvZiBhIGxpc3QgdHlwZSBiaW4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAzLjcgUmVxdWlyZXMgc2VydmVyID49IDMuNwogICAgICogQHBhcmFtIGFycmF5ICAka2V5IFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHJlY29yZC4gQW4gYXJyYXkgd2l0aCBrZXlzIGBbJ25zJywnc2V0Jywna2V5J11gIG9yIGBbJ25zJywnc2V0JywnZGlnZXN0J11gCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW4KICAgICAqIEBwYXJhbSBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRvcHRpb25zIGFuIG9wdGlvbmFsIGFycmF5IG9mIHBvbGljeSBvcHRpb25zLCB3aG9zZSBrZXlzIGluY2x1ZGUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UVEwKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfVFRMIEFlcm9zcGlrZTo6T1BUX1RUTCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTiBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T0sgQWVyb3NwaWtlOjpPSyBhbmQgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6ZXJyb3IoKSBlcnJvcigpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6ZXJyb3JubygpIGVycm9ybm8oKQogICAgICogQHJldHVybiBpbnQgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBvcGVyYXRpb24uIENvbXBhcmUgdG8gdGhlIEFlcm9zcGlrZSBjbGFzcyBzdGF0dXMgY29uc3RhbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdEFwcGVuZChhcnJheSAka2V5LCAkYmluLCAkdmFsdWUsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBBZGQgc2V2ZXJhbCBpdGVtcyB0byB0aGUgZW5kIG9mIGEgbGlzdCB0eXBlIGJpbgogICAgICoKICAgICAqIEB2ZXJzaW9uIDMuNyBSZXF1aXJlcyBzZXJ2ZXIgPj0gMy43CiAgICAgKiBAcGFyYW0gYXJyYXkgICRrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgcmVjb3JkLiBBbiBhcnJheSB3aXRoIGtleXMgYFsnbnMnLCdzZXQnLCdrZXknXWAgb3IgYFsnbnMnLCdzZXQnLCdkaWdlc3QnXWAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbgogICAgICogQHBhcmFtIGFycmF5ICAkaXRlbXMKICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RUTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4KICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9NQVhfUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVAogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UVEwgQWVyb3NwaWtlOjpPUFRfVFRMIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPSyBBZXJvc3Bpa2U6Ok9LIGFuZCBlcnJvciBzdGF0dXMgY29kZXMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcigpIGVycm9yKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcm5vKCkgZXJyb3JubygpCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0TWVyZ2UoYXJyYXkgJGtleSwgJGJpbiwgYXJyYXkgJGl0ZW1zLCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogSW5zZXJ0IGEgc2luZ2xlIGVsZW1lbnQgKG9mIGFueSB0eXBlKSBhdCBhIHNwZWNpZmllZCBpbmRleCBvZiBhIGxpc3QgdHlwZSBiaW4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAzLjcgUmVxdWlyZXMgc2VydmVyID49IDMuNwogICAgICogQHBhcmFtIGFycmF5ICAka2V5IFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHJlY29yZC4gQW4gYXJyYXkgd2l0aCBrZXlzIGBbJ25zJywnc2V0Jywna2V5J11gIG9yIGBbJ25zJywnc2V0JywnZGlnZXN0J11gCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW4KICAgICAqIEBwYXJhbSBpbnQgICAgJGluZGV4CiAgICAgKiBAcGFyYW0gbWl4ZWQgICR2YWx1ZQogICAgICogQHBhcmFtIGFycmF5ICAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVFRMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTgogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX01BWF9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RUTCBBZXJvc3Bpa2U6Ok9QVF9UVEwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9LIEFlcm9zcGlrZTo6T0sgYW5kIGVycm9yIHN0YXR1cyBjb2RlcwogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9yKCkgZXJyb3IoKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9ybm8oKSBlcnJvcm5vKCkKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpc3RJbnNlcnQoYXJyYXkgJGtleSwgJGJpbiwgJGluZGV4LCAkdmFsdWUsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBJbnNlcnQgc2V2ZXJhbCBlbGVtZW50cyBhdCBhIHNwZWNpZmllZCBpbmRleCBvZiBhIGxpc3QgdHlwZSBiaW4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAzLjcgUmVxdWlyZXMgc2VydmVyID49IDMuNwogICAgICogQHBhcmFtIGFycmF5ICAka2V5IFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHJlY29yZC4gQW4gYXJyYXkgd2l0aCBrZXlzIGBbJ25zJywnc2V0Jywna2V5J11gIG9yIGBbJ25zJywnc2V0JywnZGlnZXN0J11gCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW4KICAgICAqIEBwYXJhbSBpbnQgICAgJGluZGV4CiAgICAgKiBAcGFyYW0gYXJyYXkgICRlbGVtZW50cwogICAgICogQHBhcmFtIGFycmF5ICAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVFRMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTgogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX01BWF9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RUTCBBZXJvc3Bpa2U6Ok9QVF9UVEwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9LIEFlcm9zcGlrZTo6T0sgYW5kIGVycm9yIHN0YXR1cyBjb2RlcwogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9yKCkgZXJyb3IoKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9ybm8oKSBlcnJvcm5vKCkKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpc3RJbnNlcnRJdGVtcyhhcnJheSAka2V5LCAkYmluLCAkaW5kZXgsIGFycmF5ICRlbGVtZW50cywgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBhbmQgZ2V0IGJhY2sgdGhlIGVsZW1lbnQgYXQgYSBzcGVjaWZpZWQgaW5kZXggb2YgYSBsaXN0IHR5cGUgYmluCiAgICAgKiBJbmRleCAtMSBpcyB0aGUgbGFzdCBpdGVtIGluIHRoZSBsaXN0LCAtMyBpcyB0aGUgdGhpcmQgZnJvbSBsYXN0LCAwIGlzIHRoZSBmaXJzdCBpbiB0aGUgbGlzdC4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAzLjcgUmVxdWlyZXMgc2VydmVyID49IDMuNwogICAgICogQHBhcmFtIGFycmF5ICAka2V5IFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHJlY29yZC4gQW4gYXJyYXkgd2l0aCBrZXlzIGBbJ25zJywnc2V0Jywna2V5J11gIG9yIGBbJ25zJywnc2V0JywnZGlnZXN0J11gCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW4KICAgICAqIEBwYXJhbSBpbnQgICAgJGluZGV4CiAgICAgKiBAcGFyYW0gbWl4ZWQgICYkZWxlbWVudCBwYXNzLWJ5LXJlZmVyZW5jZSBwYXJhbQogICAgICogQHBhcmFtIGFycmF5ICAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVFRMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTgogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9NQVhfUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVAogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UVEwgQWVyb3NwaWtlOjpPUFRfVFRMIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0RVUkFCTEVfREVMRVRFIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTiBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T0sgQWVyb3NwaWtlOjpPSyBhbmQgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6ZXJyb3IoKSBlcnJvcigpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6ZXJyb3JubygpIGVycm9ybm8oKQogICAgICogQHJldHVybiBpbnQgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBvcGVyYXRpb24uIENvbXBhcmUgdG8gdGhlIEFlcm9zcGlrZSBjbGFzcyBzdGF0dXMgY29uc3RhbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdFBvcChhcnJheSAka2V5LCAkYmluLCAkaW5kZXgsICYkZWxlbWVudCwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBhbmQgZ2V0IGJhY2sgc2V2ZXJhbCBlbGVtZW50cyBhdCBhIHNwZWNpZmllZCBpbmRleCByYW5nZSBvZiBhIGxpc3QgdHlwZSBiaW4KICAgICAqIEluZGV4IC0xIGlzIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGxpc3QsIC0zIGlzIHRoZSB0aGlyZCBmcm9tIGxhc3QsIDAgaXMgdGhlIGZpcnN0IGluIHRoZSBsaXN0LgogICAgICoKICAgICAqIEB2ZXJzaW9uIDMuNyBSZXF1aXJlcyBzZXJ2ZXIgPj0gMy43CiAgICAgKiBAcGFyYW0gYXJyYXkgICRrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgcmVjb3JkLiBBbiBhcnJheSB3aXRoIGtleXMgYFsnbnMnLCdzZXQnLCdrZXknXWAgb3IgYFsnbnMnLCdzZXQnLCdkaWdlc3QnXWAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbgogICAgICogQHBhcmFtIGludCAgICAkaW5kZXgKICAgICAqIEBwYXJhbSBpbnQgICAgJGNvdW50CiAgICAgKiBAcGFyYW0gYXJyYXkgICYkZWxlbWVudHMgcGFzcy1ieS1yZWZlcmVuY2UgcGFyYW0uIEFmdGVyIHRoZSBtZXRob2QgY2FsbCBpdCB3aWxsIGJlIGFuIGFycmF5IGhvbGRpbmcgdGhlIHBvcHBlZCBlbGVtZW50cy4KICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RUTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4KICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfRFVSQUJMRV9ERUxFVEUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfVFRMIEFlcm9zcGlrZTo6T1BUX1RUTCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTiBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfRFVSQUJMRV9ERUxFVEUgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9LIEFlcm9zcGlrZTo6T0sgYW5kIGVycm9yIHN0YXR1cyBjb2RlcwogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9yKCkgZXJyb3IoKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9ybm8oKSBlcnJvcm5vKCkKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpc3RQb3BSYW5nZShhcnJheSAka2V5LCAkYmluLCAkaW5kZXgsICRjb3VudCwgJiRlbGVtZW50cywgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBhIGxpc3QgZWxlbWVudCBhdCBhIHNwZWNpZmllZCBpbmRleCBvZiBhIGxpc3QgdHlwZSBiaW4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAzLjcgUmVxdWlyZXMgc2VydmVyID49IDMuNwogICAgICogQHBhcmFtIGFycmF5ICAka2V5IFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHJlY29yZC4gQW4gYXJyYXkgd2l0aCBrZXlzIGBbJ25zJywnc2V0Jywna2V5J11gIG9yIGBbJ25zJywnc2V0JywnZGlnZXN0J11gCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW4KICAgICAqIEBwYXJhbSBpbnQgICAgJGluZGV4CiAgICAgKiBAcGFyYW0gYXJyYXkgICRvcHRpb25zIGFuIG9wdGlvbmFsIGFycmF5IG9mIHBvbGljeSBvcHRpb25zLCB3aG9zZSBrZXlzIGluY2x1ZGUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UVEwKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0RVUkFCTEVfREVMRVRFCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX01BWF9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RUTCBBZXJvc3Bpa2U6Ok9QVF9UVEwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfRFVSQUJMRV9ERUxFVEUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0RVUkFCTEVfREVMRVRFIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPSyBBZXJvc3Bpa2U6Ok9LIGFuZCBlcnJvciBzdGF0dXMgY29kZXMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcigpIGVycm9yKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcm5vKCkgZXJyb3JubygpCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0UmVtb3ZlKGFycmF5ICRrZXksICRiaW4sICRpbmRleCwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBzZXZlcmFsIGxpc3QgZWxlbWVudHMgYXQgYSBzcGVjaWZpZWQgaW5kZXggcmFuZ2Ugb2YgYSBsaXN0IHR5cGUgYmluCiAgICAgKgogICAgICogQHZlcnNpb24gMy43IFJlcXVpcmVzIHNlcnZlciA+PSAzLjcKICAgICAqIEBwYXJhbSBhcnJheSAgJGtleSBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSByZWNvcmQuIEFuIGFycmF5IHdpdGgga2V5cyBgWyducycsJ3NldCcsJ2tleSddYCBvciBgWyducycsJ3NldCcsJ2RpZ2VzdCddYAogICAgICogQHBhcmFtIHN0cmluZyAkYmluCiAgICAgKiBAcGFyYW0gaW50ICAgICRpbmRleAogICAgICogQHBhcmFtIGludCAgICAkY291bnQKICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RUTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4KICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfRFVSQUJMRV9ERUxFVEUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfVFRMIEFlcm9zcGlrZTo6T1BUX1RUTCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTiBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfRFVSQUJMRV9ERUxFVEUgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9LIEFlcm9zcGlrZTo6T0sgYW5kIGVycm9yIHN0YXR1cyBjb2RlcwogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9yKCkgZXJyb3IoKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9ybm8oKSBlcnJvcm5vKCkKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpc3RSZW1vdmVSYW5nZShhcnJheSAka2V5LCAkYmluLCAkaW5kZXgsICRjb3VudCwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFRyaW0gdGhlIGxpc3QsIHJlbW92aW5nIGFsbCBlbGVtZW50cyBub3QgaW4gdGhlIHNwZWNpZmllZCBpbmRleCByYW5nZSBvZiBhIGxpc3QgdHlwZSBiaW4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAzLjcgUmVxdWlyZXMgc2VydmVyID49IDMuNwogICAgICogQHBhcmFtIGFycmF5ICAka2V5IFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHJlY29yZC4gQW4gYXJyYXkgd2l0aCBrZXlzIGBbJ25zJywnc2V0Jywna2V5J11gIG9yIGBbJ25zJywnc2V0JywnZGlnZXN0J11gCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW4KICAgICAqIEBwYXJhbSBpbnQgICAgJGluZGV4CiAgICAgKiBAcGFyYW0gaW50ICAgICRjb3VudAogICAgICogQHBhcmFtIGFycmF5ICAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVFRMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTgogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9NQVhfUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVAogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UVEwgQWVyb3NwaWtlOjpPUFRfVFRMIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0RVUkFCTEVfREVMRVRFIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T0sgQWVyb3NwaWtlOjpPSyBhbmQgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6ZXJyb3IoKSBlcnJvcigpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6ZXJyb3JubygpIGVycm9ybm8oKQogICAgICogQHJldHVybiBpbnQgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBvcGVyYXRpb24uIENvbXBhcmUgdG8gdGhlIEFlcm9zcGlrZSBjbGFzcyBzdGF0dXMgY29uc3RhbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdFRyaW0oYXJyYXkgJGtleSwgJGJpbiwgJGluZGV4LCAkY291bnQsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgYWxsIHRoZSBlbGVtZW50cyBmcm9tIGEgbGlzdCB0eXBlIGJpbgogICAgICoKICAgICAqIEB2ZXJzaW9uIDMuNyBSZXF1aXJlcyBzZXJ2ZXIgPj0gMy43CiAgICAgKiBAcGFyYW0gYXJyYXkgICRrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgcmVjb3JkLiBBbiBhcnJheSB3aXRoIGtleXMgYFsnbnMnLCdzZXQnLCdrZXknXWAgb3IgYFsnbnMnLCdzZXQnLCdkaWdlc3QnXWAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbgogICAgICogQHBhcmFtIGFycmF5ICAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVFRMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTgogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9NQVhfUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVAogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UVEwgQWVyb3NwaWtlOjpPUFRfVFRMIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0NPTU1JVF9MRVZFTCBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0RVUkFCTEVfREVMRVRFIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T0sgQWVyb3NwaWtlOjpPSyBhbmQgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6ZXJyb3IoKSBlcnJvcigpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6ZXJyb3JubygpIGVycm9ybm8oKQogICAgICogQHJldHVybiBpbnQgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBvcGVyYXRpb24uIENvbXBhcmUgdG8gdGhlIEFlcm9zcGlrZSBjbGFzcyBzdGF0dXMgY29uc3RhbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdENsZWFyKGFycmF5ICRrZXksICRiaW4sIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBTZXQgYW4gZWxlbWVudCBhdCBhIHNwZWNpZmllZCBpbmRleCBvZiBhIGxpc3QgdHlwZSBiaW4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAzLjcgUmVxdWlyZXMgc2VydmVyID49IDMuNwogICAgICogQHBhcmFtIGFycmF5ICAka2V5IFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHJlY29yZC4gQW4gYXJyYXkgd2l0aCBrZXlzIGBbJ25zJywnc2V0Jywna2V5J11gIG9yIGBbJ25zJywnc2V0JywnZGlnZXN0J11gCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW4KICAgICAqIEBwYXJhbSBpbnQgICAgJGluZGV4CiAgICAgKiBAcGFyYW0gbWl4ZWQgICR2YWx1ZQogICAgICogQHBhcmFtIGFycmF5ICAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfVFRMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0dFTgogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX01BWF9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RUTCBBZXJvc3Bpa2U6Ok9QVF9UVEwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfR0VOIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9HRU4gb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9DT01NSVRfTEVWRUwgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9LIEFlcm9zcGlrZTo6T0sgYW5kIGVycm9yIHN0YXR1cyBjb2RlcwogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9yKCkgZXJyb3IoKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OmVycm9ybm8oKSBlcnJvcm5vKCkKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpc3RTZXQoYXJyYXkgJGtleSwgJGJpbiwgJGluZGV4LCAkdmFsdWUsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBHZXQgYW4gZWxlbWVudCBmcm9tIGEgc3BlY2lmaWVkIGluZGV4IG9mIGEgbGlzdCB0eXBlIGJpbgogICAgICoKICAgICAqIEB2ZXJzaW9uIDMuNyBSZXF1aXJlcyBzZXJ2ZXIgPj0gMy43CiAgICAgKiBAcGFyYW0gYXJyYXkgICRrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgcmVjb3JkLiBBbiBhcnJheSB3aXRoIGtleXMgYFsnbnMnLCdzZXQnLCdrZXknXWAgb3IgYFsnbnMnLCdzZXQnLCdkaWdlc3QnXWAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbgogICAgICogQHBhcmFtIGludCAgICAkaW5kZXgKICAgICAqIEBwYXJhbSBhcnJheSAgJiRlbGVtZW50IHBhc3MtYnktcmVmZXJlbmNlIHBhcmFtIHdoaWNoIHdpbGwgaG9sZCB0aGUgcmV0dXJuZWQgZWxlbWVudC4KICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVQTElDQQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX0FQCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfU0MKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUkVBRF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRVBMSUNBIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRVBMSUNBIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9BUCBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX0FQIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9TQyBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX1NDIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPSyBBZXJvc3Bpa2U6Ok9LIGFuZCBlcnJvciBzdGF0dXMgY29kZXMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcigpIGVycm9yKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcm5vKCkgZXJyb3JubygpCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0R2V0KGFycmF5ICRrZXksICRiaW4sICRpbmRleCwgYXJyYXkgJiRlbGVtZW50LCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogR2V0IHNldmVyYWwgZWxlbWVudHMgc3RhcnRpbmcgYXQgYSBzcGVjaWZpZWQgaW5kZXggZnJvbSBhIGxpc3QgdHlwZSBiaW4KICAgICAqCiAgICAgKiBAdmVyc2lvbiAzLjcgUmVxdWlyZXMgc2VydmVyID49IDMuNwogICAgICogQHBhcmFtIGFycmF5ICAka2V5IFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHJlY29yZC4gQW4gYXJyYXkgd2l0aCBrZXlzIGBbJ25zJywnc2V0Jywna2V5J11gIG9yIGBbJ25zJywnc2V0JywnZGlnZXN0J11gCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW4KICAgICAqIEBwYXJhbSBpbnQgICAgJGluZGV4CiAgICAgKiBAcGFyYW0gaW50ICAgICRjb3VudAogICAgICogQHBhcmFtIGFycmF5ICAmJGVsZW1lbnRzIHBhc3MtYnktcmVmZXJlbmNlIHBhcmFtIHdoaWNoIHdpbGwgaG9sZCBhbiBhcnJheSBvZiByZXR1cm5lZCBlbGVtZW50cyBmcm9tIHRoZSBzcGVjaWZpZWQgbGlzdCBiaW4uCiAgICAgKiBAcGFyYW0gYXJyYXkgICRvcHRpb25zIGFuIG9wdGlvbmFsIGFycmF5IG9mIHBvbGljeSBvcHRpb25zLCB3aG9zZSBrZXlzIGluY2x1ZGUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUkVBRF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFUExJQ0EKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9BUAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVBRF9NT0RFX1NDCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX01BWF9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVQTElDQSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfUkVQTElDQSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfQVAgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9BUCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9SRUFEX01PREVfU0MgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX1JFQURfTU9ERV9TQyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T0sgQWVyb3NwaWtlOjpPSyBhbmQgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6ZXJyb3IoKSBlcnJvcigpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6ZXJyb3JubygpIGVycm9ybm8oKQogICAgICogQHJldHVybiBpbnQgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBvcGVyYXRpb24uIENvbXBhcmUgdG8gdGhlIEFlcm9zcGlrZSBjbGFzcyBzdGF0dXMgY29uc3RhbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdEdldFJhbmdlKGFycmF5ICRrZXksICRiaW4sICRpbmRleCwgJGNvdW50LCAmJGVsZW1lbnRzLCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8vIEJhdGNoIE9wZXJhdGlvbiBNZXRob2RzCgogICAgLyoqCiAgICAgKiBSZWFkIGEgYmF0Y2ggb2YgcmVjb3JkcyBmcm9tIGEgbGlzdCBvZiBnaXZlbiBrZXlzLCBhbmQgZmlsbCAkcmVjb3JkcyB3aXRoIHRoZSByZXN1bHRpbmcgaW5kZXhlZCBhcnJheQogICAgICoKICAgICAqIEVhY2ggcmVjb3JkIGlzIGFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgKmtleSosICptZXRhZGF0YSogYW5kICpiaW5zKiAoc2VlOiB7QHNlZSBBZXJvc3Bpa2U6OmdldCgpIGdldCgpfSkuCiAgICAgKiBOb24tZXhpc3RlbnQgcmVjb3JkcyB3aWxsIGhhdmUgYE5VTExgIGZvciB0aGVpciAqbWV0YWRhdGEqIGFuZCAqYmlucyogZmllbGRzLgogICAgICogVGhlIGJpbnMgcmV0dXJuZWQgY2FuIGJlIGZpbHRlcmVkIGJ5IHBhc3NpbmcgYW4gYXJyYXkgb2YgYmluIG5hbWVzLgogICAgICoKICAgICAqICoqTm90ZSoqIHRoYXQgdGhlIHByb3RvY29sIGdldE1hbnkoKSB3aWxsIHVzZSAoYmF0Y2gtZGlyZWN0IG9yIGJhdGNoLWluZGV4KQogICAgICogaXMgY29uZmlndXJhYmxlIHRocm91Z2ggdGhlIGNvbmZpZyBwYXJhbWV0ZXIgYEFlcm9zcGlrZTo6VVNFX0JBVENIX0RJUkVDVGAKICAgICAqIG9yIGBwaHAuaW5pYCBjb25maWcgcGFyYW1ldGVyIGBhZXJvc3Bpa2UudXNlX2JhdGNoX2RpcmVjdGAuCiAgICAgKiBCeSBkZWZhdWx0IGJhdGNoLWluZGV4IGlzIHVzZWQgd2l0aCBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCBpdCAodmVyc2lvbiA+PSAzLjYuMCkuCiAgICAgKgogICAgICogKipFeGFtcGxlICMxIEFlcm9zcGlrZTo6Z2V0TWFueSgpIGRlZmF1bHQgYmVoYXZpb3IgZXhhbXBsZSoqCiAgICAgKiBgYGBwaHAKICAgICAqICRjb25maWcgPSBbImhvc3RzIiA9PiBbWyJhZGRyIj0+ImxvY2FsaG9zdCIsICJwb3J0Ij0+MzAwMF1dLCAic2htIj0+W11dOwogICAgICogJGNsaWVudCA9IG5ldyBBZXJvc3Bpa2UoJGNvbmZpZywgdHJ1ZSk7CiAgICAgKiBpZiAoISRjbGllbnQtPmlzQ29ubmVjdGVkKCkpIHsKICAgICAqICAgIGVjaG8gIkFlcm9zcGlrZSBmYWlsZWQgdG8gY29ubmVjdFt7JGNsaWVudC0+ZXJyb3JubygpfV06IHskY2xpZW50LT5lcnJvcigpfVxuIjsKICAgICAqICAgIGV4aXQoMSk7CiAgICAgKiB9CiAgICAgKgogICAgICogJGtleTEgPSAkY2xpZW50LT5pbml0S2V5KCJ0ZXN0IiwgInVzZXJzIiwgMTIzNCk7CiAgICAgKiAka2V5MiA9ICRjbGllbnQtPmluaXRLZXkoInRlc3QiLCAidXNlcnMiLCAxMjM1KTsgLy8gdGhpcyBrZXkgZG9lcyBub3QgZXhpc3QKICAgICAqICRrZXkzID0gJGNsaWVudC0+aW5pdEtleSgidGVzdCIsICJ1c2VycyIsIDEyMzYpOwogICAgICogJGtleXMgPSBhcnJheSgka2V5MSwgJGtleTIsICRrZXkzKTsKICAgICAqICRzdGF0dXMgPSAkY2xpZW50LT5nZXRNYW55KCRrZXlzLCAkcmVjb3Jkcyk7CiAgICAgKiBpZiAoJHN0YXR1cyA9PSBBZXJvc3Bpa2U6Ok9LKSB7CiAgICAgKiAgICAgdmFyX2R1bXAoJHJlY29yZHMpOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBhcnJheSgzKSB7CiAgICAgKiAgIFswXT0+CiAgICAgKiAgIGFycmF5KDMpIHsKICAgICAqICAgICBbImtleSJdPT4KICAgICAqICAgICBhcnJheSg0KSB7CiAgICAgKiAgICAgICBbIm5zIl09PgogICAgICogICAgICAgc3RyaW5nKDQpICJ0ZXN0IgogICAgICogICAgICAgWyJzZXQiXT0+CiAgICAgKiAgICAgICBzdHJpbmcoNSkgInVzZXJzIgogICAgICogICAgICAgWyJrZXkiXT0+CiAgICAgKiAgICAgICBpbnQoMTIzNCkKICAgICAqICAgICAgIFsiZGlnZXN0Il09PgogICAgICogICAgICAgc3RyaW5nKDIwKSAiTT92MktwPz8/CiAgICAgKgogICAgICogP1s/PzQ/dgogICAgICogICAgIH0KICAgICAqICAgICBbIm1ldGFkYXRhIl09PgogICAgICogICAgIGFycmF5KDIpIHsKICAgICAqICAgICAgIFsidHRsIl09PgogICAgICogICAgICAgaW50KDQyOTQ5NjcyOTUpCiAgICAgKiAgICAgICBbImdlbmVyYXRpb24iXT0+CiAgICAgKiAgICAgICBpbnQoMSkKICAgICAqICAgICB9CiAgICAgKiAgICAgWyJiaW5zIl09PgogICAgICogICAgIGFycmF5KDMpIHsKICAgICAqICAgICAgIFsiZW1haWwiXT0+CiAgICAgKiAgICAgICBzdHJpbmcoMTUpICJoZXlAZXhhbXBsZS5jb20iCiAgICAgKiAgICAgICBbIm5hbWUiXT0+CiAgICAgKiAgICAgICBzdHJpbmcoOSkgIllvdSBUaGVyZSIKICAgICAqICAgICAgIFsiYWdlIl09PgogICAgICogICAgICAgaW50KDMzKQogICAgICogICAgIH0KICAgICAqICAgfQogICAgICogICBbMV09PgogICAgICogICBhcnJheSgzKSB7CiAgICAgKiAgICAgWyJrZXkiXT0+CiAgICAgKiAgICAgYXJyYXkoNCkgewogICAgICogICAgICAgWyJucyJdPT4KICAgICAqICAgICAgIHN0cmluZyg0KSAidGVzdCIKICAgICAqICAgICAgIFsic2V0Il09PgogICAgICogICAgICAgc3RyaW5nKDUpICJ1c2VycyIKICAgICAqICAgICAgIFsia2V5Il09PgogICAgICogICAgICAgaW50KDEyMzUpCiAgICAgKiAgICAgICBbImRpZ2VzdCJdPT4KICAgICAqICAgICAgIHN0cmluZygyMCkgIj9DPz9bP3Z3Uz8/xqg/Pz8/PyIKICAgICAqICAgICB9CiAgICAgKiAgICAgWyJtZXRhZGF0YSJdPT4KICAgICAqICAgICBOVUxMCiAgICAgKiAgICAgWyJiaW5zIl09PgogICAgICogICAgIE5VTEwKICAgICAqICAgfQogICAgICogICBbMl09PgogICAgICogICBhcnJheSgzKSB7CiAgICAgKiAgICAgWyJrZXkiXT0+CiAgICAgKiAgICAgYXJyYXkoNCkgewogICAgICogICAgICAgWyJucyJdPT4KICAgICAqICAgICAgIHN0cmluZyg0KSAidGVzdCIKICAgICAqICAgICAgIFsic2V0Il09PgogICAgICogICAgICAgc3RyaW5nKDUpICJ1c2VycyIKICAgICAqICAgICAgIFsia2V5Il09PgogICAgICogICAgICAgaW50KDEyMzYpCiAgICAgKiAgICAgICBbImRpZ2VzdCJdPT4KICAgICAqICAgICAgIHN0cmluZygyMCkgIic/OT8KICAgICAqICAgICAgICAgICAgICAgICAgICAgICA/Pz8/Pz8KICAgICAqID8JPyIKICAgICAqICAgICB9CiAgICAgKiAgICAgWyJtZXRhZGF0YSJdPT4KICAgICAqICAgICBhcnJheSgyKSB7CiAgICAgKiAgICAgICBbInR0bCJdPT4KICAgICAqICAgICAgIGludCg0Mjk0OTY3Mjk1KQogICAgICogICAgICAgWyJnZW5lcmF0aW9uIl09PgogICAgICogICAgICAgaW50KDEpCiAgICAgKiAgICAgfQogICAgICogICAgIFsiYmlucyJdPT4KICAgICAqICAgICBhcnJheSgzKSB7CiAgICAgKiAgICAgICBbImVtYWlsIl09PgogICAgICogICAgICAgc3RyaW5nKDE5KSAidGhpc2d1eUBleGFtcGxlLmNvbSIKICAgICAqICAgICAgIFsibmFtZSJdPT4KICAgICAqICAgICAgIHN0cmluZyg4KSAiVGhpcyBHdXkiCiAgICAgKiAgICAgICBbImFnZSJdPT4KICAgICAqICAgICAgIGludCg0MikKICAgICAqICAgICB9CiAgICAgKiAgIH0KICAgICAqIH0KICAgICAqIGBgYAogICAgICogKipFeGFtcGxlICMyIGdldE1hbnkgcmVjb3JkcyB3aXRoIGZpbHRlcmVkIGJpbnMqKgogICAgICogYGBgcGhwCiAgICAgKiAvLyBhc3N1bWluZyB0aGlzIGZvbGxvd3MgRXhhbXBsZSAjMQogICAgICoKICAgICAqICRmaWx0ZXIgPSBbImVtYWlsIl07CiAgICAgKiAka2V5cyA9IFska2V5MSwgJGtleTNdOwogICAgICogJHN0YXR1cyA9ICRjbGllbnQtPmdldE1hbnkoJGtleXMsICRyZWNvcmRzLCAkZmlsdGVyKTsKICAgICAqIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICB2YXJfZHVtcCgkcmVjb3Jkcyk7CiAgICAgKiB9IGVsc2UgewogICAgICogICAgIGVjaG8gIlt7JGNsaWVudC0+ZXJyb3JubygpfV0gIi4kY2xpZW50LT5lcnJvcigpOwogICAgICogfQogICAgICogYGBgCiAgICAgKiBgYGAKICAgICAqIGFycmF5KDIpIHsKICAgICAqICAgWzBdPT4KICAgICAqICAgYXJyYXkoMykgewogICAgICogICAgIFsia2V5Il09PgogICAgICogICAgIGFycmF5KDQpIHsKICAgICAqICAgICAgIFsibnMiXT0+CiAgICAgKiAgICAgICBzdHJpbmcoNCkgInRlc3QiCiAgICAgKiAgICAgICBbInNldCJdPT4KICAgICAqICAgICAgIHN0cmluZyg1KSAidXNlcnMiCiAgICAgKiAgICAgICBbImtleSJdPT4KICAgICAqICAgICAgIGludCgxMjM0KQogICAgICogICAgICAgWyJkaWdlc3QiXT0+CiAgICAgKiAgICAgICBzdHJpbmcoMjApICJNP3YyS3A/Pz8KICAgICAqCiAgICAgKiA/Wz8/ND92CiAgICAgKiAgICAgfQogICAgICogICAgIFsibWV0YWRhdGEiXT0+CiAgICAgKiAgICAgYXJyYXkoMikgewogICAgICogICAgICAgWyJ0dGwiXT0+CiAgICAgKiAgICAgICBpbnQoNDI5NDk2NzI5NSkKICAgICAqICAgICAgIFsiZ2VuZXJhdGlvbiJdPT4KICAgICAqICAgICAgIGludCg0KQogICAgICogICAgIH0KICAgICAqICAgICBbImJpbnMiXT0+CiAgICAgKiAgICAgYXJyYXkoMSkgewogICAgICogICAgICAgWyJlbWFpbCJdPT4KICAgICAqICAgICAgIHN0cmluZygxNSkgImhleUBleGFtcGxlLmNvbSIKICAgICAqICAgICB9CiAgICAgKiAgIH0KICAgICAqICAgWzFdPT4KICAgICAqICAgYXJyYXkoMykgewogICAgICogICAgIFsia2V5Il09PgogICAgICogICAgIGFycmF5KDQpIHsKICAgICAqICAgICAgIFsibnMiXT0+CiAgICAgKiAgICAgICBzdHJpbmcoNCkgInRlc3QiCiAgICAgKiAgICAgICBbInNldCJdPT4KICAgICAqICAgICAgIHN0cmluZyg1KSAidXNlcnMiCiAgICAgKiAgICAgICBbImtleSJdPT4KICAgICAqICAgICAgIGludCgxMjM2KQogICAgICogICAgICAgWyJkaWdlc3QiXT0+CiAgICAgKiAgICAgICBzdHJpbmcoMjApICInPzk/CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgPz8/Pz8/CiAgICAgKiA/CT8iCiAgICAgKiAgICAgfQogICAgICogICAgIFsibWV0YWRhdGEiXT0+CiAgICAgKiAgICAgYXJyYXkoMikgewogICAgICogICAgICAgWyJ0dGwiXT0+CiAgICAgKiAgICAgICBpbnQoNDI5NDk2NzI5NSkKICAgICAqICAgICAgIFsiZ2VuZXJhdGlvbiJdPT4KICAgICAqICAgICAgIGludCg0KQogICAgICogICAgIH0KICAgICAqICAgICBbImJpbnMiXT0+CiAgICAgKiAgICAgYXJyYXkoMSkgewogICAgICogICAgICAgWyJlbWFpbCJdPT4KICAgICAqICAgICAgIHN0cmluZygxOSkgInRoaXNndXlAZXhhbXBsZS5jb20iCiAgICAgKiAgICAgfQogICAgICogICB9CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIEBwYXJhbSBhcnJheSAka2V5cyBhbiBhcnJheSBvZiBpbml0aWFsaXplZCBrZXlzLCBlYWNoIGtleSBhbiBhcnJheSB3aXRoIGtleXMgYFsnbnMnLCdzZXQnLCdrZXknXWAgb3IgYFsnbnMnLCdzZXQnLCdkaWdlc3QnXWAKICAgICAqIEBwYXJhbSBhcnJheSAmJHJlY29yZHMgYSBwYXNzLWJ5LXJlZmVyZW5jZSB2YXJpYWJsZSB3aGljaCB3aWxsIGhvbGQgYW4gYXJyYXkgb2YgcmVjb3JkIHZhbHVlcywgZWFjaCByZWNvcmQgYW4gYXJyYXkgb2YgYFsna2V5JywgJ21ldGFkYXRhJywgJ2JpbnMnXWAKICAgICAqIEBwYXJhbSBhcnJheSAkc2VsZWN0IG9ubHkgdGhlc2UgYmlucyBvdXQgb2YgdGhlIHJlY29yZCAob3B0aW9uYWwpCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcmVhZCBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6OlVTRV9CQVRDSF9ESVJFQ1QKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfQkFUQ0hfQ09OQ1VSUkVOVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TRU5EX1NFVF9OQU1FCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX0FMTE9XX0lOTElORQogICAgICogQHNlZSBBZXJvc3Bpa2U6OlVTRV9CQVRDSF9ESVJFQ1QgQWVyb3NwaWtlOjpVU0VfQkFUQ0hfRElSRUNUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfVE9UQUxfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBBZXJvc3Bpa2U6Ok1BWF9SRVRSSUVTIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPSyBBZXJvc3Bpa2U6Ok9LIGFuZCBlcnJvciBzdGF0dXMgY29kZXMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcigpIGVycm9yKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjplcnJvcm5vKCkgZXJyb3JubygpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6Z2V0KCkgZ2V0KCkKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1hbnkoYXJyYXkgJGtleXMsICYkcmVjb3JkcywgYXJyYXkgJHNlbGVjdCA9IFtdLCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgYSBiYXRjaCBvZiByZWNvcmRzIGV4aXN0cyBpbiB0aGUgZGF0YWJhc2UgYW5kIGZpbGwgJG1ldGRhdGEgd2l0aCB0aGUgcmVzdWx0cwogICAgICoKICAgICAqIENoZWNrcyBmb3IgdGhlIGV4aXN0ZW5jZSBhIGJhdGNoIG9mIGdpdmVuICprZXlzKiAoc2VlOiB7QHNlZSBBZXJvc3Bpa2U6OmV4aXN0cygpIGV4aXN0cygpfSksCiAgICAgKiBhbmQgcmV0dXJuIGFuIGluZGV4ZWQgYXJyYXkgbWF0Y2hpbmcgdGhlIG9yZGVyIG9mIHRoZSAqa2V5cyouCiAgICAgKiBOb24tZXhpc3RlbnQgcmVjb3JkcyB3aWxsIGhhdmUgYE5VTExgIGZvciB0aGVpciAqbWV0YWRhdGEqLgogICAgICoKICAgICAqICoqTm90ZSoqIHRoYXQgdGhlIHByb3RvY29sIGV4aXN0c01hbnkoKSB3aWxsIHVzZSAoYmF0Y2gtZGlyZWN0IG9yIGJhdGNoLWluZGV4KQogICAgICogaXMgY29uZmlndXJhYmxlIHRocm91Z2ggdGhlIGNvbmZpZyBwYXJhbWV0ZXIgYEFlcm9zcGlrZTo6VVNFX0JBVENIX0RJUkVDVGAKICAgICAqIG9yIGBwaHAuaW5pYCBjb25maWcgcGFyYW1ldGVyIGBhZXJvc3Bpa2UudXNlX2JhdGNoX2RpcmVjdGAuCiAgICAgKiBCeSBkZWZhdWx0IGJhdGNoLWluZGV4IGlzIHVzZWQgd2l0aCBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCBpdCAodmVyc2lvbiA+PSAzLjYuMCkuCiAgICAgKgogICAgICogKipFeGFtcGxlICMxIEFlcm9zcGlrZTo6ZXhpc3RzTWFueSgpIGRlZmF1bHQgYmVoYXZpb3IgZXhhbXBsZSoqCiAgICAgKiBgYGBwaHAKICAgICAqICRjb25maWcgPSBbImhvc3RzIiA9PiBbWyJhZGRyIj0+ImxvY2FsaG9zdCIsICJwb3J0Ij0+MzAwMF1dLCAic2htIj0+W11dOwogICAgICogJGNsaWVudCA9IG5ldyBBZXJvc3Bpa2UoJGNvbmZpZywgdHJ1ZSk7CiAgICAgKiBpZiAoISRjbGllbnQtPmlzQ29ubmVjdGVkKCkpIHsKICAgICAqICAgIGVjaG8gIkFlcm9zcGlrZSBmYWlsZWQgdG8gY29ubmVjdFt7JGNsaWVudC0+ZXJyb3JubygpfV06IHskY2xpZW50LT5lcnJvcigpfVxuIjsKICAgICAqICAgIGV4aXQoMSk7CiAgICAgKiB9CiAgICAgKgogICAgICogJGtleTEgPSAkY2xpZW50LT5pbml0S2V5KCJ0ZXN0IiwgInVzZXJzIiwgMTIzNCk7CiAgICAgKiAka2V5MiA9ICRjbGllbnQtPmluaXRLZXkoInRlc3QiLCAidXNlcnMiLCAxMjM1KTsgLy8gdGhpcyBrZXkgZG9lcyBub3QgZXhpc3QKICAgICAqICRrZXkzID0gJGNsaWVudC0+aW5pdEtleSgidGVzdCIsICJ1c2VycyIsIDEyMzYpOwogICAgICogJGtleXMgPSBhcnJheSgka2V5MSwgJGtleTIsICRrZXkzKTsKICAgICAqICRzdGF0dXMgPSAkY2xpZW50LT5leGlzdHNNYW55KCRrZXlzLCAkbWV0YWRhdGEpOwogICAgICogaWYgKCRzdGF0dXMgPT0gQWVyb3NwaWtlOjpPSykgewogICAgICogICAgIHZhcl9kdW1wKCRyZWNvcmRzKTsKICAgICAqIH0gZWxzZSB7CiAgICAgKiAgICAgZWNobyAiW3skY2xpZW50LT5lcnJvcm5vKCl9XSAiLiRjbGllbnQtPmVycm9yKCk7CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIGBgYAogICAgICogYXJyYXkoMykgewogICAgICogICBbMF09PgogICAgICogICBhcnJheSgzKSB7CiAgICAgKiAgICAgWyJrZXkiXT0+CiAgICAgKiAgICAgYXJyYXkoNCkgewogICAgICogICAgICAgWyJucyJdPT4KICAgICAqICAgICAgIHN0cmluZyg0KSAidGVzdCIKICAgICAqICAgICAgIFsic2V0Il09PgogICAgICogICAgICAgc3RyaW5nKDUpICJ1c2VycyIKICAgICAqICAgICAgIFsia2V5Il09PgogICAgICogICAgICAgaW50KDEyMzQpCiAgICAgKiAgICAgICBbImRpZ2VzdCJdPT4KICAgICAqICAgICAgIHN0cmluZygyMCkgIk0/djJLcD8/PwogICAgICoKICAgICAqID9bPz80P3YKICAgICAqICAgICB9CiAgICAgKiAgICAgWyJtZXRhZGF0YSJdPT4KICAgICAqICAgICBhcnJheSgyKSB7CiAgICAgKiAgICAgICBbInR0bCJdPT4KICAgICAqICAgICAgIGludCg0Mjk0OTY3Mjk1KQogICAgICogICAgICAgWyJnZW5lcmF0aW9uIl09PgogICAgICogICAgICAgaW50KDEpCiAgICAgKiAgICAgfQogICAgICogICB9CiAgICAgKiAgIFsxXT0+CiAgICAgKiAgIGFycmF5KDMpIHsKICAgICAqICAgICBbImtleSJdPT4KICAgICAqICAgICBhcnJheSg0KSB7CiAgICAgKiAgICAgICBbIm5zIl09PgogICAgICogICAgICAgc3RyaW5nKDQpICJ0ZXN0IgogICAgICogICAgICAgWyJzZXQiXT0+CiAgICAgKiAgICAgICBzdHJpbmcoNSkgInVzZXJzIgogICAgICogICAgICAgWyJrZXkiXT0+CiAgICAgKiAgICAgICBpbnQoMTIzNSkKICAgICAqICAgICAgIFsiZGlnZXN0Il09PgogICAgICogICAgICAgc3RyaW5nKDIwKSAiP0M/P1s/dndTPz/GqD8/Pz8/IgogICAgICogICAgIH0KICAgICAqICAgICBbIm1ldGFkYXRhIl09PgogICAgICogICAgIE5VTEwKICAgICAqICAgfQogICAgICogICBbMl09PgogICAgICogICBhcnJheSgzKSB7CiAgICAgKiAgICAgWyJrZXkiXT0+CiAgICAgKiAgICAgYXJyYXkoNCkgewogICAgICogICAgICAgWyJucyJdPT4KICAgICAqICAgICAgIHN0cmluZyg0KSAidGVzdCIKICAgICAqICAgICAgIFsic2V0Il09PgogICAgICogICAgICAgc3RyaW5nKDUpICJ1c2VycyIKICAgICAqICAgICAgIFsia2V5Il09PgogICAgICogICAgICAgaW50KDEyMzYpCiAgICAgKiAgICAgICBbImRpZ2VzdCJdPT4KICAgICAqICAgICAgIHN0cmluZygyMCkgIic/OT8KICAgICAqICAgICAgICAgICAgICAgICAgICAgICA/Pz8/Pz8KICAgICAqID8JPyIKICAgICAqICAgICB9CiAgICAgKiAgICAgWyJtZXRhZGF0YSJdPT4KICAgICAqICAgICBhcnJheSgyKSB7CiAgICAgKiAgICAgICBbInR0bCJdPT4KICAgICAqICAgICAgIGludCg0Mjk0OTY3Mjk1KQogICAgICogICAgICAgWyJnZW5lcmF0aW9uIl09PgogICAgICogICAgICAgaW50KDEpCiAgICAgKiAgICAgfQogICAgICogICB9CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIEBwYXJhbSBhcnJheSAka2V5cyBhbiBhcnJheSBvZiBpbml0aWFsaXplZCBrZXlzLCBlYWNoIGtleSBhbiBhcnJheSB3aXRoIGtleXMgYFsnbnMnLCdzZXQnLCdrZXknXWAgb3IgYFsnbnMnLCdzZXQnLCdkaWdlc3QnXWAKICAgICAqIEBwYXJhbSBhcnJheSAmJG1ldGFkYXRhIGEgcGFzcy1ieS1yZWZlcmVuY2UgYXJyYXkgb2YgbWV0YWRhdGEgdmFsdWVzLCBlYWNoIGFuIGFycmF5IG9mIGBbJ2tleScsICdtZXRhZGF0YSddYAogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIGFuIG9wdGlvbmFsIGFycmF5IG9mIHJlYWQgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpVU0VfQkFUQ0hfRElSRUNUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX01BWF9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX0JBVENIX0NPTkNVUlJFTlQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0VORF9TRVRfTkFNRQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9BTExPV19JTkxJTkUKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpVU0VfQkFUQ0hfRElSRUNUIEFlcm9zcGlrZTo6VVNFX0JBVENIX0RJUkVDVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T0sgQWVyb3NwaWtlOjpPSyBhbmQgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6ZXJyb3IoKSBlcnJvcigpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6ZXJyb3JubygpIGVycm9ybm8oKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OmV4aXN0cygpIGV4aXN0cygpCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGlzdHNNYW55KGFycmF5ICRrZXlzLCBhcnJheSAmJG1ldGFkYXRhLCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8vIFNjYW4gYW5kIFF1ZXJ5CgogICAgLyoqCiAgICAgKiBTY2FuIGEgbmFtZXNwYWNlIG9yIHNldAogICAgICoKICAgICAqIFNjYW4gYSBfbnMuc2V0XywgYW5kIGludm9rZSBhIGNhbGxiYWNrIGZ1bmN0aW9uICpyZWNvcmRfY2IqIG9uIGVhY2gKICAgICAqIHJlY29yZCBzdHJlYW1pbmcgYmFjayBmcm9tIHRoZSBjbHVzdGVyLgogICAgICoKICAgICAqIE9wdGlvbmFsbHkgc2VsZWN0IHRoZSBiaW5zIHRvIGJlIHJldHVybmVkLiBOb24tZXhpc3RlbnQgYmlucyBpbiB0aGlzIGxpc3Qgd2lsbCBhcHBlYXIgaW4gdGhlCiAgICAgKiByZWNvcmQgd2l0aCBhIE5VTEwgdmFsdWUuCiAgICAgKgogICAgICogYGBgcGhwCiAgICAgKiAkb3B0aW9ucyA9IFtBZXJvc3Bpa2U6Ok9QVF9TQ0FOX1BSSU9SSVRZID0+IEFlcm9zcGlrZTo6U0NBTl9QUklPUklUWV9NRURJVU1dOwogICAgICogJHByb2Nlc3NlZCA9IDA7CiAgICAgKiAkc3RhdHVzID0gJGNsaWVudC0+c2NhbigndGVzdCcsICd1c2VycycsIGZ1bmN0aW9uICgkcmVjb3JkKSB1c2UgKCYkcHJvY2Vzc2VkKSB7CiAgICAgKiAgICAgaWYgKCFpc19udWxsKCRyZWNvcmRbJ2JpbnMnXVsnZW1haWwnXSkpIGVjaG8gJHJlY29yZFsnYmlucyddWydlbWFpbCddLiJcbiI7CiAgICAgKiAgICAgaWYgKCRwcm9jZXNzZWQrKyA+IDE5KSByZXR1cm4gZmFsc2U7IC8vIGhhbHQgdGhlIHN0cmVhbSBieSByZXR1cm5pbmcgYSBmYWxzZQogICAgICogfSwgWydlbWFpbCddLCAkb3B0aW9ucyk7CiAgICAgKgogICAgICogdmFyX2R1bXAoJHN0YXR1cywgJHByb2Nlc3NlZCk7CiAgICAgKiBgYGAKICAgICAqIGBgYAogICAgICogZm9vQGV4YW1wbGUuY29tCiAgICAgKiA6CiAgICAgKiBiYXJAZXhhbXBsZS5jb20KICAgICAqIEkgdGhpbmsgYSBzYW1wbGUgb2YgMjAgcmVjb3JkcyBpcyBlbm91Z2gKICAgICAqIGBgYAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2FyY2hpdGVjdHVyZS9kYXRhLW1vZGVsLmh0bWwgQWVyb3NwaWtlIERhdGEgTW9kZWwKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9zY2FuLmh0bWwgU2NhbnMKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9vcGVyYXRpb25zL21hbmFnZS9zY2Fucy8gTWFuYWdpbmcgU2NhbnMKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkbnMgdGhlIG5hbWVzcGFjZQogICAgICogQHBhcmFtIHN0cmluZyAgICRzZXQgdGhlIHNldCB3aXRoaW4gdGhlIGdpdmVuIG5hbWVzcGFjZQogICAgICogQHBhcmFtIGNhbGxhYmxlICRyZWNvcmRfY2IgQSBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGZvciBlYWNoIHJlY29yZCBzdHJlYW1pbmcgYmFjayBmcm9tIHRoZSBjbHVzdGVyCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgJHNlbGVjdCBBbiBhcnJheSBvZiBiaW4gbmFtZXMgd2hpY2ggYXJlIHRoZSBzdWJzZXQgdG8gYmUgcmV0dXJuZWQKICAgICAqIEBwYXJhbSBhcnJheSAgICAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVAogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBtYXhpbXVtIHNvY2tldCBpZGxlIHRpbWUgaW4gbWlsbGlzZWNvbmRzICgwIG1lYW5zIGRvIG5vdCBhcHBseSBhIHNvY2tldCBpZGxlIHRpbWVvdXQpCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NDQU5fUFJJT1JJVFkKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0NBTl9QRVJDRU5UQUdFIG9mIHRoZSByZWNvcmRzIGluIHRoZSBzZXQgdG8gcmV0dXJuCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NDQU5fQ09OQ1VSUkVOVExZIHdoZXRoZXIgdG8gcnVuIHRoZSBzY2FuIGluIHBhcmFsbGVsCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NDQU5fTk9CSU5TIHdoZXRoZXIgdG8gbm90IHJldHJpZXZlIGJpbnMgZm9yIHRoZSByZWNvcmRzCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NDQU5fUlBTX0xJTUlUIGxpbWl0IHRoZSBzY2FuIHRvIHByb2Nlc3MgT1BUX1NDQU5fUlBTX0xJTUlUIHBlciBzZWNvbmQuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBvcGVyYXRpb24uIENvbXBhcmUgdG8gdGhlIEFlcm9zcGlrZSBjbGFzcyBzdGF0dXMgY29uc3RhbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2NhbigkbnMsICRzZXQsIGNhbGxhYmxlICRyZWNvcmRfY2IsIGFycmF5ICRzZWxlY3QgPSBbXSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIFF1ZXJ5IGEgc2Vjb25kYXJ5IGluZGV4IG9uIGEgbmFtZXNwYWNlIG9yIHNldAogICAgICoKICAgICAqIFF1ZXJ5IGEgX25zLnNldF8gd2l0aCBhIHNwZWNpZmllZCBwcmVkaWNhdGUsIGFuZCBpbnZva2UgYSBjYWxsYmFjayBmdW5jdGlvbiAqcmVjb3JkX2NiKiBvbiBlYWNoCiAgICAgKiByZWNvcmQgbWF0Y2hlZCBieSB0aGUgcXVlcnkgYW5kIHN0cmVhbWluZyBiYWNrIGZyb20gdGhlIGNsdXN0ZXIuCiAgICAgKgogICAgICogT3B0aW9uYWxseSBzZWxlY3QgdGhlIGJpbnMgdG8gYmUgcmV0dXJuZWQuIE5vbi1leGlzdGVudCBiaW5zIGluIHRoaXMgbGlzdCB3aWxsIGFwcGVhciBpbiB0aGUKICAgICAqIHJlY29yZCB3aXRoIGEgTlVMTCB2YWx1ZS4KICAgICAqCiAgICAgKiBgYGBwaHAKICAgICAqICRyZXN1bHQgPSBbXTsKICAgICAqICR3aGVyZSA9IEFlcm9zcGlrZTo6cHJlZGljYXRlQmV0d2VlbigiYWdlIiwgMzAsIDM5KTsKICAgICAqICRzdGF0dXMgPSAkY2xpZW50LT5xdWVyeSgidGVzdCIsICJ1c2VycyIsICR3aGVyZSwgZnVuY3Rpb24gKCRyZWNvcmQpIHVzZSAoJiRyZXN1bHQpIHsKICAgICAqICAgICAkcmVzdWx0W10gPSAkcmVjb3JkWydiaW5zJ107CiAgICAgKiB9KTsKICAgICAqIGlmICgkc3RhdHVzICE9PSBBZXJvc3Bpa2U6Ok9LKSB7CiAgICAgKiAgICAgZWNobyAiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSBxdWVyeWluZ1t7JGNsaWVudC0+ZXJyb3JubygpfV0geyRjbGllbnQtPmVycm9yKCl9XG4iOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJUaGUgcXVlcnkgcmV0dXJuZWQgIi5jb3VudCgkcmVzdWx0KS4iIHJlY29yZHNcbiI7CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIGBgYAogICAgICogZm9vQGV4YW1wbGUuY29tCiAgICAgKiA6CiAgICAgKiBiYXJAZXhhbXBsZS5jb20KICAgICAqIEkgdGhpbmsgYSBzYW1wbGUgb2YgMjAgcmVjb3JkcyBpcyBlbm91Z2gKICAgICAqIGBgYAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2FyY2hpdGVjdHVyZS9kYXRhLW1vZGVsLmh0bWwgQWVyb3NwaWtlIERhdGEgTW9kZWwKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9xdWVyeS5odG1sIFF1ZXJ5CiAgICAgKiBAbGluayBodHRwczovL3d3dy5hZXJvc3Bpa2UuY29tL2RvY3Mvb3BlcmF0aW9ucy9tYW5hZ2UvcXVlcmllcy9pbmRleC5odG1sIE1hbmFnaW5nIFF1ZXJpZXMKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkbnMgdGhlIG5hbWVzcGFjZQogICAgICogQHBhcmFtIHN0cmluZyAgICRzZXQgdGhlIHNldCB3aXRoaW4gdGhlIGdpdmVuIG5hbWVzcGFjZQogICAgICogQHBhcmFtIGFycmF5ICR3aGVyZSB0aGUgcHJlZGljYXRlIGZvciB0aGUgcXVlcnksIHVzdWFsbHkgY3JlYXRlZCBieSB0aGUKICAgICAqIHByZWRpY2F0ZSBoZWxwZXIgbWV0aG9kcy4gVGhlIGFycmF5cyBjb25mb3JtIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICAgICogYGBgCiAgICAgKiBBcnJheToKICAgICAqICAgYmluID0+IGJpbiBuYW1lCiAgICAgKiAgIG9wID0+IG9uZSBvZiBBZXJvc3Bpa2U6Ok9QX0VRLCBBZXJvc3Bpa2U6Ok9QX0JFVFdFRU4sIEFlcm9zcGlrZTo6T1BfQ09OVEFJTlMsIEFlcm9zcGlrZTo6T1BfUkFOR0UsIGV0YwogICAgICogICB2YWwgPT4gc2NhbGFyIGludGVnZXIvc3RyaW5nIGZvciBPUF9FUSBhbmQgT1BfQ09OVEFJTlMgb3IgWyRtaW4sICRtYXhdIGZvciBPUF9CRVRXRUVOIGFuZCBPUF9SQU5HRQogICAgICoKICAgICAqIG9yIGFuIGVtcHR5IGFycmF5KCkgZm9yIG5vIHByZWRpY2F0ZQogICAgICogYGBgCiAgICAgKiBleGFtcGxlcwogICAgICogYGBgCiAgICAgKiBbImJpbiI9PiJuYW1lIiwgIm9wIj0+QWVyb3NwaWtlOjpPUF9FUSwgInZhbCI9PiJmb28iXQogICAgICogWyJiaW4iPT4iYWdlIiwgIm9wIj0+QWVyb3NwaWtlOjpPUF9CRVRXRUVOLCAidmFsIj0+WzM1LDUwXV0KICAgICAqIFsiYmluIj0+Im1vdmllcyIsICJvcCI9PkFlcm9zcGlrZTo6T1BfQ09OVEFJTlMsICJ2YWwiPT4iMTIgTW9ua2V5cyJdCiAgICAgKiBbImJpbiI9PiJtb3ZpZXMiLCAib3AiPT5BZXJvc3Bpa2U6Ok9QX1JBTkdFLCAidmFsIj0+WzEwLDEwMDBdXQogICAgICogW10gLy8gbm8gcHJlZGljYXRlCiAgICAgKiBgYGAKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkcmVjb3JkX2NiIEEgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBmb3IgZWFjaCByZWNvcmQgc3RyZWFtaW5nIGJhY2sgZnJvbSB0aGUgY2x1c3RlcgogICAgICogQHBhcmFtIGFycmF5ICAgICRzZWxlY3QgQW4gYXJyYXkgb2YgYmluIG5hbWVzIHdoaWNoIGFyZSB0aGUgc3Vic2V0IHRvIGJlIHJldHVybmVkCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUVVFUllfTk9CSU5TCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6cHJlZGljYXRlRXF1YWxzKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpwcmVkaWNhdGVCZXR3ZWVuKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpwcmVkaWNhdGVDb250YWlucygpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6cHJlZGljYXRlUmFuZ2UoKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OnByZWRpY2F0ZUdlb0NvbnRhaW5zR2VvSlNPTlBvaW50KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpwcmVkaWNhdGVHZW9XaXRoaW5HZW9KU09OUmVnaW9uKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpwcmVkaWNhdGVHZW9Db250YWluc1BvaW50KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpwcmVkaWNhdGVHZW9XaXRoaW5SYWRpdXMoKQogICAgICogQHJldHVybiBpbnQgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBvcGVyYXRpb24uIENvbXBhcmUgdG8gdGhlIEFlcm9zcGlrZSBjbGFzcyBzdGF0dXMgY29uc3RhbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVlcnkoJG5zLCAkc2V0LCBhcnJheSAkd2hlcmUsIGNhbGxhYmxlICRyZWNvcmRfY2IsIGFycmF5ICRzZWxlY3QgPSBbXSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIGFuIEVRVUFMUyBwcmVkaWNhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICRiaW4gbmFtZQogICAgICogQHBhcmFtIGludHxzdHJpbmcgJHZhbAogICAgICogQHNlZSBBZXJvc3Bpa2U6OnF1ZXJ5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpxdWVyeUFwcGx5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjphZ2dyZWdhdGUoKQogICAgICogQHJldHVybiBhcnJheSBleHByZXNzaW5nIHRoZSBwcmVkaWNhdGUsIHRvIGJlIHVzZWQgYnkgcXVlcnkoKSwgcXVlcnlBcHBseSgpIG9yIGFnZ3JlZ2F0ZSgpCiAgICAgKiBgYGAKICAgICAqIEFzc29jaWF0aXZlIEFycmF5OgogICAgICogICBiaW4gPT4gYmluIG5hbWUKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9FUQogICAgICogICB2YWwgPT4gc2NhbGFyIGludGVnZXIvc3RyaW5nIHZhbHVlCiAgICAgKiBgYGAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcmVkaWNhdGVFcXVhbHMoJGJpbiwgJHZhbCkge30KCiAgICAvKioKICAgICAqIEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIGEgQkVUV0VFTiBwcmVkaWNhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbiBuYW1lCiAgICAgKiBAcGFyYW0gaW50ICAgICRtaW4KICAgICAqIEBwYXJhbSBpbnQgICAgJG1heAogICAgICogQHNlZSBBZXJvc3Bpa2U6OnF1ZXJ5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpxdWVyeUFwcGx5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjphZ2dyZWdhdGUoKQogICAgICogQHJldHVybiBhcnJheSBleHByZXNzaW5nIHRoZSBwcmVkaWNhdGUsIHRvIGJlIHVzZWQgYnkgcXVlcnkoKSwgcXVlcnlBcHBseSgpIG9yIGFnZ3JlZ2F0ZSgpCiAgICAgKiBgYGAKICAgICAqIEFzc29jaWF0aXZlIEFycmF5OgogICAgICogICBiaW4gPT4gYmluIG5hbWUKICAgICAqICAgb3AgID0+IEFlcm9zcGlrZTo6T1BfQkVUV0VFTgogICAgICogICB2YWwgPT4gW21pbiwgbWF4XQogICAgICogYGBgCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJlZGljYXRlQmV0d2VlbigkYmluLCAkbWluLCAkbWF4KSB7fQoKICAgIC8qKgogICAgICogSGVscGVyIG1ldGhvZCBmb3IgY3JlYXRpbmcgYW4gQ09OVEFJTlMgcHJlZGljYXRlCiAgICAgKgogICAgICogU2ltaWxhciB0byBwcmVkaWNhdGVFcXVhbHMoKSwgcHJlZGljYXRlQ29udGFpbnMoKSBsb29rcyBmb3IgYW4gZXhhY3QKICAgICAqIG1hdGNoIG9mIGEgdmFsdWUgaW5zaWRlIGEgY29tcGxleCB0eXBlIC0gYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHZhbHVlCiAgICAgKiAoaWYgdGhlIGluZGV4IHR5cGUgaXMgKklOREVYX1RZUEVfTElTVCopLCB0aGUgdmFsdWUgY29udGFpbmVkIGluIHRoZSBrZXlzCiAgICAgKiBvZiBhIG1hcCAoaWYgdGhlIGluZGV4IHR5cGUgaXMgKklOREVYX1RZUEVfTUFQS0VZUyopLCBvciBhIHJlY29yZCB3aXRoIHRoZQogICAgICogZ2l2ZW4gdmFsdWUgY29udGFpbmVkIGluIHRoZSB2YWx1ZXMgb2YgYSBtYXAgKGlmIHRoZSBpbmRleCB0eXBlIHdhcwogICAgICogKklOREVYX1RZUEVfTUFQVkFMVUVTKikuCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAkYmluIG5hbWUKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICRpbmRleF90eXBlIG9uZSBvZiBBZXJvc3Bpa2U6OklOREVYX1RZUEVfKgogICAgICogQHBhcmFtIGludHxzdHJpbmcgJHZhbAogICAgICogQHNlZSBBZXJvc3Bpa2U6OnF1ZXJ5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpxdWVyeUFwcGx5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjphZ2dyZWdhdGUoKQogICAgICogQHJldHVybiBhcnJheSBleHByZXNzaW5nIHRoZSBwcmVkaWNhdGUsIHRvIGJlIHVzZWQgYnkgcXVlcnkoKSwgcXVlcnlBcHBseSgpIG9yIGFnZ3JlZ2F0ZSgpCiAgICAgKiBgYGAKICAgICAqIEFzc29jaWF0aXZlIEFycmF5OgogICAgICogICBiaW4gPT4gYmluIG5hbWUKICAgICAqICAgaW5kZXhfdHlwZSA9PiBBZXJvc3Bpa2U6OklOREVYX1RZUEVfKgogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QX0NPTlRBSU5TCiAgICAgKiAgIHZhbCA9PiBzY2FsYXIgaW50ZWdlci9zdHJpbmcgdmFsdWUKICAgICAqIGBgYAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHByZWRpY2F0ZUNvbnRhaW5zKCRiaW4sICRpbmRleF90eXBlLCAkdmFsKSB7fQoKICAgIC8qKgogICAgICogSGVscGVyIG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBSQU5HRSBwcmVkaWNhdGUKICAgICAqCiAgICAgKiBTaW1pbGFyIHRvIHByZWRpY2F0ZUJldHdlZW4oKSwgcHJlZGljYXRlUmFuZ2UoKSBsb29rcyBmb3IgcmVjb3JkcyB3aXRoIGEKICAgICAqIHJhbmdlIG9mIHZhbHVlcyBpbnNpZGUgYSBjb21wbGV4IHR5cGUgLSBhIGxpc3QgY29udGFpbmluZyB0aGUgdmFsdWVzCiAgICAgKiAoaWYgdGhlIGluZGV4IHR5cGUgaXMgKklOREVYX1RZUEVfTElTVCopLCB0aGUgdmFsdWVzIGNvbnRhaW5lZCBpbiB0aGUga2V5cwogICAgICogb2YgYSBtYXAgKGlmIHRoZSBpbmRleCB0eXBlIGlzICpJTkRFWF9UWVBFX01BUEtFWVMqKSwgb3IgYSByZWNvcmQgd2l0aCB0aGUKICAgICAqIGdpdmVuIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIHZhbHVlcyBvZiBhIG1hcCAoaWYgdGhlIGluZGV4IHR5cGUgd2FzCiAgICAgKiAqSU5ERVhfVFlQRV9NQVBWQUxVRVMqKQogICAgICogQHBhcmFtIHN0cmluZyAkYmluIG5hbWUKICAgICAqIEBwYXJhbSBpbnQgICAgJGluZGV4X3R5cGUgb25lIG9mIEFlcm9zcGlrZTo6SU5ERVhfVFlQRV8qCiAgICAgKiBAcGFyYW0gaW50ICAgICRtaW4KICAgICAqIEBwYXJhbSBpbnQgICAgJG1heAogICAgICogQHNlZSBBZXJvc3Bpa2U6OnF1ZXJ5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpxdWVyeUFwcGx5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjphZ2dyZWdhdGUoKQogICAgICogQHJldHVybiBhcnJheSBleHByZXNzaW5nIHRoZSBwcmVkaWNhdGUsIHRvIGJlIHVzZWQgYnkgcXVlcnkoKSwgcXVlcnlBcHBseSgpIG9yIGFnZ3JlZ2F0ZSgpCiAgICAgKiBgYGAKICAgICAqIEFzc29jaWF0aXZlIEFycmF5OgogICAgICogICBiaW4gPT4gYmluIG5hbWUKICAgICAqICAgaW5kZXhfdHlwZSA9PiBBZXJvc3Bpa2U6OklOREVYX1RZUEVfKgogICAgICogICBvcCAgPT4gQWVyb3NwaWtlOjpPUF9CRVRXRUVOCiAgICAgKiAgIHZhbCA9PiBbbWluLCBtYXhdCiAgICAgKiBgYGAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcmVkaWNhdGVSYW5nZSgkYmluLCAkaW5kZXhfdHlwZSwgJG1pbiwgJG1heCkge30KCiAgICAvKioKICAgICAqIEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIGEgR0VPQ09OVEFJTlMgcG9pbnQgcHJlZGljYXRlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiaW4gbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkcG9pbnQgR2VvSlNPTiBzdHJpbmcgZGVzY3JpYmluZyBhIHBvaW50CiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6cXVlcnkoKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OnF1ZXJ5QXBwbHkoKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OmFnZ3JlZ2F0ZSgpCiAgICAgKiBAcmV0dXJuIGFycmF5IGV4cHJlc3NpbmcgdGhlIHByZWRpY2F0ZSwgdG8gYmUgdXNlZCBieSBxdWVyeSgpLCBxdWVyeUFwcGx5KCkgb3IgYWdncmVnYXRlKCkKICAgICAqIGBgYAogICAgICogQXNzb2NpYXRpdmUgQXJyYXk6CiAgICAgKiAgIGJpbiA9PiBiaW4gbmFtZQogICAgICogICBvcCA9PiBBZXJvc3Bpa2U6Ok9QX0dFT0NPTlRBSU5TUE9JTlQKICAgICAqICAgdmFsID0+IEdlb0pTT04gc3RyaW5nCiAgICAgKiBgYGAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcmVkaWNhdGVHZW9Db250YWluc0dlb0pTT05Qb2ludCgkYmluLCAkcG9pbnQpIHt9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgbWV0aG9kIGZvciBjcmVhdGluZyBhIEdFT0NPTlRBSU5TIHBvaW50IHByZWRpY2F0ZQogICAgICogQHBhcmFtIHN0cmluZyAkYmluIG5hbWUKICAgICAqIEBwYXJhbSBmbG9hdCAgJGxvbmcgbG9uZ2l0dWRlIG9mIHRoZSBwb2ludAogICAgICogQHBhcmFtIGZsb2F0ICAkbGF0ICBsYXRpdHVkZSBvZiB0aGUgcG9pbnQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpxdWVyeSgpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6cXVlcnlBcHBseSgpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6YWdncmVnYXRlKCkKICAgICAqIEByZXR1cm4gYXJyYXkgZXhwcmVzc2luZyB0aGUgcHJlZGljYXRlLCB0byBiZSB1c2VkIGJ5IHF1ZXJ5KCksIHF1ZXJ5QXBwbHkoKSBvciBhZ2dyZWdhdGUoKQogICAgICogYGBgCiAgICAgKiBBc3NvY2lhdGl2ZSBBcnJheToKICAgICAqICAgYmluID0+IGJpbiBuYW1lCiAgICAgKiAgIG9wID0+IEFlcm9zcGlrZTo6T1BfR0VPQ09OVEFJTlNQT0lOVAogICAgICogICB2YWwgPT4gR2VvSlNPTiBzdHJpbmcgcHJvZHVjZWQgZnJvbSAkbG9uZyBhbmQgJGxhdAogICAgICogYGBgCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJlZGljYXRlR2VvQ29udGFpbnNQb2ludCgkYmluLCAkbG9uZywgJGxhdCkge30KCiAgICAvKioKICAgICAqIEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIGEgR0VPV0lUSElOIHJlZ2lvbiBwcmVkaWNhdGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbiBuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWdpb24gR2VvSlNPTiBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcmVnaW9uIChwb2x5Z29uKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OnF1ZXJ5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpxdWVyeUFwcGx5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjphZ2dyZWdhdGUoKQogICAgICogQHJldHVybiBhcnJheSBleHByZXNzaW5nIHRoZSBwcmVkaWNhdGUsIHRvIGJlIHVzZWQgYnkgcXVlcnkoKSwgcXVlcnlBcHBseSgpIG9yIGFnZ3JlZ2F0ZSgpCiAgICAgKiBgYGAKICAgICAqIEFzc29jaWF0aXZlIEFycmF5OgogICAgICogICBiaW4gPT4gYmluIG5hbWUKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9HRU9XSVRISU5SRUdJT04KICAgICAqICAgdmFsID0+IEdlb0pTT04gc3RyaW5nCiAgICAgKiBgYGAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcmVkaWNhdGVHZW9XaXRoaW5HZW9KU09OUmVnaW9uKCRiaW4sICRyZWdpb24pIHt9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgbWV0aG9kIGZvciBjcmVhdGluZyBhIEdFT1dJVEhJTiBjaXJjbGUgcmVnaW9uIHByZWRpY2F0ZQogICAgICogQHBhcmFtIHN0cmluZyAkYmluIG5hbWUKICAgICAqIEBwYXJhbSBmbG9hdCAgJGxvbmcgbG9uZ2l0dWRlIG9mIHRoZSBwb2ludAogICAgICogQHBhcmFtIGZsb2F0ICAkbGF0ICBsYXRpdHVkZSBvZiB0aGUgcG9pbnQKICAgICAqIEBwYXJhbSBmbG9hdCAgJHJhZGl1c01ldGVyIHJhZGl1cyBvZiB0aGUgY2lyY2xlIGluIG1ldGVycwogICAgICogQHNlZSBBZXJvc3Bpa2U6OnF1ZXJ5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpxdWVyeUFwcGx5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjphZ2dyZWdhdGUoKQogICAgICogQHJldHVybiBhcnJheSBleHByZXNzaW5nIHRoZSBwcmVkaWNhdGUsIHRvIGJlIHVzZWQgYnkgcXVlcnkoKSwgcXVlcnlBcHBseSgpIG9yIGFnZ3JlZ2F0ZSgpCiAgICAgKiBgYGAKICAgICAqIEFzc29jaWF0aXZlIEFycmF5OgogICAgICogICBiaW4gPT4gYmluIG5hbWUKICAgICAqICAgb3AgPT4gQWVyb3NwaWtlOjpPUF9HRU9XSVRISU5SRUdJT04KICAgICAqICAgdmFsID0+IEdlb0pTT04gc3RyaW5nIHByb2R1Y2VkIGZyb20gJGxvbmcsICRsYXQgYW5kICRyYWRpdXMKICAgICAqIGBgYAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHByZWRpY2F0ZUdlb1dpdGhpblJhZGl1cygkYmluLCAkbG9uZywgJGxhdCwgJHJhZGl1c01ldGVyKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBzdGF0dXMgb2YgYSBiYWNrZ3JvdW5kIGpvYiB0cmlnZ2VyZWQgYnkgQWVyb3NwaWtlOjpzY2FuQXBwbHkgb3IgQWVyb3NwaWtlOjpxdWVyeUFwcGx5CiAgICAgKgogICAgICogYGBgcGhwCiAgICAgKiAvLyBhZnRlciBhIHF1ZXJ5QXBwbHkoKSB3aGVyZSAkam9iX2lkIHdhcyBzZXQ6CiAgICAgKiBkbyB7CiAgICAgKiAgICAgdGltZV9uYW5vc2xlZXAoMCwgMzAwMDAwMDApOyAvLyBwYXVzZSAzMG1zCiAgICAgKiAgICAgJHN0YXR1cyA9ICRjbGllbnQtPmpvYkluZm8oJGpvYl9pZCwgQWVyb3NwaWtlOjpKT0JfUVVFUlksICRqb2JfaW5mbyk7CiAgICAgKiAgICAgdmFyX2R1bXAoJGpvYl9pbmZvKTsKICAgICAqIH0gd2hpbGUoJGpvYl9pbmZvWydzdGF0dXMnXSAhPSBBZXJvc3Bpa2U6OkpPQl9TVEFUVVNfQ09NUExFVEVEKTsKICAgICAqIGBgYAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgICAkam9iX2lkICBUaGUgSm9iIElECiAgICAgKiBAcGFyYW0gaW50ICAgJGpvYl90eXBlIFRoZSB0eXBlIG9mIHRoZSBqb2IsIGVpdGhlciBBZXJvc3Bpa2U6OkpPQl9RVUVSWSwgb3IgQWVyb3NwaWtlOjpKT0JfU0NBTgogICAgICogQHBhcmFtIGFycmF5ICYkaW5mbyAgICBUaGUgc3RhdHVzIG9mIHRoZSBiYWNrZ3JvdW5kIGpvYiBmaWxsZWQgKGJ5IHJlZmVyZW5jZSkgYXMgYW4gYXJyYXkgb2YKICAgICAqIGBgYAogICAgICogWwogICAgICogICAncHJvZ3Jlc3NfcGN0JyA9PiBwcm9ncmVzcyBwZXJjZW50YWdlIGZvciB0aGUgam9iCiAgICAgKiAgICdyZWNvcmRzX3JlYWQnID0+IG51bWJlciBvZiByZWNvcmRzIHJlYWQgYnkgdGhlIGpvYgogICAgICogICAnc3RhdHVzJyAgICAgICA9PiBvbmUgb2YgQWVyb3NwaWtlOjpTVEFUVVNfKgogICAgICogXQogICAgICogYGBgCiAgICAgKiBAcGFyYW0gYXJyYXkgICRvcHRpb25zIGFuIG9wdGlvbmFsIGFycmF5IG9mIHBvbGljeSBvcHRpb25zLCB3aG9zZSBrZXlzIGluY2x1ZGUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUkVBRF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6c2NhbkFwcGx5KCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpxdWVyeUFwcGx5KCkKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpvYkluZm8oJGpvYl9pZCwgJGpvYl90eXBlLCBhcnJheSAmJGluZm8sIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLy8gVURGIE1ldGhvZHMKCiAgICAvKioKICAgICAqIFJlZ2lzdGVyIGEgVURGIG1vZHVsZSB3aXRoIHRoZSBjbHVzdGVyCiAgICAgKgogICAgICogTm90ZSB0aGF0IG1vZHVsZXMgY29udGFpbmluZyBzdHJlYW0gVURGcyBuZWVkIHRvIGFsc28gYmUgY29waWVkIHRvIHRoZQogICAgICogcGF0aCBkZXNjcmliZWQgaW4gYGFlcm9zcGlrZS51ZGYubHVhX3VzZXJfcGF0aGAsIGFzIHRoZSBsYXN0IHJlZHVjZQogICAgICogaXRlcmF0aW9uIGlzIHJ1biBsb2NhbGx5IG9uIHRoZSBjbGllbnQgKGFmdGVyIHJlZHVjaW5nIG9uIGFsbCB0aGUgbm9kZXMKICAgICAqIG9mIHRoZSBjbHVzdGVyKS4KICAgICAqCiAgICAgKiBDdXJyZW50bHkgdGhlIG9ubHkgVURGIGxhbmd1YWdlIHN1cHBvcnRlZCBpcyBMdWEuCiAgICAgKiBgYGBwaHAKICAgICAqICRzdGF0dXMgPSAkY2xpZW50LT5yZWdpc3RlcignL3BhdGgvdG8vbXlfdWRmLmx1YScsICdteV91ZGYubHVhJyk7CiAgICAgKiBpZiAoJHN0YXR1cyA9PSBBZXJvc3Bpa2U6Ok9LKSB7CiAgICAgKiAgICAgZWNobyAiVURGIG1vZHVsZSBhdCAkcGF0aCBpcyByZWdpc3RlcmVkIGFzIG15X3VkZiBvbiB0aGUgQWVyb3NwaWtlIERCLlxuIjsKICAgICAqIH0gZWxzZSB7CiAgICAgKiAgICAgZWNobyAiW3skY2xpZW50LT5lcnJvcm5vKCl9XSAiLiRjbGllbnQtPmVycm9yKCk7CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy91ZGYvdWRmX2d1aWRlLmh0bWwgVURGIERldmVsb3BtZW50IEd1aWRlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHRoZSBwYXRoIHRvIHRoZSBMdWEgZmlsZSBvbiB0aGUgY2xpZW50LXNpZGUgbWFjaGluZQogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlIHRoZSBuYW1lIG9mIHRoZSBVREYgbW9kdWxlIHRvIHJlZ2lzdGVyIHdpdGggdGhlIGNsdXN0ZXIKICAgICAqIEBwYXJhbSBpbnQgICAgJGxhbmd1YWdlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRvcHRpb25zIGFuIG9wdGlvbmFsIGFycmF5IG9mIHBvbGljeSBvcHRpb25zLCB3aG9zZSBrZXlzIGluY2x1ZGUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVAogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9LIEFlcm9zcGlrZTo6T0sgYW5kIGVycm9yIHN0YXR1cyBjb2RlcwogICAgICogQHJldHVybiBpbnQgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBvcGVyYXRpb24uIENvbXBhcmUgdG8gdGhlIEFlcm9zcGlrZSBjbGFzcyBzdGF0dXMgY29uc3RhbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXIoJHBhdGgsICRtb2R1bGUsICRsYW5ndWFnZSA9IEFlcm9zcGlrZTo6VURGX1RZUEVfTFVBLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIGEgVURGIG1vZHVsZSBmcm9tIHRoZSBjbHVzdGVyCiAgICAgKgogICAgICogYGBgcGhwCiAgICAgKiAkc3RhdHVzID0gJGNsaWVudC0+ZGVyZWdpc3RlcignbXlfdWRmJyk7CiAgICAgKiBpZiAoJHN0YXR1cyA9PSBBZXJvc3Bpa2U6Ok9LKSB7CiAgICAgKiAgICAgZWNobyAiVURGIG1vZHVsZSBteV91ZGYgd2FzIHJlbW92ZWQgZnJvbSB0aGUgQWVyb3NwaWtlIERCLlxuIjsKICAgICAqIH0gZWxzZSB7CiAgICAgKiAgICAgZWNobyAiW3skY2xpZW50LT5lcnJvcm5vKCl9XSAiLiRjbGllbnQtPmVycm9yKCk7CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZSB0aGUgbmFtZSBvZiB0aGUgVURGIG1vZHVsZSByZWdpc3RlcmVkIHdpdGggdGhlIGNsdXN0ZXIKICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVAogICAgICogQHNlZSBBZXJvc3Bpa2U6OkVSUl9VREZfTk9UX0ZPVU5EIFVERiBlcnJvciBzdGF0dXMgY29kZXMKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlcmVnaXN0ZXIoJG1vZHVsZSwgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIExpc3QgdGhlIFVERiBtb2R1bGVzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY2x1c3RlcgogICAgICoKICAgICAqIFRoZSBtb2R1bGVzIGFycmF5IGhhcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKICAgICAqIGBgYAogICAgICogQXJyYXkgb2Y6CiAgICAgKiAgIG5hbWUgPT4gbW9kdWxlIG5hbWUKICAgICAqICAgdHlwZSA9PiBBZXJvc3Bpa2U6OlVERl9UWVBFXyoKICAgICAqIGBgYAogICAgICogKipFeGFtcGxlKioKICAgICAqIGBgYHBocAogICAgICogJHN0YXR1cyA9ICRjbGllbnQtPmxpc3RSZWdpc3RlcmVkKCRtb2R1bGVzKTsKICAgICAqIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICB2YXJfZHVtcCgkbW9kdWxlcyk7CiAgICAgKiB9IGVsc2UgewogICAgICogICAgIGVjaG8gIlt7JGNsaWVudC0+ZXJyb3JubygpfV0gIi4kY2xpZW50LT5lcnJvcigpOwogICAgICogfQogICAgICogYGBgCiAgICAgKiBgYGAKICAgICAqIGFycmF5KDIpIHsKICAgICAqICAgWzBdPT4KICAgICAqICAgYXJyYXkoMikgewogICAgICogICAgIFsibmFtZSJdPT4KICAgICAqICAgICBzdHJpbmcoMTMpICJteV9yZWNvcmRfdWRmIgogICAgICogICAgIFsidHlwZSJdPT4KICAgICAqICAgICBpbnQoMCkKICAgICAqICAgfQogICAgICogICBbMV09PgogICAgICogICBhcnJheSgyKSB7CiAgICAgKiAgICAgWyJuYW1lIl09PgogICAgICogICAgIHN0cmluZygxMykgIm15X3N0cmVhbV91ZGYiCiAgICAgKiAgICAgWyJ0eXBlIl09PgogICAgICogICAgIGludCgwKQogICAgICogICB9CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIEBwYXJhbSBhcnJheSAmJG1vZHVsZXMgcGFzcy1ieS1yZWZlcmVuY2UgcGFyYW0KICAgICAqIEBwYXJhbSBpbnQgICAkbGFuZ3VhZ2UKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVAogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQgQWVyb3NwaWtlOjpPUFRfUkVBRF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T0sgQWVyb3NwaWtlOjpPSyBhbmQgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0UmVnaXN0ZXJlZCgmJG1vZHVsZXMsICRsYW5ndWFnZSA9IEFlcm9zcGlrZTo6VURGX1RZUEVfTFVBLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb2RlIGZvciBhIFVERiBtb2R1bGUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBjbHVzdGVyCiAgICAgKgogICAgICogUG9wdWxhdGVzIF9jb2RlXyB3aXRoIHRoZSBjb250ZW50IG9mIHRoZSBtYXRjaGluZyBVREYgX21vZHVsZV8gdGhhdCB3YXMKICAgICAqIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBzZXJ2ZXIuCiAgICAgKgogICAgICogKipFeGFtcGxlKioKICAgICAqIGBgYHBocAogICAgICogJHN0YXR1cyA9ICRjbGllbnQtPmdldFJlZ2lzdGVyZWQoJ215X3VkZicsICRjb2RlKTsKICAgICAqIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICB2YXJfZHVtcCgkY29kZSk7CiAgICAgKiB9IGVsc2VpZiAoJHN0YXR1cyA9PSBBZXJvc3Bpa2U6OkVSUl9MVUFfRklMRV9OT1RfRk9VTkQpIHsKICAgICAqICAgICBlY2hvICJUaGUgVURGIG1vZHVsZSBteV91ZGYgd2FzIG5vdCBmb3VuZCB0byBiZSByZWdpc3RlcmVkIHdpdGggdGhlIHNlcnZlci5cbiI7CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIGBgYAogICAgICogc3RyaW5nKDM1MSkgImZ1bmN0aW9uIHN0YXJ0c3dpdGgocmVjLCBiaW5fbmFtZSwgcHJlZml4KQogICAgICogICBpZiBub3QgYWVyb3NwaWtlOmV4aXN0cyhyZWMpIHRoZW4KICAgICAqICAgICByZXR1cm4gZmFsc2UKICAgICAqICAgZW5kCiAgICAgKiAgIGlmIG5vdCBwcmVmaXggdGhlbgogICAgICogICAgIHJldHVybiB0cnVlCiAgICAgKiAgIGVuZAogICAgICogICBpZiBub3QgcmVjW2Jpbl9uYW1lXSB0aGVuCiAgICAgKiAgICAgcmV0dXJuIGZhbHNlCiAgICAgKiAgIGVuZAogICAgICogICBsb2NhbCBiaW5fdmFsID0gcmVjW2Jpbl9uYW1lXQogICAgICogICBsID0gcHJlZml4OmxlbigpCiAgICAgKiAgIGlmIGwgPiBiaW5fdmFsOmxlbigpIHRoZW4KICAgICAqICAgICByZXR1cm4gZmFsc2UKICAgICAqICAgZW5kCiAgICAgKiAgIHJldCA9IGJpbl92YWw6c3ViKDEsIGwpID09IHByZWZpeAogICAgICogICByZXR1cm4gcmV0CiAgICAgKiBlbmQKICAgICAqICIKICAgICAqIGBgYAogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlIHRoZSBuYW1lIG9mIHRoZSBVREYgbW9kdWxlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY2x1c3RlcgogICAgICogQHBhcmFtIHN0cmluZyAmJGNvZGUgcGFzcy1ieS1yZWZlcmVuY2UgcGFyYW0KICAgICAqIEBwYXJhbSBzdHJpbmcgJGxhbmd1YWdlCiAgICAgKiBAcGFyYW0gYXJyYXkgICRvcHRpb25zIGFuIG9wdGlvbmFsIGFycmF5IG9mIHBvbGljeSBvcHRpb25zLCB3aG9zZSBrZXlzIGluY2x1ZGUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUkVBRF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpFUlJfTFVBX0ZJTEVfTk9UX0ZPVU5EIFVERiBlcnJvciBzdGF0dXMgY29kZXMKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlZ2lzdGVyZWQoJG1vZHVsZSwgJiRjb2RlLCAkbGFuZ3VhZ2UgPSBBZXJvc3Bpa2U6OlVERl9UWVBFX0xVQSwgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIEFwcGx5IGEgVURGIHRvIGEgcmVjb3JkCiAgICAgKgogICAgICogQXBwbGllcyB0aGUgVURGIF9tb2R1bGUuZnVuY3Rpb25fIHRvIGEgcmVjb3JkIHdpdGggYSBnaXZlbiBfa2V5Xy4KICAgICAqIEFyZ3VtZW50cyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBVREYgYW5kIGFueSByZXR1cm5lZCB2YWx1ZSBvcHRpb25hbGx5IGNhcHR1cmVkLgogICAgICoKICAgICAqIEN1cnJlbnRseSB0aGUgb25seSBVREYgbGFuZ3VhZ2Ugc3VwcG9ydGVkIGlzIEx1YS4KICAgICAqIGBgYHBocAogICAgICogJGtleSA9IFsibnMiID0+ICJ0ZXN0IiwgInNldCIgPT4gInVzZXJzIiwgImtleSIgPT4gIjEyMzQiXTsKICAgICAqICRzdGF0dXMgPSAkY2xpZW50LT5hcHBseSgka2V5LCAnbXlfdWRmJywgJ3N0YXJ0c3dpdGgnLCBbJ2VtYWlsJywgJ2hleUAnXSwgJHJldHVybmVkKTsKICAgICAqIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICBpZiAoJHJldHVybmVkKSB7CiAgICAgKiAgICAgICAgIGVjaG8gIlRoZSBlbWFpbCBvZiB0aGUgdXNlciB3aXRoIGtleSB7JGtleVsna2V5J119IHN0YXJ0cyB3aXRoICdoZXlAJy5cbiI7CiAgICAgKiAgICAgfSBlbHNlIHsKICAgICAqICAgICAgICAgZWNobyAiVGhlIGVtYWlsIG9mIHRoZSB1c2VyIHdpdGgga2V5IHska2V5WydrZXknXX0gZG9lcyBub3Qgc3RhcnQgd2l0aCAnaGV5QCcuXG4iOwogICAgICogICAgIH0KICAgICAqIH0gZWxzZWlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6RVJSX1VERl9OT1RfRk9VTkQpIHsKICAgICAqICAgICBlY2hvICJUaGUgVURGIG1vZHVsZSBteV91ZGYubHVhIHdhcyBub3QgcmVnaXN0ZXJlZCB3aXRoIHRoZSBBZXJvc3Bpa2UgREIuXG4iOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBUaGUgZW1haWwgb2YgdGhlIHVzZXIgd2l0aCBrZXkgMTIzNCBzdGFydHMgd2l0aCAnaGV5QCcuCiAgICAgKiBgYGAKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy91ZGYvdWRmX2d1aWRlLmh0bWwgVURGIERldmVsb3BtZW50IEd1aWRlCiAgICAgKiBAbGluayBodHRwczovL3d3dy5hZXJvc3Bpa2UuY29tL2RvY3MvdWRmL2RldmVsb3BpbmdfcmVjb3JkX3VkZnMuaHRtbCBEZXZlbG9waW5nIFJlY29yZCBVREZzCiAgICAgKiBAbGluayBodHRwczovL3d3dy5hZXJvc3Bpa2UuY29tL2RvY3MvdWRmL2FwaV9yZWZlcmVuY2UuaHRtbCBMdWEgVURGIC0gQVBJIFJlZmVyZW5jZQogICAgICogQHBhcmFtIGFycmF5ICRrZXkgVGhlIGtleSBpZGVudGlmeWluZyB0aGUgcmVjb3JkLiBBbiBhcnJheSB3aXRoIGtleXMgYFsnbnMnLCdzZXQnLCdrZXknXWAgb3IgYFsnbnMnLCdzZXQnLCdkaWdlc3QnXWAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZSB0aGUgbmFtZSBvZiB0aGUgVURGIG1vZHVsZSByZWdpc3RlcmVkIHdpdGggdGhlIGNsdXN0ZXIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZ1bmN0aW9uIHRoZSBuYW1lIG9mIHRoZSBVREYKICAgICAqIEBwYXJhbSBhcnJheSAgJGFyZ3Mgb3B0aW9uYWwgYXJndW1lbnRzIGZvciB0aGUgVURGCiAgICAgKiBAcGFyYW0gbWl4ZWQgICYkcmV0dXJuZWQgcGFzcy1ieS1yZWZlcmVuY2UgcGFyYW0KICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9LRVkKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0VSSUFMSVpFUgogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfRFVSQUJMRV9ERUxFVEUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0tFWSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfS0VZIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU0VSSUFMSVpFUiBBZXJvc3Bpa2U6Ok9QVF9TRVJJQUxJWkVSIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0RVUkFCTEVfREVMRVRFIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6RVJSX0xVQSBVREYgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBseShhcnJheSAka2V5LCAkbW9kdWxlLCAkZnVuY3Rpb24sIGFycmF5ICRhcmdzID0gW10sICYkcmV0dXJuZWQgPSBudWxsLCAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogQXBwbHkgYSBVREYgdG8gZWFjaCByZWNvcmQgaW4gYSBzY2FuCiAgICAgKgogICAgICogU2NhbiB0aGUgKm5zLnNldCogYW5kIGFwcGx5IGEgVURGIF9tb2R1bGUuZnVuY3Rpb25fIHRvIGVhY2ggb2YgaXRzIHJlY29yZHMuCiAgICAgKiBBcmd1bWVudHMgY2FuIGJlIHBhc3NlZCB0byB0aGUgVURGIGFuZCBhbnkgcmV0dXJuZWQgdmFsdWUgb3B0aW9uYWxseSBjYXB0dXJlZC4KICAgICAqCiAgICAgKiBDdXJyZW50bHkgdGhlIG9ubHkgVURGIGxhbmd1YWdlIHN1cHBvcnRlZCBpcyBMdWEuCiAgICAgKiBgYGBwaHAKICAgICAqICRzdGF0dXMgPSAkY2xpZW50LT5zY2FuQXBwbHkoInRlc3QiLCAidXNlcnMiLCAibXlfdWRmIiwgIm15dHJhbnNmb3JtIiwgYXJyYXkoMjApLCAkam9iX2lkKTsKICAgICAqIGlmICgkc3RhdHVzID09PSBBZXJvc3Bpa2U6Ok9LKSB7CiAgICAgKiAgICAgdmFyX2R1bXAoIkpvYiBJRCBpcyAkam9iX2lkIik7CiAgICAgKiB9IGVsc2UgaWYgKCRzdGF0dXMgPT09IEFlcm9zcGlrZTo6RVJSX0NMSUVOVCkgewogICAgICogICAgIGVjaG8gIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgaW5pdGlhdGluZyB0aGUgQkFDS0dST1VORCBTQ0FOIFt7JGNsaWVudC0+ZXJyb3JubygpfV0gIi4kY2xpZW50LT5lcnJvcigpOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHJ1bm5pbmcgdGhlIEJBQ0tHUk9VTkQgU0NBTiBbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBzdHJpbmcoMTIpICJKb2IgSUQgaXMgMSIKICAgICAqIGBgYAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL3VkZi91ZGZfZ3VpZGUuaHRtbCBVREYgRGV2ZWxvcG1lbnQgR3VpZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy91ZGYvZGV2ZWxvcGluZ19yZWNvcmRfdWRmcy5odG1sIERldmVsb3BpbmcgUmVjb3JkIFVERnMKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy91ZGYvYXBpX3JlZmVyZW5jZS5odG1sIEx1YSBVREYgLSBBUEkgUmVmZXJlbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRucyB0aGUgbmFtZXNwYWNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXQgdGhlIHNldCB3aXRoaW4gdGhlIGdpdmVuIG5hbWVzcGFjZQogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlIHRoZSBuYW1lIG9mIHRoZSBVREYgbW9kdWxlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY2x1c3RlcgogICAgICogQHBhcmFtIHN0cmluZyAkZnVuY3Rpb24gdGhlIG5hbWUgb2YgdGhlIFVERgogICAgICogQHBhcmFtIGFycmF5ICAkYXJncyBvcHRpb25hbCBhcmd1bWVudHMgZm9yIHRoZSBVREYKICAgICAqIEBwYXJhbSBpbnQgICAgJiRqb2JfaWQgcGFzcy1ieS1yZWZlcmVuY2UgZmlsbGVkIGJ5IHRoZSBqb2IgSUQgb2YgdGhlIHNjYW4KICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfRkFJTF9PTl9DTFVTVEVSX0NIQU5HRQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9TQ0FOX1JQU19MSU1JVAogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1dSSVRFX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9QT0xJQ1lfRFVSQUJMRV9ERUxFVEUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0RVUkFCTEVfREVMRVRFIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpFUlJfTFVBIFVERiBlcnJvciBzdGF0dXMgY29kZXMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpqb2JJbmZvKCkKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNjYW5BcHBseSgkbnMsICRzZXQsICRtb2R1bGUsICRmdW5jdGlvbiwgYXJyYXkgJGFyZ3MsICYkam9iX2lkLCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogQXBwbHkgYSBVREYgdG8gZWFjaCByZWNvcmQgaW4gYSBxdWVyeQogICAgICoKICAgICAqIFF1ZXJ5IHRoZSAqbnMuc2V0KiB3aXRoIGEgcHJlZGljYXRlLCBhbmQgYXBwbHkgYSBVREYgX21vZHVsZS5mdW5jdGlvbl8KICAgICAqIHRvIGVhY2ggb2YgbWF0Y2hlZCByZWNvcmRzLgogICAgICogQXJndW1lbnRzIGNhbiBiZSBwYXNzZWQgdG8gdGhlIFVERiBhbmQgYW55IHJldHVybmVkIHZhbHVlIG9wdGlvbmFsbHkgY2FwdHVyZWQuCiAgICAgKgogICAgICogQ3VycmVudGx5IHRoZSBvbmx5IFVERiBsYW5ndWFnZSBzdXBwb3J0ZWQgaXMgTHVhLgogICAgICogYGBgcGhwCiAgICAgKiAkd2hlcmUgPSBBZXJvc3Bpa2U6OnByZWRpY2F0ZUJldHdlZW4oImFnZSIsIDMwLCAzOSk7CiAgICAgKiAkc3RhdHVzID0gJGNsaWVudC0+cXVlcnlBcHBseSgidGVzdCIsICJ1c2VycyIsICJteV91ZGYiLCAibXl0cmFuc2Zvcm0iLCBbMjBdLCAkam9iX2lkKTsKICAgICAqIGlmICgkc3RhdHVzID09PSBBZXJvc3Bpa2U6Ok9LKSB7CiAgICAgKiAgICAgdmFyX2R1bXAoIkpvYiBJRCBpcyAkam9iX2lkIik7CiAgICAgKiB9IGVsc2UgaWYgKCRzdGF0dXMgPT09IEFlcm9zcGlrZTo6RVJSX0NMSUVOVCkgewogICAgICogICAgIGVjaG8gIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgaW5pdGlhdGluZyB0aGUgQkFDS0dST1VORCBTQ0FOIFt7JGNsaWVudC0+ZXJyb3JubygpfV0gIi4kY2xpZW50LT5lcnJvcigpOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHJ1bm5pbmcgdGhlIEJBQ0tHUk9VTkQgU0NBTiBbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBzdHJpbmcoMTIpICJKb2IgSUQgaXMgMSIKICAgICAqIGBgYAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL3VkZi91ZGZfZ3VpZGUuaHRtbCBVREYgRGV2ZWxvcG1lbnQgR3VpZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy91ZGYvZGV2ZWxvcGluZ19yZWNvcmRfdWRmcy5odG1sIERldmVsb3BpbmcgUmVjb3JkIFVERnMKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy91ZGYvYXBpX3JlZmVyZW5jZS5odG1sIEx1YSBVREYgLSBBUEkgUmVmZXJlbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRucyB0aGUgbmFtZXNwYWNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXQgdGhlIHNldCB3aXRoaW4gdGhlIGdpdmVuIG5hbWVzcGFjZQogICAgICogQHBhcmFtIGFycmF5ICR3aGVyZSB0aGUgcHJlZGljYXRlIGZvciB0aGUgcXVlcnksIHVzdWFsbHkgY3JlYXRlZCBieSB0aGUKICAgICAqIHByZWRpY2F0ZSBtZXRob2RzLiBUaGUgYXJyYXlzIGNvbmZvcm0gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgICAgKiBgYGAKICAgICAqIEFycmF5OgogICAgICogICBiaW4gPT4gYmluIG5hbWUKICAgICAqICAgb3AgPT4gb25lIG9mIEFlcm9zcGlrZTo6T1BfRVEsIEFlcm9zcGlrZTo6T1BfQkVUV0VFTiwgQWVyb3NwaWtlOjpPUF9DT05UQUlOUywgQWVyb3NwaWtlOjpPUF9SQU5HRSwgZXRjCiAgICAgKiAgIHZhbCA9PiBzY2FsYXIgaW50ZWdlci9zdHJpbmcgZm9yIE9QX0VRIGFuZCBPUF9DT05UQUlOUyBvciBbJG1pbiwgJG1heF0gZm9yIE9QX0JFVFdFRU4gYW5kIE9QX1JBTkdFCiAgICAgKgogICAgICogb3IgYW4gZW1wdHkgYXJyYXkoKSBmb3Igbm8gcHJlZGljYXRlCiAgICAgKiBgYGAKICAgICAqIGV4YW1wbGVzCiAgICAgKiBgYGAKICAgICAqIFsiYmluIj0+Im5hbWUiLCAib3AiPT5BZXJvc3Bpa2U6Ok9QX0VRLCAidmFsIj0+ImZvbyJdCiAgICAgKiBbImJpbiI9PiJhZ2UiLCAib3AiPT5BZXJvc3Bpa2U6Ok9QX0JFVFdFRU4sICJ2YWwiPT5bMzUsNTBdXQogICAgICogWyJiaW4iPT4ibW92aWVzIiwgIm9wIj0+QWVyb3NwaWtlOjpPUF9DT05UQUlOUywgInZhbCI9PiIxMiBNb25rZXlzIl0KICAgICAqIFsiYmluIj0+Im1vdmllcyIsICJvcCI9PkFlcm9zcGlrZTo6T1BfUkFOR0UsICJ2YWwiPT5bMTAsMTAwMF1dCiAgICAgKiBbXSAvLyBubyBwcmVkaWNhdGUKICAgICAqIGBgYAogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlIHRoZSBuYW1lIG9mIHRoZSBVREYgbW9kdWxlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY2x1c3RlcgogICAgICogQHBhcmFtIHN0cmluZyAkZnVuY3Rpb24gdGhlIG5hbWUgb2YgdGhlIFVERgogICAgICogQHBhcmFtIGFycmF5ICAkYXJncyBvcHRpb25hbCBhcmd1bWVudHMgZm9yIHRoZSBVREYKICAgICAqIEBwYXJhbSBpbnQgICAgJiRqb2JfaWQgcGFzcy1ieS1yZWZlcmVuY2UgZmlsbGVkIGJ5IHRoZSBqb2IgSUQgb2YgdGhlIHNjYW4KICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfTUFYX1JFVFJJRVMKICAgICAqICogQWVyb3NwaWtlOjpPUFRfU09DS0VUX1RJTUVPVVQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUIG9wdGlvbnMKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfUE9MSUNZX0RVUkFCTEVfREVMRVRFIEFlcm9zcGlrZTo6T1BUX1BPTElDWV9EVVJBQkxFX0RFTEVURSBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUyBBZXJvc3Bpa2U6Ok9QVF9TTEVFUF9CRVRXRUVOX1JFVFJJRVMgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUIEFlcm9zcGlrZTo6T1BUX1RPVEFMX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9TT0NLRVRfVElNRU9VVCBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6TUFYX1JFVFJJRVMgQWVyb3NwaWtlOjpNQVhfUkVUUklFUyBvcHRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6RVJSX0xVQSBVREYgZXJyb3Igc3RhdHVzIGNvZGVzCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6am9iSW5mbygpCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBxdWVyeUFwcGx5KCRucywgJHNldCwgYXJyYXkgJHdoZXJlLCAkbW9kdWxlLCAkZnVuY3Rpb24sIGFycmF5ICRhcmdzLCAmJGpvYl9pZCwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIEFwcGx5IGEgc3RyZWFtIFVERiB0byBhIHNjYW4gb3Igc2Vjb25kYXJ5IGluZGV4IHF1ZXJ5CiAgICAgKgogICAgICogQXBwbHkgdGhlIFVERiBfbW9kdWxlLmZ1bmN0aW9uXyB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYSBzZWNvbmRhcnkKICAgICAqIGluZGV4IHF1ZXJ5IG9uIF9ucy5zZXRfLiBUaGUgYWdncmVnYXRlZCBfcmV0dXJuZWRfIHZhcmlhYmxlIGlzIHRoZW4KICAgICAqIGZpbGxlZCwgd2l0aCBpdHMgdHlwZSBkZXBlbmRpbmcgb24gdGhlIFVERi4gSXQgbWF5IGJlIGEgc3RyaW5nLCBpbnRlZ2VyCiAgICAgKiBvciBhcnJheSwgYW5kIHBvdGVudGlhbGx5IGFuIGFycmF5IG9mIGFycmF5cywgc3VjaCBhcyBpbiB0aGUgY2FzZSB0aGUKICAgICAqIFVERiBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVkdWNlciBhbmQgdGhlcmUgYXJlIG11bHRpcGxlIG5vZGVzIGluIHRoZQogICAgICogY2x1c3RlciwgZWFjaCBzZW5kaW5nIGJhY2sgdGhlIHJlc3VsdCBvZiBpdHMgb3duIGFnZ3JlZ2F0aW9uLgogICAgICoKICAgICAqIEFzIHdpdGggcXVlcnkoKSwgaWYgYW4gZW1wdHkgYXJyYXkgaXMgZ2l2ZW4gYXMgdGhlIF93aGVyZV8gcHJlZGljYXRlIGEKICAgICAqICdzY2FuIGFnZ3JlZ2F0aW9uJyBpcyBpbml0aWF0ZWQgaW5zdGVhZCBvZiBhIHF1ZXJ5LCB3aGljaCBtZWFucyB0aGUKICAgICAqIHN0cmVhbSBVREYgaXMgYXBwbGllZCB0byBhbGwgdGhlIHJlY29yZHMgcmV0dXJuZWQgYnkgdGhlIHNjYW4uCiAgICAgKgogICAgICogKipOb3RlKiogdGhhdCBtb2R1bGVzIGNvbnRhaW5pbmcgc3RyZWFtIFVERnMgbmVlZCB0byBhbHNvIGJlIGNvcGllZCB0byB0aGUKICAgICAqIHBhdGggZGVzY3JpYmVkIGluIGBhZXJvc3Bpa2UudWRmLmx1YV91c2VyX3BhdGhgLCBhcyB0aGUgbGFzdCByZWR1Y2UKICAgICAqIGl0ZXJhdGlvbiBpcyBydW4gbG9jYWxseSBvbiB0aGUgY2xpZW50LCBhZnRlciByZWR1Y2luZyBvbiBhbGwgdGhlIG5vZGVzCiAgICAgKiBvZiB0aGUgY2x1c3Rlci4KICAgICAqCiAgICAgKiAqKk5vdGUqKiBhZ2dyZWdhdGUgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkIGluIFBIUCBidWlsdCB3aXRoIFpUUyBlbmFibGVkLgogICAgICogQXR0ZW1wdGluZyB0byB1c2UgaXQgaW4gdGhhdCBlbnZpcm9ubWVudCB3aWxsIGZhaWwuCiAgICAgKgogICAgICogQ3VycmVudGx5IHRoZSBvbmx5IFVERiBsYW5ndWFnZSBzdXBwb3J0ZWQgaXMgTHVhLgogICAgICoKICAgICAqICoqRXhhbXBsZSBTdHJlYW0gVURGKioKICAgICAqCiAgICAgKiBNb2R1bGUgcmVnaXN0ZXJlZCBhcyBzdHJlYW1fdWRmLmx1YQogICAgICogYGBgCiAgICAgKiBsb2NhbCBmdW5jdGlvbiBoYXZpbmdfZ2VfdGhyZXNob2xkKGJpbl9oYXZpbmcsIGdlX3RocmVzaG9sZCkKICAgICAqICAgICBkZWJ1ZygiZ3JvdXBfY291bnQ6OnRocmVzaF9maWx0ZXI6ICVzID4gICVzID8iLCB0b3N0cmluZyhyZWNbYmluX2hhdmluZ10pLCB0b3N0cmluZyhnZV90aHJlc2hvbGQpKQogICAgICogICAgIHJldHVybiBmdW5jdGlvbihyZWMpCiAgICAgKiAgICAgICAgIGlmIHJlY1tiaW5faGF2aW5nXSA8IGdlX3RocmVzaG9sZCB0aGVuCiAgICAgKiAgICAgICAgICAgICByZXR1cm4gZmFsc2UKICAgICAqICAgICAgICAgZW5kCiAgICAgKiAgICAgICAgIHJldHVybiB0cnVlCiAgICAgKiAgICAgZW5kCiAgICAgKiBlbmQKICAgICAqCiAgICAgKiBsb2NhbCBmdW5jdGlvbiBjb3VudChncm91cF9ieV9iaW4pCiAgICAgKiAgIHJldHVybiBmdW5jdGlvbihncm91cCwgcmVjKQogICAgICogICAgIGlmIHJlY1tncm91cF9ieV9iaW5dIHRoZW4KICAgICAqICAgICAgIGxvY2FsIGJpbl9uYW1lID0gcmVjW2dyb3VwX2J5X2Jpbl0KICAgICAqICAgICAgIGdyb3VwW2Jpbl9uYW1lXSA9IChncm91cFtiaW5fbmFtZV0gb3IgMCkgKyAxCiAgICAgKiAgICAgZW5kCiAgICAgKiAgICAgcmV0dXJuIGdyb3VwCiAgICAgKiAgIGVuZAogICAgICogZW5kCiAgICAgKgogICAgICogbG9jYWwgZnVuY3Rpb24gYWRkX3ZhbHVlcyh2YWwxLCB2YWwyKQogICAgICogICByZXR1cm4gdmFsMSArIHZhbDIKICAgICAqIGVuZAogICAgICoKICAgICAqIGxvY2FsIGZ1bmN0aW9uIHJlZHVjZV9ncm91cHMoYSwgYikKICAgICAqICAgcmV0dXJuIG1hcC5tZXJnZShhLCBiLCBhZGRfdmFsdWVzKQogICAgICogZW5kCiAgICAgKgogICAgICogZnVuY3Rpb24gZ3JvdXBfY291bnQoc3RyZWFtLCBncm91cF9ieV9iaW4sIGJpbl9oYXZpbmcsIGdlX3RocmVzaG9sZCkKICAgICAqICAgaWYgYmluX2hhdmluZyBhbmQgZ2VfdGhyZXNob2xkIHRoZW4KICAgICAqICAgICBsb2NhbCBteWZpbHRlciA9IGhhdmluZ19nZV90aHJlc2hvbGQoYmluX2hhdmluZywgZ2VfdGhyZXNob2xkKQogICAgICogICAgIHJldHVybiBzdHJlYW0gOiBmaWx0ZXIobXlmaWx0ZXIpIDogYWdncmVnYXRlKG1hcHt9LCBjb3VudChncm91cF9ieV9iaW4pKSA6IHJlZHVjZShyZWR1Y2VfZ3JvdXBzKQogICAgICogICBlbHNlCiAgICAgKiAgICAgcmV0dXJuIHN0cmVhbSA6IGFnZ3JlZ2F0ZShtYXB7fSwgY291bnQoZ3JvdXBfYnlfYmluKSkgOiByZWR1Y2UocmVkdWNlX2dyb3VwcykKICAgICAqICAgZW5kCiAgICAgKiBlbmQKICAgICAqIGBgYAogICAgICogKipFeGFtcGxlIG9mIGFnZ3JlZ2F0aW5nIGEgc3RyZWFtIFVERiB0byB0aGUgcmVzdWx0IG9mIGEgc2Vjb25kYXJ5IGluZGV4IHF1ZXJ5KioKICAgICAqIGBgYHBocAogICAgICogLy8gYXNzdW1pbmcgdGVzdC51c2VycyBoYXMgYSBiaW4gZmlyc3RfbmFtZSwgc2hvdyB0aGUgZmlyc3QgbmFtZSBkaXN0cmlidXRpb24KICAgICAqIC8vIGZvciB1c2VycyBpbiB0aGVpciB0d2VudGllcwogICAgICogJHdoZXJlID0gQWVyb3NwaWtlOjpwcmVkaWNhdGVCZXR3ZWVuKCJhZ2UiLCAyMCwgMjkpOwogICAgICogJHN0YXR1cyA9ICRjbGllbnQtPmFnZ3JlZ2F0ZSgidGVzdCIsICJ1c2VycyIsICR3aGVyZSwgInN0cmVhbV91ZGYiLCAiZ3JvdXBfY291bnQiLCBbImZpcnN0X25hbWUiXSwgJG5hbWVzKTsKICAgICAqIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6T0spIHsKICAgICAqICAgICB2YXJfZHVtcCgkbmFtZXMpOwogICAgICogfSBlbHNlIHsKICAgICAqICAgICBlY2hvICJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHJ1bm5pbmcgdGhlIEFHR1JFR0FURSBbeyRjbGllbnQtPmVycm9ybm8oKX1dICIuJGNsaWVudC0+ZXJyb3IoKTsKICAgICAqIH0KICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBhcnJheSg1KSB7CiAgICAgKiAgIFsiQ2xhdWRpbyJdPT4KICAgICAqICAgaW50KDEpCiAgICAgKiAgIFsiTWljaGFlbCJdPT4KICAgICAqICAgaW50KDMpCiAgICAgKiAgIFsiSmVubmlmZXIiXT0+CiAgICAgKiAgIGludCgyKQogICAgICogICBbIkplc3NpY2EiXT0+CiAgICAgKiAgIGludCgzKQogICAgICogICBbIkpvbmF0aGFuIl09PgogICAgICogICBpbnQoMykKICAgICAqIH0KICAgICAqIGBgYAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL3VkZi91ZGZfZ3VpZGUuaHRtbCBVREYgRGV2ZWxvcG1lbnQgR3VpZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy91ZGYvZGV2ZWxvcGluZ19zdHJlYW1fdWRmcy5odG1sIERldmVsb3BpbmcgU3RyZWFtIFVERnMKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9hZ2dyZWdhdGlvbi5odG1sIEFnZ3JlZ2F0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRucyB0aGUgbmFtZXNwYWNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXQgdGhlIHNldCB3aXRoaW4gdGhlIGdpdmVuIG5hbWVzcGFjZQogICAgICogQHBhcmFtIGFycmF5ICR3aGVyZSB0aGUgcHJlZGljYXRlIGZvciB0aGUgcXVlcnksIHVzdWFsbHkgY3JlYXRlZCBieSB0aGUKICAgICAqIHByZWRpY2F0ZSBtZXRob2RzLiBUaGUgYXJyYXlzIGNvbmZvcm0gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgICAgKiBgYGAKICAgICAqIEFycmF5OgogICAgICogICBiaW4gPT4gYmluIG5hbWUKICAgICAqICAgb3AgPT4gb25lIG9mIEFlcm9zcGlrZTo6T1BfRVEsIEFlcm9zcGlrZTo6T1BfQkVUV0VFTiwgQWVyb3NwaWtlOjpPUF9DT05UQUlOUywgQWVyb3NwaWtlOjpPUF9SQU5HRQogICAgICogICB2YWwgPT4gc2NhbGFyIGludGVnZXIvc3RyaW5nIGZvciBPUF9FUSBhbmQgT1BfQ09OVEFJTlMgb3IgWyRtaW4sICRtYXhdIGZvciBPUF9CRVRXRUVOIGFuZCBPUF9SQU5HRQogICAgICoKICAgICAqIG9yIGFuIGVtcHR5IGFycmF5KCkgZm9yIG5vIHByZWRpY2F0ZQogICAgICogYGBgCiAgICAgKiBleGFtcGxlcwogICAgICogYGBgCiAgICAgKiBbImJpbiI9PiJuYW1lIiwgIm9wIj0+QWVyb3NwaWtlOjpPUF9FUSwgInZhbCI9PiJmb28iXQogICAgICogWyJiaW4iPT4iYWdlIiwgIm9wIj0+QWVyb3NwaWtlOjpPUF9CRVRXRUVOLCAidmFsIj0+WzM1LDUwXV0KICAgICAqIFsiYmluIj0+Im1vdmllcyIsICJvcCI9PkFlcm9zcGlrZTo6T1BfQ09OVEFJTlMsICJ2YWwiPT4iMTIgTW9ua2V5cyJdCiAgICAgKiBbImJpbiI9PiJtb3ZpZXMiLCAib3AiPT5BZXJvc3Bpa2U6Ok9QX1JBTkdFLCAidmFsIj0+WzEwLDEwMDBdXQogICAgICogW10gLy8gbm8gcHJlZGljYXRlCiAgICAgKiBgYGAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZSB0aGUgbmFtZSBvZiB0aGUgVURGIG1vZHVsZSByZWdpc3RlcmVkIHdpdGggdGhlIGNsdXN0ZXIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZ1bmN0aW9uIHRoZSBuYW1lIG9mIHRoZSBVREYKICAgICAqIEBwYXJhbSBhcnJheSAgJGFyZ3Mgb3B0aW9uYWwgYXJndW1lbnRzIGZvciB0aGUgVURGCiAgICAgKiBAcGFyYW0gbWl4ZWQgICYkcmV0dXJuZWQgcGFzcy1ieS1yZWZlcmVuY2UgcGFyYW0KICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQKICAgICAqICogQWVyb3NwaWtlOjpPUFRfUkVBRF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NMRUVQX0JFVFdFRU5fUkVUUklFUwogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9UT1RBTF9USU1FT1VUCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX01BWF9SRVRSSUVTCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1NPQ0tFVF9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVCBBZXJvc3Bpa2U6Ok9QVF9SRUFEX1RJTUVPVVQgb3B0aW9ucwogICAgICogQHNlZSBBZXJvc3Bpa2U6OkVSUl9MVUEgVURGIGVycm9yIHN0YXR1cyBjb2RlcwogICAgICogQHNlZSBBZXJvc3Bpa2U6OnByZWRpY2F0ZUVxdWFscygpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6cHJlZGljYXRlQmV0d2VlbigpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6cHJlZGljYXRlQ29udGFpbnMoKQogICAgICogQHNlZSBBZXJvc3Bpa2U6OnByZWRpY2F0ZVJhbmdlKCkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpwcmVkaWNhdGVHZW9Db250YWluc0dlb0pTT05Qb2ludCgpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6cHJlZGljYXRlR2VvV2l0aGluR2VvSlNPTlJlZ2lvbigpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6cHJlZGljYXRlR2VvQ29udGFpbnNQb2ludCgpCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6cHJlZGljYXRlR2VvV2l0aGluUmFkaXVzKCkKICAgICAqIEByZXR1cm4gaW50IFRoZSBzdGF0dXMgY29kZSBvZiB0aGUgb3BlcmF0aW9uLiBDb21wYXJlIHRvIHRoZSBBZXJvc3Bpa2UgY2xhc3Mgc3RhdHVzIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFnZ3JlZ2F0ZSgkbnMsICRzZXQsIGFycmF5ICR3aGVyZSwgJG1vZHVsZSwgJGZ1bmN0aW9uLCBhcnJheSAkYXJncywgJiRyZXR1cm5lZCwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvLyBBZG1pbiBtZXRob2RzCgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBzZWNvbmRhcnkgaW5kZXggb24gYSBiaW4gb2YgYSBzcGVjaWZpZWQgc2V0CiAgICAgKgogICAgICogQ3JlYXRlIGEgc2Vjb25kYXJ5IGluZGV4IG9mIGEgZ2l2ZW4gKmluZGV4X3R5cGUqIG9uIGEgbmFtZXNwYWNlICpucyosICpzZXQqIGFuZCAqYmluKiB3aXRoIGEgc3BlY2lmaWVkICpuYW1lKgogICAgICogYGBgcGhwCiAgICAgKiAkc3RhdHVzID0gJGNsaWVudC0+YWRkSW5kZXgoInRlc3QiLCAidXNlciIsICJlbWFpbCIsICJ1c2VyX2VtYWlsX2lkeCIsIEFlcm9zcGlrZTo6SU5ERVhfVFlQRV9ERUZBVUxULCBBZXJvc3Bpa2U6OklOREVYX1NUUklORyk7CiAgICAgKiBpZiAoJHN0YXR1cyA9PSBBZXJvc3Bpa2U6Ok9LKSB7CiAgICAgKiAgICAgZWNobyAiSW5kZXggdXNlcl9lbWFpbF9pZHggY3JlYXRlZCBvbiB0ZXN0LnVzZXIuZW1haWxcbiI7CiAgICAgKiB9IGVsc2UgaWYgKCRzdGF0dXMgPT0gQWVyb3NwaWtlOjpFUlJfSU5ERVhfRk9VTkQpIHsKICAgICAqICAgICBlY2hvICJUaGlzIGluZGV4IGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZC5cbiI7CiAgICAgKiB9IGVsc2UgewogICAgICogICAgIGVjaG8gIlt7JGNsaWVudC0+ZXJyb3JubygpfV0gIi4kY2xpZW50LT5lcnJvcigpOwogICAgICogfQogICAgICoKICAgICAqICRjbGllbnQtPmFkZEluZGV4KCJ0ZXN0IiwgInVzZXIiLCAibW92aWVzIiwgInVzZXJfbW92aWVfdGl0bGVzX2lkeCIsIEFlcm9zcGlrZTo6SU5ERVhfVFlQRV9NQVBLRVlTLCBBZXJvc3Bpa2U6OklOREVYX1NUUklORyk7CiAgICAgKiAkY2xpZW50LT5hZGRJbmRleCgidGVzdCIsICJ1c2VyIiwgIm1vdmllcyIsICJ1c2VyX21vdmllX3ZpZXdzX2lkeCIsIEFlcm9zcGlrZTo6SU5ERVhfVFlQRV9NQVBWQUxVRVMsIEFlcm9zcGlrZTo6SU5ERVhfTlVNRVJJQyk7CiAgICAgKiAkY2xpZW50LT5hZGRJbmRleCgidGVzdCIsICJ1c2VyIiwgImFsaWFzZXMiLCAidXNlcl9hbGlhc2VzX2lkeCIsIEFlcm9zcGlrZTo6SU5ERVhfVFlQRV9MSVNULCBBZXJvc3Bpa2U6OklOREVYX1NUUklORyk7CiAgICAgKgogICAgICogJGNsaWVudC0+aW5mbygic2luZGV4IiwgJHJlcyk7CiAgICAgKiBlY2hvKCRyZXMpOwogICAgICogYGBgCiAgICAgKiBAcGFyYW0gc3RyaW5nICRucyB0aGUgbmFtZXNwYWNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXQgdGhlIHNldCB3aXRoaW4gdGhlIGdpdmVuIG5hbWVzcGFjZQogICAgICogQHBhcmFtIHN0cmluZyAkYmluIHRoZSBiaW4gb24gd2hpY2ggdGhlIHNlY29uZGFyeSBpbmRleCBpcyB0byBiZSBjcmVhdGVkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSBuYW1lIG9mIHRoZSBpbmRleAogICAgICogQHBhcmFtIGludCAgICAkaW5kZXhUeXBlIG9uZSBvZiAqQWVyb3NwaWtlOjpJTkRFWFxfVFlQRVxfXCoqCiAgICAgKiBAcGFyYW0gaW50ICAgICRkYXRhVHlwZSBvbmUgb2YgKkFlcm9zcGlrZTo6SU5ERVhfTlVNRVJJQyogYW5kICpBZXJvc3Bpa2U6OklOREVYX1NUUklORyoKICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgYW4gb3B0aW9uYWwgYXJyYXkgb2YgcG9saWN5IG9wdGlvbnMsIHdob3NlIGtleXMgaW5jbHVkZQogICAgICogKiBBZXJvc3Bpa2U6Ok9QVF9XUklURV9USU1FT1VUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6SU5ERVhfVFlQRV9ERUZBVUxUCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6SU5ERVhfU1RSSU5HCiAgICAgKiBAcmV0dXJuIGludCBUaGUgc3RhdHVzIGNvZGUgb2YgdGhlIG9wZXJhdGlvbi4gQ29tcGFyZSB0byB0aGUgQWVyb3NwaWtlIGNsYXNzIHN0YXR1cyBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRJbmRleCgkbnMsICRzZXQsICRiaW4sICRuYW1lLCAkaW5kZXhUeXBlLCAkZGF0YVR5cGUsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBEcm9wIGEgc2Vjb25kYXJ5IGluZGV4CiAgICAgKgogICAgICogYGBgcGhwCiAgICAgKiAkc3RhdHVzID0gJGNsaWVudC0+ZHJvcEluZGV4KCJ0ZXN0IiwgInVzZXJfZW1haWxfaWR4Iik7CiAgICAgKiBpZiAoJHN0YXR1cyA9PSBBZXJvc3Bpa2U6Ok9LKSB7CiAgICAgKiAgICAgZWNobyAiSW5kZXggdXNlcl9lbWFpbF9pZHggd2FzIGRyb3BwZWQgZnJvbSBuYW1lc3BhY2UgJ3Rlc3QnXG4iOwogICAgICogfSBlbHNlIGlmICgkc3RhdHVzID09IEFlcm9zcGlrZTo6RVJSX0lOREVYX05PVF9GT1VORCkgewogICAgICogICAgIGVjaG8gIk5vIHN1Y2ggaW5kZXggZXhpc3RzLlxuIjsKICAgICAqIH0gZWxzZSB7CiAgICAgKiAgICAgZWNobyAiW3skY2xpZW50LT5lcnJvcm5vKCl9XSAiLiRjbGllbnQtPmVycm9yKCk7CiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5zIHRoZSBuYW1lc3BhY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgdGhlIG5hbWUgb2YgdGhlIGluZGV4CiAgICAgKiBAcGFyYW0gYXJyYXkgICRvcHRpb25zIGFuIG9wdGlvbmFsIGFycmF5IG9mIHBvbGljeSBvcHRpb25zLCB3aG9zZSBrZXlzIGluY2x1ZGUKICAgICAqICogQWVyb3NwaWtlOjpPUFRfV1JJVEVfVElNRU9VVAogICAgICogQHJldHVybiBpbnQgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBvcGVyYXRpb24uIENvbXBhcmUgdG8gdGhlIEFlcm9zcGlrZSBjbGFzcyBzdGF0dXMgY29uc3RhbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJvcEluZGV4KCRucywgJG5hbWUsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgLy8gSW5mbyBNZXRob2RzCgogICAgLyoqCiAgICAgKiBTZW5kIGFuIGluZm8gcmVxdWVzdCB0byBhIHNpbmdsZSBjbHVzdGVyIG5vZGUKICAgICAqCiAgICAgKiBJbnRlcmZhY2Ugd2l0aCB0aGUgY2x1c3RlcidzIGNvbW1hbmQgYW5kIGNvbnRyb2wgZnVuY3Rpb25zLgogICAgICogQSBmb3JtYXR0ZWQgcmVxdWVzdCBzdHJpbmcgaXMgc2VudCB0byBhIGNsdXN0ZXIgbm9kZSwgYW5kIGEgZm9ybWF0dGVkCiAgICAgKiByZXNwb25zZSByZXR1cm5lZC4KICAgICAqCiAgICAgKiBBIHNwZWNpZmljIGhvc3QgY2FuIGJlIG9wdGlvbmFsbHkgc2V0LCBvdGhlcndpc2UgdGhlIHJlcXVlc3QgY29tbWFuZCBpcwogICAgICogc2VudCB0byB0aGUgaG9zdCBkZWZpbmRlZCBmb3IgY2xpZW50IGNvbnN0cnVjdG9yLgogICAgICoKICAgICAqIGBgYHBocAogICAgICogJGNsaWVudC0+aW5mbygnYmlucy90ZXN0JywgJHJlc3BvbnNlKTsKICAgICAqIHZhcl9kdW1wKCRyZXNwb25zZSk7CiAgICAgKiBgYGAKICAgICAqIGBgYAogICAgICogc3RyaW5nKDUzKSAiYmlucy90ZXN0CW51bS1iaW4tbmFtZXM9MixiaW4tbmFtZXMtcXVvdGE9MzI3NjgsZGVtbyxjaGFyYWN0ZXJzIgogICAgICogYGBgCiAgICAgKiBAbGluayBodHRwczovL3d3dy5hZXJvc3Bpa2UuY29tL2RvY3MvcmVmZXJlbmNlL2luZm8gSW5mbyBDb21tYW5kIFJlZmVyZW5jZQogICAgICogQHBhcmFtIHN0cmluZyAkcmVxdWVzdCAgYSBmb3JtYXR0ZWQgaW5mbyBjb21tYW5kCiAgICAgKiBAcGFyYW0gc3RyaW5nICYkcmVzcG9uc2UgYSBmb3JtYXR0ZWQgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLCBmaWxsZWQgYnkgcmVmZXJlbmNlCiAgICAgKiBAcGFyYW0gbnVsbHxhcnJheSAkaG9zdCBhbiBhcnJheSBob2xkaW5nIHRoZSBjbHVzdGVyIG5vZGUgY29ubmVjdGlvbiBpbmZvcm1hdGlvbiBjbHVzdGVyCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbWFuYWdlIGl0cyBjb25uZWN0aW9ucyB0byB0aGVtLiBgYGBbICdhZGRyJyA9PiAkYWRkciAsICdwb3J0JyA9PiAgJHBvcnQgXWBgYAogICAgICogQHBhcmFtIGFycmF5ICAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVAogICAgICogQHJldHVybiBpbnQgVGhlIHN0YXR1cyBjb2RlIG9mIHRoZSBvcGVyYXRpb24uIENvbXBhcmUgdG8gdGhlIEFlcm9zcGlrZSBjbGFzcyBzdGF0dXMgY29uc3RhbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5mbygkcmVxdWVzdCwgJiRyZXNwb25zZSwgJGhvc3QgPSBudWxsLCBhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogU2VuZCBhbiBpbmZvIHJlcXVlc3QgdG8gYSBzaW5nbGUgY2x1c3RlciBub2RlCiAgICAgKgogICAgICogSW50ZXJmYWNlIHdpdGggdGhlIGNsdXN0ZXIncyBjb21tYW5kIGFuZCBjb250cm9sIGZ1bmN0aW9ucy4KICAgICAqIEEgZm9ybWF0dGVkIHJlcXVlc3Qgc3RyaW5nIGlzIHNlbnQgdG8gYSBjbHVzdGVyIG5vZGUsIGFuZCBhIGZvcm1hdHRlZAogICAgICogcmVzcG9uc2UgcmV0dXJuZWQuCiAgICAgKgogICAgICogQSBzcGVjaWZpYyBob3N0IGNhbiBiZSBvcHRpb25hbGx5IHNldCwgb3RoZXJ3aXNlIHRoZSByZXF1ZXN0IGNvbW1hbmQgaXMKICAgICAqIHNlbnQgdG8gdGhlIGhvc3QgZGVmaW5kZWQgZm9yIGNsaWVudCBjb25zdHJ1Y3Rvci4KICAgICAqCiAgICAgKiBgYGBwaHAKICAgICAqICRyZXNwb25zZSA9ICRjbGllbnQtPmluZm9NYW55KCdidWlsZCcpOwogICAgICogdmFyX2R1bXAoJHJlc3BvbnNlKTsKICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBhcnJheSgzKSB7CiAgICAgKiAgIFsiQkI5MzZGMTA2Q0EwNTY4Il09PgogICAgICogICBzdHJpbmcoNikgImJ1aWxkICAzLjMuMTkiCiAgICAgKiAgIFsiQUU3MTJGMjQ1QkI5ODc2Il09PgogICAgICogICBzdHJpbmcoNikgImJ1aWxkICAzLjMuMTkiCiAgICAgKiAgIFsiRENCQTlBQTM0RUUxMkZBIl09PgogICAgICogICBzdHJpbmcoNikgImJ1aWxkICAzLjMuMTkiCiAgICAgKiB9CiAgICAgKiBgYGAKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9yZWZlcmVuY2UvaW5mbyBJbmZvIENvbW1hbmQgUmVmZXJlbmNlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZXF1ZXN0ICBhIGZvcm1hdHRlZCBpbmZvIGNvbW1hbmQKICAgICAqIEBwYXJhbSBudWxsfGFycmF5ICRob3N0IGFuIGFycmF5IG9mIF9ob3N0XyBhcnJheXMsIGVhY2ggd2l0aCBgYGBbICdhZGRyJyA9PiAkYWRkciAsICdwb3J0JyA9PiAgJHBvcnQgXWBgYAogICAgICogQHBhcmFtIGFycmF5ICAkb3B0aW9ucyBhbiBvcHRpb25hbCBhcnJheSBvZiBwb2xpY3kgb3B0aW9ucywgd2hvc2Uga2V5cyBpbmNsdWRlCiAgICAgKiAqIEFlcm9zcGlrZTo6T1BUX1JFQURfVElNRU9VVAogICAgICogQHJldHVybiBhcnJheSByZXN1bHRzIGluIHRoZSBmb3JtYXQKICAgICAqIGBgYAogICAgICogQXJyYXk6CiAgICAgKiAgTk9ERS1JRCA9PiByZXNwb25zZSBzdHJpbmcKICAgICAqIGBgYAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5mb01hbnkoJHJlcXVlc3QsICRob3N0ID0gbnVsbCwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgYWRkcmVzc2VzIG9mIHRoZSBjbHVzdGVyIG5vZGVzCiAgICAgKgogICAgICogYGBgcGhwCiAgICAgKiAkbm9kZXMgPSAkY2xpZW50LT5nZXROb2RlcygpOwogICAgICogdmFyX2R1bXAoJG5vZGVzKTsKICAgICAqIGBgYAogICAgICogYGBgCiAgICAgKiBhcnJheSgyKSB7CiAgICAgKiAgIFswXT0+CiAgICAgKiAgIGFycmF5KDIpIHsKICAgICAqICAgICBbImFkZHIiXT0+CiAgICAgKiAgICAgc3RyaW5nKDE1KSAiMTkyLjE2OC4xMjAuMTQ1IgogICAgICogICAgIFsicG9ydCJdPT4KICAgICAqICAgICBzdHJpbmcoNCkgIjMwMDAiCiAgICAgKiAgIH0KICAgICAqICAgWzFdPT4KICAgICAqICAgYXJyYXkoMikgewogICAgICogICAgIFsiYWRkciJdPT4KICAgICAqICAgICBzdHJpbmcoMTUpICIxOTIuMTY4LjEyMC4xNDQiCiAgICAgKiAgICAgWyJwb3J0Il09PgogICAgICogICAgIHN0cmluZyg0KSAiMzAwMCIKICAgICAqICAgfQogICAgICogfQogICAgICogYGBgCiAgICAgKiBAcmV0dXJuIGFycmF5IHJlc3VsdHMgaW4gdGhlIGZvcm1hdAogICAgICogYGBgCiAgICAgKiBBcnJheToKICAgICAqICAgQXJyYXk6CiAgICAgKiAgICAgJ2FkZHInID0+IHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBub2RlCiAgICAgKiAgICAgJ3BvcnQnID0+IHRoZSBwb3J0IG9mIHRoZSBub2RlCiAgICAgKiBgYGAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5vZGVzKCkge30KCiAgICAvLyBMb2dnaW5nIE1ldGhvZHMKCiAgICAvKioKICAgICAqIFNldCB0aGUgbG9nZ2luZyB0aHJlc2hvbGQgb2YgdGhlIEFlcm9zcGlrZSBvYmplY3QKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRsb2dfbGV2ZWwgb25lIG9mIGBBZXJvc3Bpa2U6OkxPR19MRVZFTF8qYCB2YWx1ZXMKICAgICAqICogQWVyb3NwaWtlOjpMT0dfTEVWRUxfT0ZGCiAgICAgKiAqIEFlcm9zcGlrZTo6TE9HX0xFVkVMX0VSUk9SCiAgICAgKiAqIEFlcm9zcGlrZTo6TE9HX0xFVkVMX1dBUk4KICAgICAqICogQWVyb3NwaWtlOjpMT0dfTEVWRUxfSU5GTwogICAgICogKiBBZXJvc3Bpa2U6OkxPR19MRVZFTF9ERUJVRwogICAgICogKiBBZXJvc3Bpa2U6OkxPR19MRVZFTF9UUkFDRQogICAgICogQHNlZSBBZXJvc3Bpa2U6OkxPR19MRVZFTF9PRkYgQWVyb3NwaWtlOjpMT0dfTEVWRUxfKiBjb25zdGFudHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExvZ0xldmVsKCRsb2dfbGV2ZWwpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgYSBoYW5kbGVyIGZvciBsb2cgZXZlbnRzCiAgICAgKgogICAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgbWV0aG9kIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbmV2ZXIgYSBsb2dnaW5nIGV2ZW50IGFib3ZlIHRoZSBkZWNsYXJlZCBsb2cgdGhyZXNob2xkIG9jY3Vycy4KICAgICAqCiAgICAgKiBgYGBwaHAKICAgICAqICRjb25maWcgPSBbImhvc3RzIiA9PiBbWyJhZGRyIj0+ImxvY2FsaG9zdCIsICJwb3J0Ij0+MzAwMF1dLCAic2htIj0+W11dOwogICAgICogJGNsaWVudCA9IG5ldyBBZXJvc3Bpa2UoJGNvbmZpZywgdHJ1ZSk7CiAgICAgKiBpZiAoISRjbGllbnQtPmlzQ29ubmVjdGVkKCkpIHsKICAgICAqICAgZWNobyAiQWVyb3NwaWtlIGZhaWxlZCB0byBjb25uZWN0W3skY2xpZW50LT5lcnJvcm5vKCl9XTogeyRjbGllbnQtPmVycm9yKCl9XG4iOwogICAgICogICBleGl0KDEpOwogICAgICogfQogICAgICogJGNsaWVudC0+c2V0TG9nTGV2ZWwoQWVyb3NwaWtlOjpMT0dfTEVWRUxfREVCVUcpOwogICAgICogJGNsaWVudC0+c2V0TG9nSGFuZGxlcihmdW5jdGlvbiAoJGxldmVsLCAkZmlsZSwgJGZ1bmN0aW9uLCAkbGluZSkgewogICAgICogICBzd2l0Y2ggKCRsZXZlbCkgewogICAgICogICAgIGNhc2UgQWVyb3NwaWtlOjpMT0dfTEVWRUxfRVJST1I6CiAgICAgKiAgICAgICAkbHZsX3N0ciA9ICdFUlJPUic7CiAgICAgKiAgICAgICBicmVhazsKICAgICAqICAgICBjYXNlIEFlcm9zcGlrZTo6TE9HX0xFVkVMX1dBUk46CiAgICAgKiAgICAgICAkbHZsX3N0ciA9ICdXQVJOJzsKICAgICAqICAgICAgIGJyZWFrOwogICAgICogICAgIGNhc2UgQWVyb3NwaWtlOjpMT0dfTEVWRUxfSU5GTzoKICAgICAqICAgICAgICRsdmxfc3RyID0gJ0lORk8nOwogICAgICogICAgICAgYnJlYWs7CiAgICAgKiAgICAgY2FzZSBBZXJvc3Bpa2U6OkxPR19MRVZFTF9ERUJVRzoKICAgICAqICAgICAgICRsdmxfc3RyID0gJ0RFQlVHJzsKICAgICAqICAgICAgIGJyZWFrOwogICAgICogICAgIGNhc2UgQWVyb3NwaWtlOjpMT0dfTEVWRUxfVFJBQ0U6CiAgICAgKiAgICAgICAkbHZsX3N0ciA9ICdUUkFDRSc7CiAgICAgKiAgICAgICBicmVhazsKICAgICAqICAgICBkZWZhdWx0OgogICAgICogICAgICAgJGx2bF9zdHIgPSAnPz8/JzsKICAgICAqICAgfQogICAgICogICBlcnJvcl9sb2coIlskbHZsX3N0cl0gaW4gJGZ1bmN0aW9uIGF0ICRmaWxlOiRsaW5lIik7CiAgICAgKiB9KTsKICAgICAqIGBgYAogICAgICoKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpMT0dfTEVWRUxfT0ZGIEFlcm9zcGlrZTo6TE9HX0xFVkVMXyogY29uc3RhbnRzCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGxvZ19oYW5kbGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgc2lnbmF0dXJlCiAgICAgKiBgYGBwaHAKICAgICAqIGZ1bmN0aW9uIGxvZ19oYW5kbGVyICggaW50ICRsZXZlbCwgc3RyaW5nICRmaWxlLCBzdHJpbmcgJGZ1bmN0aW9uLCBpbnQgJGxpbmUgKSA6IHZvaWQKICAgICAqIGBgYAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TG9nSGFuZGxlcihjYWxsYWJsZSAkbG9nX2hhbmRsZXIpIHt9CgogICAgLy8gVW5zdXBwb3J0ZWQgVHlwZSBIYW5kbGVyIE1ldGhvZHMKCiAgICAvKioKICAgICAqIFNldCBhIHNlcmlhbGl6YXRpb24gaGFuZGxlciBmb3IgdW5zdXBwb3J0ZWQgdHlwZXMKICAgICAqCiAgICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBtZXRob2QgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuZXZlciBhIHdyaXRlIG1ldGhvZCBoYW5kbGVzIGEgdmFsdWUgd2hvc2UgdHlwZSBpcyB1bnN1cHBvcnRlZC4KICAgICAqIFRoaXMgaXMgYSBzdGF0aWMgbWV0aG9kIGFuZCB0aGUgKnNlcmlhbGl6ZV9jYiogaGFuZGxlciBpcyBnbG9iYWwgYWNyb3NzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIEFlcm9zcGlrZSBjbGFzcy4KICAgICAqCiAgICAgKiBgYGBwaHAKICAgICAqIEFlcm9zcGlrZTo6c2V0U2VyaWFsaXplcihmdW5jdGlvbiAoJHZhbCkgewogICAgICogICByZXR1cm4gZ3pjb21wcmVzcyhqc29uX2VuY29kZSgkdmFsKSk7CiAgICAgKiB9KTsKICAgICAqIGBgYAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hZXJvc3Bpa2UvYWVyb3NwaWtlLWNsaWVudC1waHAvdHJlZS9tYXN0ZXIvZG9jI2hhbmRsaW5nLXVuc3VwcG9ydGVkLXR5cGVzIEhhbmRsaW5nIFVuc3VwcG9ydGVkIFR5cGVzCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJHNlcmlhbGl6ZV9jYiBhIGNhbGxiYWNrIGludm9rZWQgZm9yIGVhY2ggdmFsdWUgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZSwgd2hlbiB3cml0aW5nIHRvIHRoZSBjbHVzdGVyLiBUaGUgZnVuY3Rpb24gbXVzdCBmb2xsb3cgdGhlIHNpZ25hdHVyZQogICAgICogYGBgcGhwCiAgICAgKiBmdW5jdGlvbiBhZXJvc3Bpa2Vfc2VyaWFsaXplICggbWl4ZWQgJHZhbHVlICkgOiBzdHJpbmcKICAgICAqIGBgYAogICAgICogQHNlZSBBZXJvc3Bpa2U6Ok9QVF9TRVJJQUxJWkVSIEFlcm9zcGlrZTo6T1BUX1NFUklBTElaRVIgb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2VyaWFsaXplcihjYWxsYWJsZSAkc2VyaWFsaXplX2NiKSB7fQoKICAgIC8qKgogICAgICogU2V0IGEgZGVzZXJpYWxpemF0aW9uIGhhbmRsZXIgZm9yIHVuc3VwcG9ydGVkIHR5cGVzCiAgICAgKgogICAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgbWV0aG9kIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbmV2ZXIgYSByZWFkIG1ldGhvZCBoYW5kbGVzIGEgdmFsdWUgd2hvc2UgdHlwZSBpcyB1bnN1cHBvcnRlZC4KICAgICAqIFRoaXMgaXMgYSBzdGF0aWMgbWV0aG9kIGFuZCB0aGUgKnVuc2VyaWFsaXplX2NiKiBoYW5kbGVyIGlzIGdsb2JhbCBhY3Jvc3MgYWxsIGluc3RhbmNlcyBvZiB0aGUgQWVyb3NwaWtlIGNsYXNzLgogICAgICoKICAgICAqIGBgYHBocAogICAgICogQWVyb3NwaWtlOjpzZXREZXNlcmlhbGl6ZXIoZnVuY3Rpb24gKCR2YWwpIHsKICAgICAqICAgcmV0dXJuIGpzb25fZGVjb2RlKGd6dW5jb21wcmVzcygkdmFsKSk7CiAgICAgKiB9KTsKICAgICAqIGBgYAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hZXJvc3Bpa2UvYWVyb3NwaWtlLWNsaWVudC1waHAvdHJlZS9tYXN0ZXIvZG9jI2hhbmRsaW5nLXVuc3VwcG9ydGVkLXR5cGVzIEhhbmRsaW5nIFVuc3VwcG9ydGVkIFR5cGVzCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJHVuc2VyaWFsaXplX2NiIGEgY2FsbGJhY2sgaW52b2tlZCBmb3IgZWFjaCB2YWx1ZSBvZiBhbiB1bnN1cHBvcnRlZCB0eXBlLCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgY2x1c3Rlci4gVGhlIGZ1bmN0aW9uIG11c3QgZm9sbG93IHRoZSBzaWduYXR1cmUKICAgICAqIGBgYHBocAogICAgICogLy8gJHZhbHVlIGlzIGJpbmFyeSBkYXRhIG9mIHR5cGUgQVNfQllURVNfQkxPQgogICAgICogZnVuY3Rpb24gYWVyb3NwaWtlX2Rlc2VyaWFsaXplICggc3RyaW5nICR2YWx1ZSApCiAgICAgKiBgYGAKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpPUFRfU0VSSUFMSVpFUiBBZXJvc3Bpa2U6Ok9QVF9TRVJJQUxJWkVSIG9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldERlc2VyaWFsaXplcihjYWxsYWJsZSAkdW5zZXJpYWxpemVfY2IpIHt9CgogICAgLyoKICAgICAqIE9wdGlvbnMgY2FuIGJlIGFzc2lnbmVkIHZhbHVlcyB0aGF0IG1vZGlmeSBkZWZhdWx0IGJlaGF2aW9yCiAgICAgKiBVc2VkIGJ5IHRoZSBjb25zdHJ1Y3RvciwgcmVhZCwgd3JpdGUsIHNjYW4sIHF1ZXJ5LCBhcHBseSwgYW5kIGluZm8KICAgICAqIG9wZXJhdGlvbnMuCiAgICAgKi8KCiAgICAvKiBLZXkgdXNlZCB0byBzcGVjaWZ5IGFuIGFycmF5IG9mIHJlYWQgcG9saWN5IGRlZmF1bHRzIHVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yLgogICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hZXJvc3Bpa2UvYWVyb3NwaWtlLWNsaWVudC1waHAvYmxvYi9tYXN0ZXIvZG9jL3BvbGljaWVzLm1kCiAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9SRUFEX0RFRkFVTFRfUE9MID0gIk9QVF9SRUFEX0RFRkFVTFRfUE9MIjsKCiAgICAvKiBLZXkgdXNlZCB0byBzcGVjaWZ5IGFuIGFycmF5IG9mIHdyaXRlIHBvbGljeSBkZWZhdWx0cyB1c2VkIGluIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYWVyb3NwaWtlL2Flcm9zcGlrZS1jbGllbnQtcGhwL2Jsb2IvbWFzdGVyL2RvYy9wb2xpY2llcy5tZAogICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfV1JJVEVfREVGQVVMVF9QT0wgPSAiT1BUX1dSSVRFX0RFRkFVTFRfUE9MIjsKCiAgICAvKiBLZXkgdXNlZCB0byBzcGVjaWZ5IGFuIGFycmF5IG9mIHJlbW92ZSBwb2xpY3kgZGVmYXVsdHMgdXNlZCBpbiB0aGUgY29uc3RydWN0b3IuCiAgICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Flcm9zcGlrZS9hZXJvc3Bpa2UtY2xpZW50LXBocC9ibG9iL21hc3Rlci9kb2MvcG9saWNpZXMubWQKICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX1JFTU9WRV9ERUZBVUxUX1BPTCA9ICJPUFRfUkVNT1ZFX0RFRkFVTFRfUE9MIjsKCiAgICAvKiBLZXkgdXNlZCB0byBzcGVjaWZ5IGFuIGFycmF5IG9mIGJhdGNoIHBvbGljeSBkZWZhdWx0cyB1c2VkIGluIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYWVyb3NwaWtlL2Flcm9zcGlrZS1jbGllbnQtcGhwL2Jsb2IvbWFzdGVyL2RvYy9wb2xpY2llcy5tZAogICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfQkFUQ0hfREVGQVVMVF9QT0wgPSAiT1BUX0JBVENIX0RFRkFVTFRfUE9MIjsKCiAgICAvKiBLZXkgdXNlZCB0byBzcGVjaWZ5IGFuIGFycmF5IG9mIG9wZXJhdGUgcG9saWN5IGRlZmF1bHRzIHVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yLgogICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hZXJvc3Bpa2UvYWVyb3NwaWtlLWNsaWVudC1waHAvYmxvYi9tYXN0ZXIvZG9jL3BvbGljaWVzLm1kCiAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9PUEVSQVRFX0RFRkFVTFRfUE9MID0gIk9QVF9PUEVSQVRFX0RFRkFVTFRfUE9MIjsKCiAgICAvKiBLZXkgdXNlZCB0byBzcGVjaWZ5IGFuIGFycmF5IG9mIHF1ZXJ5IHBvbGljeSBkZWZhdWx0cyB1c2VkIGluIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYWVyb3NwaWtlL2Flcm9zcGlrZS1jbGllbnQtcGhwL2Jsb2IvbWFzdGVyL2RvYy9wb2xpY2llcy5tZAogICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfUVVFUllfREVGQVVMVF9QT0wgPSAiT1BUX1FVRVJZX0RFRkFVTFRfUE9MIjsKCiAgICAvKiBLZXkgdXNlZCB0byBzcGVjaWZ5IGFuIGFycmF5IG9mIHNjYW4gcG9saWN5IGRlZmF1bHRzIHVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yLgogICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hZXJvc3Bpa2UvYWVyb3NwaWtlLWNsaWVudC1waHAvYmxvYi9tYXN0ZXIvZG9jL3BvbGljaWVzLm1kCiAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9TQ0FOX0RFRkFVTFRfUE9MID0gIk9QVF9TQ0FOX0RFRkFVTFRfUE9MIjsKCiAgICAvKiBLZXkgdXNlZCB0byBzcGVjaWZ5IGFuIGFycmF5IG9mIGFwcGx5IHBvbGljeSBkZWZhdWx0cyB1c2VkIGluIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYWVyb3NwaWtlL2Flcm9zcGlrZS1jbGllbnQtcGhwL2Jsb2IvbWFzdGVyL2RvYy9wb2xpY2llcy5tZAogICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfQVBQTFlfREVGQVVMVF9QT0wgPSAiT1BUX0FQUExZX0RFRkFVTFRfUE9MIjsKCiAgICAvKgogICAgS2V5IHVzZWQgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQgb2YgdGhlIGNvbnN0cnVjdG9yIHVzZWQgdG8gcG9pbnQgdG8gYW4gYXJyYXkgb2YgVExTCiAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuIFVzZSBvZiBUTFMgcmVxdWlyZXMgYW4gZW50ZXJwcmlzZSB2ZXJzaW9uIG9mIHRoZSBBZXJvc3Bpa2UgU2VydmVyLgogICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfVExTX0NPTkZJRyA9ICJPUFRfVExTX0NPTkZJRyI7CgogICAgLyogS2V5IHVzZWQgaW4gdGhlIE9QVF9UTFMgYm9vbGVhbiBXaGV0aGVyIG9yIG5vdCB0byBlbmFibGUgVExTLgogICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfVExTX0VOQUJMRSA9ICJPUFRfVExTX0VOQUJMRSI7CgogICAgLyoKICAgIEtleSB1c2VkIHRvIHNwZWNpZnkgYSBzdHJpbmcgcGF0aCB0byBhIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGUgZmlsZS4gQnkgZGVmYXVsdCBUTFMgd2lsbCB1c2Ugc3lzdGVtIHN0YW5kYXJkIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzCiAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9PUFRfVExTX0NBRklMRSA9ICJPUFRfT1BUX1RMU19DQUZJTEUiOwoKICAgIC8qCiAgICBLZXkgdXNlZCB0byBzcGVjaWZ5IGEgUGF0aCB0byBhIGRpcmVjdG9yeSBvZiB0cnVzdGVkIGNlcnRpZmljYXRlcy4gU2VlIHRoZSBPcGVuU1NMIFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zIG1hbnVhbCBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmb3JtYXQgb2YgdGhlIGRpcmVjdG9yeS4KICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX1RMU19DQVBBVEggPSAiT1BUX1RMU19DQVBBVEgiOwoKICAgIC8qS2V5IHVzZWQgdG8gc3BlY2lmeSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbGxvd2VkIHByb3RvY29scy4gU3BlY2lmaWVzIGVuYWJsZWQgcHJvdG9jb2xzLiBUaGlzIGZvcm1hdCBpcyB0aGUgc2FtZSBhcyBBcGFjaGUncyBTU0xQcm90b2NvbCBkb2N1bWVudGVkIGF0IGh0dHBzOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvbW9kL21vZF9zc2wuaHRtbCNzc2xwcm90b2NvbCAuIElmIG5vdCBzcGVjaWZpZWQgdGhlIGNsaWVudCB3aWxsIHVzZSAiLWFsbCArVExTdjEuMiIuCiAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9UTFNfUFJPVE9DT0xTID0gIk9QVF9UTFNfUFJPVE9DT0xTIjsKCiAgICAvKgogICAgS2V5IHVzZWQgdG8gc3BlY2lmeSBhIHN0cmluZy4gU3BlY2lmaWVzIGVuYWJsZWQgY2lwaGVyIHN1aXRlcy4gVGhlIGZvcm1hdCBpcyB0aGUgc2FtZSBhcyBPcGVuU1NMJ3MgQ2lwaGVyIExpc3QgRm9ybWF0IGRvY3VtZW50ZWQgYXQgaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9tYW5tYXN0ZXIvYXBwcy9jaXBoZXJzLmh0bWwgLklmIG5vdCBzcGVjaWZpZWQgdGhlIE9wZW5TU0wgZGVmYXVsdCBjaXBoZXIgc3VpdGUgZGVzY3JpYmVkIGluIHRoZSBjaXBoZXJzIGRvY3VtZW50YXRpb24gd2lsbCBiZSB1c2VkLiBJZiB5b3UgYXJlIG5vdCBzdXJlIHdoYXQgY2lwaGVyIHN1aXRlIHRvIHNlbGVjdCB0aGlzIG9wdGlvbiBpcyBiZXN0IGxlZnQgdW5zcGVjaWZpZWQKICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX1RMU19DSVBIRVJfU1VJVEUgPSAiT1BUX1RMU19DSVBIRVJfU1VJVEUiOwoKICAgIC8qCiAgICBLZXkgdXNlZCB0byBzcGVjaWZ5IGEgYm9vbGVhbi4gRW5hYmxlIENSTCBjaGVja2luZyBmb3IgdGhlIGNlcnRpZmljYXRlIGNoYWluIGxlYWYgY2VydGlmaWNhdGUuIEFuIGVycm9yIG9jY3VycyBpZiBhIHN1aXRhYmxlIENSTCBjYW5ub3QgYmUgZm91bmQuIEJ5IGRlZmF1bHQgQ1JMIGNoZWNraW5nIGlzIGRpc2FibGVkLgogICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfVExTX0NSTF9DSEVDSyA9ICJPUFRfVExTX0NSTF9DSEVDSyI7CgogICAgLyoKICAgIEtleSB1c2VkIHRvIHNwZWNpZnkgYSBib2xlYW4uIEVuYWJsZSBDUkwgY2hlY2tpbmcgZm9yIHRoZSBlbnRpcmUgY2VydGlmaWNhdGUgY2hhaW4uIEFuIGVycm9yIG9jY3VycyBpZiBhIHN1aXRhYmxlIENSTCBjYW5ub3QgYmUgZm91bmQuIEJ5IGRlZmF1bHQgQ1JMIGNoZWNraW5nIGlzIGRpc2FibGVkLgogICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfVExTX0NSTF9DSEVDS19BTEwgPSAiT1BUX1RMU19DUkxfQ0hFQ0tfQUxMIjsKCiAgICAvKiBLZXkgdXNlZCB0byBzcGVjaWZ5IGEgcGF0aCB0byBhIGNlcnRpZmljYXRlIGJsYWNrbGlzdCBmaWxlLiBUaGUgZmlsZSBzaG91bGQgY29udGFpbiBvbmUgbGluZSBmb3IgZWFjaCBibGFja2xpc3RlZCBjZXJ0aWZpY2F0ZS4gRWFjaCBsaW5lIHN0YXJ0cyB3aXRoIHRoZSBjZXJ0aWZpY2F0ZSBzZXJpYWwgbnVtYmVyIGV4cHJlc3NlZCBpbiBoZXguIEVhY2ggZW50cnkgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgaXNzdWVyIG5hbWUgb2YgdGhlIGNlcnRpZmljYXRlIChzZXJpYWwgbnVtYmVycyBhcmUgb25seSByZXF1aXJlZCB0byBiZSB1bmlxdWUgcGVyIGlzc3VlcikuIEV4YW1wbGUgcmVjb3JkczogODY3RUM4NzQ4MkIyIC9DPVVTL1NUPUNBL089QWNtZS9PVT1FbmdpbmVlcmluZy9DTj1UZXN0IENoYWluIENBIEUyRDRCMEU1NzBGOUVGOEU4ODVDMDY1ODk5ODg2NDYxICovCiAgICBwdWJsaWMgY29uc3QgT1BUX1RMU19DRVJUX0JMQUNLTElTVCA9ICJPUFRfVExTX0NFUlRfQkxBQ0tMSVNUIjsKCiAgICAvKiBCb29sZWFuOiBMb2cgc2Vzc2lvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBjb25uZWN0aW9uLiAqLwogICAgcHVibGljIGNvbnN0IE9QVF9UTFNfTE9HX1NFU1NJT05fSU5GTyA9ICJPUFRfVExTX0xPR19TRVNTSU9OX0lORk8iOwoKICAgIC8qCiAgICBQYXRoIHRvIHRoZSBjbGllbnQncyBrZXkgZm9yIG11dHVhbCBhdXRoZW50aWNhdGlvbi4gQnkgZGVmYXVsdCBtdXR1YWwgYXV0aGVudGljYXRpb24gaXMgZGlzYWJsZWQuCiAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9UTFNfS0VZRklMRSA9ICJPUFRfVExTX0tFWUZJTEUiOwoKICAgIC8qIFBhdGggdG8gdGhlIGNsaWVudCdzIGNlcnRpZmljYXRlIGNoYWluIGZpbGUgZm9yIG11dHVhbCBhdXRoZW50aWNhdGlvbi4gQnkgZGVmYXVsdCBtdXR1YWwgYXV0aGVudGljYXRpb24gaXMgZGlzYWJsZWQuCiAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9UTFNfQ0VSVEZJTEUgPSAiT1BUX1RMU19DRVJURklMRSI7CgogICAgLyoqCiAgICAgKiBEZWZpbmVzIHRoZSBsZW5ndGggb2YgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSB0aGUgY2xpZW50IHdhaXRzIG9uIGVzdGFibGlzaGluZyBhIGNvbm5lY3Rpb24uCiAgICAgKiB2YWx1ZSBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQ6IDEwMDApCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfQ09OTkVDVF9USU1FT1VUID0gIk9QVF9DT05ORUNUX1RJTUVPVVQiOwoKICAgIC8qKgogICAgICogRGVmaW5lcyB0aGUgbGVuZ3RoIG9mIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlIGNsaWVudCB3YWl0cyBvbiBhIHJlYWQKICAgICAqIG9wZXJhdGlvbi4KICAgICAqIHZhbHVlIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogMTAwMCkKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9SRUFEX1RJTUVPVVQgPSAiT1BUX1JFQURfVElNRU9VVCI7CgogICAgLyoqCiAgICAgKiBEZWZpbmVzIHRoZSBsZW5ndGggb2YgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSB0aGUgY2xpZW50IHdhaXRzIG9uIGEgd3JpdGUKICAgICAqIG9wZXJhdGlvbi4KICAgICAqIHZhbHVlIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdDogMTAwMCkKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9XUklURV9USU1FT1VUID0gIk9QVF9XUklURV9USU1FT1VUIjsKCiAgICAvKioKICAgICAqIFNldHMgdGhlIFRUTCBvZiB0aGUgcmVjb3JkIGFsb25nIHdpdGggYSB3cml0ZSBvcGVyYXRpb24uCiAgICAgKgogICAgICogKiBUVEwgPiAwIHNldHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGludG8gdGhlIGZ1dHVyZSBpbiB3aGljaCB0byBleHBpcmUgdGhlIHJlY29yZC4KICAgICAqICogVFRMID0gMCB1c2VzIHRoZSBkZWZhdWx0IFRUTCBkZWZpbmVkIGZvciB0aGUgbmFtZXNwYWNlLgogICAgICogKiBUVEwgPSAtMSBtZWFucyB0aGUgcmVjb3JkIHNob3VsZCBuZXZlciBleHBpcmUuCiAgICAgKiAqIFRUTCA9IC0yIG1lYW5zIHRoZSByZWNvcmQncyBUVEwgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4KICAgICAqIHZhbHVlIGluIHNlY29uZHMsIG9yIHRoZSBzcGVjaWFsIHZhbHVlcyAwLCAtMSBvciAtMiAoZGVmYXVsdDogMCkKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9UVEwgPSAiT1BUX1RUTCI7CgogICAgLyoqCiAgICAgKiBBY2NlcHRzIG9uZSBvZiB0aGUgUE9MSUNZX0tFWV8qIHZhbHVlcy4KICAgICAqCiAgICAgKiB7QGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2NsaWVudC9waHAvdXNhZ2Uva3ZzL3JlY29yZC1zdHJ1Y3R1cmUuaHRtbCBSZWNvcmRzfQogICAgICogYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgdGhlaXIgZGlnZXN0LCBhbmQgY2FuIG9wdGlvbmFsbHkgc3RvcmUgdGhlIHZhbHVlIG9mIHRoZWlyIHByaW1hcnkga2V5CiAgICAgKiAodGhlaXIgdW5pcXVlIElEIGluIHRoZSBhcHBsaWNhdGlvbikuCiAgICAgKiBLZXkgc3RvcmFnZSBwb2xpY3kgb3B0aW9uIChkaWdlc3Qtb25seSBvciBzZW5kIGtleSkKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9QT0xJQ1lfS0VZID0gIk9QVF9QT0xJQ1lfS0VZIjsKCiAgICAvKioKICAgICAqIERvIG5vdCBzdG9yZSB0aGUgcHJpbWFyeSBrZXkgd2l0aCB0aGUgcmVjb3JkIChkZWZhdWx0KQogICAgICogZGlnZXN0IG9ubHkKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9LRVlfRElHRVNUID0gMDsKCiAgICAvKioKICAgICAqIFN0b3JlIHRoZSBwcmltYXJ5IGtleSB3aXRoIHRoZSByZWNvcmQKICAgICAqIHN0b3JlIHRoZSBwcmltYXJ5IGtleSB3aXRoIHRoZSByZWNvcmQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9LRVlfU0VORCA9IDE7CgogICAgLyoqCiAgICAgKiBBY2NlcHRzIG9uZSBvZiB0aGUgUE9MSUNZX0VYSVNUU18qIHZhbHVlcy4KICAgICAqCiAgICAgKiBCeSBkZWZhdWx0IHdyaXRlcyB3aWxsIHRyeSB0byBjcmVhdGUgYSByZWNvcmQgb3IgdXBkYXRlIGl0cyBiaW5zLCB3aGljaAogICAgICogaXMgYSBiZWhhdmlvciBzaW1pbGFyIHRvIGhvdyBhcnJheXMgd29yayBpbiBQSFAuIFNldHRpbmcgYSB3cml0ZSB3aXRoIGEKICAgICAqIGRpZmZlcmVudCBQT0xJQ1lcX0VYSVNUU1xfKiB2YWx1ZSBjYW4gc2ltdWxhdGUgYSBtb3JlIERNTC1saWtlIGJlaGF2aW9yLAogICAgICogc2ltaWxhciB0byBhbiBSREJNUy4KICAgICAqIGV4aXN0ZW5jZSBwb2xpY3kgb3B0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfUE9MSUNZX0VYSVNUUyA9ICJPUFRfUE9MSUNZX0VYSVNUUyI7CgogICAgLyoqCiAgICAgKiAiQ1JFQVRFX09SX1VQREFURSIgYmVoYXZpb3IuIENyZWF0ZSB0aGUgcmVjb3JkIGlmIGl0IGRvZXMgbm90IGV4aXN0LAogICAgICogb3IgdXBkYXRlIGl0cyBiaW5zIGlmIGl0IGRvZXMuIChkZWZhdWx0KQogICAgICogY3JlYXRlIG9yIHVwZGF0ZSBiZWhhdmlvcgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUE9MSUNZX0VYSVNUU19JR05PUkUgPSAwOwoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgcmVjb3JkIE9OTFkgaWYgaXQgRE9FUyBOT1QgZXhpc3QuCiAgICAgKiBjcmVhdGUgb25seSBiZWhhdmlvciAoZmFpbCBvdGhlcndpc2UpCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQT0xJQ1lfRVhJU1RTX0NSRUFURSA9IDE7CgogICAgLyoqCiAgICAgKiBVcGRhdGUgYSByZWNvcmQgT05MWSBpZiBpdCBleGlzdHMuCiAgICAgKiB1cGRhdGUgb25seSBiZWhhdmlvciAoZmFpbCBvdGhlcndpc2UpCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQT0xJQ1lfRVhJU1RTX1VQREFURSA9IDI7CgogICAgLyoqCiAgICAgKiBSZXBsYWNlIGEgcmVjb3JkIE9OTFkgaWYgaXQgZXhpc3RzLgogICAgICogcmVwbGFjZSBvbmx5IGJlaGF2aW9yIChmYWlsIG90aGVyd2lzZSkKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9FWElTVFNfUkVQTEFDRSA9IDM7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgdGhlIHJlY29yZCBpZiBpdCBkb2VzIG5vdCBleGlzdCwgb3IgcmVwbGFjZSBpdHMgYmlucyBpZiBpdCBkb2VzLgogICAgICogY3JlYXRlIG9yIHJlcGxhY2UgYmVoYXZpb3IKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9FWElTVFNfQ1JFQVRFX09SX1JFUExBQ0UgPSA0OwoKICAgIC8qKgogICAgICogU2V0IHRvIGFuIGFycmF5KCBBZXJvc3Bpa2U6OlBPTElDWV9HRU5fKiBbLCAoaW50KSAkZ2VuX3ZhbHVlIF0gKQogICAgICoKICAgICAqIFNwZWNpZmllcyB0aGUgYmVoYXZpb3Igb2Ygd3JpdGUgb3BlcnRpb25zIHdpdGggcmVnYXJkcyB0byB0aGUgcmVjb3JkJ3MKICAgICAqIGdlbmVyYXRpb24uIFVzZWQgdG8gaW1wbGVtZW50IGEgY2hlY2stYW5kLXNldCAoQ0FTKSBwYXR0ZXJuLgogICAgICogZ2VuZXJhdGlvbiBwb2xpY3kgb3B0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfUE9MSUNZX0dFTiA9ICJPUFRfUE9MSUNZX0dFTiI7CgogICAgLyoqCiAgICAgKiBEbyBub3QgY29uc2lkZXIgZ2VuZXJhdGlvbiBmb3IgdGhlIHdyaXRlIG9wZXJhdGlvbi4KICAgICAqIHdyaXRlIGEgcmVjb3JkLCByZWdhcmRsZXNzIG9mIGdlbmVyYXRpb24gKGRlZmF1bHQpCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQT0xJQ1lfR0VOX0lHTk9SRSA9IDA7CgogICAgLyoqCiAgICAgKiBPbmx5IHdyaXRlIGlmIHRoZSByZWNvcmQgd2FzIG5vdCBtb2RpZmllZCBzaW5jZSBhIGdpdmVuIGdlbmVyYXRpb24gdmFsdWUuCiAgICAgKiB3cml0ZSBhIHJlY29yZCwgT05MWSBpZiBnZW5lcmF0aW9ucyBhcmUgZXF1YWwKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9HRU5fRVEgPSAxOwoKICAgIC8qKgogICAgICogd3JpdGUgYSByZWNvcmQsIE9OTFkgaWYgbG9jYWwgZ2VuZXJhdGlvbiBpcyBncmVhdGVyLXRoYW4gcmVtb3RlIGdlbmVyYXRpb24KICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9HRU5fR1QgPSAyOwoKICAgIC8qKgogICAgICogU2V0IHRvIG9uZSBvZiB0aGUgU0VSSUFMSVpFUl8qIHZhbHVlcy4KICAgICAqCiAgICAgKiBTdXBwb3J0ZWQgdHlwZXMsIHN1Y2ggYXMgc3RyaW5nLCBpbnRlZ2VyLCBhbmQgYXJyYXkgZ2V0IGRpcmVjdGx5IGNhc3QgdG8KICAgICAqIHRoZSBtYXRjaGluZyBBZXJvc3Bpa2UgdHlwZXMsIHN1Y2ggYXMgYXNfc3RyaW5nLCBhc19pbnRlZ2VyLCBhbmQgYXNfbWFwLgogICAgICogVW5zdXBwb3J0ZWQgdHlwZXMsIHN1Y2ggYXMgYm9vbGVhbiwgbmVlZCBhIHNlcmlhbGl6ZXIgdG8gaGFuZGxlIHRoZW0uCiAgICAgKiBkZXRlcm1pbmVzIGEgaGFuZGxlciBmb3IgdW5zdXBwb3J0ZWQgZGF0YSB0eXBlcwogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX1NFUklBTElaRVIgPSAiT1BUX1NFUklBTElaRVIiOwoKICAgIC8qKgogICAgICogVGhyb3cgYW4gZXhjZXB0aW9uIGluc3RlYWQgb2Ygc2VyaWFsaXppbmcgdW5zdXBwb3J0ZWQgdHlwZXMuCiAgICAgKiB0aHJvdyBhbiBlcnJvciB3aGVuIHNlcmlhbGl6YXRpb24gaXMgcmVxdWlyZWQKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNFUklBTElaRVJfTk9ORSA9IDA7CgogICAgLyoqCiAgICAgKiBVc2UgdGhlIGJ1aWx0LWluIFBIUCBzZXJpYWxpemVyIGZvciBhbnkgdW5zdXBwb3J0ZWQgdHlwZXMuCiAgICAgKiB1c2UgdGhlIFBIUCBzZXJpYWxpemUvdW5zZXJpYWxpemUgZnVuY3Rpb25zIChkZWZhdWx0KQogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0VSSUFMSVpFUl9QSFAgPSAxOwoKICAgIC8qKgogICAgICogVXNlIGEgdXNlci1kZWZpbmVkIHNlcmlhbGl6ZXIgZm9yIGFueSB1bnN1cHBvcnRlZCB0eXBlcy4KICAgICAqIHVzZSBhIHBhaXIgb2YgZnVuY3Rpb25zIHdyaXR0ZW4gaW4gUEhQIGZvciBzZXJpYWxpemF0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTRVJJQUxJWkVSX1VTRVIgPSAyOwoKICAgIC8qKgogICAgICogQWNjZXB0cyBvbmUgb2YgdGhlIFBPTElDWV9DT01NSVRfTEVWRUxfKiB2YWx1ZXMuCiAgICAgKgogICAgICogT25lIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2FyY2hpdGVjdHVyZS9jb25zaXN0ZW5jeS5odG1sIHBlci10cmFuc2FjdGlvbiBjb25zaXN0ZW5jeSBsZXZlbHN9LgogICAgICogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcmVwbGljYXMgcmVxdWlyZWQgdG8gYmUgc3VjY2Vzc2Z1bGx5IGNvbW1pdHRlZAogICAgICogYmVmb3JlIHJldHVybmluZyBzdWNjZXNzIGluIGEgd3JpdGUgb3BlcmF0aW9uIHRvIHByb3ZpZGUgdGhlIGRlc2lyZWQKICAgICAqIGNvbnNpc3RlbmN5IGxldmVsLgogICAgICogY29tbWl0IGxldmVsIHBvbGljeSBvcHRpb24KICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMID0gIk9QVF9QT0xJQ1lfQ09NTUlUX0xFVkVMIjsKCiAgICAvKioKICAgICAqIFJldHVybiBzdWNjY2VzcyBvbmx5IGFmdGVyIHN1Y2Nlc3NmdWxseSBjb21taXR0aW5nIGFsbCByZXBsaWNhcy4KICAgICAqIHdyaXRlIHRvIHRoZSBtYXN0ZXIgYW5kIGFsbCByZXBsaWNhcyAoZGVmYXVsdCkKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9DT01NSVRfTEVWRUxfQUxMID0gMDsKCiAgICAvKioKICAgICAqIFJldHVybiBzdWNjY2VzcyBhZnRlciBzdWNjZXNzZnVsbHkgY29tbWl0dGluZyB0aGUgbWFzdGVyIHJlcGxpY2EuCiAgICAgKiBtYXN0ZXIgd2lsbCBhc3luY2hyb25vdXNseSB3cml0ZSB0byByZXBsaWNhcwogICAgICovCiAgICBwdWJsaWMgY29uc3QgUE9MSUNZX0NPTU1JVF9MRVZFTF9NQVNURVIgPSAxOwoKICAgIC8qKgogICAgICogQWNjZXB0cyBvbmUgb2YgdGhlIFBPTElDWV9SRVBMSUNBXyogdmFsdWVzLgogICAgICoKICAgICAqIE9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9hcmNoaXRlY3R1cmUvY29uc2lzdGVuY3kuaHRtbCBwZXItdHJhbnNhY3Rpb24gY29uc2lzdGVuY3kgbGV2ZWxzfS4KICAgICAqIFNwZWNpZmllcyB3aGljaCBwYXJ0aXRpb24gcmVwbGljYSB0byByZWFkIGZyb20uCiAgICAgKiByZXBsaWNhIHBvbGljeSBvcHRpb24KICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9QT0xJQ1lfUkVQTElDQSA9ICJPUFRfUE9MSUNZX1JFUExJQ0EiOwoKICAgIC8qKgogICAgICogUmVhZCBmcm9tIHRoZSBwYXJ0aXRpb24gbWFzdGVyIHJlcGxpY2Egbm9kZS4KICAgICAqIHJlYWQgZnJvbSBtYXN0ZXIKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9SRVBMSUNBX01BU1RFUiA9IDA7CgogICAgLyoqCiAgICAgKiBSZWFkIGZyb20gYW4gdW5zcGVjaWZpZWQgcmVwbGljYSBub2RlLgogICAgICogcmVhZCBmcm9tIGFueSByZXBsaWNhIG5vZGUKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9SRVBMSUNBX0FOWSA9IDE7CgogICAgLyoqCiAgICAgKiAgIEFsd2F5cyB0cnkgbm9kZSBjb250YWluaW5nIG1hc3RlciBwYXJ0aXRpb24gZmlyc3QuIElmIGNvbm5lY3Rpb24gZmFpbHMgYW5kCiAgICAgKiAgIGByZXRyeV9vbl90aW1lb3V0YCBpcyB0cnVlLCB0cnkgbm9kZSBjb250YWluaW5nIHJlcGxpY2EgcGFydGl0aW9uLgogICAgICogICBDdXJyZW50bHkgcmVzdHJpY3RlZCB0byBtYXN0ZXIgYW5kIG9uZSByZXBsaWNhLiAoZGVmYXVsdCkKICAgICAqIGF0dGVtcHQgdG8gcmVhZCBmcm9tIG1hc3RlciBmaXJzdCwgdGhlbiB0cnkgdGhlIG5vZGUgY29udGFpbmluZyByZXBsaWNhIHBhcnRpdGlvbiBpZiBjb25uZWN0aW9uIGZhaWxlZC4gKGRlZmF1bHQpCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQT0xJQ1lfUkVQTElDQV9TRVFVRU5DRSA9IDI7CgogICAgLyoqCiAgICAgKiBUcnkgbm9kZSBvbiB0aGUgc2FtZSByYWNrIGFzIHRoZSBjbGllbnQgZmlyc3QuICBJZiB0aGVyZSBhcmUgbm8gbm9kZXMgb24gdGhlCiAgICAgKiBzYW1lIHJhY2ssIHVzZSBQT0xJQ1lfUkVQTElDQV9TRVFVRU5DRSBpbnN0ZWFkLgogICAgICoKICAgICAqICJyYWNrX2F3YXJlIiBtdXN0IGJlIHNldCB0byB0cnVlIGluIHRoZSBjbGllbnQgY29uc3RydWN0b3IsIGFuZCAicmFja19pZCIgbXVzdCBtYXRjaCB0aGUgc2VydmVyIHJhY2sgY29uZmlndXJhdGlvbgogICAgICogdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4KICAgICAqIGF0dGVtcCB0byByZWFkIGZyb20gbWFzdGVyIGZpcnN0LCB0aGVuIHRyeSB0aGUgbm9kZSBjb250YWluaW5nIHJlcGxpY2EgcGFydGl0aW9uIGlmIGNvbm5lY3Rpb24gZmFpbGVkLiAoZGVmYXVsdCkKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9SRVBMSUNBX1BSRUZFUl9SQUNLID0gMzsKCiAgICAvKioKICAgICAqIEFjY2VwdHMgb25lIG9mIHRoZSBQT0xJQ1lfUkVBRF9NT0RFX0FQXyogdmFsdWVzLgogICAgICoKICAgICAqIE9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9hcmNoaXRlY3R1cmUvY29uc2lzdGVuY3kuaHRtbCBwZXItdHJhbnNhY3Rpb24gY29uc2lzdGVuY3kgbGV2ZWxzfS4KICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJlcGxpY2FzIHRvIGJlIGNvbnN1bHRlZCBpbiBhIHJlYWQgb3BlcmF0aW9uIHRvCiAgICAgKiBwcm92aWRlIHRoZSBkZXNpcmVkIGNvbnNpc3RlbmN5IGxldmVsIGluIGF2YWlsYWJpbGl0eSBtb2RlLgogICAgICogcG9saWN5IHJlYWQgb3B0aW9uIGZvciBhdmFpbGFiaWxpdHkgbmFtZXNwYWNlcwogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX1BPTElDWV9SRUFEX01PREVfQVAgPSAiT1BUX1BPTElDWV9SRUFEX01PREVfQVAiOwoKICAgIC8qKgogICAgICogSW52b2x2ZSBhIHNpbmdsZSByZXBsaWNhIGluIHRoZSBvcGVyYXRpb24uCiAgICAgKiAoZGVmYXVsdCkKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9SRUFEX01PREVfQVBfT05FID0gMDsKCiAgICAvKioKICAgICAqIEludm9sdmUgYWxsIHJlcGxpY2FzIGluIHRoZSBvcGVyYXRpb24uCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEFTX1BPTElDWV9SRUFEX01PREVfQVBfQUxMID0gMTsKCiAgICAvKioKICAgICAqIEFjY2VwdHMgb25lIG9mIHRoZSBQT0xJQ1lfUkVBRF9NT0RFX1NDXyogdmFsdWVzLgogICAgICoKICAgICAqIE9uZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9hcmNoaXRlY3R1cmUvY29uc2lzdGVuY3kuaHRtbCBwZXItdHJhbnNhY3Rpb24gY29uc2lzdGVuY3kgbGV2ZWxzfS4KICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJlcGxpY2FzIHRvIGJlIGNvbnN1bHRlZCBpbiBhIHJlYWQgb3BlcmF0aW9uIHRvCiAgICAgKiBwcm92aWRlIHRoZSBkZXNpcmVkIGNvbnNpc3RlbmN5IGxldmVsLgogICAgICogcG9saWN5IHJlYWQgb3B0aW9uIGZvciBjb25zaXN0ZW5jeSBuYW1lc3BhY2VzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfUE9MSUNZX1JFQURfTU9ERV9TQyA9ICJPUFRfUE9MSUNZX1JFQURfTU9ERV9TQyI7CgogICAgLyoqCiAgICAgKiBBbHdheXMgcmVhZCBmcm9tIG1hc3Rlci4gUmVjb3JkIHZlcnNpb25zIGFyZSBsb2NhbCB0byBzZXNzaW9uLgogICAgICogKGRlZmF1bHQpCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQT0xJQ1lfUkVBRF9NT0RFX1NDX1NFU1NJT04gPSAwOwoKICAgIC8qKgogICAgICogQWx3YXlzIHJlYWQgZnJvbSBtYXN0ZXIuIFJlY29yZCB2ZXJzaW9ucyBhcmUgZ2xvYmFsIGFuZCB0aHVzIHNlcmlhbGl6ZWQuCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9SRUFEX01PREVfU0NfTElORUFSSVpFID0gMTsKCiAgICAvKioKICAgICAqIFJlYWQgZnJvbSBtYXN0ZXIgb3IgZnVsbHkgbWlncmF0ZWQgcmVwbGljYS4gUmVjb3JkIHZlcnNpb25zIG1heSBub3QgYWx3YXlzIGluY3JlYXNlLgogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBQT0xJQ1lfUkVBRF9NT0RFX1NDX0FMTE9XX1JFUExJQ0EgPSAyOwoKICAgIC8qKgogICAgICogUmVhZCBmcm9tIG1hc3RlciBvciBmdWxseSBtaWdyYXRlZCByZXBsaWNhLiBVbmF2YWlsYWJsZSBwYXJ0aXRpb25zIGFyZSBhbGxvd2VkLiBSZWNvcmQgdmVyc2lvbnMgbWF5IG5vdCBhbHdheXMgaW5jcmVhc2UuCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IFBPTElDWV9SRUFEX01PREVfU0NfQUxMT1dfVU5BVkFJTEFCTEUgPSAzOwoKICAgIC8qCiAgICAgICogU2hvdWxkIHJhdyBieXRlcyByZXByZXNlbnRpbmcgYSBsaXN0IG9yIG1hcCBiZSBkZXNlcmlhbGl6ZWQgdG8gYW4gYXJyYXkuCiAgICAgICogU2V0IHRvIGZhbHNlIGZvciBiYWNrdXAgcHJvZ3JhbXMgdGhhdCBqdXN0IG5lZWQgYWNjZXNzIHRvIHJhdyBieXRlcy4KICAgICAgKiBEZWZhdWx0OiB0cnVlCiAgICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX0RFU0VSSUFMSVpFID0gImRlc2VyaWFsaXplIjsKCiAgICAvKioKICAgICAqIE1pbGxpc2Vjb25kcyB0byBzbGVlcCBiZXR3ZWVuIHJldHJpZXMuICBFbnRlciB6ZXJvIHRvIHNraXAgc2xlZXAuCiAgICAgKiBjb25zdCBPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfU0xFRVBfQkVUV0VFTl9SRVRSSUVTID0gInNsZWVwX2JldHdlZW5fcmV0cmllcyI7CgogICAgLyoqCiAgICAgKiBNYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIGJlZm9yZSBhYm9ydGluZyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAgICAqIFRoZSBpbml0aWFsIGF0dGVtcHQgaXMgbm90IGNvdW50ZWQgYXMgYSByZXRyeS4KICAgICAqIElmIE9QVF9NQVhfUkVUUklFUyBpcyBleGNlZWRlZCwgdGhlIHRyYW5zYWN0aW9uIHdpbGwgcmV0dXJuIGVycm9yIEVSUl9USU1FT1VULgogICAgICogV0FSTklORzogRGF0YWJhc2Ugd3JpdGVzIHRoYXQgYXJlIG5vdCBpZGVtcG90ZW50IChzdWNoIGFzICJhZGQiKQogICAgICogc2hvdWxkIG5vdCBiZSByZXRyaWVkIGJlY2F1c2UgdGhlIHdyaXRlIG9wZXJhdGlvbiBtYXkgYmUgcGVyZm9ybWVkCiAgICAgKiBtdWx0aXBsZSB0aW1lcyBpZiB0aGUgY2xpZW50IHRpbWVkIG91dCBwcmV2aW91cyB0cmFuc2FjdGlvbiBhdHRlbXB0cy4KICAgICAqIEl0J3MgaW1wb3J0YW50IHRvIHVzZSBhIGRpc3RpbmN0IHdyaXRlIHBvbGljeSBmb3Igbm9uLWlkZW1wb3RlbnQKICAgICAqIHdyaXRlcyB3aGljaCBzZXRzIE9QVF9NQVhfUkVUUklFUyA9IDA7CiAgICAgKiovCiAgICBwdWJsaWMgY29uc3QgT1BUX01BWF9SRVRSSUVTID0gIk9QVF9NQVhfUkVUUklFUyI7CgogICAgLyoqCiAgICAgKiBUb3RhbCB0cmFuc2FjdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4KICAgICAqIFRoZSBPUFRfVE9UQUxfVElNRU9VVCBpcyB0cmFja2VkIG9uIHRoZSBjbGllbnQgYW5kIHNlbnQgdG8gdGhlIHNlcnZlciBhbG9uZyB3aXRoCiAgICAgKiB0aGUgdHJhbnNhY3Rpb24gaW4gdGhlIHdpcmUgcHJvdG9jb2wuICBUaGUgY2xpZW50IHdpbGwgbW9zdCBsaWtlbHkgdGltZW91dAogICAgICogZmlyc3QsIGJ1dCB0aGUgc2VydmVyIGFsc28gaGFzIHRoZSBjYXBhYmlsaXR5IHRvIHRpbWVvdXQgdGhlIHRyYW5zYWN0aW9uLgoKICAgICAqIElmIE9QVF9UT1RBTF9USU1FT1VUIGlzIG5vdCB6ZXJvIGFuZCBPUFRfVE9UQUxfVElNRU9VVCBpcyByZWFjaGVkIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24KICAgICAqIGNvbXBsZXRlcywgdGhlIHRyYW5zYWN0aW9uIHdpbGwgcmV0dXJuIGVycm9yIEVSUl9USU1FT1VULgogICAgICogSWYgT1BUX1RPVEFMX1RJTUVPVVQgaXMgemVybywgdGhlcmUgd2lsbCBiZSBubyB0b3RhbCB0aW1lIGxpbWl0LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX1RPVEFMX1RJTUVPVVQgPSAiT1BUX1RPVEFMX1RJTUVPVVQiOwoKICAgIC8qKgogICAgICogU29ja2V0IGlkbGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgd2hlbiBwcm9jZXNzaW5nIGEgZGF0YWJhc2UgY29tbWFuZC4KCiAgICAgKiBJZiBPUFRfU09DS0VUX1RJTUVPVVQgaXMgbm90IHplcm8gYW5kIHRoZSBzb2NrZXQgaGFzIGJlZW4gaWRsZSBmb3IgYXQgbGVhc3QgT1BUX1NPQ0tFVF9USU1FT1VULAogICAgICogYm90aCBPUFRfTUFYX1JFVFJJRVMgYW5kIE9QVF9UT1RBTF9USU1FT1VUIGFyZSBjaGVja2VkLiAgSWYgT1BUX01BWF9SRVRSSUVTIGFuZCBPUFRfVE9UQUxfVElNRU9VVCBhcmUgbm90CiAgICAgKiBleGNlZWRlZCwgdGhlIHRyYW5zYWN0aW9uIGlzIHJldHJpZWQuCgogICAgICogSWYgYm90aCBPUFRfU09DS0VUX1RJTUVPVVQgYW5kIE9QVF9UT1RBTF9USU1FT1VUIGFyZSBub24temVybyBhbmQgT1BUX1NPQ0tFVF9USU1FT1VUID4gT1BUX1RPVEFMX1RJTUVPVVQsCiAgICAgKiB0aGVuIE9QVF9TT0NLRVRfVElNRU9VVCB3aWxsIGJlIHNldCB0byBPUFRfVE9UQUxfVElNRU9VVC4gIElmIE9QVF9TT0NLRVRfVElNRU9VVCBpcyB6ZXJvLCB0aGVyZSB3aWxsIGJlCiAgICAgKiBubyBzb2NrZXQgaWRsZSBsaW1pdC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9TT0NLRVRfVElNRU9VVCA9ICJPUFRfU09DS0VUX1RJTUVPVVQiOwoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lIGlmIGJhdGNoIGNvbW1hbmRzIHRvIGVhY2ggc2VydmVyIGFyZSBydW4gaW4gcGFyYWxsZWwgdGhyZWFkcy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9CQVRDSF9DT05DVVJSRU5UID0gIk9QVF9CQVRDSF9DT05DVVJSRU5UIjsKCiAgICAvKioKICAgICAqIEFsbG93IGJhdGNoIHRvIGJlIHByb2Nlc3NlZCBpbW1lZGlhdGVseSBpbiB0aGUgc2VydmVyJ3MgcmVjZWl2aW5nIHRocmVhZCB3aGVuIHRoZSBzZXJ2ZXIKICAgICAqIGRlZW1zIGl0IHRvIGJlIGFwcHJvcHJpYXRlLiAgSWYgZmFsc2UsIHRoZSBiYXRjaCB3aWxsIGFsd2F5cyBiZSBwcm9jZXNzZWQgaW4gc2VwYXJhdGUKICAgICAqIHRyYW5zYWN0aW9uIHRocmVhZHMuICBUaGlzIGZpZWxkIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHRoZSBuZXcgYmF0Y2ggaW5kZXggcHJvdG9jb2wuCiAgICAgKgogICAgICogRm9yIGJhdGNoIGV4aXN0cyBvciBiYXRjaCByZWFkcyBvZiBzbWFsbGVyIHNpemVkIHJlY29yZHMgKDw9IDFLIHBlciByZWNvcmQpLCBpbmxpbmUKICAgICAqIHByb2Nlc3Npbmcgd2lsbCBiZSBzaWduaWZpY2FudGx5IGZhc3RlciBvbiAiaW4gbWVtb3J5IiBuYW1lc3BhY2VzLiAgVGhlIHNlcnZlciBkaXNhYmxlcwogICAgICogaW5saW5lIHByb2Nlc3Npbmcgb24gZGlzayBiYXNlZCBuYW1lc3BhY2VzIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwb2xpY3kgZmllbGQuCiAgICAgKgogICAgICogSW5saW5lIHByb2Nlc3NpbmcgY2FuIGludHJvZHVjZSB0aGUgcG9zc2liaWxpdHkgb2YgdW5mYWlybmVzcyBiZWNhdXNlIHRoZSBzZXJ2ZXIKICAgICAqIGNhbiBwcm9jZXNzIHRoZSBlbnRpcmUgYmF0Y2ggYmVmb3JlIG1vdmluZyBvbnRvIHRoZSBuZXh0IGNvbW1hbmQuCiAgICAgKiBEZWZhdWx0OiB0cnVlCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfQUxMT1dfSU5MSU5FID0gIk9QVF9BTExPV19JTkxJTkUiOwoKICAgIC8qKgogICAgICogU2VuZCBzZXQgbmFtZSBmaWVsZCB0byBzZXJ2ZXIgZm9yIGV2ZXJ5IGtleSBpbiB0aGUgYmF0Y2ggZm9yIGJhdGNoIGluZGV4IHByb3RvY29sLgogICAgICogVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSB3aGVuIGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQgYW5kIHNlY3VyaXR5IHJvbGVzIGFyZSBkZWZpbmVkCiAgICAgKiBvbiBhIHBlciBzZXQgYmFzaXMuCiAgICAgKiBEZWZhdWx0OiBmYWxzZQogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX1NFTkRfU0VUX05BTUUgPSAiT1BUX1NFTkRfU0VUX05BTUUiOwoKICAgIC8qKgogICAgICogQWJvcnQgdGhlIHNjYW4gaWYgdGhlIGNsdXN0ZXIgaXMgbm90IGluIGEgc3RhYmxlIHN0YXRlLiBEZWZhdWx0IGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfRkFJTF9PTl9DTFVTVEVSX0NIQU5HRSA9ICJPUFRfRkFJTF9PTl9DTFVTVEVSX0NIQU5HRSI7CgogICAgLyoqCiAgICAgKiBBY2NlcHRzIG9uZSBvZiB0aGUgU0NBTl9QUklPUklUWV8qIHZhbHVlcy4KICAgICAqCiAgICAgKiBUaGUgcHJpb3JpdHkgb2YgdGhlIHNjYW4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9TQ0FOX1BSSU9SSVRZID0gIk9QVF9TQ0FOX1BSSU9SSVRZIjsKCiAgICAvKioKICAgICAqIFRoZSBjbHVzdGVyIHdpbGwgYXV0by1hZGp1c3QgdGhlIHByaW9yaXR5IG9mIHRoZSBzY2FuLgogICAgICogYXV0by1hZGp1c3QgdGhlIHNjYW4gcHJpb3JpdHkgKGRlZmF1bHQpCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTQ0FOX1BSSU9SSVRZX0FVVE8gPSAiU0NBTl9QUklPUklUWV9BVVRPIjsKCiAgICAvKioKICAgICAqIFNldCB0aGUgc2NhbiBhcyBoYXZpbmcgbG93IHByaW9yaXR5LgogICAgICogbG93IHByaW9yaXR5IHNjYW4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFNDQU5fUFJJT1JJVFlfTE9XID0gIlNDQU5fUFJJT1JJVFlfTE9XIjsKCiAgICAvKioKICAgICAqIFNldCB0aGUgc2NhbiBhcyBoYXZpbmcgbWVkaXVtIHByaW9yaXR5LgogICAgICogbWVkaXVtIHByaW9yaXR5IHNjYW4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFNDQU5fUFJJT1JJVFlfTUVESVVNID0gIlNDQU5fUFJJT1JJVFlfTUVESVVNIjsKCiAgICAvKioKICAgICAqIFNldCB0aGUgc2NhbiBhcyBoYXZpbmcgaGlnaCBwcmlvcml0eS4KICAgICAqIGhpZ2ggcHJpb3JpdHkgc2NhbgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0NBTl9QUklPUklUWV9ISUdIID0gIlNDQU5fUFJJT1JJVFlfSElHSCI7CgogICAgLyoqCiAgICAgKiBEbyBub3QgcmV0dXJuIHRoZSBiaW5zIG9mIHRoZSByZWNvcmRzIG1hdGNoZWQgYnkgdGhlIHNjYW4uCiAgICAgKgogICAgICogYm9vbGVhbiB2YWx1ZSAoZGVmYXVsdDogZmFsc2UpCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfU0NBTl9OT0JJTlMgPSAiT1BUX1NDQU5fTk9CSU5TIjsKCiAgICAvKioKICAgICAqIFNldCB0aGUgc2NhbiB0byBydW4gb3ZlciBhIGdpdmVuIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvc3NpYmxlIHJlY29yZHMuCiAgICAgKgogICAgICogaW50ZWdlciB2YWx1ZSBmcm9tIDEtMTAwIChkZWZhdWx0OiAxMDApCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfU0NBTl9QRVJDRU5UQUdFID0gIk9QVF9TQ0FOX1BFUkNFTlRBR0UiOwoKICAgIC8qKgogICAgICogU2NhbiBhbGwgdGhlIG5vZGVzIGluIHRoZSBjbHVzdGVyIGNvbmN1cnJlbnRseS4KICAgICAqCiAgICAgKiBib29sZWFuIHZhbHVlIChkZWZhdWx0OiBmYWxzZSkKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9TQ0FOX0NPTkNVUlJFTlRMWSA9ICJPUFRfU0NBTl9DT05DVVJSRU5UTFkiOwoKICAgIC8qKgogICAgICogRG8gbm90IHJldHVybiB0aGUgYmlucyBvZiB0aGUgcmVjb3JkcyBtYXRjaGVkIGJ5IHRoZSBxdWVyeS4KICAgICAqCiAgICAgKiBib29sZWFuIHZhbHVlIChkZWZhdWx0OiBmYWxzZSkKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9RVUVSWV9OT0JJTlMgPSAiT1BUX1FVRVJZX05PQklOUyI7CgogICAgLyoqCiAgICAgKiBSZXZlcnQgdG8gdGhlIG9sZGVyIGJhdGNoLWRpcmVjdCBwcm90b2NvbCwgaW5zdGVhZCBvZiBiYXRjaC1pbmRleC4KICAgICAqCiAgICAgKiBib29sZWFuIHZhbHVlIChkZWZhdWx0OiBmYWxzZSkKICAgICAqLwogICAgcHVibGljIGNvbnN0IFVTRV9CQVRDSF9ESVJFQ1QgPSAiVVNFX0JBVENIX0RJUkVDVCI7CgogICAgLyoqCiAgICAgKiBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgZHVyYWJsZSBkZWxldGUgZm9yIHRoZSBvcGVyYXRpb24uCiAgICAgKiBEdXJhYmxlIGRlbGV0ZXMgYXJlIGFuIEVudGVycHJpc2UgRWRpdGlvbiBmZWF0dXJlCiAgICAgKgogICAgICogYm9vbGVhbiB2YWx1ZSAoZGVmYXVsdDogZmFsc2UpCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfUE9MSUNZX0RVUkFCTEVfREVMRVRFID0gIk9QVF9QT0xJQ1lfRFVSQUJMRV9ERUxFVEUiOwoKICAgIC8qKgogICAgICogTWFwIHBvbGljeSBkZWNsYXJpbmcgdGhlIG9yZGVyaW5nIG9mIGFuIEFlcm9zcGlrZSBtYXAgdHlwZQogICAgICoKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpBU19NQVBfVU5PUkRFUkVECiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6QVNfTUFQX0tFWV9PUkRFUkVECiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6QVNfTUFQX0tFWV9WQUxVRV9PUkRFUkVECiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QVF9NQVBfT1JERVIgPSAiT1BUX01BUF9PUkRFUiI7CgogICAgLyoqCiAgICAgKiBUaGUgQWVyb3NwaWtlIG1hcCBpcyB1bm9yZGVyZWQKICAgICAqIChkZWZhdWx0KQogICAgICovCiAgICBwdWJsaWMgY29uc3QgQVNfTUFQX1VOT1JERVJFRCA9ICJBU19NQVBfVU5PUkRFUkVEIjsKCiAgICAvKioKICAgICAqIFRoZSBBZXJvc3Bpa2UgbWFwIGlzIG9yZGVyZWQgYnkga2V5CiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEFTX01BUF9LRVlfT1JERVJFRCA9ICJBU19NQVBfS0VZX09SREVSRUQiOwoKICAgIC8qKgogICAgICogVGhlIEFlcm9zcGlrZSBtYXAgaXMgb3JkZXJlZCBieSBrZXkgYW5kIHZhbHVlCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEFTX01BUF9LRVlfVkFMVUVfT1JERVJFRCA9ICJBU19NQVBfS0VZX1ZBTFVFX09SREVSRUQiOwoKICAgIC8qKgogICAgICogTWFwIHBvbGljeSBkZWNsYXJpbmcgdGhlIGJlaGF2aW9yIG9mIG1hcCB3cml0ZSBvcGVyYXRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6QVNfTUFQX1VQREFURQogICAgICogQHNlZSBBZXJvc3Bpa2U6OkFTX01BUF9VUERBVEVfT05MWQogICAgICogQHNlZSBBZXJvc3Bpa2U6OkFTX01BUF9DUkVBVEVfT05MWQogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfTUFQX1dSSVRFX01PREUgPSAiT1BUX01BUF9XUklURV9NT0RFIjsKCiAgICAvKioKICAgICAqIChkZWZhdWx0KQogICAgICovCiAgICBwdWJsaWMgY29uc3QgQVNfTUFQX1VQREFURSA9ICJBU19NQVBfVVBEQVRFIjsKCiAgICBwdWJsaWMgY29uc3QgQVNfTUFQX1VQREFURV9PTkxZID0gIkFTX01BUF9VUERBVEVfT05MWSI7CgogICAgcHVibGljIGNvbnN0IEFTX01BUF9DUkVBVEVfT05MWSA9ICJBU19NQVBfQ1JFQVRFX09OTFkiOwoKICAgIC8qKgogICAgICogTWFwIHBvbGljeSBmbGFncyBkZWNsYXJpbmcgdGhlIGJlaGF2aW9yIG9mIG1hcCB3cml0ZSBvcGVyYXRpb25zCiAgICAgKiBAc2VlIEFlcm9zcGlrZTo6QVNfTUFQX1dSSVRFX0RFRkFVTFQKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpBU19NQVBfV1JJVEVfQ1JFQVRFX09OTFkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpBU19NQVBfV1JJVEVfVVBEQVRFX09OTFkKICAgICAqIEBzZWUgQWVyb3NwaWtlOjpBU19NQVBfV1JJVEVfTk9fRkFJTAogICAgICogQHNlZSBBZXJvc3Bpa2U6OkFTX01BUF9XUklURV9QQVJUSUFMCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QVF9NQVBfV1JJVEVfRkxBR1MgPSAiT1BUX01BUF9XUklURV9GTEFHUyI7CgogICAgLyoqCiAgICAgKiBEZWZhdWx0LiBBbGxvdyBjcmVhdGUgb3IgdXBkYXRlLgogICAgICogKGRlZmF1bHQpCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBBU19NQVBfV1JJVEVfREVGQVVMVCA9ICJBU19NQVBfV1JJVEVfREVGQVVMVCI7CgogICAgLyoqCiAgICAgKiBJZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzLCB0aGUgaXRlbSB3aWxsIGJlIGRlbmllZC4gSWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCwgYSBuZXcgaXRlbSB3aWxsIGJlIGNyZWF0ZWQuCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEFTX01BUF9XUklURV9DUkVBVEVfT05MWSA9ICJBU19NQVBfV1JJVEVfQ1JFQVRFX09OTFkiOwoKICAgIC8qKgogICAgICogSWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cywgdGhlIGl0ZW0gd2lsbCBiZSBvdmVyd3JpdHRlbi4gSWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdCwgdGhlIGl0ZW0gd2lsbCBiZSBkZW5pZWQuCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEFTX01BUF9XUklURV9VUERBVEVfT05MWSA9ICJBU19NQVBfV1JJVEVfVVBEQVRFX09OTFkiOwoKICAgIC8qKgogICAgICogRG8gbm90IHJhaXNlIGVycm9yIGlmIGEgbWFwIGl0ZW0gaXMgZGVuaWVkIGR1ZSB0byB3cml0ZSBmbGFnIGNvbnN0cmFpbnRzIChhbHdheXMgc3VjY2VlZCkuCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEFTX01BUF9XUklURV9OT19GQUlMID0gIkFTX01BUF9XUklURV9OT19GQUlMIjsKCiAgICAvKioKICAgICAqIEFsbG93IG90aGVyIHZhbGlkIG1hcCBpdGVtcyB0byBiZSBjb21taXR0ZWQgaWYgYSBtYXAgaXRlbSBpcyBkZW5pZWQgZHVlIHRvIHdyaXRlIGZsYWcgY29uc3RyYWludHMuCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEFTX01BUF9XUklURV9QQVJUSUFMID0gIkFTX01BUF9XUklURV9QQVJUSUFMIjsKCiAgICAvKioKICAgICAqIERvIG5vdCByZXR1cm4gYSByZXN1bHQgZm9yIHRoZSBtYXAgb3BlcmF0aW9uIChnZXQgYW5kIHJlbW92ZSBvcGVyYXRpb25zKQogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2d1aWRlL2NkdC1tYXAuaHRtbCNtYXAtYXBpcyBNYXAgUmVzdWx0IFR5cGVzCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE1BUF9SRVRVUk5fTk9ORSA9ICJBU19NQVBfUkVUVVJOX05PTkUiOwoKICAgIC8qKgogICAgICogUmV0dXJuIGluIGtleSBpbmRleCBvcmRlcgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2d1aWRlL2NkdC1tYXAuaHRtbCNtYXAtYXBpcyBNYXAgUmVzdWx0IFR5cGVzCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE1BUF9SRVRVUk5fSU5ERVggPSAiQVNfTUFQX1JFVFVSTl9JTkRFWCI7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gaW4gcmV2ZXJzZSBrZXkgb3JkZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9jZHQtbWFwLmh0bWwjbWFwLWFwaXMgTWFwIFJlc3VsdCBUeXBlcwogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBNQVBfUkVUVVJOX1JFVkVSU0VfSU5ERVggPSAiQVNfTUFQX1JFVFVSTl9SRVZFUlNFX0lOREVYIjsKCiAgICAvKioKICAgICAqIFJldHVybiBpbiB2YWx1ZSBvcmRlcgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2d1aWRlL2NkdC1tYXAuaHRtbCNtYXAtYXBpcyBNYXAgUmVzdWx0IFR5cGVzCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE1BUF9SRVRVUk5fUkFOSyA9ICJBU19NQVBfUkVUVVJOX1JBTksiOwoKICAgIC8qKgogICAgICogUmV0dXJuIGluIHJldmVyc2UgdmFsdWUgb3JkZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9jZHQtbWFwLmh0bWwjbWFwLWFwaXMgTWFwIFJlc3VsdCBUeXBlcwogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBNQVBfUkVUVVJOX1JFVkVSU0VfUkFOSyA9ICJBU19NQVBfUkVUVVJOX1JFVkVSU0VfUkFOSyI7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gY291bnQgb2YgaXRlbXMgc2VsZWN0ZWQKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9jZHQtbWFwLmh0bWwjbWFwLWFwaXMgTWFwIFJlc3VsdCBUeXBlcwogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBNQVBfUkVUVVJOX0NPVU5UID0gIkFTX01BUF9SRVRVUk5fQ09VTlQiOwoKICAgIC8qKgogICAgICogUmV0dXJuIGtleSBmb3Igc2luZ2xlIGtleSByZWFkIGFuZCBrZXkgbGlzdCBmb3IgcmFuZ2UgcmVhZAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2d1aWRlL2NkdC1tYXAuaHRtbCNtYXAtYXBpcyBNYXAgUmVzdWx0IFR5cGVzCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE1BUF9SRVRVUk5fS0VZID0gIkFTX01BUF9SRVRVUk5fS0VZIjsKCiAgICAvKioKICAgICAqIFJldHVybiB2YWx1ZSBmb3Igc2luZ2xlIGtleSByZWFkIGFuZCB2YWx1ZSBsaXN0IGZvciByYW5nZSByZWFkCiAgICAgKiBAbGluayBodHRwczovL3d3dy5hZXJvc3Bpa2UuY29tL2RvY3MvZ3VpZGUvY2R0LW1hcC5odG1sI21hcC1hcGlzIE1hcCBSZXN1bHQgVHlwZXMKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgTUFQX1JFVFVSTl9WQUxVRSA9ICJBU19NQVBfUkVUVVJOX1ZBTFVFIjsKCiAgICAvKioKICAgICAqIFJldHVybiBrZXkvdmFsdWUgaXRlbXMKICAgICAqIFdpbGwgYmUgb2YgdGhlIGZvcm0gWydrZXkxJywgJ3ZhbDEnLCAna2V5MicsICd2YWwyJywgJ2tleTMnLCAndmFsM10KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LmFlcm9zcGlrZS5jb20vZG9jcy9ndWlkZS9jZHQtbWFwLmh0bWwjbWFwLWFwaXMgTWFwIFJlc3VsdCBUeXBlcwogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBNQVBfUkVUVVJOX0tFWV9WQUxVRSA9ICJBU19NQVBfUkVUVVJOX0tFWV9WQUxVRSI7CgogICAgcHVibGljIGNvbnN0IExPR19MRVZFTF9PRkYgPSAiTE9HX0xFVkVMX09GRiI7CgogICAgcHVibGljIGNvbnN0IExPR19MRVZFTF9FUlJPUiA9ICJMT0dfTEVWRUxfRVJST1IiOwoKICAgIHB1YmxpYyBjb25zdCBMT0dfTEVWRUxfV0FSTiA9ICJMT0dfTEVWRUxfV0FSTiI7CgogICAgcHVibGljIGNvbnN0IExPR19MRVZFTF9JTkZPID0gIkxPR19MRVZFTF9JTkZPIjsKCiAgICBwdWJsaWMgY29uc3QgTE9HX0xFVkVMX0RFQlVHID0gIkxPR19MRVZFTF9ERUJVRyI7CgogICAgcHVibGljIGNvbnN0IExPR19MRVZFTF9UUkFDRSA9ICJMT0dfTEVWRUxfVFJBQ0UiOwoKICAgIC8qKgogICAgICogQWVyb3NwaWtlIFN0YXR1cyBDb2RlcwogICAgICoKICAgICAqIEVhY2ggQWVyb3NwaWtlIEFQSSBtZXRob2QgaW52b2NhdGlvbiByZXR1cm5zIGEgc3RhdHVzIGNvZGUgZnJvbSB0aGUKICAgICAqIHNlcnZlci4KICAgICAqCiAgICAgKiBUaGUgc3RhdHVzIGNvZGVzIG1hcCB0byB0aGUKICAgICAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vYWVyb3NwaWtlL2Flcm9zcGlrZS1jbGllbnQtYy9ibG9iL21hc3Rlci9zcmMvaW5jbHVkZS9hZXJvc3Bpa2UvYXNfc3RhdHVzLmggc3RhdHVzIGNvZGVzfQogICAgICogb2YgdGhlIEMgY2xpZW50LgogICAgICoKICAgICAqIFN1Y2Nlc3MKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9LID0gIkFFUk9TUElLRV9PSyI7CgogICAgLy8gLTEwIC0gLTEgLSBDbGllbnQgRXJyb3JzCgogICAgLyoqCiAgICAgKiBTeW5jaHJvbm91cyBjb25uZWN0aW9uIGVycm9yCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9DT05ORUNUSU9OID0gIkFFUk9TUElLRV9FUlJfQ09OTkVDVElPTiI7CgogICAgLyoqCiAgICAgKiBOb2RlIGludmFsaWQgb3IgY291bGQgbm90IGJlIGZvdW5kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9UTFNfRVJST1IgPSAiQUVST1NQSUtFX0VSUl9UTFMiOwoKICAgIC8qKgogICAgICogTm9kZSBpbnZhbGlkIG9yIGNvdWxkIG5vdCBiZSBmb3VuZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfSU5WQUxJRF9OT0RFID0gIkFFUk9TUElLRV9FUlJfSU5WQUxJRF9OT0RFIjsKCiAgICAvKioKICAgICAqIENsaWVudCBoaXQgdGhlIG1heCBhc3luY2hyb25vdXMgY29ubmVjdGlvbnMKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX05PX01PUkVfQ09OTkVDVElPTlMgPSAiQUVST1NQSUtFX0VSUl9OT19NT1JFX0NPTk5FQ1RJT05TIjsKCiAgICAvKioKICAgICAqIEFzeW5jaHJvbm91cyBjb25uZWN0aW9uIGVycm9yCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9BU1lOQ19DT05ORUNUSU9OID0gIkFFUk9TUElLRV9FUlJfQVNZTkNfQ09OTkVDVElPTiI7CgogICAgLyoqCiAgICAgKiBRdWVyeSBvciBzY2FuIHdhcyBhYm9ydGVkIGluIHVzZXIncyBjYWxsYmFjawogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfQ0xJRU5UX0FCT1JUID0gIkFFUk9TUElLRV9FUlJfQ0xJRU5UX0FCT1JUIjsKCiAgICAvKioKICAgICAqIEhvc3QgbmFtZSBjb3VsZCBub3QgYmUgZm91bmQgaW4gRE5TIGxvb2t1cAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfSU5WQUxJRF9IT1NUID0gIkFFUk9TUElLRV9FUlJfSU5WQUxJRF9IT1NUIjsKCiAgICAvKioKICAgICAqIEludmFsaWQgY2xpZW50IEFQSSBwYXJhbWV0ZXIKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX1BBUkFNID0gIkFFUk9TUElLRV9FUlJfUEFSQU0iOwoKICAgIC8qKgogICAgICogR2VuZXJpYyBjbGllbnQgQVBJIHVzYWdlIGVycm9yCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9DTElFTlQgPSAiQUVST1NQSUtFX0VSUl9DTElFTlQiOwoKICAgIC8vIDEtNDkgLSBCYXNpYyBTZXJ2ZXIgRXJyb3JzCgogICAgLyoqCiAgICAgKiBHZW5lcmljIGVycm9yIHJldHVybmVkIGJ5IHNlcnZlcgogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfU0VSVkVSID0gIkFFUk9TUElLRV9FUlJfU0VSVkVSIjsKCiAgICAvKioKICAgICAqIE5vIHJlY29yZCBpcyBmb3VuZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlL3NldC9rZXkgY29tYmluYXRpb24uCiAgICAgKiBNYXkgYmUgcmV0dXJuZWQgYnkgYSByZWFkLCBvciBhIHdyaXRlIHdpdGggT1BUX1BPTElDWV9FWElTVFMKICAgICAqIHNldCB0byBQT0xJQ1lfRVhJU1RTX1VQREFURQogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfUkVDT1JEX05PVF9GT1VORCA9ICJBRVJPU1BJS0VfRVJSX1JFQ09SRF9OT1RfRk9VTkQiOwoKICAgIC8qKgogICAgICogR2VuZXJhdGlvbiBvZiByZWNvcmQgZG9lcyBub3Qgc2F0aXNmeSB0aGUgT1BUX1BPTElDWV9HRU4gd3JpdGUgcG9saWN5CiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9SRUNPUkRfR0VORVJBVElPTiA9ICJBRVJPU1BJS0VfRVJSX1JFQ09SRF9HRU5FUkFUSU9OIjsKCiAgICAvKioKICAgICAqIElsbGVnYWwgcGFyYW1ldGVyIHNlbnQgZnJvbSBjbGllbnQuIENoZWNrIGNsaWVudCBwYXJhbWV0ZXJzIGFuZCB2ZXJpZnkKICAgICAqIGVhY2ggaXMgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgc2VydmVyIHZlcnNpb24KICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX1JFUVVFU1RfSU5WQUxJRCA9ICJBRVJPU1BJS0VfRVJSX1JFUVVFU1RfSU5WQUxJRCI7CgogICAgLyoqCiAgICAgKiBUaGUgb3BlcmF0aW9uIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IGJpbiBvbiB0aGUgc2VydmVyCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9PUF9OT1RfQVBQTElDQUJMRSA9ICJBRVJPU1BJS0VfRVJSX09QX05PVF9BUFBMSUNBQkxFIjsKCiAgICAvKioKICAgICAqIFJlY29yZCBhbHJlYWR5IGV4aXN0cy4gTWF5IGJlIHJldHVybmVkIGJ5IGEgd3JpdGUgd2l0aCB0aGUKICAgICAqIE9QVF9QT0xJQ1lfRVhJU1RTIHdyaXRlIHBvbGljeSBzZXQgdG8gUE9MSUNZX0VYSVNUU19DUkVBVEUKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX1JFQ09SRF9FWElTVFMgPSAiQUVST1NQSUtFX0VSUl9SRUNPUkRfRVhJU1RTIjsKCiAgICAvKioKICAgICAqIChmdXR1cmUpIEZvciBmdXR1cmUgd3JpdGUgcmVxdWVzdHMgd2hpY2ggc3BlY2lmeSAnQklOX0NSRUFURV9PTkxZJywKICAgICAqIHJlcXVlc3QgZmFpbGVkIGJlY2F1c2Ugb25lIG9mIHRoZSBiaW5zIGluIHRoZSB3cml0ZSBhbHJlYWR5IGV4aXN0cwogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfQklOX0VYSVNUUyA9ICJBRVJPU1BJS0VfRVJSX0JJTl9FWElTVFMiOwoKICAgIC8qKgogICAgICogT24gc2NhbiByZXF1ZXN0cywgdGhlIHNjYW4gdGVybWluYXRlcyBiZWNhdXNlIGNsdXN0ZXIgaXMgaW4gbWlncmF0aW9uLgogICAgICogT25seSBvY2N1ciB3aGVuIGNsaWVudCByZXF1ZXN0ZWQgJ2ZhaWxfb25fY2x1c3Rlcl9jaGFuZ2UnIHBvbGljeSBvbiBzY2FuCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9DTFVTVEVSX0NIQU5HRSA9ICJBRVJPU1BJS0VfRVJSX0NMVVNURVJfQ0hBTkdFIjsKCiAgICAvKioKICAgICAqIE9jY3VycyB3aGVuIHN0b3Bfd3JpdGVzIGlzIHRydWUgKGVpdGhlciBtZW1vcnkgLSBzdG9wLXdyaXRlcy1wY3QgLQogICAgICogb3IgZGlzayAtIG1pbi1hdmFpbC1wY3QpLiBDYW4gYWxzbyBvY2N1ciBpZiBtZW1vcnkgY2Fubm90IGJlIGFsbG9jYXRlZAogICAgICogYW55bW9yZSAoYnV0IHN0b3Bfd3JpdGVzIHNob3VsZCBpbiBnZW5lcmFsIGhpdCBmaXJzdCkuIE5hbWVzcGFjZSB3aWxsIG5vCiAgICAgKiBsb25nZXIgYmUgYWJsZSB0byBhY2NlcHQgd3JpdGUgcmVxdWVzdHMKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX1NFUlZFUl9GVUxMID0gIkFFUk9TUElLRV9FUlJfU0VSVkVSX0ZVTEwiOwoKICAgIC8qKgogICAgICogUmVxdWVzdCB3YXMgbm90IGNvbXBsZXRlZCBkdXJpbmcgdGhlIGFsbG9jYXRlZCB0aW1lLCB0aHVzIGFib3J0ZWQKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX1RJTUVPVVQgPSAiQUVST1NQSUtFX0VSUl9USU1FT1VUIjsKCiAgICAvKioKICAgICAqIFdyaXRlIHJlcXVlc3QgaXMgcmVqZWN0ZWQgYmVjYXVzZSBYRFIgaXMgbm90IHJ1bm5pbmcuCiAgICAgKiBPbmx5IG9jY3VyIHdoZW4gWERSIGNvbmZpZ3VyYXRpb24geGRyLXN0b3Atd3JpdGVzLW5veGRyIGlzIG9uCiAgICAgKiAqLwogICAgI1tEZXByZWNhdGVkKCJXaWxsIGJlIHJldXNlZCBhcyBFUlJfQUxXQVlTX0ZPUkJJRERFTiIpXQogICAgcHVibGljIGNvbnN0IEVSUl9BTFdBWVNfRk9SQklEREVOID0gIkFFUk9TUElLRV9FUlJfQUxXQVlTX0ZPUkJJRERFTiI7CgogICAgLyoqCiAgICAgKiBTZXJ2ZXIgaXMgbm90IGFjY2VwdGluZyByZXF1ZXN0cy4KICAgICAqIE9jY3VyIGR1cmluZyBzaW5nbGUgbm9kZSBvbiBhIHF1aWNrIHJlc3RhcnQgdG8gam9pbiBleGlzdGluZyBjbHVzdGVyCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9DTFVTVEVSID0gIkFFUk9TUElLRV9FUlJfQ0xVU1RFUiI7CgogICAgLyoqCiAgICAgKiBPcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgZHVlIHRvIGRhdGEgdHlwZSBvciBuYW1lc3BhY2UgY29uZmlndXJhdGlvbiBpbmNvbXBhdGliaWxpdHkuCiAgICAgKiBGb3IgZXhhbXBsZSwgYXBwZW5kIHRvIGEgZmxvYXQgZGF0YSB0eXBlLCBvciBpbnNlcnQgYSBub24taW50ZWdlciB3aGVuCiAgICAgKiBuYW1lc3BhY2UgaXMgY29uZmlndXJlZCBhcyBkYXRhLWluLWluZGV4CiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9CSU5fSU5DT01QQVRJQkxFX1RZUEUgPSAiQUVST1NQSUtFX0VSUl9CSU5fSU5DT01QQVRJQkxFX1RZUEUiOwoKICAgIC8qKgogICAgICogQXR0ZW1wdCB0byB3cml0ZSBhIHJlY29yZCB3aG9zZSBzaXplIGlzIGJpZ2dlciB0aGFuIHRoZSBjb25maWd1cmVkIHdyaXRlLWJsb2NrLXNpemUKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX1JFQ09SRF9UT09fQklHID0gIkFFUk9TUElLRV9FUlJfUkVDT1JEX1RPT19CSUciOwoKICAgIC8qKgogICAgICogVG9vIG1hbnkgY29uY3VycmVudCBvcGVyYXRpb25zICg+IHRyYW5zYWN0aW9uLXBlbmRpbmctbGltaXQpIG9uIHRoZSBzYW1lIHJlY29yZC4KICAgICAqIEEgImhvdC1rZXkiIHNpdHVhdGlvbgogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfUkVDT1JEX0JVU1kgPSAiQUVST1NQSUtFX0VSUl9SRUNPUkRfQlVTWSI7CgogICAgLyoqCiAgICAgKiBTY2FuIGFib3J0ZWQgYnkgdXNlciBvbiBzZXJ2ZXIKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX1NDQU5fQUJPUlRFRCA9ICJBRVJPU1BJS0VfRVJSX1NDQU5fQUJPUlRFRCI7CgogICAgLyoqCiAgICAgKiBUaGUgY2xpZW50IGlzIHRyeWluZyB0byB1c2UgYSBmZWF0dXJlIHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0IGluIHRoZQogICAgICogdmVyc2lvbiBvZiB0aGUgc2VydmVyIG5vZGUgaXQgaXMgdGFsa2luZyB0bwogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfVU5TVVBQT1JURURfRkVBVFVSRSA9ICJBRVJPU1BJS0VfRVJSX1VOU1VQUE9SVEVEX0ZFQVRVUkUiOwoKICAgIC8qKgogICAgICogKGZ1dHVyZSkgRm9yIGZ1dHVyZSB3cml0ZSByZXF1ZXN0cyB3aGljaCBzcGVjaWZ5ICdSRVBMQUNFX09OTFknLAogICAgICogcmVxdWVzdCBmYWlsIGJlY2F1c2Ugc3BlY2lmaWVkIGJpbiBuYW1lIGRvZXMgbm90IGV4aXN0IGluIHJlY29yZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfQklOX05PVF9GT1VORCA9ICJBRVJPU1BJS0VfRVJSX0JJTl9OT1RfRk9VTkQiOwoKICAgIC8qKgogICAgICogV3JpdGUgcmVxdWVzdCBpcyByZWplY3RlZCBiZWNhdXNlIG9uZSBvciBtb3JlIHN0b3JhZ2UgZGV2aWNlcyBvZiB0aGUgbm9kZSBhcmUgbm90IGtlZXBpbmcgdXAKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX0RFVklDRV9PVkVSTE9BRCA9ICJBRVJPU1BJS0VfRVJSX0RFVklDRV9PVkVSTE9BRCI7CgogICAgLyoqCiAgICAgKiBGb3IgdXBkYXRlIHJlcXVlc3Qgb24gcmVjb3JkcyB3aGljaCBoYXMga2V5IHN0b3JlZCwgdGhlIGluY29taW5nIGtleSBkb2VzIG5vdCBtYXRjaAogICAgICogdGhlIGV4aXN0aW5nIHN0b3JlZCBrZXkuIFRoaXMgaW5kaWNhdGVzIGEgUklQRU1EMTYwIGtleSBjb2xsaXNpb24gaGFzIGhhcHBlbmQgKHJlcG9ydCBhcyBhIGJ1ZykKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX1JFQ09SRF9LRVlfTUlTTUFUQ0ggPSAiQUVST1NQSUtFX0VSUl9SRUNPUkRfS0VZX01JU01BVENIIjsKCiAgICAvKioKICAgICAqIE5hbWVzcGFjZSBpbiByZXF1ZXN0IG5vdCBmb3VuZCBvbiBzZXJ2ZXIKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX05BTUVTUEFDRV9OT1RfRk9VTkQgPSAiQUVST1NQSUtFX0VSUl9OQU1FU1BBQ0VfTk9UX0ZPVU5EIjsKCiAgICAvKioKICAgICAqIEJpbiBuYW1lIGxlbmd0aCBncmVhdGVyIHRoYW4gMTQgY2hhcmFjdGVycywgb3IgbWF4aW11bSBudW1iZXIgb2YgdW5pcXVlIGJpbiBuYW1lcyBhcmUgZXhjZWVkZWQKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX0JJTl9OQU1FID0gIkFFUk9TUElLRV9FUlJfQklOX05BTUUiOwoKICAgIC8qKgogICAgICogT3BlcmF0aW9uIG5vdCBhbGxvd2VkIGF0IHRoaXMgdGltZS4KICAgICAqIEZvciB3cml0ZXMsIHRoZSBzZXQgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZyBkZWxldGVkLCBvciB0aGUgc2V0J3Mgc3RvcC13cml0ZSBpcyByZWFjaGVkOwogICAgICogRm9yIHNjYW4sIHRvbyBtYW55IGNvbmN1cnJlbnQgc2NhbiBqb2JzICg+IHNjYW4tbWF4LWFjdGl2ZSk7CiAgICAgKiBGb3IgWERSLWVkIGNsdXN0ZXIsIGZhaWwgd3JpdGVzIHdoaWNoIGFyZSBub3QgcmVwbGljYXRlZCBmcm9tIGFub3RoZXIgZGF0YWNlbnRlcgogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfRkFJTF9GT1JCSURERU4gPSAiQUVST1NQSUtFX0VSUl9GT1JCSURERU4iOwoKICAgIC8qKgogICAgICogVGFyZ2V0IHdhcyBub3QgZm91bmQgZm9yIG9wZXJhdGlvbnMgdGhhdCByZXF1aXJlcyBhIHRhcmdldCB0byBiZSBmb3VuZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfRkFJTF9FTEVNRU5UX05PVF9GT1VORCA9ICJBRVJPU1BJS0VfRVJSX0ZBSUxfTk9UX0ZPVU5EIjsKCiAgICAvKioKICAgICAqIFRhcmdldCBhbHJlYWR5IGV4aXN0IGZvciBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZXMgdGhlIHRhcmdldCB0byBub3QgZXhpc3QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX0ZBSUxfRUxFTUVOVF9FWElTVFMgPSAiQUVST1NQSUtFX0VSUl9GQUlMX0VMRU1FTlRfRVhJU1RTIjsKCiAgICAvLyA1MC04OSAtIFNlY3VyaXR5IFNwZWNpZmljIEVycm9ycwoKICAgIC8qKgogICAgICogU2VjdXJpdHkgZnVuY3Rpb25hbGl0eSBub3Qgc3VwcG9ydGVkIGJ5IGNvbm5lY3RlZCBzZXJ2ZXIKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX1NFQ1VSSVRZX05PVF9TVVBQT1JURUQgPSAiQUVST1NQSUtFX0VSUl9TRUNVUklUWV9OT1RfU1VQUE9SVEVEIjsKCiAgICAvKioKICAgICAqIFNlY3VyaXR5IGZ1bmN0aW9uYWxpdHkgbm90IGVuYWJsZWQgYnkgY29ubmVjdGVkIHNlcnZlcgogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfU0VDVVJJVFlfTk9UX0VOQUJMRUQgPSAiQUVST1NQSUtFX0VSUl9TRUNVUklUWV9OT1RfRU5BQkxFRCI7CgogICAgLyoqCiAgICAgKiBTZWN1cml0eSBzY2hlbWUgbm90IHN1cHBvcnRlZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfU0VDVVJJVFlfU0NIRU1FX05PVF9TVVBQT1JURUQgPSAiQUVST1NQSUtFX0VSUl9TRUNVUklUWV9TQ0hFTUVfTk9UX1NVUFBPUlRFRCI7CgogICAgLyoqCiAgICAgKiBVbnJlY29nbml6ZWQgc2VjdXJpdHkgY29tbWFuZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfSU5WQUxJRF9DT01NQU5EID0gIkFFUk9TUElLRV9FUlJfSU5WQUxJRF9DT01NQU5EIjsKCiAgICAvKioKICAgICAqIEZpZWxkIGlzIG5vdCB2YWxpZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfSU5WQUxJRF9GSUVMRCA9ICJBRVJPU1BJS0VfRVJSX0lOVkFMSURfRklFTEQiOwoKICAgIC8qKgogICAgICogU2VjdXJpdHkgcHJvdG9jb2wgbm90IGZvbGxvd2VkCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9JTExFR0FMX1NUQVRFID0gIkFFUk9TUElLRV9FUlJfSUxMRUdBTF9TVEFURSI7CgogICAgLyoqCiAgICAgKiBObyB1c2VyIHN1cHBsaWVkIG9yIHVua25vd24gdXNlcgogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfSU5WQUxJRF9VU0VSID0gIkFFUk9TUElLRV9FUlJfSU5WQUxJRF9VU0VSIjsKCiAgICAvKioKICAgICAqIFVzZXIgYWxyZWFkeSBleGlzdHMKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX1VTRVJfQUxSRUFEWV9FWElTVFMgPSAiQUVST1NQSUtFX0VSUl9VU0VSX0FMUkVBRFlfRVhJU1RTIjsKCiAgICAvKioKICAgICAqIFBhc3N3b3JkIGRvZXMgbm90IGV4aXN0cyBvciBub3QgcmVjb2duaXplZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfSU5WQUxJRF9QQVNTV09SRCA9ICJBRVJPU1BJS0VfRVJSX0lOVkFMSURfUEFTU1dPUkQiOwoKICAgIC8qKgogICAgICogRXhwaXJlZCBwYXNzd29yZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfRVhQSVJFRF9QQVNTV09SRCA9ICJBRVJPU1BJS0VfRVJSX0VYUElSRURfUEFTU1dPUkQiOwoKICAgIC8qKgogICAgICogRm9yYmlkZGVuIHBhc3N3b3JkIChlLmcuIHJlY2VudGx5IHVzZWQpCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9GT1JCSURERU5fUEFTU1dPUkQgPSAiQUVST1NQSUtFX0VSUl9GT1JCSURERU5fUEFTU1dPUkQiOwoKICAgIC8qKgogICAgICogSW52YWxpZCBjcmVkZW50aWFsIG9yIGNyZWRlbnRpYWwgZG9lcyBub3QgZXhpc3QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX0lOVkFMSURfQ1JFREVOVElBTCA9ICJBRVJPU1BJS0VfRVJSX0lOVkFMSURfQ1JFREVOVElBTCI7CgogICAgLyoqCiAgICAgKiBObyByb2xlKHMpIG9yIHVua25vd24gcm9sZShzKQogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfSU5WQUxJRF9ST0xFID0gIkFFUk9TUElLRV9FUlJfSU5WQUxJRF9ST0xFIjsKCiAgICAvKioKICAgICAqIFByaXZpbGVnZSBpcyBpbnZhbGlkCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9JTlZBTElEX1BSSVZJTEVHRSA9ICJBRVJPU1BJS0VfRVJSX0lOVkFMSURfUFJJVklMRUdFIjsKCiAgICAvKioKICAgICAqIFVzZXIgbXVzdCBiZSBhdXRoZW50aWNhdGVkIGJlZm9yZSBwZXJmb3JtaW5nIGRhdGFiYXNlIG9wZXJhdGlvbnMKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX05PVF9BVVRIRU5USUNBVEVEID0gIkFFUk9TUElLRV9FUlJfTk9UX0FVVEhFTlRJQ0FURUQiOwoKICAgIC8qKgogICAgICogVXNlciBkb2VzIG5vdCBwb3NzZXNzIHRoZSByZXF1aXJlZCByb2xlIHRvIHBlcmZvcm0gdGhlIGRhdGFiYXNlIG9wZXJhdGlvbgogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfUk9MRV9WSU9MQVRJT04gPSAiQUVST1NQSUtFX0VSUl9ST0xFX1ZJT0xBVElPTiI7CgogICAgLyoqCiAgICAgKiBSb2xlIGFscmVhZHkgZXhpc3RzCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9ST0xFX0FMUkVBRFlfRVhJU1RTID0gIkFFUk9TUElLRV9FUlJfUk9MRV9BTFJFQURZX0VYSVNUUyI7CgogICAgLy8gMTAwLTEwOSAtIFVERiBTcGVjaWZpYyBFcnJvcnMKICAgIC8vCiAgICAvKioKICAgICAqIEEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGZhaWxlZCB0byBleGVjdXRlCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9VREYgPSAiQUVST1NQSUtFX0VSUl9VREYiOwoKICAgIC8qKgogICAgICogVGhlIFVERiBkb2VzIG5vdCBleGlzdAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfVURGX05PVF9GT1VORCA9ICJBRVJPU1BJS0VfRVJSX1VERl9OT1RfRk9VTkQiOwoKICAgIC8qKgogICAgICogVGhlIExVQSBmaWxlIGRvZXMgbm90IGV4aXN0CiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9MVUFfRklMRV9OT1RfRk9VTkQgPSAiQUVST1NQSUtFX0VSUl9MVUFfRklMRV9OT1RfRk9VTkQiOwoKICAgIC8vIDE1MC0xNTkgLSBCYXRjaCBTcGVjaWZpYyBFcnJvcnMKCiAgICAvKioKICAgICAqIEJhdGNoIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gZGlzYWJsZWQgYnkgY29uZmlndXJpbmcgdGhlIGJhdGNoLWluZGV4LXRocmVhZD0wCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9CQVRDSF9ESVNBQkxFRCA9ICJBRVJPU1BJS0VfRVJSX0JBVENIX0RJU0FCTEVEIjsKCiAgICAvKioKICAgICAqIEJhdGNoIG1heCByZXF1ZXN0cyBoYXMgYmVlbiBleGNlZWRlZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfQkFUQ0hfTUFYX1JFUVVFU1RTX0VYQ0VFREVEID0gIkFFUk9TUElLRV9FUlJfQkFUQ0hfTUFYX1JFUVVFU1RTX0VYQ0VFREVEIjsKCiAgICAvKioKICAgICAqIEFsbCBiYXRjaCBxdWV1ZXMgYXJlIGZ1bGwKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX0JBVENIX1FVRVVFU19GVUxMID0gIkFFUk9TUElLRV9FUlJfQkFUQ0hfUVVFVUVTX0ZVTEwiOwoKICAgIC8vIDE2MC0xNjkgLSBHZW8gU3BlY2lmaWMgRXJyb3JzCgogICAgLyoqCiAgICAgKiBHZW9KU09OIGlzIG1hbGZvcm1lZCBvciBub3Qgc3VwcG9ydGVkCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9HRU9fSU5WQUxJRF9HRU9KU09OID0gIkFFUk9TUElLRV9FUlJfR0VPX0lOVkFMSURfR0VPSlNPTiI7CgogICAgLy8gMjAwLTIxOSAtIFNlY29uZGFyeSBJbmRleCBTcGVjaWZpYyBFcnJvcnMKCiAgICAvKioKICAgICAqIFNlY29uZGFyeSBpbmRleCBhbHJlYWR5IGV4aXN0cwogICAgICogKiBBY2NlcHRzIG9uZSBvZiB0aGUgUE9MSUNZX0tFWV8qIHZhbHVlcy4KICAgICAqCiAgICAgKiB7QGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2NsaWVudC9waHAvdXNhZ2Uva3ZzL3JlY29yZC1zdHJ1Y3R1cmUuaHRtbCBSZWNvcmRzfQogICAgICogYXJlIHVuaXF1ZWx5IGlkZW50aWZpZWQgYnkgdGhlaXIgZGlnZXN0LCBhbmQgY2FuIG9wdGlvbmFsbHkgc3RvcmUgdGhlIHZhbHVlIG9mIHRoZWlyIHByaW1hcnkga2V5CiAgICAgKiAodGhlaXIgdW5pcXVlIElEIGluIHRoZSBhcHBsaWNhdGlvbikuCiAgICAgKiBLZXkgc3RvcmFnZSBwb2xpY3kgb3B0aW9uIChkaWdlc3Qtb25seSBvciBzZW5kIGtleSkKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSUl9JTkRFWF9GT1VORCA9ICJBRVJPU1BJS0VfRVJSX0lOREVYX0ZPVU5EIjsKCiAgICAvKioKICAgICAqIFNlY29uZGFyeSBpbmRleCBkb2VzIG5vdCBleGlzdAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfSU5ERVhfTk9UX0ZPVU5EID0gIkFFUk9TUElLRV9FUlJfSU5ERVhfTk9UX0ZPVU5EIjsKCiAgICAvKioKICAgICAqIFNlY29uZGFyeSBpbmRleCBtZW1vcnkgc3BhY2UgZXhjZWVkZWQKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX0lOREVYX09PTSA9ICJBRVJPU1BJS0VfRVJSX0lOREVYX09PTSI7CgogICAgLyoqCiAgICAgKiBTZWNvbmRhcnkgaW5kZXggbm90IGF2YWlsYWJsZSBmb3IgcXVlcnkuIE9jY3VycyB3aGVuIGluZGV4aW5nIGNyZWF0aW9uIGhhcyBub3QgZmluaXNoZWQKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX0lOREVYX05PVF9SRUFEQUJMRSA9ICJBRVJPU1BJS0VfRVJSX0lOREVYX05PVF9SRUFEQUJMRSI7CgogICAgLyoqCiAgICAgKiBHZW5lcmljIHNlY29uZGFyeSBpbmRleCBlcnJvcgogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfSU5ERVggPSAiQUVST1NQSUtFX0VSUl9JTkRFWCI7CgogICAgLyoqCiAgICAgKiBJbmRleCBuYW1lIG1heGltdW4gbGVuZ3RoIGV4Y2VlZGVkCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9JTkRFWF9OQU1FX01BWExFTiA9ICJBRVJPU1BJS0VfRVJSX0lOREVYX05BTUVfTUFYTEVOIjsKCiAgICAvKioKICAgICAqIE1heGltdW0gbnVtYmVyIG9mIGluZGljaWVzIGV4Y2VlZGVkCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9JTkRFWF9NQVhDT1VOVCA9ICJBRVJPU1BJS0VfRVJSX0lOREVYX01BWENPVU5UIjsKCiAgICAvKioKICAgICAqIFNlY29uZGFyeSBpbmRleCBxdWVyeSBhYm9ydGVkCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IEVSUl9RVUVSWV9BQk9SVEVEID0gIkFFUk9TUElLRV9FUlJfUVVFUllfQUJPUlRFRCI7CgogICAgLyoqCiAgICAgKiBTZWNvbmRhcnkgaW5kZXggcXVldWUgZnVsbAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBFUlJfUVVFUllfUVVFVUVfRlVMTCA9ICJBRVJPU1BJS0VfRVJSX1FVRVJZX1FVRVVFX0ZVTEwiOwoKICAgIC8qKgogICAgICogU2Vjb25kYXJ5IGluZGV4IHF1ZXJ5IHRpbWVkIG91dCBvbiBzZXJ2ZXIKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX1FVRVJZX1RJTUVPVVQgPSAiQUVST1NQSUtFX0VSUl9RVUVSWV9USU1FT1VUIjsKCiAgICAvKioKICAgICAqIEdlbmVyaWMgcXVlcnkgZXJyb3IKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgRVJSX1FVRVJZID0gIkFFUk9TUElLRV9FUlJfUVVFUlkiOwoKICAgIC8qKgogICAgICogd3JpdGUgb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QRVJBVE9SX1dSSVRFID0gIk9QRVJBVE9SX1dSSVRFIjsKCiAgICAvKioKICAgICAqIHJlYWQgb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QRVJBVE9SX1JFQUQgPSAiT1BFUkFUT1JfUkVBRCI7CgogICAgLyoqCiAgICAgKiBpbmNyZW1lbnQgb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QRVJBVE9SX0lOQ1IgPSAiT1BFUkFUT1JfSU5DUiI7CgogICAgLyoqCiAgICAgKiBwcmVwZW5kIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUEVSQVRPUl9QUkVQRU5EID0gIk9QRVJBVE9SX1BSRVBFTkQiOwoKICAgIC8qKgogICAgICogYXBwZW5kIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUEVSQVRPUl9BUFBFTkQgPSAiT1BFUkFUT1JfQVBQRU5EIjsKCiAgICAvKioKICAgICAqIHRvdWNoIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUEVSQVRPUl9UT1VDSCA9ICJPUEVSQVRPUl9UT1VDSCI7CgogICAgLyoqCiAgICAgKiBkZWxldGUgb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QRVJBVE9SX0RFTEVURSA9ICJPUEVSQVRPUl9ERUxFVEUiOwoKICAgIC8vIExpc3Qgb3BlcmF0aW9uIGNvbnN0YW50cwoKICAgIC8qKgogICAgICogbGlzdC1hcHBlbmQgb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QX0xJU1RfQVBQRU5EID0gIk9QX0xJU1RfQVBQRU5EIjsKCiAgICAvKioKICAgICAqIGxpc3QtbWVyZ2Ugb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QX0xJU1RfTUVSR0UgPSAiT1BfTElTVF9NRVJHRSI7CgogICAgLyoqCiAgICAgKiBsaXN0LWluc2VydCBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTElTVF9JTlNFUlQgPSAiT1BfTElTVF9JTlNFUlQiOwoKICAgIC8qKgogICAgICogbGlzdC1pbnNlcnQtaXRlbXMgb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QX0xJU1RfSU5TRVJUX0lURU1TID0gIk9QX0xJU1RfSU5TRVJUX0lURU1TIjsKCiAgICAvKioKICAgICAqIGxpc3QtcG9wIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9MSVNUX1BPUCA9ICJPUF9MSVNUX1BPUCI7CgogICAgLyoqCiAgICAgKiBsaXN0LXBvcC1yYW5nZSBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTElTVF9QT1BfUkFOR0UgPSAiT1BfTElTVF9QT1BfUkFOR0UiOwoKICAgIC8qKgogICAgICogbGlzdC1yZW1vdmUgb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QX0xJU1RfUkVNT1ZFID0gIk9QX0xJU1RfUkVNT1ZFIjsKCiAgICAvKioKICAgICAqIGxpc3QtcmVtb3ZlLXJhbmdlIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9MSVNUX1JFTU9WRV9SQU5HRSA9ICJPUF9MSVNUX1JFTU9WRV9SQU5HRSI7CgogICAgLyoqCiAgICAgKiBsaXN0LWNsZWFyIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9MSVNUX0NMRUFSID0gIk9QX0xJU1RfQ0xFQVIiOwoKICAgIC8qKgogICAgICogbGlzdC1zZXQgb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QX0xJU1RfU0VUID0gIk9QX0xJU1RfU0VUIjsKCiAgICAvKioKICAgICAqIGxpc3QtZ2V0IG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9MSVNUX0dFVCA9ICJPUF9MSVNUX0dFVCI7CgogICAgLyoqCiAgICAgKiBsaXN0LWdldC1yYW5nZSBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTElTVF9HRVRfUkFOR0UgPSAiT1BfTElTVF9HRVRfUkFOR0UiOwoKICAgIC8qKgogICAgICogbGlzdC10cmltIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9MSVNUX1RSSU0gPSAiT1BfTElTVF9UUklNIjsKCiAgICAvKioKICAgICAqIGxpc3Qtc2l6ZSBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTElTVF9TSVpFID0gIk9QX0xJU1RfU0laRSI7CgogICAgLy8gTWFwIG9wZXJhdGlvbiBjb25zdGFudHMKCiAgICAvKioKICAgICAqIG1hcC1zaXplIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9NQVBfU0laRSA9ICJPUF9NQVBfU0laRSI7CgogICAgLyoqCiAgICAgKiBtYXAtc2l6ZSBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTUFQX0NMRUFSID0gIk9QX01BUF9DTEVBUiI7CgogICAgLyoqCiAgICAgKiBtYXAtc2V0LXBvbGljeSBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTUFQX1NFVF9QT0xJQ1kgPSAiT1BfTUFQX1NFVF9QT0xJQ1kiOwoKICAgIC8qKgogICAgICogbWFwLWdldC1ieS1rZXkgb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QX01BUF9HRVRfQllfS0VZID0gIk9QX01BUF9HRVRfQllfS0VZIjsKCiAgICAvKioKICAgICAqIG1hcC1nZXQtYnkta2V5LXJhbmdlIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9NQVBfR0VUX0JZX0tFWV9SQU5HRSA9ICJPUF9NQVBfR0VUX0JZX0tFWV9SQU5HRSI7CgogICAgLyoqCiAgICAgKiBtYXAtZ2V0LWJ5LXZhbHVlIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9NQVBfR0VUX0JZX1ZBTFVFID0gIk9QX01BUF9HRVRfQllfVkFMVUUiOwoKICAgIC8qKgogICAgICogbWFwLWdldC1ieS12YWx1ZS1yYW5nZSBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTUFQX0dFVF9CWV9WQUxVRV9SQU5HRSA9ICJPUF9NQVBfR0VUX0JZX1ZBTFVFX1JBTkdFIjsKCiAgICAvKioKICAgICAqIG1hcC1nZXQtYnktaW5kZXggb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QX01BUF9HRVRfQllfSU5ERVggPSAiT1BfTUFQX0dFVF9CWV9JTkRFWCI7CgogICAgLyoqCiAgICAgKiBtYXAtZ2V0LWJ5LWluZGV4LXJhbmdlIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9NQVBfR0VUX0JZX0lOREVYX1JBTkdFID0gIk9QX01BUF9HRVRfQllfSU5ERVhfUkFOR0UiOwoKICAgIC8qKgogICAgICogbWFwLWdldC1ieS1yYW5rIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9NQVBfR0VUX0JZX1JBTksgPSAiT1BfTUFQX0dFVF9CWV9SQU5LIjsKCiAgICAvKioKICAgICAqIG1hcC1nZXQtYnktcmFuay1yYW5nZSBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTUFQX0dFVF9CWV9SQU5LX1JBTkdFID0gIk9QX01BUF9HRVRfQllfUkFOS19SQU5HRSI7CgogICAgLyoqCiAgICAgKiBtYXAtcHV0ICBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTUFQX1BVVCA9ICJPUF9NQVBfUFVUIjsKCiAgICAvKioKICAgICAqIG1hcC1wdXQtaXRlbXMgb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QX01BUF9QVVRfSVRFTVMgPSAiT1BfTUFQX1BVVF9JVEVNUyI7CgogICAgLyoqCiAgICAgKiBtYXAtaW5jcmVtZW50IG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9NQVBfSU5DUkVNRU5UID0gIk9QX01BUF9JTkNSRU1FTlQiOwoKICAgIC8qKgogICAgICogbWFwLWRlY3JlbWVudCBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTUFQX0RFQ1JFTUVOVCA9ICJPUF9NQVBfREVDUkVNRU5UIjsKCiAgICAvKioKICAgICAqIG1hcC1yZW1vdmUtYnkta2V5IG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9NQVBfUkVNT1ZFX0JZX0tFWSA9ICJPUF9NQVBfUkVNT1ZFX0JZX0tFWSI7CgogICAgLyoqCiAgICAgKiBtYXAtcmVtb3ZlLWJ5LWtleS1saXN0IG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9NQVBfUkVNT1ZFX0JZX0tFWV9MSVNUID0gIk9QX01BUF9SRU1PVkVfQllfS0VZX0xJU1QiOwoKICAgIC8qKgogICAgICogbWFwLXJlbW92ZS1ieS1rZXktcmFuZ2Uga2V5IG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9NQVBfUkVNT1ZFX0JZX0tFWV9SQU5HRSA9ICJPUF9NQVBfUkVNT1ZFX0JZX0tFWV9SQU5HRSI7CgogICAgLyoqCiAgICAgKiBtYXAtcmVtb3ZlLWJ5LXZhbHVlIG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9NQVBfUkVNT1ZFX0JZX1ZBTFVFID0gIk9QX01BUF9SRU1PVkVfQllfVkFMVUUiOwoKICAgIC8qKgogICAgICogbWFwLXJlbW92ZS1ieS12YWx1ZSBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTUFQX1JFTU9WRV9CWV9WQUxVRV9SQU5HRSA9ICJPUF9NQVBfUkVNT1ZFX0JZX1ZBTFVFX1JBTkdFIjsKCiAgICAvKioKICAgICAqIG1hcC1yZW1vdmUtYnktdmFsdWUtbGlzdCBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTUFQX1JFTU9WRV9CWV9WQUxVRV9MSVNUID0gIk9QX01BUF9SRU1PVkVfQllfVkFMVUVfTElTVCI7CgogICAgLyoqCiAgICAgKiBtYXAtcmVtb3ZlLWJ5LWluZGV4IG9wZXJhdG9yIGZvciB0aGUgb3BlcmF0ZSgpIG1ldGhvZAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9NQVBfUkVNT1ZFX0JZX0lOREVYID0gIk9QX01BUF9SRU1PVkVfQllfSU5ERVgiOwoKICAgIC8qKgogICAgICogbWFwLXJlbW92ZS1ieS1pbmRleC1yYW5nZSBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTUFQX1JFTU9WRV9CWV9JTkRFWF9SQU5HRSA9ICJPUF9NQVBfUkVNT1ZFX0JZX0lOREVYX1JBTkdFIjsKCiAgICAvKioKICAgICAqIG1hcC1yZW1vdmUtYnktcmFuayBvcGVyYXRvciBmb3IgdGhlIG9wZXJhdGUoKSBtZXRob2QKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgT1BfTUFQX1JFTU9WRV9CWV9SQU5LID0gIk9QX01BUF9SRU1PVkVfQllfUkFOSyI7CgogICAgLyoqCiAgICAgKiBtYXAtcmVtb3ZlLWJ5LXJhbmstcmFuZ2Ugb3BlcmF0b3IgZm9yIHRoZSBvcGVyYXRlKCkgbWV0aG9kCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IE9QX01BUF9SRU1PVkVfQllfUkFOS19SQU5HRSA9ICJPUF9NQVBfUkVNT1ZFX0JZX1JBTktfUkFOR0UiOwoKICAgIC8vIFF1ZXJ5IFByZWRpY2F0ZSBPcGVyYXRvcnMKCiAgICAvKioKICAgICAqIHByZWRpY2F0ZSBvcGVyYXRvciBmb3IgZXF1YWxpdHkgY2hlY2sgb2Ygc2NhbGFyIGludGVnZXIgb3Igc3RyaW5nIHZhbHVlCiAgICAgKiAqIEBzZWUgQWVyb3NwaWtlOjpwcmVkaWNhdGVFcXVhbHMKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QX0VRID0gIj0iOwoKICAgIC8qKgogICAgICogcHJlZGljYXRlIG9wZXJhdG9yIG1hdGNoaW5nIHdoZXRoZXIgYW4gaW50ZWdlciBmYWxscyBiZXR3ZWVuIGEgcmFuZ2Ugb2YgaW50ZWdlciB2YWx1ZXMKICAgICAqICogQHNlZSBBZXJvc3Bpa2U6OnByZWRpY2F0ZUJldHdlZW4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QX0JFVFdFRU4gPSAiQkVUV0VFTiI7CgogICAgLyoqCiAgICAgKiBwcmVkaWNhdGUgb3BlcmF0b3IgZm9yIGEgd2hldGhlciBhIHNwZWNpZmljIHZhbHVlIGlzIGluIGFuIGluZGV4ZWQgbGlzdCwgbWFwa2V5cywgb3IgbWFwdmFsdWVzCiAgICAgKiAqIEBzZWUgQWVyb3NwaWtlOjpwcmVkaWNhdGVDb250YWlucwogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BfQ09OVEFJTlMgPSAiQ09OVEFJTlMiOwoKICAgIC8qKgogICAgICogcHJlZGljYXRlIG9wZXJhdG9yIGZvciB3aGV0aGVyIGFuIGluZGV4ZWQgbGlzdCwgbWFwa2V5cywgb3IgbWFwdmFsdWVzIGhhcyBhbiBpbnRlZ2VyIHZhbHVlIHdpdGhpbiBhIHNwZWNpZmllZCByYW5nZQogICAgICogKiBAc2VlIEFlcm9zcGlrZTo6cHJlZGljYXRlUmFuZ2UKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QX1JBTkdFID0gIlJBTkdFIjsKCiAgICAvKioKICAgICAqIGdlb3NwYXRpYWwgcHJlZGljYXRlIG9wZXJhdG9yIGZvciBwb2ludHMgd2l0aGluIGEgc3BlY2lmaWVkIHJlZ2lvbgogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9HRU9XSVRISU5SRUdJT04gPSAiR0VPV0lUSElOIjsKCiAgICAvKioKICAgICAqIGdlb3NwYXRpYWwgcHJlZGljYXRlIG9wZXJhdG9yIGZvciByZWdvbnMgY29udGFpbmluZyBhIHNlcGNpZmllZCBwb2ludAogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBPUF9HRU9DT05UQUlOU1BPSU5UID0gIkdFT0NPTlRBSU5TIjsKCiAgICAvKioKICAgICAqIFNjYW4gc3RhdHVzIGlzIHVuZGVmaW5lZAogICAgICovCiAgICAjW0RlcHJlY2F0ZWQoJ3VzZSBKT0JfU1RBVFVTX1VOREVGIGFsb25nIHdpdGggam9iSW5mbygpJyldCiAgICBwdWJsaWMgY29uc3QgU0NBTl9TVEFUVVNfVU5ERUYgPSAiU0NBTl9TVEFUVVNfVU5ERUYiOwoKICAgIC8qKgogICAgICogU2NhbiBpcyBjdXJyZW50bHkgcnVubmluZwogICAgICovCiAgICAjW0RlcHJlY2F0ZWQoJ3VzZSBKT0JfU1RBVFVTX0lOUFJPR1JFU1MgYWxvbmcgd2l0aCBqb2JJbmZvKCknKV0KICAgIHB1YmxpYyBjb25zdCBTQ0FOX1NUQVRVU19JTlBST0dSRVNTID0gIlNDQU5fU1RBVFVTX0lOUFJPR1JFU1MiOwoKICAgIC8qKgogICAgICogU2NhbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CiAgICAgKi8KICAgICNbRGVwcmVjYXRlZF0KICAgIHB1YmxpYyBjb25zdCBTQ0FOX1NUQVRVU19BQk9SVEVEID0gIlNDQU5fU1RBVFVTX0FCT1JURUQiOwoKICAgIC8qKgogICAgICogU2NhbiB3YXMgYWJvcnRlZCBkdWUgdG8gZmFpbHVyZSBvciB0aGUgdXNlcgogICAgICovCiAgICAjW0RlcHJlY2F0ZWQoJ3VzZSBKT0JfU1RBVFVTX0NPTVBMRVRFRCBhbG9uZyB3aXRoIGpvYkluZm8oKScpXQogICAgcHVibGljIGNvbnN0IFNDQU5fU1RBVFVTX0NPTVBMRVRFRCA9ICJTQ0FOX1NUQVRVU19DT01QTEVURUQiOwoKICAgIC8vIFN0YXR1cyB2YWx1ZXMgcmV0dXJuZWQgYnkgam9iSW5mbygpCgogICAgLyoqCiAgICAgKiBKb2Igc3RhdHVzIGlzIHVuZGVmaW5lZAogICAgICovCiAgICBwdWJsaWMgY29uc3QgSk9CX1NUQVRVU19VTkRFRiA9ICJKT0JfU1RBVFVTX1VOREVGIjsKCiAgICAvKioKICAgICAqIEpvYiBpcyBjdXJyZW50bHkgcnVubmluZwogICAgICovCiAgICBwdWJsaWMgY29uc3QgSk9CX1NUQVRVU19JTlBST0dSRVNTID0gIkpPQl9TVEFUVVNfSU5QUk9HUkVTUyI7CgogICAgLyoqCiAgICAgKiBKb2IgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQogICAgICovCiAgICBwdWJsaWMgY29uc3QgSk9CX1NUQVRVU19DT01QTEVURUQgPSAiSk9CX1NUQVRVU19DT01QTEVURUQiOwoKICAgIC8vIEluZGV4IChjb250YWluZXIpIHR5cGVzCiAgICAvKioKICAgICAqIFRoZSBiaW4gYmVpbmcgaW5kZXhlZCBzaG91bGQgY29udGFpbiBzY2FsYXIgdmFsdWVzIHN1Y2ggYXMgc3RyaW5nIG9yIGludGVnZXIKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgSU5ERVhfVFlQRV9ERUZBVUxUID0gIklOREVYX1RZUEVfREVGQVVMVCI7CgogICAgLyoqCiAgICAgKiBUaGUgYmluIGJlaW5nIGluZGV4ZWQgc2hvdWxkIGNvbnRhaW4gYSBsaXN0CiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IElOREVYX1RZUEVfTElTVCA9ICJJTkRFWF9UWVBFX0xJU1QiOwoKICAgIC8qKgogICAgICogVGhlIGJpbiBiZWluZyBpbmRleGVkIHNob3VsZCBjb250YWluIGEgbWFwLiBUaGUgbWFwIGtleXMgd2lsbCBiZSBpbmRleGVkCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IElOREVYX1RZUEVfTUFQS0VZUyA9ICJJTkRFWF9UWVBFX01BUEtFWVMiOwoKICAgIC8qKgogICAgICogVGhlIGJpbiBiZWluZyBpbmRleGVkIHNob3VsZCBjb250YWluIGEgbWFwLiBUaGUgbWFwIHZhbHVlcyB3aWxsIGJlIGluZGV4ZWQKICAgICAqICovCiAgICBwdWJsaWMgY29uc3QgSU5ERVhfVFlQRV9NQVBWQUxVRVMgPSAiSU5ERVhfVFlQRV9NQVBWQUxVRVMiOwoKICAgIC8vIERhdGEgdHlwZQogICAgLyoqCiAgICAgKiBJZiBhbmQgb25seSBpZiB0aGUgY29udGFpbmVyIHR5cGUgbWF0Y2hlcywgdGhlIHZhbHVlIHNob3VsZCBiZSBvZiB0eXBlIHN0cmluZwogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBJTkRFWF9TVFJJTkcgPSAiSU5ERVhfU1RSSU5HIjsKCiAgICAvKioKICAgICAqIElmIGFuZCBvbmx5IGlmIHRoZSBjb250YWluZXIgdHlwZSBtYXRjaGVzLCB0aGUgdmFsdWUgc2hvdWxkIGJlIG9mIHR5cGUgaW50ZWdlcgogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBJTkRFWF9OVU1FUklDID0gIklOREVYX05VTUVSSUMiOwoKICAgIC8qKgogICAgICogSWYgYW5kIG9ubHkgaWYgdGhlIGNvbnRhaW5lciB0eXBlIG1hdGNoZXMsIHRoZSB2YWx1ZSBzaG91bGQgYmUgR2VvSlNPTgogICAgICogKi8KICAgIHB1YmxpYyBjb25zdCBJTkRFWF9HRU8yRFNQSEVSRSA9ICJJTkRFWF9HRU8yRFNQSEVSRSI7CgogICAgLyoqCiAgICAgKiBEZWNsYXJlIHRoZSBVREYgbW9kdWxlJ3MgbGFuZ3VhZ2UgdG8gYmUgTHVhCiAgICAgKiAqLwogICAgcHVibGljIGNvbnN0IFVERl9UWVBFX0xVQSA9ICJVREZfVFlQRV9MVUEiOwoKICAgIC8vIFNlY3VyaXR5IHJvbGUgcHJpdmlsZWdlcwoKICAgIC8qKgogICAgICogUHJpdmlsZWdlIHRvIHJlYWQgZGF0YQogICAgICogKiBAbGluayBodHRwczovL3d3dy5hZXJvc3Bpa2UuY29tL2RvY3MvZ3VpZGUvc2VjdXJpdHkvYWNjZXNzLWNvbnRyb2wuaHRtbCBBY2Nlc3MgQ29udHJvbAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUFJJVl9SRUFEID0gIlBSSVZfUkVBRCI7CgogICAgLyoqCiAgICAgKiBQcml2aWxlZ2UgdG8gcmVhZCBhbmQgd3JpdGUgZGF0YQogICAgICogKiBAbGluayBodHRwczovL3d3dy5hZXJvc3Bpa2UuY29tL2RvY3MvZ3VpZGUvc2VjdXJpdHkvYWNjZXNzLWNvbnRyb2wuaHRtbCBBY2Nlc3MgQ29udHJvbAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUFJJVl9SRUFEX1dSSVRFID0gIlBSSVZfUkVBRF9XUklURSI7CgogICAgLyoqCiAgICAgKiBQcml2aWxlZ2UgdG8gcmVhZCwgd3JpdGUgYW5kIGV4ZWN1dGUgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucwogICAgICogKiBAbGluayBodHRwczovL3d3dy5hZXJvc3Bpa2UuY29tL2RvY3MvZ3VpZGUvc2VjdXJpdHkvYWNjZXNzLWNvbnRyb2wuaHRtbCBBY2Nlc3MgQ29udHJvbAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUFJJVl9SRUFEX1dSSVRFX1VERiA9ICJQUklWX1JFQURfV1JJVEVfVURGIjsKCiAgICAvKioKICAgICAqIFByaXZpbGVnZSB0byBjcmVhdGUgYW5kIGFzc2lnbiByb2xlcyB0byB1c2VycwogICAgICogKiBAbGluayBodHRwczovL3d3dy5hZXJvc3Bpa2UuY29tL2RvY3MvZ3VpZGUvc2VjdXJpdHkvYWNjZXNzLWNvbnRyb2wuaHRtbCBBY2Nlc3MgQ29udHJvbAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUFJJVl9VU0VSX0FETUlOID0gIlBSSVZfVVNFUl9BRE1JTiI7CgogICAgLyoqCiAgICAgKiBQcml2aWxlZ2UgdG8gbWFuYWdlIGluZGV4ZXMgYW5kIFVERnMsIG1vbml0b3IgYW5kIGFib3J0IHNjYW4vcXVlcnkgam9icywgZ2V0IHNlcnZlciBjb25maWcKICAgICAqICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2d1aWRlL3NlY3VyaXR5L2FjY2Vzcy1jb250cm9sLmh0bWwgQWNjZXNzIENvbnRyb2wKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBSSVZfREFUQV9BRE1JTiA9ICJQUklWX0RBVEFfQURNSU4iOyAvLyBjYW4gcGVyZm9ybSBkYXRhIGFkbWluIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCBpbnZvbHZlIHVzZXIgYWRtaW4KCiAgICAvKiogUHJpdmlsZWdlIHRvIG1vZGlmeSBkeW5hbWljIHNlcnZlciBjb25maWdzLCBnZXQgY29uZmlnIGFuZCBzdGF0cywgYW5kIGFsbCBkYXRhIGFkbWluIHByaXZpbGVnZXMKICAgICAqICogQGxpbmsgaHR0cHM6Ly93d3cuYWVyb3NwaWtlLmNvbS9kb2NzL2d1aWRlL3NlY3VyaXR5L2FjY2Vzcy1jb250cm9sLmh0bWwgQWNjZXNzIENvbnRyb2wKICAgICAqLwogICAgcHVibGljIGNvbnN0IFBSSVZfU1lTX0FETUlOID0gIlBSSVZfU1lTX0FETUlOIjsgLy8gY2FuIHBlcmZvcm0gc3lzYWRtaW4gZnVuY3Rpb25zIHRoYXQgZG8gbm90IGludm9sdmUgdXNlciBhZG1pbgoKICAgIC8qCiAgICAgICAgLy8gVE9ETzoKICAgICAgICAvLyBzZWN1cml0eSBtZXRob2RzCiAgICAgICAgcHVibGljIGludCBjcmVhdGVSb2xlICggc3RyaW5nICRyb2xlLCBhcnJheSAkcHJpdmlsZWdlcyBbLCBhcnJheSAkb3B0aW9ucyBdICkKICAgICAgICBwdWJsaWMgaW50IGdyYW50UHJpdmlsZWdlcyAoIHN0cmluZyAkcm9sZSwgYXJyYXkgJHByaXZpbGVnZXMgWywgYXJyYXkgJG9wdGlvbnMgXSApCiAgICAgICAgcHVibGljIGludCByZXZva2VQcml2aWxlZ2VzICggc3RyaW5nICRyb2xlLCBhcnJheSAkcHJpdmlsZWdlcyBbLCBhcnJheSAkb3B0aW9ucyBdICkKICAgICAgICBwdWJsaWMgaW50IHF1ZXJ5Um9sZSAoIHN0cmluZyAkcm9sZSwgYXJyYXkgJiRwcml2aWxlZ2VzIFssIGFycmF5ICRvcHRpb25zIF0gKQogICAgICAgIHB1YmxpYyBpbnQgcXVlcnlSb2xlcyAoIGFycmF5ICYkcm9sZXMgWywgYXJyYXkgJG9wdGlvbnMgXSApCiAgICAgICAgcHVibGljIGludCBkcm9wUm9sZSAoIHN0cmluZyAkcm9sZSBbLCBhcnJheSAkb3B0aW9ucyBdICkKICAgICAgICBwdWJsaWMgaW50IGNyZWF0ZVVzZXIgKCBzdHJpbmcgJHVzZXIsIHN0cmluZyAkcGFzc3dvcmQsIGFycmF5ICRyb2xlcyBbLCBhcnJheSAkb3B0aW9ucyBdICkKICAgICAgICBwdWJsaWMgaW50IHNldFBhc3N3b3JkICggc3RyaW5nICR1c2VyLCBzdHJpbmcgJHBhc3N3b3JkIFssIGFycmF5ICRvcHRpb25zIF0gKQogICAgICAgIHB1YmxpYyBpbnQgY2hhbmdlUGFzc3dvcmQgKCBzdHJpbmcgJHVzZXIsIHN0cmluZyAkcGFzc3dvcmQgWywgYXJyYXkgJG9wdGlvbnMgXSApCiAgICAgICAgcHVibGljIGludCBncmFudFJvbGVzICggc3RyaW5nICR1c2VyLCBhcnJheSAkcm9sZXMgWywgYXJyYXkgJG9wdGlvbnMgXSApCiAgICAgICAgcHVibGljIGludCByZXZva2VSb2xlcyAoIHN0cmluZyAkdXNlciwgYXJyYXkgJHJvbGVzIFssIGFycmF5ICRvcHRpb25zIF0gKQogICAgICAgIHB1YmxpYyBpbnQgcXVlcnlVc2VyICggc3RyaW5nICR1c2VyLCBhcnJheSAmJHJvbGVzIFssIGFycmF5ICRvcHRpb25zIF0gKQogICAgICAgIHB1YmxpYyBpbnQgcXVlcnlVc2VycyAoIGFycmF5ICYkcm9sZXMgWywgYXJyYXkgJG9wdGlvbnMgXSApCiAgICAgICAgcHVibGljIGludCBkcm9wVXNlciAoIHN0cmluZyAkdXNlciBbLCBhcnJheSAkb3B0aW9ucyBdICkKCiAgICAgKi8KfQo8P3BocAovKioKICogQ29weXJpZ2h0IDIwMTMtMjAxNiBBZXJvc3Bpa2UsIEluYy4KICoKICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqCiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBAY2F0ZWdvcnkgICBEYXRhYmFzZQogKiBAYXV0aG9yICAgICBSb25lbiBCb3R6ZXIgPHJib3R6ZXJAYWVyb3NwaWtlLmNvbT4KICogQGNvcHlyaWdodCAgQ29weXJpZ2h0IDIwMTMtMjAxNiBBZXJvc3Bpa2UsIEluYy4KICogQGxpY2Vuc2UgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIKICogQGxpbmsgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2Flcm9zcGlrZS9hZXJvc3Bpa2UtY2xpZW50LXBocC9ibG9iL21hc3Rlci9kb2MvUkVBRE1FLm1kI2hhbmRsaW5nLXVuc3VwcG9ydGVkLXR5cGVzCiAqIEBmaWxlc291cmNlCiAqLwoKbmFtZXNwYWNlIEFlcm9zcGlrZTsKCi8qKgogKiBcQWVyb3NwaWtlXEJ5dGVzIGlzIGEgdXRpbGl0eSBmb3Igd3JhcHBpbmcgUEhQIHN0cmluZ3MgY29udGFpbmluZwogKiBwb3RlbnRpYWxseSBoYXJtZnVsIGJ5dGVzIHN1Y2ggYXMgXDAuIEJ5IHdyYXBwaW5nIHRoZSBiaW5hcnktc3RyaW5nLCB0aGUKICogQWVyb3NwaWtlIGNsaWVudCB3aWxsIHNlcmlhbGl6ZSB0aGUgZGF0YSBpbnRvIGFuIGFzX2J5dGVzIHJhdGhlciB0aGFuIGFuCiAqIGFzX3N0cmluZy4KICogVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHN0cmluZyB3aWxsIG5vdCBnZXQgdHJ1bmNhdGVkIG9yIG90aGVyd2lzZSBsb3NlIGRhdGEuCiAqIFRoZSBtYWluIGRpZmZlcmVuY2UgaXMgdGhhdCBzdHJpbmdzIGluIHRoZSBBZXJvc3Bpa2UgY2x1c3RlciBjYW4gaGF2ZSBhCiAqIHNlY29uZGFyeSBpbmRleCBidWlsdCBvdmVyIHRoZW0sIGFuZCBxdWVyaWVzIGV4ZWN1dGVkIGFnYWluc3QgdGhlIGluZGV4LAogKiB3aGlsZSBieXRlcyBkYXRhIGNhbm5vdC4KICoKICogQHBhY2thZ2UgICAgQWVyb3NwaWtlCiAqIEBhdXRob3IgICAgIFJvbmVuIEJvdHplciA8cmJvdHplckBhZXJvc3Bpa2UuY29tPgogKi8KY2xhc3MgQnl0ZXMgaW1wbGVtZW50cyBcU2VyaWFsaXphYmxlCnsKICAgIC8qKgogICAgICogVGhlIGNvbnRhaW5lciBmb3IgdGhlIGJpbmFyeS1zdHJpbmcKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkczsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdG9yIGZvciBcQWVyb3NwaWtlXEJ5dGVzIGNsYXNzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJpbl9zdHIgYSBQSFAgYmluYXJ5LXN0cmluZyBzdWNoIGFzIGd6ZGVmbGF0ZSgpIHByb2R1Y2VzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGJpbl9zdHIpIHsKICAgICAgICAkdGhpcy0+cyA9ICRiaW5fc3RyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJpbmFyeS1zdHJpbmcuCiAgICAgKiBDYWxsZWQgYnkgc2VyaWFsaXplKCkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VyaWFsaXplKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+czsKICAgIH0KCiAgICAvKioKICAgICAqIFJlLXdyYXBzIHRoZSBiaW5hcnktc3RyaW5nIHdoZW4gY2FsbGVkIGJ5IHVuc2VyaWFsaXplKCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYmluX3N0ciBhIFBIUCBiaW5hcnktc3RyaW5nLiBDYWxsZWQgYnkgdW5zZXJpYWxpemUoKS4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNlcmlhbGl6ZSgkYmluX3N0cikgewogICAgICAgIHJldHVybiAkdGhpcy0+cyA9ICRiaW5fc3RyOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYmluYXJ5LXN0cmluZyBoZWxkIGluIHRoZSBcQWVyb3NwaWtlXEJ5dGVzIG9iamVjdC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBVbndyYXBzIGFuIFxBZXJvc3Bpa2VcQnl0ZXMgb2JqZWN0LCByZXR1cm5pbmcgdGhlIGJpbmFyeS1zdHJpbmcgaW5zaWRlLgogICAgICoKICAgICAqIEBwYXJhbSBcQWVyb3NwaWtlXEJ5dGVzICRieXRlc193cmFwCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVud3JhcChCeXRlcyAkYnl0ZXNfd3JhcCkgewogICAgICAgIHJldHVybiAkYnl0ZXNfd3JhcC0+czsKICAgIH0KfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQogICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KCiAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgoKICAgMS4gRGVmaW5pdGlvbnMuCgogICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAogICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KCiAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KCiAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgogICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAogICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCiAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCgogICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CiAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCgogICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgogICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgoKICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAogICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCiAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KCiAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCiAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCiAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCgogICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CiAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucwogICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwogICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAogICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgoKICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwogICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgogICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCiAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CiAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCiAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgoKICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCiAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgoKICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCiAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCiAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQogICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgoKICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCiAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCiAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAogICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQogICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgogICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCiAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CiAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCiAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwogICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgoKICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CiAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CiAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCgogICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCiAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKCiAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwogICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAogICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKCiAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwogICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAogICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCiAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQogICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAogICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAogICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCiAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCiAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgogICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAogICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCiAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCgogICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwogICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCiAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAogICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KCiAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCiAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCiAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgogICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CiAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCiAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KCiAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAogICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCgogICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAogICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCiAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCiAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCiAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQogICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCgogICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCiAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CiAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCiAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCiAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAogICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAogICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCiAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KCiAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAogICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgogICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KCiAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwoKICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgoKICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgogICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZQogICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQogICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQogICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgoKICAgQ29weXJpZ2h0IDIwMTAtMjAyMyBKZXRCcmFpbnMgcy5yLm8uCgogICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCjw/cGhwCi8qKgogKiBDb3VjaGJhc2UgZXh0ZW5zaW9uIHN0dWJzCiAqIEdhdGhlcmVkIGZyb20gaHR0cHM6Ly9kb2NzLmNvdWNoYmFzZS5jb20vc2RrLWFwaS9jb3VjaGJhc2UtcGhwLWNsaWVudC0zLjIuMi9pbmRleC5odG1sCiAqIE1haW50YWluZXI6IHNlcmdleUBjb3VjaGJhc2UuY29tCiAqCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jb3VjaGJhc2UvcGhwLWNvdWNoYmFzZS90cmVlL21hc3Rlci9hcGkKICovCgovKioKICogSU5JIGVudHJpZXM6CiAqCiAqICogYGNvdWNoYmFzZS5sb2dfbGV2ZWxgIChzdHJpbmcpLCBkZWZhdWx0OiBgIldBUk4iYAogKgogKiAgIGNvbnRyb2xzIGFtb3VudCBvZiBpbmZvcm1hdGlvbiwgdGhlIG1vZHVsZSB3aWxsIHNlbmQgdG8gUEhQIGVycm9yIGxvZy4gQWNjZXB0cyB0aGUgZm9sbG93aW5nIHZhbHVlcyBpbiBvcmRlciBvZgogKiAgIGluY3JlYXNpbmcgdmVyYm9zaXR5OiBgIkZBVEFMImAsIGAiRVJST1IiYCwgYCJXQVJOImAsIGAiSU5GTyJgLCBgIkRFQlVHImAsIGAiVFJBQ0UiYC4KICoKICogKiBgY291Y2hiYXNlLmVuY29kZXIuZm9ybWF0YCAoc3RyaW5nKSwgZGVmYXVsdDogYCJqc29uImAKICoKICogICBzZWxlY3RzIHNlcmlhbGl6YXRpb24gZm9ybWF0IGZvciBkZWZhdWx0IGVuY29kZXIgKFxDb3VjaGJhc2VcZGVmYXVsdEVuY29kZXIpLiBBY2NlcHRzIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogKiAgICogYCJqc29uImAgLSBlbmNvZGVzIG9iamVjdHMgYW5kIGFycmF5cyBhcyBKU09OIG9iamVjdCAodXNpbmcgYGpzb25fZW5jb2RlKClgKSwgcHJpbWl0aXZlcyB3cml0dGVuIGluIHN0cmluZ2lmaWVkIGZvcm0sCiAqICAgICAgd2hpY2ggaXMgYWxsb3dlZCBmb3IgbW9zdCBvZiB0aGUgSlNPTiBwYXJzZXJzIGFzIHZhbGlkIHZhbHVlcy4gRm9yIGVtcHR5IGFycmF5cyBKU09OIGFycmF5IHByZWZlcnJlZCwgaWYgaXQgaXMKICogICAgICBuZWNlc3NhcnksIHVzZSBgbmV3IHN0ZENsYXNzKClgIHRvIHBlcnNpc3QgZW1wdHkgSlNPTiBvYmplY3QuIE5vdGUsIHRoYXQgb25seSBKU09OIGZvcm1hdCBjb25zaWRlcmVkIHN1cHBvcnRlZCBieQogKiAgICAgIGFsbCBDb3VjaGJhc2UgU0RLcywgZXZlcnl0aGluZyBlbHNlIGlzIHByaXZhdGUgaW1wbGVtZW50YXRpb24gKGkuZS4gYCJwaHAiYCBmb3JtYXQgd29uJ3QgYmUgcmVhZGFibGUgYnkgLk5FVCBTREspLgogKiAgICogYCJwaHAiYCAtIHVzZXMgUEhQIHNlcmlhbGl6ZSgpIG1ldGhvZCB0byBlbmNvZGUgdGhlIGRvY3VtZW50LgogKgogKiAqIGBjb3VjaGJhc2UuZW5jb2Rlci5jb21wcmVzc2lvbmAgKHN0cmluZyksIGRlZmF1bHQ6IGAibm9uZSJgCiAqCiAqICAgc2VsZWN0cyBjb21wcmVzc2lvbiBhbGdvcml0aG0uIEFsc28gc2VlIHJlbGF0ZWQgY29tcHJlc3Npb24gb3B0aW9ucyBiZWxvdy4gQWNjZXB0cyB0aGUgZm9sbG93aW5nIHZhbHVlczoKICogICAqIGAiZmFzdGx6ImAgLSB1c2VzIEZhc3RMWiBhbGdvcml0aG0uIFRoZSBtb2R1bGUgbWlnaHQgYmUgY29uZmlndXJlZCB0byB1c2Ugc3lzdGVtIGZhc3RseiBsaWJyYXJ5IGR1cmluZyBidWlsZCwKICogICAgIG90aGV3aXNlIHZlbmRvcmVkIHZlcnNpb24gd2lsbCBiZSB1c2VkLiBUaGlzIGFsZ29yaXRobSBpcyBhbHdheXMgYXZhaWxhYmxlLgogKiAgICogYCJ6bGliImAgLSB1c2VzIGNvbXByZXNzaW9uIGltcGxlbWVudGVkIGJ5IGxpYnouIE1pZ2h0IG5vdCBiZSBhdmFpbGFibGUsIGlmIHRoZSBzeXN0ZW0gZGlkbid0IGhhdmUgbGlieiBoZWFkZXJzCiAqICAgICBkdXJpbmcgYnVpbGQgcGhhc2UuIEluIHRoaXMgY2FzZSBcQ291Y2hiYXNlXEhBVkVfWkxJQiB3aWxsIGJlIGZhbHNlLgogKiAgICogYCJvZmYiYCBvciBgIm5vbmUiYCAtIGNvbXByZXNzaW9uIHdpbGwgYmUgZGlzYWJsZWQsIGJ1dCB0aGUgbGlicmFyeSB3aWxsIHN0aWxsIHJlYWQgY29tcHJlc3NlZCB2YWx1ZXMuCiAqCiAqICogYGNvdWNoYmFzZS5lbmNvZGVyLmNvbXByZXNzaW9uX3RocmVzaG9sZGAgKGludCksIGRlZmF1bHQ6IGAwYAogKgogKiAgIGNvbnRyb2xzIG1pbmltdW0gc2l6ZSBvZiB0aGUgZG9jdW1lbnQgdmFsdWUgaW4gYnl0ZXMgdG8gdXNlIGNvbXByZXNzaW9uLiBGb3IgZXhhbXBsZSwgaWYgdGhyZXNob2xkIDEwMCBieXRlcywKICogICBhbmQgdGhlIGRvY3VtZW50IHNpemUgaXMgNTAsIGNvbXByZXNzaW9uIHdpbGwgYmUgZGlzYWJsZWQgZm9yIHRoaXMgcGFydGljdWxhciBkb2N1bWVudC4KICoKICogKiBgY291Y2hiYXNlLmVuY29kZXIuY29tcHJlc3Npb25fZmFjdG9yYCAoZmxvYXQpLCBkZWZhdWx0OiBgMC4wYAogKgogKiAgIGNvbnRyb2xzIHRoZSBtaW5pbXVtIHJhdGlvIG9mIHRoZSByZXN1bHQgdmFsdWUgYW5kIG9yaWdpbmFsIGRvY3VtZW50IHZhbHVlIHRvIHByb2NlZWQgd2l0aCBwZXJzaXN0aW5nIGNvbXByZXNzZWQKICogICBieXRlcy4gRm9yIGV4YW1wbGUsIHRoZSBvcmlnaW5hbCBkb2N1bWVudCBjb25zaXN0cyBvZiAxMDAgYnl0ZXMuIEluIHRoaXMgY2FzZSBmYWN0b3IgMS4wIHdpbGwgcmVxdWlyZSBjb21wcmVzc29yCiAqICAgdG8geWllbGQgdmFsdWVzIG5vdCBsYXJnZXIgdGhhbiAxMDAgYnl0ZXMgKDEwMC8xLjApLCBhbmQgMS41IC0tIG5vdCBsYXJnZXIgdGhhbiA2NiBieXRlcyAoMTAwLzEuNSkuCiAqCiAqICogYGNvdWNoYmFzZS5kZWNvZGVyLmpzb25fYXJyYXlzYCAoYm9vbGVhbiksIGRlZmF1bHQ6IGB0cnVlYAogKgogKiAgIGNvbnRyb2xzIHRoZSBmb3JtIG9mIHRoZSBkb2N1bWVudHMsIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIgaWYgdGhleSB3ZXJlIGluIEpTT04gZm9ybWF0LiBXaGVuIHRydWUsIGl0IHdpbGwgZ2VuZXJhdGUKICogICBhcnJheXMgb2YgYXJyYXlzLCBvdGhlcndpc2UgaW5zdGFuY2VzIG9mIHN0ZENsYXNzLgogKgogKiAqIGBjb3VjaGJhc2UucG9vbC5tYXhfaWRsZV90aW1lX3NlY2AgKGludCksIGRlZmF1bHQ6IGA2MGAKICoKICogICBjb250cm9scyB0aGUgbWF4aW11bSBpbnRlcnZhbCB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIG9iamVjdCBjb3VsZCBiZSBpZGxlLCBpLmUuIHdpdGhvdXQgYW55IGRhdGEvcXVlcnkKICogICBvcGVyYXRpb25zLiBBbGwgY29ubmVjdGlvbnMgd2hpY2ggaWRsZSBtb3JlIHRoYW4gdGhpcyBpbnRlcnZhbCB3aWxsIGJlIGNsb3NlZCBhdXRvbWF0aWNhbGx5LiBDbGVhbnVwIGZ1bmN0aW9uCiAqICAgZXhlY3V0ZWQgYWZ0ZXIgZWFjaCByZXF1ZXN0IHVzaW5nIFJTSFVURE9XTiBob29rLgogKgogKiAqIGBjb3VjaGJhc2UuYWxsb3dfZmFsbGJhY2tfdG9fYnVja2V0X2Nvbm5lY3Rpb25gIChib29sZWFuKSwgZGVmYXVsdDogYGZhbHNlYAogKgogKiAgIGFsbG93cyB0aGUgbGlicmFyeSB0byBzd2l0Y2ggdG8gYnVja2V0IGNvbm5lY3Rpb24gd2hlbiB0aGUgY29ubmVjdGlvbiBzdHJpbmcgaW5jbHVkZXMgYnVja2V0IG5hbWUuIEl0IGlzIHVzZWZ1bAogKiAgIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGNvbm5lY3RzIHRvIG9sZGVyIENvdWNoYmFzZSBTZXJ2ZXIsIHRoYXQgZG9lcyBub3QgaGF2ZSBHM0NQIGZlYXR1cmUuCiAqCiAqIEBwYWNrYWdlIENvdWNoYmFzZQogKi8KCm5hbWVzcGFjZSBDb3VjaGJhc2U7Cgp1c2UgSnNvblNlcmlhbGl6YWJsZTsKdXNlIEV4Y2VwdGlvbjsKdXNlIFRocm93YWJsZTsKdXNlIERhdGVUaW1lSW50ZXJmYWNlOwoKLyoqCiAqIEFuIG9iamVjdCB3aGljaCBjb250YWlucyBtZXRhIGluZm9ybWF0aW9uIG9mIHRoZSBkb2N1bWVudCBuZWVkZWQgdG8gZW5mb3JjZSBxdWVyeSBjb25zaXN0ZW5jeS4KICovCmludGVyZmFjZSBNdXRhdGlvblRva2VuCnsKICAgIC8qKgogICAgICogUmV0dXJucyBidWNrZXQgbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWNrZXROYW1lKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHBhcnRpdGlvbiBudW1iZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFydGl0aW9uSWQoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgVVVJRCBvZiB0aGUgcGFydGl0aW9uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBhcnRpdGlvblV1aWQoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHNlcXVlbmNlIG51bWJlciBpbnNpZGUgcGFydGl0aW9uCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlcXVlbmNlTnVtYmVyKCk7Cn0KCi8qKgogKiBJbnRlcmZhY2UgZm9yIHJldHJpZXZpbmcgbWV0YWRhdGEgc3VjaCBhcyBlcnJvcnMgYW5kIG1ldHJpY3MgZ2VuZXJhdGVkIGR1cmluZyBOMVFMIHF1ZXJpZXMuCiAqLwppbnRlcmZhY2UgUXVlcnlNZXRhRGF0YQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHF1ZXJ5IGV4ZWN1dGlvbiBzdGF0dXMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdGF0dXMoKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGlkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBxdWVyeQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3RJZCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY2xpZW50IGNvbnRleHQgaWQgYXNzb2NpYXRlZCB3aXRoIHRoZSBxdWVyeQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsaWVudENvbnRleHRJZCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc2lnbmF0dXJlIG9mIHRoZSBxdWVyeQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2lnbmF0dXJlKCk6ID9hcnJheTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW55IHdhcm5pbmdzIGdlbmVyYXRlZCBkdXJpbmcgcXVlcnkgZXhlY3V0aW9uCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3YXJuaW5ncygpOiA/YXJyYXk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFueSBlcnJvcnMgZ2VuZXJhdGVkIGR1cmluZyBxdWVyeSBleGVjdXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVycm9ycygpOiA/YXJyYXk7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIG1ldHJpY3MgZ2VuZXJhdGVkIGR1cmluZyBxdWVyeSBleGVjdXRpb24gc3VjaCBhcyB0aW1pbmdzIGFuZCBjb3VudHMKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1ldHJpY3MoKTogP2FycmF5OwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcHJvZmlsZSBvZiB0aGUgcXVlcnkgaWYgZW5hYmxlZAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvZmlsZSgpOiA/YXJyYXk7Cn0KCi8qKgogKiBJbnRlcmZhY2UgZm9yIHJldHJpZXZpbmcgbWV0YWRhdGEgc3VjaCBhcyBlcnJvciBjb3VudHMgYW5kIG1ldHJpY3MgZ2VuZXJhdGVkIGR1cmluZyBzZWFyY2ggcXVlcmllcy4KICovCmludGVyZmFjZSBTZWFyY2hNZXRhRGF0YQp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBwaW5kZXhlcyBzdWNjZXNzZnVsbHkgcXVlcmllZAogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1Y2Nlc3NDb3VudCgpOiA/aW50OwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVycm9ycyBtZXNzYWdlcyByZXBvcnRlZCBieSBpbmRpdmlkdWFsIHBpbmRleGVzCiAgICAgKgogICAgICogQHJldHVybiBpbnR8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXJyb3JDb3VudCgpOiA/aW50OwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdGltZSB0YWtlbiB0byBjb21wbGV0ZSB0aGUgcXVlcnkKICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b29rKCk6ID9pbnQ7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgbWF0Y2hlcyBmb3IgdGhpcyByZXN1bHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b3RhbEhpdHMoKTogP2ludDsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGhpZ2hlc3Qgc2NvcmUgb2YgYWxsIGRvY3VtZW50cyBmb3IgdGhpcyBzZWFyY2ggcXVlcnkuCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXhTY29yZSgpOiA/ZmxvYXQ7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtZXRyaWNzIGdlbmVyYXRlZCBkdXJpbmcgZXhlY3V0aW9uIG9mIHRoaXMgc2VhcmNoIHF1ZXJ5LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWV0cmljcygpOiA/YXJyYXk7Cn0KCi8qKgogKiBJbnRlcmZhY2UgZm9yIHJldHJpZXZpbmcgbWV0YWRhdGEgZ2VuZXJhdGVkIGR1cmluZyB2aWV3IHF1ZXJpZXMuCiAqLwppbnRlcmZhY2UgVmlld01ldGFEYXRhCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgcmV0dXJuZWQgYnkgdGhpcyB2aWV3IHF1ZXJ5CiAgICAgKgogICAgICogQHJldHVybiBpbnR8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG90YWxSb3dzKCk6ID9pbnQ7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGRlYnVnIGluZm9ybWF0aW9uIGZvciB0aGlzIHZpZXcgcXVlcnkgaWYgZW5hYmxlZAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVidWcoKTogP2FycmF5Owp9CgovKioKICogQmFzZSBpbnRlcmZhY2UgZm9yIGFsbCByZXN1bHRzIGdlbmVyYXRlZCBieSBLViBvcGVyYXRpb25zLgogKi8KaW50ZXJmYWNlIFJlc3VsdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIENBUyB2YWx1ZSBmb3IgdGhlIGRvY3VtZW50CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FzKCk6ID9zdHJpbmc7Cn0KCi8qKgogKiBJbnRlcmZhY2UgZm9yIHJlc3VsdHMgY3JlYXRlZCBieSB0aGUgZ2V0IG9wZXJhdGlvbi4KICovCmludGVyZmFjZSBHZXRSZXN1bHQgZXh0ZW5kcyBSZXN1bHQKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBkb2N1bWVudCBmZXRjaGVkCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb250ZW50KCk6ID9hcnJheTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGRvY3VtZW50IGV4cGlyYXRpb24gdGltZSBvciBudWxsIGlmIHRoZSBkb2N1bWVudCBkb2VzIG5vdCBleHBpcmUuCiAgICAgKgogICAgICogTm90ZSwgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGV4cGlyeSBvbmx5IHdoZW4gR2V0T3B0aW9ucyBoYWQgd2l0aEV4cGlyeSBzZXQgdG8gdHJ1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIERhdGVUaW1lSW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cGlyeVRpbWUoKTogP0RhdGVUaW1lSW50ZXJmYWNlOwp9CgovKioKICogSW50ZXJmYWNlIGZvciByZXN1bHRzIGNyZWF0ZWQgYnkgdGhlIGdldFJlcGxpY2Egb3BlcmF0aW9uLgogKi8KaW50ZXJmYWNlIEdldFJlcGxpY2FSZXN1bHQgZXh0ZW5kcyBSZXN1bHQKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBkb2N1bWVudCBmZXRjaGVkCiAgICAgKgogICAgICogQHJldHVybiBhcnJheXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb250ZW50KCk6ID9hcnJheTsKCiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGRvY3VtZW50IGNhbWUgZnJvbSBhIHJlcGxpY2Egc2VydmVyCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlcGxpY2EoKTogYm9vbDsKfQoKLyoqCiAqIEludGVyZmFjZSBmb3IgcmVzdWx0cyBjcmVhdGVkIGJ5IHRoZSBleGlzdHMgb3BlcmF0aW9uLgogKi8KaW50ZXJmYWNlIEV4aXN0c1Jlc3VsdCBleHRlbmRzIFJlc3VsdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGRvY3VtZW50IGV4aXN0cwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhpc3RzKCk6IGJvb2w7Cn0KCi8qKgogKiBJbnRlcmZhY2UgZm9yIHJlc3VsdHMgY3JlYXRlZCBieSBvcGVyYXRpb25zIHRoYXQgcGVyZm9ybSBtdXRhdGlvbnMuCiAqLwppbnRlcmZhY2UgTXV0YXRpb25SZXN1bHQgZXh0ZW5kcyBSZXN1bHQKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBtdXRhdGlvbiB0b2tlbiBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBtdXRhdGlvbgogICAgICoKICAgICAqIEByZXR1cm4gTXV0YXRpb25Ub2tlbnxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtdXRhdGlvblRva2VuKCk6ID9NdXRhdGlvblRva2VuOwp9CgovKioKICogSW50ZXJmYWNlIGZvciByZXN1bHRzIGNyZWF0ZWQgYnkgdGhlIGNvdW50ZXIgb3BlcmF0aW9uLgogKi8KaW50ZXJmYWNlIENvdW50ZXJSZXN1bHQgZXh0ZW5kcyBNdXRhdGlvblJlc3VsdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgY291bnRlcgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb250ZW50KCk6IGludDsKfQoKLyoqCiAqIEludGVyZmFjZSBmb3IgcmVzdWx0cyBjcmVhdGVkIGJ5IHRoZSBsb29rdXBJbiBvcGVyYXRpb24uCiAqLwppbnRlcmZhY2UgTG9va3VwSW5SZXN1bHQgZXh0ZW5kcyBSZXN1bHQKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBsb2NhdGVkIGF0IHRoZSBpbmRleCBzcGVjaWZpZWQKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCB0aGUgaW5kZXggdG8gcmV0cmlldmUgY29udGVudCBmcm9tCiAgICAgKiBAcmV0dXJuIG9iamVjdHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb250ZW50KGludCAkaW5kZXgpOiA/b2JqZWN0OwoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcGF0aCBhdCB0aGUgaW5kZXggc3BlY2lmaWVkIGV4aXN0cwogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4IHRoZSBpbmRleCB0byBjaGVjayBmb3IgZXhpc3RlbmNlCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4aXN0cyhpbnQgJGluZGV4KTogYm9vbDsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW55IGVycm9yIGNvZGUgZm9yIHRoZSBwYXRoIGF0IHRoZSBpbmRleCBzcGVjaWZpZWQKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCB0aGUgaW5kZXggdG8gcmV0cmlldmUgdGhlIGVycm9yIGNvZGUgZm9yCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhdHVzKGludCAkaW5kZXgpOiBpbnQ7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBkb2N1bWVudCBleHBpcmF0aW9uIHRpbWUgb3IgbnVsbCBpZiB0aGUgZG9jdW1lbnQgZG9lcyBub3QgZXhwaXJlLgogICAgICoKICAgICAqIE5vdGUsIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBleHBpcnkgb25seSB3aGVuIExvb2t1cEluT3B0aW9ucyBoYWQgd2l0aEV4cGlyeSBzZXQgdG8gdHJ1ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIERhdGVUaW1lSW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cGlyeVRpbWUoKTogP0RhdGVUaW1lSW50ZXJmYWNlOwp9CgovKioKICogSW50ZXJmYWNlIGZvciByZXN1bHRzIGNyZWF0ZWQgYnkgdGhlIG11dGF0ZUluIG9wZXJhdGlvbi4KICovCmludGVyZmFjZSBNdXRhdGVJblJlc3VsdCBleHRlbmRzIE11dGF0aW9uUmVzdWx0CnsKICAgIC8qKgogICAgICogUmV0dXJucyBhbnkgdmFsdWUgbG9jYXRlZCBhdCB0aGUgaW5kZXggc3BlY2lmaWVkCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaW5kZXggdGhlIGluZGV4IHRvIHJldHJpZXZlIGNvbnRlbnQgZnJvbQogICAgICogQHJldHVybiBhcnJheXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb250ZW50KGludCAkaW5kZXgpOiA/YXJyYXk7Cn0KCi8qKgogKiBJbnRlcmZhY2UgZm9yIHJldHJpZXZpbmcgcmVzdWx0cyBmcm9tIE4xUUwgcXVlcmllcy4KICovCmludGVyZmFjZSBRdWVyeVJlc3VsdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgbWV0YWRhdGEgZ2VuZXJhdGVkIGR1cmluZyBxdWVyeSBleGVjdXRpb24gc3VjaCBhcyBlcnJvcnMgYW5kIG1ldHJpY3MKICAgICAqCiAgICAgKiBAcmV0dXJuIFF1ZXJ5TWV0YURhdGF8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWV0YURhdGEoKTogP1F1ZXJ5TWV0YURhdGE7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByb3dzIHJldHVybnMgZHVyaW5nIHF1ZXJ5IGV4ZWN1dGlvbgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm93cygpOiA/YXJyYXk7Cn0KCi8qKgogKiBJbnRlcmZhY2UgZm9yIHJldHJpZXZpbmcgcmVzdWx0cyBmcm9tIGFuYWx5dGljcyBxdWVyaWVzLgogKi8KaW50ZXJmYWNlIEFuYWx5dGljc1Jlc3VsdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgbWV0YWRhdGEgZ2VuZXJhdGVkIGR1cmluZyBxdWVyeSBleGVjdXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFF1ZXJ5TWV0YURhdGF8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWV0YURhdGEoKTogP1F1ZXJ5TWV0YURhdGE7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByb3dzIHJldHVybmVkIGR1cmluZyBxdWVyeSBleGVjdXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJvd3MoKTogP2FycmF5Owp9CgovKioKICogQSByYW5nZSAob3IgYnVja2V0KSBmb3IgYSB0ZXJtIHNlYXJjaCBmYWNldCByZXN1bHQuCiAqIENvdW50cyB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIGEgZ2l2ZW4gdGVybS4KICovCmludGVyZmFjZSBUZXJtRmFjZXRSZXN1bHQKewogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVybSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50Owp9CgovKioKICogQSByYW5nZSAob3IgYnVja2V0KSBmb3IgYSBudW1lcmljIHJhbmdlIGZhY2V0IHJlc3VsdC4gQ291bnRzIHRoZSBudW1iZXIgb2YgbWF0Y2hlcwogKiB0aGF0IGZhbGwgaW50byB0aGUgbmFtZWQgcmFuZ2UgKHdoaWNoIGNhbiBvdmVybGFwIHdpdGggb3RoZXIgdXNlci1kZWZpbmVkIHJhbmdlcykuCiAqLwppbnRlcmZhY2UgTnVtZXJpY1JhbmdlRmFjZXRSZXN1bHQKewogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmc7CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludHxmbG9hdHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtaW4oKTsKCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50fGZsb2F0fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1heCgpOwoKICAgIC8qKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludDsKfQoKLyoqCiAqIEEgcmFuZ2UgKG9yIGJ1Y2tldCkgZm9yIGEgZGF0ZSByYW5nZSBmYWNldCByZXN1bHQuIENvdW50cyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMKICogdGhhdCBmYWxsIGludG8gdGhlIG5hbWVkIHJhbmdlICh3aGljaCBjYW4gb3ZlcmxhcCB3aXRoIG90aGVyIHVzZXItZGVmaW5lZCByYW5nZXMpLgogKi8KaW50ZXJmYWNlIERhdGVSYW5nZUZhY2V0UmVzdWx0CnsKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnQoKTogP3N0cmluZzsKCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuZCgpOiA/c3RyaW5nOwoKICAgIC8qKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludDsKfQoKLyoqCiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgZmFjZXQgcmVzdWx0cy4KICoKICogT25seSBvbmUgbWV0aG9kIG1pZ2h0IHJldHVybiBub24tbnVsbCB2YWx1ZSBhbW9uZyB0ZXJtcygpLCBudW1lcmljUmFuZ2VzKCkgYW5kIGRhdGVSYW5nZXMoKS4KICovCmludGVyZmFjZSBTZWFyY2hGYWNldFJlc3VsdAp7CiAgICAvKioKICAgICAqIFRoZSBmaWVsZCB0aGUgU2VhcmNoRmFjZXQgd2FzIHRhcmdldGluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGQoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogVGhlIHRvdGFsIG51bWJlciBvZiAqdmFsdWVkKiBmYWNldCByZXN1bHRzLiBUb3RhbCA9IG90aGVyKCkgKyB0ZXJtcyAoYnV0IGRvZXNuJ3QgaW5jbHVkZSAqIG1pc3NpbmcoKSkuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvdGFsKCk6IGludDsKCiAgICAvKioKICAgICAqIFRoZSBudW1iZXIgb2YgcmVzdWx0cyB0aGF0IGNvdWxkbid0IGJlIGZhY2V0ZWQsIG1pc3NpbmcgdGhlIGFkZXF1YXRlIHZhbHVlLiBOb3QgbWF0dGVyIGhvdyBtYW55IG1vcmUKICAgICAqIGJ1Y2tldHMgYXJlIGFkZGVkIHRvIHRoZSBvcmlnaW5hbCBmYWNldCwgdGhlc2UgcmVzdWx0IHdvbid0IGV2ZXIgYmUgaW5jbHVkZWQgaW4gb25lLgogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtaXNzaW5nKCk6IGludDsKCiAgICAvKioKICAgICAqIFRoZSBudW1iZXIgb2YgcmVzdWx0cyB0aGF0IGNvdWxkIGhhdmUgYmVlbiBmYWNldGVkIChiZWNhdXNlIHRoZXkgaGF2ZSBhIHZhbHVlIGZvciB0aGUgZmFjZXQncyBmaWVsZCkgYnV0CiAgICAgKiB3ZXJlbid0LCBkdWUgdG8gbm90IGhhdmluZyBhIGJ1Y2tldCBpbiB3aGljaCB0aGV5IGJlbG9uZy4gQWRkaW5nIGEgYnVja2V0IGNhbiByZXN1bHQgaW4gdGhlc2UgcmVzdWx0cyBiZWluZwogICAgICogZmFjZXRlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3RoZXIoKTogaW50OwoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheSBvZiBwYWlycyBzdHJpbmcgbmFtZSB0byBUZXJtRmFjZXRSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlcm1zKCk6ID9hcnJheTsKCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkgb2YgcGFpcnMgc3RyaW5nIG5hbWUgdG8gTnVtZXJpY1JhbmdlRmFjZXRSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG51bWVyaWNSYW5nZXMoKTogP2FycmF5OwoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheSBvZiBwYWlycyBzdHJpbmcgbmFtZSB0byBEYXRlUmFuZ2VGYWNldFJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGF0ZVJhbmdlcygpOiA/YXJyYXk7Cn0KCi8qKgogKiBJbnRlcmZhY2UgZm9yIHJldHJpZXZpbmcgcmVzdWx0cyBmcm9tIHNlYXJjaCBxdWVyaWVzLgogKi8KaW50ZXJmYWNlIFNlYXJjaFJlc3VsdAp7CiAgICAvKioKICAgICAqIFJldHVybnMgbWV0YWRhdGEgZ2VuZXJhdGVkIGR1cmluZyBxdWVyeSBleGVjdXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFNlYXJjaE1ldGFEYXRhfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1ldGFEYXRhKCk6ID9TZWFyY2hNZXRhRGF0YTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW55IGZhY2V0cyByZXR1cm5lZCBieSB0aGUgcXVlcnkKICAgICAqCiAgICAgKiBBcnJheSBjb250YWlucyBpbnN0YW5jZXMgb2YgU2VhcmNoRmFjZXRSZXN1bHQKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmFjZXRzKCk6ID9hcnJheTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW55IHJvd3MgcmV0dXJuZWQgYnkgdGhlIHF1ZXJ5CiAgICAgKgogICAgICogQHJldHVybiBhcnJheXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb3dzKCk6ID9hcnJheTsKfQoKLyoqCiAqIEludGVyZmFjZSBmb3IgcmV0cmlldmluZyByZXN1bHRzIGZyb20gdmlldyBxdWVyaWVzLgogKi8KaW50ZXJmYWNlIFZpZXdSZXN1bHQKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIG1ldGFkYXRhIGdlbmVyYXRlZCBkdXJpbmcgcXVlcnkgZXhlY3V0aW9uCiAgICAgKgogICAgICogQHJldHVybiBWaWV3TWV0YURhdGF8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWV0YURhdGEoKTogP1ZpZXdNZXRhRGF0YTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYW55IHJvd3MgcmV0dXJuZWQgYnkgdGhlIHF1ZXJ5CiAgICAgKgogICAgICogQHJldHVybiBhcnJheXxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb3dzKCk6ID9hcnJheTsKfQoKLyoqCiAqIE9iamVjdCBmb3IgYWNjZXNzaW5nIGEgcm93IHJldHVybmVkIGFzIGEgcGFydCBvZiB0aGUgcmVzdWx0cyBmcm9tIGEgdmllcnkgcXVlcnkuCiAqLwpjbGFzcyBWaWV3Um93CnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgaWQgb2YgdGhlIHJvdwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlkKCk6ID9zdHJpbmcge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGtleSBvZiB0aGUgZG9jdW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcm93CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWx1ZSgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGRvY3VtZW50IGZvciB0aGUgcm93LCBpZiBlbmFibGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkb2N1bWVudCgpIHt9Cn0KCi8qKgogKiAgQmFzZSBleGNlcHRpb24gZm9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgdGhyb3duIG9yaWdpbmF0aW5nIGZyb20gQ291Y2hiYXNlIG9wZXJhdGlvbnMuCiAqLwpjbGFzcyBCYXNlRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlCnsKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdW5kZXJsaW5nIHJlZmVyZW5jZSBzdHJpbmcsIGlmIGFueQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlZigpOiA/c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSB1bmRlcmxpbmcgZXJyb3IgY29udGV4dCwgaWYgYW55CiAgICAgKgogICAgICogQHJldHVybiBvYmplY3R8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29udGV4dCgpOiA/b2JqZWN0IHt9Cn0KCmNsYXNzIFJlcXVlc3RDYW5jZWxlZEV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCmNsYXNzIFJhdGVMaW1pdGVkRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKY2xhc3MgUXVvdGFMaW1pdGVkRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKLyoqCiAqICBUaHJvd24gZm9yIGV4Y2VwdGlvbnMgdGhhdCBvcmlnaW5hdGUgZnJvbSB1bmRlcmx5aW5nIEh0dHAgb3BlcmF0aW9ucy4KICovCmNsYXNzIEh0dHBFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgpjbGFzcyBQYXJzaW5nRmFpbHVyZUV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCmNsYXNzIEluZGV4Tm90Rm91bmRFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgpjbGFzcyBQbGFubmluZ0ZhaWx1cmVFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgpjbGFzcyBJbmRleEZhaWx1cmVFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgpjbGFzcyBLZXlzcGFjZU5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKLyoqCiAqICBUaHJvd24gZm9yIGV4Y2VwdGlvbnMgdGhhdCBvcmlnaW5hdGUgZnJvbSBxdWVyeSBvcGVyYXRpb25zLgogKi8KY2xhc3MgUXVlcnlFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgovKioKICogIFRocm93biBmb3IgZXhjZXB0aW9ucyB0aGF0IG9yaWdpbmF0ZSBmcm9tIHF1ZXJ5IG9wZXJhdGlvbnMuCiAqLwpjbGFzcyBRdWVyeUVycm9yRXhjZXB0aW9uIGV4dGVuZHMgUXVlcnlFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCmNsYXNzIERtbEZhaWx1cmVFeGNlcHRpb24gZXh0ZW5kcyBRdWVyeUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKY2xhc3MgUHJlcGFyZWRTdGF0ZW1lbnRFeGNlcHRpb24gZXh0ZW5kcyBRdWVyeUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKY2xhc3MgUXVlcnlTZXJ2aWNlRXhjZXB0aW9uIGV4dGVuZHMgUXVlcnlFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCi8qKgogKiAgVGhyb3duIGZvciBleGNlcHRpb25zIHRoYXQgb3JpZ2luYXRlIGZyb20gc2VhcmNoIG9wZXJhdGlvbnMuCiAqLwpjbGFzcyBTZWFyY2hFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgovKioKICogIFRocm93biBmb3IgZXhjZXB0aW9ucyB0aGF0IG9yaWdpbmF0ZSBmcm9tIGFuYWx5dGljcyBvcGVyYXRpb25zLgogKi8KY2xhc3MgQW5hbHl0aWNzRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKLyoqCiAqICBUaHJvd24gZm9yIGV4Y2VwdGlvbnMgdGhhdCBvcmlnaW5hdGUgZnJvbSB2aWV3IG9wZXJhdGlvbnMuCiAqLwpjbGFzcyBWaWV3RXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKY2xhc3MgUGFydGlhbFZpZXdFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgpjbGFzcyBCaW5kaW5nc0V4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCmNsYXNzIEludmFsaWRTdGF0ZUV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCi8qKgogKiAgQmFzZSBmb3IgZXhjZXB0aW9ucyB0aGF0IG9yaWdpbmF0ZSBmcm9tIGtleSB2YWx1ZSBvcGVyYXRpb25zCiAqLwpjbGFzcyBLZXlWYWx1ZUV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCi8qKgogKiAgT2NjdXJzIHdoZW4gdGhlIHJlcXVlc3RlZCBkb2N1bWVudCBjb3VsZCBub3QgYmUgZm91bmQuCiAqLwpjbGFzcyBEb2N1bWVudE5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgS2V5VmFsdWVFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCi8qKgogKiAgT2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGluc2VydCBhIGRvY3VtZW50IGJ1dCBhIGRvY3VtZW50IHdpdGggdGhhdCBrZXkgYWxyZWFkeSBleGlzdHMuCiAqLwpjbGFzcyBLZXlFeGlzdHNFeGNlcHRpb24gZXh0ZW5kcyBLZXlWYWx1ZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKLyoqCiAqICBPY2N1cnMgd2hlbiBhIGRvY3VtZW50IGhhcyBnb25lIG92ZXIgdGhlIG1heGltdW0gc2l6ZSBhbGxvd2VkIGJ5IHRoZSBzZXJ2ZXIuCiAqLwpjbGFzcyBWYWx1ZVRvb0JpZ0V4Y2VwdGlvbiBleHRlbmRzIEtleVZhbHVlRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgovKioKICogIE9jY3VycyB3aGVuIGEgbXV0YXRpb24gb3BlcmF0aW9uIGlzIGF0dGVtcHRlZCBhZ2FpbnN0IGEgZG9jdW1lbnQgdGhhdCBpcyBsb2NrZWQuCiAqLwpjbGFzcyBLZXlMb2NrZWRFeGNlcHRpb24gZXh0ZW5kcyBLZXlWYWx1ZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKLyoqCiAqICBPY2N1cnMgd2hlbiBhbiBvcGVyYXRpb24gaGFzIGZhaWxlZCBmb3IgYSByZWFzb24gdGhhdCBpcyB0ZW1wb3JhcnkuCiAqLwpjbGFzcyBUZW1wRmFpbEV4Y2VwdGlvbiBleHRlbmRzIEtleVZhbHVlRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgovKioKICogIE9jY3VycyB3aGVuIGEgc3ViLWRvY3VtZW50IG9wZXJhdGlvbiB0YXJnZXRzIGEgcGF0aCB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc3BlY2lmaWVkIGRvY3VtZW50LgogKi8KY2xhc3MgUGF0aE5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgS2V5VmFsdWVFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCi8qKgogKiAgT2NjdXJzIHdoZW4gYSBzdWItZG9jdW1lbnQgb3BlcmF0aW9uIGV4cGVjdHMgYSBwYXRoIG5vdCB0byBleGlzdHMsIGJ1dCB0aGUgcGF0aCB3YXMgZm91bmQgaW4gdGhlIGRvY3VtZW50LgogKi8KY2xhc3MgUGF0aEV4aXN0c0V4Y2VwdGlvbiBleHRlbmRzIEtleVZhbHVlRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgovKioKICogIE9jY3VycyB3aGVuIGEgc3ViLWRvY3VtZW50IGNvdW50ZXIgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBhbmQgdGhlIHNwZWNpZmllZCBkZWx0YSBpcyBub3QgdmFsaWQuCiAqLwpjbGFzcyBJbnZhbGlkUmFuZ2VFeGNlcHRpb24gZXh0ZW5kcyBLZXlWYWx1ZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKLyoqCiAqICBPY2N1cnMgd2hlbiBhIG11bHRpLW9wZXJhdGlvbiBzdWItZG9jdW1lbnQgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBvbiBhIHNvZnQtZGVsZXRlZCBkb2N1bWVudC4KICovCmNsYXNzIEtleURlbGV0ZWRFeGNlcHRpb24gZXh0ZW5kcyBLZXlWYWx1ZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKLyoqCiAqICBPY2N1cnMgd2hlbiBhbiBvcGVyYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkIHdpdGggYSBjYXMgdmFsdWUgdGhhdCBkb2VzIG5vdCB0aGUgdmFsdWUgb24gdGhlIHNlcnZlci4KICovCmNsYXNzIENhc01pc21hdGNoRXhjZXB0aW9uIGV4dGVuZHMgS2V5VmFsdWVFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCi8qKgogKiAgT2NjdXJzIHdoZW4gYW4gaW52YWxpZCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIHNwZWNpZmllZCBmb3IgYW4gb3BlcmF0aW9uLgogKi8KY2xhc3MgSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgovKioKICogIE9jY3VycyB3aGVuIHRoZSByZXF1ZXN0ZWQgc2VydmljZSBpcyBub3QgYXZhaWxhYmxlLgogKi8KY2xhc3MgU2VydmljZU1pc3NpbmdFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgovKioKICogIE9jY3VycyB3aGVuIHZhcmlvdXMgZ2VuZXJpYyBuZXR3b3JrIGVycm9ycyBvY2N1ci4KICovCmNsYXNzIE5ldHdvcmtFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgovKioKICogIE9jY3VycyB3aGVuIGFuIG9wZXJhdGlvbiBkb2VzIG5vdCByZWNlaXZlIGEgcmVzcG9uc2UgaW4gYSB0aW1lbHkgbWFubmVyLgogKi8KY2xhc3MgVGltZW91dEV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCi8qKgogKiAgT2NjdXJzIHdoZW4gdGhlIHNwZWNpZmllZCBidWNrZXQgZG9lcyBub3QgZXhpc3QuCiAqLwpjbGFzcyBCdWNrZXRNaXNzaW5nRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKLyoqCiAqICBPY2N1cnMgd2hlbiB0aGUgc3BlY2lmaWVkIHNjb3BlIGRvZXMgbm90IGV4aXN0LgogKi8KY2xhc3MgU2NvcGVNaXNzaW5nRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKLyoqCiAqICBPY2N1cnMgd2hlbiB0aGUgc3BlY2lmaWVkIGNvbGxlY3Rpb24gZG9lcyBub3QgZXhpc3QuCiAqLwpjbGFzcyBDb2xsZWN0aW9uTWlzc2luZ0V4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCi8qKgogKiAgT2NjdXJzIHdoZW4gYXV0aGVudGljYXRpb24gaGFzIGZhaWxlZC4KICovCmNsYXNzIEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIFRocm93YWJsZSB7fQoKLyoqCiAqICBPY2N1cnMgd2hlbiBhbiBvcGVyYXRpb24gaXMgYXR0ZW1wdGVkIHdpdGggYmFkIGlucHV0LgogKi8KY2xhc3MgQmFkSW5wdXRFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgovKioKICogIE9jY3VycyB3aGVuIHRoZSBzcGVjaWZpZWQgZHVyYWJpbGl0eSBjb3VsZCBub3QgYmUgbWV0IGZvciBhIG11dGF0aW9uIG9wZXJhdGlvbi4KICovCmNsYXNzIER1cmFiaWxpdHlFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIGltcGxlbWVudHMgVGhyb3dhYmxlIHt9CgovKioKICogIE9jY3VycyB3aGVuIGEgc3ViZG9jdW1lbnQgb3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQuCiAqLwpjbGFzcyBTdWJkb2N1bWVudEV4Y2VwdGlvbiBleHRlbmRzIEJhc2VFeGNlcHRpb24gaW1wbGVtZW50cyBUaHJvd2FibGUge30KCmNsYXNzIFF1ZXJ5SW5kZXgKewogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUHJpbWFyeSgpOiBib29sIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHR5cGUoKTogc3RyaW5nIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHN0YXRlKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlzcGFjZSgpOiBzdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5kZXhLZXkoKTogYXJyYXkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29uZGl0aW9uKCk6ID9zdHJpbmcge30KfQoKY2xhc3MgQ3JlYXRlUXVlcnlJbmRleE9wdGlvbnMKewogICAgcHVibGljIGZ1bmN0aW9uIGNvbmRpdGlvbihzdHJpbmcgJGNvbmRpdGlvbik6IENyZWF0ZVF1ZXJ5SW5kZXhPcHRpb25zIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGlnbm9yZUlmRXhpc3RzKGJvb2wgJHNob3VsZElnbm9yZSk6IENyZWF0ZVF1ZXJ5SW5kZXhPcHRpb25zIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIG51bVJlcGxpY2FzKGludCAkbnVtYmVyKTogQ3JlYXRlUXVlcnlJbmRleE9wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVmZXJyZWQoYm9vbCAkaXNEZWZlcnJlZCk6IENyZWF0ZVF1ZXJ5SW5kZXhPcHRpb25zIHt9Cn0KCmNsYXNzIENyZWF0ZVF1ZXJ5UHJpbWFyeUluZGV4T3B0aW9ucwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gaW5kZXhOYW1lKHN0cmluZyAkbmFtZSk6IENyZWF0ZVF1ZXJ5UHJpbWFyeUluZGV4T3B0aW9ucyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpZ25vcmVJZkV4aXN0cyhib29sICRzaG91bGRJZ25vcmUpOiBDcmVhdGVRdWVyeVByaW1hcnlJbmRleE9wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gbnVtUmVwbGljYXMoaW50ICRudW1iZXIpOiBDcmVhdGVRdWVyeVByaW1hcnlJbmRleE9wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVmZXJyZWQoYm9vbCAkaXNEZWZlcnJlZCk6IENyZWF0ZVF1ZXJ5UHJpbWFyeUluZGV4T3B0aW9ucyB7fQp9CgpjbGFzcyBEcm9wUXVlcnlJbmRleE9wdGlvbnMKewogICAgcHVibGljIGZ1bmN0aW9uIGlnbm9yZUlmTm90RXhpc3RzKGJvb2wgJHNob3VsZElnbm9yZSk6IERyb3BRdWVyeUluZGV4T3B0aW9ucyB7fQp9CgpjbGFzcyBEcm9wUXVlcnlQcmltYXJ5SW5kZXhPcHRpb25zCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBpbmRleE5hbWUoc3RyaW5nICRuYW1lKTogRHJvcFF1ZXJ5UHJpbWFyeUluZGV4T3B0aW9ucyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpZ25vcmVJZk5vdEV4aXN0cyhib29sICRzaG91bGRJZ25vcmUpOiBEcm9wUXVlcnlQcmltYXJ5SW5kZXhPcHRpb25zIHt9Cn0KCmNsYXNzIFdhdGNoUXVlcnlJbmRleGVzT3B0aW9ucwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gd2F0Y2hQcmltYXJ5KGJvb2wgJHNob3VsZFdhdGNoKTogV2F0Y2hRdWVyeUluZGV4ZXNPcHRpb25zIHt9Cn0KCmNsYXNzIFF1ZXJ5SW5kZXhNYW5hZ2VyCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBbGxJbmRleGVzKHN0cmluZyAkYnVja2V0TmFtZSk6IGFycmF5IHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUluZGV4KHN0cmluZyAkYnVja2V0TmFtZSwgc3RyaW5nICRpbmRleE5hbWUsIGFycmF5ICRmaWVsZHMsIENyZWF0ZVF1ZXJ5SW5kZXhPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlUHJpbWFyeUluZGV4KHN0cmluZyAkYnVja2V0TmFtZSwgQ3JlYXRlUXVlcnlQcmltYXJ5SW5kZXhPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJvcEluZGV4KHN0cmluZyAkYnVja2V0TmFtZSwgc3RyaW5nICRpbmRleE5hbWUsIERyb3BRdWVyeUluZGV4T3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGRyb3BQcmltYXJ5SW5kZXgoc3RyaW5nICRidWNrZXROYW1lLCBEcm9wUXVlcnlQcmltYXJ5SW5kZXhPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2F0Y2hJbmRleGVzKHN0cmluZyAkYnVja2V0TmFtZSwgYXJyYXkgJGluZGV4TmFtZXMsIGludCAkdGltZW91dCwgV2F0Y2hRdWVyeUluZGV4ZXNPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGREZWZlcnJlZEluZGV4ZXMoc3RyaW5nICRidWNrZXROYW1lKSB7fQp9CgpjbGFzcyBDcmVhdGVBbmFseXRpY3NEYXRhdmVyc2VPcHRpb25zCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBpZ25vcmVJZkV4aXN0cyhib29sICRzaG91bGRJZ25vcmUpOiBDcmVhdGVBbmFseXRpY3NEYXRhdmVyc2VPcHRpb25zIHt9Cn0KCmNsYXNzIERyb3BBbmFseXRpY3NEYXRhdmVyc2VPcHRpb25zCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBpZ25vcmVJZk5vdEV4aXN0cyhib29sICRzaG91bGRJZ25vcmUpOiBEcm9wQW5hbHl0aWNzRGF0YXZlcnNlT3B0aW9ucyB7fQp9CgpjbGFzcyBDcmVhdGVBbmFseXRpY3NEYXRhc2V0T3B0aW9ucwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gaWdub3JlSWZFeGlzdHMoYm9vbCAkc2hvdWxkSWdub3JlKTogQ3JlYXRlQW5hbHl0aWNzRGF0YXNldE9wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29uZGl0aW9uKHN0cmluZyAkY29uZGl0aW9uKTogQ3JlYXRlQW5hbHl0aWNzRGF0YXNldE9wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGF0YXZlcnNlTmFtZShzdHJpbmcgJGRhdGF2ZXJzZU5hbWUpOiBDcmVhdGVBbmFseXRpY3NEYXRhc2V0T3B0aW9ucyB7fQp9CgpjbGFzcyBEcm9wQW5hbHl0aWNzRGF0YXNldE9wdGlvbnMKewogICAgcHVibGljIGZ1bmN0aW9uIGlnbm9yZUlmTm90RXhpc3RzKGJvb2wgJHNob3VsZElnbm9yZSk6IERyb3BBbmFseXRpY3NEYXRhc2V0T3B0aW9ucyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkYXRhdmVyc2VOYW1lKHN0cmluZyAkZGF0YXZlcnNlTmFtZSk6IERyb3BBbmFseXRpY3NEYXRhc2V0T3B0aW9ucyB7fQp9CgpjbGFzcyBDcmVhdGVBbmFseXRpY3NJbmRleE9wdGlvbnMKewogICAgcHVibGljIGZ1bmN0aW9uIGlnbm9yZUlmRXhpc3RzKGJvb2wgJHNob3VsZElnbm9yZSk6IENyZWF0ZUFuYWx5dGljc0luZGV4T3B0aW9ucyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkYXRhdmVyc2VOYW1lKHN0cmluZyAkZGF0YXZlcnNlTmFtZSk6IENyZWF0ZUFuYWx5dGljc0luZGV4T3B0aW9ucyB7fQp9CgpjbGFzcyBEcm9wQW5hbHl0aWNzSW5kZXhPcHRpb25zCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBpZ25vcmVJZk5vdEV4aXN0cyhib29sICRzaG91bGRJZ25vcmUpOiBEcm9wQW5hbHl0aWNzSW5kZXhPcHRpb25zIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGRhdGF2ZXJzZU5hbWUoc3RyaW5nICRkYXRhdmVyc2VOYW1lKTogRHJvcEFuYWx5dGljc0luZGV4T3B0aW9ucyB7fQp9CgpjbGFzcyBDb25uZWN0QW5hbHl0aWNzTGlua09wdGlvbnMKewogICAgcHVibGljIGZ1bmN0aW9uIGxpbmtOYW1lKGJzdHJpbmcgJGxpbmtOYW1lKTogQ29ubmVjdEFuYWx5dGljc0xpbmtPcHRpb25zIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGRhdGF2ZXJzZU5hbWUoc3RyaW5nICRkYXRhdmVyc2VOYW1lKTogQ29ubmVjdEFuYWx5dGljc0xpbmtPcHRpb25zIHt9Cn0KCmNsYXNzIERpc2Nvbm5lY3RBbmFseXRpY3NMaW5rT3B0aW9ucwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gbGlua05hbWUoYnN0cmluZyAkbGlua05hbWUpOiBEaXNjb25uZWN0QW5hbHl0aWNzTGlua09wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGF0YXZlcnNlTmFtZShzdHJpbmcgJGRhdGF2ZXJzZU5hbWUpOiBEaXNjb25uZWN0QW5hbHl0aWNzTGlua09wdGlvbnMge30KfQoKY2xhc3MgQ3JlYXRlQW5hbHl0aWNzTGlua09wdGlvbnMKewogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRhcmcpOiBDcmVhdGVBbmFseXRpY3NMaW5rT3B0aW9ucyB7fQp9CgpjbGFzcyBSZXBsYWNlQW5hbHl0aWNzTGlua09wdGlvbnMKewogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRhcmcpOiBSZXBsYWNlQW5hbHl0aWNzTGlua09wdGlvbnMge30KfQoKY2xhc3MgRHJvcEFuYWx5dGljc0xpbmtPcHRpb25zCnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0aW1lb3V0KGludCAkYXJnKTogRHJvcEFuYWx5dGljc0xpbmtPcHRpb25zIHt9Cn0KCmludGVyZmFjZSBBbmFseXRpY3NMaW5rVHlwZQp7CiAgICBwdWJsaWMgY29uc3QgQ09VQ0hCQVNFID0gImNvdWNoYmFzZSI7CiAgICBwdWJsaWMgY29uc3QgUzMgPSAiczMiOwogICAgcHVibGljIGNvbnN0IEFaVVJFX0JMT0IgPSAiYXp1cmVibG9iIjsKfQoKY2xhc3MgR2V0QW5hbHl0aWNzTGlua3NPcHRpb25zCnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0aW1lb3V0KGludCAkYXJnKTogRHJvcEFuYWx5dGljc0xpbmtPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0dXBlIHJlc3RyaWN0cyB0aGUgcmVzdWx0cyB0byB0aGUgZ2l2ZW4gbGluayB0eXBlLgogICAgICoKICAgICAqIEBzZWUgQW5hbHl0aWNzTGlua1R5cGU6OkNPVUNIQkFTRQogICAgICogQHNlZSBBbmFseXRpY3NMaW5rVHlwZTo6UzMKICAgICAqIEBzZWUgQW5hbHl0aWNzTGlua1R5cGU6OkFaVVJFX0JMT0IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpbmtUeXBlKHN0cmluZyAkdHlwZSk6IERyb3BBbmFseXRpY3NMaW5rT3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YXZlcnNlIHJlc3RyaWN0cyB0aGUgcmVzdWx0cyB0byBhIGdpdmVuIGRhdGF2ZXJzZSwgY2FuIGJlIGdpdmVuIGluIHRoZSBmb3JtIG9mICJuYW1lcGFydCIgb3IgIm5hbWVwYXJ0MS9uYW1lcGFydDIiLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGF0YXZlcnNlKHN0cmluZyAkZGF0YXZlcnNlKTogRHJvcEFuYWx5dGljc0xpbmtPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHJlc3RyaWN0cyB0aGUgcmVzdWx0cyB0byB0aGUgbGluayB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4gSWYgc2V0IHRoZW4gZGF0YXZlcnNlIG11c3QgYWxzbyBiZSBzZXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKHN0cmluZyAkbmFtZSk6IERyb3BBbmFseXRpY3NMaW5rT3B0aW9ucyB7fQp9CgppbnRlcmZhY2UgQW5hbHl0aWNzRW5jcnlwdGlvbkxldmVsCnsKICAgIHB1YmxpYyBjb25zdCBOT05FID0gIm5vbmUiOwogICAgcHVibGljIGNvbnN0IEhBTEYgPSAiaGFsZiI7CiAgICBwdWJsaWMgY29uc3QgRlVMTCA9ICJmdWxsIjsKfQoKY2xhc3MgRW5jcnlwdGlvblNldHRpbmdzCnsKICAgIC8qKgogICAgICogU2V0cyBlbmNyeXB0aW9uIGxldmVsLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxldmVsIEFjY2VwdGVkIHZhbHVlcyBhcmUgJ25vbmUnLCAnaGFsZicsICdmdWxsJy4KICAgICAqCiAgICAgKiBAc2VlIEFuYWx5dGljc0VuY3J5cHRpb25MZXZlbDo6Tk9ORQogICAgICogQHNlZSBBbmFseXRpY3NFbmNyeXB0aW9uTGV2ZWw6OkhBTEYKICAgICAqIEBzZWUgQW5hbHl0aWNzRW5jcnlwdGlvbkxldmVsOjpGVUxMCiAgICAgKgogICAgICogQHJldHVybiBFbmNyeXB0aW9uU2V0dGluZ3MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxldmVsKHN0cmluZyAkbGV2ZWwpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGNlcnRpZmljYXRlKHN0cmluZyAkY2VydGlmaWNhdGUpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGNsaWVudENlcnRpZmljYXRlKHN0cmluZyAkY2VydGlmaWNhdGUpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGNsaWVudEtleShzdHJpbmcgJGtleSkge30KfQoKaW50ZXJmYWNlIEFuYWx5dGljc0xpbmsge30KCmNsYXNzIENvdWNoYmFzZVJlbW90ZUFuYWx5dGljc0xpbmsgaW1wbGVtZW50cyBBbmFseXRpY3NMaW5rCnsKICAgIC8qKgogICAgICogU2V0cyBuYW1lIG9mIHRoZSBsaW5rCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHJldHVybiBDb3VjaGJhc2VSZW1vdGVBbmFseXRpY3NMaW5rCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKHN0cmluZyAkbmFtZSk6IENvdWNoYmFzZVJlbW90ZUFuYWx5dGljc0xpbmsge30KCiAgICAvKioKICAgICAqIFNldHMgZGF0YXZlcnNlIHRoaXMgbGluayBiZWxvbmdzIHRvCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YXZlcnNlCiAgICAgKiBAcmV0dXJuIENvdWNoYmFzZVJlbW90ZUFuYWx5dGljc0xpbmsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRhdGF2ZXJzZShzdHJpbmcgJGRhdGF2ZXJzZSk6IENvdWNoYmFzZVJlbW90ZUFuYWx5dGljc0xpbmsge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGhvc3RuYW1lIG9mIHRoZSB0YXJnZXQgQ291Y2hiYXNlIGNsdXN0ZXIKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRob3N0bmFtZQogICAgICogQHJldHVybiBDb3VjaGJhc2VSZW1vdGVBbmFseXRpY3NMaW5rCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBob3N0bmFtZShzdHJpbmcgJGhvc3RuYW1lKTogQ291Y2hiYXNlUmVtb3RlQW5hbHl0aWNzTGluayB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgdXNlcm5hbWUgdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIHRoZSByZW1vdGUgY2x1c3Rlci4KICAgICAqCiAgICAgKiBPcHRpb25hbCBpZiBjbGllbnQtY2VydGlmaWNhdGUgYXV0aGVudGljYXRpb24gaXMgYmVpbmcgdXNlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZQogICAgICogQHJldHVybiBDb3VjaGJhc2VSZW1vdGVBbmFseXRpY3NMaW5rCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1c2VybmFtZShzdHJpbmcgJHVzZXJuYW1lKTogQ291Y2hiYXNlUmVtb3RlQW5hbHl0aWNzTGluayB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgcGFzc3dvcmQgdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIHRoZSByZW1vdGUgY2x1c3Rlci4KICAgICAqCiAgICAgKiBPcHRpb25hbCBpZiBjbGllbnQtY2VydGlmaWNhdGUgYXV0aGVudGljYXRpb24gaXMgYmVpbmcgdXNlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZAogICAgICogQHJldHVybiBDb3VjaGJhc2VSZW1vdGVBbmFseXRpY3NMaW5rCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXNzd29yZChzdHJpbmcgJHBhc3N3b3JkKTogQ291Y2hiYXNlUmVtb3RlQW5hbHl0aWNzTGluayB7fQoKICAgIC8qKgogICAgICogU2V0cyBzZXR0aW5ncyBmb3IgY29ubmVjdGlvbiBlbmNyeXB0aW9uCiAgICAgKgogICAgICogQHBhcmFtIEVuY3J5cHRpb25TZXR0aW5ncyAkc2V0dGluZ3MKICAgICAqIEByZXR1cm4gQ291Y2hiYXNlUmVtb3RlQW5hbHl0aWNzTGluawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jcnlwdGlvbihFbmNyeXB0aW9uU2V0dGluZ3MgJHNldHRpbmdzKTogQ291Y2hiYXNlUmVtb3RlQW5hbHl0aWNzTGluayB7fQp9CgpjbGFzcyBBenVyZUJsb2JFeHRlcm5hbEFuYWx5dGljc0xpbmsgaW1wbGVtZW50cyBBbmFseXRpY3NMaW5rCnsKICAgIC8qKgogICAgICogU2V0cyBuYW1lIG9mIHRoZSBsaW5rCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHJldHVybiBBenVyZUJsb2JFeHRlcm5hbEFuYWx5dGljc0xpbmsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoc3RyaW5nICRuYW1lKTogQXp1cmVCbG9iRXh0ZXJuYWxBbmFseXRpY3NMaW5rIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIGRhdGF2ZXJzZSB0aGlzIGxpbmsgYmVsb25ncyB0bwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGF2ZXJzZQogICAgICogQHJldHVybiBBenVyZUJsb2JFeHRlcm5hbEFuYWx5dGljc0xpbmsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRhdGF2ZXJzZShzdHJpbmcgJGRhdGF2ZXJzZSk6IEF6dXJlQmxvYkV4dGVybmFsQW5hbHl0aWNzTGluayB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgY29ubmVjdGlvbiBzdHJpbmcgY2FuIGJlIHVzZWQgYXMgYW4gYXV0aGVudGljYXRpb24gbWV0aG9kLCAnJGNvbm5lY3Rpb25TdHJpbmcnIGNvbnRhaW5zIG90aGVyCiAgICAgKiBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGVtYmVkZGVkIGluc2lkZSB0aGUgc3RyaW5nLiBPbmx5IGEgc2luZ2xlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBjYW4gYmUgdXNlZC4KICAgICAqIChlLmcuICJBY2NvdW50TmFtZT1teUFjY291bnROYW1lO0FjY291bnRLZXk9bXlBY2NvdW50S2V5IikuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY29ubmVjdGlvblN0cmluZwogICAgICogQHJldHVybiBBenVyZUJsb2JFeHRlcm5hbEFuYWx5dGljc0xpbmsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbm5lY3Rpb25TdHJpbmcoc3RyaW5nICRjb25uZWN0aW9uU3RyaW5nKTogQXp1cmVCbG9iRXh0ZXJuYWxBbmFseXRpY3NMaW5rIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIEF6dXJlIGJsb2Igc3RvcmFnZSBhY2NvdW50IG5hbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhY2NvdW50TmFtZQogICAgICogQHJldHVybiBBenVyZUJsb2JFeHRlcm5hbEFuYWx5dGljc0xpbmsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFjY291bnROYW1lKHN0cmluZyAkYWNjb3VudE5hbWUpOiBBenVyZUJsb2JFeHRlcm5hbEFuYWx5dGljc0xpbmsge30KCiAgICAvKioKICAgICAqIFNldHMgQXp1cmUgYmxvYiBzdG9yYWdlIGFjY291bnQga2V5CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYWNjb3VudEtleQogICAgICogQHJldHVybiBBenVyZUJsb2JFeHRlcm5hbEFuYWx5dGljc0xpbmsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFjY291bnRLZXkoc3RyaW5nICRhY2NvdW50S2V5KTogQXp1cmVCbG9iRXh0ZXJuYWxBbmFseXRpY3NMaW5rIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRva2VuIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2lnbmF0dXJlCiAgICAgKiBAcmV0dXJuIEF6dXJlQmxvYkV4dGVybmFsQW5hbHl0aWNzTGluawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hhcmVkQWNjZXNzU2lnbmF0dXJlKHN0cmluZyAkc2lnbmF0dXJlKTogQXp1cmVCbG9iRXh0ZXJuYWxBbmFseXRpY3NMaW5rIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIEF6dXJlIGJsb2Igc3RvcmFnZSBlbmRwb2ludAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJsb2JFbmRwb2ludAogICAgICogQHJldHVybiBBenVyZUJsb2JFeHRlcm5hbEFuYWx5dGljc0xpbmsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJsb2JFbmRwb2ludChzdHJpbmcgJGJsb2JFbmRwb2ludCk6IEF6dXJlQmxvYkV4dGVybmFsQW5hbHl0aWNzTGluayB7fQoKICAgIC8qKgogICAgICogU2V0cyBBenVyZSBibG9iIGVuZHBvaW50IHN1ZmZpeAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN1ZmZpeAogICAgICogQHJldHVybiBBenVyZUJsb2JFeHRlcm5hbEFuYWx5dGljc0xpbmsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuZHBvaW50U3VmZml4KHN0cmluZyAkc3VmZml4KTogQXp1cmVCbG9iRXh0ZXJuYWxBbmFseXRpY3NMaW5rIHt9Cn0KCmNsYXNzIFMzRXh0ZXJuYWxBbmFseXRpY3NMaW5rIGltcGxlbWVudHMgQW5hbHl0aWNzTGluawp7CiAgICAvKioKICAgICAqIFNldHMgbmFtZSBvZiB0aGUgbGluawogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gUzNFeHRlcm5hbEFuYWx5dGljc0xpbmsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoc3RyaW5nICRuYW1lKTogUzNFeHRlcm5hbEFuYWx5dGljc0xpbmsge30KCiAgICAvKioKICAgICAqIFNldHMgZGF0YXZlcnNlIHRoaXMgbGluayBiZWxvbmdzIHRvCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YXZlcnNlCiAgICAgKiBAcmV0dXJuIFMzRXh0ZXJuYWxBbmFseXRpY3NMaW5rCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkYXRhdmVyc2Uoc3RyaW5nICRkYXRhdmVyc2UpOiBTM0V4dGVybmFsQW5hbHl0aWNzTGluayB7fQoKICAgIC8qKgogICAgICogU2V0cyBBV1MgUzMgYWNjZXNzIGtleSBJRAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFjY2Vzc0tleUlkCiAgICAgKiBAcmV0dXJuIFMzRXh0ZXJuYWxBbmFseXRpY3NMaW5rCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhY2Nlc3NLZXlJZChzdHJpbmcgJGFjY2Vzc0tleUlkKTogUzNFeHRlcm5hbEFuYWx5dGljc0xpbmsge30KCiAgICAvKioKICAgICAqIFNldHMgQVdTIFMzIHNlY3JldCBrZXkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZWNyZXRBY2Nlc3NLZXkKICAgICAqIEByZXR1cm4gUzNFeHRlcm5hbEFuYWx5dGljc0xpbmsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlY3JldEFjY2Vzc0tleShzdHJpbmcgJHNlY3JldEFjY2Vzc0tleSk6IFMzRXh0ZXJuYWxBbmFseXRpY3NMaW5rIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIEFXUyBTMyByZWdpb24KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWdpb24KICAgICAqIEByZXR1cm4gUzNFeHRlcm5hbEFuYWx5dGljc0xpbmsKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlZ2lvbihzdHJpbmcgJHJlZ2lvbik6IFMzRXh0ZXJuYWxBbmFseXRpY3NMaW5rIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIEFXUyBTMyB0b2tlbiBpZiB0ZW1wb3JhcnkgY3JlZGVudGlhbHMgYXJlIHByb3ZpZGVkLiBPbmx5IGF2YWlsYWJsZSBpbiA3LjArCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2Vzc2lvblRva2VuCiAgICAgKiBAcmV0dXJuIFMzRXh0ZXJuYWxBbmFseXRpY3NMaW5rCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXNzaW9uVG9rZW4oc3RyaW5nICRzZXNzaW9uVG9rZW4pOiBTM0V4dGVybmFsQW5hbHl0aWNzTGluayB7fQoKICAgIC8qKgogICAgICogU2V0cyBBV1MgUzMgc2VydmljZSBlbmRwb2ludAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcnZpY2VFbmRwb2ludAogICAgICogQHJldHVybiBTM0V4dGVybmFsQW5hbHl0aWNzTGluawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VydmljZUVuZHBvaW50KHN0cmluZyAkc2VydmljZUVuZHBvaW50KTogUzNFeHRlcm5hbEFuYWx5dGljc0xpbmsge30KfQoKY2xhc3MgQW5hbHl0aWNzSW5kZXhNYW5hZ2VyCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVEYXRhdmVyc2Uoc3RyaW5nICRkYXRhdmVyc2VOYW1lLCBDcmVhdGVBbmFseXRpY3NEYXRhdmVyc2VPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJvcERhdGF2ZXJzZShzdHJpbmcgJGRhdGF2ZXJzZU5hbWUsIERyb3BBbmFseXRpY3NEYXRhdmVyc2VPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRGF0YXNldChzdHJpbmcgJGRhdGFzZXROYW1lLCBzdHJpbmcgJGJ1Y2tldE5hbWUsIENyZWF0ZUFuYWx5dGljc0RhdGFzZXRPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJvcERhdGFzZXQoc3RyaW5nICRkYXRhc2V0TmFtZSwgRHJvcEFuYWx5dGljc0RhdGFzZXRPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsRGF0YXNldHMoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVJbmRleChzdHJpbmcgJGRhdGFzZXROYW1lLCBzdHJpbmcgJGluZGV4TmFtZSwgYXJyYXkgJGZpZWxkcywgQ3JlYXRlQW5hbHl0aWNzSW5kZXhPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJvcEluZGV4KHN0cmluZyAkZGF0YXNldE5hbWUsIHN0cmluZyAkaW5kZXhOYW1lLCBEcm9wQW5hbHl0aWNzSW5kZXhPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsSW5kZXhlcygpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGNvbm5lY3RMaW5rKENvbm5lY3RBbmFseXRpY3NMaW5rT3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGRpc2Nvbm5lY3RMaW5rKERpc2Nvbm5lY3RBbmFseXRpY3NMaW5rT3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFBlbmRpbmdNdXRhdGlvbnMoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVMaW5rKEFuYWx5dGljc0xpbmsgJGxpbmssIENyZWF0ZUFuYWx5dGljc0xpbmtPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVwbGFjZUxpbmsoQW5hbHl0aWNzTGluayAkbGluaywgUmVwbGFjZUFuYWx5dGljc0xpbmtPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJvcExpbmsoc3RyaW5nICRsaW5rTmFtZSwgc3RyaW5nICRkYXRhdmVyc2VOYW1lLCBEcm9wQW5hbHl0aWNzTGlua09wdGlvbnMgJG9wdGlvbnMgPSBudWxsKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMaW5rcyhHZXRBbmFseXRpY3NMaW5rc09wdGlvbnMgJG9wdGlvbnMgPSBudWxsKSB7fQp9CgpjbGFzcyBTZWFyY2hJbmRleCBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0eXBlKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1dWlkKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJhbXMoKTogYXJyYXkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc291cmNlVHlwZSgpOiBzdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc291cmNlVXVpZCgpOiBzdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc291cmNlTmFtZSgpOiBzdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc291cmNlUGFyYW1zKCk6IGFycmF5IHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFR5cGUoc3RyaW5nICR0eXBlKTogU2VhcmNoSW5kZXgge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXVpZChzdHJpbmcgJHV1aWQpOiBTZWFyY2hJbmRleCB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXJhbXMoc3RyaW5nICRwYXJhbXMpOiBTZWFyY2hJbmRleCB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTb3VyY2VUeXBlKHN0cmluZyAkdHlwZSk6IFNlYXJjaEluZGV4IHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFNvdXJjZVV1aWQoc3RyaW5nICR1dWlkKTogU2VhcmNoSW5kZXgge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U291cmNlbmFtZShzdHJpbmcgJHBhcmFtcyk6IFNlYXJjaEluZGV4IHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFNvdXJjZVBhcmFtcyhzdHJpbmcgJHBhcmFtcyk6IFNlYXJjaEluZGV4IHt9Cn0KCmNsYXNzIFNlYXJjaEluZGV4TWFuYWdlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW5kZXgoc3RyaW5nICRuYW1lKTogU2VhcmNoSW5kZXgge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsSW5kZXhlcygpOiBhcnJheSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1cHNlcnRJbmRleChTZWFyY2hJbmRleCAkaW5kZXhEZWZpbml0aW9uKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkcm9wSW5kZXgoc3RyaW5nICRuYW1lKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbmRleGVkRG9jdW1lbnRzQ291bnQoc3RyaW5nICRpbmRleE5hbWUpOiBpbnQge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gcGF1c2VJbmdlc3Qoc3RyaW5nICRpbmRleE5hbWUpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlc3VtZUluZ2VzdChzdHJpbmcgJGluZGV4TmFtZSkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWxsb3dRdWVyeWluZyhzdHJpbmcgJGluZGV4TmFtZSkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzYWxsb3dRdWVyeWluZyhzdHJpbmcgJGluZGV4TmFtZSkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJlZXplUGxhbihzdHJpbmcgJGluZGV4TmFtZSkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5mcmVlemVQbGFuKHN0cmluZyAkaW5kZXhOYW1lKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhbmFseXplRG9jdW1lbnQoc3RyaW5nICRpbmRleE5hbWUsICRkb2N1bWVudCkge30KfQoKLyoqCiAqIENsdXN0ZXIgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgZnVuY3Rpb25hbGl0eSBmb3IgcGVyZm9ybWluZyBjbHVzdGVyIGxldmVsIG9wZXJhdGlvbnMKICogYWdhaW5zdCBhIGNsdXN0ZXIgYW5kIGZvciBhY2Nlc3MgdG8gYnVja2V0cy4KICovCmNsYXNzIENsdXN0ZXIKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkY29ubnN0ciwgQ2x1c3Rlck9wdGlvbnMgJG9wdGlvbnMpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbmV3IGJ1Y2tldCBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSB0aGUgbmFtZSBvZiB0aGUgYnVja2V0CiAgICAgKiBAcmV0dXJuIEJ1Y2tldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVja2V0KHN0cmluZyAkbmFtZSk6IEJ1Y2tldCB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZXMgYSBOMVFMIHF1ZXJ5IGFnYWluc3QgdGhlIGNsdXN0ZXIuCiAgICAgKiBOb3RlOiBPbiBDb3VjaGJhc2UgU2VydmVyIHZlcnNpb25zIDwgNi41IGEgYnVja2V0IG11c3QgYmUgb3BlbmVkIGJlZm9yZSB1c2luZyBxdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdGF0ZW1lbnQgdGhlIE4xUUwgcXVlcnkgc3RhdGVtZW50IHRvIGV4ZWN1dGUKICAgICAqIEBwYXJhbSBRdWVyeU9wdGlvbnMgJG9wdGlvbnMgdGhlIG9wdGlvbnMgdG8gdXNlIHdoZW4gZXhlY3V0aW5nIHRoZSBxdWVyeQogICAgICogQHJldHVybiBRdWVyeVJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVlcnkoc3RyaW5nICRzdGF0ZW1lbnQsIFF1ZXJ5T3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBRdWVyeVJlc3VsdCB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZXMgYW4gYW5hbHl0aWNzIHF1ZXJ5IGFnYWluc3QgdGhlIGNsdXN0ZXIuCiAgICAgKiBOb3RlOiBPbiBDb3VjaGJhc2UgU2VydmVyIHZlcnNpb25zIDwgNi41IGEgYnVja2V0IG11c3QgYmUgb3BlbmVkIGJlZm9yZSB1c2luZyBhbmFseXRpY3NRdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdGF0ZW1lbnQgdGhlIGFuYWx5dGljcyBxdWVyeSBzdGF0ZW1lbnQgdG8gZXhlY3V0ZQogICAgICogQHBhcmFtIEFuYWx5dGljc09wdGlvbnMgJG9wdGlvbnMgdGhlIG9wdGlvbnMgdG8gdXNlIHdoZW4gZXhlY3V0aW5nIHRoZSBxdWVyeQogICAgICogQHJldHVybiBBbmFseXRpY3NSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFuYWx5dGljc1F1ZXJ5KHN0cmluZyAkc3RhdGVtZW50LCBBbmFseXRpY3NPcHRpb25zICRvcHRpb25zID0gbnVsbCk6IEFuYWx5dGljc1Jlc3VsdCB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZXMgYSBmdWxsIHRleHQgc2VhcmNoIHF1ZXJ5IGFnYWluc3QgdGhlIGNsdXN0ZXIuCiAgICAgKiBOb3RlOiBPbiBDb3VjaGJhc2UgU2VydmVyIHZlcnNpb25zIDwgNi41IGEgYnVja2V0IG11c3QgYmUgb3BlbmVkIGJlZm9yZSB1c2luZyBzZWFyY2hRdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmRleE5hbWUgdGhlIGZ0cyBpbmRleCB0byB1c2UgZm9yIHRoZSBxdWVyeQogICAgICogQHBhcmFtIFNlYXJjaFF1ZXJ5ICRxdWVyeSB0aGUgc2VhcmNoIHF1ZXJ5IHRvIGV4ZWN1dGUKICAgICAqIEBwYXJhbSBTZWFyY2hPcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSB3aGVuIGV4ZWN1dGluZyB0aGUgcXVlcnkKICAgICAqIEByZXR1cm4gU2VhcmNoUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZWFyY2hRdWVyeShzdHJpbmcgJGluZGV4TmFtZSwgU2VhcmNoUXVlcnkgJHF1ZXJ5LCBTZWFyY2hPcHRpb25zICRvcHRpb25zID0gbnVsbCk6IFNlYXJjaFJlc3VsdCB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBidWNrZXQgbWFuYWdlciBvYmplY3QgZm9yIG1hbmFnaW5nIGJ1Y2tldHMuCiAgICAgKgogICAgICogQHJldHVybiBCdWNrZXRNYW5hZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWNrZXRzKCk6IEJ1Y2tldE1hbmFnZXIge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgdXNlciBtYW5hZ2VyIG9iamVjdCBmb3IgbWFuYWdpbmcgdXNlcnMgYW5kIGdyb3Vwcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIFVzZXJNYW5hZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1c2VycygpOiBVc2VyTWFuYWdlciB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBxdWVyeSBpbmRleCBtYW5hZ2VyIG9iamVjdCBmb3IgbWFuYWdpbmcgYW5hbHl0aWNzIHF1ZXJ5IGluZGV4ZXMuCiAgICAgKgogICAgICogQHJldHVybiBBbmFseXRpY3NJbmRleE1hbmFnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFuYWx5dGljc0luZGV4ZXMoKTogQW5hbHl0aWNzSW5kZXhNYW5hZ2VyIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IHF1ZXJ5IGluZGV4IG1hbmFnZXIgb2JqZWN0IGZvciBtYW5hZ2luZyBOMVFMIHF1ZXJ5IGluZGV4ZXMuCiAgICAgKgogICAgICogQHJldHVybiBRdWVyeUluZGV4TWFuYWdlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVlcnlJbmRleGVzKCk6IFF1ZXJ5SW5kZXhNYW5hZ2VyIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IHNlYXJjaCBpbmRleCBtYW5hZ2VyIG9iamVjdCBmb3IgbWFuYWdpbmcgc2VhcmNoIHF1ZXJ5IGluZGV4ZXMuCiAgICAgKgogICAgICogQHJldHVybiBTZWFyY2hJbmRleE1hbmFnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlYXJjaEluZGV4ZXMoKTogU2VhcmNoSW5kZXhNYW5hZ2VyIHt9Cn0KCmludGVyZmFjZSBFdmljdGlvblBvbGljeQp7CiAgICAvKioKICAgICAqIER1cmluZyBlamVjdGlvbiwgZXZlcnl0aGluZyAoaW5jbHVkaW5nIGtleSwgbWV0YWRhdGEsIGFuZCB2YWx1ZSkgd2lsbCBiZSBlamVjdGVkLgogICAgICoKICAgICAqIEZ1bGwgRWplY3Rpb24gcmVkdWNlcyB0aGUgbWVtb3J5IG92ZXJoZWFkIHJlcXVpcmVtZW50LCBhdCB0aGUgY29zdCBvZiBwZXJmb3JtYW5jZS4KICAgICAqCiAgICAgKiBUaGlzIHZhbHVlIGlzIG9ubHkgdmFsaWQgZm9yIGJ1Y2tldHMgb2YgdHlwZSBDT1VDSEJBU0UuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBGVUxMID0gImZ1bGxFdmljdGlvbiI7CgogICAgLyoqCiAgICAgKiBEdXJpbmcgZWplY3Rpb24sIG9ubHkgdGhlIHZhbHVlIHdpbGwgYmUgZWplY3RlZCAoa2V5IGFuZCBtZXRhZGF0YSB3aWxsIHJlbWFpbiBpbiBtZW1vcnkpLgogICAgICoKICAgICAqIFZhbHVlIEVqZWN0aW9uIG5lZWRzIG1vcmUgc3lzdGVtIG1lbW9yeSwgYnV0IHByb3ZpZGVzIGJldHRlciBwZXJmb3JtYW5jZSB0aGFuIEZ1bGwgRWplY3Rpb24uCiAgICAgKgogICAgICogVGhpcyB2YWx1ZSBpcyBvbmx5IHZhbGlkIGZvciBidWNrZXRzIG9mIHR5cGUgQ09VQ0hCQVNFLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVkFMVUVfT05MWSA9ICJ2YWx1ZU9ubHkiOwoKICAgIC8qKgogICAgICogQ291Y2hiYXNlIFNlcnZlciBrZWVwcyBhbGwgZGF0YSB1bnRpbCBleHBsaWNpdGx5IGRlbGV0ZWQsIGJ1dCB3aWxsIHJlamVjdAogICAgICogYW55IG5ldyBkYXRhIGlmIHlvdSByZWFjaCB0aGUgcXVvdGEgKGRlZGljYXRlZCBtZW1vcnkpIHlvdSBzZXQgZm9yIHlvdXIgYnVja2V0LgogICAgICoKICAgICAqIFRoaXMgdmFsdWUgaXMgb25seSB2YWxpZCBmb3IgYnVja2V0cyBvZiB0eXBlIEVQSEVNRVJBTC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE5PX0VWSUNUSU9OID0gIm5vRXZpY3Rpb24iOwoKICAgIC8qKgogICAgICogV2hlbiB0aGUgbWVtb3J5IHF1b3RhIGlzIHJlYWNoZWQsIENvdWNoYmFzZSBTZXJ2ZXIgZWplY3RzIGRhdGEgdGhhdCBoYXMgbm90IGJlZW4gdXNlZCByZWNlbnRseS4KICAgICAqCiAgICAgKiBUaGlzIHZhbHVlIGlzIG9ubHkgdmFsaWQgZm9yIGJ1Y2tldHMgb2YgdHlwZSBFUEhFTUVSQUwuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBOT1RfUkVDRU5UTFlfVVNFRCA9ICJucnVFdmljdGlvbiI7Cn0KCmludGVyZmFjZSBTdG9yYWdlQmFja2VuZAp7CiAgICBwdWJsaWMgY29uc3QgQ09VQ0hTVE9SRSA9ICJjb3VjaHN0b3JlIjsKICAgIHB1YmxpYyBjb25zdCBNQUdNQSA9ICJtYWdtYSI7Cn0KCmNsYXNzIEJ1Y2tldFNldHRpbmdzCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBmbHVzaEVuYWJsZWQoKTogYm9vbCB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiByYW1RdW90YU1iKCk6IGludCB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBudW1SZXBsaWNhcygpOiBpbnQge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVwbGljYUluZGV4ZXMoKTogYm9vbCB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBidWNrZXRUeXBlKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBldmljdGlvblBvbGljeSgpOiBzdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RvcmFnZUJhY2tlbmQoKTogc3RyaW5nIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIG1heFR0bCgpOiBpbnQge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcHJlc3Npb25Nb2RlKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXROYW1lKHN0cmluZyAkbmFtZSk6IEJ1Y2tldFNldHRpbmdzIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGVuYWJsZUZsdXNoKGJvb2wgJGVuYWJsZSk6IEJ1Y2tldFNldHRpbmdzIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFJhbVF1b3RhTWIoaW50ICRzaXplSW5NYik6IEJ1Y2tldFNldHRpbmdzIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldE51bVJlcGxpY2FzKGludCAkbnVtUmVwbGljYXMpOiBCdWNrZXRTZXR0aW5ncyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlbmFibGVSZXBsaWNhSW5kZXhlcyhib29sICRlbmFibGUpOiBCdWNrZXRTZXR0aW5ncyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRCdWNrZXRUeXBlKHN0cmluZyAkdHlwZSk6IEJ1Y2tldFNldHRpbmdzIHt9CgogICAgLyoqCiAgICAgKiBDb25maWd1cmVzIGV2aWN0aW9uIHBvbGljeSBmb3IgdGhlIGJ1Y2tldC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwb2xpY3kgZXZpY3Rpb24gcG9saWN5LiBVc2UgY29uc3RhbnRzIEZVTEwsIFZBTFVFX09OTFksCiAgICAgKiAgIE5PX0VWSUNUSU9OLCBOT1RfUkVDRU5UTFlfVVNFRC4KICAgICAqCiAgICAgKiBAc2VlIFxFdmljdGlvblBvbGljeTo6RlVMTAogICAgICogQHNlZSBcRXZpY3Rpb25Qb2xpY3k6OlZBTFVFX09OTFkKICAgICAqIEBzZWUgXEV2aWN0aW9uUG9saWN5OjpOT19FVklDVElPTgogICAgICogQHNlZSBcRXZpY3Rpb25Qb2xpY3k6Ok5PVF9SRUNFTlRMWV9VU0VECiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFdmljdGlvblBvbGljeShzdHJpbmcgJHBvbGljeSk6IEJ1Y2tldFNldHRpbmdzIHt9CgogICAgLyoqCiAgICAgKiBDb25maWd1cmVzIHN0b3JhZ2UgYmFja2VuZCBmb3IgdGhlIGJ1Y2tldC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwb2xpY3kgc3RvcmFnZSBiYWNrZW5kLiBVc2UgY29uc3RhbnRzIENPVUNIU1RPUkUsIE1BR01BLgogICAgICoKICAgICAqIEBzZWUgXFN0b3JhZ2VCYWNrZW5kOjpDT1VDSFNUT1JFCiAgICAgKiBAc2VlIFxTdG9yYWdlQmFja2VuZDo6TUFHTUEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFN0b3JhZ2VCYWNrZW5kKHN0cmluZyAkcG9saWN5KTogQnVja2V0U2V0dGluZ3Mge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TWF4VHRsKGludCAkdHRsU2Vjb25kcyk6IEJ1Y2tldFNldHRpbmdzIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbXByZXNzaW9uTW9kZShzdHJpbmcgJG1vZGUpOiBCdWNrZXRTZXR0aW5ncyB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmVzIG1pbmltYWwgZHVyYWJpbGl0eSBsZXZlbCBjb25maWd1cmVkIGZvciB0aGUgYnVja2V0CiAgICAgKgogICAgICogQHNlZSBcRHVyYWJpbGl0eUxldmVsOjpOT05FCiAgICAgKiBAc2VlIFxEdXJhYmlsaXR5TGV2ZWw6Ok1BSk9SSVRZCiAgICAgKiBAc2VlIFxEdXJhYmlsaXR5TGV2ZWw6Ok1BSk9SSVRZX0FORF9QRVJTSVNUX1RPX0FDVElWRQogICAgICogQHNlZSBcRHVyYWJpbGl0eUxldmVsOjpQRVJTSVNUX1RPX01BSk9SSVRZCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtaW5pbWFsRHVyYWJpbGl0eUxldmVsKCk6IGludCB7fQoKICAgIC8qKgogICAgICogQ29uZmlndXJlcyBtaW5pbWFsIGR1cmFiaWxpdHkgbGV2ZWwgZm9yIHRoZSBidWNrZXQKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRkdXJhYmlsaXR5TGV2ZWwgZHVyYWJpbGl0eSBsZXZlbC4KICAgICAqCiAgICAgKiBAc2VlIFxEdXJhYmlsaXR5TGV2ZWw6Ok5PTkUKICAgICAqIEBzZWUgXER1cmFiaWxpdHlMZXZlbDo6TUFKT1JJVFkKICAgICAqIEBzZWUgXER1cmFiaWxpdHlMZXZlbDo6TUFKT1JJVFlfQU5EX1BFUlNJU1RfVE9fQUNUSVZFCiAgICAgKiBAc2VlIFxEdXJhYmlsaXR5TGV2ZWw6OlBFUlNJU1RfVE9fTUFKT1JJVFkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE1pbmltYWxEdXJhYmlsaXR5TGV2ZWwoaW50ICRkdXJhYmlsaXR5TGV2ZWwpOiBCdWNrZXRTZXR0aW5ncyB7fQp9CgpjbGFzcyBCdWNrZXRNYW5hZ2VyCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVCdWNrZXQoQnVja2V0U2V0dGluZ3MgJHNldHRpbmdzKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVCdWNrZXQoc3RyaW5nICRuYW1lKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCdWNrZXQoc3RyaW5nICRuYW1lKTogQnVja2V0U2V0dGluZ3Mge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsQnVja2V0cygpOiBhcnJheSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBmbHVzaChzdHJpbmcgJG5hbWUpIHt9Cn0KCmNsYXNzIFJvbGUKewogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGJ1Y2tldCgpOiA/c3RyaW5nIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNjb3BlKCk6ID9zdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gY29sbGVjdGlvbigpOiA/c3RyaW5nIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldE5hbWUoc3RyaW5nICRuYW1lKTogUm9sZSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRCdWNrZXQoc3RyaW5nICRidWNrZXQpOiBSb2xlIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFNjb3BlKHN0cmluZyAkYnVja2V0KTogUm9sZSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb2xsZWN0aW9uKHN0cmluZyAkYnVja2V0KTogUm9sZSB7fQp9CgpjbGFzcyBSb2xlQW5kRGVzY3JpcHRpb24KewogICAgcHVibGljIGZ1bmN0aW9uIHJvbGUoKTogUm9sZSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwbGF5TmFtZSgpOiBzdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVzY3JpcHRpb24oKTogc3RyaW5nIHt9Cn0KCmNsYXNzIE9yaWdpbgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gdHlwZSgpOiBzdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcge30KfQoKY2xhc3MgUm9sZUFuZE9yaWdpbgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gcm9sZSgpOiBSb2xlIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIG9yaWdpbnMoKTogYXJyYXkge30KfQoKY2xhc3MgVXNlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gdXNlcm5hbWUoKTogc3RyaW5nIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGRpc3BsYXlOYW1lKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBncm91cHMoKTogYXJyYXkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gcm9sZXMoKTogYXJyYXkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXNlcm5hbWUoc3RyaW5nICR1c2VybmFtZSk6IFVzZXIge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGFzc3dvcmQoc3RyaW5nICRwYXNzd29yZCk6IFVzZXIge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RGlzcGxheU5hbWUoc3RyaW5nICRuYW1lKTogVXNlciB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRHcm91cHMoYXJyYXkgJGdyb3Vwcyk6IFVzZXIge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Um9sZXMoYXJyYXkgJHJvbGVzKTogVXNlciB7fQp9CgpjbGFzcyBHcm91cAp7CiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVzY3JpcHRpb24oKTogc3RyaW5nIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHJvbGVzKCk6IGFycmF5IHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGxkYXBHcm91cFJlZmVyZW5jZSgpOiA/c3RyaW5nIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldE5hbWUoc3RyaW5nICRuYW1lKTogR3JvdXAge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RGVzY3JpcHRpb24oc3RyaW5nICRkZXNjcmlwdGlvbik6IEdyb3VwIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFJvbGVzKGFycmF5ICRyb2xlcyk6IEdyb3VwIHt9Cn0KCmNsYXNzIFVzZXJBbmRNZXRhZGF0YQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZG9tYWluKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1c2VyKCk6IFVzZXIge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZWZmZWN0aXZlUm9sZXMoKTogYXJyYXkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFzc3dvcmRDaGFuZ2VkKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleHRlcm5hbEdyb3VwcygpOiBhcnJheSB7fQp9CgpjbGFzcyBHZXRBbGxVc2Vyc09wdGlvbnMKewogICAgcHVibGljIGZ1bmN0aW9uIGRvbWFpbk5hbWUoc3RyaW5nICRuYW1lKTogR2V0QWxsVXNlcnNPcHRpb25zIHt9Cn0KCmNsYXNzIEdldFVzZXJPcHRpb25zCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBkb21haW5OYW1lKHN0cmluZyAkbmFtZSk6IEdldFVzZXJPcHRpb25zIHt9Cn0KCmNsYXNzIERyb3BVc2VyT3B0aW9ucwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZG9tYWluTmFtZShzdHJpbmcgJG5hbWUpOiBEcm9wVXNlck9wdGlvbnMge30KfQoKY2xhc3MgVXBzZXJ0VXNlck9wdGlvbnMKewogICAgcHVibGljIGZ1bmN0aW9uIGRvbWFpbk5hbWUoc3RyaW5nICRuYW1lKTogRHJvcFVzZXJPcHRpb25zIHt9Cn0KCmNsYXNzIFVzZXJNYW5hZ2VyCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VyKHN0cmluZyAkbmFtZSwgR2V0VXNlck9wdGlvbnMgJG9wdGlvbnMgPSBudWxsKTogVXNlckFuZE1ldGFkYXRhIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEFsbFVzZXJzKEdldEFsbFVzZXJzT3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBhcnJheSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1cHNlcnRVc2VyKFVzZXIgJHVzZXIsIFVwc2VydFVzZXJPcHRpb25zICRvcHRpb25zID0gbnVsbCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJvcFVzZXIoc3RyaW5nICRuYW1lLCBEcm9wVXNlck9wdGlvbnMgJG9wdGlvbnMgPSBudWxsKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSb2xlcygpOiBhcnJheSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRHcm91cChzdHJpbmcgJG5hbWUpOiBHcm91cCB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBbGxHcm91cHMoKTogYXJyYXkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gdXBzZXJ0R3JvdXAoR3JvdXAgJGdyb3VwKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkcm9wR3JvdXAoc3RyaW5nICRuYW1lKSB7fQp9CgovKioKICogQmluYXJ5Q29sbGVjdGlvbiBpcyBhbiBvYmplY3QgY29udGFpbmluZyBmdW5jdGlvbmFsaXR5IGZvciBwZXJmb3JtaW5nIEtleVZhbHVlIG9wZXJhdGlvbnMgYWdhaW5zdCB0aGUgc2VydmVyIHdpdGggYmluYXJ5IGRvY3VtZW50cy4KICovCmNsYXNzIEJpbmFyeUNvbGxlY3Rpb24KewogICAgLyoqCiAgICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogQXBwZW5kcyBhIHZhbHVlIHRvIGEgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgdGhlIGtleSBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIHRoZSB2YWx1ZSB0byBhcHBlbmQKICAgICAqIEBwYXJhbSBBcHBlbmRPcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbgogICAgICogQHJldHVybiBNdXRhdGlvblJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKHN0cmluZyAkaWQsIHN0cmluZyAkdmFsdWUsIEFwcGVuZE9wdGlvbnMgJG9wdGlvbnMgPSBudWxsKTogTXV0YXRpb25SZXN1bHQge30KCiAgICAvKioKICAgICAqIFByZXBlbmRzIGEgdmFsdWUgdG8gYSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCB0aGUga2V5IG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUgdGhlIHZhbHVlIHRvIHByZXBlbmQKICAgICAqIEBwYXJhbSBQcmVwZW5kT3B0aW9ucyAkb3B0aW9ucyB0aGUgb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBvcGVyYXRpb24KICAgICAqIEByZXR1cm4gTXV0YXRpb25SZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXBlbmQoc3RyaW5nICRpZCwgc3RyaW5nICR2YWx1ZSwgUHJlcGVuZE9wdGlvbnMgJG9wdGlvbnMgPSBudWxsKTogTXV0YXRpb25SZXN1bHQge30KCiAgICAvKioKICAgICAqIEluY3JlbWVudHMgYSBjb3VudGVyIGRvY3VtZW50IGJ5IGEgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgdGhlIGtleSBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBJbmNyZW1lbnRPcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbgogICAgICogQHJldHVybiBDb3VudGVyUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmNyZW1lbnQoc3RyaW5nICRpZCwgSW5jcmVtZW50T3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBDb3VudGVyUmVzdWx0IHt9CgogICAgLyoqCiAgICAgKiBEZWNyZW1lbnRzIGEgY291bnRlciBkb2N1bWVudCBieSBhIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIHRoZSBrZXkgb2YgdGhlIGRvY3VtZW50CiAgICAgKiBAcGFyYW0gRGVjcmVtZW50T3B0aW9ucyAkb3B0aW9ucyB0aGUgb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBvcGVyYXRpb24KICAgICAqIEByZXR1cm4gQ291bnRlclJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjcmVtZW50KHN0cmluZyAkaWQsIERlY3JlbWVudE9wdGlvbnMgJG9wdGlvbnMgPSBudWxsKTogQ291bnRlclJlc3VsdCB7fQp9CgovKioKICogQ29sbGVjdGlvbiBpcyBhbiBvYmplY3QgY29udGFpbmluZyBmdW5jdGlvbmFsaXR5IGZvciBwZXJmb3JtaW5nIEtleVZhbHVlIG9wZXJhdGlvbnMgYWdhaW5zdCB0aGUgc2VydmVyLgogKi8KY2xhc3MgQ29sbGVjdGlvbgp7CiAgICAvKioKICAgICAqIEdldCB0aGUgbmFtZSBvZiB0aGUgY29sbGVjdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEdldHMgYSBkb2N1bWVudCBmcm9tIHRoZSBzZXJ2ZXIuCiAgICAgKgogICAgICogVGhpcyBjYW4gdGFrZSAzIHBhdGhzLCBhIHN0YW5kYXJkIGZ1bGwgZG9jdW1lbnQgZmV0Y2gsIGEgc3ViZG9jdW1lbnQgZnVsbCBkb2N1bWVudCBmZXRjaCBhbHNvCiAgICAgKiBmZXRjaGluZyBkb2N1bWVudCBleHBpcnkgKHdoZW4gd2l0aEV4cGlyeSBpcyBzZXQpLCBvciBhIHN1YmRvY3VtZW50IGZldGNoICh3aGVuIHByb2plY3Rpb25zIGFyZQogICAgICogdXNlZCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgdGhlIGtleSBvZiB0aGUgZG9jdW1lbnQgdG8gZmV0Y2gKICAgICAqIEBwYXJhbSBHZXRPcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbgogICAgICogQHJldHVybiBHZXRSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldChzdHJpbmcgJGlkLCBHZXRPcHRpb25zICRvcHRpb25zID0gbnVsbCk6IEdldFJlc3VsdCB7fQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIGEgZG9jdW1lbnQgZXhpc3RzIG9uIHRoZSBzZXJ2ZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgdGhlIGtleSBvZiB0aGUgZG9jdW1lbnQgdG8gY2hlY2sgaWYgZXhpc3RzCiAgICAgKiBAcGFyYW0gRXhpc3RzT3B0aW9ucyAkb3B0aW9ucyB0aGUgb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBvcGVyYXRpb24KICAgICAqIEByZXR1cm4gRXhpc3RzUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGlzdHMoc3RyaW5nICRpZCwgRXhpc3RzT3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBFeGlzdHNSZXN1bHQge30KCiAgICAvKioKICAgICAqIEdldHMgYSBkb2N1bWVudCBmcm9tIHRoZSBzZXJ2ZXIsIGxvY2tpbmcgdGhlIGRvY3VtZW50IHNvIHRoYXQgbm8gb3RoZXIgcHJvY2Vzc2VzIGNhbgogICAgICogcGVyZm9ybSBtdXRhdGlvbnMgYWdhaW5zdCBpdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCB0aGUga2V5IG9mIHRoZSBkb2N1bWVudCB0byBnZXQKICAgICAqIEBwYXJhbSBpbnQgJGxvY2tUaW1lIHRoZSBsZW5ndGggb2YgdGltZSB0byBsb2NrIHRoZSBkb2N1bWVudCBpbiBtcwogICAgICogQHBhcmFtIEdldEFuZExvY2tPcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbgogICAgICogQHJldHVybiBHZXRSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFuZExvY2soc3RyaW5nICRpZCwgaW50ICRsb2NrVGltZSwgR2V0QW5kTG9ja09wdGlvbnMgJG9wdGlvbnMgPSBudWxsKTogR2V0UmVzdWx0IHt9CgogICAgLyoqCiAgICAgKiBHZXRzIGEgZG9jdW1lbnQgZnJvbSB0aGUgc2VydmVyIGFuZCBzaW11bHRhbmVvdXNseSB1cGRhdGVzIGl0cyBleHBpcnkgdGltZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCB0aGUga2V5IG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIGludCAkZXhwaXJ5IHRoZSBsZW5ndGggb2YgdGltZSB0byB1cGRhdGUgdGhlIGV4cGlyeSB0byBpbiBtcwogICAgICogQHBhcmFtIEdldEFuZFRvdWNoT3B0aW9ucyAkb3B0aW9ucyB0aGUgb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBvcGVyYXRpb24KICAgICAqIEByZXR1cm4gR2V0UmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBbmRUb3VjaChzdHJpbmcgJGlkLCBpbnQgJGV4cGlyeSwgR2V0QW5kVG91Y2hPcHRpb25zICRvcHRpb25zID0gbnVsbCk6IEdldFJlc3VsdCB7fQoKICAgIC8qKgogICAgICogR2V0cyBhIGRvY3VtZW50IGZyb20gYW55IHJlcGxpY2Egc2VydmVyIGluIHRoZSBjbHVzdGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIHRoZSBrZXkgb2YgdGhlIGRvY3VtZW50CiAgICAgKiBAcGFyYW0gR2V0QW55UmVwbGljYU9wdGlvbnMgJG9wdGlvbnMgdGhlIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uCiAgICAgKiBAcmV0dXJuIEdldFJlcGxpY2FSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFueVJlcGxpY2Eoc3RyaW5nICRpZCwgR2V0QW55UmVwbGljYU9wdGlvbnMgJG9wdGlvbnMgPSBudWxsKTogR2V0UmVwbGljYVJlc3VsdCB7fQoKICAgIC8qKgogICAgICogR2V0cyBhIGRvY3VtZW50IGZyb20gdGhlIGFjdGl2ZSBzZXJ2ZXIgYW5kIGFsbCByZXBsaWNhIHNlcnZlcnMgaW4gdGhlIGNsdXN0ZXIuCiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGRvY3VtZW50cywgb25lIHBlciBzZXJ2ZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgdGhlIGtleSBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBHZXRBbGxSZXBsaWNhc09wdGlvbnMgJG9wdGlvbnMgdGhlIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBbGxSZXBsaWNhcyhzdHJpbmcgJGlkLCBHZXRBbGxSZXBsaWNhc09wdGlvbnMgJG9wdGlvbnMgPSBudWxsKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBkb2N1bWVudCBpZiBpdCBkb2Vzbid0IGV4aXN0LCBvdGhlcndpc2UgdXBkYXRlcyBpdC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCB0aGUga2V5IG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSB0aGUgdmFsdWUgdG8gdXNlIGZvciB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBVcHNlcnRPcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbgogICAgICogQHJldHVybiBNdXRhdGlvblJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdXBzZXJ0KHN0cmluZyAkaWQsICR2YWx1ZSwgVXBzZXJ0T3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBNdXRhdGlvblJlc3VsdCB7fQoKICAgIC8qKgogICAgICogSW5zZXJ0cyBhIGRvY3VtZW50IGlmIGl0IGRvZXNuJ3QgZXhpc3QsIGVycm9ycyBpZiBpdCBkb2VzIGV4aXN0LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIHRoZSBrZXkgb2YgdGhlIGRvY3VtZW50CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIHRoZSB2YWx1ZSB0byB1c2UgZm9yIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIEluc2VydE9wdGlvbnMgJG9wdGlvbnMgdGhlIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uCiAgICAgKiBAcmV0dXJuIE11dGF0aW9uUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbnNlcnQoc3RyaW5nICRpZCwgJHZhbHVlLCBJbnNlcnRPcHRpb25zICRvcHRpb25zID0gbnVsbCk6IE11dGF0aW9uUmVzdWx0IHt9CgogICAgLyoqCiAgICAgKiBSZXBsYWNlcyBhIGRvY3VtZW50IGlmIGl0IGV4aXN0cywgZXJyb3JzIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgdGhlIGtleSBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgdGhlIHZhbHVlIHRvIHVzZSBmb3IgdGhlIGRvY3VtZW50CiAgICAgKiBAcGFyYW0gUmVwbGFjZU9wdGlvbnMgJG9wdGlvbnMgdGhlIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uCiAgICAgKiBAcmV0dXJuIE11dGF0aW9uUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlKHN0cmluZyAkaWQsICR2YWx1ZSwgUmVwbGFjZU9wdGlvbnMgJG9wdGlvbnMgPSBudWxsKTogTXV0YXRpb25SZXN1bHQge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCB0aGUga2V5IG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIFJlbW92ZU9wdGlvbnMgJG9wdGlvbnMgdGhlIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uCiAgICAgKiBAcmV0dXJuIE11dGF0aW9uUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoc3RyaW5nICRpZCwgUmVtb3ZlT3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBNdXRhdGlvblJlc3VsdCB7fQoKICAgIC8qKgogICAgICogVW5sb2NrcyBhIGRvY3VtZW50IHdoaWNoIHdhcyBsb2NrZWQgdXNpbmcgZ2V0QW5kTG9jay4gVGhpcyBmcmVlcyB0aGUgZG9jdW1lbnQgdG8gYmUKICAgICAqIG1vZGlmaWVkIGJ5IG90aGVyIHByb2Nlc3Nlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCB0aGUga2V5IG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIHN0cmluZyAkY2FzIHRoZSBjdXJyZW50IGNhcyB2YWx1ZSBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBVbmxvY2tPcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbgogICAgICogQHJldHVybiBSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVubG9jayhzdHJpbmcgJGlkLCBzdHJpbmcgJGNhcywgVW5sb2NrT3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBSZXN1bHQge30KCiAgICAvKioKICAgICAqIFRvdWNoZXMgYSBkb2N1bWVudCwgc2V0dGluZyBhIG5ldyBleHBpcnkgdGltZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCB0aGUga2V5IG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIGludCAkZXhwaXJ5IHRoZSBleHBpcnkgdGltZSBmb3IgdGhlIGRvY3VtZW50IGluIG1zCiAgICAgKiBAcGFyYW0gVG91Y2hPcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbgogICAgICogQHJldHVybiBNdXRhdGlvblJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG91Y2goc3RyaW5nICRpZCwgaW50ICRleHBpcnksIFRvdWNoT3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBNdXRhdGlvblJlc3VsdCB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgYSBzZXQgb2Ygc3ViZG9jdW1lbnQgbG9va3VwIG9wZXJhdGlvbnMgYWdhaW5zdCB0aGUgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgdGhlIGtleSBvZiB0aGUgZG9jdW1lbnQKICAgICAqIEBwYXJhbSBhcnJheSAkc3BlY3MgdGhlIExvb2t1cEluU3BlY3MgdG8gcGVyZm9ybSBhZ2FpbnN0IHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIExvb2t1cEluT3B0aW9ucyAkb3B0aW9ucyB0aGUgb3B0aW9ucyB0byB1c2UgZm9yIHRoZSBvcGVyYXRpb24KICAgICAqIEByZXR1cm4gTG9va3VwSW5SZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvb2t1cEluKHN0cmluZyAkaWQsIGFycmF5ICRzcGVjcywgTG9va3VwSW5PcHRpb25zICRvcHRpb25zID0gbnVsbCk6IExvb2t1cEluUmVzdWx0IHt9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtcyBhIHNldCBvZiBzdWJkb2N1bWVudCBsb29rdXAgb3BlcmF0aW9ucyBhZ2FpbnN0IHRoZSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCB0aGUga2V5IG9mIHRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIGFycmF5ICRzcGVjcyB0aGUgTXV0YXRlSW5TcGVjcyB0byBwZXJmb3JtIGFnYWluc3QgdGhlIGRvY3VtZW50CiAgICAgKiBAcGFyYW0gTXV0YXRlSW5PcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbgogICAgICogQHJldHVybiBNdXRhdGVJblJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbXV0YXRlSW4oc3RyaW5nICRpZCwgYXJyYXkgJHNwZWNzLCBNdXRhdGVJbk9wdGlvbnMgJG9wdGlvbnMgPSBudWxsKTogTXV0YXRlSW5SZXN1bHQge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIGdyb3VwIG9mIGRvY3VtZW50cy4gSWYgdGhlIGRvY3VtZW50IGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIG5vdCByYWlzZSBhbiBleGNlcHRpb24sIGJ1dCByYXRoZXIgZmlsbAogICAgICogbm9uLW51bGwgdmFsdWUgaW4gZXJyb3IoKSBwcm9wZXJ0eSBvZiB0aGUgY29ycmVzcG9uZGluZyByZXN1bHQgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkaWRzIGFycmF5IG9mIElEcywgb3JnYW5pemVkIGxpa2UgdGhpcyBbImtleTEiLCAia2V5MiIsIC4uLl0KICAgICAqIEBwYXJhbSBSZW1vdmVPcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbgogICAgICogQHJldHVybiBhcnJheSBhcnJheSBvZiBHZXRSZXN1bHQsIG9uZSBmb3IgZWFjaCBvZiB0aGUgZW50cmllcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TXVsdGkoYXJyYXkgJGlkcywgUmVtb3ZlT3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBhIGdyb3VwIG9mIGRvY3VtZW50cy4gSWYgc2Vjb25kIGVsZW1lbnQgb2YgdGhlIGVudHJ5IChDQVMpIGlzIG51bGwsIHRoZW4gdGhlIG9wZXJhdGlvbiB3aWxsCiAgICAgKiByZW1vdmUgdGhlIGRvY3VtZW50IHVuY29uZGl0aW9uYWxseS4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGVudHJpZXMgYXJyYXkgb2YgYXJyYXlzLCBvcmdhbml6ZWQgbGlrZSB0aGlzIFtbImtleTEiLCAiZW5jb2RlZENhczEiXSwgWyJrZXkyIiwgLCAiZW5jb2RlZENhczIiXSwgLi4uXSBvciBbImtleTEiLCAia2V5MiIsIC4uLl0KICAgICAqIEBwYXJhbSBSZW1vdmVPcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSBmb3IgdGhlIG9wZXJhdGlvbgogICAgICogQHJldHVybiBhcnJheSBhcnJheSBvZiBNdXRhdGlvblJlc3VsdCwgb25lIGZvciBlYWNoIG9mIHRoZSBlbnRyaWVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVNdWx0aShhcnJheSAkZW50cmllcywgUmVtb3ZlT3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIGdyb3VwIG9mIGRvY3VtZW50cyBpZiB0aGV5IGRvbid0IGV4aXN0LCBvdGhlcndpc2UgdXBkYXRlcyB0aGVtLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkZW50cmllcyBhcnJheSBvZiBhcnJheXMsIG9yZ2FuaXplZCBsaWtlIHRoaXMgW1sia2V5MSIsICR2YWx1ZTFdLCBbImtleTIiLCAkdmFsdWUyXSwgLi4uXQogICAgICogQHBhcmFtIFVwc2VydE9wdGlvbnMgJG9wdGlvbnMgdGhlIG9wdGlvbnMgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uCiAgICAgKiBAcmV0dXJuIGFycmF5IGFycmF5IG9mIE11dGF0aW9uUmVzdWx0LCBvbmUgZm9yIGVhY2ggb2YgdGhlIGVudHJpZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVwc2VydE11bHRpKGFycmF5ICRlbnRyaWVzLCBVcHNlcnRPcHRpb25zICRvcHRpb25zID0gbnVsbCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgQmluYXJ5Q29sbGVjdGlvbiBvYmplY3QgZm9yIHVzZSB3aXRoIGJpbmFyeSB0eXBlIGRvY3VtZW50cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIEJpbmFyeUNvbGxlY3Rpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJpbmFyeSgpOiBCaW5hcnlDb2xsZWN0aW9uIHt9Cn0KCi8qKgogKiBTY29wZSBpcyBhbiBvYmplY3QgZm9yIHByb3ZpZGluZyBhY2Nlc3MgdG8gY29sbGVjdGlvbnMuCiAqLwpjbGFzcyBTY29wZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQnVja2V0ICRidWNrZXQsIHN0cmluZyAkbmFtZSkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHNjb3BlLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIG5ldyBDb2xsZWN0aW9uIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbGxlY3Rpb24gc3BlY2lmaWVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgdGhlIG5hbWUgb2YgdGhlIGNvbGxlY3Rpb24KICAgICAqIEByZXR1cm4gQ29sbGVjdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29sbGVjdGlvbihzdHJpbmcgJG5hbWUpOiBDb2xsZWN0aW9uIHt9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyBhIE4xUUwgcXVlcnkgYWdhaW5zdCB0aGUgY2x1c3RlciB3aXRoIHNjb3BlTmFtZSBzZXQgaW1wbGljaXRseS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdGF0ZW1lbnQgdGhlIE4xUUwgcXVlcnkgc3RhdGVtZW50IHRvIGV4ZWN1dGUKICAgICAqIEBwYXJhbSBRdWVyeU9wdGlvbnMgJG9wdGlvbnMgdGhlIG9wdGlvbnMgdG8gdXNlIHdoZW4gZXhlY3V0aW5nIHRoZSBxdWVyeQogICAgICogQHJldHVybiBRdWVyeVJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVlcnkoc3RyaW5nICRzdGF0ZW1lbnQsIFF1ZXJ5T3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBRdWVyeVJlc3VsdCB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZXMgYW4gYW5hbHl0aWNzIHF1ZXJ5IGFnYWluc3QgdGhlIGNsdXN0ZXIgd2l0aCBzY29wZU5hbWUgc2V0IGltcGxpY2l0bHkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RhdGVtZW50IHRoZSBhbmFseXRpY3MgcXVlcnkgc3RhdGVtZW50IHRvIGV4ZWN1dGUKICAgICAqIEBwYXJhbSBBbmFseXRpY3NPcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSB3aGVuIGV4ZWN1dGluZyB0aGUgcXVlcnkKICAgICAqIEByZXR1cm4gQW5hbHl0aWNzUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbmFseXRpY3NRdWVyeShzdHJpbmcgJHN0YXRlbWVudCwgQW5hbHl0aWNzT3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBBbmFseXRpY3NSZXN1bHQge30KfQoKY2xhc3MgU2NvcGVTcGVjCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb2xsZWN0aW9ucygpOiBhcnJheSB7fQp9CgpjbGFzcyBDb2xsZWN0aW9uU3BlYwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2NvcGVOYW1lKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXROYW1lKHN0cmluZyAkbmFtZSk6IENvbGxlY3Rpb25TcGVjIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFNjb3BlTmFtZShzdHJpbmcgJG5hbWUpOiBDb2xsZWN0aW9uU3BlYyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNYXhFeHBpcnkoaW50ICRtcyk6IENvbGxlY3Rpb25TcGVjIHt9Cn0KCmNsYXNzIENvbGxlY3Rpb25NYW5hZ2VyCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTY29wZShzdHJpbmcgJG5hbWUpOiBTY29wZVNwZWMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsU2NvcGVzKCk6IGFycmF5IHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVNjb3BlKHN0cmluZyAkbmFtZSkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJvcFNjb3BlKHN0cmluZyAkbmFtZSkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlQ29sbGVjdGlvbihDb2xsZWN0aW9uU3BlYyAkY29sbGVjdGlvbikge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZHJvcENvbGxlY3Rpb24oQ29sbGVjdGlvblNwZWMgJGNvbGxlY3Rpb24pIHt9Cn0KCi8qKgogKiBCdWNrZXQgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgZnVuY3Rpb25hbGl0eSBmb3IgcGVyZm9ybWluZyBidWNrZXQgbGV2ZWwgb3BlcmF0aW9ucwogKiBhZ2FpbnN0IGEgY2x1c3RlciBhbmQgZm9yIGFjY2VzcyB0byBzY29wZXMgYW5kIGNvbGxlY3Rpb25zLgogKi8KY2xhc3MgQnVja2V0CnsKICAgIC8qKgogICAgICogUmV0dXJucyBhIG5ldyBTY29wZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBkZWZhdWx0IHNjb3BlLgogICAgICoKICAgICAqIEByZXR1cm4gU2NvcGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlZmF1bHRTY29wZSgpOiBTY29wZSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIG5ldyBDb2xsZWN0aW9uIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGRlZmF1bHQgY29sbGVjdGlvbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIENvbGxlY3Rpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlZmF1bHRDb2xsZWN0aW9uKCk6IENvbGxlY3Rpb24ge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBuZXcgU2NvcGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gc2NvcGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSB0aGUgbmFtZSBvZiB0aGUgc2NvcGUKICAgICAqIEByZXR1cm4gU2NvcGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNjb3BlKHN0cmluZyAkbmFtZSk6IFNjb3BlIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IHRyYW5zY29kZXIgdG8gYmUgdXNlZCB3aGVuIGZldGNoaW5nIG9yIHNlbmRpbmcgZGF0YS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGVuY29kZXIgdGhlIGVuY29kZXIgdG8gdXNlIHRvIGVuY29kZSBkYXRhIHdoZW4gc2VuZGluZyBkYXRhIHRvIHRoZSBzZXJ2ZXIKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkZGVjb2RlciB0aGUgZGVjb2RlciB0byB1c2UgdG8gZGVjb2RlIGRhdGEgd2hlbiByZXRyaWV2aW5nIGRhdGEgZnJvbSB0aGUgc2VydmVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUcmFuc2NvZGVyKGNhbGxhYmxlICRlbmNvZGVyLCBjYWxsYWJsZSAkZGVjb2Rlcikge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIEJ1Y2tldC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEV4ZWN1dGVzIGEgdmlldyBxdWVyeSBhZ2FpbnN0IHRoZSBjbHVzdGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc2lnbkRvYyB0aGUgZGVzaWduIGRvY3VtZW50IHRvIHVzZSBmb3IgdGhlIHF1ZXJ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2aWV3TmFtZSB0aGUgdmlldyB0byB1c2UgZm9yIHRoZSBxdWVyeQogICAgICogQHBhcmFtIFZpZXdPcHRpb25zICRvcHRpb25zIHRoZSBvcHRpb25zIHRvIHVzZSB3aGVuIGV4ZWN1dGluZyB0aGUgcXVlcnkKICAgICAqIEByZXR1cm4gVmlld1Jlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmlld1F1ZXJ5KHN0cmluZyAkZGVzaWduRG9jLCBzdHJpbmcgJHZpZXdOYW1lLCBWaWV3T3B0aW9ucyAkb3B0aW9ucyA9IG51bGwpOiBWaWV3UmVzdWx0IHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IENvbGxlY3Rpb25NYW5hZ2VyIG9iamVjdCBmb3IgbWFuYWdpbmcgY29sbGVjdGlvbnMgYW5kIHNjb3Blcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIENvbGxlY3Rpb25NYW5hZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb2xsZWN0aW9ucygpOiBDb2xsZWN0aW9uTWFuYWdlciB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBWaWV3SW5kZXhNYW5hZ2VyIG9iamVjdCBmb3IgbWFuYWdpbmcgdmlld3MgYW5kIGRlc2lnbiBkb2N1bWVudHMuCiAgICAgKgogICAgICogQHJldHVybiBWaWV3SW5kZXhNYW5hZ2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2aWV3SW5kZXhlcygpOiBWaWV3SW5kZXhNYW5hZ2VyIHt9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyBhIHBpbmcgZm9yIGVhY2ggc2VydmljZSBhZ2FpbnN0IGVhY2ggbm9kZSBpbiB0aGUgY2x1c3Rlci4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgZGV0ZXJtaW5pbmcKICAgICAqIHRoZSBjdXJyZW50IGhlYWx0aCBvZiB0aGUgY2x1c3Rlci4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHNlcnZpY2VzIHRoZSBzZXJ2aWNlcyB0byBwaW5nIGFnYWluc3QKICAgICAqIEBwYXJhbSBtaXhlZCAkcmVwb3J0SWQgYSBuYW1lIHdoaWNoIHdpbGwgYmUgaW5jbHVkZWQgd2l0aGluIHRoZSBwaW5nIHJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGluZygkc2VydmljZXMsICRyZXBvcnRJZCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgZGlhZ25vc3RpY3MgaW5mb3JtYXRpb24gYWJvdXQgY29ubmVjdGlvbnMgdGhhdCB0aGUgU0RLIGhhcyB0byB0aGUgY2x1c3Rlci4gVGhpcyBkb2VzIG5vdCBwZXJmb3JtCiAgICAgKiBhbnkgb3BlcmF0aW9ucy4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlcG9ydElkIGEgbmFtZSB3aGljaCB3aWxsIGJlIGluY2x1ZGVkIHdpdGhpbiB0aGUgcGluZyByZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpYWdub3N0aWNzKCRyZXBvcnRJZCkge30KfQoKY2xhc3MgVmlldwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFwKCk6IHN0cmluZyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWR1Y2UoKTogc3RyaW5nIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldE5hbWUoc3RyaW5nICRuYW1lKTogVmlldyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNYXAoc3RyaW5nICRtYXBKc0NvZGUpOiBWaWV3IHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFJlZHVjZShzdHJpbmcgJHJlZHVjZUpzQ29kZSk6IFZpZXcge30KfQoKY2xhc3MgRGVzaWduRG9jdW1lbnQKewogICAgcHVibGljIGZ1bmN0aW9uIG5hbWUoKTogc3RyaW5nIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHZpZXdzKCk6IGFycmF5IHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldE5hbWUoc3RyaW5nICRuYW1lKTogRGVzaWduRG9jdW1lbnQge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Vmlld3MoYXJyYXkgJHZpZXdzKTogRGVzaWduRG9jdW1lbnQge30KfQoKY2xhc3MgVmlld0luZGV4TWFuYWdlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWxsRGVzaWduRG9jdW1lbnRzKCk6IGFycmF5IHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldERlc2lnbkRvY3VtZW50KHN0cmluZyAkbmFtZSk6IERlc2lnbkRvY3VtZW50IHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGRyb3BEZXNpZ25Eb2N1bWVudChzdHJpbmcgJG5hbWUpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHVwc2VydERlc2lnbkRvY3VtZW50KERlc2lnbkRvY3VtZW50ICRkb2N1bWVudCkge30KfQoKLyoqCiAqIE11dGF0aW9uU3RhdGUgaXMgYW4gb2JqZWN0IHdoaWNoIGhvbGRzIGFuZCBhZ2dyZWdhdGVzIG11dGF0aW9uIHRva2VucyBhY3Jvc3Mgb3BlcmF0aW9ucy4KICovCmNsYXNzIE11dGF0aW9uU3RhdGUKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEFkZHMgdGhlIHJlc3VsdCBvZiBhIG11dGF0aW9uIG9wZXJhdGlvbiB0byB0aGlzIG11dGF0aW9uIHN0YXRlLgogICAgICoKICAgICAqIEBwYXJhbSBNdXRhdGlvblJlc3VsdCAkc291cmNlIHRoZSByZXN1bHQgb2JqZWN0IHRvIGFkZCB0byB0aGlzIHN0YXRlCiAgICAgKiBAcmV0dXJuIE11dGF0aW9uU3RhdGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZChNdXRhdGlvblJlc3VsdCAkc291cmNlKTogTXV0YXRpb25TdGF0ZSB7fQp9CgpjbGFzcyBBbmFseXRpY3NPcHRpb25zCnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0aW1lb3V0KGludCAkYXJnKTogQW5hbHl0aWNzT3B0aW9ucyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lZFBhcmFtZXRlcnMoYXJyYXkgJHBhaXJzKTogQW5hbHl0aWNzT3B0aW9ucyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwb3NpdGlvbmFsUGFyYW1ldGVycyhhcnJheSAkYXJncyk6IEFuYWx5dGljc09wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmF3KHN0cmluZyAka2V5LCAkdmFsdWUpOiBBbmFseXRpY3NPcHRpb25zIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGNsaWVudENvbnRleHRJZChzdHJpbmcgJHZhbHVlKTogQW5hbHl0aWNzT3B0aW9ucyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwcmlvcml0eShib29sICR1cmdlbnQpOiBBbmFseXRpY3NPcHRpb25zIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRvbmx5KGJvb2wgJGFyZyk6IEFuYWx5dGljc09wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2NhbkNvbnNpc3RlbmN5KHN0cmluZyAkYXJnKTogQW5hbHl0aWNzT3B0aW9ucyB7fQp9CgovKioKICogTG9va3VwSW5TcGVjIGlzIGFuIGludGVyZmFjZSBmb3IgcHJvdmlkaW5nIHN1YmRvY3VtZW50IGxvb2t1cCBvcGVyYXRpb25zLgogKi8KaW50ZXJmYWNlIExvb2t1cEluU3BlYyB7fQoKLyoqCiAqIEluZGljYXRlcyBhIHBhdGggZm9yIGEgdmFsdWUgdG8gYmUgcmV0cmlldmVkIGZyb20gYSBkb2N1bWVudC4KICovCmNsYXNzIExvb2t1cEdldFNwZWMgaW1wbGVtZW50cyBMb29rdXBJblNwZWMKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkcGF0aCwgYm9vbCAkaXNYYXR0ciA9IGZhbHNlKSB7fQp9CgovKioKICogSW5kaWNhdGVzIHRvIHJldHJpZXZlIHRoZSBjb3VudCBvZiBhcnJheSBpdGVtcyBvciBkaWN0aW9uYXJ5IGtleXMgd2l0aGluIGEgcGF0aCBpbiBhIGRvY3VtZW50LgogKi8KY2xhc3MgTG9va3VwQ291bnRTcGVjIGltcGxlbWVudHMgTG9va3VwSW5TcGVjCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHBhdGgsIGJvb2wgJGlzWGF0dHIgPSBmYWxzZSkge30KfQoKLyoqCiAqIEluZGljYXRlcyB0byBjaGVjayBpZiBhIHBhdGggZXhpc3RzIGluIGEgZG9jdW1lbnQuCiAqLwpjbGFzcyBMb29rdXBFeGlzdHNTcGVjIGltcGxlbWVudHMgTG9va3VwSW5TcGVjCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHBhdGgsIGJvb2wgJGlzWGF0dHIgPSBmYWxzZSkge30KfQoKLyoqCiAqIEluZGljYXRlcyB0byByZXRyZWl2ZSBhIHdob2xlIGRvY3VtZW50LgogKi8KY2xhc3MgTG9va3VwR2V0RnVsbFNwZWMgaW1wbGVtZW50cyBMb29rdXBJblNwZWMKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KfQoKLyoqCiAqIE11dGF0ZUluU3BlYyBpcyBhbiBpbnRlcmZhY2UgZm9yIHByb3ZpZGluZyBzdWJkb2N1bWVudCBtdXRhdGlvbiBvcGVyYXRpb25zLgogKi8KaW50ZXJmYWNlIE11dGF0ZUluU3BlYyB7fQoKLyoqCiAqIEluZGljYXRlcyB0byBpbnNlcnQgYSB2YWx1ZSBhdCBhIHBhdGggaW4gYSBkb2N1bWVudC4KICovCmNsYXNzIE11dGF0ZUluc2VydFNwZWMgaW1wbGVtZW50cyBNdXRhdGVJblNwZWMKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkcGF0aCwgJHZhbHVlLCBib29sICRpc1hhdHRyLCBib29sICRjcmVhdGVQYXRoLCBib29sICRleHBhbmRNYWNyb3MpIHt9Cn0KCi8qKgogKiBJbmRpY2F0ZXMgdG8gcmVwbGFjZSBhIHZhbHVlIGF0IGEgcGF0aCBpZiBpdCBkb2Vzbid0IGV4aXN0LCBvdGhlcndpc2UgY3JlYXRlIHRoZSBwYXRoLCBpbiBhIGRvY3VtZW50LgogKi8KY2xhc3MgTXV0YXRlVXBzZXJ0U3BlYyBpbXBsZW1lbnRzIE11dGF0ZUluU3BlYwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRwYXRoLCAkdmFsdWUsIGJvb2wgJGlzWGF0dHIsIGJvb2wgJGNyZWF0ZVBhdGgsIGJvb2wgJGV4cGFuZE1hY3Jvcykge30KfQoKLyoqCiAqIEluZGljYXRlcyB0byByZXBsYWNlIGEgdmFsdWUgYXQgYSBwYXRoIGlmIGl0IGRvZXNuJ3QgZXhpc3QgaW4gYSBkb2N1bWVudC4KICovCmNsYXNzIE11dGF0ZVJlcGxhY2VTcGVjIGltcGxlbWVudHMgTXV0YXRlSW5TcGVjCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHBhdGgsICR2YWx1ZSwgYm9vbCAkaXNYYXR0cikge30KfQoKLyoqCiAqIEluZGljYXRlcyB0byByZW1vdmUgYSB2YWx1ZSBhdCBhIHBhdGggaW4gYSBkb2N1bWVudC4KICovCmNsYXNzIE11dGF0ZVJlbW92ZVNwZWMgaW1wbGVtZW50cyBNdXRhdGVJblNwZWMKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkcGF0aCwgYm9vbCAkaXNYYXR0cikge30KfQoKLyoqCiAqIEluZGljYXRlcyB0byBhcHBlbmQgYSB2YWx1ZSB0byBhbiBhcnJheSBhdCBhIHBhdGggaW4gYSBkb2N1bWVudC4KICovCmNsYXNzIE11dGF0ZUFycmF5QXBwZW5kU3BlYyBpbXBsZW1lbnRzIE11dGF0ZUluU3BlYwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRwYXRoLCBhcnJheSAkdmFsdWVzLCBib29sICRpc1hhdHRyLCBib29sICRjcmVhdGVQYXRoLCBib29sICRleHBhbmRNYWNyb3MpIHt9Cn0KCi8qKgogKiBJbmRpY2F0ZXMgdG8gcHJlcGVuZCBhIHZhbHVlIHRvIGFuIGFycmF5IGF0IGEgcGF0aCBpbiBhIGRvY3VtZW50LgogKi8KY2xhc3MgTXV0YXRlQXJyYXlQcmVwZW5kU3BlYyBpbXBsZW1lbnRzIE11dGF0ZUluU3BlYwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRwYXRoLCBhcnJheSAkdmFsdWVzLCBib29sICRpc1hhdHRyLCBib29sICRjcmVhdGVQYXRoLCBib29sICRleHBhbmRNYWNyb3MpIHt9Cn0KCi8qKgogKiBJbmRpY2F0ZXMgdG8gaW5zZXJ0IGEgdmFsdWUgaW50byBhbiBhcnJheSBhdCBhIHBhdGggaW4gYSBkb2N1bWVudC4KICovCmNsYXNzIE11dGF0ZUFycmF5SW5zZXJ0U3BlYyBpbXBsZW1lbnRzIE11dGF0ZUluU3BlYwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRwYXRoLCBhcnJheSAkdmFsdWVzLCBib29sICRpc1hhdHRyLCBib29sICRjcmVhdGVQYXRoLCBib29sICRleHBhbmRNYWNyb3MpIHt9Cn0KCi8qKgogKiBJbmRpY2F0ZXMgdG8gYWRkIGEgdmFsdWUgaW50byBhbiBhcnJheSBhdCBhIHBhdGggaW4gYSBkb2N1bWVudCBzbyBsb25nIGFzIHRoYXQgdmFsdWUgZG9lcyBub3QgYWxyZWFkeSBleGlzdAogKiBpbiB0aGUgYXJyYXkuCiAqLwpjbGFzcyBNdXRhdGVBcnJheUFkZFVuaXF1ZVNwZWMgaW1wbGVtZW50cyBNdXRhdGVJblNwZWMKewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkcGF0aCwgJHZhbHVlLCBib29sICRpc1hhdHRyLCBib29sICRjcmVhdGVQYXRoLCBib29sICRleHBhbmRNYWNyb3MpIHt9Cn0KCi8qKgogKiBJbmRpY2F0ZXMgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBhIGNvdW50ZXIgdmFsdWUgYXQgYSBwYXRoIGluIGEgZG9jdW1lbnQuCiAqLwpjbGFzcyBNdXRhdGVDb3VudGVyU3BlYyBpbXBsZW1lbnRzIE11dGF0ZUluU3BlYwp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRwYXRoLCBpbnQgJGRlbHRhLCBib29sICRpc1hhdHRyLCBib29sICRjcmVhdGVQYXRoKSB7fQp9CgpjbGFzcyBTZWFyY2hPcHRpb25zIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBzZXJ2ZXIgc2lkZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcwogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG1zIHRoZSBzZXJ2ZXIgc2lkZSB0aW1lb3V0IHRvIGFwcGx5CiAgICAgKiBAcmV0dXJuIFNlYXJjaE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRtcyk6IFNlYXJjaE9wdGlvbnMge30KCiAgICAvKioKICAgICAqIEFkZCBhIGxpbWl0IHRvIHRoZSBxdWVyeSBvbiB0aGUgbnVtYmVyIG9mIGhpdHMgaXQgY2FuIHJldHVybgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxpbWl0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBoaXRzIHRvIHJldHVybgogICAgICogQHJldHVybiBTZWFyY2hPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaW1pdChpbnQgJGxpbWl0KTogU2VhcmNoT3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBudW1iZXIgb2YgaGl0cyB0byBza2lwIChlZy4gZm9yIHBhZ2luYXRpb24pLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHNraXAgdGhlIG51bWJlciBvZiByZXN1bHRzIHRvIHNraXAKICAgICAqIEByZXR1cm4gU2VhcmNoT3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2tpcChpbnQgJHNraXApOiBTZWFyY2hPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBBY3RpdmF0ZXMgdGhlIGV4cGxhbmF0aW9uIG9mIGVhY2ggcmVzdWx0IGhpdCBpbiB0aGUgcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZXhwbGFpbgogICAgICogQHJldHVybiBTZWFyY2hPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleHBsYWluKGJvb2wgJGV4cGxhaW4pOiBTZWFyY2hPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHNlcnZlciB3aWxsIG5vdCBwZXJmb3JtIGFueSBzY29yaW5nIG9uIHRoZSBoaXRzCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGRpc2FibGVkCiAgICAgKiBAcmV0dXJuIFNlYXJjaE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc2FibGVTY29yaW5nKGJvb2wgJGRpc2FibGVkKTogU2VhcmNoT3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgY29uc2lzdGVuY3kgdG8gY29uc2lkZXIgZm9yIHRoaXMgRlRTIHF1ZXJ5IHRvIEFUX1BMVVMgYW5kCiAgICAgKiB1c2VzIHRoZSBNdXRhdGlvblN0YXRlIHRvIHBhcmFtZXRlcml6ZSB0aGUgY29uc2lzdGVuY3kuCiAgICAgKgogICAgICogVGhpcyByZXBsYWNlcyBhbnkgY29uc2lzdGVuY3kgdHVuaW5nIHByZXZpb3VzbHkgc2V0LgogICAgICoKICAgICAqIEBwYXJhbSBNdXRhdGlvblN0YXRlICRzdGF0ZSB0aGUgbXV0YXRpb24gc3RhdGUgaW5mb3JtYXRpb24gdG8gd29yayB3aXRoCiAgICAgKiBAcmV0dXJuIFNlYXJjaE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnNpc3RlbnRXaXRoKHN0cmluZyAkaW5kZXgsIE11dGF0aW9uU3RhdGUgJHN0YXRlKTogU2VhcmNoT3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogQ29uZmlndXJlcyB0aGUgbGlzdCBvZiBmaWVsZHMgZm9yIHdoaWNoIHRoZSB3aG9sZSB2YWx1ZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHJlc3BvbnNlLgogICAgICoKICAgICAqIElmIGVtcHR5LCBubyBmaWVsZCB2YWx1ZXMgYXJlIGluY2x1ZGVkLiBUaGlzIGRyaXZlcyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBmaWVsZHMgaW4gZWFjaCBoaXQuCiAgICAgKiBOb3RlIHRoYXQgdG8gYmUgaGlnaGxpZ2h0ZWQsIHRoZSBmaWVsZHMgbXVzdCBiZSBzdG9yZWQgaW4gdGhlIEZUUyBpbmRleC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJGZpZWxkcwogICAgICogQHJldHVybiBTZWFyY2hPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWVsZHMoYXJyYXkgJGZpZWxkcyk6IFNlYXJjaE9wdGlvbnMge30KCiAgICAvKioKICAgICAqIEFkZHMgb25lIFNlYXJjaEZhY2V0LXMgdG8gdGhlIHF1ZXJ5CiAgICAgKgogICAgICogVGhpcyBpcyBhbiBhZGRpdGl2ZSBvcGVyYXRpb24gKHRoZSBnaXZlbiBmYWNldHMgYXJlIGFkZGVkIHRvIGFueSBmYWNldCBwcmV2aW91c2x5IHJlcXVlc3RlZCksCiAgICAgKiBidXQgaWYgYW4gZXhpc3RpbmcgZmFjZXQgaGFzIHRoZSBzYW1lIG5hbWUgaXQgd2lsbCBiZSByZXBsYWNlZC4KICAgICAqCiAgICAgKiBOb3RlIHRoYXQgdG8gYmUgZmFjZXRlZCwgYSBmaWVsZCdzIHZhbHVlIG11c3QgYmUgc3RvcmVkIGluIHRoZSBGVFMgaW5kZXguCiAgICAgKgogICAgICogQHBhcmFtIFNlYXJjaEZhY2V0W10gJGZhY2V0cwogICAgICogQHJldHVybiBTZWFyY2hPcHRpb25zCiAgICAgKgogICAgICogQHNlZSBcU2VhcmNoRmFjZXQKICAgICAqIEBzZWUgXFRlcm1TZWFyY2hGYWNldAogICAgICogQHNlZSBcTnVtZXJpY1JhbmdlU2VhcmNoRmFjZXQKICAgICAqIEBzZWUgXERhdGVSYW5nZVNlYXJjaEZhY2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmYWNldHMoYXJyYXkgJGZhY2V0cyk6IFNlYXJjaE9wdGlvbnMge30KCiAgICAvKioKICAgICAqIENvbmZpZ3VyZXMgdGhlIGxpc3Qgb2YgZmllbGRzIChpbmNsdWRpbmcgc3BlY2lhbCBmaWVsZHMpIHdoaWNoIGFyZSB1c2VkIGZvciBzb3J0aW5nIHB1cnBvc2VzLgogICAgICogSWYgZW1wdHksIHRoZSBkZWZhdWx0IHNvcnRpbmcgKGRlc2NlbmRpbmcgYnkgc2NvcmUpIGlzIHVzZWQgYnkgdGhlIHNlcnZlci4KICAgICAqCiAgICAgKiBUaGUgbGlzdCBvZiBzb3J0IGZpZWxkcyBjYW4gaW5jbHVkZSBhY3R1YWwgZmllbGRzIChsaWtlICJmaXJzdG5hbWUiIGJ1dCB0aGVuIHRoZXkgbXVzdCBiZSBzdG9yZWQgaW4gdGhlCiAgICAgKiBpbmRleCwgY29uZmlndXJlZCBpbiB0aGUgc2VydmVyIHNpZGUgbWFwcGluZykuIEZpZWxkcyBwcm92aWRlZCBmaXJzdCBhcmUgY29uc2lkZXJlZCBmaXJzdCBhbmQgaW4gYSAidGllIiBjYXNlCiAgICAgKiB0aGUgbmV4dCBzb3J0IGZpZWxkIGlzIGNvbnNpZGVyZWQuIFNvIHNvcnRpbmcgYnkgImZpcnN0bmFtZSIgYW5kIHRoZW4gImxhc3RuYW1lIiB3aWxsIGZpcnN0IHNvcnQgYXNjZW5kaW5nIGJ5CiAgICAgKiB0aGUgZmlyc3RuYW1lIGFuZCBpZiB0aGUgbmFtZXMgYXJlIGVxdWFsIHRoZW4gc29ydCBhc2NlbmRpbmcgYnkgbGFzdG5hbWUuIFNwZWNpYWwgZmllbGRzIGxpa2UgIl9pZCIgYW5kCiAgICAgKiAiX3Njb3JlIiBjYW4gYWxzbyBiZSB1c2VkLiBJZiBwcmVmaXhlZCB3aXRoICItIiB0aGUgc29ydCBvcmRlciBpcyBzZXQgdG8gZGVzY2VuZGluZy4KICAgICAqCiAgICAgKiBJZiBubyBzb3J0IGlzIHByb3ZpZGVkLCBpdCBpcyBlcXVhbCB0byBzb3J0KCItX3Njb3JlIiksIHNpbmNlIHRoZSBzZXJ2ZXIgd2lsbCBzb3J0IGl0IGJ5IHNjb3JlIGluIGRlc2NlbmRpbmcKICAgICAqIG9yZGVyLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkc3BlY3Mgc29ydCB0aGUgZmllbGRzIHRoYXQgc2hvdWxkIHRha2UgcGFydCBpbiB0aGUgc29ydGluZy4KICAgICAqIEByZXR1cm4gU2VhcmNoT3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc29ydChhcnJheSAkc3BlY3MpOiBTZWFyY2hPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBDb25maWd1cmVzIHRoZSBoaWdobGlnaHRpbmcgb2YgbWF0Y2hlcyBpbiB0aGUgcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHlsZSBoaWdobGlnaHQgc3R5bGUgdG8gYXBwbHkuIFVzZSBjb25zdGFudHMgSElHSExJR0hUX0hUTUwsCiAgICAgKiAgIEhJR0hMSUdIVF9BTlNJLCBISUdITElHSFRfU0lNUExFLgogICAgICogQHBhcmFtIHN0cmluZyAuLi4kZmllbGRzIHRoZSBvcHRpb25hbCBmaWVsZHMgb24gd2hpY2ggdG8gaGlnaGxpZ2h0LgogICAgICogICBJZiBub25lLCBhbGwgZmllbGRzIHdoZXJlIHRoZXJlIGlzIGEgbWF0Y2ggYXJlIGhpZ2hsaWdodGVkLgogICAgICogQHJldHVybiBTZWFyY2hPcHRpb25zCiAgICAgKgogICAgICogQHNlZSBcU2VhcmNoSGlnaGxpZ2h0TW9kZTo6SFRNTAogICAgICogQHNlZSBcU2VhcmNoSGlnaGxpZ2h0TW9kZTo6QU5TSQogICAgICogQHNlZSBcU2VhcmNoSGlnaGxpZ2h0TW9kZTo6U0lNUExFCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoaWdobGlnaHQoc3RyaW5nICRzdHlsZSA9IG51bGwsIGFycmF5ICRmaWVsZHMgPSBudWxsKTogU2VhcmNoT3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogQ29uZmlndXJlcyB0aGUgbGlzdCBvZiBjb2xsZWN0aW9ucyB0byB1c2UgZm9yIHJlc3RyaWN0aW5nIHJlc3VsdHMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ1tdICRjb2xsZWN0aW9uTmFtZXMKICAgICAqIEByZXR1cm4gU2VhcmNoT3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29sbGVjdGlvbnMoYXJyYXkgJGNvbGxlY3Rpb25OYW1lcyk6IFNlYXJjaE9wdGlvbnMge30KfQoKaW50ZXJmYWNlIFNlYXJjaEhpZ2hsaWdodE1vZGUKewogICAgcHVibGljIGNvbnN0IEhUTUwgPSAiaHRtbCI7CiAgICBwdWJsaWMgY29uc3QgQU5TSSA9ICJhbnNpIjsKICAgIHB1YmxpYyBjb25zdCBTSU1QTEUgPSAic2ltcGxlIjsKfQoKLyoqCiAqIENvbW1vbiBpbnRlcmZhY2UgZm9yIGFsbCBjbGFzc2VzLCB3aGljaCBjb3VsZCBiZSB1c2VkIGFzIGEgYm9keSBvZiBTZWFyY2hRdWVyeQogKgogKiBSZXByZXNlbnRzIGZ1bGwgdGV4dCBzZWFyY2ggcXVlcnkKICoKICogQHNlZSBodHRwczovL2RldmVsb3Blci5jb3VjaGJhc2UuY29tL2RvY3VtZW50YXRpb24vc2VydmVyLzQuNi9zZGsvcGhwL2Z1bGwtdGV4dC1zZWFyY2hpbmctd2l0aC1zZGsuaHRtbAogKiAgIFNlYXJjaGluZyBmcm9tIHRoZSBTREsKICovCmludGVyZmFjZSBTZWFyY2hRdWVyeSB7fQoKLyoqCiAqIEEgRlRTIHF1ZXJ5IHRoYXQgcXVlcmllcyBmaWVsZHMgZXhwbGljaXRseSBpbmRleGVkIGFzIGJvb2xlYW4uCiAqLwpjbGFzcyBCb29sZWFuRmllbGRTZWFyY2hRdWVyeSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYm9vbCAkYXJnKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBCb29sZWFuRmllbGRTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoZmxvYXQgJGJvb3N0KTogQm9vbGVhbkZpZWxkU2VhcmNoUXVlcnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkCiAgICAgKiBAcmV0dXJuIEJvb2xlYW5GaWVsZFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWVsZChzdHJpbmcgJGZpZWxkKTogQm9vbGVhbkZpZWxkU2VhcmNoUXVlcnkge30KfQoKLyoqCiAqIEEgY29tcG91bmQgRlRTIHF1ZXJ5IHRoYXQgYWxsb3dzIHZhcmlvdXMgY29tYmluYXRpb25zIG9mIHN1Yi1xdWVyaWVzLgogKi8KY2xhc3MgQm9vbGVhblNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnkKewogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIEJvb2xlYW5TZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoJGJvb3N0KTogQm9vbGVhblNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gQ29uanVuY3Rpb25TZWFyY2hRdWVyeSAkcXVlcnkKICAgICAqIEByZXR1cm4gQm9vbGVhblNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtdXN0KENvbmp1bmN0aW9uU2VhcmNoUXVlcnkgJHF1ZXJ5KTogQm9vbGVhblNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRGlzanVuY3Rpb25TZWFyY2hRdWVyeSAkcXVlcnkKICAgICAqIEByZXR1cm4gQm9vbGVhblNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtdXN0Tm90KERpc2p1bmN0aW9uU2VhcmNoUXVlcnkgJHF1ZXJ5KTogQm9vbGVhblNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRGlzanVuY3Rpb25TZWFyY2hRdWVyeSAkcXVlcnkKICAgICAqIEByZXR1cm4gQm9vbGVhblNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaG91bGQoRGlzanVuY3Rpb25TZWFyY2hRdWVyeSAkcXVlcnkpOiBCb29sZWFuU2VhcmNoUXVlcnkge30KfQoKLyoqCiAqIEEgY29tcG91bmQgRlRTIHF1ZXJ5IHRoYXQgcGVyZm9ybXMgYSBsb2dpY2FsIEFORCBiZXR3ZWVuIGFsbCBpdHMgc3ViLXF1ZXJpZXMgKGNvbmp1bmN0aW9uKS4KICovCmNsYXNzIENvbmp1bmN0aW9uU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeQp7CiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRxdWVyaWVzKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBDb25qdW5jdGlvblNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdCgkYm9vc3QpOiBDb25qdW5jdGlvblNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gU2VhcmNoUXVlcnkgLi4uJHF1ZXJpZXMKICAgICAqIEByZXR1cm4gQ29uanVuY3Rpb25TZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXZlcnkoU2VhcmNoUXVlcnkgLi4uJHF1ZXJpZXMpOiBDb25qdW5jdGlvblNlYXJjaFF1ZXJ5IHt9Cn0KCi8qKgogKiBBIEZUUyBxdWVyeSB0aGF0IG1hdGNoZXMgZG9jdW1lbnRzIG9uIGEgcmFuZ2Ugb2YgdmFsdWVzLiBBdCBsZWFzdCBvbmUgYm91bmQgaXMgcmVxdWlyZWQsIGFuZCB0aGUKICogaW5jbHVzaXZlbmVzcyBvZiBlYWNoIGJvdW5kIGNhbiBiZSBjb25maWd1cmVkLgogKi8KY2xhc3MgRGF0ZVJhbmdlU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeQp7CiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkYm9vc3QKICAgICAqIEByZXR1cm4gRGF0ZVJhbmdlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJvb3N0KGZsb2F0ICRib29zdCk6IERhdGVSYW5nZVNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZAogICAgICogQHJldHVybiBEYXRlUmFuZ2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGQoc3RyaW5nICRmaWVsZCk6IERhdGVSYW5nZVNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkc3RhcnQgVGhlIHN0cmluZ3Mgd2lsbCBiZSB0YWtlbiB2ZXJiYXRpbSBhbmQgc3VwcG9zZWQgdG8gYmUgZm9ybWF0dGVkIHdpdGggY3VzdG9tIGRhdGUKICAgICAqICAgICAgdGltZSBmb3JtYXR0ZXIgKHNlZSBkYXRlVGltZVBhcnNlcikuIEludGVnZXJzIGludGVycHJldGVkIGFzIHVuaXggdGltZXN0YW1wcyBhbmQgcmVwcmVzZW50ZWQgYXMgUkZDMzMzOQogICAgICogICAgICBzdHJpbmdzLgogICAgICogQHBhcmFtIGJvb2wgJGluY2x1c2l2ZQogICAgICogQHJldHVybiBEYXRlUmFuZ2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnQoJHN0YXJ0LCBib29sICRpbmNsdXNpdmUgPSBmYWxzZSk6IERhdGVSYW5nZVNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkZW5kIFRoZSBzdHJpbmdzIHdpbGwgYmUgdGFrZW4gdmVyYmF0aW0gYW5kIHN1cHBvc2VkIHRvIGJlIGZvcm1hdHRlZCB3aXRoIGN1c3RvbSBkYXRlCiAgICAgKiAgICAgIHRpbWUgZm9ybWF0dGVyIChzZWUgZGF0ZVRpbWVQYXJzZXIpLiBJbnRlZ2VycyBpbnRlcnByZXRlZCBhcyB1bml4IHRpbWVzdGFtcHMgYW5kIHJlcHJlc2VudGVkIGFzIFJGQzMzMzkKICAgICAqICAgICAgc3RyaW5ncy4KICAgICAqIEBwYXJhbSBib29sICRpbmNsdXNpdmUKICAgICAqIEByZXR1cm4gRGF0ZVJhbmdlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuZCgkZW5kLCBib29sICRpbmNsdXNpdmUgPSBmYWxzZSk6IERhdGVSYW5nZVNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRlVGltZVBhcnNlcgogICAgICogQHJldHVybiBEYXRlUmFuZ2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGF0ZVRpbWVQYXJzZXIoc3RyaW5nICRkYXRlVGltZVBhcnNlcik6IERhdGVSYW5nZVNlYXJjaFF1ZXJ5IHt9Cn0KCi8qKgogKiBBIGNvbXBvdW5kIEZUUyBxdWVyeSB0aGF0IHBlcmZvcm1zIGEgbG9naWNhbCBPUiBiZXR3ZWVuIGFsbCBpdHMgc3ViLXF1ZXJpZXMgKGRpc2p1bmN0aW9uKS4gSXQgcmVxdWlyZXMgdGhhdCBhCiAqIG1pbmltdW0gb2YgdGhlIHF1ZXJpZXMgbWF0Y2guIFRoZSBtaW5pbXVtIGlzIGNvbmZpZ3VyYWJsZSAoZGVmYXVsdCAxKS4KICovCmNsYXNzIERpc2p1bmN0aW9uU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeQp7CiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRxdWVyaWVzKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBEaXNqdW5jdGlvblNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdChmbG9hdCAkYm9vc3QpOiBEaXNqdW5jdGlvblNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gU2VhcmNoUXVlcnkgLi4uJHF1ZXJpZXMKICAgICAqIEByZXR1cm4gRGlzanVuY3Rpb25TZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZWl0aGVyKFNlYXJjaFF1ZXJ5IC4uLiRxdWVyaWVzKTogRGlzanVuY3Rpb25TZWFyY2hRdWVyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkbWluCiAgICAgKiBAcmV0dXJuIERpc2p1bmN0aW9uU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1pbihpbnQgJG1pbik6IERpc2p1bmN0aW9uU2VhcmNoUXVlcnkge30KfQoKLyoqCiAqIEEgRlRTIHF1ZXJ5IHRoYXQgbWF0Y2hlcyBvbiBDb3VjaGJhc2UgZG9jdW1lbnQgSURzLiBVc2VmdWwgdG8gcmVzdHJpY3QgdGhlIHNlYXJjaCBzcGFjZSB0byBhIGxpc3Qgb2Yga2V5cyAoYnkgdXNpbmcKICogdGhpcyBpbiBhIGNvbXBvdW5kIHF1ZXJ5KS4KICovCmNsYXNzIERvY0lkU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeQp7CiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkYm9vc3QKICAgICAqIEByZXR1cm4gRG9jSWRTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoZmxvYXQgJGJvb3N0KTogRG9jSWRTZWFyY2hRdWVyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQKICAgICAqIEByZXR1cm4gRG9jSWRTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGQoc3RyaW5nICRmaWVsZCk6IERvY0lkU2VhcmNoUXVlcnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgLi4uJGRvY3VtZW50SWRzCiAgICAgKiBAcmV0dXJuIERvY0lkU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRvY0lkcyhzdHJpbmcgLi4uJGRvY3VtZW50SWRzKTogRG9jSWRTZWFyY2hRdWVyeSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgd2hpY2ggYWxsb3dzIHRvIG1hdGNoIGdlbyBib3VuZGluZyBib3hlcy4KICovCmNsYXNzIEdlb0JvdW5kaW5nQm94U2VhcmNoUXVlcnkgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeQp7CiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGZsb2F0ICR0b3BfbGVmdF9sb25naXR1ZGUsIGZsb2F0ICR0b3BfbGVmdF9sYXRpdHVkZSwgZmxvYXQgJGJ1dHRvbV9yaWdodF9sb25naXR1ZGUsIGZsb2F0ICRidXR0b21fcmlnaHRfbGF0aXR1ZGUpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIEdlb0JvdW5kaW5nQm94U2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJvb3N0KGZsb2F0ICRib29zdCk6IEdlb0JvdW5kaW5nQm94U2VhcmNoUXVlcnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkCiAgICAgKiBAcmV0dXJuIEdlb0JvdW5kaW5nQm94U2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkKHN0cmluZyAkZmllbGQpOiBHZW9Cb3VuZGluZ0JveFNlYXJjaFF1ZXJ5IHt9Cn0KCi8qKgogKiBBIEZUUyBxdWVyeSB0aGF0IGZpbmRzIGFsbCBtYXRjaGVzIGZyb20gYSBnaXZlbiBsb2NhdGlvbiAocG9pbnQpIHdpdGhpbiB0aGUgZ2l2ZW4gZGlzdGFuY2UuCiAqCiAqIEJvdGggdGhlIHBvaW50IGFuZCB0aGUgZGlzdGFuY2UgYXJlIHJlcXVpcmVkLgogKi8KY2xhc3MgR2VvRGlzdGFuY2VTZWFyY2hRdWVyeSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoZmxvYXQgJGxvbmdpdHVkZSwgZmxvYXQgJGxhdGl0dWRlLCBzdHJpbmcgJGRpc3RhbmNlID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkYm9vc3QKICAgICAqIEByZXR1cm4gR2VvRGlzdGFuY2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoZmxvYXQgJGJvb3N0KTogR2VvRGlzdGFuY2VTZWFyY2hRdWVyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQKICAgICAqIEByZXR1cm4gR2VvRGlzdGFuY2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGQoc3RyaW5nICRmaWVsZCk6IEdlb0Rpc3RhbmNlU2VhcmNoUXVlcnkge30KfQoKY2xhc3MgQ29vcmRpbmF0ZSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUKewogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRsb25naXR1ZGUKICAgICAqIEBwYXJhbSBmbG9hdCAkbGF0aXR1ZGUKICAgICAqCiAgICAgKiBAc2VlIEdlb1BvbHlnb25RdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoZmxvYXQgJGxvbmdpdHVkZSwgZmxvYXQgJGxhdGl0dWRlKSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgdGhhdCBmaW5kcyBhbGwgbWF0Y2hlcyB3aXRoaW4gdGhlIGdpdmVuIHBvbHlnb24gYXJlYS4KICovCmNsYXNzIEdlb1BvbHlnb25RdWVyeSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkY29vcmRpbmF0ZXMgbGlzdCBvZiBvYmplY3RzIG9mIHR5cGUgQ29vcmRpbmF0ZQogICAgICoKICAgICAqIEBzZWUgQ29vcmRpbmF0ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGNvb3JkaW5hdGVzKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBHZW9Qb2x5Z29uUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJvb3N0KGZsb2F0ICRib29zdCk6IEdlb1BvbHlnb25RdWVyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQKICAgICAqIEByZXR1cm4gR2VvUG9seWdvblF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWVsZChzdHJpbmcgJGZpZWxkKTogR2VvUG9seWdvblF1ZXJ5IHt9Cn0KCi8qKgogKiBBIEZUUyBxdWVyeSB0aGF0IG1hdGNoZXMgYWxsIGluZGV4ZWQgZG9jdW1lbnRzICh1c3VhbGx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMpLgogKi8KY2xhc3MgTWF0Y2hBbGxTZWFyY2hRdWVyeSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBNYXRjaEFsbFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdChmbG9hdCAkYm9vc3QpOiBNYXRjaEFsbFNlYXJjaFF1ZXJ5IHt9Cn0KCi8qKgogKiBBIEZUUyBxdWVyeSB0aGF0IG1hdGNoZXMgMCBkb2N1bWVudCAodXN1YWxseSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzKS4KICovCmNsYXNzIE1hdGNoTm9uZVNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnkKewogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIE1hdGNoTm9uZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdChmbG9hdCAkYm9vc3QpOiBNYXRjaE5vbmVTZWFyY2hRdWVyeSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgdGhhdCBtYXRjaGVzIHNldmVyYWwgZ2l2ZW4gdGVybXMgKGEgInBocmFzZSIpLCBhcHBseWluZyBmdXJ0aGVyIHByb2Nlc3NpbmcKICogbGlrZSBhbmFseXplcnMgdG8gdGhlbS4KICovCmNsYXNzIE1hdGNoUGhyYXNlU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeQp7CiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIE1hdGNoUGhyYXNlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJvb3N0KGZsb2F0ICRib29zdCk6IE1hdGNoUGhyYXNlU2VhcmNoUXVlcnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkCiAgICAgKiBAcmV0dXJuIE1hdGNoUGhyYXNlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkKHN0cmluZyAkZmllbGQpOiBNYXRjaFBocmFzZVNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhbmFseXplcgogICAgICogQHJldHVybiBNYXRjaFBocmFzZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbmFseXplcihzdHJpbmcgJGFuYWx5emVyKTogTWF0Y2hQaHJhc2VTZWFyY2hRdWVyeSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgdGhhdCBtYXRjaGVzIGEgZ2l2ZW4gdGVybSwgYXBwbHlpbmcgZnVydGhlciBwcm9jZXNzaW5nIHRvIGl0CiAqIGxpa2UgYW5hbHl6ZXJzLCBzdGVtbWluZyBhbmQgZXZlbiAjZnV6emluZXNzKGludCkuCiAqLwpjbGFzcyBNYXRjaFNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnkKewogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBNYXRjaFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdChmbG9hdCAkYm9vc3QpOiBNYXRjaFNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZAogICAgICogQHJldHVybiBNYXRjaFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWVsZChzdHJpbmcgJGZpZWxkKTogTWF0Y2hTZWFyY2hRdWVyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkYW5hbHl6ZXIKICAgICAqIEByZXR1cm4gTWF0Y2hTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYW5hbHl6ZXIoc3RyaW5nICRhbmFseXplcik6IE1hdGNoU2VhcmNoUXVlcnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHByZWZpeExlbmd0aAogICAgICogQHJldHVybiBNYXRjaFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVmaXhMZW5ndGgoaW50ICRwcmVmaXhMZW5ndGgpOiBNYXRjaFNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRmdXp6aW5lc3MKICAgICAqIEByZXR1cm4gTWF0Y2hTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZnV6emluZXNzKGludCAkZnV6emluZXNzKTogTWF0Y2hTZWFyY2hRdWVyeSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgdGhhdCBtYXRjaGVzIGRvY3VtZW50cyBvbiBhIHJhbmdlIG9mIHZhbHVlcy4gQXQgbGVhc3Qgb25lIGJvdW5kIGlzIHJlcXVpcmVkLCBhbmQgdGhlCiAqIGluY2x1c2l2ZW5lc3Mgb2YgZWFjaCBib3VuZCBjYW4gYmUgY29uZmlndXJlZC4KICovCmNsYXNzIE51bWVyaWNSYW5nZVNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnkKewogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIE51bWVyaWNSYW5nZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdChmbG9hdCAkYm9vc3QpOiBOdW1lcmljUmFuZ2VTZWFyY2hRdWVyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQKICAgICAqIEByZXR1cm4gTnVtZXJpY1JhbmdlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkKCRmaWVsZCk6IE51bWVyaWNSYW5nZVNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJG1pbgogICAgICogQHBhcmFtIGJvb2wgJGluY2x1c2l2ZQogICAgICogQHJldHVybiBOdW1lcmljUmFuZ2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWluKGZsb2F0ICRtaW4sIGJvb2wgJGluY2x1c2l2ZSA9IGZhbHNlKTogTnVtZXJpY1JhbmdlU2VhcmNoUXVlcnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkbWF4CiAgICAgKiBAcGFyYW0gYm9vbCAkaW5jbHVzaXZlCiAgICAgKiBAcmV0dXJuIE51bWVyaWNSYW5nZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXgoZmxvYXQgJG1heCwgYm9vbCAkaW5jbHVzaXZlID0gZmFsc2UpOiBOdW1lcmljUmFuZ2VTZWFyY2hRdWVyeSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgdGhhdCBtYXRjaGVzIHNldmVyYWwgdGVybXMgKGEgInBocmFzZSIpIGFzIGlzLiBUaGUgb3JkZXIgb2YgdGhlIHRlcm1zIG1hdGVyIGFuZCBubyBmdXJ0aGVyIHByb2Nlc3NpbmcgaXMKICogYXBwbGllZCB0byB0aGVtLCBzbyB0aGV5IG11c3QgYXBwZWFyIGluIHRoZSBpbmRleCBleGFjdGx5IGFzIHByb3ZpZGVkLiAgVXN1YWxseSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLCBwcmVmZXIKICogTWF0Y2hQaHJhc2VRdWVyeS4KICovCmNsYXNzIFBocmFzZVNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnkKewogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgLi4uJHRlcm1zKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBQaHJhc2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoZmxvYXQgJGJvb3N0KTogUGhyYXNlU2VhcmNoUXVlcnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkCiAgICAgKiBAcmV0dXJuIFBocmFzZVNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaWVsZChzdHJpbmcgJGZpZWxkKTogUGhyYXNlU2VhcmNoUXVlcnkge30KfQoKLyoqCiAqIEEgRlRTIHF1ZXJ5IHRoYXQgYWxsb3dzIGZvciBzaW1wbGUgbWF0Y2hpbmcgb24gYSBnaXZlbiBwcmVmaXguCiAqLwpjbGFzcyBQcmVmaXhTZWFyY2hRdWVyeSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRwcmVmaXgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIFByZWZpeFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdChmbG9hdCAkYm9vc3QpOiBQcmVmaXhTZWFyY2hRdWVyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQKICAgICAqIEByZXR1cm4gUHJlZml4U2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkKHN0cmluZyAkZmllbGQpOiBQcmVmaXhTZWFyY2hRdWVyeSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgdGhhdCBwZXJmb3JtcyBhIHNlYXJjaCBhY2NvcmRpbmcgdG8gdGhlICJzdHJpbmcgcXVlcnkiIHN5bnRheC4KICovCmNsYXNzIFF1ZXJ5U3RyaW5nU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeQp7CiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkcXVlcnlfc3RyaW5nKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRib29zdAogICAgICogQHJldHVybiBRdWVyeVN0cmluZ1NlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdChmbG9hdCAkYm9vc3QpOiBRdWVyeVN0cmluZ1NlYXJjaFF1ZXJ5IHt9Cn0KCi8qKgogKiBBIEZUUyBxdWVyeSB0aGF0IGFsbG93cyBmb3Igc2ltcGxlIG1hdGNoaW5nIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAqLwpjbGFzcyBSZWdleHBTZWFyY2hRdWVyeSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFF1ZXJ5CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRyZWdleHApIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIFJlZ2V4cFNlYXJjaFF1ZXJ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib29zdChmbG9hdCAkYm9vc3QpOiBSZWdleHBTZWFyY2hRdWVyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmllbGQKICAgICAqIEByZXR1cm4gUmVnZXhwU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkKHN0cmluZyAkZmllbGQpOiBSZWdleHBTZWFyY2hRdWVyeSB7fQp9CgovKioKICogQSBmYWNldCB0aGF0IGdpdmVzIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIG1vc3QgcmVjdXJyaW5nIHRlcm1zIGluIGFsbCBoaXRzLgogKi8KY2xhc3MgVGVybVNlYXJjaFF1ZXJ5IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoUXVlcnkKewogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJHRlcm0pIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIFRlcm1TZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vc3QoZmxvYXQgJGJvb3N0KTogVGVybVNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZAogICAgICogQHJldHVybiBUZXJtU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkKHN0cmluZyAkZmllbGQpOiBUZXJtU2VhcmNoUXVlcnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHByZWZpeExlbmd0aAogICAgICogQHJldHVybiBUZXJtU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZWZpeExlbmd0aChpbnQgJHByZWZpeExlbmd0aCk6IFRlcm1TZWFyY2hRdWVyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkZnV6emluZXNzCiAgICAgKiBAcmV0dXJuIFRlcm1TZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZnV6emluZXNzKGludCAkZnV6emluZXNzKTogVGVybVNlYXJjaFF1ZXJ5IHt9Cn0KCi8qKgogKiBBIEZUUyBxdWVyeSB0aGF0IG1hdGNoZXMgZG9jdW1lbnRzIG9uIGEgcmFuZ2Ugb2YgdmFsdWVzLiBBdCBsZWFzdCBvbmUgYm91bmQgaXMgcmVxdWlyZWQsIGFuZCB0aGUKICogaW5jbHVzaXZlbmVzcyBvZiBlYWNoIGJvdW5kIGNhbiBiZSBjb25maWd1cmVkLgogKi8KY2xhc3MgVGVybVJhbmdlU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeQp7CiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkYm9vc3QKICAgICAqIEByZXR1cm4gVGVybVJhbmdlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJvb3N0KGZsb2F0ICRib29zdCk6IFRlcm1SYW5nZVNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWVsZAogICAgICogQHJldHVybiBUZXJtUmFuZ2VTZWFyY2hRdWVyeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGQoc3RyaW5nICRmaWVsZCk6IFRlcm1SYW5nZVNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtaW4KICAgICAqIEBwYXJhbSBib29sICRpbmNsdXNpdmUKICAgICAqIEByZXR1cm4gVGVybVJhbmdlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1pbihzdHJpbmcgJG1pbiwgYm9vbCAkaW5jbHVzaXZlID0gdHJ1ZSk6IFRlcm1SYW5nZVNlYXJjaFF1ZXJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXgKICAgICAqIEBwYXJhbSBib29sICRpbmNsdXNpdmUKICAgICAqIEByZXR1cm4gVGVybVJhbmdlU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1heChzdHJpbmcgJG1heCwgYm9vbCAkaW5jbHVzaXZlID0gZmFsc2UpOiBUZXJtUmFuZ2VTZWFyY2hRdWVyeSB7fQp9CgovKioKICogQSBGVFMgcXVlcnkgdGhhdCBhbGxvd3MgZm9yIHNpbXBsZSBtYXRjaGluZyB1c2luZyB3aWxkY2FyZCBjaGFyYWN0ZXJzICgqIGFuZCA/KS4KICovCmNsYXNzIFdpbGRjYXJkU2VhcmNoUXVlcnkgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hRdWVyeQp7CiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkd2lsZGNhcmQpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvb3N0CiAgICAgKiBAcmV0dXJuIFdpbGRjYXJkU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJvb3N0KGZsb2F0ICRib29zdCk6IFdpbGRjYXJkU2VhcmNoUXVlcnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpZWxkCiAgICAgKiBAcmV0dXJuIFdpbGRjYXJkU2VhcmNoUXVlcnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkKHN0cmluZyAkZmllbGQpOiBXaWxkY2FyZFNlYXJjaFF1ZXJ5IHt9Cn0KCi8qKgogKiBDb21tb24gaW50ZXJmYWNlIGZvciBhbGwgc2VhcmNoIGZhY2V0cwogKgogKiBAc2VlIFxTZWFyY2hRdWVyeTo6YWRkRmFjZXQoKQogKiBAc2VlIFxUZXJtU2VhcmNoRmFjZXQKICogQHNlZSBcRGF0ZVJhbmdlU2VhcmNoRmFjZXQKICogQHNlZSBcTnVtZXJpY1JhbmdlU2VhcmNoRmFjZXQKICovCmludGVyZmFjZSBTZWFyY2hGYWNldCB7fQoKLyoqCiAqIEEgZmFjZXQgdGhhdCBnaXZlcyB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHRoZSBtb3N0IHJlY3VycmluZyB0ZXJtcyBpbiBhbGwgaGl0cy4KICovCmNsYXNzIFRlcm1TZWFyY2hGYWNldCBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUsIFNlYXJjaEZhY2V0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRmaWVsZCwgaW50ICRsaW1pdCkge30KfQoKLyoqCiAqIEEgZmFjZXQgdGhhdCBjYXRlZ29yaXplcyBoaXRzIGludG8gbnVtZXJpY2FsIHJhbmdlcyAob3IgYnVja2V0cykgcHJvdmlkZWQgYnkgdGhlIHVzZXIuCiAqLwpjbGFzcyBOdW1lcmljUmFuZ2VTZWFyY2hGYWNldCBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUsIFNlYXJjaEZhY2V0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRmaWVsZCwgaW50ICRsaW1pdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBmbG9hdCAkbWluCiAgICAgKiBAcGFyYW0gZmxvYXQgJG1heAogICAgICogQHJldHVybiBOdW1lcmljUmFuZ2VTZWFyY2hGYWNldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUmFuZ2Uoc3RyaW5nICRuYW1lLCBmbG9hdCAkbWluID0gbnVsbCwgZmxvYXQgJG1heCA9IG51bGwpOiBOdW1lcmljUmFuZ2VTZWFyY2hGYWNldCB7fQp9CgovKioKICogQSBmYWNldCB0aGF0IGNhdGVnb3JpemVzIGhpdHMgaW5zaWRlIGRhdGUgcmFuZ2VzIChvciBidWNrZXRzKSBwcm92aWRlZCBieSB0aGUgdXNlci4KICovCmNsYXNzIERhdGVSYW5nZVNlYXJjaEZhY2V0IGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoRmFjZXQKewogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGZpZWxkLCBpbnQgJGxpbWl0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIGludHxzdHJpbmcgJHN0YXJ0CiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkZW5kCiAgICAgKiBAcmV0dXJuIERhdGVSYW5nZVNlYXJjaEZhY2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRSYW5nZShzdHJpbmcgJG5hbWUsICRzdGFydCA9IG51bGwsICRlbmQgPSBudWxsKTogRGF0ZVJhbmdlU2VhcmNoRmFjZXQge30KfQoKLyoqCiAqIEJhc2UgaW50ZXJmYWNlIGZvciBhbGwgRlRTIHNvcnQgb3B0aW9ucyBpbiBxdWVyeWluZy4KICovCmludGVyZmFjZSBTZWFyY2hTb3J0IHt9CgovKioKICogU29ydCBieSBhIGZpZWxkIGluIHRoZSBoaXRzLgogKi8KY2xhc3MgU2VhcmNoU29ydEZpZWxkIGltcGxlbWVudHMgSnNvblNlcmlhbGl6YWJsZSwgU2VhcmNoU29ydAp7CiAgICBwdWJsaWMgZnVuY3Rpb24ganNvblNlcmlhbGl6ZSgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkZmllbGQpIHt9CgogICAgLyoqCiAgICAgKiBEaXJlY3Rpb24gb2YgdGhlIHNvcnQKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVzY2VuZGluZwogICAgICoKICAgICAqIEByZXR1cm4gU2VhcmNoU29ydEZpZWxkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNjZW5kaW5nKGJvb2wgJGRlc2NlbmRpbmcpOiBTZWFyY2hTb3J0RmllbGQge30KCiAgICAvKioKICAgICAqIFNldCB0eXBlIG9mIHRoZSBmaWVsZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgdHlwZSB0aGUgdHlwZQogICAgICoKICAgICAqIEBzZWUgU2VhcmNoU29ydFR5cGU6OkFVVE8KICAgICAqIEBzZWUgU2VhcmNoU29ydFR5cGU6OlNUUklORwogICAgICogQHNlZSBTZWFyY2hTb3J0VHlwZTo6TlVNQkVSCiAgICAgKiBAc2VlIFNlYXJjaFNvcnRUeXBlOjpEQVRFCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0eXBlKHN0cmluZyAkdHlwZSk6IFNlYXJjaFNvcnRGaWVsZCB7fQoKICAgIC8qKgogICAgICogU2V0IG1vZGUgb2YgdGhlIHNvcnQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIG1vZGUgdGhlIG1vZGUKICAgICAqCiAgICAgKiBAc2VlIFNlYXJjaFNvcnRNb2RlOjpNSU4KICAgICAqIEBzZWUgU2VhcmNoU29ydE1vZGU6Ok1BWAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW9kZShzdHJpbmcgJG1vZGUpOiBTZWFyY2hTb3J0RmllbGQge30KCiAgICAvKioKICAgICAqIFNldCB3aGVyZSB0aGUgaGl0cyB3aXRoIG1pc3NpbmcgZmllbGQgd2lsbCBiZSBpbnNlcnRlZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgbWlzc2luZyBzdHJhdGVneSBmb3IgaGl0cyB3aXRoIG1pc3NpbmcgZmllbGRzCiAgICAgKgogICAgICogQHNlZSBTZWFyY2hTb3J0TWlzc2luZzo6RklSU1QKICAgICAqIEBzZWUgU2VhcmNoU29ydE1pc3Npbmc6OkxBU1QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1pc3Npbmcoc3RyaW5nICRtaXNzaW5nKTogU2VhcmNoU29ydEZpZWxkIHt9Cn0KCmludGVyZmFjZSBTZWFyY2hTb3J0VHlwZQp7CiAgICBwdWJsaWMgY29uc3QgQVVUTyA9ICJhdXRvIjsKICAgIHB1YmxpYyBjb25zdCBTVFJJTkcgPSAic3RyaW5nIjsKICAgIHB1YmxpYyBjb25zdCBOVU1CRVIgPSAibnVtYmVyIjsKICAgIHB1YmxpYyBjb25zdCBEQVRFID0gImRhdGUiOwp9CgppbnRlcmZhY2UgU2VhcmNoU29ydE1vZGUKewogICAgcHVibGljIGNvbnN0IERFRkFVTFQgPSAiZGVmYXVsdCI7CiAgICBwdWJsaWMgY29uc3QgTUlOID0gIm1pbiI7CiAgICBwdWJsaWMgY29uc3QgTUFYID0gIm1heCI7Cn0KCmludGVyZmFjZSBTZWFyY2hTb3J0TWlzc2luZwp7CiAgICBwdWJsaWMgY29uc3QgRklSU1QgPSAiZmlyc3QiOwogICAgcHVibGljIGNvbnN0IExBU1QgPSAibGFzdCI7Cn0KCi8qKgogKiBTb3J0IGJ5IGEgbG9jYXRpb24gYW5kIHVuaXQgaW4gdGhlIGhpdHMuCiAqLwpjbGFzcyBTZWFyY2hTb3J0R2VvRGlzdGFuY2UgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlLCBTZWFyY2hTb3J0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRmaWVsZCwgZmxvYXQgJGxvZ2l0dWRlLCBmbG9hdCAkbGF0aXR1ZGUpIHt9CgogICAgLyoqCiAgICAgKiBEaXJlY3Rpb24gb2YgdGhlIHNvcnQKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVzY2VuZGluZwogICAgICoKICAgICAqIEByZXR1cm4gU2VhcmNoU29ydEdlb0Rpc3RhbmNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNjZW5kaW5nKGJvb2wgJGRlc2NlbmRpbmcpOiBTZWFyY2hTb3J0R2VvRGlzdGFuY2Uge30KCiAgICAvKioKICAgICAqIE5hbWUgb2YgdGhlIHVuaXRzCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdW5pdAogICAgICoKICAgICAqIEByZXR1cm4gU2VhcmNoU29ydEdlb0Rpc3RhbmNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bml0KHN0cmluZyAkdW5pdCk6IFNlYXJjaFNvcnRHZW9EaXN0YW5jZSB7fQp9CgovKioKICogU29ydCBieSB0aGUgZG9jdW1lbnQgaWRlbnRpZmllci4KICovCmNsYXNzIFNlYXJjaFNvcnRJZCBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFNvcnQKewogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBEaXJlY3Rpb24gb2YgdGhlIHNvcnQKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVzY2VuZGluZwogICAgICoKICAgICAqIEByZXR1cm4gU2VhcmNoU29ydElkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNjZW5kaW5nKGJvb2wgJGRlc2NlbmRpbmcpOiBTZWFyY2hTb3J0SWQge30KfQoKLyoqCiAqIFNvcnQgYnkgdGhlIGhpdCBzY29yZS4KICovCmNsYXNzIFNlYXJjaFNvcnRTY29yZSBpbXBsZW1lbnRzIEpzb25TZXJpYWxpemFibGUsIFNlYXJjaFNvcnQKewogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBEaXJlY3Rpb24gb2YgdGhlIHNvcnQKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVzY2VuZGluZwogICAgICoKICAgICAqIEByZXR1cm4gU2VhcmNoU29ydFNjb3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNjZW5kaW5nKGJvb2wgJGRlc2NlbmRpbmcpOiBTZWFyY2hTb3J0U2NvcmUge30KfQoKY2xhc3MgR2V0T3B0aW9ucwp7CiAgICAvKioKICAgICAqIFNldHMgdGhlIG9wZXJhdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRhcmcgdGhlIG9wZXJhdGlvbiB0aW1lb3V0IHRvIGFwcGx5CiAgICAgKiBAcmV0dXJuIEdldE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRhcmcpOiBHZXRPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHdoZXRoZXIgdG8gaW5jbHVkZSBkb2N1bWVudCBleHBpcnkgd2l0aCB0aGUgZG9jdW1lbnQgY29udGVudC4KICAgICAqCiAgICAgKiBXaGVuIHVzZWQgdGhpcyBvcHRpb24gd2lsbCB0cmFuc3BhcmVudGx5IHRyYW5zZm9ybSB0aGUgR2V0CiAgICAgKiBvcGVyYXRpb24gaW50byBhIHN1YmRvY3VtZW50IG9wZXJhdGlvbiBwZXJmb3JtaW5nIGEgZnVsbCBkb2N1bWVudAogICAgICogZmV0Y2ggYXMgd2VsbCBhcyB0aGUgZXhwaXJ5LgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRhcmcgd2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBkb2N1bWVudCBleHBpcnkKICAgICAqIEByZXR1cm4gR2V0T3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEV4cGlyeShib29sICRhcmcpOiBHZXRPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHdoZXRoZXIgdG8gY2F1c2UgdGhlIEdldCBvcGVyYXRpb24gdG8gb25seSBmZXRjaCB0aGUgZmllbGRzCiAgICAgKiBmcm9tIHRoZSBkb2N1bWVudCBpbmRpY2F0ZWQgYnkgdGhlIHBhdGhzIHByb3ZpZGVkLgogICAgICoKICAgICAqIFdoZW4gdXNlZCB0aGlzIG9wdGlvbiB3aWxsIHRyYW5zcGFyZW50bHkgdHJhbnNmb3JtIHRoZSBHZXQKICAgICAqIG9wZXJhdGlvbiBpbnRvIGEgc3ViZG9jdW1lbnQgb3BlcmF0aW9uIGZldGNoaW5nIG9ubHkgdGhlIHJlcXVpcmVkCiAgICAgKiBmaWVsZHMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRhcmcgdGhlIGFycmF5IG9mIGZpZWxkIG5hbWVzCiAgICAgKiBAcmV0dXJuIEdldE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByb2plY3QoYXJyYXkgJGFyZyk6IEdldE9wdGlvbnMge30KCiAgICAvKioKICAgICAqIEFzc29jaWF0ZSBjdXN0b20gdHJhbnNjb2RlciB3aXRoIHRoZSByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYXJnIGRlY29kaW5nIGZ1bmN0aW9uIHdpdGggc2lnbmF0dXJlIChyZXR1cm5zIGRlY29kZWQgdmFsdWUpOgogICAgICoKICAgICAqICAgYGZ1bmN0aW9uIGRlY29kZXIoc3RyaW5nICRieXRlcywgaW50ICRmbGFncywgaW50ICRkYXRhdHlwZSk6IG1peGVkYAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlcihjYWxsYWJsZSAkYXJnKTogR2V0T3B0aW9ucyB7fQp9CgpjbGFzcyBHZXRBbmRUb3VjaE9wdGlvbnMKewogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBvcGVyYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBvcGVyYXRpb24gdGltZW91dCB0byBhcHBseQogICAgICogQHJldHVybiBHZXRBbmRUb3VjaE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRhcmcpOiBHZXRBbmRUb3VjaE9wdGlvbnMge30KCiAgICAvKioKICAgICAqIEFzc29jaWF0ZSBjdXN0b20gdHJhbnNjb2RlciB3aXRoIHRoZSByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYXJnIGRlY29kaW5nIGZ1bmN0aW9uIHdpdGggc2lnbmF0dXJlIChyZXR1cm5zIGRlY29kZWQgdmFsdWUpOgogICAgICoKICAgICAqICAgYGZ1bmN0aW9uIGRlY29kZXIoc3RyaW5nICRieXRlcywgaW50ICRmbGFncywgaW50ICRkYXRhdHlwZSk6IG1peGVkYAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlcihjYWxsYWJsZSAkYXJnKTogR2V0QW5kVG91Y2hPcHRpb25zIHt9Cn0KCmNsYXNzIEdldEFuZExvY2tPcHRpb25zCnsKICAgIC8qKgogICAgICogU2V0cyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgdG8gYXBwbHkKICAgICAqIEByZXR1cm4gR2V0QW5kTG9ja09wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRhcmcpOiBHZXRBbmRMb2NrT3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogQXNzb2NpYXRlIGN1c3RvbSB0cmFuc2NvZGVyIHdpdGggdGhlIHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRhcmcgZGVjb2RpbmcgZnVuY3Rpb24gd2l0aCBzaWduYXR1cmUgKHJldHVybnMgZGVjb2RlZCB2YWx1ZSk6CiAgICAgKgogICAgICogICBgZnVuY3Rpb24gZGVjb2RlcihzdHJpbmcgJGJ5dGVzLCBpbnQgJGZsYWdzLCBpbnQgJGRhdGF0eXBlKTogbWl4ZWRgCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGVyKGNhbGxhYmxlICRhcmcpOiBHZXRBbmRMb2NrT3B0aW9ucyB7fQp9CgpjbGFzcyBHZXRBbGxSZXBsaWNhc09wdGlvbnMKewogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBvcGVyYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBvcGVyYXRpb24gdGltZW91dCB0byBhcHBseQogICAgICogQHJldHVybiBHZXRBbGxSZXBsaWNhc09wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRhcmcpOiBHZXRBbGxSZXBsaWNhc09wdGlvbnMge30KCiAgICAvKioKICAgICAqIEFzc29jaWF0ZSBjdXN0b20gdHJhbnNjb2RlciB3aXRoIHRoZSByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYXJnIGRlY29kaW5nIGZ1bmN0aW9uIHdpdGggc2lnbmF0dXJlIChyZXR1cm5zIGRlY29kZWQgdmFsdWUpOgogICAgICoKICAgICAqICAgYGZ1bmN0aW9uIGRlY29kZXIoc3RyaW5nICRieXRlcywgaW50ICRmbGFncywgaW50ICRkYXRhdHlwZSk6IG1peGVkYAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjb2RlcihjYWxsYWJsZSAkYXJnKTogR2V0QWxsUmVwbGljYXNPcHRpb25zIHt9Cn0KCmNsYXNzIEdldEFueVJlcGxpY2FPcHRpb25zCnsKICAgIC8qKgogICAgICogU2V0cyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgdG8gYXBwbHkKICAgICAqIEByZXR1cm4gR2V0QW55UmVwbGljYU9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRhcmcpOiBHZXRBbnlSZXBsaWNhT3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogQXNzb2NpYXRlIGN1c3RvbSB0cmFuc2NvZGVyIHdpdGggdGhlIHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRhcmcgZGVjb2RpbmcgZnVuY3Rpb24gd2l0aCBzaWduYXR1cmUgKHJldHVybnMgZGVjb2RlZCB2YWx1ZSk6CiAgICAgKgogICAgICogICBgZnVuY3Rpb24gZGVjb2RlcihzdHJpbmcgJGJ5dGVzLCBpbnQgJGZsYWdzLCBpbnQgJGRhdGF0eXBlKTogbWl4ZWRgCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNvZGVyKGNhbGxhYmxlICRhcmcpOiBHZXRBbnlSZXBsaWNhT3B0aW9ucyB7fQp9CgpjbGFzcyBFeGlzdHNPcHRpb25zCnsKICAgIC8qKgogICAgICogU2V0cyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgdG8gYXBwbHkKICAgICAqIEByZXR1cm4gRXhpc3RzT3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGltZW91dChpbnQgJGFyZyk6IEV4aXN0c09wdGlvbnMge30KfQoKY2xhc3MgVW5sb2NrT3B0aW9ucwp7CiAgICAvKioKICAgICAqIFNldHMgdGhlIG9wZXJhdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRhcmcgdGhlIG9wZXJhdGlvbiB0aW1lb3V0IHRvIGFwcGx5CiAgICAgKiBAcmV0dXJuIFVubG9ja09wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRhcmcpOiBVbmxvY2tPcHRpb25zIHt9Cn0KCmNsYXNzIEluc2VydE9wdGlvbnMKewogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBvcGVyYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBvcGVyYXRpb24gdGltZW91dCB0byBhcHBseQogICAgICogQHJldHVybiBJbnNlcnRPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aW1lb3V0KGludCAkYXJnKTogSW5zZXJ0T3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgZXhwaXJ5IHRpbWUgZm9yIHRoZSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRhcmcgdGhlIGV4cGlyeSB0aW1lIGluIG1zCiAgICAgKiBAcmV0dXJuIEluc2VydE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cGlyeShpbnQgJGFyZyk6IEluc2VydE9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGR1cmFiaWxpdHkgbGV2ZWwgdG8gZW5mb3JjZSB3aGVuIHdyaXRpbmcgdGhlIGRvY3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgZHVyYWJpbGl0eSBsZXZlbCB0byBlbmZvcmNlCiAgICAgKiBAcmV0dXJuIEluc2VydE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGR1cmFiaWxpdHlMZXZlbChpbnQgJGFyZyk6IEluc2VydE9wdGlvbnMge30KCiAgICAvKioKICAgICAqIEFzc29jaWF0ZSBjdXN0b20gdHJhbnNjb2RlciB3aXRoIHRoZSByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYXJnIGVuY29kaW5nIGZ1bmN0aW9uIHdpdGggc2lnbmF0dXJlIChyZXR1cm5zIHR1cGxlIG9mIGJ5dGVzLCBmbGFncyBhbmQgZGF0YXR5cGUpOgogICAgICoKICAgICAqICAgYGZ1bmN0aW9uIGVuY29kZXIoJHZhbHVlKTogW3N0cmluZyAkYnl0ZXMsIGludCAkZmxhZ3MsIGludCAkZGF0YXR5cGVdYAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlcihjYWxsYWJsZSAkYXJnKTogSW5zZXJ0T3B0aW9ucyB7fQp9CgpjbGFzcyBVcHNlcnRPcHRpb25zCnsKICAgIC8qKgogICAgICogU2V0cyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgdG8gYXBwbHkKICAgICAqIEByZXR1cm4gVXBzZXJ0T3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGltZW91dChpbnQgJGFyZyk6IFVwc2VydE9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGV4cGlyeSB0aW1lIGZvciB0aGUgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIGludHxEYXRlVGltZUludGVyZmFjZSAkYXJnIHRoZSByZWxhdGl2ZSBleHBpcnkgdGltZSBpbiBzZWNvbmRzIG9yIERhdGVUaW1lSW50ZXJmYWNlIG9iamVjdCBmb3IgYWJzb2x1dGUgcG9pbnQgaW4gdGltZQogICAgICogQHJldHVybiBVcHNlcnRPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleHBpcnkobWl4ZWQgJGFyZyk6IFVwc2VydE9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgd2hldGhlciB0aGUgb3JpZ2luYWwgZXhwaXJhdGlvbiBzaG91bGQgYmUgcHJlc2VydmVkIChieSBkZWZhdWx0IFJlcGxhY2Ugb3BlcmF0aW9uIHVwZGF0ZXMgZXhwaXJhdGlvbikuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHNob3VsZFByZXNlcnZlIGlmIHRydWUsIHRoZSBleHBpcmF0aW9uIHRpbWUgd2lsbCBub3QgYmUgdXBkYXRlZAogICAgICogQHJldHVybiBVcHNlcnRPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVzZXJ2ZUV4cGlyeShib29sICRzaG91bGRQcmVzZXJ2ZSk6IFVwc2VydE9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGR1cmFiaWxpdHkgbGV2ZWwgdG8gZW5mb3JjZSB3aGVuIHdyaXRpbmcgdGhlIGRvY3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgZHVyYWJpbGl0eSBsZXZlbCB0byBlbmZvcmNlCiAgICAgKiBAcmV0dXJuIFVwc2VydE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGR1cmFiaWxpdHlMZXZlbChpbnQgJGFyZyk6IFVwc2VydE9wdGlvbnMge30KCiAgICAvKioKICAgICAqIEFzc29jaWF0ZSBjdXN0b20gdHJhbnNjb2RlciB3aXRoIHRoZSByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYXJnIGVuY29kaW5nIGZ1bmN0aW9uIHdpdGggc2lnbmF0dXJlIChyZXR1cm5zIHR1cGxlIG9mIGJ5dGVzLCBmbGFncyBhbmQgZGF0YXR5cGUpOgogICAgICoKICAgICAqICAgYGZ1bmN0aW9uIGVuY29kZXIoJHZhbHVlKTogW3N0cmluZyAkYnl0ZXMsIGludCAkZmxhZ3MsIGludCAkZGF0YXR5cGVdYAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlcihjYWxsYWJsZSAkYXJnKTogVXBzZXJ0T3B0aW9ucyB7fQp9CgpjbGFzcyBSZXBsYWNlT3B0aW9ucwp7CiAgICAvKioKICAgICAqIFNldHMgdGhlIG9wZXJhdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRhcmcgdGhlIG9wZXJhdGlvbiB0aW1lb3V0IHRvIGFwcGx5CiAgICAgKiBAcmV0dXJuIFJlcGxhY2VPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aW1lb3V0KGludCAkYXJnKTogUmVwbGFjZU9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGV4cGlyeSB0aW1lIGZvciB0aGUgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIGludHxEYXRlVGltZUludGVyZmFjZSAkYXJnIHRoZSByZWxhdGl2ZSBleHBpcnkgdGltZSBpbiBzZWNvbmRzIG9yIERhdGVUaW1lSW50ZXJmYWNlIG9iamVjdCBmb3IgYWJzb2x1dGUgcG9pbnQgaW4gdGltZQogICAgICogQHJldHVybiBSZXBsYWNlT3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwaXJ5KG1peGVkICRhcmcpOiBSZXBsYWNlT3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB3aGV0aGVyIHRoZSBvcmlnaW5hbCBleHBpcmF0aW9uIHNob3VsZCBiZSBwcmVzZXJ2ZWQgKGJ5IGRlZmF1bHQgUmVwbGFjZSBvcGVyYXRpb24gdXBkYXRlcyBleHBpcmF0aW9uKS4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkc2hvdWxkUHJlc2VydmUgaWYgdHJ1ZSwgdGhlIGV4cGlyYXRpb24gdGltZSB3aWxsIG5vdCBiZSB1cGRhdGVkCiAgICAgKiBAcmV0dXJuIFJlcGxhY2VPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVzZXJ2ZUV4cGlyeShib29sICRzaG91bGRQcmVzZXJ2ZSk6IFJlcGxhY2VPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBjYXMgdmFsdWUgZm9yIHRoZSBvcGVyYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYXJnIHRoZSBjYXMgdmFsdWUKICAgICAqIEByZXR1cm4gUmVwbGFjZU9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhcyhzdHJpbmcgJGFyZyk6IFJlcGxhY2VPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBkdXJhYmlsaXR5IGxldmVsIHRvIGVuZm9yY2Ugd2hlbiB3cml0aW5nIHRoZSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRhcmcgdGhlIGR1cmFiaWxpdHkgbGV2ZWwgdG8gZW5mb3JjZQogICAgICogQHJldHVybiBSZXBsYWNlT3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHVyYWJpbGl0eUxldmVsKGludCAkYXJnKTogUmVwbGFjZU9wdGlvbnMge30KCiAgICAvKioKICAgICAqIEFzc29jaWF0ZSBjdXN0b20gdHJhbnNjb2RlciB3aXRoIHRoZSByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYXJnIGVuY29kaW5nIGZ1bmN0aW9uIHdpdGggc2lnbmF0dXJlIChyZXR1cm5zIHR1cGxlIG9mIGJ5dGVzLCBmbGFncyBhbmQgZGF0YXR5cGUpOgogICAgICoKICAgICAqICAgYGZ1bmN0aW9uIGVuY29kZXIoJHZhbHVlKTogW3N0cmluZyAkYnl0ZXMsIGludCAkZmxhZ3MsIGludCAkZGF0YXR5cGVdYAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlcihjYWxsYWJsZSAkYXJnKTogUmVwbGFjZU9wdGlvbnMge30KfQoKY2xhc3MgQXBwZW5kT3B0aW9ucwp7CiAgICAvKioKICAgICAqIFNldHMgdGhlIG9wZXJhdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRhcmcgdGhlIG9wZXJhdGlvbiB0aW1lb3V0IHRvIGFwcGx5CiAgICAgKiBAcmV0dXJuIEFwcGVuZE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRhcmcpOiBBcHBlbmRPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBkdXJhYmlsaXR5IGxldmVsIHRvIGVuZm9yY2Ugd2hlbiB3cml0aW5nIHRoZSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRhcmcgdGhlIGR1cmFiaWxpdHkgbGV2ZWwgdG8gZW5mb3JjZQogICAgICogQHJldHVybiBBcHBlbmRPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkdXJhYmlsaXR5TGV2ZWwoaW50ICRhcmcpOiBBcHBlbmRPcHRpb25zIHt9Cn0KCmNsYXNzIFByZXBlbmRPcHRpb25zCnsKICAgIC8qKgogICAgICogU2V0cyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgdG8gYXBwbHkKICAgICAqIEByZXR1cm4gUHJlcGVuZE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRhcmcpOiBQcmVwZW5kT3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgZHVyYWJpbGl0eSBsZXZlbCB0byBlbmZvcmNlIHdoZW4gd3JpdGluZyB0aGUgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBkdXJhYmlsaXR5IGxldmVsIHRvIGVuZm9yY2UKICAgICAqIEByZXR1cm4gUHJlcGVuZE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGR1cmFiaWxpdHlMZXZlbChpbnQgJGFyZyk6IFByZXBlbmRPcHRpb25zIHt9Cn0KCi8qKgogKiBBbiBvYmplY3Qgd2hpY2ggY29udGFpbnMgbGV2ZWxzIG9mIGR1cmFiaWxpdHkgdGhhdCBjYW4gYmUgZW5mb3JjZWQgd2hlbgogKiB1c2luZyBtdXRhdGlvbiBvcGVyYXRpb25zLgogKi8KaW50ZXJmYWNlIER1cmFiaWxpdHlMZXZlbAp7CiAgICAvKioKICAgICAqIEFwcGx5IG5vIGR1cmFiaWxpdHkgbGV2ZWwuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBOT05FID0gMDsKCiAgICAvKioKICAgICAqIEFwcGx5IGEgZHVyYWJpbGl0eSBsZXZlbCB3aGVyZSB0aGUgZG9jdW1lbnQgbXVzdCBiZSB3cml0dGVuIHRvIG1lbW9yeQogICAgICogb24gYSBtYWpvcml0eSBvZiBub2RlcyBpbiB0aGUgY2x1c3Rlci4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE1BSk9SSVRZID0gMTsKCiAgICAvKioKICAgICAqIEFwcGx5IGEgZHVyYWJpbGl0eSBsZXZlbCB3aGVyZSB0aGUgZG9jdW1lbnQgbXVzdCBiZSB3cml0dGVuIHRvIG1lbW9yeQogICAgICogb24gYSBtYWpvcml0eSBvZiBub2RlcyBpbiB0aGUgY2x1c3RlciBhbmQgd3JpdHRlbiB0byBkaXNrIG9uIHRoZQogICAgICogYWN0aXZlIG5vZGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNQUpPUklUWV9BTkRfUEVSU0lTVF9UT19BQ1RJVkUgPSAyOwoKICAgIC8qKgogICAgICogQXBwbHkgYSBkdXJhYmlsaXR5IGxldmVsIHdoZXJlIHRoZSBkb2N1bWVudCBtdXN0IGJlIHdyaXR0ZW4gdG8gZGlzawogICAgICogb24gYSBtYWpvcml0eSBvZiBub2RlcyBpbiB0aGUgY2x1c3Rlci4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFBFUlNJU1RfVE9fTUFKT1JJVFkgPSAzOwp9CgpjbGFzcyBUb3VjaE9wdGlvbnMKewogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBvcGVyYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBvcGVyYXRpb24gdGltZW91dCB0byBhcHBseQogICAgICogQHJldHVybiBUb3VjaE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRhcmcpOiBUb3VjaE9wdGlvbnMge30KfQoKY2xhc3MgSW5jcmVtZW50T3B0aW9ucwp7CiAgICAvKioKICAgICAqIFNldHMgdGhlIG9wZXJhdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRhcmcgdGhlIG9wZXJhdGlvbiB0aW1lb3V0IHRvIGFwcGx5CiAgICAgKiBAcmV0dXJuIEluY3JlbWVudE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRpbWVvdXQoaW50ICRhcmcpOiBJbmNyZW1lbnRPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBleHBpcnkgdGltZSBmb3IgdGhlIGRvY3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBpbnR8RGF0ZVRpbWVJbnRlcmZhY2UgJGFyZyB0aGUgcmVsYXRpdmUgZXhwaXJ5IHRpbWUgaW4gc2Vjb25kcyBvciBEYXRlVGltZUludGVyZmFjZSBvYmplY3QgZm9yIGFic29sdXRlIHBvaW50IGluIHRpbWUKICAgICAqIEByZXR1cm4gSW5jcmVtZW50T3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwaXJ5KG1peGVkICRhcmcpOiBJbmNyZW1lbnRPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBkdXJhYmlsaXR5IGxldmVsIHRvIGVuZm9yY2Ugd2hlbiB3cml0aW5nIHRoZSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRhcmcgdGhlIGR1cmFiaWxpdHkgbGV2ZWwgdG8gZW5mb3JjZQogICAgICogQHJldHVybiBJbmNyZW1lbnRPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkdXJhYmlsaXR5TGV2ZWwoaW50ICRhcmcpOiBJbmNyZW1lbnRPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgdGhlIGNvdW50ZXIgYnkuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgYnkKICAgICAqIEByZXR1cm4gSW5jcmVtZW50T3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsdGEoaW50ICRhcmcpOiBJbmNyZW1lbnRPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSB2YWx1ZSB0byBpbml0aWFsaXplIHRoZSBjb3VudGVyIHRvIGlmIHRoZSBkb2N1bWVudCBkb2VzCiAgICAgKiBub3QgZXhpc3QuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBpbml0aWFsIHZhbHVlIHRvIHVzZSBpZiBjb3VudGVyIGRvZXMgbm90IGV4aXN0CiAgICAgKiBAcmV0dXJuIEluY3JlbWVudE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluaXRpYWwoaW50ICRhcmcpOiBJbmNyZW1lbnRPcHRpb25zIHt9Cn0KCmNsYXNzIERlY3JlbWVudE9wdGlvbnMKewogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBvcGVyYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBvcGVyYXRpb24gdGltZW91dCB0byBhcHBseQogICAgICogQHJldHVybiBEZWNyZW1lbnRPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aW1lb3V0KGludCAkYXJnKTogRGVjcmVtZW50T3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgZXhwaXJ5IHRpbWUgZm9yIHRoZSBkb2N1bWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50fERhdGVUaW1lSW50ZXJmYWNlICRhcmcgdGhlIHJlbGF0aXZlIGV4cGlyeSB0aW1lIGluIHNlY29uZHMgb3IgRGF0ZVRpbWVJbnRlcmZhY2Ugb2JqZWN0IGZvciBhYnNvbHV0ZSBwb2ludCBpbiB0aW1lCiAgICAgKiBAcmV0dXJuIERlY3JlbWVudE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cGlyeShtaXhlZCAkYXJnKTogRGVjcmVtZW50T3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgZHVyYWJpbGl0eSBsZXZlbCB0byBlbmZvcmNlIHdoZW4gd3JpdGluZyB0aGUgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBkdXJhYmlsaXR5IGxldmVsIHRvIGVuZm9yY2UKICAgICAqIEByZXR1cm4gRGVjcmVtZW50T3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHVyYWJpbGl0eUxldmVsKGludCAkYXJnKTogRGVjcmVtZW50T3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgdmFsdWUgdG8gZGVjcmVtZW50IHRoZSBjb3VudGVyIGJ5LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgdmFsdWUgdG8gZGVjcmVtZW50IGJ5CiAgICAgKiBAcmV0dXJuIERlY3JlbWVudE9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlbHRhKGludCAkYXJnKTogRGVjcmVtZW50T3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgdmFsdWUgdG8gaW5pdGlhbGl6ZSB0aGUgY291bnRlciB0byBpZiB0aGUgZG9jdW1lbnQgZG9lcwogICAgICogbm90IGV4aXN0LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgaW5pdGlhbCB2YWx1ZSB0byB1c2UgaWYgY291bnRlciBkb2VzIG5vdCBleGlzdAogICAgICogQHJldHVybiBEZWNyZW1lbnRPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbml0aWFsKGludCAkYXJnKTogRGVjcmVtZW50T3B0aW9ucyB7fQp9CgpjbGFzcyBSZW1vdmVPcHRpb25zCnsKICAgIC8qKgogICAgICogU2V0cyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgdG8gYXBwbHkKICAgICAqIEByZXR1cm4gUmVtb3ZlT3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGltZW91dChpbnQgJGFyZyk6IFJlbW92ZU9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGR1cmFiaWxpdHkgbGV2ZWwgdG8gZW5mb3JjZSB3aGVuIHdyaXRpbmcgdGhlIGRvY3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgZHVyYWJpbGl0eSBsZXZlbCB0byBlbmZvcmNlCiAgICAgKiBAcmV0dXJuIFJlbW92ZU9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGR1cmFiaWxpdHlMZXZlbChpbnQgJGFyZyk6IFJlbW92ZU9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGNhcyB2YWx1ZSB0byB1c2Ugd2hlbiBwZXJmb3JtaW5nIHRoaXMgb3BlcmF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFyZyB0aGUgY2FzIHZhbHVlIHRvIHVzZQogICAgICogQHJldHVybiBSZW1vdmVPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYXMoc3RyaW5nICRhcmcpOiBSZW1vdmVPcHRpb25zIHt9Cn0KCmNsYXNzIExvb2t1cEluT3B0aW9ucwp7CiAgICAvKioKICAgICAqIFNldHMgdGhlIG9wZXJhdGlvbiB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRhcmcgdGhlIG9wZXJhdGlvbiB0aW1lb3V0IHRvIGFwcGx5CiAgICAgKiBAcmV0dXJuIExvb2t1cEluT3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGltZW91dChpbnQgJGFyZyk6IExvb2t1cEluT3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB3aGV0aGVyIHRvIGluY2x1ZGUgZG9jdW1lbnQgZXhwaXJ5IHdpdGggdGhlIGRvY3VtZW50IGNvbnRlbnQuCiAgICAgKgogICAgICogV2hlbiB1c2VkIHRoaXMgb3B0aW9uIHdpbGwgYWRkIG9uZSBleHRyYSBzdWJkb2N1bWVudCBwYXRoIGludG8KICAgICAqIHRoZSBMb29rdXBJbiBvcGVyYXRpb24uIFRoaXMgY2FuIGNhdXNlIHRoZSBzZXQgb2Ygc3ViZG9jdW1lbnQgcGF0aHMKICAgICAqIHRvIGV4Y2VlZCB0aGUgbWF4aW11bSBudW1iZXIgKDE2KSBvZiBwYXRocyBhbGxvd2VkIGluIGEgc3ViZG9jdW1lbnQKICAgICAqIG9wZXJhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkYXJnIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgZG9jdW1lbnQgZXhwaXJ5CiAgICAgKiBAcmV0dXJuIExvb2t1cEluT3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEV4cGlyeShib29sICRhcmcpOiBMb29rdXBJbk9wdGlvbnMge30KfQoKY2xhc3MgTXV0YXRlSW5PcHRpb25zCnsKICAgIC8qKgogICAgICogU2V0cyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgdG8gYXBwbHkKICAgICAqIEByZXR1cm4gTXV0YXRlSW5PcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aW1lb3V0KGludCAkYXJnKTogTXV0YXRlSW5PcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBjYXMgdmFsdWUgdG8gdXNlIHdoZW4gcGVyZm9ybWluZyB0aGlzIG9wZXJhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhcmcgdGhlIGNhcyB2YWx1ZSB0byB1c2UKICAgICAqIEByZXR1cm4gTXV0YXRlSW5PcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYXMoc3RyaW5nICRhcmcpOiBNdXRhdGVJbk9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGV4cGlyeSB0aW1lIGZvciB0aGUgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIGludHxEYXRlVGltZUludGVyZmFjZSAkYXJnIHRoZSByZWxhdGl2ZSBleHBpcnkgdGltZSBpbiBzZWNvbmRzIG9yIERhdGVUaW1lSW50ZXJmYWNlIG9iamVjdCBmb3IgYWJzb2x1dGUgcG9pbnQgaW4gdGltZQogICAgICogQHJldHVybiBNdXRhdGVJbk9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cGlyeShtaXhlZCAkYXJnKTogTXV0YXRlSW5PcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIG9yaWdpbmFsIGV4cGlyYXRpb24gc2hvdWxkIGJlIHByZXNlcnZlZCAoYnkgZGVmYXVsdCBSZXBsYWNlIG9wZXJhdGlvbiB1cGRhdGVzIGV4cGlyYXRpb24pLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRzaG91bGRQcmVzZXJ2ZSBpZiB0cnVlLCB0aGUgZXhwaXJhdGlvbiB0aW1lIHdpbGwgbm90IGJlIHVwZGF0ZWQKICAgICAqIEByZXR1cm4gTXV0YXRlSW5PcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVzZXJ2ZUV4cGlyeShib29sICRzaG91bGRQcmVzZXJ2ZSk6IE11dGF0ZUluT3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgZHVyYWJpbGl0eSBsZXZlbCB0byBlbmZvcmNlIHdoZW4gd3JpdGluZyB0aGUgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBkdXJhYmlsaXR5IGxldmVsIHRvIGVuZm9yY2UKICAgICAqIEByZXR1cm4gTXV0YXRlSW5PcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkdXJhYmlsaXR5TGV2ZWwoaW50ICRhcmcpOiBNdXRhdGVJbk9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGRvY3VtZW50IGxldmVsIGFjdGlvbiB0byB1c2Ugd2hlbiBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBzdG9yZSBzZW1hbnRpYyB0byB1c2UKICAgICAqIEByZXR1cm4gTXV0YXRlSW5PcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdG9yZVNlbWFudGljcyhpbnQgJGFyZyk6IE11dGF0ZUluT3B0aW9ucyB7fQp9CgovKioKICogQW4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGhvdyB0byBkZWZpbmUgdGhlIGRvY3VtZW50IGxldmVsIGFjdGlvbiB0byB0YWtlCiAqIGR1cmluZyBhIE11dGF0ZUluIG9wZXJhdGlvbi4KICovCmludGVyZmFjZSBTdG9yZVNlbWFudGljcwp7CiAgICAvKioKICAgICAqIFJlcGxhY2UgdGhlIGRvY3VtZW50LCBhbmQgZmFpbCBpZiBpdCBkb2VzIG5vdCBleGlzdC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFUExBQ0UgPSAwOwoKICAgIC8qKgogICAgICogUmVwbGFjZSB0aGUgZG9jdW1lbnQgb3IgY3JlYXRlIGl0IGlmIGl0IGRvZXMgbm90IGV4aXN0LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgVVBTRVJUID0gMTsKCiAgICAvKioKICAgICAqIENyZWF0ZSB0aGUgZG9jdW1lbnQgb3IgZmFpbCBpZiBpdCBhbHJlYWR5IGV4aXN0cy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElOU0VSVCA9IDI7Cn0KCmNsYXNzIFZpZXdPcHRpb25zCnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0aW1lb3V0KGludCAkYXJnKTogVmlld09wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5jbHVkZURvY3VtZW50cyhib29sICRhcmcsIGludCAkbWF4Q29uY3VycmVudERvY3VtZW50cyA9IDEwKTogVmlld09wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCRhcmcpOiBWaWV3T3B0aW9ucyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBrZXlzKGFycmF5ICRhcmdzKTogVmlld09wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gbGltaXQoaW50ICRhcmcpOiBWaWV3T3B0aW9ucyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBza2lwKGludCAkYXJnKTogVmlld09wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2NhbkNvbnNpc3RlbmN5KGludCAkYXJnKTogVmlld09wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gb3JkZXIoaW50ICRhcmcpOiBWaWV3T3B0aW9ucyB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWR1Y2UoYm9vbCAkYXJnKTogVmlld09wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ3JvdXAoYm9vbCAkYXJnKTogVmlld09wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ3JvdXBMZXZlbChpbnQgJGFyZyk6IFZpZXdPcHRpb25zIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHJhbmdlKCRzdGFydCwgJGVuZCwgJGluY2x1c2l2ZUVuZCA9IGZhbHNlKTogVmlld09wdGlvbnMge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gaWRSYW5nZSgkc3RhcnQsICRlbmQsICRpbmNsdXNpdmVFbmQgPSBmYWxzZSk6IFZpZXdPcHRpb25zIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHJhdyhzdHJpbmcgJGtleSwgJHZhbHVlKTogVmlld09wdGlvbnMge30KfQoKaW50ZXJmYWNlIFZpZXdDb25zaXN0ZW5jeQp7CiAgICBwdWJsaWMgY29uc3QgTk9UX0JPVU5ERUQgPSAwOwogICAgcHVibGljIGNvbnN0IFJFUVVFU1RfUExVUyA9IDE7CiAgICBwdWJsaWMgY29uc3QgVVBEQVRFX0FGVEVSID0gMjsKfQoKaW50ZXJmYWNlIFZpZXdPcmRlcmluZwp7CiAgICBwdWJsaWMgY29uc3QgQVNDRU5ESU5HID0gMDsKICAgIHB1YmxpYyBjb25zdCBERVNDRU5ESU5HID0gMTsKfQoKY2xhc3MgUXVlcnlPcHRpb25zCnsKICAgIC8qKgogICAgICogU2V0cyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgb3BlcmF0aW9uIHRpbWVvdXQgdG8gYXBwbHkKICAgICAqIEByZXR1cm4gUXVlcnlPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aW1lb3V0KGludCAkYXJnKTogUXVlcnlPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBtdXRhdGlvbiBzdGF0ZSB0byBhY2hpZXZlIGNvbnNpc3RlbmN5IHdpdGggZm9yIHJlYWQgeW91ciBvd24gd3JpdGVzIChSWU9XKS4KICAgICAqCiAgICAgKiBAcGFyYW0gTXV0YXRpb25TdGF0ZSAkYXJnIHRoZSBtdXRhdGlvbiBzdGF0ZSB0byBhY2hpZXZlIGNvbnNpc3RlbmN5IHdpdGgKICAgICAqIEByZXR1cm4gUXVlcnlPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb25zaXN0ZW50V2l0aChNdXRhdGlvblN0YXRlICRhcmcpOiBRdWVyeU9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIHNjYW4gY29uc2lzdGVuY3kuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBzY2FuIGNvbnNpc3RlbmN5IGxldmVsCiAgICAgKiBAcmV0dXJuIFF1ZXJ5T3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2NhbkNvbnNpc3RlbmN5KGludCAkYXJnKTogUXVlcnlPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBtYXhpbXVtIGJ1ZmZlcmVkIGNoYW5uZWwgc2l6ZSBiZXR3ZWVuIHRoZSBpbmRleGVyIGNsaWVudCBhbmQgdGhlIHF1ZXJ5IHNlcnZpY2UgZm9yIGluZGV4IHNjYW5zLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFyZyB0aGUgbWF4aW11bSBidWZmZXJlZCBjaGFubmVsIHNpemUKICAgICAqIEByZXR1cm4gUXVlcnlPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzY2FuQ2FwKGludCAkYXJnKTogUXVlcnlPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyBlYWNoIGV4ZWN1dGlvbiBvcGVyYXRvciBjYW4gYnVmZmVyIGJldHdlZW4gdmFyaW91cyBvcGVyYXRvcnMuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyBlYWNoIGV4ZWN1dGlvbiBvcGVyYXRpb24gY2FuIGJ1ZmZlcgogICAgICogQHJldHVybiBRdWVyeU9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBpcGVsaW5lQ2FwKGludCAkYXJnKTogUXVlcnlPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgaXRlbXMgZXhlY3V0aW9uIG9wZXJhdG9ycyBjYW4gYmF0Y2ggZm9yIGZldGNoIGZyb20gdGhlIEtWIHNlcnZpY2UuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBwaXBlbGluZSBiYXRjaCBzaXplCiAgICAgKiBAcmV0dXJuIFF1ZXJ5T3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGlwZWxpbmVCYXRjaChpbnQgJGFyZyk6IFF1ZXJ5T3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5kZXggcGFydGl0aW9ucywgZm9yIGNvbXB1dGluZyBhZ2dyZWdhdGlvbiBpbiBwYXJhbGxlbC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRhcmcgdGhlIG51bWJlciBvZiBpbmRleCBwYXJ0aXRpb25zCiAgICAgKiBAcmV0dXJuIFF1ZXJ5T3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWF4UGFyYWxsZWxpc20oaW50ICRhcmcpOiBRdWVyeU9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIHF1ZXJ5IHByb2ZpbGUgbW9kZSB0byB1c2UuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkYXJnIHRoZSBxdWVyeSBwcm9maWxlIG1vZGUKICAgICAqIEByZXR1cm4gUXVlcnlPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9maWxlKGludCAkYXJnKTogUXVlcnlPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHdoZXRoZXIgb3Igbm90IHRoaXMgcXVlcnkgaXMgcmVhZG9ubHkuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGFyZyB3aGV0aGVyIHRoZSBxdWVyeSBpcyByZWFkb25seQogICAgICogQHJldHVybiBRdWVyeU9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRvbmx5KGJvb2wgJGFyZyk6IFF1ZXJ5T3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB3aGV0aGVyIG9yIG5vdCB0aGlzIHF1ZXJ5IGFsbG93ZWQgdG8gdXNlIEZsZXhJbmRleCAoZnVsbCB0ZXh0IHNlYXJjaCBpbnRlZ3JhdGlvbikuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGFyZyB3aGV0aGVyIHRoZSBGbGV4SW5kZXggYWxsb3dlZAogICAgICogQHJldHVybiBRdWVyeU9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZsZXhJbmRleChib29sICRhcmcpOiBRdWVyeU9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgd2hldGhlciBvciBub3QgdGhpcyBxdWVyeSBpcyBhZGhvYy4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkYXJnIHdoZXRoZXIgdGhlIHF1ZXJ5IGlzIGFkaG9jCiAgICAgKiBAcmV0dXJuIFF1ZXJ5T3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRob2MoYm9vbCAkYXJnKTogUXVlcnlPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBuYW1lZCBwYXJhbWV0ZXJzIGZvciB0aGlzIHF1ZXJ5LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFpcnMgdGhlIGFzc29jaWF0aXZlIGFycmF5IG9mIHBhcmFtZXRlcnMKICAgICAqIEByZXR1cm4gUXVlcnlPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuYW1lZFBhcmFtZXRlcnMoYXJyYXkgJHBhaXJzKTogUXVlcnlPcHRpb25zIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHRoaXMgcXVlcnkuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRhcmdzIHRoZSBhcnJheSBvZiBwYXJhbWV0ZXJzCiAgICAgKiBAcmV0dXJuIFF1ZXJ5T3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9zaXRpb25hbFBhcmFtZXRlcnMoYXJyYXkgJGFyZ3MpOiBRdWVyeU9wdGlvbnMge30KCiAgICAvKioKICAgICAqIFNldHMgYW55IGV4dHJhIHF1ZXJ5IHBhcmFtZXRlcnMgdGhhdCB0aGUgU0RLIGRvZXMgbm90IHByb3ZpZGUgYW4gb3B0aW9uIGZvci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlcgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIKICAgICAqIEByZXR1cm4gUXVlcnlPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByYXcoc3RyaW5nICRrZXksICR2YWx1ZSk6IFF1ZXJ5T3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgY2xpZW50IGNvbnRleHQgaWQgZm9yIHRoaXMgcXVlcnkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkYXJnIHRoZSBjbGllbnQgY29udGV4dCBpZAogICAgICogQHJldHVybiBRdWVyeU9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsaWVudENvbnRleHRJZChzdHJpbmcgJGFyZyk6IFF1ZXJ5T3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogU2V0cyB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gbWV0cmljcyB3aXRoIHRoZSBxdWVyeS4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkYXJnIHdoZXRoZXIgdG8gcmV0dXJuIG1ldHJpY3MKICAgICAqIEByZXR1cm4gUXVlcnlPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtZXRyaWNzKGJvb2wgJGFyZyk6IFF1ZXJ5T3B0aW9ucyB7fQoKICAgIC8qKgogICAgICogQXNzb2NpYXRlIHNjb3BlIG5hbWUgd2l0aCBxdWVyeQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFyZyB0aGUgbmFtZSBvZiB0aGUgc2NvcGUKICAgICAqIEByZXR1cm4gUXVlcnlPcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzY29wZU5hbWUoc3RyaW5nICRhcmcpOiBRdWVyeU9wdGlvbnMge30KCiAgICAvKioKICAgICAqIEFzc29jaWF0ZSBzY29wZSBxdWFsaWZpZXIgKGFsc28ga25vd24gYXMgYHF1ZXJ5X2NvbnRleHRgKSB3aXRoIHRoZSBxdWVyeS4KICAgICAqCiAgICAgKiBUaGUgcXVhbGlmaWVyIG11c3QgYmUgaW4gZm9ybSBgJHtidWNrZXROYW1lfS4ke3Njb3BlTmFtZX1gIG9yIGBkZWZhdWx0OiR7YnVja2V0TmFtZX0uJHtzY29wZU5hbWV9YAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFyZyB0aGUgc2NvcGUgcXVhbGlmaWVyCiAgICAgKiBAcmV0dXJuIFF1ZXJ5T3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2NvcGVRdWFsaWZpZXIoc3RyaW5nICRhcmcpOiBRdWVyeU9wdGlvbnMge30KfQoKLyoqCiAqIFNldCBvZiB2YWx1ZXMgZm9yIHRoZSBzY2FuIGNvbnNpc3RlbmN5IGxldmVsIG9mIGEgcXVlcnkuCiAqLwppbnRlcmZhY2UgUXVlcnlTY2FuQ29uc2lzdGVuY3kKewogICAgLyoqCiAgICAgKiBTZXQgc2NhbiBjb25zaXN0ZW5jeSB0byBub3QgYm91bmRlZAogICAgICovCiAgICBwdWJsaWMgY29uc3QgTk9UX0JPVU5ERUQgPSAxOwoKICAgIC8qKgogICAgICogU2V0IHNjYW4gY29uc2lzdGVuY3kgdG8gbm90IHJlcXVlc3QgcGx1cwogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVRVUVTVF9QTFVTID0gMjsKCiAgICAvKioKICAgICAqIFNldCBzY2FuIGNvbnNpc3RlbmN5IHRvIHN0YXRlbWVudCBwbHVzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTVEFURU1FTlRfUExVUyA9IDM7Cn0KCi8qKgogKiBTZXQgb2YgdmFsdWVzIGZvciBzZXR0aW5nIHRoZSBwcm9maWxlIG1vZGUgb2YgYSBxdWVyeS4KICovCmludGVyZmFjZSBRdWVyeVByb2ZpbGUKewogICAgLyoqCiAgICAgKiBTZXQgcHJvZmlsaW5nIHRvIG9mZgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT0ZGID0gMTsKCiAgICAvKioKICAgICAqIFNldCBwcm9maWxpbmcgdG8gaW5jbHVkZSBwaGFzZSB0aW1pbmdzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQSEFTRVMgPSAyOwoKICAgIC8qKgogICAgICogU2V0IHByb2ZpbGluZyB0byBpbmNsdWRlIGV4ZWN1dGlvbiB0aW1pbmdzCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBUSU1JTkdTID0gMzsKfQoKY2xhc3MgQ2x1c3Rlck9wdGlvbnMKewogICAgcHVibGljIGZ1bmN0aW9uIGNyZWRlbnRpYWxzKHN0cmluZyAkdXNlcm5hbWUsIHN0cmluZyAkcGFzc3dvcmQpOiBDbHVzdGVyT3B0aW9ucyB7fQp9CgovKioKICogUHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciByZWNvcmRpbmcgdmFsdWVzLgogKi8KaW50ZXJmYWNlIFZhbHVlUmVjb3JkZXIKewogICAgLyoqCiAgICAgKiBSZWNvcmRzIGEgbmV3IHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHZhbHVlIFRoZSB2YWx1ZSB0byByZWNvcmQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWNvcmRWYWx1ZShpbnQgJHZhbHVlKTogdm9pZDsKfQoKLyoqCiAqIFByb3ZpZGVycyBhbiBpbnRlcmZhY2UgdG8gY3JlYXRlIHZhbHVlIHJlY29yZGVycyBmb3IgcmVjb3JkaW5nIG1ldHJpY3MuCiAqLwppbnRlcmZhY2UgTWV0ZXIKewogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IHZhbHVlIHJlY29yZGVyIGZvciBhIG1ldHJpYyB3aXRoIHRoZSBzcGVjaWZpZWQgdGFncy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoZSBtZXRyaWMuCiAgICAgKiBAcGFyYW0gYXJyYXkgJHRhZ3MgVGhlIHRhZ3MgdG8gYXNzb2NpYXRlIHdpdGggdGhlIG1ldHJpYy4KICAgICAqCiAgICAgKiBAcmV0dXJuIFZhbHVlUmVjb3JkZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbHVlUmVjb3JkZXIoc3RyaW5nICRuYW1lLCBhcnJheSAkdGFncyk6IFZhbHVlUmVjb3JkZXI7Cn0KCi8qKgogKiBJbXBsZW1lbnRzIGEgbm8tb3AgbWV0ZXIgd2hpY2ggcGVyZm9ybXMgbm8gbWV0cmljcyBpbnN0cnVtZW50YXRpb24uICBOb3RlIHRoYXQKICogdG8gcmVkdWNlIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgdXNpbmcgdGhpcyBtZXRlciwgdGhpcyBjbGFzcyBpcyBub3QKICogYWN0dWFsbHkgdXNlZCBieSB0aGUgU0RLLCBhbmQgc2ltcGx5IGFjdHMgYXMgYSBwbGFjZWhvbGRlciB3aGljaCB0cmlnZ2VycyBhCiAqIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2VkIGluc3RlYWQuCiAqLwpjbGFzcyBOb29wTWV0ZXIgaW1wbGVtZW50cyBNZXRlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsdWVSZWNvcmRlcihzdHJpbmcgJG5hbWUsIGFycmF5ICR0YWdzKTogVmFsdWVSZWNvcmRlciB7fQp9CgovKioKICogSW1wbGVtZW50cyBhIGRlZmF1bHQgbWV0ZXIgd2hpY2ggbG9ncyBtZXRyaWNzIG9uIGEgcmVndWxhciBiYXNpcy4gIE5vdGUgdGhhdAogKiB0byByZWR1Y2UgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB1c2luZyB0aGlzIG1ldGVyLCB0aGlzIGNsYXNzIGlzIG5vdAogKiBhY3R1YWxseSB1c2VkIGJ5IHRoZSBTREssIGFuZCBzaW1wbHkgYWN0cyBhcyBhIHBsYWNlaG9sZGVyIHdoaWNoIHRyaWdnZXJzIGEKICogbmF0aXZlIGltcGxlbWVudGF0aW9uIHRvIGJlIHVzZWQgaW5zdGVhZC4KICovCmNsYXNzIExvZ2dpbmdNZXRlciBpbXBsZW1lbnRzIE1ldGVyCnsKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkZHVyYXRpb24gZHVyYXRpb24gaW4gbWljcm9zZWNvbmRzIGhvdyBvZnRlbiB0aGUgbWV0cmljcyBzaG91bGQgYmUgZmx1c2hlZCBpbiB0aGUgbG9nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmx1c2hJbnRlcnZhbChpbnQgJGR1cmF0aW9uKTogTG9nZ2luZ01ldGVyIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHZhbHVlUmVjb3JkZXIoc3RyaW5nICRuYW1lLCBhcnJheSAkdGFncyk6IFZhbHVlUmVjb3JkZXIge30KfQoKLyoqCiAqIFJlcHJlc2VudHMgYSBzcGFuIG9mIHRpbWUgYW4gZXZlbnQgb2NjdXJzIG92ZXIuCiAqLwppbnRlcmZhY2UgUmVxdWVzdFNwYW4KewogICAgLyoqCiAgICAgKiBBZGRzIGFuIHRhZyB0byB0aGlzIHNwYW4uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgb2YgdGhlIHRhZyB0byBhZGQuCiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgdGFnLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkVGFnKHN0cmluZyAka2V5LCAkdmFsdWUpOiB2b2lkOwoKICAgIC8qKgogICAgICogRW5kcyB0aGlzIHNwYW4uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmQoKTogdm9pZDsKfQoKLyoqCiAqIFJlcHJlc2VudHMgYSB0cmFjZXIgY2FwYWJsZSBvZiBjcmVhdGluZyB0cmFjZSBzcGFucy4KICovCmludGVyZmFjZSBSZXF1ZXN0VHJhY2VyCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyByZXF1ZXN0IHNwYW4uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgc3Bhbi4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGFyZW50IFRoZSBwYXJlbnQgb2YgdGhlIHNwYW4sIGlmIG9uZSBleGlzdHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXF1ZXN0U3BhbihzdHJpbmcgJG5hbWUsIFJlcXVlc3RTcGFuICRwYXJlbnQgPSBudWxsKTsKfQoKLyoqCiAqIFRoaXMgaW1wbGVtZW50cyBhIGJhc2ljIGRlZmF1bHQgdHJhY2VyIHdoaWNoIGtlZXBzIHRyYWNrIG9mIG9wZXJhdGlvbnMKICogd2hpY2ggZmFsbHMgb3V0c2lkZSBhIHNwZWNpZmllZCB0aHJlc2hvbGQuICBOb3RlIHRoYXQgdG8gcmVkdWNlIHRoZQogKiBwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgdXNpbmcgdGhpcyB0cmFjZXIsIHRoaXMgY2xhc3MgaXMgbm90IGFjdHVhbGx5CiAqIHVzZWQgYnkgdGhlIFNESywgYW5kIHNpbXBseSBhY3RzIGFzIGEgcGxhY2Vob2xkZXIgd2hpY2ggdHJpZ2dlcnMgYQogKiBuYXRpdmUgaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZCBpbnN0ZWFkLgogKi8KY2xhc3MgVGhyZXNob2xkTG9nZ2luZ1RyYWNlciBpbXBsZW1lbnRzIFJlcXVlc3RUcmFjZXIKewogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3RTcGFuKHN0cmluZyAkbmFtZSwgUmVxdWVzdFNwYW4gJHBhcmVudCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZpZXMgaG93IG9mdGVuIGFnZ3JlZ2F0ZWQgdHJhY2UgaW5mb3JtYXRpb24gc2hvdWxkIGJlIGxvZ2dlZCwKICAgICAqIHNwZWNpZmllZCBpbiBtaWNyb3NlY29uZHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbWl0SW50ZXJ2YWwoaW50ICRkdXJhdGlvbikge30KCiAgICAvKioKICAgICAqIFNwZWNpZmllcyB0aGUgdGhyZXNob2xkIGZvciB3aGVuIGEga3YgcmVxdWVzdCBzaG91bGQgYmUgaW5jbHVkZWQKICAgICAqIGluIHRoZSBhZ2dyZWdhdGVkIG1ldHJpY3MsIHNwZWNpZmllZCBpbiBtaWNyb3NlY29uZHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrdlRocmVzaG9sZChpbnQgJGR1cmF0aW9uKSB7fQoKICAgIC8qKgogICAgICogU3BlY2lmaWVzIHRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gYSBxdWVyeSByZXF1ZXN0IHNob3VsZCBiZSBpbmNsdWRlZAogICAgICogaW4gdGhlIGFnZ3JlZ2F0ZWQgbWV0cmljcywgc3BlY2lmaWVkIGluIG1pY3Jvc2Vjb25kcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHF1ZXJ5VGhyZXNob2xkKGludCAkZHVyYXRpb24pIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZpZXMgdGhlIHRocmVzaG9sZCBmb3Igd2hlbiBhIHZpZXdzIHJlcXVlc3Qgc2hvdWxkIGJlIGluY2x1ZGVkCiAgICAgKiBpbiB0aGUgYWdncmVnYXRlZCBtZXRyaWNzLCBzcGVjaWZpZWQgaW4gbWljcm9zZWNvbmRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmlld3NUaHJlc2hvbGQoaW50ICRkdXJhdGlvbikge30KCiAgICAvKioKICAgICAqIFNwZWNpZmllcyB0aGUgdGhyZXNob2xkIGZvciB3aGVuIGEgc2VhcmNoIHJlcXVlc3Qgc2hvdWxkIGJlIGluY2x1ZGVkCiAgICAgKiBpbiB0aGUgYWdncmVnYXRlZCBtZXRyaWNzLCBzcGVjaWZpZWQgaW4gbWljcm9zZWNvbmRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VhcmNoVGhyZXNob2xkKGludCAkZHVyYXRpb24pIHt9CgogICAgLyoqCiAgICAgKiBTcGVjaWZpZXMgdGhlIHRocmVzaG9sZCBmb3Igd2hlbiBhbiBhbmFseXRpY3MgcmVxdWVzdCBzaG91bGQgYmUgaW5jbHVkZWQKICAgICAqIGluIHRoZSBhZ2dyZWdhdGVkIG1ldHJpY3MsIHNwZWNpZmllZCBpbiBtaWNyb3NlY29uZHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbmFseXRpY3NUaHJlc2hvbGQoaW50ICRkdXJhdGlvbikge30KCiAgICAvKioKICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd2hpY2ggc2hvdWxkIGJlIGtlcHQgYmV0d2VlbiBlYWNoCiAgICAgKiBsb2dnaW5nIGludGVydmFsLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2FtcGxlU2l6ZShpbnQgJHNpemUpIHt9Cn0KCi8qKgogKiBJbXBsZW1lbnRzIGEgbm8tb3AgdHJhY2VyIHdoaWNoIHBlcmZvcm1zIG5vIHdvcmsuICBOb3RlIHRoYXQgdG8gcmVkdWNlIHRoZQogKiBwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgdXNpbmcgdGhpcyB0cmFjZXIsIHRoaXMgY2xhc3MgaXMgbm90IGFjdHVhbGx5CiAqIHVzZWQgYnkgdGhlIFNESywgYW5kIHNpbXBseSBhY3RzIGFzIGEgcGxhY2Vob2xkZXIgd2hpY2ggdHJpZ2dlcnMgYQogKiBuYXRpdmUgaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZCBpbnN0ZWFkLgogKi8KY2xhc3MgTm9vcFRyYWNlciBpbXBsZW1lbnRzIFJlcXVlc3RUcmFjZXIKewogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3RTcGFuKHN0cmluZyAkbmFtZSwgUmVxdWVzdFNwYW4gJHBhcmVudCA9IG51bGwpIHt9Cn0KCi8qKgogKiB2aW06IHRzPTQgc3RzPTQgc3c9NCBldAogKi8KPD9waHAKCi8vIFN0YXJ0IG9mIG1lbWNhY2hlZCB2LjMuMS41CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cRGVwcmVjYXRlZDsKCi8qKgogKiBSZXByZXNlbnRzIGEgY29ubmVjdGlvbiB0byBhIHNldCBvZiBtZW1jYWNoZWQgc2VydmVycy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5tZW1jYWNoZWQucGhwCiAqLwpjbGFzcyBNZW1jYWNoZWQKewogICAgLyoqCiAgICAgKiA8cD5FbmFibGVzIG9yIGRpc2FibGVzIHBheWxvYWQgY29tcHJlc3Npb24uIFdoZW4gZW5hYmxlZCwKICAgICAqIGl0ZW0gdmFsdWVzIGxvbmdlciB0aGFuIGEgY2VydGFpbiB0aHJlc2hvbGQgKGN1cnJlbnRseSAxMDAgYnl0ZXMpIHdpbGwgYmUKICAgICAqIGNvbXByZXNzZWQgZHVyaW5nIHN0b3JhZ2UgYW5kIGRlY29tcHJlc3NlZCBkdXJpbmcgcmV0cmlldmFsCiAgICAgKiB0cmFuc3BhcmVudGx5LjwvcD4KICAgICAqIDxwPlR5cGU6IGJvb2xlYW4sIGRlZmF1bHQ6IDxiPlRSVUU8L2I+LjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9DT01QUkVTU0lPTiA9IC0xMDAxOwogICAgcHVibGljIGNvbnN0IE9QVF9DT01QUkVTU0lPTl9UWVBFID0gLTEwMDQ7CgogICAgLyoqCiAgICAgKiA8cD5UaGlzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhICJkb21haW4iIGZvciB5b3VyIGl0ZW0ga2V5cy4gVGhlIHZhbHVlCiAgICAgKiBzcGVjaWZpZWQgaGVyZSB3aWxsIGJlIHByZWZpeGVkIHRvIGVhY2ggb2YgdGhlIGtleXMuIEl0IGNhbm5vdCBiZQogICAgICogbG9uZ2VyIHRoYW4gMTI4IGNoYXJhY3RlcnMgYW5kIHdpbGwgcmVkdWNlIHRoZQogICAgICogbWF4aW11bSBhdmFpbGFibGUga2V5IHNpemUuIFRoZSBwcmVmaXggaXMgYXBwbGllZCBvbmx5IHRvIHRoZSBpdGVtIGtleXMsCiAgICAgKiBub3QgdG8gdGhlIHNlcnZlciBrZXlzLjwvcD4KICAgICAqIDxwPlR5cGU6IHN0cmluZywgZGVmYXVsdDogIiIuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX1BSRUZJWF9LRVkgPSAtMTAwMjsKCiAgICAvKioKICAgICAqIDxwPgogICAgICogU3BlY2lmaWVzIHRoZSBzZXJpYWxpemVyIHRvIHVzZSBmb3Igc2VyaWFsaXppbmcgbm9uLXNjYWxhciB2YWx1ZXMuCiAgICAgKiBUaGUgdmFsaWQgc2VyaWFsaXplcnMgYXJlIDxiPk1lbWNhY2hlZDo6U0VSSUFMSVpFUl9QSFA8L2I+CiAgICAgKiBvciA8Yj5NZW1jYWNoZWQ6OlNFUklBTElaRVJfSUdCSU5BUlk8L2I+LiBUaGUgbGF0dGVyIGlzCiAgICAgKiBzdXBwb3J0ZWQgb25seSB3aGVuIG1lbWNhY2hlZCBpcyBjb25maWd1cmVkIHdpdGgKICAgICAqIC0tZW5hYmxlLW1lbWNhY2hlZC1pZ2JpbmFyeSBvcHRpb24gYW5kIHRoZQogICAgICogaWdiaW5hcnkgZXh0ZW5zaW9uIGlzIGxvYWRlZC4KICAgICAqIDwvcD4KICAgICAqIDxwPlR5cGU6IGludGVnZXIsIGRlZmF1bHQ6IDxiPk1lbWNhY2hlZDo6U0VSSUFMSVpFUl9QSFA8L2I+LjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9TRVJJQUxJWkVSID0gLTEwMDM7CgogICAgLyoqCiAgICAgKiA8cD5JbmRpY2F0ZXMgd2hldGhlciBpZ2JpbmFyeSBzZXJpYWxpemVyIHN1cHBvcnQgaXMgYXZhaWxhYmxlLjwvcD4KICAgICAqIDxwPlR5cGU6IGJvb2xlYW4uPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgSEFWRV9JR0JJTkFSWSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogPHA+SW5kaWNhdGVzIHdoZXRoZXIgSlNPTiBzZXJpYWxpemVyIHN1cHBvcnQgaXMgYXZhaWxhYmxlLjwvcD4KICAgICAqIDxwPlR5cGU6IGJvb2xlYW4uPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgSEFWRV9KU09OID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiA8cD5JbmRpY2F0ZXMgd2hldGhlciBtc2dwYWNrIHNlcmlhbGl6ZXIgc3VwcG9ydCBpcyBhdmFpbGFibGUuPC9wPgogICAgICogPHA+VHlwZTogYm9vbGVhbi48L3A+CiAgICAgKiBBdmFpbGFibGUgYXMgb2YgTWVtY2FjaGVkIDMuMC4wLgogICAgICogQHNpbmNlIDMuMC4wCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBIQVZFX01TR1BBQ0sgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIDxwPkluZGljYXRlIHdoZXRoZXIgc2V0X2VuY29kaW5nX2tleSBpcyBhdmFpbGFibGU8L3A+CiAgICAgKiA8cD5UeXBlOiBib29sZWFuLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waHAtbWVtY2FjaGVkLWRldi9waHAtbWVtY2FjaGVkL2Jsb2IvdjMuMS41L21lbWNhY2hlZC1hcGkucGhwLCBodHRwczovL2dpdGh1Yi5jb20vcGhwLW1lbWNhY2hlZC1kZXYvcGhwLW1lbWNhY2hlZC9ibG9iL3YzLjEuNS9waHBfbWVtY2FjaGVkLmMjTDQzODcKICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBVkVfRU5DT0RJTkcgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEZlYXR1cmUgc3VwcG9ydAogICAgICovCiAgICBwdWJsaWMgY29uc3QgSEFWRV9TRVNTSU9OID0gdHJ1ZTsKICAgIHB1YmxpYyBjb25zdCBIQVZFX1NBU0wgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIDxwPlNwZWNpZmllcyB0aGUgaGFzaGluZyBhbGdvcml0aG0gdXNlZCBmb3IgdGhlIGl0ZW0ga2V5cy4gVGhlIHZhbGlkCiAgICAgKiB2YWx1ZXMgYXJlIHN1cHBsaWVkIHZpYSA8Yj5NZW1jYWNoZWQ6OkhBU0hfKjwvYj4gY29uc3RhbnRzLgogICAgICogRWFjaCBoYXNoIGFsZ29yaXRobSBoYXMgaXRzIGFkdmFudGFnZXMgYW5kIGl0cyBkaXNhZHZhbnRhZ2VzLiBHbyB3aXRoIHRoZQogICAgICogZGVmYXVsdCBpZiB5b3UgZG9uJ3Qga25vdyBvciBkb24ndCBjYXJlLjwvcD4KICAgICAqIDxwPlR5cGU6IGludGVnZXIsIGRlZmF1bHQ6IDxiPk1lbWNhY2hlZDo6SEFTSF9ERUZBVUxUPC9iPjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9IQVNIID0gMjsKCiAgICAvKioKICAgICAqIDxwPlRoZSBkZWZhdWx0IChKZW5raW5zIG9uZS1hdC1hLXRpbWUpIGl0ZW0ga2V5IGhhc2hpbmcgYWxnb3JpdGhtLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBU0hfREVGQVVMVCA9IDA7CgogICAgLyoqCiAgICAgKiA8cD5NRDUgaXRlbSBrZXkgaGFzaGluZyBhbGdvcml0aG0uPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgSEFTSF9NRDUgPSAxOwoKICAgIC8qKgogICAgICogPHA+Q1JDIGl0ZW0ga2V5IGhhc2hpbmcgYWxnb3JpdGhtLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBU0hfQ1JDID0gMjsKCiAgICAvKioKICAgICAqIDxwPkZOVjFfNjQgaXRlbSBrZXkgaGFzaGluZyBhbGdvcml0aG0uPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgSEFTSF9GTlYxXzY0ID0gMzsKCiAgICAvKioKICAgICAqIDxwPkZOVjFfNjRBIGl0ZW0ga2V5IGhhc2hpbmcgYWxnb3JpdGhtLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEhBU0hfRk5WMUFfNjQgPSA0OwoKICAgIC8qKgogICAgICogPHA+Rk5WMV8zMiBpdGVtIGtleSBoYXNoaW5nIGFsZ29yaXRobS48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBIQVNIX0ZOVjFfMzIgPSA1OwoKICAgIC8qKgogICAgICogPHA+Rk5WMV8zMkEgaXRlbSBrZXkgaGFzaGluZyBhbGdvcml0aG0uPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgSEFTSF9GTlYxQV8zMiA9IDY7CgogICAgLyoqCiAgICAgKiA8cD5Ic2llaCBpdGVtIGtleSBoYXNoaW5nIGFsZ29yaXRobS48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBIQVNIX0hTSUVIID0gNzsKCiAgICAvKioKICAgICAqIDxwPk11cm11ciBpdGVtIGtleSBoYXNoaW5nIGFsZ29yaXRobS48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBIQVNIX01VUk1VUiA9IDg7CgogICAgLyoqCiAgICAgKiA8cD5TcGVjaWZpZXMgdGhlIG1ldGhvZCBvZiBkaXN0cmlidXRpbmcgaXRlbSBrZXlzIHRvIHRoZSBzZXJ2ZXJzLgogICAgICogQ3VycmVudGx5IHN1cHBvcnRlZCBtZXRob2RzIGFyZSBtb2R1bG8gYW5kIGNvbnNpc3RlbnQgaGFzaGluZy4gQ29uc2lzdGVudAogICAgICogaGFzaGluZyBkZWxpdmVycyBiZXR0ZXIgZGlzdHJpYnV0aW9uIGFuZCBhbGxvd3Mgc2VydmVycyB0byBiZSBhZGRlZCB0bwogICAgICogdGhlIGNsdXN0ZXIgd2l0aCBtaW5pbWFsIGNhY2hlIGxvc3Nlcy48L3A+CiAgICAgKiA8cD5UeXBlOiBpbnRlZ2VyLCBkZWZhdWx0OiA8Yj5NZW1jYWNoZWQ6OkRJU1RSSUJVVElPTl9NT0RVTEEuPC9iPjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9ESVNUUklCVVRJT04gPSA5OwoKICAgIC8qKgogICAgICogPHA+TW9kdWxvLWJhc2VkIGtleSBkaXN0cmlidXRpb24gYWxnb3JpdGhtLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IERJU1RSSUJVVElPTl9NT0RVTEEgPSAwOwoKICAgIC8qKgogICAgICogPHA+Q29uc2lzdGVudCBoYXNoaW5nIGtleSBkaXN0cmlidXRpb24gYWxnb3JpdGhtIChiYXNlZCBvbiBsaWJrZXRhbWEpLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IERJU1RSSUJVVElPTl9DT05TSVNURU5UID0gMTsKICAgIHB1YmxpYyBjb25zdCBESVNUUklCVVRJT05fVklSVFVBTF9CVUNLRVQgPSA2OwoKICAgIC8qKgogICAgICogPHA+RW5hYmxlcyBvciBkaXNhYmxlcyBjb21wYXRpYmlsaXR5IHdpdGggbGlia2V0YW1hLWxpa2UgYmVoYXZpb3IuIFdoZW4KICAgICAqIGVuYWJsZWQsIHRoZSBpdGVtIGtleSBoYXNoaW5nIGFsZ29yaXRobSBpcyBzZXQgdG8gTUQ1IGFuZCBkaXN0cmlidXRpb24gaXMKICAgICAqIHNldCB0byBiZSB3ZWlnaHRlZCBjb25zaXN0ZW50IGhhc2hpbmcgZGlzdHJpYnV0aW9uLiBUaGlzIGlzIHVzZWZ1bAogICAgICogYmVjYXVzZSBvdGhlciBsaWJrZXRhbWEtYmFzZWQgY2xpZW50cyAoUHl0aG9uLCBSdWJ5LCBldGMuKSB3aXRoIHRoZSBzYW1lCiAgICAgKiBzZXJ2ZXIgY29uZmlndXJhdGlvbiB3aWxsIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBrZXlzIHRyYW5zcGFyZW50bHkuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBlbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlCiAgICAgKiBjb25zaXN0ZW50IGhhc2hpbmcsIGFuZCBpdCBtYXkgYmUgZW5hYmxlZCBieSBkZWZhdWx0IGluIGZ1dHVyZQogICAgICogcmVsZWFzZXMuCiAgICAgKiA8L3A+CiAgICAgKiA8cD5UeXBlOiBib29sZWFuLCBkZWZhdWx0OiA8Yj5GQUxTRTwvYj4uPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX0xJQktFVEFNQV9DT01QQVRJQkxFID0gMTY7CiAgICBwdWJsaWMgY29uc3QgT1BUX0xJQktFVEFNQV9IQVNIID0gMTc7CiAgICBwdWJsaWMgY29uc3QgT1BUX1RDUF9LRUVQQUxJVkUgPSAzMjsKCiAgICAvKioKICAgICAqIDxwPkVuYWJsZXMgb3IgZGlzYWJsZXMgYnVmZmVyZWQgSS9PLiBFbmFibGluZyBidWZmZXJlZCBJL08gY2F1c2VzCiAgICAgKiBzdG9yYWdlIGNvbW1hbmRzIHRvICJidWZmZXIiIGluc3RlYWQgb2YgYmVpbmcgc2VudC4gQW55IGFjdGlvbiB0aGF0CiAgICAgKiByZXRyaWV2ZXMgZGF0YSBjYXVzZXMgdGhpcyBidWZmZXIgdG8gYmUgc2VudCB0byB0aGUgcmVtb3RlIGNvbm5lY3Rpb24uCiAgICAgKiBRdWl0dGluZyB0aGUgY29ubmVjdGlvbiBvciBjbG9zaW5nIGRvd24gdGhlIGNvbm5lY3Rpb24gd2lsbCBhbHNvIGNhdXNlCiAgICAgKiB0aGUgYnVmZmVyZWQgZGF0YSB0byBiZSBwdXNoZWQgdG8gdGhlIHJlbW90ZSBjb25uZWN0aW9uLjwvcD4KICAgICAqIDxwPlR5cGU6IGJvb2xlYW4sIGRlZmF1bHQ6IDxiPkZBTFNFPC9iPi48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfQlVGRkVSX1dSSVRFUyA9IDEwOwoKICAgIC8qKgogICAgICogPHA+RW5hYmxlIHRoZSB1c2Ugb2YgdGhlIGJpbmFyeSBwcm90b2NvbC4gUGxlYXNlIG5vdGUgdGhhdCB5b3UgY2Fubm90CiAgICAgKiB0b2dnbGUgdGhpcyBvcHRpb24gb24gYW4gb3BlbiBjb25uZWN0aW9uLjwvcD4KICAgICAqIDxwPlR5cGU6IGJvb2xlYW4sIGRlZmF1bHQ6IDxiPkZBTFNFPC9iPi48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfQklOQVJZX1BST1RPQ09MID0gMTg7CgogICAgLyoqCiAgICAgKiA8cD5FbmFibGVzIG9yIGRpc2FibGVzIGFzeW5jaHJvbm91cyBJL08uIFRoaXMgaXMgdGhlIGZhc3Rlc3QgdHJhbnNwb3J0CiAgICAgKiBhdmFpbGFibGUgZm9yIHN0b3JhZ2UgZnVuY3Rpb25zLjwvcD4KICAgICAqIDxwPlR5cGU6IGJvb2xlYW4sIGRlZmF1bHQ6IDxiPkZBTFNFPC9iPi48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfTk9fQkxPQ0sgPSAwOwoKICAgIC8qKgogICAgICogPHA+RW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgbm8tZGVsYXkgZmVhdHVyZSBmb3IgY29ubmVjdGluZyBzb2NrZXRzIChtYXkKICAgICAqIGJlIGZhc3RlciBpbiBzb21lIGVudmlyb25tZW50cykuPC9wPgogICAgICogPHA+VHlwZTogYm9vbGVhbiwgZGVmYXVsdDogPGI+RkFMU0U8L2I+LjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9UQ1BfTk9ERUxBWSA9IDE7CgogICAgLyoqCiAgICAgKiA8cD5UaGUgbWF4aW11bSBzb2NrZXQgc2VuZCBidWZmZXIgaW4gYnl0ZXMuPC9wPgogICAgICogPHA+VHlwZTogaW50ZWdlciwgZGVmYXVsdDogdmFyaWVzIGJ5IHBsYXRmb3JtL2tlcm5lbAogICAgICogY29uZmlndXJhdGlvbi48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfU09DS0VUX1NFTkRfU0laRSA9IDQ7CgogICAgLyoqCiAgICAgKiA8cD5UaGUgbWF4aW11bSBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgaW4gYnl0ZXMuPC9wPgogICAgICogPHA+VHlwZTogaW50ZWdlciwgZGVmYXVsdDogdmFyaWVzIGJ5IHBsYXRmb3JtL2tlcm5lbAogICAgICogY29uZmlndXJhdGlvbi48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfU09DS0VUX1JFQ1ZfU0laRSA9IDU7CgogICAgLyoqCiAgICAgKiA8cD5JbiBub24tYmxvY2tpbmcgbW9kZSB0aGlzIHNldCB0aGUgdmFsdWUgb2YgdGhlIHRpbWVvdXQgZHVyaW5nIHNvY2tldAogICAgICogY29ubmVjdGlvbiwgaW4gbWlsbGlzZWNvbmRzLjwvcD4KICAgICAqIDxwPlR5cGU6IGludGVnZXIsIGRlZmF1bHQ6IDEwMDAuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX0NPTk5FQ1RfVElNRU9VVCA9IDE0OwoKICAgIC8qKgogICAgICogPHA+VGhlIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0byB3YWl0IHVudGlsIHJldHJ5aW5nIGEgZmFpbGVkCiAgICAgKiBjb25uZWN0aW9uIGF0dGVtcHQuPC9wPgogICAgICogPHA+VHlwZTogaW50ZWdlciwgZGVmYXVsdDogMC48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfUkVUUllfVElNRU9VVCA9IDE1OwoKICAgIC8qKgogICAgICogPHA+U29ja2V0IHNlbmRpbmcgdGltZW91dCwgaW4gbWljcm9zZWNvbmRzLiBJbiBjYXNlcyB3aGVyZSB5b3UgY2Fubm90CiAgICAgKiB1c2Ugbm9uLWJsb2NraW5nIEkvTyB0aGlzIHdpbGwgYWxsb3cgeW91IHRvIHN0aWxsIGhhdmUgdGltZW91dHMgb24gdGhlCiAgICAgKiBzZW5kaW5nIG9mIGRhdGEuPC9wPgogICAgICogPHA+VHlwZTogaW50ZWdlciwgZGVmYXVsdDogMC48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFRfU0VORF9USU1FT1VUID0gMTk7CgogICAgLyoqCiAgICAgKiA8cD5Tb2NrZXQgcmVhZGluZyB0aW1lb3V0LCBpbiBtaWNyb3NlY29uZHMuIEluIGNhc2VzIHdoZXJlIHlvdSBjYW5ub3QKICAgICAqIHVzZSBub24tYmxvY2tpbmcgSS9PIHRoaXMgd2lsbCBhbGxvdyB5b3UgdG8gc3RpbGwgaGF2ZSB0aW1lb3V0cyBvbiB0aGUKICAgICAqIHJlYWRpbmcgb2YgZGF0YS48L3A+CiAgICAgKiA8cD5UeXBlOiBpbnRlZ2VyLCBkZWZhdWx0OiAwLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9SRUNWX1RJTUVPVVQgPSAyMDsKCiAgICAvKioKICAgICAqIDxwPlRpbWVvdXQgZm9yIGNvbm5lY3Rpb24gcG9sbGluZywgaW4gbWlsbGlzZWNvbmRzLjwvcD4KICAgICAqIDxwPlR5cGU6IGludGVnZXIsIGRlZmF1bHQ6IDEwMDAuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BUX1BPTExfVElNRU9VVCA9IDg7CgogICAgLyoqCiAgICAgKiA8cD5FbmFibGVzIG9yIGRpc2FibGVzIGNhY2hpbmcgb2YgRE5TIGxvb2t1cHMuPC9wPgogICAgICogPHA+VHlwZTogYm9vbGVhbiwgZGVmYXVsdDogPGI+RkFMU0U8L2I+LjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9DQUNIRV9MT09LVVBTID0gNjsKCiAgICAvKioKICAgICAqIDxwPlNwZWNpZmllcyB0aGUgZmFpbHVyZSBsaW1pdCBmb3Igc2VydmVyIGNvbm5lY3Rpb24gYXR0ZW1wdHMuIFRoZQogICAgICogc2VydmVyIHdpbGwgYmUgcmVtb3ZlZCBhZnRlciB0aGlzIG1hbnkgY29udGludW91cyBjb25uZWN0aW9uCiAgICAgKiBmYWlsdXJlcy48L3A+CiAgICAgKiA8cD5UeXBlOiBpbnRlZ2VyLCBkZWZhdWx0OiAwLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QVF9TRVJWRVJfRkFJTFVSRV9MSU1JVCA9IDIxOwogICAgcHVibGljIGNvbnN0IE9QVF9BVVRPX0VKRUNUX0hPU1RTID0gMjg7CiAgICBwdWJsaWMgY29uc3QgT1BUX0hBU0hfV0lUSF9QUkVGSVhfS0VZID0gMjU7CiAgICBwdWJsaWMgY29uc3QgT1BUX05PUkVQTFkgPSAyNjsKICAgIHB1YmxpYyBjb25zdCBPUFRfU09SVF9IT1NUUyA9IDEyOwogICAgcHVibGljIGNvbnN0IE9QVF9WRVJJRllfS0VZID0gMTM7CiAgICBwdWJsaWMgY29uc3QgT1BUX1VTRV9VRFAgPSAyNzsKICAgIHB1YmxpYyBjb25zdCBPUFRfTlVNQkVSX09GX1JFUExJQ0FTID0gMjk7CiAgICBwdWJsaWMgY29uc3QgT1BUX1JBTkRPTUlaRV9SRVBMSUNBX1JFQUQgPSAzMDsKICAgIHB1YmxpYyBjb25zdCBPUFRfQ09SSyA9IDMxOwogICAgcHVibGljIGNvbnN0IE9QVF9SRU1PVkVfRkFJTEVEX1NFUlZFUlMgPSAzNTsKICAgIHB1YmxpYyBjb25zdCBPUFRfREVBRF9USU1FT1VUID0gMzY7CiAgICBwdWJsaWMgY29uc3QgT1BUX1NFUlZFUl9USU1FT1VUX0xJTUlUID0gMzc7CiAgICBwdWJsaWMgY29uc3QgT1BUX01BWCA9IDM4OwogICAgcHVibGljIGNvbnN0IE9QVF9JT19CWVRFU19XQVRFUk1BUksgPSAyMzsKICAgIHB1YmxpYyBjb25zdCBPUFRfSU9fS0VZX1BSRUZFVENIID0gMjQ7CiAgICBwdWJsaWMgY29uc3QgT1BUX0lPX01TR19XQVRFUk1BUksgPSAyMjsKICAgIHB1YmxpYyBjb25zdCBPUFRfTE9BRF9GUk9NX0ZJTEUgPSAzNDsKICAgIHB1YmxpYyBjb25zdCBPUFRfU1VQUE9SVF9DQVMgPSA3OwogICAgcHVibGljIGNvbnN0IE9QVF9UQ1BfS0VFUElETEUgPSAzMzsKICAgIHB1YmxpYyBjb25zdCBPUFRfVVNFUl9EQVRBID0gMTE7CgogICAgLyoqCiAgICAgKiBsaWJtZW1jYWNoZWQgcmVzdWx0IGNvZGVzCiAgICAgKi8KICAgIC8qKgogICAgICogPHA+VGhlIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bC48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfU1VDQ0VTUyA9IDA7CgogICAgLyoqCiAgICAgKiA8cD5UaGUgb3BlcmF0aW9uIGZhaWxlZCBpbiBzb21lIGZhc2hpb24uPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX0ZBSUxVUkUgPSAxOwoKICAgIC8qKgogICAgICogPHA+RE5TIGxvb2t1cCBmYWlsZWQuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX0hPU1RfTE9PS1VQX0ZBSUxVUkUgPSAyOwoKICAgIC8qKgogICAgICogPHA+RmFpbGVkIHRvIHJlYWQgbmV0d29yayBkYXRhLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19VTktOT1dOX1JFQURfRkFJTFVSRSA9IDc7CgogICAgLyoqCiAgICAgKiA8cD5CYWQgY29tbWFuZCBpbiBtZW1jYWNoZWQgcHJvdG9jb2wuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX1BST1RPQ09MX0VSUk9SID0gODsKCiAgICAvKioKICAgICAqIDxwPkVycm9yIG9uIHRoZSBjbGllbnQgc2lkZS48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfQ0xJRU5UX0VSUk9SID0gOTsKCiAgICAvKioKICAgICAqIDxwPkVycm9yIG9uIHRoZSBzZXJ2ZXIgc2lkZS48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfU0VSVkVSX0VSUk9SID0gMTA7CgogICAgLyoqCiAgICAgKiA8cD5GYWlsZWQgdG8gd3JpdGUgbmV0d29yayBkYXRhLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19XUklURV9GQUlMVVJFID0gNTsKCiAgICAvKioKICAgICAqIDxwPkZhaWxlZCB0byBkbyBjb21wYXJlLWFuZC1zd2FwOiBpdGVtIHlvdSBhcmUgdHJ5aW5nIHRvIHN0b3JlIGhhcyBiZWVuCiAgICAgKiBtb2RpZmllZCBzaW5jZSB5b3UgbGFzdCBmZXRjaGVkIGl0LjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19EQVRBX0VYSVNUUyA9IDEyOwoKICAgIC8qKgogICAgICogPHA+SXRlbSB3YXMgbm90IHN0b3JlZDogYnV0IG5vdCBiZWNhdXNlIG9mIGFuIGVycm9yLiBUaGlzIG5vcm1hbGx5CiAgICAgKiBtZWFucyB0aGF0IGVpdGhlciB0aGUgY29uZGl0aW9uIGZvciBhbiAiYWRkIiBvciBhICJyZXBsYWNlIiBjb21tYW5kCiAgICAgKiB3YXNuJ3QgbWV0LCBvciB0aGF0IHRoZSBpdGVtIGlzIGluIGEgZGVsZXRlIHF1ZXVlLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19OT1RTVE9SRUQgPSAxNDsKCiAgICAvKioKICAgICAqIDxwPkl0ZW0gd2l0aCB0aGlzIGtleSB3YXMgbm90IGZvdW5kICh3aXRoICJnZXQiIG9wZXJhdGlvbiBvciAiY2FzIgogICAgICogb3BlcmF0aW9ucykuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX05PVEZPVU5EID0gMTY7CgogICAgLyoqCiAgICAgKiA8cD5QYXJ0aWFsIG5ldHdvcmsgZGF0YSByZWFkIGVycm9yLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19QQVJUSUFMX1JFQUQgPSAxODsKCiAgICAvKioKICAgICAqIDxwPlNvbWUgZXJyb3JzIG9jY3VycmVkIGR1cmluZyBtdWx0aS1nZXQuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX1NPTUVfRVJST1JTID0gMTk7CgogICAgLyoqCiAgICAgKiA8cD5TZXJ2ZXIgbGlzdCBpcyBlbXB0eS48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfTk9fU0VSVkVSUyA9IDIwOwoKICAgIC8qKgogICAgICogPHA+RW5kIG9mIHJlc3VsdCBzZXQuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX0VORCA9IDIxOwoKICAgIC8qKgogICAgICogPHA+U3lzdGVtIGVycm9yLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19FUlJOTyA9IDI2OwoKICAgIC8qKgogICAgICogPHA+VGhlIG9wZXJhdGlvbiB3YXMgYnVmZmVyZWQuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX0JVRkZFUkVEID0gMzI7CgogICAgLyoqCiAgICAgKiA8cD5UaGUgb3BlcmF0aW9uIHRpbWVkIG91dC48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfVElNRU9VVCA9IDMxOwoKICAgIC8qKgogICAgICogPHA+QmFkIGtleS48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwLCBodHRwOi8vZG9jcy5saWJtZW1jYWNoZWQub3JnL2luZGV4Lmh0bWwKICAgICAqLwogICAgLyoqCiAgICAgKiA8cD5NRU1DQUNIRURfQkFEX0tFWV9QUk9WSURFRDogVGhlIGtleSBwcm92aWRlZCBpcyBub3QgYSB2YWxpZCBrZXkuPC9wPgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX0JBRF9LRVlfUFJPVklERUQgPSAzMzsKCiAgICAvKioKICAgICAqIDxwPk1FTUNBQ0hFRF9TVE9SRUQ6IFRoZSByZXF1ZXN0ZWQgb2JqZWN0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzdG9yZWQgb24gdGhlIHNlcnZlci48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfU1RPUkVEID0gMTU7CgogICAgLyoqCiAgICAgKiA8cD5NRU1DQUNIRURfREVMRVRFRDogVGhlIG9iamVjdCByZXF1ZXN0ZWQgYnkgdGhlIGtleSBoYXMgYmVlbiBkZWxldGVkLjwvcD4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19ERUxFVEVEID0gMjI7CgogICAgLyoqCiAgICAgKiA8cD5NRU1DQUNIRURfU1RBVDogQSDigJxzdGF04oCdIGNvbW1hbmQgaGFzIGJlZW4gcmV0dXJuZWQgaW4gdGhlIHByb3RvY29sLjwvcD4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19TVEFUID0gMjQ7CgogICAgLyoqCiAgICAgKiA8cD5NRU1DQUNIRURfSVRFTTogQW4gaXRlbSBoYXMgYmVlbiBmZXRjaGVkICh0aGlzIGlzIGFuIGludGVybmFsIGVycm9yIG9ubHkpLjwvcD4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19JVEVNID0gMjU7CgogICAgLyoqCiAgICAgKiA8cD5NRU1DQUNIRURfTk9UX1NVUFBPUlRFRDogVGhlIGdpdmVuIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBzZXJ2ZXIuPC9wPgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX05PVF9TVVBQT1JURUQgPSAyODsKCiAgICAvKioKICAgICAqIDxwPk1FTUNBQ0hFRF9GRVRDSF9OT1RGSU5JU0hFRDogQSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUsIGJ1dCB0aGUgc2VydmVyIGhhcyBub3QgZmluaXNoZWQgdGhlIGZldGNoIG9mIHRoZSBsYXN0IHJlcXVlc3QuPC9wPgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX0ZFVENIX05PVEZJTklTSEVEID0gMzA7CgogICAgLyoqCiAgICAgKiA8cD5NRU1DQUNIRURfU0VSVkVSX01BUktFRF9ERUFEOiBUaGUgcmVxdWVzdGVkIHNlcnZlciBoYXMgYmVlbiBtYXJrZWQgZGVhZC48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfU0VSVkVSX01BUktFRF9ERUFEID0gMzU7CgogICAgLyoqCiAgICAgKiA8cD5NRU1DQUNIRURfVU5LTk9XTl9TVEFUX0tFWTogVGhlIHNlcnZlciB5b3UgYXJlIGNvbW11bmljYXRpbmcgd2l0aCBoYXMgYSBzdGF0IGtleSB3aGljaCBoYXMgbm90IGJlIGRlZmluZWQgaW4gdGhlIHByb3RvY29sLjwvcD4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19VTktOT1dOX1NUQVRfS0VZID0gMzY7CgogICAgLyoqCiAgICAgKiA8cD5NRU1DQUNIRURfSU5WQUxJRF9IT1NUX1BST1RPQ09MOiBUaGUgc2VydmVyIHlvdSBhcmUgY29ubmVjdGluZyB0b28gaGFzIGFuIGludmFsaWQgcHJvdG9jb2wuIE1vc3QgbGlrZWx5IHlvdSBhcmUgY29ubmVjdGluZyB0byBhbiBvbGRlciBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBzcGVhayB0aGUgYmluYXJ5IHByb3RvY29sLjwvcD4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19JTlZBTElEX0hPU1RfUFJPVE9DT0wgPSAzNDsKCiAgICAvKioKICAgICAqIDxwPk1FTUNBQ0hFRF9NRU1PUllfQUxMT0NBVElPTl9GQUlMVVJFOiBBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGFsbG9jYXRlIG1lbW9yeS48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfTUVNT1JZX0FMTE9DQVRJT05fRkFJTFVSRSA9IDE3OwoKICAgIC8qKgogICAgICogPHA+TUVNQ0FDSEVEX0UyQklHOiBJdGVtIGlzIHRvbyBsYXJnZSBmb3IgdGhlIHNlcnZlciB0byBzdG9yZS48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfRTJCSUcgPSAzNzsKCiAgICAvKioKICAgICAqIDxwPk1FTUNBQ0hFRF9LRVlfVE9PX0JJRzogVGhlIGtleSB0aGF0IGhhcyBiZWVuIHByb3ZpZGVkIGlzIHRvbyBsYXJnZSBmb3IgdGhlIGdpdmVuIHNlcnZlci48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfS0VZX1RPT19CSUcgPSAzOTsKCiAgICAvKioKICAgICAqIDxwPk1FTUNBQ0hFRF9TRVJWRVJfVEVNUE9SQVJJTFlfRElTQUJMRUQ8L3A+CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfU0VSVkVSX1RFTVBPUkFSSUxZX0RJU0FCTEVEID0gNDc7CgogICAgLyoqCiAgICAgKiA8cD5NRU1PUllfQUxMT0NBVElPTl9GQUlMVVJFOiBBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGFsbG9jYXRlIG1lbW9yeS4KICAgICAqCiAgICAgKiAjaWYgZGVmaW5lZChMSUJNRU1DQUNIRURfVkVSU0lPTl9IRVgpICYmIExJQk1FTUNBQ0hFRF9WRVJTSU9OX0hFWCA+PSAweDAxMDAwMDA4PC9wPgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX1NFUlZFUl9NRU1PUllfQUxMT0NBVElPTl9GQUlMVVJFID0gNDg7CgogICAgLyoqCiAgICAgKiA8cD5NRU1DQUNIRURfQVVUSF9QUk9CTEVNOiBBbiB1bmtub3duIGlzc3VlIGhhcyBvY2N1cmVkIGR1cmluZyBhdXRoZW50aWNhdGlvbi48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfQVVUSF9QUk9CTEVNID0gNDA7CgogICAgLyoqCiAgICAgKiA8cD5NRU1DQUNIRURfQVVUSF9GQUlMVVJFOiBUaGUgY3JlZGVudGlhbHMgcHJvdmlkZWQgYXJlIG5vdCB2YWxpZCBmb3IgdGhpcyBzZXJ2ZXIuPC9wPgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX0FVVEhfRkFJTFVSRSA9IDQxOwoKICAgIC8qKgogICAgICogPHA+TUVNQ0FDSEVEX0FVVEhfQ09OVElOVUU6IEF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHBhdXNlZC48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfQVVUSF9DT05USU5VRSA9IDQyOwoKICAgIC8qKgogICAgICogPHA+TUVNQ0FDSEVEX0NPTk5FQ1RJT05fRkFJTFVSRTogQSB1bmtub3duIGVycm9yIGhhcyBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byBjb25uZWN0IHRvIGEgc2VydmVyLjwvcD4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19DT05ORUNUSU9OX0ZBSUxVUkUgPSAzOwoKICAgIC8qKgogICAgICogTUVNQ0FDSEVEX0NPTk5FQ1RJT05fQklORF9GQUlMVVJFOiBXZSB3ZXJlIG5vdCBhYmxlIHRvIGJpbmQoKSB0byB0aGUgc29ja2V0LgogICAgICovCiAgICAjW0RlcHJlY2F0ZWQoJ0RlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjMwKGxpYm1lbWNhY2hlZCknKV0KICAgIHB1YmxpYyBjb25zdCBSRVNfQ09OTkVDVElPTl9CSU5EX0ZBSUxVUkUgPSA0OwoKICAgIC8qKgogICAgICogPHA+TUVNQ0FDSEVEX1JFQURfRkFJTFVSRTogQSByZWFkIGZhaWx1cmUgaGFzIG9jY3VycmVkLjwvcD4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19SRUFEX0ZBSUxVUkUgPSA2OwoKICAgIC8qKgogICAgICogPHA+TUVNQ0FDSEVEX0RBVEFfRE9FU19OT1RfRVhJU1Q6IFRoZSBkYXRhIHJlcXVlc3RlZCB3aXRoIHRoZSBrZXkgZ2l2ZW4gd2FzIG5vdCBmb3VuZC48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfREFUQV9ET0VTX05PVF9FWElTVCA9IDEzOwoKICAgIC8qKgogICAgICogPHA+TUVNQ0FDSEVEX1ZBTFVFOiBBIHZhbHVlIGhhcyBiZWVuIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciAodGhpcyBpcyBhbiBpbnRlcm5hbCBjb25kaXRpb24gb25seSkuPC9wPgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX1ZBTFVFID0gMjM7CgogICAgLyoqCiAgICAgKiA8cD5NRU1DQUNIRURfRkFJTF9VTklYX1NPQ0tFVDogQSBjb25uZWN0aW9uIHdhcyBub3QgZXN0YWJsaXNoZWQgd2l0aCB0aGUgc2VydmVyIHZpYSBhIHVuaXggZG9tYWluIHNvY2tldC48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfRkFJTF9VTklYX1NPQ0tFVCA9IDI3OwoKICAgIC8qKgogICAgICogTm8ga2V5IHdhcyBwcm92aWRlZC48L3A+CiAgICAgKi8KICAgICNbRGVwcmVjYXRlZCgnRGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuMzAgKGxpYm1lbWNhY2hlZCkuIFVzZSBNRU1DQUNIRURfQkFEX0tFWV9QUk9WSURFRCBpbnN0ZWFkLicpXQogICAgcHVibGljIGNvbnN0IFJFU19OT19LRVlfUFJPVklERUQgPSAyOTsKCiAgICAvKioKICAgICAqIDxwPk1FTUNBQ0hFRF9JTlZBTElEX0FSR1VNRU5UUzogVGhlIGFyZ3VtZW50cyBzdXBwbGllZCB0byB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2VyZSBub3QgdmFsaWQuPC9wPgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX0lOVkFMSURfQVJHVU1FTlRTID0gMzg7CgogICAgLyoqCiAgICAgKiA8cD5NRU1DQUNIRURfUEFSU0VfRVJST1I6IEFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcGFyc2UgdGhlIGNvbmZpZ3VyYXRpb24gc3RyaW5nLiBZb3Ugc2hvdWxkIHVzZSBtZW1wYXJzZSB0byBkZXRlcm1pbmUgd2hhdCB0aGUgZXJyb3Igd2FzLjwvcD4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19QQVJTRV9FUlJPUiA9IDQzOwoKICAgIC8qKgogICAgICogPHA+TUVNQ0FDSEVEX1BBUlNFX1VTRVJfRVJST1I6IEFuIGVycm9yIGhhcyBvY2N1cnJlZCBpbiBwYXJzaW5nIHRoZSBjb25maWd1cmF0aW9uIHN0cmluZy48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRVNfUEFSU0VfVVNFUl9FUlJPUiA9IDQ0OwoKICAgIC8qKgogICAgICogPHA+TUVNQ0FDSEVEX0RFUFJFQ0FURUQ6IFRoZSBtZXRob2QgdGhhdCB3YXMgcmVxdWVzdGVkIGhhcyBiZWVuIGRlcHJlY2F0ZWQuPC9wPgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX0RFUFJFQ0FURUQgPSA0NTsKCiAgICAvL3Vua25vdwogICAgcHVibGljIGNvbnN0IFJFU19JTl9QUk9HUkVTUyA9IDQ2OwoKICAgIC8qKgogICAgICogPHA+TUVNQ0FDSEVEX01BWElNVU1fUkVUVVJOOiBUaGlzIGluIGFuIGludGVybmFsIG9ubHkgc3RhdGUuPC9wPgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUkVTX01BWElNVU1fUkVUVVJOID0gNDk7CgogICAgLyoqCiAgICAgKiBTZXJ2ZXIgY2FsbGJhY2tzLCBpZiBjb21waWxlZCB3aXRoIC0tbWVtY2FjaGVkLXByb3RvY29sCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vcGhwLW1lbWNhY2hlZC1kZXYvcGhwLW1lbWNhY2hlZC9ibG9iL3YzLjEuNS9tZW1jYWNoZWQtYXBpLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgT05fQ09OTkVDVCA9IDA7CiAgICBwdWJsaWMgY29uc3QgT05fQUREID0gMTsKICAgIHB1YmxpYyBjb25zdCBPTl9BUFBFTkQgPSAyOwogICAgcHVibGljIGNvbnN0IE9OX0RFQ1JFTUVOVCA9IDM7CiAgICBwdWJsaWMgY29uc3QgT05fREVMRVRFID0gNDsKICAgIHB1YmxpYyBjb25zdCBPTl9GTFVTSCA9IDU7CiAgICBwdWJsaWMgY29uc3QgT05fR0VUID0gNjsKICAgIHB1YmxpYyBjb25zdCBPTl9JTkNSRU1FTlQgPSA3OwogICAgcHVibGljIGNvbnN0IE9OX05PT1AgPSA4OwogICAgcHVibGljIGNvbnN0IE9OX1BSRVBFTkQgPSA5OwogICAgcHVibGljIGNvbnN0IE9OX1FVSVQgPSAxMDsKICAgIHB1YmxpYyBjb25zdCBPTl9SRVBMQUNFID0gMTE7CiAgICBwdWJsaWMgY29uc3QgT05fU0VUID0gMTI7CiAgICBwdWJsaWMgY29uc3QgT05fU1RBVCA9IDEzOwogICAgcHVibGljIGNvbnN0IE9OX1ZFUlNJT04gPSAxNDsKCiAgICAvKioKICAgICAqIENvbnN0YW50cyB1c2VkIHdoZW4gY29tcGlsZWQgd2l0aCAtLW1lbWNhY2hlZC1wcm90b2NvbAogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BocC1tZW1jYWNoZWQtZGV2L3BocC1tZW1jYWNoZWQvYmxvYi92My4xLjUvbWVtY2FjaGVkLWFwaS5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU1BPTlNFX1NVQ0NFU1MgPSAwOwogICAgcHVibGljIGNvbnN0IFJFU1BPTlNFX0tFWV9FTk9FTlQgPSAxOwogICAgcHVibGljIGNvbnN0IFJFU1BPTlNFX0tFWV9FRVhJU1RTID0gMjsKICAgIHB1YmxpYyBjb25zdCBSRVNQT05TRV9FMkJJRyA9IDM7CiAgICBwdWJsaWMgY29uc3QgUkVTUE9OU0VfRUlOVkFMID0gNDsKICAgIHB1YmxpYyBjb25zdCBSRVNQT05TRV9OT1RfU1RPUkVEID0gNTsKICAgIHB1YmxpYyBjb25zdCBSRVNQT05TRV9ERUxUQV9CQURWQUwgPSA2OwogICAgcHVibGljIGNvbnN0IFJFU1BPTlNFX05PVF9NWV9WQlVDS0VUID0gNzsKICAgIHB1YmxpYyBjb25zdCBSRVNQT05TRV9BVVRIX0VSUk9SID0gMzI7CiAgICBwdWJsaWMgY29uc3QgUkVTUE9OU0VfQVVUSF9DT05USU5VRSA9IDMzOwogICAgcHVibGljIGNvbnN0IFJFU1BPTlNFX1VOS05PV05fQ09NTUFORCA9IDEyOTsKICAgIHB1YmxpYyBjb25zdCBSRVNQT05TRV9FTk9NRU0gPSAxMzA7CiAgICBwdWJsaWMgY29uc3QgUkVTUE9OU0VfTk9UX1NVUFBPUlRFRCA9IDEzMTsKICAgIHB1YmxpYyBjb25zdCBSRVNQT05TRV9FSU5URVJOQUwgPSAxMzI7CiAgICBwdWJsaWMgY29uc3QgUkVTUE9OU0VfRUJVU1kgPSAxMzM7CiAgICBwdWJsaWMgY29uc3QgUkVTUE9OU0VfRVRNUEZBSUwgPSAxMzQ7CgogICAgLyoqCiAgICAgKiA8cD5GYWlsZWQgdG8gY3JlYXRlIG5ldHdvcmsgc29ja2V0LjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19DT05ORUNUSU9OX1NPQ0tFVF9DUkVBVEVfRkFJTFVSRSA9IDExOwoKICAgIC8qKgogICAgICogPHA+UGF5bG9hZCBmYWlsdXJlOiBjb3VsZCBub3QgY29tcHJlc3MvZGVjb21wcmVzcyBvciBzZXJpYWxpemUvdW5zZXJpYWxpemUgdGhlIHZhbHVlLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJFU19QQVlMT0FEX0ZBSUxVUkUgPSAtMTAwMTsKCiAgICAvKioKICAgICAqIDxwPlRoZSBkZWZhdWx0IFBIUCBzZXJpYWxpemVyLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNFUklBTElaRVJfUEhQID0gMTsKCiAgICAvKioKICAgICAqIDxwPlRoZSBpZ2JpbmFyeSBzZXJpYWxpemVyLgogICAgICogSW5zdGVhZCBvZiB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIGl0IHN0b3JlcyBQSFAgZGF0YSBzdHJ1Y3R1cmVzIGluIGEKICAgICAqIGNvbXBhY3QgYmluYXJ5IGZvcm0sIHJlc3VsdGluZyBpbiBzcGFjZSBhbmQgdGltZSBnYWlucy48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBTRVJJQUxJWkVSX0lHQklOQVJZID0gMjsKCiAgICAvKioKICAgICAqIDxwPlRoZSBKU09OIHNlcmlhbGl6ZXIuIFJlcXVpcmVzIFBIUCA1LjIuMTArLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNFUklBTElaRVJfSlNPTiA9IDM7CiAgICBwdWJsaWMgY29uc3QgU0VSSUFMSVpFUl9KU09OX0FSUkFZID0gNDsKCiAgICAvKioKICAgICAqIDxwPlRoZSBtc2dwYWNrIHNlcmlhbGl6ZXIuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BocC1tZW1jYWNoZWQtZGV2L3BocC1tZW1jYWNoZWQvYmxvYi92My4xLjUvbWVtY2FjaGVkLWFwaS5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IFNFUklBTElaRVJfTVNHUEFDSyA9IDU7CiAgICBwdWJsaWMgY29uc3QgQ09NUFJFU1NJT05fRkFTVExaID0gMjsKICAgIHB1YmxpYyBjb25zdCBDT01QUkVTU0lPTl9aTElCID0gMTsKCiAgICAvKioKICAgICAqIDxwPkEgZmxhZyBmb3IgPGI+TWVtY2FjaGVkOjpnZXRNdWx0aTwvYj4gYW5kCiAgICAgKiA8Yj5NZW1jYWNoZWQ6OmdldE11bHRpQnlLZXk8L2I+IHRvIGVuc3VyZSB0aGF0IHRoZSBrZXlzIGFyZQogICAgICogcmV0dXJuZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSB3ZXJlIHJlcXVlc3RlZCBpbi4gTm9uLWV4aXN0aW5nIGtleXMKICAgICAqIGdldCBhIGRlZmF1bHQgdmFsdWUgb2YgTlVMTC48L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBHRVRfUFJFU0VSVkVfT1JERVIgPSAxOwoKICAgIC8qKgogICAgICogQSBmbGFnIGZvciA8Yj5NZW1jYWNoZWQ6OmdldCgpPC9iPiwgPGI+TWVtY2FjaGVkOjpnZXRNdWx0aSgpPC9iPiBhbmQKICAgICAqIDxiPk1lbWNhY2hlZDo6Z2V0TXVsdGlCeUtleSgpPC9iPiB0byBlbnN1cmUgdGhhdCB0aGUgQ0FTIHRva2VuIHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgd2VsbC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmNvbnN0YW50cy5waHAKICAgICAqIEBzaW5jZSAzLjAuMAogICAgICovCiAgICBwdWJsaWMgY29uc3QgR0VUX0VYVEVOREVEID0gMjsKICAgIHB1YmxpYyBjb25zdCBHRVRfRVJST1JfUkVUVVJOX1ZBTFVFID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIENyZWF0ZSBhIE1lbWNhY2hlZCBpbnN0YW5jZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY29uc3RydWN0LnBocCwgaHR0cHM6Ly9naXRodWIuY29tL3BocC1tZW1jYWNoZWQtZGV2L3BocC1tZW1jYWNoZWQvYmxvYi92My4xLjUvcGhwX21lbWNhY2hlZC5jCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwZXJzaXN0ZW50X2lkIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkb25fbmV3X29iamVjdF9jYiBbb3B0aW9uYWxdCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb25uZWN0aW9uX3N0ciBbb3B0aW9uYWxdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGVyc2lzdGVudF9pZCA9ICcnLCAkb25fbmV3X29iamVjdF9jYiA9IG51bGwsICRjb25uZWN0aW9uX3N0ciA9ICcnKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBSZXR1cm4gdGhlIHJlc3VsdCBjb2RlIG9mIHRoZSBsYXN0IG9wZXJhdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuZ2V0cmVzdWx0Y29kZS5waHAKICAgICAqIEByZXR1cm4gaW50IFJlc3VsdCBjb2RlIG9mIHRoZSBsYXN0IE1lbWNhY2hlZCBvcGVyYXRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXN1bHRDb2RlKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogUmV0dXJuIHRoZSBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBvcGVyYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmdldHJlc3VsdG1lc3NhZ2UucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyBNZXNzYWdlIGRlc2NyaWJpbmcgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBNZW1jYWNoZWQgb3BlcmF0aW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzdWx0TWVzc2FnZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIFJldHJpZXZlIGFuIGl0ZW0KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmdldC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSA8cD4KICAgICAqIFRoZSBrZXkgb2YgdGhlIGl0ZW0gdG8gcmV0cmlldmUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhY2hlX2NiIFtvcHRpb25hbF0gPHA+CiAgICAgKiBSZWFkLXRocm91Z2ggY2FjaGluZyBjYWxsYmFjayBvciA8Yj5OVUxMPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZmxhZ3MgZm9yIHRoZSBnZXQgb3BlcmF0aW9uLgogICAgICogPC9wPgogICAgICogQHJldHVybiBtaXhlZCB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSBjYWNoZSBvciA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlLgogICAgICogVGhlIDxiPk1lbWNhY2hlZDo6Z2V0UmVzdWx0Q29kZTwvYj4gd2lsbCByZXR1cm4KICAgICAqIDxiPk1lbWNhY2hlZDo6UkVTX05PVEZPVU5EPC9iPiBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRrZXksIGNhbGxhYmxlICRjYWNoZV9jYiA9IG51bGwsICRmbGFncyA9IDApIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIFJldHJpZXZlIGFuIGl0ZW0gZnJvbSBhIHNwZWNpZmljIHNlcnZlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuZ2V0YnlrZXkucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfa2V5IDxwPgogICAgICogVGhlIGtleSBpZGVudGlmeWluZyB0aGUgc2VydmVyIHRvIHN0b3JlIHRoZSB2YWx1ZSBvbiBvciByZXRyaWV2ZSBpdCBmcm9tLiBJbnN0ZWFkIG9mIGhhc2hpbmcgb24gdGhlIGFjdHVhbCBrZXkgZm9yIHRoZSBpdGVtLCB3ZSBoYXNoIG9uIHRoZSBzZXJ2ZXIga2V5IHdoZW4gZGVjaWRpbmcgd2hpY2ggbWVtY2FjaGVkIHNlcnZlciB0byB0YWxrIHRvLiBUaGlzIGFsbG93cyByZWxhdGVkIGl0ZW1zIHRvIGJlIGdyb3VwZWQgdG9nZXRoZXIgb24gYSBzaW5nbGUgc2VydmVyIGZvciBlZmZpY2llbmN5IHdpdGggbXVsdGkgb3BlcmF0aW9ucy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSA8cD4KICAgICAqIFRoZSBrZXkgb2YgdGhlIGl0ZW0gdG8gZmV0Y2guCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhY2hlX2NiIFtvcHRpb25hbF0gPHA+CiAgICAgKiBSZWFkLXRocm91Z2ggY2FjaGluZyBjYWxsYmFjayBvciA8Yj5OVUxMPC9iPgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBmbGFncyBmb3IgdGhlIGdldCBvcGVyYXRpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIG1peGVkIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlIGNhY2hlIG9yIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAgICAgKiBUaGUgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiB3aWxsIHJldHVybgogICAgICogPGI+TWVtY2FjaGVkOjpSRVNfTk9URk9VTkQ8L2I+IGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCeUtleSgkc2VydmVyX2tleSwgJGtleSwgY2FsbGFibGUgJGNhY2hlX2NiID0gbnVsbCwgJGZsYWdzID0gMCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogUmV0cmlldmUgbXVsdGlwbGUgaXRlbXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmdldG11bHRpLnBocAogICAgICogQHBhcmFtIGFycmF5ICRrZXlzIDxwPgogICAgICogQXJyYXkgb2Yga2V5cyB0byByZXRyaWV2ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZmxhZ3MgZm9yIHRoZSBnZXQgb3BlcmF0aW9uLgogICAgICogPC9wPgogICAgICogQHJldHVybiBtaXhlZCB0aGUgYXJyYXkgb2YgZm91bmQgaXRlbXMgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBVc2UgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiBpZiBuZWNlc3NhcnkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNdWx0aShhcnJheSAka2V5cywgJGZsYWdzID0gMCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogUmV0cmlldmUgbXVsdGlwbGUgaXRlbXMgZnJvbSBhIHNwZWNpZmljIHNlcnZlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuZ2V0bXVsdGlieWtleS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcl9rZXkgPHA+CiAgICAgKiBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSBzZXJ2ZXIgdG8gc3RvcmUgdGhlIHZhbHVlIG9uIG9yIHJldHJpZXZlIGl0IGZyb20uIEluc3RlYWQgb2YgaGFzaGluZyBvbiB0aGUgYWN0dWFsIGtleSBmb3IgdGhlIGl0ZW0sIHdlIGhhc2ggb24gdGhlIHNlcnZlciBrZXkgd2hlbiBkZWNpZGluZyB3aGljaCBtZW1jYWNoZWQgc2VydmVyIHRvIHRhbGsgdG8uIFRoaXMgYWxsb3dzIHJlbGF0ZWQgaXRlbXMgdG8gYmUgZ3JvdXBlZCB0b2dldGhlciBvbiBhIHNpbmdsZSBzZXJ2ZXIgZm9yIGVmZmljaWVuY3kgd2l0aCBtdWx0aSBvcGVyYXRpb25zLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGFycmF5ICRrZXlzIDxwPgogICAgICogQXJyYXkgb2Yga2V5cyB0byByZXRyaWV2ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZmxhZ3MgZm9yIHRoZSBnZXQgb3BlcmF0aW9uLgogICAgICogPC9wPgogICAgICogQHJldHVybiBhcnJheXxmYWxzZSB0aGUgYXJyYXkgb2YgZm91bmQgaXRlbXMgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBVc2UgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiBpZiBuZWNlc3NhcnkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNdWx0aUJ5S2V5KCRzZXJ2ZXJfa2V5LCBhcnJheSAka2V5cywgJGZsYWdzID0gMCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogUmVxdWVzdCBtdWx0aXBsZSBpdGVtcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuZ2V0ZGVsYXllZC5waHAKICAgICAqIEBwYXJhbSBhcnJheSAka2V5cyA8cD4KICAgICAqIEFycmF5IG9mIGtleXMgdG8gcmVxdWVzdC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBib29sICR3aXRoX2NhcyBbb3B0aW9uYWxdIDxwPgogICAgICogV2hldGhlciB0byByZXF1ZXN0IENBUyB0b2tlbiB2YWx1ZXMgYWxzby4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkdmFsdWVfY2IgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSByZXN1bHQgY2FsbGJhY2sgb3IgPGI+TlVMTDwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIFVzZSA8Yj5NZW1jYWNoZWQ6OmdldFJlc3VsdENvZGU8L2I+IGlmIG5lY2Vzc2FyeS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERlbGF5ZWQoYXJyYXkgJGtleXMsICR3aXRoX2NhcyA9IG51bGwsIGNhbGxhYmxlICR2YWx1ZV9jYiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIFJlcXVlc3QgbXVsdGlwbGUgaXRlbXMgZnJvbSBhIHNwZWNpZmljIHNlcnZlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuZ2V0ZGVsYXllZGJ5a2V5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc2VydmVyX2tleSA8cD4KICAgICAqIFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHNlcnZlciB0byBzdG9yZSB0aGUgdmFsdWUgb24gb3IgcmV0cmlldmUgaXQgZnJvbS4gSW5zdGVhZCBvZiBoYXNoaW5nIG9uIHRoZSBhY3R1YWwga2V5IGZvciB0aGUgaXRlbSwgd2UgaGFzaCBvbiB0aGUgc2VydmVyIGtleSB3aGVuIGRlY2lkaW5nIHdoaWNoIG1lbWNhY2hlZCBzZXJ2ZXIgdG8gdGFsayB0by4gVGhpcyBhbGxvd3MgcmVsYXRlZCBpdGVtcyB0byBiZSBncm91cGVkIHRvZ2V0aGVyIG9uIGEgc2luZ2xlIHNlcnZlciBmb3IgZWZmaWNpZW5jeSB3aXRoIG11bHRpIG9wZXJhdGlvbnMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYXJyYXkgJGtleXMgPHA+CiAgICAgKiBBcnJheSBvZiBrZXlzIHRvIHJlcXVlc3QuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkd2l0aF9jYXMgW29wdGlvbmFsXSA8cD4KICAgICAqIFdoZXRoZXIgdG8gcmVxdWVzdCBDQVMgdG9rZW4gdmFsdWVzIGFsc28uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJHZhbHVlX2NiIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgcmVzdWx0IGNhbGxiYWNrIG9yIDxiPk5VTEw8L2I+LgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBVc2UgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiBpZiBuZWNlc3NhcnkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZWxheWVkQnlLZXkoJHNlcnZlcl9rZXksIGFycmF5ICRrZXlzLCAkd2l0aF9jYXMgPSBudWxsLCBjYWxsYWJsZSAkdmFsdWVfY2IgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBGZXRjaCB0aGUgbmV4dCByZXN1bHQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmZldGNoLnBocAogICAgICogQHJldHVybiBhcnJheXxmYWxzZSB0aGUgbmV4dCByZXN1bHQgb3IgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICAgICAqIFRoZSA8Yj5NZW1jYWNoZWQ6OmdldFJlc3VsdENvZGU8L2I+IHdpbGwgcmV0dXJuCiAgICAgKiA8Yj5NZW1jYWNoZWQ6OlJFU19FTkQ8L2I+IGlmIHJlc3VsdCBzZXQgaXMgZXhoYXVzdGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2goKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBGZXRjaCBhbGwgdGhlIHJlbWFpbmluZyByZXN1bHRzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5mZXRjaGFsbC5waHAKICAgICAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgdGhlIHJlc3VsdHMgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBVc2UgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiBpZiBuZWNlc3NhcnkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaEFsbCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIFN0b3JlIGFuIGl0ZW0KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLnNldC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSA8cD4KICAgICAqIFRoZSBrZXkgdW5kZXIgd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSA8cD4KICAgICAqIFRoZSB2YWx1ZSB0byBzdG9yZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGV4cGlyYXRpb24gW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBleHBpcmF0aW9uIHRpbWUsIGRlZmF1bHRzIHRvIDAuIFNlZSBFeHBpcmF0aW9uIFRpbWVzIGZvciBtb3JlIGluZm8uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR1ZGZfZmxhZ3MgW29wdGlvbmFsXQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBVc2UgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiBpZiBuZWNlc3NhcnkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoJGtleSwgJHZhbHVlLCAkZXhwaXJhdGlvbiA9IDAsICR1ZGZfZmxhZ3MgPSAwKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBTdG9yZSBhbiBpdGVtIG9uIGEgc3BlY2lmaWMgc2VydmVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5zZXRieWtleS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcl9rZXkgPHA+CiAgICAgKiBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSBzZXJ2ZXIgdG8gc3RvcmUgdGhlIHZhbHVlIG9uIG9yIHJldHJpZXZlIGl0IGZyb20uIEluc3RlYWQgb2YgaGFzaGluZyBvbiB0aGUgYWN0dWFsIGtleSBmb3IgdGhlIGl0ZW0sIHdlIGhhc2ggb24gdGhlIHNlcnZlciBrZXkgd2hlbiBkZWNpZGluZyB3aGljaCBtZW1jYWNoZWQgc2VydmVyIHRvIHRhbGsgdG8uIFRoaXMgYWxsb3dzIHJlbGF0ZWQgaXRlbXMgdG8gYmUgZ3JvdXBlZCB0b2dldGhlciBvbiBhIHNpbmdsZSBzZXJ2ZXIgZm9yIGVmZmljaWVuY3kgd2l0aCBtdWx0aSBvcGVyYXRpb25zLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IDxwPgogICAgICogVGhlIGtleSB1bmRlciB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIHRvIHN0b3JlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZXhwaXJhdGlvbiBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGV4cGlyYXRpb24gdGltZSwgZGVmYXVsdHMgdG8gMC4gU2VlIEV4cGlyYXRpb24gVGltZXMgZm9yIG1vcmUgaW5mby4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHVkZl9mbGFncyBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIFVzZSA8Yj5NZW1jYWNoZWQ6OmdldFJlc3VsdENvZGU8L2I+IGlmIG5lY2Vzc2FyeS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEJ5S2V5KCRzZXJ2ZXJfa2V5LCAka2V5LCAkdmFsdWUsICRleHBpcmF0aW9uID0gMCwgJHVkZl9mbGFncyA9IDApIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIFNldCBhIG5ldyBleHBpcmF0aW9uIG9uIGFuIGl0ZW0KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLnRvdWNoLnBocAogICAgICogQHBhcmFtIHN0cmluZyAka2V5IDxwPgogICAgICogVGhlIGtleSB1bmRlciB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRleHBpcmF0aW9uIDxwPgogICAgICogVGhlIGV4cGlyYXRpb24gdGltZSwgZGVmYXVsdHMgdG8gMC4gU2VlIEV4cGlyYXRpb24gVGltZXMgZm9yIG1vcmUgaW5mby4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogVXNlIDxiPk1lbWNhY2hlZDo6Z2V0UmVzdWx0Q29kZTwvYj4gaWYgbmVjZXNzYXJ5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG91Y2goJGtleSwgJGV4cGlyYXRpb24gPSAwKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBTZXQgYSBuZXcgZXhwaXJhdGlvbiBvbiBhbiBpdGVtIG9uIGEgc3BlY2lmaWMgc2VydmVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC50b3VjaGJ5a2V5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc2VydmVyX2tleSA8cD4KICAgICAqIFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHNlcnZlciB0byBzdG9yZSB0aGUgdmFsdWUgb24gb3IgcmV0cmlldmUgaXQgZnJvbS4gSW5zdGVhZCBvZiBoYXNoaW5nIG9uIHRoZSBhY3R1YWwga2V5IGZvciB0aGUgaXRlbSwgd2UgaGFzaCBvbiB0aGUgc2VydmVyIGtleSB3aGVuIGRlY2lkaW5nIHdoaWNoIG1lbWNhY2hlZCBzZXJ2ZXIgdG8gdGFsayB0by4gVGhpcyBhbGxvd3MgcmVsYXRlZCBpdGVtcyB0byBiZSBncm91cGVkIHRvZ2V0aGVyIG9uIGEgc2luZ2xlIHNlcnZlciBmb3IgZWZmaWNpZW5jeSB3aXRoIG11bHRpIG9wZXJhdGlvbnMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAgICAgKiBUaGUga2V5IHVuZGVyIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGV4cGlyYXRpb24gPHA+CiAgICAgKiBUaGUgZXhwaXJhdGlvbiB0aW1lLCBkZWZhdWx0cyB0byAwLiBTZWUgRXhwaXJhdGlvbiBUaW1lcyBmb3IgbW9yZSBpbmZvLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBVc2UgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiBpZiBuZWNlc3NhcnkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b3VjaEJ5S2V5KCRzZXJ2ZXJfa2V5LCAka2V5LCAkZXhwaXJhdGlvbikge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogU3RvcmUgbXVsdGlwbGUgaXRlbXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLnNldG11bHRpLnBocAogICAgICogQHBhcmFtIGFycmF5ICRpdGVtcyA8cD4KICAgICAqIEFuIGFycmF5IG9mIGtleS92YWx1ZSBwYWlycyB0byBzdG9yZSBvbiB0aGUgc2VydmVyLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZXhwaXJhdGlvbiBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGV4cGlyYXRpb24gdGltZSwgZGVmYXVsdHMgdG8gMC4gU2VlIEV4cGlyYXRpb24gVGltZXMgZm9yIG1vcmUgaW5mby4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHVkZl9mbGFncyBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIFVzZSA8Yj5NZW1jYWNoZWQ6OmdldFJlc3VsdENvZGU8L2I+IGlmIG5lY2Vzc2FyeS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE11bHRpKGFycmF5ICRpdGVtcywgJGV4cGlyYXRpb24gPSAwLCAkdWRmX2ZsYWdzID0gMCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogU3RvcmUgbXVsdGlwbGUgaXRlbXMgb24gYSBzcGVjaWZpYyBzZXJ2ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLnNldG11bHRpYnlrZXkucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfa2V5IDxwPgogICAgICogVGhlIGtleSBpZGVudGlmeWluZyB0aGUgc2VydmVyIHRvIHN0b3JlIHRoZSB2YWx1ZSBvbiBvciByZXRyaWV2ZSBpdCBmcm9tLiBJbnN0ZWFkIG9mIGhhc2hpbmcgb24gdGhlIGFjdHVhbCBrZXkgZm9yIHRoZSBpdGVtLCB3ZSBoYXNoIG9uIHRoZSBzZXJ2ZXIga2V5IHdoZW4gZGVjaWRpbmcgd2hpY2ggbWVtY2FjaGVkIHNlcnZlciB0byB0YWxrIHRvLiBUaGlzIGFsbG93cyByZWxhdGVkIGl0ZW1zIHRvIGJlIGdyb3VwZWQgdG9nZXRoZXIgb24gYSBzaW5nbGUgc2VydmVyIGZvciBlZmZpY2llbmN5IHdpdGggbXVsdGkgb3BlcmF0aW9ucy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBhcnJheSAkaXRlbXMgPHA+CiAgICAgKiBBbiBhcnJheSBvZiBrZXkvdmFsdWUgcGFpcnMgdG8gc3RvcmUgb24gdGhlIHNlcnZlci4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGV4cGlyYXRpb24gW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBleHBpcmF0aW9uIHRpbWUsIGRlZmF1bHRzIHRvIDAuIFNlZSBFeHBpcmF0aW9uIFRpbWVzIGZvciBtb3JlIGluZm8uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR1ZGZfZmxhZ3MgW29wdGlvbmFsXQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBVc2UgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiBpZiBuZWNlc3NhcnkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNdWx0aUJ5S2V5KCRzZXJ2ZXJfa2V5LCBhcnJheSAkaXRlbXMsICRleHBpcmF0aW9uID0gMCwgJHVkZl9mbGFncyA9IDApIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIENvbXBhcmUgYW5kIHN3YXAgYW4gaXRlbQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY2FzLnBocAogICAgICogQHBhcmFtIGZsb2F0ICRjYXNfdG9rZW4gPHA+CiAgICAgKiBVbmlxdWUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBleGlzdGluZyBpdGVtLiBHZW5lcmF0ZWQgYnkgbWVtY2FjaGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAgICAgKiBUaGUga2V5IHVuZGVyIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgPHA+CiAgICAgKiBUaGUgdmFsdWUgdG8gc3RvcmUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRleHBpcmF0aW9uIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZXhwaXJhdGlvbiB0aW1lLCBkZWZhdWx0cyB0byAwLiBTZWUgRXhwaXJhdGlvbiBUaW1lcyBmb3IgbW9yZSBpbmZvLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkdWRmX2ZsYWdzIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogVGhlIDxiPk1lbWNhY2hlZDo6Z2V0UmVzdWx0Q29kZTwvYj4gd2lsbCByZXR1cm4KICAgICAqIDxiPk1lbWNhY2hlZDo6UkVTX0RBVEFfRVhJU1RTPC9iPiBpZiB0aGUgaXRlbSB5b3UgYXJlIHRyeWluZwogICAgICogdG8gc3RvcmUgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgeW91IGxhc3QgZmV0Y2hlZCBpdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhcygkY2FzX3Rva2VuLCAka2V5LCAkdmFsdWUsICRleHBpcmF0aW9uID0gMCwgJHVkZl9mbGFncyA9IDApIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIENvbXBhcmUgYW5kIHN3YXAgYW4gaXRlbSBvbiBhIHNwZWNpZmljIHNlcnZlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuY2FzYnlrZXkucGhwCiAgICAgKiBAcGFyYW0gZmxvYXQgJGNhc190b2tlbiA8cD4KICAgICAqIFVuaXF1ZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGV4aXN0aW5nIGl0ZW0uIEdlbmVyYXRlZCBieSBtZW1jYWNoZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcl9rZXkgPHA+CiAgICAgKiBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSBzZXJ2ZXIgdG8gc3RvcmUgdGhlIHZhbHVlIG9uIG9yIHJldHJpZXZlIGl0IGZyb20uIEluc3RlYWQgb2YgaGFzaGluZyBvbiB0aGUgYWN0dWFsIGtleSBmb3IgdGhlIGl0ZW0sIHdlIGhhc2ggb24gdGhlIHNlcnZlciBrZXkgd2hlbiBkZWNpZGluZyB3aGljaCBtZW1jYWNoZWQgc2VydmVyIHRvIHRhbGsgdG8uIFRoaXMgYWxsb3dzIHJlbGF0ZWQgaXRlbXMgdG8gYmUgZ3JvdXBlZCB0b2dldGhlciBvbiBhIHNpbmdsZSBzZXJ2ZXIgZm9yIGVmZmljaWVuY3kgd2l0aCBtdWx0aSBvcGVyYXRpb25zLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IDxwPgogICAgICogVGhlIGtleSB1bmRlciB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIHRvIHN0b3JlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZXhwaXJhdGlvbiBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGV4cGlyYXRpb24gdGltZSwgZGVmYXVsdHMgdG8gMC4gU2VlIEV4cGlyYXRpb24gVGltZXMgZm9yIG1vcmUgaW5mby4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHVkZl9mbGFncyBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIFRoZSA8Yj5NZW1jYWNoZWQ6OmdldFJlc3VsdENvZGU8L2I+IHdpbGwgcmV0dXJuCiAgICAgKiA8Yj5NZW1jYWNoZWQ6OlJFU19EQVRBX0VYSVNUUzwvYj4gaWYgdGhlIGl0ZW0geW91IGFyZSB0cnlpbmcKICAgICAqIHRvIHN0b3JlIGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlIHlvdSBsYXN0IGZldGNoZWQgaXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYXNCeUtleSgkY2FzX3Rva2VuLCAkc2VydmVyX2tleSwgJGtleSwgJHZhbHVlLCAkZXhwaXJhdGlvbiA9IDAsICR1ZGZfZmxhZ3MgPSAwKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBBZGQgYW4gaXRlbSB1bmRlciBhIG5ldyBrZXkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmFkZC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSA8cD4KICAgICAqIFRoZSBrZXkgdW5kZXIgd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSA8cD4KICAgICAqIFRoZSB2YWx1ZSB0byBzdG9yZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGV4cGlyYXRpb24gW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBleHBpcmF0aW9uIHRpbWUsIGRlZmF1bHRzIHRvIDAuIFNlZSBFeHBpcmF0aW9uIFRpbWVzIGZvciBtb3JlIGluZm8uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR1ZGZfZmxhZ3MgW29wdGlvbmFsXQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBUaGUgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiB3aWxsIHJldHVybgogICAgICogPGI+TWVtY2FjaGVkOjpSRVNfTk9UU1RPUkVEPC9iPiBpZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKCRrZXksICR2YWx1ZSwgJGV4cGlyYXRpb24gPSAwLCAkdWRmX2ZsYWdzID0gMCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogQWRkIGFuIGl0ZW0gdW5kZXIgYSBuZXcga2V5IG9uIGEgc3BlY2lmaWMgc2VydmVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5hZGRieWtleS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcl9rZXkgPHA+CiAgICAgKiBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSBzZXJ2ZXIgdG8gc3RvcmUgdGhlIHZhbHVlIG9uIG9yIHJldHJpZXZlIGl0IGZyb20uIEluc3RlYWQgb2YgaGFzaGluZyBvbiB0aGUgYWN0dWFsIGtleSBmb3IgdGhlIGl0ZW0sIHdlIGhhc2ggb24gdGhlIHNlcnZlciBrZXkgd2hlbiBkZWNpZGluZyB3aGljaCBtZW1jYWNoZWQgc2VydmVyIHRvIHRhbGsgdG8uIFRoaXMgYWxsb3dzIHJlbGF0ZWQgaXRlbXMgdG8gYmUgZ3JvdXBlZCB0b2dldGhlciBvbiBhIHNpbmdsZSBzZXJ2ZXIgZm9yIGVmZmljaWVuY3kgd2l0aCBtdWx0aSBvcGVyYXRpb25zLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IDxwPgogICAgICogVGhlIGtleSB1bmRlciB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIHRvIHN0b3JlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZXhwaXJhdGlvbiBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGV4cGlyYXRpb24gdGltZSwgZGVmYXVsdHMgdG8gMC4gU2VlIEV4cGlyYXRpb24gVGltZXMgZm9yIG1vcmUgaW5mby4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHVkZl9mbGFncyBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIFRoZSA8Yj5NZW1jYWNoZWQ6OmdldFJlc3VsdENvZGU8L2I+IHdpbGwgcmV0dXJuCiAgICAgKiA8Yj5NZW1jYWNoZWQ6OlJFU19OT1RTVE9SRUQ8L2I+IGlmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRCeUtleSgkc2VydmVyX2tleSwgJGtleSwgJHZhbHVlLCAkZXhwaXJhdGlvbiA9IDAsICR1ZGZfZmxhZ3MgPSAwKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBBcHBlbmQgZGF0YSB0byBhbiBleGlzdGluZyBpdGVtCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5hcHBlbmQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAgICAgKiBUaGUga2V5IHVuZGVyIHdoaWNoIHRvIHN0b3JlIHRoZSB2YWx1ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIDxwPgogICAgICogVGhlIHN0cmluZyB0byBhcHBlbmQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIFRoZSA8Yj5NZW1jYWNoZWQ6OmdldFJlc3VsdENvZGU8L2I+IHdpbGwgcmV0dXJuCiAgICAgKiA8Yj5NZW1jYWNoZWQ6OlJFU19OT1RTVE9SRUQ8L2I+IGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoJGtleSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBBcHBlbmQgZGF0YSB0byBhbiBleGlzdGluZyBpdGVtIG9uIGEgc3BlY2lmaWMgc2VydmVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5hcHBlbmRieWtleS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcl9rZXkgPHA+CiAgICAgKiBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSBzZXJ2ZXIgdG8gc3RvcmUgdGhlIHZhbHVlIG9uIG9yIHJldHJpZXZlIGl0IGZyb20uIEluc3RlYWQgb2YgaGFzaGluZyBvbiB0aGUgYWN0dWFsIGtleSBmb3IgdGhlIGl0ZW0sIHdlIGhhc2ggb24gdGhlIHNlcnZlciBrZXkgd2hlbiBkZWNpZGluZyB3aGljaCBtZW1jYWNoZWQgc2VydmVyIHRvIHRhbGsgdG8uIFRoaXMgYWxsb3dzIHJlbGF0ZWQgaXRlbXMgdG8gYmUgZ3JvdXBlZCB0b2dldGhlciBvbiBhIHNpbmdsZSBzZXJ2ZXIgZm9yIGVmZmljaWVuY3kgd2l0aCBtdWx0aSBvcGVyYXRpb25zLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IDxwPgogICAgICogVGhlIGtleSB1bmRlciB3aGljaCB0byBzdG9yZSB0aGUgdmFsdWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSA8cD4KICAgICAqIFRoZSBzdHJpbmcgdG8gYXBwZW5kLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBUaGUgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiB3aWxsIHJldHVybgogICAgICogPGI+TWVtY2FjaGVkOjpSRVNfTk9UU1RPUkVEPC9iPiBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kQnlLZXkoJHNlcnZlcl9rZXksICRrZXksICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogUHJlcGVuZCBkYXRhIHRvIGFuIGV4aXN0aW5nIGl0ZW0KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLnByZXBlbmQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAgICAgKiBUaGUga2V5IG9mIHRoZSBpdGVtIHRvIHByZXBlbmQgdGhlIGRhdGEgdG8uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSA8cD4KICAgICAqIFRoZSBzdHJpbmcgdG8gcHJlcGVuZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogVGhlIDxiPk1lbWNhY2hlZDo6Z2V0UmVzdWx0Q29kZTwvYj4gd2lsbCByZXR1cm4KICAgICAqIDxiPk1lbWNhY2hlZDo6UkVTX05PVFNUT1JFRDwvYj4gaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXBlbmQoJGtleSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBQcmVwZW5kIGRhdGEgdG8gYW4gZXhpc3RpbmcgaXRlbSBvbiBhIHNwZWNpZmljIHNlcnZlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQucHJlcGVuZGJ5a2V5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc2VydmVyX2tleSA8cD4KICAgICAqIFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHNlcnZlciB0byBzdG9yZSB0aGUgdmFsdWUgb24gb3IgcmV0cmlldmUgaXQgZnJvbS4gSW5zdGVhZCBvZiBoYXNoaW5nIG9uIHRoZSBhY3R1YWwga2V5IGZvciB0aGUgaXRlbSwgd2UgaGFzaCBvbiB0aGUgc2VydmVyIGtleSB3aGVuIGRlY2lkaW5nIHdoaWNoIG1lbWNhY2hlZCBzZXJ2ZXIgdG8gdGFsayB0by4gVGhpcyBhbGxvd3MgcmVsYXRlZCBpdGVtcyB0byBiZSBncm91cGVkIHRvZ2V0aGVyIG9uIGEgc2luZ2xlIHNlcnZlciBmb3IgZWZmaWNpZW5jeSB3aXRoIG11bHRpIG9wZXJhdGlvbnMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAgICAgKiBUaGUga2V5IG9mIHRoZSBpdGVtIHRvIHByZXBlbmQgdGhlIGRhdGEgdG8uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSA8cD4KICAgICAqIFRoZSBzdHJpbmcgdG8gcHJlcGVuZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogVGhlIDxiPk1lbWNhY2hlZDo6Z2V0UmVzdWx0Q29kZTwvYj4gd2lsbCByZXR1cm4KICAgICAqIDxiPk1lbWNhY2hlZDo6UkVTX05PVFNUT1JFRDwvYj4gaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXBlbmRCeUtleSgkc2VydmVyX2tleSwgJGtleSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBSZXBsYWNlIHRoZSBpdGVtIHVuZGVyIGFuIGV4aXN0aW5nIGtleQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQucmVwbGFjZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSA8cD4KICAgICAqIFRoZSBrZXkgdW5kZXIgd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSA8cD4KICAgICAqIFRoZSB2YWx1ZSB0byBzdG9yZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGV4cGlyYXRpb24gW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBleHBpcmF0aW9uIHRpbWUsIGRlZmF1bHRzIHRvIDAuIFNlZSBFeHBpcmF0aW9uIFRpbWVzIGZvciBtb3JlIGluZm8uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR1ZGZfZmxhZ3MgW29wdGlvbmFsXQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBUaGUgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiB3aWxsIHJldHVybgogICAgICogPGI+TWVtY2FjaGVkOjpSRVNfTk9UU1RPUkVEPC9iPiBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVwbGFjZSgka2V5LCAkdmFsdWUsICRleHBpcmF0aW9uID0gbnVsbCwgJHVkZl9mbGFncyA9IDApIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIFJlcGxhY2UgdGhlIGl0ZW0gdW5kZXIgYW4gZXhpc3Rpbmcga2V5IG9uIGEgc3BlY2lmaWMgc2VydmVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5yZXBsYWNlYnlrZXkucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfa2V5IDxwPgogICAgICogVGhlIGtleSBpZGVudGlmeWluZyB0aGUgc2VydmVyIHRvIHN0b3JlIHRoZSB2YWx1ZSBvbiBvciByZXRyaWV2ZSBpdCBmcm9tLiBJbnN0ZWFkIG9mIGhhc2hpbmcgb24gdGhlIGFjdHVhbCBrZXkgZm9yIHRoZSBpdGVtLCB3ZSBoYXNoIG9uIHRoZSBzZXJ2ZXIga2V5IHdoZW4gZGVjaWRpbmcgd2hpY2ggbWVtY2FjaGVkIHNlcnZlciB0byB0YWxrIHRvLiBUaGlzIGFsbG93cyByZWxhdGVkIGl0ZW1zIHRvIGJlIGdyb3VwZWQgdG9nZXRoZXIgb24gYSBzaW5nbGUgc2VydmVyIGZvciBlZmZpY2llbmN5IHdpdGggbXVsdGkgb3BlcmF0aW9ucy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSA8cD4KICAgICAqIFRoZSBrZXkgdW5kZXIgd2hpY2ggdG8gc3RvcmUgdGhlIHZhbHVlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSA8cD4KICAgICAqIFRoZSB2YWx1ZSB0byBzdG9yZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGV4cGlyYXRpb24gW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBleHBpcmF0aW9uIHRpbWUsIGRlZmF1bHRzIHRvIDAuIFNlZSBFeHBpcmF0aW9uIFRpbWVzIGZvciBtb3JlIGluZm8uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR1ZGZfZmxhZ3MgW29wdGlvbmFsXQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBUaGUgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiB3aWxsIHJldHVybgogICAgICogPGI+TWVtY2FjaGVkOjpSRVNfTk9UU1RPUkVEPC9iPiBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVwbGFjZUJ5S2V5KCRzZXJ2ZXJfa2V5LCAka2V5LCAkdmFsdWUsICRleHBpcmF0aW9uID0gbnVsbCwgJHVkZl9mbGFncyA9IDApIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIERlbGV0ZSBhbiBpdGVtCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5kZWxldGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAgICAgKiBUaGUga2V5IHRvIGJlIGRlbGV0ZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR0aW1lIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciB3aWxsIHdhaXQgdG8gZGVsZXRlIHRoZSBpdGVtLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBUaGUgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiB3aWxsIHJldHVybgogICAgICogPGI+TWVtY2FjaGVkOjpSRVNfTk9URk9VTkQ8L2I+IGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGUoJGtleSwgJHRpbWUgPSAwKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBEZWxldGUgbXVsdGlwbGUgaXRlbXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmRlbGV0ZW11bHRpLnBocAogICAgICogQHBhcmFtIGFycmF5ICRrZXlzIDxwPgogICAgICogVGhlIGtleXMgdG8gYmUgZGVsZXRlZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHRpbWUgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHdpbGwgd2FpdCB0byBkZWxldGUgdGhlIGl0ZW1zLgogICAgICogPC9wPgogICAgICogQHJldHVybiBhcnJheSBSZXR1cm5zIGFycmF5IGluZGV4ZWQgYnkga2V5cyBhbmQgd2hlcmUgdmFsdWVzIGFyZSBpbmRpY2F0aW5nIHdoZXRoZXIgb3BlcmF0aW9uIHN1Y2NlZWRlZCBvciBub3QuCiAgICAgKiBUaGUgPGI+TWVtY2FjaGVkOjpnZXRSZXN1bHRDb2RlPC9iPiB3aWxsIHJldHVybgogICAgICogPGI+TWVtY2FjaGVkOjpSRVNfTk9URk9VTkQ8L2I+IGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVNdWx0aShhcnJheSAka2V5cywgJHRpbWUgPSAwKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBEZWxldGUgYW4gaXRlbSBmcm9tIGEgc3BlY2lmaWMgc2VydmVyCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5kZWxldGVieWtleS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcl9rZXkgPHA+CiAgICAgKiBUaGUga2V5IGlkZW50aWZ5aW5nIHRoZSBzZXJ2ZXIgdG8gc3RvcmUgdGhlIHZhbHVlIG9uIG9yIHJldHJpZXZlIGl0IGZyb20uIEluc3RlYWQgb2YgaGFzaGluZyBvbiB0aGUgYWN0dWFsIGtleSBmb3IgdGhlIGl0ZW0sIHdlIGhhc2ggb24gdGhlIHNlcnZlciBrZXkgd2hlbiBkZWNpZGluZyB3aGljaCBtZW1jYWNoZWQgc2VydmVyIHRvIHRhbGsgdG8uIFRoaXMgYWxsb3dzIHJlbGF0ZWQgaXRlbXMgdG8gYmUgZ3JvdXBlZCB0b2dldGhlciBvbiBhIHNpbmdsZSBzZXJ2ZXIgZm9yIGVmZmljaWVuY3kgd2l0aCBtdWx0aSBvcGVyYXRpb25zLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IDxwPgogICAgICogVGhlIGtleSB0byBiZSBkZWxldGVkLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkdGltZSBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgd2lsbCB3YWl0IHRvIGRlbGV0ZSB0aGUgaXRlbS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogVGhlIDxiPk1lbWNhY2hlZDo6Z2V0UmVzdWx0Q29kZTwvYj4gd2lsbCByZXR1cm4KICAgICAqIDxiPk1lbWNhY2hlZDo6UkVTX05PVEZPVU5EPC9iPiBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlQnlLZXkoJHNlcnZlcl9rZXksICRrZXksICR0aW1lID0gMCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogRGVsZXRlIG11bHRpcGxlIGl0ZW1zIGZyb20gYSBzcGVjaWZpYyBzZXJ2ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmRlbGV0ZW11bHRpYnlrZXkucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfa2V5IDxwPgogICAgICogVGhlIGtleSBpZGVudGlmeWluZyB0aGUgc2VydmVyIHRvIHN0b3JlIHRoZSB2YWx1ZSBvbiBvciByZXRyaWV2ZSBpdCBmcm9tLiBJbnN0ZWFkIG9mIGhhc2hpbmcgb24gdGhlIGFjdHVhbCBrZXkgZm9yIHRoZSBpdGVtLCB3ZSBoYXNoIG9uIHRoZSBzZXJ2ZXIga2V5IHdoZW4gZGVjaWRpbmcgd2hpY2ggbWVtY2FjaGVkIHNlcnZlciB0byB0YWxrIHRvLiBUaGlzIGFsbG93cyByZWxhdGVkIGl0ZW1zIHRvIGJlIGdyb3VwZWQgdG9nZXRoZXIgb24gYSBzaW5nbGUgc2VydmVyIGZvciBlZmZpY2llbmN5IHdpdGggbXVsdGkgb3BlcmF0aW9ucy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBhcnJheSAka2V5cyA8cD4KICAgICAqIFRoZSBrZXlzIHRvIGJlIGRlbGV0ZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR0aW1lIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciB3aWxsIHdhaXQgdG8gZGVsZXRlIHRoZSBpdGVtcy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogVGhlIDxiPk1lbWNhY2hlZDo6Z2V0UmVzdWx0Q29kZTwvYj4gd2lsbCByZXR1cm4KICAgICAqIDxiPk1lbWNhY2hlZDo6UkVTX05PVEZPVU5EPC9iPiBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlTXVsdGlCeUtleSgkc2VydmVyX2tleSwgYXJyYXkgJGtleXMsICR0aW1lID0gMCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogSW5jcmVtZW50IG51bWVyaWMgaXRlbSdzIHZhbHVlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5pbmNyZW1lbnQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAgICAgKiBUaGUga2V5IG9mIHRoZSBpdGVtIHRvIGluY3JlbWVudC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldCBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGFtb3VudCBieSB3aGljaCB0byBpbmNyZW1lbnQgdGhlIGl0ZW0ncyB2YWx1ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGluaXRpYWxfdmFsdWUgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSB2YWx1ZSB0byBzZXQgdGhlIGl0ZW0gdG8gaWYgaXQgZG9lc24ndCBjdXJyZW50bHkgZXhpc3QuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRleHBpcnkgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBleHBpcnkgdGltZSB0byBzZXQgb24gdGhlIGl0ZW0uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBuZXcgaXRlbSdzIHZhbHVlIG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmNyZW1lbnQoJGtleSwgJG9mZnNldCA9IDEsICRpbml0aWFsX3ZhbHVlID0gMCwgJGV4cGlyeSA9IDApIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIERlY3JlbWVudCBudW1lcmljIGl0ZW0ncyB2YWx1ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuZGVjcmVtZW50LnBocAogICAgICogQHBhcmFtIHN0cmluZyAka2V5IDxwPgogICAgICogVGhlIGtleSBvZiB0aGUgaXRlbSB0byBkZWNyZW1lbnQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBhbW91bnQgYnkgd2hpY2ggdG8gZGVjcmVtZW50IHRoZSBpdGVtJ3MgdmFsdWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRpbml0aWFsX3ZhbHVlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgdmFsdWUgdG8gc2V0IHRoZSBpdGVtIHRvIGlmIGl0IGRvZXNuJ3QgY3VycmVudGx5IGV4aXN0LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZXhwaXJ5IFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZXhwaXJ5IHRpbWUgdG8gc2V0IG9uIHRoZSBpdGVtLgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnR8ZmFsc2UgaXRlbSdzIG5ldyB2YWx1ZSBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVjcmVtZW50KCRrZXksICRvZmZzZXQgPSAxLCAkaW5pdGlhbF92YWx1ZSA9IDAsICRleHBpcnkgPSAwKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBJbmNyZW1lbnQgbnVtZXJpYyBpdGVtJ3MgdmFsdWUsIHN0b3JlZCBvbiBhIHNwZWNpZmljIHNlcnZlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuaW5jcmVtZW50YnlrZXkucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfa2V5IDxwPgogICAgICogVGhlIGtleSBpZGVudGlmeWluZyB0aGUgc2VydmVyIHRvIHN0b3JlIHRoZSB2YWx1ZSBvbiBvciByZXRyaWV2ZSBpdCBmcm9tLiBJbnN0ZWFkIG9mIGhhc2hpbmcgb24gdGhlIGFjdHVhbCBrZXkgZm9yIHRoZSBpdGVtLCB3ZSBoYXNoIG9uIHRoZSBzZXJ2ZXIga2V5IHdoZW4gZGVjaWRpbmcgd2hpY2ggbWVtY2FjaGVkIHNlcnZlciB0byB0YWxrIHRvLiBUaGlzIGFsbG93cyByZWxhdGVkIGl0ZW1zIHRvIGJlIGdyb3VwZWQgdG9nZXRoZXIgb24gYSBzaW5nbGUgc2VydmVyIGZvciBlZmZpY2llbmN5IHdpdGggbXVsdGkgb3BlcmF0aW9ucy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSA8cD4KICAgICAqIFRoZSBrZXkgb2YgdGhlIGl0ZW0gdG8gaW5jcmVtZW50LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkb2Zmc2V0IFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgYW1vdW50IGJ5IHdoaWNoIHRvIGluY3JlbWVudCB0aGUgaXRlbSdzIHZhbHVlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkaW5pdGlhbF92YWx1ZSBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIHZhbHVlIHRvIHNldCB0aGUgaXRlbSB0byBpZiBpdCBkb2Vzbid0IGN1cnJlbnRseSBleGlzdC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGV4cGlyeSBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGV4cGlyeSB0aW1lIHRvIHNldCBvbiB0aGUgaXRlbS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gaW50fGZhbHNlIG5ldyBpdGVtJ3MgdmFsdWUgb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluY3JlbWVudEJ5S2V5KCRzZXJ2ZXJfa2V5LCAka2V5LCAkb2Zmc2V0ID0gMSwgJGluaXRpYWxfdmFsdWUgPSAwLCAkZXhwaXJ5ID0gMCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogRGVjcmVtZW50IG51bWVyaWMgaXRlbSdzIHZhbHVlLCBzdG9yZWQgb24gYSBzcGVjaWZpYyBzZXJ2ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmRlY3JlbWVudGJ5a2V5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc2VydmVyX2tleSA8cD4KICAgICAqIFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHNlcnZlciB0byBzdG9yZSB0aGUgdmFsdWUgb24gb3IgcmV0cmlldmUgaXQgZnJvbS4gSW5zdGVhZCBvZiBoYXNoaW5nIG9uIHRoZSBhY3R1YWwga2V5IGZvciB0aGUgaXRlbSwgd2UgaGFzaCBvbiB0aGUgc2VydmVyIGtleSB3aGVuIGRlY2lkaW5nIHdoaWNoIG1lbWNhY2hlZCBzZXJ2ZXIgdG8gdGFsayB0by4gVGhpcyBhbGxvd3MgcmVsYXRlZCBpdGVtcyB0byBiZSBncm91cGVkIHRvZ2V0aGVyIG9uIGEgc2luZ2xlIHNlcnZlciBmb3IgZWZmaWNpZW5jeSB3aXRoIG11bHRpIG9wZXJhdGlvbnMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAgICAgKiBUaGUga2V5IG9mIHRoZSBpdGVtIHRvIGRlY3JlbWVudC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldCBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGFtb3VudCBieSB3aGljaCB0byBkZWNyZW1lbnQgdGhlIGl0ZW0ncyB2YWx1ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGluaXRpYWxfdmFsdWUgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSB2YWx1ZSB0byBzZXQgdGhlIGl0ZW0gdG8gaWYgaXQgZG9lc24ndCBjdXJyZW50bHkgZXhpc3QuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRleHBpcnkgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBleHBpcnkgdGltZSB0byBzZXQgb24gdGhlIGl0ZW0uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBpdGVtJ3MgbmV3IHZhbHVlIG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWNyZW1lbnRCeUtleSgkc2VydmVyX2tleSwgJGtleSwgJG9mZnNldCA9IDEsICRpbml0aWFsX3ZhbHVlID0gMCwgJGV4cGlyeSA9IDApIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIEFkZCBhIHNlcnZlciB0byB0aGUgc2VydmVyIHBvb2wKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmFkZHNlcnZlci5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhvc3QgPHA+CiAgICAgKiBUaGUgaG9zdG5hbWUgb2YgdGhlIG1lbWNhY2hlIHNlcnZlci4gSWYgdGhlIGhvc3RuYW1lIGlzIGludmFsaWQsIGRhdGEtcmVsYXRlZAogICAgICogb3BlcmF0aW9ucyB3aWxsIHNldAogICAgICogPGI+TWVtY2FjaGVkOjpSRVNfSE9TVF9MT09LVVBfRkFJTFVSRTwvYj4gcmVzdWx0IGNvZGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRwb3J0IDxwPgogICAgICogVGhlIHBvcnQgb24gd2hpY2ggbWVtY2FjaGUgaXMgcnVubmluZy4gVXN1YWxseSwgdGhpcyBpcwogICAgICogMTEyMTEuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICR3ZWlnaHQgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSB3ZWlnaHQgb2YgdGhlIHNlcnZlciByZWxhdGl2ZSB0byB0aGUgdG90YWwgd2VpZ2h0IG9mIGFsbCB0aGUKICAgICAqIHNlcnZlcnMgaW4gdGhlIHBvb2wuIFRoaXMgY29udHJvbHMgdGhlIHByb2JhYmlsaXR5IG9mIHRoZSBzZXJ2ZXIgYmVpbmcKICAgICAqIHNlbGVjdGVkIGZvciBvcGVyYXRpb25zLiBUaGlzIGlzIHVzZWQgb25seSB3aXRoIGNvbnNpc3RlbnQgZGlzdHJpYnV0aW9uCiAgICAgKiBvcHRpb24gYW5kIHVzdWFsbHkgY29ycmVzcG9uZHMgdG8gdGhlIGFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlIHRvCiAgICAgKiBtZW1jYWNoZSBvbiB0aGF0IHNlcnZlci4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkU2VydmVyKCRob3N0LCAkcG9ydCwgJHdlaWdodCA9IDApIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjEpPGJyLz4KICAgICAqIEFkZCBtdWx0aXBsZSBzZXJ2ZXJzIHRvIHRoZSBzZXJ2ZXIgcG9vbAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuYWRkc2VydmVycy5waHAKICAgICAqIEBwYXJhbSBhcnJheSAkc2VydmVycwogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRTZXJ2ZXJzKGFycmF5ICRzZXJ2ZXJzKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBHZXQgdGhlIGxpc3Qgb2YgdGhlIHNlcnZlcnMgaW4gdGhlIHBvb2wKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmdldHNlcnZlcmxpc3QucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5IFRoZSBsaXN0IG9mIGFsbCBzZXJ2ZXJzIGluIHRoZSBzZXJ2ZXIgcG9vbC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlckxpc3QoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBNYXAgYSBrZXkgdG8gYSBzZXJ2ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmdldHNlcnZlcmJ5a2V5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc2VydmVyX2tleSA8cD4KICAgICAqIFRoZSBrZXkgaWRlbnRpZnlpbmcgdGhlIHNlcnZlciB0byBzdG9yZSB0aGUgdmFsdWUgb24gb3IgcmV0cmlldmUgaXQgZnJvbS4gSW5zdGVhZCBvZiBoYXNoaW5nIG9uIHRoZSBhY3R1YWwga2V5IGZvciB0aGUgaXRlbSwgd2UgaGFzaCBvbiB0aGUgc2VydmVyIGtleSB3aGVuIGRlY2lkaW5nIHdoaWNoIG1lbWNhY2hlZCBzZXJ2ZXIgdG8gdGFsayB0by4gVGhpcyBhbGxvd3MgcmVsYXRlZCBpdGVtcyB0byBiZSBncm91cGVkIHRvZ2V0aGVyIG9uIGEgc2luZ2xlIHNlcnZlciBmb3IgZWZmaWNpZW5jeSB3aXRoIG11bHRpIG9wZXJhdGlvbnMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5IGNvbnRhaW5pbmcgdGhyZWUga2V5cyBvZiBob3N0LAogICAgICogcG9ydCwgYW5kIHdlaWdodCBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPgogICAgICogb24gZmFpbHVyZS4KICAgICAqIFVzZSA8Yj5NZW1jYWNoZWQ6OmdldFJlc3VsdENvZGU8L2I+IGlmIG5lY2Vzc2FyeS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlcnZlckJ5S2V5KCRzZXJ2ZXJfa2V5KSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBDbGVhcnMgYWxsIHNlcnZlcnMgZnJvbSB0aGUgc2VydmVyIGxpc3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLnJlc2V0c2VydmVybGlzdC5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXRTZXJ2ZXJMaXN0KCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogQ2xvc2UgYW55IG9wZW4gY29ubmVjdGlvbnMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLnF1aXQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHF1aXQoKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBHZXQgc2VydmVyIHBvb2wgc3RhdGlzdGljcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuZ2V0c3RhdHMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlIDxwPml0ZW1zLCBzbGFicywgc2l6ZXMgLi4uPC9wPgogICAgICogQHJldHVybiBhcnJheXxmYWxzZSBBcnJheSBvZiBzZXJ2ZXIgc3RhdGlzdGljcywgb25lIGVudHJ5IHBlciBzZXJ2ZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0cygkdHlwZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjUpPGJyLz4KICAgICAqIEdldCBzZXJ2ZXIgcG9vbCB2ZXJzaW9uIGluZm8KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmdldHZlcnNpb24ucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5IEFycmF5IG9mIHNlcnZlciB2ZXJzaW9ucywgb25lIGVudHJ5IHBlciBzZXJ2ZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogR2V0cyB0aGUga2V5cyBzdG9yZWQgb24gYWxsIHRoZSBzZXJ2ZXJzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5nZXRhbGxrZXlzLnBocAogICAgICogQHJldHVybiBhcnJheXxmYWxzZSB0aGUga2V5cyBzdG9yZWQgb24gYWxsIHRoZSBzZXJ2ZXJzIG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBbGxLZXlzKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogSW52YWxpZGF0ZSBhbGwgaXRlbXMgaW4gdGhlIGNhY2hlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL21lbWNhY2hlZC5mbHVzaC5waHAKICAgICAqIEBwYXJhbSBpbnQgJGRlbGF5IFtvcHRpb25hbF0gPHA+CiAgICAgKiBOdW1lciBvZiBzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGludmFsaWRhdGluZyB0aGUgaXRlbXMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIFVzZSA8Yj5NZW1jYWNoZWQ6OmdldFJlc3VsdENvZGU8L2I+IGlmIG5lY2Vzc2FyeS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZsdXNoKCRkZWxheSA9IDApIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIFJldHJpZXZlIGEgTWVtY2FjaGVkIG9wdGlvbiB2YWx1ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuZ2V0b3B0aW9uLnBocAogICAgICogQHBhcmFtIGludCAkb3B0aW9uIDxwPgogICAgICogT25lIG9mIHRoZSBNZW1jYWNoZWQ6Ok9QVF8qIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gbWl4ZWQgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgb3B0aW9uLCBvciA8Yj5GQUxTRTwvYj4gb24KICAgICAqIGVycm9yLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0aW9uKCRvcHRpb24pIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIFNldCBhIE1lbWNhY2hlZCBvcHRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLnNldG9wdGlvbi5waHAKICAgICAqIEBwYXJhbSBpbnQgJG9wdGlvbgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRPcHRpb24oJG9wdGlvbiwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBTZXQgTWVtY2FjaGVkIG9wdGlvbnMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLnNldG9wdGlvbnMucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgPHA+CiAgICAgKiBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zIHdoZXJlIHRoZSBrZXkgaXMgdGhlIG9wdGlvbiB0byBzZXQgYW5kCiAgICAgKiB0aGUgdmFsdWUgaXMgdGhlIG5ldyB2YWx1ZSBmb3IgdGhlIG9wdGlvbi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9ucyhhcnJheSAkb3B0aW9ucykge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAyLjAuMCk8YnIvPgogICAgICogU2V0IHRoZSBjcmVkZW50aWFscyB0byB1c2UgZm9yIGF1dGhlbnRpY2F0aW9uCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuc2V0c2FzbGF1dGhkYXRhLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgPHA+CiAgICAgKiBUaGUgdXNlcm5hbWUgdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvbi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIDxwPgogICAgICogVGhlIHBhc3N3b3JkIHRvIHVzZSBmb3IgYXV0aGVudGljYXRpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFNhc2xBdXRoRGF0YShzdHJpbmcgJHVzZXJuYW1lLCBzdHJpbmcgJHBhc3N3b3JkKSB7fQoKICAgIC8qKgogICAgICogKFBFQ0wgbWVtY2FjaGVkICZndDs9IDIuMC4wKTxici8+CiAgICAgKiBDaGVjayBpZiBhIHBlcnNpdGVudCBjb25uZWN0aW9uIHRvIG1lbWNhY2hlIGlzIGJlaW5nIHVzZWQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbWVtY2FjaGVkLmlzcGVyc2lzdGVudC5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIE1lbWNhY2hlIGluc3RhbmNlIHVzZXMgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24sIGZhbHNlIG90aGVyd2lzZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzUGVyc2lzdGVudCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEVDTCBtZW1jYWNoZWQgJmd0Oz0gMi4wLjApPGJyLz4KICAgICAqIENoZWNrIGlmIHRoZSBpbnN0YW5jZSB3YXMgcmVjZW50bHkgY3JlYXRlZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9tZW1jYWNoZWQuaXNwcmlzdGluZS5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0aGUgdHJ1ZSBpZiBpbnN0YW5jZSBpcyByZWNlbnRseSBjcmVhdGVkLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1ByaXN0aW5lKCkge30KCiAgICAvKioKICAgICAqIChQRUNMIG1lbWNhY2hlZCAmZ3Q7PSAzLjIuMCk8YnIvPgogICAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIGtleSBpcyB2YWxpZC4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja0tleSgka2V5KSB7fQoKICAgIC8qKgogICAgICogRmx1c2ggYW5kIHNlbmQgYnVmZmVyZWQgY29tbWFuZHMKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waHAtbWVtY2FjaGVkLWRldi9waHAtbWVtY2FjaGVkL2Jsb2IvdjMuMS41L3BocF9tZW1jYWNoZWQuYwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmbHVzaEJ1ZmZlcnMoKSB7fQoKICAgIC8qKgogICAgICogU2V0cyBBRVMgZW5jcnlwdGlvbiBrZXkgKGxpYm1lbWNhY2hlZCAxLjAuNiBhbmQgaGlnaGVyKQogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BocC1tZW1jYWNoZWQtZGV2L3BocC1tZW1jYWNoZWQvYmxvYi92My4xLjUvcGhwX21lbWNhY2hlZC5jCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RW5jb2RpbmdLZXkoJGtleSkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxhc3QgZGlzY29ubmVjdGVkIHNlcnZlci4gV2FzIGFkZGVkIGluIDAuMzQgYWNjb3JkaW5nIHRvIGxpYm1lbWNhY2hlZCdzIENoYW5nZWxvZwogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BocC1tZW1jYWNoZWQtZGV2L3BocC1tZW1jYWNoZWQvYmxvYi92My4xLjUvcGhwX21lbWNhY2hlZC5jCiAgICAgKiBAcmV0dXJuIGFycmF5fGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0RGlzY29ubmVjdGVkU2VydmVyKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGxhc3QgZXJyb3IgZXJybm8gdGhhdCBvY2N1cnJlZAogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BocC1tZW1jYWNoZWQtZGV2L3BocC1tZW1jYWNoZWQvYmxvYi92My4xLjUvcGhwX21lbWNhY2hlZC5jCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdEVycm9yRXJybm8oKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbGFzdCBlcnJvciBjb2RlIHRoYXQgb2NjdXJyZWQKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waHAtbWVtY2FjaGVkLWRldi9waHAtbWVtY2FjaGVkL2Jsb2IvdjMuMS41L3BocF9tZW1jYWNoZWQuYwogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RFcnJvckNvZGUoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbGFzdCBlcnJvciBtZXNzYWdlIHRoYXQgb2NjdXJyZWQKICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9waHAtbWVtY2FjaGVkLWRldi9waHAtbWVtY2FjaGVkL2Jsb2IvdjMuMS41L3BocF9tZW1jYWNoZWQuYwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RFcnJvck1lc3NhZ2UoKSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgbWVtY2FjaGVkIHZpcnR1YWwgYnVja2V0cwogICAgICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3BocC1tZW1jYWNoZWQtZGV2L3BocC1tZW1jYWNoZWQvYmxvYi92My4xLjUvcGhwX21lbWNhY2hlZC5jCiAgICAgKiBAcGFyYW0gYXJyYXkgJGhvc3RfbWFwCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZvcndhcmRfbWFwCiAgICAgKiBAcGFyYW0gaW50ICRyZXBsaWNhcwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRCdWNrZXQoYXJyYXkgJGhvc3RfbWFwLCBhcnJheSAkZm9yd2FyZF9tYXAsICRyZXBsaWNhcykge30KfQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubWVtY2FjaGVkZXhjZXB0aW9uLnBocAogKi8KY2xhc3MgTWVtY2FjaGVkRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbgp7CiAgICAjW1xKZXRCcmFpbnNcUGhwU3Rvcm1cUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZXJybXNnID0gIiIsICRlcnJjb2RlID0gMCkge30KfQovLyBFbmQgb2YgbWVtY2FjaGVkIHYuMy4xLjUKPD9waHAKCm5hbWVzcGFjZSBNb3NxdWl0dG87CgovKioKICogQGxpbmsgaHR0cHM6Ly9tb3NxdWl0dG8tcGhwLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9jbGllbnQuaHRtbAogKiovCmNsYXNzIENsaWVudAp7CiAgICAvKiogSWRlbnRpZmllcyBhIGRlYnVnLWxldmVsIGxvZyBtZXNzYWdlICovCiAgICBwdWJsaWMgY29uc3QgTE9HX0RFQlVHID0gMTY7CgogICAgLyoqIElkZW50aWZpZXMgYW4gaW5mby1sZXZlbCBsb2cgbWVzc2FnZSAqLwogICAgcHVibGljIGNvbnN0IExPR19JTkZPID0gMTsKCiAgICAvKiogSWRlbnRpZmllcyBhIG5vdGljZS1sZXZlbCBsb2cgbWVzc2FnZSAqLwogICAgcHVibGljIGNvbnN0IExPR19OT1RJQ0UgPSAyOwoKICAgIC8qKiBJZGVudGlmaWVzIGEgd2FybmluZy1sZXZlbCBsb2cgbWVzc2FnZSAqLwogICAgcHVibGljIGNvbnN0IExPR19XQVJOSU5HID0gNDsKCiAgICAvKiogSWRlbnRpZmllcyBhbiBlcnJvci1sZXZlbCBsb2cgbWVzc2FnZSAqLwogICAgcHVibGljIGNvbnN0IExPR19FUlIgPSA4OwoKICAgIC8qKiBVc2VkIHdpdGggYHNldFRsc0luc2VjdXJlYC4gRG8gbm90IHZlcmlmeSB0aGUgaWRlbnRpdHkgb2YgdGhlIHNlcnZlciwgdGh1cyBtYWtpbmcgdGhlIGNvbm5lY3Rpb24gaW5zZWN1cmUuICovCiAgICBwdWJsaWMgY29uc3QgU1NMX1ZFUklGWV9OT05FID0gMDsKCiAgICAvKiogVXNlZCB3aXRoIGBzZXRUbHNJbnNlY3VyZWAuIFZlcmlmeSB0aGUgaWRlbnRpdHkgb2YgdGhlIHNlcnZlci4gKi8KICAgIHB1YmxpYyBjb25zdCBTU0xfVkVSSUZZX1BFRVIgPSAxOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0IGEgbmV3IENsaWVudCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGlkIFRoZSBjbGllbnQgSUQuIElmIG9taXR0ZWQgb3IgbnVsbCwgb25lIHdpbGwgYmUgZ2VuZXJhdGVkIGF0IHJhbmRvbS4KICAgICAqIEBwYXJhbSBib29sICRjbGVhblNlc3Npb24gU2V0IHRvIHRydWUgdG8gaW5zdHJ1Y3QgdGhlIGJyb2tlciB0byBjbGVhbiBhbGwgbWVzc2FnZXMgYW5kIHN1YnNjcmlwdGlvbnMgb24gZGlzY29ubmVjdC4gTXVzdCBiZSB0cnVlIGlmIHRoZSAkaWQgcGFyYW1ldGVyIGlzIG51bGwuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaWQgPSBudWxsLCAkY2xlYW5TZXNzaW9uID0gdHJ1ZSkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHRvIHVzZSBvbiBjb25uZWN0aW5nIHRvIHRoZSBicm9rZXIuIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBgY29ubmVjdGAuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgVXNlcm5hbWUgdG8gc3VwcGx5IHRvIHRoZSBicm9rZXIKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFBhc3N3b3JkIHRvIHN1cHBseSB0byB0aGUgYnJva2VyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDcmVkZW50aWFscygkdXNlcm5hbWUsICRwYXNzd29yZCkge30KCiAgICAvKioKICAgICAqIENvbmZpZ3VyZSB0aGUgY2xpZW50IGZvciBjZXJ0aWZpY2F0ZSBiYXNlZCBTU0wvVExTIHN1cHBvcnQuIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb25uZWN0LiBDYW5ub3QgYmUgdXNlZCBpbgogICAgICogY29uanVuY3Rpb24gd2l0aCBzZXRUbHNQU0suCiAgICAgKgogICAgICogRGVmaW5lIHRoZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgY2VydGlmaWNhdGVzIHRvIGJlIHRydXN0ZWQgKGllLiB0aGUgc2VydmVyIGNlcnRpZmljYXRlIG11c3QgYmUgc2lnbmVkCiAgICAgKiB3aXRoIG9uZSBvZiB0aGVzZSBjZXJ0aWZpY2F0ZXMpIHVzaW5nICRjYUZpbGUuIElmIHRoZSBzZXJ2ZXIgeW91IGFyZSBjb25uZWN0aW5nIHRvIHJlcXVpcmVzIGNsaWVudHMKICAgICAqIHRvIHByb3ZpZGUgYSBjZXJ0aWZpY2F0ZSwgZGVmaW5lICRjZXJ0RmlsZSBhbmQgJGtleUZpbGUgd2l0aCB5b3VyIGNsaWVudCBjZXJ0aWZpY2F0ZSBhbmQgcHJpdmF0ZSBrZXkuCiAgICAgKiBJZiB5b3VyIHByaXZhdGUga2V5IGlzIGVuY3J5cHRlZCwgcHJvdmlkZSB0aGUgcGFzc3dvcmQgYXMgdGhlIGZvdXJ0aCBwYXJhbWV0ZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2FQYXRoIFBhdGggdG8gdGhlIFBFTSBlbmNvZGVkIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGUgZmlsZXMsIG9yIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlbS4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkY2VydEZpbGUgUGF0aCB0byB0aGUgUEVNIGVuY29kZWQgY2VydGlmaWNhdGUgZmlsZSBmb3IgdGhpcyBjbGllbnQuIE9wdGlvbmFsLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRrZXlGaWxlIFBhdGggdG8gYSBmaWxlIGNvbnRhaW5pbmcgdGhlIFBFTSBlbmNvZGVkIHByaXZhdGUga2V5IGZvciB0aGlzIGNsaWVudC4gUmVxdWlyZWQgaWYgY2VydGZpbGUgaXMgc2V0LgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwYXNzd29yZCBUaGUgcGFzc3dvcmQgZm9yIHRoZSBrZXlmaWxlLCBpZiBpdCBpcyBlbmNyeXB0ZWQuIElmIG51bGwsIHRoZSBwYXNzd29yZCB3aWxsIGJlIGFza2VkIGZvciBvbiB0aGUgY29tbWFuZCBsaW5lLgogICAgICogQHJldHVybiBpbnR8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGxzQ2VydGlmaWNhdGVzKCRjYVBhdGgsICRjZXJ0RmlsZSA9IG51bGwsICRrZXlGaWxlID0gbnVsbCwgJHBhc3N3b3JkID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIENvbmZpZ3VyZSB2ZXJpZmljYXRpb24gb2YgdGhlIHNlcnZlciBob3N0bmFtZSBpbiB0aGUgc2VydmVyIGNlcnRpZmljYXRlLiBJZiBgJHZhbHVlYCBpcyBgdHJ1ZWAsIGl0IGlzIGltcG9zc2libGUKICAgICAqIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBob3N0IHlvdSBhcmUgY29ubmVjdGluZyB0byBpcyBub3QgaW1wZXJzb25hdGluZyB5b3VyIHNlcnZlci4gRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGluIGEKICAgICAqIHJlYWwgc3lzdGVtLiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYGNvbm5lY3RgLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICR2YWx1ZSBJZiBzZXQgdG8gZmFsc2UsIHRoZSBkZWZhdWx0LCBjZXJ0aWZpY2F0ZSBob3N0bmFtZSBjaGVja2luZyBpcyBwZXJmb3JtZWQuIElmIHNldCB0byBgdHJ1ZWAsIG5vIGhvc3RuYW1lIGNoZWNraW5nIGlzIHBlcmZvcm1lZCBhbmQgdGhlIGNvbm5lY3Rpb24gaXMgaW5zZWN1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUbHNJbnNlY3VyZSgkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgYWR2YW5jZWQgU1NML1RMUyBvcHRpb25zLiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYGNvbm5lY3RgLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGNlcnRSZXFzIFdoZXRoZXIgb3Igbm90IHRvIHZlcmlmeSB0aGUgc2VydmVyLiBDYW4gYmUgQ2xpZW50OjpTU0xfVkVSSUZZX05PTkUsIHRvIGRpc2FibGUgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uLCBvciBDbGllbnQ6OlNTTF9WRVJJRllfUEVFUiAodGhlIGRlZmF1bHQpLCB0byB2ZXJpZnkgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZS4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdGxzVmVyc2lvbiBUaGUgVExTIHZlcnNpb24gdG8gdXNlLiBJZiBgbnVsbGAsIGEgZGVmYXVsdCBpcyB1c2VkLiBUaGUgZGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uIHRoZSB2ZXJzaW9uIG9mIE9wZW5TU0wgdGhlIGxpYnJhcnkgd2FzIGNvbXBpbGVkIGFnYWluc3QuIEF2YWlsYWJsZSBvcHRpb25zIG9uIE9wZW5TU0wgPj0gMS4wLjEgYXJlIGB0bHN2MS4yYCwgYHRsc3YxLjFgIGFuZCBgdGxzdjFgLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRjaXBoZXJzIEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNpcGhlcnMgYXZhaWxhYmxlIGZvciB1c2UuIFNlZSB0aGUgYG9wZW5zc2wgY2lwaGVyc2AgdG9vbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gSWYgYG51bGxgLCB0aGUgZGVmYXVsdCBzZXQgd2lsbCBiZSB1c2VkLgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRsc09wdGlvbnMoJGNlcnRSZXFzLCAkdGxzVmVyc2lvbiA9IG51bGwsICRjaXBoZXJzID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIENvbmZpZ3VyZSB0aGUgY2xpZW50IGZvciBwcmUtc2hhcmVkLWtleSBiYXNlZCBUTFMgc3VwcG9ydC4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGBjb25uZWN0YC4gQ2Fubm90IGJlIHVzZWQgaW4KICAgICAqIGNvbmp1bmN0aW9uIHdpdGggc2V0VGxzQ2VydGlmaWNhdGVzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBzayBUaGUgcHJlLXNoYXJlZCBrZXkgaW4gaGV4IGZvcm1hdCB3aXRoIG5vIGxlYWRpbmcgIjB4Ii4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkZW50aXR5IFRoZSBpZGVudGl0eSBvZiB0aGlzIGNsaWVudC4gTWF5IGJlIHVzZWQgYXMgdGhlIHVzZXJuYW1lIGRlcGVuZGluZyBvbiBzZXJ2ZXIgc2V0dGluZ3MuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNpcGhlcnMgT3B0aW9uYWwuIEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNpcGhlcnMgYXZhaWxhYmxlIGZvciB1c2UuIFNlZSB0aGUgYG9wZW5zc2wgY2lwaGVyc2AgdG9vbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gSWYgYG51bGxgLCB0aGUgZGVmYXVsdCBzZXQgd2lsbCBiZSB1c2VkLgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFRsc1BTSygkcHNrLCAkaWRlbnRpdHksICRjaXBoZXJzID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgY2xpZW50IOKAnGxhc3Qgd2lsbCBhbmQgdGVzdGFtZW504oCdLCB3aGljaCB3aWxsIGJlIHNlbnQgb24gYW4gdW5jbGVhbiBkaXNjb25uZWN0aW9uIGZyb20gdGhlIGJyb2tlci4KICAgICAqIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBgY29ubmVjdGAuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdG9waWMgVGhlIHRvcGljIG9uIHdoaWNoIHRvIHB1Ymxpc2ggdGhlIHdpbGwuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXlsb2FkIFRoZSBkYXRhIHRvIHNlbmQuCiAgICAgKiBAcGFyYW0gaW50ICRxb3MgT3B0aW9uYWwuIERlZmF1bHQgMC4gSW50ZWdlciAwLCAxLCBvciAyIGluZGljYXRpbmcgdGhlIFF1YWxpdHkgb2YgU2VydmljZSB0byBiZSB1c2VkLgogICAgICogQHBhcmFtIGJvb2wgJHJldGFpbiBPcHRpb25hbC4gRGVmYXVsdCBmYWxzZS4gSWYgdHJ1ZSwgdGhlIG1lc3NhZ2Ugd2lsbCBiZSByZXRhaW5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFdpbGwoJHRvcGljLCAkcGF5bG9hZCwgJHFvcyA9IDAsICRyZXRhaW4gPSBmYWxzZSkge30KCiAgICAvKioKICAgICAqIFJlbW92ZSBhIHByZXZpb3VzbHktc2V0IHdpbGwuIE5vIHBhcmFtZXRlcnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhcldpbGwoKSB7fQoKICAgIC8qKgogICAgICogQ29udHJvbCB0aGUgYmVoYXZpb3VyIG9mIHRoZSBjbGllbnQgd2hlbiBpdCBoYXMgdW5leHBlY3RlZGx5IGRpc2Nvbm5lY3RlZCBpbiBDbGllbnQ6Omxvb3BGb3JldmVyKCkuCiAgICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaWYgdGhpcyBtZXRob2QgaXMgbm90IHVzZWQgaXMgdG8gcmVwZWF0ZWRseSBhdHRlbXB0IHRvIHJlY29ubmVjdCB3aXRoIGEgZGVsYXkgb2YgMSBzZWNvbmQKICAgICAqIHVudGlsIHRoZSBjb25uZWN0aW9uIHN1Y2NlZWRzLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHJlY29ubmVjdERlbGF5IFNldCBkZWxheSBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcmVjb25uZWN0aW9uIGF0dGVtcHRzLgogICAgICogQHBhcmFtIGludCAkZXhwb25lbnRpYWxEZWxheSBTZXQgbWF4IGRlbGF5IGJldHdlZW4gc3VjY2Vzc2l2ZSByZWNvbm5lY3Rpb24gYXR0ZW1wdHMgd2hlbiBleHBvbmVudGlhbCBiYWNrb2ZmIGlzIGVuYWJsZWQKICAgICAqIEBwYXJhbSBib29sICRleHBvbmVudGlhbEJhY2tvZmYgUGFzcyBgdHJ1ZWAgdG8gZW5hYmxlIGV4cG9uZW50aWFsIGJhY2tvZmYKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFJlY29ubmVjdERlbGF5KCRyZWNvbm5lY3REZWxheSwgJGV4cG9uZW50aWFsRGVsYXkgPSAwLCAkZXhwb25lbnRpYWxCYWNrb2ZmID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiBDb25uZWN0IHRvIGFuIE1RVFQgYnJva2VyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhvc3QgSG9zdG5hbWUgdG8gY29ubmVjdCB0bwogICAgICogQHBhcmFtIGludCAkcG9ydCBPcHRpb25hbC4gUG9ydCBudW1iZXIgdG8gY29ubmVjdCB0by4gRGVmYXVsdHMgdG8gMTg4My4KICAgICAqIEBwYXJhbSBpbnQgJGtlZXBhbGl2ZSBPcHRpb25hbC4gTnVtYmVyIG9mIHNlY3Rpb25zIGFmdGVyIHdoaWNoIHRoZSBicm9rZXIgc2hvdWxkIFBJTkcgdGhlIGNsaWVudCBpZiBubyBtZXNzYWdlcyBoYXZlIGJlZW4gcmVjZWl2ZWQuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGludGVyZmFjZSBPcHRpb25hbC4gVGhlIGFkZHJlc3Mgb3IgaG9zdG5hbWUgb2YgYSBsb2NhbCBpbnRlcmZhY2UgdG8gYmluZCB0byBmb3IgdGhpcyBjb25uZWN0aW9uLgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbm5lY3QoJGhvc3QsICRwb3J0ID0gMTg4MywgJGtlZXBhbGl2ZSA9IDYwLCAkaW50ZXJmYWNlID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIERpc2Nvbm5lY3QgZnJvbSB0aGUgYnJva2VyLiBObyBwYXJhbWV0ZXJzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzY29ubmVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGNvbm5lY3QgY2FsbGJhY2suIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGJyb2tlciBzZW5kcyBhIENPTk5BQ0sgbWVzc2FnZSBpbiByZXNwb25zZSB0byBhIGNvbm5lY3Rpb24uCiAgICAgKgogICAgICogKGludCkgJHJjLCAoc3RyaW5nKSAkbWVzc2FnZQogICAgICogZnVuY3Rpb24gKCRyYywgJG1lc3NhZ2UpIHt9CiAgICAgKgogICAgICogUmVzcG9uc2UgY29kZXM6CiAgICAgKiAwID0gU3VjY2VzcwogICAgICogMSA9IENvbm5lY3Rpb24gcmVmdXNlZCAodW5hY2NlcHRhYmxlIHByb3RvY29sIHZlcnNpb24pCiAgICAgKiAyID0gQ29ubmVjdGlvbiByZWZ1c2VkIChpZGVudGlmaWVyIHJlamVjdGVkKQogICAgICogMyA9IENvbm5lY3Rpb24gcmVmdXNlZCAoYnJva2VyIHVuYXZhaWxhYmxlKQogICAgICogNC0yNTUgPSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9uQ29ubmVjdCgkY2FsbGJhY2spIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGRpc2Nvbm5lY3QgY2FsbGJhY2suIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGJyb2tlciBoYXMgcmVjZWl2ZWQgdGhlIERJU0NPTk5FQ1QgY29tbWFuZCBhbmQgaGFzCiAgICAgKiBkaXNjb25uZWN0ZWQgdGhlIGNsaWVudC4KICAgICAqCiAgICAgKiAoaW50KSAkcmMKICAgICAqIGZ1bmN0aW9uICgkcmMpIHt9CiAgICAgKgogICAgICogUmVzcG9uc2UgY29kZXM6CiAgICAgKiAwID0gcmVxdWVzdGVkIGJ5IGNsaWVudAogICAgICogPDAgPSBpbmRpY2F0ZXMgYW4gdW5leHBlY3RlZCBkaXNjb25uZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9uRGlzY29ubmVjdCgkY2FsbGJhY2spIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGxvZ2dpbmcgY2FsbGJhY2suCiAgICAgKgogICAgICogKGludCkgJGxldmVsLCAoc3RyaW5nKSAkc3RyCiAgICAgKiBmdW5jdGlvbiAoJGxldmVsLCAkc3RyKSB7fQogICAgICoKICAgICAqIExvZyBsZXZlbHM6CiAgICAgKiBDbGllbnQ6OkxPR19ERUJVRwogICAgICogQ2xpZW50OjpMT0dfSU5GTwogICAgICogQ2xpZW50OjpMT0dfTk9USUNFCiAgICAgKiBDbGllbnQ6OkxPR19XQVJOSU5HCiAgICAgKiBDbGllbnQ6OkxPR19FUlIKICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvbkxvZygkY2FsbGJhY2spIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHN1YnNjcmliZSBjYWxsYmFjay4gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgYnJva2VyIHJlc3BvbmRzIHRvIGEgc3Vic2NyaXB0aW9uIHJlcXVlc3QuCiAgICAgKgogICAgICogKGludCkgJG1pZCwgKGludCkgJHFvc0NvdW50CiAgICAgKiBmdW5jdGlvbiAoJG1pZCwgJHFvc0NvdW50KSB7fQogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9uU3Vic2NyaWJlKCRjYWxsYmFjaykge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgdW5zdWJzY3JpYmUgY2FsbGJhY2suIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGJyb2tlciByZXNwb25kcyB0byBhIHVuc3Vic2NyaWJlIHJlcXVlc3QuCiAgICAgKgogICAgICogKGludCkgJG1pZAogICAgICogZnVuY3Rpb24gKCRtaWQpIHt9CiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb25VbnN1YnNjcmliZSgkY2FsbGJhY2spIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1lc3NhZ2UgY2FsbGJhY2suIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZyb20gdGhlIGJyb2tlci4KICAgICAqCiAgICAgKiAob2JqZWN0KSAkbWVzc2FnZQogICAgICogZnVuY3Rpb24gKE1vc3F1aXR0b1xNZXNzYWdlICRtZXNzYWdlKSB7fQogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9uTWVzc2FnZSgkY2FsbGJhY2spIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHB1Ymxpc2ggY2FsbGJhY2suIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBtZXNzYWdlIGlzIHB1Ymxpc2hlZCBieSB0aGUgY2xpZW50IGl0c2VsZi4KICAgICAqCiAgICAgKiBXYXJuaW5nOiB0aGlzIG1heSBiZSBjYWxsZWQgYmVmb3JlIHRoZSBtZXRob2QgcHVibGlzaCByZXR1cm5zIHRoZSBtZXNzYWdlIGlkLCBzbywgeW91IG5lZWQgdG8gY3JlYXRlIGEgcXVldWUgdG8KICAgICAqIGRlYWwgd2l0aCB0aGUgTUlEIGxpc3QuCiAgICAgKgogICAgICogKGludCkgJG1pZCAtIHRoZSBtZXNzYWdlIGlkIHJldHVybmVkIGJ5IGBwdWJsaXNoYAogICAgICogZnVuY3Rpb24gKCRtaWQpIHt9CiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb25QdWJsaXNoKCRjYWxsYmFjaykge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgbnVtYmVyIG9mIFFvUyAxIGFuZCAyIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIOKAnGluIGZsaWdodOKAnSBhdCBvbmUgdGltZS4gQW4gaW4gZmxpZ2h0IG1lc3NhZ2UgaXMgcGFydCB3YXkKICAgICAqIHRocm91Z2ggaXRzIGRlbGl2ZXJ5IGZsb3cuIEF0dGVtcHRzIHRvIHNlbmQgZnVydGhlciBtZXNzYWdlcyB3aXRoIHB1Ymxpc2ggd2lsbCByZXN1bHQgaW4gdGhlIG1lc3NhZ2VzCiAgICAgKiBiZWluZyBxdWV1ZWQgdW50aWwgdGhlIG51bWJlciBvZiBpbiBmbGlnaHQgbWVzc2FnZXMgcmVkdWNlcy4KICAgICAqCiAgICAgKiBTZXQgdG8gMCBmb3Igbm8gbWF4aW11bS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRtYXhJbkZsaWdodE1lc3NhZ2VzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNYXhJbkZsaWdodE1lc3NhZ2VzKCRtYXhJbkZsaWdodE1lc3NhZ2VzKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXRyeWluZyBtZXNzYWdlcy4gVGhpcyBhcHBsaWVzIHRvIHB1Ymxpc2hpbmcgbWVzc2FnZXMgd2l0aCBRb1MgPiAwLgogICAgICogTWF5IGJlIGNhbGxlZCBhdCBhbnkgdGltZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRtZXNzYWdlUmV0cnlQZXJpb2QgVGhlIHJldHJ5IHBlcmlvZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TWVzc2FnZVJldHJ5KCRtZXNzYWdlUmV0cnlQZXJpb2QpIHt9CgogICAgLyoqCiAgICAgKiBQdWJsaXNoIGEgbWVzc2FnZSBvbiBhIGdpdmVuIHRvcGljLgogICAgICogUmV0dXJuIHRoZSBtZXNzYWdlIElEIHJldHVybmVkIGJ5IHRoZSBicm9rZXIuIFdhcm5pbmc6IHRoZSBtZXNzYWdlIElEIGlzIG5vdCB1bmlxdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdG9waWMgVGhlIHRvcGljIHRvIHB1Ymxpc2ggb24KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBheWxvYWQgVGhlIG1lc3NhZ2UgcGF5bG9hZAogICAgICogQHBhcmFtIGludCAkcW9zIEludGVnZXIgdmFsdWUgMCwgMSBvciAyIGluZGljYXRpbmcgdGhlIFFvUyBmb3IgdGhpcyBtZXNzYWdlCiAgICAgKiBAcGFyYW0gYm9vbCAkcmV0YWluIElmIHRydWUsIHJldGFpbiB0aGlzIG1lc3NhZ2UKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdWJsaXNoKCR0b3BpYywgJHBheWxvYWQsICRxb3MgPSAwLCAkcmV0YWluID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiBTdWJzY3JpYmUgdG8gYSB0b3BpYy4KICAgICAqIFJldHVybiB0aGUgbWVzc2FnZSBJRCBvZiB0aGUgc3Vic2NyaXB0aW9uIG1lc3NhZ2UsIHNvIHRoaXMgY2FuIGJlIG1hdGNoZWQgdXAgaW4gdGhlIGBvblN1YnNjcmliZWAgY2FsbGJhY2suCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdG9waWMKICAgICAqIEBwYXJhbSBpbnQgJHFvcwogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1YnNjcmliZSgkdG9waWMsICRxb3MpIHt9CgogICAgLyoqCiAgICAgKiBVbnN1YnNjcmliZSBmcm9tIGEgdG9waWMuCiAgICAgKiBSZXR1cm4gdGhlIG1lc3NhZ2UgSUQgb2YgdGhlIHN1YnNjcmlwdGlvbiBtZXNzYWdlLCBzbyB0aGlzIGNhbiBiZSBtYXRjaGVkIHVwIGluIHRoZSBgb25VbnN1YnNjcmliZWAgY2FsbGJhY2suCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdG9waWMKICAgICAqIEBwYXJhbSBpbnQgJHFvcwogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCR0b3BpYywgJHFvcykge30KCiAgICAvKioKICAgICAqIFRoZSBtYWluIG5ldHdvcmsgbG9vcCBmb3IgdGhlIGNsaWVudC4gWW91IG11c3QgY2FsbCB0aGlzIGZyZXF1ZW50bHkgaW4gb3JkZXIgdG8ga2VlcCBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuCiAgICAgKiB0aGUgY2xpZW50IGFuZCBicm9rZXIgd29ya2luZy4gSWYgaW5jb21pbmcgZGF0YSBpcyBwcmVzZW50IGl0IHdpbGwgdGhlbiBiZSBwcm9jZXNzZWQuIE91dGdvaW5nIGNvbW1hbmRzLAogICAgICogZnJvbSBlLmcuIGBwdWJsaXNoYCwgYXJlIG5vcm1hbGx5IHNlbnQgaW1tZWRpYXRlbHkgdGhhdCB0aGVpciBmdW5jdGlvbiBpcyBjYWxsZWQsIGJ1dCB0aGlzIGlzIG5vdCBhbHdheXMgcG9zc2libGUuCiAgICAgKiBgbG9vcGAgd2lsbCBhbHNvIGF0dGVtcHQgdG8gc2VuZCBhbnkgcmVtYWluaW5nIG91dGdvaW5nIG1lc3NhZ2VzLCB3aGljaCBhbHNvIGluY2x1ZGVzIGNvbW1hbmRzIHRoYXQgYXJlIHBhcnQKICAgICAqIG9mIHRoZSBmbG93IGZvciBtZXNzYWdlcyB3aXRoIFFvUyA+IDAuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdGltZW91dCBPcHRpb25hbC4gTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciBuZXR3b3JrIGFjdGl2aXR5LiBQYXNzIDAgZm9yIGluc3RhbnQgdGltZW91dC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvb3AoJHRpbWVvdXQgPSAxMDAwKSB7fQoKICAgIC8qKgogICAgICogQ2FsbCBsb29wKCkgaW4gYW4gaW5maW5pdGUgYmxvY2tpbmcgbG9vcC4gQ2FsbGJhY2tzIHdpbGwgYmUgY2FsbGVkIGFzIHJlcXVpcmVkLiBUaGlzIHdpbGwgaGFuZGxlIHJlY29ubmVjdGluZwogICAgICogaWYgdGhlIGNvbm5lY3Rpb24gaXMgbG9zdC4gQ2FsbCBgZGlzY29ubmVjdGAgaW4gYSBjYWxsYmFjayB0byBkaXNjb25uZWN0IGFuZCByZXR1cm4gZnJvbSB0aGUgbG9vcC4gQWx0ZXJuYXRpdmVseSwKICAgICAqIGNhbGwgYGV4aXRMb29wYCB0byBleGl0IHRoZSBsb29wIHdpdGhvdXQgZGlzY29ubmVjdGluZy4gWW91IHdpbGwgbmVlZCB0byByZS1lbnRlciB0aGUgbG9vcCBhZ2FpbiBhZnRlcndhcmRzCiAgICAgKiB0byBtYWludGFpbiB0aGUgY29ubmVjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lb3V0IE9wdGlvbmFsLiBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIG5ldHdvcmsgYWN0aXZpdHkuIFBhc3MgMCBmb3IgaW5zdGFudCB0aW1lb3V0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9vcEZvcmV2ZXIoJHRpbWVvdXQgPSAxMDAwKSB7fQoKICAgIC8qKgogICAgICogRXhpdCB0aGUgYGxvb3BGb3JldmVyYCBldmVudCBsb29wIHdpdGhvdXQgZGlzY29ubmVjdGluZy4gWW91IHdpbGwgbmVlZCB0byByZS1lbnRlciB0aGUgbG9vcCBhZnRlcndhcmRzCiAgICAgKiBpbiBvcmRlciB0byBtYWludGFpbiB0aGUgY29ubmVjdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4aXRMb29wKCkge30KfQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vbW9zcXVpdHRvLXBocC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvbWVzc2FnZS5odG1sCiAqLwpjbGFzcyBNZXNzYWdlCnsKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHVibGljICR0b3BpYzsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHB1YmxpYyAkcGF5bG9hZDsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHB1YmxpYyAkbWlkOwoKICAgIC8qKiBAdmFyIGludCAqLwogICAgcHVibGljICRxb3M7CgogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHVibGljICRyZXRhaW47CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHN1cHBsaWVkIHRvcGljIG1hdGNoZXMgdGhlIHN1cHBsaWVkIGRlc2NyaXB0aW9uLCBhbmQgb3RoZXJ3aXNlIGZhbHNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRvcGljIFRoZSB0b3BpYyB0byBtYXRjaAogICAgICogQHBhcmFtIHN0cmluZyAkc3Vic2NyaXB0aW9uIFRoZSBzdWJzY3JpcHRpb24gdG8gbWF0Y2gKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvcGljTWF0Y2hlc1N1YigkdG9waWMsICRzdWJzY3JpcHRpb24pIHt9CgogICAgLyoqCiAgICAgKiBUb2tlbmlzZSBhIHRvcGljIG9yIHN1YnNjcmlwdGlvbiBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgdG9waWMgaGllcmFyY2h5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRvcGljCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9rZW5pc2VUb3BpYygkdG9waWMpIHt9Cn0KCi8qKgogKiBAbGluayBodHRwczovL21vc3F1aXR0by1waHAucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L2V4Y2VwdGlvbi5odG1sCiAqLwpjbGFzcyBFeGNlcHRpb24gZXh0ZW5kcyBcRXhjZXB0aW9uIHt9Cjw/cGhwCgovLyBTdGFydCBvZiBsZGFwIHYuCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cQXJyYXlTaGFwZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxEZXByZWNhdGVkOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmUgYXMgUGhwVmVyc2lvbkF3YXJlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFBocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlIGFzIEF2YWlsYWJsZTsKdXNlIExEQVBcUmVzdWx0OwoKLyoqCiAqIFBBU1NXRCBleHRlbmRlZCBvcGVyYXRpb24gaGVscGVyCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtZXhvcC1wYXNzd2QucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgbGRhcF9jb25uZWN0KCkuCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXIgZG4gb2YgdGhlIHVzZXIgdG8gY2hhbmdlIHRoZSBwYXNzd29yZCBvZi4KICogQHBhcmFtIHN0cmluZyAkb2xkX3Bhc3N3b3JkIFRoZSBvbGQgcGFzc3dvcmQgb2YgdGhpcyB1c2VyLiBNYXkgYmUgb21pdHRlZCBkZXBlbmRpbmcgb2Ygc2VydmVyIGNvbmZpZ3VyYXRpb24uCiAqIEBwYXJhbSBzdHJpbmcgJG5ld19wYXNzd29yZCBUaGUgbmV3IHBhc3N3b3JkIGZvciB0aGlzIHVzZXIuIE1heSBiZSBvbWl0dGVkIG9yIGVtcHR5IHRvIGhhdmUgYSBnZW5lcmF0ZWQgcGFzc3dvcmQuCiAqIEBwYXJhbSBhcnJheSAmJGNvbnRyb2xzIElmIHByb3ZpZGVkLCBhIHBhc3N3b3JkIHBvbGljeSByZXF1ZXN0IGNvbnRyb2wgaXMgc2VuZCB3aXRoIHRoZSByZXF1ZXN0IGFuZCB0aGlzIGlzIGZpbGxlZCB3aXRoIGFuIGFycmF5IG9mIExEQVAgQ29udHJvbHMgcmV0dXJuZWQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHJldHVybiBzdHJpbmd8Ym9vbCBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgcGFzc3dvcmQgaWYgbmV3cHcgaXMgZW1wdHkgb3Igb21pdHRlZC4gT3RoZXJ3aXNlIHJldHVybnMgVFJVRSBvbiBzdWNjZXNzIGFuZCBGQUxTRSBvbiBmYWlsdXJlLgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBsZGFwX2V4b3BfcGFzc3dkKAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLAogICAgI1tBdmFpbGFibGUoZnJvbTogJzcuMScsIHRvOiAnNy4xJyldIHN0cmluZyAkdXNlciA9ICIiLAogICAgI1tBdmFpbGFibGUoZnJvbTogJzcuMicsIHRvOiAnNy4yJyldIHN0cmluZyAkdXNlciwKICAgICNbQXZhaWxhYmxlKGZyb206ICc3LjMnKV0gc3RyaW5nICR1c2VyID0gIiIsCiAgICAjW0F2YWlsYWJsZShmcm9tOiAnNy4xJywgdG86ICc3LjEnKV0gc3RyaW5nICRvbGRfcGFzc3dvcmQgPSAiIiwKICAgICNbQXZhaWxhYmxlKGZyb206ICc3LjInLCB0bzogJzcuMicpXSBzdHJpbmcgJG9sZF9wYXNzd29yZCwKICAgICNbQXZhaWxhYmxlKGZyb206ICc3LjMnKV0gc3RyaW5nICRvbGRfcGFzc3dvcmQgPSAiIiwKICAgICNbQXZhaWxhYmxlKGZyb206ICc3LjEnLCB0bzogJzcuMScpXSBzdHJpbmcgJG5ld19wYXNzd29yZCA9ICIiLAogICAgI1tBdmFpbGFibGUoZnJvbTogJzcuMicsIHRvOiAnNy4yJyldIHN0cmluZyAkbmV3X3Bhc3N3b3JkLAogICAgI1tBdmFpbGFibGUoZnJvbTogJzcuMycpXSBzdHJpbmcgJG5ld19wYXNzd29yZCA9ICIiLAogICAgI1tBdmFpbGFibGUoZnJvbTogJzcuMycpXSAmJGNvbnRyb2xzID0gbnVsbAopOiBzdHJpbmd8Ym9vbCB7fQoKLyoqCiAqIFJlZnJlc2ggZXh0ZW5kZWQgb3BlcmF0aW9uIGhlbHBlcgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLWV4b3AtcmVmcmVzaC5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QoKS4KICogQHBhcmFtIHN0cmluZyAkZG4gZG4gb2YgdGhlIGVudHJ5IHRvIHJlZnJlc2guCiAqIEBwYXJhbSBpbnQgJHR0bCAkdHRsIFRpbWUgaW4gc2Vjb25kcyAoYmV0d2VlbiAxIGFuZCAzMTU1NzYwMCkgdGhhdCB0aGUgY2xpZW50IHJlcXVlc3RzIHRoYXQgdGhlIGVudHJ5IGV4aXN0cyBpbiB0aGUgZGlyZWN0b3J5IGJlZm9yZSBiZWluZyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQuCiAqIEByZXR1cm4gaW50fGZhbHNlIEZyb20gUkZDOiBUaGUgcmVzcG9uc2VUdGwgZmllbGQgaXMgdGhlIHRpbWUgaW4gc2Vjb25kcyB3aGljaCB0aGUgc2VydmVyIGNob29zZXMgdG8gaGF2ZSBhcyB0aGUgdGltZS10by1saXZlIGZpZWxkIGZvciB0aGF0IGVudHJ5LiBJdCBtdXN0IG5vdCBiZSBhbnkgc21hbGxlciB0aGFuIHRoYXQgd2hpY2ggdGhlIGNsaWVudCByZXF1ZXN0ZWQsIGFuZCBpdCBtYXkgYmUgbGFyZ2VyLiBIb3dldmVyLCB0byBhbGxvdyBzZXJ2ZXJzIHRvIG1haW50YWluIGEgcmVsYXRpdmVseSBhY2N1cmF0ZSBkaXJlY3RvcnksIGFuZCB0byBwcmV2ZW50IGNsaWVudHMgZnJvbSBhYnVzaW5nIHRoZSBkeW5hbWljIGV4dGVuc2lvbnMsIHNlcnZlcnMgYXJlIHBlcm1pdHRlZCB0byBzaG9ydGVuIGEgY2xpZW50LXJlcXVlc3RlZCB0aW1lLXRvLWxpdmUgdmFsdWUsIGRvd24gdG8gYSBtaW5pbXVtIG9mIDg2NDAwIHNlY29uZHMgKG9uZSBkYXkpLiBGQUxTRSB3aWxsIGJlIHJldHVybmVkIG9uIGVycm9yLgogKiBAc2luY2UgNy4zCiAqLwpmdW5jdGlvbiBsZGFwX2V4b3BfcmVmcmVzaCgjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsIHN0cmluZyAkZG4sIGludCAkdHRsKTogaW50fGZhbHNlIHt9CgovKioKICogV0hPQU1JIGV4dGVuZGVkIG9wZXJhdGlvbiBoZWxwZXIKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1leG9wLXdob2FtaS5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QoKS4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHNlcnZlciwgb3IgRkFMU0Ugb24gZXJyb3IuCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIGxkYXBfZXhvcF93aG9hbWkoI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogUGVyZm9ybXMgYW4gZXh0ZW5kZWQgb3BlcmF0aW9uIG9uIHRoZSBzcGVjaWZpZWQgbGluayB3aXRoIHJlcW9pZCB0aGUgT0lEIG9mIHRoZSBvcGVyYXRpb24gYW5kIHJlcWRhdGEgdGhlIGRhdGEuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtZXhvcC5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSBsZGFwX2Nvbm5lY3QoKS4KICogQHBhcmFtIHN0cmluZyAkcmVxdWVzdF9vaWQgVGhlIGV4dGVuZGVkIG9wZXJhdGlvbiByZXF1ZXN0IE9JRC4gWW91IG1heSB1c2Ugb25lIG9mIExEQVBfRVhPUF9TVEFSVF9UTFMsIExEQVBfRVhPUF9NT0RJRllfUEFTU1dELCBMREFQX0VYT1BfUkVGUkVTSCwgTERBUF9FWE9QX1dIT19BTV9JLCBMREFQX0VYT1BfVFVSTiwgb3IgYSBzdHJpbmcgd2l0aCB0aGUgT0lEIG9mIHRoZSBvcGVyYXRpb24geW91IHdhbnQgdG8gc2VuZC4KICogQHBhcmFtIHN0cmluZ3xudWxsICRyZXF1ZXN0X2RhdGEgW29wdGlvbmFsXSBUaGUgZXh0ZW5kZWQgb3BlcmF0aW9uIHJlcXVlc3QgZGF0YS4gTWF5IGJlIE5VTEwgZm9yIHNvbWUgb3BlcmF0aW9ucyBsaWtlIExEQVBfRVhPUF9XSE9fQU1fSSwgbWF5IGFsc28gbmVlZCB0byBiZSBCRVIgZW5jb2RlZC4KICogQHBhcmFtIGFycmF5fG51bGwgJGNvbnRyb2xzIElmIHByb3ZpZGVkLCBhIHBhc3N3b3JkIHBvbGljeSByZXF1ZXN0IGNvbnRyb2wgaXMgc2VuZCB3aXRoIHRoZSByZXF1ZXN0IGFuZCB0aGlzIGlzIGZpbGxlZCB3aXRoIGFuIGFycmF5IG9mIExEQVAgQ29udHJvbHMgcmV0dXJuZWQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHBhcmFtIHN0cmluZyAmJHJlc3BvbnNlX2RhdGEgW29wdGlvbmFsXSBXaWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBleHRlbmRlZCBvcGVyYXRpb24gcmVzcG9uc2UgZGF0YSBpZiBwcm92aWRlZC4gSWYgbm90IHByb3ZpZGVkIHlvdSBtYXkgdXNlIGxkYXBfcGFyc2VfZXhvcCBvbiB0aGUgcmVzdWx0IG9iamVjdCBsYXRlciB0byBnZXQgdGhpcyBkYXRhLgogKiBAcGFyYW0gc3RyaW5nICYkcmVzcG9uc2Vfb2lkIFtvcHRpb25hbF0gV2lsbCBiZSBmaWxsZWQgd2l0aCB0aGUgcmVzcG9uc2UgT0lEIGlmIHByb3ZpZGVkLCB1c3VhbGx5IGVxdWFsIHRvIHRoZSByZXF1ZXN0IE9JRC4KICogQHJldHVybiByZXNvdXJjZXxib29sIFdoZW4gdXNlZCB3aXRoIHJldGRhdGEsIHJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGVycm9yLiBXaGVuIHVzZWQgd2l0aG91dCByZXRkYXRhLCByZXR1cm5zIGEgcmVzdWx0IGlkZW50aWZpZXIgb3IgRkFMU0Ugb24gZXJyb3IuCiAqIEBzaW5jZSA3LjIKICovCiNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHR8Ym9vbCddLCBkZWZhdWx0OiAncmVzb3VyY2V8Ym9vbCcpXQpmdW5jdGlvbiBsZGFwX2V4b3AoI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLCBzdHJpbmcgJHJlcXVlc3Rfb2lkLCA/c3RyaW5nICRyZXF1ZXN0X2RhdGEsICNbUGhwVmVyc2lvbkF3YXJlKFsiOC4wIiA9PiAibnVsbHxhcnJheSJdLCBkZWZhdWx0OiAiYXJyYXkiKV0gJGNvbnRyb2xzID0gbnVsbCwgJiRyZXNwb25zZV9kYXRhLCAmJHJlc3BvbnNlX29pZCkge30KCi8qKgogKiBQYXJzZSBMREFQIGV4dGVuZGVkIG9wZXJhdGlvbiBkYXRhIGZyb20gcmVzdWx0IG9iamVjdCByZXN1bHQKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1wYXJzZS1leG9wLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxkYXAgQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IGxkYXBfY29ubmVjdCgpLgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCBBbiBMREFQIHJlc3VsdCByZXNvdXJjZSwgcmV0dXJuZWQgYnkgbGRhcF9leG9wKCkuCiAqIEBwYXJhbSBzdHJpbmcgJiRyZXNwb25zZV9kYXRhICBXaWxsIGJlIGZpbGxlZCBieSB0aGUgcmVzcG9uc2UgZGF0YS4KICogQHBhcmFtIHN0cmluZyAmJHJlc3BvbnNlX29pZCBXaWxsIGJlIGZpbGxlZCBieSB0aGUgcmVzcG9uc2UgT0lELgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gbGRhcF9wYXJzZV9leG9wKAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCwKICAgICNbQXZhaWxhYmxlKGZyb206ICc3LjInLCB0bzogJzcuNCcpXSAmJHJlc3BvbnNlX2RhdGEsCiAgICAjW0F2YWlsYWJsZShmcm9tOiAnOC4wJyldICYkcmVzcG9uc2VfZGF0YSA9IG51bGwsCiAgICAjW0F2YWlsYWJsZShmcm9tOiAnNy4yJywgdG86ICc3LjQnKV0gJiRyZXNwb25zZV9vaWQsCiAgICAjW0F2YWlsYWJsZShmcm9tOiAnOC4wJyldICYkcmVzcG9uc2Vfb2lkID0gbnVsbAopOiBib29sIHt9CgovKioKICogVHJhbnNsYXRlIDg4NTkgY2hhcmFjdGVycyB0byB0NjEgY2hhcmFjdGVycwogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLTg4NTktdG8tdDYxLnBocAogKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gbGRhcF84ODU5X3RvX3Q2MShzdHJpbmcgJHZhbHVlKTogc3RyaW5nIHt9CgovKioKICogVHJhbnNsYXRlIHQ2MSBjaGFyYWN0ZXJzIHRvIDg4NTkgY2hhcmFjdGVycwogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLXQ2MS10by04ODU5LnBocAogKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gbGRhcF90NjFfdG9fODg1OShzdHJpbmcgJHZhbHVlKTogc3RyaW5nIHt9CgovKioKICogQ29ubmVjdCB0byBhbiBMREFQIHNlcnZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtY29ubmVjdC5waHAKICogQHBhcmFtIHN0cmluZ3xudWxsICR1cmkgW29wdGlvbmFsXSA8cD4KICogSWYgeW91IGFyZSB1c2luZyBPcGVuTERBUCAyLngueCB5b3UgY2FuIHNwZWNpZnkgYSBVUkwgaW5zdGVhZCBvZiB0aGUKICogaG9zdG5hbWUuIFRvIHVzZSBMREFQIHdpdGggU1NMLCBjb21waWxlIE9wZW5MREFQIDIueC54IHdpdGggU1NMCiAqIHN1cHBvcnQsIGNvbmZpZ3VyZSBQSFAgd2l0aCBTU0wsIGFuZCBzZXQgdGhpcyBwYXJhbWV0ZXIgYXMKICogbGRhcHM6Ly9ob3N0bmFtZS8uCiAqIDwvcD4KICogQHBhcmFtIGludCAkcG9ydCBbb3B0aW9uYWxdIDxwPgogKiBUaGUgcG9ydCB0byBjb25uZWN0IHRvLiBOb3QgdXNlZCB3aGVuIHVzaW5nIFVSTHMuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBhIHBvc2l0aXZlIExEQVAgbGluayBpZGVudGlmaWVyIG9uIHN1Y2Nlc3MsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICogV2hlbiBPcGVuTERBUCAyLngueCBpcyB1c2VkLCA8Yj5sZGFwX2Nvbm5lY3Q8L2I+IHdpbGwgYWx3YXlzCiAqIHJldHVybiBhIHJlc291cmNlIGFzIGl0IGRvZXMgbm90IGFjdHVhbGx5IGNvbm5lY3QgYnV0IGp1c3QKICogaW5pdGlhbGl6ZXMgdGhlIGNvbm5lY3RpbmcgcGFyYW1ldGVycy4gVGhlIGFjdHVhbCBjb25uZWN0IGhhcHBlbnMgd2l0aAogKiB0aGUgbmV4dCBjYWxscyB0byBsZGFwXyogZnVuY3MsIHVzdWFsbHkgd2l0aAogKiA8Yj5sZGFwX2JpbmQ8L2I+LgogKiA8L3A+CiAqIDxwPgogKiBJZiBubyBhcmd1bWVudHMgYXJlIHNwZWNpZmllZCB0aGVuIHRoZSBsaW5rIGlkZW50aWZpZXIgb2YgdGhlIGFscmVhZHkKICogb3BlbmVkIGxpbmsgd2lsbCBiZSByZXR1cm5lZC4KICovCiNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9ufGZhbHNlJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxmYWxzZScpXQpmdW5jdGlvbiBsZGFwX2Nvbm5lY3QoP3N0cmluZyAkdXJpLCBpbnQgJHBvcnQgPSAzODkpIHt9CgovKioKICogQWxpYXMgb2YgPGI+bGRhcF91bmJpbmQ8L2I+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1jbG9zZS5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gbGRhcF9jbG9zZSgjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXApOiBib29sIHt9CgovKioKICogQmluZCB0byBMREFQIGRpcmVjdG9yeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtYmluZC5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGRuIFtvcHRpb25hbF0KICogQHBhcmFtIHN0cmluZ3xudWxsICRwYXNzd29yZCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gbGRhcF9iaW5kKCNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwgP3N0cmluZyAkZG4sID9zdHJpbmcgJHBhc3N3b3JkKTogYm9vbCB7fQoKLyoqCiAqIEJpbmQgdG8gTERBUCBkaXJlY3RvcnkKICogRG9lcyB0aGUgc2FtZSB0aGluZyBhcyBsZGFwX2JpbmQoKSBidXQgcmV0dXJucyB0aGUgTERBUCByZXN1bHQgcmVzb3VyY2UgdG8gYmUgcGFyc2VkIHdpdGggbGRhcF9wYXJzZV9yZXN1bHQoKS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLWJpbmQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRkbiBbb3B0aW9uYWxdCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGFzc3dvcmQgW29wdGlvbmFsXQogKiBAcGFyYW0gYXJyYXl8bnVsbCAkY29udHJvbHMgQXJyYXkgb2YgTERBUCBDb250cm9scyB0byBzZW5kIHdpdGggdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UKICogQHNpbmNlIDcuMwogKi8KI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXFJlc3VsdHxmYWxzZSddLCBkZWZhdWx0OiAncmVzb3VyY2V8ZmFsc2UnKV0KZnVuY3Rpb24gbGRhcF9iaW5kX2V4dCgKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgID9zdHJpbmcgJGRuLAogICAgP3N0cmluZyAkcGFzc3dvcmQsCiAgICAjW1BocFZlcnNpb25Bd2FyZShbIjguMCIgPT4gIm51bGx8YXJyYXkiXSwgZGVmYXVsdDogImFycmF5IildICRjb250cm9scyA9IG51bGwKKSB7fQoKLyoqCiAqIEJpbmQgdG8gTERBUCBkaXJlY3RvcnkgdXNpbmcgU0FTTAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtc2FzbC1iaW5kLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxkYXAKICogQHBhcmFtIHN0cmluZyAkYmluZGRuIFtvcHRpb25hbF0KICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nICRzYXNsX21lY2ggW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nICRzYXNsX3JlYWxtIFtvcHRpb25hbF0KICogQHBhcmFtIHN0cmluZyAkc2FzbF9hdXRoY19pZCBbb3B0aW9uYWxdCiAqIEBwYXJhbSBzdHJpbmcgJHNhc2xfYXV0aHpfaWQgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nICRwcm9wcyBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gbGRhcF9zYXNsX2JpbmQoI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLCAkYmluZGRuID0gbnVsbCwgJHBhc3N3b3JkID0gbnVsbCwgJHNhc2xfbWVjaCA9IG51bGwsICRzYXNsX3JlYWxtID0gbnVsbCwgJHNhc2xfYXV0aGNfaWQgPSBudWxsLCAkc2FzbF9hdXRoel9pZCA9IG51bGwsICRwcm9wcyA9IG51bGwpOiBib29sIHt9CgovKioKICogVW5iaW5kIGZyb20gTERBUCBkaXJlY3RvcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLXVuYmluZC5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGxkYXBfdW5iaW5kKCNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCk6IGJvb2wge30KCi8qKgogKiBSZWFkIGFuIGVudHJ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1yZWFkLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxkYXAgPHA+CiAqIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSA8Yj5sZGFwX2Nvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheXxhcnJheXxzdHJpbmcgJGJhc2UgPHA+CiAqIFRoZSBiYXNlIEROIGZvciB0aGUgZGlyZWN0b3J5LgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbHRlciA8cD4KICogQW4gZW1wdHkgZmlsdGVyIGlzIG5vdCBhbGxvd2VkLiBJZiB5b3Ugd2FudCB0byByZXRyaWV2ZSBhYnNvbHV0ZWx5IGFsbAogKiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBlbnRyeSwgdXNlIGEgZmlsdGVyIG9mCiAqIG9iamVjdENsYXNzPSouIElmIHlvdSBrbm93IHdoaWNoIGVudHJ5IHR5cGVzIGFyZQogKiB1c2VkIG9uIHRoZSBkaXJlY3Rvcnkgc2VydmVyLCB5b3UgbWlnaHQgdXNlIGFuIGFwcHJvcHJpYXRlIGZpbHRlciBzdWNoCiAqIGFzIG9iamVjdENsYXNzPWluZXRPcmdQZXJzb24uCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRhdHRyaWJ1dGVzIDxwPgogKiBBbiBhcnJheSBvZiB0aGUgcmVxdWlyZWQgYXR0cmlidXRlcywgZS5nLiBhcnJheSgibWFpbCIsICJzbiIsICJjbiIpLgogKiBOb3RlIHRoYXQgdGhlICJkbiIgaXMgYWx3YXlzIHJldHVybmVkIGlycmVzcGVjdGl2ZSBvZiB3aGljaCBhdHRyaWJ1dGVzCiAqIHR5cGVzIGFyZSByZXF1ZXN0ZWQuCiAqIDwvcD4KICogPHA+CiAqIFVzaW5nIHRoaXMgcGFyYW1ldGVyIGlzIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBhY3Rpb24KICogKHdoaWNoIGlzIHRvIHJldHVybiBhbGwgYXR0cmlidXRlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB2YWx1ZXMpLgogKiBUaGUgdXNlIG9mIHRoaXMgcGFyYW1ldGVyIHNob3VsZCB0aGVyZWZvcmUgYmUgY29uc2lkZXJlZCBnb29kCiAqIHByYWN0aWNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGF0dHJpYnV0ZXNfb25seSA8cD4KICogU2hvdWxkIGJlIHNldCB0byAxIGlmIG9ubHkgYXR0cmlidXRlIHR5cGVzIGFyZSB3YW50ZWQuIElmIHNldCB0byAwCiAqIGJvdGggYXR0cmlidXRlcyB0eXBlcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUgZmV0Y2hlZCB3aGljaCBpcyB0aGUKICogZGVmYXVsdCBiZWhhdmlvdXIuCiAqIDwvcD4KICogQHBhcmFtIGludCAkc2l6ZWxpbWl0IFtvcHRpb25hbF0gPHA+CiAqIEVuYWJsZXMgeW91IHRvIGxpbWl0IHRoZSBjb3VudCBvZiBlbnRyaWVzIGZldGNoZWQuIFNldHRpbmcgdGhpcyB0byAwCiAqIG1lYW5zIG5vIGxpbWl0LgogKiA8L3A+CiAqIDxwPgogKiBUaGlzIHBhcmFtZXRlciBjYW4gTk9UIG92ZXJyaWRlIHNlcnZlci1zaWRlIHByZXNldCBzaXplbGltaXQuIFlvdSBjYW4KICogc2V0IGl0IGxvd2VyIHRob3VnaC4KICogPC9wPgogKiA8cD4KICogU29tZSBkaXJlY3Rvcnkgc2VydmVyIGhvc3RzIHdpbGwgYmUgY29uZmlndXJlZCB0byByZXR1cm4gbm8gbW9yZSB0aGFuCiAqIGEgcHJlc2V0IG51bWJlciBvZiBlbnRyaWVzLiBJZiB0aGlzIG9jY3VycywgdGhlIHNlcnZlciB3aWxsIGluZGljYXRlCiAqIHRoYXQgaXQgaGFzIG9ubHkgcmV0dXJuZWQgYSBwYXJ0aWFsIHJlc3VsdHMgc2V0LiBUaGlzIGFsc28gb2NjdXJzIGlmCiAqIHlvdSB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gbGltaXQgdGhlIGNvdW50IG9mIGZldGNoZWQgZW50cmllcy4KICogPC9wPgogKiBAcGFyYW0gaW50ICR0aW1lbGltaXQgW29wdGlvbmFsXSA8cD4KICogU2V0cyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgaG93IGxvbmcgaXMgc3BlbmQgb24gdGhlIHNlYXJjaC4gU2V0dGluZwogKiB0aGlzIHRvIDAgbWVhbnMgbm8gbGltaXQuCiAqIDwvcD4KICogPHA+CiAqIFRoaXMgcGFyYW1ldGVyIGNhbiBOT1Qgb3ZlcnJpZGUgc2VydmVyLXNpZGUgcHJlc2V0IHRpbWVsaW1pdC4gWW91IGNhbgogKiBzZXQgaXQgbG93ZXIgdGhvdWdoLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGRlcmVmIDxwPgogKiBTcGVjaWZpZXMgaG93IGFsaWFzZXMgc2hvdWxkIGJlIGhhbmRsZWQgZHVyaW5nIHRoZSBzZWFyY2guIEl0IGNhbiBiZQogKiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICogPGI+TERBUF9ERVJFRl9ORVZFUjwvYj4gLSAoZGVmYXVsdCkgYWxpYXNlcyBhcmUgbmV2ZXIKICogZGVyZWZlcmVuY2VkLjwvcD4KICogQHBhcmFtIGFycmF5fG51bGwgJGNvbnRyb2xzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGEgc2VhcmNoIHJlc3VsdCBpZGVudGlmaWVyIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCiNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHR8YXJyYXl8ZmFsc2UnXSwgZGVmYXVsdDogJ3Jlc291cmNlfGZhbHNlJyldCmZ1bmN0aW9uIGxkYXBfcmVhZCgKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgIGFycmF5fHN0cmluZyAkYmFzZSwKICAgIGFycmF5fHN0cmluZyAkZmlsdGVyLAogICAgYXJyYXkgJGF0dHJpYnV0ZXMgPSBbXSwKICAgIGludCAkYXR0cmlidXRlc19vbmx5ID0gMCwKICAgIGludCAkc2l6ZWxpbWl0ID0gLTEsCiAgICBpbnQgJHRpbWVsaW1pdCA9IC0xLAogICAgaW50ICRkZXJlZiA9IDAsCiAgICAjW0F2YWlsYWJsZShmcm9tOiAnNy4zJyldICNbUGhwVmVyc2lvbkF3YXJlKFsiOC4wIiA9PiAibnVsbHxhcnJheSJdLCBkZWZhdWx0OiAiYXJyYXkiKV0gJGNvbnRyb2xzID0gbnVsbAopIHt9CgovKioKICogU2luZ2xlLWxldmVsIHNlYXJjaAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtbGlzdC5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gYXJyYXl8YXJyYXl8c3RyaW5nICRiYXNlIDxwPgogKiBUaGUgYmFzZSBETiBmb3IgdGhlIGRpcmVjdG9yeS4KICogPC9wPgogKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRmaWx0ZXIKICogQHBhcmFtIGFycmF5ICRhdHRyaWJ1dGVzIDxwPgogKiBBbiBhcnJheSBvZiB0aGUgcmVxdWlyZWQgYXR0cmlidXRlcywgZS5nLiBhcnJheSgibWFpbCIsICJzbiIsICJjbiIpLgogKiBOb3RlIHRoYXQgdGhlICJkbiIgaXMgYWx3YXlzIHJldHVybmVkIGlycmVzcGVjdGl2ZSBvZiB3aGljaCBhdHRyaWJ1dGVzCiAqIHR5cGVzIGFyZSByZXF1ZXN0ZWQuCiAqIDwvcD4KICogPHA+CiAqIFVzaW5nIHRoaXMgcGFyYW1ldGVyIGlzIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgZGVmYXVsdCBhY3Rpb24KICogKHdoaWNoIGlzIHRvIHJldHVybiBhbGwgYXR0cmlidXRlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCB2YWx1ZXMpLgogKiBUaGUgdXNlIG9mIHRoaXMgcGFyYW1ldGVyIHNob3VsZCB0aGVyZWZvcmUgYmUgY29uc2lkZXJlZCBnb29kCiAqIHByYWN0aWNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGF0dHJpYnV0ZXNfb25seSA8cD4KICogU2hvdWxkIGJlIHNldCB0byAxIGlmIG9ubHkgYXR0cmlidXRlIHR5cGVzIGFyZSB3YW50ZWQuIElmIHNldCB0byAwCiAqIGJvdGggYXR0cmlidXRlcyB0eXBlcyBhbmQgYXR0cmlidXRlIHZhbHVlcyBhcmUgZmV0Y2hlZCB3aGljaCBpcyB0aGUKICogZGVmYXVsdCBiZWhhdmlvdXIuCiAqIDwvcD4KICogQHBhcmFtIGludCAkc2l6ZWxpbWl0IFtvcHRpb25hbF0gPHA+CiAqIEVuYWJsZXMgeW91IHRvIGxpbWl0IHRoZSBjb3VudCBvZiBlbnRyaWVzIGZldGNoZWQuIFNldHRpbmcgdGhpcyB0byAwCiAqIG1lYW5zIG5vIGxpbWl0LgogKiA8L3A+CiAqIDxwPgogKiBUaGlzIHBhcmFtZXRlciBjYW4gTk9UIG92ZXJyaWRlIHNlcnZlci1zaWRlIHByZXNldCBzaXplbGltaXQuIFlvdSBjYW4KICogc2V0IGl0IGxvd2VyIHRob3VnaC4KICogPC9wPgogKiA8cD4KICogU29tZSBkaXJlY3Rvcnkgc2VydmVyIGhvc3RzIHdpbGwgYmUgY29uZmlndXJlZCB0byByZXR1cm4gbm8gbW9yZSB0aGFuCiAqIGEgcHJlc2V0IG51bWJlciBvZiBlbnRyaWVzLiBJZiB0aGlzIG9jY3VycywgdGhlIHNlcnZlciB3aWxsIGluZGljYXRlCiAqIHRoYXQgaXQgaGFzIG9ubHkgcmV0dXJuZWQgYSBwYXJ0aWFsIHJlc3VsdHMgc2V0LiBUaGlzIGFsc28gb2NjdXJzIGlmCiAqIHlvdSB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gbGltaXQgdGhlIGNvdW50IG9mIGZldGNoZWQgZW50cmllcy4KICogPC9wPgogKiBAcGFyYW0gaW50ICR0aW1lbGltaXQgW29wdGlvbmFsXSA8cD4KICogU2V0cyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgaG93IGxvbmcgaXMgc3BlbmQgb24gdGhlIHNlYXJjaC4gU2V0dGluZwogKiB0aGlzIHRvIDAgbWVhbnMgbm8gbGltaXQuCiAqIDwvcD4KICogPHA+CiAqIFRoaXMgcGFyYW1ldGVyIGNhbiBOT1Qgb3ZlcnJpZGUgc2VydmVyLXNpZGUgcHJlc2V0IHRpbWVsaW1pdC4gWW91IGNhbgogKiBzZXQgaXQgbG93ZXIgdGhvdWdoLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGRlcmVmIDxwPgogKiBTcGVjaWZpZXMgaG93IGFsaWFzZXMgc2hvdWxkIGJlIGhhbmRsZWQgZHVyaW5nIHRoZSBzZWFyY2guIEl0IGNhbiBiZQogKiBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICogPGI+TERBUF9ERVJFRl9ORVZFUjwvYj4gLSAoZGVmYXVsdCkgYWxpYXNlcyBhcmUgbmV2ZXIKICogZGVyZWZlcmVuY2VkLjwvcD4KICogQHBhcmFtIGFycmF5fG51bGwgJGNvbnRyb2xzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGEgc2VhcmNoIHJlc3VsdCBpZGVudGlmaWVyIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCiNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHR8YXJyYXl8ZmFsc2UnXSwgZGVmYXVsdDogJ3Jlc291cmNlfGZhbHNlJyldCmZ1bmN0aW9uIGxkYXBfbGlzdCgKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgIGFycmF5fHN0cmluZyAkYmFzZSwKICAgIGFycmF5fHN0cmluZyAkZmlsdGVyLAogICAgYXJyYXkgJGF0dHJpYnV0ZXMgPSBbXSwKICAgIGludCAkYXR0cmlidXRlc19vbmx5ID0gMCwKICAgIGludCAkc2l6ZWxpbWl0ID0gLTEsCiAgICBpbnQgJHRpbWVsaW1pdCA9IC0xLAogICAgaW50ICRkZXJlZiA9IDAsCiAgICAjW0F2YWlsYWJsZShmcm9tOiAnNy4zJyldICNbUGhwVmVyc2lvbkF3YXJlKFsiOC4wIiA9PiAibnVsbHxhcnJheSJdLCBkZWZhdWx0OiAiYXJyYXkiKV0gJGNvbnRyb2xzID0gbnVsbAopIHt9CgovKioKICogU2VhcmNoIExEQVAgdHJlZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtc2VhcmNoLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxkYXAgPHA+CiAqIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSA8Yj5sZGFwX2Nvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGJhc2UgPHA+CiAqIFRoZSBiYXNlIEROIGZvciB0aGUgZGlyZWN0b3J5LgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbHRlciA8cD4KICogVGhlIHNlYXJjaCBmaWx0ZXIgY2FuIGJlIHNpbXBsZSBvciBhZHZhbmNlZCwgdXNpbmcgYm9vbGVhbiBvcGVyYXRvcnMgaW4KICogdGhlIGZvcm1hdCBkZXNjcmliZWQgaW4gdGhlIExEQVAgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZSBOZXRzY2FwZSBEaXJlY3RvcnkgU0RLIGZvciBmdWxsCiAqIGluZm9ybWF0aW9uIG9uIGZpbHRlcnMpLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkYXR0cmlidXRlcyA8cD4KICogQW4gYXJyYXkgb2YgdGhlIHJlcXVpcmVkIGF0dHJpYnV0ZXMsIGUuZy4gYXJyYXkoIm1haWwiLCAic24iLCAiY24iKS4KICogTm90ZSB0aGF0IHRoZSAiZG4iIGlzIGFsd2F5cyByZXR1cm5lZCBpcnJlc3BlY3RpdmUgb2Ygd2hpY2ggYXR0cmlidXRlcwogKiB0eXBlcyBhcmUgcmVxdWVzdGVkLgogKiA8L3A+CiAqIDxwPgogKiBVc2luZyB0aGlzIHBhcmFtZXRlciBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIGRlZmF1bHQgYWN0aW9uCiAqICh3aGljaCBpcyB0byByZXR1cm4gYWxsIGF0dHJpYnV0ZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgdmFsdWVzKS4KICogVGhlIHVzZSBvZiB0aGlzIHBhcmFtZXRlciBzaG91bGQgdGhlcmVmb3JlIGJlIGNvbnNpZGVyZWQgZ29vZAogKiBwcmFjdGljZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRhdHRyaWJ1dGVzX29ubHkgPHA+CiAqIFNob3VsZCBiZSBzZXQgdG8gMSBpZiBvbmx5IGF0dHJpYnV0ZSB0eXBlcyBhcmUgd2FudGVkLiBJZiBzZXQgdG8gMAogKiBib3RoIGF0dHJpYnV0ZXMgdHlwZXMgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIGZldGNoZWQgd2hpY2ggaXMgdGhlCiAqIGRlZmF1bHQgYmVoYXZpb3VyLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHNpemVsaW1pdCBbb3B0aW9uYWxdIDxwPgogKiBFbmFibGVzIHlvdSB0byBsaW1pdCB0aGUgY291bnQgb2YgZW50cmllcyBmZXRjaGVkLiBTZXR0aW5nIHRoaXMgdG8gMAogKiBtZWFucyBubyBsaW1pdC4KICogPC9wPgogKiA8cD4KICogVGhpcyBwYXJhbWV0ZXIgY2FuIE5PVCBvdmVycmlkZSBzZXJ2ZXItc2lkZSBwcmVzZXQgc2l6ZWxpbWl0LiBZb3UgY2FuCiAqIHNldCBpdCBsb3dlciB0aG91Z2guCiAqIDwvcD4KICogPHA+CiAqIFNvbWUgZGlyZWN0b3J5IHNlcnZlciBob3N0cyB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIG5vIG1vcmUgdGhhbgogKiBhIHByZXNldCBudW1iZXIgb2YgZW50cmllcy4gSWYgdGhpcyBvY2N1cnMsIHRoZSBzZXJ2ZXIgd2lsbCBpbmRpY2F0ZQogKiB0aGF0IGl0IGhhcyBvbmx5IHJldHVybmVkIGEgcGFydGlhbCByZXN1bHRzIHNldC4gVGhpcyBhbHNvIG9jY3VycyBpZgogKiB5b3UgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGxpbWl0IHRoZSBjb3VudCBvZiBmZXRjaGVkIGVudHJpZXMuCiAqIDwvcD4KICogQHBhcmFtIGludCAkdGltZWxpbWl0IFtvcHRpb25hbF0gPHA+CiAqIFNldHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGhvdyBsb25nIGlzIHNwZW5kIG9uIHRoZSBzZWFyY2guIFNldHRpbmcKICogdGhpcyB0byAwIG1lYW5zIG5vIGxpbWl0LgogKiA8L3A+CiAqIDxwPgogKiBUaGlzIHBhcmFtZXRlciBjYW4gTk9UIG92ZXJyaWRlIHNlcnZlci1zaWRlIHByZXNldCB0aW1lbGltaXQuIFlvdSBjYW4KICogc2V0IGl0IGxvd2VyIHRob3VnaC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRkZXJlZiA8cD4KICogU3BlY2lmaWVzIGhvdyBhbGlhc2VzIHNob3VsZCBiZSBoYW5kbGVkIGR1cmluZyB0aGUgc2VhcmNoLiBJdCBjYW4gYmUKICogb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAqIDxiPkxEQVBfREVSRUZfTkVWRVI8L2I+IC0gKGRlZmF1bHQpIGFsaWFzZXMgYXJlIG5ldmVyCiAqIGRlcmVmZXJlbmNlZC48L3A+CiAqIEBwYXJhbSBhcnJheXxudWxsICRjb250cm9scyBBcnJheSBvZiBMREFQIENvbnRyb2xzIHRvIHNlbmQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBhIHNlYXJjaCByZXN1bHQgaWRlbnRpZmllciBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwojW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcUmVzdWx0fGFycmF5fGZhbHNlJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxmYWxzZScpXQpmdW5jdGlvbiBsZGFwX3NlYXJjaCgKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgIGFycmF5fHN0cmluZyAkYmFzZSwKICAgIGFycmF5fHN0cmluZyAkZmlsdGVyLAogICAgYXJyYXkgJGF0dHJpYnV0ZXMgPSBbXSwKICAgIGludCAkYXR0cmlidXRlc19vbmx5ID0gMCwKICAgIGludCAkc2l6ZWxpbWl0ID0gLTEsCiAgICBpbnQgJHRpbWVsaW1pdCA9IC0xLAogICAgaW50ICRkZXJlZiA9IDAsCiAgICAjW0F2YWlsYWJsZShmcm9tOiAnNy4zJyldICNbUGhwVmVyc2lvbkF3YXJlKFsiOC4wIiA9PiAibnVsbHxhcnJheSJdLCBkZWZhdWx0OiAiYXJyYXkiKV0gJGNvbnRyb2xzID0gbnVsbAopIHt9CgovKioKICogRnJlZSByZXN1bHQgbWVtb3J5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1mcmVlLXJlc3VsdC5waHAKICogQHBhcmFtIHJlc291cmNlfFJlc3VsdCAkcmVzdWx0CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gbGRhcF9mcmVlX3Jlc3VsdCgKICAgICNbQXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzguMCcpXSAkbGRhcCwKICAgICNbQXZhaWxhYmxlKGZyb206ICc4LjEnKV0gUmVzdWx0ICRyZXN1bHQKKTogYm9vbCB7fQoKLyoqCiAqIENvdW50IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhIHNlYXJjaAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtY291bnQtZW50cmllcy5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogVGhlIGludGVybmFsIExEQVAgcmVzdWx0LgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSByZXN1bHQgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KI1tQaHBWZXJzaW9uQXdhcmUoWyI4LjAiID0+ICJpbnQiXSwgZGVmYXVsdDogImludHxmYWxzZSIpXQpmdW5jdGlvbiBsZGFwX2NvdW50X2VudHJpZXMoCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0Cikge30KCi8qKgogKiBSZXR1cm4gZmlyc3QgcmVzdWx0IGlkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1maXJzdC1lbnRyeS5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdAogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIHRoZSByZXN1bHQgZW50cnkgaWRlbnRpZmllciBmb3IgdGhlIGZpcnN0IGVudHJ5IG9uIHN1Y2Nlc3MgYW5kCiAqIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCiNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHRFbnRyeXxmYWxzZSddLCBkZWZhdWx0OiAncmVzb3VyY2V8ZmFsc2UnKV0KZnVuY3Rpb24gbGRhcF9maXJzdF9lbnRyeSgKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQKKSB7fQoKLyoqCiAqIEdldCBuZXh0IHJlc3VsdCBlbnRyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtbmV4dC1lbnRyeS5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGVudHJ5CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgZW50cnkgaWRlbnRpZmllciBmb3IgdGhlIG5leHQgZW50cnkgaW4gdGhlIHJlc3VsdCB3aG9zZSBlbnRyaWVzCiAqIGFyZSBiZWluZyByZWFkIHN0YXJ0aW5nIHdpdGggPGI+bGRhcF9maXJzdF9lbnRyeTwvYj4uIElmCiAqIHRoZXJlIGFyZSBubyBtb3JlIGVudHJpZXMgaW4gdGhlIHJlc3VsdCB0aGVuIGl0IHJldHVybnMgPGI+RkFMU0U8L2I+LgogKi8KI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXFJlc3VsdEVudHJ5fGZhbHNlJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxmYWxzZScpXQpmdW5jdGlvbiBsZGFwX25leHRfZW50cnkoCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcUmVzdWx0RW50cnknXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRlbnRyeQopIHt9CgovKioKICogR2V0IGFsbCByZXN1bHQgZW50cmllcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtZ2V0LWVudHJpZXMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQKICogQHJldHVybiBhcnJheXxmYWxzZSBhIGNvbXBsZXRlIHJlc3VsdCBpbmZvcm1hdGlvbiBpbiBhIG11bHRpLWRpbWVuc2lvbmFsIGFycmF5IG9uCiAqIHN1Y2Nlc3MgYW5kIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICogPC9wPgogKiA8cD4KICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgYXJyYXkgaXMgYXMgZm9sbG93cy4KICogVGhlIGF0dHJpYnV0ZSBpbmRleCBpcyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLiAoQXR0cmlidXRlcyBhcmUKICogY2FzZS1pbnNlbnNpdGl2ZSBmb3IgZGlyZWN0b3J5IHNlcnZlcnMsIGJ1dCBub3Qgd2hlbiB1c2VkIGFzCiAqIGFycmF5IGluZGljZXMuKQogKiA8cHJlPgogKiByZXR1cm5fdmFsdWVbImNvdW50Il0gPSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgcmVzdWx0CiAqIHJldHVybl92YWx1ZVswXSA6IHJlZmVycyB0byB0aGUgZGV0YWlscyBvZiBmaXJzdCBlbnRyeQogKiByZXR1cm5fdmFsdWVbaV1bImRuIl0gPSBETiBvZiB0aGUgaXRoIGVudHJ5IGluIHRoZSByZXN1bHQKICogcmV0dXJuX3ZhbHVlW2ldWyJjb3VudCJdID0gbnVtYmVyIG9mIGF0dHJpYnV0ZXMgaW4gaXRoIGVudHJ5CiAqIHJldHVybl92YWx1ZVtpXVtqXSA9IE5BTUUgb2YgdGhlIGp0aCBhdHRyaWJ1dGUgaW4gdGhlIGl0aCBlbnRyeSBpbiB0aGUgcmVzdWx0CiAqIHJldHVybl92YWx1ZVtpXVsiYXR0cmlidXRlIl1bImNvdW50Il0gPSBudW1iZXIgb2YgdmFsdWVzIGZvcgogKiBhdHRyaWJ1dGUgaW4gaXRoIGVudHJ5CiAqIHJldHVybl92YWx1ZVtpXVsiYXR0cmlidXRlIl1bal0gPSBqdGggdmFsdWUgb2YgYXR0cmlidXRlIGluIGl0aCBlbnRyeQogKiA8L3ByZT4KICovCmZ1bmN0aW9uIGxkYXBfZ2V0X2VudHJpZXMoCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0Cik6IGFycmF5fGZhbHNlIHt9CgovKioKICogUmV0dXJuIGZpcnN0IGF0dHJpYnV0ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtZmlyc3QtYXR0cmlidXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxkYXAgPHA+CiAqIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSA8Yj5sZGFwX2Nvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSByZXNvdXJjZSAkZW50cnkKICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIGZpcnN0IGF0dHJpYnV0ZSBpbiB0aGUgZW50cnkgb24gc3VjY2VzcyBhbmQgPGI+RkFMU0U8L2I+IG9uCiAqIGVycm9yLgogKi8KZnVuY3Rpb24gbGRhcF9maXJzdF9hdHRyaWJ1dGUoCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcUmVzdWx0RW50cnknXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRlbnRyeQopOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBHZXQgdGhlIG5leHQgYXR0cmlidXRlIGluIHJlc3VsdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtbmV4dC1hdHRyaWJ1dGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlICRlbnRyeQogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgbmV4dCBhdHRyaWJ1dGUgaW4gYW4gZW50cnkgb24gc3VjY2VzcyBhbmQgPGI+RkFMU0U8L2I+IG9uCiAqIGVycm9yLgogKi8KZnVuY3Rpb24gbGRhcF9uZXh0X2F0dHJpYnV0ZSgKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHRFbnRyeSddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGVudHJ5Cik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIEdldCBhdHRyaWJ1dGVzIGZyb20gYSBzZWFyY2ggcmVzdWx0IGVudHJ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1nZXQtYXR0cmlidXRlcy5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGVudHJ5CiAqIEByZXR1cm4gYXJyYXkgYSBjb21wbGV0ZSBlbnRyeSBpbmZvcm1hdGlvbiBpbiBhIG11bHRpLWRpbWVuc2lvbmFsIGFycmF5CiAqIG9uIHN1Y2Nlc3MgYW5kIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGxkYXBfZ2V0X2F0dHJpYnV0ZXMoCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcUmVzdWx0RW50cnknXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRlbnRyeQopOiBhcnJheSB7fQoKLyoqCiAqIEdldCBhbGwgdmFsdWVzIGZyb20gYSByZXN1bHQgZW50cnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLWdldC12YWx1ZXMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlICRlbnRyeQogKiBAcGFyYW0gc3RyaW5nICRhdHRyaWJ1dGUKICogQHJldHVybiBhcnJheXxmYWxzZSBhbiBhcnJheSBvZiB2YWx1ZXMgZm9yIHRoZSBhdHRyaWJ1dGUgb24gc3VjY2VzcyBhbmQgPGI+RkFMU0U8L2I+IG9uCiAqIGVycm9yLiBUaGUgbnVtYmVyIG9mIHZhbHVlcyBjYW4gYmUgZm91bmQgYnkgaW5kZXhpbmcgImNvdW50IiBpbiB0aGUKICogcmVzdWx0YW50IGFycmF5LiBJbmRpdmlkdWFsIHZhbHVlcyBhcmUgYWNjZXNzZWQgYnkgaW50ZWdlciBpbmRleCBpbiB0aGUKICogYXJyYXkuIFRoZSBmaXJzdCBpbmRleCBpcyAwLgogKiA8L3A+CiAqIDxwPgogKiBMREFQIGFsbG93cyBtb3JlIHRoYW4gb25lIGVudHJ5IGZvciBhbiBhdHRyaWJ1dGUsIHNvIGl0IGNhbiwgZm9yIGV4YW1wbGUsCiAqIHN0b3JlIGEgbnVtYmVyIG9mIGVtYWlsIGFkZHJlc3NlcyBmb3Igb25lIHBlcnNvbidzIGRpcmVjdG9yeSBlbnRyeSBhbGwKICogbGFiZWxlZCB3aXRoIHRoZSBhdHRyaWJ1dGUgIm1haWwiCiAqIHJldHVybl92YWx1ZVsiY291bnQiXSA9IG51bWJlciBvZiB2YWx1ZXMgZm9yIGF0dHJpYnV0ZQogKiByZXR1cm5fdmFsdWVbMF0gPSBmaXJzdCB2YWx1ZSBvZiBhdHRyaWJ1dGUKICogcmV0dXJuX3ZhbHVlW2ldID0gaXRoIHZhbHVlIG9mIGF0dHJpYnV0ZQogKi8KZnVuY3Rpb24gbGRhcF9nZXRfdmFsdWVzKAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXFJlc3VsdEVudHJ5J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkZW50cnksCiAgICBzdHJpbmcgJGF0dHJpYnV0ZQopOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEdldCBhbGwgYmluYXJ5IHZhbHVlcyBmcm9tIGEgcmVzdWx0IGVudHJ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1nZXQtdmFsdWVzLWxlbi5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGVudHJ5CiAqIEBwYXJhbSBzdHJpbmcgJGF0dHJpYnV0ZQogKiBAcmV0dXJuIGFycmF5fGZhbHNlIGFuIGFycmF5IG9mIHZhbHVlcyBmb3IgdGhlIGF0dHJpYnV0ZSBvbiBzdWNjZXNzIGFuZCA8Yj5GQUxTRTwvYj4gb24KICogZXJyb3IuIEluZGl2aWR1YWwgdmFsdWVzIGFyZSBhY2Nlc3NlZCBieSBpbnRlZ2VyIGluZGV4IGluIHRoZSBhcnJheS4gVGhlCiAqIGZpcnN0IGluZGV4IGlzIDAuIFRoZSBudW1iZXIgb2YgdmFsdWVzIGNhbiBiZSBmb3VuZCBieSBpbmRleGluZyAiY291bnQiCiAqIGluIHRoZSByZXN1bHRhbnQgYXJyYXkuCiAqLwpmdW5jdGlvbiBsZGFwX2dldF92YWx1ZXNfbGVuKAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXFJlc3VsdEVudHJ5J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkZW50cnksCiAgICBzdHJpbmcgJGF0dHJpYnV0ZQopOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEdldCB0aGUgRE4gb2YgYSByZXN1bHQgZW50cnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLWdldC1kbi5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGVudHJ5CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBETiBvZiB0aGUgcmVzdWx0IGVudHJ5IGFuZCA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBsZGFwX2dldF9kbigKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHRFbnRyeSddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGVudHJ5Cik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIFNwbGl0cyBETiBpbnRvIGl0cyBjb21wb25lbnQgcGFydHMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLWV4cGxvZGUtZG4ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGRuIDxwPgogKiBUaGUgZGlzdGluZ3Vpc2hlZCBuYW1lIG9mIGFuIExEQVAgZW50aXR5LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHdpdGhfYXR0cmliIDxwPgogKiBVc2VkIHRvIHJlcXVlc3QgaWYgdGhlIFJETnMgYXJlIHJldHVybmVkIHdpdGggb25seSB2YWx1ZXMgb3IgdGhlaXIKICogYXR0cmlidXRlcyBhcyB3ZWxsLiBUbyBnZXQgUkROcyB3aXRoIHRoZSBhdHRyaWJ1dGVzIChpLmUuIGluCiAqIGF0dHJpYnV0ZT12YWx1ZSBmb3JtYXQpIHNldCA8aT53aXRoX2F0dHJpYjwvaT4gdG8gMAogKiBhbmQgdG8gZ2V0IG9ubHkgdmFsdWVzIHNldCBpdCB0byAxLgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXJyYXkgb2YgYWxsIEROIGNvbXBvbmVudHMuCiAqIFRoZSBmaXJzdCBlbGVtZW50IGluIHRoaXMgYXJyYXkgaGFzIGNvdW50IGtleSBhbmQKICogcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mIHJldHVybmVkIHZhbHVlcywgbmV4dCBlbGVtZW50cyBhcmUgbnVtZXJpY2FsbHkKICogaW5kZXhlZCBETiBjb21wb25lbnRzLgogKi8KI1tBcnJheVNoYXBlKFsiY291bnQiID0+ICJpbnQiXSldCmZ1bmN0aW9uIGxkYXBfZXhwbG9kZV9kbihzdHJpbmcgJGRuLCBpbnQgJHdpdGhfYXR0cmliKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBDb252ZXJ0IEROIHRvIFVzZXIgRnJpZW5kbHkgTmFtaW5nIGZvcm1hdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtZG4ydWZuLnBocAogKiBAcGFyYW0gc3RyaW5nICRkbiA8cD4KICogVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgdXNlciBmcmllbmRseSBuYW1lLgogKi8KZnVuY3Rpb24gbGRhcF9kbjJ1Zm4oc3RyaW5nICRkbik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIEFkZCBlbnRyaWVzIHRvIExEQVAgZGlyZWN0b3J5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1hZGQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZG4gPHA+CiAqIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRlbnRyeSA8cD4KICogQW4gYXJyYXkgdGhhdCBzcGVjaWZpZXMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlbnRyeS4gVGhlIHZhbHVlcyBpbgogKiB0aGUgZW50cmllcyBhcmUgaW5kZXhlZCBieSBpbmRpdmlkdWFsIGF0dHJpYnV0ZXMuCiAqIEluIGNhc2Ugb2YgbXVsdGlwbGUgdmFsdWVzIGZvciBhbiBhdHRyaWJ1dGUsIHRoZXkgYXJlIGluZGV4ZWQgdXNpbmcKICogaW50ZWdlcnMgc3RhcnRpbmcgd2l0aCAwLgogKiA8Y29kZT4KICogJGVudHJlZVsiYXR0cmlidXQxIl0gPSAidmFsdWUiOwogKiAkZW50cmVlWyJhdHRyaWJ1dDIiXVswXSA9ICJ2YWx1ZTEiOwogKiAkZW50cmVlWyJhdHRyaWJ1dDIiXVsxXSA9ICJ2YWx1ZTIiOwogKiA8L2NvZGU+CiAqIDwvcD4KICogQHBhcmFtIGFycmF5fG51bGwgJGNvbnRyb2xzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGxkYXBfYWRkKAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLAogICAgc3RyaW5nICRkbiwKICAgIGFycmF5ICRlbnRyeSwKICAgICNbQXZhaWxhYmxlKGZyb206ICc3LjMnKV0gI1tQaHBWZXJzaW9uQXdhcmUoWyI4LjAiID0+ICJudWxsfGFycmF5Il0sIGRlZmF1bHQ6ICJhcnJheSIpXSAkY29udHJvbHMgPSBudWxsCik6IGJvb2wge30KCi8qKgogKiBBZGQgZW50cmllcyB0byBMREFQIGRpcmVjdG9yeQogKiBEb2VzIHRoZSBzYW1lIHRoaW5nIGFzIGxkYXBfYWRkKCkgYnV0IHJldHVybnMgdGhlIExEQVAgcmVzdWx0IHJlc291cmNlIHRvIGJlIHBhcnNlZCB3aXRoIGxkYXBfcGFyc2VfcmVzdWx0KCkuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtYWRkLWV4dC5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRkbiA8cD4KICogVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJGVudHJ5IDxwPgogKiBBbiBhcnJheSB0aGF0IHNwZWNpZmllcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVudHJ5LiBUaGUgdmFsdWVzIGluCiAqIHRoZSBlbnRyaWVzIGFyZSBpbmRleGVkIGJ5IGluZGl2aWR1YWwgYXR0cmlidXRlcy4KICogSW4gY2FzZSBvZiBtdWx0aXBsZSB2YWx1ZXMgZm9yIGFuIGF0dHJpYnV0ZSwgdGhleSBhcmUgaW5kZXhlZCB1c2luZwogKiBpbnRlZ2VycyBzdGFydGluZyB3aXRoIDAuCiAqIDxjb2RlPgogKiAkZW50cmVlWyJhdHRyaWJ1dDEiXSA9ICJ2YWx1ZSI7CiAqICRlbnRyZWVbImF0dHJpYnV0MiJdWzBdID0gInZhbHVlMSI7CiAqICRlbnRyZWVbImF0dHJpYnV0MiJdWzFdID0gInZhbHVlMiI7CiAqIDwvY29kZT4KICogPC9wPgogKiBAcGFyYW0gYXJyYXl8bnVsbCAkY29udHJvbHMgQXJyYXkgb2YgTERBUCBDb250cm9scyB0byBzZW5kIHdpdGggdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UKICogQHNpbmNlIDcuMwogKi8KI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXFJlc3VsdHxmYWxzZSddLCBkZWZhdWx0OiAncmVzb3VyY2V8ZmFsc2UnKV0KZnVuY3Rpb24gbGRhcF9hZGRfZXh0KAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLAogICAgc3RyaW5nICRkbiwKICAgIGFycmF5ICRlbnRyeSwKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsiOC4wIiA9PiAibnVsbHxhcnJheSJdLCBkZWZhdWx0OiAiYXJyYXkiKV0gJGNvbnRyb2xzID0gbnVsbAopIHt9CgovKioKICogRGVsZXRlIGFuIGVudHJ5IGZyb20gYSBkaXJlY3RvcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLWRlbGV0ZS5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRkbiA8cD4KICogVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogPC9wPgogKiBAcGFyYW0gYXJyYXl8bnVsbCAkY29udHJvbHMgQXJyYXkgb2YgTERBUCBDb250cm9scyB0byBzZW5kIHdpdGggdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gbGRhcF9kZWxldGUoCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsCiAgICBzdHJpbmcgJGRuLAogICAgI1tBdmFpbGFibGUoZnJvbTogJzcuMycpXSAjW1BocFZlcnNpb25Bd2FyZShbIjguMCIgPT4gIm51bGx8YXJyYXkiXSwgZGVmYXVsdDogImFycmF5IildICRjb250cm9scyA9IG51bGwKKTogYm9vbCB7fQoKLyoqCiAqIERlbGV0ZSBhbiBlbnRyeSBmcm9tIGEgZGlyZWN0b3J5CiAqIERvZXMgdGhlIHNhbWUgdGhpbmcgYXMgbGRhcF9kZWxldGUoKSBidXQgcmV0dXJucyB0aGUgTERBUCByZXN1bHQgcmVzb3VyY2UgdG8gYmUgcGFyc2VkIHdpdGggbGRhcF9wYXJzZV9yZXN1bHQoKS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLWRlbGV0ZS1leHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZG4gPHA+CiAqIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5fG51bGwgJGNvbnRyb2xzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlCiAqIEBzaW5jZSA3LjMKICovCiNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHR8ZmFsc2UnXSwgZGVmYXVsdDogJ3Jlc291cmNlfGZhbHNlJyldCmZ1bmN0aW9uIGxkYXBfZGVsZXRlX2V4dCgKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgIHN0cmluZyAkZG4sCiAgICAjW1BocFZlcnNpb25Bd2FyZShbIjguMCIgPT4gIm51bGx8YXJyYXkiXSwgZGVmYXVsdDogImFycmF5IildICRjb250cm9scyA9IG51bGwKKSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gaXMgYW4gYWxpYXMgb2Y6IGxkYXBfbW9kX3JlcGxhY2UoKS4KICogUmVwbGFjZSBhdHRyaWJ1dGUgdmFsdWVzIHdpdGggbmV3IG9uZXMKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1tb2RpZnkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZG4gPHA+CiAqIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRlbnRyeQogKiBAcGFyYW0gYXJyYXl8bnVsbCAkY29udHJvbHMgQXJyYXkgb2YgTERBUCBDb250cm9scyB0byBzZW5kIHdpdGggdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gbGRhcF9tb2RpZnkoCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsCiAgICBzdHJpbmcgJGRuLAogICAgYXJyYXkgJGVudHJ5LAogICAgI1tBdmFpbGFibGUoZnJvbTogJzcuMycpXSAjW1BocFZlcnNpb25Bd2FyZShbIjguMCIgPT4gIm51bGx8YXJyYXkiXSwgZGVmYXVsdDogImFycmF5IildICRjb250cm9scyA9IG51bGwKKTogYm9vbCB7fQoKLyoqCiAqIEFkZCBhdHRyaWJ1dGUgdmFsdWVzIHRvIGN1cnJlbnQgYXR0cmlidXRlcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtbW9kLWFkZC5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRkbiA8cD4KICogVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJGVudHJ5CiAqIEBwYXJhbSBhcnJheXxudWxsICRjb250cm9scyBBcnJheSBvZiBMREFQIENvbnRyb2xzIHRvIHNlbmQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBsZGFwX21vZF9hZGQoCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsCiAgICBzdHJpbmcgJGRuLAogICAgYXJyYXkgJGVudHJ5LAogICAgI1tBdmFpbGFibGUoZnJvbTogJzcuMycpXSAjW1BocFZlcnNpb25Bd2FyZShbIjguMCIgPT4gIm51bGx8YXJyYXkiXSwgZGVmYXVsdDogImFycmF5IildICRjb250cm9scyA9IG51bGwKKTogYm9vbCB7fQoKLyoqCiAqIEFkZCBhdHRyaWJ1dGUgdmFsdWVzIHRvIGN1cnJlbnQgYXR0cmlidXRlcwogKiBEb2VzIHRoZSBzYW1lIHRoaW5nIGFzIGxkYXBfbW9kX2FkZCgpIGJ1dCByZXR1cm5zIHRoZSBMREFQIHJlc3VsdCByZXNvdXJjZSB0byBiZSBwYXJzZWQgd2l0aCBsZGFwX3BhcnNlX3Jlc3VsdCgpLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtbW9kLWFkZC1leHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZG4gPHA+CiAqIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRlbnRyeQogKiBAcGFyYW0gYXJyYXl8bnVsbCAkY29udHJvbHMgQXJyYXkgb2YgTERBUCBDb250cm9scyB0byBzZW5kIHdpdGggdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UKICogQHNpbmNlIDcuMwogKi8KI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXFJlc3VsdHxmYWxzZSddLCBkZWZhdWx0OiAncmVzb3VyY2V8ZmFsc2UnKV0KZnVuY3Rpb24gbGRhcF9tb2RfYWRkX2V4dCgKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgIHN0cmluZyAkZG4sCiAgICBhcnJheSAkZW50cnksCiAgICAjW1BocFZlcnNpb25Bd2FyZShbIjguMCIgPT4gIm51bGx8YXJyYXkiXSwgZGVmYXVsdDogImFycmF5IildICRjb250cm9scyA9IG51bGwKKSB7fQoKLyoqCiAqIFJlcGxhY2UgYXR0cmlidXRlIHZhbHVlcyB3aXRoIG5ldyBvbmVzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1tb2QtcmVwbGFjZS5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRkbiA8cD4KICogVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJGVudHJ5CiAqIEBwYXJhbSBhcnJheXxudWxsICRjb250cm9scyBBcnJheSBvZiBMREFQIENvbnRyb2xzIHRvIHNlbmQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBsZGFwX21vZF9yZXBsYWNlKAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLAogICAgc3RyaW5nICRkbiwKICAgIGFycmF5ICRlbnRyeSwKICAgICNbQXZhaWxhYmxlKGZyb206ICc3LjMnKV0gI1tQaHBWZXJzaW9uQXdhcmUoWyI4LjAiID0+ICJudWxsfGFycmF5Il0sIGRlZmF1bHQ6ICJhcnJheSIpXSAkY29udHJvbHMgPSBudWxsCik6IGJvb2wge30KCi8qKgogKiBSZXBsYWNlIGF0dHJpYnV0ZSB2YWx1ZXMgd2l0aCBuZXcgb25lcwogKiBEb2VzIHRoZSBzYW1lIHRoaW5nIGFzIGxkYXBfbW9kX3JlcGxhY2UoKSBidXQgcmV0dXJucyB0aGUgTERBUCByZXN1bHQgcmVzb3VyY2UgdG8gYmUgcGFyc2VkIHdpdGggbGRhcF9wYXJzZV9yZXN1bHQoKS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLW1vZC1yZXBsYWNlLWV4dC5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRkbiA8cD4KICogVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJGVudHJ5CiAqIEBwYXJhbSBhcnJheXxudWxsICRjb250cm9scyBBcnJheSBvZiBMREFQIENvbnRyb2xzIHRvIHNlbmQgd2l0aCB0aGUgcmVxdWVzdC4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZQogKiBAc2luY2UgNy4zCiAqLwojW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcUmVzdWx0fGZhbHNlJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZXxmYWxzZScpXQpmdW5jdGlvbiBsZGFwX21vZF9yZXBsYWNlX2V4dCgjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsIHN0cmluZyAkZG4sIGFycmF5ICRlbnRyeSwgI1tQaHBWZXJzaW9uQXdhcmUoWyI4LjAiID0+ICJudWxsfGFycmF5Il0sIGRlZmF1bHQ6ICJhcnJheSIpXSAkY29udHJvbHMgPSBudWxsKSB7fQoKLyoqCiAqIERlbGV0ZSBhdHRyaWJ1dGUgdmFsdWVzIGZyb20gY3VycmVudCBhdHRyaWJ1dGVzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1tb2QtZGVsLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxkYXAgPHA+CiAqIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSA8Yj5sZGFwX2Nvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGRuIDxwPgogKiBUaGUgZGlzdGluZ3Vpc2hlZCBuYW1lIG9mIGFuIExEQVAgZW50aXR5LgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkZW50cnkKICogQHBhcmFtIGFycmF5fG51bGwgJGNvbnRyb2xzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGxkYXBfbW9kX2RlbCgKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgIHN0cmluZyAkZG4sCiAgICBhcnJheSAkZW50cnksCiAgICAjW0F2YWlsYWJsZShmcm9tOiAnNy4zJyldICNbUGhwVmVyc2lvbkF3YXJlKFsiOC4wIiA9PiAibnVsbHxhcnJheSJdLCBkZWZhdWx0OiAiYXJyYXkiKV0gJGNvbnRyb2xzID0gbnVsbAopOiBib29sIHt9CgovKioKICogRGVsZXRlIGF0dHJpYnV0ZSB2YWx1ZXMgZnJvbSBjdXJyZW50IGF0dHJpYnV0ZXMKICogRG9lcyB0aGUgc2FtZSB0aGluZyBhcyBsZGFwX21vZF9kZWwoKSBidXQgcmV0dXJucyB0aGUgTERBUCByZXN1bHQgcmVzb3VyY2UgdG8gYmUgcGFyc2VkIHdpdGggbGRhcF9wYXJzZV9yZXN1bHQoKS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLW1vZC1kZWwtZXh0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxkYXAgPHA+CiAqIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSA8Yj5sZGFwX2Nvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGRuIDxwPgogKiBUaGUgZGlzdGluZ3Vpc2hlZCBuYW1lIG9mIGFuIExEQVAgZW50aXR5LgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkZW50cnkKICogQHBhcmFtIGFycmF5fG51bGwgJGNvbnRyb2xzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlCiAqIEBzaW5jZSA3LjMKICovCiNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHR8ZmFsc2UnXSwgZGVmYXVsdDogJ3Jlc291cmNlfGZhbHNlJyldCmZ1bmN0aW9uIGxkYXBfbW9kX2RlbF9leHQoI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLCBzdHJpbmcgJGRuLCBhcnJheSAkZW50cnksICNbUGhwVmVyc2lvbkF3YXJlKFsiOC4wIiA9PiAibnVsbHxhcnJheSJdLCBkZWZhdWx0OiAiYXJyYXkiKV0gJGNvbnRyb2xzID0gbnVsbCkge30KCi8qKgogKiBSZXR1cm4gdGhlIExEQVAgZXJyb3IgbnVtYmVyIG9mIHRoZSBsYXN0IExEQVAgY29tbWFuZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtZXJybm8ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBpbnQgUmV0dXJuIHRoZSBMREFQIGVycm9yIG51bWJlciBvZiB0aGUgbGFzdCBMREFQIGNvbW1hbmQgZm9yIHRoaXMKICogbGluay4KICovCmZ1bmN0aW9uIGxkYXBfZXJybm8oI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwKTogaW50IHt9CgovKioKICogQ29udmVydCBMREFQIGVycm9yIG51bWJlciBpbnRvIHN0cmluZyBlcnJvciBtZXNzYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1lcnIyc3RyLnBocAogKiBAcGFyYW0gaW50ICRlcnJubyA8cD4KICogVGhlIGVycm9yIG51bWJlci4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyB0aGUgZXJyb3IgbWVzc2FnZSwgYXMgYSBzdHJpbmcuCiAqLwpmdW5jdGlvbiBsZGFwX2VycjJzdHIoaW50ICRlcnJubyk6IHN0cmluZyB7fQoKLyoqCiAqIFJldHVybiB0aGUgTERBUCBlcnJvciBtZXNzYWdlIG9mIHRoZSBsYXN0IExEQVAgY29tbWFuZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtZXJyb3IucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgc3RyaW5nIGVycm9yIG1lc3NhZ2UuCiAqLwpmdW5jdGlvbiBsZGFwX2Vycm9yKCNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCk6IHN0cmluZyB7fQoKLyoqCiAqIENvbXBhcmUgdmFsdWUgb2YgYXR0cmlidXRlIGZvdW5kIGluIGVudHJ5IHNwZWNpZmllZCB3aXRoIEROCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1jb21wYXJlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxkYXAgPHA+CiAqIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSA8Yj5sZGFwX2Nvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGRuIDxwPgogKiBUaGUgZGlzdGluZ3Vpc2hlZCBuYW1lIG9mIGFuIExEQVAgZW50aXR5LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGF0dHJpYnV0ZSA8cD4KICogVGhlIGF0dHJpYnV0ZSBuYW1lLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIDxwPgogKiBUaGUgY29tcGFyZWQgdmFsdWUuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5fG51bGwgJGNvbnRyb2xzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIGludHxib29sIDxiPlRSVUU8L2I+IGlmIDxpPnZhbHVlPC9pPiBtYXRjaGVzIG90aGVyd2lzZSByZXR1cm5zCiAqIDxiPkZBTFNFPC9iPi4gUmV0dXJucyAtMSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGxkYXBfY29tcGFyZSgKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgIHN0cmluZyAkZG4sCiAgICBzdHJpbmcgJGF0dHJpYnV0ZSwKICAgIHN0cmluZyAkdmFsdWUsCiAgICAjW0F2YWlsYWJsZShmcm9tOiAnNy4zJyldICNbUGhwVmVyc2lvbkF3YXJlKFsiOC4wIiA9PiAibnVsbHxhcnJheSJdLCBkZWZhdWx0OiAiYXJyYXkiKV0gJGNvbnRyb2xzID0gbnVsbAopOiBpbnR8Ym9vbCB7fQoKLyoqCiAqIFNvcnQgTERBUCByZXN1bHQgZW50cmllcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtc29ydC5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogQW4gc2VhcmNoIHJlc3VsdCBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiA8Yj5sZGFwX3NlYXJjaDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc29ydGZpbHRlciA8cD4KICogVGhlIGF0dHJpYnV0ZSB0byB1c2UgYXMgYSBrZXkgaW4gdGhlIHNvcnQuCiAqIDwvcD4KICogQHJlbW92ZWQgOC4wCiAqIEByZXR1cm4gYm9vbAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAiNy4wIildCmZ1bmN0aW9uIGxkYXBfc29ydCgjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsICRyZXN1bHQsIHN0cmluZyAkc29ydGZpbHRlcik6IGJvb2wge30KCi8qKgogKiBNb2RpZnkgdGhlIG5hbWUgb2YgYW4gZW50cnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLXJlbmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRkbiA8cD4KICogVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRuZXdfcmRuIDxwPgogKiBUaGUgbmV3IFJETi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRuZXdfcGFyZW50IDxwPgogKiBUaGUgbmV3IHBhcmVudC9zdXBlcmlvciBlbnRyeS4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkZGVsZXRlX29sZF9yZG4gPHA+CiAqIElmIDxiPlRSVUU8L2I+IHRoZSBvbGQgUkROIHZhbHVlKHMpIGlzIHJlbW92ZWQsIGVsc2UgdGhlIG9sZCBSRE4gdmFsdWUocykKICogaXMgcmV0YWluZWQgYXMgbm9uLWRpc3Rpbmd1aXNoZWQgdmFsdWVzIG9mIHRoZSBlbnRyeS4KICogPC9wPgogKiBAcGFyYW0gYXJyYXl8bnVsbCAkY29udHJvbHMgQXJyYXkgb2YgTERBUCBDb250cm9scyB0byBzZW5kIHdpdGggdGhlIHJlcXVlc3QuCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gbGRhcF9yZW5hbWUoCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsCiAgICBzdHJpbmcgJGRuLAogICAgc3RyaW5nICRuZXdfcmRuLAogICAgc3RyaW5nICRuZXdfcGFyZW50LAogICAgYm9vbCAkZGVsZXRlX29sZF9yZG4sCiAgICAjW0F2YWlsYWJsZShmcm9tOiAnNy4zJyldICNbUGhwVmVyc2lvbkF3YXJlKFsiOC4wIiA9PiAibnVsbHxhcnJheSJdLCBkZWZhdWx0OiAiYXJyYXkiKV0gJGNvbnRyb2xzID0gbnVsbAopOiBib29sIHt9CgovKioKICogTW9kaWZ5IHRoZSBuYW1lIG9mIGFuIGVudHJ5CiAqIERvZXMgdGhlIHNhbWUgdGhpbmcgYXMgbGRhcF9yZW5hbWUoKSBidXQgcmV0dXJucyB0aGUgTERBUCByZXN1bHQgcmVzb3VyY2UgdG8gYmUgcGFyc2VkIHdpdGggbGRhcF9wYXJzZV9yZXN1bHQoKS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLXJlbmFtZS1leHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZG4gPHA+CiAqIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgYW4gTERBUCBlbnRpdHkuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbmV3X3JkbiA8cD4KICogVGhlIG5ldyBSRE4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbmV3X3BhcmVudCA8cD4KICogVGhlIG5ldyBwYXJlbnQvc3VwZXJpb3IgZW50cnkuCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJGRlbGV0ZV9vbGRfcmRuIDxwPgogKiBJZiA8Yj5UUlVFPC9iPiB0aGUgb2xkIFJETiB2YWx1ZShzKSBpcyByZW1vdmVkLCBlbHNlIHRoZSBvbGQgUkROIHZhbHVlKHMpCiAqIGlzIHJldGFpbmVkIGFzIG5vbi1kaXN0aW5ndWlzaGVkIHZhbHVlcyBvZiB0aGUgZW50cnkuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5fG51bGwgJGNvbnRyb2xzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlCiAqIEBzaW5jZSA3LjMKICovCiNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHR8ZmFsc2UnXSwgZGVmYXVsdDogJ3Jlc291cmNlfGZhbHNlJyldCmZ1bmN0aW9uIGxkYXBfcmVuYW1lX2V4dCgjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsIHN0cmluZyAkZG4sIHN0cmluZyAkbmV3X3Jkbiwgc3RyaW5nICRuZXdfcGFyZW50LCBib29sICRkZWxldGVfb2xkX3JkbiwgI1tQaHBWZXJzaW9uQXdhcmUoWyI4LjAiID0+ICJudWxsfGFycmF5Il0sIGRlZmF1bHQ6ICJhcnJheSIpXSAkY29udHJvbHMgPSBudWxsKSB7fQoKLyoqCiAqIEdldCB0aGUgY3VycmVudCB2YWx1ZSBmb3IgZ2l2ZW4gb3B0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1nZXQtb3B0aW9uLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxkYXAgPHA+CiAqIEFuIExEQVAgbGluayBpZGVudGlmaWVyLCByZXR1cm5lZCBieSA8Yj5sZGFwX2Nvbm5lY3Q8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG9wdGlvbiA8cD4KICogVGhlIHBhcmFtZXRlciA8aT5vcHRpb248L2k+IGNhbiBiZSBvbmUgb2Y6CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5PcHRpb248L3RkPgogKiA8dGQ+VHlwZTwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5MREFQX09QVF9ERVJFRjwvYj48L3RkPgogKiA8dGQ+aW50ZWdlcjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5MREFQX09QVF9TSVpFTElNSVQ8L2I+PC90ZD4KICogPHRkPmludGVnZXI8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TERBUF9PUFRfVElNRUxJTUlUPC9iPjwvdGQ+CiAqIDx0ZD5pbnRlZ2VyPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPkxEQVBfT1BUX05FVFdPUktfVElNRU9VVDwvYj48L3RkPgogKiA8dGQ+aW50ZWdlcjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5MREFQX09QVF9QUk9UT0NPTF9WRVJTSU9OPC9iPjwvdGQ+CiAqIDx0ZD5pbnRlZ2VyPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPkxEQVBfT1BUX0VSUk9SX05VTUJFUjwvYj48L3RkPgogKiA8dGQ+aW50ZWdlcjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5MREFQX09QVF9SRUZFUlJBTFM8L2I+PC90ZD4KICogPHRkPmJvb2w8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TERBUF9PUFRfUkVTVEFSVDwvYj48L3RkPgogKiA8dGQ+Ym9vbDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5MREFQX09QVF9IT1NUX05BTUU8L2I+PC90ZD4KICogPHRkPnN0cmluZzwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5MREFQX09QVF9FUlJPUl9TVFJJTkc8L2I+PC90ZD4KICogPHRkPnN0cmluZzwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5MREFQX09QVF9NQVRDSEVEX0ROPC9iPjwvdGQ+CiAqIDx0ZD5zdHJpbmc8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TERBUF9PUFRfU0VSVkVSX0NPTlRST0xTPC9iPjwvdGQ+CiAqIDx0ZD5hcnJheTwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5MREFQX09QVF9DTElFTlRfQ09OVFJPTFM8L2I+PC90ZD4KICogPHRkPmFycmF5PC90ZD4KICogPC90cj4KICogPC9wPgogKiBAcGFyYW0gbWl4ZWQgJiR2YWx1ZSA8cD4KICogVGhpcyB3aWxsIGJlIHNldCB0byB0aGUgb3B0aW9uIHZhbHVlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gbGRhcF9nZXRfb3B0aW9uKAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLAogICAgaW50ICRvcHRpb24sCiAgICAjW0F2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJiR2YWx1ZSwKICAgICNbQXZhaWxhYmxlKGZyb206ICc4LjAnKV0gJiR2YWx1ZSA9IG51bGwKKTogYm9vbCB7fQoKLyoqCiAqIFNldCB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIG9wdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtc2V0LW9wdGlvbi5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwIDxwPgogKiBBbiBMREFQIGxpbmsgaWRlbnRpZmllciwgcmV0dXJuZWQgYnkgPGI+bGRhcF9jb25uZWN0PC9iPi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvcHRpb24gPHA+CiAqIFRoZSBwYXJhbWV0ZXIgPGk+b3B0aW9uPC9pPiBjYW4gYmUgb25lIG9mOgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+T3B0aW9uPC90ZD4KICogPHRkPlR5cGU8L3RkPgogKiA8dGQ+QXZhaWxhYmxlIHNpbmNlPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPkxEQVBfT1BUX0RFUkVGPC9iPjwvdGQ+CiAqIDx0ZD5pbnRlZ2VyPC90ZD4KICogPHRkPjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5MREFQX09QVF9TSVpFTElNSVQ8L2I+PC90ZD4KICogPHRkPmludGVnZXI8L3RkPgogKiA8dGQ+PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPkxEQVBfT1BUX1RJTUVMSU1JVDwvYj48L3RkPgogKiA8dGQ+aW50ZWdlcjwvdGQ+CiAqIDx0ZD48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TERBUF9PUFRfTkVUV09SS19USU1FT1VUPC9iPjwvdGQ+CiAqIDx0ZD5pbnRlZ2VyPC90ZD4KICogPHRkPlBIUCA1LjMuMDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5MREFQX09QVF9QUk9UT0NPTF9WRVJTSU9OPC9iPjwvdGQ+CiAqIDx0ZD5pbnRlZ2VyPC90ZD4KICogPHRkPjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5MREFQX09QVF9FUlJPUl9OVU1CRVI8L2I+PC90ZD4KICogPHRkPmludGVnZXI8L3RkPgogKiA8dGQ+PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPkxEQVBfT1BUX1JFRkVSUkFMUzwvYj48L3RkPgogKiA8dGQ+Ym9vbDwvdGQ+CiAqIDx0ZD48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TERBUF9PUFRfUkVTVEFSVDwvYj48L3RkPgogKiA8dGQ+Ym9vbDwvdGQ+CiAqIDx0ZD48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TERBUF9PUFRfSE9TVF9OQU1FPC9iPjwvdGQ+CiAqIDx0ZD5zdHJpbmc8L3RkPgogKiA8dGQ+PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPkxEQVBfT1BUX0VSUk9SX1NUUklORzwvYj48L3RkPgogKiA8dGQ+c3RyaW5nPC90ZD4KICogPHRkPjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5MREFQX09QVF9NQVRDSEVEX0ROPC9iPjwvdGQ+CiAqIDx0ZD5zdHJpbmc8L3RkPgogKiA8dGQ+PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPkxEQVBfT1BUX1NFUlZFUl9DT05UUk9MUzwvYj48L3RkPgogKiA8dGQ+YXJyYXk8L3RkPgogKiA8dGQ+PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPkxEQVBfT1BUX0NMSUVOVF9DT05UUk9MUzwvYj48L3RkPgogKiA8dGQ+YXJyYXk8L3RkPgogKiA8dGQ+PC90ZD4KICogPC90cj4KICogPC9wPgogKiA8cD4KICogPGI+TERBUF9PUFRfU0VSVkVSX0NPTlRST0xTPC9iPiBhbmQKICogPGI+TERBUF9PUFRfQ0xJRU5UX0NPTlRST0xTPC9iPiByZXF1aXJlIGEgbGlzdCBvZgogKiBjb250cm9scywgdGhpcyBtZWFucyB0aGF0IHRoZSB2YWx1ZSBtdXN0IGJlIGFuIGFycmF5IG9mIGNvbnRyb2xzLiBBCiAqIGNvbnRyb2wgY29uc2lzdHMgb2YgYW4gb2lkIGlkZW50aWZ5aW5nIHRoZSBjb250cm9sLAogKiBhbiBvcHRpb25hbCB2YWx1ZSwgYW5kIGFuIG9wdGlvbmFsIGZsYWcgZm9yCiAqIGNyaXRpY2FsaXR5LiBJbiBQSFAgYSBjb250cm9sIGlzIGdpdmVuIGJ5IGFuCiAqIGFycmF5IGNvbnRhaW5pbmcgYW4gZWxlbWVudCB3aXRoIHRoZSBrZXkgb2lkCiAqIGFuZCBzdHJpbmcgdmFsdWUsIGFuZCB0d28gb3B0aW9uYWwgZWxlbWVudHMuIFRoZSBvcHRpb25hbAogKiBlbGVtZW50cyBhcmUga2V5IHZhbHVlIHdpdGggc3RyaW5nIHZhbHVlCiAqIGFuZCBrZXkgaXNjcml0aWNhbCB3aXRoIGJvb2xlYW4gdmFsdWUuCiAqIGlzY3JpdGljYWwgZGVmYXVsdHMgdG8gPGI+RkFMU0U8L2I+CiAqIGlmIG5vdCBzdXBwbGllZC4gU2VlIGRyYWZ0LWlldGYtbGRhcGV4dC1sZGFwLWMtYXBpLXh4LnR4dAogKiBmb3IgZGV0YWlscy4gU2VlIGFsc28gdGhlIHNlY29uZCBleGFtcGxlIGJlbG93LgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgPHA+CiAqIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgPGk+b3B0aW9uPC9pPi4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGxkYXBfc2V0X29wdGlvbigKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9ufG51bGwnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLAogICAgaW50ICRvcHRpb24sCiAgICAkdmFsdWUKKTogYm9vbCB7fQoKLyoqCiAqIFJldHVybiBmaXJzdCByZWZlcmVuY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLWZpcnN0LXJlZmVyZW5jZS5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEByZXR1cm4gcmVzb3VyY2UKICovCiNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHRFbnRyeXxmYWxzZSddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0KZnVuY3Rpb24gbGRhcF9maXJzdF9yZWZlcmVuY2UoCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcUmVzdWx0J10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkcmVzdWx0Cikge30KCi8qKgogKiBHZXQgbmV4dCByZWZlcmVuY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLW5leHQtcmVmZXJlbmNlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxkYXAKICogQHBhcmFtIHJlc291cmNlICRlbnRyeQogKiBAcmV0dXJuIHJlc291cmNlCiAqLwojW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcUmVzdWx0RW50cnl8ZmFsc2UnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldCmZ1bmN0aW9uIGxkYXBfbmV4dF9yZWZlcmVuY2UoCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcUmVzdWx0RW50cnknXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRlbnRyeQopIHt9CgovKioKICogRXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIHJlZmVyZW5jZSBlbnRyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtcGFyc2UtcmVmZXJlbmNlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGxkYXAKICogQHBhcmFtIHJlc291cmNlICRlbnRyeQogKiBAcGFyYW0gYXJyYXkgJiRyZWZlcnJhbHMKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBsZGFwX3BhcnNlX3JlZmVyZW5jZSgKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHRFbnRyeSddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGVudHJ5LAogICAgJiRyZWZlcnJhbHMKKTogYm9vbCB7fQoKLyoqCiAqIEV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSByZXN1bHQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5sZGFwLXBhcnNlLXJlc3VsdC5waHAKICogQHBhcmFtIHJlc291cmNlICRsZGFwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEBwYXJhbSBpbnQgJiRlcnJvcl9jb2RlCiAqIEBwYXJhbSBzdHJpbmcgJiRtYXRjaGVkX2RuIFtvcHRpb25hbF0KICogQHBhcmFtIHN0cmluZyAmJGVycm9yX21lc3NhZ2UgW29wdGlvbmFsXQogKiBAcGFyYW0gYXJyYXkgJiRyZWZlcnJhbHMgW29wdGlvbmFsXQogKiBAcGFyYW0gYXJyYXkgJiRjb250cm9scyBBbiBhcnJheSBvZiBMREFQIENvbnRyb2xzIHdoaWNoIGhhdmUgYmVlbiBzZW50IHdpdGggdGhlIHJlc3BvbnNlLgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGxkYXBfcGFyc2VfcmVzdWx0KAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRsZGFwLAogICAgI1tQaHBWZXJzaW9uQXdhcmUoWyc4LjEnID0+ICdMREFQXFJlc3VsdCddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJHJlc3VsdCwKICAgICYkZXJyb3JfY29kZSwKICAgICYkbWF0Y2hlZF9kbiwKICAgICYkZXJyb3JfbWVzc2FnZSwKICAgICYkcmVmZXJyYWxzLAogICAgI1tBdmFpbGFibGUoZnJvbTogJzcuMycpXSAmJGNvbnRyb2xzID0gbnVsbAopOiBib29sIHt9CgovKioKICogU3RhcnQgVExTCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1zdGFydC10bHMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcAogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGxkYXBfc3RhcnRfdGxzKCNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCk6IGJvb2wge30KCi8qKgogKiBTZXQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBkbyByZS1iaW5kcyBvbiByZWZlcnJhbCBjaGFzaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1zZXQtcmViaW5kLXByb2MucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcAogKiBAcGFyYW0gY2FsbGFibGV8bnVsbCAkY2FsbGJhY2sKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBsZGFwX3NldF9yZWJpbmRfcHJvYygjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsID9jYWxsYWJsZSAkY2FsbGJhY2spOiBib29sIHt9CgovKioKICogU2VuZCBMREFQIHBhZ2luYXRpb24gY29udHJvbAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtY29udHJvbC1wYWdlZC1yZXN1bHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkcGFnZXNpemUgPHA+CiAqIFRoZSBudW1iZXIgb2YgZW50cmllcyBieSBwYWdlLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRpc2NyaXRpY2FsIFtvcHRpb25hbF0gPHA+CiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwYWdpbmF0aW9uIGlzIGNyaXRpY2FsIG9mIG5vdC4KICogSWYgdHJ1ZSBhbmQgaWYgdGhlIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgcGFnaW5hdGlvbiwgdGhlIHNlYXJjaAogKiB3aWxsIHJldHVybiBubyByZXN1bHQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY29va2llIFtvcHRpb25hbF0gPHA+CiAqIEFuIG9wYXF1ZSBzdHJ1Y3R1cmUgc2VudCBieSB0aGUgc2VydmVyCiAqICg8Yj5sZGFwX2NvbnRyb2xfcGFnZWRfcmVzdWx0X3Jlc3BvbnNlPC9iPikuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA1LjQKICogQHJlbW92ZWQgOC4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICI3LjQiKV0KZnVuY3Rpb24gbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdCgjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsIGludCAkcGFnZXNpemUsICRpc2NyaXRpY2FsID0gZmFsc2UsICRjb29raWUgPSAiIik6IGJvb2wge30KCi8qKgogKiBSZXRyaWV2ZSB0aGUgTERBUCBwYWdpbmF0aW9uIGNvb2tpZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxkYXAtY29udHJvbC1wYWdlZC1yZXN1bHQtcmVzcG9uc2UucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5IDxiPmxkYXBfY29ubmVjdDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQKICogQHBhcmFtIHN0cmluZyAmJGNvb2tpZSBbb3B0aW9uYWxdIDxwPgogKiBBbiBvcGFxdWUgc3RydWN0dXJlIHNlbnQgYnkgdGhlIHNlcnZlci4KICogPC9wPgogKiBAcGFyYW0gaW50ICYkZXN0aW1hdGVkIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBlc3RpbWF0ZWQgbnVtYmVyIG9mIGVudHJpZXMgdG8gcmV0cmlldmUuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA1LjQKICogQHJlbW92ZWQgOC4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICI3LjQiKV0KZnVuY3Rpb24gbGRhcF9jb250cm9sX3BhZ2VkX3Jlc3VsdF9yZXNwb25zZSgjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsICRyZXN1bHQsICYkY29va2llID0gbnVsbCwgJiRlc3RpbWF0ZWQgPSBudWxsKTogYm9vbCB7fQoKLyoqCiAqIEVzY2FwZSBhIHN0cmluZyBmb3IgdXNlIGluIGFuIExEQVAgZmlsdGVyIG9yIEROCiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSB2YWx1ZSB0byBlc2NhcGUuCiAqIEBwYXJhbSBzdHJpbmcgJGlnbm9yZSBbb3B0aW9uYWxdIENoYXJhY3RlcnMgdG8gaWdub3JlIHdoZW4gZXNjYXBpbmcuCiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gVGhlIGNvbnRleHQgdGhlIGVzY2FwZWQgc3RyaW5nIHdpbGwgYmUgdXNlZCBpbjogTERBUF9FU0NBUEVfRklMVEVSIGZvciBmaWx0ZXJzIHRvIGJlIHVzZWQgd2l0aCBsZGFwX3NlYXJjaCgpLCBvciBMREFQX0VTQ0FQRV9ETiBmb3IgRE5zLiBJZiBuZWl0aGVyIGZsYWcgaXMgcGFzc2VkLCBhbGwgY2hhcnMgYXJlIGVzY2FwZWQuCiAqIEByZXR1cm4gc3RyaW5nCiAqIEBzaW5jZSA1LjYKICovCmZ1bmN0aW9uIGxkYXBfZXNjYXBlKHN0cmluZyAkdmFsdWUsIHN0cmluZyAkaWdub3JlID0gIiIsIGludCAkZmxhZ3MgPSAwKTogc3RyaW5nIHt9CgovKioKICogKFBIUCA1LjQgJmd0Oz0gNS40LjI2LCBQSFAgNS41ICZndDs9IDUuNS4xMCwgUEhQIDUuNiAmZ3Q7PSA1LjYuMCkKICogQmF0Y2ggYW5kIGV4ZWN1dGUgbW9kaWZpY2F0aW9ucyBvbiBhbiBMREFQIGVudHJ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubGRhcC1tb2RpZnktYmF0Y2gucGhwCiAqIEBwYXJhbSAkbGRhcCA8cD4KICogQW4gTERBUCBsaW5rIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5CiAqIHtAc2VlIGxkYXBfY29ubmVjdCgpfS4KICogPC9wPgogKiBAcGFyYW0gIHN0cmluZyAkZG4gPHA+VGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiBhbiBMREFQIGVudGl0eS48L3A+CiAqIEBwYXJhbSBhcnJheSAkbW9kaWZpY2F0aW9uc19pbmZvIDxwPkFuIGFycmF5IHRoYXQgc3BlY2lmaWVzIHRoZSBtb2RpZmljYXRpb25zIHRvIG1ha2UuIEVhY2ggZW50cnkgaW4gdGhpcwogKiBhcnJheSBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHR3byBvciB0aHJlZSBrZXlzOgogKiA8ZW0+YXR0cmliPC9lbT4gbWFwcyB0byB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIG1vZGlmeSwKICogPGVtPm1vZHR5cGU8L2VtPiBtYXBzIHRvIHRoZSB0eXBlIG9mIG1vZGlmaWNhdGlvbiB0byBwZXJmb3JtLAogKiBhbmQgKGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBtb2RpZmljYXRpb24pIDxlbT52YWx1ZXM8L2VtPgogKiBtYXBzIHRvIGFuIGFycmF5IG9mIGF0dHJpYnV0ZSB2YWx1ZXMgcmVsZXZhbnQgdG8gdGhlIG1vZGlmaWNhdGlvbi4KICogPC9wPgogKiA8cD4KICogUG9zc2libGUgdmFsdWVzIGZvciA8ZW0+bW9kdHlwZTwvZW0+IGluY2x1ZGU6CiAqIDwvcD4KICogPGRsPgogKgogKiA8ZHQ+CiAqIDxiPkxEQVBfTU9ESUZZX0JBVENIX0FERDwvYj48L2R0PgogKiA8ZGQ+CiAqIDxwPgogKiBFYWNoIHZhbHVlIHNwZWNpZmllZCB0aHJvdWdoIDxlbT52YWx1ZXM8L2VtPiBpcyBhZGRlZCAoYXMKICogYW4gYWRkaXRpb25hbCB2YWx1ZSkgdG8gdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiA8ZW0+YXR0cmliPC9lbT4uCiAqIDwvcD4KICogPC9kZD4KICoKICogPGR0PgogKiA8Yj5MREFQX01PRElGWV9CQVRDSF9SRU1PVkU8L2I+PC9kdD4KICogPGRkPgogKiA8cD4KICogRWFjaCB2YWx1ZSBzcGVjaWZpZWQgdGhyb3VnaCA8ZW0+dmFsdWVzPC9lbT4gaXMgcmVtb3ZlZAogKiBmcm9tIHRoZSBhdHRyaWJ1dGUgbmFtZWQgYnkgPGVtPmF0dHJpYjwvZW0+LiBBbnkgdmFsdWUgb2YKICogdGhlIGF0dHJpYnV0ZSBub3QgY29udGFpbmVkIGluIHRoZSA8ZW0+dmFsdWVzPC9lbT4gYXJyYXkKICogd2lsbCByZW1haW4gdW50b3VjaGVkLgogKiA8L3A+CiAqIDwvZGQ+CiAqCiAqIDxkdD4KICogPGI+TERBUF9NT0RJRllfQkFUQ0hfUkVNT1ZFX0FMTDwvYj48L2R0PgogKiA8ZGQ+CiAqIDxwPgogKiBBbGwgdmFsdWVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiA8ZW0+YXR0cmliPC9lbT4uIEEgPGVtPnZhbHVlczwvZW0+IGVudHJ5IG11c3QKICogbm90IGJlIHByb3ZpZGVkLgogKiA8L3A+CiAqIDwvZGQ+CiAqCiAqIDxkdD4KICogPGI+TERBUF9NT0RJRllfQkFUQ0hfUkVQTEFDRTwvYj48L2R0PgogKiA8ZGQ+CiAqIDxwPgogKiBBbGwgY3VycmVudCB2YWx1ZXMgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lZCBieQogKiA8ZW0+YXR0cmliPC9lbT4gYXJlIHJlcGxhY2VkIHdpdGggdGhlIHZhbHVlcyBzcGVjaWZpZWQKICogdGhyb3VnaCA8ZW0+dmFsdWVzPC9lbT4uCiAqIDwvcD4KICogPC9kZD4KICoKICogPC9kbD4KICogPHA+CiAqIE5vdGUgdGhhdCBhbnkgdmFsdWUgZm9yIDxlbT5hdHRyaWI8L2VtPiBtdXN0IGJlIGEgc3RyaW5nLCBhbnkKICogdmFsdWUgZm9yIDxlbT52YWx1ZXM8L2VtPiBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MsIGFuZAogKiBhbnkgdmFsdWUgZm9yIDxlbT5tb2R0eXBlPC9lbT4gbXVzdCBiZSBvbmUgb2YgdGhlCiAqIDxiPkxEQVBfTU9ESUZZX0JBVENIXyo8L2I+IGNvbnN0YW50cyBsaXN0ZWQgYWJvdmUuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5fG51bGwgJGNvbnRyb2xzIEFycmF5IG9mIExEQVAgQ29udHJvbHMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogQHNpbmNlIDUuNAogKi8KZnVuY3Rpb24gbGRhcF9tb2RpZnlfYmF0Y2goCiAgICAjW1BocFZlcnNpb25Bd2FyZShbJzguMScgPT4gJ0xEQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGxkYXAsCiAgICBzdHJpbmcgJGRuLAogICAgYXJyYXkgJG1vZGlmaWNhdGlvbnNfaW5mbywKICAgICNbQXZhaWxhYmxlKGZyb206ICc3LjMnKV0gI1tQaHBWZXJzaW9uQXdhcmUoWyI4LjAiID0+ICJudWxsfGFycmF5Il0sIGRlZmF1bHQ6ICJhcnJheSIpXSAkY29udHJvbHMgPSBudWxsCik6IGJvb2wge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJGxkYXAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQKICogQHJldHVybiBpbnQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZSBtZXNzYWdlcyBpbiBhIHNlYXJjaCByZXN1bHQuCiAqIEBzaW5jZSA4LjAKICovCmZ1bmN0aW9uIGxkYXBfY291bnRfcmVmZXJlbmNlcygKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkbGRhcCwKICAgICNbUGhwVmVyc2lvbkF3YXJlKFsnOC4xJyA9PiAnTERBUFxSZXN1bHQnXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRyZXN1bHQKKTogaW50IHt9CgovKioKICogQHNpbmNlIDguMwogKi8KZnVuY3Rpb24gbGRhcF9leG9wX3N5bmMoTERBUFxDb25uZWN0aW9uICRsZGFwLCBzdHJpbmcgJHJlcXVlc3Rfb2lkLCA/c3RyaW5nICRyZXF1ZXN0X2RhdGEgPSBudWxsLCA/YXJyYXkgJGNvbnRyb2xzID0gbnVsbCwgJiRyZXNwb25zZV9kYXRhID0gbnVsbCwgJiRyZXNwb25zZV9vaWQgPSBudWxsKTogUmVzdWx0fGJvb2wge30KCmRlZmluZSgnTERBUF9FU0NBUEVfRklMVEVSJywgMSk7CmRlZmluZSgnTERBUF9FU0NBUEVfRE4nLCAyKTsKZGVmaW5lKCdMREFQX0RFUkVGX05FVkVSJywgMCk7CmRlZmluZSgnTERBUF9ERVJFRl9TRUFSQ0hJTkcnLCAxKTsKZGVmaW5lKCdMREFQX0RFUkVGX0ZJTkRJTkcnLCAyKTsKZGVmaW5lKCdMREFQX0RFUkVGX0FMV0FZUycsIDMpOwpkZWZpbmUoJ0xEQVBfTU9ESUZZX0JBVENIX1JFTU9WRScsIDIpOwpkZWZpbmUoJ0xEQVBfTU9ESUZZX0JBVENIX0FERCcsIDEpOwpkZWZpbmUoJ0xEQVBfTU9ESUZZX0JBVENIX1JFTU9WRV9BTEwnLCAxOCk7CmRlZmluZSgnTERBUF9NT0RJRllfQkFUQ0hfUkVQTEFDRScsIDMpOwoKZGVmaW5lKCdMREFQX09QVF9YX1RMU19SRVFVSVJFX0NFUlQnLCAyNDU4Mik7CmRlZmluZSgnTERBUF9PUFRfWF9UTFNfTkVWRVInLCAwKTsKZGVmaW5lKCdMREFQX09QVF9YX1RMU19IQVJEJywgMSk7CmRlZmluZSgnTERBUF9PUFRfWF9UTFNfREVNQU5EJywgMik7CmRlZmluZSgnTERBUF9PUFRfWF9UTFNfQUxMT1cnLCAzKTsKZGVmaW5lKCdMREFQX09QVF9YX1RMU19UUlknLCA0KTsKZGVmaW5lKCdMREFQX09QVF9YX1RMU19DRVJURklMRScsIDI0NTgwKTsKZGVmaW5lKCdMREFQX09QVF9YX1RMU19DSVBIRVJfU1VJVEUnLCAyNDU4NCk7CmRlZmluZSgnTERBUF9PUFRfWF9UTFNfS0VZRklMRScsIDI0NTgxKTsKZGVmaW5lKCdMREFQX09QVF9YX1RMU19ESEZJTEUnLCAyNDU5MCk7CmRlZmluZSgnTERBUF9PUFRfWF9UTFNfQ1JMRklMRScsIDI0NTkyKTsKZGVmaW5lKCdMREFQX09QVF9YX1RMU19SQU5ET01fRklMRScsIDI0NTg1KTsKZGVmaW5lKCdMREFQX09QVF9YX1RMU19DUkxDSEVDSycsIDI0NTg3KTsKZGVmaW5lKCdMREFQX09QVF9YX1RMU19DUkxfTk9ORScsIDApOwpkZWZpbmUoJ0xEQVBfT1BUX1hfVExTX0NSTF9QRUVSJywgMSk7CmRlZmluZSgnTERBUF9PUFRfWF9UTFNfQ1JMX0FMTCcsIDIpOwpkZWZpbmUoJ0xEQVBfT1BUX1hfVExTX1BST1RPQ09MX01JTicsIDI0NTgzKTsKZGVmaW5lKCdMREFQX09QVF9YX1RMU19QUk9UT0NPTF9TU0wyJywgNTEyKTsKZGVmaW5lKCdMREFQX09QVF9YX1RMU19QUk9UT0NPTF9TU0wzJywgNzY4KTsKZGVmaW5lKCdMREFQX09QVF9YX1RMU19QUk9UT0NPTF9UTFMxXzAnLCA3NjkpOwpkZWZpbmUoJ0xEQVBfT1BUX1hfVExTX1BST1RPQ09MX1RMUzFfMScsIDc3MCk7CmRlZmluZSgnTERBUF9PUFRfWF9UTFNfUFJPVE9DT0xfVExTMV8yJywgNzcxKTsKZGVmaW5lKCdMREFQX09QVF9YX1RMU19QQUNLQUdFJywgMjQ1OTMpOwpkZWZpbmUoJ0xEQVBfT1BUX1hfS0VFUEFMSVZFX0lETEUnLCAyNTM0NCk7CmRlZmluZSgnTERBUF9PUFRfWF9LRUVQQUxJVkVfUFJPQkVTJywgMjUzNDUpOwpkZWZpbmUoJ0xEQVBfT1BUX1hfS0VFUEFMSVZFX0lOVEVSVkFMJywgMjUzNDYpOwpkZWZpbmUoJ0xEQVBfT1BUX1hfU0FTTF9VU0VSTkFNRScsIDI0ODQ0KTsKZGVmaW5lKCdMREFQX09QVF9YX1NBU0xfTk9DQU5PTicsIDI0ODQzKTsKCi8qKgogKiBTcGVjaWZpZXMgYWx0ZXJuYXRpdmUgcnVsZXMgZm9yIGZvbGxvd2luZyBhbGlhc2VzIGF0IHRoZSBzZXJ2ZXIuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGRhcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xEQVBfT1BUX0RFUkVGJywgMik7CgovKioKICogPHA+CiAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyB0aGF0IGNhbiBiZQogKiByZXR1cm5lZCBvbiBhIHNlYXJjaCBvcGVyYXRpb24uCiAqIDwvcD4KICogVGhlIGFjdHVhbCBzaXplIGxpbWl0IGZvciBvcGVyYXRpb25zIGlzIGFsc28gYm91bmRlZAogKiBieSB0aGUgc2VydmVyJ3MgY29uZmlndXJlZCBtYXhpbXVtIG51bWJlciBvZiByZXR1cm4gZW50cmllcy4KICogVGhlIGxlc3NlciBvZiB0aGVzZSB0d28gc2V0dGluZ3MgaXMgdGhlIGFjdHVhbCBzaXplIGxpbWl0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdMREFQX09QVF9TSVpFTElNSVQnLCAzKTsKCi8qKgogKiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIHNlYXJjaCByZXN1bHRzLgogKiBUaGUgYWN0dWFsIHRpbWUgbGltaXQgZm9yIG9wZXJhdGlvbnMgaXMgYWxzbyBib3VuZGVkCiAqIGJ5IHRoZSBzZXJ2ZXIncyBjb25maWd1cmVkIG1heGltdW0gdGltZS4KICogVGhlIGxlc3NlciBvZiB0aGVzZSB0d28gc2V0dGluZ3MgaXMgdGhlIGFjdHVhbCB0aW1lIGxpbWl0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdMREFQX09QVF9USU1FTElNSVQnLCA0KTsKCi8qKgogKiBPcHRpb24gZm9yIDxiPmxkYXBfc2V0X29wdGlvbjwvYj4gdG8gYWxsb3cgc2V0dGluZyBuZXR3b3JrIHRpbWVvdXQuCiAqIChBdmFpbGFibGUgYXMgb2YgUEhQIDUuMy4wKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdMREFQX09QVF9ORVRXT1JLX1RJTUVPVVQnLCAyMDQ4NSk7CgovKioKICogU3BlY2lmaWVzIHRoZSBMREFQIHByb3RvY29sIHRvIGJlIHVzZWQgKFYyIG9yIFYzKS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTERBUF9PUFRfUFJPVE9DT0xfVkVSU0lPTicsIDE3KTsKZGVmaW5lKCdMREFQX09QVF9FUlJPUl9OVU1CRVInLCA0OSk7CgovKioKICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBmb2xsb3cgcmVmZXJyYWxzIHJldHVybmVkCiAqIGJ5IHRoZSBMREFQIHNlcnZlci4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTERBUF9PUFRfUkVGRVJSQUxTJywgOCk7CmRlZmluZSgnTERBUF9PUFRfUkVTVEFSVCcsIDkpOwpkZWZpbmUoJ0xEQVBfT1BUX0hPU1RfTkFNRScsIDQ4KTsKZGVmaW5lKCdMREFQX09QVF9FUlJPUl9TVFJJTkcnLCA1MCk7CmRlZmluZSgnTERBUF9PUFRfTUFUQ0hFRF9ETicsIDUxKTsKCi8qKgogKiBTcGVjaWZpZXMgYSBkZWZhdWx0IGxpc3Qgb2Ygc2VydmVyIGNvbnRyb2xzIHRvIGJlIHNlbnQgd2l0aCBlYWNoIHJlcXVlc3QuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGRhcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xEQVBfT1BUX1NFUlZFUl9DT05UUk9MUycsIDE4KTsKCi8qKgogKiBTcGVjaWZpZXMgYSBkZWZhdWx0IGxpc3Qgb2YgY2xpZW50IGNvbnRyb2xzIHRvIGJlIHByb2Nlc3NlZCB3aXRoIGVhY2ggcmVxdWVzdC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTERBUF9PUFRfQ0xJRU5UX0NPTlRST0xTJywgMTkpOwoKLyoqCiAqIFNwZWNpZmllcyBhIGJpdHdpc2UgbGV2ZWwgZm9yIGRlYnVnIHRyYWNlcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTERBUF9PUFRfREVCVUdfTEVWRUwnLCAyMDQ4MSk7CmRlZmluZSgnTERBUF9PUFRfWF9TQVNMX01FQ0gnLCAyNDgzMik7CmRlZmluZSgnTERBUF9PUFRfWF9TQVNMX1JFQUxNJywgMjQ4MzMpOwpkZWZpbmUoJ0xEQVBfT1BUX1hfU0FTTF9BVVRIQ0lEJywgMjQ4MzQpOwpkZWZpbmUoJ0xEQVBfT1BUX1hfU0FTTF9BVVRIWklEJywgMjQ4MzUpOwoKLyoqCiAqIFNwZWNpZmllcyB0aGUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgQ0EgY2VydGlmaWNhdGVzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKiBAc2luY2UgNy4xCiAqLwpkZWZpbmUoJ0xEQVBfT1BUX1hfVExTX0NBQ0VSVERJUicsIDI0NTc5KTsKCi8qKgogKiBTcGVjaWZpZXMgdGhlIGZ1bGwtcGF0aCBvZiB0aGUgQ0EgY2VydGlmaWNhdGUgZmlsZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICogQHNpbmNlIDcuMQogKi8KZGVmaW5lKCdMREFQX09QVF9YX1RMU19DQUNFUlRGSUxFJywgMjQ1NzgpOwoKZGVmaW5lKCdMREFQX01PRElGWV9CQVRDSF9BVFRSSUInLCAnYXR0cmliJyk7CmRlZmluZSgnTERBUF9NT0RJRllfQkFUQ0hfTU9EVFlQRScsICdtb2R0eXBlJyk7CmRlZmluZSgnTERBUF9NT0RJRllfQkFUQ0hfVkFMVUVTJywgJ3ZhbHVlcycpOwpkZWZpbmUoJ0xEQVBfT1BUX1RJTUVPVVQnLCAyMDQ4Mik7CmRlZmluZSgnTERBUF9PUFRfRElBR05PU1RJQ19NRVNTQUdFJywgNTApOwoKLyoqCiAqIENvbnRyb2wgQ29uc3RhbnQgLSBNYW5hZ2UgRFNBIElUICjCuyBSRkMgMzI5NikKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCJMREFQX0NPTlRST0xfTUFOQUdFRFNBSVQiLCAiMi4xNi44NDAuMS4xMTM3MzAuMy40LjIiKTsKCi8qKgogKiBDb250cm9sIENvbnN0YW50IC0gUHJveGllZCBBdXRob3JpemF0aW9uICjCuyBSRkMgNDM3MCkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCJMREFQX0NPTlRST0xfUFJPWFlfQVVUSFoiLCAiMi4xNi44NDAuMS4xMTM3MzAuMy40LjE4Iik7CgovKioKICogQ29udHJvbCBDb25zdGFudCAtIFN1YmVudHJpZXMgKMK7IFJGQyAzNjcyKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKiBAc2luY2UgNy4yCiAqLwpkZWZpbmUoIkxEQVBfQ09OVFJPTF9TVUJFTlRSSUVTIiwgIjEuMy42LjEuNC4xLjQyMDMuMS4xMC4xIik7CgovKioKICogQ29udHJvbCBDb25zdGFudCAtIEZpbHRlciByZXR1cm5lZCB2YWx1ZXMgKMK7IFJGQyAzODc2KQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKiBAc2luY2UgNy4yCiAqLwpkZWZpbmUoIkxEQVBfQ09OVFJPTF9WQUxVRVNSRVRVUk5GSUxURVIiLCAiMS4yLjgyNi4wLjEuMzM0NDgxMC4yLjMiKTsKCi8qKgogKiBDb250cm9sIENvbnN0YW50IC0gQXNzZXJ0aW9uICjCuyBSRkMgNDUyOCkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCJMREFQX0NPTlRST0xfQVNTRVJUIiwgIjEuMy42LjEuMS4xMiIpOwoKLyoqCiAqIENvbnRyb2wgQ29uc3RhbnQgLSBQcmUgcmVhZCAowrsgUkZDIDQ1MjcpCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGRhcC5jb25zdGFudHMucGhwCiAqIEBzaW5jZSA3LjIKICovCmRlZmluZSgiTERBUF9DT05UUk9MX1BSRV9SRUFEIiwgIjEuMy42LjEuMS4xMy4xIik7CgovKioKICogQ29udHJvbCBDb25zdGFudCAtIFBvc3QgcmVhZCAowrsgUkZDIDQ1MjcpCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGRhcC5jb25zdGFudHMucGhwCiAqIEBzaW5jZSA3LjIKICovCmRlZmluZSgiTERBUF9DT05UUk9MX1BPU1RfUkVBRCIsICIxLjMuNi4xLjEuMTMuMiIpOwoKLyoqCiAqIENvbnRyb2wgQ29uc3RhbnQgLSBTb3J0IHJlcXVlc3QgKMK7IFJGQyAyODkxKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKiBAc2luY2UgNy4yCiAqLwpkZWZpbmUoIkxEQVBfQ09OVFJPTF9TT1JUUkVRVUVTVCIsICIxLjIuODQwLjExMzU1Ni4xLjQuNDczIik7CgovKioKICogQ29udHJvbCBDb25zdGFudCAtIFNvcnQgcmVzcG9uc2UgKMK7IFJGQyAyODkxKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKiBAc2luY2UgNy4yCiAqLwpkZWZpbmUoIkxEQVBfQ09OVFJPTF9TT1JUUkVTUE9OU0UiLCAiMS4yLjg0MC4xMTM1NTYuMS40LjQ3NCIpOwoKLyoqCiAqIENvbnRyb2wgQ29uc3RhbnQgLSBQYWdlZCByZXN1bHRzICjCuyBSRkMgMjY5NikKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCJMREFQX0NPTlRST0xfUEFHRURSRVNVTFRTIiwgIjEuMi44NDAuMTEzNTU2LjEuNC4zMTkiKTsKCi8qKgogKiBDb250cm9sIENvbnN0YW50IC0gQ29udGVudCBTeW5jaHJvbml6YXRpb24gT3BlcmF0aW9uICjCuyBSRkMgNDUzMykKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCJMREFQX0NPTlRST0xfU1lOQyIsICIxLjMuNi4xLjQuMS40MjAzLjEuOS4xLjEiKTsKCi8qKgogKiBDb250cm9sIENvbnN0YW50IC0gQ29udGVudCBTeW5jaHJvbml6YXRpb24gT3BlcmF0aW9uIFN0YXRlICjCuyBSRkMgNDUzMykKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCJMREFQX0NPTlRST0xfU1lOQ19TVEFURSIsICIxLjMuNi4xLjQuMS40MjAzLjEuOS4xLjIiKTsKCi8qKgogKiBDb250cm9sIENvbnN0YW50IC0gQ29udGVudCBTeW5jaHJvbml6YXRpb24gT3BlcmF0aW9uIERvbmUgKMK7IFJGQyA0NTMzKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKiBAc2luY2UgNy4yCiAqLwpkZWZpbmUoIkxEQVBfQ09OVFJPTF9TWU5DX0RPTkUiLCAiMS4zLjYuMS40LjEuNDIwMy4xLjkuMS4zIik7CgovKioKICogQ29udHJvbCBDb25zdGFudCAtIERvbid0IFVzZSBDb3B5ICjCuyBSRkMgNjE3MSkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCJMREFQX0NPTlRST0xfRE9OVFVTRUNPUFkiLCAiMS4zLjYuMS4xLjIyIik7CgovKioKICogQ29udHJvbCBDb25zdGFudCAtIFBhc3N3b3JkIFBvbGljeSBSZXF1ZXN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGRhcC5jb25zdGFudHMucGhwCiAqIEBzaW5jZSA3LjIKICovCmRlZmluZSgiTERBUF9DT05UUk9MX1BBU1NXT1JEUE9MSUNZUkVRVUVTVCIsICIxLjMuNi4xLjQuMS40Mi4yLjI3LjguNS4xIik7CgovKioKICogQ29udHJvbCBDb25zdGFudCAtIFBhc3N3b3JkIFBvbGljeSBSZXNwb25zZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKiBAc2luY2UgNy4yCiAqLwpkZWZpbmUoIkxEQVBfQ09OVFJPTF9QQVNTV09SRFBPTElDWVJFU1BPTlNFIiwgIjEuMy42LjEuNC4xLjQyLjIuMjcuOC41LjEiKTsKCi8qKgogKiBDb250cm9sIENvbnN0YW50IC0gQWN0aXZlIERpcmVjdG9yeSBJbmNyZW1lbnRhbCBWYWx1ZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCJMREFQX0NPTlRST0xfWF9JTkNSRU1FTlRBTF9WQUxVRVMiLCAiMS4yLjg0MC4xMTM1NTYuMS40LjgwMiIpOwoKLyoqCiAqIENvbnRyb2wgQ29uc3RhbnQgLSBBY3RpdmUgRGlyZWN0b3J5IERvbWFpbiBTY29wZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKiBAc2luY2UgNy4yCiAqLwpkZWZpbmUoIkxEQVBfQ09OVFJPTF9YX0RPTUFJTl9TQ09QRSIsICIxLjIuODQwLjExMzU1Ni4xLjQuMTMzOSIpOwoKLyoqCiAqIENvbnRyb2wgQ29uc3RhbnQgLSBBY3RpdmUgRGlyZWN0b3J5IFBlcm1pc3NpdmUgTW9kaWZ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGRhcC5jb25zdGFudHMucGhwCiAqIEBzaW5jZSA3LjIKICovCmRlZmluZSgiTERBUF9DT05UUk9MX1hfUEVSTUlTU0lWRV9NT0RJRlkiLCAiMS4yLjg0MC4xMTM1NTYuMS40LjE0MTMiKTsKCi8qKgogKiBDb250cm9sIENvbnN0YW50IC0gQWN0aXZlIERpcmVjdG9yeSBTZWFyY2ggT3B0aW9ucwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKiBAc2luY2UgNy4yCiAqLwpkZWZpbmUoIkxEQVBfQ09OVFJPTF9YX1NFQVJDSF9PUFRJT05TIiwgIjEuMi44NDAuMTEzNTU2LjEuNC4xMzQwIik7CgovKioKICogQ29udHJvbCBDb25zdGFudCAtIEFjdGl2ZSBEaXJlY3RvcnkgVHJlZSBEZWxldGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCJMREFQX0NPTlRST0xfWF9UUkVFX0RFTEVURSIsICIxLjIuODQwLjExMzU1Ni4xLjQuODA1Iik7CgovKioKICogQ29udHJvbCBDb25zdGFudCAtIEFjdGl2ZSBEaXJlY3RvcnkgRXh0ZW5kZWQgRE4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCJMREFQX0NPTlRST0xfWF9FWFRFTkRFRF9ETiIsICIxLjIuODQwLjExMzU1Ni4xLjQuNTI5Iik7CgovKioKICogQ29udHJvbCBDb25zdGFudCAtIFZpcnR1YWwgTGlzdCBWaWV3IFJlcXVlc3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sZGFwLmNvbnN0YW50cy5waHAKICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCJMREFQX0NPTlRST0xfVkxWUkVRVUVTVCIsICIyLjE2Ljg0MC4xLjExMzczMC4zLjQuOSIpOwoKLyoqCiAqIENvbnRyb2wgQ29uc3RhbnQgLSBWaXJ0dWFsIExpc3QgVmlldyBSZXNwb25zZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xkYXAuY29uc3RhbnRzLnBocAogKiBAc2luY2UgNy4yCiAqLwpkZWZpbmUoIkxEQVBfQ09OVFJPTF9WTFZSRVNQT05TRSIsICIyLjE2Ljg0MC4xLjExMzczMC4zLjQuMTAiKTsKCi8qKgogKiBFeHRlbmRlZCBPcGVyYXRpb24gY29uc3RhbnQgLSBNb2RpZnkgcGFzc3dvcmQKICovCmRlZmluZSgiTERBUF9FWE9QX01PRElGWV9QQVNTV0QiLCAiMS4zLjYuMS40LjEuNDIwMy4xLjExLjEiKTsKCi8qKgogKiBFeHRlbmRlZCBPcGVyYXRpb24gQ29uc3RhbnQgLSBSZWZyZXNoCiAqLwpkZWZpbmUoIkxEQVBfRVhPUF9SRUZSRVNIIiwgIjEuMy42LjEuNC4xLjE0NjYuMTAxLjExOS4xIik7CgovKioKICogRXh0ZW5kZWQgT3BlcmF0aW9uIGNvbnN0YW50IC0gU3RhcnQgVExTCiAqLwpkZWZpbmUoIkxEQVBfRVhPUF9TVEFSVF9UTFMiLCAiMS4zLjYuMS40LjEuMTQ2Ni4yMDAzNyIpOwoKLyoqCiAqIEV4dGVuZGVkIE9wZXJhdGlvbiBDb25zdGFudCAtIFR1cm4KICovCmRlZmluZSgiTERBUF9FWE9QX1RVUk4iLCAiMS4zLjYuMS4xLjE5Iik7CgovKioKICogRXh0ZW5kZWQgT3BlcmF0aW9uIENvbnN0YW50IC0gV0hPQU1JCiAqLwpkZWZpbmUoIkxEQVBfRVhPUF9XSE9fQU1fSSIsICIxLjMuNi4xLjQuMS40MjAzLjEuMTEuMyIpOwoKLyoqCiAqIEBzaW5jZSA3LjMKICovCmRlZmluZSgnTERBUF9DT05UUk9MX0FVVEhaSURfUkVRVUVTVCcsICcyLjE2Ljg0MC4xLjExMzczMC4zLjQuMTYnKTsKCi8qKgogKiBAc2luY2UgNy4zCiAqLwpkZWZpbmUoJ0xEQVBfQ09OVFJPTF9BVVRIWklEX1JFU1BPTlNFJywgJzIuMTYuODQwLjEuMTEzNzMwLjMuNC4xNScpOwoKLyoqCiAqIEBzaW5jZSA4LjQKICovCmRlZmluZSgnTERBUF9PUFRfWF9UTFNfUFJPVE9DT0xfVExTMV8zJywgNzcyKTsKCi8qKgogKiBAc2luY2UgOC40CiAqLwpkZWZpbmUoJ0xEQVBfT1BUX1hfVExTX1BST1RPQ09MX01BWCcsIDI0NjAzKTsKLy8gRW5kIG9mIGxkYXAgdi4KPD9waHAKCm5hbWVzcGFjZSBMREFQOwoKLyoqCiAqIEBzaW5jZSA4LjEKICovCmZpbmFsIGNsYXNzIFJlc3VsdCB7fQo8P3BocAoKbmFtZXNwYWNlIExEQVA7CgovKioKICogQHNpbmNlIDguMQogKi8KZmluYWwgY2xhc3MgUmVzdWx0RW50cnkge30KPD9waHAKCm5hbWVzcGFjZSBMREFQOwoKLyoqCiAqIEBzaW5jZSA4LjEKICovCmZpbmFsIGNsYXNzIENvbm5lY3Rpb24ge30KPD9waHAKCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cRXhwZWN0ZWRWYWx1ZXM7CgovKioKICogUmVhZCBhIHNpemUgb2YgZmlsZSBjcmVhdGVkIGJ5IGFwcGx5aW5nIGEgYmluYXJ5IGRpZmYKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueGRpZmYtZmlsZS1iZGlmZi1zaXplLnBocAogKiBAcGFyYW0gc3RyaW5nICRmaWxlIFRoZSBwYXRoIHRvIHRoZSBiaW5hcnkgcGF0Y2ggY3JlYXRlZCBieSB4ZGlmZl9zdHJpbmdfYmRpZmYoKSBvciB4ZGlmZl9zdHJpbmdfcmFiZGlmZigpIGZ1bmN0aW9uCiAqIEByZXR1cm4gaW50IHRoZSBzaXplIG9mIGZpbGUgdGhhdCB3b3VsZCBiZSBjcmVhdGVkLgogKi8KZnVuY3Rpb24geGRpZmZfZmlsZV9iZGlmZl9zaXplKHN0cmluZyAkZmlsZSk6IGludCB7fQoKLyoqCiAqIE1ha2UgYmluYXJ5IGRpZmYgb2YgdHdvIGZpbGVzCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhkaWZmLWZpbGUtYmRpZmYucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG9sZF9maWxlIFBhdGggdG8gdGhlIGZpcnN0IGZpbGUuIFRoaXMgZmlsZSBhY3RzIGFzICJvbGQiIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJG5ld19maWxlIFBhdGggdG8gdGhlIHNlY29uZCBmaWxlLiBUaGlzIGZpbGUgYWN0cyBhcyAibmV3IiBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRkZXN0IFBhdGggb2YgdGhlIHJlc3VsdGluZyBwYXRjaCBmaWxlLiBSZXN1bHRpbmcgZmlsZSBjb250YWlucyBkaWZmZXJlbmNlcyBiZXR3ZWVuCiAqICJvbGQiIGFuZCAibmV3IiBmaWxlcy4gSXQgaXMgaW4gYmluYXJ5IGZvcm1hdCBhbmQgaXMgaHVtYW4tdW5yZWFkYWJsZS4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geGRpZmZfZmlsZV9iZGlmZihzdHJpbmcgJG9sZF9maWxlLCBzdHJpbmcgJG5ld19maWxlLCBzdHJpbmcgJGRlc3QpOiBib29sIHt9CgovKioKICogUGF0Y2ggYSBmaWxlIHdpdGggYSBiaW5hcnkgZGlmZgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54ZGlmZi1maWxlLWJwYXRjaC5waHAKICogQHBhcmFtIHN0cmluZyAkZmlsZSBUaGUgb3JpZ2luYWwgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkcGF0Y2ggVGhlIGJpbmFyeSBwYXRjaCBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRkZXN0IFBhdGggb2YgdGhlIHJlc3VsdGluZyBmaWxlLgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4ZGlmZl9maWxlX2JwYXRjaChzdHJpbmcgJGZpbGUsIHN0cmluZyAkcGF0Y2gsIHN0cmluZyAkZGVzdCk6IGJvb2wge30KCi8qKgogKiBBbGlhcyBvZiB4ZGlmZl9maWxlX2JkaWZmCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhkaWZmLWZpbGUtZGlmZi1iaW5hcnkucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG9sZF9maWxlIFBhdGggdG8gdGhlIGZpcnN0IGZpbGUuIFRoaXMgZmlsZSBhY3RzIGFzICJvbGQiIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJG5ld19maWxlIFBhdGggdG8gdGhlIHNlY29uZCBmaWxlLiBUaGlzIGZpbGUgYWN0cyBhcyAibmV3IiBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRkZXN0IFBhdGggb2YgdGhlIHJlc3VsdGluZyBwYXRjaCBmaWxlLiBSZXN1bHRpbmcgZmlsZSBjb250YWlucyBkaWZmZXJlbmNlcyBiZXR3ZWVuCiAqICJvbGQiIGFuZCAibmV3IiBmaWxlcy4gSXQgaXMgaW4gYmluYXJ5IGZvcm1hdCBhbmQgaXMgaHVtYW4tdW5yZWFkYWJsZS4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geGRpZmZfZmlsZV9kaWZmX2JpbmFyeShzdHJpbmcgJG9sZF9maWxlLCBzdHJpbmcgJG5ld19maWxlLCBzdHJpbmcgJGRlc3QpOiBib29sIHt9CgovKioKICogTWFrZSB1bmlmaWVkIGRpZmYgb2YgdHdvIGZpbGVzCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhkaWZmLWZpbGUtZGlmZi5waHAKICogQHBhcmFtIHN0cmluZyAkb2xkX2ZpbGUgUGF0aCB0byB0aGUgZmlyc3QgZmlsZS4gVGhpcyBmaWxlIGFjdHMgYXMgIm9sZCIgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkbmV3X2ZpbGUgUGF0aCB0byB0aGUgc2Vjb25kIGZpbGUuIFRoaXMgZmlsZSBhY3RzIGFzICJuZXciIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3QgUGF0aCBvZiB0aGUgcmVzdWx0aW5nIHBhdGNoIGZpbGUuCiAqIEBwYXJhbSBpbnQgJGNvbnRleHQgSW5kaWNhdGVzIGhvdyBtYW55IGxpbmVzIG9mIGNvbnRleHQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiBkaWZmIHJlc3VsdC4KICogQHBhcmFtIGJvb2wgJG1pbmltYWwgU2V0IHRoaXMgcGFyYW1ldGVyIHRvIHRydWUgaWYgeW91IHdhbnQgdG8gbWluaW1hbGl6ZSBzaXplIG9mIHRoZSByZXN1bHQgKGNhbiB0YWtlIGEgbG9uZyB0aW1lKS4KICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geGRpZmZfZmlsZV9kaWZmKAogICAgc3RyaW5nICRvbGRfZmlsZSwKICAgIHN0cmluZyAkbmV3X2ZpbGUsCiAgICBzdHJpbmcgJGRlc3QsCiAgICBpbnQgJGNvbnRleHQgPSAzLAogICAgYm9vbCAkbWluaW1hbCA9IGZhbHNlCik6IGJvb2wge30KCi8qKgogKiBNZXJnZSAzIGZpbGVzIGludG8gb25lCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhkaWZmLWZpbGUtbWVyZ2UzLnBocAogKiBAcGFyYW0gc3RyaW5nICRvbGRfZmlsZSBQYXRoIHRvIHRoZSBmaXJzdCBmaWxlLiBJdCBhY3RzIGFzICJvbGQiIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJG5ld19maWxlMSBQYXRoIHRvIHRoZSBzZWNvbmQgZmlsZS4gSXQgYWN0cyBhcyBtb2RpZmllZCB2ZXJzaW9uIG9mIG9sZF9maWxlLgogKiBAcGFyYW0gc3RyaW5nICRuZXdfZmlsZTIgUGF0aCB0byB0aGUgdGhpcmQgZmlsZS4gSXQgYWN0cyBhcyBtb2RpZmllZCB2ZXJzaW9uIG9mIG9sZF9maWxlLgogKiBAcGFyYW0gc3RyaW5nICRkZXN0IFBhdGggb2YgdGhlIHJlc3VsdGluZyBmaWxlLCBjb250YWluaW5nIG1lcmdlZCBjaGFuZ2VkIGZyb20gYm90aCBuZXdfZmlsZTEgYW5kIG5ld19maWxlMi4KICogQHJldHVybiBib29sfHN0cmluZyB0cnVlIGlmIG1lcmdlIHdhcyBzdWNjZXNzZnVsLCBzdHJpbmcgd2l0aCByZWplY3RlZCBjaHVua3MgaWYgaXQgd2FzIG5vdCBvciBmYWxzZSBpZiBhbiBpbnRlcm5hbAogKiBlcnJvciBoYXBwZW5lZC4KICovCmZ1bmN0aW9uIHhkaWZmX2ZpbGVfbWVyZ2UzKHN0cmluZyAkb2xkX2ZpbGUsIHN0cmluZyAkbmV3X2ZpbGUxLCBzdHJpbmcgJG5ld19maWxlMiwgc3RyaW5nICRkZXN0KSB7fQoKLyoqCiAqIEFsaWFzIG9mIHhkaWZmX2ZpbGVfYnBhdGNoCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhkaWZmLWZpbGUtcGF0Y2gtYmluYXJ5LnBocAogKiBAcGFyYW0gc3RyaW5nICRmaWxlIFRoZSBvcmlnaW5hbCBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRwYXRjaCBUaGUgYmluYXJ5IHBhdGNoIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3QgUGF0aCBvZiB0aGUgcmVzdWx0aW5nIGZpbGUuCiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHhkaWZmX2ZpbGVfcGF0Y2hfYmluYXJ5KHN0cmluZyAkZmlsZSwgc3RyaW5nICRwYXRjaCwgc3RyaW5nICRkZXN0KTogYm9vbCB7fQoKLyoqCiAqIFBhdGNoIGEgZmlsZSB3aXRoIGFuIHVuaWZpZWQgZGlmZgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54ZGlmZi1maWxlLXBhdGNoLnBocAogKiBAcGFyYW0gc3RyaW5nICRmaWxlIFRoZSBvcmlnaW5hbCBmaWxlLgogKiBAcGFyYW0gc3RyaW5nICRwYXRjaCBUaGUgdW5pZmllZCBwYXRjaCBmaWxlLiBJdCBoYXMgdG8gYmUgY3JlYXRlZCB1c2luZyB4ZGlmZl9zdHJpbmdfZGlmZigpLCB4ZGlmZl9maWxlX2RpZmYoKQogKiBmdW5jdGlvbnMgb3IgY29tcGF0aWJsZSB0b29scy4KICogQHBhcmFtIHN0cmluZyAkZGVzdCBQYXRoIG9mIHRoZSByZXN1bHRpbmcgZmlsZS4KICogQHBhcmFtIGludCAkZmxhZ3MgQ2FuIGJlIGVpdGhlciBYRElGRl9QQVRDSF9OT1JNQUwgKGRlZmF1bHQgbW9kZSwgbm9ybWFsIHBhdGNoKSBvciBYRElGRl9QQVRDSF9SRVZFUlNFCiAqIChyZXZlcnNlZCBwYXRjaCkuIFN0YXJ0aW5nIGZyb20gdmVyc2lvbiAxLjUuMCwgeW91IGNhbiBhbHNvIHVzZSBiaW5hcnkgT1IgdG8gZW5hYmxlIFhESUZGX1BBVENIX0lHTk9SRVNQQUNFIGZsYWcuCiAqIEByZXR1cm4gYm9vbHxzdHJpbmcgZmFsc2UgaWYgYW4gaW50ZXJuYWwgZXJyb3IgaGFwcGVuZWQsIHN0cmluZyB3aXRoIHJlamVjdGVkIGNodW5rcyBpZiBwYXRjaCBjb3VsZG4ndCBiZSBhcHBsaWVkCiAqIG9yIHRydWUgaWYgcGF0Y2ggaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGFwcGxpZWQuCiAqLwpmdW5jdGlvbiB4ZGlmZl9maWxlX3BhdGNoKHN0cmluZyAkZmlsZSwgc3RyaW5nICRwYXRjaCwgc3RyaW5nICRkZXN0LCAjW0V4cGVjdGVkVmFsdWVzKFtYRElGRl9QQVRDSF9OT1JNQUx8WERJRkZfUEFUQ0hfUkVWRVJTRXxYRElGRl9QQVRDSF9JR05PUkVTUEFDRV0pXSBpbnQgJGZsYWdzID0gWERJRkZfUEFUQ0hfTk9STUFMKSB7fQoKLyoqCiAqIE1ha2UgYmluYXJ5IGRpZmYgb2YgdHdvIGZpbGVzIHVzaW5nIHRoZSBSYWJpbidzIHBvbHlub21pYWwgZmluZ2VycHJpbnRpbmcgYWxnb3JpdGhtCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhkaWZmLWZpbGUtcmFiZGlmZi5waHAKICogQHBhcmFtIHN0cmluZyAkb2xkX2ZpbGUgUGF0aCB0byB0aGUgZmlyc3QgZmlsZS4gVGhpcyBmaWxlIGFjdHMgYXMgIm9sZCIgZmlsZS4KICogQHBhcmFtIHN0cmluZyAkbmV3X2ZpbGUgUGF0aCB0byB0aGUgc2Vjb25kIGZpbGUuIFRoaXMgZmlsZSBhY3RzIGFzICJuZXciIGZpbGUuCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3QgUGF0aCBvZiB0aGUgcmVzdWx0aW5nIHBhdGNoIGZpbGUuIFJlc3VsdGluZyBmaWxlIGNvbnRhaW5zIGRpZmZlcmVuY2VzIGJldHdlZW4gIm9sZCIKICogYW5kICJuZXciIGZpbGVzLiBJdCBpcyBpbiBiaW5hcnkgZm9ybWF0IGFuZCBpcyBodW1hbi11bnJlYWRhYmxlLgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4ZGlmZl9maWxlX3JhYmRpZmYoc3RyaW5nICRvbGRfZmlsZSwgc3RyaW5nICRuZXdfZmlsZSwgc3RyaW5nICRkZXN0KTogYm9vbCB7fQoKLyoqCiAqIFJlYWQgYSBzaXplIG9mIGZpbGUgY3JlYXRlZCBieSBhcHBseWluZyBhIGJpbmFyeSBkaWZmCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhkaWZmLXN0cmluZy1iZGlmZi1zaXplLnBocAogKiBAcGFyYW0gc3RyaW5nICRwYXRjaCBUaGUgYmluYXJ5IHBhdGNoIGNyZWF0ZWQgYnkgeGRpZmZfc3RyaW5nX2JkaWZmKCkgb3IgeGRpZmZfc3RyaW5nX3JhYmRpZmYoKSBmdW5jdGlvbi4KICogQHJldHVybiBpbnQgdGhlIHNpemUgb2YgZmlsZSB0aGF0IHdvdWxkIGJlIGNyZWF0ZWQuCiAqLwpmdW5jdGlvbiB4ZGlmZl9zdHJpbmdfYmRpZmZfc2l6ZShzdHJpbmcgJHBhdGNoKTogaW50IHt9CgovKioKICogTWFrZSBiaW5hcnkgZGlmZiBvZiB0d28gc3RyaW5ncwogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54ZGlmZi1zdHJpbmctYmRpZmYucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG9sZF9kYXRhIEZpcnN0IHN0cmluZyB3aXRoIGJpbmFyeSBkYXRhLiBJdCBhY3RzIGFzICJvbGQiIGRhdGEuCiAqIEBwYXJhbSBzdHJpbmcgJG5ld19kYXRhIFNlY29uZCBzdHJpbmcgd2l0aCBiaW5hcnkgZGF0YS4gSXQgYWN0cyBhcyAibmV3IiBkYXRhLgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBzdHJpbmcgd2l0aCBiaW5hcnkgZGlmZiBjb250YWluaW5nIGRpZmZlcmVuY2VzIGJldHdlZW4gIm9sZCIgYW5kICJuZXciIGRhdGEgb3IgZmFsc2UKICogaWYgYW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQuCiAqLwpmdW5jdGlvbiB4ZGlmZl9zdHJpbmdfYmRpZmYoc3RyaW5nICRvbGRfZGF0YSwgc3RyaW5nICRuZXdfZGF0YSkge30KCi8qKgogKiBQYXRjaCBhIHN0cmluZyB3aXRoIGEgYmluYXJ5IGRpZmYKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueGRpZmYtc3RyaW5nLWJwYXRjaC5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyIFRoZSBvcmlnaW5hbCBiaW5hcnkgc3RyaW5nLgogKiBAcGFyYW0gc3RyaW5nICRwYXRjaCBUaGUgYmluYXJ5IHBhdGNoIHN0cmluZy4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIHBhdGNoZWQgc3RyaW5nLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIHhkaWZmX3N0cmluZ19icGF0Y2goc3RyaW5nICRzdHIsIHN0cmluZyAkcGF0Y2gpIHt9CgovKioKICogQWxpYXMgb2YgeGRpZmZfc3RyaW5nX2JkaWZmCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhkaWZmLXN0cmluZy1kaWZmLWJpbmFyeS5waHAKICogQHBhcmFtIHN0cmluZyAkb2xkX2RhdGEgRmlyc3Qgc3RyaW5nIHdpdGggYmluYXJ5IGRhdGEuIEl0IGFjdHMgYXMgIm9sZCIgZGF0YS4KICogQHBhcmFtIHN0cmluZyAkbmV3X2RhdGEgU2Vjb25kIHN0cmluZyB3aXRoIGJpbmFyeSBkYXRhLiBJdCBhY3RzIGFzICJuZXciIGRhdGEuCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHN0cmluZyB3aXRoIHJlc3VsdCBvciBmYWxzZSBpZiBhbiBpbnRlcm5hbCBlcnJvciBoYXBwZW5lZC4KICovCmZ1bmN0aW9uIHhkaWZmX3N0cmluZ19kaWZmX2JpbmFyeShzdHJpbmcgJG9sZF9kYXRhLCBzdHJpbmcgJG5ld19kYXRhKSB7fQoKLyoqCiAqIE1ha2UgdW5pZmllZCBkaWZmIG9mIHR3byBzdHJpbmdzCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhkaWZmLXN0cmluZy1kaWZmLnBocAogKiBAcGFyYW0gc3RyaW5nICRvbGRfZGF0YSBGaXJzdCBzdHJpbmcgd2l0aCBkYXRhLiBJdCBhY3RzIGFzICJvbGQiIGRhdGEuCiAqIEBwYXJhbSBzdHJpbmcgJG5ld19kYXRhIFNlY29uZCBzdHJpbmcgd2l0aCBkYXRhLiBJdCBhY3RzIGFzICJuZXciIGRhdGEuCiAqIEBwYXJhbSBpbnQgJGNvbnRleHQgSW5kaWNhdGVzIGhvdyBtYW55IGxpbmVzIG9mIGNvbnRleHQgeW91IHdhbnQgdG8gaW5jbHVkZSBpbiB0aGUgZGlmZiByZXN1bHQuCiAqIEBwYXJhbSBib29sICRtaW5pbWFsIFNldCB0aGlzIHBhcmFtZXRlciB0byB0cnVlIGlmIHlvdSB3YW50IHRvIG1pbmltYWxpemUgdGhlIHNpemUgb2YgdGhlIHJlc3VsdAogKiAoY2FuIHRha2UgYSBsb25nIHRpbWUpLgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBzdHJpbmcgd2l0aCByZXN1bHRpbmcgZGlmZiBvciBmYWxzZSBpZiBhbiBpbnRlcm5hbCBlcnJvciBoYXBwZW5lZC4KICovCmZ1bmN0aW9uIHhkaWZmX3N0cmluZ19kaWZmKHN0cmluZyAkb2xkX2RhdGEsIHN0cmluZyAkbmV3X2RhdGEsIGludCAkY29udGV4dCA9IDMsIGJvb2wgJG1pbmltYWwgPSBmYWxzZSkge30KCi8qKgogKiBNZXJnZSAzIHN0cmluZ3MgaW50byBvbmUKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueGRpZmYtc3RyaW5nLW1lcmdlMy5waHAKICogQHBhcmFtIHN0cmluZyAkb2xkX2RhdGEgRmlyc3Qgc3RyaW5nIHdpdGggZGF0YS4gSXQgYWN0cyBhcyAib2xkIiBkYXRhLgogKiBAcGFyYW0gc3RyaW5nICRuZXdfZGF0YTEgU2Vjb25kIHN0cmluZyB3aXRoIGRhdGEuIEl0IGFjdHMgYXMgbW9kaWZpZWQgdmVyc2lvbiBvZiBvbGRfZGF0YS4KICogQHBhcmFtIHN0cmluZyAkbmV3X2RhdGEyIFRoaXJkIHN0cmluZyB3aXRoIGRhdGEuIEl0IGFjdHMgYXMgbW9kaWZpZWQgdmVyc2lvbiBvZiBvbGRfZGF0YS4KICogQHBhcmFtID9zdHJpbmcgJGVycm9yIElmIHByb3ZpZGVkIHRoZW4gcmVqZWN0ZWQgcGFydHMgYXJlIHN0b3JlZCBpbnNpZGUgdGhpcyB2YXJpYWJsZS4KICogQHJldHVybiBib29sfHN0cmluZyB0aGUgbWVyZ2VkIHN0cmluZywgZmFsc2UgaWYgYW4gaW50ZXJuYWwgZXJyb3IgaGFwcGVuZWQsIG9yIHRydWUgaWYgbWVyZ2VkIHN0cmluZyBpcyBlbXB0eS4KICovCmZ1bmN0aW9uIHhkaWZmX3N0cmluZ19tZXJnZTMoc3RyaW5nICRvbGRfZGF0YSwgc3RyaW5nICRuZXdfZGF0YTEsIHN0cmluZyAkbmV3X2RhdGEyLCA/c3RyaW5nICYkZXJyb3IpIHt9CgovKioKICogQWxpYXMgb2YgeGRpZmZfc3RyaW5nX2JwYXRjaAogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54ZGlmZi1zdHJpbmctcGF0Y2gtYmluYXJ5LnBocAogKiBAcGFyYW0gc3RyaW5nICRzdHIgVGhlIG9yaWdpbmFsIGJpbmFyeSBzdHJpbmcuCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGNoIFRoZSBiaW5hcnkgcGF0Y2ggc3RyaW5nLgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgcGF0Y2hlZCBzdHJpbmcsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24geGRpZmZfc3RyaW5nX3BhdGNoX2JpbmFyeShzdHJpbmcgJHN0ciwgc3RyaW5nICRwYXRjaCkge30KCi8qKgogKiBQYXRjaCBhIHN0cmluZyB3aXRoIGFuIHVuaWZpZWQgZGlmZgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54ZGlmZi1zdHJpbmctcGF0Y2gucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHN0ciBUaGUgb3JpZ2luYWwgc3RyaW5nLgogKiBAcGFyYW0gc3RyaW5nICRwYXRjaCBUaGUgdW5pZmllZCBwYXRjaCBzdHJpbmcuIEl0IGhhcyB0byBiZSBjcmVhdGVkIHVzaW5nIHhkaWZmX3N0cmluZ19kaWZmKCksIHhkaWZmX2ZpbGVfZGlmZigpCiAqIGZ1bmN0aW9ucyBvciBjb21wYXRpYmxlIHRvb2xzLgogKiBAcGFyYW0gP2ludCAkZmxhZ3MgZmxhZ3MgY2FuIGJlIGVpdGhlciBYRElGRl9QQVRDSF9OT1JNQUwgKGRlZmF1bHQgbW9kZSwgbm9ybWFsIHBhdGNoKSBvciBYRElGRl9QQVRDSF9SRVZFUlNFCiAqIChyZXZlcnNlZCBwYXRjaCkuIFN0YXJ0aW5nIGZyb20gdmVyc2lvbiAxLjUuMCwgeW91IGNhbiBhbHNvIHVzZSBiaW5hcnkgT1IgdG8gZW5hYmxlIFhESUZGX1BBVENIX0lHTk9SRVNQQUNFIGZsYWcuCiAqIEBwYXJhbSA/c3RyaW5nICRlcnJvciBJZiBwcm92aWRlZCB0aGVuIHJlamVjdGVkIHBhcnRzIGFyZSBzdG9yZWQgaW5zaWRlIHRoaXMgdmFyaWFibGUuCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBwYXRjaGVkIHN0cmluZywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiB4ZGlmZl9zdHJpbmdfcGF0Y2goc3RyaW5nICRzdHIsIHN0cmluZyAkcGF0Y2gsICNbRXhwZWN0ZWRWYWx1ZXMoW1hESUZGX1BBVENIX05PUk1BTHxYRElGRl9QQVRDSF9SRVZFUlNFfFhESUZGX1BBVENIX0lHTk9SRVNQQUNFXSldID9pbnQgJGZsYWdzLCA/c3RyaW5nICYkZXJyb3IpIHt9CgovKioKICogTWFrZSBiaW5hcnkgZGlmZiBvZiB0d28gc3RyaW5ncyB1c2luZyB0aGUgUmFiaW4ncyBwb2x5bm9taWFsIGZpbmdlcnByaW50aW5nIGFsZ29yaXRobQogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54ZGlmZi1zdHJpbmctcmFiZGlmZi5waHAKICogQHBhcmFtIHN0cmluZyAkb2xkX2RhdGEgRmlyc3Qgc3RyaW5nIHdpdGggYmluYXJ5IGRhdGEuIEl0IGFjdHMgYXMgIm9sZCIgZGF0YS4KICogQHBhcmFtIHN0cmluZyAkbmV3X2RhdGEgU2Vjb25kIHN0cmluZyB3aXRoIGJpbmFyeSBkYXRhLiBJdCBhY3RzIGFzICJuZXciIGRhdGEuCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHN0cmluZyB3aXRoIGJpbmFyeSBkaWZmIGNvbnRhaW5pbmcgZGlmZmVyZW5jZXMgYmV0d2VlbiAib2xkIiBhbmQgIm5ldyIgZGF0YSBvciBmYWxzZSBpZiBhbiBpbnRlcm5hbCBlcnJvciBvY2N1cnJlZC4KICovCmZ1bmN0aW9uIHhkaWZmX3N0cmluZ19yYWJkaWZmKHN0cmluZyAkb2xkX2RhdGEsIHN0cmluZyAkbmV3X2RhdGEpIHt9CgpkZWZpbmUoJ1hESUZGX1BBVENIX05PUk1BTCcsIDApOwpkZWZpbmUoJ1hESUZGX1BBVENIX1JFVkVSU0UnLCAwKTsKZGVmaW5lKCdYRElGRl9QQVRDSF9JR05PUkVTUEFDRScsIDApOwo8P3BocAovKgogKiBDb21tb24gVXNlZCBGdW5jdGlvbnMKICovCgovKioKICogR2V0IGNhY2hlZCBkYXRhIGJ5IHNwZWNpZmllZCBuYW1lCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgS2V5IG5hbWUKICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24geGNhY2hlX2dldCgkbmFtZSkge30KCi8qKgogKiBTdG9yZSBkYXRhIHRvIGNhY2hlIGJ5IHNwZWNpZmllZCBuYW1lCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgS2V5IG5hbWUKICogQHBhcmFtIG1peGVkICR2YWx1ZSBWYWx1ZSB0byBzdG9yZQogKiBAcGFyYW0gaW50ICR0dGwgVFRMIGluIHNlY29uZHMKICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb3RoZXJ3aXNlCiAqLwpmdW5jdGlvbiB4Y2FjaGVfc2V0KCRuYW1lLCAkdmFsdWUsICR0dGwgPSAwKSB7fQoKLyoqCiAqIENoZWNrIGlmIGFuIGVudHJ5IGV4aXN0cyBpbiBjYWNoZSBieSBzcGVjaWZpZWQgbmFtZQogKgogKiBAcGFyYW0gc3RyaW5nICRuYW1lIEtleSBuYW1lCiAqIEByZXR1cm4gYm9vbCBUUlVFIGlmIGtleSBleGlzdHMsIEZBTFNFIG90aGVyd2lzZQogKi8KZnVuY3Rpb24geGNhY2hlX2lzc2V0KCRuYW1lKSB7fQoKLyoqCiAqIFVuc2V0IGV4aXN0aW5nIGRhdGEgaW4gY2FjaGUgYnkgc3BlY2lmaWVkIG5hbWUKICoKICogQHBhcmFtIHN0cmluZyAkbmFtZSBLZXkgbmFtZQogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHhjYWNoZV91bnNldCgkbmFtZSkge30KCi8qKgogKiBVbnNldCBleGlzdGluZyBkYXRhIGluIGNhY2hlIGJ5IHNwZWNpZmllZCBwcmVmaXgKICoKICogQHBhcmFtIHN0cmluZyAkcHJlZml4IEtleXMnIHByZWZpeAogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHhjYWNoZV91bnNldF9ieV9wcmVmaXgoJHByZWZpeCkge30KCi8qKgogKiBJbmNyZWFzZSBhbiBpbnQgY291bnRlciBpbiBjYWNoZSBieSBzcGVjaWZpZWQgbmFtZSwgY3JlYXRlIGl0IGlmIG5vdCBleGlzdHMKICoKICogQHBhcmFtIHN0cmluZyAkbmFtZQogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAqIEBwYXJhbSBpbnQgJHR0bAogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24geGNhY2hlX2luYygkbmFtZSwgJHZhbHVlID0gMSwgJHR0bCA9IDApIHt9CgovKioKICogRGVjcmVhc2UgYW4gaW50IGNvdW50ZXIgaW4gY2FjaGUgYnkgc3BlY2lmaWVkIG5hbWUsIGNyZWF0ZSBpdCBpZiBub3QgZXhpc3RzCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICogQHBhcmFtIG1peGVkICR2YWx1ZQogKiBAcGFyYW0gaW50ICR0dGwKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHhjYWNoZV9kZWMoJG5hbWUsICR2YWx1ZSA9IDEsICR0dGwgPSAwKSB7fQoKLyoKICogQWRtaW5pc3RyYXRvciBGdW5jdGlvbnMKICovCgovKioKICogUmV0dXJuIGNvdW50IG9mIGNhY2hlIG9uIHNwZWNpZmllZCBjYWNoZSB0eXBlCiAqCiAqIEBwYXJhbSBpbnQgJHR5cGUKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHhjYWNoZV9jb3VudCgkdHlwZSkge30KCi8qKgogKiBHZXQgY2FjaGUgaW5mbyBieSBpZCBvbiBzcGVjaWZpZWQgY2FjaGUgdHlwZQogKgogKiBAcGFyYW0gaW50ICR0eXBlCiAqIEBwYXJhbSBpbnQgJGlkCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHhjYWNoZV9pbmZvKCR0eXBlLCAkaWQpIHt9CgovKioKICogR2V0IGNhY2hlIGVudHJpZXMgbGlzdCBieSBpZCBvbiBzcGVjaWZpZWQgY2FjaGUgdHlwZQogKgogKiBAcGFyYW0gaW50ICR0eXBlCiAqIEBwYXJhbSBpbnQgJGlkCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHhjYWNoZV9saXN0KCR0eXBlLCAkaWQpIHt9CgovKioKICogQ2xlYXIgY2FjaGUgYnkgaWQgb24gc3BlY2lmaWVkIGNhY2hlIHR5cGUKICoKICogQHBhcmFtIGludCAkdHlwZQogKiBAcGFyYW0gaW50ICRpZAogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHhjYWNoZV9jbGVhcl9jYWNoZSgkdHlwZSwgJGlkID0gLTEpIHt9CgovKioKICogQHBhcmFtIGludCAkb3BfdHlwZQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24geGNhY2hlX2NvcmVkdW1wKCRvcF90eXBlKSB7fQoKLyoKICogQ292ZXJhZ2VyIEZ1bmN0aW9ucwogKi8KCi8qKgogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHhjYWNoZV9jb3ZlcmFnZXJfZGVjb2RlKCRkYXRhKSB7fQoKLyoqCiAqIEBwYXJhbSBib29sICRjbGVhbgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHhjYWNoZV9jb3ZlcmFnZXJfc3RhcnQoJGNsZWFuID0gdHJ1ZSkge30KCi8qKgogKiBAcGFyYW0gYm9vbCAkY2xlYW4KICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB4Y2FjaGVfY292ZXJhZ2VyX3N0b3AoJGNsZWFuID0gZmFsc2UpIHt9CgovKioKICogQHBhcmFtIGJvb2wgJGNsZWFuCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHhjYWNoZV9jb3ZlcmFnZXJfZ2V0KCRjbGVhbiA9IGZhbHNlKSB7fQoKLyoKICogT3Bjb2RlIEZ1bmN0aW9ucwogKi8KCi8qKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24geGNhY2hlX2FzbSgkZmlsZW5hbWUpIHt9CgovKioKICogRGlzYXNzZW1ibGUgZmlsZSBpbnRvIG9wY29kZSBhcnJheSBieSBmaWxlbmFtZQogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24geGNhY2hlX2Rhc21fZmlsZSgkZmlsZW5hbWUpIHt9CgovKioKICogRGlzYXNzZW1ibGUgcGhwIGNvZGUgaW50byBvcGNvZGUgYXJyYXkKICoKICogQHBhcmFtIHN0cmluZyAkY29kZQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24geGNhY2hlX2Rhc21fc3RyaW5nKCRjb2RlKSB7fQoKLyoqCiAqIEVuY29kZSBwaHAgZmlsZSBpbnRvIFhDYWNoZSBvcGNvZGUgZW5jb2RlZCBmb3JtYXQKICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHhjYWNoZV9lbmNvZGUoJGZpbGVuYW1lKSB7fQoKLyoqCiAqIERlY29kZShsb2FkKSBvcGNvZGUgZnJvbSBYQ2FjaGUgZW5jb2RlZCBmb3JtYXQgZmlsZQogKgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHhjYWNoZV9kZWNvZGUoJGZpbGVuYW1lKSB7fQoKLyoqCiAqIEBwYXJhbSBpbnQgJG9wX3R5cGUKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHhjYWNoZV9nZXRfb3BfdHlwZSgkb3BfdHlwZSkge30KCi8qKgogKiBAcGFyYW0gaW50ICR0eXBlCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiB4Y2FjaGVfZ2V0X2RhdGFfdHlwZSgkdHlwZSkge30KCi8qKgogKiBAcGFyYW0gaW50ICRvcGNvZGUKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHhjYWNoZV9nZXRfb3Bjb2RlKCRvcGNvZGUpIHt9CgovKioKICogQHBhcmFtIGludCAkb3BfdHlwZQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24geGNhY2hlX2dldF9vcF9zcGVjKCRvcF90eXBlKSB7fQoKLyoqCiAqIEBwYXJhbSBpbnQgJG9wY29kZQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24geGNhY2hlX2dldF9vcGNvZGVfc3BlYygkb3Bjb2RlKSB7fQoKLyoqCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHhjYWNoZV9pc19hdXRvZ2xvYmFsKCRuYW1lKSB7fQo8P3BocAoKLy8gU3RhcnQgb2YgU1FMaXRlIHYuMi4wLWRldgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXFB1cmU7CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWYuc3FsaXRlLnBocAogKi8KY2xhc3MgU1FMaXRlRGF0YWJhc2UKewogICAgLyoqCiAgICAgKiAoUEhQIDUgJmx0OyA1LjQuMCwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1vcGVuLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+VGhlIGZpbGVuYW1lIG9mIHRoZSBTUUxpdGUgZGF0YWJhc2UuIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBTUUxpdGUgd2lsbCBhdHRlbXB0IHRvIGNyZWF0ZSBpdC4gUEhQIG11c3QgaGF2ZSB3cml0ZSBwZXJtaXNzaW9ucyB0byB0aGUgZmlsZSBpZiBkYXRhIGlzIGluc2VydGVkLCB0aGUgZGF0YWJhc2Ugc2NoZW1hIGlzIG1vZGlmaWVkIG9yIHRvIGNyZWF0ZSB0aGUgZGF0YWJhc2UgaWYgaXQgZG9lcyBub3QgZXhpc3QuPC9wPgogICAgICogQHBhcmFtIGludCAkbW9kZSBbb3B0aW9uYWxdIDxwPlRoZSBtb2RlIG9mIHRoZSBmaWxlLiBJbnRlbmRlZCB0byBiZSB1c2VkIHRvIG9wZW4gdGhlIGRhdGFiYXNlIGluIHJlYWQtb25seSBtb2RlLiBQcmVzZW50bHksIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgYnkgdGhlIHNxbGl0ZSBsaWJyYXJ5LiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgbW9kZSBpcyB0aGUgb2N0YWwgdmFsdWUgMDY2NiBhbmQgdGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgdmFsdWUuPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAmJGVycm9yX21lc3NhZ2UgW29wdGlvbmFsXSA8cD5QYXNzZWQgYnkgcmVmZXJlbmNlIGFuZCBpcyBzZXQgdG8gaG9sZCBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UgZXhwbGFpbmluZyB3aHkgdGhlIGRhdGFiYXNlIGNvdWxkIG5vdCBiZSBvcGVuZWQgaWYgdGhlcmUgd2FzIGFuIGVycm9yLjwvcD4KICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmaWxlbmFtZSwgJG1vZGUgPSAwNjY2LCAmJGVycm9yX21lc3NhZ2UpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmx0OyA1LjQuMCwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1xdWVyeS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IDxwPgogICAgICogVGhlIHF1ZXJ5IHRvIGJlIGV4ZWN1dGVkLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBEYXRhIGluc2lkZSB0aGUgcXVlcnkgc2hvdWxkIGJlIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1lc2NhcGUtc3RyaW5nLnBocCBwcm9wZXJseSBlc2NhcGVkfS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHJlc3VsdF90eXBlIFtvcHRpb25hbF0KICAgICAqIDxwPlRoZSBvcHRpb25hbCA8aT5yZXN1bHRfdHlwZTwvaT4gcGFyYW1ldGVyIGFjY2VwdHMgYSBjb25zdGFudCBhbmQgZGV0ZXJtaW5lcyBob3cgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgaW5kZXhlZC4gVXNpbmcgPGI+U1FMSVRFX0FTU09DPC9iPiB3aWxsIHJldHVybiBvbmx5IGFzc29jaWF0aXZlIGluZGljZXMgKG5hbWVkIGZpZWxkcykgd2hpbGUgPGI+U1FMSVRFX05VTTwvYj4gd2lsbCByZXR1cm4gb25seSBudW1lcmljYWwgaW5kaWNlcyAob3JkaW5hbCBmaWVsZCBudW1iZXJzKS4gPGI+U1FMSVRFX0JPVEg8L2I+IHdpbGwgcmV0dXJuIGJvdGggYXNzb2NpYXRpdmUgYW5kIG51bWVyaWNhbCBpbmRpY2VzLiA8Yj5TUUxJVEVfQk9USDwvYj4gaXMgdGhlIGRlZmF1bHQgZm9yIHRoaXMgZnVuY3Rpb24uPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAmJGVycm9yX21lc3NhZ2UgW29wdGlvbmFsXSA8cD5UaGUgc3BlY2lmaWVkIHZhcmlhYmxlIHdpbGwgYmUgZmlsbGVkIGlmIGFuIGVycm9yIG9jY3Vycy4gVGhpcyBpcyBzcGVjaWFsbHkgaW1wb3J0YW50IGJlY2F1c2UgU1FMIHN5bnRheCBlcnJvcnMgY2FuJ3QgYmUgZmV0Y2hlZCB1c2luZyB0aGUge0BzZWUgc3FsaXRlX2xhc3RfZXJyb3IoKX0gZnVuY3Rpb24uPC9wPgogICAgICogQHJldHVybiByZXNvdXJjZXxmYWxzZSA8cD4KICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSByZXN1bHQgaGFuZGxlIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogRm9yIHF1ZXJpZXMgdGhhdCByZXR1cm4gcm93cywgdGhlIHJlc3VsdCBoYW5kbGUgY2FuIHRoZW4gYmUgdXNlZCB3aXRoCiAgICAgKiBmdW5jdGlvbnMgc3VjaCBhcyB7QHNlZSBzcWxpdGVfZmV0Y2hfYXJyYXkoKX0gYW5kCiAgICAgKiB7QHNlZSBzcWxpdGVfc2VlaygpfS4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogUmVnYXJkbGVzcyBvZiB0aGUgcXVlcnkgdHlwZSwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiA8Yj5GQUxTRTwvYj4gaWYgdGhlCiAgICAgKiBxdWVyeSBmYWlsZWQuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIHtAc2VlIHNxbGl0ZV9xdWVyeSgpfSByZXR1cm5zIGEgYnVmZmVyZWQsIHNlZWthYmxlIHJlc3VsdAogICAgICogaGFuZGxlLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHJlYXNvbmFibHkgc21hbGwgcXVlcmllcyB3aGVyZSB5b3UgbmVlZCB0bwogICAgICogYmUgYWJsZSB0byByYW5kb21seSBhY2Nlc3MgdGhlIHJvd3MuICBCdWZmZXJlZCByZXN1bHQgaGFuZGxlcyB3aWxsCiAgICAgKiBhbGxvY2F0ZSBtZW1vcnkgdG8gaG9sZCB0aGUgZW50aXJlIHJlc3VsdCBhbmQgd2lsbCBub3QgcmV0dXJuIHVudGlsIGl0CiAgICAgKiBoYXMgYmVlbiBmZXRjaGVkLiAgSWYgeW91IG9ubHkgbmVlZCBzZXF1ZW50aWFsIGFjY2VzcyB0byB0aGUgZGF0YSwgaXQgaXMKICAgICAqIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0aGUgbXVjaCBoaWdoZXIgcGVyZm9ybWFuY2UKICAgICAqIHtAc2VlIHNxbGl0ZV91bmJ1ZmZlcmVkX3F1ZXJ5KCl9IGluc3RlYWQuCiAgICAgKiA8L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBxdWVyeSgkcXVlcnksICRyZXN1bHRfdHlwZSwgJiRlcnJvcl9tZXNzYWdlKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZsdDsgNS40LjAsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtZXhlYy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IDxwPgogICAgICogVGhlIHF1ZXJ5IHRvIGJlIGV4ZWN1dGVkLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBEYXRhIGluc2lkZSB0aGUgcXVlcnkgc2hvdWxkIGJlIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1lc2NhcGUtc3RyaW5nLnBocCBwcm9wZXJseSBlc2NhcGVkfS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJiRlcnJvcl9tZXNzYWdlIFtvcHRpb25hbF0gPHA+VGhlIHNwZWNpZmllZCB2YXJpYWJsZSB3aWxsIGJlIGZpbGxlZCBpZiBhbiBlcnJvciBvY2N1cnMuIFRoaXMgaXMgc3BlY2lhbGx5IGltcG9ydGFudCBiZWNhdXNlIFNRTCBzeW50YXggZXJyb3JzIGNhbid0IGJlIGZldGNoZWQgdXNpbmcgdGhlCiAgICAgKiB7QHNlZSBzcWxpdGVfbGFzdF9lcnJvcigpfSBmdW5jdGlvbi48L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPHA+CiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgYm9vbGVhbiByZXN1bHQ7IDxiPlRSVUU8L2I+IGZvciBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBmb3IgZmFpbHVyZS4KICAgICAqIElmIHlvdSBuZWVkIHRvIHJ1biBhIHF1ZXJ5IHRoYXQgcmV0dXJucyByb3dzLCBzZWUge0BzZWUgc3FsaXRlX3F1ZXJ5KCl9LgogICAgICogPC9wPgogICAgICogPHA+VGhlIGNvbHVtbiBuYW1lcyByZXR1cm5lZCBieQogICAgICogPGI+U1FMSVRFX0FTU09DPC9iPiBhbmQgPGI+U1FMSVRFX0JPVEg8L2I+IHdpbGwgYmUKICAgICAqIGNhc2UtZm9sZGVkIGFjY29yZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlCiAgICAgKiB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uZmlndXJhdGlvbi5waHAjaW5pLnNxbGl0ZS5hc3NvYy1jYXNlIHNxbGl0ZS5hc3NvY19jYXNlfSBjb25maWd1cmF0aW9uCiAgICAgKiBvcHRpb24uPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVlcnlFeGVjKCRxdWVyeSwgJiRlcnJvcl9tZXNzYWdlKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZsdDsgNS40LjAsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKQogICAgICogRXhlY3V0ZSBhIHF1ZXJ5IGFnYWluc3QgYSBnaXZlbiBkYXRhYmFzZSBhbmQgcmV0dXJucyBhbiBhcnJheQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtYXJyYXktcXVlcnkucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWVyeSA8cD4KICAgICAqIFRoZSBxdWVyeSB0byBiZSBleGVjdXRlZC4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogRGF0YSBpbnNpZGUgdGhlIHF1ZXJ5IHNob3VsZCBiZSB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtZXNjYXBlLXN0cmluZy5waHAgcHJvcGVybHkgZXNjYXBlZH0uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRyZXN1bHRfdHlwZSBbb3B0aW9uYWxdIDxwPlRoZSBvcHRpb25hbCA8aT5yZXN1bHRfdHlwZTwvaT4KICAgICAqIHBhcmFtZXRlciBhY2NlcHRzIGEgY29uc3RhbnQgYW5kIGRldGVybWluZXMgaG93IHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGJlCiAgICAgKiBpbmRleGVkLiBVc2luZyA8Yj5TUUxJVEVfQVNTT0M8L2I+IHdpbGwgcmV0dXJuIG9ubHkgYXNzb2NpYXRpdmUKICAgICAqIGluZGljZXMgKG5hbWVkIGZpZWxkcykgd2hpbGUgPGI+U1FMSVRFX05VTTwvYj4gd2lsbCByZXR1cm4KICAgICAqIG9ubHkgbnVtZXJpY2FsIGluZGljZXMgKG9yZGluYWwgZmllbGQgbnVtYmVycykuIDxiPlNRTElURV9CT1RIPC9iPgogICAgICogd2lsbCByZXR1cm4gYm90aCBhc3NvY2lhdGl2ZSBhbmQgbnVtZXJpY2FsIGluZGljZXMuCiAgICAgKiA8Yj5TUUxJVEVfQk9USDwvYj4gaXMgdGhlIGRlZmF1bHQgZm9yIHRoaXMgZnVuY3Rpb24uPC9wPgogICAgICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXSA8cD5XaGVuIHRoZSA8aT5kZWNvZGVfYmluYXJ5PC9pPgogICAgICogcGFyYW1ldGVyIGlzIHNldCB0byA8Yj5UUlVFPC9iPiAodGhlIGRlZmF1bHQpLCBQSFAgd2lsbCBkZWNvZGUgdGhlIGJpbmFyeSBlbmNvZGluZwogICAgICogaXQgYXBwbGllZCB0byB0aGUgZGF0YSBpZiBpdCB3YXMgZW5jb2RlZCB1c2luZyB0aGUKICAgICAqIHtAc2VlIHNxbGl0ZV9lc2NhcGVfc3RyaW5nKCl9LiAgWW91IHNob3VsZCBub3JtYWxseSBsZWF2ZSB0aGlzCiAgICAgKiB2YWx1ZSBhdCBpdHMgZGVmYXVsdCwgdW5sZXNzIHlvdSBhcmUgaW50ZXJvcGVyYXRpbmcgd2l0aCBkYXRhYmFzZXMgY3JlYXRlZCBieQogICAgICogb3RoZXIgc3FsaXRlIGNhcGFibGUgYXBwbGljYXRpb25zLjwvcD4KICAgICAqIDxwPgogICAgICogQHJldHVybiBhcnJheXxmYWxzZQogICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB0aGUgZW50aXJlIHJlc3VsdCBzZXQ7IDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAgICAgKiA8L3A+CiAgICAgKiA8cD5UaGUgY29sdW1uIG5hbWVzIHJldHVybmVkIGJ5CiAgICAgKiA8Yj5TUUxJVEVfQVNTT0M8L2I+IGFuZCA8Yj5TUUxJVEVfQk9USDwvYj4gd2lsbCBiZQogICAgICogY2FzZS1mb2xkZWQgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUKICAgICAqIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25maWd1cmF0aW9uLnBocCNpbmkuc3FsaXRlLmFzc29jLWNhc2Ugc3FsaXRlLmFzc29jX2Nhc2V9IGNvbmZpZ3VyYXRpb24KICAgICAqIG9wdGlvbi48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcnJheVF1ZXJ5KCRxdWVyeSwgJHJlc3VsdF90eXBlLCAkZGVjb2RlX2JpbmFyeSkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmbHQ7IDUuNC4wLCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMSkKICAgICAqIEV4ZWN1dGVzIGEgcXVlcnkgYW5kIHJldHVybnMgZWl0aGVyIGFuIGFycmF5IGZvciBvbmUgc2luZ2xlIGNvbHVtbiBvciB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IHJvdwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtc2luZ2xlLXF1ZXJ5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcXVlcnkKICAgICAqIEBwYXJhbSBib29sICRmaXJzdF9yb3dfb25seSBbb3B0aW9uYWxdCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVjb2RlX2JpbmFyeSBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaW5nbGVRdWVyeSgkcXVlcnksICRmaXJzdF9yb3dfb25seSwgJGRlY29kZV9iaW5hcnkpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmx0OyA1LjQuMCwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApCiAgICAgKiBFeGVjdXRlIGEgcXVlcnkgdGhhdCBkb2VzIG5vdCBwcmVmZXRjaCBhbmQgYnVmZmVyIGFsbCBkYXRhCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS11bmJ1ZmZlcmVkLXF1ZXJ5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcXVlcnkgIDxwPgogICAgICogVGhlIHF1ZXJ5IHRvIGJlIGV4ZWN1dGVkLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBEYXRhIGluc2lkZSB0aGUgcXVlcnkgc2hvdWxkIGJlIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1lc2NhcGUtc3RyaW5nLnBocCBwcm9wZXJseSBlc2NhcGVkfS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHJlc3VsdF90eXBlIFtvcHRpb25hbF0gPHA+VGhlIG9wdGlvbmFsIDxpPnJlc3VsdF90eXBlPC9pPiBwYXJhbWV0ZXIgYWNjZXB0cyBhIGNvbnN0YW50IGFuZCBkZXRlcm1pbmVzIGhvdyB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBpbmRleGVkLgogICAgICogVXNpbmcgPGI+U1FMSVRFX0FTU09DPC9iPiB3aWxsIHJldHVybiBvbmx5IGFzc29jaWF0aXZlIGluZGljZXMgKG5hbWVkIGZpZWxkcykgd2hpbGUgPGI+U1FMSVRFX05VTTwvYj4gd2lsbCByZXR1cm4gb25seSBudW1lcmljYWwgaW5kaWNlcyAob3JkaW5hbCBmaWVsZCBudW1iZXJzKS4KICAgICAqIDxiPlNRTElURV9CT1RIPC9iPiB3aWxsIHJldHVybiBib3RoIGFzc29jaWF0aXZlIGFuZCBudW1lcmljYWwgaW5kaWNlcy4gPGI+U1FMSVRFX0JPVEg8L2I+IGlzIHRoZSBkZWZhdWx0IGZvciB0aGlzIGZ1bmN0aW9uLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAmJGVycm9yX21lc3NhZ2UgW29wdGlvbmFsXQogICAgICogQHJldHVybiByZXNvdXJjZSBSZXR1cm5zIGEgcmVzdWx0IGhhbmRsZSBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIHtAc2VlIHNxbGl0ZV91bmJ1ZmZlcmVkX3F1ZXJ5KCl9IHJldHVybnMgYSBzZXF1ZW50aWFsIGZvcndhcmQtb25seSByZXN1bHQgc2V0IHRoYXQgY2FuIG9ubHkgYmUgdXNlZCB0byByZWFkIGVhY2ggcm93LCBvbmUgYWZ0ZXIgdGhlIG90aGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5idWZmZXJlZFF1ZXJ5KCRxdWVyeSwgJHJlc3VsdF90eXBlID0gU1FMSVRFX0JPVEgsICYkZXJyb3JfbWVzc2FnZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmx0OyA1LjQuMCwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApCiAgICAgKiBSZXR1cm5zIHRoZSByb3dpZCBvZiB0aGUgbW9zdCByZWNlbnRseSBpbnNlcnRlZCByb3cKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWxhc3QtaW5zZXJ0LXJvd2lkLnBocAogICAgICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgcm93IGlkLCBhcyBhbiBpbnRlZ2VyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGFzdEluc2VydFJvd2lkKCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmbHQ7IDUuNC4wLCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCkKICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIHRoYXQgd2VyZSBjaGFuZ2VkIGJ5IHRoZSBtb3N0IHJlY2VudCBTUUwgc3RhdGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1jaGFuZ2VzLnBocAogICAgICogQHJldHVybiBpbnQgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYW5nZWQgcm93cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNoYW5nZXMoKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZsdDsgNS40LjAsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKQogICAgICogUmVnaXN0ZXIgYW4gYWdncmVnYXRpbmcgVURGIGZvciB1c2UgaW4gU1FMIHN0YXRlbWVudHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWNyZWF0ZS1hZ2dyZWdhdGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmdW5jdGlvbl9uYW1lIDxwPlRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB1c2VkIGluIFNRTCBzdGF0ZW1lbnRzLjwvcD4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkc3RlcF9mdW5jIDxwPkNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCByb3cgb2YgdGhlIHJlc3VsdCBzZXQuIEZ1bmN0aW9uIHBhcmFtZXRlcnMgYXJlICYkY29udGV4dCwgJHZhbHVlLCAuLi4uPC9wPgogICAgICogQHBhcmFtIGNhbGxhYmxlICRmaW5hbGl6ZV9mdW5jIDxwPkNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFnZ3JlZ2F0ZSB0aGUgInN0ZXBwZWQiIGRhdGEgZnJvbSBlYWNoIHJvdy4gRnVuY3Rpb24gcGFyYW1ldGVyIGlzICYkY29udGV4dCBhbmQgdGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIGZpbmFsIHJlc3VsdCBvZiBhZ2dyZWdhdGlvbi48L3A+CiAgICAgKiBAcGFyYW0gaW50ICRudW1fYXJncyBbb3B0aW9uYWxdIDxwPkhpbnQgdG8gdGhlIFNRTGl0ZSBwYXJzZXIgaWYgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFjY2VwdHMgYSBwcmVkZXRlcm1pbmVkIG51bWJlciBvZiBhcmd1bWVudHMuPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlQWdncmVnYXRlKCRmdW5jdGlvbl9uYW1lLCAkc3RlcF9mdW5jLCAkZmluYWxpemVfZnVuYywgJG51bV9hcmdzID0gLTEpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmx0OyA1LjQuMCwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApCiAgICAgKiBSZWdpc3RlcnMgYSAicmVndWxhciIgVXNlciBEZWZpbmVkIEZ1bmN0aW9uIGZvciB1c2UgaW4gU1FMIHN0YXRlbWVudHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWNyZWF0ZS1mdW5jdGlvbi5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZ1bmN0aW9uX25hbWUgPHA+VGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHVzZWQgaW4gU1FMIHN0YXRlbWVudHMuPC9wPgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayA8cD4KICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZGVmaW5lZCBTUUwgZnVuY3Rpb24uCiAgICAgKiA8L3A+CiAgICAgKiA8YmxvY2txdW90ZT48cD48Yj5Ob3RlPC9iPjoKICAgICAqIENhbGxiYWNrIGZ1bmN0aW9ucyBzaG91bGQgcmV0dXJuIGEgdHlwZSB1bmRlcnN0b29kIGJ5IFNRTGl0ZSAoaS5lLgogICAgICoge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMuaW50cm8ucGhwIHNjYWxhciB0eXBlfSkuCiAgICAgKiA8L3A+PC9ibG9ja3F1b3RlPgogICAgICogQHBhcmFtIGludCAkbnVtX2FyZ3MgW29wdGlvbmFsXSAgIDxibG9ja3F1b3RlPjxwPjxiPk5vdGU8L2I+OiBUd28gYWx0ZXJuYXRpdmUgc3ludGF4ZXMgYXJlCiAgICAgKiBzdXBwb3J0ZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBkYXRhYmFzZSBleHRlbnNpb25zIChzdWNoIGFzIE15U1FMKS4KICAgICAqIFRoZSBwcmVmZXJyZWQgZm9ybSBpcyB0aGUgZmlyc3QsIHdoZXJlIHRoZSA8aT5kYmhhbmRsZTwvaT4KICAgICAqIHBhcmFtZXRlciBpcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbi48L3A+PC9ibG9ja3F1b3RlPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24oJGZ1bmN0aW9uX25hbWUsICRjYWxsYmFjaywgJG51bV9hcmdzID0gLTEpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmx0OyA1LjQuMCwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApCiAgICAgKiBTZXQgYnVzeSB0aW1lb3V0IGR1cmF0aW9uLCBvciBkaXNhYmxlIGJ1c3kgaGFuZGxlcnMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWJ1c3ktdGltZW91dC5waHAKICAgICAqIEBwYXJhbSBpbnQgJG1pbGxpc2Vjb25kcyA8cD4gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMuIFdoZW4gc2V0IHRvIDAsIGJ1c3kgaGFuZGxlcnMgd2lsbCBiZSBkaXNhYmxlZCBhbmQgU1FMaXRlIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5IHdpdGggYSA8Yj5TUUxJVEVfQlVTWTwvYj4gc3RhdHVzIGNvZGUgaWYgYW5vdGhlciBwcm9jZXNzL3RocmVhZCBoYXMgdGhlIGRhdGFiYXNlIGxvY2tlZCBmb3IgYW4gdXBkYXRlLgogICAgICogUEhQIHNldHMgdGhlIGRlZmF1bHQgYnVzeSB0aW1lb3V0IHRvIGJlIDYwIHNlY29uZHMgd2hlbiB0aGUgZGF0YWJhc2UgaXMgb3BlbmVkLjwvcD4KICAgICAqIEByZXR1cm4gaW50IDxwPlJldHVybnMgYW4gZXJyb3IgY29kZSwgb3IgMCBpZiBubyBlcnJvciBvY2N1cnJlZC48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidXN5VGltZW91dCgkbWlsbGlzZWNvbmRzKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZsdDsgNS40LjAsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKQogICAgICogUmV0dXJucyB0aGUgZXJyb3IgY29kZSBvZiB0aGUgbGFzdCBlcnJvciBmb3IgYSBkYXRhYmFzZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtbGFzdC1lcnJvci5waHAKICAgICAqIEByZXR1cm4gaW50IFJldHVybnMgYW4gZXJyb3IgY29kZSwgb3IgMCBpZiBubyBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxhc3RFcnJvcigpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmx0OyA1LjQuMCkKICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBjb2x1bW4gdHlwZXMgZnJvbSBhIHBhcnRpY3VsYXIgdGFibGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWZldGNoLWNvbHVtbi10eXBlcy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlX25hbWUgPHA+VGhlIHRhYmxlIG5hbWUgdG8gcXVlcnkuPC9wPgogICAgICogQHBhcmFtIGludCAkcmVzdWx0X3R5cGUgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBvcHRpb25hbCA8aT5yZXN1bHRfdHlwZTwvaT4gcGFyYW1ldGVyIGFjY2VwdHMgYQogICAgICogY29uc3RhbnQgYW5kIGRldGVybWluZXMgaG93IHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGJlIGluZGV4ZWQuIFVzaW5nCiAgICAgKiA8Yj5TUUxJVEVfQVNTT0M8L2I+IHdpbGwgcmV0dXJuIG9ubHkgYXNzb2NpYXRpdmUgaW5kaWNlcwogICAgICogKG5hbWVkIGZpZWxkcykgd2hpbGUgPGI+U1FMSVRFX05VTTwvYj4gd2lsbCByZXR1cm4gb25seQogICAgICogbnVtZXJpY2FsIGluZGljZXMgKG9yZGluYWwgZmllbGQgbnVtYmVycykuCiAgICAgKiA8Yj5TUUxJVEVfQVNTT0M8L2I+IGlzIHRoZSBkZWZhdWx0IGZvcgogICAgICogdGhpcyBmdW5jdGlvbi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYXJyYXkgPHA+CiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbHVtbiBkYXRhIHR5cGVzOyA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAgICAgKiA8L3A+CiAgICAgKiA8cD5UaGUgY29sdW1uIG5hbWVzIHJldHVybmVkIGJ5CiAgICAgKiA8Yj5TUUxJVEVfQVNTT0M8L2I+IGFuZCA8Yj5TUUxJVEVfQk9USDwvYj4gd2lsbCBiZQogICAgICogY2FzZS1mb2xkZWQgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUKICAgICAqIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25maWd1cmF0aW9uLnBocCNpbmkuc3FsaXRlLmFzc29jLWNhc2Ugc3FsaXRlLmFzc29jX2Nhc2V9IGNvbmZpZ3VyYXRpb24KICAgICAqIG9wdGlvbi48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaENvbHVtblR5cGVzKCR0YWJsZV9uYW1lLCAkcmVzdWx0X3R5cGUgPSBTUUxJVEVfQVNTT0MpIHt9Cn0KCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZi5zcWxpdGUucGhwCiAqLwpmaW5hbCBjbGFzcyBTUUxpdGVSZXN1bHQgaW1wbGVtZW50cyBJdGVyYXRvciwgQ291bnRhYmxlCnsKICAgIC8qKgogICAgICogKFBIUCA1ICZsdDsgNS40LjAsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKQogICAgICogRmV0Y2hlcyB0aGUgbmV4dCByb3cgZnJvbSBhIHJlc3VsdCBzZXQgYXMgYW4gYXJyYXkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWZldGNoLWFycmF5LnBocAogICAgICogQHBhcmFtIGludCAkcmVzdWx0X3R5cGUgW29wdGlvbmFsXQogICAgICogPHA+CiAgICAgKiBUaGUgb3B0aW9uYWwgPGk+cmVzdWx0X3R5cGU8L2k+CiAgICAgKiBwYXJhbWV0ZXIgYWNjZXB0cyBhIGNvbnN0YW50IGFuZCBkZXRlcm1pbmVzIGhvdyB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZQogICAgICogaW5kZXhlZC4gVXNpbmcgPGI+U1FMSVRFX0FTU09DPC9iPiB3aWxsIHJldHVybiBvbmx5IGFzc29jaWF0aXZlCiAgICAgKiBpbmRpY2VzIChuYW1lZCBmaWVsZHMpIHdoaWxlIDxiPlNRTElURV9OVU08L2I+IHdpbGwgcmV0dXJuCiAgICAgKiBvbmx5IG51bWVyaWNhbCBpbmRpY2VzIChvcmRpbmFsIGZpZWxkIG51bWJlcnMpLiA8Yj5TUUxJVEVfQk9USDwvYj4KICAgICAqIHdpbGwgcmV0dXJuIGJvdGggYXNzb2NpYXRpdmUgYW5kIG51bWVyaWNhbCBpbmRpY2VzLgogICAgICogPGI+U1FMSVRFX0JPVEg8L2I+IGlzIHRoZSBkZWZhdWx0IGZvciB0aGlzIGZ1bmN0aW9uLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXSA8cD5XaGVuIHRoZSA8aT5kZWNvZGVfYmluYXJ5PC9pPgogICAgICogcGFyYW1ldGVyIGlzIHNldCB0byA8Yj5UUlVFPC9iPiAodGhlIGRlZmF1bHQpLCBQSFAgd2lsbCBkZWNvZGUgdGhlIGJpbmFyeSBlbmNvZGluZwogICAgICogaXQgYXBwbGllZCB0byB0aGUgZGF0YSBpZiBpdCB3YXMgZW5jb2RlZCB1c2luZyB0aGUKICAgICAqIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25maWd1cmF0aW9uLnBocCNpbmkuc3FsaXRlLmFzc29jLWNhc2Ugc3FsaXRlLmFzc29jX2Nhc2V9LiBZb3Ugc2hvdWxkIG5vcm1hbGx5IGxlYXZlIHRoaXMKICAgICAqIHZhbHVlIGF0IGl0cyBkZWZhdWx0LCB1bmxlc3MgeW91IGFyZSBpbnRlcm9wZXJhdGluZyB3aXRoIGRhdGFiYXNlcyBjcmVhdGVkIGJ5CiAgICAgKiBvdGhlciBzcWxpdGUgY2FwYWJsZSBhcHBsaWNhdGlvbnMuPC9wPgogICAgICogQHJldHVybiBhcnJheQogICAgICogPHA+CiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBuZXh0IHJvdyBmcm9tIGEgcmVzdWx0IHNldDsgPGI+RkFMU0U8L2I+IGlmIHRoZQogICAgICogbmV4dCBwb3NpdGlvbiBpcyBiZXlvbmQgdGhlIGZpbmFsIHJvdy4KICAgICAqIDwvcD4KICAgICAqIDxwPlRoZSBjb2x1bW4gbmFtZXMgcmV0dXJuZWQgYnkKICAgICAqIDxiPlNRTElURV9BU1NPQzwvYj4gYW5kIDxiPlNRTElURV9CT1RIPC9iPiB3aWxsIGJlCiAgICAgKiBjYXNlLWZvbGRlZCBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQogICAgICoge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbmZpZ3VyYXRpb24ucGhwI2luaS5zcWxpdGUuYXNzb2MtY2FzZSBzcWxpdGUuYXNzb2NfY2FzZX0gIGNvbmZpZ3VyYXRpb24KICAgICAqIG9wdGlvbi48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaCgkcmVzdWx0X3R5cGUgPSBTUUxJVEVfQk9USCwgJGRlY29kZV9iaW5hcnkgPSB0cnVlKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZsdDsgNS40LjApCiAgICAgKiBGZXRjaGVzIHRoZSBuZXh0IHJvdyBmcm9tIGEgcmVzdWx0IHNldCBhcyBhbiBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWZldGNoLW9iamVjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzX25hbWUgW29wdGlvbmFsXQogICAgICogQHBhcmFtIGFycmF5ICRjdG9yX3BhcmFtcyBbb3B0aW9uYWxdCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVjb2RlX2JpbmFyeSBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIG9iamVjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2hPYmplY3QoJGNsYXNzX25hbWUsICRjdG9yX3BhcmFtcywgJGRlY29kZV9iaW5hcnkgPSB0cnVlKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZsdDsgNS40LjAsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4xKQogICAgICogRmV0Y2hlcyB0aGUgZmlyc3QgY29sdW1uIG9mIGEgcmVzdWx0IHNldCBhcyBhIHN0cmluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtZmV0Y2gtc2luZ2xlLnBocAogICAgICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXQogICAgICogQHJldHVybiBzdHJpbmcgPHA+UmV0dXJucyB0aGUgZmlyc3QgY29sdW1uIHZhbHVlLCBhcyBhIHN0cmluZy48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaFNpbmdsZSgkZGVjb2RlX2JpbmFyeSA9IHRydWUpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmx0OyA1LjQuMCkKICAgICAqIEZldGNoZXMgdGhlIG5leHQgcm93IGZyb20gYSByZXN1bHQgc2V0IGFzIGFuIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWZldGNoLWFsbC5waHAKICAgICAqIEBwYXJhbSBpbnQgJHJlc3VsdF90eXBlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgb3B0aW9uYWwgcmVzdWx0X3R5cGUgcGFyYW1ldGVyIGFjY2VwdHMgYSBjb25zdGFudCBhbmQgZGV0ZXJtaW5lcyBob3cgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgaW5kZXhlZC4KICAgICAqIFVzaW5nIFNRTElURV9BU1NPQyB3aWxsIHJldHVybiBvbmx5IGFzc29jaWF0aXZlIGluZGljZXMgKG5hbWVkIGZpZWxkcykgd2hpbGUgU1FMSVRFX05VTSB3aWxsIHJldHVybiBvbmx5IG51bWVyaWNhbCBpbmRpY2VzIChvcmRpbmFsIGZpZWxkIG51bWJlcnMpLgogICAgICoge0BzZWUgU1FMSVRFX0JPVEh9IHdpbGwgcmV0dXJuIGJvdGggYXNzb2NpYXRpdmUgYW5kIG51bWVyaWNhbCBpbmRpY2VzLiB7QHNlZSBTUUxJVEVfQk9USH0gaXMgdGhlIGRlZmF1bHQgZm9yIHRoaXMgZnVuY3Rpb24uPC9wPgogICAgICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXSA8cD4gV2hlbiB0aGUgZGVjb2RlX2JpbmFyeSBwYXJhbWV0ZXIgaXMgc2V0IHRvIFRSVUUgKHRoZSBkZWZhdWx0KSwKICAgICAqIFBIUCB3aWxsIGRlY29kZSB0aGUgYmluYXJ5IGVuY29kaW5nIGl0IGFwcGxpZWQgdG8gdGhlIGRhdGEgaWYgaXQgd2FzIGVuY29kZWQgdXNpbmcgdGhlIHtAc2VlIHNxbGl0ZV9lc2NhcGVfc3RyaW5nKCl9LgogICAgICogWW91IHNob3VsZCBub3JtYWxseSBsZWF2ZSB0aGlzIHZhbHVlIGF0IGl0cyBkZWZhdWx0LCB1bmxlc3MgeW91IGFyZSBpbnRlcm9wZXJhdGluZyB3aXRoIGRhdGFiYXNlcyBjcmVhdGVkIGJ5IG90aGVyIHNxbGl0ZSBjYXBhYmxlIGFwcGxpY2F0aW9ucy48L3A+CiAgICAgKiBAcmV0dXJuIG9iamVjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2hBbGwoJHJlc3VsdF90eXBlLCAkZGVjb2RlX2JpbmFyeSA9IHRydWUpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmx0OyA1LjQuMCwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApCiAgICAgKiBGZXRjaGVzIGEgY29sdW1uIGZyb20gdGhlIGN1cnJlbnQgcm93IG9mIGEgcmVzdWx0IHNldAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtY29sdW1uLnBocAogICAgICogQHBhcmFtICRpbmRleF9vcl9uYW1lCiAgICAgKiBAcGFyYW0gJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXSA8cD5XaGVuIHRoZSA8aT5kZWNvZGVfYmluYXJ5PC9pPgogICAgICogcGFyYW1ldGVyIGlzIHNldCB0byA8Yj5UUlVFPC9iPiAodGhlIGRlZmF1bHQpLCBQSFAgd2lsbCBkZWNvZGUgdGhlIGJpbmFyeSBlbmNvZGluZwogICAgICogaXQgYXBwbGllZCB0byB0aGUgZGF0YSBpZiBpdCB3YXMgZW5jb2RlZCB1c2luZyB0aGUKICAgICAqIHtAc2VlIHNxbGl0ZV9lc2NhcGVfc3RyaW5nKCl9LiAgWW91IHNob3VsZCBub3JtYWxseSBsZWF2ZSB0aGlzCiAgICAgKiB2YWx1ZSBhdCBpdHMgZGVmYXVsdCwgdW5sZXNzIHlvdSBhcmUgaW50ZXJvcGVyYXRpbmcgd2l0aCBkYXRhYmFzZXMgY3JlYXRlZCBieQogICAgICogb3RoZXIgc3FsaXRlIGNhcGFibGUgYXBwbGljYXRpb25zLjwvcD4KICAgICAqIEByZXR1cm4gbWl4ZWQgPHA+UmV0dXJucyB0aGUgY29sdW1uIHZhbHVlPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29sdW1uKCRpbmRleF9vcl9uYW1lLCAkZGVjb2RlX2JpbmFyeSA9IHRydWUpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmx0OyA1LjQuMCwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmllbGRzIGluIGEgcmVzdWx0IHNldAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtbnVtLWZpZWxkcy5waHAKICAgICAqIEByZXR1cm4gaW50IDxwPlJldHVybnMgdGhlIG51bWJlciBvZiBmaWVsZHMsIGFzIGFuIGludGVnZXIuPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbnVtRmllbGRzKCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmbHQ7IDUuNC4wLCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCkKICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgYSBwYXJ0aWN1bGFyIGZpZWxkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1maWVsZC1uYW1lLnBocAogICAgICogQHBhcmFtIGludCAkZmllbGRfaW5kZXggPHA+VGhlIG9yZGluYWwgY29sdW1uIG51bWJlciBpbiB0aGUgcmVzdWx0IHNldC48L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZyA8cD4KICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgYSBmaWVsZCBpbiBhbiBTUUxpdGUgcmVzdWx0IHNldCwgZ2l2ZW4gdGhlIG9yZGluYWwKICAgICAqIGNvbHVtbiBudW1iZXI7IDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICAgICAqIDwvcD4KICAgICAqIDxwPlRoZSBjb2x1bW4gbmFtZXMgcmV0dXJuZWQgYnkKICAgICAqIDxiPlNRTElURV9BU1NPQzwvYj4gYW5kIDxiPlNRTElURV9CT1RIPC9iPiB3aWxsIGJlCiAgICAgKiBjYXNlLWZvbGRlZCBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQogICAgICoge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbmZpZ3VyYXRpb24ucGhwI2luaS5zcWxpdGUuYXNzb2MtY2FzZSBzcWxpdGUuYXNzb2NfY2FzZX1jb25maWd1cmF0aW9uCiAgICAgKiBvcHRpb24uPC9wPgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGROYW1lKCRmaWVsZF9pbmRleCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmbHQ7IDUuNC4wLCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCkKICAgICAqIEZldGNoZXMgdGhlIGN1cnJlbnQgcm93IGZyb20gYSByZXN1bHQgc2V0IGFzIGFuIGFycmF5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1jdXJyZW50LnBocAogICAgICogQHBhcmFtIGludCAkcmVzdWx0X3R5cGUgW29wdGlvbmFsXSA8cD5UaGUgb3B0aW9uYWwgPGk+cmVzdWx0X3R5cGU8L2k+CiAgICAgKiBwYXJhbWV0ZXIgYWNjZXB0cyBhIGNvbnN0YW50IGFuZCBkZXRlcm1pbmVzIGhvdyB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZQogICAgICogaW5kZXhlZC4gVXNpbmcge0BzZWUgU1FMSVRFX0FTU09DfSB3aWxsIHJldHVybiBvbmx5IGFzc29jaWF0aXZlCiAgICAgKiBpbmRpY2VzIChuYW1lZCBmaWVsZHMpIHdoaWxlIHtAc2VlIFNRTElURV9OVU19IHdpbGwgcmV0dXJuCiAgICAgKiBvbmx5IG51bWVyaWNhbCBpbmRpY2VzIChvcmRpbmFsIGZpZWxkIG51bWJlcnMpLiA8Yj5TUUxJVEVfQk9USDwvYj4KICAgICAqIHdpbGwgcmV0dXJuIGJvdGggYXNzb2NpYXRpdmUgYW5kIG51bWVyaWNhbCBpbmRpY2VzLgogICAgICoge0BzZWUgU1FMSVRFX0JPVEh9IGlzIHRoZSBkZWZhdWx0IGZvciB0aGlzIGZ1bmN0aW9uLjwvcD4KICAgICAqIEBwYXJhbSBib29sICRkZWNvZGVfYmluYXJ5IFtvcHRpb25hbF0gPHA+V2hlbiB0aGUgPGk+ZGVjb2RlX2JpbmFyeTwvaT4KICAgICAqIHBhcmFtZXRlciBpcyBzZXQgdG8gPGI+VFJVRTwvYj4gKHRoZSBkZWZhdWx0KSwgUEhQIHdpbGwgZGVjb2RlIHRoZSBiaW5hcnkgZW5jb2RpbmcKICAgICAqIGl0IGFwcGxpZWQgdG8gdGhlIGRhdGEgaWYgaXQgd2FzIGVuY29kZWQgdXNpbmcgdGhlCiAgICAgKiB7QHNlZSBzcWxpdGVfZXNjYXBlX3N0cmluZygpfS4gIFlvdSBzaG91bGQgbm9ybWFsbHkgbGVhdmUgdGhpcwogICAgICogdmFsdWUgYXQgaXRzIGRlZmF1bHQsIHVubGVzcyB5b3UgYXJlIGludGVyb3BlcmF0aW5nIHdpdGggZGF0YWJhc2VzIGNyZWF0ZWQgYnkKICAgICAqIG90aGVyIHNxbGl0ZSBjYXBhYmxlIGFwcGxpY2F0aW9ucy48L3A+CiAgICAgKiBAcmV0dXJuIGFycmF5IDxwPgogICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB0aGUgY3VycmVudCByb3cgZnJvbSBhIHJlc3VsdCBzZXQ7IDxiPkZBTFNFPC9iPiBpZiB0aGUKICAgICAqIGN1cnJlbnQgcG9zaXRpb24gaXMgYmV5b25kIHRoZSBmaW5hbCByb3cuCiAgICAgKiA8L3A+CiAgICAgKiA8cD5UaGUgY29sdW1uIG5hbWVzIHJldHVybmVkIGJ5CiAgICAgKiA8Yj5TUUxJVEVfQVNTT0M8L2I+IGFuZCA8Yj5TUUxJVEVfQk9USDwvYj4gd2lsbCBiZQogICAgICogY2FzZS1mb2xkZWQgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUKICAgICAqIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25maWd1cmF0aW9uLnBocCNpbmkuc3FsaXRlLmFzc29jLWNhc2Ugc3FsaXRlLmFzc29jX2Nhc2V9IGNvbmZpZ3VyYXRpb24KICAgICAqIG9wdGlvbi48L3A+CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCRyZXN1bHRfdHlwZSA9IFNRTElURV9CT1RILCAkZGVjb2RlX2JpbmFyeSA9IHRydWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGtleSBvZiB0aGUgY3VycmVudCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2l0ZXJhdG9yLmtleS5waHAKICAgICAqIEByZXR1cm4gbWl4ZWQgc2NhbGFyIG9uIHN1Y2Nlc3MsIG9yIG51bGwgb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSA1LjAuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkge30KCiAgICAvKioKICAgICAqIFNlZWsgdG8gdGhlIG5leHQgcm93IG51bWJlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtbmV4dC5waHAKICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MsIG9yIDxiPkZBTFNFPC9iPiBpZiB0aGVyZSBhcmUgbm8gbW9yZSByb3dzLgogICAgICogQHNpbmNlIDUuMC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCkge30KCiAgICAvKioKICAgICAqIENoZWNrcyBpZiBjdXJyZW50IHBvc2l0aW9uIGlzIHZhbGlkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2l0ZXJhdG9yLnZhbGlkLnBocAogICAgICogQHJldHVybiBib29sIDxwPgogICAgICogUmV0dXJucyA8Yj5UUlVFPC9iPiBpZiB0aGVyZSBhcmUgbW9yZSByb3dzIGF2YWlsYWJsZSBmcm9tIHRoZQogICAgICogPGk+cmVzdWx0PC9pPiBoYW5kbGUsIG9yIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAgICAgKiA8L3A+CiAgICAgKiBAc2luY2UgNS4wLjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkKCkge30KCiAgICAvKioKICAgICAqIFJld2luZCB0aGUgSXRlcmF0b3IgdG8gdGhlIGZpcnN0IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaXRlcmF0b3IucmV3aW5kLnBocAogICAgICogQHJldHVybiB2b2lkIEFueSByZXR1cm5lZCB2YWx1ZSBpcyBpZ25vcmVkLgogICAgICogQHNpbmNlIDUuMC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKSB7fQoKICAgIC8qKgogICAgICogQ291bnQgZWxlbWVudHMgb2YgYW4gb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NvdW50YWJsZS5jb3VudC5waHAKICAgICAqIEByZXR1cm4gaW50IDxwPlRoZSBjdXN0b20gY291bnQgYXMgYW4gaW50ZWdlci4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBjYXN0IHRvIGFuIGludGVnZXIuCiAgICAgKiA8L3A+CiAgICAgKiBAc2luY2UgNS4xLjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCkge30KCiAgICAvKioKICAgICAqIFNlZWsgdG8gdGhlIHByZXZpb3VzIHJvdyBudW1iZXIgb2YgYSByZXN1bHQgc2V0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1wcmV2LnBocAogICAgICogQHJldHVybiBib29sIDxwPiBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MsIG9yIDxiPkZBTFNFPC9iPiBpZiB0aGVyZSBhcmUgbm8gbW9yZSBwcmV2aW91cyByb3dzLgogICAgICogPC9wPgogICAgICogQHNpbmNlIDUuNC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmV2KCkge30KCiAgICAvKioKICAgICAqQHNpbmNlIDUuNC4wCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGEgcHJldmlvdXMgcm93IGlzIGF2YWlsYWJsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtaGFzLXByZXYucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPHA+CiAgICAgKiBSZXR1cm5zIDxiPlRSVUU8L2I+IGlmIHRoZXJlIGFyZSBtb3JlIHByZXZpb3VzIHJvd3MgYXZhaWxhYmxlIGZyb20gdGhlCiAgICAgKiA8aT5yZXN1bHQ8L2k+IGhhbmRsZSwgb3IgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICAgICAqIDwvcD4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc1ByZXYoKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZsdDsgNS40LjAsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKQogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gYSBidWZmZXJlZCByZXN1bHQgc2V0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1udW0tcm93cy5waHAKICAgICAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzLCBhcyBhbiBpbnRlZ2VyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbnVtUm93cygpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmx0OyA1LjQuMCwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApCiAgICAgKiBTZWVrIHRvIGEgcGFydGljdWxhciByb3cgbnVtYmVyIG9mIGEgYnVmZmVyZWQgcmVzdWx0IHNldAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtc2Vlay5waHAKICAgICAqIEBwYXJhbSAkcm93CiAgICAgKiA8cD4KICAgICAqIFRoZSBvcmRpbmFsIHJvdyBudW1iZXIgdG8gc2VlayB0by4gIFRoZSByb3cgbnVtYmVyIGlzIHplcm8tYmFzZWQgKDAgaXMKICAgICAqIHRoZSBmaXJzdCByb3cpLgogICAgICogPC9wPgogICAgICogPGJsb2NrcXVvdGU+PHA+PGI+Tm90ZTwvYj46IDwvcD48cD5UaGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGgKICAgICAqIHVuYnVmZmVyZWQgcmVzdWx0IGhhbmRsZXMuPC9wPjwvYmxvY2txdW90ZT4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJHJvdykge30KfQoKLyoqCiAqIFJlcHJlc2VudHMgYW4gdW5idWZmZXJlZCBTUUxpdGUgcmVzdWx0IHNldC4gVW5idWZmZXJlZCByZXN1bHRzIHNldHMgYXJlIHNlcXVlbnRpYWwsIGZvcndhcmQtc2Vla2luZyBvbmx5LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZi5zcWxpdGUucGhwCiAqLwpmaW5hbCBjbGFzcyBTUUxpdGVVbmJ1ZmZlcmVkCnsKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkcmVzdWx0X3R5cGUgW29wdGlvbmFsXQogICAgICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2goJHJlc3VsdF90eXBlLCAkZGVjb2RlX2JpbmFyeSkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1mZXRjaC1vYmplY3QucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzc19uYW1lIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSBhcnJheSAkY3Rvcl9wYXJhbXMgW29wdGlvbmFsXQogICAgICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2hPYmplY3QoJGNsYXNzX25hbWUsICRjdG9yX3BhcmFtcywgJGRlY29kZV9iaW5hcnkpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVjb2RlX2JpbmFyeSBbb3B0aW9uYWxdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaFNpbmdsZSgkZGVjb2RlX2JpbmFyeSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHJlc3VsdF90eXBlIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSBib29sICRkZWNvZGVfYmluYXJ5IFtvcHRpb25hbF0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZldGNoQWxsKCRyZXN1bHRfdHlwZSwgJGRlY29kZV9iaW5hcnkpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJGluZGV4X29yX25hbWUKICAgICAqIEBwYXJhbSAkZGVjb2RlX2JpbmFyeSBbb3B0aW9uYWxdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb2x1bW4oJGluZGV4X29yX25hbWUsICRkZWNvZGVfYmluYXJ5KSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBudW1GaWVsZHMoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkZmllbGRfaW5kZXgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpZWxkTmFtZSgkZmllbGRfaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRyZXN1bHRfdHlwZSBbb3B0aW9uYWxdCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVjb2RlX2JpbmFyeSBbb3B0aW9uYWxdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCRyZXN1bHRfdHlwZSwgJGRlY29kZV9iaW5hcnkpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpIHt9Cn0KCmZpbmFsIGNsYXNzIFNRTGl0ZUV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24KewogICAgcHJvdGVjdGVkICRtZXNzYWdlOwogICAgcHJvdGVjdGVkICRjb2RlOwogICAgcHJvdGVjdGVkICRmaWxlOwogICAgcHJvdGVjdGVkICRsaW5lOwoKICAgIC8qKgogICAgICogQ2xvbmUgdGhlIGV4Y2VwdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9leGNlcHRpb24uY2xvbmUucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEBzaW5jZSA1LjEuMAogICAgICovCiAgICBmaW5hbCBwcml2YXRlIGZ1bmN0aW9uIF9fY2xvbmUoKSB7fQoKICAgIC8qKgogICAgICogQ29uc3RydWN0IHRoZSBleGNlcHRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXhjZXB0aW9uLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSAkbWVzc2FnZSBbb3B0aW9uYWxdCiAgICAgKiBAcGFyYW0gJGNvZGUgW29wdGlvbmFsXQogICAgICogQHBhcmFtICRwcmV2aW91cyBbb3B0aW9uYWxdCiAgICAgKiBAc2luY2UgNS4xLjAKICAgICAqLwogICAgI1tQdXJlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtZXNzYWdlLCAkY29kZSwgJHByZXZpb3VzKSB7fQoKICAgIC8qKgogICAgICogU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBleGNlcHRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZXhjZXB0aW9uLnRvc3RyaW5nLnBocAogICAgICogQHJldHVybiBzdHJpbmcgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXhjZXB0aW9uLgogICAgICogQHNpbmNlIDUuMS4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkge30KfQoKLyoqCiAqIChQSFAgNSwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogT3BlbnMgYSBTUUxpdGUgZGF0YWJhc2UgYW5kIGNyZWF0ZSB0aGUgZGF0YWJhc2UgaWYgaXQgZG9lcyBub3QgZXhpc3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtb3Blbi5waHAKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAqIFRoZSBmaWxlbmFtZSBvZiB0aGUgU1FMaXRlIGRhdGFiYXNlLiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgU1FMaXRlCiAqIHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUgaXQuIFBIUCBtdXN0IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMgdG8gdGhlIGZpbGUKICogaWYgZGF0YSBpcyBpbnNlcnRlZCwgdGhlIGRhdGFiYXNlIHNjaGVtYSBpcyBtb2RpZmllZCBvciB0byBjcmVhdGUgdGhlCiAqIGRhdGFiYXNlIGlmIGl0IGRvZXMgbm90IGV4aXN0LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG1vZGUgW29wdGlvbmFsXSA8cD4KICogVGhlIG1vZGUgb2YgdGhlIGZpbGUuIEludGVuZGVkIHRvIGJlIHVzZWQgdG8gb3BlbiB0aGUgZGF0YWJhc2UgaW4KICogcmVhZC1vbmx5IG1vZGUuIFByZXNlbnRseSwgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBieSB0aGUgc3FsaXRlCiAqIGxpYnJhcnkuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBtb2RlIGlzIHRoZSBvY3RhbCB2YWx1ZQogKiAwNjY2IGFuZCB0aGlzIGlzIHRoZSByZWNvbW1lbmRlZCB2YWx1ZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICYkZXJyb3JfbWVzc2FnZSBbb3B0aW9uYWxdIDxwPgogKiBQYXNzZWQgYnkgcmVmZXJlbmNlIGFuZCBpcyBzZXQgdG8gaG9sZCBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UKICogZXhwbGFpbmluZyB3aHkgdGhlIGRhdGFiYXNlIGNvdWxkIG5vdCBiZSBvcGVuZWQgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgYSByZXNvdXJjZSAoZGF0YWJhc2UgaGFuZGxlKSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIHNxbGl0ZV9vcGVuKCRmaWxlbmFtZSwgJG1vZGUgPSBudWxsLCAmJGVycm9yX21lc3NhZ2UgPSBudWxsKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogT3BlbnMgYSBwZXJzaXN0ZW50IGhhbmRsZSB0byBhbiBTUUxpdGUgZGF0YWJhc2UgYW5kIGNyZWF0ZSB0aGUgZGF0YWJhc2UgaWYgaXQgZG9lcyBub3QgZXhpc3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtcG9wZW4ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIDxwPgogKiBUaGUgZmlsZW5hbWUgb2YgdGhlIFNRTGl0ZSBkYXRhYmFzZS4gSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIFNRTGl0ZQogKiB3aWxsIGF0dGVtcHQgdG8gY3JlYXRlIGl0LiBQSFAgbXVzdCBoYXZlIHdyaXRlIHBlcm1pc3Npb25zIHRvIHRoZSBmaWxlCiAqIGlmIGRhdGEgaXMgaW5zZXJ0ZWQsIHRoZSBkYXRhYmFzZSBzY2hlbWEgaXMgbW9kaWZpZWQgb3IgdG8gY3JlYXRlIHRoZQogKiBkYXRhYmFzZSBpZiBpdCBkb2VzIG5vdCBleGlzdC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtb2RlIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBtb2RlIG9mIHRoZSBmaWxlLiBJbnRlbmRlZCB0byBiZSB1c2VkIHRvIG9wZW4gdGhlIGRhdGFiYXNlIGluCiAqIHJlYWQtb25seSBtb2RlLiBQcmVzZW50bHksIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgYnkgdGhlIHNxbGl0ZQogKiBsaWJyYXJ5LiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgbW9kZSBpcyB0aGUgb2N0YWwgdmFsdWUKICogMDY2NiBhbmQgdGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgdmFsdWUuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAmJGVycm9yX21lc3NhZ2UgW29wdGlvbmFsXSA8cD4KICogUGFzc2VkIGJ5IHJlZmVyZW5jZSBhbmQgaXMgc2V0IHRvIGhvbGQgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlCiAqIGV4cGxhaW5pbmcgd2h5IHRoZSBkYXRhYmFzZSBjb3VsZCBub3QgYmUgb3BlbmVkIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIDxwPmEgcmVzb3VyY2UgKGRhdGFiYXNlIGhhbmRsZSkgb24gc3VjY2VzcywgZmFsc2Ugb24gZXJyb3IuPC9wPgogKi8KZnVuY3Rpb24gc3FsaXRlX3BvcGVuKCRmaWxlbmFtZSwgJG1vZGUgPSBudWxsLCAmJGVycm9yX21lc3NhZ2UgPSBudWxsKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogQ2xvc2VzIGFuIG9wZW4gU1FMaXRlIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWNsb3NlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGRiaGFuZGxlIDxwPgogKiBUaGUgU1FMaXRlIERhdGFiYXNlIHJlc291cmNlOyByZXR1cm5lZCBmcm9tIHNxbGl0ZV9vcGVuCiAqIHdoZW4gdXNlZCBwcm9jZWR1cmFsbHkuCiAqIDwvcD4KICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBzcWxpdGVfY2xvc2UoJGRiaGFuZGxlKSB7fQoKLyoqCiAqIChQSFAgNSAmbHQ7IDUuNC4wLCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBFeGVjdXRlcyBhIHF1ZXJ5IGFnYWluc3QgYSBnaXZlbiBkYXRhYmFzZSBhbmQgcmV0dXJucyBhIHJlc3VsdCBoYW5kbGUKICogdGhlcmUgYXJlIHR3byBzaWduYXR1cmVzIHdpdGggPGk+JHF1ZXJ5PC9pPiBmaXJzdCBhbmQgd2l0aCA8aT4kZGJoYW5kbGU8L2k+IGZpcnN0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1xdWVyeS5waHAKICogQHBhcmFtIHN0cmluZ3xyZXNvdXJjZSAkcXVlcnkgPHA+CiAqIFRoZSBxdWVyeSB0byBiZSBleGVjdXRlZC4KICogPC9wPgogKiA8cD4KICogRGF0YSBpbnNpZGUgdGhlIHF1ZXJ5IHNob3VsZCBiZSBwcm9wZXJseSBlc2NhcGVkLgogKiA8L3A+CiAqIEBwYXJhbSByZXNvdXJjZXxzdHJpbmcgJGRiaGFuZGxlIFRoZSBTUUxpdGUgRGF0YWJhc2UgcmVzb3VyY2U7IHJldHVybmVkIGZyb20gc3FsaXRlX29wZW4oKSB3aGVuIHVzZWQgcHJvY2VkdXJhbGx5LiBUaGlzIHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgb2JqZWN0LW9yaWVudGVkIG1ldGhvZC4KICogQHBhcmFtIGludCAkcmVzdWx0X3R5cGUgW29wdGlvbmFsXSA8cD5UaGUgb3B0aW9uYWwgPGk+cmVzdWx0X3R5cGU8L2k+CiAqIHBhcmFtZXRlciBhY2NlcHRzIGEgY29uc3RhbnQgYW5kIGRldGVybWluZXMgaG93IHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGJlCiAqIGluZGV4ZWQuIFVzaW5nIDxiPlNRTElURV9BU1NPQzwvYj4gd2lsbCByZXR1cm4gb25seSBhc3NvY2lhdGl2ZQogKiBpbmRpY2VzIChuYW1lZCBmaWVsZHMpIHdoaWxlIDxiPlNRTElURV9OVU08L2I+IHdpbGwgcmV0dXJuCiAqIG9ubHkgbnVtZXJpY2FsIGluZGljZXMgKG9yZGluYWwgZmllbGQgbnVtYmVycykuIDxiPlNRTElURV9CT1RIPC9iPgogKiB3aWxsIHJldHVybiBib3RoIGFzc29jaWF0aXZlIGFuZCBudW1lcmljYWwgaW5kaWNlcy4KICogPGI+U1FMSVRFX0JPVEg8L2I+IGlzIHRoZSBkZWZhdWx0IGZvciB0aGlzIGZ1bmN0aW9uLjwvcD4KICogQHBhcmFtIHN0cmluZyAmJGVycm9yX21zZyBbb3B0aW9uYWxdIDxwPgogKiBUaGUgc3BlY2lmaWVkIHZhcmlhYmxlIHdpbGwgYmUgZmlsbGVkIGlmIGFuIGVycm9yIG9jY3Vycy4gVGhpcyBpcwogKiBzcGVjaWFsbHkgaW1wb3J0YW50IGJlY2F1c2UgU1FMIHN5bnRheCBlcnJvcnMgY2FuJ3QgYmUgZmV0Y2hlZCB1c2luZwogKiB0aGUKICoge0BzZWUgc3FsaXRlX2xhc3RfZXJyb3J9IGZ1bmN0aW9uLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSByZXN1bHQgaGFuZGxlIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBGb3IgcXVlcmllcyB0aGF0IHJldHVybiByb3dzLCB0aGUgcmVzdWx0IGhhbmRsZSBjYW4gdGhlbiBiZSB1c2VkIHdpdGgKICogZnVuY3Rpb25zIHN1Y2ggYXMKICoge0BzZWUgc3FsaXRlX2ZldGNoX2FycmF5fSBhbmQKICoge0BzZWUgc3FsaXRlX3NlZWt9LgogKiA8L3A+CiAqIDxwPgogKiBSZWdhcmRsZXNzIG9mIHRoZSBxdWVyeSB0eXBlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGZhbHNlIGlmIHRoZQogKiBxdWVyeSBmYWlsZWQuCiAqIDwvcD4KICogPHA+CiAqIHtAc2VlIHNxbGl0ZV9xdWVyeX0gcmV0dXJucyBhIGJ1ZmZlcmVkLCBzZWVrYWJsZSByZXN1bHQKICogaGFuZGxlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcmVhc29uYWJseSBzbWFsbCBxdWVyaWVzIHdoZXJlIHlvdSBuZWVkIHRvCiAqIGJlIGFibGUgdG8gcmFuZG9tbHkgYWNjZXNzIHRoZSByb3dzLiBCdWZmZXJlZCByZXN1bHQgaGFuZGxlcyB3aWxsCiAqIGFsbG9jYXRlIG1lbW9yeSB0byBob2xkIHRoZSBlbnRpcmUgcmVzdWx0IGFuZCB3aWxsIG5vdCByZXR1cm4gdW50aWwgaXQKICogaGFzIGJlZW4gZmV0Y2hlZC4gSWYgeW91IG9ubHkgbmVlZCBzZXF1ZW50aWFsIGFjY2VzcyB0byB0aGUgZGF0YSwgaXQgaXMKICogcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoZSBtdWNoIGhpZ2hlciBwZXJmb3JtYW5jZQogKiB7QHNlZSBzcWxpdGVfdW5idWZmZXJlZF9xdWVyeX0gaW5zdGVhZC4KICovCmZ1bmN0aW9uIHNxbGl0ZV9xdWVyeSgkcXVlcnksICRkYmhhbmRsZSwgJHJlc3VsdF90eXBlID0gU1FMSVRFX0JPVEgsICYkZXJyb3JfbXNnID0gbnVsbCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4zKTxici8+CiAqIEV4ZWN1dGVzIGEgcmVzdWx0LWxlc3MgcXVlcnkgYWdhaW5zdCBhIGdpdmVuIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWV4ZWMucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IDxwPgogKiBUaGUgcXVlcnkgdG8gYmUgZXhlY3V0ZWQuCiAqIDwvcD4KICogPHA+CiAqIERhdGEgaW5zaWRlIHRoZSBxdWVyeSBzaG91bGQgYmUgcHJvcGVybHkgZXNjYXBlZC4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGRiaGFuZGxlIDxwPgogKiBUaGUgU1FMaXRlIERhdGFiYXNlIHJlc291cmNlOyByZXR1cm5lZCBmcm9tCiAqIHtAc2VlIHNxbGl0ZV9vcGVuKCl9IHdoZW4gdXNlZCBwcm9jZWR1cmFsbHkuIFRoaXMgcGFyYW1ldGVyCiAqIGlzIG5vdCByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBvYmplY3Qtb3JpZW50ZWQgbWV0aG9kLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJiRlcnJvcl9tc2cgW29wdGlvbmFsXSA8cD4KICogVGhlIHNwZWNpZmllZCB2YXJpYWJsZSB3aWxsIGJlIGZpbGxlZCBpZiBhbiBlcnJvciBvY2N1cnMuIFRoaXMgaXMKICogc3BlY2lhbGx5IGltcG9ydGFudCBiZWNhdXNlIFNRTCBzeW50YXggZXJyb3JzIGNhbid0IGJlIGZldGNoZWQgdXNpbmcKICogdGhlCiAqIHtAc2VlIHNxbGl0ZV9sYXN0X2Vycm9yfSBmdW5jdGlvbi4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPHA+VGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhIGJvb2xlYW4gcmVzdWx0OyB0cnVlIGZvciBzdWNjZXNzIG9yIGZhbHNlIGZvciBmYWlsdXJlLgogKiBJZiB5b3UgbmVlZCB0byBydW4gYSBxdWVyeSB0aGF0IHJldHVybnMgcm93cywgc2VlIHNxbGl0ZV9xdWVyeS48L3A+CiAqLwpmdW5jdGlvbiBzcWxpdGVfZXhlYygkZGJoYW5kbGUsICRxdWVyeSwgJiRlcnJvcl9tc2cgPSBudWxsKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogRXhlY3V0ZSBhIHF1ZXJ5IGFnYWluc3QgYSBnaXZlbiBkYXRhYmFzZSBhbmQgcmV0dXJucyBhbiBhcnJheQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1hcnJheS1xdWVyeS5waHAKICogQHBhcmFtIHN0cmluZyAkcXVlcnkgPHA+CiAqIFRoZSBxdWVyeSB0byBiZSBleGVjdXRlZC4KICogPC9wPgogKiA8cD4KICogRGF0YSBpbnNpZGUgdGhlIHF1ZXJ5IHNob3VsZCBiZSBwcm9wZXJseSBlc2NhcGVkLgogKiA8L3A+CiAqIEBwYXJhbSByZXNvdXJjZSAkZGJoYW5kbGUgPHA+CiAqIFRoZSBTUUxpdGUgRGF0YWJhc2UgcmVzb3VyY2U7IHJldHVybmVkIGZyb20KICoge0BzZWUgc3FsaXRlX29wZW4oKX0KICogd2hlbiB1c2VkIHByb2NlZHVyYWxseS4gIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCByZXF1aXJlZAogKiB3aGVuIHVzaW5nIHRoZSBvYmplY3Qtb3JpZW50ZWQgbWV0aG9kLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHJlc3VsdF90eXBlIFtvcHRpb25hbF0gPHA+VGhlIG9wdGlvbmFsIDxpPnJlc3VsdF90eXBlPC9pPgogKiBwYXJhbWV0ZXIgYWNjZXB0cyBhIGNvbnN0YW50IGFuZCBkZXRlcm1pbmVzIGhvdyB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZQogKiBpbmRleGVkLiBVc2luZyA8Yj5TUUxJVEVfQVNTT0M8L2I+IHdpbGwgcmV0dXJuIG9ubHkgYXNzb2NpYXRpdmUKICogaW5kaWNlcyAobmFtZWQgZmllbGRzKSB3aGlsZSA8Yj5TUUxJVEVfTlVNPC9iPiB3aWxsIHJldHVybgogKiBvbmx5IG51bWVyaWNhbCBpbmRpY2VzIChvcmRpbmFsIGZpZWxkIG51bWJlcnMpLiA8Yj5TUUxJVEVfQk9USDwvYj4KICogd2lsbCByZXR1cm4gYm90aCBhc3NvY2lhdGl2ZSBhbmQgbnVtZXJpY2FsIGluZGljZXMuCiAqIDxiPlNRTElURV9CT1RIPC9iPiBpcyB0aGUgZGVmYXVsdCBmb3IgdGhpcyBmdW5jdGlvbi48L3A+CiAqIEBwYXJhbSBib29sICRkZWNvZGVfYmluYXJ5IFtvcHRpb25hbF0gPHA+V2hlbiB0aGUgPGk+ZGVjb2RlX2JpbmFyeTwvaT4KICogcGFyYW1ldGVyIGlzIHNldCB0byA8Yj5UUlVFPC9iPiAodGhlIGRlZmF1bHQpLCBQSFAgd2lsbCBkZWNvZGUgdGhlIGJpbmFyeSBlbmNvZGluZwogKiBpdCBhcHBsaWVkIHRvIHRoZSBkYXRhIGlmIGl0IHdhcyBlbmNvZGVkIHVzaW5nIHRoZQogKiB7QGxpbmsgc3FsaXRlX2VzY2FwZV9zdHJpbmcoKX0uICBZb3Ugc2hvdWxkIG5vcm1hbGx5IGxlYXZlIHRoaXMKICogdmFsdWUgYXQgaXRzIGRlZmF1bHQsIHVubGVzcyB5b3UgYXJlIGludGVyb3BlcmF0aW5nIHdpdGggZGF0YWJhc2VzIGNyZWF0ZWQgYnkKICogb3RoZXIgc3FsaXRlIGNhcGFibGUgYXBwbGljYXRpb25zLjwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBhbiBhcnJheSBvZiB0aGUgZW50aXJlIHJlc3VsdCBzZXQ7IGZhbHNlIG90aGVyd2lzZS4KICogPHA+VGhlIGNvbHVtbiBuYW1lcyByZXR1cm5lZCBieQogKiA8Yj5TUUxJVEVfQVNTT0M8L2I+IGFuZCA8Yj5TUUxJVEVfQk9USDwvYj4gd2lsbCBiZQogKiBjYXNlLWZvbGRlZCBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQogKiB7QGxpbmsgcGhwLm5ldC9lbi9zcWxpdGUuY29uZmlndXJhdGlvbi5waHAjaW5pLnNxbGl0ZS5hc3NvYy1jYXNlIHNxbGl0ZS5hc3NvY19jYXNlfSBjb25maWd1cmF0aW9uCiAqIG9wdGlvbi48L3A+CiAqLwpmdW5jdGlvbiBzcWxpdGVfYXJyYXlfcXVlcnkoJGRiaGFuZGxlLCAkcXVlcnksICRyZXN1bHRfdHlwZSA9IG51bGwsICRkZWNvZGVfYmluYXJ5ID0gbnVsbCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4xKTxici8+CiAqIEV4ZWN1dGVzIGEgcXVlcnkgYW5kIHJldHVybnMgZWl0aGVyIGFuIGFycmF5IGZvciBvbmUgc2luZ2xlIGNvbHVtbiBvciB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IHJvdwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1zaW5nbGUtcXVlcnkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZGIKICogQHBhcmFtIHN0cmluZyAkcXVlcnkKICogQHBhcmFtIGJvb2wgJGZpcnN0X3Jvd19vbmx5IFtvcHRpb25hbF0KICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXQogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiBzcWxpdGVfc2luZ2xlX3F1ZXJ5KCRkYiwgJHF1ZXJ5LCAkZmlyc3Rfcm93X29ubHkgPSBudWxsLCAkZGVjb2RlX2JpbmFyeSA9IG51bGwpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBGZXRjaGVzIHRoZSBuZXh0IHJvdyBmcm9tIGEgcmVzdWx0IHNldCBhcyBhbiBhcnJheQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1mZXRjaC1hcnJheS5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+VGhlIFNRTGl0ZSByZXN1bHQgcmVzb3VyY2UuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBvYmplY3Qtb3JpZW50ZWQgbWV0aG9kLjwvcD4KICogQHBhcmFtIGludCAkcmVzdWx0X3R5cGUgW29wdGlvbmFsXQogKiBAcGFyYW0gYm9vbCAkZGVjb2RlX2JpbmFyeSBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgPHA+YW4gYXJyYXkgb2YgdGhlIG5leHQgcm93IGZyb20gYSByZXN1bHQgc2V0OyBmYWxzZSBpZiB0aGUKICogbmV4dCBwb3NpdGlvbiBpcyBiZXlvbmQgdGhlIGZpbmFsIHJvdy48L3A+CiAqLwpmdW5jdGlvbiBzcWxpdGVfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgJHJlc3VsdF90eXBlID0gU1FMSVRFX0JPVEgsICRkZWNvZGVfYmluYXJ5ID0gbnVsbCkge30KCi8qKgogKiBGZXRjaGVzIHRoZSBuZXh0IHJvdyBmcm9tIGEgcmVzdWx0IHNldCBhcyBhbiBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtZmV0Y2gtb2JqZWN0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdAogKiBAcGFyYW0gc3RyaW5nICRjbGFzc19uYW1lIFtvcHRpb25hbF0KICogQHBhcmFtIG51bGx8YXJyYXkgJGN0b3JfcGFyYW1zIFtvcHRpb25hbF0KICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXQogKiBAcmV0dXJuIG9iamVjdAogKi8KZnVuY3Rpb24gc3FsaXRlX2ZldGNoX29iamVjdCgkcmVzdWx0LCAkY2xhc3NfbmFtZSA9IG51bGwsID9hcnJheSAkY3Rvcl9wYXJhbXMgPSBudWxsLCAkZGVjb2RlX2JpbmFyeSA9IG51bGwpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMSk8YnIvPgogKiBGZXRjaGVzIHRoZSBmaXJzdCBjb2x1bW4gb2YgYSByZXN1bHQgc2V0IGFzIGEgc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWZldGNoLXNpbmdsZS5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+VGhlIFNRTGl0ZSByZXN1bHQgcmVzb3VyY2UuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBvYmplY3Qtb3JpZW50ZWQgbWV0aG9kLjwvcD4KICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXSA8cD5XaGVuIHRoZSA8Yj5kZWNvZGVfYmluYXJ5PC9iPgogKiBwYXJhbWV0ZXIgaXMgc2V0IHRvIDxiPlRSVUU8L2I+ICh0aGUgZGVmYXVsdCksIFBIUCB3aWxsIGRlY29kZSB0aGUgYmluYXJ5IGVuY29kaW5nCiAqIGl0IGFwcGxpZWQgdG8gdGhlIGRhdGEgaWYgaXQgd2FzIGVuY29kZWQgdXNpbmcgdGhlCiAqIHtAc2VlIHNxbGl0ZV9lc2NhcGVfc3RyaW5nKCl9LiAgWW91IHNob3VsZCBub3JtYWxseSBsZWF2ZSB0aGlzCiAqIHZhbHVlIGF0IGl0cyBkZWZhdWx0LCB1bmxlc3MgeW91IGFyZSBpbnRlcm9wZXJhdGluZyB3aXRoIGRhdGFiYXNlcyBjcmVhdGVkIGJ5CiAqIG90aGVyIHNxbGl0ZSBjYXBhYmxlIGFwcGxpY2F0aW9ucy48L3A+CiAqIEByZXR1cm4gc3RyaW5nIDxwPnRoZSBmaXJzdCBjb2x1bW4gdmFsdWUsIGFzIGEgc3RyaW5nLjwvcD4KICovCmZ1bmN0aW9uIHNxbGl0ZV9mZXRjaF9zaW5nbGUoJHJlc3VsdCwgJGRlY29kZV9iaW5hcnkgPSBudWxsKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXM6CiAqIHtAc2VlIHNxbGl0ZV9mZXRjaF9zaW5nbGV9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWZldGNoLXN0cmluZy5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+VGhlIFNRTGl0ZSByZXN1bHQgcmVzb3VyY2UuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBvYmplY3Qtb3JpZW50ZWQgbWV0aG9kLjwvcD4KICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXSA8cD5XaGVuIHRoZSA8Yj5kZWNvZGVfYmluYXJ5PC9iPgogKiBwYXJhbWV0ZXIgaXMgc2V0IHRvIDxiPlRSVUU8L2I+ICh0aGUgZGVmYXVsdCksIFBIUCB3aWxsIGRlY29kZSB0aGUgYmluYXJ5IGVuY29kaW5nCiAqIGl0IGFwcGxpZWQgdG8gdGhlIGRhdGEgaWYgaXQgd2FzIGVuY29kZWQgdXNpbmcgdGhlCiAqIHtAc2VlIHNxbGl0ZV9lc2NhcGVfc3RyaW5nKCl9LiAgWW91IHNob3VsZCBub3JtYWxseSBsZWF2ZSB0aGlzCiAqIHZhbHVlIGF0IGl0cyBkZWZhdWx0LCB1bmxlc3MgeW91IGFyZSBpbnRlcm9wZXJhdGluZyB3aXRoIGRhdGFiYXNlcyBjcmVhdGVkIGJ5CiAqIG90aGVyIHNxbGl0ZSBjYXBhYmxlIGFwcGxpY2F0aW9ucy48L3A+CiAqIEByZXR1cm4gc3RyaW5nIDxwPnRoZSBmaXJzdCBjb2x1bW4gdmFsdWUsIGFzIGEgc3RyaW5nLjwvcD4KICovCmZ1bmN0aW9uIHNxbGl0ZV9mZXRjaF9zdHJpbmcoJHJlc3VsdCwgJGRlY29kZV9iaW5hcnkpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBGZXRjaGVzIGFsbCByb3dzIGZyb20gYSByZXN1bHQgc2V0IGFzIGFuIGFycmF5IG9mIGFycmF5cwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1mZXRjaC1hbGwucGhwCiAqIEBwYXJhbSBpbnQgJHJlc3VsdF90eXBlIFtvcHRpb25hbF0KICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXQogKiBAcmV0dXJuIGFycmF5IDxwPmFuIGFycmF5IG9mIHRoZSByZW1haW5pbmcgcm93cyBpbiBhIHJlc3VsdCBzZXQuIElmIGNhbGxlZCByaWdodAogKiBhZnRlcgogKiB7QHNlZSBzcWxpdGVfcXVlcnl9LCBpdCByZXR1cm5zIGFsbCByb3dzLiBJZiBjYWxsZWQKICogYWZ0ZXIKICoge0BzZWUgc3FsaXRlX2ZldGNoX2FycmF5fSwgaXQgcmV0dXJucyB0aGUgcmVzdC4gSWYKICogdGhlcmUgYXJlIG5vIHJvd3MgaW4gYSByZXN1bHQgc2V0LCBpdCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LjwvcD4KICogPHA+VGhlIGNvbHVtbiBuYW1lcyByZXR1cm5lZCBieSA8Yj5TUUxJVEVfQVNTT0M8L2I+IGFuZCA8Yj5TUUxJVEVfQk9USDwvYj4gd2lsbCBiZSBjYXNlLWZvbGRlZCBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZQogKiB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uZmlndXJhdGlvbi5waHAjaW5pLnNxbGl0ZS5hc3NvYy1jYXNlIHNxbGl0ZS5hc3NvY19jYXNlfSBjb25maWd1cmF0aW9uIG9wdGlvbi48L3A+CiAqLwpmdW5jdGlvbiBzcWxpdGVfZmV0Y2hfYWxsKCRyZXN1bHRfdHlwZSA9IG51bGwsICRkZWNvZGVfYmluYXJ5ID0gbnVsbCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKTxici8+CiAqIEZldGNoZXMgdGhlIGN1cnJlbnQgcm93IGZyb20gYSByZXN1bHQgc2V0IGFzIGFuIGFycmF5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWN1cnJlbnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPlRoZSBTUUxpdGUgcmVzdWx0IHJlc291cmNlLiBUaGlzIHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgb2JqZWN0LW9yaWVudGVkIG1ldGhvZC48L3A+CiAqIEBwYXJhbSBpbnQgJHJlc3VsdF90eXBlIFtvcHRpb25hbF0gPHA+VGhlIG9wdGlvbmFsIHJlc3VsdF90eXBlIHBhcmFtZXRlciBhY2NlcHRzIGEgY29uc3RhbnQgYW5kIGRldGVybWluZXMgaG93IHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGJlIGluZGV4ZWQuIFVzaW5nIDxiPlNRTElURV9BU1NPQzwvYj4gd2lsbCByZXR1cm4gb25seSBhc3NvY2lhdGl2ZSBpbmRpY2VzIChuYW1lZCBmaWVsZHMpIHdoaWxlIDxiPlNRTElURV9OVU08L2I+IHdpbGwgcmV0dXJuIG9ubHkgbnVtZXJpY2FsIGluZGljZXMgKG9yZGluYWwgZmllbGQgbnVtYmVycykuIDxiPlNRTElURV9CT1RIPC9iPiB3aWxsIHJldHVybiBib3RoIGFzc29jaWF0aXZlIGFuZCBudW1lcmljYWwgaW5kaWNlcy4gPGI+U1FMSVRFX0JPVEg8L2I+IGlzIHRoZSBkZWZhdWx0IGZvciB0aGlzIGZ1bmN0aW9uLjwvcD4KICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXSA8cD5XaGVuIHRoZSBkZWNvZGVfYmluYXJ5IHBhcmFtZXRlciBpcyBzZXQgdG8gPGI+VFJVRTwvYj4gKHRoZSBkZWZhdWx0KSwgUEhQIHdpbGwgZGVjb2RlIHRoZSBiaW5hcnkgZW5jb2RpbmcgaXQgYXBwbGllZCB0byB0aGUgZGF0YSBpZiBpdCB3YXMgZW5jb2RlZCB1c2luZyB0aGUgc3FsaXRlX2VzY2FwZV9zdHJpbmcoKS4gWW91IHNob3VsZCBub3JtYWxseSBsZWF2ZSB0aGlzIHZhbHVlIGF0IGl0cyBkZWZhdWx0LCB1bmxlc3MgeW91IGFyZSBpbnRlcm9wZXJhdGluZyB3aXRoIGRhdGFiYXNlcyBjcmVhdGVkIGJ5IG90aGVyIHNxbGl0ZSBjYXBhYmxlIGFwcGxpY2F0aW9ucy48L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXJyYXkgb2YgdGhlIGN1cnJlbnQgcm93IGZyb20gYSByZXN1bHQgc2V0OyBmYWxzZSBpZiB0aGUKICogY3VycmVudCBwb3NpdGlvbiBpcyBiZXlvbmQgdGhlIGZpbmFsIHJvdy4KICovCmZ1bmN0aW9uIHNxbGl0ZV9jdXJyZW50KCRyZXN1bHQsICRyZXN1bHRfdHlwZSA9IG51bGwsICRkZWNvZGVfYmluYXJ5ID0gbnVsbCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKTxici8+CiAqIEZldGNoZXMgYSBjb2x1bW4gZnJvbSB0aGUgY3VycmVudCByb3cgb2YgYSByZXN1bHQgc2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWNvbHVtbi5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+VGhlIFNRTGl0ZSByZXN1bHQgcmVzb3VyY2UuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBvYmplY3Qtb3JpZW50ZWQgbWV0aG9kLjwvcD4KICogQHBhcmFtIG1peGVkICRpbmRleF9vcl9uYW1lIDxwPgogKiBUaGUgY29sdW1uIGluZGV4IG9yIG5hbWUgdG8gZmV0Y2guCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJGRlY29kZV9iaW5hcnkgW29wdGlvbmFsXSA8cD5XaGVuIHRoZSA8Yj5kZWNvZGVfYmluYXJ5PC9iPgogKiBwYXJhbWV0ZXIgaXMgc2V0IHRvIDxiPlRSVUU8L2I+ICh0aGUgZGVmYXVsdCksIFBIUCB3aWxsIGRlY29kZSB0aGUgYmluYXJ5IGVuY29kaW5nCiAqIGl0IGFwcGxpZWQgdG8gdGhlIGRhdGEgaWYgaXQgd2FzIGVuY29kZWQgdXNpbmcgdGhlCiAqIHtAc2VlIHNxbGl0ZV9lc2NhcGVfc3RyaW5nKCl9LiAgWW91IHNob3VsZCBub3JtYWxseSBsZWF2ZSB0aGlzCiAqIHZhbHVlIGF0IGl0cyBkZWZhdWx0LCB1bmxlc3MgeW91IGFyZSBpbnRlcm9wZXJhdGluZyB3aXRoIGRhdGFiYXNlcyBjcmVhdGVkIGJ5CiAqIG90aGVyIHNxbGl0ZSBjYXBhYmxlIGFwcGxpY2F0aW9ucy48L3A+CiAqIEByZXR1cm4gbWl4ZWQgdGhlIGNvbHVtbiB2YWx1ZS4KICovCmZ1bmN0aW9uIHNxbGl0ZV9jb2x1bW4oJHJlc3VsdCwgJGluZGV4X29yX25hbWUsICRkZWNvZGVfYmluYXJ5ID0gbnVsbCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKTxici8+CiAqIFJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIGxpbmtlZCBTUUxpdGUgbGlicmFyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1saWJ2ZXJzaW9uLnBocAogKiBAcmV0dXJuIHN0cmluZyB0aGUgbGlicmFyeSB2ZXJzaW9uLCBhcyBhIHN0cmluZy4KICovCmZ1bmN0aW9uIHNxbGl0ZV9saWJ2ZXJzaW9uKCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKTxici8+CiAqIFJldHVybnMgdGhlIGVuY29kaW5nIG9mIHRoZSBsaW5rZWQgU1FMaXRlIGxpYnJhcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtbGliZW5jb2RpbmcucGhwCiAqIEByZXR1cm4gc3RyaW5nIHRoZSBsaWJyYXJ5IGVuY29kaW5nLgogKi8KZnVuY3Rpb24gc3FsaXRlX2xpYmVuY29kaW5nKCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKTxici8+CiAqIFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIHRoYXQgd2VyZSBjaGFuZ2VkIGJ5IHRoZSBtb3N0CiAqIHJlY2VudCBTUUwgc3RhdGVtZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWNoYW5nZXMucGhwCiAqIEBwYXJhbSAkZGIKICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBjaGFuZ2VkIHJvd3MuCiAqLwpmdW5jdGlvbiBzcWxpdGVfY2hhbmdlcygkZGIpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXR1cm5zIHRoZSByb3dpZCBvZiB0aGUgbW9zdCByZWNlbnRseSBpbnNlcnRlZCByb3cKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtbGFzdC1pbnNlcnQtcm93aWQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZGJoYW5kbGUgPHA+VGhlIFNRTGl0ZSBEYXRhYmFzZSByZXNvdXJjZTsgcmV0dXJuZWQgZnJvbQogKiB7QHNlZSBzcWxpdGVfb3BlbigpfSB3aGVuIHVzZWQgcHJvY2VkdXJhbGx5LiBUaGlzIHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgb2JqZWN0LW9yaWVudGVkIG1ldGhvZC48L3A+CiAqIEByZXR1cm4gaW50IHRoZSByb3cgaWQsIGFzIGFuIGludGVnZXIuCiAqLwpmdW5jdGlvbiBzcWxpdGVfbGFzdF9pbnNlcnRfcm93aWQoJGRiaGFuZGxlKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gYSBidWZmZXJlZCByZXN1bHQgc2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLW51bS1yb3dzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogVGhlIFNRTGl0ZSByZXN1bHQgcmVzb3VyY2UuICBUaGlzIHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZwogKiB0aGUgb2JqZWN0LW9yaWVudGVkIG1ldGhvZC4KICogPC9wPgogKiA8YmxvY2txdW90ZT48cD48Yj5Ob3RlPC9iPjogPC9wPjxwPlRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgd2l0aAogKiB1bmJ1ZmZlcmVkIHJlc3VsdCBoYW5kbGVzLjwvcD48L2Jsb2NrcXVvdGU+CiAqIEByZXR1cm4gaW50IHRoZSBudW1iZXIgb2Ygcm93cywgYXMgYW4gaW50ZWdlci4KICovCmZ1bmN0aW9uIHNxbGl0ZV9udW1fcm93cygkcmVzdWx0KSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpbiBhIHJlc3VsdCBzZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtbnVtLWZpZWxkcy5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+VGhlIFNRTGl0ZSByZXN1bHQgcmVzb3VyY2UuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBvYmplY3Qtb3JpZW50ZWQgbWV0aG9kLjwvcD4KICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBmaWVsZHMsIGFzIGFuIGludGVnZXIuCiAqLwpmdW5jdGlvbiBzcWxpdGVfbnVtX2ZpZWxkcygkcmVzdWx0KSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogUmV0dXJucyB0aGUgbmFtZSBvZiBhIHBhcnRpY3VsYXIgZmllbGQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtZmllbGQtbmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+VGhlIFNRTGl0ZSByZXN1bHQgcmVzb3VyY2UuIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBvYmplY3Qtb3JpZW50ZWQgbWV0aG9kLjwvcD4KICogQHBhcmFtIGludCAkZmllbGRfaW5kZXggPHA+CiAqIFRoZSBvcmRpbmFsIGNvbHVtbiBudW1iZXIgaW4gdGhlIHJlc3VsdCBzZXQuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgdGhlIG5hbWUgb2YgYSBmaWVsZCBpbiBhbiBTUUxpdGUgcmVzdWx0IHNldCwgZ2l2ZW4gdGhlIG9yZGluYWwKICogY29sdW1uIG51bWJlcjsgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBzcWxpdGVfZmllbGRfbmFtZSgkcmVzdWx0LCAkZmllbGRfaW5kZXgpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBTZWVrIHRvIGEgcGFydGljdWxhciByb3cgbnVtYmVyIG9mIGEgYnVmZmVyZWQgcmVzdWx0IHNldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1zZWVrLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogVGhlIFNRTGl0ZSByZXN1bHQgcmVzb3VyY2UuICBUaGlzIHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZwogKiB0aGUgb2JqZWN0LW9yaWVudGVkIG1ldGhvZC4KICogPC9wPgogKiA8YmxvY2txdW90ZT48cD48Yj5Ob3RlPC9iPjogPC9wPjxwPlRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgd2l0aAogKiB1bmJ1ZmZlcmVkIHJlc3VsdCBoYW5kbGVzLjwvcD48L2Jsb2NrcXVvdGU+CiAqIEBwYXJhbSBpbnQgJHJvd251bSA8cD4KICogVGhlIG9yZGluYWwgcm93IG51bWJlciB0byBzZWVrIHRvLiBUaGUgcm93IG51bWJlciBpcyB6ZXJvLWJhc2VkICgwIGlzCiAqIHRoZSBmaXJzdCByb3cpLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCBmYWxzZSBpZiB0aGUgcm93IGRvZXMgbm90IGV4aXN0LCB0cnVlIG90aGVyd2lzZS4KICovCmZ1bmN0aW9uIHNxbGl0ZV9zZWVrKCRyZXN1bHQsICRyb3dudW0pIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBTZWVrIHRvIHRoZSBmaXJzdCByb3cgbnVtYmVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLXJld2luZC5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+CiAqIFRoZSBTUUxpdGUgcmVzdWx0IHJlc291cmNlLiAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHJlcXVpcmVkIHdoZW4gdXNpbmcKICogdGhlIG9iamVjdC1vcmllbnRlZCBtZXRob2QuCiAqIDwvcD4KICogPGJsb2NrcXVvdGU+PHA+PGI+Tm90ZTwvYj46IDwvcD48cD5UaGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGgKICogdW5idWZmZXJlZCByZXN1bHQgaGFuZGxlcy48L3A+PC9ibG9ja3F1b3RlPgogKiBAcmV0dXJuIGJvb2wgZmFsc2UgaWYgdGhlcmUgYXJlIG5vIHJvd3MgaW4gdGhlIHJlc3VsdCBzZXQsIHRydWUgb3RoZXJ3aXNlLgogKi8KZnVuY3Rpb24gc3FsaXRlX3Jld2luZCgkcmVzdWx0KSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogU2VlayB0byB0aGUgbmV4dCByb3cgbnVtYmVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLW5leHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBUaGUgU1FMaXRlIHJlc3VsdCByZXNvdXJjZS4gIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCByZXF1aXJlZCB3aGVuIHVzaW5nCiAqIHRoZSBvYmplY3Qtb3JpZW50ZWQgbWV0aG9kLgogKiA8L3A+CiAqIDxibG9ja3F1b3RlPjxwPjxiPk5vdGU8L2I+OiA8L3A+PHA+VGhpcyBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoCiAqIHVuYnVmZmVyZWQgcmVzdWx0IGhhbmRsZXMuPC9wPjwvYmxvY2txdW90ZT4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MsIG9yIDxiPkZBTFNFPC9iPiBpZiB0aGVyZSBhcmUgbm8gbW9yZSByb3dzLgogKi8KZnVuY3Rpb24gc3FsaXRlX25leHQoJHJlc3VsdCkge30KCi8qKgogKiBTZWVrIHRvIHRoZSBwcmV2aW91cyByb3cgbnVtYmVyIG9mIGEgcmVzdWx0IHNldAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1wcmV2LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogVGhlIFNRTGl0ZSByZXN1bHQgcmVzb3VyY2UuICBUaGlzIHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZwogKiB0aGUgb2JqZWN0LW9yaWVudGVkIG1ldGhvZC4KICogPC9wPgogKiA8YmxvY2txdW90ZT48cD48Yj5Ob3RlPC9iPjogPC9wPjxwPlRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgd2l0aAogKiB1bmJ1ZmZlcmVkIHJlc3VsdCBoYW5kbGVzLjwvcD48L2Jsb2NrcXVvdGU+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIGlmIHRoZXJlIGFyZSBubyBtb3JlIHByZXZpb3VzIHJvd3MuCiAqLwpmdW5jdGlvbiBzcWxpdGVfcHJldigkcmVzdWx0KSB7fQoKLyoqCiAqIFJldHVybnMgd2hldGhlciBtb3JlIHJvd3MgYXJlIGF2YWlsYWJsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS12YWxpZC5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQgPHA+CiAqIFRoZSBTUUxpdGUgcmVzdWx0IHJlc291cmNlLiAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHJlcXVpcmVkIHdoZW4gdXNpbmcKICogdGhlIG9iamVjdC1vcmllbnRlZCBtZXRob2QuCiAqIDwvcD4KICogPGJsb2NrcXVvdGU+PHA+PGI+Tm90ZTwvYj46IDwvcD48cD5UaGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGgKICogdW5idWZmZXJlZCByZXN1bHQgaGFuZGxlcy48L3A+PC9ibG9ja3F1b3RlPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlcmUgYXJlIG1vcmUgcm93cyBhdmFpbGFibGUgZnJvbSB0aGUKICogcmVzdWx0IGhhbmRsZSwgb3IgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICovCmZ1bmN0aW9uIHNxbGl0ZV92YWxpZCgkcmVzdWx0KSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogRmluZHMgd2hldGhlciBvciBub3QgbW9yZSByb3dzIGFyZSBhdmFpbGFibGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtaGFzLW1vcmUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0IDxwPgogKiBUaGUgU1FMaXRlIHJlc3VsdCByZXNvdXJjZS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlcmUgYXJlIG1vcmUgcm93cyBhdmFpbGFibGUgZnJvbSB0aGUKICogcmVzdWx0IGhhbmRsZSwgb3IgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICovCmZ1bmN0aW9uIHNxbGl0ZV9oYXNfbW9yZSgkcmVzdWx0KSB7fQoKLyoqCiAqIFJldHVybnMgd2hldGhlciBvciBub3QgYSBwcmV2aW91cyByb3cgaXMgYXZhaWxhYmxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWhhcy1wcmV2LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdCA8cD4KICogVGhlIFNRTGl0ZSByZXN1bHQgcmVzb3VyY2UuICBUaGlzIHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZwogKiB0aGUgb2JqZWN0LW9yaWVudGVkIG1ldGhvZC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlcmUgYXJlIG1vcmUgcHJldmlvdXMgcm93cyBhdmFpbGFibGUgZnJvbSB0aGUKICogcmVzdWx0IGhhbmRsZSwgb3IgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICovCmZ1bmN0aW9uIHNxbGl0ZV9oYXNfcHJldigkcmVzdWx0KSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogRXNjYXBlcyBhIHN0cmluZyBmb3IgdXNlIGFzIGEgcXVlcnkgcGFyYW1ldGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWVzY2FwZS1zdHJpbmcucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGl0ZW0gPHA+CiAqIFRoZSBzdHJpbmcgYmVpbmcgcXVvdGVkLgogKiA8L3A+CiAqIDxwPgogKiBJZiB0aGUgaXRlbSBjb250YWlucyBhIE5VTAogKiBjaGFyYWN0ZXIsIG9yIGlmIGl0IGJlZ2lucyB3aXRoIGEgY2hhcmFjdGVyIHdob3NlIG9yZGluYWwgdmFsdWUgaXMKICogMHgwMSwgUEhQIHdpbGwgYXBwbHkgYSBiaW5hcnkgZW5jb2Rpbmcgc2NoZW1lIHNvIHRoYXQKICogeW91IGNhbiBzYWZlbHkgc3RvcmUgYW5kIHJldHJpZXZlIGJpbmFyeSBkYXRhLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIGFuIGVzY2FwZWQgc3RyaW5nIGZvciB1c2UgaW4gYW4gU1FMaXRlIFNRTCBzdGF0ZW1lbnQuCiAqLwpmdW5jdGlvbiBzcWxpdGVfZXNjYXBlX3N0cmluZygkaXRlbSkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKTxici8+CiAqIFNldCBidXN5IHRpbWVvdXQgZHVyYXRpb24sIG9yIGRpc2FibGUgYnVzeSBoYW5kbGVycwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1idXN5LXRpbWVvdXQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZGJoYW5kbGUgPHA+VGhlIFNRTGl0ZSBEYXRhYmFzZSByZXNvdXJjZTsgcmV0dXJuZWQgZnJvbQogKiB7QHNlZSBzcWxpdGVfb3BlbigpfSB3aGVuIHVzZWQgcHJvY2VkdXJhbGx5LgogKiBUaGlzIHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgb2JqZWN0LW9yaWVudGVkIG1ldGhvZC48L3A+CiAqIEBwYXJhbSBpbnQgJG1pbGxpc2Vjb25kcyA8cD4KICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMuIFdoZW4gc2V0IHRvCiAqIDAsIGJ1c3kgaGFuZGxlcnMgd2lsbCBiZSBkaXNhYmxlZCBhbmQgU1FMaXRlIHdpbGwKICogcmV0dXJuIGltbWVkaWF0ZWx5IHdpdGggYSA8Yj5TUUxJVEVfQlVTWTwvYj4gc3RhdHVzIGNvZGUKICogaWYgYW5vdGhlciBwcm9jZXNzL3RocmVhZCBoYXMgdGhlIGRhdGFiYXNlIGxvY2tlZCBmb3IgYW4gdXBkYXRlLgogKiA8L3A+CiAqIDxwPgogKiBQSFAgc2V0cyB0aGUgZGVmYXVsdCBidXN5IHRpbWVvdXQgdG8gYmUgNjAgc2Vjb25kcyB3aGVuIHRoZSBkYXRhYmFzZSBpcwogKiBvcGVuZWQuCiAqIDwvcD4KICogPHA+CiAqIFRoZXJlIGFyZSBvbmUgdGhvdXNhbmQgKDEwMDApIG1pbGxpc2Vjb25kcyBpbiBvbmUgc2Vjb25kLgogKiA8L3A+CiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gc3FsaXRlX2J1c3lfdGltZW91dCgkZGJoYW5kbGUsICRtaWxsaXNlY29uZHMpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXR1cm5zIHRoZSBlcnJvciBjb2RlIG9mIHRoZSBsYXN0IGVycm9yIGZvciBhIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWxhc3QtZXJyb3IucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZGJoYW5kbGUgPHA+VGhlIFNRTGl0ZSBEYXRhYmFzZSByZXNvdXJjZTsgcmV0dXJuZWQgZnJvbQogKiB7QHNlZSBzcWxpdGVfb3BlbigpfSB3aGVuIHVzZWQgcHJvY2VkdXJhbGx5LgogKiBUaGlzIHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgb2JqZWN0LW9yaWVudGVkIG1ldGhvZC48L3A+CiAqIEByZXR1cm4gaW50IGFuIGVycm9yIGNvZGUsIG9yIDAgaWYgbm8gZXJyb3Igb2NjdXJyZWQuCiAqLwpmdW5jdGlvbiBzcWxpdGVfbGFzdF9lcnJvcigkZGJoYW5kbGUpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXR1cm5zIHRoZSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIGFuIGVycm9yIGNvZGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtZXJyb3Itc3RyaW5nLnBocAogKiBAcGFyYW0gaW50ICRlcnJvcl9jb2RlIDxwPgogKiBUaGUgZXJyb3IgY29kZSBiZWluZyB1c2VkLCB3aGljaCBtaWdodCBiZSBwYXNzZWQgaW4gZnJvbQogKiB7QHNlZSBzcWxpdGVfbGFzdF9lcnJvcn0uCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgYSBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3JfY29kZSwKICogYXMgYSBzdHJpbmcuCiAqLwpmdW5jdGlvbiBzcWxpdGVfZXJyb3Jfc3RyaW5nKCRlcnJvcl9jb2RlKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogRXhlY3V0ZSBhIHF1ZXJ5IHRoYXQgZG9lcyBub3QgcHJlZmV0Y2ggYW5kIGJ1ZmZlciBhbGwgZGF0YQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS11bmJ1ZmZlcmVkLXF1ZXJ5LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGRiaGFuZGxlIDxwPlRoZSBTUUxpdGUgRGF0YWJhc2UgcmVzb3VyY2U7IHJldHVybmVkIGZyb20KICoge0BzZWUgc3FsaXRlX29wZW4oKX0gd2hlbiB1c2VkIHByb2NlZHVyYWxseS4KICogVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIG9iamVjdC1vcmllbnRlZCBtZXRob2QuPC9wPgogKiBAcGFyYW0gc3RyaW5nICRxdWVyeSA8cD4KICogVGhlIHF1ZXJ5IHRvIGJlIGV4ZWN1dGVkLgogKiA8L3A+CiAqIDxwPgogKiBEYXRhIGluc2lkZSB0aGUgcXVlcnkgc2hvdWxkIGJlIHByb3Blcmx5IGVzY2FwZWQuCiAqIDwvcD4KICogQHBhcmFtIGludCAkcmVzdWx0X3R5cGUgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nICYkZXJyb3JfbXNnIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBzcGVjaWZpZWQgdmFyaWFibGUgd2lsbCBiZSBmaWxsZWQgaWYgYW4gZXJyb3Igb2NjdXJzLiBUaGlzIGlzCiAqIHNwZWNpYWxseSBpbXBvcnRhbnQgYmVjYXVzZSBTUUwgc3ludGF4IGVycm9ycyBjYW4ndCBiZSBmZXRjaGVkIHVzaW5nCiAqIHRoZSBzcWxpdGVfbGFzdF9lcnJvciBmdW5jdGlvbi4KICogPC9wPgogKiBAcmV0dXJuIFNRTGl0ZVVuYnVmZmVyZWR8ZmFsc2UgYSByZXN1bHQgaGFuZGxlIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqIDxwPgogKiBzcWxpdGVfdW5idWZmZXJlZF9xdWVyeSByZXR1cm5zIGEgc2VxdWVudGlhbAogKiBmb3J3YXJkLW9ubHkgcmVzdWx0IHNldCB0aGF0IGNhbiBvbmx5IGJlIHVzZWQgdG8gcmVhZCBlYWNoIHJvdywgb25lIGFmdGVyCiAqIHRoZSBvdGhlci4KICogPC9wPgogKi8KZnVuY3Rpb24gc3FsaXRlX3VuYnVmZmVyZWRfcXVlcnkoJGRiaGFuZGxlLCAkcXVlcnksICRyZXN1bHRfdHlwZSA9IFNRTElURV9CT1RILCAmJGVycm9yX21zZyA9IG51bGwpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZWdpc3RlciBhbiBhZ2dyZWdhdGluZyBVREYgZm9yIHVzZSBpbiBTUUwgc3RhdGVtZW50cwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1jcmVhdGUtYWdncmVnYXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGRiaGFuZGxlIDxwPlRoZSBTUUxpdGUgRGF0YWJhc2UgcmVzb3VyY2U7IHJldHVybmVkIGZyb20KICoge0BzZWUgc3FsaXRlX29wZW4oKX0gd2hlbiB1c2VkIHByb2NlZHVyYWxseS4KICogVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIG9iamVjdC1vcmllbnRlZCBtZXRob2QuPC9wPgogKiBAcGFyYW0gc3RyaW5nICRmdW5jdGlvbl9uYW1lIDxwPgogKiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdXNlZCBpbiBTUUwgc3RhdGVtZW50cy4KICogPC9wPgogKiBAcGFyYW0gY2FsbGFibGUgJHN0ZXBfZnVuYyA8cD4KICogQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIHJvdyBvZiB0aGUgcmVzdWx0IHNldC4KICogPC9wPgogKiBAcGFyYW0gY2FsbGFibGUgJGZpbmFsaXplX2Z1bmMgPHA+CiAqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGFnZ3JlZ2F0ZSB0aGUgInN0ZXBwZWQiIGRhdGEgZnJvbSBlYWNoIHJvdy4KICogPC9wPgogKiBAcGFyYW0gaW50ICRudW1fYXJncyBbb3B0aW9uYWxdIDxwPgogKiBIaW50IHRvIHRoZSBTUUxpdGUgcGFyc2VyIGlmIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhY2NlcHRzIGEKICogcHJlZGV0ZXJtaW5lZCBudW1iZXIgb2YgYXJndW1lbnRzLgogKiA8L3A+CiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gc3FsaXRlX2NyZWF0ZV9hZ2dyZWdhdGUoJGRiaGFuZGxlLCAkZnVuY3Rpb25fbmFtZSwgJHN0ZXBfZnVuYywgJGZpbmFsaXplX2Z1bmMsICRudW1fYXJncyA9IG51bGwpIHt9CgovKioKICogKFBIUCA1LCBzcWxpdGUgJmd0Oz0gMS4wLjApPGJyLz4KICogUmVnaXN0ZXJzIGEgInJlZ3VsYXIiIFVzZXIgRGVmaW5lZCBGdW5jdGlvbiBmb3IgdXNlIGluIFNRTCBzdGF0ZW1lbnRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLWNyZWF0ZS1mdW5jdGlvbi5waHAKICogQHBhcmFtIHJlc291cmNlICRkYmhhbmRsZSA8cD5UaGUgU1FMaXRlIERhdGFiYXNlIHJlc291cmNlOyByZXR1cm5lZCBmcm9tCiAqIHtAc2VlIHNxbGl0ZV9vcGVuKCl9IHdoZW4gdXNlZCBwcm9jZWR1cmFsbHkuCiAqIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBvYmplY3Qtb3JpZW50ZWQgbWV0aG9kLjwvcD4KICogQHBhcmFtIHN0cmluZyAkZnVuY3Rpb25fbmFtZSA8cD4KICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHVzZWQgaW4gU1FMIHN0YXRlbWVudHMuCiAqIDwvcD4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayA8cD4KICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBkZWZpbmVkIFNRTCBmdW5jdGlvbi4KICogPC9wPgogKiBDYWxsYmFjayBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBhIHR5cGUgdW5kZXJzdG9vZCBieSBTUUxpdGUgKGkuZS4KICogc2NhbGFyIHR5cGUpLgogKiBAcGFyYW0gaW50ICRudW1fYXJncyBbb3B0aW9uYWxdIDxwPgogKiBIaW50IHRvIHRoZSBTUUxpdGUgcGFyc2VyIGlmIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhY2NlcHRzIGEKICogcHJlZGV0ZXJtaW5lZCBudW1iZXIgb2YgYXJndW1lbnRzLgogKiA8L3A+CiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gc3FsaXRlX2NyZWF0ZV9mdW5jdGlvbigkZGJoYW5kbGUsICRmdW5jdGlvbl9uYW1lLCAkY2FsbGJhY2ssICRudW1fYXJncyA9IG51bGwpIHt9CgovKioKICogT3BlbnMgYSBTUUxpdGUgZGF0YWJhc2UgYW5kIHJldHVybnMgYSBTUUxpdGVEYXRhYmFzZSBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zcWxpdGUtZmFjdG9yeS5waHAKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAqIFRoZSBmaWxlbmFtZSBvZiB0aGUgU1FMaXRlIGRhdGFiYXNlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG1vZGUgW29wdGlvbmFsXSA8cD4KICogVGhlIG1vZGUgb2YgdGhlIGZpbGUuIEludGVuZGVkIHRvIGJlIHVzZWQgdG8gb3BlbiB0aGUgZGF0YWJhc2UgaW4KICogcmVhZC1vbmx5IG1vZGUuIFByZXNlbnRseSwgdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBieSB0aGUgc3FsaXRlCiAqIGxpYnJhcnkuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBtb2RlIGlzIHRoZSBvY3RhbCB2YWx1ZQogKiAwNjY2IGFuZCB0aGlzIGlzIHRoZSByZWNvbW1lbmRlZCB2YWx1ZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICYkZXJyb3JfbWVzc2FnZSBbb3B0aW9uYWxdIDxwPgogKiBQYXNzZWQgYnkgcmVmZXJlbmNlIGFuZCBpcyBzZXQgdG8gaG9sZCBhIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2UKICogZXhwbGFpbmluZyB3aHkgdGhlIGRhdGFiYXNlIGNvdWxkIG5vdCBiZSBvcGVuZWQgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgogKiA8L3A+CiAqIEByZXR1cm4gU1FMaXRlRGF0YWJhc2V8bnVsbCBhIFNRTGl0ZURhdGFiYXNlIG9iamVjdCBvbiBzdWNjZXNzLCBudWxsIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gc3FsaXRlX2ZhY3RvcnkoJGZpbGVuYW1lLCAkbW9kZSA9IG51bGwsICYkZXJyb3JfbWVzc2FnZSA9IG51bGwpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIHNxbGl0ZSAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBFbmNvZGUgYmluYXJ5IGRhdGEgYmVmb3JlIHJldHVybmluZyBpdCBmcm9tIGFuIFVERgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS11ZGYtZW5jb2RlLWJpbmFyeS5waHAKICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICogVGhlIHN0cmluZyBiZWluZyBlbmNvZGVkLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIFRoZSBlbmNvZGVkIHN0cmluZy4KICovCmZ1bmN0aW9uIHNxbGl0ZV91ZGZfZW5jb2RlX2JpbmFyeSgkZGF0YSkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgc3FsaXRlICZndDs9IDEuMC4wKTxici8+CiAqIERlY29kZSBiaW5hcnkgZGF0YSBwYXNzZWQgYXMgcGFyYW1ldGVycyB0byBhbiA8YWNyb255bT5VREY8L2Fjcm9ueW0+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3FsaXRlLXVkZi1kZWNvZGUtYmluYXJ5LnBocAogKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPgogKiBUaGUgZW5jb2RlZCBkYXRhIHRoYXQgd2lsbCBiZSBkZWNvZGVkLCBkYXRhIHRoYXQgd2FzIGFwcGxpZWQgYnkgZWl0aGVyCiAqIHNxbGl0ZV91ZGZfZW5jb2RlX2JpbmFyeSBvcgogKiBzcWxpdGVfZXNjYXBlX3N0cmluZy4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyBUaGUgZGVjb2RlZCBzdHJpbmcuCiAqLwpmdW5jdGlvbiBzcWxpdGVfdWRmX2RlY29kZV9iaW5hcnkoJGRhdGEpIHt9CgovKioKICogUmV0dXJuIGFuIGFycmF5IG9mIGNvbHVtbiB0eXBlcyBmcm9tIGEgcGFydGljdWxhciB0YWJsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNxbGl0ZS1mZXRjaC1jb2x1bW4tdHlwZXMucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlX25hbWUgPHA+CiAqIFRoZSB0YWJsZSBuYW1lIHRvIHF1ZXJ5LgogKiA8L3A+CiAqIEBwYXJhbSByZXNvdXJjZSAkZGJoYW5kbGUgPHA+VGhlIFNRTGl0ZSBEYXRhYmFzZSByZXNvdXJjZTsgcmV0dXJuZWQgZnJvbQogKiB7QHNlZSBzcWxpdGVfb3BlbigpfSB3aGVuIHVzZWQgcHJvY2VkdXJhbGx5LgogKiBUaGlzIHBhcmFtZXRlciBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgb2JqZWN0LW9yaWVudGVkIG1ldGhvZC48L3A+CiAqIEBwYXJhbSBpbnQgJHJlc3VsdF90eXBlIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBvcHRpb25hbCByZXN1bHRfdHlwZSBwYXJhbWV0ZXIgYWNjZXB0cyBhCiAqIGNvbnN0YW50IGFuZCBkZXRlcm1pbmVzIGhvdyB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBiZSBpbmRleGVkLiBVc2luZwogKiA8Yj5TUUxJVEVfQVNTT0M8L2I+IHdpbGwgcmV0dXJuIG9ubHkgYXNzb2NpYXRpdmUgaW5kaWNlcwogKiAobmFtZWQgZmllbGRzKSB3aGlsZSA8Yj5TUUxJVEVfTlVNPC9iPiB3aWxsIHJldHVybiBvbmx5CiAqIG51bWVyaWNhbCBpbmRpY2VzIChvcmRpbmFsIGZpZWxkIG51bWJlcnMpLgogKiBTUUxJVEVfQk9USCB3aWxsIHJldHVybiBib3RoIGFzc29jaWF0aXZlIGFuZAogKiBudW1lcmljYWwgaW5kaWNlcy4gPGI+U1FMSVRFX0FTU09DPC9iPiBpcyB0aGUgZGVmYXVsdCBmb3IKICogdGhpcyBmdW5jdGlvbi4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIGFuIGFycmF5IG9mIGNvbHVtbiBkYXRhIHR5cGVzOyBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIHNxbGl0ZV9mZXRjaF9jb2x1bW5fdHlwZXMoJGRiaGFuZGxlLCAkdGFibGVfbmFtZSwgJHJlc3VsdF90eXBlID0gbnVsbCkge30KCi8qKgogKiBDb2x1bW5zIGFyZSByZXR1cm5lZCBpbnRvIHRoZSBhcnJheSBoYXZpbmcgYm90aCBhIG51bWVyaWNhbCBpbmRleAogKiBhbmQgdGhlIGZpZWxkIG5hbWUgYXMgdGhlIGFycmF5IGluZGV4LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTElURV9CT1RIJywgMyk7CgovKioKICogQ29sdW1ucyBhcmUgcmV0dXJuZWQgaW50byB0aGUgYXJyYXkgaGF2aW5nIGEgbnVtZXJpY2FsIGluZGV4IHRvIHRoZQogKiBmaWVsZHMuIFRoaXMgaW5kZXggc3RhcnRzIHdpdGggMCwgdGhlIGZpcnN0IGZpZWxkIGluIHRoZSByZXN1bHQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMSVRFX05VTScsIDIpOwoKLyoqCiAqIENvbHVtbnMgYXJlIHJldHVybmVkIGludG8gdGhlIGFycmF5IGhhdmluZyB0aGUgZmllbGQgbmFtZSBhcyB0aGUgYXJyYXkKICogaW5kZXguCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMSVRFX0FTU09DJywgMSk7CgovKioKICogU3VjY2Vzc2Z1bCByZXN1bHQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMSVRFX09LJywgMCk7CgovKioKICogU1FMIGVycm9yIG9yIG1pc3NpbmcgZGF0YWJhc2UuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMSVRFX0VSUk9SJywgMSk7CgovKioKICogQW4gaW50ZXJuYWwgbG9naWMgZXJyb3IgaW4gU1FMaXRlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTElURV9JTlRFUk5BTCcsIDIpOwoKLyoqCiAqIEFjY2VzcyBwZXJtaXNzaW9uIGRlbmllZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxJVEVfUEVSTScsIDMpOwoKLyoqCiAqIENhbGxiYWNrIHJvdXRpbmUgcmVxdWVzdGVkIGFuIGFib3J0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTElURV9BQk9SVCcsIDQpOwoKLyoqCiAqIFRoZSBkYXRhYmFzZSBmaWxlIGlzIGxvY2tlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxJVEVfQlVTWScsIDUpOwoKLyoqCiAqIEEgdGFibGUgaW4gdGhlIGRhdGFiYXNlIGlzIGxvY2tlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxJVEVfTE9DS0VEJywgNik7CgovKioKICogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTElURV9OT01FTScsIDcpOwoKLyoqCiAqIEF0dGVtcHQgdG8gd3JpdGUgYSByZWFkb25seSBkYXRhYmFzZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxJVEVfUkVBRE9OTFknLCA4KTsKCi8qKgogKiBPcGVyYXRpb24gdGVybWluYXRlZCBpbnRlcm5hbGx5LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTElURV9JTlRFUlJVUFQnLCA5KTsKCi8qKgogKiBEaXNrIEkvTyBlcnJvciBvY2N1cnJlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxJVEVfSU9FUlInLCAxMCk7CgovKioKICogVGhlIGRhdGFiYXNlIGRpc2sgaW1hZ2UgaXMgbWFsZm9ybWVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTElURV9DT1JSVVBUJywgMTEpOwoKLyoqCiAqIChJbnRlcm5hbCkgVGFibGUgb3IgcmVjb3JkIG5vdCBmb3VuZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxJVEVfTk9URk9VTkQnLCAxMik7CgovKioKICogSW5zZXJ0aW9uIGZhaWxlZCBiZWNhdXNlIGRhdGFiYXNlIGlzIGZ1bGwuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMSVRFX0ZVTEwnLCAxMyk7CgovKioKICogVW5hYmxlIHRvIG9wZW4gdGhlIGRhdGFiYXNlIGZpbGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMSVRFX0NBTlRPUEVOJywgMTQpOwoKLyoqCiAqIERhdGFiYXNlIGxvY2sgcHJvdG9jb2wgZXJyb3IuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMSVRFX1BST1RPQ09MJywgMTUpOwoKLyoqCiAqIChJbnRlcm5hbCkgRGF0YWJhc2UgdGFibGUgaXMgZW1wdHkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMSVRFX0VNUFRZJywgMTYpOwoKLyoqCiAqIFRoZSBkYXRhYmFzZSBzY2hlbWEgY2hhbmdlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxJVEVfU0NIRU1BJywgMTcpOwoKLyoqCiAqIFRvbyBtdWNoIGRhdGEgZm9yIG9uZSByb3cgb2YgYSB0YWJsZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxJVEVfVE9PQklHJywgMTgpOwoKLyoqCiAqIEFib3J0IGR1ZSB0byBjb25zdHJhaW50IHZpb2xhdGlvbi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxJVEVfQ09OU1RSQUlOVCcsIDE5KTsKCi8qKgogKiBEYXRhIHR5cGUgbWlzbWF0Y2guCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMSVRFX01JU01BVENIJywgMjApOwoKLyoqCiAqIExpYnJhcnkgdXNlZCBpbmNvcnJlY3RseS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxJVEVfTUlTVVNFJywgMjEpOwoKLyoqCiAqIFVzZXMgb2YgT1MgZmVhdHVyZXMgbm90IHN1cHBvcnRlZCBvbiBob3N0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTElURV9OT0xGUycsIDIyKTsKCi8qKgogKiBBdXRob3JpemVkIGZhaWxlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zcWxpdGUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxJVEVfQVVUSCcsIDIzKTsKCi8qKgogKiBGaWxlIG9wZW5lZCB0aGF0IGlzIG5vdCBhIGRhdGFiYXNlIGZpbGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMSVRFX05PVEFEQicsIDI2KTsKCi8qKgogKiBBdXhpbGlhcnkgZGF0YWJhc2UgZm9ybWF0IGVycm9yLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTElURV9GT1JNQVQnLCAyNCk7CgovKioKICogSW50ZXJuYWwgcHJvY2VzcyBoYXMgYW5vdGhlciByb3cgcmVhZHkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc3FsaXRlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMSVRFX1JPVycsIDEwMCk7CgovKioKICogSW50ZXJuYWwgcHJvY2VzcyBoYXMgZmluaXNoZWQgZXhlY3V0aW5nLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NxbGl0ZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTElURV9ET05FJywgMTAxKTsKPD9waHAKCi8vIFN0YXJ0IG9mIFNpbXBsZVhNTCB2LjAuMQp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcVGVudGF0aXZlVHlwZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxQdXJlOwoKLyoqCiAqIFJlcHJlc2VudHMgYW4gZWxlbWVudCBpbiBhbiBYTUwgZG9jdW1lbnQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3Muc2ltcGxleG1sZWxlbWVudC5waHAKICovCmNsYXNzIFNpbXBsZVhNTEVsZW1lbnQgaW1wbGVtZW50cyBUcmF2ZXJzYWJsZSwgQXJyYXlBY2Nlc3MsIENvdW50YWJsZSwgSXRlcmF0b3IsIFN0cmluZ2FibGUsIFJlY3Vyc2l2ZUl0ZXJhdG9yCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBTaW1wbGVYTUxFbGVtZW50IG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zaW1wbGV4bWxlbGVtZW50LmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgQSB3ZWxsLWZvcm1lZCBYTUwgc3RyaW5nIG9yIHRoZSBwYXRoIG9yIFVSTCB0byBhbiBYTUwgZG9jdW1lbnQgaWYgZGF0YV9pc191cmwgaXMgVFJVRS4KICAgICAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgT3B0aW9uYWxseSB1c2VkIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBMaWJ4bWwgcGFyYW1ldGVycy4KICAgICAqIEBwYXJhbSBib29sICRkYXRhSXNVUkwgQnkgZGVmYXVsdCwgZGF0YV9pc191cmwgaXMgRkFMU0UuCiAgICAgKiBVc2UgVFJVRSB0byBzcGVjaWZ5IHRoYXQgZGF0YSBpcyBhIHBhdGggb3IgVVJMIHRvIGFuIFhNTCBkb2N1bWVudCBpbnN0ZWFkIG9mIHN0cmluZyBkYXRhLgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlT3JQcmVmaXggTmFtZXNwYWNlIHByZWZpeCBvciBVUkkuCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNQcmVmaXggVFJVRSBpZiBucyBpcyBhIHByZWZpeCwgRkFMU0UgaWYgaXQncyBhIFVSSTsgZGVmYXVsdHMgdG8gRkFMU0UuCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbiBpZiB0aGUgWE1MIGRhdGEgY291bGQgbm90IGJlIHBhcnNlZC4KICAgICAqIEBzaW5jZSA1LjAuMQogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGRhdGEsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJG9wdGlvbnMgPSAwLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkZGF0YUlzVVJMID0gZmFsc2UsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWVzcGFjZU9yUHJlZml4ID0gIiIsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRpc1ByZWZpeCA9IGZhbHNlCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gZWxlbWVudCdzIGNoaWxkcmVuCiAgICAgKiBwcml2YXRlIE1ldGhvZCBub3QgY2FsbGFibGUgZGlyZWN0bHksIHN0dWIgZXhpc3RzIGZvciB0eXBlaGludCBvbmx5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIGNoaWxkIG5hbWUKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19nZXQoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYSB3ZWxsLWZvcm1lZCBYTUwgc3RyaW5nIGJhc2VkIG9uIFNpbXBsZVhNTCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NpbXBsZXhtbGVsZW1lbnQuYXN4bWwucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBbb3B0aW9uYWxdIDxwPgogICAgICogSWYgc3BlY2lmaWVkLCB0aGUgZnVuY3Rpb24gd3JpdGVzIHRoZSBkYXRhIHRvIHRoZSBmaWxlIHJhdGhlciB0aGFuCiAgICAgKiByZXR1cm5pbmcgaXQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xib29sIElmIHRoZSA8aT5maWxlbmFtZTwvaT4gaXNuJ3Qgc3BlY2lmaWVkLCB0aGlzIGZ1bmN0aW9uCiAgICAgKiByZXR1cm5zIGEgc3RyaW5nIG9uIHN1Y2Nlc3MgYW5kIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4gSWYgdGhlCiAgICAgKiBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLCBpdCByZXR1cm5zIDxiPlRSVUU8L2I+IGlmIHRoZSBmaWxlIHdhcyB3cml0dGVuCiAgICAgKiBzdWNjZXNzZnVsbHkgYW5kIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAgICAgKiBAc2luY2UgNS4wLjEKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGFzWE1MKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGZpbGVuYW1lID0gbnVsbCk6IHN0cmluZ3xib29sIHt9CgogICAgLyoqCiAgICAgKiBBbGlhcyBvZiA8Yj5TaW1wbGVYTUxFbGVtZW50Ojphc1hNTDwvYj4KICAgICAqIFJldHVybiBhIHdlbGwtZm9ybWVkIFhNTCBzdHJpbmcgYmFzZWQgb24gU2ltcGxlWE1MIGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc2ltcGxleG1sZWxlbWVudC5zYXZleG1sLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgW29wdGlvbmFsXSA8cD4KICAgICAqIElmIHNwZWNpZmllZCwgdGhlIGZ1bmN0aW9uIHdyaXRlcyB0aGUgZGF0YSB0byB0aGUgZmlsZSByYXRoZXIgdGhhbgogICAgICogcmV0dXJuaW5nIGl0LgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8Ym9vbCBJZiB0aGUgPGk+ZmlsZW5hbWU8L2k+IGlzbid0IHNwZWNpZmllZCwgdGhpcyBmdW5jdGlvbgogICAgICogcmV0dXJucyBhIHN0cmluZyBvbiBzdWNjZXNzIGFuZCBmYWxzZSBvbiBlcnJvci4gSWYgdGhlCiAgICAgKiBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkLCBpdCByZXR1cm5zIHRydWUgaWYgdGhlIGZpbGUgd2FzIHdyaXR0ZW4KICAgICAqIHN1Y2Nlc3NmdWxseSBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZVhNTCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRmaWxlbmFtZSA9IG51bGwpOiBzdHJpbmd8Ym9vbCB7fQoKICAgIC8qKgogICAgICogUnVucyBYUGF0aCBxdWVyeSBvbiBYTUwgZGF0YQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zaW1wbGV4bWxlbGVtZW50LnhwYXRoLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZXhwcmVzc2lvbiA8cD4KICAgICAqIEFuIFhQYXRoIHBhdGgKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RhdGljW118ZmFsc2V8bnVsbCBhbiBhcnJheSBvZiBTaW1wbGVYTUxFbGVtZW50IG9iamVjdHMgb3IgPGI+RkFMU0U8L2I+IGluCiAgICAgKiBjYXNlIG9mIGFuIGVycm9yLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24geHBhdGgoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGV4cHJlc3Npb24pOiBhcnJheXxmYWxzZXxudWxsIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgcHJlZml4L25zIGNvbnRleHQgZm9yIHRoZSBuZXh0IFhQYXRoIHF1ZXJ5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NpbXBsZXhtbGVsZW1lbnQucmVnaXN0ZXJ4cGF0aG5hbWVzcGFjZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeCA8cD4KICAgICAqIFRoZSBuYW1lc3BhY2UgcHJlZml4IHRvIHVzZSBpbiB0aGUgWFBhdGggcXVlcnkgZm9yIHRoZSBuYW1lc3BhY2UgZ2l2ZW4gaW4KICAgICAqIDxpPm5zPC9pPi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWVzcGFjZSA8cD4KICAgICAqIFRoZSBuYW1lc3BhY2UgdG8gdXNlIGZvciB0aGUgWFBhdGggcXVlcnkuIFRoaXMgbXVzdCBtYXRjaCBhIG5hbWVzcGFjZSBpbgogICAgICogdXNlIGJ5IHRoZSBYTUwgZG9jdW1lbnQgb3IgdGhlIFhQYXRoIHF1ZXJ5IHVzaW5nCiAgICAgKiA8aT5wcmVmaXg8L2k+IHdpbGwgbm90IHJldHVybiBhbnkgcmVzdWx0cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXJYUGF0aE5hbWVzcGFjZSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcHJlZml4LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lc3BhY2UKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIElkZW50aWZpZXMgYW4gZWxlbWVudCdzIGF0dHJpYnV0ZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc2ltcGxleG1sZWxlbWVudC5hdHRyaWJ1dGVzLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlT3JQcmVmaXggW29wdGlvbmFsXSA8cD4KICAgICAqIEFuIG9wdGlvbmFsIG5hbWVzcGFjZSBmb3IgdGhlIHJldHJpZXZlZCBhdHRyaWJ1dGVzCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkaXNQcmVmaXggW29wdGlvbmFsXSA8cD4KICAgICAqIERlZmF1bHQgdG8gPGI+RkFMU0U8L2I+CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0YXRpY3xudWxsIGEgPGI+U2ltcGxlWE1MRWxlbWVudDwvYj4gb2JqZWN0IHRoYXQgY2FuIGJlCiAgICAgKiBpdGVyYXRlZCBvdmVyIHRvIGxvb3AgdGhyb3VnaCB0aGUgYXR0cmlidXRlcyBvbiB0aGUgdGFnLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBSZXR1cm5zIDxiPk5VTEw8L2I+IGlmIGNhbGxlZCBvbiBhIDxiPlNpbXBsZVhNTEVsZW1lbnQ8L2I+CiAgICAgKiBvYmplY3QgdGhhdCBhbHJlYWR5IHJlcHJlc2VudHMgYW4gYXR0cmlidXRlIGFuZCBub3QgYSB0YWcuCiAgICAgKiBAc2luY2UgNS4wLjEKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGF0dHJpYnV0ZXMoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbmFtZXNwYWNlT3JQcmVmaXggPSBudWxsLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkaXNQcmVmaXggPSBmYWxzZQogICAgKTogP3N0YXRpYyB7fQoKICAgIC8qKgogICAgICogRmluZHMgY2hpbGRyZW4gb2YgZ2l2ZW4gbm9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zaW1wbGV4bWxlbGVtZW50LmNoaWxkcmVuLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlT3JQcmVmaXggW29wdGlvbmFsXSA8cD4KICAgICAqIEFuIFhNTCBuYW1lc3BhY2UuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkaXNQcmVmaXggW29wdGlvbmFsXSA8cD4KICAgICAqIElmIDxpPmlzX3ByZWZpeDwvaT4gaXMgPGI+VFJVRTwvYj4sCiAgICAgKiA8aT5uczwvaT4gd2lsbCBiZSByZWdhcmRlZCBhcyBhIHByZWZpeC4gSWYgPGI+RkFMU0U8L2I+LAogICAgICogPGk+bnM8L2k+IHdpbGwgYmUgcmVnYXJkZWQgYXMgYSBuYW1lc3BhY2UKICAgICAqIFVSTC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RhdGljfG51bGwgYSA8Yj5TaW1wbGVYTUxFbGVtZW50PC9iPiBlbGVtZW50LCB3aGV0aGVyIHRoZSBub2RlCiAgICAgKiBoYXMgY2hpbGRyZW4gb3Igbm90LgogICAgICogQHNpbmNlIDUuMC4xCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGlsZHJlbigKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRuYW1lc3BhY2VPclByZWZpeCA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRpc1ByZWZpeCA9IGZhbHNlCiAgICApOiA/c3RhdGljIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIG5hbWVzcGFjZXMgdXNlZCBpbiBkb2N1bWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zaW1wbGV4bWxlbGVtZW50LmdldG5hbWVzcGFjZXMucGhwCiAgICAgKiBAcGFyYW0gYm9vbCAkcmVjdXJzaXZlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJZiBzcGVjaWZpZWQsIHJldHVybnMgYWxsIG5hbWVzcGFjZXMgdXNlZCBpbiBwYXJlbnQgYW5kIGNoaWxkIG5vZGVzLgogICAgICogT3RoZXJ3aXNlLCByZXR1cm5zIG9ubHkgbmFtZXNwYWNlcyB1c2VkIGluIHJvb3Qgbm9kZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYXJyYXkgVGhlIGdldE5hbWVzcGFjZXMgbWV0aG9kIHJldHVybnMgYW4gYXJyYXkgb2YKICAgICAqIG5hbWVzcGFjZSBuYW1lcyB3aXRoIHRoZWlyIGFzc29jaWF0ZWQgVVJJcy4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlcygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJHJlY3Vyc2l2ZSA9IGZhbHNlKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgbmFtZXNwYWNlcyBkZWNsYXJlZCBpbiBkb2N1bWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zaW1wbGV4bWxlbGVtZW50LmdldGRvY25hbWVzcGFjZXMucGhwCiAgICAgKiBAcGFyYW0gYm9vbCAkcmVjdXJzaXZlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJZiBzcGVjaWZpZWQsIHJldHVybnMgYWxsIG5hbWVzcGFjZXMgZGVjbGFyZWQgaW4gcGFyZW50IGFuZCBjaGlsZCBub2Rlcy4KICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyBvbmx5IG5hbWVzcGFjZXMgZGVjbGFyZWQgaW4gcm9vdCBub2RlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGJvb2wgJGZyb21Sb290IFtvcHRpb25hbF0gPHA+CiAgICAgKiBBbGxvd3MgeW91IHRvIHJlY3Vyc2l2ZWx5IGNoZWNrIG5hbWVzcGFjZXMgdW5kZXIgYSBjaGlsZCBub2RlIGluc3RlYWQgb2YKICAgICAqIGZyb20gdGhlIHJvb3Qgb2YgdGhlIFhNTCBkb2MuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGFycmF5IFRoZSBnZXREb2NOYW1lc3BhY2VzIG1ldGhvZCByZXR1cm5zIGFuIGFycmF5CiAgICAgKiBvZiBuYW1lc3BhY2UgbmFtZXMgd2l0aCB0aGVpciBhc3NvY2lhdGVkIFVSSXMuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tQdXJlXQogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldERvY05hbWVzcGFjZXMoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRyZWN1cnNpdmUgPSBmYWxzZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJGZyb21Sb290ID0gdHJ1ZQogICAgKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIFhNTCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NpbXBsZXhtbGVsZW1lbnQuZ2V0bmFtZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBnZXROYW1lIG1ldGhvZCByZXR1cm5zIGFzIGEgc3RyaW5nIHRoZQogICAgICogbmFtZSBvZiB0aGUgWE1MIHRhZyByZWZlcmVuY2VkIGJ5IHRoZSBTaW1wbGVYTUxFbGVtZW50IG9iamVjdC4KICAgICAqIEBzaW5jZSA1LjEuMwogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEFkZHMgYSBjaGlsZCBlbGVtZW50IHRvIHRoZSBYTUwgbm9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zaW1wbGV4bWxlbGVtZW50LmFkZGNoaWxkLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcXVhbGlmaWVkTmFtZSA8cD4KICAgICAqIFRoZSBuYW1lIG9mIHRoZSBjaGlsZCBlbGVtZW50IHRvIGFkZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJZiBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBvZiB0aGUgY2hpbGQgZWxlbWVudC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWVzcGFjZSBbb3B0aW9uYWxdIDxwPgogICAgICogSWYgc3BlY2lmaWVkLCB0aGUgbmFtZXNwYWNlIHRvIHdoaWNoIHRoZSBjaGlsZCBlbGVtZW50IGJlbG9uZ3MuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0YXRpY3xudWxsIFRoZSBhZGRDaGlsZCBtZXRob2QgcmV0dXJucyBhIFNpbXBsZVhNTEVsZW1lbnQKICAgICAqIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGFkZGVkIHRvIHRoZSBYTUwgbm9kZS4KICAgICAqIEBzaW5jZSA1LjEuMwogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkQ2hpbGQoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHF1YWxpZmllZE5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUgPSBudWxsLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWVzcGFjZSA9IG51bGwKICAgICk6ID9zdGF0aWMge30KCiAgICAvKioKICAgICAqIEFkZHMgYW4gYXR0cmlidXRlIHRvIHRoZSBTaW1wbGVYTUwgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zaW1wbGV4bWxlbGVtZW50LmFkZGF0dHJpYnV0ZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1YWxpZmllZE5hbWUgPHA+CiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIGFkZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2UgW29wdGlvbmFsXSA8cD4KICAgICAqIElmIHNwZWNpZmllZCwgdGhlIG5hbWVzcGFjZSB0byB3aGljaCB0aGUgYXR0cmlidXRlIGJlbG9uZ3MuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAgICAgKiBAc2luY2UgNS4xLjMKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGFkZEF0dHJpYnV0ZSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcXVhbGlmaWVkTmFtZSwKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSAkdmFsdWUgPSBudWxsLAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSBzdHJpbmcgJHZhbHVlLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWVzcGFjZSA9IG51bGwKICAgICk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHN0cmluZyBjb250ZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NpbXBsZXhtbGVsZW1lbnQudG9zdHJpbmcucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgc3RyaW5nIGNvbnRlbnQgb24gc3VjY2VzcyBvciBhbiBlbXB0eSBzdHJpbmcgb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSA1LjMKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBDb3VudHMgdGhlIGNoaWxkcmVuIG9mIGFuIGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc2ltcGxleG1sZWxlbWVudC5jb3VudC5waHAKICAgICAqIEByZXR1cm4gaW50PDAsbWF4PiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGFuIGVsZW1lbnQuCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQge30KCiAgICAvKioKICAgICAqIENsYXNzIHByb3ZpZGVzIGFjY2VzcyB0byBjaGlsZHJlbiBieSBwb3NpdGlvbiwgYW5kIGF0dHJpYnV0ZXMgYnkgbmFtZQogICAgICogcHJpdmF0ZSBNZXRob2Qgbm90IGNhbGxhYmxlIGRpcmVjdGx5LCBzdHViIGV4aXN0cyBmb3IgdHlwZWhpbnQgb25seQogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJG9mZnNldAogICAgICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRvZmZzZXQpIHt9CgogICAgLyoqCiAgICAgKiBDbGFzcyBwcm92aWRlcyBhY2Nlc3MgdG8gY2hpbGRyZW4gYnkgcG9zaXRpb24sIGFuZCBhdHRyaWJ1dGVzIGJ5IG5hbWUKICAgICAqIHByaXZhdGUgTWV0aG9kIG5vdCBjYWxsYWJsZSBkaXJlY3RseSwgc3R1YiBleGlzdHMgZm9yIHR5cGVoaW50IG9ubHkKICAgICAqIEBwYXJhbSBzdHJpbmd8aW50ICRvZmZzZXQKICAgICAqIEByZXR1cm4gc3RhdGljIEVpdGhlciBhIG5hbWVkIGF0dHJpYnV0ZSBvciBhbiBlbGVtZW50IGZyb20gYSBsaXN0IG9mIGNoaWxkcmVuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG9mZnNldCkge30KCiAgICAvKioKICAgICAqIENsYXNzIHByb3ZpZGVzIGFjY2VzcyB0byBjaGlsZHJlbiBieSBwb3NpdGlvbiwgYW5kIGF0dHJpYnV0ZXMgYnkgbmFtZQogICAgICogcHJpdmF0ZSBNZXRob2Qgbm90IGNhbGxhYmxlIGRpcmVjdGx5LCBzdHViIGV4aXN0cyBmb3IgdHlwZWhpbnQgb25seQogICAgICogQHBhcmFtIHN0cmluZ3xpbnQgJG9mZnNldAogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQ2xhc3MgcHJvdmlkZXMgYWNjZXNzIHRvIGNoaWxkcmVuIGJ5IHBvc2l0aW9uLCBhbmQgYXR0cmlidXRlcyBieSBuYW1lCiAgICAgKiBwcml2YXRlIE1ldGhvZCBub3QgY2FsbGFibGUgZGlyZWN0bHksIHN0dWIgZXhpc3RzIGZvciB0eXBlaGludCBvbmx5CiAgICAgKiBAcGFyYW0gc3RyaW5nfGludCAkb2Zmc2V0CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRvZmZzZXQpIHt9CgogICAgLyoqCiAgICAgKiBSZXdpbmQgdG8gdGhlIGZpcnN0IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc2ltcGxleG1saXRlcmF0b3IucmV3aW5kLnBocAogICAgICogQHJldHVybiB2b2lkIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyB2YWxpZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zaW1wbGV4bWxpdGVyYXRvci52YWxpZC5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIHZhbGlkLCBvdGhlcndpc2UgPGI+RkFMU0U8L2I+CiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc2ltcGxleG1saXRlcmF0b3IuY3VycmVudC5waHAKICAgICAqIEByZXR1cm4gc3RhdGljfG51bGwgdGhlIGN1cnJlbnQgZWxlbWVudCBhcyBhIDxiPlNpbXBsZVhNTEVsZW1lbnQ8L2I+IG9iamVjdCBvciA8Yj5OVUxMPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1B1cmVdCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpOiA/c3RhdGljIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gY3VycmVudCBrZXkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc2ltcGxleG1saXRlcmF0b3Iua2V5LnBocAogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIFhNTCB0YWcgbmFtZSBvZiB0aGUgZWxlbWVudCByZWZlcmVuY2VkIGJ5IHRoZSBjdXJyZW50IDxiPlNpbXBsZVhNTEl0ZXJhdG9yPC9iPiBvYmplY3QKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICdzdHJpbmd8ZmFsc2UnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKSB7fQoKICAgIC8qKgogICAgICogTW92ZSB0byBuZXh0IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc2ltcGxleG1saXRlcmF0b3IubmV4dC5waHAKICAgICAqIEByZXR1cm4gdm9pZCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAc2luY2UgOC4wCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNDaGlsZHJlbigpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC4wCiAgICAgKi8KICAgICNbUHVyZV0KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDaGlsZHJlbigpOiA/U2ltcGxlWE1MRWxlbWVudCB7fQp9CgovKioKICogVGhlIFNpbXBsZVhNTEl0ZXJhdG9yIHByb3ZpZGVzIHJlY3Vyc2l2ZSBpdGVyYXRpb24gb3ZlciBhbGwgbm9kZXMgb2YgYSA8Yj5TaW1wbGVYTUxFbGVtZW50PC9iPiBvYmplY3QuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3Muc2ltcGxleG1saXRlcmF0b3IucGhwCiAqLwpjbGFzcyBTaW1wbGVYTUxJdGVyYXRvciBleHRlbmRzIFNpbXBsZVhNTEVsZW1lbnQgaW1wbGVtZW50cyBSZWN1cnNpdmVJdGVyYXRvciwgQ291bnRhYmxlLCBTdHJpbmdhYmxlCnsKICAgIC8qKgogICAgICogUmV3aW5kIHRvIHRoZSBmaXJzdCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NpbXBsZXhtbGl0ZXJhdG9yLnJld2luZC5waHAKICAgICAqIEByZXR1cm4gdm9pZCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgdmFsaWQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc2ltcGxleG1saXRlcmF0b3IudmFsaWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyB2YWxpZCwgb3RoZXJ3aXNlIDxiPkZBTFNFPC9iPgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NpbXBsZXhtbGl0ZXJhdG9yLmN1cnJlbnQucGhwCiAgICAgKiBAcmV0dXJuIHN0YXRpY3xudWxsIHRoZSBjdXJyZW50IGVsZW1lbnQgYXMgYSA8Yj5TaW1wbGVYTUxJdGVyYXRvcjwvYj4gb2JqZWN0IG9yIDxiPk5VTEw8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkge30KCiAgICAvKioKICAgICAqIFJldHVybiBjdXJyZW50IGtleQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zaW1wbGV4bWxpdGVyYXRvci5rZXkucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgWE1MIHRhZyBuYW1lIG9mIHRoZSBlbGVtZW50IHJlZmVyZW5jZWQgYnkgdGhlIGN1cnJlbnQgPGI+U2ltcGxlWE1MSXRlcmF0b3I8L2I+IG9iamVjdCBvciA8Yj5GQUxTRTwvYj4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpIHt9CgogICAgLyoqCiAgICAgKiBNb3ZlIHRvIG5leHQgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zaW1wbGV4bWxpdGVyYXRvci5uZXh0LnBocAogICAgICogQHJldHVybiB2b2lkIE5vIHZhbHVlIGlzIHJldHVybmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBlbGVtZW50IGhhcyBzdWIgZWxlbWVudHMuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3NpbXBsZXhtbGl0ZXJhdG9yLmhhc2NoaWxkcmVuLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaGFzIHN1Yi1lbGVtZW50cywgb3RoZXJ3aXNlIDxiPkZBTFNFPC9iPgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzQ2hpbGRyZW4oKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgc3ViLWVsZW1lbnRzIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vc2ltcGxleG1saXRlcmF0b3IuZ2V0Y2hpbGRyZW4ucGhwCiAgICAgKiBAcmV0dXJuIFNpbXBsZVhNTEl0ZXJhdG9yIGEgPGI+U2ltcGxlWE1MSXRlcmF0b3I8L2I+IG9iamVjdCBjb250YWluaW5nCiAgICAgKiB0aGUgc3ViLWVsZW1lbnRzIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQuCiAgICAgKi8KICAgICNbUHVyZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDaGlsZHJlbigpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zaW1wbGV4bWxlbGVtZW50LnRvc3RyaW5nLnBocAogICAgICogQHJldHVybiBzdHJpbmcgdGhlIHN0cmluZyBjb250ZW50IG9uIHN1Y2Nlc3Mgb3IgYW4gZW1wdHkgc3RyaW5nIG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS4zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkge30KCiAgICAvKioKICAgICAqIENvdW50cyB0aGUgY2hpbGRyZW4gb2YgYW4gZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9zaW1wbGV4bWxlbGVtZW50LmNvdW50LnBocAogICAgICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBvZiBhbiBlbGVtZW50LgogICAgICovCiAgICAjW1B1cmVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKSB7fQp9CgovKioKICogSW50ZXJwcmV0cyBhbiBYTUwgZmlsZSBpbnRvIGFuIG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNpbXBsZXhtbC1sb2FkLWZpbGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIDxwPgogKiBQYXRoIHRvIHRoZSBYTUwgZmlsZQogKiA8L3A+CiAqIDxwPgogKiBMaWJ4bWwgMiB1bmVzY2FwZXMgdGhlIFVSSSwgc28gaWYgeW91IHdhbnQgdG8gcGFzcyBlLmcuCiAqIGImYyBhcyB0aGUgVVJJIHBhcmFtZXRlciBhLAogKiB5b3UgaGF2ZSB0byBjYWxsCiAqIHNpbXBsZXhtbF9sb2FkX2ZpbGUocmF3dXJsZW5jb2RlKCdodHRwczovL2V4YW1wbGUuY29tLz9hPScgLgogKiB1cmxlbmNvZGUoJ2ImYycpKSkuIFNpbmNlIFBIUCA1LjEuMCB5b3UgZG9uJ3QgbmVlZCB0byBkbwogKiB0aGlzIGJlY2F1c2UgUEhQIHdpbGwgZG8gaXQgZm9yIHlvdS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNsYXNzX25hbWUgW29wdGlvbmFsXSA8cD4KICogWW91IG1heSB1c2UgdGhpcyBvcHRpb25hbCBwYXJhbWV0ZXIgc28gdGhhdAogKiA8Yj5zaW1wbGV4bWxfbG9hZF9maWxlPC9iPiB3aWxsIHJldHVybiBhbiBvYmplY3Qgb2YKICogdGhlIHNwZWNpZmllZCBjbGFzcy4gVGhhdCBjbGFzcyBzaG91bGQgZXh0ZW5kIHRoZQogKiBTaW1wbGVYTUxFbGVtZW50IGNsYXNzLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgW29wdGlvbmFsXSA8cD4KICogU2luY2UgUEhQIDUuMS4wIGFuZCBMaWJ4bWwgMi42LjAsIHlvdSBtYXkgYWxzbyB1c2UgdGhlCiAqIDxpPm9wdGlvbnM8L2k+IHBhcmFtZXRlciB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgTGlieG1sIHBhcmFtZXRlcnMuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlX29yX3ByZWZpeCBbb3B0aW9uYWxdIDxwPgogKiBOYW1lc3BhY2UgcHJlZml4IG9yIFVSSS4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkaXNfcHJlZml4IFtvcHRpb25hbF0gPHA+CiAqIDxiPlRSVUU8L2I+IGlmIDxpPm5zPC9pPiBpcyBhIHByZWZpeCwgPGI+RkFMU0U8L2I+IGlmIGl0J3MgYSBVUkk7CiAqIGRlZmF1bHRzIHRvIDxiPkZBTFNFPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIFNpbXBsZVhNTEVsZW1lbnR8ZmFsc2UgYW4gb2JqZWN0IG9mIGNsYXNzIFNpbXBsZVhNTEVsZW1lbnQgd2l0aAogKiBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgdGhlIGRhdGEgaGVsZCB3aXRoaW4gdGhlIFhNTCBkb2N1bWVudCwgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzaW1wbGV4bWxfbG9hZF9maWxlKHN0cmluZyAkZmlsZW5hbWUsID9zdHJpbmcgJGNsYXNzX25hbWUgPSAiU2ltcGxlWE1MRWxlbWVudCIsIGludCAkb3B0aW9ucyA9IDAsIHN0cmluZyAkbmFtZXNwYWNlX29yX3ByZWZpeCA9ICIiLCBib29sICRpc19wcmVmaXggPSBmYWxzZSk6IFNpbXBsZVhNTEVsZW1lbnR8ZmFsc2Uge30KCi8qKgogKiBJbnRlcnByZXRzIGEgc3RyaW5nIG9mIFhNTCBpbnRvIGFuIG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNpbXBsZXhtbC1sb2FkLXN0cmluZy5waHAKICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICogQSB3ZWxsLWZvcm1lZCBYTUwgc3RyaW5nCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRjbGFzc19uYW1lIFtvcHRpb25hbF0gPHA+CiAqIFlvdSBtYXkgdXNlIHRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIHNvIHRoYXQKICogPGI+c2ltcGxleG1sX2xvYWRfc3RyaW5nPC9iPiB3aWxsIHJldHVybiBhbiBvYmplY3Qgb2YKICogdGhlIHNwZWNpZmllZCBjbGFzcy4gVGhhdCBjbGFzcyBzaG91bGQgZXh0ZW5kIHRoZQogKiBTaW1wbGVYTUxFbGVtZW50IGNsYXNzLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgW29wdGlvbmFsXSA8cD4KICogU2luY2UgUEhQIDUuMS4wIGFuZCBMaWJ4bWwgMi42LjAsIHlvdSBtYXkgYWxzbyB1c2UgdGhlCiAqIDxpPm9wdGlvbnM8L2k+IHBhcmFtZXRlciB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgTGlieG1sIHBhcmFtZXRlcnMuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlX29yX3ByZWZpeCBbb3B0aW9uYWxdIDxwPgogKiBOYW1lc3BhY2UgcHJlZml4IG9yIFVSSS4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkaXNfcHJlZml4IFtvcHRpb25hbF0gPHA+CiAqIDxiPlRSVUU8L2I+IGlmIDxpPm5zPC9pPiBpcyBhIHByZWZpeCwgPGI+RkFMU0U8L2I+IGlmIGl0J3MgYSBVUkk7CiAqIGRlZmF1bHRzIHRvIDxiPkZBTFNFPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIFNpbXBsZVhNTEVsZW1lbnR8ZmFsc2UgYW4gb2JqZWN0IG9mIGNsYXNzIFNpbXBsZVhNTEVsZW1lbnQgd2l0aAogKiBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgdGhlIGRhdGEgaGVsZCB3aXRoaW4gdGhlIHhtbCBkb2N1bWVudCwgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoc3RyaW5nICRkYXRhLCA/c3RyaW5nICRjbGFzc19uYW1lID0gIlNpbXBsZVhNTEVsZW1lbnQiLCBpbnQgJG9wdGlvbnMgPSAwLCBzdHJpbmcgJG5hbWVzcGFjZV9vcl9wcmVmaXggPSAiIiwgYm9vbCAkaXNfcHJlZml4ID0gZmFsc2UpOiBTaW1wbGVYTUxFbGVtZW50fGZhbHNlIHt9CgovKioKICogR2V0IGEgU2ltcGxlWE1MRWxlbWVudCBvYmplY3QgZnJvbSBhIERPTSBub2RlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNpbXBsZXhtbC1pbXBvcnQtZG9tLnBocAogKiBAcGFyYW0gU2ltcGxlWE1MRWxlbWVudHxET01Ob2RlICRub2RlIDxwPgogKiBBIERPTSBFbGVtZW50IG5vZGUKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNsYXNzX25hbWUgW29wdGlvbmFsXSA8cD4KICogWW91IG1heSB1c2UgdGhpcyBvcHRpb25hbCBwYXJhbWV0ZXIgc28gdGhhdAogKiA8Yj5zaW1wbGV4bWxfaW1wb3J0X2RvbTwvYj4gd2lsbCByZXR1cm4gYW4gb2JqZWN0IG9mCiAqIHRoZSBzcGVjaWZpZWQgY2xhc3MuIFRoYXQgY2xhc3Mgc2hvdWxkIGV4dGVuZCB0aGUKICogU2ltcGxlWE1MRWxlbWVudCBjbGFzcy4KICogPC9wPgogKiBAcmV0dXJuIFNpbXBsZVhNTEVsZW1lbnR8bnVsbCBhIFNpbXBsZVhNTEVsZW1lbnQgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBzaW1wbGV4bWxfaW1wb3J0X2RvbSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjQnID0+ICdvYmplY3QnXSwgZGVmYXVsdDogJ1NpbXBsZVhNTEVsZW1lbnR8RE9NTm9kZScpXSAkbm9kZSwgP3N0cmluZyAkY2xhc3NfbmFtZSA9ICJTaW1wbGVYTUxFbGVtZW50Iik6ID9TaW1wbGVYTUxFbGVtZW50IHt9CgovLyBFbmQgb2YgU2ltcGxlWE1MIHYuMC4xCjw/cGhwCgovLyBTdGFydCBvZiByZWNvZGUgdi4KCi8qKgogKiBSZWNvZGUgYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgcmVjb2RlIHJlcXVlc3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5yZWNvZGUtc3RyaW5nLnBocAogKiBAcGFyYW0gc3RyaW5nICRyZXF1ZXN0IDxwPgogKiBUaGUgZGVzaXJlZCByZWNvZGUgcmVxdWVzdCB0eXBlCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogKiBUaGUgc3RyaW5nIHRvIGJlIHJlY29kZWQKICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgcmVjb2RlZCBzdHJpbmcgb3IgPGI+RkFMU0U8L2I+LCBpZiB1bmFibGUgdG8KICogcGVyZm9ybSB0aGUgcmVjb2RlIHJlcXVlc3QuCiAqIEByZW1vdmVkIDcuNAogKi8KZnVuY3Rpb24gcmVjb2RlX3N0cmluZygkcmVxdWVzdCwgJHN0cmluZykge30KCi8qKgogKiBSZWNvZGUgZnJvbSBmaWxlIHRvIGZpbGUgYWNjb3JkaW5nIHRvIHJlY29kZSByZXF1ZXN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucmVjb2RlLWZpbGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHJlcXVlc3QgPHA+CiAqIFRoZSBkZXNpcmVkIHJlY29kZSByZXF1ZXN0IHR5cGUKICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJGlucHV0IDxwPgogKiBBIGxvY2FsIGZpbGUgaGFuZGxlIHJlc291cmNlIGZvcgogKiB0aGUgPGk+aW5wdXQ8L2k+CiAqIDwvcD4KICogQHBhcmFtIHJlc291cmNlICRvdXRwdXQgPHA+CiAqIEEgbG9jYWwgZmlsZSBoYW5kbGUgcmVzb3VyY2UgZm9yCiAqIHRoZSA8aT5vdXRwdXQ8L2k+CiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPkZBTFNFPC9iPiwgaWYgdW5hYmxlIHRvIGNvbXBseSwgPGI+VFJVRTwvYj4gb3RoZXJ3aXNlLgogKiBAcmVtb3ZlZCA3LjQKICovCmZ1bmN0aW9uIHJlY29kZV9maWxlKCRyZXF1ZXN0LCAkaW5wdXQsICRvdXRwdXQpIHt9CgovKioKICogQWxpYXMgb2YgPGI+cmVjb2RlX3N0cmluZzwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5yZWNvZGUucGhwCiAqIEBwYXJhbSAkcmVxdWVzdAogKiBAcGFyYW0gJHN0cgogKiBAcmVtb3ZlZCA3LjQKICovCmZ1bmN0aW9uIHJlY29kZSgkcmVxdWVzdCwgJHN0cikge30KCi8vIEVuZCBvZiByZWNvZGUgdi4KPD9waHAKCm5hbWVzcGFjZSB7CiAgICBkZWZpbmUoJ1lBRlxWRVJTSU9OJywgJzMuMC44JywgdHJ1ZSk7CiAgICBkZWZpbmUoJ1lBRlxFTlZJUk9OJywgJ3Byb2R1Y3QnLCB0cnVlKTsKICAgIGRlZmluZSgnWUFGXEVSUlxTVEFSVFVQXEZBSUxFRCcsIDUxMiwgdHJ1ZSk7CiAgICBkZWZpbmUoJ1lBRlxFUlJcUk9VVEVcRkFJTEVEJywgNTEzLCB0cnVlKTsKICAgIGRlZmluZSgnWUFGXEVSUlxESVNQQVRDSFxGQUlMRUQnLCA1MTQsIHRydWUpOwogICAgZGVmaW5lKCdZQUZcRVJSXE5PVEZPVU5EXE1PRFVMRScsIDUxNSwgdHJ1ZSk7CiAgICBkZWZpbmUoJ1lBRlxFUlJcTk9URk9VTkRcQ09OVFJPTExFUicsIDUxNiwgdHJ1ZSk7CiAgICBkZWZpbmUoJ1lBRlxFUlJcTk9URk9VTkRcQUNUSU9OJywgNTE3LCB0cnVlKTsKICAgIGRlZmluZSgnWUFGXEVSUlxOT1RGT1VORFxWSUVXJywgNTE4LCB0cnVlKTsKICAgIGRlZmluZSgnWUFGXEVSUlxDQUxMXEZBSUxFRCcsIDUxOSwgdHJ1ZSk7CiAgICBkZWZpbmUoJ1lBRlxFUlJcQVVUT0xPQURcRkFJTEVEJywgNTIwLCB0cnVlKTsKICAgIGRlZmluZSgnWUFGXEVSUlxUWVBFXEVSUk9SJywgNTIxLCB0cnVlKTsKfQoKbmFtZXNwYWNlIFlhZiB7CiAgICB1c2UgWWFmOwoKLyoqCiAqIFxZYWZcQXBwbGljYXRpb24gcHJvdmlkZXMgYSBib290c3RyYXBwaW5nIGZhY2lsaXR5IGZvciBhcHBsaWNhdGlvbnMgd2hpY2ggcHJvdmlkZXMgcmV1c2FibGUgcmVzb3VyY2VzLCBjb21tb24tIGFuZCBtb2R1bGUtYmFzZWQgYm9vdHN0cmFwIGNsYXNzZXMgYW5kIGRlcGVuZGVuY3kgY2hlY2tpbmcuCiAqIDxici8+CiAqIDxiPk5vdGU6PC9iPgogKiA8cD4KICogXFlhZlxBcHBsaWNhdGlvbiBpbXBsZW1lbnRzIHRoZSBzaW5nbGV0b24gcGF0dGVybiwgYW5kIFxZYWZcQXBwbGljYXRpb24gY2FuIG5vdCBiZSBzZXJpYWxpemVkIG9yIHVuLXNlcmlhbGl6ZWQgd2hpY2ggd2lsbCBjYXVzZSBwcm9ibGVtIHdoZW4geW91IHRyeSB0byB1c2UgUEhQVW5pdCB0byB3cml0ZSBzb21lIHRlc3QgY2FzZSBmb3IgWWFmLjxici8+CiAqIFlvdSBtYXkgdXNlICYjNjQ7YmFja3VwR2xvYmFscyBhbm5vdGF0aW9uIG9mIFBIUFVuaXQgdG8gY29udHJvbCB0aGUgYmFja3VwIGFuZCByZXN0b3JlIG9wZXJhdGlvbnMgZm9yIGdsb2JhbCB2YXJpYWJsZXMuIHRodXMgY2FuIHNvbHZlIHRoaXMgcHJvYmxlbS4KICogPC9wPgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtYXBwbGljYXRpb24ucGhwCiAqLwpmaW5hbCBjbGFzcyBBcHBsaWNhdGlvbgp7CiAgICAvKioKICAgICAqIEB2YXIgXFlhZlxBcHBsaWNhdGlvbgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljICRfYXBwOwoKICAgIC8qKgogICAgICogQHZhciBcWWFmXENvbmZpZ19BYnN0cmFjdAogICAgICovCiAgICBwcm90ZWN0ZWQgJGNvbmZpZzsKCiAgICAvKioKICAgICAqIEB2YXIgXFlhZlxEaXNwYXRjaGVyCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZGlzcGF0Y2hlcjsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRfbW9kdWxlczsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3J1bm5pbmcgPSAiIjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2Vudmlyb24gPSBZQUZfRU5WSVJPTjsKCiAgICAvKioKICAgICAqIEBzaW5jZSAyLjEuMgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJvdGVjdGVkICRfZXJyX25vID0gMDsKCiAgICAvKioKICAgICAqIEBzaW5jZSAyLjEuMgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRfZXJyX21zZyA9ICIiOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWFwcGxpY2F0aW9uLmNvbnN0cnVjdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRjb25maWcgQSBpbmkgY29uZmlnIGZpbGUgcGF0aCwgb3IgYSBjb25maWcgYXJyYXkKICAgICAqIDxwPgogICAgICogSWYgaXMgYSBpbmkgY29uZmlnIGZpbGUsIHRoZXJlIHNob3VsZCBiZSBhIHNlY3Rpb24gbmFtZWQgYXMgdGhlIG9uZSBkZWZpbmVkIGJ5IHlhZi5lbnZpcm9uLCB3aGljaCBpcyAicHJvZHVjdCIgYnkgZGVmYXVsdC4KICAgICAqIDwvcD4KICAgICAqIDxici8+CiAgICAgKiA8Yj5Ob3RlOjwvYj4KICAgICAqIDxwPklmIHlvdSB1c2UgYSBpbmkgY29uZmlndXJhdGlvbiBmaWxlIGFzIHlvdXIgYXBwbGljYXRpb24ncyBjb25maWcgY29udGFpbmVyLiB5b3Ugd291bGQgb3BlbiB0aGUgeWFmLmNhY2hlX2NvbmZpZyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLjwvcD4KICAgICAqIDxwPkFuZCB0aGUgY29uZmlnIGVudHJ5KGFuZCB0aGVyZSBkZWZhdWx0IHZhbHVlKSBsaXN0IGJsb3c6PC9wPgogICAgICoKICAgICAqIDxwPgogICAgICogICAgPGI+RXhhbXBsZSAjMSBBIGluaSBjb25maWcgZmlsZSBleGFtcGxlPC9iPjxici8+CiAgICAgKiAgICBbcHJvZHVjdF08YnIvPgogICAgICogICAgO3RoaXMgb25lIHNob3VsZCBhbHdheXMgYmUgZGVmaW5lZCwgYW5kIGhhdmUgbm8gZGVmYXVsdCB2YWx1ZTxici8+CiAgICAgKiAgICBhcHBsaWNhdGlvbi5kaXJlY3Rvcnk9QVBQTElDQVRJT05fUEFUSDxici8+PGJyLz4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogICAgO2ZvbGxvd2luZyBjb25maWdzIGhhdmUgZGVmYXVsdCB2YWx1ZSwgeW91IG1heSBubyBuZWVkIHRvIGRlZmluZSB0aGVtCiAgICAgKiA8YnIvPgogICAgICogICAgYXBwbGljYXRpb24ubGlicmFyeSA9IEFQUExJQ0FUSU9OX1BBVEggLiAiL2xpYnJhcnkiIDxici8+CiAgICAgKiAgICBhcHBsaWNhdGlvbi5kaXNwYXRjaGVyLnRocm93RXhjZXB0aW9uPTEgPGJyLz4KICAgICAqICAgIGFwcGxpY2F0aW9uLmRpc3BhdGNoZXIuY2F0Y2hFeGNlcHRpb249MSA8YnIvPjxici8+CiAgICAgKiA8L3A+CiAgICAgKiA8cD5hcHBsaWNhdGlvbi5iYXNlVXJpPSIiPGJyLz48YnIvPjwvcD4KICAgICAqIDxwPgogICAgICogICAgO3RoZSBwaHAgc2NyaXB0IGV4dCBuYW1lPGJyLz4KICAgICAqICAgIGFwLmV4dD1waHA8YnIvPjxici8+CiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqICAgIDt0aGUgdmlldyB0ZW1wbGF0ZSBleHQgbmFtZTxici8+CiAgICAgKiAgICBhcC52aWV3LmV4dD1waHRtbDxici8+PGJyLz4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogICAgYXAuZGlzcGF0Y2hlci5kZWZhdWx0TW9kdWxlPUluZGV4PGJyLz4KICAgICAqICAgIGFwLmRpc3BhdGNoZXIuZGVmYXVsdENvbnRyb2xsZXI9SW5kZXg8YnIvPgogICAgICogICAgYXAuZGlzcGF0Y2hlci5kZWZhdWx0QWN0aW9uPWluZGV4PGJyLz48YnIvPgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiAgICA7ZGVmaW5lZCBtb2R1bGVzPGJyLz4KICAgICAqICAgIGFwLm1vZHVsZXM9SW5kZXgKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGVudnJpb24gV2hpY2ggc2VjdGlvbiB3aWxsIGJlIGxvYWRlZCBhcyB0aGUgZmluYWwgY29uZmlnCiAgICAgKgogICAgICogQHRocm93cyBcWWFmXEV4Y2VwdGlvblxUeXBlRXJyb3J8XFlhZlxFeGNlcHRpb25cU3RhcnR1cEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29uZmlnLCAkZW52cmlvbiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBSdW4gYSBcWWFmXEFwcGxpY2F0aW9uLCBsZXQgdGhlIFxZYWZcQXBwbGljYXRpb24gYWNjZXB0IGEgcmVxdWVzdCwgYW5kIHJvdXRlIHRoZSByZXF1ZXN0LCBkaXNwYXRjaCB0byBjb250cm9sbGVyL2FjdGlvbiwgYW5kIHJlbmRlciByZXNwb25zZS4KICAgICAqIHJldHVybiByZXNwb25zZSB0byBjbGllbnQgZmluYWxseS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24ucnVuLnBocAogICAgICogQHRocm93cyBcWWFmXEV4Y2VwdGlvblxTdGFydHVwRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJ1bigpIHt9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBpcyB0eXBpY2FsbHkgdXNlZCB0byBydW4gXFlhZlxBcHBsaWNhdGlvbiBpbiBhIGNyb250YWIgd29yay4KICAgICAqIE1ha2UgdGhlIGNyb250YWIgd29yayBjYW4gYWxzbyB1c2UgdGhlIGF1dG9sb2FkZXIgYW5kIEJvb3RzdHJhcCBtZWNoYW5pc20uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWFwcGxpY2F0aW9uLmV4ZWN1dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRlbnRyeSBhIHZhbGlkIGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gc3RyaW5nIC4uLiRfIHBhcmFtZXRlcnMgd2lsbCBwYXNzIHRvIHRoZSBjYWxsYmFjawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZShjYWxsYWJsZSAkZW50cnksIC4uLiRfKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIFxZYWZcQXBwbGljYXRpb24gaW5zdGFuY2UsIGFsdGVybmF0aXZlbHksIHdlIGFsc28gY291bGQgdXNlIFxZYWZcRGlzcGF0Y2hlcjo6Z2V0QXBwbGljYXRpb24oKS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uYXBwLnBocAogICAgICoKICAgICAqIEByZXR1cm4gXFlhZlxBcHBsaWNhdGlvbnxudWxsIGFuIFxZYWZcQXBwbGljYXRpb24gaW5zdGFuY2UsIGlmIG5vIFxZYWZcQXBwbGljYXRpb24gaW5pdGlhbGl6ZWQgYmVmb3JlLCBOVUxMIHdpbGwgYmUgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXBwKCkge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIGVudmlyb24gd2hpY2ggd2FzIGRlZmluZWQgaW4geWFmLmVudmlyb24gd2hpY2ggaGFzIGEgZGVmYXVsdCB2YWx1ZSAicHJvZHVjdCIuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWFwcGxpY2F0aW9uLmVudmlyb24ucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVudmlyb24oKSB7fQoKICAgIC8qKgogICAgICogUnVuIGEgQm9vdHN0cmFwLCBhbGwgdGhlIG1ldGhvZHMgZGVmaW5lZCBpbiB0aGUgQm9vdHN0cmFwIGFuZCBuYW1lZCB3aXRoIHByZWZpeCAiX2luaXQiIHdpbGwgYmUgY2FsbGVkIGFjY29yZGluZyB0byB0aGVpciBkZWNsYXJhdGlvbiBvcmRlciwgaWYgdGhlIHBhcmFtZXRlciBib290c3RyYXAgaXMgbm90IHN1cHBsaWVkLCBZYWYgd2lsbCBsb29rIGZvciBhIEJvb3RzdHJhcCB1bmRlciBhcHBsaWNhdGlvbi5kaXJlY3RvcnkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWFwcGxpY2F0aW9uLmJvb3RzdHJhcC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gXFlhZlxCb290c3RyYXBfQWJzdHJhY3QgJGJvb3RzdHJhcCBBIFxZYWZcQm9vdHN0cmFwX0Fic3RyYWN0IGluc3RhbmNlCiAgICAgKiBAcmV0dXJuIFxZYWZcQXBwbGljYXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJvb3RzdHJhcChCb290c3RyYXBfQWJzdHJhY3QgJGJvb3RzdHJhcCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uZ2V0Y29uZmlnLnBocAogICAgICoKICAgICAqIEByZXR1cm4gXFlhZlxDb25maWdfQWJzdHJhY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbmZpZygpIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1vZHVsZXMgbGlzdCBkZWZpbmVkIGluIGNvbmZpZywgaWYgbm8gb25lIGRlZmluZWQsIHRoZXJlIHdpbGwgYWx3YXlzIGJlIGEgbW9kdWxlIG5hbWVkICJJbmRleCIuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWFwcGxpY2F0aW9uLmdldG1vZHVsZXMucGhwCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TW9kdWxlcygpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uZ2V0ZGlzcGF0Y2hlci5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIFxZYWZcRGlzcGF0Y2hlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGlzcGF0Y2hlcigpIHt9CgogICAgLyoqCiAgICAgKiBDaGFuZ2UgdGhlIGFwcGxpY2F0aW9uIGRpcmVjdG9yeQogICAgICoKICAgICAqIEBzaW5jZSAyLjEuNAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWFwcGxpY2F0aW9uLnNldGFwcGRpcmVjdG9yeS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaXJlY3RvcnkKICAgICAqIEByZXR1cm4gXFlhZlxBcHBsaWNhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QXBwRGlyZWN0b3J5KCRkaXJlY3RvcnkpIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgMi4xLjQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1hcHBsaWNhdGlvbi5nZXRhcHBkaXJlY3RvcnkucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFwcERpcmVjdG9yeSgpIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgMi4xLjIKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1hcHBsaWNhdGlvbi5nZXRsYXN0ZXJyb3Juby5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdEVycm9yTm8oKSB7fQoKICAgIC8qKgogICAgICogQHNpbmNlIDIuMS4yCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uZ2V0bGFzdGVycm9ybXNnLnBocAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0RXJyb3JNc2coKSB7fQoKICAgIC8qKgogICAgICogQHNpbmNlIDIuMS4yCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uY2xlYXJsYXN0ZXJyb3IucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhckxhc3RFcnJvcigpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uZGVzdHJ1Y3QucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1hcHBsaWNhdGlvbi5jbG9uZS5waHAKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2Nsb25lKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1hcHBsaWNhdGlvbi5zbGVlcC5waHAKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX3NsZWVwKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1hcHBsaWNhdGlvbi53YWtldXAucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX193YWtldXAoKSB7fQp9LyoqCiAqIDxwPjxiPlxZYWZcRGlzcGF0Y2hlcjwvYj4gcHVycG9zZSBpcyB0byBpbml0aWFsaXplIHRoZSByZXF1ZXN0IGVudmlyb25tZW50LCByb3V0ZSB0aGUgaW5jb21pbmcgcmVxdWVzdCwgYW5kIHRoZW4gZGlzcGF0Y2ggYW55IGRpc2NvdmVyZWQgYWN0aW9uczsgaXQgYWdncmVnYXRlcyBhbnkgcmVzcG9uc2VzIGFuZCByZXR1cm5zIHRoZW0gd2hlbiB0aGUgcHJvY2VzcyBpcyBjb21wbGV0ZS48L3A+PGJyLz4KICogPHA+PGI+XFlhZlxEaXNwYXRjaGVyPC9iPiBhbHNvIGltcGxlbWVudHMgdGhlIFNpbmdsZXRvbiBwYXR0ZXJuLCBtZWFuaW5nIG9ubHkgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgaXQgbWF5IGJlIGF2YWlsYWJsZSBhdCBhbnkgZ2l2ZW4gdGltZS4gVGhpcyBhbGxvd3MgaXQgdG8gYWxzbyBhY3QgYXMgYSByZWdpc3RyeSBvbiB3aGljaCB0aGUgb3RoZXIgb2JqZWN0cyBpbiB0aGUgZGlzcGF0Y2ggcHJvY2VzcyBtYXkgZHJhdy48L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1kaXNwYXRjaGVyLnBocAogKi8KZmluYWwgY2xhc3MgRGlzcGF0Y2hlcgp7CiAgICAvKioKICAgICAqIEB2YXIgXFlhZlxEaXNwYXRjaGVyCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJF9pbnN0YW5jZTsKCiAgICAvKioKICAgICAqIEB2YXIgXFlhZlxSb3V0ZXIKICAgICAqLwogICAgcHJvdGVjdGVkICRfcm91dGVyOwoKICAgIC8qKgogICAgICogQHZhciBcWWFmXFZpZXdfSW50ZXJmYWNlCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3ZpZXc7CgogICAgLyoqCiAgICAgKiBAdmFyIFxZYWZcUmVxdWVzdF9BYnN0cmFjdAogICAgICovCiAgICBwcm90ZWN0ZWQgJF9yZXF1ZXN0OwoKICAgIC8qKgogICAgICogQHZhciBcWWFmXFBsdWdpbl9BYnN0cmFjdAogICAgICovCiAgICBwcm90ZWN0ZWQgJF9wbHVnaW5zOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2F1dG9fcmVuZGVyID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3JldHVybl9yZXNwb25zZSA9ICIiOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRfaW5zdGFudGx5X2ZsdXNoID0gIiI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9kZWZhdWx0X21vZHVsZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2RlZmF1bHRfY29udHJvbGxlcjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2RlZmF1bHRfYWN0aW9uOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuY29uc3RydWN0LnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1kaXNwYXRjaGVyLmNsb25lLnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY2xvbmUoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuc2xlZXAucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19zbGVlcCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci53YWtldXAucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX193YWtldXAoKSB7fQoKICAgIC8qKgogICAgICogZW5hYmxlIHZpZXcgcmVuZGVyaW5nCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuZW5hYmxldmlldy5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIFxZYWZcRGlzcGF0Y2hlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5hYmxlVmlldygpIHt9CgogICAgLyoqCiAgICAgKiA8cD5kaXNhYmxlIHZpZXcgZW5naW5lLCB1c2VkIGluIHNvbWUgYXBwIHRoYXQgdXNlciB3aWxsIG91dHB1dCBieSBoaW1zZWxmPC9wPjxici8+CiAgICAgKiA8Yj5Ob3RlOjwvYj4KICAgICAqIDxwPnlvdSBjYW4gc2ltcGx5IHJldHVybiBGQUxTRSBpbiBhIGFjdGlvbiB0byBwcmV2ZW50IHRoZSBhdXRvLXJlbmRlcmluZyBvZiB0aGF0IGFjdGlvbjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5kaXNhYmxldmlldy5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc2FibGVWaWV3KCkge30KCiAgICAvKioKICAgICAqIEluaXRpYWxpemUgdmlldyBhbmQgcmV0dXJuIGl0CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuaW5pdHZpZXcucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdGVtcGxhdGVzX2RpcgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIFxZYWZcVmlld19JbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluaXRWaWV3KCR0ZW1wbGF0ZXNfZGlyLCBhcnJheSAkb3B0aW9ucyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHNvbHV0aW9uIGZvciB0aGF0IGlmIHlvdSB3YW50IHVzZSBhIGN1c3RvbSB2aWV3IGVuZ2luZSBpbnN0ZWFkIG9mIFxZYWZcVmlld1xTaW1wbGUKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5zZXR2aWV3LnBocAogICAgICoKICAgICAqIEBwYXJhbSBcWWFmXFZpZXdfSW50ZXJmYWNlICR2aWV3IEEgXFlhZlxWaWV3X0ludGVyZmFjZSBpbnN0YW5jZQogICAgICogQHJldHVybiBcWWFmXERpc3BhdGNoZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFZpZXcoVmlld19JbnRlcmZhY2UgJHZpZXcpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5zZXRyZXF1ZXN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBcWWFmXFJlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QKICAgICAqIEByZXR1cm4gXFlhZlxEaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSZXF1ZXN0KFJlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QpIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgXFlhZlxBcHBsaWNhdGlvbiBpbnN0YW5jZS4gc2FtZSBhcyBcWWFmXEFwcGxpY2F0aW9uOjphcHAoKS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5nZXRhcHBsaWNhdGlvbi5waHAKICAgICAqIEByZXR1cm4gXFlhZlxBcHBsaWNhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXBwbGljYXRpb24oKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuZ2V0cm91dGVyLnBocAogICAgICoKICAgICAqIEByZXR1cm4gXFlhZlxSb3V0ZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJvdXRlcigpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5nZXRyZXF1ZXN0LnBocAogICAgICoKICAgICAqIEByZXR1cm4gXFlhZlxSZXF1ZXN0X0Fic3RyYWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0KCkge30KCiAgICAvKioKICAgICAqIDxwPlNldCBlcnJvciBoYW5kbGVyIGZvciBZYWYuIHdoZW4gYXBwbGljYXRpb24uZGlzcGF0Y2hlci50aHJvd0V4Y2VwdGlvbiBpcyBvZmYsIFlhZiB3aWxsIHRyaWdnZXIgY2F0Y2gtYWJsZSBlcnJvciB3aGlsZSB1bmV4cGVjdGVkIGVycm9ycyBvY2N1cnJlZC48L3A+PGJyLz4KICAgICAqIDxwPlRodXMsIHRoaXMgZXJyb3IgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCB3aGlsZSB0aGUgZXJyb3IgcmFpc2UuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1kaXNwYXRjaGVyLnNldGVycm9yaGFuZGxlci5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrIGEgY2FsbGFibGUgY2FsbGJhY2sKICAgICAqIEBwYXJhbSBpbnQgJGVycm9yX3R5cGVzIFlBRl9FUlJfKiBjb25zdGFudHMgbWFzawogICAgICoKICAgICAqIEByZXR1cm4gXFlhZlxEaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFcnJvckhhbmRsZXIoY2FsbGFibGUgJGNhbGxiYWNrLCAkZXJyb3JfdHlwZXMpIHt9CgogICAgLyoqCiAgICAgKiBDaGFuZ2UgZGVmYXVsdCBtb2R1bGUgbmFtZQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1kaXNwYXRjaGVyLnNldGRlZmF1bHRtb2R1bGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlCiAgICAgKiBAcmV0dXJuIFxZYWZcRGlzcGF0Y2hlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RGVmYXVsdE1vZHVsZSgkbW9kdWxlKSB7fQoKICAgIC8qKgogICAgICogQ2hhbmdlIGRlZmF1bHQgY29udHJvbGxlciBuYW1lCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuc2V0ZGVmYXVsdGNvbnRyb2xsZXIucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY29udHJvbGxlcgogICAgICogQHJldHVybiBcWWFmXERpc3BhdGNoZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldERlZmF1bHRDb250cm9sbGVyKCRjb250cm9sbGVyKSB7fQoKICAgIC8qKgogICAgICogQ2hhbmdlIGRlZmF1bHQgYWN0aW9uIG5hbWUKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5zZXRkZWZhdWx0YWN0aW9uLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFjdGlvbgogICAgICogQHJldHVybiBcWWFmXERpc3BhdGNoZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldERlZmF1bHRBY3Rpb24oJGFjdGlvbikge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1kaXNwYXRjaGVyLnJldHVybnJlc3BvbnNlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBib29sICRmbGFnCiAgICAgKiBAcmV0dXJuIFxZYWZcRGlzcGF0Y2hlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV0dXJuUmVzcG9uc2UoJGZsYWcpIHt9CgogICAgLyoqCiAgICAgKiA8cD5cWWFmXERpc3BhdGNoZXIgd2lsbCByZW5kZXIgYXV0b21hdGljYWxseSBhZnRlciBkaXNwYXRjaGVzIGFuIGluY29taW5nIHJlcXVlc3QsIHlvdSBjYW4gcHJldmVudCB0aGUgcmVuZGVyaW5nIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgd2l0aCAkZmxhZyBUUlVFPC9wPjxici8+CiAgICAgKiA8Yj5Ob3RlOjwvYj4KICAgICAqIDxwPnlvdSBjYW4gc2ltcGx5IHJldHVybiBGQUxTRSBpbiBhIGFjdGlvbiB0byBwcmV2ZW50IHRoZSBhdXRvLXJlbmRlcmluZyBvZiB0aGF0IGFjdGlvbjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5hdXRvcmVuZGVyLnBocAogICAgICoKICAgICAqIEBwYXJhbSBib29sICRmbGFnIHNpbmNlIDIuMi4wLCBpZiB0aGlzIHBhcmFtZXRlciBpcyBub3QgZ2l2ZW4sIHRoZW4gdGhlIGN1cnJlbnQgc3RhdGUgd2lsbCBiZSBzZXQKICAgICAqIEByZXR1cm4gXFlhZlxEaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhdXRvUmVuZGVyKCRmbGFnID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFN3aXRjaCBvbi9vZmYgdGhlIGluc3RhbnQgZmx1c2hpbmcKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5mbHVzaGluc3RhbnRseS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZmxhZyBzaW5jZSAyLjIuMCwgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IGdpdmVuLCB0aGVuIHRoZSBjdXJyZW50IHN0YXRlIHdpbGwgYmUgc2V0CiAgICAgKiBAcmV0dXJuIFxZYWZcRGlzcGF0Y2hlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmx1c2hJbnN0YW50bHkoJGZsYWcgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuZ2V0aW5zdGFuY2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXERpc3BhdGNoZXIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbnN0YW5jZSgpIHt9CgogICAgLyoqCiAgICAgKiA8cD5UaGlzIG1ldGhvZCBkb2VzIHRoZSBoZWF2eSB3b3JrIG9mIHRoZSBcWWFmXERpc3BhdGNoZXIuIEl0IHRha2UgYSByZXF1ZXN0IG9iamVjdC48L3A+PGJyLz4KICAgICAqIDxwPlRoZSBkaXNwYXRjaCBwcm9jZXNzIGhhcyB0aHJlZSBkaXN0aW5jdCBldmVudHM6PC9wPgogICAgICogPHVsPgogICAgICogPGxpPlJvdXRpbmc8L2xpPgogICAgICogPGxpPkRpc3BhdGNoaW5nPC9saT4KICAgICAqIDxsaT5SZXNwb25zZTwvbGk+CiAgICAgKiA8L3VsPgogICAgICogPHA+Um91dGluZyB0YWtlcyBwbGFjZSBleGFjdGx5IG9uY2UsIHVzaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIHJlcXVlc3Qgb2JqZWN0IHdoZW4gZGlzcGF0Y2goKSBpcyBjYWxsZWQuIERpc3BhdGNoaW5nIHRha2VzIHBsYWNlIGluIGEgbG9vcDsgYSByZXF1ZXN0IG1heSBlaXRoZXIgaW5kaWNhdGUgbXVsdGlwbGUgYWN0aW9ucyB0byBkaXNwYXRjaCwgb3IgdGhlIGNvbnRyb2xsZXIgb3IgYSBwbHVnaW4gbWF5IHJlc2V0IHRoZSByZXF1ZXN0IG9iamVjdCB0byBmb3JjZSBhZGRpdGlvbmFsIGFjdGlvbnMgdG8gZGlzcGF0Y2goc2VlIFxZYWZcUGx1Z2luX0Fic3RyYWN0LiBXaGVuIGFsbCBpcyBkb25lLCB0aGUgXFlhZlxEaXNwYXRjaGVyIHJldHVybnMgYSByZXNwb25zZS48L3A+CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuZGlzcGF0Y2gucGhwCiAgICAgKgogICAgICogQHBhcmFtIFxZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEB0aHJvd3MgXFlhZlxFeGNlcHRpb25cVHlwZUVycm9yCiAgICAgKiBAdGhyb3dzIFxZYWZcRXhjZXB0aW9uXFJvdXRlckZhaWxlZAogICAgICogQHRocm93cyBcWWFmXEV4Y2VwdGlvblxEaXNwYXRjaEZhaWxlZAogICAgICogQHRocm93cyBcWWFmXEV4Y2VwdGlvblxMb2FkRmFpbGVkCiAgICAgKiBAdGhyb3dzIFxZYWZcRXhjZXB0aW9uXExvYWRGYWlsZWRcQWN0aW9uCiAgICAgKiBAdGhyb3dzIFxZYWZcRXhjZXB0aW9uXExvYWRGYWlsZWRcQ29udHJvbGxlcgogICAgICoKICAgICAqIEByZXR1cm4gXFlhZlxSZXNwb25zZV9BYnN0cmFjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzcGF0Y2goUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCkge30KCiAgICAvKioKICAgICAqIDxwPlN3aXRjaCBvbi9vZmYgZXhjZXB0aW9uIHRocm93aW5nIHdoaWxlIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyaW5nLiBXaGVuIHRoaXMgaXMgb24sIFlhZiB3aWxsIHRocm93aW5nIGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGNhdGNoYWJsZSBlcnJvcnMuPC9wPjxici8+CiAgICAgKiA8cD5Zb3UgY2FuIGFsc28gdXNlIGFwcGxpY2F0aW9uLmRpc3BhdGNoZXIudGhyb3dFeGNlcHRpb24gdG8gYWNoaWV2ZSB0aGUgc2FtZSBwdXJwb3NlLjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci50aHJvd2V4Y2VwdGlvbi5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZmxhZwogICAgICogQHJldHVybiBcWWFmXERpc3BhdGNoZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKCRmbGFnID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIDxwPldoaWxlIHRoZSBhcHBsaWNhdGlvbi5kaXNwYXRjaGVyLnRocm93RXhjZXB0aW9uIGlzIE9uKHlvdSBjYW4gYWxzbyBjYWxsaW5nIHRvIDxiPlxZYWZcRGlzcGF0Y2hlcjo6dGhyb3dFeGNlcHRpb24oVFJVRSk8L2I+IHRvIGVuYWJsZSBpdCksIFlhZiB3aWxsIHRocm93IFxFeGNlcHRpb24gd2hlIGVycm9yIG9jY3VycyBpbnN0ZWFkIG9mIHRyaWdnZXIgZXJyb3IuPC9wPjxici8+CiAgICAgKiA8cD50aGVuIGlmIHlvdSBlbmFibGUgPGI+XFlhZlxEaXNwYXRjaGVyOjpjYXRjaEV4Y2VwdGlvbigpPC9iPihhbHNvIGNhbiBlbmFibGVkIGJ5IHNldCBhcHBsaWNhdGlvbi5kaXNwYXRjaGVyLmNhdGNoRXhjZXB0aW9uKSwgYWxsIHVuY2F1Z2h0IFxFeGNlcHRpb25zIHdpbGwgYmUgY2F1Z2h0IGJ5IEVycm9yQ29udHJvbGxlcjo6ZXJyb3IgaWYgeW91IGhhdmUgZGVmaW5lZCBvbmUuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1kaXNwYXRjaGVyLmNhdGNoZXhjZXB0aW9uLnBocAogICAgICoKICAgICAqIEBwYXJhbSBib29sICRmbGFnCiAgICAgKiBAcmV0dXJuIFxZYWZcRGlzcGF0Y2hlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2F0Y2hFeGNlcHRpb24oJGZsYWcgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmVnaXN0ZXIgYSBwbHVnaW4oc2VlIFxZYWZcUGx1Z2luX0Fic3RyYWN0KS4gR2VuZXJhbGx5LCB3ZSByZWdpc3RlciBwbHVnaW5zIGluIEJvb3RzdHJhcChzZWUgXFlhZlxCb290c3RyYXBfQWJzdHJhY3QpLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1kaXNwYXRjaGVyLnJlZ2lzdGVycGx1Z2luLnBocAogICAgICoKICAgICAqIEBwYXJhbSBcWWFmXFBsdWdpbl9BYnN0cmFjdCAkcGx1Z2luCiAgICAgKiBAcmV0dXJuIFxZYWZcRGlzcGF0Y2hlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXJQbHVnaW4oUGx1Z2luX0Fic3RyYWN0ICRwbHVnaW4pIHt9Cn0vKioKICogPHA+PGI+XFlhZlxMb2FkZXI8L2I+IGludHJvZHVjZXMgYSBjb21wcmVoZW5zaXZlIGF1dG9sb2FkaW5nIHNvbHV0aW9uIGZvciBZYWYuPC9wPgogKiA8YnIvPgogKiA8cD5UaGUgZmlyc3QgdGltZSBhbiBpbnN0YW5jZSBvZiBcWWFmXEFwcGxpY2F0aW9uIGlzIHJldHJpZXZlZCwgPGI+XFlhZlxMb2FkZXI8L2I+IHdpbGwgaW5zdGFuY2UgYSBzaW5nbGV0b24sIGFuZCByZWdpc3RlcnMgaXRzZWxmIHdpdGggc3BsX2F1dG9sb2FkLiBZb3UgcmV0cmlldmUgYW4gaW5zdGFuY2UgdXNpbmcgdGhlIFxZYWZcTG9hZGVyOjpnZXRJbnN0YW5jZSgpPC9wPgogKiA8YnIvPgogKiA8cD48Yj5cWWFmXExvYWRlcjwvYj4gYXR0ZW1wdCB0byBsb2FkIGEgY2xhc3Mgb25seSBvbmUgc2hvdCwgaWYgZmFpbGVkLCBkZXBlbmQgb24geWFmLnVzZV9zcGxfYXV0b2xvYWQsIGlmIHRoaXMgY29uZmlnIGlzIE9uIFxZYWZcTG9hZGVyOjphdXRvbG9hZCgpIHdpbGwgcmV0dXJuIEZBTFNFLCB0aHVzIGdpdmUgdGhlIGNoYW5jZSB0byBvdGhlciBhdXRvbG9hZCBmdW5jdGlvbi4gaWYgaXQgaXMgT2ZmIChieSBkZWZhdWx0KSwgXFlhZlxMb2FkZXI6OmF1dG9sb2FkKCkgd2lsbCByZXR1cm4gVFJVRSwgYW5kIG1vcmUgaW1wb3J0YW50IGlzIHRoYXQgYSB2ZXJ5IHVzZWZ1bCB3YXJuaW5nIHdpbGwgYmUgdHJpZ2dlcmVkICh2ZXJ5IHVzZWZ1bCB0byBmaW5kIG91dCB3aHkgYSBjbGFzcyBjb3VsZCBub3QgYmUgbG9hZGVkKS48L3A+CiAqIDxici8+CiAqIDxiPk5vdGU6PC9iPgogKiA8cD5QbGVhc2Uga2VlcCB5YWYudXNlX3NwbF9hdXRvbG9hZCBPZmYgdW5sZXNzIHRoZXJlIGlzIHNvbWUgbGlicmFyeSBoYXZlIHRoZWlyIG93biBhdXRvbG9hZCBtZWNoYW5pc20gYW5kIGltcG9zc2libGUgdG8gcmV3cml0ZSBpdC48L3A+CiAqIDxici8+CiAqIDxwPklmIHlvdSB3YW50IDxiPlxZYWZcTG9hZGVyPC9iPiBzZWFyY2ggc29tZSBjbGFzc2VzKGxpYnJhcmllcykgaW4gdGhlIGxvY2FsIGNsYXNzIGRpcmVjdG9yeSh3aGljaCBpcyBkZWZpbmVkIGluIGFwcGxpY2F0aW9uLmluaSwgYW5kIGJ5IGRlZmF1bHQsIGl0IGlzIGFwcGxpY2F0aW9uLmRpcmVjdG9yeSAuICIvbGlicmFyeSIpLCB5b3Ugc2hvdWxkIHJlZ2lzdGVyIHRoZSBjbGFzcyBwcmVmaXggdXNpbmcgdGhlIFxZYWZcTG9hZGVyOjpyZWdpc3RlckxvY2FsTmFtZVNwYWNlKCk8L3A+CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1sb2FkZXIucGhwCiAqLwpjbGFzcyBMb2FkZXIKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9sb2NhbF9uczsKCiAgICAvKioKICAgICAqIEJ5IGRlZmF1bHQsIHRoaXMgdmFsdWUgaXMgYXBwbGljYXRpb24uZGlyZWN0b3J5IC4gIi9saWJyYXJ5IiwgeW91IGNhbiBjaGFuZ2UgdGhpcyBlaXRoZXIgaW4gdGhlIGFwcGxpY2F0aW9uLmluaShhcHBsaWNhdGlvbi5saWJyYXJ5KSBvciBjYWxsIHRvIFxZYWZcTG9hZGVyOjpzZXRMaWJyYXJ5UGF0aCgpCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9saWJyYXJ5OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRfZ2xvYmFsX2xpYnJhcnk7CgogICAgLyoqCiAgICAgKiBAdmFyIFxZYWZcTG9hZGVyCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJF9pbnN0YW5jZTsKCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1sb2FkZXIuY29uc3RydWN0LnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1sb2FkZXIuY2xvbmUucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jbG9uZSgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtbG9hZGVyLnNsZWVwLnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fc2xlZXAoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWxvYWRlci53YWtldXAucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX193YWtldXAoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWxvYWRlci5hdXRvbG9hZC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzc19uYW1lCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhdXRvbG9hZCgkY2xhc3NfbmFtZSkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1sb2FkZXIuZ2V0aW5zdGFuY2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxfbGlicmFyeV9wYXRoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRnbG9iYWxfbGlicmFyeV9wYXRoCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXExvYWRlcgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbmNlKCRsb2NhbF9saWJyYXJ5X3BhdGggPSBudWxsLCAkZ2xvYmFsX2xpYnJhcnlfcGF0aCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiA8cD5SZWdpc3RlciBsb2NhbCBjbGFzcyBwcmVmaXggbmFtZSwgXFlhZlxMb2FkZXIgc2VhcmNoIGNsYXNzZXMgaW4gdHdvIGxpYnJhcnkgZGlyZWN0b3JpZXMsIHRoZSBvbmUgaXMgY29uZmlndXJlZCB2aWEgYXBwbGljYXRpb24ubGlicmFyeS5kaXJlY3RvcnkoaW4gYXBwbGljYXRpb24uaW5pKSB3aGljaCBpcyBjYWxsZWQgbG9jYWwgbGlicmFyeSBkaXJlY3Rvcnk7IHRoZSBvdGhlciBpcyBjb25maWd1cmVkIHZpYSB5YWYubGlicmFyeSAoaW4gcGhwLmluaSkgd2hpY2ggaXMgY2FsbGVkIGdsb2JhbCBsaWJyYXJ5IGRpcmVjdG9yeSwgc2luY2UgaXQgY2FuIGJlIHNoYXJlZCBieSBtYW55IGFwcGxpY2F0aW9ucyBpbiB0aGUgc2FtZSBzZXJ2ZXIuPC9wPgogICAgICogPGJyLz4KICAgICAqIDxwPldoZW4gYW4gYXV0b2xvYWRpbmcgaXMgdHJpZ2dlcmVkLCBcWWFmXExvYWRlciB3aWxsIGRldGVybWluZSB3aGljaCBsaWJyYXJ5IGRpcmVjdG9yeSBzaG91bGQgYmUgc2VhcmNoZWQgaW4gYnkgZXhhbWluaW5nIHRoZSBwcmVmaXggbmFtZSBvZiB0aGUgbWlzc2VkIGNsYXNzbmFtZS4gSWYgdGhlIHByZWZpeCBuYW1lIGlzIHJlZ2lzdGVyZWQgYXMgYSBsb2NhbCBuYW1lc3BhY2UgdGhlbiBsb29rIGZvciBpdCBpbiBsb2NhbCBsaWJyYXJ5IGRpcmVjdG9yeSwgb3RoZXJ3aXNlIGxvb2sgZm9yIGl0IGluIGdsb2JhbCBsaWJyYXJ5IGRpcmVjdG9yeS48L3A+CiAgICAgKiA8YnIvPgogICAgICogPGI+Tm90ZTo8L2I+CiAgICAgKiA8cD5JZiB5YWYubGlicmFyeSBpcyBub3QgY29uZmlndXJlZCwgdGhlbiB0aGUgZ2xvYmFsIGxpYnJhcnkgZGlyZWN0b3J5IGlzIGFzc3VtZWQgdG8gYmUgdGhlIGxvY2FsIGxpYnJhcnkgZGlyZWN0b3J5LiBpbiB0aGF0IGNhc2UsIGFsbCBhdXRvbG9hZGluZyB3aWxsIGxvb2sgZm9yIGxvY2FsIGxpYnJhcnkgZGlyZWN0b3J5LiBCdXQgaWYgeW91IHdhbnQgeW91ciBZYWYgYXBwbGljYXRpb24gYmUgc3Ryb25nLCB0aGVuIGFsd2F5cyByZWdpc3RlciB5b3VyIG93biBjbGFzc2VzIGFzIGxvY2FsIGNsYXNzZXMuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWxvYWRlci5yZWdpc3RlcmxvY2FsbmFtZXNwYWNlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJG5hbWVfcHJlZml4IGEgc3RyaW5nIG9yIGEgYXJyYXkgb2YgY2xhc3MgbmFtZSBwcmVmaXguIGFsbCBjbGFzcyBwcmVmaXggd2l0aCB0aGVzZSBwcmVmaXggd2lsbCBiZSBsb2FkZWQgaW4gbG9jYWwgbGlicmFyeSBwYXRoLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXJMb2NhbE5hbWVzcGFjZSgkbmFtZV9wcmVmaXgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtbG9hZGVyLmdldGxvY2FsbmFtZXNwYWNlLnBocAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbE5hbWVzcGFjZSgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtbG9hZGVyLmNsZWFybG9jYWxuYW1lc3BhY2UucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhckxvY2FsTmFtZXNwYWNlKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1sb2FkZXIuaXNsb2NhbG5hbWUucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2xhc3NfbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNMb2NhbE5hbWUoJGNsYXNzX25hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtbG9hZGVyLmltcG9ydC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW1wb3J0KCRmaWxlKSB7fQoKICAgIC8qKgogICAgICogQHNpbmNlIDIuMS40CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtbG9hZGVyLnNldGxpYnJhcnlwYXRoLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRpcmVjdG9yeQogICAgICogQHBhcmFtIGJvb2wgJGdsb2JhbAogICAgICoKICAgICAqIEByZXR1cm4gXFlhZlxMb2FkZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExpYnJhcnlQYXRoKCRkaXJlY3RvcnksICRnbG9iYWwgPSBmYWxzZSkge30KCiAgICAvKioKICAgICAqIEBzaW5jZSAyLjEuNAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWxvYWRlci5nZXRsaWJyYXJ5cGF0aC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNfZ2xvYmFsCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExpYnJhcnlQYXRoKCRpc19nbG9iYWwgPSBmYWxzZSkge30KfS8qKgogKiA8cD5BbGwgbWV0aG9kcyBvZiA8Yj5cWWFmXFJlZ2lzdHJ5PC9iPiBkZWNsYXJlZCBhcyBzdGF0aWMsIG1ha2luZyBpdCB1bml2ZXJzYWxseSBhY2Nlc3NpYmxlLiBUaGlzIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGdldCBvciBzZXQgYW55IGN1c3RvbSBkYXRhIGZyb20gYW55d2F5IGluIHlvdXIgY29kZSBhcyBuZWNlc3NhcnkuPC9wPgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtcmVnaXN0cnkucGhwCiAqLwpmaW5hbCBjbGFzcyBSZWdpc3RyeQp7CiAgICAvKioKICAgICAqIEB2YXIgXFlhZlxSZWdpc3RyeQogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljICRfaW5zdGFuY2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2VudHJpZXM7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVnaXN0cnkuY29uc3RydWN0LnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZWdpc3RyeS5jbG9uZS5waHAKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2Nsb25lKCkge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIGFuIGl0ZW0gZnJvbSByZWdpc3RyeQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZWdpc3RyeS5nZXQucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXQoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayB3aGV0aGVyIGFuIGl0ZW0gZXhpc3RzCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlZ2lzdHJ5Lmhhcy5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzKCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlZ2lzdHJ5LnNldC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0KCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVnaXN0cnkuZGVsLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWR8Ym9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlbCgkbmFtZSkge30KfS8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtc2Vzc2lvbi5waHAKICogQHZlcnNpb24gMi4yLjkKICovCmZpbmFsIGNsYXNzIFNlc3Npb24gaW1wbGVtZW50cyBcSXRlcmF0b3IsIFxUcmF2ZXJzYWJsZSwgXEFycmF5QWNjZXNzLCBcQ291bnRhYmxlCnsKICAgIC8qKgogICAgICogQHZhciBcWWFmXFNlc3Npb24KICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyAkX2luc3RhbmNlOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9zZXNzaW9uOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3N0YXJ0ZWQgPSB0cnVlOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXNlc3Npb24uY29uc3RydWN0LnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1zZXNzaW9uLmNsb25lLnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY2xvbmUoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXNlc3Npb24uc2xlZXAucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19zbGVlcCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtc2Vzc2lvbi53YWtldXAucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX193YWtldXAoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXNlc3Npb24uZ2V0aW5zdGFuY2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXFNlc3Npb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbnN0YW5jZSgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtc2Vzc2lvbi5zdGFydC5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIFxZYWZcU2Vzc2lvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnQoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXNlc3Npb24uZ2V0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtc2Vzc2lvbi5oYXMucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzKCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXNlc3Npb24uc2V0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIFxZYWZcU2Vzc2lvbnxmYWxzZSByZXR1cm4gRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtc2Vzc2lvbi5kZWwucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gXFlhZlxTZXNzaW9ufGZhbHNlIHJldHVybiBGQUxTRSBvbiBmYWlsdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWwoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxDb3VudGFibGU6OmNvdW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxJdGVyYXRvcjo6cmV3aW5kCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBcSXRlcmF0b3I6OmN1cnJlbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBcSXRlcmF0b3I6Om5leHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBcSXRlcmF0b3I6OnZhbGlkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxJdGVyYXRvcjo6a2V5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZXkoKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBcQXJyYXlBY2Nlc3M6Om9mZnNldFVuc2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCgkbmFtZSkge30KCiAgICAvKioKICAgICAqIEBzZWUgXEFycmF5QWNjZXNzOjpvZmZzZXRHZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgkbmFtZSkge30KCiAgICAvKioKICAgICAqIEBzZWUgXEFycmF5QWNjZXNzOjpvZmZzZXRFeGlzdHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEV4aXN0cygkbmFtZSkge30KCiAgICAvKioKICAgICAqIEBzZWUgXEFycmF5QWNjZXNzOjpvZmZzZXRTZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgkbmFtZSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBcWWFmXFNlc3Npb246OmdldCgpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSkge30KCiAgICAvKioKICAgICAqIEBzZWUgXFlhZlxTZXNzaW9uOjpoYXMoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19pc3NldCgkbmFtZSkge30KCiAgICAvKioKICAgICAqIEBzZWUgXFlhZlxTZXNzaW9uOjpzZXQoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoJG5hbWUsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIEBzZWUgXFlhZlxTZXNzaW9uOjpkZWwoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX191bnNldCgkbmFtZSkge30KfS8qKgogKiA8cD48Yj5cWWFmXFJvdXRlcjwvYj4gaXMgdGhlIHN0YW5kYXJkIGZyYW1ld29yayByb3V0ZXIuIFJvdXRpbmcgaXMgdGhlIHByb2Nlc3Mgb2YgdGFraW5nIGEgVVJJIGVuZHBvaW50ICh0aGF0IHBhcnQgb2YgdGhlIFVSSSB3aGljaCBjb21lcyBhZnRlciB0aGUgYmFzZSBVUkk6IHNlZSBcWWFmXFJlcXVlc3RfQWJzdHJhY3Q6OnNldEJhc2VVcmkoKSkgYW5kIGRlY29tcG9zaW5nIGl0IGludG8gcGFyYW1ldGVycyB0byBkZXRlcm1pbmUgd2hpY2ggbW9kdWxlLCBjb250cm9sbGVyLCBhbmQgYWN0aW9uIG9mIHRoYXQgY29udHJvbGxlciBzaG91bGQgcmVjZWl2ZSB0aGUgcmVxdWVzdC4gVGhpcyB2YWx1ZXMgb2YgdGhlIG1vZHVsZSwgY29udHJvbGxlciwgYWN0aW9uIGFuZCBvdGhlciBwYXJhbWV0ZXJzIGFyZSBwYWNrYWdlZCBpbnRvIGEgXFlhZlxSZXF1ZXN0X0Fic3RyYWN0IG9iamVjdCB3aGljaCBpcyB0aGVuIHByb2Nlc3NlZCBieSBcWWFmXERpc3BhdGNoZXIuIFJvdXRpbmcgb2NjdXJzIG9ubHkgb25jZTogd2hlbiB0aGUgcmVxdWVzdCBpcyBpbml0aWFsbHkgcmVjZWl2ZWQgYW5kIGJlZm9yZSB0aGUgZmlyc3QgY29udHJvbGxlciBpcyBkaXNwYXRjaGVkLiBcWWFmXFJvdXRlciBpcyBkZXNpZ25lZCB0byBhbGxvdyBmb3IgbW9kX3Jld3JpdGUtbGlrZSBmdW5jdGlvbmFsaXR5IHVzaW5nIHB1cmUgUEhQIHN0cnVjdHVyZXMuIEl0IGlzIHZlcnkgbG9vc2VseSBiYXNlZCBvbiBSdWJ5IG9uIFJhaWxzIHJvdXRpbmcgYW5kIGRvZXMgbm90IHJlcXVpcmUgYW55IHByaW9yIGtub3dsZWRnZSBvZiB3ZWJzZXJ2ZXIgVVJMIHJld3JpdGluZzwvcD4KICogPGJyLz4KICogPGI+RGVmYXVsdCBSb3V0ZTwvYj4KICogPGJyLz4KICogPHA+PGI+XFlhZlxSb3V0ZXI8L2I+IGNvbWVzIHByZS1jb25maWd1cmVkIHdpdGggYSBkZWZhdWx0IHJvdXRlIFxZYWZcUm91dGVfU3RhdGljLCB3aGljaCB3aWxsIG1hdGNoIFVSSXMgaW4gdGhlIHNoYXBlIG9mIGNvbnRyb2xsZXIvYWN0aW9uLiBBZGRpdGlvbmFsbHksIGEgbW9kdWxlIG5hbWUgbWF5IGJlIHNwZWNpZmllZCBhcyB0aGUgZmlyc3QgcGF0aCBlbGVtZW50LCBhbGxvd2luZyBVUklzIG9mIHRoZSBmb3JtIG1vZHVsZS9jb250cm9sbGVyL2FjdGlvbi4gRmluYWxseSwgaXQgd2lsbCBhbHNvIG1hdGNoIGFueSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXBwZW5kZWQgdG8gdGhlIFVSSSBieSBkZWZhdWx0IC0gY29udHJvbGxlci9hY3Rpb24vdmFyMS92YWx1ZTEvdmFyMi92YWx1ZTIuPC9wPgogKiA8YnIvPgogKiA8Yj5Ob3RlOjwvYj4KICogPHA+TW9kdWxlIG5hbWUgbXVzdCBiZSBkZWZpbmVkIGluIGNvbmZpZywgY29uc2lkZXJpbmcgYXBwbGljYXRpb24ubW9kdWxlPSJJbmRleCxGb28sQmFyIiwgaW4gdGhpcyBjYXNlLCBvbmx5IGluZGV4LCBmb28gYW5kIGJhciBjYW4gYmUgY29uc2lkZXJlZCBhcyBhIG1vZHVsZSBuYW1lLiBpZiBkb2Vzbid0IGNvbmZpZywgdGhlcmUgaXMgb25seSBvbmUgbW9kdWxlIG5hbWVkICJJbmRleCIuPC9wPgogKiA8YnIvPgogKiA8cD4qKiBTZWUgZXhhbXBsZXMgYnkgb3BlbmluZyB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbjwvcD4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLXJvdXRlci5waHAKICovCmNsYXNzIFJvdXRlcgp7CiAgICAvKioKICAgICAqIEB2YXIgXFlhZlxSb3V0ZV9JbnRlcmZhY2VbXSByZWdpc3RlcmVkIHJvdXRlcyBzdGFjawogICAgICovCiAgICBwcm90ZWN0ZWQgJF9yb3V0ZXM7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZyBhZnRlciByb3V0aW5nIHBoYXNlLCB0aGlzIGluZGljYXRlZCB0aGUgbmFtZSBvZiB3aGljaCByb3V0ZSBpcyB1c2VkIHRvIHJvdXRlIGN1cnJlbnQgcmVxdWVzdC4geW91IGNhbiBnZXQgdGhpcyBuYW1lIGJ5IFxZYWZcUm91dGVyOjpnZXRDdXJyZW50Um91dGUoKQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9jdXJyZW50OwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlci5jb25zdHJ1Y3QucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiA8cD5ieSBkZWZhdWx0LCBcWWFmXFJvdXRlciB1c2luZyBhIFxZYWZcUm91dGVfU3RhdGljIGFzIGl0cyBkZWZhdWx0IHJvdXRlLiB5b3UgY2FuIGFkZCBuZXcgcm91dGVzIGludG8gcm91dGVyJ3Mgcm91dGUgc3RhY2sgYnkgY2FsbGluZyB0aGlzIG1ldGhvZC48L3A+CiAgICAgKiA8YnIvPgogICAgICogPHA+dGhlIG5ld2VyIHJvdXRlIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgb2xkZXIocm91dGUgc3RhY2spLCBhbmQgaWYgdGhlIG5ld2VyIHJvdXRlciByZXR1cm4gVFJVRSwgdGhlIHJvdXRlciBwcm9jZXNzIHdpbGwgYmUgZW5kLiBvdGhlcndpc2UsIHRoZSBvbGRlciBvbmUgd2lsbCBiZSBjYWxsZWQuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZXIuYWRkcm91dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIFxZYWZcUm91dGVfSW50ZXJmYWNlICRyb3V0ZQogICAgICoKICAgICAqIEByZXR1cm4gXFlhZlxSb3V0ZXJ8ZmFsc2UgcmV0dXJuIEZBTFNFIG9uIGZhaWx1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZFJvdXRlKCRuYW1lLCBSb3V0ZV9JbnRlcmZhY2UgJHJvdXRlKSB7fQoKICAgIC8qKgogICAgICogPHA+QWRkIHJvdXRlcyBkZWZpbmVkIGJ5IGNvbmZpZ3MgaW50byBcWWFmXFJvdXRlcidzIHJvdXRlIHN0YWNrPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZXIuYWRkY29uZmlnLnBocAogICAgICoKICAgICAqIEBwYXJhbSBcWWFmXENvbmZpZ19BYnN0cmFjdCAkY29uZmlnCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXFJvdXRlcnxmYWxzZSByZXR1cm4gRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkQ29uZmlnKENvbmZpZ19BYnN0cmFjdCAkY29uZmlnKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlci5yb3V0ZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gXFlhZlxSZXF1ZXN0X0Fic3RyYWN0ICRyZXF1ZXN0CiAgICAgKgogICAgICogQHJldHVybiBcWWFmXFJvdXRlcnxmYWxzZSByZXR1cm4gRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm91dGUoUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCkge30KCiAgICAvKioKICAgICAqIDxwPlJldHJpZXZlIGEgcm91dGUgYnkgbmFtZSwgc2VlIGFsc28gXFlhZlxSb3V0ZXI6OmdldEN1cnJlbnRSb3V0ZSgpPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZXIuZ2V0cm91dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gXFlhZlxSb3V0ZV9JbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJvdXRlKCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlci5nZXRyb3V0ZXMucGhwCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXFJvdXRlX0ludGVyZmFjZVtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSb3V0ZXMoKSB7fQoKICAgIC8qKgogICAgICogPHA+R2V0IHRoZSBuYW1lIG9mIHRoZSByb3V0ZSB3aGljaCBpcyBlZmZlY3RpdmUgaW4gdGhlIHJvdXRlIHByb2Nlc3MuPC9wPgogICAgICogPGJyLz4KICAgICAqIDxiPk5vdGU6PC9iPgogICAgICogPHA+WW91IHNob3VsZCBjYWxsIHRoaXMgbWV0aG9kIGFmdGVyIHRoZSByb3V0ZSBwcm9jZXNzIGZpbmlzaGVkLCBzaW5jZSBiZWZvcmUgdGhhdCwgdGhpcyBtZXRob2Qgd2lsbCBhbHdheXMgcmV0dXJuIE5VTEwuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZXIuZ2V0Y3VycmVudHJvdXRlLnBocAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBuYW1lIG9mIHRoZSBlZmZlY3RpdmUgcm91dGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDdXJyZW50Um91dGUoKSB7fQp9LyoqCiAqIDxwPkJvb3RzdHJhcCBpcyBhIG1lY2hhbmlzbSB1c2VkIHRvIGRvIHNvbWUgaW5pdGlhbCBjb25maWcgYmVmb3JlIGEgQXBwbGljYXRpb24gcnVuLjxici8+PGJyLz48L3A+CiAqIDxwPlVzZXIgbWF5IGRlZmluZSB0aGVpciBvd24gQm9vdHN0cmFwIGNsYXNzIGJ5IGluaGVyaXRpbmcgPGI+XFlhZlxCb290c3RyYXBfQWJzdHJhY3Q8L2I+PGJyLz48YnIvPjwvcD4KICogPHA+QW55IG1ldGhvZCBkZWNsYXJlZCBpbiBCb290c3RyYXAgY2xhc3Mgd2l0aCBsZWFkaW5nICJfaW5pdCIsIHdpbGwgYmUgY2FsbGVkIGJ5IFxZYWZcQXBwbGljYXRpb246OmJvb3RzdHJhcCgpIG9uZSBieSBvbmUgYWNjb3JkaW5nIHRvIHRoZWlyIGRlZmluZWQgb3JkZXI8YnIvPjxici8+PC9wPgogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtYm9vdHN0cmFwLWFic3RyYWN0LnBocAogKi8KYWJzdHJhY3QgY2xhc3MgQm9vdHN0cmFwX0Fic3RyYWN0IHt9LyoqCiAqIDxwPjxiPlxZYWZcQ29udHJvbGxlcl9BYnN0cmFjdDwvYj4gaXMgdGhlIGhlYXJ0IG9mIFlhZidzIHN5c3RlbS4gTVZDIHN0YW5kcyBmb3IgTW9kZWwtVmlldy1Db250cm9sbGVyIGFuZCBpcyBhIGRlc2lnbiBwYXR0ZXJuIHRhcmdldGVkIGF0IHNlcGFyYXRpbmcgYXBwbGljYXRpb24gbG9naWMgZnJvbSBkaXNwbGF5IGxvZ2ljLjwvcD4KICogPGJyLz4KICogPHA+RXZlcnkgY3VzdG9tIGNvbnRyb2xsZXIgc2hhbGwgaW5oZXJpdCA8Yj5cWWFmXENvbnRyb2xsZXJfQWJzdHJhY3Q8L2I+LjwvcD4KICogPGJyLz4KICogPHA+WW91IHdpbGwgZmluZCB0aGF0IHlvdSBjYW4gbm90IGRlZmluZSBfX2NvbnN0cnVjdCBmdW5jdGlvbiBmb3IgeW91ciBjdXN0b20gY29udHJvbGxlciwgdGh1cywgPGI+XFlhZlxDb250cm9sbGVyX0Fic3RyYWN0PC9iPiBwcm92aWRlcyBhIG1hZ2ljIG1ldGhvZDogXFlhZlxDb250cm9sbGVyX0Fic3RyYWN0Ojppbml0KCkuPC9wPgogKiA8YnIvPgogKiA8cD5JZiB5b3UgaGF2ZSBkZWZpbmVkIGEgaW5pdCgpIG1ldGhvZCBpbiB5b3VyIGN1c3RvbSBjb250cm9sbGVyLCBpdCB3aWxsIGJlIGNhbGxlZCBhcyBsb25nIGFzIHRoZSBjb250cm9sbGVyIHdhcyBpbnN0YW50aWF0ZWQuPC9wPgogKiA8YnIvPgogKiA8cD5BY3Rpb24gbWF5IGhhdmUgYXJndW1lbnRzLCB3aGVuIGEgcmVxdWVzdCBjb21pbmcsIGlmIHRoZXJlIGFyZSB0aGUgc2FtZSBuYW1lIHZhcmlhYmxlIGluIHRoZSByZXF1ZXN0IHBhcmFtZXRlcnMoc2VlIFxZYWZcUmVxdWVzdF9BYnN0cmFjdDo6Z2V0UGFyYW0oKSkgYWZ0ZXIgcm91dGVkLCBZYWYgd2lsbCBwYXNzIHRoZW0gdG8gdGhlIGFjdGlvbiBtZXRob2QgKHNlZSBcWWFmXEFjdGlvbl9BYnN0cmFjdDo6ZXhlY3V0ZSgpKS48L3A+CiAqIDxici8+CiAqIDxiPk5vdGU6PC9iPgogKiA8cD5UaGVzZSBhcmd1bWVudHMgYXJlIGRpcmVjdGx5IGZldGNoZWQgd2l0aG91dCBmaWx0ZXJpbmcsIGl0IHNob3VsZCBiZSBjYXJlZnVsbHkgcHJvY2Vzc2VkIGJlZm9yZSB1c2UgdGhlbS48L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1jb250cm9sbGVyLWFic3RyYWN0LnBocAogKi8KYWJzdHJhY3QgY2xhc3MgQ29udHJvbGxlcl9BYnN0cmFjdAp7CiAgICAvKioKICAgICAqIEBzZWUgXFlhZlxBY3Rpb25fQWJzdHJhY3QKICAgICAqIEB2YXIgYXJyYXkgWW91IGNhbiBhbHNvIGRlZmluZSBhIGFjdGlvbiBtZXRob2QgaW4gYSBzZXBhcmF0ZSBQSFAgc2NyaXB0IGJ5IHVzaW5nIHRoaXMgcHJvcGVydHkgYW5kIFxZYWZcQWN0aW9uX0Fic3RyYWN0LgogICAgICovCiAgICBwdWJsaWMgJGFjdGlvbnM7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZyBtb2R1bGUgbmFtZQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9tb2R1bGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZyBjb250cm9sbGVyIG5hbWUKICAgICAqLwogICAgcHJvdGVjdGVkICRfbmFtZTsKCiAgICAvKioKICAgICAqIEB2YXIgXFlhZlxSZXF1ZXN0X0Fic3RyYWN0IGN1cnJlbnQgcmVxdWVzdCBvYmplY3QKICAgICAqLwogICAgcHJvdGVjdGVkICRfcmVxdWVzdDsKCiAgICAvKioKICAgICAqIEB2YXIgXFlhZlxSZXNwb25zZV9BYnN0cmFjdCBjdXJyZW50IHJlc3BvbnNlIG9iamVjdAogICAgICovCiAgICBwcm90ZWN0ZWQgJF9yZXNwb25zZTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRfaW52b2tlX2FyZ3M7CgogICAgLyoqCiAgICAgKiBAdmFyIFxZYWZcVmlld19JbnRlcmZhY2UgdmlldyBlbmdpbmUgb2JqZWN0CiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3ZpZXc7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5yZW5kZXIucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHBsCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtZXRlcnMKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVuZGVyKCR0cGwsIGFycmF5ICRwYXJhbWV0ZXJzID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb250cm9sbGVyLWFic3RyYWN0LmRpc3BsYXkucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHBsCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtZXRlcnMKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGRpc3BsYXkoJHRwbCwgYXJyYXkgJHBhcmFtZXRlcnMgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogcmV0cmlldmUgY3VycmVudCByZXF1ZXN0IG9iamVjdAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb250cm9sbGVyLWFic3RyYWN0LmdldHJlcXVlc3QucGhwCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXFJlcXVlc3RfQWJzdHJhY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlcXVlc3QoKSB7fQoKICAgIC8qKgogICAgICogcmV0cmlldmUgY3VycmVudCByZXNwb25zZSBvYmplY3QKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5nZXRyZXNwb25zZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIFxZYWZcUmVzcG9uc2VfQWJzdHJhY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3BvbnNlKCkge30KCiAgICAvKioKICAgICAqIGdldCB0aGUgY29udHJvbGxlcidzIG1vZHVsZSBuYW1lCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbnRyb2xsZXItYWJzdHJhY3QuZ2V0bW9kdWxlbmFtZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TW9kdWxlTmFtZSgpIHt9CgogICAgLyoqCiAgICAgKiByZXRyaWV2ZSB2aWV3IGVuZ2luZQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb250cm9sbGVyLWFic3RyYWN0LmdldHZpZXcucGhwCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXFZpZXdfSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWaWV3KCkge30KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIG5vdF9pbXBsZW1lbnRlZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbnRyb2xsZXItYWJzdHJhY3QuaW5pdHZpZXcucGhwCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXFJlc3BvbnNlX0Fic3RyYWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbml0VmlldyhhcnJheSAkb3B0aW9ucyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5zZXR2aWV3cGF0aC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2aWV3X2RpcmVjdG9yeQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Vmlld3BhdGgoJHZpZXdfZGlyZWN0b3J5KSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbnRyb2xsZXItYWJzdHJhY3QuZ2V0dmlld3BhdGgucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZpZXdwYXRoKCkge30KCiAgICAvKioKICAgICAqIDxwPmZvcndhcmQgY3VycmVudCBleGVjdXRpb24gcHJvY2VzcyB0byBvdGhlciBhY3Rpb24uPC9wPgogICAgICogPGJyLz4KICAgICAqIDxiPk5vdGU6PC9iPgogICAgICogPHA+dGhpcyBtZXRob2QgZG9lc24ndCBzd2l0Y2ggdG8gdGhlIGRlc3RpbmF0aW9uIGFjdGlvbiBpbW1lZGlhdGVseSwgaXQgd2lsbCB0YWtlIHBsYWNlIGFmdGVyIGN1cnJlbnQgZmxvdyBmaW5pc2guPC9wPgogICAgICogPGJyLz4KICAgICAqIDxiPk5vdGljZSwgdGhlcmUgYXJlIDMgYXZhaWxhYmxlIG1ldGhvZCBzaWduYXR1cmVzOjwvYj4KICAgICAqIDxwPlxZYWZcQ29udHJvbGxlcl9BYnN0cmFjdDo6Zm9yd2FyZCAoIHN0cmluZyAkbW9kdWxlICwgc3RyaW5nICRjb250cm9sbGVyICwgc3RyaW5nICRhY3Rpb24gWywgYXJyYXkgJHBhcmFtZXRlcnMgXSApPC9wPgogICAgICogPHA+XFlhZlxDb250cm9sbGVyX0Fic3RyYWN0Ojpmb3J3YXJkICggc3RyaW5nICRjb250cm9sbGVyICwgc3RyaW5nICRhY3Rpb24gWywgYXJyYXkgJHBhcmFtZXRlcnMgXSApPC9wPgogICAgICogPHA+XFlhZlxDb250cm9sbGVyX0Fic3RyYWN0Ojpmb3J3YXJkICggc3RyaW5nICRhY3Rpb24gWywgYXJyYXkgJHBhcmFtZXRlcnMgXSApPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb250cm9sbGVyLWFic3RyYWN0LmZvcndhcmQucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlIGRlc3RpbmF0aW9uIG1vZHVsZSBuYW1lLCBpZiBOVUxMIHdhcyBnaXZlbiwgdGhlbiBkZWZhdWx0IG1vZHVsZSBuYW1lIGlzIGFzc3VtZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnRyb2xsZXIgZGVzdGluYXRpb24gY29udHJvbGxlciBuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhY3Rpb24gZGVzdGluYXRpb24gYWN0aW9uIG5hbWUKICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1ldGVycyBjYWxsaW5nIGFyZ3VtZW50cwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCByZXR1cm4gRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9yd2FyZCgkbW9kdWxlLCAkY29udHJvbGxlciA9IG51bGwsICRhY3Rpb24gPSBudWxsLCBhcnJheSAkcGFyYW1ldGVycyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiByZWRpcmVjdCB0byBhIFVSTCBieSBzZW5kaW5nIGEgMzAyIGhlYWRlcgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb250cm9sbGVyLWFic3RyYWN0LnJlZGlyZWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVybCBhIGxvY2F0aW9uIFVSTAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVkaXJlY3QoJHVybCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb250cm9sbGVyLWFic3RyYWN0LmdldGludm9rZWFyZ3MucGhwCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW52b2tlQXJncygpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5nZXRpbnZva2VhcmcucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbnZva2VBcmcoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiA8cD5cWWFmXENvbnRyb2xsZXJfQWJzdHJhY3Q6Ol9fY29uc3RydWN0KCkgaXMgZmluYWwsIHdoaWNoIG1lYW5zIHVzZXJzIGNhbiBub3Qgb3ZlcnJpZGUgaXQuIGJ1dCB1c2VycyBjYW4gZGVmaW5lIDxiPlxZYWZcQ29udHJvbGxlcl9BYnN0cmFjdDo6aW5pdCgpPC9iPiwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgY29udHJvbGxlciBvYmplY3QgaXMgaW5zdGFudGlhdGVkLjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5pbml0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5pdCgpIHt9CgogICAgLyoqCiAgICAgKiA8Yj5cWWFmXENvbnRyb2xsZXJfQWJzdHJhY3Q8L2I+OjpfX2NvbnN0cnVjdCgpIGlzIGZpbmFsLCB3aGljaCBtZWFucyBpdCBjYW4gbm90IGJlIG92ZXJyaWRkZW4uIFlvdSBtYXkgd2FudCB0byBzZWUgXFlhZlxDb250cm9sbGVyX0Fic3RyYWN0Ojppbml0KCkgaW5zdGVhZC4KICAgICAqCiAgICAgKiBAc2VlIFxZYWZcQ29udHJvbGxlcl9BYnN0cmFjdDo6aW5pdCgpCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5jb25zdHJ1Y3QucGhwCiAgICAgKgogICAgICogQHBhcmFtIFxZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICogQHBhcmFtIFxZYWZcUmVzcG9uc2VfQWJzdHJhY3QgJHJlc3BvbnNlCiAgICAgKiBAcGFyYW0gXFlhZlxWaWV3X0ludGVyZmFjZSAkdmlldwogICAgICogQHBhcmFtIGFycmF5ICRpbnZva2VBcmdzCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChSZXF1ZXN0X0Fic3RyYWN0ICRyZXF1ZXN0LCBSZXNwb25zZV9BYnN0cmFjdCAkcmVzcG9uc2UsIFZpZXdfSW50ZXJmYWNlICR2aWV3LCBhcnJheSAkaW52b2tlQXJncyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5jbG9uZS5waHAKICAgICAqLwogICAgZmluYWwgcHJpdmF0ZSBmdW5jdGlvbiBfX2Nsb25lKCkge30KfS8qKgogKiA8cD5BIGFjdGlvbiBjYW4gYmUgZGVmaW5lZCBpbiBhIHNlcGFyYXRlIGZpbGUgaW4gWWFmKHNlZSBcWWFmXENvbnRyb2xsZXJfQWJzdHJhY3QpLiB0aGF0IGlzIGEgYWN0aW9uIG1ldGhvZCBjYW4gYWxzbyBiZSBhIDxiPlxZYWZcQWN0aW9uX0Fic3RyYWN0PC9iPiBjbGFzcy48L1A+CiAqIDxici8+CiAqIDxwPlNpbmNlIHRoZXJlIHNob3VsZCBiZSBhIGVudHJ5IHBvaW50IHdoaWNoIGNhbiBiZSBjYWxsZWQgYnkgWWFmIChhcyBvZiBQSFAgNS4zLCB0aGVyZSBpcyBhIG5ldyBtYWdpYyBtZXRob2QgX19pbnZva2UsIGJ1dCBZYWYgaXMgbm90IG9ubHkgd29ya3Mgd2l0aCBQSFAgNS4zKywgWWFmIGNob29zZSBhbm90aGVyIG1hZ2ljIG1ldGhvZCBleGVjdXRlKSwgeW91IG11c3QgaW1wbGVtZW50IHRoZSBhYnN0cmFjdCBtZXRob2QgXFlhZlxBY3Rpb25fQWJzdHJhY3Q6OmV4ZWN1dGUoKSBpbiB5b3VyIGN1c3RvbSBhY3Rpb24gY2xhc3MuPC9wPgogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtYWN0aW9uLWFic3RyYWN0LnBocAogKi8KYWJzdHJhY3QgY2xhc3MgQWN0aW9uX0Fic3RyYWN0IGV4dGVuZHMgXFlhZlxDb250cm9sbGVyX0Fic3RyYWN0CnsKICAgIC8qKgogICAgICogQHZhciBcWWFmXENvbnRyb2xsZXJfQWJzdHJhY3QKICAgICAqLwogICAgcHJvdGVjdGVkICRfY29udHJvbGxlcjsKCiAgICAvKioKICAgICAqIDxwPnVzZXIgc2hvdWxkIGFsd2F5cyBkZWZpbmUgdGhpcyBtZXRob2QgZm9yIGEgYWN0aW9uLCB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCBvZiBhbiBhY3Rpb24uIDxiPlxZYWZcQWN0aW9uX0Fic3RyYWN0OjpleGVjdXRlKCk8L2I+IG1heSBoYXZlIGFyZ3VtZW50cy48L3A+CiAgICAgKiA8YnIvPgogICAgICogPGI+Tm90ZTo8L2I+CiAgICAgKiA8cD5UaGUgdmFsdWUgcmV0cmlldmVkIGZyb20gdGhlIHJlcXVlc3QgaXMgbm90IHNhZmUuIHlvdSBzaG91bGQgZG8gc29tZSBmaWx0ZXJpbmcgd29yayBiZWZvcmUgeW91IHVzZSBpdC48L3A+CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYWN0aW9uLWFic3RyYWN0LmV4ZWN1dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkIC4uLiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpOwoKICAgIC8qKgogICAgICogcmV0cmlldmUgY3VycmVudCBjb250cm9sbGVyIG9iamVjdC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYWN0aW9uLWFic3RyYWN0LmdldGNvbnRyb2xsZXIucGhwCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXENvbnRyb2xsZXJfQWJzdHJhY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRyb2xsZXIoKSB7fQp9LyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1jb25maWctYWJzdHJhY3QucGhwCiAqLwphYnN0cmFjdCBjbGFzcyBDb25maWdfQWJzdHJhY3QKewogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2NvbmZpZyA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJvdGVjdGVkICRfcmVhZG9ubHkgPSB0cnVlOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbmZpZy1hYnN0cmFjdC5nZXQucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRuYW1lID0gbnVsbCk7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29uZmlnLWFic3RyYWN0LnNldC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKiBAcmV0dXJuIFxZYWZcQ29uZmlnX0Fic3RyYWN0CiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBzZXQoJG5hbWUsICR2YWx1ZSk7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29uZmlnLWFic3RyYWN0LnJlYWRvbmx5LnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gcmVhZG9ubHkoKTsKCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb25maWctYWJzdHJhY3QudG9hcnJheS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk7Cn0vKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLXJlcXVlc3QtYWJzdHJhY3QucGhwCiAqLwphYnN0cmFjdCBjbGFzcyBSZXF1ZXN0X0Fic3RyYWN0CnsKICAgIHB1YmxpYyBjb25zdCBTQ0hFTUVfSFRUUCA9ICdodHRwJzsKICAgIHB1YmxpYyBjb25zdCBTQ0hFTUVfSFRUUFMgPSAnaHR0cHMnOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRtb2R1bGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGNvbnRyb2xsZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJGFjdGlvbjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkbWV0aG9kOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJHBhcmFtczsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkbGFuZ3VhZ2U7CgogICAgLyoqCiAgICAgKiBAdmFyIFxZYWZcRXhjZXB0aW9uCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2V4Y2VwdGlvbjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2Jhc2VfdXJpID0gIiI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJHVyaSA9ICIiOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRkaXNwYXRjaGVkID0gIiI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJHJvdXRlZCA9ICIiOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuaXNnZXQucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0dldCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5pc3Bvc3QucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1Bvc3QoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuaXNwdXQucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1B1dCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5pc2hlYWQucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0hlYWQoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuaXNvcHRpb25zLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNPcHRpb25zKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LmlzY2xpLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNDbGkoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuaXNkaXNwYWNoZWQucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0Rpc3BhdGNoZWQoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuaXNyb3V0ZWQucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JvdXRlZCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5pc3htbGh0dHByZXF1ZXN0LnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNYbWxIdHRwUmVxdWVzdCgpIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSAkX1NFUlZFUiB2YXJpYWJsZQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LmdldHNlcnZlci5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSB2YXJpYWJsZSBuYW1lLCBpZiBub3QgcHJvdmlkZWQgcmV0dXJucyBhbGwKICAgICAqIEBwYXJhbSBtaXhlZCAkZGVmYXVsdCBpZiB0aGlzIHBhcmFtZXRlciBpcyBwcm92aWRlLCB0aGlzIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHZhcmlhYmxlIGNhbiBub3QgYmUgZm91bmQKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXIoJG5hbWUgPSBudWxsLCAkZGVmYXVsdCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSAkX0VOViB2YXJpYWJsZQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LmdldGVudi5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSB2YXJpYWJsZSBuYW1lLCBpZiBub3QgcHJvdmlkZWQgcmV0dXJucyBhbGwKICAgICAqIEBwYXJhbSBtaXhlZCAkZGVmYXVsdCBpZiB0aGlzIHBhcmFtZXRlciBpcyBwcm92aWRlLCB0aGlzIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHZhcmlhYmxlIGNhbiBub3QgYmUgZm91bmQKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFbnYoJG5hbWUgPSBudWxsLCAkZGVmYXVsdCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5nZXRwYXJhbS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRlZmF1bHQKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXJhbSgkbmFtZSwgJGRlZmF1bHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuZ2V0cGFyYW1zLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcmFtcygpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5nZXRleGNlcHRpb24ucGhwCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhjZXB0aW9uKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LmdldG1vdWRsZW5hbWUucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZHVsZU5hbWUoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuZ2V0Y29udHJvbGxlcm5hbWUucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRyb2xsZXJOYW1lKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LmdldGFjdGlvbm5hbWUucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFjdGlvbk5hbWUoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3Quc2V0cGFyYW0ucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAkbmFtZSB0aGUgdmFyaWFibGUgbmFtZSwgb3IgYW4gYXJyYXkgb2Yga2V5PT52YWx1ZSBwYWlycwogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIFxZYWZcUmVxdWVzdF9BYnN0cmFjdHxib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQYXJhbSgkbmFtZSwgJHZhbHVlID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LnNldG1vZHVsZW5hbWUucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXFJlcXVlc3RfQWJzdHJhY3R8Ym9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TW9kdWxlTmFtZSgkbW9kdWxlKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3Quc2V0Y29udHJvbGxlcm5hbWUucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY29udHJvbGxlcgogICAgICoKICAgICAqIEByZXR1cm4gXFlhZlxSZXF1ZXN0X0Fic3RyYWN0fGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbnRyb2xsZXJOYW1lKCRjb250cm9sbGVyKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3Quc2V0YWN0aW9ubmFtZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhY3Rpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFxZYWZcUmVxdWVzdF9BYnN0cmFjdHxib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBY3Rpb25OYW1lKCRhY3Rpb24pIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5nZXRtZXRob2QucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGhvZCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5nZXRsYW5ndWFnZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2UoKSB7fQoKICAgIC8qKgogICAgICogPHA+U2V0IGJhc2UgVVJJLCBiYXNlIFVSSSBpcyB1c2VkIHdoZW4gZG9pbmcgcm91dGluZywgaW4gcm91dGluZyBwaGFzZSByZXF1ZXN0IFVSSSBpcyB1c2VkIHRvIHJvdXRlIGEgcmVxdWVzdCwgd2hpbGUgYmFzZSBVUkkgaXMgdXNlZCB0byBza2lwIHRoZSBsZWFkaW5nIHBhcnQoYmFzZSBVUkkpIG9mIHJlcXVlc3QgVVJJLiBUaGF0IGlzLCBpZiBjb21lcyBhIHJlcXVlc3Qgd2l0aCByZXF1ZXN0IFVSSSBhL2IvYywgdGhlbiBpZiB5b3Ugc2V0IGJhc2UgVVJJIHRvICJhL2IiLCBvbmx5ICIvYyIgd2lsbCBiZSB1c2VkIGluIHJvdXRpbmcgcGhhc2UuPC9wPgogICAgICogPGJyLz4KICAgICAqIDxiPk5vdGU6PC9iPgogICAgICogPHA+Z2VuZXJhbGx5LCB5b3UgZG9uJ3QgbmVlZCB0byBzZXQgdGhpcywgWWFmIHdpbGwgZGV0ZXJtaW5lIGl0IGF1dG9tYXRpY2FsbHkuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LnNldGJhc2V1cmkucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdXJpIGJhc2UgVVJJCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRCYXNlVXJpKCR1cmkpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5nZXRiYXNldXJpLnBocAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCYXNlVXJpKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LmdldHJlcXVlc3R1cmkucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlcXVlc3RVcmkoKSB7fQoKICAgIC8qKgogICAgICogQHNpbmNlIDIuMS4wCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5zZXRyZXF1ZXN0dXJpLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVyaSByZXF1ZXN0IFVSSQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVxdWVzdFVyaSgkdXJpKSB7fQoKICAgIC8qKgogICAgICogU2V0IHJlcXVlc3QgYXMgZGlzcGF0Y2hlZAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LnNldGRpc3BhdGNoZWQucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREaXNwYXRjaGVkKCkge30KCiAgICAvKioKICAgICAqIFNldCByZXF1ZXN0IGFzIHJvdXRlZAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LnNldHJvdXRlZC5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIFxZYWZcUmVxdWVzdF9BYnN0cmFjdHxib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSb3V0ZWQoKSB7fQp9LyoqCiAqIDxwPlBsdWdpbnMgYWxsb3cgZm9yIGVhc3kgZXh0ZW5zaWJpbGl0eSBhbmQgY3VzdG9taXphdGlvbiBvZiB0aGUgZnJhbWV3b3JrLjwvcD4KICogPGJyLz4KICogPHA+UGx1Z2lucyBhcmUgY2xhc3Nlcy4gVGhlIGFjdHVhbCBjbGFzcyBkZWZpbml0aW9uIHdpbGwgdmFyeSBiYXNlZCBvbiB0aGUgY29tcG9uZW50IC0tIHlvdSBtYXkgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UsIGJ1dCB0aGUgZmFjdCByZW1haW5zIHRoYXQgdGhlIHBsdWdpbiBpcyBpdHNlbGYgYSBjbGFzcy48L3A+CiAqIDxici8+CiAqIDxwPkEgcGx1Z2luIGNvdWxkIGJlIGxvYWRlZCBpbnRvIFlhZiBieSB1c2luZyBcWWFmXERpc3BhdGNoZXI6OnJlZ2lzdGVyUGx1Z2luKCksIGFmdGVyIHJlZ2lzdGVyZWQsIEFsbCB0aGUgbWV0aG9kcyB3aGljaCB0aGUgcGx1Z2luIGltcGxlbWVudGVkIGFjY29yZGluZyB0byB0aGlzIGludGVyZmFjZSwgd2lsbCBiZSBjYWxsZWQgYXQgdGhlIHByb3BlciB0aW1lLjwvcD4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLXBsdWdpbi1hYnN0cmFjdC5waHAKICovCmFic3RyYWN0IGNsYXNzIFBsdWdpbl9BYnN0cmFjdAp7CiAgICAvKioKICAgICAqIFRoaXMgaXMgdGhlIGVhcmxpZXN0IGhvb2sgaW4gWWFmIHBsdWdpbiBob29rIHN5c3RlbSwgaWYgYSBjdXN0b20gcGx1Z2luIGltcGxlbWVudCB0aGlzIG1ldGhvZCwgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgcm91dGluZyBhIHJlcXVlc3QuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXBsdWdpbi1hYnN0cmFjdC5yb3V0ZXJzdGFydHVwLnBocAogICAgICoKICAgICAqIEBwYXJhbSBcWWFmXFJlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QKICAgICAqIEBwYXJhbSBcWWFmXFJlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb3V0ZXJTdGFydHVwKFJlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QsIFJlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZSkge30KCiAgICAvKioKICAgICAqIFRoaXMgaG9vayB3aWxsIGJlIHRyaWdnZWQgYWZ0ZXIgdGhlIHJvdXRlIHByb2Nlc3MgZmluaXNoZWQsIHRoaXMgaG9vayBpcyB1c3VhbGx5IHVzZWQgZm9yIGxvZ2luIGNoZWNrLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1wbHVnaW4tYWJzdHJhY3Qucm91dGVyc2h1dGRvd24ucGhwCiAgICAgKgogICAgICogQHBhcmFtIFxZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICogQHBhcmFtIFxZYWZcUmVzcG9uc2VfQWJzdHJhY3QgJHJlc3BvbnNlCiAgICAgKgogICAgICogQHJldHVybiBib29sIHRydWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJvdXRlclNodXRkb3duKFJlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QsIFJlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZSkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1wbHVnaW4tYWJzdHJhY3QuZGlzcGF0Y2hsb29wc3RhcnR1cC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gXFlhZlxSZXF1ZXN0X0Fic3RyYWN0ICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gXFlhZlxSZXNwb25zZV9BYnN0cmFjdCAkcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzcGF0Y2hMb29wU3RhcnR1cChSZXF1ZXN0X0Fic3RyYWN0ICRyZXF1ZXN0LCBSZXNwb25zZV9BYnN0cmFjdCAkcmVzcG9uc2UpIHt9CgogICAgLyoqCiAgICAgKiBUaGlzIGlzIHRoZSBsYXRlc3QgaG9vayBpbiBZYWYgcGx1Z2luIGhvb2sgc3lzdGVtLCBpZiBhIGN1c3RvbSBwbHVnaW4gaW1wbGVtZW50IHRoaXMgbWV0aG9kLCB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBkaXNwYXRjaCBsb29wIGZpbmlzaGVkLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1wbHVnaW4tYWJzdHJhY3QuZGlzcGF0Y2hsb29wc2h1dGRvd24ucGhwCiAgICAgKgogICAgICogQHBhcmFtIFxZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICogQHBhcmFtIFxZYWZcUmVzcG9uc2VfQWJzdHJhY3QgJHJlc3BvbnNlCiAgICAgKgogICAgICogQHJldHVybiBib29sIHRydWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc3BhdGNoTG9vcFNodXRkb3duKFJlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QsIFJlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZSkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1wbHVnaW4tYWJzdHJhY3QucHJlZGlzcGF0Y2gucGhwCiAgICAgKgogICAgICogQHBhcmFtIFxZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICogQHBhcmFtIFxZYWZcUmVzcG9uc2VfQWJzdHJhY3QgJHJlc3BvbnNlCiAgICAgKgogICAgICogQHJldHVybiBib29sIHRydWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZURpc3BhdGNoKFJlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QsIFJlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZSkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1wbHVnaW4tYWJzdHJhY3QucG9zdGRpc3BhdGNoLnBocAogICAgICoKICAgICAqIEBwYXJhbSBcWWFmXFJlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QKICAgICAqIEBwYXJhbSBcWWFmXFJlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwb3N0RGlzcGF0Y2goUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCwgUmVzcG9uc2VfQWJzdHJhY3QgJHJlc3BvbnNlKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXBsdWdpbi1hYnN0cmFjdC5wcmVyZXNwb25zZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gXFlhZlxSZXF1ZXN0X0Fic3RyYWN0ICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gXFlhZlxSZXNwb25zZV9BYnN0cmFjdCAkcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJlUmVzcG9uc2UoUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCwgUmVzcG9uc2VfQWJzdHJhY3QgJHJlc3BvbnNlKSB7fQp9LyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1yZXNwb25zZS1hYnN0cmFjdC5waHAKICovCmFic3RyYWN0IGNsYXNzIFJlc3BvbnNlX0Fic3RyYWN0CnsKICAgIHB1YmxpYyBjb25zdCBERUZBVUxUX0JPRFkgPSAiY29udGVudCI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9oZWFkZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9ib2R5OwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3NlbmRoZWFkZXI7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3QuY29uc3RydWN0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlc3BvbnNlLWFic3RyYWN0LmRlc3RydWN0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3QuY2xvbmUucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jbG9uZSgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3QudG9zdHJpbmcucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkge30KCiAgICAvKioKICAgICAqIFNldCBjb250ZW50IHRvIHJlc3BvbnNlCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlc3BvbnNlLWFic3RyYWN0LnNldGJvZHkucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY29udGVudCBjb250ZW50IHN0cmluZwogICAgICogQHBhcmFtIHN0cmluZyAka2V5IDxwPnRoZSBjb250ZW50IGtleSwgeW91IGNhbiBzZXQgYSBjb250ZW50IHdpdGggYSBrZXksIGlmIHlvdSBkb24ndCBzcGVjaWZpYywgdGhlbiBcWWFmXFJlc3BvbnNlX0Fic3RyYWN0OjpERUZBVUxUX0JPRFkgd2lsbCBiZSB1c2VkPC9wPgogICAgICogPGJyLz4KICAgICAqIDxiPk5vdGU6PC9iPgogICAgICogPHA+dGhpcyBwYXJhbWV0ZXIgaXMgaW50cm9kdWNlZCBhcyBvZiAyLjIuMDwvcD4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEJvZHkoJGNvbnRlbnQsICRrZXkgPSBzZWxmOjpERUZBVUxUX0JPRFkpIHt9CgogICAgLyoqCiAgICAgKiBhcHBlbmQgYSBjb250ZW50IHRvIGEgZXhpc3RzIGNvbnRlbnQgYmxvY2sKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3QuYXBwZW5kYm9keS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50IGNvbnRlbnQgc3RyaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+dGhlIGNvbnRlbnQga2V5LCB5b3UgY2FuIHNldCBhIGNvbnRlbnQgd2l0aCBhIGtleSwgaWYgeW91IGRvbid0IHNwZWNpZmljLCB0aGVuIFxZYWZcUmVzcG9uc2VfQWJzdHJhY3Q6OkRFRkFVTFRfQk9EWSB3aWxsIGJlIHVzZWQ8L3A+CiAgICAgKiA8YnIvPgogICAgICogPGI+Tm90ZTo8L2I+CiAgICAgKiA8cD50aGlzIHBhcmFtZXRlciBpcyBpbnRyb2R1Y2VkIGFzIG9mIDIuMi4wPC9wPgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kQm9keSgkY29udGVudCwgJGtleSA9IHNlbGY6OkRFRkFVTFRfQk9EWSkge30KCiAgICAvKioKICAgICAqIHByZXBlbmQgYSBjb250ZW50IHRvIGEgZXhpc3RzIGNvbnRlbnQgYmxvY2sKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3QucHJlcGVuZGJvZHkucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY29udGVudCBjb250ZW50IHN0cmluZwogICAgICogQHBhcmFtIHN0cmluZyAka2V5IDxwPnRoZSBjb250ZW50IGtleSwgeW91IGNhbiBzZXQgYSBjb250ZW50IHdpdGggYSBrZXksIGlmIHlvdSBkb24ndCBzcGVjaWZpYywgdGhlbiBcWWFmXFJlc3BvbnNlX0Fic3RyYWN0OjpERUZBVUxUX0JPRFkgd2lsbCBiZSB1c2VkPC9wPgogICAgICogPGJyLz4KICAgICAqIDxiPk5vdGU6PC9iPgogICAgICogPHA+dGhpcyBwYXJhbWV0ZXIgaXMgaW50cm9kdWNlZCBhcyBvZiAyLjIuMDwvcD4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXBlbmRCb2R5KCRjb250ZW50LCAka2V5ID0gc2VsZjo6REVGQVVMVF9CT0RZKSB7fQoKICAgIC8qKgogICAgICogQ2xlYXIgZXhpc3RpbmcgY29udGVudAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXNwb25zZS1hYnN0cmFjdC5jbGVhcmJvZHkucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5IDxwPnRoZSBjb250ZW50IGtleSwgeW91IGNhbiBzZXQgYSBjb250ZW50IHdpdGggYSBrZXksIGlmIHlvdSBkb24ndCBzcGVjaWZpYywgdGhlbiBcWWFmXFJlc3BvbnNlX0Fic3RyYWN0OjpERUZBVUxUX0JPRFkgd2lsbCBiZSB1c2VkPC9wPgogICAgICogPGJyLz4KICAgICAqIDxiPk5vdGU6PC9iPgogICAgICogPHA+dGhpcyBwYXJhbWV0ZXIgaXMgaW50cm9kdWNlZCBhcyBvZiAyLjIuMDwvcD4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyQm9keSgka2V5ID0gc2VsZjo6REVGQVVMVF9CT0RZKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgYW4gZXhpc3RpbmcgY29udGVudAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXNwb25zZS1hYnN0cmFjdC5nZXRib2R5LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAka2V5IDxwPnRoZSBjb250ZW50IGtleSwgaWYgeW91IGRvbid0IHNwZWNpZmljLCB0aGVuIFxZYWZcUmVzcG9uc2VfQWJzdHJhY3Q6OkRFRkFVTFRfQk9EWSB3aWxsIGJlIHVzZWQuIGlmIHlvdSBwYXNzIGluIGEgTlVMTCwgdGhlbiBhbGwgY29udGVudHMgd2lsbCBiZSByZXR1cm5lZCBhcyBhIGFycmF5PC9wPgogICAgICogPGJyLz4KICAgICAqIDxiPk5vdGU6PC9iPgogICAgICogPHA+dGhpcyBwYXJhbWV0ZXIgaXMgaW50cm9kdWNlZCBhcyBvZiAyLjIuMDwvcD4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCb2R5KCRrZXkgPSBzZWxmOjpERUZBVUxUX0JPRFkpIHt9Cn0vKioKICogWWFmIHByb3ZpZGVzIGEgYWJpbGl0eSBmb3IgZGV2ZWxvcGVycyB0byB1c2UgY3VzdG9tIHZpZXcgZW5naW5lIGluc3RlYWQgb2YgYnVpbGQtaW4gZW5naW5lIHdoaWNoIGlzIFxZYWZcVmlld1xTaW1wbGUuIFRoZXJlIGlzIGEgZXhhbXBsZSB0byBleHBsYWluIGhvdyB0byBkbyB0aGlzLCBwbGVhc2Ugc2VlIFxZYWZcRGlzcGF0Y2hlcjo6c2V0VmlldygpCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi12aWV3LWludGVyZmFjZS5waHAKICovCmludGVyZmFjZSBWaWV3X0ludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEFzc2lnbiB2YWx1ZXMgdG8gVmlldyBlbmdpbmUsIHRoZW4gdGhlIHZhbHVlIGNhbiBhY2Nlc3MgZGlyZWN0bHkgYnkgbmFtZSBpbiB0ZW1wbGF0ZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtdmlldy1pbnRlcmZhY2UuYXNzaWduLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8YXJyYXkgJG5hbWUKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzaWduKCRuYW1lLCAkdmFsdWUpOwoKICAgIC8qKgogICAgICogUmVuZGVyIGEgdGVtcGxhdGUgYW5kIG91dHB1dCB0aGUgcmVzdWx0IGltbWVkaWF0ZWx5LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LWludGVyZmFjZS5kaXNwbGF5LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRwbAogICAgICogQHBhcmFtIGFycmF5ICR0cGxfdmFycwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwbGF5KCR0cGwsIGFycmF5ICR0cGxfdmFycyA9IG51bGwpOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXZpZXctaW50ZXJmYWNlLmdldHNjcmlwdHBhdGgucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNjcmlwdFBhdGgoKTsKCiAgICAvKioKICAgICAqIFJlbmRlciBhIHRlbXBsYXRlIGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtdmlldy1pbnRlcmZhY2UucmVuZGVyLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRwbAogICAgICogQHBhcmFtIGFycmF5ICR0cGxfdmFycwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbmRlcigkdHBsLCBhcnJheSAkdHBsX3ZhcnMgPSBudWxsKTsKCiAgICAvKioKICAgICAqIFNldCB0aGUgdGVtcGxhdGVzIGJhc2UgZGlyZWN0b3J5LCB0aGlzIGlzIHVzdWFsbHkgY2FsbGVkIGJ5IFxZYWZcRGlzcGF0Y2hlcgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LWludGVyZmFjZS5zZXRzY3JpcHRwYXRoLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRlbXBsYXRlX2RpciBBbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB0ZW1wbGF0ZSBkaXJlY3RvcnksIGJ5IGRlZmF1bHQsIFxZYWZcRGlzcGF0Y2hlciB1c2UgYXBwbGljYXRpb24uZGlyZWN0b3J5IC4gIi92aWV3cyIgYXMgdGhpcyBwYXJhbWV0ZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTY3JpcHRQYXRoKCR0ZW1wbGF0ZV9kaXIpOwp9LyoqCiAqIDxiPlxZYWZcUm91dGVfSW50ZXJmYWNlPC9iPiB1c2VkIGZvciBkZXZlbG9wZXIgZGVmaW5lZCB0aGVpciBjdXN0b20gcm91dGUuCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1yb3V0ZS1pbnRlcmZhY2UucGhwCiAqLwppbnRlcmZhY2UgUm91dGVfSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogPHA+PGI+XFlhZlxSb3V0ZV9JbnRlcmZhY2U6OnJvdXRlKCk8L2I+IGlzIHRoZSBvbmx5IG1ldGhvZCB0aGF0IGEgY3VzdG9tIHJvdXRlIHNob3VsZCBpbXBsZW1lbnQuPC9wPjxici8+CiAgICAgKiA8cD5pZiB0aGlzIG1ldGhvZCByZXR1cm4gVFJVRSwgdGhlbiB0aGUgcm91dGUgcHJvY2VzcyB3aWxsIGJlIGVuZC4gb3RoZXJ3aXNlLCBcWWFmXFJvdXRlciB3aWxsIGNhbGwgbmV4dCByb3V0ZSBpbiB0aGUgcm91dGUgc3RhY2sgdG8gcm91dGUgcmVxdWVzdC48L3A+PGJyLz4KICAgICAqIDxwPlRoaXMgbWV0aG9kIHdvdWxkIHNldCB0aGUgcm91dGUgcmVzdWx0IHRvIHRoZSBwYXJhbWV0ZXIgcmVxdWVzdCwgYnkgY2FsbGluZyBcWWFmXFJlcXVlc3RfQWJzdHJhY3Q6OnNldENvbnRyb2xsZXJOYW1lKCksIFxZYWZcUmVxdWVzdF9BYnN0cmFjdDo6c2V0QWN0aW9uTmFtZSgpIGFuZCBcWWFmXFJlcXVlc3RfQWJzdHJhY3Q6OnNldE1vZHVsZU5hbWUoKS48L3A+PGJyLz4KICAgICAqIDxwPlRoaXMgbWV0aG9kIHNob3VsZCBhbHNvIGNhbGwgXFlhZlxSZXF1ZXN0X0Fic3RyYWN0OjpzZXRSb3V0ZWQoKSB0byBtYWtlIHRoZSByZXF1ZXN0IHJvdXRlZCBhdCBsYXN0LjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtaW50ZXJmYWNlLnJvdXRlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBcWWFmXFJlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm91dGUoUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCk7CgogICAgLyoqCiAgICAgKiA8cD48Yj5cWWFmXFJvdXRlX0ludGVyZmFjZTo6YXNzZW1ibGUoKTwvYj4gLSBhc3NlbWJsZSBhIHJlcXVlc3Q8L3A+PGJyLz4KICAgICAqIDxwPnRoaXMgbWV0aG9kIHJldHVybnMgYSB1cmwgYWNjb3JkaW5nIHRvIHRoZSBhcmd1bWVudCBpbmZvLCBhbmQgYXBwZW5kIHF1ZXJ5IHN0cmluZ3MgdG8gdGhlIHVybCBhY2NvcmRpbmcgdG8gdGhlIGFyZ3VtZW50IHF1ZXJ5LjwvcD4KICAgICAqIDxwPmEgcm91dGUgc2hvdWxkIGltcGxlbWVudCB0aGlzIG1ldGhvZCBhY2NvcmRpbmcgdG8gaXRzIG93biByb3V0ZSBydWxlcywgYW5kIGRvIGEgcmV2ZXJzZSBwcm9ncmVzcy48L3A+CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLWludGVyZmFjZS5hc3NlbWJsZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGluZm8KICAgICAqIEBwYXJhbSBhcnJheSAkcXVlcnkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzZW1ibGUoYXJyYXkgJGluZm8sIGFycmF5ICRxdWVyeSA9IG51bGwpOwp9LyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1leGNlcHRpb24ucGhwCiAqLwpjbGFzcyBFeGNlcHRpb24gZXh0ZW5kcyBcRXhjZXB0aW9uIHt9LyoqCiAqIDxwPmJ5IGRlZmF1bHQsIFxZYWZcUm91dGVyIG9ubHkgaGF2ZSBhIDxiPlxZYWZcUm91dGVfU3RhdGljPC9iPiBhcyBpdHMgZGVmYXVsdCByb3V0ZS48L3A+CiAqIDxici8+CiAqIDxwPjxiPlxZYWZcUm91dGVfU3RhdGljPC9iPiBpcyBkZXNpZ25lZCB0byBoYW5kbGUgODAlIG9mIG5vcm1hbCByZXF1aXJlbWVudHMuPC9wPgogKiA8YnIvPgogKiA8Yj5Ob3RlOjwvYj4KICogPHA+IGl0IGlzIHVubmVjZXNzYXJ5IHRvIGluc3RhbmNlIGEgPGI+XFlhZlxSb3V0ZV9TdGF0aWM8L2I+LCBhbHNvIHVubmVjZXNzYXJ5IHRvIGFkZCBpdCBpbnRvIFxZYWZcUm91dGVyJ3Mgcm91dGVzIHN0YWNrLCBzaW5jZSB0aGVyZSBpcyBhbHdheXMgYmUgb25lIGluIFxZYWZcUm91dGVyJ3Mgcm91dGVzIHN0YWNrLCBhbmQgYWx3YXlzIGJlIGNhbGxlZCBhdCB0aGUgbGFzdCB0aW1lLjwvcD4KICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLXJvdXRlLXN0YXRpYy5waHAKICovCmNsYXNzIFJvdXRlX1N0YXRpYyBpbXBsZW1lbnRzIFxZYWZcUm91dGVfSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQGRlcHJlY2F0ZWQgbm90X2ltcGxlbWVudGVkCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtc3RhdGljLm1hdGNoLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVyaQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWF0Y2goJHVyaSkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1zdGF0aWMucm91dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIFxZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBhbHdheXMgVFJVRQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm91dGUoUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCkge30KCiAgICAvKioKICAgICAqIDxwPjxiPlxZYWZcUm91dGVfU3RhdGljOjphc3NlbWJsZSgpPC9iPiAtIEFzc2VtYmxlIGEgdXJsPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1zdGF0aWMuYXNzZW1ibGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRpbmZvCiAgICAgKiBAcGFyYW0gYXJyYXkgJHF1ZXJ5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFzc2VtYmxlKGFycmF5ICRpbmZvLCBhcnJheSAkcXVlcnkgPSBudWxsKSB7fQp9fQoKbmFtZXNwYWNlIFlhZlxSZXNwb25zZSB7CiAgICBjbGFzcyBIdHRwIGV4dGVuZHMgXFlhZlxSZXNwb25zZV9BYnN0cmFjdAp7CiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3Jlc3BvbnNlX2NvZGUgPSAwOwoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jbG9uZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlc3BvbnNlLWFic3RyYWN0LnNldGhlYWRlci5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHBhcmFtIGJvb2wgJHJlcGxhY2UKICAgICAqIEBwYXJhbSBpbnQgJHJlc3BvbnNlX2NvZGUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEhlYWRlcigkbmFtZSwgJHZhbHVlLCAkcmVwbGFjZSA9IGZhbHNlLCAkcmVzcG9uc2VfY29kZSA9IDApIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3Quc2V0YWxsaGVhZGVycy5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGhlYWRlcnMKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEFsbEhlYWRlcnMoYXJyYXkgJGhlYWRlcnMpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3QuZ2V0aGVhZGVyLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIZWFkZXIoJG5hbWUgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlc3BvbnNlLWFic3RyYWN0LmNsZWFyaGVhZGVycy5waHAKICAgICAqCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXFJlc3BvbnNlX0Fic3RyYWN0fGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhckhlYWRlcnMoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlc3BvbnNlLWFic3RyYWN0LnNldHJlZGlyZWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVybAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVkaXJlY3QoJHVybCkge30KCiAgICAvKioKICAgICAqIHNlbmQgcmVzcG9uc2UKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3QucmVzcG9uc2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNwb25zZSgpIHt9Cn0KY2xhc3MgQ2xpIGV4dGVuZHMgXFlhZlxSZXNwb25zZV9BYnN0cmFjdAp7CiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY2xvbmUoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX3RvU3RyaW5nKCkge30KfX0KCm5hbWVzcGFjZSBZYWZcUmVxdWVzdCB7Ci8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtcmVxdWVzdC1odHRwLnBocAogKi8KY2xhc3MgSHR0cCBleHRlbmRzIFxZYWZcUmVxdWVzdF9BYnN0cmFjdAp7CiAgICAvKioKICAgICAqIFJldHJpZXZlICRfR0VUIHZhcmlhYmxlCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtaHR0cC5nZXRxdWVyeS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSB2YXJpYWJsZSBuYW1lLCBpZiBub3QgcHJvdmlkZWQgcmV0dXJucyBhbGwKICAgICAqIEBwYXJhbSBtaXhlZCAkZGVmYXVsdCBpZiB0aGlzIHBhcmFtZXRlciBpcyBwcm92aWRlLCB0aGlzIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHZhcmlhYmxlIGNhbiBub3QgYmUgZm91bmQKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRRdWVyeSgkbmFtZSA9IG51bGwsICRkZWZhdWx0ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlICRfUkVRVUVTVCB2YXJpYWJsZQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWh0dHAuZ2V0cmVxdWVzdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSB2YXJpYWJsZSBuYW1lLCBpZiBub3QgcHJvdmlkZWQgcmV0dXJucyBhbGwKICAgICAqIEBwYXJhbSBtaXhlZCAkZGVmYXVsdCBpZiB0aGlzIHBhcmFtZXRlciBpcyBwcm92aWRlLCB0aGlzIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIHZhcmlhYmxlIGNhbiBub3QgYmUgZm91bmQKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0KCRuYW1lID0gbnVsbCwgJGRlZmF1bHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgJF9QT1NUIHZhcmlhYmxlCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtaHR0cC5nZXRwb3N0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgdGhlIHZhcmlhYmxlIG5hbWUsIGlmIG5vdCBwcm92aWRlZCByZXR1cm5zIGFsbAogICAgICogQHBhcmFtIG1peGVkICRkZWZhdWx0IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHByb3ZpZGUsIHRoaXMgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgdmFyaWFibGUgY2FuIG5vdCBiZSBmb3VuZAogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvc3QoJG5hbWUgPSBudWxsLCAkZGVmYXVsdCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSAkX0NPT0tJRSB2YXJpYWJsZQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWh0dHAuZ2V0Y29va2llLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgdGhlIHZhcmlhYmxlIG5hbWUsIGlmIG5vdCBwcm92aWRlZCByZXR1cm5zIGFsbAogICAgICogQHBhcmFtIG1peGVkICRkZWZhdWx0IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHByb3ZpZGUsIHRoaXMgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgdmFyaWFibGUgY2FuIG5vdCBiZSBmb3VuZAogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvb2tpZSgkbmFtZSA9IG51bGwsICRkZWZhdWx0ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlICRfRklMRVMgdmFyaWFibGUKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1odHRwLmdldGZpbGVzLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgdGhlIHZhcmlhYmxlIG5hbWUsIGlmIG5vdCBwcm92aWRlZCByZXR1cm5zIGFsbAogICAgICogQHBhcmFtIG1peGVkICRkZWZhdWx0IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHByb3ZpZGUsIHRoaXMgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgdmFyaWFibGUgY2FuIG5vdCBiZSBmb3VuZAogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpbGVzKCRuYW1lID0gbnVsbCwgJGRlZmF1bHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdmFyaWFibGUgZnJvbSBjbGllbnQsIHRoaXMgbWV0aG9kIHdpbGwgc2VhcmNoIHRoZSBuYW1lIGluICRfUkVRVUVTVCBwYXJhbXMsIGlmIHRoZSBuYW1lIGlzIG5vdCBmb3VuZCwgdGhlbiB3aWxsIHNlYXJjaCBpbiAkX1BPU1QsICRfR0VULCAkX0NPT0tJRSwgJF9TRVJWRVIKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1odHRwLmdldC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSB2YXJpYWJsZSBuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHByb3ZpZGUsIHRoaXMgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgdmFyaWFibGUgY2FuIG5vdCBiZSBmb3VuZAogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCgkbmFtZSwgJGRlZmF1bHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgdGhlIHJlcXVlc3Qgd2hldGhlciBpdCBpcyBhIEFqYXggUmVxdWVzdAogICAgICoKICAgICAqIDxici8+CiAgICAgKiA8Yj5Ob3RlOjwvYj4KICAgICAqIDxwPgogICAgICogVGhpcyBtZXRob2QgZGVwZW5kcyBvbiB0aGUgcmVxdWVzdCBoZWFkZXI6IEhUVFBfWF9SRVFVRVNURURfV0lUSCwgc29tZSBKYXZhc2NyaXB0IGxpYnJhcnkgZG9lc24ndCBzZXQgdGhpcyBoZWFkZXIgd2hpbGUgZG9pbmcgQWpheCByZXF1ZXN0CiAgICAgKiA8L3A+CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1odHRwLmlzeG1saHR0cHJlcXVlc3QucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1htbEh0dHBSZXF1ZXN0KCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWh0dHAuY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlcXVlc3RfdXJpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRiYXNlX3VyaQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHJlcXVlc3RfdXJpLCAkYmFzZV91cmkpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1odHRwLmNsb25lLnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY2xvbmUoKSB7fQp9LyoqCiAqIDxiPlxZYWZcUmVxdWVzdFxTaW1wbGU8L2I+IGlzIHBhcnRpY3VsYXJseSB1c2VkIGZvciB0ZXN0IHB1cnBvc2UuIGllLiBzaW11bGF0ZSBhIHNwYWNpYWwgcmVxdWVzdCB1bmRlciBDTEkgbW9kZS4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLXJlcXVlc3Qtc2ltcGxlLnBocAogKi8KY2xhc3MgU2ltcGxlIGV4dGVuZHMgXFlhZlxSZXF1ZXN0X0Fic3RyYWN0CnsKICAgIC8qKgogICAgICogUmV0cmlldmUgJF9HRVQgdmFyaWFibGUKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1zaW1wbGUuZ2V0cXVlcnkucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSB0aGUgdmFyaWFibGUgbmFtZSwgaWYgbm90IHByb3ZpZGVkIHJldHVybnMgYWxsCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHByb3ZpZGUsIHRoaXMgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgdmFyaWFibGUgY2FuIG5vdCBiZSBmb3VuZAogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFF1ZXJ5KCRuYW1lID0gbnVsbCwgJGRlZmF1bHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgJF9SRVFVRVNUIHZhcmlhYmxlCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3Qtc2ltcGxlLmdldHJlcXVlc3QucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSB0aGUgdmFyaWFibGUgbmFtZSwgaWYgbm90IHByb3ZpZGVkIHJldHVybnMgYWxsCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHByb3ZpZGUsIHRoaXMgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgdmFyaWFibGUgY2FuIG5vdCBiZSBmb3VuZAogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlcXVlc3QoJG5hbWUgPSBudWxsLCAkZGVmYXVsdCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSAkX1BPU1QgdmFyaWFibGUKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1zaW1wbGUuZ2V0cG9zdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSB2YXJpYWJsZSBuYW1lLCBpZiBub3QgcHJvdmlkZWQgcmV0dXJucyBhbGwKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlZmF1bHQgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgcHJvdmlkZSwgdGhpcyB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSB2YXJpYWJsZSBjYW4gbm90IGJlIGZvdW5kCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UG9zdCgkbmFtZSA9IG51bGwsICRkZWZhdWx0ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlICRfQ29va2llIHZhcmlhYmxlCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3Qtc2ltcGxlLmdldGNvb2tpZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSB2YXJpYWJsZSBuYW1lLCBpZiBub3QgcHJvdmlkZWQgcmV0dXJucyBhbGwKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlZmF1bHQgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgcHJvdmlkZSwgdGhpcyB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSB2YXJpYWJsZSBjYW4gbm90IGJlIGZvdW5kCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29va2llKCRuYW1lID0gbnVsbCwgJGRlZmF1bHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRuYW1lCiAgICAgKiBAcGFyYW0gbnVsbCAkZGVmYXVsdAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpbGVzKCRuYW1lID0gbnVsbCwgJGRlZmF1bHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdmFyaWFibGUgZnJvbSBjbGllbnQsIHRoaXMgbWV0aG9kIHdpbGwgc2VhcmNoIHRoZSBuYW1lIGluICRfUkVRVUVTVCBwYXJhbXMsIGlmIHRoZSBuYW1lIGlzIG5vdCBmb3VuZCwgdGhlbiB3aWxsIHNlYXJjaCBpbiAkX1BPU1QsICRfR0VULCAkX0NPT0tJRSwgJF9TRVJWRVIKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1zaW1wbGUuZ2V0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgdGhlIHZhcmlhYmxlIG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlZmF1bHQgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgcHJvdmlkZSwgdGhpcyB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSB2YXJpYWJsZSBjYW4gbm90IGJlIGZvdW5kCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRuYW1lLCAkZGVmYXVsdCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayB0aGUgcmVxdWVzdCB3aGV0aGVyIGl0IGlzIGEgQWpheCBSZXF1ZXN0CiAgICAgKgogICAgICogPGJyLz4KICAgICAqIDxiPk5vdGU6PC9iPgogICAgICogPHA+CiAgICAgKiBUaGlzIG1ldGhvZCBkZXBlbmRzIG9uIHRoZSByZXF1ZXN0IGhlYWRlcjogSFRUUF9YX1JFUVVFU1RFRF9XSVRILCBzb21lIEphdmFzY3JpcHQgbGlicmFyeSBkb2Vzbid0IHNldCB0aGlzIGhlYWRlciB3aGlsZSBkb2luZyBBamF4IHJlcXVlc3QKICAgICAqIDwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LXNpbXBsZS5pc3htbGh0dHByZXF1ZXN0LnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNYbWxIdHRwUmVxdWVzdCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1zaW1wbGUuY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZAogICAgICogQHBhcmFtIHN0cmluZyAkY29udHJvbGxlcgogICAgICogQHBhcmFtIHN0cmluZyAkYWN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXJhbXMKICAgICAqCiAgICAgKiBAdGhyb3dzIFxZYWZcRXhjZXB0aW9uXFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1ldGhvZCwgJGNvbnRyb2xsZXIsICRhY3Rpb24sICRwYXJhbXMgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3Qtc2ltcGxlLmNsb25lLnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY2xvbmUoKSB7fQp9fQoKbmFtZXNwYWNlIFlhZlxDb25maWcgewovKioKICogPHA+XFlhZlxDb25maWdcSW5pIGVuYWJsZXMgZGV2ZWxvcGVycyB0byBzdG9yZSBjb25maWd1cmF0aW9uIGRhdGEgaW4gYSBmYW1pbGlhciBJTkkgZm9ybWF0IGFuZCByZWFkIHRoZW0gaW4gdGhlIGFwcGxpY2F0aW9uIGJ5IHVzaW5nIG5lc3RlZCBvYmplY3QgcHJvcGVydHkgc3ludGF4LiBUaGUgSU5JIGZvcm1hdCBpcyBzcGVjaWFsaXplZCB0byBwcm92aWRlIGJvdGggdGhlIGFiaWxpdHkgdG8gaGF2ZSBhIGhpZXJhcmNoeSBvZiBjb25maWd1cmF0aW9uIGRhdGEga2V5cyBhbmQgaW5oZXJpdGFuY2UgYmV0d2VlbiBjb25maWd1cmF0aW9uIGRhdGEgc2VjdGlvbnMuIENvbmZpZ3VyYXRpb24gZGF0YSBoaWVyYXJjaGllcyBhcmUgc3VwcG9ydGVkIGJ5IHNlcGFyYXRpbmcgdGhlIGtleXMgd2l0aCB0aGUgZG90IG9yIHBlcmlvZCBjaGFyYWN0ZXIgKCIuIikuIEEgc2VjdGlvbiBtYXkgZXh0ZW5kIG9yIGluaGVyaXQgZnJvbSBhbm90aGVyIHNlY3Rpb24gYnkgZm9sbG93aW5nIHRoZSBzZWN0aW9uIG5hbWUgd2l0aCBhIGNvbG9uIGNoYXJhY3RlciAoIjoiKSBhbmQgdGhlIG5hbWUgb2YgdGhlIHNlY3Rpb24gZnJvbSB3aGljaCBkYXRhIGFyZSB0byBiZSBpbmhlcml0ZWQuPC9wPjxici8+CiAqIDxiPk5vdGU6PC9iPgogKiA8cD5cWWFmXENvbmZpZ1xJbmkgdXRpbGl6ZXMgdGhlIMK7IHBhcnNlX2luaV9maWxlKCkgUEhQIGZ1bmN0aW9uLiBQbGVhc2UgcmV2aWV3IHRoaXMgZG9jdW1lbnRhdGlvbiB0byBiZSBhd2FyZSBvZiBpdHMgc3BlY2lmaWMgYmVoYXZpb3JzLCB3aGljaCBwcm9wYWdhdGUgdG8gXFlhZlxDb25maWdcSW5pLCBzdWNoIGFzIGhvdyB0aGUgc3BlY2lhbCB2YWx1ZXMgb2YgIlRSVUUiLCAiRkFMU0UiLCAieWVzIiwgIm5vIiwgYW5kICJOVUxMIiBhcmUgaGFuZGxlZC48L3A+CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1jb25maWctaW5pLnBocAogKi8KY2xhc3MgSW5pIGV4dGVuZHMgXFlhZlxDb25maWdfQWJzdHJhY3QgaW1wbGVtZW50cyBcSXRlcmF0b3IsIFxUcmF2ZXJzYWJsZSwgXEFycmF5QWNjZXNzLCBcQ291bnRhYmxlCnsKICAgIC8qKgogICAgICogQHNlZSBcWWFmXENvbmZpZ19BYnN0cmFjdDo6Z2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxZYWZcQ29uZmlnX0Fic3RyYWN0OjpzZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxZYWZcQ29uZmlnX0Fic3RyYWN0OjpnZXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCgkbmFtZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxZYWZcQ29uZmlnX0Fic3RyYWN0OjpzZXQKICAgICAqIEBkZXByZWNhdGVkIG5vdF9pbXBsZW1lbnRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxZYWZcQ29uZmlnX0Fic3RyYWN0Ojp0b0FycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCkge30KCiAgICAvKioKICAgICAqIEBzZWUgXFlhZlxDb25maWdfQWJzdHJhY3Q6OnJlYWRvbmx5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkb25seSgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29uZmlnLWluaS5jb25zdHJ1Y3QucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY29uZmlnX2ZpbGUgcGF0aCB0byBhbiBJTkkgY29uZmlndXJlIGZpbGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlY3Rpb24gd2hpY2ggc2VjdGlvbiBpbiB0aGF0IElOSSBmaWxlIHlvdSB3YW50IHRvIGJlIHBhcnNlZAogICAgICoKICAgICAqIEB0aHJvd3MgXFlhZlxFeGNlcHRpb25cVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29uZmlnX2ZpbGUsICRzZWN0aW9uID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb25maWctaW5pLmlzc2V0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19pc3NldCgkbmFtZSkge30KCiAgICAvKioKICAgICAqIEBzZWUgXENvdW50YWJsZTo6Y291bnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCkge30KCiAgICAvKioKICAgICAqIEBzZWUgXEl0ZXJhdG9yOjpyZXdpbmQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxJdGVyYXRvcjo6Y3VycmVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxJdGVyYXRvcjo6bmV4dAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxJdGVyYXRvcjo6dmFsaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkKCkge30KCiAgICAvKioKICAgICAqIEBzZWUgXEl0ZXJhdG9yOjprZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxBcnJheUFjY2Vzczo6b2Zmc2V0VW5zZXQKICAgICAqIEBkZXByZWNhdGVkIG5vdF9pbXBsZW1lbnRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxBcnJheUFjY2Vzczo6b2Zmc2V0R2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxBcnJheUFjY2Vzczo6b2Zmc2V0RXhpc3RzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxBcnJheUFjY2Vzczo6b2Zmc2V0U2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG5hbWUsICR2YWx1ZSkge30KfS8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtY29uZmlnLXNpbXBsZS5waHAKICovCmNsYXNzIFNpbXBsZSBleHRlbmRzIFxZYWZcQ29uZmlnX0Fic3RyYWN0IGltcGxlbWVudHMgXEl0ZXJhdG9yLCBcVHJhdmVyc2FibGUsIFxBcnJheUFjY2VzcywgXENvdW50YWJsZQp7CiAgICAvKioKICAgICAqIEBzZWUgXFlhZlxDb25maWdfQWJzdHJhY3Q6OmdldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBcWWFmXENvbmZpZ19BYnN0cmFjdDo6c2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgkbmFtZSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBcWWFmXENvbmZpZ19BYnN0cmFjdDo6Z2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoJG5hbWUgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBcWWFmXENvbmZpZ19BYnN0cmFjdDo6c2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoJG5hbWUsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIEBzZWUgXFlhZlxDb25maWdfQWJzdHJhY3Q6OnRvQXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBcWWFmXENvbmZpZ19BYnN0cmFjdDo6cmVhZG9ubHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRvbmx5KCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb25maWctc2ltcGxlLmNvbnN0cnVjdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFycmF5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWFkb25seQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGFycmF5LCAkcmVhZG9ubHkgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbmZpZy1zaW1wbGUuaXNzZXQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2lzc2V0KCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBcQ291bnRhYmxlOjpjb3VudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBcSXRlcmF0b3I6OnJld2luZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCkge30KCiAgICAvKioKICAgICAqIEBzZWUgXEl0ZXJhdG9yOjpjdXJyZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkge30KCiAgICAvKioKICAgICAqIEBzZWUgXEl0ZXJhdG9yOjpuZXh0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCkge30KCiAgICAvKioKICAgICAqIEBzZWUgXEl0ZXJhdG9yOjp2YWxpZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBcSXRlcmF0b3I6OmtleQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkge30KCiAgICAvKioKICAgICAqIEBzZWUgXEFycmF5QWNjZXNzOjpvZmZzZXRVbnNldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxBcnJheUFjY2Vzczo6b2Zmc2V0R2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxBcnJheUFjY2Vzczo6b2Zmc2V0RXhpc3RzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFxBcnJheUFjY2Vzczo6b2Zmc2V0U2V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG5hbWUsICR2YWx1ZSkge30KfX0KCm5hbWVzcGFjZSBZYWZcVmlldyB7Ci8qKgogKiA8Yj5cWWFmXFZpZXdcU2ltcGxlPC9iPiBpcyB0aGUgYnVpbHQtaW4gdGVtcGxhdGUgZW5naW5lIGluIFlhZiwgaXQgaXMgYSBzaW1wbGUgYnV0IGZhc3QgdGVtcGxhdGUgZW5naW5lLCBhbmQgb25seSBzdXBwb3J0IFBIUCBzY3JpcHQgdGVtcGxhdGUuCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi12aWV3LXNpbXBsZS5waHAKICoKICogQG1ldGhvZCB2b2lkfGJvb2wgZXZhbChzdHJpbmcgJHRwbF9zdHIsIGFycmF5ICR2YXJzID0gbnVsbCkgPHA+UmVuZGVyIGEgc3RyaW5nIHRlbXBsYXRlIGFuZCByZXR1cm4gdGhlIHJlc3VsdC48L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LXNpbXBsZS5ldmFsLnBocAogKgogKiBAcGFyYW0gc3RyaW5nICR0cGxfc3RyIHN0cmluZyB0ZW1wbGF0ZQogKiBAcGFyYW0gYXJyYXkgJHZhcnMKICoKICogQHJldHVybiB2b2lkfGZhbHNlIHJldHVybiBGQUxTRSBvbiBmYWlsdXJlCiAqLwpjbGFzcyBTaW1wbGUgaW1wbGVtZW50cyBcWWFmXFZpZXdfSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRfdHBsX2RpcjsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRfdHBsX3ZhcnM7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkX29wdGlvbnM7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtdmlldy1zaW1wbGUuY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRlbXBsYXRlX2RpciBUaGUgYmFzZSBkaXJlY3Rvcnkgb2YgdGhlIHRlbXBsYXRlcywgYnkgZGVmYXVsdCwgaXQgaXMgQVBQTElDQVRJT04gLiAiL3ZpZXdzIiBmb3IgWWFmLgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIDxwPk9wdGlvbnMgZm9yIHRoZSBlbmdpbmUsIGFzIG9mIFlhZiAyLjEuMTMsIHlvdSBjYW4gdXNlIHNob3J0IHRhZwogICAgICogIjw/PSR2YXI/PiIgaW4geW91ciB0ZW1wbGF0ZShyZWdhcmRsZXNzIG9mICJzaG9ydF9vcGVuX3RhZyIpLAogICAgICogc28gY29tZXMgYSBvcHRpb24gbmFtZWQgInNob3J0X3RhZyIsICB5b3UgY2FuIHN3aXRjaCB0aGlzIG9mZgogICAgICogdG8gcHJldmVudCB1c2Ugc2hvcnRfdGFnIGluIHRlbXBsYXRlLgogICAgICogPC9wPgogICAgICogQHRocm93cyBcWWFmXEV4Y2VwdGlvblxUeXBlRXJyb3IKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR0ZW1wbGF0ZV9kaXIsIGFycmF5ICRvcHRpb25zID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LXNpbXBsZS5pc3NldC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2lzc2V0KCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogYXNzaWduIHZhcmlhYmxlIHRvIHZpZXcgZW5naW5lCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXZpZXctc2ltcGxlLmFzc2lnbi5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRuYW1lIEEgc3RyaW5nIG9yIGFuIGFycmF5Ljxici8+aWYgaXMgc3RyaW5nLCB0aGVuIHRoZSBuZXh0IGFyZ3VtZW50ICR2YWx1ZSBpcyByZXF1aXJlZC4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgbWl4ZWQgdmFsdWUKICAgICAqIEByZXR1cm4gXFlhZlxWaWV3XFNpbXBsZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzaWduKCRuYW1lLCAkdmFsdWUgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXZpZXctc2ltcGxlLnJlbmRlci5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0cGwKICAgICAqIEBwYXJhbSBhcnJheSAkdHBsX3ZhcnMKICAgICAqCiAgICAgKiBAdGhyb3dzIFxZYWZcRXhjZXB0aW9uXExvYWRGYWlsZWRcVmlldwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbmRlcigkdHBsLCBhcnJheSAkdHBsX3ZhcnMgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogPHA+UmVuZGVyIGEgdGVtcGxhdGUgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdCBpbnN0YW50bHkuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LXNpbXBsZS5kaXNwbGF5LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRwbAogICAgICogQHBhcmFtIGFycmF5ICR0cGxfdmFycwogICAgICoKICAgICAqIEB0aHJvd3MgXFlhZlxFeGNlcHRpb25cTG9hZEZhaWxlZFxWaWV3CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwbGF5KCR0cGwsIGFycmF5ICR0cGxfdmFycyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiA8cD51bmxpa2UgXFlhZlxWaWV3XFNpbXBsZTo6YXNzaWduKCksIHRoaXMgbWV0aG9kIGFzc2lnbiBhIHJlZiB2YWx1ZSB0byBlbmdpbmUuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXZpZXctc2ltcGxlLmFzc2lnbnJlZi5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIEEgc3RyaW5nIG5hbWUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgdmFsdWUgaW4gdGhlIHRlbXBsYXRlLgogICAgICogQHBhcmFtIG1peGVkICYkdmFsdWUgbWl4ZWQgdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIFxZYWZcVmlld1xTaW1wbGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFzc2lnblJlZigkbmFtZSwgJiR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIGNsZWFyIGFzc2lnbmVkIHZhcmlhYmxlCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtdmlldy1zaW1wbGUuY2xlYXIucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBhc3NpZ25lZCB2YXJpYWJsZSBuYW1lLiA8YnIvPmlmIGVtcHR5LCB3aWxsIGNsZWFyIGFsbCBhc3NpZ25lZCB2YXJpYWJsZXMuCiAgICAgKgogICAgICogQHJldHVybiBcWWFmXFZpZXdcU2ltcGxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhcigkbmFtZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtdmlldy1zaW1wbGUuc2V0c2NyaXB0cGF0aC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZW1wbGF0ZV9kaXIKICAgICAqCiAgICAgKiBAcmV0dXJuIFxZYWZcVmlld1xTaW1wbGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFNjcmlwdFBhdGgoJHRlbXBsYXRlX2Rpcikge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LXNpbXBsZS5nZXRzY3JpcHRwYXRoLnBocAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTY3JpcHRQYXRoKCkge30KCiAgICAvKioKICAgICAqIDxwPlJldHJpZXZlIGFzc2lnbmVkIHZhcmlhYmxlPC9wPgogICAgICogPGJyLz4KICAgICAqIDxiPk5vdGU6PC9iPgogICAgICogPHA+JG5hbWUgcGFyYW1ldGVyIGNhbiBiZSBlbXB0eSBzaW5jZSAyLjEuMTE8L3A+CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtdmlldy1zaW1wbGUuZ2V0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBudWxsICRuYW1lIDxwPnRoZSBhc3NpZ25lZCB2YXJpYWJsZSBuYW1lPC9wPgogICAgICogPGJyLz4KICAgICAqIDxwPmlmIHRoaXMgaXMgZW1wdHksIGFsbCBhc3NpZ25lZCB2YXJpYWJsZXMgd2lsbCBiZSByZXR1cm5lZDwvcD4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiA8cD5UaGlzIGlzIGEgYWx0ZXJuYXRpdmUgYW5kIGVhc2llciB3YXkgdG8gXFlhZlxWaWV3XFNpbXBsZTo6YXNzaWduKCkuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LXNpbXBsZS5zZXQucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBBIHN0cmluZyB2YWx1ZSBuYW1lLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBtaXhlZCB2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoJG5hbWUsICR2YWx1ZSA9IG51bGwpIHt9Cn19CgpuYW1lc3BhY2UgWWFmXFJvdXRlIHsKLyoqCiAqIDxwPjxiPlxZYWZcUm91dGVcU2ltcGxlPC9iPiB3aWxsIG1hdGNoIHRoZSBxdWVyeSBzdHJpbmcsIGFuZCBmaW5kIHRoZSByb3V0ZSBpbmZvLjwvcD4KICogPGJyLz4KICogPHA+YWxsIHlvdSBuZWVkIHRvIGRvIGlzIHRlbGwgPGI+XFlhZlxSb3V0ZVxTaW1wbGU8L2I+IHdoYXQga2V5IGluIHRoZSAkX0dFVCBpcyBtb2R1bGUsIHdoYXQga2V5IGlzIGNvbnRyb2xsZXIsIGFuZCB3aGF0IGtleSBpcyBhY3Rpb24uPC9wPgogKiA8YnIvPgogKiA8cD5cWWFmXFJvdXRlXFNpbXBsZTo6cm91dGUoKSB3aWxsIGFsd2F5cyByZXR1cm4gVFJVRSwgc28gaXQgaXMgaW1wb3J0YW50IHB1dCA8Yj5cWWFmXFJvdXRlXFNpbXBsZTwvYj4gaW4gdGhlIGZyb250IG9mIHRoZSBSb3V0ZSBzdGFjaywgb3RoZXJ3aXNlIGFsbCB0aGUgb3RoZXIgcm91dGVzIHdpbGwgbm90IGJlIGNhbGxlZDwvcD4KICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLXJvdXRlLXNpbXBsZS5waHAKICovCmZpbmFsIGNsYXNzIFNpbXBsZSBpbXBsZW1lbnRzIFxZYWZcUm91dGVfSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRjb250cm9sbGVyOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRtb2R1bGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJGFjdGlvbjsKCiAgICAvKioKICAgICAqIDxwPlxZYWZcUm91dGVcU2ltcGxlIHdpbGwgZ2V0IHJvdXRlIGluZm8gZnJvbSBxdWVyeSBzdHJpbmcuIGFuZCB0aGUgcGFyYW1ldGVycyBvZiB0aGlzIGNvbnN0cnVjdG9yIHdpbGwgdXNlZCBhcyBrZXlzIHdoaWxlIHNlYXJjaGluZyBmb3IgdGhlIHJvdXRlIGluZm8gaW4gJF9HRVQuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1zaW1wbGUuY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZV9uYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250cm9sbGVyX25hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFjdGlvbl9uYW1lCiAgICAgKgogICAgICogQHRocm93cyBcWWFmXEV4Y2VwdGlvblxUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtb2R1bGVfbmFtZSwgJGNvbnRyb2xsZXJfbmFtZSwgJGFjdGlvbl9uYW1lKSB7fQoKICAgIC8qKgogICAgICogPHA+c2VlIFxZYWZcUm91dGVcU2ltcGxlOjpfX2NvbnN0cnVjdCgpPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1zaW1wbGUucm91dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIFxZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBhbHdheXMgVFJVRQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm91dGUoWWFmXFJlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QpIHt9CgogICAgLyoqCiAgICAgKiA8cD48Yj5cWWFmXFJvdXRlXFNpbXBsZTo6YXNzZW1ibGUoKTwvYj4gLSBBc3NlbWJsZSBhIHVybDwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtc2ltcGxlLmFzc2VtYmxlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkaW5mbwogICAgICogQHBhcmFtIGFycmF5ICRxdWVyeQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhc3NlbWJsZShhcnJheSAkaW5mbywgYXJyYXkgJHF1ZXJ5ID0gbnVsbCkge30KfS8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtcm91dGUtc3VwZXJ2YXIucGhwCiAqLwpmaW5hbCBjbGFzcyBTdXBlcnZhciBpbXBsZW1lbnRzIFxZYWZcUm91dGVfSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRfdmFyX25hbWU7CgogICAgLyoqCiAgICAgKiA8cD5cWWFmXFJvdXRlXFN1cGVydmFyIGlzIHNpbWlsYXIgdG8gXFlhZlxSb3V0ZV9TdGF0aWMsIHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgXFlhZlxSb3V0ZVxTdXBlcnZhciB3aWxsIGxvb2sgZm9yIHBhdGggaW5mbyBpbiBxdWVyeSBzdHJpbmcsIGFuZCB0aGUgcGFyYW1ldGVyIHN1cGVydmFyX25hbWUgaXMgdGhlIGtleS48L3A+CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLXN1cGVydmFyLmNvbnN0cnVjdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdXBlcnZhcl9uYW1lIFRoZSBuYW1lIG9mIGtleS4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxZYWZcRXhjZXB0aW9uXFR5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN1cGVydmFyX25hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtc3VwZXJ2YXIucm91dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIFxZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBJZiB0aGVyZSBpcyBhIGtleSh3aGljaCB3YXMgZGVmaW5lZCBpbiBcWWFmXFJvdXRlXFN1cGVydmFyOjpfX2NvbnN0cnVjdCgpKSBpbiAkX0dFVCwgcmV0dXJuIFRSVUUuIG90aGVyd2lzZSByZXR1cm4gRkFMU0UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb3V0ZShZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCkge30KCiAgICAvKioKICAgICAqIDxwPjxiPlxZYWZcUm91dGVcU3VwZXJ2YXI6OmFzc2VtYmxlKCk8L2I+IC0gQXNzZW1ibGUgYSB1cmw8L3A+CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLXN1cGVydmFyLmFzc2VtYmxlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkaW5mbwogICAgICogQHBhcmFtIGFycmF5ICRxdWVyeQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhc3NlbWJsZShhcnJheSAkaW5mbywgYXJyYXkgJHF1ZXJ5ID0gbnVsbCkge30KfS8qKgogKiA8cD5Gb3IgdXNhZ2UsIHBsZWFzZSBzZWUgdGhlIGV4YW1wbGUgc2VjdGlvbiBvZiBcWWFmXFJvdXRlXFJld3JpdGU6Ol9fY29uc3RydWN0KCk8L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1yb3V0ZS1yZXdyaXRlLnBocAogKi8KZmluYWwgY2xhc3MgUmV3cml0ZSBleHRlbmRzIFxZYWZcUm91dGVyIGltcGxlbWVudHMgXFlhZlxSb3V0ZV9JbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9yb3V0ZTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRfZGVmYXVsdDsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRfdmVyaWZ5OwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLXJld3JpdGUuY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1hdGNoIEEgcGF0dGVybiwgd2lsbCBiZSB1c2VkIHRvIG1hdGNoIGEgcmVxdWVzdCB1cmksIGlmIGRvZXNuJ3QgbWF0Y2hlZCwgXFlhZlxSb3V0ZVxSZXdyaXRlIHdpbGwgcmV0dXJuIEZBTFNFLgogICAgICogQHBhcmFtIGFycmF5ICRyb3V0ZSA8cD5XaGVuIHRoZSBtYXRjaCBwYXR0ZXJuIG1hdGNoZXMgdGhlIHJlcXVlc3QgdXJpLCBcWWFmXFJvdXRlXFJld3JpdGUgd2lsbCB1c2UgdGhpcyB0byBkZWNpZGUgd2hpY2ggbS9jL2EgdG8gcm91dGVkLjwvcD4KICAgICAqIDxici8+CiAgICAgKiA8cD5laXRoZXIgb2YgbS9jL2EgaW4gdGhpcyBhcnJheSBpcyBvcHRpb25hbCwgaWYgeW91IGRvbid0IGFzc2lnbiBhIHNwZWNpZmljIHZhbHVlLCBpdCB3aWxsIGJlIHJvdXRlZCB0byBkZWZhdWx0LjwvcD4KICAgICAqIEBwYXJhbSBhcnJheSAkdmVyaWZ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZXZlcnNlCiAgICAgKgogICAgICogQHRocm93cyBcWWFmXEV4Y2VwdGlvblxUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtYXRjaCwgYXJyYXkgJHJvdXRlLCBhcnJheSAkdmVyaWZ5ID0gbnVsbCwgJHJldmVyc2UgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLXJld3JpdGUucm91dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIFxZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm91dGUoWWFmXFJlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QpIHt9CgogICAgLyoqCiAgICAgKiA8cD48Yj5cWWFmXFJvdXRlXFJld3JpdGU6OmFzc2VtYmxlKCk8L2I+IC0gQXNzZW1ibGUgYSB1cmw8L3A+CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLXJld3JpdGUuYXNzZW1ibGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRpbmZvCiAgICAgKiBAcGFyYW0gYXJyYXkgJHF1ZXJ5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFzc2VtYmxlKGFycmF5ICRpbmZvLCBhcnJheSAkcXVlcnkgPSBudWxsKSB7fQp9LyoqCiAqIDxwPjxiPlxZYWZcUm91dGVcUmVnZXg8L2I+IGlzIHRoZSBtb3N0IGZsZXhpYmxlIHJvdXRlIGFtb25nIHRoZSBZYWYgYnVpbHQtaW4gcm91dGVzLjwvcD4KICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLXJvdXRlLXJlZ2V4LnBocAogKi8KZmluYWwgY2xhc3MgUmVnZXggZXh0ZW5kcyBcWWFmXFJvdXRlciBpbXBsZW1lbnRzIFxZYWZcUm91dGVfSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRfcm91dGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2RlZmF1bHQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkX21hcHM7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3ZlcmlmeTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3JldmVyc2U7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtcmVnZXguY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1hdGNoIEEgY29tcGxldGUgUmVnZXggcGF0dGVybiwgd2lsbCBiZSB1c2VkIHRvIG1hdGNoIGEgcmVxdWVzdCB1cmksIGlmIGRvZXNuJ3QgbWF0Y2hlZCwgXFlhZlxSb3V0ZVxSZWdleCB3aWxsIHJldHVybiBGQUxTRS4KICAgICAqIEBwYXJhbSBhcnJheSAkcm91dGUgPHA+V2hlbiB0aGUgbWF0Y2ggcGF0dGVybiBtYXRjaGVzIHRoZSByZXF1ZXN0IHVyaSwgXFlhZlxSb3V0ZVxSZWdleCB3aWxsIHVzZSB0aGlzIHRvIGRlY2lkZSB3aGljaCBtL2MvYSB0byByb3V0ZWQuPC9wPgogICAgICogPGJyLz4KICAgICAqIDxwPmVpdGhlciBvZiBtL2MvYSBpbiB0aGlzIGFycmF5IGlzIG9wdGlvbmFsLCBpZiB5b3UgZG9uJ3QgYXNzaWduIGEgc3BlY2lmaWMgdmFsdWUsIGl0IHdpbGwgYmUgcm91dGVkIHRvIGRlZmF1bHQuPC9wPgogICAgICogQHBhcmFtIGFycmF5ICRtYXAgQSBhcnJheSB0byBhc3NpZ24gbmFtZSB0byB0aGUgY2FwdHVyZXMgaW4gdGhlIG1hdGNoIHJlc3VsdC4KICAgICAqIEBwYXJhbSBhcnJheSAkdmVyaWZ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZXZlcnNlCiAgICAgKgogICAgICogQHRocm93cyBcWWFmXEV4Y2VwdGlvblxUeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtYXRjaCwgYXJyYXkgJHJvdXRlLCBhcnJheSAkbWFwID0gbnVsbCwgYXJyYXkgJHZlcmlmeSA9IG51bGwsICRyZXZlcnNlID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFJvdXRlIGEgaW5jb21pbmcgcmVxdWVzdC4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtcmVnZXgucm91dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIFxZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBJZiB0aGUgcGF0dGVybiBnaXZlbiBieSB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIFxZYWZcUm91dGVcUmVnZXg6Ol9jb25zdHJ1Y3QoKSBtYXRjaGVzIHRoZSByZXF1ZXN0IHVyaSwgcmV0dXJuIFRSVUUsIG90aGVyd2lzZSByZXR1cm4gRkFMU0UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb3V0ZShZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCkge30KCiAgICAvKioKICAgICAqIDxwPjxiPlxZYWZcUm91dGVcUmVnZXg6OmFzc2VtYmxlKCk8L2I+IC0gQXNzZW1ibGUgYSB1cmw8L3A+CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLXJlZ2V4LmFzc2VtYmxlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkaW5mbwogICAgICogQHBhcmFtIGFycmF5ICRxdWVyeQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhc3NlbWJsZShhcnJheSAkaW5mbywgYXJyYXkgJHF1ZXJ5ID0gbnVsbCkge30KfS8qKgogKiA8cD48Yj5cWWFmXFJvdXRlXE1hcDwvYj4gaXMgYSBidWlsdC1pbiByb3V0ZSwgaXQgc2ltcGx5IGNvbnZlcnQgYSBVUkkgZW5kcG9pbnQgKHRoYXQgcGFydCBvZiB0aGUgVVJJIHdoaWNoIGNvbWVzIGFmdGVyIHRoZSBiYXNlIFVSSTogc2VlIFxZYWZcUmVxdWVzdF9BYnN0cmFjdDo6c2V0QmFzZVVyaSgpKSB0byBhIGNvbnRyb2xsZXIgbmFtZSBvciBhY3Rpb24gbmFtZShkZXBlbmRzIG9uIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIFxZYWZcUm91dGVcTWFwOjpfX2NvbnN0cnVjdCgpKSBpbiBmb2xsb3dpbmcgcnVsZTogQSA9PiBjb250cm9sbGVyIEEuIEEvQi9DID0+IGNvbnRyb2xsZXIgQV9CX0MuIEEvQi9DL0QvRSA9PiBjb250cm9sbGVyIEFfQl9DX0RfRS48L3A+CiAqIDxici8+CiAqIDxwPklmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIG9mIFxZYWZcUm91dGVcTWFwOjpfX2NvbnN0cnVjdCgpIGlzIHNwZWNpZmllZCwgdGhlbiBvbmx5IHRoZSBwYXJ0IGJlZm9yZSBkZWxpbWl0ZXIgb2YgVVJJIHdpbGwgdXNlZCB0byByb3V0aW5nLCB0aGUgcGFydCBhZnRlciBpdCBpcyB1c2VkIHRvIHJvdXRpbmcgcmVxdWVzdCBwYXJhbWV0ZXJzIChzZWUgdGhlIGV4YW1wbGUgc2VjdGlvbiBvZiBcWWFmXFJvdXRlXE1hcDo6X19jb25zdHJ1Y3QoKSkuPC9wPgogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtcm91dGUtbWFwLnBocAogKi8KZmluYWwgY2xhc3MgTWFwIGltcGxlbWVudHMgXFlhZlxSb3V0ZV9JbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9jdGxfcm91dGVyID0gJyc7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9kZWxpbWl0ZXI7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtbWFwLmNvbnN0cnVjdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkY29udHJvbGxlcl9wcmVmZXIgV2hldGhlciB0aGUgcmVzdWx0IHNob3VsZCBjb25zaWRlcmluZyBhcyBjb250cm9sbGVyIG9yIGFjdGlvbgogICAgICogQHBhcmFtIHN0cmluZyAkZGVsaW1pdGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29udHJvbGxlcl9wcmVmZXIgPSBmYWxzZSwgJGRlbGltaXRlciA9ICcnKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLW1hcC5yb3V0ZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gXFlhZlxSZXF1ZXN0X0Fic3RyYWN0ICRyZXF1ZXN0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb3V0ZShZYWZcUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCkge30KCiAgICAvKioKICAgICAqIDxwPjxiPlxZYWZcUm91dGVcTWFwOjphc3NlbWJsZSgpPC9iPiAtIEFzc2VtYmxlIGEgdXJsPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1tYXAuYXNzZW1ibGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRpbmZvCiAgICAgKiBAcGFyYW0gYXJyYXkgJHF1ZXJ5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFzc2VtYmxlKGFycmF5ICRpbmZvLCBhcnJheSAkcXVlcnkgPSBudWxsKSB7fQp9fQoKbmFtZXNwYWNlIFlhZlxFeGNlcHRpb24gewovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLWV4Y2VwdGlvbi10eXBlZXJyb3IucGhwCiAqLwpjbGFzcyBUeXBlRXJyb3IgZXh0ZW5kcyBcWWFmXEV4Y2VwdGlvbiB7fS8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtZXhjZXB0aW9uLXN0YXJ0dXBlcnJvci5waHAKICovCmNsYXNzIFN0YXJ0dXBFcnJvciBleHRlbmRzIFxZYWZcRXhjZXB0aW9uIHt9LyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1leGNlcHRpb24tcm91dGVmYWlsZC5waHAKICovCmNsYXNzIFJvdXRlckZhaWxlZCBleHRlbmRzIFxZYWZcRXhjZXB0aW9uIHt9LyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1leGNlcHRpb24tZGlzcGF0Y2hmYWlsZC5waHAKICovCmNsYXNzIERpc3BhdGNoRmFpbGVkIGV4dGVuZHMgXFlhZlxFeGNlcHRpb24ge30vKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLWV4Y2VwdGlvbi1sb2FkZmFpbGQucGhwCiAqLwpjbGFzcyBMb2FkRmFpbGVkIGV4dGVuZHMgXFlhZlxFeGNlcHRpb24ge319CgpuYW1lc3BhY2UgWWFmXEV4Y2VwdGlvblxMb2FkRmFpbGVkIHsKLyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1leGNlcHRpb24tbG9hZGZhaWxkLW1vZHVsZS5waHAKICovCmNsYXNzIE1vZHVsZSBleHRlbmRzIFxZYWZcRXhjZXB0aW9uXExvYWRGYWlsZWQge30vKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLWV4Y2VwdGlvbi1sb2FkZmFpbGQtY29udHJvbGxlci5waHAKICovCmNsYXNzIENvbnRyb2xsZXIgZXh0ZW5kcyBcWWFmXEV4Y2VwdGlvblxMb2FkRmFpbGVkIHt9LyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1leGNlcHRpb24tbG9hZGZhaWxkLWFjdGlvbi5waHAKICovCmNsYXNzIEFjdGlvbiBleHRlbmRzIFxZYWZcRXhjZXB0aW9uXExvYWRGYWlsZWQge30vKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLWV4Y2VwdGlvbi1sb2FkZmFpbGQtdmlldy5waHAKICovCmNsYXNzIFZpZXcgZXh0ZW5kcyBcWWFmXEV4Y2VwdGlvblxMb2FkRmFpbGVkIHt9Cn0KPD9waHAKCi8qKgogKiBUaGUgY29uc3RhbnRzIGJlbG93IGFyZSBkZWZpbmVkIGJ5IHRoaXMgZXh0ZW5zaW9uLCBhbmQgd2lsbCBvbmx5IGJlIGF2YWlsYWJsZSB3aGVuIHRoZSBleHRlbnNpb24gaGFzIGVpdGhlciBiZWVuIGNvbXBpbGVkIGludG8gUEhQIG9yIGR5bmFtaWNhbGx5IGxvYWRlZCBhdCBydW50aW1lLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3lhZi5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1lBRl9WRVJTSU9OJywgJzMuMy41JywgdHJ1ZSk7CmRlZmluZSgnWUFGX0VOVklST04nLCAncHJvZHVjdCcsIHRydWUpOwpkZWZpbmUoJ1lBRl9FUlJfU1RBUlRVUF9GQUlMRUQnLCA1MTIsIHRydWUpOwpkZWZpbmUoJ1lBRl9FUlJfUk9VVEVfRkFJTEVEJywgNTEzLCB0cnVlKTsKZGVmaW5lKCdZQUZfRVJSX0RJU1BBVENIX0ZBSUxFRCcsIDUxNCwgdHJ1ZSk7CmRlZmluZSgnWUFGX0VSUl9OT1RGT1VORF9NT0RVTEUnLCA1MTUsIHRydWUpOwpkZWZpbmUoJ1lBRl9FUlJfTk9URk9VTkRfQ09OVFJPTExFUicsIDUxNiwgdHJ1ZSk7CmRlZmluZSgnWUFGX0VSUl9OT1RGT1VORF9BQ1RJT04nLCA1MTcsIHRydWUpOwpkZWZpbmUoJ1lBRl9FUlJfTk9URk9VTkRfVklFVycsIDUxOCwgdHJ1ZSk7CmRlZmluZSgnWUFGX0VSUl9DQUxMX0ZBSUxFRCcsIDUxOSwgdHJ1ZSk7CmRlZmluZSgnWUFGX0VSUl9BVVRPTE9BRF9GQUlMRUQnLCA1MjAsIHRydWUpOwpkZWZpbmUoJ1lBRl9FUlJfVFlQRV9FUlJPUicsIDUyMSwgdHJ1ZSk7CmRlZmluZSgnWUFGX0VSUl9BQ0NFU1NfRVJST1InLCA1MjIpOwoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8qKgogKiBZYWZfQXBwbGljYXRpb24gcHJvdmlkZXMgYSBib290c3RyYXBwaW5nIGZhY2lsaXR5IGZvciBhcHBsaWNhdGlvbnMgd2hpY2ggcHJvdmlkZXMgcmV1c2FibGUgcmVzb3VyY2VzLCBjb21tb24tIGFuZCBtb2R1bGUtYmFzZWQgYm9vdHN0cmFwIGNsYXNzZXMgYW5kIGRlcGVuZGVuY3kgY2hlY2tpbmcuCiAqIDxici8+CiAqIDxiPk5vdGU6PC9iPgogKiA8cD4KICogWWFmX0FwcGxpY2F0aW9uIGltcGxlbWVudHMgdGhlIHNpbmdsZXRvbiBwYXR0ZXJuLCBhbmQgWWFmX0FwcGxpY2F0aW9uIGNhbiBub3QgYmUgc2VyaWFsaXplZCBvciB1bi1zZXJpYWxpemVkIHdoaWNoIHdpbGwgY2F1c2UgcHJvYmxlbSB3aGVuIHlvdSB0cnkgdG8gdXNlIFBIUFVuaXQgdG8gd3JpdGUgc29tZSB0ZXN0IGNhc2UgZm9yIFlhZi48YnIvPgogKiBZb3UgbWF5IHVzZSAmIzY0O2JhY2t1cEdsb2JhbHMgYW5ub3RhdGlvbiBvZiBQSFBVbml0IHRvIGNvbnRyb2wgdGhlIGJhY2t1cCBhbmQgcmVzdG9yZSBvcGVyYXRpb25zIGZvciBnbG9iYWwgdmFyaWFibGVzLiB0aHVzIGNhbiBzb2x2ZSB0aGlzIHByb2JsZW0uCiAqIDwvcD4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLWFwcGxpY2F0aW9uLnBocAogKi8KZmluYWwgY2xhc3MgWWFmX0FwcGxpY2F0aW9uCnsKICAgIC8qKgogICAgICogQHZhciBZYWZfQXBwbGljYXRpb24KICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyAkX2FwcDsKCiAgICAvKioKICAgICAqIEB2YXIgWWFmX0NvbmZpZ19BYnN0cmFjdAogICAgICovCiAgICBwcm90ZWN0ZWQgJGNvbmZpZzsKCiAgICAvKioKICAgICAqIEB2YXIgWWFmX0Rpc3BhdGNoZXIKICAgICAqLwogICAgcHJvdGVjdGVkICRkaXNwYXRjaGVyOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9tb2R1bGVzOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRfcnVubmluZyA9ICIiOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRfZW52aXJvbiA9IFlBRl9FTlZJUk9OOwoKICAgIC8qKgogICAgICogQHNpbmNlIDIuMS4yCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwcm90ZWN0ZWQgJF9lcnJfbm8gPSAwOwoKICAgIC8qKgogICAgICogQHNpbmNlIDIuMS4yCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9lcnJfbXNnID0gIiI7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uY29uc3RydWN0LnBocAogICAgICoKICAgICAqIDxwPgogICAgICogSWYgaXMgYSBpbmkgY29uZmlnIGZpbGUsIHRoZXJlIHNob3VsZCBiZSBhIHNlY3Rpb24gbmFtZWQgYXMgdGhlIG9uZSBkZWZpbmVkIGJ5IHlhZi5lbnZpcm9uLCB3aGljaCBpcyAicHJvZHVjdCIgYnkgZGVmYXVsdC4KICAgICAqIDwvcD4KICAgICAqIDxici8+CiAgICAgKiA8Yj5Ob3RlOjwvYj4KICAgICAqIDxwPklmIHlvdSB1c2UgYSBpbmkgY29uZmlndXJhdGlvbiBmaWxlIGFzIHlvdXIgYXBwbGljYXRpb24ncyBjb25maWcgY29udGFpbmVyLiB5b3Ugd291bGQgb3BlbiB0aGUgeWFmLmNhY2hlX2NvbmZpZyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLjwvcD4KICAgICAqIDxwPkFuZCB0aGUgY29uZmlnIGVudHJ5KGFuZCB0aGVyZSBkZWZhdWx0IHZhbHVlKSBsaXN0IGJsb3c6PC9wPgogICAgICoKICAgICAqIDxwPgogICAgICogPGI+RXhhbXBsZSAjMSBBIGluaSBjb25maWcgZmlsZSBleGFtcGxlPC9iPjxici8+CiAgICAgKiBbcHJvZHVjdF08YnIvPgogICAgICogO3RoaXMgb25lIHNob3VsZCBhbHdheXMgYmUgZGVmaW5lZCwgYW5kIGhhdmUgbm8gZGVmYXVsdCB2YWx1ZTxici8+CiAgICAgKiBhcHBsaWNhdGlvbi5kaXJlY3Rvcnk9QVBQTElDQVRJT05fUEFUSDxici8+PGJyLz4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogO2ZvbGxvd2luZyBjb25maWdzIGhhdmUgZGVmYXVsdCB2YWx1ZSwgeW91IG1heSBubyBuZWVkIHRvIGRlZmluZSB0aGVtCiAgICAgKiA8YnIvPgogICAgICogYXBwbGljYXRpb24ubGlicmFyeSA9IEFQUExJQ0FUSU9OX1BBVEggLiAiL2xpYnJhcnkiIDxici8+CiAgICAgKiBhcHBsaWNhdGlvbi5kaXNwYXRjaGVyLnRocm93RXhjZXB0aW9uPTEgPGJyLz4KICAgICAqIGFwcGxpY2F0aW9uLmRpc3BhdGNoZXIuY2F0Y2hFeGNlcHRpb249MSA8YnIvPjxici8+CiAgICAgKiA8L3A+CiAgICAgKiA8cD5hcHBsaWNhdGlvbi5iYXNlVXJpPSIiPGJyLz48YnIvPjwvcD4KICAgICAqIDxwPgogICAgICogO3RoZSBwaHAgc2NyaXB0IGV4dCBuYW1lPGJyLz4KICAgICAqIGFwLmV4dD1waHA8YnIvPjxici8+CiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIDt0aGUgdmlldyB0ZW1wbGF0ZSBleHQgbmFtZTxici8+CiAgICAgKiBhcC52aWV3LmV4dD1waHRtbDxici8+PGJyLz4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogYXAuZGlzcGF0Y2hlci5kZWZhdWx0TW9kdWxlPUluZGV4PGJyLz4KICAgICAqIGFwLmRpc3BhdGNoZXIuZGVmYXVsdENvbnRyb2xsZXI9SW5kZXg8YnIvPgogICAgICogYXAuZGlzcGF0Y2hlci5kZWZhdWx0QWN0aW9uPWluZGV4PGJyLz48YnIvPgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiA7ZGVmaW5lZCBtb2R1bGVzPGJyLz4KICAgICAqIGFwLm1vZHVsZXM9SW5kZXgKICAgICAqIDwvcD4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRjb25maWcgQSBpbmkgY29uZmlnIGZpbGUgcGF0aCwgb3IgYSBjb25maWcgYXJyYXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVudmlyb24gV2hpY2ggc2VjdGlvbiB3aWxsIGJlIGxvYWRlZCBhcyB0aGUgZmluYWwgY29uZmlnCiAgICAgKgogICAgICogQHRocm93cyBZYWZfRXhjZXB0aW9uX1R5cGVFcnJvcnxZYWZfRXhjZXB0aW9uX1N0YXJ0dXBFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNvbmZpZywgJGVudmlyb24gPSBudWxsKSB7fQoKICAgIC8qKiBAcmV0dXJuIFlhZl9BcHBsaWNhdGlvbiAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEluc3RhbmNlKCkge30KCiAgICAvKioKICAgICAqIFJ1biBhIFlhZl9BcHBsaWNhdGlvbiwgbGV0IHRoZSBZYWZfQXBwbGljYXRpb24gYWNjZXB0IGEgcmVxdWVzdCwgYW5kIHJvdXRlIHRoZSByZXF1ZXN0LCBkaXNwYXRjaCB0byBjb250cm9sbGVyL2FjdGlvbiwgYW5kIHJlbmRlciByZXNwb25zZS4KICAgICAqIHJldHVybiByZXNwb25zZSB0byBjbGllbnQgZmluYWxseS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24ucnVuLnBocAogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAdGhyb3dzIFlhZl9FeGNlcHRpb25fU3RhcnR1cEVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBydW4oKSB7fQoKICAgIC8qKgogICAgICogVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IHVzZWQgdG8gcnVuIFlhZl9BcHBsaWNhdGlvbiBpbiBhIGNyb250YWIgd29yay4KICAgICAqIE1ha2UgdGhlIGNyb250YWIgd29yayBjYW4gYWxzbyB1c2UgdGhlIGF1dG9sb2FkZXIgYW5kIEJvb3RzdHJhcCBtZWNoYW5pc20uCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWFwcGxpY2F0aW9uLmV4ZWN1dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRlbnRyeSBhIHZhbGlkIGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gc3RyaW5nIC4uLiRfIHBhcmFtZXRlcnMgd2lsbCBwYXNzIHRvIHRoZSBjYWxsYmFjawogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKGNhbGxhYmxlICRlbnRyeSwgLi4uJF8pIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgWWFmX0FwcGxpY2F0aW9uIGluc3RhbmNlLCBhbHRlcm5hdGl2ZWx5LCB3ZSBhbHNvIGNvdWxkIHVzZSBZYWZfRGlzcGF0Y2hlcjo6Z2V0QXBwbGljYXRpb24oKS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uYXBwLnBocAogICAgICoKICAgICAqIEByZXR1cm4gWWFmX0FwcGxpY2F0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYXBwKCkge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIGVudmlyb24gd2hpY2ggd2FzIGRlZmluZWQgaW4geWFmLmVudmlyb24gd2hpY2ggaGFzIGEgZGVmYXVsdCB2YWx1ZSAicHJvZHVjdCIuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWFwcGxpY2F0aW9uLmVudmlyb24ucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVudmlyb24oKSB7fQoKICAgIC8qKgogICAgICogUnVuIGEgQm9vdHN0cmFwLCBhbGwgdGhlIG1ldGhvZHMgZGVmaW5lZCBpbiB0aGUgQm9vdHN0cmFwIGFuZCBuYW1lZCB3aXRoIHByZWZpeCAiX2luaXQiIHdpbGwgYmUgY2FsbGVkIGFjY29yZGluZyB0byB0aGVpciBkZWNsYXJhdGlvbiBvcmRlciwgaWYgdGhlIHBhcmFtZXRlciBib290c3RyYXAgaXMgbm90IHN1cHBsaWVkLCBZYWYgd2lsbCBsb29rIGZvciBhIEJvb3RzdHJhcCB1bmRlciBhcHBsaWNhdGlvbi5kaXJlY3RvcnkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWFwcGxpY2F0aW9uLmJvb3RzdHJhcC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gWWFmX0Jvb3RzdHJhcF9BYnN0cmFjdCAkYm9vdHN0cmFwIEEgWWFmX0Jvb3RzdHJhcF9BYnN0cmFjdCBpbnN0YW5jZQogICAgICogQHJldHVybiBZYWZfQXBwbGljYXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJvb3RzdHJhcCgkYm9vdHN0cmFwID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gWWFmX0NvbmZpZ19BYnN0cmFjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29uZmlnKCkge30KCiAgICAvKioKICAgICAqIEdldCB0aGUgbW9kdWxlcyBsaXN0IGRlZmluZWQgaW4gY29uZmlnLCBpZiBubyBvbmUgZGVmaW5lZCwgdGhlcmUgd2lsbCBhbHdheXMgYmUgYSBtb2R1bGUgbmFtZWQgIkluZGV4Ii4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uZ2V0bW9kdWxlcy5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNb2R1bGVzKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1hcHBsaWNhdGlvbi5nZXRkaXNwYXRjaGVyLnBocAogICAgICoKICAgICAqIEByZXR1cm4gWWFmX0Rpc3BhdGNoZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERpc3BhdGNoZXIoKSB7fQoKICAgIC8qKgogICAgICogQ2hhbmdlIHRoZSBhcHBsaWNhdGlvbiBkaXJlY3RvcnkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaXJlY3RvcnkKICAgICAqIEByZXR1cm4gWWFmX0FwcGxpY2F0aW9uCiAgICAgKiBAc2luY2UgMi4xLjQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1hcHBsaWNhdGlvbi5zZXRhcHBkaXJlY3RvcnkucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBcHBEaXJlY3RvcnkoJGRpcmVjdG9yeSkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uZ2V0YXBwZGlyZWN0b3J5LnBocAogICAgICoKICAgICAqIEBzaW5jZSAyLjEuNAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXBwRGlyZWN0b3J5KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uZ2V0bGFzdGVycm9ybm8ucGhwCiAgICAgKgogICAgICogQHNpbmNlIDIuMS4yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0RXJyb3JObygpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWFwcGxpY2F0aW9uLmdldGxhc3RlcnJvcm1zZy5waHAKICAgICAqCiAgICAgKiBAc2luY2UgMi4xLjIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RFcnJvck1zZygpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1hcHBsaWNhdGlvbi5jbGVhcmxhc3RlcnJvci5waHAKICAgICAqIEBzaW5jZSAyLjEuMgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXJMYXN0RXJyb3IoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWFwcGxpY2F0aW9uLmRlc3RydWN0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uY2xvbmUucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jbG9uZSgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24uc2xlZXAucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19zbGVlcCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtYXBwbGljYXRpb24ud2FrZXVwLnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fd2FrZXVwKCkge30KfQoKLyoqCiAqIDxwPjxiPllhZl9EaXNwYXRjaGVyPC9iPiBwdXJwb3NlIGlzIHRvIGluaXRpYWxpemUgdGhlIHJlcXVlc3QgZW52aXJvbm1lbnQsIHJvdXRlIHRoZSBpbmNvbWluZyByZXF1ZXN0LCBhbmQgdGhlbiBkaXNwYXRjaCBhbnkgZGlzY292ZXJlZCBhY3Rpb25zOyBpdCBhZ2dyZWdhdGVzIGFueSByZXNwb25zZXMgYW5kIHJldHVybnMgdGhlbSB3aGVuIHRoZSBwcm9jZXNzIGlzIGNvbXBsZXRlLjwvcD48YnIvPgogKiA8cD48Yj5ZYWZfRGlzcGF0Y2hlcjwvYj4gYWxzbyBpbXBsZW1lbnRzIHRoZSBTaW5nbGV0b24gcGF0dGVybiwgbWVhbmluZyBvbmx5IGEgc2luZ2xlIGluc3RhbmNlIG9mIGl0IG1heSBiZSBhdmFpbGFibGUgYXQgYW55IGdpdmVuIHRpbWUuIFRoaXMgYWxsb3dzIGl0IHRvIGFsc28gYWN0IGFzIGEgcmVnaXN0cnkgb24gd2hpY2ggdGhlIG90aGVyIG9iamVjdHMgaW4gdGhlIGRpc3BhdGNoIHByb2Nlc3MgbWF5IGRyYXcuPC9wPgogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtZGlzcGF0Y2hlci5waHAKICovCmZpbmFsIGNsYXNzIFlhZl9EaXNwYXRjaGVyCnsKICAgIC8qKgogICAgICogQHZhciBZYWZfRGlzcGF0Y2hlcgogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljICRfaW5zdGFuY2U7CgogICAgLyoqCiAgICAgKiBAdmFyIFlhZl9Sb3V0ZXIKICAgICAqLwogICAgcHJvdGVjdGVkICRfcm91dGVyOwoKICAgIC8qKgogICAgICogQHZhciBZYWZfVmlld19JbnRlcmZhY2UKICAgICAqLwogICAgcHJvdGVjdGVkICRfdmlldzsKCiAgICAvKioKICAgICAqIEB2YXIgWWFmX1JlcXVlc3RfQWJzdHJhY3QKICAgICAqLwogICAgcHJvdGVjdGVkICRfcmVxdWVzdDsKCiAgICAvKioKICAgICAqIEB2YXIgWWFmX1BsdWdpbl9BYnN0cmFjdAogICAgICovCiAgICBwcm90ZWN0ZWQgJF9wbHVnaW5zOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2F1dG9fcmVuZGVyID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3JldHVybl9yZXNwb25zZSA9ICIiOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRfaW5zdGFudGx5X2ZsdXNoID0gIiI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9kZWZhdWx0X21vZHVsZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2RlZmF1bHRfY29udHJvbGxlcjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2RlZmF1bHRfYWN0aW9uOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuY29uc3RydWN0LnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1kaXNwYXRjaGVyLmNsb25lLnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY2xvbmUoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuc2xlZXAucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19zbGVlcCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci53YWtldXAucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX193YWtldXAoKSB7fQoKICAgIC8qKgogICAgICogZW5hYmxlIHZpZXcgcmVuZGVyaW5nCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuZW5hYmxldmlldy5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIFlhZl9EaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmFibGVWaWV3KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gWWFmX1Jlc3BvbnNlX0Fic3RyYWN0fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3BvbnNlKCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERlZmF1bHRNb2R1bGUoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGVmYXVsdENvbnRyb2xsZXIoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGVmYXVsdEFjdGlvbigpIHt9CgogICAgLyoqCiAgICAgKiA8cD5kaXNhYmxlIHZpZXcgZW5naW5lLCB1c2VkIGluIHNvbWUgYXBwIHRoYXQgdXNlciB3aWxsIG91dHB1dCBieSBoaW1zZWxmPC9wPjxici8+CiAgICAgKiA8Yj5Ob3RlOjwvYj4KICAgICAqIDxwPnlvdSBjYW4gc2ltcGx5IHJldHVybiBGQUxTRSBpbiBhIGFjdGlvbiB0byBwcmV2ZW50IHRoZSBhdXRvLXJlbmRlcmluZyBvZiB0aGF0IGFjdGlvbjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5kaXNhYmxldmlldy5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc2FibGVWaWV3KCkge30KCiAgICAvKioKICAgICAqIEluaXRpYWxpemUgdmlldyBhbmQgcmV0dXJuIGl0CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuaW5pdHZpZXcucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdGVtcGxhdGVzX2RpcgogICAgICogQHBhcmFtIGFycmF5fG51bGwgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gWWFmX1ZpZXdfSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbml0VmlldygkdGVtcGxhdGVzX2RpciwgP2FycmF5ICRvcHRpb25zID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgc29sdXRpb24gZm9yIHRoYXQgaWYgeW91IHdhbnQgdXNlIGEgY3VzdG9tIHZpZXcgZW5naW5lIGluc3RlYWQgb2YgWWFmX1ZpZXdfU2ltcGxlCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuc2V0dmlldy5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gWWFmX1ZpZXdfSW50ZXJmYWNlICR2aWV3IEEgWWFmX1ZpZXdfSW50ZXJmYWNlIGluc3RhbmNlCiAgICAgKiBAcmV0dXJuIFlhZl9EaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRWaWV3KCR2aWV3KSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuc2V0cmVxdWVzdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gWWFmX1JlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QKICAgICAqIEByZXR1cm4gWWFmX0Rpc3BhdGNoZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFJlcXVlc3QoJHJlcXVlc3QpIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgWWFmX0FwcGxpY2F0aW9uIGluc3RhbmNlLiBzYW1lIGFzIFlhZl9BcHBsaWNhdGlvbjo6YXBwKCkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuZ2V0YXBwbGljYXRpb24ucGhwCiAgICAgKiBAcmV0dXJuIFlhZl9BcHBsaWNhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXBwbGljYXRpb24oKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuZ2V0cm91dGVyLnBocAogICAgICoKICAgICAqIEByZXR1cm4gWWFmX1JvdXRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Um91dGVyKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1kaXNwYXRjaGVyLmdldHJlcXVlc3QucGhwCiAgICAgKgogICAgICogQHJldHVybiBZYWZfUmVxdWVzdF9BYnN0cmFjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdCgpIHt9CgogICAgLyoqCiAgICAgKiA8cD5TZXQgZXJyb3IgaGFuZGxlciBmb3IgWWFmLiB3aGVuIGFwcGxpY2F0aW9uLmRpc3BhdGNoZXIudGhyb3dFeGNlcHRpb24gaXMgb2ZmLCBZYWYgd2lsbCB0cmlnZ2VyIGNhdGNoLWFibGUgZXJyb3Igd2hpbGUgdW5leHBlY3RlZCBlcnJvcnMgb2NjdXJyZWQuPC9wPjxici8+CiAgICAgKiA8cD5UaHVzLCB0aGlzIGVycm9yIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgd2hpbGUgdGhlIGVycm9yIHJhaXNlLjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5zZXRlcnJvcmhhbmRsZXIucGhwCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBhIGNhbGxhYmxlIGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gaW50ICRlcnJvcl90eXBlcyBZQUZfRVJSXyogY29uc3RhbnRzIG1hc2sKICAgICAqCiAgICAgKiBAcmV0dXJuIFlhZl9EaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFcnJvckhhbmRsZXIoJGNhbGxiYWNrLCAkZXJyb3JfdHlwZXMgPSBZQUZfRVJSX1RZUEVfRVJST1IpIHt9CgogICAgLyoqCiAgICAgKiBDaGFuZ2UgZGVmYXVsdCBtb2R1bGUgbmFtZQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1kaXNwYXRjaGVyLnNldGRlZmF1bHRtb2R1bGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbW9kdWxlCiAgICAgKiBAcmV0dXJuIFlhZl9EaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREZWZhdWx0TW9kdWxlKCRtb2R1bGUpIHt9CgogICAgLyoqCiAgICAgKiBDaGFuZ2UgZGVmYXVsdCBjb250cm9sbGVyIG5hbWUKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5zZXRkZWZhdWx0Y29udHJvbGxlci5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250cm9sbGVyCiAgICAgKiBAcmV0dXJuIFlhZl9EaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREZWZhdWx0Q29udHJvbGxlcigkY29udHJvbGxlcikge30KCiAgICAvKioKICAgICAqIENoYW5nZSBkZWZhdWx0IGFjdGlvbiBuYW1lCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuc2V0ZGVmYXVsdGFjdGlvbi5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhY3Rpb24KICAgICAqIEByZXR1cm4gWWFmX0Rpc3BhdGNoZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldERlZmF1bHRBY3Rpb24oJGFjdGlvbikge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1kaXNwYXRjaGVyLnJldHVybnJlc3BvbnNlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBib29sICRmbGFnCiAgICAgKiBAcmV0dXJuIFlhZl9EaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXR1cm5SZXNwb25zZSgkZmxhZykge30KCiAgICAvKioKICAgICAqIDxwPllhZl9EaXNwYXRjaGVyIHdpbGwgcmVuZGVyIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgZGlzcGF0Y2hlcyBhbiBpbmNvbWluZyByZXF1ZXN0LCB5b3UgY2FuIHByZXZlbnQgdGhlIHJlbmRlcmluZyBieSBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpdGggJGZsYWcgVFJVRTwvcD48YnIvPgogICAgICogPGI+Tm90ZTo8L2I+CiAgICAgKiA8cD55b3UgY2FuIHNpbXBseSByZXR1cm4gRkFMU0UgaW4gYSBhY3Rpb24gdG8gcHJldmVudCB0aGUgYXV0by1yZW5kZXJpbmcgb2YgdGhhdCBhY3Rpb248L3A+CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWRpc3BhdGNoZXIuYXV0b3JlbmRlci5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZmxhZyBzaW5jZSAyLjIuMCwgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IGdpdmVuLCB0aGVuIHRoZSBjdXJyZW50IHN0YXRlIHdpbGwgYmUgc2V0CiAgICAgKiBAcmV0dXJuIFlhZl9EaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhdXRvUmVuZGVyKCRmbGFnID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFN3aXRjaCBvbi9vZmYgdGhlIGluc3RhbnQgZmx1c2hpbmcKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5mbHVzaGluc3RhbnRseS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZmxhZyBzaW5jZSAyLjIuMCwgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IGdpdmVuLCB0aGVuIHRoZSBjdXJyZW50IHN0YXRlIHdpbGwgYmUgc2V0CiAgICAgKiBAcmV0dXJuIFlhZl9EaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmbHVzaEluc3RhbnRseSgkZmxhZyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5nZXRpbnN0YW5jZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIFlhZl9EaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoKSB7fQoKICAgIC8qKgogICAgICogPHA+VGhpcyBtZXRob2QgZG9lcyB0aGUgaGVhdnkgd29yayBvZiB0aGUgWWFmX0Rpc3BhdGNoZXIuIEl0IHRha2UgYSByZXF1ZXN0IG9iamVjdC48L3A+PGJyLz4KICAgICAqIDxwPlRoZSBkaXNwYXRjaCBwcm9jZXNzIGhhcyB0aHJlZSBkaXN0aW5jdCBldmVudHM6PC9wPgogICAgICogPHVsPgogICAgICogPGxpPlJvdXRpbmc8L2xpPgogICAgICogPGxpPkRpc3BhdGNoaW5nPC9saT4KICAgICAqIDxsaT5SZXNwb25zZTwvbGk+CiAgICAgKiA8L3VsPgogICAgICogPHA+Um91dGluZyB0YWtlcyBwbGFjZSBleGFjdGx5IG9uY2UsIHVzaW5nIHRoZSB2YWx1ZXMgaW4gdGhlIHJlcXVlc3Qgb2JqZWN0IHdoZW4gZGlzcGF0Y2goKSBpcyBjYWxsZWQuIERpc3BhdGNoaW5nIHRha2VzIHBsYWNlIGluIGEgbG9vcDsgYSByZXF1ZXN0IG1heSBlaXRoZXIgaW5kaWNhdGUgbXVsdGlwbGUgYWN0aW9ucyB0byBkaXNwYXRjaCwgb3IgdGhlIGNvbnRyb2xsZXIgb3IgYSBwbHVnaW4gbWF5IHJlc2V0IHRoZSByZXF1ZXN0IG9iamVjdCB0byBmb3JjZSBhZGRpdGlvbmFsIGFjdGlvbnMgdG8gZGlzcGF0Y2goc2VlIFlhZl9QbHVnaW5fQWJzdHJhY3QuIFdoZW4gYWxsIGlzIGRvbmUsIHRoZSBZYWZfRGlzcGF0Y2hlciByZXR1cm5zIGEgcmVzcG9uc2UuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1kaXNwYXRjaGVyLmRpc3BhdGNoLnBocAogICAgICoKICAgICAqIEBwYXJhbSBZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEB0aHJvd3MgWWFmX0V4Y2VwdGlvbl9UeXBlRXJyb3IKICAgICAqIEB0aHJvd3MgWWFmX0V4Y2VwdGlvbl9Sb3V0ZXJGYWlsZWQKICAgICAqIEB0aHJvd3MgWWFmX0V4Y2VwdGlvbl9EaXNwYXRjaEZhaWxlZAogICAgICogQHRocm93cyBZYWZfRXhjZXB0aW9uX0xvYWRGYWlsZWQKICAgICAqIEB0aHJvd3MgWWFmX0V4Y2VwdGlvbl9Mb2FkRmFpbGVkX0FjdGlvbgogICAgICogQHRocm93cyBZYWZfRXhjZXB0aW9uX0xvYWRGYWlsZWRfQ29udHJvbGxlcgogICAgICoKICAgICAqIEByZXR1cm4gWWFmX1Jlc3BvbnNlX0Fic3RyYWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwYXRjaCgkcmVxdWVzdCkge30KCiAgICAvKioKICAgICAqIDxwPlN3aXRjaCBvbi9vZmYgZXhjZXB0aW9uIHRocm93aW5nIHdoaWxlIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyaW5nLiBXaGVuIHRoaXMgaXMgb24sIFlhZiB3aWxsIHRocm93aW5nIGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGNhdGNoYWJsZSBlcnJvcnMuPC9wPjxici8+CiAgICAgKiA8cD5Zb3UgY2FuIGFsc28gdXNlIGFwcGxpY2F0aW9uLmRpc3BhdGNoZXIudGhyb3dFeGNlcHRpb24gdG8gYWNoaWV2ZSB0aGUgc2FtZSBwdXJwb3NlLjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci50aHJvd2V4Y2VwdGlvbi5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZmxhZwogICAgICogQHJldHVybiBZYWZfRGlzcGF0Y2hlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhyb3dFeGNlcHRpb24oJGZsYWcgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogPHA+V2hpbGUgdGhlIGFwcGxpY2F0aW9uLmRpc3BhdGNoZXIudGhyb3dFeGNlcHRpb24gaXMgT24oeW91IGNhbiBhbHNvIGNhbGxpbmcgdG8gPGI+WWFmX0Rpc3BhdGNoZXI6OnRocm93RXhjZXB0aW9uKFRSVUUpPC9iPiB0byBlbmFibGUgaXQpLCBZYWYgd2lsbCB0aHJvdyBFeGNlcHRpb24gd2hlIGVycm9yIG9jY3VycyBpbnN0ZWFkIG9mIHRyaWdnZXIgZXJyb3IuPC9wPjxici8+CiAgICAgKiA8cD50aGVuIGlmIHlvdSBlbmFibGUgPGI+WWFmX0Rpc3BhdGNoZXI6OmNhdGNoRXhjZXB0aW9uKCk8L2I+KGFsc28gY2FuIGVuYWJsZWQgYnkgc2V0IGFwcGxpY2F0aW9uLmRpc3BhdGNoZXIuY2F0Y2hFeGNlcHRpb24pLCBhbGwgdW5jYXVnaHQgRXhjZXB0aW9ucyB3aWxsIGJlIGNhdWdodCBieSBFcnJvckNvbnRyb2xsZXI6OmVycm9yIGlmIHlvdSBoYXZlIGRlZmluZWQgb25lLjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5jYXRjaGV4Y2VwdGlvbi5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkZmxhZwogICAgICogQHJldHVybiBZYWZfRGlzcGF0Y2hlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2F0Y2hFeGNlcHRpb24oJGZsYWcgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmVnaXN0ZXIgYSBwbHVnaW4oc2VlIFlhZl9QbHVnaW5fQWJzdHJhY3QpLiBHZW5lcmFsbHksIHdlIHJlZ2lzdGVyIHBsdWdpbnMgaW4gQm9vdHN0cmFwKHNlZSBZYWZfQm9vdHN0cmFwX0Fic3RyYWN0KS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtZGlzcGF0Y2hlci5yZWdpc3RlcnBsdWdpbi5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gWWFmX1BsdWdpbl9BYnN0cmFjdCAkcGx1Z2luCiAgICAgKiBAcmV0dXJuIFlhZl9EaXNwYXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3RlclBsdWdpbigkcGx1Z2luKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIFlhZl9SZXNwb25zZV9BYnN0cmFjdCAkcmVzcG9uc2UKICAgICAqIEByZXR1cm4gWWFmX0Rpc3BhdGNoZXJ8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVzcG9uc2UoJHJlc3BvbnNlKSB7fQp9CgovKioKICogPHA+PGI+WWFmX0xvYWRlcjwvYj4gaW50cm9kdWNlcyBhIGNvbXByZWhlbnNpdmUgYXV0b2xvYWRpbmcgc29sdXRpb24gZm9yIFlhZi48L3A+CiAqIDxici8+CiAqIDxwPlRoZSBmaXJzdCB0aW1lIGFuIGluc3RhbmNlIG9mIFlhZl9BcHBsaWNhdGlvbiBpcyByZXRyaWV2ZWQsIDxiPllhZl9Mb2FkZXI8L2I+IHdpbGwgaW5zdGFuY2UgYSBzaW5nbGV0b24sIGFuZCByZWdpc3RlcnMgaXRzZWxmIHdpdGggc3BsX2F1dG9sb2FkLiBZb3UgcmV0cmlldmUgYW4gaW5zdGFuY2UgdXNpbmcgdGhlIFlhZl9Mb2FkZXI6OmdldEluc3RhbmNlKCk8L3A+CiAqIDxici8+CiAqIDxwPjxiPllhZl9Mb2FkZXI8L2I+IGF0dGVtcHQgdG8gbG9hZCBhIGNsYXNzIG9ubHkgb25lIHNob3QsIGlmIGZhaWxlZCwgZGVwZW5kIG9uIHlhZi51c2Vfc3BsX2F1dG9sb2FkLCBpZiB0aGlzIGNvbmZpZyBpcyBPbiBZYWZfTG9hZGVyOjphdXRvbG9hZCgpIHdpbGwgcmV0dXJuIEZBTFNFLCB0aHVzIGdpdmUgdGhlIGNoYW5jZSB0byBvdGhlciBhdXRvbG9hZCBmdW5jdGlvbi4gaWYgaXQgaXMgT2ZmIChieSBkZWZhdWx0KSwgWWFmX0xvYWRlcjo6YXV0b2xvYWQoKSB3aWxsIHJldHVybiBUUlVFLCBhbmQgbW9yZSBpbXBvcnRhbnQgaXMgdGhhdCBhIHZlcnkgdXNlZnVsIHdhcm5pbmcgd2lsbCBiZSB0cmlnZ2VyZWQgKHZlcnkgdXNlZnVsIHRvIGZpbmQgb3V0IHdoeSBhIGNsYXNzIGNvdWxkIG5vdCBiZSBsb2FkZWQpLjwvcD4KICogPGJyLz4KICogPGI+Tm90ZTo8L2I+CiAqIDxwPlBsZWFzZSBrZWVwIHlhZi51c2Vfc3BsX2F1dG9sb2FkIE9mZiB1bmxlc3MgdGhlcmUgaXMgc29tZSBsaWJyYXJ5IGhhdmUgdGhlaXIgb3duIGF1dG9sb2FkIG1lY2hhbmlzbSBhbmQgaW1wb3NzaWJsZSB0byByZXdyaXRlIGl0LjwvcD4KICogPGJyLz4KICogPHA+SWYgeW91IHdhbnQgPGI+WWFmX0xvYWRlcjwvYj4gc2VhcmNoIHNvbWUgY2xhc3NlcyhsaWJyYXJpZXMpIGluIHRoZSBsb2NhbCBjbGFzcyBkaXJlY3Rvcnkod2hpY2ggaXMgZGVmaW5lZCBpbiBhcHBsaWNhdGlvbi5pbmksIGFuZCBieSBkZWZhdWx0LCBpdCBpcyBhcHBsaWNhdGlvbi5kaXJlY3RvcnkgLiAiL2xpYnJhcnkiKSwgeW91IHNob3VsZCByZWdpc3RlciB0aGUgY2xhc3MgcHJlZml4IHVzaW5nIHRoZSBZYWZfTG9hZGVyOjpyZWdpc3RlckxvY2FsTmFtZVNwYWNlKCk8L3A+CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1sb2FkZXIucGhwCiAqLwpjbGFzcyBZYWZfTG9hZGVyCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRfbG9jYWxfbnM7CgogICAgLyoqCiAgICAgKiBCeSBkZWZhdWx0LCB0aGlzIHZhbHVlIGlzIGFwcGxpY2F0aW9uLmRpcmVjdG9yeSAuICIvbGlicmFyeSIsIHlvdSBjYW4gY2hhbmdlIHRoaXMgZWl0aGVyIGluIHRoZSBhcHBsaWNhdGlvbi5pbmkoYXBwbGljYXRpb24ubGlicmFyeSkgb3IgY2FsbCB0byBZYWZfTG9hZGVyOjpzZXRMaWJyYXJ5UGF0aCgpCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9saWJyYXJ5OwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRfZ2xvYmFsX2xpYnJhcnk7CgogICAgLyoqCiAgICAgKiBAdmFyIFlhZl9Mb2FkZXIKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyAkX2luc3RhbmNlOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWxvYWRlci5jb25zdHJ1Y3QucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWxvYWRlci5jbG9uZS5waHAKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2Nsb25lKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1sb2FkZXIuc2xlZXAucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19zbGVlcCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtbG9hZGVyLndha2V1cC5waHAKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX3dha2V1cCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtbG9hZGVyLmF1dG9sb2FkLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzX25hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGF1dG9sb2FkKCRjbGFzc19uYW1lKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWxvYWRlci5nZXRpbnN0YW5jZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbF9saWJyYXJ5X3BhdGgKICAgICAqIEBwYXJhbSBzdHJpbmcgJGdsb2JhbF9saWJyYXJ5X3BhdGgKICAgICAqCiAgICAgKiBAcmV0dXJuIFlhZl9Mb2FkZXIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbnN0YW5jZSgkbG9jYWxfbGlicmFyeV9wYXRoID0gbnVsbCwgJGdsb2JhbF9saWJyYXJ5X3BhdGggPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogPHA+UmVnaXN0ZXIgbG9jYWwgY2xhc3MgcHJlZml4IG5hbWUsIFlhZl9Mb2FkZXIgc2VhcmNoIGNsYXNzZXMgaW4gdHdvIGxpYnJhcnkgZGlyZWN0b3JpZXMsIHRoZSBvbmUgaXMgY29uZmlndXJlZCB2aWEgYXBwbGljYXRpb24ubGlicmFyeS5kaXJlY3RvcnkoaW4gYXBwbGljYXRpb24uaW5pKSB3aGljaCBpcyBjYWxsZWQgbG9jYWwgbGlicmFyeSBkaXJlY3Rvcnk7IHRoZSBvdGhlciBpcyBjb25maWd1cmVkIHZpYSB5YWYubGlicmFyeSAoaW4gcGhwLmluaSkgd2hpY2ggaXMgY2FsbGVkIGdsb2JhbCBsaWJyYXJ5IGRpcmVjdG9yeSwgc2luY2UgaXQgY2FuIGJlIHNoYXJlZCBieSBtYW55IGFwcGxpY2F0aW9ucyBpbiB0aGUgc2FtZSBzZXJ2ZXIuPC9wPgogICAgICogPGJyLz4KICAgICAqIDxwPldoZW4gYW4gYXV0b2xvYWRpbmcgaXMgdHJpZ2dlcmVkLCBZYWZfTG9hZGVyIHdpbGwgZGV0ZXJtaW5lIHdoaWNoIGxpYnJhcnkgZGlyZWN0b3J5IHNob3VsZCBiZSBzZWFyY2hlZCBpbiBieSBleGFtaW5pbmcgdGhlIHByZWZpeCBuYW1lIG9mIHRoZSBtaXNzZWQgY2xhc3NuYW1lLiBJZiB0aGUgcHJlZml4IG5hbWUgaXMgcmVnaXN0ZXJlZCBhcyBhIGxvY2FsIG5hbWVzcGFjZSB0aGVuIGxvb2sgZm9yIGl0IGluIGxvY2FsIGxpYnJhcnkgZGlyZWN0b3J5LCBvdGhlcndpc2UgbG9vayBmb3IgaXQgaW4gZ2xvYmFsIGxpYnJhcnkgZGlyZWN0b3J5LjwvcD4KICAgICAqIDxici8+CiAgICAgKiA8Yj5Ob3RlOjwvYj4KICAgICAqIDxwPklmIHlhZi5saWJyYXJ5IGlzIG5vdCBjb25maWd1cmVkLCB0aGVuIHRoZSBnbG9iYWwgbGlicmFyeSBkaXJlY3RvcnkgaXMgYXNzdW1lZCB0byBiZSB0aGUgbG9jYWwgbGlicmFyeSBkaXJlY3RvcnkuIGluIHRoYXQgY2FzZSwgYWxsIGF1dG9sb2FkaW5nIHdpbGwgbG9vayBmb3IgbG9jYWwgbGlicmFyeSBkaXJlY3RvcnkuIEJ1dCBpZiB5b3Ugd2FudCB5b3VyIFlhZiBhcHBsaWNhdGlvbiBiZSBzdHJvbmcsIHRoZW4gYWx3YXlzIHJlZ2lzdGVyIHlvdXIgb3duIGNsYXNzZXMgYXMgbG9jYWwgY2xhc3Nlcy48L3A+CiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtbG9hZGVyLnJlZ2lzdGVybG9jYWxuYW1lc3BhY2UucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkbmFtZXNwYWNlIGEgc3RyaW5nIG9yIGEgYXJyYXkgb2YgY2xhc3MgbmFtZSBwcmVmaXguIGFsbCBjbGFzcyBwcmVmaXggd2l0aCB0aGVzZSBwcmVmaXggd2lsbCBiZSBsb2FkZWQgaW4gbG9jYWwgbGlicmFyeSBwYXRoLgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXJMb2NhbE5hbWVzcGFjZSgkbmFtZXNwYWNlLCAkcGF0aCA9ICcnKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWxvYWRlci5nZXRsb2NhbG5hbWVzcGFjZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG9jYWxOYW1lc3BhY2UoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWVzcGFjZXMoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWxvYWRlci5jbGVhcmxvY2FsbmFtZXNwYWNlLnBocAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhckxvY2FsTmFtZXNwYWNlKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1sb2FkZXIuaXNsb2NhbG5hbWUucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY2xhc3NfbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNMb2NhbE5hbWUoJGNsYXNzX25hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtbG9hZGVyLmltcG9ydC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW1wb3J0KCRmaWxlKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbGlicmFyeV9wYXRoCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNfZ2xvYmFsCiAgICAgKgogICAgICogQHJldHVybiBZYWZfTG9hZGVyCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtbG9hZGVyLnNldGxpYnJhcnlwYXRoLnBocAogICAgICoKICAgICAqIEBzaW5jZSAyLjEuNAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TGlicmFyeVBhdGgoJGxpYnJhcnlfcGF0aCwgJGlzX2dsb2JhbCA9IGZhbHNlKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGJvb2wgJGlzX2dsb2JhbAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAc2luY2UgMi4xLjQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1sb2FkZXIuZ2V0bGlicmFyeXBhdGgucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMaWJyYXJ5UGF0aCgkaXNfZ2xvYmFsID0gZmFsc2UpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRuYW1lc3BhY2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICAgICAqIEByZXR1cm4gWWFmX0xvYWRlcnxudWxsfGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3Rlck5hbWVzcGFjZSgkbmFtZXNwYWNlLCAkcGF0aCA9ICcnKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkY2xhc3NfbmFtZQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWVzcGFjZVBhdGgoJGNsYXNzX25hbWUpIHt9Cn0KCi8qKgogKiA8cD5BbGwgbWV0aG9kcyBvZiA8Yj5ZYWZfUmVnaXN0cnk8L2I+IGRlY2xhcmVkIGFzIHN0YXRpYywgbWFraW5nIGl0IHVuaXZlcnNhbGx5IGFjY2Vzc2libGUuIFRoaXMgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gZ2V0IG9yIHNldCBhbnkgY3VzdG9tIGRhdGEgZnJvbSBhbnl3YXkgaW4geW91ciBjb2RlIGFzIG5lY2Vzc2FyeS48L3A+CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1yZWdpc3RyeS5waHAKICovCmZpbmFsIGNsYXNzIFlhZl9SZWdpc3RyeQp7CiAgICAvKioKICAgICAqIEB2YXIgWWFmX1JlZ2lzdHJ5CiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJF9pbnN0YW5jZTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRfZW50cmllczsKCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZWdpc3RyeS5jb25zdHJ1Y3QucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlZ2lzdHJ5LmNsb25lLnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY2xvbmUoKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgYW4gaXRlbSBmcm9tIHJlZ2lzdHJ5CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlZ2lzdHJ5LmdldC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldCgkbmFtZSkge30KCiAgICAvKioKICAgICAqIENoZWNrIHdoZXRoZXIgYW4gaXRlbSBleGlzdHMKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVnaXN0cnkuaGFzLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoYXMoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVnaXN0cnkuc2V0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0KCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVnaXN0cnkuZGVsLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWR8Ym9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlbCgkbmFtZSkge30KfQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1zZXNzaW9uLnBocAogKiBAdmVyc2lvbiAyLjIuOQogKi8KZmluYWwgY2xhc3MgWWFmX1Nlc3Npb24gaW1wbGVtZW50cyBJdGVyYXRvciwgQXJyYXlBY2Nlc3MsIENvdW50YWJsZQp7CiAgICAvKioKICAgICAqIEB2YXIgWWFmX1Nlc3Npb24KICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyAkX2luc3RhbmNlOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9zZXNzaW9uOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3N0YXJ0ZWQgPSB0cnVlOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXNlc3Npb24uY29uc3RydWN0LnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1zZXNzaW9uLmNsb25lLnBocAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY2xvbmUoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXNlc3Npb24uc2xlZXAucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19zbGVlcCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtc2Vzc2lvbi53YWtldXAucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX193YWtldXAoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXNlc3Npb24uZ2V0aW5zdGFuY2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBZYWZfU2Vzc2lvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbmNlKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1zZXNzaW9uLnN0YXJ0LnBocAogICAgICoKICAgICAqIEByZXR1cm4gWWFmX1Nlc3Npb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0YXJ0KCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1zZXNzaW9uLmdldC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXNlc3Npb24uaGFzLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhcygkbmFtZSkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1zZXNzaW9uLnNldC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBZYWZfU2Vzc2lvbnxmYWxzZSByZXR1cm4gRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtc2Vzc2lvbi5kZWwucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gWWFmX1Nlc3Npb258ZmFsc2UgcmV0dXJuIEZBTFNFIG9uIGZhaWx1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlbCgkbmFtZSkge30KCiAgICAvKioKICAgICAqIEBzZWUgQ291bnRhYmxlOjpjb3VudAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludCB7fQoKICAgIC8qKgogICAgICogQHNlZSBJdGVyYXRvcjo6cmV3aW5kCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIEl0ZXJhdG9yOjpjdXJyZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkge30KCiAgICAvKioKICAgICAqIEBzZWUgSXRlcmF0b3I6Om5leHQKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIEl0ZXJhdG9yOjp2YWxpZAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIEl0ZXJhdG9yOjprZXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIEFycmF5QWNjZXNzOjpvZmZzZXRVbnNldAogICAgICogQHBhcmFtIG1peGVkICRvZmZzZXQKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9mZnNldCkge30KCiAgICAvKioKICAgICAqIEBzZWUgQXJyYXlBY2Nlc3M6Om9mZnNldEdldAogICAgICogQHBhcmFtIG1peGVkICRvZmZzZXQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgkb2Zmc2V0KSB7fQoKICAgIC8qKgogICAgICogQHNlZSBBcnJheUFjY2Vzczo6b2Zmc2V0RXhpc3RzCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9mZnNldAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG9mZnNldCkge30KCiAgICAvKioKICAgICAqIEBzZWUgQXJyYXlBY2Nlc3M6Om9mZnNldFNldAogICAgICogQHBhcmFtIG1peGVkICRvZmZzZXQKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIEBzZWUgWWFmX1Nlc3Npb246OmdldCgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSkge30KCiAgICAvKioKICAgICAqIEBzZWUgWWFmX1Nlc3Npb246OmhhcygpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9TZXNzaW9uOjpzZXQoKQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgkbmFtZSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBZYWZfU2Vzc2lvbjo6ZGVsKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX191bnNldCgkbmFtZSkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gWWFmX1Nlc3Npb258bnVsbHxmYWxzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoKSB7fQp9CgovKioKICogPHA+PGI+WWFmX1JvdXRlcjwvYj4gaXMgdGhlIHN0YW5kYXJkIGZyYW1ld29yayByb3V0ZXIuIFJvdXRpbmcgaXMgdGhlIHByb2Nlc3Mgb2YgdGFraW5nIGEgVVJJIGVuZHBvaW50ICh0aGF0IHBhcnQgb2YgdGhlIFVSSSB3aGljaCBjb21lcyBhZnRlciB0aGUgYmFzZSBVUkk6IHNlZSBZYWZfUmVxdWVzdF9BYnN0cmFjdDo6c2V0QmFzZVVyaSgpKSBhbmQgZGVjb21wb3NpbmcgaXQgaW50byBwYXJhbWV0ZXJzIHRvIGRldGVybWluZSB3aGljaCBtb2R1bGUsIGNvbnRyb2xsZXIsIGFuZCBhY3Rpb24gb2YgdGhhdCBjb250cm9sbGVyIHNob3VsZCByZWNlaXZlIHRoZSByZXF1ZXN0LiBUaGlzIHZhbHVlcyBvZiB0aGUgbW9kdWxlLCBjb250cm9sbGVyLCBhY3Rpb24gYW5kIG90aGVyIHBhcmFtZXRlcnMgYXJlIHBhY2thZ2VkIGludG8gYSBZYWZfUmVxdWVzdF9BYnN0cmFjdCBvYmplY3Qgd2hpY2ggaXMgdGhlbiBwcm9jZXNzZWQgYnkgWWFmX0Rpc3BhdGNoZXIuIFJvdXRpbmcgb2NjdXJzIG9ubHkgb25jZTogd2hlbiB0aGUgcmVxdWVzdCBpcyBpbml0aWFsbHkgcmVjZWl2ZWQgYW5kIGJlZm9yZSB0aGUgZmlyc3QgY29udHJvbGxlciBpcyBkaXNwYXRjaGVkLiBZYWZfUm91dGVyIGlzIGRlc2lnbmVkIHRvIGFsbG93IGZvciBtb2RfcmV3cml0ZS1saWtlIGZ1bmN0aW9uYWxpdHkgdXNpbmcgcHVyZSBQSFAgc3RydWN0dXJlcy4gSXQgaXMgdmVyeSBsb29zZWx5IGJhc2VkIG9uIFJ1Ynkgb24gUmFpbHMgcm91dGluZyBhbmQgZG9lcyBub3QgcmVxdWlyZSBhbnkgcHJpb3Iga25vd2xlZGdlIG9mIHdlYnNlcnZlciBVUkwgcmV3cml0aW5nPC9wPgogKiA8YnIvPgogKiA8Yj5EZWZhdWx0IFJvdXRlPC9iPgogKiA8YnIvPgogKiA8cD48Yj5ZYWZfUm91dGVyPC9iPiBjb21lcyBwcmUtY29uZmlndXJlZCB3aXRoIGEgZGVmYXVsdCByb3V0ZSBZYWZfUm91dGVfU3RhdGljLCB3aGljaCB3aWxsIG1hdGNoIFVSSXMgaW4gdGhlIHNoYXBlIG9mIGNvbnRyb2xsZXIvYWN0aW9uLiBBZGRpdGlvbmFsbHksIGEgbW9kdWxlIG5hbWUgbWF5IGJlIHNwZWNpZmllZCBhcyB0aGUgZmlyc3QgcGF0aCBlbGVtZW50LCBhbGxvd2luZyBVUklzIG9mIHRoZSBmb3JtIG1vZHVsZS9jb250cm9sbGVyL2FjdGlvbi4gRmluYWxseSwgaXQgd2lsbCBhbHNvIG1hdGNoIGFueSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXBwZW5kZWQgdG8gdGhlIFVSSSBieSBkZWZhdWx0IC0gY29udHJvbGxlci9hY3Rpb24vdmFyMS92YWx1ZTEvdmFyMi92YWx1ZTIuPC9wPgogKiA8YnIvPgogKiA8Yj5Ob3RlOjwvYj4KICogPHA+TW9kdWxlIG5hbWUgbXVzdCBiZSBkZWZpbmVkIGluIGNvbmZpZywgY29uc2lkZXJpbmcgYXBwbGljYXRpb24ubW9kdWxlPSJJbmRleCxGb28sQmFyIiwgaW4gdGhpcyBjYXNlLCBvbmx5IGluZGV4LCBmb28gYW5kIGJhciBjYW4gYmUgY29uc2lkZXJlZCBhcyBhIG1vZHVsZSBuYW1lLiBpZiBkb2Vzbid0IGNvbmZpZywgdGhlcmUgaXMgb25seSBvbmUgbW9kdWxlIG5hbWVkICJJbmRleCIuPC9wPgogKiA8YnIvPgogKiA8cD4qKiBTZWUgZXhhbXBsZXMgYnkgb3BlbmluZyB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbjwvcD4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLXJvdXRlci5waHAKICovCmNsYXNzIFlhZl9Sb3V0ZXIKewogICAgLyoqCiAgICAgKiBAdmFyIFlhZl9Sb3V0ZV9JbnRlcmZhY2VbXSByZWdpc3RlcmVkIHJvdXRlcyBzdGFjawogICAgICovCiAgICBwcm90ZWN0ZWQgJF9yb3V0ZXM7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZyBhZnRlciByb3V0aW5nIHBoYXNlLCB0aGlzIGluZGljYXRlZCB0aGUgbmFtZSBvZiB3aGljaCByb3V0ZSBpcyB1c2VkIHRvIHJvdXRlIGN1cnJlbnQgcmVxdWVzdC4geW91IGNhbiBnZXQgdGhpcyBuYW1lIGJ5IFlhZl9Sb3V0ZXI6OmdldEN1cnJlbnRSb3V0ZSgpCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2N1cnJlbnQ7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGVyLmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIDxwPmJ5IGRlZmF1bHQsIFlhZl9Sb3V0ZXIgdXNpbmcgYSBZYWZfUm91dGVfU3RhdGljIGFzIGl0cyBkZWZhdWx0IHJvdXRlLiB5b3UgY2FuIGFkZCBuZXcgcm91dGVzIGludG8gcm91dGVyJ3Mgcm91dGUgc3RhY2sgYnkgY2FsbGluZyB0aGlzIG1ldGhvZC48L3A+CiAgICAgKiA8YnIvPgogICAgICogPHA+dGhlIG5ld2VyIHJvdXRlIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgb2xkZXIocm91dGUgc3RhY2spLCBhbmQgaWYgdGhlIG5ld2VyIHJvdXRlciByZXR1cm4gVFJVRSwgdGhlIHJvdXRlciBwcm9jZXNzIHdpbGwgYmUgZW5kLiBvdGhlcndpc2UsIHRoZSBvbGRlciBvbmUgd2lsbCBiZSBjYWxsZWQuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZXIuYWRkcm91dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIFlhZl9Sb3V0ZV9JbnRlcmZhY2UgJHJvdXRlCiAgICAgKgogICAgICogQHJldHVybiBZYWZfUm91dGVyfGZhbHNlIHJldHVybiBGQUxTRSBvbiBmYWlsdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRSb3V0ZSgkbmFtZSwgJHJvdXRlKSB7fQoKICAgIC8qKgogICAgICogPHA+QWRkIHJvdXRlcyBkZWZpbmVkIGJ5IGNvbmZpZ3MgaW50byBZYWZfUm91dGVyJ3Mgcm91dGUgc3RhY2s8L3A+CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlci5hZGRjb25maWcucGhwCiAgICAgKgogICAgICogQHBhcmFtIFlhZl9Db25maWdfQWJzdHJhY3QgJGNvbmZpZwogICAgICoKICAgICAqIEByZXR1cm4gWWFmX1JvdXRlcnxmYWxzZSByZXR1cm4gRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkQ29uZmlnKCRjb25maWcpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGVyLnJvdXRlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm91dGUoJHJlcXVlc3QpIHt9CgogICAgLyoqCiAgICAgKiA8cD5SZXRyaWV2ZSBhIHJvdXRlIGJ5IG5hbWUsIHNlZSBhbHNvIFlhZl9Sb3V0ZXI6OmdldEN1cnJlbnRSb3V0ZSgpPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZXIuZ2V0cm91dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gWWFmX1JvdXRlX0ludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Um91dGUoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGVyLmdldHJvdXRlcy5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIFlhZl9Sb3V0ZV9JbnRlcmZhY2VbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Um91dGVzKCkge30KCiAgICAvKioKICAgICAqIDxwPkdldCB0aGUgbmFtZSBvZiB0aGUgcm91dGUgd2hpY2ggaXMgZWZmZWN0aXZlIGluIHRoZSByb3V0ZSBwcm9jZXNzLjwvcD4KICAgICAqIDxici8+CiAgICAgKiA8Yj5Ob3RlOjwvYj4KICAgICAqIDxwPllvdSBzaG91bGQgY2FsbCB0aGlzIG1ldGhvZCBhZnRlciB0aGUgcm91dGUgcHJvY2VzcyBmaW5pc2hlZCwgc2luY2UgYmVmb3JlIHRoYXQsIHRoaXMgbWV0aG9kIHdpbGwgYWx3YXlzIHJldHVybiBOVUxMLjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGVyLmdldGN1cnJlbnRyb3V0ZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgZWZmZWN0aXZlIHJvdXRlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q3VycmVudFJvdXRlKCkge30KfQoKLyoqCiAqIDxwPkJvb3RzdHJhcCBpcyBhIG1lY2hhbmlzbSB1c2VkIHRvIGRvIHNvbWUgaW5pdGlhbCBjb25maWcgYmVmb3JlIGEgQXBwbGljYXRpb24gcnVuLjxici8+PGJyLz48L3A+CiAqIDxwPlVzZXIgbWF5IGRlZmluZSB0aGVpciBvd24gQm9vdHN0cmFwIGNsYXNzIGJ5IGluaGVyaXRpbmcgPGI+WWFmX0Jvb3RzdHJhcF9BYnN0cmFjdDwvYj48YnIvPjxici8+PC9wPgogKiA8cD5BbnkgbWV0aG9kIGRlY2xhcmVkIGluIEJvb3RzdHJhcCBjbGFzcyB3aXRoIGxlYWRpbmcgIl9pbml0Iiwgd2lsbCBiZSBjYWxsZWQgYnkgWWFmX0FwcGxpY2F0aW9uOjpib290c3RyYXAoKSBvbmUgYnkgb25lIGFjY29yZGluZyB0byB0aGVpciBkZWZpbmVkIG9yZGVyPGJyLz48YnIvPjwvcD4KICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLWJvb3RzdHJhcC1hYnN0cmFjdC5waHAKICovCmFic3RyYWN0IGNsYXNzIFlhZl9Cb290c3RyYXBfQWJzdHJhY3Qge30KCi8qKgogKiA8cD48Yj5ZYWZfQ29udHJvbGxlcl9BYnN0cmFjdDwvYj4gaXMgdGhlIGhlYXJ0IG9mIFlhZidzIHN5c3RlbS4gTVZDIHN0YW5kcyBmb3IgTW9kZWwtVmlldy1Db250cm9sbGVyIGFuZCBpcyBhIGRlc2lnbiBwYXR0ZXJuIHRhcmdldGVkIGF0IHNlcGFyYXRpbmcgYXBwbGljYXRpb24gbG9naWMgZnJvbSBkaXNwbGF5IGxvZ2ljLjwvcD4KICogPGJyLz4KICogPHA+RXZlcnkgY3VzdG9tIGNvbnRyb2xsZXIgc2hhbGwgaW5oZXJpdCA8Yj5ZYWZfQ29udHJvbGxlcl9BYnN0cmFjdDwvYj4uPC9wPgogKiA8YnIvPgogKiA8cD5Zb3Ugd2lsbCBmaW5kIHRoYXQgeW91IGNhbiBub3QgZGVmaW5lIF9fY29uc3RydWN0IGZ1bmN0aW9uIGZvciB5b3VyIGN1c3RvbSBjb250cm9sbGVyLCB0aHVzLCA8Yj5ZYWZfQ29udHJvbGxlcl9BYnN0cmFjdDwvYj4gcHJvdmlkZXMgYSBtYWdpYyBtZXRob2Q6IFlhZl9Db250cm9sbGVyX0Fic3RyYWN0Ojppbml0KCkuPC9wPgogKiA8YnIvPgogKiA8cD5JZiB5b3UgaGF2ZSBkZWZpbmVkIGEgaW5pdCgpIG1ldGhvZCBpbiB5b3VyIGN1c3RvbSBjb250cm9sbGVyLCBpdCB3aWxsIGJlIGNhbGxlZCBhcyBsb25nIGFzIHRoZSBjb250cm9sbGVyIHdhcyBpbnN0YW50aWF0ZWQuPC9wPgogKiA8YnIvPgogKiA8cD5BY3Rpb24gbWF5IGhhdmUgYXJndW1lbnRzLCB3aGVuIGEgcmVxdWVzdCBjb21pbmcsIGlmIHRoZXJlIGFyZSB0aGUgc2FtZSBuYW1lIHZhcmlhYmxlIGluIHRoZSByZXF1ZXN0IHBhcmFtZXRlcnMoc2VlIFlhZl9SZXF1ZXN0X0Fic3RyYWN0OjpnZXRQYXJhbSgpKSBhZnRlciByb3V0ZWQsIFlhZiB3aWxsIHBhc3MgdGhlbSB0byB0aGUgYWN0aW9uIG1ldGhvZCAoc2VlIFlhZl9BY3Rpb25fQWJzdHJhY3Q6OmV4ZWN1dGUoKSkuPC9wPgogKiA8YnIvPgogKiA8Yj5Ob3RlOjwvYj4KICogPHA+VGhlc2UgYXJndW1lbnRzIGFyZSBkaXJlY3RseSBmZXRjaGVkIHdpdGhvdXQgZmlsdGVyaW5nLCBpdCBzaG91bGQgYmUgY2FyZWZ1bGx5IHByb2Nlc3NlZCBiZWZvcmUgdXNlIHRoZW0uPC9wPgogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtY29udHJvbGxlci1hYnN0cmFjdC5waHAKICovCmFic3RyYWN0IGNsYXNzIFlhZl9Db250cm9sbGVyX0Fic3RyYWN0CnsKICAgIC8qKgogICAgICogQHNlZSBZYWZfQWN0aW9uX0Fic3RyYWN0CiAgICAgKiBAdmFyIGFycmF5IFlvdSBjYW4gYWxzbyBkZWZpbmUgYSBhY3Rpb24gbWV0aG9kIGluIGEgc2VwYXJhdGUgUEhQIHNjcmlwdCBieSB1c2luZyB0aGlzIHByb3BlcnR5IGFuZCBZYWZfQWN0aW9uX0Fic3RyYWN0LgogICAgICovCiAgICBwdWJsaWMgJGFjdGlvbnM7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZyBtb2R1bGUgbmFtZQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9tb2R1bGU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZyBjb250cm9sbGVyIG5hbWUKICAgICAqLwogICAgcHJvdGVjdGVkICRfbmFtZTsKCiAgICAvKioKICAgICAqIEB2YXIgWWFmX1JlcXVlc3RfQWJzdHJhY3QgY3VycmVudCByZXF1ZXN0IG9iamVjdAogICAgICovCiAgICBwcm90ZWN0ZWQgJF9yZXF1ZXN0OwoKICAgIC8qKgogICAgICogQHZhciBZYWZfUmVzcG9uc2VfQWJzdHJhY3QgY3VycmVudCByZXNwb25zZSBvYmplY3QKICAgICAqLwogICAgcHJvdGVjdGVkICRfcmVzcG9uc2U7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2ludm9rZV9hcmdzOwoKICAgIC8qKgogICAgICogQHZhciBZYWZfVmlld19JbnRlcmZhY2UgdmlldyBlbmdpbmUgb2JqZWN0CiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3ZpZXc7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5yZW5kZXIucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHBsCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkcGFyYW1ldGVycwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGx8Ym9vbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVuZGVyKCR0cGwsID9hcnJheSAkcGFyYW1ldGVycyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5kaXNwbGF5LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRwbAogICAgICogQHBhcmFtIGFycmF5fG51bGwgJHBhcmFtZXRlcnMKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGRpc3BsYXkoJHRwbCwgP2FycmF5ICRwYXJhbWV0ZXJzID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIHJldHJpZXZlIGN1cnJlbnQgcmVxdWVzdCBvYmplY3QKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5nZXRyZXF1ZXN0LnBocAogICAgICoKICAgICAqIEByZXR1cm4gWWFmX1JlcXVlc3RfQWJzdHJhY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlcXVlc3QoKSB7fQoKICAgIC8qKgogICAgICogcmV0cmlldmUgY3VycmVudCByZXNwb25zZSBvYmplY3QKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5nZXRyZXNwb25zZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIFlhZl9SZXNwb25zZV9BYnN0cmFjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2UoKSB7fQoKICAgIC8qKgogICAgICogZ2V0IHRoZSBjb250cm9sbGVyJ3MgbW9kdWxlIG5hbWUKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5nZXRtb2R1bGVuYW1lLnBocAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNb2R1bGVOYW1lKCkge30KCiAgICAvKioKICAgICAqIHJldHJpZXZlIHZpZXcgZW5naW5lCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbnRyb2xsZXItYWJzdHJhY3QuZ2V0dmlldy5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIFlhZl9WaWV3X0ludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VmlldygpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheXxudWxsICRvcHRpb25zCiAgICAgKgogICAgICogQHJldHVybiBZYWZfUmVzcG9uc2VfQWJzdHJhY3QKICAgICAqIEBkZXByZWNhdGVkIG5vdF9pbXBsZW1lbnRlZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbnRyb2xsZXItYWJzdHJhY3QuaW5pdHZpZXcucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbml0Vmlldyg/YXJyYXkgJG9wdGlvbnMgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbnRyb2xsZXItYWJzdHJhY3Quc2V0dmlld3BhdGgucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdmlld19kaXJlY3RvcnkKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFZpZXdwYXRoKCR2aWV3X2RpcmVjdG9yeSkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb250cm9sbGVyLWFic3RyYWN0LmdldHZpZXdwYXRoLnBocAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWaWV3cGF0aCgpIHt9CgogICAgLyoqCiAgICAgKiA8cD5mb3J3YXJkIGN1cnJlbnQgZXhlY3V0aW9uIHByb2Nlc3MgdG8gb3RoZXIgYWN0aW9uLjwvcD4KICAgICAqIDxici8+CiAgICAgKiA8Yj5Ob3RlOjwvYj4KICAgICAqIDxwPnRoaXMgbWV0aG9kIGRvZXNuJ3Qgc3dpdGNoIHRvIHRoZSBkZXN0aW5hdGlvbiBhY3Rpb24gaW1tZWRpYXRlbHksIGl0IHdpbGwgdGFrZSBwbGFjZSBhZnRlciBjdXJyZW50IGZsb3cgZmluaXNoLjwvcD4KICAgICAqIDxici8+CiAgICAgKiA8Yj5Ob3RpY2UsIHRoZXJlIGFyZSAzIGF2YWlsYWJsZSBtZXRob2Qgc2lnbmF0dXJlczo8L2I+CiAgICAgKiA8cD5ZYWZfQ29udHJvbGxlcl9BYnN0cmFjdDo6Zm9yd2FyZCAoIHN0cmluZyAkbW9kdWxlICwgc3RyaW5nICRjb250cm9sbGVyICwgc3RyaW5nICRhY3Rpb24gWywgYXJyYXkgJHBhcmFtZXRlcnMgXSApPC9wPgogICAgICogPHA+WWFmX0NvbnRyb2xsZXJfQWJzdHJhY3Q6OmZvcndhcmQgKCBzdHJpbmcgJGNvbnRyb2xsZXIgLCBzdHJpbmcgJGFjdGlvbiBbLCBhcnJheSAkcGFyYW1ldGVycyBdICk8L3A+CiAgICAgKiA8cD5ZYWZfQ29udHJvbGxlcl9BYnN0cmFjdDo6Zm9yd2FyZCAoIHN0cmluZyAkYWN0aW9uIFssIGFycmF5ICRwYXJhbWV0ZXJzIF0gKTwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5mb3J3YXJkLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZSBkZXN0aW5hdGlvbiBtb2R1bGUgbmFtZSwgaWYgTlVMTCB3YXMgZ2l2ZW4sIHRoZW4gZGVmYXVsdCBtb2R1bGUgbmFtZSBpcyBhc3N1bWVkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250cm9sbGVyIGRlc3RpbmF0aW9uIGNvbnRyb2xsZXIgbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkYWN0aW9uIGRlc3RpbmF0aW9uIGFjdGlvbiBuYW1lCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkcGFyYW1ldGVycyBjYWxsaW5nIGFyZ3VtZW50cwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCByZXR1cm4gRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9yd2FyZCgkbW9kdWxlLCAkY29udHJvbGxlciA9IG51bGwsICRhY3Rpb24gPSBudWxsLCA/YXJyYXkgJHBhcmFtZXRlcnMgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogcmVkaXJlY3QgdG8gYSBVUkwgYnkgc2VuZGluZyBhIDMwMiBoZWFkZXIKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5yZWRpcmVjdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmwgYSBsb2NhdGlvbiBVUkwKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlZGlyZWN0KCR1cmwpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtY29udHJvbGxlci1hYnN0cmFjdC5nZXRpbnZva2VhcmdzLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEludm9rZUFyZ3MoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbnRyb2xsZXItYWJzdHJhY3QuZ2V0aW52b2tlYXJnLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEludm9rZUFyZygkbmFtZSkge30KCiAgICAvKioKICAgICAqIDxwPllhZl9Db250cm9sbGVyX0Fic3RyYWN0OjpfX2NvbnN0cnVjdCgpIGlzIGZpbmFsLCB3aGljaCBtZWFucyB1c2VycyBjYW4gbm90IG92ZXJyaWRlIGl0LiBidXQgdXNlcnMgY2FuIGRlZmluZSA8Yj5ZYWZfQ29udHJvbGxlcl9BYnN0cmFjdDo6aW5pdCgpPC9iPiwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgY29udHJvbGxlciBvYmplY3QgaXMgaW5zdGFudGlhdGVkLjwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbnRyb2xsZXItYWJzdHJhY3QuaW5pdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluaXQoKSB7fQoKICAgIC8qKgogICAgICogPGI+WWFmX0NvbnRyb2xsZXJfQWJzdHJhY3Q8L2I+OjpfX2NvbnN0cnVjdCgpIGlzIGZpbmFsLCB3aGljaCBtZWFucyBpdCBjYW4gbm90IGJlIG92ZXJyaWRkZW4uIFlvdSBtYXkgd2FudCB0byBzZWUgWWFmX0NvbnRyb2xsZXJfQWJzdHJhY3Q6OmluaXQoKSBpbnN0ZWFkLgogICAgICoKICAgICAqIEBwYXJhbSBZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICogQHBhcmFtIFlhZl9SZXNwb25zZV9BYnN0cmFjdCAkcmVzcG9uc2UKICAgICAqIEBwYXJhbSBZYWZfVmlld19JbnRlcmZhY2UgJHZpZXcKICAgICAqIEBwYXJhbSBhcnJheXxudWxsICRhcmdzCiAgICAgKiBAc2VlIFlhZl9Db250cm9sbGVyX0Fic3RyYWN0Ojppbml0KCkKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb250cm9sbGVyLWFic3RyYWN0LmNvbnN0cnVjdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyZXF1ZXN0LCAkcmVzcG9uc2UsICR2aWV3LCA/YXJyYXkgJGFyZ3MgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbnRyb2xsZXItYWJzdHJhY3QuY2xvbmUucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jbG9uZSgpIHt9Cn0KCi8qKgogKiA8cD5BIGFjdGlvbiBjYW4gYmUgZGVmaW5lZCBpbiBhIHNlcGFyYXRlIGZpbGUgaW4gWWFmKHNlZSBZYWZfQ29udHJvbGxlcl9BYnN0cmFjdCkuIHRoYXQgaXMgYSBhY3Rpb24gbWV0aG9kIGNhbiBhbHNvIGJlIGEgPGI+WWFmX0FjdGlvbl9BYnN0cmFjdDwvYj4gY2xhc3MuPC9QPgogKiA8YnIvPgogKiA8cD5TaW5jZSB0aGVyZSBzaG91bGQgYmUgYSBlbnRyeSBwb2ludCB3aGljaCBjYW4gYmUgY2FsbGVkIGJ5IFlhZiAoYXMgb2YgUEhQIDUuMywgdGhlcmUgaXMgYSBuZXcgbWFnaWMgbWV0aG9kIF9faW52b2tlLCBidXQgWWFmIGlzIG5vdCBvbmx5IHdvcmtzIHdpdGggUEhQIDUuMyssIFlhZiBjaG9vc2UgYW5vdGhlciBtYWdpYyBtZXRob2QgZXhlY3V0ZSksIHlvdSBtdXN0IGltcGxlbWVudCB0aGUgYWJzdHJhY3QgbWV0aG9kIFlhZl9BY3Rpb25fQWJzdHJhY3Q6OmV4ZWN1dGUoKSBpbiB5b3VyIGN1c3RvbSBhY3Rpb24gY2xhc3MuPC9wPgogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtYWN0aW9uLWFic3RyYWN0LnBocAogKi8KYWJzdHJhY3QgY2xhc3MgWWFmX0FjdGlvbl9BYnN0cmFjdCBleHRlbmRzIFlhZl9Db250cm9sbGVyX0Fic3RyYWN0CnsKICAgIC8qKgogICAgICogQHZhciBZYWZfQ29udHJvbGxlcl9BYnN0cmFjdAogICAgICovCiAgICBwcm90ZWN0ZWQgJF9jb250cm9sbGVyOwoKICAgIC8qKgogICAgICogPHA+dXNlciBzaG91bGQgYWx3YXlzIGRlZmluZSB0aGlzIG1ldGhvZCBmb3IgYSBhY3Rpb24sIHRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IG9mIGFuIGFjdGlvbi4gPGI+WWFmX0FjdGlvbl9BYnN0cmFjdDo6ZXhlY3V0ZSgpPC9iPiBtYXkgaGF2ZSBhcmd1bWVudHMuPC9wPgogICAgICogPGJyLz4KICAgICAqIDxiPk5vdGU6PC9iPgogICAgICogPHA+VGhlIHZhbHVlIHJldHJpZXZlZCBmcm9tIHRoZSByZXF1ZXN0IGlzIG5vdCBzYWZlLiB5b3Ugc2hvdWxkIGRvIHNvbWUgZmlsdGVyaW5nIHdvcmsgYmVmb3JlIHlvdSB1c2UgaXQuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWFjdGlvbi1hYnN0cmFjdC5leGVjdXRlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAuLi4kYXJncwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSguLi4kYXJncyk7CgogICAgLyoqCiAgICAgKiByZXRyaWV2ZSBjdXJyZW50IGNvbnRyb2xsZXIgb2JqZWN0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1hY3Rpb24tYWJzdHJhY3QuZ2V0Y29udHJvbGxlci5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIFlhZl9Db250cm9sbGVyX0Fic3RyYWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250cm9sbGVyKCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250cm9sbGVyTmFtZSgpIHt9Cn0KCi8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtY29uZmlnLWFic3RyYWN0LnBocAogKi8KYWJzdHJhY3QgY2xhc3MgWWFmX0NvbmZpZ19BYnN0cmFjdCBpbXBsZW1lbnRzIEl0ZXJhdG9yLCBBcnJheUFjY2VzcywgQ291bnRhYmxlCnsKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9jb25maWcgPSBudWxsOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3JlYWRvbmx5ID0gdHJ1ZTsKCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb25maWctYWJzdHJhY3QuZ2V0LnBocAogICAgICoKICAgICAqIEBwYXJhbSA/c3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXQoP3N0cmluZyAkbmFtZSA9IG51bGwpOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbmZpZy1hYnN0cmFjdC5zZXQucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gc2V0KHN0cmluZyAkbmFtZSwgJHZhbHVlKTogYm9vbDsKCiAgICAvKioKICAgICAqIEBzZWUgQ291bnRhYmxlOjpjb3VudAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCk6IGludCB7fQoKICAgIC8qKgogICAgICogQHNlZSBJdGVyYXRvcjo6cmV3aW5kCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIEl0ZXJhdG9yOjpjdXJyZW50CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkge30KCiAgICAvKioKICAgICAqIEBzZWUgSXRlcmF0b3I6OmtleQogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkge30KCiAgICAvKioKICAgICAqIEBzZWUgSXRlcmF0b3I6Om5leHQKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIEl0ZXJhdG9yOjp2YWxpZAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpOiBib29sIHt9CgogICAgLyoqIEByZXR1cm4gYm9vbCAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIHJlYWRvbmx5KCk6IGJvb2w7CgogICAgLyoqIEByZXR1cm4gYXJyYXkgKi8KICAgIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk6IGFycmF5OwoKICAgIC8qKgogICAgICogQHNlZSBBcnJheUFjY2Vzczo6b2Zmc2V0U2V0CiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9mZnNldAogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHNlZSBBcnJheUFjY2Vzczo6b2Zmc2V0VW5zZXQKICAgICAqIEBwYXJhbSBtaXhlZCAkbmFtZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCgkbmFtZSk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1jb25maWctYWJzdHJhY3QucmVhZG9ubHkucGhwCiAgICAgKgogICAgICogQHNlZSBBcnJheUFjY2Vzczo6b2Zmc2V0RXhpc3RzCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG5hbWUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRuYW1lKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLWNvbmZpZy1hYnN0cmFjdC50b2FycmF5LnBocAogICAgICoKICAgICAqIEBzZWUgQXJyYXlBY2Nlc3M6Om9mZnNldEdldAogICAgICogQHBhcmFtIG1peGVkICRuYW1lCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldChzdHJpbmcgJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoc3RyaW5nICRuYW1lKTogYm9vbCB7fQp9CgovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLXJlcXVlc3QtYWJzdHJhY3QucGhwCiAqLwphYnN0cmFjdCBjbGFzcyBZYWZfUmVxdWVzdF9BYnN0cmFjdAp7CiAgICBwdWJsaWMgY29uc3QgU0NIRU1FX0hUVFAgPSAnaHR0cCc7CiAgICBwdWJsaWMgY29uc3QgU0NIRU1FX0hUVFBTID0gJ2h0dHBzJzsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyAkbW9kdWxlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRjb250cm9sbGVyOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRhY3Rpb247CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJG1ldGhvZDsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRwYXJhbXM7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJGxhbmd1YWdlOwoKICAgIC8qKgogICAgICogQHZhciBZYWZfRXhjZXB0aW9uCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2V4Y2VwdGlvbjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2Jhc2VfdXJpID0gIiI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJHVyaSA9ICIiOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRkaXNwYXRjaGVkID0gIiI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJHJvdXRlZCA9ICIiOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuaXNnZXQucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0dldCgpIHt9CgogICAgLyoqIEByZXR1cm4gYm9vbCAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzRGVsZXRlKCkge30KCiAgICAvKiogQHJldHVybiBib29sICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQYXRjaCgpIHt9CgogICAgLyoqIEByZXR1cm4gc3RyaW5nfG51bGwgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSYXcoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBZYWZfUmVxdWVzdF9BYnN0cmFjdHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhclBhcmFtcygpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5pc3Bvc3QucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1Bvc3QoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuaXNwdXQucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1B1dCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5pc2hlYWQucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0hlYWQoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuaXNvcHRpb25zLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNPcHRpb25zKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LmlzY2xpLnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNDbGkoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuaXNkaXNwYWNoZWQucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBpc0Rpc3BhdGNoZWQoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuaXNyb3V0ZWQucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBpc1JvdXRlZCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5pc3htbGh0dHByZXF1ZXN0LnBocAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNYbWxIdHRwUmVxdWVzdCgpIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSAkX1NFUlZFUiB2YXJpYWJsZQogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LmdldHNlcnZlci5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSB2YXJpYWJsZSBuYW1lLCBpZiBub3QgcHJvdmlkZWQgcmV0dXJucyBhbGwKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlZmF1bHQgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgcHJvdmlkZSwgdGhpcyB3aWxsIGJlIHJldHVybmVkIGlmIHRoZSB2YXJpYWJsZSBjYW4gbm90IGJlIGZvdW5kCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyKCRuYW1lID0gbnVsbCwgJGRlZmF1bHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgJF9FTlYgdmFyaWFibGUKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5nZXRlbnYucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSB0aGUgdmFyaWFibGUgbmFtZSwgaWYgbm90IHByb3ZpZGVkIHJldHVybnMgYWxsCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0IGlmIHRoaXMgcGFyYW1ldGVyIGlzIHByb3ZpZGUsIHRoaXMgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgdmFyaWFibGUgY2FuIG5vdCBiZSBmb3VuZAogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVudigkbmFtZSA9IG51bGwsICRkZWZhdWx0ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LmdldHBhcmFtLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBtaXhlZCAkZGVmYXVsdAogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcmFtKHN0cmluZyAkbmFtZSwgJGRlZmF1bHQgPSAnJykge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LmdldHBhcmFtcy5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXJhbXMoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuZ2V0ZXhjZXB0aW9uLnBocAogICAgICoKICAgICAqIEByZXR1cm4gWWFmX0V4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXhjZXB0aW9uKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LmdldG1vdWRsZW5hbWUucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZHVsZU5hbWUoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuZ2V0Y29udHJvbGxlcm5hbWUucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRyb2xsZXJOYW1lKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LmdldGFjdGlvbm5hbWUucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFjdGlvbk5hbWUoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3Quc2V0cGFyYW0ucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAkbmFtZSB0aGUgdmFyaWFibGUgbmFtZSwgb3IgYW4gYXJyYXkgb2Yga2V5PT52YWx1ZSBwYWlycwogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIFlhZl9SZXF1ZXN0X0Fic3RyYWN0fGJvb2x8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGFyYW0oJG5hbWUsICR2YWx1ZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5zZXRtb2R1bGVuYW1lLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZQogICAgICogQHBhcmFtIGJvb2wgJGZvcm1hdF9uYW1lCiAgICAgKgogICAgICogQHJldHVybiBZYWZfUmVxdWVzdF9BYnN0cmFjdHxib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNb2R1bGVOYW1lKCRtb2R1bGUsICRmb3JtYXRfbmFtZSA9IHRydWUpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5zZXRjb250cm9sbGVybmFtZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250cm9sbGVyCiAgICAgKiBAcGFyYW0gYm9vbCAkZm9ybWF0X25hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIFlhZl9SZXF1ZXN0X0Fic3RyYWN0fGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbnRyb2xsZXJOYW1lKCRjb250cm9sbGVyLCAkZm9ybWF0X25hbWUgPSB0cnVlKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3Quc2V0YWN0aW9ubmFtZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhY3Rpb24KICAgICAqIEBwYXJhbSBib29sICRmb3JtYXRfbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gWWFmX1JlcXVlc3RfQWJzdHJhY3R8Ym9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QWN0aW9uTmFtZSgkYWN0aW9uLCAkZm9ybWF0X25hbWUgPSB0cnVlKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuZ2V0bWV0aG9kLnBocAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRob2QoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuZ2V0bGFuZ3VhZ2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhbmd1YWdlKCkge30KCiAgICAvKioKICAgICAqIDxwPlNldCBiYXNlIFVSSSwgYmFzZSBVUkkgaXMgdXNlZCB3aGVuIGRvaW5nIHJvdXRpbmcsIGluIHJvdXRpbmcgcGhhc2UgcmVxdWVzdCBVUkkgaXMgdXNlZCB0byByb3V0ZSBhIHJlcXVlc3QsIHdoaWxlIGJhc2UgVVJJIGlzIHVzZWQgdG8gc2tpcCB0aGUgbGVhZGluZyBwYXJ0KGJhc2UgVVJJKSBvZiByZXF1ZXN0IFVSSS4gVGhhdCBpcywgaWYgY29tZXMgYSByZXF1ZXN0IHdpdGggcmVxdWVzdCBVUkkgYS9iL2MsIHRoZW4gaWYgeW91IHNldCBiYXNlIFVSSSB0byAiYS9iIiwgb25seSAiL2MiIHdpbGwgYmUgdXNlZCBpbiByb3V0aW5nIHBoYXNlLjwvcD4KICAgICAqIDxici8+CiAgICAgKiA8Yj5Ob3RlOjwvYj4KICAgICAqIDxwPmdlbmVyYWxseSwgeW91IGRvbid0IG5lZWQgdG8gc2V0IHRoaXMsIFlhZiB3aWxsIGRldGVybWluZSBpdCBhdXRvbWF0aWNhbGx5LjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5zZXRiYXNldXJpLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVyaSBiYXNlIFVSSQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QmFzZVVyaSgkdXJpKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3QtYWJzdHJhY3QuZ2V0YmFzZXVyaS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QmFzZVVyaSgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5nZXRyZXF1ZXN0dXJpLnBocAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0VXJpKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVyaSByZXF1ZXN0IFVSSQogICAgICogQHJldHVybiBZYWZfUmVxdWVzdF9BYnN0cmFjdHxudWxsCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1hYnN0cmFjdC5zZXRyZXF1ZXN0dXJpLnBocAogICAgICoKICAgICAqIEBzaW5jZSAyLjEuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVxdWVzdFVyaSgkdXJpKSB7fQoKICAgIC8qKgogICAgICogU2V0IHJlcXVlc3QgYXMgZGlzcGF0Y2hlZAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LnNldGRpc3BhdGNoZWQucGhwCiAgICAgKiBAcGFyYW0gYm9vbCAkZGlzcGF0Y2hlZAogICAgICogQHJldHVybiBZYWZfUmVxdWVzdF9BYnN0cmFjdHxudWxsCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzZXREaXNwYXRjaGVkKCRkaXNwYXRjaGVkID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFNldCByZXF1ZXN0IGFzIHJvdXRlZAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LWFic3RyYWN0LnNldHJvdXRlZC5waHAKICAgICAqIEBwYXJhbSBib29sICRmbGFnCiAgICAgKiBAcmV0dXJuIFlhZl9SZXF1ZXN0X0Fic3RyYWN0fG51bGwKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHNldFJvdXRlZCgkZmxhZyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRlZmF1bHQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCgkbmFtZSA9IG51bGwsICRkZWZhdWx0ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBtaXhlZCAkZGVmYXVsdAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmlsZXMoJG5hbWUgPSBudWxsLCAkZGVmYXVsdCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRlZmF1bHQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvb2tpZSgkbmFtZSA9IG51bGwsICRkZWZhdWx0ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBtaXhlZCAkZGVmYXVsdAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UG9zdChzdHJpbmcgJG5hbWUgPSAnJywgJGRlZmF1bHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIG1peGVkICRkZWZhdWx0CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0KCRuYW1lID0gbnVsbCwgJGRlZmF1bHQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIG1peGVkICRkZWZhdWx0CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRRdWVyeSgkbmFtZSA9IG51bGwsICRkZWZhdWx0ID0gbnVsbCkge30KfQoKLyoqCiAqIDxwPlBsdWdpbnMgYWxsb3cgZm9yIGVhc3kgZXh0ZW5zaWJpbGl0eSBhbmQgY3VzdG9taXphdGlvbiBvZiB0aGUgZnJhbWV3b3JrLjwvcD4KICogPGJyLz4KICogPHA+UGx1Z2lucyBhcmUgY2xhc3Nlcy4gVGhlIGFjdHVhbCBjbGFzcyBkZWZpbml0aW9uIHdpbGwgdmFyeSBiYXNlZCBvbiB0aGUgY29tcG9uZW50IC0tIHlvdSBtYXkgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UsIGJ1dCB0aGUgZmFjdCByZW1haW5zIHRoYXQgdGhlIHBsdWdpbiBpcyBpdHNlbGYgYSBjbGFzcy48L3A+CiAqIDxici8+CiAqIDxwPkEgcGx1Z2luIGNvdWxkIGJlIGxvYWRlZCBpbnRvIFlhZiBieSB1c2luZyBZYWZfRGlzcGF0Y2hlcjo6cmVnaXN0ZXJQbHVnaW4oKSwgYWZ0ZXIgcmVnaXN0ZXJlZCwgQWxsIHRoZSBtZXRob2RzIHdoaWNoIHRoZSBwbHVnaW4gaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoaXMgaW50ZXJmYWNlLCB3aWxsIGJlIGNhbGxlZCBhdCB0aGUgcHJvcGVyIHRpbWUuPC9wPgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtcGx1Z2luLWFic3RyYWN0LnBocAogKi8KYWJzdHJhY3QgY2xhc3MgWWFmX1BsdWdpbl9BYnN0cmFjdAp7CiAgICAvKioKICAgICAqIFRoaXMgaXMgdGhlIGVhcmxpZXN0IGhvb2sgaW4gWWFmIHBsdWdpbiBob29rIHN5c3RlbSwgaWYgYSBjdXN0b20gcGx1Z2luIGltcGxlbWVudCB0aGlzIG1ldGhvZCwgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgcm91dGluZyBhIHJlcXVlc3QuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXBsdWdpbi1hYnN0cmFjdC5yb3V0ZXJzdGFydHVwLnBocAogICAgICoKICAgICAqIEBwYXJhbSBZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICogQHBhcmFtIFlhZl9SZXNwb25zZV9BYnN0cmFjdCAkcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm91dGVyU3RhcnR1cChZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCwgWWFmX1Jlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZSkge30KCiAgICAvKioKICAgICAqIFRoaXMgaG9vayB3aWxsIGJlIHRyaWdnZWQgYWZ0ZXIgdGhlIHJvdXRlIHByb2Nlc3MgZmluaXNoZWQsIHRoaXMgaG9vayBpcyB1c3VhbGx5IHVzZWQgZm9yIGxvZ2luIGNoZWNrLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1wbHVnaW4tYWJzdHJhY3Qucm91dGVyc2h1dGRvd24ucGhwCiAgICAgKgogICAgICogQHBhcmFtIFlhZl9SZXF1ZXN0X0Fic3RyYWN0ICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gWWFmX1Jlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb3V0ZXJTaHV0ZG93bihZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCwgWWFmX1Jlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZSkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1wbHVnaW4tYWJzdHJhY3QuZGlzcGF0Y2hsb29wc3RhcnR1cC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gWWFmX1JlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QKICAgICAqIEBwYXJhbSBZYWZfUmVzcG9uc2VfQWJzdHJhY3QgJHJlc3BvbnNlCiAgICAgKgogICAgICogQHJldHVybiBib29sIHRydWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc3BhdGNoTG9vcFN0YXJ0dXAoWWFmX1JlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QsIFlhZl9SZXNwb25zZV9BYnN0cmFjdCAkcmVzcG9uc2UpIHt9CgogICAgLyoqCiAgICAgKiBUaGlzIGlzIHRoZSBsYXRlc3QgaG9vayBpbiBZYWYgcGx1Z2luIGhvb2sgc3lzdGVtLCBpZiBhIGN1c3RvbSBwbHVnaW4gaW1wbGVtZW50IHRoaXMgbWV0aG9kLCB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBkaXNwYXRjaCBsb29wIGZpbmlzaGVkLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1wbHVnaW4tYWJzdHJhY3QuZGlzcGF0Y2hsb29wc2h1dGRvd24ucGhwCiAgICAgKgogICAgICogQHBhcmFtIFlhZl9SZXF1ZXN0X0Fic3RyYWN0ICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gWWFmX1Jlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwYXRjaExvb3BTaHV0ZG93bihZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCwgWWFmX1Jlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZSkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1wbHVnaW4tYWJzdHJhY3QucHJlZGlzcGF0Y2gucGhwCiAgICAgKgogICAgICogQHBhcmFtIFlhZl9SZXF1ZXN0X0Fic3RyYWN0ICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gWWFmX1Jlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVEaXNwYXRjaChZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdCwgWWFmX1Jlc3BvbnNlX0Fic3RyYWN0ICRyZXNwb25zZSkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1wbHVnaW4tYWJzdHJhY3QucG9zdGRpc3BhdGNoLnBocAogICAgICoKICAgICAqIEBwYXJhbSBZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICogQHBhcmFtIFlhZl9SZXNwb25zZV9BYnN0cmFjdCAkcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9zdERpc3BhdGNoKFlhZl9SZXF1ZXN0X0Fic3RyYWN0ICRyZXF1ZXN0LCBZYWZfUmVzcG9uc2VfQWJzdHJhY3QgJHJlc3BvbnNlKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXBsdWdpbi1hYnN0cmFjdC5wcmVyZXNwb25zZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gWWFmX1JlcXVlc3RfQWJzdHJhY3QgJHJlcXVlc3QKICAgICAqIEBwYXJhbSBZYWZfUmVzcG9uc2VfQWJzdHJhY3QgJHJlc3BvbnNlCiAgICAgKgogICAgICogQHJldHVybiBib29sIHRydWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZVJlc3BvbnNlKFlhZl9SZXF1ZXN0X0Fic3RyYWN0ICRyZXF1ZXN0LCBZYWZfUmVzcG9uc2VfQWJzdHJhY3QgJHJlc3BvbnNlKSB7fQp9CgovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLXJlc3BvbnNlLWFic3RyYWN0LnBocAogKi8KYWJzdHJhY3QgY2xhc3MgWWFmX1Jlc3BvbnNlX0Fic3RyYWN0CnsKICAgIHB1YmxpYyBjb25zdCBERUZBVUxUX0JPRFkgPSAiY29udGVudCI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9oZWFkZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9ib2R5OwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3NlbmRoZWFkZXI7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3QuY29uc3RydWN0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlc3BvbnNlLWFic3RyYWN0LmRlc3RydWN0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3QuY2xvbmUucGhwCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jbG9uZSgpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3QudG9zdHJpbmcucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkge30KCiAgICAvKioKICAgICAqIFNlbmQgcmVzcG9uc2UKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXNwb25zZS1hYnN0cmFjdC5yZXNwb25zZS5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc3BvbnNlKCkge30KCiAgICAvKioKICAgICAqIFNldCByZXNwb25zZSBoZWFkZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXNwb25zZS1hYnN0cmFjdC5zZXRoZWFkZXIucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSBib29sICRyZXAKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEhlYWRlcihzdHJpbmcgJG5hbWUsIHN0cmluZyAkdmFsdWUsIGJvb2wgJHJlcCA9IGZhbHNlKSB7fQoKICAgIC8qKgogICAgICogU2V0IGNvbnRlbnQgdG8gcmVzcG9uc2UKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3Quc2V0Ym9keS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRib2R5IGNvbnRlbnQgc3RyaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPnRoZSBjb250ZW50IGtleSwgeW91IGNhbiBzZXQgYSBjb250ZW50IHdpdGggYSBrZXksIGlmIHlvdSBkb24ndCBzcGVjaWZpYywgdGhlbiBZYWZfUmVzcG9uc2VfQWJzdHJhY3Q6OkRFRkFVTFRfQk9EWSB3aWxsIGJlIHVzZWQ8L3A+CiAgICAgKiA8YnIvPgogICAgICogPGI+Tm90ZTo8L2I+CiAgICAgKiA8cD50aGlzIHBhcmFtZXRlciBpcyBpbnRyb2R1Y2VkIGFzIG9mIDIuMi4wPC9wPgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Qm9keSgkYm9keSwgJG5hbWUgPSBzZWxmOjpERUZBVUxUX0JPRFkpIHt9CgogICAgLyoqCiAgICAgKiBhcHBlbmQgYSBjb250ZW50IHRvIGEgZXhpc3RzIGNvbnRlbnQgYmxvY2sKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3QuYXBwZW5kYm9keS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRib2R5IGNvbnRlbnQgc3RyaW5nCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPnRoZSBjb250ZW50IGtleSwgeW91IGNhbiBzZXQgYSBjb250ZW50IHdpdGggYSBrZXksIGlmIHlvdSBkb24ndCBzcGVjaWZpYywgdGhlbiBZYWZfUmVzcG9uc2VfQWJzdHJhY3Q6OkRFRkFVTFRfQk9EWSB3aWxsIGJlIHVzZWQ8L3A+CiAgICAgKiA8YnIvPgogICAgICogPGI+Tm90ZTo8L2I+CiAgICAgKiA8cD50aGlzIHBhcmFtZXRlciBpcyBpbnRyb2R1Y2VkIGFzIG9mIDIuMi4wPC9wPgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kQm9keSgkYm9keSwgJG5hbWUgPSBzZWxmOjpERUZBVUxUX0JPRFkpIHt9CgogICAgLyoqCiAgICAgKiBwcmVwZW5kIGEgY29udGVudCB0byBhIGV4aXN0cyBjb250ZW50IGJsb2NrCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlc3BvbnNlLWFic3RyYWN0LnByZXBlbmRib2R5LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJvZHkgY29udGVudCBzdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+dGhlIGNvbnRlbnQga2V5LCB5b3UgY2FuIHNldCBhIGNvbnRlbnQgd2l0aCBhIGtleSwgaWYgeW91IGRvbid0IHNwZWNpZmljLCB0aGVuIFlhZl9SZXNwb25zZV9BYnN0cmFjdDo6REVGQVVMVF9CT0RZIHdpbGwgYmUgdXNlZDwvcD4KICAgICAqIDxici8+CiAgICAgKiA8Yj5Ob3RlOjwvYj4KICAgICAqIDxwPnRoaXMgcGFyYW1ldGVyIGlzIGludHJvZHVjZWQgYXMgb2YgMi4yLjA8L3A+CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVwZW5kQm9keSgkYm9keSwgJG5hbWUgPSBzZWxmOjpERUZBVUxUX0JPRFkpIHt9CgogICAgLyoqCiAgICAgKiBDbGVhciBleGlzdGluZyBjb250ZW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlc3BvbnNlLWFic3RyYWN0LmNsZWFyYm9keS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPnRoZSBjb250ZW50IGtleSwgeW91IGNhbiBzZXQgYSBjb250ZW50IHdpdGggYSBrZXksIGlmIHlvdSBkb24ndCBzcGVjaWZpYywgdGhlbiBZYWZfUmVzcG9uc2VfQWJzdHJhY3Q6OkRFRkFVTFRfQk9EWSB3aWxsIGJlIHVzZWQ8L3A+CiAgICAgKiA8YnIvPgogICAgICogPGI+Tm90ZTo8L2I+CiAgICAgKiA8cD50aGlzIHBhcmFtZXRlciBpcyBpbnRyb2R1Y2VkIGFzIG9mIDIuMi4wPC9wPgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXJCb2R5KCRuYW1lID0gc2VsZjo6REVGQVVMVF9CT0RZKSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgYW4gZXhpc3RpbmcgY29udGVudAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXNwb25zZS1hYnN0cmFjdC5nZXRib2R5LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbmFtZSA8cD50aGUgY29udGVudCBrZXksIGlmIHlvdSBkb24ndCBzcGVjaWZpYywgdGhlbiBZYWZfUmVzcG9uc2VfQWJzdHJhY3Q6OkRFRkFVTFRfQk9EWSB3aWxsIGJlIHVzZWQuIGlmIHlvdSBwYXNzIGluIGEgTlVMTCwgdGhlbiBhbGwgY29udGVudHMgd2lsbCBiZSByZXR1cm5lZCBhcyBhIGFycmF5PC9wPgogICAgICogPGJyLz4KICAgICAqIDxiPk5vdGU6PC9iPgogICAgICogPHA+dGhpcyBwYXJhbWV0ZXIgaXMgaW50cm9kdWNlZCBhcyBvZiAyLjIuMDwvcD4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRCb2R5KCRuYW1lID0gc2VsZjo6REVGQVVMVF9CT0RZKSB7fQp9CgovKioKICogWWFmIHByb3ZpZGVzIGEgYWJpbGl0eSBmb3IgZGV2ZWxvcGVycyB0byB1c2UgY3VzdG9tIHZpZXcgZW5naW5lIGluc3RlYWQgb2YgYnVpbGQtaW4gZW5naW5lIHdoaWNoIGlzIFlhZl9WaWV3X1NpbXBsZS4gVGhlcmUgaXMgYSBleGFtcGxlIHRvIGV4cGxhaW4gaG93IHRvIGRvIHRoaXMsIHBsZWFzZSBzZWUgWWFmX0Rpc3BhdGNoZXI6OnNldFZpZXcoKQogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtdmlldy1pbnRlcmZhY2UucGhwCiAqLwppbnRlcmZhY2UgWWFmX1ZpZXdfSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQXNzaWduIHZhbHVlcyB0byBWaWV3IGVuZ2luZSwgdGhlbiB0aGUgdmFsdWUgY2FuIGFjY2VzcyBkaXJlY3RseSBieSBuYW1lIGluIHRlbXBsYXRlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LWludGVyZmFjZS5hc3NpZ24ucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAkbmFtZQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHJldHVybiBZYWZfVmlld19JbnRlcmZhY2V8Ym9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzaWduKCRuYW1lLCAkdmFsdWUgPSAnJyk7CgogICAgLyoqCiAgICAgKiBSZW5kZXIgYSB0ZW1wbGF0ZSBhbmQgb3V0cHV0IHRoZSByZXN1bHQgaW1tZWRpYXRlbHkuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXZpZXctaW50ZXJmYWNlLmRpc3BsYXkucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHBsCiAgICAgKiBAcGFyYW0gYXJyYXkgJHRwbF92YXJzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc3BsYXkoJHRwbCwgJHRwbF92YXJzID0gbnVsbCk7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtdmlldy1pbnRlcmZhY2UuZ2V0c2NyaXB0cGF0aC5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NyaXB0UGF0aCgpOwoKICAgIC8qKgogICAgICogUmVuZGVyIGEgdGVtcGxhdGUgYW5kIHJldHVybiB0aGUgcmVzdWx0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LWludGVyZmFjZS5yZW5kZXIucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHBsCiAgICAgKiBAcGFyYW0gYXJyYXkgJHRwbF92YXJzCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW5kZXIoJHRwbCwgJHRwbF92YXJzID0gbnVsbCk7CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHRlbXBsYXRlcyBiYXNlIGRpcmVjdG9yeSwgdGhpcyBpcyB1c3VhbGx5IGNhbGxlZCBieSBZYWZfRGlzcGF0Y2hlcgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LWludGVyZmFjZS5zZXRzY3JpcHRwYXRoLnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRlbXBsYXRlX2RpciBBbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB0ZW1wbGF0ZSBkaXJlY3RvcnksIGJ5IGRlZmF1bHQsIFlhZl9EaXNwYXRjaGVyIHVzZSBhcHBsaWNhdGlvbi5kaXJlY3RvcnkgLiAiL3ZpZXdzIiBhcyB0aGlzIHBhcmFtZXRlci4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2NyaXB0UGF0aCgkdGVtcGxhdGVfZGlyKTsKfQoKLyoqCiAqIDxiPllhZl9Sb3V0ZV9JbnRlcmZhY2U8L2I+IHVzZWQgZm9yIGRldmVsb3BlciBkZWZpbmVkIHRoZWlyIGN1c3RvbSByb3V0ZS4KICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLXJvdXRlLWludGVyZmFjZS5waHAKICovCmludGVyZmFjZSBZYWZfUm91dGVfSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogPHA+PGI+WWFmX1JvdXRlX0ludGVyZmFjZTo6cm91dGUoKTwvYj4gaXMgdGhlIG9ubHkgbWV0aG9kIHRoYXQgYSBjdXN0b20gcm91dGUgc2hvdWxkIGltcGxlbWVudC48L3A+PGJyLz4KICAgICAqIDxwPmlmIHRoaXMgbWV0aG9kIHJldHVybiBUUlVFLCB0aGVuIHRoZSByb3V0ZSBwcm9jZXNzIHdpbGwgYmUgZW5kLiBvdGhlcndpc2UsIFlhZl9Sb3V0ZXIgd2lsbCBjYWxsIG5leHQgcm91dGUgaW4gdGhlIHJvdXRlIHN0YWNrIHRvIHJvdXRlIHJlcXVlc3QuPC9wPjxici8+CiAgICAgKiA8cD5UaGlzIG1ldGhvZCB3b3VsZCBzZXQgdGhlIHJvdXRlIHJlc3VsdCB0byB0aGUgcGFyYW1ldGVyIHJlcXVlc3QsIGJ5IGNhbGxpbmcgWWFmX1JlcXVlc3RfQWJzdHJhY3Q6OnNldENvbnRyb2xsZXJOYW1lKCksIFlhZl9SZXF1ZXN0X0Fic3RyYWN0OjpzZXRBY3Rpb25OYW1lKCkgYW5kIFlhZl9SZXF1ZXN0X0Fic3RyYWN0OjpzZXRNb2R1bGVOYW1lKCkuPC9wPjxici8+CiAgICAgKiA8cD5UaGlzIG1ldGhvZCBzaG91bGQgYWxzbyBjYWxsIFlhZl9SZXF1ZXN0X0Fic3RyYWN0OjpzZXRSb3V0ZWQoKSB0byBtYWtlIHRoZSByZXF1ZXN0IHJvdXRlZCBhdCBsYXN0LjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtaW50ZXJmYWNlLnJvdXRlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb3V0ZSgkcmVxdWVzdCk7CgogICAgLyoqCiAgICAgKiA8cD48Yj5ZYWZfUm91dGVfSW50ZXJmYWNlOjphc3NlbWJsZSgpPC9iPiAtIGFzc2VtYmxlIGEgcmVxdWVzdDwvcD48YnIvPgogICAgICogPHA+dGhpcyBtZXRob2QgcmV0dXJucyBhIHVybCBhY2NvcmRpbmcgdG8gdGhlIGFyZ3VtZW50IGluZm8sIGFuZCBhcHBlbmQgcXVlcnkgc3RyaW5ncyB0byB0aGUgdXJsIGFjY29yZGluZyB0byB0aGUgYXJndW1lbnQgcXVlcnkuPC9wPgogICAgICogPHA+YSByb3V0ZSBzaG91bGQgaW1wbGVtZW50IHRoaXMgbWV0aG9kIGFjY29yZGluZyB0byBpdHMgb3duIHJvdXRlIHJ1bGVzLCBhbmQgZG8gYSByZXZlcnNlIHByb2dyZXNzLjwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtaW50ZXJmYWNlLmFzc2VtYmxlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkaW5mbwogICAgICogQHBhcmFtIGFycmF5fG51bGwgJHF1ZXJ5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFzc2VtYmxlKGFycmF5ICRpbmZvLCA/YXJyYXkgJHF1ZXJ5ID0gbnVsbCk7Cn0KCi8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtZXhjZXB0aW9uLnBocAogKi8KY2xhc3MgWWFmX0V4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkbWVzc2FnZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkY29kZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkcHJldmlvdXM7Cn0KCmNsYXNzIFlhZl9SZXNwb25zZV9IdHRwIGV4dGVuZHMgWWFmX1Jlc3BvbnNlX0Fic3RyYWN0CnsKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJvdGVjdGVkICRfcmVzcG9uc2VfY29kZSA9IDA7CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2Nsb25lKCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXNwb25zZS1hYnN0cmFjdC5zZXRoZWFkZXIucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqIEBwYXJhbSBib29sICRyZXAKICAgICAqIEBwYXJhbSBpbnQgJHJlc3BvbnNlX2NvZGUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEhlYWRlcihzdHJpbmcgJG5hbWUgPSAnJywgc3RyaW5nICR2YWx1ZSA9ICcnLCBib29sICRyZXAgPSBmYWxzZSwgaW50ICRyZXNwb25zZV9jb2RlID0gMCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXNwb25zZS1hYnN0cmFjdC5zZXRhbGxoZWFkZXJzLnBocAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkaGVhZGVycwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBbGxIZWFkZXJzKCRoZWFkZXJzKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlc3BvbnNlLWFic3RyYWN0LmdldGhlYWRlci5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVyKCRuYW1lID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXNwb25zZS1hYnN0cmFjdC5jbGVhcmhlYWRlcnMucGhwCiAgICAgKgogICAgICoKICAgICAqIEByZXR1cm4gWWFmX1Jlc3BvbnNlX0Fic3RyYWN0fGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhckhlYWRlcnMoKSB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlc3BvbnNlLWFic3RyYWN0LnNldHJlZGlyZWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVybAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UmVkaXJlY3QoJHVybCkge30KCiAgICAvKioKICAgICAqIHNlbmQgcmVzcG9uc2UKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVzcG9uc2UtYWJzdHJhY3QucmVzcG9uc2UucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNwb25zZSgpIHt9Cn0KCmNsYXNzIFlhZl9SZXNwb25zZV9DbGkgZXh0ZW5kcyBZYWZfUmVzcG9uc2VfQWJzdHJhY3QKewogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2Nsb25lKCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkge30KfQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1yZXF1ZXN0LWh0dHAucGhwCiAqLwpjbGFzcyBZYWZfUmVxdWVzdF9IdHRwIGV4dGVuZHMgWWFmX1JlcXVlc3RfQWJzdHJhY3QKewogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcmVxdWVzdC1odHRwLmNvbnN0cnVjdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZXF1ZXN0X3VyaQogICAgICogQHBhcmFtIHN0cmluZyAkYmFzZV91cmkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyZXF1ZXN0X3VyaSA9ICcnLCAkYmFzZV91cmkgPSAnJykge30KfQoKLyoqCiAqIDxiPllhZl9SZXF1ZXN0X1NpbXBsZTwvYj4gaXMgcGFydGljdWxhcmx5IHVzZWQgZm9yIHRlc3QgcHVycG9zZS4gaWUuIHNpbXVsYXRlIGEgc3BhY2lhbCByZXF1ZXN0IHVuZGVyIENMSSBtb2RlLgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtcmVxdWVzdC1zaW1wbGUucGhwCiAqLwpjbGFzcyBZYWZfUmVxdWVzdF9TaW1wbGUgZXh0ZW5kcyBZYWZfUmVxdWVzdF9BYnN0cmFjdAp7CiAgICAvKioKICAgICAqIENoZWNrIHRoZSByZXF1ZXN0IHdoZXRoZXIgaXQgaXMgYSBBamF4IFJlcXVlc3QKICAgICAqCiAgICAgKiA8YnIvPgogICAgICogPGI+Tm90ZTo8L2I+CiAgICAgKiA8cD4KICAgICAqIFRoaXMgbWV0aG9kIGRlcGVuZHMgb24gdGhlIHJlcXVlc3QgaGVhZGVyOiBIVFRQX1hfUkVRVUVTVEVEX1dJVEgsIHNvbWUgSmF2YXNjcmlwdCBsaWJyYXJ5IGRvZXNuJ3Qgc2V0IHRoaXMgaGVhZGVyIHdoaWxlIGRvaW5nIEFqYXggcmVxdWVzdAogICAgICogPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJlcXVlc3Qtc2ltcGxlLmlzeG1saHR0cHJlcXVlc3QucGhwCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1htbEh0dHBSZXF1ZXN0KCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yZXF1ZXN0LXNpbXBsZS5jb25zdHJ1Y3QucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWV0aG9kCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtb2R1bGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnRyb2xsZXIKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFjdGlvbgogICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMKICAgICAqCiAgICAgKiBAdGhyb3dzIFlhZl9FeGNlcHRpb25fVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbWV0aG9kID0gJycsICRtb2R1bGUgPSAnJywgJGNvbnRyb2xsZXIgPSAnJywgJGFjdGlvbiA9ICcnLCAkcGFyYW1zID0gbnVsbCkge30KfQoKLyoqCiAqIDxwPllhZl9Db25maWdfSW5pIGVuYWJsZXMgZGV2ZWxvcGVycyB0byBzdG9yZSBjb25maWd1cmF0aW9uIGRhdGEgaW4gYSBmYW1pbGlhciBJTkkgZm9ybWF0IGFuZCByZWFkIHRoZW0gaW4gdGhlIGFwcGxpY2F0aW9uIGJ5IHVzaW5nIG5lc3RlZCBvYmplY3QgcHJvcGVydHkgc3ludGF4LiBUaGUgSU5JIGZvcm1hdCBpcyBzcGVjaWFsaXplZCB0byBwcm92aWRlIGJvdGggdGhlIGFiaWxpdHkgdG8gaGF2ZSBhIGhpZXJhcmNoeSBvZiBjb25maWd1cmF0aW9uIGRhdGEga2V5cyBhbmQgaW5oZXJpdGFuY2UgYmV0d2VlbiBjb25maWd1cmF0aW9uIGRhdGEgc2VjdGlvbnMuIENvbmZpZ3VyYXRpb24gZGF0YSBoaWVyYXJjaGllcyBhcmUgc3VwcG9ydGVkIGJ5IHNlcGFyYXRpbmcgdGhlIGtleXMgd2l0aCB0aGUgZG90IG9yIHBlcmlvZCBjaGFyYWN0ZXIgKCIuIikuIEEgc2VjdGlvbiBtYXkgZXh0ZW5kIG9yIGluaGVyaXQgZnJvbSBhbm90aGVyIHNlY3Rpb24gYnkgZm9sbG93aW5nIHRoZSBzZWN0aW9uIG5hbWUgd2l0aCBhIGNvbG9uIGNoYXJhY3RlciAoIjoiKSBhbmQgdGhlIG5hbWUgb2YgdGhlIHNlY3Rpb24gZnJvbSB3aGljaCBkYXRhIGFyZSB0byBiZSBpbmhlcml0ZWQuPC9wPjxici8+CiAqIDxiPk5vdGU6PC9iPgogKiA8cD5ZYWZfQ29uZmlnX0luaSB1dGlsaXplcyB0aGUgwrsgcGFyc2VfaW5pX2ZpbGUoKSBQSFAgZnVuY3Rpb24uIFBsZWFzZSByZXZpZXcgdGhpcyBkb2N1bWVudGF0aW9uIHRvIGJlIGF3YXJlIG9mIGl0cyBzcGVjaWZpYyBiZWhhdmlvcnMsIHdoaWNoIHByb3BhZ2F0ZSB0byBZYWZfQ29uZmlnX0luaSwgc3VjaCBhcyBob3cgdGhlIHNwZWNpYWwgdmFsdWVzIG9mICJUUlVFIiwgIkZBTFNFIiwgInllcyIsICJubyIsIGFuZCAiTlVMTCIgYXJlIGhhbmRsZWQuPC9wPgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtY29uZmlnLWluaS5waHAKICovCmNsYXNzIFlhZl9Db25maWdfSW5pIGV4dGVuZHMgWWFmX0NvbmZpZ19BYnN0cmFjdCBpbXBsZW1lbnRzIEl0ZXJhdG9yLCBBcnJheUFjY2VzcywgQ291bnRhYmxlCnsKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAkY29uZmlnX2ZpbGUKICAgICAqIEBwYXJhbSA/c3RyaW5nICRzZWN0aW9uCiAgICAgKiBAdGhyb3dzIFlhZl9FeGNlcHRpb25fVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29uZmlnX2ZpbGUsID9zdHJpbmcgJHNlY3Rpb24gPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBZYWZfQ29uZmlnX0Fic3RyYWN0OjpfX2dldAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBZYWZfQ29uZmlnX0Fic3RyYWN0OjpfX3NldAogICAgICogQHBhcmFtIG1peGVkICRuYW1lCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgkbmFtZSwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBZYWZfQ29uZmlnX0Fic3RyYWN0OjpnZXQKICAgICAqIEBwYXJhbSA/c3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoP3N0cmluZyAkbmFtZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6OnNldAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KHN0cmluZyAkbmFtZSwgJHZhbHVlKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQHNlZSBZYWZfQ29uZmlnX0Fic3RyYWN0Ojp0b0FycmF5CiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6OnJlYWRvbmx5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRvbmx5KCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEBzZWUgWWFmX0NvbmZpZ19BYnN0cmFjdDo6X19pc3NldAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2lzc2V0KHN0cmluZyAkbmFtZSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEBzZWUgWWFmX0NvbmZpZ19BYnN0cmFjdDo6Y291bnQKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQge30KCiAgICAvKioKICAgICAqIEBzZWUgWWFmX0NvbmZpZ19BYnN0cmFjdDo6cmV3aW5kCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6OmN1cnJlbnQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBZYWZfQ29uZmlnX0Fic3RyYWN0OjpuZXh0CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHNlZSBZYWZfQ29uZmlnX0Fic3RyYWN0Ojp2YWxpZAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6OmtleQogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkge30KCiAgICAvKioKICAgICAqIEBzZWUgWWFmX0NvbmZpZ19BYnN0cmFjdDo6b2Zmc2V0VW5zZXQKICAgICAqIEBwYXJhbSBtaXhlZCAkbmFtZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAZGVwcmVjYXRlZCBub3RfaW1wbGVtZW50ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRuYW1lKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHNlZSBZYWZfQ29uZmlnX0Fic3RyYWN0OjpvZmZzZXRHZXQKICAgICAqIEBwYXJhbSBtaXhlZCAkbmFtZQogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0KCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogQHNlZSBZYWZfQ29uZmlnX0Fic3RyYWN0OjpvZmZzZXRFeGlzdHMKICAgICAqIEBwYXJhbSBtaXhlZCAkbmFtZQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRFeGlzdHMoJG5hbWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6Om9mZnNldFNldAogICAgICogQHBhcmFtIG1peGVkICRvZmZzZXQKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSk6IHZvaWQge30KfQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1jb25maWctc2ltcGxlLnBocAogKi8KY2xhc3MgWWFmX0NvbmZpZ19TaW1wbGUgZXh0ZW5kcyBZYWZfQ29uZmlnX0Fic3RyYWN0IGltcGxlbWVudHMgSXRlcmF0b3IsIEFycmF5QWNjZXNzLCBDb3VudGFibGUKewogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRjb25maWdfZmlsZQogICAgICogQHBhcmFtID9zdHJpbmcgJHNlY3Rpb24KICAgICAqIEB0aHJvd3MgWWFmX0V4Y2VwdGlvbl9UeXBlRXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb25maWdfZmlsZSwgP3N0cmluZyAkc2VjdGlvbiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6Ol9fZ2V0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6Ol9fc2V0CiAgICAgKiBAcGFyYW0gbWl4ZWQgJG5hbWUKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6OmdldAogICAgICogQHBhcmFtID9zdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCg/c3RyaW5nICRuYW1lID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBzZWUgWWFmX0NvbmZpZ19BYnN0cmFjdDo6c2V0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoc3RyaW5nICRuYW1lLCAkdmFsdWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6OnRvQXJyYXkKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEBzZWUgWWFmX0NvbmZpZ19BYnN0cmFjdDo6cmVhZG9ubHkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZG9ubHkoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQHNlZSBZYWZfQ29uZmlnX0Fic3RyYWN0OjpfX2lzc2V0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faXNzZXQoJG5hbWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6OmNvdW50CiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6OnJld2luZAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHNlZSBZYWZfQ29uZmlnX0Fic3RyYWN0OjpjdXJyZW50CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkge30KCiAgICAvKioKICAgICAqIEBzZWUgWWFmX0NvbmZpZ19BYnN0cmFjdDo6bmV4dAogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0KCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBzZWUgWWFmX0NvbmZpZ19BYnN0cmFjdDo6dmFsaWQKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQHNlZSBZYWZfQ29uZmlnX0Fic3RyYWN0OjprZXkKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleSgpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6Om9mZnNldFVuc2V0CiAgICAgKiBAcGFyYW0gbWl4ZWQgJG5hbWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG5hbWUpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6Om9mZnNldEdldAogICAgICogQHBhcmFtIG1peGVkICRuYW1lCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAc2VlIFlhZl9Db25maWdfQWJzdHJhY3Q6Om9mZnNldEV4aXN0cwogICAgICogQHBhcmFtIG1peGVkICRuYW1lCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEV4aXN0cygkbmFtZSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEBzZWUgWWFmX0NvbmZpZ19BYnN0cmFjdDo6b2Zmc2V0U2V0CiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9mZnNldAogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJG9mZnNldCwgJHZhbHVlKTogdm9pZCB7fQp9CgovKioKICogPGI+WWFmX1ZpZXdfU2ltcGxlPC9iPiBpcyB0aGUgYnVpbHQtaW4gdGVtcGxhdGUgZW5naW5lIGluIFlhZiwgaXQgaXMgYSBzaW1wbGUgYnV0IGZhc3QgdGVtcGxhdGUgZW5naW5lLCBhbmQgb25seSBzdXBwb3J0IFBIUCBzY3JpcHQgdGVtcGxhdGUuCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi12aWV3LXNpbXBsZS5waHAKICovCmNsYXNzIFlhZl9WaWV3X1NpbXBsZSBpbXBsZW1lbnRzIFlhZl9WaWV3X0ludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3RwbF9kaXI7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3RwbF92YXJzOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9vcHRpb25zOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXZpZXctc2ltcGxlLmNvbnN0cnVjdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZW1wbGF0ZV9kaXIgVGhlIGJhc2UgZGlyZWN0b3J5IG9mIHRoZSB0ZW1wbGF0ZXMsIGJ5IGRlZmF1bHQsIGl0IGlzIEFQUExJQ0FUSU9OIC4gIi92aWV3cyIgZm9yIFlhZi4KICAgICAqIEBwYXJhbSBhcnJheXxudWxsICRvcHRpb25zIDxwPk9wdGlvbnMgZm9yIHRoZSBlbmdpbmUsIGFzIG9mIFlhZiAyLjEuMTMsIHlvdSBjYW4gdXNlIHNob3J0IHRhZwogICAgICogIjw/PSR2YXI/PiIgaW4geW91ciB0ZW1wbGF0ZShyZWdhcmRsZXNzIG9mICJzaG9ydF9vcGVuX3RhZyIpLAogICAgICogc28gY29tZXMgYSBvcHRpb24gbmFtZWQgInNob3J0X3RhZyIsICB5b3UgY2FuIHN3aXRjaCB0aGlzIG9mZgogICAgICogdG8gcHJldmVudCB1c2Ugc2hvcnRfdGFnIGluIHRlbXBsYXRlLgogICAgICogPC9wPgogICAgICogQHRocm93cyBZYWZfRXhjZXB0aW9uX1R5cGVFcnJvcgogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRlbXBsYXRlX2RpciwgP2FycmF5ICRvcHRpb25zID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LXNpbXBsZS5pc3NldC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2lzc2V0KCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogYXNzaWduIHZhcmlhYmxlIHRvIHZpZXcgZW5naW5lCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXZpZXctc2ltcGxlLmFzc2lnbi5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRuYW1lIEEgc3RyaW5nIG9yIGFuIGFycmF5Ljxici8+aWYgaXMgc3RyaW5nLCB0aGVuIHRoZSBuZXh0IGFyZ3VtZW50ICR2YWx1ZSBpcyByZXF1aXJlZC4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgbWl4ZWQgdmFsdWUKICAgICAqIEByZXR1cm4gWWFmX1ZpZXdfSW50ZXJmYWNlfGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFzc2lnbigkbmFtZSwgJHZhbHVlID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LXNpbXBsZS5yZW5kZXIucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHBsCiAgICAgKiBAcGFyYW0gYXJyYXkgJHRwbF92YXJzCiAgICAgKgogICAgICogQHRocm93cyBZYWZfRXhjZXB0aW9uX0xvYWRGYWlsZWRfVmlldwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbmRlcigkdHBsLCAkdHBsX3ZhcnMgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogPHA+UmVuZGVyIGEgdGVtcGxhdGUgYW5kIGRpc3BsYXkgdGhlIHJlc3VsdCBpbnN0YW50bHkuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LXNpbXBsZS5kaXNwbGF5LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRwbAogICAgICogQHBhcmFtIGFycmF5ICR0cGxfdmFycwogICAgICoKICAgICAqIEB0aHJvd3MgWWFmX0V4Y2VwdGlvbl9Mb2FkRmFpbGVkX1ZpZXcKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc3BsYXkoJHRwbCwgJHRwbF92YXJzID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIDxwPnVubGlrZSBZYWZfVmlld19TaW1wbGU6OmFzc2lnbigpLCB0aGlzIG1ldGhvZCBhc3NpZ24gYSByZWYgdmFsdWUgdG8gZW5naW5lLjwvcD4KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi12aWV3LXNpbXBsZS5hc3NpZ25yZWYucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBBIHN0cmluZyBuYW1lIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBhY2Nlc3MgdGhlIHZhbHVlIGluIHRoZSB0ZW1wbGF0ZS4KICAgICAqIEBwYXJhbSBtaXhlZCAmJHZhbHVlIG1peGVkIHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBZYWZfVmlld19TaW1wbGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFzc2lnblJlZigkbmFtZSwgJiR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIGNsZWFyIGFzc2lnbmVkIHZhcmlhYmxlCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtdmlldy1zaW1wbGUuY2xlYXIucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBhc3NpZ25lZCB2YXJpYWJsZSBuYW1lLiA8YnIvPmlmIGVtcHR5LCB3aWxsIGNsZWFyIGFsbCBhc3NpZ25lZCB2YXJpYWJsZXMuCiAgICAgKgogICAgICogQHJldHVybiBZYWZfVmlld19TaW1wbGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyKCRuYW1lID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgdGVtcGxhdGVzIGJhc2UgZGlyZWN0b3J5LCB0aGlzIGlzIHVzdWFsbHkgY2FsbGVkIGJ5IFlhZl9EaXNwYXRjaGVyCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXZpZXctc2ltcGxlLnNldHNjcmlwdHBhdGgucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdGVtcGxhdGVfZGlyIEFuIGFic29sdXRlIHBhdGggdG8gdGhlIHRlbXBsYXRlIGRpcmVjdG9yeSwgYnkgZGVmYXVsdCwgWWFmX0Rpc3BhdGNoZXIgdXNlIGFwcGxpY2F0aW9uLmRpcmVjdG9yeSAuICIvdmlld3MiIGFzIHRoaXMgcGFyYW1ldGVyLgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTY3JpcHRQYXRoKCR0ZW1wbGF0ZV9kaXIpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtdmlldy1zaW1wbGUuZ2V0c2NyaXB0cGF0aC5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NyaXB0UGF0aCgpIHt9CgogICAgLyoqCiAgICAgKiA8cD5SZXRyaWV2ZSBhc3NpZ25lZCB2YXJpYWJsZTwvcD4KICAgICAqIDxici8+CiAgICAgKiA8Yj5Ob3RlOjwvYj4KICAgICAqIDxwPiRuYW1lIHBhcmFtZXRlciBjYW4gYmUgZW1wdHkgc2luY2UgMi4xLjExPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXZpZXctc2ltcGxlLmdldC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPnRoZSBhc3NpZ25lZCB2YXJpYWJsZSBuYW1lPC9wPgogICAgICogPGJyLz4KICAgICAqIDxwPmlmIHRoaXMgaXMgZW1wdHksIGFsbCBhc3NpZ25lZCB2YXJpYWJsZXMgd2lsbCBiZSByZXR1cm5lZDwvcD4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiA8cD5UaGlzIGlzIGEgYWx0ZXJuYXRpdmUgYW5kIGVhc2llciB3YXkgdG8gWWFmX1ZpZXdfU2ltcGxlOjphc3NpZ24oKS48L3A+CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXZpZXctc2ltcGxlLnNldC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIEEgc3RyaW5nIHZhbHVlIG5hbWUuCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIG1peGVkIHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgkbmFtZSwgJHZhbHVlID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIDxwPlJlbmRlciBhIHN0cmluZyB0ZW1wbGF0ZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQuPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXZpZXctc2ltcGxlLmV2YWwucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0cGxfc3RyIHN0cmluZyB0ZW1wbGF0ZQogICAgICogQHBhcmFtIGFycmF5ICR2YXJzCiAgICAgKiBAcmV0dXJuIHZvaWR8ZmFsc2UgcmV0dXJuIEZBTFNFIG9uIGZhaWx1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV2YWwoJHRwbF9zdHIsICR2YXJzID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldCgkbmFtZSA9ICcnKSB7fQp9CgovKioKICogPHA+YnkgZGVmYXVsdCwgWWFmX1JvdXRlciBvbmx5IGhhdmUgYSA8Yj5ZYWZfUm91dGVfU3RhdGljPC9iPiBhcyBpdHMgZGVmYXVsdCByb3V0ZS48L3A+CiAqIDxici8+CiAqIDxwPjxiPllhZl9Sb3V0ZV9TdGF0aWM8L2I+IGlzIGRlc2lnbmVkIHRvIGhhbmRsZSA4MCUgb2Ygbm9ybWFsIHJlcXVpcmVtZW50cy48L3A+CiAqIDxici8+CiAqIDxiPk5vdGU6PC9iPgogKiA8cD4gaXQgaXMgdW5uZWNlc3NhcnkgdG8gaW5zdGFuY2UgYSA8Yj5ZYWZfUm91dGVfU3RhdGljPC9iPiwgYWxzbyB1bm5lY2Vzc2FyeSB0byBhZGQgaXQgaW50byBZYWZfUm91dGVyJ3Mgcm91dGVzIHN0YWNrLCBzaW5jZSB0aGVyZSBpcyBhbHdheXMgYmUgb25lIGluIFlhZl9Sb3V0ZXIncyByb3V0ZXMgc3RhY2ssIGFuZCBhbHdheXMgYmUgY2FsbGVkIGF0IHRoZSBsYXN0IHRpbWUuPC9wPgogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtcm91dGUtc3RhdGljLnBocAogKi8KY2xhc3MgWWFmX1JvdXRlX1N0YXRpYyBpbXBsZW1lbnRzIFlhZl9Sb3V0ZV9JbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmkKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEBkZXByZWNhdGVkIG5vdF9pbXBsZW1lbnRlZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLXN0YXRpYy5tYXRjaC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1hdGNoKCR1cmkpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtc3RhdGljLnJvdXRlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBhbHdheXMgVFJVRQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm91dGUoJHJlcXVlc3QpIHt9CgogICAgLyoqCiAgICAgKiA8cD48Yj5ZYWZfUm91dGVfU3RhdGljOjphc3NlbWJsZSgpPC9iPiAtIEFzc2VtYmxlIGEgdXJsPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1zdGF0aWMuYXNzZW1ibGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRpbmZvCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkcXVlcnkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzZW1ibGUoYXJyYXkgJGluZm8sID9hcnJheSAkcXVlcnkgPSBudWxsKSB7fQp9CgovKioKICogPHA+PGI+WWFmX1JvdXRlX1NpbXBsZTwvYj4gd2lsbCBtYXRjaCB0aGUgcXVlcnkgc3RyaW5nLCBhbmQgZmluZCB0aGUgcm91dGUgaW5mby48L3A+CiAqIDxici8+CiAqIDxwPmFsbCB5b3UgbmVlZCB0byBkbyBpcyB0ZWxsIDxiPllhZl9Sb3V0ZV9TaW1wbGU8L2I+IHdoYXQga2V5IGluIHRoZSAkX0dFVCBpcyBtb2R1bGUsIHdoYXQga2V5IGlzIGNvbnRyb2xsZXIsIGFuZCB3aGF0IGtleSBpcyBhY3Rpb24uPC9wPgogKiA8YnIvPgogKiA8cD5ZYWZfUm91dGVfU2ltcGxlOjpyb3V0ZSgpIHdpbGwgYWx3YXlzIHJldHVybiBUUlVFLCBzbyBpdCBpcyBpbXBvcnRhbnQgcHV0IDxiPllhZl9Sb3V0ZV9TaW1wbGU8L2I+IGluIHRoZSBmcm9udCBvZiB0aGUgUm91dGUgc3RhY2ssIG90aGVyd2lzZSBhbGwgdGhlIG90aGVyIHJvdXRlcyB3aWxsIG5vdCBiZSBjYWxsZWQ8L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1yb3V0ZS1zaW1wbGUucGhwCiAqLwpmaW5hbCBjbGFzcyBZYWZfUm91dGVfU2ltcGxlIGltcGxlbWVudHMgWWFmX1JvdXRlX0ludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkY29udHJvbGxlcjsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkbW9kdWxlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRhY3Rpb247CgogICAgLyoqCiAgICAgKiA8cD5ZYWZfUm91dGVfU2ltcGxlIHdpbGwgZ2V0IHJvdXRlIGluZm8gZnJvbSBxdWVyeSBzdHJpbmcuIGFuZCB0aGUgcGFyYW1ldGVycyBvZiB0aGlzIGNvbnN0cnVjdG9yIHdpbGwgdXNlZCBhcyBrZXlzIHdoaWxlIHNlYXJjaGluZyBmb3IgdGhlIHJvdXRlIGluZm8gaW4gJF9HRVQuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1zaW1wbGUuY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZV9uYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250cm9sbGVyX25hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGFjdGlvbl9uYW1lCiAgICAgKgogICAgICogQHRocm93cyBZYWZfRXhjZXB0aW9uX1R5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1vZHVsZV9uYW1lLCAkY29udHJvbGxlcl9uYW1lLCAkYWN0aW9uX25hbWUpIHt9CgogICAgLyoqCiAgICAgKiA8cD5zZWUgWWFmX1JvdXRlX1NpbXBsZTo6X19jb25zdHJ1Y3QoKTwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtc2ltcGxlLnJvdXRlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBhbHdheXMgVFJVRQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm91dGUoJHJlcXVlc3QpIHt9CgogICAgLyoqCiAgICAgKiA8cD48Yj5ZYWZfUm91dGVfU2ltcGxlOjphc3NlbWJsZSgpPC9iPiAtIEFzc2VtYmxlIGEgdXJsPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1zaW1wbGUuYXNzZW1ibGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRpbmZvCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkcXVlcnkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzZW1ibGUoYXJyYXkgJGluZm8sID9hcnJheSAkcXVlcnkgPSBudWxsKSB7fQp9CgovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLXJvdXRlLXN1cGVydmFyLnBocAogKi8KZmluYWwgY2xhc3MgWWFmX1JvdXRlX1N1cGVydmFyIGltcGxlbWVudHMgWWFmX1JvdXRlX0ludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3Zhcl9uYW1lOwoKICAgIC8qKgogICAgICogPHA+WWFmX1JvdXRlX1N1cGVydmFyIGlzIHNpbWlsYXIgdG8gWWFmX1JvdXRlX1N0YXRpYywgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBZYWZfUm91dGVfU3VwZXJ2YXIgd2lsbCBsb29rIGZvciBwYXRoIGluZm8gaW4gcXVlcnkgc3RyaW5nLCBhbmQgdGhlIHBhcmFtZXRlciBzdXBlcnZhcl9uYW1lIGlzIHRoZSBrZXkuPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1zdXBlcnZhci5jb25zdHJ1Y3QucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3VwZXJ2YXJfbmFtZSBUaGUgbmFtZSBvZiBrZXkuCiAgICAgKgogICAgICogQHRocm93cyBZYWZfRXhjZXB0aW9uX1R5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHN1cGVydmFyX25hbWUpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtc3VwZXJ2YXIucm91dGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIFlhZl9SZXF1ZXN0X0Fic3RyYWN0ICRyZXF1ZXN0CiAgICAgKgogICAgICogQHJldHVybiBib29sIElmIHRoZXJlIGlzIGEga2V5KHdoaWNoIHdhcyBkZWZpbmVkIGluIFlhZl9Sb3V0ZV9TdXBlcnZhcjo6X19jb25zdHJ1Y3QoKSkgaW4gJF9HRVQsIHJldHVybiBUUlVFLiBvdGhlcndpc2UgcmV0dXJuIEZBTFNFLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm91dGUoJHJlcXVlc3QpIHt9CgogICAgLyoqCiAgICAgKiA8cD48Yj5ZYWZfUm91dGVfU3VwZXJ2YXI6OmFzc2VtYmxlKCk8L2I+IC0gQXNzZW1ibGUgYSB1cmw8L3A+CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLXN1cGVydmFyLmFzc2VtYmxlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkaW5mbwogICAgICogQHBhcmFtIGFycmF5fG51bGwgJHF1ZXJ5CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFzc2VtYmxlKGFycmF5ICRpbmZvLCA/YXJyYXkgJHF1ZXJ5ID0gbnVsbCkge30KfQoKLyoqCiAqIDxwPkZvciB1c2FnZSwgcGxlYXNlIHNlZSB0aGUgZXhhbXBsZSBzZWN0aW9uIG9mIFlhZl9Sb3V0ZV9SZXdyaXRlOjpfX2NvbnN0cnVjdCgpPC9wPgogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtcm91dGUtcmV3cml0ZS5waHAKICovCmZpbmFsIGNsYXNzIFlhZl9Sb3V0ZV9SZXdyaXRlIGV4dGVuZHMgWWFmX1JvdXRlciBpbXBsZW1lbnRzIFlhZl9Sb3V0ZV9JbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9yb3V0ZTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRfZGVmYXVsdDsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRfdmVyaWZ5OwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLXJld3JpdGUuY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1hdGNoIEEgcGF0dGVybiwgd2lsbCBiZSB1c2VkIHRvIG1hdGNoIGEgcmVxdWVzdCB1cmksIGlmIGRvZXNuJ3QgbWF0Y2hlZCwgWWFmX1JvdXRlX1Jld3JpdGUgd2lsbCByZXR1cm4gRkFMU0UuCiAgICAgKiBAcGFyYW0gYXJyYXkgJHJvdXRlIDxwPldoZW4gdGhlIG1hdGNoIHBhdHRlcm4gbWF0Y2hlcyB0aGUgcmVxdWVzdCB1cmksIFlhZl9Sb3V0ZV9SZXdyaXRlIHdpbGwgdXNlIHRoaXMgdG8gZGVjaWRlIHdoaWNoIG0vYy9hIHRvIHJvdXRlZC48L3A+CiAgICAgKiA8YnIvPgogICAgICogPHA+ZWl0aGVyIG9mIG0vYy9hIGluIHRoaXMgYXJyYXkgaXMgb3B0aW9uYWwsIGlmIHlvdSBkb24ndCBhc3NpZ24gYSBzcGVjaWZpYyB2YWx1ZSwgaXQgd2lsbCBiZSByb3V0ZWQgdG8gZGVmYXVsdC48L3A+CiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkdmVyaWZ5CiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHJldmVyc2UKICAgICAqCiAgICAgKiBAdGhyb3dzIFlhZl9FeGNlcHRpb25fVHlwZUVycm9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbWF0Y2gsIGFycmF5ICRyb3V0ZSwgYXJyYXkgJHZlcmlmeSA9IG51bGwsICRyZXZlcnNlID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1yZXdyaXRlLnJvdXRlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm91dGUoJHJlcXVlc3QpIHt9CgogICAgLyoqCiAgICAgKiA8cD48Yj5ZYWZfUm91dGVfUmV3cml0ZTo6YXNzZW1ibGUoKTwvYj4gLSBBc3NlbWJsZSBhIHVybDwvcD4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtcmV3cml0ZS5hc3NlbWJsZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGluZm8KICAgICAqIEBwYXJhbSBhcnJheXxudWxsICRxdWVyeQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhc3NlbWJsZShhcnJheSAkaW5mbywgP2FycmF5ICRxdWVyeSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWF0Y2goJHVyaSkge30KfQoKLyoqCiAqIDxwPjxiPllhZl9Sb3V0ZV9SZWdleDwvYj4gaXMgdGhlIG1vc3QgZmxleGlibGUgcm91dGUgYW1vbmcgdGhlIFlhZiBidWlsdC1pbiByb3V0ZXMuPC9wPgogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtcm91dGUtcmVnZXgucGhwCiAqLwpmaW5hbCBjbGFzcyBZYWZfUm91dGVfUmVnZXggZXh0ZW5kcyBZYWZfUm91dGVyIGltcGxlbWVudHMgWWFmX1JvdXRlX0ludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX3JvdXRlOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9kZWZhdWx0OwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9tYXBzOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJF92ZXJpZnk7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgJF9yZXZlcnNlOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLXJlZ2V4LmNvbnN0cnVjdC5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXRjaCBBIGNvbXBsZXRlIFJlZ2V4IHBhdHRlcm4sIHdpbGwgYmUgdXNlZCB0byBtYXRjaCBhIHJlcXVlc3QgdXJpLCBpZiBkb2Vzbid0IG1hdGNoZWQsIFlhZl9Sb3V0ZV9SZWdleCB3aWxsIHJldHVybiBGQUxTRS4KICAgICAqIEBwYXJhbSBhcnJheSAkcm91dGUgPHA+V2hlbiB0aGUgbWF0Y2ggcGF0dGVybiBtYXRjaGVzIHRoZSByZXF1ZXN0IHVyaSwgWWFmX1JvdXRlX1JlZ2V4IHdpbGwgdXNlIHRoaXMgdG8gZGVjaWRlIHdoaWNoIG0vYy9hIHRvIHJvdXRlZC48L3A+CiAgICAgKiA8YnIvPgogICAgICogPHA+ZWl0aGVyIG9mIG0vYy9hIGluIHRoaXMgYXJyYXkgaXMgb3B0aW9uYWwsIGlmIHlvdSBkb24ndCBhc3NpZ24gYSBzcGVjaWZpYyB2YWx1ZSwgaXQgd2lsbCBiZSByb3V0ZWQgdG8gZGVmYXVsdC48L3A+CiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkbWFwIEEgYXJyYXkgdG8gYXNzaWduIG5hbWUgdG8gdGhlIGNhcHR1cmVzIGluIHRoZSBtYXRjaCByZXN1bHQuCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkdmVyaWZ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZXZlcnNlCiAgICAgKgogICAgICogQHRocm93cyBZYWZfRXhjZXB0aW9uX1R5cGVFcnJvcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1hdGNoLCBhcnJheSAkcm91dGUsID9hcnJheSAkbWFwID0gbnVsbCwgP2FycmF5ICR2ZXJpZnkgPSBudWxsLCAkcmV2ZXJzZSA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBSb3V0ZSBhIGluY29taW5nIHJlcXVlc3QuCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFmLXJvdXRlLXJlZ2V4LnJvdXRlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBJZiB0aGUgcGF0dGVybiBnaXZlbiBieSB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIFlhZl9Sb3V0ZV9SZWdleDo6X2NvbnN0cnVjdCgpIG1hdGNoZXMgdGhlIHJlcXVlc3QgdXJpLCByZXR1cm4gVFJVRSwgb3RoZXJ3aXNlIHJldHVybiBGQUxTRS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJvdXRlKCRyZXF1ZXN0KSB7fQoKICAgIC8qKgogICAgICogPHA+PGI+WWFmX1JvdXRlX1JlZ2V4Ojphc3NlbWJsZSgpPC9iPiAtIEFzc2VtYmxlIGEgdXJsPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1yZWdleC5hc3NlbWJsZS5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGluZm8KICAgICAqIEBwYXJhbSBhcnJheXxudWxsICRxdWVyeQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhc3NlbWJsZShhcnJheSAkaW5mbywgYXJyYXkgJHF1ZXJ5ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVyaQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXRjaCgkdXJpKSB7fQp9CgovKioKICogPHA+PGI+WWFmX1JvdXRlX01hcDwvYj4gaXMgYSBidWlsdC1pbiByb3V0ZSwgaXQgc2ltcGx5IGNvbnZlcnQgYSBVUkkgZW5kcG9pbnQgKHRoYXQgcGFydCBvZiB0aGUgVVJJIHdoaWNoIGNvbWVzIGFmdGVyIHRoZSBiYXNlIFVSSTogc2VlIFlhZl9SZXF1ZXN0X0Fic3RyYWN0OjpzZXRCYXNlVXJpKCkpIHRvIGEgY29udHJvbGxlciBuYW1lIG9yIGFjdGlvbiBuYW1lKGRlcGVuZHMgb24gdGhlIHBhcmFtZXRlciBwYXNzZWQgdG8gWWFmX1JvdXRlX01hcDo6X19jb25zdHJ1Y3QoKSkgaW4gZm9sbG93aW5nIHJ1bGU6IEEgPT4gY29udHJvbGxlciBBLiBBL0IvQyA9PiBjb250cm9sbGVyIEFfQl9DLiBBL0IvQy9EL0UgPT4gY29udHJvbGxlciBBX0JfQ19EX0UuPC9wPgogKiA8YnIvPgogKiA8cD5JZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiBZYWZfUm91dGVfTWFwOjpfX2NvbnN0cnVjdCgpIGlzIHNwZWNpZmllZCwgdGhlbiBvbmx5IHRoZSBwYXJ0IGJlZm9yZSBkZWxpbWl0ZXIgb2YgVVJJIHdpbGwgdXNlZCB0byByb3V0aW5nLCB0aGUgcGFydCBhZnRlciBpdCBpcyB1c2VkIHRvIHJvdXRpbmcgcmVxdWVzdCBwYXJhbWV0ZXJzIChzZWUgdGhlIGV4YW1wbGUgc2VjdGlvbiBvZiBZYWZfUm91dGVfTWFwOjpfX2NvbnN0cnVjdCgpKS48L3A+CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1yb3V0ZS1tYXAucGhwCiAqLwpmaW5hbCBjbGFzcyBZYWZfUm91dGVfTWFwIGltcGxlbWVudHMgWWFmX1JvdXRlX0ludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2N0bF9yb3V0ZXIgPSAnJzsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkX2RlbGltaXRlcjsKCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1tYXAuY29uc3RydWN0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBib29sICRjb250cm9sbGVyX3ByZWZlciBXaGV0aGVyIHRoZSByZXN1bHQgc2hvdWxkIGNvbnNpZGVyaW5nIGFzIGNvbnRyb2xsZXIgb3IgYWN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZWxpbWl0ZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb250cm9sbGVyX3ByZWZlciA9IGZhbHNlLCAkZGVsaW1pdGVyID0gJycpIHt9CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi95YWYtcm91dGUtbWFwLnJvdXRlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBZYWZfUmVxdWVzdF9BYnN0cmFjdCAkcmVxdWVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm91dGUoJHJlcXVlc3QpIHt9CgogICAgLyoqCiAgICAgKiA8cD48Yj5ZYWZfUm91dGVfTWFwOjphc3NlbWJsZSgpPC9iPiAtIEFzc2VtYmxlIGEgdXJsPC9wPgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhZi1yb3V0ZS1tYXAuYXNzZW1ibGUucGhwCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRpbmZvCiAgICAgKiBAcGFyYW0gYXJyYXl8bnVsbCAkcXVlcnkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzZW1ibGUoYXJyYXkgJGluZm8sID9hcnJheSAkcXVlcnkgPSBudWxsKSB7fQp9CgovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLWV4Y2VwdGlvbi10eXBlZXJyb3IucGhwCiAqLwpjbGFzcyBZYWZfRXhjZXB0aW9uX1R5cGVFcnJvciBleHRlbmRzIFlhZl9FeGNlcHRpb24ge30KCi8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtZXhjZXB0aW9uLXN0YXJ0dXBlcnJvci5waHAKICovCmNsYXNzIFlhZl9FeGNlcHRpb25fU3RhcnR1cEVycm9yIGV4dGVuZHMgWWFmX0V4Y2VwdGlvbiB7fQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1leGNlcHRpb24tcm91dGVmYWlsZC5waHAKICovCmNsYXNzIFlhZl9FeGNlcHRpb25fUm91dGVyRmFpbGVkIGV4dGVuZHMgWWFmX0V4Y2VwdGlvbiB7fQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1leGNlcHRpb24tZGlzcGF0Y2hmYWlsZC5waHAKICovCmNsYXNzIFlhZl9FeGNlcHRpb25fRGlzcGF0Y2hGYWlsZWQgZXh0ZW5kcyBZYWZfRXhjZXB0aW9uIHt9CgovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLWV4Y2VwdGlvbi1sb2FkZmFpbGQucGhwCiAqLwpjbGFzcyBZYWZfRXhjZXB0aW9uX0xvYWRGYWlsZWQgZXh0ZW5kcyBZYWZfRXhjZXB0aW9uIHt9CgovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFmLWV4Y2VwdGlvbi1sb2FkZmFpbGQtbW9kdWxlLnBocAogKi8KY2xhc3MgWWFmX0V4Y2VwdGlvbl9Mb2FkRmFpbGVkX01vZHVsZSBleHRlbmRzIFlhZl9FeGNlcHRpb25fTG9hZEZhaWxlZCB7fQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1leGNlcHRpb24tbG9hZGZhaWxkLWNvbnRyb2xsZXIucGhwCiAqLwpjbGFzcyBZYWZfRXhjZXB0aW9uX0xvYWRGYWlsZWRfQ29udHJvbGxlciBleHRlbmRzIFlhZl9FeGNlcHRpb25fTG9hZEZhaWxlZCB7fQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhZi1leGNlcHRpb24tbG9hZGZhaWxkLWFjdGlvbi5waHAKICovCmNsYXNzIFlhZl9FeGNlcHRpb25fTG9hZEZhaWxlZF9BY3Rpb24gZXh0ZW5kcyBZYWZfRXhjZXB0aW9uX0xvYWRGYWlsZWQge30KCi8qKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YWYtZXhjZXB0aW9uLWxvYWRmYWlsZC12aWV3LnBocAogKi8KY2xhc3MgWWFmX0V4Y2VwdGlvbl9Mb2FkRmFpbGVkX1ZpZXcgZXh0ZW5kcyBZYWZfRXhjZXB0aW9uX0xvYWRGYWlsZWQge30KPD9waHAKLyoqCiAqIG15c3FsX3hkZXZhcGkgZXh0ZW5zaW9uIHN0dWJzCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Jvb2subXlzcWwteGRldmFwaS5waHAKICogQHZlcnNpb24gMC4zIDIwMTktMDgtMjEKICogQGF1dGhvciBNYXRoaWpzIEdpZXNiZXJzCiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCgpuYW1lc3BhY2UgbXlzcWxfeGRldmFwaTsKCmRlZmluZSgnTVlTUUxYX0xPQ0tfREVGQVVMVCcsIDApOwpkZWZpbmUoJ01ZU1FMWF9UWVBFX0RFQ0lNQUwnLCAwKTsKZGVmaW5lKCdNWVNRTFhfVFlQRV9USU5ZJywgMSk7CmRlZmluZSgnTVlTUUxYX1RZUEVfU0hPUlQnLCAyKTsKZGVmaW5lKCdNWVNRTFhfVFlQRV9TTUFMTElOVCcsIDE3KTsKZGVmaW5lKCdNWVNRTFhfVFlQRV9NRURJVU1JTlQnLCAxOCk7CmRlZmluZSgnTVlTUUxYX1RZUEVfSU5UJywgMTkpOwpkZWZpbmUoJ01ZU1FMWF9UWVBFX0JJR0lOVCcsIDIwKTsKZGVmaW5lKCdNWVNRTFhfVFlQRV9MT05HJywgMyk7CmRlZmluZSgnTVlTUUxYX1RZUEVfRkxPQVQnLCA0KTsKZGVmaW5lKCdNWVNRTFhfVFlQRV9ET1VCTEUnLCA1KTsKZGVmaW5lKCdNWVNRTFhfVFlQRV9OVUxMJywgNik7CmRlZmluZSgnTVlTUUxYX1RZUEVfVElNRVNUQU1QJywgNyk7CmRlZmluZSgnTVlTUUxYX1RZUEVfTE9OR0xPTkcnLCA4KTsKZGVmaW5lKCdNWVNRTFhfVFlQRV9JTlQyNCcsIDkpOwpkZWZpbmUoJ01ZU1FMWF9UWVBFX0RBVEUnLCAxMCk7CmRlZmluZSgnTVlTUUxYX1RZUEVfVElNRScsIDExKTsKZGVmaW5lKCdNWVNRTFhfVFlQRV9EQVRFVElNRScsIDEyKTsKZGVmaW5lKCdNWVNRTFhfVFlQRV9ZRUFSJywgMTMpOwpkZWZpbmUoJ01ZU1FMWF9UWVBFX05FV0RBVEUnLCAxNCk7CmRlZmluZSgnTVlTUUxYX1RZUEVfRU5VTScsIDI0Nyk7CmRlZmluZSgnTVlTUUxYX1RZUEVfU0VUJywgMjQ4KTsKZGVmaW5lKCdNWVNRTFhfVFlQRV9USU5ZX0JMT0InLCAyNDkpOwpkZWZpbmUoJ01ZU1FMWF9UWVBFX01FRElVTV9CTE9CJywgMjUwKTsKZGVmaW5lKCdNWVNRTFhfVFlQRV9MT05HX0JMT0InLCAyNTEpOwpkZWZpbmUoJ01ZU1FMWF9UWVBFX0JMT0InLCAyNTIpOwpkZWZpbmUoJ01ZU1FMWF9UWVBFX1ZBUl9TVFJJTkcnLCAyNTMpOwpkZWZpbmUoJ01ZU1FMWF9UWVBFX1NUUklORycsIDI1NCk7CmRlZmluZSgnTVlTUUxYX1RZUEVfQ0hBUicsIDEpOwpkZWZpbmUoJ01ZU1FMWF9UWVBFX0JZVEVTJywgMjEpOwpkZWZpbmUoJ01ZU1FMWF9UWVBFX0lOVEVSVkFMJywgMjQ3KTsKZGVmaW5lKCdNWVNRTFhfVFlQRV9HRU9NRVRSWScsIDI1NSk7CmRlZmluZSgnTVlTUUxYX1RZUEVfSlNPTicsIDI0NSk7CmRlZmluZSgnTVlTUUxYX1RZUEVfTkVXREVDSU1BTCcsIDI0Nik7CmRlZmluZSgnTVlTUUxYX1RZUEVfQklUJywgMTYpOwpkZWZpbmUoJ01ZU1FMWF9MT0NLX05PV0FJVCcsIDEpOwpkZWZpbmUoJ01ZU1FMWF9MT0NLX1NLSVBfTE9DS0VEJywgMik7CgovKioKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwteGRldmFwaS1nZXRzZXNzaW9uLnBocAogKiBAcGFyYW0gc3RyaW5nICR1cmkgVGhlIFVSSSB0byB0aGUgTXlTUUwgc2VydmVyLCBzdWNoIGFzIG15c3FseDovL3VzZXI6cGFzc3dvcmRAaG9zdC4KICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxTZXNzaW9uCiAqLwpmdW5jdGlvbiBnZXRTZXNzaW9uKCR1cmkpIHt9CgovKioKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXlzcWwteGRldmFwaS1leHByZXNzaW9uLnBocAogKiBAcGFyYW0gc3RyaW5nICRleHByZXNzaW9uIEJpbmQgcHJlcGFyZWQgc3RhdGVtZW50IHZhcmlhYmxlcyBhcyBwYXJhbWV0ZXJzCiAqIEByZXR1cm4gb2JqZWN0CiAqLwpmdW5jdGlvbiBleHByZXNzaW9uKCRleHByZXNzaW9uKSB7fQoKLyoqCiAqIEludGVyZmFjZSBCYXNlUmVzdWx0CiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCmludGVyZmFjZSBCYXNlUmVzdWx0CnsKICAgIC8qKgogICAgICogRmV0Y2ggd2FybmluZ3MgZnJvbSBsYXN0IG9wZXJhdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1iYXNlcmVzdWx0LmdldHdhcm5pbmdzLnBocAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0V2FybmluZ3MoKTogYXJyYXk7CgogICAgLyoqCiAgICAgKiBGZXRjaCB3YXJuaW5nIGNvdW50IGZyb20gbGFzdCBvcGVyYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktYmFzZXJlc3VsdC5nZXR3YXJuaW5nc2NvdW50LnBocAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFdhcm5pbmdzQ291bnQoKTogaW50Owp9CgovKioKICogQ2xhc3MgQ29sbGVjdGlvbgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb24ucGhwCiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCmNsYXNzIENvbGxlY3Rpb24KewogICAgLyoqCiAgICAgKiBDb2xsZWN0aW9uIGNvbnN0cnVjdG9yCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb24uY29uc3RydWN0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQoKICAgIC8qKgogICAgICogQWRkIGNvbGxlY3Rpb24gZG9jdW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sbGVjdGlvbi5hZGQucGhwCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRvY3VtZW50CiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXENvbGxlY3Rpb25BZGQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZCgkZG9jdW1lbnQpOiBDb2xsZWN0aW9uQWRkIHt9CgogICAgLyoqCiAgICAgKiBBZGQgb3IgcmVwbGFjZSBjb2xsZWN0aW9uIGRvY3VtZW50CiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb24uYWRkb3JyZXBsYWNlb25lLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkaWQKICAgICAqIEBwYXJhbSBtaXhlZCAkZG9jdW1lbnQKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRPclJlcGxhY2VPbmUoJGlkLCAkZG9jdW1lbnQpOiBSZXN1bHQge30KCiAgICAvKioKICAgICAqIEdldCBkb2N1bWVudCBjb3VudAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9uLmNvdW50LnBocAogICAgICogQHJldHVybiBpbnQgVGhlIG51bWJlciBvZiBkb2N1bWVudHMgaW4gdGhlIGNvbGxlY3Rpb24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQge30KCiAgICAvKioKICAgICAqIENyZWF0ZSBjb2xsZWN0aW9uIGluZGV4CiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb24uY3JlYXRlaW5kZXgucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmRleF9uYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmRleF9kZXNjX2pzb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUluZGV4KCRpbmRleF9uYW1lLCAkaW5kZXhfZGVzY19qc29uKSB7fQoKICAgIC8qKgogICAgICogRHJvcCBjb2xsZWN0aW9uIGluZGV4CiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb24uZHJvcGluZGV4LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkaW5kZXhfbmFtZQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkcm9wSW5kZXgoJGluZGV4X25hbWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBjb2xsZWN0aW9uIGV4aXN0cyBpbiBkYXRhYmFzZQogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9uLmV4aXN0c2luZGF0YWJhc2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4aXN0c0luRGF0YWJhc2UoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9uLmZpbmQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzZWFyY2hfY29uZGl0aW9uCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXENvbGxlY3Rpb25GaW5kCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kKCRzZWFyY2hfY29uZGl0aW9uKTogQ29sbGVjdGlvbkZpbmQge30KCiAgICAvKioKICAgICAqIEdldCBjb2xsZWN0aW9uIG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sbGVjdGlvbi5nZXRuYW1lLnBocAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXQgb25lIGRvY3VtZW50CiAgICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgZm9yIENvbGxlY3Rpb24uZmluZCgiX2lkID0gOmlkIikuYmluZCgiaWQiLCBpZCkuZXhlY3V0ZSgpLmZldGNoT25lKCk7LgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9uLmdldG9uZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkCiAgICAgKiBAcmV0dXJuIG1peGVkIE51bGwgaWYgb2JqZWN0IGlzIG5vdCBmb3VuZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T25lKCRpZCkge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBzY2hlbWEgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGNvbGxlY3Rpb24uCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb24uZ2V0c2NoZW1hLnBocAogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxTY2hlbWEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNjaGVtYSgpOiBTY2hlbWEge30KCiAgICAvKioKICAgICAqIEdldCBhIG5ldyBTZXNzaW9uIG9iamVjdCBmcm9tIHRoZSBDb2xsZWN0aW9uIG9iamVjdC4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sbGVjdGlvbi5nZXRzZXNzaW9uLnBocAogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxTZXNzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZXNzaW9uKCk6IFNlc3Npb24ge30KCiAgICAvKioKICAgICAqIE1vZGlmeSBjb2xsZWN0aW9ucyB0aGF0IG1lZXQgc3BlY2lmaWMgc2VhcmNoIGNvbmRpdGlvbnMuIE11bHRpcGxlIG9wZXJhdGlvbnMgYXJlIGFsbG93ZWQsIGFuZCBwYXJhbWV0ZXIgYmluZGluZyBpcyBzdXBwb3J0ZWQuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb24ubW9kaWZ5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc2VhcmNoX2NvbmRpdGlvbgogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxDb2xsZWN0aW9uTW9kaWZ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb2RpZnkoJHNlYXJjaF9jb25kaXRpb24pOiBDb2xsZWN0aW9uTW9kaWZ5IHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgY29sbGVjdGlvbnMgdGhhdCBtZWV0IHNwZWNpZmljIHNlYXJjaCBjb25kaXRpb25zLiBNdWx0aXBsZSBvcGVyYXRpb25zIGFyZSBhbGxvd2VkLCBhbmQgcGFyYW1ldGVyIGJpbmRpbmcgaXMgc3VwcG9ydGVkLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9uLnJlbW92ZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlYXJjaF9jb25kaXRpb24KICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcQ29sbGVjdGlvblJlbW92ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKCRzZWFyY2hfY29uZGl0aW9uKTogQ29sbGVjdGlvblJlbW92ZSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlIG9uZSBjb2xsZWN0aW9uIGRvY3VtZW50CiAgICAgKiBSZW1vdmUgb25lIGRvY3VtZW50IGZyb20gdGhlIGNvbGxlY3Rpb24gd2l0aCB0aGUgY29ycmVzcG9uZGluZyBJRC4gVGhpcyBpcyBhIHNob3J0Y3V0IGZvciBDb2xsZWN0aW9uLnJlbW92ZSgiX2lkID0gOmlkIikuYmluZCgiaWQiLCBpZCkuZXhlY3V0ZSgpLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9uLnJlbW92ZW9uZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlT25lKCRpZCk6IFJlc3VsdCB7fQoKICAgIC8qKgogICAgICogVXBkYXRlcyAob3IgcmVwbGFjZXMpIHRoZSBkb2N1bWVudCBpZGVudGlmaWVkIGJ5IElELCBpZiBpdCBleGlzdHMuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb24ucmVtb3Zlb25lLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkaWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRvYwogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcGxhY2VPbmUoJGlkLCAkZG9jKTogUmVzdWx0IHt9Cn0KCi8qKgogKiBDbGFzcyBDb2xsZWN0aW9uQWRkCiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCmNsYXNzIENvbGxlY3Rpb25BZGQgaW1wbGVtZW50cyBcbXlzcWxfeGRldmFwaVxFeGVjdXRhYmxlCnsKICAgIC8qKgogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKTogUmVzdWx0IHt9Cn0KCi8qKgogKiBDbGFzcyBDb2xsZWN0aW9uRmluZAogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb25maW5kLnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwpjbGFzcyBDb2xsZWN0aW9uRmluZCBpbXBsZW1lbnRzIFxteXNxbF94ZGV2YXBpXEV4ZWN1dGFibGUsIFxteXNxbF94ZGV2YXBpXENydWRPcGVyYXRpb25CaW5kYWJsZSwgXG15c3FsX3hkZXZhcGlcQ3J1ZE9wZXJhdGlvbkxpbWl0YWJsZSwgXG15c3FsX3hkZXZhcGlcQ3J1ZE9wZXJhdGlvblNvcnRhYmxlCnsKICAgIC8qKgogICAgICogQmluZCB2YWx1ZSB0byBxdWVyeSBwbGFjZWhvbGRlcgogICAgICogSXQgYWxsb3dzIHRoZSB1c2VyIHRvIGJpbmQgYSBwYXJhbWV0ZXIgdG8gdGhlIHBsYWNlaG9sZGVyIGluIHRoZSBzZWFyY2ggY29uZGl0aW9uIG9mIHRoZSBmaW5kIG9wZXJhdGlvbi4gVGhlIHBsYWNlaG9sZGVyIGhhcyB0aGUgZm9ybSBvZiA6TkFNRSB3aGVyZSAnOicgaXMgYSBjb21tb24gcHJlZml4IHRoYXQgbXVzdCBhbHdheXMgZXhpc3RzIGJlZm9yZSBhbnkgTkFNRSwgTkFNRSBpcyB0aGUgYWN0dWFsIG5hbWUgb2YgdGhlIHBsYWNlaG9sZGVyLiBUaGUgYmluZCBmdW5jdGlvbiBhY2NlcHRzIGEgbGlzdCBvZiBwbGFjZWhvbGRlcnMgaWYgbXVsdGlwbGUgZW50aXRpZXMgaGF2ZSB0byBiZSBzdWJzdGl0dXRlZCBpbiB0aGUgc2VhcmNoIGNvbmRpdGlvbi4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sbGVjdGlvbmZpbmQuYmluZC5waHAKICAgICAqIEBwYXJhbSBhcnJheSAkcGxhY2Vob2xkZXJfdmFsdWVzCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXENvbGxlY3Rpb25GaW5kCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiaW5kKGFycmF5ICRwbGFjZWhvbGRlcl92YWx1ZXMpOiBDb2xsZWN0aW9uRmluZCB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZSB0aGUgZmluZCBvcGVyYXRpb247IHRoaXMgZnVuY3Rpb25hbGl0eSBhbGxvd3MgZm9yIG1ldGhvZCBjaGFpbmluZy4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sbGVjdGlvbmZpbmQuZXhlY3V0ZS5waHAKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcRG9jUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCk6IERvY1Jlc3VsdCB7fQoKICAgIC8qKgogICAgICogRGVmaW5lZCB0aGUgY29sdW1ucyBmb3IgdGhlIHF1ZXJ5IHRvIHJldHVybi4gSWYgbm90IGRlZmluZWQgdGhlbiBhbGwgY29sdW1ucyBhcmUgdXNlZC4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sbGVjdGlvbmZpbmQuZmllbGRzLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcHJvamVjdGlvbgogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxDb2xsZWN0aW9uRmluZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmllbGRzKHN0cmluZyAkcHJvamVjdGlvbik6IENvbGxlY3Rpb25GaW5kIHt9CgogICAgLyoqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGdyb3VwIHRoZSByZXN1bHQtc2V0IGJ5IG9uZSBtb3JlIGNvbHVtbnMsIGZyZXF1ZW50bHkgdGhpcyBpcyB1c2VkIHdpdGggYWdncmVnYXRlIGZ1bmN0aW9ucyBsaWtlIENPVU5ULE1BWCxNSU4sU1VNIGV0Yy4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sbGVjdGlvbmZpbmQuZ3JvdXBieS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNvcnRfZXhwcgogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxDb2xsZWN0aW9uRmluZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ3JvdXBCeShzdHJpbmcgJHNvcnRfZXhwcik6IENvbGxlY3Rpb25GaW5kIHt9CgogICAgLyoqCiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFmdGVyIHRoZSAnZmllbGQnIG9wZXJhdGlvbiBpbiBvcmRlciB0byBtYWtlIGEgc2VsZWN0aW9uIG9uIHRoZSBkb2N1bWVudHMgdG8gZXh0cmFjdC4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sbGVjdGlvbmZpbmQuaGF2aW5nLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc29ydF9leHByCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXENvbGxlY3Rpb25GaW5kCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXZpbmcoc3RyaW5nICRzb3J0X2V4cHIpOiBDb2xsZWN0aW9uRmluZCB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBkb2N1bWVudHMgdG8gcmV0dXJuLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9uZmluZC5saW1pdC5waHAKICAgICAqIEBwYXJhbSBpbnQgJHJvd3MKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcQ29sbGVjdGlvbkZpbmQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpbWl0KGludCAkcm93cyk6IENvbGxlY3Rpb25GaW5kIHt9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIG9wZXJhdGlvbiB3aXRoIEVYQ0xVU0lWRSBMT0NLCiAgICAgKgogICAgICogTG9jayBleGNsdXNpdmVseSB0aGUgZG9jdW1lbnQsIG90aGVyIHRyYW5zYWN0aW9ucyBhcmUgYmxvY2tlZCBmcm9tIHVwZGF0aW5nIHRoZSBkb2N1bWVudCB1bnRpbCB0aGUgZG9jdW1lbnQgaXMgbG9ja2VkIFdoaWxlIHRoZSBkb2N1bWVudCBpcyBsb2NrZWQsIG90aGVyIHRyYW5zYWN0aW9ucyBhcmUgYmxvY2tlZCBmcm9tIHVwZGF0aW5nIHRob3NlIGRvY3MsIGZyb20gZG9pbmcgU0VMRUNUIC4uLiBMT0NLIElOIFNIQVJFIE1PREUsIG9yIGZyb20gcmVhZGluZyB0aGUgZGF0YSBpbiBjZXJ0YWluIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbHMuIENvbnNpc3RlbnQgcmVhZHMgaWdub3JlIGFueSBsb2NrcyBzZXQgb24gdGhlIHJlY29yZHMgdGhhdCBleGlzdCBpbiB0aGUgcmVhZCB2aWV3LgogICAgICogVGhpcyBmZWF0dXJlIGlzIGRpcmVjdGx5IHVzZWZ1bCB3aXRoIHRoZSBtb2RpZnkoKSBjb21tYW5kLCB0byBhdm9pZCBjb25jdXJyZW5jeSBwcm9ibGVtcy4gQmFzaWNhbGx5LCBpdCBzZXJpYWxpemVzIGFjY2VzcyB0byBhIHJvdyB0aHJvdWdoIHJvdyBsb2NraW5nCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9uZmluZC5sb2NrZXhjbHVzaXZlLnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxvY2tfd2FpdGluZ19vcHRpb24KICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcQ29sbGVjdGlvbkZpbmQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvY2tFeGNsdXNpdmUoaW50ICRsb2NrX3dhaXRpbmdfb3B0aW9uKTogQ29sbGVjdGlvbkZpbmQge30KCiAgICAvKioKICAgICAqIEV4ZWN1dGUgb3BlcmF0aW9uIHdpdGggU0hBUkVEIExPQ0sKICAgICAqCiAgICAgKiBBbGxvd3MgdG8gc2hhcmUgdGhlIGRvY3VtZW50cyBiZXR3ZWVuIG11bHRpcGxlIHRyYW5zYWN0aW9ucyB3aGljaCBhcmUgbG9ja2luZyBpbiBzaGFyZWQgbW9kZS4KICAgICAqIE90aGVyIHNlc3Npb25zIGNhbiByZWFkIHRoZSByb3dzLCBidXQgY2Fubm90IG1vZGlmeSB0aGVtIHVudGlsIHlvdXIgdHJhbnNhY3Rpb24gY29tbWl0cy4KICAgICAqIElmIGFueSBvZiB0aGVzZSByb3dzIHdlcmUgY2hhbmdlZCBieSBhbm90aGVyIHRyYW5zYWN0aW9uIHRoYXQgaGFzIG5vdCB5ZXQgY29tbWl0dGVkLAogICAgICogeW91ciBxdWVyeSB3YWl0cyB1bnRpbCB0aGF0IHRyYW5zYWN0aW9uIGVuZHMgYW5kIHRoZW4gdXNlcyB0aGUgbGF0ZXN0IHZhbHVlcy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb25maW5kLmxvY2tzaGFyZWQucGhwCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbG9ja193YWl0aW5nX29wdGlvbgogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxDb2xsZWN0aW9uRmluZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9ja1NoYXJlZChpbnQgJGxvY2tfd2FpdGluZ19vcHRpb24pOiBDb2xsZWN0aW9uRmluZCB7fQoKICAgIC8qKgogICAgICogU2tpcCBnaXZlbiBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgcmV0dXJuZWQKICAgICAqCiAgICAgKiBTa2lwIChvZmZzZXQpIHRoZXNlIG51bWJlciBvZiBlbGVtZW50cyB0aGF0IG90aGVyd2lzZSB3b3VsZCBiZSByZXR1cm5lZCBieSB0aGUgZmluZCBvcGVyYXRpb24uIFVzZSB3aXRoIHRoZSBsaW1pdCgpIG1ldGhvZC4KICAgICAqIERlZmluaW5nIGFuIG9mZnNldCBsYXJnZXIgdGhhbiB0aGUgcmVzdWx0IHNldCBzaXplIHJlc3VsdHMgaW4gYW4gZW1wdHkgc2V0LgogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sbGVjdGlvbmZpbmQub2Zmc2V0LnBocAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHBvc2l0aW9uCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXENvbGxlY3Rpb25GaW5kCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXQoaW50ICRwb3NpdGlvbik6IENvbGxlY3Rpb25GaW5kIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIHNvcnRpbmcgY3JpdGVyaWEKICAgICAqCiAgICAgKiBTb3J0IHRoZSByZXN1bHQgc2V0IGJ5IHRoZSBmaWVsZCBzZWxlY3RlZCBpbiB0aGUgc29ydF9leHByIGFyZ3VtZW50LiBUaGUgYWxsb3dlZCBvcmRlcnMgYXJlIEFTQyAoQXNjZW5kaW5nKSBvciBERVNDIChEZXNjZW5kaW5nKS4gVGhpcyBvcGVyYXRpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgJ09SREVSIEJZJyBTUUwgb3BlcmF0aW9uIGFuZCBpdCBmb2xsb3dzIHRoZSBzYW1lIHNldCBvZiBydWxlcy4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb25maW5kLnNvcnQucGhwCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc29ydF9leHByCiAgICAgKiBAcmV0dXJuIENvbGxlY3Rpb25GaW5kCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0KHN0cmluZyAkc29ydF9leHByKTogQ29sbGVjdGlvbkZpbmQge30KfQoKLyoqCiAqIENsYXNzIENvbGxlY3Rpb25Nb2RpZnkKICogQHBhY2thZ2UgbXlzcWxfeGRldmFwaQogKi8KY2xhc3MgQ29sbGVjdGlvbk1vZGlmeSBpbXBsZW1lbnRzIFxteXNxbF94ZGV2YXBpXEV4ZWN1dGFibGUsIFxteXNxbF94ZGV2YXBpXENydWRPcGVyYXRpb25CaW5kYWJsZSwgXG15c3FsX3hkZXZhcGlcQ3J1ZE9wZXJhdGlvbkxpbWl0YWJsZSwgXG15c3FsX3hkZXZhcGlcQ3J1ZE9wZXJhdGlvblNraXBwYWJsZSwgXG15c3FsX3hkZXZhcGlcQ3J1ZE9wZXJhdGlvblNvcnRhYmxlCnsKICAgIC8qKgogICAgICogQWRkIGFuIGVsZW1lbnQgdG8gYSBkb2N1bWVudCdzIGZpZWxkLCBhcyBtdWx0aXBsZSBlbGVtZW50cyBvZiBhIGZpZWxkIGFyZSByZXByZXNlbnRlZCBhcyBhbiBhcnJheS4gVW5saWtlIGFycmF5SW5zZXJ0KCksIGFycmF5QXBwZW5kKCkgYWx3YXlzIGFwcGVuZHMgdGhlIG5ldyBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5LCB3aGVyZWFzIGFycmF5SW5zZXJ0KCkgY2FuIGRlZmluZSB0aGUgbG9jYXRpb24uCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb25tb2RpZnkuYXJyYXlhcHBlbmQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb2xsZWN0aW9uX2ZpZWxkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRleHByZXNzaW9uX29yX2xpdGVyYWwKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcQ29sbGVjdGlvbk1vZGlmeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXJyYXlBcHBlbmQoc3RyaW5nICRjb2xsZWN0aW9uX2ZpZWxkLCBzdHJpbmcgJGV4cHJlc3Npb25fb3JfbGl0ZXJhbCk6IENvbGxlY3Rpb25Nb2RpZnkge30KCiAgICAvKioKICAgICAqIEFkZCBhbiBlbGVtZW50IHRvIGEgZG9jdW1lbnQncyBmaWVsZCwgYXMgbXVsdGlwbGUgZWxlbWVudHMgb2YgYSBmaWVsZCBhcmUgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkuIFVubGlrZSBhcnJheUFwcGVuZCgpLCBhcnJheUluc2VydCgpIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB3aGVyZSB0aGUgbmV3IGVsZW1lbnQgaXMgaW5zZXJ0ZWQgYnkgZGVmaW5pbmcgd2hpY2ggaXRlbSBpdCBpcyBhZnRlciwgd2hlcmVhcyBhcnJheUFwcGVuZCgpIGFsd2F5cyBhcHBlbmRzIHRoZSBuZXcgZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sbGVjdGlvbm1vZGlmeS5hcnJheWluc2VydC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbGxlY3Rpb25fZmllbGQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGV4cHJlc3Npb25fb3JfbGl0ZXJhbAogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxDb2xsZWN0aW9uTW9kaWZ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcnJheUluc2VydChzdHJpbmcgJGNvbGxlY3Rpb25fZmllbGQsIHN0cmluZyAkZXhwcmVzc2lvbl9vcl9saXRlcmFsKTogQ29sbGVjdGlvbk1vZGlmeSB7fQoKICAgIC8qKgogICAgICogQmluZCBhIHBhcmFtZXRlciB0byB0aGUgcGxhY2Vob2xkZXIgaW4gdGhlIHNlYXJjaCBjb25kaXRpb24gb2YgdGhlIG1vZGlmeSBvcGVyYXRpb24uCiAgICAgKiBUaGUgcGxhY2Vob2xkZXIgaGFzIHRoZSBmb3JtIG9mIDpOQU1FIHdoZXJlICc6JyBpcyBhIGNvbW1vbiBwcmVmaXggdGhhdCBtdXN0IGFsd2F5cyBleGlzdHMgYmVmb3JlIGFueSBOQU1FIHdoZXJlIE5BTUUgaXMgdGhlIG5hbWUgb2YgdGhlIHBsYWNlaG9sZGVyLiBUaGUgYmluZCBtZXRob2QgYWNjZXB0cyBhIGxpc3Qgb2YgcGxhY2Vob2xkZXJzIGlmIG11bHRpcGxlIGVudGl0aWVzIGhhdmUgdG8gYmUgc3Vic3RpdHV0ZWQgaW4gdGhlIHNlYXJjaCBjb25kaXRpb24gb2YgdGhlIG1vZGlmeSBvcGVyYXRpb24uCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb25tb2RpZnkuYmluZC5waHAKICAgICAqIEBwYXJhbSBhcnJheSAkcGxhY2Vob2xkZXJfdmFsdWVzCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXENvbGxlY3Rpb25Nb2RpZnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJpbmQoYXJyYXkgJHBsYWNlaG9sZGVyX3ZhbHVlcyk6IENvbGxlY3Rpb25Nb2RpZnkge30KCiAgICAvKioKICAgICAqIFRoZSBleGVjdXRlIG1ldGhvZCBpcyByZXF1aXJlZCB0byBzZW5kIHRoZSBDUlVEIG9wZXJhdGlvbiByZXF1ZXN0IHRvIHRoZSBNeVNRTCBzZXJ2ZXIuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb25tb2RpZnkuZXhlY3V0ZS5waHAKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCk6IFJlc3VsdCB7fQoKICAgIC8qKgogICAgICogTGltaXQgdGhlIG51bWJlciBvZiBkb2N1bWVudHMgbW9kaWZpZWQgYnkgdGhpcyBvcGVyYXRpb24uIE9wdGlvbmFsbHkgY29tYmluZSB3aXRoIHNraXAoKSB0byBkZWZpbmUgYW4gb2Zmc2V0IHZhbHVlLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9ubW9kaWZ5LmxpbWl0LnBocAogICAgICogQHBhcmFtIGludCAkcm93cwogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxDb2xsZWN0aW9uTW9kaWZ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaW1pdChpbnQgJHJvd3MpOiBDb2xsZWN0aW9uTW9kaWZ5IHt9CgogICAgLyoqCiAgICAgKiBUYWtlcyBhIHBhdGNoIG9iamVjdCBhbmQgYXBwbGllcyBpdCBvbiBvbmUgb3IgbW9yZSBkb2N1bWVudHMsIGFuZCBjYW4gdXBkYXRlIG11bHRpcGxlIGRvY3VtZW50IHByb3BlcnRpZXMuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb25tb2RpZnkucGF0Y2gucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkb2N1bWVudAogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxDb2xsZWN0aW9uTW9kaWZ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXRjaChzdHJpbmcgJGRvY3VtZW50KTogQ29sbGVjdGlvbk1vZGlmeSB7fQoKICAgIC8qKgogICAgICogUmVwbGFjZSAodXBkYXRlKSBhIGdpdmVuIGZpZWxkIHZhbHVlIHdpdGggYSBuZXcgb25lLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9ubW9kaWZ5LnJlcGxhY2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb2xsZWN0aW9uX2ZpZWxkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRleHByZXNzaW9uX29yX2xpdGVyYWwKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcQ29sbGVjdGlvbk1vZGlmeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVwbGFjZShzdHJpbmcgJGNvbGxlY3Rpb25fZmllbGQsIHN0cmluZyAkZXhwcmVzc2lvbl9vcl9saXRlcmFsKTogQ29sbGVjdGlvbk1vZGlmeSB7fQoKICAgIC8qKgogICAgICogU2V0cyBvciB1cGRhdGVzIGF0dHJpYnV0ZXMgb24gZG9jdW1lbnRzIGluIGEgY29sbGVjdGlvbi4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sbGVjdGlvbm1vZGlmeS5zZXQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb2xsZWN0aW9uX2ZpZWxkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRleHByZXNzaW9uX29yX2xpdGVyYWwKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcQ29sbGVjdGlvbk1vZGlmeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KHN0cmluZyAkY29sbGVjdGlvbl9maWVsZCwgc3RyaW5nICRleHByZXNzaW9uX29yX2xpdGVyYWwpOiBDb2xsZWN0aW9uTW9kaWZ5IHt9CgogICAgLyoqCiAgICAgKiBTa2lwIHRoZSBmaXJzdCBOIGVsZW1lbnRzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIHJldHVybmVkIGJ5IGEgZmluZCBvcGVyYXRpb24uIElmIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgc2tpcHBlZCBpcyBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0IHNldCwgdGhlbiB0aGUgZmluZCBvcGVyYXRpb24gcmV0dXJucyBhbiBlbXB0eSBzZXQuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb25tb2RpZnkuc2tpcC5waHAKICAgICAqIEBwYXJhbSBpbnQgJHBvc2l0aW9uCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXENvbGxlY3Rpb25Nb2RpZnkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNraXAoaW50ICRwb3NpdGlvbik6IENvbGxlY3Rpb25Nb2RpZnkge30KCiAgICAvKioKICAgICAqIFNvcnQgdGhlIHJlc3VsdCBzZXQgYnkgdGhlIGZpZWxkIHNlbGVjdGVkIGluIHRoZSBzb3J0X2V4cHIgYXJndW1lbnQuIFRoZSBhbGxvd2VkIG9yZGVycyBhcmUgQVNDIChBc2NlbmRpbmcpIG9yIERFU0MgKERlc2NlbmRpbmcpLiBUaGlzIG9wZXJhdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSAnT1JERVIgQlknIFNRTCBvcGVyYXRpb24gYW5kIGl0IGZvbGxvd3MgdGhlIHNhbWUgc2V0IG9mIHJ1bGVzLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9ubW9kaWZ5LnNvcnQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzb3J0X2V4cHIKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcQ29sbGVjdGlvbk1vZGlmeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc29ydChzdHJpbmcgJHNvcnRfZXhwcik6IENvbGxlY3Rpb25Nb2RpZnkge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYXR0cmlidXRlcyBmcm9tIGRvY3VtZW50cyBpbiBhIGNvbGxlY3Rpb24uCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb25tb2RpZnkudW5zZXQucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJGZpZWxkcwogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxDb2xsZWN0aW9uTW9kaWZ5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnNldChhcnJheSAkZmllbGRzKTogQ29sbGVjdGlvbk1vZGlmeSB7fQp9CgpjbGFzcyBDb2xsZWN0aW9uUmVtb3ZlIGltcGxlbWVudHMgXG15c3FsX3hkZXZhcGlcRXhlY3V0YWJsZSwgXG15c3FsX3hkZXZhcGlcQ3J1ZE9wZXJhdGlvbkJpbmRhYmxlLCBcbXlzcWxfeGRldmFwaVxDcnVkT3BlcmF0aW9uTGltaXRhYmxlLCBcbXlzcWxfeGRldmFwaVxDcnVkT3BlcmF0aW9uU29ydGFibGUKewogICAgLyoqCiAgICAgKiBCaW5kIGEgcGFyYW1ldGVyIHRvIHRoZSBwbGFjZWhvbGRlciBpbiB0aGUgc2VhcmNoIGNvbmRpdGlvbiBvZiB0aGUgcmVtb3ZlIG9wZXJhdGlvbi4KICAgICAqIFRoZSBwbGFjZWhvbGRlciBoYXMgdGhlIGZvcm0gb2YgOk5BTUUgd2hlcmUgJzonIGlzIGEgY29tbW9uIHByZWZpeCB0aGF0IG11c3QgYWx3YXlzIGV4aXN0cyBiZWZvcmUgYW55IE5BTUUgd2hlcmUgTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUgcGxhY2Vob2xkZXIuIFRoZSBiaW5kIG1ldGhvZCBhY2NlcHRzIGEgbGlzdCBvZiBwbGFjZWhvbGRlcnMgaWYgbXVsdGlwbGUgZW50aXRpZXMgaGF2ZSB0byBiZSBzdWJzdGl0dXRlZCBpbiB0aGUgc2VhcmNoIGNvbmRpdGlvbiBvZiB0aGUgcmVtb3ZlIG9wZXJhdGlvbi4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sbGVjdGlvbnJlbW92ZS5iaW5kLnBocAogICAgICogQHBhcmFtIGFycmF5ICRwbGFjZWhvbGRlcl92YWx1ZXMKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcQ29sbGVjdGlvblJlbW92ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmluZChhcnJheSAkcGxhY2Vob2xkZXJfdmFsdWVzKTogQ29sbGVjdGlvblJlbW92ZSB7fQoKICAgIC8qKgogICAgICogVGhlIGV4ZWN1dGUgZnVuY3Rpb24gbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBvcmRlciB0byB0cmlnZ2VyIHRoZSBjbGllbnQgdG8gc2VuZCB0aGUgQ1JVRCBvcGVyYXRpb24gcmVxdWVzdCB0byB0aGUgc2VydmVyLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9ucmVtb3ZlLmV4ZWN1dGUucGhwCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpOiBSZXN1bHQge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRvY3VtZW50cyB0byByZW1vdmUuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbGxlY3Rpb25yZW1vdmUubGltaXQucGhwCiAgICAgKiBAcGFyYW0gaW50ICRyb3dzCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXENvbGxlY3Rpb25SZW1vdmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpbWl0KGludCAkcm93cyk6IENvbGxlY3Rpb25SZW1vdmUge30KCiAgICAvKioKICAgICAqIFNvcnQgdGhlIHJlc3VsdCBzZXQgYnkgdGhlIGZpZWxkIHNlbGVjdGVkIGluIHRoZSBzb3J0X2V4cHIgYXJndW1lbnQuIFRoZSBhbGxvd2VkIG9yZGVycyBhcmUgQVNDIChBc2NlbmRpbmcpIG9yIERFU0MgKERlc2NlbmRpbmcpLiBUaGlzIG9wZXJhdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSAnT1JERVIgQlknIFNRTCBvcGVyYXRpb24gYW5kIGl0IGZvbGxvd3MgdGhlIHNhbWUgc2V0IG9mIHJ1bGVzLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2xsZWN0aW9ucmVtb3ZlLnNvcnQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzb3J0X2V4cHIKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcQ29sbGVjdGlvblJlbW92ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc29ydChzdHJpbmcgJHNvcnRfZXhwcik6IENvbGxlY3Rpb25SZW1vdmUge30KfQoKLyoqCiAqIENsYXNzIENvbHVtblJlc3VsdAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwpjbGFzcyBDb2x1bW5SZXN1bHQKewogICAgLyoqCiAgICAgKiBHZXQgY2hhcmFjdGVyIHNldAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2x1bW5yZXN1bHQuZ2V0Y2hhcmFjdGVyc2V0bmFtZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDaGFyYWN0ZXJTZXROYW1lKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogR2V0IGNvbGxhdGlvbiBuYW1lCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbHVtbnJlc3VsdC5nZXRjb2xsYXRpb25uYW1lLnBocAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbGxhdGlvbk5hbWUoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXQgY29sdW1uIGxhYmVsCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbHVtbnJlc3VsdC5nZXRjb2x1bW5sYWJlbC5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2x1bW5MYWJlbCgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEdldCBjb2x1bW4gbmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2x1bW5yZXN1bHQuZ2V0Y29sdW1ubmFtZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2x1bW5OYW1lKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogR2V0IGZyYWN0aW9uYWwgZGlnaXQgbGVuZ3RoCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbHVtbnJlc3VsdC5nZXRmcmFjdGlvbmFsZGlnaXRzLnBocAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyYWN0aW9uYWxEaWdpdHMoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBHZXQgY29sdW1uIGZpZWxkIGxlbmd0aAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2x1bW5yZXN1bHQuZ2V0bGVuZ3RoLnBocAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExlbmd0aCgpOiBpbnQge30KCiAgICAvKioKICAgICAqIEdldCBzY2hlbWEgbmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2x1bW5yZXN1bHQuZ2V0c2NoZW1hbmFtZS5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTY2hlbWFOYW1lKCk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogR2V0IHRhYmxlIGxhYmVsCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbHVtbnJlc3VsdC5nZXR0YWJsZWxhYmVsLnBocAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRhYmxlTGFiZWwoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGFibGUgbmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2x1bW5yZXN1bHQuZ2V0dGFibGVuYW1lLnBocAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRhYmxlTmFtZSgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEdldCBjb2x1bW4gdHlwZQogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jb2x1bW5yZXN1bHQuZ2V0dHlwZS5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCk6IGludCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgc2lnbmVkIHR5cGUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY29sdW1ucmVzdWx0LmlzbnVtYmVyc2lnbmVkLnBocAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzTnVtYmVyU2lnbmVkKCk6IGludCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgcGFkZGVkCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNvbHVtbnJlc3VsdC5pc3BhZGRlZC5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1BhZGRlZCgpOiBpbnQge30KfQoKLyoqCiAqIEludGVyZmFjZSBDcnVkT3BlcmF0aW9uQmluZGFibGUKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubXlzcWwteGRldmFwaS1jcnVkb3BlcmF0aW9uYmluZGFibGUucGhwCiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCmludGVyZmFjZSBDcnVkT3BlcmF0aW9uQmluZGFibGUKewogICAgLyoqCiAgICAgKiBCaW5kcyBhIHZhbHVlIHRvIGEgc3BlY2lmaWMgcGxhY2Vob2xkZXIuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNydWRvcGVyYXRpb25iaW5kYWJsZS5iaW5kLnBocAogICAgICogQHBhcmFtIGFycmF5ICRwbGFjZWhvbGRlcl92YWx1ZXMKICAgICAqIEByZXR1cm4gQ3J1ZE9wZXJhdGlvbkJpbmRhYmxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiaW5kKGFycmF5ICRwbGFjZWhvbGRlcl92YWx1ZXMpOiBDcnVkT3BlcmF0aW9uQmluZGFibGU7Cn0KCi8qKgogKiBJbnRlcmZhY2UgQ3J1ZE9wZXJhdGlvbkxpbWl0YWJsZQogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5teXNxbC14ZGV2YXBpLWNydWRvcGVyYXRpb25saW1pdGFibGUucGhwCiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCmludGVyZmFjZSBDcnVkT3BlcmF0aW9uTGltaXRhYmxlCnsKICAgIC8qKgogICAgICogU2V0IHJlc3VsdCBsaW1pdAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1jcnVkb3BlcmF0aW9ubGltaXRhYmxlLmxpbWl0LnBocAogICAgICogQHBhcmFtIGludCAkcm93cwogICAgICogQHJldHVybiBDcnVkT3BlcmF0aW9uTGltaXRhYmxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaW1pdChpbnQgJHJvd3MpOiBDcnVkT3BlcmF0aW9uTGltaXRhYmxlOwp9CgovKioKICogSW50ZXJmYWNlIENydWRPcGVyYXRpb25Ta2lwcGFibGUKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubXlzcWwteGRldmFwaS1jcnVkb3BlcmF0aW9uc2tpcHBhYmxlLnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwppbnRlcmZhY2UgQ3J1ZE9wZXJhdGlvblNraXBwYWJsZQp7CiAgICAvKioKICAgICAqIE51bWJlciBvZiBvcGVyYXRpb25zIHRvIHNraXAKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktY3J1ZG9wZXJhdGlvbnNraXBwYWJsZS5za2lwLnBocAogICAgICogQHBhcmFtIGludCAkc2tpcAogICAgICogQHJldHVybiBDcnVkT3BlcmF0aW9uU2tpcHBhYmxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBza2lwKGludCAkc2tpcCk6IENydWRPcGVyYXRpb25Ta2lwcGFibGU7Cn0KCi8qKgogKiBJbnRlcmZhY2UgQ3J1ZE9wZXJhdGlvblNvcnRhYmxlCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLm15c3FsLXhkZXZhcGktY3J1ZG9wZXJhdGlvbnNvcnRhYmxlLnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwppbnRlcmZhY2UgQ3J1ZE9wZXJhdGlvblNvcnRhYmxlCnsKICAgIC8qKgogICAgICogU29ydCByZXN1bHRzCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWNydWRvcGVyYXRpb25zb3J0YWJsZS5zb3J0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc29ydF9leHByCiAgICAgKiBAcmV0dXJuIENydWRPcGVyYXRpb25Tb3J0YWJsZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc29ydChzdHJpbmcgJHNvcnRfZXhwcik6IENydWRPcGVyYXRpb25Tb3J0YWJsZTsKfQoKLyoqCiAqIEludGVyZmFjZSBEYXRhYmFzZU9iamVjdAogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5teXNxbC14ZGV2YXBpLWRhdGFiYXNlb2JqZWN0LnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwppbnRlcmZhY2UgRGF0YWJhc2VPYmplY3QKewogICAgLyoqCiAgICAgKiBDaGVjayBpZiBvYmplY3QgZXhpc3RzIGluIGRhdGFiYXNlCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWRhdGFiYXNlb2JqZWN0LmV4aXN0c2luZGF0YWJhc2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4aXN0c0luRGF0YWJhc2UoKTogYm9vbDsKCiAgICAvKioKICAgICAqIEdldCBvYmplY3QgbmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1kYXRhYmFzZW9iamVjdC5nZXRuYW1lLnBocAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKTogc3RyaW5nOwoKICAgIC8qKgogICAgICogR2V0IHNlc3Npb24gbmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1kYXRhYmFzZW9iamVjdC5nZXRzZXNzaW9uLnBocAogICAgICogQHJldHVybiAgXG15c3FsX3hkZXZhcGlcU2Vzc2lvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbigpOiBTZXNzaW9uOwp9CgovKioKICogQ2xhc3MgRG9jUmVzdWx0CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLm15c3FsLXhkZXZhcGktZG9jcmVzdWx0LnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwpjbGFzcyBEb2NSZXN1bHQgaW1wbGVtZW50cyBcbXlzcWxfeGRldmFwaVxCYXNlUmVzdWx0LCBcVHJhdmVyc2FibGUKewogICAgLyoqCiAgICAgKiBHZXQgYWxsIHJvd3MKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktZG9jcmVzdWx0LmZldGNoYWxsLnBocAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2hBbGwoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEZldGNoIG9uZSByZXN1bHQgZnJvbSBhIHJlc3VsdCBzZXQuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWRvY3Jlc3VsdC5mZXRjaG9uZS5waHAKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZldGNoT25lKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBGZXRjaGVzIHdhcm5pbmdzIGdlbmVyYXRlZCBieSBNeVNRTCBzZXJ2ZXIncyBsYXN0IG9wZXJhdGlvbi4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktZG9jcmVzdWx0LmdldHdhcm5pbmdzLnBocAogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxXYXJuaW5nW10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFdhcm5pbmdzKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2FybmluZ3MgcmFpc2VkIGJ5IHRoZSBsYXN0IG9wZXJhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGVzZSB3YXJuaW5ncyBhcmUgcmFpc2VkIGJ5IHRoZSBNeVNRTCBzZXJ2ZXIuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLWRvY3Jlc3VsdC5nZXR3YXJuaW5nc2NvdW50LnBocAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFdhcm5pbmdzQ291bnQoKTogaW50IHt9Cn0KCi8qKgogKiBDbGFzcyBFeGNlcHRpb24KICogQHBhY2thZ2UgbXlzcWxfeGRldmFwaQogKi8KY2xhc3MgRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBcVGhyb3dhYmxlIHt9CgovKioKICogSW50ZXJmYWNlIEV4ZWN1dGFibGUKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubXlzcWwteGRldmFwaS1leGNlcHRpb24ucGhwCiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCmludGVyZmFjZSBFeGVjdXRhYmxlCnsKICAgIC8qKgogICAgICogRXhlY3V0ZSBzdGF0ZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLm15c3FsLXhkZXZhcGktZXhlY3V0YWJsZS5waHAKICAgICAqIEByZXR1cm4gUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCk6IFJlc3VsdDsKfQoKLyoqCiAqIENsYXNzIEV4ZWN1dGlvblN0YXR1cwogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5teXNxbC14ZGV2YXBpLWV4ZWN1dGlvbnN0YXR1cy5waHAKICogQHBhY2thZ2UgbXlzcWxfeGRldmFwaQogKi8KY2xhc3MgRXhlY3V0aW9uU3RhdHVzCnsKICAgIHB1YmxpYyAkYWZmZWN0ZWRJdGVtczsKICAgIHB1YmxpYyAkbWF0Y2hlZEl0ZW1zOwogICAgcHVibGljICRmb3VuZEl0ZW1zOwogICAgcHVibGljICRsYXN0SW5zZXJ0SWQ7CiAgICBwdWJsaWMgJGxhc3REb2N1bWVudElkOwp9CgovKioKICogQ2xhc3MgRXhwcmVzc2lvbgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5teXNxbC14ZGV2YXBpLWV4cHJlc3Npb24ucGhwCiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCmNsYXNzIEV4cHJlc3Npb24KewogICAgLyogUHJvcGVydGllcyAqLwogICAgcHVibGljICRuYW1lOwoKICAgIC8qIENvbnN0cnVjdG9yICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRleHByZXNzaW9uKSB7fQp9CgovKioKICogQ2xhc3MgUmVzdWx0CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLm15c3FsLXhkZXZhcGktcmVzdWx0LnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwpjbGFzcyBSZXN1bHQgaW1wbGVtZW50cyBcbXlzcWxfeGRldmFwaVxCYXNlUmVzdWx0LCBcVHJhdmVyc2FibGUKewogICAgLyoqCiAgICAgKiBHZXQgdGhlIGxhc3QgQVVUT19JTkNSRU1FTlQgdmFsdWUgKGxhc3QgaW5zZXJ0IGlkKS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktcmVzdWx0LmdldGF1dG9pbmNyZW1lbnR2YWx1ZS5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRvSW5jcmVtZW50VmFsdWUoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBGZXRjaCB0aGUgZ2VuZXJhdGVkIF9pZCB2YWx1ZXMgZnJvbSB0aGUgbGFzdCBvcGVyYXRpb24uIFRoZSB1bmlxdWUgX2lkIGZpZWxkIGlzIGdlbmVyYXRlZCBieSB0aGUgTXlTUUwgc2VydmVyLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1yZXN1bHQuZ2V0Z2VuZXJhdGVkaWRzLnBocAogICAgICogQHJldHVybiBzdHJpbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0R2VuZXJhdGVkSWRzKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB3YXJuaW5ncyBmcm9tIHRoZSBsYXN0IFJlc3VsdCBvcGVyYXRpb24uCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXJlc3VsdC5nZXR3YXJuaW5ncy5waHAKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcV2FybmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRXYXJuaW5ncygpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIG51bWJlciBvZiB3YXJuaW5ncyBmcm9tIHRoZSBsYXN0IFJlc3VsdCBvcGVyYXRpb24uCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXJlc3VsdC5nZXR3YXJuaW5nc2NvdW50LnBocAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFdhcm5pbmdzQ291bnQoKTogaW50IHt9Cn0KCi8qKgogKiBDbGFzcyBSb3dSZXN1bHQKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubXlzcWwteGRldmFwaS1yb3dyZXN1bHQucGhwCiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCmNsYXNzIFJvd1Jlc3VsdCBpbXBsZW1lbnRzIFxteXNxbF94ZGV2YXBpXEJhc2VSZXN1bHQsIFxUcmF2ZXJzYWJsZQp7CiAgICAvKioKICAgICAqIEZldGNoIGFsbCB0aGUgcm93cyBmcm9tIHRoZSByZXN1bHQgc2V0LgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1yb3dyZXN1bHQuZmV0Y2hhbGwucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5IEEgbnVtZXJpY2FsIGFycmF5IHdpdGggYWxsIHJlc3VsdHMgZnJvbSB0aGUgcXVlcnk7IGVhY2ggcmVzdWx0IGlzIGFuIGFzc29jaWF0aXZlIGFycmF5LiBBbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZCBpZiBubyByb3dzIGFyZSBwcmVzZW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2hBbGwoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEZldGNoIG9uZSByZXN1bHQgZnJvbSB0aGUgcmVzdWx0IHNldC4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktcm93cmVzdWx0LmZldGNob25lLnBocAogICAgICogQHJldHVybiBhcnJheSBUaGUgcmVzdWx0LCBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvciBOVUxMIGlmIG5vIHJlc3VsdHMgYXJlIHByZXNlbnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaE9uZSgpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGNvbHVtbiBjb3VudCBmb3IgY29sdW1ucyBwcmVzZW50IGluIHRoZSByZXN1bHQgc2V0LgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1yb3dyZXN1bHQuZ2V0Y29sdW1uY291bnQucGhwCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29sdW1uc0NvdW50KCk6IGludCB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgY29sdW1uIG5hbWVzIGZvciBjb2x1bW5zIHByZXNlbnQgaW4gdGhlIHJlc3VsdCBzZXQuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXJvd3Jlc3VsdC5nZXRjb2x1bW5uYW1lcy5waHAKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbHVtbk5hbWVzKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBjb2x1bW4gbWV0YWRhdGEgZm9yIGNvbHVtbnMgcHJlc2VudCBpbiB0aGUgcmVzdWx0IHNldC4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktcm93cmVzdWx0LmdldGNvbHVtbnMucGhwCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXEZpZWxkTWV0YWRhdGFbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29sdW1ucygpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogUmV0cmlldmUgd2FybmluZ3MgZnJvbSB0aGUgbGFzdCBSb3dSZXN1bHQgb3BlcmF0aW9uLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1yb3dyZXN1bHQuZ2V0d2FybmluZ3MucGhwCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFdhcm5pbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0V2FybmluZ3MoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBudW1iZXIgb2Ygd2FybmluZ3MgZnJvbSB0aGUgbGFzdCBSb3dSZXN1bHQgb3BlcmF0aW9uLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1yb3dyZXN1bHQuZ2V0d2FybmluZ3Njb3VudC5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRXYXJuaW5nc0NvdW50KCk6IGludCB7fQp9CgovKioKICogQ2xhc3MgU2NoZW1hCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLm15c3FsLXhkZXZhcGktc2NoZW1hLnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwpjbGFzcyBTY2hlbWEgaW1wbGVtZW50cyBcbXlzcWxfeGRldmFwaVxEYXRhYmFzZU9iamVjdAp7CiAgICAvKiBQcm9wZXJ0aWVzICovCiAgICBwdWJsaWMgJG5hbWU7CgogICAgLyogTWV0aG9kcyAqLwogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBjb2xsZWN0aW9uIHdpdGhpbiB0aGUgc2NoZW1hLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zY2hlbWEuY3JlYXRlY29sbGVjdGlvbi5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcQ29sbGVjdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlQ29sbGVjdGlvbihzdHJpbmcgJG5hbWUpOiBDb2xsZWN0aW9uIHt9CgogICAgLyoqCiAgICAgKiBEcm9wIGNvbGxlY3Rpb24gZnJvbSBzY2hlbWEKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktc2NoZW1hLmRyb3Bjb2xsZWN0aW9uLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkY29sbGVjdGlvbl9uYW1lCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRyb3BDb2xsZWN0aW9uKHN0cmluZyAkY29sbGVjdGlvbl9uYW1lKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgZXhpc3RzIGluIGRhdGFiYXNlCiAgICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgb2JqZWN0IChzY2hlbWEsIHRhYmxlLCBjb2xsZWN0aW9uLCBvciB2aWV3KSBleGlzdHMgaW4gdGhlIHNjaGVtYSBvYmplY3QuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXNjaGVtYS5leGlzdHNpbmRhdGFiYXNlLnBocAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGlzdHNJbkRhdGFiYXNlKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEdldCBhIGNvbGxlY3Rpb24gZnJvbSB0aGUgc2NoZW1hLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zY2hlbWEuZ2V0Y29sbGVjdGlvbi5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcQ29sbGVjdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29sbGVjdGlvbihzdHJpbmcgJG5hbWUpOiBDb2xsZWN0aW9uIHt9CgogICAgLyoqCiAgICAgKiBHZXQgYSBjb2xsZWN0aW9uLCBidXQgYXMgYSBUYWJsZSBvYmplY3QgaW5zdGVhZCBvZiBhIENvbGxlY3Rpb24gb2JqZWN0LgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zY2hlbWEuZ2V0Y29sbGVjdGlvbmFzdGFibGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2xsZWN0aW9uQXNUYWJsZShzdHJpbmcgJG5hbWUpOiBUYWJsZSB7fQoKICAgIC8qKgogICAgICogRmV0Y2ggYSBsaXN0IG9mIGNvbGxlY3Rpb25zIGZvciB0aGlzIHNjaGVtYS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktc2NoZW1hLmdldGNvbGxlY3Rpb25zLnBocAogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxDb2xsZWN0aW9uW10gQXJyYXkgb2YgYWxsIGNvbGxlY3Rpb25zIGluIHRoaXMgc2NoZW1hLCB3aGVyZSBlYWNoIGFycmF5IGVsZW1lbnQgdmFsdWUgaXMgYSBDb2xsZWN0aW9uIG9iamVjdCB3aXRoIHRoZSBjb2xsZWN0aW9uIG5hbWUgYXMgdGhlIGtleS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbGxlY3Rpb25zKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHNjaGVtYS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktc2NoZW1hLmdldG5hbWUucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEdldCBhIG5ldyBTZXNzaW9uIG9iamVjdCBmcm9tIHRoZSBTY2hlbWEgb2JqZWN0LgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zY2hlbWEuZ2V0c2Vzc2lvbi5waHAKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcU2Vzc2lvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2Vzc2lvbigpOiBTZXNzaW9uIHt9CgogICAgLyoqCiAgICAgKiBGZXRjaCBhIFRhYmxlIG9iamVjdCBmb3IgdGhlIHByb3ZpZGVkIHRhYmxlIGluIHRoZSBzY2hlbWEuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXNjaGVtYS5nZXR0YWJsZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcVGFibGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRhYmxlKHN0cmluZyAkbmFtZSk6IFRhYmxlIHt9CgogICAgLyoqCiAgICAgKiBHZXQgc2NoZW1hIHRhYmxlcwogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zY2hlbWEuZ2V0dGFibGVzLnBocAogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxUYWJsZVtdIEFycmF5IG9mIGFsbCB0YWJsZXMgaW4gdGhpcyBzY2hlbWEsIHdoZXJlIGVhY2ggYXJyYXkgZWxlbWVudCB2YWx1ZSBpcyBhIFRhYmxlIG9iamVjdCB3aXRoIHRoZSB0YWJsZSBuYW1lIGFzIHRoZSBrZXkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUYWJsZXMoKTogYXJyYXkge30KfQoKLyoqCiAqIEludGVyZmFjZSBTY2hlbWFPYmplY3QKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubXlzcWwteGRldmFwaS1zY2hlbWFvYmplY3QucGhwCiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCmludGVyZmFjZSBTY2hlbWFPYmplY3QgZXh0ZW5kcyBcbXlzcWxfeGRldmFwaVxEYXRhYmFzZU9iamVjdAp7CiAgICAvKiBNZXRob2RzICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NoZW1hKCk6IFNjaGVtYTsKfQoKLyoqCiAqIENsYXNzIFNlc3Npb24KICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubXlzcWwteGRldmFwaS1zZXNzaW9uLnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwpjbGFzcyBTZXNzaW9uCnsKICAgIC8qKgogICAgICogQ2xvc2UgdGhlIHNlc3Npb24gd2l0aCB0aGUgc2VydmVyLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zZXNzaW9uLmNsb3NlLnBocAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBDb21taXQgdGhlIHRyYW5zYWN0aW9uLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zZXNzaW9uLmNvbW1pdC5waHAKICAgICAqIEByZXR1cm4gb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb21taXQoKTogb2JqZWN0IHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IHNjaGVtYS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktc2Vzc2lvbi5jcmVhdGVzY2hlbWEucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzY2hlbWFfbmFtZQogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxTY2hlbWEKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVNjaGVtYShzdHJpbmcgJHNjaGVtYV9uYW1lKTogU2NoZW1hIHt9CgogICAgLyoqCiAgICAgKiBEcm9wIGEgc2NoZW1hIChkYXRhYmFzZSkuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXNlc3Npb24uZHJvcHNjaGVtYS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNjaGVtYV9uYW1lCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRyb3BTY2hlbWEoc3RyaW5nICRzY2hlbWFfbmFtZSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEdlbmVyYXRlIGEgVW5pdmVyc2FsIFVuaXF1ZSBJRGVudGlmaWVyIChVVUlEKSBnZW5lcmF0ZWQgYWNjb3JkaW5nIHRvIMK7IFJGQyA0MTIyLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zZXNzaW9uLmdlbmVyYXRldXVpZC5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZVVVSUQoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXQgYSBuZXcgc2NoZW1hIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zZXNzaW9uLmdldHNjaGVtYS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNjaGVtYV9uYW1lCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFNjaGVtYQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NoZW1hKHN0cmluZyAkc2NoZW1hX25hbWUpOiBTY2hlbWEge30KCiAgICAvKioKICAgICAqIEdldCBzY2hlbWEgb2JqZWN0cyBmb3IgYWxsIHNjaGVtYXMgYXZhaWxhYmxlIHRvIHRoZSBzZXNzaW9uLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zZXNzaW9uLmdldHNjaGVtYXMucGhwCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFNjaGVtYVtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTY2hlbWFzKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgTXlTUUwgc2VydmVyIHZlcnNpb24gZm9yIHRoZSBzZXNzaW9uLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zZXNzaW9uLmdldHNlcnZlcnZlcnNpb24ucGhwCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyVmVyc2lvbigpOiBpbnQge30KCiAgICAvKioKICAgICAqIEdldCBhIGxpc3Qgb2YgY2xpZW50IGNvbm5lY3Rpb25zIHRvIHRoZSBzZXNzaW9uJ3MgTXlTUUwgc2VydmVyLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zZXNzaW9uLmxpc3RjbGllbnRzLnBocAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdENsaWVudHMoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEFkZCBxdW90ZXMKICAgICAqIEEgcXVvdGluZyBmdW5jdGlvbiB0byBlc2NhcGUgU1FMIG5hbWVzIGFuZCBpZGVudGlmaWVycy4gSXQgZXNjYXBlcyB0aGUgaWRlbnRpZmllciBnaXZlbiBpbiBhY2NvcmRhbmNlIHRvIHRoZSBzZXR0aW5ncyBvZiB0aGUgY3VycmVudCBjb25uZWN0aW9uLiBUaGlzIGVzY2FwZSBmdW5jdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgdG8gZXNjYXBlIHZhbHVlcy4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktc2Vzc2lvbi5xdW90ZW5hbWUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcXVvdGVOYW1lKHN0cmluZyAkbmFtZSk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogUmVsZWFzZSBhIHByZXZpb3VzbHkgc2V0IHNhdmVwb2ludC4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktc2Vzc2lvbi5yZWxlYXNlc2F2ZXBvaW50LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVsZWFzZVNhdmVwb2ludChzdHJpbmcgJG5hbWUpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBSb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24uCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXNlc3Npb24ucm9sbGJhY2sucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByb2xsYmFjaygpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBSb2xsYmFjayB0cmFuc2FjdGlvbiB0byBzYXZlcG9pbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktc2Vzc2lvbi5yb2xsYmFja3RvLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm9sbGJhY2tUbyhzdHJpbmcgJG5hbWUpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgc2F2ZXBvaW50IGZvciB0aGUgdHJhbnNhY3Rpb24uCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXNlc3Npb24uc2V0c2F2ZXBvaW50LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFNhdmVwb2ludChzdHJpbmcgJG5hbWUpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5hdGl2ZSBTUUwgc3RhdGVtZW50LiBQbGFjZWhvbGRlcnMgYXJlIHN1cHBvcnRlZCB1c2luZyB0aGUgbmF0aXZlICI/IiBzeW50YXguIFVzZSB0aGUgZXhlY3V0ZSBtZXRob2QgdG8gZXhlY3V0ZSB0aGUgU1FMIHN0YXRlbWVudC4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktc2Vzc2lvbi5zcWwucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWVyeQogICAgICogQHJldHVybiBTcWxTdGF0ZW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNxbChzdHJpbmcgJHF1ZXJ5KTogU3FsU3RhdGVtZW50IHt9CgogICAgLyoqCiAgICAgKiBTdGFydCBhIG5ldyB0cmFuc2FjdGlvbi4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktc2Vzc2lvbi5zdGFydHRyYW5zYWN0aW9uLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnRUcmFuc2FjdGlvbigpOiB2b2lkIHt9Cn0KCi8qKgogKiBDbGFzcyBTcWxTdGF0ZW1lbnQKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubXlzcWwteGRldmFwaS1zcWxzdGF0ZW1lbnQucGhwCiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCmNsYXNzIFNxbFN0YXRlbWVudAp7CiAgICAvKiBDb25zdGFudHMgKi8KICAgIHB1YmxpYyBjb25zdCBFWEVDVVRFX0FTWU5DID0gMTsKICAgIHB1YmxpYyBjb25zdCBCVUZGRVJFRCA9IDI7CgogICAgLyogUHJvcGVydGllcyAqLwogICAgcHVibGljICRzdGF0ZW1lbnQ7CgogICAgLyogTWV0aG9kcyAqLwogICAgLyoqCiAgICAgKiBCaW5kIHN0YXRlbWVudCBwYXJhbWV0ZXJzCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXNxbHN0YXRlbWVudC5iaW5kLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcGFyYW0KICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcU3FsU3RhdGVtZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiaW5kKHN0cmluZyAkcGFyYW0pOiBTcWxTdGF0ZW1lbnQge30KCiAgICAvKioKICAgICAqIEV4ZWN1dGUgdGhlIG9wZXJhdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zcWxzdGF0ZW1lbnQuZXhlY3V0ZS5waHAKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCk6IFJlc3VsdCB7fQoKICAgIC8qKgogICAgICogR2V0IG5leHQgcmVzdWx0CiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXNxbHN0YXRlbWVudC5nZXRuZXh0cmVzdWx0LnBocAogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5leHRSZXN1bHQoKTogUmVzdWx0IHt9CgogICAgLyoqCiAgICAgKiBHZXQgcmVzdWx0CiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXNxbHN0YXRlbWVudC5nZXRyZXN1bHQucGhwCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzdWx0KCk6IFJlc3VsdCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgZm9yIG1vcmUgcmVzdWx0cwogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zcWxzdGF0ZW1lbnQuaGFzbW9yZXJlc3VsdHMucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc01vcmVSZXN1bHRzKCk6IGJvb2wge30KfQoKLyoqCiAqIENsYXNzIFNxbFN0YXRlbWVudFJlc3VsdAogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5teXNxbC14ZGV2YXBpLXNxbHN0YXRlbWVudHJlc3VsdC5waHAKICogQHBhY2thZ2UgbXlzcWxfeGRldmFwaQogKi8KY2xhc3MgU3FsU3RhdGVtZW50UmVzdWx0IGltcGxlbWVudHMgXG15c3FsX3hkZXZhcGlcQmFzZVJlc3VsdCwgXFRyYXZlcnNhYmxlCnsKICAgIC8qIE1ldGhvZHMgKi8KICAgIC8qKgogICAgICogRmV0Y2ggYWxsIHRoZSByb3dzIGZyb20gdGhlIHJlc3VsdCBzZXQuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXNxbHN0YXRlbWVudHJlc3VsdC5mZXRjaGFsbC5waHAKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZldGNoQWxsKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBGZXRjaCBvbmUgcm93IGZyb20gdGhlIHJlc3VsdCBzZXQuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXNxbHN0YXRlbWVudHJlc3VsdC5mZXRjaG9uZS5waHAKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZldGNoT25lKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBHZXQgYWZmZWN0ZWQgcm93IGNvdW50CiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXNxbHN0YXRlbWVudHJlc3VsdC5nZXRhZmZlY3RlZGl0ZW1zY291bnQucGhwCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWZmZWN0ZWRJdGVtc0NvdW50KCk6IGludCB7fQoKICAgIC8qKgogICAgICogR2V0IGNvbHVtbiBjb3VudAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zcWxzdGF0ZW1lbnRyZXN1bHQuZ2V0Y29sdW1uY291bnQucGhwCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29sdW1uc0NvdW50KCk6IGludCB7fQoKICAgIC8qKgogICAgICogR2V0IGNvbHVtbiBuYW1lcwogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zcWxzdGF0ZW1lbnRyZXN1bHQuZ2V0Y29sdW1ubmFtZXMucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2x1bW5OYW1lcygpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogR2V0IGNvbHVtbnMKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktc3Fsc3RhdGVtZW50cmVzdWx0LmdldGNvbHVtbnMucGhwCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb2x1bW5zKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBHZXQgZ2VuZXJhdGVkIGlkcwogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zcWxzdGF0ZW1lbnRyZXN1bHQuZ2V0Z2VuZXJhdGVkaWRzLnBocAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0R2VuZXJhdGVkSWRzKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBHZXQgbGFzdCBpbnNlcnQgaWQKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktc3Fsc3RhdGVtZW50cmVzdWx0LmdldGxhc3RpbnNlcnRpZC5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0SW5zZXJ0SWQoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXQgd2FybmluZ3MgZnJvbSBsYXN0IG9wZXJhdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zcWxzdGF0ZW1lbnRyZXN1bHQuZ2V0d2FybmluZ3MucGhwCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFdhcm5pbmdbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0V2FybmluZ3MoKTogYXJyYXkge30KCiAgICAvKioKICAgICAqIEdldCB3YXJuaW5nIGNvdW50IGZyb20gbGFzdCBvcGVyYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktc3Fsc3RhdGVtZW50cmVzdWx0LmdldHdhcm5pbmdjb3VudC5waHAKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRXYXJuaW5nQ291bnRzKCk6IGludCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgcmVzdWx0IGhhcyBkYXRhCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXNxbHN0YXRlbWVudHJlc3VsdC5oYXNkYXRhLnBocAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNEYXRhKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEdldCBuZXh0IHJlc3VsdAogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS1zcWxzdGF0ZW1lbnRyZXN1bHQubmV4dHJlc3VsdC5waHAKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcUmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBuZXh0UmVzdWx0KCk6IFJlc3VsdCB7fQp9CgovKioKICogQ2xhc3MgU3RhdGVtZW50CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLm15c3FsLXhkZXZhcGktc3RhdGVtZW50LnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwpjbGFzcyBTdGF0ZW1lbnQKewogICAgLyogQ29uc3RhbnRzICovCiAgICBwdWJsaWMgY29uc3QgRVhFQ1VURV9BU1lOQyA9IDE7CiAgICBwdWJsaWMgY29uc3QgQlVGRkVSRUQgPSAyOwoKICAgIC8qIE1ldGhvZHMgKi8KICAgIC8qKgogICAgICogR2V0IG5leHQgcmVzdWx0CiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXN0YXRlbWVudC5nZXRuZXh0cmVzdWx0LnBocAogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5leHRSZXN1bHQoKTogUmVzdWx0IHt9CgogICAgLyoqCiAgICAgKiBHZXQgcmVzdWx0CiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXN0YXRlbWVudC5nZXRyZXN1bHQucGhwCiAgICAgKiBAcmV0dXJuIFJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzdWx0KCk6IFJlc3VsdCB7fQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgbW9yZSByZXN1bHRzCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXN0YXRlbWVudC5oYXNtb3JlcmVzdWx0cy5waHAKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzTW9yZVJlc3VsdHMoKTogYm9vbCB7fQp9CgovKioKICogQ2xhc3MgVGFibGUKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MubXlzcWwteGRldmFwaS10YWJsZS5waHAKICogQHBhY2thZ2UgbXlzcWxfeGRldmFwaQogKi8KY2xhc3MgVGFibGUgaW1wbGVtZW50cyBcbXlzcWxfeGRldmFwaVxTY2hlbWFPYmplY3QKewogICAgLyogUHJvcGVydGllcyAqLwogICAgcHVibGljICRuYW1lOwoKICAgIC8qIE1ldGhvZHMgKi8KICAgIC8qKgogICAgICogRmV0Y2ggdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGUuY291bnQucGhwCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBEZWxldGVzIHJvd3MgZnJvbSBhIHRhYmxlLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS10YWJsZS5kZWxldGUucGhwCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlRGVsZXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGUoKTogVGFibGVEZWxldGUge30KCiAgICAvKioKICAgICAqIFZlcmlmaWVzIGlmIHRoaXMgdGFibGUgZXhpc3RzIGluIHRoZSBkYXRhYmFzZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGUuZXhpc3RzaW5kYXRhYmFzZS5waHAKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhpc3RzSW5EYXRhYmFzZSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgZGF0YWJhc2Ugb2JqZWN0LgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS10YWJsZS5nZXRuYW1lLnBocAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBGZXRjaCB0aGUgc2NoZW1hIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFibGUuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXRhYmxlLmdldHNjaGVtYS5waHAKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcU2NoZW1hCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTY2hlbWEoKTogU2NoZW1hIHt9CgogICAgLyoqCiAgICAgKiBHZXQgc2Vzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYmxlLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS10YWJsZS5nZXRzZXNzaW9uLnBocAogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxTZXNzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZXNzaW9uKCk6IFNlc3Npb24ge30KCiAgICAvKioKICAgICAqIEluc2VydHMgcm93cyBpbnRvIGEgdGFibGUuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXRhYmxlLmluc2VydC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJGNvbHVtbnMgVGhlIGNvbHVtbnMgdG8gaW5zZXJ0IGRhdGEgaW50by4gQ2FuIGJlIGFuIGFycmF5IHdpdGggb25lIG9yIG1vcmUgdmFsdWVzLCBvciBhIHN0cmluZy4KICAgICAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gLi4uJGFkZGl0aW9uYWxDb2x1bW5zIEFkZGl0aW9uYWwgY29sdW1ucyBkZWZpbml0aW9ucy4KICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcVGFibGVJbnNlcnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluc2VydCgkY29sdW1ucywgLi4uJGFkZGl0aW9uYWxDb2x1bW5zKTogVGFibGVJbnNlcnQge30KCiAgICAvKioKICAgICAqIERldGVybWluZSBpZiB0aGUgdW5kZXJseWluZyBvYmplY3QgaXMgYSB2aWV3IG9yIG5vdC4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGUuaXN2aWV3LnBocAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1ZpZXcoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogRmV0Y2hlcyBkYXRhIGZyb20gYSB0YWJsZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGUuc2VsZWN0LnBocAogICAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkY29sdW1ucyBUaGUgY29sdW1ucyB0byBzZWxlY3QgZGF0YSBmcm9tLiBDYW4gYmUgYW4gYXJyYXkgd2l0aCBvbmUgb3IgbW9yZSB2YWx1ZXMsIG9yIGEgc3RyaW5nLgogICAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAuLi4kYWRkaXRpb25hbENvbHVtbnMgQWRkaXRpb25hbCBjb2x1bW5zIHBhcmFtZXRlciBkZWZpbml0aW9ucy4KICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcVGFibGVTZWxlY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlbGVjdCgkY29sdW1ucywgLi4uJGFkZGl0aW9uYWxDb2x1bW5zKTogVGFibGVTZWxlY3Qge30KCiAgICAvKioKICAgICAqIFVwZGF0ZXMgY29sdW1ucyBpbiBhIHRhYmxlLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS10YWJsZS51cGRhdGUucGhwCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlVXBkYXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1cGRhdGUoKTogVGFibGVVcGRhdGUge30KfQoKLyoqCiAqIENsYXNzIFRhYmxlRGVsZXRlCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLm15c3FsLXhkZXZhcGktdGFibGVkZWxldGUucGhwCiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCmNsYXNzIFRhYmxlRGVsZXRlIGltcGxlbWVudHMgXG15c3FsX3hkZXZhcGlcRXhlY3V0YWJsZQp7CiAgICAvKiBNZXRob2RzICovCiAgICAvKioKICAgICAqIEJpbmRzIGEgdmFsdWUgdG8gYSBzcGVjaWZpYyBwbGFjZWhvbGRlci4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGVkZWxldGUuYmluZC5waHAKICAgICAqIEBwYXJhbSBhcnJheSAkcGxhY2Vob2xkZXJfdmFsdWVzCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlRGVsZXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiaW5kKGFycmF5ICRwbGFjZWhvbGRlcl92YWx1ZXMpOiBUYWJsZURlbGV0ZSB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZSB0aGUgZGVsZXRlIHF1ZXJ5LgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS10YWJsZWRlbGV0ZS5leGVjdXRlLnBocAogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxSZXN1bHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoKTogUmVzdWx0IHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNvcmRzIG9yIGRvY3VtZW50cyB0byBkZWxldGUuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXRhYmxlZGVsZXRlLmxpbWl0LnBocAogICAgICogQHBhcmFtIGludCAkcm93cwogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxUYWJsZURlbGV0ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGltaXQoaW50ICRyb3dzKTogVGFibGVEZWxldGUge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgb3JkZXIgb3B0aW9ucyBmb3IgYSByZXN1bHQgc2V0LgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS10YWJsZWRlbGV0ZS5vcmRlcmJ5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkb3JkZXJieV9leHByCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlRGVsZXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcmRlcmJ5KHN0cmluZyAkb3JkZXJieV9leHByKTogVGFibGVEZWxldGUge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIHNlYXJjaCBjb25kaXRpb24gdG8gZmlsdGVyLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS10YWJsZWRlbGV0ZS53aGVyZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHdoZXJlX2V4cHIKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcVGFibGVEZWxldGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdoZXJlKHN0cmluZyAkd2hlcmVfZXhwcik6IFRhYmxlRGVsZXRlIHt9Cn0KCi8qKgogKiBDbGFzcyBUYWJsZUluc2VydAogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5teXNxbC14ZGV2YXBpLXRhYmxlaW5zZXJ0LnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwpjbGFzcyBUYWJsZUluc2VydCBpbXBsZW1lbnRzIFxteXNxbF94ZGV2YXBpXEV4ZWN1dGFibGUKewogICAgLyoqCiAgICAgKiBFeGVjdXRlIHRoZSBzdGF0ZW1lbnQuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXRhYmxlaW5zZXJ0LmV4ZWN1dGUucGhwCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFJlc3VsdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpOiBSZXN1bHQge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgdmFsdWVzIHRvIGJlIGluc2VydGVkLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS10YWJsZWluc2VydC52YWx1ZXMucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJHJvd192YWx1ZXMKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcVGFibGVJbnNlcnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbHVlcyhhcnJheSAkcm93X3ZhbHVlcyk6IFRhYmxlSW5zZXJ0IHt9Cn0KCi8qKgogKiBDbGFzcyBUYWJsZVNlbGVjdAogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5teXNxbC14ZGV2YXBpLXRhYmxlc2VsZWN0LnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwpjbGFzcyBUYWJsZVNlbGVjdCBpbXBsZW1lbnRzIFxteXNxbF94ZGV2YXBpXEV4ZWN1dGFibGUKewogICAgLyoqCiAgICAgKiBCaW5kcyBhIHZhbHVlIHRvIGEgc3BlY2lmaWMgcGxhY2Vob2xkZXIuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXRhYmxlc2VsZWN0LmJpbmQucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBsYWNlaG9sZGVyX3ZhbHVlcwogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxUYWJsZVNlbGVjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmluZChhcnJheSAkcGxhY2Vob2xkZXJfdmFsdWVzKTogVGFibGVTZWxlY3Qge30KCiAgICAvKioKICAgICAqIEV4ZWN1dGUgdGhlIHNlbGVjdCBzdGF0ZW1lbnQgYnkgY2hhaW5pbmcgaXQgd2l0aCB0aGUgZXhlY3V0ZSgpIG1ldGhvZC4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGVzZWxlY3QuZXhlY3V0ZS5waHAKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcUm93UmVzdWx0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCk6IFJvd1Jlc3VsdCB7fQoKICAgIC8qKgogICAgICogU2V0cyBhIGdyb3VwaW5nIGNyaXRlcmlhIGZvciB0aGUgcmVzdWx0IHNldC4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGVzZWxlY3QuZ3JvdXBieS5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkc29ydF9leHByCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlU2VsZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBncm91cEJ5KCRzb3J0X2V4cHIpOiBUYWJsZVNlbGVjdCB7fQoKICAgIC8qKgogICAgICogU2V0cyBhIGNvbmRpdGlvbiBmb3IgcmVjb3JkcyB0byBjb25zaWRlciBpbiBhZ2dyZWdhdGUgZnVuY3Rpb24gb3BlcmF0aW9ucy4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGVzZWxlY3QuaGF2aW5nLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc29ydF9leHByCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlU2VsZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXZpbmcoc3RyaW5nICRzb3J0X2V4cHIpOiBUYWJsZVNlbGVjdCB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVjb3JkcyBvciBkb2N1bWVudHMgdG8gcmV0dXJuLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS10YWJsZXNlbGVjdC5saW1pdC5waHAKICAgICAqIEBwYXJhbSBpbnQgJHJvd3MKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcVGFibGVTZWxlY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpbWl0KGludCAkcm93cyk6IFRhYmxlU2VsZWN0IHt9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIGEgcmVhZCBvcGVyYXRpb24gd2l0aCBFWENMVVNJVkUgTE9DSy4gT25seSBvbmUgbG9jayBjYW4gYmUgYWN0aXZlIGF0IGEgdGltZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGVzZWxlY3QubG9ja2V4Y2x1c2l2ZS5waHAKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkbG9ja193YWl0aW5nX29wdGlvbgogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxUYWJsZVNlbGVjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9ja0V4Y2x1c2l2ZSg/aW50ICRsb2NrX3dhaXRpbmdfb3B0aW9uKTogVGFibGVTZWxlY3Qge30KCiAgICAvKioKICAgICAqIEV4ZWN1dGUgYSByZWFkIG9wZXJhdGlvbiB3aXRoIFNIQVJFRCBMT0NLLiBPbmx5IG9uZSBsb2NrIGNhbiBiZSBhY3RpdmUgYXQgYSB0aW1lLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS10YWJsZXNlbGVjdC5sb2Nrc2hhcmVkLnBocAogICAgICogQHBhcmFtIGludHxudWxsICRsb2NrX3dhaXRpbmdfb3B0aW9uCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlU2VsZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2NrU2hhcmVkKD9pbnQgJGxvY2tfd2FpdGluZ19vcHRpb24pOiBUYWJsZVNlbGVjdCB7fQoKICAgIC8qKgogICAgICogU2tpcCBnaXZlbiBudW1iZXIgb2Ygcm93cyBpbiByZXN1bHQuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXRhYmxlc2VsZWN0Lm9mZnNldC5waHAKICAgICAqIEBwYXJhbSBpbnQgJHBvc2l0aW9uCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlU2VsZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXQoaW50ICRwb3NpdGlvbik6IFRhYmxlU2VsZWN0IHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBvcmRlciBieSBjcml0ZXJpYS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGVzZWxlY3Qub3JkZXJieS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gLi4uJHNvcnRfZXhwcgogICAgICogQHJldHVybiBcbXlzcWxfeGRldmFwaVxUYWJsZVNlbGVjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3JkZXJieSguLi4kc29ydF9leHByKTogVGFibGVTZWxlY3Qge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIHNlYXJjaCBjb25kaXRpb24gdG8gZmlsdGVyLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS10YWJsZXNlbGVjdC53aGVyZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHdoZXJlX2V4cHIKICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcVGFibGVTZWxlY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdoZXJlKHN0cmluZyAkd2hlcmVfZXhwcik6IFRhYmxlU2VsZWN0IHt9Cn0KCi8qKgogKiBDbGFzcyBUYWJsZVVwZGF0ZQogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5teXNxbC14ZGV2YXBpLXRhYmxldXBkYXRlLnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwpjbGFzcyBUYWJsZVVwZGF0ZSBpbXBsZW1lbnRzIFxteXNxbF94ZGV2YXBpXEV4ZWN1dGFibGUKewogICAgLyoqCiAgICAgKiBCaW5kIHVwZGF0ZSBxdWVyeSBwYXJhbWV0ZXJzCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXRhYmxldXBkYXRlLmJpbmQucGhwCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBsYWNlaG9sZGVyX3ZhbHVlcyBUaGUgbmFtZSBvZiB0aGUgcGxhY2Vob2xkZXIsIGFuZCB0aGUgdmFsdWUgdG8gYmluZCwgZGVmaW5lZCBhcyBhIEpTT04gYXJyYXkuCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlVXBkYXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiaW5kKGFycmF5ICRwbGFjZWhvbGRlcl92YWx1ZXMpOiBUYWJsZVVwZGF0ZSB7fQoKICAgIC8qKgogICAgICogRXhlY3V0ZXMgdGhlIHVwZGF0ZSBzdGF0ZW1lbnQuCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9teXNxbC14ZGV2YXBpLXRhYmxldXBkYXRlLmV4ZWN1dGUucGhwCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlVXBkYXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCk6IFRhYmxlVXBkYXRlIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlY29yZHMgb3IgZG9jdW1lbnRzIHVwZGF0ZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGV1cGRhdGUubGltaXQucGhwCiAgICAgKiBAcGFyYW0gaW50ICRyb3dzCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlVXBkYXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsaW1pdChpbnQgJHJvd3MpOiBUYWJsZVVwZGF0ZSB7fQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgc29ydGluZyBjcml0ZXJpYS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGV1cGRhdGUub3JkZXJieS5waHAKICAgICAqIEBwYXJhbSA/c3RyaW5nfD9zdHJpbmdbXSAuLi4kb3JkZXJieV9leHByIFRoZSBleHByZXNzaW9ucyB0aGF0IGRlZmluZSB0aGUgb3JkZXIgYnkgY3JpdGVyaWEuIENhbiBiZSBhbiBhcnJheSB3aXRoIG9uZSBvciBtb3JlIGV4cHJlc3Npb25zLCBvciBhIHN0cmluZy4KICAgICAqIEByZXR1cm4gXG15c3FsX3hkZXZhcGlcVGFibGVVcGRhdGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9yZGVyYnkoLi4uJG9yZGVyYnlfZXhwcik6IFRhYmxlVXBkYXRlIHt9CgogICAgLyoqCiAgICAgKiBVcGRhdGVzIHRoZSBjb2x1bW4gdmFsdWUgb24gcmVjb3JkcyBpbiBhIHRhYmxlLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vbXlzcWwteGRldmFwaS10YWJsZXVwZGF0ZS5zZXQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0YWJsZV9maWVsZAogICAgICogQHBhcmFtIHN0cmluZyAkZXhwcmVzc2lvbl9vcl9saXRlcmFsCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlVXBkYXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoc3RyaW5nICR0YWJsZV9maWVsZCwgc3RyaW5nICRleHByZXNzaW9uX29yX2xpdGVyYWwpOiBUYWJsZVVwZGF0ZSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBzZWFyY2ggY29uZGl0aW9uIHRvIGZpbHRlci4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL215c3FsLXhkZXZhcGktdGFibGV1cGRhdGUud2hlcmUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR3aGVyZV9leHByCiAgICAgKiBAcmV0dXJuIFxteXNxbF94ZGV2YXBpXFRhYmxlVXBkYXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aGVyZShzdHJpbmcgJHdoZXJlX2V4cHIpOiBUYWJsZVVwZGF0ZSB7fQp9CgovKioKICogQ2xhc3MgV2FybmluZwogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5teXNxbC14ZGV2YXBpLXdhcm5pbmcucGhwCiAqIEBwYWNrYWdlIG15c3FsX3hkZXZhcGkKICovCmNsYXNzIFdhcm5pbmcKewogICAgLyogUHJvcGVydGllcyAqLwogICAgcHVibGljICRtZXNzYWdlOwogICAgcHVibGljICRsZXZlbDsKICAgIHB1YmxpYyAkY29kZTsKCiAgICAvKiBDb25zdHJ1Y3RvciAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9Cn0KCi8qKgogKiBDbGFzcyBYU2Vzc2lvbgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5teXNxbC14ZGV2YXBpLXhzZXNzaW9uLnBocAogKiBAcGFja2FnZSBteXNxbF94ZGV2YXBpCiAqLwpjbGFzcyBYU2Vzc2lvbiB7fQo8P3BocAoKLyoqCiAqIFRoZSBjb25zdGFudHMgYmVsb3cgYXJlIGRlZmluZWQgYnkgdGhpcyBleHRlbnNpb24sCiAqIGFuZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIHdoZW4gdGhlIGV4dGVuc2lvbiBoYXMgZWl0aGVyIGJlZW4gY29tcGlsZWQgaW50byBQSFAgb3IgZHluYW1pY2FsbHkgbG9hZGVkIGF0IHJ1bnRpbWUuCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhci5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1lBUl9WRVJTSU9OJywgJzIuMi4wJyk7CmRlZmluZSgnWUFSX0NMSUVOVF9QUk9UT0NPTF9IVFRQJywgMSk7CmRlZmluZSgnWUFSX09QVF9QQUNLQUdFUicsIDEpOwpkZWZpbmUoJ1lBUl9PUFRfVElNRU9VVCcsIDQpOwpkZWZpbmUoJ1lBUl9PUFRfQ09OTkVDVF9USU1FT1VUJywgOCk7CmRlZmluZSgnWUFSX09QVF9QRVJTSVNURU5UJywgMik7Ci8qKgogKiBAc2luY2UgMi4wLjQKICovCmRlZmluZSgnWUFSX09QVF9IRUFERVInLCAxNik7CmRlZmluZSgnWUFSX1BBQ0tBR0VSX1BIUCcsICdQSFAnKTsKZGVmaW5lKCdZQVJfUEFDS0FHRVJfSlNPTicsICdKU09OJyk7CmRlZmluZSgnWUFSX0VSUl9PVVRQVVQnLCA4KTsKZGVmaW5lKCdZQVJfRVJSX09LRVknLCAwKTsKZGVmaW5lKCdZQVJfRVJSX1RSQU5TUE9SVCcsIDE2KTsKZGVmaW5lKCdZQVJfRVJSX1JFUVVFU1QnLCA0KTsKZGVmaW5lKCdZQVJfRVJSX1BST1RPQ09MJywgMik7CmRlZmluZSgnWUFSX0VSUl9QQUNLQUdFUicsIDEpOwpkZWZpbmUoJ1lBUl9FUlJfRVhDRVBUSU9OJywgNjQpOwoKZGVmaW5lKCdZQVJfQ0xJRU5UX1BST1RPQ09MX1RDUCcsIDIpOwpkZWZpbmUoJ1lBUl9DTElFTlRfUFJPVE9DT0xfVU5JWCcsIDQpOwoKZGVmaW5lKCdZQVJfT1BUX1JFU09MVkUnLCAzMik7Ci8qKgogKiBDbGFzcyBZYXJfU2VydmVyCiAqIERhdGUgMjAxOC82Lzkg5LiL5Y2IMzowMgogKiBAYXV0aG9yIHdlaXpoaW1pYW8wMDFAbGlhbmppYS5jb20KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MueWFyLXNlcnZlci5waHAKICovCmNsYXNzIFlhcl9TZXJ2ZXIKewogICAgcHJvdGVjdGVkICRfZXhlY3V0b3I7CgogICAgLyoqCiAgICAgKiBSZWdpc3RlciBhIHNlcnZlcgogICAgICogU2V0IHVwIGEgWWFyIEhUVFAgUlBDIFNlcnZlciwgQWxsIHRoZSBwdWJsaWMgbWV0aG9kcyBvZiAkb2JqIHdpbGwgYmUgcmVnaXN0ZXIgYXMgYSBSUEMgc2VydmljZS4KICAgICAqCiAgICAgKiBZYXJfU2VydmVyIGNvbnN0cnVjdG9yLgogICAgICogQHBhcmFtIG9iamVjdCAkb2JqIEFuIE9iamVjdCwgYWxsIHB1YmxpYyBtZXRob2RzIG9mIGl0cyB3aWxsIGJlIHJlZ2lzdGVyZWQgYXMgUlBDIHNlcnZpY2VzLgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFyLXNlcnZlci5jb25zdHJ1Y3QucGhwCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkb2JqLCAkcHJvdG9jb2wgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogU3RhcnQgUlBDIFNlcnZlcgogICAgICogU3RhcnQgYSBSUEMgSFRUUCBzZXJ2ZXIsIGFuZCByZWFkeSBmb3IgYWNjcGV0IFJQQyByZXF1ZXN0cy4KICAgICAqIE5vdGU6CiAgICAgKiAgVXN1YWwgUlBDIGNhbGxzIHdpbGwgYmUgaXNzdWVkIGFzIEhUVFAgUE9TVCByZXF1ZXN0cy4KICAgICAqICBJZiBhIEhUVFAgR0VUIHJlcXVlc3QgaXMgaXNzdWVkIHRvIHRoZSB1cmksCiAgICAgKiAgdGhlIHNlcnZpY2UgaW5mb3JtYXRpb24gKGNvbW1lbnRlZCBzZWN0aW9uIGFib3ZlKSB3aWxsIGJlIHByaW50ZWQgb24gdGhlIHBhZ2UKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFyLXNlcnZlci5oYW5kbGUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYW5kbGUoKSB7fQp9CgpjbGFzcyBZYXJfQ2xpZW50CnsKICAgIHByb3RlY3RlZCAkX3Byb3RvY29sOwogICAgcHJvdGVjdGVkICRfdXJpOwogICAgcHJvdGVjdGVkICRfb3B0aW9uczsKICAgIHByb3RlY3RlZCAkX3J1bm5pbmc7CgogICAgLyoqCiAgICAgKiBDYWxsIHNlcnZpY2UKICAgICAqIElzc3VlIGEgY2FsbCB0byByZW1vdGUgUlBDIG1ldGhvZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2QgUmVtb3RlIFJQQyBtZXRob2QgbmFtZS4KICAgICAqIEBwYXJhbSBhcnJheSAkcGFyYW1ldGVycyBQYXJhbWV0ZXJzLgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFyLWNsaWVudC5jYWxsLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jYWxsKCRtZXRob2QsICRwYXJhbWV0ZXJzKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgY2xpZW50CiAgICAgKiBZYXJfQ2xpZW50IGNvbnN0cnVjdG9yLgogICAgICogQHBhcmFtIHN0cmluZyAkdXJsIFlhciBTZXJ2ZXIgVVJMLgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFyLWNsaWVudC5jb25zdHJ1Y3QucGhwCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdXJsLCAkYXN5bmMgPSBudWxsKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYWxsKCRtZXRob2QsICRwYXJhbWV0ZXJzKSB7fQoKICAgIC8qKgogICAgICogU2V0IGNhbGxpbmcgY29udGV4dHMKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0eXBlIGl0IGNhbiBiZToKICAgICAqIC0gWUFSX09QVF9QQUNLQUdFUiwKICAgICAqIC0gWUFSX09QVF9QRVJTSVNURU5UIChOZWVkIHNlcnZlciBzdXBwb3J0KSwKICAgICAqIC0gWUFSX09QVF9USU1FT1VULAogICAgICogLSBZQVJfT1BUX0NPTk5FQ1RfVElNRU9VVAogICAgICogLSBZQVJfT1BUX0hFQURFUiAoU2luY2UgMi4wLjQpCiAgICAgKiBAcGFyYW0gJHZhbHVlCiAgICAgKiBAcmV0dXJuIHN0YXRpY3xmYWxzZSBSZXR1cm5zICR0aGlzIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhci1jbGllbnQuc2V0b3B0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3B0KCR0eXBlLCAkdmFsdWUpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE9wdCgkdHlwZSkge30KfQoKY2xhc3MgWWFyX0NvbmN1cnJlbnRfQ2xpZW50CnsKICAgIHByb3RlY3RlZCBzdGF0aWMgJF9jYWxsc3RhY2s7CiAgICBwcm90ZWN0ZWQgc3RhdGljICRfY2FsbGJhY2s7CiAgICBwcm90ZWN0ZWQgc3RhdGljICRfZXJyb3JfY2FsbGJhY2s7CiAgICBwcm90ZWN0ZWQgc3RhdGljICRfc3RhcnQ7CgogICAgLyoqCiAgICAgKiBSZWdpc3RlciBhIGNvbmN1cnJlbnQgY2FsbAogICAgICogQHBhcmFtIHN0cmluZyAkdXJpIFRoZSBSUEMgc2VydmVyIFVSSShodHRwLCB0Y3ApCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXRob2QgU2VydmljZSBuYW1lKGFrYSB0aGUgbWV0aG9kIG5hbWUpCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcmFtZXRlcnMgUGFyYW1ldGVycwogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBBIGZ1bmN0aW9uIGNhbGxiYWNrLCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGlsZSB0aGUgcmVzcG9uc2UgcmV0dXJuLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRlcnJvcl9jYWxsYmFjayBBIGZ1bmN0aW9uIGNhbGxiYWNrLCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGlsZSB0aGUgcmVzcG9uc2UgcmV0dXJuLgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zCiAgICAgKiBAcmV0dXJuIGludCBBbiB1bmlxdWUgaWQsIGNhbiBiZSB1c2VkIHRvIGlkZW50aWZpZWQgd2hpY2ggY2FsbCBpdCBpcy4KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhci1jb25jdXJyZW50LWNsaWVudC5jYWxsLnBocAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbGwoJHVyaSwgJG1ldGhvZCwgJHBhcmFtZXRlcnMsIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsIGNhbGxhYmxlICRlcnJvcl9jYWxsYmFjaywgYXJyYXkgJG9wdGlvbnMpIHt9CgogICAgLyoqCiAgICAgKiBTZW5kIGFsbCBjYWxscwogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogIElmIHRoaXMgY2FsbGJhY2sgaXMgc2V0LCB0aGVuIFlhciB3aWxsIGNhbGwgdGhpcyBjYWxsYmFjayBhZnRlciBhbGwgY2FsbHMgYXJlIHNlbnQgYW5kIGJlZm9yZSBhbnkgcmVzcG9uc2UgcmV0dXJuLCB3aXRoIGEgJGNhbGxpbmZvIE5VTEwuCiAgICAgKiAgVGhlbiwgaWYgdXNlciBkaWRuJ3Qgc3BlY2lmeSBjYWxsYmFjayB3aGVuIHJlZ2lzdGVyaW5nIGNvbmN1cnJlbnQgY2FsbCwgdGhpcyBjYWxsYmFjayB3aWxsIGJlIHVzZWQgdG8gaGFuZGxlIHJlc3BvbnNlLCBvdGhlcndpc2UsIHRoZSBjYWxsYmFjayBzcGVjaWZpZWQgd2hpbGUgcmVnaXN0ZXJpbmcgd2lsbCBiZSB1c2VkLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRlcnJvcl9jYWxsYmFjawogICAgICogIElmIHRoaXMgY2FsbGJhY2sgaXMgc2V0LCB0aGVuIFlhciB3aWxsIGNhbGwgdGhpcyBjYWxsYmFjayB3aGlsZSBlcnJvciBvY2N1cnJlZC4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFyLWNvbmN1cnJlbnQtY2xpZW50Lmxvb3AucGhwCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9vcCgkY2FsbGJhY2sgPSBudWxsLCAkZXJyb3JfY2FsbGJhY2sgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogQ2xlYW4gYWxsIHJlZ2lzdGVyZWQgY2FsbHMKICAgICAqIENsZWFuIGFsbCByZWdpc3RlcmVkIGNhbGxzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhci1jb25jdXJyZW50LWNsaWVudC5yZXNldC5waHAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNldCgpIHt9Cn0KCi8qKgogKiBDbGFzcyBZYXJfU2VydmVyX0V4Y2VwdGlvbgogKiBEYXRlIDIwMTgvNi85IOS4i+WNiDM6MDYKICogQGF1dGhvciB3ZWl6aGltaWFvMDAxQGxpYW5qaWEuY29tCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2NsYXNzLnlhci1zZXJ2ZXItZXhjZXB0aW9uLnBocAogKi8KY2xhc3MgWWFyX1NlcnZlcl9FeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24KewogICAgcHJvdGVjdGVkICRfdHlwZTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIGV4Y2VwdGlvbidzIHR5cGUKICAgICAqIEdldCB0aGUgZXhjZXB0aW9uIG9yaWdpbmFsIHR5cGUgdGhyZXcgYnkgc2VydmVyCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4veWFyLXNlcnZlci1leGNlcHRpb24uZ2V0dHlwZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKSB7fQp9CgovKioKICogQ2xhc3MgWWFyX0NsaWVudF9FeGNlcHRpb24KICogRGF0ZSAyMDE4LzYvOSDkuIvljYgzOjA1CiAqIEBhdXRob3Igd2VpemhpbWlhbzAwMUBsaWFuamlhLmNvbQogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9jbGFzcy55YXItY2xpZW50LWV4Y2VwdGlvbi5waHAKICovCmNsYXNzIFlhcl9DbGllbnRfRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogUmV0cmlldmUgZXhjZXB0aW9uJ3MgdHlwZQogICAgICogQHJldHVybiBzdHJpbmcgIllhcl9FeGNlcHRpb25fQ2xpZW50Ii4KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3lhci1jbGllbnQtZXhjZXB0aW9uLmdldHR5cGUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkge30KfQoKY2xhc3MgWWFyX1NlcnZlcl9SZXF1ZXN0X0V4Y2VwdGlvbiBleHRlbmRzIFlhcl9TZXJ2ZXJfRXhjZXB0aW9uIHt9CgpjbGFzcyBZYXJfU2VydmVyX1Byb3RvY29sX0V4Y2VwdGlvbiBleHRlbmRzIFlhcl9TZXJ2ZXJfRXhjZXB0aW9uIHt9CgpjbGFzcyBZYXJfU2VydmVyX1BhY2thZ2VyX0V4Y2VwdGlvbiBleHRlbmRzIFlhcl9TZXJ2ZXJfRXhjZXB0aW9uIHt9CgpjbGFzcyBZYXJfU2VydmVyX091dHB1dF9FeGNlcHRpb24gZXh0ZW5kcyBZYXJfU2VydmVyX0V4Y2VwdGlvbiB7fQoKY2xhc3MgWWFyX0NsaWVudF9UcmFuc3BvcnRfRXhjZXB0aW9uIGV4dGVuZHMgWWFyX0NsaWVudF9FeGNlcHRpb24ge30KCmNsYXNzIFlhcl9DbGllbnRfUGFja2FnZXJfRXhjZXB0aW9uIGV4dGVuZHMgWWFyX0NsaWVudF9FeGNlcHRpb24ge30KCmNsYXNzIFlhcl9DbGllbnRfUHJvdG9jb2xfRXhjZXB0aW9uIGV4dGVuZHMgWWFyX0NsaWVudF9FeGNlcHRpb24ge30KPD9waHAKCm5hbWVzcGFjZSB7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cRGVwcmVjYXRlZDsKCi8qKgogKiBBdHRhY2hlcyBhIGN1c3RvbSBhdHRyaWJ1dGUgKGtleS92YWx1ZSBwYWlyKSB0byB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgdGhlIGN1cnJlbnQgc3BhbiAoaWYgZW5hYmxlZCkuCiAqCiAqIEFkZCBhIGN1c3RvbSBhdHRyaWJ1dGUgKGEga2V5IGFuZCBhIHZhbHVlIGRhdGEgcGFpcikgdG8gdGhlIGN1cnJlbnQgd2ViIHRyYW5zYWN0aW9uLiAoVGhlIGNhbGwgbmFtZSBpcwogKiBuZXdyZWxpY19hZGRfY3VzdG9tX3BhcmFtZXRlciBiZWNhdXNlICJjdXN0b20gYXR0cmlidXRlcyIgd2VyZSBwcmV2aW91c2x5IGNhbGxlZCAiY3VzdG9tIHBhcmFtZXRlcnMuIikgRm9yCiAqIGV4YW1wbGUsCiAqIHlvdSBjYW4gYWRkIGEgY3VzdG9tZXIncyBmdWxsIG5hbWUgZnJvbSB5b3VyIGN1c3RvbWVyIGRhdGFiYXNlLiBUaGlzIGF0dHJpYnV0ZSBhcHBlYXJzIGluIGFueSB0cmFuc2FjdGlvbiB0cmFjZQogKiB0aGF0IHJlc3VsdHMgZnJvbSB0aGlzIHRyYW5zYWN0aW9uLiBZb3UgY2FuIGFsc28gcXVlcnkgdGhlIFRyYW5zYWN0aW9uIGV2ZW50IGZvciB5b3VyIGN1c3RvbSBhdHRyaWJ1dGVzLgogKgogKiBJZiB0aGUgdmFsdWUgZ2l2ZW4gaXMgYSBmbG9hdCB3aXRoIGEgdmFsdWUgb2YgTmFOLCBJbmZpbml0eSwgZGVub3JtIG9yIG5lZ2F0aXZlIHplcm8sIHRoZSBiZWhhdmlvciBvZiB0aGlzCiAqIGZ1bmN0aW9uCiAqIGlzIHVuZGVmaW5lZC4gRm9yIG90aGVyIGZsb2F0aW5nIHBvaW50IHZhbHVlcywgdGhlIGFnZW50IG1heSBkaXNjYXJkIDEgb3IgbW9yZSBiaXRzIG9mIHByZWNpc2lvbiAoVUxQcykgZnJvbSB0aGUKICogZ2l2ZW4gdmFsdWUuCiAqCiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyYW1ldGVyIHdhcyBhZGRlZCBzdWNjZXNzZnVsbHkuCiAqCiAqIEltcG9ydGFudDogSWYgeW91IHdhbnQgdG8gdXNlIHlvdXIgY3VzdG9tIGF0dHJpYnV0ZXMsIGF2b2lkIHVzaW5nIGFueSBvZiB0aGUgcmVzZXJ2ZWQgdGVybXMgdXNlZCBieSBOUlFMLgogKgogKiBAbGluayAgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY19hZGRfY3VzdG9tX3BhcmFtZXRlci8KICogQHNpbmNlIDQuNC41LjM1CiAqCiAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICAgJGtleSAgIFRoZSBuYW1lIG9mIHRoZSBjdXN0b20gYXR0cmlidXRlLiBPbmx5IHRoZSBmaXJzdCAyNTUgY2hhcmFjdGVycyBhcmUgcmV0YWluZWQuCiAqIEBwYXJhbSBib29sfGZsb2F0fGludHxzdHJpbmcgJHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGN1c3RvbSBhdHRyaWJ1dGUuCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gbmV3cmVsaWNfYWRkX2N1c3RvbV9wYXJhbWV0ZXIoc3RyaW5nICRrZXksIGJvb2x8ZmxvYXR8aW50fHN0cmluZyAkdmFsdWUpOiBib29sIHt9CgovKioKICogU3BlY2lmeSBmdW5jdGlvbnMgb3IgbWV0aG9kcyBmb3IgdGhlIGFnZW50IHRvIGluc3RydW1lbnQgd2l0aCBjdXN0b20gaW5zdHJ1bWVudGF0aW9uLgogKgogKiBTcGVjaWZ5IGZ1bmN0aW9ucyBvciBtZXRob2RzIGZvciB0aGUgYWdlbnQgdG8gdGFyZ2V0IGZvciBjdXN0b20gaW5zdHJ1bWVudGF0aW9uLiBUaGlzIGlzIHRoZSBBUEkgZXF1aXZhbGVudCBvZiB0aGUKICogbmV3cmVsaWMudHJhbnNhY3Rpb25fdHJhY2VyLmN1c3RvbSBzZXR0aW5nLiBZb3UgY2Fubm90IGFwcGx5IGN1c3RvbSB0cmFjaW5nIHRvIGludGVybmFsIFBIUCBmdW5jdGlvbnMuCiAqCiAqIFRoZSBuYW1lIGNhbiBiZSBmb3JtYXR0ZWQgZWl0aGVyIGFzIGZ1bmN0aW9uX25hbWUgZm9yIHByb2NlZHVyYWwgZnVuY3Rpb25zLCBvciBhcyAiQ2xhc3NOYW1lOjptZXRob2QiIGZvciBtZXRob2RzLgogKiBCb3RoIHN0YXRpYyBhbmQgaW5zdGFuY2UgbWV0aG9kcyB3aWxsIGJlIGluc3RydW1lbnRlZCBpZiB0aGUgbWV0aG9kIHN5bnRheCBpcyB1c2VkLCBhbmQgdGhlIGNsYXNzIG5hbWUgbXVzdCBiZQogKiBmdWxseSBxdWFsaWZpZWQ6IGl0IG11c3QgaW5jbHVkZSB0aGUgZnVsbCBuYW1lc3BhY2UgaWYgdGhlIGNsYXNzIHdhcyBkZWZpbmVkIHdpdGhpbiBhIG5hbWVzcGFjZS4KICoKICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0cnVlIGlmIHRoZSB0cmFjZXIgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseS4KICoKICogQGxpbmsgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY19hZGRfY3VzdG9tX3RyYWNlci8KICoKICogQHBhcmFtIHN0cmluZyAkZnVuY3Rpb25OYW1lCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gbmV3cmVsaWNfYWRkX2N1c3RvbV90cmFjZXIoc3RyaW5nICRmdW5jdGlvbk5hbWUpOiBib29sIHt9CgovKioKICogTWFudWFsbHkgc3BlY2lmeSB0aGF0IGEgdHJhbnNhY3Rpb24gaXMgYSBiYWNrZ3JvdW5kIGpvYiBvciBhIHdlYiB0cmFuc2FjdGlvbi4KICoKICogVGVsbCB0aGUgYWdlbnQgdG8gdHJlYXQgdGhpcyAid2ViIiB0cmFuc2FjdGlvbiBhcyBhICJub24td2ViIiB0cmFuc2FjdGlvbiAodGhlIEFQTSBVSSBzZXBhcmF0ZXMgd2ViIGFuZCBub24td2ViCiAqIHRyYW5zYWN0aW9ucywgZm9yIGV4YW1wbGUgaW4gdGhlIFRyYW5zYWN0aW9ucyBwYWdlKS4gQ2FsbCBhcyBlYXJseSBhcyBwb3NzaWJsZS4gVGhpcyBpcyBtb3N0IGNvbW1vbmx5IHVzZWQgZm9yCiAqIGNyb24KICogam9icyBvciBvdGhlciBsb25nLWxpdmVkIGJhY2tncm91bmQgdGFza3MuIEhvd2V2ZXIsIHRoaXMgY2FsbCBpcyB1c3VhbGx5IHVubmVjZXNzYXJ5IHNpbmNlIHRoZSBhZ2VudCB1c3VhbGx5CiAqIGRldGVjdHMgd2hldGhlciBhIHRyYW5zYWN0aW9uIGlzIGEgd2ViIG9yIG5vbi13ZWIgdHJhbnNhY3Rpb24gYXV0b21hdGljYWxseS4KICoKICogWW91IGNhbiBhbHNvIHJldmVyc2UgdGhlIGZ1bmN0aW9uYWxpdHkgYnkgc2V0dGluZyB0aGUgb3B0aW9uYWwgZmxhZyB0byBmYWxzZSwgd2hpY2ggbWFya3MgYSAibm9uLXdlYiIgdHJhbnNhY3Rpb24KICogYXMgYSAid2ViIiB0cmFuc2FjdGlvbi4KICoKICogQGxpbmsgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY19iYWNrZ3JvdW5kX2pvYi8KICoKICogQHBhcmFtIGJvb2wgJGZsYWcgW29wdGlvbmFsXQogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIG5ld3JlbGljX2JhY2tncm91bmRfam9iKGJvb2wgJGZsYWcgPSB0cnVlKTogdm9pZCB7fQoKLyoqCiAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBjYXB0dXJlIG9mIFVSTCBwYXJhbWV0ZXJzLgogKgogKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgY2FwdHVyZSBvZiBVUkwgcGFyYW1ldGVycyAoZXZlcnl0aGluZyBhZnRlciB0aGUgPyBpbiB0aGUgVVJMKS4gVGhpcyBvdmVycmlkZXMgdGhlCiAqIG5ld3JlbGljLmNhcHR1cmVfcGFyYW1zIGNvbmZpZyBmaWxlIHNldHRpbmcuCiAqCiAqIElNUE9SVEFOVDogSWYgeW91IHBhc3Mgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGRpcmVjdGx5IGluIHRoZSBVUkwsIGtlZXAgdGhpcyBkaXNhYmxlZC4KICoKICogQGxpbmsgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY19jYXB0dXJlX3BhcmFtcy8KICoKICogQHBhcmFtIGJvb2wgJGVuYWJsZV9mbGFnIFtvcHRpb25hbF0KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBuZXdyZWxpY19jYXB0dXJlX3BhcmFtcyhib29sICRlbmFibGVfZmxhZyA9IHRydWUpOiB2b2lkIHt9CgovKioKICogQWRkIGEgY3VzdG9tIG1ldHJpYyAoaW4gbWlsbGlzZWNvbmRzKSB0byB0aW1lIGEgY29tcG9uZW50IG9mIHlvdXIgYXBwIG5vdCBjYXB0dXJlZCBieSBkZWZhdWx0LgogKgogKiBOYW1lIHlvdXIgY3VzdG9tIG1ldHJpY3Mgd2l0aCBhIEN1c3RvbS8gcHJlZml4IChmb3IgZXhhbXBsZSwgQ3VzdG9tL015TWV0cmljKS4gVGhpcyBoZWxwcyB0aGUgVUkgb3JnYW5pemUgeW91cgogKiBjdXN0b20gbWV0cmljcyBpbiBvbmUgcGxhY2UsIGFuZCBpdCBtYWtlcyB0aGVtIGVhc2lseSBmaW5kYWJsZSB2aWEgdGhlIE1ldHJpYyBFeHBsb3Jlci4gUmVjb3JkcyB0aW1pbmcgaW4KICogbWlsbGlzZWNvbmRzLiBGb3IgZXhhbXBsZTogYSB2YWx1ZSBvZiA0IGlzIHN0b3JlZCBhcyAuMDA0IHNlY29uZHMgaW4gTmV3IFJlbGljJ3Mgc3lzdGVtcy4gSWYgdGhlIHZhbHVlIGlzIE5hTiwKICogSW5maW5pdHksIGRlbm9ybSBvciBuZWdhdGl2ZSB6ZXJvLCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiBpcyB1bmRlZmluZWQuIE5ldyBSZWxpYyBtYXkgZGlzY2FyZCAxIG9yIG1vcmUgYml0cwogKiBvZiBwcmVjaXNpb24gKFVMUHMpIGZyb20gdGhlIGdpdmVuIHZhbHVlLgogKgogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlIG1ldHJpYyB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5LgogKgogKiBAbGluayBodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3MvYWdlbnRzL3BocC1hZ2VudC9waHAtYWdlbnQtYXBpL25ld3JlbGljY3VzdG9tbWV0cmljLXBocC1hZ2VudC1hcGkvCiAqIEBzZWUgIGh0dHBzOi8vZG9jcy5uZXdyZWxpYy5jb20vZG9jcy9hZ2VudHMvbWFuYWdlLWFwbS1hZ2VudHMvYWdlbnQtZGF0YS9jdXN0b20tbWV0cmljcy8KICoKICogQHBhcmFtIHN0cmluZyAkbWV0cmljX25hbWUKICogQHBhcmFtIGZsb2F0ICAkdmFsdWUKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBuZXdyZWxpY19jdXN0b21fbWV0cmljKHN0cmluZyAkbWV0cmljX25hbWUsIGZsb2F0ICR2YWx1ZSk6IGJvb2wge30KCi8qKgogKiBEaXNhYmxlIGF1dG9tYXRpYyBpbmplY3Rpb24gb2YgdGhlIGJyb3dzZXIgbW9uaXRvcmluZyBzbmlwcGV0IG9uIHBhcnRpY3VsYXIgcGFnZXMuCiAqCiAqIFRoaXMgY2FsbCBkaXNhYmxlcyBhdXRvbWF0aWMgaW5qZWN0aW9uIG9mIHRoZSBicm93c2VyIG1vbml0b3JpbmcgYWdlbnQgZm9yIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLiBDYWxsIGFzIGVhcmx5CiAqIGFzIHBvc3NpYmxlLiBZb3UgY2FuIHVzZSB0aGlzIGNhbGwgdG8gcmVtb3ZlIHRoZSBKYXZhU2NyaXB0IGlmIHRoZSBpbnNlcnRpb24gaXMgY2F1c2luZyBwcm9ibGVtcyBvciBpZiB5b3UgYXJlCiAqIHNlcnZpbmcgcGFnZXMgdG8gdGhpcmQtcGFydHkgc2VydmljZXMgdGhhdCBkbyBub3QgYWxsb3cgSmF2YVNjcmlwdCAoZm9yIGV4YW1wbGUsIEdvb2dsZSdzIGFjY2VsZXJhdGVkIG1vYmlsZQogKiBwYWdlcykuCiAqCiAqIFJldHVybnMgdHJ1ZSBpZiBjYWxsZWQgd2l0aGluIGEgTmV3IFJlbGljIHRyYW5zYWN0aW9uLiBPdGhlcndpc2UgcmV0dXJucyBudWxsIGlmIG91dHNpZGUgYSB0cmFuc2FjdGlvbiAoZm9yCiAqIGV4YW1wbGUsIGlmIG5ld3JlbGljX2VuZF90cmFuc2FjdGlvbigpIGhhcyBiZWVuIGNhbGxlZCkuCiAqCiAqIEBsaW5rIGh0dHBzOi8vZG9jcy5uZXdyZWxpYy5jb20vZG9jcy9hZ2VudHMvcGhwLWFnZW50L3BocC1hZ2VudC1hcGkvbmV3cmVsaWNfZGlzYWJsZV9hdXRvcnVtLwogKgogKiBAcmV0dXJuIGJvb2x8bnVsbAogKi8KZnVuY3Rpb24gbmV3cmVsaWNfZGlzYWJsZV9hdXRvcnVtKCk6ID9ib29sIHt9CgojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICduZXdyZWxpY19jYXB0dXJlX3BhcmFtcygpJyldCmZ1bmN0aW9uIG5ld3JlbGljX2VuYWJsZV9wYXJhbXMoKSB7fQoKLyoqCiAqIFN0b3AgdGltaW5nIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLCBidXQgY29udGludWUgaW5zdHJ1bWVudGluZyBpdC4KICoKICogU3RvcCB0aW1pbmcgdGhlIHdlYiB0cmFuc2FjdGlvbiBpbW1lZGlhdGVseS4gVXNlZnVsIHdoZW4gYSBwYWdlIGlzIGRvbmUgd2l0aCBhcHAgY29kZSBhbmQgaXMgYWJvdXQgdG8gc3RyZWFtIGRhdGEKICogKGZpbGUgZG93bmxvYWQsIGF1ZGlvIG9yIHZpZGVvIHN0cmVhbWluZywgYW5kIHNvIG9uKSwgYW5kIHlvdSBkb24ndCB3YW50IHN0cmVhbWluZyB0aW1lIHRvIGNvdW50IGFzIHBhcnQgb2YgdGhlCiAqIHRyYW5zYWN0aW9uIHJ1biB0aW1lLiBUaGUgYWdlbnQgc2VuZHMgZGF0YSB0byB0aGUgZGFlbW9uIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLgogKgogKiBUaGlzIGlzIGVzcGVjaWFsbHkgcmVsZXZhbnQgd2hlbiB0aGUgdGltZSB0YWtlbiB0byBjb21wbGV0ZSB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlbHkgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHlvdXIKICogYXBwbGljYXRpb24uIEZvciBleGFtcGxlLCBhIHVzZXIgb24gYSB2ZXJ5IHNsb3cgY29ubmVjdGlvbiBtYXkgdGFrZSBhIHZlcnkgbG9uZyB0aW1lIHRvIGRvd25sb2FkIGV2ZW4gc21hbGwgZmlsZXMsCiAqIGFuZCB5b3Ugd291bGRuJ3Qgd2FudCB0aGF0IGRvd25sb2FkIHRpbWUgdG8gc2tldyB0aGUgcmVhbCB0cmFuc2FjdGlvbiB0aW1lLgogKgogKiBAbGluayBodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3MvYWdlbnRzL3BocC1hZ2VudC9waHAtYWdlbnQtYXBpL25ld3JlbGljX2VuZF9vZl90cmFuc2FjdGlvbi8KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBuZXdyZWxpY19lbmRfb2ZfdHJhbnNhY3Rpb24oKTogdm9pZCB7fQoKLyoqCiAqIFN0b3AgaW5zdHJ1bWVudGluZyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpbW1lZGlhdGVseS4KICoKICogU3RvcCBpbnN0cnVtZW50aW5nIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGltbWVkaWF0ZWx5LCBhbmQgc2VuZCB0aGUgZGF0YSB0byB0aGUgZGFlbW9uLiBUaGlzIGNhbGwgc2ltdWxhdGVzIHdoYXQKICogdGhlIGFnZW50IG5vcm1hbGx5IGRvZXMgd2hlbiBQSFAgdGVybWluYXRlcyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4gVGhlIG1vc3QgY29tbW9uIHVzZSBmb3IgdGhpcyBjYWxsIGlzIHRvCiAqIGltcHJvdmUgaW5zdHJ1bWVudGF0aW9uIG9mIGNvbW1hbmQgbGluZSBzY3JpcHRzIHRoYXQgaGFuZGxlIGpvYiBxdWV1ZSBwcm9jZXNzaW5nLiBDYWxsIHRoaXMgbWV0aG9kIGF0IHRoZSBlbmQgb2YgYQogKiBwYXJ0aWN1bGFyIGpvYiwgYW5kIHRoZW4gY2FsbCBuZXdyZWxpY19zdGFydF90cmFuc2FjdGlvbigpIHdoZW4gYSBuZXcgdGFzayBpcyBwdWxsZWQgb2ZmIHRoZSBxdWV1ZS4KICoKICogTm9ybWFsbHksIHdoZW4geW91IGVuZCBhIHRyYW5zYWN0aW9uIHlvdSB3YW50IHRoZSBhZ2VudCB0byByZWNvcmQgdGhlIGFzc29jaWF0ZWQgZGF0YS4gSG93ZXZlciwgeW91IGNhbiBhbHNvCiAqIGRpc2NhcmQgdGhlIGRhdGEgYnkgc2V0dGluZyAkaWdub3JlIHRvIHRydWUuCiAqCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGUgdHJhbnNhY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBlbmRlZCBhbmQgZGF0YSB3YXMgc2VudCB0byB0aGUgTmV3IFJlbGljCiAqIGRhZW1vbi4KICoKICogQGxpbmsgIGh0dHBzOi8vZG9jcy5uZXdyZWxpYy5jb20vZG9jcy9hZ2VudHMvcGhwLWFnZW50L3BocC1hZ2VudC1hcGkvbmV3cmVsaWNfZW5kX3RyYW5zYWN0aW9uLwogKiBAc2luY2UgMy4wLjUuOTUKICoKICogQHBhcmFtIGJvb2wgJGlnbm9yZSBbb3B0aW9uYWxdCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gbmV3cmVsaWNfZW5kX3RyYW5zYWN0aW9uKGJvb2wgJGlnbm9yZSA9IGZhbHNlKTogYm9vbCB7fQoKLyoqCiAqIFJldHVybnMgYSBicm93c2VyIG1vbml0b3Jpbmcgc25pcHBldCB0byBpbmplY3QgYXQgdGhlIGVuZCBvZiB0aGUgSFRNTCBvdXRwdXQuCiAqCiAqIFJldHVybnMgYSBKYXZhU2NyaXB0IHN0cmluZyB0byBpbmplY3QgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBIVE1MIG91dHB1dC4gVXNlIHRoaXMgY2FsbCB3aXRoCiAqIG5ld3JlbGljX2dldF9icm93c2VyX3RpbWluZ19oZWFkZXIoKSB0byBtYW51YWxseSBhZGQgYnJvd3NlciBtb25pdG9yaW5nIHRvIGEgd2VicGFnZS4gSWYgcG9zc2libGUsIE5ldyBSZWxpYwogKiByZWNvbW1lbmRzIGluc3RlYWQgZW5hYmxpbmcgYnJvd3NlciBtb25pdG9yaW5nIHZpYSB0aGUgTmV3IFJlbGljIFVJIG9yIGNvcHkvcGFzdGluZyB0aGUgSmF2YVNjcmlwdCBzbmlwcGV0LiBGb3IKICogaW5zdHJ1Y3Rpb25zIG9uIHVzaW5nIHRoZXNlIG9wdGlvbnMsIHNlZSBCcm93c2VyIG1vbml0b3JpbmcgYW5kIHRoZSBQSFAgYWdlbnQuCiAqCiAqIElmIGluY2x1ZGVUYWdzIG9taXR0ZWQgb3Igc2V0IHRvIHRydWUsIHRoZSByZXR1cm5lZCBKYXZhU2NyaXB0IHN0cmluZyB3aWxsIGJlIGVuY2xvc2VkIGluIGEgInNjcmlwdCItdGFnLgogKgogKiBAbGluayBodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3MvYWdlbnRzL3BocC1hZ2VudC9waHAtYWdlbnQtYXBpL25ld3JlbGljX2dldF9icm93c2VyX3RpbWluZ19mb290ZXIvCiAqCiAqIEBwYXJhbSBib29sICRpbmNsdWRlVGFncyBbb3B0aW9uYWxdCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBuZXdyZWxpY19nZXRfYnJvd3Nlcl90aW1pbmdfZm9vdGVyKGJvb2wgJGluY2x1ZGVUYWdzID0gdHJ1ZSk6IHN0cmluZyB7fQoKLyoqCiAqIFJldHVybnMgYSBicm93c2VyIG1vbml0b3Jpbmcgc25pcHBldCB0byBpbmplY3QgaW4gdGhlIGhlYWQgb2YgeW91ciBIVE1MIG91dHB1dC4KICoKICogUmV0dXJucyBhIEphdmFTY3JpcHQgc3RyaW5nIHRvIGluamVjdCBpbiB0aGUgImhlYWQiLXRhZyBvZiB5b3VyIEhUTUwgb3V0cHV0LiBVc2UgdGhpcyBjYWxsIHdpdGgKICogbmV3cmVsaWNfZ2V0X2Jyb3dzZXJfdGltaW5nX2Zvb3RlciB0byBtYW51YWxseSBhZGQgYnJvd3NlciBtb25pdG9yaW5nIHRvIGEgd2VicGFnZS4gSWYgcG9zc2libGUsIE5ldyBSZWxpYwogKiByZWNvbW1lbmRzIGluc3RlYWQgZW5hYmxpbmcgYnJvd3NlciBtb25pdG9yaW5nIHZpYSB0aGUgTmV3IFJlbGljIFVJIG9yIGNvcHkvcGFzdGluZyB0aGUgSmF2YVNjcmlwdCBzbmlwcGV0LiBGb3IKICogaW5zdHJ1Y3Rpb25zIG9uIHVzaW5nIHRoZXNlIG9wdGlvbnMsIHNlZSBicm93c2VyIG1vbml0b3JpbmcgYW5kIFBICiAqCiAqIElmIGluY2x1ZGVUYWdzIGFyZSBvbWl0dGVkIG9yIHNldCB0byB0cnVlLCB0aGUgcmV0dXJuZWQgSmF2YVNjcmlwdCBzdHJpbmcgd2lsbCBiZSBlbmNsb3NlZCBpbiBhICJzY3JpcHQiLXRhZy4KICoKICogQGxpbmsgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY19nZXRfYnJvd3Nlcl90aW1pbmdfaGVhZGVyLwogKgogKiBAcGFyYW0gYm9vbCAkaW5jbHVkZVRhZ3MKICoKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIG5ld3JlbGljX2dldF9icm93c2VyX3RpbWluZ19oZWFkZXIoYm9vbCAkaW5jbHVkZVRhZ3MgPSB0cnVlKTogc3RyaW5nIHt9CgovKioKICogSWdub3JlIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHdoZW4gY2FsY3VsYXRpbmcgQXBkZXguCiAqCiAqIElnbm9yZXMgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gd2hlbiBjYWxjdWxhdGluZyB5b3VyIEFwZGV4IHNjb3JlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBoYXZlIGVpdGhlciB2ZXJ5IHNob3J0CiAqIG9yIHZlcnkgbG9uZyB0cmFuc2FjdGlvbnMgKHN1Y2ggYXMgZmlsZSBkb3dubG9hZHMpIHRoYXQgY2FuIHNrZXcgeW91ciBBcGRleCBzY29yZS4KICoKICogQGxpbmsgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY19pZ25vcmVfYXBkZXgvCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gbmV3cmVsaWNfaWdub3JlX2FwZGV4KCk6IHZvaWQge30KCi8qKgogKiBEbyBub3QgaW5zdHJ1bWVudCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICoKICogRG8gbm90IGdlbmVyYXRlIGRhdGEgZm9yIHRoaXMgdHJhbnNhY3Rpb24uIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGhhdmUgdHJhbnNhY3Rpb25zIHRoYXQgYXJlIHBhcnRpY3VsYXJseSBzbG93IGZvcgogKiBrbm93biByZWFzb25zIGFuZCB5b3UgZG8gbm90IHdhbnQgdGhlbSBmcmVxdWVudGx5IGdlbmVyYXRpbmcgdHJhbnNhY3Rpb24gdHJhY2VzIG9yIHNrZXdpbmcgeW91ciBzaXRlIGF2ZXJhZ2VzLgogKgogKiBAbGluayBodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3MvYWdlbnRzL3BocC1hZ2VudC9waHAtYWdlbnQtYXBpL25ld3JlbGljX2lnbm9yZV90cmFuc2FjdGlvbi8KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBuZXdyZWxpY19pZ25vcmVfdHJhbnNhY3Rpb24oKTogdm9pZCB7fQoKLyoqCiAqIFNldCBjdXN0b20gbmFtZSBmb3IgY3VycmVudCB0cmFuc2FjdGlvbi4KICoKICogU2V0cyB0aGUgbmFtZSBvZiB0aGUgdHJhbnNhY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBuYW1lLiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IGhhdmUgaW1wbGVtZW50ZWQgeW91ciBvd24KICogZGlzcGF0Y2hpbmcgc2NoZW1lIGFuZCB3YW50IHRvIG5hbWUgdHJhbnNhY3Rpb25zIGFjY29yZGluZyB0byB0aGVpciBwdXJwb3NlLiBDYWxsIHRoaXMgZnVuY3Rpb24gYXMgZWFybHkgYXMKICogcG9zc2libGUuCiAqCiAqIElNUE9SVEFOVDogRG8gbm90IHVzZSBicmFja2V0cyBbc3VmZml4XSBhdCB0aGUgZW5kIG9mIHlvdXIgdHJhbnNhY3Rpb24gbmFtZS4gTmV3IFJlbGljIGF1dG9tYXRpY2FsbHkgc3RyaXBzCiAqIGJyYWNrZXRzIGZyb20gdGhlIG5hbWUuIEluc3RlYWQsIHVzZSBwYXJlbnRoZXNlcyAoc3VmZml4KSBvciBvdGhlciBzeW1ib2xzIGlmIG5lZWRlZC4KICoKICogVW5pcXVlIHZhbHVlcyBsaWtlIFVSTHMsIFBhZ2UgVGl0bGVzLCBIZXggVmFsdWVzLCBTZXNzaW9uIElEcywgYW5kIHVuaXF1ZWx5IGlkZW50aWZpYWJsZSB2YWx1ZXMgc2hvdWxkIG5vdCBiZSB1c2VkCiAqIGluIG5hbWluZyB5b3VyIHRyYW5zYWN0aW9ucy4gSW5zdGVhZCwgYWRkIHRoYXQgZGF0YSB0byB0aGUgdHJhbnNhY3Rpb24gYXMgYSBjdXN0b20gcGFyYW1ldGVyIHdpdGggdGhlCiAqIG5ld3JlbGljX2FkZF9jdXN0b21fcGFyYW1ldGVyKCkgY2FsbC4KICoKICogSU1QT1JUQU5UOiBEbyBub3QgY3JlYXRlIG1vcmUgdGhhbiAxMDAwIHVuaXF1ZSB0cmFuc2FjdGlvbiBuYW1lcyAoZm9yIGV4YW1wbGUsIGF2b2lkIG5hbWluZyBieSBVUkwgaWYgcG9zc2libGUpLgogKiBUaGlzIHdpbGwgbWFrZSB5b3VyIGNoYXJ0cyBsZXNzIHVzZWZ1bCwgYW5kIHlvdSBtYXkgcnVuIGludG8gbGltaXRzIE5ldyBSZWxpYyBzZXRzIG9uIHRoZSBudW1iZXIgb2YgdW5pcXVlCiAqIHRyYW5zYWN0aW9uIG5hbWVzIHBlciBhY2NvdW50LiBJdCBhbHNvIGNhbiBzbG93IGRvd24gdGhlIHBlcmZvcm1hbmNlIG9mIHlvdXIgYXBwbGljYXRpb24uCiAqCiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHJhbnNhY3Rpb24gbmFtZSB3YXMgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQuIElmIGZhbHNlIGlzIHJldHVybmVkLCBjaGVjayB0aGUgYWdlbnQgbG9nIGZvciBtb3JlCiAqIGluZm9ybWF0aW9uLgogKgogKiBAbGluayBodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3MvYWdlbnRzL3BocC1hZ2VudC9waHAtYWdlbnQtYXBpL25ld3JlbGljX25hbWVfdHJhbnNhY3Rpb24vCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgTmFtZSBvZiB0aGUgdHJhbnNhY3Rpb24uCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gbmV3cmVsaWNfbmFtZV90cmFuc2FjdGlvbihzdHJpbmcgJG5hbWUpOiBib29sIHt9CgovKioKICogVXNlIHRoZXNlIGNhbGxzIHRvIGNvbGxlY3QgZXJyb3JzIHRoYXQgdGhlIFBIUCBhZ2VudCBkb2VzIG5vdCBjb2xsZWN0IGF1dG9tYXRpY2FsbHkgYW5kIHRvIHNldCB0aGUgY2FsbGJhY2sgZm9yCiAqIHlvdXIgb3duIGVycm9yIGFuZCBleGNlcHRpb24gaGFuZGxlci4KICoKICogQ0FVVElPTjogSWYgeW91IGluY2x1ZGUgYW4gZXhjZXB0aW9uICgkZSksIHRoZXJlIGFyZSBkaWZmZXJlbmNlcyBkZXBlbmRpbmcgb24gdGhlIFBIUCB2ZXJzaW9uIHlvdSBhcmUgdXNpbmc6CiAqIC0gUEhQIHZlcnNpb24gNSBvciBsb3dlcjogWW91IG11c3QgcGFzcyBhIHZhbGlkIFBIUCBFeGNlcHRpb24gY2xhc3MuCiAqIC0gUEhQIHZlcnNpb24gNyBvciBoaWdoZXI6IFlvdSBtdXN0IHBhc3MgYSB2YWxpZCBQSFAgVGhyb3dhYmxlIGludGVyZmFjZS4KICoKICogVGhlIFBIUCBhZ2VudCBoYW5kbGVzIFBIUCBlcnJvcnMgYW5kIGV4Y2VwdGlvbnMgYXV0b21hdGljYWxseSBmb3Igc3VwcG9ydGVkIGZyYW1ld29ya3MuIElmIHlvdSB3YW50IHRvIGNvbGxlY3QKICogZXJyb3JzIHRoYXQgYXJlIG5vdCBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgc28gdGhhdCB5b3UgY2FuIHF1ZXJ5IGZvciB0aG9zZSBlcnJvcnMgaW4gTmV3IFJlbGljIGFuZCB2aWV3IGVycm9yCiAqIHRyYWNlcywgeW91IGNhbiB1c2UgbmV3cmVsaWNfbm90aWNlX2Vycm9yLgogKgogKiBJZiB5b3Ugd2FudCB0byB1c2UgeW91ciBvd24gZXJyb3IgYW5kIGV4Y2VwdGlvbiBoYW5kbGVycywgeW91IGNhbiBzZXQgbmV3cmVsaWNfbm90aWNlX2Vycm9yIGFzIHRoZSBjYWxsYmFjay4KICoKICogVGhpcyBmdW5jdGlvbiBjYW4gaGFuZGxlIGEgdmFyaWFibGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMuIFlvdSBjYW4gcGFzcy1pbiAxIG9yIDUgcGFyYW1ldGVycywgZGVwZW5kaW5nIG9uIHlvdXIgdXNlCiAqIGNhc2U6CiAqIC0gbmV3cmVsaWNfbm90aWNlX2Vycm9yKHN0cmluZyAkbWVzc2FnZSkKICogLSBuZXdyZWxpY19ub3RpY2VfZXJyb3IoVGhyb3dhYmxlfEV4Y2VwdGlvbiAkZSkKICogLSBuZXdyZWxpY19ub3RpY2VfZXJyb3Ioc3RyaW5nICRlcnJzdHIsIFRocm93YWJsZXxFeGNlcHRpb24gJGUpCiAqIC0gbmV3cmVsaWNfbm90aWNlX2Vycm9yKGludCAkZXJybm8sIHN0cmluZyAkZXJyc3RyLCBzdHJpbmcgJGVycmZpbGUsIGludCAkZXJybGluZSwgc3RyaW5nICRlcnJjb250ZXh0KQogKgogKiBAbGluayAgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY19ub3RpY2VfZXJyb3IvCiAqIEBzaW5jZSAyLjYKICoKICogQHBhcmFtIHN0cmluZ3xUaHJvd2FibGV8RXhjZXB0aW9ufGludCAgJG1lc3NhZ2VPckV4Y2VwdGlvbk9yQ29kZSBFaXRoZXIgYW4gZXJyb3IgbWVzc2FnZSwgYW4gZXhjZXB0aW9uIG9iamVjdCwgb3IKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyIGVycm9yIGNvZGUKICogQHBhcmFtIHN0cmluZ3xUaHJvd2FibGV8RXhjZXB0aW9ufG51bGwgJGVycnN0ck9yRXhjZXB0aW9uICAgICAgIFtvcHRpb25hbF0gUmVxdWlyZWQgaWYgZmlyc3QgYXJndW1lbnQgaXMgYW4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXIsIFByb3ZpZGUgYW4gZXJyb3IgbWVzc2FnZSB0aGF0IHdpbGwgYmUKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5pbmdmdWwgdG8geW91IHdoZW4gaXQgZGlzcGxheXMgaW4gZXJyb3IKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlcyBvciBhbiBleGNlcHRpb24gb2JqZWN0LgogKiBAcGFyYW0gc3RyaW5nfG51bGwgICAgICAgICAgICAgICAgICAgICAkZXJyZmlsZSAgICAgICAgICAgICAgICAgIFtvcHRpb25hbF0gVGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCB0aGUgZXJyb3IKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jY3VycmVkIGluLgogKiBAcGFyYW0gaW50fG51bGwgICAgICAgICAgICAgICAgICAgICAgICAkZXJybGluZSAgICAgICAgICAgICAgICAgIFtvcHRpb25hbF0gVGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBlcnJvcgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2NjdXJyZWQuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAgICAgICAgICAgICAgICAgICAgICRlcnJjb250ZXh0ICAgICAgICAgICAgICAgW29wdGlvbmFsXSBBbiBhcnJheSB0aGF0IHBvaW50cyB0byB0aGUgc3ltYm9sCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3YXMgYWN0aXZlIHdoZW4gdGhlIGVycm9yIG9jY3VycmVkLgogKgogKiBAcmV0dXJuIG51bGwKICovCmZ1bmN0aW9uIG5ld3JlbGljX25vdGljZV9lcnJvcigKICAgIHN0cmluZ3xUaHJvd2FibGV8RXhjZXB0aW9ufGludCAkbWVzc2FnZU9yRXhjZXB0aW9uT3JDb2RlLAogICAgc3RyaW5nfFRocm93YWJsZXxFeGNlcHRpb24gJGVycnN0ck9yRXhjZXB0aW9uID0gbnVsbCwKICAgIHN0cmluZyAkZXJyZmlsZSA9IG51bGwsCiAgICBpbnQgJGVycmxpbmUgPSBudWxsLAogICAgc3RyaW5nICRlcnJjb250ZXh0ID0gbnVsbAopIHt9CgovKioKICogUmVjb3JkIGEgY3VzdG9tIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGF0dHJpYnV0ZXMKICoKICogUmVjb3JkcyBhIGN1c3RvbSBldmVudCBmb3IgdXNlIGluIE5ldyBSZWxpYy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBJbnNlcnRpbmcgY3VzdG9tIGV2ZW50cyB3aXRoIHRoZSBQSFAgYWdlbnQuCiAqCiAqIFRJUDogV2hlbiBjcmVhdGluZyBjdXN0b20gZXZlbnRzLCBmb2xsb3cgdGhlc2UgcnVsZXM6CiAqCiAqIC0gVGhlIGFnZW50IHJlY29yZHMgYSBtYXhpbXVtIG9mIDEwLDAwMCBldmVudHMgcGVyIG1pbnV0ZS4gTGltaXQgdGhlIG51bWJlciBvZiB1bmlxdWUgZXZlbnQgdHlwZSBuYW1lcyB0aGF0IHlvdQogKiBjcmVhdGUsIGFuZCBkbyBub3QgZ2VuZXJhdGUgdGhlc2UgbmFtZXMgZHluYW1pY2FsbHkuCiAqIC0gQXZvaWQgdXNpbmcgcmVzZXJ2ZWQgd29yZHMgYW5kIGNoYXJhY3RlcnMgZm9yIHRoZSBldmVudCBhbmQKICogYXR0cmlidXRlcyBuYW1lcy4KICogLSBFbnN1cmUgeW91IGRvIG5vdCBleGNlZWQgdGhlIGV2ZW50IHNpemUgYW5kIHJhdGUgcmVzdHJpY3Rpb25zLgogKgogKiBAbGluayAgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY19yZWNvcmRfY3VzdG9tX2V2ZW50LwogKiBAc2VlICAgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL3RlbGVtZXRyeS1kYXRhLXBsYXRmb3JtL2N1c3RvbS1kYXRhL2N1c3RvbS1ldmVudHMvYXBtLXJlcG9ydC1jdXN0b20tZXZlbnRzLWF0dHJpYnV0ZXMvCiAqIEBzaW5jZSA0LjE4LjAuODkKICoKICogQHBhcmFtIHN0cmluZyAkbmFtZSAgICAgICBOYW1lIG9mIHRoZSBjdXN0b20gZXZlbnQuCiAqIEBwYXJhbSBhcnJheSAgJGF0dHJpYnV0ZXMgU3VwcGx5IGN1c3RvbSBhdHRyaWJ1dGVzIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5LiBTdXBwbHkgdGhlIGF0dHJpYnV0ZSBuYW1lcyBhcyBrZXlzIG9mCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAgdG8gMjU1IGNoYXJhY3RlcnMsIGFuZCBzdXBwbHkgdGhlIHZhbHVlcyBhcyBzY2FsYXIgdmFsdWVzLiBBcnJheXMgYW5kIG9iamVjdHMgYXJlIG5vdAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZC4KICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBuZXdyZWxpY19yZWNvcmRfY3VzdG9tX2V2ZW50KHN0cmluZyAkbmFtZSwgYXJyYXkgJGF0dHJpYnV0ZXMpOiB2b2lkIHt9CgovKioKICogU2V0IHRoZSBOZXcgUmVsaWMgYXBwbGljYXRpb24gbmFtZSwgd2hpY2ggdGhlIE5ldyBSZWxpYyBVSSB1c2VzIHRvIGNvbm5lY3QgeW91ciBkYXRhIHRvIHRoZSBjb3JyZWN0IGFwcGxpY2F0aW9uLgogKgogKiBUaGUgcmVjb21tZW5kZWQgYW5kIHByZWZlcnJlZCBtZXRob2QgZm9yIHNldHRpbmcgdGhlIE5ldyBSZWxpYyBhcHBsaWNhdGlvbiBuYW1lIGlzIHRvIHVzZSBnbG9iYWwgb3IgcGVyLWRpcmVjdG9yeQogKiBJTkkgc2V0dGluZ3MgdG8gYXNzb2NpYXRlIHlvdXIgYXBwbGljYXRpb24gdG8gdGhlIGRlc2lyZWQgbmFtZSBhdCB0aGUgc3RhcnQgb2YgZXhlY3V0aW9uLgogKgogKiBJZiB5b3UgY2Fubm90IGVkaXQgeW91ciBhZ2VudCBjb25maWcgZmlsZSAoZm9yIGV4YW1wbGUsIG1hbnkgc2hhcmVkIGhvc3RpbmcgZW52aXJvbm1lbnRzIGRvIG5vdCBhbGxvdyB5b3UgdG8gZWRpdAogKiBjb25maWcgZmlsZXMpLCB0aGUgbmV3cmVsaWNfc2V0X2FwcG5hbWUgQVBJIGNhbGwgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGFwcCBuYW1lLCBsaWNlbnNlIGtleSAob3B0aW9uYWwsIGZvciBpZgogKiB5b3UgdXNlIG11bHRpcGxlIGFjY291bnRzKSwgYW5kIGEgdHJ1ZS9mYWxzZSBmbGFnIChvcHRpb25hbCwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8ga2VlcCBvciBkaXNjYXJkIHByZXZpb3VzbHkKICogcmVjb3JkZWQgZGF0YSkuIFRvIGVuc3VyZSBtYXhpbWFsIEFQTSB0cmFjZSBjb250aW51aXR5LCBjYWxsIHRoaXMgYXMgZWFybHkgYXMgcG9zc2libGUuIFRoaXMgQVBJIGNhbGwgd2lsbCBkaXNjYXJkCiAqIGFsbCBjdXJyZW50IHRyYW5zYWN0aW9uIGRhdGEgYW5kIHN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uIGFmdGVyIGl0IGhhcyByZWNvbm5lY3RlZCB3aXRoIHRoZSBnaXZlbiBhcHAgbmFtZS4KICoKICogRm9yIG90aGVyIGFwcC1uYW1pbmcgb3B0aW9ucywgc2VlIE5hbWUgeW91ciBQSFAgYXBwbGljYXRpb24uIFdoZW4gcG9zc2libGUsIElOSS1iYXNlZCBzb2x1dGlvbnMgYXJlIHJlY29tbWVuZGVkLgogKgogKiBOZXcgUmVsaWMgaGlnaGx5IHJlY29tbWVuZHMgdGhhdCB5b3UgY2FsbCB0aGlzIGZ1bmN0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgYW5kIGluIGFzIHNoYWxsb3cgb2YgYSBjYWxsIHN0YWNrIGFzCiAqIHBvc3NpYmxlLiBBcHBsaWNhdGlvbnMgYXJlIGRpc2NyZXRlIGVudGl0aWVzIGluIEFQTSwgYW5kIGRpc2NvbnRpbnVpdHkgb2YgdHJhbnNhY3Rpb24gdHJhY2VzIGlzIGluaGVyZW50IHRvIHRoaXMKICogbWV0aG9kJ3MgdXNhZ2UuIEFmdGVyIGNvbm5lY3Rpbmcgd2l0aCB0aGUgbmV3IGFwcCBuYW1lLCB0aGUgbmV3IHRyYW5zYWN0aW9ucyBzdGFydCByZXBvcnRpbmcgdG8gdGhlIG5ldyBhcHBsaWNhdGlvbgogKiB3aXRob3V0IHRoZSBjb250ZXh0IG9mIHRoZSBwcmV2aW91cyBhcHBsaWNhdGlvbiBvciB0aGUgZGF0YSB0aGF0IGhhcyBiZWVuIHJlcG9ydGVkIHRvIGl0LgogKgogKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgb25jZSwgYXMgZWFjaCBjYWxsIHRvIHRoZSBBUEkgKGV2ZW4gd2l0aCB0aGUgc2FtZSBhcHAgbmFtZSkgd2lsbCBjYXVzZSB0aGUKICogY3VycmVudCB0cmFuc2FjdGlvbiBkYXRhIHRvIGJlIGRpc2NhcmRlZCBhbmQgbGVhZCB0byBmdXJ0aGVyIGRpc2NvbnRpbnVpdHkgb2YgdHJhbnNhY3Rpb24gdHJhY2VzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aCAxIHRvIDMgcGFyYW1ldGVyczoKICogLSBuZXdyZWxpY19zZXRfYXBwbmFtZShzdHJpbmcgJG5hbWUpCiAqIC0gbmV3cmVsaWNfc2V0X2FwcG5hbWUoc3RyaW5nICRuYW1lLCBzdHJpbmcgJGxpY2Vuc2VbLCBib29sICR4bWl0XSkKICoKICoKICogQGxpbmsgICBodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3MvYWdlbnRzL3BocC1hZ2VudC9waHAtYWdlbnQtYXBpL25ld3JlbGljX3NldF9hcHBuYW1lLwogKiBAc2luY2UgIDMuMS41LjExMQogKgogKiBAcGFyYW0gc3RyaW5nICRuYW1lICAgIE5hbWUocykgb2YgYXBwIG1ldHJpY3Mgc2hvdWxkIGJlIHJlcG9ydGVkIHVuZGVyIGluIE5ldyBSZWxpYyB1c2VyIGludGVyZmFjZS4gVXNlcyB0aGUgc2FtZQogKiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBhcyBuZXdyZWxpYy5hcHBuYW1lIGFuZCBjYW4gc2V0IG11bHRpcGxlIGFwcGxpY2F0aW9uIG5hbWVzIGJ5IHNlcGFyYXRpbmcgZWFjaCB3aXRoIGEKICogICAgICAgICAgICAgICAgICAgICAgICBzZW1pLWNvbG9uIDsuCiAqIEBwYXJhbSBzdHJpbmcgJGxpY2Vuc2UgW29wdGlvbmFsXSBSZXF1aXJlZCBpZiB5b3UgdXNlIG11bHRpcGxlIGFjY291bnRzCiAqIEBwYXJhbSBib29sICAgJHhtaXQgICAgW29wdGlvbmFsXSBJZiBmYWxzZSBvciBvbWl0dGVkLCB0aGUgYWdlbnQgZGlzY2FyZHMgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIGFsbCBkYXRhCiAqICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWQgdXAgdG8gdGhpcyBjYWxsIGlzIGxvc3QuIElmIHRydWUsIHRoZSBhZ2VudCBzZW5kcyB0aGUgZGF0YSB0aGF0IHdhcyBnYXRoZXJlZCByaWdodAogKiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSBleGVjdXRpbmcgdGhpcyBjYWxsLiBUaGUgZGF0YSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIG9sZCBhcHAgbmFtZS4gVGhpcyBoYXMgYSB2ZXJ5CiAqICAgICAgICAgICAgICAgICAgICAgICAgc2xpZ2h0IHBlcmZvcm1hbmNlIGltcGFjdCBhcyBpdCB0YWtlcyBhIGZldyBtaWxsaXNlY29uZHMgZm9yIHRoZSBhZ2VudCB0byBkdW1wIGl0cyBkYXRhLgogKgogKiBAcmV0dXJuIGJvb2wgV2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGUgYXBwbGljYXRpb24gbmFtZSB3YXMgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQuCiAqLwpmdW5jdGlvbiBuZXdyZWxpY19zZXRfYXBwbmFtZShzdHJpbmcgJG5hbWUsIHN0cmluZyAkbGljZW5zZSwgYm9vbCAkeG1pdCA9IGZhbHNlKTogYm9vbCB7fQoKLyoqCiAqIENyZWF0ZSB1c2VyLXJlbGF0ZWQgY3VzdG9tIGF0dHJpYnV0ZXMuIG5ld3JlbGljX2FkZF9jdXN0b21fcGFyYW1ldGVyIGlzIG1vcmUgZmxleGlibGUuCiAqCiAqIFRJUDogVGhpcyBjYWxsIG9ubHkgYWxsb3dzIHlvdSB0byBhc3NpZ24gdmFsdWVzIHRvIHByZS1leGlzdGluZyBrZXlzLiBGb3IgYSBtb3JlIGZsZXhpYmxlIG1ldGhvZCB0byBjcmVhdGUKICoga2V5L3ZhbHVlIHBhaXJzLCB1c2UgbmV3cmVsaWNfYWRkX2N1c3RvbV9wYXJhbWV0ZXIuCiAqCiAqIEFzIG9mIHJlbGVhc2UgNC40LCBjYWxsaW5nIG5ld3JlbGljX3NldF91c2VyX2F0dHJpYnV0ZXMoImEiLCAiYiIsICJjIik7IGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZwogKiBuZXdyZWxpY19hZGRfY3VzdG9tX3BhcmFtZXRlcigidXNlciIsICJhIik7IG5ld3JlbGljX2FkZF9jdXN0b21fcGFyYW1ldGVyKCJhY2NvdW50IiwgImIiKTsKICogbmV3cmVsaWNfYWRkX2N1c3RvbV9wYXJhbWV0ZXIoInByb2R1Y3QiLCAiYyIpOyBBbGwgdGhyZWUgcGFyYW1ldGVycyBhcmUgcmVxdWlyZWQsIGJ1dCB0aGV5IG1heSBiZSBlbXB0eSBzdHJpbmdzLgogKgogKiBAbGluayAgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY19zZXRfdXNlcl9hdHRyaWJ1dGVzLwogKiBAc2luY2UgMy4xLjUuMTExCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJfdmFsdWUgICAgU3BlY2lmeSBhIG5hbWUgb3IgdXNlcm5hbWUgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBwYWdlIHZpZXcuIFRoaXMgdmFsdWUgaXMgYXNzaWduZWQKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bwogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB1c2VyIGtleS4KICogQHBhcmFtIHN0cmluZyAkYWNjb3VudF92YWx1ZSBTcGVjaWZ5IHRoZSBuYW1lIG9mIGEgdXNlciBhY2NvdW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgcGFnZSB2aWV3LiBUaGlzIHZhbHVlIGlzCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduZWQgdG8gdGhlIGFjY291bnQga2V5LgogKiBAcGFyYW0gc3RyaW5nICRwcm9kdWN0X3ZhbHVlIFNwZWNpZnkgdGhlIG5hbWUgb2YgYSBwcm9kdWN0IHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgcGFnZSB2aWV3LiBUaGlzIHZhbHVlIGlzCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduZWQKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgcHJvZHVjdCBrZXkuCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gbmV3cmVsaWNfc2V0X3VzZXJfYXR0cmlidXRlcyhzdHJpbmcgJHVzZXJfdmFsdWUsIHN0cmluZyAkYWNjb3VudF92YWx1ZSwgc3RyaW5nICRwcm9kdWN0X3ZhbHVlKTogYm9vbCB7fQoKLyoqCiAqIEFzc29jaWF0ZSBhIHVuaXF1ZSB1c2VyIElEIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJfaWQgU2hvdWxkIGJlIGEgdW5pcXVlIHZhbHVlIChzdWNoIGFzIGEgVVVJRCkgdGhhdCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogKgogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRydWUgaWYgdGhlIHVzZXIgSUQgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSwgb3RoZXJ3aXNlIGZhbHNlLgogKgogKiBAbGluayBodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3MvYXBtL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY19zZXRfdXNlcl9pZC8KICogQHNpbmNlIDEwLjEyCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gbmV3cmVsaWNfc2V0X3VzZXJfaWQoc3RyaW5nICR1c2VyX2lkKTogYm9vbCB7fQoKLyoqCiAqIFN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uIG1hbnVhbGx5LiBVc3VhbGx5IHVzZWQgYWZ0ZXIgbWFudWFsbHkgZW5kaW5nIGEgdHJhbnNhY3Rpb24gd2l0aAogKiBuZXdyZWxpY19lbmRfdHJhbnNhY3Rpb24oKSwKICogZm9yIGV4YW1wbGUgd2hlbiBzZXBhcmF0aW5nIHRhc2tzIGluIGEgam9iIHF1ZXVlIG1hbmFnZXIuIFdoZW4gaW5zdHJ1bWVudGluZyB0aGlzIG5ldyB0cmFuc2FjdGlvbiwgdGhlIGFnZW50CiAqIHBlcmZvcm1zIHRoZSBzYW1lIG9wZXJhdGlvbnMgYXMgd2hlbiB0aGUgc2NyaXB0IGZpcnN0IHN0YXJ0ZWQuCiAqCiAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGUgdHJhbnNhY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBzdGFydGVkLgogKgogKiBAbGluayAgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY19zdGFydF90cmFuc2FjdGlvbi8KICogQHNpbmNlIDMuMC41Ljk1CiAqCiAqIEBwYXJhbSBzdHJpbmcgICAgICAkYXBwbmFtZSBUaGUgYXBwbGljYXRpb24gbmFtZSB0byBhc3NvY2lhdGUgd2l0aCBkYXRhIGZyb20gdGhpcyB0cmFuc2FjdGlvbi4gVXNlcyB0aGUgc2FtZQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBuZXdyZWxpYy5hcHBuYW1lIGFuZCBjYW4gc2V0IG11bHRpcGxlIGFwcGxpY2F0aW9uIG5hbWVzIGJ5IHNlcGFyYXRpbmcgZWFjaCB3aXRoIGEKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbWljb2xvbgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOy4gV2hpbGUgdGhpcyBvcHRpb24gaXMgcmVxdWlyZWQsIHlvdSBjYW4gcmVhZCB0aGUgYXBwIG5hbWUgZnJvbSBuZXdyZWxpYy5pbmkgd2l0aAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pX2dldCgibmV3cmVsaWMuYXBwbmFtZSIpLgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGxpY2Vuc2UgW29wdGlvbmFsXSBEZWZhdWx0cyB0byB0aGUgbGljZW5zZSBrZXkgc2V0IGluIHRoZSBOZXcgUmVsaWMgYWdlbnQncyBuZXdyZWxpYy5pbmkgZmlsZS4KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3ZpZGUgYSBkaWZmZXJlbnQgbGljZW5zZSBrZXkgaWYgeW91IHdhbnQgdGhlIHRyYW5zYWN0aW9uIHRvIHJlcG9ydCB0byBhIGRpZmZlcmVudAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV3IFJlbGljIGFjY291bnQuIElmIHNldCwgdGhpcyBsaWNlbnNlIHdpbGwgc3VwZXJzZWRlIGFsbCBwZXItZGlyZWN0b3J5IGFuZCBnbG9iYWwKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgbGljZW5zZXMgY29uZmlndXJlZCBpbiBJTkkgZmlsZXMuCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gbmV3cmVsaWNfc3RhcnRfdHJhbnNhY3Rpb24oc3RyaW5nICRhcHBuYW1lLCBzdHJpbmcgJGxpY2Vuc2UgPSBudWxsKTogYm9vbCB7fQoKLyoqCiAqIFJlY29yZHMgYSBkYXRhc3RvcmUgc2VnbWVudC4KICoKICogRGF0YXN0b3JlIHNlZ21lbnRzIGFwcGVhciBpbiB0aGUgQnJlYWtkb3duIHRhYmxlIGFuZCBEYXRhYmFzZXMgdGFiIG9mIHRoZSBUcmFuc2FjdGlvbnMKICogcGFnZSBpbiB0aGUgTmV3IFJlbGljIFVJLiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBhbiB1bnN1cHBvcnRlZCBkYXRhc3RvcmUgdG8gYmUgaW5zdHJ1bWVudGVkIGluIHRoZSBzYW1lIHdheSBhcyB0aGUKICogUEhQIGFnZW50IGF1dG9tYXRpY2FsbHkgaW5zdHJ1bWVudHMgaXRzIHN1cHBvcnRlZCBkYXRhc3RvcmVzLgogKgogKiBUaGUgc3VwcG9ydGVkIGtleXMgaW4gdGhlICRwYXJhbWV0ZXJzIGFycmF5IGFyZSBhcyBmb2xsb3dzOgogKiAtIHByb2R1Y3Q6IChzdHJpbmcpIFJlcXVpcmVkLiBUaGUgbmFtZSBvZiB0aGUgZGF0YXN0b3JlIHByb2R1Y3QgYmVpbmcgdXNlZDogZm9yIGV4YW1wbGUsIE15U1FMIHRvIGluZGljYXRlIHRoYXQKICogdGhlCiAqIHNlZ21lbnQgcmVwcmVzZW50cyBhIHF1ZXJ5IGFnYWluc3QgYSBNeVNRTCBkYXRhYmFzZS4KICogLSBjb2xsZWN0aW9uOiAoc3RyaW5nKSBPcHRpb25hbC4gVGhlIHRhYmxlIG9yIGNvbGxlY3Rpb24gYmVpbmcgdXNlZCBvciBxdWVyaWVkIGFnYWluc3QuCiAqIC0gb3BlcmF0aW9uOiAoc3RyaW5nKSBPcHRpb25hbC4gVGhlIG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQ6IGZvciBleGFtcGxlLCBzZWxlY3QgZm9yIGFuIFNRTCBTRUxFQ1QgcXVlcnksIG9yIHNldAogKiBmb3IgYSBNZW1jYWNoZWQgc2V0IG9wZXJhdGlvbi4gV2hpbGUgb3BlcmF0aW9ucyBtYXkgYmUgc3BlY2lmaWVkIHdpdGggYW55IGNhc2UsIE5ldyBSZWxpYyBzdWdnZXN0cyB1c2luZyBsb3dlcmNhc2UKICogdG8gYmV0dGVyIGxpbmUgdXAgd2l0aCB0aGUgb3BlcmF0aW9uIG5hbWVzIHVzZWQgYnkgdGhlIFBIUCBhZ2VudCdzIGF1dG9tYXRlZCBkYXRhc3RvcmUgaW5zdHJ1bWVudGF0aW9uLgogKiAtIGhvc3Q6IChzdHJpbmcpIE9wdGlvbmFsLiBUaGUgZGF0YXN0b3JlIGhvc3QgbmFtZS4KICogLSBwb3J0UGF0aE9ySWQ6IChzdHJpbmcpIE9wdGlvbmFsLiBUaGUgcG9ydCBvciBzb2NrZXQgdXNlZCB0byBjb25uZWN0IHRvIHRoZSBkYXRhc3RvcmUuCiAqIC0gZGF0YWJhc2VOYW1lOiAoc3RyaW5nKSBPcHRpb25hbC4gVGhlIGRhdGFiYXNlIG5hbWUgb3IgbnVtYmVyIGluIHVzZS4KICogLSBxdWVyeTogKHN0cmluZykgT3B0aW9uYWwuIFRoZSBxdWVyeSB0aGF0IHdhcyBzZW50IHRvIHRoZSBzZXJ2ZXIuIEZvciBzZWN1cml0eSByZWFzb25zLCB0aGlzIHZhbHVlIGlzIG9ubHkgdXNlZAogKiBpZgogKiB5b3Ugc2V0IHByb2R1Y3QgdG8gYSBzdXBwb3J0ZWQgZGF0YXN0b3JlLiBUaGlzIGFsbG93cyB0aGUgYWdlbnQgdG8gY29ycmVjdGx5IG9iZnVzY2F0ZSB0aGUgcXVlcnkuIFRoZSBzdXBwb3J0ZWQKICogcHJvZHVjdCB2YWx1ZXMgKHdoaWNoIGFyZSBtYXRjaGVkIGluIGEgY2FzZSBpbnNlbnNpdGl2ZSBtYW5uZXIpIGFyZTogTXlTUUwsIE1TU1FMLCBPcmFjbGUsIFBvc3RncmVzLCBTUUxpdGUsCiAqIEZpcmViaXJkLCBTeWJhc2UsIGFuZCBJbmZvcm1peC4KICogLSBpbnB1dFF1ZXJ5TGFiZWw6IChzdHJpbmcpIE9wdGlvbmFsLiBUaGUgbmFtZSBvZiB0aGUgT1JNIGluIHVzZSAoZm9yIGV4YW1wbGU6IERvY3RyaW5lKS4KICogLSBpbnB1dFF1ZXJ5OiAoc3RyaW5nKSBPcHRpb25hbC4gVGhlIGlucHV0IHF1ZXJ5IHRoYXQgd2FzIHByb3ZpZGVkIHRvIHRoZSBPUk0uIEZvciBzZWN1cml0eSByZWFzb25zLCBhbmQgYXMgd2l0aAogKiB0aGUgcXVlcnkgcGFyYW1ldGVyLCB0aGlzIHZhbHVlIHdpbGwgYmUgaWdub3JlZCBpZiB0aGUgcHJvZHVjdCBpcyBub3QgYSBzdXBwb3J0ZWQgZGF0YXN0b3JlLgogKgogKiBAbGluayAgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY19yZWNvcmRfZGF0YXN0b3JlX3NlZ21lbnQvCiAqIEBzaW5jZSA3LjUuMC4xOTkKICoKICogQHBhcmFtIGNhbGxhYmxlICRmdW5jIFRoZSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSB0aW1lZCB0byBjcmVhdGUgdGhlIGRhdGFzdG9yZSBzZWdtZW50LgogKiBAcGFyYW0gYXJyYXkgICAgJHBhcmFtZXRlcnMKICoKICogQHJldHVybiBtaXhlZCBUaGUgcmV0dXJuIHZhbHVlIG9mICRjYWxsYmFjayBpcyByZXR1cm5lZC4gSWYgYW4gZXJyb3Igb2NjdXJzLCBmYWxzZSBpcyByZXR1cm5lZCwgYW5kCiAqIGFuIGVycm9yIGF0IHRoZSBFX1dBUk5JTkcgbGV2ZWwgd2lsbCBiZSB0cmlnZ2VyZWQKICovCmZ1bmN0aW9uIG5ld3JlbGljX3JlY29yZF9kYXRhc3RvcmVfc2VnbWVudChjYWxsYWJsZSAkZnVuYywgYXJyYXkgJHBhcmFtZXRlcnMpOiBtaXhlZCB7fQoKLyoqCiAqIEFjY2VwdHMgYW4gYXJyYXkgb2YgZGlzdHJpYnV0ZWQgdHJhY2UgaGVhZGVycy4KICoKICogRGlzdHJpYnV0ZWQgdHJhY2luZyBhbGxvd3MgeW91IHRvIHNlZSB0aGUgcGF0aCB0aGF0IGEgcmVxdWVzdCB0YWtlcyBhcyBpdCB0cmF2ZWxzIHRocm91Z2ggYSBkaXN0cmlidXRlZCBzeXN0ZW0uCiAqIFdoZW4gZGlzdHJpYnV0ZWQgdHJhY2luZyBpcyBlbmFibGVkLCB1c2UgbmV3cmVsaWNfYWNjZXB0X2Rpc3RyaWJ1dGVkX3RyYWNlX2hlYWRlcnMgdG8gYWNjZXB0IGEgcGF5bG9hZCBvZiBoZWFkZXJzLgogKiBUaGVzZSBpbmNsdWRlIGJvdGggVzNDIFRyYWNlIENvbnRleHQgYW5kIE5ldyBSZWxpYyBkaXN0cmlidXRlZCB0cmFjZSBoZWFkZXJzLgogKgogKiBJdCBpcyBwb3NzaWJsZSB0byBvbmx5IGFjY2VwdCBvbmx5IFczQyBUcmFjZSBDb250ZXh0IGhlYWRlcnMgYW5kIGRpc2FibGUgdGhlIE5ldyBSZWxpYyBEaXN0cmlidXRlZCBUcmFjaW5nIGhlYWRlcgogKiB2aWEgdGhlIG5ld3JlbGljLmRpc3RyaWJ1dGVkX3RyYWNpbmdfZXhjbHVkZV9uZXdyZWxpY19oZWFkZXIgSU5JIHNldHRpbmcuCiAqCiAqIFJldHVybnMgVHJ1ZSBpZiB0aGUgaGVhZGVycyB3ZXJlIGFjY2VwdGVkIHN1Y2Nlc3NmdWxseSwgb3RoZXJ3aXNlIHJldHVybnMgRmFsc2UuCiAqCiAqIEBsaW5rICAgIGh0dHBzOi8vZG9jcy5uZXdyZWxpYy5jb20vZG9jcy9hZ2VudHMvcGhwLWFnZW50L3BocC1hZ2VudC1hcGkvbmV3cmVsaWNhY2NlcHRkaXN0cmlidXRlZHRyYWNlaGVhZGVycy8KICogQGV4YW1wbGUgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvZmVhdHVyZXMvZGlzdHJpYnV0ZWQtdHJhY2luZy1waHAvI21hbnVhbAogKiBAc2luY2UgICA5LjgKICoKICogQHBhcmFtIGFycmF5ICAkaGVhZGVycyAgICAgICAgQW4gYXJyYXkgY29udGFpbmluZyBkaXN0cmlidXRlZCB0cmFjaW5nIGhlYWRlcnMuCiAqIEBwYXJhbSBzdHJpbmcgJHRyYW5zcG9ydF90eXBlIFtvcHRpb25hbF0gQSBzdHJpbmcgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCB0cmFuc3BvcnQgdHlwZS4KICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBuZXdyZWxpY19hY2NlcHRfZGlzdHJpYnV0ZWRfdHJhY2VfaGVhZGVycyhhcnJheSAkaGVhZGVycywgc3RyaW5nICR0cmFuc3BvcnRfdHlwZSA9ICdIVFRQJyk6IGJvb2wge30KCi8qKgogKiBBY2NlcHRzIGEgZGlzdHJpYnV0ZWQgdHJhY2UgcGF5bG9hZC4KICoKICogRGlzdHJpYnV0ZWQgdHJhY2luZyBhbGxvd3MgeW91IHRvIHNlZSB0aGUgcGF0aCB0aGF0IGEgcmVxdWVzdCB0YWtlcyBhcyBpdCB0cmF2ZWxzIHRocm91Z2ggYSBkaXN0cmlidXRlZCBzeXN0ZW0uCiAqCiAqIEBsaW5rICAgICAgIGh0dHBzOi8vZG9jcy5uZXdyZWxpYy5jb20vZG9jcy9hZ2VudHMvcGhwLWFnZW50L3BocC1hZ2VudC1hcGkvbmV3cmVsaWNhY2NlcHRkaXN0cmlidXRlZHRyYWNlcGF5bG9hZC1waHAtYWdlbnQtYXBpLwogKiBAZXhhbXBsZSAgICBodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3MvYWdlbnRzL3BocC1hZ2VudC9mZWF0dXJlcy9kaXN0cmlidXRlZC10cmFjaW5nLXBocC8jbWFudWFsCiAqIEBzaW5jZSAgICAgIDguNAogKiBAZGVwcmVjYXRlZCA5LjEwCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBheWxvYWQgQSBKU09OIGZvcm1hdHRlZCBzdHJpbmcgY3JlYXRlZCBieSB1c2luZyBuZXdyZWxpY19jcmVhdGVfZGlzdHJpYnV0ZWRfdHJhY2VfcGF5bG9hZC4KICoKICogQHJldHVybiB2b2lkCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICduZXdyZWxpY19hY2NlcHRfZGlzdHJpYnV0ZWRfdHJhY2VfaGVhZGVycygpJyldCmZ1bmN0aW9uIG5ld3JlbGljX2FjY2VwdF9kaXN0cmlidXRlZF90cmFjZV9wYXlsb2FkKHN0cmluZyAkcGF5bG9hZCk6IHZvaWQge30KCi8qKgogKiBBY2NlcHRzIGEgZGlzdHJpYnV0ZWQgdHJhY2UgcGF5bG9hZCB0aGF0IGluY2x1ZGVzIGFuIEhUVFBTYWZlIChCYXNlNjQgZW5jb2RlZCkgSlNPTiBzdHJpbmcuCiAqCiAqIERpc3RyaWJ1dGVkIHRyYWNpbmcgYWxsb3dzIHlvdSB0byBzZWUgdGhlIHBhdGggdGhhdCBhIHJlcXVlc3QgdGFrZXMgYXMgaXQgdHJhdmVscyB0aHJvdWdoIGEgZGlzdHJpYnV0ZWQgc3lzdGVtLgogKgogKiBSZXR1cm5zIHRydWUgdG8gaW5kaWNhdGUgc3VjY2Vzcywgb3IgZmFsc2UgaWYgYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAbGluayAgICAgICBodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3MvYWdlbnRzL3BocC1hZ2VudC9waHAtYWdlbnQtYXBpL25ld3JlbGljYWNjZXB0ZGlzdHJpYnV0ZWR0cmFjZXBheWxvYWRodHRwc2FmZS1waHAtYWdlbnQtYXBpLwogKiBAZXhhbXBsZSAgICBodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3MvYWdlbnRzL3BocC1hZ2VudC9mZWF0dXJlcy9kaXN0cmlidXRlZC10cmFjaW5nLXBocC8jbWFudWFsCiAqIEBzaW5jZSAgICAgIDguNAogKiBAZGVwcmVjYXRlZCA5LjEwCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGh0dHBzYWZlX3BheWxvYWQgQW4gSFRUUFNhZmUgKEJhc2U2NCBlbmNvZGVkKSBKU09OIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGF5bG9hZC4KICogQHBhcmFtIHN0cmluZyAkdHJhbnNwb3J0X3R5cGUgICBbb3B0aW9uYWxdIEEgc3RyaW5nIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgdHJhbnNwb3J0IHR5cGUuCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAnbmV3cmVsaWNfYWNjZXB0X2Rpc3RyaWJ1dGVkX3RyYWNlX2hlYWRlcnMoKScpXQpmdW5jdGlvbiBuZXdyZWxpY19hY2NlcHRfZGlzdHJpYnV0ZWRfdHJhY2VfcGF5bG9hZF9odHRwc2FmZSgKICAgIHN0cmluZyAkaHR0cHNhZmVfcGF5bG9hZCwKICAgIHN0cmluZyAkdHJhbnNwb3J0X3R5cGUgPSAnSFRUUCcKKTogYm9vbCB7fQoKLyoqCiAqIEF0dGFjaGVzIGEgY3VzdG9tIGF0dHJpYnV0ZSAoa2V5L3ZhbHVlIHBhaXIpIHRvIHRoZSBjdXJyZW50IHNwYW4uCiAqCiAqIEFkZCBhIGN1c3RvbSBhdHRyaWJ1dGUgKGEga2V5IGFuZCBhIHZhbHVlIGRhdGEgcGFpcikgdG8gdGhlIGN1cnJlbnQgc3Bhbi4gKFRoZSBjYWxsIG5hbWUgaXMKICogbmV3cmVsaWNfYWRkX2N1c3RvbV9zcGFuX3BhcmFtZXRlciBiZWNhdXNlICJjdXN0b20gYXR0cmlidXRlcyIgd2VyZSBwcmV2aW91c2x5IGNhbGxlZCAiY3VzdG9tIHBhcmFtZXRlcnMuIikgRm9yCiAqIGV4YW1wbGUsIHlvdSBjYW4gYWRkIGEgY3VzdG9tZXIncyBmdWxsIG5hbWUgZnJvbSB5b3VyIGN1c3RvbWVyIGRhdGFiYXNlLiBUaGlzIGF0dHJpYnV0ZSBhcHBlYXJzIGluIGFueSBzcGFuLiBZb3UKICogY2FuIGFsc28gcXVlcnkgdGhlIFNwYW4gZm9yIHlvdXIgY3VzdG9tIGF0dHJpYnV0ZXMuCiAqCiAqIElNUE9SVEFOVDogT24gc3BhbnMsIGF0dHJpYnV0ZXMgYWRkZWQgd2l0aCBuZXdyZWxpY19hZGRfY3VzdG9tX3NwYW5fcGFyYW1ldGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIG92ZXIgYXR0cmlidXRlcwogKiBhZGRlZCB3aXRoIG5ld3JlbGljX2FkZF9jdXN0b21fcGFyYW1ldGVyLgogKgogKiBJTVBPUlRBTlQ6IElmIHlvdSB3YW50IHRvIHVzZSB5b3VyIGN1c3RvbSBhdHRyaWJ1dGVzLCBhdm9pZCB1c2luZyBhbnkgb2YgdGhlIHJlc2VydmVkIHRlcm1zIHVzZWQgYnkgTlJRTC4KICoKICogQGxpbmsgIGh0dHBzOi8vZG9jcy5uZXdyZWxpYy5jb20vZG9jcy9hZ2VudHMvcGhwLWFnZW50L3BocC1hZ2VudC1hcGkvbmV3cmVsaWNhZGRjdXN0b21zcGFucGFyYW1ldGVyLXBocC1hZ2VudC1hcGkvCiAqIEBzaW5jZSA5LjEyLjAuMjY4CiAqCiAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICAgJGtleSAgIFRoZSBuYW1lIG9mIHRoZSBjdXN0b20gYXR0cmlidXRlLiBPbmx5IHRoZSBmaXJzdCAyNTUgY2hhcmFjdGVycyBhcmUgcmV0YWluZWQuCiAqIEBwYXJhbSBib29sfGZsb2F0fGludHxzdHJpbmcgJHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGN1c3RvbSBhdHRyaWJ1dGUuCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gbmV3cmVsaWNfYWRkX2N1c3RvbV9zcGFuX3BhcmFtZXRlcihzdHJpbmcgJGtleSwgYm9vbHxmbG9hdHxpbnR8c3RyaW5nICR2YWx1ZSk6IGJvb2wge30KCi8qKgogKkNyZWF0ZXMgYSBkaXN0cmlidXRlZCB0cmFjZSBwYXlsb2FkLgogKgogKiBEaXN0cmlidXRlZCB0cmFjaW5nIGFsbG93cyB5b3UgdG8gc2VlIHRoZSBwYXRoIHRoYXQgYSByZXF1ZXN0IHRha2VzIGFzIGl0IHRyYXZlbHMgdGhyb3VnaCBhIGRpc3RyaWJ1dGVkIHN5c3RlbS4KICoKICogQGxpbmsgICAgICAgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY2NyZWF0ZWRpc3RyaWJ1dGVkdHJhY2VwYXlsb2FkLXBocC1hZ2VudC1hcGkvCiAqIEBleGFtcGxlICAgIGh0dHBzOi8vZG9jcy5uZXdyZWxpYy5jb20vZG9jcy9hZ2VudHMvcGhwLWFnZW50L2ZlYXR1cmVzL2Rpc3RyaWJ1dGVkLXRyYWNpbmctcGhwLyNtYW51YWwKICogQHNpbmNlICAgICAgOC40CiAqIEBkZXByZWNhdGVkIDkuMTAKICoKICogQHJldHVybiAgICAgbmV3cmVsaWNcRGlzdHJpYnV0ZWRUcmFjZVBheWxvYWQKICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogJ25ld3JlbGljX2luc2VydF9kaXN0cmlidXRlZF90cmFjZV9oZWFkZXJzKCknKV0KZnVuY3Rpb24gbmV3cmVsaWNfY3JlYXRlX2Rpc3RyaWJ1dGVkX3RyYWNlX3BheWxvYWQoKTogbmV3cmVsaWNcRGlzdHJpYnV0ZWRUcmFjZVBheWxvYWQge30KCi8qKgogKiBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBtZXRhZGF0YSBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgZGF0YSB0byBhIHRyYWNlIG9yIGFuIGVudGl0eS4KICoKICogVGhpcyBjYWxsIHJldHVybnMgYW4gb3BhcXVlIG1hcCBvZiBrZXktdmFsdWUgcGFpcnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjb3JyZWxhdGUgdGhpcyBhcHBsaWNhdGlvbiB0byBvdGhlciBkYXRhIGluCiAqIHRoZSBOZXcgUmVsaWMgYmFja2VuZC4KICoKICogQGxpbmsgaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL2FnZW50cy9waHAtYWdlbnQvcGhwLWFnZW50LWFwaS9uZXdyZWxpY2dldGxpbmtpbmdtZXRhZGF0YS8KICoKICogQHJldHVybiBhcnJheQogKi8KZnVuY3Rpb24gbmV3cmVsaWNfZ2V0X2xpbmtpbmdfbWV0YWRhdGEoKTogYXJyYXkge30KCi8qKgogKiBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcgdGhlIGlkZW50aWZpZXJzIG9mIHRoZSBjdXJyZW50IHRyYWNlIGFuZCB0aGUgcGFyZW50IHNwYW4uCiAqCiAqIFJldHVybnMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbmluZyB0aGUgaWRlbnRpZmllcnMgb2YgdGhlIGN1cnJlbnQgdHJhY2UgYW5kIHRoZSBwYXJlbnQgc3Bhbi4gVGhpcyBpbmZvcm1hdGlvbgogKiBpcyB1c2VmdWwgZm9yIGludGVncmF0aW5nIHdpdGggdGhpcmQgcGFydHkgZGlzdHJpYnV0ZWQgdHJhY2luZyB0b29scywgc3VjaCBhcyBaaXBraW4uCiAqCiAqIEBsaW5rIGh0dHBzOi8vZG9jcy5uZXdyZWxpYy5jb20vZG9jcy9hZ2VudHMvcGhwLWFnZW50L3BocC1hZ2VudC1hcGkvbmV3cmVsaWNnZXR0cmFjZW1ldGFkYXRhLwogKgogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiBuZXdyZWxpY19nZXRfdHJhY2VfbWV0YWRhdGEoKTogYXJyYXkge30KCi8qKgogKiBJbnNlcnRzIFczQyBUcmFjZSBDb250ZXh0IGhlYWRlcnMgYW5kIE5ldyBSZWxpYyBEaXN0cmlidXRlZCBUcmFjaW5nIGhlYWRlcnMgaW50byBhbiBvdXRib3VuZCBhcnJheSBvZiBoZWFkZXJzLgogKgogKiBVc2UgbmV3cmVsaWNfaW5zZXJ0X2Rpc3RyaWJ1dGVkX3RyYWNlX2hlYWRlcnMgdG8gbWFudWFsbHkgYWRkIGRpc3RyaWJ1dGVkIHRyYWNpbmcgaGVhZGVycyBhbiBhcnJheSBvZiBvdXRib3VuZAogKiBoZWFkZXJzLiBXaGVuIERpc3RyaWJ1dGVkIFRyYWNpbmcgaXMgZW5hYmxlZCwgbmV3cmVsaWNfaW5zZXJ0X2Rpc3RyaWJ1dGVkX3RyYWNlX2hlYWRlcnMgd2lsbCBhbHdheXMgaW5zZXJ0IFczQwogKiB0cmFjZSBjb250ZXh0IGhlYWRlcnMuIEl0IGFsc28sIGJ5IGRlZmF1bHQsIGluc2VydHMgdGhlIE5ldyBSZWxpYyBEaXN0cmlidXRlZCBUcmFjaW5nIGhlYWRlciwgYnV0IHRoaXMgY2FuIGJlCiAqIGRpc2FibGVkIHZpYSB0aGUgbmV3cmVsaWMuZGlzdHJpYnV0ZWRfdHJhY2luZ19leGNsdWRlX25ld3JlbGljX2hlYWRlciBJTkkgc2V0dGluZy4KICoKICogVGhlICRoZWFkZXJzIGFyZ3VtZW50IGlzIHBhc3NlZCBieSByZWZlcmVuY2UsIGFuZCB0aGVyZWZvcmUgbXVzdCBiZSBhIHZhcmlhYmxlIGFzIG9wcG9zZWQgdG8gYSBsaXRlcmFsLgogKgogKiBAbGluayAgICBodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3MvYWdlbnRzL3BocC1hZ2VudC9waHAtYWdlbnQtYXBpL25ld3JlbGljaW5zZXJ0ZGlzdHJpYnV0ZWR0cmFjZWhlYWRlcnMvCiAqIEBleGFtcGxlIGh0dHBzOi8vZG9jcy5uZXdyZWxpYy5jb20vZG9jcy9hZ2VudHMvcGhwLWFnZW50L2ZlYXR1cmVzL2Rpc3RyaWJ1dGVkLXRyYWNpbmctcGhwLyNtYW51YWwKICogQHNpbmNlICAgOS44CiAqCiAqIEBwYXJhbSBhcnJheSAkaGVhZGVycyBBbiAob3B0aW9uYWxseSBlbXB0eSkgYXJyYXkgb2Ygb3V0Ym91bmQgaGVhZGVycy4KICoKICogQHJldHVybiBib29sIFRydWUgaWYgYW55IGhlYWRlcnMgd2VyZSBzdWNjZXNzZnVsbHkgaW5zZXJ0ZWQgaW50byB0aGUgcHJvdmlkZWQgYXJyYXksIG90aGVyd2lzZSByZXR1cm5zIEZhbHNlCiAqLwpmdW5jdGlvbiBuZXdyZWxpY19pbnNlcnRfZGlzdHJpYnV0ZWRfdHJhY2VfaGVhZGVycyhhcnJheSAkaGVhZGVycyk6IGJvb2wge30KCi8qKgogKiBSZXR1cm5zIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyBtYXJrZWQgYXMgc2FtcGxlZC4KICoKICogQGxpbmsgIGh0dHBzOi8vZG9jcy5uZXdyZWxpYy5jb20vZG9jcy9hZ2VudHMvcGhwLWFnZW50L3BocC1hZ2VudC1hcGkvbmV3cmVsaWNpc3NhbXBsZWQvCiAqIEBzaW5jZSA5LjMKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBuZXdyZWxpY19pc19zYW1wbGVkKCk6IGJvb2wge30KfQoKbmFtZXNwYWNlIG5ld3JlbGljIHsKICAvKioKICAgKiBUaGlzIG9iamVjdCBoYXMgdHdvIG1ldGhvZHMgdGhhdCB3aWxsIHJlbmRlciBhIGRpc3RyaWJ1dGVkIHRyYWNlIHBheWxvYWQgYXMgdGV4dC4KICAgKgogICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5uZXdyZWxpYy5jb20vZG9jcy9hZ2VudHMvcGhwLWFnZW50L3BocC1hZ2VudC1hcGkvbmV3cmVsaWNjcmVhdGVkaXN0cmlidXRlZHRyYWNlcGF5bG9hZC1waHAtYWdlbnQtYXBpLyNyZXR1cm4tdmFsdWVzCiAgICogQHNlZSBuZXdyZWxpY19jcmVhdGVfZGlzdHJpYnV0ZWRfdHJhY2VfcGF5bG9hZCgpCiAgICogQHNpbmNlIDguNAogICAqLwogIGNsYXNzIERpc3RyaWJ1dGVkVHJhY2VQYXlsb2FkCiAgewogICAgLyoqCiAgICAgKiBSZW5kZXJzIHRoZSBwYXlsb2FkIGFzIGEgSlNPTiBzdHJpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGV4dCgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIFJlbmRlcnMgdGhlIHBheWxvYWQgYXMgYW4gc3RyaW5nIHN1aXRhYmxlIGZvciB0cmFuc3BvcnQgdmlhIEhUVFAgKHF1ZXJ5IHN0cmluZywgUE9TVCBwYXJhbSwgSFRUUCBoZWFkZXJzLCBldGMuKQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBodHRwU2FmZSgpOiBzdHJpbmcge30KICB9Cn0KPD9waHAKCi8vIFN0YXJ0IG9mIGxpYnhtbCB2Lgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXERlcHJlY2F0ZWQ7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cUHVyZTsKCi8qKgogKiBDb250YWlucyB2YXJpb3VzIGluZm9ybWF0aW9uIGFib3V0IGVycm9ycyB0aHJvd24gYnkgbGlieG1sLiBUaGUgZXJyb3IgY29kZXMKICogYXJlIGRlc2NyaWJlZCB3aXRoaW4gdGhlIG9mZmljaWFsCiAqIHhtbEVycm9yIEFQSSBkb2N1bWVudGF0aW9uLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmxpYnhtbGVycm9yLnBocAogKi8KY2xhc3MgTGliWE1MRXJyb3IKewogICAgLyoqCiAgICAgKiA8cCBzdHlsZT0ibWFyZ2luLXRvcDowOyI+CiAgICAgKiB0aGUgc2V2ZXJpdHkgb2YgdGhlIGVycm9yIChvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudHM6CiAgICAgKiA8Yj48Y29kZT5MSUJYTUxfRVJSX1dBUk5JTkc8L2NvZGU+PC9iPiwKICAgICAqIDxiPjxjb2RlPkxJQlhNTF9FUlJfRVJST1I8L2NvZGU+PC9iPiBvcgogICAgICogPGI+PGNvZGU+TElCWE1MX0VSUl9GQVRBTDwvY29kZT48L2I+KQogICAgICogPC9wPgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGludCAkbGV2ZWw7CgogICAgLyoqCiAgICAgKiA8cCBzdHlsZT0ibWFyZ2luLXRvcDowOyI+CiAgICAgKiBUaGUgZXJyb3IncyBjb2RlLgogICAgICogPC9wPgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGludCAkY29kZTsKCiAgICAvKioKICAgICAqIDxwIHN0eWxlPSJtYXJnaW4tdG9wOjA7Ij4KICAgICAqIFRoZSBjb2x1bW4gd2hlcmUgdGhlIGVycm9yIG9jY3VycmVkLgogICAgICogPC9wPgogICAgICogPHA+PGI+Tm90ZTwvYj46CiAgICAgKiA8L3A+PHA+CiAgICAgKiBUaGlzIHByb3BlcnR5IGlzbid0IGVudGlyZWx5IGltcGxlbWVudGVkIGluIGxpYnhtbCBhbmQgdGhlcmVmb3JlCiAgICAgKiAwIGlzIG9mdGVuIHJldHVybmVkLgogICAgICogPC9wPgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGludCAkY29sdW1uOwoKICAgIC8qKgogICAgICogPHAgc3R5bGU9Im1hcmdpbi10b3A6MDsiPgogICAgICogVGhlIGVycm9yIG1lc3NhZ2UsIGlmIGFueS4KICAgICAqIDwvcD4KICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdHJpbmcgJG1lc3NhZ2U7CgogICAgLyoqCiAgICAgKiA8cCBzdHlsZT0ibWFyZ2luLXRvcDowOyI+VGhlIGZpbGVuYW1lLCBvciBlbXB0eSBpZiB0aGUgWE1MIHdhcyBsb2FkZWQgZnJvbSBhIHN0cmluZy48L3A+CiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RyaW5nICRmaWxlOwoKICAgIC8qKgogICAgICogPHAgc3R5bGU9Im1hcmdpbi10b3A6MDsiPgogICAgICogVGhlIGxpbmUgd2hlcmUgdGhlIGVycm9yIG9jY3VycmVkLgogICAgICogPC9wPgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIGludCAkbGluZTsKfQoKLyoqCiAqIFNldCB0aGUgc3RyZWFtcyBjb250ZXh0IGZvciB0aGUgbmV4dCBsaWJ4bWwgZG9jdW1lbnQgbG9hZCBvciB3cml0ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxpYnhtbC1zZXQtc3RyZWFtcy1jb250ZXh0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbnRleHQgPHA+CiAqIFRoZSBzdHJlYW0gY29udGV4dCByZXNvdXJjZSAoY3JlYXRlZCB3aXRoCiAqIDxiPnN0cmVhbV9jb250ZXh0X2NyZWF0ZTwvYj4pCiAqIDwvcD4KICogQHJldHVybiB2b2lkIE5vIHZhbHVlIGlzIHJldHVybmVkLgogKi8KZnVuY3Rpb24gbGlieG1sX3NldF9zdHJlYW1zX2NvbnRleHQoJGNvbnRleHQpOiB2b2lkIHt9CgovKioKICogRGlzYWJsZSBsaWJ4bWwgZXJyb3JzIGFuZCBhbGxvdyB1c2VyIHRvIGZldGNoIGVycm9yIGluZm9ybWF0aW9uIGFzIG5lZWRlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxpYnhtbC11c2UtaW50ZXJuYWwtZXJyb3JzLnBocAogKiBAcGFyYW0gYm9vbHxudWxsICR1c2VfZXJyb3JzIDxwPgogKiBFbmFibGUgKDxiPlRSVUU8L2I+KSB1c2VyIGVycm9yIGhhbmRsaW5nIG9yIGRpc2FibGUgKDxiPkZBTFNFPC9iPikgdXNlciBlcnJvciBoYW5kbGluZy4gRGlzYWJsaW5nIHdpbGwgYWxzbyBjbGVhciBhbnkgZXhpc3RpbmcgbGlieG1sIGVycm9ycy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZSBvZgogKiA8aT51c2VfZXJyb3JzPC9pPi4KICovCmZ1bmN0aW9uIGxpYnhtbF91c2VfaW50ZXJuYWxfZXJyb3JzKAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gYm9vbCAkdXNlX2Vycm9ycyA9IGZhbHNlLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldID9ib29sICR1c2VfZXJyb3JzID0gbnVsbAopOiBib29sIHt9CgovKioKICogUmV0cmlldmUgbGFzdCBlcnJvciBmcm9tIGxpYnhtbAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxpYnhtbC1nZXQtbGFzdC1lcnJvci5waHAKICogQHJldHVybiBMaWJYTUxFcnJvcnxmYWxzZSBhIExpYlhNTEVycm9yIG9iamVjdCBpZiB0aGVyZSBpcyBhbnkgZXJyb3IgaW4gdGhlCiAqIGJ1ZmZlciwgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gbGlieG1sX2dldF9sYXN0X2Vycm9yKCk6IExpYlhNTEVycm9yfGZhbHNlIHt9CgovKioKICogQ2xlYXIgbGlieG1sIGVycm9yIGJ1ZmZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxpYnhtbC1jbGVhci1lcnJvcnMucGhwCiAqIEByZXR1cm4gdm9pZCBObyB2YWx1ZSBpcyByZXR1cm5lZC4KICovCmZ1bmN0aW9uIGxpYnhtbF9jbGVhcl9lcnJvcnMoKTogdm9pZCB7fQoKLyoqCiAqIFJldHJpZXZlIGFycmF5IG9mIGVycm9ycwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmxpYnhtbC1nZXQtZXJyb3JzLnBocAogKiBAcmV0dXJuIExpYlhNTEVycm9yW10gYW4gYXJyYXkgd2l0aCBMaWJYTUxFcnJvciBvYmplY3RzIGlmIHRoZXJlIGFyZSBhbnkKICogZXJyb3JzIGluIHRoZSBidWZmZXIsIG9yIGFuIGVtcHR5IGFycmF5IG90aGVyd2lzZS4KICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gbGlieG1sX2dldF9lcnJvcnMoKTogYXJyYXkge30KCi8qKgogKiBEaXNhYmxlIHRoZSBhYmlsaXR5IHRvIGxvYWQgZXh0ZXJuYWwgZW50aXRpZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5saWJ4bWwtZGlzYWJsZS1lbnRpdHktbG9hZGVyLnBocAogKiBAcGFyYW0gYm9vbCAkZGlzYWJsZSBbb3B0aW9uYWxdIDxwPgogKiBEaXNhYmxlICg8Yj5UUlVFPC9iPikgb3IgZW5hYmxlICg8Yj5GQUxTRTwvYj4pIGxpYnhtbCBleHRlbnNpb25zIChzdWNoIGFzCiAqICwKICogYW5kICkgdG8gbG9hZCBleHRlcm5hbCBlbnRpdGllcy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdGhlIHByZXZpb3VzIHZhbHVlLgogKiBAc2luY2UgNS4yLjExCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICI4LjAiKV0KZnVuY3Rpb24gbGlieG1sX2Rpc2FibGVfZW50aXR5X2xvYWRlcihib29sICRkaXNhYmxlID0gdHJ1ZSk6IGJvb2wge30KCi8qKgogKiBDaGFuZ2VzIHRoZSBkZWZhdWx0IGV4dGVybmFsIGVudGl0eSBsb2FkZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5saWJ4bWwtc2V0LWV4dGVybmFsLWVudGl0eS1sb2FkZXIucGhwCiAqIEBwYXJhbSBjYWxsYWJsZXxudWxsICRyZXNvbHZlcl9mdW5jdGlvbiA8cD4KICogQSBjYWxsYWJsZSB0aGF0IHRha2VzIHRocmVlIGFyZ3VtZW50cy4gVHdvIHN0cmluZ3MsIGEgcHVibGljIGlkCiAqIGFuZCBzeXN0ZW0gaWQsIGFuZCBhIGNvbnRleHQgKGFuIGFycmF5IHdpdGggZm91ciBrZXlzKSBhcyB0aGUgdGhpcmQgYXJndW1lbnQuCiAqIFRoaXMgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBhIHJlc291cmNlLCBhIHN0cmluZyBmcm9tIHdoaWNoIGEgcmVzb3VyY2UgY2FuIGJlCiAqIG9wZW5lZCwgb3IgPGI+TlVMTDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBib29sCiAqIEBzaW5jZSA1LjQKICovCmZ1bmN0aW9uIGxpYnhtbF9zZXRfZXh0ZXJuYWxfZW50aXR5X2xvYWRlcig/Y2FsbGFibGUgJHJlc29sdmVyX2Z1bmN0aW9uKTogYm9vbCB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBpbnN0YWxsZWQgZXh0ZXJuYWwgZW50aXR5IGxvYWRlciwgaS5lLiB0aGUgdmFsdWUgd2hpY2ggd2FzIHBhc3NlZCB0bwogKiBsaWJ4bWxfc2V0X2V4dGVybmFsX2VudGl0eV9sb2FkZXIoKSBvciBudWxsIGlmIG5vIGxvYWRlciB3YXMgaW5zdGFsbGVkIGFuZCB0aGUgZGVmYXVsdCBlbnRpdHkgbG9hZGVyIHdpbGwgYmUgdXNlZC4KICogVGhpcyBhbGxvd3MgbGlicmFyaWVzIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGxvYWRlciwgY29udHJvbGxpbmcgZW50aXR5IGV4cGFuc2lvbiB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIHJlc3QKICogb2YgdGhlIGFwcGxpY2F0aW9uLgogKgogKiBAcmV0dXJuIGNhbGxhYmxlfG51bGwKICogQHNpbmNlIDguMgogKi8KZnVuY3Rpb24gbGlieG1sX2dldF9leHRlcm5hbF9lbnRpdHlfbG9hZGVyKCk6ID9jYWxsYWJsZSB7fQoKLyoqCiAqIGxpYnhtbCB2ZXJzaW9uIGxpa2UgMjA2MDUgb3IgMjA2MTcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9saWJ4bWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdMSUJYTUxfVkVSU0lPTicsIDIwOTAxKTsKCi8qKgogKiBsaWJ4bWwgdmVyc2lvbiBsaWtlIDIuNi41IG9yIDIuNi4xNwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpYnhtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xJQlhNTF9ET1RURURfVkVSU0lPTicsICIyLjkuMSIpOwpkZWZpbmUoJ0xJQlhNTF9MT0FERURfVkVSU0lPTicsIDIwOTAxKTsKCi8qKgogKiBTdWJzdGl0dXRlIGVudGl0aWVzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGlieG1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCWE1MX05PRU5UJywgMik7CgovKioKICogTG9hZCB0aGUgZXh0ZXJuYWwgc3Vic2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGlieG1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCWE1MX0RURExPQUQnLCA0KTsKCi8qKgogKiBEZWZhdWx0IERURCBhdHRyaWJ1dGVzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGlieG1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCWE1MX0RUREFUVFInLCA4KTsKCi8qKgogKiBWYWxpZGF0ZSB3aXRoIHRoZSBEVEQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9saWJ4bWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdMSUJYTUxfRFREVkFMSUQnLCAxNik7CgovKioKICogU3VwcHJlc3MgZXJyb3IgcmVwb3J0cwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpYnhtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xJQlhNTF9OT0VSUk9SJywgMzIpOwoKLyoqCiAqIFN1cHByZXNzIHdhcm5pbmcgcmVwb3J0cwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpYnhtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xJQlhNTF9OT1dBUk5JTkcnLCA2NCk7CgovKioKICogUmVtb3ZlIGJsYW5rIG5vZGVzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGlieG1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCWE1MX05PQkxBTktTJywgMjU2KTsKCi8qKgogKiBJbXBsZW1lbnQgWEluY2x1ZGUgc3Vic3RpdHV0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGlieG1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCWE1MX1hJTkNMVURFJywgMTAyNCk7CgovKioKICogUmVtb3ZlIHJlZHVuZGFudCBuYW1lc3BhY2VzIGRlY2xhcmF0aW9ucwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpYnhtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xJQlhNTF9OU0NMRUFOJywgODE5Mik7CgovKioKICogTWVyZ2UgQ0RBVEEgYXMgdGV4dCBub2RlcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpYnhtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xJQlhNTF9OT0NEQVRBJywgMTYzODQpOwoKLyoqCiAqIERpc2FibGUgbmV0d29yayBhY2Nlc3Mgd2hlbiBsb2FkaW5nIGRvY3VtZW50cwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpYnhtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xJQlhNTF9OT05FVCcsIDIwNDgpOwoKLyoqCiAqIFNldHMgWE1MX1BBUlNFX1BFREFOVElDIGZsYWcsIHdoaWNoIGVuYWJsZXMgcGVkZW50aWMgZXJyb3IgcmVwb3J0aW5nLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpYnhtbC5jb25zdGFudHMucGhwCiAqIEBzaW5jZSA1LjQKICovCmRlZmluZSgnTElCWE1MX1BFREFOVElDJywgMTI4KTsKCi8qKgogKiBBY3RpdmF0ZSBzbWFsbCBub2RlcyBhbGxvY2F0aW9uIG9wdGltaXphdGlvbi4gVGhpcyBtYXkgc3BlZWQgdXAgeW91cgogKiBhcHBsaWNhdGlvbiB3aXRob3V0IG5lZWRpbmcgdG8gY2hhbmdlIHRoZSBjb2RlLgogKiA8cD4KICogT25seSBhdmFpbGFibGUgaW4gTGlieG1sICZndDs9IDIuNi4yMQogKiA8L3A+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGlieG1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCWE1MX0NPTVBBQ1QnLCA2NTUzNik7CgovKioKICogQWxsb3dzIGxpbmUgbnVtYmVycyBncmVhdGVyIHRoYW4gNjU1MzUgdG8gYmUgcmVwb3J0ZWQgY29ycmVjdGx5LgogKiA8cD4KICogT25seSBhdmFpbGFibGUgaW4gTGlieG1sICZndDs9IDIuOS4wCiAqIDwvcD4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9saWJ4bWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdMSUJYTUxfQklHTElORVMnLCA2NTUzNSk7CgovKioKICogRHJvcCB0aGUgWE1MIGRlY2xhcmF0aW9uIHdoZW4gc2F2aW5nIGEgZG9jdW1lbnQKICogPHA+CiAqIE9ubHkgYXZhaWxhYmxlIGluIExpYnhtbCAmZ3Q7PSAyLjYuMjEKICogPC9wPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpYnhtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xJQlhNTF9OT1hNTERFQ0wnLCAyKTsKCi8qKgogKiBTZXRzIFhNTF9QQVJTRV9IVUdFIGZsYWcsIHdoaWNoIHJlbGF4ZXMgYW55IGhhcmRjb2RlZCBsaW1pdCBmcm9tIHRoZSBwYXJzZXIuIFRoaXMgYWZmZWN0cwogKiBsaW1pdHMgbGlrZSBtYXhpbXVtIGRlcHRoIG9mIGEgZG9jdW1lbnQgb3IgdGhlIGVudGl0eSByZWN1cnNpb24sIGFzIHdlbGwgYXMgbGltaXRzIG9mIHRoZQogKiBzaXplIG9mIHRleHQgbm9kZXMuCiAqIDxwPgogKiBPbmx5IGF2YWlsYWJsZSBpbiBMaWJ4bWwgJmd0Oz0gMi43LjAgKGFzIG9mIFBIUCAmZ3Q7PSA1LjMuMiBhbmQgUEhQICZndDs9IDUuMi4xMikKICogPC9wPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpYnhtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xJQlhNTF9QQVJTRUhVR0UnLCA1MjQyODgpOwoKLyoqCiAqIEV4cGFuZCBlbXB0eSB0YWdzIChlLmcuICZsdDtici8mZ3Q7IHRvCiAqICZsdDticiZndDsmbHQ7L2JyJmd0OykKICogPHA+CiAqIFRoaXMgb3B0aW9uIGlzIGN1cnJlbnRseSBqdXN0IGF2YWlsYWJsZSBpbiB0aGUKICogYW5kCiAqIGZ1bmN0aW9ucy4KICogPC9wPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpYnhtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xJQlhNTF9OT0VNUFRZVEFHJywgNCk7CgovKioKICogQ3JlYXRlIGRlZmF1bHQvZml4ZWQgdmFsdWUgbm9kZXMgZHVyaW5nIFhTRCBzY2hlbWEgdmFsaWRhdGlvbgogKiA8cD4KICogT25seSBhdmFpbGFibGUgaW4gTGlieG1sICZndDs9IDIuNi4xNCAoYXMgb2YgUEhQICZndDs9IDUuNS4yKQogKiA8L3A+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGlieG1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCWE1MX1NDSEVNQV9DUkVBVEUnLCAxKTsKCi8qKgogKiBTZXRzIEhUTUxfUEFSU0VfTk9JTVBMSUVEIGZsYWcsIHdoaWNoIHR1cm5zIG9mZiB0aGUKICogYXV0b21hdGljIGFkZGluZyBvZiBpbXBsaWVkIGh0bWwvYm9keS4uLiBlbGVtZW50cy4KICogPHA+CiAqIE9ubHkgYXZhaWxhYmxlIGluIExpYnhtbCAmZ3Q7PSAyLjcuNyAoYXMgb2YgUEhQICZndDs9IDUuNC4wKQogKiA8L3A+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGlieG1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCWE1MX0hUTUxfTk9JTVBMSUVEJywgODE5Mik7CgovKioKICogU2V0cyBIVE1MX1BBUlNFX05PREVGRFREIGZsYWcsIHdoaWNoIHByZXZlbnRzIGEgZGVmYXVsdCBkb2N0eXBlCiAqIGJlaW5nIGFkZGVkIHdoZW4gb25lIGlzIG5vdCBmb3VuZC4KICogPHA+CiAqIE9ubHkgYXZhaWxhYmxlIGluIExpYnhtbCAmZ3Q7PSAyLjcuOCAoYXMgb2YgUEhQICZndDs9IDUuNC4wKQogKiA8L3A+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGlieG1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCWE1MX0hUTUxfTk9ERUZEVEQnLCA0KTsKCi8qKgogKiBObyBlcnJvcnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9saWJ4bWwuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdMSUJYTUxfRVJSX05PTkUnLCAwKTsKCi8qKgogKiBBIHNpbXBsZSB3YXJuaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGlieG1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCWE1MX0VSUl9XQVJOSU5HJywgMSk7CgovKioKICogQSByZWNvdmVyYWJsZSBlcnJvcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xpYnhtbC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xJQlhNTF9FUlJfRVJST1InLCAyKTsKCi8qKgogKiBBIGZhdGFsIGVycm9yCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGlieG1sLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnTElCWE1MX0VSUl9GQVRBTCcsIDMpOwovKioKICogQHNpbmNlIDguNAogKi8KZGVmaW5lKCdMSUJYTUxfUkVDT1ZFUicsIDEpOwovLyBFbmQgb2YgbGlieG1sIHYuCjw/cGhwCgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEV4cGVjdGVkVmFsdWVzOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEltbXV0YWJsZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxMYW5ndWFnZUxldmVsVHlwZUF3YXJlOwoKLyoqCiAqIEV2IGlzIGEgc2luZ2xldG9uIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGRlZmF1bHQgbG9vcCBhbmQgdG8gc29tZSBjb21tb24gb3BlcmF0aW9ucy4KICovCmZpbmFsIGNsYXNzIEV2CnsKICAgIC8qKgogICAgICogRmxhZyBwYXNzZWQgdG8gY3JlYXRlIGEgbG9vcDogVGhlIGRlZmF1bHQgZmxhZ3MgdmFsdWUKICAgICAqLwogICAgcHVibGljIGNvbnN0IEZMQUdfQVVUTyA9IDA7CgogICAgLyoqCiAgICAgKiBGbGFnIHBhc3NlZCB0byBjcmVhdGUgYSBsb29wOiBJZiB0aGlzIGZsYWcgdXNlZChvciB0aGUgcHJvZ3JhbSBydW5zIHNldHVpZCBvciBzZXRnaWQpLCBsaWJldiB3b24ndCBsb29rIGF0IHRoZQogICAgICogZW52aXJvbm1lbnQgdmFyaWFibGUgTElCRVZfRkxBR1MuIE90aGVyd2lzZShieSBkZWZhdWx0KSwgTElCRVZfRkxBR1Mgd2lsbCBvdmVycmlkZSB0aGUgZmxhZ3MgY29tcGxldGVseSBpZiBpdCBpcwogICAgICogZm91bmQuIFVzZWZ1bCBmb3IgcGVyZm9ybWFuY2UgdGVzdHMgYW5kIHNlYXJjaGluZyBmb3IgYnVncy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEZMQUdfTk9FTlYgPSAxNjc3NzIxNjsKCiAgICAvKioKICAgICAqIEZsYWcgcGFzc2VkIHRvIGNyZWF0ZSBhIGxvb3A6IE1ha2VzIGxpYmV2IGNoZWNrIGZvciBhIGZvcmsgaW4gZWFjaCBpdGVyYXRpb24sIGluc3RlYWQgb2YgY2FsbGluZyBFdkxvb3A6OmZvcmsoKQogICAgICogbWFudWFsbHkuIFRoaXMgd29ya3MgYnkgY2FsbGluZyBnZXRwaWQoKSBvbiBldmVyeSBpdGVyYXRpb24gb2YgdGhlIGxvb3AsIGFuZCB0aHVzIHRoaXMgbWlnaHQgc2xvdyBkb3duIHRoZSBldmVudAogICAgICogbG9vcCB3aXRoIGxvdHMgb2YgbG9vcCBpdGVyYXRpb25zLCBidXQgdXN1YWxseSBpcyBub3Qgbm90aWNlYWJsZS4gVGhpcyBmbGFnIHNldHRpbmcgY2Fubm90IGJlIG92ZXJyaWRkZW4gb3IKICAgICAqIHNwZWNpZmllZCBpbiB0aGUgTElCRVZfRkxBR1MgZW52aXJvbm1lbnQgdmFyaWFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBGTEFHX0ZPUktDSEVDSyA9IDMzNTU0NDMyOwoKICAgIC8qKgogICAgICogRmxhZyBwYXNzZWQgdG8gY3JlYXRlIGEgbG9vcDogV2hlbiB0aGlzIGZsYWcgaXMgc3BlY2lmaWVkLCBsaWJldiB3b24ndCBhdHRlbXB0IHRvIHVzZSB0aGUgaW5vdGlmeSBBUEkgZm9yIGl0cwogICAgICogZXZfc3RhdCB3YXRjaGVycy4gVGhlIGZsYWcgY2FuIGJlIHVzZWZ1bCB0byBjb25zZXJ2ZSBpbm90aWZ5IGZpbGUgZGVzY3JpcHRvcnMsIGFzIG90aGVyd2lzZSBlYWNoIGxvb3AgdXNpbmcKICAgICAqIGV2X3N0YXQgd2F0Y2hlcnMgY29uc3VtZXMgb25lIGlub3RpZnkgaGFuZGxlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkxBR19OT0lOT1RJRlkgPSAxMDQ4NTc2OwoKICAgIC8qKgogICAgICogRmxhZyBwYXNzZWQgdG8gY3JlYXRlIGEgbG9vcDogV2hlbiB0aGlzIGZsYWcgaXMgc3BlY2lmaWVkLCBsaWJldiB3aWxsIGF0dGVtcHQgdG8gdXNlIHRoZSBzaWduYWxmZCBBUEkgZm9yIGl0cwogICAgICogZXZfc2lnbmFsIChhbmQgZXZfY2hpbGQgKSB3YXRjaGVycy4gVGhpcyBBUEkgZGVsaXZlcnMgc2lnbmFscyBzeW5jaHJvbm91c2x5LCB3aGljaCBtYWtlcyBpdCBib3RoIGZhc3RlciBhbmQgbWlnaHQKICAgICAqIG1ha2UgaXQgcG9zc2libGUgdG8gZ2V0IHRoZSBxdWV1ZWQgc2lnbmFsIGRhdGEuIEl0IGNhbiBhbHNvIHNpbXBsaWZ5IHNpZ25hbCBoYW5kbGluZyB3aXRoIHRocmVhZHMsIGFzIGxvbmcgYXMKICAgICAqIHNpZ25hbHMgYXJlIHByb3Blcmx5IGJsb2NrZWQgaW4gdGhyZWFkcy4gU2lnbmFsZmQgd2lsbCBub3QgYmUgdXNlZCBieSBkZWZhdWx0LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkxBR19TSUdOQUxGRCA9IDIwOTcxNTI7CgogICAgLyoqCiAgICAgKiBGbGFnIHBhc3NlZCB0byBjcmVhdGUgYSBsb29wOiBXaGVuIHRoaXMgZmxhZyBpcyBzcGVjaWZpZWQsIGxpYmV2IHdpbGwgYXZvaWQgdG8gbW9kaWZ5IHRoZSBzaWduYWwgbWFzay4KICAgICAqIFNwZWNpZmljYWxseSwgdGhpcyBtZWFucyBoYXZpbmcgdG8gbWFrZSBzdXJlIHNpZ25hbHMgYXJlIHVuYmxvY2tlZCBiZWZvcmUgcmVjZWl2aW5nIHRoZW0uCiAgICAgKgogICAgICogVGhpcyBiZWhhdmlvdXIgaXMgdXNlZnVsIGZvciBjdXN0b20gc2lnbmFsIGhhbmRsaW5nLCBvciBoYW5kbGluZyBzaWduYWxzIG9ubHkgaW4gc3BlY2lmaWMgdGhyZWFkcy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IEZMQUdfTk9TSUdNQVNLID0gNDE5NDMwNDsKCiAgICAvKioKICAgICAqIEZsYWcgcGFzc2VkIHRvIEV2OjpydW4oKSBvciBFdkxvb3A6OnJ1bigpOiBNZWFucyB0aGF0IGV2ZW50IGxvb3Agd2lsbCBsb29rIGZvciBuZXcgZXZlbnRzLCB3aWxsIGhhbmRsZSB0aG9zZQogICAgICogZXZlbnRzIGFuZCBhbnkgYWxyZWFkeSBvdXRzdGFuZGluZyBvbmVzLCBidXQgd2lsbCBub3Qgd2FpdCBhbmQgYmxvY2sgdGhlIHByb2Nlc3MgaW4gY2FzZSB0aGVyZSBhcmUgbm8gZXZlbnRzIGFuZAogICAgICogd2lsbCByZXR1cm4gYWZ0ZXIgb25lIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcC4gVGhpcyBpcyBzb21ldGltZXMgdXNlZnVsIHRvIHBvbGwgYW5kIGhhbmRsZSBuZXcgZXZlbnRzIHdoaWxlIGRvaW5nCiAgICAgKiBsZW5ndGh5IGNhbGN1bGF0aW9ucywgdG8ga2VlcCB0aGUgcHJvZ3JhbSByZXNwb25zaXZlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgUlVOX05PV0FJVCA9IDE7CgogICAgLyoqCiAgICAgKiBGbGFnIHBhc3NlZCB0byBFdjo6cnVuKCkgb3IgRXZMb29wOjpydW4oKTogTWVhbnMgdGhhdCBldmVudCBsb29wIHdpbGwgbG9vayBmb3IgbmV3IGV2ZW50cyAod2FpdGluZyBpZiBuZWNlc3NhcnkpCiAgICAgKiBhbmQgd2lsbCBoYW5kbGUgdGhvc2UgYW5kIGFueSBhbHJlYWR5IG91dHN0YW5kaW5nIG9uZXMuIEl0IHdpbGwgYmxvY2sgdGhlIHByb2Nlc3MgdW50aWwgYXQgbGVhc3Qgb25lIG5ldyBldmVudAogICAgICogYXJyaXZlcyAod2hpY2ggY291bGQgYmUgYW4gZXZlbnQgaW50ZXJuYWwgdG8gbGliZXYgaXRzZWxmLCBzbyB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBhIHVzZXItcmVnaXN0ZXJlZAogICAgICogY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQpLCBhbmQgd2lsbCByZXR1cm4gYWZ0ZXIgb25lIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFJVTl9PTkNFID0gMjsKCiAgICAvKioKICAgICAqIEZsYWcgcGFzc2VkIHRvIEV2OjpzdG9wKCkgb3IgRXZMb29wOjpzdG9wKCk6IENhbmNlbCB0aGUgYnJlYWsgb3BlcmF0aW9uLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQlJFQUtfQ0FOQ0VMID0gMDsKCiAgICAvKioKICAgICAqIEZsYWcgcGFzc2VkIHRvIEV2OjpzdG9wKCkgb3IgRXZMb29wOjpzdG9wKCk6IE1ha2VzIHRoZSBpbm5lcm1vc3QgRXY6OnJ1bigpIG9yIEV2TG9vcDo6cnVuKCkgY2FsbCByZXR1cm4uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCUkVBS19PTkUgPSAxOwoKICAgIC8qKgogICAgICogRmxhZyBwYXNzZWQgdG8gRXY6OnN0b3AoKSBvciBFdkxvb3A6OnN0b3AoKTogTWFrZXMgYWxsIG5lc3RlZCBFdjo6cnVuKCkgb3IgRXZMb29wOjpydW4oKSBjYWxscyByZXR1cm4uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCUkVBS19BTEwgPSAyOwoKICAgIC8qKgogICAgICogTG93ZXN0IGFsbG93ZWQgd2F0Y2hlciBwcmlvcml0eS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IE1JTlBSSSA9IC0yOwoKICAgIC8qKgogICAgICogSGlnaGVzdCBhbGxvd2VkIHdhdGNoZXIgcHJpb3JpdHkuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBNQVhQUkkgPSAyOwoKICAgIC8qKgogICAgICogRXZlbnQgYml0bWFzazogVGhlIGZpbGUgZGVzY3JpcHRvciBpbiB0aGUgRXZJbyB3YXRjaGVyIGhhcyBiZWNvbWUgcmVhZGFibGUuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBSRUFEID0gMTsKCiAgICAvKioKICAgICAqIEV2ZW50IGJpdG1hc2s6IFRoZSBmaWxlIGRlc2NyaXB0b3IgaW4gdGhlIEV2SW8gd2F0Y2hlciBoYXMgYmVjb21lIHdyaXRhYmxlLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgV1JJVEUgPSAyOwoKICAgIC8qKgogICAgICogRXZlbnQgYml0bWFzazogRXZUaW1lciB3YXRjaGVyIGhhcyBiZWVuIHRpbWVkIG91dC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFRJTUVSID0gMjU2OwoKICAgIC8qKgogICAgICogRXZlbnQgYml0bWFzazogRXZQZXJpb2RpYyB3YXRjaGVyIGhhcyBiZWVuIHRpbWVkIG91dC4KICAgICAqLwogICAgcHVibGljIGNvbnN0IFBFUklPRElDID0gNTEyOwoKICAgIC8qKgogICAgICogRXZlbnQgYml0bWFzazogQSBzaWduYWwgc3BlY2lmaWVkIGluIEV2U2lnbmFsOjpfX2NvbnN0cnVjdCgpIGhhcyBiZWVuIHJlY2VpdmVkLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0lHTkFMID0gMTAyNDsKCiAgICAvKioKICAgICAqIEV2ZW50IGJpdG1hc2s6IFRoZSBwaWQgc3BlY2lmaWVkIGluIEV2Q2hpbGQ6Ol9fY29uc3RydWN0KCkgaGFzIHJlY2VpdmVkIGEgc3RhdHVzIGNoYW5nZS4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENISUxEID0gMjA0ODsKCiAgICAvKioKICAgICAqIEV2ZW50IGJpdG1hc2s6IFRoZSBwYXRoIHNwZWNpZmllZCBpbiBFdlN0YXQgd2F0Y2hlciBjaGFuZ2VkIGl0cyBhdHRyaWJ1dGVzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgU1RBVCA9IDQwOTY7CgogICAgLyoqCiAgICAgKiBFdmVudCBiaXRtYXNrOiBFdklkbGUgd2F0Y2hlciB3b3JrcyB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gd2l0aCBvdGhlciB3YXRjaGVycy4KICAgICAqLwogICAgcHVibGljIGNvbnN0IElETEUgPSA4MTkyOwoKICAgIC8qKgogICAgICogRXZlbnQgYml0bWFzazogQWxsIEV2UHJlcGFyZSB3YXRjaGVycyBhcmUgaW52b2tlZCBqdXN0IGJlZm9yZSBFdjo6cnVuKCkgc3RhcnRzLiBUaHVzLCBFdlByZXBhcmUgd2F0Y2hlcnMgYXJlIHRoZQogICAgICogbGFzdCB3YXRjaGVycyBpbnZva2VkIGJlZm9yZSB0aGUgZXZlbnQgbG9vcCBzbGVlcHMgb3IgcG9sbHMgZm9yIG5ldyBldmVudHMuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBQUkVQQVJFID0gMTYzODQ7CgogICAgLyoqCiAgICAgKiBFdmVudCBiaXRtYXNrOiBBbGwgRXZDaGVjayB3YXRjaGVycyBhcmUgcXVldWVkIGp1c3QgYWZ0ZXIgRXY6OnJ1bigpIGhhcyBnYXRoZXJlZCB0aGUgbmV3IGV2ZW50cywgYnV0IGJlZm9yZSBpdAogICAgICogcXVldWVzIGFueSBjYWxsYmFja3MgZm9yIGFueSByZWNlaXZlZCBldmVudHMuIFRodXMsIEV2Q2hlY2sgd2F0Y2hlcnMgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBhbnkgb3RoZXIgd2F0Y2hlcnMKICAgICAqIG9mIHRoZSBzYW1lIG9yIGxvd2VyIHByaW9yaXR5IHdpdGhpbiBhbiBldmVudCBsb29wIGl0ZXJhdGlvbi4KICAgICAqLwogICAgcHVibGljIGNvbnN0IENIRUNLID0gMzI3Njg7CgogICAgLyoqCiAgICAgKiBFdmVudCBiaXRtYXNrOiBUaGUgZW1iZWRkZWQgZXZlbnQgbG9vcCBzcGVjaWZpZWQgaW4gdGhlIEV2RW1iZWQgd2F0Y2hlciBuZWVkcyBhdHRlbnRpb24uCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFTUJFRCA9IDY1NTM2OwoKICAgIC8qKgogICAgICogRXZlbnQgYml0bWFzazogTm90IGV2ZXIgc2VudChvciBvdGhlcndpc2UgdXNlZCkgYnkgbGliZXYgaXRzZWxmLCBidXQgY2FuIGJlIGZyZWVseSB1c2VkIGJ5IGxpYmV2IHVzZXJzIHRvIHNpZ25hbAogICAgICogd2F0Y2hlcnMgKGUuZy4gdmlhIEV2V2F0Y2hlcjo6ZmVlZCgpICkuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDVVNUT00gPSAxNjc3NzIxNjsKCiAgICAvKioKICAgICAqIEV2ZW50IGJpdG1hc2s6IEFuIHVuc3BlY2lmaWVkIGVycm9yIGhhcyBvY2N1cnJlZCwgdGhlIHdhdGNoZXIgaGFzIGJlZW4gc3RvcHBlZC4gVGhpcyBtaWdodCBoYXBwZW4gYmVjYXVzZSB0aGUKICAgICAqIHdhdGNoZXIgY291bGQgbm90IGJlIHByb3Blcmx5IHN0YXJ0ZWQgYmVjYXVzZSBsaWJldiByYW4gb3V0IG9mIG1lbW9yeSwgYSBmaWxlIGRlc2NyaXB0b3Igd2FzIGZvdW5kIHRvIGJlIGNsb3NlZAogICAgICogb3IgYW55IG90aGVyIHByb2JsZW0uIExpYmV2IGNvbnNpZGVycyB0aGVzZSBhcHBsaWNhdGlvbiBidWdzLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJST1IgPSAtMjE0NzQ4MzY0ODsKCiAgICAvKioKICAgICAqIHNlbGVjdCgyKSBiYWNrZW5kCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCQUNLRU5EX1NFTEVDVCA9IDE7CgogICAgLyoqCiAgICAgKiBwb2xsKDIpIGJhY2tlbmQKICAgICAqLwogICAgcHVibGljIGNvbnN0IEJBQ0tFTkRfUE9MTCA9IDI7CgogICAgLyoqCiAgICAgKiBMaW51eC1zcGVjaWZpYyBlcG9sbCg3KSBiYWNrZW5kIGZvciBib3RoIHByZS0gYW5kIHBvc3QtMi42Ljkga2VybmVscwogICAgICovCiAgICBwdWJsaWMgY29uc3QgQkFDS0VORF9FUE9MTCA9IDQ7CgogICAgLyoqCiAgICAgKiBrcXVldWUgYmFja2VuZCB1c2VkIG9uIG1vc3QgQlNEIHN5c3RlbXMuIEV2RW1iZWQgd2F0Y2hlciBjb3VsZCBiZSB1c2VkIHRvIGVtYmVkIG9uZSBsb29wKHdpdGgga3F1ZXVlIGJhY2tlbmQpCiAgICAgKiBpbnRvIGFub3RoZXIuIEZvciBpbnN0YW5jZSwgb25lIGNhbiB0cnkgdG8gY3JlYXRlIGFuIGV2ZW50IGxvb3Agd2l0aCBrcXVldWUgYmFja2VuZCBhbmQgdXNlIGl0IGZvciBzb2NrZXRzIG9ubHkuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCQUNLRU5EX0tRVUVVRSA9IDg7CgogICAgLyoqCiAgICAgKiBTb2xhcmlzIDggYmFja2VuZC4gVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQkFDS0VORF9ERVZQT0xMID0gMTY7CgogICAgLyoqCiAgICAgKiBTb2xhcmlzIDEwIGV2ZW50IHBvcnQgbWVjaGFuaXNtIHdpdGggYSBnb29kIHNjYWxpbmcuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCQUNLRU5EX1BPUlQgPSAzMjsKCiAgICAvKioKICAgICAqIFRyeSBhbGwgYmFja2VuZHMoZXZlbiBjdXJydXB0ZWQgb25lcykuIEl0J3Mgbm90IHJlY29tbWVuZGVkIHRvIHVzZSBpdCBleHBsaWNpdGx5LiBCaXR3aXNlIG9wZXJhdG9ycyBzaG91bGQgYmUKICAgICAqIGFwcGxpZWQgaGVyZShlLmcuIEV2OjpCQUNLRU5EX0FMTCAmIH4gRXY6OkJBQ0tFTkRfS1FVRVVFICkgVXNlIEV2OjpyZWNvbW1lbmRlZEJhY2tlbmRzKCkgLCBvciBkb24ndCBzcGVjaWZ5IGFueQogICAgICogYmFja2VuZHMgYXQgYWxsLgogICAgICovCiAgICBwdWJsaWMgY29uc3QgQkFDS0VORF9BTEwgPSAyNTU7CgogICAgLyoqCiAgICAgKiBOb3QgYSBiYWNrZW5kLCBidXQgYSBtYXNrIHRvIHNlbGVjdCBhbGwgYmFja2VuZCBiaXRzIGZyb20gZmxhZ3MgdmFsdWUgdG8gbWFzayBvdXQgYW55IGJhY2tlbmRzKGUuZy4gd2hlbgogICAgICogbW9kaWZ5aW5nIHRoZSBMSUJFVl9GTEFHUyBlbnZpcm9ubWVudCB2YXJpYWJsZSkuCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBCQUNLRU5EX01BU0sgPSA2NTUzNTsKCiAgICAvKiBNZXRob2RzICovCgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGludGVnZXIgZGVzY3JpYmluZyB0aGUgYmFja2VuZCB1c2VkIGJ5IGxpYmV2LgogICAgICoKICAgICAqIFJldHVybnMgYW4gaW50ZWdlciBkZXNjcmliaW5nIHRoZSBiYWNrZW5kIHVzZWQgYnkgbGliZXYuIFNlZSBFdjo6QkFDS0VORF8qIGZsYWdzCiAgICAgKgogICAgICogQHJldHVybiBpbnQgQml0IG1hc2sgZGVzY3JpYmluZyB0aGUgYmFja2VuZCB1c2VkIGJ5IGxpYmV2LCBzZWUgRXY6OkJBQ0tFTkRfKiBmbGFncy4KICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBiYWNrZW5kKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgcmVjdXJzaW9uIGRlcHRoCiAgICAgKgogICAgICogVGhlIG51bWJlciBvZiB0aW1lcyBFdjo6cnVuKCkgd2FzIGVudGVyZWQgbWludXMgdGhlIG51bWJlciBvZiB0aW1lcyBFdjo6cnVuKCkgd2FzIGV4aXRlZCBub3JtYWxseSwgaW4gb3RoZXIKICAgICAqIHdvcmRzLCB0aGUgcmVjdXJzaW9uIGRlcHRoLiBPdXRzaWRlIEV2OjpydW4oKSAsIHRoaXMgbnVtYmVyIGlzIDAgLiBJbiBhIGNhbGxiYWNrLCB0aGlzIG51bWJlciBpcyAxICwgdW5sZXNzCiAgICAgKiBFdjo6cnVuKCkgd2FzIGludm9rZWQgcmVjdXJzaXZlbHkgKG9yIGZyb20gYW5vdGhlciB0aHJlYWQpLCBpbiB3aGljaCBjYXNlIGl0IGlzIGhpZ2hlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBSZWN1cnNpb24gZGVwdGggb2YgdGhlIGRlZmF1bHQgbG9vcC4KICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZXB0aCgpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzZXQgb2YgYmFja2VuZHMgdGhhdCBhcmUgZW1iZWRkYWJsZSBpbiBvdGhlciBldmVudCBsb29wcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBCaXQgbWFzayB3aGljaCBjYW4gY29udGFpbiBFdjo6QkFDS0VORF8qIGZsYWdzIGNvbWJpbmVkIHVzaW5nIGJpdHdpc2UgT1Igb3BlcmF0b3IuCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZW1iZWRkYWJsZUJhY2tlbmRzKCkge30KCiAgICAvKioKICAgICAqIEZlZWQgc2lnbmFsIGV2ZW50IGludG8gRXYKICAgICAqCiAgICAgKiBTaW11bGF0ZXMgYSBzaWduYWwgcmVjZWl2ZS4gSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYXQgYW55IHRpbWUsIGZyb20gYW55IGNvbnRleHQsIGluY2x1ZGluZyBzaWduYWwKICAgICAqIGhhbmRsZXJzIG9yIHJhbmRvbSB0aHJlYWRzLiBJdHMgbWFpbiB1c2UgaXMgdG8gY3VzdG9taXNlIHNpZ25hbCBoYW5kbGluZyBpbiB0aGUgcHJvY2Vzcy4KICAgICAqCiAgICAgKiBVbmxpa2UgRXY6OmZlZWRTaWduYWxFdmVudCgpICwgdGhpcyB3b3JrcyByZWdhcmRsZXNzIG9mIHdoaWNoIGxvb3AgaGFzIHJlZ2lzdGVyZWQgdGhlIHNpZ25hbC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRzaWdudW0gU2lnbmFsIG51bWJlci4gU2VlIHNpZ25hbCg3KSBtYW4gcGFnZSBmb3IgZGV0YWlscy4gWW91IGNhbiB1c2UgY29uc3RhbnRzIGV4cG9ydGVkIGJ5IHBjbnRsCiAgICAgKiAgICAgIGV4dGVuc2lvbi4KICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZWVkU2lnbmFsKGludCAkc2lnbnVtKSB7fQoKICAgIC8qKgogICAgICogRmVlZCBzaWduYWwgZXZlbnQgaW50byB0aGUgZGVmYXVsdCBsb29wCiAgICAgKgogICAgICogRmVlZCBzaWduYWwgZXZlbnQgaW50byB0aGUgZGVmYXVsdCBsb29wLiBFdiB3aWxsIHJlYWN0IHRvIHRoaXMgY2FsbCBhcyBpZiB0aGUgc2lnbmFsIHNwZWNpZmllZCBieSBzaWduYWwgaGFkCiAgICAgKiBvY2N1cnJlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRzaWdudW0gU2lnbmFsIG51bWJlci4gU2VlIHNpZ25hbCg3KSBtYW4gcGFnZSBmb3IgZGV0YWlscy4gU2VlIGFsc28gY29uc3RhbnRzIGV4cG9ydGVkIGJ5IHBjbnRsCiAgICAgKiAgICAgIGV4dGVuc2lvbi4KICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZWVkU2lnbmFsRXZlbnQoaW50ICRzaWdudW0pIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgZGVmYXVsdCBldmVudCBsb29wIGhhcyBwb2xsZWQgZm9yIG5ldyBldmVudHMuCiAgICAgKgogICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGV2ZW50IGxvb3AgaGFzIHBvbGxlZCBmb3IgbmV3IGV2ZW50cy4gU29tZXRpbWVzIHVzZWZ1bCBhcyBhIGdlbmVyYXRpb24gY291bnRlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBOdW1iZXIgb2YgcG9sbHMgb2YgdGhlIGRlZmF1bHQgZXZlbnQgbG9vcC4KICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpdGVyYXRpb24oKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgdGltZSB3aGVuIHRoZSBsYXN0IGl0ZXJhdGlvbiBvZiB0aGUgZGVmYXVsdCBldmVudCBsb29wIGhhcyBzdGFydGVkLgogICAgICoKICAgICAqIFJldHVybnMgdGhlIHRpbWUgd2hlbiB0aGUgbGFzdCBpdGVyYXRpb24gb2YgdGhlIGRlZmF1bHQgZXZlbnQgbG9vcCBoYXMgc3RhcnRlZC4gVGhpcyBpcyB0aGUgdGltZSB0aGF0IHRpbWVycwogICAgICogKEV2VGltZXIgYW5kIEV2UGVyaW9kaWMpIGFyZSBiYXNlZCBvbiwgYW5kIHJlZmVycmluZyB0byBpdCBpcyB1c3VhbGx5IGZhc3RlciB0aGVuIGNhbGxpbmcgRXY6OnRpbWUoKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0IE51bWJlciBvZiBzZWNvbmRzKGZyYWN0aW9uYWwpIHJlcHJlc2VudGluZyB0aGUgdGltZSB3aGVuIHRoZSBsYXN0IGl0ZXJhdGlvbiBvZiB0aGUgZGVmYXVsdCBldmVudAogICAgICogICAgICBsb29wIGhhcyBzdGFydGVkLgogICAgICovCiAgICBmaW5hbCBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vdygpIHt9CgogICAgLyoqCiAgICAgKiBFc3RhYmxpc2hlcyB0aGUgY3VycmVudCB0aW1lIGJ5IHF1ZXJ5aW5nIHRoZSBrZXJuZWwsIHVwZGF0aW5nIHRoZSB0aW1lIHJldHVybmVkIGJ5IEV2Ojpub3cgaW4gdGhlIHByb2dyZXNzLgogICAgICoKICAgICAqIEVzdGFibGlzaGVzIHRoZSBjdXJyZW50IHRpbWUgYnkgcXVlcnlpbmcgdGhlIGtlcm5lbCwgdXBkYXRpbmcgdGhlIHRpbWUgcmV0dXJuZWQgYnkgRXY6Om5vdygpIGluIHRoZSBwcm9ncmVzcy4KICAgICAqIFRoaXMgaXMgYSBjb3N0bHkgb3BlcmF0aW9uIGFuZCBpcyB1c3VhbGx5IGRvbmUgYXV0b21hdGljYWxseSB3aXRoaW4gRXY6OnJ1bigpLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGlzIHJhcmVseSB1c2VmdWwsIGJ1dCB3aGVuIHNvbWUgZXZlbnQgY2FsbGJhY2sgcnVucyBmb3IgYSB2ZXJ5IGxvbmcgdGltZSB3aXRob3V0IGVudGVyaW5nIHRoZSBldmVudAogICAgICogbG9vcCwgdXBkYXRpbmcgbGliZXYncyBjb25zaWRlcmF0aW9uIG9mIHRoZSBjdXJyZW50IHRpbWUgaXMgYSBnb29kIGlkZWEuCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbm93VXBkYXRlKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYSBiaXQgbWFzayBvZiByZWNvbW1lbmRlZCBiYWNrZW5kcyBmb3IgY3VycmVudCBwbGF0Zm9ybS4KICAgICAqCiAgICAgKiBSZXR1cm5zIHRoZSBzZXQgb2YgYWxsIGJhY2tlbmRzIGNvbXBpbGVkIGludG8gdGhpcyBiaW5hcnkgb2YgbGliZXYgYW5kIGFsc28gcmVjb21tZW5kZWQgZm9yIHRoaXMgcGxhdGZvcm0sCiAgICAgKiBtZWFuaW5nIGl0IHdpbGwgd29yayBmb3IgbW9zdCBmaWxlIGRlc2NyaXB0b3IgdHlwZXMuIFRoaXMgc2V0IGlzIG9mdGVuIHNtYWxsZXIgdGhhbiB0aGUgb25lIHJldHVybmVkIGJ5CiAgICAgKiBFdjo6c3VwcG9ydGVkQmFja2VuZHMoKSwgYXMgZm9yIGV4YW1wbGUga3F1ZXVlIGlzIGJyb2tlbiBvbiBtb3N0IEJTRCBzeXN0ZW1zIGFuZCB3aWxsIG5vdCBiZSBhdXRvLWRldGVjdGVkCiAgICAgKiB1bmxlc3MgaXQgaXMgcmVxdWVzdGVkIGV4cGxpY2l0bHkuIFRoaXMgaXMgdGhlIHNldCBvZiBiYWNrZW5kcyB0aGF0IGxpYmV2IHdpbGwgcHJvYmUgd2l0aCBubyBiYWNrZW5kcyBzcGVjaWZpZWQKICAgICAqIGV4cGxpY2l0bHkuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgQml0IG1hc2sgd2hpY2ggY2FuIGNvbnRhaW4gRXY6OkJBQ0tFTkRfKiBmbGFncyBjb21iaW5lZCB1c2luZyBiaXR3aXNlIE9SIG9wZXJhdG9yLgogICAgICovCiAgICBmaW5hbCBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlY29tbWVuZGVkQmFja2VuZHMoKSB7fQoKICAgIC8qKgogICAgICogUmVzdW1lIHByZXZpb3VzbHkgc3VzcGVuZGVkIGRlZmF1bHQgZXZlbnQgbG9vcC4KICAgICAqCiAgICAgKiBFdjo6c3VzcGVuZCgpIGFuZCBFdjo6cmVzdW1lKCkgbWV0aG9kcyBzdXNwZW5kIGFuZCByZXN1bWUgYSBsb29wIGNvcnJlc3BvbmRpbmdseS4KICAgICAqCiAgICAgKiBBbGwgdGltZXIgd2F0Y2hlcnMgd2lsbCBiZSBkZWxheWVkIGJ5IHRoZSB0aW1lIHNwZW5kIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVzdW1lICwgYW5kIGFsbCBwZXJpb2RpYyB3YXRjaGVycyB3aWxsCiAgICAgKiBiZSByZXNjaGVkdWxlZCh0aGF0IGlzLCB0aGV5IHdpbGwgbG9zZSBhbnkgZXZlbnRzIHRoYXQgd291bGQgaGF2ZSBvY2N1cnJlZCB3aGlsZSBzdXNwZW5kZWQpLgogICAgICoKICAgICAqIEFmdGVyIGNhbGxpbmcgRXY6OnN1c3BlbmQoKSBpdCBpcyBub3QgYWxsb3dlZCB0byBjYWxsIGFueSBmdW5jdGlvbiBvbiB0aGUgZ2l2ZW4gbG9vcCBvdGhlciB0aGFuIEV2OjpyZXN1bWUoKS4KICAgICAqIEFsc28gaXQgaXMgbm90IGFsbG93ZWQgdG8gY2FsbCBFdjo6cmVzdW1lKCkgd2l0aG91dCBhIHByZXZpb3VzIGNhbGwgdG8gRXY6OnN1c3BlbmQoKS4KICAgICAqCiAgICAgKiBDYWxsaW5nIHN1c3BlbmQgLyByZXN1bWUgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiB1cGRhdGluZyB0aGUgZXZlbnQgbG9vcCB0aW1lIChzZWUgRXY6Om5vd1VwZGF0ZSgpKS4KICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXN1bWUoKSB7fQoKICAgIC8qKgogICAgICogQmVnaW4gY2hlY2tpbmcgZm9yIGV2ZW50cyBhbmQgY2FsbGluZyBjYWxsYmFja3MgZm9yIHRoZSBkZWZhdWx0IGxvb3AuCiAgICAgKgogICAgICogQmVnaW4gY2hlY2tpbmcgZm9yIGV2ZW50cyBhbmQgY2FsbGluZyBjYWxsYmFja3MgZm9yIHRoZSBkZWZhdWx0IGxvb3AgLiBSZXR1cm5zIHdoZW4gYSBjYWxsYmFjayBjYWxscyBFdjo6c3RvcCgpCiAgICAgKiBtZXRob2QsIG9yIHRoZSBmbGFncyBhcmUgbm9uemVybyhpbiB3aGljaCBjYXNlIHRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSkgb3Igd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIHdhdGNoZXJzCiAgICAgKiB3aGljaCByZWZlcmVuY2UgdGhlIGxvb3AoIEV2V2F0Y2hlcjo6a2VlcGFsaXZlKCkgaXMgVFJVRSksIGluIHdoaWNoIGNhc2UgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIEZBTFNFLiBUaGUKICAgICAqIHJldHVybiB2YWx1ZSBjYW4gZ2VuZXJhbGx5IGJlIGludGVycHJldGVkIGFzIGlmIFRSVUUsIHRoZXJlIGlzIG1vcmUgd29yayBsZWZ0IHRvIGRvLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIE9uZSBvZiB0aGUgRXY6OkZMQUdfKiBmbGFncwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJ1bihpbnQgJGZsYWdzID0gc2VsZjo6RkxBR19BVVRPKSB7fQoKICAgIC8qKgogICAgICogQmxvY2sgdGhlIHByb2Nlc3MgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcy4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHNlY29uZHMgRnJhY3Rpb25hbCBudW1iZXIgb2Ygc2Vjb25kcwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNsZWVwKGZsb2F0ICRzZWNvbmRzKSB7fQoKICAgIC8qKgogICAgICogU3RvcHMgdGhlIGRlZmF1bHQgZXZlbnQgbG9vcAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGhvdyBPbmUgb2YgdGhlIEV2OjpCUkVBS18qIGNvbnN0YW50cwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0b3AoaW50ICRob3cgPSBzZWxmOjpCUkVBS19PTkUpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzZXQgb2YgYmFja2VuZHMgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgbGliZXYgY29uZmlndXJhdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBCaXQgbWFzayB3aGljaCBjYW4gY29udGFpbiBFdjo6QkFDS0VORF8qIGZsYWdzIGNvbWJpbmVkIHVzaW5nIGJpdHdpc2UgT1Igb3BlcmF0b3IuCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydGVkQmFja2VuZHMoKSB7fQoKICAgIC8qKgogICAgICogU3VzcGVuZCB0aGUgZGVmYXVsdCBldmVudCBsb29wLgogICAgICoKICAgICAqIEV2OjpzdXNwZW5kKCkgYW5kIEV2OjpyZXN1bWUoKSBtZXRob2RzIHN1c3BlbmQgYW5kIHJlc3VtZSB0aGUgZGVmYXVsdCBsb29wIGNvcnJlc3BvbmRpbmdseS4KICAgICAqCiAgICAgKiBBbGwgdGltZXIgd2F0Y2hlcnMgd2lsbCBiZSBkZWxheWVkIGJ5IHRoZSB0aW1lIHNwZW5kIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVzdW1lICwgYW5kIGFsbCBwZXJpb2RpYyB3YXRjaGVycyB3aWxsCiAgICAgKiBiZSByZXNjaGVkdWxlZCh0aGF0IGlzLCB0aGV5IHdpbGwgbG9zZSBhbnkgZXZlbnRzIHRoYXQgd291bGQgaGF2ZSBvY2N1cnJlZCB3aGlsZSBzdXNwZW5kZWQpLgogICAgICoKICAgICAqIEFmdGVyIGNhbGxpbmcgRXY6OnN1c3BlbmQoKSBpdCBpcyBub3QgYWxsb3dlZCB0byBjYWxsIGFueSBmdW5jdGlvbiBvbiB0aGUgZ2l2ZW4gbG9vcCBvdGhlciB0aGFuIEV2OjpyZXN1bWUoKS4KICAgICAqIEFsc28gaXQgaXMgbm90IGFsbG93ZWQgdG8gY2FsbCBFdjo6cmVzdW1lKCkgd2l0aG91dCBhIHByZXZpb3VzIGNhbGwgdG8gRXY6OnN1c3BlbmQoKS4KICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdXNwZW5kKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGltZSBpbiBmcmFjdGlvbmFsIHNlY29uZHMgc2luY2UgdGhlIGVwb2NoLgogICAgICoKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGltZSBpbiBmcmFjdGlvbmFsIHNlY29uZHMgc2luY2UgdGhlIGVwb2NoLiBDb25zaWRlciB1c2luZyBFdjo6bm93KCkKICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0IFRoZSBjdXJyZW50IHRpbWUgaW4gZnJhY3Rpb25hbCBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaC4KICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0aW1lKCkge30KCiAgICAvKioKICAgICAqIFBlcmZvcm1zIGludGVybmFsIGNvbnNpc3RlbmN5IGNoZWNrcyAoZm9yIGRlYnVnZ2luZykuCiAgICAgKgogICAgICogUGVyZm9ybXMgaW50ZXJuYWwgY29uc2lzdGVuY3kgY2hlY2tzIChmb3IgZGVidWdnaW5nIGxpYmV2KSBhbmQgYWJvcnQgdGhlIHByb2dyYW0gaWYgYW55IGRhdGEgc3RydWN0dXJlcyB3ZXJlCiAgICAgKiBmb3VuZCB0byBiZSBjb3JydXB0ZWQuCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdmVyaWZ5KCkge30KfQoKLyoqCiAqIENsYXNzIEV2V2F0Y2hlcgogKi8KYWJzdHJhY3QgY2xhc3MgRXZXYXRjaGVyCnsKICAgIC8qKgogICAgICogQHZhciBib29sIFRSVUUgaWYgdGhlIHdhdGNoZXIgaXMgYWN0aXZlLiBGQUxTRSBvdGhlcndpc2UuCiAgICAgKi8KICAgICNbSW1tdXRhYmxlXQogICAgcHVibGljICRpc19hY3RpdmU7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wgVFJVRSBpZiB0aGUgd2F0Y2hlciBpcyBwZW5kaW5nLCBpLmUuIGl0IGhhcyBvdXRzdGFuZGluZyBldmVudHMsIGJ1dCBpdHMgY2FsbGJhY2sKICAgICAqICAgICAgaGFzIG5vdCB5ZXQgYmVlbiBpbnZva2VkLiBGQUxTRSBvdGhlcndpc2UuIEFzIGxvbmcsIGFzIGEgd2F0Y2hlciBpcyBwZW5kaW5nIChidXQgbm90IGFjdGl2ZSksIG9uZSBtdXN0IG5vdAogICAgICogICAgICBjaGFuZ2UgaXRzIHByaW9yaXR5LgogICAgICovCiAgICAjW0ltbXV0YWJsZV0KICAgIHB1YmxpYyAkaXNfcGVuZGluZzsKCiAgICAvKioKICAgICAqIEFic3RyYWN0IGNvbnN0cnVjdG9yIG9mIGEgd2F0Y2hlciBvYmplY3QKICAgICAqLwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCk7CgogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkIEN1c3RvbSB1c2VyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSB3YXRjaGVyCiAgICAgKi8KICAgIHB1YmxpYyAkZGF0YTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IE51bWJlciBiZXR3ZWVuIEV2OjpNSU5QUmkgYW5kIEV2OjpNQVhQUkkuIFBlbmRpbmcgd2F0Y2hlcnMgd2l0aCBoaWdoZXIgcHJpb3JpdHkgd2lsbCBiZSBpbnZva2VkIGJlZm9yZQogICAgICogICAgICB3YXRjaGVycyB3aXRoIGxvd2VyIHByaW9yaXR5LCBidXQgcHJpb3JpdHkgd2lsbCBub3Qga2VlcCB3YXRjaGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIChleGNlcHQgZm9yIEV2SWRsZQogICAgICogICAgICB3YXRjaGVycykuIEV2SWRsZSB3YXRjaGVycyBwcm92aWRlIGZ1bmN0aW9uYWxpdHkgdG8gc3VwcHJlc3MgaW52b2NhdGlvbiB3aGVuIGhpZ2hlciBwcmlvcml0eSBldmVudHMgYXJlCiAgICAgKiAgICAgIHBlbmRpbmcuCiAgICAgKi8KICAgIHB1YmxpYyAkcHJpb3JpdHk7CgogICAgLyoqCiAgICAgKiBDbGVhciB3YXRjaGVyIHBlbmRpbmcgc3RhdHVzLgogICAgICoKICAgICAqIElmIHRoZSB3YXRjaGVyIGlzIHBlbmRpbmcsIHRoaXMgbWV0aG9kIGNsZWFycyBpdHMgcGVuZGluZyBzdGF0dXMgYW5kIHJldHVybnMgaXRzIHJldmVudHMgYml0c2V0IChhcyBpZiBpdHMKICAgICAqIGNhbGxiYWNrIHdhcyBpbnZva2VkKS4gSWYgdGhlIHdhdGNoZXIgaXNuJ3QgcGVuZGluZyBpdCBkb2VzIG5vdGhpbmcgYW5kIHJldHVybnMgMC4KICAgICAqCiAgICAgKiBTb21ldGltZXMgaXQgY2FuIGJlIHVzZWZ1bCB0byAicG9sbCIgYSB3YXRjaGVyIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgaXRzIGNhbGxiYWNrIHRvIGJlIGludm9rZWQsIHdoaWNoIGNhbiBiZQogICAgICogYWNjb21wbGlzaGVkIHdpdGggdGhpcyBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludCBJbiBjYXNlIGlmIHRoZSB3YXRjaGVyIGlzIHBlbmRpbmcsIHJldHVybnMgcmV2ZW50cyBiaXRzZXQgYXMgaWYgdGhlIHdhdGNoZXIgY2FsbGJhY2sgaGFkIGJlZW4KICAgICAqICAgICAgaW52b2tlZC4gT3RoZXJ3aXNlIHJldHVybnMgMCAuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhcigpIHt9CgogICAgLyoqCiAgICAgKiBGZWVkcyB0aGUgZ2l2ZW4gcmV2ZW50cyBzZXQgaW50byB0aGUgZXZlbnQgbG9vcC4KICAgICAqCiAgICAgKiBGZWVkcyB0aGUgZ2l2ZW4gcmV2ZW50cyBzZXQgaW50byB0aGUgZXZlbnQgbG9vcCwgYXMgaWYgdGhlIHNwZWNpZmllZCBldmVudCBoYWQgaGFwcGVuZWQgZm9yIHRoZSB3YXRjaGVyLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHJldmVudHMgQml0IG1hc2sgb2Ygd2F0Y2hlciByZWNlaXZlZCBldmVudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZWVkKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRyZXZlbnRzKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbG9vcCByZXNwb25zaWJsZSBmb3IgdGhlIHdhdGNoZXIuCiAgICAgKgogICAgICogQHJldHVybiBFdkxvb3AgRXZlbnQgbG9vcCBvYmplY3QgcmVzcG9uc2libGUgZm9yIHRoZSB3YXRjaGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TG9vcCgpIHt9CgogICAgLyoqCiAgICAgKiBJbnZva2VzIHRoZSB3YXRjaGVyIGNhbGxiYWNrIHdpdGggdGhlIGdpdmVuIHJlY2VpdmVkIGV2ZW50cyBiaXQgbWFzay4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRyZXZlbnRzIEJpdCBtYXNrIG9mIHdhdGNoZXIgcmVjZWl2ZWQgZXZlbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW52b2tlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRyZXZlbnRzKSB7fQoKICAgIC8qKgogICAgICogQ29uZmlndXJlcyB3aGV0aGVyIHRvIGtlZXAgdGhlIGxvb3AgZnJvbSByZXR1cm5pbmcuCiAgICAgKgogICAgICogQ29uZmlndXJlcyB3aGV0aGVyIHRvIGtlZXAgdGhlIGxvb3AgZnJvbSByZXR1cm5pbmcuIFdpdGgga2VlcGFsaXZlIHZhbHVlIHNldCB0byBGQUxTRSB0aGUgd2F0Y2hlciB3b24ndCBrZWVwCiAgICAgKiBFdjo6cnVuKCkgLyBFdkxvb3A6OnJ1bigpIGZyb20gcmV0dXJuaW5nIGV2ZW4gdGhvdWdoIHRoZSB3YXRjaGVyIGlzIGFjdGl2ZS4KICAgICAqCiAgICAgKiBXYXRjaGVycyBoYXZlIGtlZXBhbGl2ZSB2YWx1ZSBUUlVFIGJ5IGRlZmF1bHQuCiAgICAgKgogICAgICogQ2xlYXJpbmcga2VlcGFsaXZlIHN0YXR1cyBpcyB1c2VmdWwgd2hlbiByZXR1cm5pbmcgZnJvbSBFdjo6cnVuKCkgLyBFdkxvb3A6OnJ1bigpIGp1c3QgYmVjYXVzZSBvZiB0aGUgd2F0Y2hlcgogICAgICogaXMgdW5kZXNpcmFibGUuIEl0IGNvdWxkIGJlIGEgbG9uZyBydW5uaW5nIFVEUCBzb2NrZXQgd2F0Y2hlciBvciBzby4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkdmFsdWUgV2l0aCBrZWVwYWxpdmUgdmFsdWUgc2V0IHRvIEZBTFNFIHRoZSB3YXRjaGVyIHdvbid0IGtlZXAgRXY6OnJ1bigpIC8gRXZMb29wOjpydW4oKSBmcm9tCiAgICAgKiAgICAgIHJldHVybmluZyBldmVuIHRob3VnaCB0aGUgd2F0Y2hlciBpcyBhY3RpdmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBrZWVwYWxpdmUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICR2YWx1ZSA9IHRydWUpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIG5ldyBjYWxsYmFjayBmb3IgdGhlIHdhdGNoZXIuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayB2b2lkIGNhbGxiYWNrIChbIG9iamVjdCAkd2F0Y2hlciA9IE5VTEwgWywgaW50ICRyZXZlbnRzID0gTlVMTCBdXSApCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDYWxsYmFjaygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRjYWxsYmFjaykge30KCiAgICAvKioKICAgICAqIFN0YXJ0cyB0aGUgd2F0Y2hlci4KICAgICAqCiAgICAgKiBNYXJrcyB0aGUgd2F0Y2hlciBhcyBhY3RpdmUuIE5vdGUgdGhhdCBvbmx5IGFjdGl2ZSB3YXRjaGVycyB3aWxsIHJlY2VpdmUgZXZlbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnQoKSB7fQoKICAgIC8qKgogICAgICogU3RvcHMgdGhlIHdhdGNoZXIuCiAgICAgKgogICAgICogTWFya3MgdGhlIHdhdGNoZXIgYXMgaW5hY3RpdmUuIE5vdGUgdGhhdCBvbmx5IGFjdGl2ZSB3YXRjaGVycyB3aWxsIHJlY2VpdmUgZXZlbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RvcCgpIHt9Cn0KCi8qKgogKiBDbGFzcyBFdkNoZWNrCiAqCiAqIEV2UHJlcGFyZSBhbmQgRXZDaGVjayB3YXRjaGVycyBhcmUgdXN1YWxseSB1c2VkIGluIHBhaXJzLiBFdlByZXBhcmUgd2F0Y2hlcnMgZ2V0IGludm9rZWQgYmVmb3JlIHRoZSBwcm9jZXNzIGJsb2NrcywKICogRXZDaGVjayBhZnRlcndhcmRzLgogKgogKiBJdCBpcyBub3QgYWxsb3dlZCB0byBjYWxsIEV2TG9vcDo6cnVuKCkgb3Igc2ltaWxhciBtZXRob2RzIG9yIGZ1bmN0aW9ucyB0aGF0IGVudGVyIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgZnJvbSBlaXRoZXIKICogRXZQcmVwYXJlIG9yIEV2Q2hlY2sgd2F0Y2hlcnMuIE90aGVyIGxvb3BzIHRoYW4gdGhlIGN1cnJlbnQgb25lIGFyZSBmaW5lLCBob3dldmVyLiBUaGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGlzIHRoYXQKICogb25lIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBpbiB0aG9zZSB3YXRjaGVycywgaS5lLiB0aGUgc2VxdWVuY2Ugd2lsbCBhbHdheXMgYmU6IEV2UHJlcGFyZSAtPiBibG9ja2luZyAtPgogKiBFdkNoZWNrICwgc28gaGF2aW5nIGEgd2F0Y2hlciBvZiBlYWNoIGtpbmQgdGhleSB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgaW4gcGFpcnMgYnJhY2tldGluZyB0aGUgYmxvY2tpbmcgY2FsbC4KICoKICogVGhlIG1haW4gcHVycG9zZSBpcyB0byBpbnRlZ3JhdGUgb3RoZXIgZXZlbnQgbWVjaGFuaXNtcyBpbnRvIGxpYmV2IGFuZCB0aGVpciB1c2UgaXMgc29tZXdoYXQgYWR2YW5jZWQuIFRoZXkgY291bGQgYmUKICogdXNlZCwgZm9yIGV4YW1wbGUsIHRvIHRyYWNrIHZhcmlhYmxlIGNoYW5nZXMsIGltcGxlbWVudCBjdXN0b20gd2F0Y2hlcnMsIGludGVncmF0ZSBuZXQtc25tcCBvciBhIGNvcm91dGluZSBsaWJyYXJ5CiAqIGFuZCBsb3RzIG1vcmUuIFRoZXkgYXJlIGFsc28gb2NjYXNpb25hbGx5IHVzZWZ1bCB0byBjYWNoZSBzb21lIGRhdGEgYW5kIHdhbnQgdG8gZmx1c2ggaXQgYmVmb3JlIGJsb2NraW5nLgogKgogKiBJdCBpcyByZWNvbW1lbmRlZCB0byBnaXZlIEV2Q2hlY2sgd2F0Y2hlcnMgaGlnaGVzdCggRXY6Ok1BWFBSSSApIHByaW9yaXR5LCB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBiZWluZyBydW4gYmVmb3JlCiAqIGFueSBvdGhlciB3YXRjaGVycyBhZnRlciB0aGUgcG9sbCAodGhpcyBkb2VzbuKAmXQgbWF0dGVyIGZvciBFdlByZXBhcmUgd2F0Y2hlcnMpLgogKgogKiBBbHNvLCBFdkNoZWNrIHdhdGNoZXJzIHNob3VsZCBub3QgYWN0aXZhdGUvZmVlZCBldmVudHMuIFdoaWxlIGxpYmV2IGZ1bGx5IHN1cHBvcnRzIHRoaXMsIHRoZXkgbWlnaHQgZ2V0IGV4ZWN1dGVkCiAqIGJlZm9yZSBvdGhlciBFdkNoZWNrIHdhdGNoZXJzIGRpZCB0aGVpciBqb2IuCiAqLwpmaW5hbCBjbGFzcyBFdkNoZWNrIGV4dGVuZHMgRXZXYXRjaGVyCnsKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gaW50ICRwcmlvcml0eQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkY2FsbGJhY2ssCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkZGF0YSA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHByaW9yaXR5ID0gMAogICAgKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gaW50ICRwcmlvcml0eQogICAgICogQHJldHVybiBFdkNoZWNrCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlU3RvcHBlZChtaXhlZCAkY2FsbGJhY2ssIG1peGVkICRkYXRhID0gbnVsbCwgaW50ICRwcmlvcml0eSA9IDApIHt9Cn0KCi8qKgogKiBDbGFzcyBFdkNoaWxkCiAqCiAqIEV2Q2hpbGQgd2F0Y2hlcnMgdHJpZ2dlciB3aGVuIHRoZSBwcm9jZXNzIHJlY2VpdmVzIGEgU0lHQ0hMRCBpbiByZXNwb25zZSB0byBzb21lIGNoaWxkIHN0YXR1cyBjaGFuZ2VzIChtb3N0IHR5cGljYWxseQogKiB3aGVuIGEgY2hpbGQgZGllcyBvciBleGl0cykuIEl0IGlzIHBlcm1pc3NpYmxlIHRvIGluc3RhbGwgYW4gRXZDaGlsZCB3YXRjaGVyIGFmdGVyIHRoZSBjaGlsZCBoYXMgYmVlbiBmb3JrZWQgKHdoaWNoCiAqIGltcGxpZXMgaXQgbWlnaHQgaGF2ZSBhbHJlYWR5IGV4aXRlZCksIGFzIGxvbmcgYXMgdGhlIGV2ZW50IGxvb3AgaXNuJ3QgZW50ZXJlZChvciBpcyBjb250aW51ZWQgZnJvbSBhIHdhdGNoZXIpLCBpLmUuCiAqIGZvcmtpbmcgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmVnaXN0ZXJpbmcgYSB3YXRjaGVyIGZvciB0aGUgY2hpbGQgaXMgZmluZSwgYnV0IGZvcmtpbmcgYW5kIHJlZ2lzdGVyaW5nIGEgd2F0Y2hlciBhIGZldwogKiBldmVudCBsb29wIGl0ZXJhdGlvbnMgbGF0ZXIgb3IgaW4gdGhlIG5leHQgY2FsbGJhY2sgaW52b2NhdGlvbiBpcyBub3QuCiAqCiAqIEl0IGlzIGFsbG93ZWQgdG8gcmVnaXN0ZXIgRXZDaGlsZCB3YXRjaGVycyBpbiB0aGUgZGVmYXVsdCBsb29wIG9ubHkuCiAqLwpmaW5hbCBjbGFzcyBFdkNoaWxkIGV4dGVuZHMgRXZXYXRjaGVyCnsKICAgIC8qKgogICAgICogQHZhciBpbnQgVGhlIHByb2Nlc3MgSUQgdGhpcyB3YXRjaGVyIHdhdGNoZXMgb3V0IGZvciwgb3IgMCwgbWVhbmluZyBhbnkgcHJvY2VzcyBJRC4KICAgICAqLwogICAgI1tJbW11dGFibGVdCiAgICBwdWJsaWMgJHBpZDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IFRoZSBwcm9jZXNzIElEIHRoYXQgZGV0ZWN0ZWQgYSBzdGF0dXMgY2hhbmdlLgogICAgICovCiAgICAjW0ltbXV0YWJsZV0KICAgIHB1YmxpYyAkcnBpZDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IFRoZSBwcm9jZXNzIGV4aXQgc3RhdHVzIGNhdXNlZCBieSBycGlkLgogICAgICovCiAgICAjW0ltbXV0YWJsZV0KICAgIHB1YmxpYyAkcnN0YXR1czsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgdGhlIEV2Q2hpbGQgd2F0Y2hlciBvYmplY3QuCiAgICAgKgogICAgICogQ2FsbCB0aGUgY2FsbGJhY2sgd2hlbiBhIHN0YXR1cyBjaGFuZ2UgZm9yIHByb2Nlc3MgSUQgcGlkIChvciBhbnkgUElEIGlmIHBpZCBpcyAwKSBoYXMgYmVlbiByZWNlaXZlZCAoYSBzdGF0dXMKICAgICAqIGNoYW5nZSBoYXBwZW5zIHdoZW4gdGhlIHByb2Nlc3MgdGVybWluYXRlcyBvciBpcyBraWxsZWQsIG9yLCB3aGVuIHRyYWNlIGlzIFRSVUUsIGFkZGl0aW9uYWxseSB3aGVuIGl0IGlzIHN0b3BwZWQKICAgICAqIG9yIGNvbnRpbnVlZCkuIEluIG90aGVyIHdvcmRzLCB3aGVuIHRoZSBwcm9jZXNzIHJlY2VpdmVzIGEgU0lHQ0hMRCwgRXYgd2lsbCBmZXRjaCB0aGUgb3V0c3RhbmRpbmcgZXhpdC93YWl0CiAgICAgKiBzdGF0dXMgZm9yIGFsbCBjaGFuZ2VkL3pvbWJpZSBjaGlsZHJlbiBhbmQgY2FsbCB0aGUgY2FsbGJhY2suCiAgICAgKgogICAgICogSXQgaXMgdmFsaWQgdG8gaW5zdGFsbCBhIGNoaWxkIHdhdGNoZXIgYWZ0ZXIgYW4gRXZDaGlsZCBoYXMgZXhpdGVkIGJ1dCBiZWZvcmUgdGhlIGV2ZW50IGxvb3AgaGFzIHN0YXJ0ZWQgaXRzIG5leHQKICAgICAqIGl0ZXJhdGlvbi4gRm9yIGV4YW1wbGUsIGZpcnN0IG9uZSBjYWxscyBmb3JrICwgdGhlbiB0aGUgbmV3IGNoaWxkIHByb2Nlc3MgbWlnaHQgZXhpdCwgYW5kIG9ubHkgdGhlbiBhbiBFdkNoaWxkCiAgICAgKiB3YXRjaGVyIGlzIGluc3RhbGxlZCBpbiB0aGUgcGFyZW50IGZvciB0aGUgbmV3IFBJRCAuCiAgICAgKgogICAgICogWW91IGNhbiBhY2Nlc3MgYm90aCBleGl0L3RyYWNpbmcgc3RhdHVzIGFuZCBwaWQgYnkgdXNpbmcgdGhlIHJzdGF0dXMgYW5kIHJwaWQgcHJvcGVydGllcyBvZiB0aGUgd2F0Y2hlciBvYmplY3QuCiAgICAgKgogICAgICogVGhlIG51bWJlciBvZiBQSUQgd2F0Y2hlcnMgcGVyIFBJRCBpcyB1bmxpbWl0ZWQuIEFsbCBvZiB0aGVtIHdpbGwgYmUgY2FsbGVkLgogICAgICoKICAgICAqIFRoZSBFdkNoaWxkOjpjcmVhdGVTdG9wcGVkKCkgbWV0aG9kIGRvZXNuJ3Qgc3RhcnQoYWN0aXZhdGUpIHRoZSBuZXdseSBjcmVhdGVkIHdhdGNoZXIuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkcGlkICBXYWl0IGZvciBzdGF0dXMgY2hhbmdlcyBvZiBwcm9jZXNzIFBJRChvciBhbnkgcHJvY2VzcyBpZiBQSUQgaXMgc3BlY2lmaWVkIGFzIDAgKS4KICAgICAqIEBwYXJhbSBib29sICR0cmFjZSBJZiBGQUxTRSwgb25seSBhY3RpdmF0ZSB0aGUgd2F0Y2hlciB3aGVuIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuIE90aGVyd2lzZShUUlVFKSBhZGRpdGlvbmFsbHkKICAgICAqICAgICAgYWN0aXZhdGUgdGhlIHdhdGNoZXIgd2hlbiB0aGUgcHJvY2VzcyBpcyBzdG9wcGVkIG9yIGNvbnRpbnVlZC4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YQogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRwaWQsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICR0cmFjZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRjYWxsYmFjaywKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRkYXRhID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkcHJpb3JpdHkgPSAwCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgaW5zdGFuY2Ugb2YgYSBzdG9wcGVkIEV2Q2hlY2sgd2F0Y2hlci4KICAgICAqCiAgICAgKiBUaGUgc2FtZSBhcyBFdkNoaWxkOjpfX2NvbnN0cnVjdCgpICwgYnV0IGRvZXNuJ3Qgc3RhcnQgdGhlIHdhdGNoZXIgYXV0b21hdGljYWxseS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRwaWQgIFdhaXQgZm9yIHN0YXR1cyBjaGFuZ2VzIG9mIHByb2Nlc3MgUElEKG9yIGFueSBwcm9jZXNzIGlmIFBJRCBpcyBzcGVjaWZpZWQgYXMgMCApLgogICAgICogQHBhcmFtIGJvb2wgJHRyYWNlIElmIEZBTFNFLCBvbmx5IGFjdGl2YXRlIHRoZSB3YXRjaGVyIHdoZW4gdGhlIHByb2Nlc3MgdGVybWluYXRlcy4gT3RoZXJ3aXNlKFRSVUUpIGFkZGl0aW9uYWxseQogICAgICogICAgICBhY3RpdmF0ZSB0aGUgd2F0Y2hlciB3aGVuIHRoZSBwcm9jZXNzIGlzIHN0b3BwZWQgb3IgY29udGludWVkLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gaW50ICRwcmlvcml0eQogICAgICoKICAgICAqIEByZXR1cm4gRXZDaGlsZAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVN0b3BwZWQoaW50ICRwaWQsIGJvb2wgJHRyYWNlLCBtaXhlZCAkY2FsbGJhY2ssIG1peGVkICRkYXRhID0gbnVsbCwgaW50ICRwcmlvcml0eSA9IDApIHt9CgogICAgLyoqCiAgICAgKiBDb25maWd1cmVzIHRoZSB3YXRjaGVyCiAgICAgKgogICAgICogQHBhcmFtIGludCAkcGlkICBXYWl0IGZvciBzdGF0dXMgY2hhbmdlcyBvZiBwcm9jZXNzIFBJRChvciBhbnkgcHJvY2VzcyBpZiBQSUQgaXMgc3BlY2lmaWVkIGFzIDAgKS4KICAgICAqIEBwYXJhbSBib29sICR0cmFjZSBJZiBGQUxTRSwgb25seSBhY3RpdmF0ZSB0aGUgd2F0Y2hlciB3aGVuIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuIE90aGVyd2lzZShUUlVFKSBhZGRpdGlvbmFsbHkKICAgICAqICAgICAgYWN0aXZhdGUgdGhlIHdhdGNoZXIgd2hlbiB0aGUgcHJvY2VzcyBpcyBzdG9wcGVkIG9yIGNvbnRpbnVlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkcGlkLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkdHJhY2UKICAgICkge30KfQoKLyoqCiAqIENsYXNzIEV2RW1iZWQKICoKICogVXNlZCB0byBlbWJlZCBvbmUgZXZlbnQgbG9vcCBpbnRvIGFub3RoZXIuCiAqLwpmaW5hbCBjbGFzcyBFdkVtYmVkIGV4dGVuZHMgRXZXYXRjaGVyCnsKICAgIC8qKgogICAgICogQHZhciBFdkxvb3AgVGhlIGVtYmVkZGVkIGxvb3AKICAgICAqLwogICAgI1tJbW11dGFibGVdCiAgICBwdWJsaWMgJGVtYmVkOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyB0aGUgRXZFbWJlZCBvYmplY3QuCiAgICAgKgogICAgICogVGhpcyBpcyBhIHJhdGhlciBhZHZhbmNlZCB3YXRjaGVyIHR5cGUgdGhhdCBsZXRzIHRvIGVtYmVkIG9uZSBldmVudCBsb29wIGludG8gYW5vdGhlcihjdXJyZW50bHkgb25seSBJTyBldmVudHMKICAgICAqIGFyZSBzdXBwb3J0ZWQgaW4gdGhlIGVtYmVkZGVkIGxvb3AsIG90aGVyIHR5cGVzIG9mIHdhdGNoZXJzIG1pZ2h0IGJlIGhhbmRsZWQgaW4gYSBkZWxheWVkIG9yIGluY29ycmVjdCBmYXNoaW9uCiAgICAgKiBhbmQgbXVzdCBub3QgYmUgdXNlZCkuCiAgICAgKgogICAgICogU2VlIHRoZSBsaWJldiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgogICAgICoKICAgICAqIFRoaXMgd2F0Y2hlciBpcyBtb3N0IHVzZWZ1bCBvbiBCU0Qgc3lzdGVtcyB3aXRob3V0IHdvcmtpbmcga3F1ZXVlIHRvIHN0aWxsIGJlIGFibGUgdG8gaGFuZGxlIGEgbGFyZ2UgbnVtYmVyIG9mCiAgICAgKiBzb2NrZXRzLgogICAgICoKICAgICAqIEBwYXJhbSBFdkxvb3AgJG90aGVyIFRoZSBsb29wIHRvIGVtYmVkLCB0aGlzIGxvb3AgbXVzdCBiZSBlbWJlZGRhYmxlKHNlZSBFdjo6ZW1iZWRkYWJsZUJhY2tlbmRzKCkpLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gaW50ICRwcmlvcml0eQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgRXZMb29wICRvdGhlciwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRjYWxsYmFjaywKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRkYXRhID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkcHJpb3JpdHkgPSAwCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBDb25maWd1cmVzIHRoZSB3YXRjaGVyLgogICAgICoKICAgICAqIEBwYXJhbSBFdkxvb3AgJG90aGVyIFRoZSBsb29wIHRvIGVtYmVkLCB0aGlzIGxvb3AgbXVzdCBiZSBlbWJlZGRhYmxlKHNlZSBFdjo6ZW1iZWRkYWJsZUJhY2tlbmRzKCkpLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KEV2TG9vcCAkb3RoZXIpIHt9CgogICAgLyoqCiAgICAgKiBNYWtlIGEgc2luZ2xlLCBub24tYmxvY2tpbmcgc3dlZXAgb3ZlciB0aGUgZW1iZWRkZWQgbG9vcC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN3ZWVwKCkge30KCiAgICAvKioKICAgICAqIENyZWF0ZSBzdG9wcGVkIEV2RW1iZWQgd2F0Y2hlciBvYmplY3QKICAgICAqCiAgICAgKiBUaGUgc2FtZSBhcyBFdkVtYmVkOjpfX2NvbnN0cnVjdCgpICwgYnV0IGRvZXNuJ3Qgc3RhcnQgdGhlIHdhdGNoZXIgYXV0b21hdGljYWxseS4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZMb29wICRvdGhlciBUaGUgbG9vcCB0byBlbWJlZCwgdGhpcyBsb29wIG11c3QgYmUgZW1iZWRkYWJsZShzZWUgRXY6OmVtYmVkZGFibGVCYWNrZW5kcygpKS4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YQogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqCiAgICAgKiBAcmV0dXJuIEV2RW1iZWQKICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVTdG9wcGVkKEV2TG9vcCAkb3RoZXIsIG1peGVkICRjYWxsYmFjaywgbWl4ZWQgJGRhdGEgPSBudWxsLCBpbnQgJHByaW9yaXR5ID0gMCkge30KfQoKLyoqCiAqIENsYXNzIEV2SW8KICoKICogRXZJbyB3YXRjaGVycyBjaGVjayB3aGV0aGVyIGEgZmlsZSBkZXNjcmlwdG9yKG9yIHNvY2tldCwgb3IgYSBzdHJlYW0gY2FzdGFibGUgdG8gbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IpIGlzIHJlYWRhYmxlCiAqIG9yIHdyaXRhYmxlIGluIGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wLCBvciwgbW9yZSBwcmVjaXNlbHksIHdoZW4gcmVhZGluZyB3b3VsZCBub3QgYmxvY2sgdGhlIHByb2Nlc3MgYW5kCiAqIHdyaXRpbmcgd291bGQgYXQgbGVhc3QgYmUgYWJsZSB0byB3cml0ZSBzb21lIGRhdGEuIFRoaXMgYmVoYXZpb3VyIGlzIGNhbGxlZCBsZXZlbC10cmlnZ2VyaW5nIGJlY2F1c2UgZXZlbnRzIGFyZSBrZXB0CiAqIHJlY2VpdmluZyBhcyBsb25nIGFzIHRoZSBjb25kaXRpb24gcGVyc2lzdHMuIFRvIHN0b3AgcmVjZWl2aW5nIGV2ZW50cyBqdXN0IHN0b3AgdGhlIHdhdGNoZXIuCiAqCiAqIFRoZSBudW1iZXIgb2YgcmVhZCBhbmQvb3Igd3JpdGUgZXZlbnQgd2F0Y2hlcnMgcGVyIGZkIGlzIHVubGltaXRlZC4gU2V0dGluZyBhbGwgZmlsZSBkZXNjcmlwdG9ycyB0byBub24tYmxvY2tpbmcgbW9kZQogKiBpcyBhbHNvIHVzdWFsbHkgYSBnb29kIGlkZWEgKGJ1dCBub3QgcmVxdWlyZWQpLgogKgogKiBBbm90aGVyIHRoaW5nIHRvIHdhdGNoIG91dCBmb3IgaXMgdGhhdCBpdCBpcyBxdWl0ZSBlYXN5IHRvIHJlY2VpdmUgZmFsc2UgcmVhZGluZXNzIG5vdGlmaWNhdGlvbnMsIGkuZS4gdGhlIGNhbGxiYWNrCiAqIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIEV2OjpSRUFEIGJ1dCBhIHN1YnNlcXVlbnQgcmVhZCgpIHdpbGwgYWN0dWFsbHkgYmxvY2sgYmVjYXVzZSB0aGVyZSBpcyBubyBkYXRhLiBJdCBpcyB2ZXJ5IGVhc3kKICogdG8gZ2V0IGludG8gdGhpcyBzaXR1YXRpb24uIFRodXMgaXQgaXMgYmVzdCB0byBhbHdheXMgdXNlIG5vbi1ibG9ja2luZyBJL086IEFuIGV4dHJhIHJlYWQoKSByZXR1cm5pbmcgRUFHQUlOIChvcgogKiBzaW1pbGFyKSBpcyBmYXIgcHJlZmVyYWJsZSB0byBhIHByb2dyYW0gaGFuZ2luZyB1bnRpbCBzb21lIGRhdGEgYXJyaXZlcy4KICoKICogSWYgZm9yIHNvbWUgcmVhc29uIGl0IGlzIGltcG9zc2libGUgdG8gcnVuIHRoZSBmZCBpbiBub24tYmxvY2tpbmcgbW9kZSwgdGhlbiBzZXBhcmF0ZWx5IHJlLXRlc3Qgd2hldGhlciBhIGZpbGUKICogZGVzY3JpcHRvciBpcyByZWFsbHkgcmVhZHkuIFNvbWUgcGVvcGxlIGFkZGl0aW9uYWxseSB1c2UgU0lHQUxSTSBhbmQgYW4gaW50ZXJ2YWwgdGltZXIsIGp1c3QgdG8gYmUgc3VyZSB0aGV5IHdvbid0CiAqIGJsb2NrIGluZmluaXRlbHkuCiAqCiAqIEFsd2F5cyBjb25zaWRlciB1c2luZyBub24tYmxvY2tpbmcgbW9kZS4KICovCmZpbmFsIGNsYXNzIEV2SW8gZXh0ZW5kcyBFdldhdGNoZXIKewogICAgLyoqCiAgICAgKiBAdmFyIHJlc291cmNlIEEgc3RyZWFtIG9wZW5lZCB3aXRoIGZvcGVuKCkgb3Igc2ltaWxhciBmdW5jdGlvbnMsIG51bWVyaWMgZmlsZSBkZXNjcmlwdG9yLCBvciBzb2NrZXQuCiAgICAgKi8KICAgICNbSW1tdXRhYmxlXQogICAgcHVibGljICRmZDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IEV2OjpSRUFEIGFuZC9vciBFdjo6V1JJVEUuIFNlZSB0aGUgYml0IG1hc2tzLgogICAgICovCiAgICAjW0ltbXV0YWJsZV0KICAgICNbRXhwZWN0ZWRWYWx1ZXMoZmxhZ3M6IFtFdjo6UkVBRCwgRXY6OldSSVRFXSldCiAgICBwdWJsaWMgJGV2ZW50czsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgRXZJbyB3YXRjaGVyIG9iamVjdC4KICAgICAqCiAgICAgKiBDb25zdHJ1Y3RzIEV2SW8gd2F0Y2hlciBvYmplY3QgYW5kIHN0YXJ0cyB0aGUgd2F0Y2hlciBhdXRvbWF0aWNhbGx5LgogICAgICoKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkZmQgIEEgc3RyZWFtIG9wZW5lZCB3aXRoIGZvcGVuKCkgb3Igc2ltaWxhciBmdW5jdGlvbnMsIG51bWVyaWMgZmlsZSBkZXNjcmlwdG9yLCBvciBzb2NrZXQuCiAgICAgKiBAcGFyYW0gaW50ICRldmVudHMgRXY6OlJFQUQgYW5kL29yIEV2OjpXUklURS4gU2VlIHRoZSBiaXQgbWFza3MuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRhdGEKICAgICAqIEBwYXJhbSBpbnQgJHByaW9yaXR5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRmZCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZXZlbnRzLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJGNhbGxiYWNrLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJGRhdGEgPSBudWxsLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRwcmlvcml0eSA9IDAKICAgICkge30KCiAgICAvKioKICAgICAqIENvbmZpZ3VyZXMgdGhlIHdhdGNoZXIuCiAgICAgKgogICAgICogQHBhcmFtIHJlc291cmNlICRmZCAgQSBzdHJlYW0gb3BlbmVkIHdpdGggZm9wZW4oKSBvciBzaW1pbGFyIGZ1bmN0aW9ucywgbnVtZXJpYyBmaWxlIGRlc2NyaXB0b3IsIG9yIHNvY2tldC4KICAgICAqIEBwYXJhbSBpbnQgJGV2ZW50cyBFdjo6UkVBRCBhbmQvb3IgRXY6OldSSVRFLiBTZWUgdGhlIGJpdCBtYXNrcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRmZCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZXZlbnRzCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgc3RvcHBlZCBFdklvIHdhdGNoZXIgb2JqZWN0LgogICAgICoKICAgICAqIFRoZSBzYW1lIGFzIEV2SW86Ol9fY29uc3RydWN0KCkgLCBidXQgZG9lc24ndCBzdGFydCB0aGUgd2F0Y2hlciBhdXRvbWF0aWNhbGx5LgogICAgICoKICAgICAqIEBwYXJhbSByZXNvdXJjZSAkZmQgIEEgc3RyZWFtIG9wZW5lZCB3aXRoIGZvcGVuKCkgb3Igc2ltaWxhciBmdW5jdGlvbnMsIG51bWVyaWMgZmlsZSBkZXNjcmlwdG9yLCBvciBzb2NrZXQuCiAgICAgKiBAcGFyYW0gaW50ICRldmVudHMgRXY6OlJFQUQgYW5kL29yIEV2OjpXUklURS4gU2VlIHRoZSBiaXQgbWFza3MuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRhdGEKICAgICAqIEBwYXJhbSBpbnQgJHByaW9yaXR5CiAgICAgKgogICAgICogQHJldHVybiBFdklvCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlU3RvcHBlZChtaXhlZCAkZmQsIGludCAkZXZlbnRzLCBtaXhlZCAkY2FsbGJhY2ssIG1peGVkICRkYXRhID0gbnVsbCwgaW50ICRwcmlvcml0eSA9IDApIHt9Cn0KCi8qKgogKiBDbGFzcyBFdlBlcmlvZGljCiAqCiAqIFBlcmlvZGljIHdhdGNoZXJzIGFyZSBhbHNvIHRpbWVycyBvZiBhIGtpbmQsIGJ1dCB0aGV5IGFyZSB2ZXJ5IHZlcnNhdGlsZS4KICoKICogVW5saWtlIEV2VGltZXIsIEV2UGVyaW9kaWMgd2F0Y2hlcnMgYXJlIG5vdCBiYXNlZCBvbiByZWFsIHRpbWUgKG9yIHJlbGF0aXZlIHRpbWUsIHRoZSBwaHlzaWNhbCB0aW1lIHRoYXQgcGFzc2VzKSBidXQKICogb24gd2FsbCBjbG9jayB0aW1lIChhYnNvbHV0ZSB0aW1lLCBjYWxlbmRhciBvciBjbG9jaykuIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgd2FsbCBjbG9jayB0aW1lIGNhbiBydW4gZmFzdGVyIG9yCiAqIHNsb3dlciB0aGFuIHJlYWwgdGltZSwgYW5kIHRpbWUganVtcHMgYXJlIG5vdCB1bmNvbW1vbiAoZS5nLiB3aGVuIGFkanVzdGluZyBpdCkuCiAqCiAqIEV2UGVyaW9kaWMgd2F0Y2hlciBjYW4gYmUgY29uZmlndXJlZCB0byB0cmlnZ2VyIGFmdGVyIHNvbWUgc3BlY2lmaWMgcG9pbnQgaW4gdGltZS4gRm9yIGV4YW1wbGUsIGlmIGFuIEV2UGVyaW9kaWMKICogd2F0Y2hlciBpcyBjb25maWd1cmVkIHRvIHRyaWdnZXIgImluIDEwIHNlY29uZHMiIChlLmcuIEV2TG9vcDo6bm93KCkgKyAxMC4wICwgaS5lLiBhbiBhYnNvbHV0ZSB0aW1lLCBub3QgYSBkZWxheSksCiAqIGFuZCB0aGUgc3lzdGVtIGNsb2NrIGlzIHJlc2V0IHRvIEphbnVhcnkgb2YgdGhlIHByZXZpb3VzIHllYXIgLCB0aGVuIGl0IHdpbGwgdGFrZSBhIHllYXIgb3IgbW9yZSB0byB0cmlnZ2VyIHRoZSBldmVudAogKiAodW5saWtlIGFuIEV2VGltZXIgLCB3aGljaCB3b3VsZCBzdGlsbCB0cmlnZ2VyIHJvdWdobHkgMTAgc2Vjb25kcyBhZnRlciBzdGFydGluZyBpdCBhcyBpdCB1c2VzIGEgcmVsYXRpdmUgdGltZW91dCkuCiAqCiAqIEFzIHdpdGggdGltZXJzLCB0aGUgY2FsbGJhY2sgaXMgZ3VhcmFudGVlZCB0byBiZSBpbnZva2VkIG9ubHkgd2hlbiB0aGUgcG9pbnQgaW4gdGltZSB3aGVyZSBpdCBpcyBzdXBwb3NlZCB0byB0cmlnZ2VyCiAqIGhhcyBwYXNzZWQuIElmIG11bHRpcGxlIHRpbWVycyBiZWNvbWUgcmVhZHkgZHVyaW5nIHRoZSBzYW1lIGxvb3AgaXRlcmF0aW9uIHRoZW4gdGhlIG9uZXMgd2l0aCBlYXJsaWVyIHRpbWUtb3V0IHZhbHVlcwogKiBhcmUgaW52b2tlZCBiZWZvcmUgb25lcyB3aXRoIGxhdGVyIHRpbWUtb3V0IHZhbHVlcyAoYnV0IHRoaXMgaXMgbm8gbG9uZ2VyIHRydWUgd2hlbiBhIGNhbGxiYWNrIGNhbGxzIEV2TG9vcDo6cnVuKCkKICogcmVjdXJzaXZlbHkpLgogKi8KZmluYWwgY2xhc3MgRXZQZXJpb2RpYyBleHRlbmRzIEV2V2F0Y2hlcgp7CiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQgV2hlbiByZXBlYXRpbmcsIHRoaXMgY29udGFpbnMgdGhlIG9mZnNldCB2YWx1ZSwgb3RoZXJ3aXNlIHRoaXMgaXMgdGhlIGFic29sdXRlIHBvaW50IGluIHRpbWUgKHRoZQogICAgICogICAgICBvZmZzZXQgdmFsdWUgcGFzc2VkIHRvIEV2UGVyaW9kaWM6OnNldCgpLCBhbHRob3VnaCBsaWJldiBtaWdodCBtb2RpZnkgdGhpcyB2YWx1ZSBmb3IgYmV0dGVyIG51bWVyaWNhbAogICAgICogICAgICBzdGFiaWxpdHkpLgogICAgICovCiAgICBwdWJsaWMgJG9mZnNldDsKCiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQgVGhlIGN1cnJlbnQgaW50ZXJ2YWwgdmFsdWUuIENhbiBiZSBtb2RpZmllZCBhbnkgdGltZSwgYnV0IGNoYW5nZXMgb25seSB0YWtlIGVmZmVjdCB3aGVuIHRoZSBwZXJpb2RpYwogICAgICogICAgICB0aW1lciBmaXJlcyBvciBFdlBlcmlvZGljOjphZ2FpbigpIGlzIGJlaW5nIGNhbGxlZC4KICAgICAqLwogICAgcHVibGljICRpbnRlcnZhbDsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgRXZQZXJpb2RpYyB3YXRjaGVyIG9iamVjdC4KICAgICAqCiAgICAgKiBDb25zdHJ1Y3RzIEV2UGVyaW9kaWMgd2F0Y2hlciBvYmplY3QgYW5kIHN0YXJ0cyBpdCBhdXRvbWF0aWNhbGx5LiBFdlBlcmlvZGljOjpjcmVhdGVTdG9wcGVkKCkgbWV0aG9kIGNyZWF0ZXMKICAgICAqIHN0b3BwZWQgcGVyaW9kaWMgd2F0Y2hlci4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJG9mZnNldCBXaGVuIHJlcGVhdGluZywgdGhpcyBjb250YWlucyB0aGUgb2Zmc2V0IHZhbHVlLCBvdGhlcndpc2UgdGhpcyBpcyB0aGUgYWJzb2x1dGUgcG9pbnQgaW4KICAgICAqICAgICAgdGltZSAodGhlIG9mZnNldCB2YWx1ZSBwYXNzZWQgdG8gRXZQZXJpb2RpYzo6c2V0KCksIGFsdGhvdWdoIGxpYmV2IG1pZ2h0IG1vZGlmeSB0aGlzIHZhbHVlIGZvciBiZXR0ZXIKICAgICAqICAgICAgbnVtZXJpY2FsIHN0YWJpbGl0eSkuCiAgICAgKiBAcGFyYW0gZmxvYXQgJGludGVydmFsIFRoZSBjdXJyZW50IGludGVydmFsIHZhbHVlLiBDYW4gYmUgbW9kaWZpZWQgYW55IHRpbWUsIGJ1dCBjaGFuZ2VzIG9ubHkgdGFrZSBlZmZlY3Qgd2hlbgogICAgICogICAgICB0aGUgcGVyaW9kaWMgdGltZXIgZmlyZXMgb3IgRXZQZXJpb2RpYzo6YWdhaW4oKSBpcyBiZWluZyBjYWxsZWQuCiAgICAgKiBAcGFyYW0gbnVsbHxjYWxsYWJsZSAkcmVzY2hlZHVsZV9jYiBJZiBzZXQsIHR0IG11c3QgcmV0dXJuIHRoZSBuZXh0IHRpbWUgdG8gdHJpZ2dlciwgYmFzZWQgb24gdGhlIHBhc3NlZCB0aW1lIHZhbHVlCiAgICAgKiAgICAgICh0aGF0IGlzLCB0aGUgbG93ZXN0IHRpbWUgdmFsdWUgbGFyZ2VyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlY29uZCBhcmd1bWVudCkuIEl0IHdpbGwgdXN1YWxseSBiZSBjYWxsZWQganVzdAogICAgICogICAgICBiZWZvcmUgdGhlIGNhbGxiYWNrIHdpbGwgYmUgdHJpZ2dlcmVkLCBidXQgbWlnaHQgYmUgY2FsbGVkIGF0IG90aGVyIHRpbWVzLCB0b28uCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRhdGEKICAgICAqIEBwYXJhbSBpbnQgJHByaW9yaXR5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdmbG9hdCddLCBkZWZhdWx0OiAnJyldICRvZmZzZXQsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnZmxvYXQnXSwgZGVmYXVsdDogJycpXSAkaW50ZXJ2YWwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkcmVzY2hlZHVsZV9jYiwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRjYWxsYmFjaywKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRkYXRhID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkcHJpb3JpdHkgPSAwCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBTaW1wbHkgc3RvcHMgYW5kIHJlc3RhcnRzIHRoZSBwZXJpb2RpYyB3YXRjaGVyIGFnYWluLgogICAgICoKICAgICAqIFNpbXBseSBzdG9wcyBhbmQgcmVzdGFydHMgdGhlIHBlcmlvZGljIHdhdGNoZXIgYWdhaW4uIFRoaXMgaXMgb25seSB1c2VmdWwgd2hlbiBhdHRyaWJ1dGVzIGFyZSBjaGFuZ2VkLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWdhaW4oKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgYWJzb2x1dGUgdGltZSB0aGF0IHRoaXMgd2F0Y2hlciBpcyBzdXBwb3NlZCB0byB0cmlnZ2VyIG5leHQuCiAgICAgKgogICAgICogV2hlbiB0aGUgd2F0Y2hlciBpcyBhY3RpdmUsIHJldHVybnMgdGhlIGFic29sdXRlIHRpbWUgdGhhdCB0aGlzIHdhdGNoZXIgaXMgc3VwcG9zZWQgdG8gdHJpZ2dlciBuZXh0LiBUaGlzIGlzIG5vdAogICAgICogdGhlIHNhbWUgYXMgdGhlIG9mZnNldCBhcmd1bWVudCB0byBFdlBlcmlvZGljOjpzZXQoKSBvciBFdlBlcmlvZGljOjpfX2NvbnN0cnVjdCgpLCBidXQgaW5kZWVkIHdvcmtzIGV2ZW4gaW4KICAgICAqIGludGVydmFsIG1vZGUuCiAgICAgKgogICAgICogQHJldHVybiBmbG9hdCBSaGUgYWJzb2x1dGUgdGltZSB0aGlzIHdhdGNoZXIgaXMgc3VwcG9zZWQgdG8gdHJpZ2dlciBuZXh0IGluIHNlY29uZHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhdCgpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBzdG9wcGVkIEV2UGVyaW9kaWMgd2F0Y2hlcgogICAgICoKICAgICAqIENyZWF0ZSBFdlBlcmlvZGljIG9iamVjdC4gVW5saWtlIEV2UGVyaW9kaWM6Ol9fY29uc3RydWN0KCkgdGhpcyBtZXRob2QgZG9lc24ndCBzdGFydCB0aGUgd2F0Y2hlciBhdXRvbWF0aWNhbGx5LgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkb2Zmc2V0IFdoZW4gcmVwZWF0aW5nLCB0aGlzIGNvbnRhaW5zIHRoZSBvZmZzZXQgdmFsdWUsIG90aGVyd2lzZSB0aGlzIGlzIHRoZSBhYnNvbHV0ZSBwb2ludCBpbgogICAgICogICAgICB0aW1lICh0aGUgb2Zmc2V0IHZhbHVlIHBhc3NlZCB0byBFdlBlcmlvZGljOjpzZXQoKSwgYWx0aG91Z2ggbGliZXYgbWlnaHQgbW9kaWZ5IHRoaXMgdmFsdWUgZm9yIGJldHRlcgogICAgICogICAgICBudW1lcmljYWwgc3RhYmlsaXR5KS4KICAgICAqIEBwYXJhbSBmbG9hdCAkaW50ZXJ2YWwgVGhlIGN1cnJlbnQgaW50ZXJ2YWwgdmFsdWUuIENhbiBiZSBtb2RpZmllZCBhbnkgdGltZSwgYnV0IGNoYW5nZXMgb25seSB0YWtlIGVmZmVjdCB3aGVuCiAgICAgKiAgICAgIHRoZSBwZXJpb2RpYyB0aW1lciBmaXJlcyBvciBFdlBlcmlvZGljOjphZ2FpbigpIGlzIGJlaW5nIGNhbGxlZC4KICAgICAqIEBwYXJhbSBudWxsfGNhbGxhYmxlICRyZXNjaGVkdWxlX2NiIElmIHNldCwgdHQgbXVzdCByZXR1cm4gdGhlIG5leHQgdGltZSB0byB0cmlnZ2VyLCBiYXNlZCBvbiB0aGUgcGFzc2VkIHRpbWUgdmFsdWUKICAgICAqICAgICAgKHRoYXQgaXMsIHRoZSBsb3dlc3QgdGltZSB2YWx1ZSBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc2Vjb25kIGFyZ3VtZW50KS4gSXQgd2lsbCB1c3VhbGx5IGJlIGNhbGxlZCBqdXN0CiAgICAgKiAgICAgIGJlZm9yZSB0aGUgY2FsbGJhY2sgd2lsbCBiZSB0cmlnZ2VyZWQsIGJ1dCBtaWdodCBiZSBjYWxsZWQgYXQgb3RoZXIgdGltZXMsIHRvby4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YQogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqCiAgICAgKiBAcmV0dXJuIEV2UGVyaW9kaWMKICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVTdG9wcGVkKGZsb2F0ICRvZmZzZXQsIGZsb2F0ICRpbnRlcnZhbCwgbWl4ZWQgJHJlc2NoZWR1bGVfY2IsIG1peGVkICRjYWxsYmFjaywgbWl4ZWQgJGRhdGEgPSBudWxsLCBpbnQgJHByaW9yaXR5ID0gMCkge30KCiAgICAvKioKICAgICAqIENvbmZpZ3VyZXMgdGhlIHdhdGNoZXIKICAgICAqIEBwYXJhbSBmbG9hdCAkb2Zmc2V0IFRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHtAc2VlIEV2UGVyaW9kaWM6Ol9fY29uc3RydWN0fQogICAgICogQHBhcmFtIGZsb2F0ICRpbnRlcnZhbCBUaGUgc2FtZSBtZWFuaW5nIGFzIGZvciB7QHNlZSBFdlBlcmlvZGljOjpfX2NvbnN0cnVjdH0KICAgICAqIEBwYXJhbSBudWxsfGNhbGxhYmxlICRyZXNjaGVkdWxlX2NiIFRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHtAc2VlIEV2UGVyaW9kaWM6Ol9fY29uc3RydWN0fQogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnZmxvYXQnXSwgZGVmYXVsdDogJycpXSAkb2Zmc2V0LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2Zsb2F0J10sIGRlZmF1bHQ6ICcnKV0gJGludGVydmFsLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJHJlc2NoZWR1bGVfY2IgPSBudWxsCiAgICApIHt9Cn0KCi8qKgogKiBDbGFzcyBFdlByZXBhcmUKICoKICogRXZQcmVwYXJlIGFuZCBFdkNoZWNrIHdhdGNoZXJzIGFyZSB1c3VhbGx5IHVzZWQgaW4gcGFpcnMuIEV2UHJlcGFyZSB3YXRjaGVycyBnZXQgaW52b2tlZCBiZWZvcmUgdGhlIHByb2Nlc3MgYmxvY2tzLAogKiBFdkNoZWNrIGFmdGVyd2FyZHMuCiAqCiAqIEl0IGlzIG5vdCBhbGxvd2VkIHRvIGNhbGwgRXZMb29wOjpydW4oKSBvciBzaW1pbGFyIG1ldGhvZHMgb3IgZnVuY3Rpb25zIHRoYXQgZW50ZXIgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBmcm9tIGVpdGhlcgogKiBFdlByZXBhcmUgb3IgRXZDaGVjayB3YXRjaGVycy4gT3RoZXIgbG9vcHMgdGhhbiB0aGUgY3VycmVudCBvbmUgYXJlIGZpbmUsIGhvd2V2ZXIuIFRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgaXMgdGhhdAogKiBvbmUgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGluIHRob3NlIHdhdGNoZXJzLCBpLmUuIHRoZSBzZXF1ZW5jZSB3aWxsIGFsd2F5cyBiZTogRXZQcmVwYXJlIC0+IGJsb2NraW5nIC0+CiAqIEV2Q2hlY2ssIHNvIGhhdmluZyBhIHdhdGNoZXIgb2YgZWFjaCBraW5kIHRoZXkgd2lsbCBhbHdheXMgYmUgY2FsbGVkIGluIHBhaXJzIGJyYWNrZXRpbmcgdGhlIGJsb2NraW5nIGNhbGwuCiAqCiAqIFRoZSBtYWluIHB1cnBvc2UgaXMgdG8gaW50ZWdyYXRlIG90aGVyIGV2ZW50IG1lY2hhbmlzbXMgaW50byBsaWJldiBhbmQgdGhlaXIgdXNlIGlzIHNvbWV3aGF0IGFkdmFuY2VkLiBUaGV5IGNvdWxkIGJlCiAqIHVzZWQsIGZvciBleGFtcGxlLCB0byB0cmFjayB2YXJpYWJsZSBjaGFuZ2VzLCBpbXBsZW1lbnQgY3VzdG9tIHdhdGNoZXJzLCBpbnRlZ3JhdGUgbmV0LXNubXAgb3IgYSBjb3JvdXRpbmUgbGlicmFyeQogKiBhbmQgbG90cyBtb3JlLiBUaGV5IGFyZSBhbHNvIG9jY2FzaW9uYWxseSB1c2VmdWwgdG8gY2FjaGUgc29tZSBkYXRhIGFuZCB3YW50IHRvIGZsdXNoIGl0IGJlZm9yZSBibG9ja2luZy4KICoKICogSXQgaXMgcmVjb21tZW5kZWQgdG8gZ2l2ZSBFdkNoZWNrIHdhdGNoZXJzIGhpZ2hlc3QgKEV2OjpNQVhQUkkpIHByaW9yaXR5LCB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBiZWluZyBydW4gYmVmb3JlCiAqIGFueSBvdGhlciB3YXRjaGVycyBhZnRlciB0aGUgcG9sbCAodGhpcyBkb2VzbuKAmXQgbWF0dGVyIGZvciBFdlByZXBhcmUgd2F0Y2hlcnMpLgogKgogKiBBbHNvLCBFdkNoZWNrIHdhdGNoZXJzIHNob3VsZCBub3QgYWN0aXZhdGUvZmVlZCBldmVudHMuIFdoaWxlIGxpYmV2IGZ1bGx5IHN1cHBvcnRzIHRoaXMsIHRoZXkgbWlnaHQgZ2V0IGV4ZWN1dGVkCiAqIGJlZm9yZSBvdGhlciBFdkNoZWNrIHdhdGNoZXJzIGRpZCB0aGVpciBqb2IuCiAqLwpmaW5hbCBjbGFzcyBFdlByZXBhcmUgZXh0ZW5kcyBFdldhdGNoZXIKewogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIEV2UHJlcGFyZSB3YXRjaGVyIG9iamVjdC4KICAgICAqCiAgICAgKiBDb25zdHJ1Y3RzIEV2UHJlcGFyZSB3YXRjaGVyIG9iamVjdCBhbmQgc3RhcnRzIHRoZSB3YXRjaGVyIGF1dG9tYXRpY2FsbHkuIElmIHlvdSBuZWVkIGEgc3RvcHBlZCB3YXRjaGVyLCBjb25zaWRlcgogICAgICogdXNpbmcgRXZQcmVwYXJlOjpjcmVhdGVTdG9wcGVkKCkuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gaW50ICRwcmlvcml0eQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkY2FsbGJhY2ssCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkZGF0YSA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHByaW9yaXR5ID0gMAogICAgKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIHN0b3BwZWQgaW5zdGFuY2Ugb2YgRXZQcmVwYXJlIHdhdGNoZXIuCiAgICAgKgogICAgICogQ3JlYXRlcyBhIHN0b3BwZWQgaW5zdGFuY2Ugb2YgRXZQcmVwYXJlIHdhdGNoZXIuIFVubGlrZSBFdlByZXBhcmU6Ol9fY29uc3RydWN0KCksIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgc3RhcnQgdGhlCiAgICAgKiB3YXRjaGVyIGF1dG9tYXRpY2FsbHkuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gaW50ICRwcmlvcml0eQogICAgICoKICAgICAqIEByZXR1cm4gRXZQcmVwYXJlCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlU3RvcHBlZChtaXhlZCAkY2FsbGJhY2ssIG1peGVkICRkYXRhID0gbnVsbCwgaW50ICRwcmlvcml0eSA9IDApIHt9Cn0KCi8qKgogKiBDbGFzcyBFdlNpZ25hbAogKgogKiBFdlNpZ25hbCB3YXRjaGVycyB3aWxsIHRyaWdnZXIgYW4gZXZlbnQgd2hlbiB0aGUgcHJvY2VzcyByZWNlaXZlcyBhIHNwZWNpZmljIHNpZ25hbCBvbmUgb3IgbW9yZSB0aW1lcy4gRXZlbiB0aG91Z2gKICogc2lnbmFscyBhcmUgdmVyeSBhc3luY2hyb25vdXMsIGxpYmV2IHdpbGwgdHJ5IGl0cyBiZXN0IHRvIGRlbGl2ZXIgc2lnbmFscyBzeW5jaHJvbm91c2x5LCBpLmUuIGFzIHBhcnQgb2YgdGhlIG5vcm1hbAogKiBldmVudCBwcm9jZXNzaW5nLCBsaWtlIGFueSBvdGhlciBldmVudC4KICoKICogVGhlcmUgaXMgbm8gbGltaXQgZm9yIHRoZSBudW1iZXIgb2Ygd2F0Y2hlcnMgZm9yIHRoZSBzYW1lIHNpZ25hbCwgYnV0IG9ubHkgd2l0aGluIHRoZSBzYW1lIGxvb3AsIGkuZS4gb25lIGNhbiB3YXRjaAogKiBmb3IgU0lHSU5UIGluIHRoZSBkZWZhdWx0IGxvb3AgYW5kIGZvciBTSUdJTyBpbiBhbm90aGVyIGxvb3AsIGJ1dCBpdCBpcyBub3QgYWxsb3dlZCB0byB3YXRjaCBmb3IgU0lHSU5UIGluIGJvdGggdGhlCiAqIGRlZmF1bHQgbG9vcCBhbmQgYW5vdGhlciBsb29wIGF0IHRoZSBzYW1lIHRpbWUuIEF0IHRoZSBtb21lbnQsIFNJR0NITEQgaXMgcGVybWFuZW50bHkgdGllZCB0byB0aGUgZGVmYXVsdCBsb29wLgogKgogKiBJZiBwb3NzaWJsZSBhbmQgc3VwcG9ydGVkLCBsaWJldiB3aWxsIGluc3RhbGwgaXRzIGhhbmRsZXJzIHdpdGggU0FfUkVTVEFSVCAob3IgZXF1aXZhbGVudCkgYmVoYXZpb3VyIGVuYWJsZWQsIHNvCiAqIHN5c3RlbSBjYWxscyBzaG91bGQgbm90IGJlIHVuZHVseSBpbnRlcnJ1cHRlZC4gSW4gY2FzZSBvZiBhIHByb2JsZW0gd2l0aCBzeXN0ZW0gY2FsbHMgZ2V0dGluZyBpbnRlcnJ1cHRlZCBieSBzaWduYWxzLAogKiBhbGwgdGhlIHNpZ25hbHMgY2FuIGJlIGJsb2NrZWQgaW4gYW4gRXZDaGVjayB3YXRjaGVyIGFuZCB1bmJsb2NrZWQgaW4gYSBFdlByZXBhcmUgd2F0Y2hlci4KICovCmZpbmFsIGNsYXNzIEV2U2lnbmFsIGV4dGVuZHMgRXZXYXRjaGVyCnsKICAgIC8qKgogICAgICogQHZhciBpbnQgU2lnbmFsIG51bWJlci4gU2VlIHRoZSBjb25zdGFudHMgZXhwb3J0ZWQgYnkgcGNudGwgZXh0ZW5zaW9uLiBTZWUgYWxzbyBzaWduYWwoNykgbWFuIHBhZ2UuCiAgICAgKi8KICAgICNbSW1tdXRhYmxlXQogICAgcHVibGljICRzaWdudW07CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIEV2U2lnbmFsIHdhdGNoZXIgb2JqZWN0CiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2lnbnVtIFNpZ25hbCBudW1iZXIuIFNlZSB0aGUgY29uc3RhbnRzIGV4cG9ydGVkIGJ5IHBjbnRsIGV4dGVuc2lvbi4gU2VlIGFsc28gc2lnbmFsKDcpIG1hbiBwYWdlLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gaW50ICRwcmlvcml0eQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHNpZ251bSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRjYWxsYmFjaywKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldICRkYXRhID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkcHJpb3JpdHkgPSAwCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBDb25maWd1cmVzIHRoZSB3YXRjaGVyLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHNpZ251bSBTaWduYWwgbnVtYmVyLiBTZWUgdGhlIGNvbnN0YW50cyBleHBvcnRlZCBieSBwY250bCBleHRlbnNpb24uIFNlZSBhbHNvIHNpZ25hbCg3KSBtYW4gcGFnZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkc2lnbnVtKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIHN0b3BwZWQgaW5zdGFuY2Ugb2YgRXZTaWduYWwgd2F0Y2hlci4KICAgICAqCiAgICAgKiBDcmVhdGVzIGEgc3RvcHBlZCBpbnN0YW5jZSBvZiBFdlNpZ25hbCB3YXRjaGVyLiBVbmxpa2UgRXZQcmVwYXJlOjpfX2NvbnN0cnVjdCgpLCB0aGlzIG1ldGhvZCBkb2Vzbid0IHN0YXJ0IHRoZQogICAgICogd2F0Y2hlciBhdXRvbWF0aWNhbGx5LgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHNpZ251bSBTaWduYWwgbnVtYmVyLiBTZWUgdGhlIGNvbnN0YW50cyBleHBvcnRlZCBieSBwY250bCBleHRlbnNpb24uIFNlZSBhbHNvIHNpZ25hbCg3KSBtYW4gcGFnZS4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YQogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqCiAgICAgKiBAcmV0dXJuIEV2U2lnbmFsCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlU3RvcHBlZChpbnQgJHNpZ251bSwgbWl4ZWQgJGNhbGxiYWNrLCBtaXhlZCAkZGF0YSA9IG51bGwsIGludCAkcHJpb3JpdHkgPSAwKSB7fQp9CgovKioKICogQ2xhc3MgRXZTdGF0CiAqCiAqIEV2U3RhdCBtb25pdG9ycyBhIGZpbGUgc3lzdGVtIHBhdGggZm9yIGF0dHJpYnV0ZSBjaGFuZ2VzLiBJdCBjYWxscyBzdGF0KCkgb24gdGhhdCBwYXRoIGluIHJlZ3VsYXIgaW50ZXJ2YWxzIChvciB3aGVuCiAqIHRoZSBPUyBzaWduYWxzIGl0IGNoYW5nZWQpIGFuZCBzZWVzIGlmIGl0IGNoYW5nZWQgY29tcGFyZWQgdG8gdGhlIGxhc3QgdGltZSwgaW52b2tpbmcgdGhlIGNhbGxiYWNrIGlmIGl0IGRpZC4KICoKICogVGhlIHBhdGggZG9lcyBub3QgbmVlZCB0byBleGlzdDogY2hhbmdpbmcgZnJvbSAicGF0aCBleGlzdHMiIHRvICJwYXRoIGRvZXMgbm90IGV4aXN0IiBpcyBhIHN0YXR1cyBjaGFuZ2UgbGlrZSBhbnkKICogb3RoZXIuIFRoZSBjb25kaXRpb24gInBhdGggZG9lcyBub3QgZXhpc3QiIGlzIHNpZ25pZmllZCBieSB0aGUgJ25saW5rJyBpdGVtIGJlaW5nIDAgKHJldHVybmVkIGJ5IEV2U3RhdDo6YXR0cigpCiAqIG1ldGhvZCkuCiAqCiAqIFRoZSBwYXRoIG11c3Qgbm90IGVuZCBpbiBhIHNsYXNoIG9yIGNvbnRhaW4gc3BlY2lhbCBjb21wb25lbnRzIHN1Y2ggYXMgJy4nIG9yICcuLicuIFRoZSBwYXRoIHNob3VsZCBiZSBhYnNvbHV0ZTogaWYKICogaXQgaXMgcmVsYXRpdmUgYW5kIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBjaGFuZ2VzLCB0aGVuIHRoZSBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkLgogKgogKiBTaW5jZSB0aGVyZSBpcyBubyBwb3J0YWJsZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIGludGVyZmFjZSBhdmFpbGFibGUsIHRoZSBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2FsbHMgc3RhdCgpCiAqIHJlZ3VsYXJseSBvbiB0aGUgcGF0aCB0byBzZWUgaWYgaXQgY2hhbmdlZCBzb21laG93LiBGb3IgdGhpcyBjYXNlIGEgcmVjb21tZW5kZWQgcG9sbGluZyBpbnRlcnZhbCBjYW4gYmUgc3BlY2lmaWVkLiBJZgogKiBvbmUgc3BlY2lmaWVzIGEgcG9sbGluZyBpbnRlcnZhbCBvZiAwLjAgKGhpZ2hseSByZWNvbW1lbmRlZCkgdGhlbiBhIHN1aXRhYmxlLCB1bnNwZWNpZmllZCBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgdXNlZAogKiAod2hpY2ggY291bGQgYmUgZXhwZWN0ZWQgdG8gYmUgYXJvdW5kIDUgc2Vjb25kcywgYWx0aG91Z2ggdGhpcyBtaWdodCBjaGFuZ2UgZHluYW1pY2FsbHkpLiBsaWJldiB3aWxsIGFsc28gaW1wb3NlIGEKICogbWluaW11bSBpbnRlcnZhbCB3aGljaCBpcyBjdXJyZW50bHkgYXJvdW5kIDAuMSAsIGJ1dCB0aGF04oCZcyB1c3VhbGx5IG92ZXJraWxsLgogKgogKiBUaGlzIHdhdGNoZXIgdHlwZSBpcyBub3QgbWVhbnQgZm9yIG1hc3NpdmUgbnVtYmVycyBvZiBFdlN0YXQgd2F0Y2hlcnMsIGFzIGV2ZW4gd2l0aCBPUy1zdXBwb3J0ZWQgY2hhbmdlCiAqIG5vdGlmaWNhdGlvbnMsIHRoaXMgY2FuIGJlIHJlc291cmNlLWludGVuc2l2ZS4KICovCmZpbmFsIGNsYXNzIEV2U3RhdCBleHRlbmRzIEV2V2F0Y2hlcgp7CiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQgIEhpbnQgb24gaG93IHF1aWNrbHkgYSBjaGFuZ2UgaXMgZXhwZWN0ZWQgdG8gYmUgZGV0ZWN0ZWQgYW5kIHNob3VsZCBub3JtYWxseSBiZQogICAgICogICAgICBzcGVjaWZpZWQgYXMgMC4wIHRvIGxldCBsaWJldiBjaG9vc2UgYSBzdWl0YWJsZSB2YWx1ZS4KICAgICAqLwogICAgI1tJbW11dGFibGVdCiAgICBwdWJsaWMgJGludGVydmFsOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcgVGhlIHBhdGggdG8gd2FpdCBmb3Igc3RhdHVzIGNoYW5nZXMgb24uCiAgICAgKi8KICAgICNbSW1tdXRhYmxlXQogICAgcHVibGljICRwYXRoOwoKICAgIC8qKgogICAgICogQ29uc3RydWN0cyBFdlN0YXQgd2F0Y2hlciBvYmplY3QuCiAgICAgKgogICAgICogQ29uc3RydWN0cyBFdlN0YXQgd2F0Y2hlciBvYmplY3QgYW5kIHN0YXJ0cyB0aGUgd2F0Y2hlciBhdXRvbWF0aWNhbGx5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGggVGhlIHBhdGggdG8gd2FpdCBmb3Igc3RhdHVzIGNoYW5nZXMgb24uCiAgICAgKiBAcGFyYW0gZmxvYXQgJGludGVydmFsIEhpbnQgb24gaG93IHF1aWNrbHkgYSBjaGFuZ2UgaXMgZXhwZWN0ZWQgdG8gYmUgZGV0ZWN0ZWQgYW5kIHNob3VsZCBub3JtYWxseSBiZSBzcGVjaWZpZWQKICAgICAqICAgICAgYXMgMC4wIHRvIGxldCBsaWJldiBjaG9vc2UgYSBzdWl0YWJsZSB2YWx1ZS4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YQogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRwYXRoLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2Zsb2F0J10sIGRlZmF1bHQ6ICcnKV0gJGludGVydmFsLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJGNhbGxiYWNrLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0gJGRhdGEgPSBudWxsLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRwcmlvcml0eSA9IDAKICAgICkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkgVGhlIHZhbHVlcyBtb3N0IHJlY2VudGx5IGRldGVjdCBieSBFdiAod2l0aG91dCBhY3R1YWwgc3RhdCdpbmcpLiBTZWUgc3RhdCgyKSBtYW4gcGFnZSBmb3IgZGV0YWlscy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGF0dHIoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheSBKdXN0IGxpa2UgRXZTdGF0OjphdHRyKCkgLCBidXQgcmV0dXJucyB0aGUgcHJldmlvdXMgc2V0IG9mIHZhbHVlcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHByZXYoKSB7fQoKICAgIC8qKgogICAgICogQ29uZmlndXJlcyB0aGUgd2F0Y2hlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBwYXRoIHRvIHdhaXQgZm9yIHN0YXR1cyBjaGFuZ2VzIG9uLgogICAgICogQHBhcmFtIGZsb2F0ICRpbnRlcnZhbCBIaW50IG9uIGhvdyBxdWlja2x5IGEgY2hhbmdlIGlzIGV4cGVjdGVkIHRvIGJlIGRldGVjdGVkIGFuZCBzaG91bGQgbm9ybWFsbHkgYmUgc3BlY2lmaWVkCiAgICAgKiAgICAgIGFzIDAuMCB0byBsZXQgbGliZXYgY2hvb3NlIGEgc3VpdGFibGUgdmFsdWUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHBhdGgsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnZmxvYXQnXSwgZGVmYXVsdDogJycpXSAkaW50ZXJ2YWwKICAgICkge30KCiAgICAvKioKICAgICAqIEluaXRpYXRlcyB0aGUgc3RhdCBjYWxsLgogICAgICoKICAgICAqIEluaXRpYXRlcyB0aGUgc3RhdCBjYWxsKHVwZGF0ZXMgaW50ZXJuYWwgY2FjaGUpLiBJdCBzdGF0cyAodXNpbmcgbHN0YXQpIHRoZSBwYXRoIHNwZWNpZmllZCBpbiB0aGUgd2F0Y2hlciBhbmQKICAgICAqIHNldHMgdGhlIGludGVybmFsIGNhY2hlIHRvIHRoZSB2YWx1ZXMgZm91bmQuCiAgICAgKgogICAgICogQHJldHVybiBib29sIFRSVUUgaWYgcGF0aCBleGlzdHMuIE90aGVyd2lzZSBGQUxTRS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0YXQoKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgc3RvcHBlZCBFdlN0YXQgd2F0Y2hlciBvYmplY3QuCiAgICAgKgogICAgICogQ3JlYXRlcyBFdlN0YXQgd2F0Y2hlciBvYmplY3QsIGJ1dCBkb2Vzbid0IHN0YXJ0IGl0IGF1dG9tYXRpY2FsbHkgKHVubGlrZSBFdlN0YXQ6Ol9fY29uc3RydWN0KCkpLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGggVGhlIHBhdGggdG8gd2FpdCBmb3Igc3RhdHVzIGNoYW5nZXMgb24uCiAgICAgKiBAcGFyYW0gZmxvYXQgJGludGVydmFsIEhpbnQgb24gaG93IHF1aWNrbHkgYSBjaGFuZ2UgaXMgZXhwZWN0ZWQgdG8gYmUgZGV0ZWN0ZWQgYW5kIHNob3VsZCBub3JtYWxseSBiZSBzcGVjaWZpZWQKICAgICAqICAgICAgYXMgMC4wIHRvIGxldCBsaWJldiBjaG9vc2UgYSBzdWl0YWJsZSB2YWx1ZS4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YQogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqCiAgICAgKiBAcmV0dXJuIEV2U3RhdAogICAgICovCiAgICBmaW5hbCBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVN0b3BwZWQoc3RyaW5nICRwYXRoLCBmbG9hdCAkaW50ZXJ2YWwsIG1peGVkICRjYWxsYmFjaywgbWl4ZWQgJGRhdGEgPSBudWxsLCBpbnQgJHByaW9yaXR5ID0gMCkge30KfQoKLyoqCiAqIENsYXNzIEV2VGltZXIKICoKICogRXZUaW1lciB3YXRjaGVycyBhcmUgc2ltcGxlIHJlbGF0aXZlIHRpbWVycyB0aGF0IGdlbmVyYXRlIGFuIGV2ZW50IGFmdGVyIGEgZ2l2ZW4gdGltZSwgYW5kIG9wdGlvbmFsbHkgcmVwZWF0aW5nIGluCiAqIHJlZ3VsYXIgaW50ZXJ2YWxzIGFmdGVyIHRoYXQuCiAqCiAqIFRoZSB0aW1lcnMgYXJlIGJhc2VkIG9uIHJlYWwgdGltZSwgdGhhdCBpcywgaWYgb25lIHJlZ2lzdGVycyBhbiBldmVudCB0aGF0IHRpbWVzIG91dCBhZnRlciBhbiBob3VyIGFuZCByZXNldHMgdGhlCiAqIHN5c3RlbSBjbG9jayB0byBKYW51YXJ5IGxhc3QgeWVhciwgaXQgd2lsbCBzdGlsbCB0aW1lIG91dCBhZnRlciggcm91Z2hseSkgb25lIGhvdXIuICJSb3VnaGx5IiBiZWNhdXNlIGRldGVjdGluZyB0aW1lCiAqIGp1bXBzIGlzIGhhcmQsIGFuZCBzb21lIGluYWNjdXJhY2llcyBhcmUgdW5hdm9pZGFibGUuCiAqCiAqIFRoZSBjYWxsYmFjayBpcyBndWFyYW50ZWVkIHRvIGJlIGludm9rZWQgb25seSBhZnRlciBpdHMgdGltZW91dCBoYXMgcGFzc2VkIChub3QgYXQsIHNvIG9uIHN5c3RlbXMgd2l0aCB2ZXJ5CiAqIGxvdy1yZXNvbHV0aW9uIGNsb2NrcyB0aGlzIG1pZ2h0IGludHJvZHVjZSBhIHNtYWxsIGRlbGF5KS4gSWYgbXVsdGlwbGUgdGltZXJzIGJlY29tZSByZWFkeSBkdXJpbmcgdGhlIHNhbWUgbG9vcAogKiBpdGVyYXRpb24gdGhlbiB0aGUgb25lcyB3aXRoIGVhcmxpZXIgdGltZS1vdXQgdmFsdWVzIGFyZSBpbnZva2VkIGJlZm9yZSBvbmVzIG9mIHRoZSBzYW1lIHByaW9yaXR5IHdpdGggbGF0ZXIgdGltZS1vdXQKICogdmFsdWVzIChidXQgdGhpcyBpcyBubyBsb25nZXIgdHJ1ZSB3aGVuIGEgY2FsbGJhY2sgY2FsbHMgRXZMb29wOjpydW4oKSByZWN1cnNpdmVseSkuCiAqCiAqIFRoZSB0aW1lciBpdHNlbGYgd2lsbCBkbyBhIGJlc3QtZWZmb3J0IGF0IGF2b2lkaW5nIGRyaWZ0LCB0aGF0IGlzLCBpZiBhIHRpbWVyIGlzIGNvbmZpZ3VyZWQgdG8gdHJpZ2dlciBldmVyeSAxMAogKiBzZWNvbmRzLCB0aGVuIGl0IHdpbGwgbm9ybWFsbHkgdHJpZ2dlciBhdCBleGFjdGx5IDEwIHNlY29uZCBpbnRlcnZhbHMuIElmLCBob3dldmVyLCB0aGUgc2NyaXB0IGNhbm5vdCBrZWVwIHVwIHdpdGgKICogdGhlIHRpbWVyIChiZWNhdXNlIGl0IHRha2VzIGxvbmdlciB0aGFuIHRob3NlIDEwIHNlY29uZHMgdG8gZG8pIHRoZSB0aW1lciB3aWxsIG5vdCBmaXJlIG1vcmUgdGhhbiBvbmNlIHBlciBldmVudCBsb29wCiAqIGl0ZXJhdGlvbi4KICovCmZpbmFsIGNsYXNzIEV2VGltZXIgZXh0ZW5kcyBFdldhdGNoZXIKewogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0IElmIHJlcGVhdCBpcyAwLjAsIHRoZW4gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHN0b3BwZWQgb25jZSB0aGUgdGltZW91dCBpcyByZWFjaGVkLiBJZiBpdCBpcwogICAgICogICAgICBwb3NpdGl2ZSwgdGhlbiB0aGUgdGltZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNvbmZpZ3VyZWQgdG8gdHJpZ2dlciBhZ2FpbiBldmVyeSByZXBlYXQgc2Vjb25kcyBsYXRlciwgdW50aWwKICAgICAqICAgICAgc3RvcHBlZCBtYW51YWxseS4KICAgICAqLwogICAgcHVibGljICRyZXBlYXQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0IFRoZSByZW1haW5pbmcgdGltZSB1bnRpbCBhIHRpbWVyIGZpcmVzLiBJZiB0aGUgdGltZXIgaXMgYWN0aXZlLCB0aGVuIHRoaXMgdGltZSBpcyByZWxhdGl2ZSB0byB0aGUKICAgICAqICAgICAgY3VycmVudCBldmVudCBsb29wIHRpbWUsIG90aGVyd2lzZSBpdCdzIHRoZSB0aW1lb3V0IHZhbHVlIGN1cnJlbnRseSBjb25maWd1cmVkLgogICAgICoKICAgICAqICAgICAgVGhhdCBpcywgYWZ0ZXIgaW5zdGFudGlhdGluZyBhbiBFdlRpbWVyIHdpdGggYW4gYWZ0ZXIgdmFsdWUgb2YgNS4wIGFuZCByZXBlYXQgdmFsdWUgb2YgNy4wLCByZW1haW5pbmcKICAgICAqICAgICAgcmV0dXJucyA1LjAuIFdoZW4gdGhlIHRpbWVyIGlzIHN0YXJ0ZWQgYW5kIG9uZSBzZWNvbmQgcGFzc2VzLCByZW1haW5pbmcgd2lsbCByZXR1cm4gNC4wIC4gV2hlbiB0aGUgdGltZXIKICAgICAqICAgICAgZXhwaXJlcyBhbmQgaXMgcmVzdGFydGVkLCBpdCB3aWxsIHJldHVybiByb3VnaGx5IDcuMCAobGlrZWx5IHNsaWdodGx5IGxlc3MgYXMgY2FsbGJhY2sgaW52b2NhdGlvbiB0YWtlcyBzb21lCiAgICAgKiAgICAgIHRpbWUgdG9vKSwgYW5kIHNvIG9uLgogICAgICovCiAgICBwdWJsaWMgJHJlbWFpbmluZzsKCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYW4gRXZUaW1lciB3YXRjaGVyIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGFmdGVyIENvbmZpZ3VyZXMgdGhlIHRpbWVyIHRvIHRyaWdnZXIgYWZ0ZXIgJGFmdGVyIHNlY29uZHMuCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJlcGVhdCBJZiByZXBlYXQgaXMgMC4wLCB0aGVuIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBzdG9wcGVkIG9uY2UgdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC4gSWYgaXQKICAgICAqICAgICAgaXMgcG9zaXRpdmUsIHRoZW4gdGhlIHRpbWVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBjb25maWd1cmVkIHRvIHRyaWdnZXIgYWdhaW4gZXZlcnkgcmVwZWF0IHNlY29uZHMgbGF0ZXIsCiAgICAgKiAgICAgIHVudGlsIHN0b3BwZWQgbWFudWFsbHkuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRhdGEKICAgICAqIEBwYXJhbSBpbnQgJHByaW9yaXR5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdmbG9hdCddLCBkZWZhdWx0OiAnJyldICRhZnRlciwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdmbG9hdCddLCBkZWZhdWx0OiAnJyldICRyZXBlYXQsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkY2FsbGJhY2ssCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXSAkZGF0YSA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHByaW9yaXR5ID0gMAogICAgKSB7fQoKICAgIC8qKgogICAgICogUmVzdGFydHMgdGhlIHRpbWVyIHdhdGNoZXIuCiAgICAgKgogICAgICogVGhpcyB3aWxsIGFjdCBhcyBpZiB0aGUgdGltZXIgdGltZWQgb3V0IGFuZCByZXN0YXJ0IGl0IGFnYWluIGlmIGl0IGlzIHJlcGVhdGluZy4gVGhlIGV4YWN0IHNlbWFudGljcyBhcmU6CiAgICAgKgogICAgICogLSBpZiB0aGUgdGltZXIgaXMgcGVuZGluZywgaXRzIHBlbmRpbmcgc3RhdHVzIGlzIGNsZWFyZWQuCiAgICAgKiAtIGlmIHRoZSB0aW1lciBpcyBzdGFydGVkIGJ1dCBub24tcmVwZWF0aW5nLCBzdG9wIGl0IChhcyBpZiBpdCB0aW1lZCBvdXQpLgogICAgICogLSBpZiB0aGUgdGltZXIgaXMgcmVwZWF0aW5nLCBlaXRoZXIgc3RhcnQgaXQgaWYgbmVjZXNzYXJ5ICh3aXRoIHRoZSByZXBlYXQgdmFsdWUpLCBvciByZXNldCB0aGUgcnVubmluZyB0aW1lciB0bwogICAgICogICB0aGUgcmVwZWF0IHZhbHVlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWdhaW4oKSB7fQoKICAgIC8qKgogICAgICogQ29uZmlndXJlcyB0aGUgd2F0Y2hlci4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGFmdGVyIENvbmZpZ3VyZXMgdGhlIHRpbWVyIHRvIHRyaWdnZXIgYWZ0ZXIgJGFmdGVyIHNlY29uZHMuCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJlcGVhdCBJZiByZXBlYXQgaXMgMC4wLCB0aGVuIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBzdG9wcGVkIG9uY2UgdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC4gSWYgaXQKICAgICAqICAgICAgaXMgcG9zaXRpdmUsIHRoZW4gdGhlIHRpbWVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBjb25maWd1cmVkIHRvIHRyaWdnZXIgYWdhaW4gZXZlcnkgcmVwZWF0IHNlY29uZHMgbGF0ZXIsCiAgICAgKiAgICAgIHVudGlsIHN0b3BwZWQgbWFudWFsbHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnZmxvYXQnXSwgZGVmYXVsdDogJycpXSAkYWZ0ZXIsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnZmxvYXQnXSwgZGVmYXVsdDogJycpXSAkcmVwZWF0CiAgICApIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgc3RvcHBlZCBFdlRpbWVyIHdhdGNoZXIgb2JqZWN0LgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkYWZ0ZXIgQ29uZmlndXJlcyB0aGUgdGltZXIgdG8gdHJpZ2dlciBhZnRlciAkYWZ0ZXIgc2Vjb25kcy4KICAgICAqIEBwYXJhbSBmbG9hdCAkcmVwZWF0IElmIHJlcGVhdCBpcyAwLjAsIHRoZW4gaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHN0b3BwZWQgb25jZSB0aGUgdGltZW91dCBpcyByZWFjaGVkLiBJZiBpdAogICAgICogICAgICBpcyBwb3NpdGl2ZSwgdGhlbiB0aGUgdGltZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNvbmZpZ3VyZWQgdG8gdHJpZ2dlciBhZ2FpbiBldmVyeSByZXBlYXQgc2Vjb25kcyBsYXRlciwKICAgICAqICAgICAgdW50aWwgc3RvcHBlZCBtYW51YWxseS4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YQogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqCiAgICAgKiBAcmV0dXJuIEV2VGltZXIKICAgICAqLwogICAgZmluYWwgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVTdG9wcGVkKGZsb2F0ICRhZnRlciwgZmxvYXQgJHJlcGVhdCwgbWl4ZWQgJGNhbGxiYWNrLCBtaXhlZCAkZGF0YSA9IG51bGwsIGludCAkcHJpb3JpdHkgPSAwKSB7fQp9CgovKioKICogQ2xhc3MgRXZJZGxlCiAqCiAqIEV2SWRsZSB3YXRjaGVycyB0cmlnZ2VyIGV2ZW50cyB3aGVuIG5vIG90aGVyIGV2ZW50cyBvZiB0aGUgc2FtZSBvciBoaWdoZXIgcHJpb3JpdHkgYXJlIHBlbmRpbmcgKEV2UHJlcGFyZSwgRXZDaGVjawogKiBhbmQgb3RoZXIgRXZJZGxlIHdhdGNoZXJzIGRvIG5vdCBjb3VudCBhcyByZWNlaXZpbmcgZXZlbnRzKS4KICoKICogVGh1cywgYXMgbG9uZyBhcyB0aGUgcHJvY2VzcyBpcyBidXN5IGhhbmRsaW5nIHNvY2tldHMgb3IgdGltZW91dHMgKG9yIGV2ZW4gc2lnbmFscykgb2YgdGhlIHNhbWUgb3IgaGlnaGVyIHByaW9yaXR5IGl0CiAqIHdpbGwgbm90IGJlIHRyaWdnZXJlZC4gQnV0IHdoZW4gdGhlIHByb2Nlc3MgaXMgaWRsZSAob3Igb25seSBsb3dlci1wcmlvcml0eSB3YXRjaGVycyBhcmUgcGVuZGluZyksIHRoZSBFdklkbGUKICogd2F0Y2hlcnMgYXJlIGJlaW5nIGNhbGxlZCBvbmNlIHBlciBldmVudCBsb29wIGl0ZXJhdGlvbiAtIHVudGlsIHN0b3BwZWQsIHRoYXQgaXMsIG9yIHRoZSBwcm9jZXNzIHJlY2VpdmVzIG1vcmUgZXZlbnRzCiAqIGFuZCBiZWNvbWVzIGJ1c3kgYWdhaW4gd2l0aCBoaWdoZXIgcHJpb3JpdHkgc3R1ZmYuCiAqCiAqIEFwYXJ0IGZyb20ga2VlcGluZyB0aGUgcHJvY2VzcyBub24tYmxvY2tpbmcgKHdoaWNoIGlzIGEgdXNlZnVsIG9uIGl0cyBvd24gc29tZXRpbWVzKSwgRXZJZGxlIHdhdGNoZXJzIGFyZSBhIGdvb2QKICogcGxhY2UgdG8gZG8gInBzZXVkby1iYWNrZ3JvdW5kIHByb2Nlc3NpbmciLCBvciBkZWxheSBwcm9jZXNzaW5nIHN0dWZmIHRvIGFmdGVyIHRoZSBldmVudCBsb29wIGhhcyBoYW5kbGVkIGFsbAogKiBvdXRzdGFuZGluZyBldmVudHMuCiAqCiAqIFRoZSBtb3N0IG5vdGljZWFibGUgZWZmZWN0IGlzIHRoYXQgYXMgbG9uZyBhcyBhbnkgaWRsZSB3YXRjaGVycyBhcmUgYWN0aXZlLCB0aGUgcHJvY2VzcyB3aWxsIG5vdCBibG9jayB3aGVuIHdhaXRpbmcKICogZm9yIG5ldyBldmVudHMuCiAqLwpmaW5hbCBjbGFzcyBFdklkbGUgZXh0ZW5kcyBFdldhdGNoZXIKewogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGFuIEV2SWRsZSBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRhdGEKICAgICAqIEBwYXJhbSBpbnQgJHByaW9yaXR5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChtaXhlZCAkY2FsbGJhY2ssIG1peGVkICRkYXRhID0gbnVsbCwgaW50ICRwcmlvcml0eSA9IDApIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgc3RvcHBlZCBFdklkbGUgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gaW50ICRwcmlvcml0eQogICAgICoKICAgICAqIEByZXR1cm4gRXZJZGxlCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlU3RvcHBlZChtaXhlZCAkY2FsbGJhY2ssIG1peGVkICRkYXRhID0gbnVsbCwgaW50ICRwcmlvcml0eSA9IDApIHt9Cn0KCi8qKgogKiBDbGFzcyBFdkZvcmsKICoKICogRm9yayB3YXRjaGVycyBhcmUgY2FsbGVkIHdoZW4gYSBmb3JrKCkgd2FzIGRldGVjdGVkICh1c3VhbGx5IGJlY2F1c2Ugd2hvZXZlciBzaWduYWxsZWQgbGliZXYgYWJvdXQgaXQgYnkgY2FsbGluZwogKiBFdkxvb3A6OmZvcmsoKSkuIFRoZSBpbnZvY2F0aW9uIGlzIGRvbmUgYmVmb3JlIHRoZSBldmVudCBsb29wIGJsb2NrcyBuZXh0IGFuZCBiZWZvcmUgRXZDaGVjayB3YXRjaGVycyBhcmUgYmVpbmcKICogY2FsbGVkLCBhbmQgb25seSBpbiB0aGUgY2hpbGQgYWZ0ZXIgdGhlIGZvcmsuIE5vdGUgdGhhdCBpZiBzb21lb25lIGNhbGxzIEV2TG9vcDo6Zm9yaygpIGluIHRoZSB3cm9uZyBwcm9jZXNzLCB0aGUKICogZm9yayBoYW5kbGVycyB3aWxsIGJlIGludm9rZWQsIHRvby4KICovCmZpbmFsIGNsYXNzIEV2Rm9yayBleHRlbmRzIEV2V2F0Y2hlcgp7CiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYW4gRXZGb3JrIGluc3RhbmNlLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YQogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEV2TG9vcCAkbG9vcCwgbWl4ZWQgJGNhbGxiYWNrLCBtaXhlZCAkZGF0YSA9IG51bGwsIGludCAkcHJpb3JpdHkgPSAwKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIHN0b3BwZWQgRXZGb3JrIGluc3RhbmNlLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YQogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqCiAgICAgKiBAcmV0dXJuIEV2Rm9yawogICAgICovCiAgICBmaW5hbCBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVN0b3BwZWQoRXZMb29wICRsb29wLCBtaXhlZCAkY2FsbGJhY2ssIG1peGVkICRkYXRhID0gbnVsbCwgaW50ICRwcmlvcml0eSA9IDApIHt9Cn0KCi8qKgogKiBDbGFzcyBFdkxvb3AKICoKICogUmVwcmVzZW50cyBhbiBldmVudCBsb29wIHRoYXQgaXMgYWx3YXlzIGRpc3RpbmN0IGZyb20gdGhlIGRlZmF1bHQgbG9vcC4gVW5saWtlIHRoZSBkZWZhdWx0IGxvb3AsIGl0IGNhbm5vdCBoYW5kbGUKICogRXZDaGlsZCB3YXRjaGVycy4KICoKICogSGF2aW5nIHRocmVhZHMgd2UgaGF2ZSB0byBjcmVhdGUgYSBsb29wIHBlciB0aHJlYWQsIGFuZCB1c2UgdGhlIHRoZSBkZWZhdWx0IGxvb3AgaW4gdGhlIHBhcmVudCB0aHJlYWQuCiAqCiAqIFRoZSBkZWZhdWx0IGV2ZW50IGxvb3AgaXMgaW5pdGlhbGl6ZWQgYXV0b21hdGljYWxseSBieSBFdi4gSXQgaXMgYWNjZXNzaWJsZSB2aWEgbWV0aG9kcyBvZiB0aGUgRXYgY2xhc3MsIG9yIHZpYQogKiBFdkxvb3A6OmRlZmF1bHRMb29wKCkgbWV0aG9kLgogKi8KZmluYWwgY2xhc3MgRXZMb29wCnsKICAgIC8qKgogICAgICogQHZhciBpbnQgVGhlIEV2OjpCQUNLRU5EXyogZmxhZyBpbmRpY2F0aW5nIHRoZSBldmVudCBiYWNrZW5kIGluIHVzZS4KICAgICAqLwogICAgI1tJbW11dGFibGVdCiAgICAjW0V4cGVjdGVkVmFsdWVzKGZsYWdzOiBbRXY6OkJBQ0tFTkRfQUxMLCBFdjo6QkFDS0VORF9ERVZQT0xMLCBFdjo6QkFDS0VORF9FUE9MTCwgRXY6OkJBQ0tFTkRfS1FVRVVFLCBFdjo6QkFDS0VORF9NQVNLLCBFdjo6QkFDS0VORF9QT0xMLCBFdjo6QkFDS0VORF9QT1JULCBFdjo6QkFDS0VORF9TRUxFQ1RdKV0KICAgIHB1YmxpYyAkYmFja2VuZDsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbCBUUlVFIGlmIGl0IGlzIHRoZSBkZWZhdWx0IGV2ZW50IGxvb3AuCiAgICAgKi8KICAgICNbSW1tdXRhYmxlXQogICAgcHVibGljICRpc19kZWZhdWx0X2xvb3A7CgogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkIEN1c3RvbSBkYXRhIGF0dGFjaGVkIHRvIHRoZSBsb29wLgogICAgICovCiAgICBwdWJsaWMgJGRhdGE7CgogICAgLyoqCiAgICAgKiBAdmFyIGludCBUaGUgY3VycmVudCBpdGVyYXRpb24gY291bnQgb2YgdGhlIGxvb3AuIFNlZSBFdjo6aXRlcmF0aW9uKCkuCiAgICAgKi8KICAgIHB1YmxpYyAkaXRlcmF0aW9uOwoKICAgIC8qKgogICAgICogQHZhciBpbnQgVGhlIG51bWJlciBvZiBwZW5kaW5nIHdhdGNoZXJzLiAwIGluZGljYXRlcyB0aGF0IHRoZXJlIGFyZSBubyB3YXRjaGVycyBwZW5kaW5nLgogICAgICovCiAgICBwdWJsaWMgJHBlbmRpbmc7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0IEhpZ2hlciBpb19pbnRlcnZhbCBhbGxvd3MgbGliZXYgdG8gc3BlbmQgbW9yZSB0aW1lIGNvbGxlY3RpbmcgRXZJbyBldmVudHMsIHNvIG1vcmUgZXZlbnRzIGNhbiBiZQogICAgICogICAgICBoYW5kbGVkIHBlciBpdGVyYXRpb24sIGF0IHRoZSBjb3N0IG9mIGluY3JlYXNpbmcgbGF0ZW5jeS4gVGltZW91dHMgKGJvdGggRXZQZXJpb2RpYyBhbmQgRXZUaW1lcikgd2lsbCBub3QgYmUKICAgICAqICAgICAgYWZmZWN0ZWQuIFNldHRpbmcgdGhpcyB0byBhIG5vbi16ZXJvIHZhbHVlIHdpbGwgaW50cm9kdWNlIGFuIGFkZGl0aW9uYWwgc2xlZXAoKSBjYWxsIGludG8gbW9zdCBsb29wCiAgICAgKiAgICAgIGl0ZXJhdGlvbnMuIFRoZSBzbGVlcCB0aW1lIGVuc3VyZXMgdGhhdCBsaWJldiB3aWxsIG5vdCBwb2xsIGZvciBFdklvIGV2ZW50cyBtb3JlIG9mdGVuIHRoYW4gb25jZSBwZXIgdGhpcwogICAgICogICAgICBpbnRlcnZhbCwgb24gYXZlcmFnZS4gTWFueSBwcm9ncmFtcyBjYW4gdXN1YWxseSBiZW5lZml0IGJ5IHNldHRpbmcgdGhlIGlvX2ludGVydmFsIHRvIGEgdmFsdWUgbmVhciAwLjEsCiAgICAgKiAgICAgIHdoaWNoIGlzIG9mdGVuIGVub3VnaCBmb3IgaW50ZXJhY3RpdmUgc2VydmVycyAobm90IGZvciBnYW1lcykuIEl0IHVzdWFsbHkgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdG8gc2V0IGl0CiAgICAgKiAgICAgIHRvIGEgbG93ZXIgdmFsdWUgdGhhbiAwLjAxLCBhcyB0aGlzIGFwcHJvYWNoZXMgdGhlIHRpbWluZyBncmFudWxhcml0eSBvZiBtb3N0IHN5c3RlbXMuCiAgICAgKi8KICAgIHB1YmxpYyAkaW9faW50ZXJ2YWw7CgogICAgLyoqCiAgICAgKiBAdmFyIGZsb2F0IEhpZ2hlciB0aW1lb3V0X2ludGVydmFsIGFsbG93cyBsaWJldiB0byBzcGVuZCBtb3JlIHRpbWUgY29sbGVjdGluZyB0aW1lb3V0cywgYXQgdGhlIGV4cGVuc2Ugb2YKICAgICAqICAgICAgaW5jcmVhc2VkIGxhdGVuY3kvaml0dGVyL2luZXhhY3RuZXNzICh0aGUgd2F0Y2hlciBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBsYXRlcikuIEV2SW8gd2F0Y2hlcnMgd2lsbCBub3QgYmUKICAgICAqICAgICAgYWZmZWN0ZWQuIFNldHRpbmcgdGhpcyB0byBhIG5vbi1udWxsIHZhbHVlIHdpbGwgbm90IGludHJvZHVjZSBhbnkgb3ZlcmhlYWQgaW4gbGliZXYuCiAgICAgKi8KICAgIHB1YmxpYyAkdGltZW91dF9pbnRlcnZhbDsKCiAgICAvKioKICAgICAqIEB2YXIgaW50IFRoZSByZWN1cnNpb24gZGVwdGguCiAgICAgKi8KICAgIHB1YmxpYyAkZGVwdGg7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncwogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gZmxvYXQgJGlvX2ludGVydmFsCiAgICAgKiBAcGFyYW0gZmxvYXQgJHRpbWVvdXRfaW50ZXJ2YWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGludCAkZmxhZ3MgPSBFdjo6RkxBR19BVVRPLCBtaXhlZCAkZGF0YSA9IG51bGwsIGZsb2F0ICRpb19pbnRlcnZhbCA9IDAuMCwgZmxvYXQgJHRpbWVvdXRfaW50ZXJ2YWwgPSAwLjApIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGFuIGludGVnZXIgZGVzY3JpYmluZyB0aGUgYmFja2VuZCB1c2VkIGJ5IGxpYmV2LgogICAgICoKICAgICAqIEByZXR1cm4gaW50IEFuIGludGVnZXIgZGVzY3JpYmluZyB0aGUgYmFja2VuZCB1c2VkIGJ5IGxpYmV2LiBTZWUgRXY6OmJhY2tlbmQoKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJhY2tlbmQoKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBFdkNoZWNrIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRhdGEKICAgICAqIEBwYXJhbSBpbnQgJHByaW9yaXR5CiAgICAgKiBAcmV0dXJuIEV2Q2hlY2sKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGNoZWNrKGNhbGxhYmxlICRjYWxsYmFjaywgJGRhdGEgPSBudWxsLCAkcHJpb3JpdHkgPSAwKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBFdkNoaWxkIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBpbnN0YW5jZTsKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2V2bG9vcC5jaGlsZC5waHAKICAgICAqIEBwYXJhbSBpbnQgJHBpZAogICAgICogQHBhcmFtIGJvb2wgJHRyYWNlCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRhdGEKICAgICAqIEBwYXJhbSBpbnQgJHByaW9yaXR5CiAgICAgKiBAcmV0dXJuIEV2Q2hpbGQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGNoaWxkKGludCAkcGlkLCBib29sICR0cmFjZSwgbWl4ZWQgJGNhbGxiYWNrLCBtaXhlZCAkZGF0YSA9IG51bGwsIGludCAkcHJpb3JpdHkgPSAwKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBFdkVtYmVkIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gRXZMb29wICRvdGhlcgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gaW50ICRwcmlvcml0eQogICAgICogQHJldHVybiBFdkVtYmVkCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBlbWJlZChFdkxvb3AgJG90aGVyLCBjYWxsYWJsZSAkY2FsbGJhY2ssICRkYXRhID0gbnVsbCwgJHByaW9yaXR5ID0gMCkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgRXZGb3JrIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRhdGEKICAgICAqIEBwYXJhbSBpbnQgJHByaW9yaXR5CiAgICAgKiBAcmV0dXJuIEV2Rm9yawogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gZm9yayhjYWxsYWJsZSAkY2FsbGJhY2ssICRkYXRhID0gbnVsbCwgJHByaW9yaXR5ID0gMCkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgRXZJZGxlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gbnVsbCAkZGF0YQogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqIEByZXR1cm4gRXZJZGxlCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBpZGxlKG1peGVkICRjYWxsYmFjaywgbWl4ZWQgJGRhdGEgPSBudWxsLCBpbnQgJHByaW9yaXR5ID0gMCkge30KCiAgICAvKioKICAgICAqIEludm9rZSBhbGwgcGVuZGluZyB3YXRjaGVycyB3aGlsZSByZXNldHRpbmcgdGhlaXIgcGVuZGluZyBzdGF0ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGludm9rZVBlbmRpbmcoKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBFdklvIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJGZkCiAgICAgKiBAcGFyYW0gaW50ICRldmVudHMKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YQogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqIEByZXR1cm4gRXZJbwogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gaW8obWl4ZWQgJGZkLCBpbnQgJGV2ZW50cywgbWl4ZWQgJGNhbGxiYWNrLCBtaXhlZCAkZGF0YSA9IG51bGwsIGludCAkcHJpb3JpdHkgPSAwKSB7fQoKICAgIC8qKgogICAgICogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYSBmb3JrLgogICAgICoKICAgICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIGEgZm9yayBpbiB0aGUgY2hpbGQsIGJlZm9yZSBlbnRlcmluZyBvciBjb250aW51aW5nIHRoZSBldmVudCBsb29wLiBBbiBhbHRlcm5hdGl2ZSBpcyB0byB1c2UKICAgICAqIEV2OjpGTEFHX0ZPUktDSEVDSyB3aGljaCBjYWxscyB0aGlzIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHksIGF0IHNvbWUgcGVyZm9ybWFuY2UgbG9zcyAocmVmZXIgdG8gdGhlIGxpYmV2CiAgICAgKiBkb2N1bWVudGF0aW9uKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvb3BGb3JrKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgImV2ZW50IGxvb3AgdGltZSIuCiAgICAgKgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCAiZXZlbnQgbG9vcCB0aW1lIiwgd2hpY2ggaXMgdGhlIHRpbWUgdGhlIGV2ZW50IGxvb3AgcmVjZWl2ZWQgZXZlbnRzIGFuZCBzdGFydGVkIHByb2Nlc3NpbmcKICAgICAqIHRoZW0uIFRoaXMgdGltZXN0YW1wIGRvZXMgbm90IGNoYW5nZSBhcyBsb25nIGFzIGNhbGxiYWNrcyBhcmUgYmVpbmcgcHJvY2Vzc2VkLCBhbmQgdGhpcyBpcyBhbHNvIHRoZSBiYXNlIHRpbWUKICAgICAqIHVzZWQgZm9yIHJlbGF0aXZlIHRpbWVycy4gWW91IGNhbiB0cmVhdCBpdCBhcyB0aGUgdGltZXN0YW1wIG9mIHRoZSBldmVudCBvY2N1cnJpbmcgKG9yIG1vcmUgY29ycmVjdGx5LCBsaWJldgogICAgICogZmluZGluZyBvdXQgYWJvdXQgaXQpLgogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQgVGltZSBvZiB0aGUgZXZlbnQgbG9vcCBpbiAoZnJhY3Rpb25hbCkgc2Vjb25kcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5vdygpIHt9CgogICAgLyoqCiAgICAgKiBFc3RhYmxpc2hlcyB0aGUgY3VycmVudCB0aW1lIGJ5IHF1ZXJ5aW5nIHRoZSBrZXJuZWwsIHVwZGF0aW5nIHRoZSB0aW1lIHJldHVybmVkIGJ5IEV2Ojpub3cgaW4gdGhlIHByb2dyZXNzLgogICAgICoKICAgICAqIEVzdGFibGlzaGVzIHRoZSBjdXJyZW50IHRpbWUgYnkgcXVlcnlpbmcgdGhlIGtlcm5lbCwgdXBkYXRpbmcgdGhlIHRpbWUgcmV0dXJuZWQgYnkgRXY6Om5vdygpIGluIHRoZSBwcm9ncmVzcy4KICAgICAqIFRoaXMgaXMgYSBjb3N0bHkgb3BlcmF0aW9uIGFuZCBpcyB1c3VhbGx5IGRvbmUgYXV0b21hdGljYWxseSB3aXRoaW4gRXY6OnJ1bigpLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGlzIHJhcmVseSB1c2VmdWwsIGJ1dCB3aGVuIHNvbWUgZXZlbnQgY2FsbGJhY2sgcnVucyBmb3IgYSB2ZXJ5IGxvbmcgdGltZSB3aXRob3V0IGVudGVyaW5nIHRoZSBldmVudAogICAgICogbG9vcCwgdXBkYXRpbmcgbGliZXYncyBjb25zaWRlcmF0aW9uIG9mIHRoZSBjdXJyZW50IHRpbWUgaXMgYSBnb29kIGlkZWEuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBub3dVcGRhdGUoKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBFdlBlcmlvZGljIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJG9mZnNldAogICAgICogQHBhcmFtIGZsb2F0ICRpbnRlcnZhbAogICAgICogQHBhcmFtIGNhbGxhYmxlICRyZXNjaGVkdWxlX2NiCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRhdGEKICAgICAqIEBwYXJhbSBpbnQgJHByaW9yaXR5CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBwZXJpb2RpYyhmbG9hdCAkb2Zmc2V0LCBmbG9hdCAkaW50ZXJ2YWwsIG1peGVkICRyZXNjaGVkdWxlX2NiLCBtaXhlZCAkY2FsbGJhY2ssIG1peGVkICRkYXRhID0gbnVsbCwgaW50ICRwcmlvcml0eSA9IDApIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIEV2UHJlcGFyZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gaW50ICRwcmlvcml0eQogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gcHJlcGFyZShjYWxsYWJsZSAkY2FsbGJhY2ssICRkYXRhID0gbnVsbCwgJHByaW9yaXR5ID0gMCkge30KCiAgICAvKioKICAgICAqIFJlc3VtZSBwcmV2aW91c2x5IHN1c3BlbmRlZCBkZWZhdWx0IGV2ZW50IGxvb3AuCiAgICAgKgogICAgICogRXZMb29wOjpzdXNwZW5kKCkgYW5kIEV2TG9vcDo6cmVzdW1lKCkgbWV0aG9kcyBzdXNwZW5kIGFuZCByZXN1bWUgYSBsb29wIGNvcnJlc3BvbmRpbmdseS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc3VtZSgpIHt9CgogICAgLyoqCiAgICAgKiBCZWdpbiBjaGVja2luZyBmb3IgZXZlbnRzIGFuZCBjYWxsaW5nIGNhbGxiYWNrcyBmb3IgdGhlIGxvb3AuCiAgICAgKgogICAgICogQmVnaW4gY2hlY2tpbmcgZm9yIGV2ZW50cyBhbmQgY2FsbGluZyBjYWxsYmFja3MgZm9yIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AuIFJldHVybnMgd2hlbiBhIGNhbGxiYWNrIGNhbGxzCiAgICAgKiBFdjo6c3RvcCgpIG1ldGhvZCwgb3IgdGhlIGZsYWdzIGFyZSBub256ZXJvIChpbiB3aGljaCBjYXNlIHRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSkgb3Igd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlCiAgICAgKiB3YXRjaGVycyB3aGljaCByZWZlcmVuY2UgdGhlIGxvb3AgKEV2V2F0Y2hlcjo6a2VlcGFsaXZlKCkgaXMgVFJVRSksIGluIHdoaWNoIGNhc2UgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIEZBTFNFLgogICAgICogVGhlIHJldHVybiB2YWx1ZSBjYW4gZ2VuZXJhbGx5IGJlIGludGVycHJldGVkIGFzIGlmIFRSVUUsIHRoZXJlIGlzIG1vcmUgd29yayBsZWZ0IHRvIGRvLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIE9uZSBvZiB0aGUgRXY6OlJVTl8qIGZsYWdzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcnVuKGludCAkZmxhZ3MgPSBFdjo6RkxBR19BVVRPKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBFdlNpZ25hbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkc2lnbnVtCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gbWl4ZWQgJGRhdGEKICAgICAqIEBwYXJhbSBpbnQgJHByaW9yaXR5CiAgICAgKiBAcmV0dXJuIEV2U2lnbmFsCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBzaWduYWwoaW50ICRzaWdudW0sIG1peGVkICRjYWxsYmFjaywgbWl4ZWQgJGRhdGEgPSBudWxsLCBpbnQgJHByaW9yaXR5ID0gMCkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgRXZTdGF0cyBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICogQHBhcmFtIGZsb2F0ICRpbnRlcnZhbAogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gaW50ICRwcmlvcml0eQogICAgICogQHJldHVybiBFdlN0YXQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIHN0YXQoc3RyaW5nICRwYXRoLCBmbG9hdCAkaW50ZXJ2YWwsIG1peGVkICRjYWxsYmFjaywgbWl4ZWQgJGRhdGEgPSBudWxsLCBpbnQgJHByaW9yaXR5ID0gMCkge30KCiAgICAvKioKICAgICAqIFN0b3BzIHRoZSBldmVudCBsb29wLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGhvdyBPbmUgb2YgdGhlIEV2OjpCUkVBS18qIGZsYWdzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RvcChpbnQgJGhvdyA9IEV2OjpCUkVBS19BTEwpIHt9CgogICAgLyoqCiAgICAgKiBTdXNwZW5kIHRoZSBsb29wLgogICAgICoKICAgICAqIEV2TG9vcDo6c3VzcGVuZCgpIGFuZCBFdkxvb3A6OnJlc3VtZSgpIG1ldGhvZHMgc3VzcGVuZCBhbmQgcmVzdW1lIGEgbG9vcCBjb3JyZXNwb25kaW5nbHkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdXNwZW5kKCkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgRXZUaW1lciBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRhZnRlcgogICAgICogQHBhcmFtIGZsb2F0ICRyZXBlYXQKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSBtaXhlZCAkZGF0YQogICAgICogQHBhcmFtIGludCAkcHJpb3JpdHkKICAgICAqIEByZXR1cm4gRXZUaW1lcgogICAgICovCiAgICBmaW5hbCBwdWJsaWMgZnVuY3Rpb24gdGltZXIoZmxvYXQgJGFmdGVyLCBmbG9hdCAkcmVwZWF0LCBtaXhlZCAkY2FsbGJhY2ssIG1peGVkICRkYXRhID0gbnVsbCwgaW50ICRwcmlvcml0eSA9IDApIHt9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtcyBpbnRlcm5hbCBjb25zaXN0ZW5jeSBjaGVja3MgKGZvciBkZWJ1Z2dpbmcpLgogICAgICoKICAgICAqIFBlcmZvcm1zIGludGVybmFsIGNvbnNpc3RlbmN5IGNoZWNrcyAoZm9yIGRlYnVnZ2luZyBsaWJldikgYW5kIGFib3J0IHRoZSBwcm9ncmFtIGlmIGFueSBkYXRhIHN0cnVjdHVyZXMgd2VyZQogICAgICogZm91bmQgdG8gYmUgY29ycnVwdGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmVyaWZ5KCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgb3IgY3JlYXRlcyB0aGUgZGVmYXVsdCBldmVudCBsb29wLgogICAgICoKICAgICAqIElmIHRoZSBkZWZhdWx0IGV2ZW50IGxvb3AgaXMgbm90IGNyZWF0ZWQsIEV2TG9vcDo6ZGVmYXVsdExvb3AoKSBjcmVhdGVzIGl0IHdpdGggdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzLgogICAgICogT3RoZXJ3aXNlLCBpdCBqdXN0IHJldHVybnMgdGhlIG9iamVjdCByZXByZXNlbnRpbmcgcHJldmlvdXNseSBjcmVhdGVkIGluc3RhbmNlIGlnbm9yaW5nIGFsbCB0aGUgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncwogICAgICogQHBhcmFtIG1peGVkICRkYXRhCiAgICAgKiBAcGFyYW0gZmxvYXQgJGlvX2ludGVydmFsCiAgICAgKiBAcGFyYW0gZmxvYXQgJHRpbWVvdXRfaW50ZXJ2YWwKICAgICAqIEByZXR1cm4gRXZMb29wCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVmYXVsdExvb3AoCiAgICAgICAgaW50ICRmbGFncyA9IEV2OjpGTEFHX0FVVE8sCiAgICAgICAgbWl4ZWQgJGRhdGEgPSBudWxsLAogICAgICAgIGZsb2F0ICRpb19pbnRlcnZhbCA9IDAuMCwKICAgICAgICBmbG9hdCAkdGltZW91dF9pbnRlcnZhbCA9IDAuMAogICAgKTogRXZMb29wIHt9Cn0KPD9waHAKCi8qKgogKiBCbGFja2ZpcmUgZXh0ZW5zaW9uIHN0dWJzLgogKiBAbGluayBodHRwczovL2JsYWNrZmlyZS5pbwogKi8KZmluYWwgY2xhc3MgQmxhY2tmaXJlUHJvYmUKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgZ2xvYmFsIHNpbmdsZXRvbiBhbmQgZW5hYmxlcyBpdCBieSBkZWZhdWx0LgogICAgICoKICAgICAqIEByZXR1cm4gXEJsYWNrZmlyZVByb2JlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TWFpbkluc3RhbmNlKCkge30KCiAgICAvKioKICAgICAqIFRlbGxzIHdoZXRoZXIgdGhlIHByb2JlIGlzIGN1cnJlbnRseSBwcm9maWxpbmcgb3Igbm90LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzRW5hYmxlZCgpIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIGEgbWFya2VyIGZvciB0aGUgVGltZWxpbmUgVmlldy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtYXJrZXJOYW1lCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYWRkTWFya2VyKCRtYXJrZXJOYW1lID0gJycpIHt9CgogICAgLyoqCiAgICAgKiBCbGFja2ZpcmVQcm9iZSBjb25zdHJ1Y3Rvci4gU0hPVUxEIE5PVCBCRSBVU0VEIERJUkVDVExZIQogICAgICogVVNFIGdldE1haW5JbnN0YW5jZSgpIElOU1RFQUQhCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcXVlcnkgQW4gVVJMLWVuY29kZWQgc3RyaW5nIHRoYXQgY29uZmlndXJlcyB0aGUgcHJvYmUuIFBhcnQgb2YgdGhlIHN0cmluZyBpcyBzaWduZWQuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHkgY29tZXMgZnJvbSBYLUJsYWNrZmlyZS1RdWVyeSBIVFRQIGhlYWRlciBvciBCTEFDS1JGSVJFX1FVRVJZIGVudmlyb25tZW50IHZhcmlhYmxlLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRlbnZJZCBBbiBpZCB0aGF0IGlzIGdpdmVuIHRvIHRoZSBhZ2VudCBmb3Igc2lnbmF0dXJlIGltcGVyc29uYXRpb24uCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGVudlRva2VuIFRoZSB0b2tlbiBhc3NvY2lhdGVkIHRvICRlbnZJZC4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkYWdlbnRTb2NrZXQgVGhlIFVSTCB3aGVyZSBwcm9maWxlcyB3aWxsIGJlIHdyaXR0ZW4gKGRpcmVjdG9yeSwgc29ja2V0IG9yIFRDUCBkZXN0aW5hdGlvbikuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcXVlcnksICRlbnZJZCA9IG51bGwsICRlbnZUb2tlbiA9IG51bGwsICRhZ2VudFNvY2tldCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBUZWxscyBpZiB0aGUgcHJvYmUgaXMgY3J5cHRvZ3JhcGhpY2FsbHkgdmVyaWZpZWQsCiAgICAgKiBpLmUuIGlmIHRoZSBzaWduYXR1cmUgaW4gWC1CbGFja2ZpcmUtUXVlcnkgSFRUUCBoZWFkZXIgb3IKICAgICAqIEJMQUNLRklSRV9RVUVSWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB2YWxpZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzVmVyaWZpZWQoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkY29uZmlndXJhdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29uZmlndXJhdGlvbigkY29uZmlndXJhdGlvbikge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIHJlc3BvbnNlIG1lc3NhZ2Uvc3RhdHVzL2xpbmUuCiAgICAgKgogICAgICogVGhpcyBsaW5lcyBnaXZlcyBkZXRhaWxzIGFib3V0IHRoZSBzdGF0dXMgb2YgdGhlIHByb2JlLiBUaGF0IGNhbiBiZToKICAgICAqIC0gYW4gZXJyb3I6IGBCbGFja2ZpcmUtRXJyb3I6ICRlcnJOdW1iZXIgJHVybEVuY29kZWRFcnJvck1lc3NhZ2VgCiAgICAgKiAtIG9yIG5vdDogYEJsYWNrZmlyZS1SZXNwb25zZTogJHJmYzE3MzhFbmNvZGVkTWVzc2FnZWAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgcmVzcG9uc2UgbGluZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VMaW5lKCkge30KCiAgICAvKioKICAgICAqIEVuYWJsZXMgbWFudWFsIGluc3RydW1lbnRhdGlvbi4gU3RhcnRzIGNvbGxlY3RpbmcgcHJvZmlsaW5nIGRhdGEuCiAgICAgKgogICAgICogQHJldHVybiBib29sIEZhbHNlIGlmIGVuYWJsaW5nIGZhaWxlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuYWJsZSgpIHt9CgogICAgLyoqCiAgICAgKiBEaXNjYXJkcyBjb2xsZWN0ZWQgZGF0YSBhbmQgZGlzYWJsZXMgaW5zdHJ1bWVudGF0aW9uLgogICAgICoKICAgICAqIERvZXMgbm90IGNsb3NlIHRoZSBwcm9maWxlIHBheWxvYWQsIGFsbG93aW5nIHRvIHJlLWVuYWJsZSB0aGUgcHJvYmUgYW5kIGFnZ3JlZ2F0ZSBkYXRhIGluIHRoZSBzYW1lIHByb2ZpbGUuCiAgICAgKgogICAgICogQHJldHVybiBib29sIEZhbHNlIGlmIHRoZSBwcm9iZSB3YXMgbm90IGVuYWJsZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNjYXJkKCkge30KCiAgICAvKioKICAgICAqIERpc2FibGVzIGluc3RydW1lbnRhdGlvbi4KICAgICAqCiAgICAgKiBEb2VzIG5vdCBjbG9zZSB0aGUgcHJvZmlsZSBwYXlsb2FkLCBhbGxvd2luZyB0byByZS1lbmFibGUgdGhlIHByb2JlCiAgICAgKiBhbmQgdG8gYWdncmVnYXRlIGRhdGEgaW4gdGhlIHNhbWUgcHJvZmlsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgRmFsc2UgaWYgdGhlIHByb2JlIHdhcyBub3QgZW5hYmxlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc2FibGUoKSB7fQoKICAgIC8qKgogICAgICogU3RvcHMgdGhlIHByb2ZpbGluZyBhbmQgZm9yY2VzIHRoZSBjb2xsZWN0ZWQgZGF0YSB0byBiZSBzZW50IHRvIEJsYWNrZmlyZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgRmFsc2UgaWYgdGhlIHByb2JlIHdhcyBub3QgZW5hYmxlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlKCkge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBzdWItcXVlcnkgc3RyaW5nIHRvIGNyZWF0ZSBhIG5ldyBwcm9maWxlIGxpbmtlZCB0byB0aGUgY3VycmVudCBvbmUuCiAgICAgKiBHZW5lcmF0ZWQgcXVlcnkgbXVzdCBiZSBzZXQgaW4gdGhlIFgtQmxhY2tpcmUtUXVlcnkgSFRUUCBoZWFkZXIgb3IgaW4gdGhlIEJMQUNLRklSRV9RVUVSWSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBzdWItcXVlcnkgb3IgbnVsbCBpZiB0aGUgY3VycmVudCBwcm9maWxlIGlzIG5vdCB0aGUgZmlyc3Qgc2FtcGxlIG9yIHByb2ZpbGluZyBpcyBkaXNhYmxlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVN1YlByb2ZpbGVRdWVyeSgpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIGEgY3VzdG9tIHRyYW5zYWN0aW9uIG5hbWUgZm9yIEJsYWNrZmlyZSBNb25pdG9yaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRyYW5zYWN0aW9uTmFtZSBOYW1lIHRvIHJlZ2lzdGVyIGZvciB0aGUgdHJhbnNhY3Rpb24gKGUuZy4gJ3VzZXJfbW9kZWw6c2hvdycpCiAgICAgKgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0VHJhbnNhY3Rpb25OYW1lKHN0cmluZyAkdHJhbnNhY3Rpb25OYW1lKSB7fQoKICAgIC8qKgogICAgICogRGlzYWJsZXMgQmxhY2tmaXJlIE1vbml0b3JpbmcgaW5zdHJ1bWVudGF0aW9uIGZvciBhIHRyYW5zYWN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlnbm9yZVRyYW5zYWN0aW9uKCkge30KCiAgICAvKioKICAgICAqIE1hbnVhbGx5IHN0YXJ0cyBhIHRyYW5zYWN0aW9uLiBVc2VmdWwgZm9yIENMSS9Db25zdW1lciBtb25pdG9yaW5nLgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN0YXJ0VHJhbnNhY3Rpb24oKSB7fQoKICAgIC8qKgogICAgICogTWFudWFsbHkgc3RvcHMgYSB0cmFuc2FjdGlvbi4gVXNlZnVsIGZvciBDTEkvQ29uc3VtZXIgbW9uaXRvcmluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdG9wVHJhbnNhY3Rpb24oKSB7fQp9Cjw/cGhwCi8qKgogKiBAeGdsb2JhbCAkR0xPQkFMUyBhcnJheQogKiBDb250YWlucyBhIHJlZmVyZW5jZSB0byBldmVyeSB2YXJpYWJsZSB3aGljaCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIHdpdGhpbiB0aGUgZ2xvYmFsIHNjb3BlIG9mIHRoZSBzY3JpcHQuCiAqICAgVGhlIGtleXMgb2YgdGhpcyBhcnJheSBhcmUgdGhlIG5hbWVzIG9mIHRoZSBnbG9iYWwgdmFyaWFibGVzLgogKiAgICRHTE9CQUxTIGhhcyBleGlzdGVkIHNpbmNlIFBIUCAzLgogKgogKiA8cD48YSBocmVmPSJodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwIj5odHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwPC9hPgogKi8KJEdMT0JBTFMgPSBbXTsKCi8qKgogKiBAeGdsb2JhbCAkX0NPT0tJRSBhcnJheQogKiBWYXJpYWJsZXMgcHJvdmlkZWQgdG8gdGhlIHNjcmlwdCB2aWEgSFRUUCBjb29raWVzLiBBbmFsb2dvdXMgdG8gdGhlIG9sZCAkSFRUUF9DT09LSUVfVkFSUyBhcnJheQogKiAod2hpY2ggaXMgc3RpbGwgYXZhaWxhYmxlLCBidXQgZGVwcmVjYXRlZCkuCiAqCiAqIDxwPjxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLnZhcmlhYmxlcy5waHAiPgogKiBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwPC9hPgogKi8KJF9DT09LSUUgPSBbXTsKCi8qKgogKiBAeGdsb2JhbCAkX0VOViBhcnJheQogKiBAeGdsb2JhbCAkSFRUUF9FTlZfVkFSUyBhcnJheQogKgogKiBWYXJpYWJsZXMgcHJvdmlkZWQgdG8gdGhlIHNjcmlwdCB2aWEgdGhlIGVudmlyb25tZW50LgogKiBBbmFsb2dvdXMgdG8gdGhlIG9sZCAkSFRUUF9FTlZfVkFSUyBhcnJheSAod2hpY2ggaXMgc3RpbGwgYXZhaWxhYmxlLCBidXQgZGVwcmVjYXRlZCkuCiAqCiAqIDxwPjxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLnZhcmlhYmxlcy5waHAiPgogKiBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwPC9hPgogKi8KJF9FTlYgPSBbXTsKLyoqCiAqIEBkZXByZWNhdGVkIDQuMQogKiBAcmVtb3ZlZCA1LjQKICovCiRIVFRQX0VOVl9WQVJTID0gW107CgovKioKICogQHhnbG9iYWwgJF9GSUxFUyBhcnJheQogKiBAeGdsb2JhbCAkSFRUUF9QT1NUX0ZJTEVTIGFycmF5CiAqCiAqIFZhcmlhYmxlcyBwcm92aWRlZCB0byB0aGUgc2NyaXB0IHZpYSBIVFRQIHBvc3QgZmlsZSB1cGxvYWRzLiBBbmFsb2dvdXMgdG8gdGhlIG9sZCAkSFRUUF9QT1NUX0ZJTEVTIGFycmF5CiAqICh3aGljaCBpcyBzdGlsbCBhdmFpbGFibGUsIGJ1dCBkZXByZWNhdGVkKS4KICogU2VlIFBPU1QgbWV0aG9kIHVwbG9hZHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAqCiAqIDxwPjxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLnZhcmlhYmxlcy5waHAiPgogKiBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwPC9hPgogKi8KJF9GSUxFUyA9IFtdOwovKioKICogQGRlcHJlY2F0ZWQgNC4xCiAqIEByZW1vdmVkIDUuNAogKi8KJEhUVFBfUE9TVF9GSUxFUyA9IFtdOwoKLyoqCiAqIEB4Z2xvYmFsICRfR0VUIGFycmF5CiAqIEB4Z2xvYmFsICRIVFRQX0dFVF9WQVJTIGFycmF5CiAqCiAqIFZhcmlhYmxlcyBwcm92aWRlZCB0byB0aGUgc2NyaXB0IHZpYSBVUkwgcXVlcnkgc3RyaW5nLgogKiAgQW5hbG9nb3VzIHRvIHRoZSBvbGQgJEhUVFBfR0VUX1ZBUlMgYXJyYXkgKHdoaWNoIGlzIHN0aWxsIGF2YWlsYWJsZSwgYnV0IGRlcHJlY2F0ZWQpLgogKgogKiA8cD48YSBocmVmPSJodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwIj4KICogaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQudmFyaWFibGVzLnBocDwvYT4KICovCiRfR0VUID0gW107Ci8qKgogKiBAZGVwcmVjYXRlZCA0LjEKICogQHJlbW92ZWQgNS40CiAqLwokSFRUUF9HRVRfVkFSUyA9IFtdOwoKLyoqCiAqIEB4Z2xvYmFsICRfUE9TVCBhcnJheQogKiBAeGdsb2JhbCAkSFRUUF9QT1NUX1ZBUlMgYXJyYXkKICoKICogVmFyaWFibGVzIHByb3ZpZGVkIHRvIHRoZSBzY3JpcHQgdmlhIEhUVFAgUE9TVC4gQW5hbG9nb3VzIHRvIHRoZSBvbGQgJEhUVFBfUE9TVF9WQVJTIGFycmF5CiAqICh3aGljaCBpcyBzdGlsbCBhdmFpbGFibGUsIGJ1dCBkZXByZWNhdGVkKS4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudmFyaWFibGVzLnByZWRlZmluZWQucGhwCiAqCiAqIDxwPjxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLnZhcmlhYmxlcy5waHAiPgogKiBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwPC9hPgogKi8KJF9QT1NUID0gW107Ci8qKgogKiBAZGVwcmVjYXRlZCA0LjEKICogQHJlbW92ZWQgNS40CiAqLwokSFRUUF9QT1NUX1ZBUlMgPSBbXTsKCi8qKgogKiAgQHhnbG9iYWwgJF9SRVFVRVNUIGFycmF5CiAqIFZhcmlhYmxlcyBwcm92aWRlZCB0byB0aGUgc2NyaXB0IHZpYSB0aGUgR0VULCBQT1NULCBhbmQgQ09PS0lFIGlucHV0IG1lY2hhbmlzbXMsCiAqIGFuZCB3aGljaCB0aGVyZWZvcmUgY2Fubm90IGJlIHRydXN0ZWQuCiAqIFRoZSBwcmVzZW5jZSBhbmQgb3JkZXIgb2YgdmFyaWFibGUgaW5jbHVzaW9uIGluIHRoaXMgYXJyYXkgaXMgZGVmaW5lZCBhY2NvcmRpbmcgdG8gdGhlCiAqIFBIUCB2YXJpYWJsZXNfb3JkZXIgY29uZmlndXJhdGlvbiBkaXJlY3RpdmUuCiAqIFRoaXMgYXJyYXkgaGFzIG5vIGRpcmVjdCBhbmFsb2d1ZSBpbiB2ZXJzaW9ucyBvZiBQSFAgcHJpb3IgdG8gNC4xLjAuCiAqIFNlZSBhbHNvIGltcG9ydF9yZXF1ZXN0X3ZhcmlhYmxlcygpLgogKiA8cD4KICogQ2F1dGlvbgogKiAgPHA+U2luY2UgUEhQIDQuMy4wLCBGSUxFIGluZm9ybWF0aW9uIGZyb20gJF9GSUxFUyBkb2VzIG5vdCBleGlzdCBpbiAkX1JFUVVFU1QuCiAqIDxwPgogKiBOb3RlOiBXaGVuIHJ1bm5pbmcgb24gdGhlIGNvbW1hbmQgbGluZSAsIHRoaXMgd2lsbCBub3QgaW5jbHVkZSB0aGUgYXJndiBhbmQgYXJnYyBlbnRyaWVzOyB0aGVzZSBhcmUgcHJlc2VudCBpbiB0aGUgJF9TRVJWRVIgYXJyYXkuCiAqCiAqCiAqIDxwPjxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLnZhcmlhYmxlcy5waHAiPgogKiBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwPC9hPgogKi8KJF9SRVFVRVNUID0gW107CgovKioKICogQHhnbG9iYWwgJF9TRVJWRVIgYXJyYXkKICogQHhnbG9iYWwgJEhUVFBfU0VSVkVSX1ZBUlMgYXJyYXkKICoKICogVmFyaWFibGVzIHNldCBieSB0aGUgd2ViIHNlcnZlciBvciBvdGhlcndpc2UgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50IG9mIHRoZSBjdXJyZW50IHNjcmlwdC4KICogQW5hbG9nb3VzIHRvIHRoZSBvbGQgJEhUVFBfU0VSVkVSX1ZBUlMgYXJyYXkgKHdoaWNoIGlzIHN0aWxsIGF2YWlsYWJsZSwgYnV0IGRlcHJlY2F0ZWQpLgogKgogKiA8cD48YSBocmVmPSJodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwIj4KICogaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQudmFyaWFibGVzLnBocDwvYT4KICovCiRfU0VSVkVSID0gW107Ci8qKgogKiBAZGVwcmVjYXRlZCA0LjEKICogQHJlbW92ZWQgNS40CiAqLwokSFRUUF9TRVJWRVJfVkFSUyA9IFtdOwoKJF9TRVJWRVJbJ1BIUF9TRUxGJ10gPSAnJzsKJF9TRVJWRVJbJ2FyZ3YnXSA9ICcnOwokX1NFUlZFUlsnYXJnYyddID0gJyc7CiRfU0VSVkVSWydHQVRFV0FZX0lOVEVSRkFDRSddID0gJ0NHSS8xLjEnOwokX1NFUlZFUlsnU0VSVkVSX0FERFInXSA9ICcxMjcuMC4wLjEnOwokX1NFUlZFUlsnU0VSVkVSX05BTUUnXSA9ICdsb2NhbGhvc3QnOwokX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ10gPSAnJzsKJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddID0gJ0hUVFAvMS4wJzsKJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPSAnR0VUJzsKJF9TRVJWRVJbJ1JFUVVFU1RfVElNRSddID0gOTQ2NzEzNjAwOwokX1NFUlZFUlsnUkVRVUVTVF9USU1FX0ZMT0FUJ10gPSA5NDY3MTM2MDAuMTIzNDU2OwokX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10gPSAnJzsKJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSA9ICcnOwokX1NFUlZFUlsnSFRUUF9BQ0NFUFQnXSA9ICcnOwokX1NFUlZFUlsnSFRUUF9BQ0NFUFRfQ0hBUlNFVCddID0gJ2lzby04ODU5LTEsKix1dGYtOCc7CiRfU0VSVkVSWydIVFRQX0FDQ0VQVF9FTkNPRElORyddID0gJ2d6aXAnOwokX1NFUlZFUlsnSFRUUF9BQ0NFUFRfTEFOR1VBR0UnXSA9ICdlbic7CiRfU0VSVkVSWydIVFRQX0NPTk5FQ1RJT04nXSA9ICdLZWVwLUFsaXZlJzsKJF9TRVJWRVJbJ0hUVFBfSE9TVCddID0gJyc7CiRfU0VSVkVSWydIVFRQX1JFRkVSRVInXSA9ICcnOwokX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10gPSAnTW96aWxsYS80LjUgW2VuXSAoWDExOyBVOyBMaW51eCAyLjIuOSBpNTg2KS4nOwokX1NFUlZFUlsnSFRUUFMnXSA9ICcnOwokX1NFUlZFUlsnUkVNT1RFX0FERFInXSA9ICcnOwokX1NFUlZFUlsnUkVNT1RFX0hPU1QnXSA9ICcnOwokX1NFUlZFUlsnUkVNT1RFX1BPUlQnXSA9ICcnOwokX1NFUlZFUlsnUkVNT1RFX1VTRVInXSA9ICcnOwokX1NFUlZFUlsnUkVESVJFQ1RfUkVNT1RFX1VTRVInXSA9ICcnOwokX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10gPSAnJzsKJF9TRVJWRVJbJ1NFUlZFUl9BRE1JTiddID0gJyc7CiRfU0VSVkVSWydTRVJWRVJfUE9SVCddID0gJzgwJzsKJF9TRVJWRVJbJ1NFUlZFUl9TSUdOQVRVUkUnXSA9ICcnOwokX1NFUlZFUlsnUEFUSF9UUkFOU0xBVEVEJ10gPSAnJzsKJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ10gPSAnJzsKJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10gPSAnL2luZGV4Lmh0bWwnOwokX1NFUlZFUlsnUEhQX0FVVEhfRElHRVNUJ10gPSAnJzsKJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXSA9ICcnOwokX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSA9ICcnOwokX1NFUlZFUlsnQVVUSF9UWVBFJ10gPSAnJzsKJF9TRVJWRVJbJ1BBVEhfSU5GTyddID0gJyc7CiRfU0VSVkVSWydPUklHX1BBVEhfSU5GTyddID0gJyc7CgovKioKICogIEB4Z2xvYmFsICRfU0VTU0lPTiBhcnJheQogKiAgQHhnbG9iYWwgJEhUVFBfU0VTU0lPTl9WQVJTIGFycmF5CiAqCiAqIFZhcmlhYmxlcyB3aGljaCBhcmUgY3VycmVudGx5IHJlZ2lzdGVyZWQgdG8gYSBzY3JpcHQncyBzZXNzaW9uLgogKiBBbmFsb2dvdXMgdG8gdGhlIG9sZCAkSFRUUF9TRVNTSU9OX1ZBUlMgYXJyYXkgKHdoaWNoIGlzIHN0aWxsIGF2YWlsYWJsZSwgYnV0IGRlcHJlY2F0ZWQpLgogKiBTZWUgdGhlIFNlc3Npb24gaGFuZGxpbmcgZnVuY3Rpb25zIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAqCiAqIDxwPjxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLnZhcmlhYmxlcy5waHAiPgogKiBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwPC9hPgogKi8KJF9TRVNTSU9OID0gW107Ci8qKgogKiBAZGVwcmVjYXRlZCA0LjEKICogQHJlbW92ZWQgNS40CiAqLwokSFRUUF9TRVNTSU9OX1ZBUlMgPSBbXTsKCi8qKgogKiBAeGdsb2JhbCAkYXJnYyBpbnQKICogQHR5cGUgaW50PDEsIG1heD4KICoKICogVGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIHNjcmlwdAogKgogKiA8cD48YSBocmVmPSJodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwIj4KICogaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQudmFyaWFibGVzLnBocDwvYT4KICovCiRhcmdjID0gMDsKCi8qKgogKiAgQHhnbG9iYWwgJGFyZ3YgYXJyYXkKICoKICogQXJyYXkgb2YgYXJndW1lbnRzIHBhc3NlZCB0byBzY3JpcHQKICoKICogPHA+PGEgaHJlZj0iaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQudmFyaWFibGVzLnBocCI+CiAqIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLnZhcmlhYmxlcy5waHA8L2E+CiAqLwokYXJndiA9IFsxICsgMSA9PiAiYSIgLiAiYiJdOwoKLyoqCiAqIEB4Z2xvYmFsICRIVFRQX1JBV19QT1NUX0RBVEEgc3RyaW5nCiAqCiAqIFJhdyBQT1NUIGRhdGEKICoKICogPHA+PGEgaHJlZj0iaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQudmFyaWFibGVzLnBocCI+CiAqIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLnZhcmlhYmxlcy5waHA8L2E+CiAqCiAqIEBkZXByZWNhdGVkIDUuNiBEZXByZWNhdGVkIGFzIG9mIFBIUCA1LjYuMC4gVXNlIHRoZSBwaHA6Ly9pbnB1dCBzdHJlYW0gaW5zdGVhZC4KICogQHJlbW92ZWQgNy4wCiAqLwokSFRUUF9SQVdfUE9TVF9EQVRBID0gJyc7CgovKioKICogQHhnbG9iYWwgJGh0dHBfcmVzcG9uc2VfaGVhZGVyIGFycmF5CiAqCiAqIEhUVFAgcmVzcG9uc2UgaGVhZGVycwogKgogKiA8cD48YSBocmVmPSJodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwIj4KICogaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQudmFyaWFibGVzLnBocDwvYT4KICovCiRodHRwX3Jlc3BvbnNlX2hlYWRlciA9IFtdOwoKLyoqCiAqIEB4Z2xvYmFsICRwaHBfZXJyb3Jtc2cgc3RyaW5nCiAqICBUaGUgcHJldmlvdXMgZXJyb3IgbWVzc2FnZQogKgogKiA8cD48YSBocmVmPSJodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC52YXJpYWJsZXMucGhwIj4KICogaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQudmFyaWFibGVzLnBocDwvYT4KICogQGRlcHJlY2F0ZWQgNy4yCiAqLwokcGhwX2Vycm9ybXNnID0gJyc7Cjw/cGhwCgovLyBTdGFydCBvZiBGYW5uIHYuMQoKLyoqCiAqIENsYXNzIEZBTk5Db25uZWN0aW9uCiAqLwpjbGFzcyBGQU5OQ29ubmVjdGlvbgp7CiAgICAvKioKICAgICAqIEB2YXIgZmxvYXQKICAgICAqLwogICAgcHVibGljICR3ZWlnaHQ7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICBwdWJsaWMgJHRvX25ldXJvbjsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHB1YmxpYyAkZnJvbV9uZXVyb247CgogICAgLyoqCiAgICAgKiBUaGUgY29ubmVjdGlvbiBjb25zdHJ1Y3RvcgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGZyb21fbmV1cm9uCiAgICAgKiBAcGFyYW0gaW50ICR0b19uZXVyb24KICAgICAqIEBwYXJhbSBmbG9hdCAkd2VpZ2h0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZnJvbV9uZXVyb24sICR0b19uZXVyb24sICR3ZWlnaHQpIHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBwb3N0aW9ucyBvZiBzdGFydGluZyBuZXVyb24uCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIHBvc3Rpb25zIG9mIHN0YXJ0aW5nIG5ldXJvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyb21OZXVyb24oKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcG9zdGlvbnMgb2YgdGVybWluYXRpbmcgbmV1cm9uCiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIHBvc3Rpb25zIG9mIHRlcm1pbmF0aW5nIG5ldXJvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRvTmV1cm9uKCkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGNvbm5lY3Rpb24gd2VpZ2h0CiAgICAgKgogICAgICogQHJldHVybiB2b2lkIFRoZSBjb25uZWN0aW9uIHdlaWdodC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFdlaWdodCgpIHt9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBjb25uZWN0aW9ucyB3ZWlnaHQKICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHdlaWdodAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0V2VpZ2h0KCR3ZWlnaHQpIHt9Cn0KCi8qKgogKiBUcmFpbnMgb24gYW4gZW50aXJlIGRhdGFzZXQsIGZvciBhIHBlcmlvZCBvZiB0aW1lIHVzaW5nIHRoZSBDYXNjYWRlMiB0cmFpbmluZyBhbGdvcml0aG0KICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIHJlc291cmNlICRkYXRhCiAqIEBwYXJhbSBpbnQgJG1heF9uZXVyb25zCiAqIEBwYXJhbSBpbnQgJG5ldXJvbnNfYmV0d2Vlbl9yZXBvcnRzCiAqIEBwYXJhbSBmbG9hdCAkZGVzaXJlZF9lcnJvcgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fY2FzY2FkZXRyYWluX29uX2RhdGEoJGFubiwgJGRhdGEsICRtYXhfbmV1cm9ucywgJG5ldXJvbnNfYmV0d2Vlbl9yZXBvcnRzLCAkZGVzaXJlZF9lcnJvcikge30KCi8qKgogKiBUcmFpbnMgb24gYW4gZW50aXJlIGRhdGFzZXQgcmVhZCBmcm9tIGZpbGUsIGZvciBhIHBlcmlvZCBvZiB0aW1lIHVzaW5nIHRoZSBDYXNjYWRlMiB0cmFpbmluZyBhbGdvcml0aG0uCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEBwYXJhbSBpbnQgJG1heF9uZXVyb25zCiAqIEBwYXJhbSBpbnQgJG5ldXJvbnNfYmV0d2Vlbl9yZXBvcnRzCiAqIEBwYXJhbSBmbG9hdCAkZGVzaXJlZF9lcnJvcgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fY2FzY2FkZXRyYWluX29uX2ZpbGUoJGFubiwgJGZpbGVuYW1lLCAkbWF4X25ldXJvbnMsICRuZXVyb25zX2JldHdlZW5fcmVwb3J0cywgJGRlc2lyZWRfZXJyb3IpIHt9CgovKioKICogQ2xlYXJzIHNjYWxpbmcgcGFyYW1ldGVycwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fY2xlYXJfc2NhbGluZ19wYXJhbXMoJGFubikge30KCi8qKgogKiBDcmVhdGVzIGEgY29weSBvZiBhIGZhbm4gc3RydWN0dXJlCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgUmV0dXJucyBhIGNvcHkgb2YgbmV1cmFsIG5ldHdvcmsgcmVzb3VyY2Ugb24gc3VjY2Vzcywgb3IgZmFsc2Ugb24gZXJyb3IKICovCmZ1bmN0aW9uIGZhbm5fY29weSgkYW5uKSB7fQoKLyoqCiAqIENvbnN0cnVjdHMgYSBiYWNrcHJvcGFnYXRpb24gbmV1cmFsIG5ldHdvcmsgZnJvbSBhIGNvbmZpZ3VyYXRpb24gZmlsZQogKgogKgogKiBAcGFyYW0gc3RyaW5nICRjb25maWd1cmF0aW9uX2ZpbGUKICoKICogQHJldHVybiByZXNvdXJjZXxmYWxzZQogKi8KZnVuY3Rpb24gZmFubl9jcmVhdGVfZnJvbV9maWxlKCRjb25maWd1cmF0aW9uX2ZpbGUpIHt9CgovKioKICogQ3JlYXRlcyBhIHN0YW5kYXJkIGJhY2twcm9wYWdhdGlvbiBuZXVyYWwgbmV0d29yayB3aGljaCBpcyBub3QgZnVsbHkgY29ubmVjdGVjdGVkIGFuZCBoYXMgc2hvcnRjdXQgY29ubmVjdGlvbnMKICoKICoKICogQHBhcmFtIGludCAkbnVtX2xheWVycwogKiBAcGFyYW0gYXJyYXkgJGxheWVycwogKgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIFJldHVybnMgYSBuZXVyYWwgbmV0d29yayByZXNvdXJjZSBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fY3JlYXRlX3Nob3J0Y3V0X2FycmF5KCRudW1fbGF5ZXJzLCAkbGF5ZXJzKSB7fQoKLyoqCiAqIENyZWF0ZXMgYSBzdGFuZGFyZCBiYWNrcHJvcGFnYXRpb24gbmV1cmFsIG5ldHdvcmsgd2hpY2ggaXMgbm90IGZ1bGx5IGNvbm5lY3RlY3RlZCBhbmQgaGFzIHNob3J0Y3V0IGNvbm5lY3Rpb25zCiAqCiAqIEBwYXJhbSBpbnQgJG51bV9sYXllcnMKICogQHBhcmFtIGludCAkbnVtX25ldXJvbnMxCiAqIEBwYXJhbSBpbnQgJG51bV9uZXVyb25zMgogKiBAcGFyYW0gaW50IC4uLiRfCiAqCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgUmV0dXJucyBhIG5ldXJhbCBuZXR3b3JrIHJlc291cmNlIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9jcmVhdGVfc2hvcnRjdXQoJG51bV9sYXllcnMsICRudW1fbmV1cm9uczEsICRudW1fbmV1cm9uczIsIC4uLiRfKSB7fQoKLyoqCiAqIENyZWF0ZXMgYSBzdGFuZGFyZCBiYWNrcHJvcGFnYXRpb24gbmV1cmFsIG5ldHdvcmssIHdoaWNoIGlzIG5vdCBmdWxseSBjb25uZWN0ZWQgdXNpbmcgYW4gYXJyYXkgb2YgbGF5ZXIgc2l6ZXMKICoKICoKICogQHBhcmFtIGZsb2F0ICRjb25uZWN0aW9uX3JhdGUKICogQHBhcmFtIGludCAkbnVtX2xheWVycwogKiBAcGFyYW0gYXJyYXkgJGxheWVycwogKgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIFJldHVybnMgYSBuZXVyYWwgbmV0d29yayByZXNvdXJjZSBvbiBzdWNjZXNzLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fY3JlYXRlX3NwYXJzZV9hcnJheSgkY29ubmVjdGlvbl9yYXRlLCAkbnVtX2xheWVycywgJGxheWVycykge30KCi8qKgogKiBDcmVhdGVzIGEgc3RhbmRhcmQgYmFja3Byb3BhZ2F0aW9uIG5ldXJhbCBuZXR3b3JrLCB3aGljaCBpcyBub3QgZnVsbHkgY29ubmVjdGVkCiAqCiAqCiAqIEBwYXJhbSBmbG9hdCAkY29ubmVjdGlvbl9yYXRlCiAqIEBwYXJhbSBpbnQgJG51bV9sYXllcnMKICogQHBhcmFtIGludCAkbnVtX25ldXJvbnMxCiAqIEBwYXJhbSBpbnQgJG51bV9uZXVyb25zMgogKiBAcGFyYW0gaW50IC4uLiRfCiAqCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgUmV0dXJucyBhIG5ldXJhbCBuZXR3b3JrIHJlc291cmNlIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9jcmVhdGVfc3BhcnNlKCRjb25uZWN0aW9uX3JhdGUsICRudW1fbGF5ZXJzLCAkbnVtX25ldXJvbnMxLCAkbnVtX25ldXJvbnMyLCAuLi4kXykge30KCi8qKgogKiBDcmVhdGVzIGEgc3RhbmRhcmQgZnVsbHkgY29ubmVjdGVkIGJhY2twcm9wYWdhdGlvbiBuZXVyYWwgbmV0d29yayB1c2luZyBhbiBhcnJheSBvZiBsYXllciBzaXplcwogKgogKgogKiBAcGFyYW0gaW50ICRudW1fbGF5ZXJzCiAqIEBwYXJhbSBhcnJheSAkbGF5ZXJzCiAqCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgUmV0dXJucyBhIG5ldXJhbCBuZXR3b3JrIHJlc291cmNlIG9uIHN1Y2Nlc3MsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9jcmVhdGVfc3RhbmRhcmRfYXJyYXkoJG51bV9sYXllcnMsICRsYXllcnMpIHt9CgovKioKICogQ3JlYXRlcyBhIHN0YW5kYXJkIGZ1bGx5IGNvbm5lY3RlZCBiYWNrcHJvcGFnYXRpb24gbmV1cmFsIG5ldHdvcmsKICoKICoKICogQHBhcmFtIGludCAkbnVtX2xheWVycwogKiBAcGFyYW0gaW50ICRudW1fbmV1cm9uczEKICogQHBhcmFtIGludCAkbnVtX25ldXJvbnMyCiAqIEBwYXJhbSBpbnQgLi4uJF8KICoKICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBSZXR1cm5zIGEgbmV1cmFsIG5ldHdvcmsgcmVzb3VyY2Ugb24gc3VjY2Vzcywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2NyZWF0ZV9zdGFuZGFyZCgkbnVtX2xheWVycywgJG51bV9uZXVyb25zMSwgJG51bV9uZXVyb25zMiwgLi4uJF8pIHt9CgovKioKICogQ3JlYXRlcyB0aGUgdHJhaW5pbmcgZGF0YSBzdHJ1Y3QgZnJvbSBhIHVzZXIgc3VwcGxpZWQgZnVuY3Rpb24KICoKICoKICogQHBhcmFtIGludCAkbnVtX2RhdGEKICogQHBhcmFtIGludCAkbnVtX2lucHV0CiAqIEBwYXJhbSBpbnQgJG51bV9vdXRwdXQKICogQHBhcmFtIGNhbGxhYmxlICR1c2VyX2Z1bmN0aW9uCiAqCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UKICovCmZ1bmN0aW9uIGZhbm5fY3JlYXRlX3RyYWluX2Zyb21fY2FsbGJhY2soJG51bV9kYXRhLCAkbnVtX2lucHV0LCAkbnVtX291dHB1dCwgJHVzZXJfZnVuY3Rpb24pIHt9CgovKioKICogQ3JlYXRlcyBhbiBlbXB0eSB0cmFpbmluZyBkYXRhIHN0cnVjdAogKgogKgogKiBAcGFyYW0gaW50ICRudW1fZGF0YQogKiBAcGFyYW0gaW50ICRudW1faW5wdXQKICogQHBhcmFtIGludCAkbnVtX291dHB1dAogKgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlCiAqLwpmdW5jdGlvbiBmYW5uX2NyZWF0ZV90cmFpbigkbnVtX2RhdGEsICRudW1faW5wdXQsICRudW1fb3V0cHV0KSB7fQoKLyoqCiAqIFNjYWxlIGRhdGEgaW4gaW5wdXQgdmVjdG9yIGFmdGVyIGdldCBpdCBmcm9tIGFubiBiYXNlZCBvbiBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgcGFyYW1ldGVycwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gYXJyYXkgJGlucHV0X3ZlY3RvcgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fZGVzY2FsZV9pbnB1dCgkYW5uLCAkaW5wdXRfdmVjdG9yKSB7fQoKLyoqCiAqIFNjYWxlIGRhdGEgaW4gb3V0cHV0IHZlY3RvciBhZnRlciBnZXQgaXQgZnJvbSBhbm4gYmFzZWQgb24gcHJldmlvdXNseSBjYWxjdWxhdGVkIHBhcmFtZXRlcnMKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGFycmF5ICRvdXRwdXRfdmVjdG9yCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9kZXNjYWxlX291dHB1dCgkYW5uLCAkb3V0cHV0X3ZlY3Rvcikge30KCi8qKgogKiBEZXNjYWxlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBiYXNlZCBvbiBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgcGFyYW1ldGVycwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gcmVzb3VyY2UgJHRyYWluX2RhdGEKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX2Rlc2NhbGVfdHJhaW4oJGFubiwgJHRyYWluX2RhdGEpIHt9CgovKioKICogRGVzdHJveXMgdGhlIGVudGlyZSBuZXR3b3JrIGFuZCBwcm9wZXJseSBmcmVlaW5nIGFsbCB0aGUgYXNzb2NpYXRlZCBtZW1vcnkKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX2Rlc3Ryb3koJGFubikge30KCi8qKgogKiBEZXN0cnVjdHMgdGhlIHRyYWluaW5nIGRhdGEKICoKICoKICogQHBhcmFtIHJlc291cmNlICR0cmFpbl9kYXRhCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9kZXN0cm95X3RyYWluKCR0cmFpbl9kYXRhKSB7fQoKLyoqCiAqIFJldHVybnMgYW4gZXhhY3QgY29weSBvZiBhIGZhbm4gdHJhaW4gZGF0YQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGRhdGEKICoKICogQHJldHVybiByZXNvdXJjZXxmYWxzZQogKi8KZnVuY3Rpb24gZmFubl9kdXBsaWNhdGVfdHJhaW5fZGF0YSgkZGF0YSkge30KCi8qKgogKiBSZXR1cm5zIHRoZSBhY3RpdmF0aW9uIGZ1bmN0aW9uCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBpbnQgJGxheWVyCiAqIEBwYXJhbSBpbnQgJG5ldXJvbgogKgogKiBAcmV0dXJuIGludHxmYWxzZSBjb25zdGFudCBvciAtMSBpZiB0aGUgbmV1cm9uIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBuZXVyYWwgbmV0d29yaywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9hY3RpdmF0aW9uX2Z1bmN0aW9uKCRhbm4sICRsYXllciwgJG5ldXJvbikge30KCi8qKgogKiBSZXR1cm5zIHRoZSBhY3RpdmF0aW9uIHN0ZWVwbmVzcyBmb3Igc3VwcGxpZWQgbmV1cm9uIGFuZCBsYXllciBudW1iZXIKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGludCAkbGF5ZXIKICogQHBhcmFtIGludCAkbmV1cm9uCiAqCiAqIEByZXR1cm4gZmxvYXR8ZmFsc2UgVGhlIGFjdGl2YXRpb24gc3RlZXBuZXNzIGZvciB0aGUgbmV1cm9uIG9yIC0xIGlmIHRoZSBuZXVyb24gaXMgbm90IGRlZmluZWQgaW4gdGhlIG5ldXJhbCBuZXR3b3JrLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X2FjdGl2YXRpb25fc3RlZXBuZXNzKCRhbm4sICRsYXllciwgJG5ldXJvbikge30KCi8qKgogKiBHZXQgdGhlIG51bWJlciBvZiBiaWFzIGluIGVhY2ggbGF5ZXIgaW4gdGhlIG5ldHdvcmsKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBhcnJheSBBbiBhcnJheSBvZiBudW1iZXJzIG9mIGJpYXMgaW4gZWFjaCBsYXllcgogKi8KZnVuY3Rpb24gZmFubl9nZXRfYmlhc19hcnJheSgkYW5uKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGJpdCBmYWlsIGxpbWl0IHVzZWQgZHVyaW5nIHRyYWluaW5nCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gZmxvYXR8ZmFsc2UgVGhlIGJpdCBmYWlsIGxpbWl0LCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X2JpdF9mYWlsX2xpbWl0KCRhbm4pIHt9CgovKioKICogVGhlIG51bWJlciBvZiBmYWlsIGJpdHMKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBiaXRzIGZhaWwsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfYml0X2ZhaWwoJGFubikge30KCi8qKgogKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2FzY2FkZSBhY3RpdmF0aW9uIGZ1bmN0aW9ucwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIGNhc2NhZGUgYWN0aXZhdGlvbiBmdW5jdGlvbnMsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfY2FzY2FkZV9hY3RpdmF0aW9uX2Z1bmN0aW9uc19jb3VudCgkYW5uKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGNhc2NhZGUgYWN0aXZhdGlvbiBmdW5jdGlvbnMKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBhcnJheXxmYWxzZSBUaGUgY2FzY2FkZSBhY3RpdmF0aW9uIGZ1bmN0aW9ucywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9jYXNjYWRlX2FjdGl2YXRpb25fZnVuY3Rpb25zKCRhbm4pIHt9CgovKioKICogVGhlIG51bWJlciBvZiBhY3RpdmF0aW9uIHN0ZWVwbmVzc2VzCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBudW1iZXIgb2YgYWN0aXZhdGlvbiBzdGVlcG5lc3Nlcywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9jYXNjYWRlX2FjdGl2YXRpb25fc3RlZXBuZXNzZXNfY291bnQoJGFubikge30KCi8qKgogKiBSZXR1cm5zIHRoZSBjYXNjYWRlIGFjdGl2YXRpb24gc3RlZXBuZXNzZXMKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBhcnJheXxmYWxzZSBUaGUgY2FzY2FkZSBhY3RpdmF0aW9uIHN0ZWVwbmVzc2VzLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X2Nhc2NhZGVfYWN0aXZhdGlvbl9zdGVlcG5lc3NlcygkYW5uKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGNhc2NhZGUgY2FuZGlkYXRlIGNoYW5nZSBmcmFjdGlvbgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGZsb2F0fGZhbHNlIFRoZSBjYXNjYWRlIGNhbmRpZGF0ZSBjaGFuZ2UgZnJhY3Rpb24sIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfY2FzY2FkZV9jYW5kaWRhdGVfY2hhbmdlX2ZyYWN0aW9uKCRhbm4pIHt9CgovKioKICogUmV0dXJuIHRoZSBjYW5kaWRhdGUgbGltaXQKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBmbG9hdHxmYWxzZSBUaGUgY2FuZGlkYXRlIGxpbWl0LCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X2Nhc2NhZGVfY2FuZGlkYXRlX2xpbWl0KCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNhc2NhZGUgY2FuZGlkYXRlIHN0YWduYXRpb24gZXBvY2hzCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gZmxvYXR8ZmFsc2UgVGhlIG51bWJlciBvZiBjYXNjYWRlIGNhbmRpZGF0ZSBzdGFnbmF0aW9uIGVwb2Nocywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9jYXNjYWRlX2NhbmRpZGF0ZV9zdGFnbmF0aW9uX2Vwb2NocygkYW5uKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG1heGltdW0gY2FuZGlkYXRlIGVwb2NocwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgbWF4aW11bSBjYW5kaWRhdGUgZXBvY2hzLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X2Nhc2NhZGVfbWF4X2NhbmRfZXBvY2hzKCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgbWF4aW11bSBvdXQgZXBvY2hzCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBtYXhpbXVtIG91dCBlcG9jaHMsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfY2FzY2FkZV9tYXhfb3V0X2Vwb2NocygkYW5uKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG1pbmltdW0gY2FuZGlkYXRlIGVwb2NocwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgbWluaW11bSBjYW5kaWRhdGUgZXBvY2hzLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X2Nhc2NhZGVfbWluX2NhbmRfZXBvY2hzKCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgbWluaW11bSBvdXQgZXBvY2hzCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBtaW5pbXVtIG91dCBlcG9jaHMsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfY2FzY2FkZV9taW5fb3V0X2Vwb2NocygkYW5uKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjYW5kaWRhdGUgZ3JvdXBzCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBudW1iZXIgb2YgY2FuZGlkYXRlIGdyb3Vwcywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9jYXNjYWRlX251bV9jYW5kaWRhdGVfZ3JvdXBzKCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNhbmRpZGF0ZXMgdXNlZCBkdXJpbmcgdHJhaW5pbmcKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBjYW5kaWRhdGVzIHVzZWQgZHVyaW5nIHRyYWluaW5nLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X2Nhc2NhZGVfbnVtX2NhbmRpZGF0ZXMoJGFubikge30KCi8qKgogKiBSZXR1cm5zIHRoZSBjYXNjYWRlIG91dHB1dCBjaGFuZ2UgZnJhY3Rpb24KICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBmbG9hdHxmYWxzZSBUaGUgY2FzY2FkZSBvdXRwdXQgY2hhbmdlIGZyYWN0aW9uLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X2Nhc2NhZGVfb3V0cHV0X2NoYW5nZV9mcmFjdGlvbigkYW5uKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjYXNjYWRlIG91dHB1dCBzdGFnbmF0aW9uIGVwb2NocwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIGNhc2NhZGUgb3V0cHV0IHN0YWduYXRpb24gZXBvY2hzLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X2Nhc2NhZGVfb3V0cHV0X3N0YWduYXRpb25fZXBvY2hzKCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgd2VpZ2h0IG11bHRpcGxpZXIKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBmbG9hdHxmYWxzZSBUaGUgd2VpZ2h0IG11bHRpcGxpZXIsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfY2FzY2FkZV93ZWlnaHRfbXVsdGlwbGllcigkYW5uKSB7fQoKLyoqCiAqIEdldCBjb25uZWN0aW9ucyBpbiB0aGUgbmV0d29yawogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGFycmF5IEFuIGFycmF5IG9mIGNvbm5lY3Rpb25zIGluIHRoZSBuZXR3b3JrCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9jb25uZWN0aW9uX2FycmF5KCRhbm4pIHt9CgovKioKICogR2V0IHRoZSBjb25uZWN0aW9uIHJhdGUgdXNlZCB3aGVuIHRoZSBuZXR3b3JrIHdhcyBjcmVhdGVkCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gZmxvYXR8ZmFsc2UgVGhlIGNvbm5lY3Rpb24gcmF0ZSB1c2VkIHdoZW4gdGhlIG5ldHdvcmsgd2FzIGNyZWF0ZWQsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfY29ubmVjdGlvbl9yYXRlKCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgbGFzdCBlcnJvciBudW1iZXIKICoKICoKICogQHBhcmFtIHJlc291cmNlICRlcnJkYXQKICoKICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIGVycm9yIG51bWJlciwgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9lcnJubygkZXJyZGF0KSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGxhc3QgZXJyc3RyCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXJyZGF0CiAqCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBsYXN0IGVycm9yIHN0cmluZywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9lcnJzdHIoJGVycmRhdCkge30KCi8qKgogKiBHZXQgdGhlIG51bWJlciBvZiBuZXVyb25zIGluIGVhY2ggbGF5ZXIgaW4gdGhlIG5ldHdvcmsKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBhcnJheSBBbiBhcnJheSBvZiBudW1iZXJzIG9mIG5ldXJvbnMgaW4gZWFjaCBsZWF5ZXIKICovCmZ1bmN0aW9uIGZhbm5fZ2V0X2xheWVyX2FycmF5KCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgbGVhcm5pbmcgbW9tZW50dW0KICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBmbG9hdHxmYWxzZSBUaGUgbGVhcm5pbmcgbW9tZW50dW0sIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfbGVhcm5pbmdfbW9tZW50dW0oJGFubikge30KCi8qKgogKiBSZXR1cm5zIHRoZSBsZWFybmluZyByYXRlCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gZmxvYXR8ZmFsc2UgVGhlIGxlYXJuaW5nIHJhdGUsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfbGVhcm5pbmdfcmF0ZSgkYW5uKSB7fQoKLyoqCiAqIFJlYWRzIHRoZSBtZWFuIHNxdWFyZSBlcnJvciBmcm9tIHRoZSBuZXR3b3JrCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gZmxvYXR8ZmFsc2UgVGhlIG1lYW4gc3F1YXJlIGVycm9yLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X01TRSgkYW5uKSB7fQoKLyoqCiAqIEdldCB0aGUgdHlwZSBvZiBuZXVyYWwgbmV0d29yayBpdCB3YXMgY3JlYXRlZCBhcwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGludHxmYWxzZSBjb25zdGFudCwgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9uZXR3b3JrX3R5cGUoJGFubikge30KCi8qKgogKiBHZXQgdGhlIG51bWJlciBvZiBpbnB1dCBuZXVyb25zCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gaW50fGZhbHNlIE51bWJlciBvZiBpbnB1dCBuZXVyb25zLCBvciBmYWxzZSBvbiBlcnJvcgogKi8KZnVuY3Rpb24gZmFubl9nZXRfbnVtX2lucHV0KCRhbm4pIHt9CgovKioKICogR2V0IHRoZSBudW1iZXIgb2YgbGF5ZXJzIGluIHRoZSBuZXVyYWwgbmV0d29yawogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIGxlYXllcnMgaW4gdGhlIG5ldXJhbCBuZXR3b3JrLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X251bV9sYXllcnMoJGFubikge30KCi8qKgogKiBHZXQgdGhlIG51bWJlciBvZiBvdXRwdXQgbmV1cm9ucwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGludHxmYWxzZSBOdW1iZXIgb2Ygb3V0cHV0IG5ldXJvbnMsIG9yIGZhbHNlIG9uIGVycm9yCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9udW1fb3V0cHV0KCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgZGVjYXkgd2hpY2ggaXMgYSBmYWN0b3IgdGhhdCB3ZWlnaHRzIHNob3VsZCBkZWNyZWFzZSBpbiBlYWNoIGl0ZXJhdGlvbiBkdXJpbmcgcXVpY2twcm9wIHRyYWluaW5nCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gZmxvYXR8ZmFsc2UgVGhlIGRlY2F5LCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X3F1aWNrcHJvcF9kZWNheSgkYW5uKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG11IGZhY3RvcgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGZsb2F0fGZhbHNlIFRoZSBtdSBmYWN0b3IsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfcXVpY2twcm9wX211KCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgaW5jcmVhc2UgZmFjdG9yIHVzZWQgZHVyaW5nIFJQUk9QIHRyYWluaW5nCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gZmxvYXR8ZmFsc2UgVGhlIGRlY3JlYXNlIGZhY3Rvciwgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9ycHJvcF9kZWNyZWFzZV9mYWN0b3IoJGFubikge30KCi8qKgogKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHN0ZXAtc2l6ZQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGZsb2F0fGZhbHNlIFRoZSBtYXhpbXVtIHN0ZXAtc2l6ZSwgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9ycHJvcF9kZWx0YV9tYXgoJGFubikge30KCi8qKgogKiBSZXR1cm5zIHRoZSBtaW5pbXVtIHN0ZXAtc2l6ZQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGZsb2F0fGZhbHNlIFRoZSBtaW5pbXVtIHN0ZXAtc2l6ZSwgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2dldF9ycHJvcF9kZWx0YV9taW4oJGFubikge30KCi8qKgogKiBSZXR1cm5zIHRoZSBpbml0aWFsIHN0ZXAtc2l6ZQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgaW5pdGlhbCBzdGVwLXNpemUsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfcnByb3BfZGVsdGFfemVybygkYW5uKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGluY3JlYXNlIGZhY3RvciB1c2VkIGR1cmluZyBSUFJPUCB0cmFpbmluZwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKgogKiBAcmV0dXJuIGZsb2F0fGZhbHNlIFRoZSBpbmNyZWFzZSBmYWN0b3IsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfcnByb3BfaW5jcmVhc2VfZmFjdG9yKCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgc2FycHJvcCBzdGVwIGVycm9yIHNoaWZ0CiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gZmxvYXR8ZmFsc2UgVGhlIHNhcnByb3Agc3RlcCBlcnJvciBzaGlmdCAsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfc2FycHJvcF9zdGVwX2Vycm9yX3NoaWZ0KCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgc2FycHJvcCBzdGVwIGVycm9yIHRocmVzaG9sZCBmYWN0b3IKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBmbG9hdHxmYWxzZSBUaGUgc2FycHJvcCBzdGVwIGVycm9yIHRocmVzaG9sZCBmYWN0b3IsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfc2FycHJvcF9zdGVwX2Vycm9yX3RocmVzaG9sZF9mYWN0b3IoJGFubikge30KCi8qKgogKiBSZXR1cm5zIHRoZSBzYXJwcm9wIHRlbXBlcmF0dXJlCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gZmxvYXR8ZmFsc2UgVGhlIHNhcnByb3AgdGVtcGVyYXR1cmUsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9nZXRfc2FycHJvcF90ZW1wZXJhdHVyZSgkYW5uKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIHNhcnByb3Agd2VpZ2h0IGRlY2F5IHNoaWZ0CiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gZmxvYXR8ZmFsc2UgVGhlIHNhcnByb3Agd2VpZ2h0IGRlY2F5IHNoaWZ0LCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X3NhcnByb3Bfd2VpZ2h0X2RlY2F5X3NoaWZ0KCRhbm4pIHt9CgovKioKICogR2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgY29ubmVjdGlvbnMgaW4gdGhlIGVudGlyZSBuZXR3b3JrCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gaW50fGZhbHNlIFRvdGFsIG51bWJlciBvZiBjb25uZWN0aW9ucyBpbiB0aGUgZW50aXJlIG5ldHdvcmssIG9yIGZhbHNlIG9uIGVycm9yCiAqLwpmdW5jdGlvbiBmYW5uX2dldF90b3RhbF9jb25uZWN0aW9ucygkYW5uKSB7fQoKLyoqCiAqIEdldCB0aGUgdG90YWwgbnVtYmVyIG9mIG5ldXJvbnMgaW4gdGhlIGVudGlyZSBuZXR3b3JrCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gaW50fGZhbHNlIFRvdGFsIG51bWJlciBvZiBuZXVyb25zIGluIHRoZSBlbnRpcmUgbmV0d29yaywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2dldF90b3RhbF9uZXVyb25zKCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgZXJyb3IgZnVuY3Rpb24gdXNlZCBkdXJpbmcgdHJhaW5pbmcKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIGNvbnN0YW50LCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X3RyYWluX2Vycm9yX2Z1bmN0aW9uKCRhbm4pIHt9CgovKioKICogUmV0dXJucyB0aGUgdHJhaW5pbmcgYWxnb3JpdGhtCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqCiAqIEByZXR1cm4gaW50fGZhbHNlIGNvbnN0YW50LCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X3RyYWluaW5nX2FsZ29yaXRobSgkYW5uKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIHN0b3AgZnVuY3Rpb24gdXNlZCBkdXJpbmcgdHJhaW5pbmcKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICoKICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIGNvbnN0YW50LCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fZ2V0X3RyYWluX3N0b3BfZnVuY3Rpb24oJGFubikge30KCi8qKgogKiBJbml0aWFsaXplIHRoZSB3ZWlnaHRzIHVzaW5nIFdpZHJvdyArIE5ndXllbuKAmXMgYWxnb3JpdGhtCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSByZXNvdXJjZSAkdHJhaW5fZGF0YQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5faW5pdF93ZWlnaHRzKCRhbm4sICR0cmFpbl9kYXRhKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0cmFpbmluZyBwYXR0ZXJucyBpbiB0aGUgdHJhaW4gZGF0YQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGRhdGEKICoKICogQHJldHVybiBpbnR8ZmFsc2UgTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0cmFpbiBkYXRhIGBgcmVzb3VyY2VgYCwgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX2xlbmd0aF90cmFpbl9kYXRhKCRkYXRhKSB7fQoKLyoqCiAqIE1lcmdlcyB0aGUgdHJhaW4gZGF0YQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGRhdGExCiAqIEBwYXJhbSByZXNvdXJjZSAkZGF0YTIKICoKICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBOZXcgbWVyZ2VkIHRyYWluIGRhdGEgYGByZXNvdXJjZWBgLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fbWVyZ2VfdHJhaW5fZGF0YSgkZGF0YTEsICRkYXRhMikge30KCi8qKgogKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaW5wdXRzIGluIGVhY2ggb2YgdGhlIHRyYWluaW5nIHBhdHRlcm5zIGluIHRoZSB0cmFpbiBkYXRhCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZGF0YQogKgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIGlucHV0cywgb3IgZmFsc2Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBmYW5uX251bV9pbnB1dF90cmFpbl9kYXRhKCRkYXRhKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBvdXRwdXRzIGluIGVhY2ggb2YgdGhlIHRyYWluaW5nIHBhdHRlcm5zIGluIHRoZSB0cmFpbiBkYXRhCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZGF0YQogKgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIG91dHB1dHMsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl9udW1fb3V0cHV0X3RyYWluX2RhdGEoJGRhdGEpIHt9CgovKioKICogUHJpbnRzIHRoZSBlcnJvciBzdHJpbmcKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmFubi1wcmludC1lcnJvci5waHAKICoKICogQHBhcmFtIHJlc291cmNlICRlcnJkYXQKICoKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBmYW5uX3ByaW50X2Vycm9yKCRlcnJkYXQpIHt9CgovKioKICogR2l2ZSBlYWNoIGNvbm5lY3Rpb24gYSByYW5kb20gd2VpZ2h0IGJldHdlZW4gbWluX3dlaWdodCBhbmQgbWF4X3dlaWdodAogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gZmxvYXQgJG1pbl93ZWlnaHQKICogQHBhcmFtIGZsb2F0ICRtYXhfd2VpZ2h0CiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9yYW5kb21pemVfd2VpZ2h0cygkYW5uLCAkbWluX3dlaWdodCwgJG1heF93ZWlnaHQpIHt9CgovKioKICogUmVhZHMgYSBmaWxlIHRoYXQgc3RvcmVzIHRyYWluaW5nIGRhdGEKICoKICoKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICoKICogQHJldHVybiByZXNvdXJjZXxmYWxzZQogKi8KZnVuY3Rpb24gZmFubl9yZWFkX3RyYWluX2Zyb21fZmlsZSgkZmlsZW5hbWUpIHt9CgovKioKICogUmVzZXRzIHRoZSBsYXN0IGVycm9yIG51bWJlcgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGVycmRhdAogKgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIGZhbm5fcmVzZXRfZXJybm8oJGVycmRhdCkge30KCi8qKgogKiBSZXNldHMgdGhlIGxhc3QgZXJyb3Igc3RyaW5nCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXJyZGF0CiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gZmFubl9yZXNldF9lcnJzdHIoJGVycmRhdCkge30KCi8qKgogKiBSZXNldHMgdGhlIG1lYW4gc3F1YXJlIGVycm9yIGZyb20gdGhlIG5ldHdvcmsKICoKICoKICogQHBhcmFtIHN0cmluZyAkYW5uCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9yZXNldF9NU0UoJGFubikge30KCi8qKgogKiBXaWxsIHJ1biBpbnB1dCB0aHJvdWdoIHRoZSBuZXVyYWwgbmV0d29yawogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gYXJyYXkgJGlucHV0CiAqCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgQXJyYXkgb2Ygb3V0cHV0IHZhbHVlcywgb3IgZmFsc2Ugb24gZXJyb3IKICovCmZ1bmN0aW9uIGZhbm5fcnVuKCRhbm4sICRpbnB1dCkge30KCi8qKgogKiBTYXZlcyB0aGUgZW50aXJlIG5ldHdvcmsgdG8gYSBjb25maWd1cmF0aW9uIGZpbGUKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIHN0cmluZyAkY29uZmlndXJhdGlvbl9maWxlCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zYXZlKCRhbm4sICRjb25maWd1cmF0aW9uX2ZpbGUpIHt9CgovKioKICogU2F2ZSB0aGUgdHJhaW5pbmcgc3RydWN0dXJlIHRvIGEgZmlsZQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGRhdGEKICogQHBhcmFtIHN0cmluZyAkZmlsZV9uYW1lCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zYXZlX3RyYWluKCRkYXRhLCAkZmlsZV9uYW1lKSB7fQoKLyoqCiAqIFNjYWxlIGRhdGEgaW4gaW5wdXQgdmVjdG9yIGJlZm9yZSBmZWVkIGl0IHRvIGFubiBiYXNlZCBvbiBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgcGFyYW1ldGVycwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gYXJyYXkgJGlucHV0X3ZlY3RvcgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2NhbGVfaW5wdXQoJGFubiwgJGlucHV0X3ZlY3Rvcikge30KCi8qKgogKiBTY2FsZXMgdGhlIGlucHV0cyBpbiB0aGUgdHJhaW5pbmcgZGF0YSB0byB0aGUgc3BlY2lmaWVkIHJhbmdlCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkdHJhaW5fZGF0YQogKiBAcGFyYW0gZmxvYXQgJG5ld19taW4KICogQHBhcmFtIGZsb2F0ICRuZXdfbWF4CiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zY2FsZV9pbnB1dF90cmFpbl9kYXRhKCR0cmFpbl9kYXRhLCAkbmV3X21pbiwgJG5ld19tYXgpIHt9CgovKioKICogU2NhbGUgZGF0YSBpbiBvdXRwdXQgdmVjdG9yIGJlZm9yZSBmZWVkIGl0IHRvIGFubiBiYXNlZCBvbiBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgcGFyYW1ldGVycwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gYXJyYXkgJG91dHB1dF92ZWN0b3IKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NjYWxlX291dHB1dCgkYW5uLCAkb3V0cHV0X3ZlY3Rvcikge30KCi8qKgogKiBTY2FsZXMgdGhlIG91dHB1dHMgaW4gdGhlIHRyYWluaW5nIGRhdGEgdG8gdGhlIHNwZWNpZmllZCByYW5nZQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHRyYWluX2RhdGEKICogQHBhcmFtIGZsb2F0ICRuZXdfbWluCiAqIEBwYXJhbSBmbG9hdCAkbmV3X21heAogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2NhbGVfb3V0cHV0X3RyYWluX2RhdGEoJHRyYWluX2RhdGEsICRuZXdfbWluLCAkbmV3X21heCkge30KCi8qKgogKiBTY2FsZXMgdGhlIGlucHV0cyBhbmQgb3V0cHV0cyBpbiB0aGUgdHJhaW5pbmcgZGF0YSB0byB0aGUgc3BlY2lmaWVkIHJhbmdlCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkdHJhaW5fZGF0YQogKiBAcGFyYW0gZmxvYXQgJG5ld19taW4KICogQHBhcmFtIGZsb2F0ICRuZXdfbWF4CiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zY2FsZV90cmFpbl9kYXRhKCR0cmFpbl9kYXRhLCAkbmV3X21pbiwgJG5ld19tYXgpIHt9CgovKioKICogU2NhbGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIGJhc2VkIG9uIHByZXZpb3VzbHkgY2FsY3VsYXRlZCBwYXJhbWV0ZXJzCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSByZXNvdXJjZSAkdHJhaW5fZGF0YQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2NhbGVfdHJhaW4oJGFubiwgJHRyYWluX2RhdGEpIHt9CgovKioKICogU2V0cyB0aGUgYWN0aXZhdGlvbiBmdW5jdGlvbiBmb3IgYWxsIG9mIHRoZSBoaWRkZW4gbGF5ZXJzCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBpbnQgJGFjdGl2YXRpb25fZnVuY3Rpb24KICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9hY3RpdmF0aW9uX2Z1bmN0aW9uX2hpZGRlbigkYW5uLCAkYWN0aXZhdGlvbl9mdW5jdGlvbikge30KCi8qKgogKiBTZXRzIHRoZSBhY3RpdmF0aW9uIGZ1bmN0aW9uIGZvciBhbGwgdGhlIG5ldXJvbnMgaW4gdGhlIHN1cHBsaWVkIGxheWVyLgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gaW50ICRhY3RpdmF0aW9uX2Z1bmN0aW9uCiAqIEBwYXJhbSBpbnQgJGxheWVyCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zZXRfYWN0aXZhdGlvbl9mdW5jdGlvbl9sYXllcigkYW5uLCAkYWN0aXZhdGlvbl9mdW5jdGlvbiwgJGxheWVyKSB7fQoKLyoqCiAqIFNldHMgdGhlIGFjdGl2YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBvdXRwdXQgbGF5ZXIKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGludCAkYWN0aXZhdGlvbl9mdW5jdGlvbgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X2FjdGl2YXRpb25fZnVuY3Rpb25fb3V0cHV0KCRhbm4sICRhY3RpdmF0aW9uX2Z1bmN0aW9uKSB7fQoKLyoqCiAqIFNldHMgdGhlIGFjdGl2YXRpb24gZnVuY3Rpb24gZm9yIHN1cHBsaWVkIG5ldXJvbiBhbmQgbGF5ZXIKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGludCAkYWN0aXZhdGlvbl9mdW5jdGlvbgogKiBAcGFyYW0gaW50ICRsYXllcgogKiBAcGFyYW0gaW50ICRuZXVyb24KICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9hY3RpdmF0aW9uX2Z1bmN0aW9uKCRhbm4sICRhY3RpdmF0aW9uX2Z1bmN0aW9uLCAkbGF5ZXIsICRuZXVyb24pIHt9CgovKioKICogU2V0cyB0aGUgc3RlZXBuZXNzIG9mIHRoZSBhY3RpdmF0aW9uIHN0ZWVwbmVzcyBmb3IgYWxsIG5ldXJvbnMgaW4gdGhlIGFsbCBoaWRkZW4gbGF5ZXJzCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBmbG9hdCAkYWN0aXZhdGlvbl9zdGVlcG5lc3MKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9hY3RpdmF0aW9uX3N0ZWVwbmVzc19oaWRkZW4oJGFubiwgJGFjdGl2YXRpb25fc3RlZXBuZXNzKSB7fQoKLyoqCiAqIFNldHMgdGhlIGFjdGl2YXRpb24gc3RlZXBuZXNzIGZvciBhbGwgb2YgdGhlIG5ldXJvbnMgaW4gdGhlIHN1cHBsaWVkIGxheWVyIG51bWJlcgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gZmxvYXQgJGFjdGl2YXRpb25fc3RlZXBuZXNzCiAqIEBwYXJhbSBpbnQgJGxheWVyCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zZXRfYWN0aXZhdGlvbl9zdGVlcG5lc3NfbGF5ZXIoJGFubiwgJGFjdGl2YXRpb25fc3RlZXBuZXNzLCAkbGF5ZXIpIHt9CgovKioKICogU2V0cyB0aGUgc3RlZXBuZXNzIG9mIHRoZSBhY3RpdmF0aW9uIHN0ZWVwbmVzcyBpbiB0aGUgb3V0cHV0IGxheWVyCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBmbG9hdCAkYWN0aXZhdGlvbl9zdGVlcG5lc3MKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9hY3RpdmF0aW9uX3N0ZWVwbmVzc19vdXRwdXQoJGFubiwgJGFjdGl2YXRpb25fc3RlZXBuZXNzKSB7fQoKLyoqCiAqIFNldHMgdGhlIGFjdGl2YXRpb24gc3RlZXBuZXNzIGZvciBzdXBwbGllZCBuZXVyb24gYW5kIGxheWVyIG51bWJlcgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gZmxvYXQgJGFjdGl2YXRpb25fc3RlZXBuZXNzCiAqIEBwYXJhbSBpbnQgJGxheWVyCiAqIEBwYXJhbSBpbnQgJG5ldXJvbgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X2FjdGl2YXRpb25fc3RlZXBuZXNzKCRhbm4sICRhY3RpdmF0aW9uX3N0ZWVwbmVzcywgJGxheWVyLCAkbmV1cm9uKSB7fQoKLyoqCiAqIFNldCB0aGUgYml0IGZhaWwgbGltaXQgdXNlZCBkdXJpbmcgdHJhaW5pbmcKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGZsb2F0ICRiaXRfZmFpbF9saW1pdAogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X2JpdF9mYWlsX2xpbWl0KCRhbm4sICRiaXRfZmFpbF9saW1pdCkge30KCi8qKgogKiBTZXRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdXNlIGR1cmluZyB0cmFpbmluZwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zZXRfY2FsbGJhY2soJGFubiwgJGNhbGxiYWNrKSB7fQoKLyoqCiAqIFNldHMgdGhlIGFycmF5IG9mIGNhc2NhZGUgY2FuZGlkYXRlIGFjdGl2YXRpb24gZnVuY3Rpb25zCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBhcnJheSAkY2FzY2FkZV9hY3RpdmF0aW9uX2Z1bmN0aW9ucwogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X2Nhc2NhZGVfYWN0aXZhdGlvbl9mdW5jdGlvbnMoJGFubiwgJGNhc2NhZGVfYWN0aXZhdGlvbl9mdW5jdGlvbnMpIHt9CgovKioKICogU2V0cyB0aGUgYXJyYXkgb2YgY2FzY2FkZSBjYW5kaWRhdGUgYWN0aXZhdGlvbiBzdGVlcG5lc3NlcwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gYXJyYXkgJGNhc2NhZGVfYWN0aXZhdGlvbl9zdGVlcG5lc3Nlc19jb3VudAogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X2Nhc2NhZGVfYWN0aXZhdGlvbl9zdGVlcG5lc3NlcygkYW5uLCAkY2FzY2FkZV9hY3RpdmF0aW9uX3N0ZWVwbmVzc2VzX2NvdW50KSB7fQoKLyoqCiAqIFNldHMgdGhlIGNhc2NhZGUgY2FuZGlkYXRlIGNoYW5nZSBmcmFjdGlvbgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gZmxvYXQgJGNhc2NhZGVfY2FuZGlkYXRlX2NoYW5nZV9mcmFjdGlvbgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X2Nhc2NhZGVfY2FuZGlkYXRlX2NoYW5nZV9mcmFjdGlvbigkYW5uLCAkY2FzY2FkZV9jYW5kaWRhdGVfY2hhbmdlX2ZyYWN0aW9uKSB7fQoKLyoqCiAqIFNldHMgdGhlIGNhbmRpZGF0ZSBsaW1pdAogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gZmxvYXQgJGNhc2NhZGVfY2FuZGlkYXRlX2xpbWl0CiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zZXRfY2FzY2FkZV9jYW5kaWRhdGVfbGltaXQoJGFubiwgJGNhc2NhZGVfY2FuZGlkYXRlX2xpbWl0KSB7fQoKLyoqCiAqIFNldHMgdGhlIG51bWJlciBvZiBjYXNjYWRlIGNhbmRpZGF0ZSBzdGFnbmF0aW9uIGVwb2NocwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gaW50ICRjYXNjYWRlX2NhbmRpZGF0ZV9zdGFnbmF0aW9uX2Vwb2NocwogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X2Nhc2NhZGVfY2FuZGlkYXRlX3N0YWduYXRpb25fZXBvY2hzKCRhbm4sICRjYXNjYWRlX2NhbmRpZGF0ZV9zdGFnbmF0aW9uX2Vwb2Nocykge30KCi8qKgogKiBTZXRzIHRoZSBtYXggY2FuZGlkYXRlIGVwb2NocwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gaW50ICRjYXNjYWRlX21heF9jYW5kX2Vwb2NocwogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X2Nhc2NhZGVfbWF4X2NhbmRfZXBvY2hzKCRhbm4sICRjYXNjYWRlX21heF9jYW5kX2Vwb2Nocykge30KCi8qKgogKiBTZXRzIHRoZSBtYXhpbXVtIG91dCBlcG9jaHMKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGludCAkY2FzY2FkZV9tYXhfb3V0X2Vwb2NocwogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X2Nhc2NhZGVfbWF4X291dF9lcG9jaHMoJGFubiwgJGNhc2NhZGVfbWF4X291dF9lcG9jaHMpIHt9CgovKioKICogU2V0cyB0aGUgbWluIGNhbmRpZGF0ZSBlcG9jaHMKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGludCAkY2FzY2FkZV9taW5fY2FuZF9lcG9jaHMKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9jYXNjYWRlX21pbl9jYW5kX2Vwb2NocygkYW5uLCAkY2FzY2FkZV9taW5fY2FuZF9lcG9jaHMpIHt9CgovKioKICogU2V0cyB0aGUgbWluaW11bSBvdXQgZXBvY2hzCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBpbnQgJGNhc2NhZGVfbWluX291dF9lcG9jaHMKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9jYXNjYWRlX21pbl9vdXRfZXBvY2hzKCRhbm4sICRjYXNjYWRlX21pbl9vdXRfZXBvY2hzKSB7fQoKLyoqCiAqIFNldHMgdGhlIG51bWJlciBvZiBjYW5kaWRhdGUgZ3JvdXBzCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBpbnQgJGNhc2NhZGVfbnVtX2NhbmRpZGF0ZV9ncm91cHMKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9jYXNjYWRlX251bV9jYW5kaWRhdGVfZ3JvdXBzKCRhbm4sICRjYXNjYWRlX251bV9jYW5kaWRhdGVfZ3JvdXBzKSB7fQoKLyoqCiAqIFNldHMgdGhlIGNhc2NhZGUgb3V0cHV0IGNoYW5nZSBmcmFjdGlvbgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gZmxvYXQgJGNhc2NhZGVfb3V0cHV0X2NoYW5nZV9mcmFjdGlvbgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X2Nhc2NhZGVfb3V0cHV0X2NoYW5nZV9mcmFjdGlvbigkYW5uLCAkY2FzY2FkZV9vdXRwdXRfY2hhbmdlX2ZyYWN0aW9uKSB7fQoKLyoqCiAqIFNldHMgdGhlIG51bWJlciBvZiBjYXNjYWRlIG91dHB1dCBzdGFnbmF0aW9uIGVwb2NocwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gaW50ICRjYXNjYWRlX291dHB1dF9zdGFnbmF0aW9uX2Vwb2NocwogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X2Nhc2NhZGVfb3V0cHV0X3N0YWduYXRpb25fZXBvY2hzKCRhbm4sICRjYXNjYWRlX291dHB1dF9zdGFnbmF0aW9uX2Vwb2Nocykge30KCi8qKgogKiBTZXRzIHRoZSB3ZWlnaHQgbXVsdGlwbGllcgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gZmxvYXQgJGNhc2NhZGVfd2VpZ2h0X211bHRpcGxpZXIKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9jYXNjYWRlX3dlaWdodF9tdWx0aXBsaWVyKCRhbm4sICRjYXNjYWRlX3dlaWdodF9tdWx0aXBsaWVyKSB7fQoKLyoqCiAqIFNldHMgd2hlcmUgdGhlIGVycm9ycyBhcmUgbG9nZ2VkIHRvCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkZXJyZGF0CiAqIEBwYXJhbSBzdHJpbmcgJGxvZ19maWxlCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gZmFubl9zZXRfZXJyb3JfbG9nKCRlcnJkYXQsICRsb2dfZmlsZSkge30KCi8qKgogKiBDYWxjdWxhdGUgaW5wdXQgc2NhbGluZyBwYXJhbWV0ZXJzIGZvciBmdXR1cmUgdXNlIGJhc2VkIG9uIHRyYWluaW5nIGRhdGEKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIHJlc291cmNlICR0cmFpbl9kYXRhCiAqIEBwYXJhbSBmbG9hdCAkbmV3X2lucHV0X21pbgogKiBAcGFyYW0gZmxvYXQgJG5ld19pbnB1dF9tYXgKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9pbnB1dF9zY2FsaW5nX3BhcmFtcygkYW5uLCAkdHJhaW5fZGF0YSwgJG5ld19pbnB1dF9taW4sICRuZXdfaW5wdXRfbWF4KSB7fQoKLyoqCiAqIFNldHMgdGhlIGxlYXJuaW5nIG1vbWVudHVtCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBmbG9hdCAkbGVhcm5pbmdfbW9tZW50dW0KICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9sZWFybmluZ19tb21lbnR1bSgkYW5uLCAkbGVhcm5pbmdfbW9tZW50dW0pIHt9CgovKioKICogU2V0cyB0aGUgbGVhcm5pbmcgcmF0ZQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gZmxvYXQgJGxlYXJuaW5nX3JhdGUKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9sZWFybmluZ19yYXRlKCRhbm4sICRsZWFybmluZ19yYXRlKSB7fQoKLyoqCiAqIENhbGN1bGF0ZSBvdXRwdXQgc2NhbGluZyBwYXJhbWV0ZXJzIGZvciBmdXR1cmUgdXNlIGJhc2VkIG9uIHRyYWluaW5nIGRhdGEKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIHJlc291cmNlICR0cmFpbl9kYXRhCiAqIEBwYXJhbSBmbG9hdCAkbmV3X291dHB1dF9taW4KICogQHBhcmFtIGZsb2F0ICRuZXdfb3V0cHV0X21heAogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X291dHB1dF9zY2FsaW5nX3BhcmFtcygkYW5uLCAkdHJhaW5fZGF0YSwgJG5ld19vdXRwdXRfbWluLCAkbmV3X291dHB1dF9tYXgpIHt9CgovKioKICogU2V0cyB0aGUgcXVpY2twcm9wIGRlY2F5IGZhY3RvcgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gZmxvYXQgJHF1aWNrcHJvcF9kZWNheQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X3F1aWNrcHJvcF9kZWNheSgkYW5uLCAkcXVpY2twcm9wX2RlY2F5KSB7fQoKLyoqCiAqIFNldHMgdGhlIHF1aWNrcHJvcCBtdSBmYWN0b3IKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGZsb2F0ICRxdWlja3Byb3BfbXUKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9xdWlja3Byb3BfbXUoJGFubiwgJHF1aWNrcHJvcF9tdSkge30KCi8qKgogKiBTZXRzIHRoZSBkZWNyZWFzZSBmYWN0b3IgdXNlZCBkdXJpbmcgUlBST1AgdHJhaW5pbmcKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGZsb2F0ICRycHJvcF9kZWNyZWFzZV9mYWN0b3IKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9ycHJvcF9kZWNyZWFzZV9mYWN0b3IoJGFubiwgJHJwcm9wX2RlY3JlYXNlX2ZhY3Rvcikge30KCi8qKgogKiBTZXRzIHRoZSBtYXhpbXVtIHN0ZXAtc2l6ZQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gZmxvYXQgJHJwcm9wX2RlbHRhX21heAogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X3Jwcm9wX2RlbHRhX21heCgkYW5uLCAkcnByb3BfZGVsdGFfbWF4KSB7fQoKLyoqCiAqIFNldHMgdGhlIG1pbmltdW0gc3RlcC1zaXplCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBmbG9hdCAkcnByb3BfZGVsdGFfbWluCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zZXRfcnByb3BfZGVsdGFfbWluKCRhbm4sICRycHJvcF9kZWx0YV9taW4pIHt9CgovKioKICogU2V0cyB0aGUgaW5pdGlhbCBzdGVwLXNpemUKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGZsb2F0ICRycHJvcF9kZWx0YV96ZXJvCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zZXRfcnByb3BfZGVsdGFfemVybygkYW5uLCAkcnByb3BfZGVsdGFfemVybykge30KCi8qKgogKiBTZXRzIHRoZSBpbmNyZWFzZSBmYWN0b3IgdXNlZCBkdXJpbmcgUlBST1AgdHJhaW5pbmcKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGZsb2F0ICRycHJvcF9pbmNyZWFzZV9mYWN0b3IKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9ycHJvcF9pbmNyZWFzZV9mYWN0b3IoJGFubiwgJHJwcm9wX2luY3JlYXNlX2ZhY3Rvcikge30KCi8qKgogKiBTZXRzIHRoZSBzYXJwcm9wIHN0ZXAgZXJyb3Igc2hpZnQKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGZsb2F0ICRzYXJwcm9wX3N0ZXBfZXJyb3Jfc2hpZnQKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF9zYXJwcm9wX3N0ZXBfZXJyb3Jfc2hpZnQoJGFubiwgJHNhcnByb3Bfc3RlcF9lcnJvcl9zaGlmdCkge30KCi8qKgogKiBTZXRzIHRoZSBzYXJwcm9wIHN0ZXAgZXJyb3IgdGhyZXNob2xkIGZhY3RvcgogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gZmxvYXQgJHNhcnByb3Bfc3RlcF9lcnJvcl90aHJlc2hvbGRfZmFjdG9yCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zZXRfc2FycHJvcF9zdGVwX2Vycm9yX3RocmVzaG9sZF9mYWN0b3IoJGFubiwgJHNhcnByb3Bfc3RlcF9lcnJvcl90aHJlc2hvbGRfZmFjdG9yKSB7fQoKLyoqCiAqIFNldHMgdGhlIHNhcnByb3AgdGVtcGVyYXR1cmUKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGZsb2F0ICRzYXJwcm9wX3RlbXBlcmF0dXJlCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zZXRfc2FycHJvcF90ZW1wZXJhdHVyZSgkYW5uLCAkc2FycHJvcF90ZW1wZXJhdHVyZSkge30KCi8qKgogKiBTZXRzIHRoZSBzYXJwcm9wIHdlaWdodCBkZWNheSBzaGlmdAogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gZmxvYXQgJHNhcnByb3Bfd2VpZ2h0X2RlY2F5X3NoaWZ0CiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zZXRfc2FycHJvcF93ZWlnaHRfZGVjYXlfc2hpZnQoJGFubiwgJHNhcnByb3Bfd2VpZ2h0X2RlY2F5X3NoaWZ0KSB7fQoKLyoqCiAqIENhbGN1bGF0ZSBpbnB1dCBhbmQgb3V0cHV0IHNjYWxpbmcgcGFyYW1ldGVycyBmb3IgZnV0dXJlIHVzZSBiYXNlZCBvbiB0cmFpbmluZyBkYXRhCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSByZXNvdXJjZSAkdHJhaW5fZGF0YQogKiBAcGFyYW0gZmxvYXQgJG5ld19pbnB1dF9taW4KICogQHBhcmFtIGZsb2F0ICRuZXdfaW5wdXRfbWF4CiAqIEBwYXJhbSBmbG9hdCAkbmV3X291dHB1dF9taW4KICogQHBhcmFtIGZsb2F0ICRuZXdfb3V0cHV0X21heAogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X3NjYWxpbmdfcGFyYW1zKCRhbm4sICR0cmFpbl9kYXRhLCAkbmV3X2lucHV0X21pbiwgJG5ld19pbnB1dF9tYXgsICRuZXdfb3V0cHV0X21pbiwgJG5ld19vdXRwdXRfbWF4KSB7fQoKLyoqCiAqIFNldHMgdGhlIGVycm9yIGZ1bmN0aW9uIHVzZWQgZHVyaW5nIHRyYWluaW5nCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBpbnQgJGVycm9yX2Z1bmN0aW9uCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zZXRfdHJhaW5fZXJyb3JfZnVuY3Rpb24oJGFubiwgJGVycm9yX2Z1bmN0aW9uKSB7fQoKLyoqCiAqIFNldHMgdGhlIHRyYWluaW5nIGFsZ29yaXRobQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gaW50ICR0cmFpbmluZ19hbGdvcml0aG0KICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF90cmFpbmluZ19hbGdvcml0aG0oJGFubiwgJHRyYWluaW5nX2FsZ29yaXRobSkge30KCi8qKgogKiBTZXRzIHRoZSBzdG9wIGZ1bmN0aW9uIHVzZWQgZHVyaW5nIHRyYWluaW5nCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBpbnQgJHN0b3BfZnVuY3Rpb24KICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3NldF90cmFpbl9zdG9wX2Z1bmN0aW9uKCRhbm4sICRzdG9wX2Z1bmN0aW9uKSB7fQoKLyoqCiAqIFNldCBjb25uZWN0aW9ucyBpbiB0aGUgbmV0d29yawogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gYXJyYXkgJGNvbm5lY3Rpb25zCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl9zZXRfd2VpZ2h0X2FycmF5KCRhbm4sICRjb25uZWN0aW9ucykge30KCi8qKgogKiBTZXQgYSBjb25uZWN0aW9uIGluIHRoZSBuZXR3b3JrCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBpbnQgJGZyb21fbmV1cm9uCiAqIEBwYXJhbSBpbnQgJHRvX25ldXJvbgogKiBAcGFyYW0gZmxvYXQgJHdlaWdodAogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2V0X3dlaWdodCgkYW5uLCAkZnJvbV9uZXVyb24sICR0b19uZXVyb24sICR3ZWlnaHQpIHt9CgovKioKICogU2h1ZmZsZXMgdHJhaW5pbmcgZGF0YSwgcmFuZG9taXppbmcgdGhlIG9yZGVyCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkdHJhaW5fZGF0YQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGZhbm5fc2h1ZmZsZV90cmFpbl9kYXRhKCR0cmFpbl9kYXRhKSB7fQoKLyoqCiAqIFJldHVybnMgYW4gY29weSBvZiBhIHN1YnNldCBvZiB0aGUgdHJhaW4gZGF0YQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGRhdGEKICogQHBhcmFtIGludCAkcG9zCiAqIEBwYXJhbSBpbnQgJGxlbmd0aAogKgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlCiAqLwpmdW5jdGlvbiBmYW5uX3N1YnNldF90cmFpbl9kYXRhKCRkYXRhLCAkcG9zLCAkbGVuZ3RoKSB7fQoKLyoqCiAqIFRlc3QgYSBzZXQgb2YgdHJhaW5pbmcgZGF0YSBhbmQgY2FsY3VsYXRlcyB0aGUgTVNFIGZvciB0aGUgdHJhaW5pbmcgZGF0YQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gcmVzb3VyY2UgJGRhdGEKICoKICogQHJldHVybiBmbG9hdHxmYWxzZSBUaGUgdXBkYXRlZCBNU0UsIG9yIGZhbHNlIG9uIGVycm9yLgogKi8KZnVuY3Rpb24gZmFubl90ZXN0X2RhdGEoJGFubiwgJGRhdGEpIHt9CgovKioKICogVGVzdCB3aXRoIGEgc2V0IG9mIGlucHV0cywgYW5kIGEgc2V0IG9mIGRlc2lyZWQgb3V0cHV0cwogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gYXJyYXkgJGlucHV0CiAqIEBwYXJhbSBhcnJheSAkZGVzaXJlZF9vdXRwdXQKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3Rlc3QoJGFubiwgJGlucHV0LCAkZGVzaXJlZF9vdXRwdXQpIHt9CgovKioKICogVHJhaW4gb25lIGVwb2NoIHdpdGggYSBzZXQgb2YgdHJhaW5pbmcgZGF0YQogKgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGFubgogKiBAcGFyYW0gcmVzb3VyY2UgJGRhdGEKICoKICogQHJldHVybiBmbG9hdHxmYWxzZSBUaGUgTVNFLCBvciBmYWxzZSBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGZhbm5fdHJhaW5fZXBvY2goJGFubiwgJGRhdGEpIHt9CgovKioKICogVHJhaW5zIG9uIGFuIGVudGlyZSBkYXRhc2V0IGZvciBhIHBlcmlvZCBvZiB0aW1lCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSByZXNvdXJjZSAkZGF0YQogKiBAcGFyYW0gaW50ICRtYXhfZXBvY2hzCiAqIEBwYXJhbSBpbnQgJGVwb2Noc19iZXR3ZWVuX3JlcG9ydHMKICogQHBhcmFtIGZsb2F0ICRkZXNpcmVkX2Vycm9yCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl90cmFpbl9vbl9kYXRhKCRhbm4sICRkYXRhLCAkbWF4X2Vwb2NocywgJGVwb2Noc19iZXR3ZWVuX3JlcG9ydHMsICRkZXNpcmVkX2Vycm9yKSB7fQoKLyoqCiAqIFRyYWlucyBvbiBhbiBlbnRpcmUgZGF0YXNldCwgd2hpY2ggaXMgcmVhZCBmcm9tIGZpbGUsIGZvciBhIHBlcmlvZCBvZiB0aW1lCiAqCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkYW5uCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEBwYXJhbSBpbnQgJG1heF9lcG9jaHMKICogQHBhcmFtIGludCAkZXBvY2hzX2JldHdlZW5fcmVwb3J0cwogKiBAcGFyYW0gZmxvYXQgJGRlc2lyZWRfZXJyb3IKICoKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBmYW5uX3RyYWluX29uX2ZpbGUoJGFubiwgJGZpbGVuYW1lLCAkbWF4X2Vwb2NocywgJGVwb2Noc19iZXR3ZWVuX3JlcG9ydHMsICRkZXNpcmVkX2Vycm9yKSB7fQoKLyoqCiAqIFRyYWluIG9uZSBpdGVyYXRpb24gd2l0aCBhIHNldCBvZiBpbnB1dHMsIGFuZCBhIHNldCBvZiBkZXNpcmVkIG91dHB1dHMKICoKICoKICogQHBhcmFtIHJlc291cmNlICRhbm4KICogQHBhcmFtIGFycmF5ICRpbnB1dAogKiBAcGFyYW0gYXJyYXkgJGRlc2lyZWRfb3V0cHV0CiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gZmFubl90cmFpbigkYW5uLCAkaW5wdXQsICRkZXNpcmVkX291dHB1dCkge30KCmRlZmluZSgnRkFOTl9UUkFJTl9JTkNSRU1FTlRBTCcsIDApOwpkZWZpbmUoJ0ZBTk5fVFJBSU5fQkFUQ0gnLCAxKTsKZGVmaW5lKCdGQU5OX1RSQUlOX1JQUk9QJywgMik7CmRlZmluZSgnRkFOTl9UUkFJTl9RVUlDS1BST1AnLCAzKTsKZGVmaW5lKCdGQU5OX1RSQUlOX1NBUlBST1AnLCA0KTsKZGVmaW5lKCdGQU5OX0xJTkVBUicsIDApOwpkZWZpbmUoJ0ZBTk5fVEhSRVNIT0xEJywgMSk7CmRlZmluZSgnRkFOTl9USFJFU0hPTERfU1lNTUVUUklDJywgMik7CmRlZmluZSgnRkFOTl9TSUdNT0lEJywgMyk7CmRlZmluZSgnRkFOTl9TSUdNT0lEX1NURVBXSVNFJywgNCk7CmRlZmluZSgnRkFOTl9TSUdNT0lEX1NZTU1FVFJJQycsIDUpOwpkZWZpbmUoJ0ZBTk5fU0lHTU9JRF9TWU1NRVRSSUNfU1RFUFdJU0UnLCA2KTsKZGVmaW5lKCdGQU5OX0dBVVNTSUFOJywgNyk7CmRlZmluZSgnRkFOTl9HQVVTU0lBTl9TWU1NRVRSSUMnLCA4KTsKZGVmaW5lKCdGQU5OX0dBVVNTSUFOX1NURVBXSVNFJywgOSk7CmRlZmluZSgnRkFOTl9FTExJT1QnLCAxMCk7CmRlZmluZSgnRkFOTl9FTExJT1RfU1lNTUVUUklDJywgMTEpOwpkZWZpbmUoJ0ZBTk5fTElORUFSX1BJRUNFJywgMTIpOwpkZWZpbmUoJ0ZBTk5fTElORUFSX1BJRUNFX1NZTU1FVFJJQycsIDEzKTsKZGVmaW5lKCdGQU5OX1NJTl9TWU1NRVRSSUMnLCAxNCk7CmRlZmluZSgnRkFOTl9DT1NfU1lNTUVUUklDJywgMTUpOwpkZWZpbmUoJ0ZBTk5fU0lOJywgMTYpOwpkZWZpbmUoJ0ZBTk5fQ09TJywgMTcpOwpkZWZpbmUoJ0ZBTk5fRVJST1JGVU5DX0xJTkVBUicsIDApOwpkZWZpbmUoJ0ZBTk5fRVJST1JGVU5DX1RBTkgnLCAxKTsKZGVmaW5lKCdGQU5OX1NUT1BGVU5DX01TRScsIDApOwpkZWZpbmUoJ0ZBTk5fU1RPUEZVTkNfQklUJywgMSk7CmRlZmluZSgnRkFOTl9ORVRUWVBFX0xBWUVSJywgMCk7CmRlZmluZSgnRkFOTl9ORVRUWVBFX1NIT1JUQ1VUJywgMSk7CmRlZmluZSgnRkFOTl9FX05PX0VSUk9SJywgMCk7CmRlZmluZSgnRkFOTl9FX0NBTlRfT1BFTl9DT05GSUdfUicsIDEpOwpkZWZpbmUoJ0ZBTk5fRV9DQU5UX09QRU5fQ09ORklHX1cnLCAyKTsKZGVmaW5lKCdGQU5OX0VfV1JPTkdfQ09ORklHX1ZFUlNJT04nLCAzKTsKZGVmaW5lKCdGQU5OX0VfQ0FOVF9SRUFEX0NPTkZJRycsIDQpOwpkZWZpbmUoJ0ZBTk5fRV9DQU5UX1JFQURfTkVVUk9OJywgNSk7CmRlZmluZSgnRkFOTl9FX0NBTlRfUkVBRF9DT05ORUNUSU9OUycsIDYpOwpkZWZpbmUoJ0ZBTk5fRV9XUk9OR19OVU1fQ09OTkVDVElPTlMnLCA3KTsKZGVmaW5lKCdGQU5OX0VfQ0FOVF9PUEVOX1REX1cnLCA4KTsKZGVmaW5lKCdGQU5OX0VfQ0FOVF9PUEVOX1REX1InLCA5KTsKZGVmaW5lKCdGQU5OX0VfQ0FOVF9SRUFEX1REJywgMTApOwpkZWZpbmUoJ0ZBTk5fRV9DQU5UX0FMTE9DQVRFX01FTScsIDExKTsKZGVmaW5lKCdGQU5OX0VfQ0FOVF9UUkFJTl9BQ1RJVkFUSU9OJywgMTIpOwpkZWZpbmUoJ0ZBTk5fRV9DQU5UX1VTRV9BQ1RJVkFUSU9OJywgMTMpOwpkZWZpbmUoJ0ZBTk5fRV9UUkFJTl9EQVRBX01JU01BVENIJywgMTQpOwpkZWZpbmUoJ0ZBTk5fRV9DQU5UX1VTRV9UUkFJTl9BTEcnLCAxNSk7CmRlZmluZSgnRkFOTl9FX1RSQUlOX0RBVEFfU1VCU0VUJywgMTYpOwpkZWZpbmUoJ0ZBTk5fRV9JTkRFWF9PVVRfT0ZfQk9VTkQnLCAxNyk7CmRlZmluZSgnRkFOTl9FX1NDQUxFX05PVF9QUkVTRU5UJywgMTgpOwpkZWZpbmUoJ0ZBTk5fRV9JTlBVVF9OT19NQVRDSCcsIDE5KTsKZGVmaW5lKCdGQU5OX0VfT1VUUFVUX05PX01BVENIJywgMjApOwoKZGVmaW5lKCdGQU5OX1ZFUlNJT04nLCAnMi4yJyk7Ci8vIEVuZCBvZiBGYW5uIHYuMS4wCjw/cGhwCgovLyBTdGFydCBvZiB1b3B6IHY1LjAuMgoKLyoqCiAqIE1hcmsgZnVuY3Rpb24gYXMgcHVibGljLCB0aGUgZGVmYXVsdAogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi91b3B6LmNvbnN0YW50cy5waHAjY29uc3RhbnQuemVuZC1hY2MtcHVibGljCiAqLwpkZWZpbmUoJ1pFTkRfQUNDX1BVQkxJQycsIDEpOwoKLyoqCiAqIE1hcmsgZnVuY3Rpb24gYXMgcHJvdGVjdGVkCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3VvcHouY29uc3RhbnRzLnBocCNjb25zdGFudC56ZW5kLWFjYy1wcm90ZWN0ZWQKICovCmRlZmluZSgnWkVORF9BQ0NfUFJPVEVDVEVEJywgMik7CgovKioKICogTWFyayBmdW5jdGlvbiBhcyBwcml2YXRlCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3VvcHouY29uc3RhbnRzLnBocCNjb25zdGFudC56ZW5kLWFjYy1wcml2YXRlCiAqLwpkZWZpbmUoJ1pFTkRfQUNDX1BSSVZBVEUnLCA0KTsKCi8qKgogKiBNYXJrIGZ1bmN0aW9uIGFzIHN0YXRpYwogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi91b3B6LmNvbnN0YW50cy5waHAjY29uc3RhbnQuemVuZC1hY2Mtc3RhdGljCiAqLwpkZWZpbmUoJ1pFTkRfQUNDX1NUQVRJQycsIDE2KTsKCi8qKgogKiBNYXJrIGZ1bmN0aW9uIGFzIGZpbmFsCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3VvcHouY29uc3RhbnRzLnBocCNjb25zdGFudC56ZW5kLWFjYy1maW5hbAogKi8KZGVmaW5lKCdaRU5EX0FDQ19GSU5BTCcsIDMyKTsKCi8qKgogKiBNYXJrIGZ1bmN0aW9uIGFzIGFic3RyYWN0CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3VvcHouY29uc3RhbnRzLnBocCNjb25zdGFudC56ZW5kLWFjYy1hYnN0cmFjdAogKi8KZGVmaW5lKCdaRU5EX0FDQ19BQlNUUkFDVCcsIDY0KTsKCi8qKgogKiBVc2VkIGZvciBnZXR0aW5nIGZsYWdzIG9ubHkKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vdW9wei5jb25zdGFudHMucGhwI2NvbnN0YW50LnplbmQtYWNjLWZldGNoCiAqLwpkZWZpbmUoJ1pFTkRfQUNDX0ZFVENIJywgUEhQX0lOVF9NQVgpOwoKLyoqCiAqIFRoZSBiaXRtYXNrIG9mIFpFTkRfQUNDX1BVQkxJQyB8IFpFTkRfQUNDX1BST1RFQ1RFRCB8IFpFTkRfQUNDX1BSSVZBVEUKICovCmRlZmluZSgnWkVORF9BQ0NfUFBQX01BU0snLCBaRU5EX0FDQ19QVUJMSUN8WkVORF9BQ0NfUFJPVEVDVEVEfFpFTkRfQUNDX1BSSVZBVEUpOwoKLyoqCiAqIEFkZHMgbm9uLWV4aXN0ZW50IG1ldGhvZAogKiBAbGluayAgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udW9wei1hZGQtZnVuY3Rpb24ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcwogKiBAcGFyYW0gc3RyaW5nICRmdW5jdGlvbiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kCiAqIEBwYXJhbSBDbG9zdXJlICRoYW5kbGVyIFRoZSBDbG9zdXJlIHRoYXQgZGVmaW5lcyB0aGUgbmV3IG1ldGhvZAogKiBAcGFyYW0gaW50ICRmbGFncyBGbGFncyB0byBzZXQgZm9yIHRoZSBuZXcgbWV0aG9kCiAqIEBwYXJhbSBib29sICRhbGwgV2hldGhlciBhbGwgY2xhc3NlcyB0aGF0IGRlc2NlbmQgZnJvbSBjbGFzcyB3aWxsIGFsc28gYmUgYWZmZWN0ZWQKICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlCiAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgbWV0aG9kIHRvIGFkZCBhbHJlYWR5IGV4aXN0cwogKi8KZnVuY3Rpb24gdW9wel9hZGRfZnVuY3Rpb24oLi4uJGFyZ3VtZW50cyk6IGJvb2wge30KCi8qKgogKiBBbGxvd3MgY29udHJvbCBvdmVyIGRpc2FibGVkIGV4aXQgb3Bjb2RlCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnVvcHotYWxsb3ctZXhpdC5waHAKICogQHBhcmFtIGJvb2wgJGFyZ3VtZW50cyBXaGV0aGVyIHRvIGFsbG93IHRoZSBleGVjdXRpb24gb2YgZXhpdCBvcGNvZGVzIG9yIG5vdC4KICogQHJldHVybiB2b2lkCiAqIEBzaW5jZSA1LjQKICovCmZ1bmN0aW9uIHVvcHpfYWxsb3dfZXhpdCguLi4kYXJndW1lbnRzKTogdm9pZCB7fQoKLyoqCiAqIERlbGV0ZXMgcHJldmlvdXNseSBhZGRlZCBtZXRob2QKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udW9wei1kZWwtZnVuY3Rpb24ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcwogKiBAcGFyYW0gc3RyaW5nICRmdW5jdGlvbiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kCiAqIEBwYXJhbSBib29sICRhbGwgV2hldGhlciBhbGwgY2xhc3NlcyB0aGF0IGRlc2NlbmQgZnJvbSBjbGFzcyB3aWxsIGFsc28gYmUgYWZmZWN0ZWQKICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlCiAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgbWV0aG9kIHRvIGRlbGV0ZSBoYXMgbm90IGJlZW4gYWRkZWQgYnkgdW9wel9hZGRfZnVuY3Rpb24oKQogKi8KZnVuY3Rpb24gdW9wel9kZWxfZnVuY3Rpb24oLi4uJGFyZ3VtZW50cyk6IGJvb2wge30KCi8qKgogKiBFeHRlbmQgYSBjbGFzcyBhdCBydW50aW1lCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnVvcHotZXh0ZW5kLnBocAogKiBAcGFyYW0gc3RyaW5nICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gZXh0ZW5kCiAqIEBwYXJhbSBzdHJpbmcgJHBhcmVudCBUaGUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gaW5oZXJpdAogKiBAcmV0dXJuIGJvb2wgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUKICogQHNpbmNlIDUuNAogKi8KZnVuY3Rpb24gdW9wel9leHRlbmQoLi4uJGFyZ3VtZW50cyk6IGJvb2wge30KCi8qKgogKiBHZXQgb3Igc2V0IGZsYWdzIG9uIGZ1bmN0aW9uIG9yIGNsYXNzCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnVvcHotZmxhZ3MucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIFRoZSBuYW1lIG9mIGEgY2xhc3MKICogQHBhcmFtIHN0cmluZyAkZnVuY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uCiAqIEBwYXJhbSBpbnQgJGZsYWdzIEEgdmFsaWQgc2V0IG9mIFpFTkRfQUNDXyBmbGFncywgWkVORF9BQ0NfRkVUQ0ggdG8gcmVhZCBmbGFncwogKiBAcmV0dXJuIGludCBJZiBzZXR0aW5nLCByZXR1cm5zIG9sZCBmbGFncywgZWxzZSByZXR1cm5zIGZsYWdzCiAqIEBzaW5jZSA1LjQKICovCmZ1bmN0aW9uIHVvcHpfZmxhZ3MoLi4uJGFyZ3VtZW50cyk6IGludCB7fQoKLyoqCiAqIFJldHJpZXZlIHRoZSBsYXN0IHNldCBleGl0IHN0YXR1cwogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi51b3B6LWdldC1leGl0LXN0YXR1cy5waHAKICogQHJldHVybiBpbnR8bnVsbCBUaGUgbGFzdCBleGl0IHN0YXR1cywgb3IgTlVMTCBpZiBleGl0KCkgaGFzIG5vdCBiZWVuIGNhbGxlZAogKiBAc2luY2UgNS40CiAqLwpmdW5jdGlvbiB1b3B6X2dldF9leGl0X3N0YXR1cygpOiA/aW50IHt9CgovKioKICogR2V0cyBwcmV2aW91c2x5IHNldCBob29rIG9uIG1ldGhvZAogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi51b3B6LWdldC1ob29rLnBocAogKiBAcGFyYW0gc3RyaW5nICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3MKICogQHBhcmFtIHN0cmluZyAkZnVuY3Rpb24gVGhlIG5hbWUgb2YgdGhlIG1ldGhvZAogKiBAcmV0dXJuIENsb3N1cmV8bnVsbCBUaGUgcHJldmlvdXNseSBzZXQgaG9vaywgb3IgTlVMTCBpZiBubyBob29rIGhhcyBiZWVuIHNldAogKi8KZnVuY3Rpb24gdW9wel9nZXRfaG9vayguLi4kYXJndW1lbnRzKTogP0Nsb3N1cmUge30KCi8qKgogKiBHZXQgdGhlIGN1cnJlbnQgbW9jayBmb3IgYSBjbGFzcwogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi51b3B6LWdldC1tb2NrLnBocAogKiBAcGFyYW0gc3RyaW5nICRhcmd1bWVudHMgVGhlIG5hbWUgb2YgdGhlIG1vY2tlZCBjbGFzcwogKiBAcmV0dXJuIHN0cmluZ3xvYmplY3R8bnVsbCBFaXRoZXIgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgbW9jaywgb3IgYW4gb2JqZWN0LCBvciBOVUxMIGlmIG5vIG1vY2sgaGFzIGJlZW4gc2V0CiAqIEBzaW5jZSA1LjQKICovCmZ1bmN0aW9uIHVvcHpfZ2V0X21vY2soLi4uJGFyZ3VtZW50cykge30KCi8qKgogKiBHZXRzIHRoZSB2YWx1ZSBvZiBhIHN0YXRpYyBjbGFzcyBwcm9wZXJ0eSwgaWYgY2xhc3MgaXMgZ2l2ZW4sIG9yIHRoZSB2YWx1ZSBvZiBhbiBpbnN0YW5jZSBwcm9wZXJ0eSwgaWYgaW5zdGFuY2UgaXMgZ2l2ZW4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udW9wei1nZXQtcHJvcGVydHkucGhwCiAqIEBwYXJhbSBzdHJpbmd8b2JqZWN0ICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3Mgb3IgdGhlIG9iamVjdCBpbnN0YW5jZQogKiBAcGFyYW0gc3RyaW5nICRwcm9wZXJ0eSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkKICogQHJldHVybiBtaXhlZCBUaGUgdmFsdWUgb2YgdGhlIGNsYXNzIG9yIGluc3RhbmNlIHByb3BlcnR5LCBvciBOVUxMIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZAogKi8KZnVuY3Rpb24gdW9wel9nZXRfcHJvcGVydHkoLi4uJGFyZ3VtZW50cykge30KCi8qKgogKiBHZXRzIGEgcHJldmlvdXMgc2V0IHJldHVybiB2YWx1ZSBmb3IgYSBmdW5jdGlvbgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi51b3B6LWdldC1yZXR1cm4ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBjb250YWluaW5nIHRoZSBmdW5jdGlvbgogKiBAcGFyYW0gc3RyaW5nICRmdW5jdGlvbiBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24KICogQHJldHVybiBtaXhlZAogKiBAc2luY2UgNS40CiAqLwpmdW5jdGlvbiB1b3B6X2dldF9yZXR1cm4oLi4uJGFyZ3VtZW50cykge30KCi8qKgogKiBHZXRzIHRoZSBzdGF0aWMgdmFyaWFibGVzIGZyb20gZnVuY3Rpb24gb3IgbWV0aG9kIHNjb3BlCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnVvcHotZ2V0LXN0YXRpYy5waHAKICogQHBhcmFtIHN0cmluZyAkY2xhc3MgVGhlIG5hbWUgb2YgdGhlIGNsYXNzCiAqIEBwYXJhbSBzdHJpbmcgJGZ1bmN0aW9uIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QKICogQHJldHVybiBhcnJheXxudWxsIEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIHZhcmlhYmxlIG5hbWVzIG1hcHBlZCB0byB0aGVpciBjdXJyZW50IHZhbHVlcyBvbiBzdWNjZXNzLCBvciBOVUxMIGlmIHRoZSBtZXRob2QgZG9lcyBub3QgZXhpc3QKICovCmZ1bmN0aW9uIHVvcHpfZ2V0X3N0YXRpYyguLi4kYXJndW1lbnRzKTogP2FycmF5IHt9CgovKioKICogSW1wbGVtZW50cyBhbiBpbnRlcmZhY2UgYXQgcnVudGltZQogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi51b3B6LWltcGxlbWVudC5waHAKICogQHBhcmFtIHN0cmluZyAkY2xhc3MgVGhlIG5hbWUgb2YgdGhlIGNsYXNzCiAqIEBwYXJhbSBzdHJpbmcgJGludGVyZmFjZSBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlCiAqIEByZXR1cm4gYm9vbAogKiBAc2luY2UgNS40CiAqLwpmdW5jdGlvbiB1b3B6X2ltcGxlbWVudCguLi4kYXJndW1lbnRzKTogYm9vbCB7fQoKLyoqCiAqIFJlZGVmaW5lIGEgY29uc3RhbnQKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24udW9wei1yZWRlZmluZS5waHAKICogQHBhcmFtIHN0cmluZyAkY2xhc3MgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIGNvbnRhaW5pbmcgdGhlIGNvbnN0YW50CiAqIEBwYXJhbSBzdHJpbmcgJGNvbnN0YW50IFRoZSBuYW1lIG9mIHRoZSBjb25zdGFudAogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBjb25zdGFudCwgbXVzdCBiZSBhIHZhbGlkIHR5cGUgZm9yIGEgY29uc3RhbnQgdmFyaWFibGUKICogQHJldHVybiBib29sCiAqIEBzaW5jZSA1LjQKICovCmZ1bmN0aW9uIHVvcHpfcmVkZWZpbmUoLi4uJGFyZ3VtZW50cyk6IGJvb2wge30KCi8qKgogKiBTZXRzIGhvb2sgdG8gZXhlY3V0ZSB3aGVuIGVudGVyaW5nIGEgZnVuY3Rpb24gb3IgbWV0aG9kCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnVvcHotc2V0LWhvb2sucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcwogKiBAcGFyYW0gc3RyaW5nICRmdW5jdGlvbiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kCiAqIEBwYXJhbSBDbG9zdXJlICRob29rIEEgY2xvc3VyZSB0byBleGVjdXRlIHdoZW4gZW50ZXJpbmcgdGhlIG1ldGhvZAogKiBAcmV0dXJuIGJvb2wgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUKICovCmZ1bmN0aW9uIHVvcHpfc2V0X2hvb2soLi4uJGFyZ3VtZW50cyk6IGJvb2wge30KCi8qKgogKiBVc2UgbW9jayBpbnN0ZWFkIG9mIGNsYXNzIGZvciBuZXcgb2JqZWN0cwogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi51b3B6LXNldC1tb2NrLnBocAogKiBAcGFyYW0gc3RyaW5nICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gYmUgbW9ja2VkCiAqIEBwYXJhbSBzdHJpbmd8b2JqZWN0ICRtb2NrIFRoZSBtb2NrIHRvIHVzZSBpbiB0aGUgZm9ybSBvZiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0byB1c2Ugb3IgYW4gb2JqZWN0CiAqIEByZXR1cm4gdm9pZAogKiBAc2luY2UgNy4wCiAqLwpmdW5jdGlvbiB1b3B6X3NldF9tb2NrKC4uLiRhcmd1bWVudHMpOiB2b2lkIHt9CgovKioKICogU2V0cyB0aGUgdmFsdWUgb2YgYW4gZXhpc3Rpbmcgc3RhdGljIGNsYXNzIHByb3BlcnR5LCBpZiBjbGFzcyBpcyBnaXZlbiwgb3IgdGhlIHZhbHVlIG9mIGFuIGV4aXN0aW5nIGluc3RhbmNlIHByb3BlcnR5LCBpZiBpbnN0YW5jZSBpcyBnaXZlbgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi51b3B6LXNldC1wcm9wZXJ0eS5waHAKICogQHBhcmFtIHN0cmluZ3xvYmplY3QgJGNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvciB0aGUgb2JqZWN0IGluc3RhbmNlCiAqIEBwYXJhbSBzdHJpbmcgJHByb3BlcnR5IFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eQogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIHByb3BlcnR5CiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gdW9wel9zZXRfcHJvcGVydHkoLi4uJGFyZ3VtZW50cyk6IHZvaWQge30KCi8qKgogKiBQcm92aWRlIGEgcmV0dXJuIHZhbHVlIGZvciBhbiBleGlzdGluZyBmdW5jdGlvbgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi51b3B6LXNldC1yZXR1cm4ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBjb250YWluaW5nIHRoZSBmdW5jdGlvbgogKiBAcGFyYW0gc3RyaW5nICRmdW5jdGlvbiBUaGUgbmFtZSBvZiBhbiBleGlzdGluZyBmdW5jdGlvbgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIFRoZSB2YWx1ZSB0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybi4gSWYgYSBDbG9zdXJlIGlzIHByb3ZpZGVkIGFuZCB0aGUgZXhlY3V0ZSBmbGFnIGlzIHNldCwgdGhlIENsb3N1cmUgd2lsbCBiZSBleGVjdXRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24KICogQHBhcmFtIGJvb2wgJGV4ZWN1dGUgSWYgdHJ1ZSwgYW5kIGEgQ2xvc3VyZSB3YXMgcHJvdmlkZWQgYXMgdGhlIHZhbHVlLCB0aGUgQ2xvc3VyZSB3aWxsIGJlIGV4ZWN1dGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4KICogQHJldHVybiBib29sCiAqIEBzaW5jZSA3LjAKICovCmZ1bmN0aW9uIHVvcHpfc2V0X3JldHVybiguLi4kYXJndW1lbnRzKTogYm9vbCB7fQoKLyoqCiAqIFNldHMgdGhlIHN0YXRpYyB2YXJpYWJsZXMgaW4gZnVuY3Rpb24gb3IgbWV0aG9kIHNjb3BlCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnVvcHotc2V0LXN0YXRpYy5waHAKICogQHBhcmFtIHN0cmluZyAkY2xhc3MgVGhlIG5hbWUgb2YgdGhlIGNsYXNzCiAqIEBwYXJhbSBzdHJpbmcgJGZ1bmN0aW9uIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QKICogQHBhcmFtIGFycmF5ICRzdGF0aWMgVGhlIGFzc29jaWF0aXZlIGFycmF5IG9mIHZhcmlhYmxlIG5hbWVzIG1hcHBlZCB0byB0aGVpciB2YWx1ZXMKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB1b3B6X3NldF9zdGF0aWMoLi4uJGFyZ3VtZW50cyk6IHZvaWQge30KCi8qKgogKiBVbmRlZmluZSBhIGNvbnN0YW50CiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnVvcHotdW5kZWZpbmUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBjb250YWluaW5nIHRoZSBjb25zdGFudAogKiBAcGFyYW0gc3RyaW5nICRjb25zdGFudCBUaGUgbmFtZSBvZiB0aGUgY29uc3RhbnQKICogQHJldHVybiBib29sCiAqIEBzaW5jZSA1LjQKICovCmZ1bmN0aW9uIHVvcHpfdW5kZWZpbmUoLi4uJGFyZ3VtZW50cyk6IGJvb2wge30KCi8qKgogKiBSZW1vdmVzIHByZXZpb3VzbHkgc2V0IGhvb2sgb24gZnVuY3Rpb24gb3IgbWV0aG9kCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnVvcHotdW5zZXQtaG9vay5waHAKICogQHBhcmFtIHN0cmluZyAkY2xhc3MgVGhlIG5hbWUgb2YgdGhlIGNsYXNzCiAqIEBwYXJhbSBzdHJpbmcgJGZ1bmN0aW9uIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QKICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlCiAqLwpmdW5jdGlvbiB1b3B6X3Vuc2V0X2hvb2soLi4uJGFyZ3VtZW50cyk6IGJvb2wge30KCi8qKgogKiBVbnNldCBwcmV2aW91c2x5IHNldCBtb2NrCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnVvcHotdW5zZXQtbW9jay5waHAKICogQHBhcmFtIHN0cmluZyAkYXJndW1lbnRzIFRoZSBuYW1lIG9mIHRoZSBtb2NrZWQgY2xhc3MKICogQHJldHVybiB2b2lkCiAqIEBzaW5jZSA3LjAKICovCmZ1bmN0aW9uIHVvcHpfdW5zZXRfbW9jayguLi4kYXJndW1lbnRzKTogdm9pZCB7fQoKLyoqCiAqIFVuc2V0cyBhIHByZXZpb3VzbHkgc2V0IHJldHVybiB2YWx1ZSBmb3IgYSBmdW5jdGlvbgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi51b3B6LXVuc2V0LXJldHVybi5waHAKICogQHBhcmFtIHN0cmluZyAkY2xhc3MgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uCiAqIEBwYXJhbSBzdHJpbmcgJGZ1bmN0aW9uIFRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZ1bmN0aW9uCiAqIEByZXR1cm4gYm9vbAogKiBAc2luY2UgNy4wCiAqLwpmdW5jdGlvbiB1b3B6X3Vuc2V0X3JldHVybiguLi4kYXJndW1lbnRzKTogYm9vbCB7fQoKZnVuY3Rpb24gdW9wel9jYWxsX3VzZXJfZnVuYyguLi4kYXJndW1lbnRzKSB7fQoKZnVuY3Rpb24gdW9wel9jYWxsX3VzZXJfZnVuY19hcnJheSguLi4kYXJndW1lbnRzKSB7fQoKLy8gRW5kIG9mIHVvcHogdjUuMC4yCjw/cGhwCgovLyBTdGFydCBvZiBwY3JlIHYuCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxQdXJlOwoKLyoqCiAqIFBlcmZvcm0gYSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2gKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wcmVnLW1hdGNoLnBocAogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIDxwPgogKiBUaGUgcGF0dGVybiB0byBzZWFyY2ggZm9yLCBhcyBhIHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRzdWJqZWN0IDxwPgogKiBUaGUgaW5wdXQgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmdbXSAmJG1hdGNoZXMgW29wdGlvbmFsXSA8cD4KICogSWYgPGk+bWF0Y2hlczwvaT4gaXMgcHJvdmlkZWQsIHRoZW4gaXQgaXMgZmlsbGVkIHdpdGgKICogdGhlIHJlc3VsdHMgb2Ygc2VhcmNoLiAkbWF0Y2hlc1swXSB3aWxsIGNvbnRhaW4gdGhlCiAqIHRleHQgdGhhdCBtYXRjaGVkIHRoZSBmdWxsIHBhdHRlcm4sICRtYXRjaGVzWzFdCiAqIHdpbGwgaGF2ZSB0aGUgdGV4dCB0aGF0IG1hdGNoZWQgdGhlIGZpcnN0IGNhcHR1cmVkIHBhcmVudGhlc2l6ZWQKICogc3VicGF0dGVybiwgYW5kIHNvIG9uLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIDxpPmZsYWdzPC9pPiBjYW4gYmUgdGhlIGZvbGxvd2luZyBmbGFnOgogKiA8Yj5QUkVHX09GRlNFVF9DQVBUVVJFPC9iPgogKiA8YmxvY2txdW90ZT4KICogSWYgdGhpcyBmbGFnIGlzIHBhc3NlZCwgZm9yIGV2ZXJ5IG9jY3VycmluZyBtYXRjaCB0aGUgYXBwZW5kYW50IHN0cmluZwogKiBvZmZzZXQgd2lsbCBhbHNvIGJlIHJldHVybmVkLiBOb3RlIHRoYXQgdGhpcyBjaGFuZ2VzIHRoZSB2YWx1ZSBvZgogKiA8aT5tYXRjaGVzPC9pPiBpbnRvIGFuIGFycmF5IHdoZXJlIGV2ZXJ5IGVsZW1lbnQgaXMgYW4KICogYXJyYXkgY29uc2lzdGluZyBvZiB0aGUgbWF0Y2hlZCBzdHJpbmcgYXQgb2Zmc2V0IDAKICogYW5kIGl0cyBzdHJpbmcgb2Zmc2V0IGludG8gPGk+c3ViamVjdDwvaT4gYXQgb2Zmc2V0IDEuCiAqIDxwcmU+CiAqIDw/cGhwCiAqIHByZWdfbWF0Y2goJy8oZm9vKShiYXIpKGJheikvJywgJ2Zvb2JhcmJheicsICRtYXRjaGVzLCBQUkVHX09GRlNFVF9DQVBUVVJFKTsKICogcHJpbnRfcigkbWF0Y2hlcyk7CiAqID8+CiAqIDwvcHJlPgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDoKICogPHByZT4KICogQXJyYXkKICogKAogKiAgICAgWzBdID0+IEFycmF5CiAqICAgICAgICAgKAogKiAgICAgICAgICAgICBbMF0gPT4gZm9vYmFyYmF6CiAqICAgICAgICAgICAgIFsxXSA9PiAwCiAqICAgICAgICAgKQogKgogKiAgICAgWzFdID0+IEFycmF5CiAqICAgICAgICAgKAogKiAgICAgICAgICAgICBbMF0gPT4gZm9vCiAqICAgICAgICAgICAgIFsxXSA9PiAwCiAqICAgICAgICAgKQogKgogKiAgICAgWzJdID0+IEFycmF5CiAqICAgICAgICAgKAogKiAgICAgICAgICAgICBbMF0gPT4gYmFyCiAqICAgICAgICAgICAgIFsxXSA9PiAzCiAqICAgICAgICAgKQogKgogKiAgICAgWzNdID0+IEFycmF5CiAqICAgICAgICAgKAogKiAgICAgICAgICAgICBbMF0gPT4gYmF6CiAqICAgICAgICAgICAgIFsxXSA9PiA2CiAqICAgICAgICAgKQogKgogKiApCiAqIDwvcHJlPgogKiA8L2Jsb2NrcXVvdGU+CiAqIDxiPlBSRUdfVU5NQVRDSEVEX0FTX05VTEw8L2I+CiAqIDxibG9ja3F1b3RlPgogKiBJZiB0aGlzIGZsYWcgaXMgcGFzc2VkLCB1bm1hdGNoZWQgc3VicGF0dGVybnMgYXJlIHJlcG9ydGVkIGFzIE5VTEw7CiAqIG90aGVyd2lzZSB0aGV5IGFyZSByZXBvcnRlZCBhcyBhbiBlbXB0eSBzdHJpbmcuCiAqIDxwcmU+CiAqIDw/cGhwCiAqIHByZWdfbWF0Y2goJy8oYSkoYikqKGMpLycsICdhYycsICRtYXRjaGVzKTsKICogdmFyX2R1bXAoJG1hdGNoZXMpOwogKiBwcmVnX21hdGNoKCcvKGEpKGIpKihjKS8nLCAnYWMnLCAkbWF0Y2hlcywgUFJFR19VTk1BVENIRURfQVNfTlVMTCk7CiAqIHZhcl9kdW1wKCRtYXRjaGVzKTsKICogPz4KICogPC9wcmU+CiAqIFRoZSBhYm92ZSBleGFtcGxlIHdpbGwgb3V0cHV0OgogKiA8cHJlPgogKiBhcnJheSg0KSB7CiAqICAgWzBdPT4KICogICBzdHJpbmcoMikgImFjIgogKiAgIFsxXT0+CiAqICAgc3RyaW5nKDEpICJhIgogKiAgIFsyXT0+CiAqICAgc3RyaW5nKDApICIiCiAqICAgWzNdPT4KICogICBzdHJpbmcoMSkgImMiCiAqIH0KICogYXJyYXkoNCkgewogKiAgIFswXT0+CiAqICAgc3RyaW5nKDIpICJhYyIKICogICBbMV09PgogKiAgIHN0cmluZygxKSAiYSIKICogICBbMl09PgogKiAgIE5VTEwKICogICBbM109PgogKiAgIHN0cmluZygxKSAiYyIKICogfQogKiA8L3ByZT4KICogPC9ibG9ja3F1b3RlPgogKiBAcGFyYW0gaW50ICRvZmZzZXQgW29wdGlvbmFsXSA8cD4KICogTm9ybWFsbHksIHRoZSBzZWFyY2ggc3RhcnRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3ViamVjdCBzdHJpbmcuCiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgPGk+b2Zmc2V0PC9pPiBjYW4gYmUgdXNlZCB0bwogKiBzcGVjaWZ5IHRoZSBhbHRlcm5hdGUgcGxhY2UgZnJvbSB3aGljaCB0byBzdGFydCB0aGUgc2VhcmNoIChpbiBieXRlcykuCiAqIDwvcD4KICogPHA+CiAqIFVzaW5nIDxpPm9mZnNldDwvaT4gaXMgbm90IGVxdWl2YWxlbnQgdG8gcGFzc2luZwogKiBzdWJzdHIoJHN1YmplY3QsICRvZmZzZXQpIHRvCiAqIDxiPnByZWdfbWF0Y2g8L2I+IGluIHBsYWNlIG9mIHRoZSBzdWJqZWN0IHN0cmluZywKICogYmVjYXVzZSA8aT5wYXR0ZXJuPC9pPiBjYW4gY29udGFpbiBhc3NlcnRpb25zIHN1Y2ggYXMKICogXiwgJCBvcgogKiAoPyZsdDs9eCkuIENvbXBhcmU6CiAqIDxwcmU+CiAqICRzdWJqZWN0ID0gImFiY2RlZiI7CiAqICRwYXR0ZXJuID0gJy9eZGVmLyc7CiAqIHByZWdfbWF0Y2goJHBhdHRlcm4sICRzdWJqZWN0LCAkbWF0Y2hlcywgUFJFR19PRkZTRVRfQ0FQVFVSRSwgMyk7CiAqIHByaW50X3IoJG1hdGNoZXMpOwogKiA8L3ByZT4KICogVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBvdXRwdXQ6PC9wPgogKiA8cHJlPgogKiBBcnJheQogKiAoCiAqICkKICogPC9wcmU+CiAqIDxwPgogKiB3aGlsZSB0aGlzIGV4YW1wbGUKICogPC9wPgogKiA8Y29kZT4KICogJHN1YmplY3QgPSAiYWJjZGVmIjsKICogJHBhdHRlcm4gPSAnL15kZWYvJzsKICogcHJlZ19tYXRjaCgkcGF0dGVybiwgc3Vic3RyKCRzdWJqZWN0LDMpLCAkbWF0Y2hlcywgUFJFR19PRkZTRVRfQ0FQVFVSRSk7CiAqIHByaW50X3IoJG1hdGNoZXMpOwogKiA8L2NvZGU+CiAqIDxwPgogKiB3aWxsIHByb2R1Y2UKICogPC9wPgogKiA8cHJlPgogKiBBcnJheQogKiAoCiAqICAgICBbMF0gPT4gQXJyYXkKICogICAgICAgICAoCiAqICAgICAgICAgICAgIFswXSA9PiBkZWYKICogICAgICAgICAgICAgWzFdID0+IDAKICogICAgICAgICApCiAqICkKICogPC9wcmU+CiAqIEFsdGVybmF0aXZlbHksIHRvIGF2b2lkIHVzaW5nIHN1YnN0cigpLCB1c2UgdGhlIFxHIGFzc2VydGlvbiByYXRoZXIKICogdGhhbiB0aGUgXiBhbmNob3IsIG9yIHRoZSBBIG1vZGlmaWVyIGluc3RlYWQsIGJvdGggb2Ygd2hpY2ggd29yayB3aXRoCiAqIHRoZSBvZmZzZXQgcGFyYW1ldGVyLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIDxiPnByZWdfbWF0Y2g8L2I+IHJldHVybnMgMSBpZiB0aGUgPGk+cGF0dGVybjwvaT4KICogbWF0Y2hlcyBnaXZlbiA8aT5zdWJqZWN0PC9pPiwgMCBpZiBpdCBkb2VzIG5vdCwgb3IgPGI+RkFMU0U8L2I+CiAqIGlmIGFuIGVycm9yIG9jY3VycmVkLgogKi8KZnVuY3Rpb24gcHJlZ19tYXRjaChzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkc3ViamVjdCwgJiRtYXRjaGVzLCBpbnQgJGZsYWdzID0gMCwgaW50ICRvZmZzZXQgPSAwKTogaW50fGZhbHNlIHt9CgovKioKICogUGVyZm9ybSBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2gKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wcmVnLW1hdGNoLWFsbC5waHAKICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiA8cD4KICogVGhlIHBhdHRlcm4gdG8gc2VhcmNoIGZvciwgYXMgYSBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc3ViamVjdCA8cD4KICogVGhlIGlucHV0IHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nW11bXSAmJG1hdGNoZXMgW29wdGlvbmFsXSA8cD4KICogQXJyYXkgb2YgYWxsIG1hdGNoZXMgaW4gbXVsdGktZGltZW5zaW9uYWwgYXJyYXkgb3JkZXJlZCBhY2NvcmRpbmcgdG8gZmxhZ3MuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgPHA+CiAqIENhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgZmxhZ3MgKG5vdGUgdGhhdCBpdCBkb2Vzbid0IG1ha2UKICogc2Vuc2UgdG8gdXNlIDxiPlBSRUdfUEFUVEVSTl9PUkRFUjwvYj4gdG9nZXRoZXIgd2l0aAogKiA8Yj5QUkVHX1NFVF9PUkRFUjwvYj4pOgogKiA8Yj5QUkVHX1BBVFRFUk5fT1JERVI8L2I+CiAqIDxicj4KICogT3JkZXJzIHJlc3VsdHMgc28gdGhhdCAkbWF0Y2hlc1swXSBpcyBhbiBhcnJheSBvZiBmdWxsCiAqIHBhdHRlcm4gbWF0Y2hlcywgJG1hdGNoZXNbMV0gaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBtYXRjaGVkIGJ5CiAqIHRoZSBmaXJzdCBwYXJlbnRoZXNpemVkIHN1YnBhdHRlcm4sIGFuZCBzbyBvbi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvZmZzZXQgW29wdGlvbmFsXSA8cD4KICogTm9ybWFsbHksIHRoZSBzZWFyY2ggc3RhcnRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3ViamVjdCBzdHJpbmcuCiAqIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgPGk+b2Zmc2V0PC9pPiBjYW4gYmUgdXNlZCB0bwogKiBzcGVjaWZ5IHRoZSBhbHRlcm5hdGUgcGxhY2UgZnJvbSB3aGljaCB0byBzdGFydCB0aGUgc2VhcmNoIChpbiBieXRlcykuCiAqIDwvcD4KICogPHA+CiAqIFVzaW5nIDxpPm9mZnNldDwvaT4gaXMgbm90IGVxdWl2YWxlbnQgdG8gcGFzc2luZwogKiBzdWJzdHIoJHN1YmplY3QsICRvZmZzZXQpIHRvCiAqIDxiPnByZWdfbWF0Y2hfYWxsPC9iPiBpbiBwbGFjZSBvZiB0aGUgc3ViamVjdCBzdHJpbmcsCiAqIGJlY2F1c2UgPGk+cGF0dGVybjwvaT4gY2FuIGNvbnRhaW4gYXNzZXJ0aW9ucyBzdWNoIGFzCiAqIF4sICQgb3IKICogKD8mbHQ7PXgpLiBTZWUgPGI+cHJlZ19tYXRjaDwvYj4KICogZm9yIGV4YW1wbGVzLgogKiA8L3A+CiAqIDxwPgogKiA8Y29kZT4KICogcHJlZ19tYXRjaF9hbGwoInxdKz4oLiopXSs+fFUiLAogKiAiZXhhbXBsZTogdGhpcyBpcyBhIHRlc3QiLAogKiAkb3V0LCBQUkVHX1BBVFRFUk5fT1JERVIpOwogKiBlY2hvICRvdXRbMF1bMF0gLiAiLCAiIC4gJG91dFswXVsxXSAuICJcbiI7CiAqIGVjaG8gJG91dFsxXVswXSAuICIsICIgLiAkb3V0WzFdWzFdIC4gIlxuIjsKICogPC9jb2RlPgogKiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIG91dHB1dDo8L3A+CiAqIDxwcmU+CiAqIGV4YW1wbGU6ICwgdGhpcyBpcyBhIHRlc3QKICogZXhhbXBsZTogLCB0aGlzIGlzIGEgdGVzdAogKiA8L3ByZT4KICogPHA+CiAqIFNvLCAkb3V0WzBdIGNvbnRhaW5zIGFycmF5IG9mIHN0cmluZ3MgdGhhdCBtYXRjaGVkIGZ1bGwgcGF0dGVybiwKICogYW5kICRvdXRbMV0gY29udGFpbnMgYXJyYXkgb2Ygc3RyaW5ncyBlbmNsb3NlZCBieSB0YWdzLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlfG51bGwgdGhlIG51bWJlciBvZiBmdWxsIHBhdHRlcm4gbWF0Y2hlcyAod2hpY2ggbWlnaHQgYmUgemVybyksCiAqIG9yIDxiPkZBTFNFPC9iPiBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludHxmYWxzZSddLCBkZWZhdWx0OiAnaW50fGZhbHNlfG51bGwnKV0KZnVuY3Rpb24gcHJlZ19tYXRjaF9hbGwoc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHN1YmplY3QsICYkbWF0Y2hlcywgaW50ICRmbGFncyA9IDAsIGludCAkb2Zmc2V0ID0gMCkge30KCi8qKgogKiBQZXJmb3JtIGEgcmVndWxhciBleHByZXNzaW9uIHNlYXJjaCBhbmQgcmVwbGFjZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnByZWctcmVwbGFjZS5waHAKICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkcGF0dGVybiA8cD4KICogVGhlIHBhdHRlcm4gdG8gc2VhcmNoIGZvci4gSXQgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBhcnJheSB3aXRoCiAqIHN0cmluZ3MuCiAqIDwvcD4KICogPHA+CiAqIFNldmVyYWwgUENSRSBtb2RpZmllcnMKICogYXJlIGFsc28gYXZhaWxhYmxlLCBpbmNsdWRpbmcgdGhlIGRlcHJlY2F0ZWQgJ2UnCiAqIChQUkVHX1JFUExBQ0VfRVZBTCksIHdoaWNoIGlzIHNwZWNpZmljIHRvIHRoaXMgZnVuY3Rpb24uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkcmVwbGFjZW1lbnQgPHA+CiAqIFRoZSBzdHJpbmcgb3IgYW4gYXJyYXkgd2l0aCBzdHJpbmdzIHRvIHJlcGxhY2UuIElmIHRoaXMgcGFyYW1ldGVyIGlzIGEKICogc3RyaW5nIGFuZCB0aGUgPGk+cGF0dGVybjwvaT4gcGFyYW1ldGVyIGlzIGFuIGFycmF5LAogKiBhbGwgcGF0dGVybnMgd2lsbCBiZSByZXBsYWNlZCBieSB0aGF0IHN0cmluZy4gSWYgYm90aAogKiA8aT5wYXR0ZXJuPC9pPiBhbmQgPGk+cmVwbGFjZW1lbnQ8L2k+CiAqIHBhcmFtZXRlcnMgYXJlIGFycmF5cywgZWFjaCA8aT5wYXR0ZXJuPC9pPiB3aWxsIGJlCiAqIHJlcGxhY2VkIGJ5IHRoZSA8aT5yZXBsYWNlbWVudDwvaT4gY291bnRlcnBhcnQuIElmCiAqIHRoZXJlIGFyZSBmZXdlciBlbGVtZW50cyBpbiB0aGUgPGk+cmVwbGFjZW1lbnQ8L2k+CiAqIGFycmF5IHRoYW4gaW4gdGhlIDxpPnBhdHRlcm48L2k+IGFycmF5LCBhbnkgZXh0cmEKICogPGk+cGF0dGVybjwvaT5zIHdpbGwgYmUgcmVwbGFjZWQgYnkgYW4gZW1wdHkgc3RyaW5nLgogKiA8L3A+CiAqIDxwPgogKiA8aT5yZXBsYWNlbWVudDwvaT4gbWF5IGNvbnRhaW4gcmVmZXJlbmNlcyBvZiB0aGUgZm9ybQogKiBcXG4gb3IgKHNpbmNlIFBIUCA0LjAuNCkKICogJG4sIHdpdGggdGhlIGxhdHRlciBmb3JtCiAqIGJlaW5nIHRoZSBwcmVmZXJyZWQgb25lLiBFdmVyeSBzdWNoIHJlZmVyZW5jZSB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSB0ZXh0CiAqIGNhcHR1cmVkIGJ5IHRoZSBuJ3RoIHBhcmVudGhlc2l6ZWQgcGF0dGVybi4KICogbiBjYW4gYmUgZnJvbSAwIHRvIDk5LCBhbmQKICogXFwwIG9yICQwIHJlZmVycyB0byB0aGUgdGV4dCBtYXRjaGVkCiAqIGJ5IHRoZSB3aG9sZSBwYXR0ZXJuLiBPcGVuaW5nIHBhcmVudGhlc2VzIGFyZSBjb3VudGVkIGZyb20gbGVmdCB0byByaWdodAogKiAoc3RhcnRpbmcgZnJvbSAxKSB0byBvYnRhaW4gdGhlIG51bWJlciBvZiB0aGUgY2FwdHVyaW5nIHN1YnBhdHRlcm4uCiAqIFRvIHVzZSBiYWNrc2xhc2ggaW4gcmVwbGFjZW1lbnQsIGl0IG11c3QgYmUgZG91YmxlZAogKiAoIlxcXFwiIFBIUCBzdHJpbmcpLgogKiA8L3A+CiAqIDxwPgogKiBXaGVuIHdvcmtpbmcgd2l0aCBhIHJlcGxhY2VtZW50IHBhdHRlcm4gd2hlcmUgYSBiYWNrcmVmZXJlbmNlIGlzCiAqIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFub3RoZXIgbnVtYmVyIChpLmUuOiBwbGFjaW5nIGEgbGl0ZXJhbCBudW1iZXIKICogaW1tZWRpYXRlbHkgYWZ0ZXIgYSBtYXRjaGVkIHBhdHRlcm4pLCB5b3UgY2Fubm90IHVzZSB0aGUgZmFtaWxpYXIKICogXFwxIG5vdGF0aW9uIGZvciB5b3VyIGJhY2tyZWZlcmVuY2UuCiAqIFxcMTEsIGZvciBleGFtcGxlLCB3b3VsZCBjb25mdXNlCiAqIDxiPnByZWdfcmVwbGFjZTwvYj4gc2luY2UgaXQgZG9lcyBub3Qga25vdyB3aGV0aGVyIHlvdQogKiB3YW50IHRoZSBcXDEgYmFja3JlZmVyZW5jZSBmb2xsb3dlZCBieSBhIGxpdGVyYWwKICogMSwgb3IgdGhlIFxcMTEgYmFja3JlZmVyZW5jZQogKiBmb2xsb3dlZCBieSBub3RoaW5nLiBJbiB0aGlzIGNhc2UgdGhlIHNvbHV0aW9uIGlzIHRvIHVzZQogKiBcJHsxfTEuIFRoaXMgY3JlYXRlcyBhbiBpc29sYXRlZAogKiAkMSBiYWNrcmVmZXJlbmNlLCBsZWF2aW5nIHRoZSAxCiAqIGFzIGEgbGl0ZXJhbC4KICogPC9wPgogKiA8cD4KICogV2hlbiB1c2luZyB0aGUgZGVwcmVjYXRlZCBlIG1vZGlmaWVyLCB0aGlzIGZ1bmN0aW9uIGVzY2FwZXMKICogc29tZSBjaGFyYWN0ZXJzIChuYW1lbHkgJywgIiwKICogXCBhbmQgTlVMTCkgaW4gdGhlIHN0cmluZ3MgdGhhdCByZXBsYWNlIHRoZQogKiBiYWNrcmVmZXJlbmNlcy4gVGhpcyBpcyBkb25lIHRvIGVuc3VyZSB0aGF0IG5vIHN5bnRheCBlcnJvcnMgYXJpc2UKICogZnJvbSBiYWNrcmVmZXJlbmNlIHVzYWdlIHdpdGggZWl0aGVyIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzIChlLmcuCiAqICdzdHJsZW4oXCckMVwnKStzdHJsZW4oIiQyIiknKS4gTWFrZSBzdXJlIHlvdSBhcmUKICogYXdhcmUgb2YgUEhQJ3Mgc3RyaW5nCiAqIHN5bnRheCB0byBrbm93IGV4YWN0bHkgaG93IHRoZSBpbnRlcnByZXRlZCBzdHJpbmcgd2lsbCBsb29rLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJHN1YmplY3QgPHA+CiAqIFRoZSBzdHJpbmcgb3IgYW4gYXJyYXkgd2l0aCBzdHJpbmdzIHRvIHNlYXJjaCBhbmQgcmVwbGFjZS4KICogPC9wPgogKiA8cD4KICogSWYgPGk+c3ViamVjdDwvaT4gaXMgYW4gYXJyYXksIHRoZW4gdGhlIHNlYXJjaCBhbmQKICogcmVwbGFjZSBpcyBwZXJmb3JtZWQgb24gZXZlcnkgZW50cnkgb2YgPGk+c3ViamVjdDwvaT4sCiAqIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIGFuIGFycmF5IGFzIHdlbGwuCiAqIDwvcD4KICogQHBhcmFtIGludCAkbGltaXQgW29wdGlvbmFsXSA8cD4KICogVGhlIG1heGltdW0gcG9zc2libGUgcmVwbGFjZW1lbnRzIGZvciBlYWNoIHBhdHRlcm4gaW4gZWFjaAogKiA8aT5zdWJqZWN0PC9pPiBzdHJpbmcuIERlZmF1bHRzIHRvCiAqIC0xIChubyBsaW1pdCkuCiAqIDwvcD4KICogQHBhcmFtIGludCAmJGNvdW50IFtvcHRpb25hbF0gPHA+CiAqIElmIHNwZWNpZmllZCwgdGhpcyB2YXJpYWJsZSB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBudW1iZXIgb2YKICogcmVwbGFjZW1lbnRzIGRvbmUuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8c3RyaW5nW118bnVsbCA8Yj5wcmVnX3JlcGxhY2U8L2I+IHJldHVybnMgYW4gYXJyYXkgaWYgdGhlCiAqIDxpPnN1YmplY3Q8L2k+IHBhcmFtZXRlciBpcyBhbiBhcnJheSwgb3IgYSBzdHJpbmcKICogb3RoZXJ3aXNlLgogKiA8L3A+CiAqIDxwPgogKiBJZiBtYXRjaGVzIGFyZSBmb3VuZCwgdGhlIG5ldyA8aT5zdWJqZWN0PC9pPiB3aWxsCiAqIGJlIHJldHVybmVkLCBvdGhlcndpc2UgPGk+c3ViamVjdDwvaT4gd2lsbCBiZQogKiByZXR1cm5lZCB1bmNoYW5nZWQgb3IgPGI+TlVMTDwvYj4gaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAqLwpmdW5jdGlvbiBwcmVnX3JlcGxhY2UoYXJyYXl8c3RyaW5nICRwYXR0ZXJuLCBhcnJheXxzdHJpbmcgJHJlcGxhY2VtZW50LCBhcnJheXxzdHJpbmcgJHN1YmplY3QsIGludCAkbGltaXQgPSAtMSwgJiRjb3VudCk6IGFycmF5fHN0cmluZ3xudWxsIHt9CgovKioKICogUGVyZm9ybSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzZWFyY2ggYW5kIHJlcGxhY2UgdXNpbmcgYSBjYWxsYmFjawogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnByZWctcmVwbGFjZS1jYWxsYmFjay5waHAKICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkcGF0dGVybiA8cD4KICogVGhlIHBhdHRlcm4gdG8gc2VhcmNoIGZvci4gSXQgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhbiBhcnJheSB3aXRoCiAqIHN0cmluZ3MuCiAqIDwvcD4KICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayA8cD4KICogQSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIGFuZCBwYXNzZWQgYW4gYXJyYXkgb2YgbWF0Y2hlZCBlbGVtZW50cwogKiBpbiB0aGUgPGk+c3ViamVjdDwvaT4gc3RyaW5nLiBUaGUgY2FsbGJhY2sgc2hvdWxkCiAqIHJldHVybiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nLiBUaGlzIGlzIHRoZSBjYWxsYmFjayBzaWduYXR1cmU6CiAqIDwvcD4KICogPHA+CiAqIHN0cmluZzxiPmhhbmRsZXI8L2I+CiAqIDxiPmFycmF5PGk+bWF0Y2hlczwvaT48L2I+CiAqIDwvcD4KICogPHA+CiAqIFlvdSdsbCBvZnRlbiBuZWVkIHRoZSA8aT5jYWxsYmFjazwvaT4gZnVuY3Rpb24KICogZm9yIGEgPGI+cHJlZ19yZXBsYWNlX2NhbGxiYWNrPC9iPiBpbiBqdXN0IG9uZSBwbGFjZS4KICogSW4gdGhpcyBjYXNlIHlvdSBjYW4gdXNlIGFuCiAqIGFub255bW91cyBmdW5jdGlvbiB0bwogKiBkZWNsYXJlIHRoZSBjYWxsYmFjayB3aXRoaW4gdGhlIGNhbGwgdG8KICogPGI+cHJlZ19yZXBsYWNlX2NhbGxiYWNrPC9iPi4gQnkgZG9pbmcgaXQgdGhpcyB3YXkKICogeW91IGhhdmUgYWxsIGluZm9ybWF0aW9uIGZvciB0aGUgY2FsbCBpbiBvbmUgcGxhY2UgYW5kIGRvIG5vdAogKiBjbHV0dGVyIHRoZSBmdW5jdGlvbiBuYW1lc3BhY2Ugd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uJ3MgbmFtZQogKiBub3QgdXNlZCBhbnl3aGVyZSBlbHNlLgogKiA8L3A+CiAqIDxwPgogKiA8Yj5wcmVnX3JlcGxhY2VfY2FsbGJhY2s8L2I+IGFuZAogKiBhbm9ueW1vdXMgZnVuY3Rpb24KICogPGNvZGU+CiAqIC8qIGEgdW5peC1zdHlsZSBjb21tYW5kIGxpbmUgZmlsdGVyIHRvIGNvbnZlcnQgdXBwZXJjYXNlCiAqICogbGV0dGVycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHBhcmFncmFwaHMgdG8gbG93ZXJjYXNlICogLwogKiAkZnAgPSBmb3BlbigicGhwOi8vc3RkaW4iLCAiciIpIG9yIGRpZSgiY2FuJ3QgcmVhZCBzdGRpbiIpOwogKiB3aGlsZSAoIWZlb2YoJGZwKSkgewogKiAkbGluZSA9IGZnZXRzKCRmcCk7CiAqICRsaW5lID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKAogKiAnfDxwPlxzKlx3fCcsCiAqIGZ1bmN0aW9uICgkbWF0Y2hlcykgewogKiByZXR1cm4gc3RydG9sb3dlcigkbWF0Y2hlc1swXSk7CiAqIH0sCiAqICRsaW5lCiAqICk7CiAqIGVjaG8gJGxpbmU7CiAqIH0KICogZmNsb3NlKCRmcCk7CiAqIDwvY29kZT4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfHN0cmluZ1tdICRzdWJqZWN0IDxwPgogKiBUaGUgc3RyaW5nIG9yIGFuIGFycmF5IHdpdGggc3RyaW5ncyB0byBzZWFyY2ggYW5kIHJlcGxhY2UuCiAqIDwvcD4KICogQHBhcmFtIGludCAkbGltaXQgW29wdGlvbmFsXSA8cD4KICogVGhlIG1heGltdW0gcG9zc2libGUgcmVwbGFjZW1lbnRzIGZvciBlYWNoIHBhdHRlcm4gaW4gZWFjaAogKiA8aT5zdWJqZWN0PC9pPiBzdHJpbmcuIERlZmF1bHRzIHRvCiAqIC0xIChubyBsaW1pdCkuCiAqIDwvcD4KICogQHBhcmFtIGludCAmJGNvdW50IFtvcHRpb25hbF0gPHA+CiAqIElmIHNwZWNpZmllZCwgdGhpcyB2YXJpYWJsZSB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBudW1iZXIgb2YKICogcmVwbGFjZW1lbnRzIGRvbmUuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXQogKiBAcmV0dXJuIHN0cmluZ3xzdHJpbmdbXXxudWxsIDxiPnByZWdfcmVwbGFjZV9jYWxsYmFjazwvYj4gcmV0dXJucyBhbiBhcnJheSBpZiB0aGUKICogPGk+c3ViamVjdDwvaT4gcGFyYW1ldGVyIGlzIGFuIGFycmF5LCBvciBhIHN0cmluZwogKiBvdGhlcndpc2UuIE9uIGVycm9ycyB0aGUgcmV0dXJuIHZhbHVlIGlzIDxiPk5VTEw8L2I+CiAqIDwvcD4KICogPHA+CiAqIElmIG1hdGNoZXMgYXJlIGZvdW5kLCB0aGUgbmV3IHN1YmplY3Qgd2lsbCBiZSByZXR1cm5lZCwgb3RoZXJ3aXNlCiAqIDxpPnN1YmplY3Q8L2k+IHdpbGwgYmUgcmV0dXJuZWQgdW5jaGFuZ2VkLgogKi8KZnVuY3Rpb24gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKAogICAgYXJyYXl8c3RyaW5nICRwYXR0ZXJuLAogICAgY2FsbGFibGUgJGNhbGxiYWNrLAogICAgYXJyYXl8c3RyaW5nICRzdWJqZWN0LAogICAgaW50ICRsaW1pdCA9IC0xLAogICAgJiRjb3VudCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuNCcpXSBpbnQgJGZsYWdzID0gMAopOiBhcnJheXxzdHJpbmd8bnVsbCB7fQoKLyoqCiAqIFBlcmZvcm0gYSByZWd1bGFyIGV4cHJlc3Npb24gc2VhcmNoIGFuZCByZXBsYWNlIHVzaW5nIGNhbGxiYWNrcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnByZWctcmVwbGFjZS1jYWxsYmFjay1hcnJheS5waHAKICogQHBhcmFtIGNhbGxhYmxlW10gJHBhdHRlcm4gQW4gYXNzb2NpYXRpdmUgYXJyYXkgbWFwcGluZyBwYXR0ZXJucyAoa2V5cykgdG8gY2FsbGJhY2tzICh2YWx1ZXMpCiAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJHN1YmplY3QKICogQHBhcmFtIGludCAkbGltaXQgW29wdGlvbmFsXQogKiBAcGFyYW0gaW50ICYkY291bnQgW29wdGlvbmFsXQogKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdCiAqIEByZXR1cm4gc3RyaW5nfHN0cmluZ1tdfG51bGwgIDxwPnByZWdfcmVwbGFjZV9jYWxsYmFja19hcnJheSgpIHJldHVybnMgYW4gYXJyYXkgaWYgdGhlIHN1YmplY3QgcGFyYW1ldGVyIGlzIGFuIGFycmF5LCBvciBhIHN0cmluZyBvdGhlcndpc2UuIE9uIGVycm9ycyB0aGUgcmV0dXJuIHZhbHVlIGlzIE5VTEw8L3A+CiAqIDxwPklmIG1hdGNoZXMgYXJlIGZvdW5kLCB0aGUgbmV3IHN1YmplY3Qgd2lsbCBiZSByZXR1cm5lZCwgb3RoZXJ3aXNlIHN1YmplY3Qgd2lsbCBiZSByZXR1cm5lZCB1bmNoYW5nZWQuPC9wPgogKi8KZnVuY3Rpb24gcHJlZ19yZXBsYWNlX2NhbGxiYWNrX2FycmF5KAogICAgYXJyYXkgJHBhdHRlcm4sCiAgICBhcnJheXxzdHJpbmcgJHN1YmplY3QsCiAgICBpbnQgJGxpbWl0ID0gLTEsCiAgICAmJGNvdW50LAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy40JyldIGludCAkZmxhZ3MgPSAwCik6IGFycmF5fHN0cmluZ3xudWxsIHt9CgovKioKICogUGVyZm9ybSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzZWFyY2ggYW5kIHJlcGxhY2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wcmVnLWZpbHRlci5waHAKICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkcGF0dGVybgogKiBAcGFyYW0gc3RyaW5nfHN0cmluZ1tdICRyZXBsYWNlbWVudAogKiBAcGFyYW0gc3RyaW5nfHN0cmluZ1tdICRzdWJqZWN0CiAqIEBwYXJhbSBpbnQgJGxpbWl0IFtvcHRpb25hbF0KICogQHBhcmFtIGludCAmJGNvdW50IFtvcHRpb25hbF0KICogQHJldHVybiBzdHJpbmd8c3RyaW5nW118bnVsbCBhbiBhcnJheSBpZiB0aGUgPGk+c3ViamVjdDwvaT4KICogcGFyYW1ldGVyIGlzIGFuIGFycmF5LCBvciBhIHN0cmluZyBvdGhlcndpc2UuCiAqIDwvcD4KICogPHA+CiAqIElmIG5vIG1hdGNoZXMgYXJlIGZvdW5kIG9yIGFuIGVycm9yIG9jY3VycmVkLCBhbiBlbXB0eSBhcnJheQogKiBpcyByZXR1cm5lZCB3aGVuIDxpPnN1YmplY3Q8L2k+IGlzIGFuIGFycmF5CiAqIG9yIDxiPk5VTEw8L2I+IG90aGVyd2lzZS4KICovCmZ1bmN0aW9uIHByZWdfZmlsdGVyKGFycmF5fHN0cmluZyAkcGF0dGVybiwgYXJyYXl8c3RyaW5nICRyZXBsYWNlbWVudCwgYXJyYXl8c3RyaW5nICRzdWJqZWN0LCBpbnQgJGxpbWl0ID0gLTEsICYkY291bnQpOiBhcnJheXxzdHJpbmd8bnVsbCB7fQoKLyoqCiAqIFNwbGl0IHN0cmluZyBieSBhIHJlZ3VsYXIgZXhwcmVzc2lvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnByZWctc3BsaXQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gPHA+CiAqIFRoZSBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IsIGFzIGEgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHN1YmplY3QgPHA+CiAqIFRoZSBpbnB1dCBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIGludCAkbGltaXQgW29wdGlvbmFsXSA8cD4KICogSWYgc3BlY2lmaWVkLCB0aGVuIG9ubHkgc3Vic3RyaW5ncyB1cCB0byA8aT5saW1pdDwvaT4KICogYXJlIHJldHVybmVkIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyBiZWluZyBwbGFjZWQgaW4gdGhlIGxhc3QKICogc3Vic3RyaW5nLiBBIDxpPmxpbWl0PC9pPiBvZiAtMSwgMCBvciA8Yj5OVUxMPC9iPiBtZWFucyAibm8gbGltaXQiCiAqIGFuZCwgYXMgaXMgc3RhbmRhcmQgYWNyb3NzIFBIUCwgeW91IGNhbiB1c2UgPGI+TlVMTDwvYj4gdG8gc2tpcCB0byB0aGUKICogPGk+ZmxhZ3M8L2k+IHBhcmFtZXRlci4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogKiA8aT5mbGFnczwvaT4gY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nCiAqIGZsYWdzIChjb21iaW5lZCB3aXRoIHRoZSB8IGJpdHdpc2Ugb3BlcmF0b3IpOgogKiA8Yj5QUkVHX1NQTElUX05PX0VNUFRZPC9iPgogKiBJZiB0aGlzIGZsYWcgaXMgc2V0LCBvbmx5IG5vbi1lbXB0eSBwaWVjZXMgd2lsbCBiZSByZXR1cm5lZCBieQogKiA8Yj5wcmVnX3NwbGl0PC9iPi4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ1tdfGZhbHNlIGFuIGFycmF5IGNvbnRhaW5pbmcgc3Vic3RyaW5ncyBvZiA8aT5zdWJqZWN0PC9pPgogKiBzcGxpdCBhbG9uZyBib3VuZGFyaWVzIG1hdGNoZWQgYnkgPGk+cGF0dGVybjwvaT4sIG9yIDxiPkZBTFNFPC9iPgogKiBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICovCiNbUHVyZV0KZnVuY3Rpb24gcHJlZ19zcGxpdChzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkc3ViamVjdCwgaW50ICRsaW1pdCA9IC0xLCBpbnQgJGZsYWdzID0gMCk6IGFycmF5fGZhbHNlIHt9CgovKioKICogUXVvdGUgcmVndWxhciBleHByZXNzaW9uIGNoYXJhY3RlcnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wcmVnLXF1b3RlLnBocAogKiBAcGFyYW0gc3RyaW5nICRzdHIgPHA+CiAqIFRoZSBpbnB1dCBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRkZWxpbWl0ZXIgW29wdGlvbmFsXSA8cD4KICogSWYgdGhlIG9wdGlvbmFsIDxpPmRlbGltaXRlcjwvaT4gaXMgc3BlY2lmaWVkLCBpdAogKiB3aWxsIGFsc28gYmUgZXNjYXBlZC4gVGhpcyBpcyB1c2VmdWwgZm9yIGVzY2FwaW5nIHRoZSBkZWxpbWl0ZXIKICogdGhhdCBpcyByZXF1aXJlZCBieSB0aGUgUENSRSBmdW5jdGlvbnMuIFRoZSAvIGlzIHRoZSBtb3N0IGNvbW1vbmx5CiAqIHVzZWQgZGVsaW1pdGVyLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIHRoZSBxdW90ZWQgKGVzY2FwZWQpIHN0cmluZy4KICovCiNbUHVyZV0KZnVuY3Rpb24gcHJlZ19xdW90ZShzdHJpbmcgJHN0ciwgP3N0cmluZyAkZGVsaW1pdGVyID0gbnVsbCk6IHN0cmluZyB7fQoKLyoqCiAqIFJldHVybiBhcnJheSBlbnRyaWVzIHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wcmVnLWdyZXAucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gPHA+CiAqIFRoZSBwYXR0ZXJuIHRvIHNlYXJjaCBmb3IsIGFzIGEgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkYXJyYXkgPHA+CiAqIFRoZSBpbnB1dCBhcnJheS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogKiBJZiBzZXQgdG8gPGI+UFJFR19HUkVQX0lOVkVSVDwvYj4sIHRoaXMgZnVuY3Rpb24gcmV0dXJucwogKiB0aGUgZWxlbWVudHMgb2YgdGhlIGlucHV0IGFycmF5IHRoYXQgZG8gbm90IG1hdGNoCiAqIHRoZSBnaXZlbiA8aT5wYXR0ZXJuPC9pPi4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIGFuIGFycmF5IGluZGV4ZWQgdXNpbmcgdGhlIGtleXMgZnJvbSB0aGUKICogPGk+aW5wdXQ8L2k+IGFycmF5IG9yIGZhbHNlIHdoZW4gcGF0dGVybiBjYW5ub3QgYmUgY29tcGlsZWQuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIHByZWdfZ3JlcChzdHJpbmcgJHBhdHRlcm4sIGFycmF5ICRhcnJheSwgaW50ICRmbGFncyA9IDApOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGVycm9yIGNvZGUgb2YgdGhlIGxhc3QgUENSRSByZWdleCBleGVjdXRpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wcmVnLWxhc3QtZXJyb3IucGhwCiAqIEByZXR1cm4gaW50IG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyAoZXhwbGFpbmVkIG9uIHRoZWlyIG93biBwYWdlKToKICogPGI+UFJFR19OT19FUlJPUjwvYj4KICogPGI+UFJFR19JTlRFUk5BTF9FUlJPUjwvYj4KICogPGI+UFJFR19CQUNLVFJBQ0tfTElNSVRfRVJST1I8L2I+IChzZWUgYWxzbyBwY3JlLmJhY2t0cmFja19saW1pdCkKICogPGI+UFJFR19SRUNVUlNJT05fTElNSVRfRVJST1I8L2I+IChzZWUgYWxzbyBwY3JlLnJlY3Vyc2lvbl9saW1pdCkKICogPGI+UFJFR19CQURfVVRGOF9FUlJPUjwvYj4KICogPGI+UFJFR19CQURfVVRGOF9PRkZTRVRfRVJST1I8L2I+IChzaW5jZSBQSFAgNS4zLjApCiAqLwojW1B1cmUodHJ1ZSldCmZ1bmN0aW9uIHByZWdfbGFzdF9lcnJvcigpOiBpbnQge30KCi8qKgogKiBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIG9mIHRoZSBsYXN0IFBDUkUgcmVnZXggZXhlY3V0aW9uCiAqCiAqIEByZXR1cm4gc3RyaW5nIG9uZSBvZiB0aGUgZXJyb3IgbWVzc2FnZXMgb3IgIk5vIGVycm9yIiBpZiB0aGVyZSBpcyBubyBlcnJvci4KICogQHNpbmNlIDguMAogKi8KI1tQdXJlKHRydWUpXQpmdW5jdGlvbiBwcmVnX2xhc3RfZXJyb3JfbXNnKCk6IHN0cmluZyB7fQoKLyoqCiAqIE9yZGVycyByZXN1bHRzIHNvIHRoYXQgJG1hdGNoZXNbMF0gaXMgYW4gYXJyYXkgb2YgZnVsbCBwYXR0ZXJuCiAqIG1hdGNoZXMsICRtYXRjaGVzWzFdIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MgbWF0Y2hlZCBieSB0aGUgZmlyc3QKICogcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJuLCBhbmQgc28gb24uIFRoaXMgZmxhZyBpcyBvbmx5IHVzZWQgd2l0aAogKiA8Yj5wcmVnX21hdGNoX2FsbDwvYj4uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNyZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BSRUdfUEFUVEVSTl9PUkRFUicsIDEpOwoKLyoqCiAqIFJldHVybmVkIGJ5IHtAc2VlIHByZWdfbGFzdF9lcnJvcigpfSBpZiB0aGUgbGFzdCBQQ1JFIGZ1bmN0aW9uIGZhaWxlZCBkdWUgdG8gbGltaXRlZCBKSVQgc3RhY2sgc3BhY2UuCiAqIEBzaW5jZSA3LjAKICovCmRlZmluZSgnUFJFR19KSVRfU1RBQ0tMSU1JVF9FUlJPUicsIDYpOwovKioKICogT3JkZXJzIHJlc3VsdHMgc28gdGhhdCAkbWF0Y2hlc1swXSBpcyBhbiBhcnJheSBvZiBmaXJzdCBzZXQgb2YKICogbWF0Y2hlcywgJG1hdGNoZXNbMV0gaXMgYW4gYXJyYXkgb2Ygc2Vjb25kIHNldCBvZiBtYXRjaGVzLCBhbmQgc28KICogb24uIFRoaXMgZmxhZyBpcyBvbmx5IHVzZWQgd2l0aCA8Yj5wcmVnX21hdGNoX2FsbDwvYj4uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNyZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BSRUdfU0VUX09SREVSJywgMik7CgovKioKICogU2VlIHRoZSBkZXNjcmlwdGlvbiBvZgogKiA8Yj5QUkVHX1NQTElUX09GRlNFVF9DQVBUVVJFPC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY3JlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUFJFR19PRkZTRVRfQ0FQVFVSRScsIDI1Nik7CgovKioKICogVGhpcyBmbGFnIHRlbGxzIDxiPnByZWdfc3BsaXQ8L2I+IHRvIHJldHVybiBvbmx5IG5vbi1lbXB0eQogKiBwaWVjZXMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNyZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BSRUdfU1BMSVRfTk9fRU1QVFknLCAxKTsKCi8qKgogKiBUaGlzIGZsYWcgdGVsbHMgPGI+cHJlZ19zcGxpdDwvYj4gdG8gY2FwdHVyZQogKiBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24gaW4gdGhlIGRlbGltaXRlciBwYXR0ZXJuIGFzIHdlbGwuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNyZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRScsIDIpOwoKLyoqCiAqIElmIHRoaXMgZmxhZyBpcyBzZXQsIGZvciBldmVyeSBvY2N1cnJpbmcgbWF0Y2ggdGhlIGFwcGVuZGFudCBzdHJpbmcKICogb2Zmc2V0IHdpbGwgYWxzbyBiZSByZXR1cm5lZC4gTm90ZSB0aGF0IHRoaXMgY2hhbmdlcyB0aGUgcmV0dXJuCiAqIHZhbHVlcyBpbiBhbiBhcnJheSB3aGVyZSBldmVyeSBlbGVtZW50IGlzIGFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdGhlCiAqIG1hdGNoZWQgc3RyaW5nIGF0IG9mZnNldCAwIGFuZCBpdHMgc3RyaW5nIG9mZnNldCB3aXRoaW4gc3ViamVjdCBhdAogKiBvZmZzZXQgMS4gVGhpcyBmbGFnIGlzIG9ubHkgdXNlZCBmb3IgPGI+cHJlZ19zcGxpdDwvYj4uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNyZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BSRUdfU1BMSVRfT0ZGU0VUX0NBUFRVUkUnLCA0KTsKZGVmaW5lKCdQUkVHX0dSRVBfSU5WRVJUJywgMSk7CgovKioKICogUmV0dXJuZWQgYnkgPGI+cHJlZ19sYXN0X2Vycm9yPC9iPiBpZiB0aGVyZSB3ZXJlIG5vCiAqIGVycm9ycy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY3JlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUFJFR19OT19FUlJPUicsIDApOwoKLyoqCiAqIFJldHVybmVkIGJ5IDxiPnByZWdfbGFzdF9lcnJvcjwvYj4gaWYgdGhlcmUgd2FzIGFuCiAqIGludGVybmFsIFBDUkUgZXJyb3IuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNyZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BSRUdfSU5URVJOQUxfRVJST1InLCAxKTsKCi8qKgogKiBSZXR1cm5lZCBieSA8Yj5wcmVnX2xhc3RfZXJyb3I8L2I+IGlmIGJhY2t0cmFjayBsaW1pdCB3YXMgZXhoYXVzdGVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjcmUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQUkVHX0JBQ0tUUkFDS19MSU1JVF9FUlJPUicsIDIpOwoKLyoqCiAqIFJldHVybmVkIGJ5IDxiPnByZWdfbGFzdF9lcnJvcjwvYj4gaWYgcmVjdXJzaW9uIGxpbWl0IHdhcyBleGhhdXN0ZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNyZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BSRUdfUkVDVVJTSU9OX0xJTUlUX0VSUk9SJywgMyk7CgovKioKICogUmV0dXJuZWQgYnkgPGI+cHJlZ19sYXN0X2Vycm9yPC9iPiBpZiB0aGUgbGFzdCBlcnJvciB3YXMKICogY2F1c2VkIGJ5IG1hbGZvcm1lZCBVVEYtOCBkYXRhIChvbmx5IHdoZW4gcnVubmluZyBhIHJlZ2V4IGluIFVURi04IG1vZGUpLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3BjcmUuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQUkVHX0JBRF9VVEY4X0VSUk9SJywgNCk7CgovKioKICogUmV0dXJuZWQgYnkgPGI+cHJlZ19sYXN0X2Vycm9yPC9iPiBpZiB0aGUgb2Zmc2V0IGRpZG4ndAogKiBjb3JyZXNwb25kIHRvIHRoZSBiZWdpbiBvZiBhIHZhbGlkIFVURi04IGNvZGUgcG9pbnQgKG9ubHkgd2hlbiBydW5uaW5nCiAqIGEgcmVnZXggaW4gVVRGLTgKICogbW9kZSkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcGNyZS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BSRUdfQkFEX1VURjhfT0ZGU0VUX0VSUk9SJywgNSk7CgovKioKICogVGhpcyBmbGFnIHRlbGxzIHtAc2VlIHByZWdfbWF0Y2goKX0gYW5kIHtAc2VlIHByZWdfbWF0Y2hfYWxsKCl9CiAqIHRvIGluY2x1ZGUgdW5tYXRjaGVkIHN1YnBhdHRlcm5zIGluIDxiPiRtYXRjaGVzPC9iPiBhcyBOVUxMIHZhbHVlcy4KICogV2l0aG91dCB0aGlzIGZsYWcsIHVubWF0Y2hlZCBzdWJwYXR0ZXJucyBhcmUgcmVwb3J0ZWQgYXMgZW1wdHkgc3RyaW5ncywKICogYXMgaWYgdGhleSB3ZXJlIGVtcHR5IG1hdGNoZXMuIFNldHRpbmcgdGhpcyBmbGFnIGFsbG93cyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZXNlIHR3byBjYXNlcy4KICogQHNpbmNlIDcuMgogKi8KZGVmaW5lKCdQUkVHX1VOTUFUQ0hFRF9BU19OVUxMJywgNTEyKTsKLyoqCiAqIFBDUkUgdmVyc2lvbiBhbmQgcmVsZWFzZSBkYXRlIChlLmcuICI3LjAgMTgtRGVjLTIwMDYiKS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wY3JlLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUENSRV9WRVJTSU9OJywgIjguMzEgMjAxMi0wNy0wNiIpOwoKLyoqCiAqIEBzaW5jZSA3LjMKICovCmRlZmluZSgnUENSRV9WRVJTSU9OX01BSk9SJywgMTApOwoKLyoqCiAqIEBzaW5jZSA3LjMKICovCmRlZmluZSgnUENSRV9WRVJTSU9OX01JTk9SJywgNDIpOwoKLyoqCiAqIEBzaW5jZSA3LjMKICovCmRlZmluZSgnUENSRV9KSVRfU1VQUE9SVCcsIDEpOwovLyBFbmQgb2YgcGNyZSB2Lgo8P3BocAoKLy8gU3RhcnQgb2Ygb2NpOCB2LjIuMC43CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cQXJyYXlTaGFwZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxEZXByZWNhdGVkOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CgovKioKICogT0NJOCBMT0IgZnVuY3Rpb25hbGl0eSBmb3IgbGFyZ2UgYmluYXJ5IChCTE9CKSBhbmQgY2hhcmFjdGVyIChDTE9CKSBvYmplY3RzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLk9DSS1Mb2IucGhwCiAqIEByZW1vdmVkIDguMAogKi8KY2xhc3MgT0NJX0xvYgp7CiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBSZXR1cm5zIGxhcmdlIG9iamVjdCdzIGNvbnRlbnRzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2IubG9hZC5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0LCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3JzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBpbnRlcm5hbCBwb2ludGVyIG9mIGxhcmdlIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLnRlbGwucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBDdXJyZW50IHBvc2l0aW9uIG9mIGEgTE9CJ3MgaW50ZXJuYWwgcG9pbnRlciBvciA8Yj5GQUxTRTwvYj4gaWYgYW4KICAgICAqIGVycm9yIG9jY3VycmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVsbCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogVHJ1bmNhdGVzIGxhcmdlIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLnRydW5jYXRlLnBocAogICAgICogQHBhcmFtIGludCAkbGVuZ3RoIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJZiBwcm92aWRlZCwgdGhpcyBtZXRob2Qgd2lsbCB0cnVuY2F0ZSB0aGUgTE9CIHRvCiAgICAgKiA8aT5sZW5ndGg8L2k+IGJ5dGVzLiBPdGhlcndpc2UsIGl0IHdpbGwgY29tcGxldGVseQogICAgICogcHVyZ2UgdGhlIExPQi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdHJ1bmNhdGUoJGxlbmd0aCA9IDApIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogRXJhc2VzIGEgc3BlY2lmaWVkIHBvcnRpb24gb2YgdGhlIGludGVybmFsIExPQiBkYXRhCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2IuZXJhc2UucGhwCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgW29wdGlvbmFsXQogICAgICogQHBhcmFtIGludCAkbGVuZ3RoIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMvYnl0ZXMgZXJhc2VkIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXJhc2UoJG9mZnNldCA9IG51bGwsICRsZW5ndGggPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIEZsdXNoZXMvd3JpdGVzIGJ1ZmZlciBvZiB0aGUgTE9CIHRvIHRoZSBzZXJ2ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi5mbHVzaC5waHAKICAgICAqIEBwYXJhbSBpbnQgJGZsYWcgW29wdGlvbmFsXSA8cD4KICAgICAqIEJ5IGRlZmF1bHQsIHJlc291cmNlcyBhcmUgbm90IGZyZWVkLCBidXQgdXNpbmcgZmxhZwogICAgICogPGI+T0NJX0xPQl9CVUZGRVJfRlJFRTwvYj4geW91IGNhbiBkbyBpdCBleHBsaWNpdGx5LgogICAgICogQmUgc3VyZSB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZyAtIG5leHQgcmVhZC93cml0ZSBvcGVyYXRpb24gdG8gdGhlCiAgICAgKiBzYW1lIHBhcnQgb2YgTE9CIHdpbGwgaW52b2x2ZSBhIHJvdW5kLXRyaXAgdG8gdGhlIHNlcnZlciBhbmQgaW5pdGlhbGl6ZQogICAgICogbmV3IGJ1ZmZlciByZXNvdXJjZXMuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZQogICAgICogPGI+T0NJX0xPQl9CVUZGRVJfRlJFRTwvYj4gZmxhZyBvbmx5IHdoZW4geW91IGFyZSBub3QKICAgICAqIGdvaW5nIHRvIHdvcmsgd2l0aCB0aGUgTE9CIGFueW1vcmUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogUmV0dXJucyA8Yj5GQUxTRTwvYj4gaWYgYnVmZmVyaW5nIHdhcyBub3QgZW5hYmxlZCBvciBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZsdXNoKCRmbGFnID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBDaGFuZ2VzIGN1cnJlbnQgc3RhdGUgb2YgYnVmZmVyaW5nIGZvciB0aGUgbGFyZ2Ugb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2Iuc2V0YnVmZmVyaW5nLnBocAogICAgICogQHBhcmFtIGJvb2wgJG9uX29mZiA8cD4KICAgICAqIDxiPlRSVUU8L2I+IGZvciBvbiBhbmQgPGI+RkFMU0U8L2I+IGZvciBvZmYuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4gUmVwZWF0ZWQgY2FsbHMgdG8gdGhpcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBmbGFnIHdpbGwKICAgICAqIHJldHVybiA8Yj5UUlVFPC9iPi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGJ1ZmZlcmluZygkb25fb2ZmKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIFJldHVybnMgY3VycmVudCBzdGF0ZSBvZiBidWZmZXJpbmcgZm9yIHRoZSBsYXJnZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi5nZXRidWZmZXJpbmcucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+RkFMU0U8L2I+IGlmIGJ1ZmZlcmluZyBmb3IgdGhlIGxhcmdlIG9iamVjdCBpcyBvZmYgYW5kIDxiPlRSVUU8L2I+IGlmCiAgICAgKiBidWZmZXJpbmcgaXMgdXNlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldGJ1ZmZlcmluZygpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogTW92ZXMgdGhlIGludGVybmFsIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGFyZ2Ugb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2IucmV3aW5kLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIFJlYWRzIHBhcnQgb2YgdGhlIGxhcmdlIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLnJlYWQucGhwCiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGggPHA+CiAgICAgKiBUaGUgbGVuZ3RoIG9mIGRhdGEgdG8gcmVhZCwgaW4gYnl0ZXMuIExhcmdlIHZhbHVlcyB3aWxsIGJlIHJvdW5kZWQgZG93biB0byAxIE1CLgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGNvbnRlbnRzIGFzIGEgc3RyaW5nLCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGxlbmd0aCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBUZXN0cyBmb3IgZW5kLW9mLWZpbGUgb24gYSBsYXJnZSBvYmplY3QncyBkZXNjcmlwdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2IuZW9mLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIGludGVybmFsIHBvaW50ZXIgb2YgbGFyZ2Ugb2JqZWN0IGlzIGF0IHRoZSBlbmQgb2YgTE9CLgogICAgICogT3RoZXJ3aXNlIHJldHVybnMgPGI+RkFMU0U8L2I+LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW9mKCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbnRlcm5hbCBwb2ludGVyIG9mIHRoZSBsYXJnZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi5zZWVrLnBocAogICAgICogQHBhcmFtIGludCAkb2Zmc2V0IDxwPgogICAgICogSW5kaWNhdGVzIHRoZSBhbW91bnQgb2YgYnl0ZXMsIG9uIHdoaWNoIGludGVybmFsIHBvaW50ZXIgc2hvdWxkIGJlCiAgICAgKiBtb3ZlZCBmcm9tIHRoZSBwb3NpdGlvbiwgcG9pbnRlZCBieSA8aT53aGVuY2U8L2k+LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkd2hlbmNlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBNYXkgYmUgb25lIG9mOgogICAgICogPGI+T0NJX1NFRUtfU0VUPC9iPiAtIHNldHMgdGhlIHBvc2l0aW9uIGVxdWFsIHRvCiAgICAgKiA8aT5vZmZzZXQ8L2k+CiAgICAgKiA8Yj5PQ0lfU0VFS19DVVI8L2I+IC0gYWRkcyA8aT5vZmZzZXQ8L2k+CiAgICAgKiBieXRlcyB0byB0aGUgY3VycmVudCBwb3NpdGlvbgogICAgICogPGI+T0NJX1NFRUtfRU5EPC9iPiAtIGFkZHMgPGk+b2Zmc2V0PC9pPgogICAgICogYnl0ZXMgdG8gdGhlIGVuZCBvZiBsYXJnZSBvYmplY3QgKHVzZSBuZWdhdGl2ZSB2YWx1ZSB0byBtb3ZlIHRvIGEgcG9zaXRpb24KICAgICAqIGJlZm9yZSB0aGUgZW5kIG9mIGxhcmdlIG9iamVjdCkKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2Vlaygkb2Zmc2V0LCAkd2hlbmNlID0gT0NJX1NFRUtfU0VUKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIFdyaXRlcyBkYXRhIHRvIHRoZSBsYXJnZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi53cml0ZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgPHA+CiAgICAgKiBUaGUgZGF0YSB0byB3cml0ZSBpbiB0aGUgTE9CLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkbGVuZ3RoIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBnaXZlbiwgd3JpdGluZyB3aWxsIHN0b3AgYWZ0ZXIKICAgICAqIDxpPmxlbmd0aDwvaT4gYnl0ZXMgaGF2ZSBiZWVuIHdyaXR0ZW4gb3IgdGhlIGVuZCBvZgogICAgICogPGk+ZGF0YTwvaT4gaXMgcmVhY2hlZCwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJGRhdGEsICRsZW5ndGggPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIEFwcGVuZHMgZGF0YSBmcm9tIHRoZSBsYXJnZSBvYmplY3QgdG8gYW5vdGhlciBsYXJnZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi5hcHBlbmQucGhwCiAgICAgKiBAcGFyYW0gT0NJX0xvYiAkbG9iX2Zyb20gPHA+CiAgICAgKiBUaGUgY29waWVkIExPQi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09DSUxvYiddLCBkZWZhdWx0OiAnT0NJX0xvYicpXSAkbG9iX2Zyb20pIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogUmV0dXJucyBzaXplIG9mIGxhcmdlIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLnNpemUucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBMZW5ndGggb2YgbGFyZ2Ugb2JqZWN0IHZhbHVlIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogRW1wdHkgb2JqZWN0cyBoYXZlIHplcm8gbGVuZ3RoLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2l6ZSgpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogQWxpYXMgb2Yge0BzZWUgT0NJX0xvYjo6ZXhwb3J0fQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLndyaXRldG9maWxlLnBocAogICAgICogQHBhcmFtICRmaWxlbmFtZQogICAgICogQHBhcmFtICRzdGFydCBbb3B0aW9uYWxdCiAgICAgKiBAcGFyYW0gJGxlbmd0aCBbb3B0aW9uYWxdCiAgICAgKiBAcmV0dXJuIGJvb2wgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZXRvZmlsZSgkZmlsZW5hbWUsICRzdGFydCwgJGxlbmd0aCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBFeHBvcnRzIExPQidzIGNvbnRlbnRzIHRvIGEgZmlsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLmV4cG9ydC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIDxwPgogICAgICogUGF0aCB0byB0aGUgZmlsZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJHN0YXJ0IFtvcHRpb25hbF0gPHA+CiAgICAgKiBJbmRpY2F0ZXMgZnJvbSB3aGVyZSB0byBzdGFydCBleHBvcnRpbmcuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGggW29wdGlvbmFsXSA8cD4KICAgICAqIEluZGljYXRlcyB0aGUgbGVuZ3RoIG9mIGRhdGEgdG8gYmUgZXhwb3J0ZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4cG9ydCgkZmlsZW5hbWUsICRzdGFydCA9IG51bGwsICRsZW5ndGggPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIEltcG9ydHMgZmlsZSBkYXRhIHRvIHRoZSBMT0IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi5pbXBvcnQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICAgICAqIFBhdGggdG8gdGhlIGZpbGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGltcG9ydCgkZmlsZW5hbWUpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogV3JpdGVzIGEgdGVtcG9yYXJ5IGxhcmdlIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLndyaXRldGVtcG9yYXJ5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICAgICAqIFRoZSBkYXRhIHRvIHdyaXRlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkbG9iX3R5cGUgW29wdGlvbmFsXSA8cD4KICAgICAqIENhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgICAqIDxiPk9DSV9URU1QX0JMT0I8L2I+IGlzIHVzZWQgdG8gY3JlYXRlIHRlbXBvcmFyeSBCTE9CcwogICAgICogPGI+T0NJX1RFTVBfQ0xPQjwvYj4gaXMgdXNlZCB0byBjcmVhdGUKICAgICAqIHRlbXBvcmFyeSBDTE9CcwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZVRlbXBvcmFyeSgkZGF0YSwgJGxvYl90eXBlID0gT0NJX1RFTVBfQ0xPQikge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBDbG9zZXMgTE9CIGRlc2NyaXB0b3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi5jbG9zZS5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIFNhdmVzIGRhdGEgdG8gdGhlIGxhcmdlIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLnNhdmUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPgogICAgICogVGhlIGRhdGEgdG8gYmUgc2F2ZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgW29wdGlvbmFsXSA8cD4KICAgICAqIENhbiBiZSB1c2VkIHRvIGluZGljYXRlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxhcmdlIG9iamVjdC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkZGF0YSwgJG9mZnNldCA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogQWxpYXMgb2Yge0BzZWUgT0NJX0xvYjo6aW1wb3J0fQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLnNhdmVmaWxlLnBocAogICAgICogQHBhcmFtICRmaWxlbmFtZQogICAgICogQHJldHVybiBib29sIFJldHVybiB0cnVlIG9uIHN1Y2Nlc3MgYW5kIGZhbHNlIG9uIGZhaWx1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmVmaWxlKCRmaWxlbmFtZSkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBGcmVlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBMT0IgZGVzY3JpcHRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLmZyZWUucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyZWUoKSB7fQp9CgovKioKICogT0NJOCBDb2xsZWN0aW9uIGZ1bmN0aW9uYWxpdHkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuT0NJLUNvbGxlY3Rpb24ucGhwCiAqIEByZW1vdmVkIDguMAogKi8KY2xhc3MgT0NJX0NvbGxlY3Rpb24KewogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogQXBwZW5kcyBlbGVtZW50IHRvIHRoZSBjb2xsZWN0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1jb2xsZWN0aW9uLmFwcGVuZC5waHAKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgPHA+CiAgICAgKiBUaGUgdmFsdWUgdG8gYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uIENhbiBiZSBhIHN0cmluZyBvciBhIG51bWJlci4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKCR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBSZXR1cm5zIHZhbHVlIG9mIHRoZSBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1jb2xsZWN0aW9uLmdldGVsZW0ucGhwCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCA8cD4KICAgICAqIFRoZSBlbGVtZW50IGluZGV4LiBGaXJzdCBpbmRleCBpcyAwLgogICAgICogPC9wPgogICAgICogQHJldHVybiBtaXhlZCA8Yj5GQUxTRTwvYj4gaWYgc3VjaCBlbGVtZW50IGRvZXNuJ3QgZXhpc3Q7IDxiPk5VTEw8L2I+IGlmIGVsZW1lbnQgaXMgPGI+TlVMTDwvYj47CiAgICAgKiBzdHJpbmcgaWYgZWxlbWVudCBpcyBjb2x1bW4gb2YgYSBzdHJpbmcgZGF0YXR5cGUgb3IgbnVtYmVyIGlmIGVsZW1lbnQgaXMKICAgICAqIG51bWVyaWMgZmllbGQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRlbGVtKCRpbmRleCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBBc3NpZ25zIGEgdmFsdWUgdG8gdGhlIGVsZW1lbnQgb2YgdGhlIGNvbGxlY3Rpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWNvbGxlY3Rpb24uYXNzaWduZWxlbS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4IDxwPgogICAgICogVGhlIGVsZW1lbnQgaW5kZXguIEZpcnN0IGluZGV4IGlzIDAuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIDxwPgogICAgICogQ2FuIGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhc3NpZ25lbGVtKCRpbmRleCwgJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIEFzc2lnbnMgYSB2YWx1ZSB0byB0aGUgY29sbGVjdGlvbiBmcm9tIGFub3RoZXIgZXhpc3RpbmcgY29sbGVjdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktY29sbGVjdGlvbi5hc3NpZ24ucGhwCiAgICAgKiBAcGFyYW0gT0NJX0NvbGxlY3Rpb24gJGZyb20gPHA+CiAgICAgKiBBbiBpbnN0YW5jZSBvZiBPQ0ktQ29sbGVjdGlvbi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzaWduKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09DSUNvbGxlY3Rpb24nXSwgZGVmYXVsdDogJ09DSV9Db2xsZWN0aW9uJyldICRmcm9tKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIFJldHVybnMgc2l6ZSBvZiB0aGUgY29sbGVjdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktY29sbGVjdGlvbi5zaXplLnBocAogICAgICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgY29sbGVjdGlvbiBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaXplKCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgY29sbGVjdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktY29sbGVjdGlvbi5tYXgucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgbWF4aW11bSBudW1iZXIgYXMgYW4gaW50ZWdlciwgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9ycy4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzIDAsIHRoZW4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpcyBub3QgbGltaXRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1heCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogVHJpbXMgZWxlbWVudHMgZnJvbSB0aGUgZW5kIG9mIHRoZSBjb2xsZWN0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1jb2xsZWN0aW9uLnRyaW0ucGhwCiAgICAgKiBAcGFyYW0gaW50ICRudW0gPHA+CiAgICAgKiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIHRyaW1tZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyaW0oJG51bSkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBGcmVlcyB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29sbGVjdGlvbiBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWNvbGxlY3Rpb24uZnJlZS5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZnJlZSgpIHt9Cn0KCi8qKgogKiBSZWdpc3RlciBhIHVzZXItZGVmaW5lZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgT3JhY2xlIERhdGFiYXNlIFRBRi4KICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLXJlZ2lzdGVyLXRhZi1jYWxsYmFjay5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBBbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAkY2FsbGJhY2tGbiBbb3B0aW9uYWxdIDxwPgogKiBBIHVzZXItZGVmaW5lZCBjYWxsYmFjayB0byByZWdpc3RlciBmb3IgT3JhY2xlIFRBRi4gSXQgY2FuIGJlIGEgc3RyaW5nIG9mIHRoZSBmdW5jdGlvbiBuYW1lIG9yIGEgQ2xvc3VyZSAoYW5vbnltb3VzIGZ1bmN0aW9uKS48YnIvPgogKiBUaGUgaW50ZXJmYWNlIG9mIGEgVEFGIHVzZXItZGVmaW5lZCBjYWxsYmFjayBmdW5jdGlvbiBpcyBhcyBmb2xsb3dzOjxici8+CiAqIDxpPnVzZXJDYWxsYmFja0ZuICggcmVzb3VyY2UgJGNvbm5lY3Rpb24gLCBpbnQgJGV2ZW50ICwgaW50ICR0eXBlICkgOiBpbnQ8L2k+PGJyLz4KICogU2VlIHRoZSBwYXJhbWV0ZXIgZGVzY3JpcHRpb24gYW5kIGFuIGV4YW1wbGUgb24gPGEgaHJlZj0iaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vb2NpOC50YWYucGhwIj5PQ0k4IFRyYW5zcGFyZW50IEFwcGxpY2F0aW9uIEZhaWxvdmVyIChUQUYpIFN1cHBvcnQ8L2E+IHBhZ2UuCiAqIDwvcD4KICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBvY2lfcmVnaXN0ZXJfdGFmX2NhbGxiYWNrKCRjb25uZWN0aW9uLCAkY2FsbGJhY2tGbikge30KCi8qKgogKiBVbnJlZ2lzdGVyIGEgdXNlci1kZWZpbmVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBPcmFjbGUgRGF0YWJhc2UgVEFGLgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktdW5yZWdpc3Rlci10YWYtY2FsbGJhY2sucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogQW4gT3JhY2xlIGNvbm5lY3Rpb24gaWRlbnRpZmllci4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUuCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIG9jaV91bnJlZ2lzdGVyX3RhZl9jYWxsYmFjaygkY29ubmVjdGlvbikge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogKiBBc3NvY2lhdGVzIGEgUEhQIHZhcmlhYmxlIHdpdGggYSBjb2x1bW4gZm9yIHF1ZXJ5IGZldGNoZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktZGVmaW5lLWJ5LW5hbWUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IDxwPkEgdmFsaWQgT0NJOCBzdGF0ZW1lbnQKICogaWRlbnRpZmllciBjcmVhdGVkIGJ5IHtAc2VlIG9jaV9wYXJzZX0gYW5kIGV4ZWN1dGVkCiAqIGJ5IHtAc2VlIG9jaV9leGVjdXRlfSwgb3IgYSBSRUYKICogQ1VSU09SIHN0YXRlbWVudCBpZGVudGlmaWVyLjwvcD4KICogQHBhcmFtIHN0cmluZyAkY29sdW1uX25hbWUgPHA+CiAqIFRoZSBjb2x1bW4gbmFtZSB1c2VkIGluIHRoZSBxdWVyeS4KICogPC9wPgogKiA8cD4KICogVXNlIHVwcGVyY2FzZSBmb3IgT3JhY2xlJ3MgZGVmYXVsdCwgbm9uLWNhc2Ugc2Vuc2l0aXZlIGNvbHVtbgogKiBuYW1lcy4gVXNlIHRoZSBleGFjdCBjb2x1bW4gbmFtZSBjYXNlIGZvciBjYXNlLXNlbnNpdGl2ZQogKiBjb2x1bW4gbmFtZXMuCiAqIDwvcD4KICogQHBhcmFtIG1peGVkICYkdmFyaWFibGUgPHA+CiAqIFRoZSBQSFAgdmFyaWFibGUgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJldHVybmVkIGNvbHVtbiB2YWx1ZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICR0eXBlIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBkYXRhIHR5cGUgdG8gYmUgcmV0dXJuZWQuIEdlbmVyYWxseSBub3QgbmVlZGVkLiBOb3RlIHRoYXQKICogT3JhY2xlLXN0eWxlIGRhdGEgY29udmVyc2lvbnMgYXJlIG5vdCBwZXJmb3JtZWQuIEZvciBleGFtcGxlLAogKiBTUUxUX0lOVCB3aWxsIGJlIGlnbm9yZWQgYW5kIHRoZSByZXR1cm5lZAogKiBkYXRhIHR5cGUgd2lsbCBzdGlsbCBiZSBTUUxUX0NIUi4KICogPC9wPgogKiA8cD4KICogWW91IGNhbiBvcHRpb25hbGx5IHVzZSB7QHNlZSBvY2lfbmV3X2Rlc2NyaXB0b3J9CiAqIHRvIGFsbG9jYXRlIExPQi9ST1dJRC9CRklMRSBkZXNjcmlwdG9ycy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9jaV9kZWZpbmVfYnlfbmFtZSgkc3RhdGVtZW50LCAkY29sdW1uX25hbWUsICYkdmFyaWFibGUsICR0eXBlID0gU1FMVF9DSFIpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogQmluZHMgYSBQSFAgdmFyaWFibGUgdG8gYW4gT3JhY2xlIHBsYWNlaG9sZGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLWJpbmQtYnktbmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgPHA+CiAqIEEgdmFsaWQgT0NJOCBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRidl9uYW1lIDxwPgogKiBUaGUgY29sb24tcHJlZml4ZWQgYmluZCB2YXJpYWJsZSBwbGFjZWhvbGRlciB1c2VkIGluIHRoZQogKiBzdGF0ZW1lbnQuIFRoZSBjb2xvbiBpcyBvcHRpb25hbAogKiBpbiA8aT5idl9uYW1lPC9pPi4gT3JhY2xlIGRvZXMgbm90IHVzZSBxdWVzdGlvbgogKiBtYXJrcyBmb3IgcGxhY2Vob2xkZXJzLgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAmJHZhcmlhYmxlIDxwPgogKiBUaGUgUEhQIHZhcmlhYmxlIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCA8aT5idl9uYW1lPC9pPgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG1heGxlbmd0aCBbb3B0aW9uYWxdIDxwPgogKiBTZXRzIHRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgdGhlIGRhdGEuIElmIHlvdSBzZXQgaXQgdG8gLTEsIHRoaXMKICogZnVuY3Rpb24gd2lsbCB1c2UgdGhlIGN1cnJlbnQgbGVuZ3RoCiAqIG9mIDxpPnZhcmlhYmxlPC9pPiB0byBzZXQgdGhlIG1heGltdW0KICogbGVuZ3RoLiBJbiB0aGlzIGNhc2UgdGhlIDxpPnZhcmlhYmxlPC9pPiBtdXN0CiAqIGV4aXN0IGFuZCBjb250YWluIGRhdGEKICogd2hlbiB7QHNlZSBvY2lfYmluZF9ieV9uYW1lfSBpcyBjYWxsZWQuCiAqIDwvcD4KICogQHBhcmFtIGludCAkdHlwZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgZGF0YXR5cGUgdGhhdCBPcmFjbGUgd2lsbCB0cmVhdCB0aGUgZGF0YSBhcy4gVGhlCiAqIGRlZmF1bHQgPGk+dHlwZTwvaT4gdXNlZAogKiBpcyA8Yj5TUUxUX0NIUjwvYj4uIE9yYWNsZSB3aWxsIGNvbnZlcnQgdGhlIGRhdGEKICogYmV0d2VlbiB0aGlzIHR5cGUgYW5kIHRoZSBkYXRhYmFzZSBjb2x1bW4gKG9yIFBML1NRTCB2YXJpYWJsZQogKiB0eXBlKSwgd2hlbiBwb3NzaWJsZS4KICogPC9wPgogKiA8cD4KICogSWYgeW91IG5lZWQgdG8gYmluZCBhbiBhYnN0cmFjdCBkYXRhdHlwZSAoTE9CL1JPV0lEL0JGSUxFKSB5b3UKICogbmVlZCB0byBhbGxvY2F0ZSBpdCBmaXJzdCB1c2luZyB0aGUKICoge0BzZWUgb2NpX25ld19kZXNjcmlwdG9yfSBmdW5jdGlvbi4gVGhlCiAqIDxpPmxlbmd0aDwvaT4gaXMgbm90IHVzZWQgZm9yIGFic3RyYWN0IGRhdGF0eXBlcwogKiBhbmQgc2hvdWxkIGJlIHNldCB0byAtMS4KICogPC9wPgogKiA8cD4KICogUG9zc2libGUgdmFsdWVzIGZvciA8aT50eXBlPC9pPiBhcmU6CiAqIDwvcD4KICogPHA+CiAqIDxiPlNRTFRfQkZJTEVFPC9iPiBvciA8Yj5PQ0lfQl9CRklMRTwvYj4KICogLSBmb3IgQkZJTEVzOwogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gb2NpX2JpbmRfYnlfbmFtZSgkc3RhdGVtZW50LCAkYnZfbmFtZSwgJiR2YXJpYWJsZSwgJG1heGxlbmd0aCA9IC0xLCAkdHlwZSA9IFNRTFRfQ0hSKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCBPQ0k4ICZndDs9IDEuMi4wKTxici8+CiAqIEJpbmRzIGEgUEhQIGFycmF5IHRvIGFuIE9yYWNsZSBQTC9TUUwgYXJyYXkgcGFyYW1ldGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLWJpbmQtYXJyYXktYnktbmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgPHA+CiAqIEEgdmFsaWQgT0NJIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAqIFRoZSBPcmFjbGUgcGxhY2Vob2xkZXIuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICYkdmFyX2FycmF5IDxwPgogKiBBbiBhcnJheS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtYXhfdGFibGVfbGVuZ3RoIDxwPgogKiBTZXRzIHRoZSBtYXhpbXVtIGxlbmd0aCBib3RoIGZvciBpbmNvbWluZyBhbmQgcmVzdWx0IGFycmF5cy4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtYXhfaXRlbV9sZW5ndGggW29wdGlvbmFsXSA8cD4KICogU2V0cyBtYXhpbXVtIGxlbmd0aCBmb3IgYXJyYXkgaXRlbXMuIElmIG5vdCBzcGVjaWZpZWQgb3IgZXF1YWxzIHRvIC0xLAogKiB7QHNlZSBvY2lfYmluZF9hcnJheV9ieV9uYW1lfSB3aWxsIGZpbmQgdGhlIGxvbmdlc3QKICogZWxlbWVudCBpbiB0aGUgaW5jb21pbmcgYXJyYXkgYW5kIHdpbGwgdXNlIGl0IGFzIHRoZSBtYXhpbXVtIGxlbmd0aC4KICogPC9wPgogKiBAcGFyYW0gaW50ICR0eXBlIFtvcHRpb25hbF0gPHA+CiAqIFNob3VsZCBiZSB1c2VkIHRvIHNldCB0aGUgdHlwZSBvZiBQTC9TUUwgYXJyYXkgaXRlbXMuIFNlZSBsaXN0IG9mCiAqIGF2YWlsYWJsZSB0eXBlcyBiZWxvdzoKICogPC9wPgogKiA8cD4KICogPGI+U1FMVF9OVU08L2I+IC0gZm9yIGFycmF5cyBvZiBOVU1CRVIuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvY2lfYmluZF9hcnJheV9ieV9uYW1lKCRzdGF0ZW1lbnQsICRuYW1lLCBhcnJheSAmJHZhcl9hcnJheSwgJG1heF90YWJsZV9sZW5ndGgsICRtYXhfaXRlbV9sZW5ndGggPSAtMSwgJHR5cGUgPSBTUUxUX0FGQykge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogKiBDaGVja3MgaWYgYSBmaWVsZCBpbiB0aGUgY3VycmVudGx5IGZldGNoZWQgcm93IDxiPk5VTEw8L2I+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLWZpZWxkLWlzLW51bGwucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IDxwPgogKiBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogPC9wPgogKiBAcGFyYW0gbWl4ZWQgJGZpZWxkIDxwPgogKiBDYW4gYmUgYSBmaWVsZCdzIGluZGV4IG9yIGEgZmllbGQncyBuYW1lICh1cHBlcmNhc2VkKS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gaWYgPGk+ZmllbGQ8L2k+IGlzIDxiPk5VTEw8L2I+LCA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlLgogKi8KZnVuY3Rpb24gb2NpX2ZpZWxkX2lzX251bGwoJHN0YXRlbWVudCwgJGZpZWxkKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIFJldHVybnMgdGhlIG5hbWUgb2YgYSBmaWVsZCBmcm9tIHRoZSBzdGF0ZW1lbnQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktZmllbGQtbmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgPHA+CiAqIEEgdmFsaWQgT0NJIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8aW50ICRmaWVsZCA8cD4KICogQ2FuIGJlIHRoZSBmaWVsZCdzIGluZGV4ICgxLWJhc2VkKSBvciBuYW1lLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBuYW1lIGFzIGEgc3RyaW5nLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3JzLgogKi8KZnVuY3Rpb24gb2NpX2ZpZWxkX25hbWUoJHN0YXRlbWVudCwgJGZpZWxkKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIFJldHVybnMgZmllbGQncyBzaXplCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLWZpZWxkLXNpemUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IDxwPgogKiBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogPC9wPgogKiBAcGFyYW0gbWl4ZWQgJGZpZWxkIDxwPgogKiBDYW4gYmUgdGhlIGZpZWxkJ3MgaW5kZXggKDEtYmFzZWQpIG9yIG5hbWUuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIHNpemUgb2YgYSA8aT5maWVsZDwvaT4gaW4gYnl0ZXMsIG9yIDxiPkZBTFNFPC9iPiBvbgogKiBlcnJvcnMuCiAqLwpmdW5jdGlvbiBvY2lfZmllbGRfc2l6ZSgkc3RhdGVtZW50LCAkZmllbGQpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogVGVsbCB0aGUgc2NhbGUgb2YgdGhlIGZpZWxkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLWZpZWxkLXNjYWxlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCA8cD4KICogQSB2YWxpZCBPQ0kgc3RhdGVtZW50IGlkZW50aWZpZXIuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xpbnQgJGZpZWxkIDxwPgogKiBDYW4gYmUgdGhlIGZpZWxkJ3MgaW5kZXggKDEtYmFzZWQpIG9yIG5hbWUuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIHNjYWxlIGFzIGFuIGludGVnZXIsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvcnMuCiAqLwpmdW5jdGlvbiBvY2lfZmllbGRfc2NhbGUoJHN0YXRlbWVudCwgJGZpZWxkKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIFRlbGwgdGhlIHByZWNpc2lvbiBvZiBhIGZpZWxkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLWZpZWxkLXByZWNpc2lvbi5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgPHA+CiAqIEEgdmFsaWQgT0NJIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8aW50ICRmaWVsZCA8cD4KICogQ2FuIGJlIHRoZSBmaWVsZCdzIGluZGV4ICgxLWJhc2VkKSBvciBuYW1lLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBwcmVjaXNpb24gYXMgYW4gaW50ZWdlciwgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9ycy4KICovCmZ1bmN0aW9uIG9jaV9maWVsZF9wcmVjaXNpb24oJHN0YXRlbWVudCwgJGZpZWxkKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIFJldHVybnMgZmllbGQncyBkYXRhIHR5cGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktZmllbGQtdHlwZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgPHA+CiAqIEEgdmFsaWQgT0NJIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8aW50ICRmaWVsZCA8cD4KICogQ2FuIGJlIHRoZSBmaWVsZCdzIGluZGV4ICgxLWJhc2VkKSBvciBuYW1lLgogKiA8L3A+CiAqIEByZXR1cm4gbWl4ZWQgdGhlIGZpZWxkIGRhdGEgdHlwZSBhcyBhIHN0cmluZywgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9ycy4KICovCmZ1bmN0aW9uIG9jaV9maWVsZF90eXBlKCRzdGF0ZW1lbnQsICRmaWVsZCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogKiBUZWxsIHRoZSByYXcgT3JhY2xlIGRhdGEgdHlwZSBvZiB0aGUgZmllbGQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktZmllbGQtdHlwZS1yYXcucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IDxwPgogKiBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmaWVsZCA8cD4KICogQ2FuIGJlIHRoZSBmaWVsZCdzIGluZGV4ICgxLWJhc2VkKSBvciBuYW1lLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIE9yYWNsZSdzIHJhdyBkYXRhIHR5cGUgYXMgYSBzdHJpbmcsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvcnMuCiAqLwpmdW5jdGlvbiBvY2lfZmllbGRfdHlwZV9yYXcoJHN0YXRlbWVudCwgJGZpZWxkKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIEV4ZWN1dGVzIGEgc3RhdGVtZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLWV4ZWN1dGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IDxwPgogKiBBIHZhbGlkIE9DSSBzdGF0ZW1lbnQgaWRlbnRpZmllci4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtb2RlIFtvcHRpb25hbF0gPHA+CiAqIEFuIG9wdGlvbmFsIHNlY29uZCBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICogPHRhYmxlPgogKiBFeGVjdXRpb24gTW9kZXMKICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkNvbnN0YW50PC90ZD4KICogPHRkPkRlc2NyaXB0aW9uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPk9DSV9DT01NSVRfT05fU1VDQ0VTUzwvYj48L3RkPgogKiA8dGQ+QXV0b21hdGljYWxseSBjb21taXQgYWxsIG91dHN0YW5kaW5nIGNoYW5nZXMgZm9yCiAqIHRoaXMgY29ubmVjdGlvbiB3aGVuIHRoZSBzdGF0ZW1lbnQgaGFzIHN1Y2NlZWRlZC4gVGhpcwogKiBpcyB0aGUgZGVmYXVsdC48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+T0NJX0RFU0NSSUJFX09OTFk8L2I+PC90ZD4KICogPHRkPk1ha2UgcXVlcnkgbWV0YSBkYXRhIGF2YWlsYWJsZSB0byBmdW5jdGlvbnMKICogbGlrZSB7QHNlZSBvY2lfZmllbGRfbmFtZX0gYnV0IGRvIG5vdAogKiBjcmVhdGUgYSByZXN1bHQgc2V0LiBBbnkgc3Vic2VxdWVudCBmZXRjaCBjYWxsIHN1Y2gKICogYXMge0BzZWUgb2NpX2ZldGNoX2FycmF5fSB3aWxsCiAqIGZhaWwuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPk9DSV9OT19BVVRPX0NPTU1JVDwvYj48L3RkPgogKiA8dGQ+RG8gbm90IGF1dG9tYXRpY2FsbHkgY29tbWl0IGNoYW5nZXMuIFByaW9yIHRvIFBIUAogKiA1LjMuMiAoUEVDTCBPQ0k4IDEuNCkKICogdXNlIDxiPk9DSV9ERUZBVUxUPC9iPiB3aGljaCBpcyBlcXVpdmFsZW50CiAqIHRvIDxiPk9DSV9OT19BVVRPX0NPTU1JVDwvYj4uPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICogPC9wPgogKiA8cD4KICogVXNpbmcgPGI+T0NJX05PX0FVVE9fQ09NTUlUPC9iPiBtb2RlIHN0YXJ0cyBvciBjb250aW51ZXMgYQogKiB0cmFuc2FjdGlvbi4gVHJhbnNhY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IHJvbGxlZCBiYWNrIHdoZW4KICogdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLCBvciB3aGVuIHRoZSBzY3JpcHQgZW5kcy4gRXhwbGljaXRseQogKiBjYWxsIHtAc2VlIG9jaV9jb21taXR9IHRvIGNvbW1pdCBhIHRyYW5zYWN0aW9uLAogKiBvciB7QHNlZSBvY2lfcm9sbGJhY2t9IHRvIGFib3J0IGl0LgogKiA8L3A+CiAqIDxwPgogKiBXaGVuIGluc2VydGluZyBvciB1cGRhdGluZyBkYXRhLCB1c2luZyB0cmFuc2FjdGlvbnMgaXMKICogcmVjb21tZW5kZWQgZm9yIHJlbGF0aW9uYWwgZGF0YSBjb25zaXN0ZW5jeSBhbmQgZm9yIHBlcmZvcm1hbmNlCiAqIHJlYXNvbnMuCiAqIDwvcD4KICogPHA+CiAqIElmIDxiPk9DSV9OT19BVVRPX0NPTU1JVDwvYj4gbW9kZSBpcyB1c2VkIGZvciBhbnkKICogc3RhdGVtZW50IGluY2x1ZGluZyBxdWVyaWVzLCBhbmQKICoge0BzZWUgb2NpX2NvbW1pdH0KICogb3Ige0BzZWUgb2NpX3JvbGxiYWNrfSBpcyBub3Qgc3Vic2VxdWVudGx5CiAqIGNhbGxlZCwgdGhlbiBPQ0k4IHdpbGwgcGVyZm9ybSBhIHJvbGxiYWNrIGF0IHRoZSBlbmQgb2YgdGhlCiAqIHNjcmlwdCBldmVuIGlmIG5vIGRhdGEgd2FzIGNoYW5nZWQuIFRvIGF2b2lkIGFuIHVubmVjZXNzYXJ5CiAqIHJvbGxiYWNrLCBtYW55IHNjcmlwdHMgZG8gbm90CiAqIHVzZSA8Yj5PQ0lfTk9fQVVUT19DT01NSVQ8L2I+IG1vZGUgZm9yIHF1ZXJpZXMgb3IKICogUEwvU1FMLiBCZSBjYXJlZnVsIHRvIGVuc3VyZSB0aGUgYXBwcm9wcmlhdGUgdHJhbnNhY3Rpb25hbAogKiBjb25zaXN0ZW5jeSBmb3IgdGhlIGFwcGxpY2F0aW9uIHdoZW4KICogdXNpbmcge0BzZWUgb2NpX2V4ZWN1dGV9IHdpdGggZGlmZmVyZW50IG1vZGVzIGluCiAqIHRoZSBzYW1lIHNjcmlwdC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9jaV9leGVjdXRlKCRzdGF0ZW1lbnQsICRtb2RlID0gT0NJX0NPTU1JVF9PTl9TVUNDRVNTKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIENhbmNlbHMgcmVhZGluZyBmcm9tIGN1cnNvcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1jYW5jZWwucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IDxwPgogKiBBbiBPQ0kgc3RhdGVtZW50LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gb2NpX2NhbmNlbCgkc3RhdGVtZW50KSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIEZldGNoZXMgdGhlIG5leHQgcm93IGZyb20gYSBxdWVyeSBpbnRvIGludGVybmFsIGJ1ZmZlcnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktZmV0Y2gucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IDxwPkEgdmFsaWQgT0NJOCBzdGF0ZW1lbnQKICogaWRlbnRpZmllciBjcmVhdGVkIGJ5IHtAc2VlIG9jaV9wYXJzZX0gYW5kIGV4ZWN1dGVkCiAqIGJ5IHtAc2VlIG9jaV9leGVjdXRlfSwgb3IgYSBSRUYKICogQ1VSU09SIHN0YXRlbWVudCBpZGVudGlmaWVyLjwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IGlmIHRoZXJlIGFyZSBubyBtb3JlIHJvd3MgaW4gdGhlCiAqIDxpPnN0YXRlbWVudDwvaT4uCiAqLwpmdW5jdGlvbiBvY2lfZmV0Y2goJHN0YXRlbWVudCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogKiBSZXR1cm5zIHRoZSBuZXh0IHJvdyBmcm9tIGEgcXVlcnkgYXMgYW4gb2JqZWN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLWZldGNoLW9iamVjdC5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgPHA+QSB2YWxpZCBPQ0k4IHN0YXRlbWVudAogKiBpZGVudGlmaWVyIGNyZWF0ZWQgYnkge0BzZWUgb2NpX3BhcnNlfSBhbmQgZXhlY3V0ZWQKICogYnkge0BzZWUgb2NpX2V4ZWN1dGV9LCBvciBhIFJFRgogKiBDVVJTT1Igc3RhdGVtZW50IGlkZW50aWZpZXIuPC9wPgogKiBAcmV0dXJuIG9iamVjdHxmYWxzZSA8cD5BbiBvYmplY3QuIEVhY2ggYXR0cmlidXRlIG9mIHRoZSBvYmplY3QgY29ycmVzcG9uZHMgdG8gYQogKiBjb2x1bW4gb2YgdGhlIHJvdy4gSWYgdGhlcmUgYXJlIG5vIG1vcmUgcm93cyBpbgogKiB0aGUgPGk+c3RhdGVtZW50PC9pPiB0aGVuIDxiPkZBTFNFPC9iPiBpcyByZXR1cm5lZC4KICogPC9wPgogKiA8cD4KICogQW55IExPQiBjb2x1bW5zIGFyZSByZXR1cm5lZCBhcyBMT0IgZGVzY3JpcHRvcnMuCiAqIDwvcD4KICogPHA+CiAqIERBVEUgY29sdW1ucyBhcmUgcmV0dXJuZWQgYXMgc3RyaW5ncyBmb3JtYXR0ZWQKICogdG8gdGhlIGN1cnJlbnQgZGF0ZSBmb3JtYXQuIFRoZSBkZWZhdWx0IGZvcm1hdCBjYW4gYmUgY2hhbmdlZCB3aXRoCiAqIE9yYWNsZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3VjaCBhcyBOTFNfTEFORyBvcgogKiBieSBhIHByZXZpb3VzbHkgZXhlY3V0ZWQgQUxURVIgU0VTU0lPTiBTRVQKICogTkxTX0RBVEVfRk9STUFUIGNvbW1hbmQuCiAqIDwvcD4KICogPHA+CiAqIE9yYWNsZSdzIGRlZmF1bHQsIG5vbi1jYXNlIHNlbnNpdGl2ZSBjb2x1bW4gbmFtZXMgd2lsbCBoYXZlCiAqIHVwcGVyY2FzZSBhdHRyaWJ1dGUgbmFtZXMuIENhc2Utc2Vuc2l0aXZlIGNvbHVtbiBuYW1lcyB3aWxsIGhhdmUKICogYXR0cmlidXRlIG5hbWVzIHVzaW5nIHRoZSBleGFjdCBjb2x1bW4gY2FzZS4KICogVXNlIDxiPnZhcl9kdW1wPC9iPiBvbiB0aGUgcmVzdWx0IG9iamVjdCB0byB2ZXJpZnkKICogdGhlIGFwcHJvcHJpYXRlIGNhc2UgZm9yIGF0dHJpYnV0ZSBhY2Nlc3MuCiAqIDwvcD4KICogPHA+CiAqIEF0dHJpYnV0ZSB2YWx1ZXMgd2lsbCBiZSA8Yj5OVUxMPC9iPiBmb3IgYW55IE5VTEwKICogZGF0YSBmaWVsZHMuCiAqIDwvcD4KICovCmZ1bmN0aW9uIG9jaV9mZXRjaF9vYmplY3QoJHN0YXRlbWVudCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogKiBSZXR1cm5zIHRoZSBuZXh0IHJvdyBmcm9tIGEgcXVlcnkgYXMgYSBudW1lcmljIGFycmF5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLWZldGNoLXJvdy5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgPHA+QSB2YWxpZCBPQ0k4IHN0YXRlbWVudAogKiBpZGVudGlmaWVyIGNyZWF0ZWQgYnkge0BzZWUgb2NpX3BhcnNlfSBhbmQgZXhlY3V0ZWQKICogYnkge0BzZWUgb2NpX2V4ZWN1dGV9LCBvciBhIFJFRgogKiBDVVJTT1Igc3RhdGVtZW50IGlkZW50aWZpZXIuPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIEEgbnVtZXJpY2FsbHkgaW5kZXhlZCBhcnJheS4gSWYgdGhlcmUgYXJlIG5vIG1vcmUgcm93cyBpbgogKiB0aGUgPGk+c3RhdGVtZW50PC9pPiB0aGVuIDxiPkZBTFNFPC9iPiBpcyByZXR1cm5lZC4KICovCmZ1bmN0aW9uIG9jaV9mZXRjaF9yb3coJHN0YXRlbWVudCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogKiBSZXR1cm5zIHRoZSBuZXh0IHJvdyBmcm9tIGEgcXVlcnkgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktZmV0Y2gtYXNzb2MucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IDxwPkEgdmFsaWQgT0NJOCBzdGF0ZW1lbnQKICogaWRlbnRpZmllciBjcmVhdGVkIGJ5IHtAc2VlIG9jaV9wYXJzZX0gYW5kIGV4ZWN1dGVkCiAqIGJ5IHtAc2VlIG9jaV9leGVjdXRlfSwgb3IgYSBSRUYKICogQ1VSU09SIHN0YXRlbWVudCBpZGVudGlmaWVyLjwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBbiBhc3NvY2lhdGl2ZSBhcnJheS4gSWYgdGhlcmUgYXJlIG5vIG1vcmUgcm93cyBpbgogKiB0aGUgPGk+c3RhdGVtZW50PC9pPiB0aGVuIDxiPkZBTFNFPC9iPiBpcyByZXR1cm5lZC4KICovCmZ1bmN0aW9uIG9jaV9mZXRjaF9hc3NvYygkc3RhdGVtZW50KSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIFJldHVybnMgdGhlIG5leHQgcm93IGZyb20gYSBxdWVyeSBhcyBhbiBhc3NvY2lhdGl2ZSBvciBudW1lcmljIGFycmF5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLWZldGNoLWFycmF5LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCA8cD5BIHZhbGlkIE9DSTggc3RhdGVtZW50CiAqIGlkZW50aWZpZXIgY3JlYXRlZCBieSB7QHNlZSBvY2lfcGFyc2V9IGFuZCBleGVjdXRlZAogKiBieSB7QHNlZSBvY2lfZXhlY3V0ZX0sIG9yIGEgUkVGCiAqIENVUlNPUiBzdGF0ZW1lbnQgaWRlbnRpZmllci48L3A+CiAqIDxwPgogKiBDYW4gYWxzbyBiZSBhIHN0YXRlbWVudCBpZGVudGlmaWVyIHJldHVybmVkIGJ5IHtAc2VlIG9jaV9nZXRfaW1wbGljaXRfcmVzdWx0c2V0fS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtb2RlIFtvcHRpb25hbF0gPHA+CiAqIEFuIG9wdGlvbmFsIHNlY29uZCBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nCiAqIGNvbnN0YW50czoKICogPHRhYmxlPgogKiB7QHNlZSBvY2lfZmV0Y2hfYXJyYXl9IE1vZGVzCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5Db25zdGFudDwvdGQ+CiAqIDx0ZD5EZXNjcmlwdGlvbjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5PQ0lfQk9USDwvYj48L3RkPgogKiA8dGQ+UmV0dXJucyBhbiBhcnJheSB3aXRoIGJvdGggYXNzb2NpYXRpdmUgYW5kIG51bWVyaWMKICogaW5kaWNlcy4gVGhpcyBpcyB0aGUgc2FtZQogKiBhcyA8Yj5PQ0lfQVNTT0M8L2I+CiAqICsgPGI+T0NJX05VTTwvYj4gYW5kIGlzIHRoZSBkZWZhdWx0CiAqIGJlaGF2aW9yLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5PQ0lfQVNTT0M8L2I+PC90ZD4KICogPHRkPlJldHVybnMgYW4gYXNzb2NpYXRpdmUgYXJyYXkuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPk9DSV9OVU08L2I+PC90ZD4KICogPHRkPlJldHVybnMgYSBudW1lcmljIGFycmF5LjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5PQ0lfUkVUVVJOX05VTExTPC9iPjwvdGQ+CiAqIDx0ZD5DcmVhdGVzIGVsZW1lbnRzIGZvciA8Yj5OVUxMPC9iPiBmaWVsZHMuIFRoZSBlbGVtZW50CiAqIHZhbHVlcyB3aWxsIGJlIGEgUEhQIDxiPk5VTEw8L2I+LgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+T0NJX1JFVFVSTl9MT0JTPC9iPjwvdGQ+CiAqIDx0ZD5SZXR1cm5zIHRoZSBjb250ZW50cyBvZiBMT0JzIGluc3RlYWQgb2YgdGhlIExPQgogKiBkZXNjcmlwdG9ycy48L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiA8L3A+CiAqIDxwPgogKiBUaGUgZGVmYXVsdCA8aT5tb2RlPC9pPiBpcyA8Yj5PQ0lfQk9USDwvYj4uCiAqIDwvcD4KICogPHA+CiAqIFVzZSB0aGUgYWRkaXRpb24gb3BlcmF0b3IgJiN4MDAwMjI7KyYjeDAwMDIyOyB0byBzcGVjaWZ5IG1vcmUgdGhhbgogKiBvbmUgbW9kZSBhdCBhIHRpbWUuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSA8cD5BbiBhcnJheSB3aXRoIGFzc29jaWF0aXZlIGFuZC9vciBudW1lcmljIGluZGljZXMuIElmIHRoZXJlCiAqIGFyZSBubyBtb3JlIHJvd3MgaW4gdGhlIDxpPnN0YXRlbWVudDwvaT4gdGhlbgogKiA8Yj5GQUxTRTwvYj4gaXMgcmV0dXJuZWQuCiAqIDwvcD4KICogPHA+CiAqIEJ5IGRlZmF1bHQsIExPQiBjb2x1bW5zIGFyZSByZXR1cm5lZCBhcyBMT0IgZGVzY3JpcHRvcnMuCiAqIDwvcD4KICogPHA+CiAqIERBVEUgY29sdW1ucyBhcmUgcmV0dXJuZWQgYXMgc3RyaW5ncyBmb3JtYXR0ZWQKICogdG8gdGhlIGN1cnJlbnQgZGF0ZSBmb3JtYXQuIFRoZSBkZWZhdWx0IGZvcm1hdCBjYW4gYmUgY2hhbmdlZCB3aXRoCiAqIE9yYWNsZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3VjaCBhcyBOTFNfTEFORyBvcgogKiBieSBhIHByZXZpb3VzbHkgZXhlY3V0ZWQgQUxURVIgU0VTU0lPTiBTRVQKICogTkxTX0RBVEVfRk9STUFUIGNvbW1hbmQuCiAqIDwvcD4KICogPHA+CiAqIE9yYWNsZSdzIGRlZmF1bHQsIG5vbi1jYXNlIHNlbnNpdGl2ZSBjb2x1bW4gbmFtZXMgd2lsbCBoYXZlCiAqIHVwcGVyY2FzZSBhc3NvY2lhdGl2ZSBpbmRpY2VzIGluIHRoZSByZXN1bHQgYXJyYXkuIENhc2Utc2Vuc2l0aXZlCiAqIGNvbHVtbiBuYW1lcyB3aWxsIGhhdmUgYXJyYXkgaW5kaWNlcyB1c2luZyB0aGUgZXhhY3QgY29sdW1uIGNhc2UuCiAqIFVzZSA8Yj52YXJfZHVtcDwvYj4gb24gdGhlIHJlc3VsdCBhcnJheSB0byB2ZXJpZnkgdGhlCiAqIGFwcHJvcHJpYXRlIGNhc2UgdG8gdXNlIGZvciBlYWNoIHF1ZXJ5LgogKiA8L3A+CiAqIDxwPgogKiBUaGUgdGFibGUgbmFtZSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGFycmF5IGluZGV4LiBJZiB5b3VyIHF1ZXJ5CiAqIGNvbnRhaW5zIHR3byBkaWZmZXJlbnQgY29sdW1ucyB3aXRoIHRoZSBzYW1lIG5hbWUsCiAqIHVzZSA8Yj5PQ0lfTlVNPC9iPiBvciBhZGQgYSBjb2x1bW4gYWxpYXMgdG8gdGhlIHF1ZXJ5CiAqIHRvIGVuc3VyZSBuYW1lIHVuaXF1ZW5lc3MsIHNlZSBleGFtcGxlICM3LiBPdGhlcndpc2Ugb25seSBvbmUKICogY29sdW1uIHdpbGwgYmUgcmV0dXJuZWQgdmlhIFBIUC4KICogPC9wPgogKi8KZnVuY3Rpb24gb2NpX2ZldGNoX2FycmF5KCRzdGF0ZW1lbnQsICRtb2RlID0gbnVsbCkge30KCi8qKgogKiAoUEhQIDQsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogT2Jzb2xldGUgdmFyaWFudCBvZiB7QHNlZSBvY2lfZmV0Y2hfYXJyYXl9LCB7QHNlZSBvY2lfZmV0Y2hfb2JqZWN0fSwKICoge0BzZWUgb2NpX2ZldGNoX2Fzc29jfSBhbmQKICoge0BzZWUgb2NpX2ZldGNoX3Jvd30KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2lmZXRjaGludG8ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50X3Jlc291cmNlCiAqIEBwYXJhbSBhcnJheSAmJHJlc3VsdAogKiBAcGFyYW0gaW50ICRtb2RlIFtvcHRpb25hbF0KICogQHJldHVybiBpbnR8Ym9vbAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaWZldGNoaW50bygkc3RhdGVtZW50X3Jlc291cmNlLCAmJHJlc3VsdCwgJG1vZGUgPSBudWxsKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIEZldGNoZXMgbXVsdGlwbGUgcm93cyBmcm9tIGEgcXVlcnkgaW50byBhIHR3by1kaW1lbnNpb25hbCBhcnJheQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1mZXRjaC1hbGwucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IDxwPkEgdmFsaWQgT0NJOCBzdGF0ZW1lbnQKICogaWRlbnRpZmllciBjcmVhdGVkIGJ5IHtAc2VlIG9jaV9wYXJzZX0gYW5kIGV4ZWN1dGVkCiAqIGJ5IHtAc2VlIG9jaV9leGVjdXRlfSwgb3IgYSBSRUYKICogQ1VSU09SIHN0YXRlbWVudCBpZGVudGlmaWVyLjwvcD4KICogQHBhcmFtIGFycmF5ICYkb3V0cHV0IDxwPgogKiBUaGUgdmFyaWFibGUgdG8gY29udGFpbiB0aGUgcmV0dXJuZWQgcm93cy4KICogPC9wPgogKiA8cD4KICogTE9CIGNvbHVtbnMgYXJlIHJldHVybmVkIGFzIHN0cmluZ3MsIHdoZXJlIE9yYWNsZSBzdXBwb3J0cwogKiBjb252ZXJzaW9uLgogKiA8L3A+CiAqIDxwPgogKiBTZWUge0BzZWUgb2NpX2ZldGNoX2FycmF5fSBmb3IgbW9yZSBpbmZvcm1hdGlvbgogKiBvbiBob3cgZGF0YSBhbmQgdHlwZXMgYXJlIGZldGNoZWQuCiAqIDwvcD4KICogQHBhcmFtIGludCAkc2tpcCBbb3B0aW9uYWxdIDxwPgogKiBUaGUgbnVtYmVyIG9mIGluaXRpYWwgcm93cyB0byBkaXNjYXJkIHdoZW4gZmV0Y2hpbmcgdGhlCiAqIHJlc3VsdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMCwgc28gdGhlIGZpcnN0IHJvdyBvbndhcmRzIGlzCiAqIHJldHVybmVkLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG1heHJvd3MgW29wdGlvbmFsXSA8cD4KICogVGhlIG51bWJlciBvZiByb3dzIHRvIHJldHVybi4gVGhlIGRlZmF1bHQgaXMgLTEgbWVhbmluZyByZXR1cm4KICogYWxsIHRoZSByb3dzIGZyb20gPGk+c2tpcDwvaT4gKyAxIG9ud2FyZHMuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICogUGFyYW1ldGVyIDxpPmZsYWdzPC9pPiBpbmRpY2F0ZXMgdGhlIGFycmF5CiAqIHN0cnVjdHVyZSBhbmQgd2hldGhlciBhc3NvY2lhdGl2ZSBhcnJheXMgc2hvdWxkIGJlIHVzZWQuCiAqIDx0YWJsZT4KICoge0BzZWUgb2NpX2ZldGNoX2FsbH0gQXJyYXkgU3RydWN0dXJlIE1vZGVzCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5Db25zdGFudDwvdGQ+CiAqIDx0ZD5EZXNjcmlwdGlvbjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5PQ0lfRkVUQ0hTVEFURU1FTlRfQllfUk9XPC9iPjwvdGQ+CiAqIDx0ZD5UaGUgb3V0ZXIgYXJyYXkgd2lsbCBjb250YWluIG9uZSBzdWItYXJyYXkgcGVyIHF1ZXJ5CiAqIHJvdy48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+T0NJX0ZFVENIU1RBVEVNRU5UX0JZX0NPTFVNTjwvYj48L3RkPgogKiA8dGQ+VGhlIG91dGVyIGFycmF5IHdpbGwgY29udGFpbiBvbmUgc3ViLWFycmF5IHBlciBxdWVyeQogKiBjb2x1bW4uIFRoaXMgaXMgdGhlIGRlZmF1bHQuPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICogPC9wPgogKiA8cD4KICogQXJyYXlzIGNhbiBiZSBpbmRleGVkIGJ5IGNvbHVtbiBoZWFkaW5nIG9yIG51bWVyaWNhbGx5LgogKiA8dGFibGU+CiAqIHtAc2VlIG9jaV9mZXRjaF9hbGx9IEFycmF5IEluZGV4IE1vZGVzCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5Db25zdGFudDwvdGQ+CiAqIDx0ZD5EZXNjcmlwdGlvbjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5PQ0lfTlVNPC9iPjwvdGQ+CiAqIDx0ZD5OdW1lcmljIGluZGV4ZXMgYXJlIHVzZWQgZm9yIGVhY2ggY29sdW1uJ3MgYXJyYXkuPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjxiPk9DSV9BU1NPQzwvYj48L3RkPgogKiA8dGQ+QXNzb2NpYXRpdmUgaW5kZXhlcyBhcmUgdXNlZCBmb3IgZWFjaCBjb2x1bW4ncwogKiBhcnJheS4gVGhpcyBpcyB0aGUgZGVmYXVsdC48L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiA8L3A+CiAqIDxwPgogKiBVc2UgdGhlIGFkZGl0aW9uIG9wZXJhdG9yICYjeDAwMDIyOysmI3gwMDAyMjsgdG8gY2hvb3NlIGEgY29tYmluYXRpb24KICogb2YgYXJyYXkgc3RydWN0dXJlIGFuZCBpbmRleCBtb2Rlcy4KICogPC9wPgogKiA8cD4KICogT3JhY2xlJ3MgZGVmYXVsdCwgbm9uLWNhc2Ugc2Vuc2l0aXZlIGNvbHVtbiBuYW1lcyB3aWxsIGhhdmUKICogdXBwZXJjYXNlIGFycmF5IGtleXMuIENhc2Utc2Vuc2l0aXZlIGNvbHVtbiBuYW1lcyB3aWxsIGhhdmUKICogYXJyYXkga2V5cyB1c2luZyB0aGUgZXhhY3QgY29sdW1uIGNhc2UuCiAqIFVzZSA8Yj52YXJfZHVtcDwvYj4KICogb24gPGk+b3V0cHV0PC9pPiB0byB2ZXJpZnkgdGhlIGFwcHJvcHJpYXRlIGNhc2UKICogdG8gdXNlIGZvciBlYWNoIHF1ZXJ5LgogKiA8L3A+CiAqIDxwPgogKiBRdWVyaWVzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvbHVtbiB3aXRoIHRoZSBzYW1lIG5hbWUKICogc2hvdWxkIHVzZSBjb2x1bW4gYWxpYXNlcy4gT3RoZXJ3aXNlIG9ubHkgb25lIG9mIHRoZSBjb2x1bW5zCiAqIHdpbGwgYXBwZWFyIGluIGFuIGFzc29jaWF0aXZlIGFycmF5LgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBudW1iZXIgb2Ygcm93cyBpbiA8aT5vdXRwdXQ8L2k+LCB3aGljaAogKiBtYXkgYmUgMCBvciBtb3JlLCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9jaV9mZXRjaF9hbGwoJHN0YXRlbWVudCwgYXJyYXkgJiRvdXRwdXQsICRza2lwID0gMCwgJG1heHJvd3MgPSAtMSwgJGZsYWdzID0gT0NJX0ZFVENIU1RBVEVNRU5UX0JZX0NPTFVNTnxPQ0lfQVNTT0MpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogRnJlZXMgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggc3RhdGVtZW50IG9yIGN1cnNvcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1mcmVlLXN0YXRlbWVudC5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgPHA+CiAqIEEgdmFsaWQgT0NJIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gb2NpX2ZyZWVfc3RhdGVtZW50KCRzdGF0ZW1lbnQpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogRW5hYmxlcyBvciBkaXNhYmxlcyBpbnRlcm5hbCBkZWJ1ZyBvdXRwdXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktaW50ZXJuYWwtZGVidWcucGhwCiAqIEBwYXJhbSBib29sICRvbm9mZiA8cD4KICogU2V0IHRoaXMgdG8gPGI+RkFMU0U8L2I+IHRvIHR1cm4gZGVidWcgb3V0cHV0IG9mZiBvciA8Yj5UUlVFPC9iPiB0byB0dXJuIGl0IG9uLgogKiA8L3A+CiAqIEByZW1vdmVkIDguMAogKiBAcmV0dXJuIHZvaWQgTm8gdmFsdWUgaXMgcmV0dXJuZWQuCiAqLwpmdW5jdGlvbiBvY2lfaW50ZXJuYWxfZGVidWcoJG9ub2ZmKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIFJldHVybnMgdGhlIG51bWJlciBvZiByZXN1bHQgY29sdW1ucyBpbiBhIHN0YXRlbWVudAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1udW0tZmllbGRzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCA8cD4KICogQSB2YWxpZCBPQ0kgc3RhdGVtZW50IGlkZW50aWZpZXIuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBjb2x1bW5zIGFzIGFuIGludGVnZXIsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvcnMuCiAqLwpmdW5jdGlvbiBvY2lfbnVtX2ZpZWxkcygkc3RhdGVtZW50KSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIFByZXBhcmVzIGFuIE9yYWNsZSBzdGF0ZW1lbnQgZm9yIGV4ZWN1dGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1wYXJzZS5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBBbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiB7QHNlZSBvY2lfY29ubmVjdH0sIHtAc2VlIG9jaV9wY29ubmVjdH0sIG9yIHtAc2VlIG9jaV9uZXdfY29ubmVjdH0uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc3FsX3RleHQgPHA+CiAqIFRoZSBTUUwgb3IgUEwvU1FMIHN0YXRlbWVudC4KICogPC9wPgogKiA8cD4KICogU1FMIHN0YXRlbWVudHMgc2hvdWxkIG5vdCBlbmQgd2l0aCBhCiAqIHNlbWktY29sb24gKCYjeDAwMDIyOzsmI3gwMDAyMjspLiBQTC9TUUwKICogc3RhdGVtZW50cyBzaG91bGQgZW5kIHdpdGggYSBzZW1pLWNvbG9uCiAqICgmI3gwMDAyMjs7JiN4MDAwMjI7KS4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIEEgc3RhdGVtZW50IGhhbmRsZSBvbiBzdWNjZXNzLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBvY2lfcGFyc2UoJGNvbm5lY3Rpb24sICRzcWxfdGV4dCkge30KCi8qKgogKiAoUEVDTCBPQ0k4ICZndDs9IDIuMC4wKTxici8+CiAqIFJldHVybnMgdGhlIG5leHQgY2hpbGQgc3RhdGVtZW50IHJlc291cmNlIGZyb20gYSBwYXJlbnQgc3RhdGVtZW50IHJlc291cmNlIHRoYXQgaGFzIE9yYWNsZSBEYXRhYmFzZSAxMmMgSW1wbGljaXQgUmVzdWx0IFNldHMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktZ2V0LWltcGxpY2l0LXJlc3VsdHNldC5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgPHA+QSB2YWxpZCBPQ0k4IHN0YXRlbWVudCBpZGVudGlmaWVyIGNyZWF0ZWQKICogYnkge0BzZWUgb2NpX3BhcnNlfSBhbmQgZXhlY3V0ZWQKICogYnkge0BzZWUgb2NpX2V4ZWN1dGV9LiBUaGUgc3RhdGVtZW50CiAqIGlkZW50aWZpZXIgbWF5IG9yIG1heSBub3QgYmUgYXNzb2NpYXRlZCB3aXRoIGEgU1FMIHN0YXRlbWVudAogKiB0aGF0IHJldHVybnMgSW1wbGljaXQgUmVzdWx0IFNldHMuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIHN0YXRlbWVudCBoYW5kbGUgZm9yIHRoZSBuZXh0IGNoaWxkIHN0YXRlbWVudCBhdmFpbGFibGUKICogb24gPGk+c3RhdGVtZW50PC9pPi4gUmV0dXJucyA8Yj5GQUxTRTwvYj4gd2hlbiBjaGlsZAogKiBzdGF0ZW1lbnRzIGRvIG5vdCBleGlzdCwgb3IgYWxsIGNoaWxkIHN0YXRlbWVudHMgaGF2ZSBiZWVuIHJldHVybmVkCiAqIGJ5IHByZXZpb3VzIGNhbGxzCiAqIHRvIHtAc2VlIG9jaV9nZXRfaW1wbGljaXRfcmVzdWx0c2V0fS4KICovCmZ1bmN0aW9uIG9jaV9nZXRfaW1wbGljaXRfcmVzdWx0c2V0KCRzdGF0ZW1lbnQpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogQWxsb2NhdGVzIGFuZCByZXR1cm5zIGEgbmV3IGN1cnNvciAoc3RhdGVtZW50IGhhbmRsZSkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktbmV3LWN1cnNvci5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBBbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiB7QHNlZSBvY2lfY29ubmVjdH0gb3Ige0BzZWUgb2NpX3Bjb25uZWN0fS4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIEEgbmV3IHN0YXRlbWVudCBoYW5kbGUsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCmZ1bmN0aW9uIG9jaV9uZXdfY3Vyc29yKCRjb25uZWN0aW9uKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIFJldHVybnMgZmllbGQncyB2YWx1ZSBmcm9tIHRoZSBmZXRjaGVkIHJvdwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1yZXN1bHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50CiAqIEBwYXJhbSBtaXhlZCAkZmllbGQgPHA+CiAqIENhbiBiZSBlaXRoZXIgdXNlIHRoZSBjb2x1bW4gbnVtYmVyICgxLWJhc2VkKSBvciB0aGUgY29sdW1uIG5hbWUuCiAqIFRoZSBjYXNlIG9mIHRoZSBjb2x1bW4gbmFtZSBtdXN0IGJlIHRoZSBjYXNlIHRoYXQgT3JhY2xlIG1ldGEgZGF0YQogKiBkZXNjcmliZXMgdGhlIGNvbHVtbiBhcywgd2hpY2ggaXMgdXBwZXJjYXNlIGZvciBjb2x1bW5zIGNyZWF0ZWQKICogY2FzZSBpbnNlbnNpdGl2ZWx5LgogKiA8L3A+CiAqIEByZXR1cm4gbWl4ZWQgZXZlcnl0aGluZyBhcyBzdHJpbmdzIGV4Y2VwdCBmb3IgYWJzdHJhY3QgdHlwZXMgKFJPV0lEcywgTE9CcyBhbmQKICogRklMRXMpLiBSZXR1cm5zIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCmZ1bmN0aW9uIG9jaV9yZXN1bHQoJHN0YXRlbWVudCwgJGZpZWxkKSB7fQoKLyoqCiAqIChQSFAgNS4zLjcsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjQuNik8YnIvPgogKiBSZXR1cm5zIHRoZSBPcmFjbGUgY2xpZW50IGxpYnJhcnkgdmVyc2lvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1jbGllbnQtdmVyc2lvbi5waHAKICogQHJldHVybiBzdHJpbmcgdGhlIHZlcnNpb24gbnVtYmVyIGFzIGEgc3RyaW5nLgogKi8KZnVuY3Rpb24gb2NpX2NsaWVudF92ZXJzaW9uKCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogKiBSZXR1cm5zIHRoZSBPcmFjbGUgRGF0YWJhc2UgdmVyc2lvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1zZXJ2ZXItdmVyc2lvbi5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFzIGEgc3RyaW5nIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCmZ1bmN0aW9uIG9jaV9zZXJ2ZXJfdmVyc2lvbigkY29ubmVjdGlvbikge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogKiBSZXR1cm5zIHRoZSB0eXBlIG9mIGEgc3RhdGVtZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLXN0YXRlbWVudC10eXBlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCA8cD4KICogQSB2YWxpZCBPQ0k4IHN0YXRlbWVudCBpZGVudGlmaWVyIGZyb20ge0BzZWUgb2NpX3BhcnNlfS4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgdHlwZSBvZiA8aT5zdGF0ZW1lbnQ8L2k+IGFzIG9uZSBvZiB0aGUKICogZm9sbG93aW5nIHN0cmluZ3MuCiAqIDx0YWJsZT4KICogU3RhdGVtZW50IHR5cGUKICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlJldHVybiBTdHJpbmc8L3RkPgogKiA8dGQ+Tm90ZXM8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+QUxURVI8L3RkPgogKiA8dGQ+PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkJFR0lOPC90ZD4KICogPHRkPjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5DQUxMPC90ZD4KICogPHRkPkludHJvZHVjZWQgaW4gUEhQIDUuMi4xIChQRUNMIE9DSTggMS4yLjMpPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkNSRUFURTwvdGQ+CiAqIDx0ZD48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+REVDTEFSRTwvdGQ+CiAqIDx0ZD48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+REVMRVRFPC90ZD4KICogPHRkPjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5EUk9QPC90ZD4KICogPHRkPjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5JTlNFUlQ8L3RkPgogKiA8dGQ+PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlNFTEVDVDwvdGQ+CiAqIDx0ZD48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+VVBEQVRFPC90ZD4KICogPHRkPjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5VTktOT1dOPC90ZD4KICogPHRkPjwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqIDwvcD4KICogPHA+CiAqIFJldHVybnMgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KZnVuY3Rpb24gb2NpX3N0YXRlbWVudF90eXBlKCRzdGF0ZW1lbnQpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogUmV0dXJucyBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBkdXJpbmcgc3RhdGVtZW50IGV4ZWN1dGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1udW0tcm93cy5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgPHA+CiAqIEEgdmFsaWQgT0NJIHN0YXRlbWVudCBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBhcyBhbiBpbnRlZ2VyLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3JzLgogKi8KZnVuY3Rpb24gb2NpX251bV9yb3dzKCRzdGF0ZW1lbnQpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogQ2xvc2VzIGFuIE9yYWNsZSBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLWNsb3NlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIgcmV0dXJuZWQgYnkKICoge0BzZWUgb2NpX2Nvbm5lY3R9LCB7QHNlZSBvY2lfcGNvbm5lY3R9LAogKiBvciB7QHNlZSBvY2lfbmV3X2Nvbm5lY3R9LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gb2NpX2Nsb3NlKCRjb25uZWN0aW9uKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIENvbm5lY3QgdG8gYW4gT3JhY2xlIGRhdGFiYXNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLWNvbm5lY3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIDxwPgogKiBUaGUgT3JhY2xlIHVzZXIgbmFtZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCA8cD4KICogVGhlIHBhc3N3b3JkIGZvciA8aT51c2VybmFtZTwvaT4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY29ubmVjdGlvbl9zdHJpbmcgW29wdGlvbmFsXSA8cD5Db250YWlucwogKiB0aGUgT3JhY2xlIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8uIEl0IGNhbiBiZQogKiBhbiBFYXN5IENvbm5lY3QKICogc3RyaW5nLCBvciBhIENvbm5lY3QgTmFtZSBmcm9tCiAqIHRoZSB0bnNuYW1lcy5vcmEgZmlsZSwgb3IgdGhlIG5hbWUgb2YgYSBsb2NhbAogKiBPcmFjbGUgaW5zdGFuY2UuCiAqIDwvcD4KICogPHA+CiAqIElmIG5vdCBzcGVjaWZpZWQsIFBIUCB1c2VzCiAqIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdWNoIGFzIDxiPlRXT19UQVNLPC9iPiAob24gTGludXgpCiAqIG9yIDxiPkxPQ0FMPC9iPiAob24gV2luZG93cykKICogYW5kIDxiPk9SQUNMRV9TSUQ8L2I+IHRvIGRldGVybWluZSB0aGUKICogT3JhY2xlIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8uCiAqIDwvcD4KICogPHA+CiAqIFRvIHVzZSB0aGUgRWFzeSBDb25uZWN0IG5hbWluZyBtZXRob2QsIFBIUCBtdXN0IGJlIGxpbmtlZCB3aXRoIE9yYWNsZQogKiAxMGcgb3IgZ3JlYXRlciBDbGllbnQgbGlicmFyaWVzLiBUaGUgRWFzeSBDb25uZWN0IHN0cmluZyBmb3IgT3JhY2xlCiAqIDEwZyBpcyBvZiB0aGUgZm9ybToKICogWy8vXWhvc3RfbmFtZVs6cG9ydF1bL3NlcnZpY2VfbmFtZV0uIEZyb20gT3JhY2xlCiAqIDExZywgdGhlIHN5bnRheCBpczoKICogWy8vXWhvc3RfbmFtZVs6cG9ydF1bL3NlcnZpY2VfbmFtZV1bOnNlcnZlcl90eXBlXVsvaW5zdGFuY2VfbmFtZV0uCiAqIFNlcnZpY2UgbmFtZXMgY2FuIGJlIGZvdW5kIGJ5IHJ1bm5pbmcgdGhlIE9yYWNsZQogKiB1dGlsaXR5IGxzbnJjdGwgc3RhdHVzIG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIKICogbWFjaGluZS4KICogPC9wPgogKiA8cD4KICogVGhlIHRuc25hbWVzLm9yYSBmaWxlIGNhbiBiZSBpbiB0aGUgT3JhY2xlIE5ldAogKiBzZWFyY2ggcGF0aCwgd2hpY2gKICogaW5jbHVkZXMgJE9SQUNMRV9IT01FL25ldHdvcmsvYWRtaW4KICogYW5kIC9ldGMuIEFsdGVybmF0aXZlbHkKICogc2V0IFROU19BRE1JTiBzbwogKiB0aGF0ICRUTlNfQURNSU4vdG5zbmFtZXMub3JhIGlzIHJlYWQuIE1ha2Ugc3VyZQogKiB0aGUgd2ViIGRhZW1vbiBoYXMgcmVhZCBhY2Nlc3MgdG8gdGhlIGZpbGUuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY2hhcmFjdGVyX3NldCBbb3B0aW9uYWxdIDxwPkRldGVybWluZXMKICogdGhlIGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgT3JhY2xlIENsaWVudCBsaWJyYXJpZXMuIFRoZSBjaGFyYWN0ZXIKICogc2V0IGRvZXMgbm90IG5lZWQgdG8gbWF0Y2ggdGhlIGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgZGF0YWJhc2UuIElmCiAqIGl0IGRvZXNuJ3QgbWF0Y2gsIE9yYWNsZSB3aWxsIGRvIGl0cyBiZXN0IHRvIGNvbnZlcnQgZGF0YSB0byBhbmQgZnJvbQogKiB0aGUgZGF0YWJhc2UgY2hhcmFjdGVyIHNldC4gRGVwZW5kaW5nIG9uIHRoZSBjaGFyYWN0ZXIgc2V0cyB0aGlzIG1heQogKiBub3QgZ2l2ZSB1c2FibGUgcmVzdWx0cy4gQ29udmVyc2lvbiBhbHNvIGFkZHMgc29tZSB0aW1lIG92ZXJoZWFkLgogKiA8L3A+CiAqIDxwPgogKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUKICogT3JhY2xlIENsaWVudCBsaWJyYXJpZXMgZGV0ZXJtaW5lIGEgY2hhcmFjdGVyIHNldCBmcm9tCiAqIHRoZSA8Yj5OTFNfTEFORzwvYj4gZW52aXJvbm1lbnQgdmFyaWFibGUuCiAqIDwvcD4KICogPHA+CiAqIFBhc3NpbmcgdGhpcyBwYXJhbWV0ZXIgY2FuCiAqIHJlZHVjZSB0aGUgdGltZSB0YWtlbiB0byBjb25uZWN0LgogKiA8L3A+CiAqIDxwPgogKiBAcGFyYW0gaW50ICRzZXNzaW9uX21vZGUgW29wdGlvbmFsXSBUaGlzCiAqIHBhcmFtZXRlciBpcyBhdmFpbGFibGUgc2luY2UgdmVyc2lvbiBQSFAgNSAoUEVDTCBPQ0k4IDEuMSkgYW5kIGFjY2VwdHMgdGhlCiAqIGZvbGxvd2luZyB2YWx1ZXM6IDxiPk9DSV9ERUZBVUxUPC9iPiwKICogPGI+T0NJX1NZU09QRVI8L2I+IGFuZCA8Yj5PQ0lfU1lTREJBPC9iPi4KICogSWYgZWl0aGVyIDxiPk9DSV9TWVNPUEVSPC9iPiBvcgogKiA8Yj5PQ0lfU1lTREJBPC9iPiB3ZXJlIHNwZWNpZmllZCwgdGhpcyBmdW5jdGlvbiB3aWxsIHRyeQogKiB0byBlc3RhYmxpc2ggcHJpdmlsZWdlZCBjb25uZWN0aW9uIHVzaW5nIGV4dGVybmFsIGNyZWRlbnRpYWxzLgogKiBQcml2aWxlZ2VkIGNvbm5lY3Rpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiBUbyBlbmFibGUgdGhlbSB5b3UKICogbmVlZCB0byBzZXQgb2NpOC5wcml2aWxlZ2VkX2Nvbm5lY3QKICogdG8gT24uCiAqIDwvcD4KICogPHA+CiAqIFBIUCA1LjMgKFBFQ0wgT0NJOCAxLjMuNCkgaW50cm9kdWNlZCB0aGUKICogPGI+T0NJX0NSRURfRVhUPC9iPiBtb2RlIHZhbHVlLiBUaGlzIHRlbGxzIE9yYWNsZSB0byB1c2UKICogRXh0ZXJuYWwgb3IgT1MgYXV0aGVudGljYXRpb24sIHdoaWNoIG11c3QgYmUgY29uZmlndXJlZCBpbiB0aGUKICogZGF0YWJhc2UuIFRoZSA8Yj5PQ0lfQ1JFRF9FWFQ8L2I+IGZsYWcgY2FuIG9ubHkgYmUgdXNlZAogKiB3aXRoIHVzZXJuYW1lIG9mICYjeDAwMDIyOy8mI3gwMDAyMjsgYW5kIGEgZW1wdHkgcGFzc3dvcmQuCiAqIG9jaTgucHJpdmlsZWdlZF9jb25uZWN0CiAqIG1heSBiZSBPbiBvciBPZmYuCiAqIDwvcD4KICogPHA+CiAqIDxiPk9DSV9DUkVEX0VYVDwvYj4gbWF5IGJlIGNvbWJpbmVkIHdpdGggdGhlCiAqIDxiPk9DSV9TWVNPUEVSPC9iPiBvcgogKiA8Yj5PQ0lfU1lTREJBPC9iPiBtb2Rlcy4KICogPC9wPgogKiA8cD4KICogPGI+T0NJX0NSRURfRVhUPC9iPiBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MgZm9yCiAqIHNlY3VyaXR5IHJlYXNvbnMuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBBIGNvbm5lY3Rpb24gaWRlbnRpZmllciBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBvY2lfY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvbm5lY3Rpb25fc3RyaW5nID0gbnVsbCwgJGNoYXJhY3Rlcl9zZXQgPSBudWxsLCAkc2Vzc2lvbl9tb2RlID0gbnVsbCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogKiBDb25uZWN0IHRvIHRoZSBPcmFjbGUgc2VydmVyIHVzaW5nIGEgdW5pcXVlIGNvbm5lY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktbmV3LWNvbm5lY3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJuYW1lIDxwPgogKiBUaGUgT3JhY2xlIHVzZXIgbmFtZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCA8cD4KICogVGhlIHBhc3N3b3JkIGZvciA8aT51c2VybmFtZTwvaT4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY29ubmVjdGlvbl9zdHJpbmcgW29wdGlvbmFsXSA8cD5Db250YWlucwogKiB0aGUgT3JhY2xlIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8uIEl0IGNhbiBiZQogKiBhbiBFYXN5IENvbm5lY3QKICogc3RyaW5nLCBvciBhIENvbm5lY3QgTmFtZSBmcm9tCiAqIHRoZSB0bnNuYW1lcy5vcmEgZmlsZSwgb3IgdGhlIG5hbWUgb2YgYSBsb2NhbAogKiBPcmFjbGUgaW5zdGFuY2UuCiAqIDwvcD4KICogPHA+CiAqIElmIG5vdCBzcGVjaWZpZWQsIFBIUCB1c2VzCiAqIGVudmlyb25tZW50IHZhcmlhYmxlcyBzdWNoIGFzIDxiPlRXT19UQVNLPC9iPiAob24gTGludXgpCiAqIG9yIDxiPkxPQ0FMPC9iPiAob24gV2luZG93cykKICogYW5kIDxiPk9SQUNMRV9TSUQ8L2I+IHRvIGRldGVybWluZSB0aGUKICogT3JhY2xlIGluc3RhbmNlIHRvIGNvbm5lY3QgdG8uCiAqIDwvcD4KICogPHA+CiAqIFRvIHVzZSB0aGUgRWFzeSBDb25uZWN0IG5hbWluZyBtZXRob2QsIFBIUCBtdXN0IGJlIGxpbmtlZCB3aXRoIE9yYWNsZQogKiAxMGcgb3IgZ3JlYXRlciBDbGllbnQgbGlicmFyaWVzLiBUaGUgRWFzeSBDb25uZWN0IHN0cmluZyBmb3IgT3JhY2xlCiAqIDEwZyBpcyBvZiB0aGUgZm9ybToKICogWy8vXWhvc3RfbmFtZVs6cG9ydF1bL3NlcnZpY2VfbmFtZV0uIEZyb20gT3JhY2xlCiAqIDExZywgdGhlIHN5bnRheCBpczoKICogWy8vXWhvc3RfbmFtZVs6cG9ydF1bL3NlcnZpY2VfbmFtZV1bOnNlcnZlcl90eXBlXVsvaW5zdGFuY2VfbmFtZV0uCiAqIFNlcnZpY2UgbmFtZXMgY2FuIGJlIGZvdW5kIGJ5IHJ1bm5pbmcgdGhlIE9yYWNsZQogKiB1dGlsaXR5IGxzbnJjdGwgc3RhdHVzIG9uIHRoZSBkYXRhYmFzZSBzZXJ2ZXIKICogbWFjaGluZS4KICogPC9wPgogKiA8cD4KICogVGhlIHRuc25hbWVzLm9yYSBmaWxlIGNhbiBiZSBpbiB0aGUgT3JhY2xlIE5ldAogKiBzZWFyY2ggcGF0aCwgd2hpY2gKICogaW5jbHVkZXMgJE9SQUNMRV9IT01FL25ldHdvcmsvYWRtaW4KICogYW5kIC9ldGMuIEFsdGVybmF0aXZlbHkKICogc2V0IFROU19BRE1JTiBzbwogKiB0aGF0ICRUTlNfQURNSU4vdG5zbmFtZXMub3JhIGlzIHJlYWQuIE1ha2Ugc3VyZQogKiB0aGUgd2ViIGRhZW1vbiBoYXMgcmVhZCBhY2Nlc3MgdG8gdGhlIGZpbGUuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY2hhcmFjdGVyX3NldCBbb3B0aW9uYWxdIDxwPkRldGVybWluZXMKICogdGhlIGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgT3JhY2xlIENsaWVudCBsaWJyYXJpZXMuIFRoZSBjaGFyYWN0ZXIKICogc2V0IGRvZXMgbm90IG5lZWQgdG8gbWF0Y2ggdGhlIGNoYXJhY3RlciBzZXQgdXNlZCBieSB0aGUgZGF0YWJhc2UuIElmCiAqIGl0IGRvZXNuJ3QgbWF0Y2gsIE9yYWNsZSB3aWxsIGRvIGl0cyBiZXN0IHRvIGNvbnZlcnQgZGF0YSB0byBhbmQgZnJvbQogKiB0aGUgZGF0YWJhc2UgY2hhcmFjdGVyIHNldC4gRGVwZW5kaW5nIG9uIHRoZSBjaGFyYWN0ZXIgc2V0cyB0aGlzIG1heQogKiBub3QgZ2l2ZSB1c2FibGUgcmVzdWx0cy4gQ29udmVyc2lvbiBhbHNvIGFkZHMgc29tZSB0aW1lIG92ZXJoZWFkLgogKiA8L3A+CiAqIDxwPgogKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUKICogT3JhY2xlIENsaWVudCBsaWJyYXJpZXMgZGV0ZXJtaW5lIGEgY2hhcmFjdGVyIHNldCBmcm9tCiAqIHRoZSA8Yj5OTFNfTEFORzwvYj4gZW52aXJvbm1lbnQgdmFyaWFibGUuCiAqIDwvcD4KICogPHA+CiAqIFBhc3NpbmcgdGhpcyBwYXJhbWV0ZXIgY2FuCiAqIHJlZHVjZSB0aGUgdGltZSB0YWtlbiB0byBjb25uZWN0LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHNlc3Npb25fbW9kZSBbb3B0aW9uYWxdIDxwPlRoaXMKICogcGFyYW1ldGVyIGlzIGF2YWlsYWJsZSBzaW5jZSB2ZXJzaW9uIFBIUCA1IChQRUNMIE9DSTggMS4xKSBhbmQgYWNjZXB0cyB0aGUKICogZm9sbG93aW5nIHZhbHVlczogPGI+T0NJX0RFRkFVTFQ8L2I+LAogKiA8Yj5PQ0lfU1lTT1BFUjwvYj4gYW5kIDxiPk9DSV9TWVNEQkE8L2I+LgogKiBJZiBlaXRoZXIgPGI+T0NJX1NZU09QRVI8L2I+IG9yCiAqIDxiPk9DSV9TWVNEQkE8L2I+IHdlcmUgc3BlY2lmaWVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgdHJ5CiAqIHRvIGVzdGFibGlzaCBwcml2aWxlZ2VkIGNvbm5lY3Rpb24gdXNpbmcgZXh0ZXJuYWwgY3JlZGVudGlhbHMuCiAqIFByaXZpbGVnZWQgY29ubmVjdGlvbnMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFRvIGVuYWJsZSB0aGVtIHlvdQogKiBuZWVkIHRvIHNldCBvY2k4LnByaXZpbGVnZWRfY29ubmVjdAogKiB0byBPbi4KICogPC9wPgogKiA8cD4KICogUEhQIDUuMyAoUEVDTCBPQ0k4IDEuMy40KSBpbnRyb2R1Y2VkIHRoZQogKiA8Yj5PQ0lfQ1JFRF9FWFQ8L2I+IG1vZGUgdmFsdWUuIFRoaXMgdGVsbHMgT3JhY2xlIHRvIHVzZQogKiBFeHRlcm5hbCBvciBPUyBhdXRoZW50aWNhdGlvbiwgd2hpY2ggbXVzdCBiZSBjb25maWd1cmVkIGluIHRoZQogKiBkYXRhYmFzZS4gVGhlIDxiPk9DSV9DUkVEX0VYVDwvYj4gZmxhZyBjYW4gb25seSBiZSB1c2VkCiAqIHdpdGggdXNlcm5hbWUgb2YgJiN4MDAwMjI7LyYjeDAwMDIyOyBhbmQgYSBlbXB0eSBwYXNzd29yZC4KICogb2NpOC5wcml2aWxlZ2VkX2Nvbm5lY3QKICogbWF5IGJlIE9uIG9yIE9mZi4KICogPC9wPgogKiA8cD4KICogPGI+T0NJX0NSRURfRVhUPC9iPiBtYXkgYmUgY29tYmluZWQgd2l0aCB0aGUKICogPGI+T0NJX1NZU09QRVI8L2I+IG9yCiAqIDxiPk9DSV9TWVNEQkE8L2I+IG1vZGVzLgogKiA8L3A+CiAqIDxwPgogKiA8Yj5PQ0lfQ1JFRF9FWFQ8L2I+IGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cyBmb3IKICogc2VjdXJpdHkgcmVhc29ucy4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIEEgY29ubmVjdGlvbiBpZGVudGlmaWVyIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCmZ1bmN0aW9uIG9jaV9uZXdfY29ubmVjdCgkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvbm5lY3Rpb25fc3RyaW5nID0gbnVsbCwgJGNoYXJhY3Rlcl9zZXQgPSBudWxsLCAkc2Vzc2lvbl9tb2RlID0gbnVsbCkge30KCi8qKgogKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogKiBDb25uZWN0IHRvIGFuIE9yYWNsZSBkYXRhYmFzZSB1c2luZyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1wY29ubmVjdC5waHAKICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgPHA+CiAqIFRoZSBPcmFjbGUgdXNlciBuYW1lLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIDxwPgogKiBUaGUgcGFzc3dvcmQgZm9yIDxpPnVzZXJuYW1lPC9pPi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRjb25uZWN0aW9uX3N0cmluZyBbb3B0aW9uYWxdIDxwPkNvbnRhaW5zCiAqIHRoZSBPcmFjbGUgaW5zdGFuY2UgdG8gY29ubmVjdCB0by4gSXQgY2FuIGJlCiAqIGFuIEVhc3kgQ29ubmVjdAogKiBzdHJpbmcsIG9yIGEgQ29ubmVjdCBOYW1lIGZyb20KICogdGhlIHRuc25hbWVzLm9yYSBmaWxlLCBvciB0aGUgbmFtZSBvZiBhIGxvY2FsCiAqIE9yYWNsZSBpbnN0YW5jZS4KICogPC9wPgogKiA8cD4KICogSWYgbm90IHNwZWNpZmllZCwgUEhQIHVzZXMKICogZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1Y2ggYXMgPGI+VFdPX1RBU0s8L2I+IChvbiBMaW51eCkKICogb3IgPGI+TE9DQUw8L2I+IChvbiBXaW5kb3dzKQogKiBhbmQgPGI+T1JBQ0xFX1NJRDwvYj4gdG8gZGV0ZXJtaW5lIHRoZQogKiBPcmFjbGUgaW5zdGFuY2UgdG8gY29ubmVjdCB0by4KICogPC9wPgogKiA8cD4KICogVG8gdXNlIHRoZSBFYXN5IENvbm5lY3QgbmFtaW5nIG1ldGhvZCwgUEhQIG11c3QgYmUgbGlua2VkIHdpdGggT3JhY2xlCiAqIDEwZyBvciBncmVhdGVyIENsaWVudCBsaWJyYXJpZXMuIFRoZSBFYXN5IENvbm5lY3Qgc3RyaW5nIGZvciBPcmFjbGUKICogMTBnIGlzIG9mIHRoZSBmb3JtOgogKiBbLy9daG9zdF9uYW1lWzpwb3J0XVsvc2VydmljZV9uYW1lXS4gRnJvbSBPcmFjbGUKICogMTFnLCB0aGUgc3ludGF4IGlzOgogKiBbLy9daG9zdF9uYW1lWzpwb3J0XVsvc2VydmljZV9uYW1lXVs6c2VydmVyX3R5cGVdWy9pbnN0YW5jZV9uYW1lXS4KICogU2VydmljZSBuYW1lcyBjYW4gYmUgZm91bmQgYnkgcnVubmluZyB0aGUgT3JhY2xlCiAqIHV0aWxpdHkgbHNucmN0bCBzdGF0dXMgb24gdGhlIGRhdGFiYXNlIHNlcnZlcgogKiBtYWNoaW5lLgogKiA8L3A+CiAqIDxwPgogKiBUaGUgdG5zbmFtZXMub3JhIGZpbGUgY2FuIGJlIGluIHRoZSBPcmFjbGUgTmV0CiAqIHNlYXJjaCBwYXRoLCB3aGljaAogKiBpbmNsdWRlcyAkT1JBQ0xFX0hPTUUvbmV0d29yay9hZG1pbgogKiBhbmQgL2V0Yy4gQWx0ZXJuYXRpdmVseQogKiBzZXQgVE5TX0FETUlOIHNvCiAqIHRoYXQgJFROU19BRE1JTi90bnNuYW1lcy5vcmEgaXMgcmVhZC4gTWFrZSBzdXJlCiAqIHRoZSB3ZWIgZGFlbW9uIGhhcyByZWFkIGFjY2VzcyB0byB0aGUgZmlsZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRjaGFyYWN0ZXJfc2V0IFtvcHRpb25hbF0gPHA+RGV0ZXJtaW5lcwogKiB0aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSBPcmFjbGUgQ2xpZW50IGxpYnJhcmllcy4gVGhlIGNoYXJhY3RlcgogKiBzZXQgZG9lcyBub3QgbmVlZCB0byBtYXRjaCB0aGUgY2hhcmFjdGVyIHNldCB1c2VkIGJ5IHRoZSBkYXRhYmFzZS4gSWYKICogaXQgZG9lc24ndCBtYXRjaCwgT3JhY2xlIHdpbGwgZG8gaXRzIGJlc3QgdG8gY29udmVydCBkYXRhIHRvIGFuZCBmcm9tCiAqIHRoZSBkYXRhYmFzZSBjaGFyYWN0ZXIgc2V0LiBEZXBlbmRpbmcgb24gdGhlIGNoYXJhY3RlciBzZXRzIHRoaXMgbWF5CiAqIG5vdCBnaXZlIHVzYWJsZSByZXN1bHRzLiBDb252ZXJzaW9uIGFsc28gYWRkcyBzb21lIHRpbWUgb3ZlcmhlYWQuCiAqIDwvcD4KICogPHA+CiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZQogKiBPcmFjbGUgQ2xpZW50IGxpYnJhcmllcyBkZXRlcm1pbmUgYSBjaGFyYWN0ZXIgc2V0IGZyb20KICogdGhlIDxiPk5MU19MQU5HPC9iPiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KICogPC9wPgogKiA8cD4KICogUGFzc2luZyB0aGlzIHBhcmFtZXRlciBjYW4KICogcmVkdWNlIHRoZSB0aW1lIHRha2VuIHRvIGNvbm5lY3QuCiAqIDwvcD4KICogQHBhcmFtIGludCAkc2Vzc2lvbl9tb2RlIFtvcHRpb25hbF0gPHA+VGhpcwogKiBwYXJhbWV0ZXIgaXMgYXZhaWxhYmxlIHNpbmNlIHZlcnNpb24gUEhQIDUgKFBFQ0wgT0NJOCAxLjEpIGFuZCBhY2NlcHRzIHRoZQogKiBmb2xsb3dpbmcgdmFsdWVzOiA8Yj5PQ0lfREVGQVVMVDwvYj4sCiAqIDxiPk9DSV9TWVNPUEVSPC9iPiBhbmQgPGI+T0NJX1NZU0RCQTwvYj4uCiAqIElmIGVpdGhlciA8Yj5PQ0lfU1lTT1BFUjwvYj4gb3IKICogPGI+T0NJX1NZU0RCQTwvYj4gd2VyZSBzcGVjaWZpZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCB0cnkKICogdG8gZXN0YWJsaXNoIHByaXZpbGVnZWQgY29ubmVjdGlvbiB1c2luZyBleHRlcm5hbCBjcmVkZW50aWFscy4KICogUHJpdmlsZWdlZCBjb25uZWN0aW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVG8gZW5hYmxlIHRoZW0geW91CiAqIG5lZWQgdG8gc2V0IG9jaTgucHJpdmlsZWdlZF9jb25uZWN0CiAqIHRvIE9uLgogKiA8L3A+CiAqIDxwPgogKiBQSFAgNS4zIChQRUNMIE9DSTggMS4zLjQpIGludHJvZHVjZWQgdGhlCiAqIDxiPk9DSV9DUkVEX0VYVDwvYj4gbW9kZSB2YWx1ZS4gVGhpcyB0ZWxscyBPcmFjbGUgdG8gdXNlCiAqIEV4dGVybmFsIG9yIE9TIGF1dGhlbnRpY2F0aW9uLCB3aGljaCBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gdGhlCiAqIGRhdGFiYXNlLiBUaGUgPGI+T0NJX0NSRURfRVhUPC9iPiBmbGFnIGNhbiBvbmx5IGJlIHVzZWQKICogd2l0aCB1c2VybmFtZSBvZiAmI3gwMDAyMjsvJiN4MDAwMjI7IGFuZCBhIGVtcHR5IHBhc3N3b3JkLgogKiBvY2k4LnByaXZpbGVnZWRfY29ubmVjdAogKiBtYXkgYmUgT24gb3IgT2ZmLgogKiA8L3A+CiAqIDxwPgogKiA8Yj5PQ0lfQ1JFRF9FWFQ8L2I+IG1heSBiZSBjb21iaW5lZCB3aXRoIHRoZQogKiA8Yj5PQ0lfU1lTT1BFUjwvYj4gb3IKICogPGI+T0NJX1NZU0RCQTwvYj4gbW9kZXMuCiAqIDwvcD4KICogPHA+CiAqIDxiPk9DSV9DUkVEX0VYVDwvYj4gaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzIGZvcgogKiBzZWN1cml0eSByZWFzb25zLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgQSBjb25uZWN0aW9uIGlkZW50aWZpZXIgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogKi8KZnVuY3Rpb24gb2NpX3Bjb25uZWN0KCR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY29ubmVjdGlvbl9zdHJpbmcgPSBudWxsLCAkY2hhcmFjdGVyX3NldCA9IG51bGwsICRzZXNzaW9uX21vZGUgPSBudWxsKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIFJldHVybnMgdGhlIGxhc3QgZXJyb3IgZm91bmQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktZXJyb3IucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzb3VyY2UgW29wdGlvbmFsXSA8cD4KICogRm9yIG1vc3QgZXJyb3JzLCA8aT5yZXNvdXJjZTwvaT4gaXMgdGhlCiAqIHJlc291cmNlIGhhbmRsZSB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGZhaWxpbmcgZnVuY3Rpb24gY2FsbC4KICogRm9yIGNvbm5lY3Rpb24gZXJyb3JzIHdpdGgge0BzZWUgb2NpX2Nvbm5lY3R9LAogKiB7QHNlZSBvY2lfbmV3X2Nvbm5lY3R9IG9yCiAqIHtAc2VlIG9jaV9wY29ubmVjdH0gZG8gbm90IHBhc3MgPGk+cmVzb3VyY2U8L2k+LgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgSWYgbm8gZXJyb3IgaXMgZm91bmQsIHtAc2VlIG9jaV9lcnJvcn0gcmV0dXJucwogKiA8Yj5GQUxTRTwvYj4uIE90aGVyd2lzZSwge0BzZWUgb2NpX2Vycm9yfSByZXR1cm5zIHRoZQogKiBlcnJvciBpbmZvcm1hdGlvbiBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KICogPC9wPgogKiA8cD4KICogPHRhYmxlPgogKiB7QHNlZSBvY2lfZXJyb3J9IEFycmF5IERlc2NyaXB0aW9uCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5BcnJheSBrZXk8L3RkPgogKiA8dGQ+VHlwZTwvdGQ+CiAqIDx0ZD5EZXNjcmlwdGlvbjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5jb2RlPC90ZD4KICogPHRkPmludGVnZXI8L3RkPgogKiA8dGQ+CiAqIFRoZSBPcmFjbGUgZXJyb3IgbnVtYmVyLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+bWVzc2FnZTwvdGQ+CiAqIDx0ZD5zdHJpbmc8L3RkPgogKiA8dGQ+CiAqIFRoZSBPcmFjbGUgZXJyb3IgdGV4dC4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPm9mZnNldDwvdGQ+CiAqIDx0ZD5pbnRlZ2VyPC90ZD4KICogPHRkPgogKiBUaGUgYnl0ZSBwb3NpdGlvbiBvZiBhbiBlcnJvciBpbiB0aGUgU1FMIHN0YXRlbWVudC4gSWYgdGhlcmUKICogd2FzIG5vIHN0YXRlbWVudCwgdGhpcyBpcyAwCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5zcWx0ZXh0PC90ZD4KICogPHRkPnN0cmluZzwvdGQ+CiAqIDx0ZD4KICogVGhlIFNRTCBzdGF0ZW1lbnQgdGV4dC4gSWYgdGhlcmUgd2FzIG5vIHN0YXRlbWVudCwgdGhpcyBpcwogKiBhbiBlbXB0eSBzdHJpbmcuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqLwojW0FycmF5U2hhcGUoWyJjb2RlIiA9PiAiaW50IiwgIm1lc3NhZ2UiID0+ICJzdHJpbmciLCAib2Zmc2V0IiA9PiAiaW50IiwgInNxbHRleHQiID0+ICJzdHJpbmciXSldCmZ1bmN0aW9uIG9jaV9lcnJvcigkcmVzb3VyY2UgPSBudWxsKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIEZyZWVzIGEgZGVzY3JpcHRvcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1mcmVlLWRlc2NyaXB0b3IucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZGVzY3JpcHRvcgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9jaV9mcmVlX2Rlc2NyaXB0b3IoJGRlc2NyaXB0b3IpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogQ29tcGFyZXMgdHdvIExPQi9GSUxFIGxvY2F0b3JzIGZvciBlcXVhbGl0eQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1sb2ItaXMtZXF1YWwucGhwCiAqIEBwYXJhbSBPQ0lfTG9iICRsb2IxIDxwPgogKiBBIExPQiBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEBwYXJhbSBPQ0lfTG9iICRsb2IyIDxwPgogKiBBIExPQiBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiB0aGVzZSBvYmplY3RzIGFyZSBlcXVhbCwgPGI+RkFMU0U8L2I+IG90aGVyd2lzZS4KICovCmZ1bmN0aW9uIG9jaV9sb2JfaXNfZXF1YWwoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPQ0lMb2InXSwgZGVmYXVsdDogJ09DSV9Mb2InKV0gJGxvYjEsCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPQ0lMb2InXSwgZGVmYXVsdDogJ09DSV9Mb2InKV0gJGxvYjIKKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIENvcGllcyBsYXJnZSBvYmplY3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktbG9iLWNvcHkucGhwCiAqIEBwYXJhbSBPQ0lfTG9iICRsb2JfdG8gPHA+CiAqIFRoZSBkZXN0aW5hdGlvbiBMT0IuCiAqIDwvcD4KICogQHBhcmFtIE9DSV9Mb2IgJGxvYl9mcm9tIDxwPgogKiBUaGUgY29waWVkIExPQi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRsZW5ndGggW29wdGlvbmFsXSA8cD4KICogSW5kaWNhdGVzIHRoZSBsZW5ndGggb2YgZGF0YSB0byBiZSBjb3BpZWQuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvY2lfbG9iX2NvcHkoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPQ0lMb2InXSwgZGVmYXVsdDogJ09DSV9Mb2InKV0gJGxvYl90bywKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09DSUxvYiddLCBkZWZhdWx0OiAnT0NJX0xvYicpXSAkbG9iX2Zyb20sCiAgICAkbGVuZ3RoID0gMAopIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogQ29tbWl0cyB0aGUgb3V0c3RhbmRpbmcgZGF0YWJhc2UgdHJhbnNhY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktY29tbWl0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+CiAqIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5CiAqIHtAc2VlIG9jaV9jb25uZWN0fSwge0BzZWUgb2NpX3Bjb25uZWN0fSwgb3Ige0BzZWUgb2NpX25ld19jb25uZWN0fS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9jaV9jb21taXQoJGNvbm5lY3Rpb24pIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogUm9sbHMgYmFjayB0aGUgb3V0c3RhbmRpbmcgZGF0YWJhc2UgdHJhbnNhY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktcm9sbGJhY2sucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD4KICogQW4gT3JhY2xlIGNvbm5lY3Rpb24gaWRlbnRpZmllciwgcmV0dXJuZWQgYnkKICoge0BzZWUgb2NpX2Nvbm5lY3R9LCB7QHNlZSBvY2lfcGNvbm5lY3R9CiAqIG9yIHtAc2VlIG9jaV9uZXdfY29ubmVjdH0uCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvY2lfcm9sbGJhY2soJGNvbm5lY3Rpb24pIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogSW5pdGlhbGl6ZXMgYSBuZXcgZW1wdHkgTE9CIG9yIEZJTEUgZGVzY3JpcHRvcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1uZXctZGVzY3JpcHRvci5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBBbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiB7QHNlZSBvY2lfY29ubmVjdH0gb3Ige0BzZWUgb2NpX3Bjb25uZWN0fS4KICogPC9wPgogKiBAcGFyYW0gaW50ICR0eXBlIFtvcHRpb25hbF0gPHA+CiAqIFZhbGlkIHZhbHVlcyBmb3IgPGk+dHlwZTwvaT4gYXJlOgogKiA8Yj5PQ0lfRFRZUEVfRklMRTwvYj4sIDxiPk9DSV9EVFlQRV9MT0I8L2I+IGFuZAogKiA8Yj5PQ0lfRFRZUEVfUk9XSUQ8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gT0NJX0xvYnxPQ0lMb2J8ZmFsc2UgQSBuZXcgTE9CIG9yIEZJTEUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPQ0lMb2J8ZmFsc2UnXSwgZGVmYXVsdDogJ09DSV9Mb2J8ZmFsc2UnKV0KZnVuY3Rpb24gb2NpX25ld19kZXNjcmlwdG9yKCRjb25uZWN0aW9uLCAkdHlwZSA9IE9DSV9EVFlQRV9MT0IpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogU2V0cyBudW1iZXIgb2Ygcm93cyB0byBiZSBwcmVmZXRjaGVkIGJ5IHF1ZXJpZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktc2V0LXByZWZldGNoLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudCA8cD5BIHZhbGlkIE9DSTggc3RhdGVtZW50CiAqIGlkZW50aWZpZXIgY3JlYXRlZCBieSB7QHNlZSBvY2lfcGFyc2V9IGFuZCBleGVjdXRlZAogKiBieSB7QHNlZSBvY2lfZXhlY3V0ZX0sIG9yIGEgUkVGCiAqIENVUlNPUiBzdGF0ZW1lbnQgaWRlbnRpZmllci48L3A+CiAqIEBwYXJhbSBpbnQgJHJvd3MgPHA+CiAqIFRoZSBudW1iZXIgb2Ygcm93cyB0byBiZSBwcmVmZXRjaGVkLCAmZ3Q7PSAwCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvY2lfc2V0X3ByZWZldGNoKCRzdGF0ZW1lbnQsICRyb3dzKSB7fQoKLyoqCiAqIChQSFAgNS4zLjIsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjQuMCk8YnIvPgogKiBTZXRzIHRoZSBjbGllbnQgaWRlbnRpZmllcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1zZXQtY2xpZW50LWlkZW50aWZpZXIucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD5BbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiByZXR1cm5lZCBieSB7QHNlZSBvY2lfY29ubmVjdH0sIHtAc2VlIG9jaV9wY29ubmVjdH0sCiAqIG9yIHtAc2VlIG9jaV9uZXdfY29ubmVjdH0uPC9wPgogKiBAcGFyYW0gc3RyaW5nICRjbGllbnRfaWRlbnRpZmllciA8cD4KICogVXNlciBjaG9zZW4gc3RyaW5nIHVwIHRvIDY0IGJ5dGVzIGxvbmcuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvY2lfc2V0X2NsaWVudF9pZGVudGlmaWVyKCRjb25uZWN0aW9uLCAkY2xpZW50X2lkZW50aWZpZXIpIHt9CgovKioKICogKFBIUCA1LjMuMiwgUEVDTCBPQ0k4ICZndDs9IDEuNC4wKTxici8+CiAqIFNldHMgdGhlIGRhdGFiYXNlIGVkaXRpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktc2V0LWVkaXRpb24ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGVkaXRpb24gPHA+CiAqIE9yYWNsZSBEYXRhYmFzZSBlZGl0aW9uIG5hbWUgcHJldmlvdXNseSBjcmVhdGVkIHdpdGggdGhlIFNRTAogKiAiQ1JFQVRFIEVESVRJT04iIGNvbW1hbmQuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvY2lfc2V0X2VkaXRpb24oJGVkaXRpb24pIHt9CgovKioKICogKFBIUCA1LjMuMiwgUEVDTCBPQ0k4ICZndDs9IDEuNC4wKTxici8+CiAqIFNldHMgdGhlIG1vZHVsZSBuYW1lCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLXNldC1tb2R1bGUtbmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPkFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHJldHVybmVkIGJ5IHtAc2VlIG9jaV9jb25uZWN0fSwge0BzZWUgb2NpX3Bjb25uZWN0fSwKICogb3Ige0BzZWUgb2NpX25ld19jb25uZWN0fS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZV9uYW1lIDxwPgogKiBVc2VyIGNob3NlbiBzdHJpbmcgdXAgdG8gNDggYnl0ZXMgbG9uZy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9jaV9zZXRfbW9kdWxlX25hbWUoJGNvbm5lY3Rpb24sICRtb2R1bGVfbmFtZSkge30KCi8qKgogKiAoUEhQIDUuMy4yLCBQRUNMIE9DSTggJmd0Oz0gMS40LjApPGJyLz4KICogU2V0cyB0aGUgYWN0aW9uIG5hbWUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktc2V0LWFjdGlvbi5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPkFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsCiAqIHJldHVybmVkIGJ5IHtAc2VlIG9jaV9jb25uZWN0fSwge0BzZWUgb2NpX3Bjb25uZWN0fSwKICogb3Ige0BzZWUgb2NpX25ld19jb25uZWN0fS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGFjdGlvbl9uYW1lIDxwPgogKiBVc2VyIGNob3NlbiBzdHJpbmcgdXAgdG8gMzIgYnl0ZXMgbG9uZy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9jaV9zZXRfYWN0aW9uKCRjb25uZWN0aW9uLCAkYWN0aW9uX25hbWUpIHt9CgovKioKICogKFBIUCA1LjMuMiwgUEVDTCBPQ0k4ICZndDs9IDEuNC4wKTxici8+CiAqIFNldHMgdGhlIGNsaWVudCBpbmZvcm1hdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1zZXQtY2xpZW50LWluZm8ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD5BbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiByZXR1cm5lZCBieSB7QHNlZSBvY2lfY29ubmVjdH0sIHtAc2VlIG9jaV9wY29ubmVjdH0sCiAqIG9yIHtAc2VlIG9jaV9uZXdfY29ubmVjdH0uPC9wPgogKiBAcGFyYW0gc3RyaW5nICRjbGllbnRfaW5mbyA8cD4KICogVXNlciBjaG9zZW4gc3RyaW5nIHVwIHRvIDY0IGJ5dGVzIGxvbmcuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvY2lfc2V0X2NsaWVudF9pbmZvKCRjb25uZWN0aW9uLCAkY2xpZW50X2luZm8pIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogQ2hhbmdlcyBwYXNzd29yZCBvZiBPcmFjbGUncyB1c2VyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpLXBhc3N3b3JkLWNoYW5nZS5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBBbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiB7QHNlZSBvY2lfY29ubmVjdH0gb3Ige0BzZWUgb2NpX3Bjb25uZWN0fS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSA8cD4KICogVGhlIE9yYWNsZSB1c2VyIG5hbWUuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkb2xkX3Bhc3N3b3JkIDxwPgogKiBUaGUgb2xkIHBhc3N3b3JkLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5ld19wYXNzd29yZCA8cD4KICogVGhlIG5ldyBwYXNzd29yZCB0byBiZSBzZXQuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBvY2lfcGFzc3dvcmRfY2hhbmdlKCRjb25uZWN0aW9uLCAkdXNlcm5hbWUsICRvbGRfcGFzc3dvcmQsICRuZXdfcGFzc3dvcmQpIHt9CgovKioKICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICogQWxsb2NhdGVzIG5ldyBjb2xsZWN0aW9uIG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1uZXctY29sbGVjdGlvbi5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIDxwPgogKiBBbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiB7QHNlZSBvY2lfY29ubmVjdH0gb3Ige0BzZWUgb2NpX3Bjb25uZWN0fS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR0ZG8gPHA+CiAqIFNob3VsZCBiZSBhIHZhbGlkIG5hbWVkIHR5cGUgKHVwcGVyY2FzZSkuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc2NoZW1hIFtvcHRpb25hbF0gPHA+CiAqIFNob3VsZCBwb2ludCB0byB0aGUgc2NoZW1lLCB3aGVyZSB0aGUgbmFtZWQgdHlwZSB3YXMgY3JlYXRlZC4gVGhlIG5hbWUKICogb2YgdGhlIGN1cnJlbnQgdXNlciBpcyB0aGUgZGVmYXVsdCB2YWx1ZS4KICogPC9wPgogKiBAcmV0dXJuIE9DSV9Db2xsZWN0aW9ufGZhbHNlIEEgbmV3IDxiPk9DSUNvbGxlY3Rpb248L2I+IG9iamVjdCBvciA8Yj5GQUxTRTwvYj4gb24KICogZXJyb3IuCiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPQ0lDb2xsZWN0aW9ufGZhbHNlJ10sIGRlZmF1bHQ6ICdPQ0lfQ29sbGVjdGlvbnxmYWxzZScpXQpmdW5jdGlvbiBvY2lfbmV3X2NvbGxlY3Rpb24oJGNvbm5lY3Rpb24sICR0ZG8sICRzY2hlbWEgPSBudWxsKSB7fQoKLyoqCiAqIEFsaWFzIG9mIHtAc2VlIG9jaV9mcmVlX3N0YXRlbWVudCgpfQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaWZyZWVjdXJzb3IucGhwCiAqIEBwYXJhbSAkc3RhdGVtZW50X3Jlc291cmNlCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gb2NpX2ZyZWVfY3Vyc29yKCRzdGF0ZW1lbnRfcmVzb3VyY2UpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mCiAqIHtAc2VlIG9jaV9mcmVlX3N0YXRlbWVudH0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2lmcmVlY3Vyc29yLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudF9yZXNvdXJjZQogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIm9jaV9mcmVlX3N0YXRlbWVudCIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaWZyZWVjdXJzb3IoJHN0YXRlbWVudF9yZXNvdXJjZSkge30KCi8qKgogKiAoUEhQIDQsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2Yge0BzZWUgb2NpX2JpbmRfYnlfbmFtZX0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2liaW5kYnluYW1lLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudAogKiBAcGFyYW0gc3RyaW5nICRjb2x1bW5fbmFtZQogKiBAcGFyYW0gbWl4ZWQgJiR2YXJpYWJsZQogKiBAcGFyYW0gaW50ICRtYXhpbXVtX2xlbmd0aCBbb3B0aW9uYWxdCiAqIEBwYXJhbSBpbnQgJHR5cGUgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAib2NpX2JpbmRfYnlfbmFtZSIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaWJpbmRieW5hbWUoJHN0YXRlbWVudCwgJGNvbHVtbl9uYW1lLCAmJHZhcmlhYmxlLCAkbWF4aW11bV9sZW5ndGggPSAtMSwgJHR5cGUgPSBTUUxUX0NIUikge30KCi8qKgogKiAoUEhQIDQsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2Yge0BzZWUgb2NpX2RlZmluZV9ieV9uYW1lfQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaWRlZmluZWJ5bmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQgPHA+QSB2YWxpZCBPQ0k4IHN0YXRlbWVudCBpZGVudGlmaWVyIGNyZWF0ZWQgYnkge0BzZWUgb2NpX3BhcnNlKCl9IGFuZCBleGVjdXRlZCBieSB7QHNlZSBvY2lfZXhlY3V0ZSgpfSwgb3IgYSBSRUYgQ1VSU09SIHN0YXRlbWVudCBpZGVudGlmaWVyLjwvcD4KICogQHBhcmFtIHN0cmluZyAkY29sdW1uX25hbWUgPHA+VGhlIGNvbHVtbiBuYW1lIHVzZWQgaW4gdGhlIHF1ZXJ5LiBVc2UgdXBwZXJjYXNlIGZvciBPcmFjbGUncyBkZWZhdWx0LCBub24tY2FzZSBzZW5zaXRpdmUgY29sdW1uIG5hbWVzLiBVc2UgdGhlIGV4YWN0IGNvbHVtbiBuYW1lIGNhc2UgZm9yIGNhc2Utc2Vuc2l0aXZlIGNvbHVtbiBuYW1lcy48L3A+CiAqIEBwYXJhbSBtaXhlZCAmJHZhcmlhYmxlIDxwPlRoZSBQSFAgdmFyaWFibGUgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJldHVybmVkIGNvbHVtbiB2YWx1ZS48L3A+CiAqIEBwYXJhbSBpbnQgJHR5cGUgW29wdGlvbmFsXSA8cD5UaGUgZGF0YSB0eXBlIHRvIGJlIHJldHVybmVkLiBHZW5lcmFsbHkgbm90IG5lZWRlZC4gTm90ZSB0aGF0IE9yYWNsZS1zdHlsZSBkYXRhIGNvbnZlcnNpb25zIGFyZSBub3QgcGVyZm9ybWVkLiBGb3IgZXhhbXBsZSwgU1FMVF9JTlQgd2lsbCBiZSBpZ25vcmVkIGFuZCB0aGUgcmV0dXJuZWQgZGF0YSB0eXBlIHdpbGwgc3RpbGwgYmUgU1FMVF9DSFIuCiAqIFlvdSBjYW4gb3B0aW9uYWxseSB1c2Uge0BzZWUgb2NpX25ld19kZXNjcmlwdG9yKCl9IHRvIGFsbG9jYXRlIExPQi9ST1dJRC9CRklMRSBkZXNjcmlwdG9ycy48L3A+CiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICJvY2lfZGVmaW5lX2J5X25hbWUiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2lkZWZpbmVieW5hbWUoJHN0YXRlbWVudCwgJGNvbHVtbl9uYW1lLCAmJHZhcmlhYmxlLCAkdHlwZSA9IFNRTFRfQ0hSKSB7fQoKLyoqCiAqIChQSFAgNCwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZiB7QHNlZSBvY2lfZmllbGRfaXNfbnVsbH0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ljb2x1bW5pc251bGwucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50CiAqIEBwYXJhbSBtaXhlZCAkY29sdW1uX251bWJlcl9vcl9uYW1lCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgaWYgZmllbGQgaXMgTlVMTCwgRkFMU0Ugb3RoZXJ3aXNlLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAib2NpX2ZpZWxkX2lzX251bGwiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2ljb2x1bW5pc251bGwoJHN0YXRlbWVudCwgJGNvbHVtbl9udW1iZXJfb3JfbmFtZSkge30KCi8qKgogKiAoUEhQIDQsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2Yge0BzZWUgb2NpX2ZpZWxkX25hbWV9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpY29sdW1ubmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQKICogQHBhcmFtIG1peGVkICRjb2x1bW5fbnVtYmVyCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFJldHVybnMgdGhlIG5hbWUgYXMgYSBzdHJpbmcsIG9yIEZBTFNFIG9uIGVycm9ycy4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIm9jaV9maWVsZF9uYW1lIiwgc2luY2U6ICI1LjQiKV0KZnVuY3Rpb24gb2NpY29sdW1ubmFtZSgkc3RhdGVtZW50LCAkY29sdW1uX251bWJlcikge30KCi8qKgogKiAoUEhQIDQsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2Yge0BzZWUgb2NpX2ZpZWxkX3NpemV9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpY29sdW1uc2l6ZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnQKICogQHBhcmFtIG1peGVkICRjb2x1bW5fbnVtYmVyX29yX25hbWUKICogQHJldHVybiBpbnR8ZmFsc2UgUmV0dXJucyB0aGUgc2l6ZSBvZiBhIGZpZWxkIGluIGJ5dGVzLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3JzLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAib2NpX2ZpZWxkX3NpemUiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2ljb2x1bW5zaXplKCRzdGF0ZW1lbnQsICRjb2x1bW5fbnVtYmVyX29yX25hbWUpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mIHtAc2VlIG9jaV9maWVsZF9zY2FsZX0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ljb2x1bW5zY2FsZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnRfcmVzb3VyY2UKICogQHBhcmFtICRjb2x1bW5fbnVtYmVyCiAqIEByZXR1cm4gaW50fGZhbHNlIFJldHVybnMgdGhlIHNjYWxlIGFzIGFuIGludGVnZXIsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvcnMuCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICJvY2lfZmllbGRfc2NhbGUiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2ljb2x1bW5zY2FsZSgkc3RhdGVtZW50X3Jlc291cmNlLCAkY29sdW1uX251bWJlcikge30KCi8qKgogKiAoUEhQIDQsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2Yge0BzZWUgb2NpX2ZpZWxkX3ByZWNpc2lvbn0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ljb2x1bW5wcmVjaXNpb24ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50X3Jlc291cmNlCiAqIEBwYXJhbSBzdHJpbmd8aW50ICRjb2x1bW5fbnVtYmVyCiAqIEByZXR1cm4gaW50fGZhbHNlIFJldHVybnMgdGhlIHByZWNpc2lvbiAgYXMgYW4gaW50ZWdlciwgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9ycy4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIm9jaV9maWVsZF9wcmVjaXNpb24iLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2ljb2x1bW5wcmVjaXNpb24oJHN0YXRlbWVudF9yZXNvdXJjZSwgJGNvbHVtbl9udW1iZXIpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mIHtAc2VlIG9jaV9maWVsZF90eXBlfQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaWNvbHVtbnR5cGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50X3Jlc291cmNlCiAqIEBwYXJhbSBzdHJpbmd8aW50ICRjb2x1bW5fbnVtYmVyCiAqIEByZXR1cm4gbWl4ZWR8ZmFsc2UgUmV0dXJucyB0aGUgZmllbGQgZGF0YSB0eXBlIGFzIGEgc3RyaW5nLCBvciBGQUxTRSBvbiBlcnJvcnMuCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICJvY2lfZmllbGRfdHlwZSIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaWNvbHVtbnR5cGUoJHN0YXRlbWVudF9yZXNvdXJjZSwgJGNvbHVtbl9udW1iZXIpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mIHtAc2VlIG9jaV9maWVsZF90eXBlX3Jhd30KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ljb2x1bW50eXBlcmF3LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudF9yZXNvdXJjZQogKiBAcGFyYW0gc3RyaW5nfGludCAkY29sdW1uX251bWJlcgogKiBAcmV0dXJuIGludHxmYWxzZSBSZXR1cm5zIE9yYWNsZSdzIHJhdyBkYXRhIHR5cGUgYXMgYSBudW1iZXIsIG9yIEZBTFNFIG9uIGVycm9ycy4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIm9jaV9maWVsZF90eXBlX3JhdyIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaWNvbHVtbnR5cGVyYXcoJHN0YXRlbWVudF9yZXNvdXJjZSwgJGNvbHVtbl9udW1iZXIpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mIHtAc2VlIG9jaV9leGVjdXRlfQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaWV4ZWN1dGUucGhwCiAqIEBwYXJhbSAkc3RhdGVtZW50X3Jlc291cmNlCiAqIEBwYXJhbSAkbW9kZSBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICJvY2lfZXhlY3V0ZSIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaWV4ZWN1dGUoJHN0YXRlbWVudF9yZXNvdXJjZSwgJG1vZGUgPSBPQ0lfQ09NTUlUX09OX1NVQ0NFU1MpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mIHtAc2VlIG9jaV9jYW5jZWx9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpY2FuY2VsLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudF9yZXNvdXJjZQogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZQogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAnb2NpX2NhbmNlbCcsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaWNhbmNlbCgkc3RhdGVtZW50X3Jlc291cmNlKSB7fQoKLyoqCiAqIChQSFAgNCwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZiB7QHNlZSBvY2lfZmV0Y2h9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpZmV0Y2gucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50X3Jlc291cmNlCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBpZiB0aGVyZSBhcmUgbm8gbW9yZSByb3dzIGluIHRoZSBzdGF0ZW1lbnQuCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICJvY2lfZmV0Y2giLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2lmZXRjaCgkc3RhdGVtZW50X3Jlc291cmNlKSB7fQoKLyoqCiAqIChQSFAgNCwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZiB7QHNlZSBvY2lfZmV0Y2hfYWxsfQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaWZldGNoc3RhdGVtZW50LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudF9yZXNvdXJjZQogKiBAcGFyYW0gYXJyYXkgJiRvdXRwdXQKICogQHBhcmFtIGludCAkc2tpcCBbb3B0aW9uYWxdCiAqIEBwYXJhbSBpbnQgJG1heGltdW1fcm93cyBbb3B0aW9uYWxdCiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0KICogQHJldHVybiBpbnR8ZmFsc2UgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gb3V0cHV0LCB3aGljaCBtYXkgYmUgMCBvciBtb3JlLCBvciBGQUxTRSBvbiBmYWlsdXJlLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAib2NpX2ZldGNoX2FsbCIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaWZldGNoc3RhdGVtZW50KCRzdGF0ZW1lbnRfcmVzb3VyY2UsICYkb3V0cHV0LCAkc2tpcCwgJG1heGltdW1fcm93cywgJGZsYWdzKSB7fQoKLyoqCiAqIChQSFAgNCwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZiB7QHNlZSBvY2lfZnJlZV9zdGF0ZW1lbnR9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpZnJlZXN0YXRlbWVudC5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnRfcmVzb3VyY2UKICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUuCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICJvY2lfZnJlZV9zdGF0ZW1lbnQiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2lmcmVlc3RhdGVtZW50KCRzdGF0ZW1lbnRfcmVzb3VyY2UpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mIHtAc2VlIG9jaV9pbnRlcm5hbF9kZWJ1Z30KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2lpbnRlcm5hbGRlYnVnLnBocAogKiBAcGFyYW0gYm9vbCAkbW9kZQogKiBAcmVtb3ZlZCA4LjAKICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIm9jaV9pbnRlcm5hbF9kZWJ1ZyIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaWludGVybmFsZGVidWcoJG1vZGUpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mIHtAc2VlIG9jaV9udW1fZmllbGRzfQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaW51bWNvbHMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50X3Jlc291cmNlCiAqIEByZXR1cm4gaW50fGZhbHNlIFJldHVybnMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGFzIGFuIGludGVnZXIsIG9yIEZBTFNFIG9uIGVycm9ycy4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIm9jaV9udW1fZmllbGRzIiwgc2luY2U6ICI1LjQiKV0KZnVuY3Rpb24gb2NpbnVtY29scygkc3RhdGVtZW50X3Jlc291cmNlKSB7fQoKLyoqCiAqIChQSFAgNCwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZiB7QHNlZSBvY2lfcGFyc2V9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpcGFyc2UucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbl9yZXNvdXJjZQogKiBAcGFyYW0gc3RyaW5nICRzcWxfdGV4dAogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIFJldHVybnMgYSBzdGF0ZW1lbnQgaGFuZGxlIG9uIHN1Y2Nlc3MsIG9yIEZBTFNFIG9uIGVycm9yLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAib2NpX3BhcnNlIiwgc2luY2U6ICI1LjQiKV0KZnVuY3Rpb24gb2NpcGFyc2UoJGNvbm5lY3Rpb25fcmVzb3VyY2UsICRzcWxfdGV4dCkge30KCi8qKgogKiAoUEhQIDQsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2Yge0BzZWUgb2NpX25ld19jdXJzb3J9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpbmV3Y3Vyc29yLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25fcmVzb3VyY2UKICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBSZXR1cm5zIGEgbmV3IHN0YXRlbWVudCBoYW5kbGUsIG9yIEZBTFNFIG9uIGVycm9yLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAib2NpX25ld19jdXJzb3IiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2luZXdjdXJzb3IoJGNvbm5lY3Rpb25fcmVzb3VyY2UpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mIHtAc2VlIG9jaV9yZXN1bHR9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpcmVzdWx0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHN0YXRlbWVudF9yZXNvdXJjZQogKiBAcGFyYW0gJGNvbHVtbl9udW1iZXJfb3JfbmFtZQogKiBAcmV0dXJuIGZhbHNlfG1peGVkIFJldHVybnMgZXZlcnl0aGluZyBhcyBzdHJpbmdzIGV4Y2VwdCBmb3IgYWJzdHJhY3QgdHlwZXMgKFJPV0lEcywgTE9CcyBhbmQgRklMRXMpLiBSZXR1cm5zIEZBTFNFIG9uIGVycm9yLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAib2NpX3Jlc3VsdCIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaXJlc3VsdCgkc3RhdGVtZW50X3Jlc291cmNlLCAkY29sdW1uX251bWJlcl9vcl9uYW1lKSB7fQoKLyoqCiAqIChQSFAgNCwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZiB7QHNlZSBvY2lfc2VydmVyX3ZlcnNpb259CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2Npc2VydmVydmVyc2lvbi5waHAKICogQHBhcmFtICRjb25uZWN0aW9uX3Jlc291cmNlCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFJldHVybnMgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gYXMgYSBzdHJpbmcgb3IgRkFMU0Ugb24gZXJyb3IuCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICJvY2lfc2VydmVyX3ZlcnNpb24iLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2lzZXJ2ZXJ2ZXJzaW9uKCRjb25uZWN0aW9uX3Jlc291cmNlKSB7fQoKLyoqCiAqIChQSFAgNCwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZiB7QHNlZSBvY2lfc3RhdGVtZW50X3R5cGV9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2Npc3RhdGVtZW50dHlwZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnRfcmVzb3VyY2UKICogQHJldHVybiBzdHJpbmd8ZmFsc2UgUmV0dXJucyBldmVyeXRoaW5nIGFzIHN0cmluZ3MgZXhjZXB0IGZvciBhYnN0cmFjdCB0eXBlcyAoUk9XSURzLCBMT0JzIGFuZCBGSUxFcykuIFJldHVybnMgRkFMU0Ugb24gZXJyb3IuCiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICJvY2lfc3RhdGVtZW50X3R5cGUiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2lzdGF0ZW1lbnR0eXBlKCRzdGF0ZW1lbnRfcmVzb3VyY2UpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mIHtAc2VlIG9jaV9udW1fcm93c30KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2lyb3djb3VudC5waHAKICogQHBhcmFtIHJlc291cmNlICRzdGF0ZW1lbnRfcmVzb3VyY2UKICogQHJldHVybiBpbnR8ZmFsc2UgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQgYXMgYW4gaW50ZWdlciwgb3IgRkFMU0Ugb24gZXJyb3JzLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAib2NpX251bV9yb3dzIiwgc2luY2U6ICI1LjQiKV0KZnVuY3Rpb24gb2Npcm93Y291bnQoJHN0YXRlbWVudF9yZXNvdXJjZSkge30KCi8qKgogKiAoUEhQIDQsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2Yge0BzZWUgb2NpX2Nsb3NlfQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaWxvZ29mZi5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uX3Jlc291cmNlCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAib2NpX2Nsb3NlIiwgc2luY2U6ICI1LjQiKV0KZnVuY3Rpb24gb2NpbG9nb2ZmKCRjb25uZWN0aW9uX3Jlc291cmNlKSB7fQoKLyoqCiAqIChQSFAgNCwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZiB7QHNlZSBvY2lfY29ubmVjdH0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2lsb2dvbi5waHAKICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUKICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQKICogQHBhcmFtIHN0cmluZyAkY29ubmVjdGlvbl9zdHJpbmcgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nICRjaGFyYWN0ZXJfc2V0IFtvcHRpb25hbF0KICogQHBhcmFtIGludCAkc2Vzc2lvbl9tb2RlIFtvcHRpb25hbF0KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBSZXR1cm5zIGEgY29ubmVjdGlvbiBpZGVudGlmaWVyIG9yIEZBTFNFIG9uIGVycm9yLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAib2NpX2Nvbm5lY3QiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2lsb2dvbigkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvbm5lY3Rpb25fc3RyaW5nLCAkY2hhcmFjdGVyX3NldCwgJHNlc3Npb25fbW9kZSkge30KCi8qKgogKiAoUEhQIDQsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2YKICoge0BzZWUgb2NpX25ld19jb25uZWN0fQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaW5sb2dvbi5waHAKICogQHBhcmFtICR1c2VybmFtZQogKiBAcGFyYW0gJHBhc3N3b3JkCiAqIEBwYXJhbSAkY29ubmVjdGlvbl9zdHJpbmcgW29wdGlvbmFsXQogKiBAcGFyYW0gJGNoYXJhY3Rlcl9zZXQgW29wdGlvbmFsXQogKiBAcGFyYW0gJHNlc3Npb25fbW9kZSBbb3B0aW9uYWxdCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgPHA+UmV0dXJucyBhIGNvbm5lY3Rpb24gaWRlbnRpZmllciBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuPC9wPgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAib2NpX25ld19jb25uZWN0Iiwgc2luY2U6ICI1LjQiKV0KZnVuY3Rpb24gb2NpbmxvZ29uKCR1c2VybmFtZSwgJHBhc3N3b3JkLCAkY29ubmVjdGlvbl9zdHJpbmcsICRjaGFyYWN0ZXJfc2V0LCAkc2Vzc2lvbl9tb2RlKSB7fQoKLyoqCiAqIChQSFAgNCwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZgogKiB7QHNlZSBvY2lfcGNvbm5lY3R9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpcGxvZ29uLnBocAogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSA8cD5UaGUgT3JhY2xlIHVzZXIgbmFtZS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIDxwPiBUaGUgcGFzc3dvcmQgZm9yIHVzZXJuYW1lPC9wPgogKiBAcGFyYW0gJGNvbm5lY3Rpb25fc3RyaW5nIFtvcHRpb25hbF0KICogQHBhcmFtICRjaGFyYWN0ZXJfc2V0IFtvcHRpb25hbF0KICogQHBhcmFtICRzZXNzaW9uX21vZGUgW29wdGlvbmFsXQogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIDxwPlJldHVybnMgYSBjb25uZWN0aW9uIGlkZW50aWZpZXIgb3IgPGI+RkFMU0U8L2I+IG9uIGVycm9yLjwvcD4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIm9jaV9wY29ubmVjdCIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaXBsb2dvbigkdXNlcm5hbWUsICRwYXNzd29yZCwgJGNvbm5lY3Rpb25fc3RyaW5nLCAkY2hhcmFjdGVyX3NldCwgJHNlc3Npb25fbW9kZSkge30KCi8qKgogKiAoUEhQIDQsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2YKICoge0BzZWUgb2NpX2Vycm9yfQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaWVycm9yLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25fb3Jfc3RhdGVtZW50X3Jlc291cmNlIFtvcHRpb25hbF0gRm9yIG1vc3QgZXJyb3JzLCByZXNvdXJjZSBpcyB0aGUgcmVzb3VyY2UgaGFuZGxlIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgZmFpbGluZyBmdW5jdGlvbiBjYWxsLgogKiBGb3IgY29ubmVjdGlvbiBlcnJvcnMgd2l0aCBvY2lfY29ubmVjdCgpLCBvY2lfbmV3X2Nvbm5lY3QoKSBvciBvY2lfcGNvbm5lY3QoKSBkbyBub3QgcGFzcyByZXNvdXJjZS4KICogQHJldHVybiBhcnJheXxmYWxzZSBJZiBubyBlcnJvciBpcyBmb3VuZCwgb2NpX2Vycm9yKCkgcmV0dXJucyBGQUxTRS4gT3RoZXJ3aXNlLCBvY2lfZXJyb3IoKSByZXR1cm5zIHRoZSBlcnJvciBpbmZvcm1hdGlvbiBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIm9jaV9lcnJvciIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaWVycm9yKCRjb25uZWN0aW9uX29yX3N0YXRlbWVudF9yZXNvdXJjZSkge30KCi8qKgogKiAoUEhQIDQsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2YKICoge0BzZWUgT0NJLUxvYjo6ZnJlZX0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2lmcmVlZGVzYy5waHAKICogQHBhcmFtICRsb2JfZGVzY3JpcHRvcgogKiBAcmV0dXJuIGJvb2wgPHA+UmV0dXJucyA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLjwvcD4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIk9DSS1Mb2I6OmZyZWUiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2lmcmVlZGVzYygkbG9iX2Rlc2NyaXB0b3IpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mCiAqIHtAc2VlIE9DSS1Mb2I6OnNhdmV9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2Npc2F2ZWxvYi5waHAKICogQHBhcmFtIE9DSV9Mb2J8T0NJTG9iICRsb2JfZGVzY3JpcHRvcgogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEBwYXJhbSBpbnQgJG9mZnNldCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYm9vbAogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAiT0NJLUxvYjo6c2F2ZSIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaXNhdmVsb2IoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT0NJTG9iJ10sIGRlZmF1bHQ6ICdPQ0lfTG9iJyldICRsb2JfZGVzY3JpcHRvciwgJGRhdGEsICRvZmZzZXQpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mCiAqIHtAc2VlIE9DSV9Mb2I6OmltcG9ydH0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2lzYXZlbG9iZmlsZS5waHAKICogQHBhcmFtIE9DSV9Mb2J8T0NJTG9iICRsb2JfZGVzY3JpcHRvcgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogKiBAcmV0dXJuIGJvb2wKICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIk9DSV9Mb2I6OmltcG9ydCIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaXNhdmVsb2JmaWxlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09DSUxvYiddLCBkZWZhdWx0OiAnT0NJX0xvYicpXSAkbG9iX2Rlc2NyaXB0b3IsICRmaWxlbmFtZSkge30KCi8qKgogKiAoUEhQIDQsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2YKICoge0BzZWUgT0NJX0xvYjo6ZXhwb3J0fQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaXdyaXRlbG9idG9maWxlLnBocAogKiBAcGFyYW0gT0NJX0xvYnxPQ0lMb2IgJGxvYl9kZXNjcmlwdG9yCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIDxwPlBhdGggdG8gdGhlIGZpbGUuPC9wPgogKiBAcGFyYW0gaW50ICRzdGFydCBbb3B0aW9uYWxdIDxwPkluZGljYXRlcyBmcm9tIHdoZXJlIHRvIHN0YXJ0IGV4cG9ydGluZy48L3A+CiAqIEBwYXJhbSBpbnQgJGxlbmd0aCBbb3B0aW9uYWxdIDxwPkluZGljYXRlcyB0aGUgbGVuZ3RoIG9mIGRhdGEgdG8gYmUgZXhwb3J0ZWQuPC9wPgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAiT0NJX0xvYjo6ZXhwb3J0Iiwgc2luY2U6ICI1LjQiKV0KZnVuY3Rpb24gb2Npd3JpdGVsb2J0b2ZpbGUoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPQ0lMb2InXSwgZGVmYXVsdDogJ09DSV9Mb2InKV0gJGxvYl9kZXNjcmlwdG9yLAogICAgJGZpbGVuYW1lLAogICAgJHN0YXJ0LAogICAgJGxlbmd0aAopIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mCiAqIHtAc2VlIE9DSV9Mb2I6OmxvYWR9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpbG9hZGxvYi5waHAKICogQHBhcmFtIE9DSV9Mb2J8T0NJTG9iICRsb2JfZGVzY3JpcHRvcgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSA8cD5SZXR1cm5zIHRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0LCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3JzLjwvcD4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIk9DSV9Mb2I6OmxvYWQiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2lsb2FkbG9iKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09DSUxvYiddLCBkZWZhdWx0OiAnT0NJX0xvYicpXSAkbG9iX2Rlc2NyaXB0b3IpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mCiAqIHtAc2VlIG9jaV9jb21taXR9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpY29tbWl0LnBocAogKiBAcGFyYW0gJGNvbm5lY3Rpb25fcmVzb3VyY2UgPHA+CiAqIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5CiAqIHtAc2VlIG9jaV9jb25uZWN0KCl9LAogKiB7QHNlZSBvY2lfcGNvbm5lY3QoKX0sIG9yCiAqIHtAc2VlIG9jaV9uZXdfY29ubmVjdCgpfS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPHA+UmV0dXJucyA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLjwvcD4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIm9jaV9jb21taXQiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2ljb21taXQoJGNvbm5lY3Rpb25fcmVzb3VyY2UpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mCiAqIHtAc2VlIG9jaV9yb2xsYmFja30KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2lyb2xsYmFjay5waHAKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uX3Jlc291cmNlCiAqIEByZXR1cm4gYm9vbCA8cD5SZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuPC9wPgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAib2NpX3JvbGxiYWNrIiwgc2luY2U6ICI1LjQiKV0KZnVuY3Rpb24gb2Npcm9sbGJhY2soJGNvbm5lY3Rpb25fcmVzb3VyY2UpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mCiAqIHtAc2VlIG9jaV9uZXdfZGVzY3JpcHRvcn0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2luZXdkZXNjcmlwdG9yLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb25fcmVzb3VyY2UgPHA+CiAqIEFuIE9yYWNsZSBjb25uZWN0aW9uIGlkZW50aWZpZXIsIHJldHVybmVkIGJ5CiAqIHtAc2VlIG9jaV9jb25uZWN0KCl9IG9yIHtAc2VlIG9jaV9wY29ubmVjdCgpfS4KICogPC9wPgogKiBAcGFyYW0gJHR5cGUgW29wdGlvbmFsXSA8cD5WYWxpZCB2YWx1ZXMgZm9yIHR5cGUgYXJlOiA8Yj5PQ0lfRFRZUEVfRklMRTwvYj4sIDxiPk9DSV9EVFlQRV9MT0I8L2I+IGFuZCA8Yj5PQ0lfRFRZUEVfUk9XSUQ8L2I+LjwvcD4KICogQHJldHVybiBPQ0lfTE9CfGZhbHNlIFJldHVybnMgYSBuZXcgTE9CIG9yIEZJTEUgZGVzY3JpcHRvciBvbiBzdWNjZXNzLCBGQUxTRSBvbiBlcnJvci4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIm9jaV9uZXdfZGVzY3JpcHRvciIsIHNpbmNlOiAiNS40IildCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09DSUxvYnxmYWxzZSddLCBkZWZhdWx0OiAnT0NJX0xvYnxmYWxzZScpXQpmdW5jdGlvbiBvY2luZXdkZXNjcmlwdG9yKCRjb25uZWN0aW9uX3Jlc291cmNlLCAkdHlwZSA9IE9DSV9EVFlQRV9MT0IpIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mIHtAc2VlIG9jaV9zZXRfcHJlZmV0Y2h9CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2Npc2V0cHJlZmV0Y2gucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50X3Jlc291cmNlIDxwPkEgdmFsaWQgT0NJOCBzdGF0ZW1lbnQKICogaWRlbnRpZmllciBjcmVhdGVkIGJ5CiAqIHtAc2VlIG9jaV9wYXJzZSgpfSBhbmQgZXhlY3V0ZWQKICogYnkKICoge0BzZWUgb2NpX2V4ZWN1dGUoKX0sIG9yIGEgPGVtPlJFRiBDVVJTT1I8L2VtPiBzdGF0ZW1lbnQgaWRlbnRpZmllci48L3A+CiAqIEBwYXJhbSAkbnVtYmVyX29mX3Jvd3MKICogQHJldHVybiBib29sIDxwPlJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS48L3A+CiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICJvY2lfc2V0X3ByZWZldGNoIiwgc2luY2U6ICI1LjQiKV0KZnVuY3Rpb24gb2Npc2V0cHJlZmV0Y2goJHN0YXRlbWVudF9yZXNvdXJjZSwgJG51bWJlcl9vZl9yb3dzKSB7fQoKLyoqCiAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAqIENoYW5nZXMgcGFzc3dvcmQgb2YgT3JhY2xlJ3MgdXNlcgogKiBAcGFyYW0gcmVzb3VyY2V8c3RyaW5nICRjb25uZWN0aW9uX3Jlc291cmNlX29yX2Nvbm5lY3Rpb25fc3RyaW5nX29yX2RibmFtZSA8cD5BbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLCByZXR1cm5lZCBieQogKiB7QHNlZSBvY2lfY29ubmVjdCgpfSBvcgogKiB7QHNlZSBvY2lfcGNvbm5lY3QoKX0uPC9wPgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSA8cD5UaGUgT3JhY2xlIHVzZXIgbmFtZS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG9sZF9wYXNzd29yZCA8cD5UaGUgbmV3IHBhc3N3b3JkIHRvIGJlIHNldC48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5ld19wYXNzd29yZCA8cD5UaGUgbmV3IHBhc3N3b3JkIHRvIGJlIHNldC48L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8Ym9vbCA8cD5SZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUgb3IgPGI+cmVzb3VyY2U8L2I+LCBkZXBlbmRpbmcgb24gdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuPC9wPgogKi8KZnVuY3Rpb24gb2NpcGFzc3dvcmRjaGFuZ2UoJGNvbm5lY3Rpb25fcmVzb3VyY2Vfb3JfY29ubmVjdGlvbl9zdHJpbmdfb3JfZGJuYW1lLCAkdXNlcm5hbWUsICRvbGRfcGFzc3dvcmQsICRuZXdfcGFzc3dvcmQpIHt9CgovKioKICogKFBIUCA0ICZndDs9IDQuMC43LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mIHtAc2VlIE9DSV9Db2xsZWN0aW9uOjpmcmVlfQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaWZyZWVjb2xsZWN0aW9uLnBocAogKiBAcGFyYW0gT0NJX0NvbGxlY3Rpb258T0NJQ29sbGVjdGlvbiAkY29sbGVjdGlvbgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAiT0NJX0NvbGxlY3Rpb246OmZyZWUiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2lmcmVlY29sbGVjdGlvbigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPQ0lDb2xsZWN0aW9uJ10sIGRlZmF1bHQ6ICdPQ0lfQ29sbGVjdGlvbicpXSAkY29sbGVjdGlvbikge30KCi8qKgogKiAoUEhQIDQgJmd0Oz0gNC4wLjYsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2YKICoge0BzZWUgb2NpX25ld19jb2xsZWN0aW9ufQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaW5ld2NvbGxlY3Rpb24ucGhwCiAqIEBwYXJhbSAkY29ubmVjdGlvbl9yZXNvdXJjZSA8cD4KICogQW4gT3JhY2xlIGNvbm5lY3Rpb24gaWRlbnRpZmllciwgcmV0dXJuZWQgYnkKICoge0BzZWUgb2NpX2Nvbm5lY3QoKX0gb3IKICoge0BzZWUgb2NpX3Bjb25uZWN0KCl9LgogKiBAcGFyYW0gJHRkbyA8cD5TaG91bGQgYmUgYSB2YWxpZCBuYW1lZCB0eXBlICh1cHBlcmNhc2UpLjwvcD4KICogQHBhcmFtICRzY2hlbWEgPHA+U2hvdWxkIHBvaW50IHRvIHRoZSBzY2hlbWUsIHdoZXJlIHRoZSBuYW1lZCB0eXBlIHdhcyBjcmVhdGVkLiBUaGUgbmFtZSBvZiB0aGUgY3VycmVudCB1c2VyIGlzIHRoZSBkZWZhdWx0IHZhbHVlLjwvcD4KICogPC9wPgogKiBAcmV0dXJuIE9DSV9Db2xsZWN0aW9ufGZhbHNlIDxwPlJldHVybnMgYSBuZXcgT0NJX0NvbGxlY3Rpb24gb2JqZWN0IG9yIEZBTFNFIG9uIGVycm9yLjwvcD4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIm9jaV9uZXdfY29sbGVjdGlvbiIsIHNpbmNlOiAiNS40IildCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09DSUNvbGxlY3Rpb258ZmFsc2UnXSwgZGVmYXVsdDogJ09DSV9Db2xsZWN0aW9ufGZhbHNlJyldCmZ1bmN0aW9uIG9jaW5ld2NvbGxlY3Rpb24oJGNvbm5lY3Rpb25fcmVzb3VyY2UsICR0ZG8sICRzY2hlbWEgPSBudWxsKSB7fQoKLyoqCiAqIChQSFAgNCAmZ3Q7PSA0LjAuNiwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZgogKiAoQHNlZSBPQ0lfQ29sbGVjdGlvbjo6YXBwZW5kKQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaWNvbGxhcHBlbmQucGhwCiAqIEBwYXJhbSBPQ0lfQ29sbGVjdGlvbiAkY29sbGVjdGlvbgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIDxwPlRoZSB2YWx1ZSB0byBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi4gQ2FuIGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLjwvcD4KICogQHJldHVybiBib29sIDxwPlJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS48L3A+CiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICJPQ0lfQ29sbGVjdGlvbjo6YXBwZW5kIiwgc2luY2U6ICI1LjQiKV0KZnVuY3Rpb24gb2NpY29sbGFwcGVuZCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPQ0lDb2xsZWN0aW9uJ10sIGRlZmF1bHQ6ICdPQ0lfQ29sbGVjdGlvbicpXSAkY29sbGVjdGlvbiwgJHZhbHVlKSB7fQoKLyoqCiAqIChQSFAgNCAmZ3Q7PSA0LjAuNiwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZgogKiB7QHNlZSBPQ0lfQ09MTGVjdGlvbjo6Z2V0RWxlbX0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ljb2xsZ2V0ZWxlbS5waHAKICogQHBhcmFtIE9DSV9Db2xsZWN0aW9uICRjb2xsZWN0aW9uCiAqIEBwYXJhbSBpbnQgJGluZGV4IDxwPlRoZSBlbGVtZW50IGluZGV4LiBGaXJzdCBpbmRleCBpcyAwLjwvcD4KICogQHJldHVybiBtaXhlZCA8cD5SZXR1cm5zIDxiPkZBTFNFPC9iPiBpZiBzdWNoIGVsZW1lbnQgZG9lc24ndCBleGlzdDsgPGI+TlVMTDwvYj4gaWYgZWxlbWVudCBpcyA8Yj5OVUxMPC9iPjsgc3RyaW5nIGlmIGVsZW1lbnQgaXMgY29sdW1uIG9mIGEgc3RyaW5nIGRhdGF0eXBlIG9yIG51bWJlciBpZiBlbGVtZW50IGlzIG51bWVyaWMgZmllbGQuPC9wPgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAiT0NJX0NPTExlY3Rpb246OmdldEVsZW0iLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2ljb2xsZ2V0ZWxlbSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPQ0lDb2xsZWN0aW9uJ10sIGRlZmF1bHQ6ICdPQ0lfQ29sbGVjdGlvbicpXSAkY29sbGVjdGlvbiwgJGluZGV4KSB7fQoKLyoqCiAqIChQSFAgNCAmZ3Q7PSA0LjAuNiwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZiB7QHNlZSBPQ0lfQ29sbGVjdGlvbjo6YXNzaWduRWxlbX0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ljb2xsYXNzaWduZWxlbS5waHAKICogQHBhcmFtIE9DSV9Db2xsZWN0aW9uICRjb2xsZWN0aW9uCiAqIEBwYXJhbSAkaW5kZXggPHA+VGhlIGVsZW1lbnQgaW5kZXguIEZpcnN0IGluZGV4IGlzIDAuPC9wPgogKiBAcGFyYW0gJHZhbHVlIDxwPkNhbiBiZSBhIHN0cmluZyBvciBhIG51bWJlci48L3A+CiAqIEByZXR1cm4gYm9vbCA8cD5SZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLjwvcD4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIk9DSV9Db2xsZWN0aW9uOjphc3NpZ25FbGVtIiwgc2luY2U6ICI1LjQiKV0KZnVuY3Rpb24gb2NpY29sbGFzc2lnbmVsZW0oI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT0NJQ29sbGVjdGlvbiddLCBkZWZhdWx0OiAnT0NJX0NvbGxlY3Rpb24nKV0gJGNvbGxlY3Rpb24sICRpbmRleCwgJHZhbHVlKSB7fQoKLyoqCiAqIChQSFAgNCAmZ3Q7PSA0LjAuNiwgUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBBbGlhcyBvZgogKiB7QHNlZSBPQ0lfQ09MTGVjdGlvbjo6c2l6ZX0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ljb2xsc2l6ZS5waHAKICogQHBhcmFtIE9DSV9Db2xsZWN0aW9uICRjb2xsZWN0aW9uCiAqIEByZXR1cm4gaW50fGZhbHNlIDxwPlJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgY29sbGVjdGlvbiBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuPC9wPgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAiT0NJX0NPTExlY3Rpb246OnNpemUiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2ljb2xsc2l6ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPQ0lDb2xsZWN0aW9uJ10sIGRlZmF1bHQ6ICdPQ0lfQ29sbGVjdGlvbicpXSAkY29sbGVjdGlvbikge30KCi8qKgogKiAoUEhQIDQgJmd0Oz0gNC4wLjYsIFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4wLjApPGJyLz4KICogQWxpYXMgb2YKICoge0BzZWUgT0NJX0NPTExlY3Rpb246Om1heH0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ljb2xsbWF4LnBocAogKiBAcGFyYW0gT0NJX0NvbGxlY3Rpb24gJGNvbGxlY3Rpb24KICogQHJldHVybiBpbnR8ZmFsc2UgPHA+IFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIGFzIGFuIGludGVnZXIsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvcnMuCiAqIElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyAwLCB0aGVuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaXMgbm90IGxpbWl0ZWQuPC9wPgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAiT0NJX0NPTExlY3Rpb246Om1heCIsIHNpbmNlOiAiNS40IildCmZ1bmN0aW9uIG9jaWNvbGxtYXgoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT0NJQ29sbGVjdGlvbiddLCBkZWZhdWx0OiAnT0NJX0NvbGxlY3Rpb24nKV0gJGNvbGxlY3Rpb24pIHt9CgovKioKICogKFBIUCA0ICZndDs9IDQuMC42LCBQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMC4wKTxici8+CiAqIEFsaWFzIG9mCiAqIHtAc2VlIE9DSV9Db2xsZWN0aW9uOjp0cmltfQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaWNvbGx0cmltLnBocAogKiBAcGFyYW0gT0NJX0NvbGxlY3Rpb24gJGNvbGxlY3Rpb24KICogQHBhcmFtIGludHxmbG9hdCAkbnVtYmVyCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAiT0NJX0NvbGxlY3Rpb246OnRyaW0iLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2ljb2xsdHJpbSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdPQ0lDb2xsZWN0aW9uJ10sIGRlZmF1bHQ6ICdPQ0lfQ29sbGVjdGlvbicpXSAkY29sbGVjdGlvbiwgJG51bWJlcikge30KCi8qKgogKiAoUEhQIDQgJmd0Oz0gNC4wLjYsIFBFQ0wgT0NJOCAxLjApCiAqIFdyaXRlcyBhIHRlbXBvcmFyeSBsYXJnZSBvYmplY3QKICogQWxpYXMgb2Yge0BzZWUgT0NJLUxvYjo6d3JpdGVUZW1wb3JhcnkoKX0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2l3cml0ZXRlbXBvcmFyeWxvYi5waHAKICogQHBhcmFtIE9DSV9Mb2J8T0NJTG9iICRsb2JfZGVzY3JpcHRvcgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPlRoZSBkYXRhIHRvIHdyaXRlLjwvcD4KICogQHBhcmFtIGludCAkbG9iX3R5cGUgPHA+CiAqIENhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICogPC9wPjx1bD4KICogPGxpPgogKiA8Yj5PQ0lfVEVNUF9CTE9CPC9iPiBpcyB1c2VkIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgQkxPQnMKICogPC9saT4KICogPGxpPgogKiA8Yj5PQ0lfVEVNUF9DTE9CPC9iPiBpcyB1c2VkIHRvIGNyZWF0ZQogKiB0ZW1wb3JhcnkgQ0xPQnMKICogPC9saT4KICogPC91bD4KICogQHJldHVybiBib29sIDxwPlJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUuPC9wPgogKi8KI1tEZXByZWNhdGVkKHJlcGxhY2VtZW50OiAiT0NJLUxvYjo6d3JpdGVUZW1wb3JhcnkiLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2l3cml0ZXRlbXBvcmFyeWxvYigKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ09DSUxvYiddLCBkZWZhdWx0OiAnT0NJX0xvYicpXSAkbG9iX2Rlc2NyaXB0b3IsCiAgICAkZGF0YSwKICAgICRsb2JfdHlwZSA9IE9DSV9URU1QX0NMT0IKKSB7fQoKLyoqCiAqIChQSFAgNCAmZ3Q7PSA0LjAuNiwgUEVDTCBPQ0k4IDEuMCkKICogQWxpYXMgb2Yge0BzZWUgT0NJLUxvYjo6Y2xvc2UoKX0KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ljbG9zZWxvYi5waHAKICogQHBhcmFtIE9DSV9Mb2J8T0NJTG9iICRsb2JfZGVzY3JpcHRvcgogKiBAcmV0dXJuIGJvb2wgPHA+UmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS48L3A+CiAqLwojW0RlcHJlY2F0ZWQocmVwbGFjZW1lbnQ6ICJPQ0ktTG9iOjpjbG9zZSgpIiwgc2luY2U6ICI1LjQiKV0KZnVuY3Rpb24gb2NpY2xvc2Vsb2IoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT0NJTG9iJ10sIGRlZmF1bHQ6ICdPQ0lfTG9iJyldICRsb2JfZGVzY3JpcHRvcikge30KCi8qKgogKiAoUEhQIDQgPj0gNC4wLjYsIFBFQ0wgT0NJOCAxLjApCiAqIEFsaWFzIG9mIHtAc2VlIE9DSS1Db2xsZWN0aW9uOjphc3NpZ24oKX0KICogQXNzaWducyBhIHZhbHVlIHRvIHRoZSBjb2xsZWN0aW9uIGZyb20gYW5vdGhlciBleGlzdGluZyBjb2xsZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ub2NpY29sbGFzc2lnbi5waHAKICogQHBhcmFtIE9DSV9Db2xsZWN0aW9uICR0bwogKiBAcGFyYW0gT0NJX0NvbGxlY3Rpb24gJGZyb20gQW4gaW5zdGFuY2Ugb2YgT0NJLUNvbGxlY3Rpb24uCiAqIEByZXR1cm4gYm9vbCA8cD5SZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLjwvcD4KICovCiNbRGVwcmVjYXRlZChyZXBsYWNlbWVudDogIk9DSS1Db2xsZWN0aW9uOjphc3NpZ24iLCBzaW5jZTogIjUuNCIpXQpmdW5jdGlvbiBvY2ljb2xsYXNzaWduKAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT0NJQ29sbGVjdGlvbiddLCBkZWZhdWx0OiAnT0NJX0NvbGxlY3Rpb24nKV0gJHRvLAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnT0NJQ29sbGVjdGlvbiddLCBkZWZhdWx0OiAnT0NJX0NvbGxlY3Rpb24nKV0gJGZyb20KKSB7fQovKioKICogU2VlIDxiPk9DSV9OT19BVVRPX0NPTU1JVDwvYj4uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9ERUZBVUxUJywgMCk7CgovKioKICogVXNlZCB3aXRoIHtAc2VlIG9jaV9jb25uZWN0fSB0byBjb25uZWN0IHdpdGgKICogdGhlIFNZU09QRVIgcHJpdmlsZWdlLiBUaGUgPGk+cGhwLmluaTwvaT4gc2V0dGluZwogKiBvY2k4LnByaXZpbGVnZWRfY29ubmVjdAogKiBzaG91bGQgYmUgZW5hYmxlZCB0byB1c2UgdGhpcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX1NZU09QRVInLCA0KTsKCi8qKgogKiBVc2VkIHdpdGgge0BzZWUgb2NpX2Nvbm5lY3R9IHRvIGNvbm5lY3Qgd2l0aAogKiB0aGUgU1lTREJBIHByaXZpbGVnZS4gVGhlIDxpPnBocC5pbmk8L2k+IHNldHRpbmcKICogb2NpOC5wcml2aWxlZ2VkX2Nvbm5lY3QKICogc2hvdWxkIGJlIGVuYWJsZWQgdG8gdXNlIHRoaXMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9TWVNEQkEnLCAyKTsKCi8qKgogKiBVc2VkIHdpdGgge0BzZWUgb2NpX2Nvbm5lY3R9IGZvciB1c2luZwogKiBPcmFjbGVzJyBFeHRlcm5hbCBvciBPUyBhdXRoZW50aWNhdGlvbi4gSW50cm9kdWNlZCBpbiBQSFAKICogNS4zIGFuZCBQRUNMIE9DSTggMS4zLjQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9DUkVEX0VYVCcsIC0yMTQ3NDgzNjQ4KTsKCi8qKgogKiBTdGF0ZW1lbnQgZXhlY3V0aW9uIG1vZGUKICogZm9yIHtAc2VlIG9jaV9leGVjdXRlfS4gVXNlIHRoaXMgbW9kZSBpZiB5b3UKICogd2FudCBtZXRhIGRhdGEgc3VjaCBhcyB0aGUgY29sdW1uIG5hbWVzIGJ1dCBkb24ndCB3YW50IHRvCiAqIGZldGNoIHJvd3MgZnJvbSB0aGUgcXVlcnkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9ERVNDUklCRV9PTkxZJywgMTYpOwoKLyoqCiAqIFN0YXRlbWVudCBleGVjdXRpb24gbW9kZSBmb3Ige0BzZWUgb2NpX2V4ZWN1dGV9CiAqIGNhbGwuIEF1dG9tYXRpY2FsbHkgY29tbWl0IGNoYW5nZXMgd2hlbiB0aGUgc3RhdGVtZW50IGhhcwogKiBzdWNjZWVkZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9DT01NSVRfT05fU1VDQ0VTUycsIDMyKTsKCi8qKgogKiBTdGF0ZW1lbnQgZXhlY3V0aW9uIG1vZGUKICogZm9yIHtAc2VlIG9jaV9leGVjdXRlfS4gVGhlIHRyYW5zYWN0aW9uIGlzIG5vdAogKiBhdXRvbWF0aWNhbGx5IGNvbW1pdHRlZCB3aGVuIHVzaW5nIHRoaXMgbW9kZS4gRm9yCiAqIHJlYWRhYmlsaXR5IGluIG5ldyBjb2RlLCB1c2UgdGhpcyB2YWx1ZSBpbnN0ZWFkIG9mIHRoZQogKiBvbGRlciwgZXF1aXZhbGVudCA8Yj5PQ0lfREVGQVVMVDwvYj4gY29uc3RhbnQuCiAqIEludHJvZHVjZWQgaW4gUEhQIDUuMy4yIChQRUNMIE9DSTggMS40KS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX05PX0FVVE9fQ09NTUlUJywgMCk7CgovKioKICogT2Jzb2xldGUuIFN0YXRlbWVudCBmZXRjaCBtb2RlLiBVc2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uCiAqIGtub3dzIGluIGFkdmFuY2UgZXhhY3RseSBob3cgbWFueSByb3dzIGl0IHdpbGwgYmUgZmV0Y2hpbmcuCiAqIFRoaXMgbW9kZSB0dXJucyBwcmVmZXRjaGluZyBvZmYgZm9yIE9yYWNsZSByZWxlYXNlIDggb3IKICogbGF0ZXIgbW9kZS4gVGhlIGN1cnNvciBpcyBjYW5jZWxlZCBhZnRlciB0aGUgZGVzaXJlZCByb3dzCiAqIGFyZSBmZXRjaGVkIHdoaWNoIG1heSByZXN1bHQgaW4gcmVkdWNlZCBzZXJ2ZXItc2lkZQogKiByZXNvdXJjZSB1c2FnZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX0VYQUNUX0ZFVENIJywgMik7CgovKioKICogVXNlZCB3aXRoIHRvIHNldCB0aGUgc2VlayBwb3NpdGlvbi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX1NFRUtfU0VUJywgMCk7CgovKioKICogVXNlZCB3aXRoIHRvIHNldCB0aGUgc2VlayBwb3NpdGlvbi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX1NFRUtfQ1VSJywgMSk7CgovKioKICogVXNlZCB3aXRoIHRvIHNldCB0aGUgc2VlayBwb3NpdGlvbi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX1NFRUtfRU5EJywgMik7CgovKioKICogVXNlZCB3aXRoIHRvIGZyZWUKICogYnVmZmVycyB1c2VkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdPQ0lfTE9CX0JVRkZFUl9GUkVFJywgMSk7CgovKioKICogVGhlIHNhbWUgYXMgPGI+T0NJX0JfQkZJTEU8L2I+LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxUX0JGSUxFRScsIDExNCk7CgovKioKICogVGhlIHNhbWUgYXMgPGI+T0NJX0JfQ0ZJTEVFPC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMVF9DRklMRUUnLCAxMTUpOwoKLyoqCiAqIFRoZSBzYW1lIGFzIDxiPk9DSV9CX0NMT0I8L2I+LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxUX0NMT0InLCAxMTIpOwoKLyoqCiAqIFRoZSBzYW1lIGFzIDxiPk9DSV9CX0JMT0I8L2I+LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxUX0JMT0InLCAxMTMpOwoKLyoqCiAqIFRoZSBzYW1lIGFzIDxiPk9DSV9CX1JPV0lEPC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMVF9SREQnLCAxMDQpOwoKLyoqCiAqIFRoZSBzYW1lIGFzIDxiPk9DSV9CX0lOVDwvYj4uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTFRfSU5UJywgMyk7CgovKioKICogVGhlIHNhbWUgYXMgPGI+T0NJX0JfTlVNPC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMVF9OVU0nLCAyKTsKCi8qKgogKiBUaGUgc2FtZSBhcyA8Yj5PQ0lfQl9DVVJTT1I8L2I+LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxUX1JTRVQnLCAxMTYpOwoKLyoqCiAqIFVzZWQgd2l0aCB7QHNlZSBvY2lfYmluZF9hcnJheV9ieV9uYW1lfSB0byBiaW5kIGFycmF5cyBvZgogKiBDSEFSLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxUX0FGQycsIDk2KTsKCi8qKgogKiBVc2VkIHdpdGgge0BzZWUgb2NpX2JpbmRfYXJyYXlfYnlfbmFtZX0gdG8gYmluZCBhcnJheXMgb2YKICogVkFSQ0hBUjIuCiAqIEFsc28gdXNlZCB3aXRoIHtAc2VlIG9jaV9iaW5kX2J5X25hbWV9LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxUX0NIUicsIDEpOwoKLyoqCiAqIFVzZWQgd2l0aCB7QHNlZSBvY2lfYmluZF9hcnJheV9ieV9uYW1lfSB0byBiaW5kIGFycmF5cyBvZgogKiBWQVJDSEFSLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxUX1ZDUycsIDkpOwoKLyoqCiAqIFVzZWQgd2l0aCB7QHNlZSBvY2lfYmluZF9hcnJheV9ieV9uYW1lfSB0byBiaW5kIGFycmF5cyBvZgogKiBWQVJDSEFSMi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMVF9BVkMnLCA5Nyk7CgovKioKICogVXNlZCB3aXRoIHtAc2VlIG9jaV9iaW5kX2FycmF5X2J5X25hbWV9IHRvIGJpbmQgYXJyYXlzIG9mCiAqIFNUUklORy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMVF9TVFInLCA1KTsKCi8qKgogKiBVc2VkIHdpdGgge0BzZWUgb2NpX2JpbmRfYXJyYXlfYnlfbmFtZX0gdG8gYmluZCBhcnJheXMgb2YKICogTE9ORyBWQVJDSEFSLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxUX0xWQycsIDk0KTsKCi8qKgogKiBVc2VkIHdpdGgge0BzZWUgb2NpX2JpbmRfYXJyYXlfYnlfbmFtZX0gdG8gYmluZCBhcnJheXMgb2YKICogRkxPQVQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTFRfRkxUJywgNCk7CgovKioKICogTm90IHN1cHBvcnRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMVF9VSU4nLCA2OCk7CgovKioKICogVXNlZCB3aXRoIHtAc2VlIG9jaV9iaW5kX2J5X25hbWV9IHRvIGJpbmQgTE9ORyB2YWx1ZXMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTFRfTE5HJywgOCk7CgovKioKICogVXNlZCB3aXRoIHtAc2VlIG9jaV9iaW5kX2J5X25hbWV9IHRvIGJpbmQgTE9ORyBSQVcgdmFsdWVzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxUX0xCSScsIDI0KTsKCi8qKgogKiBUaGUgc2FtZSBhcyA8Yj5PQ0lfQl9CSU48L2I+LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxUX0JJTicsIDIzKTsKCi8qKgogKiBVc2VkIHdpdGgge0BzZWUgb2NpX2JpbmRfYXJyYXlfYnlfbmFtZX0gdG8gYmluZCBhcnJheXMgb2YKICogTE9ORy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMVF9PRFQnLCAxNTYpOwoKLyoqCiAqIE5vdCBzdXBwb3J0ZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NRTFRfQkRPVUJMRScsIDIyKTsKCi8qKgogKiBOb3Qgc3VwcG9ydGVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxUX0JGTE9BVCcsIDIxKTsKCi8qKgogKiBVc2VkIHdpdGgge0BzZWUgb2NpX2JpbmRfYnlfbmFtZX0gd2hlbiBiaW5kaW5nCiAqIG5hbWVkIGRhdGEgdHlwZXMuIE5vdGU6IGluIFBIUCAmbHQ7IDUuMCBpdCB3YXMgY2FsbGVkCiAqIDxiPk9DSV9CX1NRTFRfTlRZPC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX0JfTlRZJywgMTA4KTsKCi8qKgogKiBUaGUgc2FtZSBhcyA8Yj5PQ0lfQl9OVFk8L2I+LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTUUxUX05UWScsIDEwOCk7CgovKioKICogT2Jzb2xldGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9TWVNEQVRFJywgIlNZU0RBVEUiKTsKCi8qKgogKiBVc2VkIHdpdGgge0BzZWUgb2NpX2JpbmRfYnlfbmFtZX0gd2hlbiBiaW5kaW5nCiAqIEJGSUxFcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX0JfQkZJTEUnLCAxMTQpOwoKLyoqCiAqIFVzZWQgd2l0aCB7QHNlZSBvY2lfYmluZF9ieV9uYW1lfSB3aGVuIGJpbmRpbmcKICogQ0ZJTEVzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdPQ0lfQl9DRklMRUUnLCAxMTUpOwoKLyoqCiAqIFVzZWQgd2l0aCB7QHNlZSBvY2lfYmluZF9ieV9uYW1lfSB3aGVuIGJpbmRpbmcKICogQ0xPQnMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9CX0NMT0InLCAxMTIpOwoKLyoqCiAqIFVzZWQgd2l0aCB7QHNlZSBvY2lfYmluZF9ieV9uYW1lfSB3aGVuCiAqIGJpbmRpbmcgQkxPQnMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9CX0JMT0InLCAxMTMpOwoKLyoqCiAqIFVzZWQgd2l0aCB7QHNlZSBvY2lfYmluZF9ieV9uYW1lfSB3aGVuIGJpbmRpbmcKICogUk9XSURzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdPQ0lfQl9ST1dJRCcsIDEwNCk7CgovKioKICogVXNlZCB3aXRoIHtAc2VlIG9jaV9iaW5kX2J5X25hbWV9IHdoZW4gYmluZGluZwogKiBjdXJzb3JzLCBwcmV2aW91c2x5IGFsbG9jYXRlZAogKiB3aXRoIHtAc2VlIG9jaV9uZXdfZGVzY3JpcHRvcn0uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9CX0NVUlNPUicsIDExNik7CgovKioKICogVXNlZCB3aXRoIHtAc2VlIG9jaV9iaW5kX2J5X25hbWV9IHRvIGJpbmQgUkFXIHZhbHVlcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX0JfQklOJywgMjMpOwoKLyoqCiAqIFVzZWQgd2l0aCB7QHNlZSBvY2lfYmluZF9hcnJheV9ieV9uYW1lfSB0byBiaW5kIGFycmF5cyBvZgogKiBJTlRFR0VSLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdPQ0lfQl9JTlQnLCAzKTsKCi8qKgogKiBVc2VkIHdpdGgge0BzZWUgb2NpX2JpbmRfYXJyYXlfYnlfbmFtZX0gdG8gYmluZCBhcnJheXMgb2YKICogTlVNQkVSLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdPQ0lfQl9OVU0nLCAyKTsKCi8qKgogKiBEZWZhdWx0IG1vZGUgb2Yge0BzZWUgb2NpX2ZldGNoX2FsbH0uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9GRVRDSFNUQVRFTUVOVF9CWV9DT0xVTU4nLCAxNik7CgovKioKICogQWx0ZXJuYXRpdmUgbW9kZSBvZiB7QHNlZSBvY2lfZmV0Y2hfYWxsfS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX0ZFVENIU1RBVEVNRU5UX0JZX1JPVycsIDMyKTsKCi8qKgogKiBVc2VkIHdpdGgge0BzZWUgb2NpX2ZldGNoX2FsbH0gYW5kCiAqIHtAc2VlIG9jaV9mZXRjaF9hcnJheX0gdG8gZ2V0IHJlc3VsdHMgYXMgYW4gYXNzb2NpYXRpdmUKICogYXJyYXkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9BU1NPQycsIDEpOwoKLyoqCiAqIFVzZWQgd2l0aCB7QHNlZSBvY2lfZmV0Y2hfYWxsfSBhbmQKICoge0BzZWUgb2NpX2ZldGNoX2FycmF5fSB0byBnZXQgcmVzdWx0cyBhcyBhbgogKiBlbnVtZXJhdGVkIGFycmF5LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdPQ0lfTlVNJywgMik7CgovKioKICogVXNlZCB3aXRoIHtAc2VlIG9jaV9mZXRjaF9hbGx9IGFuZAogKiB7QHNlZSBvY2lfZmV0Y2hfYXJyYXl9IHRvIGdldCByZXN1bHRzIGFzIGFuCiAqIGFycmF5IHdpdGggYm90aCBhc3NvY2lhdGl2ZSBhbmQgbnVtYmVyIGluZGljZXMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9CT1RIJywgMyk7CgovKioKICogVXNlZCB3aXRoIHtAc2VlIG9jaV9mZXRjaF9hcnJheX0gdG8gZ2V0IGVtcHR5CiAqIGFycmF5IGVsZW1lbnRzIGlmIHRoZSByb3cgaXRlbXMgdmFsdWUgaXMgPGI+TlVMTDwvYj4uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9SRVRVUk5fTlVMTFMnLCA0KTsKCi8qKgogKiBVc2VkIHdpdGgge0BzZWUgb2NpX2ZldGNoX2FycmF5fSB0byBnZXQgdGhlCiAqIGRhdGEgdmFsdWUgb2YgdGhlIExPQiBpbnN0ZWFkIG9mIHRoZSBkZXNjcmlwdG9yLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdPQ0lfUkVUVVJOX0xPQlMnLCA4KTsKCi8qKgogKiBUaGlzIGZsYWcgdGVsbHMge0BzZWUgb2NpX25ld19kZXNjcmlwdG9yfSB0bwogKiBpbml0aWFsaXplIGEgbmV3IEZJTEUgZGVzY3JpcHRvci4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX0RUWVBFX0ZJTEUnLCA1Nik7CgovKioKICogVGhpcyBmbGFnIHRlbGxzIHtAc2VlIG9jaV9uZXdfZGVzY3JpcHRvcn0gdG8KICogaW5pdGlhbGl6ZSBhIG5ldyBMT0IgZGVzY3JpcHRvci4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX0RUWVBFX0xPQicsIDUwKTsKCi8qKgogKiBUaGlzIGZsYWcgdGVsbHMge0BzZWUgb2NpX25ld19kZXNjcmlwdG9yfSB0bwogKiBpbml0aWFsaXplIGEgbmV3IFJPV0lEIGRlc2NyaXB0b3IuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9EVFlQRV9ST1dJRCcsIDU0KTsKCi8qKgogKiBUaGUgc2FtZSBhcyA8Yj5PQ0lfRFRZUEVfRklMRTwvYj4uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9EX0ZJTEUnLCA1Nik7CgovKioKICogVGhlIHNhbWUgYXMgPGI+T0NJX0RUWVBFX0xPQjwvYj4uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpOC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09DSV9EX0xPQicsIDUwKTsKCi8qKgogKiBUaGUgc2FtZSBhcyA8Yj5PQ0lfRFRZUEVfUk9XSUQ8L2I+LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdPQ0lfRF9ST1dJRCcsIDU0KTsKCi8qKgogKiBVc2VkIHdpdGgKICogdG8gaW5kaWNhdGUgdGhhdCBhIHRlbXBvcmFyeSBDTE9CIHNob3VsZCBiZSBjcmVhdGVkLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaTguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdPQ0lfVEVNUF9DTE9CJywgMik7CgovKioKICogVXNlZCB3aXRoCiAqIHRvIGluZGljYXRlIHRoYXQgYSB0ZW1wb3JhcnkgQkxPQiBzaG91bGQgYmUgY3JlYXRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX1RFTVBfQkxPQicsIDEpOwoKLyoqCiAqIChQRUNMIE9DSTggJmd0Oz0gMi4wLjcpPGJyLz4KICogVGhlIHNhbWUgYXMgPGI+T0NJX0JfQk9MPC9iPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1FMVF9CT0wnLCAyNTIpOwoKLyoqCiAqIChQRUNMIE9DSTggJmd0Oz0gMi4wLjcpPGJyLz4KICogVXNlZCB3aXRoIHtAc2VlIG9jaV9iaW5kX2J5X25hbWV9IHdoZW4KICogYmluZGluZyBQTC9TUUwgQk9PTEVBTi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2k4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnT0NJX0JfQk9MJywgMjUyKTsKCi8vIEVuZCBvZiBvY2k4IHYuMi4wLjcKPD9waHAKCi8vIFN0YXJ0IG9mIG9jaTggdi4zCgovKioKICogT0NJOCBMT0IgZnVuY3Rpb25hbGl0eSBmb3IgbGFyZ2UgYmluYXJ5IChCTE9CKSBhbmQgY2hhcmFjdGVyIChDTE9CKSBvYmplY3RzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLk9DSS1Mb2IucGhwCiAqIEBzaW5jZSA4LjAKICovCmNsYXNzIE9DSUxvYgp7CiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBSZXR1cm5zIGxhcmdlIG9iamVjdCdzIGNvbnRlbnRzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2IubG9hZC5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0LCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3JzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBpbnRlcm5hbCBwb2ludGVyIG9mIGxhcmdlIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLnRlbGwucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBDdXJyZW50IHBvc2l0aW9uIG9mIGEgTE9CJ3MgaW50ZXJuYWwgcG9pbnRlciBvciA8Yj5GQUxTRTwvYj4gaWYgYW4KICAgICAqIGVycm9yIG9jY3VycmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVsbCgpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogVHJ1bmNhdGVzIGxhcmdlIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLnRydW5jYXRlLnBocAogICAgICogQHBhcmFtIGludCAkbGVuZ3RoIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJZiBwcm92aWRlZCwgdGhpcyBtZXRob2Qgd2lsbCB0cnVuY2F0ZSB0aGUgTE9CIHRvCiAgICAgKiA8aT5sZW5ndGg8L2k+IGJ5dGVzLiBPdGhlcndpc2UsIGl0IHdpbGwgY29tcGxldGVseQogICAgICogcHVyZ2UgdGhlIExPQi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdHJ1bmNhdGUoJGxlbmd0aCA9IDApIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogRXJhc2VzIGEgc3BlY2lmaWVkIHBvcnRpb24gb2YgdGhlIGludGVybmFsIExPQiBkYXRhCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2IuZXJhc2UucGhwCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgW29wdGlvbmFsXQogICAgICogQHBhcmFtIGludCAkbGVuZ3RoIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMvYnl0ZXMgZXJhc2VkIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXJhc2UoJG9mZnNldCA9IG51bGwsICRsZW5ndGggPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIEZsdXNoZXMvd3JpdGVzIGJ1ZmZlciBvZiB0aGUgTE9CIHRvIHRoZSBzZXJ2ZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi5mbHVzaC5waHAKICAgICAqIEBwYXJhbSBpbnQgJGZsYWcgW29wdGlvbmFsXSA8cD4KICAgICAqIEJ5IGRlZmF1bHQsIHJlc291cmNlcyBhcmUgbm90IGZyZWVkLCBidXQgdXNpbmcgZmxhZwogICAgICogPGI+T0NJX0xPQl9CVUZGRVJfRlJFRTwvYj4geW91IGNhbiBkbyBpdCBleHBsaWNpdGx5LgogICAgICogQmUgc3VyZSB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZyAtIG5leHQgcmVhZC93cml0ZSBvcGVyYXRpb24gdG8gdGhlCiAgICAgKiBzYW1lIHBhcnQgb2YgTE9CIHdpbGwgaW52b2x2ZSBhIHJvdW5kLXRyaXAgdG8gdGhlIHNlcnZlciBhbmQgaW5pdGlhbGl6ZQogICAgICogbmV3IGJ1ZmZlciByZXNvdXJjZXMuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZQogICAgICogPGI+T0NJX0xPQl9CVUZGRVJfRlJFRTwvYj4gZmxhZyBvbmx5IHdoZW4geW91IGFyZSBub3QKICAgICAqIGdvaW5nIHRvIHdvcmsgd2l0aCB0aGUgTE9CIGFueW1vcmUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogUmV0dXJucyA8Yj5GQUxTRTwvYj4gaWYgYnVmZmVyaW5nIHdhcyBub3QgZW5hYmxlZCBvciBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZsdXNoKCRmbGFnID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBDaGFuZ2VzIGN1cnJlbnQgc3RhdGUgb2YgYnVmZmVyaW5nIGZvciB0aGUgbGFyZ2Ugb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2Iuc2V0YnVmZmVyaW5nLnBocAogICAgICogQHBhcmFtIGJvb2wgJG9uX29mZiA8cD4KICAgICAqIDxiPlRSVUU8L2I+IGZvciBvbiBhbmQgPGI+RkFMU0U8L2I+IGZvciBvZmYuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4gUmVwZWF0ZWQgY2FsbHMgdG8gdGhpcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBmbGFnIHdpbGwKICAgICAqIHJldHVybiA8Yj5UUlVFPC9iPi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGJ1ZmZlcmluZygkb25fb2ZmKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIFJldHVybnMgY3VycmVudCBzdGF0ZSBvZiBidWZmZXJpbmcgZm9yIHRoZSBsYXJnZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi5nZXRidWZmZXJpbmcucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+RkFMU0U8L2I+IGlmIGJ1ZmZlcmluZyBmb3IgdGhlIGxhcmdlIG9iamVjdCBpcyBvZmYgYW5kIDxiPlRSVUU8L2I+IGlmCiAgICAgKiBidWZmZXJpbmcgaXMgdXNlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldGJ1ZmZlcmluZygpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogTW92ZXMgdGhlIGludGVybmFsIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGFyZ2Ugb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2IucmV3aW5kLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIFJlYWRzIHBhcnQgb2YgdGhlIGxhcmdlIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLnJlYWQucGhwCiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGggPHA+CiAgICAgKiBUaGUgbGVuZ3RoIG9mIGRhdGEgdG8gcmVhZCwgaW4gYnl0ZXMuIExhcmdlIHZhbHVlcyB3aWxsIGJlIHJvdW5kZWQgZG93biB0byAxIE1CLgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhlIGNvbnRlbnRzIGFzIGEgc3RyaW5nLCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGxlbmd0aCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBUZXN0cyBmb3IgZW5kLW9mLWZpbGUgb24gYSBsYXJnZSBvYmplY3QncyBkZXNjcmlwdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2IuZW9mLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIGludGVybmFsIHBvaW50ZXIgb2YgbGFyZ2Ugb2JqZWN0IGlzIGF0IHRoZSBlbmQgb2YgTE9CLgogICAgICogT3RoZXJ3aXNlIHJldHVybnMgPGI+RkFMU0U8L2I+LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW9mKCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBTZXRzIHRoZSBpbnRlcm5hbCBwb2ludGVyIG9mIHRoZSBsYXJnZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi5zZWVrLnBocAogICAgICogQHBhcmFtIGludCAkb2Zmc2V0IDxwPgogICAgICogSW5kaWNhdGVzIHRoZSBhbW91bnQgb2YgYnl0ZXMsIG9uIHdoaWNoIGludGVybmFsIHBvaW50ZXIgc2hvdWxkIGJlCiAgICAgKiBtb3ZlZCBmcm9tIHRoZSBwb3NpdGlvbiwgcG9pbnRlZCBieSA8aT53aGVuY2U8L2k+LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkd2hlbmNlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBNYXkgYmUgb25lIG9mOgogICAgICogPGI+T0NJX1NFRUtfU0VUPC9iPiAtIHNldHMgdGhlIHBvc2l0aW9uIGVxdWFsIHRvCiAgICAgKiA8aT5vZmZzZXQ8L2k+CiAgICAgKiA8Yj5PQ0lfU0VFS19DVVI8L2I+IC0gYWRkcyA8aT5vZmZzZXQ8L2k+CiAgICAgKiBieXRlcyB0byB0aGUgY3VycmVudCBwb3NpdGlvbgogICAgICogPGI+T0NJX1NFRUtfRU5EPC9iPiAtIGFkZHMgPGk+b2Zmc2V0PC9pPgogICAgICogYnl0ZXMgdG8gdGhlIGVuZCBvZiBsYXJnZSBvYmplY3QgKHVzZSBuZWdhdGl2ZSB2YWx1ZSB0byBtb3ZlIHRvIGEgcG9zaXRpb24KICAgICAqIGJlZm9yZSB0aGUgZW5kIG9mIGxhcmdlIG9iamVjdCkKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2Vlaygkb2Zmc2V0LCAkd2hlbmNlID0gT0NJX1NFRUtfU0VUKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIFdyaXRlcyBkYXRhIHRvIHRoZSBsYXJnZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi53cml0ZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgPHA+CiAgICAgKiBUaGUgZGF0YSB0byB3cml0ZSBpbiB0aGUgTE9CLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkbGVuZ3RoIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBnaXZlbiwgd3JpdGluZyB3aWxsIHN0b3AgYWZ0ZXIKICAgICAqIDxpPmxlbmd0aDwvaT4gYnl0ZXMgaGF2ZSBiZWVuIHdyaXR0ZW4gb3IgdGhlIGVuZCBvZgogICAgICogPGk+ZGF0YTwvaT4gaXMgcmVhY2hlZCwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnR8ZmFsc2UgVGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJGRhdGEsICRsZW5ndGggPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIEFwcGVuZHMgZGF0YSBmcm9tIHRoZSBsYXJnZSBvYmplY3QgdG8gYW5vdGhlciBsYXJnZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi5hcHBlbmQucGhwCiAgICAgKiBAcGFyYW0gT0NJTG9iICRsb2JfZnJvbSA8cD4KICAgICAqIFRoZSBjb3BpZWQgTE9CLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoT0NJTG9iICRsb2JfZnJvbSkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBSZXR1cm5zIHNpemUgb2YgbGFyZ2Ugb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2Iuc2l6ZS5waHAKICAgICAqIEByZXR1cm4gaW50fGZhbHNlIExlbmd0aCBvZiBsYXJnZSBvYmplY3QgdmFsdWUgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBFbXB0eSBvYmplY3RzIGhhdmUgemVybyBsZW5ndGguCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaXplKCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBBbGlhcyBvZiB7QHNlZSBPQ0lMb2I6OmV4cG9ydH0KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi53cml0ZXRvZmlsZS5waHAKICAgICAqIEBwYXJhbSAkZmlsZW5hbWUKICAgICAqIEBwYXJhbSAkc3RhcnQgW29wdGlvbmFsXQogICAgICogQHBhcmFtICRsZW5ndGggW29wdGlvbmFsXQogICAgICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGV0b2ZpbGUoJGZpbGVuYW1lLCAkc3RhcnQsICRsZW5ndGgpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogRXhwb3J0cyBMT0IncyBjb250ZW50cyB0byBhIGZpbGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi5leHBvcnQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICAgICAqIFBhdGggdG8gdGhlIGZpbGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRzdGFydCBbb3B0aW9uYWxdIDxwPgogICAgICogSW5kaWNhdGVzIGZyb20gd2hlcmUgdG8gc3RhcnQgZXhwb3J0aW5nLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkbGVuZ3RoIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiBkYXRhIHRvIGJlIGV4cG9ydGVkLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleHBvcnQoJGZpbGVuYW1lLCAkc3RhcnQgPSBudWxsLCAkbGVuZ3RoID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBJbXBvcnRzIGZpbGUgZGF0YSB0byB0aGUgTE9CCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2IuaW1wb3J0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAgICAgKiBQYXRoIHRvIHRoZSBmaWxlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbXBvcnQoJGZpbGVuYW1lKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIFdyaXRlcyBhIHRlbXBvcmFyeSBsYXJnZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi53cml0ZXRlbXBvcmFyeS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgPHA+CiAgICAgKiBUaGUgZGF0YSB0byB3cml0ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGxvYl90eXBlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBDYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgICAgKiA8Yj5PQ0lfVEVNUF9CTE9CPC9iPiBpcyB1c2VkIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgQkxPQnMKICAgICAqIDxiPk9DSV9URU1QX0NMT0I8L2I+IGlzIHVzZWQgdG8gY3JlYXRlCiAgICAgKiB0ZW1wb3JhcnkgQ0xPQnMKICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGVUZW1wb3JhcnkoJGRhdGEsICRsb2JfdHlwZSA9IE9DSV9URU1QX0NMT0IpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogQ2xvc2VzIExPQiBkZXNjcmlwdG9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1sb2IuY2xvc2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlKCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBTYXZlcyBkYXRhIHRvIHRoZSBsYXJnZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWxvYi5zYXZlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICAgICAqIFRoZSBkYXRhIHRvIGJlIHNhdmVkLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkb2Zmc2V0IFtvcHRpb25hbF0gPHA+CiAgICAgKiBDYW4gYmUgdXNlZCB0byBpbmRpY2F0ZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsYXJnZSBvYmplY3QuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoJGRhdGEsICRvZmZzZXQgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIEFsaWFzIG9mIHtAc2VlIE9DSUxvYjo6aW1wb3J0fQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLnNhdmVmaWxlLnBocAogICAgICogQHBhcmFtICRmaWxlbmFtZQogICAgICogQHJldHVybiBib29sIFJldHVybiB0cnVlIG9uIHN1Y2Nlc3MgYW5kIGZhbHNlIG9uIGZhaWx1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmVmaWxlKCRmaWxlbmFtZSkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBGcmVlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBMT0IgZGVzY3JpcHRvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktbG9iLmZyZWUucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZyZWUoKSB7fQp9CgovKioKICogT0NJOCBDb2xsZWN0aW9uIGZ1bmN0aW9uYWxpdHkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuT0NJQ29sbGVjdGlvbi5waHAKICogQHNpbmNlIDguMAogKi8KY2xhc3MgT0NJQ29sbGVjdGlvbgp7CiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBBcHBlbmRzIGVsZW1lbnQgdG8gdGhlIGNvbGxlY3Rpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWNvbGxlY3Rpb24uYXBwZW5kLnBocAogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSA8cD4KICAgICAqIFRoZSB2YWx1ZSB0byBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi4gQ2FuIGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoJHZhbHVlKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIFJldHVybnMgdmFsdWUgb2YgdGhlIGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWNvbGxlY3Rpb24uZ2V0ZWxlbS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4IDxwPgogICAgICogVGhlIGVsZW1lbnQgaW5kZXguIEZpcnN0IGluZGV4IGlzIDAuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIG1peGVkIDxiPkZBTFNFPC9iPiBpZiBzdWNoIGVsZW1lbnQgZG9lc24ndCBleGlzdDsgPGI+TlVMTDwvYj4gaWYgZWxlbWVudCBpcyA8Yj5OVUxMPC9iPjsKICAgICAqIHN0cmluZyBpZiBlbGVtZW50IGlzIGNvbHVtbiBvZiBhIHN0cmluZyBkYXRhdHlwZSBvciBudW1iZXIgaWYgZWxlbWVudCBpcwogICAgICogbnVtZXJpYyBmaWVsZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldGVsZW0oJGluZGV4KSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIEFzc2lnbnMgYSB2YWx1ZSB0byB0aGUgZWxlbWVudCBvZiB0aGUgY29sbGVjdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktY29sbGVjdGlvbi5hc3NpZ25lbGVtLnBocAogICAgICogQHBhcmFtIGludCAkaW5kZXggPHA+CiAgICAgKiBUaGUgZWxlbWVudCBpbmRleC4gRmlyc3QgaW5kZXggaXMgMC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgPHA+CiAgICAgKiBDYW4gYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFzc2lnbmVsZW0oJGluZGV4LCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogQXNzaWducyBhIHZhbHVlIHRvIHRoZSBjb2xsZWN0aW9uIGZyb20gYW5vdGhlciBleGlzdGluZyBjb2xsZWN0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1jb2xsZWN0aW9uLmFzc2lnbi5waHAKICAgICAqIEBwYXJhbSBPQ0lDb2xsZWN0aW9uICRmcm9tIDxwPgogICAgICogQW4gaW5zdGFuY2Ugb2YgT0NJQ29sbGVjdGlvbi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzaWduKE9DSUNvbGxlY3Rpb24gJGZyb20pIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUsIFBFQ0wgT0NJOCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogUmV0dXJucyBzaXplIG9mIHRoZSBjb2xsZWN0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1jb2xsZWN0aW9uLnNpemUucGhwCiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNpemUoKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL29jaS1jb2xsZWN0aW9uLm1heC5waHAKICAgICAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBtYXhpbXVtIG51bWJlciBhcyBhbiBpbnRlZ2VyLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3JzLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgMCwgdGhlbiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGlzIG5vdCBsaW1pdGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWF4KCkge30KCiAgICAvKioKICAgICAqIChQSFAgNSwgUEVDTCBPQ0k4ICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBUcmltcyBlbGVtZW50cyBmcm9tIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vb2NpLWNvbGxlY3Rpb24udHJpbS5waHAKICAgICAqIEBwYXJhbSBpbnQgJG51bSA8cD4KICAgICAqIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgdHJpbW1lZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdHJpbSgkbnVtKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1LCBQRUNMIE9DSTggJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIEZyZWVzIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb2xsZWN0aW9uIG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9vY2ktY29sbGVjdGlvbi5mcmVlLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmcmVlKCkge30KfQoKLyoqCiAqIChQSFAgNy4yICZndDs9IDcuMi4xNCwgUEhQIDgsIFBIUCA3ICZndDs9IDcuMy4xLCBQSFAgOCwgUEVDTCBPQ0k4ICZndDs9IDIuMi4wKTxici8+CiAqIFNldHMgYSBtaWxsaXNlY29uZCB0aW1lb3V0IGZvciBkYXRhYmFzZSBjYWxscwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1zZXQtY2FsbC10aW1vdXQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkY29ubmVjdGlvbiA8cD5BbiBPcmFjbGUgY29ubmVjdGlvbiBpZGVudGlmaWVyLAogKiByZXR1cm5lZCBieSB7QHNlZSBvY2lfY29ubmVjdH0sIHtAc2VlIG9jaV9wY29ubmVjdH0sCiAqIG9yIHtAc2VlIG9jaV9uZXdfY29ubmVjdH0uPC9wPgogKiBAcGFyYW0gaW50ICR0aW1lX291dCA8cD5UaGUgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0aGF0IGFueQogKiBzaW5nbGUgcm91bmQtdHJpcCBiZXR3ZWVuIFBIUCBhbmQgT3JhY2xlIERhdGFiYXNlIG1heSB0YWtlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gb2NpX3NldF9jYWxsX3RpbWVvdXQoJGNvbm5lY3Rpb24sIGludCAkdGltZV9vdXQpIHt9CgovKioKICogKFBIUCA3ICZndDs9PSA3LjIuMTQsIFBIUCA4LCBQSFAgNyAmZ3Q7PSA3LjMuMSwgUEhQIDgsIFBFQ0wgT0NJOCAmZ3Q7PSAyLjIuMCkKICogU2V0cyB0aGUgZGF0YWJhc2Ugb3BlcmF0aW9uCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm9jaS1zZXQtZGItb3BlcmF0aW9uLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGNvbm5lY3Rpb24gPHA+QW4gT3JhY2xlIGNvbm5lY3Rpb24gaWRlbnRpZmllciwKICogcmV0dXJuZWQgYnkge0BzZWUgb2NpX2Nvbm5lY3R9LCB7QHNlZSBvY2lfcGNvbm5lY3R9LAogKiBvciB7QHNlZSBvY2lfbmV3X2Nvbm5lY3R9LjwvcD4KICogQHBhcmFtIHN0cmluZyAkZGJvcCA8cD5Vc2VyIGNob3NlbiBzdHJpbmcuPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIG9jaV9zZXRfZGJfb3BlcmF0aW9uKCRjb25uZWN0aW9uLCBzdHJpbmcgJGRib3ApIHt9CgovKioKICogU2V0cyB0aGUgc2l6ZSBvZiB0aGUgTE9CIGNvbHVtbiB0aGF0IHdpbGwgYmUgcHJlZmV0Y2hlZCBieSBPQ0k4IHdoZW4gZXhlY3V0aW5nIGEgcXVlcnkuCiAqIFRoaXMgY2FuIGltcHJvdmUgcGVyZm9ybWFuY2Ugd2hlbiB3b3JraW5nIHdpdGggbGFyZ2UgTE9CIGRhdGEuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkc3RhdGVtZW50IFRoZSBPQ0k4IHN0YXRlbWVudCByZXNvdXJjZS4KICogQHBhcmFtIGludCAkcHJlZmV0Y2hfbG9iX3NpemUgVGhlIHNpemUgb2YgdGhlIExPQiBjb2x1bW4sIGluIGJ5dGVzLCB0byBiZSBwcmVmZXRjaGVkLgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5vY2ktc2V0LXByZWZldGNoLWxvYi5waHAKICogQHNpbmNlIDguMgogKi8KZnVuY3Rpb24gb2NpX3NldF9wcmVmZXRjaF9sb2IoJHN0YXRlbWVudCwgaW50ICRwcmVmZXRjaF9sb2Jfc2l6ZSk6IGJvb2wge30KPD9waHAKCi8qKgogKiBDb21wcmVzc2VzIHRoZSBnaXZlbiBkYXRhIHN0cmluZyB1c2luZyBMWkYgZW5jb2RpbmcuCiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmx6Zi1jb21wcmVzcy5waHAKICoKICogQHBhcmFtIHN0cmluZyAkZGF0YSBEYXRhIHRvIGJlIGNvbXByZXNzZWQKICoKICogQHJldHVybiBmYWxzZXxzdHJpbmcgUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIG9yIEZBTFNFIGlmIGFuIGVycm9yIG9jY3VycmVkLgogKgogKiBAc2luY2UgMC4xLjAKICovCmZ1bmN0aW9uIGx6Zl9jb21wcmVzcygkZGF0YSkge30KCi8qKgogKiBEZWNvbXByZXNzZXMgdGhlIGdpdmVuIGRhdGEgc3RyaW5nIGNvbnRhaW5pbmcgbHpmIGVuY29kZWQgZGF0YS4KICoKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubHpmLWRlY29tcHJlc3MucGhwCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGNvbXByZXNzZWQgc3RyaW5nLgogKgogKiBAcmV0dXJuIGZhbHNlfHN0cmluZyBSZXR1cm5zIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBvciBGQUxTRSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICoKICogQHNpbmNlIDAuMS4wCiAqLwpmdW5jdGlvbiBsemZfZGVjb21wcmVzcygkZGF0YSkge30KCi8qKgogKiBEZXRlcm1pbmVzIHdoYXQgd2FzIExaRiBleHRlbnNpb24gb3B0aW1pemVkIGZvciBkdXJpbmcgY29tcGlsYXRpb24uCiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmx6Zi1vcHRpbWl6ZWQtZm9yLnBocAogKgogKiBAcmV0dXJuIGludCBSZXR1cm5zIDEgaWYgTFpGIHdhcyBvcHRpbWl6ZWQgZm9yIHNwZWVkLCAwIGZvciBjb21wcmVzc2lvbi4KICoKICogQHNpbmNlIDEuMC4wCiAqLwpmdW5jdGlvbiBsemZfb3B0aW1pemVkX2ZvcigpIHt9Cjw/cGhwCi8qKgogKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcGF0dGVybiBpcyBhIGdsb2Itc3R5bGUgc3RyaW5nIHBhdHRlcm4uCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2V4cGVjdC5jb25zdGFudHMucGhwCiAqLwpjb25zdCBFWFBfR0xPQiA9IDE7Ci8qKgogKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcGF0dGVybiBpcyBhbiBleGFjdCBzdHJpbmcuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2V4cGVjdC5jb25zdGFudHMucGhwCiAqLwpjb25zdCBFWFBfRVhBQ1QgPSAyOwovKioKICogSW5kaWNhdGVzIHRoYXQgdGhlIHBhdHRlcm4gaXMgYSByZWdleHAtc3R5bGUgc3RyaW5nIHBhdHRlcm4uCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2V4cGVjdC5jb25zdGFudHMucGhwCiAqLwpjb25zdCBFWFBfUkVHRVhQID0gMzsKLyoqCiAqIFZhbHVlLCByZXR1cm5lZCBieSA8ZW0+ZXhwZWN0X2V4cGVjdGwoKTwvZW0+LCB3aGVuIDxiPkVPRjwvYj4gaXMgcmVhY2hlZC4KICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZXhwZWN0LmNvbnN0YW50cy5waHAKICovCmNvbnN0IEVYUF9FT0YgPSAtMTE7Ci8qKgogKiBWYWx1ZSwgcmV0dXJuZWQgYnkgPGVtPmV4cGVjdF9leHBlY3RsKCk8L2VtPiB1cG9uIHRpbWVvdXQgb2Ygc2Vjb25kcywgc3BlY2lmaWVkIGluIHZhbHVlIG9mIDxiPmV4cGVjdC50aW1lb3V0PC9iPgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9leHBlY3QuY29uc3RhbnRzLnBocAogKi8KY29uc3QgRVhQX1RJTUVPVVQgPSAtMjsKLyoqCiAqIFZhbHVlLCByZXR1cm5lZCBieSA8ZW0+ZXhwZWN0X2V4cGVjdGwoKTwvZW0+IGlmIG5vIHBhdHRlcm4gaGF2ZSBiZWVuIG1hdGNoZWQuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2V4cGVjdC5jb25zdGFudHMucGhwCiAqLwpjb25zdCBFWFBfRlVMTEJVRkZFUiA9IC01OwoKLyoqCiAqIEV4ZWN1dGUgY29tbWFuZCB2aWEgQm91cm5lIHNoZWxsLCBhbmQgb3BlbiB0aGUgUFRZIHN0cmVhbSB0byB0aGUgcHJvY2VzcwogKgogKiBAcGFyYW0gc3RyaW5nICRjb21tYW5kIENvbW1hbmQgdG8gZXhlY3V0ZS4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBSZXR1cm5zIGFuIG9wZW4gUFRZIHN0cmVhbSB0byB0aGUgcHJvY2Vzc2VzIHN0ZGlvLCBzdGRvdXQsIGFuZCBzdGRlcnIuCiAqICAgICAgICAgICAgICAgICAgICAgICAgT24gZmFpbHVyZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UuCiAqIEBzaW5jZSBQRUNMIGV4cGVjdCA+PSAwLjEuMAogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5leHBlY3QtcG9wZW4ucGhwCiAqLwpmdW5jdGlvbiBleHBlY3RfcG9wZW4oc3RyaW5nICRjb21tYW5kKQp7CiAgICB1bnNldCgkY29tbWFuZCk7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qKgogKiBXYWl0cyB1bnRpbCB0aGUgb3V0cHV0IGZyb20gYSBwcm9jZXNzIG1hdGNoZXMgb25lIG9mIHRoZSBwYXR0ZXJucywgYSBzcGVjaWZpZWQgdGltZSBwZXJpb2QgaGFzIHBhc3NlZCwKICogb3IgYW4gRU9GIGlzIHNlZW4uCiAqCiAqIElmIG1hdGNoIGlzIHByb3ZpZGVkLCB0aGVuIGl0IGlzIGZpbGxlZCB3aXRoIHRoZSByZXN1bHQgb2Ygc2VhcmNoLiBUaGUgbWF0Y2hlZCBzdHJpbmcgY2FuIGJlIGZvdW5kIGluIG1hdGNoWzBdLgogKiBUaGUgbWF0Y2ggc3Vic3RyaW5ncyAoYWNjb3JkaW5nIHRvIHRoZSBwYXJlbnRoZXNlcykgaW4gdGhlIG9yaWdpbmFsIHBhdHRlcm4gY2FuIGJlIGZvdW5kIGluIG1hdGNoWzFdLCBtYXRjaFsyXSwKICogYW5kIHNvIG9uLCB1cCB0byBtYXRjaFs5XSAodGhlIGxpbWl0YXRpb24gb2YgbGliZXhwZWN0KS4KICoKICogQHBhcmFtIHJlc291cmNlICRleHBlY3QgQW4gRXhwZWN0IHN0cmVhbSwgcHJldmlvdXNseSBvcGVuZWQgd2l0aCBleHBlY3RfcG9wZW4oKQogKiBAcGFyYW0gYXJyYXkgJGNhc2VzIDxwPkFuIGFycmF5IG9mIGV4cGVjdCBjYXNlcy4gRWFjaCBleHBlY3QgY2FzZSBpcyBhbiBpbmRleGVkIGFycmF5LCBhcyBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZTo8L3A+CiAqIDxwPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+SW5kZXggS2V5PC90ZD4KICogPHRkPlZhbHVlIFR5cGU8L3RkPgogKiA8dGQ+RGVzY3JpcHRpb248L3RkPgogKiA8dGQ+SXMgTWFuZGF0b3J5PC90ZD4KICogPHRkPkRlZmF1bHQgVmFsdWU8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+MDwvdGQ+CiAqIDx0ZD5zdHJpbmc8L3RkPgogKiA8dGQ+cGF0dGVybiwgdGhhdCB3aWxsIGJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgb3V0cHV0IGZyb20gdGhlIHN0cmVhbTwvdGQ+CiAqIDx0ZD5ZZXM8L3RkPgogKiA8dGQ+PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPjE8L3RkPgogKiA8dGQ+bWl4ZWQ8L3RkPgogKiA8dGQ+dmFsdWUsIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLCBpZiB0aGUgcGF0dGVybiBtYXRjaGVzPC90ZD4KICogPHRkPlllczwvdGQ+CiAqIDx0ZD48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+MjwvdGQ+CiAqIDx0ZD5pbnRlZ2VyPC90ZD4KICogPHRkPnBhdHRlcm4gdHlwZSwgb25lIG9mOiA8Yj5FWFBfR0xPQjwvYj4sIDxiPkVYUF9FWEFDVDwvYj4gb3IgPGI+RVhQX1JFR0VYUDwvYj48L3RkPgogKiA8dGQ+Tm88L3RkPgogKiA8dGQ+PGI+RVhQX0dMT0I8L2I+PC90ZD4KICogPC90cj4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJiRtYXRjaAogKgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGF0dGVybiB0aGF0IHdhcyBtYXRjaGVkLgogKiAJCQkgICBPbiBmYWlsdXJlIHRoaXMgZnVuY3Rpb24gcmV0dXJuczogPGI+RVhQX0VPRjwvYj4sIDxiPkVYUF9USU1FT1VUPC9iPiBvciA8Yj5FWFBfRlVMTEJVRkZFUjwvYj4KICogQHNpbmNlIFBFQ0wgZXhwZWN0ID49IDAuMS4wCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmV4cGVjdC1leHBlY3RsLnBocAogKi8KZnVuY3Rpb24gZXhwZWN0X2V4cGVjdGwoJGV4cGVjdCwgYXJyYXkgJGNhc2VzLCBhcnJheSAmJG1hdGNoID0gW10pOiBpbnQKewogICAgdW5zZXQoJGV4cGVjdCwgJGNhc2VzLCAkbWF0Y2gpOwogICAgcmV0dXJuIDA7Cn0KdmVyc2lvbjogMS4wCmZhaWxUaHJlc2hvbGQ6IDEwMApwcm9maWxlOgogIHBhdGg6IEluc3BlY3Rpb25zLnhtbApleGNsdWRlOgogIC0gbmFtZTogUGhwSW5jb25zaXN0ZW50UmV0dXJuUG9pbnRzSW5zcGVjdGlvbgogIC0gbmFtZTogUGhwVG9vTWFueVBhcmFtZXRlcnNJbnNwZWN0aW9uCiAgLSBuYW1lOiBQaHBVbm5lY2Vzc2FyeURvdWJsZVF1b3Rlc0luc3BlY3Rpb24KICAtIG5hbWU6IFBocE1pc3NpbmdQYXJlbnRDYWxsQ29tbW9uSW5zcGVjdGlvbgogIC0gbmFtZTogUGhwTWlzc2luZ1BhcmVudENhbGxNYWdpY0luc3BlY3Rpb24KICAtIG5hbWU6IFBocE1pc3NpbmdQYXJlbnRDb25zdHJ1Y3Rvckluc3BlY3Rpb24KICAtIG5hbWU6IFBocE1pc3NpbmdSZXR1cm5UeXBlSW5zcGVjdGlvbgogIC0gbmFtZTogUGhwTWlzc2luZ1BhcmFtVHlwZUluc3BlY3Rpb24KICAtIG5hbWU6IFBocERlZmluZUNhbkJlUmVwbGFjZWRXaXRoQ29uc3RJbnNwZWN0aW9uCiAgLSBuYW1lOiBQaHBSZXR1cm5Eb2NUeXBlTWlzbWF0Y2hJbnNwZWN0aW9uCiAgLSBuYW1lOiBQaHBEb2NSZWR1bmRhbnRUaHJvd3NJbnNwZWN0aW9uCiAgLSBuYW1lOiBQaHBNaXNzaW5nU3RyaWN0VHlwZXNEZWNsYXJhdGlvbkluc3BlY3Rpb24KICAtIG5hbWU6IFBocFVudXNlZAogICAgcGF0aHM6CiAgICAgIC0gYWVyb3NwaWtlCiAgICAgIC0gYW1xcAogICAgICAtIGFwYWNoZQogICAgICAtIGFwY3UKICAgICAgLSBhc3QKICAgICAgLSBiY21hdGgKICAgICAgLSBibGFja2ZpcmUKICAgICAgLSBiejIKICAgICAgLSBjYWxlbmRhcgogICAgICAtIGNhc3NhbmRyYQogICAgICAtIGNvbV9kb3RuZXQKICAgICAgLSBDb3JlCiAgICAgIC0gY291Y2hiYXNlCiAgICAgIC0gY291Y2hiYXNlX3YyCiAgICAgIC0gY3J5cHRvCiAgICAgIC0gY3R5cGUKICAgICAgLSBjdWJyaWQKICAgICAgLSBjdXJsCiAgICAgIC0gZGF0ZQogICAgICAtIGRiYQogICAgICAtIGRlY2ltYWwKICAgICAgLSBkaW8KICAgICAgLSBkb20KICAgICAgLSBkcwogICAgICAtIGVuY2hhbnQKICAgICAgLSBFdgogICAgICAtIGV2ZW50CiAgICAgIC0gZXhpZgogICAgICAtIGV4cGVjdAogICAgICAtIGZhbm4KICAgICAgLSBGRkkKICAgICAgLSBmZm1wZWcKICAgICAgLSBmaWxlaW5mbwogICAgICAtIGZpbHRlcgogICAgICAtIGZwbQogICAgICAtIGZ0cAogICAgICAtIGdkCiAgICAgIC0gZ2Vhcm1hbgogICAgICAtIGdlb2lwCiAgICAgIC0gZ2VvcwogICAgICAtIGdldHRleHQKICAgICAgLSBnbWFnaWNrCiAgICAgIC0gZ21wCiAgICAgIC0gZ251cGcKICAgICAgLSBncnBjCiAgICAgIC0gaGFzaAogICAgICAtIGh0dHAKICAgICAgLSBpYm1fZGIyCiAgICAgIC0gaWNvbnYKICAgICAgLSBpZ2JpbmFyeQogICAgICAtIGltYWdpY2sKICAgICAgLSBpbWFwCiAgICAgIC0gaW5vdGlmeQogICAgICAtIGludGVyYmFzZQogICAgICAtIGludGwKICAgICAgLSBqc29uCiAgICAgIC0ganVkeQogICAgICAtIGxkYXAKICAgICAgLSBsZXZlbGRiCiAgICAgIC0gbGliZXZlbnQKICAgICAgLSBsaWJzb2RpdW0KICAgICAgLSBsaWJ2aXJ0LXBocAogICAgICAtIGxpYnhtbAogICAgICAtIGx1YQogICAgICAtIEx1YVNhbmRib3gKICAgICAgLSBsemYKICAgICAgLSBtYWlscGFyc2UKICAgICAgLSBtYXBzY3JpcHQKICAgICAgLSBtYnN0cmluZwogICAgICAtIG1jcnlwdAogICAgICAtIG1lbWNhY2hlCiAgICAgIC0gbWVtY2FjaGVkCiAgICAgIC0gbWVtaW5mbwogICAgICAtIG1ldGEKICAgICAgLSBtaW5nCiAgICAgIC0gbW9uZ28KICAgICAgLSBtb25nb2RiCiAgICAgIC0gbW9zcXVpdHRvLXBocAogICAgICAtIG1xc2VyaWVzCiAgICAgIC0gbXNncGFjawogICAgICAtIG1zc3FsCiAgICAgIC0gbXlzcWwKICAgICAgLSBteXNxbF94ZGV2YXBpCiAgICAgIC0gbXlzcWxpCiAgICAgIC0gbmN1cnNlcwogICAgICAtIG5ld3JlbGljCiAgICAgIC0gb2F1dGgKICAgICAgLSBvY2k4CiAgICAgIC0gb2RiYwogICAgICAtIG9wZW5zc2wKICAgICAgLSBwYXJhbGxlbAogICAgICAtIFBhcmxlCiAgICAgIC0gcGNudGwKICAgICAgLSBwY292CiAgICAgIC0gcGNyZQogICAgICAtIHBkZmxpYgogICAgICAtIFBETwogICAgICAtIHBkb19pYm0KICAgICAgLSBwZG9fbXlzcWwKICAgICAgLSBwZG9fcGdzcWwKICAgICAgLSBwZG9fc3FsaXRlCiAgICAgIC0gcGdzcWwKICAgICAgLSBQaGFyCiAgICAgIC0gcGhwZGJnCiAgICAgIC0gcG9zaXgKICAgICAgLSBwcQogICAgICAtIHBzcGVsbAogICAgICAtIHB0aHJlYWRzCiAgICAgIC0gcmFkaXVzCiAgICAgIC0gcmFyCiAgICAgIC0gcmRrYWZrYQogICAgICAtIHJlYWRsaW5lCiAgICAgIC0gcmVjb2RlCiAgICAgIC0gcmVkaXMKICAgICAgLSBSZWZsZWN0aW9uCiAgICAgIC0gcmVnZXgKICAgICAgLSBycG1pbmZvCiAgICAgIC0gcnJkCiAgICAgIC0gU2F4b25DCiAgICAgIC0gc2Vzc2lvbgogICAgICAtIHNobW9wCiAgICAgIC0gU2ltcGxlWE1MCiAgICAgIC0gc25tcAogICAgICAtIHNvYXAKICAgICAgLSBzb2NrZXRzCiAgICAgIC0gc29kaXVtCiAgICAgIC0gc29scgogICAgICAtIFNQTAogICAgICAtIFNwbFR5cGUKICAgICAgLSBTUUxpdGUKICAgICAgLSBzcWxpdGUzCiAgICAgIC0gc3Fsc3J2CiAgICAgIC0gc3NoMgogICAgICAtIHN0YW5kYXJkCiAgICAgIC0gc3RhdHMKICAgICAgLSBzdG9tcAogICAgICAtIHN1aG9zaW4KICAgICAgLSBzdXBlcmdsb2JhbHMKICAgICAgLSBzdm0KICAgICAgLSBzdm4KICAgICAgLSBzeWJhc2UKICAgICAgLSBzeW5jCiAgICAgIC0gc3lzdm1zZwogICAgICAtIHN5c3ZzZW0KICAgICAgLSBzeXN2c2htCiAgICAgIC0gdGlkeQogICAgICAtIHRva2VuaXplcgogICAgICAtIHVvcHoKICAgICAgLSB1dWlkCiAgICAgIC0gdXYKICAgICAgLSB2OGpzCiAgICAgIC0gdmVuZG9yCiAgICAgIC0gd2RkeAogICAgICAtIHdpbjMyc2VydmljZQogICAgICAtIHdpbmJpbmRlcgogICAgICAtIHdpbmNhY2hlCiAgICAgIC0geGNhY2hlCiAgICAgIC0geGRlYnVnCiAgICAgIC0geGRpZmYKICAgICAgLSB4aHByb2YKICAgICAgLSB4bHN3cml0ZXIKICAgICAgLSB4bWwKICAgICAgLSB4bWxyZWFkZXIKICAgICAgLSB4bWxycGMKICAgICAgLSB4bWx3cml0ZXIKICAgICAgLSB4c2wKICAgICAgLSB4eHRlYQogICAgICAtIHlhZgogICAgICAtIHlhbWwKICAgICAgLSB5YXIKICAgICAgLSB6ZW5kCiAgICAgIC0gWmVuZCBPUGNhY2hlCiAgICAgIC0gWmVuZENhY2hlCiAgICAgIC0gWmVuZERlYnVnZ2VyCiAgICAgIC0gWmVuZFV0aWxzCiAgICAgIC0gemlwCiAgICAgIC0gemxpYgogICAgICAtIHptcAogICAgICAtIHptcQogICAgICAtIHpvb2tlZXBlcgogICAgICAtIHpzdGQKPD9waHAKLyoqCiAqIE9wZW5zIGEgU3liYXNlIHNlcnZlciBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3liYXNlLWNvbm5lY3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHNlcnZlcm5hbWUgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSBbb3B0aW9uYWxdCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkIFtvcHRpb25hbF0KICogQHBhcmFtIHN0cmluZyAkY2hhcnNldCBbb3B0aW9uYWxdCiAqIEBwYXJhbSBzdHJpbmcgJGFwcG5hbWUgW29wdGlvbmFsXQogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGEgcG9zaXRpdmUgU3liYXNlIGxpbmsgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBvciBmYWxzZQogKiBAcmVtb3ZlZCA3LjAKICovCmZ1bmN0aW9uIHN5YmFzZV9jb25uZWN0KCRzZXJ2ZXJuYW1lID0gbnVsbCwgJHVzZXJuYW1lID0gbnVsbCwgJHBhc3N3b3JkID0gbnVsbCwgJGNoYXJzZXQgPSBudWxsLCAkYXBwbmFtZSA9IG51bGwpIHt9CgovKioKICogT3BlbiBwZXJzaXN0ZW50IFN5YmFzZSBjb25uZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3liYXNlLXBjb25uZWN0LnBocAogKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJuYW1lIFtvcHRpb25hbF0KICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZCBbb3B0aW9uYWxdCiAqIEBwYXJhbSBzdHJpbmcgJGNoYXJzZXQgW29wdGlvbmFsXQogKiBAcGFyYW0gc3RyaW5nICRhcHBuYW1lIFtvcHRpb25hbF0KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBhIHBvc2l0aXZlIFN5YmFzZSBwZXJzaXN0ZW50IGxpbmsgaWRlbnRpZmllciBvbiBzdWNjZXNzCiAqIEByZW1vdmVkIDcuMAogKi8KZnVuY3Rpb24gc3liYXNlX3Bjb25uZWN0KCRzZXJ2ZXJuYW1lID0gbnVsbCwgJHVzZXJuYW1lID0gbnVsbCwgJHBhc3N3b3JkID0gbnVsbCwgJGNoYXJzZXQgPSBudWxsLCAkYXBwbmFtZSA9IG51bGwpIHt9CgovKioKICogQ2xvc2VzIGEgU3liYXNlIGNvbm5lY3Rpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zeWJhc2UtY2xvc2UucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0KICogQHJldHVybiBib29sCiAqIEByZW1vdmVkIDcuMAogKi8KZnVuY3Rpb24gc3liYXNlX2Nsb3NlKCRsaW5rX2lkZW50aWZpZXIgPSBudWxsKSB7fQoKLyoqCiAqIFNlbGVjdHMgYSBTeWJhc2UgZGF0YWJhc2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zeWJhc2Utc2VsZWN0LWRiLnBocAogKiBAcGFyYW0gc3RyaW5nICRkYXRhYmFzZV9uYW1lCiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0KICogQHJldHVybiBib29sCiAqIEByZW1vdmVkIDcuMAogKi8KZnVuY3Rpb24gc3liYXNlX3NlbGVjdF9kYigkZGF0YWJhc2VfbmFtZSwgJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogU2VuZHMgYSBTeWJhc2UgcXVlcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zeWJhc2UtcXVlcnkucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5CiAqIEBwYXJhbSByZXNvdXJjZSAkbGlua19pZGVudGlmaWVyIFtvcHRpb25hbF0KICogQHJldHVybiBtaXhlZHxmYWxzZSBhIHBvc2l0aXZlIFN5YmFzZSByZXN1bHQgaWRlbnRpZmllciBvbiBzdWNjZXNzLCBmYWxzZSBvbiBlcnJvciwKICogQHJlbW92ZWQgNy4wCiAqLwpmdW5jdGlvbiBzeWJhc2VfcXVlcnkoJHF1ZXJ5LCAkbGlua19pZGVudGlmaWVyID0gbnVsbCkge30KCi8qKgogKiBTZW5kIGEgU3liYXNlIHF1ZXJ5IGFuZCBkbyBub3QgYmxvY2sKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zeWJhc2UtdW5idWZmZXJlZC1xdWVyeS5waHAKICogQHBhcmFtIHN0cmluZyAkcXVlcnkKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIKICogQHBhcmFtIGJvb2wgJHN0b3JlX3Jlc3VsdCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgYSBwb3NpdGl2ZSBTeWJhc2UgcmVzdWx0IGlkZW50aWZpZXIgb24gc3VjY2Vzcywgb3IgZmFsc2Ugb24KICogQHJlbW92ZWQgNy4wCiAqLwpmdW5jdGlvbiBzeWJhc2VfdW5idWZmZXJlZF9xdWVyeSgkcXVlcnksICRsaW5rX2lkZW50aWZpZXIsICRzdG9yZV9yZXN1bHQgPSBudWxsKSB7fQoKLyoqCiAqIEZyZWVzIHJlc3VsdCBtZW1vcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zeWJhc2UtZnJlZS1yZXN1bHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEByZXR1cm4gYm9vbAogKiBAcmVtb3ZlZCA3LjAKICovCmZ1bmN0aW9uIHN5YmFzZV9mcmVlX3Jlc3VsdCgkcmVzdWx0KSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIGxhc3QgbWVzc2FnZSBmcm9tIHRoZSBzZXJ2ZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zeWJhc2UtZ2V0LWxhc3QtbWVzc2FnZS5waHAKICogQHJldHVybiBzdHJpbmcgdGhlIG1lc3NhZ2UgYXMgYSBzdHJpbmcuCiAqIEByZW1vdmVkIDcuMAogKi8KZnVuY3Rpb24gc3liYXNlX2dldF9sYXN0X21lc3NhZ2UoKSB7fQoKLyoqCiAqIEdldCBudW1iZXIgb2Ygcm93cyBpbiBhIHJlc3VsdCBzZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zeWJhc2UtbnVtLXJvd3MucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEByZXR1cm4gaW50IHRoZSBudW1iZXIgb2Ygcm93cyBhcyBhbiBpbnRlZ2VyLgogKiBAcmVtb3ZlZCA3LjAKICovCmZ1bmN0aW9uIHN5YmFzZV9udW1fcm93cygkcmVzdWx0KSB7fQoKLyoqCiAqIEdldHMgdGhlIG51bWJlciBvZiBmaWVsZHMgaW4gYSByZXN1bHQgc2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3liYXNlLW51bS1maWVsZHMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEByZXR1cm4gaW50IHRoZSBudW1iZXIgb2YgZmllbGRzIGFzIGFuIGludGVnZXIuCiAqIEByZW1vdmVkIDcuMAogKi8KZnVuY3Rpb24gc3liYXNlX251bV9maWVsZHMoJHJlc3VsdCkge30KCi8qKgogKiBHZXQgYSByZXN1bHQgcm93IGFzIGFuIGVudW1lcmF0ZWQgYXJyYXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zeWJhc2UtZmV0Y2gtcm93LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdAogKiBAcmV0dXJuIGFycmF5fGZhbHNlIGFuIGFycmF5IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGZldGNoZWQgcm93LCBvciBmYWxzZSBpZiB0aGVyZQogKiBAcmVtb3ZlZCA3LjAKICovCmZ1bmN0aW9uIHN5YmFzZV9mZXRjaF9yb3coJHJlc3VsdCkge30KCi8qKgogKiBGZXRjaCByb3cgYXMgYXJyYXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zeWJhc2UtZmV0Y2gtYXJyYXkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXJyYXkgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZmV0Y2hlZCByb3csIG9yIGZhbHNlIGlmIHRoZXJlCiAqIEByZW1vdmVkIDcuMAogKi8KZnVuY3Rpb24gc3liYXNlX2ZldGNoX2FycmF5KCRyZXN1bHQpIHt9CgovKioKICogRmV0Y2ggYSByZXN1bHQgcm93IGFzIGFuIGFzc29jaWF0aXZlIGFycmF5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3liYXNlLWZldGNoLWFzc29jLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdAogKiBAcmV0dXJuIGFycmF5fGZhbHNlIGFuIGFycmF5IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGZldGNoZWQgcm93LCBvciBmYWxzZSBpZiB0aGVyZQogKiBAcmVtb3ZlZCA3LjAKICovCmZ1bmN0aW9uIHN5YmFzZV9mZXRjaF9hc3NvYygkcmVzdWx0KSB7fQoKLyoqCiAqIEZldGNoIGEgcm93IGFzIGFuIG9iamVjdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN5YmFzZS1mZXRjaC1vYmplY3QucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkcmVzdWx0CiAqIEBwYXJhbSBtaXhlZCAkb2JqZWN0IFtvcHRpb25hbF0KICogQHJldHVybiBvYmplY3QgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIGZldGNoZWQgcm93LCBvcgogKiBAcmVtb3ZlZCA3LjAKICovCmZ1bmN0aW9uIHN5YmFzZV9mZXRjaF9vYmplY3QoJHJlc3VsdCwgJG9iamVjdCA9IG51bGwpIHt9CgovKioKICogTW92ZXMgaW50ZXJuYWwgcm93IHBvaW50ZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zeWJhc2UtZGF0YS1zZWVrLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdF9pZGVudGlmaWVyCiAqIEBwYXJhbSBpbnQgJHJvd19udW1iZXIKICogQHJldHVybiBib29sCiAqIEByZW1vdmVkIDcuMAogKi8KZnVuY3Rpb24gc3liYXNlX2RhdGFfc2VlaygkcmVzdWx0X2lkZW50aWZpZXIsICRyb3dfbnVtYmVyKSB7fQoKLyoqCiAqIEdldCBmaWVsZCBpbmZvcm1hdGlvbiBmcm9tIGEgcmVzdWx0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3liYXNlLWZldGNoLWZpZWxkLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHJlc3VsdAogKiBAcGFyYW0gaW50ICRmaWVsZF9vZmZzZXQgW29wdGlvbmFsXQogKiBAcmV0dXJuIG9iamVjdCBhbiBvYmplY3QgY29udGFpbmluZyBmaWVsZCBpbmZvcm1hdGlvbi4KICogQHJlbW92ZWQgNy4wCiAqLwpmdW5jdGlvbiBzeWJhc2VfZmV0Y2hfZmllbGQoJHJlc3VsdCwgJGZpZWxkX29mZnNldCA9IG51bGwpIHt9CgovKioKICogU2V0cyBmaWVsZCBvZmZzZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zeWJhc2UtZmllbGQtc2Vlay5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQKICogQHBhcmFtIGludCAkZmllbGRfb2Zmc2V0CiAqIEByZXR1cm4gYm9vbAogKiBAcmVtb3ZlZCA3LjAKICovCmZ1bmN0aW9uIHN5YmFzZV9maWVsZF9zZWVrKCRyZXN1bHQsICRmaWVsZF9vZmZzZXQpIHt9CgovKioKICogR2V0IHJlc3VsdCBkYXRhCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3liYXNlLXJlc3VsdC5waHAKICogQHBhcmFtIHJlc291cmNlICRyZXN1bHQKICogQHBhcmFtIGludCAkcm93CiAqIEBwYXJhbSBtaXhlZCAkZmllbGQKICogQHJldHVybiBzdHJpbmcKICogQHJlbW92ZWQgNy4wCiAqLwpmdW5jdGlvbiBzeWJhc2VfcmVzdWx0KCRyZXN1bHQsICRyb3csICRmaWVsZCkge30KCi8qKgogKiBHZXRzIG51bWJlciBvZiBhZmZlY3RlZCByb3dzIGluIGxhc3QgcXVlcnkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zeWJhc2UtYWZmZWN0ZWQtcm93cy5waHAKICogQHBhcmFtIHJlc291cmNlICRsaW5rX2lkZW50aWZpZXIgW29wdGlvbmFsXQogKiBAcmV0dXJuIGludCB0aGUgbnVtYmVyIG9mIGFmZmVjdGVkIHJvd3MsIGFzIGFuIGludGVnZXIuCiAqIEByZW1vdmVkIDcuMAogKi8KZnVuY3Rpb24gc3liYXNlX2FmZmVjdGVkX3Jvd3MoJGxpbmtfaWRlbnRpZmllciA9IG51bGwpIHt9CgovKioKICogU2V0cyBtaW5pbXVtIGNsaWVudCBzZXZlcml0eQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN5YmFzZS1taW4tY2xpZW50LXNldmVyaXR5LnBocAogKiBAcGFyYW0gaW50ICRzZXZlcml0eQogKiBAcmV0dXJuIHZvaWQKICogQHJlbW92ZWQgNy4wCiAqLwpmdW5jdGlvbiBzeWJhc2VfbWluX2NsaWVudF9zZXZlcml0eSgkc2V2ZXJpdHkpIHt9CgovKioKICogU2V0cyBtaW5pbXVtIHNlcnZlciBzZXZlcml0eQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN5YmFzZS1taW4tc2VydmVyLXNldmVyaXR5LnBocAogKiBAcGFyYW0gaW50ICRzZXZlcml0eQogKiBAcmV0dXJuIHZvaWQKICogQHJlbW92ZWQgNy4wCiAqLwpmdW5jdGlvbiBzeWJhc2VfbWluX3NlcnZlcl9zZXZlcml0eSgkc2V2ZXJpdHkpIHt9CgovKioKICogU2V0cyB0aGUgaGFuZGxlciBjYWxsZWQgd2hlbiBhIHNlcnZlciBtZXNzYWdlIGlzIHJhaXNlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN5YmFzZS1zZXQtbWVzc2FnZS1oYW5kbGVyLnBocAogKiBAcGFyYW0gY2FsbGFibGUgJGhhbmRsZXIKICogQHBhcmFtIHJlc291cmNlICRjb25uZWN0aW9uIFtvcHRpb25hbF0KICogQHJldHVybiBib29sCiAqIEByZW1vdmVkIDcuMAogKi8KZnVuY3Rpb24gc3liYXNlX3NldF9tZXNzYWdlX2hhbmRsZXIoJGhhbmRsZXIsICRjb25uZWN0aW9uID0gbnVsbCkge30KCi8qKgogKiBTZXRzIHRoZSBkZWFkbG9jayByZXRyeSBjb3VudAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN5YmFzZS1kZWFkbG9jay1yZXRyeS1jb3VudC5waHAKICogQHBhcmFtIGludCAkcmV0cnlfY291bnQKICogQHJldHVybiB2b2lkCiAqIEByZW1vdmVkIDcuMAogKi8KZnVuY3Rpb24gc3liYXNlX2RlYWRsb2NrX3JldHJ5X2NvdW50KCRyZXRyeV9jb3VudCkge30KPD9waHAKLyoqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Rpby5jb25zdGFudHMucGhwCiAqIERpcmVjdCBJTyBDb25zdGFudHMKICogVGFibGUgb2YgQ29udGVudHMKICogT19SRE9OTFkgLSBvcGVucyB0aGUgZmlsZSBmb3IgcmVhZCBhY2Nlc3MuCiAqIE9fV1JPTkxZIC0gb3BlbnMgdGhlIGZpbGUgZm9yIHdyaXRlIGFjY2Vzcy4KICogT19SRFdSIC0gb3BlbnMgdGhlIGZpbGUgZm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZy4KICogT19DUkVBVCAtIGNyZWF0ZXMgdGhlIGZpbGUsIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KICogT19FWENMIC0gaWYgYm90aCBPX0NSRUFUIGFuZCBPX0VYQ0wgYXJlIHNldCBhbmQgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIGRpb19vcGVuKCkgd2lsbCBmYWlsLgogKiBPX1RSVU5DIC0gaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBpcyBvcGVuZWQgZm9yIHdyaXRlIGFjY2VzcywgdGhlIGZpbGUgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gemVybyBsZW5ndGguCiAqIE9fQVBQRU5EIC0gd3JpdGUgb3BlcmF0aW9ucyB3cml0ZSBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCiAqIE9fTk9OQkxPQ0sgLSBzZXRzIG5vbiBibG9ja2luZyBtb2RlLgogKiBPX05PQ1RUWSAtIHByZXZlbnQgdGhlIE9TIGZyb20gYXNzaWduaW5nIHRoZSBvcGVuZWQgZmlsZSBhcyB0aGUgcHJvY2VzcydzIGNvbnRyb2xsaW5nIHRlcm1pbmFsIHdoZW4gb3BlbmluZyBhIFRUWSBkZXZpY2UgZmlsZS4KICogRl9TRVRMSyAtIExvY2sgaXMgc2V0IG9yIGNsZWFyZWQuIElmIHRoZSBsb2NraXMgaGVsZCBieSBzb21lb25lIGVsc2UgZGlvX2ZjbnRsKCkgcmV0dXJucy0xLgogKiBGX1NFVExLVyAtIGxpa2UgRl9TRVRMSyxidXQgaW4gY2FzZSB0aGUgbG9jayBpcyBoZWxkIGJ5IHNvbWVvbmUgZWxzZSwgZGlvX2ZjbnRsKCkgd2FpdHMgdW50aWwgdGhlIGxvY2sgaXMgcmVsZWFzZWQuCiAqIEZfR0VUTEsgLSBkaW9fZmNudGwoKSByZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IChhcyBkZXNjcmliZWQgYmVsb3cpIGlmIHNvbWVvbmUgZWxzZXByZXZlbnRzIGxvY2suIElmIHRoZXJlIGlzIG5vIG9ic3RydWN0aW9uIGtleSAidHlwZSIgd2lsbCBzZXR0byBGX1VOTENLLgogKiBGX0RVUEZEIC0gZmluZHMgdGhlIGxvd2VzdCBudW1iZXJlZCBhdmFpbGFibGVmaWxlIGRlc2NyaXB0b3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGFyZ3NhbmQgcmV0dXJucyB0aGVtLgogKiBGX1NFVEZMIC0gU2V0cyB0aGUgZmlsZSBkZXNjcmlwdG9ycyBmbGFncyB0b3RoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgYXJncywgd2hpY2ggY2FuIGJlIE9fQVBQRU5ELCBPX05PTkJMT0NLIG9yIE9fQVNZTkMuIFRvIHVzZSBPX0FTWU5DIHlvdSB3aWxsIG5lZWQgdG8gdXNlIHRoZSBQQ05UTCBleHRlbnNpb24uCiAqIE9fTkRFTEFZIC0KICogT19TWU5DIC0KICogT19BU1lOQyAtCiAqIFNfSVJXWFUgLQogKiBTX0lSVVNSIC0KICogU19JV1VTUiAtCiAqIFNfSVhVU1IgLQogKiBTX0lSV1hHIC0KICogU19JUkdSUCAtCiAqIFNfSVdHUlAgLQogKiBTX0lYR1JQIC0KICogU19JUldYTyAtCiAqIFNfSVJPVEggLQogKiBTX0lXT1RIIC0KICogU19JWE9USCAtCiAqIEZfR0VURkQgLQogKiBGX0dFVEZMIC0KICogRl9TRVRPV04gLQogKiBGX0dFVE9XTiAtCiAqIEZfVU5MQ0sgLQogKiBGX1JETENLIC0KICogRl9XUkxDSyAtCiAqLwoKLyoqCiAqIE9fUkRPTkxZIC0gb3BlbnMgdGhlIGZpbGUgZm9yIHJlYWQgYWNjZXNzLgogKi8KZGVmaW5lKCdPX1JET05MWScsIDApOwoKLyoqCiAqIE9fV1JPTkxZIC0gb3BlbnMgdGhlIGZpbGUgZm9yIHdyaXRlIGFjY2Vzcy4KICovCmRlZmluZSgnT19XUk9OTFknLCAxKTsKCi8qKgogKiBPX1JEV1IgLSBvcGVucyB0aGUgZmlsZSBmb3IgYm90aCByZWFkaW5nIGFuZCB3cml0aW5nLgogKi8KZGVmaW5lKCdPX1JEV1InLCAyKTsKCi8qKgogKiBPX0NSRUFUIC0gY3JlYXRlcyB0aGUgZmlsZSwgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LgogKi8KZGVmaW5lKCdPX0NSRUFUJywgNjQpOwoKLyoqCiAqIE9fRVhDTCAtIGlmIGJvdGggT19DUkVBVCBhbmQgT19FWENMIGFyZSBzZXQgYW5kIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCBkaW9fb3BlbigpIHdpbGwgZmFpbC4KICovCmRlZmluZSgnT19FWENMJywgMTI4KTsKCi8qKgogKiBPX1RSVU5DIC0gaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBpcyBvcGVuZWQgZm9yIHdyaXRlIGFjY2VzcywgdGhlIGZpbGUgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gemVybyBsZW5ndGguCiAqLwpkZWZpbmUoJ09fVFJVTkMnLCA1MTIpOwoKLyoqCiAqIE9fQVBQRU5EIC0gd3JpdGUgb3BlcmF0aW9ucyB3cml0ZSBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCiAqLwpkZWZpbmUoJ09fQVBQRU5EJywgMTAyNCk7CgovKioKICogT19OT05CTE9DSyAtIHNldHMgbm9uIGJsb2NraW5nIG1vZGUuCiAqLwpkZWZpbmUoJ09fTk9OQkxPQ0snLCAyMDQ4KTsKCmRlZmluZSgnT19OREVMQVknLCAyMDQ4KTsKZGVmaW5lKCdPX1NZTkMnLCAxMDUyNjcyKTsKZGVmaW5lKCdPX0FTWU5DJywgODE5Mik7CgovKioKICogT19OT0NUVFkgLSBwcmV2ZW50IHRoZSBPUyBmcm9tIGFzc2lnbmluZyB0aGUgb3BlbmVkIGZpbGUgYXMgdGhlIHByb2Nlc3MncyBjb250cm9sbGluZyB0ZXJtaW5hbCB3aGVuIG9wZW5pbmcgYSBUVFkgZGV2aWNlIGZpbGUuCiAqLwpkZWZpbmUoJ09fTk9DVFRZJywgMjU2KTsKCmRlZmluZSgnU19JUldYVScsIDQ0OCk7CmRlZmluZSgnU19JUlVTUicsIDI1Nik7CmRlZmluZSgnU19JV1VTUicsIDEyOCk7CmRlZmluZSgnU19JWFVTUicsIDY0KTsKZGVmaW5lKCdTX0lSV1hHJywgNTYpOwpkZWZpbmUoJ1NfSVJHUlAnLCAzMik7CmRlZmluZSgnU19JV0dSUCcsIDE2KTsKZGVmaW5lKCdTX0lYR1JQJywgOCk7CmRlZmluZSgnU19JUldYTycsIDcpOwpkZWZpbmUoJ1NfSVJPVEgnLCA0KTsKZGVmaW5lKCdTX0lXT1RIJywgMik7CmRlZmluZSgnU19JWE9USCcsIDEpOwoKLyoqCiAqIEZfRFVQRkQgLSBmaW5kcyB0aGUgbG93ZXN0IG51bWJlcmVkIGF2YWlsYWJsZWZpbGUgZGVzY3JpcHRvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYXJnc2FuZCByZXR1cm5zIHRoZW0uCiAqLwpkZWZpbmUoJ0ZfRFVQRkQnLCAwKTsKCmRlZmluZSgnRl9HRVRGRCcsIDEpOwpkZWZpbmUoJ0ZfR0VURkwnLCAzKTsKCi8qKgogKiBGX1NFVEZMIC0gU2V0cyB0aGUgZmlsZSBkZXNjcmlwdG9ycyBmbGFncyB0b3RoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgYXJncywgd2hpY2ggY2FuIGJlIE9fQVBQRU5ELCBPX05PTkJMT0NLIG9yIE9fQVNZTkMuIFRvIHVzZSBPX0FTWU5DIHlvdSB3aWxsIG5lZWQgdG8gdXNlIHRoZSBQQ05UTCBleHRlbnNpb24uCiAqLwpkZWZpbmUoJ0ZfU0VURkwnLCA0KTsKCi8qKgogKiBGX0dFVExLIC0gZGlvX2ZjbnRsKCkgcmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSAoYXMgZGVzY3JpYmVkIGJlbG93KSBpZiBzb21lb25lIGVsc2VwcmV2ZW50cyBsb2NrLiBJZiB0aGVyZSBpcyBubyBvYnN0cnVjdGlvbiBrZXkgInR5cGUiIHdpbGwgc2V0dG8gRl9VTkxDSy4KICovCmRlZmluZSgnRl9HRVRMSycsIDUpOwoKLyoqCiAqIEZfU0VUTEsgLSBMb2NrIGlzIHNldCBvciBjbGVhcmVkLiBJZiB0aGUgbG9ja2lzIGhlbGQgYnkgc29tZW9uZSBlbHNlIGRpb19mY250bCgpIHJldHVybnMtMS4KICovCmRlZmluZSgnRl9TRVRMSycsIDYpOwoKLyoqCiAqIEZfU0VUTEtXIC0gbGlrZSBGX1NFVExLLGJ1dCBpbiBjYXNlIHRoZSBsb2NrIGlzIGhlbGQgYnkgc29tZW9uZSBlbHNlLCBkaW9fZmNudGwoKSB3YWl0cyB1bnRpbCB0aGUgbG9jayBpcyByZWxlYXNlZC4KICovCmRlZmluZSgnRl9TRVRMS1cnLCA3KTsKCmRlZmluZSgnRl9TRVRPV04nLCA4KTsKZGVmaW5lKCdGX0dFVE9XTicsIDkpOwpkZWZpbmUoJ0ZfVU5MQ0snLCAyKTsKZGVmaW5lKCdGX1JETENLJywgMCk7CmRlZmluZSgnRl9XUkxDSycsIDEpOwo8P3BocAovKioKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVmLmRpby5waHAKICogRGlyZWN0IElPIEZ1bmN0aW9ucwogKiBUYWJsZSBvZiBDb250ZW50cwogKiBkaW9fY2xvc2Ug4oCUIENsb3NlcyB0aGUgZmlsZSBkZXNjcmlwdG9yIGdpdmVuIGJ5IGZkCiAqIGRpb19mY250bCDigJQgUGVyZm9ybXMgYSBjIGxpYnJhcnkgZmNudGwgb24gZmQKICogZGlvX29wZW4g4oCUIE9wZW5zIGEgZmlsZSAoY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5KSBhdCBhIGxvd2VyIGxldmVsIHRoYW4gdGhlIEMgbGlicmFyeSBpbnB1dC9vdXB1dCBzdHJlYW0gZnVuY3Rpb25zIGFsbG93CiAqIGRpb19yZWFkIOKAlCBSZWFkcyBieXRlcyBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yCiAqIGRpb19zZWVrIOKAlCBTZWVrcyB0byBwb3Mgb24gZmQgZnJvbSB3aGVuY2UKICogZGlvX3N0YXQg4oCUIEdldHMgc3RhdCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkCiAqIGRpb190Y3NldGF0dHIg4oCUIFNldHMgdGVybWluYWwgYXR0cmlidXRlcyBhbmQgYmF1ZCByYXRlIGZvciBhIHNlcmlhbCBwb3J0CiAqIGRpb190cnVuY2F0ZSDigJQgVHJ1bmNhdGVzIGZpbGUgZGVzY3JpcHRvciBmZCB0byBvZmZzZXQgYnl0ZXMKICogZGlvX3dyaXRlIOKAlCBXcml0ZXMgZGF0YSB0byBmZCB3aXRoIG9wdGlvbmFsIHRydW5jYXRpb24gYXQgbGVuZ3RoCiAqIGRpb19yYXcgLSBPcGVucyBhIHJhdyBkaXJlY3QgSU8gc3RyZWFtLgogKiBkaW9fc2VyaWFsIC0gT3BlbnMgYSBzZXJpYWwgZGlyZWN0IElPIHN0cmVhbS4KICovCgovKioKICogQ2xvc2VzIHRoZSBmaWxlIGRlc2NyaXB0b3IgZ2l2ZW4gYnkgZmQuCiAqCiAqIGRpb19jbG9zZSAoIHJlc291cmNlICRmZCApIDogdm9pZAogKgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kaW8tY2xvc2UucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZmQgVGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBkaW9fb3BlbigpCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24gZGlvX2Nsb3NlKCRmZCk6IHZvaWQge30KCi8qKgogKiBUaGUgZGlvX2ZjbnRsKCkgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIG9wZXJhdGlvbiBzcGVjaWZpZWQgYnkgY21kIG9uIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuCiAqCiAqIGRpb19mY250bCAoIHJlc291cmNlICRmZCAsIGludCAkY21kIFssIG1peGVkICRhcmdzIF0gKSA6IG1peGVkCiAqCiAqIFNvbWUgY29tbWFuZHMgcmVxdWlyZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmdzIHRvIGJlIHN1cHBsaWVkLgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kaW8tZmNudGwucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkZmQgVGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBkaW9fb3BlbigpLgogKiBAcGFyYW0gaW50ICRjbWQgVGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBkaW9fb3BlbigpLgogKiBAcGFyYW0gbWl4ZWQgLi4uJGFyZ3MgYXJncyBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSwgd2hlbiBjbWQgaXMgRl9TRVRMSyBvciBGX1NFVExMVywgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqIDx1bD4KICogPGxpPiJzdGFydCIgLSBvZmZzZXQgd2hlcmUgbG9jayBiZWdpbnM8L2xpPgogKiA8bGk+Imxlbmd0aCIgLSBzaXplIG9mIGxvY2tlZCBhcmVhLiB6ZXJvIG1lYW5zIHRvIGVuZCBvZiBmaWxlPC9saT4KICogPGxpPiJ3aGVuY2UiIC0gV2hlcmUgbF9zdGFydCBpcyByZWxhdGl2ZSB0bzogY2FuIGJlIFNFRUtfU0VULCBTRUVLX0VORCBhbmQgU0VFS19DVVI8L2xpPgogKiA8bGk+InR5cGUiIC0gdHlwZSBvZiBsb2NrOiBjYW4gYmUgRl9SRExDSyAocmVhZCBsb2NrKSwgRl9XUkxDSyAod3JpdGUgbG9jaykgb3IgRl9VTkxDSyAodW5sb2NrKTwvbGk+CiAqIDwvdWw+CiAqIEByZXR1cm4gbWl4ZWQgUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBDIGNhbGwuCiAqLwpmdW5jdGlvbiBkaW9fZmNudGwoJGZkLCBpbnQgJGNtZCwgLi4uJGFyZ3MpIHt9CgovKioKICogT3BlbnMgYSBmaWxlIChjcmVhdGluZyBpdCBpZiBuZWNlc3NhcnkpIGF0IGEgbG93ZXIgbGV2ZWwgdGhhbiB0aGVDIGxpYnJhcnkgaW5wdXQvb3VwdXQgc3RyZWFtIGZ1bmN0aW9ucyBhbGxvdwogKgogKiBkaW9fb3BlbiAoIHN0cmluZyAkZmlsZW5hbWUgLCBpbnQgJGZsYWdzIFssIGludCAkbW9kZSA9IDAgXSApIDogcmVzb3VyY2UKICoKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGlvLW9wZW4ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSB0byBvcGVuLgogKiBAcGFyYW0gaW50ICRmbGFncyBUaGUgZmxhZ3MgcGFyYW1ldGVyIGlzIGEgYml0d2lzZS1PUmVkIHZhbHVlIGNvbXByaXNpbmcgZmxhZ3MgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3QuCiAqIDx1bD4KICogPGxpPk9fUkRPTkxZIC0gb3BlbnMgdGhlIGZpbGUgZm9yIHJlYWQgYWNjZXNzLjwvbGk+CiAqIDxsaT5PX1dST05MWSAtIG9wZW5zIHRoZSBmaWxlIGZvciB3cml0ZSBhY2Nlc3MuPC9saT4KICogPGxpPk9fUkRXUiAtIG9wZW5zIHRoZSBmaWxlIGZvciBib3RoIHJlYWRpbmcgYW5kIHdyaXRpbmcuPC9saT4KICogPGxpPk9fQ1JFQVQgLSBjcmVhdGVzIHRoZSBmaWxlLCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuPC9saT4KICogPGxpPk9fRVhDTCAtIGlmIGJvdGggT19DUkVBVCBhbmQgT19FWENMIGFyZSBzZXQgYW5kIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLCBkaW9fb3BlbigpIHdpbGwgZmFpbC48L2xpPgogKiA8bGk+T19UUlVOQyAtIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgaXMgb3BlbmVkIGZvciB3cml0ZSBhY2Nlc3MsIHRoZSBmaWxlIHdpbGwgYmUgdHJ1bmNhdGVkIHRvIHplcm8gbGVuZ3RoLjwvbGk+CiAqIDxsaT5PX0FQUEVORCAtIHdyaXRlIG9wZXJhdGlvbnMgd3JpdGUgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLjwvbGk+CiAqIDxsaT5PX05PTkJMT0NLIC0gc2V0cyBub24gYmxvY2tpbmcgbW9kZS48L2xpPgogKiA8bGk+T19OT0NUVFkgLSBwcmV2ZW50IHRoZSBPUyBmcm9tIGFzc2lnbmluZyB0aGUgb3BlbmVkIGZpbGUgYXMgdGhlIHByb2Nlc3MncyBjb250cm9sbGluZ3Rlcm1pbmFsIHdoZW4gb3BlbmluZyBhIFRUWSBkZXZpY2UgZmlsZS48L2xpPgogKiA8L3VsPgogKiBAcGFyYW0gaW50ICRtb2RlIElmIGZsYWdzIGNvbnRhaW5zIE9fQ1JFQVQsIG1vZGUgd2lsbCBzZXQgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBmaWxlIChjcmVhdGlvbiBwZXJtaXNzaW9ucykuCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgQSBmaWxlIGRlc2NyaXB0b3Igb3IgRkFMU0Ugb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBkaW9fb3BlbihzdHJpbmcgJGZpbGVuYW1lLCBpbnQgJGZsYWdzLCBpbnQgJG1vZGUgPSAwKSB7fQoKLyoqCiAqIFJlYWRzIGJ5dGVzIGZyb20gYSBmaWxlIGRlc2NyaXB0b3IuCiAqCiAqIGRpb19yZWFkICggcmVzb3VyY2UgJGZkIFssIGludCAkbGVuID0gMTAyNCBdICkgOiBzdHJpbmcKICoKICogQHBhcmFtIHJlc291cmNlICRmZCBUaGUgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGRpb19vcGVuKCkuCiAqIEBwYXJhbSBpbnQgJGxlbiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuIElmIG5vdCBzcGVjaWZpZWQsIGRpb19yZWFkKCkgcmVhZHMgMWsgc2l6ZWQgYmxvY2suCiAqIEByZXR1cm4gc3RyaW5nIFRoZSBieXRlcyByZWFkIGZyb20gZmQuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRpby1yZWFkLnBocAogKi8KZnVuY3Rpb24gZGlvX3JlYWQoJGZkLCBpbnQgJGxlbiA9IDEwMjQpIHt9CgovKioKICogU2Vla3MgdG8gcG9zIG9uIGZkIGZyb20gd2hlbmNlCiAqCiAqIGRpb19zZWVrICggcmVzb3VyY2UgJGZkICwgaW50ICRwb3MgWywgaW50ICR3aGVuY2UgPSBTRUVLX1NFVCBdICk6IGludAogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZkIFRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgZGlvX29wZW4oKS4KICogQHBhcmFtIGludCAkcG9zIFRoZSBuZXcgcG9zaXRpb24uCiAqIEBwYXJhbSBpbnQgJHdoZW5jZSBTcGVjaWZpZXMgaG93IHRoZSBwb3NpdGlvbiBwb3Mgc2hvdWxkIGJlIGludGVycHJldGVkOgogKiA8dWw+CiAqIDxsaT5TRUVLX1NFVCAtIChEZWZhdWx0KSBTcGVjaWZpZXMgdGhhdCBwb3MgaXMgc3BlY2lmaWVkIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L2xpPgogKiA8bGk+U0VFS19DVVIgLSBTcGVjaWZpZXMgdGhhdCBwb3MgaXMgYSBjb3VudCBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbi4gVGhpcyBjb3VudCBtYXkgYmUgcG9zaXRpdmUgb3IgbmVnYXRpdmUuPC9saT4KICogPGxpPlNFRUtfRU5EIC0gU3BlY2lmaWVzIHRoYXQgcG9zIGlzIGEgY291bnQgb2YgY2hhcmFjdGVycyBmcm9tIHRoZSBlbmQgb2YgdGhlIGZpbGUuPC9saT4KICogPC91bD4KICogQHJldHVybiBpbnQKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGlvLXNlZWsucGhwCiAqLwpmdW5jdGlvbiBkaW9fc2VlaygkZmQsIGludCAkcG9zLCBpbnQgJHdoZW5jZSA9IFNFRUtfU0VUKSB7fQoKLyoqCiAqIEdldHMgc3RhdCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkCiAqCiAqIGRpb19zdGF0ICggcmVzb3VyY2UgJGZkICkgOiBhcnJheQogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZkIFRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgZGlvX29wZW4oKS4KICogQHJldHVybiBhcnJheXxudWxsIFJldHVybnMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6CiAqIDx1bD4KICogPGxpPiJkZXZpY2UiIC0gZGV2aWNlPC9saT4KICogPGxpPiJpbm9kZSIgLSBpbm9kZTwvbGk+CiAqIDxsaT4ibW9kZSIgLSBtb2RlPC9saT4KICogPGxpPiJubGluayIgLSBudW1iZXIgb2YgaGFyZCBsaW5rczwvbGk+CiAqIDxsaT4idWlkIiAtIHVzZXIgaWQ8L2xpPgogKiA8bGk+ImdpZCIgLSBncm91cCBpZDwvbGk+CiAqIDxsaT4iZGV2aWNlX3R5cGUiIC0gZGV2aWNlIHR5cGUgKGlmIGlub2RlIGRldmljZSk8L2xpPgogKiA8bGk+InNpemUiIC0gdG90YWwgc2l6ZSBpbiBieXRlczwvbGk+CiAqIDxsaT4iYmxvY2tzaXplIiAtIGJsb2Nrc2l6ZTwvbGk+CiAqIDxsaT4iYmxvY2tzIiAtIG51bWJlciBvZiBibG9ja3MgYWxsb2NhdGVkPC9saT4KICogPGxpPiJhdGltZSIgLSB0aW1lIG9mIGxhc3QgYWNjZXNzPC9saT4KICogPGxpPiJtdGltZSIgLSB0aW1lIG9mIGxhc3QgbW9kaWZpY2F0aW9uPC9saT4KICogPGxpPiJjdGltZSIgLSB0aW1lIG9mIGxhc3QgY2hhbmdlPC9saT4KICogPC91bD4KICogT24gZXJyb3IgZGlvX3N0YXQoKSByZXR1cm5zIE5VTEwuCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRpby1zdGF0LnBocAogKi8KZnVuY3Rpb24gZGlvX3N0YXQoJGZkKSB7fQoKLyoqCiAqIFNldHMgdGVybWluYWwgYXR0cmlidXRlcyBhbmQgYmF1ZCByYXRlIGZvciBhIHNlcmlhbCBwb3J0CiAqCiAqIGRpb190Y3NldGF0dHIgKCByZXNvdXJjZSAkZmQgLCBhcnJheSAkb3B0aW9ucyApIDogYm9vbAogKgogKiBAcGFyYW0gcmVzb3VyY2UgJGZkIFRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgZGlvX29wZW4oKS4KICogQHBhcmFtIGFycmF5ICRvcHRpb25zIFRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOgogKiA8dWw+CiAqIDxsaT4iYmF1ZCIgLSBiYXVkIHJhdGUgb2YgdGhlIHBvcnQgLSBjYW4gYmUgMzg0MDAsIDE5MjAwLCA5NjAwLCA0ODAwLCAyNDAwLCAxODAwLCAxMjAwLCA2MDAsIDMwMCwgMjAwLCAxNTAsIDEzNCwgMTEwLCA3NSBvciA1MCwgZGVmYXVsdCB2YWx1ZSBpcyA5NjAwLjwvbGk+CiAqIDxsaT4iYml0cyIgLSBkYXRhIGJpdHMgLSBjYW4gYmUgOCw3LDYgb3IgNS4gRGVmYXVsdCB2YWx1ZSBpcyA4LjwvbGk+CiAqIDxsaT4ic3RvcCIgLSBzdG9wIGJpdHMgLSBjYW4gYmUgMSBvciAyLiBEZWZhdWx0IHZhbHVlIGlzIDEuPC9saT4KICogPGxpPiJwYXJpdHkiIC0gY2FuIGJlIDAsMSBvciAyLiBEZWZhdWx0IHZhbHVlIGlzIDAuPC9saT4KICogPC91bD4KICogQHJldHVybiB2b2lkCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRpby10Y3NldGF0dHIucGhwCiAqLwpmdW5jdGlvbiBkaW9fdGNzZXRhdHRyKCRmZCwgYXJyYXkgJG9wdGlvbnMpIHt9CgovKioKICogVHJ1bmNhdGVzIGEgZmlsZSB0byBhdCBtb3N0IG9mZnNldCBieXRlcyBpbiBzaXplLgogKgogKiBkaW9fdHJ1bmNhdGUgKCByZXNvdXJjZSAkZmQgLCBpbnQgJG9mZnNldCApIDogYm9vbAogKgogKiBJZiB0aGUgZmlsZSBwcmV2aW91c2x5IHdhcyBsYXJnZXIgdGhhbiB0aGlzIHNpemUsIHRoZSBleHRyYSBkYXRhIGlzIGxvc3QuCiAqIElmIHRoZSBmaWxlIHByZXZpb3VzbHkgd2FzIHNob3J0ZXIsIGl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgdGhlIGZpbGUgaXMgbGVmdCB1bmNoYW5nZWQgb3IgaXMgZXh0ZW5kZWQuCiAqIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgZXh0ZW5kZWQgcGFydCByZWFkcyBhcyB6ZXJvIGJ5dGVzLgogKiBAcGFyYW0gcmVzb3VyY2UgJGZkIFRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgZGlvX29wZW4oKS4KICogQHBhcmFtIGludCAkb2Zmc2V0IFRoZSBvZmZzZXQgaW4gYnl0ZXMuCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5kaW8tdHJ1bmNhdGUucGhwCiAqLwpmdW5jdGlvbiBkaW9fdHJ1bmNhdGUoJGZkLCBpbnQgJG9mZnNldCkge30KCi8qKgogKiBXcml0ZXMgZGF0YSB0byBmZCB3aXRoIG9wdGlvbmFsIHRydW5jYXRpb24gYXQgbGVuZ3RoCiAqCiAqIGRpb193cml0ZSAoIHJlc291cmNlICRmZCAsIHN0cmluZyAkZGF0YSBbLCBpbnQgJGxlbiA9IDAgXSApIDogaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRpby13cml0ZS5waHAKICogQHBhcmFtIHJlc291cmNlICRmZCBUaGUgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IGRpb19vcGVuKCkuCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIHdyaXR0ZW4gZGF0YS4KICogQHBhcmFtIGludCAkbGVuIFRoZSBsZW5ndGggb2YgZGF0YSB0byB3cml0ZSBpbiBieXRlcy4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGZ1bmN0aW9uIHdyaXRlcyBhbGwgdGhlIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBmaWxlLgogKiBAcmV0dXJuIGludCBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byBmZC4KICovCmZ1bmN0aW9uIGRpb193cml0ZSgkZmQsIHN0cmluZyAkZGF0YSwgaW50ICRsZW4gPSAwKSB7fQoKLyoqCiAqIE9wZW5zIGEgcmF3IGRpcmVjdCBJTyBzdHJlYW0uCiAqCiAqIGRpb19yYXcgKCBzdHJpbmcgZmlsZW5hbWUgLCBzdHJpbmcgbW9kZSBbLCBhcnJheSBvcHRpb25zXSApIDogP3Jlc291cmNlCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSB0byBvcGVuLgogKiBAcGFyYW0gc3RyaW5nICRtb2RlIFRoZSBtb2RlIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgYWNjZXNzIHlvdSByZXF1aXJlIHRvIHRoZSBzdHJlYW0gKGFzIGZvcGVuKCkpLgogKiBAcGFyYW0gYXJyYXl8bnVsbCAkb3B0aW9ucyBUaGUgY3VycmVudGx5IGF2YWlsYWJsZSBvcHRpb25zIGFyZToKICogPHVsPgogKiA8bGk+ImRhdGFfcmF0ZSIgLSBiYXVkIHJhdGUgb2YgdGhlIHBvcnQgLSBjYW4gYmUgNzUsIDExMCwgMTM0LCAxNTAsIDMwMCwgNjAwLCAxMjAwLCAxODAwLCAyNDAwLCA0ODAwLCA3MjAwLCA5NjAwLCAxNDQwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwLCA1NjAwMCwgMTI4MDAwIG9yIDI1NjAwMCBkZWZhdWx0IHZhbHVlIGlzIDk2MDAuPC9saT4KICogPGxpPiJkYXRhX2JpdHMiIC0gY2FuIGJlIDgsIDcsIDYgb3IgNS4gRGVmYXVsdCB2YWx1ZSBpcyA4LjwvbGk+CiAqIDxsaT4ic3RvcF9iaXRzIiAtIGNhbiBiZSAxIG9yIDIuIERlZmF1bHQgdmFsdWUgaXMgMS48L2xpPgogKiA8bGk+InBhcml0eSIgLSBjYW4gYmUgMCwgMSBvciAyLiBEZWZhdWx0IHZhbHVlIGlzIDAuPC9saT4KICogPGxpPiJmbG93X2NvbnRyb2wiIC0gY2FuIGJlIDAgb3IgMS4gRGVmYXVsdCB2YWx1ZSBpcyAxLjwvbGk+CiAqIDxsaT4iaXNfY2Fub25pY2FsIiAtIGNhbiBiZSAwIG9yIDEuIERlZmF1bHQgdmFsdWUgaXMgMS48L2xpPgogKiA8L3VsPgogKiBAcmV0dXJuIHJlc291cmNlfG51bGwgQSBzdHJlYW0gcmVzb3VyY2Ugb3IgbnVsbCBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGRpb19yYXcoc3RyaW5nICRmaWxlbmFtZSwgc3RyaW5nICRtb2RlLCA/YXJyYXkgJG9wdGlvbnMpIHt9CgovKioKICogT3BlbnMgYSBzZXJpYWwgZGlyZWN0IElPIHN0cmVhbS4KICoKICogZGlvX3NlcmlhbCAoIHN0cmluZyAkZmlsZW5hbWUgLCBzdHJpbmcgJG1vZGUgWywgYXJyYXkgJG9wdGlvbnMgPSBudWxsXSApIDogP3Jlc291cmNlCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIFRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSB0byBvcGVuLgogKiBAcGFyYW0gc3RyaW5nICRtb2RlIFRoZSBtb2RlIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgYWNjZXNzIHlvdSByZXF1aXJlIHRvIHRoZSBzdHJlYW0gKGFzIGZvcGVuKCkpLgogKiBAcGFyYW0gYXJyYXl8bnVsbCAkb3B0aW9ucyBUaGUgY3VycmVudGx5IGF2YWlsYWJsZSBvcHRpb25zIGFyZToKICogPHVsPgogKiA8bGk+ImRhdGFfcmF0ZSIgLSBiYXVkIHJhdGUgb2YgdGhlIHBvcnQgLSBjYW4gYmUgNzUsIDExMCwgMTM0LCAxNTAsIDMwMCwgNjAwLCAxMjAwLCAxODAwLCAyNDAwLCA0ODAwLCA3MjAwLCA5NjAwLCAxNDQwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwLCA1NjAwMCwgMTI4MDAwIG9yIDI1NjAwMCBkZWZhdWx0IHZhbHVlIGlzIDk2MDAuPC9saT4KICogPGxpPiJkYXRhX2JpdHMiIC0gY2FuIGJlIDgsIDcsIDYgb3IgNS4gRGVmYXVsdCB2YWx1ZSBpcyA4LjwvbGk+CiAqIDxsaT4ic3RvcF9iaXRzIiAtIGNhbiBiZSAxIG9yIDIuIERlZmF1bHQgdmFsdWUgaXMgMS48L2xpPgogKiA8bGk+InBhcml0eSIgLSBjYW4gYmUgMCwgMSBvciAyLiBEZWZhdWx0IHZhbHVlIGlzIDAuPC9saT4KICogPGxpPiJmbG93X2NvbnRyb2wiIC0gY2FuIGJlIDAgb3IgMS4gRGVmYXVsdCB2YWx1ZSBpcyAxLjwvbGk+CiAqIDxsaT4iaXNfY2Fub25pY2FsIiAtIGNhbiBiZSAwIG9yIDEuIERlZmF1bHQgdmFsdWUgaXMgMS48L2xpPgogKiA8L3VsPgogKiBAcmV0dXJuIHJlc291cmNlfG51bGwgQSBzdHJlYW0gcmVzb3VyY2Ugb3IgbnVsbCBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGRpb19zZXJpYWwoc3RyaW5nICRmaWxlbmFtZSwgc3RyaW5nICRtb2RlLCA/YXJyYXkgJG9wdGlvbnMpIHt9Cjw/cGhwCgovLyBTdGFydCBvZiBpbWFwIHYuCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cQXJyYXlTaGFwZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxMYW5ndWFnZUxldmVsVHlwZUF3YXJlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFBocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlOwoKLyoqCiAqIE9wZW4gYW4gSU1BUCBzdHJlYW0gdG8gYSBtYWlsYm94CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1vcGVuLnBocAogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IDxwPgogKiBBIG1haWxib3ggbmFtZSBjb25zaXN0cyBvZiBhIHNlcnZlciBhbmQgYSBtYWlsYm94IHBhdGggb24gdGhpcyBzZXJ2ZXIuCiAqIFRoZSBzcGVjaWFsIG5hbWUgSU5CT1ggc3RhbmRzIGZvciB0aGUgY3VycmVudCB1c2VycwogKiBwZXJzb25hbCBtYWlsYm94LiBNYWlsYm94IG5hbWVzIHRoYXQgY29udGFpbiBpbnRlcm5hdGlvbmFsIGNoYXJhY3RlcnMKICogYmVzaWRlcyB0aG9zZSBpbiB0aGUgcHJpbnRhYmxlIEFTQ0lJIHNwYWNlIGhhdmUgdG8gYmUgZW5jb2RlZCB3aWR0aAogKiA8Yj5pbWFwX3V0ZjdfZW5jb2RlPC9iPi4KICogPC9wPgogKiA8cD4KICogVGhlIHNlcnZlciBwYXJ0LCB3aGljaCBpcyBlbmNsb3NlZCBpbiAneycgYW5kICd9JywgY29uc2lzdHMgb2YgdGhlIHNlcnZlcnMKICogbmFtZSBvciBpcCBhZGRyZXNzLCBhbiBvcHRpb25hbCBwb3J0IChwcmVmaXhlZCBieSAnOicpLCBhbmQgYW4gb3B0aW9uYWwKICogcHJvdG9jb2wgc3BlY2lmaWNhdGlvbiAocHJlZml4ZWQgYnkgJy8nKS4KICogPC9wPgogKiA8cD4KICogVGhlIHNlcnZlciBwYXJ0IGlzIG1hbmRhdG9yeSBpbiBhbGwgbWFpbGJveAogKiBwYXJhbWV0ZXJzLgogKiA8L3A+CiAqIDxwPgogKiBBbGwgbmFtZXMgd2hpY2ggc3RhcnQgd2l0aCB7IGFyZSByZW1vdGUgbmFtZXMsIGFuZCBhcmUKICogaW4gdGhlIGZvcm0gInsiIHJlbW90ZV9zeXN0ZW1fbmFtZSBbIjoiIHBvcnRdIFtmbGFnc10gIn0iCiAqIFttYWlsYm94X25hbWVdIHdoZXJlOgogKiByZW1vdGVfc3lzdGVtX25hbWUgLSBJbnRlcm5ldCBkb21haW4gbmFtZSBvcgogKiBicmFja2V0ZWQgSVAgYWRkcmVzcyBvZiBzZXJ2ZXIuPC9wPgogKiBAcGFyYW0gc3RyaW5nICR1c2VyIDxwPgogKiBUaGUgdXNlciBuYW1lCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQgPHA+CiAqIFRoZSBwYXNzd29yZCBhc3NvY2lhdGVkIHdpdGggdGhlIDxpPnVzZXJuYW1lPC9pPgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIFRoZSA8aT5vcHRpb25zPC9pPiBhcmUgYSBiaXQgbWFzayB3aXRoIG9uZSBvciBtb3JlIG9mCiAqIHRoZSBmb2xsb3dpbmc6CiAqIDxiPk9QX1JFQURPTkxZPC9iPiAtIE9wZW4gbWFpbGJveCByZWFkLW9ubHk8L3A+CiAqIEBwYXJhbSBpbnQgJHJldHJpZXMgW29wdGlvbmFsXSA8cD4KICogTnVtYmVyIG9mIG1heGltdW0gY29ubmVjdCBhdHRlbXB0cwogKiA8L3A+CiAqIEBwYXJhbSBudWxsfGFycmF5ICRvcHRpb25zIDxwPgogKiBDb25uZWN0aW9uIHBhcmFtZXRlcnMsIHRoZSBmb2xsb3dpbmcgKHN0cmluZykga2V5cyBtYXliZSB1c2VkCiAqIHRvIHNldCBvbmUgb3IgbW9yZSBjb25uZWN0aW9uIHBhcmFtZXRlcnM6CiAqIERJU0FCTEVfQVVUSEVOVElDQVRPUiAtIERpc2FibGUgYXV0aGVudGljYXRpb24gcHJvcGVydGllczwvcD4KICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBhbiBJTUFQIHN0cmVhbSBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbnxmYWxzZSddLCBkZWZhdWx0OiAncmVzb3VyY2V8ZmFsc2UnKV0KZnVuY3Rpb24gaW1hcF9vcGVuKHN0cmluZyAkbWFpbGJveCwgc3RyaW5nICR1c2VyLCBzdHJpbmcgJHBhc3N3b3JkLCBpbnQgJGZsYWdzID0gMCwgaW50ICRyZXRyaWVzID0gMCwgYXJyYXkgJG9wdGlvbnMgPSBbXSkge30KCi8qKgogKiBSZW9wZW4gSU1BUCBzdHJlYW0gdG8gbmV3IG1haWxib3gKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLXJlb3Blbi5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggPHA+CiAqIFRoZSBtYWlsYm94IG5hbWUsIHNlZSA8Yj5pbWFwX29wZW48L2I+IGZvciBtb3JlCiAqIGluZm9ybWF0aW9uCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICogVGhlIDxpPm9wdGlvbnM8L2k+IGFyZSBhIGJpdCBtYXNrIHdpdGggb25lIG9yIG1vcmUgb2YKICogdGhlIGZvbGxvd2luZzoKICogPGI+T1BfUkVBRE9OTFk8L2I+IC0gT3BlbiBtYWlsYm94IHJlYWQtb25seTwvcD4KICogQHBhcmFtIGludCAkcmV0cmllcyBbb3B0aW9uYWxdIDxwPgogKiBOdW1iZXIgb2YgbWF4aW11bSBjb25uZWN0IGF0dGVtcHRzCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIHRoZSBzdHJlYW0gaXMgcmVvcGVuZWQsIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuCiAqLwpmdW5jdGlvbiBpbWFwX3Jlb3BlbigKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXAsCiAgICBzdHJpbmcgJG1haWxib3gsCiAgICBpbnQgJGZsYWdzID0gMCwKICAgIGludCAkcmV0cmllcyA9IDAKKTogYm9vbCB7fQoKLyoqCiAqIENsb3NlIGFuIElNQVAgc3RyZWFtCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1jbG9zZS5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIElmIHNldCB0byA8Yj5DTF9FWFBVTkdFPC9iPiwgdGhlIGZ1bmN0aW9uIHdpbGwgc2lsZW50bHkKICogZXhwdW5nZSB0aGUgbWFpbGJveCBiZWZvcmUgY2xvc2luZywgcmVtb3ZpbmcgYWxsIG1lc3NhZ2VzIG1hcmtlZCBmb3IKICogZGVsZXRpb24uIFlvdSBjYW4gYWNoaWV2ZSB0aGUgc2FtZSB0aGluZyBieSB1c2luZwogKiA8Yj5pbWFwX2V4cHVuZ2U8L2I+CiAqIDwvcD4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KZnVuY3Rpb24gaW1hcF9jbG9zZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBpbnQgJGZsYWdzID0gMCkge30KCi8qKgogKiBHZXRzIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIGN1cnJlbnQgbWFpbGJveAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtbnVtLW1zZy5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEByZXR1cm4gaW50fGZhbHNlIFJldHVybiB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHRoZSBjdXJyZW50IG1haWxib3gsIGFzIGFuIGludGVnZXIuCiAqLwpmdW5jdGlvbiBpbWFwX251bV9tc2coI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCk6IGludHxmYWxzZSB7fQoKLyoqCiAqIEdldHMgdGhlIG51bWJlciBvZiByZWNlbnQgbWVzc2FnZXMgaW4gY3VycmVudCBtYWlsYm94CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1udW0tcmVjZW50LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXAKICogQHJldHVybiBpbnQgdGhlIG51bWJlciBvZiByZWNlbnQgbWVzc2FnZXMgaW4gdGhlIGN1cnJlbnQgbWFpbGJveCwgYXMgYW4KICogaW50ZWdlci4KICovCmZ1bmN0aW9uIGltYXBfbnVtX3JlY2VudCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwKTogaW50IHt9CgovKioKICogUmV0dXJucyBoZWFkZXJzIGZvciBhbGwgbWVzc2FnZXMgaW4gYSBtYWlsYm94CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1oZWFkZXJzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXAKICogQHJldHVybiBhcnJheXxmYWxzZSBhbiBhcnJheSBvZiBzdHJpbmcgZm9ybWF0dGVkIHdpdGggaGVhZGVyIGluZm8uIE9uZQogKiBlbGVtZW50IHBlciBtYWlsIG1lc3NhZ2UuCiAqLwpmdW5jdGlvbiBpbWFwX2hlYWRlcnMoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCk6IGFycmF5fGZhbHNlIHt9CgovKioKICogUmVhZCB0aGUgaGVhZGVyIG9mIHRoZSBtZXNzYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1oZWFkZXJpbmZvLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8SU1BUFxDb25uZWN0aW9uICRpbWFwIEFuIElNQVAgc3RyZWFtIHJldHVybmVkIGJ5IGltYXBfb3BlbigpLgogKiBAcGFyYW0gaW50ICRtZXNzYWdlX251bSBUaGUgbWVzc2FnZSBudW1iZXIKICogQHBhcmFtIGludCAkZnJvbV9sZW5ndGggW29wdGlvbmFsXSBOdW1iZXIgb2YgY2hhcmFjdGVycyBmb3IgdGhlIGZldGNoZnJvbSBwcm9wZXJ0eS4gTXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KICogQHBhcmFtIGludCAkc3ViamVjdF9sZW5ndGggW29wdGlvbmFsXSBOdW1iZXIgb2YgY2hhcmFjdGVycyBmb3IgdGhlIGZldGNoc3ViamVjdCBwcm9wZXJ0eSBNdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgogKiBAcGFyYW0gJGRlZmF1bHRfaG9zdCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gc3RkQ2xhc3N8ZmFsc2UgUmV0dXJucyB0aGUgaW5mb3JtYXRpb24gaW4gYW4gb2JqZWN0IHdpdGggZm9sbG93aW5nIHByb3BlcnRpZXM6CiAqIDxkbD4KICogPGR0PnRvYWRkcmVzczwvZHQ+PGRkPmZ1bGwgdG86IGxpbmUsIHVwIHRvIDEwMjQgY2hhcmFjdGVyczwvZGQ+CiAqIDxkdD50bzwvZHQ+PGRkPmFuIGFycmF5IG9mIG9iamVjdHMgZnJvbSB0aGUgVG86IGxpbmUsIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOiBwZXJzb25hbCwgYWRsLCBtYWlsYm94LCBhbmQgaG9zdDwvZGQ+CiAqIDxkdD5mcm9tYWRkcmVzczwvZHQ+PGRkPmZ1bGwgZnJvbTogbGluZSwgdXAgdG8gMTAyNCBjaGFyYWN0ZXJzPC9kZD4KICogPGR0PmZyb208L2R0PjxkZD5hbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIEZyb206IGxpbmUsIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOiBwZXJzb25hbCwgYWRsLCBtYWlsYm94LCBhbmQgaG9zdDwvZGQ+CiAqIDxkdD5jY2FkZHJlc3M8L2R0PjxkZD5mdWxsIGNjOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnM8L2RkPgogKiA8ZHQ+Y2M8L2R0PjxkZD5hbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIENjOiBsaW5lLCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogcGVyc29uYWwsIGFkbCwgbWFpbGJveCwgYW5kIGhvc3Q8L2RkPgogKiA8ZHQ+YmNjYWRkcmVzczwvZHQ+PGRkPmZ1bGwgYmNjOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnM8L2RkPgogKiA8ZHQ+YmNjPC9kdD48ZGQ+YW4gYXJyYXkgb2Ygb2JqZWN0cyBmcm9tIHRoZSBCY2M6IGxpbmUsIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOiBwZXJzb25hbCwgYWRsLCBtYWlsYm94LCBhbmQgaG9zdDwvZGQ+CiAqIDxkdD5yZXBseV90b2FkZHJlc3M8L2R0PjxkZD5mdWxsIFJlcGx5LVRvOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnM8L2RkPgogKiA8ZHQ+cmVwbHlfdG88L2R0PjxkZD5hbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIFJlcGx5LVRvOiBsaW5lLCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogcGVyc29uYWwsIGFkbCwgbWFpbGJveCwgYW5kIGhvc3Q8L2RkPgogKiA8ZHQ+c2VuZGVyYWRkcmVzczwvZHQ+PGRkPmZ1bGwgc2VuZGVyOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnM8L2RkPgogKiA8ZHQ+c2VuZGVyPC9kdD48ZGQ+YW4gYXJyYXkgb2Ygb2JqZWN0cyBmcm9tIHRoZSBTZW5kZXI6IGxpbmUsIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOiBwZXJzb25hbCwgYWRsLCBtYWlsYm94LCBhbmQgaG9zdDwvZGQ+CiAqIDxkdD5yZXR1cm5fcGF0aGFkZHJlc3M8L2R0PjxkZD5mdWxsIFJldHVybi1QYXRoOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnM8L2RkPgogKiA8ZHQ+cmV0dXJuX3BhdGg8L2R0PjxkZD5hbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIFJldHVybi1QYXRoOiBsaW5lLCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogcGVyc29uYWwsIGFkbCwgbWFpbGJveCwgYW5kIGhvc3Q8L2RkPgogKiA8ZHQ+cmVtYWlsIC08L2R0PgogKiA8ZHQ+ZGF0ZTwvZHQ+PGRkPlRoZSBtZXNzYWdlIGRhdGUgYXMgZm91bmQgaW4gaXRzIGhlYWRlcnM8L2RkPgogKiA8ZHQ+RGF0ZTwvZHQ+PGRkPlNhbWUgYXMgZGF0ZTwvZGQ+CiAqIDxkdD5zdWJqZWN0PC9kdD48ZGQ+VGhlIG1lc3NhZ2Ugc3ViamVjdDwvZGQ+CiAqIDxkdD5TdWJqZWN0PC9kdD48ZGQ+U2FtZSBhIHN1YmplY3Q8L2RkPgogKiA8ZHQ+aW5fcmVwbHlfdG8gLTwvZHQ+CiAqIDxkdD5tZXNzYWdlX2lkIC08L2R0PgogKiA8ZHQ+bmV3c2dyb3VwcyAtPC9kdD4KICogPGR0PmZvbGxvd3VwX3RvIC08L2R0PgogKiA8ZHQ+cmVmZXJlbmNlcyAtPC9kdD4KICogPGR0PlJlY2VudDwvZHQ+PGRkPlIgaWYgcmVjZW50IGFuZCBzZWVuLCBOIGlmIHJlY2VudCBhbmQgbm90IHNlZW4sICcgJyBpZiBub3QgcmVjZW50LjwvZGQ+CiAqIDxkdD5VbnNlZW48L2R0PjxkZD5VIGlmIG5vdCBzZWVuIEFORCBub3QgcmVjZW50LCAnICcgaWYgc2VlbiBPUiBub3Qgc2VlbiBhbmQgcmVjZW50PC9kZD4KICogPGR0PkZsYWdnZWQ8L2R0PjxkZD5GIGlmIGZsYWdnZWQsICcgJyBpZiBub3QgZmxhZ2dlZDwvZGQ+CiAqIDxkdD5BbnN3ZXJlZDwvZHQ+PGRkPkEgaWYgYW5zd2VyZWQsICcgJyBpZiB1bmFuc3dlcmVkPC9kZD4KICogPGR0PkRlbGV0ZWQ8L2R0PjxkZD5EIGlmIGRlbGV0ZWQsICcgJyBpZiBub3QgZGVsZXRlZDwvZGQ+CiAqIDxkdD5EcmFmdDwvZHQ+PGRkPlggaWYgZHJhZnQsICcgJyBpZiBub3QgZHJhZnQ8L2RkPgogKiA8ZHQ+TXNnbm88L2R0PjxkZD5UaGUgbWVzc2FnZSBudW1iZXI8L2RkPgogKiA8ZHQ+TWFpbERhdGUgLTwvZHQ+CiAqIDxkdD5TaXplPC9kdD48ZGQ+VGhlIG1lc3NhZ2Ugc2l6ZTwvZGQ+CiAqIDxkdD51ZGF0ZTwvZHQ+PGRkPm1haWwgbWVzc2FnZSBkYXRlIGluIFVuaXggdGltZTwvZGQ+CiAqIDxkdD5mZXRjaGZyb208L2R0PjxkZD5mcm9tIGxpbmUgZm9ybWF0dGVkIHRvIGZpdCBmcm9tbGVuZ3RoIGNoYXJhY3RlcnM8L2RkPgogKiA8ZHQ+ZmV0Y2hzdWJqZWN0PC9kdD48ZGQ+c3ViamVjdCBsaW5lIGZvcm1hdHRlZCB0byBmaXQgc3ViamVjdGxlbmd0aCBjaGFyYWN0ZXJzPC9kZD4KICogPC9kbD4KICovCmZ1bmN0aW9uIGltYXBfaGVhZGVyaW5mbygKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXAsCiAgICBpbnQgJG1lc3NhZ2VfbnVtLAogICAgaW50ICRmcm9tX2xlbmd0aCA9IDAsCiAgICBpbnQgJHN1YmplY3RfbGVuZ3RoID0gMCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUodG86ICc3LjQnKV0gJGRlZmF1bHRfaG9zdCA9IG51bGwKKTogc3RkQ2xhc3N8ZmFsc2Uge30KCi8qKgogKiBQYXJzZSBtYWlsIGhlYWRlcnMgZnJvbSBhIHN0cmluZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtcmZjODIyLXBhcnNlLWhlYWRlcnMucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGhlYWRlcnMgPHA+CiAqIFRoZSBwYXJzZWQgaGVhZGVycyBkYXRhCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZGVmYXVsdF9ob3N0bmFtZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgZGVmYXVsdCBob3N0IG5hbWUKICogPC9wPgogKiBAcmV0dXJuIG9iamVjdHxzdGRDbGFzcyBhbiBvYmplY3Qgc2ltaWxhciB0byB0aGUgb25lIHJldHVybmVkIGJ5CiAqIDxiPmltYXBfaGVhZGVyPC9iPiwgZXhjZXB0IGZvciB0aGUgZmxhZ3MgYW5kIG90aGVyCiAqIHByb3BlcnRpZXMgdGhhdCBjb21lIGZyb20gdGhlIElNQVAgc2VydmVyLgogKi8KZnVuY3Rpb24gaW1hcF9yZmM4MjJfcGFyc2VfaGVhZGVycyhzdHJpbmcgJGhlYWRlcnMsIHN0cmluZyAkZGVmYXVsdF9ob3N0bmFtZSA9ICJVTktOT1dOIik6IHN0ZENsYXNzIHt9CgovKioKICogUmV0dXJucyBhIHByb3Blcmx5IGZvcm1hdHRlZCBlbWFpbCBhZGRyZXNzIGdpdmVuIHRoZSBtYWlsYm94LCBob3N0LCBhbmQgcGVyc29uYWwgaW5mbwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtcmZjODIyLXdyaXRlLWFkZHJlc3MucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggPHA+CiAqIFRoZSBtYWlsYm94IG5hbWUsIHNlZSA8Yj5pbWFwX29wZW48L2I+IGZvciBtb3JlCiAqIGluZm9ybWF0aW9uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkaG9zdG5hbWUgPHA+CiAqIFRoZSBlbWFpbCBob3N0IHBhcnQKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwZXJzb25hbCA8cD4KICogVGhlIG5hbWUgb2YgdGhlIGFjY291bnQgb3duZXIKICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBhIHN0cmluZyBwcm9wZXJseSBmb3JtYXR0ZWQgZW1haWwgYWRkcmVzcyBhcyBkZWZpbmVkIGluIFJGQzI4MjIuCiAqLwpmdW5jdGlvbiBpbWFwX3JmYzgyMl93cml0ZV9hZGRyZXNzKHN0cmluZyAkbWFpbGJveCwgc3RyaW5nICRob3N0bmFtZSwgc3RyaW5nICRwZXJzb25hbCk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIFBhcnNlcyBhbiBhZGRyZXNzIHN0cmluZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtcmZjODIyLXBhcnNlLWFkcmxpc3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICogQSBzdHJpbmcgY29udGFpbmluZyBhZGRyZXNzZXMKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0X2hvc3RuYW1lIDxwPgogKiBUaGUgZGVmYXVsdCBob3N0IG5hbWUKICogPC9wPgogKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5IG9mIG9iamVjdHMuIFRoZSBvYmplY3RzIHByb3BlcnRpZXMgYXJlOgogKiA8cD4KICogbWFpbGJveCAtIHRoZSBtYWlsYm94IG5hbWUgKHVzZXJuYW1lKQogKiBob3N0IC0gdGhlIGhvc3QgbmFtZQogKiBwZXJzb25hbCAtIHRoZSBwZXJzb25hbCBuYW1lCiAqIGFkbCAtIGF0IGRvbWFpbiBzb3VyY2Ugcm91dGUKICogPC9wPgogKi8KZnVuY3Rpb24gaW1hcF9yZmM4MjJfcGFyc2VfYWRybGlzdChzdHJpbmcgJHN0cmluZywgc3RyaW5nICRkZWZhdWx0X2hvc3RuYW1lKTogYXJyYXkge30KCi8qKgogKiBSZWFkIHRoZSBtZXNzYWdlIGJvZHkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWJvZHkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gaW50ICRtZXNzYWdlX251bSA8cD4KICogVGhlIG1lc3NhZ2UgbnVtYmVyCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICogVGhlIG9wdGlvbmFsIDxpPm9wdGlvbnM8L2k+IGFyZSBhIGJpdCBtYXNrCiAqIHdpdGggb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZzoKICogPGI+RlRfVUlEPC9iPiAtIFRoZSA8aT5tc2dfbnVtYmVyPC9pPiBpcyBhIFVJRDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIGJvZHkgb2YgdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBhcyBhIHN0cmluZy4KICovCmZ1bmN0aW9uIGltYXBfYm9keSgKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXAsCiAgICBpbnQgJG1lc3NhZ2VfbnVtLAogICAgaW50ICRmbGFncyA9IDAKKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogUmVhZCB0aGUgc3RydWN0dXJlIG9mIGEgc3BlY2lmaWVkIGJvZHkgc2VjdGlvbiBvZiBhIHNwZWNpZmljIG1lc3NhZ2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWJvZHlzdHJ1Y3QucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gaW50ICRtZXNzYWdlX251bSA8cD4KICogVGhlIG1lc3NhZ2UgbnVtYmVyCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc2VjdGlvbiA8cD4KICogVGhlIGJvZHkgc2VjdGlvbiB0byByZWFkCiAqIDwvcD4KICogQHJldHVybiBvYmplY3QgdGhlIGluZm9ybWF0aW9uIGluIGFuIG9iamVjdCwgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24KICogb2YgdGhlIG9iamVjdCBzdHJ1Y3R1cmUgYW5kIHByb3BlcnRpZXMgc2VlCiAqIDxiPmltYXBfZmV0Y2hzdHJ1Y3R1cmU8L2I+LgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RkQ2xhc3N8ZmFsc2UnXSwgZGVmYXVsdDogJ29iamVjdCcpXQpmdW5jdGlvbiBpbWFwX2JvZHlzdHJ1Y3QoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgaW50ICRtZXNzYWdlX251bSwgc3RyaW5nICRzZWN0aW9uKSB7fQoKLyoqCiAqIEZldGNoIGEgcGFydGljdWxhciBzZWN0aW9uIG9mIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1mZXRjaGJvZHkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gaW50ICRtZXNzYWdlX251bSA8cD4KICogVGhlIG1lc3NhZ2UgbnVtYmVyCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc2VjdGlvbiA8cD4KICogVGhlIHBhcnQgbnVtYmVyLiBJdCBpcyBhIHN0cmluZyBvZiBpbnRlZ2VycyBkZWxpbWl0ZWQgYnkgcGVyaW9kIHdoaWNoCiAqIGluZGV4IGludG8gYSBib2R5IHBhcnQgbGlzdCBhcyBwZXIgdGhlIElNQVA0IHNwZWNpZmljYXRpb24KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogKiBBIGJpdG1hc2sgd2l0aCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nOgogKiA8Yj5GVF9VSUQ8L2I+IC0gVGhlIDxpPm1zZ19udW1iZXI8L2k+IGlzIGEgVUlEPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBhIHBhcnRpY3VsYXIgc2VjdGlvbiBvZiB0aGUgYm9keSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2VzIGFzIGEKICogdGV4dCBzdHJpbmcuCiAqLwpmdW5jdGlvbiBpbWFwX2ZldGNoYm9keSgKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXAsCiAgICBpbnQgJG1lc3NhZ2VfbnVtLAogICAgc3RyaW5nICRzZWN0aW9uLAogICAgaW50ICRmbGFncyA9IDAKKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogRmV0Y2ggTUlNRSBoZWFkZXJzIGZvciBhIHBhcnRpY3VsYXIgc2VjdGlvbiBvZiB0aGUgbWVzc2FnZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtZmV0Y2htaW1lLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXAKICogQHBhcmFtIGludCAkbWVzc2FnZV9udW0gPHA+CiAqIFRoZSBtZXNzYWdlIG51bWJlcgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHNlY3Rpb24gPHA+CiAqIFRoZSBwYXJ0IG51bWJlci4gSXQgaXMgYSBzdHJpbmcgb2YgaW50ZWdlcnMgZGVsaW1pdGVkIGJ5IHBlcmlvZCB3aGljaAogKiBpbmRleCBpbnRvIGEgYm9keSBwYXJ0IGxpc3QgYXMgcGVyIHRoZSBJTUFQNCBzcGVjaWZpY2F0aW9uCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICogQSBiaXRtYXNrIHdpdGggb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZzoKICogPGI+RlRfVUlEPC9iPiAtIFRoZSA8aT5tc2dfbnVtYmVyPC9pPiBpcyBhIFVJRDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIE1JTUUgaGVhZGVycyBvZiBhIHBhcnRpY3VsYXIgc2VjdGlvbiBvZiB0aGUgYm9keSBvZiB0aGUgc3BlY2lmaWVkIG1lc3NhZ2VzIGFzIGEKICogdGV4dCBzdHJpbmcuCiAqIEBzaW5jZSA1LjMuNgogKi8KZnVuY3Rpb24gaW1hcF9mZXRjaG1pbWUoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLAogICAgaW50ICRtZXNzYWdlX251bSwKICAgIHN0cmluZyAkc2VjdGlvbiwKICAgIGludCAkZmxhZ3MgPSAwCik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIFNhdmUgYSBzcGVjaWZpYyBib2R5IHNlY3Rpb24gdG8gYSBmaWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1zYXZlYm9keS5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBtaXhlZCAkZmlsZSA8cD4KICogVGhlIHBhdGggdG8gdGhlIHNhdmVkIGZpbGUgYXMgYSBzdHJpbmcsIG9yIGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yCiAqIHJldHVybmVkIGJ5IDxiPmZvcGVuPC9iPi4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtZXNzYWdlX251bSA8cD4KICogVGhlIG1lc3NhZ2UgbnVtYmVyCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc2VjdGlvbiBbb3B0aW9uYWxdIDxwPgogKiBUaGUgcGFydCBudW1iZXIuIEl0IGlzIGEgc3RyaW5nIG9mIGludGVnZXJzIGRlbGltaXRlZCBieSBwZXJpb2Qgd2hpY2gKICogaW5kZXggaW50byBhIGJvZHkgcGFydCBsaXN0IGFzIHBlciB0aGUgSU1BUDQgc3BlY2lmaWNhdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIEEgYml0bWFzayB3aXRoIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmc6CiAqIDxiPkZUX1VJRDwvYj4gLSBUaGUgPGk+bXNnX251bWJlcjwvaT4gaXMgYSBVSUQ8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAc2luY2UgNS4xLjMKICovCmZ1bmN0aW9uIGltYXBfc2F2ZWJvZHkoCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLAogICAgJGZpbGUsCiAgICBpbnQgJG1lc3NhZ2VfbnVtLAogICAgc3RyaW5nICRzZWN0aW9uID0gIiIsCiAgICBpbnQgJGZsYWdzID0gMAopOiBib29sIHt9CgovKioKICogUmV0dXJucyBoZWFkZXIgZm9yIGEgbWVzc2FnZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtZmV0Y2hoZWFkZXIucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gaW50ICRtZXNzYWdlX251bSA8cD4KICogVGhlIG1lc3NhZ2UgbnVtYmVyCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICogVGhlIHBvc3NpYmxlIDxpPm9wdGlvbnM8L2k+IGFyZToKICogPGI+RlRfVUlEPC9iPiAtIFRoZSA8aT5tc2dubzwvaT4KICogYXJndW1lbnQgaXMgYSBVSUQ8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBoZWFkZXIgb2YgdGhlIHNwZWNpZmllZCBtZXNzYWdlIGFzIGEgdGV4dCBzdHJpbmcuCiAqLwpmdW5jdGlvbiBpbWFwX2ZldGNoaGVhZGVyKAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwKICAgIGludCAkbWVzc2FnZV9udW0sCiAgICBpbnQgJGZsYWdzID0gMAopOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBSZWFkIHRoZSBzdHJ1Y3R1cmUgb2YgYSBwYXJ0aWN1bGFyIG1lc3NhZ2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWZldGNoc3RydWN0dXJlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXAKICogQHBhcmFtIGludCAkbWVzc2FnZV9udW0gPHA+CiAqIFRoZSBtZXNzYWdlIG51bWJlcgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIFRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIG9ubHkgaGFzIGEgc2luZ2xlIG9wdGlvbiwKICogPGI+RlRfVUlEPC9iPiwgd2hpY2ggdGVsbHMgdGhlIGZ1bmN0aW9uIHRvIHRyZWF0IHRoZQogKiA8aT5tc2dfbnVtYmVyPC9pPiBhcmd1bWVudCBhcyBhCiAqIFVJRC4KICogPC9wPgogKiBAcmV0dXJuIG9iamVjdHxzdGRDbGFzc3xmYWxzZSBhbiBvYmplY3QgaW5jbHVkZXMgdGhlIGVudmVsb3BlLCBpbnRlcm5hbCBkYXRlLCBzaXplLCBmbGFncyBhbmQKICogYm9keSBzdHJ1Y3R1cmUgYWxvbmcgd2l0aCBhIHNpbWlsYXIgb2JqZWN0IGZvciBlYWNoIG1pbWUgYXR0YWNobWVudC4gVGhlCiAqIHN0cnVjdHVyZSBvZiB0aGUgcmV0dXJuZWQgb2JqZWN0cyBpcyBhcyBmb2xsb3dzOgogKiA8L3A+CiAqIDxwPgogKiA8dGFibGU+CiAqIFJldHVybmVkIE9iamVjdHMgZm9yIDxiPmltYXBfZmV0Y2hzdHJ1Y3R1cmU8L2I+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD50eXBlPC90ZD4KICogPHRkPlByaW1hcnkgYm9keSB0eXBlPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmVuY29kaW5nPC90ZD4KICogPHRkPkJvZHkgdHJhbnNmZXIgZW5jb2Rpbmc8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+aWZzdWJ0eXBlPC90ZD4KICogPHRkPjxiPlRSVUU8L2I+IGlmIHRoZXJlIGlzIGEgc3VidHlwZSBzdHJpbmc8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+c3VidHlwZTwvdGQ+CiAqIDx0ZD5NSU1FIHN1YnR5cGU8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+aWZkZXNjcmlwdGlvbjwvdGQ+CiAqIDx0ZD48Yj5UUlVFPC9iPiBpZiB0aGVyZSBpcyBhIGRlc2NyaXB0aW9uIHN0cmluZzwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5kZXNjcmlwdGlvbjwvdGQ+CiAqIDx0ZD5Db250ZW50IGRlc2NyaXB0aW9uIHN0cmluZzwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5pZmlkPC90ZD4KICogPHRkPjxiPlRSVUU8L2I+IGlmIHRoZXJlIGlzIGFuIGlkZW50aWZpY2F0aW9uIHN0cmluZzwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5pZDwvdGQ+CiAqIDx0ZD5JZGVudGlmaWNhdGlvbiBzdHJpbmc8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+bGluZXM8L3RkPgogKiA8dGQ+TnVtYmVyIG9mIGxpbmVzPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmJ5dGVzPC90ZD4KICogPHRkPk51bWJlciBvZiBieXRlczwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5pZmRpc3Bvc2l0aW9uPC90ZD4KICogPHRkPjxiPlRSVUU8L2I+IGlmIHRoZXJlIGlzIGEgZGlzcG9zaXRpb24gc3RyaW5nPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmRpc3Bvc2l0aW9uPC90ZD4KICogPHRkPkRpc3Bvc2l0aW9uIHN0cmluZzwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5pZmRwYXJhbWV0ZXJzPC90ZD4KICogPHRkPjxiPlRSVUU8L2I+IGlmIHRoZSBkcGFyYW1ldGVycyBhcnJheSBleGlzdHM8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+ZHBhcmFtZXRlcnM8L3RkPgogKiA8dGQ+QW4gYXJyYXkgb2Ygb2JqZWN0cyB3aGVyZSBlYWNoIG9iamVjdCBoYXMgYW4KICogImF0dHJpYnV0ZSIgYW5kIGEgInZhbHVlIgogKiBwcm9wZXJ0eSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIG9uIHRoZQogKiBDb250ZW50LWRpc3Bvc2l0aW9uIE1JTUUKICogaGVhZGVyLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5pZnBhcmFtZXRlcnM8L3RkPgogKiA8dGQ+PGI+VFJVRTwvYj4gaWYgdGhlIHBhcmFtZXRlcnMgYXJyYXkgZXhpc3RzPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPnBhcmFtZXRlcnM8L3RkPgogKiA8dGQ+QW4gYXJyYXkgb2Ygb2JqZWN0cyB3aGVyZSBlYWNoIG9iamVjdCBoYXMgYW4KICogImF0dHJpYnV0ZSIgYW5kIGEgInZhbHVlIgogKiBwcm9wZXJ0eS48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+cGFydHM8L3RkPgogKiA8dGQ+QW4gYXJyYXkgb2Ygb2JqZWN0cyBpZGVudGljYWwgaW4gc3RydWN0dXJlIHRvIHRoZSB0b3AtbGV2ZWwKICogb2JqZWN0LCBlYWNoIG9mIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGEgTUlNRSBib2R5CiAqIHBhcnQuPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICogPC9wPgogKiA8cD4KICogPHRhYmxlPgogKiBQcmltYXJ5IGJvZHkgdHlwZSAobWF5IHZhcnkgd2l0aCB1c2VkIGxpYnJhcnkpCiAqIDx0ciB2YWxpZ249InRvcCI+PHRkPjA8L3RkPjx0ZD50ZXh0PC90ZD48L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPjx0ZD4xPC90ZD48dGQ+bXVsdGlwYXJ0PC90ZD48L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPjx0ZD4yPC90ZD48dGQ+bWVzc2FnZTwvdGQ+PC90cj4KICogPHRyIHZhbGlnbj0idG9wIj48dGQ+MzwvdGQ+PHRkPmFwcGxpY2F0aW9uPC90ZD48L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPjx0ZD40PC90ZD48dGQ+YXVkaW88L3RkPjwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+PHRkPjU8L3RkPjx0ZD5pbWFnZTwvdGQ+PC90cj4KICogPHRyIHZhbGlnbj0idG9wIj48dGQ+NjwvdGQ+PHRkPnZpZGVvPC90ZD48L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPjx0ZD43PC90ZD48dGQ+b3RoZXI8L3RkPjwvdHI+CiAqIDwvdGFibGU+CiAqIDwvcD4KICogPHA+CiAqIDx0YWJsZT4KICogVHJhbnNmZXIgZW5jb2RpbmdzIChtYXkgdmFyeSB3aXRoIHVzZWQgbGlicmFyeSkKICogPHRyIHZhbGlnbj0idG9wIj48dGQ+MDwvdGQ+PHRkPjdCSVQ8L3RkPjwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+PHRkPjE8L3RkPjx0ZD44QklUPC90ZD48L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPjx0ZD4yPC90ZD48dGQ+QklOQVJZPC90ZD48L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPjx0ZD4zPC90ZD48dGQ+QkFTRTY0PC90ZD48L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPjx0ZD40PC90ZD48dGQ+UVVPVEVELVBSSU5UQUJMRTwvdGQ+PC90cj4KICogPHRyIHZhbGlnbj0idG9wIj48dGQ+NTwvdGQ+PHRkPk9USEVSPC90ZD48L3RyPgogKiA8L3RhYmxlPgogKi8KZnVuY3Rpb24gaW1hcF9mZXRjaHN0cnVjdHVyZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBpbnQgJG1lc3NhZ2VfbnVtLCBpbnQgJGZsYWdzID0gMCk6IHN0ZENsYXNzfGZhbHNlIHt9CgovKioKICogQ2xlYXJzIElNQVAgY2FjaGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWdjLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXAKICogQHBhcmFtIGludCAkZmxhZ3MgPHA+CiAqIFNwZWNpZmllcyB0aGUgY2FjaGUgdG8gcHVyZ2UuIEl0IG1heSBvbmUgb3IgYSBjb21iaW5hdGlvbgogKiBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKICogPGI+SU1BUF9HQ19FTFQ8L2I+IChtZXNzYWdlIGNhY2hlIGVsZW1lbnRzKSwKICogPGI+SU1BUF9HQ19FTlY8L2I+IChlbnZlbG9wcGUgYW5kIGJvZGllcyksCiAqIDxiPklNQVBfR0NfVEVYVFM8L2I+ICh0ZXh0cykuCiAqIDwvcD4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KZnVuY3Rpb24gaW1hcF9nYygKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXAsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSBpbnQgJGZsYWdzID0gMCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSBpbnQgJGZsYWdzCikge30KCi8qKgogKiBEZWxldGUgYWxsIG1lc3NhZ2VzIG1hcmtlZCBmb3IgZGVsZXRpb24KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWV4cHVuZ2UucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4zJyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQpmdW5jdGlvbiBpbWFwX2V4cHVuZ2UoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCkge30KCi8qKgogKiBNYXJrIGEgbWVzc2FnZSBmb3IgZGVsZXRpb24gZnJvbSBjdXJyZW50IG1haWxib3gKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWRlbGV0ZS5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2VfbnVtcyA8cD4KICogVGhlIG1lc3NhZ2UgbnVtYmVyCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICogWW91IGNhbiBzZXQgdGhlIDxiPkZUX1VJRDwvYj4gd2hpY2ggdGVsbHMgdGhlIGZ1bmN0aW9uCiAqIHRvIHRyZWF0IHRoZSA8aT5tc2dfbnVtYmVyPC9pPiBhcmd1bWVudCBhcyBhbgogKiBVSUQuCiAqIDwvcD4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KZnVuY3Rpb24gaW1hcF9kZWxldGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRtZXNzYWdlX251bXMsIGludCAkZmxhZ3MgPSAwKSB7fQoKLyoqCiAqIFVubWFyayB0aGUgbWVzc2FnZSB3aGljaCBpcyBtYXJrZWQgZGVsZXRlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtdW5kZWxldGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlX251bXMgPHA+CiAqIFRoZSBtZXNzYWdlIG51bWJlcgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KZnVuY3Rpb24gaW1hcF91bmRlbGV0ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBzdHJpbmcgJG1lc3NhZ2VfbnVtcywgaW50ICRmbGFncyA9IDApIHt9CgovKioKICogQ2hlY2sgY3VycmVudCBtYWlsYm94CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1jaGVjay5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEByZXR1cm4gb2JqZWN0fHN0ZENsYXNzfGZhbHNlIHRoZSBpbmZvcm1hdGlvbiBpbiBhbiBvYmplY3Qgd2l0aCBmb2xsb3dpbmcgcHJvcGVydGllczoKICogPGI+RGF0ZTwvYj4gLSBjdXJyZW50IHN5c3RlbSB0aW1lIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gUkZDMjgyMgogKiA8Yj5Ecml2ZXI8L2I+IC0gcHJvdG9jb2wgdXNlZCB0byBhY2Nlc3MgdGhpcyBtYWlsYm94OgogKiBQT1AzLCBJTUFQLCBOTlRQCiAqIDxiPk1haWxib3g8L2I+IC0gdGhlIG1haWxib3ggbmFtZQogKiA8Yj5ObXNnczwvYj4gLSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIG1haWxib3gKICogPGI+UmVjZW50PC9iPiAtIG51bWJlciBvZiByZWNlbnQgbWVzc2FnZXMgaW4gdGhlIG1haWxib3gKICogPC9wPgogKiA8cD4KICogUmV0dXJucyA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGltYXBfY2hlY2soI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCk6IHN0ZENsYXNzfGZhbHNlIHt9CgovKioKICogUmV0dXJucyB0aGUgbGlzdCBvZiBtYWlsYm94ZXMgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiB0ZXh0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1saXN0c2Nhbi5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBzdHJpbmcgJHJlZmVyZW5jZSA8cD4KICogPGk+cmVmPC9pPiBzaG91bGQgbm9ybWFsbHkgYmUganVzdCB0aGUgc2VydmVyCiAqIHNwZWNpZmljYXRpb24gYXMgZGVzY3JpYmVkIGluIDxiPmltYXBfb3BlbjwvYj4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuIFNwZWNpZmllcyB3aGVyZSBpbiB0aGUgbWFpbGJveCBoaWVyYXJjaHkKICogdG8gc3RhcnQgc2VhcmNoaW5nLjwvcD5UaGVyZSBhcmUgdHdvIHNwZWNpYWwgY2hhcmFjdGVycyB5b3UgY2FuCiAqIHBhc3MgYXMgcGFydCBvZiB0aGUgPGk+cGF0dGVybjwvaT46CiAqICYjeDAwMDI3OyomI3gwMDAyNzsgYW5kICYjeDAwMDI3OyYjMzc7JiN4MDAwMjc7LgogKiAmI3gwMDAyNzsqJiN4MDAwMjc7IG1lYW5zIHRvIHJldHVybiBhbGwgbWFpbGJveGVzLiBJZiB5b3UgcGFzcwogKiA8aT5wYXR0ZXJuPC9pPiBhcyAmI3gwMDAyNzsqJiN4MDAwMjc7LCB5b3Ugd2lsbAogKiBnZXQgYSBsaXN0IG9mIHRoZSBlbnRpcmUgbWFpbGJveCBoaWVyYXJjaHkuCiAqICYjeDAwMDI3OyYjMzc7JiN4MDAwMjc7CiAqIG1lYW5zIHRvIHJldHVybiB0aGUgY3VycmVudCBsZXZlbCBvbmx5LgogKiAmI3gwMDAyNzsmIzM3OyYjeDAwMDI3OyBhcyB0aGUgPGk+cGF0dGVybjwvaT4KICogcGFyYW1ldGVyIHdpbGwgcmV0dXJuIG9ubHkgdGhlIHRvcCBsZXZlbAogKiBtYWlsYm94ZXM7ICYjeDAwMDI3O34vbWFpbC8mIzM3OyYjeDAwMDI3OyBvbiBVV19JTUFQRCB3aWxsIHJldHVybiBldmVyeSBtYWlsYm94IGluIHRoZSB+L21haWwgZGlyZWN0b3J5LCBidXQgbm9uZSBpbiBzdWJmb2xkZXJzIG9mIHRoYXQgZGlyZWN0b3J5LjwvcD4KICogQHBhcmFtIHN0cmluZyAkY29udGVudCA8cD4KICogVGhlIHNlYXJjaGVkIHN0cmluZwogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgdGhlIG1haWxib3hlcyB0aGF0IGhhdmUKICogPGk+Y29udGVudDwvaT4gaW4gdGhlIHRleHQgb2YgdGhlIG1haWxib3guCiAqLwpmdW5jdGlvbiBpbWFwX2xpc3RzY2FuKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXAsIHN0cmluZyAkcmVmZXJlbmNlLCBzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkY29udGVudCk6IGFycmF5fGZhbHNlIHt9CgovKioKICogQ29weSBzcGVjaWZpZWQgbWVzc2FnZXMgdG8gYSBtYWlsYm94CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1tYWlsLWNvcHkucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlX251bXMgPHA+CiAqIDxpPm1zZ2xpc3Q8L2k+IGlzIGEgcmFuZ2Ugbm90IGp1c3QgbWVzc2FnZQogKiBudW1iZXJzIChhcyBkZXNjcmliZWQgaW4gUkZDMjA2MCkuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbWFpbGJveCA8cD4KICogVGhlIG1haWxib3ggbmFtZSwgc2VlIDxiPmltYXBfb3BlbjwvYj4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogKiA8aT5vcHRpb25zPC9pPiBpcyBhIGJpdG1hc2sgb2Ygb25lIG9yIG1vcmUgb2YKICogPGI+Q1BfVUlEPC9iPiAtIHRoZSBzZXF1ZW5jZSBudW1iZXJzIGNvbnRhaW4gVUlEUzwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpbWFwX21haWxfY29weSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBzdHJpbmcgJG1lc3NhZ2VfbnVtcywgc3RyaW5nICRtYWlsYm94LCBpbnQgJGZsYWdzID0gMCk6IGJvb2wge30KCi8qKgogKiBNb3ZlIHNwZWNpZmllZCBtZXNzYWdlcyB0byBhIG1haWxib3gKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLW1haWwtbW92ZS5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2VfbnVtcyA8cD4KICogPGk+bXNnbGlzdDwvaT4gaXMgYSByYW5nZSBub3QganVzdCBtZXNzYWdlIG51bWJlcnMKICogKGFzIGRlc2NyaWJlZCBpbiBSRkMyMDYwKS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IDxwPgogKiBUaGUgbWFpbGJveCBuYW1lLCBzZWUgPGI+aW1hcF9vcGVuPC9iPiBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIDxpPm9wdGlvbnM8L2k+IGlzIGEgYml0bWFzayBhbmQgbWF5IGNvbnRhaW4gdGhlIHNpbmdsZSBvcHRpb246CiAqIDxiPkNQX1VJRDwvYj4gLSB0aGUgc2VxdWVuY2UgbnVtYmVycyBjb250YWluIFVJRFM8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaW1hcF9tYWlsX21vdmUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRtZXNzYWdlX251bXMsIHN0cmluZyAkbWFpbGJveCwgaW50ICRmbGFncyA9IDApOiBib29sIHt9CgovKioKICogQ3JlYXRlIGEgTUlNRSBtZXNzYWdlIGJhc2VkIG9uIGdpdmVuIGVudmVsb3BlIGFuZCBib2R5IHNlY3Rpb25zCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1tYWlsLWNvbXBvc2UucGhwCiAqIEBwYXJhbSBhcnJheSAkZW52ZWxvcGUgPHA+CiAqIEFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGhlYWRlcnMgZmllbGRzLiBWYWxpZCBrZXlzIGFyZTogInJlbWFpbCIsCiAqICJyZXR1cm5fcGF0aCIsICJkYXRlIiwgImZyb20iLCAicmVwbHlfdG8iLCAiaW5fcmVwbHlfdG8iLCAic3ViamVjdCIsCiAqICJ0byIsICJjYyIsICJiY2MiLCAibWVzc2FnZV9pZCIgYW5kICJjdXN0b21faGVhZGVycyIgKHdoaWNoIGNvbnRhaW5zCiAqIGFzc29jaWF0aXZlIGFycmF5IG9mIG90aGVyIGhlYWRlcnMpLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkYm9kaWVzIDxwPgogKiBBbiBpbmRleGVkIGFycmF5IG9mIGJvZGllcwogKiA8L3A+CiAqIDxwPgogKiBBIGJvZHkgaXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgd2hpY2ggY2FuIGNvbnNpc3Qgb2YgdGhlIGZvbGxvd2luZyBrZXlzOgogKiAidHlwZSIsICJlbmNvZGluZyIsICJjaGFyc2V0IiwgInR5cGUucGFyYW1ldGVycyIsICJzdWJ0eXBlIiwgImlkIiwKICogImRlc2NyaXB0aW9uIiwgImRpc3Bvc2l0aW9uLnR5cGUiLCAiZGlzcG9zaXRpb24iLCAiY29udGVudHMuZGF0YSIsCiAqICJsaW5lcyIsICJieXRlcyIgYW5kICJtZDUiLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBNSU1FIG1lc3NhZ2UuCiAqLwpmdW5jdGlvbiBpbWFwX21haWxfY29tcG9zZShhcnJheSAkZW52ZWxvcGUsIGFycmF5ICRib2RpZXMpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBDcmVhdGUgYSBuZXcgbWFpbGJveAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtY3JlYXRlbWFpbGJveC5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggPHA+CiAqIFRoZSBtYWlsYm94IG5hbWUsIHNlZSA8Yj5pbWFwX29wZW48L2I+IGZvciBtb3JlCiAqIGluZm9ybWF0aW9uLiBOYW1lcyBjb250YWluaW5nIGludGVybmF0aW9uYWwgY2hhcmFjdGVycyBzaG91bGQgYmUKICogZW5jb2RlZCBieSA8Yj5pbWFwX3V0ZjdfZW5jb2RlPC9iPgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaW1hcF9jcmVhdGVtYWlsYm94KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXAsIHN0cmluZyAkbWFpbGJveCk6IGJvb2wge30KCi8qKgogKiBSZW5hbWUgYW4gb2xkIG1haWxib3ggdG8gbmV3IG1haWxib3gKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLXJlbmFtZW1haWxib3gucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRmcm9tIDxwPgogKiBUaGUgb2xkIG1haWxib3ggbmFtZSwgc2VlIDxiPmltYXBfb3BlbjwvYj4gZm9yIG1vcmUKICogaW5mb3JtYXRpb24KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR0byA8cD4KICogVGhlIG5ldyBtYWlsYm94IG5hbWUsIHNlZSA8Yj5pbWFwX29wZW48L2I+IGZvciBtb3JlCiAqIGluZm9ybWF0aW9uCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpbWFwX3JlbmFtZW1haWxib3goI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRmcm9tLCBzdHJpbmcgJHRvKTogYm9vbCB7fQoKLyoqCiAqIERlbGV0ZSBhIG1haWxib3gKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWRlbGV0ZW1haWxib3gucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IDxwPgogKiBUaGUgbWFpbGJveCBuYW1lLCBzZWUgPGI+aW1hcF9vcGVuPC9iPiBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaW1hcF9kZWxldGVtYWlsYm94KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXAsIHN0cmluZyAkbWFpbGJveCk6IGJvb2wge30KCi8qKgogKiBTdWJzY3JpYmUgdG8gYSBtYWlsYm94CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1zdWJzY3JpYmUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IDxwPgogKiBUaGUgbWFpbGJveCBuYW1lLCBzZWUgPGI+aW1hcF9vcGVuPC9iPiBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaW1hcF9zdWJzY3JpYmUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRtYWlsYm94KTogYm9vbCB7fQoKLyoqCiAqIFVuc3Vic2NyaWJlIGZyb20gYSBtYWlsYm94CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC11bnN1YnNjcmliZS5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggPHA+CiAqIFRoZSBtYWlsYm94IG5hbWUsIHNlZSA8Yj5pbWFwX29wZW48L2I+IGZvciBtb3JlCiAqIGluZm9ybWF0aW9uCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpbWFwX3Vuc3Vic2NyaWJlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXAsIHN0cmluZyAkbWFpbGJveCk6IGJvb2wge30KCi8qKgogKiBBcHBlbmQgYSBzdHJpbmcgbWVzc2FnZSB0byBhIHNwZWNpZmllZCBtYWlsYm94CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1hcHBlbmQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRmb2xkZXIgPHA+CiAqIFRoZSBtYWlsYm94IG5hbWUsIHNlZSA8Yj5pbWFwX29wZW48L2I+IGZvciBtb3JlCiAqIGluZm9ybWF0aW9uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSA8cD4KICogVGhlIG1lc3NhZ2UgdG8gYmUgYXBwZW5kLCBhcyBhIHN0cmluZwogKiA8L3A+CiAqIDxwPgogKiBXaGVuIHRhbGtpbmcgdG8gdGhlIEN5cnVzIElNQVAgc2VydmVyLCB5b3UgbXVzdCB1c2UgIlxyXG4iIGFzCiAqIHlvdXIgZW5kLW9mLWxpbmUgdGVybWluYXRvciBpbnN0ZWFkIG9mICJcbiIgb3IgdGhlIG9wZXJhdGlvbiB3aWxsCiAqIGZhaWwKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAqIElmIHByb3ZpZGVkLCB0aGUgPGk+b3B0aW9uczwvaT4gd2lsbCBhbHNvIGJlIHdyaXR0ZW4KICogdG8gdGhlIDxpPm1haWxib3g8L2k+CiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkaW50ZXJuYWxfZGF0ZSBbb3B0aW9uYWxdIDxwPgogKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQsIGl0IHdpbGwgc2V0IHRoZSBJTlRFUk5BTERBVEUgb24gdGhlIGFwcGVuZGVkIG1lc3NhZ2UuIFRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgZGF0ZSBzdHJpbmcgdGhhdCBjb25mb3JtcyB0byB0aGUgcmZjMjA2MCBzcGVjaWZpY2F0aW9ucyBmb3IgYSBkYXRlX3RpbWUgdmFsdWUuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpbWFwX2FwcGVuZCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBzdHJpbmcgJGZvbGRlciwgc3RyaW5nICRtZXNzYWdlLCA/c3RyaW5nICRvcHRpb25zID0gbnVsbCwgP3N0cmluZyAkaW50ZXJuYWxfZGF0ZSA9IG51bGwpOiBib29sIHt9CgovKioKICogQ2hlY2sgaWYgdGhlIElNQVAgc3RyZWFtIGlzIHN0aWxsIGFjdGl2ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtcGluZy5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiB0aGUgc3RyZWFtIGlzIHN0aWxsIGFsaXZlLCA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlLgogKi8KZnVuY3Rpb24gaW1hcF9waW5nKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXApOiBib29sIHt9CgovKioKICogRGVjb2RlIEJBU0U2NCBlbmNvZGVkIHRleHQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWJhc2U2NC5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogKiBUaGUgZW5jb2RlZCB0ZXh0CiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIGRlY29kZWQgbWVzc2FnZSBhcyBhIHN0cmluZy4KICovCmZ1bmN0aW9uIGltYXBfYmFzZTY0KHN0cmluZyAkc3RyaW5nKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogQ29udmVydCBhIHF1b3RlZC1wcmludGFibGUgc3RyaW5nIHRvIGFuIDggYml0IHN0cmluZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtcXByaW50LnBocAogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAqIEEgcXVvdGVkLXByaW50YWJsZSBzdHJpbmcKICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBhbiA4IGJpdHMgc3RyaW5nLgogKi8KZnVuY3Rpb24gaW1hcF9xcHJpbnQoc3RyaW5nICRzdHJpbmcpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBDb252ZXJ0IGFuIDhiaXQgc3RyaW5nIHRvIGEgcXVvdGVkLXByaW50YWJsZSBzdHJpbmcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLThiaXQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICogVGhlIDhiaXQgc3RyaW5nIHRvIGNvbnZlcnQKICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBhIHF1b3RlZC1wcmludGFibGUgc3RyaW5nLgogKi8KZnVuY3Rpb24gaW1hcF84Yml0KHN0cmluZyAkc3RyaW5nKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogQ29udmVydCBhbiA4Yml0IHN0cmluZyB0byBhIGJhc2U2NCBzdHJpbmcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWJpbmFyeS5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogKiBUaGUgOGJpdCBzdHJpbmcKICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZy4KICovCmZ1bmN0aW9uIGltYXBfYmluYXJ5KHN0cmluZyAkc3RyaW5nKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogQ29udmVydHMgTUlNRS1lbmNvZGVkIHRleHQgdG8gVVRGLTgKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLXV0ZjgucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG1pbWVfZW5jb2RlZF90ZXh0IDxwPgogKiBBIE1JTUUgZW5jb2RlZCBzdHJpbmcuIE1JTUUgZW5jb2RpbmcgbWV0aG9kIGFuZCB0aGUgVVRGLTgKICogc3BlY2lmaWNhdGlvbiBhcmUgZGVzY3JpYmVkIGluIFJGQzIwNDcgYW5kIFJGQzIwNDQgcmVzcGVjdGl2ZWx5LgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIGFuIFVURi04IGVuY29kZWQgc3RyaW5nLgogKi8KZnVuY3Rpb24gaW1hcF91dGY4KHN0cmluZyAkbWltZV9lbmNvZGVkX3RleHQpOiBzdHJpbmcge30KCi8qKgogKiBSZXR1cm5zIHN0YXR1cyBpbmZvcm1hdGlvbiBvbiBhIG1haWxib3gKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLXN0YXR1cy5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggPHA+CiAqIFRoZSBtYWlsYm94IG5hbWUsIHNlZSA8Yj5pbWFwX29wZW48L2I+IGZvciBtb3JlCiAqIGluZm9ybWF0aW9uCiAqIDwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgPHA+CiAqIFZhbGlkIGZsYWdzIGFyZToKICogPGI+U0FfTUVTU0FHRVM8L2I+IC0gc2V0ICRzdGF0dXMtPm1lc3NhZ2VzIHRvIHRoZQogKiBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIG1haWxib3gKICogQHJldHVybiBvYmplY3QgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHN0YXR1cyBpbmZvcm1hdGlvbi4KICogVGhlIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOiBtZXNzYWdlcywKICogcmVjZW50LCB1bnNlZW4sCiAqIHVpZG5leHQsIGFuZCB1aWR2YWxpZGl0eS4KICogPC9wPgogKiA8cD4KICogZmxhZ3MgaXMgYWxzbyBzZXQsIHdoaWNoIGNvbnRhaW5zIGEgYml0bWFzayB3aGljaCBjYW4KICogYmUgY2hlY2tlZCBhZ2FpbnN0IGFueSBvZiB0aGUgYWJvdmUgY29uc3RhbnRzLjwvcD4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0ZENsYXNzfGZhbHNlJ10sIGRlZmF1bHQ6ICdvYmplY3QnKV0KZnVuY3Rpb24gaW1hcF9zdGF0dXMoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRtYWlsYm94LCBpbnQgJGZsYWdzKSB7fQoKLyoqCiAqIEBwYXJhbSAkc3RyZWFtX2lkCiAqIEBwYXJhbSAkb3B0aW9ucwogKi8KZnVuY3Rpb24gaW1hcF9zdGF0dXNfY3VycmVudCgkc3RyZWFtX2lkLCAkb3B0aW9ucykge30KCi8qKgogKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgbWFpbGJveAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtbWFpbGJveG1zZ2luZm8ucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcmV0dXJuIG9iamVjdHxzdGRDbGFzc3xmYWxzZSB0aGUgaW5mb3JtYXRpb24gaW4gYW4gb2JqZWN0IHdpdGggZm9sbG93aW5nIHByb3BlcnRpZXM6CiAqIDx0YWJsZT4KICogTWFpbGJveCBwcm9wZXJ0aWVzCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5EYXRlPC90ZD4KICogPHRkPmRhdGUgb2YgbGFzdCBjaGFuZ2UgKGN1cnJlbnQgZGF0ZXRpbWUpPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkRyaXZlcjwvdGQ+CiAqIDx0ZD5kcml2ZXI8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+TWFpbGJveDwvdGQ+CiAqIDx0ZD5uYW1lIG9mIHRoZSBtYWlsYm94PC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPk5tc2dzPC90ZD4KICogPHRkPm51bWJlciBvZiBtZXNzYWdlczwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5SZWNlbnQ8L3RkPgogKiA8dGQ+bnVtYmVyIG9mIHJlY2VudCBtZXNzYWdlczwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5VbnJlYWQ8L3RkPgogKiA8dGQ+bnVtYmVyIG9mIHVucmVhZCBtZXNzYWdlczwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5EZWxldGVkPC90ZD4KICogPHRkPm51bWJlciBvZiBkZWxldGVkIG1lc3NhZ2VzPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPlNpemU8L3RkPgogKiA8dGQ+bWFpbGJveCBzaXplPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICogPC9wPgogKiA8cD4KICogUmV0dXJucyA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGltYXBfbWFpbGJveG1zZ2luZm8oI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCk6IHN0ZENsYXNzIHt9CgovKioKICogU2V0cyBmbGFncyBvbiBtZXNzYWdlcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtc2V0ZmxhZy1mdWxsLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXAKICogQHBhcmFtIHN0cmluZyAkc2VxdWVuY2UgPHA+CiAqIEEgc2VxdWVuY2Ugb2YgbWVzc2FnZSBudW1iZXJzLiBZb3UgY2FuIGVudW1lcmF0ZSBkZXNpcmVkIG1lc3NhZ2VzCiAqIHdpdGggdGhlIFgsWSBzeW50YXgsIG9yIHJldHJpZXZlIGFsbCBtZXNzYWdlcwogKiB3aXRoaW4gYW4gaW50ZXJ2YWwgd2l0aCB0aGUgWDpZIHN5bnRheAogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGZsYWcgPHA+CiAqIFRoZSBmbGFncyB3aGljaCB5b3UgY2FuIHNldCBhcmUgXFNlZW4sCiAqIFxBbnN3ZXJlZCwgXEZsYWdnZWQsCiAqIFxEZWxldGVkLCBhbmQgXERyYWZ0IGFzCiAqIGRlZmluZWQgYnkgUkZDMjA2MC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAqIEEgYml0IG1hc2sgdGhhdCBtYXkgY29udGFpbiB0aGUgc2luZ2xlIG9wdGlvbjoKICogPGI+U1RfVUlEPC9iPiAtIFRoZSBzZXF1ZW5jZSBhcmd1bWVudCBjb250YWlucyBVSURzCiAqIGluc3RlYWQgb2Ygc2VxdWVuY2UgbnVtYmVyczwvcD4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KZnVuY3Rpb24gaW1hcF9zZXRmbGFnX2Z1bGwoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRzZXF1ZW5jZSwgc3RyaW5nICRmbGFnLCBpbnQgJG9wdGlvbnMgPSBOSUwpIHt9CgovKioKICogQ2xlYXJzIGZsYWdzIG9uIG1lc3NhZ2VzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1jbGVhcmZsYWctZnVsbC5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBzdHJpbmcgJHNlcXVlbmNlIDxwPgogKiBBIHNlcXVlbmNlIG9mIG1lc3NhZ2UgbnVtYmVycy4gWW91IGNhbiBlbnVtZXJhdGUgZGVzaXJlZCBtZXNzYWdlcwogKiB3aXRoIHRoZSBYLFkgc3ludGF4LCBvciByZXRyaWV2ZSBhbGwgbWVzc2FnZXMKICogd2l0aGluIGFuIGludGVydmFsIHdpdGggdGhlIFg6WSBzeW50YXgKICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRmbGFnIDxwPgogKiBUaGUgZmxhZ3Mgd2hpY2ggeW91IGNhbiB1bnNldCBhcmUgIlxcU2VlbiIsICJcXEFuc3dlcmVkIiwgIlxcRmxhZ2dlZCIsCiAqICJcXERlbGV0ZWQiLCBhbmQgIlxcRHJhZnQiIChhcyBkZWZpbmVkIGJ5IFJGQzIwNjApCiAqIDwvcD4KICogQHBhcmFtIGludCAkb3B0aW9ucyBbb3B0aW9uYWxdIDxwPgogKiA8aT5vcHRpb25zPC9pPiBhcmUgYSBiaXQgbWFzayBhbmQgbWF5IGNvbnRhaW4KICogdGhlIHNpbmdsZSBvcHRpb246CiAqIDxiPlNUX1VJRDwvYj4gLSBUaGUgc2VxdWVuY2UgYXJndW1lbnQgY29udGFpbnMgVUlEcwogKiBpbnN0ZWFkIG9mIHNlcXVlbmNlIG51bWJlcnM8L3A+CiAqLwojW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCmZ1bmN0aW9uIGltYXBfY2xlYXJmbGFnX2Z1bGwoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRzZXF1ZW5jZSwgc3RyaW5nICRmbGFnLCBpbnQgJG9wdGlvbnMgPSAwKSB7fQoKLyoqCiAqIEdldHMgYW5kIHNvcnQgbWVzc2FnZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLXNvcnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gaW50ICRjcml0ZXJpYSA8cD4KICogQ3JpdGVyaWEgY2FuIGJlIG9uZSAoYW5kIG9ubHkgb25lKSBvZiB0aGUgZm9sbG93aW5nOgogKiA8Yj5TT1JUREFURTwvYj4gLSBtZXNzYWdlIERhdGU8L3A+CiAqIEBwYXJhbSBib29sICRyZXZlcnNlIDxwPgogKiBTZXQgdGhpcyB0byAxIGZvciByZXZlcnNlIHNvcnRpbmcKICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogKiBUaGUgPGk+b3B0aW9uczwvaT4gYXJlIGEgYml0bWFzayBvZiBvbmUgb3IgbW9yZSBvZiB0aGUKICogZm9sbG93aW5nOgogKiA8Yj5TRV9VSUQ8L2I+IC0gUmV0dXJuIFVJRHMgaW5zdGVhZCBvZiBzZXF1ZW5jZSBudW1iZXJzPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHNlYXJjaF9jcml0ZXJpYSBbb3B0aW9uYWxdCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkY2hhcnNldCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXJyYXkgb2YgbWVzc2FnZSBudW1iZXJzIHNvcnRlZCBieSB0aGUgZ2l2ZW4KICogcGFyYW1ldGVycy4KICovCmZ1bmN0aW9uIGltYXBfc29ydCgKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXAsCiAgICBpbnQgJGNyaXRlcmlhLAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnaW50JyldICRyZXZlcnNlLAogICAgaW50ICRmbGFncyA9IDAsCiAgICA/c3RyaW5nICRzZWFyY2hfY3JpdGVyaWEgPSBudWxsLAogICAgP3N0cmluZyAkY2hhcnNldCA9IG51bGwKKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIFVJRCBmb3IgdGhlIGdpdmVuIG1lc3NhZ2Ugc2VxdWVuY2UgbnVtYmVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC11aWQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gaW50ICRtZXNzYWdlX251bSA8cD4KICogVGhlIG1lc3NhZ2UgbnVtYmVyLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIFRoZSBVSUQgb2YgdGhlIGdpdmVuIG1lc3NhZ2UuCiAqLwpmdW5jdGlvbiBpbWFwX3VpZCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBpbnQgJG1lc3NhZ2VfbnVtKTogaW50fGZhbHNlIHt9CgovKioKICogR2V0cyB0aGUgbWVzc2FnZSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoZSBnaXZlbiBVSUQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLW1zZ25vLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXAKICogQHBhcmFtIGludCAkbWVzc2FnZV91aWQgPHA+CiAqIFRoZSBtZXNzYWdlIFVJRAogKiA8L3A+CiAqIEByZXR1cm4gaW50IHRoZSBtZXNzYWdlIHNlcXVlbmNlIG51bWJlciBmb3IgdGhlIGdpdmVuCiAqIDxpPnVpZDwvaT4uCiAqLwpmdW5jdGlvbiBpbWFwX21zZ25vKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXAsIGludCAkbWVzc2FnZV91aWQpOiBpbnQge30KCi8qKgogKiBSZWFkIHRoZSBsaXN0IG9mIG1haWxib3hlcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtbGlzdC5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBzdHJpbmcgJHJlZmVyZW5jZSA8cD4KICogPGk+cmVmPC9pPiBzaG91bGQgbm9ybWFsbHkgYmUganVzdCB0aGUgc2VydmVyCiAqIHNwZWNpZmljYXRpb24gYXMgZGVzY3JpYmVkIGluIDxiPmltYXBfb3BlbjwvYj4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiBTcGVjaWZpZXMgd2hlcmUgaW4gdGhlIG1haWxib3ggaGllcmFyY2h5CiAqIHRvIHN0YXJ0IHNlYXJjaGluZy48L3A+VGhlcmUgYXJlIHR3byBzcGVjaWFsIGNoYXJhY3RlcnMgeW91IGNhbgogKiBwYXNzIGFzIHBhcnQgb2YgdGhlIDxpPnBhdHRlcm48L2k+OgogKiAmI3gwMDAyNzsqJiN4MDAwMjc7IGFuZCAmI3gwMDAyNzsmIzM3OyYjeDAwMDI3Oy4KICogJiN4MDAwMjc7KiYjeDAwMDI3OyBtZWFucyB0byByZXR1cm4gYWxsIG1haWxib3hlcy4gSWYgeW91IHBhc3MKICogPGk+cGF0dGVybjwvaT4gYXMgJiN4MDAwMjc7KiYjeDAwMDI3OywgeW91IHdpbGwKICogZ2V0IGEgbGlzdCBvZiB0aGUgZW50aXJlIG1haWxib3ggaGllcmFyY2h5LgogKiAmI3gwMDAyNzsmIzM3OyYjeDAwMDI3OwogKiBtZWFucyB0byByZXR1cm4gdGhlIGN1cnJlbnQgbGV2ZWwgb25seS4KICogJiN4MDAwMjc7JiMzNzsmI3gwMDAyNzsgYXMgdGhlIDxpPnBhdHRlcm48L2k+CiAqIHBhcmFtZXRlciB3aWxsIHJldHVybiBvbmx5IHRoZSB0b3AgbGV2ZWwKICogbWFpbGJveGVzOyAmI3gwMDAyNzt+L21haWwvJiMzNzsmI3gwMDAyNzsgb24gVVdfSU1BUEQgd2lsbCByZXR1cm4gZXZlcnkgbWFpbGJveCBpbiB0aGUgfi9tYWlsIGRpcmVjdG9yeSwgYnV0IG5vbmUgaW4gc3ViZm9sZGVycyBvZiB0aGF0IGRpcmVjdG9yeS48L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgdGhlIG1haWxib3hlcy4KICovCmZ1bmN0aW9uIGltYXBfbGlzdCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBzdHJpbmcgJHJlZmVyZW5jZSwgc3RyaW5nICRwYXR0ZXJuKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBMaXN0IGFsbCB0aGUgc3Vic2NyaWJlZCBtYWlsYm94ZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWxzdWIucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRyZWZlcmVuY2UgPHA+CiAqIDxpPnJlZjwvaT4gc2hvdWxkIG5vcm1hbGx5IGJlIGp1c3QgdGhlIHNlcnZlcgogKiBzcGVjaWZpY2F0aW9uIGFzIGRlc2NyaWJlZCBpbiA8Yj5pbWFwX29wZW48L2I+CiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiBTcGVjaWZpZXMgd2hlcmUgaW4gdGhlIG1haWxib3ggaGllcmFyY2h5CiAqIHRvIHN0YXJ0IHNlYXJjaGluZy48L3A+VGhlcmUgYXJlIHR3byBzcGVjaWFsIGNoYXJhY3RlcnMgeW91IGNhbgogKiBwYXNzIGFzIHBhcnQgb2YgdGhlIDxpPnBhdHRlcm48L2k+OgogKiAmI3gwMDAyNzsqJiN4MDAwMjc7IGFuZCAmI3gwMDAyNzsmIzM3OyYjeDAwMDI3Oy4KICogJiN4MDAwMjc7KiYjeDAwMDI3OyBtZWFucyB0byByZXR1cm4gYWxsIG1haWxib3hlcy4gSWYgeW91IHBhc3MKICogPGk+cGF0dGVybjwvaT4gYXMgJiN4MDAwMjc7KiYjeDAwMDI3OywgeW91IHdpbGwKICogZ2V0IGEgbGlzdCBvZiB0aGUgZW50aXJlIG1haWxib3ggaGllcmFyY2h5LgogKiAmI3gwMDAyNzsmIzM3OyYjeDAwMDI3OwogKiBtZWFucyB0byByZXR1cm4gdGhlIGN1cnJlbnQgbGV2ZWwgb25seS4KICogJiN4MDAwMjc7JiMzNzsmI3gwMDAyNzsgYXMgdGhlIDxpPnBhdHRlcm48L2k+CiAqIHBhcmFtZXRlciB3aWxsIHJldHVybiBvbmx5IHRoZSB0b3AgbGV2ZWwKICogbWFpbGJveGVzOyAmI3gwMDAyNzt+L21haWwvJiMzNzsmI3gwMDAyNzsgb24gVVdfSU1BUEQgd2lsbCByZXR1cm4gZXZlcnkgbWFpbGJveCBpbiB0aGUgfi9tYWlsIGRpcmVjdG9yeSwgYnV0IG5vbmUgaW4gc3ViZm9sZGVycyBvZiB0aGF0IGRpcmVjdG9yeS48L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXJyYXkgb2YgYWxsIHRoZSBzdWJzY3JpYmVkIG1haWxib3hlcy4KICovCmZ1bmN0aW9uIGltYXBfbHN1YigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBzdHJpbmcgJHJlZmVyZW5jZSwgc3RyaW5nICRwYXR0ZXJuKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBSZWFkIGFuIG92ZXJ2aWV3IG9mIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgaGVhZGVycyBvZiB0aGUgZ2l2ZW4gbWVzc2FnZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtZmV0Y2gtb3ZlcnZpZXcucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRzZXF1ZW5jZSA8cD4KICogQSBtZXNzYWdlIHNlcXVlbmNlIGRlc2NyaXB0aW9uLiBZb3UgY2FuIGVudW1lcmF0ZSBkZXNpcmVkIG1lc3NhZ2VzCiAqIHdpdGggdGhlIFgsWSBzeW50YXgsIG9yIHJldHJpZXZlIGFsbCBtZXNzYWdlcwogKiB3aXRoaW4gYW4gaW50ZXJ2YWwgd2l0aCB0aGUgWDpZIHN5bnRheAogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIDxpPnNlcXVlbmNlPC9pPiB3aWxsIGNvbnRhaW4gYSBzZXF1ZW5jZSBvZiBtZXNzYWdlCiAqIGluZGljZXMgb3IgVUlEcywgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IHRvCiAqIDxiPkZUX1VJRDwvYj4uCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBhbiBhcnJheSBvZiBvYmplY3RzIGRlc2NyaWJpbmcgb25lIG1lc3NhZ2UgaGVhZGVyIGVhY2guCiAqIFRoZSBvYmplY3Qgd2lsbCBvbmx5IGRlZmluZSBhIHByb3BlcnR5IGlmIGl0IGV4aXN0cy4gVGhlIHBvc3NpYmxlCiAqIHByb3BlcnRpZXMgYXJlOgogKiBzdWJqZWN0IC0gdGhlIG1lc3NhZ2VzIHN1YmplY3QKICogZnJvbSAtIHdobyBzZW50IGl0CiAqIHRvIC0gcmVjaXBpZW50CiAqIGRhdGUgLSB3aGVuIHdhcyBpdCBzZW50CiAqIG1lc3NhZ2VfaWQgLSBNZXNzYWdlLUlECiAqIHJlZmVyZW5jZXMgLSBpcyBhIHJlZmVyZW5jZSB0byB0aGlzIG1lc3NhZ2UgaWQKICogaW5fcmVwbHlfdG8gLSBpcyBhIHJlcGx5IHRvIHRoaXMgbWVzc2FnZSBpZAogKiBzaXplIC0gc2l6ZSBpbiBieXRlcwogKiB1aWQgLSBVSUQgdGhlIG1lc3NhZ2UgaGFzIGluIHRoZSBtYWlsYm94CiAqIG1zZ25vIC0gbWVzc2FnZSBzZXF1ZW5jZSBudW1iZXIgaW4gdGhlIG1haWxib3gKICogcmVjZW50IC0gdGhpcyBtZXNzYWdlIGlzIGZsYWdnZWQgYXMgcmVjZW50CiAqIGZsYWdnZWQgLSB0aGlzIG1lc3NhZ2UgaXMgZmxhZ2dlZAogKiBhbnN3ZXJlZCAtIHRoaXMgbWVzc2FnZSBpcyBmbGFnZ2VkIGFzIGFuc3dlcmVkCiAqIGRlbGV0ZWQgLSB0aGlzIG1lc3NhZ2UgaXMgZmxhZ2dlZCBmb3IgZGVsZXRpb24KICogc2VlbiAtIHRoaXMgbWVzc2FnZSBpcyBmbGFnZ2VkIGFzIGFscmVhZHkgcmVhZAogKiBkcmFmdCAtIHRoaXMgbWVzc2FnZSBpcyBmbGFnZ2VkIGFzIGJlaW5nIGEgZHJhZnQKICovCmZ1bmN0aW9uIGltYXBfZmV0Y2hfb3ZlcnZpZXcoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRzZXF1ZW5jZSwgaW50ICRmbGFncyA9IDApOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIFJldHVybnMgYWxsIElNQVAgYWxlcnQgbWVzc2FnZXMgdGhhdCBoYXZlIG9jY3VycmVkCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1hbGVydHMucGhwCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXJyYXkgb2YgYWxsIG9mIHRoZSBJTUFQIGFsZXJ0IG1lc3NhZ2VzIGdlbmVyYXRlZCBvciA8Yj5GQUxTRTwvYj4gaWYKICogbm8gYWxlcnQgbWVzc2FnZXMgYXJlIGF2YWlsYWJsZS4KICovCmZ1bmN0aW9uIGltYXBfYWxlcnRzKCk6IGFycmF5fGZhbHNlIHt9CgovKioKICogUmV0dXJucyBhbGwgb2YgdGhlIElNQVAgZXJyb3JzIHRoYXQgaGF2ZSBvY2N1cnJlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtZXJyb3JzLnBocAogKiBAcmV0dXJuIGFycmF5fGZhbHNlIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgb2YgdGhlIElNQVAgZXJyb3IgbWVzc2FnZXMKICogZ2VuZXJhdGVkIHNpbmNlIHRoZSBsYXN0IDxiPmltYXBfZXJyb3JzPC9iPiBjYWxsLAogKiBvciB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYWdlLiBSZXR1cm5zIDxiPkZBTFNFPC9iPiBpZiBubyBlcnJvciBtZXNzYWdlcyBhcmUKICogYXZhaWxhYmxlLgogKi8KZnVuY3Rpb24gaW1hcF9lcnJvcnMoKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBHZXRzIHRoZSBsYXN0IElNQVAgZXJyb3IgdGhhdCBvY2N1cnJlZCBkdXJpbmcgdGhpcyBwYWdlIHJlcXVlc3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWxhc3QtZXJyb3IucGhwCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBmdWxsIHRleHQgb2YgdGhlIGxhc3QgSU1BUCBlcnJvciBtZXNzYWdlIHRoYXQgb2NjdXJyZWQgb24gdGhlCiAqIGN1cnJlbnQgcGFnZS4gUmV0dXJucyA8Yj5GQUxTRTwvYj4gaWYgbm8gZXJyb3IgbWVzc2FnZXMgYXJlIGF2YWlsYWJsZS4KICovCmZ1bmN0aW9uIGltYXBfbGFzdF9lcnJvcigpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgb2YgbWVzc2FnZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHNlYXJjaCBjcml0ZXJpYQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtc2VhcmNoLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXAKICogQHBhcmFtIHN0cmluZyAkY3JpdGVyaWEgPHA+CiAqIEEgc3RyaW5nLCBkZWxpbWl0ZWQgYnkgc3BhY2VzLCBpbiB3aGljaCB0aGUgZm9sbG93aW5nIGtleXdvcmRzIGFyZQogKiBhbGxvd2VkLiBBbnkgbXVsdGktd29yZCBhcmd1bWVudHMgKGUuZy4KICogRlJPTSAiam9leSBzbWl0aCIpIG11c3QgYmUgcXVvdGVkLiBSZXN1bHRzIHdpbGwgbWF0Y2gKICogYWxsIDxpPmNyaXRlcmlhPC9pPiBlbnRyaWVzLgogKiBBTEwgLSByZXR1cm4gYWxsIG1lc3NhZ2VzIG1hdGNoaW5nIHRoZSByZXN0IG9mIHRoZSBjcml0ZXJpYTwvcD4KICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICogVmFsaWQgdmFsdWVzIGZvciA8aT5vcHRpb25zPC9pPiBhcmUKICogPGI+U0VfVUlEPC9iPiwgd2hpY2ggY2F1c2VzIHRoZSByZXR1cm5lZCBhcnJheSB0bwogKiBjb250YWluIFVJRHMgaW5zdGVhZCBvZiBtZXNzYWdlcyBzZXF1ZW5jZSBudW1iZXJzLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGNoYXJzZXQKICogQHJldHVybiBhcnJheXxmYWxzZSBhbiBhcnJheSBvZiBtZXNzYWdlIG51bWJlcnMgb3IgVUlEcy4KICogPHA+CiAqIFJldHVybiA8Yj5GQUxTRTwvYj4gaWYgaXQgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgc2VhcmNoCiAqIDxpPmNyaXRlcmlhPC9pPiBvciBubyBtZXNzYWdlcyBoYXZlIGJlZW4gZm91bmQuCiAqIDwvcD4KICovCmZ1bmN0aW9uIGltYXBfc2VhcmNoKAogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwKICAgIHN0cmluZyAkY3JpdGVyaWEsCiAgICBpbnQgJGZsYWdzID0gU0VfRlJFRSwKICAgIHN0cmluZyAkY2hhcnNldCA9ICIiCik6IGFycmF5fGZhbHNlIHt9CgovKioKICogRGVjb2RlcyBhIG1vZGlmaWVkIFVURi03IGVuY29kZWQgc3RyaW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC11dGY3LWRlY29kZS5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nIDxwPgogKiBBIG1vZGlmaWVkIFVURi03IGVuY29kaW5nIHN0cmluZywgYXMgZGVmaW5lZCBpbiBSRkMgMjA2MCwgc2VjdGlvbiA1LjEuMyAob3JpZ2luYWwgVVRGLTcKICogd2FzIGRlZmluZWQgaW4gUkZDMTY0MikuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgYSBzdHJpbmcgdGhhdCBpcyBlbmNvZGVkIGluIElTTy04ODU5LTEgYW5kIGNvbnNpc3RzIG9mIHRoZSBzYW1lCiAqIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgaW4gPGk+dGV4dDwvaT4sIG9yIDxiPkZBTFNFPC9iPgogKiBpZiA8aT50ZXh0PC9pPiBjb250YWlucyBpbnZhbGlkIG1vZGlmaWVkIFVURi03IHNlcXVlbmNlCiAqIG9yIDxpPnRleHQ8L2k+IGNvbnRhaW5zIGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHBhcnQgb2YKICogSVNPLTg4NTktMSBjaGFyYWN0ZXIgc2V0LgogKi8KZnVuY3Rpb24gaW1hcF91dGY3X2RlY29kZShzdHJpbmcgJHN0cmluZyk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIENvbnZlcnRzIElTTy04ODU5LTEgc3RyaW5nIHRvIG1vZGlmaWVkIFVURi03IHRleHQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLXV0ZjctZW5jb2RlLnBocAogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgPHA+CiAqIEFuIElTTy04ODU5LTEgc3RyaW5nLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIDxpPmRhdGE8L2k+IGVuY29kZWQgd2l0aCB0aGUgbW9kaWZpZWQgVVRGLTcKICogZW5jb2RpbmcgYXMgZGVmaW5lZCBpbiBSRkMgMjA2MCwKICogc2VjdGlvbiA1LjEuMyAob3JpZ2luYWwgVVRGLTcgd2FzIGRlZmluZWQgaW4gUkZDMTY0MikuCiAqLwpmdW5jdGlvbiBpbWFwX3V0ZjdfZW5jb2RlKHN0cmluZyAkc3RyaW5nKTogc3RyaW5nIHt9CgovKioKICogRGVjb2RlIE1JTUUgaGVhZGVyIGVsZW1lbnRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1taW1lLWhlYWRlci1kZWNvZGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyA8cD4KICogVGhlIE1JTUUgdGV4dAogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgVGhlIGRlY29kZWQgZWxlbWVudHMgYXJlIHJldHVybmVkIGluIGFuIGFycmF5IG9mIG9iamVjdHMsIHdoZXJlIGVhY2gKICogb2JqZWN0IGhhcyB0d28gcHJvcGVydGllcywgY2hhcnNldCBhbmQKICogdGV4dC4KICogPC9wPgogKiA8cD4KICogSWYgdGhlIGVsZW1lbnQgaGFzbid0IGJlZW4gZW5jb2RlZCwgYW5kIGluIG90aGVyIHdvcmRzIGlzIGluCiAqIHBsYWluIFVTLUFTQ0lJLCB0aGUgY2hhcnNldCBwcm9wZXJ0eSBvZiB0aGF0IGVsZW1lbnQgaXMKICogc2V0IHRvIGRlZmF1bHQuCiAqLwpmdW5jdGlvbiBpbWFwX21pbWVfaGVhZGVyX2RlY29kZShzdHJpbmcgJHN0cmluZyk6IGFycmF5fGZhbHNlIHt9CgovKioKICogUmV0dXJucyBhIHRyZWUgb2YgdGhyZWFkZWQgbWVzc2FnZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtdGhyZWFkLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXAKICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXQogKiBAcmV0dXJuIGFycmF5fGZhbHNlIDxiPmltYXBfdGhyZWFkPC9iPiByZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcKICogYSB0cmVlIG9mIG1lc3NhZ2VzIHRocmVhZGVkIGJ5IFJFRkVSRU5DRVMsIG9yIDxiPkZBTFNFPC9iPgogKiBvbiBlcnJvci4KICogPC9wPgogKiA8cD4KICogRXZlcnkgbWVzc2FnZSBpbiB0aGUgY3VycmVudCBtYWlsYm94IHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkgdGhyZWUgZW50cmllcwogKiBpbiB0aGUgcmVzdWx0aW5nIGFycmF5OgogKiA8cD4KICogJHRocmVhZFsiWFgubnVtIl0gLSBjdXJyZW50IG1lc3NhZ2UgbnVtYmVyCiAqIDwvcD4KICogPHA+CiAqICR0aHJlYWRbIlhYLm5leHQiXQogKiA8L3A+CiAqIDxwPgogKiAkdGhyZWFkWyJYWC5icmFuY2giXQogKiA8L3A+CiAqLwpmdW5jdGlvbiBpbWFwX3RocmVhZCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBpbnQgJGZsYWdzID0gU0VfRlJFRSk6IGFycmF5fGZhbHNlIHt9CgovKioKICogU2V0IG9yIGZldGNoIGltYXAgdGltZW91dAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtdGltZW91dC5waHAKICogQHBhcmFtIGludCAkdGltZW91dF90eXBlIDxwPgogKiBPbmUgb2YgdGhlIGZvbGxvd2luZzoKICogPGI+SU1BUF9PUEVOVElNRU9VVDwvYj4sCiAqIDxiPklNQVBfUkVBRFRJTUVPVVQ8L2I+LAogKiA8Yj5JTUFQX1dSSVRFVElNRU9VVDwvYj4sIG9yCiAqIDxiPklNQVBfQ0xPU0VUSU1FT1VUPC9iPi4KICogPC9wPgogKiBAcGFyYW0gaW50ICR0aW1lb3V0IFtvcHRpb25hbF0gPHA+CiAqIFRoZSB0aW1lb3V0LCBpbiBzZWNvbmRzLgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGJvb2wgSWYgdGhlIDxpPnRpbWVvdXQ8L2k+IHBhcmFtZXRlciBpcyBzZXQsIHRoaXMgZnVuY3Rpb24KICogcmV0dXJucyA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIGFuZCA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogPC9wPgogKiA8cD4KICogSWYgPGk+dGltZW91dDwvaT4gaXMgbm90IHByb3ZpZGVkIG9yIGV2YWx1YXRlcyB0byAtMSwKICogdGhlIGN1cnJlbnQgdGltZW91dCB2YWx1ZSBvZiA8aT50aW1lb3V0X3R5cGU8L2k+IGlzCiAqIHJldHVybmVkIGFzIGFuIGludGVnZXIuCiAqLwpmdW5jdGlvbiBpbWFwX3RpbWVvdXQoaW50ICR0aW1lb3V0X3R5cGUsIGludCAkdGltZW91dCA9IC0xKTogaW50fGJvb2wge30KCi8qKgogKiBSZXRyaWV2ZSB0aGUgcXVvdGEgbGV2ZWwgc2V0dGluZ3MsIGFuZCB1c2FnZSBzdGF0aWNzIHBlciBtYWlsYm94CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1nZXQtcXVvdGEucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRxdW90YV9yb290IDxwPgogKiA8aT5xdW90YV9yb290PC9pPiBzaG91bGQgbm9ybWFsbHkgYmUgaW4gdGhlIGZvcm0gb2YKICogdXNlci5uYW1lIHdoZXJlIG5hbWUgaXMgdGhlIG1haWxib3ggeW91IHdpc2ggdG8KICogcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBhbiBhcnJheSB3aXRoIGludGVnZXIgdmFsdWVzIGxpbWl0IGFuZCB1c2FnZSBmb3IgdGhlIGdpdmVuCiAqIG1haWxib3guIFRoZSB2YWx1ZSBvZiBsaW1pdCByZXByZXNlbnRzIHRoZSB0b3RhbCBhbW91bnQgb2Ygc3BhY2UKICogYWxsb3dlZCBmb3IgdGhpcyBtYWlsYm94LiBUaGUgdXNhZ2UgdmFsdWUgcmVwcmVzZW50cyB0aGUgbWFpbGJveGVzCiAqIGN1cnJlbnQgbGV2ZWwgb2YgY2FwYWNpdHkuIFdpbGwgcmV0dXJuIDxiPkZBTFNFPC9iPiBpbiB0aGUgY2FzZSBvZiBmYWlsdXJlLgogKiA8L3A+CiAqIDxwPgogKiBBcyBvZiBQSFAgNC4zLCB0aGUgZnVuY3Rpb24gbW9yZSBwcm9wZXJseSByZWZsZWN0cyB0aGUKICogZnVuY3Rpb25hbGl0eSBhcyBkaWN0YXRlZCBieSB0aGUgUkZDMjA4Ny4KICogVGhlIGFycmF5IHJldHVybiB2YWx1ZSBoYXMgY2hhbmdlZCB0byBzdXBwb3J0IGFuIHVubGltaXRlZCBudW1iZXIgb2YgcmV0dXJuZWQKICogcmVzb3VyY2VzIChpLmUuIG1lc3NhZ2VzLCBvciBzdWItZm9sZGVycykgd2l0aCBlYWNoIG5hbWVkIHJlc291cmNlIHJlY2VpdmluZwogKiBhbiBpbmRpdmlkdWFsIGFycmF5IGtleS4gRWFjaCBrZXkgdmFsdWUgdGhlbiBjb250YWlucyBhbiBhbm90aGVyIGFycmF5IHdpdGgKICogdGhlIHVzYWdlIGFuZCBsaW1pdCB2YWx1ZXMgd2l0aGluIGl0LgogKiA8L3A+CiAqIDxwPgogKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucywgdGhlIG9yaWdpbmFsIGFjY2VzcyBtZXRob2RzIGFyZQogKiBzdGlsbCBhdmFpbGFibGUgZm9yIHVzZSwgYWx0aG91Z2ggaXQgaXMgc3VnZ2VzdGVkIHRvIHVwZGF0ZS4KICovCiNbQXJyYXlTaGFwZShbInVzYWdlIiA9PiAiaW50IiwgImxpbWl0IiA9PiAiaW50Il0pXQpmdW5jdGlvbiBpbWFwX2dldF9xdW90YSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBzdHJpbmcgJHF1b3RhX3Jvb3QpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIFJldHJpZXZlIHRoZSBxdW90YSBzZXR0aW5ncyBwZXIgdXNlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtZ2V0LXF1b3Rhcm9vdC5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBzdHJpbmcgJG1haWxib3ggPHA+CiAqIDxpPnF1b3RhX3Jvb3Q8L2k+IHNob3VsZCBub3JtYWxseSBiZSBpbiB0aGUgZm9ybSBvZgogKiB3aGljaCBtYWlsYm94IChpLmUuIElOQk9YKS4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIGFuIGFycmF5IG9mIGludGVnZXIgdmFsdWVzIHBlcnRhaW5pbmcgdG8gdGhlIHNwZWNpZmllZCB1c2VyCiAqIG1haWxib3guIEFsbCB2YWx1ZXMgY29udGFpbiBhIGtleSBiYXNlZCB1cG9uIHRoZSByZXNvdXJjZSBuYW1lLCBhbmQgYQogKiBjb3JyZXNwb25kaW5nIGFycmF5IHdpdGggdGhlIHVzYWdlIGFuZCBsaW1pdCB2YWx1ZXMgd2l0aGluLgogKiA8L3A+CiAqIDxwPgogKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDxiPkZBTFNFPC9iPiBpbiB0aGUgY2FzZSBvZiBjYWxsIGZhaWx1cmUsIGFuZCBhbgogKiBhcnJheSBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29ubmVjdGlvbiB1cG9uIGFuIHVuLXBhcnNhYmxlIHJlc3BvbnNlCiAqIGZyb20gdGhlIHNlcnZlci4KICovCmZ1bmN0aW9uIGltYXBfZ2V0X3F1b3Rhcm9vdCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBzdHJpbmcgJG1haWxib3gpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIFNldHMgYSBxdW90YSBmb3IgYSBnaXZlbiBtYWlsYm94CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1zZXQtcXVvdGEucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRxdW90YV9yb290IDxwPgogKiBUaGUgbWFpbGJveCB0byBoYXZlIGEgcXVvdGEgc2V0LiBUaGlzIHNob3VsZCBmb2xsb3cgdGhlIElNQVAgc3RhbmRhcmQKICogZm9ybWF0IGZvciBhIG1haWxib3g6IHVzZXIubmFtZS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtYWlsYm94X3NpemUgPHA+CiAqIFRoZSBtYXhpbXVtIHNpemUgKGluIEtCKSBmb3IgdGhlIDxpPnF1b3RhX3Jvb3Q8L2k+CiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpbWFwX3NldF9xdW90YSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBzdHJpbmcgJHF1b3RhX3Jvb3QsIGludCAkbWFpbGJveF9zaXplKTogYm9vbCB7fQoKLyoqCiAqIFNldHMgdGhlIEFDTCBmb3IgYSBnaXZlbiBtYWlsYm94CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1zZXRhY2wucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IDxwPgogKiBUaGUgbWFpbGJveCBuYW1lLCBzZWUgPGI+aW1hcF9vcGVuPC9iPiBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHVzZXJfaWQgPHA+CiAqIFRoZSB1c2VyIHRvIGdpdmUgdGhlIHJpZ2h0cyB0by4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRyaWdodHMgPHA+CiAqIFRoZSByaWdodHMgdG8gZ2l2ZSB0byB0aGUgdXNlci4gUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgd2lsbCBkZWxldGUKICogYWNsLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gaW1hcF9zZXRhY2woI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRtYWlsYm94LCBzdHJpbmcgJHVzZXJfaWQsIHN0cmluZyAkcmlnaHRzKTogYm9vbCB7fQoKLyoqCiAqIEdldHMgdGhlIEFDTCBmb3IgYSBnaXZlbiBtYWlsYm94CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1nZXRhY2wucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRtYWlsYm94IDxwPgogKiBUaGUgbWFpbGJveCBuYW1lLCBzZWUgPGI+aW1hcF9vcGVuPC9iPiBmb3IgbW9yZQogKiBpbmZvcm1hdGlvbgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgImZvbGRlciIgPT4gImFjbCIgcGFpcnMuCiAqLwpmdW5jdGlvbiBpbWFwX2dldGFjbCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBzdHJpbmcgJG1haWxib3gpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEBwYXJhbSAkc3RyZWFtX2lkCiAqIEBwYXJhbSAkbWFpbGJveAogKi8KZnVuY3Rpb24gaW1hcF9teXJpZ2h0cygkc3RyZWFtX2lkLCAkbWFpbGJveCkge30KCi8qKgogKiBAcGFyYW0gJHN0cmVhbV9pZAogKiBAcGFyYW0gJG1haWxib3gKICogQHBhcmFtICRlbnRyeQogKiBAcGFyYW0gJGF0dHIKICogQHBhcmFtICR2YWx1ZQogKi8KZnVuY3Rpb24gaW1hcF9zZXRhbm5vdGF0aW9uKCRzdHJlYW1faWQsICRtYWlsYm94LCAkZW50cnksICRhdHRyLCAkdmFsdWUpIHt9CgovKioKICogQHBhcmFtICRzdHJlYW1faWQKICogQHBhcmFtICRtYWlsYm94CiAqIEBwYXJhbSAkZW50cnkKICogQHBhcmFtICRhdHRyCiAqLwpmdW5jdGlvbiBpbWFwX2dldGFubm90YXRpb24oJHN0cmVhbV9pZCwgJG1haWxib3gsICRlbnRyeSwgJGF0dHIpIHt9CgovKioKICogU2VuZCBhbiBlbWFpbCBtZXNzYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1tYWlsLnBocAogKiBAcGFyYW0gc3RyaW5nICR0byA8cD4KICogVGhlIHJlY2VpdmVyCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkc3ViamVjdCA8cD4KICogVGhlIG1haWwgc3ViamVjdAogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgPHA+CiAqIFRoZSBtYWlsIGJvZHksIHNlZSA8Yj5pbWFwX21haWxfY29tcG9zZTwvYj4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRhZGRpdGlvbmFsX2hlYWRlcnMgW29wdGlvbmFsXSA8cD4KICogQXMgc3RyaW5nIHdpdGggYWRkaXRpb25hbCBoZWFkZXJzIHRvIGJlIHNldCBvbiB0aGUgbWFpbAogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGNjIFtvcHRpb25hbF0KICogQHBhcmFtIHN0cmluZyAkYmNjIFtvcHRpb25hbF0gPHA+CiAqIFRoZSByZWNlaXZlcnMgc3BlY2lmaWVkIGluIDxpPmJjYzwvaT4gd2lsbCBnZXQgdGhlCiAqIG1haWwsIGJ1dCBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgaGVhZGVycy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRyZXR1cm5fcGF0aCBbb3B0aW9uYWxdIDxwPgogKiBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gc3BlY2lmeSByZXR1cm4gcGF0aCB1cG9uIG1haWwgZGVsaXZlcnkgZmFpbHVyZS4KICogVGhpcyBpcyB1c2VmdWwgd2hlbiB1c2luZyBQSFAgYXMgYSBtYWlsIGNsaWVudCBmb3IgbXVsdGlwbGUgdXNlcnMuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBpbWFwX21haWwoc3RyaW5nICR0bywgc3RyaW5nICRzdWJqZWN0LCBzdHJpbmcgJG1lc3NhZ2UsID9zdHJpbmcgJGFkZGl0aW9uYWxfaGVhZGVycyA9IG51bGwsID9zdHJpbmcgJGNjID0gbnVsbCwgP3N0cmluZyAkYmNjID0gbnVsbCwgP3N0cmluZyAkcmV0dXJuX3BhdGggPSBudWxsKTogYm9vbCB7fQoKLyoqCiAqIEFsaWFzIG9mIDxiPmltYXBfaGVhZGVyaW5mbzwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWhlYWRlci5waHAKICogQHBhcmFtIHJlc291cmNlICRzdHJlYW1faWQgQW4gSU1BUCBzdHJlYW0gcmV0dXJuZWQgYnkgaW1hcF9vcGVuKCkuCiAqIEBwYXJhbSBpbnQgJG1zZ19ubyBUaGUgbWVzc2FnZSBudW1iZXIKICogQHBhcmFtIGludCAkZnJvbV9sZW5ndGggW29wdGlvbmFsXSBOdW1iZXIgb2YgY2hhcmFjdGVycyBmb3IgdGhlIGZldGNoZnJvbSBwcm9wZXJ0eS4gTXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KICogQHBhcmFtIGludCAkc3ViamVjdF9sZW5ndGggW29wdGlvbmFsXSBOdW1iZXIgb2YgY2hhcmFjdGVycyBmb3IgdGhlIGZldGNoc3ViamVjdCBwcm9wZXJ0eSBNdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgogKiBAcGFyYW0gJGRlZmF1bHRfaG9zdCBbb3B0aW9uYWxdCiAqIEByZXR1cm4gb2JqZWN0IFJldHVybnMgdGhlIGluZm9ybWF0aW9uIGluIGFuIG9iamVjdCB3aXRoIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogKiA8ZGw+CiAqIDxkdD50b2FkZHJlc3M8L2R0PjxkZD5mdWxsIHRvOiBsaW5lLCB1cCB0byAxMDI0IGNoYXJhY3RlcnM8L2RkPgogKiA8ZHQ+dG88L2R0PjxkZD5hbiBhcnJheSBvZiBvYmplY3RzIGZyb20gdGhlIFRvOiBsaW5lLCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogcGVyc29uYWwsIGFkbCwgbWFpbGJveCwgYW5kIGhvc3Q8L2RkPgogKiA8ZHQ+ZnJvbWFkZHJlc3M8L2R0PjxkZD5mdWxsIGZyb206IGxpbmUsIHVwIHRvIDEwMjQgY2hhcmFjdGVyczwvZGQ+CiAqIDxkdD5mcm9tPC9kdD48ZGQ+YW4gYXJyYXkgb2Ygb2JqZWN0cyBmcm9tIHRoZSBGcm9tOiBsaW5lLCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogcGVyc29uYWwsIGFkbCwgbWFpbGJveCwgYW5kIGhvc3Q8L2RkPgogKiA8ZHQ+Y2NhZGRyZXNzPC9kdD48ZGQ+ZnVsbCBjYzogbGluZSwgdXAgdG8gMTAyNCBjaGFyYWN0ZXJzPC9kZD4KICogPGR0PmNjPC9kdD48ZGQ+YW4gYXJyYXkgb2Ygb2JqZWN0cyBmcm9tIHRoZSBDYzogbGluZSwgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6IHBlcnNvbmFsLCBhZGwsIG1haWxib3gsIGFuZCBob3N0PC9kZD4KICogPGR0PmJjY2FkZHJlc3M8L2R0PjxkZD5mdWxsIGJjYzogbGluZSwgdXAgdG8gMTAyNCBjaGFyYWN0ZXJzPC9kZD4KICogPGR0PmJjYzwvZHQ+PGRkPmFuIGFycmF5IG9mIG9iamVjdHMgZnJvbSB0aGUgQmNjOiBsaW5lLCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogcGVyc29uYWwsIGFkbCwgbWFpbGJveCwgYW5kIGhvc3Q8L2RkPgogKiA8ZHQ+cmVwbHlfdG9hZGRyZXNzPC9kdD48ZGQ+ZnVsbCBSZXBseS1UbzogbGluZSwgdXAgdG8gMTAyNCBjaGFyYWN0ZXJzPC9kZD4KICogPGR0PnJlcGx5X3RvPC9kdD48ZGQ+YW4gYXJyYXkgb2Ygb2JqZWN0cyBmcm9tIHRoZSBSZXBseS1UbzogbGluZSwgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6IHBlcnNvbmFsLCBhZGwsIG1haWxib3gsIGFuZCBob3N0PC9kZD4KICogPGR0PnNlbmRlcmFkZHJlc3M8L2R0PjxkZD5mdWxsIHNlbmRlcjogbGluZSwgdXAgdG8gMTAyNCBjaGFyYWN0ZXJzPC9kZD4KICogPGR0PnNlbmRlcjwvZHQ+PGRkPmFuIGFycmF5IG9mIG9iamVjdHMgZnJvbSB0aGUgU2VuZGVyOiBsaW5lLCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczogcGVyc29uYWwsIGFkbCwgbWFpbGJveCwgYW5kIGhvc3Q8L2RkPgogKiA8ZHQ+cmV0dXJuX3BhdGhhZGRyZXNzPC9kdD48ZGQ+ZnVsbCBSZXR1cm4tUGF0aDogbGluZSwgdXAgdG8gMTAyNCBjaGFyYWN0ZXJzPC9kZD4KICogPGR0PnJldHVybl9wYXRoPC9kdD48ZGQ+YW4gYXJyYXkgb2Ygb2JqZWN0cyBmcm9tIHRoZSBSZXR1cm4tUGF0aDogbGluZSwgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6IHBlcnNvbmFsLCBhZGwsIG1haWxib3gsIGFuZCBob3N0PC9kZD4KICogPGR0PnJlbWFpbCAtPC9kdD4KICogPGR0PmRhdGU8L2R0PjxkZD5UaGUgbWVzc2FnZSBkYXRlIGFzIGZvdW5kIGluIGl0cyBoZWFkZXJzPC9kZD4KICogPGR0PkRhdGU8L2R0PjxkZD5TYW1lIGFzIGRhdGU8L2RkPgogKiA8ZHQ+c3ViamVjdDwvZHQ+PGRkPlRoZSBtZXNzYWdlIHN1YmplY3Q8L2RkPgogKiA8ZHQ+U3ViamVjdDwvZHQ+PGRkPlNhbWUgYSBzdWJqZWN0PC9kZD4KICogPGR0PmluX3JlcGx5X3RvIC08L2R0PgogKiA8ZHQ+bWVzc2FnZV9pZCAtPC9kdD4KICogPGR0Pm5ld3Nncm91cHMgLTwvZHQ+CiAqIDxkdD5mb2xsb3d1cF90byAtPC9kdD4KICogPGR0PnJlZmVyZW5jZXMgLTwvZHQ+CiAqIDxkdD5SZWNlbnQ8L2R0PjxkZD5SIGlmIHJlY2VudCBhbmQgc2VlbiwgTiBpZiByZWNlbnQgYW5kIG5vdCBzZWVuLCAnICcgaWYgbm90IHJlY2VudC48L2RkPgogKiA8ZHQ+VW5zZWVuPC9kdD48ZGQ+VSBpZiBub3Qgc2VlbiBBTkQgbm90IHJlY2VudCwgJyAnIGlmIHNlZW4gT1Igbm90IHNlZW4gYW5kIHJlY2VudDwvZGQ+CiAqIDxkdD5GbGFnZ2VkPC9kdD48ZGQ+RiBpZiBmbGFnZ2VkLCAnICcgaWYgbm90IGZsYWdnZWQ8L2RkPgogKiA8ZHQ+QW5zd2VyZWQ8L2R0PjxkZD5BIGlmIGFuc3dlcmVkLCAnICcgaWYgdW5hbnN3ZXJlZDwvZGQ+CiAqIDxkdD5EZWxldGVkPC9kdD48ZGQ+RCBpZiBkZWxldGVkLCAnICcgaWYgbm90IGRlbGV0ZWQ8L2RkPgogKiA8ZHQ+RHJhZnQ8L2R0PjxkZD5YIGlmIGRyYWZ0LCAnICcgaWYgbm90IGRyYWZ0PC9kZD4KICogPGR0Pk1zZ25vPC9kdD48ZGQ+VGhlIG1lc3NhZ2UgbnVtYmVyPC9kZD4KICogPGR0Pk1haWxEYXRlIC08L2R0PgogKiA8ZHQ+U2l6ZTwvZHQ+PGRkPlRoZSBtZXNzYWdlIHNpemU8L2RkPgogKiA8ZHQ+dWRhdGU8L2R0PjxkZD5tYWlsIG1lc3NhZ2UgZGF0ZSBpbiBVbml4IHRpbWU8L2RkPgogKiA8ZHQ+ZmV0Y2hmcm9tPC9kdD48ZGQ+ZnJvbSBsaW5lIGZvcm1hdHRlZCB0byBmaXQgZnJvbWxlbmd0aCBjaGFyYWN0ZXJzPC9kZD4KICogPGR0PmZldGNoc3ViamVjdDwvZHQ+PGRkPnN1YmplY3QgbGluZSBmb3JtYXR0ZWQgdG8gZml0IHN1YmplY3RsZW5ndGggY2hhcmFjdGVyczwvZGQ+CiAqIDwvZGw+CiAqLwojW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKHRvOiAnNy40JyldCmZ1bmN0aW9uIGltYXBfaGVhZGVyKCRzdHJlYW1faWQsICRtc2dfbm8sICRmcm9tX2xlbmd0aCA9IDAsICRzdWJqZWN0X2xlbmd0aCA9IDAsICRkZWZhdWx0X2hvc3QgPSBudWxsKSB7fQoKLyoqCiAqIEFsaWFzIG9mIDxiPmltYXBfbGlzdDwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWxpc3RtYWlsYm94LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXAKICogQHBhcmFtIHN0cmluZyAkcmVmZXJlbmNlCiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4KICogQHJldHVybiBhcnJheXxmYWxzZQogKi8KZnVuY3Rpb24gaW1hcF9saXN0bWFpbGJveCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBzdHJpbmcgJHJlZmVyZW5jZSwgc3RyaW5nICRwYXR0ZXJuKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBSZWFkIHRoZSBsaXN0IG9mIG1haWxib3hlcywgcmV0dXJuaW5nIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGVhY2ggb25lCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1nZXRtYWlsYm94ZXMucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hcAogKiBAcGFyYW0gc3RyaW5nICRyZWZlcmVuY2UgPHA+CiAqIDxpPnJlZjwvaT4gc2hvdWxkIG5vcm1hbGx5IGJlIGp1c3QgdGhlIHNlcnZlcgogKiBzcGVjaWZpY2F0aW9uIGFzIGRlc2NyaWJlZCBpbiA8Yj5pbWFwX29wZW48L2I+CiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiBTcGVjaWZpZXMgd2hlcmUgaW4gdGhlIG1haWxib3ggaGllcmFyY2h5CiAqIHRvIHN0YXJ0IHNlYXJjaGluZy48L3A+VGhlcmUgYXJlIHR3byBzcGVjaWFsIGNoYXJhY3RlcnMgeW91IGNhbgogKiBwYXNzIGFzIHBhcnQgb2YgdGhlIDxpPnBhdHRlcm48L2k+OgogKiAmI3gwMDAyNzsqJiN4MDAwMjc7IGFuZCAmI3gwMDAyNzsmIzM3OyYjeDAwMDI3Oy4KICogJiN4MDAwMjc7KiYjeDAwMDI3OyBtZWFucyB0byByZXR1cm4gYWxsIG1haWxib3hlcy4gSWYgeW91IHBhc3MKICogPGk+cGF0dGVybjwvaT4gYXMgJiN4MDAwMjc7KiYjeDAwMDI3OywgeW91IHdpbGwKICogZ2V0IGEgbGlzdCBvZiB0aGUgZW50aXJlIG1haWxib3ggaGllcmFyY2h5LgogKiAmI3gwMDAyNzsmIzM3OyYjeDAwMDI3OwogKiBtZWFucyB0byByZXR1cm4gdGhlIGN1cnJlbnQgbGV2ZWwgb25seS4KICogJiN4MDAwMjc7JiMzNzsmI3gwMDAyNzsgYXMgdGhlIDxpPnBhdHRlcm48L2k+CiAqIHBhcmFtZXRlciB3aWxsIHJldHVybiBvbmx5IHRoZSB0b3AgbGV2ZWwKICogbWFpbGJveGVzOyAmI3gwMDAyNzt+L21haWwvJiMzNzsmI3gwMDAyNzsgb24gVVdfSU1BUEQgd2lsbCByZXR1cm4gZXZlcnkgbWFpbGJveCBpbiB0aGUgfi9tYWlsIGRpcmVjdG9yeSwgYnV0IG5vbmUgaW4gc3ViZm9sZGVycyBvZiB0aGF0IGRpcmVjdG9yeS48L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIG1haWxib3ggaW5mb3JtYXRpb24uIEVhY2gKICogb2JqZWN0IGhhcyB0aGUgYXR0cmlidXRlcyA8aT5uYW1lPC9pPiwgc3BlY2lmeWluZwogKiB0aGUgZnVsbCBuYW1lIG9mIHRoZSBtYWlsYm94OyA8aT5kZWxpbWl0ZXI8L2k+LAogKiB3aGljaCBpcyB0aGUgaGllcmFyY2h5IGRlbGltaXRlciBmb3IgdGhlIHBhcnQgb2YgdGhlIGhpZXJhcmNoeQogKiB0aGlzIG1haWxib3ggaXMgaW47IGFuZAogKiA8aT5hdHRyaWJ1dGVzPC9pPi4gPGk+QXR0cmlidXRlczwvaT4KICogaXMgYSBiaXRtYXNrIHRoYXQgY2FuIGJlIHRlc3RlZCBhZ2FpbnN0OgogKiA8cD4KICogPGI+TEFUVF9OT0lORkVSSU9SUzwvYj4gLSBUaGlzIG1haWxib3ggY29udGFpbnMsIGFuZCBtYXkgbm90IGNvbnRhaW4gYW55CiAqICJjaGlsZHJlbiIgKHRoZXJlIGFyZSBubyBtYWlsYm94ZXMgYmVsb3cgdGhpcyBvbmUpLiBDYWxsaW5nCiAqIDxiPmltYXBfY3JlYXRlbWFpbGJveDwvYj4gd2lsbCBub3Qgd29yayBvbiB0aGlzIG1haWxib3guCiAqIDwvcD4KICogPHA+CiAqIDxiPkxBVFRfTk9TRUxFQ1Q8L2I+IC0gVGhpcyBpcyBvbmx5IGEgY29udGFpbmVyLAogKiBub3QgYSBtYWlsYm94IC0geW91IGNhbm5vdCBvcGVuIGl0LgogKiA8L3A+CiAqIDxwPgogKiA8Yj5MQVRUX01BUktFRDwvYj4gLSBUaGlzIG1haWxib3ggaXMgbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgaXQgbWF5CiAqIGNvbnRhaW4gbmV3IG1lc3NhZ2VzIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNoZWNrZWQuIE5vdCBwcm92aWRlZCBieSBhbGwgSU1BUAogKiBzZXJ2ZXJzLgogKiA8L3A+CiAqIDxwPgogKiA8Yj5MQVRUX1VOTUFSS0VEPC9iPiAtIFRoaXMgbWFpbGJveCBpcyBub3QgbWFya2VkLCBkb2VzIG5vdCBjb250YWluIG5ldwogKiBtZXNzYWdlcy4gSWYgZWl0aGVyIDxiPk1BUktFRDwvYj4gb3IgPGI+VU5NQVJLRUQ8L2I+IGlzCiAqIHByb3ZpZGVkLCB5b3UgY2FuIGFzc3VtZSB0aGUgSU1BUCBzZXJ2ZXIgc3VwcG9ydHMgdGhpcyBmZWF0dXJlIGZvciB0aGlzIG1haWxib3guCiAqIDwvcD4KICovCmZ1bmN0aW9uIGltYXBfZ2V0bWFpbGJveGVzKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0lNQVBcQ29ubmVjdGlvbiddLCBkZWZhdWx0OiAncmVzb3VyY2UnKV0gJGltYXAsIHN0cmluZyAkcmVmZXJlbmNlLCBzdHJpbmcgJHBhdHRlcm4pOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEFsaWFzIG9mIDxiPmltYXBfbGlzdHNjYW48L2I+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1zY2FubWFpbGJveC5waHAKICogQHBhcmFtICRpbWFwCiAqIEBwYXJhbSAkcmVmZXJlbmNlCiAqIEBwYXJhbSAkcGF0dGVybgogKiBAcGFyYW0gJGNvbnRlbnQKICovCmZ1bmN0aW9uIGltYXBfc2Nhbm1haWxib3goI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRyZWZlcmVuY2UsIHN0cmluZyAkcGF0dGVybiwgc3RyaW5nICRjb250ZW50KTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBBbGlhcyBvZiA8Yj5pbWFwX2xzdWI8L2I+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1saXN0c3Vic2NyaWJlZC5waHAKICogQHBhcmFtIHJlc291cmNlICRpbWFwCiAqIEBwYXJhbSBzdHJpbmcgJHJlZmVyZW5jZQogKiBAcGFyYW0gc3RyaW5nICRwYXR0ZXJuCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UKICovCmZ1bmN0aW9uIGltYXBfbGlzdHN1YnNjcmliZWQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRyZWZlcmVuY2UsIHN0cmluZyAkcGF0dGVybik6IGFycmF5fGZhbHNlIHt9CgovKioKICogTGlzdCBhbGwgdGhlIHN1YnNjcmliZWQgbWFpbGJveGVzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC1nZXRzdWJzY3JpYmVkLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXAKICogQHBhcmFtIHN0cmluZyAkcmVmZXJlbmNlIDxwPgogKiA8aT5yZWY8L2k+IHNob3VsZCBub3JtYWxseSBiZSBqdXN0IHRoZSBzZXJ2ZXIKICogc3BlY2lmaWNhdGlvbiBhcyBkZXNjcmliZWQgaW4gPGI+aW1hcF9vcGVuPC9iPgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gU3BlY2lmaWVzIHdoZXJlIGluIHRoZSBtYWlsYm94IGhpZXJhcmNoeQogKiB0byBzdGFydCBzZWFyY2hpbmcuPC9wPlRoZXJlIGFyZSB0d28gc3BlY2lhbCBjaGFyYWN0ZXJzIHlvdSBjYW4KICogcGFzcyBhcyBwYXJ0IG9mIHRoZSA8aT5wYXR0ZXJuPC9pPjoKICogJiN4MDAwMjc7KiYjeDAwMDI3OyBhbmQgJiN4MDAwMjc7JiMzNzsmI3gwMDAyNzsuCiAqICYjeDAwMDI3OyomI3gwMDAyNzsgbWVhbnMgdG8gcmV0dXJuIGFsbCBtYWlsYm94ZXMuIElmIHlvdSBwYXNzCiAqIDxpPnBhdHRlcm48L2k+IGFzICYjeDAwMDI3OyomI3gwMDAyNzssIHlvdSB3aWxsCiAqIGdldCBhIGxpc3Qgb2YgdGhlIGVudGlyZSBtYWlsYm94IGhpZXJhcmNoeS4KICogJiN4MDAwMjc7JiMzNzsmI3gwMDAyNzsKICogbWVhbnMgdG8gcmV0dXJuIHRoZSBjdXJyZW50IGxldmVsIG9ubHkuCiAqICYjeDAwMDI3OyYjMzc7JiN4MDAwMjc7IGFzIHRoZSA8aT5wYXR0ZXJuPC9pPgogKiBwYXJhbWV0ZXIgd2lsbCByZXR1cm4gb25seSB0aGUgdG9wIGxldmVsCiAqIG1haWxib3hlczsgJiN4MDAwMjc7fi9tYWlsLyYjMzc7JiN4MDAwMjc7IG9uIFVXX0lNQVBEIHdpbGwgcmV0dXJuIGV2ZXJ5IG1haWxib3ggaW4gdGhlIH4vbWFpbCBkaXJlY3RvcnksIGJ1dCBub25lIGluIHN1YmZvbGRlcnMgb2YgdGhhdCBkaXJlY3RvcnkuPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIGFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBtYWlsYm94IGluZm9ybWF0aW9uLiBFYWNoCiAqIG9iamVjdCBoYXMgdGhlIGF0dHJpYnV0ZXMgPGk+bmFtZTwvaT4sIHNwZWNpZnlpbmcKICogdGhlIGZ1bGwgbmFtZSBvZiB0aGUgbWFpbGJveDsgPGk+ZGVsaW1pdGVyPC9pPiwKICogd2hpY2ggaXMgdGhlIGhpZXJhcmNoeSBkZWxpbWl0ZXIgZm9yIHRoZSBwYXJ0IG9mIHRoZSBoaWVyYXJjaHkKICogdGhpcyBtYWlsYm94IGlzIGluOyBhbmQKICogPGk+YXR0cmlidXRlczwvaT4uIDxpPkF0dHJpYnV0ZXM8L2k+CiAqIGlzIGEgYml0bWFzayB0aGF0IGNhbiBiZSB0ZXN0ZWQgYWdhaW5zdDoKICogPGI+TEFUVF9OT0lORkVSSU9SUzwvYj4gLSBUaGlzIG1haWxib3ggaGFzIG5vCiAqICJjaGlsZHJlbiIgKHRoZXJlIGFyZSBubyBtYWlsYm94ZXMgYmVsb3cgdGhpcyBvbmUpLgogKiA8Yj5MQVRUX05PU0VMRUNUPC9iPiAtIFRoaXMgaXMgb25seSBhIGNvbnRhaW5lciwKICogbm90IGEgbWFpbGJveCAtIHlvdSBjYW5ub3Qgb3BlbiBpdC4KICogPGI+TEFUVF9NQVJLRUQ8L2I+IC0gVGhpcyBtYWlsYm94IGlzIG1hcmtlZC4KICogT25seSB1c2VkIGJ5IFVXLUlNQVBELgogKiA8Yj5MQVRUX1VOTUFSS0VEPC9iPiAtIFRoaXMgbWFpbGJveCBpcyBub3QgbWFya2VkLgogKiBPbmx5IHVzZWQgYnkgVVctSU1BUEQuCiAqLwpmdW5jdGlvbiBpbWFwX2dldHN1YnNjcmliZWQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRyZWZlcmVuY2UsIHN0cmluZyAkcGF0dGVybik6IGFycmF5fGZhbHNlIHt9CgovKioKICogKFBIUCA0LCBQSFAgNSk8YnIvPgogKiBBbGlhcyBvZiBpbWFwX2JvZHkoKQogKiBAcGFyYW0gcmVzb3VyY2UgJGltYXAgQW4gSU1BUCBzdHJlYW0gcmV0dXJuZWQgYnkgaW1hcF9vcGVuKCkKICogQHBhcmFtIGludCAkbWVzc2FnZV9udW0gbWVzc2FnZSBudW1iZXIKICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSBBIGJpdG1hc2sgd2l0aCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nOjx1bD4KICogPGxpPkZUX1VJRCAtIFRoZSBtc2dfbnVtYmVyIGlzIGEgVUlECiAqIDxsaT5GVF9QRUVLIC0gRG8gbm90IHNldCB0aGUgXFNlZW4gZmxhZyBpZiBub3QgYWxyZWFkeSBzZXQKICogPGxpPkZUX0lOVEVSTkFMIC0gVGhlIHJldHVybiBzdHJpbmcgaXMgaW4gaW50ZXJuYWwgZm9ybWF0LCB3aWxsIG5vdCBjYW5vbmljYWxpemUgdG8gQ1JMRi48L3VsPjxwPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBib2R5IG9mIHRoZSBzcGVjaWZpZWQgbWVzc2FnZQogKi8KZnVuY3Rpb24gaW1hcF9mZXRjaHRleHQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgaW50ICRtZXNzYWdlX251bSwgaW50ICRmbGFncyA9IDApOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBBbGlhcyBvZiA8Yj5pbWFwX2xpc3RzY2FuPC9iPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtc2Nhbi5waHAKICogQHBhcmFtICRpbWFwCiAqIEBwYXJhbSAkcmVmZXJlbmNlCiAqIEBwYXJhbSAkcGF0dGVybgogKiBAcGFyYW0gJGNvbnRlbnQKICovCmZ1bmN0aW9uIGltYXBfc2NhbigjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBzdHJpbmcgJHJlZmVyZW5jZSwgc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJGNvbnRlbnQpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEFsaWFzIG9mIDxiPmltYXBfY3JlYXRlbWFpbGJveDwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLWNyZWF0ZS5waHAKICogQHBhcmFtICRpbWFwCiAqIEBwYXJhbSAkbWFpbGJveAogKi8KZnVuY3Rpb24gaW1hcF9jcmVhdGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnSU1BUFxDb25uZWN0aW9uJ10sIGRlZmF1bHQ6ICdyZXNvdXJjZScpXSAkaW1hcCwgc3RyaW5nICRtYWlsYm94KTogYm9vbCB7fQoKLyoqCiAqIEFsaWFzIG9mIDxiPmltYXBfcmVuYW1lbWFpbGJveDwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5pbWFwLXJlbmFtZS5waHAKICogQHBhcmFtICRpbWFwCiAqIEBwYXJhbSAkZnJvbQogKiBAcGFyYW0gJHRvCiAqLwpmdW5jdGlvbiBpbWFwX3JlbmFtZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdJTUFQXENvbm5lY3Rpb24nXSwgZGVmYXVsdDogJ3Jlc291cmNlJyldICRpbWFwLCBzdHJpbmcgJGZyb20sIHN0cmluZyAkdG8pOiBib29sIHt9CgovKioKICogRGVjb2RlIGEgbW9kaWZpZWQgVVRGLTcgc3RyaW5nIHRvIFVURi04CiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmltYXAtbXV0ZjctdG8tdXRmOC5waHAKICoKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAqLwpmdW5jdGlvbiBpbWFwX211dGY3X3RvX3V0Zjgoc3RyaW5nICRzdHJpbmcpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBFbmNvZGUgYSBVVEYtOCBzdHJpbmcgdG8gbW9kaWZpZWQgVVRGLTcKICoKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uaW1hcC11dGY4LXRvLW11dGY3LnBocAogKgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICovCmZ1bmN0aW9uIGltYXBfdXRmOF90b19tdXRmNyhzdHJpbmcgJHN0cmluZyk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIEBzaW5jZSA4LjIKICovCmZ1bmN0aW9uIGltYXBfaXNfb3BlbihJTUFQXENvbm5lY3Rpb24gJGltYXApOiBib29sIHt9CgovKioKICogQGRlcHJlY2F0ZWQgOC4xCiAqLwpkZWZpbmUoJ05JTCcsIDApOwpkZWZpbmUoJ0lNQVBfT1BFTlRJTUVPVVQnLCAxKTsKZGVmaW5lKCdJTUFQX1JFQURUSU1FT1VUJywgMik7CmRlZmluZSgnSU1BUF9XUklURVRJTUVPVVQnLCAzKTsKZGVmaW5lKCdJTUFQX0NMT1NFVElNRU9VVCcsIDQpOwpkZWZpbmUoJ09QX0RFQlVHJywgMSk7CgovKioKICogT3BlbiBtYWlsYm94IHJlYWQtb25seQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdPUF9SRUFET05MWScsIDIpOwoKLyoqCiAqIERvbid0IHVzZSBvciB1cGRhdGUgYSAubmV3c3JjIGZvciBuZXdzCiAqIChOTlRQIG9ubHkpCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09QX0FOT05ZTU9VUycsIDQpOwpkZWZpbmUoJ09QX1NIT1JUQ0FDSEUnLCA4KTsKZGVmaW5lKCdPUF9TSUxFTlQnLCAxNik7CmRlZmluZSgnT1BfUFJPVE9UWVBFJywgMzIpOwoKLyoqCiAqIEZvciBJTUFQIGFuZCBOTlRQCiAqIG5hbWVzLCBvcGVuIGEgY29ubmVjdGlvbiBidXQgZG9uJ3Qgb3BlbiBhIG1haWxib3guCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ09QX0hBTEZPUEVOJywgNjQpOwpkZWZpbmUoJ09QX0VYUFVOR0UnLCAxMjgpOwpkZWZpbmUoJ09QX1NFQ1VSRScsIDI1Nik7CgovKioKICogc2lsZW50bHkgZXhwdW5nZSB0aGUgbWFpbGJveCBiZWZvcmUgY2xvc2luZyB3aGVuCiAqIGNhbGxpbmcgPGI+aW1hcF9jbG9zZTwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFwLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQ0xfRVhQVU5HRScsIDMyNzY4KTsKCi8qKgogKiBUaGUgcGFyYW1ldGVyIGlzIGEgVUlECiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0ZUX1VJRCcsIDEpOwoKLyoqCiAqIERvIG5vdCBzZXQgdGhlIFxTZWVuIGZsYWcgaWYgbm90IGFscmVhZHkgc2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0ZUX1BFRUsnLCAyKTsKZGVmaW5lKCdGVF9OT1QnLCA0KTsKCi8qKgogKiBUaGUgcmV0dXJuIHN0cmluZyBpcyBpbiBpbnRlcm5hbCBmb3JtYXQsIHdpbGwgbm90IGNhbm9uaWNhbGl6ZSB0byBDUkxGLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdGVF9JTlRFUk5BTCcsIDgpOwpkZWZpbmUoJ0ZUX1BSRUZFVENIVEVYVCcsIDMyKTsKCi8qKgogKiBUaGUgc2VxdWVuY2UgYXJndW1lbnQgY29udGFpbnMgVUlEcyBpbnN0ZWFkIG9mIHNlcXVlbmNlIG51bWJlcnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFwLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU1RfVUlEJywgMSk7CmRlZmluZSgnU1RfU0lMRU5UJywgMik7CmRlZmluZSgnU1RfU0VUJywgNCk7CgovKioKICogdGhlIHNlcXVlbmNlIG51bWJlcnMgY29udGFpbiBVSURTCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0NQX1VJRCcsIDEpOwoKLyoqCiAqIERlbGV0ZSB0aGUgbWVzc2FnZXMgZnJvbSB0aGUgY3VycmVudCBtYWlsYm94IGFmdGVyIGNvcHlpbmcKICogd2l0aCA8Yj5pbWFwX21haWxfY29weTwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFwLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnQ1BfTU9WRScsIDIpOwoKLyoqCiAqIFJldHVybiBVSURzIGluc3RlYWQgb2Ygc2VxdWVuY2UgbnVtYmVycwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTRV9VSUQnLCAxKTsKZGVmaW5lKCdTRV9GUkVFJywgMik7CgovKioKICogRG9uJ3QgcHJlZmV0Y2ggc2VhcmNoZWQgbWVzc2FnZXMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFwLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnU0VfTk9QUkVGRVRDSCcsIDQpOwpkZWZpbmUoJ1NPX0ZSRUUnLCA4KTsKZGVmaW5lKCdTT19OT1NFUlZFUicsIDgpOwpkZWZpbmUoJ1NBX01FU1NBR0VTJywgMSk7CmRlZmluZSgnU0FfUkVDRU5UJywgMik7CmRlZmluZSgnU0FfVU5TRUVOJywgNCk7CmRlZmluZSgnU0FfVUlETkVYVCcsIDgpOwpkZWZpbmUoJ1NBX1VJRFZBTElESVRZJywgMTYpOwpkZWZpbmUoJ1NBX0FMTCcsIDMxKTsKCi8qKgogKiBUaGlzIG1haWxib3ggaGFzIG5vICJjaGlsZHJlbiIgKHRoZXJlIGFyZSBubwogKiBtYWlsYm94ZXMgYmVsb3cgdGhpcyBvbmUpLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdMQVRUX05PSU5GRVJJT1JTJywgMSk7CgovKioKICogVGhpcyBpcyBvbmx5IGEgY29udGFpbmVyLCBub3QgYSBtYWlsYm94IC0geW91CiAqIGNhbm5vdCBvcGVuIGl0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdMQVRUX05PU0VMRUNUJywgMik7CgovKioKICogVGhpcyBtYWlsYm94IGlzIG1hcmtlZC4gT25seSB1c2VkIGJ5IFVXLUlNQVBELgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdMQVRUX01BUktFRCcsIDQpOwoKLyoqCiAqIFRoaXMgbWFpbGJveCBpcyBub3QgbWFya2VkLiBPbmx5IHVzZWQgYnkKICogVVctSU1BUEQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0xBVFRfVU5NQVJLRUQnLCA4KTsKZGVmaW5lKCdMQVRUX1JFRkVSUkFMJywgMTYpOwpkZWZpbmUoJ0xBVFRfSEFTQ0hJTERSRU4nLCAzMik7CmRlZmluZSgnTEFUVF9IQVNOT0NISUxEUkVOJywgNjQpOwoKLyoqCiAqIFNvcnQgY3JpdGVyaWEgZm9yIDxiPmltYXBfc29ydDwvYj46CiAqIG1lc3NhZ2UgRGF0ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT1JUREFURScsIDApOwoKLyoqCiAqIFNvcnQgY3JpdGVyaWEgZm9yIDxiPmltYXBfc29ydDwvYj46CiAqIGFycml2YWwgZGF0ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT1JUQVJSSVZBTCcsIDEpOwoKLyoqCiAqIFNvcnQgY3JpdGVyaWEgZm9yIDxiPmltYXBfc29ydDwvYj46CiAqIG1haWxib3ggaW4gZmlyc3QgRnJvbSBhZGRyZXNzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPUlRGUk9NJywgMik7CgovKioKICogU29ydCBjcml0ZXJpYSBmb3IgPGI+aW1hcF9zb3J0PC9iPjoKICogbWVzc2FnZSBzdWJqZWN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPUlRTVUJKRUNUJywgMyk7CgovKioKICogU29ydCBjcml0ZXJpYSBmb3IgPGI+aW1hcF9zb3J0PC9iPjoKICogbWFpbGJveCBpbiBmaXJzdCBUbyBhZGRyZXNzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPUlRUTycsIDQpOwoKLyoqCiAqIFNvcnQgY3JpdGVyaWEgZm9yIDxiPmltYXBfc29ydDwvYj46CiAqIG1haWxib3ggaW4gZmlyc3QgY2MgYWRkcmVzcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdTT1JUQ0MnLCA1KTsKCi8qKgogKiBTb3J0IGNyaXRlcmlhIGZvciA8Yj5pbWFwX3NvcnQ8L2I+OgogKiBzaXplIG9mIG1lc3NhZ2UgaW4gb2N0ZXRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1NPUlRTSVpFJywgNik7CmRlZmluZSgnVFlQRVRFWFQnLCAwKTsKZGVmaW5lKCdUWVBFTVVMVElQQVJUJywgMSk7CmRlZmluZSgnVFlQRU1FU1NBR0UnLCAyKTsKZGVmaW5lKCdUWVBFQVBQTElDQVRJT04nLCAzKTsKZGVmaW5lKCdUWVBFQVVESU8nLCA0KTsKZGVmaW5lKCdUWVBFSU1BR0UnLCA1KTsKZGVmaW5lKCdUWVBFVklERU8nLCA2KTsKZGVmaW5lKCdUWVBFTU9ERUwnLCA3KTsKZGVmaW5lKCdUWVBFT1RIRVInLCA4KTsKZGVmaW5lKCdFTkM3QklUJywgMCk7CmRlZmluZSgnRU5DOEJJVCcsIDEpOwpkZWZpbmUoJ0VOQ0JJTkFSWScsIDIpOwpkZWZpbmUoJ0VOQ0JBU0U2NCcsIDMpOwpkZWZpbmUoJ0VOQ1FVT1RFRFBSSU5UQUJMRScsIDQpOwpkZWZpbmUoJ0VOQ09USEVSJywgNSk7CgovKioKICogR2FyYmFnZSBjb2xsZWN0b3IsIGNsZWFyIG1lc3NhZ2UgY2FjaGUgZWxlbWVudHMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vaW1hcC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0lNQVBfR0NfRUxUJywgMSk7CgovKioKICogR2FyYmFnZSBjb2xsZWN0b3IsIGNsZWFyIGVudmVsb3BlcyBhbmQgYm9kaWVzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2ltYXAuY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdJTUFQX0dDX0VOVicsIDIpOwoKLyoqCiAqIEdhcmJhZ2UgY29sbGVjdG9yLCBjbGVhciB0ZXh0cy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9pbWFwLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnSU1BUF9HQ19URVhUUycsIDQpOwo8P3BocAoKbmFtZXNwYWNlIElNQVA7CgovKioKICogQHNpbmNlIDguMQogKi8KZmluYWwgY2xhc3MgQ29ubmVjdGlvbiB7fQo8P3BocAoKLy8gU3RhcnQgb2YgbWFpbHBhcnNlIHYuCgovKioKICogKFBFQ0wgbWFpbHBhcnNlID49IDAuOS4wKTxici8+CiAqIEZpZ3VyZXMgb3V0IHRoZSBiZXN0IHdheSBvZiBlbmNvZGluZyB0aGUgY29udGVudCByZWFkIGZyb20gdGhlIGdpdmVuIGZpbGUgcG9pbnRlci4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tYWlscGFyc2UtZGV0ZXJtaW5lLWJlc3QteGZlci1lbmNvZGluZy5waHAKICogQHBhcmFtIHJlc291cmNlICRmcCA8cD4KICogQSB2YWxpZCBmaWxlIHBvaW50ZXIsIHdoaWNoIG11c3QgYmUgc2Vlay1hYmxlLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgb25lIG9mIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmdzIHN1cHBvcnRlZCBieSB0aGUKICoge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcmVmLm1ic3RyaW5nLnBocCBtYnN0cmluZ30gbW9kdWxlLgogKi8KZnVuY3Rpb24gbWFpbHBhcnNlX2RldGVybWluZV9iZXN0X3hmZXJfZW5jb2RpbmcoJGZwKSB7fQoKLyoqCiAqIChQRUNMIG1haWxwYXJzZSA+PSAwLjkuMCk8YnIvPgogKiBDcmVhdGUgYSBNSU1FIG1haWwgcmVzb3VyY2UuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWFpbHBhcnNlLW1zZy1jcmVhdGUucGhwCiAqIEByZXR1cm4gcmVzb3VyY2UgUmV0dXJucyBhIGhhbmRsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHBhcnNlIGEgbWVzc2FnZS4KICovCmZ1bmN0aW9uIG1haWxwYXJzZV9tc2dfY3JlYXRlKCkge30KCi8qKgogKiAoUEVDTCBtYWlscGFyc2UgPj0gMC45LjApPGJyLz4KICogRXh0cmFjdHMvZGVjb2RlcyBhIG1lc3NhZ2Ugc2VjdGlvbiBmcm9tIHRoZSBzdXBwbGllZCBmaWxlbmFtZS4KICogVGhlIGNvbnRlbnRzIG9mIHRoZSBzZWN0aW9uIHdpbGwgYmUgZGVjb2RlZCBhY2NvcmRpbmcgdG8gdGhlaXIgdHJhbnNmZXIgZW5jb2RpbmcgLSBiYXNlNjQsIHF1b3RlZC1wcmludGFibGUgYW5kCiAqIHV1ZW5jb2RlZCB0ZXh0IGFyZSBzdXBwb3J0ZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWFpbHBhcnNlLW1zZy1leHRyYWN0LXBhcnQtZmlsZS5waHAKICogQHBhcmFtIHJlc291cmNlICRtaW1lbWFpbCA8cD4KICogQSB2YWxpZCBNSU1FIHJlc291cmNlLCBjcmVhdGVkIHdpdGgge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWFpbHBhcnNlLW1zZy1jcmVhdGUucGhwIG1haWxwYXJzZV9tc2dfY3JlYXRlKCl9LgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAkZmlsZW5hbWUgPHA+CiAqIENhbiBiZSBhIGZpbGUgbmFtZSBvciBhIHZhbGlkIHN0cmVhbSByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gY2FsbGFibGUgJGNhbGxiYWNrZnVuYyBbb3B0aW9uYWxdIDxwPgogKiBJZiBzZXQsIHRoaXMgbXVzdCBiZSBlaXRoZXIgYSB2YWxpZCBjYWxsYmFjayB0aGF0IHdpbGwgYmUgcGFzc2VkIHRoZSBleHRyYWN0ZWQgc2VjdGlvbiwgb3IgPGI+TlVMTDwvYj4gdG8gbWFrZSB0aGlzCiAqIGZ1bmN0aW9uIHJldHVybiB0aGUgZXh0cmFjdGVkIHNlY3Rpb24uCiAqIDwvcD4KICogPHA+CiAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250ZW50cyB3aWxsIGJlIHNlbnQgdG8gInN0ZG91dCIuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8Ym9vbCA8cD4KICogSWYgY2FsbGJhY2tmdW5jIGlzIG5vdCA8Yj5OVUxMPC9iPiByZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MuCiAqIDwvcD4KICogPHA+CiAqIElmIGNhbGxiYWNrZnVuYyBpcyBzZXQgdG8gPGI+TlVMTDwvYj4sIHJldHVybnMgdGhlIGV4dHJhY3RlZCBzZWN0aW9uIGFzIGEgc3RyaW5nLgogKiA8L3A+CiAqIDxwPgogKiBSZXR1cm5zIEZBTFNFIG9uIGVycm9yLgogKiA8L3A+CiAqLwpmdW5jdGlvbiBtYWlscGFyc2VfbXNnX2V4dHJhY3RfcGFydF9maWxlKCRtaW1lbWFpbCwgJGZpbGVuYW1lLCAkY2FsbGJhY2tmdW5jKSB7fQoKLyoqCiAqIChQRUNMIG1haWxwYXJzZSA+PSAwLjkuMCk8YnIvPgogKiBFeHRyYWN0cy9kZWNvZGVzIGEgbWVzc2FnZSBzZWN0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWFpbHBhcnNlLW1zZy1leHRyYWN0LXBhcnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbWltZW1haWwgPHA+CiAqIEEgdmFsaWQgTUlNRSByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRtc2dib2R5CiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2tmdW5jIFtvcHRpb25hbF0KICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiBtYWlscGFyc2VfbXNnX2V4dHJhY3RfcGFydCgkbWltZW1haWwsICRtc2dib2R5LCAkY2FsbGJhY2tmdW5jKSB7fQoKLyoqCiAqIChQRUNMIG1haWxwYXJzZSA+PSAwLjkuMCk8YnIvPgogKiBFeHRyYWN0cyBhIG1lc3NhZ2Ugc2VjdGlvbiBpbmNsdWRpbmcgaGVhZGVycyB3aXRob3V0IGRlY29kaW5nIHRoZSB0cmFuc2ZlciBlbmNvZGluZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1haWxwYXJzZS1tc2ctZXh0cmFjdC13aG9sZS1wYXJ0LWZpbGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbWltZW1haWwgPHA+CiAqIEEgdmFsaWQgTUlNRSByZXNvdXJjZQogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEBwYXJhbSBjYWxsYWJsZSAkY2FsbGJhY2tmdW5jIFtvcHRpb25hbF0KICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIG1haWxwYXJzZV9tc2dfZXh0cmFjdF93aG9sZV9wYXJ0X2ZpbGUoJG1pbWVtYWlsLCAkZmlsZW5hbWUsICRjYWxsYmFja2Z1bmMpIHt9CgovKioKICogKFBFQ0wgbWFpbHBhcnNlID49IDAuOS4wKTxici8+CiAqIEZyZWVzIGEgTUlNRSByZXNvdXJjZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tYWlscGFyc2UtbXNnLWZyZWUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbWltZW1haWwgPHA+CiAqIEEgdmFsaWQgTUlNRSByZXNvdXJjZSBhbGxvY2F0ZWQgYnkKICoge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWFpbHBhcnNlLW1zZy1jcmVhdGUucGhwIG1haWxwYXJzZV9tc2dfY3JlYXRlKCl9IG9yCiAqIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1haWxwYXJzZS1tc2ctcGFyc2UtZmlsZS5waHAgbWFpbHBhcnNlX21zZ19wYXJzZV9maWxlKCl9LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBtYWlscGFyc2VfbXNnX2ZyZWUoJG1pbWVtYWlsKSB7fQoKLyoqCiAqIChQRUNMIG1haWxwYXJzZSA+PSAwLjkuMCk8YnIvPgogKiBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGluZm8gYWJvdXQgdGhlIG1lc3NhZ2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tYWlscGFyc2UtbXNnLWdldC1wYXJ0LWRhdGEucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbWltZW1haWwgPHA+CiAqIEEgdmFsaWQgTUlNRSByZXNvdXJjZS4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiBtYWlscGFyc2VfbXNnX2dldF9wYXJ0X2RhdGEoJG1pbWVtYWlsKSB7fQoKLyoqCiAqIChQRUNMIG1haWxwYXJzZSA+PSAwLjkuMCk8YnIvPgogKiBSZXR1cm5zIGEgaGFuZGxlIG9uIGEgZ2l2ZW4gc2VjdGlvbiBpbiBhIG1pbWVtZXNzYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWFpbHBhcnNlLW1zZy1nZXQtcGFydC5waHAKICogQHBhcmFtIHJlc291cmNlICRtaW1lbWFpbCA8cD4KICogQSB2YWxpZCBNSU1FIHJlc291cmNlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG1pbWVzZWN0aW9uCiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UKICovCmZ1bmN0aW9uIG1haWxwYXJzZV9tc2dfZ2V0X3BhcnQoJG1pbWVtYWlsLCAkbWltZXNlY3Rpb24pIHt9CgovKioKICogKFBFQ0wgbWFpbHBhcnNlID49IDAuOS4wKTxici8+CiAqIFJldHVybnMgYW4gYXJyYXkgb2YgbWltZSBzZWN0aW9uIG5hbWVzIGluIHRoZSBzdXBwbGllZCBtZXNzYWdlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWFpbHBhcnNlLW1zZy1nZXQtc3RydWN0dXJlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJG1pbWVtYWlsIDxwPgogKiBBIHZhbGlkIE1JTUUgcmVzb3VyY2UuCiAqIDwvcD4KICogQHJldHVybiBhcnJheQogKi8KZnVuY3Rpb24gbWFpbHBhcnNlX21zZ19nZXRfc3RydWN0dXJlKCRtaW1lbWFpbCkge30KCi8qKgogKiAoUEVDTCBtYWlscGFyc2UgPj0gMC45LjApPGJyLz4KICogUGFyc2VzIGEgZmlsZS4gVGhpcyBpcyB0aGUgb3B0aW1hbCB3YXkgb2YgcGFyc2luZyBhIG1haWwgZmlsZSB0aGF0IHlvdSBoYXZlIG9uIGRpc2suCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWFpbHBhcnNlLW1zZy1wYXJzZS1maWxlLnBocAogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICogUGF0aCB0byB0aGUgZmlsZSBob2xkaW5nIHRoZSBtZXNzYWdlLiBUaGUgZmlsZSBpcyBvcGVuZWQgYW5kIHN0cmVhbWVkIHRocm91Z2ggdGhlIHBhcnNlci4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIFJldHVybnMgYSBNSU1FIHJlc291cmNlIHJlcHJlc2VudGluZyB0aGUgc3RydWN0dXJlLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBtYWlscGFyc2VfbXNnX3BhcnNlX2ZpbGUoJGZpbGVuYW1lKSB7fQoKLyoqCiAqIChQRUNMIG1haWxwYXJzZSA+PSAwLjkuMCk8YnIvPgogKiBJbmNyZW1lbnRhbGx5IHBhcnNlIGRhdGEgaW50byB0aGUgc3VwcGxpZWQgbWltZSBtYWlsIHJlc291cmNlLgogKiBUaGlzIGZ1bmN0aW9uIGFsbG93IHlvdSB0byBzdHJlYW0gcG9ydGlvbnMgb2YgYSBmaWxlIGF0IGEgdGltZSwgcmF0aGVyIHRoYW4gcmVhZCBhbmQgcGFyc2UgdGhlIHdob2xlIHRoaW5nLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1haWxwYXJzZS1tc2ctcGFyc2UucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkbWltZW1haWwgPHA+CiAqIEEgdmFsaWQgTUlNRSByZXNvdXJjZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBtYWlscGFyc2VfbXNnX3BhcnNlKCRtaW1lbWFpbCwgJGRhdGEpIHt9CgovKioKICogKFBFQ0wgbWFpbHBhcnNlID49IDAuOS4wKTxici8+CiAqIFBhcnNlcyBhIHtAbGluayBodHRwOi8vd3d3LmZhcXMub3JnL3JmY3MvcmZjODIyIFJGQyA4MjJ9IGNvbXBsaWFudCByZWNpcGllbnQgbGlzdCwgc3VjaCBhcyB0aGF0IGZvdW5kIGluIHRoZSBUbzogaGVhZGVyLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1haWxwYXJzZS1yZmM4MjItcGFyc2UtYWRkcmVzc2VzLnBocAogKiBAcGFyYW0gc3RyaW5nICRhZGRyZXNzZXMgPHA+CiAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgYWRkcmVzc2VzLCBsaWtlIGluOiA8cHJlPldleiBGdXJsb25nIDx3ZXpAZXhhbXBsZS5jb20+LCBkb2VAZXhhbXBsZS5jb208L3ByZT4KICogTm90ZTogVGhpcyBzdHJpbmcgbXVzdCBub3QgaW5jbHVkZSB0aGUgaGVhZGVyIG5hbWUuCiAqIDwvcD4KICogQHJldHVybiBhcnJheSA8cD4KICogUmV0dXJucyBhbiBhcnJheSBvZiBhc3NvY2lhdGl2ZSBhcnJheXMgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgZm9yIGVhY2ggcmVjaXBpZW50OgogKiA8L3A+CiAqIDx0YWJsZT4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmRpc3BsYXk8L3RkPgogKiA8dGQ+VGhlIHJlY2lwaWVudCBuYW1lLCBmb3IgZGlzcGxheSBwdXJwb3NlLiBJZiB0aGlzIHBhcnQgaXMgbm90IHNldCBmb3IgYSByZWNpcGllbnQsIHRoaXMga2V5IHdpbGwgaG9sZCB0aGUgc2FtZSB2YWx1ZSBhcyBhZGRyZXNzLjwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5hZGRyZXNzPC90ZD4KICogPHRkPlRoZSBlbWFpbCBhZGRyZXNzPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmlzX2dyb3VwPC90ZD4KICogPHRkPjxiPlRSVUU8L2I+IGlmIHRoZSByZWNpcGllbnQgaXMgYSBuZXdzZ3JvdXAsIDxiPkZBTFNFPC9iPiBvdGhlcndpc2UuPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICovCmZ1bmN0aW9uIG1haWxwYXJzZV9yZmM4MjJfcGFyc2VfYWRkcmVzc2VzKCRhZGRyZXNzZXMpIHt9CgovKioKICogKFBFQ0wgbWFpbHBhcnNlID49IDAuOS4wKTxici8+CiAqIFN0cmVhbXMgZGF0YSBmcm9tIHRoZSBzb3VyY2UgZmlsZSBwb2ludGVyLCBhcHBseSBlbmNvZGluZyBhbmQgd3JpdGUgdG8gdGhlIGRlc3RpbmF0aW9uIGZpbGUgcG9pbnRlci4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tYWlscGFyc2Utc3RyZWFtLWVuY29kZS5waHAKICogQHBhcmFtIHJlc291cmNlICRzb3VyY2VmcCA8cD4KICogQSB2YWxpZCBmaWxlIGhhbmRsZS4gVGhlIGZpbGUgaXMgc3RyZWFtZWQgdGhyb3VnaCB0aGUgcGFyc2VyLgogKiA8L3A+CiAqIEBwYXJhbSByZXNvdXJjZSAkZGVzdGZwIDxwPgogKiBUaGUgZGVzdGluYXRpb24gZmlsZSBoYW5kbGUgaW4gd2hpY2ggdGhlIGVuY29kZWQgZGF0YSB3aWxsIGJlIHdyaXR0ZW4uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcgPHA+CiAqIE9uZSBvZiB0aGUgY2hhcmFjdGVyIGVuY29kaW5ncyBzdXBwb3J0ZWQgYnkgdGhlIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JlZi5tYnN0cmluZy5waHAgbWJzdHJpbmd9IG1vZHVsZS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gbWFpbHBhcnNlX3N0cmVhbV9lbmNvZGUoJHNvdXJjZWZwLCAkZGVzdGZwLCAkZW5jb2RpbmcpIHt9CgovKioKICogKFBFQ0wgbWFpbHBhcnNlID49IDAuOS4wKTxici8+CiAqIFNjYW5zIHRoZSBkYXRhIGZyb20gdGhlIGdpdmVuIGZpbGUgcG9pbnRlciBhbmQgZXh0cmFjdCBlYWNoIGVtYmVkZGVkIHV1ZW5jb2RlZCBmaWxlIGludG8gYSB0ZW1wb3JhcnkgZmlsZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tYWlscGFyc2UtdXVkZWNvZGUtYWxsLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJGZwIDxwPgogKiBBIHZhbGlkIGZpbGUgcG9pbnRlci4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5IDxwPgogKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFzc29jaWF0aXZlIGFycmF5cyBsaXN0aW5nIGZpbGVuYW1lIGluZm9ybWF0aW9uLgogKiA8L3A+CiAqIDx0YWJsZT4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmZpbGVuYW1lPC90ZD4KICogPHRkPlBhdGggdG8gdGhlIHRlbXBvcmFyeSBmaWxlIG5hbWUgY3JlYXRlZDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5vcmlnZmlsZW5hbWU8L3RkPgogKiA8dGQ+VGhlIG9yaWdpbmFsIGZpbGVuYW1lLCBmb3IgdXVlbmNvZGVkIHBhcnRzIG9ubHk8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiA8cD4KICogVGhlIGZpcnN0IGZpbGVuYW1lIGVudHJ5IGlzIHRoZSBtZXNzYWdlIGJvZHkuIFRoZSBuZXh0IGVudHJpZXMgYXJlIHRoZSBkZWNvZGVkIHV1ZW5jb2RlZCBmaWxlcy4KICogPC9wPgogKi8KZnVuY3Rpb24gbWFpbHBhcnNlX3V1ZGVjb2RlX2FsbCgkZnApIHt9CgpkZWZpbmUoJ01BSUxQQVJTRV9FWFRSQUNUX09VVFBVVCcsIDApOwpkZWZpbmUoJ01BSUxQQVJTRV9FWFRSQUNUX1NUUkVBTScsIDEpOwpkZWZpbmUoJ01BSUxQQVJTRV9FWFRSQUNUX1JFVFVSTicsIDIpOwoKLy8gRW5kIG9mIG1haWxwYXJzZSB2Lgo8P3BocAoKLy8gU3RhcnQgb2YgcG9zaXggdi4KdXNlIEpldEJyYWluc1xQaHBTdG9ybVxBcnJheVNoYXBlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFBocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXFB1cmU7CgovKioKICogU2VuZCBhIHNpZ25hbCB0byBhIHByb2Nlc3MKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wb3NpeC1raWxsLnBocAogKiBAcGFyYW0gaW50ICRwcm9jZXNzX2lkIDxwPgogKiBUaGUgcHJvY2VzcyBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHNpZ25hbCA8cD4KICogT25lIG9mIHRoZSBQQ05UTCBzaWduYWxzIGNvbnN0YW50cy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBvc2l4X2tpbGwoaW50ICRwcm9jZXNzX2lkLCBpbnQgJHNpZ25hbCk6IGJvb2wge30KCi8qKgogKiBSZXR1cm4gdGhlIGN1cnJlbnQgcHJvY2VzcyBpZGVudGlmaWVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucG9zaXgtZ2V0cGlkLnBocAogKiBAcmV0dXJuIGludCB0aGUgaWRlbnRpZmllciwgYXMgYW4gaW50ZWdlci4KICovCiNbUHVyZV0KZnVuY3Rpb24gcG9zaXhfZ2V0cGlkKCk6IGludCB7fQoKLyoqCiAqIFJldHVybiB0aGUgcGFyZW50IHByb2Nlc3MgaWRlbnRpZmllcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LWdldHBwaWQucGhwCiAqIEByZXR1cm4gaW50IHRoZSBpZGVudGlmaWVyLCBhcyBhbiBpbnRlZ2VyLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBwb3NpeF9nZXRwcGlkKCk6IGludCB7fQoKLyoqCiAqIFJldHVybiB0aGUgcmVhbCB1c2VyIElEIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wb3NpeC1nZXR1aWQucGhwCiAqIEByZXR1cm4gaW50IHRoZSB1c2VyIGlkLCBhcyBhbiBpbnRlZ2VyCiAqLwojW1B1cmVdCmZ1bmN0aW9uIHBvc2l4X2dldHVpZCgpOiBpbnQge30KCi8qKgogKiBTZXQgdGhlIFVJRCBvZiB0aGUgY3VycmVudCBwcm9jZXNzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucG9zaXgtc2V0dWlkLnBocAogKiBAcGFyYW0gaW50ICR1c2VyX2lkIDxwPgogKiBUaGUgdXNlciBpZC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBvc2l4X3NldHVpZChpbnQgJHVzZXJfaWQpOiBib29sIHt9CgovKioKICogUmV0dXJuIHRoZSBlZmZlY3RpdmUgdXNlciBJRCBvZiB0aGUgY3VycmVudCBwcm9jZXNzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucG9zaXgtZ2V0ZXVpZC5waHAKICogQHJldHVybiBpbnQgdGhlIHVzZXIgaWQsIGFzIGFuIGludGVnZXIKICovCiNbUHVyZV0KZnVuY3Rpb24gcG9zaXhfZ2V0ZXVpZCgpOiBpbnQge30KCi8qKgogKiBTZXQgdGhlIGVmZmVjdGl2ZSBVSUQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LXNldGV1aWQucGhwCiAqIEBwYXJhbSBpbnQgJHVzZXJfaWQgPHA+CiAqIFRoZSB1c2VyIGlkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcG9zaXhfc2V0ZXVpZChpbnQgJHVzZXJfaWQpOiBib29sIHt9CgovKioKICogU2V0IHN5c3RlbSByZXNvdXJjZSBsaW1pdHMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wb3NpeC1zZXRybGltaXQucGhwCiAqIEBwYXJhbSBpbnQgJHJlc291cmNlIDxwPgogKiBUaGUKICoge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcG9zaXguY29uc3RhbnRzLnNldHJsaW1pdC5waHAgcmVzb3VyY2UgbGltaXQgY29uc3RhbnR9CiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxpbWl0IHRoYXQgaXMgYmVpbmcgc2V0LgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHNvZnRfbGltaXQgVGhlIHNvZnQgbGltaXQsIGluIHdoYXRldmVyIHVuaXQgdGhlIHJlc291cmNlIGxpbWl0IHJlcXVpcmVzLCBvciBQT1NJWF9STElNSVRfSU5GSU5JVFkuCiAqIEBwYXJhbSBpbnQgJGhhcmRfbGltaXQgVGhlIGhhcmQgbGltaXQsIGluIHdoYXRldmVyIHVuaXQgdGhlIHJlc291cmNlIGxpbWl0IHJlcXVpcmVzLCBvciBQT1NJWF9STElNSVRfSU5GSU5JVFkuCiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogKiBAc2luY2UgNy4wCiAqLwpmdW5jdGlvbiBwb3NpeF9zZXRybGltaXQoaW50ICRyZXNvdXJjZSwgaW50ICRzb2Z0X2xpbWl0LCBpbnQgJGhhcmRfbGltaXQpOiBib29sIHt9Ci8qKgogKiBSZXR1cm4gdGhlIHJlYWwgZ3JvdXAgSUQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LWdldGdpZC5waHAKICogQHJldHVybiBpbnQgdGhlIHJlYWwgZ3JvdXAgaWQsIGFzIGFuIGludGVnZXIuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIHBvc2l4X2dldGdpZCgpOiBpbnQge30KCi8qKgogKiBTZXQgdGhlIEdJRCBvZiB0aGUgY3VycmVudCBwcm9jZXNzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucG9zaXgtc2V0Z2lkLnBocAogKiBAcGFyYW0gaW50ICRncm91cF9pZCA8cD4KICogVGhlIGdyb3VwIGlkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcG9zaXhfc2V0Z2lkKGludCAkZ3JvdXBfaWQpOiBib29sIHt9CgovKioKICogUmV0dXJuIHRoZSBlZmZlY3RpdmUgZ3JvdXAgSUQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LWdldGVnaWQucGhwCiAqIEByZXR1cm4gaW50IGFuIGludGVnZXIgb2YgdGhlIGVmZmVjdGl2ZSBncm91cCBJRC4KICovCiNbUHVyZV0KZnVuY3Rpb24gcG9zaXhfZ2V0ZWdpZCgpOiBpbnQge30KCi8qKgogKiBTZXQgdGhlIGVmZmVjdGl2ZSBHSUQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LXNldGVnaWQucGhwCiAqIEBwYXJhbSBpbnQgJGdyb3VwX2lkIDxwPgogKiBUaGUgZ3JvdXAgaWQuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBwb3NpeF9zZXRlZ2lkKGludCAkZ3JvdXBfaWQpOiBib29sIHt9CgovKioKICogUmV0dXJuIHRoZSBncm91cCBzZXQgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LWdldGdyb3Vwcy5waHAKICogQHJldHVybiBhcnJheXxmYWxzZSBhbiBhcnJheSBvZiBpbnRlZ2VycyBjb250YWluaW5nIHRoZSBudW1lcmljIGdyb3VwIGlkcyBvZiB0aGUgZ3JvdXAKICogc2V0IG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIHBvc2l4X2dldGdyb3VwcygpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIFJldHVybiBsb2dpbiBuYW1lCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucG9zaXgtZ2V0bG9naW4ucGhwCiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBsb2dpbiBuYW1lIG9mIHRoZSB1c2VyLCBhcyBhIHN0cmluZy4KICovCiNbUHVyZV0KZnVuY3Rpb24gcG9zaXhfZ2V0bG9naW4oKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogUmV0dXJuIHRoZSBjdXJyZW50IHByb2Nlc3MgZ3JvdXAgaWRlbnRpZmllcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LWdldHBncnAucGhwCiAqIEByZXR1cm4gaW50IHRoZSBpZGVudGlmaWVyLCBhcyBhbiBpbnRlZ2VyLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBwb3NpeF9nZXRwZ3JwKCk6IGludCB7fQoKLyoqCiAqIE1ha2UgdGhlIGN1cnJlbnQgcHJvY2VzcyBhIHNlc3Npb24gbGVhZGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucG9zaXgtc2V0c2lkLnBocAogKiBAcmV0dXJuIGludCB0aGUgc2Vzc2lvbiBpZCwgb3IgLTEgb24gZXJyb3JzLgogKi8KZnVuY3Rpb24gcG9zaXhfc2V0c2lkKCk6IGludCB7fQoKLyoqCiAqIFNldCBwcm9jZXNzIGdyb3VwIGlkIGZvciBqb2IgY29udHJvbAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LXNldHBnaWQucGhwCiAqIEBwYXJhbSBpbnQgJHByb2Nlc3NfaWQgPHA+CiAqIFRoZSBwcm9jZXNzIGlkLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHByb2Nlc3NfZ3JvdXBfaWQgPHA+CiAqIFRoZSBwcm9jZXNzIGdyb3VwIGlkLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcG9zaXhfc2V0cGdpZChpbnQgJHByb2Nlc3NfaWQsIGludCAkcHJvY2Vzc19ncm91cF9pZCk6IGJvb2wge30KCi8qKgogKiBHZXQgcHJvY2VzcyBncm91cCBpZCBmb3Igam9iIGNvbnRyb2wKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wb3NpeC1nZXRwZ2lkLnBocAogKiBAcGFyYW0gaW50ICRwcm9jZXNzX2lkIDxwPgogKiBUaGUgcHJvY2VzcyBpZC4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSB0aGUgaWRlbnRpZmllciwgYXMgYW4gaW50ZWdlci4KICovCiNbUHVyZV0KZnVuY3Rpb24gcG9zaXhfZ2V0cGdpZChpbnQgJHByb2Nlc3NfaWQpOiBpbnR8ZmFsc2Uge30KCi8qKgogKiBHZXQgdGhlIGN1cnJlbnQgc2lkIG9mIHRoZSBwcm9jZXNzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucG9zaXgtZ2V0c2lkLnBocAogKiBAcGFyYW0gaW50ICRwcm9jZXNzX2lkIDxwPgogKiBUaGUgcHJvY2VzcyBpZGVudGlmaWVyLiBJZiBzZXQgdG8gMCwgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcwogKiBhc3N1bWVkLiBJZiBhbiBpbnZhbGlkIDxpPnBpZDwvaT4gaXMKICogc3BlY2lmaWVkLCB0aGVuIDxiPkZBTFNFPC9iPiBpcyByZXR1cm5lZCBhbmQgYW4gZXJyb3IgaXMgc2V0IHdoaWNoCiAqIGNhbiBiZSBjaGVja2VkIHdpdGggPGI+cG9zaXhfZ2V0X2xhc3RfZXJyb3I8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gaW50fGZhbHNlIHRoZSBpZGVudGlmaWVyLCBhcyBhbiBpbnRlZ2VyLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBwb3NpeF9nZXRzaWQoaW50ICRwcm9jZXNzX2lkKTogaW50fGZhbHNlIHt9CgovKioKICogR2V0IHN5c3RlbSBuYW1lCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucG9zaXgtdW5hbWUucGhwCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYSBoYXNoIG9mIHN0cmluZ3Mgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICogc3lzdGVtLiBUaGUgaW5kaWNlcyBvZiB0aGUgaGFzaCBhcmUKICogc3lzbmFtZSAtIG9wZXJhdGluZyBzeXN0ZW0gbmFtZSAoZS5nLiBMaW51eCkKICogbm9kZW5hbWUgLSBzeXN0ZW0gbmFtZSAoZS5nLiB2YWxpYW50KQogKiByZWxlYXNlIC0gb3BlcmF0aW5nIHN5c3RlbSByZWxlYXNlIChlLmcuIDIuMi4xMCkKICogdmVyc2lvbiAtIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbiAoZS5nLiAjNCBUdWUgSnVsIDIwCiAqIDE3OjAxOjM2IE1FU1QgMTk5OSkKICogbWFjaGluZSAtIHN5c3RlbSBhcmNoaXRlY3R1cmUgKGUuZy4gaTU4NikKICogZG9tYWlubmFtZSAtIEROUyBkb21haW5uYW1lIChlLmcuIGV4YW1wbGUuY29tKQogKiA8L3A+CiAqIDxwPgogKiBkb21haW5uYW1lIGlzIGEgR05VIGV4dGVuc2lvbiBhbmQgbm90IHBhcnQgb2YgUE9TSVguMSwgc28gdGhpcwogKiBmaWVsZCBpcyBvbmx5IGF2YWlsYWJsZSBvbiBHTlUgc3lzdGVtcyBvciB3aGVuIHVzaW5nIHRoZSBHTlUKICogbGliYy4KICovCiNbUHVyZV0KI1tBcnJheVNoYXBlKFsKICAgICdzeXNuYW1lJyA9PiAnc3RyaW5nJywKICAgICdub2RlbmFtZScgPT4gJ3N0cmluZycsCiAgICAncmVsZWFzZScgPT4gJ3N0cmluZycsCiAgICAndmVyc2lvbicgPT4gJ3N0cmluZycsCiAgICAnbWFjaGluZScgPT4gJ3N0cmluZycsCiAgICAnZG9tYWlubmFtZScgPT4gJ3N0cmluZycsCl0pXQpmdW5jdGlvbiBwb3NpeF91bmFtZSgpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEdldCBwcm9jZXNzIHRpbWVzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucG9zaXgtdGltZXMucGhwCiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYSBoYXNoIG9mIHN0cmluZ3Mgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudAogKiBwcm9jZXNzIENQVSB1c2FnZS4gVGhlIGluZGljZXMgb2YgdGhlIGhhc2ggYXJlOgogKiB0aWNrcyAtIHRoZSBudW1iZXIgb2YgY2xvY2sgdGlja3MgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2UKICogcmVib290LgogKiB1dGltZSAtIHVzZXIgdGltZSB1c2VkIGJ5IHRoZSBjdXJyZW50IHByb2Nlc3MuCiAqIHN0aW1lIC0gc3lzdGVtIHRpbWUgdXNlZCBieSB0aGUgY3VycmVudCBwcm9jZXNzLgogKiBjdXRpbWUgLSB1c2VyIHRpbWUgdXNlZCBieSBjdXJyZW50IHByb2Nlc3MgYW5kIGNoaWxkcmVuLgogKiBjc3RpbWUgLSBzeXN0ZW0gdGltZSB1c2VkIGJ5IGN1cnJlbnQgcHJvY2VzcyBhbmQgY2hpbGRyZW4uCiAqLwojW1B1cmVdCiNbQXJyYXlTaGFwZShbCiAgICAndGlja3MnID0+ICdpbnQnLAogICAgJ3V0aW1lJyA9PiAnaW50JywKICAgICdzdGltZScgPT4gJ2ludCcsCiAgICAnY3V0aW1lJyA9PiAnaW50JywKICAgICdjc3RpbWUnID0+ICdpbnQnCl0pXQpmdW5jdGlvbiBwb3NpeF90aW1lcygpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEdldCBwYXRoIG5hbWUgb2YgY29udHJvbGxpbmcgdGVybWluYWwKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wb3NpeC1jdGVybWlkLnBocAogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgcmV0dXJucyBzdHJpbmcgb2YgdGhlIHBhdGhuYW1lIHRvCiAqIHRoZSBjdXJyZW50IGNvbnRyb2xsaW5nIHRlcm1pbmFsLiBPdGhlcndpc2UgPGI+RkFMU0U8L2I+IGlzIHJldHVybmVkIGFuZCBlcnJubwogKiBpcyBzZXQsIHdoaWNoIGNhbiBiZSBjaGVja2VkIHdpdGggPGI+cG9zaXhfZ2V0X2xhc3RfZXJyb3I8L2I+LgogKi8KI1tQdXJlXQpmdW5jdGlvbiBwb3NpeF9jdGVybWlkKCk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIERldGVybWluZSB0ZXJtaW5hbCBkZXZpY2UgbmFtZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LXR0eW5hbWUucGhwCiAqIEBwYXJhbSBpbnQgJGZpbGVfZGVzY3JpcHRvciA8cD4KICogVGhlIGZpbGUgZGVzY3JpcHRvci4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBPbiBzdWNjZXNzLCByZXR1cm5zIGEgc3RyaW5nIG9mIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZQogKiA8aT5mZDwvaT4uIE9uIGZhaWx1cmUsIHJldHVybnMgPGI+RkFMU0U8L2I+CiAqLwojW1B1cmVdCmZ1bmN0aW9uIHBvc2l4X3R0eW5hbWUoJGZpbGVfZGVzY3JpcHRvcik6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIERldGVybWluZSBpZiBhIGZpbGUgZGVzY3JpcHRvciBpcyBhbiBpbnRlcmFjdGl2ZSB0ZXJtaW5hbAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LWlzYXR0eS5waHAKICogQHBhcmFtIG1peGVkICRmaWxlX2Rlc2NyaXB0b3IgPHA+CiAqIFRoZSBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGJlIGVpdGhlciBhIGZpbGUgcmVzb3VyY2Ugb3IgYW4gaW50ZWdlci4KICogQW4gaW50ZWdlciB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCBjYW4gYmUgcGFzc2VkCiAqIGRpcmVjdGx5IHRvIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBjYWxsLjxiciAvPgogKiBJbiBhbG1vc3QgYWxsIGNhc2VzLCB5b3Ugd2lsbCB3YW50IHRvIHByb3ZpZGUgYSBmaWxlIHJlc291cmNlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBpZiA8aT5mZDwvaT4gaXMgYW4gb3BlbiBkZXNjcmlwdG9yIGNvbm5lY3RlZAogKiB0byBhIHRlcm1pbmFsIGFuZCA8Yj5GQUxTRTwvYj4gb3RoZXJ3aXNlLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBwb3NpeF9pc2F0dHkoJGZpbGVfZGVzY3JpcHRvcik6IGJvb2wge30KCi8qKgogKiBQYXRobmFtZSBvZiBjdXJyZW50IGRpcmVjdG9yeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LWdldGN3ZC5waHAKICogQHJldHVybiBzdHJpbmd8ZmFsc2UgYSBzdHJpbmcgb2YgdGhlIGFic29sdXRlIHBhdGhuYW1lIG9uIHN1Y2Nlc3MuCiAqIE9uIGVycm9yLCByZXR1cm5zIDxiPkZBTFNFPC9iPiBhbmQgc2V0cyBlcnJubyB3aGljaCBjYW4gYmUgY2hlY2tlZCB3aXRoCiAqIDxiPnBvc2l4X2dldF9sYXN0X2Vycm9yPC9iPi4KICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gcG9zaXhfZ2V0Y3dkKCk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIENyZWF0ZSBhIGZpZm8gc3BlY2lhbCBmaWxlIChhIG5hbWVkIHBpcGUpCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucG9zaXgtbWtmaWZvLnBocAogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICogUGF0aCB0byB0aGUgRklGTyBmaWxlLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHBlcm1pc3Npb25zIDxwPgogKiBUaGUgc2Vjb25kIHBhcmFtZXRlciA8aT5tb2RlPC9pPiBoYXMgdG8gYmUgZ2l2ZW4gaW4KICogb2N0YWwgbm90YXRpb24gKGUuZy4gMDY0NCkuIFRoZSBwZXJtaXNzaW9uIG9mIHRoZSBuZXdseSBjcmVhdGVkCiAqIEZJRk8gYWxzbyBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mIHRoZSBjdXJyZW50CiAqIDxiPnVtYXNrPC9iPi4gVGhlIHBlcm1pc3Npb25zIG9mIHRoZSBjcmVhdGVkIGZpbGUgYXJlCiAqIChtb2RlICYgfnVtYXNrKS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBvc2l4X21rZmlmbyhzdHJpbmcgJGZpbGVuYW1lLCBpbnQgJHBlcm1pc3Npb25zKTogYm9vbCB7fQoKLyoqCiAqIENyZWF0ZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZSAoUE9TSVguMSkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wb3NpeC1ta25vZC5waHAKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAqIFRoZSBmaWxlIHRvIGNyZWF0ZQogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIDxwPgogKiBUaGlzIHBhcmFtZXRlciBpcyBjb25zdHJ1Y3RlZCBieSBhIGJpdHdpc2UgT1IgYmV0d2VlbiBmaWxlIHR5cGUgKG9uZSBvZgogKiB0aGUgZm9sbG93aW5nIGNvbnN0YW50czogPGI+UE9TSVhfU19JRlJFRzwvYj4sCiAqIDxiPlBPU0lYX1NfSUZDSFI8L2I+LCA8Yj5QT1NJWF9TX0lGQkxLPC9iPiwKICogPGI+UE9TSVhfU19JRklGTzwvYj4gb3IKICogPGI+UE9TSVhfU19JRlNPQ0s8L2I+KSBhbmQgcGVybWlzc2lvbnMuCiAqIDwvcD4KICogQHBhcmFtIGludCAkbWFqb3IgW29wdGlvbmFsXSA8cD4KICogVGhlIG1ham9yIGRldmljZSBrZXJuZWwgaWRlbnRpZmllciAocmVxdWlyZWQgdG8gcGFzcyB3aGVuIHVzaW5nCiAqIDxiPlNfSUZDSFI8L2I+IG9yIDxiPlNfSUZCTEs8L2I+KS4KICogPC9wPgogKiBAcGFyYW0gaW50ICRtaW5vciBbb3B0aW9uYWxdIDxwPgogKiBUaGUgbWlub3IgZGV2aWNlIGtlcm5lbCBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gcG9zaXhfbWtub2Qoc3RyaW5nICRmaWxlbmFtZSwgaW50ICRmbGFncywgaW50ICRtYWpvciA9IDAsIGludCAkbWlub3IgPSAwKTogYm9vbCB7fQoKLyoqCiAqIERldGVybWluZSBhY2Nlc3NpYmlsaXR5IG9mIGEgZmlsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LWFjY2Vzcy5waHAKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHRlc3RlZC4KICogPC9wPgogKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogKiBBIG1hc2sgY29uc2lzdGluZyBvZiBvbmUgb3IgbW9yZSBvZiA8Yj5QT1NJWF9GX09LPC9iPiwKICogPGI+UE9TSVhfUl9PSzwvYj4sIDxiPlBPU0lYX1dfT0s8L2I+IGFuZAogKiA8Yj5QT1NJWF9YX09LPC9iPi4KICogPC9wPgogKiA8cD4KICogPGI+UE9TSVhfUl9PSzwvYj4sIDxiPlBPU0lYX1dfT0s8L2I+IGFuZAogKiA8Yj5QT1NJWF9YX09LPC9iPiByZXF1ZXN0IGNoZWNraW5nIHdoZXRoZXIgdGhlIGZpbGUKICogZXhpc3RzIGFuZCBoYXMgcmVhZCwgd3JpdGUgYW5kIGV4ZWN1dGUgcGVybWlzc2lvbnMsIHJlc3BlY3RpdmVseS4KICogPGI+UE9TSVhfRl9PSzwvYj4ganVzdCByZXF1ZXN0cyBjaGVja2luZyBmb3IgdGhlCiAqIGV4aXN0ZW5jZSBvZiB0aGUgZmlsZS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHBvc2l4X2FjY2VzcyhzdHJpbmcgJGZpbGVuYW1lLCBpbnQgJGZsYWdzID0gUE9TSVhfRl9PSyk6IGJvb2wge30KCi8qKgogKiBSZXR1cm4gaW5mbyBhYm91dCBhIGdyb3VwIGJ5IG5hbWUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wb3NpeC1nZXRncm5hbS5waHAKICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD5UaGUgbmFtZSBvZiB0aGUgZ3JvdXA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgVGhlIGFycmF5IGVsZW1lbnRzIHJldHVybmVkIGFyZToKICogPHRhYmxlPgogKiBUaGUgZ3JvdXAgaW5mb3JtYXRpb24gYXJyYXkKICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkVsZW1lbnQ8L3RkPgogKiA8dGQ+RGVzY3JpcHRpb248L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+bmFtZTwvdGQ+CiAqIDx0ZD4KICogVGhlIG5hbWUgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZ3JvdXAuIFRoaXMgaXMKICogYSBzaG9ydCwgdXN1YWxseSBsZXNzIHRoYW4gMTYgY2hhcmFjdGVyICJoYW5kbGUiIG9mIHRoZQogKiBncm91cCwgbm90IHRoZSByZWFsLCBmdWxsIG5hbWUuIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzCiAqIHRoZSA8aT5uYW1lPC9pPiBwYXJhbWV0ZXIgdXNlZCB3aGVuCiAqIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLCBhbmQgaGVuY2UgcmVkdW5kYW50LgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+cGFzc3dkPC90ZD4KICogPHRkPgogKiBUaGUgcGFzc3dkIGVsZW1lbnQgY29udGFpbnMgdGhlIGdyb3VwJ3MgcGFzc3dvcmQgaW4gYW4KICogZW5jcnlwdGVkIGZvcm1hdC4gT2Z0ZW4sIGZvciBleGFtcGxlIG9uIGEgc3lzdGVtIGVtcGxveWluZwogKiAic2hhZG93IiBwYXNzd29yZHMsIGFuIGFzdGVyaXNrIGlzIHJldHVybmVkIGluc3RlYWQuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5naWQ8L3RkPgogKiA8dGQ+CiAqIEdyb3VwIElEIG9mIHRoZSBncm91cCBpbiBudW1lcmljIGZvcm0uCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5tZW1iZXJzPC90ZD4KICogPHRkPgogKiBUaGlzIGNvbnNpc3RzIG9mIGFuIGFycmF5IG9mCiAqIHN0cmluZydzIGZvciBhbGwgdGhlIG1lbWJlcnMgaW4gdGhlIGdyb3VwLgogKiA8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKi8KI1tQdXJlXQpmdW5jdGlvbiBwb3NpeF9nZXRncm5hbShzdHJpbmcgJG5hbWUpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIFJldHVybiBpbmZvIGFib3V0IGEgZ3JvdXAgYnkgZ3JvdXAgaWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wb3NpeC1nZXRncmdpZC5waHAKICogQHBhcmFtIGludCAkZ3JvdXBfaWQgPHA+CiAqIFRoZSBncm91cCBpZC4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIFRoZSBhcnJheSBlbGVtZW50cyByZXR1cm5lZCBhcmU6CiAqIDx0YWJsZT4KICogVGhlIGdyb3VwIGluZm9ybWF0aW9uIGFycmF5CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5FbGVtZW50PC90ZD4KICogPHRkPkRlc2NyaXB0aW9uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPm5hbWU8L3RkPgogKiA8dGQ+CiAqIFRoZSBuYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwLiBUaGlzIGlzCiAqIGEgc2hvcnQsIHVzdWFsbHkgbGVzcyB0aGFuIDE2IGNoYXJhY3RlciAiaGFuZGxlIiBvZiB0aGUKICogZ3JvdXAsIG5vdCB0aGUgcmVhbCwgZnVsbCBuYW1lLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+cGFzc3dkPC90ZD4KICogPHRkPgogKiBUaGUgcGFzc3dkIGVsZW1lbnQgY29udGFpbnMgdGhlIGdyb3VwJ3MgcGFzc3dvcmQgaW4gYW4KICogZW5jcnlwdGVkIGZvcm1hdC4gT2Z0ZW4sIGZvciBleGFtcGxlIG9uIGEgc3lzdGVtIGVtcGxveWluZwogKiAic2hhZG93IiBwYXNzd29yZHMsIGFuIGFzdGVyaXNrIGlzIHJldHVybmVkIGluc3RlYWQuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5naWQ8L3RkPgogKiA8dGQ+CiAqIEdyb3VwIElELCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlCiAqIDxpPmdpZDwvaT4gcGFyYW1ldGVyIHVzZWQgd2hlbiBjYWxsaW5nIHRoZQogKiBmdW5jdGlvbiwgYW5kIGhlbmNlIHJlZHVuZGFudC4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPm1lbWJlcnM8L3RkPgogKiA8dGQ+CiAqIFRoaXMgY29uc2lzdHMgb2YgYW4gYXJyYXkgb2YKICogc3RyaW5nJ3MgZm9yIGFsbCB0aGUgbWVtYmVycyBpbiB0aGUgZ3JvdXAuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqLwojW1B1cmVdCmZ1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKGludCAkZ3JvdXBfaWQpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIFJldHVybiBpbmZvIGFib3V0IGEgdXNlciBieSB1c2VybmFtZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LWdldHB3bmFtLnBocAogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZSA8cD4KICogQW4gYWxwaGFudW1lcmljIHVzZXJuYW1lLgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgT24gc3VjY2VzcyBhbiBhcnJheSB3aXRoIHRoZSBmb2xsb3dpbmcgZWxlbWVudHMgaXMgcmV0dXJuZWQsIGVsc2UKICogPGI+RkFMU0U8L2I+IGlzIHJldHVybmVkOgogKiA8dGFibGU+CiAqIFRoZSB1c2VyIGluZm9ybWF0aW9uIGFycmF5CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5FbGVtZW50PC90ZD4KICogPHRkPkRlc2NyaXB0aW9uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPm5hbWU8L3RkPgogKiA8dGQ+CiAqIFRoZSBuYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIHVzZXJuYW1lIG9mIHRoZSB1c2VyLiBUaGlzIGlzCiAqIGEgc2hvcnQsIHVzdWFsbHkgbGVzcyB0aGFuIDE2IGNoYXJhY3RlciAiaGFuZGxlIiBvZiB0aGUKICogdXNlciwgbm90IHRoZSByZWFsLCBmdWxsIG5hbWUuIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGFzCiAqIHRoZSA8aT51c2VybmFtZTwvaT4gcGFyYW1ldGVyIHVzZWQgd2hlbgogKiBjYWxsaW5nIHRoZSBmdW5jdGlvbiwgYW5kIGhlbmNlIHJlZHVuZGFudC4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPnBhc3N3ZDwvdGQ+CiAqIDx0ZD4KICogVGhlIHBhc3N3ZCBlbGVtZW50IGNvbnRhaW5zIHRoZSB1c2VyJ3MgcGFzc3dvcmQgaW4gYW4KICogZW5jcnlwdGVkIGZvcm1hdC4gT2Z0ZW4sIGZvciBleGFtcGxlIG9uIGEgc3lzdGVtIGVtcGxveWluZwogKiAic2hhZG93IiBwYXNzd29yZHMsIGFuIGFzdGVyaXNrIGlzIHJldHVybmVkIGluc3RlYWQuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD51aWQ8L3RkPgogKiA8dGQ+CiAqIFVzZXIgSUQgb2YgdGhlIHVzZXIgaW4gbnVtZXJpYyBmb3JtLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Z2lkPC90ZD4KICogPHRkPgogKiBUaGUgZ3JvdXAgSUQgb2YgdGhlIHVzZXIuIFVzZSB0aGUgZnVuY3Rpb24KICogPGI+cG9zaXhfZ2V0Z3JnaWQ8L2I+IHRvIHJlc29sdmUgdGhlIGdyb3VwCiAqIG5hbWUgYW5kIGEgbGlzdCBvZiBpdHMgbWVtYmVycy4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmdlY29zPC90ZD4KICogPHRkPgogKiBHRUNPUyBpcyBhbiBvYnNvbGV0ZSB0ZXJtIHRoYXQgcmVmZXJzIHRvIHRoZSBmaW5nZXIKICogaW5mb3JtYXRpb24gZmllbGQgb24gYSBIb25leXdlbGwgYmF0Y2ggcHJvY2Vzc2luZyBzeXN0ZW0uCiAqIFRoZSBmaWVsZCwgaG93ZXZlciwgbGl2ZXMgb24sIGFuZCBpdHMgY29udGVudHMgaGF2ZSBiZWVuCiAqIGZvcm1hbGl6ZWQgYnkgUE9TSVguIFRoZSBmaWVsZCBjb250YWlucyBhIGNvbW1hIHNlcGFyYXRlZAogKiBsaXN0IGNvbnRhaW5pbmcgdGhlIHVzZXIncyBmdWxsIG5hbWUsIG9mZmljZSBwaG9uZSwgb2ZmaWNlCiAqIG51bWJlciwgYW5kIGhvbWUgcGhvbmUgbnVtYmVyLiBPbiBtb3N0IHN5c3RlbXMsIG9ubHkgdGhlCiAqIHVzZXIncyBmdWxsIG5hbWUgaXMgYXZhaWxhYmxlLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+ZGlyPC90ZD4KICogPHRkPgogKiBUaGlzIGVsZW1lbnQgY29udGFpbnMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGhvbWUKICogZGlyZWN0b3J5IG9mIHRoZSB1c2VyLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+c2hlbGw8L3RkPgogKiA8dGQ+CiAqIFRoZSBzaGVsbCBlbGVtZW50IGNvbnRhaW5zIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZQogKiBleGVjdXRhYmxlIG9mIHRoZSB1c2VyJ3MgZGVmYXVsdCBzaGVsbC4KICogPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICovCiNbUHVyZV0KI1tBcnJheVNoYXBlKFsKICAgICJuYW1lIiA9PiAic3RyaW5nIiwKICAgICJwYXNzd2QiID0+ICJzdHJpbmciLAogICAgInVpZCIgPT4gImludCIsCiAgICAiZ2lkIiA9PiAiaW50IiwKICAgICJnZWNvcyIgPT4gInN0cmluZyIsCiAgICAiZGlyIiA9PiAic3RyaW5nIiwKICAgICJzaGVsbCIgPT4gInN0cmluZyIsCl0pXQpmdW5jdGlvbiBwb3NpeF9nZXRwd25hbShzdHJpbmcgJHVzZXJuYW1lKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBSZXR1cm4gaW5mbyBhYm91dCBhIHVzZXIgYnkgdXNlciBpZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBvc2l4LWdldHB3dWlkLnBocAogKiBAcGFyYW0gaW50ICR1c2VyX2lkIDxwPgogKiBUaGUgdXNlciBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgYW4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOgogKiA8dGFibGU+CiAqIFRoZSB1c2VyIGluZm9ybWF0aW9uIGFycmF5CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5FbGVtZW50PC90ZD4KICogPHRkPkRlc2NyaXB0aW9uPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPm5hbWU8L3RkPgogKiA8dGQ+CiAqIFRoZSBuYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIHVzZXJuYW1lIG9mIHRoZSB1c2VyLiBUaGlzIGlzCiAqIGEgc2hvcnQsIHVzdWFsbHkgbGVzcyB0aGFuIDE2IGNoYXJhY3RlciAiaGFuZGxlIiBvZiB0aGUKICogdXNlciwgbm90IHRoZSByZWFsLCBmdWxsIG5hbWUuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5wYXNzd2Q8L3RkPgogKiA8dGQ+CiAqIFRoZSBwYXNzd2QgZWxlbWVudCBjb250YWlucyB0aGUgdXNlcidzIHBhc3N3b3JkIGluIGFuCiAqIGVuY3J5cHRlZCBmb3JtYXQuIE9mdGVuLCBmb3IgZXhhbXBsZSBvbiBhIHN5c3RlbSBlbXBsb3lpbmcKICogInNoYWRvdyIgcGFzc3dvcmRzLCBhbiBhc3RlcmlzayBpcyByZXR1cm5lZCBpbnN0ZWFkLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+dWlkPC90ZD4KICogPHRkPgogKiBVc2VyIElELCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlCiAqIDxpPnVpZDwvaT4gcGFyYW1ldGVyIHVzZWQgd2hlbiBjYWxsaW5nIHRoZQogKiBmdW5jdGlvbiwgYW5kIGhlbmNlIHJlZHVuZGFudC4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmdpZDwvdGQ+CiAqIDx0ZD4KICogVGhlIGdyb3VwIElEIG9mIHRoZSB1c2VyLiBVc2UgdGhlIGZ1bmN0aW9uCiAqIDxiPnBvc2l4X2dldGdyZ2lkPC9iPiB0byByZXNvbHZlIHRoZSBncm91cAogKiBuYW1lIGFuZCBhIGxpc3Qgb2YgaXRzIG1lbWJlcnMuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5nZWNvczwvdGQ+CiAqIDx0ZD4KICogR0VDT1MgaXMgYW4gb2Jzb2xldGUgdGVybSB0aGF0IHJlZmVycyB0byB0aGUgZmluZ2VyCiAqIGluZm9ybWF0aW9uIGZpZWxkIG9uIGEgSG9uZXl3ZWxsIGJhdGNoIHByb2Nlc3Npbmcgc3lzdGVtLgogKiBUaGUgZmllbGQsIGhvd2V2ZXIsIGxpdmVzIG9uLCBhbmQgaXRzIGNvbnRlbnRzIGhhdmUgYmVlbgogKiBmb3JtYWxpemVkIGJ5IFBPU0lYLiBUaGUgZmllbGQgY29udGFpbnMgYSBjb21tYSBzZXBhcmF0ZWQKICogbGlzdCBjb250YWluaW5nIHRoZSB1c2VyJ3MgZnVsbCBuYW1lLCBvZmZpY2UgcGhvbmUsIG9mZmljZQogKiBudW1iZXIsIGFuZCBob21lIHBob25lIG51bWJlci4gT24gbW9zdCBzeXN0ZW1zLCBvbmx5IHRoZQogKiB1c2VyJ3MgZnVsbCBuYW1lIGlzIGF2YWlsYWJsZS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmRpcjwvdGQ+CiAqIDx0ZD4KICogVGhpcyBlbGVtZW50IGNvbnRhaW5zIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZQogKiBob21lIGRpcmVjdG9yeSBvZiB0aGUgdXNlci4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPnNoZWxsPC90ZD4KICogPHRkPgogKiBUaGUgc2hlbGwgZWxlbWVudCBjb250YWlucyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUKICogZXhlY3V0YWJsZSBvZiB0aGUgdXNlcidzIGRlZmF1bHQgc2hlbGwuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDwvdGFibGU+CiAqLwojW1B1cmVdCiNbQXJyYXlTaGFwZShbCiAgICAnbmFtZScgPT4gJ3N0cmluZycsCiAgICAncGFzc3dkJyA9PiAnc3RyaW5nJywKICAgICd1aWQnID0+ICdpbnQnLAogICAgJ2dpZCcgPT4gJ2ludCcsCiAgICAnZ2Vjb3MnID0+ICdzdHJpbmcnLAogICAgJ2RpcicgPT4gJ3N0cmluZycsCiAgICAnc2hlbGwnID0+ICdzdHJpbmcnLApdKV0KZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoaW50ICR1c2VyX2lkKTogYXJyYXl8ZmFsc2Uge30KCi8qKgogKiBSZXR1cm4gaW5mbyBhYm91dCBzeXN0ZW0gcmVzb3VyY2UgbGltaXRzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucG9zaXgtZ2V0cmxpbWl0LnBocAogKiBAcmV0dXJuIGFycmF5fGZhbHNlIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIGVsZW1lbnRzIGZvciBlYWNoCiAqIGxpbWl0IHRoYXQgaXMgZGVmaW5lZC4gRWFjaCBsaW1pdCBoYXMgYSBzb2Z0IGFuZCBhIGhhcmQgbGltaXQuCiAqIDx0YWJsZT4KICogTGlzdCBvZiBwb3NzaWJsZSBsaW1pdHMgcmV0dXJuZWQKICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPkxpbWl0IG5hbWU8L3RkPgogKiA8dGQ+TGltaXQgZGVzY3JpcHRpb248L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Y29yZTwvdGQ+CiAqIDx0ZD4KICogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgY29yZSBmaWxlLiBXaGVuIDAsIG5vdCBjb3JlIGZpbGVzIGFyZQogKiBjcmVhdGVkLiBXaGVuIGNvcmUgZmlsZXMgYXJlIGxhcmdlciB0aGFuIHRoaXMgc2l6ZSwgdGhleSB3aWxsCiAqIGJlIHRydW5jYXRlZCBhdCB0aGlzIHNpemUuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD50b3RhbG1lbTwvdGQ+CiAqIDx0ZD4KICogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgbWVtb3J5IG9mIHRoZSBwcm9jZXNzLCBpbiBieXRlcy4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPnZpcnR1YWxtZW08L3RkPgogKiA8dGQ+CiAqIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHZpcnR1YWwgbWVtb3J5IGZvciB0aGUgcHJvY2VzcywgaW4gYnl0ZXMuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5kYXRhPC90ZD4KICogPHRkPgogKiBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBkYXRhIHNlZ21lbnQgZm9yIHRoZSBwcm9jZXNzLCBpbiBieXRlcy4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPnN0YWNrPC90ZD4KICogPHRkPgogKiBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBwcm9jZXNzIHN0YWNrLCBpbiBieXRlcy4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPnJzczwvdGQ+CiAqIDx0ZD4KICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHZpcnR1YWwgcGFnZXMgcmVzaWRlbnQgaW4gUkFNCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5tYXhwcm9jPC90ZD4KICogPHRkPgogKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvY2Vzc2VzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgZm9yIHRoZQogKiByZWFsIHVzZXIgSUQgb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcy4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPm1lbWxvY2s8L3RkPgogKiA8dGQ+CiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvZiBtZW1vcnkgdGhhdCBtYXkgYmUgbG9ja2VkIGludG8gUkFNLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+Y3B1PC90ZD4KICogPHRkPgogKiBUaGUgYW1vdW50IG9mIHRpbWUgdGhlIHByb2Nlc3MgaXMgYWxsb3dlZCB0byB1c2UgdGhlIENQVS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPmZpbGVzaXplPC90ZD4KICogPHRkPgogKiBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBkYXRhIHNlZ21lbnQgZm9yIHRoZSBwcm9jZXNzLCBpbiBieXRlcy4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPm9wZW5maWxlczwvdGQ+CiAqIDx0ZD4KICogT25lIG1vcmUgdGhhbiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBmaWxlIGRlc2NyaXB0b3JzLgogKiA8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKi8KI1tQdXJlXQpmdW5jdGlvbiBwb3NpeF9nZXRybGltaXQoI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4zJyldID9pbnQgJHJlc291cmNlID0gbnVsbCk6IGFycmF5fGZhbHNlIHt9CgovKioKICogUmV0cmlldmUgdGhlIGVycm9yIG51bWJlciBzZXQgYnkgdGhlIGxhc3QgcG9zaXggZnVuY3Rpb24gdGhhdCBmYWlsZWQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wb3NpeC1nZXQtbGFzdC1lcnJvci5waHAKICogQHJldHVybiBpbnQgdGhlIGVycm5vIChlcnJvciBudW1iZXIpIHNldCBieSB0aGUgbGFzdCBwb3NpeCBmdW5jdGlvbiB0aGF0CiAqIGZhaWxlZC4gSWYgbm8gZXJyb3JzIGV4aXN0LCAwIGlzIHJldHVybmVkLgogKi8KI1tQdXJlKHRydWUpXQpmdW5jdGlvbiBwb3NpeF9nZXRfbGFzdF9lcnJvcigpOiBpbnQge30KCi8qKgogKiBBbGlhcyBvZiA8Yj5wb3NpeF9nZXRfbGFzdF9lcnJvcjwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wb3NpeC1lcnJuby5waHAKICovCiNbUHVyZSh0cnVlKV0KZnVuY3Rpb24gcG9zaXhfZXJybm8oKTogaW50IHt9CgovKioKICogUmV0cmlldmUgdGhlIHN5c3RlbSBlcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZXJybm8KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wb3NpeC1zdHJlcnJvci5waHAKICogQHBhcmFtIGludCAkZXJyb3JfY29kZSA8cD4KICogQSBQT1NJWCBlcnJvciBudW1iZXIsIHJldHVybmVkIGJ5CiAqIDxiPnBvc2l4X2dldF9sYXN0X2Vycm9yPC9iPi4gSWYgc2V0IHRvIDAsIHRoZW4gdGhlCiAqIHN0cmluZyAiU3VjY2VzcyIgaXMgcmV0dXJuZWQuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgdGhlIGVycm9yIG1lc3NhZ2UsIGFzIGEgc3RyaW5nLgogKi8KI1tQdXJlXQpmdW5jdGlvbiBwb3NpeF9zdHJlcnJvcihpbnQgJGVycm9yX2NvZGUpOiBzdHJpbmcge30KCi8qKgogKiBDYWxjdWxhdGUgdGhlIGdyb3VwIGFjY2VzcyBsaXN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucG9zaXgtaW5pdGdyb3Vwcy5waHAKICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUgPHA+CiAqIFRoZSB1c2VyIHRvIGNhbGN1bGF0ZSB0aGUgbGlzdCBmb3IuCiAqIDwvcD4KICogQHBhcmFtIGludCAkZ3JvdXBfaWQgPHA+CiAqIFR5cGljYWxseSB0aGUgZ3JvdXAgbnVtYmVyIGZyb20gdGhlIHBhc3N3b3JkIGZpbGUuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwojW1B1cmVdCmZ1bmN0aW9uIHBvc2l4X2luaXRncm91cHMoc3RyaW5nICR1c2VybmFtZSwgaW50ICRncm91cF9pZCk6IGJvb2wge30KCi8qKgogKiBAc2luY2UgOC4zCiAqLwpmdW5jdGlvbiBwb3NpeF9zeXNjb25mKGludCAkY29uZl9pZCk6IGludCB7fQoKLyoqCiAqIEBzaW5jZSA4LjMKICovCmZ1bmN0aW9uIHBvc2l4X2VhY2Nlc3Moc3RyaW5nICRmaWxlbmFtZSwgaW50ICRmbGFncyA9IDApOiBib29sIHt9CgovKioKICogQ2hlY2sgd2hldGhlciB0aGUgZmlsZSBleGlzdHMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcG9zaXguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQT1NJWF9GX09LJywgMCk7CgovKioKICogQ2hlY2sgd2hldGhlciB0aGUgZmlsZSBleGlzdHMgYW5kIGhhcyBleGVjdXRlIHBlcm1pc3Npb25zLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bvc2l4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUE9TSVhfWF9PSycsIDEpOwoKLyoqCiAqIENoZWNrIHdoZXRoZXIgdGhlIGZpbGUgZXhpc3RzIGFuZCBoYXMgd3JpdGUgcGVybWlzc2lvbnMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcG9zaXguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQT1NJWF9XX09LJywgMik7CgovKioKICogQ2hlY2sgd2hldGhlciB0aGUgZmlsZSBleGlzdHMgYW5kIGhhcyByZWFkIHBlcm1pc3Npb25zLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bvc2l4LmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnUE9TSVhfUl9PSycsIDQpOwoKLyoqCiAqIE5vcm1hbCBmaWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcG9zaXguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQT1NJWF9TX0lGUkVHJywgMzI3NjgpOwoKLyoqCiAqIENoYXJhY3RlciBzcGVjaWFsIGZpbGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wb3NpeC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BPU0lYX1NfSUZDSFInLCA4MTkyKTsKCi8qKgogKiBCbG9jayBzcGVjaWFsIGZpbGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wb3NpeC5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1BPU0lYX1NfSUZCTEsnLCAyNDU3Nik7CgovKioKICogRklGTyAobmFtZWQgcGlwZSkgc3BlY2lhbCBmaWxlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcG9zaXguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQT1NJWF9TX0lGSUZPJywgNDA5Nik7CgovKioKICogU29ja2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcG9zaXguY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdQT1NJWF9TX0lGU09DSycsIDQ5MTUyKTsKCi8qKgogKiBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZSBpbiBieXRlcy4gU2VlIGFsc28gUEhQJ3MgbWVtb3J5X2xpbWl0IGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bvc2l4LmNvbnN0YW50cy5zZXRybGltaXQucGhwCiAqLwpkZWZpbmUoJ1BPU0lYX1JMSU1JVF9BUycsIDUpOwovKioKICogVGhlIG1heGltdW0gc2l6ZSBvZiBhIGNvcmUgZmlsZS4gSWYgdGhlIGxpbWl0IGlzIHNldCB0byAwLCBubyBjb3JlIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcG9zaXguY29uc3RhbnRzLnNldHJsaW1pdC5waHAKICovCmRlZmluZSgnUE9TSVhfUkxJTUlUX0NPUkUnLCA0KTsKCi8qKgogKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgQ1BVIHRpbWUgdGhhdCB0aGUgcHJvY2VzcyBjYW4gdXNlLCBpbiBzZWNvbmRzLgogKiBXaGVuIHRoZSBzb2Z0IGxpbWl0IGlzIGhpdCwgYSBTSUdYQ1BVIHNpZ25hbCB3aWxsIGJlIHNlbnQsIHdoaWNoIGNhbiBiZSBjYXVnaHQgd2l0aCBwY250bF9zaWduYWwoKS4KICogRGVwZW5kaW5nIG9uIHRoZSBvcGVyYXRpbmcgc3lzdGVtLCBhZGRpdGlvbmFsIFNJR1hDUFUgc2lnbmFscyBtYXkgYmUgc2VudCBlYWNoIHNlY29uZCB1bnRpbCB0aGUgaGFyZCBsaW1pdCBpcyBoaXQsCiAqIGF0IHdoaWNoIHBvaW50IGFuIHVuY2F0Y2hhYmxlIFNJR0tJTEwgc2lnbmFsIGlzIHNlbnQuIFNlZSBhbHNvIHNldF90aW1lX2xpbWl0KCkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcG9zaXguY29uc3RhbnRzLnNldHJsaW1pdC5waHAKICovCmRlZmluZSgnUE9TSVhfUkxJTUlUX0NQVScsIDApOwoKLyoqCiAqIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHByb2Nlc3MncyBkYXRhIHNlZ21lbnQsIGluIGJ5dGVzLgogKiBJdCBpcyBleHRyZW1lbHkgdW5saWtlbHkgdGhhdCB0aGlzIHdpbGwgaGF2ZSBhbnkgZWZmZWN0IG9uCiAqIHRoZSBleGVjdXRpb24gb2YgUEhQIHVubGVzcyBhbiBleHRlbnNpb24gaXMgaW4gdXNlIHRoYXQgY2FsbHMgYnJrKCkgb3Igc2JyaygpLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bvc2l4LmNvbnN0YW50cy5zZXRybGltaXQucGhwCiAqLwpkZWZpbmUoJ1BPU0lYX1JMSU1JVF9EQVRBJywgMik7CgovKioKICogVGhlIG1heGltdW0gc2l6ZSBvZiBmaWxlcyB0aGF0IHRoZSBwcm9jZXNzIGNhbiBjcmVhdGUsIGluIGJ5dGVzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bvc2l4LmNvbnN0YW50cy5zZXRybGltaXQucGhwCiAqLwpkZWZpbmUoJ1BPU0lYX1JMSU1JVF9GU0laRScsIDEpOwoKLyoqCiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsb2NrcyB0aGF0IHRoZSBwcm9jZXNzIGNhbiBjcmVhdGUuCiAqIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgb24gZXh0cmVtZWx5IG9sZCBMaW51eCBrZXJuZWxzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bvc2l4LmNvbnN0YW50cy5zZXRybGltaXQucGhwCiAqLwpkZWZpbmUoJ1BPU0lYX1JMSU1JVF9MT0NLUycsIDEwKTsKCi8qKgogKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkIGZvciBQT1NJWCBtZXNzYWdlIHF1ZXVlcy4KICogUEhQIGRvZXMgbm90IHNoaXAgd2l0aCBzdXBwb3J0IGZvciBQT1NJWCBtZXNzYWdlIHF1ZXVlcywKICogc28gdGhpcyBsaW1pdCB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3QgdW5sZXNzIHlvdSBhcmUgdXNpbmcgYW4gZXh0ZW5zaW9uIHRoYXQgaW1wbGVtZW50cyB0aGF0IHN1cHBvcnQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcG9zaXguY29uc3RhbnRzLnNldHJsaW1pdC5waHAKICovCmRlZmluZSgnUE9TSVhfUkxJTUlUX01TR1FVRVVFJywgMTIpOwoKLyoqCiAqIFRoZSBtYXhpbXVtIHZhbHVlIHRvIHdoaWNoIHRoZSBwcm9jZXNzIGNhbiBiZSA8YSBocmVmPSJodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBjbnRsLXNldHByaW9yaXR5LnBocCI+IHJlbmljZWQ8L2E+IHRvLiBUaGUgdmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgd2lsbCBiZSAyMCAtIGxpbWl0LCBhcyByZXNvdXJjZSBsaW1pdCB2YWx1ZXMgY2Fubm90IGJlIG5lZ2F0aXZlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bvc2l4LmNvbnN0YW50cy5zZXRybGltaXQucGhwCiAqLwpkZWZpbmUoJ1BPU0lYX1JMSU1JVF9OSUNFJywgMTMpOwoKLyoqCiAqIFRoZSBtYXhpbXVtIHJlYWwgdGltZSBwcmlvcml0eSB0aGF0IGNhbiBiZSBzZXQgdmlhIHRoZSBzY2hlZF9zZXRzY2hlZHVsZXIoKSBhbmQgc2NoZWRfc2V0cGFyYW0oKSBzeXN0ZW0gY2FsbHMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcG9zaXguY29uc3RhbnRzLnNldHJsaW1pdC5waHAKICovCmRlZmluZSgnUE9TSVhfUkxJTUlUX1JUUFJJTycsIDE0KTsKCi8qKgogKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgQ1BVIHRpbWUsIGluIG1pY3Jvc2Vjb25kcywKICogdGhhdCB0aGUgcHJvY2VzcyBjYW4gY29uc3VtZSB3aXRob3V0IG1ha2luZyBhIGJsb2NraW5nIHN5c3RlbSBjYWxsIGlmIGl0IGlzIHVzaW5nIHJlYWwgdGltZSBzY2hlZHVsaW5nLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bvc2l4LmNvbnN0YW50cy5zZXRybGltaXQucGhwCiAqLwpkZWZpbmUoJ1BPU0lYX1JMSU1JVF9SVFRJTUUnLCAxNSk7CgovKioKICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25hbHMgdGhhdCBjYW4gYmUgcXVldWVkIGZvciB0aGUgcmVhbCB1c2VyIElEIG9mIHRoZSBwcm9jZXNzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bvc2l4LmNvbnN0YW50cy5zZXRybGltaXQucGhwCiAqLwpkZWZpbmUoJ1BPU0lYX1JMSU1JVF9TSUdQRU5ESU5HJywgMTEpOwoKLyoqCiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSBsb2NrZWQgaW50byBtZW1vcnkuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcG9zaXguY29uc3RhbnRzLnNldHJsaW1pdC5waHAKICovCmRlZmluZSgnUE9TSVhfUkxJTUlUX01FTUxPQ0snLCA2KTsKCi8qKgogKiBBIHZhbHVlIG9uZSBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gZmlsZSBkZXNjcmlwdG9yIG51bWJlciB0aGF0IGNhbiBiZSBvcGVuZWQgYnkgdGhpcyBwcm9jZXNzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3Bvc2l4LmNvbnN0YW50cy5zZXRybGltaXQucGhwCiAqLwpkZWZpbmUoJ1BPU0lYX1JMSU1JVF9OT0ZJTEUnLCA4KTsKCi8qKgogKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvY2Vzc2VzIChhbmQvb3IgdGhyZWFkcywgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcykKICogdGhhdCBjYW4gYmUgY3JlYXRlZCBmb3IgdGhlIHJlYWwgdXNlciBJRCBvZiB0aGUgcHJvY2Vzcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wb3NpeC5jb25zdGFudHMuc2V0cmxpbWl0LnBocAogKi8KZGVmaW5lKCdQT1NJWF9STElNSVRfTlBST0MnLCA3KTsKCi8qKgogKiBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBwcm9jZXNzJ3MgcmVzaWRlbnQgc2V0LCBpbiBwYWdlcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wb3NpeC5jb25zdGFudHMuc2V0cmxpbWl0LnBocAogKi8KZGVmaW5lKCdQT1NJWF9STElNSVRfUlNTJywgNSk7CgovKioKICogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgcHJvY2VzcyBzdGFjaywgaW4gYnl0ZXMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcG9zaXguY29uc3RhbnRzLnNldHJsaW1pdC5waHAKICovCmRlZmluZSgnUE9TSVhfUkxJTUlUX1NUQUNLJywgMyk7CgovKioKICogVXNlZCB0byBpbmRpY2F0ZSBhbiBpbmZpbml0ZSB2YWx1ZSBmb3IgYSByZXNvdXJjZSBsaW1pdC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9wb3NpeC5jb25zdGFudHMuc2V0cmxpbWl0LnBocAogKi8KZGVmaW5lKCdQT1NJWF9STElNSVRfSU5GSU5JVFknLCA5MjIzMzcyMDM2ODU0Nzc1ODA3KTsKCmRlZmluZSgnUE9TSVhfU0NfQVJHX01BWCcsIDApOwpkZWZpbmUoJ1BPU0lYX1NDX1BBR0VTSVpFJywgMzApOwpkZWZpbmUoJ1BPU0lYX1NDX05QUk9DRVNTT1JTX0NPTkYnLCA4Myk7CmRlZmluZSgnUE9TSVhfU0NfTlBST0NFU1NPUlNfT05MTicsIDg0KTsKZGVmaW5lKCdQT1NJWF9QQ19MSU5LX01BWCcsIDApOwpkZWZpbmUoJ1BPU0lYX1BDX01BWF9DQU5PTicsIDEpOwpkZWZpbmUoJ1BPU0lYX1BDX01BWF9JTlBVVCcsIDIpOwpkZWZpbmUoJ1BPU0lYX1BDX05BTUVfTUFYJywgMyk7CmRlZmluZSgnUE9TSVhfUENfUEFUSF9NQVgnLCA0KTsKZGVmaW5lKCdQT1NJWF9QQ19QSVBFX0JVRicsIDUpOwpkZWZpbmUoJ1BPU0lYX1BDX0NIT1dOX1JFU1RSSUNURUQnLCA2KTsKZGVmaW5lKCdQT1NJWF9QQ19OT19UUlVOQycsIDcpOwpkZWZpbmUoJ1BPU0lYX1BDX0FMTE9DX1NJWkVfTUlOJywgMTgpOwpkZWZpbmUoJ1BPU0lYX1BDX1NZTUxJTktfTUFYJywgMTkpOwovKioKICogQHNpbmNlIDguNAogKi8KZGVmaW5lKCdQT1NJWF9TQ19DSElMRF9NQVgnLCAxKTsKLyoqCiAqIEBzaW5jZSA4LjQKICovCmRlZmluZSgnUE9TSVhfU0NfQ0xLX1RDSycsIDIpOwoKLy8gRW5kIG9mIHBvc2l4IHYuCjw/cGhwCgovLyBTdGFydCBvZiBzeXN2bXNnIHYuCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cQXJyYXlTaGFwZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxMYW5ndWFnZUxldmVsVHlwZUF3YXJlOwoKLyoqCiAqIENyZWF0ZSBvciBhdHRhY2ggdG8gYSBtZXNzYWdlIHF1ZXVlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXNnLWdldC1xdWV1ZS5waHAKICogQHBhcmFtIGludCAka2V5IDxwPgogKiBNZXNzYWdlIHF1ZXVlIG51bWVyaWMgSUQKICogPC9wPgogKiBAcGFyYW0gaW50ICRwZXJtaXNzaW9ucyBbb3B0aW9uYWxdIDxwPgogKiBRdWV1ZSBwZXJtaXNzaW9ucy4gRGVmYXVsdCB0byAwNjY2LiBJZiB0aGUgbWVzc2FnZSBxdWV1ZSBhbHJlYWR5CiAqIGV4aXN0cywgdGhlIDxpPnBlcm1zPC9pPiB3aWxsIGJlIGlnbm9yZWQuCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxTeXN2TWVzc2FnZVF1ZXVlfGZhbHNlIGEgcmVzb3VyY2UgaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBTeXN0ZW0gViBtZXNzYWdlIHF1ZXVlLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiU3lzdk1lc3NhZ2VRdWV1ZXxmYWxzZSJdLCBkZWZhdWx0OiAicmVzb3VyY2V8ZmFsc2UiKV0KZnVuY3Rpb24gbXNnX2dldF9xdWV1ZShpbnQgJGtleSwgaW50ICRwZXJtaXNzaW9ucyA9IDA2NjYpIHt9CgovKioKICogU2VuZCBhIG1lc3NhZ2UgdG8gYSBtZXNzYWdlIHF1ZXVlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXNnLXNlbmQucGhwCiAqIEBwYXJhbSBTeXN2TWVzc2FnZVF1ZXVlfHJlc291cmNlICRxdWV1ZQogKiBAcGFyYW0gaW50ICRtZXNzYWdlX3R5cGUKICogQHBhcmFtIG1peGVkICRtZXNzYWdlCiAqIEBwYXJhbSBib29sICRzZXJpYWxpemUgW29wdGlvbmFsXSA8cD4KICogVGhlIG9wdGlvbmFsIDxpPnNlcmlhbGl6ZTwvaT4gY29udHJvbHMgaG93IHRoZQogKiA8aT5tZXNzYWdlPC9pPiBpcyBzZW50LiA8aT5zZXJpYWxpemU8L2k+CiAqIGRlZmF1bHRzIHRvIDxiPlRSVUU8L2I+IHdoaWNoIG1lYW5zIHRoYXQgdGhlIDxpPm1lc3NhZ2U8L2k+IGlzCiAqIHNlcmlhbGl6ZWQgdXNpbmcgdGhlIHNhbWUgbWVjaGFuaXNtIGFzIHRoZSBzZXNzaW9uIG1vZHVsZSBiZWZvcmUgYmVpbmcKICogc2VudCB0byB0aGUgcXVldWUuIFRoaXMgYWxsb3dzIGNvbXBsZXggYXJyYXlzIGFuZCBvYmplY3RzIHRvIGJlIHNlbnQgdG8KICogb3RoZXIgUEhQIHNjcmlwdHMsIG9yIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFdERFggc2VyaWFsaXplciwgdG8gYW55IFdERFgKICogY29tcGF0aWJsZSBjbGllbnQuCiAqIDwvcD4KICogQHBhcmFtIGJvb2wgJGJsb2NraW5nIFtvcHRpb25hbF0gPHA+CiAqIElmIHRoZSBtZXNzYWdlIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gdGhlIHF1ZXVlLCB5b3VyIHNjcmlwdCB3aWxsIHdhaXQKICogdW50aWwgYW5vdGhlciBwcm9jZXNzIHJlYWRzIG1lc3NhZ2VzIGZyb20gdGhlIHF1ZXVlIGFuZCBmcmVlcyBlbm91Z2gKICogc3BhY2UgZm9yIHlvdXIgbWVzc2FnZSB0byBiZSBzZW50LgogKiBUaGlzIGlzIGNhbGxlZCBibG9ja2luZzsgeW91IGNhbiBwcmV2ZW50IGJsb2NraW5nIGJ5IHNldHRpbmcgdGhlCiAqIG9wdGlvbmFsIDxpPmJsb2NraW5nPC9pPiBwYXJhbWV0ZXIgdG8gPGI+RkFMU0U8L2I+LCBpbiB3aGljaAogKiBjYXNlIDxiPm1zZ19zZW5kPC9iPiB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiA8Yj5GQUxTRTwvYj4gaWYgdGhlCiAqIG1lc3NhZ2UgaXMgdG9vIGJpZyBmb3IgdGhlIHF1ZXVlLCBhbmQgc2V0IHRoZSBvcHRpb25hbAogKiA8aT5lcnJvcmNvZGU8L2k+IHRvIDxiPk1TR19FQUdBSU48L2I+LAogKiBpbmRpY2F0aW5nIHRoYXQgeW91IHNob3VsZCB0cnkgdG8gc2VuZCB5b3VyIG1lc3NhZ2UgYWdhaW4gYSBsaXR0bGUKICogbGF0ZXIgb24uCiAqIDwvcD4KICogQHBhcmFtIGludCAmJGVycm9yX2NvZGUgW29wdGlvbmFsXQogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogPHA+CiAqIFVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIHRoZSBtZXNzYWdlIHF1ZXVlIGRhdGEgc3RydWN0dXJlIGlzIHVwZGF0ZWQgYXMKICogZm9sbG93czogPGk+bXNnX2xzcGlkPC9pPiBpcyBzZXQgdG8gdGhlIHByb2Nlc3MtSUQgb2YgdGhlCiAqIGNhbGxpbmcgcHJvY2VzcywgPGk+bXNnX3FudW08L2k+IGlzIGluY3JlbWVudGVkIGJ5IDEgYW5kCiAqIDxpPm1zZ19zdGltZTwvaT4gaXMgc2V0IHRvIHRoZSBjdXJyZW50IHRpbWUuCiAqIDwvcD4KICovCmZ1bmN0aW9uIG1zZ19zZW5kKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlN5c3ZNZXNzYWdlUXVldWUiXSwgZGVmYXVsdDogInJlc291cmNlIildICRxdWV1ZSwgaW50ICRtZXNzYWdlX3R5cGUsICRtZXNzYWdlLCBib29sICRzZXJpYWxpemUgPSB0cnVlLCBib29sICRibG9ja2luZyA9IHRydWUsICYkZXJyb3JfY29kZSk6IGJvb2wge30KCi8qKgogKiBSZWNlaXZlIGEgbWVzc2FnZSBmcm9tIGEgbWVzc2FnZSBxdWV1ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1zZy1yZWNlaXZlLnBocAogKiBAcGFyYW0gU3lzdk1lc3NhZ2VRdWV1ZXxyZXNvdXJjZSAkcXVldWUKICogQHBhcmFtIGludCAkZGVzaXJlZF9tZXNzYWdlX3R5cGUgPHA+CiAqIElmIDxpPmRlc2lyZWRtc2d0eXBlPC9pPiBpcyAwLCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBmcm9udAogKiBvZiB0aGUgcXVldWUgaXMgcmV0dXJuZWQuIElmIDxpPmRlc2lyZWRtc2d0eXBlPC9pPiBpcwogKiBncmVhdGVyIHRoYW4gMCwgdGhlbiB0aGUgZmlyc3QgbWVzc2FnZSBvZiB0aGF0IHR5cGUgaXMgcmV0dXJuZWQuCiAqIElmIDxpPmRlc2lyZWRtc2d0eXBlPC9pPiBpcyBsZXNzIHRoYW4gMCwgdGhlIGZpcnN0CiAqIG1lc3NhZ2Ugb24gdGhlIHF1ZXVlIHdpdGggdGhlIGxvd2VzdCB0eXBlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKICogYWJzb2x1dGUgdmFsdWUgb2YgPGk+ZGVzaXJlZG1zZ3R5cGU8L2k+IHdpbGwgYmUgcmVhZC4KICogSWYgbm8gbWVzc2FnZXMgbWF0Y2ggdGhlIGNyaXRlcmlhLCB5b3VyIHNjcmlwdCB3aWxsIHdhaXQgdW50aWwgYSBzdWl0YWJsZQogKiBtZXNzYWdlIGFycml2ZXMgb24gdGhlIHF1ZXVlLiBZb3UgY2FuIHByZXZlbnQgdGhlIHNjcmlwdCBmcm9tIGJsb2NraW5nCiAqIGJ5IHNwZWNpZnlpbmcgPGI+TVNHX0lQQ19OT1dBSVQ8L2I+IGluIHRoZQogKiA8aT5mbGFnczwvaT4gcGFyYW1ldGVyLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJiRyZWNlaXZlZF9tZXNzYWdlX3R5cGUgPHA+CiAqIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIHRoYXQgd2FzIHJlY2VpdmVkIHdpbGwgYmUgc3RvcmVkIGluIHRoaXMKICogcGFyYW1ldGVyLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJG1heF9tZXNzYWdlX3NpemUgPHA+CiAqIFRoZSBtYXhpbXVtIHNpemUgb2YgbWVzc2FnZSB0byBiZSBhY2NlcHRlZCBpcyBzcGVjaWZpZWQgYnkgdGhlCiAqIDxpPm1heHNpemU8L2k+OyBpZiB0aGUgbWVzc2FnZSBpbiB0aGUgcXVldWUgaXMgbGFyZ2VyCiAqIHRoYW4gdGhpcyBzaXplIHRoZSBmdW5jdGlvbiB3aWxsIGZhaWwgKHVubGVzcyB5b3Ugc2V0CiAqIDxpPmZsYWdzPC9pPiBhcyBkZXNjcmliZWQgYmVsb3cpLgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAmJG1lc3NhZ2UgPHA+CiAqIFRoZSByZWNlaXZlZCBtZXNzYWdlIHdpbGwgYmUgc3RvcmVkIGluIDxpPm1lc3NhZ2U8L2k+LAogKiB1bmxlc3MgdGhlcmUgd2VyZSBlcnJvcnMgcmVjZWl2aW5nIHRoZSBtZXNzYWdlLgogKiA8L3A+CiAqIEBwYXJhbSBib29sICR1bnNlcmlhbGl6ZSBbb3B0aW9uYWxdIDxwPgogKiBJZiBzZXQgdG8KICogPGI+VFJVRTwvYj4sIHRoZSBtZXNzYWdlIGlzIHRyZWF0ZWQgYXMgdGhvdWdoIGl0IHdhcyBzZXJpYWxpemVkIHVzaW5nIHRoZQogKiBzYW1lIG1lY2hhbmlzbSBhcyB0aGUgc2Vzc2lvbiBtb2R1bGUuIFRoZSBtZXNzYWdlIHdpbGwgYmUgdW5zZXJpYWxpemVkCiAqIGFuZCB0aGVuIHJldHVybmVkIHRvIHlvdXIgc2NyaXB0LiBUaGlzIGFsbG93cyB5b3UgdG8gZWFzaWx5IHJlY2VpdmUKICogYXJyYXlzIG9yIGNvbXBsZXggb2JqZWN0IHN0cnVjdHVyZXMgZnJvbSBvdGhlciBQSFAgc2NyaXB0cywgb3IgaWYgeW91CiAqIGFyZSB1c2luZyB0aGUgV0REWCBzZXJpYWxpemVyLCBmcm9tIGFueSBXRERYIGNvbXBhdGlibGUgc291cmNlLgogKiA8L3A+CiAqIDxwPgogKiBJZiA8aT51bnNlcmlhbGl6ZTwvaT4gaXMgPGI+RkFMU0U8L2I+LCB0aGUgbWVzc2FnZSB3aWxsIGJlCiAqIHJldHVybmVkIGFzIGEgYmluYXJ5LXNhZmUgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBvcHRpb25hbCA8aT5mbGFnczwvaT4gYWxsb3dzIHlvdSB0byBwYXNzIGZsYWdzIHRvIHRoZQogKiBsb3ctbGV2ZWwgbXNncmN2IHN5c3RlbSBjYWxsLiBJdCBkZWZhdWx0cyB0byAwLCBidXQgeW91IG1heSBzcGVjaWZ5IG9uZQogKiBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzIChieSBhZGRpbmcgb3IgT1JpbmcgdGhlbSB0b2dldGhlcikuCiAqIDx0YWJsZT4KICogRmxhZyB2YWx1ZXMgZm9yIG1zZ19yZWNlaXZlCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5NU0dfSVBDX05PV0FJVDwvYj48L3RkPgogKiA8dGQ+SWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzIG9mIHRoZQogKiA8aT5kZXNpcmVkbXNndHlwZTwvaT4sIHJldHVybiBpbW1lZGlhdGVseSBhbmQgZG8gbm90CiAqIHdhaXQuIFRoZSBmdW5jdGlvbiB3aWxsIGZhaWwgYW5kIHJldHVybiBhbiBpbnRlZ2VyIHZhbHVlCiAqIGNvcnJlc3BvbmRpbmcgdG8gPGI+TVNHX0VOT01TRzwvYj4uCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD48Yj5NU0dfRVhDRVBUPC9iPjwvdGQ+CiAqIDx0ZD5Vc2luZyB0aGlzIGZsYWcgaW4gY29tYmluYXRpb24gd2l0aCBhCiAqIDxpPmRlc2lyZWRtc2d0eXBlPC9pPiBncmVhdGVyIHRoYW4gMCB3aWxsIGNhdXNlIHRoZQogKiBmdW5jdGlvbiB0byByZWNlaXZlIHRoZSBmaXJzdCBtZXNzYWdlIHRoYXQgaXMgbm90IGVxdWFsIHRvCiAqIDxpPmRlc2lyZWRtc2d0eXBlPC9pPi48L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+PGI+TVNHX05PRVJST1I8L2I+PC90ZD4KICogPHRkPgogKiBJZiB0aGUgbWVzc2FnZSBpcyBsb25nZXIgdGhhbiA8aT5tYXhzaXplPC9pPiwKICogc2V0dGluZyB0aGlzIGZsYWcgd2lsbCB0cnVuY2F0ZSB0aGUgbWVzc2FnZSB0bwogKiA8aT5tYXhzaXplPC9pPiBhbmQgd2lsbCBub3Qgc2lnbmFsIGFuIGVycm9yLgogKiA8L3RkPgogKiA8L3RyPgogKiA8L3RhYmxlPgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJGVycm9yX2NvZGUgW29wdGlvbmFsXSA8cD4KICogSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCB0aGUgb3B0aW9uYWwgPGk+ZXJyb3Jjb2RlPC9pPgogKiB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIHN5c3RlbSBlcnJubyB2YXJpYWJsZS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogPHA+CiAqIFVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIHRoZSBtZXNzYWdlIHF1ZXVlIGRhdGEgc3RydWN0dXJlIGlzIHVwZGF0ZWQgYXMKICogZm9sbG93czogbXNnX2xycGlkIGlzIHNldCB0byB0aGUgcHJvY2Vzcy1JRCBvZiB0aGUKICogY2FsbGluZyBwcm9jZXNzLCBtc2dfcW51bSBpcyBkZWNyZW1lbnRlZCBieSAxIGFuZAogKiBtc2dfcnRpbWUgaXMgc2V0IHRvIHRoZSBjdXJyZW50IHRpbWUuCiAqIDwvcD4KICovCmZ1bmN0aW9uIG1zZ19yZWNlaXZlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlN5c3ZNZXNzYWdlUXVldWUiXSwgZGVmYXVsdDogInJlc291cmNlIildICRxdWV1ZSwgaW50ICRkZXNpcmVkX21lc3NhZ2VfdHlwZSwgJiRyZWNlaXZlZF9tZXNzYWdlX3R5cGUsIGludCAkbWF4X21lc3NhZ2Vfc2l6ZSwgbWl4ZWQgJiAkbWVzc2FnZSwgYm9vbCAkdW5zZXJpYWxpemUgPSB0cnVlLCBpbnQgJGZsYWdzID0gMCwgJiRlcnJvcl9jb2RlKTogYm9vbCB7fQoKLyoqCiAqIERlc3Ryb3kgYSBtZXNzYWdlIHF1ZXVlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXNnLXJlbW92ZS1xdWV1ZS5waHAKICogQHBhcmFtIFN5c3ZNZXNzYWdlUXVldWV8cmVzb3VyY2UgJHF1ZXVlIDxwPgogKiBNZXNzYWdlIHF1ZXVlIHJlc291cmNlIGhhbmRsZQogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24gbXNnX3JlbW92ZV9xdWV1ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJTeXN2TWVzc2FnZVF1ZXVlIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkcXVldWUpOiBib29sIHt9CgovKioKICogUmV0dXJucyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBtZXNzYWdlIHF1ZXVlIGRhdGEgc3RydWN0dXJlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXNnLXN0YXQtcXVldWUucGhwCiAqIEBwYXJhbSBTeXN2TWVzc2FnZVF1ZXVlfHJlc291cmNlICRxdWV1ZSA8cD4KICogTWVzc2FnZSBxdWV1ZSByZXNvdXJjZSBoYW5kbGUKICogPC9wPgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gYXJyYXkgd2hvc2Uga2V5cyBhbmQgdmFsdWVzIGhhdmUgdGhlIGZvbGxvd2luZwogKiBtZWFuaW5nczoKICogPHRhYmxlPgogKiBBcnJheSBzdHJ1Y3R1cmUgZm9yIG1zZ19zdGF0X3F1ZXVlCiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5tc2dfcGVybS51aWQ8L3RkPgogKiA8dGQ+CiAqIFRoZSB1aWQgb2YgdGhlIG93bmVyIG9mIHRoZSBxdWV1ZS4KICogPC90ZD4KICogPC90cj4KICogPHRyIHZhbGlnbj0idG9wIj4KICogPHRkPm1zZ19wZXJtLmdpZDwvdGQ+CiAqIDx0ZD4KICogVGhlIGdpZCBvZiB0aGUgb3duZXIgb2YgdGhlIHF1ZXVlLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+bXNnX3Blcm0ubW9kZTwvdGQ+CiAqIDx0ZD4KICogVGhlIGZpbGUgYWNjZXNzIG1vZGUgb2YgdGhlIHF1ZXVlLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+bXNnX3N0aW1lPC90ZD4KICogPHRkPgogKiBUaGUgdGltZSB0aGF0IHRoZSBsYXN0IG1lc3NhZ2Ugd2FzIHNlbnQgdG8gdGhlIHF1ZXVlLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+bXNnX3J0aW1lPC90ZD4KICogPHRkPgogKiBUaGUgdGltZSB0aGF0IHRoZSBsYXN0IG1lc3NhZ2Ugd2FzIHJlY2VpdmVkIGZyb20gdGhlIHF1ZXVlLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+bXNnX2N0aW1lPC90ZD4KICogPHRkPgogKiBUaGUgdGltZSB0aGF0IHRoZSBxdWV1ZSB3YXMgbGFzdCBjaGFuZ2VkLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+bXNnX3FudW08L3RkPgogKiA8dGQ+CiAqIFRoZSBudW1iZXIgb2YgbWVzc2FnZXMgd2FpdGluZyB0byBiZSByZWFkIGZyb20gdGhlIHF1ZXVlLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+bXNnX3FieXRlczwvdGQ+CiAqIDx0ZD4KICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGFsbG93ZWQgaW4gb25lIG1lc3NhZ2UgcXVldWUuIE9uCiAqIExpbnV4LCB0aGlzIHZhbHVlIG1heSBiZSByZWFkIGFuZCBtb2RpZmllZCB2aWEKICogL3Byb2Mvc3lzL2tlcm5lbC9tc2dtbmIuCiAqIDwvdGQ+CiAqIDwvdHI+CiAqIDx0ciB2YWxpZ249InRvcCI+CiAqIDx0ZD5tc2dfbHNwaWQ8L3RkPgogKiA8dGQ+CiAqIFRoZSBwaWQgb2YgdGhlIHByb2Nlc3MgdGhhdCBzZW50IHRoZSBsYXN0IG1lc3NhZ2UgdG8gdGhlIHF1ZXVlLgogKiA8L3RkPgogKiA8L3RyPgogKiA8dHIgdmFsaWduPSJ0b3AiPgogKiA8dGQ+bXNnX2xycGlkPC90ZD4KICogPHRkPgogKiBUaGUgcGlkIG9mIHRoZSBwcm9jZXNzIHRoYXQgcmVjZWl2ZWQgdGhlIGxhc3QgbWVzc2FnZSBmcm9tIHRoZSBxdWV1ZS4KICogPC90ZD4KICogPC90cj4KICogPC90YWJsZT4KICovCiNbQXJyYXlTaGFwZShbCiAgICAibXNnX3Blcm0udWlkIiA9PiAiaW50IiwKICAgICJtc2dfcGVybS5naWQiID0+ICJpbnQiLAogICAgIm1zZ19wZXJtLm1vZGUiID0+ICJpbnQiLAogICAgIm1zZ19zdGltZSIgPT4gImludCIsCiAgICAibXNnX3J0aW1lIiA9PiAiaW50IiwKICAgICJtc2dfY3RpbWUiID0+ICJpbnQiLAogICAgIm1zZ19xbnVtIiA9PiAiaW50IiwKICAgICJtc2dfcWJ5dGVzIiA9PiAiaW50IiwKICAgICJtc2dfbHNwaWQiID0+ICJpbnQiLAogICAgIm1zZ19scnBpZCIgPT4gImludCIsCl0pXQpmdW5jdGlvbiBtc2dfc3RhdF9xdWV1ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJTeXN2TWVzc2FnZVF1ZXVlIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkcXVldWUpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIFNldCBpbmZvcm1hdGlvbiBpbiB0aGUgbWVzc2FnZSBxdWV1ZSBkYXRhIHN0cnVjdHVyZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1zZy1zZXQtcXVldWUucGhwCiAqIEBwYXJhbSBTeXN2TWVzc2FnZVF1ZXVlfHJlc291cmNlICRxdWV1ZSA8cD4KICogTWVzc2FnZSBxdWV1ZSByZXNvdXJjZSBoYW5kbGUKICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJGRhdGEgPHA+CiAqIFlvdSBzcGVjaWZ5IHRoZSB2YWx1ZXMgeW91IHJlcXVpcmUgYnkgc2V0dGluZyB0aGUgdmFsdWUgb2YgdGhlIGtleXMKICogdGhhdCB5b3UgcmVxdWlyZSBpbiB0aGUgPGk+ZGF0YTwvaT4gYXJyYXkuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBtc2dfc2V0X3F1ZXVlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlN5c3ZNZXNzYWdlUXVldWUiXSwgZGVmYXVsdDogInJlc291cmNlIildICRxdWV1ZSwgYXJyYXkgJGRhdGEpOiBib29sIHt9CgovKioKICogQ2hlY2sgd2hldGhlciBhIG1lc3NhZ2UgcXVldWUgZXhpc3RzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubXNnLXF1ZXVlLWV4aXN0cy5waHAKICogQHBhcmFtIGludCAka2V5IDxwPgogKiBRdWV1ZSBrZXkuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBtc2dfcXVldWVfZXhpc3RzKGludCAka2V5KTogYm9vbCB7fQoKZGVmaW5lKCdNU0dfSVBDX05PV0FJVCcsIDEpOwpkZWZpbmUoJ01TR19FQUdBSU4nLCAxMSk7CmRlZmluZSgnTVNHX0VOT01TRycsIDQyKTsKZGVmaW5lKCdNU0dfTk9FUlJPUicsIDIpOwpkZWZpbmUoJ01TR19FWENFUFQnLCA0KTsKCi8qKgogKiBAc2luY2UgOC4wCiAqLwpmaW5hbCBjbGFzcyBTeXN2TWVzc2FnZVF1ZXVlCnsKICAgIC8qKgogICAgICogQ2Fubm90IGRpcmVjdGx5IGNvbnN0cnVjdCBTeXN2TWVzc2FnZVF1ZXVlLCB1c2UgbXNnX2dldF9xdWV1ZSgpIGluc3RlYWQKICAgICAqIEBzZWUgbXNnX2dldF9xdWV1ZSgpCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQp9CgovLyBFbmQgb2Ygc3lzdm1zZyB2Lgo8P3BocAovKioKICogU3R1YnMgZm9yIFBFQ0wvcnJkIGV4dGVuc2lvbgogKiBEZXNjcmlwdGlvbiB0YWtlbiBmcm9tIG9mZmljaWFsIGRvY3VtZW5hdGlvbgogKiBAbGluayAgICAgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ib29rLnJyZC5waHAKICogQGF1dGhvciAgIE9sZWdzIENhcGxpZ2lucyA8c2hhZGVyQGRhdXRrb20ubHY+CiAqLwoKLy8gc3RhcnQgb2YgUEVDTC9ycmQgdjEuMAoKLyoqCiAqIEdldHMgbGF0ZXN0IGVycm9yIG1lc3NhZ2UKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5ycmQtZXJyb3IucGhwCiAqIEByZXR1cm4gc3RyaW5nIExhdGVzdCBlcnJvciBtZXNzYWdlLgogKiBAc2luY2UgUEVDTCBycmQgPj0gMC45LjAKICovCmZ1bmN0aW9uIHJyZF9lcnJvcigpIHt9CgovKioKICogQ3JlYXRlcyBycmQgZGF0YWJhc2UgZmlsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnJyZC1jcmVhdGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIDxwPgogKiBGaWxlbmFtZSBmb3IgbmV3bHkgY3JlYXRlZCBycmQgZmlsZS4KICogPC9wPgogKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgPHA+CiAqIE9wdGlvbnMgZm9yIHJyZCBjcmVhdGUgLSBsaXN0IG9mIHN0cmluZ3MuIFNlZSBtYW4gcGFnZSBvZiBycmQgY3JlYXRlIGZvciB3aG9sZSBsaXN0IG9mIG9wdGlvbnMuCiAqIDwvcD4KICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogKiBAc2luY2UgUEVDTCBycmQgPj0gMC45LjAKICovCmZ1bmN0aW9uIHJyZF9jcmVhdGUoJGZpbGVuYW1lLCAkb3B0aW9ucykge30KCi8qKgogKiBHZXRzIGRhdGEgZm9yIGdyYXBoIG91dHB1dCBmcm9tIFJSRCBkYXRhYmFzZSBmaWxlIGFzIGFycmF5LiBUaGlzIGZ1bmN0aW9uIGhhcyBzYW1lIHJlc3VsdCBhcyBycmRfZ3JhcGgoKSwgYnV0IGZldGNoZWQgZGF0YSBhcmUgcmV0dXJuZWQgYXMgYXJyYXksIG5vIGltYWdlIGZpbGUgaXMgY3JlYXRlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5ycmQtZmV0Y2gucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgPHA+CiAqIFJSRCBkYXRhYmFzZSBmaWxlIG5hbWUuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRvcHRpb25zIDxwPgogKiBBcnJheSBvZiBvcHRpb25zIGZvciByZXNvbHV0aW9uIHNwZWNpZmljYXRpb24uCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBBcnJheSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHJldHJpZXZlZCBncmFwaCBkYXRhLgogKiBAc2luY2UgUEVDTCBycmQgPj0gMC45LjAKICovCmZ1bmN0aW9uIHJyZF9mZXRjaCgkZmlsZSwgJG9wdGlvbnMpIHt9CgovKioKICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBmaXJzdCBzYW1wbGUgZnJvbSBmcm9tIHRoZSBzcGVjaWZpZWQgUlJBIG9mIHRoZSBSUkQgZmlsZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5ycmQtZmlyc3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgPHA+CiAqIFJSRCBkYXRhYmFzZSBmaWxlIG5hbWUuCiAqIDwvcD4KICogQHBhcmFtIGludCAkcmFhaW5kZXggPHA+CiAqIFRoZSBpbmRleCBudW1iZXIgb2YgdGhlIFJSQSB0aGF0IGlzIHRvIGJlIGV4YW1pbmVkLiBEZWZhdWx0IHZhbHVlIGlzIDAuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgSW50ZWdlciBhcyB1bml4IHRpbWVzdGFtcCwgRkFMU0UgaWYgc29tZSBlcnJvciBvY2N1cnMuCiAqIEBzaW5jZSBQRUNMIHJyZCA+PSAwLjkuMAogKi8KZnVuY3Rpb24gcnJkX2ZpcnN0KCRmaWxlLCAkcmFhaW5kZXggPSAwKSB7fQoKLyoqCiAqIENyZWF0ZXMgaW1hZ2UgZnJvbSBhIGRhdGEuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucnJkLWdyYXBoLnBocAogKiBAcGFyYW0gc3RyaW5nICRmaWxlIDxwPgogKiBUaGUgZmlsZW5hbWUgdG8gb3V0cHV0IHRoZSBncmFwaCB0by4gVGhpcyB3aWxsIGdlbmVyYWxseSBlbmQgaW4gZWl0aGVyIC5wbmcsIC5zdmcgb3IgLmVwcywgZGVwZW5kaW5nIG9uIHRoZSBmb3JtYXQgeW91IHdhbnQgdG8gb3V0cHV0LgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyA8cD4KICogT3B0aW9ucyBmb3IgZ2VuZXJhdGluZyBpbWFnZS4gU2VlIG1hbiBwYWdlIG9mIHJyZCBncmFwaCBmb3IgYWxsIHBvc3NpYmxlIG9wdGlvbnMuIEFsbCBvcHRpb25zIChkYXRhIGRlZmluaXRpb25zLCB2YXJpYWJsZSBkZWZpbml0aW9ucywgZXRjLikgYXJlIGFsbG93ZWQuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBJZiBpbWFnZSBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseSBhbiBhcnJheSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGdlbmVyYXRlZCBpbWFnZSBpcyByZXR1cm5lZCwgRkFMU0Ugd2hlbiBlcnJvciBvY2N1cnMuCiAqIEBzaW5jZSBQRUNMIHJyZCA+PSAwLjkuMAogKi8KZnVuY3Rpb24gcnJkX2dyYXBoKCRmaWxlLCAkb3B0aW9ucykge30KCi8qKgogKiBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHBhcnRpY3VsYXIgUlJEIGRhdGFiYXNlIGZpbGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucnJkLWluZm8ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgPHA+CiAqIFJSRCBkYXRhYmFzZSBmaWxlIG5hbWUuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBcnJheSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHJlcXVzdGVkIFJSRCBmaWxlLCBGQUxTRSB3aGVuIGVycm9yIG9jY3Vycy4KICogQHNpbmNlIFBFQ0wgcnJkID49IDAuOS4wCiAqLwpmdW5jdGlvbiBycmRfaW5mbygkZmlsZSkge30KCi8qKgogKiBSZXR1cm5zIHRoZSBVTklYIHRpbWVzdGFtcCBvZiB0aGUgbW9zdCByZWNlbnQgdXBkYXRlIG9mIHRoZSBSUkQgZGF0YWJhc2UuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucnJkLWxhc3QucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgPHA+CiAqIFJSRCBkYXRhYmFzZSBmaWxlIG5hbWUuCiAqIDwvcD4KICogQHJldHVybiBpbnQgSW50ZWdlciBhcyB1bml4IHRpbWVzdGFtcCBvZiB0aGUgbW9zdCByZWNlbnQgZGF0YSBmcm9tIHRoZSBSUkQgZGF0YWJhc2UuCiAqIEBzaW5jZSBQRUNMIHJyZCA+PSAwLjkuMAogKi8KZnVuY3Rpb24gcnJkX2xhc3QoJGZpbGUpIHt9CgovKioKICogR2V0cyBhcnJheSBvZiB0aGUgVU5JWCB0aW1lc3RhbXAgYW5kIHRoZSB2YWx1ZXMgc3RvcmVkIGZvciBlYWNoIGRhdGUgaW4gdGhlIG1vc3QgcmVjZW50IHVwZGF0ZSBvZiB0aGUgUlJEIGRhdGFiYXNlIGZpbGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucnJkLWxhc3R1cGRhdGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgPHA+CiAqIFJSRCBkYXRhYmFzZSBmaWxlIG5hbWUuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBcnJheSBvZiBpbmZvcm1hdGlvbiBhYm91dCBsYXN0IHVwZGF0ZSwgRkFMU0Ugd2hlbiBlcnJvciBvY2N1cnMuCiAqIEBzaW5jZSBQRUNMIHJyZCA+PSAwLjkuMAogKi8KZnVuY3Rpb24gcnJkX2xhc3R1cGRhdGUoJGZpbGUpIHt9CgovKioKICogUmVzdG9yZXMgdGhlIFJSRCBmaWxlIGZyb20gdGhlIFhNTCBkdW1wLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnJyZC1yZXN0b3JlLnBocAogKiBAcGFyYW0gc3RyaW5nICR4bWxfZmlsZSA8cD4KICogWE1MIGZpbGVuYW1lIHdpdGggdGhlIGR1bXAgb2YgdGhlIG9yaWdpbmFsIFJSRCBkYXRhYmFzZSBmaWxlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHJyZF9maWxlIDxwPgogKiBSZXN0b3JlZCBSUkQgZGF0YWJhc2UgZmlsZSBuYW1lLgogKiA8L3A+CiAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyA8cD4KICogQXJyYXkgb2Ygb3B0aW9ucyBmb3IgcmVzdG9yaW5nLiBTZWUgbWFuIHBhZ2UgZm9yIHJyZCByZXN0b3JlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb3RoZXJ3aXNlLgogKiBAc2luY2UgUEVDTCBycmQgPj0gMC45LjAKICovCmZ1bmN0aW9uIHJyZF9yZXN0b3JlKCR4bWxfZmlsZSwgJHJyZF9maWxlLCAkb3B0aW9ucyA9IFtdKSB7fQoKLyoqCiAqIENoYW5nZSBzb21lIG9wdGlvbnMgaW4gdGhlIFJSRCBkYWJhc2UgaGVhZGVyIGZpbGUuIEUuZy4gcmVuYW1lcyB0aGUgc291cmNlIGZvciB0aGUgZGF0YSBldGMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucnJkLXR1bmUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgPHA+CiAqIFJSRCBkYXRhYmFzZSBmaWxlIG5hbWUuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRvcHRpb25zIDxwPgogKiBPcHRpb25zIHdpdGggUlJEIGRhdGFiYXNlIGZpbGUgcHJvcGVydGllcyB3aGljaCB3aWxsIGJlIGNoYW5nZWQuIFNlZSBycmQgdHVuZSBtYW4gcGFnZSBmb3IgZGV0YWlscy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3MsIEZBTFNFIG90aGVyd2lzZS4KICogQHNpbmNlIFBFQ0wgcnJkID49IDAuOS4wCiAqLwpmdW5jdGlvbiBycmRfdHVuZSgkZmlsZSwgJG9wdGlvbnMpIHt9CgovKioKICogVXBkYXRlcyB0aGUgUlJEIGRhdGFiYXNlIGZpbGUuIFRoZSBpbnB1dCBkYXRhIGlzIHRpbWUgaW50ZXJwb2xhdGVkIGFjY29yZGluZyB0byB0aGUgcHJvcGVydGllcyBvZiB0aGUgUlJEIGRhdGFiYXNlIGZpbGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucnJkLXVwZGF0ZS5waHAKICogQHBhcmFtIHN0cmluZyAkZmlsZSA8cD4KICogUlJEIGRhdGFiYXNlIGZpbGUgbmFtZS4gVGhpcyBkYXRhYmFzZSB3aWxsIGJlIHVwZGF0ZWQuCiAqIDwvcD4KICogQHBhcmFtIGFycmF5ICRvcHRpb25zIDxwPgogKiBPcHRpb25zIGZvciB1cGRhdGluZyB0aGUgUlJEIGRhdGFiYXNlLiBUaGlzIGlzIGxpc3Qgb2Ygc3RyaW5ncy4gU2VlIG1hbiBwYWdlIG9mIHJyZCB1cGRhdGUgZm9yIHdob2xlIGxpc3Qgb2Ygb3B0aW9ucy4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgVXBkYXRlcyB0aGUgUlJEIGRhdGFiYXNlIGZpbGUuIFRoZSBpbnB1dCBkYXRhIGlzIHRpbWUgaW50ZXJwb2xhdGVkIGFjY29yZGluZyB0byB0aGUgcHJvcGVydGllcyBvZiB0aGUgUlJEIGRhdGFiYXNlIGZpbGUuCiAqIEBzaW5jZSBQRUNMIHJyZCA+PSAwLjkuMAogKi8KZnVuY3Rpb24gcnJkX3VwZGF0ZSgkZmlsZSwgJG9wdGlvbnMpIHt9CgovKioKICogUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB1bmRlcmx5aW5nIHJyZHRvb2wgbGlicmFyeS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5ycmQtdmVyc2lvbi5waHAKICogQHJldHVybiBzdHJpbmcgU3RyaW5nIHdpdGggcnJkdG9vbCB2ZXJzaW9uIG51bWJlciBlLmcuICIxLjQuMyIuCiAqIEBzaW5jZSBQRUNMIHJyZCA+PSAxLjAuMAogKi8KZnVuY3Rpb24gcnJkX3ZlcnNpb24oKSB7fQoKLyoqCiAqIEV4cG9ydHMgdGhlIGluZm9ybWF0aW9uIGFib3V0IFJSRCBkYXRhYmFzZSBmaWxlLiBUaGlzIGRhdGEgY2FuIGJlIGNvbnZlcnRlZCB0byBYTUwgZmlsZSB2aWEgdXNlciBzcGFjZSBQSFAgc2NyaXB0IGFuZCB0aGVuIHJlc3RvcmVkIGJhY2sgYXMgUlJEIGRhdGFiYXNlIGZpbGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucnJkLXhwb3J0LnBocAogKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgPHA+CiAqIEFycmF5IG9mIG9wdGlvbnMgZm9yIHRoZSBleHBvcnQsIHNlZSBycmQgeHBvcnQgbWFuIHBhZ2UuCiAqIDwvcD4KICogQHJldHVybiBhcnJheXxmYWxzZSBBcnJheSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IFJSRCBkYXRhYmFzZSBmaWxlLCBGQUxTRSB3aGVuIGVycm9yIG9jY3Vycy4KICogQHNpbmNlIFBFQ0wgcnJkID49IDAuOS4wCiAqLwpmdW5jdGlvbiBycmRfeHBvcnQoJG9wdGlvbnMpIHt9CgovKioKICogQ2xvc2UgYW55IG91dHN0YW5kaW5nIGNvbm5lY3Rpb24gdG8gcnJkIGNhY2hpbmcgZGFlbW9uIDxwPgogKiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIHdoZW4gdGhlIHdob2xlIFBIUCBwcm9jZXNzIGlzIHRlcm1pbmF0ZWQuIEl0IGRlcGVuZHMgb24gdXNlZCBTQVBJLiBGb3IgZXhhbXBsZSwgaXQncyBjYWxsZWQgYXV0b21hdGljYWxseSBhdCB0aGUgZW5kIG9mIGNvbW1hbmQgbGluZSBzY3JpcHQuPC9wPjxwPgogKiBJdCdzIHVwIHVzZXIgd2hldGhlciBoZSB3YW50cyB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYXQgdGhlIGVuZCBvZiBldmVyeSByZXF1ZXN0IG9yIG90aGVyd2lzZS48L3A+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucnJkYy1kaXNjb25uZWN0LnBocAogKiBAcmV0dXJuIHZvaWQKICogQHNpbmNlIFBFQ0wgcnJkID49IDEuMS4yCiAqLwpmdW5jdGlvbiBycmRfZGlzY29ubmVjdCgpIHt9CgovKioKICogQ2xvc2UgYW55IG91dHN0YW5kaW5nIGNvbm5lY3Rpb24gdG8gcnJkIGNhY2hpbmcgZGFlbW9uLgogKiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIHdoZW4gdGhlIHdob2xlIFBIUCBwcm9jZXNzIGlzIHRlcm1pbmF0ZWQuIEl0IGRlcGVuZHMgb24gdXNlZCBTQVBJLgogKiBGb3IgZXhhbXBsZSwgaXQncyBjYWxsZWQgYXV0b21hdGljYWxseSBhdCB0aGUgZW5kIG9mIGNvbW1hbmQgbGluZSBzY3JpcHQuCiAqIEl0J3MgdXAgdXNlciB3aGV0aGVyIGhlIHdhbnRzIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHJlcXVlc3Qgb3Igb3RoZXJ3aXNlLgogKi8KZnVuY3Rpb24gcnJkY19kaXNjb25uZWN0KCkge30KCi8qKgogKiBDbGFzcyBmb3IgY3JlYXRpb24gb2YgUlJEIGRhdGFiYXNlIGZpbGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MucnJkY3JlYXRvci5waHAKICogQHNpbmNlIFBFQ0wgcnJkID49IDAuOS4wCiAqLwpjbGFzcyBSUkRDcmVhdG9yCnsKICAgIC8qKgogICAgICogQWRkcyBSUkEgLSBhcmNoaXZlIG9mIGRhdGEgdmFsdWVzIGZvciBlYWNoIGRhdGEgc291cmNlLiA8cD4KICAgICAqIEFyY2hpdmUgY29uc2lzdHMgb2YgYSBudW1iZXIgb2YgZGF0YSB2YWx1ZXMgb3Igc3RhdGlzdGljcyBmb3IgZWFjaCBvZiB0aGUgZGVmaW5lZCBkYXRhLXNvdXJjZXMgKERTKS4gRGF0YSBzb3VyY2VzIGFyZSBkZWZpbmVkIGJ5IG1ldGhvZCBSUkRDcmVhdG9yOjphZGREYXRhU291cmNlKCkuIFlvdSBuZWVkIGNhbGwgdGhpcyBtZXRob2QgZm9yIGVhY2ggcmVxdWVzdGVkIGFyY2hpdmUuCiAgICAgKiA8L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JyZGNyZWF0b3IuYWRkYXJjaGl2ZS5waHAKICAgICAqIEBzZWUgUlJEQ3JlYXRvcjo6YWRkRGF0YVNvdXJjZSgpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXNjcmlwdGlvbiA8cD4KICAgICAqIENsYXNzIGZvciBjcmVhdGlvbiBvZiBSUkQgZGF0YWJhc2UgZmlsZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHNpbmNlIFBFQ0wgcnJkID49IDAuOS4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRBcmNoaXZlKCRkZXNjcmlwdGlvbikge30KCiAgICAvKioKICAgICAqIEFkZHMgZGF0YSBzb3VyY2UgZGVmaW5pdGlvbiBmb3IgUlJEIGRhdGFiYXNlLjxwPgogICAgICogUlJEIGNhbiBhY2NlcHQgaW5wdXQgZnJvbSBzZXZlcmFsIGRhdGEgc291cmNlcyAoRFMpLCBlLmcgaW5jb21pbmcgYW5kIG91dGdvaW5nIHRyYWZmaWMuIFRoaXMgbWV0aG9kIGFkZHMgZGF0YSBzb3VyY2UgYnkgZGVzY3JpcHRpb24uIFlvdSBuZWVkIGNhbGwgdGhpcyBtZXRob2QgZm9yIGVhY2ggZGF0YSBzb3VyY2UuCiAgICAgKiA8L3A+CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JyZGNyZWF0b3IuYWRkZGF0YXNvdXJjZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRlc2NyaXB0aW9uIDxwPgogICAgICogRGVmaW5pdGlvbiBvZiBkYXRhIHNvdXJjZSAtIERTLiBUaGlzIGhhcyBzYW1lIGZvcm1hdCBhcyBEUyBkZWZpbml0aW9uIGluIHJyZCBjcmVhdGUgY29tbWFuZC4gU2VlIG1hbiBwYWdlIG9mIHJyZCBjcmVhdGUgZm9yIG1vcmUgZGV0YWlscy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHNpbmNlIFBFQ0wgcnJkID49IDAuOS4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGREYXRhU291cmNlKCRkZXNjcmlwdGlvbikge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgbmV3IFJSRENyZWF0b3IgaW5zdGFuY2UuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3JyZGNyZWF0b3IuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aCA8cD4KICAgICAqIFBhdGggZm9yIG5ld2x5IGNyZWF0ZWQgUlJEIGRhdGFiYXNlIGZpbGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdGFydFRpbWUgPHA+CiAgICAgKiBUaW1lIGZvciB0aGUgZmlyc3QgdmFsdWUgaW4gUlJEIGRhdGFiYXNlLiBQYXJhbWV0ZXIgc3VwcG9ydHMgYWxsIGZvcm1hdHMgd2hpY2ggYXJlIHN1cHBvcnRlZCBieSBycmQgY3JlYXRlIGNhbGwuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRzdGVwIDxwPgogICAgICogQmFzZSBpbnRlcnZhbCBpbiBzZWNvbmRzIHdpdGggd2hpY2ggZGF0YSB3aWxsIGJlIGZlZCBpbnRvIHRoZSBSUkQgZGF0YWJhc2UuCiAgICAgKiA8L3A+CiAgICAgKiBAc2luY2UgUEVDTCBycmQgPj0gMC45LjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwYXRoLCAkc3RhcnRUaW1lID0gJycsICRzdGVwID0gMCkge30KCiAgICAvKioKICAgICAqIFNhdmVzIHRoZSBSUkQgZGF0YWJhc2UgaW50byBmaWxlLCB3aGljaCBuYW1lIGlzIGRlZmluZWQgYnkgUlJEQ3JlYXRvcjo6X19jb25zdHJ1Y3QoKQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ycmRjcmVhdG9yLnNhdmUucGhwCiAgICAgKiBAc2VlIFJSRENyZWF0b3I6Ol9fY29uc3RydWN0KCkKICAgICAqIEByZXR1cm4gYm9vbCBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSBQRUNMIHJyZCA+PSAwLjkuMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgpIHt9Cn0KCi8qKgogKiBDbGFzcyBmb3IgZXhwb3J0aW5nIGRhdGEgZnJvbSBSUkQgZGF0YWJhc2UgdG8gaW1hZ2UgZmlsZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5ycmRncmFwaC5waHAKICogQHNpbmNlIFBFQ0wgcnJkID49IDAuOS4wCiAqLwpjbGFzcyBSUkRHcmFwaAp7CiAgICAvKioKICAgICAqIENyZWF0ZXMgbmV3IFJSREdyYXBoIGluc3RhbmNlLiBUaGlzIGluc3RhbmNlIGlzIHJlc3BvbnNpYmxlIGZvciByZW5kZXJpbmcgdGhlIHJlc3VsdCBvZiBSUkQgZGF0YWJhc2UgcXVlcnkgaW50byBpbWFnZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcnJkZ3JhcGguY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aCA8cD4KICAgICAqIEZ1bGwgcGF0aCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UuCiAgICAgKiA8L3A+CiAgICAgKiBAc2luY2UgUEVDTCBycmQgPj0gMC45LjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwYXRoKSB7fQoKICAgIC8qKgogICAgICogU2F2ZXMgdGhlIHJlc3VsdCBvZiBSUkQgZGF0YWJhc2UgcXVlcnkgaW50byBpbWFnZSBkZWZpbmVkIGJ5IFJSREdyYXBoOjpfX2NvbnN0cnVjdCgpLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ycmRncmFwaC5zYXZlLnBocAogICAgICogQHJldHVybiBhcnJheXxmYWxzZSBBcnJheSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGdlbmVyYXRlZCBpbWFnZSBpcyByZXR1cm5lZCwgRkFMU0UgaWYgZXJyb3Igb2NjdXJzLgogICAgICogQHNpbmNlIFBFQ0wgcnJkID49IDAuOS4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzYXZlKCkge30KCiAgICAvKioKICAgICAqIFNhdmVzIHRoZSBSUkQgZGF0YWJhc2UgcXVlcnkgaW50byBpbWFnZSBhbmQgcmV0dXJucyB0aGUgdmVyYm9zZSBpbmZvcm1hdGlvbiBhYm91dCBnZW5lcmF0ZWQgZ3JhcGguIDxwPgogICAgICogSWYgIi0iIGlzIHVzZWQgYXMgaW1hZ2UgZmlsZW5hbWUsIGltYWdlIGRhdGEgYXJlIGFsc28gcmV0dXJuZWQgaW4gcmVzdWx0IGFycmF5LgogICAgICogPC9wPgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ycmRncmFwaC5zYXZldmVyYm9zZS5waHAKICAgICAqIEByZXR1cm4gYXJyYXl8ZmFsc2UgQXJyYXkgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBnZW5lcmF0ZWQgaW1hZ2UgaXMgcmV0dXJuZWQsIG9wdGlvbmFsbHkgd2l0aCBpbWFnZSBkYXRhLCBGQUxTRSBpZiBlcnJvciBvY2N1cnMuCiAgICAgKiBAc2luY2UgUEVDTCBycmQgPj0gMC45LjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmVWZXJib3NlKCkge30KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG9wdGlvbnMgZm9yIHJyZCBncmFwaCBleHBvcnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcnJkZ3JhcGguc2V0b3B0aW9ucy5waHAKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyA8cD4KICAgICAqIExpc3Qgb2Ygb3B0aW9ucyBmb3IgdGhlIGltYWdlIGdlbmVyYXRpb24gZnJvbSB0aGUgUlJEIGRhdGFiYXNlIGZpbGUuIEl0IGNhbiBiZSBsaXN0IG9mIHN0cmluZ3Mgb3IgbGlzdCBvZiBzdHJpbmdzIHdpdGgga2V5cyBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LiBSZWFkIHRoZSBycmQgZ3JhcGggbWFuIHBhZ2VzIGZvciBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAc2luY2UgUEVDTCBycmQgPj0gMC45LjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE9wdGlvbnMoJG9wdGlvbnMpIHt9Cn0KCi8qKgogKiBDbGFzcyBmb3IgdXBkYXRpbmcgUkREIGRhdGFiYXNlIGZpbGUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MucnJkdXBkYXRlci5waHAKICogQHNpbmNlIFBFQ0wgcnJkID49IDAuOS4wCiAqLwpjbGFzcyBSUkRVcGRhdGVyCnsKICAgIC8qKgogICAgICogQ3JlYXRlcyBuZXcgUlJEVXBkYXRlciBpbnN0YW5jZS4gVGhpcyBpbnN0YW5jZSBpcyByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIFJSRCBkYXRhYmFzZSBmaWxlLgogICAgICogUlJEVXBkYXRlciBjb25zdHJ1Y3Rvci4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vcnJkdXBkYXRlci5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIDxwPgogICAgICogRmlsZXN5c3RlbSBwYXRoIGZvciBSUkQgZGF0YWJhc2UgZmlsZSwgd2hpY2ggd2lsbCBiZSB1cGRhdGVkLgogICAgICogPC9wPgogICAgICogQHNpbmNlIFBFQ0wgcnJkID49IDAuOS4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGF0aCkge30KCiAgICAvKioKICAgICAqIFVwZGF0ZSB0aGUgUlJEIGZpbGUgZGVmaW5lZCB2aWEgUlJEVXBkYXRlcjo6X19jb25zdHJ1Y3QoKS4gVGhlIGZpbGUgaXMgdXBkYXRlZCB3aXRoIGEgc3BlY2lmaWMgdmFsdWVzLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9ycmR1cGRhdGVyLnVwZGF0ZS5waHAKICAgICAqIEBwYXJhbSBhcnJheSAkdmFsdWVzIDxwPgogICAgICogRGF0YSBmb3IgdXBkYXRlLiBLZXkgaXMgZGF0YSBzb3VyY2UgbmFtZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHRpbWUgPHA+CiAgICAgKiBUaW1lIHZhbHVlIGZvciB1cGRhdGluZyB0aGUgUlJEIHdpdGggYSBwYXJ0aWN1bGF0IGRhdGEuIERlZmF1bHQgdmFsdWUgaXMgY3VycmVudCB0aW1lLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogICAgICogQHRocm93cyBcRXhjZXB0aW9uIG9uIGVycm9yCiAgICAgKiBAc2luY2UgUEVDTCBycmQgPj0gMC45LjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZSgkdmFsdWVzLCAkdGltZSA9ICcnKSB7fQp9CgovLyBlbmQgb2YgUEVDTC9ycmQgdjEuMAo8P3BocAoKLy8gU3RhcnQgb2Ygd2RkeCB2LgoKLyoqCiAqIFNlcmlhbGl6ZSBhIHNpbmdsZSB2YWx1ZSBpbnRvIGEgV0REWCBwYWNrZXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi53ZGR4LXNlcmlhbGl6ZS12YWx1ZS5waHAKICogQHBhcmFtIG1peGVkICR2YXIgPHA+CiAqIFRoZSB2YWx1ZSB0byBiZSBzZXJpYWxpemVkCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY29tbWVudCBbb3B0aW9uYWxdIDxwPgogKiBBbiBvcHRpb25hbCBjb21tZW50IHN0cmluZyB0aGF0IGFwcGVhcnMgaW4gdGhlIHBhY2tldCBoZWFkZXIuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIFdERFggcGFja2V0LCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqIEByZW1vdmVkIDcuNAogKi8KZnVuY3Rpb24gd2RkeF9zZXJpYWxpemVfdmFsdWUoJHZhciwgJGNvbW1lbnQgPSBudWxsKSB7fQoKLyoqCiAqIFNlcmlhbGl6ZSB2YXJpYWJsZXMgaW50byBhIFdERFggcGFja2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2RkeC1zZXJpYWxpemUtdmFycy5waHAKICogQHBhcmFtIG1peGVkIC4uLiR2YXJfbmFtZXMgPHA+CiAqIENhbiBiZSBlaXRoZXIgYSBzdHJpbmcgbmFtaW5nIGEgdmFyaWFibGUgb3IgYW4gYXJyYXkgY29udGFpbmluZwogKiBzdHJpbmdzIG5hbWluZyB0aGUgdmFyaWFibGVzIG9yIGFub3RoZXIgYXJyYXksIGV0Yy4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgV0REWCBwYWNrZXQsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICogQHJlbW92ZWQgNy40CiAqLwpmdW5jdGlvbiB3ZGR4X3NlcmlhbGl6ZV92YXJzKC4uLiR2YXJfbmFtZXMpIHt9CgovKioKICogU3RhcnRzIGEgbmV3IFdERFggcGFja2V0IHdpdGggc3RydWN0dXJlIGluc2lkZSBpdAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLndkZHgtcGFja2V0LXN0YXJ0LnBocAogKiBAcGFyYW0gc3RyaW5nICRjb21tZW50IFtvcHRpb25hbF0gPHA+CiAqIEFuIG9wdGlvbmFsIGNvbW1lbnQgc3RyaW5nLgogKiA8L3A+CiAqIEByZXR1cm4gcmVzb3VyY2V8ZmFsc2UgYSBwYWNrZXQgSUQgZm9yIHVzZSBpbiBsYXRlciBmdW5jdGlvbnMsIG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICogQHJlbW92ZWQgNy40CiAqLwpmdW5jdGlvbiB3ZGR4X3BhY2tldF9zdGFydCgkY29tbWVudCA9IG51bGwpIHt9CgovKioKICogRW5kcyBhIFdERFggcGFja2V0IHdpdGggdGhlIHNwZWNpZmllZCBJRAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLndkZHgtcGFja2V0LWVuZC5waHAKICogQHBhcmFtIHJlc291cmNlICRwYWNrZXRfaWQgPHA+CiAqIEEgV0REWCBwYWNrZXQsIHJldHVybmVkIGJ5IDxiPndkZHhfcGFja2V0X3N0YXJ0PC9iPi4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyB0aGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFdERFggcGFja2V0LgogKiBAcmVtb3ZlZCA3LjQKICovCmZ1bmN0aW9uIHdkZHhfcGFja2V0X2VuZCgkcGFja2V0X2lkKSB7fQoKLyoqCiAqIEFkZCB2YXJpYWJsZXMgdG8gYSBXRERYIHBhY2tldCB3aXRoIHRoZSBzcGVjaWZpZWQgSUQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi53ZGR4LWFkZC12YXJzLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHBhY2tldF9pZCA8cD4KICogQSBXRERYIHBhY2tldCwgcmV0dXJuZWQgYnkgPGI+d2RkeF9wYWNrZXRfc3RhcnQ8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBtaXhlZCAuLi4kdmFyX25hbWVzIDxwPgogKiBDYW4gYmUgZWl0aGVyIGEgc3RyaW5nIG5hbWluZyBhIHZhcmlhYmxlIG9yIGFuIGFycmF5IGNvbnRhaW5pbmcKICogc3RyaW5ncyBuYW1pbmcgdGhlIHZhcmlhYmxlcyBvciBhbm90aGVyIGFycmF5LCBldGMuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqIEByZW1vdmVkIDcuNAogKi8KZnVuY3Rpb24gd2RkeF9hZGRfdmFycygkcGFja2V0X2lkLCAuLi4kdmFyX25hbWVzKSB7fQoKLyoqCiAqIFVuc2VyaWFsaXplcyBhIFdERFggcGFja2V0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ud2RkeC1kZXNlcmlhbGl6ZS5waHAKICogQHBhcmFtIHN0cmluZyAkcGFja2V0IDxwPgogKiBBIFdERFggcGFja2V0LCBhcyBhIHN0cmluZyBvciBzdHJlYW0uCiAqIDwvcD4KICogQHJldHVybiBtaXhlZCB0aGUgZGVzZXJpYWxpemVkIHZhbHVlIHdoaWNoIGNhbiBiZSBhIHN0cmluZywgYSBudW1iZXIgb3IgYW4KICogYXJyYXkuIE5vdGUgdGhhdCBzdHJ1Y3R1cmVzIGFyZSBkZXNlcmlhbGl6ZWQgaW50byBhc3NvY2lhdGl2ZSBhcnJheXMuCiAqIEByZW1vdmVkIDcuNAogKi8KZnVuY3Rpb24gd2RkeF9kZXNlcmlhbGl6ZSgkcGFja2V0KSB7fQoKLy8gRW5kIG9mIHdkZHggdi4KPD9waHAKCnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGU7CgovKioKICogU2hvdyBkaWFnbm9zdGljIGluZm9ybWF0aW9uCiAqLwpmdW5jdGlvbiB4ZGVidWdfaW5mbyhzdHJpbmcgJGNhdGVnb3J5ID0gJ251bGwnKSB7fQoKLyoqCiAqIFJldHVybnMgYW4gYXJyYXkgb2YgQUxMIHZhbGlkIGluaSBvcHRpb25zIHdpdGggdmFsdWVzIGFuZCBpcyBub3QgdGhlIHNhbWUgYXMgaW5pX2dldF9hbGwoKSB3aGljaCByZXR1cm5zIG9ubHkKICogcmVnaXN0ZXJlZCBpbmkgb3B0aW9ucy4gT25seSB1c2VmdWwgZm9yIGRldnMgdG8gZGVidWcgcGhwLmluaSBzY2FubmVyL3BhcnNlciEKICovCmZ1bmN0aW9uIGNvbmZpZ19nZXRfaGFzaCgpOiBhcnJheSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIHN0YWNrIGRlcHRoIGxldmVsLgogKiBUaGUgbWFpbiBib2R5IG9mIGEgc2NyaXB0IGlzIGxldmVsIDAgYW5kIGVhY2ggaW5jbHVkZSBhbmQvb3IgZnVuY3Rpb24gY2FsbCBhZGRzIG9uZSB0byB0aGUgc3RhY2sgZGVwdGggbGV2ZWwuCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB4ZGVidWdfZ2V0X3N0YWNrX2RlcHRoKCk6IGludCB7fQoKLyoqCiAqIFJldHVybnMgYW4gYXJyYXkgd2hpY2ggcmVzZW1ibGVzIHRoZSBzdGFjayB0cmFjZSB1cCB0byB0aGlzIHBvaW50LgogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiB4ZGVidWdfZ2V0X2Z1bmN0aW9uX3N0YWNrKCNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogIjguNCIpXSBhcnJheSAkb3B0aW9ucyA9IFtdKTogYXJyYXkge30KCi8qKgogKiBEaXNwbGF5cyB0aGUgY3VycmVudCBmdW5jdGlvbiBzdGFjaywgaW4gYSBzaW1pbGFyIHdheSBhcyB3aGF0IFhkZWJ1ZyB3b3VsZCBkaXNwbGF5IGluIGFuIGVycm9yIHNpdHVhdGlvbi4KICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogKiBAcGFyYW0gaW50ICRvcHRpb25zIEEgYml0IG1hc2sgb2YgdGhlIGZvbGxvd2luZyBjb25zdGFudHM6IFhERUJVR19TVEFDS19OT19ERVNDCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24geGRlYnVnX3ByaW50X2Z1bmN0aW9uX3N0YWNrKHN0cmluZyAkbWVzc2FnZSA9ICd1c2VyIHRyaWdnZXJlZCcsIGludCAkb3B0aW9ucyA9IDApIHt9CgovKioKICogUmV0dXJucyBhbiBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgYSB2YXJpYWJsZSBuYW1lIHdoaWNoIGlzIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgc2NvcGUuCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHhkZWJ1Z19nZXRfZGVjbGFyZWRfdmFycygpOiBhcnJheSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlsZW5hbWUgZnJvbSB3aGVyZSB0aGUgY3VycmVudCBmdW5jdGlvbi9tZXRob2Qgd2FzIGV4ZWN1dGVkIGZyb20sIG9yIE5VTEwKICogaWYgdGhlIHN0YWNrIGZyYW1lIGRvZXMgbm90IGV4aXN0CiAqIEBwYXJhbSBpbnQgJGRlcHRoCiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIHhkZWJ1Z19jYWxsX2ZpbGUoaW50ICRkZXB0aCA9IDIpIHt9CgovKioKICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgdGhhdCBkZWZpbmVkIHRoZSBjdXJyZW50IG1ldGhvZCwgTlVMTCBpZiB0aGUgc3RhY2sgZnJhbWUgZG9lcyBub3QgZXhpc3QsCiAqIG9yIEZBTFNFIGlmIG5vIGNsYXNzIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhbGwuCiAqIEBwYXJhbSBpbnQgJGRlcHRoCiAqIEByZXR1cm4gbWl4ZWQKICovCmZ1bmN0aW9uIHhkZWJ1Z19jYWxsX2NsYXNzKGludCAkZGVwdGggPSAyKSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi9tZXRob2QsIE5VTEwgaWYgdGhlIHN0YWNrIGZyYW1lIGRvZXMgbm90IGV4aXN0LCBvciBGQUxTRQogKiBpZiB0aGUgc3RhY2sgZnJhbWUgaGFzIG5vIGZ1bmN0aW9uL21ldGhvZCBpbmZvcm1hdGlvbgogKiBAcGFyYW0gaW50ICRkZXB0aAogKiBAcmV0dXJuIG1peGVkCiAqLwpmdW5jdGlvbiB4ZGVidWdfY2FsbF9mdW5jdGlvbihpbnQgJGRlcHRoID0gMikge30KCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxpbmUgbnVtYmVyIGZyb20gd2hlcmUgdGhlIGN1cnJlbnQgZnVuY3Rpb24vbWV0aG9kIHdhcyBjYWxsZWQgZnJvbSwgb3IgTlVMTAogKiBpZiB0aGUgc3RhY2sgZnJhbWUgZG9lcyBub3QgZXhpc3QKICogQHBhcmFtIGludCAkZGVwdGgKICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24geGRlYnVnX2NhbGxfbGluZShpbnQgJGRlcHRoID0gMikge30KCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyB0aGUgbW9uaXRvcmluZyBvZiBmdW5jdGlvbnMgdGhhdCB3ZXJlIGdpdmVuIGluIGEgbGlzdCBhcyBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uLgogKiBGdW5jdGlvbiBtb25pdG9yaW5nIGFsbG93cyB5b3UgdG8gZmluZCBvdXQgd2hlcmUgaW4geW91ciBjb2RlIHRoZSBmdW5jdGlvbnMgdGhhdCB5b3UgcHJvdmlkZWQgYXMgYXJndW1lbnQgYXJlIGNhbGxlZCBmcm9tLgogKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHRyYWNrIHdoZXJlIG9sZCwgb3IsIGRpc2NvdXJhZ2VkIGZ1bmN0aW9ucyBhcmUgdXNlZC4KICogVGhlIGRlZmluZWQgZnVuY3Rpb25zIGFyZSBjYXNlIHNlbnNpdGl2ZSwgYW5kIGEgZHluYW1pYyBjYWxsIHRvIGEgc3RhdGljIG1ldGhvZCB3aWxsIG5vdCBiZSBjYXVnaHQuCiAqIEBwYXJhbSBzdHJpbmdbXSAkbGlzdE9mRnVuY3Rpb25zVG9Nb25pdG9yCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24geGRlYnVnX3N0YXJ0X2Z1bmN0aW9uX21vbml0b3IoYXJyYXkgJGxpc3RPZkZ1bmN0aW9uc1RvTW9uaXRvcikge30KCi8qKgogKiBUaGlzIGZ1bmN0aW9uIHN0b3BzIHRoZSBmdW5jdGlvbiBtb25pdG9yLgogKiBJbiBvcmRlciB0byBnZXQgdGhlIGxpc3Qgb2YgbW9uaXRvcmVkIGZ1bmN0aW9ucywgeW91IG5lZWQgdG8gdXNlIHRoZSB4ZGVidWdfZ2V0X21vbml0b3JlZF9mdW5jdGlvbnMoKSBmdW5jdGlvbi4KICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB4ZGVidWdfc3RvcF9mdW5jdGlvbl9tb25pdG9yKCkge30KCi8qKgogKiBSZXR1cm5zIGEgc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHRoZSBtb25pdG9yZWQgZnVuY3Rpb25zIHdlcmUgZXhlY3V0ZWQgaW4geW91ciBzY3JpcHQuCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHhkZWJ1Z19nZXRfbW9uaXRvcmVkX2Z1bmN0aW9ucygpOiBhcnJheSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gZGlzcGxheXMgc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBhYm91dCBvbmUgb3IgbW9yZSBleHByZXNzaW9ucyB0aGF0IGluY2x1ZGVzIGl0cyB0eXBlIGFuZCB2YWx1ZS4KICogQXJyYXlzIGFyZSBleHBsb3JlZCByZWN1cnNpdmVseSB3aXRoIHZhbHVlcy4KICogQHBhcmFtIG1peGVkICR2YXIKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB4ZGVidWdfdmFyX2R1bXAobWl4ZWQgLi4uJHZhcmlhYmxlKSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gZGlzcGxheXMgc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBhYm91dCBvbmUgb3IgbW9yZSB2YXJpYWJsZXMgdGhhdCBpbmNsdWRlcyBpdHMgdHlwZSwgdmFsdWUgYW5kIHJlZmNvdW50IGluZm9ybWF0aW9uLgogKiBBcnJheXMgYXJlIGV4cGxvcmVkIHJlY3Vyc2l2ZWx5IHdpdGggdmFsdWVzLgogKiBUaGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGRpZmZlcmVudGx5IGZyb20gUEhQJ3MgZGVidWdfenZhbF9kdW1wKCkgZnVuY3Rpb24gaW4gb3JkZXIgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW1zCiAqIHRoYXQgdGhhdCBmdW5jdGlvbiBoYXMgYmVjYXVzZSB0aGUgdmFyaWFibGUgaXRzZWxmIGlzIGFjdHVhbGx5IHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCiAqIFhkZWJ1ZydzIHZlcnNpb24gaXMgYmV0dGVyIGFzIGl0IHVzZXMgdGhlIHZhcmlhYmxlIG5hbWUgdG8gbG9va3VwIHRoZSB2YXJpYWJsZSBpbiB0aGUgaW50ZXJuYWwgc3ltYm9sIHRhYmxlIGFuZAogKiBhY2Nlc3NlcyBhbGwgdGhlIHByb3BlcnRpZXMgZGlyZWN0bHkgd2l0aG91dCBoYXZpbmcgdG8gZGVhbCB3aXRoIGFjdHVhbGx5IHBhc3NpbmcgYSB2YXJpYWJsZSB0byBhIGZ1bmN0aW9uLgogKiBUaGUgcmVzdWx0IGlzIHRoYXQgdGhlIGluZm9ybWF0aW9uIHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGlzIG11Y2ggbW9yZSBhY2N1cmF0ZSB0aGFuIFBIUCdzIG93biBmdW5jdGlvbgogKiBmb3Igc2hvd2luZyB6dmFsIGluZm9ybWF0aW9uLgogKiBAcGFyYW0gc3RyaW5nIC4uLiR2YXJuYW1lCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24geGRlYnVnX2RlYnVnX3p2YWwoc3RyaW5nIC4uLiR2YXJuYW1lKSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gZGlzcGxheXMgc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBhYm91dCBvbmUgb3IgbW9yZSB2YXJpYWJsZXMgdGhhdCBpbmNsdWRlcyBpdHMgdHlwZSwKICogdmFsdWUgYW5kIHJlZmNvdW50IGluZm9ybWF0aW9uLgogKiBBcnJheXMgYXJlIGV4cGxvcmVkIHJlY3Vyc2l2ZWx5IHdpdGggdmFsdWVzLgogKiBUaGUgZGlmZmVyZW5jZSB3aXRoIHhkZWJ1Z19kZWJ1Z196dmFsKCkgaXMgdGhhdCB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGRpc3BsYXllZCB0aHJvdWdoIGEgd2ViIHNlcnZlciBBUEkgbGF5ZXIsCiAqIGJ1dCBkaXJlY3RseSBzaG93biBvbiBzdGRvdXQgKHNvIHRoYXQgd2hlbiB5b3UgcnVuIGl0IHdpdGggYXBhY2hlIGluIHNpbmdsZSBwcm9jZXNzIG1vZGUgaXQgZW5kcyB1cCBvbiB0aGUgY29uc29sZSkuCiAqIEBwYXJhbSBzdHJpbmcgLi4uJHZhcm5hbWUKICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB4ZGVidWdfZGVidWdfenZhbF9zdGRvdXQoc3RyaW5nIC4uLiR2YXJuYW1lKSB7fQoKLyoqCiAqIEVuYWJsZSBzaG93aW5nIHN0YWNrIHRyYWNlcyBvbiBlcnJvciBjb25kaXRpb25zLgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHhkZWJ1Z19lbmFibGUoKSB7fQoKLyoqCiAqIERpc2FibGUgc2hvd2luZyBzdGFjayB0cmFjZXMgb24gZXJyb3IgY29uZGl0aW9ucy4KICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB4ZGVidWdfZGlzYWJsZSgpIHt9CgovKioKICogUmV0dXJuIHdoZXRoZXIgc3RhY2sgdHJhY2VzIHdvdWxkIGJlIHNob3duIGluIGNhc2Ugb2YgYW4gZXJyb3Igb3Igbm90LgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHhkZWJ1Z19pc19lbmFibGVkKCkge30KCi8qKgogKiBTdGFydHMgcmVjb3JkaW5nIGFsbCBub3RpY2VzLCB3YXJuaW5ncyBhbmQgZXJyb3JzIGFuZCBwcmV2ZW50cyB0aGVpciBkaXNwbGF5CiAqCiAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCwgWGRlYnVnIHdpbGwgY2F1c2UgUEhQIG5vdCB0byBkaXNwbGF5IGFueSBub3RpY2VzLCB3YXJuaW5ncyBvciBlcnJvcnMuCiAqIEluc3RlYWQsIHRoZXkgYXJlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gWGRlYnVnJ3Mgbm9ybWFsIGVycm9yIGZvcm1hdHRpbmcgcnVsZXMgKGllLCB0aGUgZXJyb3IgdGFibGUKICogd2l0aCB0aGUgcmVkIGV4Y2xhbWF0aW9uIG1hcmspIGFuZCB0aGVuIHN0b3JlZCBpbiBhIGJ1ZmZlci4KICogVGhpcyB3aWxsIGNvbnRpbnVlIHVudGlsIHlvdSBjYWxsIHhkZWJ1Z19zdG9wX2Vycm9yX2NvbGxlY3Rpb24oKS4KICoKICogVGhpcyBidWZmZXIncyBjb250ZW50cyBjYW4gYmUgcmV0cmlldmVkIGJ5IGNhbGxpbmcgeGRlYnVnX2dldF9jb2xsZWN0ZWRfZXJyb3JzKCkgYW5kIHRoZW4gc3Vic2VxdWVudGx5IGRpc3BsYXllZC4KICogVGhpcyBpcyByZWFsbHkgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHByZXZlbnQgWGRlYnVnJ3MgcG93ZXJmdWwgZXJyb3IgcmVwb3J0aW5nIGZlYXR1cmVzIGZyb20gZGVzdHJveWluZyB5b3VyIGxheW91dC4KICogQHJldHVybiB2b2lkCiAqLwpmdW5jdGlvbiB4ZGVidWdfc3RhcnRfZXJyb3JfY29sbGVjdGlvbigpIHt9CgovKioKICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLCBlcnJvciBjb2xsZWN0aW9uIGFzIHN0YXJ0ZWQgYnkgeGRlYnVnX3N0YXJ0X2Vycm9yX2NvbGxlY3Rpb24oKSBpcyBhYm9ydGVkLgogKiBUaGUgZXJyb3JzIHN0b3JlZCBpbiB0aGUgY29sbGVjdGlvbiBidWZmZXIgYXJlIG5vdCBkZWxldGVkIGFuZCBzdGlsbCBhdmFpbGFibGUgdG8gYmUgZmV0Y2hlZCB0aHJvdWdoIHhkZWJ1Z19nZXRfY29sbGVjdGVkX2Vycm9ycygpLgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHhkZWJ1Z19zdG9wX2Vycm9yX2NvbGxlY3Rpb24oKSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbGwgZXJyb3JzIGZyb20gdGhlIGNvbGxlY3Rpb24gYnVmZmVyIHRoYXQgY29udGFpbnMgYWxsIGVycm9ycyB0aGF0IHdlcmUgc3RvcmVkIHRoZXJlIHdoZW4gZXJyb3IgY29sbGVjdGlvbiB3YXMgc3RhcnRlZCB3aXRoIHhkZWJ1Z19zdGFydF9lcnJvcl9jb2xsZWN0aW9uKCkuCiAqIEJ5IGRlZmF1bHQgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBjbGVhciB0aGUgZXJyb3IgY29sbGVjdGlvbiBidWZmZXIuIElmIHlvdSBwYXNzIHRydWUgYXMgYXJndW1lbnQgdG8gdGhpcyBmdW5jdGlvbiB0aGVuIHRoZSBidWZmZXIgd2lsbCBiZSBjbGVhcmVkIGFzIHdlbGwuCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIGFsbCBjb2xsZWN0ZWQgZXJyb3JzIGZvcm1hdHRlZCBhcyBhbiAiWGRlYnVnIHRhYmxlIi4KICogQHBhcmFtIGJvb2wgJGVtcHR5TGlzdAogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiB4ZGVidWdfZ2V0X2NvbGxlY3RlZF9lcnJvcnMoYm9vbCAkZW1wdHlMaXN0ID0gZmFsc2UpOiBhcnJheSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgdGhlIGRlYnVnZ2VyIGJyZWFrIG9uIHRoZSBzcGVjaWZpYyBsaW5lIGFzIGlmIGEgbm9ybWFsIGZpbGUvbGluZSBicmVha3BvaW50IHdhcyBzZXQgb24gdGhpcyBsaW5lLgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHhkZWJ1Z19icmVhaygpOiBib29sIHt9CgovKioKICogU3RhcnQgdHJhY2luZyBmdW5jdGlvbiBjYWxscyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhlIGZpbGUgaW4gdGhlIHRyYWNlX2ZpbGUgcGFyYW1ldGVyLgogKiBJZiBubyBmaWxlbmFtZSBpcyBnaXZlbiwgdGhlbiB0aGUgdHJhY2UgZmlsZSB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgZGlyZWN0b3J5IGFzIGNvbmZpZ3VyZWQgYnkgdGhlIHhkZWJ1Zy50cmFjZV9vdXRwdXRfZGlyIHNldHRpbmcuCiAqIEluIGNhc2UgYSBmaWxlIG5hbWUgaXMgZ2l2ZW4gYXMgZmlyc3QgcGFyYW1ldGVyLCB0aGUgbmFtZSBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICogVGhpcyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IG1pZ2h0IGJlIGRpZmZlcmVudCB0aGFuIHlvdSBleHBlY3QgaXQgdG8gYmUsIHNvIHBsZWFzZSB1c2UgYW4gYWJzb2x1dGUgcGF0aCBpbiBjYXNlIHlvdSBzcGVjaWZ5IGEgZmlsZSBuYW1lLgogKiBVc2UgdGhlIFBIUCBmdW5jdGlvbiBnZXRjd2QoKSB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMuCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdHJhY2VGaWxlCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMKICogQHJldHVybiBzdHJpbmd8bnVsbAogKi8KZnVuY3Rpb24geGRlYnVnX3N0YXJ0X3RyYWNlKD9zdHJpbmcgJHRyYWNlRmlsZSA9IG51bGwsIGludCAkb3B0aW9ucyA9IDApOiA/c3RyaW5nIHt9CgovKioKICogU3RvcCB0cmFjaW5nIGZ1bmN0aW9uIGNhbGxzIGFuZCBjbG9zZXMgdGhlIHRyYWNlIGZpbGUuCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiB4ZGVidWdfc3RvcF90cmFjZSgpOiBzdHJpbmcge30KCi8qKgogKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHdoaWNoIGlzIHVzZWQgdG8gdHJhY2UgdGhlIG91dHB1dCBvZiB0aGlzIHNjcmlwdCB0b28uCiAqIFRoaXMgaXMgdXNlZnVsIHdoZW4geGRlYnVnLmF1dG9fdHJhY2UgaXMgZW5hYmxlZC4KICogQHJldHVybiBzdHJpbmd8bnVsbAogKi8KZnVuY3Rpb24geGRlYnVnX2dldF90cmFjZWZpbGVfbmFtZSgpIHt9CgovKioKICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3aGljaCBpcyB1c2VkIHRvIHNhdmUgcHJvZmlsZSBpbmZvcm1hdGlvbiB0by4KICoKICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICovCmZ1bmN0aW9uIHhkZWJ1Z19nZXRfcHJvZmlsZXJfZmlsZW5hbWUoKSB7fQoKLyoqCiAqIEBwYXJhbSAkcHJlZml4IFtvcHRpb25hbF0KICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB4ZGVidWdfZHVtcF9hZ2dyX3Byb2ZpbGluZ19kYXRhKCRwcmVmaXgpIHt9CgovKioKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiB4ZGVidWdfY2xlYXJfYWdncl9wcm9maWxpbmdfZGF0YSgpIHt9CgovKioKICogUmV0dXJucyB0aGUgY3VycmVudCBhbW91bnQgb2YgbWVtb3J5IHRoZSBzY3JpcHQgdXNlcy4KICogQmVmb3JlIFBIUCA1LjIuMSwgdGhpcyBvbmx5IHdvcmtzIGlmIFBIUCBpcyBjb21waWxlZCB3aXRoIC0tZW5hYmxlLW1lbW9yeS1saW1pdC4KICogRnJvbSBQSFAgNS4yLjEgYW5kIGxhdGVyIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGF2YWlsYWJsZS4KICoKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHhkZWJ1Z19tZW1vcnlfdXNhZ2UoKTogaW50IHt9CgovKioKICogUmV0dXJucyB0aGUgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHRoZSBzY3JpcHQgdXNlZCB1bnRpbCBub3cuCiAqIEJlZm9yZSBQSFAgNS4yLjEsIHRoaXMgb25seSB3b3JrcyBpZiBQSFAgaXMgY29tcGlsZWQgd2l0aCAtLWVuYWJsZS1tZW1vcnktbGltaXQuCiAqIEZyb20gUEhQIDUuMi4xIGFuZCBsYXRlciB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBhdmFpbGFibGUuCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiB4ZGVidWdfcGVha19tZW1vcnlfdXNhZ2UoKTogaW50IHt9CgovKioKICogUmV0dXJucyB0aGUgY3VycmVudCB0aW1lIGluZGV4IHNpbmNlIHRoZSBzdGFydGluZyBvZiB0aGUgc2NyaXB0IGluIHNlY29uZHMuCiAqCiAqIEByZXR1cm4gZmxvYXQKICovCmZ1bmN0aW9uIHhkZWJ1Z190aW1lX2luZGV4KCk6IGZsb2F0IHt9CgovKioKICogVGhpcyBmdW5jdGlvbiBzdGFydHMgZ2F0aGVyaW5nIHRoZSBpbmZvcm1hdGlvbiBmb3IgY29kZSBjb3ZlcmFnZS4KICogVGhlIGluZm9ybWF0aW9uIHRoYXQgaXMgY29sbGVjdGVkIGNvbnNpc3RzIG9mIGFuIHR3byBkaW1lbnNpb25hbCBhcnJheSB3aXRoIGFzIHByaW1hcnkgaW5kZXggdGhlIGV4ZWN1dGVkIGZpbGVuYW1lIGFuZCBhcyBzZWNvbmRhcnkga2V5IHRoZSBsaW5lIG51bWJlci4KICogVGhlIHZhbHVlIGluIHRoZSBlbGVtZW50cyByZXByZXNlbnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgZXhlY3V0aW9uIHVuaXRzIG9uIHRoaXMgbGluZSBoYXZlIGJlZW4gZXhlY3V0ZWQuCiAqIE9wdGlvbnMgdG8gdGhpcyBmdW5jdGlvbiBhcmU6IFhERUJVR19DQ19VTlVTRUQgRW5hYmxlcyBzY2FubmluZyBvZiBjb2RlIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbGluZSBoYXMgZXhlY3V0YWJsZSBjb2RlLgogKiBYREVCVUdfQ0NfREVBRF9DT0RFIEVuYWJsZXMgYnJhbmNoIGFuYWx5emVzIHRvIGZpZ3VyZSBvdXQgd2hldGhlciBjb2RlIGNhbiBiZSBleGVjdXRlZC4KICoKICogQHBhcmFtIGludCAkb3B0aW9ucwogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHhkZWJ1Z19zdGFydF9jb2RlX2NvdmVyYWdlKGludCAkb3B0aW9ucyA9IDApIHt9CgovKioKICogVGhpcyBmdW5jdGlvbiBzdG9wcyBjb2xsZWN0aW5nIGluZm9ybWF0aW9uLCB0aGUgaW5mb3JtYXRpb24gaW4gbWVtb3J5IHdpbGwgYmUgZGVzdHJveWVkLgogKiBJZiB5b3UgcGFzcyAwICgiZmFsc2UiKSBhcyBhcmd1bWVudCwgdGhlbiB0aGUgY29kZSBjb3ZlcmFnZSBpbmZvcm1hdGlvbiB3aWxsIG5vdCBiZSBkZXN0cm95ZWQgc28gdGhhdCB5b3UgY2FuIHJlc3VtZQogKiB0aGUgZ2F0aGVyaW5nIG9mIGluZm9ybWF0aW9uIHdpdGggdGhlIHhkZWJ1Z19zdGFydF9jb2RlX2NvdmVyYWdlKCkgZnVuY3Rpb24gYWdhaW4uCiAqIEBwYXJhbSBib29sICRjbGVhblVwIERlc3Ryb3kgY29sbGVjdGVkIGluZm9ybWF0aW9uIGluIG1lbW9yeQogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHhkZWJ1Z19zdG9wX2NvZGVfY292ZXJhZ2UoYm9vbCAkY2xlYW5VcCA9IHRydWUpIHt9CgovKioKICogUmV0dXJucyB3aGV0aGVyIGNvZGUgY292ZXJhZ2UgaXMgYWN0aXZlLgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHhkZWJ1Z19jb2RlX2NvdmVyYWdlX3N0YXJ0ZWQoKTogYm9vbCB7fQoKLyoqCiAqIFJldHVybnMgYSBzdHJ1Y3R1cmUgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggbGluZXMKICogd2VyZSBleGVjdXRlZCBpbiB5b3VyIHNjcmlwdCAoaW5jbHVkaW5nIGluY2x1ZGUgZmlsZXMpLgogKgogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiB4ZGVidWdfZ2V0X2NvZGVfY292ZXJhZ2UoKTogYXJyYXkge30KCi8qKgogKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZnVuY3Rpb25zIGNhbGxlZCwgaW5jbHVkaW5nIGNvbnN0cnVjdG9ycywgZGVzY3RydWN0b3JzIGFuZCBtZXRob2RzLgogKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24geGRlYnVnX2dldF9mdW5jdGlvbl9jb3VudCgpOiBpbnQge30KCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGR1bXBzIHRoZSB2YWx1ZXMgb2YgdGhlIGVsZW1lbnRzIG9mIHRoZSBzdXBlciBnbG9iYWxzCiAqIGFzIHNwZWNpZmllZCB3aXRoIHRoZSB4ZGVidWcuZHVtcC4qIHBocC5pbmkgc2V0dGluZ3MuCiAqCiAqIEByZXR1cm4gdm9pZAogKi8KZnVuY3Rpb24geGRlYnVnX2R1bXBfc3VwZXJnbG9iYWxzKCkge30KCi8qKgogKiBSZXR1cm5zIGFsbCB0aGUgaGVhZGVycyB0aGF0IGFyZSBzZXQgd2l0aCBQSFAncyBoZWFkZXIoKSBmdW5jdGlvbiwKICogb3IgYW55IG90aGVyIGhlYWRlciBzZXQgaW50ZXJuYWxseSB3aXRoaW4gUEhQIChzdWNoIGFzIHRocm91Z2ggc2V0Y29va2llKCkpLCBhcyBhbiBhcnJheS4KICoKICogQHJldHVybiBhcnJheQogKi8KZnVuY3Rpb24geGRlYnVnX2dldF9oZWFkZXJzKCk6IGFycmF5IHt9CgpmdW5jdGlvbiB4ZGVidWdfZ2V0X2Zvcm1hdHRlZF9mdW5jdGlvbl9zdGFjaygpIHt9CgovKioKICogUmV0dXJucyB3aGV0aGVyIGEgZGVidWdnaW5nIHNlc3Npb24gaXMgYWN0aXZlLgogKgogKiBSZXR1cm5zIHRydWUgaWYgYSBkZWJ1Z2dpbmcgc2Vzc2lvbiB0aHJvdWdoIERCR3AgaXMgY3VycmVudGx5IGFjdGl2ZSB3aXRoIGEgY2xpZW50IGF0dGFjaGVkOyBmYWxzZSwgaWYgbm90LgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIHhkZWJ1Z19pc19kZWJ1Z2dlcl9hY3RpdmUoKTogYm9vbCB7fQoKLyoqCiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkZ2NzdGF0c0ZpbGUKICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24geGRlYnVnX3N0YXJ0X2djc3RhdHMoP3N0cmluZyAkZ2NzdGF0c0ZpbGUgPSBudWxsKSB7fQoKLyoqCiAqIFN0b3AgZ2FyYmFnZSBjb2xsZWN0aW9uIHN0YXRpc3RpY3MgY29sbGVjdGlvbiBhbmQgY2xvc2VzIHRoZSBvdXRwdXQgZmlsZS4KICogQHJldHVybiBzdHJpbmcgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpbGVuYW1lIG9mIHRoZSBmaWxlIHdoZXJlIHRoZSBzdGF0aXN0aWNzIHdlcmUgd3JpdHRlbiB0by4KICovCmZ1bmN0aW9uIHhkZWJ1Z19zdG9wX2djc3RhdHMoKTogc3RyaW5nIHt9CgovKioKICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3aGljaCBpcyB1c2VkIHRvIHNhdmUgZ2FyYmFnZSBjb2xsZWN0aW9uIGluZm9ybWF0aW9uIHRvLCBvciBmYWxzZSBpZgogKiBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gaXMgbm90IGFjdGl2ZS4KICogQHJldHVybiBtaXhlZAogKi8KZnVuY3Rpb24geGRlYnVnX2dldF9nY3N0YXRzX2ZpbGVuYW1lKCkge30KCi8qKgogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24geGRlYnVnX2dldF9nY19ydW5fY291bnQoKTogaW50IHt9CgovKioKICogQHJldHVybiBpbnQKICovCmZ1bmN0aW9uIHhkZWJ1Z19nZXRfZ2NfdG90YWxfY29sbGVjdGVkX3Jvb3RzKCk6IGludCB7fQoKLyoqCiAqIEBwYXJhbSBpbnQgJGdyb3VwCiAqIEBwYXJhbSBpbnQgJGxpc3RUeXBlCiAqIEBwYXJhbSBhcnJheSAkY29uZmlndXJhdGlvbgogKiBAcmV0dXJuIHZvaWQKICovCmZ1bmN0aW9uIHhkZWJ1Z19zZXRfZmlsdGVyKGludCAkZ3JvdXAsIGludCAkbGlzdFR5cGUsIGFycmF5ICRjb25maWd1cmF0aW9uKSB7fQoKZnVuY3Rpb24geGRlYnVnX2Nvbm5lY3RfdG9fY2xpZW50KCk6IGJvb2wge30KCmZ1bmN0aW9uIHhkZWJ1Z19ub3RpZnkobWl4ZWQgJGRhdGEpOiBib29sIHt9CgpkZWZpbmUoJ1hERUJVR19TVEFDS19OT19ERVNDJywgMSk7CmRlZmluZSgnWERFQlVHX1RSQUNFX0FQUEVORCcsIDEpOwpkZWZpbmUoJ1hERUJVR19UUkFDRV9DT01QVVRFUklaRUQnLCAyKTsKZGVmaW5lKCdYREVCVUdfVFJBQ0VfSFRNTCcsIDQpOwpkZWZpbmUoJ1hERUJVR19UUkFDRV9OQUtFRF9GSUxFTkFNRScsIDgpOwpkZWZpbmUoJ1hERUJVR19DQ19VTlVTRUQnLCAxKTsKZGVmaW5lKCdYREVCVUdfQ0NfREVBRF9DT0RFJywgMik7CmRlZmluZSgnWERFQlVHX0NDX0JSQU5DSF9DSEVDSycsIDQpOwpkZWZpbmUoJ1hERUJVR19GSUxURVJfVFJBQ0lORycsIDc2OCk7CmRlZmluZSgnWERFQlVHX0ZJTFRFUl9TVEFDSycsIDUxMik7CmRlZmluZSgnWERFQlVHX0ZJTFRFUl9DT0RFX0NPVkVSQUdFJywgMjU2KTsKZGVmaW5lKCdYREVCVUdfRklMVEVSX05PTkUnLCAwKTsKZGVmaW5lKCdYREVCVUdfUEFUSF9XSElURUxJU1QnLCAxKTsKZGVmaW5lKCdYREVCVUdfUEFUSF9CTEFDS0xJU1QnLCAyKTsKZGVmaW5lKCdYREVCVUdfTkFNRVNQQUNFX1dISVRFTElTVCcsIDE3KTsKZGVmaW5lKCdYREVCVUdfTkFNRVNQQUNFX0JMQUNLTElTVCcsIDE4KTsKZGVmaW5lKCdYREVCVUdfTkFNRVNQQUNFX0VYQ0xVREUnLCAxOCk7CmRlZmluZSgnWERFQlVHX05BTUVTUEFDRV9JTkNMVURFJywgMTcpOwpkZWZpbmUoJ1hERUJVR19QQVRIX0VYQ0xVREUnLCAyKTsKZGVmaW5lKCdYREVCVUdfUEFUSF9JTkNMVURFJywgMSk7Cjw/cGhwCgpkZWZpbmUoIkxFVkVMREJfTk9fQ09NUFJFU1NJT04iLCAwKTsKCmRlZmluZSgiTEVWRUxEQl9TTkFQUFlfQ09NUFJFU1NJT04iLCAxKTsKCmNsYXNzIExldmVsREIKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFBhdGggdG8gZGF0YWJhc2UKICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMKICAgICAqIEBwYXJhbSBhcnJheSAgJHJlYWRfb3B0aW9ucwogICAgICogQHBhcmFtIGFycmF5ICAkd3JpdGVfb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG5hbWUsIGFycmF5ICRvcHRpb25zID0gWwogICAgICAgICdjcmVhdGVfaWZfbWlzc2luZycgPT4gdHJ1ZSwgLy8gaWYgdGhlIHNwZWNpZmllZCBkYXRhYmFzZSBkb2VzIG5vdCBleGlzdCB3aWxsIGNyZWF0ZSBhIG5ldyBvbmUKICAgICAgICAnZXJyb3JfaWZfZXhpc3RzJyA9PiBmYWxzZSwgLy8gaWYgdGhlIG9wZW5lZCBkYXRhYmFzZSBleGlzdHMgd2lsbCB0aHJvdyBleGNlcHRpb24KICAgICAgICAncGFyYW5vaWRfY2hlY2tzJyA9PiBmYWxzZSwKICAgICAgICAnYmxvY2tfY2FjaGVfc2l6ZScgPT4gOCAqICgyIDw8IDIwKSwKICAgICAgICAnd3JpdGVfYnVmZmVyX3NpemUnID0+IDQgPDwgMjAsCiAgICAgICAgJ2Jsb2NrX3NpemUnID0+IDQwOTYsCiAgICAgICAgJ21heF9vcGVuX2ZpbGVzJyA9PiAxMDAwLAogICAgICAgICdibG9ja19yZXN0YXJ0X2ludGVydmFsJyA9PiAxNiwKICAgICAgICAnY29tcHJlc3Npb24nID0+IExFVkVMREJfU05BUFBZX0NPTVBSRVNTSU9OLAogICAgICAgICdjb21wYXJhdG9yJyA9PiBudWxsLCAvLyBhbnkgY2FsbGFibGUgcGFyYW1ldGVyIHJldHVybiAwLCAtMSwgMQogICAgXSwgYXJyYXkgJHJlYWRfb3B0aW9ucyA9IFsKICAgICAgICAndmVyaWZ5X2NoZWNrX3N1bScgPT4gZmFsc2UsIC8vbWF5IGJlIHNldCB0byB0cnVlIHRvIGZvcmNlIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBvZiBhbGwgZGF0YSB0aGF0IGlzIHJlYWQgZnJvbSB0aGUgZmlsZSBzeXN0ZW0gb24gYmVoYWxmIG9mIGEgcGFydGljdWxhciByZWFkLiBCeSBkZWZhdWx0LCBubyBzdWNoIHZlcmlmaWNhdGlvbiBpcyBkb25lLgogICAgICAgICdmaWxsX2NhY2hlJyA9PiB0cnVlLCAvL1doZW4gcGVyZm9ybWluZyBhIGJ1bGsgcmVhZCwgdGhlIGFwcGxpY2F0aW9uIG1heSBzZXQgdGhpcyB0byBmYWxzZSB0byBkaXNhYmxlIHRoZSBjYWNoaW5nIHNvIHRoYXQgdGhlIGRhdGEgcHJvY2Vzc2VkIGJ5IHRoZSBidWxrIHJlYWQgZG9lcyBub3QgZW5kIHVwIGRpc3BsYWNpbmcgbW9zdCBvZiB0aGUgY2FjaGVkIGNvbnRlbnRzLgogICAgXSwgYXJyYXkgJHdyaXRlX29wdGlvbnMgPSBbCiAgICAgICAgLy9Pbmx5IG9uZSBlbGVtZW50IG5hbWVkIHN5bmMgaW4gdGhlIHdyaXRlIG9wdGlvbiBhcnJheS4gQnkgZGVmYXVsdCwgZWFjaCB3cml0ZSB0byBsZXZlbGRiIGlzIGFzeW5jaHJvbm91cy4KICAgICAgICAnc3luYycgPT4gZmFsc2UKICAgIF0pIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBhcnJheSAgJHJlYWRfb3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoJGtleSwgYXJyYXkgJHJlYWRfb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogQWxpYXMgb2YgTGV2ZWxEQjo6cHV0KCkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKiBAcGFyYW0gYXJyYXkgICR3cml0ZV9vcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoJGtleSwgJHZhbHVlLCBhcnJheSAkd3JpdGVfb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICogQHBhcmFtIGFycmF5ICAkd3JpdGVfb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHV0KCRrZXksICR2YWx1ZSwgYXJyYXkgJHdyaXRlX29wdGlvbnMgPSBbXSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIGFycmF5ICAkd3JpdGVfb3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlKCRrZXksIGFycmF5ICR3cml0ZV9vcHRpb25zID0gW10pIHt9CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyBhbGwgb2YgdGhlIG9wZXJhdGlvbnMgYWRkZWQgaW4gdGhlIHdyaXRlIGJhdGNoLgogICAgICoKICAgICAqIEBwYXJhbSBMZXZlbERCV3JpdGVCYXRjaCAkYmF0Y2gKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAkd3JpdGVfb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoTGV2ZWxEQldyaXRlQmF0Y2ggJGJhdGNoLCBhcnJheSAkd3JpdGVfb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogVmFsaWQgcHJvcGVydGllczoKICAgICAqIC0gbGV2ZWxkYi5zdGF0czogcmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBlbnRpcmUgZGIKICAgICAqIC0gbGV2ZWxkYi5udW0tZmlsZXMtYXQtbGV2ZWw6IHJldHVybnMgdGhlIG51bWJlciBvZiBmaWxlcyBmb3IgZWFjaCBsZXZlbC4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIGxldmVsZGIubnVtLWZpbGVzLWF0LWxldmVsMCB0aGUgbnVtYmVyIG9mIGZpbGVzIGZvciB6ZXJvIGxldmVsLgogICAgICogLSBsZXZlbGRiLnNzdGFibGVzOiByZXR1cm5zIGN1cnJlbnQgc3RhdHVzIG9mIHNzdGFibGVzCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb3BlcnR5KCRuYW1lKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBcHByb3hpbWF0ZVNpemVzKCRzdGFydCwgJGxpbWl0KSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb21wYWN0UmFuZ2UoJHN0YXJ0LCAkbGltaXQpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gTGV2ZWxEQkl0ZXJhdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcihhcnJheSAkb3B0aW9ucyA9IFtdKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBMZXZlbERCU25hcHNob3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNuYXBzaG90KCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlc3Ryb3koJG5hbWUsIGFycmF5ICRvcHRpb25zID0gW10pIHt9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXBhaXIoJG5hbWUsIGFycmF5ICRvcHRpb25zID0gW10pIHt9Cn0KCmNsYXNzIExldmVsREJJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChMZXZlbERCICRkYiwgYXJyYXkgJHJlYWRfb3B0aW9ucyA9IFtdKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZCgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGxhc3QoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRrZXkpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwcmV2KCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5KCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yKCkge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVzdHJveSgpIHt9Cn0KCmNsYXNzIExldmVsREJXcml0ZUJhdGNoCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldCgka2V5LCAkdmFsdWUsIGFycmF5ICR3cml0ZV9vcHRpb25zID0gW10pIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHB1dCgka2V5LCAkdmFsdWUsIGFycmF5ICR3cml0ZV9vcHRpb25zID0gW10pIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSgka2V5LCBhcnJheSAkd3JpdGVfb3B0aW9ucyA9IFtdKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhcigpIHt9Cn0KCmNsYXNzIExldmVsREJTbmFwc2hvdAp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoTGV2ZWxEQiAkZGIpIHt9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlbGVhc2UoKSB7fQp9CgpjbGFzcyBMZXZlbERCRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9Cjw/cGhwCgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXERlcHJlY2F0ZWQ7CgpjbGFzcyBQREZsaWIKewogICAgLyoqCiAgICAgKiBBY3RpdmF0ZXMgYSBwcmV2aW91c2x5IGNyZWF0ZWQgc3RydWN0dXJlIGVsZW1lbnQgb3Igb3RoZXIgY29udGVudCBpdGVtLgogICAgICogQHBhcmFtIGludCAkaWQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYWN0aXZhdGUtaXRlbS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFjdGl2YXRlX2l0ZW0oJGlkKSB7fQoKICAgIC8qKgogICAgICogQWRkcyBhIGxpbmsgdG8gYSB3ZWIgcmVzb3VyY2UuCiAgICAgKiBAcGFyYW0gZmxvYXQgJGxseAogICAgICogQHBhcmFtIGZsb2F0ICRsbHkKICAgICAqIEBwYXJhbSBmbG9hdCAkdXJ4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHVyeQogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYWRkLWxhdW5jaGxpbmsucGhwCiAgICAgKiBAc2VlIFBERl9jcmVhdGVfYWN0aW9uKCkKICAgICAqLwogICAgI1tEZXByZWNhdGVkKCIgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZSBQREZfY3JlYXRlX2FjdGlvbigpIHdpdGggdHlwZT1MYXVuY2ggYW5kIFBERl9jcmVhdGVfYW5ub3RhdGlvbigpIHdpdGggdHlwZT1MaW5rIGluc3RlYWQuIildCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkX2xhdW5jaGxpbmsoJGxseCwgJGxseSwgJHVyeCwgJHVyeSwgJGZpbGVuYW1lKSB7fQoKICAgIC8qKgogICAgICogQWRkIGEgbGluayBhbm5vdGF0aW9uIHRvIGEgdGFyZ2V0IHdpdGhpbiB0aGUgY3VycmVudCBQREYgZmlsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGxvd2VybGVmdHgKICAgICAqIEBwYXJhbSBmbG9hdCAkbG93ZXJsZWZ0eQogICAgICogQHBhcmFtIGZsb2F0ICR1cHBlcnJpZ2h0eAogICAgICogQHBhcmFtIGZsb2F0ICR1cHBlcnJpZ2h0eQogICAgICogQHBhcmFtIGludCAkcGFnZQogICAgICogQHBhcmFtIHN0cmluZyAkZGVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1hZGQtbG9jYWxsaW5rLnBocAogICAgICogQHNlZSBQREZfY3JlYXRlX2FjdGlvbigpCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZCgnVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZSBQREZfY3JlYXRlX2FjdGlvbigpIHdpdGggdHlwZT1Hb1RvIGFuZCBQREZfY3JlYXRlX2Fubm90YXRpb24oKSB3aXRoIHR5cGU9TGluayBpbnN0ZWFkLicpXQogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9sb2NhbGxpbmsoJGxvd2VybGVmdHgsICRsb3dlcmxlZnR5LCAkdXBwZXJyaWdodHgsICR1cHBlcnJpZ2h0eSwgJHBhZ2UsICRkZXN0KSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5hbWVkIGRlc3RpbmF0aW9uIG9uIGFuIGFyYml0cmFyeSBwYWdlIGluIHRoZSBjdXJyZW50IGRvY3VtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYWRkLW5hbWVkZGVzdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9uYW1lZGRlc3QoJG5hbWUsICRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogU2V0cyBhbiBhbm5vdGF0aW9uIGZvciB0aGUgY3VycmVudCBwYWdlLgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkbGx4CiAgICAgKiBAcGFyYW0gZmxvYXQgJGxseQogICAgICogQHBhcmFtIGZsb2F0ICR1cngKICAgICAqIEBwYXJhbSBmbG9hdCAkdXJ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50cwogICAgICogQHBhcmFtIHN0cmluZyAkdGl0bGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb24KICAgICAqIEBwYXJhbSBpbnQgJG9wZW4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYWRkLW5vdGUucGhwCiAgICAgKiBAc2VlIFBERl9jcmVhdGVfYW5ub3RhdGlvbigpCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZCgnVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZSBQREZfY3JlYXRlX2Fubm90YXRpb24oKSB3aXRoIHR5cGU9VGV4dCBpbnN0ZWFkLicpXQogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9ub3RlKCRsbHgsICRsbHksICR1cngsICR1cnksICRjb250ZW50cywgJHRpdGxlLCAkaWNvbiwgJG9wZW4pIHt9CgogICAgLyoqCiAgICAgKiBBZGQgYSBmaWxlIGxpbmsgYW5ub3RhdGlvbiB0byBhIFBERiB0YXJnZXQuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRib3R0b21fbGVmdF94CiAgICAgKiBAcGFyYW0gZmxvYXQgJGJvdHRvbV9sZWZ0X3kKICAgICAqIEBwYXJhbSBmbG9hdCAkdXBfcmlnaHRfeAogICAgICogQHBhcmFtIGZsb2F0ICR1cF9yaWdodF95CiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIGludCAkcGFnZQogICAgICogQHBhcmFtIHN0cmluZyAkZGVzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1hZGQtcGRmbGluay5waHAKICAgICAqIEBzZWUgUERGX2NyZWF0ZV9hY3Rpb24KICAgICAqLwogICAgI1tEZXByZWNhdGVkKCdUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlIFBERl9jcmVhdGVfYWN0aW9uKCkgd2l0aCB0eXBlPUdvVG9SIGFuZCBQREZfY3JlYXRlX2Fubm90YXRpb24oKSB3aXRoIHR5cGU9TGluayBpbnN0ZWFkLicpXQogICAgcHVibGljIGZ1bmN0aW9uIGFkZF9wZGZsaW5rKCRib3R0b21fbGVmdF94LCAkYm90dG9tX2xlZnRfeSwgJHVwX3JpZ2h0X3gsICR1cF9yaWdodF95LCAkZmlsZW5hbWUsICRwYWdlLCAkZGVzdCkge30KCiAgICAvKioKICAgICAqIEFkZHMgYSBjZWxsIHRvIGEgbmV3IG9yIGV4aXN0aW5nIHRhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHRhYmxlCiAgICAgKiBAcGFyYW0gaW50ICRjb2x1bW4KICAgICAqIEBwYXJhbSBpbnQgJHJvdwogICAgICogQHBhcmFtIHN0cmluZyAkdGV4dAogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWFkZC10YWJsZS1jZWxsLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkX3RhYmxlX2NlbGwoJHRhYmxlLCAkY29sdW1uLCAkcm93LCAkdGV4dCwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgVGV4dGZsb3cgb2JqZWN0LCBvciBhZGRzIHRleHQgYW5kIGV4cGxpY2l0IG9wdGlvbnMgdG8gYW4gZXhpc3RpbmcgVGV4dGZsb3cuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdGV4dGZsb3cKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1hZGQtdGV4dGZsb3cucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRfdGV4dGZsb3coJHRleHRmbG93LCAkdGV4dCwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIGFuIGV4aXN0aW5nIGltYWdlIGFzIHRodW1ibmFpbCBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRpbWFnZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1hZGQtdGh1bWJuYWlsLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkX3RodW1ibmFpbCgkaW1hZ2UpIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIGEgd2VibGluayBhbm5vdGF0aW9uIHRvIGEgdGFyZ2V0IHVybCBvbiB0aGUgV2ViLgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkbG93ZXJsZWZ0eAogICAgICogQHBhcmFtIGZsb2F0ICRsb3dlcmxlZnR5CiAgICAgKiBAcGFyYW0gZmxvYXQgJHVwcGVycmlnaHR4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHVwcGVycmlnaHR5CiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmwKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYWRkLXdlYmxpbmsucGhwCiAgICAgKiBAc2VlIFBERl9jcmVhdGVfYWN0aW9uKCkKICAgICAqLwogICAgI1tEZXByZWNhdGVkKCdUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlIFBERl9jcmVhdGVfYWN0aW9uKCkgd2l0aCB0eXBlPVVSSSBhbmQgUERGX2NyZWF0ZV9hbm5vdGF0aW9uKCkgd2l0aCB0eXBlPUxpbmsgaW5zdGVhZC4nKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRfd2VibGluaygkbG93ZXJsZWZ0eCwgJGxvd2VybGVmdHksICR1cHBlcnJpZ2h0eCwgJHVwcGVycmlnaHR5LCAkdXJsKSB7fQoKICAgIC8qKgogICAgICogQWRkcyBhIGNvdW50ZXJjbG9ja3dpc2UgY2lyY3VsYXIgYXJjCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkKICAgICAqIEBwYXJhbSBmbG9hdCAkcgogICAgICogQHBhcmFtIGZsb2F0ICRhbHBoYQogICAgICogQHBhcmFtIGZsb2F0ICRiZXRhCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWFyYy5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFyYygkeCwgJHksICRyLCAkYWxwaGEsICRiZXRhKSB7fQoKICAgIC8qKgogICAgICogRXhjZXB0IGZvciB0aGUgZHJhd2luZyBkaXJlY3Rpb24sIHRoaXMgZnVuY3Rpb24gYmVoYXZlcyBleGFjdGx5IGxpa2UgUERGX2FyYygpLgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkeAogICAgICogQHBhcmFtIGZsb2F0ICR5CiAgICAgKiBAcGFyYW0gZmxvYXQgJHIKICAgICAqIEBwYXJhbSBmbG9hdCAkYWxwaGEKICAgICAqIEBwYXJhbSBmbG9hdCAkYmV0YQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1hcmNuLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXJjbigkeCwgJHksICRyLCAkYWxwaGEsICRiZXRhKSB7fQoKICAgIC8qKgogICAgICogQWRkcyBhIGZpbGUgYXR0YWNobWVudCBhbm5vdGF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkbGx4CiAgICAgKiBAcGFyYW0gZmxvYXQgJGxseQogICAgICogQHBhcmFtIGZsb2F0ICR1cngKICAgICAqIEBwYXJhbSBmbG9hdCAkdXJ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkZGVzY3JpcHRpb24KICAgICAqIEBwYXJhbSBzdHJpbmcgJGF1dGhvcgogICAgICogQHBhcmFtIHN0cmluZyAkbWltZXR5cGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGljb24KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYXR0YWNoLWZpbGUucGhwCiAgICAgKiBAc2VlIFBERl9jcmVhdGVfYW5ub3RhdGlvbigpCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZCgnVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZSBQREZfY3JlYXRlX2Fubm90YXRpb24oKSB3aXRoIHR5cGU9RmlsZUF0dGFjaG1lbnQgaW5zdGVhZC4nKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBhdHRhY2hfZmlsZSgkbGx4LCAkbGx5LCAkdXJ4LCAkdXJ5LCAkZmlsZW5hbWUsICRkZXNjcmlwdGlvbiwgJGF1dGhvciwgJG1pbWV0eXBlLCAkaWNvbikge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgUERGIGZpbGUgc3ViamVjdCB0byB2YXJpb3VzIG9wdGlvbnMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1iZWdpbi1kb2N1bWVudC5waHAKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBkZmxpYi5jb20vZmlsZWFkbWluL3BkZmxpYi9wZGYvbWFudWFscy9QREZsaWItOS4xLjItQVBJLXJlZmVyZW5jZS5wZGYKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJlZ2luX2RvY3VtZW50KCRmaWxlbmFtZSwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBTdGFydHMgYSBUeXBlIDMgZm9udCBkZWZpbml0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAgICAgKiBAcGFyYW0gZmxvYXQgJGEKICAgICAqIEBwYXJhbSBmbG9hdCAkYgogICAgICogQHBhcmFtIGZsb2F0ICRjCiAgICAgKiBAcGFyYW0gZmxvYXQgJGQKICAgICAqIEBwYXJhbSBmbG9hdCAkZQogICAgICogQHBhcmFtIGZsb2F0ICRmCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWJlZ2luLWZvbnQucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiZWdpbl9mb250KCRmaWxlbmFtZSwgJGEsICRiLCAkYywgJGQsICRlLCAkZiwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBTdGFydHMgYSBnbHlwaCBkZWZpbml0aW9uIGZvciBhIFR5cGUgMyBmb250LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGdseXBobmFtZQogICAgICogQHBhcmFtIGZsb2F0ICR3eAogICAgICogQHBhcmFtIGZsb2F0ICRsbHgKICAgICAqIEBwYXJhbSBmbG9hdCAkbGx5CiAgICAgKiBAcGFyYW0gZmxvYXQgJHVyeAogICAgICogQHBhcmFtIGZsb2F0ICR1cnkKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYmVnaW4tZ2x5cGgucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBiZWdpbl9nbHlwaCgkZ2x5cGhuYW1lLCAkd3gsICRsbHgsICRsbHksICR1cngsICR1cnkpIHt9CgogICAgLyoqCiAgICAgKiBPcGVucyBhIHN0cnVjdHVyZSBlbGVtZW50IG9yIG90aGVyIGNvbnRlbnQgaXRlbSB3aXRoIGF0dHJpYnV0ZXMgc3VwcGxpZWQgYXMgb3B0aW9ucy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0YWcKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1iZWdpbi1pdGVtLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmVnaW5faXRlbSgkdGFnLCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIFN0YXJ0cyBhIGxheWVyIGZvciBzdWJzZXF1ZW50IG91dHB1dCBvbiB0aGUgcGFnZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRsYXllcgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1iZWdpbi1sYXllci5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJlZ2luX2xheWVyKCRsYXllcikge30KCiAgICAvKioKICAgICAqIEFkZHMgYSBuZXcgcGFnZSB0byB0aGUgZG9jdW1lbnQsIGFuZCBzcGVjaWZpZXMgdmFyaW91cyBvcHRpb25zLiBUaGUgcGFyYW1ldGVycyB3aWR0aCBhbmQgaGVpZ2h0IGFyZSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgbmV3IHBhZ2UgaW4gcG9pbnRzLgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkd2lkdGgKICAgICAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWJlZ2luLXBhZ2UtZXh0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmVnaW5fcGFnZV9leHQoJHdpZHRoLCAkaGVpZ2h0LCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEFkZHMgYSBuZXcgcGFnZSB0byB0aGUgZG9jdW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICR3aWR0aAogICAgICogQHBhcmFtIGZsb2F0ICRoZWlnaHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYmVnaW4tcGFnZS5waHAKICAgICAqCiAgICAgKiBAc2VlIFBERl9iZWdpbl9wYWdlX2V4dCgpCiAgICAgKi8KICAgICNbRGVwcmVjYXRlZCgnVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZSBQREZfYmVnaW5fcGFnZV9leHQoKSBpbnN0ZWFkLicpXQogICAgcHVibGljIGZ1bmN0aW9uIGJlZ2luX3BhZ2UoJHdpZHRoLCAkaGVpZ2h0KSB7fQoKICAgIC8qKgogICAgICogU3RhcnRzIGEgbmV3IHBhdHRlcm4gZGVmaW5pdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHdpZHRoCiAgICAgKiBAcGFyYW0gZmxvYXQgJGhlaWdodAogICAgICogQHBhcmFtIGZsb2F0ICR4c3RlcAogICAgICogQHBhcmFtIGZsb2F0ICR5c3RlcAogICAgICogQHBhcmFtIGludCAkcGFpbnR0eXBlCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYmVnaW4tcGF0dGVybi5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJlZ2luX3BhdHRlcm4oJHdpZHRoLCAkaGVpZ2h0LCAkeHN0ZXAsICR5c3RlcCwgJHBhaW50dHlwZSkge30KCiAgICAvKioKICAgICAqIFN0YXJ0cyBhIG5ldyB0ZW1wbGF0ZSBkZWZpbml0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBmbG9hdCAkd2lkdGgKICAgICAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYmVnaW4tdGVtcGxhdGUtZXh0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmVnaW5fdGVtcGxhdGVfZXh0KCR3aWR0aCwgJGhlaWdodCwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHdpZHRoCiAgICAgKiBAcGFyYW0gZmxvYXQgJGhlaWdodAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWJlZ2luLXRlbXBsYXRlLnBocAogICAgICoKICAgICAqIEBzZWUgUERGX2JlZ2luX3RlbXBsYXRlX2V4dAogICAgICovCiAgICAjW0RlcHJlY2F0ZWQoJ1RoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA3LCB1c2UgUERGX2JlZ2luX3RlbXBsYXRlX2V4dCgpIGluc3RlYWQuJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gYmVnaW5fdGVtcGxhdGUoJHdpZHRoLCAkaGVpZ2h0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICR4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkKICAgICAqIEBwYXJhbSBmbG9hdCAkcgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jaXJjbGUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaXJjbGUoJHgsICR5LCAkcikge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jbGlwLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xpcCgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRpbWFnZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jbG9zZS1pbWFnZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlX2ltYWdlKCRpbWFnZSkge30KCiAgICAvKioKICAgICAqIENsb3NlcyB0aGUgcGFnZSBoYW5kbGUsIGFuZCBmcmVlcyBhbGwgcGFnZS1yZWxhdGVkIHJlc291cmNlcwogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHBhZ2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY2xvc2UtcGRpLXBhZ2UucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZV9wZGlfcGFnZSgkcGFnZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGRvYwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jbG9zZS1wZGkucGhwCiAgICAgKgogICAgICogQHNlZSBQREZfY2xvc2VfcGRpX2RvY3VtZW50KCkKICAgICAqLwogICAgI1tEZXByZWNhdGVkKCdUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNywgdXNlIFBERl9jbG9zZV9wZGlfZG9jdW1lbnQoKSBpbnN0ZWFkLicpXQogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlX3BkaSgkZG9jKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkZG9jCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGRmbGliLmNvbS9maWxlYWRtaW4vcGRmbGliL3BkZi9tYW51YWxzL1BERmxpYi05LjMuMC1BUEktcmVmZXJlbmNlLnBkZgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2VfcGRpX2RvY3VtZW50KCRkb2MpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY2xvc2UucGhwCiAgICAgKgogICAgICogQHNlZSBQREZfZW5kX2RvY3VtZW50CiAgICAgKi8KICAgICNbRGVwcmVjYXRlZCgnVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZSBQREZfZW5kX2RvY3VtZW50KCkgaW5zdGVhZC4nKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY2xvc2VwYXRoLWZpbGwtc3Ryb2tlLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2VwYXRoX2ZpbGxfc3Ryb2tlKCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jbG9zZXBhdGgtc3Ryb2tlLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2VwYXRoX3N0cm9rZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY2xvc2VwYXRoLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2VwYXRoKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkYQogICAgICogQHBhcmFtIGZsb2F0ICRiCiAgICAgKiBAcGFyYW0gZmxvYXQgJGMKICAgICAqIEBwYXJhbSBmbG9hdCAkZAogICAgICogQHBhcmFtIGZsb2F0ICRlCiAgICAgKiBAcGFyYW0gZmxvYXQgJGYKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY29uY2F0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29uY2F0KCRhLCAkYiwgJGMsICRkLCAkZSwgJGYpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWNvbnRpbnVlLXRleHQucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb250aW51ZV90ZXh0KCR0ZXh0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkdXNlcm5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jcmVhdGUtM2R2aWV3LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlXzNkdmlldygkdXNlcm5hbWUsICRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZQogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWNyZWF0ZS1hY3Rpb24ucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVfYWN0aW9uKCR0eXBlLCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkbGx4CiAgICAgKiBAcGFyYW0gZmxvYXQgJGxseQogICAgICogQHBhcmFtIGZsb2F0ICR1cngKICAgICAqIEBwYXJhbSBmbG9hdCAkdXJ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWNyZWF0ZS1hbm5vdGF0aW9uLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlX2Fubm90YXRpb24oJGxseCwgJGxseSwgJHVyeCwgJHVyeSwgJHR5cGUsICRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkdGV4dAogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWNyZWF0ZS1ib29rbWFyay5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZV9ib29rbWFyaygkdGV4dCwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGxseAogICAgICogQHBhcmFtIGZsb2F0ICRsbHkKICAgICAqIEBwYXJhbSBmbG9hdCAkdXJ4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHVyeQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZQogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jcmVhdGUtZmllbGQucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVfZmllbGQoJGxseCwgJGxseSwgJHVyeCwgJHVyeSwgJG5hbWUsICR0eXBlLCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY3JlYXRlLWZpZWxkZ3JvdXAucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVfZmllbGRncm91cCgkbmFtZSwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY3JlYXRlLWdzdGF0ZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZV9nc3RhdGUoJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jcmVhdGUtcHZmLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlX3B2ZigkZmlsZW5hbWUsICRkYXRhLCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jcmVhdGUtdGV4dGZsb3cucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVfdGV4dGZsb3coJHRleHQsICRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICR4MQogICAgICogQHBhcmFtIGZsb2F0ICR5MQogICAgICogQHBhcmFtIGZsb2F0ICR4MgogICAgICogQHBhcmFtIGZsb2F0ICR5MgogICAgICogQHBhcmFtIGZsb2F0ICR4MwogICAgICogQHBhcmFtIGZsb2F0ICR5MwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jdXJ2ZXRvLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VydmV0bygkeDEsICR5MSwgJHgyLCAkeTIsICR4MywgJHkzKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWRlZmluZS1sYXllci5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlZmluZV9sYXllcigkbmFtZSwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWRlbGV0ZS1wdmYucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGVfcHZmKCRmaWxlbmFtZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHRhYmxlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWRlbGV0ZS10YWJsZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZV90YWJsZSgkdGFibGUsICRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdGV4dGZsb3cKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZGVsZXRlLXRleHRmbG93LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlX3RleHRmbG93KCR0ZXh0Zmxvdykge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1kZWxldGUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGUoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcKICAgICAqIEBwYXJhbSBpbnQgJHNsb3QKICAgICAqIEBwYXJhbSBzdHJpbmcgJGdseXBobmFtZQogICAgICogQHBhcmFtIGludCAkdXYKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZW5jb2Rpbmctc2V0LWNoYXIucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmNvZGluZ19zZXRfY2hhcigkZW5jb2RpbmcsICRzbG90LCAkZ2x5cGhuYW1lLCAkdXYpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWVuZC1kb2N1bWVudC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuZF9kb2N1bWVudCgkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1lbmQtZm9udC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuZF9mb250KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1lbmQtZ2x5cGgucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmRfZ2x5cGgoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkaWQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZW5kLWl0ZW0ucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmRfaXRlbSgkaWQpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZW5kLWxheWVyLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5kX2xheWVyKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZW5kLXBhZ2UtZXh0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5kX3BhZ2VfZXh0KCRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWVuZC1wYWdlLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5kX3BhZ2UoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWVuZC1wYXR0ZXJuLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5kX3BhdHRlcm4oKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWVuZC10ZW1wbGF0ZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuZF90ZW1wbGF0ZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZW5kcGF0aC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVuZHBhdGgoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkcGFnZQogICAgICogQHBhcmFtIHN0cmluZyAkYmxvY2tuYW1lCiAgICAgKiBAcGFyYW0gaW50ICRpbWFnZQogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWZpbGwtaW1hZ2VibG9jay5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpbGxfaW1hZ2VibG9jaygkcGFnZSwgJGJsb2NrbmFtZSwgJGltYWdlLCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHBhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJsb2NrbmFtZQogICAgICogQHBhcmFtIGludCAkY29udGVudHMKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1maWxsLXBkZmJsb2NrLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmlsbF9wZGZibG9jaygkcGFnZSwgJGJsb2NrbmFtZSwgJGNvbnRlbnRzLCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1maWxsLXN0cm9rZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpbGxfc3Ryb2tlKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHBhZ2UKICAgICAqIEBwYXJhbSBzdHJpbmcgJGJsb2NrbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkdGV4dAogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWZpbGwtdGV4dGJsb2NrLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmlsbF90ZXh0YmxvY2soJHBhZ2UsICRibG9ja25hbWUsICR0ZXh0LCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1maWxsLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmlsbCgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmb250bmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcKICAgICAqIEBwYXJhbSBpbnQgJGVtYmVkCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZmluZGZvbnQucGhwKERlcCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpbmRmb250KCRmb250bmFtZSwgJGVuY29kaW5nLCAkZW1iZWQpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRpbWFnZQogICAgICogQHBhcmFtIGZsb2F0ICR4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZml0LWltYWdlLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZml0X2ltYWdlKCRpbWFnZSwgJHgsICR5LCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHBhZ2UKICAgICAqIEBwYXJhbSBmbG9hdCAkeAogICAgICogQHBhcmFtIGZsb2F0ICR5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWZpdC1wZGktcGFnZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpdF9wZGlfcGFnZSgkcGFnZSwgJHgsICR5LCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHRhYmxlIEEgdmFsaWQgdGFibGUgaGFuZGxlIHJldHJpZXZlZCB3aXRoIGEgY2FsbCB0byBQREZfYWRkX3RhYmxlX2NlbGwoKQogICAgICogQHBhcmFtIGZsb2F0ICRsbHggWCBDb29yZGluYXRlIG9mIHRoZSBsb3dlciBsZWZ0IGNvcm5lciBvZiB0aGUgdGFyZ2V0IHJlY3RhbmdsZSBmb3IgdGhlIHRhYmxlIGluc3RhbmNlICh0aGUgZml0Ym94KSBpbiB1c2VyIGNvb3JkaW5hdGVzLgogICAgICogQHBhcmFtIGZsb2F0ICRsbHkgWSBDb29yZGluYXRlIG9mIHRoZSBsb3dlciBsZWZ0IGNvcm5lciBvZiB0aGUgdGFyZ2V0IHJlY3RhbmdsZSBmb3IgdGhlIHRhYmxlIGluc3RhbmNlICh0aGUgZml0Ym94KSBpbiB1c2VyIGNvb3JkaW5hdGVzLgogICAgICogQHBhcmFtIGZsb2F0ICR1cnggWCBDb29yZGluYXRlIG9mIHRoZSB1cHBlciByaWdodCBjb3JuZXIgb2YgdGhlIHRhcmdldCByZWN0YW5nbGUgZm9yIHRoZSB0YWJsZSBpbnN0YW5jZSAodGhlIGZpdGJveCkgaW4gdXNlciBjb29yZGluYXRlcy4KICAgICAqIEBwYXJhbSBmbG9hdCAkdXJ5IFkgQ29vcmRpbmF0ZSBvZiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyIG9mIHRoZSB0YXJnZXQgcmVjdGFuZ2xlIGZvciB0aGUgdGFibGUgaW5zdGFuY2UgKHRoZSBmaXRib3gpIGluIHVzZXIgY29vcmRpbmF0ZXMuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0IEFuIG9wdGlvbiBsaXN0IHNwZWNpZnlpbmcgZmlsbGluZyBkZXRhaWxzIGFjY29yZGluZyB0byBUYWJsZSA1LjE4LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIHdoaWNoIHNwZWNpZmllcyB0aGUgcmVhc29uIGZvciByZXR1cm5pbmcgZnJvbSB0aGUgZnVuY3Rpb24KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5wZGZsaWIuY29tL2ZpbGVhZG1pbi9wZGZsaWIvcGRmL21hbnVhbHMvUERGbGliLTkuMy4wLUFQSS1yZWZlcmVuY2UucGRmCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaXRfdGFibGUoJHRhYmxlLCAkbGx4LCAkbGx5LCAkdXJ4LCAkdXJ5LCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHRleHRmbG93CiAgICAgKiBAcGFyYW0gZmxvYXQgJGxseAogICAgICogQHBhcmFtIGZsb2F0ICRsbHkKICAgICAqIEBwYXJhbSBmbG9hdCAkdXJ4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHVyeQogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWZpdC10ZXh0Zmxvdy5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpdF90ZXh0ZmxvdygkdGV4dGZsb3csICRsbHgsICRsbHksICR1cngsICR1cnksICRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkdGV4dAogICAgICogQHBhcmFtIGZsb2F0ICR4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZml0LXRleHRsaW5lLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZml0X3RleHRsaW5lKCR0ZXh0LCAkeCwgJHksICRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZ2V0LWFwaW5hbWUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfYXBpbmFtZSgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1nZXQtYnVmZmVyLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2J1ZmZlcigpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1nZXQtZXJybXNnLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Vycm1zZygpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1nZXQtZXJybnVtLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Vycm51bSgpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1nZXQtbWFqb3J2ZXJzaW9uLnBocChkZXApCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfbWFqb3J2ZXJzaW9uKCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWdldC1taW5vcnZlcnNpb24ucGhwKGRlcCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9taW5vcnZlcnNpb24oKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5d29yZAogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5wZGZsaWIuY29tL2ZpbGVhZG1pbi9wZGZsaWIvcGRmL21hbnVhbHMvUERGbGliLTkuMy4wLUFQSS1yZWZlcmVuY2UucGRmCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfb3B0aW9uKCRrZXl3b3JkLCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIGZsb2F0ICRtb2RpZmllcgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWdldC1wYXJhbWV0ZXIucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfcGFyYW1ldGVyKCRrZXksICRtb2RpZmllcikge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIGludCAkZG9jCiAgICAgKiBAcGFyYW0gaW50ICRwYWdlCiAgICAgKiBAcGFyYW0gaW50ICRyZXNlcnZlZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWdldC1wZGktcGFyYW1ldGVyLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3BkaV9wYXJhbWV0ZXIoJGtleSwgJGRvYywgJHBhZ2UsICRyZXNlcnZlZCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleQogICAgICogQHBhcmFtIGludCAkZG9jCiAgICAgKiBAcGFyYW0gaW50ICRwYWdlCiAgICAgKiBAcGFyYW0gaW50ICRyZXNlcnZlZAogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZ2V0LXBkaS12YWx1ZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9wZGlfdmFsdWUoJGtleSwgJGRvYywgJHBhZ2UsICRyZXNlcnZlZCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXdvcmQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGRmbGliLmNvbS9maWxlYWRtaW4vcGRmbGliL3BkZi9tYW51YWxzL1BERmxpYi05LjMuMC1BUEktcmVmZXJlbmNlLnBkZgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3N0cmluZygka2V5d29yZCwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBmbG9hdCAkbW9kaWZpZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWdldC12YWx1ZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF92YWx1ZSgka2V5LCAkbW9kaWZpZXIpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRmb250CiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXl3b3JkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBmbG9hdAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1pbmZvLWZvbnQucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvX2ZvbnQoJGZvbnQsICRrZXl3b3JkLCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGltYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXl3b3JkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBmbG9hdAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBkZmxpYi5jb20vZmlsZWFkbWluL3BkZmxpYi9wZGYvbWFudWFscy9QREZsaWItOS4zLjAtQVBJLXJlZmVyZW5jZS5wZGYKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluZm9faW1hZ2UoJGltYWdlLCAka2V5d29yZCwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRib3huYW1lCiAgICAgKiBAcGFyYW0gaW50ICRudW0KICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXdvcmQKICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWluZm8tbWF0Y2hib3gucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvX21hdGNoYm94KCRib3huYW1lLCAkbnVtLCAka2V5d29yZCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGdyYXBoaWNzCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXl3b3JkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBmbG9hdAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBkZmxpYi5jb20vZmlsZWFkbWluL3BkZmxpYi9wZGYvbWFudWFscy9QREZsaWItOS4zLjAtQVBJLXJlZmVyZW5jZS5wZGYKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluZm9fZ3JhcGhpY3MoJGdyYXBoaWNzLCAka2V5d29yZCwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRwYXRoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXl3b3JkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBmbG9hdAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBkZmxpYi5jb20vZmlsZWFkbWluL3BkZmxpYi9wZGYvbWFudWFscy9QREZsaWItOS4zLjAtQVBJLXJlZmVyZW5jZS5wZGYKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluZm9fcGF0aCgkcGF0aCwgJGtleXdvcmQsICRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkcGF0aAogICAgICogQHBhcmFtIHN0cmluZyAka2V5d29yZAogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5wZGZsaWIuY29tL2ZpbGVhZG1pbi9wZGZsaWIvcGRmL21hbnVhbHMvUERGbGliLTkuMy4wLUFQSS1yZWZlcmVuY2UucGRmCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvX3BkaV9wYWdlKCRwYWdlLCAka2V5d29yZCwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAka2V5d29yZAogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5wZGZsaWIuY29tL2ZpbGVhZG1pbi9wZGZsaWIvcGRmL21hbnVhbHMvUERGbGliLTkuMy4wLUFQSS1yZWZlcmVuY2UucGRmCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvX3B2ZigkZmlsZW5hbWUsICRrZXl3b3JkKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkdGFibGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXdvcmQKICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWluZm8tdGFibGUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvX3RhYmxlKCR0YWJsZSwgJGtleXdvcmQpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR0ZXh0ZmxvdwogICAgICogQHBhcmFtIHN0cmluZyAka2V5d29yZAogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtaW5mby10ZXh0Zmxvdy5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluZm9fdGV4dGZsb3coJHRleHRmbG93LCAka2V5d29yZCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleXdvcmQKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWluZm8tdGV4dGxpbmUucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbmZvX3RleHRsaW5lKCR0ZXh0LCAka2V5d29yZCwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtaW5pdGdyYXBoaWNzLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5pdGdyYXBoaWNzKCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkeAogICAgICogQHBhcmFtIGZsb2F0ICR5CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWxpbmV0by5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxpbmV0bygkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWxvYWQtM2RkYXRhLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZF8zZGRhdGEoJGZpbGVuYW1lLCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZvbnRuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZwogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWxvYWQtZm9udC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRfZm9udCgkZm9udG5hbWUsICRlbmNvZGluZywgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcm9maWxlbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWxvYWQtaWNjcHJvZmlsZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRfaWNjcHJvZmlsZSgkcHJvZmlsZW5hbWUsICRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkaW1hZ2V0eXBlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWxvYWQtaW1hZ2UucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkX2ltYWdlKCRpbWFnZXR5cGUsICRmaWxlbmFtZSwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcG90bmFtZQogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW1ha2VzcG90Y29sb3IucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYWtlc3BvdGNvbG9yKCRzcG90bmFtZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkeAogICAgICogQHBhcmFtIGZsb2F0ICR5CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW1vdmV0by5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vdmV0bygkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIGludCAkd2lkdGgKICAgICAqIEBwYXJhbSBpbnQgJGhlaWdodAogICAgICogQHBhcmFtIGludCAkQml0UmV2ZXJzZQogICAgICogQHBhcmFtIGludCAkawogICAgICogQHBhcmFtIGludCAkQmxhY2tsczEKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1vcGVuLWNjaXR0LnBocChkZXApCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcGVuX2NjaXR0KCRmaWxlbmFtZSwgJHdpZHRoLCAkaGVpZ2h0LCAkQml0UmV2ZXJzZSwgJGssICRCbGFja2xzMSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW9wZW4tZmlsZS5waHAoZGVwKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3Blbl9maWxlKCRmaWxlbmFtZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGltYWdldHlwZQogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZ3BhcmFtCiAgICAgKiBAcGFyYW0gaW50ICRpbnRwYXJhbQogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW9wZW4taW1hZ2UtZmlsZS5waHAoZGVwKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3Blbl9pbWFnZV9maWxlKCRpbWFnZXR5cGUsICRmaWxlbmFtZSwgJHN0cmluZ3BhcmFtLCAkaW50cGFyYW0pIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbWFnZXR5cGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNvdXJjZQogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHBhcmFtIGludCAkbGVuZ3RoCiAgICAgKiBAcGFyYW0gaW50ICR3aWR0aAogICAgICogQHBhcmFtIGludCAkaGVpZ2h0CiAgICAgKiBAcGFyYW0gaW50ICRjb21wb25lbnRzCiAgICAgKiBAcGFyYW0gaW50ICRicGMKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhcmFtcwogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW9wZW4taW1hZ2UucGhwKGRlcCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9wZW5faW1hZ2UoJGltYWdldHlwZSwgJHNvdXJjZSwgJGRhdGEsICRsZW5ndGgsICR3aWR0aCwgJGhlaWdodCwgJGNvbXBvbmVudHMsICRicGMsICRwYXJhbXMpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJGltYWdlCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtb3Blbi1tZW1vcnktaW1hZ2UucGhwKG5vdCBzdXBwb3J0ZWQpCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcGVuX21lbW9yeV9pbWFnZSgkaW1hZ2UpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW9wZW4tcGRpLWRvY3VtZW50LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3Blbl9wZGlfZG9jdW1lbnQoJGZpbGVuYW1lLCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGRvYwogICAgICogQHBhcmFtIGludCAkcGFnZW51bWJlcgogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW9wZW4tcGRpLXBhZ2UucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcGVuX3BkaV9wYWdlKCRkb2MsICRwYWdlbnVtYmVyLCAkb3B0bGlzdCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKiBAcGFyYW0gaW50ICRsZW4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1vcGVuLXBkaS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9wZW5fcGRpKCRmaWxlbmFtZSwgJG9wdGxpc3QsICRsZW4pIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRkb2MKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXBjb3MtZ2V0LW51bWJlci5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBjb3NfZ2V0X251bWJlcigkZG9jLCAkcGF0aCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGRvYwogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXBjb3MtZ2V0LXN0cmVhbS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBjb3NfZ2V0X3N0cmVhbSgkZG9jLCAkb3B0bGlzdCwgJHBhdGgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRkb2MKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1wY29zLWdldC1zdHJpbmcucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwY29zX2dldF9zdHJpbmcoJGRvYywgJHBhdGgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRpbWFnZQogICAgICogQHBhcmFtIGZsb2F0ICR4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkKICAgICAqIEBwYXJhbSBmbG9hdCAkc2NhbGUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtcGxhY2UtaW1hZ2UucGhwIChkZXApCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwbGFjZV9pbWFnZSgkaW1hZ2UsICR4LCAkeSwgJHNjYWxlKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkcGFnZQogICAgICogQHBhcmFtIGZsb2F0ICR4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHkKICAgICAqIEBwYXJhbSBmbG9hdCAkc3gKICAgICAqIEBwYXJhbSBmbG9hdCAkc3kKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtcGxhY2UtcGRpLXBhZ2UucGhwIChkZXApCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwbGFjZV9wZGlfcGFnZSgkcGFnZSwgJHgsICR5LCAkc3gsICRzeSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5wZGZsaWIuY29tL2ZpbGVhZG1pbi9wZGZsaWIvcGRmL21hbnVhbHMvUERGbGliLTkuMy4wLUFQSS1yZWZlcmVuY2UucGRmCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfb3B0aW9uKCRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkZG9jCiAgICAgKiBAcGFyYW0gaW50ICRwYWdlCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtcHJvY2Vzcy1wZGkucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzX3BkaSgkZG9jLCAkcGFnZSwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgKICAgICAqIEBwYXJhbSBmbG9hdCAkeQogICAgICogQHBhcmFtIGZsb2F0ICR3aWR0aAogICAgICogQHBhcmFtIGZsb2F0ICRoZWlnaHQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtcmVjdC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlY3QoJHgsICR5LCAkd2lkdGgsICRoZWlnaHQpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtcmVzdG9yZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc3RvcmUoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1yZXN1bWUtcGFnZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlc3VtZV9wYWdlKCRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRwaGkKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtcm90YXRlLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcm90YXRlKCRwaGkpIHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2F2ZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRzeAogICAgICogQHBhcmFtIGZsb2F0ICRzeQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zY2FsZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNjYWxlKCRzeCwgJHN5KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRyZWQKICAgICAqIEBwYXJhbSBmbG9hdCAkZ3JlZW4KICAgICAqIEBwYXJhbSBmbG9hdCAkYmx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXQtYm9yZGVyLWNvbG9yLnBocCAoZGVwKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2JvcmRlcl9jb2xvcigkcmVkLCAkZ3JlZW4sICRibHVlKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRibGFjawogICAgICogQHBhcmFtIGZsb2F0ICR3aGl0ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXQtYm9yZGVyLWRhc2gucGhwIChkZXApCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfYm9yZGVyX2Rhc2goJGJsYWNrLCAkd2hpdGUpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHlsZQogICAgICogQHBhcmFtIGZsb2F0ICR3aWR0aAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXQtYm9yZGVyLXN0eWxlLnBocCAoZGVwKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2JvcmRlcl9zdHlsZSgkc3R5bGUsICR3aWR0aCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGdzdGF0ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXQtZ3N0YXRlLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2dzdGF0ZSgkZ3N0YXRlKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXQtaW5mby5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9pbmZvKCRrZXksICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHR5cGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0LWxheWVyLWRlcGVuZGVuY3kucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfbGF5ZXJfZGVwZW5kZW5jeSgkdHlwZSwgJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldC1wYXJhbWV0ZXIucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfcGFyYW1ldGVyKCRrZXksICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkeAogICAgICogQHBhcmFtIGZsb2F0ICR5CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldC10ZXh0LXBvcy5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF90ZXh0X3BvcygkeCwgJHkpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBmbG9hdCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0LXZhbHVlLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X3ZhbHVlKCRrZXksICR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZzdHlwZQogICAgICogQHBhcmFtIHN0cmluZyAkY29sb3JzcGFjZQogICAgICogQHBhcmFtIGZsb2F0ICRjMQogICAgICogQHBhcmFtIGZsb2F0ICRjMgogICAgICogQHBhcmFtIGZsb2F0ICRjMwogICAgICogQHBhcmFtIGZsb2F0ICRjNAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXRjb2xvci5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGNvbG9yKCRmc3R5cGUsICRjb2xvcnNwYWNlLCAkYzEsICRjMiwgJGMzLCAkYzQpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGIKICAgICAqIEBwYXJhbSBmbG9hdCAkdwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXRkYXNoLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0ZGFzaCgkYiwgJHcpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldGRhc2hwYXR0ZXJuLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0ZGFzaHBhdHRlcm4oJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGZsYXRuZXNzCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldGZsYXQucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRmbGF0KCRmbGF0bmVzcykge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGZvbnQKICAgICAqIEBwYXJhbSBmbG9hdCAkZm9udHNpemUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0Zm9udC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGZvbnQoJGZvbnQsICRmb250c2l6ZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkZwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXRncmF5LWZpbGwucGhwIChkZXApCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRncmF5X2ZpbGwoJGcpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGcKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0Z3JheS1zdHJva2UucGhwIChkZXApCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRncmF5X3N0cm9rZSgkZykge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkZwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXRncmF5LnBocCAoZGVwKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Z3JheSgkZykge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGxpbmVjYXAKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0bGluZWNhcC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGxpbmVjYXAoJGxpbmVjYXApIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXRsaW5lam9pbi5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldGxpbmVqb2luKCR2YWx1ZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkd2lkdGgKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0bGluZXdpZHRoLnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0bGluZXdpZHRoKCR3aWR0aCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkYQogICAgICogQHBhcmFtIGZsb2F0ICRiCiAgICAgKiBAcGFyYW0gZmxvYXQgJGMKICAgICAqIEBwYXJhbSBmbG9hdCAkZAogICAgICogQHBhcmFtIGZsb2F0ICRlCiAgICAgKiBAcGFyYW0gZmxvYXQgJGYKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0bWF0cml4LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0bWF0cml4KCRhLCAkYiwgJGMsICRkLCAkZSwgJGYpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJG1pdGVyCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldG1pdGVybGltaXQucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRtaXRlcmxpbWl0KCRtaXRlcikge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkcmVkCiAgICAgKiBAcGFyYW0gZmxvYXQgJGdyZWVuCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0cmdiY29sb3ItZmlsbC5waHAgKGRlcCkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldHJnYmNvbG9yX2ZpbGwoJHJlZCwgJGdyZWVuLCAkYmx1ZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkcmVkCiAgICAgKiBAcGFyYW0gZmxvYXQgJGdyZWVuCiAgICAgKiBAcGFyYW0gZmxvYXQgJGJsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0cmdiY29sb3Itc3Ryb2tlLnBocCAoZGVwKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0cmdiY29sb3Jfc3Ryb2tlKCRyZWQsICRncmVlbiwgJGJsdWUpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHJlZAogICAgICogQHBhcmFtIGZsb2F0ICRncmVlbgogICAgICogQHBhcmFtIGZsb2F0ICRibHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldHJnYmNvbG9yLnBocCAoZGVwKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0cmdiY29sb3IoJHJlZCwgJGdyZWVuLCAkYmx1ZSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJHNoYWRpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zaGFkaW5nLXBhdHRlcm4ucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaGFkaW5nX3BhdHRlcm4oJHNoYWRpbmcsICRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkc2h0eXBlCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHkwCiAgICAgKiBAcGFyYW0gZmxvYXQgJHgxCiAgICAgKiBAcGFyYW0gZmxvYXQgJHkxCiAgICAgKiBAcGFyYW0gZmxvYXQgJGMxCiAgICAgKiBAcGFyYW0gZmxvYXQgJGMyCiAgICAgKiBAcGFyYW0gZmxvYXQgJGMzCiAgICAgKiBAcGFyYW0gZmxvYXQgJGM0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2hhZGluZy5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNoYWRpbmcoJHNodHlwZSwgJHgwLCAkeTAsICR4MSwgJHkxLCAkYzEsICRjMiwgJGMzLCAkYzQsICRvcHRsaXN0KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkc2hhZGluZwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zaGZpbGwucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaGZpbGwoJHNoYWRpbmcpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZXh0CiAgICAgKiBAcGFyYW0gZmxvYXQgJGxlZnQKICAgICAqIEBwYXJhbSBmbG9hdCAkdG9wCiAgICAgKiBAcGFyYW0gZmxvYXQgJHdpZHRoCiAgICAgKiBAcGFyYW0gZmxvYXQgJGhlaWdodAogICAgICogQHBhcmFtIHN0cmluZyAkbW9kZQogICAgICogQHBhcmFtIHN0cmluZyAkZmVhdHVyZQogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNob3ctYm94ZWQucGhwIChkZXApCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaG93X2JveGVkKCR0ZXh0LCAkbGVmdCwgJHRvcCwgJHdpZHRoLCAkaGVpZ2h0LCAkbW9kZSwgJGZlYXR1cmUpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZXh0CiAgICAgKiBAcGFyYW0gZmxvYXQgJHgKICAgICAqIEBwYXJhbSBmbG9hdCAkeQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zaG93LXh5LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hvd194eSgkdGV4dCwgJHgsICR5KSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkdGV4dAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zaG93LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hvdygkdGV4dCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkYWxwaGEKICAgICAqIEBwYXJhbSBmbG9hdCAkYmV0YQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1za2V3LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2tldygkYWxwaGEsICRiZXRhKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkdGV4dAogICAgICogQHBhcmFtIGludCAkZm9udAogICAgICogQHBhcmFtIGZsb2F0ICRmb250c2l6ZQogICAgICoKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc3RyaW5nd2lkdGgucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJpbmd3aWR0aCgkdGV4dCwgJGZvbnQsICRmb250c2l6ZSkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zdHJva2UucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJva2UoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zdXNwZW5kLXBhZ2UucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdXNwZW5kX3BhZ2UoJG9wdGxpc3QpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJHR4CiAgICAgKiBAcGFyYW0gZmxvYXQgJHR5CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXRyYW5zbGF0ZS5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyYW5zbGF0ZSgkdHgsICR0eSkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHV0ZjE2c3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtdXRmMTYtdG8tdXRmOC5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHV0ZjE2X3RvX3V0ZjgoJHV0ZjE2c3RyaW5nKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkdXRmMzJzdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9yZGVyaW5nCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtdXRmMzItdG8tdXRmMTYucGhwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1dGYzMl90b191dGYxNigkdXRmMzJzdHJpbmcsICRvcmRlcmluZykge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHV0ZjhzdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJG9yZGVyaW5nCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtdXRmOC10by11dGYxNi5waHAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHV0ZjhfdG9fdXRmMTYoJHV0ZjhzdHJpbmcsICRvcmRlcmluZykge30KfQoKY2xhc3MgUERGbGliRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CgovKioKICogQWN0aXZhdGVzIGEgcHJldmlvdXNseSBjcmVhdGVkIHN0cnVjdHVyZSBlbGVtZW50IG9yIG90aGVyIGNvbnRlbnQgaXRlbS4KICogQHBhcmFtIHJlc291cmNlICRwZGYgVGhlIHBERiBkb2MKICogQHBhcmFtIGludCAkaWQKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1hY3RpdmF0ZS1pdGVtLnBocAogKi8KZnVuY3Rpb24gUERGX2FjdGl2YXRlX2l0ZW0oJHBkZiwgJGlkKSB7fQoKLyoqCiAqIEFkZCBsYXVuY2ggYW5ub3RhdGlvbiBmb3IgY3VycmVudCBwYWdlIFtkZXByZWNhdGVkXS4KICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICRsbHgKICogQHBhcmFtIGZsb2F0ICRsbHkKICogQHBhcmFtIGZsb2F0ICR1cngKICogQHBhcmFtIGZsb2F0ICR1cnkKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1hZGQtbGF1bmNobGluay5waHAKICogQHNlZSBQREZfY3JlYXRlX2FjdGlvbgogKi8KI1tEZXByZWNhdGVkKCdUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlIFBERl9jcmVhdGVfYWN0aW9uKCkgd2l0aCB0eXBlPUxhdW5jaCBhbmQgUERGX2NyZWF0ZV9hbm5vdGF0aW9uKCkgd2l0aCB0eXBlPUxpbmsgaW5zdGVhZC4nKV0KZnVuY3Rpb24gUERGX2FkZF9sYXVuY2hsaW5rKCRwZGYsICRsbHgsICRsbHksICR1cngsICR1cnksICRmaWxlbmFtZSkge30KCi8qKgogKiBBZGQgYSBsaW5rIGFubm90YXRpb24gdG8gYSB0YXJnZXQgd2l0aGluIHRoZSBjdXJyZW50IFBERiBmaWxlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gZmxvYXQgJGxvd2VybGVmdHgKICogQHBhcmFtIGZsb2F0ICRsb3dlcmxlZnR5CiAqIEBwYXJhbSBmbG9hdCAkdXBwZXJyaWdodHgKICogQHBhcmFtIGZsb2F0ICR1cHBlcnJpZ2h0eQogKiBAcGFyYW0gaW50ICRwYWdlCiAqIEBwYXJhbSBzdHJpbmcgJGRlc3QKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1hZGQtbG9jYWxsaW5rLnBocAogKiBAc2VlIFBERl9jcmVhdGVfYWN0aW9uCiAqLwojW0RlcHJlY2F0ZWQoJ1RoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA2LCB1c2UgUERGX2NyZWF0ZV9hY3Rpb24oKSB3aXRoIHR5cGU9R29UbyBhbmQgUERGX2NyZWF0ZV9hbm5vdGF0aW9uKCkgd2l0aCB0eXBlPUxpbmsgaW5zdGVhZC4nKV0KZnVuY3Rpb24gUERGX2FkZF9sb2NhbGxpbmsoJHBkZiwgJGxvd2VybGVmdHgsICRsb3dlcmxlZnR5LCAkdXBwZXJyaWdodHgsICR1cHBlcnJpZ2h0eSwgJHBhZ2UsICRkZXN0KSB7fQoKLyoqCiAqIENyZWF0ZXMgYSBuYW1lZCBkZXN0aW5hdGlvbiBvbiBhbiBhcmJpdHJhcnkgcGFnZSBpbiB0aGUgY3VycmVudCBkb2N1bWVudC4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkbmFtZQogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYWRkLW5hbWVkZGVzdC5waHAKICovCmZ1bmN0aW9uIFBERl9hZGRfbmFtZWRkZXN0KCRwZGYsICRuYW1lLCAkb3B0bGlzdCkge30KCi8qKgogKiBTZXRzIGFuIGFubm90YXRpb24gZm9yIHRoZSBjdXJyZW50IHBhZ2UuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBmbG9hdCAkbGx4CiAqIEBwYXJhbSBmbG9hdCAkbGx5CiAqIEBwYXJhbSBmbG9hdCAkdXJ4CiAqIEBwYXJhbSBmbG9hdCAkdXJ5CiAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnRzCiAqIEBwYXJhbSBzdHJpbmcgJHRpdGxlCiAqIEBwYXJhbSBzdHJpbmcgJGljb24KICogQHBhcmFtIGludCAkb3BlbgogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWFkZC1ub3RlLnBocAogKiBAc2VlIFBERl9jcmVhdGVfYW5ub3RhdGlvbgogKi8KI1tEZXByZWNhdGVkKCdUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlIFBERl9jcmVhdGVfYW5ub3RhdGlvbigpIHdpdGggdHlwZT1UZXh0IGluc3RlYWQuJyldCmZ1bmN0aW9uIFBERl9hZGRfbm90ZSgkcGRmLCAkbGx4LCAkbGx5LCAkdXJ4LCAkdXJ5LCAkY29udGVudHMsICR0aXRsZSwgJGljb24sICRvcGVuKSB7fQoKLyoqCiAqIEFkZCBhIGZpbGUgbGluayBhbm5vdGF0aW9uIHRvIGEgUERGIHRhcmdldC4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICRib3R0b21fbGVmdF94CiAqIEBwYXJhbSBmbG9hdCAkYm90dG9tX2xlZnRfeQogKiBAcGFyYW0gZmxvYXQgJHVwX3JpZ2h0X3gKICogQHBhcmFtIGZsb2F0ICR1cF9yaWdodF95CiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEBwYXJhbSBpbnQgJHBhZ2UKICogQHBhcmFtIHN0cmluZyAkZGVzdAogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWFkZC1wZGZsaW5rLnBocAogKiBAc2VlIFBERl9jcmVhdGVfYWN0aW9uCiAqLwojW0RlcHJlY2F0ZWQoJ1RoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA2LCB1c2UgUERGX2NyZWF0ZV9hY3Rpb24oKSB3aXRoIHR5cGU9R29Ub1IgYW5kIFBERl9jcmVhdGVfYW5ub3RhdGlvbigpIHdpdGggdHlwZT1MaW5rIGluc3RlYWQuJyldCmZ1bmN0aW9uIFBERl9hZGRfcGRmbGluaygkcGRmLCAkYm90dG9tX2xlZnRfeCwgJGJvdHRvbV9sZWZ0X3ksICR1cF9yaWdodF94LCAkdXBfcmlnaHRfeSwgJGZpbGVuYW1lLCAkcGFnZSwgJGRlc3QpIHt9CgovKioKICogQWRkcyBhIGNlbGwgdG8gYSBuZXcgb3IgZXhpc3RpbmcgdGFibGUuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJHRhYmxlCiAqIEBwYXJhbSBpbnQgJGNvbHVtbgogKiBAcGFyYW0gaW50ICRyb3cKICogQHBhcmFtIHN0cmluZyAkdGV4dAogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1hZGQtdGFibGUtY2VsbC5waHAKICovCmZ1bmN0aW9uIFBERl9hZGRfdGFibGVfY2VsbCgkcGRmLCAkdGFibGUsICRjb2x1bW4sICRyb3csICR0ZXh0LCAkb3B0bGlzdCkge30KCi8qKgogKiBDcmVhdGVzIGEgVGV4dGZsb3cgb2JqZWN0LCBvciBhZGRzIHRleHQgYW5kIGV4cGxpY2l0IG9wdGlvbnMgdG8gYW4gZXhpc3RpbmcgVGV4dGZsb3cuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJHRleHRmbG93CiAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGludAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYWRkLXRleHRmbG93LnBocAogKi8KZnVuY3Rpb24gUERGX2FkZF90ZXh0ZmxvdygkcGRmLCAkdGV4dGZsb3csICR0ZXh0LCAkb3B0bGlzdCkge30KCi8qKgogKiBBZGRzIGFuIGV4aXN0aW5nIGltYWdlIGFzIHRodW1ibmFpbCBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGludCAkaW1hZ2UKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1hZGQtdGh1bWJuYWlsLnBocAogKi8KZnVuY3Rpb24gUERGX2FkZF90aHVtYm5haWwoJHBkZiwgJGltYWdlKSB7fQoKLyoqCiAqIEFkZHMgYSB3ZWJsaW5rIGFubm90YXRpb24gdG8gYSB0YXJnZXQgdXJsIG9uIHRoZSBXZWIuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBmbG9hdCAkbG93ZXJsZWZ0eAogKiBAcGFyYW0gZmxvYXQgJGxvd2VybGVmdHkKICogQHBhcmFtIGZsb2F0ICR1cHBlcnJpZ2h0eAogKiBAcGFyYW0gZmxvYXQgJHVwcGVycmlnaHR5CiAqIEBwYXJhbSBzdHJpbmcgJHVybAogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWFkZC13ZWJsaW5rLnBocAogKiBAc2VlIFBERl9jcmVhdGVfYWN0aW9uCiAqLwojW0RlcHJlY2F0ZWQoJ1RoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA2LCB1c2UgUERGX2NyZWF0ZV9hY3Rpb24oKSB3aXRoIHR5cGU9VVJJIGFuZCBQREZfY3JlYXRlX2Fubm90YXRpb24oKSB3aXRoIHR5cGU9TGluayBpbnN0ZWFkLicpXQpmdW5jdGlvbiBQREZfYWRkX3dlYmxpbmsoJHBkZiwgJGxvd2VybGVmdHgsICRsb3dlcmxlZnR5LCAkdXBwZXJyaWdodHgsICR1cHBlcnJpZ2h0eSwgJHVybCkge30KCi8qKgogKiBBZGRzIGEgY291bnRlcmNsb2Nrd2lzZSBjaXJjdWxhciBhcmMKICoKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICR4CiAqIEBwYXJhbSBmbG9hdCAkeQogKiBAcGFyYW0gZmxvYXQgJHIKICogQHBhcmFtIGZsb2F0ICRhbHBoYQogKiBAcGFyYW0gZmxvYXQgJGJldGEKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1hcmMucGhwCiAqLwpmdW5jdGlvbiBQREZfYXJjKCRwZGYsICR4LCAkeSwgJHIsICRhbHBoYSwgJGJldGEpIHt9CgovKioKICogRXhjZXB0IGZvciB0aGUgZHJhd2luZyBkaXJlY3Rpb24sIHRoaXMgZnVuY3Rpb24gYmVoYXZlcyBleGFjdGx5IGxpa2UgUERGX2FyYygpLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gZmxvYXQgJHgKICogQHBhcmFtIGZsb2F0ICR5CiAqIEBwYXJhbSBmbG9hdCAkcgogKiBAcGFyYW0gZmxvYXQgJGFscGhhCiAqIEBwYXJhbSBmbG9hdCAkYmV0YQogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWFyY24ucGhwCiAqLwpmdW5jdGlvbiBQREZfYXJjbigkcGRmLCAkeCwgJHksICRyLCAkYWxwaGEsICRiZXRhKSB7fQoKLyoqCiAqIEFkZHMgYSBmaWxlIGF0dGFjaG1lbnQgYW5ub3RhdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICRsbHgKICogQHBhcmFtIGZsb2F0ICRsbHkKICogQHBhcmFtIGZsb2F0ICR1cngKICogQHBhcmFtIGZsb2F0ICR1cnkKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICogQHBhcmFtIHN0cmluZyAkZGVzY3JpcHRpb24KICogQHBhcmFtIHN0cmluZyAkYXV0aG9yCiAqIEBwYXJhbSBzdHJpbmcgJG1pbWV0eXBlCiAqIEBwYXJhbSBzdHJpbmcgJGljb24KICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1hdHRhY2gtZmlsZS5waHAKICogQHNlZSBQREZfY3JlYXRlX2Fubm90YXRpb24KICovCiNbRGVwcmVjYXRlZCgnVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZSBQREZfY3JlYXRlX2Fubm90YXRpb24oKSB3aXRoIHR5cGU9RmlsZUF0dGFjaG1lbnQgaW5zdGVhZC4nKV0KZnVuY3Rpb24gUERGX2F0dGFjaF9maWxlKCRwZGYsICRsbHgsICRsbHksICR1cngsICR1cnksICRmaWxlbmFtZSwgJGRlc2NyaXB0aW9uLCAkYXV0aG9yLCAkbWltZXR5cGUsICRpY29uKSB7fQoKLyoqCiAqIENyZWF0ZXMgYSBuZXcgUERGIGZpbGUgc3ViamVjdCB0byB2YXJpb3VzIG9wdGlvbnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWJlZ2luLWRvY3VtZW50LnBocAogKiBAbGluayBodHRwczovL3d3dy5wZGZsaWIuY29tL2ZpbGVhZG1pbi9wZGZsaWIvcGRmL21hbnVhbHMvUERGbGliLTkuMS4yLUFQSS1yZWZlcmVuY2UucGRmCiAqLwpmdW5jdGlvbiBQREZfYmVnaW5fZG9jdW1lbnQoJHBkZiwgJGZpbGVuYW1lLCAkb3B0bGlzdCkge30KCi8qKgogKiBTdGFydHMgYSBUeXBlIDMgZm9udCBkZWZpbml0aW9uLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogKiBAcGFyYW0gZmxvYXQgJGEKICogQHBhcmFtIGZsb2F0ICRiCiAqIEBwYXJhbSBmbG9hdCAkYwogKiBAcGFyYW0gZmxvYXQgJGQKICogQHBhcmFtIGZsb2F0ICRlCiAqIEBwYXJhbSBmbG9hdCAkZgogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYmVnaW4tZm9udC5waHAKICovCmZ1bmN0aW9uIFBERl9iZWdpbl9mb250KCRwZGYsICRmaWxlbmFtZSwgJGEsICRiLCAkYywgJGQsICRlLCAkZiwgJG9wdGxpc3QpIHt9CgovKioKICogU3RhcnRzIGEgZ2x5cGggZGVmaW5pdGlvbiBmb3IgYSBUeXBlIDMgZm9udC4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkZ2x5cGhuYW1lCiAqIEBwYXJhbSBmbG9hdCAkd3gKICogQHBhcmFtIGZsb2F0ICRsbHgKICogQHBhcmFtIGZsb2F0ICRsbHkKICogQHBhcmFtIGZsb2F0ICR1cngKICogQHBhcmFtIGZsb2F0ICR1cnkKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1iZWdpbi1nbHlwaC5waHAKICovCmZ1bmN0aW9uIFBERl9iZWdpbl9nbHlwaCgkcGRmLCAkZ2x5cGhuYW1lLCAkd3gsICRsbHgsICRsbHksICR1cngsICR1cnkpIHt9CgovKioKICogT3BlbnMgYSBzdHJ1Y3R1cmUgZWxlbWVudCBvciBvdGhlciBjb250ZW50IGl0ZW0gd2l0aCBhdHRyaWJ1dGVzIHN1cHBsaWVkIGFzIG9wdGlvbnMuCiAqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJHRhZwogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1iZWdpbi1pdGVtLnBocAogKi8KZnVuY3Rpb24gUERGX2JlZ2luX2l0ZW0oJHBkZiwgJHRhZywgJG9wdGxpc3QpIHt9CgovKioKICogU3RhcnRzIGEgbGF5ZXIgZm9yIHN1YnNlcXVlbnQgb3V0cHV0IG9uIHRoZSBwYWdlLgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICRsYXllcgogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWJlZ2luLWxheWVyLnBocAogKi8KZnVuY3Rpb24gUERGX2JlZ2luX2xheWVyKCRwZGYsICRsYXllcikge30KCi8qKgogKiBBZGRzIGEgbmV3IHBhZ2UgdG8gdGhlIGRvY3VtZW50LCBhbmQgc3BlY2lmaWVzIHZhcmlvdXMgb3B0aW9ucy4gVGhlIHBhcmFtZXRlcnMgd2lkdGggYW5kIGhlaWdodCBhcmUgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIG5ldyBwYWdlIGluIHBvaW50cy4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICR3aWR0aAogKiBAcGFyYW0gZmxvYXQgJGhlaWdodAogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYmVnaW4tcGFnZS1leHQucGhwCiAqLwpmdW5jdGlvbiBQREZfYmVnaW5fcGFnZV9leHQoJHBkZiwgJHdpZHRoLCAkaGVpZ2h0LCAkb3B0bGlzdCkge30KCi8qKgogKiBBZGRzIGEgbmV3IHBhZ2UgdG8gdGhlIGRvY3VtZW50LgogKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gZmxvYXQgJHdpZHRoCiAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYmVnaW4tcGFnZS5waHAKICogQHNlZSBQREZfYmVnaW5fcGFnZV9leHQKICovCiNbRGVwcmVjYXRlZCgnVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIHNpbmNlIFBERmxpYiB2ZXJzaW9uIDYsIHVzZSBQREZfYmVnaW5fcGFnZV9leHQoKSBpbnN0ZWFkLicpXQpmdW5jdGlvbiBQREZfYmVnaW5fcGFnZSgkcGRmLCAkd2lkdGgsICRoZWlnaHQpIHt9CgovKioKICogU3RhcnRzIGEgbmV3IHBhdHRlcm4gZGVmaW5pdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICR3aWR0aAogKiBAcGFyYW0gZmxvYXQgJGhlaWdodAogKiBAcGFyYW0gZmxvYXQgJHhzdGVwCiAqIEBwYXJhbSBmbG9hdCAkeXN0ZXAKICogQHBhcmFtIGludCAkcGFpbnR0eXBlCiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1iZWdpbi1wYXR0ZXJuLnBocAogKi8KZnVuY3Rpb24gUERGX2JlZ2luX3BhdHRlcm4oJHBkZiwgJHdpZHRoLCAkaGVpZ2h0LCAkeHN0ZXAsICR5c3RlcCwgJHBhaW50dHlwZSkge30KCi8qKgogKiBTdGFydHMgYSBuZXcgdGVtcGxhdGUgZGVmaW5pdGlvbi4KICoKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICR3aWR0aAogKiBAcGFyYW0gZmxvYXQgJGhlaWdodAogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1iZWdpbi10ZW1wbGF0ZS1leHQucGhwCiAqLwpmdW5jdGlvbiBQREZfYmVnaW5fdGVtcGxhdGVfZXh0KCRwZGYsICR3aWR0aCwgJGhlaWdodCwgJG9wdGxpc3QpIHt9CgovKioKICogU3RhcnQgdGVtcGxhdGUgZGVmaW5pdGlvbiBbZGVwcmVjYXRlZF0KICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICR3aWR0aAogKiBAcGFyYW0gZmxvYXQgJGhlaWdodAogKgogKiBAcmV0dXJuIGludAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtYmVnaW4tdGVtcGxhdGUucGhwCiAqIEBzZWUgUERGX2JlZ2luX3RlbXBsYXRlX2V4dAogKi8KI1tEZXByZWNhdGVkKCdUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNywgdXNlIFBERl9iZWdpbl90ZW1wbGF0ZV9leHQoKSBpbnN0ZWFkLicpXQpmdW5jdGlvbiBQREZfYmVnaW5fdGVtcGxhdGUoJHBkZiwgJHdpZHRoLCAkaGVpZ2h0KSB7fQoKLyoqCiAqIERyYXcgYSBjaXJjbGUKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICR4CiAqIEBwYXJhbSBmbG9hdCAkeQogKiBAcGFyYW0gZmxvYXQgJHIKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jaXJjbGUucGhwCiAqLwpmdW5jdGlvbiBQREZfY2lyY2xlKCRwZGYsICR4LCAkeSwgJHIpIHt9CgovKioKICogQ2xpcCB0byBjdXJyZW50IHBhdGgKICogQHBhcmFtIHJlc291cmNlICRwZGYKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jbGlwLnBocAogKi8KZnVuY3Rpb24gUERGX2NsaXAoJHBkZikge30KCi8qKgogKiBDbG9zZSBpbWFnZQogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICRpbWFnZQogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWNsb3NlLWltYWdlLnBocAogKi8KZnVuY3Rpb24gUERGX2Nsb3NlX2ltYWdlKCRwZGYsICRpbWFnZSkge30KCi8qKgogKiBDbG9zZXMgdGhlIHBhZ2UgaGFuZGxlLCBhbmQgZnJlZXMgYWxsIHBhZ2UtcmVsYXRlZCByZXNvdXJjZXMKICoKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGludCAkcGFnZQogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWNsb3NlLXBkaS1wYWdlLnBocAogKi8KZnVuY3Rpb24gUERGX2Nsb3NlX3BkaV9wYWdlKCRwZGYsICRwYWdlKSB7fQoKLyoqCiAqIENsb3NlIHRoZSBpbnB1dCBwZGYgZG9jdW1lbnQgW2RlcHJlY2F0ZWRdCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJGRvYwogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWNsb3NlLXBkaS5waHAKICogQHNlZSBQREZfY2xvc2VfcGRpX2RvY3VtZW50CiAqLwojW0RlcHJlY2F0ZWQoJ1RoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzaW5jZSBQREZsaWIgdmVyc2lvbiA3LCB1c2UgUERGX2Nsb3NlX3BkaV9kb2N1bWVudCgpIGluc3RlYWQuJyldCmZ1bmN0aW9uIFBERl9jbG9zZV9wZGkoJHBkZiwgJGRvYykge30KCi8qKgogKiBDbG9zZSBwZGYgcmVzb3VyY2UgW2RlcHJlY2F0ZWRdCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY2xvc2UucGhwCiAqCiAqIEBzZWUgUERGX2VuZF9kb2N1bWVudAogKi8KI1tEZXByZWNhdGVkKCdUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgc2luY2UgUERGbGliIHZlcnNpb24gNiwgdXNlIFBERl9lbmRfZG9jdW1lbnQoKSBpbnN0ZWFkLicpXQpmdW5jdGlvbiBQREZfY2xvc2UoJHBkZikge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICRkb2MKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBkZmxpYi5jb20vZmlsZWFkbWluL3BkZmxpYi9wZGYvbWFudWFscy9QREZsaWItOS4zLjAtQVBJLXJlZmVyZW5jZS5wZGYKICovCmZ1bmN0aW9uIFBERl9jbG9zZV9wZGlfZG9jdW1lbnQoJHBkZiwgJGRvYykge30KCi8qKgogKiBDbG9zZSwgZmlsbCBhbmQgc3Ryb2tlIGN1cnJlbnQgcGF0aAogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWNsb3NlcGF0aC1maWxsLXN0cm9rZS5waHAKICovCmZ1bmN0aW9uIFBERl9jbG9zZXBhdGhfZmlsbF9zdHJva2UoJHBkZikge30KCi8qKgogKiBDbG9zZSBhbmQgc3Ryb2tlIHBhdGgKICogQHBhcmFtIHJlc291cmNlICRwZGYKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jbG9zZXBhdGgtc3Ryb2tlLnBocAogKi8KZnVuY3Rpb24gUERGX2Nsb3NlcGF0aF9zdHJva2UoJHBkZikge30KCi8qKgogKiBDbG9zZSBjdXJyZW50IHBhdGgKICogQHBhcmFtIHJlc291cmNlICRwZGYKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jbG9zZXBhdGgucGhwCiAqLwpmdW5jdGlvbiBQREZfY2xvc2VwYXRoKCRwZGYpIHt9CgovKioKICogQ29uY2F0ZW5hdGUgYSBtYXRyaXggdG8gdGhlIGN0bQogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gZmxvYXQgJGEKICogQHBhcmFtIGZsb2F0ICRiCiAqIEBwYXJhbSBmbG9hdCAkYwogKiBAcGFyYW0gZmxvYXQgJGQKICogQHBhcmFtIGZsb2F0ICRlCiAqIEBwYXJhbSBmbG9hdCAkZgogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWNvbmNhdC5waHAKICovCmZ1bmN0aW9uIFBERl9jb25jYXQoJHBkZiwgJGEsICRiLCAkYywgJGQsICRlLCAkZikge30KCi8qKgogKiBPdXRwdXQgdGV4dCBpbiBuZXh0IGxpbmUKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkdGV4dAogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWNvbnRpbnVlLXRleHQucGhwCiAqLwpmdW5jdGlvbiBQREZfY29udGludWVfdGV4dCgkcGRmLCAkdGV4dCkge30KCi8qKgogKiBDcmVhdGUgM2QgdmlldwogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICR1c2VybmFtZQogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jcmVhdGUtM2R2aWV3LnBocAogKi8KZnVuY3Rpb24gUERGX2NyZWF0ZV8zZHZpZXcoJHBkZiwgJHVzZXJuYW1lLCAkb3B0bGlzdCkge30KCi8qKgogKiBDcmVhdGUgYWN0aW9uIGZvciBvYmplY3RzIG9yIGV2ZW50cwogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICR0eXBlCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWNyZWF0ZS1hY3Rpb24ucGhwCiAqLwpmdW5jdGlvbiBQREZfY3JlYXRlX2FjdGlvbigkcGRmLCAkdHlwZSwgJG9wdGxpc3QpIHt9CgovKioKICogQ3JlYXRlIHJlY3Rhbmd1bGFyIGFubm90YXRpb24KICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICRsbHgKICogQHBhcmFtIGZsb2F0ICRsbHkKICogQHBhcmFtIGZsb2F0ICR1cngKICogQHBhcmFtIGZsb2F0ICR1cnkKICogQHBhcmFtIHN0cmluZyAkdHlwZQogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY3JlYXRlLWFubm90YXRpb24ucGhwCiAqLwpmdW5jdGlvbiBQREZfY3JlYXRlX2Fubm90YXRpb24oJHBkZiwgJGxseCwgJGxseSwgJHVyeCwgJHVyeSwgJHR5cGUsICRvcHRsaXN0KSB7fQoKLyoqCiAqIENyZWF0ZSBib29rbWFyCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGludAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY3JlYXRlLWJvb2ttYXJrLnBocAogKi8KZnVuY3Rpb24gUERGX2NyZWF0ZV9ib29rbWFyaygkcGRmLCAkdGV4dCwgJG9wdGxpc3QpIHt9CgovKioKICogQ3JlYXRlIGZvcm0gZmllbGQKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICRsbHgKICogQHBhcmFtIGZsb2F0ICRsbHkKICogQHBhcmFtIGZsb2F0ICR1cngKICogQHBhcmFtIGZsb2F0ICR1cnkKICogQHBhcmFtIHN0cmluZyAkbmFtZQogKiBAcGFyYW0gc3RyaW5nICR0eXBlCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jcmVhdGUtZmllbGQucGhwCiAqLwpmdW5jdGlvbiBQREZfY3JlYXRlX2ZpZWxkKCRwZGYsICRsbHgsICRsbHksICR1cngsICR1cnksICRuYW1lLCAkdHlwZSwgJG9wdGxpc3QpIHt9CgovKioKICogQ3JlYXRlIGZvcm0gZmllbGQgZ3JvdXAKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkbmFtZQogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY3JlYXRlLWZpZWxkZ3JvdXAucGhwCiAqLwpmdW5jdGlvbiBQREZfY3JlYXRlX2ZpZWxkZ3JvdXAoJHBkZiwgJG5hbWUsICRvcHRsaXN0KSB7fQoKLyoqCiAqIENyZWF0ZSBncmFwaGljcyBzdGF0ZSBvYmplY3QKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGludAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY3JlYXRlLWdzdGF0ZS5waHAKICovCmZ1bmN0aW9uIFBERl9jcmVhdGVfZ3N0YXRlKCRwZGYsICRvcHRsaXN0KSB7fQoKLyoqCiAqIENyZWF0ZSBwZGZsaWIgdmlydHVhbCBmaWxlCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWNyZWF0ZS1wdmYucGhwCiAqLwpmdW5jdGlvbiBQREZfY3JlYXRlX3B2ZigkcGRmLCAkZmlsZW5hbWUsICRkYXRhLCAkb3B0bGlzdCkge30KCi8qKgogKiBDcmVhdGUgdGV4dGZsb3cgb2JqZWN0CiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGludAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtY3JlYXRlLXRleHRmbG93LnBocAogKi8KZnVuY3Rpb24gUERGX2NyZWF0ZV90ZXh0ZmxvdygkcGRmLCAkdGV4dCwgJG9wdGxpc3QpIHt9CgovKioKICogRHJhdyBiZXppZXIgY3VydmUKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICR4MQogKiBAcGFyYW0gZmxvYXQgJHkxCiAqIEBwYXJhbSBmbG9hdCAkeDIKICogQHBhcmFtIGZsb2F0ICR5MgogKiBAcGFyYW0gZmxvYXQgJHgzCiAqIEBwYXJhbSBmbG9hdCAkeTMKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1jdXJ2ZXRvLnBocAogKi8KZnVuY3Rpb24gUERGX2N1cnZldG8oJHBkZiwgJHgxLCAkeTEsICR4MiwgJHkyLCAkeDMsICR5Mykge30KCi8qKgogKiBDcmVhdGUgbGF5ZXIgZGVmaW5pdGlvbgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWRlZmluZS1sYXllci5waHAKICovCmZ1bmN0aW9uIFBERl9kZWZpbmVfbGF5ZXIoJHBkZiwgJG5hbWUsICRvcHRsaXN0KSB7fQoKLyoqCiAqIERlbGV0ZSBwZGZsaWIgdmlydHVhbCBmaWxlCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1kZWxldGUtcHZmLnBocAogKi8KZnVuY3Rpb24gUERGX2RlbGV0ZV9wdmYoJHBkZiwgJGZpbGVuYW1lKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJHRhYmxlCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1kZWxldGUtdGFibGUucGhwCiAqLwpmdW5jdGlvbiBQREZfZGVsZXRlX3RhYmxlKCRwZGYsICR0YWJsZSwgJG9wdGxpc3QpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGludCAkdGV4dGZsb3cKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1kZWxldGUtdGV4dGZsb3cucGhwCiAqLwpmdW5jdGlvbiBQREZfZGVsZXRlX3RleHRmbG93KCRwZGYsICR0ZXh0Zmxvdykge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWRlbGV0ZS5waHAKICovCmZ1bmN0aW9uIFBERl9kZWxldGUoJHBkZikge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZwogKiBAcGFyYW0gaW50ICRzbG90CiAqIEBwYXJhbSBzdHJpbmcgJGdseXBobmFtZQogKiBAcGFyYW0gaW50ICR1dgogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWVuY29kaW5nLXNldC1jaGFyLnBocAogKi8KZnVuY3Rpb24gUERGX2VuY29kaW5nX3NldF9jaGFyKCRwZGYsICRlbmNvZGluZywgJHNsb3QsICRnbHlwaG5hbWUsICR1dikge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZW5kLWRvY3VtZW50LnBocAogKi8KZnVuY3Rpb24gUERGX2VuZF9kb2N1bWVudCgkcGRmLCAkb3B0bGlzdCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWVuZC1mb250LnBocAogKi8KZnVuY3Rpb24gUERGX2VuZF9mb250KCRwZGYpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1lbmQtZ2x5cGgucGhwCiAqLwpmdW5jdGlvbiBQREZfZW5kX2dseXBoKCRwZGYpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGludCAkaWQKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1lbmQtaXRlbS5waHAKICovCmZ1bmN0aW9uIFBERl9lbmRfaXRlbSgkcGRmLCAkaWQpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1lbmQtbGF5ZXIucGhwCiAqLwpmdW5jdGlvbiBQREZfZW5kX2xheWVyKCRwZGYpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWVuZC1wYWdlLWV4dC5waHAKICovCmZ1bmN0aW9uIFBERl9lbmRfcGFnZV9leHQoJHBkZiwgJG9wdGxpc3QpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYgVGhlIFBERiBkb2MKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1lbmQtcGFnZS5waHAKICovCmZ1bmN0aW9uIFBERl9lbmRfcGFnZSgkcGRmKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmIFRoZSBQREYgZG9jCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZW5kLXBhdHRlcm4ucGhwCiAqLwpmdW5jdGlvbiBQREZfZW5kX3BhdHRlcm4oJHBkZikge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZiBUaGUgUERGIGRvYwogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWVuZC10ZW1wbGF0ZS5waHAKICovCmZ1bmN0aW9uIFBERl9lbmRfdGVtcGxhdGUoJHBkZikge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZiBUaGUgUERGIGRvYwogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWVuZHBhdGgucGhwCiAqLwpmdW5jdGlvbiBQREZfZW5kcGF0aCgkcGRmKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJHBhZ2UKICogQHBhcmFtIHN0cmluZyAkYmxvY2tuYW1lCiAqIEBwYXJhbSBpbnQgJGltYWdlCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWZpbGwtaW1hZ2VibG9jay5waHAKICovCmZ1bmN0aW9uIFBERl9maWxsX2ltYWdlYmxvY2soJHBkZiwgJHBhZ2UsICRibG9ja25hbWUsICRpbWFnZSwgJG9wdGxpc3QpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGludCAkcGFnZQogKiBAcGFyYW0gc3RyaW5nICRibG9ja25hbWUKICogQHBhcmFtIGludCAkY29udGVudHMKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGludAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZmlsbC1wZGZibG9jay5waHAKICovCmZ1bmN0aW9uIFBERl9maWxsX3BkZmJsb2NrKCRwZGYsICRwYWdlLCAkYmxvY2tuYW1lLCAkY29udGVudHMsICRvcHRsaXN0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZmlsbC1zdHJva2UucGhwCiAqLwpmdW5jdGlvbiBQREZfZmlsbF9zdHJva2UoJHBkZikge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICRwYWdlCiAqIEBwYXJhbSBzdHJpbmcgJGJsb2NrbmFtZQogKiBAcGFyYW0gc3RyaW5nICR0ZXh0CiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWZpbGwtdGV4dGJsb2NrLnBocAogKi8KZnVuY3Rpb24gUERGX2ZpbGxfdGV4dGJsb2NrKCRwZGYsICRwYWdlLCAkYmxvY2tuYW1lLCAkdGV4dCwgJG9wdGxpc3QpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1maWxsLnBocAogKi8KZnVuY3Rpb24gUERGX2ZpbGwoJHBkZikge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRmb250bmFtZQogKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZwogKiBAcGFyYW0gaW50ICRlbWJlZAogKgogKiBAcmV0dXJuIGludAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZmluZGZvbnQucGhwKERlcCkKICovCmZ1bmN0aW9uIFBERl9maW5kZm9udCgkcGRmLCAkZm9udG5hbWUsICRlbmNvZGluZywgJGVtYmVkKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJGltYWdlCiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWZpdC1pbWFnZS5waHAKICovCmZ1bmN0aW9uIFBERl9maXRfaW1hZ2UoJHBkZiwgJGltYWdlLCAkeCwgJHksICRvcHRsaXN0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJHBhZ2UKICogQHBhcmFtIGZsb2F0ICR4CiAqIEBwYXJhbSBmbG9hdCAkeQogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZml0LXBkaS1wYWdlLnBocAogKi8KZnVuY3Rpb24gUERGX2ZpdF9wZGlfcGFnZSgkcGRmLCAkcGFnZSwgJHgsICR5LCAkb3B0bGlzdCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICR0YWJsZQogKiBAcGFyYW0gZmxvYXQgJGxseAogKiBAcGFyYW0gZmxvYXQgJGxseQogKiBAcGFyYW0gZmxvYXQgJHVyeAogKiBAcGFyYW0gZmxvYXQgJHVyeQogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1maXQtdGFibGUucGhwCiAqLwpmdW5jdGlvbiBQREZfZml0X3RhYmxlKCRwZGYsICR0YWJsZSwgJGxseCwgJGxseSwgJHVyeCwgJHVyeSwgJG9wdGxpc3QpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGludCAkdGV4dGZsb3cKICogQHBhcmFtIGZsb2F0ICRsbHgKICogQHBhcmFtIGZsb2F0ICRsbHkKICogQHBhcmFtIGZsb2F0ICR1cngKICogQHBhcmFtIGZsb2F0ICR1cnkKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIHN0cmluZwogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZml0LXRleHRmbG93LnBocAogKi8KZnVuY3Rpb24gUERGX2ZpdF90ZXh0ZmxvdygkcGRmLCAkdGV4dGZsb3csICRsbHgsICRsbHksICR1cngsICR1cnksICRvcHRsaXN0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICogQHBhcmFtIGZsb2F0ICR4CiAqIEBwYXJhbSBmbG9hdCAkeQogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZml0LXRleHRsaW5lLnBocAogKi8KZnVuY3Rpb24gUERGX2ZpdF90ZXh0bGluZSgkcGRmLCAkdGV4dCwgJHgsICR5LCAkb3B0bGlzdCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKgogKiBAcmV0dXJuIHN0cmluZwogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZ2V0LWFwaW5hbWUucGhwCiAqLwpmdW5jdGlvbiBQREZfZ2V0X2FwaW5hbWUoJHBkZikge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKgogKiBAcmV0dXJuIHN0cmluZwogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZ2V0LWJ1ZmZlci5waHAKICovCmZ1bmN0aW9uIFBERl9nZXRfYnVmZmVyKCRwZGYpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICoKICogQHJldHVybiBzdHJpbmcKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWdldC1lcnJtc2cucGhwCiAqLwpmdW5jdGlvbiBQREZfZ2V0X2Vycm1zZygkcGRmKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1nZXQtZXJybnVtLnBocAogKi8KZnVuY3Rpb24gUERGX2dldF9lcnJudW0oJHBkZikge30KCi8qKgogKiBAcmV0dXJuIGludAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZ2V0LW1ham9ydmVyc2lvbi5waHAoZGVwKQogKi8KZnVuY3Rpb24gUERGX2dldF9tYWpvcnZlcnNpb24oKSB7fQoKLyoqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1nZXQtbWlub3J2ZXJzaW9uLnBocChkZXApCiAqLwpmdW5jdGlvbiBQREZfZ2V0X21pbm9ydmVyc2lvbigpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAka2V5d29yZAogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gZmxvYXQKICoKICogQGxpbmsgaHR0cHM6Ly93d3cucGRmbGliLmNvbS9maWxlYWRtaW4vcGRmbGliL3BkZi9tYW51YWxzL1BERmxpYi05LjMuMC1BUEktcmVmZXJlbmNlLnBkZgogKi8KZnVuY3Rpb24gUERGX2dldF9vcHRpb24oJHBkZiwgJGtleXdvcmQsICRvcHRsaXN0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcGFyYW0gZmxvYXQgJG1vZGlmaWVyCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1nZXQtcGFyYW1ldGVyLnBocAogKi8KZnVuY3Rpb24gUERGX2dldF9wYXJhbWV0ZXIoJHBkZiwgJGtleSwgJG1vZGlmaWVyKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcGFyYW0gaW50ICRkb2MKICogQHBhcmFtIGludCAkcGFnZQogKiBAcGFyYW0gaW50ICRyZXNlcnZlZAogKgogKiBAcmV0dXJuIHN0cmluZwogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZ2V0LXBkaS1wYXJhbWV0ZXIucGhwCiAqLwpmdW5jdGlvbiBQREZfZ2V0X3BkaV9wYXJhbWV0ZXIoJHBkZiwgJGtleSwgJGRvYywgJHBhZ2UsICRyZXNlcnZlZCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHBhcmFtIGludCAkZG9jCiAqIEBwYXJhbSBpbnQgJHBhZ2UKICogQHBhcmFtIGludCAkcmVzZXJ2ZWQKICoKICogQHJldHVybiBmbG9hdAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtZ2V0LXBkaS12YWx1ZS5waHAKICovCmZ1bmN0aW9uIFBERl9nZXRfcGRpX3ZhbHVlKCRwZGYsICRrZXksICRkb2MsICRwYWdlLCAkcmVzZXJ2ZWQpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAka2V5d29yZAogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gZmxvYXQKICoKICogQGxpbmsgaHR0cHM6Ly93d3cucGRmbGliLmNvbS9maWxlYWRtaW4vcGRmbGliL3BkZi9tYW51YWxzL1BERmxpYi05LjMuMC1BUEktcmVmZXJlbmNlLnBkZgogKi8KZnVuY3Rpb24gUERGX2dldF9zdHJpbmcoJGtleXdvcmQsICRvcHRsaXN0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcGFyYW0gZmxvYXQgJG1vZGlmaWVyCiAqCiAqIEByZXR1cm4gZmxvYXQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWdldC12YWx1ZS5waHAKICovCmZ1bmN0aW9uIFBERl9nZXRfdmFsdWUoJHBkZiwgJGtleSwgJG1vZGlmaWVyKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJGZvbnQKICogQHBhcmFtIHN0cmluZyAka2V5d29yZAogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gZmxvYXQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWluZm8tZm9udC5waHAKICovCmZ1bmN0aW9uIFBERl9pbmZvX2ZvbnQoJHBkZiwgJGZvbnQsICRrZXl3b3JkLCAkb3B0bGlzdCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICRpbWFnZQogKiBAcGFyYW0gc3RyaW5nICRrZXl3b3JkCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBmbG9hdAogKgogKiBAbGluayBodHRwczovL3d3dy5wZGZsaWIuY29tL2ZpbGVhZG1pbi9wZGZsaWIvcGRmL21hbnVhbHMvUERGbGliLTkuMy4wLUFQSS1yZWZlcmVuY2UucGRmCiAqLwpmdW5jdGlvbiBQREZfaW5mb19pbWFnZSgkcGRmLCAkaW1hZ2UsICRrZXl3b3JkLCAkb3B0bGlzdCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICRncmFwaGljcwogKiBAcGFyYW0gc3RyaW5nICRrZXl3b3JkCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBmbG9hdAogKgogKiBAbGluayBodHRwczovL3d3dy5wZGZsaWIuY29tL2ZpbGVhZG1pbi9wZGZsaWIvcGRmL21hbnVhbHMvUERGbGliLTkuMy4wLUFQSS1yZWZlcmVuY2UucGRmCiAqLwpmdW5jdGlvbiBQREZfaW5mb19ncmFwaGljcygkcGRmLCAkZ3JhcGhpY3MsICRrZXl3b3JkLCAkb3B0bGlzdCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICRwYXRoCiAqIEBwYXJhbSBzdHJpbmcgJGtleXdvcmQKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGZsb2F0CiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBkZmxpYi5jb20vZmlsZWFkbWluL3BkZmxpYi9wZGYvbWFudWFscy9QREZsaWItOS4zLjAtQVBJLXJlZmVyZW5jZS5wZGYKICovCmZ1bmN0aW9uIFBERl9pbmZvX3BhdGgoJHBkZiwgJHBhdGgsICRrZXl3b3JkLCAkb3B0bGlzdCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICRwYXRoCiAqIEBwYXJhbSBzdHJpbmcgJGtleXdvcmQKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGZsb2F0CiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBkZmxpYi5jb20vZmlsZWFkbWluL3BkZmxpYi9wZGYvbWFudWFscy9QREZsaWItOS4zLjAtQVBJLXJlZmVyZW5jZS5wZGYKICovCmZ1bmN0aW9uIFBERl9pbmZvX3BkaV9wYWdlKCRwZGYsICRwYWdlLCAka2V5d29yZCwgJG9wdGxpc3QpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICogQHBhcmFtIHN0cmluZyAka2V5d29yZAogKgogKiBAcmV0dXJuIGZsb2F0CiAqLwpmdW5jdGlvbiBQREZfaW5mb19wdmYoJHBkZiwgJGZpbGVuYW1lLCAka2V5d29yZCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRib3huYW1lCiAqIEBwYXJhbSBpbnQgJG51bQogKiBAcGFyYW0gc3RyaW5nICRrZXl3b3JkCiAqCiAqIEByZXR1cm4gZmxvYXQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWluZm8tbWF0Y2hib3gucGhwCiAqLwpmdW5jdGlvbiBQREZfaW5mb19tYXRjaGJveCgkcGRmLCAkYm94bmFtZSwgJG51bSwgJGtleXdvcmQpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGludCAkdGFibGUKICogQHBhcmFtIHN0cmluZyAka2V5d29yZAogKgogKiBAcmV0dXJuIGZsb2F0CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1pbmZvLXRhYmxlLnBocAogKi8KZnVuY3Rpb24gUERGX2luZm9fdGFibGUoJHBkZiwgJHRhYmxlLCAka2V5d29yZCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICR0ZXh0ZmxvdwogKiBAcGFyYW0gc3RyaW5nICRrZXl3b3JkCiAqCiAqIEByZXR1cm4gZmxvYXQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWluZm8tdGV4dGZsb3cucGhwCiAqLwpmdW5jdGlvbiBQREZfaW5mb190ZXh0ZmxvdygkcGRmLCAkdGV4dGZsb3csICRrZXl3b3JkKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICogQHBhcmFtIHN0cmluZyAka2V5d29yZAogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gZmxvYXQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWluZm8tdGV4dGxpbmUucGhwCiAqLwpmdW5jdGlvbiBQREZfaW5mb190ZXh0bGluZSgkcGRmLCAkdGV4dCwgJGtleXdvcmQsICRvcHRsaXN0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtaW5pdGdyYXBoaWNzLnBocAogKi8KZnVuY3Rpb24gUERGX2luaXRncmFwaGljcygkcGRmKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1saW5ldG8ucGhwCiAqLwpmdW5jdGlvbiBQREZfbGluZXRvKCRwZGYsICR4LCAkeSkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1sb2FkLTNkZGF0YS5waHAKICovCmZ1bmN0aW9uIFBERl9sb2FkXzNkZGF0YSgkcGRmLCAkZmlsZW5hbWUsICRvcHRsaXN0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJGZvbnRuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWxvYWQtZm9udC5waHAKICovCmZ1bmN0aW9uIFBERl9sb2FkX2ZvbnQoJHBkZiwgJGZvbnRuYW1lLCAkZW5jb2RpbmcsICRvcHRsaXN0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJHByb2ZpbGVuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLWxvYWQtaWNjcHJvZmlsZS5waHAKICovCmZ1bmN0aW9uIFBERl9sb2FkX2ljY3Byb2ZpbGUoJHBkZiwgJHByb2ZpbGVuYW1lLCAkb3B0bGlzdCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRpbWFnZXR5cGUKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGludAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtbG9hZC1pbWFnZS5waHAKICovCmZ1bmN0aW9uIFBERl9sb2FkX2ltYWdlKCRwZGYsICRpbWFnZXR5cGUsICRmaWxlbmFtZSwgJG9wdGxpc3QpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkc3BvdG5hbWUKICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW1ha2VzcG90Y29sb3IucGhwCiAqLwpmdW5jdGlvbiBQREZfbWFrZXNwb3Rjb2xvcigkcGRmLCAkc3BvdG5hbWUpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICR4CiAqIEBwYXJhbSBmbG9hdCAkeQogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW1vdmV0by5waHAKICovCmZ1bmN0aW9uIFBERl9tb3ZldG8oJHBkZiwgJHgsICR5KSB7fQoKLyoqCiAqIEByZXR1cm4gcmVzb3VyY2UKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW5ldy5waHAKICovCmZ1bmN0aW9uIFBERl9uZXcoKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEBwYXJhbSBpbnQgJHdpZHRoCiAqIEBwYXJhbSBpbnQgJGhlaWdodAogKiBAcGFyYW0gaW50ICRCaXRSZXZlcnNlCiAqIEBwYXJhbSBpbnQgJGsKICogQHBhcmFtIGludCAkQmxhY2tsczEKICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW9wZW4tY2NpdHQucGhwKGRlcCkKICovCmZ1bmN0aW9uIFBERl9vcGVuX2NjaXR0KCRwZGYsICRmaWxlbmFtZSwgJHdpZHRoLCAkaGVpZ2h0LCAkQml0UmV2ZXJzZSwgJGssICRCbGFja2xzMSkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW9wZW4tZmlsZS5waHAoZGVwKQogKi8KZnVuY3Rpb24gUERGX29wZW5fZmlsZSgkcGRmLCAkZmlsZW5hbWUpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkaW1hZ2V0eXBlCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZ3BhcmFtCiAqIEBwYXJhbSBpbnQgJGludHBhcmFtCiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1vcGVuLWltYWdlLWZpbGUucGhwKGRlcCkKICovCmZ1bmN0aW9uIFBERl9vcGVuX2ltYWdlX2ZpbGUoJHBkZiwgJGltYWdldHlwZSwgJGZpbGVuYW1lLCAkc3RyaW5ncGFyYW0sICRpbnRwYXJhbSkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRpbWFnZXR5cGUKICogQHBhcmFtIHN0cmluZyAkc291cmNlCiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICogQHBhcmFtIGludCAkbGVuZ3RoCiAqIEBwYXJhbSBpbnQgJHdpZHRoCiAqIEBwYXJhbSBpbnQgJGhlaWdodAogKiBAcGFyYW0gaW50ICRjb21wb25lbnRzCiAqIEBwYXJhbSBpbnQgJGJwYwogKiBAcGFyYW0gc3RyaW5nICRwYXJhbXMKICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW9wZW4taW1hZ2UucGhwKGRlcCkKICovCmZ1bmN0aW9uIFBERl9vcGVuX2ltYWdlKCRwZGYsICRpbWFnZXR5cGUsICRzb3VyY2UsICRkYXRhLCAkbGVuZ3RoLCAkd2lkdGgsICRoZWlnaHQsICRjb21wb25lbnRzLCAkYnBjLCAkcGFyYW1zKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSByZXNvdXJjZSAkaW1hZ2UKICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW9wZW4tbWVtb3J5LWltYWdlLnBocChub3Qgc3VwcG9ydGVkKQogKi8KZnVuY3Rpb24gUERGX29wZW5fbWVtb3J5X2ltYWdlKCRwZGYsICRpbWFnZSkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZQogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1vcGVuLXBkaS1kb2N1bWVudC5waHAKICovCmZ1bmN0aW9uIFBERl9vcGVuX3BkaV9kb2N1bWVudCgkcGRmLCAkZmlsZW5hbWUsICRvcHRsaXN0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJGRvYwogKiBAcGFyYW0gaW50ICRwYWdlbnVtYmVyCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW9wZW4tcGRpLXBhZ2UucGhwCiAqLwpmdW5jdGlvbiBQREZfb3Blbl9wZGlfcGFnZSgkcGRmLCAkZG9jLCAkcGFnZW51bWJlciwgJG9wdGxpc3QpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKiBAcGFyYW0gaW50ICRsZW4KICoKICogQHJldHVybiBpbnQKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLW9wZW4tcGRpLnBocAogKi8KZnVuY3Rpb24gUERGX29wZW5fcGRpKCRwZGYsICRmaWxlbmFtZSwgJG9wdGxpc3QsICRsZW4pIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGludCAkZG9jCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICoKICogQHJldHVybiBmbG9hdAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtcGNvcy1nZXQtbnVtYmVyLnBocAogKi8KZnVuY3Rpb24gUERGX3Bjb3NfZ2V0X251bWJlcigkcGRmLCAkZG9jLCAkcGF0aCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICRkb2MKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1wY29zLWdldC1zdHJlYW0ucGhwCiAqLwpmdW5jdGlvbiBQREZfcGNvc19nZXRfc3RyZWFtKCRwZGYsICRkb2MsICRvcHRsaXN0LCAkcGF0aCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICRkb2MKICogQHBhcmFtIHN0cmluZyAkcGF0aAogKgogKiBAcmV0dXJuIHN0cmluZwogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtcGNvcy1nZXQtc3RyaW5nLnBocAogKi8KZnVuY3Rpb24gUERGX3Bjb3NfZ2V0X3N0cmluZygkcGRmLCAkZG9jLCAkcGF0aCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICRpbWFnZQogKiBAcGFyYW0gZmxvYXQgJHgKICogQHBhcmFtIGZsb2F0ICR5CiAqIEBwYXJhbSBmbG9hdCAkc2NhbGUKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1wbGFjZS1pbWFnZS5waHAgKGRlcCkKICovCmZ1bmN0aW9uIFBERl9wbGFjZV9pbWFnZSgkcGRmLCAkaW1hZ2UsICR4LCAkeSwgJHNjYWxlKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJHBhZ2UKICogQHBhcmFtIGZsb2F0ICR4CiAqIEBwYXJhbSBmbG9hdCAkeQogKiBAcGFyYW0gZmxvYXQgJHN4CiAqIEBwYXJhbSBmbG9hdCAkc3kKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1wbGFjZS1wZGktcGFnZS5waHAgKGRlcCkKICovCmZ1bmN0aW9uIFBERl9wbGFjZV9wZGlfcGFnZSgkcGRmLCAkcGFnZSwgJHgsICR5LCAkc3gsICRzeSkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gaW50ICRkb2MKICogQHBhcmFtIGludCAkcGFnZQogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1wcm9jZXNzLXBkaS5waHAKICovCmZ1bmN0aW9uIFBERl9wcm9jZXNzX3BkaSgkcGRmLCAkZG9jLCAkcGFnZSwgJG9wdGxpc3QpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICR4CiAqIEBwYXJhbSBmbG9hdCAkeQogKiBAcGFyYW0gZmxvYXQgJHdpZHRoCiAqIEBwYXJhbSBmbG9hdCAkaGVpZ2h0CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtcmVjdC5waHAKICovCmZ1bmN0aW9uIFBERl9yZWN0KCRwZGYsICR4LCAkeSwgJHdpZHRoLCAkaGVpZ2h0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmIFRoZSBQREYgZG9jCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtcmVzdG9yZS5waHAKICovCmZ1bmN0aW9uIFBERl9yZXN0b3JlKCRwZGYpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXJlc3VtZS1wYWdlLnBocAogKi8KZnVuY3Rpb24gUERGX3Jlc3VtZV9wYWdlKCRwZGYsICRvcHRsaXN0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBmbG9hdCAkcGhpCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtcm90YXRlLnBocAogKi8KZnVuY3Rpb24gUERGX3JvdGF0ZSgkcGRmLCAkcGhpKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmIFRoZSBQREYgZG9jCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2F2ZS5waHAKICovCmZ1bmN0aW9uIFBERl9zYXZlKCRwZGYpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICRzeAogKiBAcGFyYW0gZmxvYXQgJHN5CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2NhbGUucGhwCiAqLwpmdW5jdGlvbiBQREZfc2NhbGUoJHBkZiwgJHN4LCAkc3kpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICRyZWQKICogQHBhcmFtIGZsb2F0ICRncmVlbgogKiBAcGFyYW0gZmxvYXQgJGJsdWUKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXQtYm9yZGVyLWNvbG9yLnBocCAoZGVwKQogKi8KZnVuY3Rpb24gUERGX3NldF9ib3JkZXJfY29sb3IoJHBkZiwgJHJlZCwgJGdyZWVuLCAkYmx1ZSkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gZmxvYXQgJGJsYWNrCiAqIEBwYXJhbSBmbG9hdCAkd2hpdGUKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXQtYm9yZGVyLWRhc2gucGhwIChkZXApCiAqLwpmdW5jdGlvbiBQREZfc2V0X2JvcmRlcl9kYXNoKCRwZGYsICRibGFjaywgJHdoaXRlKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJHN0eWxlCiAqIEBwYXJhbSBmbG9hdCAkd2lkdGgKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXQtYm9yZGVyLXN0eWxlLnBocCAoZGVwKQogKi8KZnVuY3Rpb24gUERGX3NldF9ib3JkZXJfc3R5bGUoJHBkZiwgJHN0eWxlLCAkd2lkdGgpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGludCAkZ3N0YXRlCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0LWdzdGF0ZS5waHAKICovCmZ1bmN0aW9uIFBERl9zZXRfZ3N0YXRlKCRwZGYsICRnc3RhdGUpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0LWluZm8ucGhwCiAqLwpmdW5jdGlvbiBQREZfc2V0X2luZm8oJHBkZiwgJGtleSwgJHZhbHVlKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJHR5cGUKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldC1sYXllci1kZXBlbmRlbmN5LnBocAogKi8KZnVuY3Rpb24gUERGX3NldF9sYXllcl9kZXBlbmRlbmN5KCRwZGYsICR0eXBlLCAkb3B0bGlzdCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3d3dy5wZGZsaWIuY29tL2ZpbGVhZG1pbi9wZGZsaWIvcGRmL21hbnVhbHMvUERGbGliLTkuMy4wLUFQSS1yZWZlcmVuY2UucGRmCiAqLwpmdW5jdGlvbiBQREZfc2V0X29wdGlvbigkcGRmLCAkb3B0bGlzdCkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXQtcGFyYW1ldGVyLnBocAogKi8KZnVuY3Rpb24gUERGX3NldF9wYXJhbWV0ZXIoJHBkZiwgJGtleSwgJHZhbHVlKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJG9wdGxpc3QKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBkZmxpYi5jb20vZmlsZWFkbWluL3BkZmxpYi9wZGYvbWFudWFscy9QREZsaWItOS4zLjAtQVBJLXJlZmVyZW5jZS5wZGYKICovCmZ1bmN0aW9uIFBERl9zZXRfdGV4dF9vcHRpb24oJHBkZiwgJG9wdGxpc3QpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICR4CiAqIEBwYXJhbSBmbG9hdCAkeQogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldC10ZXh0LXBvcy5waHAKICovCmZ1bmN0aW9uIFBERl9zZXRfdGV4dF9wb3MoJHBkZiwgJHgsICR5KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcGFyYW0gZmxvYXQgJHZhbHVlCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0LXZhbHVlLnBocAogKi8KZnVuY3Rpb24gUERGX3NldF92YWx1ZSgkcGRmLCAka2V5LCAkdmFsdWUpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkZnN0eXBlCiAqIEBwYXJhbSBzdHJpbmcgJGNvbG9yc3BhY2UKICogQHBhcmFtIGZsb2F0ICRjMQogKiBAcGFyYW0gZmxvYXQgJGMyCiAqIEBwYXJhbSBmbG9hdCAkYzMKICogQHBhcmFtIGZsb2F0ICRjNAogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldGNvbG9yLnBocAogKi8KZnVuY3Rpb24gUERGX3NldGNvbG9yKCRwZGYsICRmc3R5cGUsICRjb2xvcnNwYWNlLCAkYzEsICRjMiwgJGMzLCAkYzQpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICRiCiAqIEBwYXJhbSBmbG9hdCAkdwogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldGRhc2gucGhwCiAqLwpmdW5jdGlvbiBQREZfc2V0ZGFzaCgkcGRmLCAkYiwgJHcpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldGRhc2hwYXR0ZXJuLnBocAogKi8KZnVuY3Rpb24gUERGX3NldGRhc2hwYXR0ZXJuKCRwZGYsICRvcHRsaXN0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBmbG9hdCAkZmxhdG5lc3MKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXRmbGF0LnBocAogKi8KZnVuY3Rpb24gUERGX3NldGZsYXQoJHBkZiwgJGZsYXRuZXNzKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJGZvbnQKICogQHBhcmFtIGZsb2F0ICRmb250c2l6ZQogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldGZvbnQucGhwCiAqLwpmdW5jdGlvbiBQREZfc2V0Zm9udCgkcGRmLCAkZm9udCwgJGZvbnRzaXplKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBmbG9hdCAkZwogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldGdyYXktZmlsbC5waHAgKGRlcCkKICovCmZ1bmN0aW9uIFBERl9zZXRncmF5X2ZpbGwoJHBkZiwgJGcpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICRnCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0Z3JheS1zdHJva2UucGhwIChkZXApCiAqLwpmdW5jdGlvbiBQREZfc2V0Z3JheV9zdHJva2UoJHBkZiwgJGcpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICRnCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0Z3JheS5waHAgKGRlcCkKICovCmZ1bmN0aW9uIFBERl9zZXRncmF5KCRwZGYsICRnKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJGxpbmVjYXAKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXRsaW5lY2FwLnBocAogKi8KZnVuY3Rpb24gUERGX3NldGxpbmVjYXAoJHBkZiwgJGxpbmVjYXApIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGludCAkdmFsdWUKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXRsaW5lam9pbi5waHAKICovCmZ1bmN0aW9uIFBERl9zZXRsaW5lam9pbigkcGRmLCAkdmFsdWUpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICR3aWR0aAogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXNldGxpbmV3aWR0aC5waHAKICovCmZ1bmN0aW9uIFBERl9zZXRsaW5ld2lkdGgoJHBkZiwgJHdpZHRoKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBmbG9hdCAkYQogKiBAcGFyYW0gZmxvYXQgJGIKICogQHBhcmFtIGZsb2F0ICRjCiAqIEBwYXJhbSBmbG9hdCAkZAogKiBAcGFyYW0gZmxvYXQgJGUKICogQHBhcmFtIGZsb2F0ICRmCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0bWF0cml4LnBocAogKi8KZnVuY3Rpb24gUERGX3NldG1hdHJpeCgkcGRmLCAkYSwgJGIsICRjLCAkZCwgJGUsICRmKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBmbG9hdCAkbWl0ZXIKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXRtaXRlcmxpbWl0LnBocAogKi8KZnVuY3Rpb24gUERGX3NldG1pdGVybGltaXQoJHBkZiwgJG1pdGVyKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBmbG9hdCAkcmVkCiAqIEBwYXJhbSBmbG9hdCAkZ3JlZW4KICogQHBhcmFtIGZsb2F0ICRibHVlCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2V0cmdiY29sb3ItZmlsbC5waHAgKGRlcCkKICovCmZ1bmN0aW9uIFBERl9zZXRyZ2Jjb2xvcl9maWxsKCRwZGYsICRyZWQsICRncmVlbiwgJGJsdWUpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICRyZWQKICogQHBhcmFtIGZsb2F0ICRncmVlbgogKiBAcGFyYW0gZmxvYXQgJGJsdWUKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXRyZ2Jjb2xvci1zdHJva2UucGhwIChkZXApCiAqLwpmdW5jdGlvbiBQREZfc2V0cmdiY29sb3Jfc3Ryb2tlKCRwZGYsICRyZWQsICRncmVlbiwgJGJsdWUpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICRyZWQKICogQHBhcmFtIGZsb2F0ICRncmVlbgogKiBAcGFyYW0gZmxvYXQgJGJsdWUKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zZXRyZ2Jjb2xvci5waHAgKGRlcCkKICovCmZ1bmN0aW9uIFBERl9zZXRyZ2Jjb2xvcigkcGRmLCAkcmVkLCAkZ3JlZW4sICRibHVlKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJHNoYWRpbmcKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGludAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2hhZGluZy1wYXR0ZXJuLnBocAogKi8KZnVuY3Rpb24gUERGX3NoYWRpbmdfcGF0dGVybigkcGRmLCAkc2hhZGluZywgJG9wdGxpc3QpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkc2h0eXBlCiAqIEBwYXJhbSBmbG9hdCAkeDAKICogQHBhcmFtIGZsb2F0ICR5MAogKiBAcGFyYW0gZmxvYXQgJHgxCiAqIEBwYXJhbSBmbG9hdCAkeTEKICogQHBhcmFtIGZsb2F0ICRjMQogKiBAcGFyYW0gZmxvYXQgJGMyCiAqIEBwYXJhbSBmbG9hdCAkYzMKICogQHBhcmFtIGZsb2F0ICRjNAogKiBAcGFyYW0gc3RyaW5nICRvcHRsaXN0CiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zaGFkaW5nLnBocAogKi8KZnVuY3Rpb24gUERGX3NoYWRpbmcoJHBkZiwgJHNodHlwZSwgJHgwLCAkeTAsICR4MSwgJHkxLCAkYzEsICRjMiwgJGMzLCAkYzQsICRvcHRsaXN0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBpbnQgJHNoYWRpbmcKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zaGZpbGwucGhwCiAqLwpmdW5jdGlvbiBQREZfc2hmaWxsKCRwZGYsICRzaGFkaW5nKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBzdHJpbmcgJHRleHQKICogQHBhcmFtIGZsb2F0ICRsZWZ0CiAqIEBwYXJhbSBmbG9hdCAkdG9wCiAqIEBwYXJhbSBmbG9hdCAkd2lkdGgKICogQHBhcmFtIGZsb2F0ICRoZWlnaHQKICogQHBhcmFtIHN0cmluZyAkbW9kZQogKiBAcGFyYW0gc3RyaW5nICRmZWF0dXJlCiAqCiAqIEByZXR1cm4gaW50CiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zaG93LWJveGVkLnBocCAoZGVwKQogKi8KZnVuY3Rpb24gUERGX3Nob3dfYm94ZWQoJHBkZiwgJHRleHQsICRsZWZ0LCAkdG9wLCAkd2lkdGgsICRoZWlnaHQsICRtb2RlLCAkZmVhdHVyZSkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICR0ZXh0CiAqIEBwYXJhbSBmbG9hdCAkeAogKiBAcGFyYW0gZmxvYXQgJHkKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zaG93LXh5LnBocAogKi8KZnVuY3Rpb24gUERGX3Nob3dfeHkoJHBkZiwgJHRleHQsICR4LCAkeSkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICR0ZXh0CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2hvdy5waHAKICovCmZ1bmN0aW9uIFBERl9zaG93KCRwZGYsICR0ZXh0KSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkcGRmCiAqIEBwYXJhbSBmbG9hdCAkYWxwaGEKICogQHBhcmFtIGZsb2F0ICRiZXRhCiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc2tldy5waHAKICovCmZ1bmN0aW9uIFBERl9za2V3KCRwZGYsICRhbHBoYSwgJGJldGEpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkdGV4dAogKiBAcGFyYW0gaW50ICRmb250CiAqIEBwYXJhbSBmbG9hdCAkZm9udHNpemUKICoKICogQHJldHVybiBmbG9hdAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtc3RyaW5nd2lkdGgucGhwCiAqLwpmdW5jdGlvbiBQREZfc3RyaW5nd2lkdGgoJHBkZiwgJHRleHQsICRmb250LCAkZm9udHNpemUpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYgVGhlIFBERiBkb2MKICoKICogQHJldHVybiBib29sCiAqCiAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnBkZi1zdHJva2UucGhwCiAqLwpmdW5jdGlvbiBQREZfc3Ryb2tlKCRwZGYpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkb3B0bGlzdAogKgogKiBAcmV0dXJuIGJvb2wKICoKICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ucGRmLXN1c3BlbmQtcGFnZS5waHAKICovCmZ1bmN0aW9uIFBERl9zdXNwZW5kX3BhZ2UoJHBkZiwgJG9wdGxpc3QpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIGZsb2F0ICR0eAogKiBAcGFyYW0gZmxvYXQgJHR5CiAqCiAqIEByZXR1cm4gYm9vbAogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtdHJhbnNsYXRlLnBocAogKi8KZnVuY3Rpb24gUERGX3RyYW5zbGF0ZSgkcGRmLCAkdHgsICR0eSkge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICR1dGYxNnN0cmluZwogKgogKiBAcmV0dXJuIHN0cmluZwogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtdXRmMTYtdG8tdXRmOC5waHAKICovCmZ1bmN0aW9uIFBERl91dGYxNl90b191dGY4KCRwZGYsICR1dGYxNnN0cmluZykge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJHBkZgogKiBAcGFyYW0gc3RyaW5nICR1dGYzMnN0cmluZwogKiBAcGFyYW0gc3RyaW5nICRvcmRlcmluZwogKgogKiBAcmV0dXJuIHN0cmluZwogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtdXRmMzItdG8tdXRmMTYucGhwCiAqLwpmdW5jdGlvbiBQREZfdXRmMzJfdG9fdXRmMTYoJHBkZiwgJHV0ZjMyc3RyaW5nLCAkb3JkZXJpbmcpIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRwZGYKICogQHBhcmFtIHN0cmluZyAkdXRmOHN0cmluZwogKiBAcGFyYW0gc3RyaW5nICRvcmRlcmluZwogKgogKiBAcmV0dXJuIHN0cmluZwogKgogKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wZGYtdXRmOC10by11dGYxNi5waHAKICovCmZ1bmN0aW9uIFBERl91dGY4X3RvX3V0ZjE2KCRwZGYsICR1dGY4c3RyaW5nLCAkb3JkZXJpbmcpIHt9Cjw/cGhwCi8qKgogKiBTdHVicyBmb3IgWnN0YW5kYXJkCiAqIGh0dHBzOi8vcGVjbC5waHAubmV0L3BhY2thZ2UvenN0ZAogKiBodHRwczovL2dpdGh1Yi5jb20va2pkZXYvcGhwLWV4dC16c3RkCiAqLwoKbmFtZXNwYWNlIHsKICAgIC8qKgogICAgICogTWluaW1hbCBjb21wcmVzcyBsZXZlbCB2YWx1ZQogICAgICovCiAgICBkZWZpbmUoJ1pTVERfQ09NUFJFU1NfTEVWRUxfTUlOJywgMSk7CgogICAgLyoqCiAgICAgKiBNYXhpbWFsIGNvbXByZXNzIGxldmVsIHZhbHVlCiAgICAgKi8KICAgIGRlZmluZSgnWlNURF9DT01QUkVTU19MRVZFTF9NQVgnLCAyMik7CgogICAgLyoqCiAgICAgKiBEZWZhdWx0IGNvbXByZXNzIGxldmVsIHZhbHVlCiAgICAgKi8KICAgIGRlZmluZSgnWlNURF9DT01QUkVTU19MRVZFTF9ERUZBVUxUJywgMyk7CgogICAgLyoqCiAgICAgKiBsaWJ6c3RkIHZlcnNpb24gbnVtYmVyCiAgICAgKi8KICAgIGRlZmluZSgnTElCWlNURF9WRVJTSU9OX05VTUJFUicsIDEwNDA1KTsKCiAgICAvKioKICAgICAqIGxpYnpzdGQgdmVyc2lvbiBzdHJpbmcKICAgICAqLwogICAgZGVmaW5lKCdMSUJaU1REX1ZFUlNJT05fU1RSSU5HJywgJzEuNC41Jyk7CgogICAgLyoqCiAgICAgKiBac3RhbmRhcmQgY29tcHJlc3Npb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgc3RyaW5nIHRvIGNvbXByZXNzLgogICAgICogQHBhcmFtIGludCAkbGV2ZWwgVGhlIGxldmVsIG9mIGNvbXByZXNzaW9uICgxLTIyKS4gKERlZmF1bHRzIHRvIDMsIDAgZm9yIG5vIGNvbXByZXNzaW9uKS4KICAgICAqICAgICAgICAgICAgICAgICAgICAgIEEgdmFsdWUgc21hbGxlciB0aGFuIDAgbWVhbnMgYSBmYXN0ZXIgY29tcHJlc3Npb24gbGV2ZWwuIChac3RhbmRhcmQgbGlicmFyeSAxLjMuNCBvciBsYXRlcikKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBSZXR1cm5zIHRoZSBjb21wcmVzc2VkIGRhdGEgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHpzdGRfY29tcHJlc3Moc3RyaW5nICRkYXRhLCBpbnQgJGxldmVsID0gMyk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogWnN0YW5kYXJkIGRlY29tcHJlc3Npb24uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgY29tcHJlc3NlZCBzdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgUmV0dXJucyB0aGUgZGVjb21wcmVzc2VkIGRhdGEgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHpzdGRfdW5jb21wcmVzcyhzdHJpbmcgJGRhdGEpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFpzdGFuZGFyZCBjb21wcmVzc2lvbiB1c2luZyBhIGRpZ2VzdGVkIGRpY3Rpb25hcnkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgc3RyaW5nIHRvIGNvbXByZXNzLgogICAgICogQHBhcmFtIHN0cmluZyAkZGljdCBUaGUgRGljdGlvbmFyeSBkYXRhLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFJldHVybnMgdGhlIGNvbXByZXNzZWQgZGF0YSBvciBGQUxTRSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgZnVuY3Rpb24genN0ZF9jb21wcmVzc19kaWN0KHN0cmluZyAkZGF0YSwgc3RyaW5nICRkaWN0KTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBac3RhbmRhcmQgZGVjb21wcmVzc2lvbiB1c2luZyBhIGRpZ2VzdGVkIGRpY3Rpb25hcnkuCiAgICAgKiBBbiBhbGlhcyBvZiB7QHNlZSB6c3RkX2NvbXByZXNzX2RpY3R9CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgc3RyaW5nIHRvIGNvbXByZXNzLgogICAgICogQHBhcmFtIHN0cmluZyAkZGljdCBUaGUgRGljdGlvbmFyeSBkYXRhLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFJldHVybnMgdGhlIGNvbXByZXNzZWQgZGF0YSBvciBGQUxTRSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgZnVuY3Rpb24genN0ZF9jb21wcmVzc191c2luZ2NkaWN0KHN0cmluZyAkZGF0YSwgc3RyaW5nICRkaWN0KTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBac3RhbmRhcmQgZGVjb21wcmVzc2lvbiB1c2luZyBhIGRpZ2VzdGVkIGRpY3Rpb25hcnkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgY29tcHJlc3NlZCBzdHJpbmcuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaWN0IFRoZSBEaWN0aW9uYXJ5IGRhdGEuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgUmV0dXJucyB0aGUgZGVjb21wcmVzc2VkIGRhdGEgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHpzdGRfdW5jb21wcmVzc19kaWN0KHN0cmluZyAkZGF0YSwgc3RyaW5nICRkaWN0KTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBac3RhbmRhcmQgZGVjb21wcmVzc2lvbiB1c2luZyBhIGRpZ2VzdGVkIGRpY3Rpb25hcnkuCiAgICAgKiBBbiBhbGlhcyBvZiB7QHNlZSB6c3RkX2NvbXByZXNzX2RpY3R9CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgY29tcHJlc3NlZCBzdHJpbmcuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaWN0IFRoZSBEaWN0aW9uYXJ5IGRhdGEuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgUmV0dXJucyB0aGUgZGVjb21wcmVzc2VkIGRhdGEgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHpzdGRfZGVjb21wcmVzc19kaWN0KHN0cmluZyAkZGF0YSwgc3RyaW5nICRkaWN0KTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBac3RhbmRhcmQgZGVjb21wcmVzc2lvbiB1c2luZyBhIGRpZ2VzdGVkIGRpY3Rpb25hcnkuCiAgICAgKiBBbiBhbGlhcyBvZiB7QHNlZSB6c3RkX2NvbXByZXNzX2RpY3R9CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgY29tcHJlc3NlZCBzdHJpbmcuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaWN0IFRoZSBEaWN0aW9uYXJ5IGRhdGEuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgUmV0dXJucyB0aGUgZGVjb21wcmVzc2VkIGRhdGEgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHpzdGRfdW5jb21wcmVzc191c2luZ2NkaWN0KHN0cmluZyAkZGF0YSwgc3RyaW5nICRkaWN0KTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBac3RhbmRhcmQgZGVjb21wcmVzc2lvbiB1c2luZyBhIGRpZ2VzdGVkIGRpY3Rpb25hcnkuCiAgICAgKiBBbiBhbGlhcyBvZiB7QHNlZSB6c3RkX2NvbXByZXNzX2RpY3R9CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgY29tcHJlc3NlZCBzdHJpbmcuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaWN0IFRoZSBEaWN0aW9uYXJ5IGRhdGEuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgUmV0dXJucyB0aGUgZGVjb21wcmVzc2VkIGRhdGEgb3IgRkFMU0UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIHpzdGRfZGVjb21wcmVzc191c2luZ2NkaWN0KHN0cmluZyAkZGF0YSwgc3RyaW5nICRkaWN0KTogc3RyaW5nfGZhbHNlIHt9Cn0KCm5hbWVzcGFjZSBac3RkIHsKICAgIC8qKgogICAgICogWnN0YW5kYXJkIGNvbXByZXNzaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIHN0cmluZyB0byBjb21wcmVzcy4KICAgICAqIEBwYXJhbSBpbnQgJGxldmVsIFRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbiAoMS0yMikuIChEZWZhdWx0cyB0byAzLCAwIGZvciBubyBjb21wcmVzc2lvbikuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBBIHZhbHVlIHNtYWxsZXIgdGhhbiAwIG1lYW5zIGEgZmFzdGVyIGNvbXByZXNzaW9uIGxldmVsLiAoWnN0YW5kYXJkIGxpYnJhcnkgMS4zLjQgb3IgbGF0ZXIpCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIG9yIEZBTFNFIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICAgICovCiAgICBmdW5jdGlvbiBjb21wcmVzcyhzdHJpbmcgJGRhdGEsIGludCAkbGV2ZWwgPSAzKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBac3RhbmRhcmQgZGVjb21wcmVzc2lvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSBjb21wcmVzc2VkIHN0cmluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBSZXR1cm5zIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBvciBGQUxTRSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgZnVuY3Rpb24gdW5jb21wcmVzcyhzdHJpbmcgJGRhdGEpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIFpzdGFuZGFyZCBjb21wcmVzc2lvbiB1c2luZyBhIGRpZ2VzdGVkIGRpY3Rpb25hcnkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgc3RyaW5nIHRvIGNvbXByZXNzLgogICAgICogQHBhcmFtIHN0cmluZyAkZGljdCBUaGUgRGljdGlvbmFyeSBkYXRhLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFJldHVybnMgdGhlIGNvbXByZXNzZWQgZGF0YSBvciBGQUxTRSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgZnVuY3Rpb24gY29tcHJlc3NfZGljdChzdHJpbmcgJGRhdGEsIHN0cmluZyAkZGljdCk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogWnN0YW5kYXJkIGRlY29tcHJlc3Npb24gdXNpbmcgYSBkaWdlc3RlZCBkaWN0aW9uYXJ5LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgVGhlIGNvbXByZXNzZWQgc3RyaW5nLgogICAgICogQHBhcmFtIHN0cmluZyAkZGljdCBUaGUgRGljdGlvbmFyeSBkYXRhLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFJldHVybnMgdGhlIGRlY29tcHJlc3NlZCBkYXRhIG9yIEZBTFNFIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICAgICovCiAgICBmdW5jdGlvbiB1bmNvbXByZXNzX2RpY3Qoc3RyaW5nICRkYXRhLCBzdHJpbmcgJGRpY3QpOiBzdHJpbmd8ZmFsc2Uge30KfQo8P3BocAovKioKICogQHNpbmNlIDguNAogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hZWFkX2FlZ2lzMTI4bF9kZWNyeXB0KHN0cmluZyAkY2lwaGVydGV4dCwgc3RyaW5nICRhZGRpdGlvbmFsX2RhdGEsIHN0cmluZyAkbm9uY2UsICNbXFNlbnNpdGl2ZVBhcmFtZXRlcl0gc3RyaW5nICRrZXkpOiBzdHJpbmd8ZmFsc2Uge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF9hZWdpczEyOGxfZW5jcnlwdCgjW1xTZW5zaXRpdmVQYXJhbWV0ZXJdIHN0cmluZyAkbWVzc2FnZSwgc3RyaW5nICRhZGRpdGlvbmFsX2RhdGEsIHN0cmluZyAkbm9uY2UsICNbXFNlbnNpdGl2ZVBhcmFtZXRlcl0gc3RyaW5nICRrZXkpOiBzdHJpbmcge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF9hZWdpczEyOGxfa2V5Z2VuKCk6IHN0cmluZyB7fQovKioKICogQHNpbmNlIDguNAogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hZWFkX2FlZ2lzMjU2X2RlY3J5cHQoc3RyaW5nICRjaXBoZXJ0ZXh0LCBzdHJpbmcgJGFkZGl0aW9uYWxfZGF0YSwgc3RyaW5nICRub25jZSwgI1tcU2Vuc2l0aXZlUGFyYW1ldGVyXSBzdHJpbmcgJGtleSk6IHN0cmluZ3xmYWxzZSB7fQovKioKICogQHNpbmNlIDguNAogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hZWFkX2FlZ2lzMjU2X2VuY3J5cHQoI1tcU2Vuc2l0aXZlUGFyYW1ldGVyXSBzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAkYWRkaXRpb25hbF9kYXRhLCBzdHJpbmcgJG5vbmNlLCAjW1xTZW5zaXRpdmVQYXJhbWV0ZXJdIHN0cmluZyAka2V5KTogc3RyaW5nIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2FlYWRfYWVnaXMyNTZfa2V5Z2VuKCk6IHN0cmluZyB7fQo8P3BocAovKioKICogQHNpbmNlIDguNAogKi8KY29uc3QgU09ESVVNX0NSWVBUT19BRUFEX0FFR0lTMTI4TF9LRVlCWVRFUyA9IDE2OwovKioKICogQHNpbmNlIDguNAogKi8KY29uc3QgU09ESVVNX0NSWVBUT19BRUFEX0FFR0lTMTI4TF9OU0VDQllURVMgPSAwOwovKioKICogQHNpbmNlIDguNAogKi8KY29uc3QgU09ESVVNX0NSWVBUT19BRUFEX0FFR0lTMTI4TF9OUFVCQllURVMgPSAxNjsKLyoqCiAqIEBzaW5jZSA4LjQKICovCmNvbnN0IFNPRElVTV9DUllQVE9fQUVBRF9BRUdJUzEyOExfQUJZVEVTID0gMzI7Ci8qKgogKiBAc2luY2UgOC40CiAqLwpjb25zdCBTT0RJVU1fQ1JZUFRPX0FFQURfQUVHSVMyNTZfS0VZQllURVMgPSAzMjsKLyoqCiAqIEBzaW5jZSA4LjQKICovCmNvbnN0IFNPRElVTV9DUllQVE9fQUVBRF9BRUdJUzI1Nl9OU0VDQllURVMgPSAwOwovKioKICogQHNpbmNlIDguNAogKi8KY29uc3QgU09ESVVNX0NSWVBUT19BRUFEX0FFR0lTMjU2X05QVUJCWVRFUyA9IDMyOwovKioKICogQHNpbmNlIDguNAogKi8KY29uc3QgU09ESVVNX0NSWVBUT19BRUFEX0FFR0lTMjU2X0FCWVRFUyA9IDMyOwo8P3BocApkZWNsYXJlKHN0cmljdF90eXBlcz0xKTsKCm5hbWVzcGFjZSBTb2RpdW07CgovKioKICogVG8gc2lsZW5jZSB0aGUgcGhwc3Rvcm0gInVua25vd24gbmFtZXNwYWNlIiBlcnJvcnMuCiAqLwpjb25zdCBDUllQVE9fQUVBRF9BRVMyNTZHQ01fS0VZQllURVMgPSAzMjsKY29uc3QgQ1JZUFRPX0FFQURfQUVTMjU2R0NNX05TRUNCWVRFUyA9IDA7CmNvbnN0IENSWVBUT19BRUFEX0FFUzI1NkdDTV9OUFVCQllURVMgPSAxMjsKY29uc3QgQ1JZUFRPX0FFQURfQUVTMjU2R0NNX0FCWVRFUyA9IDE2Owpjb25zdCBDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0tFWUJZVEVTID0gMzI7CmNvbnN0IENSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfTlNFQ0JZVEVTID0gMDsKY29uc3QgQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9OUFVCQllURVMgPSA4Owpjb25zdCBDUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0FCWVRFUyA9IDE2Owpjb25zdCBDUllQVE9fQVVUSF9CWVRFUyA9IDMyOwpjb25zdCBDUllQVE9fQVVUSF9LRVlCWVRFUyA9IDMyOwpjb25zdCBDUllQVE9fQk9YX1NFQUxCWVRFUyA9IDE2Owpjb25zdCBDUllQVE9fQk9YX1NFQ1JFVEtFWUJZVEVTID0gMzI7CmNvbnN0IENSWVBUT19CT1hfUFVCTElDS0VZQllURVMgPSAzMjsKY29uc3QgQ1JZUFRPX0JPWF9LRVlQQUlSQllURVMgPSA2NDsKY29uc3QgQ1JZUFRPX0JPWF9NQUNCWVRFUyA9IDE2Owpjb25zdCBDUllQVE9fQk9YX05PTkNFQllURVMgPSAyNDsKY29uc3QgQ1JZUFRPX0JPWF9TRUVEQllURVMgPSAzMjsKY29uc3QgQ1JZUFRPX0tYX0JZVEVTID0gMzI7CmNvbnN0IENSWVBUT19LWF9QVUJMSUNLRVlCWVRFUyA9IDMyOwpjb25zdCBDUllQVE9fS1hfU0VDUkVUS0VZQllURVMgPSAzMjsKY29uc3QgQ1JZUFRPX0dFTkVSSUNIQVNIX0JZVEVTID0gMzI7CmNvbnN0IENSWVBUT19HRU5FUklDSEFTSF9CWVRFU19NSU4gPSAxNjsKY29uc3QgQ1JZUFRPX0dFTkVSSUNIQVNIX0JZVEVTX01BWCA9IDY0Owpjb25zdCBDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVMgPSAzMjsKY29uc3QgQ1JZUFRPX0dFTkVSSUNIQVNIX0tFWUJZVEVTX01JTiA9IDE2Owpjb25zdCBDUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVNfTUFYID0gNjQ7CmNvbnN0IENSWVBUT19QV0hBU0hfU0NSWVBUU0FMU0EyMDhTSEEyNTZfU0FMVEJZVEVTID0gMzI7CmNvbnN0IENSWVBUT19QV0hBU0hfU0NSWVBUU0FMU0EyMDhTSEEyNTZfU1RSUFJFRklYID0gJyQ3JCc7CmNvbnN0IENSWVBUT19QV0hBU0hfU0NSWVBUU0FMU0EyMDhTSEEyNTZfT1BTTElNSVRfSU5URVJBQ1RJVkUgPSA1MzQyODg7CmNvbnN0IENSWVBUT19QV0hBU0hfU0NSWVBUU0FMU0EyMDhTSEEyNTZfTUVNTElNSVRfSU5URVJBQ1RJVkUgPSAxNjc3NzIxNjsKY29uc3QgQ1JZUFRPX1BXSEFTSF9TQ1JZUFRTQUxTQTIwOFNIQTI1Nl9PUFNMSU1JVF9TRU5TSVRJVkUgPSAzMzU1NDQzMjsKY29uc3QgQ1JZUFRPX1BXSEFTSF9TQ1JZUFRTQUxTQTIwOFNIQTI1Nl9NRU1MSU1JVF9TRU5TSVRJVkUgPSAxMDczNzQxODI0Owpjb25zdCBDUllQVE9fU0NBTEFSTVVMVF9CWVRFUyA9IDMyOwpjb25zdCBDUllQVE9fU0NBTEFSTVVMVF9TQ0FMQVJCWVRFUyA9IDMyOwpjb25zdCBDUllQVE9fU0hPUlRIQVNIX0JZVEVTID0gODsKY29uc3QgQ1JZUFRPX1NIT1JUSEFTSF9LRVlCWVRFUyA9IDE2Owpjb25zdCBDUllQVE9fU0VDUkVUQk9YX0tFWUJZVEVTID0gMzI7CmNvbnN0IENSWVBUT19TRUNSRVRCT1hfTUFDQllURVMgPSAxNjsKY29uc3QgQ1JZUFRPX1NFQ1JFVEJPWF9OT05DRUJZVEVTID0gMjQ7CmNvbnN0IENSWVBUT19TSUdOX0JZVEVTID0gNjQ7CmNvbnN0IENSWVBUT19TSUdOX1NFRURCWVRFUyA9IDMyOwpjb25zdCBDUllQVE9fU0lHTl9QVUJMSUNLRVlCWVRFUyA9IDMyOwpjb25zdCBDUllQVE9fU0lHTl9TRUNSRVRLRVlCWVRFUyA9IDY0Owpjb25zdCBDUllQVE9fU0lHTl9LRVlQQUlSQllURVMgPSA5NjsKY29uc3QgQ1JZUFRPX1NUUkVBTV9LRVlCWVRFUyA9IDMyOwpjb25zdCBDUllQVE9fU1RSRUFNX05PTkNFQllURVMgPSAyNDsKY29uc3QgQ1JZUFRPX1BXSEFTSF9PUFNMSU1JVF9JTlRFUkFDVElWRSA9IDQ7CmNvbnN0IENSWVBUT19QV0hBU0hfTUVNTElNSVRfSU5URVJBQ1RJVkUgPSAzMzU1NDQzMjsKY29uc3QgQ1JZUFRPX1BXSEFTSF9PUFNMSU1JVF9NT0RFUkFURSA9IDY7CmNvbnN0IENSWVBUT19QV0hBU0hfTUVNTElNSVRfTU9ERVJBVEUgPSAxMzQyMTc3Mjg7CmNvbnN0IENSWVBUT19QV0hBU0hfT1BTTElNSVRfU0VOU0lUSVZFID0gODsKY29uc3QgQ1JZUFRPX1BXSEFTSF9NRU1MSU1JVF9TRU5TSVRJVkUgPSA1MzY4NzA5MTI7CgovKioKICogQ2FuIHlvdSBhY2Nlc3MgQUVTLTI1Ni1HQ00/IFRoaXMgaXMgb25seSBhdmFpbGFibGUgaWYgeW91IGhhdmUgc3VwcG9ydGVkCiAqIGhhcmR3YXJlLgogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGNyeXB0b19hZWFkX2FlczI1NmdjbV9pc19hdmFpbGFibGUoKTogYm9vbCB7fQoKLyoqCiAqIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YSAoZGVjcnlwdCkKICogQUVTLTI1Ni1HQ00KICoKICogQHBhcmFtIHN0cmluZyAkbXNnIGVuY3J5cHRlZCBtZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcGFyYW0gc3RyaW5nICRhZCBhZGRpdGlvbmFsIGRhdGEgKG9wdGlvbmFsKQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2RlY3J5cHQoCiAgICBzdHJpbmcgJG1zZywKICAgIHN0cmluZyAkbm9uY2UsCiAgICBzdHJpbmcgJGtleSwKICAgIHN0cmluZyAkYWQgPSAnJwopOiBzdHJpbmcge30KCi8qKgogKiBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEgKGVuY3J5cHQpCiAqIEFFUy0yNTYtR0NNCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1zZyBwbGFpbnRleHQgbWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRub25jZQogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHBhcmFtIHN0cmluZyAkYWQgYWRkaXRpb25hbCBkYXRhIChvcHRpb25hbCkKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19hZWFkX2FlczI1NmdjbV9lbmNyeXB0KAogICAgc3RyaW5nICRtc2csCiAgICBzdHJpbmcgJG5vbmNlLAogICAgc3RyaW5nICRrZXksCiAgICBzdHJpbmcgJGFkID0gJycKKTogc3RyaW5nIHt9CgovKioKICogQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhIChkZWNyeXB0KQogKiBDaGFDaGEyMCArIFBvbHkxMzA1CiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1zZyBlbmNyeXB0ZWQgbWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRub25jZQogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHBhcmFtIHN0cmluZyAkYWQgYWRkaXRpb25hbCBkYXRhIChvcHRpb25hbCkKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdCgKICAgIHN0cmluZyAkbXNnLAogICAgc3RyaW5nICRub25jZSwKICAgIHN0cmluZyAka2V5LAogICAgc3RyaW5nICRhZCA9ICcnCik6IHN0cmluZyB7fQoKLyoqCiAqIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YSAoZW5jcnlwdCkKICogQ2hhQ2hhMjAgKyBQb2x5MTMwNQogKgogKiBAcGFyYW0gc3RyaW5nICRtc2cgcGxhaW50ZXh0IG1lc3NhZ2UKICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEBwYXJhbSBzdHJpbmcgJGFkIGFkZGl0aW9uYWwgZGF0YSAob3B0aW9uYWwpCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQoCiAgICBzdHJpbmcgJG1zZywKICAgIHN0cmluZyAkbm9uY2UsCiAgICBzdHJpbmcgJGtleSwKICAgIHN0cmluZyAkYWQgPSAnJwopOiBzdHJpbmcge30KCi8qKgogKiBTZWNyZXQta2V5IG1lc3NhZ2UgYXV0aGVudGljYXRpb24KICogSE1BQyBTSEEtNTEyLzI1NgogKgogKiBAcGFyYW0gc3RyaW5nICRtc2cKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjcnlwdG9fYXV0aCgKICAgIHN0cmluZyAkbXNnLAogICAgc3RyaW5nICRrZXkKKTogc3RyaW5nIHt9CgovKioKICogU2VjcmV0LWtleSBtZXNzYWdlIHZlcmlmaWNhdGlvbgogKiBITUFDIFNIQS01MTIvMjU2CiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1hYwogKiBAcGFyYW0gc3RyaW5nICRtc2cKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gY3J5cHRvX2F1dGhfdmVyaWZ5KAogICAgc3RyaW5nICRtYWMsCiAgICBzdHJpbmcgJG1zZywKICAgIHN0cmluZyAka2V5Cik6IGJvb2wge30KCi8qKgogKiBQdWJsaWMta2V5IGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiAoZW5jcnlwdCkKICogWDI1NTE5ICsgWHNhbHNhMjAgKyBQb2x5MTMwNQogKgogKiBAcGFyYW0gc3RyaW5nICRtc2cKICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICogQHBhcmFtIHN0cmluZyAka2V5cGFpcgogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX2JveCgKICAgIHN0cmluZyAkbXNnLAogICAgc3RyaW5nICRub25jZSwKICAgIHN0cmluZyAka2V5cGFpcgopOiBzdHJpbmcge30KCi8qKgogKiBHZW5lcmF0ZSBhbiBYMjU1MTkga2V5cGFpciBmb3IgdXNlIHdpdGggdGhlIGNyeXB0b19ib3ggQVBJCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjcnlwdG9fYm94X2tleXBhaXIoKTogc3RyaW5nIHt9CgovKioKICogRGVyaXZlIGFuIFgyNTUxOSBrZXlwYWlyIGZvciB1c2Ugd2l0aCB0aGUgY3J5cHRvX2JveCBBUEkgZnJvbSBhIHNlZWQKICoKICogQHBhcmFtIHN0cmluZyAkc2VlZAogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX2JveF9zZWVkX2tleXBhaXIoCiAgICBzdHJpbmcgJHNlZWQKKTogc3RyaW5nIHt9CgovKioKICogQ3JlYXRlIGFuIFgyNTUxOSBrZXlwYWlyIGZyb20gYW4gWDI1NTE5IHNlY3JldCBrZXkgYW5kIFgyNTUxOSBwdWJsaWMga2V5CiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldGtleQogKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNrZXkKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19ib3hfa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5KAogICAgc3RyaW5nICRzZWNyZXRrZXksCiAgICBzdHJpbmcgJHB1YmxpY2tleQopOiBzdHJpbmcge30KCi8qKgogKiBQdWJsaWMta2V5IGF1dGhlbnRpY2F0ZWQgZW5jcnlwdGlvbiAoZGVjcnlwdCkKICogWDI1NTE5ICsgWHNhbHNhMjAgKyBQb2x5MTMwNQogKgogKiBAcGFyYW0gc3RyaW5nICRtc2cKICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICogQHBhcmFtIHN0cmluZyAka2V5cGFpcgogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX2JveF9vcGVuKAogICAgc3RyaW5nICRtc2csCiAgICBzdHJpbmcgJG5vbmNlLAogICAgc3RyaW5nICRrZXlwYWlyCik6IHN0cmluZyB7fQoKLyoqCiAqIEdldCBhbiBYMjU1MTkgcHVibGljIGtleSBmcm9tIGFuIFgyNTUxOSBrZXlwYWlyCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19ib3hfcHVibGlja2V5KAogICAgc3RyaW5nICRrZXlwYWlyCik6IHN0cmluZyB7fQoKLyoqCiAqIERlcml2ZSBhbiBYMjU1MTkgcHVibGljIGtleSBmcm9tIGFuIFgyNTUxOSBzZWNyZXQga2V5CiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldGtleQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX2JveF9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXkoCiAgICBzdHJpbmcgJHNlY3JldGtleQopOiBzdHJpbmcge30KCi8qKgogKiBBbm9ueW1vdXMgcHVibGljLWtleSBlbmNyeXB0aW9uIChlbmNyeXB0KQogKiBYMjU1MTkgKyBYc2Fsc2EyMCArIFBvbHkxMzA1ICsgQkxBS0UyYgogKgogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJHB1YmxpY2tleQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX2JveF9zZWFsKAogICAgc3RyaW5nICRtZXNzYWdlLAogICAgc3RyaW5nICRwdWJsaWNrZXkKKTogc3RyaW5nIHt9CgovKioKICogQW5vbnltb3VzIHB1YmxpYy1rZXkgZW5jcnlwdGlvbiAoZGVjcnlwdCkKICogWDI1NTE5ICsgWHNhbHNhMjAgKyBQb2x5MTMwNSArIEJMQUtFMmIKICoKICogQHBhcmFtIHN0cmluZyAkZW5jcnlwdGVkCiAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19ib3hfc2VhbF9vcGVuKAogICAgc3RyaW5nICRlbmNyeXB0ZWQsCiAgICBzdHJpbmcgJGtleXBhaXIKKTogc3RyaW5nIHt9CgovKioKICogRXh0cmFjdCB0aGUgWDI1NTE5IHNlY3JldCBrZXkgZnJvbSBhbiBYMjU1MTkga2V5cGFpcgogKgogKiBAcGFyYW0gc3RyaW5nICRrZXlwYWlyCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjcnlwdG9fYm94X3NlY3JldGtleSgKICAgIHN0cmluZyAka2V5cGFpcgopOiBzdHJpbmcge30KCi8qKgogKiBFbGxpcHRpYyBDdXJ2ZSBEaWZmaWUgSGVsbG1hbiBLZXkgRXhjaGFuZ2UKICogWDI1NTE5CiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldGtleQogKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNrZXkKICogQHBhcmFtIHN0cmluZyAkY2xpZW50X3B1YmxpY2tleQogKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfcHVibGlja2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjcnlwdG9fa3goCiAgICBzdHJpbmcgJHNlY3JldGtleSwKICAgIHN0cmluZyAkcHVibGlja2V5LAogICAgc3RyaW5nICRjbGllbnRfcHVibGlja2V5LAogICAgc3RyaW5nICRzZXJ2ZXJfcHVibGlja2V5Cik6IHN0cmluZyB7fQoKLyoqCiAqIEZhc3QgYW5kIHNlY3VyZSBjcnlwdG9ncmFwaGljIGhhc2gKICoKICogQHBhcmFtIHN0cmluZyAkaW5wdXQKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEBwYXJhbSBpbnQgJGxlbmd0aAogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX2dlbmVyaWNoYXNoKAogICAgc3RyaW5nICRpbnB1dCwKICAgIHN0cmluZyAka2V5ID0gJycsCiAgICBpbnQgJGxlbmd0aCA9IDMyCik6IHN0cmluZyB7fQoKLyoqCiAqIENyZWF0ZSBhIG5ldyBoYXNoIHN0YXRlIChlLmcuIHRvIHVzZSBmb3Igc3RyZWFtcykKICogQkxBS0UyYgogKgogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHBhcmFtIGludCAkbGVuZ3RoCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjcnlwdG9fZ2VuZXJpY2hhc2hfaW5pdCgKICAgIHN0cmluZyAka2V5ID0gJycsCiAgICBpbnQgJGxlbmd0aCA9IDMyCik6IHN0cmluZyB7fQoKLyoqCiAqIFVwZGF0ZSB0aGUgaGFzaCBzdGF0ZSB3aXRoIHNvbWUgZGF0YQogKiBCTEFLRTJiCiAqCiAqIEBwYXJhbSBzdHJpbmcgJiRoYXNoU3RhdGUKICogQHBhcmFtIHN0cmluZyAkYXBwZW5kCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gY3J5cHRvX2dlbmVyaWNoYXNoX3VwZGF0ZSgKICAgIHN0cmluZyAmJGhhc2hTdGF0ZSwKICAgIHN0cmluZyAkYXBwZW5kCik6IGJvb2wge30KCi8qKgogKiBHZXQgdGhlIGZpbmFsIGhhc2gKICogQkxBS0UyYgogKgogKiBAcGFyYW0gc3RyaW5nICRzdGF0ZQogKiBAcGFyYW0gaW50ICRsZW5ndGgKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19nZW5lcmljaGFzaF9maW5hbCgKICAgIHN0cmluZyAkc3RhdGUsCiAgICBpbnQgJGxlbmd0aCA9IDMyCik6IHN0cmluZyB7fQoKLyoqCiAqIFNlY3VyZSBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbgogKiBBcmdvbjJpCiAqCiAqIEBwYXJhbSBpbnQgJG91dF9sZW4KICogQHBhcmFtIHN0cmluZyAkcGFzc3dkCiAqIEBwYXJhbSBzdHJpbmcgJHNhbHQKICogQHBhcmFtIGludCAkb3BzbGltaXQKICogQHBhcmFtIGludCAkbWVtbGltaXQKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19wd2hhc2goCiAgICBpbnQgJG91dF9sZW4sCiAgICBzdHJpbmcgJHBhc3N3ZCwKICAgIHN0cmluZyAkc2FsdCwKICAgIGludCAkb3BzbGltaXQsCiAgICBpbnQgJG1lbWxpbWl0Cik6IHN0cmluZyB7fQoKLyoqCiAqIEdldCBhIGZvcm1hdHRlZCBwYXNzd29yZCBoYXNoIChmb3Igc3RvcmFnZSkKICogQXJnb24yaQogKgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd2QKICogQHBhcmFtIGludCAkb3BzbGltaXQKICogQHBhcmFtIGludCAkbWVtbGltaXQKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19wd2hhc2hfc3RyKAogICAgc3RyaW5nICRwYXNzd2QsCiAgICBpbnQgJG9wc2xpbWl0LAogICAgaW50ICRtZW1saW1pdAopOiBzdHJpbmcge30KCi8qKgogKiBWZXJpZnkgYSBwYXNzd29yZCBhZ2FpbnN0IGEgaGFzaAogKiBBcmdvbjJpCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGhhc2gKICogQHBhcmFtIHN0cmluZyAkcGFzc3dkCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gY3J5cHRvX3B3aGFzaF9zdHJfdmVyaWZ5KAogICAgc3RyaW5nICRoYXNoLAogICAgc3RyaW5nICRwYXNzd2QKKTogYm9vbCB7fQoKLyoqCiAqIFNlY3VyZSBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbgogKiBTY3J5cHQKICoKICogQHBhcmFtIGludCAkb3V0X2xlbgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd2QKICogQHBhcmFtIHN0cmluZyAkc2FsdAogKiBAcGFyYW0gaW50ICRvcHNsaW1pdAogKiBAcGFyYW0gaW50ICRtZW1saW1pdAogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1NigKICAgIGludCAkb3V0X2xlbiwKICAgIHN0cmluZyAkcGFzc3dkLAogICAgc3RyaW5nICRzYWx0LAogICAgaW50ICRvcHNsaW1pdCwKICAgIGludCAkbWVtbGltaXQKKTogc3RyaW5nIHt9CgovKioKICogR2V0IGEgZm9ybWF0dGVkIHBhc3N3b3JkIGhhc2ggKGZvciBzdG9yYWdlKQogKiBTY3J5cHQKICoKICogQHBhcmFtIHN0cmluZyAkcGFzc3dkCiAqIEBwYXJhbSBpbnQgJG9wc2xpbWl0CiAqIEBwYXJhbSBpbnQgJG1lbWxpbWl0CiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cigKICAgIHN0cmluZyAkcGFzc3dkLAogICAgaW50ICRvcHNsaW1pdCwKICAgIGludCAkbWVtbGltaXQKKTogc3RyaW5nIHt9CgovKioKICogVmVyaWZ5IGEgcGFzc3dvcmQgYWdhaW5zdCBhIGhhc2gKICogU2NyeXB0CiAqCiAqIEBwYXJhbSBzdHJpbmcgJGhhc2gKICogQHBhcmFtIHN0cmluZyAkcGFzc3dkCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gY3J5cHRvX3B3aGFzaF9zY3J5cHRzYWxzYTIwOHNoYTI1Nl9zdHJfdmVyaWZ5KAogICAgc3RyaW5nICRoYXNoLAogICAgc3RyaW5nICRwYXNzd2QKKTogYm9vbCB7fQoKLyoqCiAqIEVsbGlwdGljIEN1cnZlIERpZmZpZSBIZWxsbWFuIG92ZXIgQ3VydmUyNTUxOQogKiBYMjU1MTkKICoKICogQHBhcmFtIHN0cmluZyAkZWNkaEEKICogQHBhcmFtIHN0cmluZyAkZWNkaEIKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0KAogICAgc3RyaW5nICRlY2RoQSwKICAgIHN0cmluZyAkZWNkaEIKKTogc3RyaW5nIHt9CgovKioKICogQXV0aGVudGljYXRlZCBzZWNyZXQta2V5IGVuY3J5cHRpb24gKGVuY3J5cHQpCiAqIFhzYWxzMjAgKyBQb2x5MTMwNQogKgogKiBAcGFyYW0gc3RyaW5nICRwbGFpbnRleHQKICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjcnlwdG9fc2VjcmV0Ym94KAogICAgc3RyaW5nICRwbGFpbnRleHQsCiAgICBzdHJpbmcgJG5vbmNlLAogICAgc3RyaW5nICRrZXkKKTogc3RyaW5nIHt9CgovKioKICogQXV0aGVudGljYXRlZCBzZWNyZXQta2V5IGVuY3J5cHRpb24gKGRlY3J5cHQpCiAqIFhzYWxzMjAgKyBQb2x5MTMwNQogKgogKiBAcGFyYW0gc3RyaW5nICRjaXBoZXJ0ZXh0CiAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX3NlY3JldGJveF9vcGVuKAogICAgc3RyaW5nICRjaXBoZXJ0ZXh0LAogICAgc3RyaW5nICRub25jZSwKICAgIHN0cmluZyAka2V5Cik6IHN0cmluZyB7fQoKLyoqCiAqIEEgc2hvcnQga2V5ZWQgaGFzaCBzdWl0YWJsZSBmb3IgZGF0YSBzdHJ1Y3R1cmVzCiAqIFNpcEhhc2gtMi00CiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjcnlwdG9fc2hvcnRoYXNoKAogICAgc3RyaW5nICRtZXNzYWdlLAogICAgc3RyaW5nICRrZXkKKTogc3RyaW5nIHt9CgovKioKICogRGlnaXRhbCBTaWduYXR1cmUKICogRWQyNTUxOQogKgogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldGtleQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX3NpZ24oCiAgICBzdHJpbmcgJG1lc3NhZ2UsCiAgICBzdHJpbmcgJHNlY3JldGtleQopOiBzdHJpbmcge30KCi8qKgogKiBEaWdpdGFsIFNpZ25hdHVyZSAoZGV0YWNoZWQpCiAqIEVkMjU1MTkKICoKICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRzZWNyZXRrZXkKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19zaWduX2RldGFjaGVkKAogICAgc3RyaW5nICRtZXNzYWdlLAogICAgc3RyaW5nICRzZWNyZXRrZXkKKTogc3RyaW5nIHt9CgovKioKICogQ29udmVydCBhbiBFZDI1NTE5IHB1YmxpYyBrZXkgdG8gYW4gWDI1NTE5IHB1YmxpYyBrZXkKICoKICogQHBhcmFtIHN0cmluZyAkc2lnbl9wawogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX3NpZ25fZWQyNTUxOV9wa190b19jdXJ2ZTI1NTE5KAogICAgc3RyaW5nICRzaWduX3BrCik6IHN0cmluZyB7fQoKLyoqCiAqIENvbnZlcnQgYW4gRWQyNTUxOSBzZWNyZXQga2V5IHRvIGFuIFgyNTUxOSBzZWNyZXQga2V5CiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNpZ25fc2sKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19zaWduX2VkMjU1MTlfc2tfdG9fY3VydmUyNTUxOSgKICAgIHN0cmluZyAkc2lnbl9zawopOiBzdHJpbmcge30KCi8qKgogKiBHZW5lcmF0ZSBhbiBFZDI1NTE5IGtleXBhaXIgZm9yIHVzZSB3aXRoIHRoZSBjcnlwdG9fc2lnbiBBUEkKICoKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19zaWduX2tleXBhaXIoKTogc3RyaW5nIHt9CgovKioKICogQ3JlYXRlIGFuIEVkMjU1MTkga2V5cGFpciBmcm9tIGFuIEVkMjU1MTkgc2VjcmV0IGtleSArIEVkMjU1MTkgcHVibGljIGtleQogKgogKiBAcGFyYW0gc3RyaW5nICRzZWNyZXRrZXkKICogQHBhcmFtIHN0cmluZyAkcHVibGlja2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjcnlwdG9fc2lnbl9rZXlwYWlyX2Zyb21fc2VjcmV0a2V5X2FuZF9wdWJsaWNrZXkoCiAgICBzdHJpbmcgJHNlY3JldGtleSwKICAgIHN0cmluZyAkcHVibGlja2V5Cik6IHN0cmluZyB7fQoKLyoqCiAqIFZlcmlmeSBhIHNpZ25lZCBtZXNzYWdlIGFuZCByZXR1cm4gdGhlIHBsYWludGV4dAogKgogKiBAcGFyYW0gc3RyaW5nICRzaWduZWRfbWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNrZXkKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19zaWduX29wZW4oCiAgICBzdHJpbmcgJHNpZ25lZF9tZXNzYWdlLAogICAgc3RyaW5nICRwdWJsaWNrZXkKKTogc3RyaW5nIHt9CgovKioKICogR2V0IHRoZSBwdWJsaWMga2V5IGZyb20gYW4gRWQyNTUxOSBrZXlwYWlyCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleXBhaXIKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19zaWduX3B1YmxpY2tleSgKICAgIHN0cmluZyAka2V5cGFpcgopOiBzdHJpbmcge30KCi8qKgogKiBHZXQgdGhlIHNlY3JldCBrZXkgZnJvbSBhbiBFZDI1NTE5IGtleXBhaXIKICoKICogQHBhcmFtIHN0cmluZyAka2V5cGFpcgogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX3NpZ25fc2VjcmV0a2V5KAogICAgc3RyaW5nICRrZXlwYWlyCik6IHN0cmluZyB7fQoKLyoqCiAqIERlcml2ZSBhbiBFZDI1NTE5IHB1YmxpYyBrZXkgZnJvbSBhbiBFZDI1NTE5IHNlY3JldCBrZXkKICoKICogQHBhcmFtIHN0cmluZyAkc2VjcmV0a2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjcnlwdG9fc2lnbl9wdWJsaWNrZXlfZnJvbV9zZWNyZXRrZXkoCiAgICBzdHJpbmcgJHNlY3JldGtleQopOiBzdHJpbmcge30KCi8qKgogKiBEZXJpdmUgYW4gRWQyNTUxOSBrZXlwYWlyIGZvciB1c2Ugd2l0aCB0aGUgY3J5cHRvX3NpZ24gQVBJIGZyb20gYSBzZWVkCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHNlZWQKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19zaWduX3NlZWRfa2V5cGFpcigKICAgIHN0cmluZyAkc2VlZAopOiBzdHJpbmcge30KCi8qKgogKiBWZXJpZnkgYSBkZXRhY2hlZCBzaWduYXR1cmUKICoKICogQHBhcmFtIHN0cmluZyAkc2lnbmF0dXJlCiAqIEBwYXJhbSBzdHJpbmcgJG1zZwogKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNrZXkKICogQHJldHVybiBib29sCiAqLwpmdW5jdGlvbiBjcnlwdG9fc2lnbl92ZXJpZnlfZGV0YWNoZWQoCiAgICBzdHJpbmcgJHNpZ25hdHVyZSwKICAgIHN0cmluZyAkbXNnLAogICAgc3RyaW5nICRwdWJsaWNrZXkKKTogYm9vbCB7fQoKLyoqCiAqIENyZWF0ZSBhIGtleXN0cmVhbSBmcm9tIGEga2V5IGFuZCBub25jZQogKiBYc2Fsc2EyMAogKgogKiBAcGFyYW0gaW50ICRsZW5ndGgKICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBjcnlwdG9fc3RyZWFtKAogICAgaW50ICRsZW5ndGgsCiAgICBzdHJpbmcgJG5vbmNlLAogICAgc3RyaW5nICRrZXkKKTogc3RyaW5nIHt9CgovKioKICogRW5jcnlwdCBhIG1lc3NhZ2UgdXNpbmcgYSBzdHJlYW0gY2lwaGVyCiAqIFhzYWxzYTIwCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBsYWludGV4dAogKiBAcGFyYW0gc3RyaW5nICRub25jZQogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGNyeXB0b19zdHJlYW1feG9yKAogICAgc3RyaW5nICRwbGFpbnRleHQsCiAgICBzdHJpbmcgJG5vbmNlLAogICAgc3RyaW5nICRrZXkKKTogc3RyaW5nIHt9CgovKioKICogR2VuZXJhdGUgYSBzdHJpbmcgb2YgcmFuZG9tIGJ5dGVzCiAqIC9kZXYvdXJhbmRvbQogKgogKiBAcGFyYW0gaW50ICRsZW5ndGgKICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICovCmZ1bmN0aW9uIHJhbmRvbWJ5dGVzX2J1ZigKICAgIGludCAkbGVuZ3RoCik6IHN0cmluZyB7fQoKLyoqCiAqIEdlbmVyYXRlIGEgMTYtYml0IGludGVnZXIKICogL2Rldi91cmFuZG9tCiAqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiByYW5kb21ieXRlc19yYW5kb20xNigpOiBpbnQge30KCi8qKgogKiBHZW5lcmF0ZSBhbiB1bmJpYXNlZCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIGEgc3BlY2lmaWVkIHZhbHVlCiAqIC9kZXYvdXJhbmRvbQogKgogKiBAcGFyYW0gaW50ICR1cHBlckJvdW5kTm9uSW5jbHVzaXZlCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiByYW5kb21ieXRlc191bmlmb3JtKAogICAgaW50ICR1cHBlckJvdW5kTm9uSW5jbHVzaXZlCik6IGludCB7fQoKLyoqCiAqIENvbnZlcnQgdG8gaGV4IHdpdGhvdXQgc2lkZS1jaGFuZWxzCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGJpbmFyeQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gYmluMmhleCgKICAgIHN0cmluZyAkYmluYXJ5Cik6IHN0cmluZyB7fQoKLyoqCiAqIENvbXBhcmUgdHdvIHN0cmluZ3MgaW4gY29uc3RhbnQgdGltZQogKgogKiBAcGFyYW0gc3RyaW5nICRsZWZ0CiAqIEBwYXJhbSBzdHJpbmcgJHJpZ2h0CiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiBjb21wYXJlKAogICAgc3RyaW5nICRsZWZ0LAogICAgc3RyaW5nICRyaWdodAopOiBpbnQge30KCi8qKgogKiBDb252ZXJ0IGZyb20gaGV4IHdpdGhvdXQgc2lkZS1jaGFuZWxzCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGhleAogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gaGV4MmJpbigKICAgIHN0cmluZyAkaGV4Cik6IHN0cmluZyB7fQoKLyoqCiAqIEluY3JlbWVudCBhIHN0cmluZyBpbiBsaXR0bGUtZW5kaWFuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJiRub25jZQogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gaW5jcmVtZW50KAogICAgc3RyaW5nICYkbm9uY2UKKSB7fQoKLyoqCiAqIEFkZCB0aGUgcmlnaHQgb3BlcmFuZCB0byB0aGUgbGVmdAogKgogKiBAcGFyYW0gc3RyaW5nICYkbGVmdAogKiBAcGFyYW0gc3RyaW5nICRyaWdodAogKi8KZnVuY3Rpb24gYWRkKAogICAgc3RyaW5nICYkbGVmdCwKICAgIHN0cmluZyAkcmlnaHQKKSB7fQoKLyoqCiAqIEdldCB0aGUgdHJ1ZSBtYWpvciB2ZXJzaW9uIG9mIGxpYnNvZGl1bQogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gbGlicmFyeV92ZXJzaW9uX21ham9yKCk6IGludCB7fQoKLyoqCiAqIEdldCB0aGUgdHJ1ZSBtaW5vciB2ZXJzaW9uIG9mIGxpYnNvZGl1bQogKiBAcmV0dXJuIGludAogKi8KZnVuY3Rpb24gbGlicmFyeV92ZXJzaW9uX21pbm9yKCk6IGludCB7fQoKLyoqCiAqIENvbXBhcmUgdHdvIHN0cmluZ3MgaW4gY29uc3RhbnQgdGltZQogKgogKiBAcGFyYW0gc3RyaW5nICRsZWZ0CiAqIEBwYXJhbSBzdHJpbmcgJHJpZ2h0CiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiBtZW1jbXAoCiAgICBzdHJpbmcgJGxlZnQsCiAgICBzdHJpbmcgJHJpZ2h0Cik6IGludCB7fQoKLyoqCiAqIFdpcGUgYSBidWZmZXIKICoKICogQHBhcmFtIHN0cmluZyAmJHRhcmdldAogKi8KZnVuY3Rpb24gbWVtemVybyhzdHJpbmcgJiR0YXJnZXQpIHt9CgovKioKICogR2V0IHRoZSB2ZXJzaW9uIHN0cmluZwogKgogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gdmVyc2lvbl9zdHJpbmcoKTogc3RyaW5nIHt9CgovKioKICogU2NhbGFyIG11bHRpcGxpY2F0aW9uIG9mIHRoZSBiYXNlIHBvaW50IGFuZCB5b3VyIGtleQogKgogKiBAcGFyYW0gc3RyaW5nICRzawogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gY3J5cHRvX3NjYWxhcm11bHRfYmFzZShzdHJpbmcgJHNrKTogc3RyaW5nIHt9Cjw/cGhwCgovLyBTdGFydCBvZiBaZW5kIENhY2hlIHYuCgovKioKICogU3RvcmVzIGEgc2VyaWFsaXphYmxlIHZhcmlhYmxlIGludG8gU2hhcmVkIE1lbW9yeSBDYWNoZQogKgogKiBAcGFyYW0gc3RyaW5nICRrZXkgdGhlIGRhdGEncyBrZXkuIFBvc3NpYmx5IHByZWZpeGVkIHdpdGggbmFtZXNwYWNlCiAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgY2FuIGJlIGFueSBQSFAgb2JqZWN0IHRoYXQgY2FuIGJlIHNlcmlhbGl6ZWQuCiAqIEBwYXJhbSBpbnQgJHR0bCBbb3B0aW9uYWxdIHRpbWUgdG8gbGl2ZSBpbiBzZWNvbmRzLiBaZW5kQ2FjaGUga2VlcHMgdGhlIG9iamVjdHMgaW4gdGhlIGNhY2hlIGFzIGxvbmcgYXMgdGhlIFRUTCBpcyBubyBleHBpcmVkLCBvbmNlIGV4cGlyZWQgaXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGNhY2hlCiAqCiAqIEByZXR1cm4gYm9vbCBGQUxTRSB3aGVuIHN0b3JlZCBmYWlsZWQsIFRSVUUgb3RoZXJ3aXNlCiAqLwpmdW5jdGlvbiB6ZW5kX3NobV9jYWNoZV9zdG9yZSgka2V5LCAkdmFsdWUsICR0dGwgPSAwKSB7fQoKLyoqCiAqIFJldHJpZXZlcyBkYXRhIHN0b3JlZCBpbiB0aGUgU2hhcmVkIE1lbW9yeSBDYWNoZS4KICogSWYgdGhlIGtleSBpcyBub3QgZm91bmQsIHJldHVybnMgbnVsbC4KICoKICogQHBhcmFtIHN0cmluZyAka2V5IHRoZSBkYXRhJ3Mga2V5LiBQb3NzaWJseSBwcmVmaXhlZCB3aXRoIG5hbWVzcGFjZQogKgogKiBAcmV0dXJuIG1peGVkfG51bGwgTlVMTCB3aGVuIG5vIGRhdGEgbWF0Y2hpbmcgdGhlIGtleSBpcyBmb3VuZCwgZWxzZSBpdCByZXR1cm5zIHRoZSBzdG9yZWQgZGF0YQogKi8KZnVuY3Rpb24gemVuZF9zaG1fY2FjaGVfZmV0Y2goJGtleSkge30KCi8qKgogKiBEZWxldGUgYSBrZXkgZnJvbSB0aGUgU2hhcmVkIE1lbW9yeSBjYWNoZQogKgogKiBAcGFyYW0gc3RyaW5nICRrZXkgdGhlIGRhdGEncyBrZXkuIFBvc3NpYmx5IHByZWZpeGVkIHdpdGggbmFtZXNwYWNlCiAqCiAqIEByZXR1cm4gbWl4ZWR8bnVsbCB3aGVuIG5vIGRhdGEgbWF0Y2hpbmcgdGhlIGtleSBpcyBmb3VuZCwgZWxzZSBpdCByZXR1cm5zIHRoZSBzdG9yZWQgZGF0YQogKi8KZnVuY3Rpb24gemVuZF9zaG1fY2FjaGVfZGVsZXRlKCRrZXkpIHt9CgovKioKICogQ2xlYXIgdGhlIGVudGlyZSBTaGFyZWQgTWVtb3J5IGNhY2hlIG9yIGp1c3QgdGhlIHByb3ZpZGVkIG5hbWVzcGFjZS4KICoKICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlIFtvcHRpb25hbF0gTmFtZXNwYWNlIHRvIGNsZWFyLiBJZiBibGFuayBvciBpcyBub3QgcGFzc2VkLCBpdCB3aWxsIGNsZWFyIGVudGlyZSBjYWNoZS4KICoKICogQHJldHVybiBib29sIFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb3RoZXJ3aXNlCiAqLwpmdW5jdGlvbiB6ZW5kX3NobV9jYWNoZV9jbGVhcigkbmFtZXNwYWNlID0gJycpIHt9CgovKioKICogUHJvdmlkZSB0aGUgdXNlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVtb3J5IGRhdGEgY2FjaGUKICoKICogQHJldHVybiBhcnJheXxmYWxzZSBGQUxTRSB3aGVuIG9uIGZhaWx1cmUKICovCmZ1bmN0aW9uIHplbmRfc2htX2NhY2hlX2luZm8oKSB7fQoKLyoqCiAqIFN0b3JlcyBhIHNlcmlhbGl6YWJsZSB2YXJpYWJsZSBpbnRvIERpc2sgQ2FjaGUKICoKICogQHBhcmFtIHN0cmluZyAka2V5IHRoZSBkYXRhJ3Mga2V5LiBQb3NzaWJseSBwcmVmaXhlZCB3aXRoIG5hbWVzcGFjZQogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIGNhbiBiZSBhbnkgUEhQIG9iamVjdCB0aGF0IGNhbiBiZSBzZXJpYWxpemVkCiAqIEBwYXJhbSBpbnQgJHR0bCBbb3B0aW9uYWxdIHRpbWUgdG8gbGl2ZSBpbiBzZWNvbmRzLiBaZW5kQ2FjaGUga2VlcHMgdGhlIG9iamVjdHMgaW4gdGhlIGNhY2hlIGFzIGxvbmcgYXMgdGhlIFRUTCBpcyBubyBleHBpcmVkLCBvbmNlIGV4cGlyZWQgaXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGNhY2hlCiAqCiAqIEByZXR1cm4gYm9vbCBGQUxTRSB3aGVuIHN0b3JlZCBmYWlsZWQsIFRSVUUgb3RoZXJ3aXNlCiAqLwpmdW5jdGlvbiB6ZW5kX2Rpc2tfY2FjaGVfc3RvcmUoJGtleSwgJHZhbHVlLCAkdHRsID0gMCkge30KCi8qKgogKiBSZXRyaWV2ZXMgZGF0YSBzdG9yZWQgaW4gdGhlIFNoYXJlZCBNZW1vcnkgQ2FjaGUKICoKICogQHBhcmFtIHN0cmluZyAka2V5IHRoZSBkYXRhJ3Mga2V5LiBQb3NzaWJseSBwcmVmaXhlZCB3aXRoIG5hbWVzcGFjZQogKgogKiBAcmV0dXJuIG1peGVkfG51bGwgTlVMTCB3aGVuIG5vIGRhdGEgbWF0Y2hpbmcgdGhlIGtleSBpcyBmb3VuZCwgZWxzZSBpdCByZXR1cm5zIHRoZSBzdG9yZWQgZGF0YQogKi8KZnVuY3Rpb24gemVuZF9kaXNrX2NhY2hlX2ZldGNoKCRrZXkpIHt9CgovKioKICogRGVsZXRlIGEga2V5IGZyb20gdGhlIGNhY2hlCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGtleSB0aGUgZGF0YSdzIGtleS4gUG9zc2libHkgcHJlZml4ZWQgd2l0aCBuYW1lc3BhY2UKICoKICogQHJldHVybiBtaXhlZHxudWxsIHdoZW4gbm8gZGF0YSBtYXRjaGluZyB0aGUga2V5IGlzIGZvdW5kLCBlbHNlIGl0IHJldHVybnMgdGhlIHN0b3JlZCBkYXRhCiAqLwpmdW5jdGlvbiB6ZW5kX2Rpc2tfY2FjaGVfZGVsZXRlKCRrZXkpIHt9CgovKioKICogQ2xlYXIgdGhlIGVudGlyZSBEaXNrIE1lbW9yeSBjYWNoZSBvciBqdXN0IHRoZSBwcm92aWRlZCBuYW1lc3BhY2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWVzcGFjZSBbb3B0aW9uYWxdIE5hbWVzcGFjZSB0byBjbGVhci4gSWYgYmxhbmsgb3IgaXMgbm90IHBhc3NlZCwgaXQgd2lsbCBjbGVhciBlbnRpcmUgY2FjaGUuCiAqCiAqIEByZXR1cm4gYm9vbCBUUlVFIG9uIHN1Y2Nlc3MsIEZBTFNFIG90aGVyd2lzZQogKi8KZnVuY3Rpb24gemVuZF9kaXNrX2NhY2hlX2NsZWFyKCRuYW1lc3BhY2UgPSAnJykge30KCi8qKgogKiBQcm92aWRlIHRoZSB1c2VyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtZW1vcnkgZGF0YSBjYWNoZQogKgogKiBAcmV0dXJuIGFycmF5fGZhbHNlIEZBTFNFIHdoZW4gb24gZmFpbHVyZQogKi8KZnVuY3Rpb24gemVuZF9kaXNrX2NhY2hlX2luZm8oKSB7fQoKLy8gRW5kIG9mIFplbmQgQ2FjaGUgdi4KPD9waHAKCi8vIFN0YXJ0IG9mIG1jcnlwdCB2Lgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXERlcHJlY2F0ZWQ7CgovKioKICogRW5jcnlwdC9kZWNyeXB0IGRhdGEgaW4gRUNCIG1vZGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tY3J5cHQtZWNiLnBocAogKiBAcGFyYW0gc3RyaW5nfGludCAkY2lwaGVyCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEBwYXJhbSBpbnQgJG1vZGUKICogQHJldHVybiBzdHJpbmcKICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICI1LjUiKV0KZnVuY3Rpb24gbWNyeXB0X2VjYigkY2lwaGVyLCAka2V5LCAkZGF0YSwgJG1vZGUpIHt9CgovKioKICogRW5jcnlwdC9kZWNyeXB0IGRhdGEgaW4gQ0JDIG1vZGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tY3J5cHQtY2JjLnBocAogKiBAcGFyYW0gaW50fHN0cmluZyAkY2lwaGVyCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAqIEBwYXJhbSBpbnQgJG1vZGUKICogQHBhcmFtIHN0cmluZyAkaXYgW29wdGlvbmFsXQogKiBAcmV0dXJuIHN0cmluZwogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogIjUuNSIpXQpmdW5jdGlvbiBtY3J5cHRfY2JjKCRjaXBoZXIsICRrZXksICRkYXRhLCAkbW9kZSwgJGl2ID0gbnVsbCkge30KCi8qKgogKiBFbmNyeXB0L2RlY3J5cHQgZGF0YSBpbiBDRkIgbW9kZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1jZmIucGhwCiAqIEBwYXJhbSBpbnR8c3RyaW5nICRjaXBoZXIKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICogQHBhcmFtIGludCAkbW9kZQogKiBAcGFyYW0gc3RyaW5nICRpdiBbb3B0aW9uYWxdCiAqIEByZXR1cm4gc3RyaW5nCiAqIEByZW1vdmVkIDcuMAogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNS41JyldCmZ1bmN0aW9uIG1jcnlwdF9jZmIoJGNpcGhlciwgJGtleSwgJGRhdGEsICRtb2RlLCAkaXYgPSBudWxsKSB7fQoKLyoqCiAqIEVuY3J5cHQvZGVjcnlwdCBkYXRhIGluIE9GQiBtb2RlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LW9mYi5waHAKICogQHBhcmFtIGludHxzdHJpbmcgJGNpcGhlcgogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHBhcmFtIHN0cmluZyAkZGF0YQogKiBAcGFyYW0gaW50ICRtb2RlCiAqIEBwYXJhbSBzdHJpbmcgJGl2IFtvcHRpb25hbF0KICogQHJldHVybiBzdHJpbmcKICogQHJlbW92ZWQgNy4wCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc1LjUnKV0KZnVuY3Rpb24gbWNyeXB0X29mYigkY2lwaGVyLCAka2V5LCAkZGF0YSwgJG1vZGUsICRpdiA9IG51bGwpIHt9CgovKioKICogR2V0IHRoZSBrZXkgc2l6ZSBvZiB0aGUgc3BlY2lmaWVkIGNpcGhlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1nZXQta2V5LXNpemUucGhwCiAqIEBwYXJhbSBpbnR8c3RyaW5nICRjaXBoZXIKICogQHBhcmFtIHN0cmluZyAkbW9kdWxlCiAqIEByZXR1cm4gaW50CiAqIEByZW1vdmVkIDcuMgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNy4xJyldCmZ1bmN0aW9uIG1jcnlwdF9nZXRfa2V5X3NpemUoJGNpcGhlciwgJG1vZHVsZSkge30KCi8qKgogKiBHZXQgdGhlIGJsb2NrIHNpemUgb2YgdGhlIHNwZWNpZmllZCBjaXBoZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tY3J5cHQtZ2V0LWJsb2NrLXNpemUucGhwCiAqIEBwYXJhbSBzdHJpbmd8aW50ICRjaXBoZXIgPHA+CiAqIE9uZSBvZiB0aGUgTUNSWVBUX2NpcGhlcm5hbWUgY29uc3RhbnRzIG9yIHRoZSBuYW1lCiAqIG9mIHRoZSBhbGdvcml0aG0gYXMgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG1vZHVsZSA8cD4KICogT25lIG9mIHRoZSA8Yj5NQ1JZUFRfTU9ERV9tb2RlbmFtZTwvYj4gY29uc3RhbnRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzOiAiZWNiIiwgImNiYyIsICJjZmIiLCAib2ZiIiwgIm5vZmIiIG9yICJzdHJlYW0iLjwvcD4KICogQHJldHVybiBpbnQgR2V0cyB0aGUgYmxvY2sgc2l6ZSwgYXMgYW4gaW50ZWdlci4KICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWNyeXB0X2dldF9ibG9ja19zaXplKCRjaXBoZXIsICRtb2R1bGUpIHt9CgovKioKICogR2V0IHRoZSBuYW1lIG9mIHRoZSBzcGVjaWZpZWQgY2lwaGVyCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LWdldC1jaXBoZXItbmFtZS5waHAKICogQHBhcmFtIGludHxzdHJpbmcgJGNpcGhlciA8cD4KICogT25lIG9mIHRoZSBNQ1JZUFRfY2lwaGVybmFtZSBjb25zdGFudHMgb3IgdGhlIG5hbWUKICogb2YgdGhlIGFsZ29yaXRobSBhcyBzdHJpbmcuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIgb3IgZmFsc2UsIGlmIHRoZSBjaXBoZXIgZG9lcwogKiBub3QgZXhpc3QuCiAqIEByZW1vdmVkIDcuMgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNy4xJyldCmZ1bmN0aW9uIG1jcnlwdF9nZXRfY2lwaGVyX25hbWUoJGNpcGhlcikge30KCi8qKgogKiBDcmVhdGVzIGFuIGluaXRpYWxpemF0aW9uIHZlY3RvciAoSVYpIGZyb20gYSByYW5kb20gc291cmNlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LWNyZWF0ZS1pdi5waHAKICogQHBhcmFtIGludCAkc2l6ZSA8cD4KICogRGV0ZXJtaW5lcyB0aGUgc2l6ZSBvZiB0aGUgSVYsIHBhcmFtZXRlciBzb3VyY2UKICogKGRlZmF1bHRzIHRvIHJhbmRvbSB2YWx1ZSkgc3BlY2lmaWVzIHRoZSBzb3VyY2Ugb2YgdGhlIElWLgogKiA8L3A+CiAqIEBwYXJhbSBpbnQgJHNvdXJjZSBbb3B0aW9uYWxdIDxwPgogKiBUaGUgc291cmNlIGNhbiBiZSBNQ1JZUFRfUkFORCAoc3lzdGVtIHJhbmRvbQogKiBudW1iZXIgZ2VuZXJhdG9yKSwgTUNSWVBUX0RFVl9SQU5ET00gKHJlYWQKICogZGF0YSBmcm9tIC9kZXYvcmFuZG9tKSBhbmQKICogTUNSWVBUX0RFVl9VUkFORE9NIChyZWFkIGRhdGEgZnJvbQogKiAvZGV2L3VyYW5kb20pLiBNQ1JZUFRfUkFORAogKiBpcyB0aGUgb25seSBvbmUgc3VwcG9ydGVkIG9uIFdpbmRvd3MgYmVjYXVzZSBXaW5kb3dzIChvZiBjb3Vyc2UpCiAqIGRvZXNuJ3QgaGF2ZSAvZGV2L3JhbmRvbSBvcgogKiAvZGV2L3VyYW5kb20uCiAqIDwvcD4KICogPHA+CiAqIFdoZW4gdXNpbmcgTUNSWVBUX1JBTkQsIHJlbWVtYmVyIHRvIGNhbGwKICogc3JhbmQgYmVmb3JlCiAqIG1jcnlwdF9jcmVhdGVfaXYgdG8gaW5pdGlhbGl6ZSB0aGUgcmFuZG9tCiAqIG51bWJlciBnZW5lcmF0b3I7IGl0IGlzIG5vdCBzZWVkZWQgYXV0b21hdGljYWxseSBsaWtlCiAqIHJhbmQgaXMuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIGluaXRpYWxpemF0aW9uIHZlY3Rvciwgb3IgZmFsc2Ugb24gZXJyb3IuCiAqIEByZW1vdmVkIDcuMgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNy4xJyldCmZ1bmN0aW9uIG1jcnlwdF9jcmVhdGVfaXYoJHNpemUsICRzb3VyY2UgPSBNQ1JZUFRfREVWX1VSQU5ET00pIHt9CgovKioKICogR2V0cyBhbiBhcnJheSBvZiBhbGwgc3VwcG9ydGVkIGNpcGhlcnMKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tY3J5cHQtbGlzdC1hbGdvcml0aG1zLnBocAogKiBAcGFyYW0gc3RyaW5nICRsaWJfZGlyIFtvcHRpb25hbF0gPHA+CiAqIFNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHdoZXJlIGFsbCBhbGdvcml0aG1zIGFyZSBsb2NhdGVkLiBJZiBub3QKICogc3BlY2lmaWVzLCB0aGUgdmFsdWUgb2YgdGhlIG1jcnlwdC5hbGdvcml0aG1zX2RpciAocGhwLmluaSkgZGlyZWN0aXZlCiAqIGlzIHVzZWQuCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBhbiBhcnJheSB3aXRoIGFsbCB0aGUgc3VwcG9ydGVkIGFsZ29yaXRobXMuCiAqIEByZW1vdmVkIDcuMgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNy4xJyldCmZ1bmN0aW9uIG1jcnlwdF9saXN0X2FsZ29yaXRobXMoJGxpYl9kaXIgPSBudWxsKSB7fQoKLyoqCiAqIEdldHMgYW4gYXJyYXkgb2YgYWxsIHN1cHBvcnRlZCBtb2RlcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1saXN0LW1vZGVzLnBocAogKiBAcGFyYW0gc3RyaW5nICRsaWJfZGlyIFtvcHRpb25hbF0gPHA+CiAqIFNwZWNpZmllcyB0aGUgZGlyZWN0b3J5IHdoZXJlIGFsbCBtb2RlcyBhcmUgbG9jYXRlZC4gSWYgbm90CiAqIHNwZWNpZmllcywgdGhlIHZhbHVlIG9mIHRoZSBtY3J5cHQubW9kZXNfZGlyCiAqIChwaHAuaW5pKSBkaXJlY3RpdmUgaXMgdXNlZC4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5IHdpdGggYWxsIHRoZSBzdXBwb3J0ZWQgbW9kZXMuCiAqIEByZW1vdmVkIDcuMgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNy4xJyldCmZ1bmN0aW9uIG1jcnlwdF9saXN0X21vZGVzKCRsaWJfZGlyID0gbnVsbCkge30KCi8qKgogKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBJViBiZWxvbmdpbmcgdG8gYSBzcGVjaWZpYyBjaXBoZXIvbW9kZSBjb21iaW5hdGlvbgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1nZXQtaXYtc2l6ZS5waHAKICogQHBhcmFtIHN0cmluZyAkY2lwaGVyIDxwPgogKiBPbmUgb2YgdGhlIE1DUllQVF9jaXBoZXJuYW1lIGNvbnN0YW50cyBvZiB0aGUgbmFtZQogKiBvZiB0aGUgYWxnb3JpdGhtIGFzIHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRtb2R1bGUgPHA+CiAqIG1vZGUgaXMgb25lIG9mIHRoZSBNQ1JZUFRfTU9ERV9tb2RlbmFtZSBjb25zdGFudHMKICogb3Igb25lIG9mICJlY2IiLCAiY2JjIiwgImNmYiIsICJvZmIiLCAibm9mYiIgb3IgInN0cmVhbSIuIFRoZSBJViBpcwogKiBpZ25vcmVkIGluIEVDQiBtb2RlIGFzIHRoaXMgbW9kZSBkb2VzIG5vdCByZXF1aXJlIGl0LiBZb3Ugd2lsbCBuZWVkIHRvCiAqIGhhdmUgdGhlIHNhbWUgSVYgKHRoaW5rOiBzdGFydGluZyBwb2ludCkgYm90aCBhdCBlbmNyeXB0aW9uIGFuZAogKiBkZWNyeXB0aW9uIHN0YWdlcywgb3RoZXJ3aXNlIHlvdXIgZW5jcnlwdGlvbiB3aWxsIGZhaWwuCiAqIDwvcD4KICogQHJldHVybiBpbnR8ZmFsc2UgdGhlIHNpemUgb2YgdGhlIEluaXRpYWxpc2F0aW9uIFZlY3RvciAoSVYpIGluIGJ5dGVzLiBPbiBlcnJvciB0aGUKICogZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4gSWYgdGhlIElWIGlzIGlnbm9yZWQgaW4gdGhlIHNwZWNpZmllZCBjaXBoZXIvbW9kZQogKiBjb21iaW5hdGlvbiB6ZXJvIGlzIHJldHVybmVkLgogKiBAcmVtb3ZlZCA3LjIKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzcuMScpXQpmdW5jdGlvbiBtY3J5cHRfZ2V0X2l2X3NpemUoJGNpcGhlciwgJG1vZHVsZSkge30KCi8qKgogKiBFbmNyeXB0cyBwbGFpbnRleHQgd2l0aCBnaXZlbiBwYXJhbWV0ZXJzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LWVuY3J5cHQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNpcGhlciA8cD4KICogT25lIG9mIHRoZSBNQ1JZUFRfY2lwaGVybmFtZQogKiBjb25zdGFudHMgb2YgdGhlIG5hbWUgb2YgdGhlIGFsZ29yaXRobSBhcyBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAka2V5IDxwPgogKiBUaGUga2V5IHdpdGggd2hpY2ggdGhlIGRhdGEgd2lsbCBiZSBlbmNyeXB0ZWQuIElmIGl0J3Mgc21hbGxlciB0aGF0CiAqIHRoZSByZXF1aXJlZCBrZXlzaXplLCBpdCBpcyBwYWRkZWQgd2l0aCAnXDAnLiBJdCBpcwogKiBiZXR0ZXIgbm90IHRvIHVzZSBBU0NJSSBzdHJpbmdzIGZvciBrZXlzLgogKiA8L3A+CiAqIDxwPgogKiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIG1oYXNoIGZ1bmN0aW9ucyB0byBjcmVhdGUgYSBrZXkgZnJvbSBhCiAqIHN0cmluZy4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPgogKiBUaGUgZGF0YSB0aGF0IHdpbGwgYmUgZW5jcnlwdGVkIHdpdGggdGhlIGdpdmVuIGNpcGhlciBhbmQgbW9kZS4gSWYgdGhlCiAqIHNpemUgb2YgdGhlIGRhdGEgaXMgbm90IG4gKiBibG9ja3NpemUsIHRoZSBkYXRhIHdpbGwgYmUgcGFkZGVkIHdpdGgKICogJ1wwJy4KICogPC9wPgogKiA8cD4KICogVGhlIHJldHVybmVkIGNyeXB0dGV4dCBjYW4gYmUgbGFyZ2VyIHRoYXQgdGhlIHNpemUgb2YgdGhlIGRhdGEgdGhhdCBpcwogKiBnaXZlbiBieSBkYXRhLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG1vZGUgPHA+CiAqIE9uZSBvZiB0aGUgTUNSWVBUX01PREVfbW9kZW5hbWUKICogY29uc3RhbnRzIG9mIG9uZSBvZiAiZWNiIiwgImNiYyIsICJjZmIiLCAib2ZiIiwgIm5vZmIiIG9yCiAqICJzdHJlYW0iLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGl2IFtvcHRpb25hbF0gPHA+CiAqIFVzZWQgZm9yIHRoZSBpbml0aWFsaXNhdGlvbiBpbiBDQkMsIENGQiwgT0ZCIG1vZGVzLCBhbmQgaW4gc29tZQogKiBhbGdvcml0aG1zIGluIFNUUkVBTSBtb2RlLiBJZiB5b3UgZG8gbm90IHN1cHBseSBhbiBJViwgd2hpbGUgaXQgaXMKICogbmVlZGVkIGZvciBhbiBhbGdvcml0aG0sIHRoZSBmdW5jdGlvbiBpc3N1ZXMgYSB3YXJuaW5nIGFuZCB1c2VzIGFuCiAqIElWIHdpdGggYWxsIGJ5dGVzIHNldCB0byAnXDAnLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIHRoZSBlbmNyeXB0ZWQgZGF0YSwgYXMgYSBzdHJpbmcuCiAqIEByZW1vdmVkIDcuMgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNy4xJyldCmZ1bmN0aW9uIG1jcnlwdF9lbmNyeXB0KCRjaXBoZXIsICRrZXksICRkYXRhLCAkbW9kZSwgJGl2ID0gbnVsbCkge30KCi8qKgogKiBEZWNyeXB0cyBjcnlwdHRleHQgd2l0aCBnaXZlbiBwYXJhbWV0ZXJzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LWRlY3J5cHQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNpcGhlciA8cD4KICogY2lwaGVyIGlzIG9uZSBvZiB0aGUgTUNSWVBUX2NpcGhlcm5hbWUgY29uc3RhbnRzCiAqIG9mIHRoZSBuYW1lIG9mIHRoZSBhbGdvcml0aG0gYXMgc3RyaW5nLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGtleSA8cD4KICoga2V5IGlzIHRoZSBrZXkgd2l0aCB3aGljaCB0aGUgZGF0YSBpcyBlbmNyeXB0ZWQuCiAqIElmIGl0J3Mgc21hbGxlciB0aGF0IHRoZSByZXF1aXJlZCBrZXlzaXplLCBpdCBpcyBwYWRkZWQgd2l0aAogKiAnXDAnLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgPHA+CiAqIGRhdGEgaXMgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIGRlY3J5cHRlZCB3aXRoCiAqIHRoZSBnaXZlbiBjaXBoZXIgYW5kIG1vZGUuIElmIHRoZSBzaXplIG9mIHRoZSBkYXRhIGlzIG5vdCBuICogYmxvY2tzaXplLAogKiB0aGUgZGF0YSB3aWxsIGJlIHBhZGRlZCB3aXRoICdcMCcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbW9kZSA8cD4KICogbW9kZSBpcyBvbmUgb2YgdGhlIE1DUllQVF9NT0RFX21vZGVuYW1lCiAqIGNvbnN0YW50cyBvZiBvbmUgb2YgImVjYiIsICJjYmMiLCAiY2ZiIiwgIm9mYiIsICJub2ZiIiBvciAic3RyZWFtIi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRpdiBbb3B0aW9uYWxdIDxwPgogKiBUaGUgaXYgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIHRoZSBpbml0aWFsaXNhdGlvbgogKiBpbiBDQkMsIENGQiwgT0ZCIG1vZGVzLCBhbmQgaW4gc29tZSBhbGdvcml0aG1zIGluIFNUUkVBTSBtb2RlLiBJZiB5b3UKICogZG8gbm90IHN1cHBseSBhbiBJViwgd2hpbGUgaXQgaXMgbmVlZGVkIGZvciBhbiBhbGdvcml0aG0sIHRoZSBmdW5jdGlvbgogKiBpc3N1ZXMgYSB3YXJuaW5nIGFuZCB1c2VzIGFuIElWIHdpdGggYWxsIGJ5dGVzIHNldCB0bwogKiAnXDAnLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIHRoZSBkZWNyeXB0ZWQgZGF0YSBhcyBhIHN0cmluZy4KICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWNyeXB0X2RlY3J5cHQoJGNpcGhlciwgJGtleSwgJGRhdGEsICRtb2RlLCAkaXYgPSBudWxsKSB7fQoKLyoqCiAqIE9wZW5zIHRoZSBtb2R1bGUgb2YgdGhlIGFsZ29yaXRobSBhbmQgdGhlIG1vZGUgdG8gYmUgdXNlZAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1tb2R1bGUtb3Blbi5waHAKICogQHBhcmFtIHN0cmluZyAkY2lwaGVyIDxwPgogKiBUaGUgYWxnb3JpdGhtIHRvIGJlIHVzZWQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY2lwaGVyX2RpcmVjdG9yeSA8cD4KICogVGhlIGFsZ29yaXRobV9kaXJlY3RvcnkgYW5kCiAqIG1vZGVfZGlyZWN0b3J5IGFyZSB1c2VkIHRvIGxvY2F0ZSB0aGUgZW5jcnlwdGlvbgogKiBtb2R1bGVzLiBXaGVuIHlvdSBzdXBwbHkgYSBkaXJlY3RvcnkgbmFtZSwgaXQgaXMgdXNlZC4gV2hlbiB5b3Ugc2V0IG9uZQogKiBvZiB0aGVzZSB0byB0aGUgZW1wdHkgc3RyaW5nICgiIiksIHRoZSB2YWx1ZSBzZXQgYnkKICogdGhlIG1jcnlwdC5hbGdvcml0aG1zX2RpciBvcgogKiBtY3J5cHQubW9kZXNfZGlyIGluaS1kaXJlY3RpdmUgaXMgdXNlZC4gV2hlbgogKiB0aGVzZSBhcmUgbm90IHNldCwgdGhlIGRlZmF1bHQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgdXNlZCBhcmUgdGhlIG9uZXMKICogdGhhdCB3ZXJlIGNvbXBpbGVkIGluIGludG8gbGlibWNyeXB0ICh1c3VhbGx5CiAqIC91c3IvbG9jYWwvbGliL2xpYm1jcnlwdCkuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbW9kZSA8cD4KICogVGhlIG1vZGUgdG8gYmUgdXNlZC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRtb2RlX2RpcmVjdG9yeSA8cD4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIE5vcm1hbGx5IGl0IHJldHVybnMgYW4gZW5jcnlwdGlvbiBkZXNjcmlwdG9yLCBvciBmYWxzZSBvbiBlcnJvci4KICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWNyeXB0X21vZHVsZV9vcGVuKCRjaXBoZXIsICRjaXBoZXJfZGlyZWN0b3J5LCAkbW9kZSwgJG1vZGVfZGlyZWN0b3J5KSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYWxsIGJ1ZmZlcnMgbmVlZGVkIGZvciBlbmNyeXB0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LWdlbmVyaWMtaW5pdC5waHAKICogQHBhcmFtIHJlc291cmNlICR0ZCA8cD4KICogVGhlIGVuY3J5cHRpb24gZGVzY3JpcHRvci4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRrZXkgPHA+CiAqIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUga2V5IHNob3VsZCBiZSB0aGUgb25lIG9idGFpbmVkIGJ5IGNhbGxpbmcKICogbWNyeXB0X2VuY19nZXRfa2V5X3NpemUgYW5kIGV2ZXJ5IHZhbHVlIHNtYWxsZXIKICogdGhhbiB0aGlzIGlzIGxlZ2FsLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGl2IDxwPgogKiBUaGUgSVYgc2hvdWxkIG5vcm1hbGx5IGhhdmUgdGhlIHNpemUgb2YgdGhlIGFsZ29yaXRobXMgYmxvY2sgc2l6ZSwgYnV0CiAqIHlvdSBtdXN0IG9idGFpbiB0aGUgc2l6ZSBieSBjYWxsaW5nCiAqIG1jcnlwdF9lbmNfZ2V0X2l2X3NpemUuIElWIGlzIGlnbm9yZWQgaW4gRUNCLiBJVgogKiBNVVNUIGV4aXN0IGluIENGQiwgQ0JDLCBTVFJFQU0sIG5PRkIgYW5kIE9GQiBtb2Rlcy4gSXQgbmVlZHMgdG8gYmUKICogcmFuZG9tIGFuZCB1bmlxdWUgKGJ1dCBub3Qgc2VjcmV0KS4gVGhlIHNhbWUgSVYgbXVzdCBiZSB1c2VkIGZvcgogKiBlbmNyeXB0aW9uL2RlY3J5cHRpb24uIElmIHlvdSBkbyBub3Qgd2FudCB0byB1c2UgaXQgeW91IHNob3VsZCBzZXQgaXQKICogdG8gemVyb3MsIGJ1dCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZC4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLCAtMyB3aGVuIHRoZSBrZXkgbGVuZ3RoCiAqIHdhcyBpbmNvcnJlY3QsIC00IHdoZW4gdGhlcmUgd2FzIGEgbWVtb3J5IGFsbG9jYXRpb24gcHJvYmxlbSBhbmQgYW55CiAqIG90aGVyIHJldHVybiB2YWx1ZSBpcyBhbiB1bmtub3duIGVycm9yLiBJZiBhbiBlcnJvciBvY2N1cnMgYSB3YXJuaW5nIHdpbGwKICogYmUgZGlzcGxheWVkIGFjY29yZGluZ2x5LiBmYWxzZSBpcyByZXR1cm5lZCBpZiBpbmNvcnJlY3QgcGFyYW1ldGVycwogKiB3ZXJlIHBhc3NlZC4KICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWNyeXB0X2dlbmVyaWNfaW5pdCgkdGQsICRrZXksICRpdikge30KCi8qKgogKiBUaGlzIGZ1bmN0aW9uIGVuY3J5cHRzIGRhdGEKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tY3J5cHQtZ2VuZXJpYy5waHAKICogQHBhcmFtIHJlc291cmNlICR0ZCA8cD4KICogVGhlIGVuY3J5cHRpb24gZGVzY3JpcHRvci4KICogPC9wPgogKiA8cD4KICogVGhlIGVuY3J5cHRpb24gaGFuZGxlIHNob3VsZCBhbHdheXMgYmUgaW5pdGlhbGl6ZWQgd2l0aAogKiBtY3J5cHRfZ2VuZXJpY19pbml0IHdpdGggYSBrZXkgYW5kIGFuIElWIGJlZm9yZQogKiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFdoZXJlIHRoZSBlbmNyeXB0aW9uIGlzIGRvbmUsIHlvdSBzaG91bGQgZnJlZSB0aGUKICogZW5jcnlwdGlvbiBidWZmZXJzIGJ5IGNhbGxpbmcgbWNyeXB0X2dlbmVyaWNfZGVpbml0LgogKiBTZWUgbWNyeXB0X21vZHVsZV9vcGVuIGZvciBhbiBleGFtcGxlLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgPHA+CiAqIFRoZSBkYXRhIHRvIGVuY3J5cHQuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgdGhlIGVuY3J5cHRlZCBkYXRhLgogKiBAcmVtb3ZlZCA3LjIKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzcuMScpXQpmdW5jdGlvbiBtY3J5cHRfZ2VuZXJpYygkdGQsICRkYXRhKSB7fQoKLyoqCiAqIERlY3J5cHRzIGRhdGEKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tZGVjcnlwdC1nZW5lcmljLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHRkIDxwPgogKiBBbiBlbmNyeXB0aW9uIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkKICogbWNyeXB0X21vZHVsZV9vcGVuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICogRW5jcnlwdGVkIGRhdGEuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcKICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWRlY3J5cHRfZ2VuZXJpYygkdGQsICRkYXRhKSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyBlbmNyeXB0aW9uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LWdlbmVyaWMtZW5kLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHRkCiAqIEByZXR1cm4gYm9vbAogKiBAcmVtb3ZlZCA3LjAKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzUuMycpXQpmdW5jdGlvbiBtY3J5cHRfZ2VuZXJpY19lbmQoJHRkKSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gZGVpbml0aWFsaXplcyBhbiBlbmNyeXB0aW9uIG1vZHVsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1nZW5lcmljLWRlaW5pdC5waHAKICogQHBhcmFtIHJlc291cmNlICR0ZCA8cD4KICogVGhlIGVuY3J5cHRpb24gZGVzY3JpcHRvci4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAqIEByZW1vdmVkIDcuMgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNy4xJyldCmZ1bmN0aW9uIG1jcnlwdF9nZW5lcmljX2RlaW5pdCgkdGQpIHt9CgovKioKICogUnVucyBhIHNlbGYgdGVzdCBvbiB0aGUgb3BlbmVkIG1vZHVsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1lbmMtc2VsZi10ZXN0LnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHRkIDxwPgogKiBUaGUgZW5jcnlwdGlvbiBkZXNjcmlwdG9yLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGludGVnZXIgb24gZmFpbHVyZQogKiBAcmVtb3ZlZCA3LjIKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzcuMScpXQpmdW5jdGlvbiBtY3J5cHRfZW5jX3NlbGZfdGVzdCgkdGQpIHt9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgdGhlIGVuY3J5cHRpb24gb2YgdGhlIG9wZW5lZCBtb2RlIHdvcmtzIG9uIGJsb2NrcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1lbmMtaXMtYmxvY2stYWxnb3JpdGhtLW1vZGUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkdGQgPHA+CiAqIFRoZSBlbmNyeXB0aW9uIGRlc2NyaXB0b3IuCiAqIDwvcD4KICogQHJldHVybiBib29sIHRydWUgaWYgdGhlIG1vZGUgaXMgZm9yIHVzZSB3aXRoIGJsb2NrIGFsZ29yaXRobXMsIG90aGVyd2lzZSBpdAogKiByZXR1cm5zIGZhbHNlLgogKiBAcmVtb3ZlZCA3LjIKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzcuMScpXQpmdW5jdGlvbiBtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobV9tb2RlKCR0ZCkge30KCi8qKgogKiBDaGVja3Mgd2hldGhlciB0aGUgYWxnb3JpdGhtIG9mIHRoZSBvcGVuZWQgbW9kZSBpcyBhIGJsb2NrIGFsZ29yaXRobQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1lbmMtaXMtYmxvY2stYWxnb3JpdGhtLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHRkIDxwPgogKiBUaGUgZW5jcnlwdGlvbiBkZXNjcmlwdG9yLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBhbGdvcml0aG0gaXMgYSBibG9jayBhbGdvcml0aG0gb3IgZmFsc2UgaWYgaXQgaXMKICogYSBzdHJlYW0gb25lLgogKiBAcmVtb3ZlZCA3LjIKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzcuMScpXQpmdW5jdGlvbiBtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobSgkdGQpIHt9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgdGhlIG9wZW5lZCBtb2RlIG91dHB1dHMgYmxvY2tzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LWVuYy1pcy1ibG9jay1tb2RlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHRkIDxwPgogKiBUaGUgZW5jcnlwdGlvbiBkZXNjcmlwdG9yLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIGlmIHRoZSBtb2RlIG91dHB1dHMgYmxvY2tzIG9mIGJ5dGVzIG9yIGZhbHNlIGlmIGl0IG91dHB1dHMgYnl0ZXMuCiAqIEByZW1vdmVkIDcuMgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNy4xJyldCmZ1bmN0aW9uIG1jcnlwdF9lbmNfaXNfYmxvY2tfbW9kZSgkdGQpIHt9CgovKioKICogUmV0dXJucyB0aGUgYmxvY2tzaXplIG9mIHRoZSBvcGVuZWQgYWxnb3JpdGhtCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LWVuYy1nZXQtYmxvY2stc2l6ZS5waHAKICogQHBhcmFtIHJlc291cmNlICR0ZCA8cD4KICogVGhlIGVuY3J5cHRpb24gZGVzY3JpcHRvci4KICogPC9wPgogKiBAcmV0dXJuIGludCB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobSBpbiBieXRlcy4KICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWNyeXB0X2VuY19nZXRfYmxvY2tfc2l6ZSgkdGQpIHt9CgovKioKICogUmV0dXJucyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQga2V5c2l6ZSBvZiB0aGUgb3BlbmVkIG1vZGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tY3J5cHQtZW5jLWdldC1rZXktc2l6ZS5waHAKICogQHBhcmFtIHJlc291cmNlICR0ZCA8cD4KICogVGhlIGVuY3J5cHRpb24gZGVzY3JpcHRvci4KICogPC9wPgogKiBAcmV0dXJuIGludCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQga2V5IHNpemUgb2YgdGhlIGFsZ29yaXRobSBpbiBieXRlcy4KICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWNyeXB0X2VuY19nZXRfa2V5X3NpemUoJHRkKSB7fQoKLyoqCiAqIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgc3VwcG9ydGVkIGtleXNpemVzIG9mIHRoZSBvcGVuZWQgYWxnb3JpdGhtCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LWVuYy1nZXQtc3VwcG9ydGVkLWtleS1zaXplcy5waHAKICogQHBhcmFtIHJlc291cmNlICR0ZCA8cD4KICogVGhlIGVuY3J5cHRpb24gZGVzY3JpcHRvci4KICogPC9wPgogKiBAcmV0dXJuIGFycmF5IGFuIGFycmF5IHdpdGggdGhlIGtleSBzaXplcyBzdXBwb3J0ZWQgYnkgdGhlIGFsZ29yaXRobQogKiBzcGVjaWZpZWQgYnkgdGhlIGVuY3J5cHRpb24gZGVzY3JpcHRvci4gSWYgaXQgcmV0dXJucyBhbiBlbXB0eQogKiBhcnJheSB0aGVuIGFsbCBrZXkgc2l6ZXMgYmV0d2VlbiAxIGFuZAogKiBtY3J5cHRfZW5jX2dldF9rZXlfc2l6ZSBhcmUgc3VwcG9ydGVkIGJ5IHRoZQogKiBhbGdvcml0aG0uCiAqIEByZW1vdmVkIDcuMgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNy4xJyldCmZ1bmN0aW9uIG1jcnlwdF9lbmNfZ2V0X3N1cHBvcnRlZF9rZXlfc2l6ZXMoJHRkKSB7fQoKLyoqCiAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIElWIG9mIHRoZSBvcGVuZWQgYWxnb3JpdGhtCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LWVuYy1nZXQtaXYtc2l6ZS5waHAKICogQHBhcmFtIHJlc291cmNlICR0ZCA8cD4KICogVGhlIGVuY3J5cHRpb24gZGVzY3JpcHRvci4KICogPC9wPgogKiBAcmV0dXJuIGludCB0aGUgc2l6ZSBvZiB0aGUgSVYsIG9yIDAgaWYgdGhlIElWIGlzIGlnbm9yZWQgaW4gdGhlIGFsZ29yaXRobS4KICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWNyeXB0X2VuY19nZXRfaXZfc2l6ZSgkdGQpIHt9CgovKioKICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgb3BlbmVkIGFsZ29yaXRobQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1lbmMtZ2V0LWFsZ29yaXRobXMtbmFtZS5waHAKICogQHBhcmFtIHJlc291cmNlICR0ZCA8cD4KICogVGhlIGVuY3J5cHRpb24gZGVzY3JpcHRvci4KICogPC9wPgogKiBAcmV0dXJuIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgb3BlbmVkIGFsZ29yaXRobSBhcyBhIHN0cmluZy4KICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWNyeXB0X2VuY19nZXRfYWxnb3JpdGhtc19uYW1lKCR0ZCkge30KCi8qKgogKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBvcGVuZWQgbW9kZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1lbmMtZ2V0LW1vZGVzLW5hbWUucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkdGQgPHA+CiAqIFRoZSBlbmNyeXB0aW9uIGRlc2NyaXB0b3IuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmcgdGhlIG5hbWUgYXMgYSBzdHJpbmcuCiAqIEByZW1vdmVkIDcuMgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNy4xJyldCmZ1bmN0aW9uIG1jcnlwdF9lbmNfZ2V0X21vZGVzX25hbWUoJHRkKSB7fQoKLyoqCiAqIFRoaXMgZnVuY3Rpb24gcnVucyBhIHNlbGYgdGVzdCBvbiB0aGUgc3BlY2lmaWVkIG1vZHVsZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1tb2R1bGUtc2VsZi10ZXN0LnBocAogKiBAcGFyYW0gc3RyaW5nICRhbGdvcml0aG0gPHA+CiAqIE9uZSBvZiB0aGUgPGI+TUNSWVBUX2NpcGhlcm5hbWU8L2I+IGNvbnN0YW50cywgb3IgdGhlIG5hbWUgb2YgdGhlIGFsZ29yaXRobSBhcyBzdHJpbmcuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbGliX2RpciBbb3B0aW9uYWxdIDxwPgogKiBUaGUgb3B0aW9uYWwgbGliX2RpciBwYXJhbWV0ZXIgY2FuIGNvbnRhaW4gdGhlCiAqIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBhbGdvcml0aG0gbW9kdWxlIGlzIG9uIHRoZSBzeXN0ZW0uCiAqIDwvcD4KICogQHJldHVybiBib29sIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIHNlbGYgdGVzdCBzdWNjZWVkcywgb3IgZmFsc2Ugd2hlbiBpZgogKiBmYWlscy4KICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWNyeXB0X21vZHVsZV9zZWxmX3Rlc3QoJGFsZ29yaXRobSwgJGxpYl9kaXIgPSBudWxsKSB7fQoKLyoqCiAqIFJldHVybnMgaWYgdGhlIHNwZWNpZmllZCBtb2R1bGUgaXMgYSBibG9jayBhbGdvcml0aG0gb3Igbm90CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LW1vZHVsZS1pcy1ibG9jay1hbGdvcml0aG0tbW9kZS5waHAKICogQHBhcmFtIHN0cmluZyAkbW9kZSA8cD4KICogVGhlIG1vZGUgdG8gY2hlY2suCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbGliX2RpciBbb3B0aW9uYWxdIDxwPgogKiBUaGUgb3B0aW9uYWwgbGliX2RpciBwYXJhbWV0ZXIgY2FuIGNvbnRhaW4gdGhlCiAqIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBhbGdvcml0aG0gbW9kdWxlIGlzIG9uIHRoZSBzeXN0ZW0uCiAqIDwvcD4KICogQHJldHVybiBib29sIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoZSBtb2RlIGlzIGZvciB1c2Ugd2l0aCBibG9jawogKiBhbGdvcml0aG1zLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4gKGUuZy4gZmFsc2UgZm9yIHN0cmVhbSwgYW5kCiAqIHRydWUgZm9yIGNiYywgY2ZiLCBvZmIpLgogKiBAcmVtb3ZlZCA3LjIKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzcuMScpXQpmdW5jdGlvbiBtY3J5cHRfbW9kdWxlX2lzX2Jsb2NrX2FsZ29yaXRobV9tb2RlKCRtb2RlLCAkbGliX2RpciA9IG51bGwpIHt9CgovKioKICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIGFsZ29yaXRobSBpcyBhIGJsb2NrIGFsZ29yaXRobQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1tb2R1bGUtaXMtYmxvY2stYWxnb3JpdGhtLnBocAogKiBAcGFyYW0gc3RyaW5nICRhbGdvcml0aG0gPHA+CiAqIFRoZSBhbGdvcml0aG0gdG8gY2hlY2suCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbGliX2RpciBbb3B0aW9uYWxdIDxwPgogKiBUaGUgb3B0aW9uYWwgbGliX2RpciBwYXJhbWV0ZXIgY2FuIGNvbnRhaW4gdGhlCiAqIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBhbGdvcml0aG0gbW9kdWxlIGlzIG9uIHRoZSBzeXN0ZW0uCiAqIDwvcD4KICogQHJldHVybiBib29sIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtIGlzIGEgYmxvY2sKICogYWxnb3JpdGhtLCBvciBmYWxzZSBpcyBpdCBpcyBhIHN0cmVhbSBhbGdvcml0aG0uCiAqIEByZW1vdmVkIDcuMgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNy4xJyldCmZ1bmN0aW9uIG1jcnlwdF9tb2R1bGVfaXNfYmxvY2tfYWxnb3JpdGhtKCRhbGdvcml0aG0sICRsaWJfZGlyID0gbnVsbCkge30KCi8qKgogKiBSZXR1cm5zIGlmIHRoZSBzcGVjaWZpZWQgbW9kZSBvdXRwdXRzIGJsb2NrcyBvciBub3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tY3J5cHQtbW9kdWxlLWlzLWJsb2NrLW1vZGUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG1vZGUgPHA+CiAqIFRoZSBtb2RlIHRvIGNoZWNrLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGxpYl9kaXIgW29wdGlvbmFsXSA8cD4KICogVGhlIG9wdGlvbmFsIGxpYl9kaXIgcGFyYW1ldGVyIGNhbiBjb250YWluIHRoZQogKiBsb2NhdGlvbiBvZiB3aGVyZSB0aGUgYWxnb3JpdGhtIG1vZHVsZSBpcyBvbiB0aGUgc3lzdGVtLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgbW9kZSBvdXRwdXRzIGJsb2NrcyBvZiBieXRlcyBvcgogKiBmYWxzZSBpZiBpdCBvdXRwdXRzIGp1c3QgYnl0ZXMuIChlLmcuIHRydWUgZm9yIGNiYyBhbmQgZWNiLCBhbmQKICogZmFsc2UgZm9yIGNmYiBhbmQgc3RyZWFtKS4KICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWNyeXB0X21vZHVsZV9pc19ibG9ja19tb2RlKCRtb2RlLCAkbGliX2RpciA9IG51bGwpIHt9CgovKioKICogUmV0dXJucyB0aGUgYmxvY2tzaXplIG9mIHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LW1vZHVsZS1nZXQtYWxnby1ibG9jay1zaXplLnBocAogKiBAcGFyYW0gc3RyaW5nICRhbGdvcml0aG0gPHA+CiAqIFRoZSBhbGdvcml0aG0gbmFtZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRsaWJfZGlyIFtvcHRpb25hbF0gPHA+CiAqIFRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIGNhbiBjb250YWluIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgbW9kZSBtb2R1bGUKICogaXMgb24gdGhlIHN5c3RlbS4KICogPC9wPgogKiBAcmV0dXJuIGludCB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgYWxnb3JpdGhtIHNwZWNpZmllZCBpbiBieXRlcy4KICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWNyeXB0X21vZHVsZV9nZXRfYWxnb19ibG9ja19zaXplKCRhbGdvcml0aG0sICRsaWJfZGlyID0gbnVsbCkge30KCi8qKgogKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBrZXlzaXplIG9mIHRoZSBvcGVuZWQgbW9kZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLm1jcnlwdC1tb2R1bGUtZ2V0LWFsZ28ta2V5LXNpemUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGFsZ29yaXRobSA8cD4KICogVGhlIGFsZ29yaXRobSBuYW1lLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGxpYl9kaXIgW29wdGlvbmFsXSA8cD4KICogVGhpcyBvcHRpb25hbCBwYXJhbWV0ZXIgY2FuIGNvbnRhaW4gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBtb2RlIG1vZHVsZQogKiBpcyBvbiB0aGUgc3lzdGVtLgogKiA8L3A+CiAqIEByZXR1cm4gaW50IFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQga2V5IHNpemUgb2YgdGhlCiAqIGFsZ29yaXRobSBzcGVjaWZpZWQgaW4gYnl0ZXMuCiAqIEByZW1vdmVkIDcuMgogKi8KI1tEZXByZWNhdGVkKHNpbmNlOiAnNy4xJyldCmZ1bmN0aW9uIG1jcnlwdF9tb2R1bGVfZ2V0X2FsZ29fa2V5X3NpemUoJGFsZ29yaXRobSwgJGxpYl9kaXIgPSBudWxsKSB7fQoKLyoqCiAqIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgc3VwcG9ydGVkIGtleXNpemVzIG9mIHRoZSBvcGVuZWQgYWxnb3JpdGhtCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ubWNyeXB0LW1vZHVsZS1nZXQtc3VwcG9ydGVkLWtleS1zaXplcy5waHAKICogQHBhcmFtIHN0cmluZyAkYWxnb3JpdGhtIDxwPgogKiBUaGUgYWxnb3JpdGhtIHRvIHVzZWQuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbGliX2RpciBbb3B0aW9uYWxdIDxwPgogKiBUaGUgb3B0aW9uYWwgbGliX2RpciBwYXJhbWV0ZXIgY2FuIGNvbnRhaW4gdGhlCiAqIGxvY2F0aW9uIG9mIHdoZXJlIHRoZSBhbGdvcml0aG0gbW9kdWxlIGlzIG9uIHRoZSBzeXN0ZW0uCiAqIDwvcD4KICogQHJldHVybiBhcnJheSBhbiBhcnJheSB3aXRoIHRoZSBrZXkgc2l6ZXMgc3VwcG9ydGVkIGJ5IHRoZSBzcGVjaWZpZWQgYWxnb3JpdGhtLgogKiBJZiBpdCByZXR1cm5zIGFuIGVtcHR5IGFycmF5IHRoZW4gYWxsIGtleSBzaXplcyBiZXR3ZWVuIDEgYW5kCiAqIG1jcnlwdF9tb2R1bGVfZ2V0X2FsZ29fa2V5X3NpemUgYXJlIHN1cHBvcnRlZCBieSB0aGUKICogYWxnb3JpdGhtLgogKiBAcmVtb3ZlZCA3LjIKICovCiNbRGVwcmVjYXRlZChzaW5jZTogJzcuMScpXQpmdW5jdGlvbiBtY3J5cHRfbW9kdWxlX2dldF9zdXBwb3J0ZWRfa2V5X3NpemVzKCRhbGdvcml0aG0sICRsaWJfZGlyID0gbnVsbCkge30KCi8qKgogKiBDbG9zZXMgdGhlIG1jcnlwdCBtb2R1bGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tY3J5cHQtbW9kdWxlLWNsb3NlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHRkIDxwPgogKiBUaGUgZW5jcnlwdGlvbiBkZXNjcmlwdG9yLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICogQHJlbW92ZWQgNy4yCiAqLwojW0RlcHJlY2F0ZWQoc2luY2U6ICc3LjEnKV0KZnVuY3Rpb24gbWNyeXB0X21vZHVsZV9jbG9zZSgkdGQpIHt9CgovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfRU5DUllQVCcsIDApOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfREVDUllQVCcsIDEpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfREVWX1JBTkRPTScsIDApOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfREVWX1VSQU5ET00nLCAxKTsKLyoqCiAqIEBkZXByZWNhdGVkIDcuMQogKiBAcmVtb3ZlZCA3LjIKICovCmRlZmluZSgnTUNSWVBUX1JBTkQnLCAyKTsKLyoqCiAqIEBkZXByZWNhdGVkIDcuMQogKiBAcmVtb3ZlZCA3LjIKICovCmRlZmluZSgnTUNSWVBUXzNERVMnLCAidHJpcGxlZGVzIik7Ci8qKgogKiBAZGVwcmVjYXRlZCA3LjEKICogQHJlbW92ZWQgNy4yCiAqLwpkZWZpbmUoJ01DUllQVF9BUkNGT1VSX0lWJywgImFyY2ZvdXItaXYiKTsKLyoqCiAqIEBkZXByZWNhdGVkIDcuMQogKiBAcmVtb3ZlZCA3LjIKICovCmRlZmluZSgnTUNSWVBUX0FSQ0ZPVVInLCAiYXJjZm91ciIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfQkxPV0ZJU0gnLCAiYmxvd2Zpc2giKTsKZGVmaW5lKCdNQ1JZUFRfQkxPV0ZJU0hfQ09NUEFUJywgImJsb3dmaXNoLWNvbXBhdCIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfQ0FTVF8xMjgnLCAiY2FzdC0xMjgiKTsKLyoqCiAqIEBkZXByZWNhdGVkIDcuMQogKiBAcmVtb3ZlZCA3LjIKICovCmRlZmluZSgnTUNSWVBUX0NBU1RfMjU2JywgImNhc3QtMjU2Iik7Ci8qKgogKiBAZGVwcmVjYXRlZCA3LjEKICogQHJlbW92ZWQgNy4yCiAqLwpkZWZpbmUoJ01DUllQVF9DUllQVCcsICJjcnlwdCIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfREVTJywgImRlcyIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfREVTX0NPTVBBVCcsICJkZXMtY29tcGF0Iik7Ci8qKgogKiBAZGVwcmVjYXRlZCA3LjEKICogQHJlbW92ZWQgNy4yCiAqLwpkZWZpbmUoJ01DUllQVF9FTklHTkEnLCAiY3J5cHQiKTsKLyoqCiAqIEBkZXByZWNhdGVkIDcuMQogKiBAcmVtb3ZlZCA3LjIKICovCmRlZmluZSgnTUNSWVBUX0dPU1QnLCAiZ29zdCIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfTE9LSTk3JywgImxva2k5NyIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfUEFOQU1BJywgInBhbmFtYSIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfUkMyJywgInJjMiIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfUkM0JywgInJjNCIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfUklKTkRBRUxfMTI4JywgInJpam5kYWVsLTEyOCIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfUklKTkRBRUxfMTkyJywgInJpam5kYWVsLTE5MiIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfUklKTkRBRUxfMjU2JywgInJpam5kYWVsLTI1NiIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfU0FGRVI2NCcsICJzYWZlci1zazY0Iik7Ci8qKgogKiBAZGVwcmVjYXRlZCA3LjEKICogQHJlbW92ZWQgNy4yCiAqLwpkZWZpbmUoJ01DUllQVF9TQUZFUjEyOCcsICJzYWZlci1zazEyOCIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfU0FGRVJQTFVTJywgInNhZmVycGx1cyIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfU0VSUEVOVCcsICJzZXJwZW50Iik7Ci8qKgogKiBAZGVwcmVjYXRlZCA3LjEKICogQHJlbW92ZWQgNy4yCiAqLwpkZWZpbmUoJ01DUllQVF9TRVJQRU5UXzEyOCcsICJzZXJwZW50LTEyOCIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfU0VSUEVOVF8xOTInLCAic2VycGVudC0xOTIiKTsKLyoqCiAqIEBkZXByZWNhdGVkIDcuMQogKiBAcmVtb3ZlZCA3LjIKICovCmRlZmluZSgnTUNSWVBUX1NFUlBFTlRfMjU2JywgInNlcnBlbnQtMjU2Iik7Ci8qKgogKiBAZGVwcmVjYXRlZCA3LjEKICogQHJlbW92ZWQgNy4yCiAqLwpkZWZpbmUoJ01DUllQVF9USFJFRVdBWScsICJ0aHJlZXdheSIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfVFJJUExFREVTJywgInRyaXBsZWRlcyIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfVFdPRklTSCcsICJ0d29maXNoIik7Ci8qKgogKiBAZGVwcmVjYXRlZCA3LjEKICogQHJlbW92ZWQgNy4yCiAqLwpkZWZpbmUoJ01DUllQVF9XQUtFJywgIndha2UiKTsKLyoqCiAqIEBkZXByZWNhdGVkIDcuMQogKiBAcmVtb3ZlZCA3LjIKICovCmRlZmluZSgnTUNSWVBUX1hURUEnLCAieHRlYSIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfSURFQScsICJpZGVhIik7Ci8qKgogKiBAZGVwcmVjYXRlZCA3LjEKICogQHJlbW92ZWQgNy4yCiAqLwpkZWZpbmUoJ01DUllQVF9NQVJTJywgIm1hcnMiKTsKLyoqCiAqIEBkZXByZWNhdGVkIDcuMQogKiBAcmVtb3ZlZCA3LjIKICovCmRlZmluZSgnTUNSWVBUX1JDNicsICJyYzYiKTsKLyoqCiAqIEBkZXByZWNhdGVkIDcuMQogKiBAcmVtb3ZlZCA3LjIKICovCmRlZmluZSgnTUNSWVBUX1JDNl8xMjgnLCAicmM2LTEyOCIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfUkM2XzE5MicsICJyYzYtMTkyIik7Ci8qKgogKiBAZGVwcmVjYXRlZCA3LjEKICogQHJlbW92ZWQgNy4yCiAqLwpkZWZpbmUoJ01DUllQVF9SQzZfMjU2JywgInJjNi0yNTYiKTsKLyoqCiAqIEBkZXByZWNhdGVkIDcuMQogKiBAcmVtb3ZlZCA3LjIKICovCmRlZmluZSgnTUNSWVBUX1NLSVBKQUNLJywgInNraXBqYWNrIik7Ci8qKgogKiBAZGVwcmVjYXRlZCA3LjEKICogQHJlbW92ZWQgNy4yCiAqLwpkZWZpbmUoJ01DUllQVF9NT0RFX0NCQycsICJjYmMiKTsKLyoqCiAqIEBkZXByZWNhdGVkIDcuMQogKiBAcmVtb3ZlZCA3LjIKICovCmRlZmluZSgnTUNSWVBUX01PREVfQ0ZCJywgImNmYiIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfTU9ERV9FQ0InLCAiZWNiIik7Ci8qKgogKiBAZGVwcmVjYXRlZCA3LjEKICogQHJlbW92ZWQgNy4yCiAqLwpkZWZpbmUoJ01DUllQVF9NT0RFX05PRkInLCAibm9mYiIpOwovKioKICogQGRlcHJlY2F0ZWQgNy4xCiAqIEByZW1vdmVkIDcuMgogKi8KZGVmaW5lKCdNQ1JZUFRfTU9ERV9PRkInLCAib2ZiIik7Ci8qKgogKiBAZGVwcmVjYXRlZCA3LjEKICogQHJlbW92ZWQgNy4yCiAqLwpkZWZpbmUoJ01DUllQVF9NT0RFX1NUUkVBTScsICJzdHJlYW0iKTsKCi8vIEVuZCBvZiBtY3J5cHQgdi4KPD9waHAKCi8vIFN0YXJ0IG9mIHhtbHJlYWRlciB2LjAuMgp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcVGVudGF0aXZlVHlwZTsKCi8qKgogKiBUaGUgWE1MUmVhZGVyIGV4dGVuc2lvbiBpcyBhbiBYTUwgUHVsbCBwYXJzZXIuIFRoZSByZWFkZXIgYWN0cyBhcyBhCiAqIGN1cnNvciBnb2luZyBmb3J3YXJkIG9uIHRoZSBkb2N1bWVudCBzdHJlYW0gYW5kIHN0b3BwaW5nIGF0IGVhY2ggbm9kZQogKiBvbiB0aGUgd2F5LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnhtbHJlYWRlci5waHAKICoKICogQHByb3BlcnR5LXJlYWQgaW50ICRhdHRyaWJ1dGVDb3VudCBUaGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgb24gdGhlIG5vZGUKICogQHByb3BlcnR5LXJlYWQgc3RyaW5nICRiYXNlVVJJIFRoZSBiYXNlIFVSSSBvZiB0aGUgbm9kZQogKiBAcHJvcGVydHktcmVhZCBpbnQgJGRlcHRoIERlcHRoIG9mIHRoZSBub2RlIGluIHRoZSB0cmVlLCBzdGFydGluZyBhdCAwCiAqIEBwcm9wZXJ0eS1yZWFkIGJvb2wgJGhhc0F0dHJpYnV0ZXMgSW5kaWNhdGVzIGlmIG5vZGUgaGFzIGF0dHJpYnV0ZXMKICogQHByb3BlcnR5LXJlYWQgYm9vbCAkaGFzVmFsdWUgSW5kaWNhdGVzIGlmIG5vZGUgaGFzIGEgdGV4dCB2YWx1ZQogKiBAcHJvcGVydHktcmVhZCBib29sICRpc0RlZmF1bHQgSW5kaWNhdGVzIGlmIGF0dHJpYnV0ZSBpcyBkZWZhdWx0ZWQgZnJvbSBEVEQKICogQHByb3BlcnR5LXJlYWQgYm9vbCAkaXNFbXB0eUVsZW1lbnQgSW5kaWNhdGVzIGlmIG5vZGUgaXMgYW4gZW1wdHkgZWxlbWVudCB0YWcKICogQHByb3BlcnR5LXJlYWQgc3RyaW5nICRsb2NhbE5hbWUgVGhlIGxvY2FsIG5hbWUgb2YgdGhlIG5vZGUKICogQHByb3BlcnR5LXJlYWQgc3RyaW5nICRuYW1lIFRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbm9kZQogKiBAcHJvcGVydHktcmVhZCBzdHJpbmcgJG5hbWVzcGFjZVVSSSBUaGUgVVJJIG9mIHRoZSBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlCiAqIEBwcm9wZXJ0eS1yZWFkIGludCAkbm9kZVR5cGUgVGhlIG5vZGUgdHlwZSBmb3IgdGhlIG5vZGUKICogQHByb3BlcnR5LXJlYWQgc3RyaW5nICRwcmVmaXggVGhlIHByZWZpeCBvZiB0aGUgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZQogKiBAcHJvcGVydHktcmVhZCBzdHJpbmcgJHZhbHVlIFRoZSB0ZXh0IHZhbHVlIG9mIHRoZSBub2RlCiAqIEBwcm9wZXJ0eS1yZWFkIHN0cmluZyAkeG1sTGFuZyBUaGUgeG1sOmxhbmcgc2NvcGUgd2hpY2ggdGhlIG5vZGUgcmVzaWRlcwogKi8KY2xhc3MgWE1MUmVhZGVyCnsKICAgIC8qKgogICAgICogVGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIG9uIHRoZSBub2RlCiAgICAgKiBAdmFyIGludAogICAgICogQHJlYWRvbmx5CiAgICAgKi8KICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMScpXQogICAgcHVibGljICRhdHRyaWJ1dGVDb3VudDsKCiAgICAvKioKICAgICAqIFRoZSBiYXNlIFVSSSBvZiB0aGUgbm9kZQogICAgICogQHZhciBzdHJpbmcKICAgICAqIEByZWFkb25seQogICAgICovCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjEnKV0KICAgIHB1YmxpYyAkYmFzZVVSSTsKCiAgICAvKioKICAgICAqIERlcHRoIG9mIHRoZSBub2RlIGluIHRoZSB0cmVlLCBzdGFydGluZyBhdCAwCiAgICAgKiBAdmFyIGludAogICAgICogQHJlYWRvbmx5CiAgICAgKi8KICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMScpXQogICAgcHVibGljICRkZXB0aDsKCiAgICAvKioKICAgICAqIEluZGljYXRlcyBpZiBub2RlIGhhcyBhdHRyaWJ1dGVzCiAgICAgKiBAdmFyIGJvb2wKICAgICAqIEByZWFkb25seQogICAgICovCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjEnKV0KICAgIHB1YmxpYyAkaGFzQXR0cmlidXRlczsKCiAgICAvKioKICAgICAqIEluZGljYXRlcyBpZiBub2RlIGhhcyBhIHRleHQgdmFsdWUKICAgICAqIEB2YXIgYm9vbAogICAgICogQHJlYWRvbmx5CiAgICAgKi8KICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMScpXQogICAgcHVibGljICRoYXNWYWx1ZTsKCiAgICAvKioKICAgICAqIEluZGljYXRlcyBpZiBhdHRyaWJ1dGUgaXMgZGVmYXVsdGVkIGZyb20gRFRECiAgICAgKiBAdmFyIGJvb2wKICAgICAqIEByZWFkb25seQogICAgICovCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjEnKV0KICAgIHB1YmxpYyAkaXNEZWZhdWx0OwoKICAgIC8qKgogICAgICogSW5kaWNhdGVzIGlmIG5vZGUgaXMgYW4gZW1wdHkgZWxlbWVudCB0YWcKICAgICAqIEB2YXIgYm9vbAogICAgICogQHJlYWRvbmx5CiAgICAgKi8KICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMScpXQogICAgcHVibGljICRpc0VtcHR5RWxlbWVudDsKCiAgICAvKioKICAgICAqIFRoZSBsb2NhbCBuYW1lIG9mIHRoZSBub2RlCiAgICAgKiBAdmFyIHN0cmluZwogICAgICogQHJlYWRvbmx5CiAgICAgKi8KICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMScpXQogICAgcHVibGljICRsb2NhbE5hbWU7CgogICAgLyoqCiAgICAgKiBUaGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG5vZGUKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKiBAcmVhZG9ubHkKICAgICAqLwogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4xJyldCiAgICBwdWJsaWMgJG5hbWU7CgogICAgLyoqCiAgICAgKiBUaGUgVVJJIG9mIHRoZSBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlCiAgICAgKiBAdmFyIHN0cmluZwogICAgICogQHJlYWRvbmx5CiAgICAgKi8KICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMScpXQogICAgcHVibGljICRuYW1lc3BhY2VVUkk7CgogICAgLyoqCiAgICAgKiBUaGUgbm9kZSB0eXBlIGZvciB0aGUgbm9kZQogICAgICogQHZhciBpbnQKICAgICAqIEByZWFkb25seQogICAgICovCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjEnKV0KICAgIHB1YmxpYyAkbm9kZVR5cGU7CgogICAgLyoqCiAgICAgKiBUaGUgcHJlZml4IG9mIHRoZSBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlCiAgICAgKiBAdmFyIHN0cmluZwogICAgICogQHJlYWRvbmx5CiAgICAgKi8KICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMScpXQogICAgcHVibGljICRwcmVmaXg7CgogICAgLyoqCiAgICAgKiBUaGUgdGV4dCB2YWx1ZSBvZiB0aGUgbm9kZQogICAgICogQHZhciBzdHJpbmcKICAgICAqIEByZWFkb25seQogICAgICovCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjEnKV0KICAgIHB1YmxpYyAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBUaGUgeG1sOmxhbmcgc2NvcGUgd2hpY2ggdGhlIG5vZGUgcmVzaWRlcwogICAgICogQHZhciBzdHJpbmcKICAgICAqIEByZWFkb25seQogICAgICovCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjEnKV0KICAgIHB1YmxpYyAkeG1sTGFuZzsKCiAgICAvKioKICAgICAqIE5vIG5vZGUgdHlwZQogICAgICovCiAgICBwdWJsaWMgY29uc3QgTk9ORSA9IDA7CgogICAgLyoqCiAgICAgKiBTdGFydCBlbGVtZW50CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFTEVNRU5UID0gMTsKCiAgICAvKioKICAgICAqIEF0dHJpYnV0ZSBub2RlCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBBVFRSSUJVVEUgPSAyOwoKICAgIC8qKgogICAgICogVGV4dCBub2RlCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBURVhUID0gMzsKCiAgICAvKioKICAgICAqIENEQVRBIG5vZGUKICAgICAqLwogICAgcHVibGljIGNvbnN0IENEQVRBID0gNDsKCiAgICAvKioKICAgICAqIEVudGl0eSBSZWZlcmVuY2Ugbm9kZQogICAgICovCiAgICBwdWJsaWMgY29uc3QgRU5USVRZX1JFRiA9IDU7CgogICAgLyoqCiAgICAgKiBFbnRpdHkgRGVjbGFyYXRpb24gbm9kZQogICAgICovCiAgICBwdWJsaWMgY29uc3QgRU5USVRZID0gNjsKCiAgICAvKioKICAgICAqIFByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb24gbm9kZQogICAgICovCiAgICBwdWJsaWMgY29uc3QgUEkgPSA3OwoKICAgIC8qKgogICAgICogQ29tbWVudCBub2RlCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDT01NRU5UID0gODsKCiAgICAvKioKICAgICAqIERvY3VtZW50IG5vZGUKICAgICAqLwogICAgcHVibGljIGNvbnN0IERPQyA9IDk7CgogICAgLyoqCiAgICAgKiBEb2N1bWVudCBUeXBlIG5vZGUKICAgICAqLwogICAgcHVibGljIGNvbnN0IERPQ19UWVBFID0gMTA7CgogICAgLyoqCiAgICAgKiBEb2N1bWVudCBGcmFnbWVudCBub2RlCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBET0NfRlJBR01FTlQgPSAxMTsKCiAgICAvKioKICAgICAqIE5vdGF0aW9uIG5vZGUKICAgICAqLwogICAgcHVibGljIGNvbnN0IE5PVEFUSU9OID0gMTI7CgogICAgLyoqCiAgICAgKiBXaGl0ZXNwYWNlIG5vZGUKICAgICAqLwogICAgcHVibGljIGNvbnN0IFdISVRFU1BBQ0UgPSAxMzsKCiAgICAvKioKICAgICAqIFNpZ25pZmljYW50IFdoaXRlc3BhY2Ugbm9kZQogICAgICovCiAgICBwdWJsaWMgY29uc3QgU0lHTklGSUNBTlRfV0hJVEVTUEFDRSA9IDE0OwoKICAgIC8qKgogICAgICogRW5kIEVsZW1lbnQKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVORF9FTEVNRU5UID0gMTU7CgogICAgLyoqCiAgICAgKiBFbmQgRW50aXR5CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFTkRfRU5USVRZID0gMTY7CgogICAgLyoqCiAgICAgKiBYTUwgRGVjbGFyYXRpb24gbm9kZQogICAgICovCiAgICBwdWJsaWMgY29uc3QgWE1MX0RFQ0xBUkFUSU9OID0gMTc7CgogICAgLyoqCiAgICAgKiBMb2FkIERURCBidXQgZG8gbm90IHZhbGlkYXRlCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBMT0FERFREID0gMTsKCiAgICAvKioKICAgICAqIExvYWQgRFREIGFuZCBkZWZhdWx0IGF0dHJpYnV0ZXMgYnV0IGRvIG5vdCB2YWxpZGF0ZQogICAgICovCiAgICBwdWJsaWMgY29uc3QgREVGQVVMVEFUVFJTID0gMjsKCiAgICAvKioKICAgICAqIExvYWQgRFREIGFuZCB2YWxpZGF0ZSB3aGlsZSBwYXJzaW5nCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBWQUxJREFURSA9IDM7CgogICAgLyoqCiAgICAgKiBTdWJzdGl0dXRlIGVudGl0aWVzIGFuZCBleHBhbmQgcmVmZXJlbmNlcwogICAgICovCiAgICBwdWJsaWMgY29uc3QgU1VCU1RfRU5USVRJRVMgPSA0OwoKICAgIC8qKgogICAgICogQ2xvc2UgdGhlIFhNTFJlYWRlciBpbnB1dAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94bWxyZWFkZXIuY2xvc2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjQnID0+ICd0cnVlJ10sIGRlZmF1bHQ6ICdib29sJyldCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKSB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSB2YWx1ZSBvZiBhIG5hbWVkIGF0dHJpYnV0ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94bWxyZWFkZXIuZ2V0YXR0cmlidXRlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICAgICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLCBvciA8Yj5OVUxMPC9iPiBpZiBubyBhdHRyaWJ1dGUgd2l0aCB0aGUgZ2l2ZW4KICAgICAqIDxpPm5hbWU8L2k+IGlzIGZvdW5kIG9yIG5vdCBwb3NpdGlvbmVkIG9uIGFuIGVsZW1lbnQgbm9kZS4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lKTogP3N0cmluZyB7fQoKICAgIC8qKgogICAgICogR2V0IHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgYnkgaW5kZXgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veG1scmVhZGVyLmdldGF0dHJpYnV0ZW5vLnBocAogICAgICogQHBhcmFtIGludCAkaW5kZXggPHA+CiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUsIG9yIDxiPk5VTEw8L2I+IGlmIG5vIGF0dHJpYnV0ZSBleGlzdHMKICAgICAqIGF0IDxpPmluZGV4PC9pPiBvciBub3QgcG9zaXRpb25lZCBvZiBlbGVtZW50LgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVObygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkaW5kZXgpOiA/c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBieSBsb2NhbG5hbWUgYW5kIFVSSQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94bWxyZWFkZXIuZ2V0YXR0cmlidXRlbnMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogICAgICogVGhlIGxvY2FsIG5hbWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2UgPHA+CiAgICAgKiBUaGUgbmFtZXNwYWNlIFVSSS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUsIG9yIDxiPk5VTEw8L2I+IGlmIG5vIGF0dHJpYnV0ZSB3aXRoIHRoZQogICAgICogZ2l2ZW4gPGk+bG9jYWxOYW1lPC9pPiBhbmQKICAgICAqIDxpPm5hbWVzcGFjZVVSSTwvaT4gaXMgZm91bmQgb3Igbm90IHBvc2l0aW9uZWQgb2YgZWxlbWVudC4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlTnMoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWVzcGFjZQogICAgKTogP3N0cmluZyB7fQoKICAgIC8qKgogICAgICogSW5kaWNhdGVzIGlmIHNwZWNpZmllZCBwcm9wZXJ0eSBoYXMgYmVlbiBzZXQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veG1scmVhZGVyLmdldHBhcnNlcnByb3BlcnR5LnBocAogICAgICogQHBhcmFtIGludCAkcHJvcGVydHkgPHA+CiAgICAgKiBPbmUgb2YgdGhlIHBhcnNlciBvcHRpb24KICAgICAqIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXJzZXJQcm9wZXJ0eSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkcHJvcGVydHkpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHBhcnNlZCBkb2N1bWVudCBpcyB2YWxpZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94bWxyZWFkZXIuaXN2YWxpZC5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1ZhbGlkKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIExvb2t1cCBuYW1lc3BhY2UgZm9yIGEgcHJlZml4CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3htbHJlYWRlci5sb29rdXBuYW1lc3BhY2UucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwcmVmaXggPHA+CiAgICAgKiBTdHJpbmcgY29udGFpbmluZyB0aGUgcHJlZml4LgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBsb29rdXBOYW1lc3BhY2UoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHByZWZpeCk6ID9zdHJpbmcge30KCiAgICAvKioKICAgICAqIE1vdmUgY3Vyc29yIHRvIGFuIGF0dHJpYnV0ZSBieSBpbmRleAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94bWxyZWFkZXIubW92ZXRvYXR0cmlidXRlbm8ucGhwCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCA8cD4KICAgICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgYXR0cmlidXRlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG1vdmVUb0F0dHJpYnV0ZU5vKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRpbmRleCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIE1vdmUgY3Vyc29yIHRvIGEgbmFtZWQgYXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3htbHJlYWRlci5tb3ZldG9hdHRyaWJ1dGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogICAgICogVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBtb3ZlVG9BdHRyaWJ1dGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBNb3ZlIGN1cnNvciB0byBhIG5hbWVkIGF0dHJpYnV0ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94bWxyZWFkZXIubW92ZXRvYXR0cmlidXRlbnMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogICAgICogVGhlIGxvY2FsIG5hbWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2UgPHA+CiAgICAgKiBUaGUgbmFtZXNwYWNlIFVSSS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBtb3ZlVG9BdHRyaWJ1dGVOcygKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZXNwYWNlCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBQb3NpdGlvbiBjdXJzb3Igb24gdGhlIHBhcmVudCBFbGVtZW50IG9mIGN1cnJlbnQgQXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3htbHJlYWRlci5tb3ZldG9lbGVtZW50LnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IGlmIHN1Y2Nlc3NmdWwgYW5kIDxiPkZBTFNFPC9iPiBpZiBpdCBmYWlscyBvciBub3QgcG9zaXRpb25lZCBvbgogICAgICogQXR0cmlidXRlIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBtb3ZlVG9FbGVtZW50KCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFBvc2l0aW9uIGN1cnNvciBvbiB0aGUgZmlyc3QgQXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3htbHJlYWRlci5tb3ZldG9maXJzdGF0dHJpYnV0ZS5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogQHNpbmNlIDUuMS4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBtb3ZlVG9GaXJzdEF0dHJpYnV0ZSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBQb3NpdGlvbiBjdXJzb3Igb24gdGhlIG5leHQgQXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3htbHJlYWRlci5tb3ZldG9uZXh0YXR0cmlidXRlLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG1vdmVUb05leHRBdHRyaWJ1dGUoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBVUkkgY29udGFpbmluZyB0aGUgWE1MIHRvIHBhcnNlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3htbHJlYWRlci5vcGVuLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkdXJpIDxwPgogICAgICogVVJJIHBvaW50aW5nIHRvIHRoZSBkb2N1bWVudC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY29kaW5nIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZG9jdW1lbnQgZW5jb2Rpbmcgb3IgPGI+TlVMTDwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogICAgICogQSBiaXRtYXNrIG9mIHRoZSBMSUJYTUxfKgogICAgICogY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBYTUxSZWFkZXJ8Ym9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLiBJZiBjYWxsZWQgc3RhdGljYWxseSwgcmV0dXJucyBhbgogICAgICogPGI+WE1MUmVhZGVyPC9iPiBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9wZW4oCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHVyaSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRlbmNvZGluZyA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gMAogICAgKSB7fQoKICAgIC8qKgogICAgICogTW92ZSB0byBuZXh0IG5vZGUgaW4gZG9jdW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veG1scmVhZGVyLnJlYWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBNb3ZlIGN1cnNvciB0byBuZXh0IG5vZGUgc2tpcHBpbmcgYWxsIHN1YnRyZWVzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3htbHJlYWRlci5uZXh0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIG5hbWUgb2YgdGhlIG5leHQgbm9kZSB0byBtb3ZlIHRvLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG5leHQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbmFtZSA9IG51bGwpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBYTUwgZnJvbSBjdXJyZW50IG5vZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veG1scmVhZGVyLnJlYWRpbm5lcnhtbC5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgY3VycmVudCBub2RlIGFzIGEgc3RyaW5nLiBFbXB0eSBzdHJpbmcgb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRJbm5lclhtbCgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIFhNTCBmcm9tIGN1cnJlbnQgbm9kZSwgaW5jbHVkaW5nIGl0IHNlbGYKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veG1scmVhZGVyLnJlYWRvdXRlcnhtbC5waHAKICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBjb250ZW50cyBvZiBjdXJyZW50IG5vZGUsIGluY2x1ZGluZyBpdHNlbGYsIGFzIGEgc3RyaW5nLiBFbXB0eSBzdHJpbmcgb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJlYWRPdXRlclhtbCgpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIFJlYWRzIHRoZSBjb250ZW50cyBvZiB0aGUgY3VycmVudCBub2RlIGFzIGEgc3RyaW5nCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3htbHJlYWRlci5yZWFkc3RyaW5nLnBocAogICAgICogQHJldHVybiBzdHJpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgbm9kZSBhcyBhIHN0cmluZy4gRW1wdHkgc3RyaW5nIG9uCiAgICAgKiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZFN0cmluZygpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIFZhbGlkYXRlIGRvY3VtZW50IGFnYWluc3QgWFNECiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3htbHJlYWRlci5zZXRzY2hlbWEucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICAgICAqIFRoZSBmaWxlbmFtZSBvZiB0aGUgWFNEIHNjaGVtYS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U2NoZW1hKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGZpbGVuYW1lKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogU2V0IHBhcnNlciBvcHRpb25zCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3htbHJlYWRlci5zZXRwYXJzZXJwcm9wZXJ0eS5waHAKICAgICAqIEBwYXJhbSBpbnQgJHByb3BlcnR5IDxwPgogICAgICogT25lIG9mIHRoZSBwYXJzZXIgb3B0aW9uCiAgICAgKiBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkdmFsdWUgPHA+CiAgICAgKiBJZiBzZXQgdG8gPGI+VFJVRTwvYj4gdGhlIG9wdGlvbiB3aWxsIGJlIGVuYWJsZWQgb3RoZXJ3aXNlIHdpbGwKICAgICAqIGJlIGRpc2FibGVkLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldFBhcnNlclByb3BlcnR5KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRwcm9wZXJ0eSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJHZhbHVlCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGZpbGVuYW1lIG9yIFVSSSBmb3IgYSBSZWxheE5HIFNjaGVtYQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94bWxyZWFkZXIuc2V0cmVsYXhuZ3NjaGVtYS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIDxwPgogICAgICogZmlsZW5hbWUgb3IgVVJJIHBvaW50aW5nIHRvIGEgUmVsYXhORyBTY2hlbWEuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldFJlbGF4TkdTY2hlbWEoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkZmlsZW5hbWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGRhdGEgY29udGFpbmluZyBhIFJlbGF4TkcgU2NoZW1hCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3htbHJlYWRlci5zZXRyZWxheG5nc2NoZW1hc291cmNlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc291cmNlIDxwPgogICAgICogU3RyaW5nIGNvbnRhaW5pbmcgdGhlIFJlbGF4TkcgU2NoZW1hLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldFJlbGF4TkdTY2hlbWFTb3VyY2UoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkc291cmNlKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBkYXRhIGNvbnRhaW5pbmcgdGhlIFhNTCB0byBwYXJzZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi94bWxyZWFkZXIueG1sLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc291cmNlIDxwPgogICAgICogU3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCB0byBiZSBwYXJzZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZyBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGRvY3VtZW50IGVuY29kaW5nIG9yIDxiPk5VTEw8L2I+LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICAgICAqIEEgYml0bWFzayBvZiB0aGUgTElCWE1MXyoKICAgICAqIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gWE1MUmVhZGVyfGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4gSWYgY2FsbGVkIHN0YXRpY2FsbHksIHJldHVybnMgYW4KICAgICAqIDxiPlhNTFJlYWRlcjwvYj4gb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNS4xLjIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBYTUwoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHNvdXJjZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRlbmNvZGluZyA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gMAogICAgKSB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgbm9kZSBhcyBhIERPTSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4veG1scmVhZGVyLmV4cGFuZC5waHAKICAgICAqIEBwYXJhbSBudWxsfERPTU5vZGUgJGJhc2VOb2RlIFtvcHRpb25hbF0KICAgICAqIEByZXR1cm4gRE9NTm9kZXxmYWxzZSBUaGUgcmVzdWx0aW5nIDxiPkRPTU5vZGU8L2I+IG9yIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICAgICAqIEBzaW5jZSA1LjEuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwYW5kKAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdET01Ob2RlfG51bGwnXSwgZGVmYXVsdDogJycpXSAkYmFzZU5vZGUgPSBudWxsCiAgICApOiBET01Ob2RlfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC40CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbVVyaShzdHJpbmcgJHVyaSwgP3N0cmluZyAkZW5jb2RpbmcgPSBudWxsLCBpbnQgJGZsYWdzID0gMCk6IHN0YXRpYyB7fQoKICAgIC8qKgogICAgICogQHNpbmNlIDguNAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21TdHJlYW0oJHN0cmVhbSwgP3N0cmluZyAkZW5jb2RpbmcgPSBudWxsLCBpbnQgJGZsYWdzID0gMCwgP3N0cmluZyAkZG9jdW1lbnRVcmkgPSBudWxsKTogc3RhdGljIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC40CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbVN0cmluZyhzdHJpbmcgJHNvdXJjZSwgP3N0cmluZyAkZW5jb2RpbmcgPSBudWxsLCBpbnQgJGZsYWdzID0gMCk6IHN0YXRpYyB7fQp9Ci8vIEVuZCBvZiB4bWxyZWFkZXIgdi4wLjIKPD9waHAKCi8vIFN0YXJ0IG9mIHppcCB2LjEuMTQuMAp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXERlcHJlY2F0ZWQ7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cSW50ZXJuYWxcTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxUZW50YXRpdmVUeXBlOwoKLyoqCiAqIEEgZmlsZSBhcmNoaXZlLCBjb21wcmVzc2VkIHdpdGggWmlwLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLnppcGFyY2hpdmUucGhwCiAqLwpjbGFzcyBaaXBBcmNoaXZlIGltcGxlbWVudHMgQ291bnRhYmxlCnsKICAgIC8qKgogICAgICogWmlwIGxpYnJhcnkgdmVyc2lvbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICogQHNpbmNlIDcuNC4zCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBMSUJaSVBfVkVSU0lPTiA9ICcxLjcuMyc7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgdGhlIGFyY2hpdmUgaWYgaXQgZG9lcyBub3QgZXhpc3QuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDUkVBVEUgPSAxOwoKICAgIC8qKgogICAgICogRXJyb3IgaWYgYXJjaGl2ZSBhbHJlYWR5IGV4aXN0cy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVYQ0wgPSAyOwoKICAgIC8qKgogICAgICogUGVyZm9ybSBhZGRpdGlvbmFsIGNvbnNpc3RlbmN5IGNoZWNrcyBvbiB0aGUgYXJjaGl2ZSwgYW5kIGVycm9yIGlmIHRoZXkgZmFpbC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IENIRUNLQ09OUyA9IDQ7CgogICAgLyoqCiAgICAgKiBBbHdheXMgc3RhcnQgYSBuZXcgYXJjaGl2ZSwgdGhpcyBtb2RlIHdpbGwgb3ZlcndyaXRlIHRoZSBmaWxlIGlmCiAgICAgKiBpdCBhbHJlYWR5IGV4aXN0cy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9WRVJXUklURSA9IDg7CgogICAgLyoqCiAgICAgKiBJZ25vcmUgY2FzZSBvbiBuYW1lIGxvb2t1cAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkxfTk9DQVNFID0gMTsKCiAgICAvKioKICAgICAqIElnbm9yZSBkaXJlY3RvcnkgY29tcG9uZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBGTF9OT0RJUiA9IDI7CgogICAgLyoqCiAgICAgKiBSZWFkIGNvbXByZXNzZWQgZGF0YQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkxfQ09NUFJFU1NFRCA9IDQ7CgogICAgLyoqCiAgICAgKiBVc2Ugb3JpZ2luYWwgZGF0YSwgaWdub3JpbmcgY2hhbmdlcy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEZMX1VOQ0hBTkdFRCA9IDg7CiAgICBwdWJsaWMgY29uc3QgRkxfUkVDT01QUkVTUyA9IDE2OwogICAgcHVibGljIGNvbnN0IEZMX0VOQ1JZUFRFRCA9IDMyOwogICAgcHVibGljIGNvbnN0IEZMX09WRVJXUklURSA9IDgxOTI7CiAgICBwdWJsaWMgY29uc3QgRkxfTE9DQUwgPSAyNTY7CiAgICBwdWJsaWMgY29uc3QgRkxfQ0VOVFJBTCA9IDUxMjsKICAgIHB1YmxpYyBjb25zdCBFTV9UUkFEX1BLV0FSRSA9IDE7CiAgICBwdWJsaWMgY29uc3QgRU1fVU5LTk9XTiA9IDY1NTM1OwoKICAgIC8qKgogICAgICogYmV0dGVyIG9mIGRlZmxhdGUgb3Igc3RvcmUuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDTV9ERUZBVUxUID0gLTE7CgogICAgLyoqCiAgICAgKiBzdG9yZWQgKHVuY29tcHJlc3NlZCkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDTV9TVE9SRSA9IDA7CgogICAgLyoqCiAgICAgKiBzaHJ1bmsKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IENNX1NIUklOSyA9IDE7CgogICAgLyoqCiAgICAgKiByZWR1Y2VkIHdpdGggZmFjdG9yIDEKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IENNX1JFRFVDRV8xID0gMjsKCiAgICAvKioKICAgICAqIHJlZHVjZWQgd2l0aCBmYWN0b3IgMgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ01fUkVEVUNFXzIgPSAzOwoKICAgIC8qKgogICAgICogcmVkdWNlZCB3aXRoIGZhY3RvciAzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDTV9SRURVQ0VfMyA9IDQ7CgogICAgLyoqCiAgICAgKiByZWR1Y2VkIHdpdGggZmFjdG9yIDQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IENNX1JFRFVDRV80ID0gNTsKCiAgICAvKioKICAgICAqIGltcGxvZGVkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDTV9JTVBMT0RFID0gNjsKCiAgICAvKioKICAgICAqIGRlZmxhdGVkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDTV9ERUZMQVRFID0gODsKCiAgICAvKioKICAgICAqIGRlZmxhdGU2NAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgQ01fREVGTEFURTY0ID0gOTsKCiAgICAvKioKICAgICAqIFBLV0FSRSBpbXBsb2RpbmcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IENNX1BLV0FSRV9JTVBMT0RFID0gMTA7CgogICAgLyoqCiAgICAgKiBCWklQMiBhbGdvcml0aG0KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IENNX0JaSVAyID0gMTI7CiAgICBwdWJsaWMgY29uc3QgQ01fTFpNQSA9IDE0OwogICAgcHVibGljIGNvbnN0IENNX1RFUlNFID0gMTg7CiAgICBwdWJsaWMgY29uc3QgQ01fTFo3NyA9IDE5OwogICAgcHVibGljIGNvbnN0IENNX1dBVlBBQ0sgPSA5NzsKICAgIHB1YmxpYyBjb25zdCBDTV9QUE1EID0gOTg7CgogICAgLyoqCiAgICAgKiBObyBlcnJvci4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSX09LID0gMDsKCiAgICAvKioKICAgICAqIE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUl9NVUxUSURJU0sgPSAxOwoKICAgIC8qKgogICAgICogUmVuYW1pbmcgdGVtcG9yYXJ5IGZpbGUgZmFpbGVkLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJfUkVOQU1FID0gMjsKCiAgICAvKioKICAgICAqIENsb3NpbmcgemlwIGFyY2hpdmUgZmFpbGVkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUl9DTE9TRSA9IDM7CgogICAgLyoqCiAgICAgKiBTZWVrIGVycm9yCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUl9TRUVLID0gNDsKCiAgICAvKioKICAgICAqIFJlYWQgZXJyb3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSX1JFQUQgPSA1OwoKICAgIC8qKgogICAgICogV3JpdGUgZXJyb3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSX1dSSVRFID0gNjsKCiAgICAvKioKICAgICAqIENSQyBlcnJvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJfQ1JDID0gNzsKCiAgICAvKioKICAgICAqIENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJfWklQQ0xPU0VEID0gODsKCiAgICAvKioKICAgICAqIE5vIHN1Y2ggZmlsZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSX05PRU5UID0gOTsKCiAgICAvKioKICAgICAqIEZpbGUgYWxyZWFkeSBleGlzdHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSX0VYSVNUUyA9IDEwOwoKICAgIC8qKgogICAgICogQ2FuJ3Qgb3BlbiBmaWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUl9PUEVOID0gMTE7CgogICAgLyoqCiAgICAgKiBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSX1RNUE9QRU4gPSAxMjsKCiAgICAvKioKICAgICAqIFpsaWIgZXJyb3IKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSX1pMSUIgPSAxMzsKCiAgICAvKioKICAgICAqIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSX01FTU9SWSA9IDE0OwoKICAgIC8qKgogICAgICogRW50cnkgaGFzIGJlZW4gY2hhbmdlZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJfQ0hBTkdFRCA9IDE1OwoKICAgIC8qKgogICAgICogQ29tcHJlc3Npb24gbWV0aG9kIG5vdCBzdXBwb3J0ZWQuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUl9DT01QTk9UU1VQUCA9IDE2OwoKICAgIC8qKgogICAgICogUHJlbWF0dXJlIEVPRgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJfRU9GID0gMTc7CgogICAgLyoqCiAgICAgKiBJbnZhbGlkIGFyZ3VtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUl9JTlZBTCA9IDE4OwoKICAgIC8qKgogICAgICogTm90IGEgemlwIGFyY2hpdmUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSX05PWklQID0gMTk7CgogICAgLyoqCiAgICAgKiBJbnRlcm5hbCBlcnJvcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJfSU5URVJOQUwgPSAyMDsKCiAgICAvKioKICAgICAqIFppcCBhcmNoaXZlIGluY29uc2lzdGVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJfSU5DT05TID0gMjE7CgogICAgLyoqCiAgICAgKiBDYW4ndCByZW1vdmUgZmlsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJfUkVNT1ZFID0gMjI7CgogICAgLyoqCiAgICAgKiBFbnRyeSBoYXMgYmVlbiBkZWxldGVkCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUl9ERUxFVEVEID0gMjM7CgogICAgLyoqCiAgICAgKiBObyBlbmNyeXB0aW9uCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICogQHNpbmNlIDcuMgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRU1fTk9ORSA9IDA7CgogICAgLyoqCiAgICAgKiBBRVMgMTI4IGVuY3J5cHRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKiBAc2luY2UgNy4yCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFTV9BRVNfMTI4ID0gMjU3OwoKICAgIC8qKgogICAgICogQUVTIDE5MiBlbmNyeXB0aW9uCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICogQHNpbmNlIDcuMgogICAgICovCiAgICBwdWJsaWMgY29uc3QgRU1fQUVTXzE5MiA9IDI1ODsKCiAgICAvKioKICAgICAqIEFFUyAyNTYgZW5jcnlwdGlvbgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqIEBzaW5jZSA3LjIKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVNX0FFU18yNTYgPSAyNTk7CgogICAgLyoqCiAgICAgKiBPcGVuIGFyY2hpdmUgaW4gcmVhZCBvbmx5IG1vZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKiBAc2luY2UgNy40LjMKICAgICAqLwogICAgcHVibGljIGNvbnN0IFJET05MWSA9IDE2OwoKICAgIC8qKgogICAgICogR3Vlc3Mgc3RyaW5nIGVuY29kaW5nIChpcyBkZWZhdWx0KQogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqIEBzaW5jZSA3LjAuOAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkxfRU5DX0dVRVNTID0gMDsKCiAgICAvKioKICAgICAqIEdldCB1bm1vZGlmaWVkIHN0cmluZwogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqIEBzaW5jZSA3LjAuOAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkxfRU5DX1JBVyA9IDY0OwoKICAgIC8qKgogICAgICogRm9sbG93IHNwZWNpZmljYXRpb24gc3RyaWN0bHkKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKiBAc2luY2UgNy4wLjgKICAgICAqLwogICAgcHVibGljIGNvbnN0IEZMX0VOQ19TVFJJQ1QgPSAxMjg7CgogICAgLyoqCiAgICAgKiBTdHJpbmcgaXMgVVRGLTggZW5jb2RlZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqIEBzaW5jZSA3LjAuOAogICAgICovCiAgICBwdWJsaWMgY29uc3QgRkxfRU5DX1VURl84ID0gMjA0ODsKCiAgICAvKioKICAgICAqIFN0cmluZyBpcyBDUDQzNyBlbmNvZGVkCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICogQHNpbmNlIDcuMC44CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBGTF9FTkNfQ1A0MzcgPSA0MDk2OwoKICAgIC8qKgogICAgICogTFpNQTIgYWxnb3JpdGhtCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICogQHNpbmNlIDcuNC4zCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDTV9MWk1BMiA9IDMzOwoKICAgIC8qKgogICAgICogWFogYWxnb3JpdGhtCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICogQHNpbmNlIDcuNC4zCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBDTV9YWiA9IDk1OwoKICAgIC8qKgogICAgICogRW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKiBAc2luY2UgNy40LjMKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSX0VOQ1JOT1RTVVBQID0gMjQ7CgogICAgLyoqCiAgICAgKiBSZWFkLW9ubHkgYXJjaGl2ZQogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqIEBzaW5jZSA3LjQuMwogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJfUkRPTkxZID0gMjU7CgogICAgLyoqCiAgICAgKiBObyBwYXNzd29yZCBwcm92aWRlZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqIEBzaW5jZSA3LjQuMwogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJfTk9QQVNTV0QgPSAyNjsKCiAgICAvKioKICAgICAqIFdyb25nIHBhc3N3b3JkIHByb3ZpZGVkCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICogQHNpbmNlIDcuNC4zCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUl9XUk9OR1BBU1NXRCA9IDI3OwoKICAgIC8qKgogICAgICogT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKiBAc2luY2UgNy40LjMKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSX09QTk9UU1VQUCA9IDI4OwoKICAgIC8qKgogICAgICogUmVzb3VyY2Ugc3RpbGwgaW4gdXNlCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocAogICAgICogQHNpbmNlIDcuNC4zCiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBFUl9JTlVTRSA9IDI5OwoKICAgIC8qKgogICAgICogVGVsbCBlcnJvcgogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqIEBzaW5jZSA3LjQuMwogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJfVEVMTCA9IDMwOwoKICAgIC8qKgogICAgICogQ29tcHJlc3NlZCBkYXRhIGludmFsaWQKICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwCiAgICAgKiBAc2luY2UgNy40LjMKICAgICAqLwogICAgcHVibGljIGNvbnN0IEVSX0NPTVBSRVNTRURfREFUQSA9IDMxOwoKICAgIC8qKgogICAgICogT3BlcmF0aW9uIGNhbmNlbGxlZAogICAgICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAKICAgICAqIEBzaW5jZSA3LjQuMwogICAgICovCiAgICBwdWJsaWMgY29uc3QgRVJfQ0FOQ0VMTEVEID0gMzI7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocCN6aXBhcmNoaXZlLmNvbnN0YW50cy5vcHN5cy5kZWZhdWx0CiAgICAgKiBAc2luY2UgNS42CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFNZU19ET1MgPSAwOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAjemlwYXJjaGl2ZS5jb25zdGFudHMub3BzeXMuZGVmYXVsdAogICAgICogQHNpbmNlIDUuNgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BTWVNfQU1JR0EgPSAxOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAjemlwYXJjaGl2ZS5jb25zdGFudHMub3BzeXMuZGVmYXVsdAogICAgICogQHNpbmNlIDUuNgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BTWVNfT1BFTlZNUyA9IDI7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocCN6aXBhcmNoaXZlLmNvbnN0YW50cy5vcHN5cy5kZWZhdWx0CiAgICAgKiBAc2luY2UgNS42CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFNZU19VTklYID0gMzsKCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwI3ppcGFyY2hpdmUuY29uc3RhbnRzLm9wc3lzLmRlZmF1bHQKICAgICAqIEBzaW5jZSA1LjYKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QU1lTX1ZNX0NNUyA9IDQ7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocCN6aXBhcmNoaXZlLmNvbnN0YW50cy5vcHN5cy5kZWZhdWx0CiAgICAgKiBAc2luY2UgNS42CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFNZU19BVEFSSV9TVCA9IDU7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocCN6aXBhcmNoaXZlLmNvbnN0YW50cy5vcHN5cy5kZWZhdWx0CiAgICAgKiBAc2luY2UgNS42CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFNZU19PU18yID0gNjsKCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwI3ppcGFyY2hpdmUuY29uc3RhbnRzLm9wc3lzLmRlZmF1bHQKICAgICAqIEBzaW5jZSA1LjYKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QU1lTX01BQ0lOVE9TSCA9IDc7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocCN6aXBhcmNoaXZlLmNvbnN0YW50cy5vcHN5cy5kZWZhdWx0CiAgICAgKiBAc2luY2UgNS42CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFNZU19aX1NZU1RFTSA9IDg7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocCN6aXBhcmNoaXZlLmNvbnN0YW50cy5vcHN5cy5kZWZhdWx0CiAgICAgKiBAcmVtb3ZlZCA4LjAgVXNlIHtAbGluayBaaXBBcmNoaXZlOjpaT1BTWVNfQ1BNfSBpbnN0ZWFkLgogICAgICogQHNpbmNlIDUuNgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BTWVNfWl9DUE0gPSA5OwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAjemlwYXJjaGl2ZS5jb25zdGFudHMub3BzeXMuZGVmYXVsdAogICAgICogQHNpbmNlIDUuNgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BTWVNfV0lORE9XU19OVEZTID0gMTA7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocCN6aXBhcmNoaXZlLmNvbnN0YW50cy5vcHN5cy5kZWZhdWx0CiAgICAgKiBAc2luY2UgNS42CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFNZU19NVlMgPSAxMTsKCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwI3ppcGFyY2hpdmUuY29uc3RhbnRzLm9wc3lzLmRlZmF1bHQKICAgICAqIEBzaW5jZSA1LjYKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QU1lTX1ZTRSA9IDEyOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAjemlwYXJjaGl2ZS5jb25zdGFudHMub3BzeXMuZGVmYXVsdAogICAgICogQHNpbmNlIDUuNgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BTWVNfQUNPUk5fUklTQyA9IDEzOwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAjemlwYXJjaGl2ZS5jb25zdGFudHMub3BzeXMuZGVmYXVsdAogICAgICogQHNpbmNlIDUuNgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BTWVNfVkZBVCA9IDE0OwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAjemlwYXJjaGl2ZS5jb25zdGFudHMub3BzeXMuZGVmYXVsdAogICAgICogQHNpbmNlIDUuNgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BTWVNfQUxURVJOQVRFX01WUyA9IDE1OwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAjemlwYXJjaGl2ZS5jb25zdGFudHMub3BzeXMuZGVmYXVsdAogICAgICogQHNpbmNlIDUuNgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BTWVNfQkVPUyA9IDE2OwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vemlwLmNvbnN0YW50cy5waHAjemlwYXJjaGl2ZS5jb25zdGFudHMub3BzeXMuZGVmYXVsdAogICAgICogQHNpbmNlIDUuNgogICAgICovCiAgICBwdWJsaWMgY29uc3QgT1BTWVNfVEFOREVNID0gMTc7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocCN6aXBhcmNoaXZlLmNvbnN0YW50cy5vcHN5cy5kZWZhdWx0CiAgICAgKiBAc2luY2UgNS42CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFNZU19PU180MDAgPSAxODsKCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwI3ppcGFyY2hpdmUuY29uc3RhbnRzLm9wc3lzLmRlZmF1bHQKICAgICAqIEBzaW5jZSA1LjYKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QU1lTX09TX1ggPSAxOTsKCiAgICAvKioKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3ppcC5jb25zdGFudHMucGhwI3ppcGFyY2hpdmUuY29uc3RhbnRzLm9wc3lzLmRlZmF1bHQKICAgICAqLwogICAgcHVibGljIGNvbnN0IE9QU1lTX0NQTSA9IDk7CgogICAgLyoqCiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96aXAuY29uc3RhbnRzLnBocCN6aXBhcmNoaXZlLmNvbnN0YW50cy5vcHN5cy5kZWZhdWx0CiAgICAgKiBAc2luY2UgNS42CiAgICAgKi8KICAgIHB1YmxpYyBjb25zdCBPUFNZU19ERUZBVUxUID0gMzsKCiAgICBwdWJsaWMgY29uc3QgRkxfT1BFTl9GSUxFX05PVyA9IDEwNzM3NDE4MjQ7CgogICAgcHVibGljIGNvbnN0IENNX1pTVEQgPSA5MzsKCiAgICBwdWJsaWMgY29uc3QgRVJfREFUQV9MRU5HVEggPSAzMzsKCiAgICBwdWJsaWMgY29uc3QgRVJfTk9UX0FMTE9XRUQgPSAzNDsKCiAgICBwdWJsaWMgY29uc3QgQUZMX1JET05MWSA9IDI7CgogICAgcHVibGljIGNvbnN0IEFGTF9JU19UT1JSRU5UWklQID0gNDsKCiAgICBwdWJsaWMgY29uc3QgQUZMX1dBTlRfVE9SUkVOVFpJUCA9IDg7CgogICAgcHVibGljIGNvbnN0IEFGTF9DUkVBVEVfT1JfS0VFUF9GSUxFX0ZPUl9FTVBUWV9BUkNISVZFID0gMTY7CgogICAgcHVibGljIGNvbnN0IExFTkdUSF9UT19FTkQgPSAwOwoKICAgIHB1YmxpYyBjb25zdCBMRU5HVEhfVU5DSEVDS0VEID0gLTI7CiAgICAvKioKICAgICAqIFN0YXR1cyBvZiB0aGUgWmlwIEFyY2hpdmUKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHN0YXR1czsKCiAgICAvKioKICAgICAqIFN5c3RlbSBzdGF0dXMgb2YgdGhlIFppcCBBcmNoaXZlCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRzdGF0dXNTeXM7CgogICAgLyoqCiAgICAgKiBOdW1iZXIgb2YgZmlsZXMgaW4gYXJjaGl2ZQogICAgICogQHZhciBpbnQKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkbnVtRmlsZXM7CgogICAgLyoqCiAgICAgKiBGaWxlIG5hbWUgaW4gdGhlIGZpbGUgc3lzdGVtCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRmaWxlbmFtZTsKCiAgICAvKioKICAgICAqIENvbW1lbnQgZm9yIHRoZSBhcmNoaXZlCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRjb21tZW50OwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkbGFzdElkOwoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogT3BlbiBhIFpJUCBmaWxlIGFyY2hpdmUKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUub3Blbi5waHAKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICAgICAqIFRoZSBmaWxlIG5hbWUgb2YgdGhlIFpJUCBhcmNoaXZlIHRvIG9wZW4uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIG1vZGUgdG8gdXNlIHRvIG9wZW4gdGhlIGFyY2hpdmUuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIDxiPlppcEFyY2hpdmU6Ok9WRVJXUklURTwvYj4KICAgICAqIDwvcD4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxib29sIDxpPkVycm9yIGNvZGVzPC9pPgogICAgICogPHA+CiAgICAgKiBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3MsIDxiPkZBTFNFPC9iPiBvciB0aGUgZXJyb3IgY29kZSBvbiBlcnJvci4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogPGI+WmlwQXJjaGl2ZTo6RVJfRVhJU1RTPC9iPgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBGaWxlIGFscmVhZHkgZXhpc3RzLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiA8Yj5aaXBBcmNoaXZlOjpFUl9JTkNPTlM8L2I+CiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIFppcCBhcmNoaXZlIGluY29uc2lzdGVudC4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogPGI+WmlwQXJjaGl2ZTo6RVJfSU5WQUw8L2I+CiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIEludmFsaWQgYXJndW1lbnQuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIDxiPlppcEFyY2hpdmU6OkVSX01FTU9SWTwvYj4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogTWFsbG9jIGZhaWx1cmUuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIDxiPlppcEFyY2hpdmU6OkVSX05PRU5UPC9iPgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBObyBzdWNoIGZpbGUuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIDxiPlppcEFyY2hpdmU6OkVSX05PWklQPC9iPgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBOb3QgYSB6aXAgYXJjaGl2ZS4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogPGI+WmlwQXJjaGl2ZTo6RVJfT1BFTjwvYj4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogQ2FuJ3Qgb3BlbiBmaWxlLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiA8Yj5aaXBBcmNoaXZlOjpFUl9SRUFEPC9iPgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBSZWFkIGVycm9yLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiA8Yj5aaXBBcmNoaXZlOjpFUl9TRUVLPC9iPgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBTZWVrIGVycm9yLgogICAgICogPC9wPgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb3BlbigKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZmlsZW5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gbnVsbAogICAgKTogaW50fGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjIuMCwgUEVDTCB6aXAgJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIENsb3NlIHRoZSBhY3RpdmUgYXJjaGl2ZSAob3BlbmVkIG9yIG5ld2x5IGNyZWF0ZWQpCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuY2xvc2UucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNyAmZ3Q7PSA3LjIuMCwgUEVDTCB6aXAgJmd0Oz0gMS4xNS4wKTxici8+CiAgICAgKiBDb3VudHMgdGhlIG51bWJlciBvZiBmaWxlcyBpbiB0aGUgYXJjaGl2ZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuY291bnQucGhwCiAgICAgKiBAcmV0dXJuIGludAogICAgICogQHNpbmNlIDcuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzdGF0dXMgZXJyb3IgbWVzc2FnZSwgc3lzdGVtIGFuZC9vciB6aXAgbWVzc2FnZXMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5nZXRzdGF0dXNzdHJpbmcucGhwCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBhIHN0cmluZyB3aXRoIHRoZSBzdGF0dXMgbWVzc2FnZSBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICogQHNpbmNlIDUuMi43CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0dXNTdHJpbmcoKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuOC4wKTxici8+CiAgICAgKiBBZGQgYSBuZXcgZGlyZWN0b3J5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuYWRkZW1wdHlkaXIucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaXJuYW1lIDxwPgogICAgICogVGhlIGRpcmVjdG9yeSB0byBhZGQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIFNldCBob3cgdG8gbWFuYWdlIG5hbWUgZW5jb2RpbmcgKFppcEFyY2hpdmU6OkZMX0VOQ18qKSBhbmQgZW50cnkgcmVwbGFjZW1lbnQgKFppcEFyY2hpdmU6OkZMX09WRVJXUklURSkKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkRW1wdHlEaXIoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGRpcm5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBBZGQgYSBmaWxlIHRvIGEgWklQIGFyY2hpdmUgdXNpbmcgaXRzIGNvbnRlbnRzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuYWRkZnJvbXN0cmluZy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZW50cnkgdG8gY3JlYXRlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkY29udGVudCA8cD4KICAgICAqIFRoZSBjb250ZW50cyB0byB1c2UgdG8gY3JlYXRlIHRoZSBlbnRyeS4gSXQgaXMgdXNlZCBpbiBhIGJpbmFyeQogICAgICogc2FmZSBtb2RlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSBTZXQgaG93IHRvIG1hbmFnZSBuYW1lIGVuY29kaW5nIChaaXBBcmNoaXZlOjpGTF9FTkNfKikgYW5kIGVudHJ5IHJlcGxhY2VtZW50IChaaXBBcmNoaXZlOjpGTF9PVkVSV1JJVEUpCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGFkZEZyb21TdHJpbmcoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvbnRlbnQsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gODE5MgogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogQWRkcyBhIGZpbGUgdG8gYSBaSVAgYXJjaGl2ZSBmcm9tIHRoZSBnaXZlbiBwYXRoCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuYWRkZmlsZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVwYXRoIDxwPgogICAgICogVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gYWRkLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkZW50cnluYW1lIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJZiBzdXBwbGllZCwgdGhpcyBpcyB0aGUgbG9jYWwgbmFtZSBpbnNpZGUgdGhlIFpJUCBhcmNoaXZlIHRoYXQgd2lsbCBvdmVycmlkZSB0aGUgPGk+ZmlsZW5hbWU8L2k+LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkc3RhcnQgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkIGJ1dCBpcyByZXF1aXJlZCB0byBleHRlbmQgPGI+WmlwQXJjaGl2ZTwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRsZW5ndGggW29wdGlvbmFsXSA8cD4KICAgICAqIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkIGJ1dCBpcyByZXF1aXJlZCB0byBleHRlbmQgPGI+WmlwQXJjaGl2ZTwvYj4uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIFNldCBob3cgdG8gbWFuYWdlIG5hbWUgZW5jb2RpbmcgKFppcEFyY2hpdmU6OkZMX0VOQ18qKSBhbmQgZW50cnkgcmVwbGFjZW1lbnQgKFppcEFyY2hpdmU6OkZMX09WRVJXUklURSkKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkRmlsZSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZmlsZXBhdGgsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGVudHJ5bmFtZSA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHN0YXJ0ID0gMCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbGVuZ3RoID0gMCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MgPSA4MTkyCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4zLjAsIFBFQ0wgemlwICZndDs9IDEuOS4wKTxici8+CiAgICAgKiBBZGQgZmlsZXMgZnJvbSBhIGRpcmVjdG9yeSBieSBnbG9iIHBhdHRlcm4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5hZGRnbG9iLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcGF0dGVybiA8cD4KICAgICAqIEEgPGI+Z2xvYjwvYj4gcGF0dGVybiBhZ2FpbnN0IHdoaWNoIGZpbGVzIHdpbGwgYmUgbWF0Y2hlZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAgICAgKiBBIGJpdCBtYXNrIG9mIGdsb2IoKSBmbGFncy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBbb3B0aW9uYWxdIDxwPgogICAgICogQW4gYXNzb2NpYXRpdmUgYXJyYXkgb2Ygb3B0aW9ucy4gQXZhaWxhYmxlIG9wdGlvbnMgYXJlOgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiAiYWRkX3BhdGgiCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIFByZWZpeCB0byBwcmVwZW5kIHdoZW4gdHJhbnNsYXRpbmcgdG8gdGhlIGxvY2FsIHBhdGggb2YgdGhlIGZpbGUgd2l0aGluCiAgICAgKiB0aGUgYXJjaGl2ZS4gVGhpcyBpcyBhcHBsaWVkIGFmdGVyIGFueSByZW1vdmUgb3BlcmF0aW9ucyBkZWZpbmVkIGJ5IHRoZQogICAgICogInJlbW92ZV9wYXRoIiBvciAicmVtb3ZlX2FsbF9wYXRoIgogICAgICogb3B0aW9ucy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYXJyYXl8ZmFsc2UKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGFkZEdsb2IoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHBhdHRlcm4sCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gMCwKICAgICAgICBhcnJheSAkb3B0aW9ucyA9IFtdCiAgICApOiBhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMy4wLCBQRUNMIHppcCAmZ3Q7PSAxLjkuMCk8YnIvPgogICAgICogQWRkIGZpbGVzIGZyb20gYSBkaXJlY3RvcnkgYnkgUENSRSBwYXR0ZXJuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuYWRkcGF0dGVybi5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdHRlcm4gPHA+CiAgICAgKiBBIFBDUkUgcGF0dGVybiBhZ2FpbnN0IHdoaWNoIGZpbGVzIHdpbGwgYmUgbWF0Y2hlZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGggW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIHNjYW5uZWQuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAgICAgKiBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zIGFjY2VwdGVkIGJ5IDxiPlppcEFyY2hpdmU6OmFkZEdsb2I8L2I+LgogICAgICogPC9wPgogICAgICogQHJldHVybiBhcnJheXxmYWxzZQogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUGF0dGVybigKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcGF0dGVybiwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcGF0aCA9ICcuJywKICAgICAgICBhcnJheSAkb3B0aW9ucyA9IFtdCiAgICApOiBhcnJheXxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjUuMCk8YnIvPgogICAgICogUmVuYW1lcyBhbiBlbnRyeSBkZWZpbmVkIGJ5IGl0cyBpbmRleAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXBhcmNoaXZlLnJlbmFtZWluZGV4LnBocAogICAgICogQHBhcmFtIGludCAkaW5kZXggPHA+CiAgICAgKiBJbmRleCBvZiB0aGUgZW50cnkgdG8gcmVuYW1lLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkbmV3X25hbWUgPHA+CiAgICAgKiBOZXcgbmFtZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVuYW1lSW5kZXgoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGluZGV4LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuZXdfbmFtZQogICAgKTpib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuNS4wKTxici8+CiAgICAgKiBSZW5hbWVzIGFuIGVudHJ5IGRlZmluZWQgYnkgaXRzIG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5yZW5hbWVuYW1lLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICAgICAqIE5hbWUgb2YgdGhlIGVudHJ5IHRvIHJlbmFtZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5ld19uYW1lIDxwPgogICAgICogTmV3IG5hbWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJlbmFtZU5hbWUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5ld19uYW1lCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuNC4wKTxici8+CiAgICAgKiBTZXQgdGhlIGNvbW1lbnQgb2YgYSBaSVAgYXJjaGl2ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXBhcmNoaXZlLnNldGFyY2hpdmVjb21tZW50LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkY29tbWVudCA8cD4KICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGUgY29tbWVudC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QXJjaGl2ZUNvbW1lbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvbW1lbnQpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBaaXAgYXJjaGl2ZSBjb21tZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuZ2V0YXJjaGl2ZWNvbW1lbnQucGhwCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogICAgICogSWYgZmxhZ3MgaXMgc2V0IHRvIDxiPlppcEFyY2hpdmU6OkZMX1VOQ0hBTkdFRDwvYj4sIHRoZSBvcmlnaW5hbCB1bmNoYW5nZWQKICAgICAqIGNvbW1lbnQgaXMgcmV0dXJuZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSB0aGUgWmlwIGFyY2hpdmUgY29tbWVudCBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEFyY2hpdmVDb21tZW50KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IG51bGwpOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjIuMCwgUEVDTCB6aXAgJmd0Oz0gMS40LjApPGJyLz4KICAgICAqIFNldCB0aGUgY29tbWVudCBvZiBhbiBlbnRyeSBkZWZpbmVkIGJ5IGl0cyBpbmRleAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXBhcmNoaXZlLnNldGNvbW1lbnRpbmRleC5waHAKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4IDxwPgogICAgICogSW5kZXggb2YgdGhlIGVudHJ5LgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkY29tbWVudCA8cD4KICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGUgY29tbWVudC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29tbWVudEluZGV4KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRpbmRleCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29tbWVudAogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjQuMCk8YnIvPgogICAgICogU2V0IHRoZSBjb21tZW50IG9mIGFuIGVudHJ5IGRlZmluZWQgYnkgaXRzIG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5zZXRjb21tZW50bmFtZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBOYW1lIG9mIHRoZSBlbnRyeS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbW1lbnQgPHA+CiAgICAgKiBUaGUgY29udGVudHMgb2YgdGhlIGNvbW1lbnQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbW1lbnROYW1lKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb21tZW50CiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBvZiBhbiBlbnRyeSBkZWZpbmVkIGJ5IGl0cyBpbmRleAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXBhcmNoaXZlLnNldGNvbXByZXNzaW9uaW5kZXgucGhwCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCBJbmRleCBvZiB0aGUgZW50cnkuCiAgICAgKiBAcGFyYW0gaW50ICRtZXRob2QgVGhlIGNvbXByZXNzaW9uIG1ldGhvZC4gRWl0aGVyIFppcEFyY2hpdmU6OkNNX0RFRkFVTFQsIFppcEFyY2hpdmU6OkNNX1NUT1JFIG9yIFppcEFyY2hpdmU6OkNNX0RFRkxBVEUuCiAgICAgKiBAcGFyYW0gaW50ICRjb21wZmxhZ3MgW29wdGlvbmFsXSBDb21wcmVzc2lvbiBmbGFncy4gQ3VycmVudGx5IHVudXNlZC4KICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogICAgICogQHNpbmNlIDcuMAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29tcHJlc3Npb25JbmRleChpbnQgJGluZGV4LCBpbnQgJG1ldGhvZCwgaW50ICRjb21wZmxhZ3MgPSAwKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBjb21wcmVzc2lvbiBtZXRob2Qgb2YgYW4gZW50cnkgZGVmaW5lZCBieSBpdHMgbmFtZQogICAgICogaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5zZXRjb21wcmVzc2lvbm5hbWUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIE5hbWUgb2YgdGhlIGVudHJ5LgogICAgICogQHBhcmFtIGludCAkbWV0aG9kIFRoZSBjb21wcmVzc2lvbiBtZXRob2QuIEVpdGhlciBaaXBBcmNoaXZlOjpDTV9ERUZBVUxULCBaaXBBcmNoaXZlOjpDTV9TVE9SRSBvciBaaXBBcmNoaXZlOjpDTV9ERUZMQVRFLgogICAgICogQHBhcmFtIGludCAkY29tcGZsYWdzIFtvcHRpb25hbF0gQ29tcHJlc3Npb24gZmxhZ3MuIEN1cnJlbnRseSB1bnVzZWQuCiAgICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZmFpbHVyZS4KICAgICAqIEBzaW5jZSA3LjAKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldENvbXByZXNzaW9uTmFtZShzdHJpbmcgJG5hbWUsIGludCAkbWV0aG9kLCBpbnQgJGNvbXBmbGFncyA9IDApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGVuY3J5cHRpb24gbWV0aG9kIG9mIGFuIGVudHJ5IGRlZmluZWQgYnkgaXRzIGluZGV4CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuc2V0ZW5jcnlwdGlvbmluZGV4LnBocAogICAgICogQHBhcmFtIGludCAkaW5kZXggSW5kZXggb2YgdGhlIGVudHJ5LgogICAgICogQHBhcmFtIGludCAkbWV0aG9kIFRoZSBlbmNyeXB0aW9uIG1ldGhvZCBkZWZpbmVkIGJ5IG9uZSBvZiB0aGUgWmlwQXJjaGl2ZTo6RU1fIGNvbnN0YW50cy4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGFzc3dvcmQgW29wdGlvbmFsXSBPcHRpb25hbCBwYXNzd29yZCwgZGVmYXVsdCB1c2VkIHdoZW4gbWlzc2luZy4KICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBmYWlsdXJlLgogICAgICogQHNpbmNlIDcuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RW5jcnlwdGlvbkluZGV4KGludCAkaW5kZXgsIGludCAkbWV0aG9kLCA/c3RyaW5nICRwYXNzd29yZCA9IG51bGwpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGVuY3J5cHRpb24gbWV0aG9kIG9mIGFuIGVudHJ5IGRlZmluZWQgYnkgaXRzIG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5zZXRlbmNyeXB0aW9ubmFtZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgTmFtZSBvZiB0aGUgZW50cnkuCiAgICAgKiBAcGFyYW0gaW50ICRtZXRob2QgVGhlIGVuY3J5cHRpb24gbWV0aG9kIGRlZmluZWQgYnkgb25lIG9mIHRoZSBaaXBBcmNoaXZlOjpFTV8gY29uc3RhbnRzLgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwYXNzd29yZCBbb3B0aW9uYWxdIE9wdGlvbmFsIHBhc3N3b3JkLCBkZWZhdWx0IHVzZWQgd2hlbiBtaXNzaW5nLgogICAgICogQHJldHVybiBib29sIFJldHVybnMgVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGZhaWx1cmUuCiAgICAgKiBAc2luY2UgNy4yCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFbmNyeXB0aW9uTmFtZShzdHJpbmcgJG5hbWUsIGludCAkbWV0aG9kLCA/c3RyaW5nICRwYXNzd29yZCA9IG51bGwpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS42LjAsIFBFQ0wgemlwICZndDs9IDEuMTIuMCk8YnIvPgogICAgICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGFzc3dvcmQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHBhc3N3b3JkKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjQuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgY29tbWVudCBvZiBhbiBlbnRyeSB1c2luZyB0aGUgZW50cnkgaW5kZXgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5nZXRjb21tZW50aW5kZXgucGhwCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCA8cD4KICAgICAqIEluZGV4IG9mIHRoZSBlbnRyeQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICAgICAqIElmIGZsYWdzIGlzIHNldCB0byA8Yj5aaXBBcmNoaXZlOjpGTF9VTkNIQU5HRUQ8L2I+LCB0aGUgb3JpZ2luYWwgdW5jaGFuZ2VkCiAgICAgKiBjb21tZW50IGlzIHJldHVybmVkLgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIGNvbW1lbnQgb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbW1lbnRJbmRleCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkaW5kZXgsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gbnVsbAogICAgKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuNC4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBjb21tZW50IG9mIGFuIGVudHJ5IHVzaW5nIHRoZSBlbnRyeSBuYW1lCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuZ2V0Y29tbWVudG5hbWUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogICAgICogTmFtZSBvZiB0aGUgZW50cnkKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJZiBmbGFncyBpcyBzZXQgdG8gPGI+WmlwQXJjaGl2ZTo6RkxfVU5DSEFOR0VEPC9iPiwgdGhlIG9yaWdpbmFsIHVuY2hhbmdlZAogICAgICogY29tbWVudCBpcyByZXR1cm5lZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBjb21tZW50IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb21tZW50TmFtZSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MgPSBudWxsCiAgICApOiBzdHJpbmd8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjIuMCwgUEVDTCB6aXAgJmd0Oz0gMS41LjApPGJyLz4KICAgICAqIGRlbGV0ZSBhbiBlbnRyeSBpbiB0aGUgYXJjaGl2ZSB1c2luZyBpdHMgaW5kZXgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5kZWxldGVpbmRleC5waHAKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4IDxwPgogICAgICogSW5kZXggb2YgdGhlIGVudHJ5IHRvIGRlbGV0ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlSW5kZXgoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGluZGV4KTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjUuMCk8YnIvPgogICAgICogZGVsZXRlIGFuIGVudHJ5IGluIHRoZSBhcmNoaXZlIHVzaW5nIGl0cyBuYW1lCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuZGVsZXRlbmFtZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBOYW1lIG9mIHRoZSBlbnRyeSB0byBkZWxldGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZU5hbWUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuNS4wKTxici8+CiAgICAgKiBHZXQgdGhlIGRldGFpbHMgb2YgYW4gZW50cnkgZGVmaW5lZCBieSBpdHMgbmFtZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5zdGF0bmFtZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBOYW1lIG9mIHRoZSBlbnRyeQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBmbGFncyBhcmd1bWVudCBzcGVjaWZpZXMgaG93IHRoZSBuYW1lIGxvb2t1cCBzaG91bGQgYmUgZG9uZS4KICAgICAqIEFsc28sIDxiPlppcEFyY2hpdmU6OkZMX1VOQ0hBTkdFRDwvYj4gbWF5IGJlIE9SZWQgdG8gaXQgdG8gcmVxdWVzdAogICAgICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgaW4gdGhlIGFyY2hpdmUsCiAgICAgKiBpZ25vcmluZyBhbnkgY2hhbmdlcyBtYWRlLgogICAgICogPGI+WmlwQXJjaGl2ZTo6RkxfTk9DQVNFPC9iPgogICAgICogPC9wPgogICAgICogQHJldHVybiBhcnJheXtuYW1lOiBzdHJpbmcsIGluZGV4OiBpbnQsIGNyYzogaW50LCBzaXplOiBpbnQsIG10aW1lOiBpbnQsIGNvbXBfc2l6ZTogaW50LCBjb21wX21ldGhvZDogaW50LCBlbmNyeXB0aW9uX21ldGhvZDogaW50fXxmYWxzZSBhbiBhcnJheSBjb250YWluaW5nIHRoZSBlbnRyeSBkZXRhaWxzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhdE5hbWUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gbnVsbAogICAgKTogYXJyYXl8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjIuMCwgUEVDTCB6aXAgJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIEdldCB0aGUgZGV0YWlscyBvZiBhbiBlbnRyeSBkZWZpbmVkIGJ5IGl0cyBpbmRleC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5zdGF0aW5kZXgucGhwCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCA8cD4KICAgICAqIEluZGV4IG9mIHRoZSBlbnRyeQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICAgICAqIDxiPlppcEFyY2hpdmU6OkZMX1VOQ0hBTkdFRDwvYj4gbWF5IGJlIE9SZWQgdG8gaXQgdG8gcmVxdWVzdAogICAgICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgaW4gdGhlIGFyY2hpdmUsCiAgICAgKiBpZ25vcmluZyBhbnkgY2hhbmdlcyBtYWRlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBhcnJheXtuYW1lOiBzdHJpbmcsIGluZGV4OiBpbnQsIGNyYzogaW50LCBzaXplOiBpbnQsIG10aW1lOiBpbnQsIGNvbXBfc2l6ZTogaW50LCBjb21wX21ldGhvZDogaW50LCBlbmNyeXB0aW9uX21ldGhvZDogaW50fXxmYWxzZSBhbiBhcnJheSBjb250YWluaW5nIHRoZSBlbnRyeSBkZXRhaWxzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhdEluZGV4KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRpbmRleCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MgPSBudWxsCiAgICApOmFycmF5fGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuNS4wKTxici8+CiAgICAgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgaW4gdGhlIGFyY2hpdmUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5sb2NhdGVuYW1lLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICAgICAqIFRoZSBuYW1lIG9mIHRoZSBlbnRyeSB0byBsb29rIHVwCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGZsYWdzIGFyZSBzcGVjaWZpZWQgYnkgT1JpbmcgdGhlIGZvbGxvd2luZyB2YWx1ZXMsCiAgICAgKiBvciAwIGZvciBub25lIG9mIHRoZW0uCiAgICAgKiA8Yj5aaXBBcmNoaXZlOjpGTF9OT0NBU0U8L2I+CiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGludHxmYWxzZSB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2NhdGVOYW1lKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IG51bGwKICAgICk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjUuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiBhbiBlbnRyeSB1c2luZyBpdHMgaW5kZXgKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5nZXRuYW1laW5kZXgucGhwCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCA8cD4KICAgICAqIEluZGV4IG9mIHRoZSBlbnRyeS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAgICAgKiBJZiBmbGFncyBpcyBzZXQgdG8gPGI+WmlwQXJjaGl2ZTo6RkxfVU5DSEFOR0VEPC9iPiwgdGhlIG9yaWdpbmFsIHVuY2hhbmdlZAogICAgICogbmFtZSBpcyByZXR1cm5lZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBuYW1lIG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lSW5kZXgoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGluZGV4LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IG51bGwKICAgICk6c3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBSZXZlcnQgYWxsIGdsb2JhbCBjaGFuZ2VzIGRvbmUgaW4gdGhlIGFyY2hpdmUuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUudW5jaGFuZ2VhcmNoaXZlLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB1bmNoYW5nZUFyY2hpdmUoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogVW5kbyBhbGwgY2hhbmdlcyBkb25lIGluIHRoZSBhcmNoaXZlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUudW5jaGFuZ2VhbGwucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHVuY2hhbmdlQWxsKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjIuMCwgUEVDTCB6aXAgJmd0Oz0gMS4xLjApPGJyLz4KICAgICAqIFJldmVydCBhbGwgY2hhbmdlcyBkb25lIHRvIGFuIGVudHJ5IGF0IHRoZSBnaXZlbiBpbmRleAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXBhcmNoaXZlLnVuY2hhbmdlaW5kZXgucGhwCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCA8cD4KICAgICAqIEluZGV4IG9mIHRoZSBlbnRyeS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5jaGFuZ2VJbmRleCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkaW5kZXgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuNS4wKTxici8+CiAgICAgKiBSZXZlcnQgYWxsIGNoYW5nZXMgZG9uZSB0byBhbiBlbnRyeSB3aXRoIHRoZSBnaXZlbiBuYW1lLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXBhcmNoaXZlLnVuY2hhbmdlbmFtZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBOYW1lIG9mIHRoZSBlbnRyeS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5jaGFuZ2VOYW1lKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogRXh0cmFjdCB0aGUgYXJjaGl2ZSBjb250ZW50cwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi96aXBhcmNoaXZlLmV4dHJhY3R0by5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGh0byA8cD4KICAgICAqIExvY2F0aW9uIHdoZXJlIHRvIGV4dHJhY3QgdGhlIGZpbGVzLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZ1tdfHN0cmluZ3xudWxsICRmaWxlcyBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGVudHJpZXMgdG8gZXh0cmFjdC4gSXQgYWNjZXB0cyBlaXRoZXIgYSBzaW5nbGUgZW50cnkgbmFtZSBvcgogICAgICogYW4gYXJyYXkgb2YgbmFtZXMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGV4dHJhY3RUbygKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcGF0aHRvLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2FycmF5fHN0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGZpbGVzID0gbnVsbAogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjEuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgZW50cnkgY29udGVudHMgdXNpbmcgaXRzIG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vemlwYXJjaGl2ZS5nZXRmcm9tbmFtZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBOYW1lIG9mIHRoZSBlbnRyeQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkbGVuIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgbGVuZ3RoIHRvIGJlIHJlYWQgZnJvbSB0aGUgZW50cnkuIElmIDAsIHRoZW4gdGhlCiAgICAgKiBlbnRpcmUgZW50cnkgaXMgcmVhZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZmxhZ3MgdG8gdXNlIHRvIG9wZW4gdGhlIGFyY2hpdmUuIHRoZSBmb2xsb3dpbmcgdmFsdWVzIG1heQogICAgICogYmUgT1JlZCB0byBpdC4KICAgICAqIDxiPlppcEFyY2hpdmU6OkZMX1VOQ0hBTkdFRDwvYj4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBjb250ZW50cyBvZiB0aGUgZW50cnkgb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyb21OYW1lKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRsZW4gPSAwLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IG51bGwKICAgICk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjMuMCk8YnIvPgogICAgICogUmV0dXJucyB0aGUgZW50cnkgY29udGVudHMgdXNpbmcgaXRzIGluZGV4CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuZ2V0ZnJvbWluZGV4LnBocAogICAgICogQHBhcmFtIGludCAkaW5kZXggPHA+CiAgICAgKiBJbmRleCBvZiB0aGUgZW50cnkKICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGxlbiBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGxlbmd0aCB0byBiZSByZWFkIGZyb20gdGhlIGVudHJ5LiBJZiAwLCB0aGVuIHRoZQogICAgICogZW50aXJlIGVudHJ5IGlzIHJlYWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGZsYWdzIHRvIHVzZSB0byBvcGVuIHRoZSBhcmNoaXZlLiB0aGUgZm9sbG93aW5nIHZhbHVlcyBtYXkKICAgICAqIGJlIE9SZWQgdG8gaXQuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIDxiPlppcEFyY2hpdmU6OkZMX1VOQ0hBTkdFRDwvYj4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBjb250ZW50cyBvZiB0aGUgZW50cnkgb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyb21JbmRleCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkaW5kZXgsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGxlbiA9IDAsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gbnVsbAogICAgKTogc3RyaW5nfGZhbHNlIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuMS4wKTxici8+CiAgICAgKiBHZXQgYSBmaWxlIGhhbmRsZXIgdG8gdGhlIGVudHJ5IGRlZmluZWQgYnkgaXRzIG5hbWUgKHJlYWQgb25seSkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuZ2V0c3RyZWFtLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICAgICAqIFRoZSBuYW1lIG9mIHRoZSBlbnRyeSB0byB1c2UuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGEgZmlsZSBwb2ludGVyIChyZXNvdXJjZSkgb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0cmVhbSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZSkge30KCiAgICAvKioKICAgICAqIChQSFAgOCAmZ3Q7PSA4LjIuMCwgUEVDTCB6aXAgJmd0Oz0gMS4yMC4wKTxici8+CiAgICAgKiBHZXQgYSBmaWxlIGhhbmRsZXIgdG8gdGhlIGVudHJ5IGRlZmluZWQgYnkgaXRzIGluZGV4IChyZWFkIG9ubHkpCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuZ2V0c3RyZWFtaW5kZXgucGhwCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCA8cD4KICAgICAqIEluZGV4IG9mIHRoZSBlbnRyeQogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD4KICAgICAqIElmIGZsYWdzIGlzIHNldCB0byBaaXBBcmNoaXZlOjpGTF9VTkNIQU5HRUQsIHRoZSBvcmlnaW5hbCB1bmNoYW5nZWQgc3RyZWFtIGlzIHJldHVybmVkLgogICAgICogPC9wPgogICAgICogQHJldHVybiByZXNvdXJjZXxmYWxzZSBhIGZpbGUgcG9pbnRlciAocmVzb3VyY2UpIG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHJlYW1JbmRleCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkaW5kZXgsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gMAogICAgKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBleHRlcm5hbCBhdHRyaWJ1dGVzIG9mIGFuIGVudHJ5IGRlZmluZWQgYnkgaXRzIG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuc2V0ZXh0ZXJuYWxhdHRyaWJ1dGVzbmFtZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgTmFtZSBvZiB0aGUgZW50cnkKICAgICAqIEBwYXJhbSBpbnQgJG9wc3lzIFRoZSBvcGVyYXRpbmcgc3lzdGVtIGNvZGUgZGVmaW5lZCBieSBvbmUgb2YgdGhlIFppcEFyY2hpdmU6Ok9QU1lTXyBjb25zdGFudHMuCiAgICAgKiBAcGFyYW0gaW50ICRhdHRyIFRoZSBleHRlcm5hbCBhdHRyaWJ1dGVzLiBWYWx1ZSBkZXBlbmRzIG9uIG9wZXJhdGluZyBzeXN0ZW0uCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIE9wdGlvbmFsIGZsYWdzLiBDdXJyZW50bHkgdW51c2VkLgogICAgICogQHJldHVybiBib29sIFJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldEV4dGVybmFsQXR0cmlidXRlc05hbWUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJG9wc3lzLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRhdHRyLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IG51bGwKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBleHRlcm5hbCBhdHRyaWJ1dGVzIG9mIGFuIGVudHJ5IGRlZmluZWQgYnkgaXRzIG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuZ2V0ZXh0ZXJuYWxhdHRyaWJ1dGVzbmFtZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgTmFtZSBvZiB0aGUgZW50cnkKICAgICAqIEBwYXJhbSBpbnQgJiRvcHN5cyBPbiBzdWNjZXNzLCByZWNlaXZlIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGNvZGUgZGVmaW5lZCBieSBvbmUgb2YgdGhlIFppcEFyY2hpdmU6Ok9QU1lTXyBjb25zdGFudHMuCiAgICAgKiBAcGFyYW0gaW50ICYkYXR0ciBPbiBzdWNjZXNzLCByZWNlaXZlIHRoZSBleHRlcm5hbCBhdHRyaWJ1dGVzLiBWYWx1ZSBkZXBlbmRzIG9uIG9wZXJhdGluZyBzeXN0ZW0uCiAgICAgKiBAcGFyYW0gaW50ICRmbGFncyBbb3B0aW9uYWxdIElmIGZsYWdzIGlzIHNldCB0byBaaXBBcmNoaXZlOjpGTF9VTkNIQU5HRUQsIHRoZSBvcmlnaW5hbCB1bmNoYW5nZWQgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQuCiAgICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXh0ZXJuYWxBdHRyaWJ1dGVzTmFtZSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAmJG9wc3lzLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICYkYXR0ciwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MgPSBudWxsCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGV4dGVybmFsIGF0dHJpYnV0ZXMgb2YgYW4gZW50cnkgZGVmaW5lZCBieSBpdHMgaW5kZXgKICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3ppcGFyY2hpdmUuc2V0ZXh0ZXJuYWxhdHRyaWJ1dGVzaW5kZXgucGhwCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCBJbmRleCBvZiB0aGUgZW50cnkuCiAgICAgKiBAcGFyYW0gaW50ICRvcHN5cyBUaGUgb3BlcmF0aW5nIHN5c3RlbSBjb2RlIGRlZmluZWQgYnkgb25lIG9mIHRoZSBaaXBBcmNoaXZlOjpPUFNZU18gY29uc3RhbnRzLgogICAgICogQHBhcmFtIGludCAkYXR0ciBUaGUgZXh0ZXJuYWwgYXR0cmlidXRlcy4gVmFsdWUgZGVwZW5kcyBvbiBvcGVyYXRpbmcgc3lzdGVtLgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSBPcHRpb25hbCBmbGFncy4gQ3VycmVudGx5IHVudXNlZC4KICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRFeHRlcm5hbEF0dHJpYnV0ZXNJbmRleCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkaW5kZXgsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJG9wc3lzLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRhdHRyLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IG51bGwKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBleHRlcm5hbCBhdHRyaWJ1dGVzIG9mIGFuIGVudHJ5IGRlZmluZWQgYnkgaXRzIGluZGV4CiAgICAgKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi96aXBhcmNoaXZlLmdldGV4dGVybmFsYXR0cmlidXRlc2luZGV4LnBocAogICAgICogQHBhcmFtIGludCAkaW5kZXggSW5kZXggb2YgdGhlIGVudHJ5LgogICAgICogQHBhcmFtIGludCAmJG9wc3lzIE9uIHN1Y2Nlc3MsIHJlY2VpdmUgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY29kZSBkZWZpbmVkIGJ5IG9uZSBvZiB0aGUgWmlwQXJjaGl2ZTo6T1BTWVNfIGNvbnN0YW50cy4KICAgICAqIEBwYXJhbSBpbnQgJiRhdHRyIE9uIHN1Y2Nlc3MsIHJlY2VpdmUgdGhlIGV4dGVybmFsIGF0dHJpYnV0ZXMuIFZhbHVlIGRlcGVuZHMgb24gb3BlcmF0aW5nIHN5c3RlbS4KICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzIFtvcHRpb25hbF0gSWYgZmxhZ3MgaXMgc2V0IHRvIFppcEFyY2hpdmU6OkZMX1VOQ0hBTkdFRCwgdGhlIG9yaWdpbmFsIHVuY2hhbmdlZCBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZC4KICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHRlcm5hbEF0dHJpYnV0ZXNJbmRleCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkaW5kZXgsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJiRvcHN5cywKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAmJGF0dHIsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gbnVsbAogICAgKTogYm9vbCB7fQoKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0VuY3J5cHRpb25NZXRob2RTdXBwb3J0ZWQoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJG1ldGhvZCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJGVuYyA9IHRydWUKICAgICkge30KCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNDb21wcmVzc2lvbk1ldGhvZFN1cHBvcnRlZCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkbWV0aG9kLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkZW5jID0gdHJ1ZQogICAgKSB7fQoKICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3RlckNhbmNlbENhbGxiYWNrKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2NhbGxhYmxlJ10sIGRlZmF1bHQ6ICcnKV0gJGNhbGxiYWNrKTogYm9vbCB7fQoKICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3RlclByb2dyZXNzQ2FsbGJhY2soCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnZmxvYXQnXSwgZGVmYXVsdDogJycpXSAkcmF0ZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdjYWxsYWJsZSddLCBkZWZhdWx0OiAnJyldICRjYWxsYmFjawogICAgKTogYm9vbCB7fQoKICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNdGltZU5hbWUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJHRpbWVzdGFtcCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZ3MgPSBudWxsCiAgICApOiBib29sIHt9CgogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldE10aW1lSW5kZXgoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGluZGV4LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICR0aW1lc3RhbXAsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gbnVsbAogICAgKTogYm9vbCB7fQoKICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlRmlsZSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZmlsZXBhdGgsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGluZGV4LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRzdGFydCA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGxlbmd0aCA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gbnVsbAogICAgKTogYm9vbCB7fQoKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3ZvaWQnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyRXJyb3IoKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkZmxhZwogICAgICogQHBhcmFtIGludCAkdmFsdWUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBcmNoaXZlRmxhZygKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkZmxhZywKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUKICAgICkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGZsYWcKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEFyY2hpdmVGbGFnKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFnLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRmbGFncyA9IDAKICAgICkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0cmVhbU5hbWUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4yJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4yJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGZsYWdzID0gMAogICAgKSB7fQp9CgovKioKICogKFBIUCA0ICZndDs9IDQuMS4wLCBQSFAgNSAmZ3Q7PSA1LjIuMCwgUEVDTCB6aXAgJmd0Oz0gMS4wLjApPGJyLz4KICogT3BlbiBhIFpJUCBmaWxlIGFyY2hpdmUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi56aXAtb3Blbi5waHAKICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAqIFRoZSBmaWxlIG5hbWUgb2YgdGhlIFpJUCBhcmNoaXZlIHRvIG9wZW4uCiAqIDwvcD4KICogQHJldHVybiByZXNvdXJjZXxpbnR8ZmFsc2UgYSByZXNvdXJjZSBoYW5kbGUgZm9yIGxhdGVyIHVzZSB3aXRoCiAqIDxiPnppcF9yZWFkPC9iPiBhbmQgPGI+emlwX2Nsb3NlPC9iPgogKiBvciByZXR1cm5zIHRoZSBudW1iZXIgb2YgZXJyb3IgaWYgPGk+ZmlsZW5hbWU8L2k+IGRvZXMgbm90CiAqIGV4aXN0IG9yIGluIGNhc2Ugb2Ygb3RoZXIgZXJyb3IuCiAqIEBkZXByZWNhdGVkIDguMCBVc2Uge0BsaW5rIFppcEFyY2hpdmV9IGluc3RlYWQuCiAqLwpmdW5jdGlvbiB6aXBfb3BlbihzdHJpbmcgJGZpbGVuYW1lKSB7fQoKLyoqCiAqIChQSFAgNCAmZ3Q7PSA0LjEuMCwgUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuMC4wKTxici8+CiAqIENsb3NlIGEgWklQIGZpbGUgYXJjaGl2ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnppcC1jbG9zZS5waHAKICogQHBhcmFtIHJlc291cmNlICR6aXAgPHA+CiAqIEEgWklQIGZpbGUgcHJldmlvdXNseSBvcGVuZWQgd2l0aCA8Yj56aXBfb3BlbjwvYj4uCiAqIDwvcD4KICogQHJldHVybiB2b2lkIE5vIHZhbHVlIGlzIHJldHVybmVkLgogKiBAZGVwcmVjYXRlZCA4LjAgVXNlIHtAbGluayBaaXBBcmNoaXZlfSBpbnN0ZWFkLgogKi8KZnVuY3Rpb24gemlwX2Nsb3NlKCR6aXApOiB2b2lkIHt9CgovKioKICogKFBIUCA0ICZndDs9IDQuMS4wLCBQSFAgNSAmZ3Q7PSA1LjIuMCwgUEVDTCB6aXAgJmd0Oz0gMS4wLjApPGJyLz4KICogUmVhZCBuZXh0IGVudHJ5IGluIGEgWklQIGZpbGUgYXJjaGl2ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnppcC1yZWFkLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHppcCA8cD4KICogQSBaSVAgZmlsZSBwcmV2aW91c2x5IG9wZW5lZCB3aXRoIDxiPnppcF9vcGVuPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIHJlc291cmNlfGZhbHNlIGEgZGlyZWN0b3J5IGVudHJ5IHJlc291cmNlIGZvciBsYXRlciB1c2Ugd2l0aCB0aGUKICogemlwX2VudHJ5Xy4uLiBmdW5jdGlvbnMsIG9yIDxiPkZBTFNFPC9iPiBpZgogKiB0aGVyZSBhcmUgbm8gbW9yZSBlbnRyaWVzIHRvIHJlYWQsIG9yIGFuIGVycm9yIGNvZGUgaWYgYW4gZXJyb3IKICogb2NjdXJyZWQuCiAqIEBkZXByZWNhdGVkIDguMCBVc2Uge0BsaW5rIFppcEFyY2hpdmV9IGluc3RlYWQuCiAqLwpmdW5jdGlvbiB6aXBfcmVhZCgkemlwKSB7fQoKLyoqCiAqIChQSFAgNCAmZ3Q7PSA0LjEuMCwgUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuMC4wKTxici8+CiAqIE9wZW4gYSBkaXJlY3RvcnkgZW50cnkgZm9yIHJlYWRpbmcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi56aXAtZW50cnktb3Blbi5waHAKICogQHBhcmFtIHJlc291cmNlICR6aXBfZHAgPHA+CiAqIEEgdmFsaWQgcmVzb3VyY2UgaGFuZGxlIHJldHVybmVkIGJ5IDxiPnppcF9vcGVuPC9iPi4KICogPC9wPgogKiBAcGFyYW0gcmVzb3VyY2UgJHppcF9lbnRyeSA8cD4KICogQSBkaXJlY3RvcnkgZW50cnkgcmV0dXJuZWQgYnkgPGI+emlwX3JlYWQ8L2I+LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG1vZGUgW29wdGlvbmFsXSA8cD4KICogQW55IG9mIHRoZSBtb2RlcyBzcGVjaWZpZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YKICogPGI+Zm9wZW48L2I+LgogKiA8L3A+CiAqIDxwPgogKiBDdXJyZW50bHksIDxpPm1vZGU8L2k+IGlzIGlnbm9yZWQgYW5kIGlzIGFsd2F5cwogKiAicmIiLiBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHppcCBzdXBwb3J0CiAqIGluIFBIUCBpcyByZWFkIG9ubHkgYWNjZXNzLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiA8cD4KICogVW5saWtlIDxiPmZvcGVuPC9iPiBhbmQgb3RoZXIgc2ltaWxhciBmdW5jdGlvbnMsCiAqIHRoZSByZXR1cm4gdmFsdWUgb2YgPGI+emlwX2VudHJ5X29wZW48L2I+IG9ubHkKICogaW5kaWNhdGVzIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbiBhbmQgaXMgbm90IG5lZWRlZCBmb3IKICogcmVhZGluZyBvciBjbG9zaW5nIHRoZSBkaXJlY3RvcnkgZW50cnkuCiAqIDwvcD4KICovCiNbRGVwcmVjYXRlZChyZWFzb246ICdUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlIE9iamVjdCBBUEknLCBzaW5jZTogIjguMCIpXQpmdW5jdGlvbiB6aXBfZW50cnlfb3BlbigkemlwX2RwLCAkemlwX2VudHJ5LCBzdHJpbmcgJG1vZGUgPSAncmInKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNCAmZ3Q7PSA0LjEuMCwgUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgemlwICZndDs9IDEuMC4wKTxici8+CiAqIENsb3NlIGEgZGlyZWN0b3J5IGVudHJ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uemlwLWVudHJ5LWNsb3NlLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHppcF9lbnRyeSA8cD4KICogQSBkaXJlY3RvcnkgZW50cnkgcHJldmlvdXNseSBvcGVuZWQgPGI+emlwX2VudHJ5X29wZW48L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiBAZGVwcmVjYXRlZCA4LjAgVXNlIHtAbGluayBaaXBBcmNoaXZlfSBpbnN0ZWFkLgogKi8KZnVuY3Rpb24gemlwX2VudHJ5X2Nsb3NlKCR6aXBfZW50cnkpOiBib29sIHt9CgovKioKICogKFBIUCA0ICZndDs9IDQuMS4wLCBQSFAgNSAmZ3Q7PSA1LjIuMCwgUEVDTCB6aXAgJmd0Oz0gMS4wLjApPGJyLz4KICogUmVhZCBmcm9tIGFuIG9wZW4gZGlyZWN0b3J5IGVudHJ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uemlwLWVudHJ5LXJlYWQucGhwCiAqIEBwYXJhbSByZXNvdXJjZSAkemlwX2VudHJ5IDxwPgogKiBBIGRpcmVjdG9yeSBlbnRyeSByZXR1cm5lZCBieSA8Yj56aXBfcmVhZDwvYj4uCiAqIDwvcD4KICogQHBhcmFtIGludCAkbGVuIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcmV0dXJuLgogKiA8L3A+CiAqIDxwPgogKiBUaGlzIHNob3VsZCBiZSB0aGUgdW5jb21wcmVzc2VkIGxlbmd0aCB5b3Ugd2lzaCB0byByZWFkLgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIHRoZSBkYXRhIHJlYWQsIGVtcHR5IHN0cmluZyBvbiBlbmQgb2YgYSBmaWxlLCBvciA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqIEBkZXByZWNhdGVkIDguMCBVc2Uge0BsaW5rIFppcEFyY2hpdmV9IGluc3RlYWQuCiAqLwpmdW5jdGlvbiB6aXBfZW50cnlfcmVhZCgkemlwX2VudHJ5LCBpbnQgJGxlbiA9IDEwMjQpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDQgJmd0Oz0gNC4xLjAsIFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXRyaWV2ZSB0aGUgYWN0dWFsIGZpbGUgc2l6ZSBvZiBhIGRpcmVjdG9yeSBlbnRyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnppcC1lbnRyeS1maWxlc2l6ZS5waHAKICogQHBhcmFtIHJlc291cmNlICR6aXBfZW50cnkgPHA+CiAqIEEgZGlyZWN0b3J5IGVudHJ5IHJldHVybmVkIGJ5IDxiPnppcF9yZWFkPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgc2l6ZSBvZiB0aGUgZGlyZWN0b3J5IGVudHJ5LgogKiBAZGVwcmVjYXRlZCA4LjAgVXNlIHtAbGluayBaaXBBcmNoaXZlfSBpbnN0ZWFkLgogKi8KZnVuY3Rpb24gemlwX2VudHJ5X2ZpbGVzaXplKCR6aXBfZW50cnkpOiBpbnR8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDQgJmd0Oz0gNC4xLjAsIFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXRyaWV2ZSB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSBlbnRyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnppcC1lbnRyeS1uYW1lLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHppcF9lbnRyeSA8cD4KICogQSBkaXJlY3RvcnkgZW50cnkgcmV0dXJuZWQgYnkgPGI+emlwX3JlYWQ8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgZW50cnkuCiAqIEBkZXByZWNhdGVkIDguMCBVc2Uge0BsaW5rIFppcEFyY2hpdmV9IGluc3RlYWQuCiAqLwpmdW5jdGlvbiB6aXBfZW50cnlfbmFtZSgkemlwX2VudHJ5KTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogKFBIUCA0ICZndDs9IDQuMS4wLCBQSFAgNSAmZ3Q7PSA1LjIuMCwgUEVDTCB6aXAgJmd0Oz0gMS4wLjApPGJyLz4KICogUmV0cmlldmUgdGhlIGNvbXByZXNzZWQgc2l6ZSBvZiBhIGRpcmVjdG9yeSBlbnRyeQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnppcC1lbnRyeS1jb21wcmVzc2Vkc2l6ZS5waHAKICogQHBhcmFtIHJlc291cmNlICR6aXBfZW50cnkgPHA+CiAqIEEgZGlyZWN0b3J5IGVudHJ5IHJldHVybmVkIGJ5IDxiPnppcF9yZWFkPC9iPi4KICogPC9wPgogKiBAcmV0dXJuIGludHxmYWxzZSBUaGUgY29tcHJlc3NlZCBzaXplLgogKiBAZGVwcmVjYXRlZCA4LjAgVXNlIHtAbGluayBaaXBBcmNoaXZlfSBpbnN0ZWFkLgogKi8KZnVuY3Rpb24gemlwX2VudHJ5X2NvbXByZXNzZWRzaXplKCR6aXBfZW50cnkpOiBpbnR8ZmFsc2Uge30KCi8qKgogKiAoUEhQIDQgJmd0Oz0gNC4xLjAsIFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHppcCAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBSZXRyaWV2ZSB0aGUgY29tcHJlc3Npb24gbWV0aG9kIG9mIGEgZGlyZWN0b3J5IGVudHJ5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uemlwLWVudHJ5LWNvbXByZXNzaW9ubWV0aG9kLnBocAogKiBAcGFyYW0gcmVzb3VyY2UgJHppcF9lbnRyeSA8cD4KICogQSBkaXJlY3RvcnkgZW50cnkgcmV0dXJuZWQgYnkgPGI+emlwX3JlYWQ8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBjb21wcmVzc2lvbiBtZXRob2QuCiAqIEBkZXByZWNhdGVkIDguMCBVc2Uge0BsaW5rIFppcEFyY2hpdmV9IGluc3RlYWQuCiAqLwpmdW5jdGlvbiB6aXBfZW50cnlfY29tcHJlc3Npb25tZXRob2QoJHppcF9lbnRyeSk6IHN0cmluZ3xmYWxzZSB7fQoKLy8gRW5kIG9mIHppcCB2LjEuMTEuMAo8P3BocAoKbmFtZXNwYWNlIGFzdCB7Ci8qKiBNZXRhZGF0YSBlbnRyeSBmb3IgYSBzaW5nbGUgQVNUIGtpbmQsIGFzIHJldHVybmVkIGJ5IGFzdFxnZXRfbWV0YWRhdGEoKS4gKi8KY2xhc3MgTWV0YWRhdGEKewogICAgLyoqIEB2YXIgc3RyaW5nW10gTGlzdCBvZiBzdXBwb3J0ZWQgZmxhZ3MuIFRoZSBmbGFncyBhcmUgZ2l2ZW4gYXMgbmFtZXMgb2YgY29uc3RhbnRzLCBzdWNoIGFzICJhc3RcZmxhZ3NcVFlQRV9TVFJJTkciLiAqLwogICAgcHVibGljICRmbGFnczsKCiAgICAvKiogQHZhciBib29sIFdoZXRoZXIgdGhlIGZsYWdzIGFyZSBleGNsdXNpdmUgb3IgY29tYmluYWJsZS4gRXhjbHVzaXZlIGZsYWdzIHNob3VsZCBiZSBjaGVja2VkIHVzaW5nID09PSwgd2hpbGUgY29tYmluYWJsZSBmbGFncyBzaG91bGQgYmUgY2hlY2tlZCB1c2luZyAmLiAqLwogICAgcHVibGljICRmbGFnc0NvbWJpbmFibGU7CgogICAgLyoqIEB2YXIgaW50IEFTVCBub2RlIGtpbmQgKG9uZSBvZiB0aGUgYGFzdFxBU1RfKmAgY29uc3RhbnRzKS4gKi8KICAgIHB1YmxpYyAka2luZDsKCiAgICAvKiogQHZhciBzdHJpbmcgTmFtZSBvZiB0aGUgbm9kZSBraW5kIChlLmcuICJBU1RfTkFNRSIpLiAqLwogICAgcHVibGljICRuYW1lOwp9CgovKiogVGhpcyBjbGFzcyBkZXNjcmliZXMgYSBzaW5nbGUgbm9kZSBpbiBhIFBIUCBBU1QuICovCmNsYXNzIE5vZGUKewogICAgLyoqIEB2YXIgYXJyYXkgQ2hpbGQgbm9kZXMgKG1heSBiZSBlbXB0eSkgKi8KICAgIHB1YmxpYyAkY2hpbGRyZW47CgogICAgLyoqIEB2YXIgaW50IExpbmUgdGhlIG5vZGUgZW5kcyBvbi4gKi8KICAgIHB1YmxpYyAkZW5kTGluZW5vOwoKICAgIC8qKiBAdmFyIGludCBDZXJ0YWluIG5vZGUga2luZHMgaGF2ZSBmbGFncyB0aGF0IGNhbiBiZSBzZXQuIFRoZXNlIHdpbGwgYmUgYSBiaXRmaWVsZCBvZiBgYXN0XGZsYWdzXCpgIGNvbnN0YW50cy4gKi8KICAgIHB1YmxpYyAkZmxhZ3M7CgogICAgLyoqIEB2YXIgaW50IEFTVCBOb2RlIEtpbmQuIFZhbHVlcyBhcmUgb25lIG9mIGBhc3RcQVNUXypgIGNvbnN0YW50cy4gKi8KICAgIHB1YmxpYyAka2luZDsKCiAgICAvKiogQHZhciBpbnQgTGluZSB0aGUgbm9kZSBzdGFydHMgb24uICovCiAgICBwdWJsaWMgJGxpbmVubzsKCiAgICAvKioKICAgICAqIEEgY29uc3RydWN0b3Igd2hpY2ggYWNjZXB0cyBhbnkgdHlwZXMgZm9yIHRoZSBwcm9wZXJ0aWVzLgogICAgICogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIGFsbCB2YWx1ZXMgYXJlIG9wdGlvbmFsIGFuZCBjYW4gYmUgYW55IHR5cGUsIGFuZCBwcm9wZXJ0aWVzIGRlZmF1bHQgdG8gbnVsbC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50fG51bGwgJGtpbmQKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkZmxhZ3MKICAgICAqIEBwYXJhbSBhcnJheXxudWxsICRjaGlsZHJlbgogICAgICogQHBhcmFtIGludHxudWxsICRsaW5lbm8KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9pbnQgJGtpbmQgPSBudWxsLCA/aW50ICRmbGFncyA9IG51bGwsID9hcnJheSAkY2hpbGRyZW4gPSBudWxsLCA/aW50ICRsaW5lbm8gPSBudWxsKSB7fQp9CgovKioKICogQHBhcmFtIGludCAka2luZCBBU1RfKiBjb25zdGFudCB2YWx1ZSBkZWZpbmluZyB0aGUga2luZCBvZiBhbiBBU1Qgbm9kZQogKiBAcmV0dXJuIHN0cmluZyBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgQVNUIGtpbmQgdmFsdWUKICovCmZ1bmN0aW9uIGdldF9raW5kX25hbWUoaW50ICRraW5kKTogc3RyaW5nIHt9Ci8qKgogKiBQcm92aWRlcyBtZXRhZGF0YSBmb3IgdGhlIEFTVCBraW5kcy4KICoKICogVGhlIHJldHVybmVkIGFycmF5IGlzIGEgbWFwIGZyb20gQVNUIGtpbmQgdG8gYSBNZXRhZGF0YSBvYmplY3QuCiAqCiAqIEByZXR1cm4gTWV0YWRhdGFbXSBNZXRhZGF0YSBhYm91dCBBU1Qga2luZHMKICovCmZ1bmN0aW9uIGdldF9tZXRhZGF0YSgpOiBhcnJheSB7fQovKioKICogUmV0dXJucyBjdXJyZW50bHkgc3VwcG9ydGVkIEFTVCB2ZXJzaW9ucy4KICoKICogQHBhcmFtIGJvb2wgJGV4Y2x1ZGVfZGVwcmVjYXRlZCBXaGV0aGVyIHRvIGV4Y2x1ZGUgZGVwcmVjYXRlZCB2ZXJzaW9ucwogKiBAcmV0dXJuIGludFtdIEFycmF5IG9mIHN1cHBvcnRlZCBBU1QgdmVyc2lvbnMKICovCmZ1bmN0aW9uIGdldF9zdXBwb3J0ZWRfdmVyc2lvbnMoYm9vbCAkZXhjbHVkZV9kZXByZWNhdGVkID0gZmFsc2UpOiBhcnJheSB7fQovKioKICogQHBhcmFtIGludCAka2luZCBBU1RfKiBjb25zdGFudCB2YWx1ZSBkZWZpbmluZyB0aGUga2luZCBvZiBhbiBBU1Qgbm9kZQogKiBAcmV0dXJuIGJvb2wgUmV0dXJucyB0cnVlIGlmIEFTVCBraW5kIHVzZXMgZmxhZ3MKICovCmZ1bmN0aW9uIGtpbmRfdXNlc19mbGFncyhpbnQgJGtpbmQpOiBib29sIHt9Ci8qKgogKiBQYXJzZXMgY29kZSBzdHJpbmcgYW5kIHJldHVybnMgYW4gQVNUIHJvb3Qgbm9kZS4KICoKICogQHBhcmFtIHN0cmluZyAkY29kZSBDb2RlIHRvIHBhcnNlCiAqIEBwYXJhbSBpbnQgICAgJHZlcnNpb24gIEFTVCB2ZXJzaW9uCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIGZpbGUgbmFtZSBmb3IgUGFyc2VFcnJvciBtZXNzYWdlcwogKiBAcmV0dXJuIE5vZGUgUm9vdCBub2RlIG9mIEFTVAogKgogKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uaWtpYy9waHAtYXN0IGZvciB2ZXJzaW9uIGluZm9ybWF0aW9uCiAqLwpmdW5jdGlvbiBwYXJzZV9jb2RlKHN0cmluZyAkY29kZSwgaW50ICR2ZXJzaW9uLCBzdHJpbmcgJGZpbGVuYW1lID0gJ3N0cmluZyBjb2RlJyk6IE5vZGUge30KLyoqCiAqIFBhcnNlcyBjb2RlIGZyb20gYSBmaWxlIGFuZCByZXR1cm5zIGFuIEFTVCByb290IG5vZGUuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIGZpbGUgbmFtZSB0byBwYXJzZQogKiBAcGFyYW0gaW50ICAgICR2ZXJzaW9uICBBU1QgdmVyc2lvbgogKiBAcmV0dXJuIE5vZGUgUm9vdCBub2RlIG9mIEFTVAogKgogKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uaWtpYy9waHAtYXN0IGZvciB2ZXJzaW9uIGluZm9ybWF0aW9uCiAqLwpmdW5jdGlvbiBwYXJzZV9maWxlKHN0cmluZyAkZmlsZW5hbWUsIGludCAkdmVyc2lvbik6IE5vZGUge30KLyoqIE51bWVyaWNhbGx5IGluZGV4ZWQgY2hpbGRyZW4gb2YgYW4gYXJndW1lbnQgbGlzdCBvZiBhIGZ1bmN0aW9uL21ldGhvZCBpbnZvY2F0aW9uICovCmNvbnN0IEFTVF9BUkdfTElTVCA9IDEyODsKLyoqIE51bWVyaWNhbGx5IGluZGV4ZWQgY2hpbGRyZW4gb2YgYW4gYXJyYXkgbGl0ZXJhbC4gKi8KY29uc3QgQVNUX0FSUkFZID0gMTI5OwovKiogQW4gZWxlbWVudCBvZiBhbiBhcnJheSBsaXRlcmFsLiBUaGUga2V5IGlzIGBudWxsYCBpZiB0aGVyZSBpcyBubyBrZXkgKGNoaWxkcmVuOiB2YWx1ZSwga2V5KSAqLwpjb25zdCBBU1RfQVJSQVlfRUxFTSA9IDUyNjsKLyoqIEEgc2hvcnQgYXJyb3cgZnVuY3Rpb24gZGVjbGFyYXRpb24uIChjaGlsZHJlbjogbmFtZSwgZG9jQ29tbWVudCwgcGFyYW1zLCBzdG10cywgcmV0dXJuVHlwZSwgX19kZWNsSWQpICovCmNvbnN0IEFTVF9BUlJPV19GVU5DID0gNzE7Ci8qKiBBbiBhc3NpZ25tZW50IG9mIHRoZSBmb3JtIGB2YXIgPSBleHByYCAoY2hpbGRyZW46IHZhciwgZXhwcikgKi8KY29uc3QgQVNUX0FTU0lHTiA9IDUxODsKLyoqIEFuIGFzc2lnbm1lbnQgb3BlcmF0aW9uIG9mIHRoZSBmb3JtIGB2YXIgb3A9IGV4cHJgLiBUaGUgb3BlcmF0aW9uIGlzIGRldGVybWluZWQgYnkgdGhlIGZsYWdzIGBhc3RcZmxhZ3NcQklOQVJZXypgIChjaGlsZHJlbjogdmFyLCBleHByKSAqLwpjb25zdCBBU1RfQVNTSUdOX09QID0gNTIwOwovKiogQW4gYXNzaWdubWVudCBieSByZWZlcmVuY2UsIG9mIHRoZSBmb3JtIGB2YXIgPSYgZXhwcmAuIChjaGlsZHJlbjogdmFyLCBleHByKSAqLwpjb25zdCBBU1RfQVNTSUdOX1JFRiA9IDUxOTsKLyoqIEEgc2luZ2xlIGF0dHJpYnV0ZSBvZiBhbiBlbGVtZW50IG9mIHRoZSBmb3JtIGBjbGFzcyhhcmdzKWAgKGNoaWxkcmVuOiBjbGFzcywgYXJncykgKi8KY29uc3QgQVNUX0FUVFJJQlVURSA9IDU0NzsKLyoqIE51bWVyaWNhbGx5IGluZGV4ZWQgYXN0XEFTVF9BVFRSSUJVVEUgY2hpbGRyZW4gb2YgYW4gYXR0cmlidXRlIGdyb3VwICovCmNvbnN0IEFTVF9BVFRSSUJVVEVfR1JPVVAgPSAxNDY7Ci8qKiBOdW1lcmljYWxseSBpbmRleGVkIGFzdFxBU1RfQVRUUklCVVRFX0dST1VQIGNoaWxkcmVuIG9mIGFuIGF0dHJpYnV0ZSBsaXN0IG9mIGFuIGVsZW1lbnQgKi8KY29uc3QgQVNUX0FUVFJJQlVURV9MSVNUID0gMTQ1OwovKiogQSBiaW5hcnkgb3BlcmF0aW9uIG9mIHRoZSBmb3JtIGBsZWZ0IG9wIHJpZ2h0YC4gVGhlIG9wZXJhdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmbGFncyBgYXN0XGZsYWdzXEJJTkFSWV8qYCAoY2hpbGRyZW46IGxlZnQsIHJpZ2h0KSAqLwpjb25zdCBBU1RfQklOQVJZX09QID0gNTIxOwovKiogQSBicmVhayBzdGF0ZW1lbnQuIFRoZSBkZXB0aCBpcyBudWxsIG9yIGFuIGludGVnZXIuIChjaGlsZHJlbjogZGVwdGgpICovCmNvbnN0IEFTVF9CUkVBSyA9IDI4NjsKLyoqIEEgZ2xvYmFsIGZ1bmN0aW9uIGludm9jYXRpb24gb2YgdGhlIGZvcm0gYGV4cHIoYXJncylgIChjaGlsZHJlbjogZXhwciwgYXJncykgKi8KY29uc3QgQVNUX0NBTEwgPSA1MTY7Ci8qKiBBIGNhc3Qgb3BlcmF0aW9uIG9mIHRoZSBmb3JtIGAodHlwZSlleHByYC4gVGhlIGZsYWdzIGFyZSB0aGUgdHlwZTogYGFzdFxmbGFnc1xUWVBFXypgIChjaGlsZHJlbjogZXhwcikgKi8KY29uc3QgQVNUX0NBU1QgPSAyNjE7Ci8qKiBBbiBpbmRpdmlkdWFsIGNhdGNoIGJsb2NrIGNhdGNoaW5nIGFuIGBhc3RcQVNUX0NMQVNTX0xJU1RgIG9mIHBvc3NpYmxlIGNsYXNzZXMuIFRoaXMgaXMgb2YgdGhlIGZvcm0gYGNhdGNoKGNsYXNzIHZhcikgeyBzdG10cyB9YC4gKGNoaWxkcmVuOiBjbGFzcywgdmFyLCBzdG10cykgKi8KY29uc3QgQVNUX0NBVENIID0gNzczOwovKiogQSBsaXN0IG9mIDEgb3IgbW9yZSBgYXN0XEFTVF9DQVRDSGAgbm9kZXMgZm9yIGEgdHJ5IHN0YXRlbWVudC4gKG51bWVyaWNhbGx5IGluZGV4ZWQgY2hpbGRyZW4pICovCmNvbnN0IEFTVF9DQVRDSF9MSVNUID0gMTM1OwovKiogQSBjbGFzcyBkZWNsYXJhdGlvbiBvZiB0aGUgZm9ybSBgZG9jQ29tbWVudCBuYW1lIEVYVEVORFMgZXh0ZW5kcyBJTVBMRU1FTlRTIGltcGxlbWVudHMgeyBzdG10cyB9YCAoY2hpbGRyZW46IG5hbWUsIGRvY0NvbW1lbnQsIGV4dGVuZHMsIGltcGxlbWVudHMsIHN0bXRzLCBfX2RlY2xJZCkgKi8KY29uc3QgQVNUX0NMQVNTID0gNzA7Ci8qKiBBIGNsYXNzIGNvbnN0YW50IHVzYWdlIG9mIHRoZSBmb3JtIGBjbGFzczo6Y29uc3RgLiAoY2hpbGRyZW46IGNsYXNzLCBjb25zdCkgKi8KY29uc3QgQVNUX0NMQVNTX0NPTlNUID0gNTE3OwovKiogQSBjbGFzcyBjb25zdGFudCBkZWNsYXJhdGlvbiB3aXRoIG9uZSBvciBtb3JlIGNsYXNzIGNvbnN0YW50cy4gKG51bWVyaWNhbGx5IGluZGV4ZWQgY2hpbGRyZW4pICovCmNvbnN0IEFTVF9DTEFTU19DT05TVF9ERUNMID0gMTQwOwovKiogQSBjbGFzcyBjb25zdGFudCBkZWNsYXJhdGlvbiB3aXRoIGF0dHJpYnV0ZXMgYW5kIHRoZSBsaXN0IG9mIG9uZSBvciBtb3JlIGNsYXNzIGNvbnN0YW50cy4gKGNoaWxkcmVuOiBjb25zdCwgYXR0cmlidXRlcykgKi8KY29uc3QgQVNUX0NMQVNTX0NPTlNUX0dST1VQID0gNTQ2OwovKiogQSB1c2FnZSBvZiBgY2xhc3M6OkNMQVNTYCBpbiBBU1QgdmVyc2lvbiA3MCAoY2hpbGRyZW46IGNsYXNzKSAqLwpjb25zdCBBU1RfQ0xBU1NfTkFNRSA9IDI3NjsKLyoqIEFuIGV4cHJlc3Npb24gY2xvbmluZyBhbiBvYmplY3QsIG9mIHRoZSBmb3JtIGBjbG9uZShleHByKWAuIChjaGlsZHJlbjogZXhwcikgKi8KY29uc3QgQVNUX0NMT05FID0gMjY2OwovKiogQSBjbG9zdXJlIGRlY2xhcmF0aW9uLiAoY2hpbGRyZW46IG5hbWUsIGRvY0NvbW1lbnQsIHBhcmFtcywgdXNlcywgc3RtdHMsIHJldHVyblR5cGUsIF9fZGVjbElkKSAqLwpjb25zdCBBU1RfQ0xPU1VSRSA9IDY4OwovKiogQSBsaXN0IG9mIG9uZSBvciBtb3JlIG5vZGVzIG9mIHR5cGUgYGFzdFxBU1RfQ0xPU1VSRV9WQVJgIGZvciBhIGNsb3N1cmUgZGVjbGFyYXRpb24uIChudW1lcmljYWxseSBpbmRleGVkIGNoaWxkcmVuKSAqLwpjb25zdCBBU1RfQ0xPU1VSRV9VU0VTID0gMTM3OwovKiogQSB2YXJpYWJsZSBpbiB0aGUgbGlzdCBvZiBgdXNlc2Agb2YgYSBjbG9zdXJlIGRlY2xhcmF0aW9uLiAoY2hpbGRyZW46IG5hbWUpICovCmNvbnN0IEFTVF9DTE9TVVJFX1ZBUiA9IDIwNDk7Ci8qKiBBIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYGNvbmQgPyB0cnVlIDogZmFsc2VgIG9yIGBjb25kID86IGZhbHNlYC4gKGNoaWxkcmVuOiBjb25kLCB0cnVlLCBmYWxzZSkgKi8KY29uc3QgQVNUX0NPTkRJVElPTkFMID0gNzcxOwovKiogQSB1c2FnZSBvZiBhIGdsb2JhbCBjb25zdGFudCBgbmFtZWAuIChjaGlsZHJlbjogbmFtZSkgKi8KY29uc3QgQVNUX0NPTlNUID0gMjU3OwovKiogQSBkZWNsYXJhdGlvbiBvZiBhIGdyb3VwIG9mIGNsYXNzIGNvbnN0YW50cyBvZiBraW5kIGBhc3RcQVNUX0NPTlNUX0VMRU1gLiAobnVtZXJpY2FsbHkgaW5kZXhlZCBjaGlsZHJlbikgKi8KY29uc3QgQVNUX0NPTlNUX0RFQ0wgPSAxMzk7Ci8qKiBBIGRlY2xhcmF0aW9uIG9mIGEgY2xhc3MgY29uc3RhbnQuIChjaGlsZHJlbjogbmFtZSwgdmFsdWUsIGRvY0NvbW1lbnQpICovCmNvbnN0IEFTVF9DT05TVF9FTEVNID0gNzc2OwovKiogQSBjb250aW51ZSBzdGF0ZW1lbnQgd2l0aCBhIGRlcHRoIG9mIGBudWxsYCBvciBhbiBpbnRlZ2VyLiAoY2hpbGRyZW46IGRlcHRoKSAqLwpjb25zdCBBU1RfQ09OVElOVUUgPSAyODc7Ci8qKiBBIGRlY2xhcmUgc3RhdGVtZW50IGF0IHRoZSB0b3Agb2YgYSBwaHAgZmlsZSAoY2hpbGRyZW46IGRlY2xhcmVzLCBzdG10cykgKi8KY29uc3QgQVNUX0RFQ0xBUkUgPSA1Mzg7Ci8qKiBBIHVzYWdlIG9mIGFuIGFycmF5L2FycmF5LWxpa2UgZmllbGQsIG9mIHRoZSBmb3JtIGBleHByW2RpbV1gIChjaGlsZHJlbjogZXhwciwgZGltKSAqLwpjb25zdCBBU1RfRElNID0gNTEyOwovKiogQSBkby13aGlsZSBzdGF0ZW1lbnQgb2YgdGhlIGZvcm0gYGRvIHtzdG10c30gd2hpbGUgKGNvbmQpO2AuIChjaGlsZHJlbjogc3RtdHMsIGNvbmQpICovCmNvbnN0IEFTVF9ET19XSElMRSA9IDUzNDsKLyoqIEFuIGVjaG8gc3RhdGVtZW50IG9yIGlubGluZSBIVE1MIChjaGlsZHJlbjogZXhwcikgKi8KY29uc3QgQVNUX0VDSE8gPSAyODM7Ci8qKiBBbiBgZW1wdHkoZXhwcilgIGV4cHJlc3Npb24gKGNoaWxkcmVuOiBleHByKSAqLwpjb25zdCBBU1RfRU1QVFkgPSAyNjI7Ci8qKiBpbnRlcnBvbGF0ZWQgc3RyaW5nIHdpdGggbm9uLWxpdGVyYWxzLCBlLmcuIGAiZm9vJGJhciJgIG9yIGhlcmVkb2MgKG51bWVyaWNhbGx5IGluZGV4ZWQgY2hpbGRyZW4pICovCmNvbnN0IEFTVF9FTkNBUFNfTElTVCA9IDEzMDsKLyoqIEFuIGBleGl0YC9gZGllYCBzdGF0ZW1lbnQuIChjaGlsZHJlbjogZXhwcikgKi8KY29uc3QgQVNUX0VYSVQgPSAyNjc7Ci8qKiBBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zLCBlLmcuIGZvciB0aGUgY29uZGl0aW9uIG9mIGEgYGZvcmAgbG9vcC4gKG51bWVyaWNhbGx5IGluZGV4ZWQgY2hpbGRyZW4pICovCmNvbnN0IEFTVF9FWFBSX0xJU1QgPSAxMzE7Ci8qKiBBIGZvciBsb29wIG9mIHRoZSBmb3JtIGBmb3IgKGluaXQ7IGNvbmQ7IGxvb3ApIHsgc3RtdHM7IH1gLiAoY2hpbGRyZW46IGluaXQsIGNvbmQsIGxvb3AsIHN0bXRzKSAqLwpjb25zdCBBU1RfRk9SID0gMTAyNDsKLyoqIEEgZm9yZWFjaCBsb29wIG9mIHRoZSBmb3JtIGBmb3JlYWNoIChleHByIGFzIFtrZXkgPT5dIHZhbHVlKSB7c3RtdHN9IChjaGlsZHJlbjogZXhwciwgdmFsdWUsIGtleSwgc3RtdHMpICovCmNvbnN0IEFTVF9GT1JFQUNIID0gMTAyNTsKLyoqIEEgZ2xvYmFsIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiAoY2hpbGRyZW46IG5hbWUsIGRvY0NvbW1lbnQsIHBhcmFtcywgc3RtdHMsIHJldHVyblR5cGUsIF9fZGVjbElkKSAqLwpjb25zdCBBU1RfRlVOQ19ERUNMID0gNjc7Ci8qKiBBIHVzYWdlIG9mIGEgZ2xvYmFsIHZhcmlhYmxlIG9mIHRoZSBmb3JtIGBnbG9iYWwgdmFyYC4gKGNoaWxkcmVuOiB2YXIpICovCmNvbnN0IEFTVF9HTE9CQUwgPSAyNzc7Ci8qKiBBIGdvdG8gc3RhdGVtZW50IG9mIHRoZSBmb3JtIGBnb3RvIGxhYmVsO2AgKGNoaWxkcmVuOiBsYWJlbCkgKi8KY29uc3QgQVNUX0dPVE8gPSAyODU7Ci8qKiBBIHVzZSBzdGF0ZW1lbnQgKGZvciBjbGFzc2VzLCBuYW1lc3BhY2VzLCBmdW5jdGlvbnMsIGFuZC9vciBjb25zdGFudHMpIGNvbnRhaW5pbmcgYSBsaXN0IG9mIG9uZSBvciBtb3JlIGVsZW1lbnRzLiAoY2hpbGRyZW46IHByZWZpeCwgdXNlcykgKi8KY29uc3QgQVNUX0dST1VQX1VTRSA9IDU0NTsKLyoqIEEgYF9faGFsdF9jb21waWxlcjtgIHN0YXRlbWVudC4gKGNoaWxkcmVuOiBvZmZzZXQpICovCmNvbnN0IEFTVF9IQUxUX0NPTVBJTEVSID0gMjgyOwovKiogQSBsaXN0IG9mIGBhc3RcQVNUX0lGX0VMRU1gIG5vZGVzIGZvciBhIGNoYWluIG9mIDEgb3IgbW9yZSBgaWZgL2BlbHNlaWZgL2BlbHNlYCBzdGF0ZW1lbnRzIChudW1lcmljYWxseSBpbmRleGVkIGNoaWxkcmVuKSAqLwpjb25zdCBBU1RfSUYgPSAxMzM7Ci8qKiBBbiBgaWZgL2BlbHNlaWZgL2BlbHNlaWZgIHN0YXRlbWVudCBvZiB0aGUgZm9ybSBgaWYgKGNvbmQpIHN0bXRzYCAoY2hpbGRyZW46IGNvbmQsIHN0bXRzKSAqLwpjb25zdCBBU1RfSUZfRUxFTSA9IDUzNTsKLyoqIEFuIGBpbmNsdWRlKihleHByKWAsIGByZXF1aXJlKihleHByKWAsIG9yIGBldmFsKGV4cHIpYCBzdGF0ZW1lbnQuIFRoZSB0eXBlIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIGZsYWdzIChgYXN0XGZsYWdzXEVYRUNfKmApLiAoY2hpbGRyZW46IGV4cHIpICovCmNvbnN0IEFTVF9JTkNMVURFX09SX0VWQUwgPSAyNjk7Ci8qKiBBbiBgZXhwciBpbnN0YW5jZW9mIGNsYXNzYCBleHByZXNzaW9uLiAoY2hpbGRyZW46IGV4cHIsIGNsYXNzKSAqLwpjb25zdCBBU1RfSU5TVEFOQ0VPRiA9IDUyODsKLyoqIEFuIGBpc3NldCh2YXIpYCBleHByZXNzaW9uLiAoY2hpbGRyZW46IHZhcikgKi8KY29uc3QgQVNUX0lTU0VUID0gMjYzOwovKiogQSBgbmFtZTpgIGV4cHJlc3Npb24gKGEgdGFyZ2V0IGZvciBgZ290byBuYW1lYCkuIChjaGlsZHJlbjogbmFtZSkgKi8KY29uc3QgQVNUX0xBQkVMID0gMjgwOwovKiogVXNlZCBmb3IgYGxpc3QoKSA9IGAgdW5wYWNraW5nLCBldGMuIFByZWRhdGVzIEFTVCB2ZXJzaW9uIDUwLiAobnVtZXJpY2FsbHkgaW5kZXhlZCBjaGlsZHJlbikgKi8KY29uc3QgQVNUX0xJU1QgPSAyNTU7Ci8qKiBBIG1hZ2ljIGNvbnN0YW50IChkZXBlbmRzIG9uIGZsYWdzIHRoYXQgYXJlIG9uZSBvZiBgYXN0XGZsYWdzXE1BR0lDXypgKSAqLwpjb25zdCBBU1RfTUFHSUNfQ09OU1QgPSAwOwovKiogQSBtYXRjaCBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBtYXRjaChjb25kKSB7IHN0bXRzIH1gIChjaGlsZHJlbjogY29uZCwgc3RtdHMpICovCmNvbnN0IEFTVF9NQVRDSCA9IDU0ODsKLyoqIEFuIGFybSBvZiBhIG1hdGNoIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYGNvbmQgPT4gZXhwcmAgKGNoaWxkcmVuOiBjb25kLCBleHByKSAqLwpjb25zdCBBU1RfTUFUQ0hfQVJNID0gNTQ5OwovKiogTnVtZXJpY2FsbHkgaW5kZXhlZCBjaGlsZHJlbiBvZiB0aGUga2luZCBgYXN0XEFTVF9NQVRDSF9BUk1gIGZvciB0aGUgc3RhdGVtZW50cyBvZiBhIG1hdGNoIGV4cHJlc3Npb24gKi8KY29uc3QgQVNUX01BVENIX0FSTV9MSVNUID0gMTQ3OwovKiogQSBtZXRob2QgZGVjbGFyYXRpb24uIChjaGlsZHJlbjogbmFtZSwgZG9jQ29tbWVudCwgcGFyYW1zLCBzdG10cywgcmV0dXJuVHlwZSwgX19kZWNsSWQpICovCmNvbnN0IEFTVF9NRVRIT0QgPSA2OTsKLyoqIEFuIGludm9jYXRpb24gb2YgYW4gaW5zdGFuY2UgbWV0aG9kLCBvZiB0aGUgZm9ybSBgZXhwci0+bWV0aG9kKGFyZ3MpYCAoY2hpbGRyZW46IGV4cHIsIG1ldGhvZCwgYXJncykgKi8KY29uc3QgQVNUX01FVEhPRF9DQUxMID0gNzY4OwovKiogQSByZWZlcmVuY2UgdG8gYSBtZXRob2Qgd2hlbiB1c2luZyBhIHRyYWl0IGluc2lkZSBhIGNsYXNzIGRlY2xhcmF0aW9uLiAoY2hpbGRyZW46IGNsYXNzLCBtZXRob2QpICovCmNvbnN0IEFTVF9NRVRIT0RfUkVGRVJFTkNFID0gNTQxOwovKiogQSBuYW1lIHRva2VuIChlLmcuIG9mIGEgY29uc3RhbnQvY2xhc3MvY2xhc3MgdHlwZSkgKGNoaWxkcmVuOiBuYW1lKSAqLwpjb25zdCBBU1RfTkFNRSA9IDIwNDg7Ci8qKiBBIG5hbWVkIGFyZ3VtZW50IGluIGFuIGFyZ3VtZW50IGxpc3Qgb2YgYSBmdW5jdGlvbi9tZXRob2QgY2FsbC4gKGNoaWxkcmVuOiBuYW1lLCBleHByKSAqLwpjb25zdCBBU1RfTkFNRURfQVJHID0gNTUwOwovKiogQSBuYW1lc3BhY2UgZGVjbGFyYXRpb24gb2YgdGhlIGZvcm0gYG5hbWVzcGFjZSBuYW1lO2Agb3IgYG5hbWVzcGFjZSBuYW1lIHsgc3RtdHMgfWAuIChjaGlsZHJlbjogbmFtZSwgc3RtdHMpICovCmNvbnN0IEFTVF9OQU1FU1BBQ0UgPSA1NDI7Ci8qKiBBIGxpc3Qgb2YgbmFtZXMgKGUuZy4gZm9yIGNhdGNoaW5nIG11bHRpcGxlIGNsYXNzZXMgaW4gYSBgY2F0Y2hgIHN0YXRlbWVudCkgKG51bWVyaWNhbGx5IGluZGV4ZWQgY2hpbGRyZW4pICovCmNvbnN0IEFTVF9OQU1FX0xJU1QgPSAxNDE7Ci8qKiBBbiBvYmplY3QgY3JlYXRpb24gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgbmV3IGNsYXNzKGFyZ3MpYCAoY2hpbGRyZW46IGNsYXNzLCBhcmdzKSAqLwpjb25zdCBBU1RfTkVXID0gNTI3OwovKiogQSBudWxsYWJsZSBub2RlIHdpdGggYSBjaGlsZCBub2RlIG9mIGtpbmQgYGFzdFxBU1RfVFlQRWAgb3IgYGFzdFxBU1RfTkFNRWAgKGNoaWxkcmVuOiB0eXBlKSAqLwpjb25zdCBBU1RfTlVMTEFCTEVfVFlQRSA9IDIwNTA7Ci8qKiBBIG51bGxzYWZlIG1ldGhvZCBjYWxsIG9mIHRoZSBmb3JtIGBleHByPy0+bWV0aG9kKGFyZ3MpYC4gKGNoaWxkcmVuOiBleHByLCBtZXRob2QsIGFyZ3MpICovCmNvbnN0IEFTVF9OVUxMU0FGRV9NRVRIT0RfQ0FMTCA9IDc2OTsKLyoqIEEgbnVsbHNhZmUgcHJvcGVydHkgcmVhZCBvZiB0aGUgZm9ybSBgZXhwcj8tPnByb3BgLiAoY2hpbGRyZW46IGV4cHIsIHByb3ApICovCmNvbnN0IEFTVF9OVUxMU0FGRV9QUk9QID0gNTE0OwovKiogQSBwYXJhbWV0ZXIgb2YgYSBmdW5jdGlvbiwgY2xvc3VyZSwgb3IgbWV0aG9kIGRlY2xhcmF0aW9uLiAoY2hpbGRyZW46IHR5cGUsIG5hbWUsIGRlZmF1bHQpICovCmNvbnN0IEFTVF9QQVJBTSA9IDEyODA7Ci8qKiBUaGUgbGlzdCBvZiBwYXJhbWV0ZXJzIG9mIGEgZnVuY3Rpb24sIGNsb3N1cmUsIG9yIG1ldGhvZCBkZWNsYXJhdGlvbi4gKG51bWVyaWNhbGx5IGluZGV4ZWQgY2hpbGRyZW4pICovCmNvbnN0IEFTVF9QQVJBTV9MSVNUID0gMTM2OwovKiogQSBgdmFyLS1gIGV4cHJlc3Npb24uIChjaGlsZHJlbjogdmFyKSAqLwpjb25zdCBBU1RfUE9TVF9ERUMgPSAyNzQ7Ci8qKiBBIGB2YXIrK2AgZXhwcmVzc2lvbi4gKGNoaWxkcmVuOiB2YXIpICovCmNvbnN0IEFTVF9QT1NUX0lOQyA9IDI3MzsKLyoqIEEgYC0tdmFyYCBleHByZXNzaW9uLiAoY2hpbGRyZW46IHZhcikgKi8KY29uc3QgQVNUX1BSRV9ERUMgPSAyNzI7Ci8qKiBBIGArK3ZhcmAgZXhwcmVzc2lvbi4gKGNoaWxkcmVuOiB2YXIpICovCmNvbnN0IEFTVF9QUkVfSU5DID0gMjcxOwovKiogQSBgcHJpbnQgZXhwcmAgZXhwcmVzc2lvbi4gIChjaGlsZHJlbjogZXhwcikgKi8KY29uc3QgQVNUX1BSSU5UID0gMjY4OwovKiogQW4gaW5zdGFuY2UgcHJvcGVydHkgdXNhZ2Ugb2YgdGhlIGZvcm0gYGV4cHItPnByb3BgIChjaGlsZHJlbjogZXhwciwgcHJvcCkgKi8KY29uc3QgQVNUX1BST1AgPSA1MTM7Ci8qKiBBIHNpbmdsZSBncm91cCBvZiBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgaW5zaWRlIGEgY2xhc3MuIChudW1lcmljYWxseSBpbmRleGVkIGNoaWxkcmVuKSAqLwpjb25zdCBBU1RfUFJPUF9ERUNMID0gMTM4OwovKiogQSBjbGFzcyBwcm9wZXJ0eSBkZWNsYXJhdGlvbi4gKGNoaWxkcmVuOiBuYW1lLCBkZWZhdWx0LCBkb2NDb21tZW50KSAqLwpjb25zdCBBU1RfUFJPUF9FTEVNID0gNzc1OwovKiogQSBjbGFzcyBwcm9wZXJ0eSBncm91cCBkZWNsYXJhdGlvbiB3aXRoIG9wdGlvbmFsIHR5cGUgaW5mb3JtYXRpb24gZm9yIHRoZSBncm91cCAoaW4gUEhQIDcuNCspLiBVc2VkIGluIEFTVCB2ZXJzaW9uIDcwKyAoY2hpbGRyZW46IHR5cGUsIHByb3BzLCBfX2RlY2xJZCkgKi8KY29uc3QgQVNUX1BST1BfR1JPVVAgPSA3NzQ7Ci8qKiBVc2VkIGZvciBgJiR2YCBpbiBgZm9yZWFjaCAoJGEgYXMgJiR2KWAgKGNoaWxkcmVuOiB2YXIpICovCmNvbnN0IEFTVF9SRUYgPSAyODE7Ci8qKiBBIGByZXR1cm47YCBvciBgcmV0dXJuIGV4cHJgIHN0YXRlbWVudC4gKGNoaWxkcmVuOiBleHByKSAqLwpjb25zdCBBU1RfUkVUVVJOID0gMjc5OwovKiogQSBgXGBzb21lX3NoZWxsX2NvbW1hbmRcYGAgZXhwcmVzc2lvbi4gKGNoaWxkcmVuOiBleHByKSAqLwpjb25zdCBBU1RfU0hFTExfRVhFQyA9IDI2NTsKLyoqIEEgZGVjbGFyYXRpb24gb2YgYSBzdGF0aWMgbG9jYWwgdmFyaWFibGUgb2YgdGhlIGZvcm0gYHN0YXRpYyB2YXIgPSBkZWZhdWx0YC4gKGNoaWxkcmVuOiB2YXIsIGRlZmF1bHQpICovCmNvbnN0IEFTVF9TVEFUSUMgPSA1MzI7Ci8qKiBBIGNhbGwgb2YgYSBzdGF0aWMgbWV0aG9kLCBvZiB0aGUgZm9ybSBgY2xhc3M6Om1ldGhvZChhcmdzKWAuIChjaGlsZHJlbjogY2xhc3MsIG1ldGhvZCwgYXJncykgKi8KY29uc3QgQVNUX1NUQVRJQ19DQUxMID0gNzcwOwovKiogQSB1c2FnZSBvZiBhIHN0YXRpYyBwcm9wZXJ0eSwgb2YgdGhlIGZvcm0gYGNsYXNzOjpwcm9wYC4gKGNoaWxkcmVuOiBjbGFzcywgcHJvcCkgKi8KY29uc3QgQVNUX1NUQVRJQ19QUk9QID0gNTE1OwovKiogQSBsaXN0IG9mIHN0YXRlbWVudHMuIFRoZSBzdGF0ZW1lbnRzIGFyZSB1c3VhbGx5IG5vZGVzIGJ1dCBjYW4gYmUgbm9uLW5vZGVzLCBlLmcuIGA7MjtgLiAobnVtZXJpY2FsbHkgaW5kZXhlZCBjaGlsZHJlbikgKi8KY29uc3QgQVNUX1NUTVRfTElTVCA9IDEzMjsKLyoqIEEgc3dpdGNoIHN0YXRlbWVudCBvZiB0aGUgZm9ybSBgc3dpdGNoKGNvbmQpIHsgc3RtdHMgfWAuIGBzdG10c2AgaXMgYSBub2RlIG9mIHRoZSBraW5kIGBhc3RcQVNUX1NXSVRDSF9MSVNUYC4gKGNoaWxkcmVuOiBjb25kLCBzdG10cykgKi8KY29uc3QgQVNUX1NXSVRDSCA9IDUzNjsKLyoqIEEgY2FzZSBzdGF0ZW1lbnQgb2YgYSBzd2l0Y2gsIG9mIHRoZSBmb3JtIGBjYXNlIGNvbmQ6IHN0bXRzYCAoY2hpbGRyZW46IGNvbmQsIHN0bXRzKSAqLwpjb25zdCBBU1RfU1dJVENIX0NBU0UgPSA1Mzc7Ci8qKiBUaGUgZnVsbCBsaXN0IG9mIG5vZGVzIGluc2lkZSBhIHN3aXRjaCBzdGF0ZW1lbnQgYm9keSwgZWFjaCBvZiBraW5kIGBhc3RcQVNUX1NXSVRDSF9DQVNFYC4gKG51bWVyaWNhbGx5IGluZGV4ZWQgY2hpbGRyZW4pICovCmNvbnN0IEFTVF9TV0lUQ0hfTElTVCA9IDEzNDsKLyoqIEEgdGhyb3cgc3RhdGVtZW50IG9mIHRoZSBmb3JtIGB0aHJvdyBleHByO2AgKGNoaWxkcmVuOiBleHByKSAqLwpjb25zdCBBU1RfVEhST1cgPSAyODQ7Ci8qKiBUaGUgb3B0aW9uYWwgYWRhcHRhdGlvbnMgdG8gYSBzdGF0ZW1lbnQgdXNpbmcgYSB0cmFpdCBpbnNpZGUgYSBjbGFzcyAobnVtZXJpY2FsbHkgaW5kZXhlZCBjaGlsZHJlbikgKi8KY29uc3QgQVNUX1RSQUlUX0FEQVBUQVRJT05TID0gMTQyOwovKiogQWRkcyBhbiBhbGlhcyBpbnNpZGUgb2YgYSB1c2Ugb2YgYSB0cmFpdCAoYG1ldGhvZCBhcyBhbGlhc2ApIChjaGlsZHJlbjogbWV0aG9kLCBhbGlhcykgKi8KY29uc3QgQVNUX1RSQUlUX0FMSUFTID0gNTQ0OwovKiogSW5kaWNhdGVzIHRoZSBwcmVjZWRlbnQgb2YgYSB0cmFpdCBvdmVyIGFub3RoZXIgdHJhaXQgKGBtZXRob2QgSU5TVEVBRE9GIGluc3RlYWRvZmApIChjaGlsZHJlbjogbWV0aG9kLCBpbnN0ZWFkb2YpICovCmNvbnN0IEFTVF9UUkFJVF9QUkVDRURFTkNFID0gNTQwOwovKiogQSB0cnkvY2F0Y2goZXMpL2ZpbmFsbHkgYmxvY2suIChjaGlsZHJlbjogdHJ5LCBjYXRjaGVzLCBmaW5hbGx5KSAqLwpjb25zdCBBU1RfVFJZID0gNzcyOwovKiogQSB0eXBlIHN1Y2ggYXMgYGJvb2xgLiBPdGhlciB0eXBlcyBzdWNoIGFzIHNwZWNpZmljIGNsYXNzZXMgYXJlIHJlcHJlc2VudGVkIGFzIGBhc3RcQVNUX05BTUVgcyAoZGVwZW5kcyBvbiBmbGFncyBvZiBgYXN0XGZsYWdzXFRZUEVfKmApICovCmNvbnN0IEFTVF9UWVBFID0gMTsKLyoqIEEgdW5pb24gdHlwZSBtYWRlIHVwIG9mIGluZGl2aWR1YWwgdHlwZXMsIHN1Y2ggYXMgYGJvb2x8aW50YCAobnVtZXJpY2FsbHkgaW5kZXhlZCBjaGlsZHJlbikgKi8KY29uc3QgQVNUX1RZUEVfVU5JT04gPSAxNDQ7Ci8qKiBBIHVuYXJ5IG9wZXJhdGlvbiBvZiB0aGUgZm9ybSBgb3AgZXhwcmAgKGUuZy4gYC1leHByYCwgdGhlIGZsYWdzIGNhbiBiZSBvbmUgb2YgYGFzdFxmbGFnc1xVTkFSWV8qYCkgKGNoaWxkcmVuOiBleHByKSAqLwpjb25zdCBBU1RfVU5BUllfT1AgPSAyNzA7Ci8qKiBBbiBleHByZXNzaW9uIHVucGFja2luZyBhbiBhcnJheS9pdGVyYWJsZSAoaS5lLiBgLi4uZXhwcmApIChjaGlsZHJlbjogZXhwcikgKi8KY29uc3QgQVNUX1VOUEFDSyA9IDI1ODsKLyoqIGB1bnNldCh2YXIpYCAtIEEgc3RhdGVtZW50IHVuc2V0dGluZyB0aGUgZXhwcmVzc2lvbiBgdmFyYCAoY2hpbGRyZW46IHZhcikgKi8KY29uc3QgQVNUX1VOU0VUID0gMjc4OwovKiogQSBsaXN0IG9mIHVzZXMgb2YgY2xhc3Nlcy9uYW1lc3BhY2VzLCBmdW5jdGlvbnMsIGFuZCBjb25zdGFudHMuIFRoZSBjaGlsZCBub2RlcyBhcmUgb2YgdGhlIGtpbmQgYGFzdFxBU1RfVVNFX0VMRU1gIChudW1lcmljYWxseSBpbmRleGVkIGNoaWxkcmVuKSAqLwpjb25zdCBBU1RfVVNFID0gMTQzOwovKiogQSBzaW5nbGUgdXNlIHN0YXRlbWVudCBmb3IgYSBncm91cCBvZiAoY2hpbGRyZW46IG5hbWUsIGFsaWFzKSAqLwpjb25zdCBBU1RfVVNFX0VMRU0gPSA1NDM7Ci8qKiBSZXByZXNlbnRzIGB1c2UgdHJhaXRzIHtbYWRhcHRhdGlvbnNdfWAgd2l0aGluIGEgY2xhc3MgZGVjbGFyYXRpb24gKGNoaWxkcmVuOiB0cmFpdHMsIGFkYXB0YXRpb25zKSAqLwpjb25zdCBBU1RfVVNFX1RSQUlUID0gNTM5OwovKiogQW4gb2NjdXJyZW5jZSBvZiBhIHZhcmlhYmxlIGAkbmFtZWAgb3IgYCR7bmFtZX1gLiAoY2hpbGRyZW46IG5hbWUpICovCmNvbnN0IEFTVF9WQVIgPSAyNTY7Ci8qKiBBIHdoaWxlIGxvb3Agb2YgdGhlIGZvcm0gYHdoaWxlIChjb25kKSB7IHN0bXRzIH1gIChjaGlsZHJlbjogY29uZCwgc3RtdHMpICovCmNvbnN0IEFTVF9XSElMRSA9IDUzMzsKLyoqIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYHlpZWxkIFtrZXkgPT5dIHZhbHVlYCAoY2hpbGRyZW46IHZhbHVlLCBrZXkpICovCmNvbnN0IEFTVF9ZSUVMRCA9IDUyOTsKLyoqIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYHlpZWxkIGZyb20gZXhwcmAgKGNoaWxkcmVuOiBleHByKSAqLwpjb25zdCBBU1RfWUlFTERfRlJPTSA9IDI3NTsKfQoKbmFtZXNwYWNlIGFzdFxmbGFncyB7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9BUlJBWV9FTEVNYCBhcyBhIHJlZmVyZW5jZSAqLwpjb25zdCBBUlJBWV9FTEVNX1JFRiA9IDE7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9BUlJBWWAgYXMgdXNpbmcgdGhlIGBsaXN0KC4uLilgIHN5bnRheCAqLwpjb25zdCBBUlJBWV9TWU5UQVhfTElTVCA9IDE7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9BUlJBWWAgYXMgdXNpbmcgdGhlIGBhcnJheSguLi4pYCBzeW50YXggKi8KY29uc3QgQVJSQVlfU1lOVEFYX0xPTkcgPSAyOwovKiogTWFya3MgYW4gYGFzdFxBU1RfQVJSQVlgIGFzIHVzaW5nIHRoZSBgWy4uLl1gIHN5bnRheCAqLwpjb25zdCBBUlJBWV9TWU5UQVhfU0hPUlQgPSAzOwovKiogTWFya3MgYW4gYXN0XEFTVF9CSU5BUllfT1AgYXMgYmVpbmcgYSBgK2AgKi8KY29uc3QgQklOQVJZX0FERCA9IDE7Ci8qKiBNYXJrcyBhbiBhc3RcQVNUX0JJTkFSWV9PUCBhcyBiZWluZyBhIGAmYCAqLwpjb25zdCBCSU5BUllfQklUV0lTRV9BTkQgPSAxMDsKLyoqIE1hcmtzIGFuIGFzdFxBU1RfQklOQVJZX09QIGFzIGJlaW5nIGEgYHxgICovCmNvbnN0IEJJTkFSWV9CSVRXSVNFX09SID0gOTsKLyoqIE1hcmtzIGFuIGFzdFxBU1RfQklOQVJZX09QIGFzIGJlaW5nIGEgYF5gICovCmNvbnN0IEJJTkFSWV9CSVRXSVNFX1hPUiA9IDExOwovKiogTWFya3MgYW4gYXN0XEFTVF9CSU5BUllfT1AgYXMgYmVpbmcgYSBgJiZgIG9yIGBhbmRgICovCmNvbnN0IEJJTkFSWV9CT09MX0FORCA9IDI1OTsKLyoqIE1hcmtzIGFuIGFzdFxBU1RfQklOQVJZX09QIGFzIGJlaW5nIGEgYHx8YCBvciBgb3JgICovCmNvbnN0IEJJTkFSWV9CT09MX09SID0gMjU4OwovKiogTWFya3MgYW4gYXN0XEFTVF9CSU5BUllfT1AgYXMgYmVpbmcgYW4gYHhvcmAgKi8KY29uc3QgQklOQVJZX0JPT0xfWE9SID0gMTU7Ci8qKiBNYXJrcyBhbiBhc3RcQVNUX0JJTkFSWV9PUCBhcyBiZWluZyBhIGA/P2AgKi8KY29uc3QgQklOQVJZX0NPQUxFU0NFID0gMjYwOwovKiogTWFya3MgYW4gYXN0XEFTVF9CSU5BUllfT1AgYXMgYmVpbmcgYSBgLmAgKi8KY29uc3QgQklOQVJZX0NPTkNBVCA9IDg7Ci8qKiBNYXJrcyBhbiBhc3RcQVNUX0JJTkFSWV9PUCBhcyBiZWluZyBhIGAvYCAqLwpjb25zdCBCSU5BUllfRElWID0gNDsKLyoqIE1hcmtzIGFuIGFzdFxBU1RfQklOQVJZX09QIGFzIGJlaW5nIGEgYD09YCAqLwpjb25zdCBCSU5BUllfSVNfRVFVQUwgPSAxODsKLyoqIE1hcmtzIGFuIGFzdFxBU1RfQklOQVJZX09QIGFzIGJlaW5nIGEgYD5gICovCmNvbnN0IEJJTkFSWV9JU19HUkVBVEVSID0gMjU2OwovKiogTWFya3MgYW4gYXN0XEFTVF9CSU5BUllfT1AgYXMgYmVpbmcgYSBgPj1gICovCmNvbnN0IEJJTkFSWV9JU19HUkVBVEVSX09SX0VRVUFMID0gMjU3OwovKiogTWFya3MgYW4gYXN0XEFTVF9CSU5BUllfT1AgYXMgYmVpbmcgYSBgPT09YCAqLwpjb25zdCBCSU5BUllfSVNfSURFTlRJQ0FMID0gMTY7Ci8qKiBNYXJrcyBhbiBhc3RcQVNUX0JJTkFSWV9PUCBhcyBiZWluZyBhIGAhPWAgKi8KY29uc3QgQklOQVJZX0lTX05PVF9FUVVBTCA9IDE5OwovKiogTWFya3MgYW4gYXN0XEFTVF9CSU5BUllfT1AgYXMgYmVpbmcgYSBgIT09YCAqLwpjb25zdCBCSU5BUllfSVNfTk9UX0lERU5USUNBTCA9IDE3OwovKiogTWFya3MgYW4gYXN0XEFTVF9CSU5BUllfT1AgYXMgYmVpbmcgYSBgPGAgKi8KY29uc3QgQklOQVJZX0lTX1NNQUxMRVIgPSAyMDsKLyoqIE1hcmtzIGFuIGFzdFxBU1RfQklOQVJZX09QIGFzIGJlaW5nIGEgYDw9YCAqLwpjb25zdCBCSU5BUllfSVNfU01BTExFUl9PUl9FUVVBTCA9IDIxOwovKiogTWFya3MgYW4gYXN0XEFTVF9CSU5BUllfT1AgYXMgYmVpbmcgYSBgJWAgKi8KY29uc3QgQklOQVJZX01PRCA9IDU7Ci8qKiBNYXJrcyBhbiBhc3RcQVNUX0JJTkFSWV9PUCBhcyBiZWluZyBhIGAqYCAqLwpjb25zdCBCSU5BUllfTVVMID0gMzsKLyoqIE1hcmtzIGFuIGFzdFxBU1RfQklOQVJZX09QIGFzIGJlaW5nIGEgYCoqYCAqLwpjb25zdCBCSU5BUllfUE9XID0gMTI7Ci8qKiBNYXJrcyBhbiBhc3RcQVNUX0JJTkFSWV9PUCBhcyBiZWluZyBhIGA8PGAgKi8KY29uc3QgQklOQVJZX1NISUZUX0xFRlQgPSA2OwovKiogTWFya3MgYW4gYXN0XEFTVF9CSU5BUllfT1AgYXMgYmVpbmcgYSBgPj5gICovCmNvbnN0IEJJTkFSWV9TSElGVF9SSUdIVCA9IDc7Ci8qKiBNYXJrcyBhbiBhc3RcQVNUX0JJTkFSWV9PUCBhcyBiZWluZyBhIGA8PT5gICovCmNvbnN0IEJJTkFSWV9TUEFDRVNISVAgPSAxNzA7Ci8qKiBNYXJrcyBhbiBhc3RcQVNUX0JJTkFSWV9PUCBhcyBiZWluZyBhIGAtYCAqLwpjb25zdCBCSU5BUllfU1VCID0gMjsKLyoqIE1hcmtzIGEgYGFzdFxBU1RfQ0xBU1NgIChjbGFzcy1saWtlIGRlY2xhcmF0aW9uKSBhcyBiZWluZyBhYnN0cmFjdCAqLwpjb25zdCBDTEFTU19BQlNUUkFDVCA9IDY0OwovKiogTWFya3MgYSBgYXN0XEFTVF9DTEFTU2AgKGNsYXNzLWxpa2UgZGVjbGFyYXRpb24pIGFzIGJlaW5nIGFub255bW91cyAqLwpjb25zdCBDTEFTU19BTk9OWU1PVVMgPSA0OwovKiogTWFya3MgYSBgYXN0XEFTVF9DTEFTU2AgKGNsYXNzLWxpa2UgZGVjbGFyYXRpb24pIGFzIGJlaW5nIGZpbmFsICovCmNvbnN0IENMQVNTX0ZJTkFMID0gMzI7Ci8qKiBNYXJrcyBhIGBhc3RcQVNUX0NMQVNTYCAoY2xhc3MtbGlrZSBkZWNsYXJhdGlvbikgYXMgYmVpbmcgYW4gaW50ZXJmYWNlICovCmNvbnN0IENMQVNTX0lOVEVSRkFDRSA9IDE7Ci8qKiBNYXJrcyBhIGBhc3RcQVNUX0NMQVNTYCAoY2xhc3MtbGlrZSBkZWNsYXJhdGlvbikgYXMgYmVpbmcgYSB0cmFpdCAqLwpjb25zdCBDTEFTU19UUkFJVCA9IDI7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9DTE9TVVJFX1VTRWAgYXMgdXNpbmcgYSB2YXJpYWJsZSBieSByZWZlcmVuY2UgKi8KY29uc3QgQ0xPU1VSRV9VU0VfUkVGID0gMTsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX0RJTWAgYXMgdXNpbmcgdGhlIGFsdGVybmF0aXZlIGBleHBye2RpbX1gIHN5bnRheCAqLwpjb25zdCBESU1fQUxURVJOQVRJVkVfU1lOVEFYID0gMjsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX0VYRUNgIGFzIGJlaW5nIGFuIGBldmFsKC4uLilgICovCmNvbnN0IEVYRUNfRVZBTCA9IDE7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9FWEVDYCBhcyBiZWluZyBhbiBgaW5jbHVkZWAgKi8KY29uc3QgRVhFQ19JTkNMVURFID0gMjsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX0VYRUNgIGFzIGJlaW5nIGFuIGBpbmNsdWRlX29uY2VgICovCmNvbnN0IEVYRUNfSU5DTFVERV9PTkNFID0gNDsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX0VYRUNgIGFzIGJlaW5nIGEgYHJlcXVpcmVgICovCmNvbnN0IEVYRUNfUkVRVUlSRSA9IDg7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9FWEVDYCBhcyBiZWluZyBhIGByZXF1aXJlX29uY2VgICovCmNvbnN0IEVYRUNfUkVRVUlSRV9PTkNFID0gMTY7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9GVU5DX0RFQ0xgIGFzIGJlaW5nIGEgZ2VuZXJhdG9yICovCmNvbnN0IEZVTkNfR0VORVJBVE9SID0gMTY3NzcyMTY7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9GVU5DX0RFQ0xgIGFzIHJldHVybmluZyBhIHZhbHVlIGJ5IHJlZmVyZW5jZSAqLwpjb25zdCBGVU5DX1JFVFVSTlNfUkVGID0gNDA5NjsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX01BR0lDX0NPTlNUYCBhcyBiZWluZyBgX19DTEFTU19fYCAqLwpjb25zdCBNQUdJQ19DTEFTUyA9IDM3ODsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX01BR0lDX0NPTlNUYCBhcyBiZWluZyBgX19ESVJfX2AgKi8KY29uc3QgTUFHSUNfRElSID0gMzc3OwovKiogTWFya3MgYW4gYGFzdFxBU1RfTUFHSUNfQ09OU1RgIGFzIGJlaW5nIGBfX0ZJTEVfX2AgKi8KY29uc3QgTUFHSUNfRklMRSA9IDM3NjsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX01BR0lDX0NPTlNUYCBhcyBiZWluZyBgX19GVU5DVElPTl9fYCAqLwpjb25zdCBNQUdJQ19GVU5DVElPTiA9IDM4MTsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX01BR0lDX0NPTlNUYCBhcyBiZWluZyBgX19MSU5FX19gICovCmNvbnN0IE1BR0lDX0xJTkUgPSAzNzU7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9NQUdJQ19DT05TVGAgYXMgYmVpbmcgYF9fTUVUSE9EX19gICovCmNvbnN0IE1BR0lDX01FVEhPRCA9IDM4MDsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX01BR0lDX0NPTlNUYCBhcyBiZWluZyBgX19OQU1FU1BBQ0VfX2AgKi8KY29uc3QgTUFHSUNfTkFNRVNQQUNFID0gMzgyOwovKiogTWFya3MgYW4gYGFzdFxBU1RfTUFHSUNfQ09OU1RgIGFzIGJlaW5nIGBfX1RSQUlUX19gICovCmNvbnN0IE1BR0lDX1RSQUlUID0gMzc5OwovKiogTWFya3MgYW4gZWxlbWVudCBkZWNsYXJhdGlvbiBhcyBiZWluZyBgYWJzdHJhY3RgICovCmNvbnN0IE1PRElGSUVSX0FCU1RSQUNUID0gNjQ7Ci8qKiBNYXJrcyBhbiBlbGVtZW50IGRlY2xhcmF0aW9uIGFzIGJlaW5nIGBmaW5hbGAgKi8KY29uc3QgTU9ESUZJRVJfRklOQUwgPSAzMjsKLyoqIE1hcmtzIGFuIGVsZW1lbnQgZGVjbGFyYXRpb24gYXMgYmVpbmcgYHByaXZhdGVgICovCmNvbnN0IE1PRElGSUVSX1BSSVZBVEUgPSA0OwovKiogTWFya3MgYW4gZWxlbWVudCBkZWNsYXJhdGlvbiBhcyBiZWluZyBgcHJvdGVjdGVkYCAqLwpjb25zdCBNT0RJRklFUl9QUk9URUNURUQgPSAyOwovKiogTWFya3MgYW4gZWxlbWVudCBkZWNsYXJhdGlvbiBhcyBiZWluZyBgcHVibGljYCAqLwpjb25zdCBNT0RJRklFUl9QVUJMSUMgPSAxOwovKiogTWFya3MgYW4gZWxlbWVudCBkZWNsYXJhdGlvbiBhcyBiZWluZyBgc3RhdGljYCAqLwpjb25zdCBNT0RJRklFUl9TVEFUSUMgPSAxNjsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX05BTUVgIGFzIGJlaW5nIGZ1bGx5IHF1YWxpZmllZCAoYFxOYW1lYCkgKi8KY29uc3QgTkFNRV9GUSA9IDA7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9OQU1FYCBhcyBiZWluZyBub3QgZnVsbHkgcXVhbGlmaWVkIChgTmFtZWApICovCmNvbnN0IE5BTUVfTk9UX0ZRID0gMTsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX05BTUVgIGFzIGJlaW5nIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IG5hbWVzcGFjZSAoYG5hbWVzcGFjZVxOYW1lYCkgKi8KY29uc3QgTkFNRV9SRUxBVElWRSA9IDI7Ci8qKiBNYXJrcyBhIHByb21vdGVkIGNvbnN0cnVjdG9yIHByb3BlcnR5IGFzIGJlaW5nIGBwcml2YXRlYCAqLwpjb25zdCBQQVJBTV9NT0RJRklFUl9QUklWQVRFID0gNDsKLyoqIE1hcmtzIGEgcHJvbW90ZWQgY29uc3RydWN0b3IgcHJvcGVydHkgYXMgYmVpbmcgYHByb3RlY3RlZGAgKi8KY29uc3QgUEFSQU1fTU9ESUZJRVJfUFJPVEVDVEVEID0gMjsKLyoqIE1hcmtzIGEgcHJvbW90ZWQgY29uc3RydWN0b3IgcHJvcGVydHkgYXMgYmVpbmcgYHB1YmxpY2AgKi8KY29uc3QgUEFSQU1fTU9ESUZJRVJfUFVCTElDID0gMTsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX1BBUkFNYCBhcyBiZWluZyBhIHJlZmVyZW5jZSAoYCYkeGApICovCmNvbnN0IFBBUkFNX1JFRiA9IDg7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9QQVJBTWAgYXMgYmVpbmcgdmFyaWFkaWMgKGAuLi4keGApICovCmNvbnN0IFBBUkFNX1ZBUklBRElDID0gMTY7Ci8qKiBNYXJrcyBhIGBhc3RcQVNUX0NPTkRJVElPTkFMYCBhcyBiZWluZyBwYXJlbnRoZXNpemVkIChgKGNvbmQgPyB0cnVlIDogZmFsc2UpYCkgKi8KY29uc3QgUEFSRU5USEVTSVpFRF9DT05ESVRJT05BTCA9IDE7Ci8qKiBNYXJrcyBhIGZ1bmN0aW9uLWxpa2UgYXMgcmV0dXJuaW5nIGFuIGFyZ3VtZW50IGJ5IHJlZmVyZW5jZSAqLwpjb25zdCBSRVRVUk5TX1JFRiA9IDQwOTY7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9UWVBFYCBhcyBiZWluZyBgYXJyYXlgICovCmNvbnN0IFRZUEVfQVJSQVkgPSA3OwovKiogTWFya3MgYW4gYGFzdFxBU1RfVFlQRWAgYXMgYmVpbmcgYGJvb2xgICovCmNvbnN0IFRZUEVfQk9PTCA9IDE3OwovKiogTWFya3MgYW4gYGFzdFxBU1RfVFlQRWAgYXMgYmVpbmcgYGNhbGxhYmxlYCAqLwpjb25zdCBUWVBFX0NBTExBQkxFID0gMTI7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9UWVBFYCBhcyBiZWluZyBgZmxvYXRgICovCmNvbnN0IFRZUEVfRE9VQkxFID0gNTsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX1RZUEVgIGFzIGJlaW5nIGBmYWxzZWAgKGZvciB1bmlvbiB0eXBlcykgKi8KY29uc3QgVFlQRV9GQUxTRSA9IDI7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9UWVBFYCBhcyBiZWluZyBgaXRlcmFibGVgICovCmNvbnN0IFRZUEVfSVRFUkFCTEUgPSAxMzsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX1RZUEVgIGFzIGJlaW5nIGBpbnRgICovCmNvbnN0IFRZUEVfTE9ORyA9IDQ7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9UWVBFYCBhcyBiZWluZyBgbWl4ZWRgICovCmNvbnN0IFRZUEVfTUlYRUQgPSAxNjsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX1RZUEVgIGFzIGJlaW5nIGBudWxsYCAoZm9yIHVuaW9uIHR5cGVzKSAqLwpjb25zdCBUWVBFX05VTEwgPSAxOwovKiogTWFya3MgYW4gYGFzdFxBU1RfVFlQRWAgYXMgYmVpbmcgYG9iamVjdGAgKi8KY29uc3QgVFlQRV9PQkpFQ1QgPSA4OwovKiogTWFya3MgYW4gYGFzdFxBU1RfVFlQRWAgYXMgYmVpbmcgYHN0YXRpY2AgKGZvciByZXR1cm4gdHlwZXMpICovCmNvbnN0IFRZUEVfU1RBVElDID0gMTU7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9UWVBFYCBhcyBiZWluZyBgc3RyaW5nYCAqLwpjb25zdCBUWVBFX1NUUklORyA9IDY7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9UWVBFYCBhcyBiZWluZyBgdm9pZGAgKGZvciByZXR1cm4gdHlwZXMpICovCmNvbnN0IFRZUEVfVk9JRCA9IDE0OwovKiogTWFya3MgYW4gYGFzdFxBU1RfVU5BUllfT1BgIGFzIGJlaW5nIGB+ZXhwcmAgKi8KY29uc3QgVU5BUllfQklUV0lTRV9OT1QgPSAxMzsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX1VOQVJZX09QYCBhcyBiZWluZyBgIWV4cHJgICovCmNvbnN0IFVOQVJZX0JPT0xfTk9UID0gMTQ7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9VTkFSWV9PUGAgYXMgYmVpbmcgYC1leHByYCAqLwpjb25zdCBVTkFSWV9NSU5VUyA9IDI2MjsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX1VOQVJZX09QYCBhcyBiZWluZyBgK2V4cHJgICovCmNvbnN0IFVOQVJZX1BMVVMgPSAyNjE7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9VTkFSWV9PUGAgYXMgYmVpbmcgYEBleHByYCAqLwpjb25zdCBVTkFSWV9TSUxFTkNFID0gMjYwOwovKiogTWFya3MgYW4gYGFzdFxBU1RfVVNFYCBvciBgYXN0XEFTVF9HUk9VUF9VU0VgIChuYW1lc3BhY2UgdXNlIHN0YXRlbWVudCkgYXMgYmVpbmcgYHVzZSBjb25zdCBuYW1lO2AgKi8KY29uc3QgVVNFX0NPTlNUID0gNDsKLyoqIE1hcmtzIGFuIGBhc3RcQVNUX1VTRWAgb3IgYGFzdFxBU1RfR1JPVVBfVVNFYCAobmFtZXNwYWNlIHVzZSBzdGF0ZW1lbnQpIGFzIGJlaW5nIGB1c2UgZnVuY3Rpb24gbmFtZTtgICovCmNvbnN0IFVTRV9GVU5DVElPTiA9IDI7Ci8qKiBNYXJrcyBhbiBgYXN0XEFTVF9VU0VgIG9yIGBhc3RcQVNUX0dST1VQX1VTRWAgKG5hbWVzcGFjZSB1c2Ugc3RhdGVtZW50KSBhcyBiZWluZyBgdXNlIG5hbWU7YCAqLwpjb25zdCBVU0VfTk9STUFMID0gMTsKfQo8P3BocAoKZnVuY3Rpb24gcGhwZGJnX2JyZWFrX25leHQoKTogdm9pZCB7fQoKZnVuY3Rpb24gcGhwZGJnX2JyZWFrX2ZpbGUoc3RyaW5nICRmaWxlLCBpbnQgJGxpbmUpOiB2b2lkIHt9CgpmdW5jdGlvbiBwaHBkYmdfYnJlYWtfbWV0aG9kKHN0cmluZyAkY2xhc3MsIHN0cmluZyAkbWV0aG9kKTogdm9pZCB7fQoKZnVuY3Rpb24gcGhwZGJnX2JyZWFrX2Z1bmN0aW9uKHN0cmluZyAkZnVuY3Rpb24pOiB2b2lkIHt9CgpmdW5jdGlvbiBwaHBkYmdfY29sb3IoaW50ICRlbGVtZW50LCBzdHJpbmcgJGNvbG9yKTogdm9pZCB7fQoKZnVuY3Rpb24gcGhwZGJnX3Byb21wdChzdHJpbmcgJHN0cmluZyk6IHZvaWQge30KCi8qKgogKiBAcmV0dXJuIHN0cmluZ3xib29sCiAqLwpmdW5jdGlvbiBwaHBkYmdfZXhlYyhzdHJpbmcgJGNvbnRleHQpIHt9CgpmdW5jdGlvbiBwaHBkYmdfY2xlYXIoKTogdm9pZCB7fQoKZnVuY3Rpb24gcGhwZGJnX3N0YXJ0X29wbG9nKCk6IHZvaWQge30KCmZ1bmN0aW9uIHBocGRiZ19lbmRfb3Bsb2coYXJyYXkgJG9wdGlvbnMgPSBbXSk6ID9hcnJheSB7fQoKZnVuY3Rpb24gcGhwZGJnX2dldF9leGVjdXRhYmxlKGFycmF5ICRvcHRpb25zID0gW10pOiBhcnJheSB7fQo8P3BocAoKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxMYW5ndWFnZUxldmVsVHlwZUF3YXJlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFBocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlOwoKY29uc3QgU09ESVVNX0NSWVBUT19BRUFEX0FFUzI1NkdDTV9LRVlCWVRFUyA9IDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX0FFQURfQUVTMjU2R0NNX05TRUNCWVRFUyA9IDA7CmNvbnN0IFNPRElVTV9DUllQVE9fQUVBRF9BRVMyNTZHQ01fTlBVQkJZVEVTID0gMTI7CmNvbnN0IFNPRElVTV9DUllQVE9fQUVBRF9BRVMyNTZHQ01fQUJZVEVTID0gMTY7CmNvbnN0IFNPRElVTV9DUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0tFWUJZVEVTID0gMzI7CmNvbnN0IFNPRElVTV9DUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X05TRUNCWVRFUyA9IDA7CmNvbnN0IFNPRElVTV9DUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X05QVUJCWVRFUyA9IDg7CmNvbnN0IFNPRElVTV9DUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0FCWVRFUyA9IDE2Owpjb25zdCBTT0RJVU1fQ1JZUFRPX0FFQURfQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX0tFWUJZVEVTID0gMzI7CmNvbnN0IFNPRElVTV9DUllQVE9fQUVBRF9DSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlNFQ0JZVEVTID0gMDsKY29uc3QgU09ESVVNX0NSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfSUVURl9OUFVCQllURVMgPSAxMjsKY29uc3QgU09ESVVNX0NSWVBUT19BRUFEX0NIQUNIQTIwUE9MWTEzMDVfSUVURl9BQllURVMgPSAxNjsKY29uc3QgU09ESVVNX0NSWVBUT19BRUFEX1hDSEFDSEEyMFBPTFkxMzA1X0lFVEZfS0VZQllURVMgPSAzMjsKY29uc3QgU09ESVVNX0NSWVBUT19BRUFEX1hDSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlNFQ0JZVEVTID0gMDsKY29uc3QgU09ESVVNX0NSWVBUT19BRUFEX1hDSEFDSEEyMFBPTFkxMzA1X0lFVEZfTlBVQkJZVEVTID0gMjQ7CmNvbnN0IFNPRElVTV9DUllQVE9fQUVBRF9YQ0hBQ0hBMjBQT0xZMTMwNV9JRVRGX0FCWVRFUyA9IDE2Owpjb25zdCBTT0RJVU1fQ1JZUFRPX1NFQ1JFVFNUUkVBTV9YQ0hBQ0hBMjBQT0xZMTMwNV9BQllURVMgPSAxNzsKY29uc3QgU09ESVVNX0NSWVBUT19TRUNSRVRTVFJFQU1fWENIQUNIQTIwUE9MWTEzMDVfSEVBREVSQllURVMgPSAyNDsKY29uc3QgU09ESVVNX0NSWVBUT19TRUNSRVRTVFJFQU1fWENIQUNIQTIwUE9MWTEzMDVfS0VZQllURVMgPSAzMjsKY29uc3QgU09ESVVNX0NSWVBUT19TRUNSRVRTVFJFQU1fWENIQUNIQTIwUE9MWTEzMDVfTUVTU0FHRUJZVEVTX01BWCA9IDI3NDg3NzkwNjgxNjsKY29uc3QgU09ESVVNX0NSWVBUT19TRUNSRVRTVFJFQU1fWENIQUNIQTIwUE9MWTEzMDVfVEFHX01FU1NBR0UgPSAwOwpjb25zdCBTT0RJVU1fQ1JZUFRPX1NFQ1JFVFNUUkVBTV9YQ0hBQ0hBMjBQT0xZMTMwNV9UQUdfUFVTSCA9IDE7CmNvbnN0IFNPRElVTV9DUllQVE9fU0VDUkVUU1RSRUFNX1hDSEFDSEEyMFBPTFkxMzA1X1RBR19SRUtFWSA9IDI7CmNvbnN0IFNPRElVTV9DUllQVE9fU0VDUkVUU1RSRUFNX1hDSEFDSEEyMFBPTFkxMzA1X1RBR19GSU5BTCA9IDM7CmNvbnN0IFNPRElVTV9DUllQVE9fUFdIQVNIX0FMR19BUkdPTjJJRDEzID0gMjsKY29uc3QgU09ESVVNX0JBU0U2NF9WQVJJQU5UX09SSUdJTkFMID0gMTsKY29uc3QgU09ESVVNX0JBU0U2NF9WQVJJQU5UX09SSUdJTkFMX05PX1BBRERJTkcgPSAzOwpjb25zdCBTT0RJVU1fQkFTRTY0X1ZBUklBTlRfVVJMU0FGRSA9IDU7CmNvbnN0IFNPRElVTV9CQVNFNjRfVkFSSUFOVF9VUkxTQUZFX05PX1BBRERJTkcgPSA3Owpjb25zdCBTT0RJVU1fQ1JZUFRPX0FVVEhfQllURVMgPSAzMjsKY29uc3QgU09ESVVNX0NSWVBUT19BVVRIX0tFWUJZVEVTID0gMzI7CmNvbnN0IFNPRElVTV9DUllQVE9fQk9YX1NFQUxCWVRFUyA9IDQ4Owpjb25zdCBTT0RJVU1fQ1JZUFRPX0JPWF9TRUNSRVRLRVlCWVRFUyA9IDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX0JPWF9QVUJMSUNLRVlCWVRFUyA9IDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX0JPWF9LRVlQQUlSQllURVMgPSA2NDsKY29uc3QgU09ESVVNX0NSWVBUT19CT1hfTUFDQllURVMgPSAxNjsKY29uc3QgU09ESVVNX0NSWVBUT19CT1hfTk9OQ0VCWVRFUyA9IDI0Owpjb25zdCBTT0RJVU1fQ1JZUFRPX0JPWF9TRUVEQllURVMgPSAzMjsKY29uc3QgU09ESVVNX0NSWVBUT19LWF9CWVRFUyA9IDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX0tYX1BVQkxJQ0tFWUJZVEVTID0gMzI7CmNvbnN0IFNPRElVTV9DUllQVE9fS1hfU0VDUkVUS0VZQllURVMgPSAzMjsKY29uc3QgU09ESVVNX0NSWVBUT19HRU5FUklDSEFTSF9CWVRFUyA9IDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX0dFTkVSSUNIQVNIX0JZVEVTX01JTiA9IDE2Owpjb25zdCBTT0RJVU1fQ1JZUFRPX0dFTkVSSUNIQVNIX0JZVEVTX01BWCA9IDY0Owpjb25zdCBTT0RJVU1fQ1JZUFRPX0dFTkVSSUNIQVNIX0tFWUJZVEVTID0gMzI7CmNvbnN0IFNPRElVTV9DUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVNfTUlOID0gMTY7CmNvbnN0IFNPRElVTV9DUllQVE9fR0VORVJJQ0hBU0hfS0VZQllURVNfTUFYID0gNjQ7CmNvbnN0IFNPRElVTV9DUllQVE9fUFdIQVNIX1NDUllQVFNBTFNBMjA4U0hBMjU2X1NBTFRCWVRFUyA9IDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9TQ1JZUFRTQUxTQTIwOFNIQTI1Nl9TVFJQUkVGSVggPSAnJDckJzsKY29uc3QgU09ESVVNX0NSWVBUT19QV0hBU0hfU0NSWVBUU0FMU0EyMDhTSEEyNTZfT1BTTElNSVRfSU5URVJBQ1RJVkUgPSA1MjQyODg7CmNvbnN0IFNPRElVTV9DUllQVE9fUFdIQVNIX1NDUllQVFNBTFNBMjA4U0hBMjU2X01FTUxJTUlUX0lOVEVSQUNUSVZFID0gMTY3NzcyMTY7CmNvbnN0IFNPRElVTV9DUllQVE9fUFdIQVNIX1NDUllQVFNBTFNBMjA4U0hBMjU2X09QU0xJTUlUX1NFTlNJVElWRSA9IDMzNTU0NDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9TQ1JZUFRTQUxTQTIwOFNIQTI1Nl9NRU1MSU1JVF9TRU5TSVRJVkUgPSAxMDczNzQxODI0Owpjb25zdCBTT0RJVU1fQ1JZUFRPX1NDQUxBUk1VTFRfQllURVMgPSAzMjsKY29uc3QgU09ESVVNX0NSWVBUT19TQ0FMQVJNVUxUX1NDQUxBUkJZVEVTID0gMzI7CmNvbnN0IFNPRElVTV9DUllQVE9fU0hPUlRIQVNIX0JZVEVTID0gODsKY29uc3QgU09ESVVNX0NSWVBUT19TSE9SVEhBU0hfS0VZQllURVMgPSAxNjsKY29uc3QgU09ESVVNX0NSWVBUT19TRUNSRVRCT1hfS0VZQllURVMgPSAzMjsKY29uc3QgU09ESVVNX0NSWVBUT19TRUNSRVRCT1hfTUFDQllURVMgPSAxNjsKY29uc3QgU09ESVVNX0NSWVBUT19TRUNSRVRCT1hfTk9OQ0VCWVRFUyA9IDI0Owpjb25zdCBTT0RJVU1fQ1JZUFRPX1NJR05fQllURVMgPSA2NDsKY29uc3QgU09ESVVNX0NSWVBUT19TSUdOX1NFRURCWVRFUyA9IDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX1NJR05fUFVCTElDS0VZQllURVMgPSAzMjsKY29uc3QgU09ESVVNX0NSWVBUT19TSUdOX1NFQ1JFVEtFWUJZVEVTID0gNjQ7CmNvbnN0IFNPRElVTV9DUllQVE9fU0lHTl9LRVlQQUlSQllURVMgPSA5NjsKY29uc3QgU09ESVVNX0NSWVBUT19TVFJFQU1fS0VZQllURVMgPSAzMjsKY29uc3QgU09ESVVNX0NSWVBUT19TVFJFQU1fTk9OQ0VCWVRFUyA9IDI0Owpjb25zdCBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9PUFNMSU1JVF9JTlRFUkFDVElWRSA9IDI7CmNvbnN0IFNPRElVTV9DUllQVE9fUFdIQVNIX01FTUxJTUlUX0lOVEVSQUNUSVZFID0gNjcxMDg4NjQ7CmNvbnN0IFNPRElVTV9DUllQVE9fUFdIQVNIX09QU0xJTUlUX01PREVSQVRFID0gMzsKY29uc3QgU09ESVVNX0NSWVBUT19QV0hBU0hfTUVNTElNSVRfTU9ERVJBVEUgPSAyNjg0MzU0NTY7CmNvbnN0IFNPRElVTV9DUllQVE9fUFdIQVNIX09QU0xJTUlUX1NFTlNJVElWRSA9IDQ7CmNvbnN0IFNPRElVTV9DUllQVE9fUFdIQVNIX01FTUxJTUlUX1NFTlNJVElWRSA9IDEwNzM3NDE4MjQ7CmNvbnN0IFNPRElVTV9MSUJSQVJZX1ZFUlNJT04gPSAiMS4wLjE5IjsKY29uc3QgU09ESVVNX0xJQlJBUllfTUFKT1JfVkVSU0lPTiA9IDI2Owpjb25zdCBTT0RJVU1fTElCUkFSWV9NSU5PUl9WRVJTSU9OID0gMTsKY29uc3QgU09ESVVNX0NSWVBUT19LREZfQllURVNfTUlOID0gMTY7CmNvbnN0IFNPRElVTV9DUllQVE9fS0RGX0JZVEVTX01BWCA9IDY0Owpjb25zdCBTT0RJVU1fQ1JZUFRPX0tERl9DT05URVhUQllURVMgPSA4Owpjb25zdCBTT0RJVU1fQ1JZUFRPX0tERl9LRVlCWVRFUyA9IDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX0tYX1NFRURCWVRFUyA9IDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX0tYX1NFU1NJT05LRVlCWVRFUyA9IDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX0tYX0tFWVBBSVJCWVRFUyA9IDY0Owpjb25zdCBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9BTEdfQVJHT04ySTEzID0gMTsKY29uc3QgU09ESVVNX0NSWVBUT19QV0hBU0hfQUxHX0RFRkFVTFQgPSAyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX1BXSEFTSF9TQUxUQllURVMgPSAxNjsKY29uc3QgU09ESVVNX0NSWVBUT19QV0hBU0hfU1RSUFJFRklYID0gJyRhcmdvbjJpZCQnOwpjb25zdCBTT0RJVU1fQ1JZUFRPX1NUUkVBTV9YQ0hBQ0hBMjBfTk9OQ0VCWVRFUyA9IDI0Owpjb25zdCBTT0RJVU1fQ1JZUFRPX1NUUkVBTV9YQ0hBQ0hBMjBfS0VZQllURVMgPSAzMjsKY29uc3QgU09ESVVNX0NSWVBUT19TQ0FMQVJNVUxUX1JJU1RSRVRUTzI1NV9CWVRFUyA9IDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX1NDQUxBUk1VTFRfUklTVFJFVFRPMjU1X1NDQUxBUkJZVEVTID0gMzI7CmNvbnN0IFNPRElVTV9DUllQVE9fQ09SRV9SSVNUUkVUVE8yNTVfQllURVMgPSAzMjsKY29uc3QgU09ESVVNX0NSWVBUT19DT1JFX1JJU1RSRVRUTzI1NV9IQVNIQllURVMgPSA2NDsKY29uc3QgU09ESVVNX0NSWVBUT19DT1JFX1JJU1RSRVRUTzI1NV9TQ0FMQVJCWVRFUyA9IDMyOwpjb25zdCBTT0RJVU1fQ1JZUFRPX0NPUkVfUklTVFJFVFRPMjU1X05PTlJFRFVDRURTQ0FMQVJCWVRFUyA9IDY0OwoKI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZSgnOC4xJyldCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fY29yZV9yaXN0cmV0dG8yNTVfYWRkKHN0cmluZyAkcCwgc3RyaW5nICRxKTogc3RyaW5nIHt9CgojW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKCc4LjEnKV0KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9mcm9tX2hhc2goc3RyaW5nICRzKTogc3RyaW5nIHt9CgojW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKCc4LjEnKV0KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9pc192YWxpZF9wb2ludChzdHJpbmcgJHMpOiBib29sIHt9CgojW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKCc4LjEnKV0KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9yYW5kb20oKTogc3RyaW5nIHt9CgojW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKCc4LjEnKV0KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9zY2FsYXJfYWRkKHN0cmluZyAkeCwgc3RyaW5nICR5KTogc3RyaW5nIHt9CgojW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKCc4LjEnKV0KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9zY2FsYXJfY29tcGxlbWVudChzdHJpbmcgJHMpOiBzdHJpbmcge30KCiNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoJzguMScpXQpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X3NjYWxhcl9pbnZlcnQoc3RyaW5nICRzKTogc3RyaW5nIHt9CgojW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKCc4LjEnKV0KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9zY2FsYXJfbXVsKHN0cmluZyAkeCwgc3RyaW5nICR5KTogc3RyaW5nIHt9CgojW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKCc4LjEnKV0KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9zY2FsYXJfbmVnYXRlKHN0cmluZyAkcyk6IHN0cmluZyB7fQoKI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZSgnOC4xJyldCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fY29yZV9yaXN0cmV0dG8yNTVfc2NhbGFyX3JlZHVjZShzdHJpbmcgJHMpOiBzdHJpbmcge30KCiNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoJzguMScpXQpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X3NjYWxhcl9zdWIoc3RyaW5nICR4LCBzdHJpbmcgJHkpOiBzdHJpbmcge30KCiNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoJzguMScpXQpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2NvcmVfcmlzdHJldHRvMjU1X3NjYWxhcl9yYW5kb20oKTogc3RyaW5nIHt9CgojW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKCc4LjEnKV0KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19jb3JlX3Jpc3RyZXR0bzI1NV9zdWIoc3RyaW5nICRwLCBzdHJpbmcgJHEpOiBzdHJpbmcge30KCiNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoJzguMScpXQpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NjYWxhcm11bHRfcmlzdHJldHRvMjU1KHN0cmluZyAkbiwgc3RyaW5nICRwKTogc3RyaW5nIHt9CgojW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKCc4LjEnKV0KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zY2FsYXJtdWx0X3Jpc3RyZXR0bzI1NV9iYXNlKHN0cmluZyAkbik6IHN0cmluZyB7fQoKI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZSgnOC4xJyldCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc3RyZWFtX3hjaGFjaGEyMChpbnQgJGxlbmd0aCwgc3RyaW5nICRub25jZSwgc3RyaW5nICRrZXkpOiBzdHJpbmcge30KCiNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoJzguMScpXQpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3N0cmVhbV94Y2hhY2hhMjBfeG9yKHN0cmluZyAkbWVzc2FnZSwgc3RyaW5nICRub25jZSwgc3RyaW5nICRrZXkpOiBzdHJpbmcge30KCiNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoJzguMicpXQpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3N0cmVhbV94Y2hhY2hhMjBfeG9yX2ljKCNbXFNlbnNpdGl2ZVBhcmFtZXRlcl0gc3RyaW5nICRtZXNzYWdlLCBzdHJpbmcgJG5vbmNlLCBpbnQgJGNvdW50ZXIsICNbXFNlbnNpdGl2ZVBhcmFtZXRlcl0gc3RyaW5nICRrZXkpOiBzdHJpbmcge30KCiNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoJzguMScpXQpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3N0cmVhbV94Y2hhY2hhMjBfa2V5Z2VuKCk6IHN0cmluZyB7fQoKLyoqCiAqIENhbiB5b3UgYWNjZXNzIEFFUy0yNTYtR0NNPyBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHlvdSBoYXZlIHN1cHBvcnRlZAogKiBoYXJkd2FyZS4KICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1hZWFkLWFlczI1NmdjbS1pcy1hdmFpbGFibGUKICogQHJldHVybiBib29sCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF9hZXMyNTZnY21faXNfYXZhaWxhYmxlKCk6IGJvb2wge30KCi8qKgogKiBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEgKGRlY3J5cHQpCiAqIEFFUy0yNTYtR0NNCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYWVhZC1hZXMyNTZnY20tZGVjcnlwdC5waHAKICogQHBhcmFtIHN0cmluZyAkY2lwaGVydGV4dCBlbmNyeXB0ZWQgbWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRhZGRpdGlvbmFsX2RhdGEgYWRkaXRpb25hbCBkYXRhCiAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2FlYWRfYWVzMjU2Z2NtX2RlY3J5cHQoc3RyaW5nICRjaXBoZXJ0ZXh0LCBzdHJpbmcgJGFkZGl0aW9uYWxfZGF0YSwgc3RyaW5nICRub25jZSwgc3RyaW5nICRrZXkpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEgKGVuY3J5cHQpCiAqIEFFUy0yNTYtR0NNCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYWVhZC1hZXMyNTZnY20tZW5jcnlwdC5waHAKICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBwbGFpbnRleHQgbWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRhZGRpdGlvbmFsX2RhdGEKICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF9hZXMyNTZnY21fZW5jcnlwdChzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAkYWRkaXRpb25hbF9kYXRhLCBzdHJpbmcgJG5vbmNlLCBzdHJpbmcgJGtleSk6IHN0cmluZyB7fQoKLyoqCiAqIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YSAoZGVjcnlwdCkKICogQ2hhQ2hhMjAgKyBQb2x5MTMwNQogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLWFlYWQtY2hhY2hhMjBwb2x5MTMwNS1kZWNyeXB0LnBocAogKiBAcGFyYW0gc3RyaW5nICRjaXBoZXJ0ZXh0IGVuY3J5cHRlZCBtZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJGFkZGl0aW9uYWxfZGF0YSBhZGRpdGlvbmFsIGRhdGEKICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQoc3RyaW5nICRjaXBoZXJ0ZXh0LCBzdHJpbmcgJGFkZGl0aW9uYWxfZGF0YSwgc3RyaW5nICRub25jZSwgc3RyaW5nICRrZXkpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEgKGVuY3J5cHQpCiAqIENoYUNoYTIwICsgUG9seTEzMDUKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1hZWFkLWNoYWNoYTIwcG9seTEzMDUtZW5jcnlwdC5waHAKICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBwbGFpbnRleHQgbWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRhZGRpdGlvbmFsX2RhdGEgYWRkaXRpb25hbCBkYXRhCiAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KHN0cmluZyAkbWVzc2FnZSwgc3RyaW5nICRhZGRpdGlvbmFsX2RhdGEsIHN0cmluZyAkbm9uY2UsIHN0cmluZyAka2V5KTogc3RyaW5nIHt9CgovKioKICogQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhIChkZWNyeXB0KQogKiBDaGFDaGEyMCArIFBvbHkxMzA1IChJRVRGIHZlcnNpb24pCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYWVhZC1jaGFjaGEyMHBvbHkxMzA1LWlldGYtZGVjcnlwdC5waHAKICogQHBhcmFtIHN0cmluZyAkY2lwaGVydGV4dCBlbmNyeXB0ZWQgbWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRhZGRpdGlvbmFsX2RhdGEgYWRkaXRpb25hbCBkYXRhCiAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2FlYWRfY2hhY2hhMjBwb2x5MTMwNV9pZXRmX2RlY3J5cHQoc3RyaW5nICRjaXBoZXJ0ZXh0LCBzdHJpbmcgJGFkZGl0aW9uYWxfZGF0YSwgc3RyaW5nICRub25jZSwgc3RyaW5nICRrZXkpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEgKGVuY3J5cHQpCiAqIENoYUNoYTIwICsgUG9seTEzMDUgKElFVEYgdmVyc2lvbikKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1hZWFkLWNoYWNoYTIwcG9seTEzMDUtaWV0Zi1lbmNyeXB0LnBocAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIHBsYWludGV4dCBtZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJGFkZGl0aW9uYWxfZGF0YSBhZGRpdGlvbmFsIGRhdGEKICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF9jaGFjaGEyMHBvbHkxMzA1X2lldGZfZW5jcnlwdCgKICAgIHN0cmluZyAkbWVzc2FnZSwKICAgIHN0cmluZyAkYWRkaXRpb25hbF9kYXRhLAogICAgc3RyaW5nICRub25jZSwKICAgIHN0cmluZyAka2V5Cik6IHN0cmluZyB7fQoKLyoqCiAqIFNlY3JldC1rZXkgbWVzc2FnZSBhdXRoZW50aWNhdGlvbgogKiBITUFDIFNIQS01MTIvMjU2CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYXV0aC5waHAKICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hdXRoKAogICAgc3RyaW5nICRtZXNzYWdlLAogICAgc3RyaW5nICRrZXkKKTogc3RyaW5nIHt9CgovKioKICogR2V0IHJhbmRvbSBieXRlcyBmb3Iga2V5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1hdXRoLWtleWdlbi5waHAKICogQHJldHVybiBzdHJpbmcKICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hdXRoX2tleWdlbigpOiBzdHJpbmcge30KCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8ta3gta2V5cGFpci5waHAKICogQHNpbmNlIDcuMgogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2t4X2tleXBhaXIoKTogc3RyaW5nIHt9CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLWt4LXB1YmxpY2tleS5waHAKICogQHNpbmNlIDcuMgogKiBAcGFyYW0gc3RyaW5nICRrZXlfcGFpcgogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2t4X3B1YmxpY2tleShzdHJpbmcgJGtleV9wYWlyKTogc3RyaW5nIHt9CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLWt4LXNlY3JldGtleS5waHAKICogQHBhcmFtIHN0cmluZyAka2V5X3BhaXIKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19reF9zZWNyZXRrZXkoc3RyaW5nICRrZXlfcGFpcik6IHN0cmluZyB7fQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1reC1zZWVkLWtleXBhaXIucGhwCiAqIEBzaW5jZSA3LjIKICogQHBhcmFtIHN0cmluZyAkc2VlZAogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2t4X3NlZWRfa2V5cGFpcihzdHJpbmcgJHNlZWQpOiBzdHJpbmcge30KCi8qKgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8ta3gtc2VydmVyLXNlc3Npb24ta2V5cy5waHAKICogQHNpbmNlIDcuMgogKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfa2V5X3BhaXIKICogQHBhcmFtIHN0cmluZyAkY2xpZW50X2tleQogKiBAcmV0dXJuIHN0cmluZ1tdCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fa3hfc2VydmVyX3Nlc3Npb25fa2V5cyhzdHJpbmcgJHNlcnZlcl9rZXlfcGFpciwgc3RyaW5nICRjbGllbnRfa2V5KTogYXJyYXkge30KCi8qKgogKiBHZXQgcmFuZG9tIGJ5dGVzIGZvciBrZXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLWdlbmVyaWNoYXNoLWtleWdlbi5waHAKICogQHJldHVybiBzdHJpbmcKICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19nZW5lcmljaGFzaF9rZXlnZW4oKTogc3RyaW5nIHt9CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLWt4LWNsaWVudC1zZXNzaW9uLWtleXMucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNsaWVudF9rZXlfcGFpcgogKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfa2V5CiAqIEByZXR1cm4gc3RyaW5nW10KICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19reF9jbGllbnRfc2Vzc2lvbl9rZXlzKHN0cmluZyAkY2xpZW50X2tleV9wYWlyLCBzdHJpbmcgJHNlcnZlcl9rZXkpOiBhcnJheSB7fQoKLyoqCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8ta2RmLWRlcml2ZS1mcm9tLWtleS5waHAKICogQHBhcmFtIGludCAkc3Via2V5X2xlbmd0aAogKiBAcGFyYW0gaW50ICRzdWJrZXlfaWQKICogQHBhcmFtIHN0cmluZyAkY29udGV4dAogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19rZGZfZGVyaXZlX2Zyb21fa2V5KGludCAkc3Via2V5X2xlbmd0aCwgaW50ICRzdWJrZXlfaWQsIHN0cmluZyAkY29udGV4dCwgc3RyaW5nICRrZXkpOiBzdHJpbmcge30KCi8qKgogKiBHZXQgcmFuZG9tIGJ5dGVzIGZvciBrZXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLWtkZi1rZXlnZW4ucGhwCiAqIEBzaW5jZSA3LjIKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fa2RmX2tleWdlbigpOiBzdHJpbmcge30KCi8qKgogKiBHZXQgcmFuZG9tIGJ5dGVzIGZvciBrZXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLXNob3J0aGFzaC1rZXlnZW4ucGhwCiAqIEBzaW5jZSA3LjIKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2hvcnRoYXNoX2tleWdlbigpOiBzdHJpbmcge30KCi8qKgogKiBHZXQgcmFuZG9tIGJ5dGVzIGZvciBrZXkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLXN0cmVhbS1rZXlnZW4ucGhwCiAqIEBzaW5jZSA3LjIKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc3RyZWFtX2tleWdlbigpOiBzdHJpbmcge30KCi8qKgogKiBBZGQgcGFkZGluZyBkYXRhCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLXBhZC5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAqIEBwYXJhbSBpbnQgJGJsb2NrX3NpemUKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX3BhZChzdHJpbmcgJHN0cmluZywgaW50ICRibG9ja19zaXplKTogc3RyaW5nIHt9CgovKioKICogUmVtb3ZlIHBhZGRpbmcgZGF0YQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS11bnBhZC5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nCiAqIEBwYXJhbSBpbnQgJGJsb2NrX3NpemUKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX3VucGFkKHN0cmluZyAkc3RyaW5nLCBpbnQgJGJsb2NrX3NpemUpOiBzdHJpbmcge30KCi8qKgogKiBTZWNyZXQta2V5IG1lc3NhZ2UgdmVyaWZpY2F0aW9uCiAqIEhNQUMgU0hBLTUxMi8yNTYKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1hdXRoLXZlcmlmeS5waHAKICogQHBhcmFtIHN0cmluZyAkbWFjCiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEByZXR1cm4gYm9vbAogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2F1dGhfdmVyaWZ5KHN0cmluZyAkbWFjLCBzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAka2V5KTogYm9vbCB7fQoKLyoqCiAqIFB1YmxpYy1rZXkgYXV0aGVudGljYXRlZCBlbmNyeXB0aW9uIChlbmNyeXB0KQogKiBYMjU1MTkgKyBYc2Fsc2EyMCArIFBvbHkxMzA1CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYm94LnBocAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAqIEBwYXJhbSBzdHJpbmcgJGtleV9wYWlyCiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYm94KHN0cmluZyAkbWVzc2FnZSwgc3RyaW5nICRub25jZSwgc3RyaW5nICRrZXlfcGFpcik6IHN0cmluZyB7fQoKLyoqCiAqIEdlbmVyYXRlIGFuIFgyNTUxOSBrZXlwYWlyIGZvciB1c2Ugd2l0aCB0aGUgc29kaXVtX2NyeXB0b19ib3ggQVBJCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYm94LWtleXBhaXIucGhwCiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYm94X2tleXBhaXIoKTogc3RyaW5nIHt9CgovKioKICogRGVyaXZlIGFuIFgyNTUxOSBrZXlwYWlyIGZvciB1c2Ugd2l0aCB0aGUgc29kaXVtX2NyeXB0b19ib3ggQVBJIGZyb20gYSBzZWVkCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYm94LXNlZWQta2V5cGFpci5waHAKICogQHBhcmFtIHN0cmluZyAkc2VlZAogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2JveF9zZWVkX2tleXBhaXIoc3RyaW5nICRzZWVkKTogc3RyaW5nIHt9CgovKioKICogQ3JlYXRlIGFuIFgyNTUxOSBrZXlwYWlyIGZyb20gYW4gWDI1NTE5IHNlY3JldCBrZXkgYW5kIFgyNTUxOSBwdWJsaWMga2V5CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYm94LWtleXBhaXItZnJvbS1zZWNyZXRrZXktYW5kLXB1YmxpY2tleS5waHAKICogQHBhcmFtIHN0cmluZyAkc2VjcmV0X2tleQogKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNfa2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYm94X2tleXBhaXJfZnJvbV9zZWNyZXRrZXlfYW5kX3B1YmxpY2tleShzdHJpbmcgJHNlY3JldF9rZXksIHN0cmluZyAkcHVibGljX2tleSk6IHN0cmluZyB7fQoKLyoqCiAqIFB1YmxpYy1rZXkgYXV0aGVudGljYXRlZCBlbmNyeXB0aW9uIChkZWNyeXB0KQogKiBYMjU1MTkgKyBYc2Fsc2EyMCArIFBvbHkxMzA1CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYm94LW9wZW4ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGNpcGhlcnRleHQKICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICogQHBhcmFtIHN0cmluZyAka2V5X3BhaXIKICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19ib3hfb3BlbihzdHJpbmcgJGNpcGhlcnRleHQsIHN0cmluZyAkbm9uY2UsIHN0cmluZyAka2V5X3BhaXIpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBHZXQgYW4gWDI1NTE5IHB1YmxpYyBrZXkgZnJvbSBhbiBYMjU1MTkga2V5cGFpcgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLWJveC1wdWJsaWNrZXkucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGtleV9wYWlyCiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYm94X3B1YmxpY2tleShzdHJpbmcgJGtleV9wYWlyKTogc3RyaW5nIHt9CgovKioKICogRGVyaXZlIGFuIFgyNTUxOSBwdWJsaWMga2V5IGZyb20gYW4gWDI1NTE5IHNlY3JldCBrZXkKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1ib3gtcHVibGlja2V5LWZyb20tc2VjcmV0a2V5LnBocAogKiBAcGFyYW0gc3RyaW5nICRzZWNyZXRfa2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYm94X3B1YmxpY2tleV9mcm9tX3NlY3JldGtleShzdHJpbmcgJHNlY3JldF9rZXkpOiBzdHJpbmcge30KCi8qKgogKiBBbm9ueW1vdXMgcHVibGljLWtleSBlbmNyeXB0aW9uIChlbmNyeXB0KQogKiBYMjU1MTkgKyBYc2Fsc2EyMCArIFBvbHkxMzA1ICsgQkxBS0UyYgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLWJveC1zZWFsLnBocAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJHB1YmxpY19rZXkKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19ib3hfc2VhbChzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAkcHVibGljX2tleSk6IHN0cmluZyB7fQoKLyoqCiAqIEFub255bW91cyBwdWJsaWMta2V5IGVuY3J5cHRpb24gKGRlY3J5cHQpCiAqIFgyNTUxOSArIFhzYWxzYTIwICsgUG9seTEzMDUgKyBCTEFLRTJiCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYm94LXNlYWwtb3Blbi5waHAKICogQHBhcmFtIHN0cmluZyAkY2lwaGVydGV4dAogKiBAcGFyYW0gc3RyaW5nICRrZXlfcGFpcgogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2JveF9zZWFsX29wZW4oc3RyaW5nICRjaXBoZXJ0ZXh0LCBzdHJpbmcgJGtleV9wYWlyKTogc3RyaW5nfGZhbHNlIHt9CgovKioKICogRXh0cmFjdCB0aGUgWDI1NTE5IHNlY3JldCBrZXkgZnJvbSBhbiBYMjU1MTkga2V5cGFpcgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLWJveC1zZWNyZXRrZXkucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGtleV9wYWlyCiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYm94X3NlY3JldGtleShzdHJpbmcgJGtleV9wYWlyKTogc3RyaW5nIHt9CgovKioKICogRWxsaXB0aWMgQ3VydmUgRGlmZmllIEhlbGxtYW4gS2V5IEV4Y2hhbmdlCiAqIFgyNTUxOQogKiBAcGFyYW0gc3RyaW5nICRzZWNyZXRfa2V5CiAqIEBwYXJhbSBzdHJpbmcgJHB1YmxpY19rZXkKICogQHBhcmFtIHN0cmluZyAkY2xpZW50X3B1YmxpY2tleQogKiBAcGFyYW0gc3RyaW5nICRzZXJ2ZXJfcHVibGlja2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fa3goCiAgICBzdHJpbmcgJHNlY3JldF9rZXksCiAgICBzdHJpbmcgJHB1YmxpY19rZXksCiAgICBzdHJpbmcgJGNsaWVudF9wdWJsaWNrZXksCiAgICBzdHJpbmcgJHNlcnZlcl9wdWJsaWNrZXkKKTogc3RyaW5nIHt9CgovKioKICogRmFzdCBhbmQgc2VjdXJlIGNyeXB0b2dyYXBoaWMgaGFzaAogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLWdlbmVyaWNoYXNoLnBocAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcGFyYW0gaW50ICRsZW5ndGgKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19nZW5lcmljaGFzaChzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAka2V5ID0gJycsIGludCAkbGVuZ3RoID0gMzIpOiBzdHJpbmcge30KCi8qKgogKiBDcmVhdGUgYSBuZXcgaGFzaCBzdGF0ZSAoZS5nLiB0byB1c2UgZm9yIHN0cmVhbXMpCiAqIEJMQUtFMmIKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1nZW5lcmljaGFzaC1pbml0LnBocAogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHBhcmFtIGludCAkbGVuZ3RoCiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fZ2VuZXJpY2hhc2hfaW5pdCgKICAgIHN0cmluZyAka2V5ID0gJycsCiAgICBpbnQgJGxlbmd0aCA9IDMyCik6IHN0cmluZyB7fQoKLyoqCiAqIFVwZGF0ZSB0aGUgaGFzaCBzdGF0ZSB3aXRoIHNvbWUgZGF0YQogKiBCTEFLRTJiCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tZ2VuZXJpY2hhc2gtdXBkYXRlLnBocAogKiBAcGFyYW0gc3RyaW5nICYkc3RhdGUKICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogKiBAcmV0dXJuIGJvb2wKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4yJyA9PiAndHJ1ZSddLCBkZWZhdWx0OiAnYm9vbCcpXQpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2dlbmVyaWNoYXNoX3VwZGF0ZShzdHJpbmcgJiRzdGF0ZSwgc3RyaW5nICRtZXNzYWdlKTogYm9vbCB7fQoKLyoqCiAqIEdldCB0aGUgZmluYWwgaGFzaAogKiBCTEFLRTJiCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tZ2VuZXJpY2hhc2gtZmluYWwucGhwCiAqIEBwYXJhbSBzdHJpbmcgJiRzdGF0ZQogKiBAcGFyYW0gaW50ICRsZW5ndGgKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19nZW5lcmljaGFzaF9maW5hbCgKICAgIHN0cmluZyAmJHN0YXRlLAogICAgaW50ICRsZW5ndGggPSAzMgopOiBzdHJpbmcge30KCi8qKgogKiBTZWN1cmUgcGFzc3dvcmQtYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24KICogQXJnb24yaQogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLXB3aGFzaC5waHAKICogQHBhcmFtIGludCAkbGVuZ3RoCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkCiAqIEBwYXJhbSBzdHJpbmcgJHNhbHQKICogQHBhcmFtIGludCAkb3BzbGltaXQKICogQHBhcmFtIGludCAkbWVtbGltaXQKICogQHBhcmFtIGludCAkYWxnbyBbb3B0aW9uYWxdCiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fcHdoYXNoKGludCAkbGVuZ3RoLCBzdHJpbmcgJHBhc3N3b3JkLCBzdHJpbmcgJHNhbHQsIGludCAkb3BzbGltaXQsIGludCAkbWVtbGltaXQsIGludCAkYWxnbyA9IFNPRElVTV9DUllQVE9fUFdIQVNIX0FMR19ERUZBVUxUKTogc3RyaW5nIHt9CgovKioKICogR2V0IGEgZm9ybWF0dGVkIHBhc3N3b3JkIGhhc2ggKGZvciBzdG9yYWdlKQogKiBBcmdvbjJpCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tcHdoYXNoLXN0ci5waHAKICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQKICogQHBhcmFtIGludCAkb3BzbGltaXQKICogQHBhcmFtIGludCAkbWVtbGltaXQKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19wd2hhc2hfc3RyKHN0cmluZyAkcGFzc3dvcmQsIGludCAkb3BzbGltaXQsIGludCAkbWVtbGltaXQpOiBzdHJpbmcge30KCi8qKgogKiBWZXJpZnkgYSBwYXNzd29yZCBhZ2FpbnN0IGEgaGFzaAogKiBBcmdvbjJpCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tcHdoYXNoLXN0ci12ZXJpZnkucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGhhc2gKICogQHBhcmFtIHN0cmluZyAkcGFzc3dvcmQKICogQHJldHVybiBib29sCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fcHdoYXNoX3N0cl92ZXJpZnkoc3RyaW5nICRoYXNoLCBzdHJpbmcgJHBhc3N3b3JkKTogYm9vbCB7fQoKLyoqCiAqIFNlY3VyZSBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbgogKiBTY3J5cHQKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1wd2hhc2gtc2NyeXB0c2Fsc2EyMDhzaGEyNTYucGhwCiAqIEBwYXJhbSBpbnQgJGxlbmd0aAogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZAogKiBAcGFyYW0gc3RyaW5nICRzYWx0CiAqIEBwYXJhbSBpbnQgJG9wc2xpbWl0CiAqIEBwYXJhbSBpbnQgJG1lbWxpbWl0CiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2KAogICAgaW50ICRsZW5ndGgsCiAgICBzdHJpbmcgJHBhc3N3b3JkLAogICAgc3RyaW5nICRzYWx0LAogICAgaW50ICRvcHNsaW1pdCwKICAgIGludCAkbWVtbGltaXQsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjInLCB0bzogJzcuNCcpXSAkYWxnID0gbnVsbAopOiBzdHJpbmcge30KCi8qKgogKiBHZXQgYSBmb3JtYXR0ZWQgcGFzc3dvcmQgaGFzaCAoZm9yIHN0b3JhZ2UpCiAqIFNjcnlwdAogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLXB3aGFzaC1zY3J5cHRzYWxzYTIwOHNoYTI1Ni1zdHIucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHBhc3N3b3JkCiAqIEBwYXJhbSBpbnQgJG9wc2xpbWl0CiAqIEBwYXJhbSBpbnQgJG1lbWxpbWl0CiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fcHdoYXNoX3NjcnlwdHNhbHNhMjA4c2hhMjU2X3N0cihzdHJpbmcgJHBhc3N3b3JkLCBpbnQgJG9wc2xpbWl0LCBpbnQgJG1lbWxpbWl0KTogc3RyaW5nIHt9CgovKioKICogVmVyaWZ5IGEgcGFzc3dvcmQgYWdhaW5zdCBhIGhhc2gKICogU2NyeXB0CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tcHdoYXNoLXNjcnlwdHNhbHNhMjA4c2hhMjU2LXN0ci12ZXJpZnkKICogQHBhcmFtIHN0cmluZyAkaGFzaAogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZAogKiBAcmV0dXJuIGJvb2wKICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19wd2hhc2hfc2NyeXB0c2Fsc2EyMDhzaGEyNTZfc3RyX3ZlcmlmeShzdHJpbmcgJGhhc2gsIHN0cmluZyAkcGFzc3dvcmQpOiBib29sIHt9CgovKioKICogRWxsaXB0aWMgQ3VydmUgRGlmZmllIEhlbGxtYW4gb3ZlciBDdXJ2ZTI1NTE5CiAqIFgyNTUxOQogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLXNjYWxhcm11bHQucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG4KICogQHBhcmFtIHN0cmluZyAkcAogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NjYWxhcm11bHQoc3RyaW5nICRuLCBzdHJpbmcgJHApOiBzdHJpbmcge30KCi8qKgogKiBBdXRoZW50aWNhdGVkIHNlY3JldC1rZXkgZW5jcnlwdGlvbiAoZW5jcnlwdCkKICogWHNhbHMyMCArIFBvbHkxMzA1CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tc2VjcmV0Ym94LnBocAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NlY3JldGJveChzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAkbm9uY2UsIHN0cmluZyAka2V5KTogc3RyaW5nIHt9CgovKioKICogQXV0aGVudGljYXRlZCBzZWNyZXQta2V5IGVuY3J5cHRpb24gKGRlY3J5cHQpCiAqIFhzYWxzMjAgKyBQb2x5MTMwNQogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLXNlY3JldGJveC1vcGVuLnBocAogKiBAcGFyYW0gc3RyaW5nICRjaXBoZXJ0ZXh0CiAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NlY3JldGJveF9vcGVuKHN0cmluZyAkY2lwaGVydGV4dCwgc3RyaW5nICRub25jZSwgc3RyaW5nICRrZXkpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBBIHNob3J0IGtleWVkIGhhc2ggc3VpdGFibGUgZm9yIGRhdGEgc3RydWN0dXJlcwogKiBTaXBIYXNoLTItNAogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLXNob3J0aGFzaC5waHAKICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zaG9ydGhhc2goc3RyaW5nICRtZXNzYWdlLCBzdHJpbmcgJGtleSk6IHN0cmluZyB7fQoKLyoqCiAqIERpZ2l0YWwgU2lnbmF0dXJlCiAqIEVkMjU1MTkKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1zaWduLnBocAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldF9rZXkKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zaWduKHN0cmluZyAkbWVzc2FnZSwgc3RyaW5nICRzZWNyZXRfa2V5KTogc3RyaW5nIHt9CgovKioKICogRGlnaXRhbCBTaWduYXR1cmUgKGRldGFjaGVkKQogKiBFZDI1NTE5CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tc2lnbi1kZXRhY2hlZC5waHAKICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRzZWNyZXRfa2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2lnbl9kZXRhY2hlZChzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAkc2VjcmV0X2tleSk6IHN0cmluZyB7fQoKLyoqCiAqIENvbnZlcnQgYW4gRWQyNTUxOSBwdWJsaWMga2V5IHRvIGFuIFgyNTUxOSBwdWJsaWMga2V5CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tc2lnbi1lZDI1NTE5LXBrLXRvLWN1cnZlMjU1MTkucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHB1YmxpY19rZXkKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zaWduX2VkMjU1MTlfcGtfdG9fY3VydmUyNTUxOShzdHJpbmcgJHB1YmxpY19rZXkpOiBzdHJpbmcge30KCi8qKgogKiBDb252ZXJ0IGFuIEVkMjU1MTkgc2VjcmV0IGtleSB0byBhbiBYMjU1MTkgc2VjcmV0IGtleQogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLXNpZ24tZWQyNTUxOS1zay10by1jdXJ2ZTI1NTE5LnBocAogKiBAcGFyYW0gc3RyaW5nICRzZWNyZXRfa2V5CiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2lnbl9lZDI1NTE5X3NrX3RvX2N1cnZlMjU1MTkoc3RyaW5nICRzZWNyZXRfa2V5KTogc3RyaW5nIHt9CgovKioKICogR2VuZXJhdGUgYW4gRWQyNTUxOSBrZXlwYWlyIGZvciB1c2Ugd2l0aCB0aGUgY3J5cHRvX3NpZ24gQVBJCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tc2lnbi1rZXlwYWlyLnBocAogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NpZ25fa2V5cGFpcigpOiBzdHJpbmcge30KCi8qKgogKiBDcmVhdGUgYW4gRWQyNTUxOSBrZXlwYWlyIGZyb20gYW4gRWQyNTUxOSBzZWNyZXQga2V5ICsgRWQyNTUxOSBwdWJsaWMga2V5CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tc2lnbi1rZXlwYWlyLWZyb20tc2VjcmV0a2V5LWFuZC1wdWJsaWNrZXkucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldF9rZXkKICogQHBhcmFtIHN0cmluZyAkcHVibGljX2tleQogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NpZ25fa2V5cGFpcl9mcm9tX3NlY3JldGtleV9hbmRfcHVibGlja2V5KAogICAgc3RyaW5nICRzZWNyZXRfa2V5LAogICAgc3RyaW5nICRwdWJsaWNfa2V5Cik6IHN0cmluZyB7fQoKLyoqCiAqIFZlcmlmeSBhIHNpZ25lZCBtZXNzYWdlIGFuZCByZXR1cm4gdGhlIHBsYWludGV4dAogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLXNpZ24tb3Blbi5waHAKICogQHBhcmFtIHN0cmluZyAkc2lnbmVkX21lc3NhZ2UKICogQHBhcmFtIHN0cmluZyAkcHVibGljX2tleQogKiBAcmV0dXJuIHN0cmluZ3xmYWxzZQogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NpZ25fb3BlbihzdHJpbmcgJHNpZ25lZF9tZXNzYWdlLCBzdHJpbmcgJHB1YmxpY19rZXkpOiBzdHJpbmd8ZmFsc2Uge30KCi8qKgogKiBHZXQgdGhlIHB1YmxpYyBrZXkgZnJvbSBhbiBFZDI1NTE5IGtleXBhaXIKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1zaWduLXB1YmxpY2tleS5waHAKICogQHBhcmFtIHN0cmluZyAka2V5X3BhaXIKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zaWduX3B1YmxpY2tleShzdHJpbmcgJGtleV9wYWlyKTogc3RyaW5nIHt9CgovKioKICogR2V0IHRoZSBzZWNyZXQga2V5IGZyb20gYW4gRWQyNTUxOSBrZXlwYWlyCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tc2lnbi1zZWNyZXRrZXkucGhwCiAqIEBwYXJhbSBzdHJpbmcgJGtleV9wYWlyCiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2lnbl9zZWNyZXRrZXkoc3RyaW5nICRrZXlfcGFpcik6IHN0cmluZyB7fQoKLyoqCiAqIERlcml2ZSBhbiBFZDI1NTE5IHB1YmxpYyBrZXkgZnJvbSBhbiBFZDI1NTE5IHNlY3JldCBrZXkKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1zaWduLXB1YmxpY2tleS1mcm9tLXNlY3JldGtleS5waHAKICogQHBhcmFtIHN0cmluZyAkc2VjcmV0X2tleQogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NpZ25fcHVibGlja2V5X2Zyb21fc2VjcmV0a2V5KHN0cmluZyAkc2VjcmV0X2tleSk6IHN0cmluZyB7fQoKLyoqCiAqIERlcml2ZSBhbiBFZDI1NTE5IGtleXBhaXIgZm9yIHVzZSB3aXRoIHRoZSBjcnlwdG9fc2lnbiBBUEkgZnJvbSBhIHNlZWQKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1zaWduLXNlZWQta2V5cGFpci5waHAKICogQHBhcmFtIHN0cmluZyAkc2VlZAogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NpZ25fc2VlZF9rZXlwYWlyKHN0cmluZyAkc2VlZCk6IHN0cmluZyB7fQoKLyoqCiAqIFZlcmlmeSBhIGRldGFjaGVkIHNpZ25hdHVyZQogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLXNpZ24tdmVyaWZ5LWRldGFjaGVkLnBocAogKiBAcGFyYW0gc3RyaW5nICRzaWduYXR1cmUKICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNfa2V5CiAqIEByZXR1cm4gYm9vbAogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NpZ25fdmVyaWZ5X2RldGFjaGVkKHN0cmluZyAkc2lnbmF0dXJlLCBzdHJpbmcgJG1lc3NhZ2UsIHN0cmluZyAkcHVibGljX2tleSk6IGJvb2wge30KCi8qKgogKiBDcmVhdGUgYSBrZXlzdHJlYW0gZnJvbSBhIGtleSBhbmQgbm9uY2UKICogWHNhbHNhMjAKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1zdHJlYW0ucGhwCiAqIEBwYXJhbSBpbnQgJGxlbmd0aAogKiBAcGFyYW0gc3RyaW5nICRub25jZQogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zdHJlYW0oCiAgICBpbnQgJGxlbmd0aCwKICAgIHN0cmluZyAkbm9uY2UsCiAgICBzdHJpbmcgJGtleQopOiBzdHJpbmcge30KCi8qKgogKiBFbmNyeXB0IGEgbWVzc2FnZSB1c2luZyBhIHN0cmVhbSBjaXBoZXIKICogWHNhbHNhMjAKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1zdHJlYW0teG9yLnBocAogKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlCiAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3N0cmVhbV94b3IoCiAgICBzdHJpbmcgJG1lc3NhZ2UsCiAgICBzdHJpbmcgJG5vbmNlLAogICAgc3RyaW5nICRrZXkKKTogc3RyaW5nIHt9CgovKioKICogR2VuZXJhdGUgYSBzdHJpbmcgb2YgcmFuZG9tIGJ5dGVzCiAqIC9kZXYvdXJhbmRvbQogKgogKiBAcGFyYW0gaW50ICRsZW5ndGgKICogQHJldHVybiBzdHJpbmd8ZmFsc2UKICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX3JhbmRvbWJ5dGVzX2J1ZihpbnQgJGxlbmd0aCk6IHN0cmluZyB7fQoKLyoqCiAqIEdlbmVyYXRlIGEgMTYtYml0IGludGVnZXIKICogL2Rldi91cmFuZG9tCiAqCiAqIEByZXR1cm4gaW50CiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9yYW5kb21ieXRlc19yYW5kb20xNigpOiBpbnQge30KCi8qKgogKiBHZW5lcmF0ZSBhbiB1bmJpYXNlZCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIGEgc3BlY2lmaWVkIHZhbHVlCiAqIC9kZXYvdXJhbmRvbQogKgogKiBAcGFyYW0gaW50ICR1cHBlckJvdW5kTm9uSW5jbHVzaXZlCiAqIEByZXR1cm4gaW50CiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9yYW5kb21ieXRlc191bmlmb3JtKGludCAkdXBwZXJCb3VuZE5vbkluY2x1c2l2ZSk6IGludCB7fQoKLyoqCiAqIENvbnZlcnQgdG8gaGV4IHdpdGhvdXQgc2lkZS1jaGFuZWxzCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1iaW4yaGV4LnBocAogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2JpbjJoZXgoc3RyaW5nICRzdHJpbmcpOiBzdHJpbmcge30KCi8qKgogKiBDb21wYXJlIHR3byBzdHJpbmdzIGluIGNvbnN0YW50IHRpbWUKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNvbXBhcmUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZzEKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nMgogKiBAcmV0dXJuIGludAogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fY29tcGFyZShzdHJpbmcgJHN0cmluZzEsIHN0cmluZyAkc3RyaW5nMik6IGludCB7fQoKLyoqCiAqIENvbnZlcnQgZnJvbSBoZXggd2l0aG91dCBzaWRlLWNoYW5lbHMKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWhleDJiaW4ucGhwCiAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZwogKiBAcGFyYW0gc3RyaW5nICRpZ25vcmUKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2hleDJiaW4oc3RyaW5nICRzdHJpbmcsIHN0cmluZyAkaWdub3JlID0gJycpOiBzdHJpbmcge30KCi8qKgogKiBJbmNyZW1lbnQgYSBzdHJpbmcgaW4gbGl0dGxlLWVuZGlhbgogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0taW5jcmVtZW50LnBocAogKiBAcGFyYW0gc3RyaW5nICYkc3RyaW5nCiAqIEByZXR1cm4gdm9pZAogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1faW5jcmVtZW50KHN0cmluZyAmJHN0cmluZyk6IHZvaWQge30KCi8qKgogKiBBZGQgdGhlIHJpZ2h0IG9wZXJhbmQgdG8gdGhlIGxlZnQKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWFkZC5waHAKICogQHBhcmFtIHN0cmluZyAmJHN0cmluZzEKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nMgogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqLwpmdW5jdGlvbiBzb2RpdW1fYWRkKHN0cmluZyAmJHN0cmluZzEsIHN0cmluZyAkc3RyaW5nMik6IHZvaWQge30KCi8qKgogKiBHZXQgdGhlIHRydWUgbWFqb3IgdmVyc2lvbiBvZiBsaWJzb2RpdW0KICogQHJldHVybiBpbnQKICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2xpYnJhcnlfdmVyc2lvbl9tYWpvcigpOiBpbnQge30KCi8qKgogKiBHZXQgdGhlIHRydWUgbWlub3IgdmVyc2lvbiBvZiBsaWJzb2RpdW0KICogQHJldHVybiBpbnQKICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2xpYnJhcnlfdmVyc2lvbl9taW5vcigpOiBpbnQge30KCi8qKgogKiBDb21wYXJlIHR3byBzdHJpbmdzIGluIGNvbnN0YW50IHRpbWUKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLW1lbWNtcC5waHAKICogQHBhcmFtIHN0cmluZyAkc3RyaW5nMQogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcyCiAqIEByZXR1cm4gaW50CiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9tZW1jbXAoc3RyaW5nICRzdHJpbmcxLCBzdHJpbmcgJHN0cmluZzIpOiBpbnQge30KCi8qKgogKiBXaXBlIGEgYnVmZmVyCiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1tZW16ZXJvLnBocAogKiBAcGFyYW0gc3RyaW5nICYkc3RyaW5nCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV9tZW16ZXJvKHN0cmluZyAmJHN0cmluZyk6IHZvaWQge30KCi8qKgogKiBHZXQgdGhlIHZlcnNpb24gc3RyaW5nCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqIEBzaW5jZSA3LjIKICovCmZ1bmN0aW9uIHNvZGl1bV92ZXJzaW9uX3N0cmluZygpOiBzdHJpbmcge30KCi8qKgogKiBTY2FsYXIgbXVsdGlwbGljYXRpb24gb2YgdGhlIGJhc2UgcG9pbnQgYW5kIHlvdXIga2V5CiAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tc2NhbGFybXVsdC1iYXNlCiAqIEBwYXJhbSBzdHJpbmcgJHNlY3JldF9rZXkKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zY2FsYXJtdWx0X2Jhc2UoCiAgICBzdHJpbmcgJHNlY3JldF9rZXksCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjInLCB0bzogJzcuNCcpXSAkc3RyaW5nXzIKKTogc3RyaW5nIHt9CgovKioKICogQ3JlYXRlcyBhIHJhbmRvbSBrZXkKICoKICogSXQgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIHJhbmRvbV9ieXRlcygpIGJ1dCBpbXByb3ZlcyBjb2RlIGNsYXJpdHkgYW5kIGNhbgogKiBwcmV2ZW50IG1pc3VzZSBieSBlbnN1cmluZyB0aGF0IHRoZSBwcm92aWRlZCBrZXkgbGVuZ3RoIGlzIGFsd2F5cyBiZSBjb3JyZWN0LgogKgogKiBAc2luY2UgNy4yCiAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1zZWNyZXRib3gta2V5Z2VuLnBocAogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zZWNyZXRib3hfa2V5Z2VuKCk6IHN0cmluZyB7fQoKLyoqCiAqIENyZWF0ZXMgYSByYW5kb20ga2V5CiAqCiAqIEl0IGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyByYW5kb21fYnl0ZXMoKSBidXQgaW1wcm92ZXMgY29kZSBjbGFyaXR5IGFuZCBjYW4KICogcHJldmVudCBtaXN1c2UgYnkgZW5zdXJpbmcgdGhhdCB0aGUgcHJvdmlkZWQga2V5IGxlbmd0aCBpcyBhbHdheXMgYmUgY29ycmVjdC4KICoKICogQHNpbmNlIDcuMgogKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYWVhZC1hZXMyNTZnY20ta2V5Z2VuLnBocAogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hZWFkX2FlczI1NmdjbV9rZXlnZW4oKTogc3RyaW5nIHt9CgovKioKICogQ3JlYXRlcyBhIHJhbmRvbSBrZXkKICogSXQgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIHJhbmRvbV9ieXRlcygpIGJ1dCBpbXByb3ZlcyBjb2RlIGNsYXJpdHkgYW5kIGNhbgogKiBwcmV2ZW50IG1pc3VzZSBieSBlbnN1cmluZyB0aGF0IHRoZSBwcm92aWRlZCBrZXkgbGVuZ3RoIGlzIGFsd2F5cyBiZSBjb3JyZWN0LgogKgogKiBAc2luY2UgNy4yCiAqIEBzZWUgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1hZWFkLWNoYWNoYTIwcG9seTEzMDUta2V5Z2VuLnBocAogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfa2V5Z2VuKCk6IHN0cmluZyB7fQoKLyoqCiAqIENyZWF0ZXMgYSByYW5kb20ga2V5CiAqCiAqIEl0IGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyByYW5kb21fYnl0ZXMoKSBidXQgaW1wcm92ZXMgY29kZSBjbGFyaXR5IGFuZCBjYW4KICogcHJldmVudCBtaXN1c2UgYnkgZW5zdXJpbmcgdGhhdCB0aGUgcHJvdmlkZWQga2V5IGxlbmd0aCBpcyBhbHdheXMgYmUgY29ycmVjdC4KICoKICogQHNpbmNlIDcuMgogKiBAc2VlIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYWVhZC1jaGFjaGEyMHBvbHkxMzA1LWlldGYta2V5Z2VuLnBocAogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hZWFkX2NoYWNoYTIwcG9seTEzMDVfaWV0Zl9rZXlnZW4oKTogc3RyaW5nIHt9CgovKioKICogQHBhcmFtIHN0cmluZyAkY2lwaGVydGV4dAogKiBAcGFyYW0gc3RyaW5nICRhZGRpdGlvbmFsX2RhdGEKICogQHBhcmFtIHN0cmluZyAkbm9uY2UKICogQHBhcmFtIHN0cmluZyAka2V5CiAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICogQHNlZSBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tY3J5cHRvLWFlYWQteGNoYWNoYTIwcG9seTEzMDUtaWV0Zi1kZWNyeXB0LnBocAogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19hZWFkX3hjaGFjaGEyMHBvbHkxMzA1X2lldGZfZGVjcnlwdChzdHJpbmcgJGNpcGhlcnRleHQsIHN0cmluZyAkYWRkaXRpb25hbF9kYXRhLCBzdHJpbmcgJG5vbmNlLCBzdHJpbmcgJGtleSk6IHN0cmluZ3xmYWxzZSB7fQoKLyoqCiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UKICogQHBhcmFtIHN0cmluZyAkYWRkaXRpb25hbF9kYXRhCiAqIEBwYXJhbSBzdHJpbmcgJG5vbmNlCiAqIEBwYXJhbSBzdHJpbmcgJGtleQogKiBAcmV0dXJuIHN0cmluZwogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYWVhZC14Y2hhY2hhMjBwb2x5MTMwNS1pZXRmLWVuY3J5cHQucGhwCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX2FlYWRfeGNoYWNoYTIwcG9seTEzMDVfaWV0Zl9lbmNyeXB0KHN0cmluZyAkbWVzc2FnZSwgc3RyaW5nICRhZGRpdGlvbmFsX2RhdGEsIHN0cmluZyAkbm9uY2UsIHN0cmluZyAka2V5KTogc3RyaW5nIHt9CgovKioKICogQHNpbmNlIDcuMgogKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tYWVhZC14Y2hhY2hhMjBwb2x5MTMwNS1pZXRmLWtleWdlbi5waHAKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fYWVhZF94Y2hhY2hhMjBwb2x5MTMwNV9pZXRmX2tleWdlbigpOiBzdHJpbmcge30KCi8qKgogKiBAcGFyYW0gc3RyaW5nICRwYXNzd29yZAogKiBAcGFyYW0gaW50ICRvcHNsaW1pdAogKiBAcGFyYW0gaW50ICRtZW1saW1pdAogKiBAcmV0dXJuIGJvb2wKICogQHNpbmNlIDcuMgogKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tcHdoYXNoLXN0ci1uZWVkcy1yZWhhc2gucGhwCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3B3aGFzaF9zdHJfbmVlZHNfcmVoYXNoKHN0cmluZyAkcGFzc3dvcmQsIGludCAkb3BzbGltaXQsIGludCAkbWVtbGltaXQpOiBib29sIHt9CgovKioKICogQHNpbmNlIDcuMgogKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tc2VjcmV0c3RyZWFtLXhjaGFjaGEyMHBvbHkxMzA1LWtleWdlbi5waHAKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X2tleWdlbigpOiBzdHJpbmcge30KCi8qKgogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHJldHVybiBhcnJheQogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqIEBzZWUgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1zZWNyZXRzdHJlYW0teGNoYWNoYTIwcG9seTEzMDUtaW5pdC1wdXNoLnBocAogKi8KZnVuY3Rpb24gc29kaXVtX2NyeXB0b19zZWNyZXRzdHJlYW1feGNoYWNoYTIwcG9seTEzMDVfaW5pdF9wdXNoKHN0cmluZyAka2V5KTogYXJyYXkge30KCiNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoJzcuMicpXQpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9wdXNoKHN0cmluZyAmJHN0YXRlLCAjW1xTZW5zaXRpdmVQYXJhbWV0ZXJdIHN0cmluZyAkbWVzc2FnZSwgc3RyaW5nICRhZGRpdGlvbmFsX2RhdGEgPSAiIiwgaW50ICR0YWcgPSBTT0RJVU1fQ1JZUFRPX1NFQ1JFVFNUUkVBTV9YQ0hBQ0hBMjBQT0xZMTMwNV9UQUdfTUVTU0FHRSk6IHN0cmluZyB7fQoKLyoqCiAqIEBwYXJhbSBzdHJpbmcgJGhlYWRlcgogKiBAcGFyYW0gc3RyaW5nICRrZXkKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1jcnlwdG8tc2VjcmV0c3RyZWFtLXhjaGFjaGEyMHBvbHkxMzA1LWluaXQtcHVsbC5waHAKICovCmZ1bmN0aW9uIHNvZGl1bV9jcnlwdG9fc2VjcmV0c3RyZWFtX3hjaGFjaGEyMHBvbHkxMzA1X2luaXRfcHVsbChzdHJpbmcgJGhlYWRlciwgc3RyaW5nICRrZXkpOiBzdHJpbmcge30KCiNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoJzcuMicpXQpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9wdWxsKHN0cmluZyAmJHN0YXRlLCBzdHJpbmcgJGNpcGhlcnRleHQsIHN0cmluZyAkYWRkaXRpb25hbF9kYXRhID0gIiIpOiBhcnJheXxmYWxzZSB7fQoKLyoqCiAqIEBwYXJhbSBzdHJpbmcgJiRzdGF0ZQogKiBAdGhyb3dzIFNvZGl1bUV4Y2VwdGlvbgogKiBAc2luY2UgNy4yCiAqIEBzZWUgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc29kaXVtLWNyeXB0by1zZWNyZXRzdHJlYW0teGNoYWNoYTIwcG9seTEzMDUtcmVrZXkucGhwCiAqLwpmdW5jdGlvbiBzb2RpdW1fY3J5cHRvX3NlY3JldHN0cmVhbV94Y2hhY2hhMjBwb2x5MTMwNV9yZWtleShzdHJpbmcgJiRzdGF0ZSk6IHZvaWQge30KCi8qKgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICogQHBhcmFtIGludCAkaWQKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBTb2RpdW1FeGNlcHRpb24KICogQHNpbmNlIDcuMgogKiBAc2VlIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnNvZGl1bS1iaW4yYmFzZTY0LnBocAogKi8KZnVuY3Rpb24gc29kaXVtX2JpbjJiYXNlNjQoc3RyaW5nICRzdHJpbmcsIGludCAkaWQpOiBzdHJpbmcge30KCi8qKgogKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcKICogQHBhcmFtIGludCAkaWQKICogQHBhcmFtIHN0cmluZyAkaWdub3JlCiAqIEB0aHJvd3MgU29kaXVtRXhjZXB0aW9uCiAqIEBzaW5jZSA3LjIKICogQHNlZSBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5zb2RpdW0tYmFzZTY0MmJpbi5waHAKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIHNvZGl1bV9iYXNlNjQyYmluKHN0cmluZyAkc3RyaW5nLCBpbnQgJGlkLCBzdHJpbmcgJGlnbm9yZSA9ICcnKTogc3RyaW5nIHt9CgpjbGFzcyBTb2RpdW1FeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KPD9waHAKCmNsYXNzIFY4SnMKewogICAgLyogQ29uc3RhbnRzICovCgogICAgcHVibGljIGNvbnN0IFY4X1ZFUlNJT04gPSAnJzsKICAgIHB1YmxpYyBjb25zdCBGTEFHX05PTkUgPSAxOwogICAgcHVibGljIGNvbnN0IEZMQUdfRk9SQ0VfQVJSQVkgPSAyOwogICAgcHVibGljIGNvbnN0IEZMQUdfUFJPUEFHQVRFX1BIUF9FWENFUFRJT05TID0gNDsKCiAgICAvKiBNZXRob2RzICovCgogICAgLyoqCiAgICAgKiBJbml0aWFsaXplcyBhbmQgc3RhcnRzIFY4IGVuZ2luZSBhbmQgcmV0dXJucyBuZXcgVjhKcyBvYmplY3Qgd2l0aCBpdCdzIG93biBWOCBjb250ZXh0LgogICAgICogU25hcHNob3RzIGFyZSBzdXBwb3J0ZWQgYnkgVjggNC4zLjcgYW5kIGhpZ2hlci4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG9iamVjdF9uYW1lCiAgICAgKiBAcGFyYW0gYXJyYXkgJHZhcmlhYmxlcwogICAgICogQHBhcmFtIGFycmF5ICRleHRlbnNpb25zCiAgICAgKiBAcGFyYW0gYm9vbCAkcmVwb3J0X3VuY2F1Z2h0X2V4Y2VwdGlvbnMKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNuYXBzaG90X2Jsb2IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvYmplY3RfbmFtZSA9ICJQSFAiLCBhcnJheSAkdmFyaWFibGVzID0gW10sIGFycmF5ICRleHRlbnNpb25zID0gW10sICRyZXBvcnRfdW5jYXVnaHRfZXhjZXB0aW9ucyA9IHRydWUsICRzbmFwc2hvdF9ibG9iID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFByb3ZpZGUgYSBmdW5jdGlvbiBvciBtZXRob2QgdG8gYmUgdXNlZCB0byBsb2FkIHJlcXVpcmVkIG1vZHVsZXMuIFRoaXMgY2FuIGJlIGFueSB2YWxpZCBQSFAgY2FsbGFibGUuCiAgICAgKiBUaGUgbG9hZGVyIGZ1bmN0aW9uIHdpbGwgcmVjZWl2ZSB0aGUgbm9ybWFsaXNlZCBtb2R1bGUgcGF0aCBhbmQgc2hvdWxkIHJldHVybiBKYXZhc2NyaXB0IGNvZGUgdG8gYmUgZXhlY3V0ZWQuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGxvYWRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TW9kdWxlTG9hZGVyKGNhbGxhYmxlICRsb2FkZXIpIHt9CgogICAgLyoqCiAgICAgKiBQcm92aWRlIGEgZnVuY3Rpb24gb3IgbWV0aG9kIHRvIGJlIHVzZWQgdG8gbm9ybWFsaXNlIG1vZHVsZSBwYXRocy4gVGhpcyBjYW4gYmUgYW55IHZhbGlkIFBIUCBjYWxsYWJsZS4KICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBzZXRNb2R1bGVMb2FkZXIgdG8gaW5mbHVlbmNlIG5vcm1hbGlzYXRpb24gb2YgdGhlIG1vZHVsZSBwYXRoICh3aGljaAogICAgICogaXMgbm9ybWFsbHkgZG9uZSBieSBWOEpzIGl0c2VsZiBidXQgY2FuIGJlIG92ZXJyaWRlbiB0aGlzIHdheSkuCiAgICAgKiBUaGUgbm9ybWFsaXNlciBmdW5jdGlvbiB3aWxsIHJlY2VpdmUgdGhlIGJhc2UgcGF0aCBvZiB0aGUgY3VycmVudCBtb2R1bGUgKGlmIGFueTsgb3RoZXJ3aXNlIGFuIGVtcHR5IHN0cmluZykKICAgICAqIGFuZCB0aGUgbGl0ZXJhdGUgc3RyaW5nIHByb3ZpZGVkIHRvIHRoZSByZXF1aXJlIG1ldGhvZCBhbmQgc2hvdWxkIHJldHVybiBhbiBhcnJheSBvZiB0d28gc3RyaW5ncyAodGhlIG5ldwogICAgICogbW9kdWxlIGJhc2UgcGF0aCBhcyB3ZWxsIGFzIHRoZSBub3JtYWxpc2VkIG5hbWUpLiAgQm90aCBhcmUgam9pbmVkIGJ5IGEgJy8nIGFuZCB0aGVuIHBhc3NlZCBvbiB0byB0aGUKICAgICAqIG1vZHVsZSBsb2FkZXIgKHVubGVzcyB0aGUgbW9kdWxlIHdhcyBjYWNoZWQgYmVmb3JlKS4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkbm9ybWFsaXNlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TW9kdWxlTm9ybWFsaXNlcihjYWxsYWJsZSAkbm9ybWFsaXNlcikge30KCiAgICAvKioKICAgICAqIENvbXBpbGVzIGFuZCBleGVjdXRlcyBzY3JpcHQgaW4gb2JqZWN0J3MgY29udGV4dCB3aXRoIG9wdGlvbmFsIGlkZW50aWZpZXIgc3RyaW5nLgogICAgICogQSB0aW1lIGxpbWl0IChtaWxsaXNlY29uZHMpIGFuZC9vciBtZW1vcnkgbGltaXQgKGJ5dGVzKSBjYW4gYmUgcHJvdmlkZWQgdG8gcmVzdHJpY3QgZXhlY3V0aW9uLiBUaGVzZSBvcHRpb25zIHdpbGwgdGhyb3cgYSBWOEpzVGltZUxpbWl0RXhjZXB0aW9uIG9yIFY4SnNNZW1vcnlMaW1pdEV4Y2VwdGlvbi4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHNjcmlwdAogICAgICogQHBhcmFtIHN0cmluZyAkaWRlbnRpZmllcgogICAgICogQHBhcmFtIGludCAkZmxhZ3MKICAgICAqIEBwYXJhbSBpbnQgJHRpbWVfbGltaXQgaW4gbWlsbGlzZWNvbmRzCiAgICAgKiBAcGFyYW0gaW50ICRtZW1vcnlfbGltaXQgaW4gYnl0ZXMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGVTdHJpbmcoJHNjcmlwdCwgJGlkZW50aWZpZXIgPSAnJywgJGZsYWdzID0gVjhKczo6RkxBR19OT05FLCAkdGltZV9saW1pdCA9IDAsICRtZW1vcnlfbGltaXQgPSAwKSB7fQoKICAgIC8qKgogICAgICogQ29tcGlsZXMgYSBzY3JpcHQgaW4gb2JqZWN0J3MgY29udGV4dCB3aXRoIG9wdGlvbmFsIGlkZW50aWZpZXIgc3RyaW5nLgogICAgICogQHBhcmFtICRzY3JpcHQKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkZW50aWZpZXIKICAgICAqIEByZXR1cm4gcmVzb3VyY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbXBpbGVTdHJpbmcoJHNjcmlwdCwgJGlkZW50aWZpZXIgPSAnJykge30KCiAgICAvKioKICAgICAqIEV4ZWN1dGVzIGEgcHJlY29tcGlsZWQgc2NyaXB0IGluIG9iamVjdCdzIGNvbnRleHQuCiAgICAgKiBBIHRpbWUgbGltaXQgKG1pbGxpc2Vjb25kcykgYW5kL29yIG1lbW9yeSBsaW1pdCAoYnl0ZXMpIGNhbiBiZSBwcm92aWRlZCB0byByZXN0cmljdCBleGVjdXRpb24uIFRoZXNlIG9wdGlvbnMgd2lsbCB0aHJvdyBhIFY4SnNUaW1lTGltaXRFeGNlcHRpb24gb3IgVjhKc01lbW9yeUxpbWl0RXhjZXB0aW9uLgogICAgICogQHBhcmFtIHJlc291cmNlICRzY3JpcHQKICAgICAqIEBwYXJhbSBpbnQgJGZsYWdzCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lX2xpbWl0CiAgICAgKiBAcGFyYW0gaW50ICRtZW1vcnlfbGltaXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGVTY3JpcHQoJHNjcmlwdCwgJGZsYWdzID0gVjhKczo6RkxBR19OT05FLCAkdGltZV9saW1pdCA9IDAsICRtZW1vcnlfbGltaXQgPSAwKSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSB0aW1lIGxpbWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciB0aGlzIFY4SnMgb2JqZWN0CiAgICAgKiB3b3JrcyBzaW1pbGFyIHRvIHRoZSBzZXRfdGltZV9saW1pdCBwaHAKICAgICAqIEBwYXJhbSBpbnQgJGxpbWl0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lTGltaXQoJGxpbWl0KSB7fQoKICAgIC8qKgogICAgICogU2V0IHRoZSBtZW1vcnkgbGltaXQgKGluIGJ5dGVzKSBmb3IgdGhpcyBWOEpzIG9iamVjdAogICAgICogQHBhcmFtIGludCAkbGltaXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE1lbW9yeUxpbWl0KCRsaW1pdCkge30KCiAgICAvKioKICAgICAqIFNldCB0aGUgYXZlcmFnZSBvYmplY3Qgc2l6ZSAoaW4gYnl0ZXMpIGZvciB0aGlzIFY4SnMgb2JqZWN0LgogICAgICogVjgncyAiYW1vdW50IG9mIGV4dGVybmFsIG1lbW9yeSIgaXMgYWRqdXN0ZWQgYnkgdGhpcyB2YWx1ZSBmb3IgZXZlcnkgZXhwb3J0ZWQgb2JqZWN0LiAgVjggdHJpZ2dlcnMgYSBnYXJiYWdlIGNvbGxlY3Rpb24gb25jZSB0aGlzIHRvdGFscyB0byAxOTIgTUIuCiAgICAgKiBAcGFyYW0gaW50ICRhdmVyYWdlX29iamVjdF9zaXplCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBdmVyYWdlT2JqZWN0U2l6ZSgkYXZlcmFnZV9vYmplY3Rfc2l6ZSkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgdW5jYXVnaHQgcGVuZGluZyBleGNlcHRpb24gb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBwZW5kaW5nIGV4Y2VwdGlvbi4KICAgICAqIEByZXR1cm4gVjhKc1NjcmlwdEV4Y2VwdGlvbnxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQZW5kaW5nRXhjZXB0aW9uKCkge30KCiAgICAvKioKICAgICAqIENsZWFycyB0aGUgdW5jYXVnaHQgcGVuZGluZyBleGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyUGVuZGluZ0V4Y2VwdGlvbigpIHt9CgogICAgLyogU3RhdGljIG1ldGhvZHMgKi8KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBwZXJzaXN0ZW50IGNvbnRleHQgaW5kZXBlbmRlbnQgZ2xvYmFsIEphdmFzY3JpcHQgZXh0ZW5zaW9uLgogICAgICogTk9URSEgVGhlc2UgZXh0ZW5zaW9ucyBleGlzdCB1bnRpbCBQSFAgaXMgc2h1dGRvd24gYW5kIHRoZXkgbmVlZCB0byBiZSByZWdpc3RlcmVkIGJlZm9yZSBWOCBpcyBpbml0aWFsaXplZC4KICAgICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlIFY4IGlzIGluaXRpYWxpemVkIG9ubHkgb25jZSBwZXIgcHJvY2VzcyB0aHVzIHRoaXMgY2FsbCBoYXMgdG8gYmUgZG9uZSBiZWZvcmUgYW55IFY4SnMgb2JqZWN0cyBhcmUgY3JlYXRlZCEKICAgICAqIEBwYXJhbSBzdHJpbmcgJGV4dGVuc2lvbl9uYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb2RlCiAgICAgKiBAcGFyYW0gYXJyYXkgJGRlcGVuZGVuY2llcwogICAgICogQHBhcmFtIGJvb2wgJGF1dG9fZW5hYmxlCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWdpc3RlckV4dGVuc2lvbigkZXh0ZW5zaW9uX25hbWUsICRjb2RlLCBhcnJheSAkZGVwZW5kZW5jaWVzLCAkYXV0b19lbmFibGUgPSBmYWxzZSkge30KCiAgICAvKioKICAgICAqIFJldHVybnMgZXh0ZW5zaW9ucyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCB3aXRoIFY4SnM6OnJlZ2lzdGVyRXh0ZW5zaW9uKCkuCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9ucygpIHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgY3VzdG9tIFY4IGhlYXAgc25hcHNob3Qgd2l0aCB0aGUgcHJvdmlkZWQgSmF2YVNjcmlwdCBzb3VyY2UgZW1iZWRkZWQuCiAgICAgKiBTbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCBieSBWOCA0LjMuNyBhbmQgaGlnaGVyLiAgRm9yIG9sZGVyIHZlcnNpb25zIG9mIFY4IHRoaXMKICAgICAqIGV4dGVuc2lvbiBkb2Vzbid0IHByb3ZpZGUgdGhpcyBtZXRob2QuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbWJlZF9zb3VyY2UKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlU25hcHNob3QoJGVtYmVkX3NvdXJjZSkge30KfQoKZmluYWwgY2xhc3MgVjhKc1NjcmlwdEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgp7CiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRKc0ZpbGVOYW1lKCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRKc0xpbmVOdW1iZXIoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldEpzU3RhcnRDb2x1bW4oKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldEpzRW5kQ29sdW1uKCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBnZXRKc1NvdXJjZUxpbmUoKSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIGdldEpzVHJhY2UoKSB7fQp9CgpmaW5hbCBjbGFzcyBWOEpzVGltZUxpbWl0RXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHt9CgpmaW5hbCBjbGFzcyBWOEpzTWVtb3J5TGltaXRFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KPD9waHAKCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJGhjb25uCiAqIEBwYXJhbSByZXNvdXJjZSAmJGNvbXBDb2RlCiAqIEBwYXJhbSByZXNvdXJjZSAmJHJlYXNvbgogKi8KZnVuY3Rpb24gbXFzZXJpZXNfYmFjaygkaGNvbm4sICYkY29tcENvZGUsICYkcmVhc29uKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGNvbm4KICogQHBhcmFtIGFycmF5ICRiZWdpbk9wdGlvbnMKICogQHBhcmFtIHJlc291cmNlICYkY29tcENvZGUKICogQHBhcmFtIHJlc291cmNlICYkcmVhc29uCiAqLwpmdW5jdGlvbiBtcXNlcmllc19iZWdpbigkaGNvbm4sIGFycmF5ICRiZWdpbk9wdGlvbnMsICYkY29tcENvZGUsICYkcmVhc29uKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGNvbm4KICogQHBhcmFtIHJlc291cmNlICRob2JqCiAqIEBwYXJhbSBpbnQgJG9wdGlvbnMKICogQHBhcmFtIHJlc291cmNlICYkY29tcENvZGUKICogQHBhcmFtIHJlc291cmNlICYkcmVhc29uCiAqLwpmdW5jdGlvbiBtcXNlcmllc19jbG9zZSgkaGNvbm4sICRob2JqLCAkb3B0aW9ucywgJiRjb21wQ29kZSwgJiRyZWFzb24pIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRoY29ubgogKiBAcGFyYW0gcmVzb3VyY2UgJiRjb21wQ29kZQogKiBAcGFyYW0gcmVzb3VyY2UgJiRyZWFzb24KICovCmZ1bmN0aW9uIG1xc2VyaWVzX2NtaXQoJGhjb25uLCAmJGNvbXBDb2RlLCAmJHJlYXNvbikge30KCi8qKgogKiBAcGFyYW0gc3RyaW5nICRxTWFuYWdlck5hbWUKICogQHBhcmFtIHJlc291cmNlICYkaGNvbm4KICogQHBhcmFtIHJlc291cmNlICYkY29tcENvZGUKICogQHBhcmFtIHJlc291cmNlICYkcmVhc29uCiAqLwpmdW5jdGlvbiBtcXNlcmllc19jb25uKCRxTWFuYWdlck5hbWUsICYkaGNvbm4sICYkY29tcENvZGUsICYkcmVhc29uKSB7fQoKLyoqCiAqIEBwYXJhbSBzdHJpbmcgJHFNYW5hZ2VyTmFtZQogKiBAcGFyYW0gYXJyYXkgJiRjb25uT3B0aW9ucwogKiBAcGFyYW0gcmVzb3VyY2UgJiRoY29ubgogKiBAcGFyYW0gcmVzb3VyY2UgJiRjb21wQ29kZQogKiBAcGFyYW0gcmVzb3VyY2UgJiRyZWFzb24KICovCmZ1bmN0aW9uIG1xc2VyaWVzX2Nvbm54KCRxTWFuYWdlck5hbWUsIGFycmF5ICYkY29ubk9wdGlvbnMsICYkaGNvbm4sICYkY29tcENvZGUsICYkcmVhc29uKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGNvbm4KICogQHBhcmFtIHJlc291cmNlICYkY29tcENvZGUKICogQHBhcmFtIHJlc291cmNlICYkcmVhc29uCiAqLwpmdW5jdGlvbiBtcXNlcmllc19kaXNjKCRoY29ubiwgJiRjb21wQ29kZSwgJiRyZWFzb24pIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRoQ29ubgogKiBAcGFyYW0gcmVzb3VyY2UgJGhPYmoKICogQHBhcmFtIGFycmF5ICYkbWQKICogQHBhcmFtIGFycmF5ICYkZ21vCiAqIEBwYXJhbSBpbnQgJiRidWZmZXJMZW5ndGgKICogQHBhcmFtIHN0cmluZyAmJG1zZwogKiBAcGFyYW0gaW50ICYkZGF0YV9sZW5ndGgKICogQHBhcmFtIHJlc291cmNlICYkY29tcENvZGUKICogQHBhcmFtIHJlc291cmNlICYkcmVhc29uCiAqLwpmdW5jdGlvbiBtcXNlcmllc19nZXQoJGhDb25uLCAkaE9iaiwgYXJyYXkgJiRtZCwgYXJyYXkgJiRnbW8sICYkYnVmZmVyTGVuZ3RoLCAmJG1zZywgJiRkYXRhX2xlbmd0aCwgJiRjb21wQ29kZSwgJiRyZWFzb24pIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRoY29ubgogKiBAcGFyYW0gcmVzb3VyY2UgJGhvYmoKICogQHBhcmFtIGludCAkc2VsZWN0b3JDb3VudAogKiBAcGFyYW0gYXJyYXkgJHNlbGVjdG9ycwogKiBAcGFyYW0gaW50ICRpbnRBdHRyQ291bnQKICogQHBhcmFtIHJlc291cmNlICYkaW50QXR0cgogKiBAcGFyYW0gaW50ICRjaGFyQXR0ckxlbmd0aAogKiBAcGFyYW0gcmVzb3VyY2UgJiRjaGFyQXR0cgogKiBAcGFyYW0gcmVzb3VyY2UgJiRjb21wQ29kZQogKiBAcGFyYW0gcmVzb3VyY2UgJiRyZWFzb24KICovCmZ1bmN0aW9uIG1xc2VyaWVzX2lucSgkaGNvbm4sICRob2JqLCAkc2VsZWN0b3JDb3VudCwgYXJyYXkgJHNlbGVjdG9ycywgJGludEF0dHJDb3VudCwgJiRpbnRBdHRyLCAkY2hhckF0dHJMZW5ndGgsICYkY2hhckF0dHIsICYkY29tcENvZGUsICYkcmVhc29uKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGNvbm4KICogQHBhcmFtIGFycmF5ICYkb2JqRGVzYwogKiBAcGFyYW0gaW50ICRvcHRpb24KICogQHBhcmFtIHJlc291cmNlICYkaG9iagogKiBAcGFyYW0gcmVzb3VyY2UgJiRjb21wQ29kZQogKiBAcGFyYW0gcmVzb3VyY2UgJiRyZWFzb24KICovCmZ1bmN0aW9uIG1xc2VyaWVzX29wZW4oJGhjb25uLCBhcnJheSAmJG9iakRlc2MsICRvcHRpb24sICYkaG9iaiwgJiRjb21wQ29kZSwgJiRyZWFzb24pIHt9CgovKioKICogQHBhcmFtIHJlc291cmNlICRoY29ubgogKiBAcGFyYW0gcmVzb3VyY2UgJiRvYmpEZXNjCiAqIEBwYXJhbSByZXNvdXJjZSAmJG1zZ0Rlc2MKICogQHBhcmFtIHJlc291cmNlICYkcG1vCiAqIEBwYXJhbSBzdHJpbmcgJiRidWZmZXIKICogQHBhcmFtIHJlc291cmNlICYkY29tcENvZGUKICogQHBhcmFtIHJlc291cmNlICYkcmVhc29uCiAqLwpmdW5jdGlvbiBtcXNlcmllc19wdXQxKCRoY29ubiwgJiRvYmpEZXNjLCAmJG1zZ0Rlc2MsICYkcG1vLCAkYnVmZmVyLCAmJGNvbXBDb2RlLCAmJHJlYXNvbikge30KCi8qKgogKiBAcGFyYW0gcmVzb3VyY2UgJGhDb25uCiAqIEBwYXJhbSByZXNvdXJjZSAkaE9iagogKiBAcGFyYW0gYXJyYXkgJiRtZAogKiBAcGFyYW0gYXJyYXkgJiRwbW8KICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZQogKiBAcGFyYW0gcmVzb3VyY2UgJiRjb21wQ29kZQogKiBAcGFyYW0gcmVzb3VyY2UgJiRyZWFzb24KICovCmZ1bmN0aW9uIG1xc2VyaWVzX3B1dCgkaENvbm4sICRoT2JqLCBhcnJheSAmJG1kLCBhcnJheSAmJHBtbywgJG1lc3NhZ2UsICYkY29tcENvZGUsICYkcmVhc29uKSB7fQoKLyoqCiAqIEBwYXJhbSByZXNvdXJjZSAkaGNvbm4KICogQHBhcmFtIHJlc291cmNlICRob2JqCiAqIEBwYXJhbSBpbnQgJHNlbGVjdG9yY291bnQKICogQHBhcmFtIGFycmF5ICRzZWxlY3RvcnMKICogQHBhcmFtIGludCAkaW50YXR0cmNvdW50CiAqIEBwYXJhbSBhcnJheSAkaW50YXR0cnMKICogQHBhcmFtIGludCAkY2hhcmF0dHJsZW5ndGgKICogQHBhcmFtIGFycmF5ICRjaGFyYXR0cnMKICogQHBhcmFtIHJlc291cmNlICYkY29tcENvZGUKICogQHBhcmFtIHJlc291cmNlICYkcmVhc29uCiAqLwpmdW5jdGlvbiBtcXNlcmllc19zZXQoJGhjb25uLCAkaG9iaiwgJHNlbGVjdG9yY291bnQsIGFycmF5ICRzZWxlY3RvcnMsICRpbnRhdHRyY291bnQsIGFycmF5ICRpbnRhdHRycywgJGNoYXJhdHRybGVuZ3RoLCBhcnJheSAkY2hhcmF0dHJzLCAmJGNvbXBDb2RlLCAmJHJlYXNvbikge30KCi8qKgogKiBAcGFyYW0gaW50ICRyZWFzb24KICoKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIG1xc2VyaWVzX3N0cmVycm9yKCRyZWFzb24pCnsKICAgIHJldHVybiAoc3RyaW5nKSRyZWFzb247Cn0KCi8qCiAqIFRvIG9idGFpbiB0aGUgbGlzdCBiZWxvdywgZXhlY3V0ZSAgIHByaW50X3IoZ2V0X2RlZmluZWRfY29uc3RhbnRzKHRydWUpWydtcXNlcmllcyddKTsgIGFuZCB0aGVuIHJlZm9ybWF0CiAqLwpkZWZpbmUoJ01RU0VSSUVTX01RQ0NfT0snLCAwKTsKZGVmaW5lKCdNUVNFUklFU19NUUNDX1dBUk5JTkcnLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUUNDX0ZBSUxFRCcsIDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0NfVU5LTk9XTicsIC0xKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX05PTkUnLCAwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FQUExfRklSU1QnLCA5MDApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQVBQTF9MQVNUJywgOTk5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FMSUFTX0JBU0VfUV9UWVBFX0VSUk9SJywgMjAwMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19BTFJFQURZX0NPTk5FQ1RFRCcsIDIwMDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQkFDS0VEX09VVCcsIDIwMDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQlVGRkVSX0VSUk9SJywgMjAwNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19CVUZGRVJfTEVOR1RIX0VSUk9SJywgMjAwNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DSEFSX0FUVFJfTEVOR1RIX0VSUk9SJywgMjAwNik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DSEFSX0FUVFJTX0VSUk9SJywgMjAwNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DSEFSX0FUVFJTX1RPT19TSE9SVCcsIDIwMDgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ09OTkVDVElPTl9CUk9LRU4nLCAyMDA5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0RBVEFfTEVOR1RIX0VSUk9SJywgMjAxMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19EWU5BTUlDX1FfTkFNRV9FUlJPUicsIDIwMTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfRU5WSVJPTk1FTlRfRVJST1InLCAyMDEyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0VYUElSWV9FUlJPUicsIDIwMTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfRkVFREJBQ0tfRVJST1InLCAyMDE0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0dFVF9JTkhJQklURUQnLCAyMDE2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0hBTkRMRV9OT1RfQVZBSUxBQkxFJywgMjAxNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19IQ09OTl9FUlJPUicsIDIwMTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSE9CSl9FUlJPUicsIDIwMTkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSU5ISUJJVF9WQUxVRV9FUlJPUicsIDIwMjApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSU5UX0FUVFJfQ09VTlRfRVJST1InLCAyMDIxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOVF9BVFRSX0NPVU5UX1RPT19TTUFMTCcsIDIwMjIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSU5UX0FUVFJTX0FSUkFZX0VSUk9SJywgMjAyMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TWU5DUE9JTlRfTElNSVRfUkVBQ0hFRCcsIDIwMjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTUFYX0NPTk5TX0xJTUlUX1JFQUNIRUQnLCAyMDI1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX01EX0VSUk9SJywgMjAyNik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NSVNTSU5HX1JFUExZX1RPX1EnLCAyMDI3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX01TR19UWVBFX0VSUk9SJywgMjAyOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NU0dfVE9PX0JJR19GT1JfUScsIDIwMzApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTVNHX1RPT19CSUdfRk9SX1FfTUdSJywgMjAzMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19OT19NU0dfQVZBSUxBQkxFJywgMjAzMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19OT19NU0dfVU5ERVJfQ1VSU09SJywgMjAzNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19OT1RfQVVUSE9SSVpFRCcsIDIwMzUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTk9UX09QRU5fRk9SX0JST1dTRScsIDIwMzYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTk9UX09QRU5fRk9SX0lOUFVUJywgMjAzNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19OT1RfT1BFTl9GT1JfSU5RVUlSRScsIDIwMzgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTk9UX09QRU5fRk9SX09VVFBVVCcsIDIwMzkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTk9UX09QRU5fRk9SX1NFVCcsIDIwNDApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfT0JKRUNUX0NIQU5HRUQnLCAyMDQxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX09CSkVDVF9JTl9VU0UnLCAyMDQyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX09CSkVDVF9UWVBFX0VSUk9SJywgMjA0Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19PRF9FUlJPUicsIDIwNDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfT1BUSU9OX05PVF9WQUxJRF9GT1JfVFlQRScsIDIwNDUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfT1BUSU9OU19FUlJPUicsIDIwNDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUEVSU0lTVEVOQ0VfRVJST1InLCAyMDQ3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1BFUlNJU1RFTlRfTk9UX0FMTE9XRUQnLCAyMDQ4KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1BSSU9SSVRZX0VYQ0VFRFNfTUFYSU1VTScsIDIwNDkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUFJJT1JJVFlfRVJST1InLCAyMDUwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1BVVF9JTkhJQklURUQnLCAyMDUxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1FfREVMRVRFRCcsIDIwNTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUV9GVUxMJywgMjA1Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19RX05PVF9FTVBUWScsIDIwNTUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUV9TUEFDRV9OT1RfQVZBSUxBQkxFJywgMjA1Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19RX1RZUEVfRVJST1InLCAyMDU3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1FfTUdSX05BTUVfRVJST1InLCAyMDU4KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1FfTUdSX05PVF9BVkFJTEFCTEUnLCAyMDU5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1JFUE9SVF9PUFRJT05TX0VSUk9SJywgMjA2MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TRUNPTkRfTUFSS19OT1RfQUxMT1dFRCcsIDIwNjIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU0VDVVJJVFlfRVJST1InLCAyMDYzKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NFTEVDVE9SX0NPVU5UX0VSUk9SJywgMjA2NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TRUxFQ1RPUl9MSU1JVF9FWENFRURFRCcsIDIwNjYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU0VMRUNUT1JfRVJST1InLCAyMDY3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NFTEVDVE9SX05PVF9GT1JfVFlQRScsIDIwNjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU0lHTkFMX09VVFNUQU5ESU5HJywgMjA2OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TSUdOQUxfUkVRVUVTVF9BQ0NFUFRFRCcsIDIwNzApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1RPUkFHRV9OT1RfQVZBSUxBQkxFJywgMjA3MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TWU5DUE9JTlRfTk9UX0FWQUlMQUJMRScsIDIwNzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVFJJR0dFUl9DT05UUk9MX0VSUk9SJywgMjA3NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19UUklHR0VSX0RFUFRIX0VSUk9SJywgMjA3Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19UUklHR0VSX01TR19QUklPUklUWV9FUlInLCAyMDc3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1RSSUdHRVJfVFlQRV9FUlJPUicsIDIwNzgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVFJVTkNBVEVEX01TR19BQ0NFUFRFRCcsIDIwNzkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVFJVTkNBVEVEX01TR19GQUlMRUQnLCAyMDgwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1VOS05PV05fQUxJQVNfQkFTRV9RJywgMjA4Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19VTktOT1dOX09CSkVDVF9OQU1FJywgMjA4NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19VTktOT1dOX09CSkVDVF9RX01HUicsIDIwODYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVU5LTk9XTl9SRU1PVEVfUV9NR1InLCAyMDg3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1dBSVRfSU5URVJWQUxfRVJST1InLCAyMDkwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1hNSVRfUV9UWVBFX0VSUk9SJywgMjA5MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19YTUlUX1FfVVNBR0VfRVJST1InLCAyMDkyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX05PVF9PUEVOX0ZPUl9QQVNTX0FMTCcsIDIwOTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTk9UX09QRU5fRk9SX1BBU1NfSURFTlQnLCAyMDk0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX05PVF9PUEVOX0ZPUl9TRVRfQUxMJywgMjA5NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19OT1RfT1BFTl9GT1JfU0VUX0lERU5UJywgMjA5Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DT05URVhUX0hBTkRMRV9FUlJPUicsIDIwOTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ09OVEVYVF9OT1RfQVZBSUxBQkxFJywgMjA5OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TSUdOQUwxX0VSUk9SJywgMjA5OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19PQkpFQ1RfQUxSRUFEWV9FWElTVFMnLCAyMTAwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX09CSkVDVF9EQU1BR0VEJywgMjEwMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19SRVNPVVJDRV9QUk9CTEVNJywgMjEwMik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19BTk9USEVSX1FfTUdSX0NPTk5FQ1RFRCcsIDIxMDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVU5LTk9XTl9SRVBPUlRfT1BUSU9OJywgMjEwNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TVE9SQUdFX0NMQVNTX0VSUk9SJywgMjEwNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DT0RfTk9UX1ZBTElEX0ZPUl9YQ0ZfUScsIDIxMDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfWFdBSVRfQ0FOQ0VMRUQnLCAyMTA3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1hXQUlUX0VSUk9SJywgMjEwOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TVVBQUkVTU0VEX0JZX0VYSVQnLCAyMTA5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0ZPUk1BVF9FUlJPUicsIDIxMTApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU09VUkNFX0NDU0lEX0VSUk9SJywgMjExMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TT1VSQ0VfSU5URUdFUl9FTkNfRVJST1InLCAyMTEyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NPVVJDRV9ERUNJTUFMX0VOQ19FUlJPUicsIDIxMTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU09VUkNFX0ZMT0FUX0VOQ19FUlJPUicsIDIxMTQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVEFSR0VUX0NDU0lEX0VSUk9SJywgMjExNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19UQVJHRVRfSU5URUdFUl9FTkNfRVJST1InLCAyMTE2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1RBUkdFVF9ERUNJTUFMX0VOQ19FUlJPUicsIDIxMTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVEFSR0VUX0ZMT0FUX0VOQ19FUlJPUicsIDIxMTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTk9UX0NPTlZFUlRFRCcsIDIxMTkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ09OVkVSVEVEX01TR19UT09fQklHJywgMjEyMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19UUlVOQ0FURUQnLCAyMTIwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX05PX0VYVEVSTkFMX1BBUlRJQ0lQQU5UUycsIDIxMjEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUEFSVElDSVBBTlRfTk9UX0FWQUlMQUJMRScsIDIxMjIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfT1VUQ09NRV9NSVhFRCcsIDIxMjMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfT1VUQ09NRV9QRU5ESU5HJywgMjEyNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19CUklER0VfU1RBUlRFRCcsIDIxMjUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQlJJREdFX1NUT1BQRUQnLCAyMTI2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FEQVBURVJfU1RPUkFHRV9TSE9SVEFHRScsIDIxMjcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVU9XX0lOX1BST0dSRVNTJywgMjEyOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19BREFQVEVSX0NPTk5fTE9BRF9FUlJPUicsIDIxMjkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQURBUFRFUl9TRVJWX0xPQURfRVJST1InLCAyMTMwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FEQVBURVJfREVGU19FUlJPUicsIDIxMzEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQURBUFRFUl9ERUZTX0xPQURfRVJST1InLCAyMTMyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FEQVBURVJfQ09OVl9MT0FEX0VSUk9SJywgMjEzMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19CT19FUlJPUicsIDIxMzQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfREhfRVJST1InLCAyMTM1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX01VTFRJUExFX1JFQVNPTlMnLCAyMTM2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX09QRU5fRkFJTEVEJywgMjEzNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19BREFQVEVSX0RJU0NfTE9BRF9FUlJPUicsIDIxMzgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ05PX0VSUk9SJywgMjEzOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DSUNTX1dBSVRfRkFJTEVEJywgMjE0MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19ETEhfRVJST1InLCAyMTQxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0hFQURFUl9FUlJPUicsIDIxNDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU09VUkNFX0xFTkdUSF9FUlJPUicsIDIxNDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVEFSR0VUX0xFTkdUSF9FUlJPUicsIDIxNDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU09VUkNFX0JVRkZFUl9FUlJPUicsIDIxNDUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVEFSR0VUX0JVRkZFUl9FUlJPUicsIDIxNDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSUlIX0VSUk9SJywgMjE0OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19QQ0ZfRVJST1InLCAyMTQ5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0RCQ1NfRVJST1InLCAyMTUwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX09CSkVDVF9OQU1FX0VSUk9SJywgMjE1Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19PQkpFQ1RfUV9NR1JfTkFNRV9FUlJPUicsIDIxNTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUkVDU19QUkVTRU5UX0VSUk9SJywgMjE1NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19PQkpFQ1RfUkVDT1JEU19FUlJPUicsIDIxNTUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUkVTUE9OU0VfUkVDT1JEU19FUlJPUicsIDIxNTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQVNJRF9NSVNNQVRDSCcsIDIxNTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUE1PX1JFQ09SRF9GTEFHU19FUlJPUicsIDIxNTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUFVUX01TR19SRUNPUkRTX0VSUk9SJywgMjE1OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DT05OX0lEX0lOX1VTRScsIDIxNjApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUV9NR1JfUVVJRVNDSU5HJywgMjE2MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19RX01HUl9TVE9QUElORycsIDIxNjIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfRFVQTElDQVRFX1JFQ09WX0NPT1JEJywgMjE2Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19QTU9fRVJST1InLCAyMTczKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FQSV9FWElUX05PVF9GT1VORCcsIDIxODIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQVBJX0VYSVRfTE9BRF9FUlJPUicsIDIxODMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUkVNT1RFX1FfTkFNRV9FUlJPUicsIDIxODQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSU5DT05TSVNURU5UX1BFUlNJU1RFTkNFJywgMjE4NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19HTU9fRVJST1InLCAyMTg2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NJQ1NfQlJJREdFX1JFU1RSSUNUSU9OJywgMjE4Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TVE9QUEVEX0JZX0NMVVNURVJfRVhJVCcsIDIxODgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0xVU1RFUl9SRVNPTFVUSU9OX0VSUk9SJywgMjE4OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DT05WRVJURURfU1RSSU5HX1RPT19CSUcnLCAyMTkwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1RNQ19FUlJPUicsIDIxOTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUEFHRVNFVF9GVUxMJywgMjE5Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TVE9SQUdFX01FRElVTV9GVUxMJywgMjE5Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19QQUdFU0VUX0VSUk9SJywgMjE5Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19OQU1FX05PVF9WQUxJRF9GT1JfVFlQRScsIDIxOTQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVU5FWFBFQ1RFRF9FUlJPUicsIDIxOTUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVU5LTk9XTl9YTUlUX1EnLCAyMTk2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1VOS05PV05fREVGX1hNSVRfUScsIDIxOTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfREVGX1hNSVRfUV9UWVBFX0VSUk9SJywgMjE5OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19ERUZfWE1JVF9RX1VTQUdFX0VSUk9SJywgMjE5OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NU0dfTUFSS0VEX0JST1dTRV9DT19PUCcsIDIyMDApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTkFNRV9JTl9VU0UnLCAyMjAxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NPTk5FQ1RJT05fUVVJRVNDSU5HJywgMjIwMik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DT05ORUNUSU9OX1NUT1BQSU5HJywgMjIwMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19BREFQVEVSX05PVF9BVkFJTEFCTEUnLCAyMjA0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX01TR19JRF9FUlJPUicsIDIyMDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ09SUkVMX0lEX0VSUk9SJywgMjIwNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19GSUxFX1NZU1RFTV9FUlJPUicsIDIyMDgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTk9fTVNHX0xPQ0tFRCcsIDIyMDkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU09BUF9ET1RORVRfRVJST1InLCAyMjEwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NPQVBfQVhJU19FUlJPUicsIDIyMTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU09BUF9VUkxfRVJST1InLCAyMjEyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0ZJTEVfTk9UX0FVRElURUQnLCAyMjE2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NPTk5FQ1RJT05fTk9UX0FVVEhPUklaRUQnLCAyMjE3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX01TR19UT09fQklHX0ZPUl9DSEFOTkVMJywgMjIxOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DQUxMX0lOX1BST0dSRVNTJywgMjIxOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19STUhfRVJST1InLCAyMjIwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1FfTUdSX0FDVElWRScsIDIyMjIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUV9NR1JfTk9UX0FDVElWRScsIDIyMjMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUV9ERVBUSF9ISUdIJywgMjIyNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19RX0RFUFRIX0xPVycsIDIyMjUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUV9TRVJWSUNFX0lOVEVSVkFMX0hJR0gnLCAyMjI2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1FfU0VSVklDRV9JTlRFUlZBTF9PSycsIDIyMjcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUkZIX0hFQURFUl9GSUVMRF9FUlJPUicsIDIyMjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUkFTX1BST1BFUlRZX0VSUk9SJywgMjIyOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19VTklUX09GX1dPUktfTk9UX1NUQVJURUQnLCAyMjMyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NIQU5ORUxfQVVUT19ERUZfT0snLCAyMjMzKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NIQU5ORUxfQVVUT19ERUZfRVJST1InLCAyMjM0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NGSF9FUlJPUicsIDIyMzUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0ZJTF9FUlJPUicsIDIyMzYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0ZJTl9FUlJPUicsIDIyMzcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0ZTTF9FUlJPUicsIDIyMzgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0ZTVF9FUlJPUicsIDIyMzkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSU5DT01QTEVURV9HUk9VUCcsIDIyNDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSU5DT01QTEVURV9NU0cnLCAyMjQyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOQ09OU0lTVEVOVF9DQ1NJRFMnLCAyMjQzKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOQ09OU0lTVEVOVF9FTkNPRElOR1MnLCAyMjQ0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOQ09OU0lTVEVOVF9VT1cnLCAyMjQ1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOVkFMSURfTVNHX1VOREVSX0NVUlNPUicsIDIyNDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTUFUQ0hfT1BUSU9OU19FUlJPUicsIDIyNDcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTURFX0VSUk9SJywgMjI0OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NU0dfRkxBR1NfRVJST1InLCAyMjQ5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX01TR19TRVFfTlVNQkVSX0VSUk9SJywgMjI1MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19PRkZTRVRfRVJST1InLCAyMjUxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX09SSUdJTkFMX0xFTkdUSF9FUlJPUicsIDIyNTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU0VHTUVOVF9MRU5HVEhfWkVSTycsIDIyNTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVU9XX05PVF9BVkFJTEFCTEUnLCAyMjU1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1dST05HX0dNT19WRVJTSU9OJywgMjI1Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19XUk9OR19NRF9WRVJTSU9OJywgMjI1Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19HUk9VUF9JRF9FUlJPUicsIDIyNTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSU5DT05TSVNURU5UX0JST1dTRScsIDIyNTkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfWFFIX0VSUk9SJywgMjI2MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TUkNfRU5WX0VSUk9SJywgMjI2MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TUkNfTkFNRV9FUlJPUicsIDIyNjIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfREVTVF9FTlZfRVJST1InLCAyMjYzKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0RFU1RfTkFNRV9FUlJPUicsIDIyNjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVE1fRVJST1InLCAyMjY1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NMVVNURVJfRVhJVF9FUlJPUicsIDIyNjYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0xVU1RFUl9FWElUX0xPQURfRVJST1InLCAyMjY3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NMVVNURVJfUFVUX0lOSElCSVRFRCcsIDIyNjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0xVU1RFUl9SRVNPVVJDRV9FUlJPUicsIDIyNjkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTk9fREVTVElOQVRJT05TX0FWQUlMQUJMRScsIDIyNzApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ09OTl9UQUdfSU5fVVNFJywgMjI3MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19QQVJUSUFMTFlfQ09OVkVSVEVEJywgMjI3Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DT05ORUNUSU9OX0VSUk9SJywgMjI3Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19PUFRJT05fRU5WSVJPTk1FTlRfRVJST1InLCAyMjc0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NEX0VSUk9SJywgMjI3Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DTElFTlRfQ09OTl9FUlJPUicsIDIyNzgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0hBTk5FTF9TVE9QUEVEX0JZX1VTRVInLCAyMjc5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0hDT05GSUdfRVJST1InLCAyMjgwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0ZVTkNUSU9OX0VSUk9SJywgMjI4MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DSEFOTkVMX1NUQVJURUQnLCAyMjgyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NIQU5ORUxfU1RPUFBFRCcsIDIyODMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0hBTk5FTF9DT05WX0VSUk9SJywgMjI4NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TRVJWSUNFX05PVF9BVkFJTEFCTEUnLCAyMjg1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOSVRJQUxJWkFUSU9OX0ZBSUxFRCcsIDIyODYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVEVSTUlOQVRJT05fRkFJTEVEJywgMjI4Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19VTktOT1dOX1FfTkFNRScsIDIyODgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU0VSVklDRV9FUlJPUicsIDIyODkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUV9BTFJFQURZX0VYSVNUUycsIDIyOTApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVVNFUl9JRF9OT1RfQVZBSUxBQkxFJywgMjI5MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19VTktOT1dOX0VOVElUWScsIDIyOTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVU5LTk9XTl9BVVRIX0VOVElUWScsIDIyOTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVU5LTk9XTl9SRUZfT0JKRUNUJywgMjI5NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DSEFOTkVMX0FDVElWQVRFRCcsIDIyOTUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0hBTk5FTF9OT1RfQUNUSVZBVEVEJywgMjI5Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19VT1dfQ0FOQ0VMRUQnLCAyMjk3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0ZVTkNUSU9OX05PVF9TVVBQT1JURUQnLCAyMjk4KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NFTEVDVE9SX1RZUEVfRVJST1InLCAyMjk5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NPTU1BTkRfVFlQRV9FUlJPUicsIDIzMDApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTVVMVElQTEVfSU5TVEFOQ0VfRVJST1InLCAyMzAxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NZU1RFTV9JVEVNX05PVF9BTFRFUkFCTEUnLCAyMzAyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0JBR19DT05WRVJTSU9OX0VSUk9SJywgMjMwMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TRUxFQ1RPUl9PVVRfT0ZfUkFOR0UnLCAyMzA0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NFTEVDVE9SX05PVF9VTklRVUUnLCAyMzA1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOREVYX05PVF9QUkVTRU5UJywgMjMwNik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TVFJJTkdfRVJST1InLCAyMzA3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0VOQ09ESU5HX05PVF9TVVBQT1JURUQnLCAyMzA4KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NFTEVDVE9SX05PVF9QUkVTRU5UJywgMjMwOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19PVVRfU0VMRUNUT1JfRVJST1InLCAyMzEwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NUUklOR19UUlVOQ0FURUQnLCAyMzExKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NFTEVDVE9SX1dST05HX1RZUEUnLCAyMzEyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOQ09OU0lTVEVOVF9JVEVNX1RZUEUnLCAyMzEzKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOREVYX0VSUk9SJywgMjMxNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TWVNURU1fQkFHX05PVF9BTFRFUkFCTEUnLCAyMzE1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lURU1fQ09VTlRfRVJST1InLCAyMzE2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0ZPUk1BVF9OT1RfU1VQUE9SVEVEJywgMjMxNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TRUxFQ1RPUl9OT1RfU1VQUE9SVEVEJywgMjMxOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19JVEVNX1ZBTFVFX0VSUk9SJywgMjMxOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19IQkFHX0VSUk9SJywgMjMyMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19QQVJBTUVURVJfTUlTU0lORycsIDIzMjEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ01EX1NFUlZFUl9OT1RfQVZBSUxBQkxFJywgMjMyMik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TVFJJTkdfTEVOR1RIX0VSUk9SJywgMjMyMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19JTlFVSVJZX0NPTU1BTkRfRVJST1InLCAyMzI0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX05FU1RFRF9CQUdfTk9UX1NVUFBPUlRFRCcsIDIzMjUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQkFHX1dST05HX1RZUEUnLCAyMzI2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lURU1fVFlQRV9FUlJPUicsIDIzMjcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1lTVEVNX0JBR19OT1RfREVMRVRBQkxFJywgMjMyOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TWVNURU1fSVRFTV9OT1RfREVMRVRBQkxFJywgMjMyOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DT0RFRF9DSEFSX1NFVF9JRF9FUlJPUicsIDIzMzApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTVNHX1RPS0VOX0VSUk9SJywgMjMzMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NSVNTSU5HX1dJSCcsIDIzMzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfV0lIX0VSUk9SJywgMjMzMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19SRkhfRVJST1InLCAyMzM0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1JGSF9TVFJJTkdfRVJST1InLCAyMzM1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1JGSF9DT01NQU5EX0VSUk9SJywgMjMzNik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19SRkhfUEFSTV9FUlJPUicsIDIzMzcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUkZIX0RVUExJQ0FURV9QQVJNJywgMjMzOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19SRkhfUEFSTV9NSVNTSU5HJywgMjMzOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DSEFSX0NPTlZFUlNJT05fRVJST1InLCAyMzQwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1VDUzJfQ09OVkVSU0lPTl9FUlJPUicsIDIzNDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfREIyX05PVF9BVkFJTEFCTEUnLCAyMzQyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX09CSkVDVF9OT1RfVU5JUVVFJywgMjM0Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DT05OX1RBR19OT1RfUkVMRUFTRUQnLCAyMzQ0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NGX05PVF9BVkFJTEFCTEUnLCAyMzQ1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NGX1NUUlVDX0lOX1VTRScsIDIzNDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0ZfU1RSVUNfTElTVF9IRFJfSU5fVVNFJywgMjM0Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DRl9TVFJVQ19BVVRIX0ZBSUxFRCcsIDIzNDgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0ZfU1RSVUNfRVJST1InLCAyMzQ5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NPTk5fVEFHX05PVF9VU0FCTEUnLCAyMzUwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0dMT0JBTF9VT1dfQ09ORkxJQ1QnLCAyMzUxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0xPQ0FMX1VPV19DT05GTElDVCcsIDIzNTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSEFORExFX0lOX1VTRV9GT1JfVU9XJywgMjM1Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19VT1dfRU5MSVNUTUVOVF9FUlJPUicsIDIzNTQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVU9XX01JWF9OT1RfU1VQUE9SVEVEJywgMjM1NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19XWFBfRVJST1InLCAyMzU2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NVUlJFTlRfUkVDT1JEX0VSUk9SJywgMjM1Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19ORVhUX09GRlNFVF9FUlJPUicsIDIzNTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTk9fUkVDT1JEX0FWQUlMQUJMRScsIDIzNTkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfT0JKRUNUX0xFVkVMX0lOQ09NUEFUSUJMRScsIDIzNjApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTkVYVF9SRUNPUkRfRVJST1InLCAyMzYxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0JBQ0tPVVRfVEhSRVNIT0xEX1JFQUNIRUQnLCAyMzYyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX01TR19OT1RfTUFUQ0hFRCcsIDIzNjMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSk1TX0ZPUk1BVF9FUlJPUicsIDIzNjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU0VHTUVOVFNfTk9UX1NVUFBPUlRFRCcsIDIzNjUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfV1JPTkdfQ0ZfTEVWRUwnLCAyMzY2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NPTkZJR19DUkVBVEVfT0JKRUNUJywgMjM2Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DT05GSUdfQ0hBTkdFX09CSkVDVCcsIDIzNjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ09ORklHX0RFTEVURV9PQkpFQ1QnLCAyMzY5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NPTkZJR19SRUZSRVNIX09CSkVDVCcsIDIzNzApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0hBTk5FTF9TU0xfRVJST1InLCAyMzcxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1BBUlRJQ0lQQU5UX05PVF9ERUZJTkVEJywgMjM3Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DRl9TVFJVQ19GQUlMRUQnLCAyMzczKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FQSV9FWElUX0VSUk9SJywgMjM3NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19BUElfRVhJVF9JTklUX0VSUk9SJywgMjM3NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19BUElfRVhJVF9URVJNX0VSUk9SJywgMjM3Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19FWElUX1JFQVNPTl9FUlJPUicsIDIzNzcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUkVTRVJWRURfVkFMVUVfRVJST1InLCAyMzc4KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX05PX0RBVEFfQVZBSUxBQkxFJywgMjM3OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TQ09fRVJST1InLCAyMzgwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0tFWV9SRVBPU0lUT1JZX0VSUk9SJywgMjM4MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DUllQVE9fSEFSRFdBUkVfRVJST1InLCAyMzgyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FVVEhfSU5GT19SRUNfQ09VTlRfRVJST1InLCAyMzgzKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FVVEhfSU5GT19SRUNfRVJST1InLCAyMzg0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FJUl9FUlJPUicsIDIzODUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQVVUSF9JTkZPX1RZUEVfRVJST1InLCAyMzg2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FVVEhfSU5GT19DT05OX05BTUVfRVJST1InLCAyMzg3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0xEQVBfVVNFUl9OQU1FX0VSUk9SJywgMjM4OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19MREFQX1VTRVJfTkFNRV9MRU5HVEhfRVJSJywgMjM4OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19MREFQX1BBU1NXT1JEX0VSUk9SJywgMjM5MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TU0xfQUxSRUFEWV9JTklUSUFMSVpFRCcsIDIzOTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1NMX0NPTkZJR19FUlJPUicsIDIzOTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1NMX0lOSVRJQUxJWkFUSU9OX0VSUk9SJywgMjM5Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19RX0lOREVYX1RZUEVfRVJST1InLCAyMzk0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NGQlNfRVJST1InLCAyMzk1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NTTF9OT1RfQUxMT1dFRCcsIDIzOTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSlNTRV9FUlJPUicsIDIzOTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1NMX1BFRVJfTkFNRV9NSVNNQVRDSCcsIDIzOTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1NMX1BFRVJfTkFNRV9FUlJPUicsIDIzOTkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVU5TVVBQT1JURURfQ0lQSEVSX1NVSVRFJywgMjQwMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TU0xfQ0VSVElGSUNBVEVfUkVWT0tFRCcsIDI0MDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1NMX0NFUlRfU1RPUkVfRVJST1InLCAyNDAyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NMSUVOVF9FWElUX0xPQURfRVJST1InLCAyNDA2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NMSUVOVF9FWElUX0VSUk9SJywgMjQwNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19VT1dfQ09NTUlUVEVEJywgMjQwOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TU0xfS0VZX1JFU0VUX0VSUk9SJywgMjQwOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19VTktOT1dOX0NPTVBPTkVOVF9OQU1FJywgMjQxMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19MT0dHRVJfU1RBVFVTJywgMjQxMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DT01NQU5EX01RU0MnLCAyNDEyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NPTU1BTkRfUENGJywgMjQxMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DRklGX0VSUk9SJywgMjQxNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DRlNGX0VSUk9SJywgMjQxNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DRkdSX0VSUk9SJywgMjQxNik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NU0dfTk9UX0FMTE9XRURfSU5fR1JPVVAnLCAyNDE3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0ZJTFRFUl9PUEVSQVRPUl9FUlJPUicsIDI0MTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTkVTVEVEX1NFTEVDVE9SX0VSUk9SJywgMjQxOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19FUEhfRVJST1InLCAyNDIwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1JGSF9GT1JNQVRfRVJST1InLCAyNDIxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NGQkZfRVJST1InLCAyNDIyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NMSUVOVF9DSEFOTkVMX0NPTkZMSUNUJywgMjQyMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TRF9FUlJPUicsIDI0MjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfVE9QSUNfU1RSSU5HX0VSUk9SJywgMjQyNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TVFNfRVJST1InLCAyNDI2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX05PX1NVQlNDUklQVElPTicsIDI0MjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1VCU0NSSVBUSU9OX0lOX1VTRScsIDI0MjkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1RBVF9UWVBFX0VSUk9SJywgMjQzMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TVUJfVVNFUl9EQVRBX0VSUk9SJywgMjQzMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TVUJfQUxSRUFEWV9FWElTVFMnLCAyNDMyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lERU5USVRZX01JU01BVENIJywgMjQzNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19BTFRFUl9TVUJfRVJST1InLCAyNDM1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0RVUkFCSUxJVFlfTk9UX0FMTE9XRUQnLCAyNDM2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX05PX1JFVEFJTkVEX01TRycsIDI0MzcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1JPX0VSUk9SJywgMjQzOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TVUJfTkFNRV9FUlJPUicsIDI0NDApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfT0JKRUNUX1NUUklOR19FUlJPUicsIDI0NDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUFJPUEVSVFlfTkFNRV9FUlJPUicsIDI0NDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU0VHTUVOVEFUSU9OX05PVF9BTExPV0VEJywgMjQ0Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DQkRfRVJST1InLCAyNDQ0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NUTE9fRVJST1InLCAyNDQ1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX05PX0NBTExCQUNLU19BQ1RJVkUnLCAyNDQ2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NBTExCQUNLX05PVF9SRUdJU1RFUkVEJywgMjQ0OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19PUFRJT05TX0NIQU5HRUQnLCAyNDU3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1JFQURfQUhFQURfTVNHUycsIDI0NTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU0VMRUNUT1JfU1lOVEFYX0VSUk9SJywgMjQ1OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19ITVNHX0VSUk9SJywgMjQ2MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DTUhPX0VSUk9SJywgMjQ2MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19ETUhPX0VSUk9SJywgMjQ2Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TTVBPX0VSUk9SJywgMjQ2Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19JTVBPX0VSUk9SJywgMjQ2NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19QUk9QRVJUWV9OQU1FX1RPT19CSUcnLCAyNDY1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1BST1BfVkFMVUVfTk9UX0NPTlZFUlRFRCcsIDI0NjYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUFJPUF9UWVBFX05PVF9TVVBQT1JURUQnLCAyNDY3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1BST1BFUlRZX1ZBTFVFX1RPT19CSUcnLCAyNDY5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1BST1BfQ09OVl9OT1RfU1VQUE9SVEVEJywgMjQ3MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19QUk9QRVJUWV9OT1RfQVZBSUxBQkxFJywgMjQ3MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19QUk9QX05VTUJFUl9GT1JNQVRfRVJST1InLCAyNDcyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1BST1BFUlRZX1RZUEVfRVJST1InLCAyNDczKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1BST1BFUlRJRVNfVE9PX0JJRycsIDI0NzgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUFVUX05PVF9SRVRBSU5FRCcsIDI0NzkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQUxJQVNfVEFSR1RZUEVfQ0hBTkdFRCcsIDI0ODApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfRE1QT19FUlJPUicsIDI0ODEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUERfRVJST1InLCAyNDgyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NBTExCQUNLX1RZUEVfRVJST1InLCAyNDgzKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NCRF9PUFRJT05TX0VSUk9SJywgMjQ4NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NQVhfTVNHX0xFTkdUSF9FUlJPUicsIDI0ODUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0FMTEJBQ0tfUk9VVElORV9FUlJPUicsIDI0ODYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0FMTEJBQ0tfTElOS19FUlJPUicsIDI0ODcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfT1BFUkFUSU9OX0VSUk9SJywgMjQ4OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19CTUhPX0VSUk9SJywgMjQ4OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19VTlNVUFBPUlRFRF9QUk9QRVJUWScsIDI0OTApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUFJPUF9OQU1FX05PVF9DT05WRVJURUQnLCAyNDkyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0dFVF9FTkFCTEVEJywgMjQ5NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NT0RVTEVfTk9UX0ZPVU5EJywgMjQ5NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NT0RVTEVfSU5WQUxJRCcsIDI0OTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTU9EVUxFX0VOVFJZX05PVF9GT1VORCcsIDI0OTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTUlYRURfQ09OVEVOVF9OT1RfQUxMT1dFRCcsIDI0OTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTVNHX0hBTkRMRV9JTl9VU0UnLCAyNDk5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0hDT05OX0FTWU5DX0FDVElWRScsIDI1MDApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTUhCT19FUlJPUicsIDI1MDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUFVCTElDQVRJT05fRkFJTFVSRScsIDI1MDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1VCX0lOSElCSVRFRCcsIDI1MDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU0VMRUNUT1JfQUxXQVlTX0ZBTFNFJywgMjUwNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19YRVBPX0VSUk9SJywgMjUwNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19EVVJBQklMSVRZX05PVF9BTFRFUkFCTEUnLCAyNTA5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1RPUElDX05PVF9BTFRFUkFCTEUnLCAyNTEwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NVQkxFVkVMX05PVF9BTFRFUkFCTEUnLCAyNTEyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1BST1BFUlRZX05BTUVfTEVOR1RIX0VSUicsIDI1MTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfRFVQTElDQVRFX0dST1VQX1NVQicsIDI1MTQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfR1JPVVBJTkdfTk9UX0FMVEVSQUJMRScsIDI1MTUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU0VMRUNUT1JfSU5WQUxJRF9GT1JfVFlQRScsIDI1MTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSE9CSl9RVUlFU0NFRCcsIDI1MTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfSE9CSl9RVUlFU0NFRF9OT19NU0dTJywgMjUxOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TRUxFQ1RJT05fU1RSSU5HX0VSUk9SJywgMjUxOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19SRVNfT0JKRUNUX1NUUklOR19FUlJPUicsIDI1MjApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ09OTkVDVElPTl9TVVNQRU5ERUQnLCAyNTIxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOVkFMSURfREVTVElOQVRJT04nLCAyNTIyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOVkFMSURfU1VCU0NSSVBUSU9OJywgMjUyMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TRUxFQ1RPUl9OT1RfQUxURVJBQkxFJywgMjUyNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19SRVRBSU5FRF9NU0dfUV9FUlJPUicsIDI1MjUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUkVUQUlORURfTk9UX0RFTElWRVJFRCcsIDI1MjYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUkZIX1JFU1RSSUNURURfRk9STUFUX0VSUicsIDI1MjcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ09OTkVDVElPTl9TVE9QUEVEJywgMjUyOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19BU1lOQ19VT1dfQ09ORkxJQ1QnLCAyNTI5KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FTWU5DX1hBX0NPTkZMSUNUJywgMjUzMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19QVUJTVUJfSU5ISUJJVEVEJywgMjUzMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NU0dfSEFORExFX0NPUFlfRkFJTFVSRScsIDI1MzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfREVTVF9DTEFTU19OT1RfQUxURVJBQkxFJywgMjUzMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19PUEVSQVRJT05fTk9UX0FMTE9XRUQnLCAyNTM0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0FDVElPTl9FUlJPUicsIDI1MzUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0hBTk5FTF9OT1RfQVZBSUxBQkxFJywgMjUzNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19IT1NUX05PVF9BVkFJTEFCTEUnLCAyNTM4KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NIQU5ORUxfQ09ORklHX0VSUk9SJywgMjUzOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19VTktOT1dOX0NIQU5ORUxfTkFNRScsIDI1NDApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTE9PUElOR19QVUJMSUNBVElPTicsIDI1NDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQUxSRUFEWV9KT0lORUQnLCAyNTQyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NUQU5EQllfUV9NR1InLCAyNTQzKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1JFQ09OTkVDVElORycsIDI1NDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUkVDT05ORUNURUQnLCAyNTQ1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1JFQ09OTkVDVF9RTUlEX01JU01BVENIJywgMjU0Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19SRUNPTk5FQ1RfSU5DT01QQVRJQkxFJywgMjU0Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19SRUNPTk5FQ1RfRkFJTEVEJywgMjU0OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DQUxMX0lOVEVSUlVQVEVEJywgMjU0OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19OT19TVUJTX01BVENIRUQnLCAyNTUwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NFTEVDVElPTl9OT1RfQVZBSUxBQkxFJywgMjU1MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DSEFOTkVMX1NTTF9XQVJOSU5HJywgMjU1Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19PQ1NQX1VSTF9FUlJPUicsIDI1NTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ09OVEVOVF9FUlJPUicsIDI1NTQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUkVDT05ORUNUX1FfTUdSX1JFUUQnLCAyNTU1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1JFQ09OTkVDVF9USU1FRF9PVVQnLCAyNTU2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1BVQkxJU0hfRVhJVF9FUlJPUicsIDI1NTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ09NTUlORk9fRVJST1InLCAyNTU4KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0RFRl9TWU5DUE9JTlRfSU5ISUJJVEVEJywgMjU1OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NVUxUSUNBU1RfT05MWScsIDI1NjApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfREFUQV9TRVRfTk9UX0FWQUlMQUJMRScsIDI1NjEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfR1JPVVBJTkdfTk9UX0FMTE9XRUQnLCAyNTYyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0dST1VQX0FERFJFU1NfRVJST1InLCAyNTYzKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX01VTFRJQ0FTVF9DT05GSUdfRVJST1InLCAyNTY0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX01VTFRJQ0FTVF9JTlRFUkZBQ0VfRVJST1InLCAyNTY1KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX01VTFRJQ0FTVF9TRU5EX0VSUk9SJywgMjU2Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NVUxUSUNBU1RfSU5URVJOQUxfRVJST1InLCAyNTY3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NPTk5FQ1RJT05fTk9UX0FWQUlMQUJMRScsIDI1NjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1lOQ1BPSU5UX05PVF9BTExPV0VEJywgMjU2OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19TU0xfQUxUX1BST1ZJREVSX1JFUVVJUkVEJywgMjU3MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NQ0FTVF9QVUJfU1RBVFVTJywgMjU3MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19NQ0FTVF9TVUJfU1RBVFVTJywgMjU3Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19QUkVDT05OX0VYSVRfTE9BRF9FUlJPUicsIDI1NzMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUFJFQ09OTl9FWElUX05PVF9GT1VORCcsIDI1NzQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUFJFQ09OTl9FWElUX0VSUk9SJywgMjU3NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DRF9BUlJBWV9FUlJPUicsIDI1NzYpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0hBTk5FTF9CTE9DS0VEJywgMjU3Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DSEFOTkVMX0JMT0NLRURfV0FSTklORycsIDI1NzgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1VCU0NSSVBUSU9OX0NSRUFURScsIDI1NzkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1VCU0NSSVBUSU9OX0RFTEVURScsIDI1ODApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1VCU0NSSVBUSU9OX0NIQU5HRScsIDI1ODEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1VCU0NSSVBUSU9OX1JFRlJFU0gnLCAyNTgyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOU1RBTExBVElPTl9NSVNNQVRDSCcsIDI1ODMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTk9UX1BSSVZJTEVHRUQnLCAyNTg0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1BST1BFUlRJRVNfRElTQUJMRUQnLCAyNTg2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0hNU0dfTk9UX0FWQUlMQUJMRScsIDI1ODcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfRVhJVF9QUk9QU19OT1RfU1VQUE9SVEVEJywgMjU4OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19JTlNUQUxMQVRJT05fTUlTU0lORycsIDI1ODkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfRkFTVFBBVEhfTk9UX0FWQUlMQUJMRScsIDI1OTApOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ0lQSEVSX1NQRUNfTk9UX1NVSVRFX0InLCAyNTkxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NVSVRFX0JfRVJST1InLCAyNTkyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NFUlRfVkFMX1BPTElDWV9FUlJPUicsIDI1OTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfUkVPUEVOX0VYQ0xfSU5QVVRfRVJST1InLCA2MTAwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1JFT1BFTl9JTlFVSVJFX0VSUk9SJywgNjEwMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19SRU9QRU5fU0FWRURfQ09OVEVYVF9FUlInLCA2MTAyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1JFT1BFTl9URU1QT1JBUllfUV9FUlJPUicsIDYxMDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQVRUUklCVVRFX0xPQ0tFRCcsIDYxMDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQ1VSU09SX05PVF9WQUxJRCcsIDYxMDUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfRU5DT0RJTkdfRVJST1InLCA2MTA2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1NUUlVDX0lEX0VSUk9SJywgNjEwNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19OVUxMX1BPSU5URVInLCA2MTA4KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX05PX0NPTk5FQ1RJT05fUkVGRVJFTkNFJywgNjEwOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19OT19CVUZGRVInLCA2MTEwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0JJTkFSWV9EQVRBX0xFTkdUSF9FUlJPUicsIDYxMTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfQlVGRkVSX05PVF9BVVRPTUFUSUMnLCA2MTEyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOU1VGRklDSUVOVF9CVUZGRVInLCA2MTEzKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOU1VGRklDSUVOVF9EQVRBJywgNjExNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19EQVRBX1RSVU5DQVRFRCcsIDYxMTUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfWkVST19MRU5HVEgnLCA2MTE2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX05FR0FUSVZFX0xFTkdUSCcsIDYxMTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfTkVHQVRJVkVfT0ZGU0VUJywgNjExOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19JTkNPTlNJU1RFTlRfRk9STUFUJywgNjExOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19JTkNPTlNJU1RFTlRfT0JKRUNUX1NUQVRFJywgNjEyMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19DT05URVhUX09CSkVDVF9OT1RfVkFMSUQnLCA2MTIxKTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0NPTlRFWFRfT1BFTl9FUlJPUicsIDYxMjIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfU1RSVUNfTEVOR1RIX0VSUk9SJywgNjEyMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19OT1RfQ09OTkVDVEVEJywgNjEyNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFSQ19OT1RfT1BFTicsIDYxMjUpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfRElTVFJJQlVUSU9OX0xJU1RfRU1QVFknLCA2MTI2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX0lOQ09OU0lTVEVOVF9PUEVOX09QVElPTlMnLCA2MTI3KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1dST05HX1ZFUlNJT04nLCA2MTI4KTsKZGVmaW5lKCdNUVNFUklFU19NUVJDX1JFRkVSRU5DRV9FUlJPUicsIDYxMjkpOwpkZWZpbmUoJ01RU0VSSUVTX01RUkNfWFJfTk9UX0FWQUlMQUJMRScsIDYxMzApOwpkZWZpbmUoJ01RU0VSSUVTX01RT09fQklORF9BU19RX0RFRicsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RT09fUkVBRF9BSEVBRF9BU19RX0RFRicsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RT09fSU5QVVRfQVNfUV9ERUYnLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUU9PX0lOUFVUX1NIQVJFRCcsIDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RT09fSU5QVVRfRVhDTFVTSVZFJywgNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFPT19CUk9XU0UnLCA4KTsKZGVmaW5lKCdNUVNFUklFU19NUU9PX09VVFBVVCcsIDE2KTsKZGVmaW5lKCdNUVNFUklFU19NUU9PX0lOUVVJUkUnLCAzMik7CmRlZmluZSgnTVFTRVJJRVNfTVFPT19TRVQnLCA2NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFPT19TQVZFX0FMTF9DT05URVhUJywgMTI4KTsKZGVmaW5lKCdNUVNFUklFU19NUU9PX1BBU1NfSURFTlRJVFlfQ09OVEVYVCcsIDI1Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFPT19QQVNTX0FMTF9DT05URVhUJywgNTEyKTsKZGVmaW5lKCdNUVNFUklFU19NUU9PX1NFVF9JREVOVElUWV9DT05URVhUJywgMTAyNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFPT19TRVRfQUxMX0NPTlRFWFQnLCAyMDQ4KTsKZGVmaW5lKCdNUVNFUklFU19NUU9PX0FMVEVSTkFURV9VU0VSX0FVVEhPUklUWScsIDQwOTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RT09fRkFJTF9JRl9RVUlFU0NJTkcnLCA4MTkyKTsKZGVmaW5lKCdNUVNFUklFU19NUU9PX0JJTkRfT05fT1BFTicsIDE2Mzg0KTsKZGVmaW5lKCdNUVNFUklFU19NUU9PX0JJTkRfT05fR1JPVVAnLCA0MTk0MzA0KTsKZGVmaW5lKCdNUVNFUklFU19NUU9PX0JJTkRfTk9UX0ZJWEVEJywgMzI3NjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RT09fQ09fT1AnLCAxMzEwNzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RT09fTk9fUkVBRF9BSEVBRCcsIDUyNDI4OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFPT19SRUFEX0FIRUFEJywgMTA0ODU3Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFPT19OT19NVUxUSUNBU1QnLCAyMDk3MTUyKTsKZGVmaW5lKCdNUVNFUklFU19NUU9PX1JFU09MVkVfTE9DQUxfUScsIDI2MjE0NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFPT19SRVNPTFZFX0xPQ0FMX1RPUElDJywgMjYyMTQ0KTsKZGVmaW5lKCdNUVNFUklFU19NUUNPX0lNTUVESUFURScsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RQ09fTk9ORScsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RQ09fREVMRVRFJywgMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDT19ERUxFVEVfUFVSR0UnLCAyKTsKZGVmaW5lKCdNUVNFUklFU19NUUNPX0tFRVBfU1VCJywgNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDT19SRU1PVkVfU1VCJywgOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDT19RVUlFU0NFJywgMzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX1ZFUlNJT05fMScsIDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX1ZFUlNJT05fMicsIDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX1ZFUlNJT05fMycsIDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX1ZFUlNJT05fNCcsIDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX0NVUlJFTlRfVkVSU0lPTicsIDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX1dBSVQnLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUUdNT19OT19XQUlUJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFHTU9fU0VUX1NJR05BTCcsIDgpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX0ZBSUxfSUZfUVVJRVNDSU5HJywgODE5Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFHTU9fU1lOQ1BPSU5UJywgMik7CmRlZmluZSgnTVFTRVJJRVNfTVFHTU9fU1lOQ1BPSU5UX0lGX1BFUlNJU1RFTlQnLCA0MDk2KTsKZGVmaW5lKCdNUVNFUklFU19NUUdNT19OT19TWU5DUE9JTlQnLCA0KTsKZGVmaW5lKCdNUVNFUklFU19NUUdNT19NQVJLX1NLSVBfQkFDS09VVCcsIDEyOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFHTU9fQlJPV1NFX0ZJUlNUJywgMTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX0JST1dTRV9ORVhUJywgMzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX0JST1dTRV9NU0dfVU5ERVJfQ1VSU09SJywgMjA0OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFHTU9fTVNHX1VOREVSX0NVUlNPUicsIDI1Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFHTU9fTE9DSycsIDUxMik7CmRlZmluZSgnTVFTRVJJRVNfTVFHTU9fVU5MT0NLJywgMTAyNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFHTU9fQUNDRVBUX1RSVU5DQVRFRF9NU0cnLCA2NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFHTU9fQ09OVkVSVCcsIDE2Mzg0KTsKZGVmaW5lKCdNUVNFUklFU19NUUdNT19MT0dJQ0FMX09SREVSJywgMzI3NjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX0NPTVBMRVRFX01TRycsIDY1NTM2KTsKZGVmaW5lKCdNUVNFUklFU19NUUdNT19BTExfTVNHU19BVkFJTEFCTEUnLCAxMzEwNzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX0FMTF9TRUdNRU5UU19BVkFJTEFCTEUnLCAyNjIxNDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX01BUktfQlJPV1NFX0hBTkRMRScsIDEwNDg1NzYpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX01BUktfQlJPV1NFX0NPX09QJywgMjA5NzE1Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFHTU9fVU5NQVJLX0JST1dTRV9DT19PUCcsIDQxOTQzMDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX1VOTUFSS19CUk9XU0VfSEFORExFJywgODM4ODYwOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFHTU9fVU5NQVJLRURfQlJPV1NFX01TRycsIDE2Nzc3MjE2KTsKZGVmaW5lKCdNUVNFUklFU19NUUdNT19QUk9QRVJUSUVTX0ZPUkNFX01RUkZIMicsIDMzNTU0NDMyKTsKZGVmaW5lKCdNUVNFUklFU19NUUdNT19OT19QUk9QRVJUSUVTJywgNjcxMDg4NjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX1BST1BFUlRJRVNfSU5fSEFORExFJywgMTM0MjE3NzI4KTsKZGVmaW5lKCdNUVNFUklFU19NUUdNT19QUk9QRVJUSUVTX0NPTVBBVElCSUxJVFknLCAyNjg0MzU0NTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RR01PX1BST1BFUlRJRVNfQVNfUV9ERUYnLCAwKTsKZGVmaW5lKCdNUVNFUklFU19NUUdNT19OT05FJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFHTU9fQlJPV1NFX0hBTkRMRScsIDE3ODI1ODA4KTsKZGVmaW5lKCdNUVNFUklFU19NUUdNT19CUk9XU0VfQ09fT1AnLCAxODg3NDM4NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFXSV9VTkxJTUlURUQnLCAtMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFFQ19NU0dfQVJSSVZFRCcsIDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RRUNfV0FJVF9JTlRFUlZBTF9FWFBJUkVEJywgMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFFQ19XQUlUX0NBTkNFTEVEJywgNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFFQ19RX01HUl9RVUlFU0NJTkcnLCA1KTsKZGVmaW5lKCdNUVNFUklFU19NUUVDX0NPTk5FQ1RJT05fUVVJRVNDSU5HJywgNik7CmRlZmluZSgnTVFTRVJJRVNfTVFNT19NQVRDSF9NU0dfSUQnLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUU1PX01BVENIX0NPUlJFTF9JRCcsIDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RTU9fTUFUQ0hfR1JPVVBfSUQnLCA0KTsKZGVmaW5lKCdNUVNFUklFU19NUU1PX01BVENIX01TR19TRVFfTlVNQkVSJywgOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFNT19NQVRDSF9PRkZTRVQnLCAxNik7CmRlZmluZSgnTVFTRVJJRVNfTVFNT19NQVRDSF9NU0dfVE9LRU4nLCAzMik7CmRlZmluZSgnTVFTRVJJRVNfTVFNT19OT05FJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFNVE9LX05PTkUnLCAnJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFSTF9VTkRFRklORUQnLCAtMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFNRF9WRVJTSU9OXzEnLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUU1EX1ZFUlNJT05fMicsIDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RTURfQ1VSUkVOVF9WRVJTSU9OJywgMik7CmRlZmluZSgnTVFTRVJJRVNfTVFST19FWENFUFRJT04nLCAxNjc3NzIxNik7CmRlZmluZSgnTVFTRVJJRVNfTVFST19FWENFUFRJT05fV0lUSF9EQVRBJywgNTAzMzE2NDgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUk9fRVhDRVBUSU9OX1dJVEhfRlVMTF9EQVRBJywgMTE3NDQwNTEyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJPX0VYUElSQVRJT04nLCAyMDk3MTUyKTsKZGVmaW5lKCdNUVNFUklFU19NUVJPX0VYUElSQVRJT05fV0lUSF9EQVRBJywgNjI5MTQ1Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFST19FWFBJUkFUSU9OX1dJVEhfRlVMTF9EQVRBJywgMTQ2ODAwNjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUk9fQ09BJywgMjU2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJPX0NPQV9XSVRIX0RBVEEnLCA3NjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUk9fQ09BX1dJVEhfRlVMTF9EQVRBJywgMTc5Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFST19DT0QnLCAyMDQ4KTsKZGVmaW5lKCdNUVNFUklFU19NUVJPX0NPRF9XSVRIX0RBVEEnLCA2MTQ0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJPX0NPRF9XSVRIX0ZVTExfREFUQScsIDE0MzM2KTsKZGVmaW5lKCdNUVNFUklFU19NUVJPX1BBTicsIDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUk9fTkFOJywgMik7CmRlZmluZSgnTVFTRVJJRVNfTVFST19BQ1RJVklUWScsIDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUk9fTkVXX01TR19JRCcsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RUk9fUEFTU19NU0dfSUQnLCAxMjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUk9fQ09QWV9NU0dfSURfVE9fQ09SUkVMX0lEJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFST19QQVNTX0NPUlJFTF9JRCcsIDY0KTsKZGVmaW5lKCdNUVNFUklFU19NUVJPX0RFQURfTEVUVEVSX1EnLCAwKTsKZGVmaW5lKCdNUVNFUklFU19NUVJPX0RJU0NBUkRfTVNHJywgMTM0MjE3NzI4KTsKZGVmaW5lKCdNUVNFUklFU19NUVJPX1BBU1NfRElTQ0FSRF9BTkRfRVhQSVJZJywgMTYzODQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUk9fTk9ORScsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RUk9fUkVKRUNUX1VOU1VQX01BU0snLCAyNzAyNzA0NjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUk9fQUNDRVBUX1VOU1VQX01BU0snLCA0MDI0NDM0OTQzKTsKZGVmaW5lKCdNUVNFUklFU19NUVJPX0FDQ0VQVF9VTlNVUF9JRl9YTUlUX01BU0snLCAyNjE4ODgpOwpkZWZpbmUoJ01RU0VSSUVTX01RTVRfU1lTVEVNX0ZJUlNUJywgMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFNVF9SRVFVRVNUJywgMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFNVF9SRVBMWScsIDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RTVRfREFUQUdSQU0nLCA4KTsKZGVmaW5lKCdNUVNFUklFU19NUU1UX1JFUE9SVCcsIDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RTVRfTVFFX0ZJRUxEU19GUk9NX01RRScsIDExMik7CmRlZmluZSgnTVFTRVJJRVNfTVFNVF9NUUVfRklFTERTJywgMTEzKTsKZGVmaW5lKCdNUVNFUklFU19NUU1UX1NZU1RFTV9MQVNUJywgNjU1MzUpOwpkZWZpbmUoJ01RU0VSSUVTX01RTVRfQVBQTF9GSVJTVCcsIDY1NTM2KTsKZGVmaW5lKCdNUVNFUklFU19NUU1UX0FQUExfTEFTVCcsIDk5OTk5OTk5OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFFSV9VTkxJTUlURUQnLCAtMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9OT05FJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9TWVNURU1fRklSU1QnLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX1FVSVQnLCAyNTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfRVhQSVJBVElPTicsIDI1OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9DT0EnLCAyNTkpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfQ09EJywgMjYwKTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX0NIQU5ORUxfQ09NUExFVEVEJywgMjYyKTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX0NIQU5ORUxfRkFJTF9SRVRSWScsIDI2Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9DSEFOTkVMX0ZBSUwnLCAyNjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfQVBQTF9DQU5OT1RfQkVfU1RBUlRFRCcsIDI2NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9UTV9FUlJPUicsIDI2Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9BUFBMX1RZUEVfRVJST1InLCAyNjcpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfU1RPUFBFRF9CWV9NU0dfRVhJVCcsIDI2OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9BQ1RJVklUWScsIDI2OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9YTUlUX1FfTVNHX0VSUk9SJywgMjcxKTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX1BBTicsIDI3NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9OQU4nLCAyNzYpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfU1RPUFBFRF9CWV9DSEFEX0VYSVQnLCAyNzcpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfU1RPUFBFRF9CWV9QVUJTVUJfRVhJVCcsIDI3OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9OT1RfQV9SRVBPU0lUT1JZX01TRycsIDI4MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9CSU5EX09QRU5fQ0xVU1JDVlJfREVMJywgMjgxKTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX01BWF9BQ1RJVklUSUVTJywgMjgyKTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX05PVF9GT1JXQVJERUQnLCAyODMpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfTk9UX0RFTElWRVJFRCcsIDI4NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9VTlNVUFBPUlRFRF9GT1JXQVJESU5HJywgMjg1KTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX1VOU1VQUE9SVEVEX0RFTElWRVJZJywgMjg2KTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX0RBVEFfTEVOR1RIX1pFUk8nLCAyOTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfREFUQV9MRU5HVEhfTkVHQVRJVkUnLCAyOTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfREFUQV9MRU5HVEhfVE9PX0JJRycsIDI5Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9CVUZGRVJfT1ZFUkZMT1cnLCAyOTQpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfTEVOR1RIX09GRl9CWV9PTkUnLCAyOTUpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfSUlIX0VSUk9SJywgMjk2KTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX05PVF9BVVRIT1JJWkVEX0ZPUl9JTVMnLCAyOTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfSU1TX0VSUk9SJywgMzAwKTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX0lNU19GSVJTVCcsIDMwMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9JTVNfTEFTVCcsIDM5OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9DSUNTX0lOVEVSTkFMX0VSUk9SJywgNDAxKTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX0NJQ1NfTk9UX0FVVEhPUklaRUQnLCA0MDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfQ0lDU19CUklER0VfRkFJTFVSRScsIDQwMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9DSUNTX0NPUlJFTF9JRF9FUlJPUicsIDQwNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9DSUNTX0NDU0lEX0VSUk9SJywgNDA1KTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX0NJQ1NfRU5DT0RJTkdfRVJST1InLCA0MDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfQ0lDU19DSUhfRVJST1InLCA0MDcpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfQ0lDU19VT1dfRVJST1InLCA0MDgpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfQ0lDU19DT01NQVJFQV9FUlJPUicsIDQwOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9DSUNTX0FQUExfTk9UX1NUQVJURUQnLCA0MTApOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfQ0lDU19BUFBMX0FCRU5ERUQnLCA0MTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfQ0lDU19ETFFfRVJST1InLCA0MTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfQ0lDU19VT1dfQkFDS0VEX09VVCcsIDQxMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9QVUJMSUNBVElPTlNfT05fUkVRVUVTVCcsIDUwMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9TVUJTQ1JJQkVSX0lTX1BVQkxJU0hFUicsIDUwMik7CmRlZmluZSgnTVFTRVJJRVNfTVFGQl9NU0dfU0NPUEVfTUlTTUFUQ0gnLCA1MDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfU0VMRUNUT1JfTUlTTUFUQ0gnLCA1MDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfTk9UX0FfR1JPVVBVUl9NU0cnLCA1MDUpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfSU1TX05BQ0tfMUFfUkVBU09OX0ZJUlNUJywgNjAwKTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX0lNU19OQUNLXzFBX1JFQVNPTl9MQVNUJywgODU1KTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX1NZU1RFTV9MQVNUJywgNjU1MzUpOwpkZWZpbmUoJ01RU0VSSUVTX01RRkJfQVBQTF9GSVJTVCcsIDY1NTM2KTsKZGVmaW5lKCdNUVNFUklFU19NUUZCX0FQUExfTEFTVCcsIDk5OTk5OTk5OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFFTkNfTkFUSVZFJywgNTQ2KTsKZGVmaW5lKCdNUVNFUklFU19NUUVOQ19JTlRFR0VSX01BU0snLCAxNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFFTkNfREVDSU1BTF9NQVNLJywgMjQwKTsKZGVmaW5lKCdNUVNFUklFU19NUUVOQ19GTE9BVF9NQVNLJywgMzg0MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFFTkNfUkVTRVJWRURfTUFTSycsIDQyOTQ5NjMyMDApOwpkZWZpbmUoJ01RU0VSSUVTX01RRU5DX0lOVEVHRVJfVU5ERUZJTkVEJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFFTkNfSU5URUdFUl9OT1JNQUwnLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUUVOQ19JTlRFR0VSX1JFVkVSU0VEJywgMik7CmRlZmluZSgnTVFTRVJJRVNfTVFFTkNfREVDSU1BTF9VTkRFRklORUQnLCAwKTsKZGVmaW5lKCdNUVNFUklFU19NUUVOQ19ERUNJTUFMX05PUk1BTCcsIDE2KTsKZGVmaW5lKCdNUVNFUklFU19NUUVOQ19ERUNJTUFMX1JFVkVSU0VEJywgMzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RRU5DX0ZMT0FUX1VOREVGSU5FRCcsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RRU5DX0ZMT0FUX0lFRUVfTk9STUFMJywgMjU2KTsKZGVmaW5lKCdNUVNFUklFU19NUUVOQ19GTE9BVF9JRUVFX1JFVkVSU0VEJywgNTEyKTsKZGVmaW5lKCdNUVNFUklFU19NUUVOQ19GTE9BVF9TMzkwJywgNzY4KTsKZGVmaW5lKCdNUVNFUklFU19NUUVOQ19GTE9BVF9UTlMnLCAxMDI0KTsKZGVmaW5lKCdNUVNFUklFU19NUUVOQ19OT1JNQUwnLCAyNzMpOwpkZWZpbmUoJ01RU0VSSUVTX01RRU5DX1JFVkVSU0VEJywgNTQ2KTsKZGVmaW5lKCdNUVNFUklFU19NUUVOQ19TMzkwJywgNzg1KTsKZGVmaW5lKCdNUVNFUklFU19NUUVOQ19UTlMnLCAxMDQxKTsKZGVmaW5lKCdNUVNFUklFU19NUUVOQ19BU19QVUJMSVNIRUQnLCAtMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQ1NJX1VOREVGSU5FRCcsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0NTSV9ERUZBVUxUJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQ1NJX1FfTUdSJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQ1NJX0lOSEVSSVQnLCAtMik7CmRlZmluZSgnTVFTRVJJRVNfTVFDQ1NJX0VNQkVEREVEJywgLTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0NTSV9BUFBMJywgLTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0NTSV9BU19QVUJMSVNIRUQnLCAtNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFGTVRfTk9ORScsICcnKTsKZGVmaW5lKCdNUVNFUklFU19NUUZNVF9BRE1JTicsICdNUUFETUlOJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFGTVRfQ0hBTk5FTF9DT01QTEVURUQnLCAnTVFDSENPTScpOwpkZWZpbmUoJ01RU0VSSUVTX01RRk1UX0NJQ1MnLCAnTVFDSUNTJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFGTVRfQ09NTUFORF8xJywgJ01RQ01EMScpOwpkZWZpbmUoJ01RU0VSSUVTX01RRk1UX0NPTU1BTkRfMicsICdNUUNNRDInKTsKZGVmaW5lKCdNUVNFUklFU19NUUZNVF9ERUFEX0xFVFRFUl9IRUFERVInLCAnTVFERUFEJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFGTVRfRElTVF9IRUFERVInLCAnTVFIRElTVCcpOwpkZWZpbmUoJ01RU0VSSUVTX01RRk1UX0VNQkVEREVEX1BDRicsICdNUUhFUENGJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFGTVRfRVZFTlQnLCAnTVFFVkVOVCcpOwpkZWZpbmUoJ01RU0VSSUVTX01RRk1UX0lNUycsICdNUUlNUycpOwpkZWZpbmUoJ01RU0VSSUVTX01RRk1UX0lNU19WQVJfU1RSSU5HJywgJ01RSU1TVlMnKTsKZGVmaW5lKCdNUVNFUklFU19NUUZNVF9NRF9FWFRFTlNJT04nLCAnTVFITURFJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFGTVRfUENGJywgJ01RUENGJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFGTVRfUkVGX01TR19IRUFERVInLCAnTVFIUkVGJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFGTVRfUkZfSEVBREVSJywgJ01RSFJGJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFGTVRfUkZfSEVBREVSXzEnLCAnTVFIUkYnKTsKZGVmaW5lKCdNUVNFUklFU19NUUZNVF9SRl9IRUFERVJfMicsICdNUUhSRjInKTsKZGVmaW5lKCdNUVNFUklFU19NUUZNVF9TVFJJTkcnLCAnTVFTVFInKTsKZGVmaW5lKCdNUVNFUklFU19NUUZNVF9UUklHR0VSJywgJ01RVFJJRycpOwpkZWZpbmUoJ01RU0VSSUVTX01RRk1UX1dPUktfSU5GT19IRUFERVInLCAnTVFIV0lIJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFGTVRfWE1JVF9RX0hFQURFUicsICdNUVhNSVQnKTsKZGVmaW5lKCdNUVNFUklFU19NUVBSSV9QUklPUklUWV9BU19RX0RFRicsIC0xKTsKZGVmaW5lKCdNUVNFUklFU19NUVBSSV9QUklPUklUWV9BU19QQVJFTlQnLCAtMik7CmRlZmluZSgnTVFTRVJJRVNfTVFQUklfUFJJT1JJVFlfQVNfUFVCTElTSEVEJywgLTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUFJJX1BSSU9SSVRZX0FTX1RPUElDX0RFRicsIC0xKTsKZGVmaW5lKCdNUVNFUklFU19NUVBFUl9QRVJTSVNURU5DRV9BU19QQVJFTlQnLCAtMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFQRVJfTk9UX1BFUlNJU1RFTlQnLCAwKTsKZGVmaW5lKCdNUVNFUklFU19NUVBFUl9QRVJTSVNURU5UJywgMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFQRVJfUEVSU0lTVEVOQ0VfQVNfUV9ERUYnLCAyKTsKZGVmaW5lKCdNUVNFUklFU19NUVBFUl9QRVJTSVNURU5DRV9BU19UT1BJQ19ERUYnLCAyKTsKZGVmaW5lKCdNUVNFUklFU19NUVBSVF9SRVNQT05TRV9BU19QQVJFTlQnLCAwKTsKZGVmaW5lKCdNUVNFUklFU19NUVBSVF9TWU5DX1JFU1BPTlNFJywgMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFQUlRfQVNZTkNfUkVTUE9OU0UnLCAyKTsKZGVmaW5lKCdNUVNFUklFU19NUU1JX05PTkUnLCAnJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFDSV9OT05FJywgJycpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0lfTkVXX1NFU1NJT04nLCAnQU1RIU5FV19TRVNTSU9OX0NPUlJFTElEJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFBQ1RfTk9ORScsICcnKTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX1VOS05PV04nLCAtMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFBVF9OT19DT05URVhUJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFBVF9DSUNTJywgMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFBVF9NVlMnLCAyKTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX09TMzkwJywgMik7CmRlZmluZSgnTVFTRVJJRVNfTVFBVF9aT1MnLCAyKTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX0lNUycsIDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfT1MyJywgNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFBVF9ET1MnLCA1KTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX0FJWCcsIDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfVU5JWCcsIDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfUU1HUicsIDcpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfT1M0MDAnLCA4KTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX1dJTkRPV1MnLCA5KTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX0NJQ1NfVlNFJywgMTApOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfV0lORE9XU19OVCcsIDExKTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX1ZNUycsIDEyKTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX0dVQVJESUFOJywgMTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfTlNLJywgMTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfVk9TJywgMTQpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfT1BFTl9UUDEnLCAxNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFBVF9WTScsIDE4KTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX0lNU19CUklER0UnLCAxOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFBVF9YQ0YnLCAyMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFBVF9DSUNTX0JSSURHRScsIDIxKTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX05PVEVTX0FHRU5UJywgMjIpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfVFBGJywgMjMpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfVVNFUicsIDI1KTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX0JST0tFUicsIDI2KTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX1FNR1JfUFVCTElTSCcsIDI2KTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX0pBVkEnLCAyOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFBVF9EUU0nLCAyOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFBVF9DSEFOTkVMX0lOSVRJQVRPUicsIDMwKTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX1dMTScsIDMxKTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX0JBVENIJywgMzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfUlJTX0JBVENIJywgMzMpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfU0lCJywgMzQpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfU1lTVEVNX0VYVEVOU0lPTicsIDM1KTsKZGVmaW5lKCdNUVNFUklFU19NUUFUX01DQVNUX1BVQkxJU0gnLCAzNik7CmRlZmluZSgnTVFTRVJJRVNfTVFBVF9ERUZBVUxUJywgNik7CmRlZmluZSgnTVFTRVJJRVNfTVFBVF9VU0VSX0ZJUlNUJywgNjU1MzYpOwpkZWZpbmUoJ01RU0VSSUVTX01RQVRfVVNFUl9MQVNUJywgOTk5OTk5OTk5KTsKZGVmaW5lKCdNUVNFUklFU19NUUdJX05PTkUnLCAnJyk7CmRlZmluZSgnTVFTRVJJRVNfTVFNRl9TRUdNRU5UQVRJT05fSU5ISUJJVEVEJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFNRl9TRUdNRU5UQVRJT05fQUxMT1dFRCcsIDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RTUZfTVNHX0lOX0dST1VQJywgOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFNRl9MQVNUX01TR19JTl9HUk9VUCcsIDE2KTsKZGVmaW5lKCdNUVNFUklFU19NUU1GX1NFR01FTlQnLCAyKTsKZGVmaW5lKCdNUVNFUklFU19NUU1GX0xBU1RfU0VHTUVOVCcsIDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RTUZfTk9ORScsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RTUZfUkVKRUNUX1VOU1VQX01BU0snLCA0MDk1KTsKZGVmaW5lKCdNUVNFUklFU19NUU1GX0FDQ0VQVF9VTlNVUF9NQVNLJywgNDI5MzkxODcyMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFNRl9BQ0NFUFRfVU5TVVBfSUZfWE1JVF9NQVNLJywgMTA0NDQ4MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFPTF9VTkRFRklORUQnLCAtMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFCT19WRVJTSU9OXzEnLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUUJPX0NVUlJFTlRfVkVSU0lPTicsIDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RQk9fTk9ORScsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX1ZFUlNJT05fMScsIDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX1ZFUlNJT05fMicsIDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX1ZFUlNJT05fMycsIDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX0NVUlJFTlRfVkVSU0lPTicsIDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX1NZTkNQT0lOVCcsIDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX05PX1NZTkNQT0lOVCcsIDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX0RFRkFVTFRfQ09OVEVYVCcsIDMyKTsKZGVmaW5lKCdNUVNFUklFU19NUVBNT19ORVdfTVNHX0lEJywgNjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX05FV19DT1JSRUxfSUQnLCAxMjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX1BBU1NfSURFTlRJVFlfQ09OVEVYVCcsIDI1Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFQTU9fUEFTU19BTExfQ09OVEVYVCcsIDUxMik7CmRlZmluZSgnTVFTRVJJRVNfTVFQTU9fU0VUX0lERU5USVRZX0NPTlRFWFQnLCAxMDI0KTsKZGVmaW5lKCdNUVNFUklFU19NUVBNT19TRVRfQUxMX0NPTlRFWFQnLCAyMDQ4KTsKZGVmaW5lKCdNUVNFUklFU19NUVBNT19BTFRFUk5BVEVfVVNFUl9BVVRIT1JJVFknLCA0MDk2KTsKZGVmaW5lKCdNUVNFUklFU19NUVBNT19GQUlMX0lGX1FVSUVTQ0lORycsIDgxOTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX05PX0NPTlRFWFQnLCAxNjM4NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFQTU9fTE9HSUNBTF9PUkRFUicsIDMyNzY4KTsKZGVmaW5lKCdNUVNFUklFU19NUVBNT19BU1lOQ19SRVNQT05TRScsIDY1NTM2KTsKZGVmaW5lKCdNUVNFUklFU19NUVBNT19TWU5DX1JFU1BPTlNFJywgMTMxMDcyKTsKZGVmaW5lKCdNUVNFUklFU19NUVBNT19SRVNPTFZFX0xPQ0FMX1EnLCAyNjIxNDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX1dBUk5fSUZfTk9fU1VCU19NQVRDSEVEJywgNTI0Mjg4KTsKZGVmaW5lKCdNUVNFUklFU19NUVBNT19SRVRBSU4nLCAyMDk3MTUyKTsKZGVmaW5lKCdNUVNFUklFU19NUVBNT19NRF9GT1JfT1VUUFVUX09OTFknLCA4Mzg4NjA4KTsKZGVmaW5lKCdNUVNFUklFU19NUVBNT19TQ09QRV9RTUdSJywgNjcxMDg4NjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX1NVUFBSRVNTX1JFUExZVE8nLCAxMzQyMTc3MjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RUE1PX05PVF9PV05fU1VCUycsIDI2ODQzNTQ1Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFQTU9fUkVTUE9OU0VfQVNfUV9ERUYnLCAwKTsKZGVmaW5lKCdNUVNFUklFU19NUVBNT19SRVNQT05TRV9BU19UT1BJQ19ERUYnLCAwKTsKZGVmaW5lKCdNUVNFUklFU19NUVBNT19OT05FJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fVkVSU0lPTl8xJywgMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fVkVSU0lPTl8yJywgMik7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fVkVSU0lPTl8zJywgMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fVkVSU0lPTl80JywgNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fVkVSU0lPTl81JywgNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fQ1VSUkVOVF9WRVJTSU9OJywgNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fU1RBTkRBUkRfQklORElORycsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RQ05PX0ZBU1RQQVRIX0JJTkRJTkcnLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUUNOT19TRVJJQUxJWkVfQ09OTl9UQUdfUV9NR1InLCAyKTsKZGVmaW5lKCdNUVNFUklFU19NUUNOT19TRVJJQUxJWkVfQ09OTl9UQUdfUVNHJywgNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fUkVTVFJJQ1RfQ09OTl9UQUdfUV9NR1InLCA4KTsKZGVmaW5lKCdNUVNFUklFU19NUUNOT19SRVNUUklDVF9DT05OX1RBR19RU0cnLCAxNik7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fSEFORExFX1NIQVJFX05PTkUnLCAzMik7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fSEFORExFX1NIQVJFX0JMT0NLJywgNjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ05PX0hBTkRMRV9TSEFSRV9OT19CTE9DSycsIDEyOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fU0hBUkVEX0JJTkRJTkcnLCAyNTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ05PX0lTT0xBVEVEX0JJTkRJTkcnLCA1MTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ05PX0xPQ0FMX0JJTkRJTkcnLCAxMDI0KTsKZGVmaW5lKCdNUVNFUklFU19NUUNOT19DTElFTlRfQklORElORycsIDIwNDgpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ05PX0FDQ09VTlRJTkdfTVFJX0VOQUJMRUQnLCA0MDk2KTsKZGVmaW5lKCdNUVNFUklFU19NUUNOT19BQ0NPVU5USU5HX01RSV9ESVNBQkxFRCcsIDgxOTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ05PX0FDQ09VTlRJTkdfUV9FTkFCTEVEJywgMTYzODQpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ05PX0FDQ09VTlRJTkdfUV9ESVNBQkxFRCcsIDMyNzY4KTsKZGVmaW5lKCdNUVNFUklFU19NUUNOT19OT19DT05WX1NIQVJJTkcnLCA2NTUzNik7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fQUxMX0NPTlZTX1NIQVJFJywgMjYyMTQ0KTsKZGVmaW5lKCdNUVNFUklFU19NUUNOT19DRF9GT1JfT1VUUFVUX09OTFknLCA1MjQyODgpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ05PX1VTRV9DRF9TRUxFQ1RJT04nLCAxMDQ4NTc2KTsKZGVmaW5lKCdNUVNFUklFU19NUUNOT19SRUNPTk5FQ1RfQVNfREVGJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fUkVDT05ORUNUJywgMTY3NzcyMTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ05PX1JFQ09OTkVDVF9ESVNBQkxFRCcsIDMzNTU0NDMyKTsKZGVmaW5lKCdNUVNFUklFU19NUUNOT19SRUNPTk5FQ1RfUV9NR1InLCA2NzEwODg2NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fQUNUSVZJVFlfVFJBQ0VfRU5BQkxFRCcsIDEzNDIxNzcyOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDTk9fQUNUSVZJVFlfVFJBQ0VfRElTQUJMRUQnLCAyNjg0MzU0NTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ05PX05PTkUnLCAwKTsKZGVmaW5lKCdNUVNFUklFU19NUVhQVF9BTEwnLCAtMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFYUFRfTE9DQUwnLCAwKTsKZGVmaW5lKCdNUVNFUklFU19NUVhQVF9MVTYyJywgMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFYUFRfVENQJywgMik7CmRlZmluZSgnTVFTRVJJRVNfTVFYUFRfTkVUQklPUycsIDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RWFBUX1NQWCcsIDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RWFBUX0RFQ05FVCcsIDUpOwpkZWZpbmUoJ01RU0VSSUVTX01RWFBUX1VEUCcsIDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RT1RfTk9ORScsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RT1RfUScsIDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RT1RfTkFNRUxJU1QnLCAyKTsKZGVmaW5lKCdNUVNFUklFU19NUU9UX1BST0NFU1MnLCAzKTsKZGVmaW5lKCdNUVNFUklFU19NUU9UX1NUT1JBR0VfQ0xBU1MnLCA0KTsKZGVmaW5lKCdNUVNFUklFU19NUU9UX1FfTUdSJywgNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFPVF9DSEFOTkVMJywgNik7CmRlZmluZSgnTVFTRVJJRVNfTVFPVF9BVVRIX0lORk8nLCA3KTsKZGVmaW5lKCdNUVNFUklFU19NUU9UX1RPUElDJywgOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFPVF9DT01NX0lORk8nLCA5KTsKZGVmaW5lKCdNUVNFUklFU19NUU9UX0NGX1NUUlVDJywgMTApOwpkZWZpbmUoJ01RU0VSSUVTX01RT1RfTElTVEVORVInLCAxMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFPVF9TRVJWSUNFJywgMTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RT1RfUkVTRVJWRURfMScsIDk5OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9BRE1JTl9UT1BJQ19OQU1FJywgMjEwNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9BTFRFUkFUSU9OX0RBVEUnLCAyMDI3KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0FMVEVSQVRJT05fVElNRScsIDIwMjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfQVBQTF9JRCcsIDIwMDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfQVVUSF9JTkZPX0NPTk5fTkFNRScsIDIwNTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfQVVUSF9JTkZPX0RFU0MnLCAyMDQ2KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0FVVEhfSU5GT19OQU1FJywgMjA0NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9BVVRIX0lORk9fT0NTUF9VUkwnLCAyMTA5KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0FVVE9fUkVPUkdfQ0FUQUxPRycsIDIwOTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfQVVUT19SRU9SR19TVEFSVF9USU1FJywgMjA5MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9CQUNLT1VUX1JFUV9RX05BTUUnLCAyMDE5KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0JBU0VfT0JKRUNUX05BTUUnLCAyMDAyKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0JBU0VfUV9OQU1FJywgMjAwMik7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9CQVRDSF9JTlRFUkZBQ0VfSUQnLCAyMDY4KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0NGX1NUUlVDX0RFU0MnLCAyMDUyKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0NGX1NUUlVDX05BTUUnLCAyMDM5KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0NIQU5ORUxfQVVUT19ERUZfRVhJVCcsIDIwMjYpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfQ0hJTEQnLCAyMTAxKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0NISU5JVF9TRVJWSUNFX1BBUk0nLCAyMDc2KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0NJQ1NfRklMRV9OQU1FJywgMjA2MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9DTFVTVEVSX0RBVEUnLCAyMDM3KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0NMVVNURVJfTkFNRScsIDIwMjkpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfQ0xVU1RFUl9OQU1FTElTVCcsIDIwMzApOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfQ0xVU1RFUl9RX01HUl9OQU1FJywgMjAzMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9DTFVTVEVSX1RJTUUnLCAyMDM4KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0NMVVNURVJfV09SS0xPQURfREFUQScsIDIwMzQpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfQ0xVU1RFUl9XT1JLTE9BRF9FWElUJywgMjAzMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9DT01NQU5EX0lOUFVUX1FfTkFNRScsIDIwMDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfQ09NTUFORF9SRVBMWV9RX05BTUUnLCAyMDY3KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0NSRUFUSU9OX0RBVEUnLCAyMDA0KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0NSRUFUSU9OX1RJTUUnLCAyMDA1KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0RFQURfTEVUVEVSX1FfTkFNRScsIDIwMDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfREVGX1hNSVRfUV9OQU1FJywgMjAyNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9ETlNfR1JPVVAnLCAyMDcxKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0VOVl9EQVRBJywgMjAwNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9GSVJTVCcsIDIwMDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfSUdRX1VTRVJfSUQnLCAyMDQxKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0lOSVRJQVRJT05fUV9OQU1FJywgMjAwOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9MQVNUJywgNDAwMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9MREFQX1BBU1NXT1JEJywgMjA0OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9MREFQX1VTRVJfTkFNRScsIDIwNDcpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfTFVfR1JPVVBfTkFNRScsIDIwNzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfTFVfTkFNRScsIDIwNzMpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfTFU2Ml9BUk1fU1VGRklYJywgMjA3NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9NT0RFTF9EVVJBQkxFX1EnLCAyMDk2KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX01PREVMX05PTl9EVVJBQkxFX1EnLCAyMDk3KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX01PTklUT1JfUV9OQU1FJywgMjA2Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9OQU1FTElTVF9ERVNDJywgMjAwOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9OQU1FTElTVF9OQU1FJywgMjAxMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9OQU1FUycsIDIwMjApOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfUEFSRU5UJywgMjEwMik7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9QQVNTX1RJQ0tFVF9BUFBMJywgMjA4Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9QUk9DRVNTX0RFU0MnLCAyMDExKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX1BST0NFU1NfTkFNRScsIDIwMTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfUV9ERVNDJywgMjAxMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9RX01HUl9ERVNDJywgMjAxNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9RX01HUl9JREVOVElGSUVSJywgMjAzMik7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9RX01HUl9OQU1FJywgMjAxNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9RX05BTUUnLCAyMDE2KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX1FTR19OQU1FJywgMjA0MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9SRU1PVEVfUV9NR1JfTkFNRScsIDIwMTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfUkVNT1RFX1FfTkFNRScsIDIwMTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfUkVQT1NJVE9SWV9OQU1FJywgMjAzNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9SRVBPU0lUT1JZX05BTUVMSVNUJywgMjAzNik7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9SRVNVTUVfREFURScsIDIwOTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfUkVTVU1FX1RJTUUnLCAyMDk5KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX1NFUlZJQ0VfREVTQycsIDIwNzgpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfU0VSVklDRV9OQU1FJywgMjA3Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9TRVJWSUNFX1NUQVJUX0FSR1MnLCAyMDgwKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX1NFUlZJQ0VfU1RBUlRfQ09NTUFORCcsIDIwNzkpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfU0VSVklDRV9TVE9QX0FSR1MnLCAyMDgyKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX1NFUlZJQ0VfU1RPUF9DT01NQU5EJywgMjA4MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9TVERFUlJfREVTVElOQVRJT04nLCAyMDg0KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX1NURE9VVF9ERVNUSU5BVElPTicsIDIwODMpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfU1NMX0NSTF9OQU1FTElTVCcsIDIwNTApOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfU1NMX0NSWVBUT19IQVJEV0FSRScsIDIwNTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfU1NMX0tFWV9MSUJSQVJZJywgMjA2OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9TU0xfS0VZX01FTUJFUicsIDIwNzApOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfU1NMX0tFWV9SRVBPU0lUT1JZJywgMjA0OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9TVE9SQUdFX0NMQVNTJywgMjAyMik7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9TVE9SQUdFX0NMQVNTX0RFU0MnLCAyMDQyKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX1NZU1RFTV9MT0dfUV9OQU1FJywgMjA2NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9UQ1BfTkFNRScsIDIwNzUpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfVE9QSUNfREVTQycsIDIwOTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfVE9QSUNfTkFNRScsIDIwOTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfVE9QSUNfU1RSSU5HJywgMjA5NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9UT1BJQ19TVFJJTkdfRklMVEVSJywgMjEwOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9UUElQRV9OQU1FJywgMjA4NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9UUklHR0VSX0NIQU5ORUxfTkFNRScsIDIwNjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfVFJJR0dFUl9EQVRBJywgMjAyMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9UUklHR0VSX1BST0dSQU1fTkFNRScsIDIwNjIpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfVFJJR0dFUl9URVJNX0lEJywgMjA2Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9UUklHR0VSX1RSQU5TX0lEJywgMjA2MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9VU0VSX0RBVEEnLCAyMDIxKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX1VTRVJfTElTVCcsIDQwMDApOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfVkVSU0lPTicsIDIxMjApOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfWENGX0dST1VQX05BTUUnLCAyMDQzKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX1hDRl9NRU1CRVJfTkFNRScsIDIwNDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfWE1JVF9RX05BTUUnLCAyMDI0KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0NPTU1fSU5GT19OQU1FJywgMjExMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9DT01NX0lORk9fREVTQycsIDIxMTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfUE9MSUNZX05BTUUnLCAyMTEyKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX1NJR05FUl9ETicsIDIxMTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfUkVDSVBJRU5UX0ROJywgMjExNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9JTlNUQUxMQVRJT05fREVTQycsIDIxMTUpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfSU5TVEFMTEFUSU9OX05BTUUnLCAyMTE2KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0lOU1RBTExBVElPTl9QQVRIJywgMjExNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFDQV9DSExBVVRIX0RFU0MnLCAyMTE4KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0NVU1RPTScsIDIxMTkpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfWFJfVkVSU0lPTicsIDIxMjIpOwpkZWZpbmUoJ01RU0VSSUVTX01RQ0FfWFJfU1NMX0NJUEhFUl9TVUlURVMnLCAyMTIzKTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0NMVVNfQ0hMX05BTUUnLCAyMTI0KTsKZGVmaW5lKCdNUVNFUklFU19NUUNBX0xBU1RfVVNFRCcsIDIxMzcpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQUNDT1VOVElOR19DT05OX09WRVJSSURFJywgMTM2KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0FDQ09VTlRJTkdfSU5URVJWQUwnLCAxMzUpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQUNDT1VOVElOR19NUUknLCAxMzMpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQUNDT1VOVElOR19RJywgMTM0KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0FDVElWRV9DSEFOTkVMUycsIDEwMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9BQ1RJVklUWV9SRUNPUkRJTkcnLCAxMzgpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQURPUFRORVdNQ0FfQ0hFQ0snLCAxMDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQURPUFRORVdNQ0FfVFlQRScsIDEwMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9BRE9QVE5FV01DQV9JTlRFUlZBTCcsIDEwNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9BUFBMX1RZUEUnLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0FSQ0hJVkUnLCA2MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9BVVRIX0lORk9fVFlQRScsIDY2KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0FVVEhPUklUWV9FVkVOVCcsIDQ3KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0FVVE9fUkVPUkdfSU5URVJWQUwnLCAxNzQpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQVVUT19SRU9SR0FOSVpBVElPTicsIDE3Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9CQUNLT1VUX1RIUkVTSE9MRCcsIDIyKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0JBU0VfVFlQRScsIDE5Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9CQVRDSF9JTlRFUkZBQ0VfQVVUTycsIDg2KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0JSSURHRV9FVkVOVCcsIDc0KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0NFUlRfVkFMX1BPTElDWScsIDI1Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DRl9DRkNPTkxPUycsIDI0Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DRl9MRVZFTCcsIDcwKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0NGX09GRkxPQUQnLCAyMjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQ0ZfT0ZGTE9BRF9USFJFU0hPTEQxJywgMjI1KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0NGX09GRkxPQURfVEhSRVNIT0xEMicsIDIyNik7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DRl9PRkZMT0FEX1RIUkVTSE9MRDMnLCAyMjcpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQ0ZfT0ZGTERVU0UnLCAyMjkpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQ0ZfUkVDT1ZFUicsIDcxKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0NGX1JFQ0FVVE8nLCAyNDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQ0ZfU01EU19CVUZGRVJTJywgMjI4KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0NIQU5ORUxfQVVUT19ERUYnLCA1NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DSEFOTkVMX0FVVE9fREVGX0VWRU5UJywgNTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQ0hBTk5FTF9FVkVOVCcsIDczKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0NISU5JVF9BREFQVEVSUycsIDEwMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DSElOSVRfQ09OVFJPTCcsIDExOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DSElOSVRfRElTUEFUQ0hFUlMnLCAxMDUpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQ0hJTklUX1RSQUNFX0FVVE9fU1RBUlQnLCAxMTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQ0hJTklUX1RSQUNFX1RBQkxFX1NJWkUnLCAxMTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQ0xVU1RFUl9RX1RZUEUnLCA1OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DTFVTVEVSX1dPUktMT0FEX0xFTkdUSCcsIDU4KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0NMV0xfTVJVX0NIQU5ORUxTJywgOTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQ0xXTF9RX1JBTksnLCA5NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DTFdMX1FfUFJJT1JJVFknLCA5Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DTFdMX1VTRVEnLCA5OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DTURfU0VSVkVSX0FVVE8nLCA4Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DTURfU0VSVkVSX0NPTlRST0wnLCAxMjApOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQ01EX1NFUlZFUl9DT05WRVJUX01TRycsIDg4KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0NNRF9TRVJWRVJfRExRX01TRycsIDg5KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0NPREVEX0NIQVJfU0VUX0lEJywgMik7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DT01NQU5EX0VWRU5UJywgOTkpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQ09NTUFORF9MRVZFTCcsIDMxKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0NPTkZJR1VSQVRJT05fRVZFTlQnLCA1MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DUElfTEVWRUwnLCAyNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DVVJSRU5UX1FfREVQVEgnLCAzKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0RFRl9CSU5EJywgNjEpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfREVGX0lOUFVUX09QRU5fT1BUSU9OJywgNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9ERUZfUEVSU0lTVEVOQ0UnLCA1KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0RFRl9QUklPUklUWScsIDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfREVGX1BVVF9SRVNQT05TRV9UWVBFJywgMTg0KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0RFRl9SRUFEX0FIRUFEJywgMTg4KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0RFRklOSVRJT05fVFlQRScsIDcpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfRElTVF9MSVNUUycsIDM0KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0ROU19XTE0nLCAxMDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfRFVSQUJMRV9TVUInLCAxNzUpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfRVhQSVJZX0lOVEVSVkFMJywgMzkpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfRklSU1QnLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0dST1VQX1VSJywgMjIxKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0hBUkRFTl9HRVRfQkFDS09VVCcsIDgpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfSElHSF9RX0RFUFRIJywgMzYpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfSUdRX1BVVF9BVVRIT1JJVFknLCA2NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9JTkRFWF9UWVBFJywgNTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfSU5ISUJJVF9FVkVOVCcsIDQ4KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0lOSElCSVRfR0VUJywgOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9JTkhJQklUX1BVQicsIDE4MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9JTkhJQklUX1BVVCcsIDEwKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0lOSElCSVRfU1VCJywgMTgyKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0lOVFJBX0dST1VQX1FVRVVJTkcnLCA2NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9JUF9BRERSRVNTX1ZFUlNJT04nLCA5Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9MQVNUJywgMjAwMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9MSVNURU5FUl9QT1JUX05VTUJFUicsIDg1KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0xJU1RFTkVSX1RJTUVSJywgMTA3KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0xPR0dFUl9FVkVOVCcsIDk0KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0xVNjJfQ0hBTk5FTFMnLCAxMDgpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfTE9DQUxfRVZFTlQnLCA0OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9NU0dfTUFSS19CUk9XU0VfSU5URVJWQUwnLCA2OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9NQVNURVJfQURNSU4nLCAxODYpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfTUFYX0NIQU5ORUxTJywgMTA5KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX01BWF9DTElFTlRTJywgMTcyKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX01BWF9HTE9CQUxfTE9DS1MnLCA4Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9NQVhfSEFORExFUycsIDExKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX01BWF9MT0NBTF9MT0NLUycsIDg0KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX01BWF9NU0dfTEVOR1RIJywgMTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfTUFYX09QRU5fUScsIDgwKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX01BWF9QUklPUklUWScsIDE0KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX01BWF9QUk9QRVJUSUVTX0xFTkdUSCcsIDE5Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9NQVhfUV9ERVBUSCcsIDE1KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX01BWF9RX1RSSUdHRVJTJywgOTApOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfTUFYX1JFQ09WRVJZX1RBU0tTJywgMTcxKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX01BWF9SRVNQT05TRVMnLCAyMzApOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfTUFYX1VOQ09NTUlUVEVEX01TR1MnLCAzMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9NT05JVE9SX0lOVEVSVkFMJywgODEpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfTU9OSVRPUklOR19BVVRPX0NMVVNTRFInLCAxMjQpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfTU9OSVRPUklOR19DSEFOTkVMJywgMTIyKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX01PTklUT1JJTkdfUScsIDEyMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9NU0dfREVMSVZFUllfU0VRVUVOQ0UnLCAxNik7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9NU0dfREVRX0NPVU5UJywgMzgpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfTVNHX0VOUV9DT1VOVCcsIDM3KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX05BTUVfQ09VTlQnLCAxOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9OQU1FTElTVF9UWVBFJywgNzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfTlBNX0NMQVNTJywgNzgpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfTlBNX0RFTElWRVJZJywgMTk2KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX09QRU5fSU5QVVRfQ09VTlQnLCAxNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9PUEVOX09VVFBVVF9DT1VOVCcsIDE4KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX09VVEJPVU5EX1BPUlRfTUFYJywgMTQwKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX09VVEJPVU5EX1BPUlRfTUlOJywgMTEwKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1BBR0VTRVRfSUQnLCA2Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9QRVJGT1JNQU5DRV9FVkVOVCcsIDUzKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1BMQVRGT1JNJywgMzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUE1fREVMSVZFUlknLCAxOTUpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUFJPUEVSVFlfQ09OVFJPTCcsIDE5MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9QUk9YWV9TVUInLCAxOTkpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUFVCX0NPVU5UJywgMjE1KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1BVQl9TQ09QRScsIDIxOSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9QVUJTVUJfQ0xVU1RFUicsIDI0OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9QVUJTVUJfTUFYTVNHX1JFVFJZX0NPVU5UJywgMjA2KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1BVQlNVQl9NT0RFJywgMTg3KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1BVQlNVQl9OUF9NU0cnLCAyMDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUFVCU1VCX05QX1JFU1AnLCAyMDUpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUFVCU1VCX1NZTkNfUFQnLCAyMDcpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUV9ERVBUSF9ISUdIX0VWRU5UJywgNDMpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUV9ERVBUSF9ISUdIX0xJTUlUJywgNDApOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUV9ERVBUSF9MT1dfRVZFTlQnLCA0NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9RX0RFUFRIX0xPV19MSU1JVCcsIDQxKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1FfREVQVEhfTUFYX0VWRU5UJywgNDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUV9TRVJWSUNFX0lOVEVSVkFMJywgNTQpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUV9TRVJWSUNFX0lOVEVSVkFMX0VWRU5UJywgNDYpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUV9UWVBFJywgMjApOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUV9VU0VSUycsIDgyKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1FNR1JfQ0ZDT05MT1MnLCAyNDUpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUU1PUFRfQ09OU19DT01NU19NU0dTJywgMTU1KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1FNT1BUX0NPTlNfQ1JJVElDQUxfTVNHUycsIDE1NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9RTU9QVF9DT05TX0VSUk9SX01TR1MnLCAxNTMpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUU1PUFRfQ09OU19JTkZPX01TR1MnLCAxNTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUU1PUFRfQ09OU19SRU9SR19NU0dTJywgMTU2KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1FNT1BUX0NPTlNfU1lTVEVNX01TR1MnLCAxNTcpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUU1PUFRfQ09OU19XQVJOSU5HX01TR1MnLCAxNTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUU1PUFRfQ1NNVF9PTl9FUlJPUicsIDE1MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9RTU9QVF9JTlRFUk5BTF9EVU1QJywgMTcwKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1FNT1BUX0xPR19DT01NU19NU0dTJywgMTYyKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1FNT1BUX0xPR19DUklUSUNBTF9NU0dTJywgMTYxKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1FNT1BUX0xPR19FUlJPUl9NU0dTJywgMTYwKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1FNT1BUX0xPR19JTkZPX01TR1MnLCAxNTgpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUU1PUFRfTE9HX1JFT1JHX01TR1MnLCAxNjMpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUU1PUFRfTE9HX1NZU1RFTV9NU0dTJywgMTY0KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1FNT1BUX0xPR19XQVJOSU5HX01TR1MnLCAxNTkpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUU1PUFRfVFJBQ0VfQ09NTVMnLCAxNjYpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUU1PUFRfVFJBQ0VfQ09OVkVSU0lPTicsIDE2OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9RTU9QVF9UUkFDRV9SRU9SRycsIDE2Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9RTU9QVF9UUkFDRV9NUUlfQ0FMTFMnLCAxNjUpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUU1PUFRfVFJBQ0VfU1lTVEVNJywgMTY5KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1FTR19ESVNQJywgNjMpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUkVBRF9BSEVBRCcsIDE4OSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9SRUNFSVZFX1RJTUVPVVQnLCAxMTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfUkVDRUlWRV9USU1FT1VUX01JTicsIDExMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9SRUNFSVZFX1RJTUVPVVRfVFlQRScsIDExMik7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9SRU1PVEVfRVZFTlQnLCA1MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9SRVRFTlRJT05fSU5URVJWQUwnLCAyMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9SRVNQT05TRV9SRVNUQVJUX1BPSU5UJywgMjMxKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1NDT1BFJywgNDUpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfU0VDVVJJVFlfQ0FTRScsIDE0MSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9TRVJWSUNFX0NPTlRST0wnLCAxMzkpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfU0VSVklDRV9UWVBFJywgMTIxKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1NIQVJFQUJJTElUWScsIDIzKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1NIQVJFRF9RX1FfTUdSX05BTUUnLCA3Nyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9TU0xfRVZFTlQnLCA3NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9TU0xfRklQU19SRVFVSVJFRCcsIDkyKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1NTTF9SRVNFVF9DT1VOVCcsIDc2KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1NTTF9UQVNLUycsIDY5KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1NUQVJUX1NUT1BfRVZFTlQnLCA1Mik7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9TVEFUSVNUSUNTX0NIQU5ORUwnLCAxMjkpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfU1RBVElTVElDU19BVVRPX0NMVVNTRFInLCAxMzApOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfU1RBVElTVElDU19JTlRFUlZBTCcsIDEzMSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9TVEFUSVNUSUNTX01RSScsIDEyNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9TVEFUSVNUSUNTX1EnLCAxMjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfU1VCX0NPVU5UJywgMjA0KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1NVQl9TQ09QRScsIDIxOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9TWU5DUE9JTlQnLCAzMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9UQ1BfQ0hBTk5FTFMnLCAxMTQpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfVENQX0tFRVBfQUxJVkUnLCAxMTUpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfVENQX1NUQUNLX1RZUEUnLCAxMTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfVElNRV9TSU5DRV9SRVNFVCcsIDM1KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1RPUElDX0RFRl9QRVJTSVNURU5DRScsIDE4NSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9UT1BJQ19UWVBFJywgMjA4KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1RSQUNFX1JPVVRFX1JFQ09SRElORycsIDEzNyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9UUkVFX0xJRkVfVElNRScsIDE4Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9UUklHR0VSX0NPTlRST0wnLCAyNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9UUklHR0VSX0RFUFRIJywgMjkpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfVFJJR0dFUl9JTlRFUlZBTCcsIDI1KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1RSSUdHRVJfTVNHX1BSSU9SSVRZJywgMjYpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfVFJJR0dFUl9UWVBFJywgMjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfVFJJR0dFUl9SRVNUQVJUJywgOTEpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfVVJfRElTUCcsIDIyMik7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9VU0FHRScsIDEyKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1VTRVJfTElTVCcsIDIwMDApOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfTVVMVElDQVNUJywgMTc2KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1dJTERDQVJEX09QRVJBVElPTicsIDIxNik7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DT01NX0lORk9fVFlQRScsIDIyMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9DT01NX0VWRU5UJywgMjMyKTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX01DQVNUX0JSSURHRScsIDIzMyk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9VU0VfREVBRF9MRVRURVJfUScsIDIzNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9UT0xFUkFURV9VTlBST1RFQ1RFRCcsIDIzNSk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9TSUdOQVRVUkVfQUxHT1JJVEhNJywgMjM2KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0VOQ1JZUFRJT05fQUxHT1JJVEhNJywgMjM3KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX1BPTElDWV9WRVJTSU9OJywgMjM4KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0FDVElWSVRZX0NPTk5fT1ZFUlJJREUnLCAyMzkpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfQUNUSVZJVFlfVFJBQ0UnLCAyNDApOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfU1VCX0NPTkZJR1VSQVRJT05fRVZFTlQnLCAyNDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RSUFfWFJfQ0FQQUJJTElUWScsIDI0Myk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9TVUlURV9CX1NUUkVOR1RIJywgMjQ3KTsKZGVmaW5lKCdNUVNFUklFU19NUUlBX0NITEFVVEhfUkVDT1JEUycsIDI0OCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9ERUZfQ0xVU1RFUl9YTUlUX1FfVFlQRScsIDI1MCk7CmRlZmluZSgnTVFTRVJJRVNfTVFJQV9QUk9UX1BPTElDWV9DQVBBQklMSVRZJywgMjUxKTsKZGVmaW5lKCdNUVNFUklFU19NUU9EX1ZFUlNJT05fMScsIDEpOwpkZWZpbmUoJ01RU0VSSUVTX01RT0RfVkVSU0lPTl8yJywgMik7CmRlZmluZSgnTVFTRVJJRVNfTVFPRF9WRVJTSU9OXzMnLCAzKTsKZGVmaW5lKCdNUVNFUklFU19NUU9EX1ZFUlNJT05fNCcsIDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RT0RfQ1VSUkVOVF9WRVJTSU9OJywgNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFTT19OT05FJywgMCk7CmRlZmluZSgnTVFTRVJJRVNfTVFTT19OT05fRFVSQUJMRScsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RU09fUkVBRF9BSEVBRF9BU19RX0RFRicsIDApOwpkZWZpbmUoJ01RU0VSSUVTX01RU09fQUxURVInLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUVNPX0NSRUFURScsIDIpOwpkZWZpbmUoJ01RU0VSSUVTX01RU09fUkVTVU1FJywgNCk7CmRlZmluZSgnTVFTRVJJRVNfTVFTT19EVVJBQkxFJywgOCk7CmRlZmluZSgnTVFTRVJJRVNfTVFTT19HUk9VUF9TVUInLCAxNik7CmRlZmluZSgnTVFTRVJJRVNfTVFTT19NQU5BR0VEJywgMzIpOwpkZWZpbmUoJ01RU0VSSUVTX01RU09fU0VUX0lERU5USVRZX0NPTlRFWFQnLCA2NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFTT19OT19NVUxUSUNBU1QnLCAxMjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RU09fRklYRURfVVNFUklEJywgMjU2KTsKZGVmaW5lKCdNUVNFUklFU19NUVNPX0FOWV9VU0VSSUQnLCA1MTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RU09fUFVCTElDQVRJT05TX09OX1JFUVVFU1QnLCAyMDQ4KTsKZGVmaW5lKCdNUVNFUklFU19NUVNPX05FV19QVUJMSUNBVElPTlNfT05MWScsIDQwOTYpOwpkZWZpbmUoJ01RU0VSSUVTX01RU09fRkFJTF9JRl9RVUlFU0NJTkcnLCA4MTkyKTsKZGVmaW5lKCdNUVNFUklFU19NUVNPX0FMVEVSTkFURV9VU0VSX0FVVEhPUklUWScsIDI2MjE0NCk7CmRlZmluZSgnTVFTRVJJRVNfTVFTT19XSUxEQ0FSRF9DSEFSJywgMTA0ODU3Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFTT19XSUxEQ0FSRF9UT1BJQycsIDIwOTcxNTIpOwpkZWZpbmUoJ01RU0VSSUVTX01RU09fU0VUX0NPUlJFTF9JRCcsIDQxOTQzMDQpOwpkZWZpbmUoJ01RU0VSSUVTX01RU09fU0NPUEVfUU1HUicsIDY3MTA4ODY0KTsKZGVmaW5lKCdNUVNFUklFU19NUVNPX05PX1JFQURfQUhFQUQnLCAxMzQyMTc3MjgpOwpkZWZpbmUoJ01RU0VSSUVTX01RU09fUkVBRF9BSEVBRCcsIDI2ODQzNTQ1Nik7CmRlZmluZSgnTVFTRVJJRVNfTVFTVEFUX1RZUEVfQVNZTkNfRVJST1InLCAwKTsKZGVmaW5lKCdNUVNFUklFU19NUVNUQVRfVFlQRV9SRUNPTk5FQ1RJT04nLCAxKTsKZGVmaW5lKCdNUVNFUklFU19NUVNUQVRfVFlQRV9SRUNPTk5FQ1RJT05fRVJST1InLCAyKTsKPD9waHAKCi8qKgogKiBTZW5kcyBIVFRQIHJlc3BvbnNlIGhlYWRlcnMgaW1tZWRpYXRlbHkuCiAqCiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gc2VuZCAxWFggaW5mb3JtYXRpdmUgcmVzcG9uc2VzLCBmb3IgaW5zdGFuY2UgMTAzICJFYXJseSBIaW50cyIgcmVzcG9uc2VzLgogKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIGFsbG93aW5nIHRvIHNlbmQgbXVsdGlwbGUgaW5mb3JtYXRpdmUgcmVzcG9uc2VzIGJlZm9yZSB0aGUgZmluYWwgb25lLgogKgogKiBAbGluayBodHRwczovL2ZyYW5rZW5waHAuZGV2L2RvY3MvZWFybHktaGludHMvCiAqCiAqIEByZXR1cm4gaW50IHRoZSBIVFRQIHN0YXR1cyBjb2RlIG9mIHRoaXMgcmVzcG9uc2UKICovCmZ1bmN0aW9uIGhlYWRlcnNfc2VuZChpbnQgJHN0YXR1cyA9IDIwMCk6IGludCB7fQoKLyoqCiAqIEhhbmRsZXMgYW4gSFRUUCByZXF1ZXN0IHdpdGggdGhlIHByb3ZpZGVkIGNhbGxiYWNsLgogKgogKiBXaGVuIGNhbGxlZCwgc3VwZXJnbG9iYWxzLCBwaHA6Ly9pbnB1dCBhbmQgdGhlIGxpa2UgYXJlIHJlc2V0IHRvIHJlZmxlY3QgdGhlIHZhbHVlcyBvZiB0aGUgaGFuZGxlZCByZXF1ZXN0LgogKgogKiBAbGluayBodHRwczovL2ZyYW5rZW5waHAuZGV2L2RvY3Mvd29ya2VyLwogKgogKiBAcmV0dXJuIGJvb2wgcmV0dXJucyA8Yj5GQUxTRTwvYj4gaWYgdGhlIHNlcnZlciBpcyB0ZXJtaW5hdGluZywgZ2l2aW5nIHRoZSBvcHBvcnR1bml0eSB0byB0aGUgd29ya2VyIHNjcmlwdCB0byBmaW5pc2ggY2xlYW5seQogKi8KZnVuY3Rpb24gZnJhbmtlbnBocF9oYW5kbGVfcmVxdWVzdChjYWxsYWJsZSAkY2FsbGJhY2spOiBib29sIHt9CgovKioKICogRmx1c2hlcyBhbGwgcmVzcG9uc2UgZGF0YSB0byB0aGUgY2xpZW50IGFuZCBmaW5pc2hlcyB0aGUgcmVxdWVzdC4KICogVGhpcyBhbGxvd3MgZm9yIHRpbWUtY29uc3VtaW5nIHRhc2tzIHRvIGJlIHBlcmZvcm1lZCB3aXRob3V0IGxlYXZpbmcgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGNsaWVudCBvcGVuLgogKgogKiBBbGlhcyBvZiA8Yj5mYXN0Y2dpX2ZpbmlzaF9yZXF1ZXN0PC9iPi4KICoKICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZmFzdGNnaS1maW5pc2gtcmVxdWVzdC5waHAKICoKICogQHJldHVybiBib29sIFJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIGZyYW5rZW5waHBfZmluaXNoX3JlcXVlc3QoKTogYm9vbCB7fQoKLyoqCiAqIEZldGNoZXMgYWxsIEhUVFAgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhlIGN1cnJlbnQgcmVxdWVzdC4KICoKICogQWxpYXMgb2YgPGI+YXBhY2hlX3JlcXVlc3RfaGVhZGVyczwvYj4uCiAqCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uYXBhY2hlLXJlcXVlc3QtaGVhZGVycy5waHAKICoKICogQHJldHVybiBhcnJheSBBbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBhbGwgdGhlIEhUVFAgaGVhZGVycyBpbiB0aGUgY3VycmVudCByZXF1ZXN0LgogKi8KZnVuY3Rpb24gZnJhbmtlbnBocF9yZXF1ZXN0X2hlYWRlcnMoKTogYXJyYXkge30KCi8qKgogKiBGZXRjaGVzIGFsbCBIVFRQIHJlc3BvbnNlIGhlYWRlcnMuCiAqCiAqIEFsaWFzIG9mIDxiPmFwYWNoZV9yZXNwb25zZV9oZWFkZXJzPC9iPi4KICoKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5hcGFjaGUtcmVzcG9uc2UtaGVhZGVycy5waHAKICoKICogQHJldHVybiBhcnJheXxmYWxzZSBBbiBhcnJheSBvZiBhbGwgRnJhbmtlblBIUCByZXNwb25zZSBoZWFkZXJzIG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiBmcmFua2VucGhwX3Jlc3BvbnNlX2hlYWRlcnMoKTogYXJyYXl8ZmFsc2Uge30KPD9waHAKCi8vIFN0YXJ0IG9mIHhtbHdyaXRlciB2LjAuMQoKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxMYW5ndWFnZUxldmVsVHlwZUF3YXJlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFBocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFRlbnRhdGl2ZVR5cGU7CgpjbGFzcyBYTUxXcml0ZXIKewogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBDcmVhdGUgbmV3IHhtbHdyaXRlciB1c2luZyBzb3VyY2UgdXJpIGZvciBvdXRwdXQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmkgPHA+CiAgICAgKiBUaGUgVVJJIG9mIHRoZSByZXNvdXJjZSBmb3IgdGhlIG91dHB1dC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCBPYmplY3Qgb3JpZW50ZWQgc3R5bGU6IFJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogUHJvY2VkdXJhbCBzdHlsZTogUmV0dXJucyBhIG5ldyB4bWx3cml0ZXIgcmVzb3VyY2UgZm9yIGxhdGVyIHVzZSB3aXRoIHRoZQogICAgICogeG1sd3JpdGVyIGZ1bmN0aW9ucyBvbiBzdWNjZXNzLCA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBvcGVuVXJpKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR1cmkpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBDcmVhdGUgbmV3IHhtbHdyaXRlciB1c2luZyBtZW1vcnkgZm9yIHN0cmluZyBvdXRwdXQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgT2JqZWN0IG9yaWVudGVkIHN0eWxlOiBSZXR1cm5zIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKiA8L3A+CiAgICAgKiA8cD4KICAgICAqIFByb2NlZHVyYWwgc3R5bGU6IFJldHVybnMgYSBuZXcgeG1sd3JpdGVyIHJlc291cmNlIGZvciBsYXRlciB1c2Ugd2l0aCB0aGUKICAgICAqIHhtbHdyaXRlciBmdW5jdGlvbnMgb24gc3VjY2VzcywgPGI+RkFMU0U8L2I+IG9uIGVycm9yLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gb3Blbk1lbW9yeSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBUb2dnbGUgaW5kZW50YXRpb24gb24vb2ZmLgogICAgICogQGxpbmsgaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4veG1sd3JpdGVyLnNldGluZGVudC5waHAKICAgICAqIEBwYXJhbSBib29sfGludCAkZW5hYmxlIDxwPgogICAgICogV2hldGhlciBpbmRlbnRhdGlvbiBpcyBlbmFibGVkIG9yIG51bWJlciBvZiBpbmRlbnQgc3RyaW5ncwogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbmRlbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRlbmFibGUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBTZXQgc3RyaW5nIHVzZWQgZm9yIGluZGVudGluZy4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL3htbHdyaXRlci5zZXRpbmRlbnRzdHJpbmcucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbmRlbnRhdGlvbiA8cD4KICAgICAqIFRoZSBpbmRlbnRhdGlvbiBzdHJpbmcuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldEluZGVudFN0cmluZygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkaW5kZW50YXRpb24pOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDEuMC4wKTxici8+CiAgICAgKiBDcmVhdGUgc3RhcnQgY29tbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItc3RhcnRjb21tZW50LnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzdGFydENvbW1lbnQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogQ3JlYXRlIGVuZCBjb21tZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1lbmRjb21tZW50LnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmRDb21tZW50KCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIENyZWF0ZSBzdGFydCBhdHRyaWJ1dGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXN0YXJ0YXR0cmlidXRlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICAgICAqIFRoZSBhdHRyaWJ1dGUgbmFtZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnRBdHRyaWJ1dGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBFbmQgYXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1lbmRhdHRyaWJ1dGUucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGVuZEF0dHJpYnV0ZSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBXcml0ZSBmdWxsIGF0dHJpYnV0ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItd3JpdGVhdHRyaWJ1dGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogICAgICogVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlQXR0cmlidXRlKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR2YWx1ZQogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogQ3JlYXRlIHN0YXJ0IG5hbWVzcGFjZWQgYXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1zdGFydGF0dHJpYnV0ZW5zLnBocAogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcmVmaXggPHA+CiAgICAgKiBUaGUgbmFtZXNwYWNlIHByZWZpeC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBUaGUgYXR0cmlidXRlIG5hbWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2UgPHA+CiAgICAgKiBUaGUgbmFtZXNwYWNlIFVSSS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnRBdHRyaWJ1dGVOcygKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRwcmVmaXgsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbmFtZXNwYWNlCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBXcml0ZSBmdWxsIG5hbWVzcGFjZWQgYXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci13cml0ZWF0dHJpYnV0ZW5zLnBocAogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcmVmaXggPHA+CiAgICAgKiBUaGUgbmFtZXNwYWNlIHByZWZpeC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBUaGUgYXR0cmlidXRlIG5hbWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2UgPHA+CiAgICAgKiBUaGUgbmFtZXNwYWNlIFVSSS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIDxwPgogICAgICogVGhlIGF0dHJpYnV0ZSB2YWx1ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGVBdHRyaWJ1dGVOcygKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRwcmVmaXgsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbmFtZXNwYWNlLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR2YWx1ZQogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogQ3JlYXRlIHN0YXJ0IGVsZW1lbnQgdGFnCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1zdGFydGVsZW1lbnQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogICAgICogVGhlIGVsZW1lbnQgbmFtZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnRFbGVtZW50KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogRW5kIGN1cnJlbnQgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItZW5kZWxlbWVudC5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5kRWxlbWVudCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDIuMC40KTxici8+CiAgICAgKiBFbmQgY3VycmVudCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1mdWxsZW5kZWxlbWVudC5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZnVsbEVuZEVsZW1lbnQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogQ3JlYXRlIHN0YXJ0IG5hbWVzcGFjZWQgZWxlbWVudCB0YWcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXN0YXJ0ZWxlbWVudG5zLnBocAogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRwcmVmaXggPHA+CiAgICAgKiBUaGUgbmFtZXNwYWNlIHByZWZpeC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBUaGUgZWxlbWVudCBuYW1lLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlIDxwPgogICAgICogVGhlIG5hbWVzcGFjZSBVUkkuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHN0YXJ0RWxlbWVudE5zKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJHByZWZpeCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRuYW1lc3BhY2UKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIFdyaXRlIGZ1bGwgZWxlbWVudCB0YWcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXdyaXRlZWxlbWVudC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBUaGUgZWxlbWVudCBuYW1lLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkY29udGVudCBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGVsZW1lbnQgY29udGVudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlRWxlbWVudCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRjb250ZW50ID0gbnVsbAogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogV3JpdGUgZnVsbCBuYW1lc3BhY2VkIGVsZW1lbnQgdGFnCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci13cml0ZWVsZW1lbnRucy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJlZml4IDxwPgogICAgICogVGhlIG5hbWVzcGFjZSBwcmVmaXguCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogICAgICogVGhlIGVsZW1lbnQgbmFtZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWVzcGFjZSA8cD4KICAgICAqIFRoZSBuYW1lc3BhY2UgVVJJLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkY29udGVudCBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGVsZW1lbnQgY29udGVudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlRWxlbWVudE5zKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJHByZWZpeCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRuYW1lc3BhY2UsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkY29udGVudCA9IG51bGwKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIENyZWF0ZSBzdGFydCBQSSB0YWcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXN0YXJ0cGkucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0YXJnZXQgPHA+CiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzdGFydFBpKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR0YXJnZXQpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBFbmQgY3VycmVudCBQSQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItZW5kcGkucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGVuZFBpKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIFdyaXRlcyBhIFBJCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci13cml0ZXBpLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkdGFyZ2V0IDxwPgogICAgICogVGhlIHRhcmdldCBvZiB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbi4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnQgPHA+CiAgICAgKiBUaGUgY29udGVudCBvZiB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGVQaSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkdGFyZ2V0LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb250ZW50CiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBDcmVhdGUgc3RhcnQgQ0RBVEEgdGFnCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1zdGFydGNkYXRhLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzdGFydENkYXRhKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIEVuZCBjdXJyZW50IENEQVRBCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1lbmRjZGF0YS5waHAKICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5kQ2RhdGEoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogV3JpdGUgZnVsbCBDREFUQSB0YWcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXdyaXRlY2RhdGEucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50IDxwPgogICAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSBDREFUQS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGVDZGF0YSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29udGVudCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIFdyaXRlIHRleHQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXRleHQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50IDxwPgogICAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0LgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXh0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRjb250ZW50KTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMi4wLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAyLjAuNCk8YnIvPgogICAgICogV3JpdGUgYSByYXcgWE1MIHRleHQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXdyaXRlcmF3LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkY29udGVudCA8cD4KICAgICAqIFRoZSB0ZXh0IHN0cmluZyB0byB3cml0ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGVSYXcoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvbnRlbnQpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBDcmVhdGUgZG9jdW1lbnQgdGFnCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1zdGFydGRvY3VtZW50LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbiBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBkb2N1bWVudCBhcyBwYXJ0IG9mIHRoZSBYTUwgZGVjbGFyYXRpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRlbmNvZGluZyBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGVuY29kaW5nIG9mIHRoZSBkb2N1bWVudCBhcyBwYXJ0IG9mIHRoZSBYTUwgZGVjbGFyYXRpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdGFuZGFsb25lIFtvcHRpb25hbF0gPHA+CiAgICAgKiB5ZXMgb3Igbm8uCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHN0YXJ0RG9jdW1lbnQoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkdmVyc2lvbiA9ICcxLjAnLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGVuY29kaW5nID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRzdGFuZGFsb25lID0gbnVsbAogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogRW5kIGN1cnJlbnQgZG9jdW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLWVuZGRvY3VtZW50LnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmREb2N1bWVudCgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBXcml0ZSBmdWxsIGNvbW1lbnQgdGFnCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci13cml0ZWNvbW1lbnQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50IDxwPgogICAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSBjb21tZW50LgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZUNvbW1lbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvbnRlbnQpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBDcmVhdGUgc3RhcnQgRFREIHRhZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItc3RhcnRkdGQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWFsaWZpZWROYW1lIDxwPgogICAgICogVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBkb2N1bWVudCB0eXBlIHRvIGNyZWF0ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHB1YmxpY0lkIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZXh0ZXJuYWwgc3Vic2V0IHB1YmxpYyBpZGVudGlmaWVyLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkc3lzdGVtSWQgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBleHRlcm5hbCBzdWJzZXQgc3lzdGVtIGlkZW50aWZpZXIuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHN0YXJ0RHRkKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRxdWFsaWZpZWROYW1lLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJHB1YmxpY0lkID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRzeXN0ZW1JZCA9IG51bGwKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIEVuZCBjdXJyZW50IERURAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItZW5kZHRkLnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmREdGQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogV3JpdGUgZnVsbCBEVEQgdGFnCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci13cml0ZWR0ZC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBUaGUgRFREIG5hbWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNJZCBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGV4dGVybmFsIHN1YnNldCBwdWJsaWMgaWRlbnRpZmllci4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHN5c3RlbUlkIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgZXh0ZXJuYWwgc3Vic2V0IHN5c3RlbSBpZGVudGlmaWVyLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkY29udGVudCBbb3B0aW9uYWxdIDxwPgogICAgICogVGhlIGNvbnRlbnQgb2YgdGhlIERURC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGVEdGQoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkcHVibGljSWQgPSBudWxsLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJHN5c3RlbUlkID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRjb250ZW50ID0gbnVsbAogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogQ3JlYXRlIHN0YXJ0IERURCBlbGVtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1zdGFydGR0ZGVsZW1lbnQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWFsaWZpZWROYW1lIDxwPgogICAgICogVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBkb2N1bWVudCB0eXBlIHRvIGNyZWF0ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnREdGRFbGVtZW50KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRxdWFsaWZpZWROYW1lKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogRW5kIGN1cnJlbnQgRFREIGVsZW1lbnQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLWVuZGR0ZGVsZW1lbnQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGVuZER0ZEVsZW1lbnQoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogV3JpdGUgZnVsbCBEVEQgZWxlbWVudCB0YWcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXdyaXRlZHRkZWxlbWVudC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgRFREIGVsZW1lbnQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb250ZW50IDxwPgogICAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlRHRkRWxlbWVudCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29udGVudAogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogQ3JlYXRlIHN0YXJ0IERURCBBdHRMaXN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1zdGFydGR0ZGF0dGxpc3QucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogICAgICogVGhlIGF0dHJpYnV0ZSBsaXN0IG5hbWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHN0YXJ0RHRkQXR0bGlzdCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIEVuZCBjdXJyZW50IERURCBBdHRMaXN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1lbmRkdGRhdHRsaXN0LnBocAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBlbmREdGRBdHRsaXN0KCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIFdyaXRlIGZ1bGwgRFREIEF0dExpc3QgdGFnCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci13cml0ZWR0ZGF0dGxpc3QucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogICAgICogVGhlIG5hbWUgb2YgdGhlIERURCBhdHRyaWJ1dGUgbGlzdC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnQgPHA+CiAgICAgKiBUaGUgY29udGVudCBvZiB0aGUgRFREIGF0dHJpYnV0ZSBsaXN0LgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZUR0ZEF0dGxpc3QoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGNvbnRlbnQKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICAgICAqIENyZWF0ZSBzdGFydCBEVEQgRW50aXR5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1zdGFydGR0ZGVudGl0eS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZW50aXR5LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGJvb2wgJGlzUGFyYW0KICAgICAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RhcnREdGRFbnRpdHkoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRpc1BhcmFtCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBFbmQgY3VycmVudCBEVEQgRW50aXR5CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1lbmRkdGRlbnRpdHkucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGVuZER0ZEVudGl0eSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAgICAgKiBXcml0ZSBmdWxsIERURCBFbnRpdHkgdGFnCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci13cml0ZWR0ZGVudGl0eS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZW50aXR5LgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkY29udGVudCA8cD4KICAgICAqIFRoZSBjb250ZW50IG9mIHRoZSBlbnRpdHkuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkcGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHB1YmlkCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzeXNpZAogICAgICogQHBhcmFtIHN0cmluZyAkbmRhdGFpZAogICAgICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZUR0ZEVudGl0eSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkY29udGVudCwKICAgICAgICAkcGUsCiAgICAgICAgJHB1YmlkLAogICAgICAgICRzeXNpZCwKICAgICAgICAkbmRhdGFpZAogICAgKSB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogICAgICogUmV0dXJucyBjdXJyZW50IGJ1ZmZlcgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3V0cHV0bWVtb3J5LnBocAogICAgICogQHBhcmFtIGJvb2wgJGZsdXNoIFtvcHRpb25hbF0gPHA+CiAgICAgKiBXaGV0aGVyIHRvIGZsdXNoIHRoZSBvdXRwdXQgYnVmZmVyIG9yIG5vdC4gRGVmYXVsdCBpcyA8Yj5UUlVFPC9iPi4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBjdXJyZW50IGJ1ZmZlciBhcyBhIHN0cmluZy4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG91dHB1dE1lbW9yeSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJGZsdXNoID0gdHJ1ZSk6IHN0cmluZyB7fQoKICAgIC8qKgogICAgICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAxLjAuMCk8YnIvPgogICAgICogRmx1c2ggY3VycmVudCBidWZmZXIKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLWZsdXNoLnBocAogICAgICogQHBhcmFtIGJvb2wgJGVtcHR5IFtvcHRpb25hbF0gPHA+CiAgICAgKiBXaGV0aGVyIHRvIGVtcHR5IHRoZSBidWZmZXIgb3Igbm90LiBEZWZhdWx0IGlzIDxiPlRSVUU8L2I+LgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8aW50IElmIHlvdSBvcGVuZWQgdGhlIHdyaXRlciBpbiBtZW1vcnksIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZ2VuZXJhdGVkIFhNTCBidWZmZXIsCiAgICAgKiBFbHNlLCBpZiB1c2luZyBVUkksIHRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSB0aGUgYnVmZmVyIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZgogICAgICogd3JpdHRlbiBieXRlcy4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGZsdXNoKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkZW1wdHkgPSB0cnVlKTogc3RyaW5nfGludCB7fQoKICAgIC8qKgogICAgICogQHNpbmNlIDguNAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRvVXJpKHN0cmluZyAkdXJpKTogc3RhdGljIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC40CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9NZW1vcnkoKTogc3RhdGljIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC40CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9TdHJlYW0oJHN0cmVhbSk6IHN0YXRpYyB7fQp9CgovKioKICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBDcmVhdGUgbmV3IHhtbHdyaXRlciB1c2luZyBzb3VyY2UgdXJpIGZvciBvdXRwdXQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAKICogQHBhcmFtIHN0cmluZyAkdXJpIDxwPgogKiBUaGUgVVJJIG9mIHRoZSByZXNvdXJjZSBmb3IgdGhlIG91dHB1dC4KICogPC9wPgogKiBAcmV0dXJuIGZhbHNlfHJlc291cmNlfFhNTFdyaXRlciBPYmplY3Qgb3JpZW50ZWQgc3R5bGU6IFJldHVybnMgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICogPHA+CiAqIFByb2NlZHVyYWwgc3R5bGU6IFJldHVybnMgYSBuZXcgeG1sd3JpdGVyIHJlc291cmNlIGZvciBsYXRlciB1c2Ugd2l0aCB0aGUKICogeG1sd3JpdGVyIGZ1bmN0aW9ucyBvbiBzdWNjZXNzLCA8Yj5GQUxTRTwvYj4gb24gZXJyb3IuCiAqIDwvcD4KICovCiNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlcnxmYWxzZSJdLCBkZWZhdWx0OiAicmVzb3VyY2V8ZmFsc2UiKV0KZnVuY3Rpb24geG1sd3JpdGVyX29wZW5fdXJpKHN0cmluZyAkdXJpKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogQ3JlYXRlIG5ldyB4bWx3cml0ZXIgdXNpbmcgbWVtb3J5IGZvciBzdHJpbmcgb3V0cHV0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwCiAqIEByZXR1cm4gWE1MV3JpdGVyfGZhbHNlfHJlc291cmNlIE9iamVjdCBvcmllbnRlZCBzdHlsZTogUmV0dXJucyA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKiA8cD4KICogUHJvY2VkdXJhbCBzdHlsZTogUmV0dXJucyBhIG5ldyB4bWx3cml0ZXIgcmVzb3VyY2UgZm9yIGxhdGVyIHVzZSB3aXRoIHRoZQogKiB4bWx3cml0ZXIgZnVuY3Rpb25zIG9uIHN1Y2Nlc3MsIDxiPkZBTFNFPC9iPiBvbiBlcnJvci4KICogPC9wPgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyfGZhbHNlIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZXxmYWxzZSIpXQpmdW5jdGlvbiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKSB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogVG9nZ2xlIGluZGVudGF0aW9uIG9uL29mZgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1zZXRpbmRlbnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcGFyYW0gYm9vbCAkZW5hYmxlIDxwPgogKiBXaGV0aGVyIGluZGVudGF0aW9uIGlzIGVuYWJsZWQuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfc2V0X2luZGVudCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJYTUxXcml0ZXIiXSwgZGVmYXVsdDogInJlc291cmNlIildICR3cml0ZXIsIGJvb2wgJGVuYWJsZSk6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAqIFNldCBzdHJpbmcgdXNlZCBmb3IgaW5kZW50aW5nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXNldGluZGVudHN0cmluZy5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGluZGVudGF0aW9uIDxwPgogKiBUaGUgaW5kZW50YXRpb24gc3RyaW5nLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX3NldF9pbmRlbnRfc3RyaW5nKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlciwgc3RyaW5nICRpbmRlbnRhdGlvbik6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDEuMC4wKTxici8+CiAqIENyZWF0ZSBzdGFydCBjb21tZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXN0YXJ0Y29tbWVudC5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX3N0YXJ0X2NvbW1lbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMS4wLjApPGJyLz4KICogQ3JlYXRlIGVuZCBjb21tZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLWVuZGNvbW1lbnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHhtbHdyaXRlcl9lbmRfY29tbWVudCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJYTUxXcml0ZXIiXSwgZGVmYXVsdDogInJlc291cmNlIildICR3cml0ZXIpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBDcmVhdGUgc3RhcnQgYXR0cmlidXRlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXN0YXJ0YXR0cmlidXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8WE1MV3JpdGVyICR3cml0ZXIKICogPHA+T25seSBmb3IgcHJvY2VkdXJhbCBjYWxscy4KICogVGhlIFhNTFdyaXRlciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5yZXNvdXJjZS5waHAiIHJlc291cmNlfSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLgogKiBUaGlzIHJlc291cmNlIGNvbWVzIGZyb20gYSBjYWxsIHRvIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVudXJpLnBocCIgeG1sd3JpdGVyX29wZW5fdXJpKCl9CiAqIG9yIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVubWVtb3J5LnBocCIgeG1sd3JpdGVyX29wZW5fbWVtb3J5KCl9LjwvcD4KICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICogVGhlIGF0dHJpYnV0ZSBuYW1lLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX3N0YXJ0X2F0dHJpYnV0ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJYTUxXcml0ZXIiXSwgZGVmYXVsdDogInJlc291cmNlIildICR3cml0ZXIsIHN0cmluZyAkbmFtZSk6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAqIEVuZCBhdHRyaWJ1dGUKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItZW5kYXR0cmlidXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8WE1MV3JpdGVyICR3cml0ZXIKICogPHA+T25seSBmb3IgcHJvY2VkdXJhbCBjYWxscy4KICogVGhlIFhNTFdyaXRlciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5yZXNvdXJjZS5waHAiIHJlc291cmNlfSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLgogKiBUaGlzIHJlc291cmNlIGNvbWVzIGZyb20gYSBjYWxsIHRvIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVudXJpLnBocCIgeG1sd3JpdGVyX29wZW5fdXJpKCl9CiAqIG9yIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVubWVtb3J5LnBocCIgeG1sd3JpdGVyX29wZW5fbWVtb3J5KCl9LjwvcD4gKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHhtbHdyaXRlcl9lbmRfYXR0cmlidXRlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlcik6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAqIFdyaXRlIGZ1bGwgYXR0cmlidXRlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXdyaXRlYXR0cmlidXRlLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8WE1MV3JpdGVyICR3cml0ZXIKICogPHA+T25seSBmb3IgcHJvY2VkdXJhbCBjYWxscy4KICogVGhlIFhNTFdyaXRlciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5yZXNvdXJjZS5waHAiIHJlc291cmNlfSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLgogKiBUaGlzIHJlc291cmNlIGNvbWVzIGZyb20gYSBjYWxsIHRvIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVudXJpLnBocCIgeG1sd3JpdGVyX29wZW5fdXJpKCl9CiAqIG9yIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVubWVtb3J5LnBocCIgeG1sd3JpdGVyX29wZW5fbWVtb3J5KCl9LjwvcD4KICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICogVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSA8cD4KICogVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfd3JpdGVfYXR0cmlidXRlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlciwgc3RyaW5nICRuYW1lLCBzdHJpbmcgJHZhbHVlKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogQ3JlYXRlIHN0YXJ0IG5hbWVzcGFjZWQgYXR0cmlidXRlCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXN0YXJ0YXR0cmlidXRlbnMucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByZWZpeCA8cD4KICogVGhlIG5hbWVzcGFjZSBwcmVmaXguCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICogVGhlIGF0dHJpYnV0ZSBuYW1lLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbmFtZXNwYWNlIDxwPgogKiBUaGUgbmFtZXNwYWNlIFVSSS4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHhtbHdyaXRlcl9zdGFydF9hdHRyaWJ1dGVfbnMoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyLCA/c3RyaW5nICRwcmVmaXgsIHN0cmluZyAkbmFtZSwgP3N0cmluZyAkbmFtZXNwYWNlKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogV3JpdGUgZnVsbCBuYW1lc3BhY2VkIGF0dHJpYnV0ZQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci13cml0ZWF0dHJpYnV0ZW5zLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8WE1MV3JpdGVyICR3cml0ZXIKICogPHA+T25seSBmb3IgcHJvY2VkdXJhbCBjYWxscy4KICogVGhlIFhNTFdyaXRlciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5yZXNvdXJjZS5waHAiIHJlc291cmNlfSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLgogKiBUaGlzIHJlc291cmNlIGNvbWVzIGZyb20gYSBjYWxsIHRvIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVudXJpLnBocCIgeG1sd3JpdGVyX29wZW5fdXJpKCl9CiAqIG9yIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVubWVtb3J5LnBocCIgeG1sd3JpdGVyX29wZW5fbWVtb3J5KCl9LjwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRwcmVmaXggPHA+CiAqIFRoZSBuYW1lc3BhY2UgcHJlZml4LgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAqIFRoZSBhdHRyaWJ1dGUgbmFtZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWVzcGFjZSA8cD4KICogVGhlIG5hbWVzcGFjZSBVUkkuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkdmFsdWUgPHA+CiAqIFRoZSBhdHRyaWJ1dGUgdmFsdWUuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfd3JpdGVfYXR0cmlidXRlX25zKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlciwgP3N0cmluZyAkcHJlZml4LCBzdHJpbmcgJG5hbWUsID9zdHJpbmcgJG5hbWVzcGFjZSwgc3RyaW5nICR2YWx1ZSk6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAqIENyZWF0ZSBzdGFydCBlbGVtZW50IHRhZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1zdGFydGVsZW1lbnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogKiBUaGUgZWxlbWVudCBuYW1lLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX3N0YXJ0X2VsZW1lbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyLCBzdHJpbmcgJG5hbWUpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBFbmQgY3VycmVudCBlbGVtZW50CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLWVuZGVsZW1lbnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX2VuZF9lbGVtZW50KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlcik6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDIuMC40KTxici8+CiAqIEVuZCBjdXJyZW50IGVsZW1lbnQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItZnVsbGVuZGVsZW1lbnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX2Z1bGxfZW5kX2VsZW1lbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogQ3JlYXRlIHN0YXJ0IG5hbWVzcGFjZWQgZWxlbWVudCB0YWcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItc3RhcnRlbGVtZW50bnMucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByZWZpeCA8cD4KICogVGhlIG5hbWVzcGFjZSBwcmVmaXguCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICogVGhlIGVsZW1lbnQgbmFtZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWVzcGFjZSA8cD4KICogVGhlIG5hbWVzcGFjZSBVUkkuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfc3RhcnRfZWxlbWVudF9ucygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJYTUxXcml0ZXIiXSwgZGVmYXVsdDogInJlc291cmNlIildICR3cml0ZXIsID9zdHJpbmcgJHByZWZpeCwgc3RyaW5nICRuYW1lLCA/c3RyaW5nICRuYW1lc3BhY2UpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBXcml0ZSBmdWxsIGVsZW1lbnQgdGFnCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXdyaXRlZWxlbWVudC5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAqIFRoZSBlbGVtZW50IG5hbWUuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRjb250ZW50IFtvcHRpb25hbF0gPHA+CiAqIFRoZSBlbGVtZW50IGNvbnRlbnRzLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX3dyaXRlX2VsZW1lbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyLCBzdHJpbmcgJG5hbWUsID9zdHJpbmcgJGNvbnRlbnQpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBXcml0ZSBmdWxsIG5hbWVzcGFjZWQgZWxlbWVudCB0YWcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItd3JpdGVlbGVtZW50bnMucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHByZWZpeCA8cD4KICogVGhlIG5hbWVzcGFjZSBwcmVmaXguCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICogVGhlIGVsZW1lbnQgbmFtZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWVzcGFjZSA8cD4KICogVGhlIG5hbWVzcGFjZSBVUkkuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRjb250ZW50IFtvcHRpb25hbF0gPHA+CiAqIFRoZSBlbGVtZW50IGNvbnRlbnRzLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX3dyaXRlX2VsZW1lbnRfbnMoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyLCA/c3RyaW5nICRwcmVmaXgsIHN0cmluZyAkbmFtZSwgP3N0cmluZyAkbmFtZXNwYWNlLCA/c3RyaW5nICRjb250ZW50KTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogQ3JlYXRlIHN0YXJ0IFBJIHRhZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1zdGFydHBpLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8WE1MV3JpdGVyICR3cml0ZXIKICogPHA+T25seSBmb3IgcHJvY2VkdXJhbCBjYWxscy4KICogVGhlIFhNTFdyaXRlciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5yZXNvdXJjZS5waHAiIHJlc291cmNlfSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLgogKiBUaGlzIHJlc291cmNlIGNvbWVzIGZyb20gYSBjYWxsIHRvIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVudXJpLnBocCIgeG1sd3JpdGVyX29wZW5fdXJpKCl9CiAqIG9yIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVubWVtb3J5LnBocCIgeG1sd3JpdGVyX29wZW5fbWVtb3J5KCl9LjwvcD4KICogQHBhcmFtIHN0cmluZyAkdGFyZ2V0IDxwPgogKiBUaGUgdGFyZ2V0IG9mIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX3N0YXJ0X3BpKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlciwgc3RyaW5nICR0YXJnZXQpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBFbmQgY3VycmVudCBQSQogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1lbmRwaS5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+ICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfZW5kX3BpKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlcik6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAqIFdyaXRlcyBhIFBJCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXdyaXRlcGkucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcGFyYW0gc3RyaW5nICR0YXJnZXQgPHA+CiAqIFRoZSB0YXJnZXQgb2YgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY29udGVudCA8cD4KICogVGhlIGNvbnRlbnQgb2YgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uCiAqIDwvcD4KICoKICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfd3JpdGVfcGkoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyLCBzdHJpbmcgJHRhcmdldCwgc3RyaW5nICRjb250ZW50KTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogQ3JlYXRlIHN0YXJ0IENEQVRBIHRhZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1zdGFydGNkYXRhLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8WE1MV3JpdGVyICR3cml0ZXIKICogPHA+T25seSBmb3IgcHJvY2VkdXJhbCBjYWxscy4KICogVGhlIFhNTFdyaXRlciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5yZXNvdXJjZS5waHAiIHJlc291cmNlfSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLgogKiBUaGlzIHJlc291cmNlIGNvbWVzIGZyb20gYSBjYWxsIHRvIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVudXJpLnBocCIgeG1sd3JpdGVyX29wZW5fdXJpKCl9CiAqIG9yIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVubWVtb3J5LnBocCIgeG1sd3JpdGVyX29wZW5fbWVtb3J5KCl9LjwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfc3RhcnRfY2RhdGEoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogRW5kIGN1cnJlbnQgQ0RBVEEKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItZW5kY2RhdGEucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHhtbHdyaXRlcl9lbmRfY2RhdGEoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogV3JpdGUgZnVsbCBDREFUQSB0YWcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItd3JpdGVjZGF0YS5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnQgPHA+CiAqIFRoZSBjb250ZW50cyBvZiB0aGUgQ0RBVEEuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfd3JpdGVfY2RhdGEoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyLCBzdHJpbmcgJGNvbnRlbnQpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBXcml0ZSB0ZXh0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXRleHQucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcGFyYW0gc3RyaW5nICRjb250ZW50IDxwPgogKiBUaGUgY29udGVudHMgb2YgdGhlIHRleHQuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfdGV4dCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJYTUxXcml0ZXIiXSwgZGVmYXVsdDogInJlc291cmNlIildICR3cml0ZXIsIHN0cmluZyAkY29udGVudCk6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4yLjAsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDIuMC40KTxici8+CiAqIFdyaXRlIGEgcmF3IFhNTCB0ZXh0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXdyaXRlcmF3LnBocAogKiBAcGFyYW0gcmVzb3VyY2V8WE1MV3JpdGVyICR3cml0ZXIKICogPHA+T25seSBmb3IgcHJvY2VkdXJhbCBjYWxscy4KICogVGhlIFhNTFdyaXRlciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5yZXNvdXJjZS5waHAiIHJlc291cmNlfSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLgogKiBUaGlzIHJlc291cmNlIGNvbWVzIGZyb20gYSBjYWxsIHRvIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVudXJpLnBocCIgeG1sd3JpdGVyX29wZW5fdXJpKCl9CiAqIG9yIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVubWVtb3J5LnBocCIgeG1sd3JpdGVyX29wZW5fbWVtb3J5KCl9LjwvcD4KICogQHBhcmFtIHN0cmluZyAkY29udGVudCA8cD4KICogVGhlIHRleHQgc3RyaW5nIHRvIHdyaXRlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX3dyaXRlX3JhdygjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJYTUxXcml0ZXIiXSwgZGVmYXVsdDogInJlc291cmNlIildICR3cml0ZXIsIHN0cmluZyAkY29udGVudCk6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAqIENyZWF0ZSBkb2N1bWVudCB0YWcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItc3RhcnRkb2N1bWVudC5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdmVyc2lvbiBbb3B0aW9uYWxdIDxwPgogKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGRvY3VtZW50IGFzIHBhcnQgb2YgdGhlIFhNTCBkZWNsYXJhdGlvbi4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGVuY29kaW5nIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBlbmNvZGluZyBvZiB0aGUgZG9jdW1lbnQgYXMgcGFydCBvZiB0aGUgWE1MIGRlY2xhcmF0aW9uLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc3RhbmRhbG9uZSBbb3B0aW9uYWxdIDxwPgogKiB5ZXMgb3Igbm8uCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfc3RhcnRfZG9jdW1lbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyLCA/c3RyaW5nICR2ZXJzaW9uID0gJzEuMCcsID9zdHJpbmcgJGVuY29kaW5nLCA/c3RyaW5nICRzdGFuZGFsb25lKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogRW5kIGN1cnJlbnQgZG9jdW1lbnQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItZW5kZG9jdW1lbnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHhtbHdyaXRlcl9lbmRfZG9jdW1lbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogV3JpdGUgZnVsbCBjb21tZW50IHRhZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci13cml0ZWNvbW1lbnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcGFyYW0gc3RyaW5nICRjb250ZW50IDxwPgogKiBUaGUgY29udGVudHMgb2YgdGhlIGNvbW1lbnQuCiAqIDwvcD4KICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfd3JpdGVfY29tbWVudCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJYTUxXcml0ZXIiXSwgZGVmYXVsdDogInJlc291cmNlIildICR3cml0ZXIsIHN0cmluZyAkY29udGVudCk6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAqIENyZWF0ZSBzdGFydCBEVEQgdGFnCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXN0YXJ0ZHRkLnBocAogKiBAcGFyYW0gcmVzb3VyY2V8WE1MV3JpdGVyICR3cml0ZXIKICogPHA+T25seSBmb3IgcHJvY2VkdXJhbCBjYWxscy4KICogVGhlIFhNTFdyaXRlciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5yZXNvdXJjZS5waHAiIHJlc291cmNlfSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLgogKiBUaGlzIHJlc291cmNlIGNvbWVzIGZyb20gYSBjYWxsIHRvIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVudXJpLnBocCIgeG1sd3JpdGVyX29wZW5fdXJpKCl9CiAqIG9yIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVubWVtb3J5LnBocCIgeG1sd3JpdGVyX29wZW5fbWVtb3J5KCl9LjwvcD4KICogQHBhcmFtIHN0cmluZyAkcXVhbGlmaWVkTmFtZSA8cD4KICogVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBkb2N1bWVudCB0eXBlIHRvIGNyZWF0ZS4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJHB1YmxpY0lkIFtvcHRpb25hbF0gPHA+CiAqIFRoZSBleHRlcm5hbCBzdWJzZXQgcHVibGljIGlkZW50aWZpZXIuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRzeXN0ZW1JZCBbb3B0aW9uYWxdIDxwPgogKiBUaGUgZXh0ZXJuYWwgc3Vic2V0IHN5c3RlbSBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX3N0YXJ0X2R0ZCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJYTUxXcml0ZXIiXSwgZGVmYXVsdDogInJlc291cmNlIildICR3cml0ZXIsIHN0cmluZyAkcXVhbGlmaWVkTmFtZSwgP3N0cmluZyAkcHVibGljSWQsID9zdHJpbmcgJHN5c3RlbUlkKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogRW5kIGN1cnJlbnQgRFRECiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLWVuZGR0ZC5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+ICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfZW5kX2R0ZCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJYTUxXcml0ZXIiXSwgZGVmYXVsdDogInJlc291cmNlIildICR3cml0ZXIpOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBXcml0ZSBmdWxsIERURCB0YWcKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItd3JpdGVkdGQucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogKiBUaGUgRFREIG5hbWUuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZ3xudWxsICRwdWJsaWNJZCBbb3B0aW9uYWxdIDxwPgogKiBUaGUgZXh0ZXJuYWwgc3Vic2V0IHB1YmxpYyBpZGVudGlmaWVyLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkc3lzdGVtSWQgW29wdGlvbmFsXSA8cD4KICogVGhlIGV4dGVybmFsIHN1YnNldCBzeXN0ZW0gaWRlbnRpZmllci4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNvbnRlbnQgW29wdGlvbmFsXSA8cD4KICogVGhlIGNvbnRlbnQgb2YgdGhlIERURC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHhtbHdyaXRlcl93cml0ZV9kdGQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyLCBzdHJpbmcgJG5hbWUsID9zdHJpbmcgJHB1YmxpY0lkLCA/c3RyaW5nICRzeXN0ZW1JZCwgP3N0cmluZyAkY29udGVudCk6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAqIENyZWF0ZSBzdGFydCBEVEQgZWxlbWVudAogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1zdGFydGR0ZGVsZW1lbnQucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcGFyYW0gc3RyaW5nICRxdWFsaWZpZWROYW1lIDxwPgogKiBUaGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGRvY3VtZW50IHR5cGUgdG8gY3JlYXRlLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX3N0YXJ0X2R0ZF9lbGVtZW50KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlciwgc3RyaW5nICRxdWFsaWZpZWROYW1lKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogRW5kIGN1cnJlbnQgRFREIGVsZW1lbnQKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItZW5kZHRkZWxlbWVudC5waHAKICogQHBhcmFtICR3cml0ZXIKICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfZW5kX2R0ZF9lbGVtZW50KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlcik6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAqIFdyaXRlIGZ1bGwgRFREIGVsZW1lbnQgdGFnCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXdyaXRlZHRkZWxlbWVudC5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAqIFRoZSBuYW1lIG9mIHRoZSBEVEQgZWxlbWVudC4KICogPC9wPgogKiBAcGFyYW0gc3RyaW5nICRjb250ZW50IDxwPgogKiBUaGUgY29udGVudCBvZiB0aGUgZWxlbWVudC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHhtbHdyaXRlcl93cml0ZV9kdGRfZWxlbWVudCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJYTUxXcml0ZXIiXSwgZGVmYXVsdDogInJlc291cmNlIildICR3cml0ZXIsIHN0cmluZyAkbmFtZSwgc3RyaW5nICRjb250ZW50KTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogQ3JlYXRlIHN0YXJ0IERURCBBdHRMaXN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXN0YXJ0ZHRkYXR0bGlzdC5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAqIFRoZSBhdHRyaWJ1dGUgbGlzdCBuYW1lLgogKiA8L3A+CiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX3N0YXJ0X2R0ZF9hdHRsaXN0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlciwgc3RyaW5nICRuYW1lKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogRW5kIGN1cnJlbnQgRFREIEF0dExpc3QKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItZW5kZHRkYXR0bGlzdC5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+ICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfZW5kX2R0ZF9hdHRsaXN0KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlcik6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAqIFdyaXRlIGZ1bGwgRFREIEF0dExpc3QgdGFnCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLXdyaXRlZHRkYXR0bGlzdC5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAqIFRoZSBuYW1lIG9mIHRoZSBEVEQgYXR0cmlidXRlIGxpc3QuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY29udGVudCA8cD4KICogVGhlIGNvbnRlbnQgb2YgdGhlIERURCBhdHRyaWJ1dGUgbGlzdC4KICogPC9wPgogKiBAcmV0dXJuIGJvb2wgPGI+VFJVRTwvYj4gb24gc3VjY2VzcyBvciA8Yj5GQUxTRTwvYj4gb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHhtbHdyaXRlcl93cml0ZV9kdGRfYXR0bGlzdCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyI4LjAiID0+ICJYTUxXcml0ZXIiXSwgZGVmYXVsdDogInJlc291cmNlIildICR3cml0ZXIsIHN0cmluZyAkbmFtZSwgc3RyaW5nICRjb250ZW50KTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogQ3JlYXRlIHN0YXJ0IERURCBFbnRpdHkKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItc3RhcnRkdGRlbnRpdHkucGhwCiAqIEBwYXJhbSByZXNvdXJjZXxYTUxXcml0ZXIgJHdyaXRlcgogKiA8cD5Pbmx5IGZvciBwcm9jZWR1cmFsIGNhbGxzLgogKiBUaGUgWE1MV3JpdGVyIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLnR5cGVzLnJlc291cmNlLnBocCIgcmVzb3VyY2V9IHRoYXQgaXMgYmVpbmcgbW9kaWZpZWQuCiAqIFRoaXMgcmVzb3VyY2UgY29tZXMgZnJvbSBhIGNhbGwgdG8ge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW51cmkucGhwIiB4bWx3cml0ZXJfb3Blbl91cmkoKX0KICogb3Ige0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLW9wZW5tZW1vcnkucGhwIiB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKX0uPC9wPgogKiBAcGFyYW0gc3RyaW5nICRuYW1lIDxwPgogKiBUaGUgbmFtZSBvZiB0aGUgZW50aXR5LgogKiA8L3A+CiAqIEBwYXJhbSBib29sICRpc1BhcmFtCiAqIEByZXR1cm4gYm9vbCA8Yj5UUlVFPC9iPiBvbiBzdWNjZXNzIG9yIDxiPkZBTFNFPC9iPiBvbiBmYWlsdXJlLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX3N0YXJ0X2R0ZF9lbnRpdHkoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyLCBzdHJpbmcgJG5hbWUsIGJvb2wgJGlzUGFyYW0pOiBib29sIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAwLjEuMCk8YnIvPgogKiBFbmQgY3VycmVudCBEVEQgRW50aXR5CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24ueG1sd3JpdGVyLWVuZGR0ZGVudGl0eS5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+ICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfZW5kX2R0ZF9lbnRpdHkoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsiOC4wIiA9PiAiWE1MV3JpdGVyIl0sIGRlZmF1bHQ6ICJyZXNvdXJjZSIpXSAkd3JpdGVyKTogYm9vbCB7fQoKLyoqCiAqIChQSFAgNSAmZ3Q7PSA1LjEuMiwgUEVDTCB4bWx3cml0ZXIgJmd0Oz0gMC4xLjApPGJyLz4KICogV3JpdGUgZnVsbCBEVEQgRW50aXR5IHRhZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci13cml0ZWR0ZGVudGl0eS5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+CiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAqIFRoZSBuYW1lIG9mIHRoZSBlbnRpdHkuCiAqIDwvcD4KICogQHBhcmFtIHN0cmluZyAkY29udGVudCA8cD4KICogVGhlIGNvbnRlbnQgb2YgdGhlIGVudGl0eS4KICogPC9wPgogKiBAcGFyYW0gYm9vbCAkaXNQYXJhbQogKiBAcGFyYW0gc3RyaW5nICRwdWJsaWNJZAogKiBAcGFyYW0gc3RyaW5nICRzeXN0ZW1JZAogKiBAcGFyYW0gc3RyaW5nICRub3RhdGlvbkRhdGEKICogQHJldHVybiBib29sIDxiPlRSVUU8L2I+IG9uIHN1Y2Nlc3Mgb3IgPGI+RkFMU0U8L2I+IG9uIGZhaWx1cmUuCiAqLwpmdW5jdGlvbiB4bWx3cml0ZXJfd3JpdGVfZHRkX2VudGl0eSgKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlciwKICAgIHN0cmluZyAkbmFtZSwKICAgIHN0cmluZyAkY29udGVudCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSBib29sICRpc1BhcmFtID0gZmFsc2UsCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gP3N0cmluZyAkcHVibGljSWQgPSBudWxsLAogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldID9zdHJpbmcgJHN5c3RlbUlkID0gbnVsbCwKICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSA/c3RyaW5nICRub3RhdGlvbkRhdGEgPSBudWxsCik6IGJvb2wge30KCi8qKgogKiAoUEhQIDUgJmd0Oz0gNS4xLjIsIFBFQ0wgeG1sd3JpdGVyICZndDs9IDAuMS4wKTxici8+CiAqIFJldHVybnMgY3VycmVudCBidWZmZXIKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3V0cHV0bWVtb3J5LnBocAogKiBAcGFyYW0gcmVzb3VyY2V8WE1MV3JpdGVyICR3cml0ZXIKICogPHA+T25seSBmb3IgcHJvY2VkdXJhbCBjYWxscy4KICogVGhlIFhNTFdyaXRlciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9sYW5ndWFnZS50eXBlcy5yZXNvdXJjZS5waHAiIHJlc291cmNlfSB0aGF0IGlzIGJlaW5nIG1vZGlmaWVkLgogKiBUaGlzIHJlc291cmNlIGNvbWVzIGZyb20gYSBjYWxsIHRvIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVudXJpLnBocCIgeG1sd3JpdGVyX29wZW5fdXJpKCl9CiAqIG9yIHtAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1vcGVubWVtb3J5LnBocCIgeG1sd3JpdGVyX29wZW5fbWVtb3J5KCl9LjwvcD4KICogQHBhcmFtIGJvb2wgJGZsdXNoIFtvcHRpb25hbF0gPHA+CiAqIFdoZXRoZXIgdG8gZmx1c2ggdGhlIG91dHB1dCBidWZmZXIgb3Igbm90LiBEZWZhdWx0IGlzIDxiPlRSVUU8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nIHRoZSBjdXJyZW50IGJ1ZmZlciBhcyBhIHN0cmluZy4KICovCmZ1bmN0aW9uIHhtbHdyaXRlcl9vdXRwdXRfbWVtb3J5KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlciwgYm9vbCAkZmx1c2ggPSB0cnVlKTogc3RyaW5nIHt9CgovKioKICogKFBIUCA1ICZndDs9IDUuMS4yLCBQRUNMIHhtbHdyaXRlciAmZ3Q7PSAxLjAuMCk8YnIvPgogKiBGbHVzaCBjdXJyZW50IGJ1ZmZlcgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnhtbHdyaXRlci1mbHVzaC5waHAKICogQHBhcmFtIHJlc291cmNlfFhNTFdyaXRlciAkd3JpdGVyCiAqIDxwPk9ubHkgZm9yIHByb2NlZHVyYWwgY2FsbHMuCiAqIFRoZSBYTUxXcml0ZXIge0BsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UudHlwZXMucmVzb3VyY2UucGhwIiByZXNvdXJjZX0gdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KICogVGhpcyByZXNvdXJjZSBjb21lcyBmcm9tIGEgY2FsbCB0byB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3BlbnVyaS5waHAiIHhtbHdyaXRlcl9vcGVuX3VyaSgpfQogKiBvciB7QGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi54bWx3cml0ZXItb3Blbm1lbW9yeS5waHAiIHhtbHdyaXRlcl9vcGVuX21lbW9yeSgpfS48L3A+CiAqIEBwYXJhbSBib29sICRlbXB0eSBbb3B0aW9uYWxdIDxwPgogKiBXaGV0aGVyIHRvIGVtcHR5IHRoZSBidWZmZXIgb3Igbm90LiBEZWZhdWx0IGlzIDxiPlRSVUU8L2I+LgogKiA8L3A+CiAqIEByZXR1cm4gc3RyaW5nfGludCBJZiB5b3Ugb3BlbmVkIHRoZSB3cml0ZXIgaW4gbWVtb3J5LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGdlbmVyYXRlZCBYTUwgYnVmZmVyLAogKiBFbHNlLCBpZiB1c2luZyBVUkksIHRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSB0aGUgYnVmZmVyIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZgogKiB3cml0dGVuIGJ5dGVzLgogKi8KZnVuY3Rpb24geG1sd3JpdGVyX2ZsdXNoKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbIjguMCIgPT4gIlhNTFdyaXRlciJdLCBkZWZhdWx0OiAicmVzb3VyY2UiKV0gJHdyaXRlciwgYm9vbCAkZW1wdHkgPSB0cnVlKTogc3RyaW5nfGludCB7fQo8P3BocAoKLy8gU3RhcnQgb2Ygc3Vob3NpbiB2LjAuOS4zMi4xCgovKioKICogRW5jcnlwdHMgYSBjb29raWUgdmFsdWUgYWNjb3JkaW5nIHRvIGN1cnJlbnQgY29va2llIGVuY3JweXRpb24gc2V0dGluZwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLnN1aG9zaW4tZW5jcnlwdC1jb29raWUucGhwCiAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgPHA+CiAqIENvb2tpZSBuYW1lLgogKiA8L3A+CiAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIDxwPgogKiBDb29raWUgdmFsdWUuCiAqIDwvcD4KICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIGVuY3J5cHRlZCBzdHJpbmcgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICovCmZ1bmN0aW9uIHN1aG9zaW5fZW5jcnlwdF9jb29raWUoJG5hbWUsICR2YWx1ZSkge30KCi8qKgogKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHJhdyBjb29raWUgdmFsdWVzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3Vob3Npbi1nZXQtcmF3LWNvb2tpZXMucGhwCiAqIEByZXR1cm4gYXJyYXkgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgcmF3IGNvb2tpZSB2YWx1ZXMuCiAqLwpmdW5jdGlvbiBzdWhvc2luX2dldF9yYXdfY29va2llcygpIHt9Cjw/cGhwCgovLyBTdGFydCBvZiBkb20gdi4yMDAzMTEyOQp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXExhbmd1YWdlTGV2ZWxUeXBlQXdhcmU7CgovKioKICogR2V0cyBhIDxiPkRPTUVsZW1lbnQ8L2I+IG9iamVjdCBmcm9tIGEgPGI+U2ltcGxlWE1MRWxlbWVudDwvYj4gb2JqZWN0CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZG9tLWltcG9ydC1zaW1wbGV4bWwucGhwCiAqIEBwYXJhbSBTaW1wbGVYTUxFbGVtZW50ICRub2RlIDxwPgogKiBUaGUgPGI+U2ltcGxlWE1MRWxlbWVudDwvYj4gbm9kZS4KICogPC9wPgogKiBAcmV0dXJuIERPTUVsZW1lbnR8bnVsbCBUaGUgPGI+RE9NRWxlbWVudDwvYj4gbm9kZSBhZGRlZCBvciA8Yj5OVUxMPC9iPiBpZiBhbnkgZXJyb3JzIG9jY3VyLgogKi8KI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnRE9NRWxlbWVudCddLCBkZWZhdWx0OiAnRE9NRWxlbWVudHxudWxsJyldCmZ1bmN0aW9uIGRvbV9pbXBvcnRfc2ltcGxleG1sKG9iamVjdCAkbm9kZSkge30KCi8qKgogKiBOb2RlIGlzIGEgPGI+RE9NRWxlbWVudDwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb20uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdYTUxfRUxFTUVOVF9OT0RFJywgMSk7CgovKioKICogTm9kZSBpcyBhIDxiPkRPTUF0dHI8L2I+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnWE1MX0FUVFJJQlVURV9OT0RFJywgMik7CgovKioKICogTm9kZSBpcyBhIDxiPkRPTVRleHQ8L2I+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnWE1MX1RFWFRfTk9ERScsIDMpOwoKLyoqCiAqIE5vZGUgaXMgYSA8Yj5ET01DaGFyYWN0ZXJEYXRhPC9iPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1hNTF9DREFUQV9TRUNUSU9OX05PREUnLCA0KTsKCi8qKgogKiBOb2RlIGlzIGEgPGI+RE9NRW50aXR5UmVmZXJlbmNlPC9iPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1hNTF9FTlRJVFlfUkVGX05PREUnLCA1KTsKCi8qKgogKiBOb2RlIGlzIGEgPGI+RE9NRW50aXR5PC9iPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1hNTF9FTlRJVFlfTk9ERScsIDYpOwoKLyoqCiAqIE5vZGUgaXMgYSA8Yj5ET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb248L2I+CiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnWE1MX1BJX05PREUnLCA3KTsKCi8qKgogKiBOb2RlIGlzIGEgPGI+RE9NQ29tbWVudDwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb20uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdYTUxfQ09NTUVOVF9OT0RFJywgOCk7CgovKioKICogTm9kZSBpcyBhIDxiPkRPTURvY3VtZW50PC9iPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1hNTF9ET0NVTUVOVF9OT0RFJywgOSk7CgovKioKICogTm9kZSBpcyBhIDxiPkRPTURvY3VtZW50VHlwZTwvYj4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb20uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdYTUxfRE9DVU1FTlRfVFlQRV9OT0RFJywgMTApOwoKLyoqCiAqIE5vZGUgaXMgYSA8Yj5ET01Eb2N1bWVudEZyYWdtZW50PC9iPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1hNTF9ET0NVTUVOVF9GUkFHX05PREUnLCAxMSk7CgovKioKICogTm9kZSBpcyBhIDxiPkRPTU5vdGF0aW9uPC9iPgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ1hNTF9OT1RBVElPTl9OT0RFJywgMTIpOwpkZWZpbmUoJ1hNTF9IVE1MX0RPQ1VNRU5UX05PREUnLCAxMyk7CmRlZmluZSgnWE1MX0RURF9OT0RFJywgMTQpOwpkZWZpbmUoJ1hNTF9FTEVNRU5UX0RFQ0xfTk9ERScsIDE1KTsKZGVmaW5lKCdYTUxfQVRUUklCVVRFX0RFQ0xfTk9ERScsIDE2KTsKZGVmaW5lKCdYTUxfRU5USVRZX0RFQ0xfTk9ERScsIDE3KTsKZGVmaW5lKCdYTUxfTkFNRVNQQUNFX0RFQ0xfTk9ERScsIDE4KTsKZGVmaW5lKCdYTUxfTE9DQUxfTkFNRVNQQUNFJywgMTgpOwpkZWZpbmUoJ1hNTF9BVFRSSUJVVEVfQ0RBVEEnLCAxKTsKZGVmaW5lKCdYTUxfQVRUUklCVVRFX0lEJywgMik7CmRlZmluZSgnWE1MX0FUVFJJQlVURV9JRFJFRicsIDMpOwpkZWZpbmUoJ1hNTF9BVFRSSUJVVEVfSURSRUZTJywgNCk7CmRlZmluZSgnWE1MX0FUVFJJQlVURV9FTlRJVFknLCA2KTsKZGVmaW5lKCdYTUxfQVRUUklCVVRFX05NVE9LRU4nLCA3KTsKZGVmaW5lKCdYTUxfQVRUUklCVVRFX05NVE9LRU5TJywgOCk7CmRlZmluZSgnWE1MX0FUVFJJQlVURV9FTlVNRVJBVElPTicsIDkpOwpkZWZpbmUoJ1hNTF9BVFRSSUJVVEVfTk9UQVRJT04nLCAxMCk7CgovKioKICogRXJyb3IgY29kZSBub3QgcGFydCBvZiB0aGUgRE9NIHNwZWNpZmljYXRpb24uIE1lYW50IGZvciBQSFAgZXJyb3JzLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0RPTV9QSFBfRVJSJywgMCk7CgovKioKICogSWYgaW5kZXggb3Igc2l6ZSBpcyBuZWdhdGl2ZSwgb3IgZ3JlYXRlciB0aGFuIHRoZSBhbGxvd2VkIHZhbHVlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0RPTV9JTkRFWF9TSVpFX0VSUicsIDEpOwoKLyoqCiAqIElmIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb2YgdGV4dCBkb2VzIG5vdCBmaXQgaW50byBhCiAqIDxiPkRPTVN0cmluZzwvYj4uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRE9NU1RSSU5HX1NJWkVfRVJSJywgMik7CgovKioKICogSWYgYW55IG5vZGUgaXMgaW5zZXJ0ZWQgc29tZXdoZXJlIGl0IGRvZXNuJ3QgYmVsb25nCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRE9NX0hJRVJBUkNIWV9SRVFVRVNUX0VSUicsIDMpOwoKLyoqCiAqIElmIGEgbm9kZSBpcyB1c2VkIGluIGEgZGlmZmVyZW50IGRvY3VtZW50IHRoYW4gdGhlIG9uZSB0aGF0IGNyZWF0ZWQgaXQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRE9NX1dST05HX0RPQ1VNRU5UX0VSUicsIDQpOwoKLyoqCiAqIElmIGFuIGludmFsaWQgb3IgaWxsZWdhbCBjaGFyYWN0ZXIgaXMgc3BlY2lmaWVkLCBzdWNoIGFzIGluIGEgbmFtZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb20uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdET01fSU5WQUxJRF9DSEFSQUNURVJfRVJSJywgNSk7CgovKioKICogSWYgZGF0YSBpcyBzcGVjaWZpZWQgZm9yIGEgbm9kZSB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IGRhdGEuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRE9NX05PX0RBVEFfQUxMT1dFRF9FUlInLCA2KTsKCi8qKgogKiBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gbW9kaWZ5IGFuIG9iamVjdCB3aGVyZSBtb2RpZmljYXRpb25zIGFyZSBub3QgYWxsb3dlZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb20uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdET01fTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSJywgNyk7CgovKioKICogSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHJlZmVyZW5jZSBhIG5vZGUgaW4gYSBjb250ZXh0IHdoZXJlIGl0IGRvZXMgbm90IGV4aXN0LgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0RPTV9OT1RfRk9VTkRfRVJSJywgOCk7CgovKioKICogSWYgdGhlIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVlc3RlZCB0eXBlIG9mIG9iamVjdCBvciBvcGVyYXRpb24uCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRE9NX05PVF9TVVBQT1JURURfRVJSJywgOSk7CgovKioKICogSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGFkZCBhbiBhdHRyaWJ1dGUgdGhhdCBpcyBhbHJlYWR5IGluIHVzZSBlbHNld2hlcmUuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRE9NX0lOVVNFX0FUVFJJQlVURV9FUlInLCAxMCk7CgovKioKICogSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHVzZSBhbiBvYmplY3QgdGhhdCBpcyBub3QsIG9yIGlzIG5vIGxvbmdlciwgdXNhYmxlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbS5jb25zdGFudHMucGhwCiAqLwpkZWZpbmUoJ0RPTV9JTlZBTElEX1NUQVRFX0VSUicsIDExKTsKCi8qKgogKiBJZiBhbiBpbnZhbGlkIG9yIGlsbGVnYWwgc3RyaW5nIGlzIHNwZWNpZmllZC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb20uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdET01fU1lOVEFYX0VSUicsIDEyKTsKCi8qKgogKiBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gbW9kaWZ5IHRoZSB0eXBlIG9mIHRoZSB1bmRlcmx5aW5nIG9iamVjdC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb20uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdET01fSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSJywgMTMpOwoKLyoqCiAqIElmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBjcmVhdGUgb3IgY2hhbmdlIGFuIG9iamVjdCBpbiBhIHdheSB3aGljaCBpcwogKiBpbmNvcnJlY3Qgd2l0aCByZWdhcmQgdG8gbmFtZXNwYWNlcy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb20uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdET01fTkFNRVNQQUNFX0VSUicsIDE0KTsKCi8qKgogKiBJZiBhIHBhcmFtZXRlciBvciBhbiBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdW5kZXJseWluZyBvYmplY3QuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tLmNvbnN0YW50cy5waHAKICovCmRlZmluZSgnRE9NX0lOVkFMSURfQUNDRVNTX0VSUicsIDE1KTsKCi8qKgogKiBJZiBhIGNhbGwgdG8gYSBtZXRob2Qgc3VjaCBhcyBpbnNlcnRCZWZvcmUgb3IgcmVtb3ZlQ2hpbGQgd291bGQgbWFrZSB0aGUgTm9kZQogKiBpbnZhbGlkIHdpdGggcmVzcGVjdCB0byAicGFydGlhbCB2YWxpZGl0eSIsIHRoaXMgZXhjZXB0aW9uIHdvdWxkIGJlIHJhaXNlZCBhbmQKICogdGhlIG9wZXJhdGlvbiB3b3VsZCBub3QgYmUgZG9uZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb20uY29uc3RhbnRzLnBocAogKi8KZGVmaW5lKCdET01fVkFMSURBVElPTl9FUlInLCAxNik7CgovLyBFbmQgb2YgZG9tIHYuMjAwMzExMjkKPD9waHAKCi8vMjAxMjA0MDUgQUcgc3luY2VkIHRvIG9mZmljaWFsIGRvY3MKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxEZXByZWNhdGVkOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEltbXV0YWJsZTsKdXNlIEpldEJyYWluc1xQaHBTdG9ybVxJbnRlcm5hbFxMYW5ndWFnZUxldmVsVHlwZUF3YXJlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFBocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlOwp1c2UgSmV0QnJhaW5zXFBocFN0b3JtXEludGVybmFsXFRlbnRhdGl2ZVR5cGU7CnVzZSBKZXRCcmFpbnNcUGhwU3Rvcm1cTGFuZ3VhZ2U7CgovKioKICogVGhlIERPTU5vZGUgY2xhc3MKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub2RlLnBocAogKi8KY2xhc3MgRE9NTm9kZQp7CiAgICAvKioKICAgICAqIEBzaW5jZSA4LjQKICAgICAqLwogICAgcHVibGljIGNvbnN0IERPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCA9IDEsIERPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORyA9IDIsIERPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyA9IDQ7CiAgICAvKioKICAgICAqIEBzaW5jZSA4LjQKICAgICAqLwogICAgcHVibGljIGNvbnN0IERPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TID0gOCwgRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZID0gMTYsIERPQ1VNRU5UX1BPU0lUSU9OX0lNUExFTUVOVEFUSU9OX1NQRUNJRklDID0gMzI7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICogUmV0dXJucyB0aGUgbW9zdCBhY2N1cmF0ZSBuYW1lIGZvciB0aGUgY3VycmVudCBub2RlIHR5cGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tbm9kZS5waHAjZG9tbm9kZS5wcm9wcy5ub2RlbmFtZQogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRub2RlTmFtZTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqIFRoZSB2YWx1ZSBvZiB0aGlzIG5vZGUsIGRlcGVuZGluZyBvbiBpdHMgdHlwZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub2RlLnBocCNkb21ub2RlLnByb3BzLm5vZGV2YWx1ZQogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJG5vZGVWYWx1ZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKiBHZXRzIHRoZSB0eXBlIG9mIHRoZSBub2RlLiBPbmUgb2YgdGhlIHByZWRlZmluZWQKICAgICAqIDxhIGhyZWY9Imh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2RvbS5jb25zdGFudHMucGhwIj5YTUxfeHh4X05PREU8L2E+IGNvbnN0YW50cwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub2RlLnBocCNkb21ub2RlLnByb3BzLm5vZGV0eXBlCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJG5vZGVUeXBlOwoKICAgIC8qKgogICAgICogQHZhciBET01Ob2RlfG51bGwKICAgICAqIFRoZSBwYXJlbnQgb2YgdGhpcyBub2RlLiBJZiB0aGVyZSBpcyBubyBzdWNoIG5vZGUsIHRoaXMgcmV0dXJucyBOVUxMLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub2RlLnBocCNkb21ub2RlLnByb3BzLnBhcmVudG5vZGUKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnRE9NTm9kZXxudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkcGFyZW50Tm9kZTsKCiAgICAvKioKICAgICAqIEB2YXIgRE9NTm9kZUxpc3QKICAgICAqIEEgPGNsYXNzbmFtZT5ET01Ob2RlTGlzdDwvY2xhc3NuYW1lPiB0aGF0IGNvbnRhaW5zIGFsbCBjaGlsZHJlbiBvZiB0aGlzIG5vZGUuIElmIHRoZXJlIGFyZSBubyBjaGlsZHJlbiwgdGhpcyBpcyBhbiBlbXB0eSA8Y2xhc3NuYW1lPkRPTU5vZGVMaXN0PC9jbGFzc25hbWU+LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub2RlLnBocCNkb21ub2RlLnByb3BzLmNoaWxkbm9kZXMKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnRE9NTm9kZUxpc3QnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRjaGlsZE5vZGVzOwoKICAgIC8qKgogICAgICogQHZhciBET01Ob2RlfG51bGwKICAgICAqIFRoZSBmaXJzdCBjaGlsZCBvZiB0aGlzIG5vZGUuIElmIHRoZXJlIGlzIG5vIHN1Y2ggbm9kZSwgdGhpcyByZXR1cm5zIE5VTEwuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbW5vZGUucGhwI2RvbW5vZGUucHJvcHMuZmlyc3RjaGlsZAogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdET01Ob2RlfG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRmaXJzdENoaWxkOwoKICAgIC8qKgogICAgICogQHZhciBET01Ob2RlfG51bGwKICAgICAqIFRoZSBsYXN0IGNoaWxkIG9mIHRoaXMgbm9kZS4gSWYgdGhlcmUgaXMgbm8gc3VjaCBub2RlLCB0aGlzIHJldHVybnMgTlVMTC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tbm9kZS5waHAjZG9tbm9kZS5wcm9wcy5sYXN0Y2hpbGQKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnRE9NTm9kZXxudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkbGFzdENoaWxkOwoKICAgIC8qKgogICAgICogQHZhciBET01Ob2RlfG51bGwKICAgICAqIFRoZSBub2RlIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGlzIG5vZGUuIElmIHRoZXJlIGlzIG5vIHN1Y2ggbm9kZSwgdGhpcyByZXR1cm5zIE5VTEwuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbW5vZGUucGhwI2RvbW5vZGUucHJvcHMucHJldmlvdXNzaWJsaW5nCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0RPTU5vZGV8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHByZXZpb3VzU2libGluZzsKCiAgICAvKioKICAgICAqIEB2YXIgRE9NTm9kZXxudWxsCiAgICAgKiBUaGUgbm9kZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBub2RlLiBJZiB0aGVyZSBpcyBubyBzdWNoIG5vZGUsIHRoaXMgcmV0dXJucyBOVUxMLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub2RlLnBocCNkb21ub2RlLnByb3BzLm5leHRzaWJsaW5nCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0RPTU5vZGV8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJG5leHRTaWJsaW5nOwoKICAgIC8qKgogICAgICogQHZhciBET01OYW1lZE5vZGVNYXB8bnVsbAogICAgICogQSA8Y2xhc3NuYW1lPkRPTU5hbWVkTm9kZU1hcDwvY2xhc3NuYW1lPiBjb250YWluaW5nIHRoZSBhdHRyaWJ1dGVzIG9mIHRoaXMgbm9kZSAoaWYgaXQgaXMgYSA8Y2xhc3NuYW1lPkRPTUVsZW1lbnQ8L2NsYXNzbmFtZT4pIG9yIE5VTEwgb3RoZXJ3aXNlLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub2RlLnBocCNkb21ub2RlLnByb3BzLmF0dHJpYnV0ZXMKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnRE9NTmFtZWROb2RlTWFwfG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRhdHRyaWJ1dGVzOwoKICAgIC8qKgogICAgICogQHZhciBET01Eb2N1bWVudHxudWxsCiAgICAgKiBUaGUgPGNsYXNzbmFtZT5ET01Eb2N1bWVudDwvY2xhc3NuYW1lPiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZSwgb3IgTlVMTCBpZiB0aGlzIG5vZGUgaXMgYSA8Y2xhc3NuYW1lPkRPTURvY3VtZW50PC9jbGFzc25hbWU+LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub2RlLnBocCNkb21ub2RlLnByb3BzLm93bmVyZG9jdW1lbnQKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnRE9NRG9jdW1lbnR8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJG93bmVyRG9jdW1lbnQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKiBUaGUgbmFtZXNwYWNlIFVSSSBvZiB0aGlzIG5vZGUsIG9yIE5VTEwgaWYgaXQgaXMgdW5zcGVjaWZpZWQuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbW5vZGUucGhwI2RvbW5vZGUucHJvcHMubmFtZXNwYWNldXJpCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkbmFtZXNwYWNlVVJJOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICogVGhlIG5hbWVzcGFjZSBwcmVmaXggb2YgdGhpcyBub2RlLCBvciBOVUxMIGlmIGl0IGlzIHVuc3BlY2lmaWVkLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub2RlLnBocCNkb21ub2RlLnByb3BzLnByZWZpeAogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRwcmVmaXg7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKiBSZXR1cm5zIHRoZSBsb2NhbCBwYXJ0IG9mIHRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGlzIG5vZGUuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbW5vZGUucGhwI2RvbW5vZGUucHJvcHMubG9jYWxuYW1lCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkbG9jYWxOYW1lOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICogVGhlIGFic29sdXRlIGJhc2UgVVJJIG9mIHRoaXMgbm9kZSBvciBOVUxMIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiB3YXNuJ3QgYWJsZSB0byBvYnRhaW4gYW4gYWJzb2x1dGUgVVJJLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub2RlLnBocCNkb21ub2RlLnByb3BzLmJhc2V1cmkKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRiYXNlVVJJOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqIFRoaXMgYXR0cmlidXRlIHJldHVybnMgdGhlIHRleHQgY29udGVudCBvZiB0aGlzIG5vZGUgYW5kIGl0cyBkZXNjZW5kYW50cy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tbm9kZS5waHAjZG9tbm9kZS5wcm9wcy50ZXh0Y29udGVudAogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICR0ZXh0Q29udGVudDsKCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjMnKV0KICAgIHB1YmxpYyBib29sICRpc0Nvbm5lY3RlZDsKCiAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjMnKV0KICAgIHB1YmxpYyA/RE9NRWxlbWVudCAkcGFyZW50RWxlbWVudDsKCiAgICAvKioKICAgICAqIEFkZHMgYSBuZXcgY2hpbGQgYmVmb3JlIGEgcmVmZXJlbmNlIG5vZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tbm9kZS5pbnNlcnRiZWZvcmUucGhwCiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkbm9kZSA8cD4KICAgICAqIFRoZSBuZXcgbm9kZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBudWxsfERPTU5vZGUgJGNoaWxkIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgcmVmZXJlbmNlIG5vZGUuIElmIG5vdCBzdXBwbGllZCwgbmV3bm9kZSBpcwogICAgICogYXBwZW5kZWQgdG8gdGhlIGNoaWxkcmVuLgogICAgICogPC9wPgogICAgICogQHJldHVybiBET01Ob2RlIFRoZSBpbnNlcnRlZCBub2RlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKAogICAgICAgIERPTU5vZGUgJG5vZGUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnRE9NTm9kZXxudWxsJ10sIGRlZmF1bHQ6ICdET01Ob2RlJyldICRjaGlsZCA9IG51bGwKICAgICkge30KCiAgICAvKioKICAgICAqIFJlcGxhY2VzIGEgY2hpbGQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tbm9kZS5yZXBsYWNlY2hpbGQucGhwCiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkbm9kZSA8cD4KICAgICAqIFRoZSBuZXcgbm9kZS4gSXQgbXVzdCBiZSBhIG1lbWJlciBvZiB0aGUgdGFyZ2V0IGRvY3VtZW50LCBpLmUuCiAgICAgKiBjcmVhdGVkIGJ5IG9uZSBvZiB0aGUgRE9NRG9jdW1lbnQtPmNyZWF0ZVhYWCgpIG1ldGhvZHMgb3IgaW1wb3J0ZWQgaW4KICAgICAqIHRoZSBkb2N1bWVudCBieSAuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkY2hpbGQgPHA+CiAgICAgKiBUaGUgb2xkIG5vZGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIERPTU5vZGV8ZmFsc2UgVGhlIG9sZCBub2RlIG9yIGZhbHNlIGlmIGFuIGVycm9yIG9jY3VyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVwbGFjZUNoaWxkKERPTU5vZGUgJG5vZGUsIERPTU5vZGUgJGNoaWxkKSB7fQoKICAgIC8qKgogICAgICogUmVtb3ZlcyBjaGlsZCBmcm9tIGxpc3Qgb2YgY2hpbGRyZW4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tbm9kZS5yZW1vdmVjaGlsZC5waHAKICAgICAqIEBwYXJhbSBET01Ob2RlICRjaGlsZCA8cD4KICAgICAqIFRoZSByZW1vdmVkIGNoaWxkLgogICAgICogPC9wPgogICAgICogQHJldHVybiBET01Ob2RlIElmIHRoZSBjaGlsZCBjb3VsZCBiZSByZW1vdmVkIHRoZSBmdW5jdGlvbnMgcmV0dXJucyB0aGUgb2xkIGNoaWxkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQ2hpbGQoRE9NTm9kZSAkY2hpbGQpIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIG5ldyBjaGlsZCBhdCB0aGUgZW5kIG9mIHRoZSBjaGlsZHJlbgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21ub2RlLmFwcGVuZGNoaWxkLnBocAogICAgICogQHBhcmFtIERPTU5vZGUgJG5vZGUgPHA+CiAgICAgKiBUaGUgYXBwZW5kZWQgY2hpbGQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIERPTU5vZGUgVGhlIG5vZGUgYWRkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmRDaGlsZChET01Ob2RlICRub2RlKSB7fQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIG5vZGUgaGFzIGNoaWxkcmVuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbW5vZGUuaGFzY2hpbGRub2Rlcy5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGhhc0NoaWxkTm9kZXMoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQ2xvbmVzIGEgbm9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21ub2RlLmNsb25lbm9kZS5waHAKICAgICAqIEBwYXJhbSBib29sICRkZWVwIDxwPgogICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gY29weSBhbGwgZGVzY2VuZGFudCBub2Rlcy4gVGhpcyBwYXJhbWV0ZXIgaXMKICAgICAqIGRlZmF1bHRlZCB0byBmYWxzZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RhdGljIFRoZSBjbG9uZWQgbm9kZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsb25lTm9kZSgKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzUuNicpXSAkZGVlcCwKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjAnKV0gI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRkZWVwID0gZmFsc2UKICAgICkge30KCiAgICAvKioKICAgICAqIE5vcm1hbGl6ZXMgdGhlIG5vZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tbm9kZS5ub3JtYWxpemUucGhwCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgZm9yIHNwZWNpZmllZCB2ZXJzaW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbW5vZGUuaXNzdXBwb3J0ZWQucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmZWF0dXJlIDxwPgogICAgICogVGhlIGZlYXR1cmUgdG8gdGVzdC4gU2VlIHRoZSBleGFtcGxlIG9mCiAgICAgKiBET01JbXBsZW1lbnRhdGlvbjo6aGFzRmVhdHVyZSBmb3IgYQogICAgICogbGlzdCBvZiBmZWF0dXJlcy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24gPHA+CiAgICAgKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGZlYXR1cmUgdG8gdGVzdC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGlzU3VwcG9ydGVkKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRmZWF0dXJlLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR2ZXJzaW9uCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgbm9kZSBoYXMgYXR0cmlidXRlcwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21ub2RlLmhhc2F0dHJpYnV0ZXMucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNBdHRyaWJ1dGVzKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguNCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcGFyZURvY3VtZW50UG9zaXRpb24oRE9NTm9kZSAkb3RoZXIpIHt9CgogICAgLyoqCiAgICAgKiBJbmRpY2F0ZXMgaWYgdHdvIG5vZGVzIGFyZSB0aGUgc2FtZSBub2RlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbW5vZGUuaXNzYW1lbm9kZS5waHAKICAgICAqIEBwYXJhbSBET01Ob2RlICRvdGhlck5vZGUgPHA+CiAgICAgKiBUaGUgY29tcGFyZWQgbm9kZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGlzU2FtZU5vZGUoRE9NTm9kZSAkb3RoZXJOb2RlKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogR2V0cyB0aGUgbmFtZXNwYWNlIHByZWZpeCBvZiB0aGUgbm9kZSBiYXNlZCBvbiB0aGUgbmFtZXNwYWNlIFVSSQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21ub2RlLmxvb2t1cHByZWZpeC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWVzcGFjZSA8cD4KICAgICAqIFRoZSBuYW1lc3BhY2UgVVJJLgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHByZWZpeCBvZiB0aGUgbmFtZXNwYWNlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9va3VwUHJlZml4KCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lc3BhY2UpOiA/c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VVUkkgaXMgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9yIG5vdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21ub2RlLmlzZGVmYXVsdG5hbWVzcGFjZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWVzcGFjZSA8cD4KICAgICAqIFRoZSBuYW1lc3BhY2UgVVJJIHRvIGxvb2sgZm9yLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIFJldHVybiB0cnVlIGlmIG5hbWVzcGFjZVVSSSBpcyB0aGUgZGVmYXVsdAogICAgICogbmFtZXNwYWNlLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0RlZmF1bHROYW1lc3BhY2UoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWVzcGFjZSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIG5vZGUgYmFzZWQgb24gdGhlIHByZWZpeAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21ub2RlLmxvb2t1cG5hbWVzcGFjZXVyaS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJlZml4IDxwPgogICAgICogVGhlIHByZWZpeCBvZiB0aGUgbmFtZXNwYWNlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgbmFtZXNwYWNlIFVSSSBvZiB0aGUgbm9kZS4KICAgICAqLwogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9va3VwTmFtZXNwYWNlVVJJKD9zdHJpbmcgJHByZWZpeCk6ID9zdHJpbmcge30KCiAgICAvKioKICAgICAqIEdldHMgdGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIG5vZGUgYmFzZWQgb24gdGhlIHByZWZpeAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21ub2RlLmxvb2t1cG5hbWVzcGFjZXVyaS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcHJlZml4IDxwPgogICAgICogVGhlIHByZWZpeCBvZiB0aGUgbmFtZXNwYWNlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgbmFtZXNwYWNlIFVSSSBvZiB0aGUgbm9kZS4KICAgICAqLwogICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBsb29rdXBOYW1lc3BhY2VVcmkoJHByZWZpeCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBET01Ob2RlfG51bGwgJGFyZwogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljIGZ1bmN0aW9uIGlzRXF1YWxOb2RlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ0RPTU5vZGV8bnVsbCddLCBkZWZhdWx0OiAnRE9NTm9kZScpXSAkb3RoZXJOb2RlKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGZWF0dXJlKCRmZWF0dXJlLCAkdmVyc2lvbikge30KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXNlckRhdGEoJGtleSwgJGRhdGEsICRoYW5kbGVyKSB7fQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VyRGF0YSgka2V5KSB7fQoKICAgIC8qKgogICAgICogR2V0cyBhbiBYUGF0aCBsb2NhdGlvbiBwYXRoIGZvciB0aGUgbm9kZQogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCB0aGUgWFBhdGgsIG9yIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4KICAgICAqIEBsaW5rIGh0dHBzOi8vc2VjdXJlLnBocC5uZXQvbWFudWFsL2VuL2RvbW5vZGUuZ2V0bm9kZXBhdGgucGhwCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb2RlUGF0aCgpOiA/c3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBHZXQgbGluZSBudW1iZXIgZm9yIGEgbm9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21ub2RlLmdldGxpbmVuby5waHAKICAgICAqIEByZXR1cm4gaW50IEFsd2F5cyByZXR1cm5zIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgbm9kZSB3YXMgZGVmaW5lZCBpbi4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldExpbmVObygpOiBpbnQge30KCiAgICAvKioKICAgICAqIENhbm9uaWNhbGl6ZSBub2RlcyB0byBhIHN0cmluZwogICAgICogQHBhcmFtIGJvb2wgJGV4Y2x1c2l2ZSBbb3B0aW9uYWxdIEVuYWJsZSBleGNsdXNpdmUgcGFyc2luZyBvZiBvbmx5IHRoZSBub2RlcyBtYXRjaGVkIGJ5IHRoZSBwcm92aWRlZCB4cGF0aCBvciBuYW1lc3BhY2UgcHJlZml4ZXMuCiAgICAgKiBAcGFyYW0gYm9vbCAkd2l0aENvbW1lbnRzIFtvcHRpb25hbF0gUmV0YWluIGNvbW1lbnRzIGluIG91dHB1dC4KICAgICAqIEBwYXJhbSBudWxsfGFycmF5ICR4cGF0aCBbb3B0aW9uYWxdIEFuIGFycmF5IG9mIHhwYXRocyB0byBmaWx0ZXIgdGhlIG5vZGVzIGJ5LgogICAgICogQHBhcmFtIG51bGx8YXJyYXkgJG5zUHJlZml4ZXMgW29wdGlvbmFsXSBBbiBhcnJheSBvZiBuYW1lc3BhY2UgcHJlZml4ZXMgdG8gZmlsdGVyIHRoZSBub2RlcyBieS4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIENhbm9uaWNhbGl6ZWQgbm9kZXMgYXMgYSBzdHJpbmcgb3IgRkFMU0Ugb24gZmFpbHVyZQogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gQzE0TigKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJGV4Y2x1c2l2ZSA9IGZhbHNlLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXSAkd2l0aENvbW1lbnRzID0gZmFsc2UsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYXJyYXl8bnVsbCddLCBkZWZhdWx0OiAnYXJyYXknKV0gJHhwYXRoID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdhcnJheXxudWxsJ10sIGRlZmF1bHQ6ICdhcnJheScpXSAkbnNQcmVmaXhlcyA9IG51bGwKICAgICk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogQ2Fub25pY2FsaXplIG5vZGVzIHRvIGEgZmlsZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2RvbW5vZGUuYzE0bmZpbGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVyaSBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBGQUxTRSBvbiBmYWlsdXJlCiAgICAgKiBAcGFyYW0gYm9vbCAkZXhjbHVzaXZlIFtvcHRpb25hbF0gRW5hYmxlIGV4Y2x1c2l2ZSBwYXJzaW5nIG9mIG9ubHkgdGhlIG5vZGVzIG1hdGNoZWQgYnkgdGhlIHByb3ZpZGVkIHhwYXRoIG9yIG5hbWVzcGFjZSBwcmVmaXhlcy4KICAgICAqIEBwYXJhbSBib29sICR3aXRoQ29tbWVudHMgW29wdGlvbmFsXSAgUmV0YWluIGNvbW1lbnRzIGluIG91dHB1dC4KICAgICAqIEBwYXJhbSBudWxsfGFycmF5ICR4cGF0aCBbb3B0aW9uYWxdIEFuIGFycmF5IG9mIHhwYXRocyB0byBmaWx0ZXIgdGhlIG5vZGVzIGJ5LgogICAgICogQHBhcmFtIG51bGx8YXJyYXkgJG5zUHJlZml4ZXMgW29wdGlvbmFsXSBBbiBhcnJheSBvZiBuYW1lc3BhY2UgcHJlZml4ZXMgdG8gZmlsdGVyIHRoZSBub2RlcyBieS4KICAgICAqIEByZXR1cm4gaW50fGZhbHNlIE51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIEZBTFNFIG9uIGZhaWx1cmUKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIEMxNE5GaWxlKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR1cmksCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRleGNsdXNpdmUgPSBmYWxzZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJHdpdGhDb21tZW50cyA9IGZhbHNlLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2FycmF5fG51bGwnXSwgZGVmYXVsdDogJ2FycmF5JyldICR4cGF0aCA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYXJyYXl8bnVsbCddLCBkZWZhdWx0OiAnYXJyYXknKV0gJG5zUHJlZml4ZXMgPSBudWxsCiAgICApOiBpbnR8ZmFsc2Uge30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnRhaW5zKERPTU5vZGV8RE9NTmFtZVNwYWNlTm9kZXxudWxsICRvdGhlcik6IGJvb2wge30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJvb3ROb2RlKD9hcnJheSAkb3B0aW9ucyA9IG51bGwpOiBET01Ob2RlIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC4xCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NsZWVwKCk6IGFycmF5IHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC4xCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3dha2V1cCgpOiB2b2lkIHt9Cn0KCi8qKgogKiBET00gb3BlcmF0aW9ucyByYWlzZSBleGNlcHRpb25zIHVuZGVyIHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlcywgaS5lLiwKICogd2hlbiBhbiBvcGVyYXRpb24gaXMgaW1wb3NzaWJsZSB0byBwZXJmb3JtIGZvciBsb2dpY2FsIHJlYXNvbnMuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZXhjZXB0aW9uLnBocAogKi8KZmluYWwgY2xhc3MgRE9NRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uCnsKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21leGNlcHRpb24ucGhwI2RvbWV4Y2VwdGlvbi5wcm9wcy5jb2RlCiAgICAgKiBAdmFyIGludCBBbiBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgZXJyb3IgZ2VuZXJhdGVkCiAgICAgKi8KICAgIHB1YmxpYyAkY29kZTsKfQoKY2xhc3MgRE9NU3RyaW5nTGlzdAp7CiAgICAvKioKICAgICAqIEBwYXJhbSAkaW5kZXgKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGl0ZW0oJGluZGV4KSB7fQp9CgovKioKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9yZWYuZG9tLnBocAogKiBAcmVtb3ZlZCA4LjAKICovCmNsYXNzIERPTU5hbWVMaXN0CnsKICAgIC8qKgogICAgICogQHBhcmFtICRpbmRleAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgkaW5kZXgpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJGluZGV4CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lc3BhY2VVUkkoJGluZGV4KSB7fQp9CgovKioKICogQHJlbW92ZWQgOC4wCiAqLwpjbGFzcyBET01JbXBsZW1lbnRhdGlvbkxpc3QKewogICAgLyoqCiAgICAgKiBAcGFyYW0gJGluZGV4CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpdGVtKCRpbmRleCkge30KfQoKLyoqCiAqIEByZW1vdmVkIDguMAogKi8KY2xhc3MgRE9NSW1wbGVtZW50YXRpb25Tb3VyY2UKewogICAgLyoqCiAgICAgKiBAcGFyYW0gJGZlYXR1cmVzCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREb21pbXBsZW1lbnRhdGlvbigkZmVhdHVyZXMpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJGZlYXR1cmVzCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREb21pbXBsZW1lbnRhdGlvbnMoJGZlYXR1cmVzKSB7fQp9CgovKioKICogVGhlIERPTUltcGxlbWVudGF0aW9uIGludGVyZmFjZSBwcm92aWRlcyBhIG51bWJlcgogKiBvZiBtZXRob2RzIGZvciBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW5kZXBlbmRlbnQgb2YgYW55CiAqIHBhcnRpY3VsYXIgaW5zdGFuY2Ugb2YgdGhlIGRvY3VtZW50IG9iamVjdCBtb2RlbC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21pbXBsZW1lbnRhdGlvbi5waHAKICovCmNsYXNzIERPTUltcGxlbWVudGF0aW9uCnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmVhdHVyZQogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmVhdHVyZSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZmVhdHVyZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkdmVyc2lvbgogICAgKTogbmV2ZXIge30KCiAgICAvKioKICAgICAqIFRlc3QgaWYgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRzIGEgc3BlY2lmaWMgZmVhdHVyZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21pbXBsZW1lbnRhdGlvbi5oYXNmZWF0dXJlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZmVhdHVyZSA8cD4KICAgICAqIFRoZSBmZWF0dXJlIHRvIHRlc3QuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2ZXJzaW9uIDxwPgogICAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBmZWF0dXJlIHRvIHRlc3QuIEluCiAgICAgKiBsZXZlbCAyLCB0aGlzIGNhbiBiZSBlaXRoZXIgMi4wIG9yIDEuMC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc0ZlYXR1cmUoJGZlYXR1cmUsICR2ZXJzaW9uKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhbiBlbXB0eSBET01Eb2N1bWVudFR5cGUgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWltcGxlbWVudGF0aW9uLmNyZWF0ZWRvY3VtZW50dHlwZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1YWxpZmllZE5hbWUgPHA+CiAgICAgKiBUaGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGRvY3VtZW50IHR5cGUgdG8gY3JlYXRlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkcHVibGljSWQgPHA+CiAgICAgKiBUaGUgZXh0ZXJuYWwgc3Vic2V0IHB1YmxpYyBpZGVudGlmaWVyLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkc3lzdGVtSWQgPHA+CiAgICAgKiBUaGUgZXh0ZXJuYWwgc3Vic2V0IHN5c3RlbSBpZGVudGlmaWVyLgogICAgICogPC9wPgogICAgICogQHJldHVybiBET01Eb2N1bWVudFR5cGV8ZmFsc2UgQSBuZXcgRE9NRG9jdW1lbnRUeXBlIG5vZGUgd2l0aCBpdHMKICAgICAqIG93bmVyRG9jdW1lbnQgc2V0IHRvIG51bGwuCiAgICAgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbiBJZiB0aGVyZSBpcyBhbiBlcnJvciB3aXRoIHRoZSBuYW1lc3BhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZURvY3VtZW50VHlwZSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcXVhbGlmaWVkTmFtZSwKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSAkcHVibGljSWQsCiAgICAgICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIHN0cmluZyAkcHVibGljSWQgPSAnJywKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSAkc3lzdGVtSWQsCiAgICAgICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIHN0cmluZyAkc3lzdGVtSWQgPSAnJwogICAgKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIERPTURvY3VtZW50IG9iamVjdCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgd2l0aCBpdHMgZG9jdW1lbnQgZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21pbXBsZW1lbnRhdGlvbi5jcmVhdGVkb2N1bWVudC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbmFtZXNwYWNlIDxwPgogICAgICogVGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIGRvY3VtZW50IGVsZW1lbnQgdG8gY3JlYXRlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkcXVhbGlmaWVkTmFtZSA8cD4KICAgICAqIFRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZG9jdW1lbnQgZWxlbWVudCB0byBjcmVhdGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gRE9NRG9jdW1lbnRUeXBlfG51bGwgJGRvY3R5cGUgPHA+CiAgICAgKiBUaGUgdHlwZSBvZiBkb2N1bWVudCB0byBjcmVhdGUgb3IgbnVsbC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NRG9jdW1lbnR8ZmFsc2UgQSBuZXcgRE9NRG9jdW1lbnQgb2JqZWN0LiBJZgogICAgICogbmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCBhbmQgZG9jdHlwZSBhcmUgbnVsbCwgdGhlCiAgICAgKiByZXR1cm5lZCBET01Eb2N1bWVudCBpcyBlbXB0eSB3aXRoIG5vIGRvY3VtZW50IGVsZW1lbnQuCiAgICAgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbiBJZiAkZG9jdHlwZSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQKICAgICAqIHdpdGggYWRpZmZlcmVudCBkb2N1bWVudCBvciB3YXMgY3JlYXRlZCBmcm9tIGEgZGlmZmVyZW50CiAgICAgKiBpbXBsZW1lbnRhdGlvbi4gSWYgdGhlcmUgaXMgYW4gZXJyb3Igd2l0aCB0aGUgbmFtZXNwYWNlLAogICAgICogYXMgZGV0ZXJtaW5lZCBieSAkbmFtZXNwYWNlIGFuZCAkcXVhbGlmaWVkTmFtZS4KICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC40JyA9PiAnRE9NRG9jdW1lbnQnXSwgZGVmYXVsdDogJ0RPTURvY3VtZW50fGZhbHNlJyldCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRG9jdW1lbnQoCiAgICAgICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJG5hbWVzcGFjZSwKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gP3N0cmluZyAkbmFtZXNwYWNlID0gbnVsbCwKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuNCcpXSAkcXVhbGlmaWVkTmFtZSwKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc4LjAnKV0gc3RyaW5nICRxdWFsaWZpZWROYW1lID0gJycsCiAgICAgICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjMnKV0gRE9NRG9jdW1lbnRUeXBlICRkb2N0eXBlLAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuNCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdET01Eb2N1bWVudFR5cGV8bnVsbCddLCBkZWZhdWx0OiAnRE9NRG9jdW1lbnRUeXBlJyldICRkb2N0eXBlID0gbnVsbAogICAgKSB7fQp9CgpjbGFzcyBET01OYW1lU3BhY2VOb2RlCnsKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0RPTU5vZGV8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHBhcmVudE5vZGU7CgogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnRE9NRG9jdW1lbnR8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJG93bmVyRG9jdW1lbnQ7CgogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRuYW1lc3BhY2VVUkk7CgogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRsb2NhbE5hbWU7CgogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkcHJlZml4OwoKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJG5vZGVUeXBlOwoKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkbm9kZVZhbHVlOwoKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJG5vZGVOYW1lOwogICAgcHVibGljID9ET01FbGVtZW50ICRwYXJlbnRFbGVtZW50OwogICAgcHVibGljIGJvb2wgJGlzQ29ubmVjdGVkOwoKICAgIC8qKgogICAgICogQHNpbmNlIDguMQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zbGVlcCgpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogQHNpbmNlIDguMQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX193YWtldXAoKTogdm9pZCB7fQp9CgovKioKICogVGhlIERPTURvY3VtZW50RnJhZ21lbnQgY2xhc3MKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21kb2N1bWVudGZyYWdtZW50LnBocAogKi8KY2xhc3MgRE9NRG9jdW1lbnRGcmFnbWVudCBleHRlbmRzIERPTU5vZGUgaW1wbGVtZW50cyBET01QYXJlbnROb2RlCnsKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGNoaWxkRWxlbWVudENvdW50OwoKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0RPTUVsZW1lbnR8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGxhc3RFbGVtZW50Q2hpbGQ7CgogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnRE9NRWxlbWVudHxudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkZmlyc3RFbGVtZW50Q2hpbGQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEFwcGVuZCByYXcgWE1MIGRhdGEKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZG9jdW1lbnRmcmFnbWVudC5hcHBlbmR4bWwucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPgogICAgICogWE1MIHRvIGFwcGVuZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZFhNTCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZGF0YSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZCguLi4kbm9kZXMpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVwZW5kKC4uLiRub2Rlcyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjMKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcGxhY2VDaGlsZHJlbiguLi4kbm9kZXMpOiB2b2lkIHt9Cn0KCi8qKgogKiBUaGUgRE9NRG9jdW1lbnQgY2xhc3MgcmVwcmVzZW50cyBhbiBlbnRpcmUgSFRNTCBvciBYTUwKICogZG9jdW1lbnQ7IHNlcnZlcyBhcyB0aGUgcm9vdCBvZiB0aGUgZG9jdW1lbnQgdHJlZS4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21kb2N1bWVudC5waHAKICovCmNsYXNzIERPTURvY3VtZW50IGV4dGVuZHMgRE9NTm9kZSBpbXBsZW1lbnRzIERPTVBhcmVudE5vZGUKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50LnBocCNkb21kb2N1bWVudC5wcm9wcy5hY3R1YWxlbmNvZGluZwogICAgICovCiAgICAjW0RlcHJlY2F0ZWQoIkFjdHVhbCBlbmNvZGluZyBvZiB0aGUgZG9jdW1lbnQsIGlzIGEgcmVhZG9ubHkgZXF1aXZhbGVudCB0byBlbmNvZGluZy4iKV0KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkYWN0dWFsRW5jb2Rpbmc7CgogICAgLyoqCiAgICAgKiBAdmFyIERPTUNvbmZpZ3VyYXRpb24KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZG9jdW1lbnQucGhwI2RvbWRvY3VtZW50LnByb3BzLmNvbmZpZwogICAgICogQHNlZSBET01Eb2N1bWVudDo6bm9ybWFsaXplRG9jdW1lbnQoKQogICAgICovCiAgICAjW0RlcHJlY2F0ZWQoIkNvbmZpZ3VyYXRpb24gdXNlZCB3aGVuIERPTURvY3VtZW50Ojpub3JtYWxpemVEb2N1bWVudCgpIGlzIGludm9rZWQuIildCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdtaXhlZCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGNvbmZpZzsKCiAgICAvKioKICAgICAqIEB2YXIgRE9NRG9jdW1lbnRUeXBlCiAgICAgKiBUaGUgRG9jdW1lbnQgVHlwZSBEZWNsYXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBkb2N1bWVudC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZG9jdW1lbnQucGhwI2RvbWRvY3VtZW50LnByb3BzLmRvY3R5cGUKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnRE9NRG9jdW1lbnRUeXBlfG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRkb2N0eXBlOwoKICAgIC8qKgogICAgICogQHZhciBET01FbGVtZW50CiAgICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgYXR0cmlidXRlIHRoYXQgYWxsb3dzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGNoaWxkIG5vZGUKICAgICAqIHRoYXQgaXMgdGhlIGRvY3VtZW50IGVsZW1lbnQgb2YgdGhlIGRvY3VtZW50LgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21kb2N1bWVudC5waHAjZG9tZG9jdW1lbnQucHJvcHMuZG9jdW1lbnRlbGVtZW50CiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0RPTUVsZW1lbnR8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGRvY3VtZW50RWxlbWVudDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgZG9jdW1lbnQgb3IgTlVMTCBpZiB1bmRlZmluZWQuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50LnBocCNkb21kb2N1bWVudC5wcm9wcy5kb2N1bWVudHVyaQogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGRvY3VtZW50VVJJOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICogRW5jb2Rpbmcgb2YgdGhlIGRvY3VtZW50LCBhcyBzcGVjaWZpZWQgYnkgdGhlIFhNTCBkZWNsYXJhdGlvbi4gVGhpcyBhdHRyaWJ1dGUgaXMgbm90IHByZXNlbnQKICAgICAqIGluIHRoZSBmaW5hbCBET00gTGV2ZWwgMyBzcGVjaWZpY2F0aW9uLCBidXQgaXMgdGhlIG9ubHkgd2F5IG9mIG1hbmlwdWxhdGluZyBYTUwgZG9jdW1lbnQKICAgICAqIGVuY29kaW5nIGluIHRoaXMgaW1wbGVtZW50YXRpb24uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50LnBocCNkb21kb2N1bWVudC5wcm9wcy5lbmNvZGluZwogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGVuY29kaW5nOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKiBOaWNlbHkgZm9ybWF0cyBvdXRwdXQgd2l0aCBpbmRlbnRhdGlvbiBhbmQgZXh0cmEgc3BhY2UuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50LnBocCNkb21kb2N1bWVudC5wcm9wcy5mb3JtYXRvdXRwdXQKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGZvcm1hdE91dHB1dDsKCiAgICAvKioKICAgICAqIEB2YXIgRE9NSW1wbGVtZW50YXRpb24KICAgICAqIFRoZSA8Y2xhc3NuYW1lPkRPTUltcGxlbWVudGF0aW9uPC9jbGFzc25hbWU+IG9iamVjdCB0aGF0IGhhbmRsZXMgdGhpcyBkb2N1bWVudC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZG9jdW1lbnQucGhwI2RvbWRvY3VtZW50LnByb3BzLmltcGxlbWVudGF0aW9uCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0RPTUltcGxlbWVudGF0aW9uJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkaW1wbGVtZW50YXRpb247CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqIERvIG5vdCByZW1vdmUgcmVkdW5kYW50IHdoaXRlIHNwYWNlLiBEZWZhdWx0IHRvIFRSVUUuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50LnBocCNkb21kb2N1bWVudC5wcm9wcy5wcmVzZXJ2ZXdoaXRlc3BhY2UKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHByZXNlcnZlV2hpdGVTcGFjZSA9IHRydWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqIFByb3ByaWV0YXJ5LiBFbmFibGVzIHJlY292ZXJ5IG1vZGUsIGkuZS4gdHJ5aW5nIHRvIHBhcnNlIG5vbi13ZWxsIGZvcm1lZCBkb2N1bWVudHMuCiAgICAgKiBUaGlzIGF0dHJpYnV0ZSBpcyBub3QgcGFydCBvZiB0aGUgRE9NIHNwZWNpZmljYXRpb24gYW5kIGlzIHNwZWNpZmljIHRvIGxpYnhtbC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZG9jdW1lbnQucGhwI2RvbWRvY3VtZW50LnByb3BzLnJlY292ZXIKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHJlY292ZXI7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqIFNldCBpdCB0byBUUlVFIHRvIGxvYWQgZXh0ZXJuYWwgZW50aXRpZXMgZnJvbSBhIGRvY3R5cGUgZGVjbGFyYXRpb24uIFRoaXMgaXMgdXNlZnVsIGZvcgogICAgICogaW5jbHVkaW5nIGNoYXJhY3RlciBlbnRpdGllcyBpbiB5b3VyIFhNTCBkb2N1bWVudC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZG9jdW1lbnQucGhwI2RvbWRvY3VtZW50LnByb3BzLnJlc29sdmVleHRlcm5hbHMKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHJlc29sdmVFeHRlcm5hbHM7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZG9jdW1lbnQucGhwI2RvbWRvY3VtZW50LnByb3BzLnN0YW5kYWxvbmUKICAgICAqLwogICAgI1tEZXByZWNhdGVkKCJXaGV0aGVyIG9yIG5vdCB0aGUgZG9jdW1lbnQgaXMgc3RhbmRhbG9uZSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBYTUwgZGVjbGFyYXRpb24sIGNvcnJlc3BvbmRzIHRvIHhtbFN0YW5kYWxvbmUuIildCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkc3RhbmRhbG9uZTsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICogVGhyb3dzIDxjbGFzc25hbWU+RE9NRXhjZXB0aW9uPC9jbGFzc25hbWU+IG9uIGVycm9ycy4gRGVmYXVsdCB0byBUUlVFLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21kb2N1bWVudC5waHAjZG9tZG9jdW1lbnQucHJvcHMuc3RyaWN0ZXJyb3JjaGVja2luZwogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkc3RyaWN0RXJyb3JDaGVja2luZyA9IHRydWU7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqIFByb3ByaWV0YXJ5LiBXaGV0aGVyIG9yIG5vdCB0byBzdWJzdGl0dXRlIGVudGl0aWVzLiBUaGlzIGF0dHJpYnV0ZSBpcyBub3QgcGFydCBvZiB0aGUgRE9NCiAgICAgKiBzcGVjaWZpY2F0aW9uIGFuZCBpcyBzcGVjaWZpYyB0byBsaWJ4bWwuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50LnBocCNkb21kb2N1bWVudC5wcm9wcy5zdWJzdGl0dXRlZW50aXRpZXMKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHN1YnN0aXR1dGVFbnRpdGllczsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICogTG9hZHMgYW5kIHZhbGlkYXRlcyBhZ2FpbnN0IHRoZSBEVEQuIERlZmF1bHQgdG8gRkFMU0UuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50LnBocCNkb21kb2N1bWVudC5wcm9wcy52YWxpZGF0ZW9ucGFyc2UKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHZhbGlkYXRlT25QYXJzZSA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZG9jdW1lbnQucGhwI2RvbWRvY3VtZW50LnByb3BzLnZlcnNpb24KICAgICAqLwogICAgI1tEZXByZWNhdGVkKCdWZXJzaW9uIG9mIFhNTCwgY29ycmVzcG9uZHMgdG8geG1sVmVyc2lvbicpXQogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICR2ZXJzaW9uOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICogQW4gYXR0cmlidXRlIHNwZWNpZnlpbmcsIGFzIHBhcnQgb2YgdGhlIFhNTCBkZWNsYXJhdGlvbiwgdGhlIGVuY29kaW5nIG9mIHRoaXMgZG9jdW1lbnQuIFRoaXMgaXMgTlVMTCB3aGVuCiAgICAgKiB1bnNwZWNpZmllZCBvciB3aGVuIGl0IGlzIG5vdCBrbm93biwgc3VjaCBhcyB3aGVuIHRoZSBEb2N1bWVudCB3YXMgY3JlYXRlZCBpbiBtZW1vcnkuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50LnBocCNkb21kb2N1bWVudC5wcm9wcy54bWxlbmNvZGluZwogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHhtbEVuY29kaW5nOwoKICAgIC8qKgogICAgICogQHZhciBib29sCiAgICAgKiBBbiBhdHRyaWJ1dGUgc3BlY2lmeWluZywgYXMgcGFydCBvZiB0aGUgWE1MIGRlY2xhcmF0aW9uLCB3aGV0aGVyIHRoaXMgZG9jdW1lbnQgaXMgc3RhbmRhbG9uZS4KICAgICAqIFRoaXMgaXMgRkFMU0Ugd2hlbiB1bnNwZWNpZmllZC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZG9jdW1lbnQucGhwI2RvbWRvY3VtZW50LnByb3BzLnhtbHN0YW5kYWxvbmUKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHhtbFN0YW5kYWxvbmU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKiBBbiBhdHRyaWJ1dGUgc3BlY2lmeWluZywgYXMgcGFydCBvZiB0aGUgWE1MIGRlY2xhcmF0aW9uLCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBkb2N1bWVudC4gSWYgdGhlcmUgaXMgbm8KICAgICAqIGRlY2xhcmF0aW9uIGFuZCBpZiB0aGlzIGRvY3VtZW50IHN1cHBvcnRzIHRoZSAiWE1MIiBmZWF0dXJlLCB0aGUgdmFsdWUgaXMgIjEuMCIuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50LnBocCNkb21kb2N1bWVudC5wcm9wcy54bWx2ZXJzaW9uCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkeG1sVmVyc2lvbjsKCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRjaGlsZEVsZW1lbnRDb3VudDsKCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdET01FbGVtZW50fG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRsYXN0RWxlbWVudENoaWxkOwoKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0RPTUVsZW1lbnR8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGZpcnN0RWxlbWVudENoaWxkOwoKICAgIC8qKgogICAgICogQ3JlYXRlIG5ldyBlbGVtZW50IG5vZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZG9jdW1lbnQuY3JlYXRlZWxlbWVudC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsTmFtZSA8cD4KICAgICAqIFRoZSB0YWcgbmFtZSBvZiB0aGUgZWxlbWVudC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFtvcHRpb25hbF0gPHA+CiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQuIEJ5IGRlZmF1bHQsIGFuIGVtcHR5IGVsZW1lbnQgd2lsbCBiZSBjcmVhdGVkLgogICAgICogWW91IGNhbiBhbHNvIHNldCB0aGUgdmFsdWUgbGF0ZXIgd2l0aCBET01FbGVtZW50LT5ub2RlVmFsdWUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIERPTUVsZW1lbnR8ZmFsc2UgQSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgRE9NRWxlbWVudCBvciBmYWxzZQogICAgICogaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICAgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbiBJZiBpbnZhbGlkICRsb2NhbE5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsTmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUgPSAnJwogICAgKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIG5ldyBkb2N1bWVudCBmcmFnbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5jcmVhdGVkb2N1bWVudGZyYWdtZW50LnBocAogICAgICogQHJldHVybiBET01Eb2N1bWVudEZyYWdtZW50fGZhbHNlIFRoZSBuZXcgRE9NRG9jdW1lbnRGcmFnbWVudCBvciBmYWxzZSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTogRE9NRG9jdW1lbnRGcmFnbWVudCB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIG5ldyB0ZXh0IG5vZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZG9jdW1lbnQuY3JlYXRldGV4dG5vZGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPgogICAgICogVGhlIGNvbnRlbnQgb2YgdGhlIHRleHQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIERPTVRleHR8ZmFsc2UgVGhlIG5ldyBET01UZXh0IG9yIGZhbHNlIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGRhdGEpOiBET01UZXh0IHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgbmV3IGNvbW1lbnQgbm9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5jcmVhdGVjb21tZW50LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICAgICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21tZW50LgogICAgICogPC9wPgogICAgICogQHJldHVybiBET01Db21tZW50fGZhbHNlIFRoZSBuZXcgRE9NQ29tbWVudCBvciBmYWxzZSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGRhdGEpOiBET01Db21tZW50IHt9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgbmV3IGNkYXRhIG5vZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZG9jdW1lbnQuY3JlYXRlY2RhdGFzZWN0aW9uLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICAgICAqIFRoZSBjb250ZW50IG9mIHRoZSBjZGF0YS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NQ0RBVEFTZWN0aW9ufGZhbHNlIFRoZSBuZXcgRE9NQ0RBVEFTZWN0aW9uIG9yIGZhbHNlIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlQ0RBVEFTZWN0aW9uKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRkYXRhKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBuZXcgUEkgbm9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5jcmVhdGVwcm9jZXNzaW5naW5zdHJ1Y3Rpb24ucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0YXJnZXQgPHA+CiAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSA8cD4KICAgICAqIFRoZSBjb250ZW50IG9mIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgogICAgICogPC9wPgogICAgICogQHJldHVybiBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb258ZmFsc2UgVGhlIG5ldyBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gb3IgZmFsc2UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHRhcmdldCwKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc1LjMnLCB0bzogJzcuMycpXSAkZGF0YSwKICAgICAgICAjW1BocFN0b3JtU3R1YnNFbGVtZW50QXZhaWxhYmxlKGZyb206ICc3LjQnKV0gI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGRhdGEgPSAnJwogICAgKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIG5ldyBhdHRyaWJ1dGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZG9jdW1lbnQuY3JlYXRlYXR0cmlidXRlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxOYW1lIDxwPgogICAgICogVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NQXR0cnxmYWxzZSBUaGUgbmV3IERPTUF0dHIgb3IgZmFsc2UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICAgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbiBJZiBpbnZhbGlkICRsb2NhbE5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUF0dHJpYnV0ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbG9jYWxOYW1lKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIG5ldyBlbnRpdHkgcmVmZXJlbmNlIG5vZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZG9jdW1lbnQuY3JlYXRlZW50aXR5cmVmZXJlbmNlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD4KICAgICAqIFRoZSBjb250ZW50IG9mIHRoZSBlbnRpdHkgcmVmZXJlbmNlLCBlLmcuIHRoZSBlbnRpdHkgcmVmZXJlbmNlIG1pbnVzCiAgICAgKiB0aGUgbGVhZGluZyAmYW1wOyBhbmQgdGhlIHRyYWlsaW5nCiAgICAgKiA7IGNoYXJhY3RlcnMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIERPTUVudGl0eVJlZmVyZW5jZXxmYWxzZSBUaGUgbmV3IERPTUVudGl0eVJlZmVyZW5jZSBvciBmYWxzZSBpZiBhbiBlcnJvcgogICAgICogb2NjdXJyZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVFbnRpdHlSZWZlcmVuY2UoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBTZWFyY2hlcyBmb3IgYWxsIGVsZW1lbnRzIHdpdGggZ2l2ZW4gdGFnIG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZG9jdW1lbnQuZ2V0ZWxlbWVudHNieXRhZ25hbWUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWFsaWZpZWROYW1lIDxwPgogICAgICogVGhlIG5hbWUgb2YgdGhlIHRhZyB0byBtYXRjaCBvbi4gVGhlIHNwZWNpYWwgdmFsdWUgKgogICAgICogbWF0Y2hlcyBhbGwgdGFncy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NTm9kZUxpc3QgQSBuZXcgRE9NTm9kZUxpc3Qgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBtYXRjaGVkCiAgICAgKiBlbGVtZW50cy4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRxdWFsaWZpZWROYW1lKTogRE9NTm9kZUxpc3Qge30KCiAgICAvKioKICAgICAqIEltcG9ydCBub2RlIGludG8gY3VycmVudCBkb2N1bWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5pbXBvcnRub2RlLnBocAogICAgICogQHBhcmFtIERPTU5vZGUgJG5vZGUgPHA+CiAgICAgKiBUaGUgbm9kZSB0byBpbXBvcnQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkZGVlcCA8cD4KICAgICAqIElmIHNldCB0byB0cnVlLCB0aGlzIG1ldGhvZCB3aWxsIHJlY3Vyc2l2ZWx5IGltcG9ydCB0aGUgc3VidHJlZSB1bmRlcgogICAgICogdGhlIGltcG9ydGVkTm9kZS4KICAgICAqIDwvcD4KICAgICAqIDxwPgogICAgICogVG8gY29weSB0aGUgbm9kZXMgYXR0cmlidXRlcyBkZWVwIG5lZWRzIHRvIGJlIHNldCB0byB0cnVlCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIERPTU5vZGV8ZmFsc2UgVGhlIGNvcGllZCBub2RlIG9yIGZhbHNlLCBpZiBpdCBjYW5ub3QgYmUgY29waWVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW1wb3J0Tm9kZSgKICAgICAgICBET01Ob2RlICRub2RlLAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy4zJyldICRkZWVwLAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuNCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJGRlZXAgPSBmYWxzZQogICAgKSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlIG5ldyBlbGVtZW50IG5vZGUgd2l0aCBhbiBhc3NvY2lhdGVkIG5hbWVzcGFjZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5jcmVhdGVlbGVtZW50bnMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG5hbWVzcGFjZSA8cD4KICAgICAqIFRoZSBVUkkgb2YgdGhlIG5hbWVzcGFjZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1YWxpZmllZE5hbWUgPHA+CiAgICAgKiBUaGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGVsZW1lbnQsIGFzIHByZWZpeDp0YWduYW1lLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudC4gQnkgZGVmYXVsdCwgYW4gZW1wdHkgZWxlbWVudCB3aWxsIGJlIGNyZWF0ZWQuCiAgICAgKiBZb3UgY2FuIGFsc28gc2V0IHRoZSB2YWx1ZSBsYXRlciB3aXRoIERPTUVsZW1lbnQtPm5vZGVWYWx1ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NRWxlbWVudHxmYWxzZSBUaGUgbmV3IERPTUVsZW1lbnQgb3IgZmFsc2UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICAgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbiBJZiBpbnZhbGlkICRuYW1lc3BhY2Ugb3IgJHF1YWxpZmllZE5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUygKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRuYW1lc3BhY2UsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHF1YWxpZmllZE5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHZhbHVlID0gJycKICAgICkge30KCiAgICAvKioKICAgICAqIENyZWF0ZSBuZXcgYXR0cmlidXRlIG5vZGUgd2l0aCBhbiBhc3NvY2lhdGVkIG5hbWVzcGFjZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5jcmVhdGVhdHRyaWJ1dGVucy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkbmFtZXNwYWNlIDxwPgogICAgICogVGhlIFVSSSBvZiB0aGUgbmFtZXNwYWNlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkcXVhbGlmaWVkTmFtZSA8cD4KICAgICAqIFRoZSB0YWcgbmFtZSBhbmQgcHJlZml4IG9mIHRoZSBhdHRyaWJ1dGUsIGFzIHByZWZpeDp0YWduYW1lLgogICAgICogPC9wPgogICAgICogQHJldHVybiBET01BdHRyfGZhbHNlIFRoZSBuZXcgRE9NQXR0ciBvciBmYWxzZSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uIElmIGludmFsaWQgJG5hbWVzcGFjZSBvciAkcXVhbGlmaWVkTmFtZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlQXR0cmlidXRlTlMoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbmFtZXNwYWNlLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRxdWFsaWZpZWROYW1lCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBTZWFyY2hlcyBmb3IgYWxsIGVsZW1lbnRzIHdpdGggZ2l2ZW4gdGFnIG5hbWUgaW4gc3BlY2lmaWVkIG5hbWVzcGFjZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5nZXRlbGVtZW50c2J5dGFnbmFtZW5zLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlIDxwPgogICAgICogVGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIGVsZW1lbnRzIHRvIG1hdGNoIG9uLgogICAgICogVGhlIHNwZWNpYWwgdmFsdWUgKiBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkbG9jYWxOYW1lIDxwPgogICAgICogVGhlIGxvY2FsIG5hbWUgb2YgdGhlIGVsZW1lbnRzIHRvIG1hdGNoIG9uLgogICAgICogVGhlIHNwZWNpYWwgdmFsdWUgKiBtYXRjaGVzIGFsbCBsb2NhbCBuYW1lcy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NTm9kZUxpc3QgQSBuZXcgRE9NTm9kZUxpc3Qgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBtYXRjaGVkCiAgICAgKiBlbGVtZW50cy4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbmFtZXNwYWNlLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbE5hbWUKICAgICk6IERPTU5vZGVMaXN0IHt9CgogICAgLyoqCiAgICAgKiBTZWFyY2hlcyBmb3IgYW4gZWxlbWVudCB3aXRoIGEgY2VydGFpbiBpZAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5nZXRlbGVtZW50YnlpZC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVsZW1lbnRJZCA8cD4KICAgICAqIFRoZSB1bmlxdWUgaWQgdmFsdWUgZm9yIGFuIGVsZW1lbnQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIERPTUVsZW1lbnR8bnVsbCBUaGUgRE9NRWxlbWVudCBvciBudWxsIGlmIHRoZSBlbGVtZW50IGlzCiAgICAgKiBub3QgZm91bmQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFbGVtZW50QnlJZCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZWxlbWVudElkKTogP0RPTUVsZW1lbnQge30KCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICdET01Ob2RlfGZhbHNlJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBhZG9wdE5vZGUoRE9NTm9kZSAkbm9kZSkge30KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFwcGVuZCguLi4kbm9kZXMpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVwZW5kKC4uLiRub2Rlcyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjMKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcGxhY2VDaGlsZHJlbiguLi4kbm9kZXMpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBOb3JtYWxpemVzIHRoZSBkb2N1bWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5ub3JtYWxpemVkb2N1bWVudC5waHAKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplRG9jdW1lbnQoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTU5vZGUgJG5vZGUKICAgICAqIEBwYXJhbSAkbmFtZXNwYWNlCiAgICAgKiBAcGFyYW0gJHF1YWxpZmllZE5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbmFtZU5vZGUoRE9NTm9kZSAkbm9kZSwgJG5hbWVzcGFjZSwgJHF1YWxpZmllZE5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBMb2FkIFhNTCBmcm9tIGEgZmlsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5sb2FkLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgPHA+CiAgICAgKiBUaGUgcGF0aCB0byB0aGUgWE1MIGRvY3VtZW50LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkb3B0aW9ucyBbb3B0aW9uYWxdIDxwPgogICAgICogQml0d2lzZSBPUgogICAgICogb2YgdGhlIGxpYnhtbCBvcHRpb24gY29uc3RhbnRzLgogICAgICogPC9wPgogICAgICogQHJldHVybiBET01Eb2N1bWVudHxib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLiBQcmlvciB0byBQSFAgOC4zIGlmIGNhbGxlZCBzdGF0aWNhbGx5LCByZXR1cm5zIGEKICAgICAqIERPTURvY3VtZW50IGFuZCBpc3N1ZXMgRV9TVFJJQ1QKICAgICAqIHdhcm5pbmcuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJ0RPTURvY3VtZW50fGJvb2wnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRmaWxlbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkb3B0aW9ucyA9IDAKICAgICkge30KCiAgICAvKioKICAgICAqIER1bXBzIHRoZSBpbnRlcm5hbCBYTUwgdHJlZSBiYWNrIGludG8gYSBmaWxlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWRvY3VtZW50LnNhdmUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICAgICAqIFRoZSBwYXRoIHRvIHRoZSBzYXZlZCBYTUwgZG9jdW1lbnQuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAgICAgKiBBZGRpdGlvbmFsIE9wdGlvbnMuIEN1cnJlbnRseSBvbmx5IExJQlhNTF9OT0VNUFRZVEFHIGlzIHN1cHBvcnRlZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gaW50fGZhbHNlIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvciBmYWxzZSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoJGZpbGVuYW1lLCAkb3B0aW9ucyA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBMb2FkIFhNTCBmcm9tIGEgc3RyaW5nCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWRvY3VtZW50LmxvYWR4bWwucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzb3VyY2UgPHA+CiAgICAgKiBUaGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgW29wdGlvbmFsXSA8cD4KICAgICAqIEJpdHdpc2UgT1IKICAgICAqIG9mIHRoZSBsaWJ4bWwgb3B0aW9uIGNvbnN0YW50cy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NRG9jdW1lbnR8Ym9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4gUHJpb3IgdG8gUEhQIDguMyBpZiBjYWxsZWQgc3RhdGljYWxseSwgcmV0dXJucyBhCiAgICAgKiBET01Eb2N1bWVudCBhbmQgaXNzdWVzIEVfU1RSSUNUCiAgICAgKiB3YXJuaW5nLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICdib29sJ10sIGRlZmF1bHQ6ICdET01Eb2N1bWVudHxib29sJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZFhNTCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkc291cmNlLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRvcHRpb25zID0gMAogICAgKSB7fQoKICAgIC8qKgogICAgICogRHVtcHMgdGhlIGludGVybmFsIFhNTCB0cmVlIGJhY2sgaW50byBhIHN0cmluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5zYXZleG1sLnBocAogICAgICogQHBhcmFtIG51bGx8RE9NTm9kZSAkbm9kZSBbb3B0aW9uYWxdIDxwPgogICAgICogVXNlIHRoaXMgcGFyYW1ldGVyIHRvIG91dHB1dCBvbmx5IGEgc3BlY2lmaWMgbm9kZSB3aXRob3V0IFhNTCBkZWNsYXJhdGlvbgogICAgICogcmF0aGVyIHRoYW4gdGhlIGVudGlyZSBkb2N1bWVudC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJG9wdGlvbnMgW29wdGlvbmFsXSA8cD4KICAgICAqIEFkZGl0aW9uYWwgT3B0aW9ucy4gQ3VycmVudGx5IG9ubHkgTElCWE1MX05PRU1QVFlUQUcgaXMgc3VwcG9ydGVkLgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmd8ZmFsc2UgdGhlIFhNTCwgb3IgZmFsc2UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzYXZlWE1MKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzcuMScgPT4gJz9ET01Ob2RlJ10sIGRlZmF1bHQ6ICcnKV0gJG5vZGUgPSBudWxsLAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzcuMCcpXSAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkb3B0aW9ucyA9IDAKICAgICk6IHN0cmluZ3xmYWxzZSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBET01Eb2N1bWVudCBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZG9jdW1lbnQuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkdmVyc2lvbiBbb3B0aW9uYWxdIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZG9jdW1lbnQgYXMgcGFydCBvZiB0aGUgWE1MIGRlY2xhcmF0aW9uLgogICAgICogQHBhcmFtIHN0cmluZyAkZW5jb2RpbmcgW29wdGlvbmFsXSBUaGUgZW5jb2Rpbmcgb2YgdGhlIGRvY3VtZW50IGFzIHBhcnQgb2YgdGhlIFhNTCBkZWNsYXJhdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR2ZXJzaW9uID0gJzEuMCcsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGVuY29kaW5nID0gJycKICAgICkge30KCiAgICAvKioKICAgICAqIFZhbGlkYXRlcyB0aGUgZG9jdW1lbnQgYmFzZWQgb24gaXRzIERURAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC52YWxpZGF0ZS5waHAKICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqIElmIHRoZSBkb2N1bWVudCBoYXZlIG5vIERURCBhdHRhY2hlZCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZmFsc2UuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBTdWJzdGl0dXRlcyBYSW5jbHVkZXMgaW4gYSBET01Eb2N1bWVudCBPYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZG9jdW1lbnQueGluY2x1ZGUucGhwCiAgICAgKiBAcGFyYW0gaW50ICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAgICAgKiBsaWJ4bWwgcGFyYW1ldGVycy4gQXZhaWxhYmxlCiAgICAgKiBzaW5jZSBQSFAgNS4xLjAgYW5kIExpYnhtbCAyLjYuNy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gaW50fGZhbHNlIHRoZSBudW1iZXIgb2YgWEluY2x1ZGVzIGluIHRoZSBkb2N1bWVudC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHhpbmNsdWRlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRvcHRpb25zID0gMCk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogTG9hZCBIVE1MIGZyb20gYSBzdHJpbmcKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZG9jdW1lbnQubG9hZGh0bWwucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzb3VyY2UgPHA+CiAgICAgKiBUaGUgSFRNTCBzdHJpbmcuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAgICAgKiBTaW5jZSBQSFAgNS40LjAgYW5kIExpYnhtbCAyLjYuMCwgeW91IG1heSBhbHNvCiAgICAgKiB1c2UgdGhlIG9wdGlvbnMgcGFyYW1ldGVyIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBMaWJ4bWwgcGFyYW1ldGVycy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NRG9jdW1lbnR8Ym9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4gUHJpb3IgdG8gUEhQIDguMyBpZiBjYWxsZWQgc3RhdGljYWxseSwgcmV0dXJucyBhCiAgICAgKiBET01Eb2N1bWVudCBhbmQgaXNzdWVzIEVfU1RSSUNUCiAgICAgKiB3YXJuaW5nLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICdib29sJ10sIGRlZmF1bHQ6ICdET01Eb2N1bWVudHxib29sJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZEhUTUwoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHNvdXJjZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkb3B0aW9ucyA9IDAKICAgICkge30KCiAgICAvKioKICAgICAqIExvYWQgSFRNTCBmcm9tIGEgZmlsZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5sb2FkaHRtbGZpbGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICAgICAqIFRoZSBwYXRoIHRvIHRoZSBIVE1MIGZpbGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAgICAgKiBTaW5jZSBQSFAgNS40LjAgYW5kIExpYnhtbCAyLjYuMCwgeW91IG1heSBhbHNvCiAgICAgKiB1c2UgdGhlIG9wdGlvbnMgcGFyYW1ldGVyIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBMaWJ4bWwgcGFyYW1ldGVycy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NRG9jdW1lbnR8Ym9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4gUHJpb3IgdG8gUEhQIDguMyBpZiBjYWxsZWQgc3RhdGljYWxseSwgcmV0dXJucyBhCiAgICAgKiBET01Eb2N1bWVudCBhbmQgaXNzdWVzIEVfU1RSSUNUCiAgICAgKiB3YXJuaW5nLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjMnID0+ICdib29sJ10sIGRlZmF1bHQ6ICdET01Eb2N1bWVudHxib29sJyldCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZEhUTUxGaWxlKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRmaWxlbmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkb3B0aW9ucyA9IDAKICAgICkge30KCiAgICAvKioKICAgICAqIER1bXBzIHRoZSBpbnRlcm5hbCBkb2N1bWVudCBpbnRvIGEgc3RyaW5nIHVzaW5nIEhUTUwgZm9ybWF0dGluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5zYXZlaHRtbC5waHAKICAgICAqIEBwYXJhbSBudWxsfERPTU5vZGUgJG5vZGUgW29wdGlvbmFsXSBwYXJhbWV0ZXIgdG8gb3V0cHV0IGEgc3Vic2V0IG9mIHRoZSBkb2N1bWVudC4KICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBIVE1MLCBvciBmYWxzZSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmVIVE1MKERPTU5vZGUgJG5vZGUgPSBudWxsKSB7fQoKICAgIC8qKgogICAgICogRHVtcHMgdGhlIGludGVybmFsIGRvY3VtZW50IGludG8gYSBmaWxlIHVzaW5nIEhUTUwgZm9ybWF0dGluZwogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5zYXZlaHRtbGZpbGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICAgICAqIFRoZSBwYXRoIHRvIHRoZSBzYXZlZCBIVE1MIGRvY3VtZW50LgogICAgICogPC9wPgogICAgICogQHJldHVybiBpbnR8ZmFsc2UgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9yIGZhbHNlIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZUhUTUxGaWxlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRmaWxlbmFtZSk6IGludHxmYWxzZSB7fQoKICAgIC8qKgogICAgICogVmFsaWRhdGVzIGEgZG9jdW1lbnQgYmFzZWQgb24gYSBzY2hlbWEKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZG9jdW1lbnQuc2NoZW1hdmFsaWRhdGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICAgICAqIFRoZSBwYXRoIHRvIHRoZSBzY2hlbWEuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gaW50ICRvcHRpb25zIFtvcHRpb25hbF0gPHA+CiAgICAgKiBCaXR3aXNlIE9SCiAgICAgKiBvZiB0aGUgbGlieG1sIG9wdGlvbiBjb25zdGFudHMuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzY2hlbWFWYWxpZGF0ZSgkZmlsZW5hbWUsICRvcHRpb25zID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIFZhbGlkYXRlcyBhIGRvY3VtZW50IGJhc2VkIG9uIGEgc2NoZW1hCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWRvY3VtZW50LnNjaGVtYXZhbGlkYXRlc291cmNlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkc291cmNlIDxwPgogICAgICogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgc2NoZW1hLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkZmxhZ3MgW29wdGlvbmFsXSA8cD5BIGJpdG1hc2sgb2YgTGlieG1sIHNjaGVtYSB2YWxpZGF0aW9uIGZsYWdzLiBDdXJyZW50bHkgdGhlIG9ubHkgc3VwcG9ydGVkIHZhbHVlIGlzIDxiPkxJQlhNTF9TQ0hFTUFfQ1JFQVRFPC9iPi4KICAgICAqIEF2YWlsYWJsZSBzaW5jZSBQSFAgNS41LjIgYW5kIExpYnhtbCAyLjYuMTQuPC9wPgogICAgICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2NoZW1hVmFsaWRhdGVTb3VyY2UoJHNvdXJjZSwgJGZsYWdzKSB7fQoKICAgIC8qKgogICAgICogUGVyZm9ybXMgcmVsYXhORyB2YWxpZGF0aW9uIG9uIHRoZSBkb2N1bWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21kb2N1bWVudC5yZWxheG5ndmFsaWRhdGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSA8cD4KICAgICAqIFRoZSBSTkcgZmlsZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJlbGF4TkdWYWxpZGF0ZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZmlsZW5hbWUpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBQZXJmb3JtcyByZWxheE5HIHZhbGlkYXRpb24gb24gdGhlIGRvY3VtZW50CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWRvY3VtZW50LnJlbGF4bmd2YWxpZGF0ZXNvdXJjZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNvdXJjZSA8cD4KICAgICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFJORyBzY2hlbWEuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiByZWxheE5HVmFsaWRhdGVTb3VyY2UoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHNvdXJjZSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFJlZ2lzdGVyIGV4dGVuZGVkIGNsYXNzIHVzZWQgdG8gY3JlYXRlIGJhc2Ugbm9kZSB0eXBlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWRvY3VtZW50LnJlZ2lzdGVybm9kZWNsYXNzLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkYmFzZUNsYXNzIDxwPgogICAgICogVGhlIERPTSBjbGFzcyB0aGF0IHlvdSB3YW50IHRvIGV4dGVuZC4gWW91IGNhbiBmaW5kIGEgbGlzdCBvZiB0aGVzZQogICAgICogY2xhc3NlcyBpbiB0aGUgY2hhcHRlciBpbnRyb2R1Y3Rpb24uCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRleHRlbmRlZENsYXNzIDxwPgogICAgICogWW91ciBleHRlbmRlZCBjbGFzcyBuYW1lLiBJZiBudWxsIGlzIHByb3ZpZGVkLCBhbnkgcHJldmlvdXNseQogICAgICogcmVnaXN0ZXJlZCBjbGFzcyBleHRlbmRpbmcgYmFzZWNsYXNzIHdpbGwKICAgICAqIGJlIHJlbW92ZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguNCcgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3Rlck5vZGVDbGFzcygKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkYmFzZUNsYXNzLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGV4dGVuZGVkQ2xhc3MKICAgICkge30KfQoKLyoqCiAqIFRoZSBET01Ob2RlTGlzdCBjbGFzcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbW5vZGVsaXN0LnBocAogKi8KY2xhc3MgRE9NTm9kZUxpc3QgaW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZSwgQ291bnRhYmxlCnsKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqIFRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhlIGxpc3QuIFRoZSByYW5nZSBvZiB2YWxpZCBjaGlsZCBub2RlIGluZGljZXMgaXMgMCB0byBsZW5ndGggLSAxIGluY2x1c2l2ZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tbm9kZWxpc3QucGhwI2RvbW5vZGVsaXN0LnByb3BzLmxlbmd0aAogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXQogICAgI1tJbW11dGFibGVdCiAgICBwdWJsaWMgJGxlbmd0aDsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIG5vZGUgc3BlY2lmaWVkIGJ5IGluZGV4CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbW5vZGVsaXN0Lml0ZW0ucGhwCiAgICAgKiBAcGFyYW0gaW50ICRpbmRleCA8cD4KICAgICAqIEluZGV4IG9mIHRoZSBub2RlIGludG8gdGhlIGNvbGxlY3Rpb24uCiAgICAgKiBUaGUgcmFuZ2Ugb2YgdmFsaWQgY2hpbGQgbm9kZSBpbmRpY2VzIGlzIDAgdG8gbGVuZ3RoIC0gMSBpbmNsdXNpdmUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIERPTUVsZW1lbnR8RE9NTm9kZXxET01OYW1lU3BhY2VOb2RlfG51bGwgVGhlIG5vZGUgYXQgdGhlIGluZGV4dGggcG9zaXRpb24gaW4gdGhlCiAgICAgKiBET01Ob2RlTGlzdCwgb3IgbnVsbCBpZiB0aGF0IGlzIG5vdCBhIHZhbGlkCiAgICAgKiBpbmRleC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGl0ZW0oI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGluZGV4KSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBpbnQ8MCwgbWF4PgogICAgICogQHNpbmNlIDcuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yCiAgICAgKiBAc2luY2UgOC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBJdGVyYXRvciB7fQp9CgovKioKICogVGhlIERPTU5hbWVkTm9kZU1hcCBjbGFzcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbW5hbWVkbm9kZW1hcC5waHAKICogQHByb3BlcnR5LXJlYWQgaW50ICRsZW5ndGggVGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgbWFwLiBUaGUgcmFuZ2Ugb2YgdmFsaWQgY2hpbGQgbm9kZSBpbmRpY2VzIGlzIDAgdG8gbGVuZ3RoIC0gMSBpbmNsdXNpdmUuCiAqLwpjbGFzcyBET01OYW1lZE5vZGVNYXAgaW1wbGVtZW50cyBJdGVyYXRvckFnZ3JlZ2F0ZSwgQ291bnRhYmxlCnsKCiAgICAgLyoqCiAgICAgICogVGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgbWFwLiBUaGUgcmFuZ2Ugb2YgdmFsaWQgY2hpbGQgbm9kZSBpbmRpY2VzIGlzIDAgdG8gbGVuZ3RoIC0gMSBpbmNsdXNpdmUuCiAgICAgICogQHZhciBpbnQKICAgICAgKiBAcmVhZG9ubHkKICAgICAgKi8KICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMScpXQogICAgcHVibGljICRsZW5ndGg7CiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIG5vZGUgc3BlY2lmaWVkIGJ5IG5hbWUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tbmFtZWRub2RlbWFwLmdldG5hbWVkaXRlbS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1YWxpZmllZE5hbWUgPHA+CiAgICAgKiBUaGUgbm9kZU5hbWUgb2YgdGhlIG5vZGUgdG8gcmV0cmlldmUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIERPTU5vZGV8bnVsbCBBIG5vZGUgKG9mIGFueSB0eXBlKSB3aXRoIHRoZSBzcGVjaWZpZWQgbm9kZU5hbWUsIG9yCiAgICAgKiBudWxsIGlmIG5vIG5vZGUgaXMgZm91bmQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lZEl0ZW0oI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHF1YWxpZmllZE5hbWUpOiA/RE9NTm9kZSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIERPTU5vZGUgJGFyZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TmFtZWRJdGVtKERPTU5vZGUgJGFyZykge30KCiAgICAvKioKICAgICAqIEBwYXJhbSAkbmFtZSBbb3B0aW9uYWxdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVOYW1lZEl0ZW0oJG5hbWUpIHt9CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYSBub2RlIHNwZWNpZmllZCBieSBpbmRleAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21uYW1lZG5vZGVtYXAuaXRlbS5waHAKICAgICAqIEBwYXJhbSBpbnQgJGluZGV4IDxwPgogICAgICogSW5kZXggaW50byB0aGlzIG1hcC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NTm9kZXxudWxsIFRoZSBub2RlIGF0IHRoZSBpbmRleHRoIHBvc2l0aW9uIGluIHRoZSBtYXAsIG9yIG51bGwKICAgICAqIGlmIHRoYXQgaXMgbm90IGEgdmFsaWQgaW5kZXggKGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIG5vZGVzCiAgICAgKiBpbiB0aGlzIG1hcCkuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpdGVtKAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzUuMycsIHRvOiAnNy4wJyldICRpbmRleCA9IDAsCiAgICAgICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNy4xJyldICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRpbmRleAogICAgKTogP0RPTU5vZGUge30KCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIG5vZGUgc3BlY2lmaWVkIGJ5IGxvY2FsIG5hbWUgYW5kIG5hbWVzcGFjZSBVUkkKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tbmFtZWRub2RlbWFwLmdldG5hbWVkaXRlbW5zLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlIDxwPgogICAgICogVGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIG5vZGUgdG8gcmV0cmlldmUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbE5hbWUgPHA+CiAgICAgKiBUaGUgbG9jYWwgbmFtZSBvZiB0aGUgbm9kZSB0byByZXRyaWV2ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NTm9kZXxudWxsIEEgbm9kZSAob2YgYW55IHR5cGUpIHdpdGggdGhlIHNwZWNpZmllZCBsb2NhbCBuYW1lIGFuZCBuYW1lc3BhY2UgVVJJLCBvcgogICAgICogbnVsbCBpZiBubyBub2RlIGlzIGZvdW5kLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZWRJdGVtTlMoCiAgICAgICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJG5hbWVzcGFjZVVSSSA9ICcnLAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSA/c3RyaW5nICRuYW1lc3BhY2UsCiAgICAgICAgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnNS4zJywgdG86ICc3LjQnKV0gJGxvY2FsTmFtZSA9ICcnLAogICAgICAgICNbUGhwU3Rvcm1TdHVic0VsZW1lbnRBdmFpbGFibGUoZnJvbTogJzguMCcpXSBzdHJpbmcgJGxvY2FsTmFtZQogICAgKTogP0RPTU5vZGUge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBET01Ob2RlICRhcmcgW29wdGlvbmFsXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TmFtZWRJdGVtTlMoRE9NTm9kZSAkYXJnKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtICRuYW1lc3BhY2UgW29wdGlvbmFsXQogICAgICogQHBhcmFtICRsb2NhbE5hbWUgW29wdGlvbmFsXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlTmFtZWRJdGVtTlMoJG5hbWVzcGFjZSwgJGxvY2FsTmFtZSkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50PDAsbWF4PgogICAgICogQHNpbmNlIDcuMgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEl0ZXJhdG9yCiAgICAgKiBAc2luY2UgOC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpOiBJdGVyYXRvciB7fQp9CgovKioKICogVGhlIERPTUNoYXJhY3RlckRhdGEgY2xhc3MgcmVwcmVzZW50cyBub2RlcyB3aXRoIGNoYXJhY3RlciBkYXRhLgogKiBObyBub2RlcyBkaXJlY3RseSBjb3JyZXNwb25kIHRvIHRoaXMgY2xhc3MsIGJ1dCBvdGhlciBub2RlcyBkbyBpbmhlcml0IGZyb20gaXQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tY2hhcmFjdGVyZGF0YS5waHAKICovCmNsYXNzIERPTUNoYXJhY3RlckRhdGEgZXh0ZW5kcyBET01Ob2RlIGltcGxlbWVudHMgRE9NQ2hpbGROb2RlCnsKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGUgbm9kZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tY2hhcmFjdGVyZGF0YS5waHAjZG9tY2hhcmFjdGVyZGF0YS5wcm9wcy5kYXRhCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGRhdGE7CgogICAgLyoqCiAgICAgKiBAdmFyIGludAogICAgICogVGhlIGxlbmd0aCBvZiB0aGUgY29udGVudHMuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWNoYXJhY3RlcmRhdGEucGhwI2RvbWNoYXJhY3RlcmRhdGEucHJvcHMubGVuZ3RoCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGxlbmd0aDsKCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdET01FbGVtZW50fG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRuZXh0RWxlbWVudFNpYmxpbmc7CgogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnRE9NRWxlbWVudHxudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkcHJldmlvdXNFbGVtZW50U2libGluZzsKCiAgICAvKioKICAgICAqIEV4dHJhY3RzIGEgcmFuZ2Ugb2YgZGF0YSBmcm9tIHRoZSBub2RlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWNoYXJhY3RlcmRhdGEuc3Vic3RyaW5nZGF0YS5waHAKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldCA8cD4KICAgICAqIFN0YXJ0IG9mZnNldCBvZiBzdWJzdHJpbmcgdG8gZXh0cmFjdC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNvdW50IDxwPgogICAgICogVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGV4dHJhY3QuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgc3BlY2lmaWVkIHN1YnN0cmluZy4gSWYgdGhlIHN1bSBvZiBvZmZzZXQKICAgICAqIGFuZCBjb3VudCBleGNlZWRzIHRoZSBsZW5ndGgsIHRoZW4gYWxsIDE2LWJpdCB1bml0cwogICAgICogdG8gdGhlIGVuZCBvZiB0aGUgZGF0YSBhcmUgcmV0dXJuZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdWJzdHJpbmdEYXRhKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRvZmZzZXQsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGNvdW50CiAgICApIHt9CgogICAgLyoqCiAgICAgKiBBcHBlbmQgdGhlIHN0cmluZyB0byB0aGUgZW5kIG9mIHRoZSBjaGFyYWN0ZXIgZGF0YSBvZiB0aGUgbm9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21jaGFyYWN0ZXJkYXRhLmFwcGVuZGRhdGEucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIDxwPgogICAgICogVGhlIHN0cmluZyB0byBhcHBlbmQuCiAgICAgKiA8L3A+CiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMycgPT4gJ3RydWUnXSwgZGVmYXVsdDogJ2Jvb2wnKV0KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmREYXRhKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRkYXRhKSB7fQoKICAgIC8qKgogICAgICogSW5zZXJ0IGEgc3RyaW5nIGF0IHRoZSBzcGVjaWZpZWQgMTYtYml0IHVuaXQgb2Zmc2V0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWNoYXJhY3RlcmRhdGEuaW5zZXJ0ZGF0YS5waHAKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldCA8cD4KICAgICAqIFRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGF0IHdoaWNoIHRvIGluc2VydC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgPHA+CiAgICAgKiBUaGUgc3RyaW5nIHRvIGluc2VydC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0RGF0YSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkb2Zmc2V0LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRkYXRhCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgYSByYW5nZSBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIG5vZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tY2hhcmFjdGVyZGF0YS5kZWxldGVkYXRhLnBocAogICAgICogQHBhcmFtIGludCAkb2Zmc2V0IDxwPgogICAgICogVGhlIG9mZnNldCBmcm9tIHdoaWNoIHRvIHN0YXJ0IHJlbW92aW5nLgogICAgICogPC9wPgogICAgICogQHBhcmFtIGludCAkY291bnQgPHA+CiAgICAgKiBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gZGVsZXRlLiBJZiB0aGUgc3VtIG9mCiAgICAgKiBvZmZzZXQgYW5kIGNvdW50IGV4Y2VlZHMKICAgICAqIHRoZSBsZW5ndGgsIHRoZW4gYWxsIGNoYXJhY3RlcnMgdG8gdGhlIGVuZCBvZiB0aGUgZGF0YSBhcmUgZGVsZXRlZC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlRGF0YSgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkb2Zmc2V0LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRjb3VudAogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmVwbGFjZSBhIHN1YnN0cmluZyB3aXRoaW4gdGhlIERPTUNoYXJhY3RlckRhdGEgbm9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21jaGFyYWN0ZXJkYXRhLnJlcGxhY2VkYXRhLnBocAogICAgICogQHBhcmFtIGludCAkb2Zmc2V0IDxwPgogICAgICogVGhlIG9mZnNldCBmcm9tIHdoaWNoIHRvIHN0YXJ0IHJlcGxhY2luZy4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBpbnQgJGNvdW50IDxwPgogICAgICogVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJlcGxhY2UuIElmIHRoZSBzdW0gb2YKICAgICAqIG9mZnNldCBhbmQgY291bnQgZXhjZWVkcwogICAgICogdGhlIGxlbmd0aCwgdGhlbiBhbGwgY2hhcmFjdGVycyB0byB0aGUgZW5kIG9mIHRoZSBkYXRhIGFyZSByZXBsYWNlZC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEgPHA+CiAgICAgKiBUaGUgc3RyaW5nIHdpdGggd2hpY2ggdGhlIHJhbmdlIG11c3QgYmUgcmVwbGFjZWQuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJlcGxhY2VEYXRhKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldICRvZmZzZXQsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnaW50J10sIGRlZmF1bHQ6ICcnKV0gJGNvdW50LAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRkYXRhCiAgICApOiBib29sIHt9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmVmb3JlKC4uLiRub2Rlcyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFmdGVyKC4uLiRub2Rlcyk6IHZvaWQge30KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcGxhY2VXaXRoKC4uLiRub2Rlcyk6IHZvaWQge30KfQoKLyoqCiAqIFRoZSBET01BdHRyIGludGVyZmFjZSByZXByZXNlbnRzIGFuIGF0dHJpYnV0ZSBpbiBhbiBET01FbGVtZW50IG9iamVjdC4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21hdHRyLnBocAogKi8KY2xhc3MgRE9NQXR0ciBleHRlbmRzIERPTU5vZGUKewogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICogKFBIUDUpPGJyLz4KICAgICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tYXR0ci5waHAjZG9tYXR0ci5wcm9wcy5uYW1lCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJG5hbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIERPTUVsZW1lbnQKICAgICAqIChQSFA1KTxici8+CiAgICAgKiBUaGUgZWxlbWVudCB3aGljaCBjb250YWlucyB0aGUgYXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWF0dHIucGhwI2RvbWF0dHIucHJvcHMub3duZXJlbGVtZW50CiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0RPTUVsZW1lbnR8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJG93bmVyRWxlbWVudDsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICogKFBIUDUpPGJyLz4KICAgICAqIE5vdCBpbXBsZW1lbnRlZCB5ZXQsIGFsd2F5cyBpcyBOVUxMCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWF0dHIucGhwI2RvbWF0dHIucHJvcHMuc2NoZW1hdHlwZWluZm8KICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnbWl4ZWQnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRzY2hlbWFUeXBlSW5mbzsKCiAgICAvKioKICAgICAqIEB2YXIgYm9vbAogICAgICogKFBIUDUpPGJyLz4KICAgICAqIE5vdCBpbXBsZW1lbnRlZCB5ZXQsIGFsd2F5cyBpcyBOVUxMCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWF0dHIucGhwI2RvbWF0dHIucHJvcHMuc3BlY2lmaWVkCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRzcGVjaWZpZWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICogKFBIUDUpPGJyLz4KICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWF0dHIucGhwI2RvbWF0dHIucHJvcHMudmFsdWUKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkdmFsdWU7CgogICAgLyoqCiAgICAgKiBDaGVja3MgaWYgYXR0cmlidXRlIGlzIGEgZGVmaW5lZCBJRAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21hdHRyLmlzaWQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0lkKCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcge0BzZWUgRE9NQXR0cn0gb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWF0dHIuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSA8cD5UaGUgdGFnIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS48L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBbb3B0aW9uYWxdIDxwPlRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLjwvcD4KICAgICAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uIElmIGludmFsaWQgJG5hbWUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR2YWx1ZSA9ICcnCiAgICApIHt9Cn0KCi8qKgogKiBUaGUgRE9NRWxlbWVudCBjbGFzcwogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWVsZW1lbnQucGhwCiAqLwpjbGFzcyBET01FbGVtZW50IGV4dGVuZHMgRE9NTm9kZSBpbXBsZW1lbnRzIERPTVBhcmVudE5vZGUsIERPTUNoaWxkTm9kZQp7CiAgICAvKioKICAgICAqIEB2YXIgRE9NTm9kZXxudWxsCiAgICAgKiBUaGUgcGFyZW50IG9mIHRoaXMgbm9kZS4gSWYgdGhlcmUgaXMgbm8gc3VjaCBub2RlLCB0aGlzIHJldHVybnMgTlVMTC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tbm9kZS5waHAjZG9tbm9kZS5wcm9wcy5wYXJlbnRub2RlCiAgICAgKi8KICAgIHB1YmxpYyAkcGFyZW50Tm9kZTsKCiAgICAvKioKICAgICAqIEB2YXIgRE9NTm9kZXxudWxsCiAgICAgKiBUaGUgZmlyc3QgY2hpbGQgb2YgdGhpcyBub2RlLiBJZiB0aGVyZSBpcyBubyBzdWNoIG5vZGUsIHRoaXMgcmV0dXJucyBOVUxMLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub2RlLnBocCNkb21ub2RlLnByb3BzLmZpcnN0Y2hpbGQKICAgICAqLwogICAgcHVibGljICRmaXJzdENoaWxkOwoKICAgIC8qKgogICAgICogQHZhciBET01Ob2RlfG51bGwKICAgICAqIFRoZSBsYXN0IGNoaWxkIG9mIHRoaXMgbm9kZS4gSWYgdGhlcmUgaXMgbm8gc3VjaCBub2RlLCB0aGlzIHJldHVybnMgTlVMTC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tbm9kZS5waHAjZG9tbm9kZS5wcm9wcy5sYXN0Y2hpbGQKICAgICAqLwogICAgcHVibGljICRsYXN0Q2hpbGQ7CgogICAgLyoqCiAgICAgKiBAdmFyIERPTU5vZGV8bnVsbAogICAgICogVGhlIG5vZGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoaXMgbm9kZS4gSWYgdGhlcmUgaXMgbm8gc3VjaCBub2RlLCB0aGlzIHJldHVybnMgTlVMTC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tbm9kZS5waHAjZG9tbm9kZS5wcm9wcy5wcmV2aW91c3NpYmxpbmcKICAgICAqLwogICAgcHVibGljICRwcmV2aW91c1NpYmxpbmc7CgogICAgLyoqCiAgICAgKiBAdmFyIERPTU5vZGV8bnVsbAogICAgICogVGhlIG5vZGUgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoaXMgbm9kZS4gSWYgdGhlcmUgaXMgbm8gc3VjaCBub2RlLCB0aGlzIHJldHVybnMgTlVMTC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tbm9kZS5waHAjZG9tbm9kZS5wcm9wcy5uZXh0c2libGluZwogICAgICovCiAgICBwdWJsaWMgJG5leHRTaWJsaW5nOwoKICAgIC8qKgogICAgICogQHZhciBET01OYW1lZE5vZGVNYXAKICAgICAqIEEgPGNsYXNzbmFtZT5ET01OYW1lZE5vZGVNYXA8L2NsYXNzbmFtZT4gY29udGFpbmluZyB0aGUgYXR0cmlidXRlcyBvZiB0aGlzIG5vZGUgKGlmIGl0IGlzIGEgPGNsYXNzbmFtZT5ET01FbGVtZW50PC9jbGFzc25hbWU+KSBvciBOVUxMIG90aGVyd2lzZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tbm9kZS5waHAjZG9tbm9kZS5wcm9wcy5hdHRyaWJ1dGVzCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0RPTU5hbWVkTm9kZU1hcCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGF0dHJpYnV0ZXM7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqIE5vdCBpbXBsZW1lbnRlZCB5ZXQsIGFsd2F5cyByZXR1cm4gTlVMTAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21lbGVtZW50LnBocCNkb21lbGVtZW50LnByb3BzLnNjaGVtYXR5cGVpbmZvCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ21peGVkJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkc2NoZW1hVHlwZUluZm87CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICogVGhlIGVsZW1lbnQgbmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21lbGVtZW50LnBocCNkb21lbGVtZW50LnByb3BzLnRhZ25hbWUKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkdGFnTmFtZTsKCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdET01FbGVtZW50fG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRmaXJzdEVsZW1lbnRDaGlsZDsKCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdET01FbGVtZW50fG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRsYXN0RWxlbWVudENoaWxkOwoKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2ludCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGNoaWxkRWxlbWVudENvdW50OwoKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ0RPTUVsZW1lbnR8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHByZXZpb3VzRWxlbWVudFNpYmxpbmc7CgogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnRE9NRWxlbWVudHxudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkbmV4dEVsZW1lbnRTaWJsaW5nOwogICAgcHVibGljIHN0cmluZyAkaWQ7CiAgICBwdWJsaWMgc3RyaW5nICRjbGFzc05hbWU7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHZhbHVlIG9mIGF0dHJpYnV0ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21lbGVtZW50LmdldGF0dHJpYnV0ZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1YWxpZmllZE5hbWUgPHA+CiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiBubyBhdHRyaWJ1dGUgd2l0aCB0aGUKICAgICAqIGdpdmVuIG5hbWUgaXMgZm91bmQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHF1YWxpZmllZE5hbWUpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEFkZHMgbmV3IGF0dHJpYnV0ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21lbGVtZW50LnNldGF0dHJpYnV0ZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1YWxpZmllZE5hbWUgPHA+CiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUgPHA+CiAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NQXR0cnxmYWxzZSBUaGUgbmV3IERPTUF0dHIgb3IgZmFsc2UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHF1YWxpZmllZE5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHZhbHVlCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIGF0dHJpYnV0ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21lbGVtZW50LnJlbW92ZWF0dHJpYnV0ZS5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1YWxpZmllZE5hbWUgPHA+CiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRxdWFsaWZpZWROYW1lKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBhdHRyaWJ1dGUgbm9kZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21lbGVtZW50LmdldGF0dHJpYnV0ZW5vZGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWFsaWZpZWROYW1lIDxwPgogICAgICogVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NQXR0ciBUaGUgYXR0cmlidXRlIG5vZGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVOb2RlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRxdWFsaWZpZWROYW1lKSB7fQoKICAgIC8qKgogICAgICogQWRkcyBuZXcgYXR0cmlidXRlIG5vZGUgdG8gZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21lbGVtZW50LnNldGF0dHJpYnV0ZW5vZGUucGhwCiAgICAgKiBAcGFyYW0gRE9NQXR0ciAkYXR0ciA8cD4KICAgICAqIFRoZSBhdHRyaWJ1dGUgbm9kZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NQXR0cnxudWxsIE9sZCBub2RlIGlmIHRoZSBhdHRyaWJ1dGUgaGFzIGJlZW4gcmVwbGFjZWQgb3IgbnVsbC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEF0dHJpYnV0ZU5vZGUoRE9NQXR0ciAkYXR0cikge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWVsZW1lbnQucmVtb3ZlYXR0cmlidXRlbm9kZS5waHAKICAgICAqIEBwYXJhbSBET01BdHRyICRhdHRyIDxwPgogICAgICogVGhlIGF0dHJpYnV0ZSBub2RlLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlTm9kZShET01BdHRyICRhdHRyKSB7fQoKICAgIC8qKgogICAgICogR2V0cyBlbGVtZW50cyBieSB0YWduYW1lCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWVsZW1lbnQuZ2V0ZWxlbWVudHNieXRhZ25hbWUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWFsaWZpZWROYW1lIDxwPgogICAgICogVGhlIHRhZyBuYW1lLiBVc2UgKiB0byByZXR1cm4gYWxsIGVsZW1lbnRzIHdpdGhpbgogICAgICogdGhlIGVsZW1lbnQgdHJlZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NTm9kZUxpc3QgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcwogICAgICogRE9NTm9kZUxpc3Qgb2YgYWxsIG1hdGNoZWQgZWxlbWVudHMuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFbGVtZW50c0J5VGFnTmFtZSgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcXVhbGlmaWVkTmFtZSk6IERPTU5vZGVMaXN0IHt9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHZhbHVlIG9mIGF0dHJpYnV0ZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21lbGVtZW50LmdldGF0dHJpYnV0ZW5zLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlIDxwPgogICAgICogVGhlIG5hbWVzcGFjZSBVUkkuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gc3RyaW5nICRsb2NhbE5hbWUgPHA+CiAgICAgKiBUaGUgbG9jYWwgbmFtZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgbm8gYXR0cmlidXRlIHdpdGggdGhlCiAgICAgKiBnaXZlbiBsb2NhbE5hbWUgYW5kIG5hbWVzcGFjZVVSSQogICAgICogaXMgZm91bmQuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVOUygKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRuYW1lc3BhY2UsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsTmFtZQogICAgKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBBZGRzIG5ldyBhdHRyaWJ1dGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZWxlbWVudC5zZXRhdHRyaWJ1dGVucy5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWVzcGFjZSA8cD4KICAgICAqIFRoZSBuYW1lc3BhY2UgVVJJLgogICAgICogPC9wPgogICAgICogQHBhcmFtIHN0cmluZyAkcXVhbGlmaWVkTmFtZSA8cD4KICAgICAqIFRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgYXR0cmlidXRlLCBhcyBwcmVmaXg6dGFnbmFtZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIDxwPgogICAgICogVGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHNldEF0dHJpYnV0ZU5TKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWVzcGFjZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcXVhbGlmaWVkTmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkdmFsdWUKICAgICk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFJlbW92ZXMgYXR0cmlidXRlCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWVsZW1lbnQucmVtb3ZlYXR0cmlidXRlbnMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2UgPHA+CiAgICAgKiBUaGUgbmFtZXNwYWNlIFVSSS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsTmFtZSA8cD4KICAgICAqIFRoZSBsb2NhbCBuYW1lLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlTlMoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbmFtZXNwYWNlLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbE5hbWUKICAgICk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFJldHVybnMgYXR0cmlidXRlIG5vZGUKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZWxlbWVudC5nZXRhdHRyaWJ1dGVub2RlbnMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2UgPHA+CiAgICAgKiBUaGUgbmFtZXNwYWNlIFVSSS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsTmFtZSA8cD4KICAgICAqIFRoZSBsb2NhbCBuYW1lLgogICAgICogPC9wPgogICAgICogQHJldHVybiBET01BdHRyIFRoZSBhdHRyaWJ1dGUgbm9kZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZU5vZGVOUygKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICRuYW1lc3BhY2UsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGxvY2FsTmFtZQogICAgKSB7fQoKICAgIC8qKgogICAgICogQWRkcyBuZXcgYXR0cmlidXRlIG5vZGUgdG8gZWxlbWVudAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21lbGVtZW50LnNldGF0dHJpYnV0ZW5vZGVucy5waHAKICAgICAqIEBwYXJhbSBET01BdHRyICRhdHRyCiAgICAgKiBAcmV0dXJuIERPTUF0dHIgdGhlIG9sZCBub2RlIGlmIHRoZSBhdHRyaWJ1dGUgaGFzIGJlZW4gcmVwbGFjZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBdHRyaWJ1dGVOb2RlTlMoRE9NQXR0ciAkYXR0cikge30KCiAgICAvKioKICAgICAqIEdldCBlbGVtZW50cyBieSBuYW1lc3BhY2VVUkkgYW5kIGxvY2FsTmFtZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21lbGVtZW50LmdldGVsZW1lbnRzYnl0YWduYW1lbnMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2UgPHA+CiAgICAgKiBUaGUgbmFtZXNwYWNlIFVSSS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsTmFtZSA8cD4KICAgICAqIFRoZSBsb2NhbCBuYW1lLiBVc2UgKiB0byByZXR1cm4gYWxsIGVsZW1lbnRzIHdpdGhpbgogICAgICogdGhlIGVsZW1lbnQgdHJlZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NTm9kZUxpc3QgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcwogICAgICogRE9NTm9kZUxpc3Qgb2YgYWxsIG1hdGNoZWQgZWxlbWVudHMgaW4gdGhlIG9yZGVyIGluCiAgICAgKiB3aGljaCB0aGV5IGFyZSBlbmNvdW50ZXJlZCBpbiBhIHByZW9yZGVyIHRyYXZlcnNhbCBvZiB0aGlzIGVsZW1lbnQgdHJlZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbmFtZXNwYWNlLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbE5hbWUKICAgICk6IERPTU5vZGVMaXN0IHt9CgogICAgLyoqCiAgICAgKiBDaGVja3MgdG8gc2VlIGlmIGF0dHJpYnV0ZSBleGlzdHMKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZWxlbWVudC5oYXNhdHRyaWJ1dGUucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRxdWFsaWZpZWROYW1lIDxwPgogICAgICogVGhlIGF0dHJpYnV0ZSBuYW1lLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzQXR0cmlidXRlKCNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRxdWFsaWZpZWROYW1lKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQ2hlY2tzIHRvIHNlZSBpZiBhdHRyaWJ1dGUgZXhpc3RzCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWVsZW1lbnQuaGFzYXR0cmlidXRlbnMucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lc3BhY2UgPHA+CiAgICAgKiBUaGUgbmFtZXNwYWNlIFVSSS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJGxvY2FsTmFtZSA8cD4KICAgICAqIFRoZSBsb2NhbCBuYW1lLgogICAgICogPC9wPgogICAgICogQHJldHVybiBib29sIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzQXR0cmlidXRlTlMoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXSAkbmFtZXNwYWNlLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRsb2NhbE5hbWUKICAgICk6IGJvb2wge30KCiAgICAvKioKICAgICAqIERlY2xhcmVzIHRoZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIGJ5IG5hbWUgdG8gYmUgb2YgdHlwZSBJRAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21lbGVtZW50LnNldGlkYXR0cmlidXRlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcXVhbGlmaWVkTmFtZSA8cD4KICAgICAqIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gYm9vbCAkaXNJZCA8cD4KICAgICAqIFNldCBpdCB0byB0cnVlIGlmIHlvdSB3YW50IG5hbWUgdG8gYmUgb2YgdHlwZQogICAgICogSUQsIGZhbHNlIG90aGVyd2lzZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SWRBdHRyaWJ1dGUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHF1YWxpZmllZE5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRpc0lkCiAgICApOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBEZWNsYXJlcyB0aGUgYXR0cmlidXRlIHNwZWNpZmllZCBieSBsb2NhbCBuYW1lIGFuZCBuYW1lc3BhY2UgVVJJIHRvIGJlIG9mIHR5cGUgSUQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZWxlbWVudC5zZXRpZGF0dHJpYnV0ZW5zLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlIDxwPgogICAgICogVGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1YWxpZmllZE5hbWUgPHA+CiAgICAgKiBUaGUgbG9jYWwgbmFtZSBvZiB0aGUgYXR0cmlidXRlLCBhcyBwcmVmaXg6dGFnbmFtZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBib29sICRpc0lkIDxwPgogICAgICogU2V0IGl0IHRvIHRydWUgaWYgeW91IHdhbnQgbmFtZSB0byBiZSBvZiB0eXBlCiAgICAgKiBJRCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJZEF0dHJpYnV0ZU5TKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lc3BhY2UsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJHF1YWxpZmllZE5hbWUsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRpc0lkCiAgICApOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBEZWNsYXJlcyB0aGUgYXR0cmlidXRlIHNwZWNpZmllZCBieSBub2RlIHRvIGJlIG9mIHR5cGUgSUQKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZWxlbWVudC5zZXRpZGF0dHJpYnV0ZW5vZGUucGhwCiAgICAgKiBAcGFyYW0gRE9NQXR0ciAkYXR0ciA8cD4KICAgICAqIFRoZSBhdHRyaWJ1dGUgbm9kZS4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBib29sICRpc0lkIDxwPgogICAgICogU2V0IGl0IHRvIHRydWUgaWYgeW91IHdhbnQgbmFtZSB0byBiZSBvZiB0eXBlCiAgICAgKiBJRCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgICogPC9wPgogICAgICogQHJldHVybiB2b2lkCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJZEF0dHJpYnV0ZU5vZGUoRE9NQXR0ciAkYXR0ciwgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRpc0lkKTogdm9pZCB7fQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdERvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJlZm9yZSguLi4kbm9kZXMpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZnRlciguLi4kbm9kZXMpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlV2l0aCguLi4kbm9kZXMpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoLi4uJG5vZGVzKTogdm9pZCB7fQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0RG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJlcGVuZCguLi4kbm9kZXMpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC4zCiAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlQ2hpbGRyZW4oLi4uJG5vZGVzKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyBET01FbGVtZW50IG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21lbGVtZW50LmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1YWxpZmllZE5hbWUgVGhlIHRhZyBuYW1lIG9mIHRoZSBlbGVtZW50LiBXaGVuIGFsc28gcGFzc2luZyBpbiBuYW1lc3BhY2VVUkksIHRoZSBlbGVtZW50IG5hbWUgbWF5IHRha2UgYSBwcmVmaXggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBVUkkuCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHZhbHVlIFtvcHRpb25hbF0gVGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZXNwYWNlIFtvcHRpb25hbF0gQSBuYW1lc3BhY2UgVVJJIHRvIGNyZWF0ZSB0aGUgZWxlbWVudCB3aXRoaW4gYSBzcGVjaWZpYyBuYW1lc3BhY2UuCiAgICAgKiBAdGhyb3dzIERPTUV4Y2VwdGlvbiBJZiBpbnZhbGlkICRxdWFsaWZpZWROYW1lCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkcXVhbGlmaWVkTmFtZSwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldICR2YWx1ZSA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWVzcGFjZSA9ICcnCiAgICApIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC4zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVOYW1lcygpOiBhcnJheSB7fQoKICAgIC8qKgogICAgICogQHNpbmNlIDguMwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9nZ2xlQXR0cmlidXRlKHN0cmluZyAkcXVhbGlmaWVkTmFtZSwgP2Jvb2wgJGZvcmNlID0gbnVsbCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluc2VydEFkamFjZW50RWxlbWVudChzdHJpbmcgJHdoZXJlLCBET01FbGVtZW50ICRlbGVtZW50KTogP0RPTUVsZW1lbnQge30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluc2VydEFkamFjZW50VGV4dChzdHJpbmcgJHdoZXJlLCBzdHJpbmcgJGRhdGEpOiB2b2lkIHt9Cn0KCi8qKgogKiBUaGUgRE9NVGV4dCBjbGFzcyBpbmhlcml0cyBmcm9tIDxjbGFzc25hbWU+RE9NQ2hhcmFjdGVyRGF0YTwvY2xhc3NuYW1lPiBhbmQgcmVwcmVzZW50cyB0aGUgdGV4dHVhbCBjb250ZW50IG9mCiAqIGEgPGNsYXNzbmFtZT5ET01FbGVtZW50PC9jbGFzc25hbWU+IG9yIDxjbGFzc25hbWU+RE9NQXR0cjwvY2xhc3NuYW1lPi4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb210ZXh0LnBocAogKi8KY2xhc3MgRE9NVGV4dCBleHRlbmRzIERPTUNoYXJhY3RlckRhdGEKewogICAgLyoqCiAgICAgKiBIb2xkcyBhbGwgdGhlIHRleHQgb2YgbG9naWNhbGx5LWFkamFjZW50IChub3Qgc2VwYXJhdGVkIGJ5IEVsZW1lbnQsIENvbW1lbnQgb3IgUHJvY2Vzc2luZyBJbnN0cnVjdGlvbikgVGV4dCBub2Rlcy4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tdGV4dC5waHAjZG9tdGV4dC5wcm9wcy53aG9sZVRleHQKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkd2hvbGVUZXh0OwoKICAgIC8qKgogICAgICogQnJlYWtzIHRoaXMgbm9kZSBpbnRvIHR3byBub2RlcyBhdCB0aGUgc3BlY2lmaWVkIG9mZnNldAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb210ZXh0LnNwbGl0dGV4dC5waHAKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldCA8cD4KICAgICAqIFRoZSBvZmZzZXQgYXQgd2hpY2ggdG8gc3BsaXQsIHN0YXJ0aW5nIGZyb20gMC4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gRE9NVGV4dCBUaGUgbmV3IG5vZGUgb2YgdGhlIHNhbWUgdHlwZSwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBjb250ZW50IGF0IGFuZCBhZnRlciB0aGUKICAgICAqIG9mZnNldC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNwbGl0VGV4dCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdpbnQnXSwgZGVmYXVsdDogJycpXSAkb2Zmc2V0KSB7fQoKICAgIC8qKgogICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyB0ZXh0IG5vZGUgY29udGFpbnMgd2hpdGVzcGFjZQogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb210ZXh0Lmlzd2hpdGVzcGFjZWluZWxlbWVudGNvbnRlbnQucGhwCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBvbiBzdWNjZXNzIG9yIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgICNbVGVudGF0aXZlVHlwZV0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1doaXRlc3BhY2VJbkVsZW1lbnRDb250ZW50KCk6IGJvb2wge30KCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNFbGVtZW50Q29udGVudFdoaXRlc3BhY2UoKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQHBhcmFtICRjb250ZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlV2hvbGVUZXh0KCRjb250ZW50KSB7fQoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyA8Y2xhc3NuYW1lPkRPTVRleHQ8L2NsYXNzbmFtZT4gb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbXRleHQuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBbb3B0aW9uYWxdIFRoZSB2YWx1ZSBvZiB0aGUgdGV4dCBub2RlLiBJZiBub3Qgc3VwcGxpZWQgYW4gZW1wdHkgdGV4dCBub2RlIGlzIGNyZWF0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkZGF0YSA9ICcnKSB7fQp9CgovKioKICogVGhlIERPTUNvbW1lbnQgY2xhc3MgcmVwcmVzZW50cyBjb21tZW50IG5vZGVzLAogKiBjaGFyYWN0ZXJzIGRlbGltaXRlZCBieSBsdDshLS0gYW5kIC0tJmd0Oy4KICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21jb21tZW50LnBocAogKi8KY2xhc3MgRE9NQ29tbWVudCBleHRlbmRzIERPTUNoYXJhY3RlckRhdGEKewogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IERPTUNvbW1lbnQgb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbWNvbW1lbnQuY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBbb3B0aW9uYWxdIFRoZSB2YWx1ZSBvZiB0aGUgY29tbWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGRhdGEgPSAnJykge30KfQoKLyoqCiAqIEByZW1vdmVkIDguMAogKi8KY2xhc3MgRE9NVHlwZWluZm8ge30KCi8qKgogKiBAcmVtb3ZlZCA4LjAKICovCmNsYXNzIERPTVVzZXJEYXRhSGFuZGxlcgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gaGFuZGxlKCkge30KfQoKLyoqCiAqIEByZW1vdmVkIDguMAogKi8KY2xhc3MgRE9NRG9tRXJyb3Ige30KCi8qKgogKiBAcmVtb3ZlZCA4LjAKICovCmNsYXNzIERPTUVycm9ySGFuZGxlcgp7CiAgICAvKioKICAgICAqIEBwYXJhbSBET01Eb21FcnJvciAkZXJyb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhbmRsZUVycm9yKERPTURvbUVycm9yICRlcnJvcikge30KfQoKLyoqCiAqIEByZW1vdmVkIDguMAogKi8KY2xhc3MgRE9NTG9jYXRvciB7fQoKLyoqCiAqIEByZW1vdmVkIDguMAogKi8KY2xhc3MgRE9NQ29uZmlndXJhdGlvbgp7CiAgICAvKioKICAgICAqIEBwYXJhbSAkbmFtZQogICAgICogQHBhcmFtICR2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGFyYW1ldGVyKCRuYW1lLCAkdmFsdWUpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJG5hbWUgW29wdGlvbmFsXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyYW1ldGVyKCRuYW1lKSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtICRuYW1lIFtvcHRpb25hbF0KICAgICAqIEBwYXJhbSAkdmFsdWUgW29wdGlvbmFsXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FuU2V0UGFyYW1ldGVyKCRuYW1lLCAkdmFsdWUpIHt9Cn0KCi8qKgogKiBUaGUgRE9NQ2RhdGFTZWN0aW9uIGluaGVyaXRzIGZyb20gRE9NVGV4dCBmb3IgdGV4dHVyYWwgcmVwcmVzZW50YXRpb24gb2YgQ0RhdGEgY29uc3RydWN0cy4KICogQGxpbmsgaHR0cHM6Ly9zZWN1cmUucGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tY2RhdGFzZWN0aW9uLnBocAogKi8KY2xhc3MgRE9NQ2RhdGFTZWN0aW9uIGV4dGVuZHMgRE9NVGV4dAp7CiAgICAvKioKICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgQ0RBVEEgbm9kZS4gSWYgbm90IHN1cHBsaWVkLCBhbiBlbXB0eSBDREFUQSBub2RlIGlzIGNyZWF0ZWQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhIFRoZSB2YWx1ZSBvZiB0aGUgQ0RBVEEgbm9kZS4gSWYgbm90IHN1cHBsaWVkLCBhbiBlbXB0eSBDREFUQSBub2RlIGlzIGNyZWF0ZWQuCiAgICAgKiBAbGluayBodHRwczovL3NlY3VyZS5waHAubmV0L21hbnVhbC9lbi9kb21jZGF0YXNlY3Rpb24uY29uc3RydWN0LnBocAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJGRhdGEpIHt9Cn0KCi8qKgogKiBUaGUgRE9NRG9jdW1lbnRUeXBlIGNsYXNzCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZG9jdW1lbnR0eXBlLnBocAogKi8KY2xhc3MgRE9NRG9jdW1lbnRUeXBlIGV4dGVuZHMgRE9NTm9kZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKiBUaGUgcHVibGljIGlkZW50aWZpZXIgb2YgdGhlIGV4dGVybmFsIHN1YnNldC4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZG9jdW1lbnR0eXBlLnBocCNkb21kb2N1bWVudHR5cGUucHJvcHMucHVibGljaWQKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkcHVibGljSWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICogVGhlIHN5c3RlbSBpZGVudGlmaWVyIG9mIHRoZSBleHRlcm5hbCBzdWJzZXQuIFRoaXMgbWF5IGJlIGFuIGFic29sdXRlIFVSSSBvciBub3QuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50dHlwZS5waHAjZG9tZG9jdW1lbnR0eXBlLnByb3BzLnN5c3RlbWlkCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHN5c3RlbUlkOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqIFRoZSBuYW1lIG9mIERURDsgaS5lLiwgdGhlIG5hbWUgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBET0NUWVBFIGtleXdvcmQuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50dHlwZS5waHAjZG9tZG9jdW1lbnR0eXBlLnByb3BzLm5hbWUKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkbmFtZTsKCiAgICAvKioKICAgICAqIEB2YXIgRE9NTmFtZWROb2RlTWFwCiAgICAgKiBBIDxjbGFzc25hbWU+RE9NTmFtZWROb2RlTWFwPC9jbGFzc25hbWU+IGNvbnRhaW5pbmcgdGhlIGdlbmVyYWwgZW50aXRpZXMsIGJvdGggZXh0ZXJuYWwgYW5kIGludGVybmFsLCBkZWNsYXJlZCBpbiB0aGUgRFRELgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21kb2N1bWVudHR5cGUucGhwI2RvbWRvY3VtZW50dHlwZS5wcm9wcy5lbnRpdGllcwogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdET01OYW1lZE5vZGVNYXAnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRlbnRpdGllczsKCiAgICAvKioKICAgICAqIEB2YXIgRE9NTmFtZWROb2RlTWFwCiAgICAgKiBBIDxjbGFzbmFtZT5ET01OYW1lZE5vZGVNYXA8L2NsYXNzbmFtZT4gY29udGFpbmluZyB0aGUgbm90YXRpb25zIGRlY2xhcmVkIGluIHRoZSBEVEQuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50dHlwZS5waHAjZG9tZG9jdW1lbnR0eXBlLnByb3BzLm5vdGF0aW9ucwogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdET01OYW1lZE5vZGVNYXAnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRub3RhdGlvbnM7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKiBUaGUgaW50ZXJuYWwgc3Vic2V0IGFzIGEgc3RyaW5nLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuIFRoaXMgaXMgZG9lcyBub3QgY29udGFpbiB0aGUgZGVsaW1pdGluZyBzcXVhcmUgYnJhY2tldHMuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWRvY3VtZW50dHlwZS5waHAjZG9tZG9jdW1lbnR0eXBlLnByb3BzLmludGVybmFsc3Vic2V0CiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkaW50ZXJuYWxTdWJzZXQ7Cn0KCi8qKgogKiBUaGUgRE9NTm90YXRpb24gY2xhc3MKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub3RhdGlvbi5waHAKICovCmNsYXNzIERPTU5vdGF0aW9uIGV4dGVuZHMgRE9NTm9kZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21ub3RhdGlvbi5waHAjZG9tbm90YXRpb24ucHJvcHMucHVibGljaWQKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkcHVibGljSWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tbm90YXRpb24ucGhwI2RvbW5vdGF0aW9uLnByb3BzLnN5c3RlbWlkCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJHN5c3RlbUlkOwp9CgovKioKICogVGhlIERPTUVudGl0eSBjbGFzcyByZXByZXNlbnRzIGEga25vd24gZW50aXR5LCBlaXRoZXIgcGFyc2VkIG9yIHVucGFyc2VkLCBpbiBhbiBYTUwgZG9jdW1lbnQuCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZW50aXR5LnBocAogKi8KY2xhc3MgRE9NRW50aXR5IGV4dGVuZHMgRE9NTm9kZQp7CiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqIFRoZSBwdWJsaWMgaWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIGVudGl0eSBpZiBzcGVjaWZpZWQsIGFuZCBOVUxMIG90aGVyd2lzZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZW50aXR5LnBocCNkb21lbnRpdHkucHJvcHMucHVibGljaWQKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRwdWJsaWNJZDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqIFRoZSBzeXN0ZW0gaWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIGVudGl0eSBpZiBzcGVjaWZpZWQsIGFuZCBOVUxMIG90aGVyd2lzZS4gVGhpcyBtYXkgYmUgYW4KICAgICAqIGFic29sdXRlIFVSSSBvciBub3QuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWVudGl0eS5waHAjZG9tZW50aXR5LnByb3BzLnN5c3RlbWlkCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZ3xudWxsJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkc3lzdGVtSWQ7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKiBGb3IgdW5wYXJzZWQgZW50aXRpZXMsIHRoZSBuYW1lIG9mIHRoZSBub3RhdGlvbiBmb3IgdGhlIGVudGl0eS4gRm9yIHBhcnNlZCBlbnRpdGllcywgdGhpcyBpcyBOVUxMLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21lbnRpdHkucGhwI2RvbWVudGl0eS5wcm9wcy5ub3RhdGlvbm5hbWUKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRub3RhdGlvbk5hbWU7CgogICAgLyoqCiAgICAgKiBAdmFyIHN0cmluZ3xudWxsCiAgICAgKiBBbiBhdHRyaWJ1dGUgc3BlY2lmeWluZyB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgdGhpcyBlbnRpdHkgYXQgdGhlIHRpbWUgb2YgcGFyc2luZywgd2hlbiBpdCBpcyBhbiBleHRlcm5hbAogICAgICogcGFyc2VkIGVudGl0eS4gVGhpcyBpcyBOVUxMIGlmIGl0IGFuIGVudGl0eSBmcm9tIHRoZSBpbnRlcm5hbCBzdWJzZXQgb3IgaWYgaXQgaXMgbm90IGtub3duLgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21lbnRpdHkucGhwI2RvbWVudGl0eS5wcm9wcy5hY3R1YWxlbmNvZGluZwogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdzdHJpbmd8bnVsbCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGFjdHVhbEVuY29kaW5nOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmd8bnVsbAogICAgICogQW4gYXR0cmlidXRlIHNwZWNpZnlpbmcsIGFzIHBhcnQgb2YgdGhlIHRleHQgZGVjbGFyYXRpb24sIHRoZSBlbmNvZGluZyBvZiB0aGlzIGVudGl0eSwgd2hlbiBpdCBpcyBhbiBleHRlcm5hbAogICAgICogcGFyc2VkIGVudGl0eS4gVGhpcyBpcyBOVUxMIG90aGVyd2lzZS4KICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9tZW50aXR5LnBocCNkb21lbnRpdHkucHJvcHMuZW5jb2RpbmcKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRlbmNvZGluZzsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nfG51bGwKICAgICAqIEFuIGF0dHJpYnV0ZSBzcGVjaWZ5aW5nLCBhcyBwYXJ0IG9mIHRoZSB0ZXh0IGRlY2xhcmF0aW9uLCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBlbnRpdHksIHdoZW4gaXQgaXMgYW4KICAgICAqIGV4dGVybmFsIHBhcnNlZCBlbnRpdHkuIFRoaXMgaXMgTlVMTCBvdGhlcndpc2UuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWVudGl0eS5waHAjZG9tZW50aXR5LnByb3BzLnZlcnNpb24KICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nfG51bGwnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICR2ZXJzaW9uOwp9CgovKioKICogRXh0ZW5kcyBET01Ob2RlLgogKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbWVudGl0eXJlZmVyZW5jZS5waHAKICovCmNsYXNzIERPTUVudGl0eVJlZmVyZW5jZSBleHRlbmRzIERPTU5vZGUKewogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IERPTUVudGl0eVJlZmVyZW5jZSBvYmplY3QKICAgICAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZW50aXR5cmVmZXJlbmNlLmNvbnN0cnVjdC5waHAKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudGl0eSByZWZlcmVuY2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdzdHJpbmcnXSwgZGVmYXVsdDogJycpXSAkbmFtZSkge30KfQoKLyoqCiAqIFRoZSBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gY2xhc3MKICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21wcm9jZXNzaW5naW5zdHJ1Y3Rpb24ucGhwCiAqLwpjbGFzcyBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gZXh0ZW5kcyBET01Ob2RlCnsKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21wcm9jZXNzaW5naW5zdHJ1Y3Rpb24ucGhwI2RvbXByb2Nlc3NpbmdpbnN0cnVjdGlvbi5wcm9wcy50YXJnZXQKICAgICAqLwogICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4xJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0KICAgIHB1YmxpYyAkdGFyZ2V0OwoKICAgIC8qKgogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9jbGFzcy5kb21wcm9jZXNzaW5naW5zdHJ1Y3Rpb24ucGhwI2RvbXByb2Nlc3NpbmdpbnN0cnVjdGlvbi5wcm9wcy5kYXRhCiAgICAgKi8KICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGRhdGE7CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IDxjbGFzc25hbWU+RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uPC9jbGFzc25hbWU+IG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb21wcm9jZXNzaW5naW5zdHJ1Y3Rpb24uY29uc3RydWN0LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgdGFnIG5hbWUgb2YgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWx1ZSBbb3B0aW9uYWxdIFRoZSB2YWx1ZSBvZiB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRuYW1lLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICR2YWx1ZSA9ICcnCiAgICApIHt9Cn0KCmNsYXNzIERPTVN0cmluZ0V4dGVuZAp7CiAgICAvKioKICAgICAqIEBwYXJhbSAkb2Zmc2V0MzIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpbmRPZmZzZXQxNigkb2Zmc2V0MzIpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJG9mZnNldDE2CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kT2Zmc2V0MzIoJG9mZnNldDE2KSB7fQp9CgovKioKICogVGhlIERPTVhQYXRoIGNsYXNzIChzdXBwb3J0cyBYUGF0aCAxLjApCiAqIEBsaW5rIGh0dHBzOi8vcGhwLm5ldC9tYW51YWwvZW4vY2xhc3MuZG9teHBhdGgucGhwCiAqLwpjbGFzcyBET01YUGF0aAp7CiAgICAvKioKICAgICAqIEB2YXIgRE9NRG9jdW1lbnQKICAgICAqCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2NsYXNzLmRvbXhwYXRoLnBocCNkb214cGF0aC5wcm9wcy5kb2N1bWVudAogICAgICovCiAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjEnID0+ICdET01Eb2N1bWVudCddLCBkZWZhdWx0OiAnJyldCiAgICBwdWJsaWMgJGRvY3VtZW50OwoKICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMScgPT4gJ2Jvb2wnXSwgZGVmYXVsdDogJycpXQogICAgcHVibGljICRyZWdpc3Rlck5vZGVOYW1lc3BhY2VzOwoKICAgIC8qKgogICAgICogQ3JlYXRlcyBhIG5ldyA8Y2xhc3NuYW1lPkRPTVhQYXRoPC9jbGFzc25hbWU+IG9iamVjdAogICAgICogQGxpbmsgaHR0cHM6Ly9waHAubmV0L21hbnVhbC9lbi9kb214cGF0aC5jb25zdHJ1Y3QucGhwCiAgICAgKiBAcGFyYW0gRE9NRG9jdW1lbnQgJGRvY3VtZW50IFRoZSA8Y2xhc3NuYW1lPkRPTURvY3VtZW50PC9jbGFzc25hbWU+IGFzc29jaWF0ZWQgd2l0aCB0aGUgPGNsYXNzbmFtZT5ET01YUGF0aDwvY2xhc3NuYW1lPi4KICAgICAqIEBwYXJhbSBib29sICRyZWdpc3Rlck5vZGVOUyBbb3B0aW9uYWxdIGFsbG93IGdsb2JhbCBmbGFnIHRvIGNvbmZpZ3VyZSBxdWVyeSgpIG9yIGV2YWx1YXRlKCkgY2FsbHMuIFNpbmNlIDguMC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KERPTURvY3VtZW50ICRkb2N1bWVudCwgI1tQaHBTdG9ybVN0dWJzRWxlbWVudEF2YWlsYWJsZShmcm9tOiAnOC4wJyldIGJvb2wgJHJlZ2lzdGVyTm9kZU5TID0gdHJ1ZSkge30KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyB0aGUgbmFtZXNwYWNlIHdpdGggdGhlIDxjbGFzc25hbWU+RE9NWFBhdGg8L2NsYXNzbmFtZT4gb2JqZWN0CiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbXhwYXRoLnJlZ2lzdGVybmFtZXNwYWNlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkcHJlZml4IDxwPgogICAgICogVGhlIHByZWZpeC4KICAgICAqIDwvcD4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWVzcGFjZSA8cD4KICAgICAqIFRoZSBVUkkgb2YgdGhlIG5hbWVzcGFjZS4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gYm9vbCB0cnVlIG9uIHN1Y2Nlc3Mgb3IgZmFsc2Ugb24gZmFpbHVyZS4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHJlZ2lzdGVyTmFtZXNwYWNlKAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICRwcmVmaXgsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gJG5hbWVzcGFjZQogICAgKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogRXZhbHVhdGVzIHRoZSBnaXZlbiBYUGF0aCBleHByZXNzaW9uCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbXhwYXRoLnF1ZXJ5LnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZXhwcmVzc2lvbiA8cD4KICAgICAqIFRoZSBYUGF0aCBleHByZXNzaW9uIHRvIGV4ZWN1dGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkY29udGV4dE5vZGUgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBvcHRpb25hbCBjb250ZXh0bm9kZSBjYW4gYmUgc3BlY2lmaWVkIGZvcgogICAgICogZG9pbmcgcmVsYXRpdmUgWFBhdGggcXVlcmllcy4gQnkgZGVmYXVsdCwgdGhlIHF1ZXJpZXMgYXJlIHJlbGF0aXZlIHRvCiAgICAgKiB0aGUgcm9vdCBlbGVtZW50LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGJvb2wgJHJlZ2lzdGVyTm9kZU5TIFtvcHRpb25hbF0gPHA+VGhlIG9wdGlvbmFsIHJlZ2lzdGVyTm9kZU5TIGNhbiBiZSBzcGVjaWZpZWQgdG8KICAgICAqIGRpc2FibGUgYXV0b21hdGljIHJlZ2lzdHJhdGlvbiBvZiB0aGUgY29udGV4dCBub2RlLjwvcD4KICAgICAqIEByZXR1cm4gRE9NTm9kZUxpc3R8ZmFsc2UgYSBET01Ob2RlTGlzdCBjb250YWluaW5nIGFsbCBub2RlcyBtYXRjaGluZwogICAgICogdGhlIGdpdmVuIFhQYXRoIGV4cHJlc3Npb24uIEFueSBleHByZXNzaW9uIHdoaWNoIGRvZXMgbm90IHJldHVybiBub2RlcwogICAgICogd2lsbCByZXR1cm4gYW4gZW1wdHkgRE9NTm9kZUxpc3QuIFRoZSByZXR1cm4gaXMgZmFsc2UgaWYgdGhlIGV4cHJlc3Npb24KICAgICAqIGlzIG1hbGZvcm1lZCBvciB0aGUgY29udGV4dG5vZGUgaXMgaW52YWxpZC4KICAgICAqLwogICAgI1tUZW50YXRpdmVUeXBlXQogICAgcHVibGljIGZ1bmN0aW9uIHF1ZXJ5KAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ3N0cmluZyddLCBkZWZhdWx0OiAnJyldICNbTGFuZ3VhZ2UoJ1hQYXRoJyldICRleHByZXNzaW9uLAogICAgICAgICNbTGFuZ3VhZ2VMZXZlbFR5cGVBd2FyZShbJzguMCcgPT4gJ0RPTU5vZGV8bnVsbCddLCBkZWZhdWx0OiAnJyldICRjb250ZXh0Tm9kZSA9IG51bGwsCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnYm9vbCddLCBkZWZhdWx0OiAnJyldICRyZWdpc3Rlck5vZGVOUyA9IHRydWUKICAgICk6IG1peGVkIHt9CgogICAgLyoqCiAgICAgKiBFdmFsdWF0ZXMgdGhlIGdpdmVuIFhQYXRoIGV4cHJlc3Npb24gYW5kIHJldHVybnMgYSB0eXBlZCByZXN1bHQgaWYgcG9zc2libGUuCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbXhwYXRoLmV2YWx1YXRlLnBocAogICAgICogQHBhcmFtIHN0cmluZyAkZXhwcmVzc2lvbiA8cD4KICAgICAqIFRoZSBYUGF0aCBleHByZXNzaW9uIHRvIGV4ZWN1dGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcGFyYW0gRE9NTm9kZSAkY29udGV4dE5vZGUgW29wdGlvbmFsXSA8cD4KICAgICAqIFRoZSBvcHRpb25hbCBjb250ZXh0bm9kZSBjYW4gYmUgc3BlY2lmaWVkIGZvcgogICAgICogZG9pbmcgcmVsYXRpdmUgWFBhdGggcXVlcmllcy4gQnkgZGVmYXVsdCwgdGhlIHF1ZXJpZXMgYXJlIHJlbGF0aXZlIHRvCiAgICAgKiB0aGUgcm9vdCBlbGVtZW50LgogICAgICogPC9wPgogICAgICogQHBhcmFtIGJvb2wgJHJlZ2lzdGVyTm9kZU5TIFtvcHRpb25hbF0KICAgICAqIDxwPgogICAgICogVGhlIG9wdGlvbmFsIHJlZ2lzdGVyTm9kZU5TIGNhbiBiZSBzcGVjaWZpZWQgdG8gZGlzYWJsZSBhdXRvbWF0aWMgcmVnaXN0cmF0aW9uIG9mIHRoZSBjb250ZXh0IG5vZGUuCiAgICAgKiA8L3A+CiAgICAgKiBAcmV0dXJuIG1peGVkIGEgdHlwZWQgcmVzdWx0IGlmIHBvc3NpYmxlIG9yIGEgRE9NTm9kZUxpc3QKICAgICAqIGNvbnRhaW5pbmcgYWxsIG5vZGVzIG1hdGNoaW5nIHRoZSBnaXZlbiBYUGF0aCBleHByZXNzaW9uLgogICAgICovCiAgICAjW1RlbnRhdGl2ZVR5cGVdCiAgICBwdWJsaWMgZnVuY3Rpb24gZXZhbHVhdGUoCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnc3RyaW5nJ10sIGRlZmF1bHQ6ICcnKV0gI1tMYW5ndWFnZSgnWFBhdGgnKV0gJGV4cHJlc3Npb24sCiAgICAgICAgI1tMYW5ndWFnZUxldmVsVHlwZUF3YXJlKFsnOC4wJyA9PiAnRE9NTm9kZXxudWxsJ10sIGRlZmF1bHQ6ICcnKV0gJGNvbnRleHROb2RlID0gbnVsbCwKICAgICAgICAjW0xhbmd1YWdlTGV2ZWxUeXBlQXdhcmUoWyc4LjAnID0+ICdib29sJ10sIGRlZmF1bHQ6ICcnKV0gJHJlZ2lzdGVyTm9kZU5TID0gdHJ1ZQogICAgKTogbWl4ZWQge30KCiAgICAvKioKICAgICAqIFJlZ2lzdGVyIFBIUCBmdW5jdGlvbnMgYXMgWFBhdGggZnVuY3Rpb25zCiAgICAgKiBAbGluayBodHRwczovL3BocC5uZXQvbWFudWFsL2VuL2RvbXhwYXRoLnJlZ2lzdGVycGhwZnVuY3Rpb25zLnBocAogICAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkcmVzdHJpY3QgW29wdGlvbmFsXSA8cD4KICAgICAqIFVzZSB0aGlzIHBhcmFtZXRlciB0byBvbmx5IGFsbG93IGNlcnRhaW4gZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBmcm9tIFhQYXRoLgogICAgICogPC9wPgogICAgICogPHA+CiAgICAgKiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIChhIGZ1bmN0aW9uIG5hbWUpIG9yCiAgICAgKiBhbiBhcnJheSBvZiBmdW5jdGlvbiBuYW1lcy4KICAgICAqIDwvcD4KICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXJQaHBGdW5jdGlvbnMoJHJlc3RyaWN0ID0gbnVsbCkge30KCiAgICAvKioKICAgICAqIEBzaW5jZSA4LjQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlZ2lzdGVyUGhwRnVuY3Rpb25OUyhzdHJpbmcgJG5hbWVzcGFjZVVSSSwgc3RyaW5nICRuYW1lLCBjYWxsYWJsZSAkY2FsbGFibGUpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC40CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcXVvdGUoc3RyaW5nICRzdHIpOiBzdHJpbmcge30KfQoKLyoqCiAqIEBwcm9wZXJ0eS1yZWFkIERPTUVsZW1lbnR8bnVsbCAkZmlyc3RFbGVtZW50Q2hpbGQKICogQHByb3BlcnR5LXJlYWQgRE9NRWxlbWVudHxudWxsICRsYXN0RWxlbWVudENoaWxkCiAqIEBwcm9wZXJ0eS1yZWFkIGludCAkY2hpbGRFbGVtZW50Q291bnQKICoKICogQHNpbmNlIDguMAogKi8KaW50ZXJmYWNlIERPTVBhcmVudE5vZGUKewogICAgLyoqCiAgICAgKiBBcHBlbmRzIG9uZSBvciBtYW55IG5vZGVzIHRvIHRoZSBsaXN0IG9mIGNoaWxkcmVuIGJlaGluZCB0aGUgbGFzdAogICAgICogY2hpbGQgbm9kZS4KICAgICAqCiAgICAgKiBAcGFyYW0gRE9NTm9kZXxzdHJpbmd8bnVsbCAuLi4kbm9kZXMKICAgICAqIEByZXR1cm4gdm9pZAogICAgICogQHNpbmNlIDguMAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKC4uLiRub2Rlcyk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBQcmVwZW5kcyBvbmUgb3IgbWFueSBub2RlcyB0byB0aGUgbGlzdCBvZiBjaGlsZHJlbiBiZWZvcmUgdGhlIGZpcnN0CiAgICAgKiBjaGlsZCBub2RlLgogICAgICoKICAgICAqIEBwYXJhbSBET01Ob2RlfHN0cmluZ3xudWxsIC4uLiRub2RlcwogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAc2luY2UgOC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcmVwZW5kKC4uLiRub2Rlcyk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBAc2luY2UgOC4zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlQ2hpbGRyZW4oLi4uJG5vZGVzKTogdm9pZDsKfQoKLyoqCiAqIEBwcm9wZXJ0eS1yZWFkIERPTUVsZW1lbnR8bnVsbCAkcHJldmlvdXNFbGVtZW50U2libGluZwogKiBAcHJvcGVydHktcmVhZCBET01FbGVtZW50fG51bGwgJG5leHRFbGVtZW50U2libGluZwogKgogKiBAc2luY2UgOC4wCiAqLwppbnRlcmZhY2UgRE9NQ2hpbGROb2RlCnsKICAgIC8qKgogICAgICogQWN0cyBhcyBhIHNpbXBsZXIgdmVyc2lvbiBvZiB7QHNlZSBET01Ob2RlOjpyZW1vdmVDaGlsZCgpfS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEBzaW5jZSA4LjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgpOiB2b2lkOwoKICAgIC8qKgogICAgICogQWRkIHBhc3NlZCBub2RlKHMpIGJlZm9yZSB0aGUgY3VycmVudCBub2RlCiAgICAgKgogICAgICogQHBhcmFtIERPTU5vZGV8c3RyaW5nfG51bGwgLi4uJG5vZGVzCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEBzaW5jZSA4LjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGJlZm9yZSguLi4kbm9kZXMpOiB2b2lkOwoKICAgIC8qKgogICAgICogQWRkIHBhc3NlZCBub2RlKHMpIGFmdGVyICB0aGUgY3VycmVudCBub2RlCiAgICAgKgogICAgICogQHBhcmFtIERPTU5vZGV8c3RyaW5nfG51bGwgLi4uJG5vZGVzCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEBzaW5jZSA4LjAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFmdGVyKC4uLiRub2Rlcyk6IHZvaWQ7CgogICAgLyoqCiAgICAgKiBSZXBsYWNlIGN1cnJlbnQgbm9kZSB3aXRoIG5ldyBub2RlKHMpLCBhIGNvbWJpbmF0aW9uCiAgICAgKiBvZiB7QHNlZSBET01DaGlsZE5vZGU6OnJlbW92ZSgpfSArIHtAc2VlIERPTUNoaWxkTm9kZTo6YXBwZW5kKCl9LgogICAgICoKICAgICAqIEBwYXJhbSBET01Ob2RlfHN0cmluZ3xudWxsIC4uLiRub2RlcwogICAgICogQHJldHVybiB2b2lkCiAgICAgKiBAc2luY2UgOC4wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXBsYWNlV2l0aCguLi4kbm9kZXMpOiB2b2lkOwp9Cjw/cGhwCgpuYW1lc3BhY2UgRG9tOwoKLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIEltcGxlbWVudGF0aW9uIHt9CgovKioKICogQHNpbmNlIDguNAogKi8KZmluYWwgcmVhZG9ubHkgY2xhc3MgTmFtZXNwYWNlSW5mbyB7fQoKLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIE5vZGVMaXN0IGltcGxlbWVudHMgXEl0ZXJhdG9yQWdncmVnYXRlLCBcQ291bnRhYmxlIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpjbGFzcyBOYW1lZE5vZGVNYXAgaW1wbGVtZW50cyBcSXRlcmF0b3JBZ2dyZWdhdGUsIFxDb3VudGFibGUge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIER0ZE5hbWVkTm9kZU1hcCBpbXBsZW1lbnRzIFxJdGVyYXRvckFnZ3JlZ2F0ZSwgXENvdW50YWJsZSB7fQovKioKICogQHNpbmNlIDguNAogKi8KY2xhc3MgSFRNTENvbGxlY3Rpb24gaW1wbGVtZW50cyBcSXRlcmF0b3JBZ2dyZWdhdGUsIFxDb3VudGFibGUge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmZpbmFsIGNsYXNzIFhQYXRoIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpmaW5hbCBjbGFzcyBUb2tlbkxpc3QgaW1wbGVtZW50cyBcSXRlcmF0b3JBZ2dyZWdhdGUsIFxDb3VudGFibGUge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmludGVyZmFjZSBQYXJlbnROb2RlIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwppbnRlcmZhY2UgQ2hpbGROb2RlIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwplbnVtIEFkamFjZW50UG9zaXRpb24gaW1wbGVtZW50cyBcQmFja2VkRW51bSwgXFVuaXRFbnVtCnsKICAgIGNhc2UgQmVmb3JlQmVnaW4gPSAiYmVmb3JlYmVnaW4iOwogICAgY2FzZSBBZnRlckJlZ2luID0gImFmdGVyYmVnaW4iOwogICAgY2FzZSBCZWZvcmVFbmQgPSAiYmVmb3JlZW5kIjsKICAgIGNhc2UgQWZ0ZXJFbmQgPSAiYWZ0ZXJlbmQiOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzZXMoKTogYXJyYXkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb20oc3RyaW5nfGludCAkdmFsdWUpOiBzdGF0aWMge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHRyeUZyb20oc3RyaW5nfGludCAkdmFsdWUpOiA/c3RhdGljIHt9Cn0KLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIE5vZGUge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIERvY3VtZW50RnJhZ21lbnQgZXh0ZW5kcyBOb2RlIGltcGxlbWVudHMgUGFyZW50Tm9kZSB7fQovKioKICogQHNpbmNlIDguNAogKi8KY2xhc3MgRG9jdW1lbnQgZXh0ZW5kcyBOb2RlIGltcGxlbWVudHMgUGFyZW50Tm9kZSB7fQovKioKICogQHNpbmNlIDguNAogKi8KZmluYWwgY2xhc3MgSFRNTERvY3VtZW50IGV4dGVuZHMgRG9jdW1lbnQge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmZpbmFsIGNsYXNzIFhNTERvY3VtZW50IGV4dGVuZHMgRG9jdW1lbnQge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIENoYXJhY3RlckRhdGEgZXh0ZW5kcyBOb2RlIGltcGxlbWVudHMgQ2hpbGROb2RlIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpjbGFzcyBBdHRyIGV4dGVuZHMgTm9kZSB7fQovKioKICogQHNpbmNlIDguNAogKi8KY2xhc3MgRWxlbWVudCBleHRlbmRzIE5vZGUgaW1wbGVtZW50cyBQYXJlbnROb2RlLCBDaGlsZE5vZGUge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIEhUTUxFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7fQovKioKICogQHNpbmNlIDguNAogKi8KY2xhc3MgVGV4dCBleHRlbmRzIENoYXJhY3RlckRhdGEge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIENvbW1lbnQgZXh0ZW5kcyBDaGFyYWN0ZXJEYXRhIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpjbGFzcyBDREFUQVNlY3Rpb24gZXh0ZW5kcyBUZXh0IHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpjbGFzcyBEb2N1bWVudFR5cGUgZXh0ZW5kcyBOb2RlIGltcGxlbWVudHMgQ2hpbGROb2RlIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpjbGFzcyBOb3RhdGlvbiBleHRlbmRzIE5vZGUge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIEVudGl0eSBleHRlbmRzIE5vZGUge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIEVudGl0eVJlZmVyZW5jZSBleHRlbmRzIE5vZGUge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBleHRlbmRzIENoYXJhY3RlckRhdGEge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIFNxbGl0ZSB7fQovKioKICogQHNpbmNlIDguNAogKi8KY2xhc3MgUmFuZG9tRXJyb3Ige30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIEJyb2tlblJhbmRvbUVuZ2luZUVycm9yIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpjbGFzcyBSYW5kb21FeGNlcHRpb24ge30KLyoqCiAqIEBzaW5jZSA4LjQKICovCmNsYXNzIE15c3FsIHt9Ci8qKgogKiBAc2luY2UgOC40CiAqLwpmdW5jdGlvbiBpbXBvcnRfc2ltcGxleG1sKG9iamVjdCAkbm9kZSk6IFxEb21cRWxlbWVudCB7fQoKLyoqCiAqIEBzaW5jZSA4LjQKICovCmNvbnN0IElOREVYX1NJWkVfRVJSID0gMSwgU1RSSU5HX1NJWkVfRVJSID0gMiwgSElFUkFSQ0hZX1JFUVVFU1RfRVJSID0gMywgV1JPTkdfRE9DVU1FTlRfRVJSID0gNCwgSU5WQUxJRF9DSEFSQUNURVJfRVJSID0gNTsKLyoqCiAqIEBzaW5jZSA4LjQKICovCmNvbnN0IE5PX0RBVEFfQUxMT1dFRF9FUlIgPSA2LCBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgPSA3LCBOT1RfRk9VTkRfRVJSID0gOCwgTk9UX1NVUFBPUlRFRF9FUlIgPSA5LCBJTlVTRV9BVFRSSUJVVEVfRVJSID0gMTA7Ci8qKgogKiBAc2luY2UgOC40CiAqLwpjb25zdCBJTlZBTElEX1NUQVRFX0VSUiA9IDExLCBTWU5UQVhfRVJSID0gMTIsIElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiA9IDEzLCBOQU1FU1BBQ0VfRVJSID0gMTQsIFZBTElEQVRJT05fRVJSID0gMTYsIEhUTUxfTk9fREVGQVVMVF9OUyA9IDIxNDc0ODM2NDg7Cjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWw7Cgp1c2UgQ2xvc3VyZTsKCi8qKgogKiBTaGFsbCB1c2UgdGhlIHByb3ZpZGVkIGZpbGUgdG8gYm9vdHN0cmFwIGFsbCBydW50aW1lcyBjcmVhdGVkIGZvciBhdXRvbWF0aWMgc2NoZWR1bGluZyB2aWEgQHNlZSBydW4oKS4KICoKICogQHBhcmFtIHN0cmluZyAkZmlsZQogKgogKiBAdGhyb3dzIFJ1bnRpbWVcRXJyb3JcQm9vdHN0cmFwIGlmIHByZXZpb3VzbHkgY2FsbGVkIGZvciB0aGlzIHByb2Nlc3MuCiAqIEB0aHJvd3MgUnVudGltZVxFcnJvclxCb290c3RyYXAgaWYgY2FsbGVkIGFmdGVyIEBzZWUgcnVuKCkuCiAqLwpmdW5jdGlvbiBib290c3RyYXAoc3RyaW5nICRmaWxlKTogdm9pZCB7fQoKLyoqCiAqIEBzZWUgUnVudGltZTo6cnVuKCkgZm9yIG1vcmUgZGV0YWlscwogKiBAbGluayBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9wYXJhbGxlbC5ydW4KICogQHBhcmFtIENsb3N1cmUgJHRhc2sKICogQHBhcmFtIGFycmF5ICAgJGFyZ3YKICoKICogIyMjIEF1dG9tYXRpYyBTY2hlZHVsaW5nCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBJZiBhIFxwYXJhbGxlbFxSdW50aW1lIGludGVybmFsbHkgY3JlYXRlZCBhbmQgY2FjaGVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBwYXJhbGxlbFxydW4oKSBpcyBpZGxlLCBpdCB3aWxsIGJlIHVzZWQKICogICAgIHRvIGV4ZWN1dGUgdGhlIHRhc2suIElmIG5vIFxwYXJhbGxlbFxSdW50aW1lIGlzIGlkbGUgcGFyYWxsZWwgd2lsbCBjcmVhdGUgYW5kIGNhY2hlIGEgXHBhcmFsbGVsXFJ1bnRpbWUuCiAqCiAqIE5vdGU6IFxwYXJhbGxlbFxSdW50aW1lIG9iamVjdHMgY3JlYXRlZCBieSB0aGUgcHJvZ3JhbW1lciBhcmUgbm90IHVzZWQgZm9yIGF1dG9tYXRpYyBzY2hlZHVsaW5nLgogKgogKiBAcmV0dXJuIEZ1dHVyZXxudWxsCiAqCiAqIEB0aHJvd3MgUnVudGltZVxFcnJvclxDbG9zZWQgaWYgXHBhcmFsbGVsXFJ1bnRpbWUgd2FzIGNsb3NlZC4KICogQHRocm93cyBSdW50aW1lXEVycm9yXElsbGVnYWxGdW5jdGlvbiBpZiB0YXNrIGlzIGEgY2xvc3VyZSBjcmVhdGVkIGZyb20gYW4gaW50ZXJuYWwgZnVuY3Rpb24uCiAqIEB0aHJvd3MgUnVudGltZVxFcnJvclxJbGxlZ2FsSW5zdHJ1Y3Rpb24gaWYgdGFzayBjb250YWlucyBpbGxlZ2FsIGluc3RydWN0aW9ucy4KICogQHRocm93cyBSdW50aW1lXEVycm9yXElsbGVnYWxQYXJhbWV0ZXIgaWYgdGFzayBhY2NlcHRzIG9yIGFyZ3YgY29udGFpbnMgaWxsZWdhbCB2YXJpYWJsZXMuCiAqIEB0aHJvd3MgUnVudGltZVxFcnJvclxJbGxlZ2FsUmV0dXJuIGlmIHRhc2sgcmV0dXJucyBpbGxlZ2FsbHkuCiAqLwpmdW5jdGlvbiBydW4oQ2xvc3VyZSAkdGFzaywgYXJyYXkgJGFyZ3YgPSBudWxsKTogP0Z1dHVyZSB7fQoKI2lmZGVmIFpFTkRfREVCVUcKLyoqCiAqIEByZXR1cm4gaW50CiAqLwpmdW5jdGlvbiBjb3VudCgpOiBpbnQge30KI2VuZGlmCjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWw7Cgp1c2UgQ2xvc3VyZTsKCi8qKgogKiBFYWNoIHJ1bnRpbWUgcmVwcmVzZW50cyBhIHNpbmdsZSBQSFAgdGhyZWFkLCB0aGUgdGhyZWFkIGlzIGNyZWF0ZWQgKGFuZCBib290c3RyYXBwZWQpIHVwb24gY29uc3RydWN0aW9uLiBUaGUgdGhyZWFkCiAqIHRoZW4gd2FpdHMgZm9yIHRhc2tzIHRvIGJlIHNjaGVkdWxlZDogU2NoZWR1bGVkIHRhc2tzIHdpbGwgYmUgZXhlY3V0ZWQgRklGTyBhbmQgdGhlbiB0aGUgdGhyZWFkIHdpbGwgcmVzdW1lIHdhaXRpbmcKICogdW50aWwgbW9yZSB0YXNrcyBhcmUgc2NoZWR1bGVkLCBvciBpdCdzIGNsb3NlZCwga2lsbGVkLCBvciBkZXN0cm95ZWQgYnkgdGhlIG5vcm1hbCBzY29waW5nIHJ1bGVzIG9mIFBIUCBvYmplY3RzLgogKgogKiBXYXJuaW5nOiBXaGVuIGEgcnVudGltZSBpcyBkZXN0cm95ZWQgYnkgdGhlIG5vcm1hbCBzY29waW5nIHJ1bGVzIG9mIFBIUCBvYmplY3RzLCBpdCB3aWxsIGZpcnN0IGV4ZWN1dGUgYWxsIG9mIHRoZQogKiB0YXNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkLCBhbmQgYmxvY2sgd2hpbGUgZG9pbmcgc28uCiAqCiAqIFdoZW4gYSBuZXcgcnVudGltZSBpcyBjcmVhdGVkLCBpdCBkb2VzIG5vdCBzaGFyZSBjb2RlIHdpdGggdGhlIHRocmVhZCAob3IgcHJvY2VzcykgdGhhdCBjcmVhdGVkIGl0LiBUaGlzIG1lYW5zIGl0CiAqIGRvZXNuJ3QgaGF2ZSB0aGUgc2FtZSBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgbG9hZGVkLCBub3IgdGhlIHNhbWUgYXV0b2xvYWRlciBzZXQuIEluIHNvbWUgY2FzZXMsIGEgdmVyeSBsaWdodHdlaWdodAogKiBydW50aW1lIGlzIGRlc2lyYWJsZSBiZWNhdXNlIHRoZSB0YXNrcyB0aGF0IHdpbGwgYmUgc2NoZWR1bGVkIGRvIG5vdCBuZWVkIGFjY2VzcyB0byB0aGUgY29kZSBpbiB0aGUgcGFyZW50IHRocmVhZC4KICogSW4gdGhvc2UgY2FzZXMgd2hlcmUgdGhlIHRhc2tzIGRvIG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lIGNvZGUsIGl0IGlzIGVub3VnaCB0byBzZXQgYW4gYXV0b2xvYWRlciBhcyB0aGUgYm9vdHN0cmFwLgogKgogKiBOb3RlOiBwcmVsb2FkaW5nIG1heSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggcGFyYWxsZWwsIGluIHRoaXMgY2FzZSBwcmVsb2FkZWQgY29kZSBpcyBhdmFpbGFibGUgd2l0aG91dAogKiBib290c3RyYXBwaW5nCiAqLwpmaW5hbCBjbGFzcyBSdW50aW1lCnsKICAgIC8qIENyZWF0ZSAqLwoKICAgIC8qKgogICAgICogU2hhbGwgY29uc3RydWN0IGEgbmV3IHJ1bnRpbWUgd2l0aG91dCBib290c3RyYXBwaW5nLgogICAgICogU2hhbGwgY29uc3RydWN0IGEgYm9vdHN0cmFwcGVkIHJ1bnRpbWUuCiAgICAgKgogICAgICogQHBhcmFtIG51bGx8c3RyaW5nICRib290c3RyYXAgVGhlIGxvY2F0aW9uIG9mIGEgYm9vdHN0cmFwIGZpbGUsIGdlbmVyYWxseSBhbiBhdXRvbG9hZGVyLgogICAgICoKICAgICAqIEB0aHJvd3MgUnVudGltZVxFcnJvciBpZiB0aHJlYWQgY291bGQgbm90IGJlIGNyZWF0ZWQKICAgICAqIEB0aHJvd3MgUnVudGltZVxFcnJvclxCb290c3RyYXAgaWYgYm9vdHN0cmFwcGluZyBmYWlsZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9zdHJpbmcgJGJvb3RzdHJhcCA9IG51bGwpIHt9CgogICAgLyogRXhlY3V0ZSAqLwoKICAgIC8qKgogICAgICogU2hhbGwgc2NoZWR1bGUgdGFzayBmb3IgZXhlY3V0aW9uIGluIHBhcmFsbGVsLCBwYXNzaW5nIGFyZ3YgYXQgZXhlY3V0aW9uIHRpbWUuCiAgICAgKgogICAgICogQHBhcmFtIENsb3N1cmUgJHRhc2sgICAgQSBDbG9zdXJlIHdpdGggc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWNzLgogICAgICogQHBhcmFtIG51bGx8YXJyYXkgJGFyZ3YgQW4gYXJyYXkgb2YgYXJndW1lbnRzIHdpdGggc3BlY2lmaWMgY2hhcmFjdGVyaXN0aWNzIHRvIGJlIHBhc3NlZCB0byB0YXNrIGF0IGV4ZWN1dGlvbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgdGltZS4KICAgICAqCiAgICAgKiAjIyMgVGFzayBDaGFyYWN0ZXJpc3RpY3MKICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgKiBDbG9zdXJlcyBzY2hlZHVsZWQgZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbiBtdXN0IG5vdDoKICAgICAqICAtIGFjY2VwdCBvciByZXR1cm4gYnkgcmVmZXJlbmNlCiAgICAgKiAgLSBhY2NlcHQgb3IgcmV0dXJuIGludGVybmFsIG9iamVjdHMgKHNlZSBub3RlcykKICAgICAqICAtIGV4ZWN1dGUgYSBsaW1pdGVkIHNldCBvZiBpbnN0cnVjdGlvbnMKICAgICAqCiAgICAgKiBJbnN0cnVjdGlvbnMgcHJvaGliaXRlZCBpbiBDbG9zdXJlcyBpbnRlbmRlZCBmb3IgcGFyYWxsZWwgZXhlY3V0aW9uIGFyZToKICAgICAqICAtIHlpZWxkCiAgICAgKiAgLSB1c2UgYnktcmVmZXJlbmNlCiAgICAgKiAgLSBkZWNsYXJlIGNsYXNzCiAgICAgKiAgLSBkZWNsYXJlIG5hbWVkIGZ1bmN0aW9uCiAgICAgKgogICAgICogTm90ZTogTmVzdGVkIGNsb3N1cmVzIG1heSB5aWVsZCBvciB1c2UgYnktcmVmZXJlbmNlLCBidXQgbXVzdCBub3QgY29udGFpbiBjbGFzcyBvciBuYW1lZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCiAgICAgKiBOb3RlOiBObyBpbnN0cnVjdGlvbnMgYXJlIHByb2hpYml0ZWQgaW4gdGhlIGZpbGVzIHdoaWNoIHRoZSB0YXNrIG1heSBpbmNsdWRlLgogICAgICoKICAgICAqICMjIyBBcmd1bWVudHMgQ2hhcmFjdGVyaXN0aWNzCiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICogQXJndW1lbnRzIG11c3Qgbm90OgogICAgICogIC0gY29udGFpbiByZWZlcmVuY2VzCiAgICAgKiAgLSBjb250YWluIHJlc291cmNlcwogICAgICogIC0gY29udGFpbiBpbnRlcm5hbCBvYmplY3RzIChzZWUgbm90ZXMpCiAgICAgKgogICAgICogTm90ZTogSW4gdGhlIGNhc2Ugb2YgZmlsZSBzdHJlYW0gcmVzb3VyY2VzLCB0aGUgcmVzb3VyY2Ugd2lsbCBiZSBjYXN0IHRvIHRoZSBmaWxlIGRlc2NyaXB0b3IgYW5kIHBhc3NlZCBhcyBpbnQKICAgICAqICAgICB3aGVyZSBwb3NzaWJsZSwgdGhpcyBpcyB1bnN1cHBvcnRlZCBvbiBXaW5kb3dzCiAgICAgKgogICAgICogIyMjIEludGVybmFsIE9iamVjdHMgTm90ZXMKICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgKiBJbnRlcm5hbCBvYmplY3RzIGdlbmVyYWxseSB1c2UgYSBjdXN0b20gc3RydWN0dXJlIHdoaWNoIGNhbm5vdCBiZSBjb3BpZWQgYnkgdmFsdWUgc2FmZWx5LCBQSFAgY3VycmVudGx5IGxhY2tzCiAgICAgKiAgICAgdGhlIG1lY2hhbmljcyB0byBkbyB0aGlzICh3aXRob3V0IHNlcmlhbGl6YXRpb24pIGFuZCBzbyBvbmx5IG9iamVjdHMgdGhhdCBkbyBub3QgdXNlIGEgY3VzdG9tIHN0cnVjdHVyZSBtYXkKICAgICAqICAgICBiZSBzaGFyZWQuCiAgICAgKgogICAgICogU29tZSBpbnRlcm5hbCBvYmplY3RzIGRvIG5vdCB1c2UgYSBjdXN0b20gc3RydWN0dXJlLCBmb3IgZXhhbXBsZSBAc2VlIFxwYXJhbGxlbFxFdmVudHNcRXZlbnQgYW5kIHNvIG1heSBiZQogICAgICogICAgIHNoYXJlZC4gQ2xvc3VyZXMgYXJlIGEgc3BlY2lhbCBraW5kIG9mIGludGVybmFsIG9iamVjdCBhbmQgc3VwcG9ydCBiZWluZyBjb3BpZWQgYnkgdmFsdWUsIGFuZCBzbyBtYXkgYmUKICAgICAqICAgICBzaGFyZWQuIENoYW5uZWxzIGFyZSBjZW50cmFsIHRvIHdyaXRpbmcgcGFyYWxsZWwgY29kZSBhbmQgc3VwcG9ydCBjb25jdXJyZW50IGFjY2VzcyBhbmQgZXhlY3V0aW9uIGJ5CiAgICAgKiAgICAgbmVjZXNzaXR5LCBhbmQgc28gbWF5IGJlIHNoYXJlZC4KICAgICAqCiAgICAgKiBXYXJuaW5nOiBBIHVzZXIgY2xhc3MgdGhhdCBleHRlbmRzIGFuIGludGVybmFsIGNsYXNzIG1heSB1c2UgYSBjdXN0b20gc3RydWN0dXJlIGFzIGRlZmluZWQgYnkgdGhlIGludGVybmFsCiAgICAgKiAgICAgY2xhc3MsIGluIHdoaWNoIGNhc2UgdGhleSBjYW5ub3QgYmUgY29waWVkIGJ5IHZhbHVlIHNhZmVseSwgYW5kIHNvIG1heSBub3QgYmUgc2hhcmVkLgogICAgICoKICAgICAqIEByZXR1cm4gRnV0dXJlfG51bGwgVGhlIHJldHVybiBGdXR1cmUgbXVzdCBub3QgYmUgaWdub3JlZCB3aGVuIHRoZSB0YXNrIGNvbnRhaW5zIGEgcmV0dXJuIG9yIHRocm93CiAgICAgKiAgICAgc3RhdGVtZW50LgogICAgICoKICAgICAqIEB0aHJvd3MgUnVudGltZVxFcnJvclxDbG9zZWQgaWYgXHBhcmFsbGVsXFJ1bnRpbWUgd2FzIGNsb3NlZC4KICAgICAqIEB0aHJvd3MgUnVudGltZVxFcnJvclxJbGxlZ2FsRnVuY3Rpb24gaWYgdGFzayBpcyBhIGNsb3N1cmUgY3JlYXRlZCBmcm9tIGFuIGludGVybmFsIGZ1bmN0aW9uLgogICAgICogQHRocm93cyBSdW50aW1lXEVycm9yXElsbGVnYWxJbnN0cnVjdGlvbiBpZiB0YXNrIGNvbnRhaW5zIGlsbGVnYWwgaW5zdHJ1Y3Rpb25zLgogICAgICogQHRocm93cyBSdW50aW1lXEVycm9yXElsbGVnYWxQYXJhbWV0ZXIgaWYgdGFzayBhY2NlcHRzIG9yIGFyZ3YgY29udGFpbnMgaWxsZWdhbCB2YXJpYWJsZXMuCiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVcRXJyb3JcSWxsZWdhbFJldHVybiBpZiB0YXNrIHJldHVybnMgaWxsZWdhbGx5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcnVuKENsb3N1cmUgJHRhc2ssID9hcnJheSAkYXJndiA9IG51bGwpOiA/RnV0dXJlIHt9CgogICAgLyogSm9pbiAqLwoKICAgIC8qKgogICAgICogU2hhbGwgcmVxdWVzdCB0aGF0IHRoZSBydW50aW1lIHNodXRzZG93bi4KICAgICAqIE5vdGU6IFRhc2tzIHNjaGVkdWxlZCBmb3IgZXhlY3V0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBzaHV0ZG93biBvY2N1cnMuCiAgICAgKgogICAgICogQHRocm93cyBSdW50aW1lXEVycm9yXENsb3NlZCBpZiBSdW50aW1lIHdhcyBhbHJlYWR5IGNsb3NlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlKCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFNoYWxsIGF0dGVtcHQgdG8gZm9yY2UgdGhlIHJ1bnRpbWUgdG8gc2h1dGRvd24uCiAgICAgKgogICAgICogTm90ZTogVGFza3Mgc2NoZWR1bGVkIGZvciBleGVjdXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrIHNoYWxsIGJlIGludGVycnVwdGVkLgogICAgICogV2FybmluZzogSW50ZXJuYWwgZnVuY3Rpb24gY2FsbHMgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGludGVycnVwdGVkLgogICAgICoKICAgICAqIEB0aHJvd3MgUnVudGltZVxFcnJvclxDbG9zZWQgaWYgUnVudGltZSB3YXMgY2xvc2VkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2lsbCgpOiB2b2lkIHt9Cn0KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxFdmVudHNcRXJyb3I7Cgp1c2UgcGFyYWxsZWxcRXZlbnRzXEVycm9yOwoKY2xhc3MgRXhpc3RlbmNlIGV4dGVuZHMgRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxFdmVudHNcRXJyb3I7Cgp1c2UgcGFyYWxsZWxcRXZlbnRzXEVycm9yOwoKY2xhc3MgVGltZW91dCBleHRlbmRzIEVycm9yIHt9Cjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWxcRXZlbnRzXEV2ZW50OwoKZmluYWwgY2xhc3MgVHlwZQp7CiAgICAvKiogRXZlbnQ6OiRvYmplY3Qgd2FzIHJlYWQgaW50byBFdmVudDo6JHZhbHVlICovCiAgICBwdWJsaWMgY29uc3QgUmVhZCA9IDE7CgogICAgLyoqIElucHV0IGZvciBFdmVudDo6JHNvdXJjZSB3cml0dGVuIHRvIEV2ZW50Ojokb2JqZWN0ICovCiAgICBwdWJsaWMgY29uc3QgV3JpdGUgPSAyOwoKICAgIC8qKiBFdmVudDo6JG9iamVjdCAoQ2hhbm5lbCkgd2FzIGNsb3NlZCAqLwogICAgcHVibGljIGNvbnN0IENsb3NlID0gMzsKCiAgICAvKiogRXZlbnQ6OiRvYmplY3QgKEZ1dHVyZSkgd2FzIGNhbmNlbGxlZCAqLwogICAgcHVibGljIGNvbnN0IENhbmNlbCA9IDU7CgogICAgLyoqIFJ1bnRpbWUgZXhlY3V0aW5nIEV2ZW50Ojokb2JqZWN0IChGdXR1cmUpIHdhcyBraWxsZWQgKi8KICAgIHB1YmxpYyBjb25zdCBLaWxsID0gNjsKCiAgICAvKiogRXZlbnQ6OiRvYmplY3QgKEZ1dHVyZSkgcmFpc2VkIGVycm9yICovCiAgICBwdWJsaWMgY29uc3QgRXJyb3IgPSA0Owp9Cjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWxcRXZlbnRzXEV2ZW50OwoKY2xhc3MgRXJyb3IgZXh0ZW5kcyBccGFyYWxsZWxcRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxFdmVudHNcSW5wdXRcRXJyb3I7Cgp1c2UgcGFyYWxsZWxcRXZlbnRzXElucHV0XEVycm9yOwoKY2xhc3MgRXhpc3RlbmNlIGV4dGVuZHMgRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxFdmVudHNcSW5wdXRcRXJyb3I7Cgp1c2UgcGFyYWxsZWxcRXZlbnRzXElucHV0XEVycm9yOwoKY2xhc3MgSWxsZWdhbFZhbHVlIGV4dGVuZHMgRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxFdmVudHNcSW5wdXQ7CgpjbGFzcyBFcnJvciBleHRlbmRzIFxwYXJhbGxlbFxFcnJvciB7fQo8P3BocAoKbmFtZXNwYWNlIHBhcmFsbGVsXEV2ZW50czsKCmNsYXNzIEVycm9yIGV4dGVuZHMgXHBhcmFsbGVsXEVycm9yIHt9Cjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWxcRXZlbnRzOwoKLyoqCiAqICMjIyBFdmVudHMgSW5wdXQKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEFuIElucHV0IG9iamVjdCBpcyBhIGNvbnRhaW5lciBmb3IgZGF0YSB0aGF0IHRoZSBAc2VlIFxwYXJhbGxlbFxFdmVudHMgb2JqZWN0IHdpbGwgd3JpdGUgdG8gQHNlZSBccGFyYWxsZWxcQ2hhbm5lbAogKiBvYmplY3RzIGFzIHRoZXkgYmVjb21lIGF2YWlsYWJsZS4gTXVsdGlwbGUgZXZlbnQgbG9vcHMgbWF5IHNoYXJlIGFuIElucHV0IGNvbnRhaW5lciAtIHBhcmFsbGVsIGRvZXMgbm90IHZlcmlmeSB0aGUKICogY29udGVudHMgb2YgdGhlIGNvbnRhaW5lciB3aGVuIGl0IGlzIHNldCBhcyB0aGUgaW5wdXQgZm9yIGEgXHBhcmFsbGVsXEV2ZW50cyBvYmplY3QuCiAqCiAqIE5vdGU6IFdoZW4gYSBwYXJhbGxlbFxFdmVudHMgb2JqZWN0IHBlcmZvcm1zIGEgd3JpdGUsIHRoZSB0YXJnZXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dCBvYmplY3QgYXMgaWYKICogQHNlZSBJbnB1dDo6cmVtb3ZlKCkgd2VyZSBjYWxsZWQuCiAqLwpmaW5hbCBjbGFzcyBJbnB1dAp7CiAgICAvKioKICAgICAqIFNoYWxsIHNldCBpbnB1dCBmb3IgdGhlIGdpdmVuIHRhcmdldAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRhcmdldAogICAgICogQHBhcmFtIG1peGVkICAkdmFsdWUKICAgICAqCiAgICAgKiBAdGhyb3dzIElucHV0XEVycm9yXEV4aXN0ZW5jZSBpZiBpbnB1dCBmb3IgdGFyZ2V0IGFscmVhZHkgZXhpc3RzLgogICAgICogQHRocm93cyBJbnB1dFxFcnJvclxJbGxlZ2FsVmFsdWUgaWYgdmFsdWUgaXMgaWxsZWdhbCAob2JqZWN0LCBudWxsKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZChzdHJpbmcgJHRhcmdldCwgJHZhbHVlKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogU2hhbGwgcmVtb3ZlIGlucHV0IGZvciB0aGUgZ2l2ZW4gdGFyZ2V0CiAgICAgKiBAcGFyYW0gc3RyaW5nICR0YXJnZXQKICAgICAqIEB0aHJvd3MgSW5wdXRcRXJyb3JcRXhpc3RlbmNlIGlmIGlucHV0IGZvciB0YXJnZXQgZG9lcyBub3QgZXhpc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmUoc3RyaW5nICR0YXJnZXQpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBTaGFsbCByZW1vdmUgaW5wdXQgZm9yIGFsbCB0YXJnZXRzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhcigpOiB2b2lkIHt9Cn0KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxFdmVudHM7CgovKioKICogV2hlbiBhbiBFdmVudCBpcyByZXR1cm5lZCwgQHNlZSBFdmVudDo6JG9iamVjdCBzaGFsbCBiZSByZW1vdmVkIGZyb20gdGhlIGxvb3AgdGhhdCByZXR1cm5lZCBpdCwgc2hvdWxkIHRoZSBldmVudCBiZSBhCiAqIHdyaXRlIGV2ZW50IHRoZSBJbnB1dCBmb3IgQHNlZSBFdmVudDo6JHNvdXJjZSBzaGFsbCBhbHNvIGJlIHJlbW92ZWQuCiAqLwpmaW5hbCBjbGFzcyBFdmVudAp7CiAgICAvKioKICAgICAqIFNoYWxsIGJlIG9uZSBvZiBFdmVudFxUeXBlIGNvbnN0YW50cwogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljICR0eXBlOwoKICAgIC8qKgogICAgICogU2hhbGwgYmUgdGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQgKHRhcmdldCBuYW1lKQogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljICRzb3VyY2U7CgogICAgLyoqCiAgICAgKiBTaGFsbCBiZSBlaXRoZXIgRnV0dXJlIG9yIENoYW5uZWwKICAgICAqIEB2YXIgb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyAkb2JqZWN0OwoKICAgIC8qKgogICAgICogU2hhbGwgYmUgc2V0IGZvciBSZWFkL0Vycm9yIGV2ZW50cwogICAgICogQHZhciBtaXhlZAogICAgICovCiAgICBwdWJsaWMgJHZhbHVlOwp9Cjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWw7Cgp1c2UgVGhyb3dhYmxlOwoKLyoqCiAqIEEgRnV0dXJlIHJlcHJlc2VudHMgdGhlIHJldHVybiB2YWx1ZSBvciB1bmNhdWdodCBleGNlcHRpb24gZnJvbSBhIHRhc2ssIGFuZCBleHBvc2VzIGFuIEFQSSBmb3IgY2FuY2VsbGF0aW9uLgogKgogKiBUaGUgYmVoYXZpb3VyIG9mIGEgZnV0dXJlIGFsc28gYWxsb3dzIGl0IHRvIGJlIHVzZWQgYXMgYSBzaW1wbGUgc3luY2hyb25pemF0aW9uIHBvaW50IGV2ZW4gd2hlcmUgdGhlIHRhc2sgZG9lcyBub3QKICogcmV0dXJuIGEgdmFsdWUgZXhwbGljaXRseS4KICoKICogQHNlZSBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9jbGFzcy5wYXJhbGxlbC1mdXR1cmUucGhwCiAqLwpmaW5hbCBjbGFzcyBGdXR1cmUKewogICAgLyogUmVzb2x1dGlvbiAqLwoKICAgIC8qKgogICAgICogU2hhbGwgcmV0dXJuIChhbmQgaWYgbmVjZXNzYXJ5IHdhaXQgZm9yKSByZXR1cm4gZnJvbSB0YXNrCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICoKICAgICAqIEB0aHJvd3MgRnV0dXJlXEVycm9yIGlmIHdhaXRpbmcgZmFpbGVkIChpbnRlcm5hbCBlcnJvcikuCiAgICAgKiBAdGhyb3dzIEZ1dHVyZVxFcnJvclxLaWxsZWQgaWYgXHBhcmFsbGVsXFJ1bnRpbWUgZXhlY3V0aW5nIHRhc2sgd2FzIGtpbGxlZC4KICAgICAqIEB0aHJvd3MgRnV0dXJlXEVycm9yXENhbmNlbGxlZCBpZiB0YXNrIHdhcyBjYW5jZWxsZWQuCiAgICAgKiBAdGhyb3dzIEZ1dHVyZVxFcnJvclxGb3JlaWduIGlmIHRhc2sgcmFpc2VkIGFuIHVucmVjb2duaXplZCB1bmNhdWdodCBleGNlcHRpb24uCiAgICAgKiBAdGhyb3dzIFRocm93YWJsZSBTaGFsbCByZXRocm93IFxUaHJvd2FibGUgdW5jYXVnaHQgaW4gdGFzawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsdWUoKSB7fQoKICAgIC8qIFN0YXRlICovCgogICAgLyoqCiAgICAgKiBTaGFsbCBpbmRpY2F0ZSBpZiB0aGUgdGFzayBpcyBjb21wbGV0ZWQKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZG9uZSgpOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBTaGFsbCBpbmRpY2F0ZSBpZiB0aGUgdGFzayB3YXMgY2FuY2VsbGVkCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhbmNlbGxlZCgpOiBib29sIHt9CgogICAgLyogQ2FuY2VsbGF0aW9uICovCgogICAgLyoqCiAgICAgKiBTaGFsbCB0cnkgdG8gY2FuY2VsIHRoZSB0YXNrCiAgICAgKiBOb3RlOiBJZiB0YXNrIGlzIHJ1bm5pbmcsIGl0IHdpbGwgYmUgaW50ZXJydXB0ZWQuCiAgICAgKiBXYXJuaW5nOiBJbnRlcm5hbCBmdW5jdGlvbiBjYWxscyBpbiBwcm9ncmVzcyBjYW5ub3QgYmUgaW50ZXJydXB0ZWQuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKgogICAgICogQHRocm93cyBGdXR1cmVcRXJyb3JcS2lsbGVkIGlmIFxwYXJhbGxlbFxSdW50aW1lIGV4ZWN1dGluZyB0YXNrIHdhcyBraWxsZWQuCiAgICAgKiBAdGhyb3dzIEZ1dHVyZVxFcnJvclxDYW5jZWxsZWQgaWYgdGFzayB3YXMgYWxyZWFkeSBjYW5jZWxsZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjYW5jZWwoKTogYm9vbCB7fQp9Cjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWxcU3luY1xFcnJvcjsKCnVzZSBwYXJhbGxlbFxTeW5jXEVycm9yOwoKY2xhc3MgSWxsZWdhbFZhbHVlIGV4dGVuZHMgRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxTeW5jOwoKY2xhc3MgRXJyb3IgZXh0ZW5kcyBccGFyYWxsZWxcRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxSdW50aW1lXFR5cGU7CgpjbGFzcyBVbmF2YWlsYWJsZSB7fQo8P3BocAoKbmFtZXNwYWNlIHBhcmFsbGVsXFJ1bnRpbWVcRXJyb3I7Cgp1c2UgcGFyYWxsZWxcUnVudGltZVxFcnJvcjsKCmNsYXNzIElsbGVnYWxGdW5jdGlvbiBleHRlbmRzIEVycm9yIHt9Cjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWxcUnVudGltZVxFcnJvcjsKCnVzZSBwYXJhbGxlbFxSdW50aW1lXEVycm9yOwoKY2xhc3MgQm9vdHN0cmFwIGV4dGVuZHMgRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxSdW50aW1lXEVycm9yOwoKdXNlIHBhcmFsbGVsXFJ1bnRpbWVcRXJyb3I7CgpjbGFzcyBJbGxlZ2FsUGFyYW1ldGVyIGV4dGVuZHMgRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxSdW50aW1lXEVycm9yOwoKdXNlIHBhcmFsbGVsXFJ1bnRpbWVcRXJyb3I7CgpjbGFzcyBDbG9zZWQgZXh0ZW5kcyBFcnJvciB7fQo8P3BocAoKbmFtZXNwYWNlIHBhcmFsbGVsXFJ1bnRpbWVcRXJyb3I7Cgp1c2UgcGFyYWxsZWxcUnVudGltZVxFcnJvcjsKCmNsYXNzIEtpbGxlZCBleHRlbmRzIEVycm9yIHt9Cjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWxcUnVudGltZVxFcnJvcjsKCnVzZSBwYXJhbGxlbFxSdW50aW1lXEVycm9yOwoKY2xhc3MgSWxsZWdhbEluc3RydWN0aW9uIGV4dGVuZHMgRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxSdW50aW1lXEVycm9yOwoKdXNlIHBhcmFsbGVsXFJ1bnRpbWVcRXJyb3I7CgpjbGFzcyBJbGxlZ2FsVmFyaWFibGUgZXh0ZW5kcyBFcnJvciB7fQo8P3BocAoKbmFtZXNwYWNlIHBhcmFsbGVsXFJ1bnRpbWVcRXJyb3I7Cgp1c2UgcGFyYWxsZWxcUnVudGltZVxFcnJvcjsKCmNsYXNzIElsbGVnYWxSZXR1cm4gZXh0ZW5kcyBFcnJvciB7fQo8P3BocAoKbmFtZXNwYWNlIHBhcmFsbGVsXFJ1bnRpbWVcT2JqZWN0OwoKY2xhc3MgVW5hdmFpbGFibGUge30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxSdW50aW1lOwoKY2xhc3MgRXJyb3IgZXh0ZW5kcyBccGFyYWxsZWxcRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbDsKCi8qKgogKiAjIyMgVW5idWZmZXJlZCBDaGFubmVscwogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogQW4gdW5idWZmZXJlZCBjaGFubmVsIHdpbGwgYmxvY2sgb24gY2FsbHMgdG8gQHNlZSBDaGFubmVsOjpzZW5kKCkgdW50aWwgdGhlcmUgaXMgYSByZWNlaXZlciwgYW5kIGJsb2NrIG9uIGNhbGxzCiAqIHRvIEBzZWUgQ2hhbm5lbDo6cmVjdigpIHVudGlsIHRoZXJlIGlzIGEgc2VuZGVyLiBUaGlzIG1lYW5zIGFuIHVuYnVmZmVyZWQgY2hhbm5lbCBpcyBub3Qgb25seSBhIHdheSB0byBzaGFyZQogKiBkYXRhIGFtb25nIHRhc2tzIGJ1dCBhbHNvIGEgc2ltcGxlIG1ldGhvZCBvZiBzeW5jaHJvbml6YXRpb24uCiAqCiAqICBBbiB1bmJ1ZmZlcmVkIGNoYW5uZWwgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIHNoYXJlIGRhdGEgYW1vbmcgdGFza3MsIHJlcXVpcmluZyB0aGUgbGVhc3QgY29weWluZy4KICoKICogIyMjIEJ1ZmZlcmVkIENoYW5uZWxzCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiAgQSBidWZmZXJlZCBjaGFubmVsIHdpbGwgbm90IGJsb2NrIG9uIGNhbGxzIHRvIEBzZWUgQ2hhbm5lbDo6c2VuZCgpIHVudGlsIGNhcGFjaXR5IGlzIHJlYWNoZWQsIGNhbGxzIHRvCiAqIEBzZWUgQ2hhbm5lbDo6cmVjdigpIHdpbGwgYmxvY2sgdW50aWwgdGhlcmUgaXMgZGF0YSBpbiB0aGUgYnVmZmVyLgogKgogKiAjIyMgQ2xvc3VyZXMgb3ZlciBDaGFubmVscwogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogQSBwb3dlcmZ1bCBmZWF0dXJlIG9mIHBhcmFsbGVsIGNoYW5uZWxzIGlzIHRoYXQgdGhleSBhbGxvdyB0aGUgZXhjaGFuZ2Ugb2YgY2xvc3VyZXMgYmV0d2VlbiB0YXNrcyAoYW5kIHJ1bnRpbWVzKS4KICoKICogV2hlbiBhIGNsb3N1cmUgaXMgc2VudCBvdmVyIGEgY2hhbm5lbCB0aGUgY2xvc3VyZSBpcyBidWZmZXJlZCwgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIGJ1ZmZlcmluZyBvZiB0aGUgY2hhbm5lbAogKiAgICAgdHJhbnNtaXR0aW5nIHRoZSBjbG9zdXJlLCBidXQgaXQgZG9lcyBlZmZlY3QgdGhlIHN0YXRpYyBzY29wZSBpbnNpZGUgdGhlIGNsb3N1cmU6IFRoZSBzYW1lIGNsb3N1cmUgc2VudCB0bwogKiAgICAgZGlmZmVyZW50IHJ1bnRpbWVzLCBvciB0aGUgc2FtZSBydW50aW1lLCB3aWxsIG5vdCBzaGFyZSB0aGVpciBzdGF0aWMgc2NvcGUuCiAqCiAqIFRoaXMgbWVhbnMgdGhhdCB3aGVuZXZlciBhIGNsb3N1cmUgaXMgZXhlY3V0ZWQgdGhhdCB3YXMgdHJhbnNtaXR0ZWQgYnkgYSBjaGFubmVsLCBzdGF0aWMgc3RhdGUgd2lsbCBiZSBhcyBpdCB3YXMKICogICAgIHdoZW4gdGhlIGNsb3N1cmUgd2FzIGJ1ZmZlcmVkLgogKgogKiAjIyMgQW5vbnltb3VzIENoYW5uZWxzCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBUaGUgYW5vbnltb3VzIGNoYW5uZWwgY29uc3RydWN0b3IgYWxsb3dzIHRoZSBwcm9ncmFtbWVyIHRvIGF2b2lkIGFzc2lnbmluZyBuYW1lcyB0byBldmVyeSBjaGFubmVsOiBwYXJhbGxlbCB3aWxsCiAqICAgICBnZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lIGZvciBhbm9ueW1vdXMgY2hhbm5lbHMuCiAqLwpmaW5hbCBjbGFzcyBDaGFubmVsCnsKICAgIC8qKgogICAgICogQ29uc3RhbnQgZm9yIEluZmluaXRlbHkgQnVmZmVyZWQKICAgICAqLwogICAgcHVibGljIGNvbnN0IEluZmluaXRlID0gLTE7CgogICAgLyogQW5vbnltb3VzIENvbnN0cnVjdG9yICovCgogICAgLyoqCiAgICAgKiBTaGFsbCBtYWtlIGFuIGFub255bW91cyB1bmJ1ZmZlcmVkIGNoYW5uZWwKICAgICAqIFNoYWxsIG1ha2UgYW4gYW5vbnltb3VzIGJ1ZmZlcmVkIGNoYW5uZWwgd2l0aCB0aGUgZ2l2ZW4gY2FwYWNpdHkKICAgICAqCiAgICAgKiBAcGFyYW0gbnVsbHxpbnQgJGNhcGFjaXR5IE1heSBiZSBDaGFubmVsOjpJbmZpbml0ZSBvciBhIHBvc2l0aXZlIGludGVnZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KD9pbnQgJGNhcGFjaXR5ID0gbnVsbCkge30KCiAgICAvKiBBY2Nlc3MgKi8KCiAgICAvKioKICAgICAqIFNoYWxsIG1ha2UgYW4gdW5idWZmZXJlZCBjaGFubmVsIHdpdGggdGhlIGdpdmVuIG5hbWUKICAgICAqIFNoYWxsIG1ha2UgYSBidWZmZXJlZCBjaGFubmVsIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGNhcGFjaXR5CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSAgICAgVGhlIG5hbWUgb2YgdGhlIGNoYW5uZWwuCiAgICAgKiBAcGFyYW0gbnVsbHxpbnQgJGNhcGFjaXR5IE1heSBiZSBDaGFubmVsOjpJbmZpbml0ZSBvciBhIHBvc2l0aXZlIGludGVnZXIKICAgICAqCiAgICAgKiBAcmV0dXJuIENoYW5uZWwKICAgICAqCiAgICAgKiBAdGhyb3dzIENoYW5uZWxcRXJyb3JcRXhpc3RlbmNlIGlmIGNoYW5uZWwgYWxyZWFkeSBleGlzdHMuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFrZShzdHJpbmcgJG5hbWUsID9pbnQgJGNhcGFjaXR5ID0gbnVsbCk6IENoYW5uZWwge30KCiAgICAvKioKICAgICAqIFNoYWxsIG9wZW4gdGhlIGNoYW5uZWwgd2l0aCB0aGUgZ2l2ZW4gbmFtZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEByZXR1cm4gQ2hhbm5lbAogICAgICoKICAgICAqIEB0aHJvd3MgQ2hhbm5lbFxFcnJvclxFeGlzdGVuY2UgaWYgY2hhbm5lbCBkb2VzIG5vdCBleGlzdC4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvcGVuKHN0cmluZyAkbmFtZSk6IENoYW5uZWwge30KCiAgICAvKiBTaGFyaW5nICovCgogICAgLyoqCiAgICAgKiBTaGFsbCBzZW5kIHRoZSBnaXZlbiB2YWx1ZSBvbiB0aGlzIGNoYW5uZWwKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqCiAgICAgKiBAdGhyb3dzIENoYW5uZWxcRXJyb3JcQ2xvc2VkIGlmIGNoYW5uZWwgaXMgY2xvc2VkLgogICAgICogQHRocm93cyBDaGFubmVsXEVycm9yXElsbGVnYWxWYWx1ZSBpZiB2YWx1ZSBpcyBpbGxlZ2FsLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZCgkdmFsdWUpOiB2b2lkIHt9CgogICAgLyoqCiAgICAgKiBTaGFsbCByZWN2IGEgdmFsdWUgZnJvbSB0aGlzIGNoYW5uZWwKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqCiAgICAgKiBAdGhyb3dzIENoYW5uZWxcRXJyb3JcQ2xvc2VkIGlmIGNoYW5uZWwgaXMgY2xvc2VkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVjdigpIHt9CgogICAgLyogQ2xvc2luZyAqLwoKICAgIC8qKgogICAgICogU2hhbGwgY2xvc2UgdGhpcyBjaGFubmVsCiAgICAgKiBAdGhyb3dzIENoYW5uZWxcRXJyb3JcQ2xvc2VkIGlmIGNoYW5uZWwgaXMgY2xvc2VkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogUmV0dXJucyBuYW1lIG9mIGNoYW5uZWwKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCk6IHN0cmluZyB7fQp9Cjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWxcQ2hhbm5lbFxFcnJvcjsKCnVzZSBwYXJhbGxlbFxDaGFubmVsXEVycm9yOwoKY2xhc3MgRXhpc3RlbmNlIGV4dGVuZHMgRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxDaGFubmVsXEVycm9yOwoKdXNlIHBhcmFsbGVsXENoYW5uZWxcRXJyb3I7CgpjbGFzcyBJbGxlZ2FsVmFsdWUgZXh0ZW5kcyBFcnJvciB7fQo8P3BocAoKbmFtZXNwYWNlIHBhcmFsbGVsXENoYW5uZWxcRXJyb3I7Cgp1c2UgcGFyYWxsZWxcQ2hhbm5lbFxFcnJvcjsKCmNsYXNzIENsb3NlZCBleHRlbmRzIEVycm9yIHt9Cjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWxcQ2hhbm5lbDsKCmNsYXNzIEVycm9yIGV4dGVuZHMgXHBhcmFsbGVsXEVycm9yIHt9Cjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWw7Cgp1c2UgQ291bnRhYmxlOwp1c2UgcGFyYWxsZWxcRXZlbnRzXEV2ZW50Owp1c2UgcGFyYWxsZWxcRXZlbnRzXElucHV0Owp1c2UgVHJhdmVyc2FibGU7CgovKioKICogIyMjIFRoZSBFdmVudCBMb29wCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBUaGUgRXZlbnQgbG9vcCBtb25pdG9ycyB0aGUgc3RhdGUgb2Ygc2V0cyBvZiBmdXR1cmVzIGFuZCBvciBjaGFubmVscyAodGFyZ2V0cykgaW4gb3JkZXIgdG8gcGVyZm9ybSByZWFkCiAqIChGdXR1cmU6OnZhbHVlKCksIENoYW5uZWw6OnJlY3YoKSkgYW5kIHdyaXRlIChDaGFubmVsOjpzZW5kKCkpIG9wZXJhdGlvbnMgYXMgdGhlIHRhcmdldHMgYmVjb21lIGF2YWlsYWJsZSBhbmQgdGhlCiAqIG9wZXJhdGlvbnMgbWF5IGJlIHBlcmZvcm1lZCB3aXRob3V0IGJsb2NraW5nIHRoZSBldmVudCBsb29wLgogKi8KZmluYWwgY2xhc3MgRXZlbnRzIGltcGxlbWVudHMgQ291bnRhYmxlLCBUcmF2ZXJzYWJsZQp7CiAgICAvKiBJbnB1dCAqLwoKICAgIC8qKgogICAgICogU2hhbGwgc2V0IGlucHV0IGZvciB0aGlzIGV2ZW50IGxvb3AKICAgICAqIEBwYXJhbSBFdmVudHNcSW5wdXQgJGlucHV0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJbnB1dChJbnB1dCAkaW5wdXQpOiB2b2lkIHt9CgogICAgLyogVGFyZ2V0cyAqLwoKICAgIC8qKgogICAgICogU2hhbGwgd2F0Y2ggZm9yIGV2ZW50cyBvbiB0aGUgZ2l2ZW4gY2hhbm5lbAogICAgICogQHBhcmFtIENoYW5uZWwgJGNoYW5uZWwKICAgICAqCiAgICAgKiBAdGhyb3dzIEV2ZW50c1xFcnJvclxFeGlzdGVuY2UgaWYgY2hhbm5lbCB3YXMgYWxyZWFkeSBhZGRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZENoYW5uZWwoQ2hhbm5lbCAkY2hhbm5lbCk6IHZvaWQge30KCiAgICAvKioKICAgICAqIFNoYWxsIHdhdGNoIGZvciBldmVudHMgb24gdGhlIGdpdmVuIGZ1dHVyZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqIEBwYXJhbSBGdXR1cmUgJGZ1dHVyZQogICAgICoKICAgICAqIEB0aHJvd3MgRXZlbnRzXEVycm9yXEV4aXN0ZW5jZSBpZiB0YXJnZXQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSB3YXMgYWxyZWFkeSBhZGRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZEZ1dHVyZShzdHJpbmcgJG5hbWUsIEZ1dHVyZSAkZnV0dXJlKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogU2hhbGwgcmVtb3ZlIHRoZSBnaXZlbiB0YXJnZXQKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRhcmdldAogICAgICoKICAgICAqIEB0aHJvd3MgRXZlbnRzXEVycm9yXEV4aXN0ZW5jZSBpZiB0YXJnZXQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSB3YXMgbm90IGZvdW5kLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKHN0cmluZyAkdGFyZ2V0KTogdm9pZCB7fQoKICAgIC8qIEJlaGF2aW91ciAqLwoKICAgIC8qKgogICAgICogU2hhbGwgc2V0IGJsb2NraW5nIG1vZGUKICAgICAqCiAgICAgKiBCeSBkZWZhdWx0IHdoZW4gZXZlbnRzIGFyZSBwb2xsZWQgZm9yLCBibG9ja2luZyB3aWxsIG9jY3VyIChhdCB0aGUgUEhQIGxldmVsKSB1bnRpbCB0aGUgZmlyc3QgZXZlbnQgY2FuIGJlCiAgICAgKiByZXR1cm5lZDogU2V0dGluZyBibG9ja2luZyBtb2RlIHRvIGZhbHNlIHdpbGwgY2F1c2UgcG9sbCB0byByZXR1cm4gY29udHJvbCBpZiB0aGUgZmlyc3QgdGFyZ2V0IHBvbGxlZCBpcyBub3QKICAgICAqIHJlYWR5LgogICAgICoKICAgICAqIFRoaXMgZGlmZmVycyBmcm9tIHNldHRpbmcgYSB0aW1lb3V0IG9mIDAgd2l0aCBAc2VlIEV2ZW50czo6c2V0VGltZW91dCgpLCBzaW5jZSBhIHRpbWVvdXQgb2YgMCwgd2hpbGUKICAgICAqIGFsbG93ZWQsIHdpbGwgY2F1c2UgYW4gZXhjZXB0aW9uIHRvIGJlIHJhaXNlZCwgd2hpY2ggbWF5IGJlIGV4dHJlbWVseSBzbG93IG9yIHdhc3RlZnVsIGlmIHdoYXQgaXMgcmVhbGx5IGRlc2lyZWQKICAgICAqIGlzIG5vbi1ibG9ja2luZyBiZWhhdmlvdXIuCiAgICAgKgogICAgICogQSBub24tYmxvY2tpbmcgbG9vcCBlZmZlY3RzIHRoZSByZXR1cm4gdmFsdWUgb2YgQHNlZSBFdmVudHM6OnBvbGwoKSwgc3VjaCB0aGF0IGl0IG1heSBiZSBudWxsIGJlZm9yZSBhbGwgZXZlbnRzCiAgICAgKiBoYXZlIGJlZW4gcHJvY2Vzc2VkLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRibG9ja2luZwogICAgICoKICAgICAqIEB0aHJvd3MgRXZlbnRzXEVycm9yIGlmIGxvb3AgaGFzIHRpbWVvdXQgc2V0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QmxvY2tpbmcoYm9vbCAkYmxvY2tpbmcpOiB2b2lkIHt9CgogICAgLyogQmVoYXZpb3VyICovCgogICAgLyoqCiAgICAgKiBTaGFsbCBzZXQgdGhlIHRpbWVvdXQgaW4gbWljcm9zZWNvbmRzCiAgICAgKgogICAgICogQnkgZGVmYXVsdCB3aGVuIGV2ZW50cyBhcmUgcG9sbGVkIGZvciwgYmxvY2tpbmcgd2lsbCBvY2N1ciAoYXQgdGhlIFBIUCBsZXZlbCkgdW50aWwgdGhlIGZpcnN0IGV2ZW50IGNhbiBiZQogICAgICogcmV0dXJuZWQ6IFNldHRpbmcgdGhlIHRpbWVvdXQgY2F1c2VzIGFuIGV4Y2VwdGlvbiB0byBiZSB0aHJvd24gd2hlbiB0aGUgdGltZW91dCBpcyByZWFjaGVkLgogICAgICoKICAgICAqIFRoaXMgZGlmZmVycyBmcm9tIHNldHRpbmcgYmxvY2tpbmcgbW9kZSB0byBmYWxzZSB3aXRoIEBzZWUgRXZlbnRzOjpzZXRCbG9ja2luZygpLCB3aGljaCB3aWxsIG5vdCBjYXVzZSBhbgogICAgICogZXhjZXB0aW9uIHRvIGJlIHRocm93bi4KICAgICAqCiAgICAgKiBAdGhyb3dzIEV2ZW50c1xFcnJvciBpZiBsb29wIGlzIG5vbi1ibG9ja2luZy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lb3V0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lb3V0KGludCAkdGltZW91dCk6IHZvaWQge30KCiAgICAvKiBQb2xsaW5nICovCgogICAgLyoqCiAgICAgKiBTaGFsbCBwb2xsIGZvciB0aGUgbmV4dCBldmVudAogICAgICoKICAgICAqIFNob3VsZCB0aGVyZSBiZSBubyB0YXJnZXRzIHJlbWFpbmluZywgbnVsbCBzaGFsbCBiZSByZXR1cm5lZAogICAgICogU2hvdWxkIHRoaXMgYmUgYSBub24tYmxvY2tpbmcgbG9vcCwgYW5kIGJsb2NraW5nIHdvdWxkIG9jY3VyLCBudWxsIHNoYWxsIGJlIHJldHVybmVkCiAgICAgKiBPdGhlcndpc2UsIHRoZSBFdmVudCByZXR1cm5lZCBkZXNjcmliZXMgdGhlIGV2ZW50LgogICAgICoKICAgICAqIEByZXR1cm4gRXZlbnR8bnVsbAogICAgICoKICAgICAqIEB0aHJvd3MgRXZlbnRzXEVycm9yXFRpbWVvdXQgaWYgdGltZW91dCBpcyB1c2VkIGFuZCByZWFjaGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9sbCgpOiA/RXZlbnQge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudCgpOiBpbnQge30KfQo8P3BocAoKbmFtZXNwYWNlIHBhcmFsbGVsXEZ1dHVyZVxFcnJvcjsKCnVzZSBwYXJhbGxlbFxFcnJvcjsKCmNsYXNzIEZvcmVpZ24gZXh0ZW5kcyBFcnJvciB7fQo8P3BocAoKbmFtZXNwYWNlIHBhcmFsbGVsXEZ1dHVyZVxFcnJvcjsKCnVzZSBwYXJhbGxlbFxFcnJvcjsKCmNsYXNzIEtpbGxlZCBleHRlbmRzIEVycm9yIHt9Cjw/cGhwCgpuYW1lc3BhY2UgcGFyYWxsZWxcRnV0dXJlXEVycm9yOwoKdXNlIHBhcmFsbGVsXEVycm9yOwoKY2xhc3MgQ2FuY2VsbGVkIGV4dGVuZHMgRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbFxGdXR1cmU7CgpjbGFzcyBFcnJvciBleHRlbmRzIFxwYXJhbGxlbFxFcnJvciB7fQo8P3BocAoKbmFtZXNwYWNlIHBhcmFsbGVsOwoKY2xhc3MgRXJyb3IgZXh0ZW5kcyBcRXJyb3Ige30KPD9waHAKCm5hbWVzcGFjZSBwYXJhbGxlbDsKCi8qKgogKiBUaGUgU3luYyBjbGFzcyBwcm92aWRlcyBhY2Nlc3MgdG8gbG93IGxldmVsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBtdXRleCwgY29uZGl0aW9uIHZhcmlhYmxlcywgYW5kIGFsbG93cyB0aGUKICogaW1wbGVtZW50YXRpb24gb2Ygc2VtYXBob3Jlcy4KICoKICogU3luY2hyb25pemF0aW9uIGZvciBtb3N0IGFwcGxpY2F0aW9ucyBpcyBtdWNoIGJldHRlciBpbXBsZW1lbnRlZCB1c2luZyBjaGFubmVscywgaG93ZXZlciwgaW4gc29tZSBjYXNlcyBhdXRob3JzIG9mCiAqIGxvdyBsZXZlbCBjb2RlIG1heSBmaW5kIGl0IHVzZWZ1bCB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGVzZSBsb3dlciBsZXZlbCBtZWNoYW5pc21zLgogKi8KZmluYWwgY2xhc3MgU3luYwp7CiAgICAvKiBDb25zdHJ1Y3RvciAqLwoKICAgIC8qKgogICAgICogU2hhbGwgY29uc3RydWN0IGEgbmV3IHN5bmNocm9uaXphdGlvbiBvYmplY3Qgd2l0aCBubyB2YWx1ZQogICAgICogU2hhbGwgY29uc3RydWN0IGEgbmV3IHN5bmNocm9uaXphdGlvbiBvYmplY3QgY29udGFpbmluZyB0aGUgZ2l2ZW4gc2NhbGFyIHZhbHVlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xpbnR8ZmxvYXR8Ym9vbCAkdmFsdWUKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bmNcRXJyb3JcSWxsZWdhbFZhbHVlIGlmIHZhbHVlIGlzIG5vbi1zY2FsYXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUgPSBudWxsKSB7fQoKICAgIC8qIEFjY2VzcyAqLwoKICAgIC8qKgogICAgICogU2hhbGwgYXRvbWljYWxseSByZXR1cm4gdGhlIHN5bmNocm9uaXphdGlvbiBvYmplY3RzIHZhbHVlCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xpbnR8ZmxvYXR8Ym9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCkge30KCiAgICAvKioKICAgICAqIFNoYWxsIGF0b21pY2FsbHkgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgc3luY2hyb25pemF0aW9uIG9iamVjdAogICAgICogQHBhcmFtIHN0cmluZ3xpbnR8ZmxvYXR8Ym9vbCAkdmFsdWUKICAgICAqCiAgICAgKiBAdGhyb3dzIFN5bmNcRXJyb3JcSWxsZWdhbFZhbHVlIGlmIHZhbHVlIGlzIG5vbi1zY2FsYXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoJHZhbHVlKSB7fQoKICAgIC8qIFN5bmNocm9uaXphdGlvbiAqLwoKICAgIC8qKgogICAgICogU2hhbGwgd2FpdCBmb3Igbm90aWZpY2F0aW9uIG9uIHRoaXMgc3luY2hyb25pemF0aW9uIG9iamVjdAogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3YWl0KCk6IGJvb2wge30KCiAgICAvKioKICAgICAqIFNoYWxsIG5vdGlmeSBvbmUgKGJ5IGRlZmF1bHQpIG9yIGFsbCB0aHJlYWRzIHdhaXRpbmcgb24gdGhlIHN5bmNocm9uaXphdGlvbiBvYmplY3QKICAgICAqIEBwYXJhbSBib29sICRhbGwKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG5vdGlmeShib29sICRhbGwgPSBudWxsKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogU2hhbGwgZXhjbHVzaXZlbHkgZW50ZXIgaW50byB0aGUgY3JpdGljYWwgY29kZQogICAgICogQHBhcmFtIGNhbGxhYmxlICRibG9jawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19pbnZva2UoY2FsbGFibGUgJGJsb2NrKSB7fQp9Cjw/cGhwCgovKioKICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbGliZ2Vvcy9waHAtZ2Vvcy9ibG9iL21hc3Rlci90ZXN0cy8wMDBfR2VuZXJhbC5waHB0CiAqLwpkZWZpbmUoJ0dFT1NCVUZfQ0FQX1JPVU5EJywgMSk7CgpkZWZpbmUoJ0dFT1NCVUZfQ0FQX0ZMQVQnLCAyKTsKCmRlZmluZSgnR0VPU0JVRl9DQVBfU1FVQVJFJywgMyk7CgpkZWZpbmUoJ0dFT1NCVUZfSk9JTl9ST1VORCcsIDEpOwoKZGVmaW5lKCdHRU9TQlVGX0pPSU5fTUlUUkUnLCAyKTsKCmRlZmluZSgnR0VPU0JVRl9KT0lOX0JFVkVMJywgMyk7CgpkZWZpbmUoJ0dFT1NfUE9JTlQnLCAwKTsKCmRlZmluZSgnR0VPU19MSU5FU1RSSU5HJywgMSk7CgpkZWZpbmUoJ0dFT1NfTElORUFSUklORycsIDIpOwoKZGVmaW5lKCdHRU9TX1BPTFlHT04nLCAzKTsKCmRlZmluZSgnR0VPU19NVUxUSVBPSU5UJywgNCk7CgpkZWZpbmUoJ0dFT1NfTVVMVElMSU5FU1RSSU5HJywgNSk7CgpkZWZpbmUoJ0dFT1NfTVVMVElQT0xZR09OJywgNik7CgpkZWZpbmUoJ0dFT1NfR0VPTUVUUllDT0xMRUNUSU9OJywgNyk7CgpkZWZpbmUoJ0dFT1NWQUxJRF9BTExPV19TRUxGVE9VQ0hJTkdfUklOR19GT1JNSU5HX0hPTEUnLCAxKTsKCmRlZmluZSgnR0VPU1JFTEFURV9CTlJfTU9EMicsIDEpOwoKZGVmaW5lKCdHRU9TUkVMQVRFX0JOUl9PR0MnLCAxKTsKCmRlZmluZSgnR0VPU1JFTEFURV9CTlJfRU5EUE9JTlQnLCAyKTsKCmRlZmluZSgnR0VPU1JFTEFURV9CTlJfTVVMVElWQUxFTlRfRU5EUE9JTlQnLCAzKTsKCmRlZmluZSgnR0VPU1JFTEFURV9CTlJfTU9OT1ZBTEVOVF9FTkRQT0lOVCcsIDQpOwoKLyoqCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBHRU9TVmVyc2lvbigpOiBzdHJpbmcge30KCi8qKgogKiBAcGFyYW0gR0VPU0dlb21ldHJ5ICRnZW9tMQogKiBAcGFyYW0gR0VPU0dlb21ldHJ5ICRnZW9tMgogKiBAcmV0dXJuIEdFT1NHZW9tZXRyeQogKiBAdGhyb3dzIEV4Y2VwdGlvbgogKi8KZnVuY3Rpb24gR0VPU1NoYXJlZFBhdGhzKEdFT1NHZW9tZXRyeSAkZ2VvbTEsIEdFT1NHZW9tZXRyeSAkZ2VvbTIpOiBHRU9TR2VvbWV0cnkge30KCi8qKgogKiBAcGFyYW0gR0VPU0dlb21ldHJ5ICRnZW9tCiAqIEByZXR1cm4gYXJyYXkKICogQHRocm93cyBFeGNlcHRpb24KICovCmZ1bmN0aW9uIEdFT1NMaW5lTWVyZ2UoR0VPU0dlb21ldHJ5ICRnZW9tKTogYXJyYXkge30KCi8qKgogKiBAcGFyYW0gc3RyaW5nICRtYXRyaXgKICogQHBhcmFtIHN0cmluZyAkcGF0dGVybgogKiBAcmV0dXJuIGJvb2wKICogQHRocm93cyBFeGNlcHRpb24KICovCmZ1bmN0aW9uIEdFT1NSZWxhdGVNYXRjaChzdHJpbmcgJG1hdHJpeCwgc3RyaW5nICRwYXR0ZXJuKTogYm9vbCB7fQoKLyoqCiAqIEBwYXJhbSBHRU9TR2VvbWV0cnkgJGdlb20KICogQHJldHVybiBhcnJheQogKiAgICAtICdyaW5ncycKICogICAgICAgIFR5cGU6IGFycmF5IG9mIEdFT1NHZW9tZXRyeQogKiAgICAgICAgUmluZ3MgdGhhdCBjYW4gYmUgZm9ybWVkIGJ5IHRoZSBjb3N0aXR1ZW50CiAqICAgICAgICBsaW5ld29yayBvZiBnZW9tZXRyeS4KICogICAgLSAnY3V0X2VkZ2VzJyAob3B0aW9uYWwpCiAqICAgICAgICBUeXBlOiBhcnJheSBvZiBHRU9TR2VvbWV0cnkKICogICAgICAgIEVkZ2VzIHdoaWNoIGFyZSBjb25uZWN0ZWQgYXQgYm90aCBlbmRzIGJ1dAogKiAgICAgICAgd2hpY2ggZG8gbm90IGZvcm0gcGFydCBvZiBwb2x5Z29uLgogKiAgICAtICdkYW5nbGVzJwogKiAgICAgICAgVHlwZTogYXJyYXkgb2YgR0VPU0dlb21ldHJ5CiAqICAgICAgICBFZGdlcyB3aGljaCBoYXZlIG9uZSBvciBib3RoIGVuZHMgd2hpY2ggYXJlCiAqICAgICAgICBub3QgaW5jaWRlbnQgb24gYW5vdGhlciBlZGdlIGVuZHBvaW50CiAqICAgIC0gJ2ludmFsaWRfcmluZ3MnCiAqICAgICAgICBUeXBlOiBhcnJheSBvZiBHRU9TR2VvbWV0cnkKICogICAgICAgIEVkZ2VzIHdoaWNoIGZvcm0gcmluZ3Mgd2hpY2ggYXJlIGludmFsaWQKICogICAgICAgIChlLmcuIHRoZSBjb21wb25lbnQgbGluZXMgY29udGFpbiBhIHNlbGYtaW50ZXJzZWN0aW9uKQogKiBAdGhyb3dzIEV4Y2VwdGlvbgogKi8KZnVuY3Rpb24gR0VPU1BvbHlnb25pemUoR0VPU0dlb21ldHJ5ICRnZW9tKTogYXJyYXkge30KCi8qKgogKiBDbGFzcyBHRU9TV0tUUmVhZGVyCiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2xpYmdlb3MvcGhwLWdlb3MvYmxvYi9tYXN0ZXIvdGVzdHMvMDAzX1dLVFJlYWRlci5waHB0CiAqLwpjbGFzcyBHRU9TV0tUUmVhZGVyCnsKICAgIC8qKgogICAgICogR0VPU1dLVFJlYWRlciBjb25zdHJ1Y3Rvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHdrdAogICAgICogQHJldHVybiBHRU9TR2VvbWV0cnkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKHN0cmluZyAkd2t0KTogR0VPU0dlb21ldHJ5IHt9Cn0KCi8qKgogKiBDbGFzcyBHRU9TV0tUV3JpdGVyCiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2xpYmdlb3MvcGhwLWdlb3MvYmxvYi9tYXN0ZXIvdGVzdHMvMDAyX1dLVFdyaXRlci5waHB0CiAqLwpjbGFzcyBHRU9TV0tUV3JpdGVyCnsKICAgIC8qKgogICAgICogR0VPU1dLVFdyaXRlciBjb25zdHJ1Y3Rvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBHRU9TR2VvbWV0cnkgJGdlb20KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoR0VPU0dlb21ldHJ5ICRnZW9tKTogc3RyaW5nIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYm9vbCAkdHJpbQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VHJpbShib29sICR0cmltKTogdm9pZCB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkcHJlY2lzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRSb3VuZGluZ1ByZWNpc2lvbihpbnQgJHByZWNpc2lvbik6IHZvaWQge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGRpbWVuc2lvbgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE91dHB1dERpbWVuc2lvbihpbnQgJGRpbWVuc2lvbik6IHZvaWQge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPdXRwdXREaW1lbnNpb24oKTogaW50IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYm9vbCAkb2xkM2QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE9sZDNEKGJvb2wgJG9sZDNkKTogdm9pZCB7fQp9CgovKioKICogQ2xhc3MgR0VPU0dlb21ldHJ5CiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2xpYmdlb3MvcGhwLWdlb3MvYmxvYi9tYXN0ZXIvdGVzdHMvMDAxX0dlb21ldHJ5LnBocHQKICovCmNsYXNzIEdFT1NHZW9tZXRyeQp7CiAgICAvKioKICAgICAqIEdFT1NHZW9tZXRyeSBjb25zdHJ1Y3Rvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBHRU9TR2VvbWV0cnkgJGdlb20KICAgICAqIEByZXR1cm4gR0VPU0dlb21ldHJ5CiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvamVjdChHRU9TR2VvbWV0cnkgJGdlb20pOiBHRU9TR2VvbWV0cnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkZGlzdGFuY2UKICAgICAqIEBwYXJhbSBib29sICRub3JtYWxpemVkCiAgICAgKiBAcmV0dXJuIEdFT1NHZW9tZXRyeQogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGludGVycG9sYXRlKGZsb2F0ICRkaXN0YW5jZSwgYm9vbCAkbm9ybWFsaXplZCA9IGZhbHNlKTogR0VPU0dlb21ldHJ5IHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gZmxvYXQgJGRpc3RhbmNlCiAgICAgKiBAcGFyYW0gYXJyYXkgJHN0eWxlQXJyYXkKICAgICAqICAgIEtleXMgc3VwcG9ydGVkOgogICAgICogICAgJ3F1YWRfc2VncycKICAgICAqICAgICAgICAgVHlwZTogaW50CiAgICAgKiAgICAgICAgIE51bWJlciBvZiBzZWdtZW50cyB1c2VkIHRvIGFwcHJveGltYXRlCiAgICAgKiAgICAgICAgIGEgcXVhcnRlciBjaXJjbGUgKGRlZmF1bHRzIHRvIDgpLgogICAgICogICAgJ2VuZGNhcCcKICAgICAqICAgICAgICAgVHlwZTogbG9uZwogICAgICogICAgICAgICBFbmRjYXAgc3R5bGUgKGRlZmF1bHRzIHRvIEdFT1NCVUZfQ0FQX1JPVU5EKQogICAgICogICAgJ2pvaW4nCiAgICAgKiAgICAgICAgIFR5cGU6IGxvbmcKICAgICAqICAgICAgICAgSm9pbiBzdHlsZSAoZGVmYXVsdHMgdG8gR0VPU0JVRl9KT0lOX1JPVU5EKQogICAgICogICAgJ21pdHJlX2xpbWl0JwogICAgICogICAgICAgICBUeXBlOiBkb3VibGUKICAgICAqICAgICAgICAgbWl0cmUgcmF0aW8gbGltaXQgKG9ubHkgYWZmZWN0cyBqb2lucyB3aXRoIEdFT1NCVUZfSk9JTl9NSVRSRSBzdHlsZSkKICAgICAqICAgICAgICAgJ21pdGVyX2xpbWl0JyBpcyBhbHNvIGFjY2VwdGVkIGFzIGEgc3lub255bSBmb3IgJ21pdHJlX2xpbWl0Jy4KICAgICAqICAgICdzaW5nbGVfc2lkZWQnCiAgICAgKiAgICAgICAgIFR5cGU6IGJvb2wKICAgICAqICAgICAgICAgSWYgdHJ1ZSBidWZmZXIgbGluZXMgb25seSBvbiBvbmUgc2lkZSwgc28gdGhhdCB0aGUgaW5wdXQgbGluZQogICAgICogICAgICAgICB3aWxsIGJlIGEgcG9ydGlvbiBvZiB0aGUgYm91bmRhcnkgb2YgdGhlIHJldHVybmVkIHBvbHlnb24uCiAgICAgKiAgICAgICAgIE9ubHkgYXBwbGllcyB0byBsaW5lYWwgaW5wdXQuIERlZmF1bHRzIHRvIGZhbHNlLgogICAgICogQHJldHVybiBHRU9TR2VvbWV0cnkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBidWZmZXIoZmxvYXQgJGRpc3RhbmNlLCBhcnJheSAkc3R5bGVBcnJheSA9IFsKICAgICAgICAncXVhZF9zZWdzJyA9PiA4LAogICAgICAgICdlbmRjYXAnID0+IEdFT1NCVUZfQ0FQX1JPVU5ELAogICAgICAgICdqb2luJyA9PiBHRU9TQlVGX0pPSU5fUk9VTkQsCiAgICAgICAgJ21pdHJlX2xpbWl0JyA9PiA1LjAsCiAgICAgICAgJ3NpbmdsZV9zaWRlZCcgPT4gZmFsc2UKICAgIF0pOiBHRU9TR2VvbWV0cnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkZGlzdGFuY2UKICAgICAqIEBwYXJhbSBhcnJheSAkc3R5bGVBcnJheQogICAgICogICAgS2V5cyBzdXBwb3J0ZWQ6CiAgICAgKiAgICAncXVhZF9zZWdzJwogICAgICogICAgICAgICBUeXBlOiBpbnQKICAgICAqICAgICAgICAgTnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQgdG8gYXBwcm94aW1hdGUKICAgICAqICAgICAgICAgYSBxdWFydGVyIGNpcmNsZSAoZGVmYXVsdHMgdG8gOCkuCiAgICAgKiAgICAnam9pbicKICAgICAqICAgICAgICAgVHlwZTogbG9uZwogICAgICogICAgICAgICBKb2luIHN0eWxlIChkZWZhdWx0cyB0byBHRU9TQlVGX0pPSU5fUk9VTkQpCiAgICAgKiAgICAnbWl0cmVfbGltaXQnCiAgICAgKiAgICAgICAgIFR5cGU6IGRvdWJsZQogICAgICogICAgICAgICBtaXRyZSByYXRpbyBsaW1pdCAob25seSBhZmZlY3RzIGpvaW5zIHdpdGggR0VPU0JVRl9KT0lOX01JVFJFIHN0eWxlKQogICAgICogICAgICAgICAnbWl0ZXJfbGltaXQnIGlzIGFsc28gYWNjZXB0ZWQgYXMgYSBzeW5vbnltIGZvciAnbWl0cmVfbGltaXQnLgogICAgICogQHJldHVybiBHRU9TR2VvbWV0cnkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRDdXJ2ZShmbG9hdCAkZGlzdGFuY2UsIGFycmF5ICRzdHlsZUFycmF5ID0gWwogICAgICAgICdxdWFkX3NlZ3MnID0+IDgsCiAgICAgICAgJ2pvaW4nID0+IEdFT1NCVUZfSk9JTl9ST1VORCwKICAgICAgICAnbWl0cmVfbGltaXQnID0+IDUuMAogICAgXSk6IEdFT1NHZW9tZXRyeSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBHRU9TR2VvbWV0cnkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbnZlbG9wZSgpOiBHRU9TR2VvbWV0cnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBHRU9TR2VvbWV0cnkgJGdlb20KICAgICAqIEByZXR1cm4gR0VPU0dlb21ldHJ5CiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW50ZXJzZWN0aW9uKEdFT1NHZW9tZXRyeSAkZ2VvbSk6IEdFT1NHZW9tZXRyeSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBHRU9TR2VvbWV0cnkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb252ZXhIdWxsKCk6IEdFT1NHZW9tZXRyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIEdFT1NHZW9tZXRyeSAkZ2VvbQogICAgICogQHJldHVybiBHRU9TR2VvbWV0cnkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaWZmZXJlbmNlKEdFT1NHZW9tZXRyeSAkZ2VvbSk6IEdFT1NHZW9tZXRyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIEdFT1NHZW9tZXRyeSAkZ2VvbQogICAgICogQHJldHVybiBHRU9TR2VvbWV0cnkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzeW1EaWZmZXJlbmNlKEdFT1NHZW9tZXRyeSAkZ2VvbSk6IEdFT1NHZW9tZXRyeSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBHRU9TR2VvbWV0cnkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBib3VuZGFyeSgpOiBHRU9TR2VvbWV0cnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBHRU9TR2VvbWV0cnl8bnVsbCAkZ2VvbQogICAgICogQHJldHVybiBHRU9TR2VvbWV0cnkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bmlvbihHRU9TR2VvbWV0cnkgJGdlb20gPSBudWxsKTogR0VPU0dlb21ldHJ5IHt9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIEdFT1NHZW9tZXRyeQogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBvaW50T25TdXJmYWNlKCk6IEdFT1NHZW9tZXRyeSB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBHRU9TR2VvbWV0cnkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjZW50cm9pZCgpOiBHRU9TR2VvbWV0cnkge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBHRU9TR2VvbWV0cnkgJGdlb20KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkcGF0dGVybgogICAgICogQHJldHVybiBib29sfHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbGF0ZShHRU9TR2VvbWV0cnkgJGdlb20sIHN0cmluZyAkcGF0dGVybiA9IG51bGwpIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gR0VPU0dlb21ldHJ5ICRnZW9tCiAgICAgKiBAcGFyYW0gaW50ICRydWxlCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbGF0ZUJvdW5kYXJ5Tm9kZVJ1bGUoR0VPU0dlb21ldHJ5ICRnZW9tLCBpbnQgJHJ1bGUgPSBHRU9TUkVMQVRFX0JOUl9PR0MpOiBzdHJpbmcge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBmbG9hdCAkdG9sZXJhbmNlCiAgICAgKiBAcGFyYW0gYm9vbCAkcHJlc2VydmVUb3BvbG9neQogICAgICogQHJldHVybiBHRU9TR2VvbWV0cnkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzaW1wbGlmeShmbG9hdCAkdG9sZXJhbmNlLCBib29sICRwcmVzZXJ2ZVRvcG9sb2d5ID0gZmFsc2UpOiBHRU9TR2VvbWV0cnkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gR0VPU0dlb21ldHJ5CiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCk6IEdFT1NHZW9tZXRyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIGZsb2F0ICRncmlkU2l6ZQogICAgICogQHBhcmFtIGludCAkZmxhZ3MKICAgICAqIEByZXR1cm4gR0VPU0dlb21ldHJ5CiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UHJlY2lzaW9uKGZsb2F0ICRncmlkU2l6ZSwgaW50ICRmbGFncyA9IDApOiBHRU9TR2VvbWV0cnkge30KCiAgICAvKioKICAgICAqIEByZXR1cm4gZmxvYXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFByZWNpc2lvbigpOiBmbG9hdCB7fQoKICAgIC8qKgogICAgICogQHJldHVybiBHRU9TR2VvbWV0cnkKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleHRyYWN0VW5pcXVlUG9pbnRzKCk6IEdFT1NHZW9tZXRyeSB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIEdFT1NHZW9tZXRyeSAkZ2VvbQogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzam9pbnQoR0VPU0dlb21ldHJ5ICRnZW9tKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIEdFT1NHZW9tZXRyeSAkZ2VvbQogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG91Y2hlcyhHRU9TR2VvbWV0cnkgJGdlb20pOiBib29sIHt9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gR0VPU0dlb21ldHJ5ICRnZW9tCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbnRlcnNlY3RzKEdFT1NHZW9tZXRyeSAkZ2VvbSk6IGJvb2wge30KCiAgICAvKioKICAgICAqIEBwYXJhbSBHRU9TR2VvbWV0cnkgJGdlb20KICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyb3NzZXMoR0VPU0dlb21ldHJ5ICRnZW9tKTogYm9vbCB7fQoKICAgIC8qKgogICAgICogQHBhcmFtIEdFT1NHZW9tZXRyeSAkZ2VvbQogICAgICog